summaryrefslogtreecommitdiff
path: root/macros/latex209
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex209
Initial commit
Diffstat (limited to 'macros/latex209')
-rw-r--r--macros/latex209/contrib/abstr_collect/abstr_collect.sty112
-rw-r--r--macros/latex209/contrib/abstr_collect/abstr_collect.tex8
-rw-r--r--macros/latex209/contrib/acm/acm.bst1134
-rw-r--r--macros/latex209/contrib/acm/acm.sty1123
-rw-r--r--macros/latex209/contrib/acs/acs.bst949
-rw-r--r--macros/latex209/contrib/acs/acsarticle.sty150
-rw-r--r--macros/latex209/contrib/address/3across.tex27
-rw-r--r--macros/latex209/contrib/address/3pre.tex45
-rw-r--r--macros/latex209/contrib/address/Paper.tex745
-rw-r--r--macros/latex209/contrib/address/README14
-rw-r--r--macros/latex209/contrib/address/address.tex558
-rw-r--r--macros/latex209/contrib/address/envelope.tex39
-rw-r--r--macros/latex209/contrib/address/envpre.tex30
-rw-r--r--macros/latex209/contrib/address/example.tex50
-rw-r--r--macros/latex209/contrib/address/letter.tex112
-rw-r--r--macros/latex209/contrib/address/preamble.tex43
-rw-r--r--macros/latex209/contrib/agu/agugrl-sample.tex142
-rw-r--r--macros/latex209/contrib/agu/agugrl.sty238
-rw-r--r--macros/latex209/contrib/agu/agujgr-sample.tex143
-rw-r--r--macros/latex209/contrib/agu/agujgr.sty259
-rw-r--r--macros/latex209/contrib/ams-cd/README5
-rw-r--r--macros/latex209/contrib/ams-cd/cd-doc.pdfbin0 -> 36602 bytes
-rw-r--r--macros/latex209/contrib/ams-cd/cd-doc.tex95
-rw-r--r--macros/latex209/contrib/ams-cd/cd.sty139
l---------macros/latex209/contrib/ans/README1
-rw-r--r--macros/latex209/contrib/ans/ans.sty543
-rw-r--r--macros/latex209/contrib/ans/ansdoc.dvibin0 -> 20992 bytes
-rw-r--r--macros/latex209/contrib/ans/ansdoc.pdfbin0 -> 83145 bytes
-rw-r--r--macros/latex209/contrib/ans/ansdoc.tex490
-rw-r--r--macros/latex209/contrib/ans/ansread.me4
-rw-r--r--macros/latex209/contrib/ans/onceexam.tex46
-rw-r--r--macros/latex209/contrib/apl/apl.readme109
-rw-r--r--macros/latex209/contrib/apl/apl2tex.tex657
-rw-r--r--macros/latex209/contrib/apl/apl2texi.tex5882
-rw-r--r--macros/latex209/contrib/apl/apl2texw.tex2816
-rw-r--r--macros/latex209/contrib/apl/apl_tug.tex1225
-rw-r--r--macros/latex209/contrib/arbeit/arbeit.sty90
-rw-r--r--macros/latex209/contrib/arbeit/arbeit1.tex52
-rw-r--r--macros/latex209/contrib/arbeit/arbeit2.tex47
-rw-r--r--macros/latex209/contrib/arbeit/arbeito.sty90
-rw-r--r--macros/latex209/contrib/arbeit/info.pdfbin0 -> 41710 bytes
-rw-r--r--macros/latex209/contrib/arbeit/info.tex58
-rw-r--r--macros/latex209/contrib/arbeit/info.txt36
l---------macros/latex209/contrib/ascii1
-rw-r--r--macros/latex209/contrib/autotab/autotab.sty45
-rw-r--r--macros/latex209/contrib/autotab/autotab.tex113
-rw-r--r--macros/latex209/contrib/barkom/bar.sty542
-rw-r--r--macros/latex209/contrib/barkom/barkom.dvibin0 -> 21644 bytes
-rw-r--r--macros/latex209/contrib/barkom/barkom.ps732
-rw-r--r--macros/latex209/contrib/barkom/barkom.tex288
-rw-r--r--macros/latex209/contrib/baum/baum.sty116
-rw-r--r--macros/latex209/contrib/baum/baumbsp.tex52
-rw-r--r--macros/latex209/contrib/biblist/README86
-rw-r--r--macros/latex209/contrib/biblist/biblist.bst-dist2110
-rw-r--r--macros/latex209/contrib/biblist/biblist.gde45
-rw-r--r--macros/latex209/contrib/biblist/biblist.pdfbin0 -> 202969 bytes
-rw-r--r--macros/latex209/contrib/biblist/biblist.sty677
-rw-r--r--macros/latex209/contrib/biblist/biblist.tex653
-rw-r--r--macros/latex209/contrib/biemes/crib208.tex1815
-rw-r--r--macros/latex209/contrib/biemes/vg_guide.tex370
-rw-r--r--macros/latex209/contrib/biemes/vg_guide_vg.tex59
-rw-r--r--macros/latex209/contrib/biemes/viewgraph.notes31
-rw-r--r--macros/latex209/contrib/bigsign/README92
-rw-r--r--macros/latex209/contrib/bigsign/bigsdemo.tex12
-rw-r--r--macros/latex209/contrib/bigsign/bigsign.doc166
-rw-r--r--macros/latex209/contrib/bigsign/bigsign.tex87
-rw-r--r--macros/latex209/contrib/bigsign/docstrip.cmd26
-rw-r--r--macros/latex209/contrib/birkhaeuser/birk.sty139
-rw-r--r--macros/latex209/contrib/birkhaeuser/birkhaus.bib21
-rw-r--r--macros/latex209/contrib/birkhaeuser/birkhaus.sty271
-rw-r--r--macros/latex209/contrib/birkhaeuser/birkhaus.tex138
-rw-r--r--macros/latex209/contrib/birkhaeuser/birksample.bib10
-rw-r--r--macros/latex209/contrib/birkhaeuser/birksample.tex80
-rw-r--r--macros/latex209/contrib/bookform/bf10.sty366
-rw-r--r--macros/latex209/contrib/bookform/bf11.sty366
-rw-r--r--macros/latex209/contrib/bookform/bf12.sty367
-rw-r--r--macros/latex209/contrib/bookform/bookform.sty744
-rw-r--r--macros/latex209/contrib/bookform/bookform.tex54
-rw-r--r--macros/latex209/contrib/bruggink/bruggink.sty33
-rw-r--r--macros/latex209/contrib/bruggink/bruggink.tex16
-rw-r--r--macros/latex209/contrib/cassette/cassette.pdfbin0 -> 51679 bytes
-rw-r--r--macros/latex209/contrib/cassette/cassette.sty94
-rw-r--r--macros/latex209/contrib/cassette/cassette.tex116
-rw-r--r--macros/latex209/contrib/chbars/COPYING249
-rw-r--r--macros/latex209/contrib/chbars/README127
-rw-r--r--macros/latex209/contrib/chbars/a4-9.doc304
-rw-r--r--macros/latex209/contrib/chbars/a4-9.sty324
-rw-r--r--macros/latex209/contrib/chbars/a4-marg.chf34
-rw-r--r--macros/latex209/contrib/chbars/chbars-orig.tex758
-rw-r--r--macros/latex209/contrib/chbars/chbars.aux26
-rw-r--r--macros/latex209/contrib/chbars/chbars.doc998
-rw-r--r--macros/latex209/contrib/chbars/chbars.ltx998
-rw-r--r--macros/latex209/contrib/chbars/chbars.sty1000
-rw-r--r--macros/latex209/contrib/chbars/chbars.tex1067
-rw-r--r--macros/latex209/contrib/chbars/makeprog.lex4
-rw-r--r--macros/latex209/contrib/chbars/makeprog.perl3
-rw-r--r--macros/latex209/contrib/chbars/progltx.ltx754
-rw-r--r--macros/latex209/contrib/chbars/progltx.sty774
-rw-r--r--macros/latex209/contrib/chbars/test1.tex60
-rw-r--r--macros/latex209/contrib/chbars/test2.tex70
-rw-r--r--macros/latex209/contrib/chbars/test3.tex84
-rw-r--r--macros/latex209/contrib/chbars/test4.aux3
-rw-r--r--macros/latex209/contrib/chbars/test4.ltx86
-rw-r--r--macros/latex209/contrib/chemstruct/chemdoc.pdfbin0 -> 155053 bytes
-rw-r--r--macros/latex209/contrib/chemstruct/chemdoc.tex462
-rw-r--r--macros/latex209/contrib/chemstruct/chemf1.tex54
-rw-r--r--macros/latex209/contrib/chemstruct/chemf10.tex19
-rw-r--r--macros/latex209/contrib/chemstruct/chemf11.tex24
-rw-r--r--macros/latex209/contrib/chemstruct/chemf12.tex36
-rw-r--r--macros/latex209/contrib/chemstruct/chemf2.tex53
-rw-r--r--macros/latex209/contrib/chemstruct/chemf3.tex28
-rw-r--r--macros/latex209/contrib/chemstruct/chemf45.tex21
-rw-r--r--macros/latex209/contrib/chemstruct/chemf6.tex22
-rw-r--r--macros/latex209/contrib/chemstruct/chemf7.tex14
-rw-r--r--macros/latex209/contrib/chemstruct/chemf8.tex20
-rw-r--r--macros/latex209/contrib/chemstruct/chemf9.tex27
-rw-r--r--macros/latex209/contrib/chemstruct/chemstruct.tex564
-rw-r--r--macros/latex209/contrib/chemtex/announce59
-rw-r--r--macros/latex209/contrib/chemtex/appdb.tex85
-rw-r--r--macros/latex209/contrib/chemtex/appdc.tex53
-rw-r--r--macros/latex209/contrib/chemtex/chap3a.tex581
-rw-r--r--macros/latex209/contrib/chemtex/chap4.tex424
-rw-r--r--macros/latex209/contrib/chemtex/chap5.tex569
-rw-r--r--macros/latex209/contrib/chemtex/chap6a.tex232
-rw-r--r--macros/latex209/contrib/chemtex/chap6b.tex291
-rw-r--r--macros/latex209/contrib/chemtex/chap6c.tex285
-rw-r--r--macros/latex209/contrib/chemtex/chap6d.tex245
-rw-r--r--macros/latex209/contrib/chemtex/chemdoc.tex35
-rw-r--r--macros/latex209/contrib/chemtex/chemtex.readme18
-rw-r--r--macros/latex209/contrib/chemtex/chemtex.sty1318
-rw-r--r--macros/latex209/contrib/chemtex/chemtex.tex4
-rw-r--r--macros/latex209/contrib/chemtex/macros.tex1318
-rw-r--r--macros/latex209/contrib/chemtex/readme44
-rw-r--r--macros/latex209/contrib/citesidx/README51
-rw-r--r--macros/latex209/contrib/citesidx/citesidx.isty22
-rw-r--r--macros/latex209/contrib/citesidx/citesidx.sty260
-rw-r--r--macros/latex209/contrib/citesidx/citesidx1.isty22
-rw-r--r--macros/latex209/contrib/cmcyralt/cmcyr.sty324
-rw-r--r--macros/latex209/contrib/cmcyralt/lhyphen.rus24
-rw-r--r--macros/latex209/contrib/cmcyralt/readme60
l---------macros/latex209/contrib/cmcyralt/rhyphen.tex1
-rw-r--r--macros/latex209/contrib/cmcyralt/rusfonts.tex49
-rw-r--r--macros/latex209/contrib/code/code.sty65
-rw-r--r--macros/latex209/contrib/code/foo.tex100
-rw-r--r--macros/latex209/contrib/colortex/README9
-rw-r--r--macros/latex209/contrib/colortex/color.tex1818
-rw-r--r--macros/latex209/contrib/colortex/color300dpi.ps.gzbin0 -> 78523 bytes
-rw-r--r--macros/latex209/contrib/colortex/color600dpi.ps.gzbin0 -> 126106 bytes
-rw-r--r--macros/latex209/contrib/colortex/colorrap.sty.gzbin0 -> 2662 bytes
-rw-r--r--macros/latex209/contrib/colortex/colorrgb.tex2023
-rw-r--r--macros/latex209/contrib/colortex/mancolor.sty.gzbin0 -> 2465 bytes
-rw-r--r--macros/latex209/contrib/corrects/corrects.pdfbin0 -> 57627 bytes
-rw-r--r--macros/latex209/contrib/corrects/corrects.sty45
-rw-r--r--macros/latex209/contrib/corrects/corrects.tex273
-rw-r--r--macros/latex209/contrib/crc/crc.sty242
-rw-r--r--macros/latex209/contrib/crc/remark.sty135
-rw-r--r--macros/latex209/contrib/cyrmemo/cyracc.def272
-rw-r--r--macros/latex209/contrib/cyrmemo/cyrmemo.def81
-rw-r--r--macros/latex209/contrib/cyrmemo/cyrmemo.tex143
l---------macros/latex209/contrib/deproc/README1
-rw-r--r--macros/latex209/contrib/deproc/deproc-doc.tex1043
-rw-r--r--macros/latex209/contrib/deproc/deproc.readme43
-rw-r--r--macros/latex209/contrib/deproc/deproc.sty183
-rw-r--r--macros/latex209/contrib/diagramf/README14
-rw-r--r--macros/latex209/contrib/diagramf/arrows.mf188
-rw-r--r--macros/latex209/contrib/diagramf/diagramf.mf319
-rw-r--r--macros/latex209/contrib/diagramf/diagramf.pdfbin0 -> 61314 bytes
-rw-r--r--macros/latex209/contrib/diagramf/diagramf.sty222
-rw-r--r--macros/latex209/contrib/diagramf/diagramf.tex301
-rw-r--r--macros/latex209/contrib/diagramf/dmfexmpl.mf114
l---------macros/latex209/contrib/diagramf/ltugboat.sty1
l---------macros/latex209/contrib/diagramf/tugboat.cmn1
-rw-r--r--macros/latex209/contrib/dropcaps/dropcaps.sty130
-rw-r--r--macros/latex209/contrib/dropcaps/dropdoc.tex143
-rw-r--r--macros/latex209/contrib/dropcaps/droptest.tex70
-rw-r--r--macros/latex209/contrib/dropcaps/ttn2n1a.sty135
-rw-r--r--macros/latex209/contrib/e_symbol/e_symbol.tex573
-rw-r--r--macros/latex209/contrib/e_symbol/esymbdoc.dvibin0 -> 7272 bytes
-rw-r--r--macros/latex209/contrib/e_symbol/esymbdoc.tex305
-rw-r--r--macros/latex209/contrib/editbar/editbar.sty545
-rw-r--r--macros/latex209/contrib/envelope/env-sample.tex33
-rw-r--r--macros/latex209/contrib/envelope/envelope.sty44
-rw-r--r--macros/latex209/contrib/eqmark/eqmark.pdfbin0 -> 63156 bytes
-rw-r--r--macros/latex209/contrib/eqmark/eqmark.sty94
-rw-r--r--macros/latex209/contrib/eqmark/eqmark.tex138
-rw-r--r--macros/latex209/contrib/eslides/eslides-example.tex82
-rw-r--r--macros/latex209/contrib/eslides/eslides.pdfbin0 -> 76046 bytes
-rw-r--r--macros/latex209/contrib/eslides/eslides.sty132
-rw-r--r--macros/latex209/contrib/eslides/eslides.tex229
-rw-r--r--macros/latex209/contrib/eslides/logo-denk.tex29
-rw-r--r--macros/latex209/contrib/exercise/docstrip.cmd30
-rw-r--r--macros/latex209/contrib/exercise/exercise.doc441
-rw-r--r--macros/latex209/contrib/exercise/exercise.sty98
-rw-r--r--macros/latex209/contrib/exercise/exercise.tex88
-rw-r--r--macros/latex209/contrib/exercise/extest.tex35
-rw-r--r--macros/latex209/contrib/exercise/readme95
-rw-r--r--macros/latex209/contrib/fchart/fcdoc.pdfbin0 -> 92108 bytes
-rw-r--r--macros/latex209/contrib/fchart/fcdoc.tex345
-rw-r--r--macros/latex209/contrib/fchart/fchart.tex548
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC.tex124
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC1.tex223
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2A.tex670
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2B.tex263
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2C.tex122
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2D.tex48
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2E.tex47
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2F.tex174
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2G.tex246
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2H.tex80
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3A.tex416
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3B.tex133
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3C.tex93
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3D.tex52
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3E.tex25
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4A.tex264
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4B.tex86
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4C.tex210
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4D.tex211
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4E.tex127
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4F.tex210
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4G.tex61
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4H.tex115
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4I.tex183
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4J.tex98
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCAPPB.tex334
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCAPPC.tex351
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCEXER.tex494
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCPRELIMS.tex17
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCTITLEA.tex159
-rw-r--r--macros/latex209/contrib/feynman/DOCMANUAL/README.1ST3
-rw-r--r--macros/latex209/contrib/feynman/doc/feynmandoc.ps9245
-rw-r--r--macros/latex209/contrib/feynman/doc/readme.1st0
-rw-r--r--macros/latex209/contrib/feynman/fermionsetup.tex44
-rw-r--r--macros/latex209/contrib/feynman/feynman.tex578
-rw-r--r--macros/latex209/contrib/feynman/gluonlinks.tex144
-rw-r--r--macros/latex209/contrib/feynman/gluonsetup.tex287
-rw-r--r--macros/latex209/contrib/feynman/loops.tex58
-rw-r--r--macros/latex209/contrib/feynman/photonsetup.tex245
-rw-r--r--macros/latex209/contrib/feynman/scalarsetup.tex39
-rw-r--r--macros/latex209/contrib/feynman/vertex.tex399
l---------macros/latex209/contrib/fillform/README1
-rw-r--r--macros/latex209/contrib/fillform/fairysel.tex53
-rw-r--r--macros/latex209/contrib/fillform/fillform.readme23
-rw-r--r--macros/latex209/contrib/fillform/fillform.tex169
-rw-r--r--macros/latex209/contrib/fillform/samplfrm.tex107
-rw-r--r--macros/latex209/contrib/fillform/select.sty61
-rw-r--r--macros/latex209/contrib/genindex/genindex.sty45
-rw-r--r--macros/latex209/contrib/genindex/memo.sty3
-rw-r--r--macros/latex209/contrib/genindex/readme87
-rw-r--r--macros/latex209/contrib/geomsty/Makefile108
-rw-r--r--macros/latex209/contrib/geomsty/PStorus.lab4
-rw-r--r--macros/latex209/contrib/geomsty/PStorus.ps82
-rw-r--r--macros/latex209/contrib/geomsty/README75
-rw-r--r--macros/latex209/contrib/geomsty/dvips.chg59
-rw-r--r--macros/latex209/contrib/geomsty/geom.sty596
-rw-r--r--macros/latex209/contrib/geomsty/geomar10.sty142
-rw-r--r--macros/latex209/contrib/geomsty/geomar11.sty130
-rw-r--r--macros/latex209/contrib/geomsty/geomar12.sty132
-rw-r--r--macros/latex209/contrib/geomsty/geomart.sty193
-rw-r--r--macros/latex209/contrib/geomsty/geombk10.sty157
-rw-r--r--macros/latex209/contrib/geomsty/geombk11.sty152
-rw-r--r--macros/latex209/contrib/geomsty/geombk12.sty157
-rw-r--r--macros/latex209/contrib/geomsty/geombook.sty249
-rw-r--r--macros/latex209/contrib/geomsty/geomenv.sty189
-rw-r--r--macros/latex209/contrib/geomsty/geomeqns.sty49
-rw-r--r--macros/latex209/contrib/geomsty/geomfig.sty168
-rw-r--r--macros/latex209/contrib/geomsty/geomfix156
-rw-r--r--macros/latex209/contrib/geomsty/geomfnt.sty135
-rw-r--r--macros/latex209/contrib/geomsty/geomindx.sty72
-rw-r--r--macros/latex209/contrib/geomsty/geompsfi.sty632
-rw-r--r--macros/latex209/contrib/geomsty/illustrator.pro872
-rw-r--r--macros/latex209/contrib/geomsty/manual.bib69
-rw-r--r--macros/latex209/contrib/geomsty/manual.ps5196
-rw-r--r--macros/latex209/contrib/geomsty/manual.tex1312
-rw-r--r--macros/latex209/contrib/geomsty/math.pro1752
-rw-r--r--macros/latex209/contrib/geomsty/mathfig.1.orig46
-rw-r--r--macros/latex209/contrib/geomsty/mathfig.orig72
-rw-r--r--macros/latex209/contrib/geomsty/mathlabels.orig136
-rw-r--r--macros/latex209/contrib/geomsty/multicol.sty525
l---------macros/latex209/contrib/german1
-rw-r--r--macros/latex209/contrib/ibmres-tex/ibmres.ltx1628
-rw-r--r--macros/latex209/contrib/ibmres-tex/ibmres.pdfbin0 -> 133795 bytes
-rw-r--r--macros/latex209/contrib/ibmres-tex/ibmres.sty317
-rw-r--r--macros/latex209/contrib/ibmres-tex/noibmres.sty19
-rw-r--r--macros/latex209/contrib/ibmres-tex/nres_c_e.ltx43
-rw-r--r--macros/latex209/contrib/ibmres-tex/nres_c_e.txt34
-rw-r--r--macros/latex209/contrib/ibmres-tex/nres_c_f.ltx46
-rw-r--r--macros/latex209/contrib/ibmres-tex/nres_c_f.txt147
-rw-r--r--macros/latex209/contrib/ibmres-tex/nres_u_e.ltx22
-rw-r--r--macros/latex209/contrib/ibmres-tex/nres_u_e.txt18
-rw-r--r--macros/latex209/contrib/ibmres-tex/nres_u_f.ltx25
-rw-r--r--macros/latex209/contrib/ibmres-tex/nres_u_f.txt128
-rw-r--r--macros/latex209/contrib/ibmres-tex/res_c_e.ltx151
-rw-r--r--macros/latex209/contrib/ibmres-tex/res_c_f.ltx268
-rw-r--r--macros/latex209/contrib/ibmres-tex/res_u_e.ltx70
-rw-r--r--macros/latex209/contrib/ibmres-tex/res_u_f.ltx163
-rw-r--r--macros/latex209/contrib/ibmres-tex/simpres.ltx71
-rw-r--r--macros/latex209/contrib/ifac/IFAC.bst1294
-rw-r--r--macros/latex209/contrib/ifac/IFACarticle.sty705
-rw-r--r--macros/latex209/contrib/ifac/IFACdoc.tex260
-rw-r--r--macros/latex209/contrib/ifac/IFACsample.bib96
-rw-r--r--macros/latex209/contrib/ifac/IFACsample.tex249
-rw-r--r--macros/latex209/contrib/ifac/README10
-rw-r--r--macros/latex209/contrib/ifac/automatica.sty662
-rw-r--r--macros/latex209/contrib/ifac/automatica.tex208
-rw-r--r--macros/latex209/contrib/ijc/ijc.bst977
-rw-r--r--macros/latex209/contrib/ijc/ijc10.sty150
-rw-r--r--macros/latex209/contrib/ijc/ijcarticle.sty338
-rw-r--r--macros/latex209/contrib/ijcai89/ijcai89.sty162
-rw-r--r--macros/latex209/contrib/ijcai89/ijcai89.tex62
-rw-r--r--macros/latex209/contrib/insertplot/insertplot.readme37
-rw-r--r--macros/latex209/contrib/insertplot/insertplot.sty113
-rw-r--r--macros/latex209/contrib/iso/iso-doc.tex1163
-rw-r--r--macros/latex209/contrib/iso/iso.sty1151
-rw-r--r--macros/latex209/contrib/iso/iso10.sty441
-rw-r--r--macros/latex209/contrib/iso/iso9.sty442
-rw-r--r--macros/latex209/contrib/jeep/jeep.sty394
-rw-r--r--macros/latex209/contrib/jeep/jeep.tex477
-rw-r--r--macros/latex209/contrib/klassenarbeiten/abi.sty94
-rw-r--r--macros/latex209/contrib/klassenarbeiten/abiauf.tex61
-rw-r--r--macros/latex209/contrib/klassenarbeiten/abiloe.sty94
-rw-r--r--macros/latex209/contrib/klassenarbeiten/abiloe.tex63
-rw-r--r--macros/latex209/contrib/klassenarbeiten/arbeit.sty90
-rw-r--r--macros/latex209/contrib/klassenarbeiten/arbeito.sty90
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp1.dvibin0 -> 1164 bytes
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp1.tex38
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp2.dvibin0 -> 2204 bytes
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp2.tex65
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp3.dvibin0 -> 2692 bytes
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp3.tex64
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp4.dvibin0 -> 3556 bytes
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp4.tex70
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp5.dvibin0 -> 2720 bytes
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp5.tex58
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp6.dvibin0 -> 2540 bytes
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp6.tex48
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp7.dvibin0 -> 5460 bytes
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp7.tex107
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp8.dvibin0 -> 3332 bytes
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp8.tex75
-rw-r--r--macros/latex209/contrib/klassenarbeiten/bsp9.tex52
-rw-r--r--macros/latex209/contrib/klassenarbeiten/info.doc36
-rw-r--r--macros/latex209/contrib/klassenarbeiten/info.dvibin0 -> 2100 bytes
-rw-r--r--macros/latex209/contrib/klassenarbeiten/info.log37
-rw-r--r--macros/latex209/contrib/klassenarbeiten/info.tex58
-rw-r--r--macros/latex209/contrib/kluwer/kluwer.bst1227
-rw-r--r--macros/latex209/contrib/kluwer/kluwer.sty500
-rw-r--r--macros/latex209/contrib/kluwer/kluwer10.sty108
-rw-r--r--macros/latex209/contrib/konstruk/konstdoc.tex14
-rw-r--r--macros/latex209/contrib/konstruk/konstruk.sty1366
-rw-r--r--macros/latex209/contrib/konstruk/layout.tex401
-rw-r--r--macros/latex209/contrib/konstruk/piccorr.sty43
-rw-r--r--macros/latex209/contrib/konstruk/picmore.tex76
-rw-r--r--macros/latex209/contrib/konstruk/pictex.sty10
-rw-r--r--macros/latex209/contrib/konstruk/readme18
-rw-r--r--macros/latex209/contrib/konstruk/stamm.sty102
-rw-r--r--macros/latex209/contrib/labelfig/labelfig.doc268
-rw-r--r--macros/latex209/contrib/labelfig/labelfig.tex246
l---------macros/latex209/contrib/labelfig/labelfig.txt1
-rw-r--r--macros/latex209/contrib/laletter/README144
-rw-r--r--macros/latex209/contrib/laletter/laletter.doc3755
-rw-r--r--macros/latex209/contrib/laletter/laletter.ref4810
-rw-r--r--macros/latex209/contrib/laletter/laletter.sty2003
-rw-r--r--macros/latex209/contrib/laletter/lettest.tex176
-rw-r--r--macros/latex209/contrib/lamemo/memo.README136
-rw-r--r--macros/latex209/contrib/lamemo/memo.doc3049
-rw-r--r--macros/latex209/contrib/lamemo/memo.ref3965
-rw-r--r--macros/latex209/contrib/lamemo/memo.sty1634
-rw-r--r--macros/latex209/contrib/lamemo/memotest.tex128
-rw-r--r--macros/latex209/contrib/latexinfo/C/Makefile.in109
-rw-r--r--macros/latex209/contrib/latexinfo/C/getopt.c594
-rw-r--r--macros/latex209/contrib/latexinfo/C/getopt.h102
-rw-r--r--macros/latex209/contrib/latexinfo/C/getopt1.c166
-rw-r--r--macros/latex209/contrib/latexinfo/C/info.c4501
-rw-r--r--macros/latex209/contrib/latexinfo/C/latexindex.c1679
-rw-r--r--macros/latex209/contrib/latexinfo/CHANGES144
-rw-r--r--macros/latex209/contrib/latexinfo/COPYING249
-rw-r--r--macros/latex209/contrib/latexinfo/INSTALL165
-rw-r--r--macros/latex209/contrib/latexinfo/Makefile112
-rw-r--r--macros/latex209/contrib/latexinfo/README41
-rw-r--r--macros/latex209/contrib/latexinfo/TODO16
-rw-r--r--macros/latex209/contrib/latexinfo/configure357
-rw-r--r--macros/latex209/contrib/latexinfo/dot.latexinfo105
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/Makefile45
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/clisp-fmt.el141
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/elisp-fmt.el712
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/funref-fmt.el25
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/fvpindex-fmt.el38
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/german-fmt.el186
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/l2latexinfo.el144
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/latexinfo.el2406
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/latexnfo-mde.el583
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/latexnfo-tex.el348
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/latexnfo-upd.el1800
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/makeinfo.el30
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/s2latexinfo.el710
-rw-r--r--macros/latex209/contrib/latexinfo/elisp/t2latexinfo.el500
-rw-r--r--macros/latex209/contrib/latexinfo/manual/Makefile55
-rw-r--r--macros/latex209/contrib/latexinfo/manual/latex2dvi204
-rw-r--r--macros/latex209/contrib/latexinfo/manual/latexinfo2.bbl19
-rw-r--r--macros/latex209/contrib/latexinfo/manual/latexinfo2.bib64
-rw-r--r--macros/latex209/contrib/latexinfo/manual/latexinfo2.tex11460
-rw-r--r--macros/latex209/contrib/latexinfo/manual/lnfo-sample.tex97
-rw-r--r--macros/latex209/contrib/latexinfo/styles/Makefile24
-rw-r--r--macros/latex209/contrib/latexinfo/styles/clisp.sty191
-rw-r--r--macros/latex209/contrib/latexinfo/styles/elisp.sty410
-rw-r--r--macros/latex209/contrib/latexinfo/styles/format.sty44
-rw-r--r--macros/latex209/contrib/latexinfo/styles/funref.sty26
-rw-r--r--macros/latex209/contrib/latexinfo/styles/fvpindex.sty13
l---------macros/latex209/contrib/latexinfo/styles/german.MISSING1
-rw-r--r--macros/latex209/contrib/latexinfo/styles/latexinfo.sty1292
-rw-r--r--macros/latex209/contrib/latin2/latin2.sty420
-rw-r--r--macros/latex209/contrib/letters/brief/180dpi/letbilda.pkbin0 -> 1284 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/180dpi/untersca.pkbin0 -> 872 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/204dpi/letbilda.pkbin0 -> 1520 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/204dpi/untersca.pkbin0 -> 1024 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/300dpi/letbilda.pkbin0 -> 2504 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/300dpi/untersca.pkbin0 -> 1696 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/360dpi/letbilda.pkbin0 -> 3140 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/360dpi/untersca.pkbin0 -> 2168 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/beispiel.dvibin0 -> 2712 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/beispiel.tex36
-rw-r--r--macros/latex209/contrib/letters/brief/brief.adr49
-rw-r--r--macros/latex209/contrib/letters/brief/brief.bib16
-rw-r--r--macros/latex209/contrib/letters/brief/brief.dvibin0 -> 37796 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/brief.sty1446
-rw-r--r--macros/latex209/contrib/letters/brief/brief.tex515
-rw-r--r--macros/latex209/contrib/letters/brief/briefini.tex69
-rw-r--r--macros/latex209/contrib/letters/brief/letbild.pcxbin0 -> 8920 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/letbild.tex14
-rw-r--r--macros/latex209/contrib/letters/brief/letbilda.tfmbin0 -> 136 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/untersc.tex14
-rw-r--r--macros/latex209/contrib/letters/brief/untersca.tfmbin0 -> 140 bytes
-rw-r--r--macros/latex209/contrib/letters/brief/untersch.pcxbin0 -> 6832 bytes
-rw-r--r--macros/latex209/contrib/letters/finder/adressen.tex10
-rw-r--r--macros/latex209/contrib/letters/finder/finder.sty225
-rw-r--r--macros/latex209/contrib/letters/finder/finder.tex18
-rw-r--r--macros/latex209/contrib/letters/finder/finder.txt238
-rw-r--r--macros/latex209/contrib/letters/german-letter/letter.sty457
-rw-r--r--macros/latex209/contrib/letters/german-letter/letter.tex285
-rw-r--r--macros/latex209/contrib/letters/geschbrf/dinbrief/beispiel.tex385
-rw-r--r--macros/latex209/contrib/letters/geschbrf/dinbrief/dinbrief.sty1133
-rw-r--r--macros/latex209/contrib/letters/geschbrf/dinbrief/info.tex494
-rw-r--r--macros/latex209/contrib/letters/geschbrf/gb_bsp.dvibin0 -> 24232 bytes
-rw-r--r--macros/latex209/contrib/letters/geschbrf/gb_bsp.sty1280
-rw-r--r--macros/latex209/contrib/letters/geschbrf/gb_bsp.tex626
-rw-r--r--macros/latex209/contrib/letters/geschbrf/gb_doc.tex585
-rw-r--r--macros/latex209/contrib/letters/geschbrf/geschbrf.sty1280
-rw-r--r--macros/latex209/contrib/letters/geschbrf/liesmich.txt41
-rw-r--r--macros/latex209/contrib/letters/gletter/gletter.sty768
-rw-r--r--macros/latex209/contrib/letters/gletter/gletterdemo.tex327
-rw-r--r--macros/latex209/contrib/letters/mvletter.sty439
-rw-r--r--macros/latex209/contrib/letters/serie/serienbr.sty320
-rw-r--r--macros/latex209/contrib/letters/stbrief/defuser.sty544
-rw-r--r--macros/latex209/contrib/letters/stbrief/stbrief.sty531
-rw-r--r--macros/latex209/contrib/letters/stbrief/stbrief.tex18
-rw-r--r--macros/latex209/contrib/letters/tksbrief/privat.sty54
-rw-r--r--macros/latex209/contrib/letters/tksbrief/tksbrief.ltx471
-rw-r--r--macros/latex209/contrib/letters/tksbrief/tksbrief.sty442
-rw-r--r--macros/latex209/contrib/letters/uni_stgt/ipebrief.sty415
-rw-r--r--macros/latex209/contrib/letters/uni_stgt/ipebrief_beispiel.tex270
-rw-r--r--macros/latex209/contrib/letters/uni_stgt/ipebrief_doc.tex69
-rw-r--r--macros/latex209/contrib/letters/uni_stgt/localmode.mf17
-rw-r--r--macros/latex209/contrib/letters/uni_stgt/uni.mf79
-rw-r--r--macros/latex209/contrib/letters/uni_stgt/unilogo21
-rw-r--r--macros/latex209/contrib/lfonts_ams/lfonts_ams.readme11
-rw-r--r--macros/latex209/contrib/lfonts_ams/lfonts_ams.tex1245
-rw-r--r--macros/latex209/contrib/lms/lms.sty1434
-rw-r--r--macros/latex209/contrib/lms/lmsguide.tex1082
-rw-r--r--macros/latex209/contrib/lms/lmssampl.tex630
-rw-r--r--macros/latex209/contrib/lms/readme.txt26
-rw-r--r--macros/latex209/contrib/loggates/lgdoc.pdfbin0 -> 57881 bytes
-rw-r--r--macros/latex209/contrib/loggates/lgdoc.tex119
-rw-r--r--macros/latex209/contrib/loggates/loggates.mf777
-rw-r--r--macros/latex209/contrib/loggates/loggates.readme27
-rw-r--r--macros/latex209/contrib/loggates/loggates.sty139
-rw-r--r--macros/latex209/contrib/loggates/makefont17
-rw-r--r--macros/latex209/contrib/loggates/readme27
-rw-r--r--macros/latex209/contrib/loval/loval.sty91
-rw-r--r--macros/latex209/contrib/loval/lovaltest.pdfbin0 -> 25088 bytes
-rw-r--r--macros/latex209/contrib/loval/lovaltest.tex59
-rw-r--r--macros/latex209/contrib/manpage/example1.tex421
-rw-r--r--macros/latex209/contrib/manpage/example2.tex264
-rw-r--r--macros/latex209/contrib/manpage/manpage.sty342
-rw-r--r--macros/latex209/contrib/manpage/sample.tex230
l---------macros/latex209/contrib/manual/README1
-rw-r--r--macros/latex209/contrib/manual/man10.sty147
-rw-r--r--macros/latex209/contrib/manual/man11.sty147
-rw-r--r--macros/latex209/contrib/manual/man12.sty147
-rw-r--r--macros/latex209/contrib/manual/manual.readme52
-rw-r--r--macros/latex209/contrib/manual/manual.sty290
-rw-r--r--macros/latex209/contrib/megatape/brecht.tex78
-rw-r--r--macros/latex209/contrib/megatape/megademo.tex13
-rw-r--r--macros/latex209/contrib/megatape/megatape.doc178
-rw-r--r--macros/latex209/contrib/megatape/megatape.sty153
-rw-r--r--macros/latex209/contrib/megatape/read.me46
l---------macros/latex209/contrib/megatape/tape.sty1
-rw-r--r--macros/latex209/contrib/megatape/tapedemo.tex12
-rw-r--r--macros/latex209/contrib/memo/memo.sty320
-rw-r--r--macros/latex209/contrib/memo/mfr.sty12
-rw-r--r--macros/latex209/contrib/memo2/memo.pdfbin0 -> 39800 bytes
-rw-r--r--macros/latex209/contrib/memo2/memo.sty285
-rw-r--r--macros/latex209/contrib/memo2/memo.tex33
-rw-r--r--macros/latex209/contrib/memo2/memo10.sty98
-rw-r--r--macros/latex209/contrib/memo2/memo11.sty99
-rw-r--r--macros/latex209/contrib/memo2/memo12.sty100
-rw-r--r--macros/latex209/contrib/milstd/milstd.sty818
-rw-r--r--macros/latex209/contrib/milstd/ms10.sty363
-rw-r--r--macros/latex209/contrib/milstd/ms11.sty362
-rw-r--r--macros/latex209/contrib/milstd/ms12.sty363
l---------macros/latex209/contrib/misc/QED.sty1
-rw-r--r--macros/latex209/contrib/misc/STYLE_descriptions287
-rw-r--r--macros/latex209/contrib/misc/a4letter.sty457
-rw-r--r--macros/latex209/contrib/misc/accarticle.sty184
-rw-r--r--macros/latex209/contrib/misc/acmproc.sty186
-rw-r--r--macros/latex209/contrib/misc/acronym.sty105
-rw-r--r--macros/latex209/contrib/misc/add-wes.sty802
-rw-r--r--macros/latex209/contrib/misc/ailetter.tex43
-rw-r--r--macros/latex209/contrib/misc/aimemo.sty71
-rw-r--r--macros/latex209/contrib/misc/alleqno.sty49
-rw-r--r--macros/latex209/contrib/misc/alltt2.sty47
-rw-r--r--macros/latex209/contrib/misc/altnline.sty189
-rw-r--r--macros/latex209/contrib/misc/annotation.sty62
-rw-r--r--macros/latex209/contrib/misc/answers.sty155
-rw-r--r--macros/latex209/contrib/misc/apalike-plus.readme18
-rw-r--r--macros/latex209/contrib/misc/apalike-plus.sty68
-rw-r--r--macros/latex209/contrib/misc/apeqnum.sty21
-rw-r--r--macros/latex209/contrib/misc/apguide.tex1484
-rw-r--r--macros/latex209/contrib/misc/aps.sty138
-rw-r--r--macros/latex209/contrib/misc/aps10.sty145
-rw-r--r--macros/latex209/contrib/misc/apsabstract.sty428
-rw-r--r--macros/latex209/contrib/misc/astyped.sty23
-rw-r--r--macros/latex209/contrib/misc/at.sty52
-rw-r--r--macros/latex209/contrib/misc/balanced.sty61
-rw-r--r--macros/latex209/contrib/misc/bar.sty548
-rw-r--r--macros/latex209/contrib/misc/bibmods.sty65
-rw-r--r--macros/latex209/contrib/misc/bigtabular.sty99
-rw-r--r--macros/latex209/contrib/misc/biihead.sty21
-rw-r--r--macros/latex209/contrib/misc/boxit.sty91
-rw-r--r--macros/latex209/contrib/misc/breakcites.sty10
-rw-r--r--macros/latex209/contrib/misc/bsf.sty97
-rw-r--r--macros/latex209/contrib/misc/bsl.sty97
-rw-r--r--macros/latex209/contrib/misc/buscard.sty226
-rw-r--r--macros/latex209/contrib/misc/calendar.sty549
-rw-r--r--macros/latex209/contrib/misc/calorie.sty989
-rw-r--r--macros/latex209/contrib/misc/calprog.sty102
-rw-r--r--macros/latex209/contrib/misc/card-set.sty288
-rw-r--r--macros/latex209/contrib/misc/card.sty96
-rw-r--r--macros/latex209/contrib/misc/catmac-doc.tex536
-rw-r--r--macros/latex209/contrib/misc/catmac.sty1013
-rw-r--r--macros/latex209/contrib/misc/chapref.sty108
-rw-r--r--macros/latex209/contrib/misc/chessboard.tex162
-rw-r--r--macros/latex209/contrib/misc/chgbar.sty157
-rw-r--r--macros/latex209/contrib/misc/chomsky.sty158
-rw-r--r--macros/latex209/contrib/misc/cites.sty137
-rw-r--r--macros/latex209/contrib/misc/colors.sty89
-rw-r--r--macros/latex209/contrib/misc/commtest.tex56
-rw-r--r--macros/latex209/contrib/misc/cprog.sty230
-rw-r--r--macros/latex209/contrib/misc/cup.sty1053
-rw-r--r--macros/latex209/contrib/misc/currency.sty17
-rw-r--r--macros/latex209/contrib/misc/custombib.sty39
-rw-r--r--macros/latex209/contrib/misc/cyrillic.sty26
-rw-r--r--macros/latex209/contrib/misc/dates.sty288
l---------macros/latex209/contrib/misc/dayofweek.sty1
-rw-r--r--macros/latex209/contrib/misc/db.sty236
-rw-r--r--macros/latex209/contrib/misc/dblitem.sty45
-rw-r--r--macros/latex209/contrib/misc/dectab.sty49
-rw-r--r--macros/latex209/contrib/misc/deflist.sty16
-rw-r--r--macros/latex209/contrib/misc/deleq.sty359
l---------macros/latex209/contrib/misc/diagmac.sty1
-rw-r--r--macros/latex209/contrib/misc/diagramdoc.tex968
-rw-r--r--macros/latex209/contrib/misc/diagtest.tex403
-rw-r--r--macros/latex209/contrib/misc/dina4.sty4
-rw-r--r--macros/latex209/contrib/misc/disstyle.sty42
-rw-r--r--macros/latex209/contrib/misc/dpccyr.sty262
-rw-r--r--macros/latex209/contrib/misc/draft.sty253
-rw-r--r--macros/latex209/contrib/misc/draftcopy.sty8
-rw-r--r--macros/latex209/contrib/misc/drafthead.sty40
-rw-r--r--macros/latex209/contrib/misc/drafts.sty154
-rw-r--r--macros/latex209/contrib/misc/draftstamp.sty127
-rw-r--r--macros/latex209/contrib/misc/drop.sty67
-rw-r--r--macros/latex209/contrib/misc/ebnf.sty72
-rw-r--r--macros/latex209/contrib/misc/editbar.sty615
-rw-r--r--macros/latex209/contrib/misc/enumspec.sty56
-rw-r--r--macros/latex209/contrib/misc/env.sty126
-rw-r--r--macros/latex209/contrib/misc/epac.sty234
l---------macros/latex209/contrib/misc/epigram.sty1
-rw-r--r--macros/latex209/contrib/misc/eqnarray.sty99
-rw-r--r--macros/latex209/contrib/misc/eqsecnum.sty26
-rw-r--r--macros/latex209/contrib/misc/equation.sty272
-rw-r--r--macros/latex209/contrib/misc/equationarray.sty88
-rw-r--r--macros/latex209/contrib/misc/equations.sty217
-rw-r--r--macros/latex209/contrib/misc/esperant.sty342
-rw-r--r--macros/latex209/contrib/misc/espo.sty52
-rw-r--r--macros/latex209/contrib/misc/etcetera.tex45
-rw-r--r--macros/latex209/contrib/misc/euler.sty146
-rw-r--r--macros/latex209/contrib/misc/exam.sty394
-rw-r--r--macros/latex209/contrib/misc/example.sty412
-rw-r--r--macros/latex209/contrib/misc/exercise.mac57
-rw-r--r--macros/latex209/contrib/misc/exercise.sty56
-rw-r--r--macros/latex209/contrib/misc/exercise.tex54
-rw-r--r--macros/latex209/contrib/misc/extradefs.tex58
-rw-r--r--macros/latex209/contrib/misc/fancychapters.sty107
-rw-r--r--macros/latex209/contrib/misc/farticle.sty244
-rw-r--r--macros/latex209/contrib/misc/fixup.sty169
-rw-r--r--macros/latex209/contrib/misc/fllater.sty55
-rw-r--r--macros/latex209/contrib/misc/floatnohead.sty13
-rw-r--r--macros/latex209/contrib/misc/flowchart.sty185
-rw-r--r--macros/latex209/contrib/misc/font-nostalgia.sty51
-rw-r--r--macros/latex209/contrib/misc/fontstyl.txt27
-rw-r--r--macros/latex209/contrib/misc/format.sty28
-rw-r--r--macros/latex209/contrib/misc/frenchponct.sty23
-rw-r--r--macros/latex209/contrib/misc/frenchquote.sty5
-rw-r--r--macros/latex209/contrib/misc/frontiers.sty203
-rw-r--r--macros/latex209/contrib/misc/ftn.sty46
-rw-r--r--macros/latex209/contrib/misc/fullpage.sty29
-rw-r--r--macros/latex209/contrib/misc/gart11.sty109
-rw-r--r--macros/latex209/contrib/misc/garticle.sty233
-rw-r--r--macros/latex209/contrib/misc/geophysics.sty105
-rw-r--r--macros/latex209/contrib/misc/hackalloc.sty17
-rw-r--r--macros/latex209/contrib/misc/hackarray.sty64
-rw-r--r--macros/latex209/contrib/misc/hangcaption.sty113
-rw-r--r--macros/latex209/contrib/misc/headerfooter.sty75
-rw-r--r--macros/latex209/contrib/misc/hex.sty31
-rw-r--r--macros/latex209/contrib/misc/hndout.sty75
-rw-r--r--macros/latex209/contrib/misc/hvdashln.sty50
-rw-r--r--macros/latex209/contrib/misc/icassp.sty231
-rw-r--r--macros/latex209/contrib/misc/ieeconf.sty102
-rw-r--r--macros/latex209/contrib/misc/ieeeconf.sty56
-rw-r--r--macros/latex209/contrib/misc/ifthen-addi.sty22
-rw-r--r--macros/latex209/contrib/misc/ifthenpl.sty22
-rw-r--r--macros/latex209/contrib/misc/indent.sty120
-rw-r--r--macros/latex209/contrib/misc/inputfile.sty43
-rw-r--r--macros/latex209/contrib/misc/invertedparagraphs.tex25
-rw-r--r--macros/latex209/contrib/misc/isf.sty95
-rw-r--r--macros/latex209/contrib/misc/isolatin1.sty174
-rw-r--r--macros/latex209/contrib/misc/ist21.sty39
-rw-r--r--macros/latex209/contrib/misc/isucaption.sty39
-rw-r--r--macros/latex209/contrib/misc/ital.sty73
-rw-r--r--macros/latex209/contrib/misc/italic.sty38
-rw-r--r--macros/latex209/contrib/misc/jbs.sty200
-rw-r--r--macros/latex209/contrib/misc/jmb.sty62
-rw-r--r--macros/latex209/contrib/misc/joe.sty151
-rw-r--r--macros/latex209/contrib/misc/kalender.tex327
-rw-r--r--macros/latex209/contrib/misc/labels.sty80
-rw-r--r--macros/latex209/contrib/misc/lablst.sty55
-rw-r--r--macros/latex209/contrib/misc/laioobr.sty800
-rw-r--r--macros/latex209/contrib/misc/landscape.sty12
-rw-r--r--macros/latex209/contrib/misc/latex-go-board.tex68
-rw-r--r--macros/latex209/contrib/misc/lcaption.sty50
-rw-r--r--macros/latex209/contrib/misc/lcustom.tex429
-rw-r--r--macros/latex209/contrib/misc/listoftheorem.sty123
-rw-r--r--macros/latex209/contrib/misc/local-suppl.tex105
-rw-r--r--macros/latex209/contrib/misc/losymbol.sty65
-rw-r--r--macros/latex209/contrib/misc/lslide.sty707
-rw-r--r--macros/latex209/contrib/misc/lslide.tex412
-rw-r--r--macros/latex209/contrib/misc/ltgtsim.sty15
-rw-r--r--macros/latex209/contrib/misc/makerobust.sty112
-rw-r--r--macros/latex209/contrib/misc/marginote.sty75
-rw-r--r--macros/latex209/contrib/misc/marnote.sty61
-rw-r--r--macros/latex209/contrib/misc/mathtext.sty12
-rw-r--r--macros/latex209/contrib/misc/meparticle.sty324
-rw-r--r--macros/latex209/contrib/misc/merge.sty178
-rw-r--r--macros/latex209/contrib/misc/mf.sty37
-rw-r--r--macros/latex209/contrib/misc/misc.sty62
-rw-r--r--macros/latex209/contrib/misc/moreverb.readme7
-rw-r--r--macros/latex209/contrib/misc/multicolpar.sty69
-rw-r--r--macros/latex209/contrib/misc/multind.sty65
-rw-r--r--macros/latex209/contrib/misc/newequation.sty28
-rw-r--r--macros/latex209/contrib/misc/nextslide.sty47
-rw-r--r--macros/latex209/contrib/misc/nf.sty170
-rw-r--r--macros/latex209/contrib/misc/nl.sty113
-rw-r--r--macros/latex209/contrib/misc/nnfootnote.sty33
-rw-r--r--macros/latex209/contrib/misc/nopagenumbers.sty15
-rw-r--r--macros/latex209/contrib/misc/noprot.sty188
-rw-r--r--macros/latex209/contrib/misc/nosecnumbers.sty42
-rw-r--r--macros/latex209/contrib/misc/npsfont.sty193
-rw-r--r--macros/latex209/contrib/misc/optarg.sty42
-rw-r--r--macros/latex209/contrib/misc/ovalfbox.sty35
-rw-r--r--macros/latex209/contrib/misc/pagefoots.sty192
-rw-r--r--macros/latex209/contrib/misc/parskip.sty33
-rw-r--r--macros/latex209/contrib/misc/portland.sty124
-rw-r--r--macros/latex209/contrib/misc/psboxit.sty175
-rw-r--r--macros/latex209/contrib/misc/psfont.sty117
-rw-r--r--macros/latex209/contrib/misc/psfonts.tex146
-rw-r--r--macros/latex209/contrib/misc/psmath.sty216
-rw-r--r--macros/latex209/contrib/misc/pspic.sty209
-rw-r--r--macros/latex209/contrib/misc/pstimesm.sty80
-rw-r--r--macros/latex209/contrib/misc/qm.sty53
-rw-r--r--macros/latex209/contrib/misc/quote.sty119
-rw-r--r--macros/latex209/contrib/misc/raggedtab.sty11
-rw-r--r--macros/latex209/contrib/misc/rangecite.sty75
-rw-r--r--macros/latex209/contrib/misc/regel.stybin0 -> 8580 bytes
-rw-r--r--macros/latex209/contrib/misc/remark.sty130
-rw-r--r--macros/latex209/contrib/misc/rmthm.sty23
-rw-r--r--macros/latex209/contrib/misc/rnl-slides.sty594
-rw-r--r--macros/latex209/contrib/misc/rotate_tex.sty45
-rw-r--r--macros/latex209/contrib/misc/rs.sty994
-rw-r--r--macros/latex209/contrib/misc/rssconf.sty31
-rw-r--r--macros/latex209/contrib/misc/sc21-wg1.sty64
-rw-r--r--macros/latex209/contrib/misc/sc21.sty65
-rw-r--r--macros/latex209/contrib/misc/schedule.sty484
-rw-r--r--macros/latex209/contrib/misc/screen.sty32
-rw-r--r--macros/latex209/contrib/misc/seceqn.sty11
-rw-r--r--macros/latex209/contrib/misc/secret.sty85
-rw-r--r--macros/latex209/contrib/misc/semitic.sty113
-rw-r--r--macros/latex209/contrib/misc/sentences.tex133
-rw-r--r--macros/latex209/contrib/misc/set_sp.sty253
-rw-r--r--macros/latex209/contrib/misc/settosize.sty50
-rw-r--r--macros/latex209/contrib/misc/sfwmac.sty60
-rw-r--r--macros/latex209/contrib/misc/shsulet.sty394
-rw-r--r--macros/latex209/contrib/misc/side.sty74
-rw-r--r--macros/latex209/contrib/misc/sines.tex47
-rw-r--r--macros/latex209/contrib/misc/slem.sty14
-rw-r--r--macros/latex209/contrib/misc/smaller.sty40
-rw-r--r--macros/latex209/contrib/misc/smalltalk.sty161
-rw-r--r--macros/latex209/contrib/misc/sober.sty147
-rw-r--r--macros/latex209/contrib/misc/spacecites.sty20
-rw-r--r--macros/latex209/contrib/misc/spacing.sty51
-rw-r--r--macros/latex209/contrib/misc/sqmac.tex320
-rw-r--r--macros/latex209/contrib/misc/sqsample.tex143
-rw-r--r--macros/latex209/contrib/misc/sshdbk10.sty59
-rw-r--r--macros/latex209/contrib/misc/steveshacks.tex315
-rw-r--r--macros/latex209/contrib/misc/strukto.stybin0 -> 13211 bytes
-rw-r--r--macros/latex209/contrib/misc/subtabfg.sty72
-rw-r--r--macros/latex209/contrib/misc/suthesis.sty265
-rw-r--r--macros/latex209/contrib/misc/tabbingbox.tex79
-rw-r--r--macros/latex209/contrib/misc/tabverb.sty91
-rw-r--r--macros/latex209/contrib/misc/techreport.sty379
-rw-r--r--macros/latex209/contrib/misc/tgrind.sty167
-rw-r--r--macros/latex209/contrib/misc/thebib-plus.readme22
-rw-r--r--macros/latex209/contrib/misc/thebib-plus.sty46
-rw-r--r--macros/latex209/contrib/misc/threecolumn.sty182
-rw-r--r--macros/latex209/contrib/misc/timetab.sty93
-rw-r--r--macros/latex209/contrib/misc/topnum.sty7
-rw-r--r--macros/latex209/contrib/misc/trademarks.sty81
-rw-r--r--macros/latex209/contrib/misc/trees.sty120
-rw-r--r--macros/latex209/contrib/misc/truecols.doc398
-rw-r--r--macros/latex209/contrib/misc/uhthesis.sty391
-rw-r--r--macros/latex209/contrib/misc/ukdate.sty203
-rw-r--r--macros/latex209/contrib/misc/underlin.tex16
-rw-r--r--macros/latex209/contrib/misc/unfinished.tex44
-rw-r--r--macros/latex209/contrib/misc/unilogo.sty259
-rw-r--r--macros/latex209/contrib/misc/uscthesis.sty999
-rw-r--r--macros/latex209/contrib/misc/usenix.sty105
-rw-r--r--macros/latex209/contrib/misc/userps.sty54
-rw-r--r--macros/latex209/contrib/misc/varfbox.sty20
-rw-r--r--macros/latex209/contrib/misc/verbatimfiles.sty42
-rw-r--r--macros/latex209/contrib/misc/verbinp.sty1230
-rw-r--r--macros/latex209/contrib/misc/verbsubfile.sty129
-rw-r--r--macros/latex209/contrib/misc/vita.sty131
-rw-r--r--macros/latex209/contrib/misc/voorbeeld.sty143
-rw-r--r--macros/latex209/contrib/misc/voorbeelden.sty79
-rw-r--r--macros/latex209/contrib/misc/warn.sty18
-rw-r--r--macros/latex209/contrib/misc/wasy.sty244
-rw-r--r--macros/latex209/contrib/misc/windlet.doc184
-rw-r--r--macros/latex209/contrib/misc/xrefwarn.sty50
-rw-r--r--macros/latex209/contrib/misc/xxxcustom.tex95
-rw-r--r--macros/latex209/contrib/misc/xxxslides.sty361
-rw-r--r--macros/latex209/contrib/misc/yearcal.tex133
-rw-r--r--macros/latex209/contrib/mit-press/10mitprb.sty590
-rw-r--r--macros/latex209/contrib/mit-press/mit-press-book.sty1261
-rw-r--r--macros/latex209/contrib/mit-press/mitpraisf.tex68
-rw-r--r--macros/latex209/contrib/mit-press/mitprbb.tex12
-rw-r--r--macros/latex209/contrib/mit-press/mitprcogsci.tex127
-rw-r--r--macros/latex209/contrib/mit-press/mitprpn.tex45
-rw-r--r--macros/latex209/contrib/mtns/mtns12.sty116
-rw-r--r--macros/latex209/contrib/mtns/mtnsarticle.sty466
-rw-r--r--macros/latex209/contrib/mtns/mtnssample.bib15
-rw-r--r--macros/latex209/contrib/mtns/mtnssample.tex87
-rw-r--r--macros/latex209/contrib/nfss-addons/avantgardemath.sty23
-rw-r--r--macros/latex209/contrib/nfss-addons/nfsslint.sty93
-rw-r--r--macros/latex209/contrib/nfss-addons/npsfont.sty193
-rw-r--r--macros/latex209/contrib/nfss-addons/palatinomath.sty23
-rw-r--r--macros/latex209/contrib/nfss-addons/pandora.sty343
-rw-r--r--macros/latex209/contrib/nfss-addons/psfonts.sty319
-rw-r--r--macros/latex209/contrib/nfss-addons/psfonts.tex146
-rw-r--r--macros/latex209/contrib/nfss-addons/psmath.sty216
-rw-r--r--macros/latex209/contrib/oval/newcirc.mf806
-rw-r--r--macros/latex209/contrib/oval/oval.sty113
-rw-r--r--macros/latex209/contrib/oval/ovaltest.tex31
-rw-r--r--macros/latex209/contrib/pageframe/README58
-rw-r--r--macros/latex209/contrib/pageframe/pagefram.sty248
l---------macros/latex209/contrib/pageframe/pageframe.sty1
-rw-r--r--macros/latex209/contrib/pageframe/pgframed.tex686
-rw-r--r--macros/latex209/contrib/pageframe/pgframet.tex43
-rw-r--r--macros/latex209/contrib/paper/pap11.sty366
-rw-r--r--macros/latex209/contrib/paper/pap12.sty370
-rw-r--r--macros/latex209/contrib/paper/paper-sample.tex534
-rw-r--r--macros/latex209/contrib/paper/paper.sty752
-rw-r--r--macros/latex209/contrib/picinpar/picinpar-de.pdfbin0 -> 175571 bytes
-rw-r--r--macros/latex209/contrib/picinpar/picinpar-de.tex285
-rw-r--r--macros/latex209/contrib/picinpar/picinpar-en.pdfbin0 -> 213414 bytes
-rw-r--r--macros/latex209/contrib/picinpar/picinpar-en.tex89
-rw-r--r--macros/latex209/contrib/picinpar/picinpar.sty535
-rw-r--r--macros/latex209/contrib/picins/LIES.MICH32
-rw-r--r--macros/latex209/contrib/picins/README.1st7
-rw-r--r--macros/latex209/contrib/picins/extpic.sty62
-rw-r--r--macros/latex209/contrib/picins/mandel.mspbin0 -> 26424 bytes
-rw-r--r--macros/latex209/contrib/picins/mexhat1.mspbin0 -> 12351 bytes
-rw-r--r--macros/latex209/contrib/picins/mexhat2.mspbin0 -> 4280 bytes
-rw-r--r--macros/latex209/contrib/picins/mpic.dvibin0 -> 121364 bytes
-rw-r--r--macros/latex209/contrib/picins/picins.alt510
-rw-r--r--macros/latex209/contrib/picins/picins.doc866
-rw-r--r--macros/latex209/contrib/picins/picins.sty578
-rw-r--r--macros/latex209/contrib/picins/picins.txt112
-rw-r--r--macros/latex209/contrib/postcard/demo.tex24
-rw-r--r--macros/latex209/contrib/postcard/demo2.tex26
-rw-r--r--macros/latex209/contrib/postcard/postcard.sty128
-rw-r--r--macros/latex209/contrib/postcard/postcard.tex75
-rw-r--r--macros/latex209/contrib/postcard/staunen.iffbin0 -> 3108 bytes
-rw-r--r--macros/latex209/contrib/pphlp/helpproc.pas136
-rw-r--r--macros/latex209/contrib/pphlp/hlp.lse155
-rw-r--r--macros/latex209/contrib/pphlp/phutguide.sty337
-rw-r--r--macros/latex209/contrib/pphlp/phutguide11.sty139
-rw-r--r--macros/latex209/contrib/pphlp/pphlp.com163
-rw-r--r--macros/latex209/contrib/pphlp/pphlp.help265
-rw-r--r--macros/latex209/contrib/pphlp/pphlp.readme139
-rw-r--r--macros/latex209/contrib/pphlp/pphlp.tex315
-rw-r--r--macros/latex209/contrib/pphlp/pproc.cld4
-rw-r--r--macros/latex209/contrib/prelim/prelim.pdfbin0 -> 92598 bytes
-rw-r--r--macros/latex209/contrib/prelim/prelim.sty105
-rw-r--r--macros/latex209/contrib/prelim/prelim.tex173
-rw-r--r--macros/latex209/contrib/progkeys/README181
l---------macros/latex209/contrib/progkeys/demo1
-rw-r--r--macros/latex209/contrib/progkeys/keywords.doc1010
-rw-r--r--macros/latex209/contrib/progkeys/keywords.ins51
-rw-r--r--macros/latex209/contrib/progkeys/programs.doc1222
-rw-r--r--macros/latex209/contrib/progkeys/programs.ins51
-rw-r--r--macros/latex209/contrib/program/program-demo.tex306
-rw-r--r--macros/latex209/contrib/program/program-msg22
-rw-r--r--macros/latex209/contrib/ps-latex/ps-caveat.txt8
-rw-r--r--macros/latex209/contrib/ps-latex/ps-latex.tex7107
-rw-r--r--macros/latex209/contrib/ps-latex/ps-lfonts.tex824
-rw-r--r--macros/latex209/contrib/ps-latex/ps-lplain.tex1308
-rw-r--r--macros/latex209/contrib/rus/ruspaper.sty320
-rw-r--r--macros/latex209/contrib/rus/rustitel.sty240
-rw-r--r--macros/latex209/contrib/rus/uni.sty1384
-rw-r--r--macros/latex209/contrib/rus/us10.sty105
-rw-r--r--macros/latex209/contrib/rus/us11.sty108
-rw-r--r--macros/latex209/contrib/rus/us12.sty111
-rw-r--r--macros/latex209/contrib/rus/usus.readme5
-rw-r--r--macros/latex209/contrib/schulzrinne/schulzrinne.sty17
-rw-r--r--macros/latex209/contrib/schulzrinne/schulzrinne.tex11
l---------macros/latex209/contrib/seminar1
-rw-r--r--macros/latex209/contrib/sfarticle/sfart10.sty143
-rw-r--r--macros/latex209/contrib/sfarticle/sfart11.sty144
-rw-r--r--macros/latex209/contrib/sfarticle/sfart12.sty148
-rw-r--r--macros/latex209/contrib/sfarticle/sfarticle.sty261
-rw-r--r--macros/latex209/contrib/shading/shading.sty232
-rw-r--r--macros/latex209/contrib/shading/shading.tex227
-rw-r--r--macros/latex209/contrib/stickers/stickerdoc.tex69
-rw-r--r--macros/latex209/contrib/stickers/stickers.sty78
-rw-r--r--macros/latex209/contrib/systcontrolletters/scl.bst1272
-rw-r--r--macros/latex209/contrib/systcontrolletters/scl10.sty84
-rw-r--r--macros/latex209/contrib/systcontrolletters/scl11.sty84
-rw-r--r--macros/latex209/contrib/systcontrolletters/scletters.sty427
-rw-r--r--macros/latex209/contrib/systcontrolletters/sclsample.tex124
-rw-r--r--macros/latex209/contrib/tables/tables-doc.pdfbin0 -> 76309 bytes
-rw-r--r--macros/latex209/contrib/tables/tables-doc.tex258
-rw-r--r--macros/latex209/contrib/tables/tables.sty601
-rw-r--r--macros/latex209/contrib/tape/tape-doc.tex241
-rw-r--r--macros/latex209/contrib/tape/tape.example31
-rw-r--r--macros/latex209/contrib/tape/tape.readme40
-rw-r--r--macros/latex209/contrib/tape/tape.sty138
-rw-r--r--macros/latex209/contrib/tengtex/README19
-rw-r--r--macros/latex209/contrib/tengtex/Tira_ni23
-rw-r--r--macros/latex209/contrib/tengtex/tengdoc.tex431
-rw-r--r--macros/latex209/contrib/tengtex/tengtex.sty889
-rw-r--r--macros/latex209/contrib/tengtex/tengtex.tex46
-rw-r--r--macros/latex209/contrib/tengtex/vanda.tex34
-rw-r--r--macros/latex209/contrib/tesla/eng-form.sty108
-rw-r--r--macros/latex209/contrib/tesla/goldilocks.tex85
-rw-r--r--macros/latex209/contrib/tesla/goldirules.tex34
-rw-r--r--macros/latex209/contrib/tesla/tab-form.sty139
-rw-r--r--macros/latex209/contrib/tesla/tesla.sty361
-rw-r--r--macros/latex209/contrib/tex-bnf/bnf.README23
-rw-r--r--macros/latex209/contrib/tex-bnf/bnf.bugs187
-rw-r--r--macros/latex209/contrib/tex-bnf/bnf.pdfbin0 -> 69266 bytes
-rw-r--r--macros/latex209/contrib/tex-bnf/bnf.sty123
-rw-r--r--macros/latex209/contrib/tex-bnf/bnf.tex238
-rw-r--r--macros/latex209/contrib/textfit/textfit.ctn10
-rw-r--r--macros/latex209/contrib/textfit/textfit.dtx299
-rw-r--r--macros/latex209/contrib/textfit/textfit.ins53
-rw-r--r--macros/latex209/contrib/textyl/README84
-rw-r--r--macros/latex209/contrib/textyl/README.27aug9129
-rw-r--r--macros/latex209/contrib/textyl/TODO.27aug915
-rw-r--r--macros/latex209/contrib/textyl/doc/textyl.tex42
-rw-r--r--macros/latex209/contrib/textyl/doc/tylman.dvibin0 -> 164556 bytes
-rw-r--r--macros/latex209/contrib/textyl/doc/tylman.tex3144
-rw-r--r--macros/latex209/contrib/textyl/doc/tylout.dvibin0 -> 245944 bytes
-rw-r--r--macros/latex209/contrib/textyl/psrc/h00vars.h252
-rw-r--r--macros/latex209/contrib/textyl/psrc/makefile23
-rw-r--r--macros/latex209/contrib/textyl/psrc/texpaths.h32
-rw-r--r--macros/latex209/contrib/textyl/psrc/textyl.pas7873
-rw-r--r--macros/latex209/contrib/textyl/psrc/textyl.pas.aa1000
-rw-r--r--macros/latex209/contrib/textyl/psrc/textyl.pas.ab1000
-rw-r--r--macros/latex209/contrib/textyl/psrc/textyl.pas.ac1000
-rw-r--r--macros/latex209/contrib/textyl/psrc/textyl.pas.ad1000
-rw-r--r--macros/latex209/contrib/textyl/psrc/textyl.pas.ae1000
-rw-r--r--macros/latex209/contrib/textyl/psrc/textyl.pas.af1000
-rw-r--r--macros/latex209/contrib/textyl/psrc/textyl.pas.ag1000
-rw-r--r--macros/latex209/contrib/textyl/psrc/textyl.pas.ah873
-rw-r--r--macros/latex209/contrib/textyl/psrc/tylext.c138
-rw-r--r--macros/latex209/contrib/textyl/psrc/tylext.h5
-rw-r--r--macros/latex209/contrib/textyl/src/Makefile23
-rw-r--r--macros/latex209/contrib/textyl/src/defs.h208
-rw-r--r--macros/latex209/contrib/textyl/src/globals.c22
-rw-r--r--macros/latex209/contrib/textyl/src/globals.h208
-rw-r--r--macros/latex209/contrib/textyl/src/io.c347
-rw-r--r--macros/latex209/contrib/textyl/src/spline.c660
-rw-r--r--macros/latex209/contrib/textyl/src/tables.c157
-rw-r--r--macros/latex209/contrib/textyl/src/tables.h10
-rw-r--r--macros/latex209/contrib/textyl/src/textyl.c3422
-rw-r--r--macros/latex209/contrib/textyl/src/tyl.c1509
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec1.300pkbin0 -> 2468 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec1.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec10.300pkbin0 -> 4208 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec10.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec11.300pkbin0 -> 4208 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec11.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec12.300pkbin0 -> 4644 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec12.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec2.300pkbin0 -> 2716 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec2.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec3.300pkbin0 -> 2716 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec3.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec4.300pkbin0 -> 3084 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec4.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec5.300pkbin0 -> 3084 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec5.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec6.300pkbin0 -> 3432 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec6.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec7.300pkbin0 -> 3432 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec7.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec8.300pkbin0 -> 3692 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec8.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec9.300pkbin0 -> 3692 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/cvec9.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec1.300pkbin0 -> 2468 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec1.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec10.300pkbin0 -> 2536 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec10.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec11.300pkbin0 -> 2536 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec11.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec12.300pkbin0 -> 2664 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec12.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec2.300pkbin0 -> 2504 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec2.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec3.300pkbin0 -> 2504 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec3.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec4.300pkbin0 -> 2516 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec4.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec5.300pkbin0 -> 2516 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec5.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec6.300pkbin0 -> 2516 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec6.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec7.300pkbin0 -> 2516 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec7.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec8.300pkbin0 -> 2520 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec8.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec9.300pkbin0 -> 2520 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/hvec9.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/mf/README9
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/mf/makevec.bat5
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/mf/makevec2.bat13
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/mf/makewrappers.sh7
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/mf/vecbase.mf1151
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/mf/vecbase2.mf176
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec1.300pkbin0 -> 2468 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec1.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec10.300pkbin0 -> 3132 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec10.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec11.300pkbin0 -> 3132 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec11.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec12.300pkbin0 -> 3192 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec12.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec2.300pkbin0 -> 2640 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec2.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec3.300pkbin0 -> 2640 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec3.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec4.300pkbin0 -> 2792 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec4.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec5.300pkbin0 -> 2792 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec5.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec6.300pkbin0 -> 2936 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec6.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec7.300pkbin0 -> 2936 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec7.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec8.300pkbin0 -> 3044 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec8.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec9.300pkbin0 -> 3044 bytes
-rw-r--r--macros/latex209/contrib/textyl/vecfonts/vvec9.tfmbin0 -> 944 bytes
-rw-r--r--macros/latex209/contrib/theapa/theapa.bst1446
-rw-r--r--macros/latex209/contrib/theapa/theapa.sty1231
-rw-r--r--macros/latex209/contrib/timeline/timeline.sty118
-rw-r--r--macros/latex209/contrib/timeline/tl-sample.tex20
-rw-r--r--macros/latex209/contrib/trees/eppstein/trees.sty120
-rw-r--r--macros/latex209/contrib/trees/pstrees/README50
-rw-r--r--macros/latex209/contrib/trees/pstrees/align.h27
-rw-r--r--macros/latex209/contrib/trees/pstrees/ansi.c63
-rw-r--r--macros/latex209/contrib/trees/pstrees/columns.c132
-rw-r--r--macros/latex209/contrib/trees/pstrees/makefile6
-rw-r--r--macros/latex209/contrib/trees/pstrees/slurp.c211
-rw-r--r--macros/latex209/contrib/trees/pstrees/test.txp20
-rw-r--r--macros/latex209/contrib/trees/pstrees/treesbin0 -> 49152 bytes
-rw-r--r--macros/latex209/contrib/trees/pstrees/trees.156
-rw-r--r--macros/latex209/contrib/trees/pstrees/trees.c372
-rw-r--r--macros/latex209/contrib/trees/pstrees/trees.doc.pdfbin0 -> 69752 bytes
-rw-r--r--macros/latex209/contrib/trees/pstrees/trees.doc.tex338
-rw-r--r--macros/latex209/contrib/trees/pstrees/trees.doc.txp311
-rw-r--r--macros/latex209/contrib/trees/pstrees/trees.sty258
-rw-r--r--macros/latex209/contrib/trees/pstrees/words.c292
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/Makefile12
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/README48
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/avm-doc.sty122
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/avm-doc.tex1245
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/avm.sty158
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/lingmacros-manual.pdfbin0 -> 32938 bytes
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/lingmacros-manual.tex124
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/lingmacros.sty312
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/tree-dvips.sty271
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/tree-dvips91.pro110
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/tree-dvips91.script718
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/tree-manual.pdfbin0 -> 70864 bytes
-rw-r--r--macros/latex209/contrib/trees/tree-dvips/tree-manual.tex603
-rw-r--r--macros/latex209/contrib/trees/tree_tex/Makefile70
-rw-r--r--macros/latex209/contrib/trees/tree_tex/README58
-rw-r--r--macros/latex209/contrib/trees/tree_tex/layout.c382
-rw-r--r--macros/latex209/contrib/trees/tree_tex/layout.h77
-rw-r--r--macros/latex209/contrib/trees/tree_tex/test1.tex44
-rw-r--r--macros/latex209/contrib/trees/tree_tex/test2.tex72
-rw-r--r--macros/latex209/contrib/trees/tree_tex/treetex.c529
-rw-r--r--macros/latex209/contrib/trees/tree_tex/treetex.sty107
-rw-r--r--macros/latex209/contrib/trees/vanroose/trees.pdfbin0 -> 32067 bytes
-rw-r--r--macros/latex209/contrib/trees/vanroose/trees.sty86
-rw-r--r--macros/latex209/contrib/trees/vanroose/trees.tex64
-rw-r--r--macros/latex209/contrib/tugboat/ltugboat.sty718
-rw-r--r--macros/latex209/contrib/tugboat/ltugproc.sty217
l---------macros/latex209/contrib/tugboat/tugboat.cmn1
-rw-r--r--macros/latex209/contrib/ucthesis/uct10.doc420
-rw-r--r--macros/latex209/contrib/ucthesis/uct11.doc419
-rw-r--r--macros/latex209/contrib/ucthesis/uct12.doc420
-rw-r--r--macros/latex209/contrib/ucthesis/uctest.bib138
-rw-r--r--macros/latex209/contrib/ucthesis/uctest.tex109
-rw-r--r--macros/latex209/contrib/ucthesis/ucthesis.doc1238
-rw-r--r--macros/latex209/contrib/ucthesis/ucthesis.readme220
-rw-r--r--macros/latex209/contrib/unixman/unixman.pdfbin0 -> 74465 bytes
-rw-r--r--macros/latex209/contrib/unixman/unixman.sty498
-rw-r--r--macros/latex209/contrib/unixman/unixman.tex320
-rw-r--r--macros/latex209/contrib/uw-thesis/uw-thesis.bib95
-rw-r--r--macros/latex209/contrib/uw-thesis/uw-thesis.sty542
-rw-r--r--macros/latex209/contrib/uw-thesis/uw-thesis.tex933
-rw-r--r--macros/latex209/contrib/verbtext/verbtext.sty2436
-rw-r--r--macros/latex209/contrib/verbtext/vtxtdem1.tex13
-rw-r--r--macros/latex209/contrib/verbtext/vtxtdem2.tex14
-rw-r--r--macros/latex209/contrib/verbtext/vtxtdemo.tex2003
-rw-r--r--macros/latex209/contrib/window/window.sty206
-rw-r--r--macros/latex209/contrib/window/window.tex70
-rw-r--r--macros/latex209/contrib/wright/wright.sty74
-rw-r--r--macros/latex209/contrib/wright/wright.tex14
-rw-r--r--macros/latex209/contrib/xarticle/art7.sty175
-rw-r--r--macros/latex209/contrib/xarticle/art8.sty175
-rw-r--r--macros/latex209/contrib/xarticle/art9.sty175
-rw-r--r--macros/latex209/contrib/xarticle/article.sty371
-rw-r--r--macros/latex209/contrib/xarticle/xarticle.sty246
-rw-r--r--macros/latex209/contrib/zaccone/zaccone.sty37
-rw-r--r--macros/latex209/contrib/zaccone/zaccone.tex17
-rw-r--r--macros/latex209/contrib/zed/zed.sty323
-rw-r--r--macros/latex209/contrib/zed/zmacros.tex397
-rw-r--r--macros/latex209/contrib/zero/zero-README25
-rw-r--r--macros/latex209/contrib/zero/zero-test.tex64
-rw-r--r--macros/latex209/contrib/zero/zero.sty112
-rw-r--r--macros/latex209/distribs/README.obsolete13
1074 files changed, 308317 insertions, 0 deletions
diff --git a/macros/latex209/contrib/abstr_collect/abstr_collect.sty b/macros/latex209/contrib/abstr_collect/abstr_collect.sty
new file mode 100644
index 0000000000..28474f2ab9
--- /dev/null
+++ b/macros/latex209/contrib/abstr_collect/abstr_collect.sty
@@ -0,0 +1,112 @@
+% abstract_colection.sty by balemi@aut.ethz.ch
+% created 15-AUG-91
+
+\typeout{Document Style `abstract_collection' <15-AUG-91>.}
+
+\input article.sty\relax
+
+% Definitions Necessary to put all abstracts together
+
+%disable \begin{document}, \end{document, \documentstyle
+\def\document{}
+\def\enddocument{}
+\def\documentstyle{
+\@ifnextchar[{\@documentstyle}{\@documentstyle[]}}
+\def\@documentstyle[#1]#2{}
+
+\def\@preamblecmds{\do\totaldocument \do\totaldocumentstyle
+ \do\@totaldocumentstyle
+ \do\@options \do\@preamblecmds \do\@optionlist \do\@optionfiles
+ \do\nofiles \do\includeonly \do\makeindex \do\makeglossary}
+
+%\define totaldocument instead of document for the master file
+\def\totaldocument{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement
+ \makeatletter\let\@writefile\@gobbletwo
+ \@input{\jobname.aux}\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\relax}\fi
+ \def\do##1{\let ##1\@notprerr}%
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+
+\def\endtotaldocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+% comment the lines
+% in \let\maketitle\relax
+% in \let\@maketitle\relax
+% in the definition of \maketitle
+
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em
+\begin{center}
+ \noindent{\LARGE \bf \@title \par} \vskip 1.5em {\lineskip .5em
+\begin{tabular}[t]{c}\hskip -\parindent\hskip-.5em\large\@author
+ \end{tabular}\par}
+ \vskip 1em {\large \@date}
+ \par
+\end{center}
+ \vskip 1.5em}
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+\def\and{%% % \begin{tabular}
+\end{tabular}
+\par
+\begin{tabular}[t]{c}\hskip -\parindent\hskip-.5em\large%% \end{tabular}
+}
+
+\def\maketitle{
+\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \newpage
+ \global\@topnum\z@ \@maketitle \thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ %\let\maketitle\relax
+ %\let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@abstract{}
+\gdef\@keywords{}\gdef\@title{}\let\thanks\relax
+}
+
+% removes date
+\def\date#1{}
+\gdef\@date{}
+
+% redefines abstract to be as wide as page
+\def\abstract{ \section*{Abstract}}
+\def\endabstract{\normalsize\rm}
+
+% one column only for abstracts
+\onecolumn
+
+% to input a whole document
+\def\inputabstract#1{\input{#1}\newpage}
+
+\setlength\topmargin{-15mm}
+\setlength\oddsidemargin{4mm}
+\setlength\evensidemargin{4mm}
+\setlength\textheight{245mm}
+\setlength\textwidth{160mm}
diff --git a/macros/latex209/contrib/abstr_collect/abstr_collect.tex b/macros/latex209/contrib/abstr_collect/abstr_collect.tex
new file mode 100644
index 0000000000..b9cf4f148c
--- /dev/null
+++ b/macros/latex209/contrib/abstr_collect/abstr_collect.tex
@@ -0,0 +1,8 @@
+\documentstyle[12pt]{abstr_collect}
+\onecolumn
+\begin{totaldocument}
+\bibliographystyle{IFAC}
+\inputabstract{ascona_abstract_sample}
+\inputabstract{ascona_abstract_sample}
+\end{totaldocument}
+
diff --git a/macros/latex209/contrib/acm/acm.bst b/macros/latex209/contrib/acm/acm.bst
new file mode 100644
index 0000000000..987472c17a
--- /dev/null
+++ b/macros/latex209/contrib/acm/acm.bst
@@ -0,0 +1,1134 @@
+% ACM Transactions bibliography style (24-Jan-88 version)
+% A lot like abbrv.bst, but names come out "Last, initials", and in \sc.
+% Some dates are parenthesized.
+%
+% History
+% 2/ 6/86 (HWT) Original version, by Howard Trickey.
+% 3/ 5/86 (HWT) Put in pp. everywhere but articles, as per ACM style.
+% 1/24/88 (OP&HWT) Updated for BibTeX version 0.99a, Oren Patashnik;
+% corrected the abbreviations to "Mar." and "Sept.";
+% THIS `acm' VERSION DOES NOT WORK WITH BIBTEX 0.98i.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {emphasizeic}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "\/}" * }
+ if$
+}
+
+FUNCTION {scapify}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\sc " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { t "others" =
+ { ", et~al." * }
+ { ", and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+% For names inside entries (e.g., editors of an "In ...");
+% this is exactly ABBRV.BST's `format.names' function.
+FUNCTION {format.innames}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names scapify }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names scapify
+ editor num.names$ #1 >
+ { ", Eds." * }
+ { ", Ed." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.ineditors}
+{ editor empty$
+ { "" }
+ { editor format.innames
+ editor num.names$ #1 >
+ { ", Eds." * }
+ { ", Ed." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "vol.~" volume *
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "no.~" }
+ { "No.~" }
+ if$
+ number *
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ "~ed." * }
+ { edition "t" change.case$ "~ed." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages n.dashify }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pp.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pp.~" pages n.dashify * }
+ { "p.~" pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.journal.vol.num.date}
+{ journal empty$
+ { "empty journal in " cite$ * warning$
+ ""
+ }
+ { journal
+ volume empty$
+ 'skip$
+ { " " * volume * }
+ if$
+ number empty$
+ 'emphasizeic
+ { emphasize ", " * number * }
+ if$
+ year empty$
+ { "empty year in " cite$ * warning$ }
+ { " (" * format.date * ")" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pp.pages
+ { type empty$
+ { "ch.~" chapter * }
+ { type "l" change.case$ chapter tie.or.space.connect }
+ if$
+ pages empty$
+ 'skip$
+ { ", " * format.pp.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { "In " booktitle emphasize *
+ editor empty$
+ 'skip$
+ { ", " * format.ineditors * }
+ if$
+ }
+ if$
+}
+
+% The proceedings title (it's on the stack) gets an (address, date) appended
+FUNCTION {format.proc.date}
+{ duplicate$ empty$
+ { pop$ "" }
+ { year empty$
+ { "empty year in " cite$ * warning$
+ address empty$
+ 'emphasize
+ { emphasizeic
+ " (" * address * ")" *
+ }
+ if$
+ }
+ { emphasizeic
+ " (" *
+ address empty$
+ 'skip$
+ { address * ", " * }
+ if$
+ format.date *
+ ")" *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.proc.date}
+{ booktitle empty$
+ { "" }
+ { "In " booktitle format.proc.date * }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Tech. Rep." }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Vol.~" volume *
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.journal.vol.num.date output
+ format.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pp.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.edition output
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.edition output
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.date "year" output.check
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.edition output
+ format.bvolume output
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull }
+ if$
+ format.chapter.pages output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.proc.date "booktitle" output.check
+ format.ineditors output
+ format.bvolume output
+ format.number.series output
+ organization output
+ publisher output
+ }
+ { format.incoll.inproc.crossref output.nonnull }
+ if$
+ format.pp.pages output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization scapify output }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.edition output
+ author empty$
+ { address new.block.checka }
+ { organization address new.block.checkb
+ organization output
+ }
+ if$
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization scapify output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ title format.proc.date "title" output.check
+ format.bvolume output
+ format.number.series output
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sept."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Programming"}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Gr."}
+
+MACRO {toms} {"ACM Trans. Math. Softw."}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Program. Lang. Syst."}
+
+MACRO {tcs} {"Theoretical Comput. Sci."}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/macros/latex209/contrib/acm/acm.sty b/macros/latex209/contrib/acm/acm.sty
new file mode 100644
index 0000000000..90ca04e24d
--- /dev/null
+++ b/macros/latex209/contrib/acm/acm.sty
@@ -0,0 +1,1123 @@
+% ACM DOCUMENT STYLE -- Released 23 Apr 89
+% Based on ARTICLE.DOC of 16 March 1988
+% For LaTeX version 2.09
+% ARTICLE.DOC is Copyright (C) 1988 by Leslie Lamport
+% Modifications by Jerry Leichter
+\typeout{Document Style `acm' <23 Apr 89>.}
+
+
+% PREPARING A FOREIGN LANGUAGE VERSION:
+%
+% This document style is for documents prepared in the English language.
+% To prepare a version for another language, various English words must
+% be replaced. All the English words that required replacement are
+% indicated below, where we give the name of the command in which the
+% words appear, and the entire line containing the word(s), with the
+% actual words underlined.
+%
+% \tableofcontents:
+% \def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+% ~~~~~~~~ ~~~~~~~~ ~~~~~~~~
+% \listoffigures:
+% \def\listoffigures{\section*{List of Figures\@mkboth
+% ~~~~~~~~~~~~~~~
+% {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+% ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
+% \listoftables:
+% \def\listoftables{\section*{List of Tables\@mkboth
+% ~~~~~~~~~~~~~~
+% {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+% ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
+% \thebibliography:
+% \def\thebibliography#1{\section*{References\@mkboth
+% ~~~~~~~~~~
+% {REFERENCES}{REFERENCES}}\list
+% ~~~~~~~~~~ ~~~~~~~~~~
+% \theindex:
+% \columnsep 35pt\twocolumn[\section*{Index}]
+% ~~~~~
+% \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+% ~~~~~ ~~~~~
+% figure and table environments:
+% \def\fnum@figure{Figure \thefigure}
+% ~~~~~~
+% \def\fnum@table{Table \thetable}
+% ~~~~~
+% abstract environment:
+% {\bf Abstract\vspace{-.5em}\vspace{0pt}}
+% ~~~~~~~~
+
+
+% CHOOSING THE TYPE SIZE:
+%
+% The type size option is handled by reading a different file for each
+% size, as follows:
+% 10pt : ART10, 11pt : ART11, 12pt : ART12
+% Implemented by \def'ing \@ptsize to last digit of file name.
+%
+
+%
+% The size specified is 9pt over 10pt, and cannot be changed. Since there is
+% stuff which uses \@ptsize, we arbitrarily leave it equal to 0.
+\def\@ptsize{0}
+\@namedef{ds@11pt}{\@warning{11pt option not supported by this style}}
+\@namedef{ds@12pt}{\@warning{12pt option not supported by this style}}
+
+% Two-side or one-side printing. Two sided is unlikely to be useful, and
+% in fact the margins aren't set up for it, but if someone wants it....
+%
+% \@twosidefalse % Default is one-sided printing.
+\def\ds@twoside{\@twosidetrue % Defines twoside option.
+ \@mparswitchtrue} % Marginpars go on outside of page.
+
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+% The following is a modified version of art10.doc
+% ARTICLE DOCUMENT STYLE -- Released 22 Dec 1987
+% for LaTeX version 2.09
+% Copyright (C) 1987 by Leslie Lamport
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+% Font for all subheads - Bold faced san serif at 9pt. Note: This is not
+% in the standard LaTeX set, and must be generated using Metafont. If you
+% don't want to bother with that, just lcmssb8 isn't THAT far off.
+\font\@subheadfont=lcmssb8 scaled\magstephalf
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+%
+% Note: The leading is allowed to vary a bit to allow for adjustment of the
+% columns. The variation of .1pt allows for somewhat less than one line's
+% worth of stretch or shrink on a full page (about 68 lines). It's also well
+% under one pixel at 300dpi.... The total variability on a page is at most
+% about 6.8pt, which won't interfere TOO badly with the stretch and shrink
+% for paragraphs, displays, and such.
+%
+% If you use the raggedbottom option mentioned in the "DIMENSION OF TEXT"
+% section, you'll probably want to remove all the variability in the leading.
+
+\def\@normalsize{\@setsize\normalsize{10pt plus .1pt minus .1pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 3.5pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\small{\@setsize\small{9pt plus .1pt minus .1pt}\viiipt\@viiipt
+\abovedisplayskip 5.5pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 2.5pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+% For the really small sizes we don't let the leading shrink or stretch.
+% (Note that if \footnotesize leading could change, we'd probably want
+% to adjust \footnotesep as well so that all \footnotesize material gets
+% the same apparent leading.)
+%
+\def\footnotesize{\@setsize\footnotesize{7.7pt}\viipt\@viipt}
+\def\scriptsize{\@setsize\scriptsize{6pt}\vpt\@vpt}
+\let\tiny\scriptsize
+
+% For the larger sizes, we may as well allow some more stretch and shrink.
+%
+\def\large{\@setsize\large{12pt plus .1pt minus .1pt}\xpt\@xpt}
+\def\Large{\@setsize\Large{14pt plus .2pt minus .2pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{18pt plus .2pt minus .2pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt plus .3pt minus .3pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{25pt plus .3pt minus .3pt}\xxpt\@xxpt}
+
+\normalsize % Choose the normalsize font.
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. THE TWO-SIDE MARGINS ARE MEANINGLESS IN THIS STYLE!!!
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing (meaningless):
+ \oddsidemargin 44pt % Left margin on odd-numbered pages.
+ \evensidemargin 82pt % Left margin on even-numbered pages.
+ \marginparwidth 107pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin -.25in % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin -.25in % (Exact value is 4.5pc-1in)
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -.25in % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight \z@ % Height of box containing running head.
+\headsep \z@ % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip \z@ % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+% DIMENSION OF TEXT:
+% ACM allows the page (column?) height to vary from 9 1/8" (9.125in) to
+% 9 7/16" (9.4375). Unfortunately, in LaTeX it's impossible, in any simple
+% way, to allow the page height to vary without also allowing the height of
+% the columns on a page to differ, which doesn't look great (to my eye, any-
+% way). So instead we use \flushbottom at the maximum length.
+\textheight 9.4375in\flushbottom
+
+% The commented-out definition of \@textbottom is an alternative. It sets
+% the column height to the mean (9.28125in), then sets up a "pseudo ragged
+% bottom" with a filler which can expand or contract to the limits allowed
+% (.15625in). You'll probably want to change the definitions of the leading
+% for the various sizes to eliminate their stretch and shrink if you enable
+% this.
+%\textheight 9.28125in
+%\def\@textbottom{\vskip \z@ plus .15625in minus .15625in \let\@texttop\relax}
+\textwidth 7.0in % Width of text line. (2*20pc + 2pc)
+ % For two-column mode (default):
+\columnsep .33in % Space between columns (2pc)
+\columnseprule 0pt % Width of rule between columns.
+
+% FOOTNOTES:
+
+\footnotesep 5.39pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 8pt plus 4pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 11pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 18pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 18pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 11pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 0pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 1.5em % Width of paragraph indentation.
+%\topsep 8pt plus 2pt minus 4pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 2pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+%\itemsep 4pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+% See \@listI for values of \topsep and \itemsep
+% (Change made 9 Jun 87)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+%
+% This definition is unchanged from ART10 and probably not very useful
+%
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent \z@ \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par \nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- i.e., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+%
+% Given the narrow columns, many section names break, and thus look funny.
+% So we set all of the ones that are not run in with \raggedright.
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\normalsize\@subheadfont\raggedright}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\normalsize\@subheadfont\raggedright}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\@subheadfont\raggedright}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}%
+ {\normalsize\@subheadfont}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\@subheadfont}}
+
+%
+% We need to force the section heading to all upper case.
+%
+\let\ltx@@sect=\@sect
+\def\@sect#1#2#3#4#5#6[#7]#8{\ltx@@sect {#1}{#2}{#3}{#4}{#5}{#6}[#7]%
+ {\uppercase{#8}}}
+\let\ltx@@ssect=\@ssect
+\def\@ssect#1#2#3#4#5{\ltx@@ssect{#1}{#2}{#3}{#4}{\uppercase{#5}}}
+
+% Default initializations of \...mark commands. See below for their
+% us in defining page styles.
+%
+
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{2}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section and subsection counters to zero
+% -- redefine the section counter to produce appendix numbers
+% -- redefine the \section command if appendix titles and headings are
+% to look different from section titles and headings.
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+% \parsep 4pt plus 2pt minus 1pt (Removed 9 Jun 87)
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 9 Jun 87)
+\def\@listI{\leftmargin\leftmargini \parsep 3.5pt plus 2pt minus 1pt%
+\topsep 7.5pt plus 2pt minus 4pt%
+\itemsep 3.5pt plus 2pt minus 1pt}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 3.5pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+%
+% 16 Mar 88 -- changed defs of \labelenum... to use \theenum...
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+%\newdimen\descriptionmargin
+%\descriptionmargin=3em
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+% The macro \@eqnnum defines how equation numbers are to appear in equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero.
+%
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+\tabcolsep 6pt % Half the space between columns in a tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is stepped.
+% Counter OLDCTR must already be defined.
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+
+\def\thepart{\Roman{part}} % Roman numeral part numbers.
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \subsection command writes a
+% \contentsline{subsection}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If subsections are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \thesubsection. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table' environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@section,
+% \l@subsection, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note that \section is level 1,
+% \subsection is level 2, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+
+% TABLEOFCONTENTS
+%
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} % space above part line
+ \begingroup
+ \@tempdima 3em % width of box holding part number, used by
+ \parindent \z@ \rightskip \@pnumwidth %% \numberline
+ \parfillskip -\@pnumwidth
+ {\large \bf % set line in \large boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak % Never break after part entry
+ \endgroup}
+
+\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break
+ \addvspace{1.0em plus 1pt} % space above toc entry
+ \@tempdima 1.5em % width of box holding section number
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
+ \hskip -\leftskip %% 25 Jan 88 change to \numberline
+ #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+
+% LIST OF FIGURES
+%
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+% LIST OF TABLES
+%
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus .07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+
+\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+% \def\@biblabel#1{[#1]\hfill} % Produces the label for a \bibitem[...]
+ % command.
+% \def\@cite#1{[#1]} % Produces the output of the \cite command.
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+
+\newif\if@restonecol
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+\def\@idxitem{\par\hangindent 40pt}
+
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@} % The \hrule has default height of .4pt .
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth).
+%
+% The following macro indents all lines of the footnote by 10pt, and
+% indents the first line of a new paragraph by 1em. To change these
+% dimensions, just substitute the desired value for '10pt' [in both
+% places] or '1em'. The mark is flushright against the footnote.
+% \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+% \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+%
+% A simpler macro is used, in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. Thus, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+% changed 25 Jun 86 to fix according to Howard Trickey:
+% instead of \unhbox\@tempboxa\par we do #1: #2\par
+%
+% This definition refers to the new \if@topcaption condition, which isn't
+% in older LaTeX's. So we define it, and set it permanently false, if
+% necessary. This needs a little hackery since \newif is \outer....
+{\let\newif\relax \gdef\@tempa{\newif\if@topcaption}}
+ \@ifundefined{if@topcaption}{\@tempa}{}
+
+\long\def\@makecaption#1#2{\par\addvspace{10pt}
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ #1: #2\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+ \if@topcaption\vskip 10pt\fi}
+
+
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+
+% FIGURE
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+
+% \maketitle ==
+% BEGIN
+% \par
+% \begingroup
+% redefine \@makefnmark so footnote marks take zero space (this make
+% centering look better)
+% \thefootnote == \fnsymbol{footnote} % to number by *, dagger, etc.
+% if @twocolumn = true
+% then \twocolumn[\@maketitle]
+% else \@maketitle
+% fi
+% \thispagestyle{plain}
+% \@thanks % \thanks defines \@thanks to have \footnotetext commands for
+% % producing footnotes.
+% \endgroup
+% END
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+% % Leave room for ACM copyright stuff
+ \begin{figure}[b]
+ \vskip -\dbltextfloatsep % Cancel extra space at top
+%
+% Text specs say .75in, but the example sheet says 1in. Sigh
+% \vskip .75in % Insert the 3/4in ACM wants
+ \vskip 1in % Insert the 1in ACM wants
+ \end{figure}
+ \global\@minipagefalse % Avoid screwing up section headings etc.
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vbox to 2.35in{
+ \vskip 2em plus .5fil minus 1.5em % Vertical space above title.
+ \begin{center}
+ {\huge \@title \par} % Title set in \huge size.
+ \vskip 1.5em minus .4em % Vertical space after title.
+ {\large % each author set in \large, in a
+ \lineskip .5em % tabular environment
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em % Vertical space after author.
+ {\large \@date} % Date set in \large size.
+ \end{center}
+ \par
+ \vskip 1.5em plus 1fil minus .5em}} % Vertical space after date.
+
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \sectionmark, ... , where
+% \sectionmark{TEXT} is called by \section to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'left' mark. Works like TeX's
+% \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'right' mark. Works like TeX's
+% \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \section command and
+% the right mark is changed by a \subsection command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+% Commands like \tableofcontents that should set the marks in some page styles
+% use a \@mkboth command, which is \let by the pagestyle command (\ps@...)
+% to \markboth for setting the heading or \@gobbletwo to do nothing.
+
+\mark{{}{}} % Initializes TeX's marks
+
+% \ps@empty and \ps@plain defined in LATEX.TEX
+
+%
+% In this style, none of the headings are meaningful; we turn them all into
+% "empty".
+%
+\let\ps@headings=\ps@empty
+\let\ps@myheadings=\ps@empty
+\let\ps@plain=\ps@empty
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations. For ACM, we require two column output. This
+% makes typesetting harder, so we default to \sloppy.
+%
+\ps@empty % 'empty' page style
+\pagenumbering{arabic} % Arabic page numbers (meaningless)
+\twocolumn % Double-column
+%\flushbottom % Set earlier
+\sloppy % Make things easier for TeX
diff --git a/macros/latex209/contrib/acs/acs.bst b/macros/latex209/contrib/acs/acs.bst
new file mode 100644
index 0000000000..b4b2fe33b5
--- /dev/null
+++ b/macros/latex209/contrib/acs/acs.bst
@@ -0,0 +1,949 @@
+% BibTeX standard bibliography style `ACS'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { " " * write$ }
+ { output.state after.block =
+ { ", " * write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {boldface}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\bf " swap$ * "}" * }
+ if$
+}
+
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { "``" title "t" change.case$ * "''" * }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ 'year
+ {" (" year * ")" * }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { ", pp." pages n.dashify tie.or.space.connect }
+ { ", p." pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null boldface
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ", pp. " * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/macros/latex209/contrib/acs/acsarticle.sty b/macros/latex209/contrib/acs/acsarticle.sty
new file mode 100644
index 0000000000..5b5f5d58cb
--- /dev/null
+++ b/macros/latex209/contrib/acs/acsarticle.sty
@@ -0,0 +1,150 @@
+% ACSarticle.sty 22-May-91
+% for chapter according to formattinng instructions of
+% Advances in Control Systems
+%
+% use with \title{} \author{} \address{} \maketitle
+
+\typeout{Document Style `ACSarticle` <22 June 91>.}
+
+\def\title#1{\gdef\@title{\raggedleft #1}}
+\def\author#1{\gdef\@author{\raggedleft #1}}
+\def\address#1{\gdef\@address{\raggedleft #1}}
+\input article.sty\relax
+\mark{{}{}}
+
+\def\maketitle{
+\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@address{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \null
+ \vskip 5em
+ {\Large\bf \@title \par} \vskip 2.5em { \lineskip .5em
+ \large\bf \@author
+\par}
+ \vskip 3em \@address
+ \par
+ \vskip 2.5em}
+
+
+
+% Fix the look of the references to match the sample
+\def\thebibliography#1{\section{REFERENCES\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {\arabic{enumi}.\hfill}{\settowidth\labelwidth{[22.]}
+\labelsep 0mm
+\itemindent 0mm
+\advance\leftmargin -2mm
+%\leftmargin\labelwidth
+% \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\long\def\@makecaption#1#2#3{
+\ifx\figurestring#3
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\bf #1.} #2}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{\bf #1.~ }
+ \parbox{\hsize}{\raggedright\hangindent \wd\@tempboxa \hangafter=1%
+ \unhbox\@tempboxa#2}
+ \else \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+\else
+ \setbox\@tempboxa\hbox{{\bf #1.} #2}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{\bf #1.~ }
+ \parbox{\hsize}{\raggedright\hangindent \wd\@tempboxa \hangafter=1%
+ \unhbox\@tempboxa#2}
+ \else \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+ \vskip 10pt
+\fi
+}
+\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
+\def\@biblabel#1{#1.\hfill}
+\def\fnum@table{Table~\thetable}
+\def\fnum@figure{{\bf Fig.}~\thefigure}
+\def\thetable{\@Roman\c@table}
+
+%Format size
+\setlength\topmargin{20mm}
+\setlength\oddsidemargin{20mm}
+\setlength\evensidemargin{20mm}
+\setlength\textheight{7.125in}
+\setlength\textwidth{4.5in}
+\renewcommand{\baselinestretch}{1.2}
+
+% Enumerate sections as I. A. 1. a.
+\def\thepart{\Roman{part}}
+\def\thesection {\Roman{section}}
+\def\thesubsection {\Alph{subsection}}
+\def\thesubsubsection {\arabic{subsubsection}}
+\def\theparagraph {\alph{paragraph}}
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection{paragraph}{3}{\z@}{3.25ex plus 1ex
+minus .2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname.\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+
+%Modify Table of Contents to include paragraphs
+
+\def\tableofcontents{\section*{}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 2em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{2em}{1.8em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{1.8em}}
+\def\l@paragraph{\@dottedtocline{3}{7.0em}{1.8em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
diff --git a/macros/latex209/contrib/address/3across.tex b/macros/latex209/contrib/address/3across.tex
new file mode 100644
index 0000000000..503699eae2
--- /dev/null
+++ b/macros/latex209/contrib/address/3across.tex
@@ -0,0 +1,27 @@
+%%% ============================================================
+%%% @LaTeX-style-file{
+%%% author = "Michael Wester",
+%%% version = "1.0",
+%%% date = "July 1991",
+%%% time = "NULL",
+%%% filename = "3across.tex",
+%%% address = "Math & Stat Dept.
+%%% University of New Mexico
+%%% Albuquerque, NM 87131",
+%%% telephone = "NA"
+%%% FAX = "NA"
+%%% checksum = "NA",
+%%% email = "wester@spectre.unm.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%%
+%%% keywords = "LaTeX, TeX, formletter, mailing labels",
+%%% supported = "yes",
+%%%
+%%% docstring = "Create 3-across mailing labels.",
+%%% }
+%%% =================================================================
+\ifcase\the\Naddr\or\topbox{1in}{2.5in}{\Name\\\AddrBlock1}%
+ \or\topbox{1in}{2.5in}{\Name\\\AddrBlock1}%
+ \or\topbox{1in}{2.5in}{\Name\\\AddrBlock1}\\
+ \null\Naddr=0
+\fi
diff --git a/macros/latex209/contrib/address/3pre.tex b/macros/latex209/contrib/address/3pre.tex
new file mode 100644
index 0000000000..b70e1ea803
--- /dev/null
+++ b/macros/latex209/contrib/address/3pre.tex
@@ -0,0 +1,45 @@
+%%% ============================================================
+%%% @LaTeX-style-file{
+%%% author = "Michael Wester",
+%%% version = "1.0",
+%%% date = "July 1991",
+%%% time = "NULL",
+%%% filename = "3pre.tex",
+%%% address = "Math & Stat Department
+%%% University of New Mexico
+%%% Albuquerque, NM 87131",
+%%% telephone = "NA",
+%%% FAX = "NA",
+%%% checksum = "NA",
+%%% email = "wester@spectre.unm.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%%
+%%% keywords = "LaTeX, TeX, formletter, mailing labels",
+%%% supported = "yes",
+%%%
+%%% docstring = "Preamble for 3across",
+%%% }
+%%% =================================================================
+\def\DEFAULTletter{3across}
+\breakupfalse
+\ifundefined{LaTeX} % TeX
+ \voffset=-.795in
+ \hoffset=-.75in
+ \vsize=11in
+ \hsize=8.5in
+ \parindent=0in
+ \nopagenumbers
+ \raggedbottom
+ %
+ \def\\{\hfil\break}
+\else % LaTeX
+ \documentstyle{letter}
+ \topmargin -.795in
+ \headheight 0in
+ \headsep 0in
+ \oddsidemargin -.75in
+ \textheight 11in
+ \textwidth 8.5in
+ \pagestyle{empty}
+ \raggedbottom
+\fi
diff --git a/macros/latex209/contrib/address/Paper.tex b/macros/latex209/contrib/address/Paper.tex
new file mode 100644
index 0000000000..7cd1a9e417
--- /dev/null
+++ b/macros/latex209/contrib/address/Paper.tex
@@ -0,0 +1,745 @@
+%%% ============================================================
+%%% @LaTeX-style-file{
+%%% author = "Jackie Damrau",
+%%% version = "1.0",
+%%% date = "July 1991",
+%%% time = "NULL",
+%%% filename = "3across.tex",
+%%% address = "SSC Laboratory, MS-1011
+%%% 2550 Beckleymeade Avenue
+%%% Dallas, TX 75237-3946",
+%%% telephone = "(214) 708-6048",
+%%% FAX = "(214) 708-5143",
+%%% checksum = "NA",
+%%% email = "damrau@sscvx1.ssc.gov (Internet)
+%%% damrau@sscvx1 (Bitnet)",
+%%% codetable = "ISO/ASCII",
+%%%
+%%% keywords = "LaTeX, TeX, formletter, mailing labels",
+%%% supported = "yes",
+%%%
+%%% docstring = "Conference paper (Paper.tex) explaining
+%%% how to use the program.",
+%%% }
+%%% =================================================================
+\documentstyle{ltugproc}
+\newcommand{\ouradd}{{\sf address}}
+%
+%corrections inserted 1 May 1991
+
+\def\fileversion{v1.03}
+\def\filedate{11 Mar 91}
+
+%\preprinttrue % Comment this line out for final version following meeting
+
+% \let\Now=\null % Uncovering this will remove time stamps on preprints
+%
+%======================================================================
+\begin{document}
+\title{Form Letters with 3-Across Labels Capability}
+\shortTitle{Form Letters with 3-Across Labels}
+\shortAuthor{Jackie Damrau and Michael Wester}
+%
+\author{Jackie Damrau}
+\address{Superconducting Super Collider Laboratory \\ Dallas, Texas,
+75237 USA \\ 214-708-6048; FAX: 214-708-5143}
+\netaddress[\network{Internet}]{damrau@sscvx1.ssc.gov}
+%
+\author{Michael Wester}
+\address{Department of Mathematics and Statistics \\
+University of New Mexico \\ Albuquerque, New Mexico, 87131 USA \\
+505-277-4613}
+\netaddress[\network{Internet}]{wester@spectre.unm.edu}
+
+\begin{abstract}
+This article discusses a general-purpose program for generating form letters,
+using either \TeX\ or \LaTeX. Given three inputs: a preamble
+file for initializations, a list of blank separated addresses, and a letter
+template, this program can be used to generate a letter per address and
+provide personalizations as directed by the template. Sample applications
+are presented, including one which constructs 3-across mailing labels. Thus,
+both form letters and mailing labels can be generated from the same list of
+addresses by simply changing two inputs to the program.
+\end{abstract}
+
+\maketitle
+
+\section{Introduction}
+
+With \TeX\ or \LaTeX, it is not hard to produce a letter to be sent to a
+single addressee. Nor is it difficult to create multiple letters that
+follow a similar format by setting up a form in which changeable
+parameters, such as the name and address, are specified by macros.
+The form can then be input a fixed number of times, each time preceded
+by a redefinition of the parameters. However, there are problems with
+this approach. Modifying the list of addresses or adding new parameters
+to the form can be cumbersome. Also, serious reformatting may be
+required to use the individual pieces of information (such as the names
+and addresses) in other contexts.
+
+An easy-to-use, general-purpose program to generate form letters has
+been developed that overcomes the above problems. This program,
+\ouradd, is written using \TeX\ constructs and macros and can be
+executed by \TeX{}ing or \LaTeX{}ing it.
+
+The \ouradd\ program requires three user-supplied files: a preamble for
+performing initializations (which is optional), a list of addresses
+separated by blank lines, and a template. On execution, \ouradd\
+asks for three file names, and then reads in the addresses one by
+one. For each address, the individual components are assigned to various
+macros, after which the template file is \verb+\input+. The template can,
+therefore, refer to these macros.
+
+The address list need not contain any formatting instructions as
+individual lines of text within a given address are retained by \ouradd.
+ This allows the address file to be pure text and usable by any other
+program. Nor is it required that an address be simply that; any other
+data, such as telephone numbers, test scores, or whatever, may be
+included. Macros are provided to extract both individual lines and
+individual blocks of data.
+
+In the following sections, instructions on how to set
+up the necessary files and details on running the program are furnished.
+In addition, a template for producing 3-across labels is provided which
+demonstrates a simple, but useful application. Finally, some discussion
+of the construction of the macros in \ouradd\ is given, explaining some
+of the difficulties encountered and how they were overcome.
+
+\section{Setting Up the Files}
+
+The easiest file to set up is the address list. It consists of blocks
+of text separated by blank lines. Commonly, the first line of a block
+will be the name of an addressee, while the rest of the lines form the
+address. The \ouradd\ program therefore assigns these segments of text
+to the macros \verb+\Name+ and \verb+\Address+, respectively.
+
+Unlike normal \TeX\ input, individual lines of text within an address
+(which can be of arbitrary length) retain their identity. This is
+accomplished by concatenating the lines, using \verb+\\+ as a
+separator. For \LaTeX, this is quite convenient since a reference to
+\verb+\Address+ will result in the expansion of each \verb+\\+ as a new
+line. In \TeX, a similar effect can be obtained by
+\begin{quote}
+\begin{verbatim}
+\def\\{\hfil\break}
+\end{verbatim}
+\end{quote}
+
+In the template file, individual lines within \verb+\Address+ can be
+selected by \verb+\AddrLine{+$n$\verb+}+, where $n$ is a positive
+integer. In addition, \verb+\Laddr+ will count the number of lines in
+\verb+\Address+ and \verb+\Naddr+ will refer to the current position in
+the address list.
+
+It is often desirable to include other information along with the
+address. The easiest way to do this with \ouradd\ is to divide the
+lines of text in the address segment into subblocks, each of which can
+be of variable length. The macro call, \verb+\AddrBlock{+$k$\verb+}+,
+is provided to select the $k^{\rm th}$ subblock, where a line consisting
+of \verb+---+ acts as a separator between subblocks. (Two consecutive
+lines of \verb+---+ will not produce an empty subblock, but this effect
+can be achieved by inserting a line consisting of \verb+{}+ between the
+lines.)
+
+To extract individual lines from a subblock of \verb+\Address+, a
+two-step process is required.
+\verb+\StoreAddrBlock{+$k$\verb+}\in\Block+ will define the contents of
+the macro \verb+\Block+ to be the $k^{\rm th}$ subblock of
+\verb+\Address+. \verb+\GetLine{+$n$\verb+}\of\Block+ will then select
+the $n^{\rm th}$ line of the \verb+\Block+. This procedure is necessary
+to circumvent some peculiarities of \TeX\ macro expansion.
+
+One of the more salient features of \ouradd\ is the ability to
+intelligently parse the \verb+\Name+ and break it up into its
+components. For example, suppose the name is {\sf The Honorable and
+Mrs.\ Henry \verb+\+\& Matilda Edward Bo van Frothingham III, Royals}.
+The following macro assignments will then be made when this name is
+parsed:
+\begin{center}
+\begin{tabular}{l@{$\; \rightarrow\; $}l}
+ \verb+\SocialTitle+ & {\sf The Honorable and Mrs.} \\
+ \verb+\FirstName+ & {\sf Henry \verb+\+\& Matilda} \\
+ \verb+\MiddleName+ & {\sf Edward Bo} \\
+ \verb+\LastName+ & {\sf van Frothingham} \\
+ \verb+\Suffix+ & {\sf III} \\
+ \verb+\OtherTitle+ & {\sf Royals}
+\end{tabular}
+\end{center}
+Simpler names will result in some of the above macros having null
+definitions.
+
+The macros associated with the \ouradd\ program are summarized in the
+following table.
+\vbox{
+\begin{flushleft}
+%\begin{tabular}{|l|p{1.15in}|}
+ \begin{tabular}{|l|p{1.15in}|}
+\hline
+\verb+ + & \\[-8pt]
+\verb+\DEFAULTtolist+ & default address list (initially, {\tt tolist})\\
+\verb+\DEFAULTletter+ & default letter template (initially, {\tt letter})\\[1.5p
+t]
+\hline
+\verb+ + & \\[-8pt]
+\verb+\Name+ & first line of the address \\
+\verb+\Address+ & subsequent lines of the address \\
+\verb+\SocialTitle+ & e.g., Dr., Mr., Ms. \\
+\verb+\FirstName+ & first name \\
+\verb+\MiddleName+ & middle names \\
+\verb+\LastName+ & last name \\
+\verb+\Suffix+ & e.g., Sr., Jr., III \\
+\verb+\OtherTitle+ & academic and professional titles \\[1.5pt]
+\hline
+\verb+ + & \\[-8pt]
+\verb+\Naddr+ & position of the address in the {\tt tolist} \\
+\verb+\Laddr+ & number of lines in \verb+\Address+ \\
+\verb+\AddrLine{+$n$\verb+}+ & $n^{\rm th}$ line of \verb+\Address+ \\
+\verb+\AddrBlock{+$n$\verb+}+ & $n^{\rm th}$ subblock of \verb+\Address+ \\
+\verb+\StoreAddrBlock{+$n$\verb+}\in\B+ & store the $n^{\rm th}$ subblock of
+ \verb+\Address+ in \verb+\B+ \\
+\verb+\GetLine{+$n$\verb+}\of\B+ & $n^{\rm th}$ line of \verb+\B+ \\[1.5pt]
+\hline
+\verb+ + & \\[-8pt]
+\verb+\addspace\A+ & adds a space after \verb+\A+ if it is not null \\
+\verb+\topbox{+$H$\verb+}{+$W$\verb+}{text}+ & top aligned box of height $H$
+ and width $W$ \\[1.5pt]
+\hline
+\end{tabular}
+\end{flushleft}
+%\end{center}
+%\vskip .1in
+\vskip 4pt
+An example of an address list appears below. Notice that following the
+address in each instance is a separate block of two lines.
+\begin{quote}
+\begin{verbatim}
+Mrs. Apple Thesaurus
+Apt. Z
+234 Gestalt Lane
+Cockermouth, Umbria, U.K.
+---
+artichokes
+jalape\~nos
+
+Harry K. Banana
+P.O. Box 29Z46
+Kahului, Maui, Hawaii
+---
+mustard greens
+okra
+\end{verbatim}
+\end{quote}
+}
+A typical (\LaTeX) letter template that might be used with the above list of
+addresses looks like:
+\begin{quote}
+\begin{verbatim}
+\Name\\
+\AddrBlock{1}
+
+\StoreAddrBlock{2}\in\veggies
+Dear \addspace\SocialTitle\LastName:
+
+Welcome to the vegetable of the month
+club! Your introductory offer of
+two selections this first month are
+\GetLine{1}\of\veggies\ and
+\GetLine{2}\of\veggies. ...
+\newpage
+\end{verbatim}
+\end{quote}
+The macro \verb+\addspace+ is used to produce correct spacing in the
+salutation by adding a proper space after \verb+\SocialTitle+ if it
+contains text and doing nothing if \verb+\SocialTitle+ is empty (as
+would be the case for the second addressee).
+
+The last file needed by \ouradd\ is the preamble. This file is
+\verb+\input+ once and is used to perform initializations, such as
+setting margins and defining macros. If \ouradd\ is being \LaTeX{}ed,
+the preamble is input before the \verb+\begin{document}+ that is
+executed automatically before processing the addresses. A sample
+preamble that can be used under \TeX\ or \LaTeX\ is given below. (The
+definition for \verb+\ifundefined+ can be found in Knuth
+[page~40] and is present in \ouradd.)
+\begin{quote}
+\begin{verbatim}
+%
+% Generic TeX/LaTeX preamble for
+% address.tex .
+%
+\ifundefined{LaTeX} % TeX
+ \magnification=\magstep1
+ \voffset=0in
+ \hoffset=0in
+ \vsize=9in
+ \hsize=6.5in
+ \nopagenumbers
+ %
+ \def\\{\hfil\break}
+ \def\newpage{\vfil\eject}
+\else % LaTeX
+ \documentstyle[12pt]{letter}
+ \topmargin 0in
+ \headheight 0in
+ \headsep 0in
+ \oddsidemargin 0in
+ \textheight 9in
+ \textwidth 6.5in
+ \pagestyle{empty}
+\fi
+\end{verbatim}
+\end{quote}
+
+\section{Running the Program}
+
+The \ouradd\ program is executed simply by typing {\em tex address} or
+{\em latex address}. This action produces the following set of requests:
+\begin{quote}
+\begin{verbatim}
+Enter the filename of the preamble
+ [preamble.tex]:
+Enter filename of recipients' addresses
+ [tolist.tex]:
+Enter the filename of the letter
+ template [letter.tex]:
+\end{verbatim}
+\end{quote}
+
+The filenames in square brackets (\verb+[ ]+)
+are default values and are
+accepted by pressing a \fbox{RETURN}\,. (The default names for the
+second and third files can be changed by redefining the macros
+\verb+\DEFAULTtolist+ and \verb+\DEFAULTletter+ in the preamble.) Of
+course, the various files should contain commands appropriate to the
+package actually being used.
+
+\ouradd\ is designed to be reasonably robust. This and
+\TeX's rules for reading input allows some sloppiness in setting up the
+address list. For example, leading and trailing white space and extra
+blank lines are all ignored. Also, a \verb+%+ can be used to
+comment-out text. This last item implies that any line with a \verb+%+ as its
+first nonblank character will be treated as a blank line.
+
+\section{Making 3-Across Mailing Labels}
+
+By taking advantage of the macros defined in \hbox{\ouradd,} it is not
+difficult to design a template that can produce 3-across labels. The
+following template will create a three-column, 33 labels-per-page format
+for a standard sheet of 2.75''$\times$1'' labels. The resulting
+output can be sent directly to sheets of labels or onto regular
+paper, which can then be photocopied onto label sheets.
+
+\begin{small}
+\begin{verbatim}
+\ifcase\the\Naddr
+ \or\topbox{1in}{2.75in}{\Name\\\AddrBlock1}%
+ \or\topbox{1in}{2.75in}{\Name\\\AddrBlock1}%
+ \or\topbox{1in}{2.75in}{\Name\\\AddrBlock1}\\
+ \Naddr=0
+\fi
+\end{verbatim}
+\end{small}
+
+{
+The methodology used here is to produce differing output depending on
+the value of \verb+\Naddr+. The \verb+\ifcase+ construct will result in
+three horizontally aligned boxes, each containing the current contents
+of \verb+\Name+ and the first subblock of \verb+\Address+, as
+\verb+\Naddr+ takes on the values 1, 2 and 3. At the end of the third
+case, a new line is started and \verb+\Naddr+ is reset to 0. Thus, the
+next time around, \ouradd\ will have incremented \verb+\Naddr+ back to 1
+and the process will start over. The macro
+\verb+\topbox{+$H$\verb+}{+$W$\verb+}{text}+, defined in \ouradd\
+by\parfillskip=0pt\par }
+
+\begin{quote}
+\begin{verbatim}
+\def\topbox#1#2#3{\leavevmode
+ \vtop to #1{\hsize=#2 #3\vfil\eject}}
+\end{verbatim}
+\end{quote}
+will produce a top-aligned box containing the \verb+text+ of height $H$
+and width $W.$
+
+The above strategy is easily modified to handle any number of columns
+and any spacing requirements for a regular gridlike pattern of labels.
+Depending on the printer settings, the top and left margins established
+in the preamble (not shown) may need to be changed as well. Using
+12-point fonts, it is possible to put 6 lines of text in a one-inch-high
+label. This can be increased by decreasing the fontsize set in the
+preamble.
+
+\subsection{Comments on other labeling schemes.}
+
+A label-making capability is already available in \LaTeX, as well
+as in other programs; but these do not possess the flexibility
+nor the ease of use exhibited by \ouradd.
+According to Lamport [page~67], the \verb+\makelabels+ command
+prints a ``list of mailing labels, one for each {\tt letter} environment, in
+a format suitable for xerographic copying onto `peel-off' labels.''
+However, the two-column format produced does not correspond nicely to
+3-across and other common mailing label arrangements nor can it be changed
+easily.
+
+In printing 3-across mailing labels in Microsoft Word, it is necessary
+to type three sets of field names, a NEXT instruction telling Microsoft
+Word to place information from more than one record onto a single copy
+of a form document, and various other commands and formatting statements.
+Typically, in programs of this type, a number of steps will be required;
+and again, the choice of output formats will be quite limited. Also, the
+data typically cannot be a simple ASCII file but must be converted into
+the program's possibly multifield internal format.
+
+\section{Comments on the Code}
+
+In developing \ouradd, certain difficulties had to be overcome. The
+solutions found may be of benefit to other users. One problem
+encountered was creating a box of text that had a definite height, as
+well as a definite width. The \verb+\topbox+ macro mentioned above has
+these features. It is adapted from the definition of \LaTeX's
+\verb+\parbox+ command. With respect to \TeX's viewpoint, the $H$ in
+the definition of \verb+\topbox+ is really a depth with the height of
+the box being zero, but these details can normally be ignored.
+
+A second obstacle was obtaining sequential space delimited strings
+(e.g., words) from a line of text in a robust manner. Macros to do this
+were needed to build the name-parsing macro (\verb+\breakup+). For
+example, suppose \verb+\List+ is defined by \verb+\def\List{ a1 b2 c3 }+.
+The first `word' of \verb+\List+ is \verb+a1+, the second is
+\verb+b2+, and the third is \verb+c3+. One way to select elements in
+this fashion is to construct macros, \verb+\wcar+ and \verb+\wcdr+, that
+are analogous to the Lisp functions, CAR and CDR. \verb+\wcar\List\nil+
+should select \verb+a1+ and \verb+\wcdr\List\nil+ should return
+\verb+{b2 c3 }+. Moreover, \verb+\wcar+ and \verb+\wcdr+ of \verb+{ }+
+and \verb+{}+ should be null, and any sequence of multiple spaces should
+be treated like a single space.
+
+If \verb+\List+ is a simple list of tokens (for example, \verb+{ a b c }+),
+then a token CAR and CDR can be defined as follows:
+\begin{quote}
+\begin{small}
+\begin{verbatim}
+%
+% Test for {}.
+%
+\def\ifnull#1{\ifx#1\empty}
+%
+% \tcar\List\nil picks off the first non-
+% blank token (which is typically a
+% character or a control sequence) in
+% the \List. If the \List is blank or
+% empty, then a null string is returned.
+%
+\def\tcar#1\nil{\ifnull#1
+ \empty
+ \else
+ \tCar#1\nil
+ \fi}
+\def\tCar#1#2\nil{#1}
+%
+% \tcdr\List\nil removes the first nonblank
+% token in the \List and any preceding
+% blanks. If the \List is blank or
+% empty, then a null string is returned.
+%
+\def\tcdr#1\nil{\ifnull#1
+ \empty
+ \else
+ \tCdr#1\nil
+ \fi}
+\def\tCdr#1#2\nil{#2}
+\end{verbatim}
+\end{small}
+\end{quote}
+The general case is trickier and requires auxiliary macros.
+\begin{quote}
+\begin{small}
+\begin{verbatim}
+%
+% \ABDReverseExpand{D}{C}{B}{A}
+% first expands A, then expands B, then
+% expands D.
+%
+\def\ABDReverseExpand#1#2#3#4{%
+ \expandafter\expandafter
+ \expandafter#1%
+ \expandafter\expandafter
+ \expandafter#2\expandafter#3#4}
+%
+% Used to remove leading spaces.
+%
+\def\pretrim.#1{#1}
+%
+% \wcar\List\nil picks off the first word
+% (string of nonblank characters) in the
+% \List. If the \List is blank or
+% empty, then a null string is returned.
+%
+\def\wcar#1\nil{%
+ \ifnull#1
+ \empty
+ \else
+ \expandafter\wCar\pretrim.#1 \nil
+ \fi}
+\def\wCar#1 #2\nil{#1}
+%
+% \wcdr\List\nil removes the first word and
+% any preceding blanks from the \List.
+% If the \List is blank or empty, then a
+% null string is returned.
+%
+\def\wcdr#1\nil{%
+ \ifnull#1
+ \empty
+ \else
+ \ABDReverseExpand
+ \ifx\empty\wCdr\pretrim.#1 \nil
+ \empty
+ \else
+ \expandafter\wCdr\pretrim.#1\nil
+ \fi
+ \fi}
+\def\wCdr#1 #2\nil{#2}
+\end{verbatim}
+\end{small}
+\end{quote}
+\verb+\ABDReverseExpand+ is a simplification of the example found in
+Knuth [page~374] in the ``Dirty Tricks'' appendix.\footnote{The comment
+there incorrectly predicts that such a construction is ``probably too
+lengthy to be of any use.''}
+
+One more pair of useful Lisplike macros are \verb+\setq+ and
+\verb+\gsetq+, which are defined by
+\begin{quote}
+\begin{verbatim}
+\def\setq#1#2{\edef#1{\expandafter#2}}
+\def\gsetq#1#2{\xdef#1{\expandafter#2}}
+\end{verbatim}
+\end{quote}
+These macros allow statements such as
+\begin{quote}
+\begin{verbatim}
+\setq\List{\wcdr\List\nil}
+\end{verbatim}
+\end{quote}
+to function correctly by performing an immediate expansion on the second
+argument. This particular example results in \verb+\List+ being
+redefined to be \verb+{b2 c3 }+.
+
+Using the preceding as building blocks, it is easy to devise more complex
+macros. \ouradd\ defines
+\verb+\wmember\Element\of\List\nil+, which causes \verb+\ifwmember+ to be
+true if the \verb+\Element+ is found in the \verb+\List+ (false
+otherwise); and \verb+\wendcarcdr\List\nil\A\B+, which assigns \verb+\A+
+and \verb+\B+ to the CAR and CDR of the \verb+\List+, starting at the
+{\em right}. The assignment to macros provided as arguments in the
+latter case is done for two reasons. It is more efficient in this
+situation to make both assignments at once. More importantly, since
+\verb+\wendcarcdr+
+uses recursion via the \verb+\loop+ construct, as well as defining
+temporary variables, \TeX\ will complain if an attempt to
+force an immediate expansion of the result is made with \verb+\edef+.
+Thus, \verb+\wendcarcdr+ uses \verb+\xdef+ internally to define
+\verb+\A+ and \verb+\B+.
+
+The problem of being unable to store and further manipulate the results
+of certain macro expansions can be solved in a second way. The
+\verb+\StoreAddrBlock+ macro mentioned earlier is defined by
+\begin{quote}
+\begin{verbatim}
+\def\StoreAddrBlock#1\in#2{%
+ {\setbox0=\hbox{\AddrBlock#1}%
+ \toks0=\expandafter{\Current}%
+ \xdef#2{\the\toks0}}}
+\end{verbatim}
+\end{quote}
+In the first line, \verb+\AddrBlock+ completely expands within the
+\verb+\hbox+ and the result is assigned to a box which is subsequently
+ignored. As a side effect of the expansion, the global macro
+\verb+\Current+ is set to be the value of the reference to
+\verb+\AddrBlock+. The last two lines of the macro then store this
+result in the second argument, operating with a token list to prevent
+premature expansion of any \verb+\\+'s that may be present. The extra
+set of braces ensure that the assignments to \verb+\box0+ and
+\verb+\toks0+ are local to the macro.
+
+This section concludes with a small, but important point. \TeX\ will
+append an end-of-line character to any line of input text unless
+\verb+\endlinechar=-1+ is performed. This character will be treated
+like a space unless the line is blank, in which case it will be
+converted into a \verb+\par+. Since \verb+\ifx+ performs one level of
+macro expansion on its arguments, one way to read a line from a file and
+test if it is blank is:
+\begin{quote}
+\begin{verbatim}
+\read\file to \Line
+\ifx\Line\blank
+\end{verbatim}
+\end{quote}
+where \verb+\def\blank{\par}+ must be done somewhere previous.
+
+\section{Summary}
+
+We have designed a general-purpose form-letter generator that runs
+directly under \TeX\ or \LaTeX. This program requires three files,
+supplied by the user: a (optional) preamble, a simple format address
+list, and a letter template. These files are prompted for interactively,
+and they default to certain names if none are specified. We have also
+developed various sample files, including a preamble and template to
+produce 3-across labels. Thus, form letters and mailing labels can both
+be generated from the same address list by just changing two inputs to the
+program. Of course, there is nothing magical about names and addresses;
+this program can certainly be adapted to other uses.
+
+This form-letter program has been designed to be both robust and
+easy to work with.
+The former means, for example, that excess white space and
+lines commented out with a \verb+%+ in the address list will not cause
+havoc. To make the program easy to work with,
+the files have been designed to be easily modified for various types
+of results. Thus, the files themselves have been made READABLE so that
+anyone who wishes to alter them may do so easily. These files will be
+made publicly available from the \TeX\ repositories at {\tt
+sun.soe.clarkson.edu} and {\tt ymir.claremont.edu}.
+
+\section{Acknowledgments}
+
+Thanks are due to Ellen Golden and Sam Matthews for
+providing certain crucial help during the development of this program.
+Also, Tom Stickels is due thanks for the encouragement and sound
+editing advice provided throughout the development of this paper.
+Finally, hats off to the reading club for instigating this endeavor.
+
+\section{Bibliography}
+
+\bibentry Knuth, Donald~E. \TB. Reading, Mass.: \AW, 1984.
+
+\bibentry Lamport, Leslie. {\sl \LaTeX{}: A Document Preparation
+System.} Reading, Mass.: \AW, 1986.
+
+\bibentry Microsoft Corporation. {\sl Microsoft Word Processing Program
+Version 3.0 for IBM Personal Computers and Compatibles.} Redmond,
+Wash.: Microsoft Corporation, 1986.
+
+\section{Appendix: Selected Macro Definitions}
+
+\begin{small}
+\begin{verbatim}
+\newif\ifnotdone
+\newif\ifwmember
+% =============================================
+%
+% Allow \par's within \loop constructs.
+%
+\long\def\loop#1\repeat{\def\body{#1}\iterate}
+% ---------------------------------------------
+\def\AddrLine#1{\GetLine#1\of\Address}
+%
+\def\AddrBlock#1{%
+ \GetBlock#1\of\Address\by{\\---\\}}
+%
+\def\GetLine#1\of#2{\GetBlock#1\of#2\by\\}
+%
+% \GetBlock{N}\of\List\by\Delim gets block N of
+% the \List. The blocks in the \List are
+% assumed to be separated by \Delim's.
+% \Current will hold the last block
+% selected.
+%
+\def\Current{}
+\def\GetBlock#1\of#2\by#3{%
+ {\count0=#1
+ \toks0=\expandafter{#2#3}%
+ \edef\List{\the\toks0}%
+ \def\lcar##1#3##2\nil{##1}%
+ \def\lcdr##1#3##2\nil{##2}%
+ \notdonetrue
+ \loop
+ \ifx\List\empty
+ \notdonefalse
+ \gdef\Current{}%
+ \else
+ \advance\count0 by -1
+ \ifnum\count0=0
+ \notdonefalse
+ \toks0=\expandafter\expandafter
+ \expandafter{%
+ \expandafter
+ \lcar\List\nil}%
+ \xdef\Current{\the\toks0}%
+ \Current
+ \fi
+ \fi
+ \ifnotdone
+ \toks0=\expandafter\expandafter
+ \expandafter{%
+ \expandafter
+ \lcdr\List\nil}%
+ \edef\List{\the\toks0}%
+ \repeat}}
+%
+% \wendcarcdr\List\nil\A\B picks off the last
+% word in the \List and places it in \A.
+% The rest of the list (stripped of leading
+% blanks) is placed in \B.
+%
+\def\wendcarcdr#1\nil#2#3{%
+ {\edef\List{#1}%
+ \def\carList{}%
+ \def\newList{}%
+ %
+ \notdonetrue
+ \loop
+ \ifnull\List
+ \notdonefalse
+ \xdef#2{\carList}%
+ \xdef#3{\newList}%
+ \else
+ \ifx\List\space
+ \notdonefalse
+ \xdef#2{}%
+ \xdef#3{}%
+ \fi
+ \fi
+ \ifnotdone
+ \ifx\newList\empty
+ \edef\newList{\carList}%
+ \else
+ \edef\newList{%
+ \newList\space\carList}%
+ \fi
+ \setq\carList{\wcar\List\nil}%
+ \setq\List{\wcdr\List\nil}%
+ \repeat}}
+%
+% \wmember\Element\of\List\nil causes
+% \ifwmember to be true if the \Element is a
+% member of the \List and false otherwise.
+%
+\def\wmember#1\of#2\nil{
+ {\global\wmemberfalse
+ \edef\Element{#1}%
+ \edef\List{#2}%
+ \setq\carList{\wcar\List\nil}%
+ %
+ \ifnull\Element
+ \notdonefalse
+ \else
+ \notdonetrue
+ \fi
+ \loop
+ \ifnull\carList
+ \notdonefalse
+ \fi
+ \ifnotdone
+ \ifx\Element\carList
+ \notdonefalse
+ \global\wmembertrue
+ \else
+ \setq\List{\wcdr\List\nil}%
+ \setq\carList{\wcar\List\nil}%
+ \fi
+ \repeat}}
+\end{verbatim}
+\end{small}
+\end{document}
diff --git a/macros/latex209/contrib/address/README b/macros/latex209/contrib/address/README
new file mode 100644
index 0000000000..4844c9db89
--- /dev/null
+++ b/macros/latex209/contrib/address/README
@@ -0,0 +1,14 @@
+address will generate form letters and mailing labels to a list of recipients.
+The following files are included in this distribution:
+
+address.tex address program---can be run under either TeX or LaTeX
+preamble.tex generic TeX/LaTeX preamble
+letter.tex TeX/LaTeX test letter file
+example.tex example TeX/LaTeX letter file
+3pre.tex preamble for 3across
+3across.tex create 3-across mailing labels
+envpre.tex preamble for envelope
+envelope.tex treat the lower third of the sheet as an envelope
+Paper.tex text of the paper presented at the 1991 TUG meeting
+ (needs ltugboat.sty, ltugproc.sty, tugboat.com available from
+ your favorite TeX archive)
diff --git a/macros/latex209/contrib/address/address.tex b/macros/latex209/contrib/address/address.tex
new file mode 100644
index 0000000000..d5fe3cdc7e
--- /dev/null
+++ b/macros/latex209/contrib/address/address.tex
@@ -0,0 +1,558 @@
+From wester@amber.unm.edu Sat Nov 27 00:08:37 1993
+Received: by amber.unm.edu (4.1/3.1)
+ id <AA14731@amber.unm.edu>; Fri, 26 Nov 93 23:08:49 MST
+Date: Fri, 26 Nov 93 23:08:49 MST
+From: wester@amber.unm.edu (Michael Wester)
+Message-Id: <9311270608.AA14731@amber.unm.edu>
+To: damrau@amber.unm.edu (Jackie Damrau)
+Subject: New address.tex
+Status: R
+
+%%% ===========================================================================
+%%% @LaTeX-style-file{
+%%% author = "Michael Wester",
+%%% version = "1.0",
+%%% date = "November 26, 1993",
+%%% time = "NULL",
+%%% filename = "address.tex",
+%%% address = "Department of Mathematics and Statistics
+%%% University of New Mexico
+%%% Albuquerque, New Mexico 87131",
+%%% telephone = "NA",
+%%% FAX = "NA",
+%%% checksum = "NA",
+%%% email = "wester@math.unm.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%%
+%%% keywords = "LaTeX, TeX, formletter, mailing labels",
+%%% supported = "yes",
+%%%
+%%% docstring = "Generate form letters to a list of recipients,
+%%% using either TeX or LaTeX. The addresses of the
+%%% recipients are kept in a single file, separated by
+%%% blank lines. The addresses can be of arbitrary
+%%% length with the first line consisting of the
+%%% recipient's name. The letter template can
+%%% reference the recipient's name by \Name and the
+%%% lines of the address by \Address. Individual lines
+%%% within the address can be selected by \AddrLine{N}
+%%% (N > 0). If a preamble file exists, it will be
+%%% \input before any processing of addresses takes
+%%% place (and in LaTeX, before the \begin{document}).
+%%% In addition, the counts \Naddr and \Laddr refer to
+%%% the number of the current address being processed
+%%% from the recipient file and the number of \\
+%%% separated lines the current value of \Address
+%%% contains, respectively. Finally, unless
+%%% \breakupfalse has been executed in the preamble,
+%%% the \Name will be intelligently broken up into its
+%%% components. These components, some of which may be
+%%% compound or blank, can be referenced by
+%%% \SocialTitle, \FirstName, \MiddleName, \LastName,
+%%% \Suffix and \OtherTitle. This last operation is
+%%% optional because it can be time consuming to
+%%% perform and so should be done only if the
+%%% capability is desired.",
+%%% }
+%%% ===========================================================================
+%
+% Define default filenames. The last three can be usefully redefined in the
+% preamble.
+%
+\def\DEFAULTpreamble{preamble}
+\def\DEFAULTtolist{tolist}
+\def\DEFAULTletter{letter}
+\def\DEFAULTpostamble{postamble}
+%
+\newcount\Laddr % number of lines in the address
+\newcount\Naddr % number of the address in the tolist
+\newif\ifbreakup % decide whether a name should be broken up componentwise
+\newif\ifnotdone % conditional used to continue processing loops
+\newif\ifwmember % set by \wmember when testing for list membership
+\newread\file % temporary file
+\newread\tolist % file containing the list of recipients
+\newtoks\CR % used to separate lines within the address
+\newtoks\CumAddr % cumulative address
+\newtoks\LineAddr % one line of the address
+%
+\breakuptrue % by default, break up a name into its components
+\CR={\\} % LaTeX newline macro
+\def\blank{\par} % make \ifx happy when checking for blank lines
+% =============================================================================
+% MACROS
+% =============================================================================
+%
+% Print a line of text followed by a newline.
+%
+\def\print#1{\immediate\write16{#1}}
+%
+% Test if a macro has been previously defined.
+%
+\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}
+%
+% Allow \par's within \loop constructs.
+%
+\long\def\loop#1\repeat{\def\body{#1}\iterate}
+% -----------------------------------------------------------------------------
+%
+% \addspace\A adds a space after \A unless \A is null.
+%
+\def\addspace#1{\ifx#1\empty
+ \empty
+ \else
+ #1
+ \fi}
+%
+% \topbox{H}{W}{text} creates a top aligned box of height H and width W
+% containing the specified text.
+%
+\def\topbox#1#2#3{\leavevmode\vtop to #1{\hsize=#2 #3\vfil\eject}}
+% -----------------------------------------------------------------------------
+%
+% \AddrLine{N} selects the Nth line of the \Address. \Current is a macro
+% holding the last selection.
+%
+\def\AddrLine#1{\GetLine#1\of\Address}
+%
+% \AddrBlock{N} selects the Nth block of the \Address. Blocks are one or more
+% lines of text separated by lines containing only --- and
+% whitespace. \Current is a macro holding the last selection.
+%
+\def\AddrBlock#1{\GetBlock#1\of\Address\by{\\---\\}}
+%
+% \GetLine{N}\of\List gets line N of the \List. The lines in the \List are
+% assumed to be separated by \\'s. \Current will hold the
+% last line selected.
+%
+\def\GetLine#1\of#2{\GetBlock#1\of#2\by\\}
+%
+% \GetBlock{N}\of\List\by\Delim gets block N of the \List. The blocks in the
+% \List are assumed to be separated by \Delim's.
+% \Current will hold the last block selected.
+%
+\def\Current{}
+\def\GetBlock#1\of#2\by#3{{\count0=#1
+ \toks0=\expandafter{#2#3}%
+ \edef\List{\the\toks0}%
+ \def\lcar##1#3##2\nil{##1}%
+ \def\lcdr##1#3##2\nil{##2}%
+ \notdonetrue
+ \loop
+ \ifx\List\empty
+ \notdonefalse
+ \gdef\Current{}%
+ \else
+ \advance\count0 by -1
+ \ifnum\count0=0
+ \notdonefalse
+ \toks0=\expandafter\expandafter
+ \expandafter{%
+ \expandafter\lcar\List\nil}%
+ \xdef\Current{\the\toks0}%
+ \Current
+ \fi
+ \fi
+ \ifnotdone
+ \toks0=\expandafter\expandafter
+ \expandafter{%
+ \expandafter\lcdr\List\nil}%
+ \edef\List{\the\toks0}%
+ \repeat}}
+%
+% \StoreAddrBlock{N}\in\A stores the Nth block of \Address in the macro \A.
+%
+\def\StoreAddrBlock#1\in#2{{\setbox0=\hbox{\AddrBlock#1}%
+ \toks0=\expandafter{\Current}%
+ \xdef#2{\the\toks0}}}
+% -----------------------------------------------------------------------------
+%
+% Break up a name into its components: \SocialTitle (e.g., Dr.)
+% \FirstName
+% \MiddleName (may be more than one word)
+% \LastName
+% \Suffix (e.g., Jr.)
+% \OtherTitle (e.g., Manager)
+%
+\def\andList{\& and}
+\def\ParticleList{de della van von}
+\def\SocialTitleList{Doctor Dr. Hon. Master Mister Miss Mr. Mrs. Ms. Prof.
+ Professor Rabbi Rev. The Sir}
+\def\SuffixList{Jr. Junior Sr. II III IV}
+\def\The{The}
+\def\breakup#1\nil{{\gdef\SocialTitle{}%
+ \gdef\Suffix{}%
+ \gdef\OtherTitle{}%
+ %
+ \edef\List{#1}%
+ %
+ % Remove any phrase following a comma. It should either be
+ % a suffix (like Jr.) or an academic or professional title
+ % (or perhaps both of these combined).
+ %
+ \setq\tmp{\commacdr\List, \nil}%
+ \ifnull\tmp
+ \else
+ \setq\Phrase{\commacdr\List\nil}%
+ \setq\List{\commacar\List\nil}%
+ %
+ % Check if the \Phrase itself contains a comma and if
+ % so, if the first component is a suffix.
+ %
+ \setq\tmp{\commacdr\Phrase, \nil}%
+ \ifx\tmp\empty
+ \edef\carPhrase{\Phrase}%
+ \else
+ \setq\carPhrase{\commacar\Phrase\nil}%
+ \gsetq\OtherTitle{\commacdr\Phrase\nil}%
+ \fi
+ \wmember\carPhrase\of\SuffixList\nil
+ \ifwmember
+ \xdef\Suffix{\carPhrase}%
+ \else
+ \xdef\OtherTitle{\Phrase}%
+ \fi
+ \fi
+ %
+ % Check if the first word is an honorific title. This
+ % needs to be repeated to handle European constructs like
+ % Herr Doctor Professor.
+ %
+ \loop
+ \setq\carList{\wcar\List\nil}%
+ \wmember\carList\of\SocialTitleList\nil
+ \ifwmember
+ \ifx\SocialTitle\empty
+ \xdef\SocialTitle{\carList}%
+ \else
+ \gnconc\SocialTitle\carList
+ \fi
+ \setq\List{\wcdr\List\nil}%
+ \setq\carList{\wcar\List\nil}%
+ %
+ % If the title begins with "The", then grab the next
+ % word as well.
+ %
+ \ifx\SocialTitle\The
+ \gnconc\SocialTitle\carList
+ \setq\List{\wcdr\List\nil}%
+ \setq\carList{\wcar\List\nil}%
+ \fi
+ %
+ % If the next word is an "and", then this is a
+ % compound title so add the "and" and the following
+ % word into the title.
+ %
+ \wmember\carList\of\andList\nil
+ \ifwmember
+ \gnconc\SocialTitle\carList
+ \setq\List{\wcdr\List\nil}%
+ \setq\carList{\wcar\List\nil}%
+ \gnconc\SocialTitle\carList
+ \setq\List{\wcdr\List\nil}%
+ \fi
+ \repeat
+ %
+ % Check if the last word is a suffix (like III).
+ %
+ \wendcarcdr\List\nil\endcarList\tmp
+ \edef\List{\tmp}%
+ \wmember\endcarList\of\SuffixList\nil
+ \ifwmember
+ \xdef\Suffix{\endcarList}%
+ \wendcarcdr\List\nil\endcarList\tmp
+ \edef\List{\tmp}%
+ \fi
+ %
+ % Assume that the last word in what remains of the \List is
+ % the last name, and gobble it up.
+ %
+ \xdef\LastName{\endcarList}%
+ %
+ % If the word that preceded the last name is a particle,
+ % add it into the last name (this is usually correct,
+ % although not always: e.g., Ludwig van Beethoven).
+ %
+ \wendcarcdr\List\nil\endcarList\tmp
+ \wmember\endcarList\of\ParticleList\nil
+ \ifwmember
+ \gnendconc\endcarList\LastName
+ \edef\List{\tmp}%
+ \fi
+ %
+ % Assume that the first word in what remains of the \List
+ % is the first name, and gobble it up.
+ %
+ \gsetq\FirstName{\wcar\List\nil}%
+ \setq\List{\wcdr\List\nil}%
+ \setq\carList{\wcar\List\nil}%
+ %
+ % If the next word is an "and", then this is a compound
+ % first name so add the "and" and the following word into
+ % the first name.
+ %
+ \wmember\carList\of\andList\nil
+ \ifwmember
+ \gnconc\FirstName\carList
+ \setq\List{\wcdr\List\nil}%
+ \setq\carList{\wcar\List\nil}%
+ \gnconc\FirstName\carList
+ \setq\List{\wcdr\List\nil}%
+ \fi
+ %
+ % Any remaining words will be taken to be middle names.
+ %
+ \xdef\MiddleName{\List}}}
+\def\commacar#1, #2\nil{#1}
+\def\commacdr#1, #2\nil{#2}
+% -----------------------------------------------------------------------------
+% Lisplike MACROS
+% -----------------------------------------------------------------------------
+%
+% \ABDReverseExpand{D}{C}{B}{A} first expands A, then expands B, then expands
+% D.
+%
+\def\ABDReverseExpand#1#2#3#4{\expandafter\expandafter
+ \expandafter#1%
+ \expandafter\expandafter
+ \expandafter#2\expandafter#3#4}
+%
+% Used to remove leading spaces.
+%
+\def\pretrim.#1{#1}
+%
+% Test for {}.
+%
+\def\ifnull#1{\ifx#1\empty}
+%
+% \setq\A{B} assigns the expansion of B to the macro \A.
+% \gsetq\A{B} globally assigns the expansion of B to the macro \A.
+%
+\def\setq#1#2{\edef#1{\expandafter#2}}
+\def\gsetq#1#2{\xdef#1{\expandafter#2}}
+%
+% \nconc\A\B appends the expansion of \B onto \A.
+% \gnconc\A\B globally appends the expansion of \B onto \A.
+% \gnendconc\A\B globally prepends the expansion of \A onto \B.
+%
+\def\nconc#1#2{\edef#1{#1\space#2}}
+\def\gnconc#1#2{\xdef#1{#1\space#2}}
+\def\gnendconc#1#2{\xdef#2{#1\space#2}}
+%
+% \wcar\List\nil picks off the first word (string of nonblank characters) in
+% the \List. If the \List is blank or empty then a null string
+% is returned.
+%
+\def\wcar#1\nil{\ifnull#1
+ \empty
+ \else
+ \expandafter\wCar\pretrim.#1 \nil
+ \fi}
+\def\wCar#1 #2\nil{#1}
+%
+% \wcdr\List\nil removes the first word from the \List and any preceding
+% blanks. If the \List is blank or empty then a null string is
+% returned.
+%
+\def\wcdr#1\nil{\ifnull#1
+ \empty
+ \else
+ \ABDReverseExpand\ifx\empty\wCdr\pretrim.#1 \nil
+ \empty
+ \else
+ \expandafter\wCdr\pretrim.#1\nil
+ \fi
+ \fi}
+\def\wCdr#1 #2\nil{#2}
+%
+% \wendcarcdr\List\nil\A\B picks off the last word in the \List and places it
+% in \A. The rest of the list (stripped of leading
+% blanks) is placed in \B.
+%
+\def\wendcarcdr#1\nil#2#3{{\edef\List{#1}%
+ \def\carList{}%
+ \def\newList{}%
+ %
+ \notdonetrue
+ \loop
+ \ifnull\List
+ \notdonefalse
+ \xdef#2{\carList}%
+ \xdef#3{\newList}%
+ \else
+ \ifx\List\space
+ \notdonefalse
+ \xdef#2{}%
+ \xdef#3{}%
+ \fi
+ \fi
+ \ifnotdone
+ \ifx\newList\empty
+ \edef\newList{\carList}%
+ \else
+ \nconc\newList\carList
+ \fi
+ \setq\carList{\wcar\List\nil}%
+ \setq\List{\wcdr\List\nil}%
+ \repeat}}
+%
+% \wmember\Element\of\List\nil causes \ifwmember to be true if the \Element is
+% a member of the \List and false otherwise.
+%
+\def\wmember#1\of#2\nil{{\global\wmemberfalse
+ \edef\Element{#1}%
+ \edef\List{#2}%
+ \setq\carList{\wcar\List\nil}%
+ %
+ \ifnull\Element
+ \notdonefalse
+ \else
+ \notdonetrue
+ \fi
+ \loop
+ \ifnull\carList
+ \notdonefalse
+ \fi
+ \ifnotdone
+ \ifx\Element\carList
+ \notdonefalse
+ \global\wmembertrue
+ \else
+ \setq\List{\wcdr\List\nil}%
+ \setq\carList{\wcar\List\nil}%
+ \fi
+ \repeat}}
+% =============================================================================
+\print{}
+%
+% Check for a preamble and \input it if it exists.
+%
+\message{Enter the filename of the preamble [\DEFAULTpreamble.tex]: }
+\read-1 to \filename
+\ifx\filename\blank % is \filename blank?
+ \def\filename{\DEFAULTpreamble\space} % use default value
+\fi
+\openin\file=\filename
+\ifeof\file % do nothing if the file does not exist
+\else
+ \closein\file
+ \input\filename
+ \print{}
+\fi
+%
+% Do the appropriate initialization of the document depending on whether this
+% is TeX or LaTeX. The \begin{document} in LaTeX needs to precede the opening
+% of the tolist for styles other than letter (noted by Geoff Grinton).
+%
+\ifundefined{LaTeX}
+\else
+ \begin{document}
+\fi
+%
+\message{Enter filename of recipients' addresses [\DEFAULTtolist.tex]: }
+\read-1 to \filename
+\ifx\filename\blank % is \filename blank?
+ \def\filename{\DEFAULTtolist\space} % use default value
+\fi
+\openin\tolist=\filename
+\ifeof\tolist
+ \message{\filename cannot be opened.}\print{}\end{document}
+\fi
+%
+\message{Enter the filename of the letter template [\DEFAULTletter.tex]: }
+\read-1 to \filename
+\ifx\filename\blank % is \filename blank?
+ \def\filename{\DEFAULTletter\space} % use default value
+\fi
+\openin\file=\filename
+\ifeof\file
+ \message{\filename cannot be opened.}\print{}\end{document}
+\fi
+\closein\file
+%
+\print{}
+%
+% Force TeX not to append an end-of-line character to the lines below (and so
+% prevent the insertion of unwanted spaces into the document).
+%
+\endlinechar=-1
+%
+\Naddr=0
+\loop
+ \ifeof\tolist
+ \notdonefalse
+ \else
+ \notdonetrue
+ \fi
+ \ifnotdone
+ \read\tolist to \Name
+ %
+ % Ignore excess blank lines and lines that are commented out.
+ %
+ \ifx\Name\empty
+ \else
+ \advance\Naddr by 1
+ %
+ % Break up the name into its component parts if desired.
+ %
+ \ifbreakup
+ \expandafter\breakup\Name\nil
+ \fi
+ %
+ % Read the lines of the address.
+ %
+ \Laddr=0
+ \def\Address{}%
+ \read\tolist to \Line
+ {
+ \loop
+ %
+ % If \Line is blank then have finished gobbling up the address.
+ %
+ \ifx\Line\empty
+ \notdonefalse
+ \else
+ \notdonetrue
+ \global\advance\Laddr by 1
+ \LineAddr=\expandafter{\Line}%
+ \ifx\Address\empty
+ \xdef\Address{\the\LineAddr}%
+ \else
+ \CumAddr=\expandafter{\Address}%
+ \xdef\Address{\the\CumAddr\the\CR\the\LineAddr}%
+ \fi
+ \fi
+ \ifnotdone
+ \read\tolist to \Line
+ \repeat
+ }%
+ %
+ % Temporarily restore normal TeX conventions for end of lines while
+ % reading in the template file.
+ %
+ \endlinechar=13
+ \input\filename
+ \endlinechar=-1
+ \fi
+\repeat
+%
+\closein\tolist
+%
+% Check for a postamble and \input it if it exists.
+%
+\def\filename{\DEFAULTpostamble\space}
+\openin\file=\filename
+\ifeof\file % do nothing if the file does not exist
+\else
+ \closein\file
+ \input\filename
+\fi
+%
+% Final clean up
+%
+\ifundefined{LaTeX}
+\else
+ \clearpage
+\fi
+%
+\end{document}
+
diff --git a/macros/latex209/contrib/address/envelope.tex b/macros/latex209/contrib/address/envelope.tex
new file mode 100644
index 0000000000..bbe0c797ad
--- /dev/null
+++ b/macros/latex209/contrib/address/envelope.tex
@@ -0,0 +1,39 @@
+%%% ============================================================
+%%% @LaTeX-style-file{
+%%% author = "Michael Wester",
+%%% version = "1.0",
+%%% date = "July 1991",
+%%% time = "NULL",
+%%% filename = "3across.tex",
+%%% address = "Math & Stat Dept.
+%%% University of New Mexico
+%%% Albuquerque, NM 87131",
+%%% telephone = "NA",
+%%% FAX = "NA",
+%%% checksum = "NA",
+%%% email = "wester@spectre.unm.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%%
+%%% keywords = "LaTeX, TeX, formletter, mailing labels",
+%%% supported = "yes",
+%%%
+%%% docstring = "Treat the lower third of the sheet as an
+%%% envelope.",
+%%% }
+%%% =================================================================
+%
+%
+%
+\vspace*{6.5in}
+Michael Wester \\
+1801 Quincy, SE \\
+Albuquerque, NM \quad 87108
+\vspace{.5in}
+
+\begin{center}
+\begin{tabular}{l}
+\Name \\
+\Address
+\end{tabular}
+\end{center}
+\newpage
diff --git a/macros/latex209/contrib/address/envpre.tex b/macros/latex209/contrib/address/envpre.tex
new file mode 100644
index 0000000000..0043ed9133
--- /dev/null
+++ b/macros/latex209/contrib/address/envpre.tex
@@ -0,0 +1,30 @@
+%%% ============================================================
+%%% @LaTeX-style-file{
+%%% author = "Michael Wester",
+%%% version = "1.0",
+%%% date = "July 1991",
+%%% time = "NULL",
+%%% filename = "3across.tex",
+%%% address = "Math & Stat Dept.
+%%% University of New Mexico
+%%% Albuquerque, NM 87131",
+%%% telephone = "NA",
+%%% FAX = "NA",
+%%% checksum = "NA",
+%%% email = "wester@spectre.unm.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%%
+%%% keywords = "LaTeX, TeX, formletter, mailing labels",
+%%% supported = "yes",
+%%%
+%%% docstring = "Preamble for envelope.",
+%%% }
+%%% =================================================================
+\def\DEFAULTletter{envelope}
+\breakupfalse
+\documentstyle[12pt]{letter}
+\topmargin -1in
+\oddsidemargin -.75in
+\textheight 10.25in
+\textwidth 8in
+\pagestyle{empty}
diff --git a/macros/latex209/contrib/address/example.tex b/macros/latex209/contrib/address/example.tex
new file mode 100644
index 0000000000..882cca2570
--- /dev/null
+++ b/macros/latex209/contrib/address/example.tex
@@ -0,0 +1,50 @@
+%%% ============================================================
+%%% @LaTeX-style-file{
+%%% author = "Michael Wester",
+%%% version = "1.0",
+%%% date = "July 1991",
+%%% time = "NULL",
+%%% filename = "address.tex",
+%%% address = "Math & Stat Dept.
+%%% University of New Mexico
+%%% Albuquerque, NM 87131",
+%%% telephone = "NA",
+%%% FAX = "NA",
+%%% checksum = "NA",
+%%% email = "wester@spectre.unm.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%%
+%%% keywords = "LaTeX, TeX, formletter, mailing labels",
+%%% supported = "yes",
+%%%
+%%% docstring = "Example TeX/LaTeX letter file for
+%%% address.tex",
+%%% }
+%%% ==================================================================
+\noindent
+Naddr=\the\Naddr.\\
+Laddr=\the\Laddr.\\
+\\
+Name=\Name.\\
+SocialTitle=\SocialTitle.\\
+FirstName=\FirstName.\\
+MiddleName=\MiddleName.\\
+LastName=\LastName.\\
+Suffix=\Suffix.\\
+OtherTitle=\OtherTitle.\\
+\\
+Address=\Address.\\
+\\
+AddrLine1=\AddrLine1.\\
+AddrLine2=\AddrLine2.\\
+AddrLine3=\AddrLine3.\\
+\\
+AddrBlock1=\AddrBlock1.\\
+AddrBlock2=\AddrBlock2.\\
+AddrBlock3=\AddrBlock3.\\
+\\
+\StoreAddrBlock1\in\Block
+GetLine1 of AddrBlock1=\GetLine1\of\Block.\\
+GetLine2 of AddrBlock1=\GetLine2\of\Block.\\
+GetLine3 of AddrBlock1=\GetLine3\of\Block.
+\newpage
diff --git a/macros/latex209/contrib/address/letter.tex b/macros/latex209/contrib/address/letter.tex
new file mode 100644
index 0000000000..b10d8f2a5f
--- /dev/null
+++ b/macros/latex209/contrib/address/letter.tex
@@ -0,0 +1,112 @@
+%%% ============================================================
+%%% @LaTeX-style-file{
+%%% author = "Michael Wester",
+%%% version = "1.0",
+%%% date = "July 1991",
+%%% time = "NULL",
+%%% filename = "address.tex",
+%%% address = "Math & Stat Dept.
+%%% University of New Mexico
+%%% Albuquerque, NM 87131",
+%%% telephone = "NA",
+%%% FAX = "NA",
+%%% checksum = "NA",
+%%% email = "wester@spectre.unm.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%%
+%%% keywords = "LaTeX, TeX, formletter, mailing labels",
+%%% supported = "yes",
+%%%
+%%% docstring = "TeX/LaTeX test letter file for
+%%% address.tex",
+%%% }
+%%% ====================================================================
+\print{Naddr=\the\Naddr.}
+\print{Laddr=\the\Laddr.}
+%
+\print{Name=\Name.}
+\ifx\SocialTitle\empty
+\else
+ \print{SocialTitle=\SocialTitle.}
+\fi
+\ifx\FirstName\empty
+\else
+ \print{FirstName=\FirstName.}
+\fi
+\ifx\MiddleName\empty
+\else
+ \print{MiddleName=\MiddleName.}
+\fi
+\ifx\LastName\empty
+\else
+ \print{LastName=\LastName.}
+\fi
+\ifx\Suffix\empty
+\else
+ \print{Suffix=\Suffix.}
+\fi
+\ifx\OtherTitle\empty
+\else
+ \print{OtherTitle=\OtherTitle.}
+\fi
+%
+\ifx\Address\empty
+\else
+ {\toks0=\expandafter{\Address}
+ \print{Address=\the\toks0.}}
+\fi
+%
+{\setbox0=\hbox{\AddrLine1}}
+\ifx\Current\empty
+\else
+ \print{AddrLine1=\Current.}
+\fi
+{\setbox0=\hbox{\AddrLine2}}
+\ifx\Current\empty
+\else
+ \print{AddrLine2=\Current.}
+\fi
+{\setbox0=\hbox{\AddrLine3}}
+\ifx\Current\empty
+\else
+ \print{AddrLine3=\Current.}
+\fi
+%
+{\setbox0=\hbox{\AddrBlock1}}
+\ifx\Current\empty
+\else
+ {\toks0=\expandafter{\Current}
+ \print{AddrBlock1=\the\toks0.}}
+\fi
+{\setbox0=\hbox{\AddrBlock2}}
+\ifx\Current\empty
+\else
+ {\toks0=\expandafter{\Current}
+ \print{AddrBlock2=\the\toks0.}}
+\fi
+{\setbox0=\hbox{\AddrBlock3}}
+\ifx\Current\empty
+\else
+ {\toks0=\expandafter{\Current}
+ \print{AddrBlock3=\the\toks0.}}
+\fi
+%
+\StoreAddrBlock1\in\Block
+{\setbox0=\hbox{\GetLine1\of\Block}}
+\ifx\Current\empty
+\else
+ {\toks0=\expandafter{\Current}
+ \print{GetLine1 of AddrBlock1=\the\toks0.}}
+\fi
+{\setbox0=\hbox{\GetLine2\of\Block}}
+\ifx\Current\empty
+\else
+ {\toks0=\expandafter{\Current}
+ \print{GetLine2 of AddrBlock1=\the\toks0.}}
+\fi
+{\setbox0=\hbox{\GetLine3\of\Block}}
+\ifx\Current\empty
+\else
+ {\toks0=\expandafter{\Current}
+ \print{GetLine3 of AddrBlock1=\the\toks0.}}
+\fi
diff --git a/macros/latex209/contrib/address/preamble.tex b/macros/latex209/contrib/address/preamble.tex
new file mode 100644
index 0000000000..4866ba4bd7
--- /dev/null
+++ b/macros/latex209/contrib/address/preamble.tex
@@ -0,0 +1,43 @@
+%%% ============================================================
+%%% @LaTeX-style-file{
+%%% author = "Michael Wester",
+%%% version = "1.0",
+%%% date = "July 1991",
+%%% time = "NULL",
+%%% filename = "address.tex",
+%%% address = "Math & Stat Dept.
+%%% University of New Mexico
+%%% Albuquerque, NM 87131",
+%%% telephone = "NA",
+%%% FAX = "NA",
+%%% checksum = "NA",
+%%% email = "wester@spectre.unm.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%%
+%%% keywords = "LaTeX, TeX, formletter, mailing labels",
+%%% supported = "yes",
+%%%
+%%% docstring = "Generic TeX/LaTeX preamble for
+%%% address.tex",
+%%% }
+%%% ====================================================================
+\ifundefined{LaTeX} % TeX
+ \magnification=\magstep1
+ \voffset=0in
+ \hoffset=0in
+ \vsize=9in
+ \hsize=6.5in
+ \nopagenumbers
+ %
+ \def\\{\hfil\break}
+ \def\newpage{\vfil\eject}
+\else % LaTeX
+ \documentstyle[12pt]{letter}
+ \topmargin 0in
+ \headheight 0in
+ \headsep 0in
+ \oddsidemargin 0in
+ \textheight 9in
+ \textwidth 6.5in
+ \pagestyle{empty}
+\fi
diff --git a/macros/latex209/contrib/agu/agugrl-sample.tex b/macros/latex209/contrib/agu/agugrl-sample.tex
new file mode 100644
index 0000000000..3277c86813
--- /dev/null
+++ b/macros/latex209/contrib/agu/agugrl-sample.tex
@@ -0,0 +1,142 @@
+% an example of how to use the agujgr macro package
+% By Stephen Gildea <mit-erl!gildea> 22 Feb 89
+% This text is from ``Sample for typeset JGR papers''
+\documentstyle[agujgr]{article}
+\begin{document}
+
+\title{Investigation of Two High-Stress Drop Earthquakes in the
+ Shumagin Seismic Gap, Alaska}
+\author{Leigh House and John Boatwright}
+\address{Lamont-Doherty Geological Observatory and Department of
+ Geological Sciences, Columbia University
+ Palisades, New York}
+\author{Keith Preistley\thanks{Also at U.S. Geological Survey,
+ Menlo Park, California.}}
+\address{Seismological Laboratory, Mackay School of Mines, University of
+ Nevada at Reno}
+\maketitle
+
+\begin{abstract}
+Two moderate size earthquakes occurred within a local network of
+short-period seismograph stations in the Shumagin Islands, Alaska, on
+April 6, 1974.
+\end{abstract}
+
+\section{Introduction}
+Two moderate size ($m_b =5.8$, $6.0$) earthquakes and their
+aftershocks that occurred within the Shumagin Islands seismic network
+in Alaska have produced a unique data set for a detailed study of
+convergent tectonics at depth in an area that has been identified as a
+seismic gap \cite{kelleher}.
+
+Lamont-Doherty Geological Observatory has operated a network of
+vertical short-period, radio-telemetered station in the Shumagin
+Islands region of Alaska since July 1973 \cite{davies}. As originally
+installed, the network consisted of eight high-gain remote stations that
+telemeter their data to a central recording site at Sand Point (Figure 1).
+\marginboxed{Fig. 1}
+
+\section{SMA 1 Waveform Analysis}
+Since the Sand Point station was at an {\em SH\/} node, the vertical
+and horizontal components were combined to obtain the incident {\em
+SV\/} pulse shape by using the free surface transformation
+\begin{equation}
+u_{sv}(t) = \frac{\cos 2j}{2 \cos j} u_x(t) + \sin ju_z(t)
+\end{equation}
+Here $j$ is the angle of incidence of the {\em S\/} save, and $u_x(t)$
+is the horizontal component (positive downward), shown in Figure 2.
+\marginboxed{Fig. 2}
+
+\subsection{Focal Mechanism of the Main Shocks}
+The focal mechanism of the second main shock ($m_b = 6.0$), shown in
+Figure 3, was determined from long-period arrivals at World-Wide
+Standard Seismographic network stations. Both {\em S\/} and {\em P\/}
+wave first motions were used; however, the solution is more strongly
+constrained by the {\em S\/} wave polarizations. The results are
+shown in Table 1.\marginboxed{Table 1}
+
+\subsubsection{Magnitudes and b value}
+Magnitudes of most of the earthquakes in this sequence were estimated
+from coda duration measurements similar to the techniques used by R.
+Lee et al.\ (unpublished manuscript, 1984).
+
+\begin{acknowledgments}
+The authors are grateful to L. Sykes and K. Jacob for critical reviews
+of this paper.
+\end{acknowledgments}
+
+% You can also use BibTeX to generate the bibliography automatically.
+% With BibTeX, use the natsci bibliography format.
+\begin{thebibliography}{}
+
+\bibitem[{\em Belt,} 1968]{belt}
+Belt, E.S., Post-Acadian rifts and related facies, eastern Canada, in
+{\em Studies on Appalachian Geology,} edited by E. Zen et al.,
+pp.~95--113, John Wiley, New York, 1968.
+
+\bibitem[{\em Davies and House,} 1979]{davies}
+Davies, J.R., and House, M.O, Another random paper.
+
+\bibitem[{\em Kelleher et al.,} 1970]{kelleher}
+Kelleher et al., Can anyone find these two referenced papers for me.
+
+\bibitem[{\em Orringer,} 1974]{mit}
+Orringer, O., Frontal analysis program, {\em Rep.\ ASRL TR 1023,}
+Aeroelastic and Struct.\ Lab., Mass.\ Inst.\ of Technol., Cambridge, 1974.
+\end{thebibliography}
+
+\begin{addresses}
+J. Boatwright and L. House, Lamont-Doherty Geological Observatory and
+Department of Geological Sciences, Columbia University, Palisades NY
+10964.
+
+K. Priestley, Seismological Laboratory, Mackay School of Mines,
+University of Nevada at Reno, Reno NV 89557.
+\end{addresses}
+
+\begin{received}
+(Received September 17, 1983; \\
+revised June 9, 1984; \\
+accepted June 22, 1984)
+\end{received}
+
+\copyrightnotice{Copyright 1986 by the American Geophysical Union.}
+
+\papernumber{4B1073. \\ 0148--0227/86/004B--1073\$05.00}
+
+\runningheads{2}{House et al.: High-Stress Drop Earthquakes}
+
+\begin{captions}
+Fig.~1. Detail of short-period WWSSN analysis. The lowermost trace
+is the seismogram as digitized with the band-passed seismogram above it.
+
+% Sometimes captions or tables need to have a different length.
+% The wider environment does this.
+\begin{wider}{30pc}
+Fig.~2. Source parameters of the earthquake from combined Rayleigh and
+Love wave moment tensor inversion and fault model inversion.
+\end{wider}
+\end{captions}
+
+%% Every table goes in its own table environment.
+\begin{table}
+ \begin{center}
+ TABLE 1. Average Rate of Change of Line Length
+
+ \end{center}
+ %% The expandedtabular environment is like tabular, but the table
+ %% is expanded to the current line width.
+ \begin{expandedtabular}{ccrr}
+ \hline
+ &&\multicolumn{2}{c}{{\em dl/dt,} mm/yr} \\ \cline{3-4}
+ From & To & Observed & Model \\ \hline
+ Alamillo & Palvadero & 0.6 + 0.8 & 1.4 \\
+ Campana & Canas & 0.4 + 1.1 & $-0.7$ \\
+ & Chupardera & $-0.5$ + 1.0 & 0.2 \\ \hline
+ \end{expandedtabular}
+
+ The quoted uncertainty is one standard deviation. These rates were
+ measured using the method described in the paper.
+\end{table}
+
+\end{document}
diff --git a/macros/latex209/contrib/agu/agugrl.sty b/macros/latex209/contrib/agu/agugrl.sty
new file mode 100644
index 0000000000..c3084baed7
--- /dev/null
+++ b/macros/latex209/contrib/agu/agugrl.sty
@@ -0,0 +1,238 @@
+%NAME: agugrl.sty
+% For American Geophysical Union
+% Geophysical Research Letters
+%
+% This style option is designed to work with the article document
+% style of LaTeX version 2.09. Use
+% \documentstyle[agugrl]{article}
+%
+% Notes: if your output device is not at least 300dpi AGU will
+% probably reject your paper. AGU requires 12pt type.
+%
+% The rules here are from "Specifications for typeset GRL papers" 5/85.
+
+% 09 Jul 87
+
+% Copyright (c) 1987 by Stephen Gildea
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% If you make any improvements, I'd like to hear about them.
+
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Mass. 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+
+\oddsidemargin 1.1875in %set left margin to 2 3/16"
+\textwidth 4.125in %or 25 picas or 10.4 cm
+
+% With such a short line width, line breaking is going to be a
+% problem, so give TeX a break:
+\sloppy
+
+\textheight 8.5in
+
+\topmargin 0pt
+\footheight 0pt
+\footskip 0pt
+
+\parindent 1em
+\parskip 0in
+
+\def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt
+\abovedisplayskip 14pt \belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip 14pt \belowdisplayshortskip \abovedisplayshortskip}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt}
+
+% Set up page style
+\def\ps@agu{\def\@oddhead{\hss\hbox to 7in{\rm\hfil\thepage}\hss}
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{}\def\@evenfoot{}}
+
+\ps@agu
+
+%% Bibliography %%
+
+
+\def\thebibliography#1{\section*{References\markboth
+ {REFERENCES}{REFERENCES}}\list
+ %% default is no labels, for those not using \cite or BibTeX
+ {}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}\@bibsetup}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+% Don't put the citation in an hbox.
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{\@citesep}\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+% Use a semicolon instead of a comma between multiple citations.
+\def\@citesep{; }
+
+% square brackets instead of the round parens that most nat. sci.
+% publications use.
+\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
+
+% Labels should not be printed in References
+\def\@biblabel#1{\hfill}
+
+% undent first line of a reference by using negative \itemindent.
+% set \itemsep and \parsep to 0pt so there is no space between items.
+\def\@bibsetup{\itemindent=-\leftmargin \itemsep=0pt \parsep=0pt}
+
+%% Titles %%
+
+% Use \thispagestyle{empty}
+\def\maketitle{\par
+ \begingroup
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{empty}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@address{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \@titleline{\@title}
+ \unvbox\@titlebox}
+
+\def\title#1{\gdef\@title{\uppercase{#1}}}
+
+% We have to accumulate the author info into a box because \author
+% and \address may be called more than once if there are multiple
+% authors with different addresses.
+\newbox\@titlebox
+
+\def\author#1{\setbox\@titlebox\vbox{\unvbox\@titlebox
+ {\@titleline{#1}}}}
+
+\def\address#1{\setbox\@titlebox\vbox{\unvbox\@titlebox
+ {\@titleline{#1}}}}
+
+% AGU allows the title and author to be 8 1/2 in wide, but obviously
+% that will not fit on our paper.
+\def\@titleline#1{\hbox to \hsize{\hss
+ \vbox{\hsize 7.9in\noindent\centering #1}\hss}\vskip 14pt}
+
+
+% The abstract environment
+\def\abstract{\vskip 14pt \subsubsection{Abstract}}
+\def\endabstract{\par}
+
+\def\acknowledgments{\vskip 14pt \subsubsection{Acknowledgments}}
+\def\acknowledgements{\vskip 14pt \subsubsection{Acknowledgements}}
+\def\endacknowledgments{\par}
+\def\endacknowledgements{\par}
+
+% Headings:
+% for Grade 1 heading use \section
+% for Grade 2 heading use \subsection
+% for Grade 3 heading use \subsubsection
+\setcounter{secnumdepth}{0}
+\def\section{\@startsection {section}{1}{\z@}{14pt}{14pt}{\centering}}
+\def\subsection{\@startsection {subsection}{2}{\z@}{14pt}{14pt}{\it}}
+\def\subsubsection#1{\par{\it #1.}}
+
+% Put the boxes in the margin that show the first reference
+% to a figure or table
+\def\marginboxed#1{\marginpar{{\Large\fbox{#1}}}}
+
+% A modification of plain TeX to make the rule shorter.
+\def\footnoterule{\kern-3\p@
+ \hrule width 4pc \kern 2.6\p@} % the \hrule is .4pt high
+
+\def\authorrule{\footnoterule \vskip 2pt \relax}
+
+% the addresses environment is used at the end of the paper to
+% list the authors' full addresses. Put a blank line between addresses.
+\def\addresses{\vskip-\lastskip\leavevmode\authorrule}
+\def\endaddresses{\par}
+
+% the received environment for the Received, Revised, Accepted lines
+\def\received{\addvspace{\baselineskip}\parindent=0pt}
+\def\endreceived{\par\addvspace{\baselineskip}}
+
+\def\copyrightnotice#1{\addvspace{\baselineskip}\noindent#1\par
+ \addvspace{2ex}}
+
+\def\papernumber#1{\noindent Paper number #1}
+
+\def\runninghead#1{\runningheads{3}{#1}}
+
+% \runningheads prints #1 copies of the text in #2
+\newcount\@rhcnt
+\def\runningheads#1#2{\par\addvspace{2\baselineskip}\@rhcnt=0
+ \loop\ifnum\@rhcnt<#1
+ \advance \@rhcnt by 1
+ \rhead{#2}
+ \repeat
+ \par\vskip 6pt}
+\def\rhead#1{\par\noindent\vskip 6pt\hbox to 30pc{#1\hfil}}
+
+% put this before the figure captions
+\def\captions{\par\parskip 14pt \parindent 0pt}
+\def\endcaptions{\par}
+
+% Put each table in a separate table environment.
+% "tables: type each on a separate page"
+\def\table{\newpage\par \vskip 14pt \parskip 0pt \parindent 1em}
+\def\endtable{\par}
+
+% If figure captions or tables need to be a specific width,
+% put them inside the wider environment. The argument is the
+% width, ala minipage. The advantage over minipage is that the
+% requested width can be wider than \textwidth
+
+\def\wider#1{\par\noindent\hbox to \textwidth\bgroup
+ \begin{minipage}{#1}}
+\def\endwider{\end{minipage}\hss\egroup\par}
+
+% Unfortunately, the default \@arrayparboxrestore clobbers \parindent.
+% This version doesn't.
+\def\@arrayparboxrestore{\let\par\@@par
+ \let\-\@dischyph
+ \let\'\@acci \let\`\@accii \let\=\@acciii
+ \everypar{}\linewidth\hsize
+ \@totalleftmargin\z@ \leftskip\z@ \rightskip\z@ \@rightskip\z@
+ \parfillskip\@flushglue \lineskip\normallineskip
+ \baselineskip\normalbaselineskip\sloppy}
+
+% The expandedtablar environment is like tabular, but always produces
+% tables that are as wide as the current text length. It does NOT
+% take the optional [] argument that tabular does.
+
+% This is \@tabular and \@array collapsed.
+\def\expandedtabular#1{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv \let\\\@tabularcr
+ \setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}\@mkpream{#1}\edef\@preamble{\halign to \textwidth
+\bgroup \tabskip 0pt plus 1fil \@arstrut \@preamble \tabskip\z@ \cr}%
+\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \vcenter
+ \bgroup \let\par\relax
+ \let\@sharp##\let\protect\relax \lineskip\z@\baselineskip\z@\@preamble}
+
+\def\endexpandedtabular{\crcr\egroup\egroup $\egroup}
diff --git a/macros/latex209/contrib/agu/agujgr-sample.tex b/macros/latex209/contrib/agu/agujgr-sample.tex
new file mode 100644
index 0000000000..067cb72a7a
--- /dev/null
+++ b/macros/latex209/contrib/agu/agujgr-sample.tex
@@ -0,0 +1,143 @@
+%NAME: agujgr-sample.tex
+% an example of how to use the agujgr macro package
+% By Stephen Gildea <mit-erl!gildea> 22 Feb 89
+% This text is from ``Sample for typeset JGR papers''
+\documentstyle[agujgr]{article}
+\begin{document}
+
+\title{Investigation of Two High-Stress Drop Earthquakes in the
+ Shumagin Seismic Gap, Alaska}
+\author{Leigh House and John Boatwright}
+\address{Lamont-Doherty Geological Observatory and Department of
+ Geological Sciences, Columbia University
+ Palisades, New York}
+\author{Keith Preistley\thanks{Also at U.S. Geological Survey,
+ Menlo Park, California.}}
+\address{Seismological Laboratory, Mackay School of Mines, University of
+ Nevada at Reno}
+\maketitle
+
+\begin{abstract}
+Two moderate size earthquakes occurred within a local network of
+short-period seismograph stations in the Shumagin Islands, Alaska, on
+April 6, 1974.
+\end{abstract}
+
+\section{Introduction}
+Two moderate size ($m_b =5.8$, $6.0$) earthquakes and their
+aftershocks that occurred within the Shumagin Islands seismic network
+in Alaska have produced a unique data set for a detailed study of
+convergent tectonics at depth in an area that has been identified as a
+seismic gap \cite{kelleher}.
+
+Lamont-Doherty Geological Observatory has operated a network of
+vertical short-period, radio-telemetered station in the Shumagin
+Islands region of Alaska since July 1973 \cite{davies}. As originally
+installed, the network consisted of eight high-gain remote stations that
+telemeter their data to a central recording site at Sand Point (Figure 1).
+\marginboxed{Fig. 1}
+
+\section{SMA 1 Waveform Analysis}
+Since the Sand Point station was at an {\em SH\/} node, the vertical
+and horizontal components were combined to obtain the incident {\em
+SV\/} pulse shape by using the free surface transformation
+\begin{equation}
+u_{sv}(t) = \frac{\cos 2j}{2 \cos j} u_x(t) + \sin ju_z(t)
+\end{equation}
+Here $j$ is the angle of incidence of the {\em S\/} save, and $u_x(t)$
+is the horizontal component (positive downward), shown in Figure 2.
+\marginboxed{Fig. 2}
+
+\subsection{Focal Mechanism of the Main Shocks}
+The focal mechanism of the second main shock ($m_b = 6.0$), shown in
+Figure 3, was determined from long-period arrivals at World-Wide
+Standard Seismographic network stations. Both {\em S\/} and {\em P\/}
+wave first motions were used; however, the solution is more strongly
+constrained by the {\em S\/} wave polarizations. The results are
+shown in Table 1.\marginboxed{Table 1}
+
+\subsubsection{Magnitudes and b value}
+Magnitudes of most of the earthquakes in this sequence were estimated
+from coda duration measurements similar to the techniques used by R.
+Lee et al.\ (unpublished manuscript, 1984).
+
+\begin{acknowledgments}
+The authors are grateful to L. Sykes and K. Jacob for critical reviews
+of this paper.
+\end{acknowledgments}
+
+% You can also use BibTeX to generate the bibliography automatically.
+% With BibTeX, use the natsci bibliography format.
+\begin{thebibliography}{}
+
+\bibitem[{\em Belt,} 1968]{belt}
+Belt, E.S., Post-Acadian rifts and related facies, eastern Canada, in
+{\em Studies on Appalachian Geology,} edited by E. Zen et al.,
+pp.~95--113, John Wiley, New York, 1968.
+
+\bibitem[{\em Davies and House,} 1979]{davies}
+Davies, J.R., and House, M.O, Another random paper.
+
+\bibitem[{\em Kelleher et al.,} 1970]{kelleher}
+Kelleher et al., Can anyone find these two referenced papers for me.
+
+\bibitem[{\em Orringer,} 1974]{mit}
+Orringer, O., Frontal analysis program, {\em Rep.\ ASRL TR 1023,}
+Aeroelastic and Struct.\ Lab., Mass.\ Inst.\ of Technol., Cambridge, 1974.
+\end{thebibliography}
+
+\begin{addresses}
+J. Boatwright and L. House, Lamont-Doherty Geological Observatory and
+Department of Geological Sciences, Columbia University, Palisades NY
+10964.
+
+K. Priestley, Seismological Laboratory, Mackay School of Mines,
+University of Nevada at Reno, Reno NV 89557.
+\end{addresses}
+
+\begin{received}
+(Received September 17, 1983; \\
+revised June 9, 1984; \\
+accepted June 22, 1984)
+\end{received}
+
+\copyrightnotice{Copyright 1986 by the American Geophysical Union.}
+
+\papernumber{4B1073. \\ 0148--0227/86/004B--1073\$05.00}
+
+\runningheads{2}{House et al.: High-Stress Drop Earthquakes}
+
+\begin{captions}
+Fig.~1. Detail of short-period WWSSN analysis. The lowermost trace
+is the seismogram as digitized with the band-passed seismogram above it.
+
+% Sometimes captions or tables need to have a different length.
+% The wider environment does this.
+\begin{wider}{30pc}
+Fig.~2. Source parameters of the earthquake from combined Rayleigh and
+Love wave moment tensor inversion and fault model inversion.
+\end{wider}
+\end{captions}
+
+%% Every table goes in its own table environment.
+\begin{table}
+ \begin{center}
+ TABLE 1. Average Rate of Change of Line Length
+
+ \end{center}
+ %% The expandedtabular environment is like tabular, but the table
+ %% is expanded to the current line width.
+ \begin{expandedtabular}{ccrr}
+ \hline
+ &&\multicolumn{2}{c}{{\em dl/dt,} mm/yr} \\ \cline{3-4}
+ From & To & Observed & Model \\ \hline
+ Alamillo & Palvadero & 0.6 + 0.8 & 1.4 \\
+ Campana & Canas & 0.4 + 1.1 & $-0.7$ \\
+ & Chupardera & $-0.5$ + 1.0 & 0.2 \\ \hline
+ \end{expandedtabular}
+
+ The quoted uncertainty is one standard deviation. These rates were
+ measured using the method described in the paper.
+\end{table}
+
+\end{document}
diff --git a/macros/latex209/contrib/agu/agujgr.sty b/macros/latex209/contrib/agu/agujgr.sty
new file mode 100644
index 0000000000..e6b0c64428
--- /dev/null
+++ b/macros/latex209/contrib/agu/agujgr.sty
@@ -0,0 +1,259 @@
+%NAME: agujgr.sty
+% For American Geophysical Union
+% Journal of Geophysical Research
+%
+% This style option is designed to work with the article document
+% style of LaTeX version 2.09. Use
+% \documentstyle[agujgr]{article}
+%
+% The rules here are from "Information for Contributors" January 1985
+% and SAMPLE FOR TYPESET JGR PAPERS, 1986.
+
+% 09 Jul 87
+
+% Jan 87 gildea original version
+% Jun 87 gildea revised based on "Sample for typeset JGR papers"
+
+% Copyright (c) 1987 by Stephen Gildea
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% If you make any improvements, I'd like to hear about them.
+
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Mass. 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+
+\oddsidemargin 0in
+\textwidth 20pc
+
+% With such a short line width, line breaking is going to be a
+% problem, so give TeX a break:
+\sloppy
+
+\textheight 8.5in
+
+\topmargin 0pt
+\footheight 0pt
+\footskip 0pt
+
+\parindent 1em
+\parskip 0in
+
+%% Font sizes %%
+
+% text: 9/11
+% equations: 6 points space above and below
+\def\@normalsize{\@setsize\normalsize{11pt}\ixpt\@ixpt
+\abovedisplayskip 6pt \belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip 6pt \belowdisplayshortskip \abovedisplayshortskip}
+
+% 8/9 is used for lots of things
+\def\small{\@setsize\small{9pt}\viiipt\@viiipt}
+
+% 10/13 for author's names
+\def\large{\@setsize\large{13pt}\xpt\@xpt}
+
+% 14/18 for title
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+
+\def\footnotesize{\@setsize\footnotesize{9pt}\viiipt\@viiipt}
+
+% Set up page style
+\def\ps@agu{\def\@oddhead{\hss\hbox to 7in{\rm\hfil\thepage}\hss}
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{}\def\@evenfoot{}}
+
+\ps@agu
+
+%% Bibliography %%
+
+\def\thebibliography#1{\section*{References\markboth
+ {REFERENCES}{REFERENCES}}\list
+ %% default is no labels, for those not using \cite or BibTeX
+ {}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}\@bibsetup}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+% Don't put the citation in an hbox.
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{\@citesep}\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+% undent first line of a reference by using negative \itemindent.
+% set \itemsep and \parsep to 0pt so there is no space between items.
+\def\@bibsetup{\itemindent=-\leftmargin \itemsep=0pt \parsep=0pt \small}
+
+% Use a semicolon instead of a comma between multiple citations.
+\def\@citesep{; }
+
+% square brackets instead of the round parens that most nat. sci.
+% publications use.
+\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
+
+% Labels should not be printed in References
+\def\@biblabel#1{\hfill}
+
+%% Titles %%
+
+% We have to accumulate the title info into a box because \author
+% and \address may be called more than once if there are multiple
+% authors with different addresses.
+\newbox\@titlebox
+
+\def\title#1{\setbox\@titlebox\vbox{{\hsize 41pc \centering\Large #1\par}
+ \addvspace{16pt}}}
+
+\def\author#1{\setbox\@titlebox\vbox{\unvbox\@titlebox
+ {\hsize 41pc \centering\large\sc #1\par}\addvspace{10pt}}}
+
+\def\address#1{\setbox\@titlebox\vbox{\unvbox\@titlebox
+ {\hsize 41pc \centering\small\it #1\par}\addvspace{16pt}}}
+
+\def\thanks#1{\footnotemark
+ \xdef\@thanks{\@thanks \par\@makefntext{#1}}}
+
+% To be centered on 8.5in, the title must start a little to the left
+% of 1in in from the left of the page.
+\newdimen\@titleoffset \@titleoffset=-.927pc
+
+% Handle \thanks differently.
+\def\maketitle{\par
+ \begingroup
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{empty}
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \hbox{\hskip\@titleoffset \vbox{\unvbox\@titlebox\unskip}}}
+
+% The abstract environment.
+% Since it is 30pc wide (11pc narrower than the title),
+% we move it to the right a little to keep everything centered.
+\def\abstract{\addvspace{16pt}\small \leftskip=5.5pc \hsize=30pc
+ \addtolength\leftskip\@titleoffset \addtolength\hsize\leftskip}
+\def\endabstract{\par\addvspace{24pt}}
+
+\def\acknowledgments{\par\addvspace{11pt}
+ \subsubsection{Acknowledgments}\small}
+\def\acknowledgements{\par\addvspace{11pt}
+ \subsubsection{Acknowledgements}\small}
+\def\endacknowledgments{\par}
+\def\endacknowledgements{\par}
+
+% Headings:
+% for level 1 heading use \section
+% for level 2 heading use \subsection
+% for level 3 heading use \subsubsection
+\setcounter{secnumdepth}{0}
+\def\section{\@startsection {section}{1}{\z@}{11pt}{6pt}{\centering\sc}}
+\def\subsection{\@startsection {subsection}{2}{\z@}{11pt}{6pt}{\it}}
+\def\subsubsection#1{\par{\it #1.}}
+
+% Put the boxes in the margin that show the first reference
+% to a figure or table
+\def\marginboxed#1{\marginpar{{\Large\fbox{#1}}}}
+
+% A modification of plain TeX to make the rule shorter.
+\def\footnoterule{\kern-3\p@
+ \hrule width 4pc \kern 2.6\p@} % the \hrule is .4pt high
+
+\def\authorrule{\footnoterule}
+
+% The addresses environment is used at the end of the paper to
+% list the authors' full addresses. Put a blank line between each address.
+\def\addresses{\vskip-\lastskip\leavevmode\authorrule\small}
+\def\endaddresses{\par}
+
+% the received environment for the Received, Revised, Accepted lines
+\def\received{\par\small\addvspace{\baselineskip}\centering}
+\def\endreceived{\par\addvspace{\baselineskip}}
+
+\def\copyrightnotice#1{{\small\par\addvspace{\baselineskip}
+ \ifx\@thanks\empty \else \addvspace{2\baselineskip}\footnoterule
+ \@thanks\par\vskip\baselineskip \fi
+ #1\par
+ \addvspace{2ex}}}
+
+\def\papernumber#1{\par\noindent{\small Paper number #1}\par}
+
+\def\runninghead#1{\runningheads{3}{#1}}
+
+% \runningheads prints #1 copies of the text in #2
+\newcount\@rhcnt
+\def\runningheads#1#2{\par\addvspace{2\baselineskip}\@rhcnt=0
+ \loop\ifnum\@rhcnt<#1
+ \advance \@rhcnt by 1
+ \rhead{#2}
+ \repeat
+ \par\vskip 6pt}
+\def\rhead#1{\par\noindent\vskip 6pt\hbox to 30pc
+ {\small\sc #1\hfil}}
+
+% put this before the figure captions
+\def\captions{\par\parskip 14pt \parindent 0pt \small}
+\def\endcaptions{\par}
+
+% Put each table in a separate table environment
+\def\table{\par \vskip 14pt \parskip 0pt \parindent 1em \small}
+\def\endtable{\par}
+
+% If figure captions or tables need to be a specific width,
+% put them inside the wider environment. The argument is the
+% width, ala minipage. The advantage over minipage is that the
+% requested width can be wider than \textwidth
+
+\def\wider#1{\par\noindent\hbox to \textwidth\bgroup
+ \begin{minipage}{#1}}
+\def\endwider{\end{minipage}\hss\egroup\par}
+
+% Unfortunately, the default \@arrayparboxrestore clobbers \parindent.
+% This version doesn't.
+\def\@arrayparboxrestore{\let\par\@@par
+ \let\-\@dischyph
+ \let\'\@acci \let\`\@accii \let\=\@acciii
+ \everypar{}\linewidth\hsize
+ \@totalleftmargin\z@ \leftskip\z@ \rightskip\z@ \@rightskip\z@
+ \parfillskip\@flushglue \lineskip\normallineskip
+ \baselineskip\normalbaselineskip\sloppy}
+
+% The expandedtablar environment is like tabular, but always produces
+% tables that are as wide as the current text length. It does NOT
+% take the optional [] argument that tabular does.
+
+% This is \@tabular and \@array collapsed.
+\def\expandedtabular#1{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv \let\\\@tabularcr
+ \setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}\@mkpream{#1}\edef\@preamble{\halign to \textwidth
+\bgroup \tabskip 0pt plus 1fil \@arstrut \@preamble \tabskip\z@ \cr}%
+\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \vcenter
+ \bgroup \let\par\relax
+ \let\@sharp##\let\protect\relax \lineskip\z@\baselineskip\z@\@preamble}
+
+\def\endexpandedtabular{\crcr\egroup\egroup $\egroup}
diff --git a/macros/latex209/contrib/ams-cd/README b/macros/latex209/contrib/ams-cd/README
new file mode 100644
index 0000000000..cc46c3f966
--- /dev/null
+++ b/macros/latex209/contrib/ams-cd/README
@@ -0,0 +1,5 @@
+The PDF documentation file in this directory was generated with
+a modified version of the file cd-doc
+
+Robin Fairbairns
+For the CTAN Team
diff --git a/macros/latex209/contrib/ams-cd/cd-doc.pdf b/macros/latex209/contrib/ams-cd/cd-doc.pdf
new file mode 100644
index 0000000000..6ad4b26ece
--- /dev/null
+++ b/macros/latex209/contrib/ams-cd/cd-doc.pdf
Binary files differ
diff --git a/macros/latex209/contrib/ams-cd/cd-doc.tex b/macros/latex209/contrib/ams-cd/cd-doc.tex
new file mode 100644
index 0000000000..3b87bea8bd
--- /dev/null
+++ b/macros/latex209/contrib/ams-cd/cd-doc.tex
@@ -0,0 +1,95 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Cut Here %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% cddoc.tex
+\documentstyle[11pt,cd]{article}
+\nofiles
+
+\addtolength{\textwidth}{1in}
+\addtolength{\oddsidemargin}{-.5in}
+
+\newcommand{\AmSTeX}{$\cal A$\kern-.1667em\lower.5ex\hbox
+ {$\cal M$}\kern-.125em{$\cal S$}-\TeX}
+
+\newcommand{\cdrl}{\cd\rightleftarrows}
+\newcommand{\cdlr}{\cd\leftrightarrows}
+\newcommand{\cdr}{\cd\rightarrow}
+\newcommand{\cdl}{\cd\leftarrow}
+\newcommand{\cdu}{\cd\uparrow}
+\newcommand{\cdd}{\cd\downarrow}
+\newcommand{\cdud}{\cd\updownarrows}
+\newcommand{\cddu}{\cd\downuparrows}
+
+
+\begin{document}\thispagestyle{empty}
+\begin{center}
+{\Large Commutative Diagrams for \LaTeX} \\
+March 3, 1989
+\end{center}
+
+\paragraph{Commutative diagrams} These were adapted from those in \AmSTeX\
+(see p.\ 146 of {\em The Joy of \TeX}). All of the horizontal ``arrows'' will
+stretch with the superscripts and subscripts. These can also be used outside
+of \verb"\CD", where they will be somewhat shorter. You must put `{\tt cd}'
+in with the other style options, for example
+\verb"\documentstyle[12pt,cd]{article}". The \verb"@"-commands from the
+\AmSTeX\ still work, but the new \verb"\cd"-style is the preferred format.
+The table below shows the arrows and names, along with suggested
+abbreviations.
+
+\begin{center}
+\begin{tabular}{|c|c|c||c|c|c|} \hline
+Arrow & Name & Abbr. & Arrow & Name & Abbr.\\ \hline
+$\rightarrow$ & \verb"\cd\rightarrow", \verb"\cd>" & \verb"\cdr" &
+ $\leftarrow$ & \verb"\cd\leftarrow", \verb"\cd<" & \verb"\cdl" \\
+$\cd\rightleftarrows {}{}$ &\verb"\cd\rightleftarrows" &\verb"\cdrl" &
+ $\cd\leftrightarrows{}{}$ &\verb"\cd\leftrightarrows"
+ &\verb"\cdlr" \\
+$\uparrow$ &\verb"\cd\uparrow" & \verb"\cdu" &
+ $\downarrow$ &\verb"\cd\downarrow" &\verb"\cdd" \\
+$\uparrow\downarrow$ &\verb"\cd\updownarrows" & \verb"\cdud" &
+ $\downarrow\uparrow$ &\verb"\cd\downuparrows" &\verb"\cddu" \\
+ $|$ & \verb"\cd|" && $\|$ & \verb"\cd\|" & \\
+$\cd={}{}$ & \verb"\cd=" && None & \verb"\cd." & \\
+\hline
+\end{tabular}
+\end{center}
+
+\paragraph{Example}
+\begin{center}
+\begin{tabular}{l}
+\verb"$$\CD" \\
+\verb"G \cdrl {\gamma}{\delta} H \cdr {}{\Delta} K \\" \\
+\verb"\cd. \cdud {f}{g} \cd| {h}{k} \\" \\
+\verb"0 \cdr {}{} G' \cd= {\beta}{} H'"
+\verb"\endCD $$"
+\end{tabular}
+\hfil
+$\CD
+G \cdrl {\gamma}{\delta} H \cdr {}{\Delta} K \\
+\cd. \cdud {f}{g} \cd| {h}{k} \\
+0 \cdr {}{} G' \cd= {\beta}{} H'
+\endCD$
+\end{center}
+
+
+\bigskip\noindent
+The abbreviations were made with the following \verb"\newcommand"'s at the
+top of the file:
+\begin{verbatim}
+\newcommand{\cdrl}{\cd\rightleftarrows}
+\newcommand{\cdlr}{\cd\leftrightarrows}
+\newcommand{\cdr}{\cd\rightarrow}
+\newcommand{\cdl}{\cd\leftarrow}
+\newcommand{\cdu}{\cd\uparrow}
+\newcommand{\cdd}{\cd\downarrow}
+\newcommand{\cdud}{\cd\updownarrows}
+\newcommand{\cddu}{\cd\downuparrows}
+\end{verbatim}
+
+\bigskip
+\begin{center}
+Darrel Hankerson (Bitnet: \verb"hank@auducvax") \\
+Algebra, Combinatorics, \& Analysis \\
+Auburn University \\
+Auburn, Alabama 36849
+\end{center}
+
diff --git a/macros/latex209/contrib/ams-cd/cd.sty b/macros/latex209/contrib/ams-cd/cd.sty
new file mode 100644
index 0000000000..826cc70d01
--- /dev/null
+++ b/macros/latex209/contrib/ams-cd/cd.sty
@@ -0,0 +1,139 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Cut Here %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% cd.sty - Commutative diagram macros modified from AmSTeX 3-Mar-89
+% Intended as a LaTeX style file. Darrel Hankerson (Bitnet: hank@auducvax)
+
+%\catcode`\@=11
+\def\ssize{\scriptstyle}
+\newdimen\ex@
+\ex@.2326ex
+
+\def\vspace@{\def\vspace##1{\noalign{\vskip##1\relax}}}
+\def\Let@{\relax\iffalse{\fi\let\\=\cr\iffalse}\fi}
+
+\let\ampersand@\relax
+\newdimen\bigaw@
+\newdimen\minaw@
+\minaw@11.11128\ex@
+\newdimen\minCDaw@
+\minCDaw@2.5pc
+\newif\ifCD@
+\def\minCDarrowwidth#1{\relax\ifmmode\ifinner\onlydmatherr@\minCDarrowwidth
+ \else\minCDaw@#1\relax\fi\else\onlydmatherr@\minCDarrowwidth\fi}
+\def\CD{\bgroup\catcode`\@=\active %\catcode added for LaTeX
+ \vspace@\relax\iffalse{\fi\let\ampersand@&\iffalse}\fi
+ \CD@true\vcenter\bgroup\Let@\tabskip\z@skip\baselineskip20\ex@
+ \lineskip3\ex@\lineskiplimit3\ex@\halign\bgroup
+ &\hfill$\m@th##$\hfill\cr}
+\def\endCD{\cr\egroup\egroup\egroup}
+\def\cd#1{\csname cd\string#1\endcsname}
+\def\cddef#1{\expandafter\def\csname cd\string#1\endcsname}
+\cddef.{\relax\ifmmode&&\else\leavevmode.\spacefactor3000 \fi}
+\cddef\rightarrow#1#2{\harrow@{#1}{#2}\rightarrowfill} \cddef>{\cd\rightarrow}
+\cddef\leftarrow#1#2{\harrow@{#1}{#2}\leftarrowfill} \cddef<{\cd\leftarrow}
+\def\harrow@#1#2#3{\ampersand@\setbox\z@\hbox{$\ssize
+ \;\;{#1}\;$}\setbox\@ne\hbox{$\ssize\;\;{#2}\;$}\setbox\tw@
+ \hbox{$#2$}\ifCD@
+ \global\bigaw@\minCDaw@\else\global\bigaw@\minaw@\fi
+ \ifdim\wd\z@>\bigaw@\global\bigaw@\wd\z@\fi
+ \ifdim\wd\@ne>\bigaw@\global\bigaw@\wd\@ne\fi
+ \ifCD@\hskip.5em\fi
+ \ifdim\wd\tw@>\z@
+ \mathrel{\mathop{\hbox to\bigaw@{#3}}\limits^{#1}_{#2}}\else
+ \mathrel{\mathop{\hbox to\bigaw@{#3}}\limits^{#1}}\fi
+ \ifCD@\hskip.5em\fi\ampersand@}
+\cddef\uparrow#1#2{\llap{$\vcenter{\hbox
+ {$\ssize#1$}}$}\Big\uparrow\rlap{$\vcenter{\hbox{$\ssize#2$}}$}&&}
+\cddef\downarrow#1#2{\llap{$\vcenter{\hbox
+ {$\ssize#1$}}$}\Big\downarrow\rlap{$\vcenter{\hbox{$\ssize#2$}}$}&&}
+\cddef=#1#2{\ampersand@\setbox\z@\hbox{$\ssize
+ \;{#1}\;\;$}\setbox\@ne\hbox{$\ssize\;{#2}\;\;$}\setbox\tw@
+ \hbox{$#2$}\ifCD@
+ \global\bigaw@\minCDaw@\else\global\bigaw@\minaw@\fi
+ \ifdim\wd\z@>\bigaw@\global\bigaw@\wd\z@\fi
+ \ifdim\wd\@ne>\bigaw@\global\bigaw@\wd\@ne\fi
+ \ifCD@\hskip.5em\fi
+ \ifdim\wd\tw@>\z@
+ \mathrel{\mathop{\vbox{\hrule width\bigaw@\vskip3\ex@\hrule width
+ \bigaw@}}\limits^{#1}_{#2}}\else
+ \mathrel{\mathop{\vbox{\hrule width\bigaw@\vskip3\ex@\hrule width
+ \bigaw@}}\limits^{#1}}\fi
+ \ifCD@\hskip.5em\fi\ampersand@}
+\cddef|#1#2{\llap{$\vcenter{\hbox
+ {$\ssize#1$}}$}\Big\vert\rlap{$\vcenter{\hbox{$\ssize#2$}}$}&&}
+\cddef\|#1#2{\llap{$\vcenter{\hbox
+ {$\ssize#1$}}$}\Big\vert\Big\vert\rlap{$\vcenter{\hbox{$\ssize#2$}}$}&&}
+\def\pretend#1\haswidth#2{\setbox\z@\hbox{$\scriptstyle{#2}$}\hbox
+ to\wd\z@{\hfill$\scriptstyle{#1}$\hfill}}
+\cddef\updownarrows#1#2{\llap{$\vcenter{\hbox{$\ssize#1$}}$}
+ \Big\uparrow\Big\downarrow\rlap{$\vcenter{\hbox{$\ssize#2$}}$}&&}
+\cddef\downuparrows#1#2{\llap{$\vcenter{\hbox{$\ssize#1$}}$}
+ \Big\downarrow\Big\uparrow\rlap{$\vcenter{\hbox{$\ssize#2$}}$}&&}
+\cddef\rightleftarrows#1#2{\harrows@{#1}{#2}\rightarrowfill\leftarrowfill}
+\cddef\leftrightarrows#1#2{\harrows@{#1}{#2}\leftarrowfill\rightarrowfill}
+\def\harrows@#1#2#3#4{\ampersand@\setbox\z@\hbox{$\ssize
+ \;{#1}\;\;$}\setbox\@ne\hbox{$\ssize\;{#2}\;\;$}\setbox\tw@
+ \hbox{$#2$}\ifCD@
+ \global\bigaw@\minCDaw@\else\global\bigaw@\minaw@\fi
+ \ifdim\wd\z@>\bigaw@\global\bigaw@\wd\z@\fi
+ \ifdim\wd\@ne>\bigaw@\global\bigaw@\wd\@ne\fi
+ \ifCD@\hskip.5em\fi
+ \ifdim\wd\tw@>\z@
+ \mathrel{\mathop{\harrowsfill@#3#4}\limits^{#1}_{#2}}\else
+ \mathrel{\mathop{\harrowsfill@#3#4}\limits^{#1}}\fi
+ \ifCD@\hskip.5em\fi\ampersand@}
+\def\harrowsfill@#1#2{\stackrel{\raisebox{0pt}[2\ex@][0pt]{\hbox
+ to\bigaw@{#1}}}{\raisebox{-1\ex@}[0pt][0pt]{\hbox to \bigaw@{#2}}}}
+%\endinput % End here if AmSTeX @-syntax not needed.
+
+%%%%% The following code adds the AmSTeX @-syntax %%%%%
+%\newlinechar=`\^^J
+\def\err@#1{\errmessage{AmS-TeX error: #1}}
+\newhelp\athelp@
+{Only certain combinations beginning with @ make sense to me.^^J
+Perhaps you wanted \string\@\space for a printed @?^^J
+I've ignored the character or group after @.}
+\def\futureletnextat@{\futurelet\next\at@}
+{\catcode`\@=\active
+\lccode`\Z=`\@ \lccode`\I=`\I \lowercase
+{\gdef@{\expandafter\csname futureletnextatZ\endcsname}\expandafter
+ \gdef\csname atZ\endcsname
+ {\ifcat\noexpand\next a\def\next{\csname atZZ\endcsname}\else
+ \ifcat\noexpand\next0\def\next{\csname atZZ\endcsname}\else
+ \ifcat\noexpand\next\relax\def\next{\csname atZZZ\endcsname}\else
+ \def\next{\csname atZZZZ\endcsname}\fi\fi\fi\next}
+\expandafter\gdef\csname atZZ\endcsname#1{\expandafter
+ \ifx\csname #1Zat\endcsname\relax\def\next
+ {\errhelp\expandafter=\csname athelpZ\endcsname
+ \csname errZ\endcsname{Invalid use of \string@}}\else
+ \def\next{\csname #1Zat\endcsname}\fi\next}
+\expandafter\gdef\csname atZZZ\endcsname#1{\expandafter
+ \ifx\csname \string#1ZZat\endcsname\relax\def\next
+ {\errhelp\expandafter=\csname athelpZ\endcsname
+ \csname errZ\endcsname{Invalid use of \string@}}\else
+ \def\next{\csname \string#1ZZat\endcsname}\fi\next}
+\expandafter\gdef\csname atZZZZ\endcsname#1{\errhelp
+ \expandafter=\csname athelpZ\endcsname
+ \csname errZ\endcsname{Invalid use of \string@}}}}
+\def\atdef@#1{\expandafter\def\csname #1@at\endcsname}
+\def\atdef@@#1{\expandafter\def\csname \string#1@@at\endcsname}
+\newhelp\defahelp@{If you typed \string\define\space cs instead of
+\string\define\string\cs\space^^J
+I've substituted an inaccessible control sequence so that your^^J
+definition will be completed without mixing me up too badly.^^J
+If you typed \string\define{\string\cs} the inaccessible control sequence^^J
+was defined to be \string\cs, and the rest of your^^J
+definition appears as input.}
+\newhelp\defbhelp@{I've ignored your definition, because it might^^J
+conflict with other uses that are important to me.}
+\atdef@.{\cd.} % AmSTeX @-format
+\atdef@>#1>#2>{\cd\rightarrow{#1}{#2}}
+\atdef@<#1<#2<{\cd\leftarrow{#1}{#2}}
+\atdef@ A#1A#2A{\cd\uparrow{#1}{#2}}
+\atdef@ V#1V#2V{\cd\downarrow{#1}{#2}}
+\atdef@|{\Big\Vert&&}
+\atdef@@\vert{\Big\Vert&&}
+\atdef@={&\hskip.5em\mathrel
+ {\vbox{\hrule width\minCDaw@\vskip3\ex@\hrule width
+ \minCDaw@}}\hskip.5em&}
+%\catcode`\@=\active
+\endinput
diff --git a/macros/latex209/contrib/ans/README b/macros/latex209/contrib/ans/README
new file mode 120000
index 0000000000..30bf9f095e
--- /dev/null
+++ b/macros/latex209/contrib/ans/README
@@ -0,0 +1 @@
+ansread.me \ No newline at end of file
diff --git a/macros/latex209/contrib/ans/ans.sty b/macros/latex209/contrib/ans/ans.sty
new file mode 100644
index 0000000000..28f9d588a1
--- /dev/null
+++ b/macros/latex209/contrib/ans/ans.sty
@@ -0,0 +1,543 @@
+\typeout{Exercise and Answer macros}
+\typeout{Charles Wells cfw2@po.cwru.edu}
+\typeout{24 February 1994}
+
+% Copyright 1994 by Charles Frederick Wells.
+% May be freely redistributed, provided that the files ans.sty,
+% ansdoc.tex and onceexam.tex are distributed together and are not
+% changed.
+
+\makeatletter
+% Counters for exercise and subexercise numbers
+\newcounter{exercounter}
+\newcounter{subexercounter}[exercounter]
+% % \renewcommand{\thesubexercounter}{\subexerstyle{subexercounter}}
+\newif\ifsols
+\newif\ifanswerson
+\newif\ifanswer
+\newif\ifsubanswer
+% Used to determine if the current exercise or subexercise
+% has an answer
+
+
+\def\exerbody{%
+\setcounter{exercounter}{0}%
+\ifanswerson\answerfalse\subanswerfalse\@wrheader\fi%
+\ifsols\@wrsolheader\fi}
+\newcommand{\exes}[1]{\exersection{#1}\exerbody}
+% You can comment out the forms you don't want:
+\newcommand{\exercises}{\exes{Exercises}}
+\newcommand{\exercise}{\exes{Exercise}}
+\newcommand{\problems}{\exes{Problems}}
+\newcommand{\extraproblems}{\exes{Extra Credit Problems}}
+\newcommand{\samplequestions}{\exes{Sample Test Questions}}
+
+% Amount of vertical space between exercises.
+% It would be better to have this space depend on the
+% type size. In hindsight, I think each exercise section
+% should be a specially created LaTeX list environment.
+% But that's for the next revision!
+\newskip\exerskipamount
+\exerskipamount=6pt plus 1 pt
+\newcommand{\medgap}{\par\vskip\exerskipamount\noindent}
+
+% \answermark is the symbol that marks questions with answers.
+% Put another symbol here in place of \bullet if you wish. The
+% spacing will take care of itself. I hope.
+\newcommand\answermark{\mbox{$^\bullet$}}
+
+% The following commands set the numbering style for exercises and
+% subexercises. See page 92 of LaTeX book for other
+% possibilities.
+\def\exerstyle{\arabic}
+\def\subexerstyle{\alph}
+
+% The quantities below control the spacing after the problem number
+% before the problem starts. If you change \exerspace all the
+% others should change automatically. The idea is that all the
+% problems start with the same indentation and the answer and hard
+% symbols are stuck between without affecting the indentation.
+% \newdimen{\hardback}
+\newdimen{\answerspace}
+\newdimen{\exerspace}
+\newdimen{\tempdim}
+\newdimen{\labeldim}
+\settowidth{\labeldim}{\bf5}
+\setlength{\exerspace}{\parindent}
+\advance\exerspace by -\labeldim
+\setlength{\answerspace}{\exerspace}
+\settowidth{\tempdim}{\answermark}
+\advance\answerspace by -\tempdim
+
+% \@pns is the style of the problem number. It is set to
+% boldface. Changing \@pns will change the styles of all the
+% problem numbers and subproblem letters in both the exercise
+% sections and the answer sections. If you don't want them all
+% the same you will have to search the file and change them by
+% hand.
+\def\@pns{\bf}
+
+% The following commands head exercises and subexercises. (See
+% ansdoc.tex for a more complete explanation.)
+\newcommand{\exer}{%
+\ifnum\c@exercounter>0
+\pagebreak[2]\else\nopagebreak\fi\medgap%
+\ifanswerson\ifanswer\noanserror\fi\answerfalse%
+\ifsubanswer\nosubanserror\fi\subanswerfalse\fi
+\refstepcounter{exercounter}\setcounter{subexercounter}{0}%
+\@pns\exerstyle{exercounter}.\hspace{\exerspace}\rm}
+
+% \exhead is a header for a set of exercises
+\newcommand{\exhead}[1]{\ifnum\c@exercounter>0
+\pagebreak[3]\else\nopagebreak\fi
+\par\bigskip\noindent{\fbox{%
+\advance\textwidth by -1em\parbox{\textwidth}{#1}}}}
+
+% The two lines below produce a version of exhead that does
+% not enclose the header in a box. I changed to the boxed
+% version when I noticed that a substantial number of students
+% overlooked the header.
+% \newcommand{\exhead}{\ifnum\c@exercounter>0
+% \pagebreak[3]\else\nopagebreak\fi\par\bigskip\noindent}
+
+
+\newcommand{\@ssa}% "offset subanswer"
+{\phantom{\bf\exerstyle{exercounter}.\ }%
+\bf\subexerstyle{subexercounter}}
+
+\newcommand{\exera}{\ifnum\c@exercounter>0
+\pagebreak[2]\else\nopagebreak\fi\medgap%
+\ifanswerson\ifanswer\noanserror\fi%
+\ifsubanswer\nosubanserror\fi\subanswerfalse\answertrue\fi
+\refstepcounter{exercounter}\setcounter{subexercounter}{0}%
+\@pns\exerstyle{exercounter}.\answermark\hspace{\answerspace}\rm}
+
+\def\eexer{\ifanswerson\ifanswer\noanserror\fi%
+\ifsubanswer\nosubanserror\fi\pagebreak[3]\@wrtail\fi%
+\ifsols\@wrsoltail\fi}
+
+\newcommand{\subexer}{\ifanswerson%
+\ifsubanswer\nosubanserror\fi\subanswerfalse\fi%
+\refstepcounter{subexercounter}%
+\nopagebreak[1]\par\noindent\@ssa.\hspace{\exerspace}\rm}
+
+\newcommand{\subexera}{\ifanswerson%
+\ifsubanswer\nosubanserror\fi\answerfalse\subanswertrue\fi%
+\refstepcounter{subexercounter}%
+\nopagebreak[1]\par\noindent\@ssa.%
+\answermark\hspace{\answerspace}\rm}
+
+\newcommand{\immsubexer}{\ifanswerson%
+\ifsubanswer\nosubanserror\fi\subanswerfalse\fi%
+\refstepcounter{subexercounter}
+\hspace{-\labeldim}\@pns\subexerstyle{subexercounter}.%
+\hspace{\exerspace}\rm}
+
+\newcommand{\immsubexera}{\ifanswerson%
+\ifsubanswer\nosubanserror\fi\answerfalse\subanswertrue\fi%
+\refstepcounter{subexercounter}%
+\hspace{-\labeldim}\@pns\subexerstyle{subexercounter}.%
+\answermark\hspace{\answerspace}\rm}
+
+%%The following places the word "(#1)" in boldface after the
+% exercise number.
+% I use it to mark exercises "hard", "requires Mathematica",
+% etc.
+\def\annot#1{\hspace{-\answerspace}{{\bf (#1)}}}
+
+% These are the error messages for problems marked with the
+% answermark that don't have answers and vice versa.
+\newcommand\anserror{
+\typeout{Warning:}
+\typeout{Exercise \exerstyle{exercounter} has an answer but is not %
+marked}}
+\newcommand\noanserror{
+\typeout{Warning:}
+\typeout{Exercise \exerstyle{exercounter} has no answer}}
+\newcommand\nosubanserror{
+\typeout{Warning:}
+\typeout{Exercise \exerstyle{exercounter}.%
+\subexerstyle{subexercounter} %
+has no answer}}
+\newcommand\subanserror{
+\typeout{Warning:}
+\typeout{Exercise \exerstyle{exercounter}.%
+\subexerstyle{subexercounter} %
+has an answer but is not marked}}
+
+% Following is a modification of the makeindex code.
+% It defines the various answer macros that write appropriate
+% headers to the answer file. The answer file has the same name
+% as the main file, with the extension ".ans".
+% The stuff concerning rightmark etc. control the running heads in
+% the answer section. They won't appear unless you put
+% \pagestyle{headings} in the preamble.
+% The line in @wrheader beginning \string\ansection* controls what
+% is printed before the answers to each section.
+% The line saying \typeout controls the message on the screen.
+\def\makeanswers{\answersontrue\if@filesw \newwrite\answerfile
+ \immediate\openout\answerfile=\jobname.ans%
+%makeanswers continues...
+ \def\answer{\ifanswer\else\anserror\fi\answerfalse\par
+\putinans{\string\antwort[\exerstyle{exercounter}]}\copytoblankline}%
+%makeanswers continues...
+ \def\subanswer{\ifsubanswer\else\subanserror\fi\subanswerfalse\par
+ \ifnum\value{subexercounter}=1
+ \putinans{\string\immsubantwort[\exerstyle{exercounter}]%
+[\subexerstyle{subexercounter}]}\else
+ \putinans{\string\subantwort[%\string\phantom%
+\exerstyle{exercounter}]%
+[\subexerstyle{subexercounter}]}\fi
+ \copytoblankline}%
+%makeanswers continues...
+ \def\immsubanswer{\subanswerfalse\par
+ \putinans{\string\immsubantwort[\exerstyle{exercounter}]%
+[\subexerstyle{subexercounter}]}%
+ \copytoblankline}%
+ \typeout{Writing answer file \jobname.ans }\fi}% END \makeanswers
+
+% The command \makesolutions below produces a second file of
+% answers for the problems that aren't marked as having answers!
+% By putting \dosolutions at the very end of the printout you can
+% have a booklet of "answers to problems not answered in the
+% text."
+\def\makesolutions{\solstrue\if@filesw \newwrite\solutionfile
+\newwrite\solutionfile
+ \immediate\openout\solutionfile=\jobname.sol%
+ \def\solution{\par
+ \putinsol%
+ {\string\antwort[\exerstyle{exercounter}]}%
+ \copysoltoblankline\@esphack}%
+ \def\subsolution{\par
+ \ifnum\value{subexercounter}=1
+ \putinsol{\string\immsubantwort[\exerstyle{exercounter}]%
+[\subexerstyle{subexercounter}]}\else
+ \putinans{\string\subantwort[%\string\phantom%
+{\exerstyle{exercounter}}]%
+[\subexerstyle{subexercounter}]}\fi
+ \copysoltoblankline}%
+ \def\immsubsolution{\par
+ \putinsol{\string\immsubantwort[\exerstyle{exercounter}]%
+[\subexerstyle{subexercounter}]}%
+ \copysoltoblankline}%
+ \typeout{Writing solutions file \jobname.sol}\fi}% END
+
+
+\def\skiplf{\catcode`\^^J=9}
+
+% The following is by D. Knuth
+% It reads a line up to a CR then writes it to file #1
+% If it comes to a blank line it quits
+% DON'T MESS WITH THIS CODE. EVEN BREAKING OR COMBINING THE
+% LINES CAN MESS IT UP.
+\def\copytoblankline{\begingroup\setupcopy\copyans}
+\def\copysoltoblankline{\begingroup\setupcopy\copysol}
+ \def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials
+ \catcode`\|=\other \obeylines}
+ {\obeylines \gdef\copyans#1
+ {\def\next{#1}%
+ \ifx\next\empty\let\next=\endgroup%
+ \else\immediate\write\answerfile{\next} \let\next=\copyans\fi\next}}
+ {\obeylines \gdef\copysol#1
+ {\def\next{#1}%
+ \ifx\next\empty\let\next=\endgroup%
+ \else\immediate\write\solutionfile{\next} \let\next=\copysol\fi\next}}
+
+% The following modification of copytoblankline is used
+% when answers are turned off
+\def\throwaway{\begingroup\setupcopy\killans}
+ {\obeylines \gdef\killans#1
+ {\def\next{#1}%
+ \ifx\next\empty\let\next=\endgroup %
+ \else\let\next=\killans\fi\next}}
+
+\chardef\other=12
+
+% The following commands take effect if \makeanswers is not
+% in preamble
+% They are intended to do nothing
+\def\@wrheader{\relax}
+\def\@wrtail{\relax}
+\def\@wrsolheader{\relax}
+\def\@wrsoltail{\relax}
+\def\answer{\throwaway}
+\def\solution{\throwaway}
+\def\subanswer{\throwaway}
+\def\immsubanswer{\throwaway}
+
+
+
+\answersonfalse
+\solsfalse
+
+% The words containing "antwort" format the answers in the
+% answer file.
+
+\def\ant{\@startsection
+ {paragraph}{4}{\z@}{-6pt plus -2pt minus -1pt}{-1em plus
+-.2em}{\normalsize\@pns}}
+
+
+\def\antwort[#1]{\ant{#1.}} %%Note the period
+% \def\subantwort[#1][#2]{\par\noindent\@pns#1\phantom{.}\ \ #2.\ \rm}
+\def\subantwort[#1][#2]{\pagebreak[1]%
+\medgap\@pns\phantom{#1.}\ \ #2.\ \rm}
+\def\immsubantwort[#1][#2]{\pagebreak[2]\medgap\@pns#1.\ \ #2.\ \rm}
+
+
+% Here are some commands used repeatedly in \makeanswers and in
+% the option commands \artsec, \bkchap, etc.
+\def\putinans{\immediate\write\answerfile}
+\def\putinsol{\immediate\write\solutionfile}
+\def\putbreak{\string\pagebreak[3]\string\medbreak\noindent}
+
+% This command is called by doanswers and can be used to customize
+% the answer section. For example, if you want the answers in
+% small type, you could put "\def\@therstuff{\small}" in the
+% preamble.
+\def\@therstuff{\relax}
+
+\def\do@nswers[#1]{
+\ifanswerson\putinans{\string\par}
+\immediate\closeout\answerfile% \fi
+\@therstuff
+\def\rightmark{\expandafter\@rightmark\botmark}
+\def\leftmark{\expandafter\@leftmark\firstmark}\fi
+\answersonfalse % minor kludge because answerfile is closed
+\anshead
+\input{#1.ans}
+\eject}
+
+% The following command should be put at place in the book where the
+% answers go, e.g. after the bibliography and before the index.
+% "Answers to selected exercises" heads the whole section.
+% Answers to each section are headed by "Section #.#".
+% That is controlled by \@wrheader (above).
+\def\doanswers{\@ifnextchar [{\do@nswers}{\do@nswers[\jobname]}}
+
+\def\dos@ls[#1]{
+\immediate\write\solutionfile{\string\par}
+\immediate\closeout\solutionfile
+\@therstuff
+\setcounter{page}{1}
+\def\rightmark{\expandafter\@rightmark\botmark}
+\def\leftmark{\expandafter\@leftmark\firstmark}
+\raggedbottom% In case not used earlier
+\solhead
+\input{#1.sol}
+\eject}
+
+% The command \dosolutions produces a booklet of answers to
+% questions not answered in the text (provided you write the
+% answers!) It could be put at the end of the .tex file after
+% resetting the page number.
+\def\dosolutions{\@ifnextchar [{\dos@ls}{\dos@ls[\jobname]}}
+
+% The following commands allow ans.sty to be used with book.sty or
+% article.sty, with various arrangements of the exercises.
+
+% Use this command in your preamble if you are using article style
+% and have (at most) one section of exercises per section.
+\def\artsec{%
+ \def\exersection{\subsection}%
+ \def\ansection{\section}%
+ \def\anshead{%
+ \section*{Answers to selected exercises}\label{ansec}
+ \sectionmark{}}
+ \def\solhead{%
+ \noindent\section*{Solutions to exercises\protect\\
+not answered in text}%
+ \sectionmark{}}
+ \def\@wrheader{\begingroup
+ \xdef\@gtempa{%
+\putinans{\string\ansection*{Section \thesection}\string\nopagebreak}
+ \putinans{\string\typeout{Answers to Section \thesection}}
+ \putinans{\string\markboth{Answers for Section \thesection}
+{Answers for Section \thesection\string\enskip}}}
+ \@gtempa\endgroup}%
+ \def\@wrsolheader{\begingroup
+ \xdef\@gtempa{%
+ \putinsol{\string\ansection*{Section \thesection}\string\nopagebreak}
+ \putinsol{\string\typeout{Solutions to Section \thesection}}
+ \putinsol{\string\markboth{Solutions for Section \thesection}
+{Solutions for Section \thesection\string\enskip}}}
+ \@gtempa\endgroup}%
+ \def\@wrtail{\xdef\@gtempa{%
+ \putinans{\string\markboth{Answers for Section \thesection}
+{Answers for Section \thesection\string\enskip}}
+ \putinans{\putbreak}}
+ \@gtempa}
+ \def\@wrsoltail{
+\xdef\@gtempa{\putinsol{\string\markboth{Solutions for Section
+ \thesection}
+{Solutions for Section \thesection\string\enskip}}
+ \putinsol{\string\pagebreak[3]\string\medbreak\noindent}}
+ \@gtempa}}% end \artsec
+
+% Use this command if you are using bookstyle and have at most one
+% set of exercises per chapter.
+\def\bkchap{%
+ \def\exersection{\section}%
+ \def\anstochap{\section}%
+ \def\anshead{%
+ \addcontentsline{toc}{part}{Answers to selected problems}
+ \chapter*{Answers to selected problems}\label{ansec}
+ \chaptermark{}}
+ \def\solhead{%
+ \chapter*{Solutions to problems\protect\\
+ not answered in text}
+ \chaptermark{}}
+ \def\@wrheader{\begingroup
+ \xdef\@gtempa{%
+ \putinans{\string\anstochap*{Chapter \thechapter}\string\nopagebreak}
+ \putinans{\string\typeout{Answers to Chapter \thechapter}}
+ \putinans{\string\markboth{Solutions for Chapter \thechapter}
+{Solutions for Chapter \thechapter\string\enskip}}
+% \putinans{%
+% % The following causes the string "Solutions for Chapter n"
+% % to be added IN THE FORMAT OF A SECTION ENTRY in the t.o.c
+% \string\addcontentsline{toc}{section}{\string\protect
+% \string\numberline{0}{Solutions for Chapter \thechapter}}}
+}
+ \@gtempa\endgroup}%
+ \def\@wrsolheader{\begingroup
+ \xdef\@gtempa%
+ {\putinsol{\string\anstochap*{Chapter \thechapter}\string\nopagebreak}
+ \putinsol{\string\typeout{Solutions to Chapter \thechapter}}
+ \putinsol{\string\markboth{Solutions for Chapter \thechapter}
+{Solutions for Chapter \thechapter\string\enskip}}}
+ \@gtempa\endgroup}%
+ \def\@wrtail{\xdef\@gtempa{%
+ \putinans{\string\markboth{Solutions for Chapter \thechapter}
+{Solutions for Chapter \thechapter\string\enskip}}
+ \putinans{\putbreak}}
+ \@gtempa}
+ \def\@wrsoltail{
+\xdef\@gtempa{\immediate\write\solutionfile{%
+ \string\markboth{Solutions for Chapter \thechapter}
+{Solutions for Chapter \thechapter\string\enskip}}
+ \immediate\write\solutionfile{\string\pagebreak[3]
+ \string\medbreak\noindent}}
+ \@gtempa}}% end\bkchap
+
+\def\twocolbkchap{%
+ \def\exersection{\section}%
+ \def\anstochap{\section}%
+ \def\anshead{%
+ \addcontentsline{toc}{part}{Answers to selected problems}
+ \chapter*{Answers to selected problems}\label{ansec}
+ \chaptermark{}}
+ \def\solhead{%
+ \chapter*{Solutions to problems\protect\\
+ not answered in text}
+ \chaptermark{}}
+ \def\@wrheader{\begingroup
+ \xdef\@gtempa{%
+ \putinans{\string\anstochap*{Chapter \thechapter}\string\nopagebreak}
+ \putinans{\string\typeout{Answers to Chapter \thechapter}}
+ \putinans{\string\markboth{Solutions for Chapter \thechapter}
+{Solutions for Chapter \thechapter\string\enskip}}
+% \putinans{%
+% % The following causes the string "Solutions for Chapter n"
+% % to be added IN THE FORMAT OF A SECTION ENTRY in the t.o.c
+% \string\addcontentsline{toc}{section}{\string\protect
+% \string\numberline{0}{Solutions for Chapter \thechapter}}}
+}
+ \@gtempa\endgroup}%
+ \def\@wrsolheader{\begingroup
+ \xdef\@gtempa%
+ {\putinsol{\string\anstochap*{Chapter \thechapter}\string\nopagebreak}
+ \putinsol{\string\typeout{Solutions to Chapter \thechapter}}
+ \putinsol{\string\markboth{Solutions for Chapter \thechapter}
+{Solutions for Chapter \thechapter\string\enskip}}}
+ \@gtempa\endgroup}%
+ \def\@wrtail{\xdef\@gtempa{%
+ \putinans{\string\markboth{Solutions for Chapter \thechapter}
+{Solutions for Chapter \thechapter\string\enskip}}
+ \putinans{\putbreak}}
+ \@gtempa}
+ \def\@wrsoltail{
+\xdef\@gtempa{\immediate\write\solutionfile{%
+ \string\markboth{Solutions for Chapter \thechapter}
+{Solutions for Chapter \thechapter\string\enskip}}
+ \immediate\write\solutionfile{\string\pagebreak[3]
+ \string\medbreak\noindent}}
+ \@gtempa}}% end\bkchap
+
+
+% Use this command if you are using book style and have at most
+% one set of exercises per section.
+\def\bksec{%
+ \def\exersection{\section}%
+ \def\anstochap{\section}%
+ \def\ansection{\subsection}%
+ \def\anshead{%
+ \setcounter{chapter}{-1}
+ \setcounter{section}{0}
+ \chapter{Answers to selected exercises}\label{ansec}
+ \chaptermark{Answers to exercises}}
+ \def\solhead{%
+ \chapter*{Solutions to exercises\protect\\ not answered in text}
+ \chaptermark{Solutions to exercises}}
+ \def\@nschap{\ifnum \c@chapter >\z@
+ {\begingroup
+ \xdef\@gtempa{\putinans{%
+ \string\typeout{Chapter \thechapter\space solutions}}
+% using several \writes keeps the answer file lines from being too long
+ \putinans{%
+ \string\noindent%
+ \string\anstochap*{Solutions for Chapter \thechapter}%
+ \string\nopagebreak}
+ \putinans{%
+ \string\addcontentsline{toc}{chapter}{\string\protect
+ \string\numberline{0}{Solutions for Chapter \thechapter}}}}
+ \@gtempa\endgroup}\fi}%
+ \def\s@lchap{\ifnum \c@chapter >\z@
+ {\begingroup
+ \xdef\@gtempa{\putinsol{%
+ \string\typeout{Chapter \thechapter\space solutions}}
+% using several \writes keeps the answer file lines from being too long
+ \putinsol{%
+ \string\noindent%
+ \string\anstochap*{Solutions for Chapter \thechapter}%
+ \string\nopagebreak}}%
+ \@gtempa\endgroup}\fi}%
+ \def\@wrheader{\begingroup
+ \xdef\@gtempa{\putinans{%
+ \string\ansection*{Section \thesection}\string\nopagebreak
+ \string\markboth{Solutions for section \thesection}
+{Solutions for section \thesection\string\enskip}}}
+ \@gtempa\endgroup}%
+ \def\@wrsolheader{\begingroup
+ \xdef\@gtempa{%
+ \putinsol{\string\anstochap*{Section \thesection}\string\nopagebreak}
+ \putinsol{\string\typeout{Solutions to Section \thesection}}
+ \putinsol{\string\markboth{Solutions for Section \thesection}
+{Solutions for Section \thesection\string\enskip}}}
+ \@gtempa\endgroup}%
+% Following rewrites chapter to write heading in answer section
+ \let\ch@@@p=\chapter
+ \def\chapter{\ch@@@p\@nschap\s@lchap}
+ \def\@wrtail{
+\xdef\@gtempa{\putinans{%
+ \string\markboth{Solutions for section \thesection}
+{Solutions for section \thesection\string\enskip}}
+ \putinans{\putbreak}}
+ \@gtempa}
+ \def\@wrsoltail{
+\xdef\@gtempa{\putinsol{\string\markboth{Solutions for Section
+ \thesection}
+{Solutions for Section \thesection\string\enskip}}
+ \putinsol{\string\pagebreak[3]\string\medbreak\noindent}}
+ \@gtempa}}% end\bksec
+
+\def\once{%
+ \renewcommand{\exercises}{\setcounter{exercounter}{0}%
+ \ifanswerson\answerfalse\subanswerfalse\fi\@wrheader}
+ \def\anshead{\relax}
+ \def\@wrheader{\putinans{\string\typeout{Answers}}}
+ \def\@wrtail{\relax}
+ \ifsols{%
+\typeout{Sorry, you can't make a Solutions Manual in this style}
+\solsfalse}\fi}% end \once
+
diff --git a/macros/latex209/contrib/ans/ansdoc.dvi b/macros/latex209/contrib/ans/ansdoc.dvi
new file mode 100644
index 0000000000..67446e18ac
--- /dev/null
+++ b/macros/latex209/contrib/ans/ansdoc.dvi
Binary files differ
diff --git a/macros/latex209/contrib/ans/ansdoc.pdf b/macros/latex209/contrib/ans/ansdoc.pdf
new file mode 100644
index 0000000000..f263658acf
--- /dev/null
+++ b/macros/latex209/contrib/ans/ansdoc.pdf
Binary files differ
diff --git a/macros/latex209/contrib/ans/ansdoc.tex b/macros/latex209/contrib/ans/ansdoc.tex
new file mode 100644
index 0000000000..11faaa5c33
--- /dev/null
+++ b/macros/latex209/contrib/ans/ansdoc.tex
@@ -0,0 +1,490 @@
+\documentstyle[ans,11pt]{article}
+% \input smalbold
+\pagestyle{empty}
+\makeanswers\artsec
+\makesolutions
+\emergencystretch10pt
+\newcommand{\setpage}[1]{\setcounter{page}{#1}}
+
+% The following arcane code defines bkslsh to be a textmode
+% backslash. In \LaTeX, \backslash defines backslash for mathmode
+% but it doesn't look right in text mode.
+% This definition gives the right size backslash for any Computer
+% Modern size.
+{\catcode`|=0\catcode`\\=\other
+|def|bsl{{|tt\}}
+|catcode`\=0 \global\let\bkslsh=|bsl}
+
+\def\cmd#1{{\tt\bkslsh #1}}
+
+\title{Exercises and answers for \LaTeX
+\footnote{Copyright \copyright\number\year\ by Charles Frederick
+Wells}\\
+\normalsize Revision 25 February 1994}
+\author{Charles Wells \\ Department of Mathematics \\
+Case Western Reserve University \\ University Circle \\
+Cleveland, OH 44106-7058 \\ USA\\ {\tt cfw2@po.cwru.edu}}
+
+\begin{document}
+\maketitle
+
+\section{Description}\label{dessec}
+
+{\tt Ans.sty} is a \LaTeX\ style file.
+It allows you to write exercises and their answers together in a
+\LaTeX\ document. When composed, the answers will appear in a
+separate chapter or section elsewhere in the document (you
+determine where they appear).
+
+{\tt Ans.sty} allows several variations. In the current
+release, you can use {\tt article.sty} or style files derived
+from {\tt article.sty} and have exercises in a subsection at the end
+of each section; or you can use {\tt book.sty} and have
+exercises at the end of each section or at the end of each
+chapter. I hope to have a version that allows exercises
+interspersed throughout the document (as in The \TeX book) in a
+later version.
+
+This document is written using {\tt article.sty}. Below are
+some exercises. The ones that are marked with a dot have
+answers on page~\pageref{ansec}. Some of those not marked with
+a dot have answers in the booklet called ``Solutions to
+exercises not answered in text'' that is generated with
+this article.
+Later in the document
+you will find more elaborate exercises along with their source.
+
+\exercises
+
+\exera This the first exercise of section~\ref{dessec}.
+\answer{This is the answer to the first exercise of
+section~\ref{dessec}.}
+
+\exera This is the second exercise of section~\ref{dessec}.
+\answer This is the answer to the second exercise of
+section~\ref{dessec}.
+
+\exer This has an answer in the Solution Manual.
+\solution This is an answer in the Solution Manual.
+
+
+\eexer
+
+\section{Using ans.sty}\label{seca}
+
+\subsection{At the beginning of the document}
+
+The beginning of your document should look like this:
+
+\begin{verbatim}
+\documentstyle[ans]{article}
+\makeanswers\artsec %% Use \bkchap or \bksec in book style
+%% Other preamble commands you might want here
+\begin{document}
+\end{verbatim}
+If you want a booklet printed with answers to exercises not
+answered in the article, you should also put \cmd{makesolutions}
+in the preamble.
+
+\subsubsection{Options}
+One of the options commands
+must come after \cmd{makeanswers}. The options commands are
+\begin{description}
+\item[\cmd{artsec}] This is used in article style. It allows
+(no more than one) subsection of exercises in each section.
+\item[\cmd{artscattered}] {\bf Not currently implemented.}
+For article style. Allows exercises
+to be interspersed throughout the document, as in The \TeX book.
+\item[\cmd{once}]
+This must be used in article style and allows
+just one section of exercises for the whole document.
+See~\ref{once} below. You cannot make a solution manual in this
+style. The file {\tt onceexam.tex} contains an example of its
+use.
+\item[\cmd{bkchap}] Used with {\tt book.sty}, allowing one
+section of exercises per chapter.
+\item[\cmd{bksec}] Used with {\tt book.sty}, allowing one
+section of exercises per section.
+\item[\cmd{bkscattered}] {\bf Not currently implemented.}
+Like \cmd{artscattered} for
+{\tt book.sty}.
+\end{description}
+
+If you omit the \cmd{makeanswers}
+command, the document will
+compose without complaint but the answers won't appear at the
+end. This may be useful for draft purposes.
+
+If you include \cmd{makeanswers}, the option command is
+mandatory.
+If you omit it, you will get an error message the
+first time you include an exercise.
+
+\subsubsection{Using \protect\bkslsh once}\label{once}
+This option is for documents with just one section of exercises.
+It may be useful for class handouts whose answers are printed
+separately to be handed out later.
+
+It is used a little differently from the others.
+In the other options, \cmd{exercises} puts a section or
+subsection heading on each
+section of exercises and writes the appropriate heading for the
+answers to that set to the answer file. In this option,
+\cmd{exercises} does neither. You must write the title of the
+exercise section if you want one, and you must write the title
+of the answer section, putting in a page break and setting the
+page number to 1 if that is what you want. The document
+``onceexam.tex'' illustrates the use of the \cmd{once} option.
+
+% \subsubsection{Scattered exercises} I have no current plans to
+% implement \cmd{artscattered} and \cmd{bkscattered} because I
+% don't particularly like that style. I have some thoughts on it
+% for anyone who wants to try it: You could have an exercise
+% environment based on \cmd{newtheorem} (page 58 of Lamport's book
+% on \LaTeX) or you could make each exercise a subsection in book
+% style or a subsubsection in article style.
+
+\subsection{To print the answers}
+
+At the place in the document where you want the answers printed,
+put
+
+\begin{verbatim}
+\doanswers
+\end{verbatim}
+
+You can put this any place after the last
+batch of exercises.
+This will produce an unnumbered section
+titled ``Solutions'',
+followed by the solutions to the problems
+in each section. (The \cmd{once} option will not produce a
+section title, although it will print the answers.)
+When using {\tt book.sty}, the section of answers will be
+formatted as an unnumbered chapter, therefore starting on a new
+page. In {\tt article.sty},
+the answer section will not start on a new page.
+If you want it to, type
+\cmd{newpage} before \cmd{doanswers}. If you want the page
+numbers to start over, type
+
+\begin{verbatim}
+\newpage
+\setcounter{page}{1}
+\end{verbatim}
+
+You could then bind the answer section as a separate document.
+
+The command \cmd{dosolutions} prints the answers you wrote to
+exercises that are not marked as having answers. Normally, you
+would set the page counter to 1 as above
+before invoking \cmd{dosolutions}.
+This article does this, as you can see by examining the source
+code.
+
+
+\subsection{Entering the exercises}
+
+\subsubsection{The exercise header}
+A subsection with exercises begins with the command
+\cmd{exercises} and ends with \cmd{eexer}. If the subsection
+has only one exercise, you can use \cmd{exercise}.
+The word \cmd{exercises} produces a subsection in the same
+format as other subsections, headed with the word ``Exercises''.
+{\it There should be at most one exercise subsection for each
+section of the document}.
+
+\subsubsection{The exercises}
+Each exercise is preceded by the word \cmd{exer} if you are not
+going to answer it, and by \cmd{exera} if you are going to
+answer it. You can mix answered and unanswered exercises in any
+way you wish; the numbering will be correct in the answer
+section. Exercises with answers will be marked like
+this\answermark. You can change the answer mark by putting a
+command such as
+\cmd{\renewcommand\answermark{\mbox{$\mymark$}}}
+in the preamble.
+
+\subsubsection{The answers}\label{anss}
+{\bf Warning: The answers must be entered in exactly the way
+spelled out here. This aspect of {\tt ans.sty} is very
+user-unfriendly. Deviation will result in answers appearing in
+the text or part of the next problem appearing in the answer.}
+
+The answer should start immediately after the exercise without a
+blank line intervening, preceded
+by the word \cmd{answer}. You can type anything you want in the
+answer, subject to the following three
+requirements:{\bf\begin{itemize}
+\item The answer should start on the same line as the command
+\cmd{answer}.
+\item The answer should contain no
+blank lines.
+\item The answer should be followed by at least
+one blank line.
+\end{itemize}} If you want more than one
+paragraph in an answer, insert the command \cmd{par} at the end
+of each paragraph except the last.
+
+The reason for these requirements is that the program uses the
+blank line to delimit the answers (using an idea of Donald
+Knuth's).
+
+\subsubsection{Subexercises}
+
+To write an exercise with subexercises, start the exercise with
+\cmd{exer} or \cmd{exera}, and then introduce each subexercise
+with \cmd{subexer} or \cmd{subexera}. You can mix answered and
+nonanswered subexercises as you wish.
+
+If the exercise begins with a subexercise without any preceding
+text, it should begin
+``\cmd{exer}\cmd{immsubexer}'' (either may be followed by an
+``a'').
+The remaining subexercises are labeled \cmd{subexer} or
+\cmd{subexera} as before.
+The answer to a subexercise beginning with
+\cmd{immsubexer} should be labeled \cmd{immsubanswer}.
+The use of \cmd{immsubexer(a)} and \cmd{immsubanswer} keeps the
+spacing straight (although the current version, \today,
+still doesn't get
+the spacing right when the exercise has a double-digit number).
+
+I apologize for the necessity of using \cmd{immsubexer} and
+\cmd{immsubanswer}, but it seems quite complicated to create a
+version that knows whether the exercise has any beginning text
+or not.
+
+\subsubsection{Problems with special marks} To mark an exercise
+hard, type
+
+\begin{verbatim}
+\exer\annot{hard}
+\end{verbatim}
+
+In general, you can annotate a problem with any sort of remark
+in this way.
+
+\subsection{Error messages}
+If you type \cmd{exera} for an exercise but don't give it an
+answer, you will get an error message.
+Likewise if you give an
+exercise an answer but headed it with \cmd{exer}. Neither error
+stops the document from composing, and if you have given an
+exercise headed \cmd{exer} an answer, the answer will be printed
+in the correct place with the correct number, but the spacing in
+the exercise section may be wrong.
+
+If you use \cmd{exer(a)} when you should have used
+\cmd{immsubexer(a)} you will not get an error message; the
+spacing will merely be wrong.
+
+\subsection{Sample exercises}
+This section ends with a set of exercises illustrating all these
+points. The next section has a few, too, so you can see how the
+answer section handled the answers to different sections.
+
+The answers to this section were entered as illustrated below.
+If you removed the percent signs from
+in front of the exercises that are commented out and compose
+this document again, you can see how the error messages work.
+
+This example also illustrates the use of the \cmd{exhead}
+command, which allows you to insert instructions for doing the
+next several exercises.
+
+%%%RECOPY THIS!!!
+\begin{verbatim}
+
+\exercises
+\exera This the first exercise of section~\ref{seca}.
+\answer{This is the answer to the first exercise of
+section~\ref{seca}.}
+
+\exera This is the second exercise of section~\ref{seca}.
+\answer This is the answer to the second exercise of
+section~\ref{seca}.
+
+\exer This exercise has no answer.
+
+% \exera This exercise tests an error message.
+% It is marked to
+% have an answer, but does not.
+
+% \exer This exercise tests an error message too.
+% \answer This should not be here.
+
+\exhead{This header applies to Exercises~\ref{firste}
+through~\ref{laste}.}
+
+\exera\annot{hard}\label{firste} Yet another
+exercise with an answer.
+\answer This is yet another answer.
+It is longer than the
+others, and illustrates how you can
+have more than one
+paragraph.\par
+This is the second paragraph.
+
+\exer\annot{hard} This is an exercise with subexercises.
+\subexera First subexercise.
+\subanswer Answer to first subexercise.
+
+\subexer Second subexercise.
+
+\subexera Third subexercise.
+\subanswer Answer to third subexercise.
+
+\exer\label{laste}\immsubexera This
+is the first subexercise of an exercise
+that has no text before the subexercises.
+\immsubanswer This is an answer.
+
+\subexera Another subexercise.
+\subanswer Another answer.
+
+\exer\label{solans} This exercise has an answer
+in the Solution Manual.
+\solution Answer to Exercise~\ref{solans} on
+page~\pageref{solans}.
+
+\eexer
+\end{verbatim}
+
+
+
+\exercises
+\exera This the first exercise of section\ref{seca}.
+\answer{This is the answer to the first exercise of
+section~\ref{seca}.}
+
+\exera This is the second exercise of section~\ref{seca}.
+\answer This is the answer to the second exercise of
+section~\ref{seca}.
+
+\exer This exercise has no answer.
+
+% \exera This exercise tests an error message.
+% It is marked to
+% have an answer, but does not.
+
+% \exer This exercise tests an error message too.
+% \answer This should not be here.
+
+\exhead{This header applies to Exercises~\ref{firste}
+through~\ref{laste}.}
+
+\exera\annot{hard}\label{firste} Yet another
+exercise with an answer.
+\answer This is yet another answer.
+It is longer than the
+others, and illustrates how you can
+have more than one
+paragraph.\par
+This is the second paragraph.
+
+\exer\annot{hard} This is an exercise with subexercises.
+\subexera First subexercise.
+\subanswer Answer to first subexercise.
+
+\subexer Second subexercise.
+
+\subexera Third subexercise.
+\subanswer Answer to third subexercise.
+
+\exer\label{laste}\immsubexera This
+is the first subexercise of an exercise
+that has no text before the subexercises.
+\immsubanswer This is an answer.
+
+\subexera Another subexercise.
+\subanswer Another answer.
+
+\exer\label{solans} This exercise has an answer
+in the Solution Manual.
+\solution Answer to Exercise~\ref{solans} on
+page~\pageref{solans}.
+
+\eexer
+
+\section{Bugs}\label{probsec}
+
+\subsection{Answers appearing in the text\protect\\ or text appearing in
+the answers}
+If you enter an exercise and answer like this
+\begin{verbatim}
+\exera This is an exercise.
+\answer
+I did this wrong.
+\end{verbatim}
+the answer will
+appear in the text instead of in the answer section. The point
+is that the answer must start on the same line as the word
+\cmd{answer}.
+
+If you do this
+\begin{verbatim}
+\exera This is an exercise.
+\answer I did this wrong too.
+\exera This exercise will disappear.
+\answer Here is an answer.
+\end{verbatim}
+the second exercise will wind up as part of the answer to the
+first exercise, because a blank line must follow the answer.
+Reread Section~\ref{anss} carefully.
+
+
+\subsection{Spaces between carriage returns}
+Most text editors allow you to type return
+(``enter'' on some computers), one or more spaces, then return.
+\TeX\ {\it will not interpret the result as a blank line} for
+the purposes of ending answers. The file has to contain two
+returns in a row without any intervening spaces. If in your
+printout you discover than an answer has swallowed the following
+exercise (or more), this may be the reason. Blanks are inserted
+between returns by some word processors or editors, and
+sometimes (apparently) by e-mail systems.
+
+Many text editors allow you to detect blanks because the cursor
+changes shape on a blank. Your editor may allow you to search
+for the sequence carriage return, blank(s), carriage return, and
+change such sequences globally to carriage return, carriage
+return.
+
+\section{Customizing} If you look in the file {\tt
+ans.sty},
+you will discover numerous hints for customizing the file.
+
+\subsection{Headings}
+The headings put on the answer section and on the solutions
+booklet are determined by the option, \cmd{artsec},
+\cmd{bkchap}, etc. and can easily be changed.
+
+\subsection{Other style files}
+{\tt Ans.sty} will very likely work with many other style files
+besides the standard {\tt art\-icle.sty}, but of course I can't
+guarantee this. Since \cmd{exersection} uses \cmd{subsection},
+a different style file with a different definition of subsection
+will place the exercise header in the same style as the other
+subsections.
+
+\exercises
+
+\exera Prove that for any integer $n>2$ there are no nonzero
+integers $x$, $y$ and $z$ for which $x^n+y^n=z^n$.
+\answer If I knew how to do \cmd{marginpar} in \LaTeX\ I would
+have written it in the margin. But that's the way the cookie
+crumbles.
+
+\exer An exercise without an answer.
+
+\exera The very last exercise.
+\answer The very last answer.
+
+\doanswers
+
+\setpage{1}
+\dosolutions
+
+\end{document}
+
diff --git a/macros/latex209/contrib/ans/ansread.me b/macros/latex209/contrib/ans/ansread.me
new file mode 100644
index 0000000000..229d8c1eb3
--- /dev/null
+++ b/macros/latex209/contrib/ans/ansread.me
@@ -0,0 +1,4 @@
+The file ans.sty provides a mechanism for writing exercises with
+answers, with the answers being printed later in the document.
+Its use is explained in ansdoc.tex, and onceexam.tex is an
+example of using one of the options in ans.sty.
diff --git a/macros/latex209/contrib/ans/onceexam.tex b/macros/latex209/contrib/ans/onceexam.tex
new file mode 100644
index 0000000000..bcf28f9034
--- /dev/null
+++ b/macros/latex209/contrib/ans/onceexam.tex
@@ -0,0 +1,46 @@
+\documentstyle[ans]{article}
+\pagestyle{empty}
+\makeanswers\once
+\emergencystretch10pt
+
+% The following arcane code defines bkslsh to be a textmode
+% backslash. In \LaTeX, \backslash defines backslash for mathmode
+% but it doesn't look right in text mode.
+% This definition gives the right size backslash for any Computer
+% Modern size.
+{\catcode`|=0\catcode`\\=\other
+|def|bsl{{|tt\}}
+|catcode`\=0 \global\let\bkslsh=|bsl}
+
+\def\cmd#1{{\tt\bkslsh #1}}
+
+\begin{document}
+\begin{center}{\LARGE\bf Example of Class Handout}\end{center}
+
+\section*{Sample Problems}
+
+Here are some sample exercises. The answers are on
+the back of the page. (Or: The answers will be handed out
+later.)
+\medbreak
+
+\exercises
+
+\exera Prove that for any integer $n\geq 3$ there are no nonzero
+integers $x$, $y$ and $z$ for which $x^n+y^n=z^n$.
+\answer If I knew how to do \cmd{marginpar} in \LaTeX\ I would
+have written it in the margin. But that's the way the cookie
+crumbles.
+
+\exer An exercise without an answer.
+
+\exera The very last exercise.
+\answer The very last answer.
+
+\pagebreak
+\setcounter{page}{1}
+\section*{Answers to the exercises}
+\doanswers
+\end{document}
+
+
diff --git a/macros/latex209/contrib/apl/apl.readme b/macros/latex209/contrib/apl/apl.readme
new file mode 100644
index 0000000000..70eef71ab8
--- /dev/null
+++ b/macros/latex209/contrib/apl/apl.readme
@@ -0,0 +1,109 @@
+
+In Directory ``wss'' (work_spaces):
+(Things are arranged by operating system.)
+
+ apl2tex.atf
+ A workspace for APL2/32 for the IBM PC
+ saved in extended transfer form and contains the APL
+ frontend of the APL typesetting system ported to the PC.
+
+ apl2tex.atf.uue
+
+ A uuencoded version of the above workspace
+
+ apl2tex2.pduue
+
+ is a uuencoded workspace for apl.68000 Level II for the MacIntosh
+ saved in extended transfer form and contains the APL
+ frontend of the APL typesetting system ported to the MAC.
+ The MACFILE and the TOOLS workspaces distributed by MicroAPL
+ must be copied into the workspace.
+
+
+ APL2TEX.APLTF
+
+ The exended transfer form of an IBM APL2 mainframe workspace
+ for the CMS operating system. It contains the APL frontend for
+ the APL typesetting system implemented in IBM's APL2.
+
+ Caution: In order to use it with another APL interpreter
+ certain parts of the code must be adapted.
+
+ apl2tex.apltf.uue
+
+ The uuencoded version of the above file.
+
+
+In Directory ``docs'':
+
+ apl2tex.tex
+
+ The user documentation of the above workspace(s).
+ This uses latex and the style file "apl.sty", below.
+
+ uueoncms.tex
+
+ A version of the unix utility uuencode that runs on
+ CMS. UUE and UUD are used as tools to wrap and unwrap
+ binary files (such as workspaces and transfer files)
+ that are shipped via e-mail and through gateways from
+ one network to another.
+ This also uses latex and the style file "apl.sty", below.
+
+ apl.sty
+
+ The LaTeX style file needed for typesetting APL
+ characters. It is intended to contain the macro
+ definitions all APL characters used by all major
+ APL dialects.
+
+ apl_tug.tex
+
+ The LaTeX source of the paper `A LaTeX Document
+ Style Option for Typesetting APL' published in:
+ TUGboat, Vol. 11, 1990, No. 4.
+
+ tubguide.tex
+
+ The TeX source of the paper `Tugboat Authors' Guide'
+ by Ron Whitney and Barbara Beeton.
+
+ tugboat.sty
+ tugboat.com
+ Two other files needed by tubguide.tex.
+
+ apl2texw.tex
+
+ Listing of functions in the ws APL2TEX. The output
+ uses the technology. It looks great.
+
+ apl2texi.tex
+
+ Expanded listing of functions in the ws APL2TEX.
+ Includes references, protocol, syntax, static
+ function call heierarchy.
+ Related material.
+
+------------------------------------------------------------------------------
+
+The authors would appreciate receiving APL implementations of the
+APL frontend in other APL dialects and notifications concerning
+any APL symbols not already defined in the apl.sty.
+
+With best regards
+
+Andreas Geyer-Schulz
+Josef Matulka
+Gustaf Neumann
+
+--
+Andreas Geyer-Schulz
+Vienna University of Economics and Business Administration
+Augasse 2-6
+A-1090 Vienna, Austria
+
+Tel: +43 (222) 31-336 x4962
+Fax: +43 (222) 31-336 740
+
+andreas@awiwuw11.bitnet
+
diff --git a/macros/latex209/contrib/apl/apl2tex.tex b/macros/latex209/contrib/apl/apl2tex.tex
new file mode 100644
index 0000000000..6ad6196983
--- /dev/null
+++ b/macros/latex209/contrib/apl/apl2tex.tex
@@ -0,0 +1,657 @@
+%
+% F637 TEX A
+%
+\documentstyle[apl]{article}
+%
+% \input{aplbibl}
+%
+%
+% APLBIBL
+%
+% aplbibl.tex
+%
+% Andreas Geyer-Schulz V1.0 May 1990
+%
+% Purpose: collect bibliographic data which is distributed over
+% a text in a single file.
+%
+% ;APLbibentry ...... precedes a normal entry in a bibliography.
+% The entry MUST end with an empty line.
+% ;cite can be used as usual.
+%
+% ;APLbibentry;bibitem[Geyer]{geyers} Andreas Geyers,
+% 'Collecting Bibliographic Data'
+% Tech. Report 12, 1990
+%
+% ;APLbibliography ... generates the bibliography
+%
+% generated by function APLBIBL in class TEX_DOCS.
+
+\chardef\other=12
+
+\newwrite\biblio
+\immediate\openout\biblio=biblio
+\outer\def\APLbibentry{\par\medbreak\APLcopytoblankline}
+
+\def\APLcopytoblankline{\begingroup\APLsetupcopy\APLcopyans}
+
+\def\APLsetupcopy{\def\do##1{\catcode`##1=\other}\dospecials
+ \catcode`\D=\other \obeylines}
+{\obeylines \gdef\APLcopyans#1
+{\def\next{#1}%
+\ifx\next\empty\let\next=\endgroup%
+\else\immediate\write\biblio{\next} \let\next=\APLcopyans\fi\next}}
+
+\def\APLbibliography{\immediate\closeout\biblio
+ \immediate\openin5=biblio
+ \read5 to\APLtesteof
+ \if\APLtesteof\par \relax
+ \else\immediate\closein5
+ \begin{thebibliography}{99999}
+%
+% \input{biblio}
+%
+%
+% BIBLIO
+%
+%
+% end BIBLIO
+%
+ \end{thebibliography}\fi}
+
+% This is the end of aplbibl.tex
+%
+% end APLBIBL
+%
+\topmargin=1cm
+\oddsidemargin=2cm
+\evensidemargin=2cm
+\addtolength{\oddsidemargin}{-1in}
+\addtolength{\evensidemargin}{-1in}
+\addtolength{\topmargin}{-1in}
+\headheight=3mm
+\headsep=7mm
+\footheight=0mm
+\topskip=0cm
+\textwidth=17cm
+\textheight=25cm
+\title{Class\ %
+APL2TEX
+\\ of Category \\%
+OOPS - System Browser
+}
+\author{\ }%
+\markboth{Class\ %
+APL2TEX
+\ of category\ %
+OOPS - System Browser
+}{Class\ %
+APL2TEX
+\ of category\ %
+OOPS - System Browser
+}\pagestyle{myheadings}
+\begin{document}
+\maketitle
+\tableofcontents
+%
+% \input{F634}
+%
+%
+% F634
+%
+% F634
+\section{Description of Class\ %
+APL2TEX
+}
+%
+% \input{F635}
+%
+%
+% F635
+%
+% F635
+{\parindent=0pt\parsep=0pt %
+\begin{flushleft}{\bf Description}\end{flushleft}
+CLASS{\protect\APLunderbar}DESCRIPTION:
+{\APLbr} APL2TEX implements the
+{\APLbr}basic functionality needed to typeset APL
+{\APLbr}documentation with \LaTeX. The basic functionality includes
+{\APLbr}\begin{enumerate}
+{\APLbr} \item printing a workspace as a \LaTeX\
+{\APLbr}document, \item a processor for merging all
+{\APLbr}include files of a \LaTeX\ document into one large
+{\APLbr}file (convenient for e-mail \dots), \item
+{\APLbr}printing an array,
+{\APLbr} \item an array in boxed representation,
+{\APLbr} \item a function in canonical representation,
+{\APLbr} \item a function as displayed by
+{\APLbr}the del-editor, \item a function in
+{\APLbr}direct definition form, \item
+{\APLbr}an APL expression as typed in by the user (six spaces
+{\APLbr}indented), \item and one step of a dialogue (an user input
+{\APLbr}followed by the computer{\APLquote}s response).
+{\APLbr} \end{enumerate}
+{\APLbr} \par
+{\APLbr}
+{\APLbr}
+{\APLbr} The class APL2TEX can be easily converted
+{\APLbr}to APL workspace form and does not depend on the
+{\APLbr}object oriented system. APL2TEX is the version
+{\APLbr}for IBM{\APLquote}s APL2 interpreter under the CMS operating
+{\APLbr}system. \par
+{\APLbr}
+{\APLbr} You should always define a
+{\APLbr}temporary A-disk, because some of APL2TEX{
+{\APLbr}\APLquote}s functions generate synthetic file identifiers and write
+{\APLbr} files on the A-disk without checking for existing
+{\APLbr}files. Files may be overwritten.
+{\APLbr}
+{\APLbr} \vspace{2mm}
+{\APLbr}
+{\APLbr}{\bf Requirements:} \LaTeX\ and the apl.sty style file.
+{\APLbr} \par
+{\APLbr}
+{\APLbr} {\bf Warning:} This is a
+{\APLbr}testversion. No responsibility for any
+{\APLbr} damage or any other failures is taken by the author.
+{\APLbr} Use on your own risk.
+{\APLbr} \par
+{\APLbr}
+{\APLbr} {\bf Bug Reports:}
+{\APLbr}Please report bugs to Andreas Geyer-Schulz
+{\APLbr} by sending a note to \newline
+{\APLbr} APLAG AT AWIWUW11.BITNET.
+{\APLbr} \par
+{\APLbr}
+{\APLbr} \vspace{2mm}
+{\APLbr}
+{\APLbr}{Vienna, March 1991} \hfill {Andreas Geyer-Schulz} \par
+{\APLbr} \vspace{2mm}
+{\APLbr} \begin{flushleft}
+{\APLbr} Andreas Geyer-Schulz \\
+{\APLbr} Department of
+{\APLbr}Applied Computer Science \\
+{\APLbr}Vienna University of Economics and Business Administration \\
+{\APLbr} Augasse 2--6, A-1090 Vienna, AUSTRIA \\
+{\APLbr} ANDREAS{\APLat}AWIWUW11.bitnet \par
+{\APLbr} \end{flushleft}
+{\APLbr}
+{\APLbr}\vspace{2mm}
+{\APLbr}
+{\APLbr} RESPONSIBILITIES: the basic \TeX\
+{\APLbr}typesetting support. \par
+{\APLbr} ROLE: CONSULTANT
+{\APLbr}\par
+{\APLbr}
+{\APLbr} COLLABORATORS: \par
+{\APLbr} CONSULTANTS: None \par
+{\APLbr} CLIENTS:
+{\APLbr}TEX{\protect\APLunderbar}DOCS \par
+{\APLbr}
+\par}
+%
+% end F635
+%
+\section{A Short Protocol of Class\ %
+APL2TEX
+}
+%
+% \input{F636}
+%
+%
+% F636
+%
+% F636
+{\parsep=0pt\parindent=0pt
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Document
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}WS
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}fileid{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}WS {\APLless}author{\APLgreater} {\APLless}wsid{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}fileid{\APLgreater} {
+{\APLbr}\APLleftarrow} 0 PRTEX{\protect\APLunderbar}WS {\APLless}author{
+{\APLbr}\APLgreater} {\APLless}wsid{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}fileid{\APLgreater} {\APLleftarrow} 1
+{\APLbr}PRTEX{\protect\APLunderbar}WS {\APLless}author{\APLgreater} {\APLless}wsid{
+{\APLbr}\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}WS typesets all objects in the
+{\APLbr}workspace. By default the functions and variables of
+{\APLbr}APL2TEX are not included in the workspace print
+{\APLbr}out. If you want to include the functions and
+{\APLbr}variables used in the print processing, specify a left
+{\APLbr}argument of 1. {\APLless}author{\APLgreater} and {
+{\APLbr}\APLless}wsid{\APLgreater} are text vectors.
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Internal
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+{\protect\APLdelta}{\protect\APLdelta}FV
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}return code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}vector of text lines{\APLgreater}
+{\APLbr}{\protect\APLdelta}{\protect\APLdelta}FV {\APLless}file identifier{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}vector of text lines{\APLgreater} {
+{\APLbr}\APLleftarrow} {\protect\APLdelta}{\protect\APLdelta}FV {\APLless}file
+{\APLbr}identifier{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ {\protect\APLdelta}{\protect\APLdelta}FV writes a vector
+{\APLbr}of text lines to a file with variable
+{\APLbr}record length or reads a file.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+APLFNSLINE
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+APLFNSLINE {\APLless}text line{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ APLFNSLINE converts one line of APL code to a sequence of
+{\APLbr} \LaTeX\ macros.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+APLLINE
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+APLLINE {\APLless}text line{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ APLLINE typesets one line of text as a sequence of fixed
+{\APLbr} spaced \LaTeX\ macros.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+APLTOTEX
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}vector of lines{\APLgreater} {\APLleftarrow}
+{\APLbr}APLTOTEX {\APLless}line of text{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}vector of lines{\APLgreater} {\APLleftarrow} {\APLquote}F{
+{\APLbr}\APLquote} APLTOTEX {\APLless}line of text{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}vector of lines{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLquote}V{\APLquote} APLTOTEX {\APLless}line of text{
+{\APLbr}\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ APLTOTEX translates a line of text into a sequence of
+{\APLbr} \LaTeX\ macro calls. The default is variable spacing ({
+{\APLbr}\APLquote}V{\APLquote}).
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+APLTOTEX{\protect\APLunderbar}S
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}vector of lines{\APLgreater} {\APLleftarrow}
+{\APLbr}APLTOTEX{\protect\APLunderbar}S {\APLless}line of text{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}vector of lines{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLquote}F{\APLquote}
+{\APLbr}APLTOTEX{\protect\APLunderbar}S {\APLless}line of text{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}vector of lines{\APLgreater} {\APLleftarrow} {\APLquote}V{
+{\APLbr}\APLquote} APLTOTEX{\protect\APLunderbar}S {\APLless}line of text{
+{\APLbr}\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ APLTOTEX{\protect\APLunderbar}S translates a line of text
+{\APLbr}into a sequence of latex macro calls, characters
+{\APLbr}and numbers. This function should be used for
+{\APLbr}preprocessing text which is interleaved with a few APL
+{\APLbr}symbols and short APL expressions. The default is
+{\APLbr}variable spacing ({\APLquote}V{\APLquote}), for fixed spacing
+{\APLbr} use {\APLquote}F{\APLquote}.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+DISPLAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}boxed representation of array{\APLgreater} {
+{\APLbr}\APLleftarrow} DISPLAY {\APLless}array{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ DISPLAY draws a boxed diagram of any nested array.
+{\APLbr} DISPLAY is functional equivalent to IBM{\APLquote}s
+{\APLbr}version.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FIXEDSPACING
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}boxed letter{\APLgreater} {\APLleftarrow}
+{\APLbr}FIXEDSPACING {\APLless}letter{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FIXEDSPACING boxes each letter in order to simulate equal
+{\APLbr} spaced typing.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FNSFMT
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}vector representation{\APLgreater} {
+{\APLbr}\APLleftarrow} FNSFMT {\APLless}canonical representation{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FNSFMT translates the canonical function representation to
+{\APLbr} the vector representation of the function.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FNSLIST
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}filename{\APLgreater} FNSLIST {\APLless}object
+{\APLbr}name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FNSLIST formats a subsection header and the code to input
+{\APLbr} the file which contains a \LaTeX\ macro stream
+{\APLbr}which typesets the APL code of the APL object.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FOLD
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}folded text matrix{\APLgreater} {\APLleftarrow}
+{\APLbr}FOLD {\APLless}text matrix{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FOLD mimicks APL2s formatting algorithm for arrays.
+{\APLbr} The matrix is cut in columns and the columns are printed
+{\APLbr} one after the other. Broad tables can thus
+{\APLbr} be restored by cut and paste.
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Internal Local Adaption
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+BEGIN{\protect\APLunderbar}ARRAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}start of array macro sequence{\APLgreater} {
+{\APLbr}\APLleftarrow} BEGIN{\protect\APLunderbar}ARRAY
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ BEGIN{\protect\APLunderbar}ARRAY defines the \LaTeX\
+{\APLbr}macros which precede an APL array.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+END{\protect\APLunderbar}ARRAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}end of array macro sequence{\APLgreater} {
+{\APLbr}\APLleftarrow} END{\protect\APLunderbar}ARRAY
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ END{\protect\APLunderbar}ARRAY defines the \LaTeX\ macros
+{\APLbr}which precede an APL array.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+LOCAL{\protect\APLunderbar}PAGE
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}latex macros defining the size of a local page{
+{\APLbr}\APLgreater} {\APLleftarrow} LOCAL{\protect\APLunderbar}PAGE
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ LOCAL{\protect\APLunderbar}PAGE defines the size of a
+{\APLbr}page. All relevant changes are made here.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRINTING{\protect\APLunderbar}WIDTH
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}integer{\APLgreater} {\APLleftarrow}
+{\APLbr}PRINTING{\protect\APLunderbar}WIDTH
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRINTING{\protect\APLunderbar}WIDTH sets the number of
+{\APLbr}characters per screen line. This value has to
+{\APLbr}be set to the maximal numbers of characters per
+{\APLbr}printed line.
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Internal Translation Table
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+TEXM
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}translation table{\APLgreater}{\APLleftarrow}TEXM
+{\APLbr}{\APLquote}{\APLquote}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ TEXM generates a translation table which maps
+{\APLbr}EACH symbol of the atomic vector to a \LaTeX\ macro
+{\APLbr}name.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+TEXM{\protect\APLunderbar}S
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}translation table{\APLgreater}{
+{\APLbr}\APLleftarrow}TEXM{\protect\APLunderbar}S {\APLquote}{\APLquote}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ TEXM{\protect\APLunderbar}S generates a translation table
+{\APLbr} which maps symbols of the atomic vector to
+{\APLbr}a \LaTeX\ macro name. All standard characters are NOT
+{\APLbr} mapped (lowercase alphabet, uppercase alphabet,
+{\APLbr}numbers).
+{\APLbr}
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Internal Utility
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FLAT
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}return code{\APLgreater} {\APLleftarrow} FLAT {
+{\APLbr}\APLless}in file name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FLAT implements the recursive scan of the \TeX\ files.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+TO{\protect\APLunderbar}APL
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}vector of lines{\APLgreater} {\APLleftarrow}
+{\APLbr}TO{\protect\APLunderbar}APL {\APLless}vector of lines{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ TO{\protect\APLunderbar}APL translates a vector of tex
+{\APLbr}lines to a vector of APL lines.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+TOUPPER
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}upper case string{\APLgreater} {\APLleftarrow}
+{\APLbr}TOUPPER {\APLless}lower case string{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ TOUPPER translates lower case to upper case and passes all
+{\APLbr} other characters.
+{\APLbr}
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Logical Document Element
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}ARRAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}ARRAY {\APLless}variable name{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}return code{\APLgreater} {\APLleftarrow}
+{\APLbr}{\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}ARRAY {\APLless}variable name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}ARRAY prints the \LaTeX\ code
+{\APLbr}of {\APLless}variable{\APLgreater} to a file named
+{\APLbr} by the CMS file name {\APLless}filename{\APLgreater}. {
+{\APLbr}\APLless}variable{\APLgreater} is printed as
+{\APLbr}displayed by the APL2 function {\APLuptackjot}. {\APLless}file name{
+{\APLbr}\APLgreater} and {\APLless}variable name{\APLgreater}
+{\APLbr}are text vectors.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}BOXEDARRAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}BOXEDARRAY {\APLless}variable name{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}BOXEDARRAY {\APLless}variable name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}BOXEDARRAY
+{\APLbr} prints the \LaTeX\ code of {\APLless}variable{
+{\APLbr}\APLgreater} to a file named by the CMS file name {
+{\APLbr}\APLless}filename{\APLgreater}. {\APLless}variable{\APLgreater} is
+{\APLbr}printed in boxed representation as displayed by the
+{\APLbr}APL2 function DISPLAY. {\APLless}file name{\APLgreater}
+{\APLbr}and {\APLless}variable name{\APLgreater} are text vectors.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}DIALOG
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}DIALOG {\APLless}APL expression{\APLgreater}
+{\APLbr}{\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}DIALOG {\APLless}APL expression{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}DIALOG simulates and prints one
+{\APLbr}interaction of user and computer. The right
+{\APLbr}argument of PRTEX{\protect\APLunderbar}DIALOG is a text
+{\APLbr}string containing the APL expression normally typed in
+{\APLbr}by the user. User input is printed in bold face, six
+{\APLbr}spaces indented with proportional spacing. The
+{\APLbr}response of the APL interpreter (if any) is printed
+{\APLbr}with fixed spacing thus simulating a
+{\APLbr}traditional type writer.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}EXPR
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}EXPR {\APLless}APL expression{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}return code{\APLgreater} {\APLleftarrow}
+{\APLbr}{\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}EXPR {\APLless}APL expression{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}EXPR takes a text string as
+{\APLbr}right argument which is typeset as an APL expression typed
+{\APLbr}in by the user: six spaces indented and bold face.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}FN
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}file name{\APLgreater} PRTEX{\protect\APLunderbar}FN {
+{\APLbr}\APLless}function name{\APLgreater} {\APLstile} {\APLless}LaTeX code{
+{\APLbr}\APLgreater} {\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}FN {\APLless}operator name{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}FN {\APLless}function name{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}return code{\APLgreater} {\APLleftarrow} {\APLless}file
+{\APLbr}name{\APLgreater} PRTEX{\protect\APLunderbar}FN {
+{\APLbr}\APLless}operator name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}FN prints the \LaTeX\ code of
+{\APLbr}the del-editor representation of a {\APLless}function{
+{\APLbr}\APLgreater} or an {\APLless}operator{\APLgreater} to a file
+{\APLbr}named by the CMS file name {\APLless}filename{
+{\APLbr}\APLgreater}.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}FNCR
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}FNCR {\APLless}function name{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}FNCR {\APLless}operator name{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}FNCR {\APLless}function name{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}return code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}file name{\APLgreater} PRTEX{\protect\APLunderbar}FNCR {
+{\APLbr}\APLless}operator name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}FNCR prints the \LaTeX\ code of
+{\APLbr}the canonical representation of a {
+{\APLbr}\APLless}function{\APLgreater} or an {\APLless}operator{\APLgreater} to a
+{\APLbr}file named by the CMS file name {\APLless}filename{
+{\APLbr}\APLgreater}.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}FNDD
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}FNDD {\APLless}direct definition{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}filename{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}FNDD {\APLless}direct definition{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}FNDD prints the \LaTeX\ code of
+{\APLbr}the {\APLless}direct definition{\APLgreater} of a {
+{\APLbr}\APLless}function{\APLgreater} or {\APLless}operator{
+{\APLbr}\APLgreater} to a file named by the CMS file name {
+{\APLbr}\APLless}filename{\APLgreater}. The direct definition must be a
+{\APLbr}character vector.
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Utility
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FILE{\protect\APLunderbar}TO{\protect\APLunderbar}APL
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}returncode{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}fileid in{\APLgreater}
+{\APLbr}FILE{\protect\APLunderbar}TO{\protect\APLunderbar}APL {\APLless}fileid out{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FILE{\protect\APLunderbar}TO{\protect\APLunderbar}APL
+{\APLbr}converts the text of a cms file named {\APLless}fileID in{
+{\APLbr}\APLgreater} from TEX macros to APL2 symbols and writes the new
+{\APLbr}text to cms file named {\APLless}fileID out{
+{\APLbr}\APLgreater}.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FLATTEN
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}return code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}fileid out{\APLgreater} FLATTEN {\APLless}file name in{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} FLATTEN {\APLless}file name in{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FLATTEN recursively collects all small and scattered
+{\APLbr} \TeX\ files and writes one large file.
+{\APLbr}
+\end{minipage}\par
+\end{footnotesize}
+\par}
+%
+% end F636
+%
+%
+% end F634
+%
+\APLbibliography
+\end{document}
+%
+% end F637 TEX A
+%
+
diff --git a/macros/latex209/contrib/apl/apl2texi.tex b/macros/latex209/contrib/apl/apl2texi.tex
new file mode 100644
index 0000000000..145d9ab789
--- /dev/null
+++ b/macros/latex209/contrib/apl/apl2texi.tex
@@ -0,0 +1,5882 @@
+%
+% F786 TEX A
+%
+\documentstyle[apl]{article}
+%
+% \input{aplbibl}
+%
+%
+% APLBIBL
+%
+% aplbibl.tex
+%
+% Andreas Geyer-Schulz V1.0 May 1990
+%
+% Purpose: collect bibliographic data which is distributed over
+% a text in a single file.
+%
+% ;APLbibentry ...... precedes a normal entry in a bibliography.
+% The entry MUST end with an empty line.
+% ;cite can be used as usual.
+%
+% ;APLbibentry;bibitem[Geyer]{geyers} Andreas Geyers,
+% 'Collecting Bibliographic Data'
+% Tech. Report 12, 1990
+%
+% ;APLbibliography ... generates the bibliography
+%
+% generated by function APLBIBL in class TEX_DOCS.
+
+\chardef\other=12
+
+\newwrite\biblio
+\immediate\openout\biblio=biblio
+\outer\def\APLbibentry{\par\medbreak\APLcopytoblankline}
+
+\def\APLcopytoblankline{\begingroup\APLsetupcopy\APLcopyans}
+
+\def\APLsetupcopy{\def\do##1{\catcode`##1=\other}\dospecials
+ \catcode`\D=\other \obeylines}
+{\obeylines \gdef\APLcopyans#1
+{\def\next{#1}%
+\ifx\next\empty\let\next=\endgroup%
+\else\immediate\write\biblio{\next} \let\next=\APLcopyans\fi\next}}
+
+\def\APLbibliography{\immediate\closeout\biblio
+ \immediate\openin5=biblio
+ \read5 to\APLtesteof
+ \if\APLtesteof\par \relax
+ \else\immediate\closein5
+ \begin{thebibliography}{99999}
+%
+ \input{biblio}
+%
+%
+% BIBLIO
+%
+%
+% end BIBLIO
+%
+ \end{thebibliography}\fi}
+
+% This is the end of aplbibl.tex
+%
+% end APLBIBL
+%
+\topmargin=1cm
+\oddsidemargin=2cm
+\evensidemargin=2cm
+\addtolength{\oddsidemargin}{-1in}
+\addtolength{\evensidemargin}{-1in}
+\addtolength{\topmargin}{-1in}
+\headheight=3mm
+\headsep=7mm
+\footheight=0mm
+\topskip=0cm
+\textwidth=17cm
+\textheight=25cm
+\title{Class\ %
+APL2TEX
+\\ of Category \\%
+OOPS - System Browser
+}
+\author{\ }%
+\markboth{Class\ %
+APL2TEX
+\ of category\ %
+OOPS - System Browser
+}{Class\ %
+APL2TEX
+\ of category\ %
+OOPS - System Browser
+}\pagestyle{myheadings}
+\begin{document}
+\maketitle
+\tableofcontents
+%
+% \input{F634}
+%
+%
+% F634
+%
+% F634
+\section{Description of Class\ %
+APL2TEX
+}
+%
+% \input{F635}
+%
+%
+% F635
+%
+% F635
+{\parindent=0pt\parsep=0pt %
+Class {\bf %
+APL2TEX
+} of category {\em %
+OOPS - System Browser
+}\par\vspace{2mm}
+\begin{flushleft}{\bf Object Identifiers}\end{flushleft}
+\begin{center}
+OBJECT{\protect\APLunderbar}NAME{\APLleftarrow}{
+{\APLbr}\APLquote}APL2TEX{\APLquote}
+\end{center}
+\begin{center}
+OBJECT{\protect\APLunderbar}TYPE{\APLleftarrow}{
+{\APLbr}\APLquote}CLASS{\APLquote}
+\end{center}
+\begin{flushleft}{\bf Description}\end{flushleft}
+CLASS{\protect\APLunderbar}DESCRIPTION:
+{\APLbr} APL2TEX implements the
+{\APLbr}basic functionality needed to typeset APL
+{\APLbr}documentation with \LaTeX. The basic functionality includes
+{\APLbr}\begin{enumerate}
+{\APLbr} \item printing a workspace as a \LaTeX\
+{\APLbr}document, \item a processor for merging all
+{\APLbr}include files of a \LaTeX\ document into one large
+{\APLbr}file (convenient for e-mail \dots), \item
+{\APLbr}printing an array,
+{\APLbr} \item an array in boxed representation,
+{\APLbr} \item a function in canonical representation,
+{\APLbr} \item a function as displayed by
+{\APLbr}the del-editor, \item a function in
+{\APLbr}direct definition form, \item
+{\APLbr}an APL expression as typed in by the user (six spaces
+{\APLbr}indented), \item and one step of a dialogue (an user input
+{\APLbr}followed by the computer{\APLquote}s response).
+{\APLbr} \end{enumerate}
+{\APLbr} \par
+{\APLbr}
+{\APLbr}
+{\APLbr} The class APL2TEX can be easily converted
+{\APLbr}to APL workspace form and does not depend on the
+{\APLbr}object oriented system. APL2TEX is the version
+{\APLbr}for IBM{\APLquote}s APL2 interpreter under the CMS operating
+{\APLbr}system. \par
+{\APLbr}
+{\APLbr} You should always define a
+{\APLbr}temporary A-disk, because some of APL2TEX{
+{\APLbr}\APLquote}s functions generate synthetic file identifiers and write
+{\APLbr} files on the A-disk without checking for existing
+{\APLbr}files. Files may be overwritten.
+{\APLbr}
+{\APLbr} \vspace{2mm}
+{\APLbr}
+{\APLbr}{\bf Requirements:} \LaTeX\ and the apl.sty style file.
+{\APLbr} \par
+{\APLbr}
+{\APLbr} {\bf Warning:} This is a
+{\APLbr}testversion. No responsibility for any
+{\APLbr} damage or any other failures is taken by the author.
+{\APLbr} Use on your own risk.
+{\APLbr} \par
+{\APLbr}
+{\APLbr} {\bf Bug Reports:}
+{\APLbr}Please report bugs to Andreas Geyer-Schulz
+{\APLbr} by sending a note to \newline
+{\APLbr} APLAG AT AWIWUW11.BITNET.
+{\APLbr} \par
+{\APLbr}
+{\APLbr} \vspace{2mm}
+{\APLbr}
+{\APLbr}{Vienna, March 1991} \hfill {Andreas Geyer-Schulz} \par
+{\APLbr} \vspace{2mm}
+{\APLbr} \begin{flushleft}
+{\APLbr} Andreas Geyer-Schulz \\
+{\APLbr} Department of
+{\APLbr}Applied Computer Science \\
+{\APLbr}Vienna University of Economics and Business Administration \\
+{\APLbr} Augasse 2--6, A-1090 Vienna, AUSTRIA \\
+{\APLbr} ANDREAS{\APLat}AWIWUW11.bitnet \par
+{\APLbr} \end{flushleft}
+{\APLbr}
+{\APLbr}\vspace{2mm}
+{\APLbr}
+{\APLbr} RESPONSIBILITIES: the basic \TeX\
+{\APLbr}typesetting support. \par
+{\APLbr} ROLE: CONSULTANT
+{\APLbr}\par
+{\APLbr}
+{\APLbr} COLLABORATORS: \par
+{\APLbr} CONSULTANTS: None \par
+{\APLbr} CLIENTS:
+{\APLbr}TEX{\protect\APLunderbar}DOCS \par
+{\APLbr}
+\par\vspace{2mm}\begin{flushleft}{\bf Inheritance}\end{flushleft}
+\begin{center}
+SUPERCLASS{\APLleftarrow}0{\APLrho}{\APLleftshoe}1{\APLrho}{
+{\APLbr}\APLquote} {\APLquote}
+\end{center}
+\begin{center}
+MIXIN{\APLleftarrow}0{\APLrho}{\APLleftshoe}1{\APLrho}{
+{\APLbr}\APLquote} {\APLquote}
+\end{center}
+\par}
+%
+% end F635
+%
+\section{The Names in Class\ %
+APL2TEX
+}
+\subsection{The Name Table of Class\ %
+APL2TEX
+}
+%
+% \input{F636}
+%
+%
+% F636
+%
+% F636
+{\parsep=0pt\parindent=0pt
+\begin{flushleft}{\bf Properties}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLN\APLo\APLspace\APLp\APLr\APLo\APLp\APLe\APLr\APLt\APLi
+\APLe\APLs\APLspace\APLa\APLr\APLe\APLspace\APLd\APLe\APLf\APLi
+\APLn\APLe\APLd\APLdot
+\end{it}\end{footnotesize}\par
+\begin{flushleft}{\bf Protocol}{\em\ %
+Document
+}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLW
+\APLS\APLspace
+\end{it}\end{footnotesize}\par
+\begin{flushleft}{\bf Protocol}{\em\ %
+Internal
+}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\protect\APLdelta\protect\APLdelta\APLF\APLV
+\APLspace\APLA\APLP\APLL\APLF\APLN\APLS\APLL\APLI\APLN\APLE\APLspace
+\APLA\APLP\APLL\APLL\APLI\APLN\APLE\APLspace\APLA\APLP\APLL
+\APLT\APLO\APLT\APLE\APLX\APLspace\APLA\APLP\APLL\APLT\APLO\APLT
+\APLE\APLX\protect\APLunderbar\APLS\APLspace\APLD\APLI\APLS\APLP
+\APLL\APLA\APLY\APLspace\APLF\APLI\APLX\APLE\APLD\APLS\APLP
+\APLA\APLC\APLI\APLN\APLG\APLspace\APLF\APLN\APLS\APLF\APLM\APLT
+\APLspace\APLF\APLN\APLS\APLL\APLI\APLS\APLT\APLspace\APLF\APLO
+\APLL\APLD\APLspace
+\end{it}\end{footnotesize}\par
+\begin{flushleft}{\bf Protocol}{\em\ %
+Internal Local Adaption
+}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\APLB\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY\APLspace\APLE\APLN\APLD\protect
+\APLunderbar\APLA\APLR\APLR\APLA\APLY\APLspace\APLL\APLO\APLC\APLA\APLL
+\protect\APLunderbar\APLP\APLA\APLG\APLE\APLspace\APLP\APLR\APLI
+\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar\APLW\APLI\APLD
+\APLT\APLH\APLspace
+\end{it}\end{footnotesize}\par
+\begin{flushleft}{\bf Protocol}{\em\ %
+Internal Translation Table
+}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\APLT\APLE\APLX\APLM\APLspace\APLT\APLE\APLX\APLM
+\protect\APLunderbar\APLS\APLspace
+\end{it}\end{footnotesize}\par
+\begin{flushleft}{\bf Protocol}{\em\ %
+Internal Utility
+}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\APLF\APLL\APLA\APLT\APLspace\APLT\APLO\protect
+\APLunderbar\APLA\APLP\APLL\APLspace\APLT\APLO\APLU\APLP\APLP\APLE
+\APLR\APLspace
+\end{it}\end{footnotesize}\par
+\begin{flushleft}{\bf Protocol}{\em\ %
+Logical Document Element
+}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY\APLspace\APLP\APLR\APLT\APLE\APLX\protect
+\APLunderbar\APLB\APLO\APLX\APLE\APLD\APLA\APLR\APLR\APLA\APLbr
+\APLY\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar
+\APLD\APLI\APLA\APLL\APLO\APLG\APLspace\APLP\APLR\APLT\APLE\APLX
+\protect\APLunderbar\APLE\APLX\APLP\APLR\APLspace\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLspace\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLC\APLR\APLspace
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLD
+\APLD\APLspace
+\end{it}\end{footnotesize}\par
+\begin{flushleft}{\bf Protocol}{\em\ %
+Utility
+}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\APLF\APLI\APLL\APLE\protect\APLunderbar\APLT\APLO
+\protect\APLunderbar\APLA\APLP\APLL\APLspace\APLF\APLL\APLA
+\APLT\APLT\APLE\APLN\APLspace
+\end{it}\end{footnotesize}\par
+\par}
+%
+% end F636
+%
+\subsection{The Encapsulated Environment of Class\ %
+APL2TEX
+}
+%
+% \input{F637}
+%
+%
+% F637
+%
+% F637
+{\parsep=0pt\parindent=0pt
+The name list depends on the semantic of the object - oriented
+interpreter.\par\vspace{2mm}
+\begin{flushleft}{\bf Labels}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\protect\APLdelta\APLS\APLT\APLA\APLT\APLE\APLM
+\APLE\APLN\APLT\APLspace\APLB\APLA\APLS\APLE\protect\APLunderbar
+\APLC\APLL\APLA\APLS\APLS\APLspace\APLC\APLO\APLN\APLT\APLspace
+\APLD\APLY\APLA\APLD\APLI\APLC\protect\APLunderbar\APLE\APLX
+\APLE\APLC\APLspace\APLE\APLN\APLD\APLspace\APLL\APLO\APLO\APLP
+\APLspace\APLM\APLO\APLN\APLA\APLD\APLI\APLC\APLspace\APLM\APLO
+\APLN\APLA\APLD\APLI\APLC\protect\APLunderbar\APLE\APLX\APLE
+\APLC\APLspace\APLN\APLI\APLL\APLA\APLD\APLI\APLC\APLspace\APLN
+\APLO\protect\APLunderbar\APLC\APLL\APLA\APLS\APLS\protect
+\APLunderbar\APLD\APLE\APLS\APLC\APLspace\APLN\APLO\protect
+\APLunderbar\APLE\APLN\APLV\APLI\APLR\APLO\APLN\APLM\APLE\APLN\APLT
+\APLspace\APLN\APLO\protect\APLunderbar\APLI\APLN\APLH\APLE\APLR
+\APLI\APLT\APLA\APLN\APLC\APLE\APLspace\APLN\APLO\protect
+\APLunderbar\APLM\APLA\APLN\APLU\APLA\APLL\APLspace\APLN\APLO\protect
+\APLunderbar\APLN\APLA\APLM\APLE\APLT\APLA\APLB\APLL\APLE
+\APLspace\APLN\APLO\protect\APLunderbar\APLP\APLR\APLO\APLT\APLO
+\APLC\APLO\APLL\APLspace\APLP\APLR\APLI\APLN\APLT\APLspace\APLS
+\APLK\APLI\APLP\APLspace\APLS\APLT\APLO\APLP\APLspace\APLT\APLH
+\APLE\protect\APLunderbar\APLE\APLN\APLD\APLspace\APLT\APLH
+\APLE\protect\APLunderbar\APLE\APLN\APLV\APLI\APLR\APLO\APLN\APLM
+\APLE\APLN\APLT\APLspace\APLT\APLH\APLE\protect\APLunderbar
+\APLI\APLN\APLH\APLE\APLR\APLI\APLT\APLA\APLN\APLC\APLE\APLspace
+\APLT\APLH\APLE\protect\APLunderbar\APLM\APLA\APLN\APLU\APLA
+\APLL\APLspace\APLT\APLH\APLE\protect\APLunderbar\APLN\APLA\APLM
+\APLE\APLS\APLspace\APLT\APLH\APLE\protect\APLunderbar\APLP\APLR
+\APLO\APLT\APLO\APLC\APLO\APLL\APLspace
+\end{it}\end{footnotesize}
+\begin{flushleft}{\bf Variables}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\protect\APLdelta\APLuV\APLuE\APLuR\APLuB\APLuO
+\APLuS\APLuE\APLspace\protect\APLdelta\APLE\APLN\APLV\APLI\APLR
+\APLO\APLN\APLM\APLE\APLN\APLT\APLspace\protect\APLdelta\APLI
+\APLT\APLspace\protect\APLdelta\APLM\APLE\APLM\APLO\APLspace
+\protect\APLdelta\APLM\APLE\APLM\APLO\APLR\APLY\APLspace\protect
+\APLdelta\APLM\APLS\APLG\APLspace\protect\APLdelta\APLN\APLT
+\APLspace\protect\APLdelta\APLZ\APLspace
+\end{it}\end{footnotesize}
+\begin{flushleft}{\bf Functions}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\protect\APLdelta\protect\APLdelta\APLF\APLV
+\APLspace\protect\APLdelta\APLA\APLC\APLT\APLI\APLV\APLspace\protect
+\APLdelta\APLB\APLU\APLI\APLL\APLD\protect\APLunderbar\APLC
+\APLL\APLO\APLS\APLU\APLR\APLE\APLspace\protect\APLdelta\APLB\APLU
+\APLI\APLL\APLD\protect\APLunderbar\APLN\APLA\APLM\APLE\APLT
+\APLA\APLB\APLL\APLbr\APLE\APLspace\protect\APLdelta\APLE\APLX
+\APLE\APLC\APLspace\protect\APLdelta\APLE\APLX\APLE\APLC\APLU
+\APLT\APLE\protect\APLunderbar\APLC\APLL\APLO\APLS\APLU\APLR
+\APLbr\APLE\APLspace\protect\APLdelta\APLF\APLR\APLE\APLE\APLZ\APLE
+\APLspace\protect\APLdelta\APLT\APLR\APLE\APLE\APLspace
+\protect\APLdelta\APLU\APLN\APLF\APLR\APLE\APLE\APLZ\APLE\APLspace
+\APLA\APLC\APLT\APLI\APLV\APLA\APLT\APLE\protect\APLunderbar\APLC
+\APLL\APLA\APLS\APLS\APLspace\APLA\APLD\APLD\protect
+\APLunderbar\APLC\APLL\APLA\APLS\APLS\APLspace\APLA\APLP\APLL\APLF\APLN
+\APLS\APLL\APLI\APLN\APLE\APLspace\APLA\APLP\APLL\APLL\APLI
+\APLN\APLE\APLspace\APLA\APLP\APLL\APLT\APLO\APLT\APLE\APLX
+\APLspace\APLA\APLP\APLL\APLT\APLO\APLT\APLE\APLX\protect\APLunderbar
+\APLS\APLspace\APLB\APLE\APLG\APLI\APLN\protect\APLunderbar
+\APLA\APLR\APLR\APLA\APLY\APLspace\APLC\APLD\APLspace\APLC\APLL
+\APLA\APLS\APLS\APLspace\APLC\APLL\APLA\APLS\APLS\APLE\APLS
+\APLspace\APLD\APLE\APLA\APLC\APLT\APLI\APLV\APLA\APLT\APLE\protect
+\APLunderbar\APLC\APLL\APLA\APLS\APLbr\APLS\APLspace\APLD\APLE
+\APLL\protect\APLunderbar\APLM\APLE\APLM\APLspace\APLD\APLE
+\APLL\APLE\APLT\APLE\protect\APLunderbar\APLC\APLL\APLA\APLS\APLS
+\APLspace\APLD\APLR\APLO\APLP\protect\APLunderbar\APLP\APLR
+\APLO\APLP\APLE\APLR\APLT\APLY\APLspace\APLD\APLU\APLM\APLP
+\protect\APLunderbar\APLC\APLL\APLA\APLS\APLS\APLspace\APLD\APLU
+\APLM\APLP\protect\APLunderbar\APLC\APLL\APLA\APLS\APLS\APLE\APLS
+\APLspace\APLD\APLU\APLM\APLP\protect\APLunderbar\APLI\APLM
+\APLA\APLG\APLE\APLspace\APLE\APLL\APLZ\APLM\APLspace\APLE\APLN
+\APLD\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY\APLspace\APLE
+\APLN\APLV\APLI\APLR\APLO\APLN\APLM\APLE\APLN\APLT\protect
+\APLunderbar\APLA\APLP\APLL\APLspace\APLE\APLR\APLA\APLS\APLE
+\protect\APLunderbar\APLC\APLL\APLA\APLS\APLS\APLspace\APLF\APLI
+\APLL\APLE\protect\APLunderbar\APLT\APLO\protect\APLunderbar\APLA
+\APLP\APLL\APLspace\APLF\APLI\APLN\APLD\protect\APLunderbar
+\APLP\APLR\APLO\APLP\APLE\APLR\APLT\APLY\APLspace\APLF\APLI\APLX
+\APLE\APLD\APLS\APLP\APLA\APLC\APLI\APLN\APLG\APLspace\APLF\APLL
+\APLA\APLT\APLspace\APLF\APLL\APLA\APLT\APLT\APLE\APLN
+\APLspace\APLF\APLN\APLS\APLF\APLM\APLT\APLspace\APLF\APLN\APLS\APLL
+\APLI\APLS\APLT\APLspace\APLF\APLO\APLL\APLD\APLspace\APLG\APLE
+\APLT\protect\APLunderbar\APLM\APLE\APLM\APLspace\APLG\APLE
+\APLT\protect\APLunderbar\APLP\APLR\APLO\APLP\APLspace\APLG\APLE
+\APLT\protect\APLunderbar\APLP\APLR\APLO\APLP\APLE\APLR\APLT
+\APLY\APLspace\APLI\APLP\APLL\APLspace\APLL\APLI\APLS\APLT\protect
+\APLunderbar\APLM\APLE\APLM\APLspace\APLL\APLI\APLS\APLT
+\protect\APLunderbar\APLP\APLR\APLO\APLP\APLE\APLR\APLT\APLY
+\APLspace\APLL\APLO\APLA\APLD\protect\APLunderbar\APLC\APLL\APLA\APLS
+\APLS\APLspace\APLL\APLO\APLA\APLD\protect\APLunderbar\APLC
+\APLL\APLA\APLS\APLS\APLE\APLS\APLspace\APLL\APLO\APLA\APLD
+\protect\APLunderbar\APLI\APLM\APLA\APLG\APLE\APLspace\APLL\APLO\APLC
+\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG\APLE\APLspace
+\APLM\APLA\APLK\APLE\protect\APLunderbar\APLO\APLB\APLJ\APLE\APLC
+\APLT\APLspace\APLM\APLA\APLT\APLR\APLI\APLX\APLspace\APLO
+\APLB\APLJ\APLE\APLC\APLT\APLspace\APLP\APLR\APLI\APLN\APLT\APLI
+\APLN\APLG\protect\APLunderbar\APLW\APLI\APLD\APLT\APLH\APLspace
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar
+\APLB\APLO\APLX\APLE\APLD\APLA\APLR\APLR\APLA\APLbr\APLY
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLD\APLI
+\APLA\APLL\APLO\APLG\APLspace\APLP\APLR\APLT\APLE\APLX\protect
+\APLunderbar\APLE\APLX\APLP\APLR\APLspace\APLP\APLR\APLT\APLE\APLX
+\protect\APLunderbar\APLF\APLN\APLspace\APLP\APLR\APLT\APLE
+\APLX\protect\APLunderbar\APLF\APLN\APLC\APLR\APLspace\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLD\APLD
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLW\APLS
+\APLspace\APLP\APLU\APLT\protect\APLunderbar\APLM\APLE\APLM\APLspace
+\APLP\APLU\APLT\protect\APLunderbar\APLP\APLR\APLO\APLP\APLE
+\APLR\APLT\APLY\APLspace\APLS\APLE\APLN\APLD\APLspace\APLS\APLP
+\APLA\APLW\APLN\APLspace\APLS\APLY\APLS\APLT\APLE\APLM\APLspace
+\APLT\APLE\APLX\APLM\APLspace\APLT\APLE\APLX\APLM\protect
+\APLunderbar\APLS\APLspace\APLT\APLO\protect\APLunderbar\APLA\APLP
+\APLL\APLspace\APLT\APLO\APLU\APLC\APLH\APLspace\APLT\APLO\APLU
+\APLP\APLP\APLE\APLR\APLspace
+\end{it}\end{footnotesize}
+\begin{flushleft}{\bf Operators}\end{flushleft}%
+\begin{footnotesize}\begin{it}
+\APLspace\APLM\APLE\APLM\APLO\APLspace
+\end{it}\end{footnotesize}
+\par}
+%
+% end F637
+%
+\subsection{The Inherited Environment of Class\ %
+APL2TEX
+}
+%
+% \input{F638}
+%
+%
+% F638
+%
+% F638
+{\parsep=0pt\parindent=0pt
+The signature is the set of all variables and functions which
+form the class. The signature is constructed by
+following the inheritance chain up and adding all members
+of the superclass which are not in the class. A linearizing
+algorithm takes care of multiple inheritance and mixins.
+\par\vspace{2mm}
+\begin{footnotesize}\begin{it}\begin{enumerate}%
+\item %
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLC
+\APLl\APLa\APLs\APLs\APLspace\APLA\APLP\APLL\APLtwo\APLT\APLE
+\APLX\APLcolon\APLspace\APLA\APLP\APLL\APLF\APLN\APLS\APLL\APLI
+\APLN\APLE\APLspace\APLA\APLP\APLL\APLL\APLI\APLN\APLE\APLspace
+\APLA\APLP\APLL\APLT\APLO\APLT\APLE\APLX\APLspace\APLF\APLI
+\APLX\APLE\APLD\APLS\APLP\APLA\APLC\APLI\APLN\APLG\APLspace\APLF
+\APLN\APLS\APLF\APLM\APLT\APLspace\APLF\APLN\APLS\APLL\APLI
+\APLS\APLT\APLspace\APLF\APLO\APLL\APLD\APLspace\APLT\APLE\APLX
+\APLM\APLspace\APLF\APLI\APLL\APLE\protect\APLunderbar\APLT\APLO
+\protect\APLunderbar\APLA\APLP\APLL\APLspace\APLT\APLO\protect
+\APLunderbar\APLA\APLP\APLL\APLspace\APLT\APLE\APLX\APLM
+\protect\APLunderbar\APLS\APLspace\APLA\APLP\APLL\APLT\APLO\APLT\APLE
+\APLX\protect\APLunderbar\APLS\APLspace\APLF\APLL\APLA\APLT
+\APLT\APLE\APLN\APLspace\APLF\APLL\APLA\APLT\APLspace\APLP\APLR
+\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar\APLW\APLI
+\APLD\APLT\APLH\APLspace\APLB\APLE\APLG\APLI\APLN\protect
+\APLunderbar\APLA\APLR\APLR\APLA\APLY\APLspace\APLE\APLN\APLD\protect
+\APLunderbar\APLA\APLR\APLR\APLA\APLY\APLspace\APLL\APLO\APLC
+\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG\APLE\APLspace\APLD
+\APLI\APLS\APLP\APLL\APLA\APLY\APLspace\APLP\APLR\APLT\APLE
+\APLX\protect\APLunderbar\APLW\APLS\APLspace\APLP\APLR\APLT\APLE
+\APLX\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY\APLspace\APLP
+\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLC\APLR
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLD\APLI
+\APLA\APLL\APLO\APLG\APLspace\APLP\APLR\APLT\APLE\APLX\protect
+\APLunderbar\APLB\APLO\APLX\APLE\APLD\APLA\APLR\APLR\APLA
+\APLbr\APLY\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar
+\APLE\APLX\APLP\APLR\APLspace\APLP\APLR\APLT\APLE\APLX\protect
+\APLunderbar\APLF\APLN\APLspace\APLP\APLR\APLT\APLE\APLX\protect
+\APLunderbar\APLF\APLN\APLD\APLD\APLspace\APLT\APLO\APLU\APLP
+\APLP\APLE\APLR\APLspace\protect\APLdelta\protect\APLdelta\APLF
+\APLV\APLspace
+\item %
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLC
+\APLl\APLa\APLs\APLs\APLspace\protect\APLdelta\APLB\APLA\APLS
+\APLE\APLcolon\APLspace\APLM\APLA\APLK\APLE\protect\APLunderbar
+\APLO\APLB\APLJ\APLE\APLC\APLT\APLspace\APLD\APLR\APLO\APLP
+\protect\APLunderbar\APLP\APLR\APLO\APLP\APLE\APLR\APLT\APLY
+\APLspace\APLF\APLI\APLN\APLD\protect\APLunderbar\APLP\APLR\APLO
+\APLP\APLE\APLR\APLT\APLY\APLspace\APLG\APLE\APLT\protect
+\APLunderbar\APLP\APLR\APLO\APLP\APLE\APLR\APLT\APLY\APLspace\APLG\APLE
+\APLT\protect\APLunderbar\APLP\APLR\APLO\APLP\APLspace\APLG
+\APLE\APLT\protect\APLunderbar\APLM\APLE\APLM\APLspace\APLP\APLU
+\APLT\protect\APLunderbar\APLP\APLR\APLO\APLP\APLE\APLR\APLT
+\APLY\APLspace\APLP\APLU\APLT\protect\APLunderbar\APLM\APLE\APLM
+\APLspace\APLL\APLI\APLS\APLT\protect\APLunderbar\APLP\APLR
+\APLO\APLP\APLE\APLR\APLT\APLY\APLspace\APLL\APLO\APLA\APLD
+\protect\APLunderbar\APLC\APLL\APLA\APLS\APLS\APLspace\APLL\APLO\APLA
+\APLD\protect\APLunderbar\APLC\APLL\APLA\APLS\APLS\APLE\APLS
+\APLspace\APLD\APLU\APLM\APLP\protect\APLunderbar\APLC\APLL\APLA
+\APLS\APLS\APLspace\APLD\APLU\APLM\APLP\protect\APLunderbar
+\APLC\APLL\APLA\APLS\APLS\APLE\APLS\APLspace\APLC\APLD\APLspace
+\APLM\APLA\APLT\APLR\APLI\APLX\APLspace\APLE\APLL\APLZ\APLM
+\APLspace\APLA\APLC\APLT\APLI\APLV\APLA\APLT\APLE\protect
+\APLunderbar\APLC\APLL\APLA\APLS\APLS\APLspace\APLD\APLE\APLA\APLC\APLT
+\APLI\APLV\APLA\APLT\APLE\protect\APLunderbar\APLC\APLL\APLA
+\APLS\APLbr\APLS\APLspace\APLE\APLR\APLA\APLS\APLE\protect
+\APLunderbar\APLC\APLL\APLA\APLS\APLS\APLspace\APLL\APLO\APLA\APLD
+\protect\APLunderbar\APLI\APLM\APLA\APLG\APLE\APLspace\APLD\APLU
+\APLM\APLP\protect\APLunderbar\APLI\APLM\APLA\APLG\APLE
+\APLspace\APLE\APLN\APLV\APLI\APLR\APLO\APLN\APLM\APLE\APLN\APLT
+\protect\APLunderbar\APLA\APLP\APLL\APLspace\protect\APLdelta\APLuV
+\APLuE\APLuR\APLuB\APLuO\APLuS\APLuE\APLspace\APLD\APLE\APLL
+\protect\APLunderbar\APLM\APLE\APLM\APLspace\APLL\APLI\APLS\APLT
+\protect\APLunderbar\APLM\APLE\APLM\APLspace\protect\APLdelta
+\APLB\APLU\APLI\APLL\APLD\protect\APLunderbar\APLC\APLL\APLO
+\APLS\APLU\APLR\APLE\APLspace\protect\APLdelta\APLB\APLU\APLI\APLL
+\APLD\protect\APLunderbar\APLN\APLA\APLM\APLE\APLT\APLA\APLB
+\APLL\APLbr\APLE\APLspace\protect\APLdelta\APLE\APLX\APLE\APLC
+\APLU\APLT\APLE\protect\APLunderbar\APLC\APLL\APLO\APLS\APLU
+\APLR\APLbr\APLE\APLspace\protect\APLdelta\APLF\APLR\APLE\APLE
+\APLZ\APLE\APLspace\protect\APLdelta\APLU\APLN\APLF\APLR\APLE\APLE
+\APLZ\APLE\APLspace\APLA\APLD\APLD\protect\APLunderbar\APLC
+\APLL\APLA\APLS\APLS\APLspace\APLC\APLL\APLA\APLS\APLS\APLspace
+\APLC\APLL\APLA\APLS\APLS\APLE\APLS\APLspace\APLD\APLE\APLL\APLE
+\APLT\APLE\protect\APLunderbar\APLC\APLL\APLA\APLS\APLS
+\APLspace\APLS\APLE\APLN\APLD\APLspace\APLS\APLY\APLS\APLT\APLE\APLM
+\APLspace\APLI\APLP\APLL\APLspace\protect\APLdelta\APLE\APLN
+\APLV\APLI\APLR\APLO\APLN\APLM\APLE\APLN\APLT\APLspace\protect
+\APLdelta\APLE\APLX\APLE\APLC\APLspace\APLT\APLO\APLU\APLC\APLH
+\APLspace\APLM\APLE\APLM\APLO\APLspace\protect\APLdelta\APLM
+\APLE\APLM\APLO\APLspace\APLO\APLB\APLJ\APLE\APLC\APLT\APLspace
+\APLS\APLP\APLA\APLW\APLN\APLspace
+\end{enumerate}\end{it}\end{footnotesize}\par}
+%
+% end F638
+%
+\section{A Short Protocol of Class\ %
+APL2TEX
+}
+%
+% \input{F639}
+%
+%
+% F639
+%
+% F639
+{\parsep=0pt\parindent=0pt
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Document
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}WS
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}fileid{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}WS {\APLless}author{\APLgreater} {\APLless}wsid{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}fileid{\APLgreater} {
+{\APLbr}\APLleftarrow} 0 PRTEX{\protect\APLunderbar}WS {\APLless}author{
+{\APLbr}\APLgreater} {\APLless}wsid{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}fileid{\APLgreater} {\APLleftarrow} 1
+{\APLbr}PRTEX{\protect\APLunderbar}WS {\APLless}author{\APLgreater} {\APLless}wsid{
+{\APLbr}\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}WS typesets all objects in the
+{\APLbr}workspace. By default the functions and variables of
+{\APLbr}APL2TEX are not included in the workspace print
+{\APLbr}out. If you want to include the functions and
+{\APLbr}variables used in the print processing, specify a left
+{\APLbr}argument of 1. {\APLless}author{\APLgreater} and {
+{\APLbr}\APLless}wsid{\APLgreater} are text vectors.
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Internal
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+{\protect\APLdelta}{\protect\APLdelta}FV
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}return code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}vector of text lines{\APLgreater}
+{\APLbr}{\protect\APLdelta}{\protect\APLdelta}FV {\APLless}file identifier{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}vector of text lines{\APLgreater} {
+{\APLbr}\APLleftarrow} {\protect\APLdelta}{\protect\APLdelta}FV {\APLless}file
+{\APLbr}identifier{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ {\protect\APLdelta}{\protect\APLdelta}FV writes a vector
+{\APLbr}of text lines to a file with variable
+{\APLbr}record length or reads a file.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+APLFNSLINE
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+APLFNSLINE {\APLless}text line{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ APLFNSLINE converts one line of APL code to a sequence of
+{\APLbr} \LaTeX\ macros.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+APLLINE
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+APLLINE {\APLless}text line{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ APLLINE typesets one line of text as a sequence of fixed
+{\APLbr} spaced \LaTeX\ macros.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+APLTOTEX
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}vector of lines{\APLgreater} {\APLleftarrow}
+{\APLbr}APLTOTEX {\APLless}line of text{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}vector of lines{\APLgreater} {\APLleftarrow} {\APLquote}F{
+{\APLbr}\APLquote} APLTOTEX {\APLless}line of text{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}vector of lines{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLquote}V{\APLquote} APLTOTEX {\APLless}line of text{
+{\APLbr}\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ APLTOTEX translates a line of text into a sequence of
+{\APLbr} \LaTeX\ macro calls. The default is variable spacing ({
+{\APLbr}\APLquote}V{\APLquote}).
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+APLTOTEX{\protect\APLunderbar}S
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}vector of lines{\APLgreater} {\APLleftarrow}
+{\APLbr}APLTOTEX{\protect\APLunderbar}S {\APLless}line of text{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}vector of lines{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLquote}F{\APLquote}
+{\APLbr}APLTOTEX{\protect\APLunderbar}S {\APLless}line of text{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}vector of lines{\APLgreater} {\APLleftarrow} {\APLquote}V{
+{\APLbr}\APLquote} APLTOTEX{\protect\APLunderbar}S {\APLless}line of text{
+{\APLbr}\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ APLTOTEX{\protect\APLunderbar}S translates a line of text
+{\APLbr}into a sequence of latex macro calls, characters
+{\APLbr}and numbers. This function should be used for
+{\APLbr}preprocessing text which is interleaved with a few APL
+{\APLbr}symbols and short APL expressions. The default is
+{\APLbr}variable spacing ({\APLquote}V{\APLquote}), for fixed spacing
+{\APLbr} use {\APLquote}F{\APLquote}.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+DISPLAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}boxed representation of array{\APLgreater} {
+{\APLbr}\APLleftarrow} DISPLAY {\APLless}array{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ DISPLAY draws a boxed diagram of any nested array.
+{\APLbr} DISPLAY is functional equivalent to IBM{\APLquote}s
+{\APLbr}version.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FIXEDSPACING
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}boxed letter{\APLgreater} {\APLleftarrow}
+{\APLbr}FIXEDSPACING {\APLless}letter{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FIXEDSPACING boxes each letter in order to simulate equal
+{\APLbr} spaced typing.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FNSFMT
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}vector representation{\APLgreater} {
+{\APLbr}\APLleftarrow} FNSFMT {\APLless}canonical representation{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FNSFMT translates the canonical function representation to
+{\APLbr} the vector representation of the function.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FNSLIST
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}filename{\APLgreater} FNSLIST {\APLless}object
+{\APLbr}name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FNSLIST formats a subsection header and the code to input
+{\APLbr} the file which contains a \LaTeX\ macro stream
+{\APLbr}which typesets the APL code of the APL object.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FOLD
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}folded text matrix{\APLgreater} {\APLleftarrow}
+{\APLbr}FOLD {\APLless}text matrix{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FOLD mimicks APL2s formatting algorithm for arrays.
+{\APLbr} The matrix is cut in columns and the columns are printed
+{\APLbr} one after the other. Broad tables can thus
+{\APLbr} be restored by cut and paste.
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Internal Local Adaption
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+BEGIN{\protect\APLunderbar}ARRAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}start of array macro sequence{\APLgreater} {
+{\APLbr}\APLleftarrow} BEGIN{\protect\APLunderbar}ARRAY
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ BEGIN{\protect\APLunderbar}ARRAY defines the \LaTeX\
+{\APLbr}macros which precede an APL array.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+END{\protect\APLunderbar}ARRAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}end of array macro sequence{\APLgreater} {
+{\APLbr}\APLleftarrow} END{\protect\APLunderbar}ARRAY
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ END{\protect\APLunderbar}ARRAY defines the \LaTeX\ macros
+{\APLbr}which precede an APL array.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+LOCAL{\protect\APLunderbar}PAGE
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}latex macros defining the size of a local page{
+{\APLbr}\APLgreater} {\APLleftarrow} LOCAL{\protect\APLunderbar}PAGE
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ LOCAL{\protect\APLunderbar}PAGE defines the size of a
+{\APLbr}page. All relevant changes are made here.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRINTING{\protect\APLunderbar}WIDTH
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}integer{\APLgreater} {\APLleftarrow}
+{\APLbr}PRINTING{\protect\APLunderbar}WIDTH
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRINTING{\protect\APLunderbar}WIDTH sets the number of
+{\APLbr}characters per screen line. This value has to
+{\APLbr}be set to the maximal numbers of characters per
+{\APLbr}printed line.
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Internal Translation Table
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+TEXM
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}translation table{\APLgreater}{\APLleftarrow}TEXM
+{\APLbr}{\APLquote}{\APLquote}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ TEXM generates a translation table which maps
+{\APLbr}EACH symbol of the atomic vector to a \LaTeX\ macro
+{\APLbr}name.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+TEXM{\protect\APLunderbar}S
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}translation table{\APLgreater}{
+{\APLbr}\APLleftarrow}TEXM{\protect\APLunderbar}S {\APLquote}{\APLquote}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ TEXM{\protect\APLunderbar}S generates a translation table
+{\APLbr} which maps symbols of the atomic vector to
+{\APLbr}a \LaTeX\ macro name. All standard characters are NOT
+{\APLbr} mapped (lowercase alphabet, uppercase alphabet,
+{\APLbr}numbers).
+{\APLbr}
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Internal Utility
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FLAT
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}return code{\APLgreater} {\APLleftarrow} FLAT {
+{\APLbr}\APLless}in file name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FLAT implements the recursive scan of the \TeX\ files.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+TO{\protect\APLunderbar}APL
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}vector of lines{\APLgreater} {\APLleftarrow}
+{\APLbr}TO{\protect\APLunderbar}APL {\APLless}vector of lines{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ TO{\protect\APLunderbar}APL translates a vector of tex
+{\APLbr}lines to a vector of APL lines.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+TOUPPER
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}upper case string{\APLgreater} {\APLleftarrow}
+{\APLbr}TOUPPER {\APLless}lower case string{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ TOUPPER translates lower case to upper case and passes all
+{\APLbr} other characters.
+{\APLbr}
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Logical Document Element
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}ARRAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}ARRAY {\APLless}variable name{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}return code{\APLgreater} {\APLleftarrow}
+{\APLbr}{\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}ARRAY {\APLless}variable name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}ARRAY prints the \LaTeX\ code
+{\APLbr}of {\APLless}variable{\APLgreater} to a file named
+{\APLbr} by the CMS file name {\APLless}filename{\APLgreater}. {
+{\APLbr}\APLless}variable{\APLgreater} is printed as
+{\APLbr}displayed by the APL2 function {\APLuptackjot}. {\APLless}file name{
+{\APLbr}\APLgreater} and {\APLless}variable name{\APLgreater}
+{\APLbr}are text vectors.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}BOXEDARRAY
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}BOXEDARRAY {\APLless}variable name{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}BOXEDARRAY {\APLless}variable name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}BOXEDARRAY prints the \LaTeX\
+{\APLbr} code of {\APLless}variable{\APLgreater} to a file named
+{\APLbr} by the CMS file name {\APLless}filename{\APLgreater}. {
+{\APLbr}\APLless}variable{\APLgreater} is printed in boxed
+{\APLbr}representation as displayed by the APL2 function DISPLAY.
+{\APLbr} {\APLless}file name{\APLgreater} and {\APLless}variable
+{\APLbr}name{\APLgreater} are text vectors.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}DIALOG
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}DIALOG {\APLless}APL expression{\APLgreater}
+{\APLbr}{\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}DIALOG {\APLless}APL expression{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}DIALOG simulates and prints one
+{\APLbr}interaction of user and computer. The right
+{\APLbr}argument of PRTEX{\protect\APLunderbar}DIALOG is a text
+{\APLbr}string containing the APL expression normally typed in
+{\APLbr}by the user. User input is printed in bold face, six
+{\APLbr}spaces indented with proportional spacing. The
+{\APLbr}response of the APL interpreter (if any) is printed
+{\APLbr}with fixed spacing thus simulating a
+{\APLbr}traditional type writer.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}EXPR
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}EXPR {\APLless}APL expression{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}return code{\APLgreater} {\APLleftarrow}
+{\APLbr}{\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}EXPR {\APLless}APL expression{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}EXPR takes a text string as
+{\APLbr}right argument which is typeset as an APL expression typed
+{\APLbr}in by the user: six spaces indented and bold face.
+{\APLbr}
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}FN
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}file name{\APLgreater} PRTEX{\protect\APLunderbar}FN {
+{\APLbr}\APLless}function name{\APLgreater} {\APLstile} {\APLless}LaTeX code{
+{\APLbr}\APLgreater} {\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}FN {\APLless}operator name{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}FN {\APLless}function name{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}return code{\APLgreater} {\APLleftarrow} {\APLless}file
+{\APLbr}name{\APLgreater} PRTEX{\protect\APLunderbar}FN {
+{\APLbr}\APLless}operator name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}FN prints the \LaTeX\ code of
+{\APLbr}the del-editor representation of a {\APLless}function{
+{\APLbr}\APLgreater} or an {\APLless}operator{\APLgreater} to a file
+{\APLbr}named by the CMS file name {\APLless}filename{
+{\APLbr}\APLgreater}.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}FNCR
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}FNCR {\APLless}function name{\APLgreater} {
+{\APLbr}\APLstile} {\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}FNCR {\APLless}operator name{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}file name{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}FNCR {\APLless}function name{\APLgreater} {\APLstile} {
+{\APLbr}\APLless}return code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}file name{\APLgreater} PRTEX{\protect\APLunderbar}FNCR {
+{\APLbr}\APLless}operator name{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}FNCR prints the \LaTeX\ code of
+{\APLbr}the canonical representation of a {
+{\APLbr}\APLless}function{\APLgreater} or an {\APLless}operator{\APLgreater} to a
+{\APLbr}file named by the CMS file name {\APLless}filename{
+{\APLbr}\APLgreater}.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+PRTEX{\protect\APLunderbar}FNDD
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}LaTeX code{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}FNDD {\APLless}direct definition{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLless}filename{\APLgreater}
+{\APLbr}PRTEX{\protect\APLunderbar}FNDD {\APLless}direct definition{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ PRTEX{\protect\APLunderbar}FNDD prints the \LaTeX\ code of
+{\APLbr}the {\APLless}direct definition{\APLgreater} of a {
+{\APLbr}\APLless}function{\APLgreater} or {\APLless}operator{
+{\APLbr}\APLgreater} to a file named by the CMS file name {
+{\APLbr}\APLless}filename{\APLgreater}. The direct definition must be a
+{\APLbr}character vector.
+\end{minipage}\par
+\end{footnotesize}
+\par\vspace{2mm}\begin{flushleft}{\bf Protocol}{\em\ %
+Utility
+}\end{flushleft}\begin{footnotesize}%
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FILE{\protect\APLunderbar}TO{\protect\APLunderbar}APL
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}return code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}fileid in{\APLgreater}
+{\APLbr}FILE{\protect\APLunderbar}TO{\protect\APLunderbar}APL {\APLless}fileid out{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FILE{\protect\APLunderbar}TO{\protect\APLunderbar}APL
+{\APLbr}converts the text of a cms file named {\APLless}fileid in{
+{\APLbr}\APLgreater} from \LaTeX\ macros to APL2 symbols and writes the
+{\APLbr}new text to a CMS file named {\APLless}fileid out{
+{\APLbr}\APLgreater}.
+\end{minipage}\par
+\par\vspace{3pt}\begin{flushleft} Method{\bf\ %
+FLATTEN
+}\end{flushleft}%
+\begin{minipage}[t]{8.25cm}%
+{\APLless}return code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}fileid out{\APLgreater} FLATTEN {\APLless}file name in{
+{\APLbr}\APLgreater} {\APLstile} {\APLless}return code{\APLgreater} {
+{\APLbr}\APLleftarrow} FLATTEN {\APLless}file name in{\APLgreater}
+\end{minipage}\hspace{0.5cm}\begin{minipage}[t]{8.25cm}%
+ FLATTEN recursively collects all small and scattered
+{\APLbr} \TeX\ files and writes one large file.
+{\APLbr}
+\end{minipage}\par
+\end{footnotesize}
+\par}
+%
+% end F639
+%
+\section{A Manual of the Members of Class\ %
+APL2TEX
+}
+%
+% \input{F640}
+%
+%
+% F640
+%
+% F640
+{\parsep=0pt\parindent=0pt
+\subsection{Properties}%
+\subsection{Protocol\ %
+Document
+}%
+\subsubsection{%
+PRTEX{\protect\APLunderbar}WS
+}
+%
+% \input{F641}%
+%
+%
+% F641
+%
+% F641
+%
+% \input{F642}
+%
+%
+% F642
+%
+% F642
+
+{\parindent=0pt Method {\bf %
+PRTEX{\protect\APLunderbar}WS
+} of class {\bf %
+APL2TEX
+} created %
+1990{\APLslash}5{\APLslash}8,17:46:5
+\\%
+{\bf Protocol: }{\em %
+Document
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}fileid{\APLgreater} {\APLleftarrow}
+{\APLbr}PRTEX{\protect\APLunderbar}WS {\APLless}author{\APLgreater} {
+{\APLbr}\APLless}wsid{\APLgreater} {\APLstile}\\\ {\APLless}fileid{
+{\APLbr}\APLgreater} {\APLleftarrow} 0 PRTEX{\protect\APLunderbar}WS {
+{\APLbr}\APLless}author{\APLgreater} {\APLless}wsid{\APLgreater} {
+{\APLbr}\APLstile}\\\ {\APLless}fileid{\APLgreater} {\APLleftarrow} 1
+{\APLbr}PRTEX{\protect\APLunderbar}WS {\APLless}author{\APLgreater} {
+{\APLbr}\APLless}wsid{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+PRTEX{\protect\APLunderbar}WS typesets all objects in the
+{\APLbr}workspace. By default the functions and variables of
+{\APLbr}APL2TEX are not included in the workspace print out.
+{\APLbr} If you want to include the functions and variables
+{\APLbr} used in the print processing, specify a left argument of
+{\APLbr}1. {\APLless}author{\APLgreater} and {\APLless}wsid{
+{\APLbr}\APLgreater} are text vectors.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+%
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLW\APLS
+\APLspace
+ generates a
+ master file with the workspace name
+ truncated to 8 characters and for each operator,
+ function and variable an include file with a synthetic name.
+
+ The names of objects in the print workspace must be
+ carefully enumerated.
+
+ {\bf Caution:} you should use a temporary A-disk otherwise you may
+ overwrite existing files on your A-disk. (CMS)
+
+ {\bf Files:}
+ \begin{enumerate}\itemsep=0pt\parsep=0pt\parskip=0pt
+ \item
+\APLless\APLw\APLs\APLi\APLd\APLgreater\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLspace
+
+ ... \LaTeX\ master file for workspace
+ \item
+\APLquote\APLO\APLquote\APLless\APLi\APLn\APLt\APLe\APLg
+\APLe\APLr\APLgreater\APLspace\APLT\APLE\APLX\APLspace\APLA
+\APLspace
+
+ ... include files for operators
+ \item
+\APLquote\APLF\APLquote\APLless\APLi\APLn\APLt\APLe\APLg
+\APLe\APLr\APLgreater\APLspace\APLT\APLE\APLX\APLspace\APLA
+\APLspace
+
+ ... include files for functions
+ \item
+\APLquote\APLV\APLquote\APLless\APLi\APLn\APLt\APLe\APLg
+\APLe\APLr\APLgreater\APLspace\APLT\APLE\APLX\APLspace\APLA
+\APLspace
+
+ ... include files for variables
+ \end{enumerate}
+
+
+
+
+
+\par}%
+%
+% end F642
+%
+\vspace{2mm}
+%
+% \input{F643}
+%
+%
+% F643
+%
+% F643
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLA\APLL\APLL
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLW\APLS
+\APLspace\APLA\APLU\APLT\APLH\APLsemicolon\APLR\APLC
+\APLsemicolon\APLA\APLU\APLT\APLH\APLO\APLR\APLsemicolon\APLW\APLS\APLI
+\APLD\APLsemicolon\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG
+\protect\APLunderbar\APLW\APLI\APLD\APLT\APLH\APLsemicolon\APLB
+\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\APLsemicolon\APLE\APLN\APLD\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLsemicolon\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLtwo\APLsemicolon\protect\APLdelta
+\protect\APLdelta\protect\APLdelta\APLN\APLL\APLthree
+\APLsemicolon\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLleftparen\APLA\APLU\APLT\APLH\APLO\APLR\APLspace\APLW
+\APLS\APLI\APLD\APLrightparen\APLleftarrow\APLA\APLU\APLT\APLH
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLzero\APLequal\APLquad\APLN
+\APLC\APLspace\APLquote\APLA\APLL\APLL\APLquote\APLrightparen
+\APLslash\APLquote\APLA\APLL\APLL\APLleftarrow\APLzero\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLleftparen\APLA\APLL
+\APLL\APLequalunderbar\APLone\APLrightparen\APLdowncaret
+\APLleftparen\APLA\APLL\APLL\APLequalunderbar\APLzero\APLrightparen
+\APLrightparen\APLslash\APLquote\APLA\APLL\APLL\APLleftarrow
+\APLzero\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\APLspace\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLleftparen
+\APLeight\APLuparrow\APLW\APLS\APLI\APLD\APLtilde\APLquote
+\APLspace\APLquote\APLrightparen\APLcomma\APLquote\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLquote\APLslope\APLd
+\APLo\APLc\APLu\APLm\APLe\APLn\APLt\APLs\APLt\APLy\APLl\APLe
+\APLleftbracket\APLt\APLi\APLt\APLl\APLe\APLp\APLa\APLg\APLe
+\APLcomma\APLa\APLp\APLl\APLrightbracket\APLleftbrace\APLa\APLr\APLt
+\APLi\APLc\APLl\APLe\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLt\APLi\APLt\APLl\APLe\APLleftbrace\APLW\APLo
+\APLr\APLk\APLs\APLp\APLa\APLc\APLe\APLspace\APLquote\APLcomma
+\APLW\APLS\APLI\APLD\APLcomma\APLquote\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLa\APLu\APLt\APLh\APLo\APLr\APLleftbrace
+\APLquote\APLcomma\APLA\APLU\APLT\APLH\APLO\APLR\APLcomma\APLquote
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLd\APLa\APLt\APLe\APLleftbrace\APLquote
+\APLcomma\APLleftparen\APLquote\APLzero\APLzero\APLzero\APLsix\APLbar
+\APLzero\APLsix\APLbar\APLzero\APLsix\APLquote\APLuptackjot
+\APLthree\APLuparrow\APLquad\APLT\APLS\APLrightparen\APLcomma
+\APLquote\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLm\APLa\APLr\APLk\APLb\APLo\APLt\APLh
+\APLleftbrace\APLquote\APLcomma\APLA\APLU\APLT\APLH\APLO\APLR\APLcomma
+\APLquote\APLspace\APLbar\APLspace\APLW\APLo\APLr\APLk\APLs\APLp
+\APLa\APLc\APLe\APLspace\APLquote\APLcomma\APLW\APLS\APLI\APLD
+\APLcomma\APLquote\APLspace\APLbar\APLspace\APLquote\APLcomma
+\APLleftparen\APLquote\APLzero\APLzero\APLzero\APLsix\APLbar
+\APLzero\APLsix\APLbar\APLzero\APLsix\APLspace\APLzero\APLsix
+\APLcolon\APLzero\APLsix\APLcolon\APLzero\APLsix\APLquote
+\APLuptackjot\APLsix\APLuparrow\APLquad\APLT\APLS\APLrightparen
+\APLcomma\APLquote\APLrightbrace\APLpercent\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLleftbrace\APLquote\APLcomma\APLA\APLU\APLT\APLH\APLO
+\APLR\APLcomma\APLquote\APLspace\APLbar\APLspace\APLW\APLo\APLr
+\APLk\APLs\APLp\APLa\APLc\APLe\APLspace\APLquote\APLcomma\APLW
+\APLS\APLI\APLD\APLcomma\APLquote\APLspace\APLbar\APLspace
+\APLquote\APLcomma\APLleftparen\APLquote\APLzero\APLzero\APLzero
+\APLsix\APLbar\APLzero\APLsix\APLbar\APLzero\APLsix\APLspace
+\APLzero\APLsix\APLcolon\APLzero\APLsix\APLcolon\APLzero\APLsix
+\APLquote\APLuptackjot\APLsix\APLuparrow\APLquad\APLT\APLS
+\APLrightparen\APLcomma\APLquote\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLp\APLa\APLg\APLe\APLs\APLt\APLy\APLl\APLe
+\APLleftbrace\APLm\APLy\APLh\APLe\APLa\APLd\APLi\APLn\APLg\APLs
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLL\APLO\APLC
+\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLb\APLe\APLg\APLi\APLn\APLleftbrace\APLd\APLo
+\APLc\APLu\APLm\APLe\APLn\APLt\APLrightbrace\APLslope\APLm\APLa
+\APLk\APLe\APLt\APLi\APLt\APLl\APLe\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLe\APLc\APLt\APLi\APLo\APLn\APLleftbrace
+\APLO\APLp\APLe\APLr\APLa\APLt\APLo\APLr\APLs\APLrightbrace
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLleftparen\APLquote\APLo\APLquote\APLcomma\APLdieresis
+\APLuptackjot\APLdieresis\APLiota\APLrho\APLW\APLS\APLI\APLD
+\APLrightparen\APLF\APLN\APLS\APLL\APLI\APLS\APLT\APLdieresis\APLW
+\APLS\APLI\APLD\APLleftarrow\APLleftshoe\APLleftbracket\APLquad
+\APLI\APLO\APLplus\APLone\APLrightbracket\APLquad\APLN\APLL
+\APLspace\APLfour
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLe\APLc\APLt\APLi\APLo\APLn\APLleftbrace
+\APLF\APLu\APLn\APLc\APLt\APLi\APLo\APLn\APLs\APLrightbrace
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\APLquote\APLA\APLP\APLL\APLL\APLI\APLN
+\APLE\APLquote\APLspace\APLquote\APLA\APLP\APLL\APLT\APLO\APLT
+\APLE\APLX\APLquote\APLspace\APLquote\APLF\APLN\APLS\APLL\APLI
+\APLS\APLT\APLquote\APLspace\APLquote\APLT\APLE\APLX\APLM
+\APLquote\APLspace\APLquote\APLP\APLR\APLT\APLE\APLX\protect
+\APLunderbar\APLA\APLR\APLR\APLA\APLY\APLquote\APLspace\APLquote\APLP
+\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLC\APLR
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLE\APLX\APLP\APLR\APLquote
+\APLspace\APLquote\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar
+\APLF\APLN\APLquote\APLspace\APLquote\APLP\APLR\APLT\APLE\APLX
+\protect\APLunderbar\APLW\APLS\APLquote\APLspace\APLquote\APLD
+\APLI\APLS\APLP\APLL\APLA\APLY\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLA\APLP
+\APLL\APLF\APLN\APLS\APLL\APLI\APLN\APLE\APLquote\APLspace
+\APLquote\APLF\APLN\APLS\APLF\APLM\APLT\APLquote\APLspace\APLquote
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLD\APLD
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLF\APLO
+\APLL\APLD\APLquote\APLspace\APLquote\APLF\APLI\APLX\APLE\APLD
+\APLS\APLP\APLA\APLC\APLI\APLN\APLG\APLquote\APLspace\APLquote
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLD\APLI\APLA\APLL
+\APLO\APLG\APLquote\APLspace\APLquote\APLP\APLR\APLT\APLE\APLX
+\protect\APLunderbar\APLB\APLO\APLX\APLE\APLD\APLA\APLR\APLR
+\APLA\APLbr\APLY\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLF\APLI
+\APLL\APLE\protect\APLunderbar\APLT\APLO\protect\APLunderbar\APLA
+\APLP\APLL\APLquote\APLspace\APLquote\APLT\APLO\protect
+\APLunderbar\APLA\APLP\APLL\APLquote\APLspace\APLquote\APLT\APLE\APLX
+\APLM\protect\APLunderbar\APLS\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLA\APLP
+\APLL\APLT\APLO\APLT\APLE\APLX\protect\APLunderbar\APLS\APLquote
+\APLspace\APLquote\APLF\APLL\APLA\APLT\APLT\APLE\APLN\APLquote
+\APLspace\APLquote\APLF\APLL\APLA\APLT\APLquote\APLspace
+\APLquote\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar
+\APLW\APLI\APLD\APLT\APLH\APLquote\APLspace\APLquote\protect
+\APLdelta\protect\APLdelta\APLF\APLV\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLB\APLE
+\APLG\APLI\APLN\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\APLquote\APLspace\APLquote\APLE\APLN\APLD\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY\APLquote\APLspace\APLquote\APLL\APLO\APLC
+\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG\APLE\APLquote
+\APLspace\APLquote\protect\APLdelta\APLF\APLV\APLquote\APLspace
+\APLquote\APLT\APLO\APLU\APLP\APLP\APLE\APLR\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLA\APLL\APLL
+\APLrightparen\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLf
+\APLquote\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis
+\APLiota\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLF\APLN
+\APLS\APLL\APLI\APLS\APLT\APLdieresis\APLW\APLS\APLI\APLD
+\APLleftarrow\APLleftparen\APLleftparen\APLleftshoe\APLleftbracket
+\APLquad\APLI\APLO\APLplus\APLone\APLrightbracket\APLquad\APLN
+\APLL\APLspace\APLthree\APLrightparen\APLtilde\APLdieresis
+\APLquote\APLquote\APLspace\APLquote\APLquote\APLrightparen\APLtilde
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN\APLL
+\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLsix\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLA\APLL\APLL\APLrightparen
+\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLf\APLquote
+\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis\APLiota
+\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLF\APLN\APLS\APLL
+\APLI\APLS\APLT\APLdieresis\APLW\APLS\APLI\APLD\APLleftarrow
+\APLleftshoe\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLquad\APLN\APLL\APLspace\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLe\APLc\APLt\APLi\APLo\APLn\APLleftbrace
+\APLV\APLa\APLr\APLi\APLa\APLb\APLl\APLe\APLs\APLrightbrace
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLeight\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLtwo\APLleftarrow\APLquote\APLR\APLC\APLquote\APLspace
+\APLquote\APLA\APLU\APLT\APLH\APLO\APLR\APLquote\APLspace\APLquote
+\APLF\APLI\APLL\APLE\APLI\APLD\APLquote\APLspace\APLquote\APLA
+\APLU\APLT\APLH\APLquote\APLspace\APLquote\APLW\APLS\APLI\APLD
+\APLquote\APLspace\APLquote\APLA\APLL\APLL\APLquote\APLspace
+\APLquote\protect\APLdelta\protect\APLdelta\protect\APLdelta
+\APLN\APLL\APLtwo\APLquote\APLspace\APLquote\protect\APLdelta
+\protect\APLdelta\protect\APLdelta\APLN\APLL\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLnine\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLtwo\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLtwo\APLcomma\APLquote\APLT\APLE\APLX
+\protect\APLunderbar\APLA\APLB\APLS\APLT\APLR\APLA\APLC\APLT
+\APLquote\APLspace\APLquote\APLT\APLE\APLX\protect\APLunderbar
+\APLD\APLE\APLS\APLC\APLR\APLI\APLB\APLE\APLquote\APLspace
+\APLquote\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLzero\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLA\APLL\APLL
+\APLrightparen\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLv
+\APLquote\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis
+\APLiota\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLF\APLN
+\APLS\APLL\APLI\APLS\APLT\APLdieresis\APLW\APLS\APLI\APLD
+\APLleftarrow\APLleftparen\APLleftparen\APLleftshoe\APLleftbracket
+\APLquad\APLI\APLO\APLplus\APLone\APLrightbracket\APLquad\APLN
+\APLL\APLspace\APLtwo\APLrightparen\APLtilde\APLdieresis\APLquote
+\APLquote\APLspace\APLquote\APLquote\APLrightparen\APLtilde
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN\APLL
+\APLtwo\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLone\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLA\APLL\APLL\APLrightparen
+\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLv\APLquote
+\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis\APLiota
+\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLF\APLN\APLS\APLL
+\APLI\APLS\APLT\APLdieresis\APLW\APLS\APLI\APLD\APLleftarrow
+\APLleftshoe\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLquad\APLN\APLL\APLspace\APLtwo\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLc\APLl\APLe\APLa\APLr\APLp\APLa\APLg\APLe
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLthree\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLe\APLt\APLc\APLo\APLu\APLn\APLt\APLe\APLr
+\APLleftbrace\APLp\APLa\APLg\APLe\APLrightbrace\APLleftbrace
+\APLone\APLrightbrace\APLslope\APLp\APLa\APLg\APLe\APLn\APLu
+\APLm\APLb\APLe\APLr\APLi\APLn\APLg\APLleftbrace\APLr\APLo\APLm
+\APLa\APLn\APLrightbrace\APLslope\APLt\APLa\APLb\APLl\APLe\APLo
+\APLf\APLc\APLo\APLn\APLt\APLe\APLn\APLt\APLs\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLfour\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace\APLd\APLo\APLc\APLu
+\APLm\APLe\APLn\APLt\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLfive\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLspace\protect\APLdelta
+\protect\APLdelta\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\APLI
+\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLsix\APLrightbracket}{}
+\APLleftparen\APLquote\APLO\APLquote\APLcomma\APLdieresis
+\APLuptackjot\APLdieresis\APLiota\APLrho\APLW\APLS\APLI\APLD
+\APLrightparen\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF
+\APLN\APLdieresis\APLW\APLS\APLI\APLD\APLleftarrow\APLleftshoe
+\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone\APLrightbracket
+\APLquad\APLN\APLL\APLspace\APLfour
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLseven\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLA\APLL\APLL
+\APLrightparen\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLF
+\APLquote\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis
+\APLiota\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLdieresis\APLW
+\APLS\APLI\APLD\APLleftarrow\APLleftparen\APLleftparen
+\APLleftshoe\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLquad\APLN\APLL\APLspace\APLthree\APLrightparen\APLtilde
+\APLdieresis\APLquote\APLquote\APLspace\APLquote\APLquote
+\APLrightparen\APLtilde\protect\APLdelta\protect\APLdelta\protect
+\APLdelta\APLN\APLL\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLeight\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLA\APLL\APLL\APLrightparen
+\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLF\APLquote
+\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis\APLiota
+\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLP\APLR\APLT\APLE
+\APLX\protect\APLunderbar\APLF\APLN\APLdieresis\APLW\APLS\APLI
+\APLD\APLleftarrow\APLleftshoe\APLleftbracket\APLquad\APLI\APLO
+\APLplus\APLone\APLrightbracket\APLquad\APLN\APLL\APLspace
+\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLnine\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLA\APLL\APLL
+\APLrightparen\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLV
+\APLquote\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis
+\APLiota\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\APLdieresis\APLW\APLS\APLI\APLD\APLleftarrow\APLleftparen
+\APLleftparen\APLleftshoe\APLleftbracket\APLquad\APLI\APLO\APLplus
+\APLone\APLrightbracket\APLquad\APLN\APLL\APLspace\APLtwo
+\APLrightparen\APLtilde\APLdieresis\APLquote\APLquote\APLspace\APLquote
+\APLquote\APLrightparen\APLtilde\protect\APLdelta\protect
+\APLdelta\protect\APLdelta\APLN\APLL\APLtwo\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLzero\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLA\APLL\APLL\APLrightparen
+\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLV\APLquote
+\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis\APLiota
+\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLP\APLR\APLT\APLE
+\APLX\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY\APLdieresis
+\APLW\APLS\APLI\APLD\APLleftarrow\APLleftshoe\APLleftbracket
+\APLquad\APLI\APLO\APLplus\APLone\APLrightbracket\APLquad\APLN
+\APLL\APLspace\APLtwo\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F643
+%
+\vspace{2mm}
+%
+% \input{F644}
+%
+%
+% F644
+%
+% F644
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ FILEID
+\item[Arguments] %
+ ALL AUTH
+\item[Used Local Names] %
+ RC AUTHOR WSID
+{\APLbr}{\protect\APLdelta}{\protect\APLdelta}{\protect\APLdelta}NL2
+{\APLbr}{\protect\APLdelta}{\protect\APLdelta}{\protect\APLdelta}NL3 TEXMACROS
+\item[Unused Local Names] %
+ PRINTING{\protect\APLunderbar}WIDTH
+{\APLbr}BEGIN{\protect\APLunderbar}ARRAY END{\protect\APLunderbar}ARRAY
+\item[Functions] %
+ TEXM LOCAL{\protect\APLunderbar}PAGE FNSLIST
+{\APLbr}{\protect\APLdelta}{\protect\APLdelta}FV PRTEX{\protect\APLunderbar}FN
+\item[System Functions] %
+ {\APLquad}NC {\APLquad}TS {\APLquad}IO {\APLquad}NL
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F644
+%
+\vspace{2mm}
+%
+% \input{F645}
+%
+%
+% F645
+%
+% F645
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\hspace*{1mm}%
+ 0 PRTEX{\protect\APLunderbar}WS calls TEXM
+{\APLbr}LOCAL{\protect\APLunderbar}PAGE FNSLIST
+{\APLbr}{\protect\APLdelta}{\protect\APLdelta}FV PRTEX{\protect\APLunderbar}FN
+\par%
+\hspace*{4mm}%
+ 1 FNSLIST calls APLTOTEX
+\par%
+\hspace*{4mm}%
+ 1 PRTEX{\protect\APLunderbar}FN calls TEXM APLFNSLINE
+{\APLbr}FNSFMT
+\par%
+\hspace*{7mm}%
+ 2 APLFNSLINE calls APLTOTEX
+\par%
+\par\end{scriptsize}}%
+%
+% end F645
+%
+\vspace{2mm}
+%
+% end F641
+%
+\subsection{Protocol\ %
+Internal
+}%
+\subsubsection{%
+{\protect\APLdelta}{\protect\APLdelta}FV
+}
+%
+% \input{F646}%
+%
+%
+% F646
+%
+% F646
+%
+% \input{F647}
+%
+%
+% F647
+%
+% F647
+
+{\parindent=0pt Method {\bf %
+{\protect\APLdelta}{\protect\APLdelta}FV
+} of class {\bf %
+APL2TEX
+} created %
+1991{\APLslash}3{\APLslash}11,21:26:2
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}return code{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLless}vector of text lines{\APLgreater}
+{\APLbr}{\protect\APLdelta}{\protect\APLdelta}FV {\APLless}file identifier{\APLgreater} {
+{\APLbr}\APLstile}\\\ {\APLless}vector of text lines{\APLgreater} {
+{\APLbr}\APLleftarrow} {\protect\APLdelta}{\protect\APLdelta}FV {
+{\APLbr}\APLless}file identifier{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+{\protect\APLdelta}{\protect\APLdelta}FV writes a vector of
+{\APLbr}text lines to a file with variable record length or
+{\APLbr}reads a file.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+%
+\protect\APLdelta\protect\APLdelta\APLF\APLV\APLspace
+ is system dependent.
+ It must be rewritten for other
+ implementations. This version is for IBM's APL2 under CMS.
+
+
+
+
+
+\par}%
+%
+% end F647
+%
+\vspace{2mm}
+%
+% \input{F648}
+%
+%
+% F648
+%
+% F648
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLA\APLR\APLG\APLspace\protect\APLdelta
+\protect\APLdelta\APLF\APLV\APLspace\APLF\APLN\APLsemicolon
+\protect\APLdelta\APLF\APLV
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLthree\APLspace\APLone\APLzero\APLspace
+\APLquad\APLN\APLA\APLspace\APLquote\protect\APLdelta\APLF
+\APLV\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLzero\APLequal\APLquad\APLN
+\APLC\APLspace\APLquote\APLA\APLR\APLG\APLquote\APLrightparen
+\APLslash\APLR\APLE\APLA\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLZ\APLleftarrow\APLA\APLR\APLG\APLspace\protect\APLdelta
+\APLF\APLV\APLspace\APLF\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLR\APLE\APLA\APLD\APLcolon\APLZ\APLleftarrow\protect
+\APLdelta\APLF\APLV\APLspace\APLF\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F648
+%
+\vspace{2mm}
+%
+% \input{F649}
+%
+%
+% F649
+%
+% F649
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+ ARG FN
+\item[Used Local Names] %
+ {\protect\APLdelta}FV
+\item[Unused Local Names] %
+
+\item[Functions] %
+
+\item[System Functions] %
+ {\APLquad}NA {\APLquad}NC
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+ READ
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F649
+%
+\vspace{2mm}
+%
+% \input{F650}
+%
+%
+% F650
+%
+% F650
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\par\end{scriptsize}}%
+%
+% end F650
+%
+\vspace{2mm}
+%
+% end F646
+%
+\subsubsection{%
+APLFNSLINE
+}
+%
+% \input{F651}%
+%
+%
+% F651
+%
+% F651
+%
+% \input{F652}
+%
+%
+% F652
+%
+% F652
+
+{\parindent=0pt Method {\bf %
+APLFNSLINE
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}11,18:31:8
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ APLFNSLINE {\APLless}text line{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+APLFNSLINE converts one line of APL code to a sequence of
+{\APLbr} \LaTeX\ macros.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+ APLFNSLINE appends the \LaTeX\ code for one line of an
+ APL function to the global variable RC. The line is
+ typeset in proportional spacing.
+
+
+
+
+
+\par}%
+%
+% end F652
+%
+\vspace{2mm}
+%
+% \input{F653}
+%
+%
+% F653
+%
+% F653
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLA\APLP\APLL\APLF\APLN\APLS\APLL\APLI\APLN\APLE\APLspace
+\APLA\APLsemicolon\APLF\APLL\APLsemicolon\APLF\APLR
+\APLsemicolon\APLL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLleftparen\APLF\APLL\APLspace\APLF\APLR\APLspace\APLL
+\APLrightparen\APLleftarrow\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLleftparen\APLepsilon\APLquote\APLslope\APLb\APLe\APLg\APLi\APLn
+\APLleftbrace\APLA\APLP\APLL\APLf\APLn\APLs\APLl\APLi\APLn\APLe
+\APLrightbrace\APLleftbrace\APLquote\APLcomma\APLleftparen
+\APLA\APLP\APLL\APLT\APLO\APLT\APLE\APLX\APLspace\APLF\APLL
+\APLrightparen\APLcomma\APLquote\APLrightbrace\APLleftbrace\APLquote
+\APLcomma\APLleftparen\APLA\APLP\APLL\APLT\APLO\APLT\APLE\APLX
+\APLspace\APLF\APLR\APLrightparen\APLcomma\APLquote
+\APLrightbrace\APLquote\APLrightparen\APLtilde\APLquote\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLA\APLP\APLL
+\APLT\APLO\APLT\APLE\APLX\APLleftparen\APLbar\APLplus\APLslash
+\APLupcaret\APLslope\APLquote\APLspace\APLquote\APLequal
+\APLcirclestile\APLL\APLrightparen\APLdownarrow\APLL\APLleftarrow
+\APLcomma\APLL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace\APLA\APLP\APLL\APLf
+\APLn\APLs\APLl\APLi\APLn\APLe\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F653
+%
+\vspace{2mm}
+%
+% \input{F654}
+%
+%
+% F654
+%
+% F654
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+
+\item[Arguments] %
+ A
+\item[Used Local Names] %
+ FL FR L
+\item[Unused Local Names] %
+
+\item[Functions] %
+ APLTOTEX
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+ RC
+\end{description}\end{scriptsize}\par}
+%
+% end F654
+%
+\vspace{2mm}
+%
+% \input{F655}
+%
+%
+% F655
+%
+% F655
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\hspace*{1mm}%
+ 0 APLFNSLINE calls APLTOTEX
+\par%
+\par\end{scriptsize}}%
+%
+% end F655
+%
+\vspace{2mm}
+%
+% end F651
+%
+\subsubsection{%
+APLLINE
+}
+%
+% \input{F656}%
+%
+%
+% F656
+%
+% F656
+%
+% \input{F657}
+%
+%
+% F657
+%
+% F657
+
+{\parindent=0pt Method {\bf %
+APLLINE
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}11,18:29:35
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ APLLINE {\APLless}text line{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+APLLINE typesets one line of text as a sequence of fixed
+{\APLbr} spaced \LaTeX\ macros.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+ APLLINE appends the \LaTeX\ code for one text line
+ to the global variable RC in fixed spacing.
+
+
+
+
+
+\par}%
+%
+% end F657
+%
+\vspace{2mm}
+%
+% \input{F658}
+%
+%
+% F658
+%
+% F658
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLA\APLP\APLL\APLL\APLI\APLN\APLE\APLspace\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftparen
+\APLquote\APLF\APLquote\APLspace\APLA\APLP\APLL\APLT\APLO\APLT\APLE
+\APLX\APLleftparen\APLbar\APLplus\APLslash\APLupcaret\APLslope
+\APLquote\APLspace\APLquote\APLequal\APLcirclestile\APLA
+\APLrightparen\APLdownarrow\APLA\APLleftarrow\APLcomma\APLA
+\APLrightparen\APLcomma\APLleftshoe\APLquote\APLslope\APLA\APLP\APLL
+\APLs\APLp\APLa\APLc\APLe\APLslope\APLp\APLa\APLr\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F658
+%
+\vspace{2mm}
+%
+% \input{F659}
+%
+%
+% F659
+%
+% F659
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+
+\item[Arguments] %
+ A
+\item[Used Local Names] %
+
+\item[Unused Local Names] %
+
+\item[Functions] %
+ APLTOTEX
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+ RC
+\end{description}\end{scriptsize}\par}
+%
+% end F659
+%
+\vspace{2mm}
+%
+% \input{F660}
+%
+%
+% F660
+%
+% F660
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\hspace*{1mm}%
+ 0 APLLINE calls APLTOTEX
+\par%
+\par\end{scriptsize}}%
+%
+% end F660
+%
+\vspace{2mm}
+%
+% end F656
+%
+\subsubsection{%
+APLTOTEX
+}
+%
+% \input{F661}%
+%
+%
+% F661
+%
+% F661
+%
+% \input{F662}
+%
+%
+% F662
+%
+% F662
+
+{\parindent=0pt Method {\bf %
+APLTOTEX
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}11,18:23:11
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}vector of lines{\APLgreater} {\APLleftarrow}
+{\APLbr}APLTOTEX {\APLless}line of text{\APLgreater} {\APLstile}\\\ {
+{\APLbr}\APLless}vector of lines{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLquote}F{\APLquote} APLTOTEX {\APLless}line of text{\APLgreater} {
+{\APLbr}\APLstile}\\\ {\APLless}vector of lines{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLquote}V{\APLquote} APLTOTEX {\APLless}line of
+{\APLbr}text{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+APLTOTEX translates a line of text into a sequence of
+{\APLbr} \LaTeX\ macro calls. The default is variable spacing ({
+{\APLbr}\APLquote}V{\APLquote}).\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+APLTOTEX inserts macros which allow line breaking of
+ very long APL lines. APLTOTEX converts the APL code to
+ \LaTeX\ macros. If fixed spacing is required, each macro
+ of the macro stream is wrapped into a fixed length box.
+ APLTOTEX formats the macro stream into lines
+ of approximately 80 characters.
+
+ {\bf Warning:}
+ This is a really bad one: asks for a blockwise filter
+ operator implementation. Should be rewritten.
+ Memoizing TEXM saves 250ms per call. (And this one is called
+ often. More savings possible by using simple homogenous arrays.)
+ Fixed and variable spacing should be done with different
+ translation tables.
+
+ Fixed spacing may cause \TeX\ memory overflow on some \TeX\
+ implemenations.
+
+
+
+
+
+\par}%
+%
+% end F662
+%
+\vspace{2mm}
+%
+% \input{F663}
+%
+%
+% F663
+%
+% F663
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLY\APLspace\APLA\APLP\APLL\APLT\APLO
+\APLT\APLE\APLX\APLspace\APLA\APLsemicolon\APLC\APLsemicolon\APLB
+\APLsemicolon\APLI\APLsemicolon\APLD\APLsemicolon\APLquad\APLI
+\APLO\APLsemicolon\APLuA\APLuL\APLuF\APLsemicolon\APLL
+\APLsemicolon\APLI\APLD\APLsemicolon\APLD\APLE\APLN\APLS\APLsemicolon
+\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLleftparen\APLI\APLD\APLspace\APLD\APLE\APLN\APLS
+\APLrightparen\APLleftarrow\APLone\APLfive\APLspace\APLfive
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtwo\APLnotequal\APLquad\APLN
+\APLC\APLspace\APLquote\APLY\APLquote\APLrightparen\APLslash
+\APLquote\APLY\APLleftarrow\APLquote\APLquote\APLV\APLquote
+\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLuA\APLuL\APLuF\APLleftarrow\APLquote\APLA\APLB\APLC\APLD
+\APLE\APLF\APLG\APLH\APLI\APLJ\APLK\APLL\APLM\APLN\APLO\APLbr
+\APLP\APLQ\APLR\APLS\APLT\APLbr\APLU\APLV\APLW\APLX\APLY\APLbr
+\APLZ\APLuA\APLuB\APLuC\APLuD\APLbr\APLuE\APLuF\APLuG\APLuH
+\APLuI\APLbr\APLuJ\APLuK\APLuL\APLuM\APLuN\APLbr\APLuO\APLuP\APLuQ
+\APLuR\APLuS\APLbr\APLuT\APLuU\APLuV\APLuW\APLuX\APLbr\APLuY
+\APLuZ\protect\APLdelta\protect\APLdeltaunderbar\protect
+\APLunderbar\APLbr\protect\APLoverbar\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLD\APLleftarrow\APLI\APLD\APLless\APLL\APLleftarrow
+\APLepsilon\APLrho\APLdieresis\APLB\APLleftarrow\APLleftparen\APLA
+\APLepsilon\APLuA\APLuL\APLuF\APLrightparen\APLleftshoe\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLzero\APLequal\APLrho\APLC
+\APLleftarrow\APLD\APLslash\APLB\APLrightparen\APLslash\APLE\APLN
+\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLL\APLleftarrow\APLD\APLslash\APLL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLC\APLleftarrow\APLepsilon\APLplus\APLslash\APLE
+\APLleftarrow\APLC\APLepsilonunderbar\APLdieresis\APLleftshoe\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLD\APLleftarrow\APLleftparen\APLD\APLE\APLN\APLS\APLtimes
+\APLiota\APLdownstile\APLleftparen\APLupstile\APLslash\APLL
+\APLleftarrow\APLL\APLbar\APLI\APLD\APLrightparen\APLdivide\APLD
+\APLE\APLN\APLS\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLB\APLleftarrow\APLleftparen\APLC\APLtilde\APLzero
+\APLrightparen\APLslash\APLleftparen\APLleftparen\protect\APLoverbar
+\APLone\APLtimes\APLI\APLD\APLrightparen\APLcirclestile\APLC
+\APLgreater\APLzero\APLrightparen\APLslash\APLiota\APLrho\APLC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLL\APLleftarrow\APLleftparen\APLplus\APLslash\APLdieresis
+\APLE\APLrightparen\APLslash\APLL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLD\APLleftarrow\APLleftparen\APLC\APLleftarrow\APLB
+\APLjot\APLdot\APLplus\APLzero\APLcomma\APLD\APLrightparen\APLless
+\APLleftbracket\APLone\APLrightbracket\APLleftparen\APLB\APLplus
+\APLL\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLC\APLleftarrow\APLleftparen\APLcomma\APLD\APLrightparen
+\APLslash\APLcomma\APLC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLI\APLleftarrow\APLleftparen\APLrho\APLA\APLrightparen
+\APLrho\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLI\APLleftbracket\APLC\APLrightbracket\APLleftarrow
+\APLleftparen\APLrho\APLC\APLrightparen\APLrho\APLtwo
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLA\APLleftarrow\APLI\APLslash\APLA\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLupshoejot\APLspace\APLR\APLE\APLP\APLL\APLI
+\APLC\APLA\APLT\APLE\APLspace\APLI\APLN\APLS\APLT\APLE\APLA
+\APLD\APLspace\APLO\APLF\APLspace\APLD\APLE\APLR\APLI\APLV\APLI
+\APLN\APLG\APLspace\APLS\APLC\APLA\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLE\APLN\APLD\APLcolon\APLA\APLleftarrow\APLT\APLE\APLX
+\APLM\APLA\APLC\APLR\APLO\APLS\APLleftbracket\APLquad\APLA\APLV
+\APLiota\APLA\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLY\APLequal\APLquote\APLF
+\APLquote\APLrightparen\APLslash\APLquote\APLA\APLleftarrow\APLF
+\APLI\APLX\APLE\APLD\APLS\APLP\APLA\APLC\APLI\APLN\APLG
+\APLdieresis\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLleftparen\APLrho\APLC
+\APLrightparen\APLequal\APLzero\APLrightparen\APLslash\APLJ\APLU\APLM
+\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\APLA\APLleftbracket\APLleftparen\APLzero\APLcomma\protect
+\APLoverbar\APLone\APLdownarrow\APLiota\APLrho\APLC
+\APLrightparen\APLplus\APLC\APLrightbracket\APLleftarrow\APLleftparen
+\APLrho\APLC\APLrightparen\APLrho\APLleftshoe\APLquote\APLslope\APLA
+\APLP\APLL\APLb\APLr\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\APLJ\APLU\APLM\APLP\APLcolon\APLC\APLleftarrow\APLleftparen
+\APLquote\APLslope\APLquote\APLequal\APLZ\APLrightparen
+\APLslash\APLiota\APLrho\APLZ\APLleftarrow\APLleftparen\APLepsilon
+\APLA\APLrightparen\APLtilde\APLquote\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\APLD\APLleftarrow\APLleftparen\APLiota\APLdownstile
+\APLleftparen\APLrho\APLZ\APLrightparen\APLdivide\APLsix\APLtwo
+\APLrightparen\APLtimes\APLsix\APLtwo\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLspace\APLT
+\APLH\APLE\APLspace\APLL\APLO\APLN\APLG\APLE\APLS\APLT\APLspace
+\APLL\APLI\APLN\APLE\APLspace\APLL\APLE\APLN\APLG\APLT\APLH
+\APLspace\APLS\APLH\APLO\APLU\APLL\APLD\APLspace\APLB\APLE\APLspace
+\APLL\APLE\APLS\APLS\APLspace\APLT\APLH\APLE\APLN\APLspace
+\APLeight\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\APLB\APLleftarrow\APLC\APLleftbracket\APLplus\APLslashbar
+\APLrightshoe\APLC\APLless\APLdieresis\APLleftshoe\APLD
+\APLrightbracket\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLspace\APLR
+\APLA\APLI\APLS\APLE\APLspace\APLA\APLN\APLD\APLspace\APLD
+\APLI\APLS\APLC\APLL\APLO\APLS\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\APLI\APLleftarrow\APLleftparen\APLrho\APLZ\APLrightparen
+\APLrho\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLI\APLleftbracket\APLB\APLrightbracket\APLleftarrow
+\APLleftparen\APLrho\APLB\APLrightparen\APLrho\APLtwo
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLsix\APLrightbracket}{}
+\APLZ\APLleftarrow\APLI\APLslash\APLZ\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLupshoejot\APLspace\APLR\APLE\APLP\APLL\APLI
+\APLC\APLA\APLT\APLE\APLspace\APLI\APLN\APLS\APLT\APLE\APLA
+\APLD\APLspace\APLO\APLF\APLspace\APLD\APLE\APLR\APLI\APLV\APLI
+\APLN\APLG\APLspace\APLS\APLC\APLA\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLseven\APLrightbracket}{}
+\APLZ\APLleftbracket\APLI\APLleftarrow\APLleftparen
+\APLleftparen\APLzero\APLcomma\protect\APLoverbar\APLone\APLdownarrow
+\APLiota\APLrho\APLB\APLrightparen\APLrightparen\APLplus\APLB
+\APLrightbracket\APLleftarrow\APLleftparen\APLrho\APLB
+\APLrightparen\APLrho\APLleftshoe\APLquote\APLspace\APLquote\APLquote
+\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLeight\APLrightbracket}{}
+\APLZ\APLleftarrow\APLdowntackjot\APLepsilon\APLZ
+\APLleftarrow\APLquote\APLquote\APLquote\APLquote\APLcomma\APLZ\APLcomma
+\APLquote\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLnine\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLzero\APLequal\APLrho\APLB
+\APLrightparen\APLslash\APLquote\APLZ\APLleftarrow\APLleftshoe
+\APLZ\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F663
+%
+\vspace{2mm}
+%
+% \input{F664}
+%
+%
+% F664
+%
+% F664
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+ Y A
+\item[Used Local Names] %
+ C B I D {\APLquad}IO {\APLuA}{\APLuL}{\APLuF} L ID DENS E
+\item[Unused Local Names] %
+
+\item[Functions] %
+
+\item[System Functions] %
+ {\APLquad}NC {\APLquad}AV
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+ END JUMP
+\item[Undefined Names] %
+ TEXMACROS
+\end{description}\end{scriptsize}\par}
+%
+% end F664
+%
+\vspace{2mm}
+%
+% \input{F665}
+%
+%
+% F665
+%
+% F665
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\par\end{scriptsize}}%
+%
+% end F665
+%
+\vspace{2mm}
+%
+% end F661
+%
+\subsubsection{%
+APLTOTEX{\protect\APLunderbar}S
+}
+%
+% \input{F666}%
+%
+%
+% F666
+%
+% F666
+%
+% \input{F667}
+%
+%
+% F667
+%
+% F667
+
+{\parindent=0pt Method {\bf %
+APLTOTEX{\protect\APLunderbar}S
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}15,11:52:22
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}vector of lines{\APLgreater} {\APLleftarrow}
+{\APLbr}APLTOTEX{\protect\APLunderbar}S {\APLless}line of text{
+{\APLbr}\APLgreater} {\APLstile}\\\ {\APLless}vector of lines{\APLgreater} {
+{\APLbr}\APLleftarrow} {\APLquote}F{\APLquote}
+{\APLbr}APLTOTEX{\protect\APLunderbar}S {\APLless}line of text{\APLgreater} {\APLstile}\\\ {
+{\APLbr}\APLless}vector of lines{\APLgreater} {\APLleftarrow} {
+{\APLbr}\APLquote}V{\APLquote} APLTOTEX{\protect\APLunderbar}S {
+{\APLbr}\APLless}line of text{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+APLTOTEX{\protect\APLunderbar}S translates a line of text
+{\APLbr}into a sequence of latex macro calls, characters and
+{\APLbr}numbers. This function should be used for
+{\APLbr}preprocessing text which is interleaved with a few APL symbols
+{\APLbr}and short APL expressions. The default is variable
+{\APLbr}spacing ({\APLquote}V{\APLquote}), for fixed spacing use {
+{\APLbr}\APLquote}F{\APLquote}.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+This is a really bad one: asks for a blockwise filter
+ operator implementation.
+ Memoization of
+\APLT\APLE\APLX\APLM\protect\APLunderbar\APLS\APLspace
+ saves 250ms per call.
+ Fixed spacing should be abolished.
+ Some funny (and unexplained) things occur.
+ Like APLTOTEX, this function requires a redesign.
+ Fixed spacing (
+\APLquote\APLF\APLquote\APLspace
+ )
+ can cause TEX memory overflow.
+
+
+
+
+
+\par}%
+%
+% end F667
+%
+\vspace{2mm}
+%
+% \input{F668}
+%
+%
+% F668
+%
+% F668
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLY\APLspace\APLA\APLP\APLL\APLT\APLO
+\APLT\APLE\APLX\protect\APLunderbar\APLS\APLspace\APLA
+\APLsemicolon\APLC\APLsemicolon\APLB\APLsemicolon\APLI\APLsemicolon\APLD
+\APLsemicolon\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS
+\APLsemicolon\APLquad\APLI\APLO\APLsemicolon\APLF\APLR\APLA\APLG
+\APLI\APLL\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtwo\APLnotequal\APLquad\APLN
+\APLC\APLspace\APLquote\APLY\APLquote\APLrightparen\APLslash
+\APLquote\APLY\APLleftarrow\APLquote\APLquote\APLV\APLquote
+\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\protect\APLunderbar\APLS\APLspace\APLquote
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLA\APLleftarrow\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO
+\APLS\APLleftbracket\APLquad\APLA\APLV\APLiota\APLA
+\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLY\APLequal\APLquote\APLF
+\APLquote\APLrightparen\APLslash\APLquote\APLA\APLleftarrow\APLF
+\APLI\APLX\APLE\APLD\APLS\APLP\APLA\APLC\APLI\APLN\APLG
+\APLdieresis\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLupshoejot\APLC\APLleftarrow\APLleftparen\APLleftparen
+\APLquote\APLslope\APLA\APLP\APLL\APLquote\APLepsilonunderbar
+\APLZ\APLrightparen\APLdowncaret\APLleftparen\APLquote\APLspace
+\APLquote\APLequal\APLZ\APLrightparen\APLrightparen\APLslash
+\APLiota\APLrho\APLZ\APLleftarrow\APLepsilon\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLC\APLleftarrow\APLleftparen\APLquote\APLslope\APLA\APLP
+\APLL\APLquote\APLepsilonunderbar\APLZ\APLrightparen\APLslash
+\APLiota\APLrho\APLZ\APLleftarrow\APLepsilon\APLA\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLI\APLN\APLS\APLE\APLR\APLT\APLspace\APLP\APLO\APLS
+\APLI\APLT\APLI\APLO\APLN\APLspace\APLB\APLE\APLF\APLO\APLR
+\APLE\APLspace\APLslope
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLC\APLleftarrow\APLC\APLcomma\APLleftparen\APLzero
+\APLcomma\protect\APLoverbar\APLone\APLdownarrow\APLleftparen
+\APLquote\APLspace\APLquote\APLequal\APLZ\APLrightparen\APLrightparen
+\APLslash\APLiota\APLrho\APLZ\APLspace\APLspace\APLspace
+\APLspace\APLupshoejot\APLspace\APLI\APLN\APLS\APLE\APLR\APLT
+\APLspace\APLP\APLO\APLS\APLI\APLT\APLI\APLO\APLN\APLspace\APLA\APLF
+\APLT\APLE\APLR\APLspace\APLS\APLP\APLA\APLC\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLC\APLleftarrow\APLC\APLleftbracket\APLdeltastile\APLC
+\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLC\APLleftarrow\APLC\APLtilde\APLF\APLR\APLA\APLG\APLI
+\APLL\APLE\APLleftarrow\APLleftparen\APLleftparen\APLquote
+\APLslope\APLA\APLP\APLL\APLu\APLn\APLd\APLe\APLr\APLb\APLa\APLr
+\APLquote\APLepsilonunderbar\APLZ\APLrightparen\APLdowncaret
+\APLleftparen\APLquote\APLslope\APLA\APLP\APLL\APLo\APLv\APLe\APLr
+\APLb\APLa\APLr\APLquote\APLepsilonunderbar\APLZ\APLrightparen
+\APLdowncaret\APLleftparen\APLquote\APLslope\APLA\APLP\APLL\APLd
+\APLe\APLl\APLt\APLa\APLquote\APLepsilonunderbar\APLZ
+\APLrightparen\APLdowncaret\APLleftparen\APLquote\APLslope\APLslope
+\APLslope\APLspace\APLquote\APLepsilonunderbar\APLZ\APLrightparen
+\APLrightparen\APLslash\APLiota\APLrho\APLZ
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLD\APLleftarrow\APLleftparen\APLiota\APLdownstile
+\APLleftparen\APLrho\APLZ\APLrightparen\APLdivide\APLsix\APLtwo
+\APLrightparen\APLtimes\APLsix\APLtwo
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLB\APLleftarrow\APLC\APLleftbracket\APLplus\APLslashbar
+\APLrightshoe\APLC\APLless\APLdieresis\APLleftshoe\APLD
+\APLrightbracket\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLspace\APLR
+\APLA\APLI\APLS\APLE\APLspace\APLA\APLN\APLD\APLspace\APLD
+\APLI\APLS\APLC\APLL\APLO\APLS\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLI\APLleftarrow\APLleftparen\APLrho\APLZ\APLrightparen
+\APLrho\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLI\APLleftbracket\APLB\APLrightbracket\APLleftarrow
+\APLleftparen\APLrho\APLB\APLrightparen\APLrho\APLtwo
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLZ\APLleftarrow\APLI\APLslash\APLZ\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLupshoejot\APLspace\APLR\APLE\APLP\APLL\APLI
+\APLC\APLA\APLT\APLE\APLspace\APLA\APLN\APLD\APLspace\APLD
+\APLE\APLR\APLI\APLV\APLI\APLN\APLG\APLspace\APLS\APLC\APLA\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLZ\APLleftbracket\APLI\APLleftarrow\APLleftparen
+\APLleftparen\APLzero\APLcomma\protect\APLoverbar\APLone\APLdownarrow
+\APLiota\APLrho\APLB\APLrightparen\APLrightparen\APLplus\APLB
+\APLrightbracket\APLleftarrow\APLleftparen\APLrho\APLB
+\APLrightparen\APLrho\APLleftshoe\APLquote\APLspace\APLquote\APLquote
+\APLspace\APLquote\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLb\APLr\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLZ\APLleftarrow\APLdowntackjot\APLepsilon\APLZ
+\APLleftarrow\APLquote\APLquote\APLquote\APLquote\APLcomma\APLZ\APLcomma
+\APLquote\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLzero\APLequal\APLrho\APLB
+\APLrightparen\APLslash\APLquote\APLZ\APLleftarrow\APLleftshoe
+\APLZ\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F668
+%
+\vspace{2mm}
+%
+% \input{F669}
+%
+%
+% F669
+%
+% F669
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+ Y A
+\item[Used Local Names] %
+ C B I D TEXMACROS {\APLquad}IO FRAGILE
+\item[Unused Local Names] %
+
+\item[Functions] %
+ TEXM{\protect\APLunderbar}S
+\item[System Functions] %
+ {\APLquad}NC {\APLquad}AV
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F669
+%
+\vspace{2mm}
+%
+% \input{F670}
+%
+%
+% F670
+%
+% F670
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\hspace*{1mm}%
+ 0 APLTOTEX{\protect\APLunderbar}S calls
+{\APLbr}TEXM{\protect\APLunderbar}S
+\par%
+\par\end{scriptsize}}%
+%
+% end F670
+%
+\vspace{2mm}
+%
+% end F666
+%
+\subsubsection{%
+DISPLAY
+}
+%
+% \input{F671}%
+%
+%
+% F671
+%
+% F671
+%
+% \input{F672}
+%
+%
+% F672
+%
+% F672
+
+{\parindent=0pt Method {\bf %
+DISPLAY
+} of class {\bf %
+APL2TEX
+} created %
+1991{\APLslash}3{\APLslash}28,15:5:47
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}boxed representation of array{\APLgreater} {
+{\APLbr}\APLleftarrow} DISPLAY {\APLless}array{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+DISPLAY draws a boxed diagram of any nested array.
+{\APLbr}DISPLAY is functional equivalent to IBM{\APLquote}s
+{\APLbr}version.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+If you do not like this version, substitute
+ with DISPLAY from the workspace DISPLAY of library 1
+ from IBM.
+
+
+
+
+
+\par}%
+%
+% end F672
+%
+\vspace{2mm}
+%
+% \input{F673}
+%
+%
+% F673
+%
+% F673
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLD\APLI\APLS\APLP\APLL\APLA\APLY
+\APLspace\APLA\APLsemicolon\APLquad\APLI\APLO\APLsemicolon\APLS\APLH
+\APLA\APLP\APLE\APLsemicolon\APLD\APLE\APLP\APLT\APLH
+\APLsemicolon\APLT\APLY\APLP\APLE\APLsemicolon\APLD\APLI\APLM\APLE\APLN
+\APLS\APLI\APLO\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLS\APLH\APLA\APLP\APLE\APLleftarrow\APLrho\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLzero\APLnotequal\APLD\APLE
+\APLP\APLT\APLH\APLleftarrow\APLequalunderbar\APLA\APLrightparen
+\APLslash\APLN\APLO\APLT\protect\APLunderbar\APLS\APLI\APLM
+\APLP\APLL\APLE\protect\APLunderbar\APLS\APLC\APLA\APLL\APLbr\APLA
+\APLR
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLS\APLI\APLM\APLP\APLL\APLE\protect\APLunderbar\APLS\APLC
+\APLA\APLL\APLA\APLR\APLcolon\APLZ\APLleftarrow\APLquote
+\APLspace\APLquote\APLcomma\APLleftbracket\APLone\APLrightbracket
+\APLleftparen\APLquote\APLspace\APLquote\APLcomma\APLleftbracket
+\APLzero\APLrightbracket\APLleftparen\APLleftparen\APLtwo
+\APLrho\APLone\APLcomma\APLleftparen\APLrho\APLA\APLrightparen
+\APLrightparen\APLrho\APLA\APLleftarrow\APLuptackjot\APLA
+\APLrightparen\APLcomma\APLleftbracket\APLzero\APLrightbracket
+\APLleftparen\APLquote\APLbar\APLspace\APLquote\APLrightparen
+\APLleftbracket\APLzero\APLequal\APLuparrow\APLzero\APLrho\APLA
+\APLrightbracket\APLrightparen\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLquote\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLN\APLO\APLT\protect\APLunderbar\APLS\APLI\APLM\APLP\APLL
+\APLE\protect\APLunderbar\APLS\APLC\APLA\APLL\APLbr\APLA\APLR
+\APLcolon\APLrightarrow\APLleftparen\APLtilde\APLzero
+\APLepsilon\APLS\APLH\APLA\APLP\APLE\APLrightparen\APLslash\APLN\APLO
+\APLT\protect\APLunderbar\APLE\APLM\APLP\APLT\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLE\APLM\APLP\APLT\APLY\APLcolon\APLA\APLleftarrow
+\APLleftparen\APLone\APLupstile\APLrho\APLA\APLrightparen\APLrho
+\APLleftshoe\APLuparrow\APLA\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLP\APLR\APLO\APLT\APLO\APLT\APLY\APLP\APLE\APLS\APLspace
+\APLO\APLF\APLspace\APLE\APLM\APLP\APLT\APLI\APLE\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLN\APLO\APLT\protect\APLunderbar\APLE\APLM\APLP\APLT\APLY
+\APLcolon\APLrightarrow\APLleftparen\APLone\APLequal\APLD\APLE
+\APLP\APLT\APLH\APLrightparen\APLslash\APLS\APLI\APLM\APLP
+\APLL\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLG\APLE\APLN\APLE\APLR\APLA\APLL\APLI\APLZ\APLE\APLD
+\APLcolon\APLA\APLleftarrow\APLleftparen\APLZ\APLdowncaret\APLtilde
+\APLone\APLcirclestile\APLZ\APLleftarrow\APLA\APLdowncaret
+\APLdot\APLnotequal\APLquote\APLspace\APLquote\APLrightparen
+\APLslash\APLleftbracket\APLzero\APLrightbracket\APLA\APLleftarrow
+\APLleftparen\APLZ\APLdowncaret\APLone\APLcomma\protect
+\APLoverbar\APLone\APLdownarrow\APLZ\APLleftarrow\APLquote\APLspace
+\APLquote\APLdowncaret\APLdot\APLnotequal\APLA\APLrightparen
+\APLslash\APLA\APLleftarrow\APLuptackjot\APLD\APLI\APLS\APLP\APLL
+\APLA\APLY\APLdieresis\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLupshoejot\APLG\APLE\APLN\APLE\APLR\APLA\APLL\APLI\APLZ
+\APLE\APLD\APLcolon\APLA\APLleftarrow\APLleftparen\APLZ
+\APLdowncaret\APLone\APLdownarrow\APLone\APLcirclestile\APLone\APLcomma
+\APLZ\APLleftarrow\APLA\APLdowncaret\APLdot\APLnotequal
+\APLquote\APLspace\APLquote\APLrightparen\APLslash\APLleftbracket
+\APLzero\APLrightbracket\APLA\APLleftarrow\APLleftparen\APLZ
+\APLdowncaret\APLone\APLcomma\protect\APLoverbar\APLone\APLdownarrow
+\APLZ\APLleftarrow\APLquote\APLspace\APLquote\APLdowncaret
+\APLdot\APLnotequal\APLA\APLrightparen\APLslash\APLA\APLleftarrow
+\APLuptackjot\APLD\APLI\APLS\APLP\APLL\APLA\APLY\APLdieresis
+\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLT\APLY\APLP\APLE\APLleftarrow\APLquote\APLepsilon
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLrightarrow\APLB\APLO\APLX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLS\APLI\APLM\APLP\APLL\APLE\APLcolon\APLT\APLY\APLP\APLE
+\APLleftarrow\APLleftparen\APLquote\APLtilde\APLbar\APLplus
+\APLquote\APLrightparen\APLleftbracket\protect\APLoverbar\APLone
+\APLplus\APLtwo\APLdowntack\APLleftparen\APLzero\APLspace\APLone
+\APLrightparen\APLepsilon\APLleftparen\APLzero\APLequal
+\APLuparrow\APLzero\APLrho\APLleftshoe\APLA\APLrightparen
+\APLrightbracket\APLspace\APLupshoejot\APLspace\APLC\APLH\APLA\APLR
+\APLcomma\APLspace\APLN\APLU\APLM\APLE\APLR\APLI\APLC\APLcomma
+\APLspace\APLM\APLI\APLX\APLE\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLB\APLO\APLX\APLcolon\APLD\APLI\APLM\APLE\APLN\APLS\APLI
+\APLO\APLN\APLleftarrow\APLleftparen\APLleftparen\APLquote
+\APLdownarrow\APLcirclestile\APLquote\APLrightparen\APLleftbracket
+\APLzero\APLequal\protect\APLoverbar\APLone\APLdownarrow\APLS
+\APLH\APLA\APLP\APLE\APLrightbracket\APLrightparen\APLcomma
+\APLleftparen\APLleftparen\APLquote\APLrightarrow\APLcirclebar
+\APLquote\APLrightparen\APLleftbracket\APLzero\APLequal\protect
+\APLoverbar\APLone\APLuparrow\APLS\APLH\APLA\APLP\APLE
+\APLrightbracket\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLleftparen\APLzero\APLspace
+\APLone\APLspace\APLtwo\APLrightparen\APLequal\APLrho\APLS\APLH
+\APLA\APLP\APLE\APLrightparen\APLslash\APLS\APLC\APLA\APLL\APLA
+\APLR\APLcomma\APLV\APLE\APLC\APLT\APLO\APLR\APLcomma\APLM\APLA
+\APLT\APLR\APLI\APLX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLH\APLI\APLG\APLH\APLE\APLR\APLcolon\APLZ\APLleftarrow
+\APLleftparen\APLleftparen\APLleftparen\APLtwo\APLplus\APLuparrow
+\APLrho\APLA\APLrightparen\APLcomma\protect\APLoverbar\APLone
+\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE\APLrightparen\APLrho
+\APLquote\APLstile\APLquote\APLrightparen\APLcomma
+\APLleftbracket\APLone\APLrightbracket\APLleftparen\APLquote\APLbar\APLquote
+\APLcomma\APLleftbracket\APLzero\APLrightbracket\APLleftparen
+\APLA\APLleftarrow\APLzero\APLspace\APLone\APLdownarrow\APLzero
+\APLspace\protect\APLoverbar\APLone\APLdownarrow\APLuptackjot
+\APLleftshoe\APLA\APLrightparen\APLcomma\APLleftbracket\APLzero
+\APLrightbracket\APLquote\APLbar\APLquote\APLrightparen
+\APLcomma\APLleftbracket\APLone\APLrightbracket\APLquote\APLstile
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLZ\APLleftbracket\APLleftparen\APLzero\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLone\APLuparrow\APLrho
+\APLZ\APLrightparen\APLrightparen\APLsemicolon\APLleftparen
+\APLleftparen\APLiota\APLrho\APLS\APLH\APLA\APLP\APLE
+\APLrightparen\APLcomma\protect\APLoverbar\APLone\APLplus\protect
+\APLoverbar\APLone\APLuparrow\APLrho\APLZ\APLrightparen\APLrightbracket
+\APLleftarrow\APLleftparen\APLtwo\APLcomma\APLleftparen\APLone
+\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE\APLrightparen
+\APLrightparen\APLrho\APLleftparen\APLleftparen\protect\APLoverbar
+\APLone\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE\APLrightparen
+\APLrho\APLquote\APLdot\APLquote\APLrightparen\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLuparrow\APLD\APLI\APLM\APLE
+\APLN\APLS\APLI\APLO\APLN\APLrightparen\APLcomma\APLquote\APLdot
+\APLquote\APLcomma\APLleftparen\APLleftparen\protect\APLoverbar
+\APLone\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE\APLrightparen
+\APLrho\APLquote\APLquote\APLquote\APLquote\APLrightparen
+\APLcomma\APLT\APLY\APLP\APLE\APLcomma\APLquote\APLquote\APLquote
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLZ\APLleftbracket\APLone\APLsemicolon\APLiota\protect
+\APLoverbar\APLone\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE
+\APLrightbracket\APLleftarrow\protect\APLoverbar\APLone\APLdownarrow
+\APLD\APLI\APLM\APLE\APLN\APLS\APLI\APLO\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\APLM\APLA\APLT\APLR\APLI\APLX\APLcolon\APLZ\APLleftarrow
+\APLleftparen\APLquote\APLstile\APLquote\APLrightparen\APLcomma
+\APLleftbracket\APLone\APLrightbracket\APLleftparen\APLquote
+\APLbar\APLquote\APLcomma\APLleftbracket\APLzero\APLrightbracket
+\APLleftparen\APLA\APLleftarrow\APLuptackjot\APLA\APLrightparen
+\APLcomma\APLleftbracket\APLzero\APLrightbracket\APLquote
+\APLbar\APLquote\APLrightparen\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLquote\APLstile\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\APLZ\APLleftbracket\APLleftparen\APLzero\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLone\APLuparrow\APLrho
+\APLZ\APLrightparen\APLrightparen\APLsemicolon\APLleftparen
+\APLleftparen\APLzero\APLspace\APLone\APLrightparen\APLcomma
+\protect\APLoverbar\APLone\APLplus\protect\APLoverbar\APLone
+\APLuparrow\APLrho\APLZ\APLrightparen\APLrightbracket\APLleftarrow
+\APLtwo\APLspace\APLthree\APLrho\APLquote\APLdot\APLquote
+\APLcomma\APLleftparen\protect\APLoverbar\APLone\APLuparrow\APLD\APLI
+\APLM\APLE\APLN\APLS\APLI\APLO\APLN\APLrightparen\APLcomma
+\APLquote\APLdot\APLquote\APLquote\APLquote\APLcomma\APLT\APLY\APLP
+\APLE\APLcomma\APLquote\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\APLZ\APLleftbracket\APLone\APLsemicolon\APLzero
+\APLrightbracket\APLleftarrow\protect\APLoverbar\APLone\APLdownarrow\APLD
+\APLI\APLM\APLE\APLN\APLS\APLI\APLO\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\APLV\APLE\APLC\APLT\APLO\APLR\APLcolon\APLZ\APLleftarrow
+\APLquote\APLstile\APLquote\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLleftparen\APLquote\APLbar\APLquote\APLcomma
+\APLleftbracket\APLzero\APLrightbracket\APLleftparen\APLleftparen
+\protect\APLoverbar\APLtwo\APLuparrow\APLone\APLcomma
+\APLleftparen\APLrho\APLA\APLrightparen\APLrightparen\APLrho\APLA
+\APLleftarrow\APLuptackjot\APLA\APLrightparen\APLcomma\APLleftbracket
+\APLzero\APLrightbracket\APLquote\APLbar\APLquote\APLrightparen
+\APLcomma\APLleftbracket\APLone\APLrightbracket\APLquote
+\APLstile\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLZ\APLleftbracket\APLleftparen\APLzero\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLone\APLuparrow\APLrho
+\APLZ\APLrightparen\APLrightparen\APLsemicolon\APLleftparen
+\APLleftparen\APLzero\APLspace\APLone\APLrightparen\APLcomma
+\protect\APLoverbar\APLone\APLplus\protect\APLoverbar\APLone
+\APLuparrow\APLrho\APLZ\APLrightparen\APLrightbracket\APLleftarrow
+\APLtwo\APLspace\APLthree\APLrho\APLquote\APLdot\APLquote
+\APLcomma\APLD\APLI\APLM\APLE\APLN\APLS\APLI\APLO\APLN\APLcomma
+\APLquote\APLdot\APLquote\APLquote\APLquote\APLcomma\APLT\APLY\APLP
+\APLE\APLcomma\APLquote\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLsix\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLseven\APLrightbracket}{}
+\APLS\APLC\APLA\APLL\APLA\APLR\APLcolon\APLZ\APLleftarrow
+\APLquote\APLstile\APLquote\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLleftparen\APLquote\APLbar\APLquote\APLcomma
+\APLleftbracket\APLzero\APLrightbracket\APLA\APLcomma\APLleftbracket
+\APLzero\APLrightbracket\APLquote\APLbar\APLquote
+\APLrightparen\APLcomma\APLleftbracket\APLone\APLrightbracket\APLquote
+\APLstile\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLeight\APLrightbracket}{}
+\APLZ\APLleftbracket\APLleftparen\APLzero\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLone\APLuparrow\APLrho
+\APLZ\APLrightparen\APLrightparen\APLsemicolon\APLleftparen
+\APLleftparen\APLzero\APLspace\APLone\APLrightparen\APLcomma
+\protect\APLoverbar\APLone\APLplus\protect\APLoverbar\APLone
+\APLuparrow\APLrho\APLZ\APLrightparen\APLrightbracket\APLleftarrow
+\APLtwo\APLspace\APLthree\APLrho\APLquote\APLdot\APLbar\APLdot
+\APLquote\APLquote\APLquote\APLcomma\APLT\APLY\APLP\APLE\APLcomma
+\APLquote\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLnine\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F673
+%
+\vspace{2mm}
+%
+% \input{F674}
+%
+%
+% F674
+%
+% F674
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+ A
+\item[Used Local Names] %
+ {\APLquad}IO SHAPE DEPTH TYPE DIMENSION
+\item[Unused Local Names] %
+
+{\APLbr}
+\item[Functions] %
+ MATRIX
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+{\APLbr}NOT{\protect\APLunderbar}SIMPLE{\protect\APLunderbar}SCALAR SIMPLE{\protect\APLunderbar}SCALAR
+{\APLbr}NOT{\protect\APLunderbar}EMPTY EMPTY SIMPLE GENERALIZED BOX SCALAR VECTOR HIGHER
+\item[Undefined Names] %
+ DISPLAY
+\end{description}\end{scriptsize}\par}
+%
+% end F674
+%
+\vspace{2mm}
+%
+% \input{F675}
+%
+%
+% F675
+%
+% F675
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\hspace*{1mm}%
+ 0 DISPLAY calls MATRIX
+\par%
+\hspace*{4mm}%
+ 1 MATRIX is implemented in {\protect\APLdelta}BASE
+\par%
+\par\end{scriptsize}}%
+%
+% end F675
+%
+\vspace{2mm}
+%
+% end F671
+%
+\subsubsection{%
+FIXEDSPACING
+}
+%
+% \input{F676}%
+%
+%
+% F676
+%
+% F676
+%
+% \input{F677}
+%
+%
+% F677
+%
+% F677
+
+{\parindent=0pt Method {\bf %
+FIXEDSPACING
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}11,18:14:51
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}boxed letter{\APLgreater} {\APLleftarrow}
+{\APLbr}FIXEDSPACING {\APLless}letter{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+FIXEDSPACING boxes each letter in order to simulate equal
+{\APLbr} spaced typing.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+ {\bf Warning:} The current \LaTeX\ definition of \APLmb\
+ may cause a \TeX\ memory overflow. Two remedies: generate
+ \TeX\ with a larger memory or find a better macro definition.
+
+
+
+
+
+\par}%
+%
+% end F677
+%
+\vspace{2mm}
+%
+% \input{F678}
+%
+%
+% F678
+%
+% F678
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLI\APLX\APLE\APLD\APLS\APLP\APLA
+\APLC\APLI\APLN\APLG\APLspace\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLb\APLleftbrace\APLquote\APLcomma\APLA\APLcomma\APLquote
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F678
+%
+\vspace{2mm}
+%
+% \input{F679}
+%
+%
+% F679
+%
+% F679
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+ A
+\item[Used Local Names] %
+
+\item[Unused Local Names] %
+
+\item[Functions] %
+
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F679
+%
+\vspace{2mm}
+%
+% \input{F680}
+%
+%
+% F680
+%
+% F680
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\par\end{scriptsize}}%
+%
+% end F680
+%
+\vspace{2mm}
+%
+% end F676
+%
+\subsubsection{%
+FNSFMT
+}
+%
+% \input{F681}%
+%
+%
+% F681
+%
+% F681
+%
+% \input{F682}
+%
+%
+% F682
+%
+% F682
+
+{\parindent=0pt Method {\bf %
+FNSFMT
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}11,18:11:27
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}vector representation{\APLgreater} {
+{\APLbr}\APLleftarrow} FNSFMT {\APLless}canonical representation{
+{\APLbr}\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+FNSFMT translates the canonical function representation to
+{\APLbr} the vector representation of the function.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+The vector representation corresponds to the way the
+ function is displayed by the standard del-editor:
+ A
+\APLdel\APLspace
+ in front of the function
+ header and a
+\APLdel\APLspace
+ in the last line.
+ Each line preceded by the line number in square brackets
+ e.g.
+\APLleftbracket\APLone\APLrightbracket\APLspace
+ \dots
+
+ Each line is a nested array:
+ \begin{itemize}
+ \item 1-st element:
+\APLleftbracket\APLless\APLl\APLi\APLn\APLe\APLn\APLu\APLm
+\APLb\APLe\APLr\APLgreater\APLrightbracket\APLspace\APLstile
+\APLspace\APLless\APLe\APLm\APLp\APLt\APLy\APLgreater\APLspace
+
+ \item 2-nd element:
+\APLless\APLe\APLm\APLp\APLt\APLy\APLgreater\APLspace
+\APLstile\APLspace\APLdel\APLspace
+
+ \item 3-rd element:
+\APLless\APLl\APLi\APLn\APLe\APLgreater\APLspace
+
+ \end{itemize}
+
+
+
+
+
+\par}%
+%
+% end F682
+%
+\vspace{2mm}
+%
+% \input{F683}
+%
+%
+% F683
+%
+% F683
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLN\APLS\APLF\APLM\APLT\APLspace
+\APLA\APLsemicolon\APLI\APLsemicolon\APLquad\APLI\APLO
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLA\APLleftbracket\APLone\APLrightbracket\APLleftarrow
+\APLleftshoe\APLleftparen\APLzero\APLrho\APLquote\APLspace
+\APLquote\APLrightparen\APLleftparen\APLone\APLrho\APLquote\APLdel
+\APLquote\APLrightparen\APLleftparen\APLrightshoe\APLA
+\APLleftbracket\APLone\APLrightbracket\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLA\APLleftarrow\APLA\APLcomma\APLleftshoe\APLleftparen
+\APLzero\APLrho\APLquote\APLspace\APLquote\APLrightparen
+\APLleftparen\APLone\APLrho\APLquote\APLdel\APLquote\APLrightparen
+\APLleftparen\APLzero\APLrho\APLquote\APLspace\APLquote
+\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLI\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLL\APLO\APLO\APLP\APLcolon\APLrightarrow\APLleftparen
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLrho\APLA
+\APLrightparen\APLnotgreater\APLI\APLrightparen\APLslash\APLE\APLX
+\APLI\APLT
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLA\APLleftbracket\APLone\APLplus\APLI\APLrightbracket
+\APLleftarrow\APLleftshoe\APLleftparen\APLquote\APLleftbracket
+\APLquote\APLcomma\APLleftparen\APLuptackjot\APLI\APLrightparen
+\APLcomma\APLquote\APLrightbracket\APLquote\APLrightparen
+\APLleftparen\APLzero\APLrho\APLquote\APLspace\APLquote\APLrightparen
+\APLleftparen\APLrightshoe\APLA\APLleftbracket\APLone\APLplus
+\APLI\APLrightbracket\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLI\APLleftarrow\APLI\APLplus\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLrightarrow\APLL\APLO\APLO\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLE\APLX\APLI\APLT\APLcolon\APLZ\APLleftarrow\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F683
+%
+\vspace{2mm}
+%
+% \input{F684}
+%
+%
+% F684
+%
+% F684
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+ A
+\item[Used Local Names] %
+ I {\APLquad}IO
+\item[Unused Local Names] %
+
+\item[Functions] %
+
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+ LOOP EXIT
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F684
+%
+\vspace{2mm}
+%
+% \input{F685}
+%
+%
+% F685
+%
+% F685
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\par\end{scriptsize}}%
+%
+% end F685
+%
+\vspace{2mm}
+%
+% end F681
+%
+\subsubsection{%
+FNSLIST
+}
+%
+% \input{F686}%
+%
+%
+% F686
+%
+% F686
+%
+% \input{F687}
+%
+%
+% F687
+%
+% F687
+
+{\parindent=0pt Method {\bf %
+FNSLIST
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}11,18:7:4
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}filename{\APLgreater} FNSLIST {
+{\APLbr}\APLless}object name{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+FNSLIST formats a subsection header and the code to input
+{\APLbr} the file which contains a \LaTeX\ macro stream which
+{\APLbr}typesets the APL code of the APL object.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+ FNSLIST appends to the global
+ variable RC the \LaTeX\ instructions
+ for formatting a subsection header with the title of the
+ object name and for inputting the text which describes the
+ object from a file.
+
+
+
+
+
+\par}%
+%
+% end F687
+%
+\vspace{2mm}
+%
+% \input{F688}
+%
+%
+% F688
+%
+% F688
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLF\APLspace\APLF\APLN\APLS\APLL\APLI\APLS\APLT\APLspace
+\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLA\APLleftarrow\APLleftparen\APLquote\APLspace\APLquote
+\APLnotequal\APLA\APLrightparen\APLslash\APLA\APLleftarrow
+\APLcomma\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLu\APLb\APLs\APLe\APLc\APLt\APLi\APLo\APLn
+\APLleftbrace\APLslope\APLspace\APLslope\APLspace\APLslope
+\APLspace\APLquote\APLcomma\APLleftparen\APLleftparen\APLA
+\APLnotequal\APLquote\APLpercent\APLquote\APLrightparen\APLslash\APLA
+\APLleftarrow\APLepsilon\APLA\APLP\APLL\APLT\APLO\APLT\APLE
+\APLX\APLspace\APLA\APLrightparen\APLcomma\APLquote\APLrightbrace
+\APLspace\APLpercent\APLspace\APLquote\APLcomma\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLi\APLn\APLp\APLu\APLt\APLleftbrace\APLquote
+\APLcomma\APLF\APLcomma\APLquote\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F688
+%
+\vspace{2mm}
+%
+% \input{F689}
+%
+%
+% F689
+%
+% F689
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+
+\item[Arguments] %
+ F A
+\item[Used Local Names] %
+
+\item[Unused Local Names] %
+
+\item[Functions] %
+ APLTOTEX
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+ RC
+\end{description}\end{scriptsize}\par}
+%
+% end F689
+%
+\vspace{2mm}
+%
+% \input{F690}
+%
+%
+% F690
+%
+% F690
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\hspace*{1mm}%
+ 0 FNSLIST calls APLTOTEX
+\par%
+\par\end{scriptsize}}%
+%
+% end F690
+%
+\vspace{2mm}
+%
+% end F686
+%
+\subsubsection{%
+FOLD
+}
+%
+% \input{F691}%
+%
+%
+% F691
+%
+% F691
+%
+% \input{F692}
+%
+%
+% F692
+%
+% F692
+
+{\parindent=0pt Method {\bf %
+FOLD
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}11,18:0:17
+\\%
+{\bf Protocol: }{\em %
+Internal
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}folded text matrix{\APLgreater} {
+{\APLbr}\APLleftarrow} FOLD {\APLless}text matrix{\APLgreater}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+FOLD mimicks APL2s formatting algorithm for arrays.
+{\APLbr} The matrix is cut in columns and the columns are printed
+{\APLbr} one after the other. Broad tables can thus be
+{\APLbr}restored by cut and paste.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+ FOLD gets the printing width
+ from the function
+\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar
+\APLW\APLI\APLD\APLT\APLH\APLspace
+ .
+ FOLD cuts a matrix with a width of more than e.g. 59 characters
+ into blocks of a width of 59 characters, the blocks are
+ pasted together vertically, so that the original layout
+ can be restored by cut and paste.
+
+
+
+
+
+\par}%
+%
+% end F692
+%
+\vspace{2mm}
+%
+% \input{F693}
+%
+%
+% F693
+%
+% F693
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLO\APLL\APLD\APLspace\APLA
+\APLsemicolon\APLquad\APLI\APLO
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLA\APLleftarrow\APLleftparen\protect\APLoverbar\APLtwo
+\APLuparrow\APLone\APLcomma\APLone\APLcomma\APLrho\APLA
+\APLrightparen\APLrho\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLZ\APLleftarrow\APLleftparen\APLzero\APLcomma\APLP\APLR
+\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar\APLW\APLI
+\APLD\APLT\APLH\APLrightparen\APLrho\APLquote\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLL\APLO\APLO\APLP\APLcolon\APLrightarrow\APLleftparen
+\APLzero\APLequal\protect\APLoverbar\APLone\APLuparrow\APLrho\APLA
+\APLrightparen\APLslash\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLleftparen\APLleftparen\APLone\APLuparrow\APLrho
+\APLA\APLrightparen\APLcomma\APLP\APLR\APLI\APLN\APLT\APLI\APLN
+\APLG\protect\APLunderbar\APLW\APLI\APLD\APLT\APLH
+\APLrightparen\APLuparrow\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLA\APLleftarrow\APLleftparen\APLzero\APLcomma\APLP\APLR
+\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar\APLW\APLI
+\APLD\APLT\APLH\APLrightparen\APLdownarrow\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLrightarrow\APLL\APLO\APLO\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F693
+%
+\vspace{2mm}
+%
+% \input{F694}
+%
+%
+% F694
+%
+% F694
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+ A
+\item[Used Local Names] %
+ {\APLquad}IO
+\item[Unused Local Names] %
+
+\item[Functions] %
+ PRINTING{\protect\APLunderbar}WIDTH
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+ LOOP
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F694
+%
+\vspace{2mm}
+%
+% \input{F695}
+%
+%
+% F695
+%
+% F695
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\hspace*{1mm}%
+ 0 FOLD calls PRINTING{\protect\APLunderbar}WIDTH
+\par%
+\par\end{scriptsize}}%
+%
+% end F695
+%
+\vspace{2mm}
+%
+% end F691
+%
+\subsection{Protocol\ %
+Internal Local Adaption
+}%
+\subsubsection{%
+BEGIN{\protect\APLunderbar}ARRAY
+}
+%
+% \input{F696}%
+%
+%
+% F696
+%
+% F696
+%
+% \input{F697}
+%
+%
+% F697
+%
+% F697
+
+{\parindent=0pt Method {\bf %
+BEGIN{\protect\APLunderbar}ARRAY
+} of class {\bf %
+APL2TEX
+} created %
+1990{\APLslash}4{\APLslash}20,15:20:4
+\\%
+{\bf Protocol: }{\em %
+Internal Local Adaption
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}start of array macro sequence{\APLgreater} {
+{\APLbr}\APLleftarrow} BEGIN{\protect\APLunderbar}ARRAY\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+BEGIN{\protect\APLunderbar}ARRAY defines the \LaTeX\ macros
+{\APLbr}which precede an APL array.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+%
+\APLB\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLspace
+ is
+ localized within each document type.
+ The definition used is given in
+\APLL\APLO\APLC\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG
+\APLE\APLspace
+ .
+ Dependents:
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLspace
+ ,
+%
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLB\APLO\APLX
+\APLE\APLD\APLA\APLR\APLR\APLA\APLbr\APLY\APLspace
+ ,
+%
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLD\APLI\APLA
+\APLL\APLO\APLG\APLspace
+ .
+
+ The sequence must always be on its own line. The start end
+ pair must be the tightest bracket around the APL code.
+
+
+
+
+
+\par}%
+%
+% end F697
+%
+\vspace{2mm}
+%
+% \input{F698}
+%
+%
+% F698
+%
+% F698
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLB\APLE\APLG\APLI\APLN\protect
+\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLleftshoe\APLquote\APLslope\APLb\APLe
+\APLg\APLi\APLn\APLleftbrace\APLA\APLP\APLL\APLa\APLr\APLr\APLa
+\APLy\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F698
+%
+\vspace{2mm}
+%
+% \input{F699}
+%
+%
+% F699
+%
+% F699
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+
+\item[Used Local Names] %
+
+\item[Unused Local Names] %
+
+\item[Functions] %
+
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F699
+%
+\vspace{2mm}
+%
+% \input{F700}
+%
+%
+% F700
+%
+% F700
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\par\end{scriptsize}}%
+%
+% end F700
+%
+\vspace{2mm}
+%
+% end F696
+%
+\subsubsection{%
+END{\protect\APLunderbar}ARRAY
+}
+%
+% \input{F701}%
+%
+%
+% F701
+%
+% F701
+%
+% \input{F702}
+%
+%
+% F702
+%
+% F702
+
+{\parindent=0pt Method {\bf %
+END{\protect\APLunderbar}ARRAY
+} of class {\bf %
+APL2TEX
+} created %
+1990{\APLslash}4{\APLslash}20,15:32:48
+\\%
+{\bf Protocol: }{\em %
+Internal Local Adaption
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}end of array macro sequence{\APLgreater} {
+{\APLbr}\APLleftarrow} END{\protect\APLunderbar}ARRAY\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+END{\protect\APLunderbar}ARRAY defines the \LaTeX\ macros
+{\APLbr}which precede an APL array.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+%
+\APLB\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLspace
+ is
+ localized within each document type.
+ The definition used is given in
+\APLL\APLO\APLC\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG
+\APLE\APLspace
+ .
+ Dependents:
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLspace
+ ,
+%
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLB\APLO\APLX
+\APLE\APLD\APLA\APLR\APLR\APLA\APLbr\APLY\APLspace
+ ,
+%
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLD\APLI\APLA
+\APLL\APLO\APLG\APLspace
+ .
+ The sequence must always be on its own line. The start end
+ pair must be the tightest bracket around the APL code.
+
+
+
+
+
+\par}%
+%
+% end F702
+%
+\vspace{2mm}
+%
+% \input{F703}
+%
+%
+% F703
+%
+% F703
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLE\APLN\APLD\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLleftshoe\APLquote\APLslope\APLe\APLn
+\APLd\APLleftbrace\APLA\APLP\APLL\APLa\APLr\APLr\APLa\APLy
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F703
+%
+\vspace{2mm}
+%
+% \input{F704}
+%
+%
+% F704
+%
+% F704
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+
+\item[Used Local Names] %
+
+\item[Unused Local Names] %
+
+\item[Functions] %
+
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F704
+%
+\vspace{2mm}
+%
+% \input{F705}
+%
+%
+% F705
+%
+% F705
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\par\end{scriptsize}}%
+%
+% end F705
+%
+\vspace{2mm}
+%
+% end F701
+%
+\subsubsection{%
+LOCAL{\protect\APLunderbar}PAGE
+}
+%
+% \input{F706}%
+%
+%
+% F706
+%
+% F706
+%
+% \input{F707}
+%
+%
+% F707
+%
+% F707
+
+{\parindent=0pt Method {\bf %
+LOCAL{\protect\APLunderbar}PAGE
+} of class {\bf %
+APL2TEX
+} created %
+1990{\APLslash}4{\APLslash}20,15:42:11
+\\%
+{\bf Protocol: }{\em %
+Internal Local Adaption
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}latex macros defining the size of a local
+{\APLbr}page{\APLgreater} {\APLleftarrow}
+{\APLbr}LOCAL{\protect\APLunderbar}PAGE\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+LOCAL{\protect\APLunderbar}PAGE defines the size of a page.
+{\APLbr}All relevant changes are made here.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+%
+\APLL\APLO\APLC\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG
+\APLE\APLspace
+ defines the
+ size of a page and adjusts some
+ dependencies for printing arrays by redefining the following
+ functions:
+\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar
+\APLW\APLI\APLD\APLT\APLH\APLspace
+ ,
+%
+\APLB\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLspace
+ ,
+%
+\APLE\APLN\APLD\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\APLspace
+ .
+
+ Arrays are printed by simulating a fixed spaced font. Each
+ APL symbol is therefore wrapped in a box of e.g. 1em length.
+ Since the internal APL2 format algorithm is used to produce
+ columns of printout which can be pasted together for broad
+ outputs, we have to know at APL preprocessing time, how many
+ characters fit on a line. The number of characters per line
+ depends on the documentstyle size and the size specified for
+ an array environment.
+
+ For an article 10pt style, 17cm textwidth and an array
+ environment set in footnotesize we get 56 characters per line.
+ In order to obtain this result we convert 17cm to 483.6984pt
+ and we measure 1em at 10pt and footnotesize as 8.50012pt.
+ Of course we write some \LaTeX\ macros to do the hard work.
+
+
+
+
+
+
+\par}%
+%
+% end F707
+%
+\vspace{2mm}
+%
+% \input{F708}
+%
+%
+% F708
+%
+% F708
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLL\APLO\APLC\APLA\APLL\protect
+\APLunderbar\APLP\APLA\APLG\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquad\APLF\APLX\APLspace\APLquote\APLZ
+\APLleftarrow\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG\protect
+\APLunderbar\APLW\APLI\APLD\APLT\APLH\APLquote\APLspace\APLquote
+\APLZ\APLleftarrow\APLfive\APLsix\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquad\APLF\APLX\APLspace\APLquote\APLZ
+\APLleftarrow\APLB\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY\APLquote\APLspace\APLquote\APLZ
+\APLleftarrow\APLleftshoe\APLquote\APLquote\APLslope\APLb\APLe\APLg\APLi
+\APLn\APLleftbrace\APLf\APLo\APLo\APLt\APLn\APLo\APLt\APLe
+\APLs\APLi\APLz\APLe\APLrightbrace\APLslope\APLb\APLe\APLg\APLi
+\APLn\APLleftbrace\APLA\APLP\APLL\APLa\APLr\APLr\APLa\APLy
+\APLrightbrace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquad\APLF\APLX\APLspace\APLquote\APLZ
+\APLleftarrow\APLE\APLN\APLD\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLquote\APLspace\APLquote\APLZ\APLleftarrow
+\APLleftshoe\APLquote\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace
+\APLA\APLP\APLL\APLa\APLr\APLr\APLa\APLy\APLrightbrace\APLslope
+\APLe\APLn\APLd\APLleftbrace\APLf\APLo\APLo\APLt\APLn\APLo\APLt
+\APLe\APLs\APLi\APLz\APLe\APLrightbrace\APLquote\APLquote
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquote\APLslope\APLt\APLo\APLp\APLm
+\APLa\APLr\APLg\APLi\APLn\APLequal\APLone\APLc\APLm\APLquote
+\APLspace\APLquote\APLslope\APLo\APLd\APLd\APLs\APLi\APLd\APLe\APLm
+\APLa\APLr\APLg\APLi\APLn\APLequal\APLtwo\APLc\APLm\APLquote
+\APLspace\APLquote\APLslope\APLe\APLv\APLe\APLn\APLs\APLi\APLd
+\APLe\APLm\APLa\APLr\APLg\APLi\APLn\APLequal\APLtwo\APLc\APLm
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLleftshoe\APLquote
+\APLslope\APLa\APLd\APLd\APLt\APLo\APLl\APLe\APLn\APLg\APLt\APLh
+\APLleftbrace\APLslope\APLo\APLd\APLd\APLs\APLi\APLd\APLe\APLm\APLa
+\APLr\APLg\APLi\APLn\APLrightbrace\APLleftbrace\APLbar\APLone
+\APLi\APLn\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLleftshoe\APLquote
+\APLslope\APLa\APLd\APLd\APLt\APLo\APLl\APLe\APLn\APLg\APLt\APLh
+\APLleftbrace\APLslope\APLe\APLv\APLe\APLn\APLs\APLi\APLd\APLe\APLm
+\APLa\APLr\APLg\APLi\APLn\APLrightbrace\APLleftbrace\APLbar
+\APLone\APLi\APLn\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLleftshoe\APLquote
+\APLslope\APLa\APLd\APLd\APLt\APLo\APLl\APLe\APLn\APLg\APLt\APLh
+\APLleftbrace\APLslope\APLt\APLo\APLp\APLm\APLa\APLr\APLg\APLi\APLn
+\APLrightbrace\APLleftbrace\APLbar\APLone\APLi\APLn
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLquote\APLslope\APLh\APLe
+\APLa\APLd\APLh\APLe\APLi\APLg\APLh\APLt\APLequal\APLthree
+\APLm\APLm\APLquote\APLspace\APLquote\APLslope\APLh\APLe\APLa\APLd
+\APLs\APLe\APLp\APLequal\APLseven\APLm\APLm\APLquote\APLspace
+\APLquote\APLslope\APLf\APLo\APLo\APLt\APLh\APLe\APLi\APLg\APLh
+\APLt\APLequal\APLzero\APLm\APLm\APLquote\APLspace\APLquote
+\APLslope\APLt\APLo\APLp\APLs\APLk\APLi\APLp\APLequal\APLzero
+\APLc\APLm\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLquote\APLslope\APLt\APLe
+\APLx\APLt\APLw\APLi\APLd\APLt\APLh\APLequal\APLone\APLseven
+\APLc\APLm\APLquote\APLspace\APLquote\APLslope\APLt\APLe\APLx
+\APLt\APLh\APLe\APLi\APLg\APLh\APLt\APLequal\APLtwo\APLsix\APLc
+\APLm\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F708
+%
+\vspace{2mm}
+%
+% \input{F709}
+%
+%
+% F709
+%
+% F709
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+
+\item[Used Local Names] %
+
+\item[Unused Local Names] %
+
+\item[Functions] %
+
+\item[System Functions] %
+ {\APLquad}FX
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F709
+%
+\vspace{2mm}
+%
+% \input{F710}
+%
+%
+% F710
+%
+% F710
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\par\end{scriptsize}}%
+%
+% end F710
+%
+\vspace{2mm}
+%
+% end F706
+%
+\subsubsection{%
+PRINTING{\protect\APLunderbar}WIDTH
+}
+%
+% \input{F711}%
+%
+%
+% F711
+%
+% F711
+%
+% \input{F712}
+%
+%
+% F712
+%
+% F712
+
+{\parindent=0pt Method {\bf %
+PRINTING{\protect\APLunderbar}WIDTH
+} of class {\bf %
+APL2TEX
+} created %
+1990{\APLslash}4{\APLslash}20,12:33:54
+\\%
+{\bf Protocol: }{\em %
+Internal Local Adaption
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}integer{\APLgreater} {\APLleftarrow}
+{\APLbr}PRINTING{\protect\APLunderbar}WIDTH\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+PRINTING{\protect\APLunderbar}WIDTH sets the number of
+{\APLbr}characters per screen line. This value has to be set to
+{\APLbr}the maximal numbers of characters per printed
+{\APLbr}line.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+%
+\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar
+\APLW\APLI\APLD\APLT\APLH\APLspace
+ is used in
+%
+\APLF\APLO\APLL\APLD\APLspace
+ to reset the system variable
+%
+\APLquad\APLP\APLW\APLspace
+ . The correct value must be
+ found for each document type
+ and each font size used. This is sort of a inconvenience.
+
+
+
+
+
+\par}%
+%
+% end F712
+%
+\vspace{2mm}
+%
+% \input{F713}
+%
+%
+% F713
+%
+% F713
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG
+\protect\APLunderbar\APLW\APLI\APLD\APLT\APLH
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLfive\APLnine\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLupshoejot\APLspace\APLT\APLH\APLE\APLspace\APLV\APLA
+\APLL\APLU\APLE\APLspace\APLO\APLF\APLspace\APLquad\APLP\APLW
+\APLspace\APLF\APLO\APLR\APLspace\APLO\APLN\APLE\APLspace\APLP\APLA
+\APLG\APLE\APLdot
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F713
+%
+\vspace{2mm}
+%
+% \input{F714}
+%
+%
+% F714
+%
+% F714
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ Z
+\item[Arguments] %
+
+\item[Used Local Names] %
+
+\item[Unused Local Names] %
+
+\item[Functions] %
+
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F714
+%
+\vspace{2mm}
+%
+% \input{F715}
+%
+%
+% F715
+%
+% F715
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\par\end{scriptsize}}%
+%
+% end F715
+%
+\vspace{2mm}
+%
+% end F711
+%
+\subsection{Protocol\ %
+Internal Translation Table
+}%
+\subsubsection{%
+TEXM
+}
+%
+% \input{F716}%
+%
+%
+% F716
+%
+% F716
+%
+% \input{F717}
+%
+%
+% F717
+%
+% F717
+
+{\parindent=0pt Method {\bf %
+TEXM
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}11,17:26:0
+\\%
+{\bf Protocol: }{\em %
+Internal Translation Table
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}translation table{\APLgreater}{
+{\APLbr}\APLleftarrow}TEXM {\APLquote}{\APLquote}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+TEXM generates a translation table which maps EACH
+{\APLbr}symbol of the atomic vector to a \LaTeX\ macro
+{\APLbr}name.\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+It pays off to memoize this function.
+
+
+
+
+
+\par}%
+%
+% end F717
+%
+\vspace{2mm}
+%
+% \input{F718}
+%
+%
+% F718
+%
+% F718
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLT\APLM\APLleftarrow\APLT\APLE\APLX\APLM\APLspace\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLzero\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLrightbrace\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLrightbrace
+\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLspace\APLzero\APLspace\APLdoublequote
+\APLspace\APLone\APLspace\APLdoublequote\APLspace\APLtwo
+\APLspace\APLdoublequote\APLspace\APLthree\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLsix\APLrightbrace\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLseven\APLrightbrace\APLquote\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLspace\APLfour\APLspace\APLdoublequote\APLspace
+\APLfive\APLspace\APLspace\APLspace\APLsix\APLspace
+\APLdoublequote\APLspace\APLseven\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLeight
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLnine\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLzero\APLrightbrace\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLone\APLrightbrace\APLquote\APLspace\APLupshoejot
+\APLspace\APLspace\APLeight\APLspace\APLdoublequote\APLspace
+\APLnine\APLspace\APLdoublequote\APLspace\APLone\APLzero\APLspace
+\APLdoublequote\APLspace\APLone\APLone\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLtwo
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLthree
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLone\APLfour\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLone\APLfive\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLone\APLtwo\APLspace\APLdoublequote
+\APLspace\APLone\APLthree\APLspace\APLdoublequote\APLspace
+\APLone\APLfour\APLspace\APLdoublequote\APLspace\APLone\APLfive
+\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLsix
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLseven
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLone\APLeight\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLone\APLnine\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLone\APLsix\APLspace\APLdoublequote
+\APLspace\APLone\APLseven\APLspace\APLdoublequote\APLspace
+\APLone\APLeight\APLspace\APLdoublequote\APLspace\APLone\APLnine
+\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo
+\APLzero\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLone
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLtwo\APLtwo\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLtwo\APLthree\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLtwo\APLzero\APLspace\APLdoublequote
+\APLspace\APLtwo\APLone\APLspace\APLdoublequote\APLspace\APLtwo
+\APLtwo\APLspace\APLdoublequote\APLspace\APLtwo\APLthree
+\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo
+\APLfour\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLfive
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLtwo\APLsix\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLtwo\APLseven\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLtwo\APLfour\APLspace\APLdoublequote
+\APLspace\APLtwo\APLfive\APLspace\APLdoublequote\APLspace
+\APLtwo\APLsix\APLspace\APLdoublequote\APLspace\APLtwo\APLseven
+\APLspace\APLmiss{27}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo
+\APLeight\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLnine
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLthree\APLzero\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLthree\APLone\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLtwo\APLeight\APLspace
+\APLmiss{28}\APLspace\APLtwo\APLnine\APLspace\APLdoublequote\APLspace
+\APLthree\APLzero\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLthree\APLone\APLspace\APLmiss{31}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree
+\APLtwo\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLthree
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLfour\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi
+\APLs\APLs\APLleftbrace\APLthree\APLfive\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLthree\APLtwo\APLspace
+\APLmiss{32}\APLspace\APLthree\APLthree\APLspace\APLmiss{33}\APLspace
+\APLthree\APLfour\APLspace\APLmiss{34}\APLspace\APLthree
+\APLfive\APLspace\APLmiss{35}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree
+\APLsix\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLseven
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLeight\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi
+\APLs\APLs\APLleftbrace\APLthree\APLnine\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLthree\APLsix\APLspace
+\APLdoublequote\APLspace\APLthree\APLseven\APLspace\APLdoublequote
+\APLspace\APLthree\APLeight\APLspace\APLdoublequote\APLspace
+\APLthree\APLnine\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLzero\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour\APLone
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLfour\APLtwo\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfour\APLthree\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfour\APLzero\APLspace
+\APLdoublequote\APLspace\APLfour\APLone\APLspace\APLdoublequote\APLspace
+\APLfour\APLtwo\APLspace\APLdoublequote\APLspace\APLfour
+\APLthree\APLspace\APLmiss{43}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLfour\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour\APLfive
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLfour\APLsix\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfour\APLseven\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfour\APLfour\APLspace
+\APLmiss{44}\APLspace\APLfour\APLfive\APLspace\APLmiss{45}\APLspace
+\APLfour\APLsix\APLspace\APLdoublequote\APLspace\APLfour\APLseven
+\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLeight\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour\APLnine
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLzero\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi
+\APLs\APLs\APLleftbrace\APLfive\APLone\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfour\APLeight\APLspace
+\APLmiss{48}\APLspace\APLfour\APLnine\APLspace\APLmiss{49}\APLspace
+\APLfive\APLzero\APLspace\APLmiss{50}\APLspace\APLfive\APLone
+\APLspace\APLmiss{51}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive
+\APLtwo\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLthree
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLfive\APLfour\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfive\APLfive\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfive\APLtwo\APLspace\APLmiss{52}
+\APLspace\APLfive\APLthree\APLspace\APLmiss{53}\APLspace
+\APLfive\APLfour\APLspace\APLmiss{54}\APLspace\APLfive\APLfive
+\APLspace\APLmiss{55}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive
+\APLsix\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLseven
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLfive\APLeight\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi
+\APLs\APLs\APLleftbrace\APLfive\APLnine\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfive\APLsix\APLspace
+\APLmiss{56}\APLspace\APLfive\APLseven\APLspace\APLmiss{57}\APLspace
+\APLfive\APLeight\APLspace\APLmiss{58}\APLspace\APLfive\APLnine
+\APLspace\APLmiss{59}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLsix
+\APLzero\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLsix\APLone
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLsix\APLtwo\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLsix\APLthree\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLsix\APLzero\APLspace\APLdoublequote
+\APLspace\APLsix\APLone\APLspace\APLmiss{61}\APLspace\APLsix
+\APLtwo\APLspace\APLmiss{62}\APLspace\APLsix\APLthree\APLspace
+\APLmiss{63}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLs\APLp\APLa\APLc\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLA\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLB\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLC\APLquote\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLsix\APLfour\APLspace\APLspace\APLspace\APLsix
+\APLfive\APLspace\APLuA\APLspace\APLsix\APLsix\APLspace\APLuB
+\APLspace\APLsix\APLseven\APLspace\APLuC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLD\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLE\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLF\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLG\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLsix\APLeight\APLspace\APLuD\APLspace
+\APLsix\APLnine\APLspace\APLuE\APLspace\APLseven\APLzero
+\APLspace\APLuF\APLspace\APLseven\APLone\APLspace\APLuG
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLH\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLI\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLc\APLe\APLn\APLt\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLd\APLo\APLt\APLquote\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLseven\APLtwo\APLspace\APLuH\APLspace\APLseven
+\APLthree\APLspace\APLuI\APLspace\APLseven\APLfour\APLspace\APLcent
+\APLspace\APLseven\APLfive\APLspace\APLdot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLl\APLe\APLs\APLs\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLl\APLe\APLf\APLt\APLp\APLa\APLr
+\APLe\APLn\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLp\APLl\APLu\APLs\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLv\APLe\APLr\APLt\APLi\APLc\APLa\APLl\APLb\APLa\APLr
+\APLquote\APLspace\APLupshoejot\APLspace\APLseven\APLsix
+\APLspace\APLless\APLspace\APLseven\APLseven\APLspace\APLleftparen
+\APLspace\APLseven\APLeight\APLspace\APLplus\APLspace\APLseven
+\APLnine\APLspace\APLverticalbar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLa\APLm\APLp\APLe\APLr\APLs\APLa\APLn\APLd
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLu\APLJ
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLu\APLK
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLu\APLL
+\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLspace
+\APLeight\APLzero\APLspace\APLampersand\APLspace\APLeight\APLone
+\APLspace\APLuJ\APLspace\APLeight\APLtwo\APLspace\APLuK\APLspace
+\APLeight\APLthree\APLspace\APLuL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLM\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLN\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLO\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLP\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLeight\APLfour\APLspace\APLuM\APLspace
+\APLeight\APLfive\APLspace\APLuN\APLspace\APLeight\APLsix
+\APLspace\APLuO\APLspace\APLeight\APLseven\APLspace\APLuP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLQ\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLR\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLe\APLx\APLc\APLl\APLa\APLm\APLa\APLt\APLi
+\APLo\APLn\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLd
+\APLo\APLl\APLl\APLa\APLr\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLupshoejot\APLspace\APLeight\APLeight\APLspace
+\APLuQ\APLspace\APLeight\APLnine\APLspace\APLuR\APLspace\APLnine
+\APLzero\APLspace\APLexclamation\APLspace\APLnine\APLone\APLspace
+\APLdollar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLs\APLt\APLa\APLr\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLr\APLi\APLg\APLh\APLt\APLp\APLa
+\APLr\APLe\APLn\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLs\APLe\APLm\APLi\APLc\APLo\APLl\APLo\APLn\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLn\APLo\APLt\APLquote
+\APLspace\APLupshoejot\APLspace\APLnine\APLtwo\APLspace\APLstar
+\APLspace\APLnine\APLthree\APLspace\APLrightparen\APLspace
+\APLnine\APLfour\APLspace\APLsemicolon\APLspace\APLnine\APLfive
+\APLspace\APLnot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLb\APLa\APLr\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLs\APLl\APLa\APLs\APLh\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLS\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLT\APLquote\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLnine\APLsix\APLspace\APLbar\APLspace\APLnine\APLseven
+\APLspace\APLslash\APLspace\APLnine\APLeight\APLspace\APLuS
+\APLspace\APLnine\APLnine\APLspace\APLuT
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLU\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLV\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLW\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLX\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLone\APLzero\APLzero\APLspace\APLuU\APLspace
+\APLone\APLzero\APLone\APLspace\APLuV\APLspace\APLone\APLzero
+\APLtwo\APLspace\APLuW\APLspace\APLone\APLzero\APLthree\APLspace
+\APLuX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLY\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLZ\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLs\APLp\APLl\APLi\APLt\APLb\APLa\APLr\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLc\APLo\APLm\APLm
+\APLa\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLupshoejot\APLone\APLzero\APLfour
+\APLspace\APLuY\APLspace\APLone\APLzero\APLfive\APLspace\APLuZ
+\APLspace\APLone\APLzero\APLsix\APLspace\APLsplitbar\APLspace
+\APLone\APLzero\APLseven\APLspace\APLcomma
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLp\APLe\APLr\APLc\APLe\APLn\APLt\APLquote
+\APLspace\APLquote\APLslope\APLp\APLr\APLo\APLt\APLe\APLc\APLt
+\APLslope\APLA\APLP\APLL\APLu\APLn\APLd\APLe\APLr\APLb\APLa\APLr
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLg\APLr
+\APLe\APLa\APLt\APLe\APLr\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLq\APLu\APLe\APLr\APLy\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLnine\APLrightbracket}{}
+\APLupshoejot\APLone\APLzero\APLeight\APLspace\APLpercent
+\APLspace\APLone\APLzero\APLnine\APLspace\protect\APLunderbar
+\APLspace\APLone\APLone\APLzero\APLspace\APLgreater\APLspace
+\APLone\APLone\APLone\APLspace\APLquery
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLone
+\APLtwo\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLu\APLp\APLc\APLa\APLr\APLe\APLt\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLd\APLi\APLe\APLr\APLe
+\APLs\APLi\APLs\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLq\APLu\APLa\APLd\APLj\APLo\APLt\APLquote\APLspace
+\APLspace\APLupshoejot\APLone\APLone\APLtwo\APLspace\APLmiss{112}
+\APLspace\APLone\APLone\APLthree\APLspace\APLupcaret\APLspace
+\APLone\APLone\APLfour\APLspace\APLdieresis\APLspace\APLone\APLone
+\APLfive\APLspace\APLquadjot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLi\APLo\APLt\APLa\APLu\APLn\APLd\APLe\APLr
+\APLb\APLa\APLr\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLe\APLp\APLs\APLi\APLl\APLo\APLn\APLu\APLn\APLd\APLe\APLr
+\APLb\APLa\APLr\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLone\APLeight
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLone\APLnine
+\APLrightbrace\APLquote\APLspace\APLupshoejot\APLone\APLone\APLsix
+\APLspace\APLiotaunderbar\APLspace\APLspace\APLone\APLone
+\APLseven\APLspace\APLepsilonunderbar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLc\APLa\APLr\APLe\APLt
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLa\APLc
+\APLc\APLe\APLn\APLt\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLc\APLo\APLl\APLo\APLn\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLp\APLo\APLu\APLn\APLd\APLquote
+\APLspace\APLupshoejot\APLone\APLtwo\APLzero\APLspace\APLdowncaret
+\APLspace\APLone\APLtwo\APLone\APLspace\APLaccent\APLspace\APLone
+\APLtwo\APLtwo\APLspace\APLcolon\APLspace\APLone\APLtwo
+\APLthree\APLspace\APLpound
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLa\APLt\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLq\APLu\APLo\APLt\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLe\APLq\APLu\APLa\APLl\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLd\APLo\APLu\APLb
+\APLl\APLe\APLq\APLu\APLo\APLt\APLe\APLquote\APLspace
+\APLupshoejot\APLone\APLtwo\APLfour\APLspace\APLat\APLspace\APLone
+\APLtwo\APLfive\APLspace\APLquote\APLspace\APLone\APLtwo\APLsix
+\APLspace\APLequal\APLspace\APLone\APLtwo\APLseven\APLspace
+\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLt\APLi\APLl\APLd\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLa\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLb\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLc\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLone
+\APLtwo\APLeight\APLspace\APLtilde\APLspace\APLone\APLtwo
+\APLnine\APLspace\APLa\APLspace\APLone\APLthree\APLzero\APLspace
+\APLb\APLspace\APLone\APLthree\APLone\APLspace\APLc
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLd\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLe\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLf\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLg\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLone\APLthree\APLtwo\APLspace\APLd\APLspace\APLone
+\APLthree\APLthree\APLspace\APLe\APLspace\APLone\APLthree
+\APLfour\APLspace\APLf\APLspace\APLone\APLthree\APLfive\APLspace
+\APLg
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLh\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLi\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLu\APLp\APLa\APLr\APLr\APLo\APLw\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLa\APLr\APLr
+\APLo\APLw\APLquote\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLupshoejot\APLone\APLthree\APLsix\APLspace\APLh\APLspace
+\APLone\APLthree\APLseven\APLspace\APLi\APLspace\APLone
+\APLthree\APLeight\APLspace\APLuparrow\APLspace\APLone\APLthree
+\APLnine\APLspace\APLdownarrow
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLn\APLo\APLt\APLg\APLr\APLe\APLa\APLt\APLe
+\APLr\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLu
+\APLp\APLs\APLt\APLi\APLl\APLe\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLs\APLt\APLi\APLl\APLe
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLr\APLi
+\APLg\APLh\APLt\APLa\APLr\APLr\APLo\APLw\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLeight\APLrightbracket}{}
+\APLupshoejot\APLspace\APLone\APLfour\APLzero\APLspace
+\APLnotgreater\APLspace\APLone\APLfour\APLone\APLspace\APLupstile
+\APLspace\APLone\APLfour\APLtwo\APLspace\APLdownstile\APLspace
+\APLone\APLfour\APLthree\APLspace\APLrightarrow
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLq\APLu\APLa\APLd\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLj\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLk\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLl\APLquote\APLspace\APLupshoejot\APLspace
+\APLone\APLfour\APLfour\APLspace\APLquad\APLspace\APLone\APLfour
+\APLfive\APLspace\APLj\APLspace\APLone\APLfour\APLsix\APLspace
+\APLk\APLspace\APLone\APLfour\APLseven\APLspace\APLl
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLn\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLo\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLp\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLone\APLfour\APLeight\APLspace\APLm\APLspace\APLone
+\APLfour\APLnine\APLspace\APLn\APLspace\APLone\APLfive\APLzero
+\APLspace\APLo\APLspace\APLone\APLfive\APLone\APLspace\APLp
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLq\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLr\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLr\APLi\APLg\APLh\APLt\APLs\APLh\APLo\APLe\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLl\APLe\APLf\APLt\APLs
+\APLh\APLo\APLe\APLquote\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLone\APLfive\APLtwo\APLspace\APLq
+\APLspace\APLone\APLfive\APLthree\APLspace\APLr\APLspace\APLone
+\APLfive\APLfour\APLspace\APLrightshoe\APLspace\APLone\APLfive
+\APLfive\APLspace\APLleftshoe
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone
+\APLfive\APLsix\APLrightbrace\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLc\APLi\APLr\APLc\APLl\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLfive\APLeight\APLrightbrace\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLl\APLe\APLf\APLt\APLa\APLr
+\APLr\APLo\APLw\APLquote\APLspace\APLspace\APLupshoejot\APLspace
+\APLone\APLfive\APLsix\APLspace\APLmiss{156}\APLspace\APLone
+\APLfive\APLseven\APLspace\APLcircle\APLspace\APLone\APLfive
+\APLeight\APLspace\APLmiss{158}\APLspace\APLone\APLfive\APLnine
+\APLspace\APLleftarrow
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLp\APLr\APLo\APLt\APLe\APLc\APLt\APLslope\APLA\APLP\APLL
+\APLo\APLv\APLe\APLr\APLb\APLa\APLr\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLn\APLa\APLt\APLt\APLi\APLl\APLd\APLe
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLs
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLt\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLfour\APLrightbracket}{}
+\APLupshoejot\APLspace\APLone\APLsix\APLzero\APLspace
+\protect\APLoverbar\APLspace\APLone\APLsix\APLone\APLspace
+\APLnattilde\APLspace\APLone\APLsix\APLtwo\APLspace\APLs\APLspace\APLone
+\APLsix\APLthree\APLspace\APLt
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLv\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLw\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLx\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLone\APLsix\APLfour\APLspace\APLu\APLspace\APLone
+\APLsix\APLfive\APLspace\APLv\APLspace\APLone\APLsix\APLsix
+\APLspace\APLw\APLspace\APLone\APLsix\APLseven\APLspace\APLx
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLy\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLz\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLu\APLp\APLs\APLh\APLo\APLe\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLs\APLh\APLo\APLe
+\APLquote\APLspace\APLspace\APLupshoejot\APLspace\APLone
+\APLsix\APLeight\APLspace\APLy\APLspace\APLone\APLsix\APLnine
+\APLspace\APLz\APLspace\APLone\APLseven\APLzero\APLspace\APLupshoe
+\APLspace\APLone\APLseven\APLone\APLspace\APLdownshoe
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLt\APLa\APLc\APLk
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLl\APLe\APLf
+\APLt\APLb\APLr\APLa\APLc\APLk\APLe\APLt\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLn\APLo\APLt\APLl\APLe\APLs\APLs
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLj\APLo
+\APLt\APLquote\APLspace\APLupshoejot\APLspace\APLone\APLseven
+\APLtwo\APLspace\APLdowntack\APLspace\APLone\APLseven\APLthree
+\APLspace\APLleftbracket\APLspace\APLone\APLseven\APLfour
+\APLspace\APLnotless\APLspace\APLone\APLseven\APLfive\APLspace\APLjot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLa\APLl\APLp\APLh\APLa\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLe\APLp\APLs\APLi\APLl\APLo
+\APLn\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLi
+\APLo\APLt\APLa\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLr\APLh\APLo\APLquote\APLspace\APLupshoejot\APLspace\APLone
+\APLseven\APLsix\APLspace\APLalpha\APLspace\APLone\APLseven
+\APLseven\APLspace\APLepsilon\APLspace\APLone\APLseven\APLeight
+\APLspace\APLiota\APLspace\APLone\APLseven\APLnine\APLspace
+\APLrho
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLo\APLm\APLe\APLg\APLa\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLone\APLeight\APLone\APLrightbrace\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLt\APLi\APLm\APLe\APLs\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLs\APLl\APLo\APLp
+\APLe\APLquote\APLspace\APLupshoejot\APLspace\APLone\APLeight
+\APLzero\APLspace\APLomega\APLspace\APLone\APLeight\APLone
+\APLspace\APLmiss{181}\APLspace\APLone\APLeight\APLtwo\APLspace
+\APLtimes\APLspace\APLone\APLeight\APLthree\APLspace\APLslope
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLd\APLi\APLv\APLi\APLd\APLe\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLeight\APLfive\APLrightbrace\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLd\APLe\APLl\APLquote
+\APLspace\APLquote\APLslope\APLp\APLr\APLo\APLt\APLe\APLc\APLt
+\APLslope\APLA\APLP\APLL\APLd\APLe\APLl\APLt\APLa\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLone\APLrightbracket}{}
+\APLupshoejot\APLspace\APLone\APLeight\APLfour\APLspace
+\APLdivide\APLspace\APLone\APLeight\APLfive\APLspace\APLmiss{185}
+\APLspace\APLone\APLeight\APLsix\APLspace\APLdel\APLspace\APLone
+\APLeight\APLseven\APLspace\protect\APLdelta
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLp\APLt\APLa\APLc\APLk\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLr\APLi\APLg\APLh\APLt
+\APLb\APLr\APLa\APLc\APLk\APLe\APLt\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLn\APLo\APLt\APLe\APLq\APLu\APLa\APLl
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLs\APLt
+\APLi\APLl\APLe\APLquote\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLone\APLeight\APLeight\APLspace\APLuptack
+\APLspace\APLone\APLeight\APLnine\APLspace\APLrightbracket\APLspace
+\APLone\APLnine\APLzero\APLspace\APLnotequal\APLspace\APLone
+\APLnine\APLone\APLspace\APLstile
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLl\APLe\APLf\APLt\APLb\APLr\APLa\APLc\APLe
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLA
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLB\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLC\APLquote\APLspace
+\APLspace\APLspace\APLspace\APLupshoejot\APLspace\APLone\APLnine
+\APLtwo\APLspace\APLleftbrace\APLspace\APLone\APLnine\APLthree
+\APLspace\APLA\APLspace\APLone\APLnine\APLfour\APLspace\APLB
+\APLspace\APLone\APLnine\APLfive\APLspace\APLC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLD\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLE\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLF\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLG\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLone\APLnine\APLsix\APLspace\APLD\APLspace\APLone
+\APLnine\APLseven\APLspace\APLE\APLspace\APLone\APLnine\APLeight
+\APLspace\APLF\APLspace\APLone\APLnine\APLnine\APLspace\APLG
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLH\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLI\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLu\APLp\APLc\APLa\APLr\APLe\APLt\APLt\APLi\APLl\APLd
+\APLe\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLd\APLo
+\APLw\APLn\APLc\APLa\APLr\APLe\APLt\APLt\APLi\APLl\APLd\APLe
+\APLquote\APLspace\APLspace\APLupshoejot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLsix\APLrightbracket}{}
+\APLupshoejot\APLspace\APLtwo\APLzero\APLzero\APLspace\APLH
+\APLspace\APLtwo\APLzero\APLone\APLspace\APLI\APLspace\APLtwo
+\APLzero\APLtwo\APLspace\APLupcarettilde\APLspace\APLtwo\APLzero
+\APLthree\APLspace\APLdowncarettilde
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLl\APLe\APLf\APLt\APLb\APLr\APLa\APLc\APLk
+\APLe\APLt\APLr\APLi\APLg\APLh\APLt\APLb\APLr\APLa\APLc\APLk
+\APLe\APLt\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLc
+\APLi\APLr\APLc\APLl\APLe\APLs\APLt\APLi\APLl\APLe\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLeight\APLrightbracket}{}
+\APLupshoejot\APLspace\APLtwo\APLzero\APLfour\APLspace
+\APLleftbracketrightbracket\APLspace\APLtwo\APLzero\APLfive\APLspace
+\APLcirclestile
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLq\APLu\APLa\APLd\APLs\APLl\APLo\APLp\APLe
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLc\APLi
+\APLr\APLc\APLl\APLe\APLs\APLl\APLo\APLp\APLe\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLzero\APLrightbracket}{}
+\APLupshoejot\APLspace\APLspace\APLtwo\APLzero\APLsix
+\APLspace\APLquadslope\APLspace\APLtwo\APLzero\APLseven\APLspace
+\APLcircleslope
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLr\APLi\APLg\APLh\APLt\APLb\APLr\APLa\APLc
+\APLe\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLJ
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLK\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLL\APLquote
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLspace
+\APLtwo\APLzero\APLeight\APLspace\APLrightbrace\APLspace\APLtwo
+\APLzero\APLnine\APLspace\APLJ\APLspace\APLtwo\APLone\APLzero
+\APLspace\APLK\APLspace\APLtwo\APLone\APLone\APLspace\APLL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLM\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLN\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLO\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLP\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLtwo\APLone\APLtwo\APLspace\APLM\APLspace\APLtwo
+\APLone\APLthree\APLspace\APLN\APLspace\APLtwo\APLone\APLfour
+\APLspace\APLO\APLspace\APLtwo\APLone\APLfive\APLspace\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLQ\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLR\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLd\APLo\APLw\APLn\APLt\APLa\APLc\APLk\APLu\APLp\APLt
+\APLa\APLc\APLk\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLq\APLu\APLo\APLt\APLe\APLd\APLo\APLt\APLquote\APLspace
+\APLupshoejot\APLspace\APLtwo\APLone\APLsix\APLspace\APLQ\APLspace
+\APLtwo\APLone\APLseven\APLspace\APLR\APLspace\APLtwo\APLone
+\APLeight\APLspace\APLdowntackuptack\APLspace\APLtwo\APLone
+\APLnine\APLspace\APLquotedot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLd\APLe\APLl\APLs\APLt\APLi\APLl\APLe
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLd\APLe\APLl
+\APLt\APLa\APLs\APLt\APLi\APLl\APLe\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLq\APLu\APLa\APLd\APLq\APLu\APLo\APLt
+\APLe\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLu
+\APLp\APLs\APLh\APLo\APLe\APLj\APLo\APLt\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLfive\APLrightbracket}{}
+\APLupshoejot\APLspace\APLtwo\APLtwo\APLzero\APLspace
+\APLdelstile\APLspace\APLtwo\APLtwo\APLone\APLspace\APLdeltastile
+\APLspace\APLtwo\APLtwo\APLtwo\APLspace\APLquadquote\APLspace
+\APLtwo\APLtwo\APLthree\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLs\APLl\APLo\APLp\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLe\APLq\APLu\APLa\APLl\APLu
+\APLn\APLd\APLe\APLr\APLb\APLa\APLr\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLS\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLT\APLquote\APLspace\APLupshoejot\APLspace
+\APLtwo\APLtwo\APLfour\APLspace\APLslope\APLspace\APLtwo\APLtwo
+\APLfive\APLspace\APLequalunderbar\APLspace\APLtwo\APLtwo
+\APLsix\APLspace\APLS\APLspace\APLtwo\APLtwo\APLseven\APLspace\APLT
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLU\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLV\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLW\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLX\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLtwo\APLtwo\APLeight\APLspace\APLU\APLspace\APLtwo
+\APLtwo\APLnine\APLspace\APLV\APLspace\APLtwo\APLthree\APLzero
+\APLspace\APLW\APLspace\APLtwo\APLthree\APLone\APLspace\APLX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLY\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLZ\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLs\APLl\APLa\APLs\APLh\APLb\APLa\APLr\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLs\APLl\APLo\APLp\APLe\APLb
+\APLa\APLr\APLquote\APLspace\APLupshoejot\APLspace\APLtwo
+\APLthree\APLtwo\APLspace\APLY\APLspace\APLtwo\APLthree\APLthree
+\APLspace\APLZ\APLspace\APLtwo\APLthree\APLfour\APLspace
+\APLslashbar\APLspace\APLtwo\APLthree\APLfive\APLspace\APLslopebar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLd\APLi\APLe\APLr\APLe\APLs\APLi\APLs\APLd
+\APLo\APLt\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLc\APLi\APLr\APLc\APLl\APLe\APLb\APLa\APLr\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLq\APLu\APLa\APLd\APLd\APLi
+\APLv\APLi\APLd\APLe\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLu\APLp\APLt\APLa\APLc\APLk\APLj\APLo\APLt\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLzero\APLrightbracket}{}
+\APLupshoejot\APLspace\APLtwo\APLthree\APLsix\APLspace
+\APLdieresisdot\APLspace\APLtwo\APLthree\APLseven\APLspace
+\APLcirclebar\APLspace\APLtwo\APLthree\APLeight\APLspace\APLquaddivide
+\APLspace\APLtwo\APLthree\APLnine\APLspace\APLuptackjot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLz\APLe\APLr\APLo\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLo\APLn\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLt\APLw\APLo\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLt\APLh\APLr\APLe\APLe
+\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLtwo\APLfour\APLzero\APLspace\APLzero\APLspace\APLtwo
+\APLfour\APLone\APLspace\APLone\APLspace\APLtwo\APLfour\APLtwo
+\APLspace\APLtwo\APLspace\APLtwo\APLfour\APLthree\APLspace\APLthree
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLf\APLo\APLu\APLr\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLf\APLi\APLv\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLs\APLi\APLx\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLs\APLe\APLv\APLe\APLn
+\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLtwo\APLfour\APLfour\APLspace\APLfour\APLspace\APLtwo
+\APLfour\APLfive\APLspace\APLfive\APLspace\APLtwo\APLfour
+\APLsix\APLspace\APLsix\APLspace\APLtwo\APLfour\APLseven\APLspace
+\APLseven
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLe\APLi\APLg\APLh\APLt\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLn\APLi\APLn\APLe\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLtwo\APLfive\APLzero\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLd\APLe\APLl\APLt\APLi
+\APLl\APLd\APLe\APLquote\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLtwo\APLfour\APLeight\APLspace\APLeight
+\APLspace\APLtwo\APLfour\APLnine\APLspace\APLnine\APLspace
+\APLtwo\APLfive\APLzero\APLspace\APLmiss{250}\APLspace\APLtwo
+\APLfive\APLone\APLspace\APLdeltilde
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLp\APLr\APLo\APLt\APLe\APLc\APLt\APLslope\APLA\APLP\APLL
+\APLd\APLe\APLl\APLt\APLa\APLu\APLn\APLd\APLe\APLr\APLb\APLa\APLr
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLc\APLi
+\APLr\APLc\APLl\APLe\APLs\APLt\APLa\APLr\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLt\APLa
+\APLc\APLk\APLj\APLo\APLt\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLfive
+\APLfive\APLrightbrace\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLupshoejot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLfive\APLrightbracket}{}
+\APLupshoejot\APLspace\APLtwo\APLfive\APLtwo\APLspace
+\protect\APLdeltaunderbar\APLspace\APLtwo\APLfive\APLthree\APLspace
+\APLcirclestar\APLspace\APLtwo\APLfive\APLfour\APLspace
+\APLdowntackjot\APLspace\APLtwo\APLfive\APLfive\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F718
+%
+\vspace{2mm}
+%
+% \input{F719}
+%
+%
+% F719
+%
+% F719
+{\begin{scriptsize}\begin{description}
+{\itemsep=0pt\parsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\item[Result] %
+ TM
+\item[Arguments] %
+ A
+\item[Used Local Names] %
+
+\item[Unused Local Names] %
+
+\item[Functions] %
+
+\item[System Functions] %
+
+\item[Variables] %
+
+\item[Operators] %
+
+\item[Labels] %
+
+\item[Undefined Names] %
+
+\end{description}\end{scriptsize}\par}
+%
+% end F719
+%
+\vspace{2mm}
+%
+% \input{F720}
+%
+%
+% F720
+%
+% F720
+{\parsep=0pt\parskip=0pt\parindent=0pt
+\par {\bf Static Function Call Hierarchy}\par\begin{scriptsize}
+\par\end{scriptsize}}%
+%
+% end F720
+%
+\vspace{2mm}
+%
+% end F716
+%
+\subsubsection{%
+TEXM{\protect\APLunderbar}S
+}
+%
+% \input{F721}%
+%
+%
+% F721
+%
+% F721
+%
+% \input{F722}
+%
+%
+% F722
+%
+% F722
+
+{\parindent=0pt Method {\bf %
+TEXM{\protect\APLunderbar}S
+} of class {\bf %
+APL2TEX
+} created %
+1989{\APLslash}11{\APLslash}14,14:0:55
+\\%
+{\bf Protocol: }{\em %
+Internal Translation Table
+}\par%
+\begin{flushleft} {\bf Syntax } \end{flushleft} %
+\begin{center}\ %
+\\\ {\APLless}translation table{\APLgreater}{
+{\APLbr}\APLleftarrow}TEXM{\protect\APLunderbar}S {\APLquote}{\APLquote}\\\
+\ \end{center}%
+\begin{flushleft} {\bf Reference} \end{flushleft} %
+TEXM{\protect\APLunderbar}S generates a translation table
+{\APLbr} which maps symbols of the atomic vector to a
+{\APLbr}\LaTeX\ macro name. All standard characters are NOT
+{\APLbr}mapped (lowercase alphabet, uppercase alphabet, numbers).\par
+{\APLbr}\par
+\par\vspace{2mm}
+\begin{flushleft} {\bf Description} \end{flushleft} %
+%
+This translation table is designed for texts which
+ contain only a few APL symbols or short APL expressions.
+ Mixing with \LaTeX\ or \TeX\ commands and macros is
+ possible and allows a decent design of descriptions and
+ short references. Especially using math mode together with
+ APL functions gives a much better documentation for
+ algorithms.
+ It pays off to memoize this function.
+
+
+
+
+
+\par}%
+%
+% end F722
+%
+\vspace{2mm}
+%
+% \input{F723}
+%
+%
+% F723
+%
+% F723
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLT\APLM\APLleftarrow\APLT\APLE\APLX\APLM\protect
+\APLunderbar\APLS\APLspace\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLquote\APLleftbrace\APLslope\APLA
+\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLzero
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLtwo\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLthree\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLspace\APLzero\APLspace\APLdoublequote\APLspace\APLone
+\APLspace\APLdoublequote\APLspace\APLtwo\APLspace\APLdoublequote
+\APLspace\APLthree\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLfour\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLfive\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLsix\APLrightbrace\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLseven\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLspace\APLspace\APLupshoejot\APLspace
+\APLspace\APLfour\APLspace\APLdoublequote\APLspace\APLfive
+\APLspace\APLspace\APLspace\APLsix\APLspace\APLdoublequote\APLspace
+\APLseven\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLeight\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLnine\APLrightbrace\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLone\APLzero\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLone\APLrightbrace
+\APLrightbrace\APLquote\APLspace\APLupshoejot\APLspace
+\APLspace\APLeight\APLspace\APLdoublequote\APLspace\APLnine\APLspace
+\APLdoublequote\APLspace\APLone\APLzero\APLspace\APLdoublequote
+\APLspace\APLone\APLone\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLone\APLtwo\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLone\APLthree\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLfour\APLrightbrace
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLfive
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLupshoejot
+\APLspace\APLone\APLtwo\APLspace\APLdoublequote\APLspace\APLone
+\APLthree\APLspace\APLdoublequote\APLspace\APLone\APLfour
+\APLspace\APLdoublequote\APLspace\APLone\APLfive\APLspace
+\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLone\APLsix\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLone\APLseven\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLeight\APLrightbrace
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone
+\APLnine\APLrightbrace\APLrightbrace\APLquote\APLspace\APLupshoejot
+\APLspace\APLone\APLsix\APLspace\APLdoublequote\APLspace\APLone
+\APLseven\APLspace\APLdoublequote\APLspace\APLone\APLeight
+\APLspace\APLdoublequote\APLspace\APLone\APLnine\APLspace
+\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLtwo\APLzero\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLtwo\APLone\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLtwo\APLrightbrace
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLthree
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLupshoejot
+\APLspace\APLtwo\APLzero\APLspace\APLdoublequote\APLspace\APLtwo
+\APLone\APLspace\APLdoublequote\APLspace\APLtwo\APLtwo\APLspace
+\APLdoublequote\APLspace\APLtwo\APLthree\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLtwo\APLfour\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLtwo\APLfive\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLsix\APLrightbrace
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLseven
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLupshoejot
+\APLspace\APLtwo\APLfour\APLspace\APLdoublequote\APLspace\APLtwo
+\APLfive\APLspace\APLdoublequote\APLspace\APLtwo\APLsix
+\APLspace\APLdoublequote\APLspace\APLtwo\APLseven\APLspace\APLmiss{27}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLtwo\APLeight\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLtwo\APLnine\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLzero
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree
+\APLone\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLtwo\APLeight\APLspace\APLmiss{28}\APLspace
+\APLtwo\APLnine\APLspace\APLdoublequote\APLspace\APLthree\APLzero
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLthree\APLone
+\APLspace\APLmiss{31}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLthree\APLtwo\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLthree\APLthree\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLfour
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree
+\APLfive\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLthree\APLtwo\APLspace\APLmiss{32}\APLspace
+\APLthree\APLthree\APLspace\APLmiss{33}\APLspace\APLthree
+\APLfour\APLspace\APLmiss{34}\APLspace\APLthree\APLfive\APLspace
+\APLmiss{35}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLthree\APLsix\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLthree\APLseven\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLeight
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLthree\APLnine\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLthree\APLsix\APLspace\APLdoublequote
+\APLspace\APLthree\APLseven\APLspace\APLdoublequote\APLspace\APLthree
+\APLeight\APLspace\APLdoublequote\APLspace\APLthree\APLnine
+\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLfour\APLzero\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfour\APLone\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLfour\APLtwo\APLrightbrace
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLthree\APLrightbrace\APLrightbrace\APLquote\APLspace\APLupshoejot
+\APLspace\APLfour\APLzero\APLspace\APLdoublequote\APLspace
+\APLfour\APLone\APLspace\APLdoublequote\APLspace\APLfour\APLtwo
+\APLspace\APLdoublequote\APLspace\APLfour\APLthree\APLspace
+\APLmiss{43}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLfour\APLfour\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfour\APLfive\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLfour\APLsix\APLrightbrace
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLseven\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLfour\APLfour\APLspace\APLmiss{44}\APLspace
+\APLfour\APLfive\APLspace\APLmiss{45}\APLspace\APLfour\APLsix
+\APLspace\APLdoublequote\APLspace\APLfour\APLseven\APLspace
+\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLfour\APLeight\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfour\APLnine\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLzero
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive
+\APLone\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLfour\APLeight\APLspace\APLmiss{48}\APLspace
+\APLfour\APLnine\APLspace\APLmiss{49}\APLspace\APLfive\APLzero
+\APLspace\APLmiss{50}\APLspace\APLfive\APLone\APLspace\APLmiss{51}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLfive\APLtwo\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfive\APLthree\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLfour
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive
+\APLfive\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLfive\APLtwo\APLspace\APLmiss{52}\APLspace
+\APLfive\APLthree\APLspace\APLmiss{53}\APLspace\APLfive\APLfour
+\APLspace\APLmiss{54}\APLspace\APLfive\APLfive\APLspace\APLmiss{55}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLfive\APLsix\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfive\APLseven\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLeight
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive
+\APLnine\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLfive\APLsix\APLspace\APLmiss{56}\APLspace
+\APLfive\APLseven\APLspace\APLmiss{57}\APLspace\APLfive\APLeight
+\APLspace\APLmiss{58}\APLspace\APLfive\APLnine\APLspace\APLmiss{59}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLsix\APLzero\APLrightbrace\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLsix\APLone\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLsix\APLtwo\APLrightbrace
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLsix\APLthree
+\APLrightbrace\APLrightbrace\APLquote\APLspace\APLupshoejot
+\APLspace\APLsix\APLzero\APLspace\APLdoublequote\APLspace\APLsix
+\APLone\APLspace\APLmiss{61}\APLspace\APLsix\APLtwo\APLspace
+\APLmiss{62}\APLspace\APLsix\APLthree\APLspace\APLmiss{63}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLspace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP
+\APLL\APLu\APLA\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLB\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu
+\APLC\APLrightbrace\APLquote\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLupshoejot\APLspace\APLsix
+\APLfour\APLspace\APLspace\APLspace\APLsix\APLfive\APLspace\APLuA
+\APLspace\APLsix\APLsix\APLspace\APLuB\APLspace\APLsix\APLseven
+\APLspace\APLuC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLD\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu
+\APLE\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLu\APLF\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLG
+\APLrightbrace\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLupshoejot\APLspace\APLsix\APLeight
+\APLspace\APLuD\APLspace\APLsix\APLnine\APLspace\APLuE\APLspace
+\APLseven\APLzero\APLspace\APLuF\APLspace\APLseven\APLone\APLspace
+\APLuG
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLH\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu
+\APLI\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLc\APLe\APLn\APLt\APLrightbrace\APLquote
+\APLspace\APLquote\APLdot\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLseven\APLtwo\APLspace\APLuH\APLspace
+\APLseven\APLthree\APLspace\APLuI\APLspace\APLseven\APLfour
+\APLspace\APLcent\APLspace\APLseven\APLfive\APLspace\APLdot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLl\APLe\APLs\APLs\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftparen\APLquote\APLspace
+\APLquote\APLplus\APLquote\APLspace\APLquote\APLleftbrace\APLslope
+\APLA\APLP\APLL\APLv\APLe\APLr\APLt\APLi\APLc\APLa\APLl\APLb
+\APLa\APLr\APLrightbrace\APLquote\APLspace\APLupshoejot\APLspace
+\APLseven\APLsix\APLspace\APLless\APLspace\APLseven\APLseven
+\APLspace\APLleftparen\APLspace\APLseven\APLeight\APLspace
+\APLplus\APLspace\APLseven\APLnine\APLspace\APLverticalbar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLampersand\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA
+\APLP\APLL\APLu\APLJ\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLK\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLu\APLL\APLrightbrace\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLupshoejot\APLspace\APLeight\APLzero\APLspace
+\APLampersand\APLspace\APLeight\APLone\APLspace\APLuJ\APLspace\APLeight
+\APLtwo\APLspace\APLuK\APLspace\APLeight\APLthree\APLspace\APLuL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLM\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu
+\APLN\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLu\APLO\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLP
+\APLrightbrace\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLupshoejot\APLspace\APLeight\APLfour
+\APLspace\APLuM\APLspace\APLeight\APLfive\APLspace\APLuN\APLspace
+\APLeight\APLsix\APLspace\APLuO\APLspace\APLeight\APLseven
+\APLspace\APLuP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLQ\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu
+\APLR\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLe\APLx\APLc\APLl\APLa\APLm\APLa\APLt
+\APLi\APLo\APLn\APLrightbrace\APLquote\APLspace\APLquote\APLdollar
+\APLquote\APLspace\APLspace\APLupshoejot\APLspace\APLeight
+\APLeight\APLspace\APLuQ\APLspace\APLeight\APLnine\APLspace\APLuR
+\APLspace\APLnine\APLzero\APLspace\APLexclamation\APLspace
+\APLnine\APLone\APLspace\APLdollar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLstar
+\APLquote\APLspace\APLquote\APLrightparen\APLquote\APLspace
+\APLquote\APLsemicolon\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLn\APLo\APLt\APLrightbrace\APLquote
+\APLspace\APLspace\APLspace\APLupshoejot\APLspace\APLnine\APLtwo
+\APLspace\APLstar\APLspace\APLnine\APLthree\APLspace
+\APLrightparen\APLspace\APLnine\APLfour\APLspace\APLsemicolon\APLspace
+\APLnine\APLfive\APLspace\APLnot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLbar
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLs\APLl\APLa\APLs\APLh\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLS
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP
+\APLL\APLu\APLT\APLrightbrace\APLquote\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLnine\APLsix\APLspace\APLbar\APLspace
+\APLnine\APLseven\APLspace\APLslash\APLspace\APLnine\APLeight
+\APLspace\APLuS\APLspace\APLnine\APLnine\APLspace\APLuT
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLU\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu
+\APLV\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLu\APLW\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLX
+\APLrightbrace\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLone\APLzero\APLzero\APLspace\APLuU\APLspace
+\APLone\APLzero\APLone\APLspace\APLuV\APLspace\APLone\APLzero
+\APLtwo\APLspace\APLuW\APLspace\APLone\APLzero\APLthree\APLspace
+\APLuX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLY\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu
+\APLZ\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLs\APLp\APLl\APLi\APLt\APLb\APLa\APLr
+\APLrightbrace\APLquote\APLspace\APLquote\APLcomma\APLquote
+\APLspace\APLspace\APLupshoejot\APLone\APLzero\APLfour\APLspace\APLuY
+\APLspace\APLone\APLzero\APLfive\APLspace\APLuZ\APLspace
+\APLone\APLzero\APLsix\APLspace\APLsplitbar\APLspace\APLone\APLzero
+\APLseven\APLspace\APLcomma
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLpercent\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLp\APLr
+\APLo\APLt\APLe\APLc\APLt\APLslope\APLA\APLP\APLL\APLu\APLn
+\APLd\APLe\APLr\APLb\APLa\APLr\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLg\APLr\APLe\APLa
+\APLt\APLe\APLr\APLrightbrace\APLquote\APLspace\APLquote
+\APLquery\APLquote\APLspace\APLupshoejot\APLone\APLzero\APLeight
+\APLspace\APLpercent\APLspace\APLone\APLzero\APLnine\APLspace
+\protect\APLunderbar\APLspace\APLone\APLone\APLzero\APLspace
+\APLgreater\APLspace\APLone\APLone\APLone\APLspace\APLquery
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLone\APLone\APLtwo\APLrightbrace\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLp
+\APLc\APLa\APLr\APLe\APLt\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLd\APLi\APLe\APLr
+\APLe\APLs\APLi\APLs\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLq\APLu\APLa\APLd\APLj
+\APLo\APLt\APLrightbrace\APLquote\APLspace\APLupshoejot\APLone
+\APLone\APLtwo\APLspace\APLmiss{112}\APLspace\APLone\APLone
+\APLthree\APLspace\APLupcaret\APLspace\APLone\APLone\APLfour\APLspace
+\APLdieresis\APLspace\APLone\APLone\APLfive\APLspace\APLquadjot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLi\APLo\APLt\APLa\APLu\APLn
+\APLd\APLe\APLr\APLb\APLa\APLr\APLrightbrace\APLquote\APLspace
+\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLe\APLp\APLs\APLi
+\APLl\APLo\APLn\APLu\APLn\APLd\APLe\APLr\APLb\APLa\APLr
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA
+\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLone
+\APLeight\APLrightbrace\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLone\APLnine\APLrightbrace\APLrightbrace
+\APLquote\APLupshoejot\APLone\APLone\APLsix\APLspace\APLiotaunderbar
+\APLspace\APLspace\APLone\APLone\APLseven\APLspace
+\APLepsilonunderbar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLc\APLa
+\APLr\APLe\APLt\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLa\APLc\APLc\APLe\APLn\APLt
+\APLrightbrace\APLquote\APLspace\APLquote\APLcolon\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLp\APLo\APLu
+\APLn\APLd\APLrightbrace\APLquote\APLspace\APLupshoejot\APLone
+\APLtwo\APLzero\APLspace\APLdowncaret\APLspace\APLone\APLtwo
+\APLone\APLspace\APLaccent\APLspace\APLone\APLtwo\APLtwo
+\APLspace\APLcolon\APLspace\APLone\APLtwo\APLthree\APLspace\APLpound
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLa\APLt\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLq
+\APLu\APLo\APLt\APLe\APLrightbrace\APLquote\APLspace\APLquote
+\APLequal\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA
+\APLP\APLL\APLd\APLo\APLu\APLb\APLl\APLe\APLq\APLu\APLo\APLt\APLe
+\APLrightbrace\APLquote\APLspace\APLspace\APLupshoejot\APLone
+\APLtwo\APLfour\APLspace\APLat\APLspace\APLone\APLtwo\APLfive
+\APLspace\APLquote\APLspace\APLone\APLtwo\APLsix\APLspace
+\APLequal\APLspace\APLone\APLtwo\APLseven\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLt\APLi\APLl\APLd\APLe
+\APLrightbrace\APLquote\APLspace\APLquote\APLa\APLquote\APLspace
+\APLquote\APLb\APLquote\APLspace\APLquote\APLc\APLquote\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLupshoejot\APLone\APLtwo\APLeight\APLspace\APLtilde
+\APLspace\APLone\APLtwo\APLnine\APLspace\APLa\APLspace\APLone
+\APLthree\APLzero\APLspace\APLb\APLspace\APLone\APLthree\APLone
+\APLspace\APLc
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLd
+\APLquote\APLspace\APLquote\APLe\APLquote\APLspace\APLquote\APLf
+\APLquote\APLspace\APLquote\APLg\APLquote\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLone\APLthree\APLtwo\APLspace\APLd\APLspace\APLone
+\APLthree\APLthree\APLspace\APLe\APLspace\APLone\APLthree
+\APLfour\APLspace\APLf\APLspace\APLone\APLthree\APLfive\APLspace
+\APLg
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLh
+\APLquote\APLspace\APLquote\APLi\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLp\APLa\APLr\APLr\APLo
+\APLw\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLa\APLr\APLr\APLo
+\APLw\APLrightbrace\APLquote\APLspace\APLspace\APLupshoejot
+\APLone\APLthree\APLsix\APLspace\APLh\APLspace\APLone\APLthree
+\APLseven\APLspace\APLi\APLspace\APLone\APLthree\APLeight\APLspace
+\APLuparrow\APLspace\APLone\APLthree\APLnine\APLspace
+\APLdownarrow
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLn\APLo\APLt\APLg\APLr\APLe
+\APLa\APLt\APLe\APLr\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLp\APLs\APLt\APLi\APLl
+\APLe\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLs\APLt\APLi\APLl
+\APLe\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace
+\APLslope\APLA\APLP\APLL\APLr\APLi\APLg\APLh\APLt\APLa\APLr\APLr
+\APLo\APLw\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLseven\APLrightbracket}{}
+\APLupshoejot\APLspace\APLone\APLfour\APLzero\APLspace
+\APLnotgreater\APLspace\APLone\APLfour\APLone\APLspace\APLupstile
+\APLspace\APLone\APLfour\APLtwo\APLspace\APLdownstile\APLspace
+\APLone\APLfour\APLthree\APLspace\APLrightarrow
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLq\APLu\APLa\APLd\APLrightbrace
+\APLquote\APLspace\APLquote\APLj\APLquote\APLspace\APLquote
+\APLk\APLquote\APLspace\APLquote\APLl\APLquote\APLspace
+\APLupshoejot\APLspace\APLone\APLfour\APLfour\APLspace\APLquad\APLspace
+\APLone\APLfour\APLfive\APLspace\APLj\APLspace\APLone\APLfour
+\APLsix\APLspace\APLk\APLspace\APLone\APLfour\APLseven\APLspace
+\APLl
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLm
+\APLquote\APLspace\APLquote\APLn\APLquote\APLspace\APLquote\APLo
+\APLquote\APLspace\APLquote\APLp\APLquote\APLspace\APLupshoejot
+\APLspace\APLone\APLfour\APLeight\APLspace\APLm\APLspace\APLone
+\APLfour\APLnine\APLspace\APLn\APLspace\APLone\APLfive\APLzero
+\APLspace\APLo\APLspace\APLone\APLfive\APLone\APLspace\APLp
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLq
+\APLquote\APLspace\APLquote\APLr\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLr\APLi\APLg\APLh\APLt\APLs
+\APLh\APLo\APLe\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLl\APLe\APLf\APLt\APLs\APLh
+\APLo\APLe\APLrightbrace\APLquote\APLspace\APLupshoejot\APLspace
+\APLone\APLfive\APLtwo\APLspace\APLq\APLspace\APLone\APLfive
+\APLthree\APLspace\APLr\APLspace\APLone\APLfive\APLfour\APLspace
+\APLrightshoe\APLspace\APLone\APLfive\APLfive\APLspace
+\APLleftshoe
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLone\APLfive\APLsix\APLrightbrace\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLc\APLi
+\APLr\APLc\APLl\APLe\APLrightbrace\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLfive\APLeight\APLrightbrace\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLl\APLe\APLf\APLt\APLa\APLr\APLr\APLo\APLw\APLrightbrace
+\APLquote\APLspace\APLupshoejot\APLspace\APLone\APLfive\APLsix
+\APLspace\APLmiss{156}\APLspace\APLone\APLfive\APLseven\APLspace
+\APLcircle\APLspace\APLone\APLfive\APLeight\APLspace\APLmiss{158}
+\APLspace\APLone\APLfive\APLnine\APLspace\APLleftarrow
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLp\APLr\APLo\APLt\APLe\APLc\APLt\APLslope\APLA
+\APLP\APLL\APLo\APLv\APLe\APLr\APLb\APLa\APLr\APLrightbrace
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLn\APLa\APLt\APLt\APLi\APLl\APLd\APLe\APLrightbrace\APLquote
+\APLspace\APLquote\APLs\APLquote\APLspace\APLquote\APLt
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLthree\APLrightbracket}{}
+\APLupshoejot\APLspace\APLone\APLsix\APLzero\APLspace
+\protect\APLoverbar\APLspace\APLone\APLsix\APLone\APLspace
+\APLnattilde\APLspace\APLone\APLsix\APLtwo\APLspace\APLs\APLspace\APLone
+\APLsix\APLthree\APLspace\APLt
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLu
+\APLquote\APLspace\APLquote\APLv\APLquote\APLspace\APLquote\APLw
+\APLquote\APLspace\APLquote\APLx\APLquote\APLspace\APLupshoejot
+\APLspace\APLone\APLsix\APLfour\APLspace\APLu\APLspace\APLone
+\APLsix\APLfive\APLspace\APLv\APLspace\APLone\APLsix\APLsix
+\APLspace\APLw\APLspace\APLone\APLsix\APLseven\APLspace\APLx
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLy
+\APLquote\APLspace\APLquote\APLz\APLquote\APLspace\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLu\APLp\APLs\APLh\APLo\APLe
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope
+\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLs\APLh\APLo\APLe
+\APLrightbrace\APLquote\APLspace\APLupshoejot\APLspace\APLone\APLsix
+\APLeight\APLspace\APLy\APLspace\APLone\APLsix\APLnine\APLspace
+\APLz\APLspace\APLone\APLseven\APLzero\APLspace\APLupshoe
+\APLspace\APLone\APLseven\APLone\APLspace\APLdownshoe
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLt\APLa
+\APLc\APLk\APLrightbrace\APLquote\APLspace\APLquote\APLleftbracket
+\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP
+\APLL\APLn\APLo\APLt\APLl\APLe\APLs\APLs\APLrightbrace\APLquote
+\APLspace\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL\APLj
+\APLo\APLt\APLrightbrace\APLquote\APLspace\APLupshoejot\APLspace
+\APLone\APLseven\APLtwo\APLspace\APLdowntack\APLspace\APLone
+\APLseven\APLthree\APLspace\APLleftbracket\APLspace\APLone
+\APLseven\APLfour\APLspace\APLnotless\APLspace\APLone\APLseven\APLfive
+\APLspace\APLjot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote
+\APLleftbrace\APLslope\APLA\APLP\APLL\APLa\APLl\APLp\APLh\APLa
+\APLrightbrace\APLquote\APLspace\APLquote\APLleftbrace\APLslope\APLA
+\APLP\APLL\APLe\APLp\A \ No newline at end of file
diff --git a/macros/latex209/contrib/apl/apl2texw.tex b/macros/latex209/contrib/apl/apl2texw.tex
new file mode 100644
index 0000000000..bb1169e381
--- /dev/null
+++ b/macros/latex209/contrib/apl/apl2texw.tex
@@ -0,0 +1,2816 @@
+%
+% APL2TEX TEX A
+%
+\documentstyle[titlepage,apl]{article}
+\title{Workspace APL2TEX}
+\author{Andreas Geyer-Schulz}
+\date{1991-04-02}
+\markboth{Andreas Geyer-Schulz - Workspace APL2TEX - 1991-04-02 17:24:47}%
+{Andreas Geyer-Schulz - Workspace APL2TEX - 1991-04-02 17:24:47}
+\pagestyle{myheadings}
+\topmargin=1cm
+\oddsidemargin=2cm
+\evensidemargin=2cm
+\addtolength{\oddsidemargin}{-1in}
+\addtolength{\evensidemargin}{-1in}
+\addtolength{\topmargin}{-1in}
+\headheight=3mm
+\headsep=7mm
+\footheight=0mm
+\topskip=0cm
+\textwidth=17cm
+\textheight=25cm
+\begin{document}\maketitle
+\section{Operators}
+\section{Functions}
+\subsection{\ \ \ \protect\APLdelta\protect\APLdelta\APLF\APLV } % YYFV
+%
+% \input{f1}
+%
+%
+% F1
+%
+% F1 YYFV
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLA\APLR\APLG\APLspace\protect\APLdelta
+\protect\APLdelta\APLF\APLV\APLspace\APLF\APLN\APLsemicolon
+\protect\APLdelta\APLF\APLV
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLthree\APLspace\APLone\APLzero\APLspace
+\APLquad\APLN\APLA\APLspace\APLquote\protect\APLdelta\APLF
+\APLV\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLzero\APLequal\APLquad\APLN
+\APLC\APLspace\APLquote\APLA\APLR\APLG\APLquote\APLrightparen
+\APLslash\APLR\APLE\APLA\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLZ\APLleftarrow\APLA\APLR\APLG\APLspace\protect\APLdelta
+\APLF\APLV\APLspace\APLF\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLR\APLE\APLA\APLD\APLcolon\APLZ\APLleftarrow\protect
+\APLdelta\APLF\APLV\APLspace\APLF\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F1
+%
+\subsection{\ \ \ \APLA\APLP\APLL\APLF\APLN\APLS\APLL\APLI\APLN\APLE } % APLFNSLINE
+%
+% \input{f2}
+%
+%
+% F2
+%
+% F2 APLFNSLINE
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLA\APLP\APLL\APLF\APLN\APLS\APLL\APLI\APLN\APLE\APLspace
+\APLA\APLsemicolon\APLF\APLL\APLsemicolon\APLF\APLR
+\APLsemicolon\APLL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLleftparen\APLF\APLL\APLspace\APLF\APLR\APLspace\APLL
+\APLrightparen\APLleftarrow\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLleftparen\APLepsilon\APLquote\APLslope\APLb\APLe\APLg\APLi\APLn
+\APLleftbrace\APLA\APLP\APLL\APLf\APLn\APLs\APLl\APLi\APLn\APLe
+\APLrightbrace\APLleftbrace\APLquote\APLcomma\APLleftparen
+\APLA\APLP\APLL\APLT\APLO\APLT\APLE\APLX\APLspace\APLF\APLL
+\APLrightparen\APLcomma\APLquote\APLrightbrace\APLleftbrace\APLquote
+\APLcomma\APLleftparen\APLA\APLP\APLL\APLT\APLO\APLT\APLE\APLX
+\APLspace\APLF\APLR\APLrightparen\APLcomma\APLquote
+\APLrightbrace\APLquote\APLrightparen\APLtilde\APLquote\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLA\APLP\APLL
+\APLT\APLO\APLT\APLE\APLX\APLleftparen\APLbar\APLplus\APLslash
+\APLupcaret\APLslope\APLquote\APLspace\APLquote\APLequal
+\APLcirclestile\APLL\APLrightparen\APLdownarrow\APLL\APLleftarrow
+\APLcomma\APLL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace\APLA\APLP\APLL\APLf
+\APLn\APLs\APLl\APLi\APLn\APLe\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F2
+%
+\subsection{\ \ \ \APLA\APLP\APLL\APLL\APLI\APLN\APLE } % APLLINE
+%
+% \input{f3}
+%
+%
+% F3
+%
+% F3 APLLINE
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLA\APLP\APLL\APLL\APLI\APLN\APLE\APLspace\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftparen
+\APLquote\APLF\APLquote\APLspace\APLA\APLP\APLL\APLT\APLO\APLT\APLE
+\APLX\APLleftparen\APLbar\APLplus\APLslash\APLupcaret\APLslope
+\APLquote\APLspace\APLquote\APLequal\APLcirclestile\APLA
+\APLrightparen\APLdownarrow\APLA\APLleftarrow\APLcomma\APLA
+\APLrightparen\APLcomma\APLleftshoe\APLquote\APLslope\APLA\APLP\APLL
+\APLs\APLp\APLa\APLc\APLe\APLslope\APLp\APLa\APLr\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F3
+%
+\subsection{\ \ \ \APLA\APLP\APLL\APLT\APLO\APLT\APLE\APLX } % APLTOTEX
+%
+% \input{f4}
+%
+%
+% F4
+%
+% F4 APLTOTEX
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLY\APLspace\APLA\APLP\APLL\APLT\APLO
+\APLT\APLE\APLX\APLspace\APLA\APLsemicolon\APLC\APLsemicolon\APLB
+\APLsemicolon\APLI\APLsemicolon\APLD\APLsemicolon\APLquad\APLI
+\APLO\APLsemicolon\APLuA\APLuL\APLuF\APLsemicolon\APLL
+\APLsemicolon\APLI\APLD\APLsemicolon\APLD\APLE\APLN\APLS\APLsemicolon
+\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLleftparen\APLI\APLD\APLspace\APLD\APLE\APLN\APLS
+\APLrightparen\APLleftarrow\APLone\APLfive\APLspace\APLfive
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtwo\APLnotequal\APLquad\APLN
+\APLC\APLspace\APLquote\APLY\APLquote\APLrightparen\APLslash
+\APLquote\APLY\APLleftarrow\APLquote\APLquote\APLV\APLquote
+\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLuA\APLuL\APLuF\APLleftarrow\APLquote\APLA\APLB\APLC\APLD
+\APLE\APLF\APLG\APLH\APLI\APLJ\APLK\APLL\APLM\APLN\APLO\APLbr
+\APLP\APLQ\APLR\APLS\APLT\APLbr\APLU\APLV\APLW\APLX\APLY\APLbr
+\APLZ\APLuA\APLuB\APLuC\APLuD\APLbr\APLuE\APLuF\APLuG\APLuH
+\APLuI\APLbr\APLuJ\APLuK\APLuL\APLuM\APLuN\APLbr\APLuO\APLuP\APLuQ
+\APLuR\APLuS\APLbr\APLuT\APLuU\APLuV\APLuW\APLuX\APLbr\APLuY
+\APLuZ\protect\APLdelta\protect\APLdeltaunderbar\protect
+\APLunderbar\APLbr\protect\APLoverbar\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLD\APLleftarrow\APLI\APLD\APLless\APLL\APLleftarrow
+\APLepsilon\APLrho\APLdieresis\APLB\APLleftarrow\APLleftparen\APLA
+\APLepsilon\APLuA\APLuL\APLuF\APLrightparen\APLleftshoe\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLzero\APLequal\APLrho\APLC
+\APLleftarrow\APLD\APLslash\APLB\APLrightparen\APLslash\APLE\APLN
+\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLL\APLleftarrow\APLD\APLslash\APLL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLC\APLleftarrow\APLepsilon\APLplus\APLslash\APLE
+\APLleftarrow\APLC\APLepsilonunderbar\APLdieresis\APLleftshoe\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLD\APLleftarrow\APLleftparen\APLD\APLE\APLN\APLS\APLtimes
+\APLiota\APLdownstile\APLleftparen\APLupstile\APLslash\APLL
+\APLleftarrow\APLL\APLbar\APLI\APLD\APLrightparen\APLdivide\APLD
+\APLE\APLN\APLS\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLB\APLleftarrow\APLleftparen\APLC\APLtilde\APLzero
+\APLrightparen\APLslash\APLleftparen\APLleftparen\protect\APLoverbar
+\APLone\APLtimes\APLI\APLD\APLrightparen\APLcirclestile\APLC
+\APLgreater\APLzero\APLrightparen\APLslash\APLiota\APLrho\APLC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLL\APLleftarrow\APLleftparen\APLplus\APLslash\APLdieresis
+\APLE\APLrightparen\APLslash\APLL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLD\APLleftarrow\APLleftparen\APLC\APLleftarrow\APLB
+\APLjot\APLdot\APLplus\APLzero\APLcomma\APLD\APLrightparen\APLless
+\APLleftbracket\APLone\APLrightbracket\APLleftparen\APLB\APLplus
+\APLL\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLC\APLleftarrow\APLleftparen\APLcomma\APLD\APLrightparen
+\APLslash\APLcomma\APLC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLI\APLleftarrow\APLleftparen\APLrho\APLA\APLrightparen
+\APLrho\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLI\APLleftbracket\APLC\APLrightbracket\APLleftarrow
+\APLleftparen\APLrho\APLC\APLrightparen\APLrho\APLtwo
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLA\APLleftarrow\APLI\APLslash\APLA\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLupshoejot\APLspace\APLR\APLE\APLP\APLL\APLI
+\APLC\APLA\APLT\APLE\APLspace\APLI\APLN\APLS\APLT\APLE\APLA
+\APLD\APLspace\APLO\APLF\APLspace\APLD\APLE\APLR\APLI\APLV\APLI
+\APLN\APLG\APLspace\APLS\APLC\APLA\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLE\APLN\APLD\APLcolon\APLA\APLleftarrow\APLT\APLE\APLX
+\APLM\APLA\APLC\APLR\APLO\APLS\APLleftbracket\APLquad\APLA\APLV
+\APLiota\APLA\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLY\APLequal\APLquote\APLF
+\APLquote\APLrightparen\APLslash\APLquote\APLA\APLleftarrow\APLF
+\APLI\APLX\APLE\APLD\APLS\APLP\APLA\APLC\APLI\APLN\APLG
+\APLdieresis\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLleftparen\APLrho\APLC
+\APLrightparen\APLequal\APLzero\APLrightparen\APLslash\APLJ\APLU\APLM
+\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\APLA\APLleftbracket\APLleftparen\APLzero\APLcomma\protect
+\APLoverbar\APLone\APLdownarrow\APLiota\APLrho\APLC
+\APLrightparen\APLplus\APLC\APLrightbracket\APLleftarrow\APLleftparen
+\APLrho\APLC\APLrightparen\APLrho\APLleftshoe\APLquote\APLslope\APLA
+\APLP\APLL\APLb\APLr\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\APLJ\APLU\APLM\APLP\APLcolon\APLC\APLleftarrow\APLleftparen
+\APLquote\APLslope\APLquote\APLequal\APLZ\APLrightparen
+\APLslash\APLiota\APLrho\APLZ\APLleftarrow\APLleftparen\APLepsilon
+\APLA\APLrightparen\APLtilde\APLquote\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\APLD\APLleftarrow\APLleftparen\APLiota\APLdownstile
+\APLleftparen\APLrho\APLZ\APLrightparen\APLdivide\APLsix\APLtwo
+\APLrightparen\APLtimes\APLsix\APLtwo\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLspace\APLT
+\APLH\APLE\APLspace\APLL\APLO\APLN\APLG\APLE\APLS\APLT\APLspace
+\APLL\APLI\APLN\APLE\APLspace\APLL\APLE\APLN\APLG\APLT\APLH
+\APLspace\APLS\APLH\APLO\APLU\APLL\APLD\APLspace\APLB\APLE\APLspace
+\APLL\APLE\APLS\APLS\APLspace\APLT\APLH\APLE\APLN\APLspace
+\APLeight\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\APLB\APLleftarrow\APLC\APLleftbracket\APLplus\APLslashbar
+\APLrightshoe\APLC\APLless\APLdieresis\APLleftshoe\APLD
+\APLrightbracket\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLspace\APLR
+\APLA\APLI\APLS\APLE\APLspace\APLA\APLN\APLD\APLspace\APLD
+\APLI\APLS\APLC\APLL\APLO\APLS\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\APLI\APLleftarrow\APLleftparen\APLrho\APLZ\APLrightparen
+\APLrho\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLI\APLleftbracket\APLB\APLrightbracket\APLleftarrow
+\APLleftparen\APLrho\APLB\APLrightparen\APLrho\APLtwo
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLsix\APLrightbracket}{}
+\APLZ\APLleftarrow\APLI\APLslash\APLZ\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLupshoejot\APLspace\APLR\APLE\APLP\APLL\APLI
+\APLC\APLA\APLT\APLE\APLspace\APLI\APLN\APLS\APLT\APLE\APLA
+\APLD\APLspace\APLO\APLF\APLspace\APLD\APLE\APLR\APLI\APLV\APLI
+\APLN\APLG\APLspace\APLS\APLC\APLA\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLseven\APLrightbracket}{}
+\APLZ\APLleftbracket\APLI\APLleftarrow\APLleftparen
+\APLleftparen\APLzero\APLcomma\protect\APLoverbar\APLone\APLdownarrow
+\APLiota\APLrho\APLB\APLrightparen\APLrightparen\APLplus\APLB
+\APLrightbracket\APLleftarrow\APLleftparen\APLrho\APLB
+\APLrightparen\APLrho\APLleftshoe\APLquote\APLspace\APLquote\APLquote
+\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLeight\APLrightbracket}{}
+\APLZ\APLleftarrow\APLdowntackjot\APLepsilon\APLZ
+\APLleftarrow\APLquote\APLquote\APLquote\APLquote\APLcomma\APLZ\APLcomma
+\APLquote\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLnine\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLzero\APLequal\APLrho\APLB
+\APLrightparen\APLslash\APLquote\APLZ\APLleftarrow\APLleftshoe
+\APLZ\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F4
+%
+\subsection{\ \ \ \APLA\APLP\APLL\APLT\APLO\APLT\APLE\APLX\protect\APLunderbar \APLS } % APLTOTEX_S
+%
+% \input{f5}
+%
+%
+% F5
+%
+% F5 APLTOTEX_S
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLY\APLspace\APLA\APLP\APLL\APLT\APLO
+\APLT\APLE\APLX\protect\APLunderbar\APLS\APLspace\APLA
+\APLsemicolon\APLC\APLsemicolon\APLB\APLsemicolon\APLI\APLsemicolon\APLD
+\APLsemicolon\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS
+\APLsemicolon\APLquad\APLI\APLO\APLsemicolon\APLF\APLR\APLA\APLG
+\APLI\APLL\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtwo\APLnotequal\APLquad\APLN
+\APLC\APLspace\APLquote\APLY\APLquote\APLrightparen\APLslash
+\APLquote\APLY\APLleftarrow\APLquote\APLquote\APLV\APLquote
+\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\protect\APLunderbar\APLS\APLspace\APLquote
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLA\APLleftarrow\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO
+\APLS\APLleftbracket\APLquad\APLA\APLV\APLiota\APLA
+\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLY\APLequal\APLquote\APLF
+\APLquote\APLrightparen\APLslash\APLquote\APLA\APLleftarrow\APLF
+\APLI\APLX\APLE\APLD\APLS\APLP\APLA\APLC\APLI\APLN\APLG
+\APLdieresis\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLupshoejot\APLC\APLleftarrow\APLleftparen\APLleftparen
+\APLquote\APLslope\APLA\APLP\APLL\APLquote\APLepsilonunderbar
+\APLZ\APLrightparen\APLdowncaret\APLleftparen\APLquote\APLspace
+\APLquote\APLequal\APLZ\APLrightparen\APLrightparen\APLslash
+\APLiota\APLrho\APLZ\APLleftarrow\APLepsilon\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLC\APLleftarrow\APLleftparen\APLquote\APLslope\APLA\APLP
+\APLL\APLquote\APLepsilonunderbar\APLZ\APLrightparen\APLslash
+\APLiota\APLrho\APLZ\APLleftarrow\APLepsilon\APLA\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLI\APLN\APLS\APLE\APLR\APLT\APLspace\APLP\APLO\APLS
+\APLI\APLT\APLI\APLO\APLN\APLspace\APLB\APLE\APLF\APLO\APLR
+\APLE\APLspace\APLslope
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLC\APLleftarrow\APLC\APLcomma\APLleftparen\APLzero
+\APLcomma\protect\APLoverbar\APLone\APLdownarrow\APLleftparen
+\APLquote\APLspace\APLquote\APLequal\APLZ\APLrightparen\APLrightparen
+\APLslash\APLiota\APLrho\APLZ\APLspace\APLspace\APLspace
+\APLspace\APLupshoejot\APLspace\APLI\APLN\APLS\APLE\APLR\APLT
+\APLspace\APLP\APLO\APLS\APLI\APLT\APLI\APLO\APLN\APLspace\APLA\APLF
+\APLT\APLE\APLR\APLspace\APLS\APLP\APLA\APLC\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLC\APLleftarrow\APLC\APLleftbracket\APLdeltastile\APLC
+\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLC\APLleftarrow\APLC\APLtilde\APLF\APLR\APLA\APLG\APLI
+\APLL\APLE\APLleftarrow\APLleftparen\APLleftparen\APLquote
+\APLslope\APLA\APLP\APLL\APLu\APLn\APLd\APLe\APLr\APLb\APLa\APLr
+\APLquote\APLepsilonunderbar\APLZ\APLrightparen\APLdowncaret
+\APLleftparen\APLquote\APLslope\APLA\APLP\APLL\APLo\APLv\APLe\APLr
+\APLb\APLa\APLr\APLquote\APLepsilonunderbar\APLZ\APLrightparen
+\APLdowncaret\APLleftparen\APLquote\APLslope\APLA\APLP\APLL\APLd
+\APLe\APLl\APLt\APLa\APLquote\APLepsilonunderbar\APLZ
+\APLrightparen\APLdowncaret\APLleftparen\APLquote\APLslope\APLslope
+\APLslope\APLspace\APLquote\APLepsilonunderbar\APLZ\APLrightparen
+\APLrightparen\APLslash\APLiota\APLrho\APLZ
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLD\APLleftarrow\APLleftparen\APLiota\APLdownstile
+\APLleftparen\APLrho\APLZ\APLrightparen\APLdivide\APLsix\APLtwo
+\APLrightparen\APLtimes\APLsix\APLtwo
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLB\APLleftarrow\APLC\APLleftbracket\APLplus\APLslashbar
+\APLrightshoe\APLC\APLless\APLdieresis\APLleftshoe\APLD
+\APLrightbracket\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLspace\APLR
+\APLA\APLI\APLS\APLE\APLspace\APLA\APLN\APLD\APLspace\APLD
+\APLI\APLS\APLC\APLL\APLO\APLS\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLI\APLleftarrow\APLleftparen\APLrho\APLZ\APLrightparen
+\APLrho\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLI\APLleftbracket\APLB\APLrightbracket\APLleftarrow
+\APLleftparen\APLrho\APLB\APLrightparen\APLrho\APLtwo
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLZ\APLleftarrow\APLI\APLslash\APLZ\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLupshoejot\APLspace\APLR\APLE\APLP\APLL\APLI
+\APLC\APLA\APLT\APLE\APLspace\APLA\APLN\APLD\APLspace\APLD
+\APLE\APLR\APLI\APLV\APLI\APLN\APLG\APLspace\APLS\APLC\APLA\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLZ\APLleftbracket\APLI\APLleftarrow\APLleftparen
+\APLleftparen\APLzero\APLcomma\protect\APLoverbar\APLone\APLdownarrow
+\APLiota\APLrho\APLB\APLrightparen\APLrightparen\APLplus\APLB
+\APLrightbracket\APLleftarrow\APLleftparen\APLrho\APLB
+\APLrightparen\APLrho\APLleftshoe\APLquote\APLspace\APLquote\APLquote
+\APLspace\APLquote\APLquote\APLleftbrace\APLslope\APLA\APLP\APLL
+\APLb\APLr\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLZ\APLleftarrow\APLdowntackjot\APLepsilon\APLZ
+\APLleftarrow\APLquote\APLquote\APLquote\APLquote\APLcomma\APLZ\APLcomma
+\APLquote\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLzero\APLequal\APLrho\APLB
+\APLrightparen\APLslash\APLquote\APLZ\APLleftarrow\APLleftshoe
+\APLZ\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F5
+%
+\subsection{\ \ \ \APLB\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA\APLR\APLR \APLA\APLY } % BEGIN_ARRAY
+%
+% \input{f6}
+%
+%
+% F6
+%
+% F6 BEGIN_ARRAY
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLB\APLE\APLG\APLI\APLN\protect
+\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLleftshoe\APLquote\APLslope\APLb\APLe
+\APLg\APLi\APLn\APLleftbrace\APLf\APLo\APLo\APLt\APLn\APLo\APLt
+\APLe\APLs\APLi\APLz\APLe\APLrightbrace\APLslope\APLb\APLe\APLg
+\APLi\APLn\APLleftbrace\APLA\APLP\APLL\APLa\APLr\APLr\APLa
+\APLy\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F6
+%
+\subsection{\ \ \ \APLD\APLI\APLS\APLP\APLL\APLA\APLY } % DISPLAY
+%
+% \input{f7}
+%
+%
+% F7
+%
+% F7 DISPLAY
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLD\APLI\APLS\APLP\APLL\APLA\APLY
+\APLspace\APLA\APLsemicolon\APLquad\APLI\APLO\APLsemicolon\APLS\APLH
+\APLA\APLP\APLE\APLsemicolon\APLD\APLE\APLP\APLT\APLH
+\APLsemicolon\APLT\APLY\APLP\APLE\APLsemicolon\APLD\APLI\APLM\APLE\APLN
+\APLS\APLI\APLO\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLS\APLH\APLA\APLP\APLE\APLleftarrow\APLrho\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLzero\APLnotequal\APLD\APLE
+\APLP\APLT\APLH\APLleftarrow\APLequalunderbar\APLA\APLrightparen
+\APLslash\APLN\APLO\APLT\protect\APLunderbar\APLS\APLI\APLM
+\APLP\APLL\APLE\protect\APLunderbar\APLS\APLC\APLA\APLL\APLbr\APLA
+\APLR
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLS\APLI\APLM\APLP\APLL\APLE\protect\APLunderbar\APLS\APLC
+\APLA\APLL\APLA\APLR\APLcolon\APLZ\APLleftarrow\APLquote
+\APLspace\APLquote\APLcomma\APLleftbracket\APLone\APLrightbracket
+\APLleftparen\APLquote\APLspace\APLquote\APLcomma\APLleftbracket
+\APLzero\APLrightbracket\APLleftparen\APLleftparen\APLtwo
+\APLrho\APLone\APLcomma\APLleftparen\APLrho\APLA\APLrightparen
+\APLrightparen\APLrho\APLA\APLleftarrow\APLuptackjot\APLA
+\APLrightparen\APLcomma\APLleftbracket\APLzero\APLrightbracket
+\APLleftparen\APLquote\APLbar\APLspace\APLquote\APLrightparen
+\APLleftbracket\APLzero\APLequal\APLuparrow\APLzero\APLrho\APLA
+\APLrightbracket\APLrightparen\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLquote\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLN\APLO\APLT\protect\APLunderbar\APLS\APLI\APLM\APLP\APLL
+\APLE\protect\APLunderbar\APLS\APLC\APLA\APLL\APLbr\APLA\APLR
+\APLcolon\APLrightarrow\APLleftparen\APLtilde\APLzero
+\APLepsilon\APLS\APLH\APLA\APLP\APLE\APLrightparen\APLslash\APLN\APLO
+\APLT\protect\APLunderbar\APLE\APLM\APLP\APLT\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLE\APLM\APLP\APLT\APLY\APLcolon\APLA\APLleftarrow
+\APLleftparen\APLone\APLupstile\APLrho\APLA\APLrightparen\APLrho
+\APLleftshoe\APLuparrow\APLA\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLP\APLR\APLO\APLT\APLO\APLT\APLY\APLP\APLE\APLS\APLspace
+\APLO\APLF\APLspace\APLE\APLM\APLP\APLT\APLI\APLE\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLN\APLO\APLT\protect\APLunderbar\APLE\APLM\APLP\APLT\APLY
+\APLcolon\APLrightarrow\APLleftparen\APLone\APLequal\APLD\APLE
+\APLP\APLT\APLH\APLrightparen\APLslash\APLS\APLI\APLM\APLP
+\APLL\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLG\APLE\APLN\APLE\APLR\APLA\APLL\APLI\APLZ\APLE\APLD
+\APLcolon\APLA\APLleftarrow\APLleftparen\APLZ\APLdowncaret\APLtilde
+\APLone\APLcirclestile\APLZ\APLleftarrow\APLA\APLdowncaret
+\APLdot\APLnotequal\APLquote\APLspace\APLquote\APLrightparen
+\APLslash\APLleftbracket\APLzero\APLrightbracket\APLA\APLleftarrow
+\APLleftparen\APLZ\APLdowncaret\APLone\APLcomma\protect
+\APLoverbar\APLone\APLdownarrow\APLZ\APLleftarrow\APLquote\APLspace
+\APLquote\APLdowncaret\APLdot\APLnotequal\APLA\APLrightparen
+\APLslash\APLA\APLleftarrow\APLuptackjot\APLD\APLI\APLS\APLP\APLL
+\APLA\APLY\APLdieresis\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLupshoejot\APLG\APLE\APLN\APLE\APLR\APLA\APLL\APLI\APLZ
+\APLE\APLD\APLcolon\APLA\APLleftarrow\APLleftparen\APLZ
+\APLdowncaret\APLone\APLdownarrow\APLone\APLcirclestile\APLone\APLcomma
+\APLZ\APLleftarrow\APLA\APLdowncaret\APLdot\APLnotequal
+\APLquote\APLspace\APLquote\APLrightparen\APLslash\APLleftbracket
+\APLzero\APLrightbracket\APLA\APLleftarrow\APLleftparen\APLZ
+\APLdowncaret\APLone\APLcomma\protect\APLoverbar\APLone\APLdownarrow
+\APLZ\APLleftarrow\APLquote\APLspace\APLquote\APLdowncaret
+\APLdot\APLnotequal\APLA\APLrightparen\APLslash\APLA\APLleftarrow
+\APLuptackjot\APLD\APLI\APLS\APLP\APLL\APLA\APLY\APLdieresis
+\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLT\APLY\APLP\APLE\APLleftarrow\APLquote\APLepsilon
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLrightarrow\APLB\APLO\APLX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLS\APLI\APLM\APLP\APLL\APLE\APLcolon\APLT\APLY\APLP\APLE
+\APLleftarrow\APLleftparen\APLquote\APLtilde\APLbar\APLplus
+\APLquote\APLrightparen\APLleftbracket\protect\APLoverbar\APLone
+\APLplus\APLtwo\APLdowntack\APLleftparen\APLzero\APLspace\APLone
+\APLrightparen\APLepsilon\APLleftparen\APLzero\APLequal
+\APLuparrow\APLzero\APLrho\APLleftshoe\APLA\APLrightparen
+\APLrightbracket\APLspace\APLupshoejot\APLspace\APLC\APLH\APLA\APLR
+\APLcomma\APLspace\APLN\APLU\APLM\APLE\APLR\APLI\APLC\APLcomma
+\APLspace\APLM\APLI\APLX\APLE\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLB\APLO\APLX\APLcolon\APLD\APLI\APLM\APLE\APLN\APLS\APLI
+\APLO\APLN\APLleftarrow\APLleftparen\APLleftparen\APLquote
+\APLdownarrow\APLcirclestile\APLquote\APLrightparen\APLleftbracket
+\APLzero\APLequal\protect\APLoverbar\APLone\APLdownarrow\APLS
+\APLH\APLA\APLP\APLE\APLrightbracket\APLrightparen\APLcomma
+\APLleftparen\APLleftparen\APLquote\APLrightarrow\APLcirclebar
+\APLquote\APLrightparen\APLleftbracket\APLzero\APLequal\protect
+\APLoverbar\APLone\APLuparrow\APLS\APLH\APLA\APLP\APLE
+\APLrightbracket\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLleftparen\APLzero\APLspace
+\APLone\APLspace\APLtwo\APLrightparen\APLequal\APLrho\APLS\APLH
+\APLA\APLP\APLE\APLrightparen\APLslash\APLS\APLC\APLA\APLL\APLA
+\APLR\APLcomma\APLV\APLE\APLC\APLT\APLO\APLR\APLcomma\APLM\APLA
+\APLT\APLR\APLI\APLX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLH\APLI\APLG\APLH\APLE\APLR\APLcolon\APLZ\APLleftarrow
+\APLleftparen\APLleftparen\APLleftparen\APLtwo\APLplus\APLuparrow
+\APLrho\APLA\APLrightparen\APLcomma\protect\APLoverbar\APLone
+\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE\APLrightparen\APLrho
+\APLquote\APLstile\APLquote\APLrightparen\APLcomma
+\APLleftbracket\APLone\APLrightbracket\APLleftparen\APLquote\APLbar\APLquote
+\APLcomma\APLleftbracket\APLzero\APLrightbracket\APLleftparen
+\APLA\APLleftarrow\APLzero\APLspace\APLone\APLdownarrow\APLzero
+\APLspace\protect\APLoverbar\APLone\APLdownarrow\APLuptackjot
+\APLleftshoe\APLA\APLrightparen\APLcomma\APLleftbracket\APLzero
+\APLrightbracket\APLquote\APLbar\APLquote\APLrightparen
+\APLcomma\APLleftbracket\APLone\APLrightbracket\APLquote\APLstile
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLZ\APLleftbracket\APLleftparen\APLzero\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLone\APLuparrow\APLrho
+\APLZ\APLrightparen\APLrightparen\APLsemicolon\APLleftparen
+\APLleftparen\APLiota\APLrho\APLS\APLH\APLA\APLP\APLE
+\APLrightparen\APLcomma\protect\APLoverbar\APLone\APLplus\protect
+\APLoverbar\APLone\APLuparrow\APLrho\APLZ\APLrightparen\APLrightbracket
+\APLleftarrow\APLleftparen\APLtwo\APLcomma\APLleftparen\APLone
+\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE\APLrightparen
+\APLrightparen\APLrho\APLleftparen\APLleftparen\protect\APLoverbar
+\APLone\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE\APLrightparen
+\APLrho\APLquote\APLdot\APLquote\APLrightparen\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLuparrow\APLD\APLI\APLM\APLE
+\APLN\APLS\APLI\APLO\APLN\APLrightparen\APLcomma\APLquote\APLdot
+\APLquote\APLcomma\APLleftparen\APLleftparen\protect\APLoverbar
+\APLone\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE\APLrightparen
+\APLrho\APLquote\APLquote\APLquote\APLquote\APLrightparen
+\APLcomma\APLT\APLY\APLP\APLE\APLcomma\APLquote\APLquote\APLquote
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLZ\APLleftbracket\APLone\APLsemicolon\APLiota\protect
+\APLoverbar\APLone\APLplus\APLrho\APLS\APLH\APLA\APLP\APLE
+\APLrightbracket\APLleftarrow\protect\APLoverbar\APLone\APLdownarrow
+\APLD\APLI\APLM\APLE\APLN\APLS\APLI\APLO\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\APLM\APLA\APLT\APLR\APLI\APLX\APLcolon\APLZ\APLleftarrow
+\APLleftparen\APLquote\APLstile\APLquote\APLrightparen\APLcomma
+\APLleftbracket\APLone\APLrightbracket\APLleftparen\APLquote
+\APLbar\APLquote\APLcomma\APLleftbracket\APLzero\APLrightbracket
+\APLleftparen\APLA\APLleftarrow\APLuptackjot\APLA\APLrightparen
+\APLcomma\APLleftbracket\APLzero\APLrightbracket\APLquote
+\APLbar\APLquote\APLrightparen\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLquote\APLstile\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\APLZ\APLleftbracket\APLleftparen\APLzero\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLone\APLuparrow\APLrho
+\APLZ\APLrightparen\APLrightparen\APLsemicolon\APLleftparen
+\APLleftparen\APLzero\APLspace\APLone\APLrightparen\APLcomma
+\protect\APLoverbar\APLone\APLplus\protect\APLoverbar\APLone
+\APLuparrow\APLrho\APLZ\APLrightparen\APLrightbracket\APLleftarrow
+\APLtwo\APLspace\APLthree\APLrho\APLquote\APLdot\APLquote
+\APLcomma\APLleftparen\protect\APLoverbar\APLone\APLuparrow\APLD\APLI
+\APLM\APLE\APLN\APLS\APLI\APLO\APLN\APLrightparen\APLcomma
+\APLquote\APLdot\APLquote\APLquote\APLquote\APLcomma\APLT\APLY\APLP
+\APLE\APLcomma\APLquote\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\APLZ\APLleftbracket\APLone\APLsemicolon\APLzero
+\APLrightbracket\APLleftarrow\protect\APLoverbar\APLone\APLdownarrow\APLD
+\APLI\APLM\APLE\APLN\APLS\APLI\APLO\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\APLV\APLE\APLC\APLT\APLO\APLR\APLcolon\APLZ\APLleftarrow
+\APLquote\APLstile\APLquote\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLleftparen\APLquote\APLbar\APLquote\APLcomma
+\APLleftbracket\APLzero\APLrightbracket\APLleftparen\APLleftparen
+\protect\APLoverbar\APLtwo\APLuparrow\APLone\APLcomma
+\APLleftparen\APLrho\APLA\APLrightparen\APLrightparen\APLrho\APLA
+\APLleftarrow\APLuptackjot\APLA\APLrightparen\APLcomma\APLleftbracket
+\APLzero\APLrightbracket\APLquote\APLbar\APLquote\APLrightparen
+\APLcomma\APLleftbracket\APLone\APLrightbracket\APLquote
+\APLstile\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLZ\APLleftbracket\APLleftparen\APLzero\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLone\APLuparrow\APLrho
+\APLZ\APLrightparen\APLrightparen\APLsemicolon\APLleftparen
+\APLleftparen\APLzero\APLspace\APLone\APLrightparen\APLcomma
+\protect\APLoverbar\APLone\APLplus\protect\APLoverbar\APLone
+\APLuparrow\APLrho\APLZ\APLrightparen\APLrightbracket\APLleftarrow
+\APLtwo\APLspace\APLthree\APLrho\APLquote\APLdot\APLquote
+\APLcomma\APLD\APLI\APLM\APLE\APLN\APLS\APLI\APLO\APLN\APLcomma
+\APLquote\APLdot\APLquote\APLquote\APLquote\APLcomma\APLT\APLY\APLP
+\APLE\APLcomma\APLquote\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLsix\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLseven\APLrightbracket}{}
+\APLS\APLC\APLA\APLL\APLA\APLR\APLcolon\APLZ\APLleftarrow
+\APLquote\APLstile\APLquote\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLleftparen\APLquote\APLbar\APLquote\APLcomma
+\APLleftbracket\APLzero\APLrightbracket\APLA\APLcomma\APLleftbracket
+\APLzero\APLrightbracket\APLquote\APLbar\APLquote
+\APLrightparen\APLcomma\APLleftbracket\APLone\APLrightbracket\APLquote
+\APLstile\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLeight\APLrightbracket}{}
+\APLZ\APLleftbracket\APLleftparen\APLzero\APLcomma
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLone\APLuparrow\APLrho
+\APLZ\APLrightparen\APLrightparen\APLsemicolon\APLleftparen
+\APLleftparen\APLzero\APLspace\APLone\APLrightparen\APLcomma
+\protect\APLoverbar\APLone\APLplus\protect\APLoverbar\APLone
+\APLuparrow\APLrho\APLZ\APLrightparen\APLrightbracket\APLleftarrow
+\APLtwo\APLspace\APLthree\APLrho\APLquote\APLdot\APLbar\APLdot
+\APLquote\APLquote\APLquote\APLcomma\APLT\APLY\APLP\APLE\APLcomma
+\APLquote\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLnine\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F7
+%
+\subsection{\ \ \ \APLE\APLN\APLD\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY } % END_ARRAY
+%
+% \input{f8}
+%
+%
+% F8
+%
+% F8 END_ARRAY
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLE\APLN\APLD\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLleftshoe\APLquote\APLslope\APLe\APLn
+\APLd\APLleftbrace\APLA\APLP\APLL\APLa\APLr\APLr\APLa\APLy
+\APLrightbrace\APLslope\APLe\APLn\APLd\APLleftbrace\APLf\APLo\APLo
+\APLt\APLn\APLo\APLt\APLe\APLs\APLi\APLz\APLe\APLrightbrace
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F8
+%
+\subsection{\ \ \ \APLF\APLI\APLL\APLE\protect\APLunderbar\APLT\APLO\protect \APLunderbar\APLA\APLP\APLL } % FILE_TO_APL
+%
+% \input{f9}
+%
+%
+% F9
+%
+% F9 FILE_TO_APL
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLF\APLI\APLL\APLE\protect\APLunderbar\APLI\APLN\APLspace
+\APLF\APLI\APLL\APLE\protect\APLunderbar\APLT\APLO\protect
+\APLunderbar\APLA\APLP\APLL\APLspace\APLF\APLI\APLL\APLE\protect
+\APLunderbar\APLO\APLU\APLT\APLsemicolon\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLD\APLleftarrow\APLleftparen\APLT\APLO\protect
+\APLunderbar\APLA\APLP\APLL\APLspace\protect\APLdelta\protect\APLdelta
+\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\protect\APLunderbar\APLI
+\APLN\APLrightparen\protect\APLdelta\protect\APLdelta\APLF\APLV
+\APLspace\APLF\APLI\APLL\APLE\protect\APLunderbar\APLO\APLU
+\APLT
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F9
+%
+\subsection{\ \ \ \APLF\APLI\APLX\APLE\APLD\APLS\APLP\APLA\APLC\APLI\APLN\APLG } % FIXEDSPACING
+%
+% \input{f10}
+%
+%
+% F10
+%
+% F10 FIXEDSPACING
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLI\APLX\APLE\APLD\APLS\APLP\APLA
+\APLC\APLI\APLN\APLG\APLspace\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLb\APLleftbrace\APLquote\APLcomma\APLA\APLcomma\APLquote
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F10
+%
+\subsection{\ \ \ \APLF\APLL\APLA\APLT } % FLAT
+%
+% \input{f11}
+%
+%
+% F11
+%
+% F11 FLAT
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLL\APLA\APLT\APLspace\APLI\APLN
+\APLsemicolon\APLR\APLC\APLsemicolon\APLR\APLE\APLC\APLR\APLC
+\APLsemicolon\APLC\APLT\APLL\APLR\APLC\APLsemicolon\APLL\APLI\APLN
+\APLE\APLS\APLsemicolon\APLL\APLI\APLN\APLE\APLsemicolon\APLS
+\APLsemicolon\APLN\APLE\APLW\protect\APLunderbar\APLI\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLL\APLI\APLN\APLE\APLS\APLleftarrow\protect\APLdelta
+\protect\APLdelta\APLF\APLV\APLspace\APLI\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLE\APLC\APLone\APLone\APLzero\APLleftarrow\APLquote
+\APLpercent\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLR\APLE\APLC\APLone\APLone\APLzero\APLleftarrow\APLquote
+\APLpercent\APLspace\APLquote\APLcomma\APLI\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLR\APLE\APLC\APLone\APLone\APLzero\APLleftarrow\APLquote
+\APLpercent\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLW\APLH\APLI\APLL\APLE\APLcolon\APLrightarrow
+\APLleftparen\APLzero\APLequal\APLrho\APLL\APLI\APLN\APLE\APLS
+\APLrightparen\APLslash\APLE\APLX\APLI\APLT
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLL\APLI\APLN\APLE\APLleftarrow\APLuparrow\APLL\APLI\APLN
+\APLE\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLL\APLI\APLN\APLE\APLS\APLleftarrow\APLone\APLdownarrow
+\APLL\APLI\APLN\APLE\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLzero\APLequal\APLdowncaret
+\APLslash\APLS\APLleftarrow\APLquote\APLslope\APLi\APLn\APLp\APLu
+\APLt\APLleftbrace\APLquote\APLepsilonunderbar\APLL\APLI\APLN
+\APLE\APLrightparen\APLslash\APLW\APLR\APLI\APLT\APLE\protect
+\APLunderbar\APLL\APLI\APLN\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLN\APLE\APLW\protect\APLunderbar\APLF\APLI\APLL\APLE
+\APLcolon\APLN\APLE\APLW\protect\APLunderbar\APLI\APLN\APLleftarrow
+\APLleftparen\APLleftparen\APLuparrow\APLS\APLslash\APLiota
+\APLrho\APLS\APLrightparen\APLplus\APLsix\APLrightparen
+\APLdownarrow\APLL\APLI\APLN\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLN\APLE\APLW\protect\APLunderbar\APLI\APLN\APLleftarrow
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLuparrow
+\APLleftparen\APLquote\APLrightbrace\APLquote\APLepsilonunderbar
+\APLN\APLE\APLW\protect\APLunderbar\APLI\APLN\APLrightparen
+\APLslash\APLiota\APLrho\APLN\APLE\APLW\protect\APLunderbar\APLI\APLN
+\APLrightparen\APLuparrow\APLN\APLE\APLW\protect\APLunderbar
+\APLI\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLtilde\APLquote\APLdot
+\APLquote\APLepsilon\APLN\APLE\APLW\protect\APLunderbar\APLI\APLN
+\APLrightparen\APLslash\APLO\APLK
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLN\APLE\APLW\protect\APLunderbar\APLI\APLN\APLleftarrow
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLuparrow
+\APLleftparen\APLquote\APLdot\APLquote\APLepsilonunderbar\APLN\APLE
+\APLW\protect\APLunderbar\APLI\APLN\APLrightparen\APLslash
+\APLiota\APLrho\APLN\APLE\APLW\protect\APLunderbar\APLI\APLN
+\APLrightparen\APLuparrow\APLN\APLE\APLW\protect\APLunderbar\APLI\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLO\APLK\APLcolon\APLquote\APLN\APLe\APLw\APLspace\APLf
+\APLi\APLl\APLe\APLcolon\APLspace\APLquote\APLspace\APLN\APLE
+\APLW\protect\APLunderbar\APLI\APLN\APLleftarrow\APLT\APLO\APLU
+\APLP\APLP\APLE\APLR\APLspace\APLN\APLE\APLW\protect\APLunderbar
+\APLI\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLR\APLE\APLC\APLone\APLone\APLzero\APLleftarrow\APLquote
+\APLpercent\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLR\APLE\APLC\APLone\APLone\APLzero\APLleftarrow\APLquote
+\APLpercent\APLspace\APLquote\APLcomma\APLL\APLI\APLN\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLR\APLE\APLC\APLone\APLone\APLzero\APLleftarrow\APLquote
+\APLpercent\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLZ\APLleftarrow\APLF\APLL\APLA\APLT\APLspace\APLN\APLE
+\APLW\protect\APLunderbar\APLI\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLrightarrow\APLW\APLH\APLI\APLL\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\APLW\APLR\APLI\APLT\APLE\protect\APLunderbar\APLL\APLI\APLN
+\APLE\APLcolon\APLR\APLE\APLC\APLone\APLone\APLzero
+\APLleftarrow\APLL\APLI\APLN\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\APLrightarrow\APLW\APLH\APLI\APLL\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\APLE\APLX\APLI\APLT\APLcolon\APLR\APLE\APLC\APLone\APLone
+\APLzero\APLleftarrow\APLquote\APLpercent\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\APLR\APLE\APLC\APLone\APLone\APLzero\APLleftarrow\APLquote
+\APLpercent\APLspace\APLe\APLn\APLd\APLspace\APLquote\APLcomma
+\APLI\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\APLR\APLE\APLC\APLone\APLone\APLzero\APLleftarrow\APLquote
+\APLpercent\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\APLZ\APLleftarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F11
+%
+\subsection{\ \ \ \APLF\APLL\APLA\APLT\APLT\APLE\APLN } % FLATTEN
+%
+% \input{f12}
+%
+%
+% F12
+%
+% F12 FLATTEN
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLO\APLU\APLT\APLspace\APLF\APLL\APLA
+\APLT\APLT\APLE\APLN\APLspace\APLI\APLN\APLsemicolon\APLR\APLE
+\APLC\APLone\APLone\APLzero\APLsemicolon\APLC\APLT\APLL\APLone
+\APLone\APLzero\APLsemicolon\APLR\APLC\APLsemicolon\APLR\APLE
+\APLC\APLR\APLC\APLsemicolon\APLC\APLT\APLL\APLR\APLC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLzero\APLequal\APLquad\APLN
+\APLC\APLspace\APLquote\APLO\APLU\APLT\APLquote\APLrightparen
+\APLslash\APLquote\APLO\APLU\APLT\APLleftarrow\APLquote\APLquote
+\APLF\APLL\APLA\APLT\APLT\APLE\APLX\APLspace\APLT\APLE\APLX
+\APLspace\APLA\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLE\APLC\APLone\APLone\APLzero\APLleftarrow\APLO\APLU
+\APLT\APLcomma\APLquote\APLspace\APLleftparen\APLspace\APLU
+\APLspace\APLE\APLB\APLC\APLD\APLspace\APLrightparen\APLspace
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLC\APLT\APLL\APLone\APLone\APLzero\APLleftarrow\APLO\APLU
+\APLT\APLcomma\APLquote\APLspace\APLleftparen\APLspace\APLC
+\APLT\APLL\APLspace\APLrightparen\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLtilde\APLleftparen\APLtwo
+\APLspace\APLtwo\APLrightparen\APLequalunderbar\APLleftparen\APLR
+\APLC\APLleftarrow\APLone\APLone\APLzero\APLspace\APLquad\APLS
+\APLV\APLO\APLdieresis\APLquote\APLR\APLE\APLC\APLone\APLone
+\APLzero\APLquote\APLspace\APLquote\APLC\APLT\APLL\APLone\APLone
+\APLzero\APLquote\APLrightparen\APLrightparen\APLslash\APLN
+\APLO\APLT\protect\APLunderbar\APLS\APLH\APLA\APLR\APLE\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftparen\APLleftshoe\APLzero
+\APLspace\APLzero\APLspace\APLone\APLspace\APLone\APLrightparen
+\APLquad\APLS\APLV\APLC\APLdieresis\APLquote\APLR\APLE\APLC
+\APLone\APLone\APLzero\APLquote\APLspace\APLquote\APLC\APLT\APLL
+\APLone\APLone\APLzero\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLR\APLE\APLC\APLR\APLC\APLleftarrow\APLuparrow\APLR\APLE
+\APLC\APLone\APLone\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLC\APLT\APLL\APLR\APLC\APLleftarrow\APLuparrow\APLC\APLT
+\APLL\APLone\APLone\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLtilde\APLleftparen\APLzero
+\APLspace\APLzero\APLrightparen\APLequalunderbar\APLR\APLE\APLC
+\APLR\APLC\APLspace\APLC\APLT\APLL\APLR\APLC\APLrightparen
+\APLslash\APLN\APLO\APLT\protect\APLunderbar\APLO\APLK
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLF\APLL\APLA\APLT\APLspace\APLI
+\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLquad\APLS\APLV\APLR\APLdieresis
+\APLquote\APLR\APLE\APLC\APLone\APLone\APLzero\APLquote\APLspace
+\APLquote\APLC\APLT\APLL\APLone\APLone\APLzero\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLN\APLO\APLT\protect\APLunderbar\APLS\APLH\APLA\APLR\APLE
+\APLD\APLcolon\APLZ\APLleftarrow\APLquote\APLN\APLO\APLT
+\APLspace\APLS\APLH\APLA\APLR\APLE\APLD\APLdot\APLspace\APLD\APLE
+\APLG\APLR\APLE\APLE\APLspace\APLO\APLF\APLspace\APLC\APLO\APLU
+\APLP\APLL\APLI\APLN\APLG\APLcolon\APLspace\APLquote\APLspace
+\APLR\APLC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLN\APLO\APLT\protect\APLunderbar\APLO\APLK\APLcolon\APLZ
+\APLleftarrow\APLquote\APLA\APLP\APLone\APLone\APLzero\APLspace
+\APLC\APLM\APLS\APLspace\APLE\APLR\APLR\APLO\APLR\APLdot
+\APLspace\APLR\APLE\APLC\APLO\APLR\APLD\APLcolon\APLquote\APLspace
+\APLR\APLE\APLC\APLR\APLC\APLspace\APLquote\APLspace\APLC\APLO
+\APLN\APLT\APLR\APLO\APLL\APLcolon\APLquote\APLspace\APLC\APLT
+\APLL\APLR\APLC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F12
+%
+\subsection{\ \ \ \APLF\APLN\APLS\APLF\APLM\APLT } % FNSFMT
+%
+% \input{f13}
+%
+%
+% F13
+%
+% F13 FNSFMT
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLN\APLS\APLF\APLM\APLT\APLspace
+\APLA\APLsemicolon\APLI\APLsemicolon\APLquad\APLI\APLO
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLA\APLleftbracket\APLone\APLrightbracket\APLleftarrow
+\APLleftshoe\APLleftparen\APLzero\APLrho\APLquote\APLspace
+\APLquote\APLrightparen\APLleftparen\APLone\APLrho\APLquote\APLdel
+\APLquote\APLrightparen\APLleftparen\APLrightshoe\APLA
+\APLleftbracket\APLone\APLrightbracket\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLA\APLleftarrow\APLA\APLcomma\APLleftshoe\APLleftparen
+\APLzero\APLrho\APLquote\APLspace\APLquote\APLrightparen
+\APLleftparen\APLone\APLrho\APLquote\APLdel\APLquote\APLrightparen
+\APLleftparen\APLzero\APLrho\APLquote\APLspace\APLquote
+\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLI\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLL\APLO\APLO\APLP\APLcolon\APLrightarrow\APLleftparen
+\APLleftparen\protect\APLoverbar\APLone\APLplus\APLrho\APLA
+\APLrightparen\APLnotgreater\APLI\APLrightparen\APLslash\APLE\APLX
+\APLI\APLT
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLA\APLleftbracket\APLone\APLplus\APLI\APLrightbracket
+\APLleftarrow\APLleftshoe\APLleftparen\APLquote\APLleftbracket
+\APLquote\APLcomma\APLleftparen\APLuptackjot\APLI\APLrightparen
+\APLcomma\APLquote\APLrightbracket\APLquote\APLrightparen
+\APLleftparen\APLzero\APLrho\APLquote\APLspace\APLquote\APLrightparen
+\APLleftparen\APLrightshoe\APLA\APLleftbracket\APLone\APLplus
+\APLI\APLrightbracket\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLI\APLleftarrow\APLI\APLplus\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLrightarrow\APLL\APLO\APLO\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLE\APLX\APLI\APLT\APLcolon\APLZ\APLleftarrow\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F13
+%
+\subsection{\ \ \ \APLF\APLN\APLS\APLL\APLI\APLS\APLT } % FNSLIST
+%
+% \input{f14}
+%
+%
+% F14
+%
+% F14 FNSLIST
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLF\APLspace\APLF\APLN\APLS\APLL\APLI\APLS\APLT\APLspace
+\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLA\APLleftarrow\APLleftparen\APLquote\APLspace\APLquote
+\APLnotequal\APLA\APLrightparen\APLslash\APLA\APLleftarrow
+\APLcomma\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLu\APLb\APLs\APLe\APLc\APLt\APLi\APLo\APLn
+\APLleftbrace\APLslope\APLspace\APLslope\APLspace\APLslope
+\APLspace\APLquote\APLcomma\APLleftparen\APLleftparen\APLA
+\APLnotequal\APLquote\APLpercent\APLquote\APLrightparen\APLslash\APLA
+\APLleftarrow\APLepsilon\APLA\APLP\APLL\APLT\APLO\APLT\APLE
+\APLX\APLspace\APLA\APLrightparen\APLcomma\APLquote\APLrightbrace
+\APLspace\APLpercent\APLspace\APLquote\APLcomma\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLi\APLn\APLp\APLu\APLt\APLleftbrace\APLquote
+\APLcomma\APLF\APLcomma\APLquote\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F14
+%
+\subsection{\ \ \ \APLF\APLO\APLL\APLD } % FOLD
+%
+% \input{f15}
+%
+%
+% F15
+%
+% F15 FOLD
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLO\APLL\APLD\APLspace\APLA
+\APLsemicolon\APLquad\APLI\APLO
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLquad\APLI\APLO\APLleftarrow\APLone
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLA\APLleftarrow\APLleftparen\protect\APLoverbar\APLtwo
+\APLuparrow\APLone\APLcomma\APLone\APLcomma\APLrho\APLA
+\APLrightparen\APLrho\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLZ\APLleftarrow\APLleftparen\APLzero\APLcomma\APLP\APLR
+\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar\APLW\APLI
+\APLD\APLT\APLH\APLrightparen\APLrho\APLquote\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLL\APLO\APLO\APLP\APLcolon\APLrightarrow\APLleftparen
+\APLzero\APLequal\protect\APLoverbar\APLone\APLuparrow\APLrho\APLA
+\APLrightparen\APLslash\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLleftbracket\APLone
+\APLrightbracket\APLleftparen\APLleftparen\APLone\APLuparrow\APLrho
+\APLA\APLrightparen\APLcomma\APLP\APLR\APLI\APLN\APLT\APLI\APLN
+\APLG\protect\APLunderbar\APLW\APLI\APLD\APLT\APLH
+\APLrightparen\APLuparrow\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLA\APLleftarrow\APLleftparen\APLzero\APLcomma\APLP\APLR
+\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar\APLW\APLI
+\APLD\APLT\APLH\APLrightparen\APLdownarrow\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLrightarrow\APLL\APLO\APLO\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F15
+%
+\subsection{\ \ \ \APLL\APLO\APLC\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG \APLE } % LOCAL_PAGE
+%
+% \input{f16}
+%
+%
+% F16
+%
+% F16 LOCAL_PAGE
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLL\APLO\APLC\APLA\APLL\protect
+\APLunderbar\APLP\APLA\APLG\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquad\APLF\APLX\APLspace\APLquote\APLZ
+\APLleftarrow\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG\protect
+\APLunderbar\APLW\APLI\APLD\APLT\APLH\APLquote\APLspace\APLquote
+\APLZ\APLleftarrow\APLfive\APLsix\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquad\APLF\APLX\APLspace\APLquote\APLZ
+\APLleftarrow\APLB\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY\APLquote\APLspace\APLquote\APLZ
+\APLleftarrow\APLleftshoe\APLquote\APLquote\APLslope\APLb\APLe\APLg\APLi
+\APLn\APLleftbrace\APLf\APLo\APLo\APLt\APLn\APLo\APLt\APLe
+\APLs\APLi\APLz\APLe\APLrightbrace\APLslope\APLb\APLe\APLg\APLi
+\APLn\APLleftbrace\APLA\APLP\APLL\APLa\APLr\APLr\APLa\APLy
+\APLrightbrace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquad\APLF\APLX\APLspace\APLquote\APLZ
+\APLleftarrow\APLE\APLN\APLD\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLquote\APLspace\APLquote\APLZ\APLleftarrow
+\APLleftshoe\APLquote\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace
+\APLA\APLP\APLL\APLa\APLr\APLr\APLa\APLy\APLrightbrace\APLslope
+\APLe\APLn\APLd\APLleftbrace\APLf\APLo\APLo\APLt\APLn\APLo\APLt
+\APLe\APLs\APLi\APLz\APLe\APLrightbrace\APLquote\APLquote
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLZ\APLleftarrow\APLquote\APLslope\APLt\APLo\APLp\APLm
+\APLa\APLr\APLg\APLi\APLn\APLequal\APLone\APLc\APLm\APLquote
+\APLspace\APLquote\APLslope\APLo\APLd\APLd\APLs\APLi\APLd\APLe\APLm
+\APLa\APLr\APLg\APLi\APLn\APLequal\APLtwo\APLc\APLm\APLquote
+\APLspace\APLquote\APLslope\APLe\APLv\APLe\APLn\APLs\APLi\APLd
+\APLe\APLm\APLa\APLr\APLg\APLi\APLn\APLequal\APLtwo\APLc\APLm
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLleftshoe\APLquote
+\APLslope\APLa\APLd\APLd\APLt\APLo\APLl\APLe\APLn\APLg\APLt\APLh
+\APLleftbrace\APLslope\APLo\APLd\APLd\APLs\APLi\APLd\APLe\APLm\APLa
+\APLr\APLg\APLi\APLn\APLrightbrace\APLleftbrace\APLbar\APLone
+\APLi\APLn\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLleftshoe\APLquote
+\APLslope\APLa\APLd\APLd\APLt\APLo\APLl\APLe\APLn\APLg\APLt\APLh
+\APLleftbrace\APLslope\APLe\APLv\APLe\APLn\APLs\APLi\APLd\APLe\APLm
+\APLa\APLr\APLg\APLi\APLn\APLrightbrace\APLleftbrace\APLbar
+\APLone\APLi\APLn\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLleftshoe\APLquote
+\APLslope\APLa\APLd\APLd\APLt\APLo\APLl\APLe\APLn\APLg\APLt\APLh
+\APLleftbrace\APLslope\APLt\APLo\APLp\APLm\APLa\APLr\APLg\APLi\APLn
+\APLrightbrace\APLleftbrace\APLbar\APLone\APLi\APLn
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLquote\APLslope\APLh\APLe
+\APLa\APLd\APLh\APLe\APLi\APLg\APLh\APLt\APLequal\APLthree
+\APLm\APLm\APLquote\APLspace\APLquote\APLslope\APLh\APLe\APLa\APLd
+\APLs\APLe\APLp\APLequal\APLseven\APLm\APLm\APLquote\APLspace
+\APLquote\APLslope\APLf\APLo\APLo\APLt\APLh\APLe\APLi\APLg\APLh
+\APLt\APLequal\APLzero\APLm\APLm\APLquote\APLspace\APLquote
+\APLslope\APLt\APLo\APLp\APLs\APLk\APLi\APLp\APLequal\APLzero
+\APLc\APLm\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLZ\APLleftarrow\APLZ\APLcomma\APLquote\APLslope\APLt\APLe
+\APLx\APLt\APLw\APLi\APLd\APLt\APLh\APLequal\APLone\APLseven
+\APLc\APLm\APLquote\APLspace\APLquote\APLslope\APLt\APLe\APLx
+\APLt\APLh\APLe\APLi\APLg\APLh\APLt\APLequal\APLtwo\APLsix\APLc
+\APLm\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F16
+%
+\subsection{\ \ \ \APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar \APLW\APLI\APLD\APLT\APLH } % PRINTING_WIDTH
+%
+% \input{f17}
+%
+%
+% F17
+%
+% F17 PRINTING_WIDTH
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG
+\protect\APLunderbar\APLW\APLI\APLD\APLT\APLH
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLfive\APLsix
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F17
+%
+\subsection{\ \ \ \APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLA\APLR\APLR \APLA\APLY } % PRTEX_ARRAY
+%
+% \input{f18}
+%
+%
+% F18
+%
+% F18 PRTEX_ARRAY
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLA\APLR
+\APLR\APLA\APLY\APLspace\APLA\APLR\APLR\APLA\APLY\APLsemicolon
+\APLF\APLI\APLL\APLE\APLI\APLD\APLsemicolon\APLR\APLC
+\APLsemicolon\APLR\APLE\APLS\APLU\APLL\APLT\APLsemicolon\APLT\APLE\APLX
+\APLM\APLA\APLC\APLR\APLO\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\APLspace\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLleftparen\APLquote
+\APLpercent\APLspace\APLquote\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLR\APLE\APLS\APLU\APLL\APLT
+\APLleftarrow\APLtwo\APLnotequal\APLquad\APLN\APLC\APLspace
+\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE\APLquote
+\APLrightparen\APLslash\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM
+\APLE\APLleftarrow\APLquote\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLR\APLE\APLS\APLU\APLL\APLT\APLslash\APLS
+\APLK\APLI\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLcomma\APLquote\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLquote\APLpercent
+\APLspace\APLquote\APLcomma\APLleftparen\APLcomma\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLrightparen\APLcomma\APLquote
+\APLspace\APLquote\APLcomma\APLcomma\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLS\APLK\APLI\APLP\APLcolon\APLR\APLC\APLleftarrow\APLR
+\APLC\APLcomma\APLB\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLA\APLP\APLL\APLL\APLI\APLN\APLE\APLdieresis\APLleftshoe
+\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLF\APLO\APLL\APLD\APLuptackjot\APLdowntackjot\APLcomma
+\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtwo\APLequal\APLrho\APLR
+\APLC\APLrightparen\APLslash\APLquote\APLA\APLP\APLL\APLL\APLI
+\APLN\APLE\APLspace\APLquote\APLquote\APLspace\APLquote\APLquote
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLE\APLN\APLD
+\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLdowntackjot\APLepsilon\APLleftparen\APLquote\APLR\APLC
+\APLleftarrow\APLR\APLC\APLspace\protect\APLdelta\protect
+\APLdelta\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\APLI\APLD\APLquote
+\APLspace\APLquote\APLZ\APLleftarrow\APLR\APLC\APLquote
+\APLrightparen\APLleftbracket\APLquad\APLI\APLO\APLplus\APLR\APLE\APLS
+\APLU\APLL\APLT\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F18
+%
+\subsection{\ \ \ \APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLB\APLO\APLX \APLE\APLD\APLA\APLR\APLR\APLA\APLbr\APLY } % PRTEX_BOXEDARRAY
+%
+% \input{f19}
+%
+%
+% F19
+%
+% F19 PRTEX_BOXEDARRAY
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLB\APLO
+\APLX\APLE\APLD\APLA\APLR\APLR\APLA\APLbr\APLY\APLspace\APLA
+\APLR\APLR\APLA\APLY\APLsemicolon\APLF\APLI\APLL\APLE\APLI\APLD
+\APLsemicolon\APLR\APLC\APLsemicolon\APLR\APLE\APLS\APLU\APLL
+\APLT\APLsemicolon\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\APLspace\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLleftparen\APLquote
+\APLpercent\APLspace\APLquote\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLR\APLE\APLS\APLU\APLL\APLT
+\APLleftarrow\APLtwo\APLnotequal\APLquad\APLN\APLC\APLspace
+\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE\APLquote
+\APLrightparen\APLslash\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM
+\APLE\APLleftarrow\APLquote\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLR\APLE\APLS\APLU\APLL\APLT\APLslash\APLS
+\APLK\APLI\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLcomma\APLquote\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLquote\APLpercent
+\APLspace\APLquote\APLcomma\APLleftparen\APLcomma\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLrightparen\APLcomma\APLquote
+\APLspace\APLquote\APLcomma\APLcomma\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLS\APLK\APLI\APLP\APLcolon\APLR\APLC\APLleftarrow\APLR
+\APLC\APLcomma\APLB\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLA\APLP\APLL\APLL\APLI\APLN\APLE\APLdieresis\APLleftshoe
+\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLF\APLO\APLL\APLD\APLspace\APLD\APLI\APLS\APLP\APLL\APLA
+\APLY\APLdowntackjot\APLcomma\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLE\APLN\APLD
+\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLdowntackjot\APLepsilon\APLleftparen\APLquote\APLR\APLC
+\APLleftarrow\APLR\APLC\APLspace\protect\APLdelta\protect
+\APLdelta\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\APLI\APLD\APLquote
+\APLspace\APLquote\APLZ\APLleftarrow\APLR\APLC\APLquote
+\APLrightparen\APLleftbracket\APLquad\APLI\APLO\APLplus\APLR\APLE\APLS
+\APLU\APLL\APLT\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F19
+%
+\subsection{\ \ \ \APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLD\APLI\APLA \APLL\APLO\APLG } % PRTEX_DIALOG
+%
+% \input{f20}
+%
+%
+% F20
+%
+% F20 PRTEX_DIALOG
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLD\APLI
+\APLA\APLL\APLO\APLG\APLspace\APLA\APLP\APLL\APLE\APLX\APLP
+\APLR\APLE\APLS\APLS\APLI\APLO\APLN\APLsemicolon\APLF\APLI\APLL
+\APLE\APLI\APLD\APLsemicolon\APLR\APLC\APLsemicolon\APLR\APLE
+\APLS\APLU\APLL\APLT\APLsemicolon\APLT\APLE\APLX\APLM\APLA\APLC
+\APLR\APLO\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\APLspace\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLleftparen\APLquote
+\APLpercent\APLspace\APLquote\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLR\APLE\APLS\APLU\APLL\APLT
+\APLleftarrow\APLtwo\APLnotequal\APLquad\APLN\APLC\APLspace
+\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE\APLquote
+\APLrightparen\APLslash\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM
+\APLE\APLleftarrow\APLquote\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLR\APLE\APLS\APLU\APLL\APLT\APLslash\APLS
+\APLK\APLI\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLcomma\APLquote\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLleftparen\APLquote
+\APLpercent\APLspace\APLquote\APLcomma\APLcomma\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLS\APLK\APLI\APLP\APLcolon\APLR\APLC\APLleftarrow\APLR
+\APLC\APLcomma\APLleftshoe\APLquote\APLleftbrace\APLslope\APLp
+\APLa\APLr\APLs\APLe\APLp\APLequal\APLzero\APLp\APLt\APLspace
+\APLpercent\APLspace\APLb\APLe\APLg\APLi\APLn\APLspace\APLo\APLf
+\APLspace\APLd\APLi\APLa\APLl\APLo\APLg\APLu\APLe\APLspace\APLs
+\APLt\APLe\APLp\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLb\APLe\APLg\APLi\APLn\APLleftbrace\APLA\APLP
+\APLL\APLb\APLo\APLl\APLd\APLrightbrace\APLslope\APLb\APLe\APLg
+\APLi\APLn\APLleftbrace\APLA\APLP\APLL\APLe\APLx\APLp\APLr
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLA\APLP\APLL
+\APLT\APLO\APLT\APLE\APLX\APLcomma\APLA\APLP\APLL\APLE\APLX\APLP
+\APLR\APLE\APLS\APLS\APLI\APLO\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace\APLA\APLP\APLL\APLe
+\APLx\APLp\APLr\APLrightbrace\APLslope\APLe\APLn\APLd
+\APLleftbrace\APLA\APLP\APLL\APLb\APLo\APLl\APLd\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLpercent\APLspace\APLquote\APLcomma\APLleftparen
+\APLcomma\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLzero\APLspace\APLone\APLspace
+\APLtwo\APLspace\APLthree\APLspace\APLfour\APLspace\APLfive
+\APLequal\APLuparrow\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLleftarrow\APLquad\APLE\APLC\APLcomma\APLA\APLP\APLL\APLE\APLX
+\APLP\APLR\APLE\APLS\APLS\APLI\APLO\APLN\APLrightparen\APLslash
+\APLleftparen\APLtwo\APLrho\APLD\APLI\APLS\APLP\APLrightparen
+\APLcomma\APLleftparen\APLfour\APLrho\APLN\APLD\APLI\APLS\APLP
+\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLD\APLI\APLS\APLP\APLcolon\APLdowntackjot\APLleftparen
+\APLzero\APLepsilon\APLrho\APLleftparen\APLquad\APLI\APLO\APLplus
+\APLtwo\APLrightparen\APLrightshoe\APLF\APLI\APLL\APLE\APLN
+\APLA\APLM\APLE\APLrightparen\APLslash\APLquote\APLleftparen
+\APLleftparen\APLquad\APLI\APLO\APLplus\APLtwo\APLrightparen
+\APLrightshoe\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE\APLrightparen
+\APLleftarrow\APLquote\APLquote\APLspace\APLquote\APLquote
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLB\APLE\APLG
+\APLI\APLN\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLA\APLP\APLL\APLL\APLI\APLN\APLE\APLdieresis\APLleftshoe
+\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLF\APLO\APLL\APLD\APLuptackjot\APLleftparen\APLquad\APLI
+\APLO\APLplus\APLtwo\APLrightparen\APLrightshoe\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLE\APLN\APLD
+\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLN\APLD\APLI\APLS\APLP\APLcolon\APLR\APLC\APLleftarrow
+\APLR\APLC\APLcomma\APLleftshoe\APLquote\APLrightbrace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLpercent\APLspace\APLe\APLn\APLd
+\APLspace\APLo\APLf\APLspace\APLd\APLi\APLa\APLl\APLo\APLg\APLu
+\APLe\APLspace\APLs\APLt\APLe\APLp\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLdowntackjot\APLepsilon\APLleftparen\APLquote\APLR\APLC
+\APLleftarrow\APLR\APLC\APLspace\protect\APLdelta\protect
+\APLdelta\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\APLI\APLD\APLquote
+\APLspace\APLquote\APLZ\APLleftarrow\APLR\APLC\APLquote
+\APLrightparen\APLleftbracket\APLquad\APLI\APLO\APLplus\APLR\APLE\APLS
+\APLU\APLL\APLT\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F20
+%
+\subsection{\ \ \ \APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLE\APLX\APLP \APLR } % PRTEX_EXPR
+%
+% \input{f21}
+%
+%
+% F21
+%
+% F21 PRTEX_EXPR
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLE\APLX
+\APLP\APLR\APLspace\APLA\APLP\APLL\APLE\APLX\APLP\APLR\APLE
+\APLS\APLS\APLI\APLO\APLN\APLsemicolon\APLF\APLI\APLL\APLE\APLI
+\APLD\APLsemicolon\APLR\APLC\APLsemicolon\APLR\APLE\APLS\APLU
+\APLL\APLT\APLsemicolon\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO
+\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\APLspace\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLleftparen\APLquote
+\APLpercent\APLspace\APLquote\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLR\APLE\APLS\APLU\APLL\APLT
+\APLleftarrow\APLtwo\APLnotequal\APLquad\APLN\APLC\APLspace
+\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE\APLquote
+\APLrightparen\APLslash\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM
+\APLE\APLleftarrow\APLquote\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLR\APLE\APLS\APLU\APLL\APLT\APLslash\APLS
+\APLK\APLI\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLcomma\APLquote\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLS\APLK\APLI\APLP\APLcolon\APLR\APLC\APLleftarrow
+\APLleftshoe\APLleftparen\APLquote\APLpercent\APLspace\APLquote
+\APLcomma\APLcomma\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLb\APLe\APLg\APLi\APLn\APLleftbrace\APLA\APLP
+\APLL\APLb\APLo\APLl\APLd\APLrightbrace\APLslope\APLb\APLe\APLg
+\APLi\APLn\APLleftbrace\APLA\APLP\APLL\APLe\APLx\APLp\APLr
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLA\APLP\APLL
+\APLT\APLO\APLT\APLE\APLX\APLcomma\APLA\APLP\APLL\APLE\APLX\APLP
+\APLR\APLE\APLS\APLS\APLI\APLO\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace\APLA\APLP\APLL\APLe
+\APLx\APLp\APLr\APLrightbrace\APLslope\APLe\APLn\APLd
+\APLleftbrace\APLA\APLP\APLL\APLb\APLo\APLl\APLd\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLdowntackjot\APLepsilon\APLleftparen\APLquote\APLR\APLC
+\APLleftarrow\APLR\APLC\APLspace\protect\APLdelta\protect
+\APLdelta\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\APLI\APLD\APLquote
+\APLspace\APLquote\APLZ\APLleftarrow\APLR\APLC\APLquote
+\APLrightparen\APLleftbracket\APLquad\APLI\APLO\APLplus\APLR\APLE\APLS
+\APLU\APLL\APLT\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F21
+%
+\subsection{\ \ \ \APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN } % PRTEX_FN
+%
+% \input{f22}
+%
+%
+% F22
+%
+% F22 PRTEX_FN
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN
+\APLspace\APLF\APLN\APLsemicolon\APLF\APLI\APLL\APLE\APLI\APLD
+\APLsemicolon\APLR\APLC\APLsemicolon\APLR\APLK\APLsemicolon
+\APLR\APLE\APLS\APLU\APLL\APLT\APLsemicolon\APLT\APLE\APLX\APLM
+\APLA\APLC\APLR\APLO\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\APLspace\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLleftparen\APLquote
+\APLpercent\APLspace\APLquote\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLR\APLE\APLS\APLU\APLL\APLT
+\APLleftarrow\APLtwo\APLnotequal\APLquad\APLN\APLC\APLspace
+\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE\APLquote
+\APLrightparen\APLslash\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM
+\APLE\APLleftarrow\APLquote\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLR\APLE\APLS\APLU\APLL\APLT\APLslash\APLS
+\APLK\APLI\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLcomma\APLquote\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLS\APLK\APLI\APLP\APLcolon\APLR\APLC\APLleftarrow
+\APLleftshoe\APLquote\APLpercent\APLspace\APLquote\APLcomma
+\APLleftparen\APLcomma\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLrightparen\APLcomma\APLquote\APLspace\APLquote\APLcomma\APLcomma\APLF
+\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLb\APLe\APLg\APLi\APLn\APLleftbrace\APLA\APLP
+\APLL\APLf\APLn\APLs\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLzero\APLequal\APLone
+\APLuparrow\APLrho\APLR\APLK\APLleftarrow\APLquad\APLC\APLR\APLcomma
+\APLF\APLN\APLrightparen\APLslash\APLquote\APLR\APLK
+\APLleftarrow\APLleftparen\APLone\APLcomma\APLrho\APLR\APLK\APLrightparen
+\APLrho\APLR\APLK\APLleftarrow\APLquote\APLquote\APLl\APLo\APLc
+\APLk\APLe\APLd\APLspace\APLo\APLr\APLspace\APLe\APLx\APLt
+\APLe\APLr\APLn\APLa\APLl\APLspace\APLf\APLu\APLn\APLc\APLt\APLi
+\APLo\APLn\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLA\APLP\APLL\APLF\APLN\APLS\APLL\APLI\APLN\APLE
+\APLdieresis\APLF\APLN\APLS\APLF\APLM\APLT\APLleftshoe\APLleftbracket
+\APLquad\APLI\APLO\APLplus\APLone\APLrightbracket\APLR\APLK
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace\APLA\APLP\APLL\APLf
+\APLn\APLs\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLdowntackjot\APLepsilon\APLleftparen\APLquote\APLR\APLC
+\APLleftarrow\APLR\APLC\APLspace\protect\APLdelta\protect
+\APLdelta\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\APLI\APLD\APLquote
+\APLspace\APLquote\APLZ\APLleftarrow\APLR\APLC\APLquote
+\APLrightparen\APLleftbracket\APLquad\APLI\APLO\APLplus\APLR\APLE\APLS
+\APLU\APLL\APLT\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F22
+%
+\subsection{\ \ \ \APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLC \APLR } % PRTEX_FNCR
+%
+% \input{f23}
+%
+%
+% F23
+%
+% F23 PRTEX_FNCR
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN
+\APLC\APLR\APLspace\APLF\APLN\APLsemicolon\APLF\APLI\APLL\APLE
+\APLI\APLD\APLsemicolon\APLR\APLC\APLsemicolon\APLR\APLK
+\APLsemicolon\APLR\APLE\APLS\APLU\APLL\APLT\APLsemicolon\APLT\APLE
+\APLX\APLM\APLA\APLC\APLR\APLO\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\APLspace\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLleftparen\APLquote
+\APLpercent\APLspace\APLquote\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLR\APLE\APLS\APLU\APLL\APLT
+\APLleftarrow\APLtwo\APLnotequal\APLquad\APLN\APLC\APLspace
+\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE\APLquote
+\APLrightparen\APLslash\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM
+\APLE\APLleftarrow\APLquote\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLR\APLE\APLS\APLU\APLL\APLT\APLslash\APLS
+\APLK\APLI\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLcomma\APLquote\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLS\APLK\APLI\APLP\APLcolon\APLR\APLC\APLleftarrow
+\APLleftshoe\APLquote\APLpercent\APLspace\APLquote\APLcomma
+\APLleftparen\APLcomma\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLrightparen\APLcomma\APLquote\APLspace\APLquote\APLcomma\APLcomma\APLF
+\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLb\APLe\APLg\APLi\APLn\APLleftbrace\APLA\APLP
+\APLL\APLc\APLr\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLzero\APLequal\APLone
+\APLuparrow\APLrho\APLR\APLK\APLleftarrow\APLquad\APLC\APLR\APLcomma
+\APLF\APLN\APLrightparen\APLslash\APLquote\APLR\APLK
+\APLleftarrow\APLleftparen\APLone\APLcomma\APLrho\APLR\APLK\APLrightparen
+\APLrho\APLR\APLK\APLleftarrow\APLquote\APLquote\APLl\APLo\APLc
+\APLk\APLe\APLd\APLspace\APLo\APLr\APLspace\APLe\APLx\APLt
+\APLe\APLr\APLn\APLa\APLl\APLspace\APLf\APLu\APLn\APLc\APLt\APLi
+\APLo\APLn\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLA\APLP\APLL\APLL\APLI\APLN\APLE\APLdieresis\APLleftshoe
+\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLR\APLK
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace\APLA\APLP\APLL\APLc
+\APLr\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLdowntackjot\APLepsilon\APLleftparen\APLquote\APLR\APLC
+\APLleftarrow\APLR\APLC\APLspace\protect\APLdelta\protect
+\APLdelta\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\APLI\APLD\APLquote
+\APLspace\APLquote\APLZ\APLleftarrow\APLR\APLC\APLquote
+\APLrightparen\APLleftbracket\APLquad\APLI\APLO\APLplus\APLR\APLE\APLS
+\APLU\APLL\APLT\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F23
+%
+\subsection{\ \ \ \APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLD \APLD } % PRTEX_FNDD
+%
+% \input{f24}
+%
+%
+% F24
+%
+% F24 PRTEX_FNDD
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN
+\APLD\APLD\APLspace\APLF\APLN\APLsemicolon\APLF\APLI\APLL\APLE
+\APLI\APLD\APLsemicolon\APLR\APLC\APLsemicolon\APLR\APLK
+\APLsemicolon\APLR\APLE\APLS\APLU\APLL\APLT\APLsemicolon\APLT\APLE
+\APLX\APLM\APLA\APLC\APLR\APLO\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\APLspace\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLleftparen\APLquote
+\APLpercent\APLspace\APLquote\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLR\APLE\APLS\APLU\APLL\APLT
+\APLleftarrow\APLtwo\APLnotequal\APLquad\APLN\APLC\APLspace
+\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE\APLquote
+\APLrightparen\APLslash\APLquote\APLF\APLI\APLL\APLE\APLN\APLA\APLM
+\APLE\APLleftarrow\APLquote\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLquote\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLR\APLE\APLS\APLU\APLL\APLT\APLslash\APLS
+\APLK\APLI\APLP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLF\APLI\APLL
+\APLE\APLN\APLA\APLM\APLE\APLcomma\APLquote\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLS\APLK\APLI\APLP\APLcolon\APLR\APLC\APLleftarrow
+\APLleftshoe\APLquote\APLpercent\APLspace\APLquote\APLcomma
+\APLleftparen\APLcomma\APLF\APLI\APLL\APLE\APLN\APLA\APLM\APLE
+\APLrightparen\APLcomma\APLquote\APLspace\APLquote\APLcomma\APLR\APLK
+\APLleftarrow\APLcomma\APLleftparen\APLtilde\APLdowncaret\APLslope
+\APLquote\APLcolon\APLquote\APLequal\APLF\APLN\APLrightparen
+\APLslash\APLF\APLN
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLb\APLe\APLg\APLi\APLn\APLleftbrace\APLA\APLP
+\APLL\APLl\APLi\APLn\APLe\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLleftparen\APLepsilon\APLquote\APLleftbrace\APLslope\APLb\APLf
+\APLquote\APLcomma\APLleftparen\APLA\APLP\APLL\APLT\APLO\APLT
+\APLE\APLX\APLspace\APLR\APLK\APLrightparen\APLcomma\APLquote
+\APLrightbrace\APLquote\APLcomma\APLleftparen\APLA\APLP\APLL\APLT
+\APLO\APLT\APLE\APLX\APLleftparen\APLdowncaret\APLslope\APLquote
+\APLcolon\APLquote\APLequal\APLF\APLN\APLrightparen\APLslash
+\APLF\APLN\APLrightparen\APLrightparen\APLtilde\APLquote
+\APLspace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace\APLA\APLP\APLL\APLl
+\APLi\APLn\APLe\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLdowntackjot\APLepsilon\APLleftparen\APLquote\APLR\APLC
+\APLleftarrow\APLR\APLC\APLspace\protect\APLdelta\protect
+\APLdelta\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\APLI\APLD\APLquote
+\APLspace\APLquote\APLZ\APLleftarrow\APLR\APLC\APLquote
+\APLrightparen\APLleftbracket\APLquad\APLI\APLO\APLplus\APLR\APLE\APLS
+\APLU\APLL\APLT\APLrightbracket
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F24
+%
+\subsection{\ \ \ \APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLW\APLS } % PRTEX_WS
+%
+% \input{f25}
+%
+%
+% F25
+%
+% F25 PRTEX_WS
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLA\APLL\APLL
+\APLspace\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLW\APLS
+\APLspace\APLA\APLU\APLT\APLH\APLsemicolon\APLR\APLC
+\APLsemicolon\APLA\APLU\APLT\APLH\APLO\APLR\APLsemicolon\APLW\APLS\APLI
+\APLD\APLsemicolon\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG
+\protect\APLunderbar\APLW\APLI\APLD\APLT\APLH\APLsemicolon\APLB
+\APLE\APLG\APLI\APLN\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\APLsemicolon\APLE\APLN\APLD\protect\APLunderbar\APLA\APLR\APLR
+\APLA\APLY\APLsemicolon\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLtwo\APLsemicolon\protect\APLdelta
+\protect\APLdelta\protect\APLdelta\APLN\APLL\APLthree
+\APLsemicolon\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLleftparen\APLA\APLU\APLT\APLH\APLO\APLR\APLspace\APLW
+\APLS\APLI\APLD\APLrightparen\APLleftarrow\APLA\APLU\APLT\APLH
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLzero\APLequal\APLquad\APLN
+\APLC\APLspace\APLquote\APLA\APLL\APLL\APLquote\APLrightparen
+\APLslash\APLquote\APLA\APLL\APLL\APLleftarrow\APLzero\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLleftparen\APLA\APLL
+\APLL\APLequalunderbar\APLone\APLrightparen\APLdowncaret
+\APLleftparen\APLA\APLL\APLL\APLequalunderbar\APLzero\APLrightparen
+\APLrightparen\APLslash\APLquote\APLA\APLL\APLL\APLleftarrow
+\APLzero\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLleftarrow
+\APLT\APLE\APLX\APLM\APLspace\APLquote\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLF\APLI\APLL\APLE\APLI\APLD\APLleftarrow\APLleftparen
+\APLeight\APLuparrow\APLW\APLS\APLI\APLD\APLtilde\APLquote
+\APLspace\APLquote\APLrightparen\APLcomma\APLquote\APLspace\APLT\APLE
+\APLX\APLspace\APLA\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLleftshoe\APLquote\APLslope\APLd
+\APLo\APLc\APLu\APLm\APLe\APLn\APLt\APLs\APLt\APLy\APLl\APLe
+\APLleftbracket\APLt\APLi\APLt\APLl\APLe\APLp\APLa\APLg\APLe
+\APLcomma\APLa\APLp\APLl\APLrightbracket\APLleftbrace\APLa\APLr\APLt
+\APLi\APLc\APLl\APLe\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLt\APLi\APLt\APLl\APLe\APLleftbrace\APLW\APLo
+\APLr\APLk\APLs\APLp\APLa\APLc\APLe\APLspace\APLquote\APLcomma
+\APLW\APLS\APLI\APLD\APLcomma\APLquote\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLa\APLu\APLt\APLh\APLo\APLr\APLleftbrace
+\APLquote\APLcomma\APLA\APLU\APLT\APLH\APLO\APLR\APLcomma\APLquote
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLd\APLa\APLt\APLe\APLleftbrace\APLquote
+\APLcomma\APLleftparen\APLquote\APLzero\APLzero\APLzero\APLsix\APLbar
+\APLzero\APLsix\APLbar\APLzero\APLsix\APLquote\APLuptackjot
+\APLthree\APLuparrow\APLquad\APLT\APLS\APLrightparen\APLcomma
+\APLquote\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLm\APLa\APLr\APLk\APLb\APLo\APLt\APLh
+\APLleftbrace\APLquote\APLcomma\APLA\APLU\APLT\APLH\APLO\APLR\APLcomma
+\APLquote\APLspace\APLbar\APLspace\APLW\APLo\APLr\APLk\APLs\APLp
+\APLa\APLc\APLe\APLspace\APLquote\APLcomma\APLW\APLS\APLI\APLD
+\APLcomma\APLquote\APLspace\APLbar\APLspace\APLquote\APLcomma
+\APLleftparen\APLquote\APLzero\APLzero\APLzero\APLsix\APLbar
+\APLzero\APLsix\APLbar\APLzero\APLsix\APLspace\APLzero\APLsix
+\APLcolon\APLzero\APLsix\APLcolon\APLzero\APLsix\APLquote
+\APLuptackjot\APLsix\APLuparrow\APLquad\APLT\APLS\APLrightparen
+\APLcomma\APLquote\APLrightbrace\APLpercent\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLleftbrace\APLquote\APLcomma\APLA\APLU\APLT\APLH\APLO
+\APLR\APLcomma\APLquote\APLspace\APLbar\APLspace\APLW\APLo\APLr
+\APLk\APLs\APLp\APLa\APLc\APLe\APLspace\APLquote\APLcomma\APLW
+\APLS\APLI\APLD\APLcomma\APLquote\APLspace\APLbar\APLspace
+\APLquote\APLcomma\APLleftparen\APLquote\APLzero\APLzero\APLzero
+\APLsix\APLbar\APLzero\APLsix\APLbar\APLzero\APLsix\APLspace
+\APLzero\APLsix\APLcolon\APLzero\APLsix\APLcolon\APLzero\APLsix
+\APLquote\APLuptackjot\APLsix\APLuparrow\APLquad\APLT\APLS
+\APLrightparen\APLcomma\APLquote\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLp\APLa\APLg\APLe\APLs\APLt\APLy\APLl\APLe
+\APLleftbrace\APLm\APLy\APLh\APLe\APLa\APLd\APLi\APLn\APLg\APLs
+\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLL\APLO\APLC
+\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG\APLE
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLb\APLe\APLg\APLi\APLn\APLleftbrace\APLd\APLo
+\APLc\APLu\APLm\APLe\APLn\APLt\APLrightbrace\APLslope\APLm\APLa
+\APLk\APLe\APLt\APLi\APLt\APLl\APLe\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLe\APLc\APLt\APLi\APLo\APLn\APLleftbrace
+\APLO\APLp\APLe\APLr\APLa\APLt\APLo\APLr\APLs\APLrightbrace
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLleftparen\APLquote\APLo\APLquote\APLcomma\APLdieresis
+\APLuptackjot\APLdieresis\APLiota\APLrho\APLW\APLS\APLI\APLD
+\APLrightparen\APLF\APLN\APLS\APLL\APLI\APLS\APLT\APLdieresis\APLW
+\APLS\APLI\APLD\APLleftarrow\APLleftshoe\APLleftbracket\APLquad
+\APLI\APLO\APLplus\APLone\APLrightbracket\APLquad\APLN\APLL
+\APLspace\APLfour
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLe\APLc\APLt\APLi\APLo\APLn\APLleftbrace
+\APLF\APLu\APLn\APLc\APLt\APLi\APLo\APLn\APLs\APLrightbrace
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\APLquote\APLA\APLP\APLL\APLL\APLI\APLN
+\APLE\APLquote\APLspace\APLquote\APLA\APLP\APLL\APLT\APLO\APLT
+\APLE\APLX\APLquote\APLspace\APLquote\APLF\APLN\APLS\APLL\APLI
+\APLS\APLT\APLquote\APLspace\APLquote\APLT\APLE\APLX\APLM
+\APLquote\APLspace\APLquote\APLP\APLR\APLT\APLE\APLX\protect
+\APLunderbar\APLA\APLR\APLR\APLA\APLY\APLquote\APLspace\APLquote\APLP
+\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLC\APLR
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLE\APLX\APLP\APLR\APLquote
+\APLspace\APLquote\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar
+\APLF\APLN\APLquote\APLspace\APLquote\APLP\APLR\APLT\APLE\APLX
+\protect\APLunderbar\APLW\APLS\APLquote\APLspace\APLquote\APLD
+\APLI\APLS\APLP\APLL\APLA\APLY\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLA\APLP
+\APLL\APLF\APLN\APLS\APLL\APLI\APLN\APLE\APLquote\APLspace
+\APLquote\APLF\APLN\APLS\APLF\APLM\APLT\APLquote\APLspace\APLquote
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLD\APLD
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLF\APLO
+\APLL\APLD\APLquote\APLspace\APLquote\APLF\APLI\APLX\APLE\APLD
+\APLS\APLP\APLA\APLC\APLI\APLN\APLG\APLquote\APLspace\APLquote
+\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLD\APLI\APLA\APLL
+\APLO\APLG\APLquote\APLspace\APLquote\APLP\APLR\APLT\APLE\APLX
+\protect\APLunderbar\APLB\APLO\APLX\APLE\APLD\APLA\APLR\APLR
+\APLA\APLbr\APLY\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLF\APLI
+\APLL\APLE\protect\APLunderbar\APLT\APLO\protect\APLunderbar\APLA
+\APLP\APLL\APLquote\APLspace\APLquote\APLT\APLO\protect
+\APLunderbar\APLA\APLP\APLL\APLquote\APLspace\APLquote\APLT\APLE\APLX
+\APLM\protect\APLunderbar\APLS\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLA\APLP
+\APLL\APLT\APLO\APLT\APLE\APLX\protect\APLunderbar\APLS\APLquote
+\APLspace\APLquote\APLF\APLL\APLA\APLT\APLT\APLE\APLN\APLquote
+\APLspace\APLquote\APLF\APLL\APLA\APLT\APLquote\APLspace
+\APLquote\APLP\APLR\APLI\APLN\APLT\APLI\APLN\APLG\protect\APLunderbar
+\APLW\APLI\APLD\APLT\APLH\APLquote\APLspace\APLquote\protect
+\APLdelta\protect\APLdelta\APLF\APLV\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLthree\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLthree\APLcomma\APLquote\APLB\APLE
+\APLG\APLI\APLN\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\APLquote\APLspace\APLquote\APLE\APLN\APLD\protect\APLunderbar\APLA
+\APLR\APLR\APLA\APLY\APLquote\APLspace\APLquote\APLL\APLO\APLC
+\APLA\APLL\protect\APLunderbar\APLP\APLA\APLG\APLE\APLquote
+\APLspace\APLquote\protect\APLdelta\APLF\APLV\APLquote\APLspace
+\APLquote\APLT\APLO\APLU\APLP\APLP\APLE\APLR\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLA\APLL\APLL
+\APLrightparen\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLf
+\APLquote\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis
+\APLiota\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLF\APLN
+\APLS\APLL\APLI\APLS\APLT\APLdieresis\APLW\APLS\APLI\APLD
+\APLleftarrow\APLleftparen\APLleftparen\APLleftshoe\APLleftbracket
+\APLquad\APLI\APLO\APLplus\APLone\APLrightbracket\APLquad\APLN
+\APLL\APLspace\APLthree\APLrightparen\APLtilde\APLdieresis
+\APLquote\APLquote\APLspace\APLquote\APLquote\APLrightparen\APLtilde
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN\APLL
+\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLsix\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLA\APLL\APLL\APLrightparen
+\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLf\APLquote
+\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis\APLiota
+\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLF\APLN\APLS\APLL
+\APLI\APLS\APLT\APLdieresis\APLW\APLS\APLI\APLD\APLleftarrow
+\APLleftshoe\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLquad\APLN\APLL\APLspace\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLseven\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLe\APLc\APLt\APLi\APLo\APLn\APLleftbrace
+\APLV\APLa\APLr\APLi\APLa\APLb\APLl\APLe\APLs\APLrightbrace
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLeight\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLtwo\APLleftarrow\APLquote\APLR\APLC\APLquote\APLspace
+\APLquote\APLA\APLU\APLT\APLH\APLO\APLR\APLquote\APLspace\APLquote
+\APLF\APLI\APLL\APLE\APLI\APLD\APLquote\APLspace\APLquote\APLA
+\APLU\APLT\APLH\APLquote\APLspace\APLquote\APLW\APLS\APLI\APLD
+\APLquote\APLspace\APLquote\APLA\APLL\APLL\APLquote\APLspace
+\APLquote\protect\APLdelta\protect\APLdelta\protect\APLdelta
+\APLN\APLL\APLtwo\APLquote\APLspace\APLquote\protect\APLdelta
+\protect\APLdelta\protect\APLdelta\APLN\APLL\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLnine\APLrightbracket}{}
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN
+\APLL\APLtwo\APLleftarrow\protect\APLdelta\protect\APLdelta
+\protect\APLdelta\APLN\APLL\APLtwo\APLcomma\APLquote\APLT\APLE\APLX
+\protect\APLunderbar\APLA\APLB\APLS\APLT\APLR\APLA\APLC\APLT
+\APLquote\APLspace\APLquote\APLT\APLE\APLX\protect\APLunderbar
+\APLD\APLE\APLS\APLC\APLR\APLI\APLB\APLE\APLquote\APLspace
+\APLquote\APLT\APLE\APLX\APLM\APLA\APLC\APLR\APLO\APLS\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLzero\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLA\APLL\APLL
+\APLrightparen\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLv
+\APLquote\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis
+\APLiota\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLF\APLN
+\APLS\APLL\APLI\APLS\APLT\APLdieresis\APLW\APLS\APLI\APLD
+\APLleftarrow\APLleftparen\APLleftparen\APLleftshoe\APLleftbracket
+\APLquad\APLI\APLO\APLplus\APLone\APLrightbracket\APLquad\APLN
+\APLL\APLspace\APLtwo\APLrightparen\APLtilde\APLdieresis\APLquote
+\APLquote\APLspace\APLquote\APLquote\APLrightparen\APLtilde
+\protect\APLdelta\protect\APLdelta\protect\APLdelta\APLN\APLL
+\APLtwo\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLone\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLA\APLL\APLL\APLrightparen
+\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLv\APLquote
+\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis\APLiota
+\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLF\APLN\APLS\APLL
+\APLI\APLS\APLT\APLdieresis\APLW\APLS\APLI\APLD\APLleftarrow
+\APLleftshoe\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLquad\APLN\APLL\APLspace\APLtwo\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLtwo\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLc\APLl\APLe\APLa\APLr\APLp\APLa\APLg\APLe
+\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLthree\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLs\APLe\APLt\APLc\APLo\APLu\APLn\APLt\APLe\APLr
+\APLleftbrace\APLp\APLa\APLg\APLe\APLrightbrace\APLleftbrace
+\APLone\APLrightbrace\APLslope\APLp\APLa\APLg\APLe\APLn\APLu
+\APLm\APLb\APLe\APLr\APLi\APLn\APLg\APLleftbrace\APLr\APLo\APLm
+\APLa\APLn\APLrightbrace\APLslope\APLt\APLa\APLb\APLl\APLe\APLo
+\APLf\APLc\APLo\APLn\APLt\APLe\APLn\APLt\APLs\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLfour\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLcomma\APLleftshoe
+\APLquote\APLslope\APLe\APLn\APLd\APLleftbrace\APLd\APLo\APLc\APLu
+\APLm\APLe\APLn\APLt\APLrightbrace\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLfive\APLrightbracket}{}
+\APLR\APLC\APLleftarrow\APLR\APLC\APLspace\protect\APLdelta
+\protect\APLdelta\APLF\APLV\APLspace\APLF\APLI\APLL\APLE\APLI
+\APLD
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLsix\APLrightbracket}{}
+\APLleftparen\APLquote\APLO\APLquote\APLcomma\APLdieresis
+\APLuptackjot\APLdieresis\APLiota\APLrho\APLW\APLS\APLI\APLD
+\APLrightparen\APLP\APLR\APLT\APLE\APLX\protect\APLunderbar\APLF
+\APLN\APLdieresis\APLW\APLS\APLI\APLD\APLleftarrow\APLleftshoe
+\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone\APLrightbracket
+\APLquad\APLN\APLL\APLspace\APLfour
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLseven\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLA\APLL\APLL
+\APLrightparen\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLF
+\APLquote\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis
+\APLiota\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLdieresis\APLW
+\APLS\APLI\APLD\APLleftarrow\APLleftparen\APLleftparen
+\APLleftshoe\APLleftbracket\APLquad\APLI\APLO\APLplus\APLone
+\APLrightbracket\APLquad\APLN\APLL\APLspace\APLthree\APLrightparen\APLtilde
+\APLdieresis\APLquote\APLquote\APLspace\APLquote\APLquote
+\APLrightparen\APLtilde\protect\APLdelta\protect\APLdelta\protect
+\APLdelta\APLN\APLL\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLeight\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLA\APLL\APLL\APLrightparen
+\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLF\APLquote
+\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis\APLiota
+\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLP\APLR\APLT\APLE
+\APLX\protect\APLunderbar\APLF\APLN\APLdieresis\APLW\APLS\APLI
+\APLD\APLleftarrow\APLleftshoe\APLleftbracket\APLquad\APLI\APLO
+\APLplus\APLone\APLrightbracket\APLquad\APLN\APLL\APLspace
+\APLthree\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLnine\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLtilde\APLA\APLL\APLL
+\APLrightparen\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLV
+\APLquote\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis
+\APLiota\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY
+\APLdieresis\APLW\APLS\APLI\APLD\APLleftarrow\APLleftparen
+\APLleftparen\APLleftshoe\APLleftbracket\APLquad\APLI\APLO\APLplus
+\APLone\APLrightbracket\APLquad\APLN\APLL\APLspace\APLtwo
+\APLrightparen\APLtilde\APLdieresis\APLquote\APLquote\APLspace\APLquote
+\APLquote\APLrightparen\APLtilde\protect\APLdelta\protect
+\APLdelta\protect\APLdelta\APLN\APLL\APLtwo\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLzero\APLrightbracket}{}
+\APLdowntackjot\APLleftparen\APLA\APLL\APLL\APLrightparen
+\APLslash\APLquote\APLleftparen\APLquote\APLquote\APLV\APLquote
+\APLquote\APLcomma\APLdieresis\APLuptackjot\APLdieresis\APLiota
+\APLrho\APLW\APLS\APLI\APLD\APLrightparen\APLP\APLR\APLT\APLE
+\APLX\protect\APLunderbar\APLA\APLR\APLR\APLA\APLY\APLdieresis
+\APLW\APLS\APLI\APLD\APLleftarrow\APLleftshoe\APLleftbracket
+\APLquad\APLI\APLO\APLplus\APLone\APLrightbracket\APLquad\APLN
+\APLL\APLspace\APLtwo\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+
+\end{APLfnsline}
+\end{APLfns}
+%
+% end F25
+%
+\subsection{\ \ \ \APLT\APLE\APLX\APLM } % TEXM
+%
+% \input{f26}
+%
+%
+% F26
+%
+% F26 TEXM
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLT\APLM\APLleftarrow\APLT\APLE\APLX\APLM\APLspace\APLA
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLzero\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLrightbrace\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLrightbrace
+\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLspace\APLzero\APLspace\APLdoublequote
+\APLspace\APLone\APLspace\APLdoublequote\APLspace\APLtwo
+\APLspace\APLdoublequote\APLspace\APLthree\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLsix\APLrightbrace\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace
+\APLseven\APLrightbrace\APLquote\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLspace\APLfour\APLspace\APLdoublequote\APLspace
+\APLfive\APLspace\APLspace\APLspace\APLsix\APLspace
+\APLdoublequote\APLspace\APLseven\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLeight
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLnine\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLzero\APLrightbrace\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLone\APLone\APLrightbrace\APLquote\APLspace\APLupshoejot
+\APLspace\APLspace\APLeight\APLspace\APLdoublequote\APLspace
+\APLnine\APLspace\APLdoublequote\APLspace\APLone\APLzero\APLspace
+\APLdoublequote\APLspace\APLone\APLone\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLtwo
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLthree
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLone\APLfour\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLone\APLfive\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLone\APLtwo\APLspace\APLdoublequote
+\APLspace\APLone\APLthree\APLspace\APLdoublequote\APLspace
+\APLone\APLfour\APLspace\APLdoublequote\APLspace\APLone\APLfive
+\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLsix
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLseven
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLone\APLeight\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLone\APLnine\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLone\APLsix\APLspace\APLdoublequote
+\APLspace\APLone\APLseven\APLspace\APLdoublequote\APLspace
+\APLone\APLeight\APLspace\APLdoublequote\APLspace\APLone\APLnine
+\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo
+\APLzero\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLone
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLtwo\APLtwo\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLtwo\APLthree\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLtwo\APLzero\APLspace\APLdoublequote
+\APLspace\APLtwo\APLone\APLspace\APLdoublequote\APLspace\APLtwo
+\APLtwo\APLspace\APLdoublequote\APLspace\APLtwo\APLthree
+\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo
+\APLfour\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLfive
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLtwo\APLsix\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLtwo\APLseven\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLtwo\APLfour\APLspace\APLdoublequote
+\APLspace\APLtwo\APLfive\APLspace\APLdoublequote\APLspace
+\APLtwo\APLsix\APLspace\APLdoublequote\APLspace\APLtwo\APLseven
+\APLspace\APLmiss{27}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo
+\APLeight\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLtwo\APLnine
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLthree\APLzero\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLthree\APLone\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLtwo\APLeight\APLspace
+\APLmiss{28}\APLspace\APLtwo\APLnine\APLspace\APLdoublequote\APLspace
+\APLthree\APLzero\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLthree\APLone\APLspace\APLmiss{31}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree
+\APLtwo\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLthree
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLfour\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi
+\APLs\APLs\APLleftbrace\APLthree\APLfive\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLthree\APLtwo\APLspace
+\APLmiss{32}\APLspace\APLthree\APLthree\APLspace\APLmiss{33}\APLspace
+\APLthree\APLfour\APLspace\APLmiss{34}\APLspace\APLthree
+\APLfive\APLspace\APLmiss{35}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree
+\APLsix\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLseven
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLthree\APLeight\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi
+\APLs\APLs\APLleftbrace\APLthree\APLnine\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLthree\APLsix\APLspace
+\APLdoublequote\APLspace\APLthree\APLseven\APLspace\APLdoublequote
+\APLspace\APLthree\APLeight\APLspace\APLdoublequote\APLspace
+\APLthree\APLnine\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLzero\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour\APLone
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLfour\APLtwo\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfour\APLthree\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfour\APLzero\APLspace
+\APLdoublequote\APLspace\APLfour\APLone\APLspace\APLdoublequote\APLspace
+\APLfour\APLtwo\APLspace\APLdoublequote\APLspace\APLfour
+\APLthree\APLspace\APLmiss{43}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLfour\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour\APLfive
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLfour\APLsix\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfour\APLseven\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfour\APLfour\APLspace
+\APLmiss{44}\APLspace\APLfour\APLfive\APLspace\APLmiss{45}\APLspace
+\APLfour\APLsix\APLspace\APLdoublequote\APLspace\APLfour\APLseven
+\APLspace\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour
+\APLeight\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfour\APLnine
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLzero\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi
+\APLs\APLs\APLleftbrace\APLfive\APLone\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfour\APLeight\APLspace
+\APLmiss{48}\APLspace\APLfour\APLnine\APLspace\APLmiss{49}\APLspace
+\APLfive\APLzero\APLspace\APLmiss{50}\APLspace\APLfive\APLone
+\APLspace\APLmiss{51}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive
+\APLtwo\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLthree
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLfive\APLfour\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs
+\APLs\APLleftbrace\APLfive\APLfive\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfive\APLtwo\APLspace\APLmiss{52}
+\APLspace\APLfive\APLthree\APLspace\APLmiss{53}\APLspace
+\APLfive\APLfour\APLspace\APLmiss{54}\APLspace\APLfive\APLfive
+\APLspace\APLmiss{55}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive
+\APLsix\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLfive\APLseven
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLfive\APLeight\APLrightbrace
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi
+\APLs\APLs\APLleftbrace\APLfive\APLnine\APLrightbrace\APLquote
+\APLspace\APLupshoejot\APLspace\APLfive\APLsix\APLspace
+\APLmiss{56}\APLspace\APLfive\APLseven\APLspace\APLmiss{57}\APLspace
+\APLfive\APLeight\APLspace\APLmiss{58}\APLspace\APLfive\APLnine
+\APLspace\APLmiss{59}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLsix
+\APLzero\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLsix\APLone
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm
+\APLi\APLs\APLs\APLleftbrace\APLsix\APLtwo\APLrightbrace\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLm\APLi\APLs\APLs
+\APLleftbrace\APLsix\APLthree\APLrightbrace\APLquote\APLspace
+\APLupshoejot\APLspace\APLsix\APLzero\APLspace\APLdoublequote
+\APLspace\APLsix\APLone\APLspace\APLmiss{61}\APLspace\APLsix
+\APLtwo\APLspace\APLmiss{62}\APLspace\APLsix\APLthree\APLspace
+\APLmiss{63}
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLs\APLp\APLa\APLc\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLA\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLB\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLC\APLquote\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLsix\APLfour\APLspace\APLspace\APLspace\APLsix
+\APLfive\APLspace\APLuA\APLspace\APLsix\APLsix\APLspace\APLuB
+\APLspace\APLsix\APLseven\APLspace\APLuC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLD\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLE\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLF\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLG\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLsix\APLeight\APLspace\APLuD\APLspace
+\APLsix\APLnine\APLspace\APLuE\APLspace\APLseven\APLzero
+\APLspace\APLuF\APLspace\APLseven\APLone\APLspace\APLuG
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLnine\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLH\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLI\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLc\APLe\APLn\APLt\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLd\APLo\APLt\APLquote\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLseven\APLtwo\APLspace\APLuH\APLspace\APLseven
+\APLthree\APLspace\APLuI\APLspace\APLseven\APLfour\APLspace\APLcent
+\APLspace\APLseven\APLfive\APLspace\APLdot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLl\APLe\APLs\APLs\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLl\APLe\APLf\APLt\APLp\APLa\APLr
+\APLe\APLn\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL
+\APLp\APLl\APLu\APLs\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLv\APLe\APLr\APLt\APLi\APLc\APLa\APLl\APLb\APLa\APLr
+\APLquote\APLspace\APLupshoejot\APLspace\APLseven\APLsix
+\APLspace\APLless\APLspace\APLseven\APLseven\APLspace\APLleftparen
+\APLspace\APLseven\APLeight\APLspace\APLplus\APLspace\APLseven
+\APLnine\APLspace\APLverticalbar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLa\APLm\APLp\APLe\APLr\APLs\APLa\APLn\APLd
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLu\APLJ
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLu\APLK
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLu\APLL
+\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLupshoejot\APLspace
+\APLeight\APLzero\APLspace\APLampersand\APLspace\APLeight\APLone
+\APLspace\APLuJ\APLspace\APLeight\APLtwo\APLspace\APLuK\APLspace
+\APLeight\APLthree\APLspace\APLuL
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLM\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLN\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLO\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLP\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLspace\APLeight\APLfour\APLspace\APLuM\APLspace
+\APLeight\APLfive\APLspace\APLuN\APLspace\APLeight\APLsix
+\APLspace\APLuO\APLspace\APLeight\APLseven\APLspace\APLuP
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLQ\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLR\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLe\APLx\APLc\APLl\APLa\APLm\APLa\APLt\APLi
+\APLo\APLn\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLd
+\APLo\APLl\APLl\APLa\APLr\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLupshoejot\APLspace\APLeight\APLeight\APLspace
+\APLuQ\APLspace\APLeight\APLnine\APLspace\APLuR\APLspace\APLnine
+\APLzero\APLspace\APLexclamation\APLspace\APLnine\APLone\APLspace
+\APLdollar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLs\APLt\APLa\APLr\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLr\APLi\APLg\APLh\APLt\APLp\APLa
+\APLr\APLe\APLn\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLs\APLe\APLm\APLi\APLc\APLo\APLl\APLo\APLn\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLn\APLo\APLt\APLquote
+\APLspace\APLupshoejot\APLspace\APLnine\APLtwo\APLspace\APLstar
+\APLspace\APLnine\APLthree\APLspace\APLrightparen\APLspace
+\APLnine\APLfour\APLspace\APLsemicolon\APLspace\APLnine\APLfive
+\APLspace\APLnot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLfive\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLb\APLa\APLr\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLs\APLl\APLa\APLs\APLh\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLS\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLu\APLT\APLquote\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLupshoejot
+\APLspace\APLnine\APLsix\APLspace\APLbar\APLspace\APLnine\APLseven
+\APLspace\APLslash\APLspace\APLnine\APLeight\APLspace\APLuS
+\APLspace\APLnine\APLnine\APLspace\APLuT
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLsix\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLU\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLV\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLW\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLX\APLquote\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLupshoejot\APLone\APLzero\APLzero\APLspace\APLuU\APLspace
+\APLone\APLzero\APLone\APLspace\APLuV\APLspace\APLone\APLzero
+\APLtwo\APLspace\APLuW\APLspace\APLone\APLzero\APLthree\APLspace
+\APLuX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLseven\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLY\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLu\APLZ\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLs\APLp\APLl\APLi\APLt\APLb\APLa\APLr\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLc\APLo\APLm\APLm
+\APLa\APLquote\APLspace\APLspace\APLspace\APLspace\APLspace
+\APLspace\APLspace\APLspace\APLupshoejot\APLone\APLzero\APLfour
+\APLspace\APLuY\APLspace\APLone\APLzero\APLfive\APLspace\APLuZ
+\APLspace\APLone\APLzero\APLsix\APLspace\APLsplitbar\APLspace
+\APLone\APLzero\APLseven\APLspace\APLcomma
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLeight\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLp\APLe\APLr\APLc\APLe\APLn\APLt\APLquote
+\APLspace\APLquote\APLslope\APLp\APLr\APLo\APLt\APLe\APLc\APLt
+\APLslope\APLA\APLP\APLL\APLu\APLn\APLd\APLe\APLr\APLb\APLa\APLr
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLg\APLr
+\APLe\APLa\APLt\APLe\APLr\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLq\APLu\APLe\APLr\APLy\APLquote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLnine\APLrightbracket}{}
+\APLupshoejot\APLone\APLzero\APLeight\APLspace\APLpercent
+\APLspace\APLone\APLzero\APLnine\APLspace\protect\APLunderbar
+\APLspace\APLone\APLone\APLzero\APLspace\APLgreater\APLspace
+\APLone\APLone\APLone\APLspace\APLquery
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLzero\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLone
+\APLtwo\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLu\APLp\APLc\APLa\APLr\APLe\APLt\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLd\APLi\APLe\APLr\APLe
+\APLs\APLi\APLs\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLq\APLu\APLa\APLd\APLj\APLo\APLt\APLquote\APLspace
+\APLspace\APLupshoejot\APLone\APLone\APLtwo\APLspace\APLmiss{112}
+\APLspace\APLone\APLone\APLthree\APLspace\APLupcaret\APLspace
+\APLone\APLone\APLfour\APLspace\APLdieresis\APLspace\APLone\APLone
+\APLfive\APLspace\APLquadjot
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLone\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLi\APLo\APLt\APLa\APLu\APLn\APLd\APLe\APLr
+\APLb\APLa\APLr\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLe\APLp\APLs\APLi\APLl\APLo\APLn\APLu\APLn\APLd\APLe\APLr
+\APLb\APLa\APLr\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLone\APLeight
+\APLrightbrace\APLquote\APLspace\APLquote\APLslope\APLA\APLP
+\APLL\APLm\APLi\APLs\APLs\APLleftbrace\APLone\APLone\APLnine
+\APLrightbrace\APLquote\APLspace\APLupshoejot\APLone\APLone\APLsix
+\APLspace\APLiotaunderbar\APLspace\APLspace\APLone\APLone
+\APLseven\APLspace\APLepsilonunderbar
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLtwo\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLd\APLo\APLw\APLn\APLc\APLa\APLr\APLe\APLt
+\APLquote\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLa\APLc
+\APLc\APLe\APLn\APLt\APLquote\APLspace\APLquote\APLslope\APLA
+\APLP\APLL\APLc\APLo\APLl\APLo\APLn\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLp\APLo\APLu\APLn\APLd\APLquote
+\APLspace\APLupshoejot\APLone\APLtwo\APLzero\APLspace\APLdowncaret
+\APLspace\APLone\APLtwo\APLone\APLspace\APLaccent\APLspace\APLone
+\APLtwo\APLtwo\APLspace\APLcolon\APLspace\APLone\APLtwo
+\APLthree\APLspace\APLpound
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLthree\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLa\APLt\APLquote\APLspace\APLquote\APLslope
+\APLA\APLP\APLL\APLq\APLu\APLo\APLt\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLe\APLq\APLu\APLa\APLl\APLquote
+\APLspace\APLquote\APLslope\APLA\APLP\APLL\APLd\APLo\APLu\APLb
+\APLl\APLe\APLq\APLu\APLo\APLt\APLe\APLquote\APLspace
+\APLupshoejot\APLone\APLtwo\APLfour\APLspace\APLat\APLspace\APLone
+\APLtwo\APLfive\APLspace\APLquote\APLspace\APLone\APLtwo\APLsix
+\APLspace\APLequal\APLspace\APLone\APLtwo\APLseven\APLspace
+\APLdoublequote
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLfour\APLrightbracket}{}
+\APLT\APLM\APLleftarrow\APLT\APLM\APLcomma\APLquote\APLslope
+\APLA\APLP\APLL\APLt\APLi\APLl\APLd\APLe\APLquote\APLspace
+\APLquote\APLslope\APLA\APLP\APLL\APLa\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLb\APLquote\APLspace\APLquote
+\APLslope\APLA\APLP\APLL\APLc\APLquote\APLspace\APLspace\APLspace
diff --git a/macros/latex209/contrib/apl/apl_tug.tex b/macros/latex209/contrib/apl/apl_tug.tex
new file mode 100644
index 0000000000..821849c2c9
--- /dev/null
+++ b/macros/latex209/contrib/apl/apl_tug.tex
@@ -0,0 +1,1225 @@
+
+% Revised 23 October 1990
+
+\documentstyle[ltugboat,verbatim,apl]{article}
+\def\TUBedit#1{}
+
+\TUBedit{1}
+\font\tenbxsl=cmbxsl10
+\def\bfAPL{{\tenbxsl APL\/}}
+
+\TUBedit{6}
+\def\ASCII{{\small ASCII}}
+
+\TUBedit{2}
+\title{A \protect\LaTeX\ Document Style Option for Typesetting \bfAPL}
+
+\author{Andreas Geyer-Schulz}
+\address{Department of Applied Computer Science\\
+ Vienna University of Economics and Business Administration\\
+ Augasse 2--6\\
+ A-1090 Vienna, AUSTRIA}
+\netaddress{ANDREAS@AWIWUW11.BITNET}
+
+\author{Josef Matulka}
+\address{Department of Applied Computer Science\\
+ Vienna University of Economics and Business Administration\\
+ Augasse 2--6\\
+ A-1090 Vienna, AUSTRIA}
+\netaddress{MATULKA@AWIWUW11.BITNET}
+
+\author{Gustaf Neumann}
+\address{Department of Management Information Systems\\
+ Vienna University of Economics and Business Administration\\
+ Augasse 2--6\\
+ A-1090 Vienna, AUSTRIA}
+\netaddress{NEUMANN@AWIWUW11.BITNET}
+
+\parskip=4pt plus 1pt
+\def\dense{\parsep=0pt\itemsep=0pt\parskip=0pt\topsep=0pt\partopsep=0pt}
+\def\APL{{\it APL\/}}
+\def\apl{{\tt apl.sty}}
+% redefinition of \APLmiss
+\def\APLmiss#1{{\tiny #1}}
+\renewcommand{\arraystretch}{1.1}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+In this article we describe the \LaTeX\ document style option \apl\
+for typesetting documents containing passages in \APL\ code. All
+symbols needed within a multi-vendor \APL\ environment are provided.
+Currently the full symbol sets of the \APL\ dialects \APL 2, Dyalog
+\APL, I--\APL, Sharp \APL, and \APL.68000 are supported. All \APL\
+symbols are constructed with the symbols of the standard \LaTeX\ font
+family. No additional fonts are needed. Standard \LaTeX\ commands
+can be used to change the size and type style of \APL\ symbols.
+Automatic conversion of \APL\ objects is achieved by a preprocessor
+written in \APL. \LaTeX, \apl\ and the preprocessor bundled together
+provide an integrated high-quality \APL\ publishing system.
+\end{abstract}
+
+\section{Motivation}
+
+\begin{quotation}
+Why do you insist on using a notation which is a nightmare for typist
+and compositor and impossible to implement with punching and printing
+\TUBedit{3}equipment currently available? \hfill\break
+\hbox{}\hskip0pt plus 1filll
+-- R.~A.~Brooker, 1963 \cite{Iverson}
+\end{quotation}
+
+Since its introduction in the early sixties, \APL\ has been known and
+even become famous not so much for the power and elegance of its
+concepts \TUBedit{4}but\Dash to a much greater extent\Dash for the
+``strange'' symbols it uses. \TUBedit{5}A discussion about the
+usefulness and difficulties of \APL\ has remained academic for large
+parts of the computer science community. Many programmers never
+managed to get their dumb \TUBedit{6}\ASCII{}--terminals to produce
+the non-\TUBedit{6}\ASCII{} symbols required by the language.
+
+With the advent of bit-mapped displays, down-loadable fonts and the
+spread of graphical interfaces such as the X Window System the
+situation has changed. Specialized hardware \TUBedit{7}is no longer a
+prerequisite for \APL\ programming. Although it often requires some
+effort of customization and configuration, it is possible nowadays to
+turn existing hardware into an \APL\ environment.
+
+Troubles show up as soon as you start publishing results produced in
+your \APL\ environment. (Just have a look at some books on \APL,
+where the \APL\ passages had to be pasted in!) Since many
+text-processing and desktop-publishing systems still lack \APL\
+support, it remains difficult to achieve high printing quality in
+publications composed of text and \APL\ code. Several extensions to
+existing text processors have been implemented (cf.\ \cite{Hohti}).
+However, most of them support either only the symbols of one \APL\
+dialect or only one machine or operating system platform.
+\cite{Hohti} already demonstrated the usefulness of \TeX\ for \APL\
+typesetting. \TUBedit{8}The authors produced a \MF\ description for
+\APL\ primitive symbols and a set of \TeX{} macros to support
+Digital's \APL\ interpreter for the VAX-11 series.
+
+In this paper we present our solution to the problem: An \APL\
+publishing system consisting of an \APL\ \TUBedit{9}front end and a
+\LaTeX\ document style option. The \APL\ \TUBedit{9}front end
+automatically converts \APL\ material into \LaTeX\ code which you
+can \verb+\input+ into any standard \LaTeX\ document. The \LaTeX\
+\TUBedit{10}document style option \apl\ provides macros defining all
+\APL\ characters as combinations of standard \LaTeX\ symbols, thus
+relieving us from the burden of designing new fonts and the user from
+the task of incorporating them into the \LaTeX\ system.
+\TUBedit{11}As additional benefit, size and type style of the \APL\
+symbols can be changed by the familiar \LaTeX\ commands
+(\TUBedit{12}e.g.\ \verb+\Large+, \verb+\sf+).
+
+% Remark: the next line is typeset ugly (three words on the line)
+\TUBedit{13}Compared with the approach of Hohti and Kanerva mentioned
+above, our solution offers the following advantages:
+
+{\dense
+\begin{itemize}\dense
+\item Several \APL\ dialects are supported
+ (currently \APL2, Dyalog \APL, I--\APL, Sharp \APL, and \APL.68000).
+\item No additional fonts are required.
+\item \APL\ symbols for all \LaTeX\ sizes and type styles are available.
+\item We provide support for automatic typesetting of \APL\ objects.
+% number of fonts loadable are restricted for some printers
+% disk space for fonts
+\end{itemize}}
+
+\TUBedit{14}There are some disadvantages, however; they are higher
+\TeX\ interpretation overhead and higher \TeX\ memory usage.
+
+\section{The \bfAPL\ Publishing System \label{typesetmodel}}
+
+The \APL\ publishing system consists of two parts, the \APL\
+\TUBedit{9}front end and the \LaTeX\ \TUBedit{10}document style
+option \apl\ which communicate via a carefully designed interface of
+\TeX\ macros (see Figure~\ref{modules}). This ensures that both parts
+of the system can be modified independently.
+
+\begin{figure}[htbp] \centering
+{
+\setlength{\unitlength}{1mm}
+\begin{picture}(78, 50)
+\put(41,4){DVI code}
+\put(39,10){\vector(0,-1){10}}
+\put(24,10){\framebox(30,10){\protect\LaTeX}}
+\put(39,30){\vector(0,-1){10}}
+\put(41,24){\protect\TeX\ macros}
+\put(24,30){\framebox(30,10){\protect\APL\ Front end}}
+\put(39,50){\vector(0,-1){10}}
+\put(41,44){\protect\APL\ code}
+\end{picture}
+}
+\caption{Modules of the Publishing System\label{modules}}
+\end{figure}
+
+Each of these modules is composed of two layers (see Table~\ref{layers}).
+The main task of the {\em low level formatting} layer
+is the printing of single \APL\ symbols. The \APL\ \TUBedit{9}front
+end maps each symbol into a \TeX\ macro name and produces \TUBedit{15}files to
+ be
+\verb+\input+ into \LaTeX\ documents. The \LaTeX\ style option
+\apl\ contains one macro definition for each \APL\ character.
+
+\APL\ code is more than just a stream of \APL\ symbols.
+The {\em high level formatting} layer knows about functions, operators,
+arrays, and expressions. Our \APL\ \TUBedit{9}front end provides special
+functions for typesetting these objects. The
+\LaTeX\ style option defines the corresponding environments.
+
+\begin{table}[htbp]\centering\small
+{\footnotesize\TUBedit{16}\advance\baselineskip-2pt
+\begin{tabular}{r||l|l}
+ & \mbox{\APL} & \mbox{\LaTeX\ } document \\
+ & \TUBedit{9}front end & style option \\
+\hline\hline
+Low & symbol & symbol \\
+level & translation & construction \\
+formatting & \ & \ \\
+\hline
+High & \mbox{\APL} & logical \\
+level & language & document \\
+formatting & elements & elements \\
+\end{tabular}
+\caption{Layers of the Publishing System\label{layers}}
+}
+\end{table}
+
+\section{Typesetting \bfAPL\ Symbols}
+
+If using a few \APL\ symbols in
+an ordinary document is all you need, you can forget about the
+\APL\ \TUBedit{9}front end. Simply adding the option \verb+apl+ to
+your preferred \LaTeX\ document style (\TUBedit{12}e.g.\
+\verb+\documentstyle[12pt,apl]{article}+)
+enables you to state in your paper, \TUBedit{12}e.g.:
+\begin{quotation}
+By combining the simple \APL\ symbols
+\APLcircle\ and \APLstar\ we obtain the
+compound symbol \APLcirclestar.
+\end{quotation}
+The code to produce this statement is:
+\begin{verbatim}
+\begin{quotation}
+By combining the simple \APL\ symbols
+\APLcircle\ and \APLstar\ we obtain the
+compound symbol \APLcirclestar.
+\end{quotation}
+\end{verbatim}
+
+In fact, you can typeset all simple and
+compound symbols of \APL2, as we have
+defined macros for all of them.
+Tables \ref{ta:simpleapltwo} and \ref{ta:compoundapltwo},
+respectively, show them together with their macro names.
+
+\TUBedit{17}
+\begin{table}[htbf] \centering\small
+\begin{tabular}{|lc|lc|}\hline
+\verb+\APLalpha+ & \APLalpha & \verb+\APLnotgreater+ & \APLnotgreater \\
+\verb+\APLbar+ & \APLbar & \verb+\APLnotless+ & \APLnotless \\
+\verb+\APLcircle+ & \APLcircle & \verb+\APLomega+ & \APLomega\\
+\verb+\APLcolon+ & \APLcolon & \verb+\APLoverbar+ & \APLoverbar\\
+\verb+\APLcomma+ & \APLcomma & \verb+\APLplus+ & \APLplus\\
+\verb+\APLdel+ & \APLdel & \verb+\APLquad+ & \APLquad\\
+\verb+\APLdelta+ & \APLdelta & \verb+\APLquery+ & \APLquery\\
+\verb+\APLdieresis+ & \APLdieresis & \verb+\APLquote+ & \APLquote\\
+\verb+\APLdivide+ & \APLdivide & \verb+\APLrho+ & \APLrho\\
+\verb+\APLdot+ & \APLdot & \verb+\APLrightarrow+ & \APLrightarrow\\
+\verb+\APLdownarrow+ & \APLdownarrow & \verb+\APLrightbracket+ & \APLrightbracket\\
+\verb+\APLdowncaret+ & \APLdowncaret & \verb+\APLrightparen+ & \APLrightparen\\
+\verb+\APLdownshoe+ & \APLdownshoe & \verb+\APLrightshoe+ & \APLrightshoe\\
+\verb+\APLdownstile+ & \APLdownstile & \verb+\APLsemicolon+ & \APLsemicolon\\
+\verb+\APLdowntack+ & \APLdowntack & \verb+\APLslash+ & \APLslash\\
+\verb+\APLepsilon+ & \APLepsilon & \verb+\APLslope+ & \APLslope\\
+\verb+\APLequal+ & \APLequal & \verb+\APLstar+ & \APLstar\\
+\verb+\APLgreater+ & \APLgreater & \verb+\APLstile+ & \APLstile\\
+\verb+\APLiota+ & \APLiota & \verb+\APLtilde+ & \APLtilde\\
+\verb+\APLjot+ & \APLjot & \verb+\APLtimes+ & \APLtimes\\
+\verb+\APLleftarrow+ & \APLleftarrow & \verb+\APLunderbar+ & \APLunderbar\\
+\verb+\APLleftbracket+ & \APLleftbracket & \verb+\APLuparrow+ & \APLuparrow\\
+\verb+\APLleftparen+ & \APLleftparen & \verb+\APLupcaret+ & \APLupcaret\\
+\verb+\APLleftshoe+ & \APLleftshoe & \verb+\APLupshoe+ & \APLupshoe\\
+\verb+\APLless+ & \APLless & \verb+\APLupstile+ & \APLupstile\\
+\verb+\APLmathbar+ & \APLmathbar & \verb+\APLuptack+ & \APLuptack\\
+\verb+\APLnotequal+ & \APLnotequal &\\
+\hline\end{tabular}\par
+\caption{Simple \APL2 Symbols \label{ta:simpleapltwo}}
+\end{table}
+
+\begin{table}[htbf] \centering\small
+\begin{tabular}{|lc|}\hline
+\verb+\APLcirclebar+ & \APLcirclebar \\
+\verb+\APLcircleslope+ & \APLcircleslope \\
+\verb+\APLcirclestar+ & \APLcirclestar \\
+\verb+\APLcirclestile+ & \APLcirclestile \\
+\verb+\APLdelstile+ & \APLdelstile \\
+\verb+\APLdeltastile+ & \APLdeltastile \\
+\verb+\APLdeltaunderbar+ & \APLdeltaunderbar \\
+\verb+\APLdeltilde+ & \APLdeltilde \\
+\verb+\APLdieresisdot+ & \APLdieresisdot \\
+\verb+\APLdowncarettilde+ & \APLdowncarettilde \\
+\verb+\APLdowntackjot+ & \APLdowntackjot \\
+\verb+\APLdowntackuptack+ & \APLdowntackuptack \\
+\verb+\APLepsilonunderbar+ & \APLepsilonunderbar \\
+\verb+\APLequalunderbar+ & \APLequalunderbar \\
+\verb+\APLiotaunderbar+ & \APLiotaunderbar \\
+\verb+\APLleftbracketrightbracket+ & \APLleftbracketrightbracket \\
+\verb+\APLquaddivide+ & \APLquaddivide \\
+\verb+\APLquadjot+ & \APLquadjot \\
+\verb+\APLquadquote+ & \APLquadquote \\
+\verb+\APLquadslope+ & \APLquadslope \\
+\verb+\APLquotedot+ & \APLquotedot \\
+\verb+\APLslashbar+ & \APLslashbar \\
+\verb+\APLslopebar+ & \APLslopebar \\
+\verb+\APLupcarettilde+ & \APLupcarettilde \\
+\verb+\APLupshoejot+ & \APLupshoejot \\
+\verb+\APLuptackjot+ & \APLuptackjot \\
+\hline\end{tabular}\par
+\caption{Compound \APL2 Symbols \label{ta:compoundapltwo}}
+\end{table}
+
+IBM was the first company to implement \APL\, but it did not remain
+the only one. Companies such as I.~P.~Sharp and Dyadic Systems have
+produced their own versions of the language. These and other companies,
+however, introduced only a few symbols not found in \APL2.
+We have added twenty additional symbols to the \APL2 character set
+to support typesetting Dyalog \APL, I--\APL, Sharp \APL, and \APL.68000
+(see Table \ref{ta:dialects}).
+
+\begin{table}[htbf] \centering\small
+\begin{tabular}{|lc|}\hline
+\verb+\APLOUT+ & \APLOUT \\
+\verb+\APLasciipound+ & \APLasciipound \\
+\verb+\APLbarcomma+ & \APLbarcomma \\
+\verb+\APLcaret+ & \APLcaret \\
+\verb+\APLdiamond+ & \APLdiamond \\
+\verb+\APLdieresiscircle+ & \APLdieresiscircle \\
+\verb+\APLdieresisdel+ & \APLdieresisdel \\
+\verb+\APLdieresisjot+ & \APLdieresisjot \\
+\verb+\APLdieresisstar+ & \APLdieresisstar \\
+\verb+\APLdieresistilde+ & \APLdieresistilde \\
+\verb+\APLdieresisuptack+ & \APLdieresisuptack \\
+\verb+\APLlefttack+ & \APLlefttack \\
+\verb+\APLnotequalunderbar+ & \APLnotequalunderbar \\
+\verb+\APLquaddownarrow+ & \APLquaddownarrow \\
+\verb+\APLquadleftarrow+ & \APLquadleftarrow \\
+\verb+\APLquadrightarrow+ & \APLquadrightarrow \\
+\verb+\APLquaduparrow+ & \APLquaduparrow \\
+\verb+\APLrighttack+ & \APLrighttack \\
+\verb+\APLstilebar+ & \APLstilebar \\
+\verb+\APLtheta+ & \APLtheta \\
+\hline\end{tabular}\par
+\caption{Symbols Used in APL Dialects \label{ta:dialects}}
+\end{table}
+
+As you have probably guessed from the names in Tables
+\ref{ta:simpleapltwo}, \ref{ta:compoundapltwo}, and \ref{ta:dialects}
+we stick to a naming convention in order to
+minimize name clashes with other macro packages and
+also help users remembering the macro names. All macro
+names start with the \verb+\APL+ prefix, followed by the name of
+the symbol used in the \APL\ literature.
+The symbol names for \APL2 characters are taken from \cite{IBM}.
+For those characters (cf.\ Table \ref{ta:dialects})
+which are not included in the IBM list
+we have invented consistent names. We always
+use symbol names, not the name of \APL\ functions
+these symbols might represent.
+The name of a compound \APL\ symbol is
+the concatenation of the names
+of the simple \APL\ symbols it is created from.
+
+\begin{figure}[hbpt]\centering
+\begin{minipage}{70mm}
+% ATOMIC
+\TUBedit{18}\def\APLmb#1{\leavevmode\hbox to 1.2em{\hss#1\hss}}
+\advance\baselineskip2pt
+\begin{APLarray}
+\APLmb{\APLmiss{0}}\APLmb{\APLmiss{1}}\APLmb{\APLmiss{2}}
+\APLmb{\APLmiss{3}}\APLmb{\APLmiss{4}}\APLmb{\APLmiss{5}}\APLmb{
+\APLmiss{6}}\APLmb{\APLmiss{7}}\APLmb{\APLmiss{8}}\APLmb{
+\APLmiss{9}}\APLmb{\APLmiss{10}}\APLmb{\APLmiss{11}}\APLmb{
+\APLmiss{12}}\APLmb{\APLmiss{13}}\APLmb{\APLmiss{14}}\APLmb{
+\APLmiss{15}}
+\APLspace\par
+\APLmb{\APLmiss{16}}\APLmb{\APLmiss{17}}\APLmb{\APLmiss{18}}
+\APLmb{\APLmiss{19}}\APLmb{\APLmiss{20}}\APLmb{\APLmiss{21}}
+\APLmb{\APLmiss{22}}\APLmb{\APLmiss{23}}\APLmb{\APLmiss{24}}
+\APLmb{\APLmiss{25}}\APLmb{\APLmiss{26}}\APLmb{\APLmiss{27}}
+\APLmb{\APLmiss{28}}\APLmb{\APLmiss{29}}\APLmb{\APLmiss{30}}\APLmb{
+\APLmiss{31}}
+\APLspace\par
+\APLmb{\APLmiss{32}}\APLmb{\APLmiss{33}}\APLmb{\APLmiss{34}}
+\APLmb{\APLmiss{35}}\APLmb{\APLmiss{36}}\APLmb{\APLmiss{37}}
+\APLmb{\APLmiss{38}}\APLmb{\APLmiss{39}}\APLmb{\APLmiss{40}}
+\APLmb{\APLmiss{41}}\APLmb{\APLmiss{42}}\APLmb{\APLmiss{43}}
+\APLmb{\APLmiss{44}}\APLmb{\APLmiss{45}}\APLmb{\APLmiss{46}}\APLmb{
+\APLmiss{47}}
+\APLspace\par
+\APLmb{\APLmiss{48}}\APLmb{\APLmiss{49}}\APLmb{\APLmiss{50}}
+\APLmb{\APLmiss{51}}\APLmb{\APLmiss{52}}\APLmb{\APLmiss{53}}
+\APLmb{\APLmiss{54}}\APLmb{\APLmiss{55}}\APLmb{\APLmiss{56}}
+\APLmb{\APLmiss{57}}\APLmb{\APLmiss{58}}\APLmb{\APLmiss{59}}
+\APLmb{\APLmiss{60}}\APLmb{\APLmiss{61}}\APLmb{\APLmiss{62}}\APLmb{
+\APLmiss{63}}
+\APLspace\par
+\APLmb{\APLspace}\APLmb{\APLuA}\APLmb{\APLuB}\APLmb{\APLuC}
+\APLmb{\APLuD}\APLmb{\APLuE}\APLmb{\APLuF}\APLmb{\APLuG}\APLmb{
+\APLuH}\APLmb{\APLuI}\APLmb{\APLcent}\APLmb{\APLdot}\APLmb{
+\APLless}\APLmb{\APLleftparen}\APLmb{\APLplus}\APLmb{
+\APLverticalbar}
+\APLspace\par
+\APLmb{\APLampersand}\APLmb{\APLuJ}\APLmb{\APLuK}\APLmb{
+\APLuL}\APLmb{\APLuM}\APLmb{\APLuN}\APLmb{\APLuO}\APLmb{\APLuP}
+\APLmb{\APLuQ}\APLmb{\APLuR}\APLmb{\APLexclamation}\APLmb{
+\APLdollar}\APLmb{\APLstar}\APLmb{\APLrightparen}\APLmb{
+\APLsemicolon}\APLmb{\APLnot}
+\APLspace\par
+\APLmb{\APLbar}\APLmb{\APLslash}\APLmb{\APLuS}\APLmb{\APLuT}
+\APLmb{\APLuU}\APLmb{\APLuV}\APLmb{\APLuW}\APLmb{\APLuX}
+\APLmb{\APLuY}\APLmb{\APLuZ}\APLmb{\APLsplitbar}\APLmb{\APLcomma}
+\APLmb{\APLpercent}\APLmb{\protect\APLunderbar}\APLmb{
+\APLgreater}\APLmb{\APLquery}
+\APLspace\par
+\APLmb{\APLmiss{112}}\APLmb{\APLupcaret}\APLmb{\APLdieresis}
+\APLmb{\APLquadjot}\APLmb{\APLiotaunderbar}\APLmb{
+\APLepsilonunderbar}\APLmb{\APLmiss{118}}\APLmb{\APLmiss{119}}\APLmb{
+\APLdowncaret}\APLmb{\APLaccent}\APLmb{\APLcolon}\APLmb{\APLpound}
+\APLmb{\APLat}\APLmb{\APLquote}\APLmb{\APLequal}\APLmb{
+\APLdoublequote}
+\APLspace\par
+\APLmb{\APLtilde}\APLmb{\APLa}\APLmb{\APLb}\APLmb{\APLc}
+\APLmb{\APLd}\APLmb{\APLe}\APLmb{\APLf}\APLmb{\APLg}\APLmb{\APLh}
+\APLmb{\APLi}\APLmb{\APLuparrow}\APLmb{\APLdownarrow}\APLmb{
+\APLnotgreater}\APLmb{\APLupstile}\APLmb{\APLdownstile}\APLmb{
+\APLrightarrow}
+\APLspace\par
+\APLmb{\APLquad}\APLmb{\APLj}\APLmb{\APLk}\APLmb{\APLl}
+\APLmb{\APLm}\APLmb{\APLn}\APLmb{\APLo}\APLmb{\APLp}\APLmb{\APLq}
+\APLmb{\APLr}\APLmb{\APLrightshoe}\APLmb{\APLleftshoe}\APLmb{
+\APLmiss{156}}\APLmb{\APLcircle}\APLmb{\APLmiss{158}}\APLmb{
+\APLleftarrow}
+\APLspace\par
+\APLmb{\protect\APLoverbar}\APLmb{\APLnattilde}\APLmb{\APLs}
+\APLmb{\APLt}\APLmb{\APLu}\APLmb{\APLv}\APLmb{\APLw}\APLmb{
+\APLx}\APLmb{\APLy}\APLmb{\APLz}\APLmb{\APLupshoe}\APLmb{
+\APLdownshoe}\APLmb{\APLdowntack}\APLmb{\APLleftbracket}\APLmb{
+\APLnotless}\APLmb{\APLjot}
+\APLspace\par
+\APLmb{\APLalpha}\APLmb{\APLepsilon}\APLmb{\APLiota}\APLmb{
+\APLrho}\APLmb{\APLomega}\APLmb{\APLmiss{181}}\APLmb{\APLtimes}
+\APLmb{\APLslope}\APLmb{\APLdivide}\APLmb{\APLmiss{185}}
+\APLmb{\APLdel}\APLmb{\protect\APLdelta}\APLmb{\APLuptack}\APLmb{
+\APLrightbracket}\APLmb{\APLnotequal}\APLmb{\APLstile}
+\APLspace\par
+\APLmb{\APLleftbrace}\APLmb{\APLA}\APLmb{\APLB}\APLmb{\APLC}
+\APLmb{\APLD}\APLmb{\APLE}\APLmb{\APLF}\APLmb{\APLG}\APLmb{
+\APLH}\APLmb{\APLI}\APLmb{\APLupcarettilde}\APLmb{
+\APLdowncarettilde}\APLmb{\APLleftbracketrightbracket}
+\APLmb{\APLcirclestile}
+\APLmb{\APLquadslope}\APLmb{\APLcircleslope}
+\APLspace\par
+\APLmb{\APLrightbrace}\APLmb{\APLJ}\APLmb{\APLK}\APLmb{
+\APLL}\APLmb{\APLM}\APLmb{\APLN}\APLmb{\APLO}\APLmb{\APLP}\APLmb{
+\APLQ}\APLmb{\APLR}\APLmb{\APLdowntackuptack}\APLmb{
+\APLquotedot}\APLmb{\APLdelstile}\APLmb{\APLdeltastile}\APLmb{
+\APLquadquote}\APLmb{\APLupshoejot}
+\APLspace\par
+\APLmb{\APLslope}\APLmb{\APLequalunderbar}\APLmb{\APLS}
+\APLmb{\APLT}\APLmb{\APLU}\APLmb{\APLV}\APLmb{\APLW}\APLmb{\APLX}
+\APLmb{\APLY}\APLmb{\APLZ}\APLmb{\APLslashbar}\APLmb{
+\APLslopebar}\APLmb{\APLdieresisdot}\APLmb{\APLcirclebar}\APLmb{
+\APLquaddivide}\APLmb{\APLuptackjot}
+\APLspace\par
+\APLmb{\APLzero}\APLmb{\APLone}\APLmb{\APLtwo}\APLmb{
+\APLthree}\APLmb{\APLfour}\APLmb{\APLfive}\APLmb{\APLsix}\APLmb{
+\APLseven}\APLmb{\APLeight}\APLmb{\APLnine}\APLmb{\APLmiss{250}}
+\APLmb{\APLdeltilde}\APLmb{\protect\APLdeltaunderbar}\APLmb{
+\APLcirclestar}\APLmb{\APLdowntackjot}\APLmb{\APLmiss{255}}
+\APLspace\par
+\end{APLarray}
+\end{minipage}
+\caption{The Atomic Vector of \APL 2\label{atomic}}
+\end{figure}
+
+As can be seen in Figure~\ref{atomic} which shows the
+character set (the atomic vector \APLquad\APLA\APLV)
+of \APL2, not all \APL\ characters are fancy
+symbols, and the language uses ordinary
+alphanumeric characters as well.
+To allow for a clean interface between the
+\APL\ front end and the \LaTeX\ part of our
+system, we decided to define macros for
+these characters as well. \TUBedit{18.1}Their names are
+constructed as follows:
+
+\TUBedit{19}\begin{itemize}\dense\raggedright
+\item Each macro name starts with \verb+\APL+.
+\item For each letter we append the upper or lowercase
+ letter, if the letter is underlined we prefix
+ the letter with ``u''. \\
+ Capital letters: \verb+\APLA+, \dots, \verb+\APLZ+.\\
+ Lowercase letters: \verb+\APLa+, \dots, \verb+\APLz+.\\
+ Underlined capital letters: \verb+\APLuA+, \dots, \verb+\APLuZ+.\\
+ Underlined lowercase letters: \verb+\APLua+, \dots, \verb+\APLuz+.
+\item For numbers we simply append their names: \verb+\APLzero+,
+ \dots, \verb+\APLnine+.
+\end{itemize}
+
+The tiny numbers in the atomic vector of Figure~\ref{atomic}
+correspond to positions for which no printable characters
+are defined by \APL2. In case the \APL\ \TUBedit{9}front end
+encounters a nonprintable character, \TUBedit{12}e.g.\ the one
+at position 20 in \APLquad\APLA\APLV, it generates
+\verb+\APLmiss{20}+. The definition of the \LaTeX\ macro
+\verb+\APLmiss+ determines the printed representation of
+this character (the default macro in our style
+just prints the corresponding number in style \verb+\tiny+).
+
+Let us close this section with one more example of typesetting
+\APL\ symbols:
+
+\begin{verbatim}
+\APLquaddivide\APLA\ corresponds to
+$A^{-1}$ in mathematical notation
+and \APLcircleslope\APLA\ corresponds
+to $A^{T}$.
+\end{verbatim}
+
+{\parindent=0pt
+displays as:}
+
+\APLquaddivide\APLA\ corresponds to
+$A^{-1}$ in mathematical notation
+and \APLcircleslope\APLA\ corresponds
+to $A^{T}$.
+
+
+\TUBedit{19.0}
+\section{Typesetting \bfAPL\ Objects}
+
+Typing the name of an occasional \APL\ symbol within a normal
+text is not a real nuisance to the author of \APL\ texts.
+But typesetting a larger piece of \APL\ code certainly is.
+Imagine a function named {\APLdelta\APLT\APLR\APLE\APLE}, which
+implements a recursive tree traversal algorithm:
+
+\TUBedit{19.1}
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLC\APLL\APLA\APLS\APLS\protect\APLunderbar\APLL
+\APLI\APLS\APLT\APLspace\protect\APLdelta\APLT\APLR\APLE\APLE
+\APLbr\APLspace\APLR\APLO\APLO\APLT\APLsemicolon\APLD\APLE
+\APLP\APLT\APLH\APLsemicolon\APLL\APLI\APLS\APLT
+\APLsemicolon\APLI\APLsemicolon\APLR\APLE\APLC\APLL\APLI
+\APLS\APLT\APLsemicolon\APLS\APLU\APLP\APLE\APLR\APLC
+\APLL\APLA\APLS\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone\APLrightbracket}{}
+\APLZ\APLleftarrow\APLcomma\APLleftshoe\APLR\APLO\APLO\APLT
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLtwo\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLdowncaret\APLslash
+\APLleftparen\APLcomma\APLleftshoe\APLR\APLO\APLO\APLT\APLrightparen
+\APLequalunderbar\APLdieresis\APLC\APLL\APLA\APLS\APLS
+\protect\APLunderbar\APLL\APLI\APLS\APLT\APLrightparen
+\APLslash\APLC\APLY\APLC\APLL\APLI\APLC
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLthree\APLrightbracket}{}
+\APLI\APLleftarrow\APLtwo\APLspace\APLquad\APLT\APLF
+\APLspace\APLtwo\APLrightshoe\APLG\APLE\APLT\protect\APLunderbar
+\APLM\APLE\APLM\APLspace\APLquote\protect\APLdelta\APLC
+\APLL\APLA\APLS\APLS\APLquote\APLleftparen\APLR\APLO
+\APLO\APLT\APLcomma\APLquote\APLdot\APLS\APLU\APLP\APLE
+\APLR\APLC\APLL\APLA\APLS\APLS\APLquote
+\APLrightparen
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfour\APLrightbracket}{}
+\APLrightarrow\APLleftparen\APLleftparen\APLzero\APLrho
+\APLleftshoe\APLone\APLrho\APLquote\APLspace\APLquote
+\APLrightparen\APLequalunderbar\APLS\APLU\APLP\APLE\APLR\APLC\APLL
+\APLA\APLS\APLS\APLrightparen\APLslash\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLfive\APLrightbracket}{}
+\APLI\APLleftarrow\APLleftparen\APLleftshoe\APLC\APLL
+\APLA\APLS\APLS\protect\APLunderbar\APLL\APLI\APLS\APLT\APLcomma
+\APLleftshoe\APLR\APLO\APLO\APLT\APLrightparen\protect
+\APLdelta\APLT\APLR\APLE\APLE\APLdieresis\APLS\APLU
+\APLP\APLE\APLR\APLC\APLL\APLA\APLS\APLS
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLsix\APLrightbracket}{}
+\APLZ\APLleftarrow\APLleftparen\APLleftparen\APLZ\APLiota
+\APLZ\APLrightparen\APLequal\APLiota\APLrho\APLZ\APLrightparen
+\APLslash\APLZ\APLleftarrow\APLZ\APLcomma\APLuparrow
+\APLcomma\APLslash\APLcomma\APLdieresis\APLcomma\APLI
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLseven\APLrightbracket}{}
+\APLrightarrow\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLeight\APLrightbracket}{}
+\APLC\APLY\APLC\APLL\APLI\APLC\APLcolon\APLZ
+\APLleftarrow\APLzero\APLrho\APLzero
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+\end{APLfnsline}
+\end{APLfns}
+
+
+In order to print just the beginning of the header of the
+function, you would have to type:
+
+\begin{verbatim}
+\APLspace\APLspace\APLspace\APLspace%
+\APLspace\APLdel\APLZ%
+\APLleftarrow\APLC\APLL\APLA\APLS\APLS%
+\protect\APLunderbar\APLL%
+\APLI\APLS\APLT\APLspace\protect\APLdelta%
+\APLT\APLR\APLE\APLE%
+\APLbr\APLspace\APLR\APLO\APLO\APLT\APLbr%
+\end{verbatim}
+
+%\APLT\APLR\APLE\APLE%
+%\APLbr\APLspace\APLR\APLO\APLO\APLT\APLbr%
+%\APLsemicolon\APLD\APLE%
+%\APLP\APLT\APLbr\APLH\APLsemicolon\APLL%
+%\APLI\APLS\APLbr\APLT%
+%\APLsemicolon\APLI\APLsemicolon\APLR%
+%\APLbr\APLE\APLC\APLL\APLI%
+%\APLS\APLbr\APLT\APLsemicolon\APLS\APLU%
+%\APLP\APLbr\APLE\APLR\APLC%
+%\APLL\APLA\APLbr\APLS\APLS%
+%\end{verbatim}
+
+Obtaining the familiar function layout used in \APL\ textbooks
+would require additional code. What is more, besides being
+awkward the whole process is error-prone: Almost certainly
+it will result in a printout different from the \APL\ code.
+
+Therefore we strongly recommend automatic translation of \APL\ code.
+We provide an \APL\ front end which
+transforms \APL\ objects into logical document elements which can be
+\verb+\input+ into \LaTeX\ documents. This
+guarantees consonance between the original \APL\ code and
+its listing and is also more convenient.
+
+For all \APL\ language elements we have defined \APL\ functions
+and corresponding \LaTeX\ environments.
+Our system supports
+the typesetting of:
+\begin{itemize}\dense
+\item an array displayed by the interpreter,
+\item an array in boxed representation,
+\item a function or operator displayed by the built in
+ \APL\ del-editor (\APLdel--editor),
+\item a function or operator displayed by \APL's canonical
+ representation function {\APLquad\APLC\APLR},
+\item a direct definition of a function or operator,
+\item an \APL\ expression input by the user.
+\end{itemize}
+Apart from minor modifications we have used traditional layout
+conventions for all language elements.
+For example, the convention that user input is six
+spaces indented can be traced back to the very first implementation of
+\APL. An other traditional convention states that if a line of \APL\
+code does not fit on a single line of the display, the rest of the code
+is wrapped around and continues on the next line. In some functions
+this rule may lead to line breaks in the
+middle of names. Since \APL\ identifiers can be up to 255 characters
+long line breaking within names cannot be avoided in general.
+
+As you can see, arrays and functions can be typeset in various ways.
+For example, the above listing of the \APL\ function
+\APLdelta\APLT\APLR\APLE\APLE\
+was printed by the following \APL\ expression:
+
+\TUBedit{19.2}
+% TEST
+{\parsep=0pt % begin of dialogue step
+\begin{APLbold}\begin{APLexpr}
+\APLquote\APLT\APLR\APLE\APLE\APLquote\APLspace\APLP\APLR
+\APLT\APLE\APLX\protect\APLunderbar\APLF\APLN\APLspace
+\APLquote\protect\APLdelta\APLT\APLR\APLE
+\APLE\APLquote
+\end{APLexpr}\end{APLbold}
+% TEST
+} % end of dialogue step
+
+The \APL\ function \APLP\APLR\APLT\APLE\APLX\APLunderbar\APLF\APLN\
+produces the file {\tt tree.tex} as output.
+The \APL\ front end not only maps each
+character into the corresponding \TeX\ macro but it also produces
+the line numbers in brackets and the surrounding \LaTeX\ environments
+in order to guarantee uniform display of functions throughout the document.
+
+In the following we present examples for each of the
+cases mentioned above. At the same time, the examples
+give us the opportunity to demonstrate variations of
+type style and size.
+
+\subsection{Typesetting \protect\bfAPL\ Arrays}
+
+The interpreter usually displays arrays as text
+matrices on the screen. For example, the matrix $\APLX$ is
+displayed as:
+
+% Remark: do not split the array
+%\input{ar1}
+
+% AR1 X
+\begin{APLarray}
+\APLmb{\APLspace}\APLmb{\APLone}\APLmb{\APLspace}\APLmb{
+\APLtwo}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLA}
+\APLspace\par
+\APLmb{\APLspace}\APLmb{\APLthree}\APLmb{\APLspace}\APLmb{
+\APLfour}
+\APLspace\par
+
+\APLspace\par
+\APLmb{\APLspace}\APLmb{\APLB}\APLmb{\APLspace}\APLmb{
+\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLC}
+\APLspace\par
+\end{APLarray}
+
+The above printout is typeset by the following code
+which is automatically produced by the \APL\ \TUBedit{9}front end:
+
+% manually adapted for two column tugboat style
+\begin{verbatim}
+% AR1 X
+\begin{APLarray}
+\APLmb{\APLspace}\APLmb{\APLone}
+\APLmb{\APLspace}\APLmb{\APLtwo}
+\APLmb{\APLspace}\APLmb{\APLspace}
+\APLmb{\APLspace}\APLmb{\APLA}
+\APLspace\par
+ ...
+\end{APLarray}
+\end{verbatim}
+%\APLmb{\APLspace}\APLmb{\APLthree}
+%\APLmb{\APLspace}\APLmb{\APLfour}
+%\APLspace\par
+%
+%\APLspace\par
+%\APLmb{\APLspace}\APLmb{\APLB}
+%\APLmb{\APLspace}\APLmb{
+%\APLspace}\APLmb{\APLspace}
+%\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+%\APLC}
+%\APLspace\par
+%\end{APLarray}
+%\end{verbatim}
+
+Note that the structure of $\APLX$ has been preserved by
+automatically enforcing fixed
+spacing. A closer examination of the code reveals that we have simulated
+fixed spacing by boxing each character of the array
+(\verb+\APLmb+ does this).
+
+Experienced \APL\ programmers recognize the structure of $\APLX$
+at the first glance: $\APLX$ is a two by two matrix whose upper
+left element is a two by two matrix. However,
+since the use of nested arrays is typical for second generation
+\APL s like \APL2 and Dyalog \APL, another representation
+of arrays exists which shows the structure in a more explicit manner:
+
+% Remark: do not split the array
+%\input{ar2}
+
+% AR2 X
+{\it
+\begin{APLarray}
+\APLmb{\APLdot}\APLmb{\APLrightarrow}\APLmb{\APLbar}\APLmb{
+\APLbar}\APLmb{\APLbar}\APLmb{\APLbar}\APLmb{\APLbar}\APLmb{
+\APLbar}\APLmb{\APLbar}\APLmb{\APLbar}\APLmb{\APLdot}
+\APLspace\par
+\APLmb{\APLdownarrow}\APLmb{\APLspace}\APLmb{\APLdot}\APLmb{
+\APLrightarrow}\APLmb{\APLbar}\APLmb{\APLbar}\APLmb{\APLdot}
+\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLstile}
+\APLspace\par
+\APLmb{\APLstile}\APLmb{\APLspace}\APLmb{\APLdownarrow}
+\APLmb{\APLone}\APLmb{\APLspace}\APLmb{\APLtwo}\APLmb{\APLstile}
+\APLmb{\APLspace}\APLmb{\APLA}\APLmb{\APLspace}\APLmb{\APLstile}
+\APLspace\par
+\APLmb{\APLstile}\APLmb{\APLspace}\APLmb{\APLstile}\APLmb{
+\APLthree}\APLmb{\APLspace}\APLmb{\APLfour}\APLmb{\APLstile}
+\APLmb{\APLspace}\APLmb{\APLbar}\APLmb{\APLspace}\APLmb{\APLstile}
+\APLspace\par
+\APLmb{\APLstile}\APLmb{\APLspace}\APLmb{\APLquote}\APLmb{
+\APLtilde}\APLmb{\APLbar}\APLmb{\APLbar}\APLmb{\APLquote}\APLmb{
+\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLstile}
+\APLspace\par
+\APLmb{\APLstile}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}
+\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLstile}
+\APLspace\par
+\APLmb{\APLstile}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLB}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLspace}\APLmb{\APLC}\APLmb{\APLspace}\APLmb{\APLstile}
+\APLspace\par
+\APLmb{\APLstile}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLbar}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}
+\APLmb{\APLspace}\APLmb{\APLbar}\APLmb{\APLspace}\APLmb{\APLstile}
+\APLspace\par
+\APLmb{\APLquote}\APLmb{\APLepsilon}\APLmb{\APLbar}\APLmb{
+\APLbar}\APLmb{\APLbar}\APLmb{\APLbar}\APLmb{\APLbar}\APLmb{
+\APLbar}\APLmb{\APLbar}\APLmb{\APLbar}\APLmb{\APLquote}
+\APLspace\par
+\end{APLarray}
+}
+
+Most of the work for typesetting the boxed representation of $\APLX$
+shown above is done by the \APL\ function
+\APLD\APLI\APLS\APLP\APLL\APLA\APLY\
+which usually comes with the \APL\ system (\TUBedit{12}e.g.\ \cite{IBM}).
+Our \APL\ \TUBedit{9}front end just translates the
+characters generated by this function;
+the same \LaTeX\ environment is used for both array representations.
+We only sketch the code for the boxed representation:
+
+% manually adapted for two column tugboat style
+\begin{verbatim}
+{\it
+\begin{APLarray}
+\APLmb{\APLdot}\APLmb{\APLrightarrow}
+\APLmb{\APLbar}\APLmb{\APLbar}
+ ...
+\end{APLarray}
+}
+\end{verbatim}
+
+In order to demonstrate the ease of changing type styles
+we have decided to put the generated code unit into an
+{\it italics} environment.
+This is the reason for all letters and numbers in the
+boxed representation being in {\it italics}.
+Otherwise, they would have been roman.
+
+\subsection{Typesetting \protect\bfAPL\ Functions}
+
+The following \APL\ function is printed in
+del-editor style:
+
+
+%\TUBedit{19.3}
+% Remark: do not split the function
+% \input{fns}
+%
+\begin{Large}
+% FNS MEAN
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLM\APLE\APLA\APLN\APLspace\APLX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone
+\APLrightbracket}{}
+\APLZ\APLleftarrow\APLleftparen\APLplus\APLslash\APLX
+\APLrightparen\APLdivide\APLrho\APLX
+\end{APLfnsline}
+\begin{APLfnsline}{}{\APLdel}
+\end{APLfnsline}
+\end{APLfns}
+\end{Large}
+
+A larger font has been selected by inserting the generated code
+into a \verb+\Large+ environment:
+
+% manually adapted for two column tugboat style
+\begin{verbatim}
+\begin{Large}
+% FNS MEAN
+\begin{APLfns}
+\begin{APLfnsline}{}{\APLdel}
+\APLZ\APLleftarrow\APLM\APLE\APLA\APLN
+\APLspace\APLX
+\end{APLfnsline}
+\begin{APLfnsline}{\APLleftbracket\APLone
+\APLrightbracket}{}
+ ...
+\end{APLfns}
+\end{Large}
+\end{verbatim}
+
+%\APLspace\APLspace
+%\APLspace\APLZ\APLleftarrow\APLleftparen
+%\APLplus\APLslash\APLX
+%\APLrightparen\APLdivide\APLrho\APLX
+%\end{APLline}
+%\begin{APLline}
+%\APLspace\APLspace\APLspace\APLspace
+%\APLspace\APLdel
+%\end{APLline}
+%\end{APLfns}
+%}
+%\end{verbatim}
+
+%Changing both type style and size is very easy.
+
+The canonical representation of an \APL\ function is simply a text
+matrix. Since older \APL\ systems only provide arrays of uniform
+datatype and rectangular shape, padding of short lines with spaces is
+performed. In contrast to the del-editor style, the canonical
+representation is typeset like an \APL\ array with fixed spacing and
+without line numbering. For the
+\TUBedit{20}
+canonical representation of \APLM\APLE\APLA\APLN\ a small typewriter
+type style was chosen:
+
+% Remark: do not split the function
+%\input{cr}
+
+\TUBedit{21}
+{\small\tt
+% CR MEAN
+\begin{APLcr}
+\APLmb{\APLZ}\APLmb{\APLleftarrow}\APLmb{\APLM}\APLmb{\APLE}
+\APLmb{\APLA}\APLmb{\APLN}\APLmb{\APLspace}\APLmb{\APLX}
+\APLspace\par
+\APLmb{\APLZ}\APLmb{\APLleftarrow}\APLmb{\APLleftparen}
+\APLmb{\APLplus}\APLmb{\APLslash}\APLmb{\APLX}\APLmb{
+\APLrightparen}\APLmb{\APLdivide}\APLmb{\APLrho}\APLmb{\APLX}
+\APLspace\par
+\end{APLcr}
+}
+
+
+You notice immediately that we have used the \LaTeX\ commands
+\verb+\small+ and \verb+\tt+ to produce this effect:
+
+% manually adapted for two column tugboat style
+\begin{verbatim}
+{\small\tt
+% CR MEAN
+\begin{APLcr}
+\APLmb{\APLZ}\APLmb{\APLleftarrow}
+\APLmb{\APLM}\APLmb{\APLE}
+\APLmb{\APLA}\APLmb{\APLN}
+\APLmb{\APLspace}\APLmb{\APLX}
+\APLspace\par
+ ...
+\end{APLcr}
+}
+\end{verbatim}
+%
+%\APLmb{\APLZ}\APLmb{\APLleftarrow}
+%\APLmb{\APLleftparen}
+%\APLmb{\APLplus}\APLmb{\APLslash}
+%\APLmb{\APLX}\APLmb{
+%\APLrightparen}\APLmb{\APLdivide}
+%\APLmb{\APLrho}\APLmb{\APLX}
+%\APLspace\par
+%\end{APLcr}
+%}
+%\end{verbatim}
+
+In addition to the del-editor representation and the canonical
+representation of an \APL\ function we provide means for
+formatting direct definitions of functions, which are supported
+by only a few \APL\ dialects, e.g. I--\APL:
+
+\begin{APLline}
+\APLf\APLi\APLb\APLcolon\APLspace\APLz\APLcomma\APLplus\APLslash
+\APLoverbar\APLtwo\APLuparrow\APLz\APLleftarrow\APLf\APLi\APLb
+\APLspace\APLomega\APLbar\APLone\APLspace\APLcolon\APLspace
+\APLomega\APLequal\APLone\APLspace\APLcolon\APLspace\APLone
+\end{APLline}
+
+This direct definition of a function computing Fibonacci numbers
+is due to \cite{Iverson87} and has been formatted as follows:
+
+\begin{verbatim}
+\begin{APLline}
+\APLf\APLi\APLb\APLcolon\APLspace\APLz
+\APLcomma\APLplus\APLslash
+\APLoverbar\APLtwo\APLuparrow\APLz
+ ...
+\end{APLline}
+\end{verbatim}
+%
+%\APLleftarrow\APLf\APLi\APLb
+%\APLspace\APLomega\APLbar\APLone
+%\APLspace\APLcolon\APLspace
+%\APLomega\APLequal\APLone\APLspace
+%\APLcolon\APLspace\APLone
+%\end{APLline}
+%\end{verbatim}
+
+Note, that the {\tt APLline} environment allows ligatures within names.
+
+\subsection{Typesetting \bfAPL\ Expressions}
+
+Finally, our system enables the user to typeset
+\APL\ expressions. The expression
+
+%\input{expr}
+
+{\parsep=0pt %
+% EXPR
+\begin{APLbold}\begin{APLexpr}
+\APLX\APLleftarrow\APLtwo\APLspace\APLtwo\APLrho
+\APLleftparen\APLtwo\APLspace\APLtwo\APLrho\APLiota\APLfour\APLrightparen
+\APLspace\APLquote\APLA\APLquote\APLspace\APLquote\APLB
+\APLquote\APLspace\APLquote\APLbr\APLC\APLquote
+\end{APLexpr}\end{APLbold}
+}
+
+{\parindent=0pt
+which happens to be the one used to generate the matrix $\APLX$
+(our example for formatting arrays) is printed by:
+}
+
+% manually adapted for two column tugboat style
+\begin{verbatim}
+% EXPR
+\begin{APLbold}\begin{APLexpr}
+\APLX\APLleftarrow\APLtwo\APLspace
+\APLtwo\APLrho
+\APLleftparen\APLtwo\APLspace\APLtwo
+ ...
+\end{APLexpr}\end{APLbold}
+\end{verbatim}
+%
+%\APLrho\APLiota\APLfour\APLrightparen
+%\APLspace\APLquote\APLA\APLquote
+%\APLspace\APLquote\APLB
+%\APLquote\APLspace\APLquote\APLbr
+%\APLC\APLquote
+%\end{APLexpr}\end{APLbold}
+%\end{verbatim}
+
+The environment {\tt APLexpr} provides
+the traditional six space indentation for user input.
+
+\subsection{Typesetting User Dialogues and Workspaces}
+
+The above examples demonstrate the usefulness of the six basic
+document elements we provide. Besides being useful on their own, we
+can combine them to form higher level units. In the current version
+of the \APL\ \TUBedit{9}front end, support for typesetting a dialogue
+and an \APL\ workspace listing is included.
+
+A dialogue is a pair of user input and interpreter
+response. We typeset the user input as an \APL\ expression and the
+interpreter response as an \APL\ array. The dialogue
+
+% Remark: do not split the dialogue
+% ERROR
+{\parsep=0pt % begin of dialogue step
+\begin{APLbold}\begin{APLexpr}
+\APLleftparen\APLone\APLleftparen\APLtwo\APLspace
+\APLthree\APLrightparen\APLfour
+\end{APLexpr}\end{APLbold}
+% ERROR
+\begin{APLarray}
+\APLmb{\APLS}\APLmb{\APLY}\APLmb{\APLN}\APLmb{\APLT}\APLmb{
+\APLA}\APLmb{\APLX}\APLmb{\APLspace}\APLmb{\APLE}\APLmb{\APLR}
+\APLmb{\APLR}\APLmb{\APLO}\APLmb{\APLR}
+\APLspace\par
+\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLleftparen}\APLmb{\APLone}\APLmb{\APLleftparen}\APLmb{\APLtwo}\APLmb{
+\APLspace}\APLmb{\APLthree}\APLmb{\APLrightparen}\APLmb{\APLfour}
+\APLspace\par
+\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{
+\APLspace}\APLmb{\APLspace}\APLmb{\APLspace}\APLmb{\APLupcaret}
+\APLspace\par
+\end{APLarray}
+} % end of dialogue step
+
+{\parindent=0pt
+was generated by entering the following \APL\ expression
+}
+
+\TUBedit{21.1}
+%\input{e}
+
+% E
+{\parsep=0pt % begin of dialogue step
+\begin{APLbold}\begin{APLexpr}
+\APLquote\APLE\APLquote\APLspace\APLP
+\APLR\APLT\APLE\APLX\protect\APLunderbar\APLD\APLI\APLA\APLL
+\APLO\APLG\APLspace\APLquote
+\APLleftparen\APLone\APLleftparen\APLtwo\APLbr\APLspace
+\APLthree\APLrightparen\APLfour\APLbr\APLquote
+\end{APLexpr}\end{APLbold}
+% ERR1
+} % end of dialogue step
+
+Hopefully, most of the dialogues will not result in a
+syntax error as the above one. But automatically typesetting
+examples with errors is very convenient for describing
+\APL's error trapping mechanisms in a text book.
+
+An example for the printout of an \APL\ workspace would
+be too space-consuming to be included here. It basically
+is implemented by combining the printout of arrays, functions
+and operators intertwined with \LaTeX\ sectioning commands.
+\LaTeX's table of contents considerably increases the
+utility of a workspace listing.
+
+\section{Implementation Details}
+
+For symbol construction three internal macros had to be defined.
+The first, \verb+\@APLmath+, puts a math symbol into a boxed
+math environment and adjusts spacing. The second, \verb+\@APLmraise+,
+puts a math symbol into a raised and boxed math environment and
+adjusts spacing. The third, \verb+\@APLovly+, simulates backspacing
+and overstriking on a typewriter by overlaying two boxes. The
+quad symbol \APLquad\ required special construction in order to
+generate readable compound symbols such as \APLquadslope, \APLquaddivide,
+\APLquadrightarrow.
+Full reconstruction was needed only for the \APL\ symbol \APLquadquote\
+which is a quad symbol with a short vertical rule. The
+first version of this symbol used a single quote instead
+of the vertical rule and looked rather awkward.
+
+One disadvantage of our solution is high \TeX\ memory consumption.
+We have used \verb+\let+ commands wherever possible in order to
+cut down memory usage.
+Typesetting \APL\ symbols for this text has cost us approximately
+6,800 words of \TeX\ memory. Typesetting the workspace of
+the \APL\ \TUBedit{9}front end (32 functions, 11 variables, 23 pages)
+has cost a total of 72,800 words
+of \TeX\ memory with 29,000 words used for the \APL\ symbols.
+We recommend \TeX\ with 262,141 words of memory.
+
+\APL\ lines are sometimes too long to be
+printed in a single line. When displaying
+them on the screen, this problem is usually resolved
+by wrapping them to the next lines without
+adding any hyphen. Thus, line breaks can occur
+anywhere in an \APL\ line, in the middle of
+\APL\ expressions or even in names.
+As we use one macro for typesetting each \APL\
+character, the normal \TeX\ hyphenation algorithm
+no longer works.
+
+In the definition of each \APL\ symbol which cannot be used in an
+identifier the macro \verb+\APLgb+ is used, which allows breaks with a
+penalty of --10. To achieve line breaks in the emergency case the
+preprocessor inserts the macro \verb+\APLbr+ into names longer than 15
+characters at regular intervals.
+
+When typesetting \APL\ arrays (cf.\ Figure~\ref{atomic}),
+a fixed spaced font is necessary to preserve its
+shape. We imitate fixed spaced fonts by simply putting
+a box of fixed width around all characters.
+
+For typesetting bold \APL\ code the special environment {\tt APLbold}
+is defined. It sets \verb+\bf+ and \verb+\boldmath+ and adjusts
+the thickness of rules used in symbol construction.
+
+\section{Conclusion}
+
+In this paper we have presented our solution to the \APL\
+typesetting problem: An \APL\ publishing system
+consisting of a \LaTeX\ \TUBedit{10}document style option and an
+\APL\ \TUBedit{9}front end. No additional fonts are needed.
+We have given short examples which
+demonstrate the usefulness of this approach. The system
+has already been used by the authors to prepare several
+articles published in \APL\ Quote Quad, the journal of
+the \APL\ user community.
+
+% Remark: the next lines are typeset ugly
+\TUBedit{22}\MF\ could be used to improve the printing quality
+of some symbols (cf.~[Hohti, Kanerva 88]\nocite{Hohti}).
+However, it would be necessary to create a whole \APL\ font family
+(different sizes and type styles) to obtain the flexibility
+of our system.
+We could incorporate special \APL\ fonts without
+any change in the \APL\ \TUBedit{9}front end as soon as they become available.
+
+The \APL\ \TUBedit{9}front end is currently implemented
+for \APL2 and Dyalog \APL\ and can be obtained from the authors.
+Further porting
+is intended.
+The \LaTeX\ \TUBedit{10}document style option will be submitted to the Clarkson
+and Aston archives as well as to the German \TeX\ server
+at Heidelberg.
+
+The authors would appreciate
+comments and suggestions for the improvement of the style
+as well as comments with regard to \APL\ symbols not available
+in this style.
+
+%\input{literature}
+
+\begin{thebibliography}{99}
+
+\bibitem[Camacho et al. 87]{Camacho}
+ Camacho A., Chapman P., Ziemann D. (1987),
+ {\em I--APL Instruction Manual for PC Clones},
+ I--APL Limited, St. Albans, Herts, England.
+
+\bibitem[Dyadic Systems Ltd. 85]{Dyadic} Dyadic Systems Limited (1985),
+ {\em Lynwood Dyalog APL User Guide},
+ Dyadic Systems Limited, Farnborough, Hampshire, England.
+
+\bibitem[Falkoff, Iverson 73]{Falkoff} Falkoff A. D., Iverson K. E. (1973)
+ ``The Design of APL'', {\em IBM Journal of Research and
+ Development}, V17, N4,
+ reprinted in: Falkoff A. D., Iverson K. E. (1981),
+ {\em A Source Book in APL}, APL Press, Palo Alto.
+
+\bibitem[Hohti, Kanerva 88]{Hohti} Hohti A., Kanerva O. (1988),
+ ``Typesetting APL with \TeX'',
+ {\em APL Quote Quad}, V18, N3, p13--16.
+
+\bibitem[IBM 85]{IBM} IBM Corporation (1985),
+ {\em APL2 Programming: Language Reference},
+ IBM Corporation, San Jose, California.
+
+\bibitem[I.P. Sharp 85]{IPSharp} I.P. Sharp Associates Limited (1985),
+ {\em SHARP APL/PC Handbook},
+ I.P. Sharp Associates Limited, Toronto, Canada.
+
+\bibitem[Iverson 63]{Iverson} Iverson K. E. (1963), ``Formalism in
+ Programming Languages'', ACM Working Conference on
+ Mechanical Language Structures, Princeton N.J.,
+ reprinted in: Falkoff A. D., Iverson K. E. (1981),
+ {\em A Source Book in APL}, APL Press, Palo Alto.
+
+\bibitem[Iverson 87]{Iverson87} Iverson K. E. (1987),
+ ``A Dictionary of APL'', {\em APL Quote Quad}, V18, N1.
+
+\bibitem[Knuth 86]{Knuth} Knuth D. E. (1986),
+ {\em The \TeX book}, Computers \& Typesetting A,
+ \TUBedit{23}\AW, Reading, Massachusetts.
+
+\bibitem[Lamport 86]{Lamport} Lamport L. (1986),
+ {\em \LaTeX : A Document Preparation System},
+ \AW, Reading, Massachusetts.
+
+% Remark: the next line is typeset ugly (two words on a line)
+\bibitem[Micro APL Ltd. 86]{MicroAPL}
+ \hfill Micro\hfill APL\hfill Ltd.\hfill (1986),\break
+ {\em APL.68000 for the Apple Macintosh},
+ Micro APL Ltd., London, England.
+
+\bibitem[The University of Chicago Press 82]{Chicago}
+ University of Chicago Press (1982),
+ {\em The Chicago Manual of Style $13^{th}$ Edition},
+ The University of Chicago Press, Chicago, USA.
+
+\end{thebibliography}
+
+\makesignature
+
+\clearpage
+
+\appendix
+\section{The \protect\apl\ Style Macros}
+
+\verbatimfile{apl.sty}
+\end{document}
+
+
diff --git a/macros/latex209/contrib/arbeit/arbeit.sty b/macros/latex209/contrib/arbeit/arbeit.sty
new file mode 100644
index 0000000000..77a0320052
--- /dev/null
+++ b/macros/latex209/contrib/arbeit/arbeit.sty
@@ -0,0 +1,90 @@
+%Stylefile zum Erstellen von Klassenarbeiten
+% Copyright (1992) Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+% und Joachim Lammarsch, Luzia Dietsche
+% DANTE e.V.
+% Postfach 101840
+% 6900 Heidelberg 1
+
+\typeout {Stylefile zum Erstellen von Klassenarbeiten (Version 1.0)}
+\typeout {(c) 1992 Werner Burkhardt)}
+\newlength{\perheight}
+\newlength{\texthoehe}
+\newlength{\perheightI}
+\setlength{\tabcolsep}{0cm}
+\setlength{\textwidth}{18.5cm}
+\setlength{\headheight}{15ex}
+\setlength{\textheight}{21cm}
+\setlength{\perheight}{\textheight}
+\setlength{\perheightI}{\textheight}
+\addtolength{\oddsidemargin}{-3cm}
+\addtolength{\evensidemargin}{-3cm}
+\addtolength{\topmargin}{-3cm}
+\addtolength{\perheight}{26pt}
+\addtolength{\perheightI}{25.211111pt}
+
+\font\gross=cmr10 scaled \magstep4
+\newcommand{\Sm}[1]{\tiny\hfil#1\hfil}
+\newcommand{\bln}{ }
+\newcommand{\aufgabe}[3]{%
+ \parbox[t]{1cm}{#1}
+ \parbox[t]{15cm}{#2}
+ \setbox0=\hbox{\parbox[t]{15cm}{#2}}
+ \setlength{\texthoehe}{\ht0}
+ \addtolength{\texthoehe}{\dp0}
+ \addtolength{\texthoehe}{-0.8\baselineskip}
+ \raisebox{-\texthoehe}{\parbox[t]{0.85cm}{\hfill \raggedleft #3 \hfill}}
+ \par \bigskip}
+\newcommand{\kopf}[1]{\parbox[t]{16cm}{#1}\par \medskip}
+\newcommand{\punktesumme}[1]{%
+ \vfill
+ \parbox[t]{16.39cm}{\rule{16.39cm}{0pt}}
+ \parbox{1.4cm}{\rule{1.38cm}{0.4pt}\par}\par
+ \parbox[t]{1cm}{\rule{1cm}{0pt}}
+ \parbox[t]{15cm}{\rule{15cm}{0pt}}
+ \parbox[t]{1.4cm}{\vrule height 12pt width0pt depth8pt%
+ \raggedleft #1}\par}
+
+\def\Klasse#1{\gdef\@Klasse{#1}}
+\def\Nummer#1{\gdef\@Nummer{#1}}
+\def\Fach#1{\gdef\@Fach{#1}}
+\def\Datum#1{\gdef\@Datum{#1}}
+
+\def\@thehead{\vbox{\hrule width\textwidth height0pt
+ \gross
+ \noindent
+ \@Klasse
+ \hfill\@Nummer Klassenarbeit \@Fach\hfill\@Datum
+ \par
+ \bigskip
+ \noindent
+ Name:\par}}%
+
+\def\@thefoot{\vbox{\hrule width\textwidth height0pt
+ \gross
+ \noindent
+ Punkte: \hfil Note: \hrule width3cm height0pt\par}}
+
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox {\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \vbox {\hrule\hbox{\vrule%
+ \box\@outputbox
+ \hskip-1.4cm\vrule\vbox to \perheightI{%
+ \hbox to 1.36cm{\vrule height 12pt width0pt depth8pt\hfill %
+ {\Sm Punkte}\hfill}\hrule\vfill}%
+ \vrule}%
+ \hrule}%
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
diff --git a/macros/latex209/contrib/arbeit/arbeit1.tex b/macros/latex209/contrib/arbeit/arbeit1.tex
new file mode 100644
index 0000000000..162fc4c212
--- /dev/null
+++ b/macros/latex209/contrib/arbeit/arbeit1.tex
@@ -0,0 +1,52 @@
+\documentstyle[12pt,german,arbeit]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel fr die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine Žnderung vorzunehmen muá nur der
+%Inhalte der geschweiften Klammern ver„ndert werden.
+
+\Klasse{TO13/2}
+\Nummer{1.}
+\Fach{Mathematik}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1. }
+ { Im $ \mbox{I}\! \mbox{R}^3 $ sind die folgenden Punkte gegeben:\\
+ $ A(3|6|0) \, , \, B(-4|1|4) \, , \, C(-1|0|8) \, , \, D(6|5|4)$}{}
+\aufgabe{\bf 1.1. }{ Untersuchen Sie, ob sich die Geraden $AC$ und $BD$ schneiden.
+ Bestimmen Sie gegebenenfalls den Schnittpunkt! }{\large 6}
+\aufgabe{\bf 1.2. }{ Bestimmen Sie die Spurpunkte der Geraden $AC$.\\
+ Zeigen Sie, $AC$ die $x_2$-Achse nicht schneidet. }{\large 6}
+
+\aufgabe{\bf 2. }{ Im $ \mbox{I}\! \mbox{R}^3$ sind die Punkte
+ $ A(1|2|3) \, , \, B(4|2|0) \, , \, C(5|3|4) $ und die
+ Gerade $g$ mit der folgenden Gleichung gegeben.
+ \[ g: \vec{x}=\left( \begin{array}{r} 4 \\ 2 \\ 0 \\ \end{array}
+ \right) +
+ t \left( \begin{array}{r} 1 \\ 0 \\ -1 \\ \end{array}
+ \right) \] }{}
+
+\aufgabe{\bf2.1. }{ Geben Sie die Gleichung der Ebene $E$ durch die Punkte
+ $A\, , \, B\, , \, C$ in Parameter- und Koordinatenform an.\\
+ Bestimmen Sie die Spurgeraden sowie die Achsenschnittpunkte
+ von $E$.}{\large 9}
+\aufgabe{\bf 2.2.}{ F"ur jedes $k \in \mbox{I}\! \mbox{R}$ ist die Ebene
+ $F_k$ durch $F_k: kx_1-(2k+1)x_2+kx_3=3(k-1)$ gegeben.\\
+ Zeigen Sie, da"s es ein $k$ mit $E=F_k$ gibt.\\
+ Bestimmen Sie die gemeinsamen Punkte aller $F_k$ bei
+ ver"anderlichem k.}{\large 6}
+\aufgabe{\bf 2.3.}{ Bestimmen Sie die Gleichung der Geraden $h_t$ , die durch
+ den Punkt $C$ und einen beliebigen Punkt $S_t$ der Geraden
+ $g$ geht.}{ \large 3}
+\punktesumme {\large 30}
+
+\end{document}
diff --git a/macros/latex209/contrib/arbeit/arbeit2.tex b/macros/latex209/contrib/arbeit/arbeit2.tex
new file mode 100644
index 0000000000..97009780c3
--- /dev/null
+++ b/macros/latex209/contrib/arbeit/arbeit2.tex
@@ -0,0 +1,47 @@
+\documentstyle[12pt,german,arbeito]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel f"ur die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine "Anderung vorzunehmen mu"s nur der
+%Inhalte der geschweiften Klammern ver"andert werden.
+
+\Klasse{13 LK }
+\Nummer{1.}
+\Fach{M}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1. }
+ { Gegeben sind die komplexen Zahlen $z_1=2+2i\, , \,
+ z_2=-\sqrt{3}+i$ und $z_3=-5+5i$}{}
+\aufgabe{\bf 1.1.}
+ {Geben Sie die Darstellung von $z_1\, ,\, z_2$ und $z_3$ in
+ Polarkoordinaten an.}{\large 3}
+\aufgabe{\bf 1.2.}
+ {Berechnen Sie:
+ \[\frac{z_1}{z_2 z_3} \quad ,\quad z_2^2 z_3 \quad ,
+ \quad z_1^{9} \quad , \quad
+ \sqrt[3]{z_3} \]
+ Geben Sie alle Ergebnisse in Polar- sowie kartesischen
+ Koordinaten an.}{\large 12}
+
+\aufgabe{\bf 2.1}
+ {Beweisen Sie die Formel von de Moivre.}{\large 3}
+
+\aufgabe{\bf 2.2}
+ {Berechnen Sie mit Hilfe der Formel von de Moivre $\cos3\alpha$ !}
+ {\large 6}
+\kopf{\vspace{3cm}
+
+ \centerline{\Large \bf keine Hilfsmittel !!}}
+\punktesumme {\large 24}
+
+\end{document}
diff --git a/macros/latex209/contrib/arbeit/arbeito.sty b/macros/latex209/contrib/arbeit/arbeito.sty
new file mode 100644
index 0000000000..a935e4b8f1
--- /dev/null
+++ b/macros/latex209/contrib/arbeit/arbeito.sty
@@ -0,0 +1,90 @@
+%Stylefile zum Erstellen von Klassenarbeiten
+% Copyright (1992) Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+% und Joachim Lammarsch, Luzia Dietsche
+% DANTE e.V.
+% Postfach 101840
+% 6900 Heidelberg 1
+
+\typeout {Stylefile zum Erstellen von Klassenarbeiten (Version 1.0)}
+\typeout {(c) 1992 Werner Burkhardt)}
+\newlength{\perheight}
+\newlength{\texthoehe}
+\newlength{\perheightI}
+\setlength{\tabcolsep}{0cm}
+\setlength{\textwidth}{18.5cm}
+\setlength{\headheight}{15ex}
+\setlength{\textheight}{21cm}
+\setlength{\perheight}{\textheight}
+\setlength{\perheightI}{\textheight}
+\addtolength{\oddsidemargin}{-3cm}
+\addtolength{\evensidemargin}{-3cm}
+\addtolength{\topmargin}{-3cm}
+\addtolength{\perheight}{26pt}
+\addtolength{\perheightI}{25.211111pt}
+
+\font\gross=cmr10 scaled \magstep4
+\newcommand{\Sm}[1]{\tiny\hfil#1\hfil}
+\newcommand{\bln}{ }
+\newcommand{\aufgabe}[3]{%
+ \parbox[t]{1cm}{#1}
+ \parbox[t]{15cm}{#2}
+ \setbox0=\hbox{\parbox[t]{15cm}{#2}}
+ \setlength{\texthoehe}{\ht0}
+ \addtolength{\texthoehe}{\dp0}
+ \addtolength{\texthoehe}{-0.8\baselineskip}
+ \raisebox{-\texthoehe}{\parbox[t]{0.85cm}{\hfill \raggedleft #3 \hfill}}
+ \par \bigskip}
+\newcommand{\kopf}[1]{\parbox[t]{16cm}{#1}\par \medskip}
+\newcommand{\punktesumme}[1]{%
+ \vfill
+ \parbox[t]{16.39cm}{\rule{16.39cm}{0pt}}
+ \parbox{1.4cm}{\rule{1.38cm}{0.4pt}\par}\par
+ \parbox[t]{1cm}{\rule{1cm}{0pt}}
+ \parbox[t]{15cm}{\rule{15cm}{0pt}}
+ \parbox[t]{1.4cm}{\vrule height 12pt width0pt depth8pt%
+ \raggedleft #1}\par}
+
+\def\Klasse#1{\gdef\@Klasse{#1}}
+\def\Nummer#1{\gdef\@Nummer{#1}}
+\def\Fach#1{\gdef\@Fach{#1}}
+\def\Datum#1{\gdef\@Datum{#1}}
+
+\def\@thehead{\vbox{\hrule width\textwidth height0pt
+ \gross
+ \noindent
+ \@Klasse
+ \hfill\@Nummer Klassenarbeit \@Fach\hfill\@Datum
+ \par
+ \bigskip
+ \noindent
+ Name:\par}}%
+
+\def\@thefoot{\vbox{\hrule width\textwidth height0pt
+ \gross
+ \noindent
+ Punkte: \hfil KMK-Punkte: \hfil Note: \hrule width1.5cm height0pt\par}}
+
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox {\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \vbox {\hrule\hbox{\vrule%
+ \box\@outputbox
+ \hskip-1.4cm\vrule\vbox to \perheightI{%
+ \hbox to 1.36cm{\vrule height 12pt width0pt depth8pt\hfill %
+ {\Sm Punkte}\hfill}\hrule\vfill}%
+ \vrule}%
+ \hrule}%
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
diff --git a/macros/latex209/contrib/arbeit/info.pdf b/macros/latex209/contrib/arbeit/info.pdf
new file mode 100644
index 0000000000..d9c9c9c2b9
--- /dev/null
+++ b/macros/latex209/contrib/arbeit/info.pdf
Binary files differ
diff --git a/macros/latex209/contrib/arbeit/info.tex b/macros/latex209/contrib/arbeit/info.tex
new file mode 100644
index 0000000000..76a5e86776
--- /dev/null
+++ b/macros/latex209/contrib/arbeit/info.tex
@@ -0,0 +1,58 @@
+\documentstyle[german]{article}
+
+\nofiles
+\pagestyle{empty}
+\addtolength{\textwidth}{10pt}
+
+\begin{document}
+\noindent
+{\huge Klassenarbeiten mit \LaTeX}
+
+\section{Kurzinformation}
+
+Die Stylefiles {\bf arbeit.sty} und {\bf arbeito.sty} (o steht hier f"ur Oberstufe)
+dienen zum Erstellen von Klassenarbeiten. Hierzu stehen folgende Befehle zur
+Verf"ugung:
+
+\sloppy
+\begin{flushleft}
+\begin{tabular}{p{3.3cm}p{7.8cm}}
+\bf $\backslash$ aufgabe \{\}\{\}\{\}
+ & Der Inhalt der ersten Klammer beinhaltet
+ die Auf\-gaben\-nummer, der der zweiten den
+ Auf\-gaben\-text und der der dritten die
+ zu\-geh"origen Punkte. \\
+\bf $\backslash$ kopf\{\} & Hiermit kann man einen Text schreiben, der "uber die
+ Nummern\-spalte und Text\-spalte einer Aufgabe
+ geht (s.o.). Der Text ist zwischen den
+ ge\-schweiften Klammern einzuf"ugen.
+
+ Diesen Befehl kann man z.B. benutzen, um
+ den Kopf einer Aufgabe zu schreiben.\\
+
+
+\bf $\backslash$ punktesumme\{\}
+ & In den geschweiften Klammern wird die
+ Punkte\-summe einer Klassenarbeit, etc. an\-gegeben.\\
+\end{tabular}
+\end{flushleft}
+
+\fussy
+Um weitere Informationen zu erhalten, kann man sich die Dateien {\bf
+arbeit1.tex } und {\bf arbeit2.tex } als Musterbeispiel anschauen.
+
+\section{"Anderungsw"unsche}
+
+Sollten Sie "Anderungs- oder Erg"anzungsw"unsche haben, oder wenn Ihnen ein
+Fehler auff"allt, wenden Sie sich bitte an:
+
+\bigskip
+
+\bf
+\begin{quote}
+ Werner Burkhardt\\
+ Carl-Benz-Schule Mannheim\\
+ Neckarpromenade 23\\
+ 6800 Mannheim 1
+\end{quote}
+\end{document}
diff --git a/macros/latex209/contrib/arbeit/info.txt b/macros/latex209/contrib/arbeit/info.txt
new file mode 100644
index 0000000000..3f55beca36
--- /dev/null
+++ b/macros/latex209/contrib/arbeit/info.txt
@@ -0,0 +1,36 @@
+Klassenarbeiten mit LaTeX
+
+1.Kurzinformation
+
+Die Stylefiles arbeit.sty und arbeito.sty (o sthet hier fr Oberstufe)
+dienen zum Erstellen von Klassenarbeiten. Hierzu stehen folgende Befehle
+zur Verfgung:
+
+\aufgabe Der Inhalt der ersten Klammer beinhaltet
+ die Aufgabennummer, der der zweiten den
+ Aufgabentext und der der dritten die
+ zugeh”rigen Punkte.
+\kopf Hiermit kann man einen Text schreiben, der ber
+ die Nummernspalte und Textspalte einer Aufgabe
+ geht (s.o.). Der Text ist zwischen den
+ geschweiften Klammern einzufgen.
+ Diesen Befehl kann man z.B. benutzen, um
+ den Kopf einer Aufgabe zu schreiben.\\
+
+
+ \punktesumme In den geschweiften Klammern wird die
+ Punktesumme einer Klassenarbeit, etc. angegeben.
+
+Um weitere Informationen zu erhalten, kann man sich die Dateien
+arbeit1.tex und arbeit2.tex als Musterbeispiele anschauen.
+
+2.Žnderungswnsche
+
+Sollten Sie Žnderungs- oder Erg„nzungswnsche haben, oder wenn Ihnen ein
+Fehler auff„llt, wenden Sie sich bitte an:
+
+
+ Werner Burkhardt
+ Carl-Benz-Schule Mannheim
+ Neckarpromenade 23
+ 6800 Mannheim 1
diff --git a/macros/latex209/contrib/ascii b/macros/latex209/contrib/ascii
new file mode 120000
index 0000000000..97d27e54c0
--- /dev/null
+++ b/macros/latex209/contrib/ascii
@@ -0,0 +1 @@
+../../../fonts/ascii \ No newline at end of file
diff --git a/macros/latex209/contrib/autotab/autotab.sty b/macros/latex209/contrib/autotab/autotab.sty
new file mode 100644
index 0000000000..840acfc734
--- /dev/null
+++ b/macros/latex209/contrib/autotab/autotab.sty
@@ -0,0 +1,45 @@
+% This is autotab.sty as of 5. October 1989
+% written by Gabriele Kruljac
+% Max-Planck-Institute Stuttgart
+% kruljac@ds0mpi11
+% this style generates tabular lines from data files
+% see autotab.tex for a description
+%
+% notice that the input data has to be written in valid TeX syntax
+% (i.e. \_, \% and so on)
+%
+% The name of the input data file will be read from the terminal
+% everytime the command \readtabline{...} is used
+
+\typeout{Document substyle `autotab' by MPI FKF, Version 1.0 as of 5. October 1989}
+
+\newif\ifnoteof
+\newcount\reccount
+\def\testeof{\ifeof10\global\noteoffalse\else\global\noteoftrue\fi}
+
+\long\def\readtabline#1{%
+\global\def\autotabline{}
+\let\septabline={\noexpand\septabline}
+\let\septabcol={\noexpand\septabcol}
+\let\savenu=\"
+\let\"=u
+\noteoftrue
+\message{Please type the name of the tabular input data file:}
+\read16 to\inputfile
+\openin10=\inputfile
+\loop
+ \read10 to\inrec
+ \testeof
+\ifnoteof
+ \advance\reccount by 1
+ \ifnum\reccount=#1
+ \global\edef\autotabline{\autotabline\inrec\septabline}
+ \reccount=0
+ \else
+ \global\edef\autotabline{\autotabline\inrec\septabcol}
+ \fi
+\repeat
+\closein10
+\let\"=\savenu
+\global\let\septabcol=&
+\global\let\septabline=\\}
diff --git a/macros/latex209/contrib/autotab/autotab.tex b/macros/latex209/contrib/autotab/autotab.tex
new file mode 100644
index 0000000000..92c94bff57
--- /dev/null
+++ b/macros/latex209/contrib/autotab/autotab.tex
@@ -0,0 +1,113 @@
+%format latex
+%documentstyle[german,11pt,supertab,autotab]{darticle}
+\documentstyle[german,11pt,supertab,autotab]{artdaf} %02.02.91
+
+\textheight 24cm
+\textwidth 17cm
+\topmargin -2cm
+\oddsidemargin -1cm
+\parskip 6pt
+
+\begin{document}
+\begin{center}
+\Large\bf Generating tabulars using the \\
+ {\tt autotab} Style \\[.5cm]
+\normalsize Gabriele Kruljac \\
+ 5. Oktober 1989
+\end{center}
+This is the description of the {\tt autotab} style. It offers some
+new commands to generate tabulars nearly automatically.
+
+The style itself is called as \verb|\documenstyle| option
+\verb|\documentstyle[...,autotab,...]{darticle}|. The tabular
+creating commands are called inside a {\tt tabular} or
+{\tt supertabular} environment. Syntax:
+\begin{center}
+\begin{tabular}{l p{10cm}}
+\verb|\readtabline{...}| & reads from data file and generates
+ the tabular entries; argument is
+ the number of columns = number of records
+ which bild one tabular line \\
+\verb|\autotabline| & is the built tabular entry, inserts it's
+ into the tabular at the specified point
+\end{tabular}
+\end{center}
+
+Every time \verb|\readtabline| is called it asks for the name of
+the input data file and starts reading. The style reads as much records
+as specified by the argument of the \verb|\readtabline| command,
+puts them into \verb|\autotabline| connected with ampersands (\verb|&|)
+and adds \verb|\\| to the last of these records.
+This algorithm is repeated until end-of-file is found.
+
+Using {\tt autotab} in conjunction with the {\tt supertabular}
+environment offers the possibility to generate tabulars without regard
+to necessary pagebreaks, because they will be inserted automatically
+by {\tt supertabular} (see separate description).
+
+\subsection*{Example}
+The data is stored in file {\tt sonderdr.dat}. \verb|\readtabline|
+results in an online dialog question:
+\begin{center}
+\begin{tabular}{l}
+\tt Please type the name of the tabular input data file:\\
+\verb|\inputfile=|
+\end{tabular}
+\end{center}
+The user types:\hfill{\tt sonderdr.dat}.\hspace*{\fill}
+
+\noindent The data look like:
+\begin{verbatim}
+ 265/89
+ Study of Plasma Potential Effects in a 40 MHz ...
+ Spectrochim. Acta
+ 1989
+ 44B
+ 219-228
+ ww
+ 264/89
+ Atomic Emission and Atomic Absorption Spectrometric ...
+ .
+ .
+ .
+ .
+ .
+ 263/89
+ Comparative Surface and Bulk Analysis of Oxygen in Si3N4 ...
+ Fresenius Z.Anal.Chem.
+ 1989
+ 333
+ 502-506
+ WW
+ 262/89
+\end{verbatim}
+Seven records build one tabular line. There must be a blank record for each empty entry (marked by . in the above example).
+
+\noindent Here is the definition of the tabular:
+\begin{verbatim}
+ \small\renewcommand{\arraystretch}{.8}
+ \tablehead{\hline Publ-Nr. & \multicolumn{1}{c|}{Titel}
+ & ersch. & Jahr & Bd. & Seite & Institut \\
+ \hline}
+ \tabletail{\hline}
+ \begin{center}
+ \begin{supertabular}{|l|p{5cm}|p{3cm}|l|l|l|l|}
+ \noalign{\readtabline{7}}
+ \autotabline
+ \end{supertabular}
+ \end{center}
+\end{verbatim}
+
+\noindent And here is the result:
+\small\renewcommand{\arraystretch}{.8}
+\tablehead{\hline
+ Publ-Nr. & \multicolumn{1}{c|}{Titel}
+ & ersch. & Jahr & Bd. & Seite & Institut \\ \hline}
+\tabletail{\hline}
+\begin{center}
+\begin{supertabular}{|l|p{5cm}|p{3cm}|l|l|l|l|}
+\noalign{\readtabline{7}}
+\autotabline
+\end{supertabular}
+\end{center}
+\end{document}
diff --git a/macros/latex209/contrib/barkom/bar.sty b/macros/latex209/contrib/barkom/bar.sty
new file mode 100644
index 0000000000..7c670bfe0b
--- /dev/null
+++ b/macros/latex209/contrib/barkom/bar.sty
@@ -0,0 +1,542 @@
+% BAR.STY --- Style File zum Setzen von Balkendiagrammen
+% Autor: J. Bleser, E. Lang
+% Hochschulrechenzentrum
+% Technische Hochschule Darmstadt
+% !!! Dieses Style-File ist urheberrechtlich geschuetzt !!!
+% !!! Aenderungen nur mit Zustimmung der Autoren !!!
+\typeout{Option BAR, Version 1.0 Sep. 92, J.Bleser, TH Darmstadt, HRZ}
+\newcount\breite \newcount\hoehe \newcount\tiefe
+\newcount\lhoehe \newcount\anzbar \newcount\hbarI
+\newcount\xpos \newcount\lxpos \newcount\halfbreite
+\newcount\ypos \newcount\lypos
+\newcount\tmpa \newcount\tmpb \newcount\tmpc
+\newcount\tmpd \newcount\tmpe
+\newcount\xmin \newcount\xmax \newcount\xstep
+\newcount\deltax \newcount\yhoehe %
+\newcount\ymin \newcount\ymax \newcount\ystep
+\newcount\yminII \newcount\ymaxII \newcount\deltay
+\newcount\ymove \newcount\xmove \newcount\inter
+\newcount\exact \newcount\xexact
+\newdimen\dtmpa \newdimen\dtmpb
+\newdimen\dmin \newdimen\dmax \newdimen\dstep
+\newdimen\dxmin \newdimen\dxmax \newdimen\dxstep
+\newdimen\faktor \newdimen\dinter
+\newbox\mybox \newbox\xbox \newbox\ybox
+\newif\if@xaxis \newif\if@yaxis
+\newif\if@hlineon
+\newif\iffaktor\faktorfalse
+
+
+\def\setnumberpos#1{\def\my@number{\expandafter\csname my@#1\endcsname}}
+\def\my@number{\my@outside}
+
+
+\def\m@nth{month}\def\d@y{day}
+\def\setxvaluetyp#1{\gdef\x@value{#1}%
+ \ifx\x@value\m@nth\let\myx@value\Monat@%
+ \else\ifx\x@value\d@y\let\myx@value\Tag@%
+ \else\let\myx@value\Zahl@n%
+ \fi%
+ \fi%
+}
+
+
+\def\solid{solid}\gdef\l@style{\relax}
+\def\setlinestyle#1{\gdef\l@style{#1}%
+ \ifx\l@style\solid\let\my@lstyle=\mylinebox%
+ \else\let\my@lstyle=\mydotbox%
+ \fi%
+}
+
+
+\def\setwidth#1{\global\breite=#1%
+ \ifdim\dinter>0pt\inter\dinter\multiply\inter\breite\divide\inter65536\fi%
+ \halfbreite\breite\divide\halfbreite2%
+}
+
+
+\def\setdepth#1{\ifnum#1<10\global\tiefe=0\else\global\tiefe=#1\fi}
+
+
+\def\setstretch#1{\global\faktor=#1pt\faktortrue}
+
+
+\def\setstyle#1{\def\my@style{#1}}
+\def\my@style{\tt}
+
+
+\def\setprecision#1{\global\exact=#1}
+\exact=0
+
+
+\def\sethspace#1{\dinter#1pt\dtmpa#1pt\multiply\dtmpa\breite%
+ \inter\dtmpa\divide\inter65536%
+}
+
+
+\def\setxname{\@ifnextchar [{\isetxname}{\isetxname[]}}
+\def\isetxname[#1]#2{\global\setbox\xbox=\hbox{\makebox(0,0)[#1]{#2}}}
+
+
+\def\setyname{\@ifnextchar [{\isetyname}{\isetyname[l]}}
+\def\isetyname[#1]#2{\global\setbox\ybox=\hbox{\makebox(0,0)[#1]{#2}}}
+
+
+\newcount\vorz %
+\def\setyaxis{\@ifnextchar [{\i@setyaxis}{\i@setyaxis[0]}}
+\def\i@setyaxis[#1]#2#3#4{%
+ \dmin#2\faktor\ymin\dmin\divide\ymin by65536%
+ \dmax#3\faktor\ymax\dmax\divide\ymax by65536%
+ \ifnum\ymin>\ymax\vorz-1\else\vorz1\fi%
+ \ifnum\ymin>0\ymin-\ymin\fi%
+ \ifnum\ymax<0\ymax-\ymax\fi%
+ \dstep#4\faktor\ystep\dstep\divide\ystep by65536%
+ \ifnum\ystep<0\ystep-\ystep\fi%
+ \@yaxistrue%
+ \setbox0=\hbox{\the\ymax}\setbox1=\hbox{\the\ymin}
+ \ifdim\wd0>\wd1\xmove=\wd0\else\xmove=\wd1\fi%
+ \divide\xmove by65536\advance\xmove by4%
+ \global\xmove=\the\xmove%
+ \deltay\ymax\advance\deltay-\ymin\tmpb\deltay%
+ \divide\deltay\ystep%
+ \advance\deltay by1%
+ \dmin=#2pt\dstep=#4pt%
+ \thicklines%
+ \multiput(0,\ymin)(0,\ystep){\deltay}{\line(-1,0){4}%
+ \put(-6,0){\makebox(0,0)[r]{{\my@style\dimIIreal\dmin}}%
+ \global\advance\dmin by\dstep}}%
+ \dtmpa=#1\faktor\ymove\dtmpa\divide\ymove by65536\ifnum\ymove<0\ymove=0\fi%
+ \tmpa\ymin\advance\tmpa by-\ymove\advance\tmpb by\ymove%
+ \global\yhoehe\tmpb %
+ \put(0,\tmpa){\line(0,1){\tmpb}}%
+ \thinlines%
+}
+
+
+\def\setxaxis#1#2#3{%
+ \dxmin#1pt\dxmax#2pt\dxstep#3pt\global\xexact\exact%
+ \@xaxistrue\let\mytmp@style=\my@style%
+}
+
+
+\def\hlineon{\global\@hlineontrue}
+
+
+\def\bar#1#2{\@ifnextchar [{\@bar{#1}{#2}}{\@bar{#1}{#2}[]}}
+\def\@bar#1#2[#3]{%
+ \dtmpa#1\faktor\hoehe\dtmpa\divide\hoehe by65536%
+ \multiply\hoehe\vorz%
+ \ypos0\def\@user{#1}%
+ \ifnum\hoehe<\yminII\yminII=\hoehe\fi\ifnum\hoehe>\ymaxII\ymaxII=\hoehe\fi%
+ \ifnum\anzbar=0\hbarI=\hoehe\fi%
+ \ifnum#2>-1%
+ \ifnum\hoehe<0\ypos=\hoehe\tmpa=-\hoehe\else\tmpa=\hoehe\fi%
+ \ifnum #2=1\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}\fi%
+ \ifnum #2=2\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpc=\breite\divide\tmpc by3\tmpb=\xpos\advance\tmpb by1%
+ \multiput(\tmpb,\ypos)(3,0){\tmpc}{\line(0,1){\tmpa}}%
+ \fi
+ \ifnum #2=3\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpc=\tmpa\divide\tmpc by3\tmpb=\ypos\advance\tmpb by1%
+ \multiput(\xpos,\tmpb)(0,3){\tmpc}{\line(1,0){\breite}}%
+ \fi
+ \ifnum #2=4\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpc=\breite\divide\tmpc by3\tmpb=\xpos\advance\tmpb by1%
+ \multiput(\tmpb,\ypos)(3,0){\tmpc}{\line(0,1){\tmpa}}%
+ \tmpc=\tmpa\divide\tmpc by3\tmpb=\ypos\advance\tmpb by1%
+ \multiput(\xpos,\tmpb)(0,3){\tmpc}{\line(1,0){\breite}}%
+ \fi
+ \ifnum #2=5\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpc=\breite\divide\tmpc by4\tmpb=\xpos\advance\tmpb by1%
+ \multiput(\tmpb,\ypos)(4,0){\tmpc}{\rule{2pt}{\tmpa pt}}%
+ \tmpc=\tmpa\divide\tmpc by4\tmpb=\ypos\advance\tmpb by1%
+ \multiput(\xpos,\tmpb)(0,4){\tmpc}{\rule{\breite pt}{2pt}}%
+ \fi
+ \ifnum #2=6\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpb=\breite\divide\tmpb by-2%
+ \ifnum\hoehe>0\advance\tmpb by\tmpa\fi%
+ \tmpc=\tmpa\divide\tmpc by4%
+ \multiput(\xpos,\ypos)(0,4){\tmpc}{%
+ \ifdim\@ydim<\tmpb pt\line(2,1){\breite}%
+ \else\tmpd=\@ydim\divide\tmpd by65536%
+ \ifnum\tmpd<0\else\advance\tmpd by-\tmpa\fi%
+ \multiply\tmpd by-2\line(2,1){\tmpd}%
+ \fi%
+ }%
+ \tmpb=\breite\divide\tmpb by8\tmpc=\breite\advance\tmpc by-8%
+ \tmpd=\tmpa\multiply\tmpd 2\advance\xpos by 8%
+ \multiput(\xpos,\ypos)(8,0){\tmpb}{%
+ \ifnum\tmpc<\tmpd\line(2,1){\tmpc}\else\line(2,1){\tmpd}\fi%
+ \global\advance\tmpc by-8%
+ }%
+ \advance\xpos by -8%
+ \fi%
+ \ifnum #2=7\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpb=\breite\divide\tmpb by2%
+ \ifnum\hoehe>0\ypos=\hoehe\else\ypos=0\advance\tmpb by-\tmpa\fi%
+ \tmpc=\tmpa\divide\tmpc by4%
+ \multiput(\xpos,\ypos)(0,-4){\tmpc}{%
+ \ifdim\@ydim<\tmpb pt\tmpd=\@ydim\divide\tmpd by65536%
+ \ifnum\tmpd<0\advance\tmpd by\tmpa\fi%
+ \multiply\tmpd by2\line(2,-1){\tmpd}%
+ \else\line(2,-1){\breite}%
+ \fi%
+ }%
+ \tmpb=\breite\divide\tmpb by8\advance\tmpb by 1\tmpc=\breite%
+ \tmpd=\tmpa\multiply\tmpd 2%
+ \multiput(\xpos,\ypos)(8,0){\tmpb}{%
+ \ifnum\tmpc>\tmpd\line(2,-1){\tmpd}\else\line(2,-1){\tmpc}\fi%
+ \global\advance\tmpc by-8%
+ }%
+ \fi%
+ \ifnum #2=8\put(\xpos,\ypos){\rule{\breite pt}{\tmpa pt}}\fi
+ \my@number%
+ \fi%
+ \tmpc-\baselineskip\divide\tmpc 65536%
+ \divide\tmpc 2%
+ \put(\xpos,\ypos){\put(0,\tmpc){\makebox(\breite,0){#3}}}%
+ \ifnum\anzbar>0
+ \ifnum\tiefe>0
+ \ifnum\lhoehe<\hoehe
+ \ifnum\lhoehe>0\machDachI(\lxpos,\lhoehe)
+ \else\machDachI(\lxpos,0)
+ \fi
+ \else
+ \ifnum\lhoehe>0\machDachII(\lxpos,\lhoehe)
+ \else\machDachII(\lxpos,0)
+ \fi
+ \fi%
+ \fi%
+ \if@hlineon\machHLines\fi%
+ \fi%
+ \lxpos\xpos\advance\xpos\breite\advance\xpos\inter%
+ \advance\anzbar1\lhoehe\hoehe%
+}
+
+
+\newenvironment{barenv}%
+{\par%
+ \xpos0\breite40\halfbreite20\tiefe0\lhoehe0\anzbar0%
+ \yminII0\ymaxII0\inter0\dinter0pt\vorz1%
+ \exact0\ymove0\xmove0\unitlength1pt\@xaxisfalse\@yaxisfalse\@hlineonfalse%
+ \let\my@lstyle=\mydotbox\let\myx@value=\Zahl@n%
+ \faktor1pt%
+ \def\vline{\my@vline}%
+ \def\hspace{\my@hspace}%
+ \setbox\@tempboxa=\hbox\bgroup%
+ \begin{picture}(0,0)\thinlines%
+}%
+{%
+ \advance\xpos by-\inter%
+ \ifnum\tiefe>0
+ \put(\xpos,0){\line(1,1){\tiefe}}%
+ \put(\xpos,\hoehe){\line(1,1){\tiefe}\put(0,\tiefe){\line(0,1){-\hoehe}}}%
+ \fi%
+ \deltax=\lhoehe\bar{0}{-1}\lhoehe=\deltax%
+ \thicklines%
+ \if@yaxis\else\tmpa=\ymaxII\advance\tmpa by-\yminII\advance\tmpa by\tiefe%
+ \put(0,\yminII){\line(0,1){\tmpa}}%
+ \fi%
+ \if@xaxis%
+ \advance\ymin by-\ymove%
+ \tmpe=\exact\global\exact=\xexact%
+ \put(0,\ymin){\line(1,0){\lxpos}}%
+ \xstep=\dxstep\divide\xstep by65536%
+ \dtmpa=\dxmax\advance\dtmpa by-\dxmin%
+ \deltax=\dtmpa\divide\deltax by65536\divide\deltax by\xstep%
+ \advance\deltax by1%
+ \tmpa=\breite\divide\tmpa by2%
+ \tmpb=\breite\advance\tmpb by\inter%
+ \multiput(\tmpa,\ymin)(\tmpb,0){\deltax}{%
+ \line(0,-1){4}\myx@value\dxmin%
+ \global\advance\dxmin by\dxstep}%
+ \global\exact=\tmpe%
+ \fi%
+ \put(0,0){\line(1,0){\lxpos}}%
+ \if@xaxis\tmpa=-20\else\tmpa=-10\fi%
+ \ifvoid\xbox\else\put(\lxpos,\ymin){\put(0,\tmpa){\box\xbox}}\fi%
+ \tmpa=\ymax\advance\tmpa by6\advance\tmpa by\tiefe%
+ \ifvoid\ybox\else\put(\tiefe,\tmpa){\box\ybox}\fi%
+ \if@hlineon%
+ \ifnum\lhoehe<0%
+ \tmpb=-\ymin\advance\tmpb by\lhoehe%
+ \advance\tmpb by\ymove\divide\tmpb by\ystep%
+ \tmpa=\ymin\advance\tmpa by\tiefe\advance\tmpa by\ymove%
+ \multiput(\lxpos,\tmpa)(0,\ystep){\tmpb}{%
+ \ifdim\@ydim<\lhoehe pt%
+ \else\ypos=-\@ydim\divide\ypos by65536%
+ \advance\ypos by\lhoehe\advance\ypos by\tiefe%
+ \tmpe=\tiefe\advance\tmpe by-\ypos%
+ \ifnum\ypos>0\put(\tmpe,0){\thinlines\my@lstyle\ypos}\fi%
+ \fi%
+ }%
+ \fi%
+ \put(0,\ymin){\line(1,0){\lxpos}}%
+ \tmpa=\ymax\advance\tmpa by-\ymin%
+ \ifnum\tiefe>0
+ \put(0,\ymax){\line(1,1){\tiefe}\put(0,\tiefe){\line(1,0){\lxpos}%
+ \line(0,-1){\tmpa}\put(0,-\tmpa){\line(-1,-1){\tiefe}}}}%
+ \else\put(0,\ymax){\line(1,0){\lxpos}\line(0,-1){\tmpa}}%
+ \fi%
+ \thinlines%
+ \ifnum\hbarI<0\tmpa=-\ymin\advance\tmpa by\hbarI\advance\tmpa by-\tiefe%
+ \put(\tiefe,\tiefe){\line(0,1){\ymax}}%
+ \put(\tiefe,\hbarI){\line(0,-1){\tmpa}}%
+ \else\tmpa=\ymax\advance\tmpa by-\hbarI\advance\ymax by\tiefe%
+ \put(\tiefe,\ymax){\line(0,-1){\tmpa}}%
+ \ifnum\ymin<0\tmpa=\ymin%
+ \advance\tmpa by\tiefe\put(\tiefe,\tmpa){\line(0,1){-\tmpa}}%
+ \fi%
+ \fi%
+ \ifnum\hbarI<0\tmpa=\hbarI\tmpb=0\else\tmpa=0\tmpb=\hbarI\fi%
+ \tmpc=-\ymin\advance\tmpc \tmpa%
+ \ifnum\tmpc>\tiefe\tmpc=\tiefe\fi
+ \ifnum\ymove>0\put(0,\ymin){\line(1,1){\tmpc}}\fi%
+ \advance\ymin by\ymove%
+ \multiput(0,\ymin)(0,\ystep){\deltay}{%
+ \ifdim\@ydim<\tmpa pt%
+ \tmpc=-\@ydim\divide\tmpc by65536\advance\tmpc by\tmpa%
+ \ifnum\tmpc>\tiefe\tmpc=\tiefe\fi%
+ \ifx\l@style\solid\line(1,1){\tmpc}%
+ \else\divide\tmpc by 3\multiput(0,0)(3,3){\tmpc}{.}%
+ \fi%
+ \else\ifdim\@ydim>\tmpb pt%
+ \ifx\l@style\solid\line(1,1){\tiefe}%
+ \else\tmpe=\tiefe\divide\tmpe by3\multiput(0,0)(3,3){\tmpe}{.}%
+ \fi%
+ \fi%
+ \fi%
+ }%
+ \fi%
+ \thinlines%
+ \ifnum\ymaxII<\ymax\global\ymaxII=\ymax\else\global\ymaxII=\ymaxII\fi%
+ \ifnum\yminII>\ymin\global\yminII=\ymin\else\global\yminII=\yminII\fi%
+ \global\advance\yminII by-\ymove%
+ \global\xpos=\the\xpos\global\advance\xpos by20%
+ \end{picture}
+ \egroup%
+ \global\advance\ymaxII by\tiefe\advance\ymaxII by-\yminII%
+ \advance\xpos by-\breite%
+ \begin{picture}(\the\xpos,\the\ymaxII)
+ \put(\xmove,-\yminII){\box\@tempboxa}
+ \end{picture}
+ \faktorfalse
+}
+
+
+\def\legend#1#2{%
+ \begin{picture}(20,10)
+ \put(0,0){\framebox(20,10){}}
+ \ifnum #1=2\multiput(1,0)(3,0){7}{\line(0,1){10}}\fi%
+ \ifnum #1=3\multiput(0,1)(0,3){3}{\line(1,0){20}}\fi%
+ \ifnum #1=4\multiput(1,0)(3,0){7}{\line(0,1){10}}%
+ \multiput(0,1)(0,3){3}{\line(1,0){20}}%
+ \fi%
+ \ifnum #1=5\multiput(1,0)(4,0){5}{\rule{2pt}{10pt}}%
+ \multiput(0,2)(0,4){2}{\rule{20pt}{2pt}}%
+ \fi%
+ \ifnum #1=6%
+ \put(0,0){\line(2,1){20}}\put(0,4){\line(2,1){13}}\put(8,0){\line(2,1){12}}%
+ \fi%
+ \ifnum #1=7%
+ \put(0,10){\line(2,-1){20}}\put(0,6){\line(2,-1){12}}%
+ \put(8,10){\line(2,-1){12}}%
+ \fi%
+ \ifnum #1=8\put(0,0){\rule{20\unitlength}{10\unitlength}}\fi%
+ \end{picture}%
+ \quad#2%
+}
+
+
+
+\def\my@vline{%
+ \tmpa\ymin\advance\tmpa-\ymove%
+ \put(\xpos,\tmpa){\line(0,1){\yhoehe}}
+}
+
+
+\def\my@hspace#1{%
+ \dtmpa#1pt\multiply\dtmpa\breite%
+ \tmpa\dtmpa\divide\tmpa65536%
+ \global\advance\xpos\tmpa
+}
+
+
+
+\def\mydotbox#1{\tmpe=#1\advance\tmpe by2\lower0.8pt\hbox to\tmpe pt{\dotfill}}
+
+
+\def\mylinebox#1{\line(1,0){#1}}
+
+
+% Parameter: umzuwandelnde Dimension.
+\def\dimIIreal#1{%
+ \dtmpa=#1\tmpa=\dtmpa\divide\tmpa by65536\advance\dtmpa by-\tmpa pt%
+ \the\tmpa\ifnum\exact>0,\fi%
+ \tmpb=\exact%
+ \@whilenum\tmpb>0\do{%
+ \advance\dtmpa by0.05pt\dtmpa=10\dtmpa\advance\dtmpa by-0.5pt%
+ \tmpa=\dtmpa\divide\tmpa by65536\advance\dtmpa by-\tmpa pt%
+ \the\tmpa\advance\tmpb by-1}%
+}
+
+
+\def\machDachI(#1,#2){%
+ \tmpa=\hoehe\advance\tmpa by-#2\tmpd=\tmpa\ifnum\tmpd<0\tmpd=-\tmpd\fi%
+ \ifnum\hoehe<0\machDachII(#1,#2)%
+ \else
+ \tmpb=\breite\advance\tmpb by-\tiefe%
+ \advance\tmpb by\inter%
+ \ifnum\tmpa<\tiefe\advance\tmpa by-\tiefe\advance\tmpb by-\tmpa\fi%
+ \ifnum\tmpb>\breite\tmpb=\breite\fi%
+ \ifnum\breite<\tiefe\put(#1,#2){\line(1,1){\breite}}%
+ \else\put(#1,#2){\line(1,1){\tiefe}\put(0,\tiefe){\line(1,0){\tmpb}}}%
+ \fi%
+ \fi%
+ \tmpa=#1\advance\tmpa by\breite%
+ \ifnum\inter>0%
+ \ifnum\tmpd<\inter\tmpb=\tiefe\else\tmpb=\inter\fi%
+ \put(\tmpa,\lhoehe){\line(1,1){\tmpb}}%
+ \fi%
+ \ifnum\lhoehe<0\put(\tmpa,\lhoehe){%
+ \ifnum\hoehe<0\tmpb=-\lhoehe\advance\tmpb by\hoehe%
+ \ifnum\tmpb>\tiefe\tmpa=\tiefe\else\tmpa=\tmpb\tmpb=0\fi%
+ \line(1,1){\tmpa}\put(0,\tmpa){\advance\tmpb by-\tiefe\line(0,1){\tmpb}}%
+ \else\tmpa=-\lhoehe\advance\tmpa by-\tiefe%
+ \ifnum-\lhoehe<\tiefe\tmpb=-\lhoehe\else\tmpb=\tiefe\fi%
+ \line(1,1){\tmpb}\put(0,\tmpb){\line(0,1){\tmpa}}%
+ \fi%
+ }%
+ \fi
+}
+
+
+\def\machDachII(#1,#2){%
+ \tmpa=#1\advance\tmpa by\breite\tmpb=0%
+ \ifnum\hoehe>0\ifnum\lhoehe<0\tmpb=\lhoehe\fi
+ \put(\tmpa,\tmpb){\line(1,1){\inter}}
+ \else\put(\tmpa,0){\line(1,1){\tiefe}}
+ \fi
+ \ifnum\hoehe<0\tmpa=\lhoehe\else\tmpa=\lhoehe\advance\tmpa by-\hoehe\fi
+ \ifnum\tmpa<0\tmpa=\inter\else\advance\tmpa by\inter\fi%
+ \put(#1,#2){\line(1,1){\tiefe}\put(0,\tiefe){\line(1,0){\breite}%
+ \line(0,-1){\tmpa}\line(-1,-1){\tiefe}}}%
+}
+
+
+\def\machHLinesI{%
+ \tmpc=\breite\advance\tmpc by2%
+ \setbox\mybox=\hbox to\tmpc pt{\dotfill}
+ \multiput(\lxpos,\ymin)(0,\ystep){\deltay}{%
+ \ifdim\@ydim<\tmpa pt\lower0.8pt\copy\mybox\fi%
+ \ifdim\@ydim>\tmpb pt\lower0.8pt\copy\mybox\fi%
+ }
+}
+
+
+\def\machHLinesII{%
+ \multiput(\lxpos,\lypos)(0,\ystep){\deltay}{%
+ \ifdim\@ydim<\tmpa pt%
+ \ifdim\@ydim>\tmpc pt\ypos=\breite\advance\ypos by-\tiefe%
+ \else\ypos=\breite%
+ \fi%
+ \my@lstyle\ypos
+ \else%
+ \ifdim\@ydim>\tmpc pt%
+ \else%
+ \ypos=-\@ydim\divide\ypos by65536%
+ \advance\ypos by\lhoehe\advance\ypos by\tiefe%
+ \tmpe=\breite\advance\tmpe by-\ypos%
+ \ifnum\ypos>0\ifnum\tmpe>0\put(\tmpe,0){\my@lstyle\ypos}\fi\fi%
+ \fi%
+ \fi%
+ \ifdim\@ydim>\tmpb pt%
+ \ypos=\breite\advance\ypos by-\tiefe%
+ \ifdim\@ydim>\tmpd pt\ypos=\breite%
+ \else\ifdim\@ydim<\hoehe pt%
+ \else\tmpe=\@ydim\divide\tmpe by65536\advance\tmpe by-\hoehe%
+ \advance\ypos by\tmpe%
+ \fi%
+ \fi%
+ \my@lstyle\ypos
+ \fi%
+ }%
+\ifnum\ymove>0%
+ \tmpb=\ymin\advance\tmpb by-\ymove\advance\tmpb by\tiefe%
+ \ifnum\lhoehe>\tmpb\ypos=\breite%
+ \ifnum\hoehe<\tmpb\advance\ypos by-\tiefe\fi%
+ \put(\lxpos,\tmpb){\line(1,0){\ypos}}
+ \fi%
+\fi%
+}
+
+
+\def\machHLines{%
+ \tmpe=\baselineskip\divide\tmpe by65536\advance\tmpe by3%
+ \ifnum\lhoehe<0\tmpa=\lhoehe\tmpb=0\else\tmpa=0\tmpb=\lhoehe\fi%
+ \ifnum\hoehe<0\tmpc=\hoehe\tmpd=0\else\tmpc=0\tmpd=\hoehe\fi%
+ \advance\tmpb by\tiefe\advance\tmpd by\tiefe%
+ \advance\lxpos by\tiefe%
+ \lypos=\ymin\advance\lypos by\tiefe%
+ \machHLinesII%
+}
+
+
+\def\@user{}
+\def\my@empty{}
+\def\my@inside{%
+ \ifnum\hoehe<0\put(\xpos,\hoehe){\makebox(\breite,\tmpa){{\my@style\@user}}}%
+ \else\put(\xpos,0){\makebox(\breite,\tmpa){{\my@style\@user}}}%
+ \fi%
+}
+\def\my@outside{%
+ \tmpa=\hoehe%
+ \ifnum\hoehe<0\advance\tmpa by-6\else\advance\tmpa by\tiefe\advance\tmpa by6%
+ \fi%
+ \tmpb=\breite\divide\tmpb by2\advance\tmpb by\xpos%
+ \ifnum\hoehe>0\advance\tmpb by\tiefe\fi%
+ \put(\tmpb,\tmpa){\makebox(0,0){{\my@style\@user}}}%
+}
+\def\my@up{%
+ \ifnum\hoehe>0\tmpa=\hoehe\advance\tmpa by\tiefe\advance\tmpa by8%
+ \else\tmpa=\tiefe\advance\tmpa by8%
+ \fi%
+ \tmpb=\breite\divide\tmpb by2\advance\tmpb by\xpos\advance\tmpb by\tiefe%
+ \put(\tmpb,\tmpa){\makebox(0,0){{\my@style\@user}}}%
+}
+\def\my@down{%
+ \ifnum\hoehe>0\tmpa=-6\else\tmpa=\hoehe\advance\tmpa by-6\fi%
+ \tmpb=\breite\divide\tmpb by2\advance\tmpb by\xpos%
+ \put(\tmpb,\tmpa){\makebox(0,0){{\my@style\@user}}}%
+}
+\def\my@axis{%
+ \ifnum\hoehe>0\tmpa=-6\else\tmpa=6\fi%
+ \tmpb=\breite\divide\tmpb by2\advance\tmpb by\xpos%
+ \put(\tmpb,\tmpa){\makebox(0,0){{\my@style\@user}}}%
+}
+
+
+\def\Monat@#1{%
+ \tmpd=#1\divide\tmpd by65536\tmpd=\the\tmpd%
+ \tmpc=\tmpd\divide\tmpc by12\multiply\tmpc by12\advance\tmpd -\tmpc%
+ \put(0,-10){\makebox(0,0){{\mytmp@style%
+ \ifcase\tmpd Dez\or Jan\or Feb\or M\"ar\or Apr\or Mai\or Jun\or Jul%
+ \or Aug\or Sep\or Okt\or Nov%
+ \fi%
+ }}}%
+}
+
+
+\def\Tag@#1{%
+ \tmpd=#1\divide\tmpd by65536\tmpd=\the\tmpd%
+ \tmpc=\tmpd\divide\tmpc by7\multiply\tmpc by7\advance\tmpd -\tmpc%
+ \put(0,-10){\makebox(0,0){{\mytmp@style%
+ \ifcase\tmpd Son\or Mon\or Die\or Mit\or Don\or Fre\or Sam\fi%
+ }}}%
+}
+
+
+\def\Zahl@n#1{%
+ \dtmpa=#1%
+ \put(0,-10){\makebox(0,0){{\mytmp@style\dimIIreal\dxmin}}}%
+}
diff --git a/macros/latex209/contrib/barkom/barkom.dvi b/macros/latex209/contrib/barkom/barkom.dvi
new file mode 100644
index 0000000000..bc52ae5faa
--- /dev/null
+++ b/macros/latex209/contrib/barkom/barkom.dvi
Binary files differ
diff --git a/macros/latex209/contrib/barkom/barkom.ps b/macros/latex209/contrib/barkom/barkom.ps
new file mode 100644
index 0000000000..59b6c95784
--- /dev/null
+++ b/macros/latex209/contrib/barkom/barkom.ps
@@ -0,0 +1,732 @@
+%!PS-Adobe-2.0
+%%Creator: dvips, version 5.4 (C) 1986-90 Radical Eye Software
+%%Title: barkom.dvi
+%%Pages: 4 1
+%%BoundingBox: 0 0 596 843
+%%EndComments
+%%BeginProcSet: texc.pro
+/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
+load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
+isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+Resolution VResolution vsize neg mul TR}B /@letter{/vsize 10 N}B /@landscape{
+/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{/vsize 15.5531 N
+}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{statusdict
+/manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0
+]N /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0
+]N df-tail}B /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N
+/FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N
+/Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[
+}B /E{pop nn dup definefont setfont}B /ch-image{ch-data dup type /stringtype
+ne{ctr get /ctr ctr 1 add N}if}B /ch-width{ch-data dup length 5 sub get}B
+/ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3
+sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data
+dup length 1 sub get}B /ctr 0 N /CharBuilder{save 3 1 roll S dup /base get 2
+index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff
+ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height
+true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]/id ch-image N /rw ch-width 7 add
+8 idiv string N /rc 0 N /gp 0 N /cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}
+imagemask restore}B /G{{id gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get
+exec}loop}B /adv{cp add /cp X}B /chg{rw cp id gp 4 index getinterval
+putinterval dup gp add /gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get
+dup 0 eq{pop 1}{dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}
+ifelse put 1 adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}
+{dup 2 idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
+putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval adv}B
+/fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}bind{adv 1
+chg nd}bind{1 add chg}bind{1 add chg nd}bind{adv lsh}bind{adv lsh nd}bind{adv
+rsh}bind{adv rsh nd}bind{1 add adv}bind{/rc X nd}bind{1 add set}bind{1 add clr
+}bind{adv 2 chg}bind{adv 2 chg nd}bind{pop nd}bind]N /D{/cc X dup type
+/stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{
+dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I
+{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0
+moveto}B /eop{clear SI restore showpage userdict /eop-hook known{eop-hook}if}
+B /@start{userdict /start-hook known{start-hook}if /VResolution X /Resolution
+X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put
+cvn put}for}B /p /show load N /RMat[1 0 0 -1 0 0]N /BDot 8 string N /v{/ruley
+X /rulex X V}B /V{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}
+imagemask grestore}B /a{moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{
+S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{
+0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B
+/o{p -1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /w{0 rmoveto}B /x{0 S
+rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B /eos{clear SS restore}B end
+%%EndProcSet
+TeXDict begin 1000 300 300 @start /Fa 1 1 df<1718173C177C17F8EE01F0EE03E0EE07
+C0EE0F80EE1F00163E5E5E4B5A4B5A4B5A4B5A4BC7FC153E5D5D4A5A4A5A4A5A4A5A4AC8FC143E
+5C5C495A495A495A495A49C9FC133E5B5B485A485A485A485A48CAFC123E5A5A5A12602E2E82AB
+2A>0 D E /Fb 3 63 df<126012F0A2126004047C830C>58 D<EC0380EC0F00143C14F0EB03C0
+010FC7FC133C13F0EA03C0000FC8FC123C12F0A2123C120FEA03C0EA00F0133C130FEB03C0EB00
+F0143C140FEC038019187D9520>60 D<12E01278121EEA0780EA01E0EA0078131EEB0780EB01E0
+EB0078141EEC0780A2EC1E001478EB01E0EB0780011EC7FC1378EA01E0EA0780001EC8FC127812
+E019187D9520>62 D E /Fc 19 121 df<EAFFE0A40B047F8A10>45 D<EB01801303A2EB0700A3
+130EA25BA35BA35BA25BA3485AA3485AA348C7FCA2120EA35AA35AA25AA35AA25A11297D9E18>
+47 D<EB0380A2497EA3497EA2497E131BA2EB31F8A2EB61FC1360EBE0FEEBC07EA248487E90B5
+FC481480EB001FA20006EB0FC0A2000E14E0000C130739FFC07FFEA21F1C7E9B24>65
+D<90380FF00890387FFE383901FC07F83807E001390F80007848C7FC481438123E007E1418127C
+00FC1400A6EC7FFFA2007CEB01F8127E123E123F7EEA0F80EA07E03801FC0739007FFE7890380F
+F818201C7D9B26>71 D<D8FFC0EB03FF6D5B000F15F0D80DF0130DA3D80CF81319A2017C1331A2
+6D1361A26D13C1A390380F8181A2903807C301A2EB03E6A2EB01FCA3EB00F8A23AFFC0701FFFA2
+281C7E9B2D>77 D<007FB512E0A238781F81007013800060146000E0147000C01430A400001400
+B03807FFFEA21C1C7E9B21>84 D<EA0FF8EA1C1E383E0F80130714C0121C1200137FEA07E7EA1F
+07123C127C12F8A3EA780B383E13F8EA0FE115127F9117>97 D<EB0FF0A21301A9EA01F9EA0F07
+EA1C03EA3C011278A212F8A61278A2123CEA1C03380F0FFEEA03F9171D7E9C1B>100
+D<EA01FCEA0F07381C0380383C01C0127814E012F8A2B5FC00F8C7FCA31278007C1360123C6C13
+C0380F03803801FC0013127F9116>I<121E123FA4121EC7FCA6B4FCA2121FAEEAFFE0A20B1E7F
+9D0E>105 D<B4FCA2121FA9EB0FF8A2EB0380EB0700130C5B137013F87F13BC133E7F7F1480EB
+07C0EB03E038FFC7FCA2161D7F9C19>107 D<39FF0FC07E903831E18F3A1F40F20780D980FC13
+C0A2EB00F8AB3AFFE7FF3FF8A225127F9128>109 D<38FF0FC0EB31E0381F40F0EB80F8A21300
+AB38FFE7FFA218127F911B>I<EA01FC380F0780381C01C0003C13E0387800F0A200F813F8A600
+7813F0A2383C01E0381E03C0380F07803801FC0015127F9118>I<38FF3F80EBE1E0381F80F0EB
+0078147C143C143EA6143C147C1478EB80F0EBC1E0EB3F0090C7FCA6EAFFE0A2171A7F911B>I<
+EAFE3E1347381E8F80A3381F070090C7FCAAEAFFF0A211127F9114>114
+D<1203A45AA25AA2EA3FFC12FFEA1F00A9130CA4EA0F08EA0798EA03F00E1A7F9913>116
+D<38FF07F8A2EA1F00AC1301120F380786FFEA01F818127F911B>I<38FFC7FCA2381F8180EA0F
+833807C700EA03EEEA01FC5B1200137C13FEEA01DFEA039F38070F80380607C0380C03E038FF07
+FCA216127F9119>120 D E /Fd 3 121 df<EA3F80EA70C013E0EA20701200A2EA07F0EA1C7012
+30127012E01371A213F1EA71FBEA1E3C10107E8F13>97 D<38FC7C1F391D8E6380391E0781C0A2
+001C1301AB39FF9FE7F81D107F8F20>109 D<38FF3F80383C1C00EA1C18EA0E106C5A13606C5A
+12017F1203EA0270487E1208EA181CEA381E38FC3FC012107F8F14>120
+D E /Fe 3 73 df<1730177017E0EE01C0EE0380EE0700160E5E5E5E5E4B5A4B5A4BC7FC150E5D
+5D5D5D4A5A4A5A4AC8FC140E5C5C5C5C495A495A49C9FC130E5B5B5B5B485A485A48CAFC120E5A
+5A5A5A5A2C2C81AA2A>0 D<173017F0EE03C0EE0F00163C16F0ED03C0030FC7FC153C15F0EC03
+C0020FC8FC143C14F0EB03C0010FC9FC133C13F0EA03C0000FCAFC123C12F012C02C1781952A>
+8 D<12C012F0123C120FEA03C0EA00F0133C130FEB03C0EB00F0143C140FEC03C0EC00F0153C15
+0FED03C0ED00F0163C160FEE03C0EE00F017302C1781952A>72 D E /Ff
+3 111 df<133C13E0EA01C013801203AD13005A121C12F0121C12077E1380AD120113C0EA00E0
+133C0E297D9E15>102 D<12F0121C12077E1380AD120113C0EA00E0133C13E0EA01C013801203
+AD13005A121C12F00E297D9E15>I<12C0A27E1260A21270123012381218A2121C120CA2120E12
+06A212077EA21380120113C01200A213E01360A213701330A213381318A2131C130C130E1306A2
+13071303A210297E9E15>110 D E /Fg 25 128 df<3801FFFE39003C078090383803C01401A3
+13701403A2EC078001E01300140E143CEBFFF83801C01C80140FA2EA0380A43807001E141C143C
+5C380E01E0B512801A1C7D9B1D>66 D<3801FFFE39003C078090383801C0A2EC00E0A24913F015
+70A215F05BA43901C001E0A315C0380380031580140715003807000E5C5C5C380E01C0B5C7FC1C
+1C7D9B1F>68 D<48B512C038003C01EB38001580A35BA214201500495AA214C013FF3801C080A4
+D80381C7FC1380A348C8FCA45AEAFFF01A1C7D9B1B>70 D<3901FFCFFE39003C01E0013813C0A4
+9038700380A49038E00700A390B5FC3801C00EA448485AA448485AA448137838FFE7FF1F1C7D9B
+1F>72 D<3801FFE038003C001338A45BA45BA4485AA438038008A31410EA07001430146014E038
+0E03C0B5FC151C7D9B1A>76 D<3AFF83FF0FF03A3C007001C00038158002F013001502EB01705D
+13025DEA1C045D13085D13105D13205DEB407192C7FCEB8072121DEB0074121E1478121C147012
+1814601210241D779B29>87 D<EA03CCEA063C120CEA181CEA383812301270A2EAE070A413E212
+C0A2EA61E4EA6264EA3C380F127B9115>97 D<123F1207A2120EA45AA4EA39C0EA3E60EA3830A2
+EA7038A4EAE070A3136013E0EAC0C012C1EA6180EA6300123C0D1D7B9C13>I<EA01F0EA070812
+0CEA181CEA3838EA30001270A25AA513081310EA6020EA30C0EA1F000E127B9113>I<EB1F8013
+03A2EB0700A4130EA4EA03DCEA063C120CEA181CEA383812301270A2485AA413E212C0A2EA61E4
+EA6264EA3C38111D7B9C15>I<EA01E0EA0710120CEA1808EA381012701360EA7F80EAE000A513
+08EA60101320EA30C0EA1F000D127B9113>I<13F3EA018FEA030FEA0607EA0E0E120C121CA2EA
+381CA413381230A2EA187813F0EA0F701200A213E0A2EAC0C012E1EAC300127E101A7D9113>
+103 D<EA0FC01201A2485AA448C7FCA4EA0E78138CEA0F0E120E121CA4485AA35B00701380A213
+70EB7100EAE032EA601C111D7D9C15>I<EA01801203EA0100C7FCA7121C12261247A2128EA212
+0E5AA35AA21271A31272A2123C091C7C9B0D>I<EA0FC01201A2485AA448C7FCA4EA0E0F1311EB
+23801343381C83001380001DC7FC121EEA3F80EA39C0EA38E0A2EA70E2A313E4EAE064EA603811
+1D7D9C13>107 D<EA1F801203A2EA0700A4120EA45AA45AA45AA412E4A412681238091D7C9C0B>
+I<393C1E078039266318C0394683A0E0384703C0008E1380A2120EA2391C0701C0A3EC0380D838
+0E1388A2EC0708151039701C032039300C01C01D127C9122>I<EA3C3CEA2646EA4687EA470712
+8EA2120EA2EA1C0EA35B00381340A21338148038701900EA300E12127C9117>I<EA01E0EA0718
+EA0C0C12181238EA300E1270A2EAE01CA31318133813301360EA60C0EA3180EA1E000F127B9115
+>I<EA3C3CEA26C2EA4687EA4707EA8E061300120EA25AA45AA45A123010127C9112>114
+D<EA01F0EA0608120C131CEA1818EA1C00121F13C0EA0FF01207EA00781338EA603012E012C0EA
+8060EA60C0EA1F000E127D9111>I<13C01201A3EA0380A4EAFFE0EA0700A3120EA45AA4EA3840
+A31380EA1900120E0B1A7D990E>I<EA1E03EA27071247A2EA870EA2120EA2485AA438383880A2
+1218EB3900EA1C59EA078E11127C9116>I<EA070EEA19913810E38012203841C30013C01201A2
+485AA4EA07021267EAE70412CBEA8B08EA70F011127D9113>120 D<EA6180EAF3C012E3EAC180
+0A04749C15>127 D E /Fh 32 128 df<EAFFF0A20C027F8910>45 D<126012F0A2126004047B
+830D>I<EA01801203121F12E31203B3A4EA07C0EA7FFC0E1C7C9B17>49
+D<EA07E0EA1838EA200CEA400E7F00F0138012F81303A21270EA00071400A2130E130C131C5B5B
+13C0485A48C7FC000213805A5A38100100EA3FFF5AB5FC111C7D9B17>I<EA07E0EA0838EA300C
+EA200EEA780F7F5B1238EA000EA25B13181370EA07E0EA0038130C130E7F1480A2127012F8A300
+F01300EA400EEA200CEA1838EA07E0111D7D9B17>I<EA1806EA1FFC5B13E00010C7FCA6EA11E0
+EA1618EA180CEA100E7F12001480A3126012F0A214001280EA400F130E6C5AEA1838EA07E0111D
+7D9B17>53 D<13F8EA0386EA0602EA0C07485A1238EA30060070C7FCA21260EAE3E0EAE418EAE8
+0CEAF00613077F00E01380A41260A212701400EA3007EA18065B6C5AEA03E0111D7D9B17>I<B6
+FC380F000F140380A215801400A214801500A3130113FF13011300A3154014001580A31401A2EC
+0300140FB6FC1A1C7D9B1F>69 D<B512FE380F001E14061402A214031401A214811480A3130113
+FF13011300A41400A77FEAFFF8181C7D9B1E>I<90381FC04090387030C03801C00C3803000300
+0E1301120C001C13005A15401278127000F01400A6EC7FF8EC07C00070130312781238A27E120C
+120E000313053801C008390070304090381FC0001D1E7D9C23>I<39FFF0FFF0390F000F00AC90
+B5FCEB000FAD39FFF0FFF01C1C7D9B22>I<380FFF8038007C00133CB3127012F8A21338EA7078
+EA4070EA30E0EA0F80111D7D9B18>74 D<B46CEB3FE0000FEC3E00A2D80BC0135EA2D809E0139E
+A33908F0011EA2EB7802A3EB3C04A2EB1E08A3EB0F10A2EB07A0A3EB03C0A2EB0180121C3AFF81
+81FFE0231C7D9B29>77 D<B4EB1FF0390F8003809038C00100120BEA09E0EA08F0A21378133C13
+3E131E130F14811307EB03C1EB01E114F113001479147D143D141FA2808080121CB46C7E1C1C7D
+9B22>I<3803E080EA0C19EA1005EA3003EA600112E01300A36C13007E127EEA7FE0EA3FFC6CB4
+FC00071380EA007FEB07C0EB03E0130113007EA36C13C0A238E0018038D00300EACE06EA81F813
+1E7D9C19>83 D<13201370A313B8A3EA011CA3EA020EA2487EA2EA07FF38080380A3381801C0EA
+380338FE0FF815157F9419>97 D<EBFC2038078260380E01E0EA1C0048136000781320127012F0
+1400A5142012701278003813407E6C138038078300EA00FC13157E9419>99
+D<EAFFFCEA1C07EB01C0EB00E0A21470A21478A71470A214E0A2EB01C0EB0700EAFFFC15157F94
+1A>I<B51280EA1C031300A21440A213101400A21330EA1FF0EA1C3013101420A2130014601440
+14C01301B5FC13157F9417>I<38FF8FF8381C01C0A9EA1FFFEA1C01A938FF8FF815157F9419>
+104 D<EAFF80EA1C00B3EAFF8009157F940D>I<EAFFC0001CC7FCAC1480A3130114005B5BB5FC
+11157F9415>108 D<00FEEB0FE0001E140000171317A338138027A23811C047A33810E087A2EB
+7107A3133AA2131CA2123839FE083FE01B157F941F>I<38FC03F8381E00E014401217EA138013
+C01211EA10E01370A21338131CA2130E130714C0130313011300123800FE134015157F9419>I<
+EA01F8EA070EEA0C03001C1380383801C0007813E0EA700000F013F0A7007013E0EA7801003813
+C0381C0380EA1E0738070E00EA01F814157E941A>I<EAFFFCEA1C0FEB038014C0A51480EB0F00
+EA1FFC001CC7FCA9B47E12157F9417>I<EAFFF8EA1C0EEB0780130314C0A314801307EB0E00EA
+1FF8EA1C1C7F7FA31480148414C4EB03CC38FF80F816157F9419>114 D<EA1F10EA30F0EA6030
+12C01310A213007E127EEA3FC0EA1FE0EA03F0EA0078133813181280A21310EAC030EAF060EA8F
+C00D157E9413>I<38FF83F8381C00E01440AE000C13C0000E138038060100EA0386EA00FC1515
+7F9419>117 D<38FF01F8383C00F0001C1340A2001E13C0000E1380A238070100A21383EA0382
+A2EA01C4A213E4EA00E8A21370A3132015157F9419>I<38FF87F0381E0380000E1300EA0F026C
+5AEA038413C8EA01D0EA00F0A21370137813BCEA011C7FEA020F487EEB0380000C13C0123C38FE
+07F815157F9419>120 D<EA60C0EAF1E0A2EA60C00B047A9C17>127 D E
+/Fi 36 122 df<1238127C127EA2123E120E121E123C127C12F81260070B798416>44
+D<B51280A311037E8D16>I<127012F8A312700505788416>I<EA03E0EA0FF8487EEA1E3CEA380E
+EA780FEA7007A238E00380A8EAF00700701300A2EA780FEA3C1E6C5AEA1FFC6C5AEA03E011197E
+9816>48 D<EA01801203A21207120F127F12FF12731203AEEA7FF813FC13F80E197C9816>I<EA
+07E0EA1FF8EA7FFEEA783FEAF00FEB07801303A21200A2130714005B131E5B5B5BEA03E0EA0780
+48C7FC381E0380123CEA7FFFB5FC7E11197E9816>I<EA07E0EA1FFCEA7FFEEA781F7F7F12005B
+A2133EEA07FC5B7FEA001E130714801303A212F013071400EAF81FEA7FFE6C5AEA07E011197E98
+16>I<137C13FC13DC1201EA039CA2EA071C120F120E121E123C1238127812F0B512E0A338001C
+00A53801FFC0A313197F9816>I<EA3FFEA30038C7FCA7EA3BF0EA3FFC7FEA3C0FEA3007000013
+801303126012F01307EB0F006C5AEA7FFEEA1FF8EA07E011197E9816>I<13F8EA03FEEA0FFFEA
+1F0F123E123CEA78060070C7FC12F0EAF3F8EAEFFE12FFEAF80F38F00780A2EAE00312F0A21270
+EA7807EB0F006C5AEA1FFEEA0FF8EA03E011197E9816>I<12E0B51280A338E00F00131EEA001C
+5B137813705BA2485AA3485AA448C7FCA7111A7E9916>I<EA07F0EA1FFC487EEA7C1F38F00780
+EAE003A338700700EA7C1FEA1FFCEA07F0EA1FFCEA3C1EEA700700F01380EAE003A3EAF0070070
+1300EA7C1FEA3FFE6C5AEA07F011197E9816>I<EA03E0EA0FF8EA3FFCEA7C1EEA780F487E12E0
+1480A21303EAF007A2EA780FEA3FFF13FBEA0FE3EA00071400EA300FEA780E131E137CEA7FF8EA
+3FE0EA0F8011197E9816>I<EAFFF0A3EAE000B3A8EAFFF0A30C20789C16>91
+D<EAFFF0A3EA0070B3A8EAFFF0A30C207F9C16>93 D<EA1FE0EA7FF87FEA783CEA301EEA000EA2
+EA03FE121FEA7E0E12F012E0A2EAF01EEAF83E387FFFE0EA3FE7EA0F8313127E9116>97
+D<127E12FE127E120EA4133EEBFF80000F13C0EB83E01301380E00F0A21470A414F0000F13E013
+01EB83C013FF000E1300EA063C1419809816>I<EA03F8EA0FFE121FEA3C1EEA780CEA700012F0
+5AA47EEA70071278EA3E0FEA1FFEEA0FFCEA03F010127D9116>I<133F5B7F1307A4EA03C7EA0F
+F7EA3FFFEA3C1F487E487EA212E0A412F05BEA781FEA7C3F383FFFE0381FF7F03807C7E014197F
+9816>I<EA03E0EA0FF8EA1FFCEA3C1EEA780EEA700712E0B5FCA3EAE000A2EA70071278EA3C0F
+EA1FFEEA0FFCEA03F010127D9116>I<3803E3C0380FFFE05A381E3CC0383C1E00EA380EA3EA3C
+1E6C5AEA1FFC5BEA3BE00038C7FCA2EA1FFC13FF4813C0EA780338F001E0EAE000A3EAF001387C
+07C0383FFF80380FFE00EA03F8131C7F9116>103 D<127E12FE127E120EA4133C13FF000F1380
+13871303A2120EA9387FC7F038FFE7F8387FC7F01519809816>I<EA0180EA03C0A2EA0180C7FC
+A4EA7FC0A31201ACEA7FFFB5FC7E101A7D9916>I<EAFFC0A31201B3B51280A311197E9816>108
+D<38F9C38038FFEFC0EBFFE0EA3E7CEA3C78EA3870AA38FE7CF8A2EB3C781512809116>I<EA7E
+3CEAFEFF007F1380EA0F871303A2120EA9387FC7F038FFE7F8387FC7F01512809116>I<EA03E0
+EA0FF8487EEA3C1E487EEA700738E00380A5EAF00700701300EA780FEA3C1EEA1FFC6C5AEA03E0
+11127E9116>I<EA7E3E38FEFF80007F13C0380F83E01301380E00F0A21470A414F0000F13E013
+01EB83C013FF000E1300133C90C7FCA6EA7FC0487E6C5A141B809116>I<38FF0FC0EB3FE0137F
+3807F040EBE0005B5BA290C7FCA7EAFFFCA313127F9116>114 D<EA0FECEA3FFC127FEAF03CEA
+E01CA2EAF000EA7F80EA1FF0EA07FCEA003EEAE00EA212F0EAF81EEAFFFC13F8EAC7E00F127D91
+16>I<12035AA4EA7FFFB5FCA20007C7FCA75BEB0380A2130713873803FF005BEA00F811177F96
+16>I<387E1F80EAFE3FEA7E1FEA0E03AA1307EA0F0FEBFFF06C13F83803E3F01512809116>I<38
+7F1FC000FF13E0007F13C0381C0700EA1E0FEA0E0EA36C5AA4EA03B8A3EA01F0A26C5A13127F91
+16>I<38FF1FE013BF131F38380380A413E33819F300A213B3EA1DB7A4EA0F1EA313127F9116>I<
+387F1FC0133F131F380F1C00EA073CEA03B813F012016C5A12017FEA03B8EA073C131CEA0E0E38
+7F1FC038FF3FE0387F1FC013127F9116>I<387F1FC038FF9FE0387F1FC0381C0700120E130EA2
+12075BA2EA039CA21398EA01B8A2EA00F0A35BA3485A1279127BEA7F806CC7FC123C131B7F9116
+>I E /Fj 67 128 df<EB7E1F3901C1B180390303E3C0000713C3000EEBC180903801C000A6B5
+12FC380E01C0B0387F87FC1A1D809C18>11 D<137E3801C180EA0301380703C0120EEB018090C7
+FCA5B512C0EA0E01B0387F87F8151D809C17>I<EA01F8EA070EEA0E07EA0C03001C1380A4EB07
+001306131CEAFCF0EA1C187F7F7F1480A2EB01C0A6148013E3140013E6EAFC7C121D7F9C15>25
+D<13401380EA0100120212065AA25AA25AA212701260A312E0AC1260A312701230A27EA27EA27E
+12027EEA008013400A2A7D9E10>40 D<7E12407E7E12187EA27EA27EA213801201A313C0AC1380
+A312031300A21206A25AA25A12105A5A5A0A2A7E9E10>I<126012F0A212701210A41220A21240
+1280040C7C830C>44 D<EAFFE0A20B0280890E>I<126012F0A2126004047C830C>I<EA03C0EA0C
+30EA1818EA300CA2EA700EEA6006A2EAE007ADEA6006A2EA700EEA300CA2EA1818EA0C30EA07E0
+101D7E9B15>48 D<12035A123F12C71207B3A4EA0F80EAFFF80D1C7C9B15>I<EA07C0EA1830EA
+201CEA400C130EEAF00F12F81307A21270EA000F130EA2131CA213381370136013C0EA0180EA03
+00EA0601120C1218EA1002EA3FFE127F12FF101C7E9B15>I<EA07E0EA1830EA201CA2EA781E13
+0E131E1238EA001CA2131813301360EA07E0EA0030131CA2130E130FA2127012F8A3EAF00EEA40
+1C1220EA1830EA07E0101D7E9B15>I<130CA2131C133CA2135C13DC139CEA011C120312021204
+120C1208121012301220124012C0B512C038001C00A73801FFC0121C7F9B15>I<EA300CEA3FF8
+13F013C0EA2000A6EA23E0EA2430EA2818EA301CEA200E1200130FA3126012F0A3EA800EEA401E
+131CEA2038EA1870EA07C0101D7E9B15>I<13F0EA030CEA0604EA0C0EEA181E1230130CEA7000
+A21260EAE3E0EAE430EAE818EAF00C130EEAE0061307A51260A2EA7006EA300E130CEA1818EA0C
+30EA03E0101D7E9B15>I<1240387FFF801400A2EA4002485AA25B485AA25B1360134013C0A212
+015BA21203A41207A66CC7FC111D7E9B15>I<EA03E0EA0C30EA1008EA200C13061260A31270EA
+780CEA3E08EA3FB0EA1FE0EA07F013F8EA18FCEA307EEA601E130FEAC0071303A4EA60021304EA
+300CEA1C10EA07E0101D7E9B15>I<126012F0A212601200AA126012F0A2126004127C910C>58
+D<126012F0A212601200AA126012F0A212701210A41220A212401280041A7C910C>I<1306A313
+0FA3EB1780A3EB23C0A3EB41E0A3EB80F0A200017FEB0078EBFFF83803007C0002133CA2000613
+3E0004131EA2000C131F121E39FF80FFF01C1D7F9C1F>65 D<B512C0380F00F01438143C141C14
+1EA4141C143C1478EB01F0EBFFE0EB0078143C141E140E140FA5141EA2143C1478B512E0181C7E
+9B1D>I<90381F8080EBE0613801801938070007000E13035A14015A00781300A2127000F01400
+A8007014801278A212386CEB0100A26C13026C5B380180083800E030EB1FC0191E7E9C1E>I<B5
+12C0380F00F0143C140E80A2EC038015C01401A215E0A815C0A21403158014071500140E5C1470
+B512C01B1C7E9B20>I<B512FC380F003C140C1404A214061402A213021400A3130613FE130613
+02A3140113001402A31406A2140C143CB512FC181C7E9B1C>I<B512F8380F007814181408A214
+0C1404A213021400A3130613FE13061302A490C7FCA77FEAFFF8161C7E9B1B>I<90381F8080EB
+E0613801801938070007000E13035A14015A00781300A2127000F01400A6ECFFF0EC0F80007013
+071278A212387EA27E6C130B380180113800E06090381F80001C1E7E9C21>I<39FFF3FFC0390F
+003C00ACEBFFFCEB003CAD39FFF3FFC01A1C7E9B1F>I<EAFFF0EA0F00B3A8EAFFF00C1C7F9B0F>
+I<EA1FFFEA00F81378B3127012F8A3EAF0F0EA40E0EA21C0EA1F00101D7F9B15>I<39FFF03FE0
+390F000F00140C14085C5C5C5C49C7FC13025B130E131F132FEB27801347EB83C0EB01E0A26D7E
+80147880A280141F158039FFF07FF01C1C7E9B20>I<EAFFF8EA0F8090C7FCB01408A31418A214
+1014301470EB01F0B5FC151C7E9B1A>I<B46CEBFF80000FECF800A2390BC00178A33809E002A2
+3808F004A3EB7808A3EB3C10A3EB1E20A3EB0F40A2EB0780A3EB0300121C3AFF8307FF80211C7E
+9B26>I<B4EB7FC0390F800E001404EA0BC0EA09E0A2EA08F013F81378133CA2131E130FA2EB07
+8414C41303EB01E4A2EB00F4147CA2143CA2141C140C121C38FF80041A1C7E9B1F>I<EB3F80EB
+E0E03803803848487E000E7F487F003C148000381303007814C0A20070130100F014E0A8007014
+C000781303A200381480003C1307001C14006C130E6C5B6C6C5A3800E0E0EB3F801B1E7E9C20>
+I<B51280380F00E01478143C141C141EA5141C143C147814E0EBFF8090C7FCACEAFFF0171C7E9B
+1C>I<3807E080EA1C19EA3005EA7003EA600112E01300A36C13007E127CEA7FC0EA3FF8EA1FFE
+EA07FFC61380130FEB07C0130313011280A300C01380A238E00300EAD002EACC0CEA83F8121E7E
+9C17>83 D<007FB512C038700F010060130000401440A200C014201280A300001400B1497E3803
+FFFC1B1C7F9B1E>I<39FFF07FC0390F000E001404B3A26C5B138000035B12016C6C5AEB70C001
+1FC7FC1A1D7E9B1F>I<39FFE00FF0391F0003C06CEB018015006D5A00071302A26C6C5AA36C6C
+5AA213F000005BA2EBF830EB7820A26D5AA36D5AA2131F6DC7FCA21306A31C1D7F9B1F>I<3AFF
+E0FFE0FF3A1F001F003C001E011E13186C011F1310A3D807801420EC2780A2D803C01440EC43C0
+A213E00001903881E080A33A00F100F100A3017913FA017A137AA2013E137C013C133CA3011813
+18A3281D7F9B2B>I<397FF0FFC0390FC03E0038078018EA03C0EBE01000015BEBF06000001340
+EB7880137D013DC7FC7F131F7F80A2EB13C0EB23E01321EB41F0EBC0F8EB80783801007C48133C
+00027F0006131F001FEB3F8039FFC0FFF01C1C7F9B1F>I<387FFFF0EA7C01007013E0386003C0
+A238400780130F1400131E12005B137C13785BA2485A1203EBC010EA0780A2EA0F00481330001E
+13205A14604813E0EAF803B5FC141C7E9B19>90 D<EA1FC0EA3070EA78387F12301200A2EA01FC
+EA0F1C12381270126000E01340A3EA603C38304E80381F870012127E9115>97
+D<12FC121CAA137CEA1D86EA1E03381C018014C0130014E0A614C013011480381E0300EA1906EA
+10F8131D7F9C17>I<EA07E0EA0C30EA18781230EA7030EA600012E0A61260EA70041230EA1808
+EA0C30EA07C00E127E9112>I<133F1307AAEA03E7EA0C17EA180F487E1270126012E0A6126012
+7012306C5AEA0C373807C7E0131D7E9C17>I<EA03E0EA0C30EA1818EA300CEA700EEA600612E0
+EAFFFEEAE000A41260EA70021230EA1804EA0C18EA03E00F127F9112>I<13F8EA018CEA071E12
+06EA0E0C1300A6EAFFE0EA0E00B0EA7FE00F1D809C0D>I<EB03803803C4C0EA0C38001C138038
+181800EA381CA4EA1818EA1C38EA0C30EA13C00010C7FC12307EEA1FF813FF1480EA3003386001
+C0EAC000A33860018038300300EA1C0EEA07F8121C7F9215>I<12FC121CAA137C1387EA1D0300
+1E1380121CAD38FF9FF0141D7F9C17>I<1218123CA21218C7FCA712FC121CB0EAFF80091D7F9C
+0C>I<12FC121CAAEB3FC0EB0F00130C13085B5B5B13E0121DEA1E70EA1C781338133C131C7F13
+0F148038FF9FE0131D7F9C16>107 D<12FC121CB3A9EAFF80091D7F9C0C>I<39FC7E07E0391C83
+8838391D019018001EEBE01C001C13C0AD3AFF8FF8FF8021127F9124>I<EAFC7CEA1C87EA1D03
+001E1380121CAD38FF9FF014127F9117>I<EA03F0EA0E1CEA1806487E00701380EA600100E013
+C0A600601380EA700300301300EA1806EA0E1CEA03F012127F9115>I<EAFC7CEA1D86EA1E0338
+1C018014C0130014E0A6EB01C0A21480381E0300EA1D06EA1CF890C7FCA7B47E131A7F9117>I<
+EAFCE0EA1D30EA1E78A2EA1C301300ACEAFFC00D127F9110>114 D<EA1F90EA3070EA4030EAC0
+10A212E0EAF800EA7F80EA3FE0EA0FF0EA00F8EA8038131812C0A2EAE010EAD060EA8FC00D127F
+9110>I<1204A4120CA2121C123CEAFFE0EA1C00A91310A5120CEA0E20EA03C00C1A7F9910>I<38
+FC1F80EA1C03AD1307120CEA0E1B3803E3F014127F9117>I<38FF07E0383C0380381C0100A2EA
+0E02A26C5AA3EA0388A213D8EA01D0A2EA00E0A3134013127F9116>I<39FF3FCFE0393C0F0380
+381C07011500130B000E1382A21311000713C4A213203803A0E8A2EBC06800011370A2EB803000
+0013201B127F911E>I<387F8FF0380F03801400EA0702EA0384EA01C813D8EA00F01370137813
+F8139CEA010E1202EA060738040380381E07C038FF0FF81512809116>I<38FF07E0383C038038
+1C0100A2EA0E02A26C5AA3EA0388A213D8EA01D0A2EA00E0A31340A25BA212F000F1C7FC12F312
+66123C131A7F9116>I<EA7FFCEA70381260EA407013F013E0EA41C012031380EA0700EA0F0412
+0E121CEA3C0CEA380812701338EAFFF80E127F9112>I<EA6060EAF0F0A2EA60600C047C9C15>
+127 D E /Fk 18 123 df<127012F812FCA212741204A41208A21210A212201240060F7C840E>
+44 D<B512F0380F801E00071307EC03C01401EC00E015F01578A2157C153CA3153EA9153CA215
+7C1578A215F015E01401EC03C0EC0700000F131EB512F81F227EA125>68
+D<39FFFC3FFF390FC003F039078001E0AE90B5FCEB8001AF390FC003F039FFFC3FFF20227EA125
+>72 D<007FB512F839780780780060141800401408A300C0140C00801404A400001400B3A3497E
+0003B5FC1E227EA123>84 D<EA0FE0EA1838EA3C0C130EEA18071200A313FFEA07C7EA1E07123C
+1278127000F01308A3130FEA7817383C2390380FC1E015157E9418>97 D<EA01FEEA0703380C07
+80121C383803000078C7FC127012F0A712700078134012386C1380380C0100EA0706EA01F81215
+7E9416>99 D<14E0130F13011300ABEA01F8EA0704EA0C02EA1C01EA38001278127012F0A71270
+12781238EA1801EA0C0238070CF03801F0FE17237EA21B>I<EA01FCEA0707380C0380381C01C0
+1238007813E0EA700012F0B5FC00F0C7FCA512700078132012386C13406C138038070300EA00FC
+13157F9416>I<120E12FE121E120EABEB1F80EB60C0EB80E0380F0070A2120EAF38FFE7FF1823
+7FA21B>104 D<120E12FE121E120EB3ADEAFFE00B237FA20E>108 D<390E1FC07F3AFE60E18380
+3A1E807201C03A0F003C00E0A2000E1338AF3AFFE3FF8FFE27157F942A>I<380E1F8038FE60C0
+381E80E0380F0070A2120EAF38FFE7FF18157F941B>I<EA01FCEA0707380C0180381800C00038
+13E0481370A200F01378A700701370007813F0003813E0381C01C0380E038038070700EA01FC15
+157F9418>I<EA0E3CEAFE46EA1E8FEA0F0F13061300120EAD120FEAFFF010157F9413>114
+D<EA0F88EA3078EA601812C01308A212E0EAF000EA7F80EA3FE0EA0FF0EA01F8EA003CEA801C13
+0CA212C01308EAE018EAD030EA8FC00E157E9413>I<1202A41206A3120E121E123EEAFFF8EA0E
+00AB1304A6EA07081203EA01F00E1F7F9E13>I<000E137038FE07F0EA1E00000E1370AD14F0A2
+38060170380382783800FC7F18157F941B>I<383FFFC038380380EA300700201300EA600EEA40
+1C133C1338C65A5B12015B38038040EA07005A000E13C04813805AEA7801EA7007B5FC12157F94
+16>122 D E /Fl 18 118 df<B512FC14FF3907800FC0EC03E0EC01F0A2EC00F8A515F01401EC
+03E0EC07C0EC1F0090B5FC90388007C0EC01E0EC00F015F81578157CA5157815F8EC01F01403EC
+0FE0B61280ECFE001E227CA126>66 D<B612F0A238078001EC0070153015101518A215081410A3
+150014301470EBFFF0A2EB807014301410A21502A214001504A3150CA2151C153C15F8B6FCA21F
+227CA125>69 D<3803FFF8A238000780B3A51230127812FCA21400485AEA400E6C5AEA1838EA07
+E015237DA11C>74 D<EAFFFEA2EA0780B31520A41560A2154015C014011403140FB6FCA21B227C
+A122>76 D<1304130EA3131FA2497E1327A2EB43C0A3EB81E0A2380101F01300A248B47E380200
+780006137C0004133CA2000C7FA2003C133FB4EBFFE01B1A7F991F>97 D<EB3F023801C0C63803
+002E000E131E48130E14065A007813021270A200F01300A600701302A21278003813047E14087E
+000313303801C0C038003F00171A7E991D>99 D<B57E380F01E0EB0070808080A280A21580A815
+00A25C140E5C5C5C495AB51280191A7E991F>I<B512F8380F003814181408140C1404A3EB0200
+A3130613FE13061302A3EB0002A314061404A2140C143CB512FC171A7E991C>I<EB3F813801E0
+63380380173806000F487F001C7F5A00787FA2127000F090C7FCA5903801FFE03970001F000078
+7FA212387E120C7E380380173801E06338003F811B1A7E9920>103 D<39FFE3FF80390F007800
+ABEBFFF8EB0078AC39FFE3FF80191A7E991F>I<EAFFF0EA0F00B3A6EAFFF00C1A7F990F>I<EAFF
+F0EA0F8090C7FCAF1410A3143014201460A2EB01E0B5FC141A7E991A>108
+D<B4EB03FE000F14E0A2380B8005A33809C009A33808E011A3EB7021A2EB3841A3EB1C81A3EB0F
+01A31306121C39FF861FFE1F1A7E9925>I<B4EBFF80390F801C001408EA0BC0EA09E0A2EA08F0
+13F81378133CA2131E130FA2EB0788EB03C8A2EB01E8EB00F8A21478A214381418121C38FF8008
+191A7E991F>I<EB7F803801C0E038070038000E7F487F003C130F00387F0078148000701303A2
+00F014C0A70078EB0780A200381400003C5B001C130E6C5B6C5B3801C0E038007F801A1A7E9920
+>I<EAFFFE380F03C0EB00E0801478A55C5CEB03C001FEC7FCEB0380EB01E0130080A615401470
+EC388039FFF01F001A1A7E991E>114 D<EA07E1EA181BEA3007487EA2EAE001A36CC7FC7EEA7F
+80EA3FF86C7E6C7EC67E130FEB0780A2EA8003A300C013005BEAE006EADC0CEA83F0111A7E9917
+>I<39FFF0FF80390F001C001408B26C5B138000035B3801C0603800E080013FC7FC191A7E991F>
+117 D E /Fm 1 98 df<14301478A314FCA2497E14BEA2EB031FA39038060F80A2010E7FEB0C07
+A2496C7EA201387FEB3001A2496C7EEB7FFFA29038C0007CA20001147E49133EA200038090C7FC
+481580487E486CEB3FC0B46CEBFFFCA226257EA42C>97 D E /Fn 20 118
+df<B51280A311037F9016>45 D<B612E015FC3907E0007E0003EC1F80ED0FC0ED07E0150316F0
+150116F8A616F01503A2ED07E016C0ED0F80ED3F0015FC90B55A9038E0003FED0F80ED03E016F0
+ED01F8150016FC167C167EA7167C16FCA2ED01F8ED03F0ED07E0ED0FC00007EC3F80B6EAFE0015
+F827317CB02F>66 D<B612E015FC3907E0007F0003EC0F806F7EED01E06F7E1678167C82A282A2
+EE0F80A217C0A21607A217E0AB17C0A3160F1780A3EE1F00A2163E5E167816F84B5AED07E0ED0F
+800007027FC7FCB612FC15E02B317CB033>68 D<B712E0A23907E0000F00031401ED00F0167016
+30A21610A41608A315801600A41401A2140790B5FCA2EBE0071401A21400A31602A215001604A4
+160CA216081618A216381678ED01F80007EC0FF0B7FCA227317CB02D>I<B512C0A2D807F0C8FC
+6C5AB3AA1640A41680A41501A21503A21507ED0F00153F000714FFB7FCA222317CB029>76
+D<007FB712E0A23A7E000F800700781501007015000060166000401620A200C01630A2481610A6
+C71500B3AC4A7E010FB57EA22C317EB030>84 D<267FFF80EBFFF8A2D803FEC7EA3F80C648EC1E
+001618017E1410013E1430013F14206D6C5B010F5C806D6C48C7FC0103130214F06D6C5A01005B
+ECFC18EC7E10EC3E20EC3F606E5A6E5A816E7E14034A7EEC05F814084A7E157EEC203EEC403F6F
+7EEC800FD901007F496D7E010213034980010C6D7E0108130049800130147E0120143E49143F01
+C0EC1F80487ED80FF0EC3FE0B46C91B5FCA230317FB032>88 D<13FE380303C0380C00E0001013
+7080003C133C003E131C141EA21208C7FCA3EB0FFEEBFC1EEA03E0EA0F80EA1F00123E123C127C
+481404A3143EA21278007C135E6CEB8F08390F0307F03903FC03E01E1F7D9E21>97
+D<1560EC0FE0143FA214031401AEEB1F81EBF0613801C01938078005380F0003120E001E13015A
+A2127C127812F8A91278A27EA2121C001E1303000E13056C130939038011F03900E061FFEB3F81
+20327DB125>100 D<EB3F80EBE0E0380380383807003C000E7F121E001C7F123C127C00781480
+140712F8A2B6FC00F8C8FCA61278127C123C15807E000EEB0100000F1302EA07803801C00C3800
+F030EB1FC0191F7E9E1D>I<15F090387F03083901C1C41C380380E8390700700848EB7800001E
+7FA2003E133EA6001E133CA26C5B6C13706D5A3809C1C0D8087FC7FC0018C8FCA5121C7E380FFF
+F86C13FF6C1480390E000FC00018EB01E048EB00F000701470481438A500701470A26C14E06CEB
+01C00007EB07003801C01C38003FE01E2F7E9F21>103 D<1207EA0F80121FA2120FEA0700C7FC
+ABEA0180121F12FFA2120F1207B3A5EA0FC0EAFFF8A20D307EAF12>105
+D<487E123F12FFA2120F1207AEEC1FFCA2EC07E01580EC060014045C5C146014800181C7FCEB83
+801387EB8FC01393EBA1E0EBC1F013801478147C143C143E80801580EC07C0140315E0390FC007
+F839FFFC0FFFA220327EB123>107 D<EA0180123F12FFA2120F1207B3B3A6EA0FC0EAFFFCA20E
+327EB112>I<260180FEEB1FC03B3F83078060F03BFF8C03C18078903A9001E2003CD80FA013E4
+0007D900F47F01C013F8A2495BB3A2486C486C133F3CFFFC1FFF83FFF0A2341F7E9E38>I<3801
+80FE393F83078039FF8C03C090389001E0EA0FA000076D7E13C0A25BB3A2486C487E3AFFFC1FFF
+80A2211F7E9E25>I<EB1FC0EBF0783801C01C38070007481480001EEB03C0001C1301003C14E0
+A248EB00F0A300F814F8A8007814F0007C1301003C14E0A26CEB03C0A26CEB07803907800F0038
+01C01C3800F078EB1FC01D1F7E9E21>I<380183E0383F8C1838FF907CA2EA0FA03807C0381400
+A35BB3487EEAFFFEA2161F7E9E19>114 D<1340A513C0A31201A212031207120F381FFFE0B5FC
+3803C000B01410A80001132013E000001340EB78C0EB1F00142C7FAB19>116
+D<486C1330003FEB07F000FF131FA2000F130100071300B21401A300031302EBC0040001497E3A
+007030FF80EB1FC0211F7E9E25>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300
+TeXDict begin @a4 /a4 where {pop a4} if
+%%EndSetup
+%%Page: 1 1
+bop 390 315 a Fn(Balk)n(endiagramme)20 b(in)h(L)1020 306 y
+Fm(a)1054 315 y Fn(T)1091 337 y(E)1128 315 y(X-Dokumen)n(ten)494
+429 y Fl(Jo)o(a)o(chim)d(Bleser)232 b(Edmund)18 b(Lang)540
+514 y Fk(TH)e(Darmstadt,)g(Ho)q(c)o(hsc)o(h)o(ulrec)o(henzen)n(trum)324
+600 y Fj(Als)h(Hilfsmittel,)e(um)h(Daten)i(zu)g(v)o(eransc)o(haulic)o(hen,)g
+(w)o(erden)g(heutzutage)h(immer)262 650 y(h)285 652 y(\177)285
+650 y(au\014ger)13 b(Diagramm)o(e,)d(insb)q(esondere)16 b(Balk)o(en-)d(o)q
+(der)h(Kuc)o(hendiagramme,)c(eingesetzt.)262 700 y(Jeder)k(k)o(enn)o(t)f(die)
+f(Balk)o(endiagramme,)d(die)k(z.B.)g(nac)o(h)f(W)m(ahlen)g(Gewinne)h(und)g(V)
+m(erluste)262 749 y(der)h(einzelnen)h(P)o(arteien)g(auf)e(einen)h(Blic)o(k)g
+(v)o(erdeutlic)o(hen.)324 799 y(Das)i(hier)g(v)o(orgestellte)h(St)o(yle-File)
+e Fi(bar.sty)g Fj(hilft)g(dem)g(L)1267 794 y Fh(a)1286 799
+y Fj(T)1309 812 y(E)1332 799 y(X-An)o(w)o(ender,)i(solc)o(he)262
+849 y Fg(Balkendiagr)n(amme)e Fj(in)g(seinen)i(Dokumen)o(ten)d(zu)i(v)o(erw)o
+(enden,)h(ohne)e(auf)g(externe)j(Pro-)262 899 y(gramm)o(e,)7
+b(wie)j(z.B.)g Fh(Ha)l(v)l(ard)j(Graphics)e Fj(o)q(der)f Fh(Ex)o(cel)g
+Fj(im)e(PC-Bereic)o(h,)j(zur)1510 901 y(\177)1509 899 y(uc)o(kgreifen)262
+949 y(zu)j(m)354 951 y(\177)353 949 y(ussen.)623 1020 y Ff(n)p
+Fi(begin)p Ff(f)p Fi(barenv)p Ff(g)682 1070 y Fg(Deklar)n(ationen)682
+1120 y Ff(n)p Fi(bar)p Ff(f)p Fg(H)821 1122 y(\177)821 1120
+y(ohe)p Ff(gf)p Fg(F)951 1122 y(\177)951 1120 y(ul)r(lungsindex)p
+Ff(g)p Fi([)p Fg(Wert)p Fi(])741 1164 y(.)741 1181 y(.)741
+1197 y(.)682 1247 y Ff(n)p Fi(bar)p Ff(f)p Fg(H)821 1249 y(\177)821
+1247 y(ohe)p Ff(gf)p Fg(F)951 1249 y(\177)951 1247 y(ul)r(lungsindex)p
+Ff(g)p Fi([)p Fg(Wert)p Fi(])623 1297 y Ff(n)p Fi(end)p Ff(f)p
+Fi(barenv)p Ff(g)623 1347 y Fg(L)n(e)n(gende)324 1422 y Fj(Innerhalb)k(der)h
+(neu)g(de\014nierten)h(Umgebung)d Fi(barenv)g Fj(k)1269 1424
+y(\177)1269 1422 y(onnen)i(b)q(eliebig)f(p)q(ositiv)o(e)262
+1472 y(und)e(negativ)o(e)g(Balk)o(en)h(gezeic)o(hnet)h(w)o(erden.)f(Ac)o(h)o
+(t)g(v)o(ersc)o(hiedene)h(Sc)o(hra\013uren)g(stehen)262 1522
+y(zur)c(V)m(erf)409 1524 y(\177)408 1522 y(ugung.)349 1575
+y(Sc)o(hra\013ur:)p 572 1533 87 2 v 572 1575 2 42 v 657 1575
+V 572 1577 87 2 v 705 1533 V 705 1575 2 42 v 790 1575 V 705
+1577 87 2 v 710 1575 2 42 v 723 1575 V 735 1575 V 748 1575
+V 760 1575 V 772 1575 V 785 1575 V 838 1533 87 2 v 838 1575
+2 42 v 923 1575 V 838 1577 87 2 v 840 1572 84 2 v 840 1560
+V 840 1547 V 971 1533 87 2 v 971 1575 2 42 v 1056 1575 V 971
+1577 87 2 v 976 1575 2 42 v 988 1575 V 1001 1575 V 1013 1575
+V 1026 1575 V 1038 1575 V 1051 1575 V 973 1572 84 2 v 973 1560
+V 973 1547 V 1104 1533 87 2 v 1104 1575 2 42 v 1188 1575 V
+1104 1577 87 2 v 1109 1575 9 42 v 1126 1575 V 1143 1575 V 1159
+1575 V 1176 1575 V 1105 1567 84 9 v 1105 1550 V 1237 1533 87
+2 v 1237 1575 2 42 v 1321 1575 V 1237 1577 87 2 v 714 w Fe(\010)1280
+1555 y(\010)1238 1559 y(\010)1251 1553 y(\010)1271 1575 y(\010)1280
+1571 y(\010)p 1369 1533 V 1369 1575 2 42 v 1454 1575 V 1369
+1577 87 2 v 1371 1555 a(H)1413 1575 y(H)1371 1571 y(H)1379
+1575 y(H)1404 1555 y(H)1413 1559 y(H)p 1502 1533 V 1502 1575
+2 42 v 1587 1575 V 1502 1577 87 2 v 1504 1575 84 42 v 349 1625
+a Fj(Index:)143 b(1)112 b(2)g(3)g(4)f(5)h(6)g(7)g(8)324 1673
+y(Die)18 b Fg(Deklar)n(ationen)g Fj(de\014nieren)i(Einstellungen)e(wie)h
+(z.B.)f(Balk)o(en)o(breite)h(o)q(der)g(die)262 1723 y(Ein)o(teilung)13
+b(der)h(Ac)o(hsen.)324 1773 y(Der)j(einfac)o(hste)g(F)m(all)e(ist)h(ein)g(zw)
+o(eidimensionales)f(Balk)o(endiagramm.)e(Die)j(Balk)o(en)262
+1823 y(w)o(erden)i(durc)o(h)g(ihre)f(H)644 1825 y(\177)644
+1823 y(ohe)h(und)g(ihren)f(F)948 1825 y(\177)947 1823 y(ullungsindex)g
+(de\014niert.)h(Optional)e(ist)h(no)q(c)o(h)262 1872 y(eine)d(b)q(eliebige)g
+(Zeic)o(henfolge)g(m)790 1874 y(\177)790 1872 y(oglic)o(h,)d(die)j(un)o(ter)g
+(den)h(Balk)o(en)f(gesc)o(hrieb)q(en)h(wird.)p 303 2230 17
+4 v 273 2241 a Fi(0)p 303 2188 V 251 2199 a(10)p 303 2147 V
+251 2158 a(20)p 303 2105 V 251 2116 a(30)p 303 2064 V 251 2075
+a(40)p 303 2022 V 251 2033 a(50)p 318 2228 4 208 v 318 2186
+128 2 v 318 2227 2 42 v 444 2227 V 318 2229 128 2 v 360 2174
+a(10)p 443 2040 V 443 2227 2 187 v 569 2227 V 443 2229 128
+2 v 447 2228 2 187 v 460 2228 V 472 2228 V 485 2228 V 497 2228
+V 510 2228 V 522 2228 V 535 2228 V 547 2228 V 560 2228 V 485
+2029 a(45)471 2261 y Fd(max)p 567 2103 128 2 v 567 2227 2 125
+v 693 2227 V 567 2229 128 2 v 569 2225 125 2 v 569 2212 V 569
+2200 V 569 2187 V 569 2175 V 569 2163 V 569 2150 V 569 2138
+V 569 2125 V 569 2113 V 609 2091 a Fi(30)p 692 2123 128 2 v
+692 2227 2 104 v 818 2227 V 692 2229 128 2 v 697 2228 2 104
+v 709 2228 V 721 2228 V 734 2228 V 746 2228 V 759 2228 V 771
+2228 V 784 2228 V 796 2228 V 809 2228 V 693 2225 125 2 v 693
+2212 V 693 2200 V 693 2187 V 693 2175 V 693 2163 V 693 2150
+V 693 2138 V 734 2112 a(25)p 320 2230 499 4 v 990 1966 a Ff(n)p
+Fi(begin)p Ff(f)p Fi(barenv)p Ff(g)990 2015 y(n)p Fi(setyaxis)p
+Ff(f)p Fi(0)p Ff(gf)p Fi(50)p Ff(gf)o Fi(10)p Ff(g)990 2065
+y(n)p Fi(bar)p Ff(f)p Fi(10)p Ff(gf)p Fi(1)p Ff(g)990 2115
+y(n)p Fi(bar)p Ff(f)p Fi(45)p Ff(gf)p Fi(2)p Ff(g)p Fi([)p
+Ff(n)p Fi(tt)k(max])990 2165 y Ff(n)p Fi(bar)p Ff(f)p Fi(30)p
+Ff(gf)p Fi(3)p Ff(g)990 2215 y(n)p Fi(bar)p Ff(f)p Fi(25)p
+Ff(gf)p Fi(4)p Ff(g)990 2264 y(n)p Fi(end)p Ff(f)p Fi(barenv)p
+Ff(g)324 2350 y Fj(Die)12 b(x-Ac)o(hse)j(k)n(ann)d(auc)o(h)h(anstelle)g(v)o
+(on)g(Zahlen)g(mit)e(den)j(Monatsnamen)e(\(d.h.)g(mit)262 2399
+y(den)h(ersten)h(drei)f(Buc)o(hstab)q(en)h(der)g(Monatsnamen\))e(o)q(der)h(T)
+m(agen)f(\(d.h.)g(mit)f(den)i(ersten)262 2449 y(drei)h(Buc)o(hstab)q(en)h
+(der)g(T)m(age\))e(b)q(esc)o(hriftet)j(w)o(erden.)967 2574
+y(1)p eop
+%%Page: 2 2
+bop 757 307 a Fc(T)l(emp)q(eratur)14 b(/)i(Monat)p 604 531
+17 4 v 574 542 a Fi(0)p 604 489 V 552 500 a(10)p 604 448 V
+552 459 a(20)p 604 406 V 552 417 a(30)p 604 365 V 552 376 a(40)p
+619 529 4 167 v 619 528 128 2 v 619 530 V 672 517 a(0)p 743
+495 V 743 528 2 34 v 870 528 V 743 530 128 2 v 796 484 a(8)p
+868 466 V 868 528 2 63 v 994 528 V 868 530 128 2 v 910 455
+a(15)p 993 425 V 993 528 2 104 v 1119 528 V 993 530 128 2 v
+1035 413 a(25)p 1117 445 V 1117 528 2 84 v 1243 528 V 1117
+530 128 2 v 1159 434 a(20)p 1242 508 V 1242 528 2 21 v 1368
+528 V 1242 530 128 2 v 1295 496 a(5)p 621 531 748 4 v 681 546
+4 17 v 646 585 a Fh(Jan)p 806 546 V 42 w(M)804 583 y(\177)803
+585 y(ar)p 930 546 V 39 w(Mai)p 1055 546 V 50 w(Jul)p 1179
+546 V 54 w(Sep)p 1304 546 V 47 w(No)o(v)p 621 531 748 4 v 324
+670 a Fj(Zwisc)o(hen)j(die)e(Balk)o(en)h(k)n(ann)f(zus)880
+672 y(\177)880 670 y(atzlic)o(her)i(Zwisc)o(henraum)f(eingef)1436
+672 y(\177)1435 670 y(ugt)f(o)q(der)h(auc)o(h)262 720 y(eine)13
+b(T)m(rennlinie)f(gezogen)i(w)o(erden.)f(Ein)g(Diagramm)c(k)n(ann)j(sehr)i
+(leic)o(h)o(t)f(an)g(der)h(x-Ac)o(hse)262 770 y(gespiegelt)e(w)o(erden,)g
+(indem)f(der)i(Anfangs-)e(und)h(der)h(Endw)o(ert)g(der)g(y-Ac)o(hse)g(v)o
+(ertausc)o(h)o(t)262 820 y(w)o(erden.)h(In)g(diesem)f(F)m(all)f(m)o(u\031)h
+(ab)q(er)h(auc)o(h)g(die)g(Sc)o(hritt)o(w)o(eite)h(negiert)f(w)o(erden.)262
+879 y Fc(Gn)o(u-Aktien)o(i)o(nd)o(ex)p 315 1183 17 4 v 242
+1194 a Fi(-20)p 315 1142 V 242 1153 a(-10)p 315 1100 V 285
+1111 a(0)p 315 1059 V 264 1070 a(10)p 315 1017 V 264 1028 a(20)p
+315 976 V 264 987 a(30)p 315 934 V 264 945 a(40)p 330 1223
+4 291 v 332 1099 125 150 v 353 938 a Fh(36.5)p 457 1099 125
+25 v 489 1062 a(6.2)p 580 1223 2 291 v 581 1111 125 13 v 606
+1150 a(-3.2)p 706 1165 125 67 v 737 1203 a(-16)p 332 1225 499
+4 v 393 1240 4 17 v 355 1279 a(Fre)p 517 1240 V 45 w(Sam)p
+642 1240 V 46 w(Son)p 766 1240 V 41 w(Mon)p 332 1100 499 4
+v 979 879 a Fc(Gn)o(u-Aktieni)o(n)o(dex)p 1033 1183 17 4 v
+981 1194 a Fi(40)p 1033 1142 V 981 1153 a(30)p 1033 1100 V
+981 1111 a(20)p 1033 1059 V 981 1070 a(10)p 1033 1017 V 1003
+1028 a(0)p 1033 976 V 959 987 a(-10)p 1033 934 V 959 945 a(-20)p
+1048 1223 4 291 v 1050 1165 125 150 v 1071 1203 a Fh(36.5)p
+1174 1041 125 25 v 1207 1079 a(6.2)p 1298 1223 2 291 v 1299
+1016 125 13 v 1323 992 a(-3.2)p 1423 1016 125 67 v 1455 938
+a(-16)p 1050 1225 499 4 v 1110 1240 4 17 v 1073 1279 a(Fre)p
+1235 1240 V 44 w(Sam)p 1359 1240 V 46 w(Son)p 1484 1240 V 41
+w(Mon)p 1050 1017 499 4 v 324 1348 a Fj(W)m(enn)19 b(der)h(zw)o
+(eidimensionale)e(F)m(all)g(nic)o(h)o(t)i(ausreic)o(h)o(t,)g(k)1266
+1350 y(\177)1266 1348 y(onnen)f(die)h(Balk)o(en)f(auc)o(h)262
+1397 y(dreidimensional)12 b(darstellen)k(w)o(erden.)f(Der)h(Befehl)f
+Ff(n)p Fi(setdepth)e Fj(setzt)k(die)e(Balk)o(en)o(tiefe)262
+1447 y(auf)e(einen)h(W)m(ert)g(gr)581 1449 y(\177)581 1447
+y(o\031er)g(0;)f(dadurc)o(h)i(erhalten)f(die)g(Balk)o(en)g(Plastizit)1395
+1449 y(\177)1395 1447 y(at.)p 315 1835 17 4 v 242 1846 a Fi(-20)p
+315 1752 V 285 1763 a(0)p 315 1669 V 264 1680 a(20)p 315 1586
+V 264 1597 a(40)p 315 1503 V 264 1514 a(60)p 330 1875 4 374
+v 330 1708 128 2 v 330 1749 2 42 v 457 1749 V 330 1751 128
+2 v 392 1652 a(10,2)p 455 1562 V 455 1749 2 187 v 581 1749
+V 455 1751 128 2 v 460 1750 2 187 v 472 1750 V 485 1750 V 497
+1750 V 510 1750 V 522 1750 V 535 1750 V 547 1750 V 560 1750
+V 572 1750 V 517 1507 a(45,6)332 1709 y Fe(\000)p 374 1668
+84 2 v 579 1625 128 2 v 579 1749 2 125 v 706 1749 V 579 1751
+128 2 v 581 1747 125 2 v 581 1734 V 581 1722 V 581 1709 V 581
+1697 V 581 1684 V 581 1672 V 581 1660 V 581 1647 V 581 1635
+V 663 1572 a Fi(30)457 1563 y Fe(\000)p 498 1523 V 622 1584
+2 63 v 82 w(\000)p 704 1749 128 2 v 704 1799 2 50 v 830 1799
+V 704 1801 128 2 v 709 1800 2 50 v 721 1800 V 734 1800 V 746
+1800 V 759 1800 V 771 1800 V 784 1800 V 796 1800 V 809 1800
+V 821 1800 V 706 1797 125 2 v 706 1784 V 706 1772 V 706 1759
+V 713 1835 a Fi(-12,7)706 1750 y Fe(\000)581 1626 y(\000)p
+623 1585 V 747 1709 2 125 v 83 w(\000)830 1750 y(\000)830 1800
+y(\000)p 871 1758 2 50 v 706 1750 a(\000)p 747 1709 125 2 v
+830 1800 a(\000)p 871 1758 2 9 v 332 1876 499 4 v 393 1891
+4 17 v 383 1929 a Fi(1)p 517 1891 V 103 w(2)p 642 1891 V 103
+w(3)p 766 1891 V 102 w(4)p 332 1752 499 4 v 990 1499 a Ff(n)p
+Fi(begin)p Ff(f)p Fi(barenv)p Ff(g)990 1549 y(n)p Fi(setdepth)p
+Ff(f)p Fi(10)p Ff(gn)p Fi(set)o(width)o Ff(f)p Fi(30)p Ff(g)990
+1599 y(n)p Fi(setxaxis)p Ff(f)p Fi(1)p Ff(gf)p Fi(4)p Ff(gf)p
+Fi(1)o Ff(g)990 1648 y(n)p Fi(setyaxis[10])p Ff(f)p Fi(0)p
+Ff(gf)o Fi(60)p Ff(gf)o Fi(20)p Ff(g)990 1698 y(n)p Fi(bar)p
+Ff(f)p Fi(10,2)p Ff(gf)p Fi(1)p Ff(g)990 1748 y(n)p Fi(bar)p
+Ff(f)p Fi(45,6)p Ff(gf)p Fi(2)p Ff(g)990 1798 y(n)p Fi(bar)p
+Ff(f)p Fi(30)p Ff(gf)p Fi(3)p Ff(g)990 1848 y(n)p Fi(bar)p
+Ff(f)p Fi(-12,7)p Ff(gf)p Fi(4)p Ff(g)990 1897 y(n)p Fi(end)p
+Ff(f)p Fi(barenv)p Ff(g)324 1999 y Fj(Die)e(Besc)o(hriftung)i(der)f(Balk)o
+(en)f(k)n(ann)g(an)h(v)o(ersc)o(hiedenen)h(Stellen)f(erfolgen.)f(V)m(orein-)
+262 2049 y(gestellt)i(ist)g Fg(ob)n(erhalb)p Fj(,)f(w)o(enn)h(die)g(Gr)858
+2051 y(\177)858 2049 y(o\031e)g Fb(>)g Fj(0)f(ist,)h(und)g(un)o(terhalb,)g(w)
+o(enn)g(die)g(Gr)1588 2051 y(\177)1588 2049 y(o\031e)f Fb(<)262
+2098 y Fj(0)h(ist.)g(F)395 2100 y(\177)394 2098 y(unf)g(w)o(eitere)i(M)648
+2100 y(\177)648 2098 y(oglic)o(hk)o(eiten)e(sind)g(zugelassen,)i(so)e(z.B.)h
+Fg(innerhalb)f Fj(der)i(Balk)o(en)262 2148 y(o)q(der)e(stets)h
+Fg(unterhalb)p Fj(.)967 2574 y(2)p eop
+%%Page: 3 3
+bop 315 691 17 4 v 242 702 a Fi(-20)p 315 608 V 285 619 a(0)p
+315 525 V 264 536 a(20)p 315 442 V 264 453 a(40)p 315 359 V
+264 370 a(60)p 330 731 4 374 v 330 564 128 2 v 330 605 2 42
+v 457 605 V 330 607 128 2 v 351 595 a(10,2)p 455 418 V 455
+605 2 187 v 581 605 V 455 607 128 2 v 475 522 a(45,6)332 565
+y Fe(\000)p 374 524 84 2 v 579 481 128 2 v 579 605 2 125 v
+706 605 V 579 607 128 2 v 622 556 a Fi(30)457 419 y Fe(\000)p
+498 379 125 2 v 622 440 2 63 v 82 w(\000)p 704 605 128 2 v
+704 655 2 50 v 830 655 V 704 657 128 2 v 713 641 a Fi(-12,7)706
+606 y Fe(\000)581 482 y(\000)p 623 441 125 2 v 747 565 2 125
+v 83 w(\000)830 606 y(\000)830 656 y(\000)p 871 614 2 50 v
+706 606 a(\000)p 747 565 125 2 v 830 656 a(\000)p 871 614 2
+9 v 332 732 499 4 v 393 747 4 17 v 383 785 a Fi(1)p 517 747
+V 103 w(2)p 642 747 V 103 w(3)p 766 747 V 102 w(4)p 332 608
+499 4 v 990 305 a Ff(n)p Fi(begin)p Ff(f)p Fi(barenv)p Ff(g)990
+355 y(n)p Fi(setdepth)p Ff(f)p Fi(10)p Ff(gn)p Fi(set)o(width)o
+Ff(f)p Fi(30)p Ff(g)990 405 y(n)p Fi(setnumberpos)p Ff(f)p
+Fi(ins)o(ide)p Ff(g)990 455 y(n)p Fi(setxaxis)p Ff(f)p Fi(1)p
+Ff(gf)p Fi(4)p Ff(gf)p Fi(1)o Ff(g)990 504 y(n)p Fi(setyaxis[10])p
+Ff(f)p Fi(0)p Ff(gf)o Fi(60)p Ff(gf)o Fi(20)p Ff(g)990 554
+y(n)p Fi(bar)p Ff(f)p Fi(10,2)p Ff(gf)p Fi(1)p Ff(g)990 604
+y(n)p Fi(bar)p Ff(f)p Fi(45,6)p Ff(gf)p Fi(1)p Ff(g)990 654
+y(n)p Fi(bar)p Ff(f)p Fi(30)p Ff(gf)p Fi(1)p Ff(g)990 704 y(n)p
+Fi(bar)p Ff(f)p Fi(-12,7)p Ff(gf)p Fi(1)p Ff(g)990 753 y(n)p
+Fi(end)p Ff(f)p Fi(barenv)p Ff(g)324 855 y Fj(Sind)19 b(die)h(W)m(erte)g(der)
+g(Balk)o(en)g(klein,)f(treten)i(Di\013erenzen)g(zwisc)o(hen)g(den)f(H)1608
+857 y(\177)1608 855 y(ohen)262 905 y(nic)o(h)o(t)13 b(b)q(esonders)k(deutlic)
+o(h)d(herv)o(or.)g(In)g(solc)o(hen)g(F)1079 907 y(\177)1079
+905 y(allen)g(k)n(ann)f(das)i(Diagramm)10 b(v)o(ertik)n(al)262
+955 y(mit)k(dem)h(Befehl)i Ff(n)p Fi(setstretch)d Fj(sk)n(aliert)i(w)o
+(erden.)h(Der)f(umgek)o(ehrte)h(F)m(all,)d(w)o(enn)i(das)262
+1004 y(Diagramm)9 b(zu)15 b(gro\031)f(wird,)f(k)n(ann)g(eb)q(enfalls)h(mit)f
+Ff(n)p Fi(setstretch)e Fj(und)k(einem)e(W)m(ert)h Fb(<)e Fj(1)262
+1054 y(abgefangen)20 b(w)o(erden.)h(Die)g(Sk)n(alierung)e(b)q(etri\013t)j(n)o
+(ur)f(die)g(Balk)o(enh)1386 1056 y(\177)1386 1054 y(ohen,)f(nic)o(h)o(t)h(ab)
+q(er)262 1104 y(Breite)15 b(und)f(Tiefe.)p 324 1633 17 4 v
+228 1641 a Fi(0,00)p 324 1529 V 228 1537 a(0,50)p 324 1425
+V 228 1433 a(1,00)p 324 1321 V 228 1330 a(1,50)p 324 1218 V
+228 1226 a(2,00)p 339 1631 4 416 v 339 1593 128 2 v 339 1630
+2 38 v 465 1630 V 339 1632 128 2 v 411 1529 a(0,2)p 463 1298
+V 463 1630 2 333 v 589 1630 V 463 1632 128 2 v 468 1631 2 333
+v 481 1631 V 493 1631 V 506 1631 V 518 1631 V 531 1631 V 543
+1631 V 555 1631 V 568 1631 V 580 1631 V 536 1234 a(1,6)340
+1594 y Fe(\000)p 382 1553 84 2 v 588 1622 128 2 v 588 1630
+2 9 v 714 1630 V 588 1632 128 2 v 650 1558 a Fi(0,05)465 1299
+y Fe(\000)p 506 1258 125 2 v 630 1581 2 324 v 82 w(\000)p 712
+1605 128 2 v 712 1630 2 25 v 839 1630 V 712 1632 128 2 v 717
+1631 2 25 v 730 1631 V 742 1631 V 755 1631 V 767 1631 V 780
+1631 V 792 1631 V 804 1631 V 817 1631 V 829 1631 V 714 1628
+125 2 v 714 1615 V 774 1541 a Fi(0,13)589 1623 y Fe(\000)p
+631 1582 108 2 v 839 1631 a(\000)839 1606 y(\000)839 1631 y(\000)714
+1606 y(\000)p 756 1566 125 2 v 880 1590 2 25 v 83 w(\000)p
+340 1633 499 4 v 401 1648 4 17 v 392 1685 a Fi(1)p 526 1648
+V 102 w(2)p 650 1648 V 103 w(3)p 775 1648 V 102 w(4)p 340 1633
+499 4 v 990 1139 a Ff(n)p Fi(begin)p Ff(f)p Fi(barenv)p Ff(g)990
+1189 y(n)p Fi(setstretch)p Ff(f)p Fi(50)p Ff(g)990 1239 y(n)p
+Fi(setdepth)p Ff(f)p Fi(10)p Ff(gn)p Fi(set)o(width)o Ff(f)p
+Fi(30)p Ff(g)990 1289 y(n)p Fi(setnumberpos)p Ff(f)p Fi(up)p
+Ff(g)990 1338 y(n)p Fi(setxaxis)p Ff(f)p Fi(1986)p Ff(gf)p
+Fi(1)o(989)p Ff(gf)o Fi(1)p Ff(g)990 1388 y(n)p Fi(setprecision)p
+Ff(f)p Fi(2)p Ff(g)990 1438 y(n)p Fi(setyaxis)p Ff(f)p Fi(0)p
+Ff(gf)p Fi(2)p Ff(gf)p Fi(0)o(.5)p Ff(g)990 1488 y(n)p Fi(bar)p
+Ff(f)p Fi(0,2)p Ff(gf)p Fi(1)p Ff(g)990 1538 y(n)p Fi(bar)p
+Ff(f)p Fi(1,6)p Ff(gf)p Fi(2)p Ff(g)990 1588 y(n)p Fi(bar)p
+Ff(f)p Fi(0,05)p Ff(gf)p Fi(3)p Ff(g)990 1637 y(n)p Fi(bar)p
+Ff(f)p Fi(0,13)p Ff(gf)p Fi(4)p Ff(g)990 1687 y(n)p Fi(end)p
+Ff(f)p Fi(barenv)p Ff(g)324 1733 y Fj(Der)e(im)f(obigen)g(Beispiel)i(v)o(erw)
+o(endete)h(Befehl)f Ff(n)p Fi(setprecision)c Fj(b)q(estimm)o(t)h(die)j(An-)
+262 1783 y(zahl)e(der)h(Nac)o(hk)o(ommastellen)d(f)781 1785
+y(\177)780 1783 y(ur)i(die)h(Besc)o(hriftungen)h(der)f(Ac)o(hsen.)h(Im)d
+(Beispiel)i(wur-)262 1832 y(de,)e(da)g(der)h(Befehl)f Fg(nach)h
+Fj(dem)f Ff(n)p Fi(setxaxis)p Fj(-Befehl)e(erfolgt,)i(f)1237
+1834 y(\177)1236 1832 y(ur)g(die)g(y-Ac)o(hse)h(zw)o(ei)g(Nac)o(h-)262
+1882 y(k)o(omm)o(astellen)g(gew)591 1884 y(\177)591 1882 y(ahlt.)324
+1932 y(Das)17 b(Diagramm)d(k)n(ann)j(mit)f(horizon)o(talen)h(Hin)o
+(tergrundlinien)h(v)o(ersehen)h(w)o(erden.)262 1982 y(Dies)14
+b(erleic)o(h)o(tert)h(das)f(Ablesen)h(der)g(W)m(erte)g(der)g(einzelnen)g
+(Balk)o(en.)e(Es)i(k)n(ann)e(zwisc)o(hen)262 2032 y(gepunkteten)g(o)q(der)g
+(durc)o(hgezogenen)h(Hin)o(tergrundlinien)e(gew)1287 2034 y(\177)1287
+2032 y(ahlt)g(w)o(erden.)h(V)m(oreinge-)262 2082 y(stellt)h(sind)f
+(gepunktete)j(Hin)o(tergrundlinien.)967 2574 y(3)p eop
+%%Page: 4 4
+bop 324 870 17 4 v 294 880 a Fi(0)p 324 765 V 250 776 a(500)p
+324 662 V 228 673 a(1000)p 324 558 V 228 569 a(1500)p 324 454
+V 228 465 a(2000)p 324 350 V 228 361 a(2500)p 339 868 4 519
+v 339 576 128 2 v 339 867 2 291 v 465 867 V 339 869 128 2 v
+344 868 2 291 v 356 868 V 369 868 V 381 868 V 394 868 V 406
+868 V 418 868 V 431 868 V 443 868 V 456 868 V 340 865 125 2
+v 340 852 V 340 839 V 340 827 V 340 814 V 340 802 V 340 790
+V 340 777 V 340 765 V 340 752 V 340 740 V 340 727 V 340 715
+V 340 702 V 340 690 V 340 677 V 340 665 V 340 653 V 340 640
+V 340 628 V 340 615 V 340 603 V 340 590 V 359 905 a(1400)p
+463 381 128 2 v 463 867 2 486 v 589 867 V 463 869 128 2 v 469
+868 9 486 v 486 868 V 502 868 V 519 868 V 535 868 V 552 868
+V 569 868 V 465 864 125 9 v 465 847 V 465 830 V 465 814 V 465
+797 V 465 780 V 465 764 V 465 747 V 465 731 V 465 714 V 465
+697 V 465 681 V 465 664 V 465 648 V 465 631 V 465 614 V 465
+598 V 465 581 V 465 565 V 465 548 V 465 531 V 465 515 V 465
+498 V 465 482 V 465 465 V 465 448 V 465 432 V 465 415 V 465
+399 V 37 w(2340)340 577 y Fe(\000)p 382 536 84 2 v 394 518
+a Fb(:)6 b(:)h(:)f(:)394 414 y(:)g(:)h(:)f(:)387 311 y(:)g(:)h(:)f(:)h(:)f(:)
+g(:)p 588 684 128 2 v 588 867 2 183 v 714 867 V 588 869 128
+2 v 589 868 a Fe(\010)631 847 y(\010)672 826 y(\010)589 851
+y(\010)631 830 y(\010)672 809 y(\010)589 834 y(\010)631 814
+y(\010)672 793 y(\010)589 818 y(\010)631 797 y(\010)672 776
+y(\010)589 801 y(\010)631 780 y(\010)672 760 y(\010)589 785
+y(\010)631 764 y(\010)672 743 y(\010)589 768 y(\010)631 747
+y(\010)672 726 y(\010)589 751 y(\010)631 731 y(\010)672 710
+y(\010)589 735 y(\010)631 714 y(\010)648 706 y(\010)589 718
+y(\010)614 706 y(\010)623 868 y(\010)664 847 y(\010)672 843
+y(\010)656 868 y(\010)672 859 y(\010)619 905 y Fi(890)465 382
+y Fe(\000)p 506 341 125 2 v 630 643 2 304 v 82 w(\000)511 311
+y Fb(:)h(:)f(:)h(:)f(:)h(:)f(:)p 712 460 128 2 v 712 867 2
+407 v 839 867 V 712 869 128 2 v 714 482 a Fe(H)756 502 y(H)797
+523 y(H)714 498 y(H)756 519 y(H)797 540 y(H)714 515 y(H)756
+535 y(H)797 556 y(H)714 531 y(H)756 552 y(H)797 573 y(H)714
+548 y(H)756 569 y(H)797 589 y(H)714 565 y(H)756 585 y(H)797
+606 y(H)714 581 y(H)756 602 y(H)797 623 y(H)714 598 y(H)756
+619 y(H)797 639 y(H)714 614 y(H)756 635 y(H)797 656 y(H)714
+631 y(H)756 652 y(H)797 672 y(H)714 648 y(H)756 668 y(H)797
+689 y(H)714 664 y(H)756 685 y(H)797 706 y(H)714 681 y(H)756
+702 y(H)797 722 y(H)714 697 y(H)756 718 y(H)797 739 y(H)714
+714 y(H)756 735 y(H)797 756 y(H)714 731 y(H)756 751 y(H)797
+772 y(H)714 747 y(H)756 768 y(H)797 789 y(H)714 764 y(H)756
+785 y(H)797 805 y(H)714 780 y(H)756 801 y(H)797 822 y(H)714
+797 y(H)756 818 y(H)797 839 y(H)714 814 y(H)756 834 y(H)797
+855 y(H)714 830 y(H)756 851 y(H)789 868 y(H)714 847 y(H)756
+868 y(H)714 864 y(H)722 868 y(H)714 482 y(H)756 502 y(H)797
+523 y(H)747 482 y(H)789 502 y(H)797 506 y(H)780 482 y(H)797
+490 y(H)733 905 y Fi(1973)589 685 y Fe(\000)p 631 644 84 2
+v 643 622 a Fb(:)g(:)h(:)f(:)643 518 y(:)g(:)h(:)f(:)636 414
+y(:)g(:)h(:)f(:)h(:)f(:)h(:)636 311 y(:)f(:)h(:)f(:)h(:)f(:)h(:)839
+868 y Fe(\000)839 461 y(\000)839 868 y(\000)714 461 y(\000)p
+756 420 125 2 v 880 826 2 407 v 83 w(\000)760 414 y Fb(:)g(:)f(:)h(:)f(:)h(:)
+f(:)760 311 y(:)h(:)f(:)h(:)f(:)h(:)f(:)p 340 870 499 4 v 340
+870 V 340 349 a Fa(\000)p 382 309 V 879 826 4 519 v 839 868
+a(\000)p 381 535 2 229 v 340 556 a Fj(.)353 544 y(.)365 531
+y(.)340 452 y(.)353 440 y(.)365 428 y(.)340 349 y(.)353 336
+y(.)365 324 y(.)990 328 y Ff(n)p Fi(begin)p Ff(f)p Fi(barenv)p
+Ff(g)990 378 y(n)p Fi(setstretch)p Ff(f)p Fi(0.05)p Ff(g)990
+428 y(n)p Fi(setdepth)p Ff(f)p Fi(10)p Ff(gn)p Fi(set)o(width)o
+Ff(f)p Fi(30)p Ff(g)990 477 y(n)p Fi(setnumberpos)p Ff(f)p
+Fi(dow)o(n)p Ff(g)990 527 y(n)p Fi(setyaxis)p Ff(f)p Fi(0)p
+Ff(gf)p Fi(2500)o Ff(gf)p Fi(50)o(0)p Ff(g)990 577 y(n)p Fi(hlineon)990
+627 y Ff(n)p Fi(bar)p Ff(f)p Fi(1400)p Ff(gf)p Fi(4)p Ff(g)990
+677 y(n)p Fi(bar)p Ff(f)p Fi(2340)p Ff(gf)p Fi(5)p Ff(g)990
+726 y(n)p Fi(bar)p Ff(f)p Fi(890)p Ff(gf)p Fi(6)p Ff(g)990
+776 y(n)p Fi(bar)p Ff(f)p Fi(1973)p Ff(gf)p Fi(7)p Ff(g)990
+826 y(n)p Fi(end)p Ff(f)p Fi(barenv)p Ff(g)324 953 y Fj(Zus)388
+955 y(\177)388 953 y(atzlic)o(he)14 b(Erkl)617 955 y(\177)617
+953 y(arungen)g(k)798 955 y(\177)798 953 y(onnen)g(mit)e(dem)g(L)1096
+948 y Fh(a)1115 953 y Fj(T)1138 965 y(E)1162 953 y(X-eigenen)i
+Ff(n)p Fi(put)f Fj(Befehl)h(hinzu-)262 1002 y(gef)315 1004
+y(\177)314 1002 y(ugt)f(w)o(erden.)h(Da)f(das)h(Balk)o(endiagramm)c(in)j
+(eine)h Fi(picture)p Fj(-Umgebung)d(gezeic)o(hnet)262 1052
+y(wird,)16 b(sind)h(grunds)584 1054 y(\177)584 1052 y(atzlic)o(h)g(alle)f
+(Befehle)i(erlaubt,)f(die)g(in)g(einer)g Fi(picture)p Fj(-Umgebung)262
+1102 y(V)m(erw)o(endung)d(\014nden)h(\(z.B.)e Ff(n)p Fi(line,)p
+Ff(n)p Fi(oval)f Fj(usw.\).)967 2574 y(4)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/latex209/contrib/barkom/barkom.tex b/macros/latex209/contrib/barkom/barkom.tex
new file mode 100644
index 0000000000..a3a5cf7d17
--- /dev/null
+++ b/macros/latex209/contrib/barkom/barkom.tex
@@ -0,0 +1,288 @@
+\documentstyle[bar,german]{article}
+
+\newdimen\mydim\mydim\textwidth\advance\mydim -6pt\divide\mydim 2
+\def\back{$\backslash$}
+\def\mycs#1{{\tt\back #1}}
+\def\myhelp#1{\back#1\{barenv\}}
+\def\mybar#1#2{\back bar\{#1\}\{#2\}}
+
+
+\begin{document}
+\centerline{\LARGE Balkendiagramme in \LaTeX-Dokumenten}
+\vspace{3ex}
+\centerline{\large\sc Joachim Bleser\hfil Edmund Lang}
+\vspace{2ex}
+\centerline{\large TH Darmstadt, Hochschulrechenzentrum}
+\vspace{2ex}
+
+Als Hilfsmittel, um Daten zu veranschaulichen, werden heutzutage immer
+h„ufiger Diagramme, insbesondere Balken- oder Kuchendiagramme, eingesetzt.
+Jeder kennt die Balkendiagramme, die z.B.\ nach Wahlen Gewinne und Verluste
+der einzelnen Parteien auf einen Blick verdeutlichen.
+
+Das hier vorgestellte Style-File {\tt bar.sty} hilft dem \LaTeX-Anwender,
+solche {\em Balkendiagramme} in seinen Dokumenten zu verwenden, ohne auf externe
+Programme, wie z.B.\ {\sc Havard Graphics} oder {\sc Excel} im PC-Bereich,
+zurckgreifen zu mssen.
+
+\begin{center}
+\parbox{6cm}{\tt%
+ \back begin\{barenv\}\\ \hspace*{5mm}{\em Deklarationen}\\
+ \hspace*{5mm}\back bar\{{\em H”he}\}\{{\em Fllungsindex}\}[{\em Wert}]\\
+ \hspace*{1cm}\vdots\\
+ \hspace*{5mm}\back bar\{{\em H”he}\}\{{\em Fllungsindex}\}[{\em Wert}]\\
+ \back end\{barenv\}\\
+ {\em Legende}}
+\end{center}
+
+Innerhalb der neu definierten Umgebung {\tt barenv} k”nnen beliebig
+positive und negative Balken gezeichnet werden. Acht verschiedene Schraffuren
+stehen zur Verfgung.
+
+\begin{tabular}{lcccccccc}
+Schraffur: &\legend1{}&\legend2{}&\legend3{}&\legend4{}&%
+\legend5{}&\legend6{}&\legend7{}&\legend8{}\\
+Index: & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8
+\end{tabular}
+
+Die {\em Deklarationen} definieren Einstellungen wie z.B.\ Balkenbreite oder
+die Einteilung der Achsen.
+
+Der einfachste Fall ist ein zweidimensionales Balkendiagramm. Die Balken werden
+durch ihre H”he und ihren Fllungsindex definiert. Optional ist noch eine
+beliebige Zeichenfolge m”glich, die unter den Balken geschrieben wird.
+
+\vspace{\baselineskip}
+\noindent\parbox{\mydim}{
+\begin{barenv}
+ \setwidth{30}
+ \setyaxis{0}{50}{10}
+ \bar{10}{1}
+ \bar{45}{2}[\tt\small max]
+ \bar{30}{3}
+ \bar{25}{4}
+\end{barenv}
+}\hfill
+\parbox{\mydim}{\tt
+\back begin\{barenv\}\\
+% \back setxaxis\{1\}\{4\}\{1\}\\
+ \back setyaxis\{0\}\{50\}\{10\}\\
+ \back bar\{10\}\{1\}\\
+ \back bar\{45\}\{2\}[\back tt max]\\
+ \back bar\{30\}\{3\}\\
+ \back bar\{25\}\{4\}\\
+\back end\{barenv\}\\
+}
+
+Die x-Achse kann auch anstelle von Zahlen mit den Monatsnamen (d.h.\ mit den
+ersten drei Buchstaben der Monatsnamen) oder Tagen (d.h.\ mit den ersten
+drei Buchstaben der Tage) beschriftet werden.
+
+\centerline{\bf Temperatur / Monat}
+\begin{center}
+\begin{barenv}
+ \setwidth{30}
+ \setstyle{\sc}
+ \setxvaluetyp{month}
+ \setxaxis{1}{11}{2}
+ \setstyle{\tt}
+ \setyaxis{0}{40}{10}
+ \bar{0}{1}
+ \bar{8}{1}
+ \bar{15}{1}
+ \bar{25}{1}
+ \bar{20}{1}
+ \bar{5}{1}
+\end{barenv}
+\end{center}
+
+\vspace{\baselineskip}
+Zwischen die Balken kann zus„tzlicher Zwischenraum eingefgt oder
+auch eine Trennlinie gezogen werden.
+Ein Diagramm kann sehr leicht an der x-Achse gespiegelt werden, indem
+der Anfangs- und der Endwert der y-Achse vertauscht werden. In diesem Fall
+muá aber auch die Schrittweite negiert werden.
+
+\vspace{1ex}
+\noindent\parbox{\mydim}{
+{\bf Gnu-Aktienindex}
+
+\vspace{\baselineskip}
+ \begin{barenv}
+ \setwidth{30}
+ \setstyle{\tt}
+ \setyaxis[10]{-20}{40}{10}
+ \setstyle{\sc}
+ \setxvaluetyp{day}
+ \setxaxis{5}{8}{1}
+ \bar{36.5}{8}
+ \bar{6.2}{8}
+ \vline
+ \bar{-3.2}{8}
+ \bar{-16}{8}
+ \end{barenv}
+}
+\parbox{\mydim}{
+{\bf Gnu-Aktienindex}
+
+\vspace{\baselineskip}
+ \begin{barenv}
+ \setwidth{30}
+ \setstyle{\tt}
+ \setyaxis[10]{40}{-20}{-10}
+ \setstyle{\sc}
+ \setxvaluetyp{day}
+ \setxaxis{5}{8}{1}
+ \bar{36.5}{8}
+ \bar{6.2}{8}
+ \vline
+ \bar{-3.2}{8}
+ \bar{-16}{8}
+ \end{barenv}
+}
+
+\vspace{\baselineskip}
+Wenn der zweidimensionale Fall nicht ausreicht, k”nnen die Balken auch
+dreidimensional darstellen werden. Der Befehl \mycs{setdepth} setzt die
+Balkentiefe auf einen Wert gr”áer 0; dadurch erhalten die Balken Plastizit„t.
+
+\noindent\parbox{\mydim}{
+ \begin{barenv}
+ \setdepth{10}\setwidth{30}
+ \setxaxis{1}{4}{1}
+ \setyaxis[10]{-20}{60}{20}
+ \bar{10,2}{1}
+ \bar{45,6}{2}
+ \bar{30}{3}
+ \bar{-12,7}{4}
+ \end{barenv}
+}\hfill
+\parbox{\mydim}%
+{\tt\myhelp{begin}\\
+ \back setdepth\{10\}\back setwidth\{30\}\\
+ \back setxaxis\{1\}\{4\}\{1\}\\
+ \back setyaxis[10]\{0\}\{60\}\{20\}\\
+ \mybar{10,2}{1}\\
+ \mybar{45,6}{2}\\
+ \mybar{30}{3}\\
+ \mybar{-12,7}{4}\\
+ \myhelp{end}
+}
+
+
+\vspace{\baselineskip}
+Die Beschriftung der Balken kann an verschiedenen Stellen erfolgen.
+Voreingestellt ist {\em oberhalb}, wenn die GrӇe $>$ 0 ist, und unterhalb,
+wenn die Gr”áe $<$ 0 ist. Fnf weitere M”glichkeiten sind zugelassen, so z.B.
+{\em innerhalb} der Balken oder stets {\em unterhalb}.
+
+\noindent\parbox{\mydim}{
+ \vspace*{\baselineskip}
+ \begin{barenv}
+ \setdepth{10}\setwidth{30}
+ \setnumberpos{inside}
+ \setxaxis{1}{4}{1}
+ \setyaxis[10]{-20}{60}{20}
+ \bar{10,2}{1}
+ \bar{45,6}{1}
+ \bar{30}{1}
+ \bar{-12,7}{1}
+ \end{barenv}
+}\hfill
+\parbox{\mydim}%
+{\tt\myhelp{begin}\\
+ \back setdepth\{10\}\back setwidth\{30\}\\
+ \back setnumberpos\{inside\}\\
+ \back setxaxis\{1\}\{4\}\{1\}\\
+ \back setyaxis[10]\{0\}\{60\}\{20\}\\
+ \mybar{10,2}{1}\\
+ \mybar{45,6}{1}\\
+ \mybar{30}{1}\\
+ \mybar{-12,7}{1}\\
+ \myhelp{end}
+}
+
+\vspace{\baselineskip}
+Sind die Werte der Balken klein, treten Differenzen zwischen den
+H”hen nicht besonders deutlich hervor. In solchen F„llen kann das Diagramm
+vertikal mit dem Befehl \mycs{setstretch} skaliert werden.
+Der umgekehrte Fall, wenn das Diagramm zu groá wird, kann
+ebenfalls mit \mycs{setstretch} und einem Wert $<1$ abgefangen werden.
+Die Skalierung betrifft nur die Balkenh”hen, nicht aber Breite und Tiefe.
+
+\noindent\parbox{\mydim}{%
+ \begin{barenv}
+ \setstretch{50}
+ \setdepth{10}\setwidth{30}
+ \setnumberpos{up}
+ \setxaxis{1}{4}{1}
+ \setprecision{2}
+ \setyaxis{0}{2}{0.5}
+ \bar{0,2}{1}
+ \bar{1,6}{2}
+ \bar{0,05}{3}
+ \bar{0,13}{4}
+ \end{barenv}
+}\hfill
+\parbox{\mydim}%
+{\tt\myhelp{begin}\\
+ \back setstretch\{50\}\\
+ \back setdepth\{10\}\back setwidth\{30\}\\
+ \back setnumberpos\{up\}\\
+ \back setxaxis\{1986\}\{1989\}\{1\}\\
+ \back setprecision\{2\}\\
+ \back setyaxis\{0\}\{2\}\{0.5\}\\
+ \back bar\{0,2\}\{1\}\\
+ \back bar\{1,6\}\{2\}\\
+ \back bar\{0,05\}\{3\}\\
+ \back bar\{0,13\}\{4\}\\
+ \myhelp{end}
+}
+
+Der im obigen Beispiel verwendete Befehl \mycs{setprecision} bestimmt die
+Anzahl der Nachkommastellen fr die Beschriftungen der Achsen. Im Beispiel
+wurde, da der Befehl {\em nach} dem \mycs{setxaxis}-Befehl erfolgt, fr
+die y-Achse zwei Nachkommastellen gew„hlt.
+
+
+Das Diagramm kann mit horizontalen Hintergrundlinien versehen werden.
+Dies erleichtert das Ablesen der Werte der einzelnen Balken.
+Es kann zwischen gepunkteten oder durchgezogenen Hintergrundlinien
+gew„hlt werden. Voreingestellt sind gepunktete Hintergrundlinien.
+
+\noindent\parbox{\mydim}{
+ \begin{barenv}
+ \setstretch{0.05}
+ \setdepth{10}\setwidth{30}
+ \setnumberpos{down}
+ \setyaxis{0}{2500}{500}
+ \hlineon
+ \bar{1400}{4}
+ \bar{2340}{5}
+ \bar{890}{6}
+ \bar{1973}{7}
+ \end{barenv}
+}\hfill
+\parbox{\mydim}%
+{\tt\myhelp{begin}\\
+ \back setstretch\{0.05\}\\
+ \back setdepth\{10\}\back setwidth\{30\}\\
+ \back setnumberpos\{down\}\\
+ \back setyaxis\{0\}\{2500\}\{500\}\\
+ \back hlineon\\
+ \mybar{1400}{4}\\
+ \mybar{2340}{5}\\
+ \mybar{890}{6}\\
+ \mybar{1973}{7}\\
+ \myhelp{end}
+}
+
+\vspace{\baselineskip}
+Zus„tzliche Erkl„rungen k”nnen mit dem \LaTeX-eigenen
+{\tt\back put} Befehl hinzugefgt werden.
+Da das Balkendiagramm in eine {\tt picture}-Umgebung gezeichnet wird, sind
+grunds„tzlich alle Befehle erlaubt, die in einer {\tt picture}-Umgebung
+Verwendung finden (z.B.\ {\tt\back line,\back oval} usw.).
+
+
+\end{document}
diff --git a/macros/latex209/contrib/baum/baum.sty b/macros/latex209/contrib/baum/baum.sty
new file mode 100644
index 0000000000..efa1085f46
--- /dev/null
+++ b/macros/latex209/contrib/baum/baum.sty
@@ -0,0 +1,116 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% PiCTeX-Makros zum Satz von Verzeichnisb"aumen %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% Syntax (EBNF-Derivat): %%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% <baum> := %
+%% %
+% \baum <name> structure %
+% <struktur> %
+% / at x y %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% <struktur> := %
+%% %
+% \ordner <name> %
+% <struktur> %
+% \endordner %
+%% %
+% | %
+%% %
+% \datei <name> %
+% <struktur> %
+%% %
+% | <empty> %
+%%%%%%%%%%%%%%%%%%
+% <leer> := %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% <name> := <alles was in einer \mbox stehen kann, %
+% also z.B. kein einfacher _ \ % etc. > %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newdimen\OAx \newdimen\OAy \newbox\Obox \newdimen\GY
+\newdimen\Oleng \newdimen\GX \newdimen\Odown
+
+\newif\ifvariing \variingfalse
+\def\VariablerBaum{\variingtrue}
+\def\FesterBaum{\variingfalse}
+
+\def\Osep{0.5\unitlength}
+\def\Oright{20\unitlength}
+\def\Oinsert{15\unitlength}
+
+\def\Ostrut{\vphantom{/}}
+\def\Bfont{\footnotesize\bf\Ostrut}
+\def\Ofont{\footnotesize\bf\Ostrut}
+\def\Dfont{\footnotesize\fontseries{m}\fontshape{n}\selectfont\Ostrut}
+\def\Drule{.4pt}
+\def\Orule{1pt}
+\def\Brule{1pt}
+
+\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}\kern.06em}
+
+\def\baum #1 structure #2/ at #3 #4
+ {\put {\beginpicture
+ \fboxsep=1pt
+ \fboxrule=\Orule
+ \unitlength=1mm
+ \OAx=0mm \OAy=0mm
+ \setdimensionmode
+ \setbox\Obox\hbox{\fboxrule=\Brule\fbox{\Bfont#1}}%
+\ifvariing
+ \Odown=0pt
+\else
+ \Odown=\ht\Obox \advance\Odown by \dp\Obox
+\fi
+ \advance\Odown by \Osep
+ \Oleng=\Odown
+ \put {\box\Obox} [b] at 0mm 0mm
+ #2
+ \endpicture} at #3 #4
+}
+
+\def\ordner #1
+ {\GY=\OAy
+ \begingroup
+ \setbox\Obox\hbox{\fbox{\Ofont#1}}%
+ \global\GX=-\dp\Obox \global\advance\GX by -\ht\Obox
+\ifvariing
+ \Odown=-.5\GX \advance\Odown by \Osep
+ \advance\Oleng by -.5\GX
+\fi
+ \global\advance\OAy by -\Odown
+ \put {\vrule height\Oleng width\linethickness depth0pt}
+ [bl] at {\OAx} {\OAy}
+ \put {\vrule height\linethickness width\Oinsert depth0pt}
+ [lb] at {\OAx} {\OAy}
+ \put {\box\Obox}
+ <\Oinsert,0mm> [l] at {\OAx} {\OAy}
+\ifvariing
+ \global\advance\OAy by .5\GX
+\fi
+ \Oleng=\Odown
+ \advance\OAx by \Oright
+ \advance\Oleng by .5\GX
+}
+
+\catcode`\!=11
+\def\endordner{%
+ \global\!Xleft=\!xleft \global\!Xright=\!xright
+ \global\!Ybot=\!ybot \global\!Ytop=\!ytop
+ \endgroup
+ \!xleft=\!Xleft \!xright=\!Xright
+ \!ybot=\!Ybot \!ytop=\!Ytop
+ \Oleng=-\OAy \advance\Oleng by \GY
+\ifvariing
+ \advance\Oleng by .5\GX
+\fi
+}
+
+\catcode`\!=12
+
+\def\datei #1
+ {\fboxrule=\Drule
+ \ordner{\Dfont#1} \endordner
+ \fboxrule=\Orule}
+
+
diff --git a/macros/latex209/contrib/baum/baumbsp.tex b/macros/latex209/contrib/baum/baumbsp.tex
new file mode 100644
index 0000000000..5a84a42ea1
--- /dev/null
+++ b/macros/latex209/contrib/baum/baumbsp.tex
@@ -0,0 +1,52 @@
+\documentstyle[pictex,baum]{article}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Einstellungen (optional) %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Baumzeilen gleichmaessig oder variierend:
+
+%\VariablerBaum
+%\FesterBaum
+
+% vertikaler Abstand
+% \def\Osep{0.5\unitlength}
+
+% horizontale Einrueckungen
+\def\Oright{20\unitlength}
+\def\Oinsert{15\unitlength}
+
+% Strut im Kasten
+\def\Ostrut{\vphantom{/}}
+
+% Fonts fuer Baum, Ordner, Dateien
+\def\Bfont{\footnotesize\bf\Ostrut}
+\def\Ofont{\footnotesize\bf\Ostrut}
+\def\Dfont{\footnotesize\fontseries{m}\fontshape{n}\selectfont\Ostrut}
+
+% Linienbreiten fuer Baum, Ordner, Dateien
+\def\Brule{1pt}
+\def\Orule{1pt}
+\def\Drule{.4pt}
+
+
+
+\begin{document}
+
+\beginpicture
+\baum {Testbaum} structure
+ \ordner {Ordnername 1}
+ \ordner {Ordner 1a}
+ \datei {Datei 1a(i)}
+ \datei {Datei 1a(ii)}
+ \datei {$\ldots$}
+ \endordner
+ \datei {Datei 1(i)}
+ \datei {Datei 1(ii)}
+ \endordner
+ \datei {Datei (i)}
+ \datei {Datei (ii)}
+/ at 0 0
+\endpicture
+
+\end{document}
diff --git a/macros/latex209/contrib/biblist/README b/macros/latex209/contrib/biblist/README
new file mode 100644
index 0000000000..7b17dc43d0
--- /dev/null
+++ b/macros/latex209/contrib/biblist/README
@@ -0,0 +1,86 @@
+% $Id: biblist.README,v 1.2 1992/01/13 16:43:03 schrod Exp schrod $
+%------------------------------------------------------------
+
+There is an often asked question: `How can I print a listing with all
+entries of a BibTeX database?'. The common answer is: `Use
+\nocite{*}.'
+
+Well, but this will not work for large BibTeX databases unless you
+use BigTeX. This is because for each entry a TeX macro is declared
+and TeX's pool size capacity (where macro names are stored) will be
+exceeded soon.
+
+
+This style option is appropriate to create a typeset listing of a
+(possibly large) BibTeX input file. With such large files --
+especially, if the cite keys are long -- the needed string space is
+often exceeded. Often a BigTeX is available to circumstance this
+problem, but with this style option each TeX will do it.
+
+You have to prepare a LaTeX document which uses the |article|
+style and the biblist style option. You may add almost all other
+style options, as you wish, e.g., twoside, german (or other
+language style options), a4, etc. This style option must be used
+with a ragged bottom; this has the effect, that it cannot be used with
+twocolumn or multicol.
+
+You must issue a \bibliography tag which names all BibTeX
+databases which you want to print. You may issue a
+\bibliographystyle tag to specify how BibTeX will process its
+databases. (In fact, you usually must issue it since the default
+bibliography style is not available on most installations; see
+below.) You may issue \nocite commands if you want to print only
+selected entries from the databases.
+
+
+A ``bug'' you may encounter is that \cite tags within
+BibTeX entries will not be processed. Instead the cite key itself
+will be printed. Note that this is not a bug, this is a feature! You
+have to use \nocite tags for *all* entries that shall be
+included in the listing. If you do not give any \nocite tag at all,
+a listing with all entries is created.
+
+Note that this style option assumes that you use either LaTeX~2.09
+released after December 1991, ILaTeX, or the babel system.
+Particulary, it requires the definition of \refname which is supplied
+by these systems. (Of course, you may supply this definition by
+yourself.)
+
+
+The entries in the resulting listing are formatted as follows:
+
+\tt cite key ................................... \sf (Library info)
+ Author(s).
+Title.
+Publication info.
+Notes.
+ \footnotesize Annotation
+
+I.e., an open format is used. Although this needs more space I think
+the enhanced legibility pays back.
+
+Note that you will not get the `Library info' and the `Annotation' in
+the above format if your bibliography style does not supply this
+information with the assumed markup. The parenthesis around the library
+info are produced by this style option, not by BibTeX.
+
+
+Enjoy. btw, this style is supported since I use it myself :-)
+
+--
+Joachim
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Joachim Schrod Email: schrod@iti.informatik.th-darmstadt.de
+Computer Science Department
+Technical University of Darmstadt, Germany
+
+
+$Log: biblist.README,v $
+Revision 1.2 1992/01/13 16:43:03 schrod
+ Updated documentation, adapted to LaTeX version of Dec 91.
+ New biblist.bst-dist (itibst.doc version 1.3).
+
+Revision 1.1 1991/10/14 13:54:15 schrod
+Initial revision
+
diff --git a/macros/latex209/contrib/biblist/biblist.bst-dist b/macros/latex209/contrib/biblist/biblist.bst-dist
new file mode 100644
index 0000000000..90e7ef0f91
--- /dev/null
+++ b/macros/latex209/contrib/biblist/biblist.bst-dist
@@ -0,0 +1,2110 @@
+Below is a shar with a diff to btxbst.doc and biblist.bst. btxbst.doc
+is renamed to itibst.doc. Enjoy.
+
+--
+Joachim // PLEASE NOTE CHANGE OF EMAIL ADDRESS !!
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Joachim Schrod Email: schrod@iti.informatik.th-darmstadt.de
+Computer Science Department
+Technical University of Darmstadt, Germany
+
+
+================ snip snap ========================================
+#! /bin/sh
+# This is a shell archive. Remove anything before this line, then unpack
+# it by saving it into a file and typing "sh file". To overwrite existing
+# files, type "sh file -c". You can also feed this as standard input via
+# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
+# will see the following message at the end:
+# "End of shell archive."
+# Contents: itibst.diff biblist.bst
+# Wrapped by schrod@itihp11 on Mon Jan 13 15:03:52 1992
+PATH=/bin:/usr/bin:/usr/ucb ; export PATH
+if test -f 'itibst.diff' -a "${1}" != "-c" ; then
+ echo shar: Will not clobber existing file \"'itibst.diff'\"
+else
+echo shar: Extracting \"'itibst.diff'\" \(28321 characters\)
+sed "s/^X//" >'itibst.diff' <<'END_OF_FILE'
+X*** 1.1 1991/10/15 10:34:27
+X--- itibst.doc 1992/01/13 14:00:36
+X***************
+X*** 1,54 ****
+X! % BibTeX `plain' family
+X! % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+X! % Copyright (C) 1985, all rights reserved.
+X! % Copying of this file is authorized only if either
+X! % (1) you make absolutely no changes to your copy, including name, or
+X! % (2) if you do make changes, you name it something other than
+X! % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+X! % This restriction helps ensure that all standard styles are identical.
+X! % The file btxbst.doc has the documentation for this style.
+X! % Please notify Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU) of any bugs in
+X! % these standard styles or in this documentation file.
+X %
+X! % This is file btxbxt.doc; it helps document bibliography styles,
+X % and is also a template file that you can use to make
+X % several different style files, if you have access to a C preprocessor.
+X! % For example, the standard styles were made by doing something like
+X! % cpp -P -DPLAIN btxbst.doc plain.txt
+X! % cpp -P -DUNSRT btxbst.doc unsrt.txt
+X! % cpp -P -DALPHA btxbst.doc alpha.txt
+X! % cpp -P -DABBRV btxbst.doc abbrv.txt
+X! % and then renaming after removing unwanted comments and blank lines.
+X! % If you don't have access,
+X! % you can edit this file by hand to imitate the preprocessor,
+X! % with the following explanation of the C preprocessor constructs used here.
+X! %
+X! % The output of the preprocessor is the same as the input, except that certain
+X! % lines will be excluded (and some blank lines will be added). The sequence
+X! % #if VAR
+X! % lines to be included when VAR is not zero
+X! % #else
+X! % lines to be included when VAR is zero
+X! % #endif
+X! % (with the #-signs appearing in column 1) means that one set or the other of
+X! % the lines are to be included depending on the value of VAR.
+X! % The #else part is optional. Comments can be added after #else and #endif.
+X! % Variables can be set by
+X! % #define VAR value
+X! % and one can also use #ifdef VAR to see if VAR has any value, and #ifndef
+X! % to see if it has none.
+X! % Another #if form used in this file is #if !VAR, which includes the lines
+X! % after the #if only if VAR is zero.
+X! %
+X! % Convention: Use all uppercase identifiers for these preprocessor variables
+X! % so you can spot them easily
+X! %
+X! % The command line to the preprocessor should define one of PLAIN, UNSRT, ALPHA
+X! % or ABBRV (though PLAIN will be used by default if none is given),
+X! % and the following lines will set various boolean variables to control the
+X! % various lines that are chosen from the rest of the file.
+X! % Each boolean variable should be set true (1) or false (0) in each style.
+X! % Here are the current variables, and their meanings:
+X % LAB_ALPH: an alphabetic label is used (if false then a numeric
+X % label is used)
+X % SORTED: the entries should be sorted by label (if nonnumeric)
+X--- 1,71 ----
+X! %% $Id: itibst.doc,v 1.3 1992/01/13 13:59:34 schrod Exp schrod $
+X! %%----------------------------------------------------------------------
+X! %% BibTeX `THD/ITI' family of bibliography styles
+X! %% The file itibst.doc has the documentation for this style.
+X! %% Please notify Joachim Schrod (schrod@iti.informatik.th-darmstadt.de) of
+X! %% any bugs in these styles or in this documentation file.
+X! %%
+X! %% CAVEAT: This is experimental software in an alpha-test version.
+X! %% The documentation is not complete, installation instructions
+X! %% are missing (or perhaps not updated), etc. Please send
+X! %% bug reports (and, of course, repairs) to me, but do not expect
+X! %% that I will react very soon. I will collect the stuff and will
+X! %% incorporate it at a later date.
+X! %%
+X! %
+X! % $Log: itibst.doc,v $
+X! % Revision 1.3 1992/01/13 13:59:34 schrod
+X! % In biblist style titles will not be lowered. The user should see
+X! % what's in the database.
+X! %
+X! % The Id tag is now propagated to the styles. One must see from which
+X! % version they were created.
+X! %
+X! % Replaced function format.annote with output.annote. The former
+X! % concatenated the annote field which yielded an overflow of the
+X! % global-string-size (at max. 1000).
+X! % Well, I learned now that fields which might be very large (ie,
+X! % more than 1000 chars) must not be used with operations like "*", only
+X! % with functions like empty$, write$, etc. Of course, these arbitrary
+X! % limits are not documented...
+X! % (This error was pointed out by Joseph Gil <yogi@cs.ubc.ca>.)
+X! %
+X! % Revision 1.2 1991/10/15 10:35:32 schrod
+X! % added support for GERMAN, ISBN, ANNOTATE, and LIBRARY.
+X! % added REFERENCE.
+X! % added styles ALPH_ABBRV and BIBLIST.
+X! % defined ATIT_LOWER conditionally.
+X %
+X! % checked in for alpha distribution.
+X! %
+X! %
+X! % This is file itibst.doc; it helps document bibliography styles,
+X % and is also a template file that you can use to make
+X % several different style files, if you have access to a C preprocessor.
+X! %
+X! % identifiers:
+X! %
+X! % UNSRT bst unsrt: numbers, unsorted, unabbreviated
+X! % ALPHA bst alpha: short alphabetics, sorted, unabbreviated
+X! % ABBRV bst abbrv: numbers, sorted, abbreviated
+X! % ALPH_ABBRV bst alph-abbrv: short alphabetics, sorted, abbreviated
+X! % PLAIN bst plain: numbers, sorted, unabbreviated
+X! % (all 5 by default with lowered titles)
+X! %
+X! % BIBLIST bst biblist: for listings of bib files,
+X! % cite keys, unsorted, unabbreviated, not lowered
+X! % (defines REFERENCE and sets ATIT_LOWER to 0)
+X! %
+X! % GERMAN not-lowered titles
+X! % german texts (not complete!!!)
+X! % REFERENCE sets ISBN, ANNOTATE, LIBRARY
+X! %
+X! % ISBN adds support for ISBN and ISSN
+X! % ANNOTATE adds support for annotations
+X! % LIBRARY adds support for library info
+X! %
+X! %
+X! % in fact, the following identifiers are used internally:
+X % LAB_ALPH: an alphabetic label is used (if false then a numeric
+X % label is used)
+X % SORTED: the entries should be sorted by label (if nonnumeric)
+X***************
+X*** 57,114 ****
+X % NAME_FULL: the authors, editors, etc., get the full names as
+X % given in the bibliography file (if false, the first
+X % names become initials)
+X- % ATIT_LOWER: titles of non-"books" (e.g., articles) should be
+X- % converted to lower-case, except the first letter or
+X- % first letter after a colon
+X- % (if false then they appear as in the database)
+X % MONTH_FULL: months are spelled out in full (if false, then
+X % they're abbreviated)
+X % JOUR_FULL: macro journal names are spelled out in full
+X % (if false then they are abbreviated, currently
+X % as they appear in ACM publications)
+X! #ifndef UNSRT
+X! # ifndef ALPHA
+X! # ifndef ABBRV
+X! # define PLAIN 1
+X! # endif
+X! # endif
+X! #endif
+X! #ifdef PLAIN
+X! % plain style (sorted numbers)
+X! # define LAB_ALPH 0
+X! # define SORTED 1
+X! # define NAME_FULL 1
+X! # define ATIT_LOWER 1
+X! # define MONTH_FULL 1
+X! # define JOUR_FULL 1
+X #endif
+X #ifdef UNSRT
+X! % unsrt style (unsorted numbers)
+X # define LAB_ALPH 0
+X # define SORTED 0
+X # define NAME_FULL 1
+X! # define ATIT_LOWER 1
+X # define MONTH_FULL 1
+X # define JOUR_FULL 1
+X #endif
+X #ifdef ALPHA
+X! % alpha style (sorted short alphabetics)
+X # define LAB_ALPH 1
+X # define SORTED 1
+X! # define NAME_FULL 1
+X # define ATIT_LOWER 1
+X # define MONTH_FULL 1
+X # define JOUR_FULL 1
+X #endif
+X #ifdef ABBRV
+X! % abbrv style (sorted numbers, with abbreviations)
+X # define LAB_ALPH 0
+X # define SORTED 1
+X # define NAME_FULL 0
+X # define ATIT_LOWER 1
+X # define MONTH_FULL 0
+X # define JOUR_FULL 0
+X #endif
+X %
+X % Entry formatting: Similar to that recommended by Mary-Claire van Leunen
+X % in "A Handbook for Scholars". Book-like titles are italicized
+X--- 74,185 ----
+X % NAME_FULL: the authors, editors, etc., get the full names as
+X % given in the bibliography file (if false, the first
+X % names become initials)
+X % MONTH_FULL: months are spelled out in full (if false, then
+X % they're abbreviated)
+X % JOUR_FULL: macro journal names are spelled out in full
+X % (if false then they are abbreviated, currently
+X % as they appear in ACM publications)
+X! %
+X! % this might be set on request:
+X! % ATIT_LOWER: titles of non-"books" (e.g., articles) should be
+X! % converted to lower-case, except the first letter or
+X! % first letter after a colon
+X! % (if false then they appear as in the database)
+X! %
+X! % PLAIN is default!
+X! %
+X! %
+X! % creation:
+X! %
+X! % /lib/cpp -P [ defines ] itibst.doc |
+X! % perl -n -e 's/^%$//; s/^%[^%].*//; print unless $_ eq "\n";' \
+X! % >style.bst
+X! %
+X! #ifdef GERMAN
+X! %% german texts
+X! # define ATIT_LOWER 0
+X #endif
+X #ifdef UNSRT
+X! %% unsrt style (unsorted numbers)
+X # define LAB_ALPH 0
+X # define SORTED 0
+X # define NAME_FULL 1
+X! # ifndef ATIT_LOWER
+X! # define ATIT_LOWER 1
+X! # endif
+X # define MONTH_FULL 1
+X # define JOUR_FULL 1
+X #endif
+X #ifdef ALPHA
+X! %% alpha style (sorted short alphabetics)
+X # define LAB_ALPH 1
+X # define SORTED 1
+X! # define NAME_FULL 0
+X! #ifndef ATIT_LOWER
+X # define ATIT_LOWER 1
+X+ #endif
+X # define MONTH_FULL 1
+X # define JOUR_FULL 1
+X #endif
+X #ifdef ABBRV
+X! %% abbrv style (sorted numbers, with abbreviations)
+X # define LAB_ALPH 0
+X # define SORTED 1
+X # define NAME_FULL 0
+X+ #ifndef ATIT_LOWER
+X+ # define ATIT_LOWER 1
+X+ #endif
+X+ # define MONTH_FULL 0
+X+ # define JOUR_FULL 0
+X+ #endif
+X+ #ifdef ALPH_ABBRV
+X+ %% alph-abbrv style (sorted short alphabetics, with abbreviations)
+X+ # define LAB_ALPH 1
+X+ # define SORTED 1
+X+ # define NAME_FULL 0
+X+ #ifndef ATIT_LOWER
+X # define ATIT_LOWER 1
+X+ #endif
+X # define MONTH_FULL 0
+X # define JOUR_FULL 0
+X #endif
+X+ #ifdef BIBLIST
+X+ %% biblist style (unsorted, for listings of bib files)
+X+ # define LAB_ALPH 0
+X+ # define SORTED 0
+X+ # define NAME_FULL 1
+X+ #ifndef ATIT_LOWER
+X+ # define ATIT_LOWER 0
+X+ #endif
+X+ # define MONTH_FULL 1
+X+ # define JOUR_FULL 1
+X+ # define REFERENCE
+X+ #endif
+X+ #ifndef SORTED /* use PLAIN */
+X+ %% plain style (sorted numbers)
+X+ # define LAB_ALPH 0
+X+ # define SORTED 1
+X+ # define NAME_FULL 1
+X+ # ifndef ATIT_LOWER
+X+ # define ATIT_LOWER 1
+X+ # endif
+X+ # define MONTH_FULL 1
+X+ # define JOUR_FULL 1
+X+ #endif
+X+ #ifdef REFERENCE
+X+ # define ISBN 1
+X+ # define ANNOTATE 1
+X+ # define LIBRARY 1
+X+ #endif
+X+ #ifndef ISBN
+X+ # define ISBN 0
+X+ #endif
+X+ #ifndef ANNOTATE
+X+ # define ANNOTATE 0
+X+ #endif
+X+ #ifndef LIBRARY
+X+ # define LIBRARY 0
+X+ #endif
+X %
+X % Entry formatting: Similar to that recommended by Mary-Claire van Leunen
+X % in "A Handbook for Scholars". Book-like titles are italicized
+X***************
+X*** 199,206 ****
+X % however, it's the address of the conference; for those two entry
+X % types, include the publisher's or organization's address, if
+X % necessary, in the publisher or organization field.
+X! % annote
+X % Long annotation---for annotated bibliographies (begins sentence).
+X author
+X % Name(s) of author(s), in BibTeX name format.
+X booktitle
+X--- 270,279 ----
+X % however, it's the address of the conference; for those two entry
+X % types, include the publisher's or organization's address, if
+X % necessary, in the publisher or organization field.
+X! #if ANNOTATE
+X! annote
+X % Long annotation---for annotated bibliographies (begins sentence).
+X+ #endif
+X author
+X % Name(s) of author(s), in BibTeX name format.
+X booktitle
+X***************
+X*** 218,228 ****
+X--- 291,311 ----
+X % How something strange has been published (begins sentence).
+X institution
+X % Sponsoring institution of a technical report.
+X+ #if ISBN
+X+ isbn
+X+ % ISBN of book
+X+ issn
+X+ % ISSN of periodical
+X+ #endif
+X journal
+X % Journal name (macros are provided for many).
+X key
+X % Alphabetizing, labeling, and cross-referencing key
+X % (needed when an entry has no author or editor).
+X+ #if LIBRARY
+X+ library
+X+ % Library signature
+X+ #endif
+X month
+X % Month (macros are provided).
+X note
+X***************
+X*** 380,385 ****
+X--- 463,491 ----
+X % output.state := before.all
+X % END
+X %
+X+ #if ANNOTATE
+X+ % The output.annote function writes the annotation for the current
+X+ % entry. It must not use the concatenation operator since an
+X+ % annotation may be rather long and BibTeX has an arbitrary limit
+X+ % (1000) on the length of strings.
+X+ %
+X+ % In fact, this function is defined later, since it needs new.block
+X+ % which is not defined yet.
+X+ %
+X+ % output.annote ==
+X+ % BEGIN
+X+ % if not empty$(annote) then
+X+ % new.block
+X+ % prepare for output of "\annote "
+X+ % newline$
+X+ % write$("\annote ")
+X+ % write$(annote)
+X+ % newline$
+X+ % push "\endannote" on stack % for fin.entry
+X+ % fi
+X+ % END
+X+ %
+X+ #endif
+X % The fin.entry function finishes off an entry by adding a period to the
+X % string remaining on the stack. If the state is still before.all
+X % then nothing was produced for this entry, so the result will look bad,
+X***************
+X*** 503,508 ****
+X--- 609,629 ----
+X if$
+X }
+X
+X+ #if ANNOTATE
+X+ FUNCTION {output.annote}
+X+ {
+X+ annote empty$
+X+ { }
+X+ {
+X+ new.block "\annote " output
+X+ newline$ write$
+X+ annote write$ newline$
+X+ "\endannote"
+X+ }
+X+ if$
+X+ }
+X+ #endif
+X+
+X % These three functions pop one or two (integer) arguments from the stack
+X % and push a single one, either 0 or 1.
+X % The 'skip$ in the `and' and `or' functions are used because
+X***************
+X*** 591,597 ****
+X % emphasize(s) ==
+X % BEGIN
+X % if empty$(s) then return ""
+X! % else return "{\em " * s * "}"
+X %
+X % The format.names function formats the argument (which should be in
+X % BibTeX name format) into "First Von Last, Junior", separated by commas
+X--- 712,718 ----
+X % emphasize(s) ==
+X % BEGIN
+X % if empty$(s) then return ""
+X! % else return "{\it " * s * "}"
+X %
+X % The format.names function formats the argument (which should be in
+X % BibTeX name format) into "First Von Last, Junior", separated by commas
+X***************
+X*** 615,626 ****
+X--- 736,755 ----
+X % t := format.name$(s, nameptr, "{f.~}{vv~}{ll}{, jj}")
+X % if nameptr > 1 then
+X % if namesleft > 1 then nameresult := nameresult * ", " * t
+X+ #ifndef GERMAN
+X % else if numnames > 2
+X % then nameresult := nameresult * ","
+X % fi
+X % if t = "others"
+X+ #else /* GERMAN */
+X+ % else if t = "others"
+X+ #endif /* GERMAN */
+X % then nameresult := nameresult * " et~al."
+X+ #ifndef GERMAN
+X % else nameresult := nameresult * " and " * t
+X+ #else /* GERMAN */
+X+ % else nameresult := nameresult * " und " * t
+X+ #endif /* GERMAN */
+X % fi
+X % fi
+X % else nameresult := t
+X***************
+X*** 672,678 ****
+X FUNCTION {emphasize}
+X { duplicate$ empty$
+X { pop$ "" }
+X! { "{\em " swap$ * "}" * }
+X if$
+X }
+X
+X--- 801,807 ----
+X FUNCTION {emphasize}
+X { duplicate$ empty$
+X { pop$ "" }
+X! { "{\it " swap$ * "}" * }
+X if$
+X }
+X
+X***************
+X*** 692,704 ****
+X--- 821,841 ----
+X nameptr #1 >
+X { namesleft #1 >
+X { ", " * t * }
+X+ #ifndef GERMAN
+X { numnames #2 >
+X { "," * }
+X 'skip$
+X if$
+X t "others" =
+X+ #else /* GERMAN */
+X+ { t "others" =
+X+ #endif /* GERMAN */
+X { " et~al." * }
+X+ #ifndef GERMAN
+X { " and " * t * }
+X+ #else /* GERMAN */
+X+ { " und " * t * }
+X+ #endif /* GERMAN */
+X if$
+X }
+X if$
+X***************
+X*** 730,735 ****
+X--- 867,898 ----
+X if$
+X }
+X
+X+ #if ISBN
+X+ FUNCTION {format.isbn}
+X+ { isbn empty$
+X+ { "" }
+X+ { new.sentence "ISBN~" isbn * }
+X+ if$
+X+ }
+X+
+X+ FUNCTION {format.issn}
+X+ { issn empty$
+X+ { "" }
+X+ { new.sentence "ISSN~" issn * }
+X+ if$
+X+ }
+X+ #endif
+X+
+X+ #if LIBRARY
+X+ FUNCTION {format.library}
+X+ { library empty$
+X+ { "" }
+X+ { "\library{" library * "}" * }
+X+ if$
+X+ }
+X+ #endif
+X+
+X+
+X % The format.title function is used for non-book-like titles.
+X % For most styles we convert to lowercase (except for the very first letter,
+X % and except for the first one after a colon (followed by whitespace)),
+X***************
+X*** 992,999 ****
+X--- 1155,1167 ----
+X { pages empty$
+X { "" }
+X { pages multi.page.check
+X+ #ifndef GERMAN
+X { "pages" pages n.dashify tie.or.space.connect }
+X { "page" pages tie.or.space.connect }
+X+ #else /* GERMAN */
+X+ { "Seiten" pages n.dashify tie.or.space.connect }
+X+ { "Seite" pages tie.or.space.connect }
+X+ #endif /* GERMAN */
+X if$
+X }
+X if$
+X***************
+X*** 1151,1157 ****
+X warning$
+X ""
+X }
+X! { "In {\em " journal * "\/}" * }
+X if$
+X }
+X { "In " key * }
+X--- 1319,1325 ----
+X warning$
+X ""
+X }
+X! { "In {\it " journal * "\/}" * }
+X if$
+X }
+X { "In " key * }
+X***************
+X*** 1172,1178 ****
+X--- 1340,1350 ----
+X 'skip$
+X { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+X { " et~al." * }
+X+ #ifndef GERMAN
+X { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+X+ #else
+X+ { " und " * editor #2 "{vv~}{ll}" format.name$ * }
+X+ #endif
+X if$
+X }
+X if$
+X***************
+X*** 1204,1210 ****
+X crossref * warning$
+X "" *
+X }
+X! { "{\em " * series * "\/}" * }
+X if$
+X }
+X { key * }
+X--- 1376,1382 ----
+X crossref * warning$
+X "" *
+X }
+X! { "{\it " * series * "\/}" * }
+X if$
+X }
+X { key * }
+X***************
+X*** 1231,1237 ****
+X crossref * warning$
+X ""
+X }
+X! { "In {\em " booktitle * "\/}" * }
+X if$
+X }
+X { "In " key * }
+X--- 1403,1409 ----
+X crossref * warning$
+X ""
+X }
+X! { "In {\it " booktitle * "\/}" * }
+X if$
+X }
+X { "In " key * }
+X***************
+X*** 1313,1318 ****
+X--- 1485,1494 ----
+X
+X FUNCTION {article}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X***************
+X*** 1326,1338 ****
+X--- 1502,1524 ----
+X format.pages output
+X }
+X if$
+X+ #if ISBN
+X+ format.issn output
+X+ #endif
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X FUNCTION {book}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X author empty$
+X { format.editors "author and editor" output.check }
+X { format.authors output.nonnull
+X***************
+X*** 1358,1365 ****
+X--- 1544,1557 ----
+X if$
+X format.edition output
+X format.date "year" output.check
+X+ #if ISBN
+X+ format.isbn output
+X+ #endif
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1369,1374 ****
+X--- 1561,1570 ----
+X
+X FUNCTION {booklet}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X format.authors output
+X new.block
+X format.title "title" output.check
+X***************
+X*** 1378,1383 ****
+X--- 1574,1582 ----
+X format.date output
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1391,1396 ****
+X--- 1590,1599 ----
+X
+X FUNCTION {inbook}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X author empty$
+X { format.editors "author and editor" output.check }
+X { format.authors output.nonnull
+X***************
+X*** 1418,1425 ****
+X--- 1621,1634 ----
+X if$
+X format.edition output
+X format.date "year" output.check
+X+ #if ISBN
+X+ format.isbn output
+X+ #endif
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1432,1437 ****
+X--- 1641,1650 ----
+X
+X FUNCTION {incollection}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X***************
+X*** 1451,1458 ****
+X--- 1664,1677 ----
+X format.chapter.pages output
+X }
+X if$
+X+ #if ISBN
+X+ format.isbn output
+X+ #endif
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1465,1470 ****
+X--- 1684,1693 ----
+X
+X FUNCTION {inproceedings}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X***************
+X*** 1492,1499 ****
+X--- 1715,1729 ----
+X format.pages output
+X }
+X if$
+X+ #if ISBN
+X+ format.isbn output
+X+ format.issn output
+X+ #endif
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1507,1512 ****
+X--- 1737,1746 ----
+X
+X FUNCTION {manual}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X author empty$
+X { organization empty$
+X 'skip$
+X***************
+X*** 1536,1541 ****
+X--- 1770,1778 ----
+X format.date output
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1545,1550 ****
+X--- 1782,1791 ----
+X
+X FUNCTION {mastersthesis}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X***************
+X*** 1555,1560 ****
+X--- 1796,1804 ----
+X format.date "year" output.check
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1564,1569 ****
+X--- 1808,1817 ----
+X
+X FUNCTION {misc}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X format.authors output
+X title howpublished new.block.checkb
+X format.title output
+X***************
+X*** 1570,1577 ****
+X--- 1818,1831 ----
+X howpublished new.block.checka
+X howpublished output
+X format.date output
+X+ #if ISBN
+X+ format.issn output
+X+ #endif
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X empty.misc.check
+X }
+X***************
+X*** 1582,1587 ****
+X--- 1836,1845 ----
+X
+X FUNCTION {phdthesis}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X format.authors "author" output.check
+X new.block
+X format.btitle "title" output.check
+X***************
+X*** 1592,1597 ****
+X--- 1850,1858 ----
+X format.date "year" output.check
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1605,1610 ****
+X--- 1866,1875 ----
+X
+X FUNCTION {proceedings}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X editor empty$
+X { organization output }
+X { format.editors output.nonnull }
+X***************
+X*** 1633,1640 ****
+X--- 1898,1912 ----
+X publisher output
+X }
+X if$
+X+ #if ISBN
+X+ format.isbn output
+X+ format.issn output
+X+ #endif
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1644,1649 ****
+X--- 1916,1925 ----
+X
+X FUNCTION {techreport}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X***************
+X*** 1654,1659 ****
+X--- 1930,1938 ----
+X format.date "year" output.check
+X new.block
+X note output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1663,1668 ****
+X--- 1942,1951 ----
+X
+X FUNCTION {unpublished}
+X { output.bibitem
+X+ #if LIBRARY
+X+ format.library output
+X+ new.sentence
+X+ #endif
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X***************
+X*** 1669,1674 ****
+X--- 1952,1960 ----
+X new.block
+X note "note" output.check
+X format.date output
+X+ #if ANNOTATE
+X+ output.annote
+X+ #endif
+X fin.entry
+X }
+X
+X***************
+X*** 1683,1739 ****
+X
+X #if MONTH_FULL
+X
+X- MACRO {jan} {"January"}
+X
+X! MACRO {feb} {"February"}
+X
+X MACRO {mar} {"March"}
+X-
+X MACRO {apr} {"April"}
+X-
+X MACRO {may} {"May"}
+X-
+X MACRO {jun} {"June"}
+X-
+X MACRO {jul} {"July"}
+X-
+X MACRO {aug} {"August"}
+X-
+X MACRO {sep} {"September"}
+X-
+X MACRO {oct} {"October"}
+X
+X MACRO {nov} {"November"}
+X
+X! MACRO {dec} {"December"}
+X
+X- #else !MONTH_FULL
+X
+X! MACRO {jan} {"Jan."}
+X
+X- MACRO {feb} {"Feb."}
+X
+X! MACRO {mar} {"Mar."}
+X
+X MACRO {apr} {"Apr."}
+X-
+X MACRO {may} {"May"}
+X-
+X MACRO {jun} {"June"}
+X-
+X MACRO {jul} {"July"}
+X-
+X MACRO {aug} {"Aug."}
+X-
+X MACRO {sep} {"Sept."}
+X-
+X MACRO {oct} {"Oct."}
+X
+X MACRO {nov} {"Nov."}
+X
+X! MACRO {dec} {"Dec."}
+X
+X! #endif MONTH_FULL
+X
+X % Journals are either written out in full or abbreviated;
+X % the abbreviations are like those found in ACM publications.
+X--- 1969,2045 ----
+X
+X #if MONTH_FULL
+X
+X
+X! #ifndef GERMAN
+X
+X+ MACRO {jan} {"January"}
+X+ MACRO {feb} {"February"}
+X MACRO {mar} {"March"}
+X MACRO {apr} {"April"}
+X MACRO {may} {"May"}
+X MACRO {jun} {"June"}
+X MACRO {jul} {"July"}
+X MACRO {aug} {"August"}
+X MACRO {sep} {"September"}
+X MACRO {oct} {"October"}
+X+ MACRO {nov} {"November"}
+X+ MACRO {dec} {"December"}
+X
+X+ #else /* GERMAN */
+X+
+X+ MACRO {jan} {"Januar"}
+X+ MACRO {feb} {"Februar"}
+X+ MACRO {mar} {"M{\accent 127 a}rz"}
+X+ MACRO {apr} {"April"}
+X+ MACRO {may} {"Mai"}
+X+ MACRO {jun} {"Juni"}
+X+ MACRO {jul} {"Juli"}
+X+ MACRO {aug} {"August"}
+X+ MACRO {sep} {"September"}
+X+ MACRO {oct} {"Oktober"}
+X MACRO {nov} {"November"}
+X+ MACRO {dec} {"Dezember"}
+X
+X! #endif /* GERMAN */
+X
+X
+X! #else /* !MONTH_FULL */
+X
+X
+X! #ifndef GERMAN
+X
+X+ MACRO {jan} {"Jan."}
+X+ MACRO {feb} {"Feb."}
+X+ MACRO {mar} {"Mar."}
+X MACRO {apr} {"Apr."}
+X MACRO {may} {"May"}
+X MACRO {jun} {"June"}
+X MACRO {jul} {"July"}
+X MACRO {aug} {"Aug."}
+X MACRO {sep} {"Sept."}
+X MACRO {oct} {"Oct."}
+X+ MACRO {nov} {"Nov."}
+X+ MACRO {dec} {"Dec."}
+X+
+X+ #else /* GERMAN */
+X
+X+ MACRO {jan} {"Jan."}
+X+ MACRO {feb} {"Feb."}
+X+ MACRO {mar} {"M{\accent 127 a}rz"}
+X+ MACRO {apr} {"April"}
+X+ MACRO {may} {"Mai"}
+X+ MACRO {jun} {"Juni"}
+X+ MACRO {jul} {"Juli"}
+X+ MACRO {aug} {"Aug."}
+X+ MACRO {sep} {"Sept."}
+X+ MACRO {oct} {"Okt."}
+X MACRO {nov} {"Nov."}
+X+ MACRO {dec} {"Dez."}
+X
+X! #endif /* GERMAN */
+X!
+X
+X! #endif /* MONTH_FULL */
+X
+X % Journals are either written out in full or abbreviated;
+X % the abbreviations are like those found in ACM publications.
+X***************
+X*** 1785,1791 ****
+X
+X MACRO {tcs} {"Theoretical Computer Science"}
+X
+X! #else !JOUR_FULL
+X
+X MACRO {acmcs} {"ACM Comput. Surv."}
+X
+X--- 2091,2097 ----
+X
+X MACRO {tcs} {"Theoretical Computer Science"}
+X
+X! #else /* !JOUR_FULL */
+X
+X MACRO {acmcs} {"ACM Comput. Surv."}
+X
+X***************
+X*** 1828,1834 ****
+X
+X MACRO {tcs} {"Theoretical Comput. Sci."}
+X
+X! #endif JOUR_FULL
+X
+X % Now we read in the .BIB entries.
+X
+X--- 2134,2140 ----
+X
+X MACRO {tcs} {"Theoretical Comput. Sci."}
+X
+X! #endif /* JOUR_FULL */
+X
+X % Now we read in the .BIB entries.
+X
+END_OF_FILE
+if test 28321 -ne `wc -c <'itibst.diff'`; then
+ echo shar: \"'itibst.diff'\" unpacked with wrong size!
+fi
+# end of 'itibst.diff'
+fi
+if test -f 'biblist.bst' -a "${1}" != "-c" ; then
+ echo shar: Will not clobber existing file \"'biblist.bst'\"
+else
+echo shar: Extracting \"'biblist.bst'\" \(19478 characters\)
+sed "s/^X//" >'biblist.bst' <<'END_OF_FILE'
+X%% $Id: itibst.doc,v 1.3 1992/01/13 13:59:34 schrod Exp schrod $
+X%%----------------------------------------------------------------------
+X%% BibTeX `THD/ITI' family of bibliography styles
+X%% The file itibst.doc has the documentation for this style.
+X%% Please notify Joachim Schrod (schrod@iti.informatik.th-darmstadt.de) of
+X%% any bugs in these styles or in this documentation file.
+X%%
+X%% CAVEAT: This is experimental software in an alpha-test version.
+X%% The documentation is not complete, installation instructions
+X%% are missing (or perhaps not updated), etc. Please send
+X%% bug reports (and, of course, repairs) to me, but do not expect
+X%% that I will react very soon. I will collect the stuff and will
+X%% incorporate it at a later date.
+X%%
+X%% biblist style (unsorted, for listings of bib files)
+XENTRY
+X { address
+X annote
+X author
+X booktitle
+X chapter
+X edition
+X editor
+X howpublished
+X institution
+X isbn
+X issn
+X journal
+X key
+X library
+X month
+X note
+X number
+X organization
+X pages
+X publisher
+X school
+X series
+X title
+X type
+X volume
+X year
+X }
+X {}
+X { label }
+XINTEGERS { output.state before.all mid.sentence after.sentence after.block }
+XFUNCTION {init.state.consts}
+X{ #0 'before.all :=
+X #1 'mid.sentence :=
+X #2 'after.sentence :=
+X #3 'after.block :=
+X}
+XSTRINGS { s t }
+XFUNCTION {output.nonnull}
+X{ 's :=
+X output.state mid.sentence =
+X { ", " * write$ }
+X { output.state after.block =
+X { add.period$ write$
+X newline$
+X "\newblock " write$
+X }
+X { output.state before.all =
+X 'write$
+X { add.period$ " " * write$ }
+X if$
+X }
+X if$
+X mid.sentence 'output.state :=
+X }
+X if$
+X s
+X}
+XFUNCTION {output}
+X{ duplicate$ empty$
+X 'pop$
+X 'output.nonnull
+X if$
+X}
+XFUNCTION {output.check}
+X{ 't :=
+X duplicate$ empty$
+X { pop$ "empty " t * " in " * cite$ * warning$ }
+X 'output.nonnull
+X if$
+X}
+XFUNCTION {output.bibitem}
+X{ newline$
+X "\bibitem{" write$
+X cite$ write$
+X "}" write$
+X newline$
+X ""
+X before.all 'output.state :=
+X}
+XFUNCTION {fin.entry}
+X{ add.period$
+X write$
+X newline$
+X}
+XFUNCTION {new.block}
+X{ output.state before.all =
+X 'skip$
+X { after.block 'output.state := }
+X if$
+X}
+XFUNCTION {new.sentence}
+X{ output.state after.block =
+X 'skip$
+X { output.state before.all =
+X 'skip$
+X { after.sentence 'output.state := }
+X if$
+X }
+X if$
+X}
+XFUNCTION {output.annote}
+X{
+X annote empty$
+X { }
+X {
+X new.block "\annote " output
+X newline$ write$
+X annote write$ newline$
+X "\endannote"
+X }
+X if$
+X}
+XFUNCTION {not}
+X{ { #0 }
+X { #1 }
+X if$
+X}
+XFUNCTION {and}
+X{ 'skip$
+X { pop$ #0 }
+X if$
+X}
+XFUNCTION {or}
+X{ { pop$ #1 }
+X 'skip$
+X if$
+X}
+XFUNCTION {new.block.checka}
+X{ empty$
+X 'skip$
+X 'new.block
+X if$
+X}
+XFUNCTION {new.block.checkb}
+X{ empty$
+X swap$ empty$
+X and
+X 'skip$
+X 'new.block
+X if$
+X}
+XFUNCTION {new.sentence.checka}
+X{ empty$
+X 'skip$
+X 'new.sentence
+X if$
+X}
+XFUNCTION {new.sentence.checkb}
+X{ empty$
+X swap$ empty$
+X and
+X 'skip$
+X 'new.sentence
+X if$
+X}
+XFUNCTION {field.or.null}
+X{ duplicate$ empty$
+X { pop$ "" }
+X 'skip$
+X if$
+X}
+XFUNCTION {emphasize}
+X{ duplicate$ empty$
+X { pop$ "" }
+X { "{\it " swap$ * "}" * }
+X if$
+X}
+XINTEGERS { nameptr namesleft numnames }
+XFUNCTION {format.names}
+X{ 's :=
+X #1 'nameptr :=
+X s num.names$ 'numnames :=
+X numnames 'namesleft :=
+X { namesleft #0 > }
+X { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+X nameptr #1 >
+X { namesleft #1 >
+X { ", " * t * }
+X { numnames #2 >
+X { "," * }
+X 'skip$
+X if$
+X t "others" =
+X { " et~al." * }
+X { " and " * t * }
+X if$
+X }
+X if$
+X }
+X 't
+X if$
+X nameptr #1 + 'nameptr :=
+X namesleft #1 - 'namesleft :=
+X }
+X while$
+X}
+XFUNCTION {format.authors}
+X{ author empty$
+X { "" }
+X { author format.names }
+X if$
+X}
+XFUNCTION {format.editors}
+X{ editor empty$
+X { "" }
+X { editor format.names
+X editor num.names$ #1 >
+X { ", editors" * }
+X { ", editor" * }
+X if$
+X }
+X if$
+X}
+XFUNCTION {format.isbn}
+X{ isbn empty$
+X { "" }
+X { new.sentence "ISBN~" isbn * }
+X if$
+X}
+XFUNCTION {format.issn}
+X{ issn empty$
+X { "" }
+X { new.sentence "ISSN~" issn * }
+X if$
+X}
+XFUNCTION {format.library}
+X{ library empty$
+X { "" }
+X { "\library{" library * "}" * }
+X if$
+X}
+XFUNCTION {format.title}
+X{ title empty$
+X { "" }
+X 'title
+X if$
+X}
+XFUNCTION {n.dashify}
+X{ 't :=
+X ""
+X { t empty$ not }
+X { t #1 #1 substring$ "-" =
+X { t #1 #2 substring$ "--" = not
+X { "--" *
+X t #2 global.max$ substring$ 't :=
+X }
+X { { t #1 #1 substring$ "-" = }
+X { "-" *
+X t #2 global.max$ substring$ 't :=
+X }
+X while$
+X }
+X if$
+X }
+X { t #1 #1 substring$ *
+X t #2 global.max$ substring$ 't :=
+X }
+X if$
+X }
+X while$
+X}
+XFUNCTION {format.date}
+X{ year empty$
+X { month empty$
+X { "" }
+X { "there's a month but no year in " cite$ * warning$
+X month
+X }
+X if$
+X }
+X { month empty$
+X 'year
+X { month " " * year * }
+X if$
+X }
+X if$
+X}
+XFUNCTION {format.btitle}
+X{ title emphasize
+X}
+XFUNCTION {tie.or.space.connect}
+X{ duplicate$ text.length$ #3 <
+X { "~" }
+X { " " }
+X if$
+X swap$ * *
+X}
+XFUNCTION {either.or.check}
+X{ empty$
+X 'pop$
+X { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+X if$
+X}
+XFUNCTION {format.bvolume}
+X{ volume empty$
+X { "" }
+X { "volume" volume tie.or.space.connect
+X series empty$
+X 'skip$
+X { " of " * series emphasize * }
+X if$
+X "volume and number" number either.or.check
+X }
+X if$
+X}
+XFUNCTION {format.number.series}
+X{ volume empty$
+X { number empty$
+X { series field.or.null }
+X { output.state mid.sentence =
+X { "number" }
+X { "Number" }
+X if$
+X number tie.or.space.connect
+X series empty$
+X { "there's a number but no series in " cite$ * warning$ }
+X { " in " * series * }
+X if$
+X }
+X if$
+X }
+X { "" }
+X if$
+X}
+XFUNCTION {format.edition}
+X{ edition empty$
+X { "" }
+X { output.state mid.sentence =
+X { edition "l" change.case$ " edition" * }
+X { edition "t" change.case$ " edition" * }
+X if$
+X }
+X if$
+X}
+XINTEGERS { multiresult }
+XFUNCTION {multi.page.check}
+X{ 't :=
+X #0 'multiresult :=
+X { multiresult not
+X t empty$ not
+X and
+X }
+X { t #1 #1 substring$
+X duplicate$ "-" =
+X swap$ duplicate$ "," =
+X swap$ "+" =
+X or or
+X { #1 'multiresult := }
+X { t #2 global.max$ substring$ 't := }
+X if$
+X }
+X while$
+X multiresult
+X}
+XFUNCTION {format.pages}
+X{ pages empty$
+X { "" }
+X { pages multi.page.check
+X { "pages" pages n.dashify tie.or.space.connect }
+X { "page" pages tie.or.space.connect }
+X if$
+X }
+X if$
+X}
+XFUNCTION {format.vol.num.pages}
+X{ volume field.or.null
+X number empty$
+X 'skip$
+X { "(" number * ")" * *
+X volume empty$
+X { "there's a number but no volume in " cite$ * warning$ }
+X 'skip$
+X if$
+X }
+X if$
+X pages empty$
+X 'skip$
+X { duplicate$ empty$
+X { pop$ format.pages }
+X { ":" * pages n.dashify * }
+X if$
+X }
+X if$
+X}
+XFUNCTION {format.chapter.pages}
+X{ chapter empty$
+X 'format.pages
+X { type empty$
+X { "chapter" }
+X { type "l" change.case$ }
+X if$
+X chapter tie.or.space.connect
+X pages empty$
+X 'skip$
+X { ", " * format.pages * }
+X if$
+X }
+X if$
+X}
+XFUNCTION {format.in.ed.booktitle}
+X{ booktitle empty$
+X { "" }
+X { editor empty$
+X { "In " booktitle emphasize * }
+X { "In " format.editors * ", " * booktitle emphasize * }
+X if$
+X }
+X if$
+X}
+XFUNCTION {empty.misc.check}
+X{ author empty$ title empty$ howpublished empty$
+X month empty$ year empty$ note empty$
+X and and and and and
+X { "all relevant fields are empty in " cite$ * warning$ }
+X 'skip$
+X if$
+X}
+XFUNCTION {format.thesis.type}
+X{ type empty$
+X 'skip$
+X { pop$
+X type "t" change.case$
+X }
+X if$
+X}
+XFUNCTION {format.tr.number}
+X{ type empty$
+X { "Technical Report" }
+X 'type
+X if$
+X number empty$
+X { "t" change.case$ }
+X { number tie.or.space.connect }
+X if$
+X}
+XFUNCTION {format.article.crossref}
+X{ key empty$
+X { journal empty$
+X { "need key or journal for " cite$ * " to crossref " * crossref *
+X warning$
+X ""
+X }
+X { "In {\it " journal * "\/}" * }
+X if$
+X }
+X { "In " key * }
+X if$
+X " \cite{" * crossref * "}" *
+X}
+XFUNCTION {format.crossref.editor}
+X{ editor #1 "{vv~}{ll}" format.name$
+X editor num.names$ duplicate$
+X #2 >
+X { pop$ " et~al." * }
+X { #2 <
+X 'skip$
+X { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+X { " et~al." * }
+X { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+X if$
+X }
+X if$
+X }
+X if$
+X}
+XFUNCTION {format.book.crossref}
+X{ volume empty$
+X { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+X "In "
+X }
+X { "Volume" volume tie.or.space.connect
+X " of " *
+X }
+X if$
+X editor empty$
+X editor field.or.null author field.or.null =
+X or
+X { key empty$
+X { series empty$
+X { "need editor, key, or series for " cite$ * " to crossref " *
+X crossref * warning$
+X "" *
+X }
+X { "{\it " * series * "\/}" * }
+X if$
+X }
+X { key * }
+X if$
+X }
+X { format.crossref.editor * }
+X if$
+X " \cite{" * crossref * "}" *
+X}
+XFUNCTION {format.incoll.inproc.crossref}
+X{ editor empty$
+X editor field.or.null author field.or.null =
+X or
+X { key empty$
+X { booktitle empty$
+X { "need editor, key, or booktitle for " cite$ * " to crossref " *
+X crossref * warning$
+X ""
+X }
+X { "In {\it " booktitle * "\/}" * }
+X if$
+X }
+X { "In " key * }
+X if$
+X }
+X { "In " format.crossref.editor * }
+X if$
+X " \cite{" * crossref * "}" *
+X}
+XFUNCTION {article}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X new.block
+X crossref missing$
+X { journal emphasize "journal" output.check
+X format.vol.num.pages output
+X format.date "year" output.check
+X }
+X { format.article.crossref output.nonnull
+X format.pages output
+X }
+X if$
+X format.issn output
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {book}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X author empty$
+X { format.editors "author and editor" output.check }
+X { format.authors output.nonnull
+X crossref missing$
+X { "author and editor" editor either.or.check }
+X 'skip$
+X if$
+X }
+X if$
+X new.block
+X format.btitle "title" output.check
+X crossref missing$
+X { format.bvolume output
+X new.block
+X format.number.series output
+X new.sentence
+X publisher "publisher" output.check
+X address output
+X }
+X { new.block
+X format.book.crossref output.nonnull
+X }
+X if$
+X format.edition output
+X format.date "year" output.check
+X format.isbn output
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {booklet}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X format.authors output
+X new.block
+X format.title "title" output.check
+X howpublished address new.block.checkb
+X howpublished output
+X address output
+X format.date output
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {inbook}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X author empty$
+X { format.editors "author and editor" output.check }
+X { format.authors output.nonnull
+X crossref missing$
+X { "author and editor" editor either.or.check }
+X 'skip$
+X if$
+X }
+X if$
+X new.block
+X format.btitle "title" output.check
+X crossref missing$
+X { format.bvolume output
+X format.chapter.pages "chapter and pages" output.check
+X new.block
+X format.number.series output
+X new.sentence
+X publisher "publisher" output.check
+X address output
+X }
+X { format.chapter.pages "chapter and pages" output.check
+X new.block
+X format.book.crossref output.nonnull
+X }
+X if$
+X format.edition output
+X format.date "year" output.check
+X format.isbn output
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {incollection}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X new.block
+X crossref missing$
+X { format.in.ed.booktitle "booktitle" output.check
+X format.bvolume output
+X format.number.series output
+X format.chapter.pages output
+X new.sentence
+X publisher "publisher" output.check
+X address output
+X format.edition output
+X format.date "year" output.check
+X }
+X { format.incoll.inproc.crossref output.nonnull
+X format.chapter.pages output
+X }
+X if$
+X format.isbn output
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {inproceedings}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X new.block
+X crossref missing$
+X { format.in.ed.booktitle "booktitle" output.check
+X format.bvolume output
+X format.number.series output
+X format.pages output
+X address empty$
+X { organization publisher new.sentence.checkb
+X organization output
+X publisher output
+X format.date "year" output.check
+X }
+X { address output.nonnull
+X format.date "year" output.check
+X new.sentence
+X organization output
+X publisher output
+X }
+X if$
+X }
+X { format.incoll.inproc.crossref output.nonnull
+X format.pages output
+X }
+X if$
+X format.isbn output
+X format.issn output
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {conference} { inproceedings }
+XFUNCTION {manual}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X author empty$
+X { organization empty$
+X 'skip$
+X { organization output.nonnull
+X address output
+X }
+X if$
+X }
+X { format.authors output.nonnull }
+X if$
+X new.block
+X format.btitle "title" output.check
+X author empty$
+X { organization empty$
+X { address new.block.checka
+X address output
+X }
+X 'skip$
+X if$
+X }
+X { organization address new.block.checkb
+X organization output
+X address output
+X }
+X if$
+X format.edition output
+X format.date output
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {mastersthesis}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X new.block
+X "Master's thesis" format.thesis.type output.nonnull
+X school "school" output.check
+X address output
+X format.date "year" output.check
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {misc}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X format.authors output
+X title howpublished new.block.checkb
+X format.title output
+X howpublished new.block.checka
+X howpublished output
+X format.date output
+X format.issn output
+X new.block
+X note output
+X output.annote
+X fin.entry
+X empty.misc.check
+X}
+XFUNCTION {phdthesis}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X format.authors "author" output.check
+X new.block
+X format.btitle "title" output.check
+X new.block
+X "PhD thesis" format.thesis.type output.nonnull
+X school "school" output.check
+X address output
+X format.date "year" output.check
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {proceedings}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X editor empty$
+X { organization output }
+X { format.editors output.nonnull }
+X if$
+X new.block
+X format.btitle "title" output.check
+X format.bvolume output
+X format.number.series output
+X address empty$
+X { editor empty$
+X { publisher new.sentence.checka }
+X { organization publisher new.sentence.checkb
+X organization output
+X }
+X if$
+X publisher output
+X format.date "year" output.check
+X }
+X { address output.nonnull
+X format.date "year" output.check
+X new.sentence
+X editor empty$
+X 'skip$
+X { organization output }
+X if$
+X publisher output
+X }
+X if$
+X format.isbn output
+X format.issn output
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {techreport}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X new.block
+X format.tr.number output.nonnull
+X institution "institution" output.check
+X address output
+X format.date "year" output.check
+X new.block
+X note output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {unpublished}
+X{ output.bibitem
+X format.library output
+X new.sentence
+X format.authors "author" output.check
+X new.block
+X format.title "title" output.check
+X new.block
+X note "note" output.check
+X format.date output
+X output.annote
+X fin.entry
+X}
+XFUNCTION {default.type} { misc }
+XMACRO {jan} {"January"}
+XMACRO {feb} {"February"}
+XMACRO {mar} {"March"}
+XMACRO {apr} {"April"}
+XMACRO {may} {"May"}
+XMACRO {jun} {"June"}
+XMACRO {jul} {"July"}
+XMACRO {aug} {"August"}
+XMACRO {sep} {"September"}
+XMACRO {oct} {"October"}
+XMACRO {nov} {"November"}
+XMACRO {dec} {"December"}
+XMACRO {acmcs} {"ACM Computing Surveys"}
+XMACRO {acta} {"Acta Informatica"}
+XMACRO {cacm} {"Communications of the ACM"}
+XMACRO {ibmjrd} {"IBM Journal of Research and Development"}
+XMACRO {ibmsj} {"IBM Systems Journal"}
+XMACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+XMACRO {ieeetc} {"IEEE Transactions on Computers"}
+XMACRO {ieeetcad}
+X {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+XMACRO {ipl} {"Information Processing Letters"}
+XMACRO {jacm} {"Journal of the ACM"}
+XMACRO {jcss} {"Journal of Computer and System Sciences"}
+XMACRO {scp} {"Science of Computer Programming"}
+XMACRO {sicomp} {"SIAM Journal on Computing"}
+XMACRO {tocs} {"ACM Transactions on Computer Systems"}
+XMACRO {tods} {"ACM Transactions on Database Systems"}
+XMACRO {tog} {"ACM Transactions on Graphics"}
+XMACRO {toms} {"ACM Transactions on Mathematical Software"}
+XMACRO {toois} {"ACM Transactions on Office Information Systems"}
+XMACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+XMACRO {tcs} {"Theoretical Computer Science"}
+XREAD
+XSTRINGS { longest.label }
+XINTEGERS { number.label longest.label.width }
+XFUNCTION {initialize.longest.label}
+X{ "" 'longest.label :=
+X #1 'number.label :=
+X #0 'longest.label.width :=
+X}
+XFUNCTION {longest.label.pass}
+X{ number.label int.to.str$ 'label :=
+X number.label #1 + 'number.label :=
+X label width$ longest.label.width >
+X { label 'longest.label :=
+X label width$ 'longest.label.width :=
+X }
+X 'skip$
+X if$
+X}
+XEXECUTE {initialize.longest.label}
+XITERATE {longest.label.pass}
+XFUNCTION {begin.bib}
+X{ preamble$ empty$
+X 'skip$
+X { preamble$ write$ newline$ }
+X if$
+X "\begin{thebibliography}{" longest.label * "}" * write$ newline$
+X}
+XEXECUTE {begin.bib}
+XEXECUTE {init.state.consts}
+XITERATE {call.type$}
+XFUNCTION {end.bib}
+X{ newline$
+X "\end{thebibliography}" write$ newline$
+X}
+XEXECUTE {end.bib}
+END_OF_FILE
+if test 19478 -ne `wc -c <'biblist.bst'`; then
+ echo shar: \"'biblist.bst'\" unpacked with wrong size!
+fi
+# end of 'biblist.bst'
+fi
+echo shar: End of shell archive.
+exit 0
diff --git a/macros/latex209/contrib/biblist/biblist.gde b/macros/latex209/contrib/biblist/biblist.gde
new file mode 100644
index 0000000000..844fa2d186
--- /dev/null
+++ b/macros/latex209/contrib/biblist/biblist.gde
@@ -0,0 +1,45 @@
+% $Id: biblist.gde,v 1.1 1991/10/14 14:09:50 schrod Exp schrod $
+%----------------------------------------------------------------------
+
+%
+% $Log: biblist.gde,v $
+% Revision 1.1 1991/10/14 14:09:50 schrod
+% Initial revision
+%
+
+
+
+\subsubsection{The {\tt biblist\/} Style Option}
+\label{sty:biblist}
+
+The |biblist| option is appropriate to create a typeset listing of a
+(possibly large) \BibTeX{} input file. With such large files --
+especially, if the cite keys are long -- the needed string space is
+often exceeded. Often a Big\TeX{} is available to circumstance this
+problem, but with this style option each \TeX{} will do it.
+
+You have to prepare a \LaTeX{} document which uses the |article|
+style and the |biblist| style option. You may add almost all other
+style options, as you wish, e.g., |twoside|, |german| (or other
+language style options), |a4|, etc. This style option must be used
+with a ragged bottom; this has the effect, that it cannot be used with
+|twocolumn| or |multicol|.
+
+You must issue a |\bibliography| tag which names all \BibTeX{}
+databases which you want to print. You may issue a
+|\bibliographystyle| tag to specify how \BibTeX{} will process its
+databases. (There is a default bibliography style named |biblist|,
+see~\ref{bst:biblist}.) You may issue |\nocite| commands if you want
+to print only selected entries from the databases.
+
+A ``bug'' you may encounter is that |\cite| tags within \BibTeX{}
+entries will not be processed. Instead the cite key itself will be
+printed. Note that this is not a bug, this is a feature! You have to
+use |\nocite| tags for {\it all\/} entries that shall be included in
+the listing. If you do not give any |\nocite| tag at all, a listing
+with all entries is created.
+
+
+
+
+\endinput
diff --git a/macros/latex209/contrib/biblist/biblist.pdf b/macros/latex209/contrib/biblist/biblist.pdf
new file mode 100644
index 0000000000..2e4a618ee5
--- /dev/null
+++ b/macros/latex209/contrib/biblist/biblist.pdf
Binary files differ
diff --git a/macros/latex209/contrib/biblist/biblist.sty b/macros/latex209/contrib/biblist/biblist.sty
new file mode 100644
index 0000000000..2effaed421
--- /dev/null
+++ b/macros/latex209/contrib/biblist/biblist.sty
@@ -0,0 +1,677 @@
+% $Id: biblist.doc,v 1.4 1992/01/13 16:35:56 schrod Exp schrod $
+%----------------------------------------------------------------------
+% Copyright (c) 1991 by J.Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% Distributed under the terms of the GNU General Public License.
+
+%
+% LaTeX style option biblist for article style
+%
+% [LaTeX in MAKEPROG]
+
+
+%
+% $Log: biblist.doc,v $
+% Revision 1.4 1992/01/13 16:35:56 schrod
+% Added examples, repaired headline.
+% Called \reset@font where appropriate.
+% October 91 version of LaTeX was delayed until December 91. Readers
+% might be disturbed if there is the notion of a nonexistant version.
+%
+% Revision 1.3 1991/10/14 14:10:21 schrod
+% mentioned that this option is supported.
+% moved local guide section to separate file.
+%
+% Revision 1.2 1991/10/10 16:13:31 schrod
+% changed email address.
+% mentioned LaTeX 2.09 <Oct 91> (just announced).
+%
+% Revision 1.1 1991/04/13 15:03:08 schrod
+% Initial revision
+%
+
+
+
+
+%%%%
+%%%%
+%%%% These TeX macros were documented with the documentation system
+%%%% MAKEPROG and automatically converted to the current form.
+%%%% If you have MAKEPROG available you may transform it back to
+%%%% the original input: Remove every occurence of three percents
+%%%% and one optional blank from the beginning of a line and remove
+%%%% every line which starts with four percents. The following lex
+%%%% program will do this:
+%%%%
+%%%% %%
+%%%%
+%%%% ^%%%\ ? ;
+%%%% ^%%%%.*\n ;
+%%%%
+%%%% MAKEPROG may be obtained via ftp from ftp.th-darmstadt.de
+%%%% (directory pub/tex/src-webware) and from the Bitnet-Listserver
+%%%% LISTSERV@DHDURZ1 (filelist WEBWARE).
+%%%% If you only want to print out the documentation you may fetch
+%%%% the archive print-makeprog.tar.Z from ftp.th-darmstadt.de (directory
+%%%% pub/tex/latex). It contains *all* used styles -- but beware, they
+%%%% may not be documented...
+%%%%
+%%%%
+%%% \documentstyle[progltx,a4-9,rcs,names,biblist]{article}
+
+
+%%% % We need biblist for the examples and do therefore include it. But it
+%%% % sets the headline (see below ;-). So we just reset it again to the
+%%% % value it had before. Well, it's a kind of a kludge, but it works...
+%%% \pagestyle{plain}
+
+%%% % The examples will consist of framed pseudo-output. We'll need a
+%%% % variable for the width of these examples.
+%%% \newdimen\examplewidth
+
+
+%%% \nofiles % don't need an aux file
+
+
+%%% \begin{document}
+
+
+%%% \title{The {\tt biblist\/} Style Option}
+%%% \author{% % LaTeX does not discard unnecessary glue...
+%%% Joachim Schrod%
+%%% \thanks{%
+%%% TU~Darmstadt, Alexanderstr.~10, D-6100 Darmstadt, Germany.\newline
+%%% Email: {\tt schrod@iti.informatik.th-darmstadt.de}.%
+%%% }%
+%%% }
+%%% \RCSdate $Date: 1992/01/13 16:35:56 $
+
+%%% \maketitle
+
+
+
+%%% \chap What's this style option for?.
+
+%%% This style option is appropriate to create a typeset listing of a
+%%% (possibly large) \BibTeX{} input file. With such large files --
+%%% especially, if the cite keys are long -- the needed string space is
+%%% often exceeded. Often a Big\TeX{} is available to circumstance this
+%%% problem, but with this style option each \TeX{} will do it.
+
+%%% You have to prepare a \LaTeX{} document which uses the |article|
+%%% style and the |biblist| style option. You may add almost all other
+%%% style options, as you wish, e.g., |twoside|, |german| (or other
+%%% language style options), |a4|, etc. This style option must be used
+%%% with a ragged bottom; this has the effect, that it cannot be used with
+%%% |twocolumn| or |multicol|.
+
+%%% You must issue a |\bibliography| tag which names all \BibTeX{}
+%%% databases which you want to print. You may issue a
+%%% |\bibliographystyle| tag to specify how \BibTeX{} will process its
+%%% databases. (In fact, you usually must issue it since the default
+%%% bibliography style is not available on most installations; see
+%%% below.) You may issue |\nocite| commands if you want to print only
+%%% selected entries from the databases.
+
+
+%%% \sect If you have not issued the |\bibliographystyle| tag, the
+%%% |biblist| bibliography style will be used. This is a non-abbreviating
+%%% style which does not do any sorting and no case conversion to titles.
+%%% The field |isbn| is recognized for books (and parts of), and the
+%%% field |issn| is recognized for articles and such. In addition, it
+%%% provides the additional fields |library| and |annote| for all entry
+%%% types. The usage of these fields depends on the definition of
+%%% appropriate \TeX{} macros (which are supplied by this style option).
+
+%%% On interest I can provide a diff to |btxbst.doc|.
+
+
+%%% \sect A ``bug'' you may encounter is that |\cite| tags within
+%%% \BibTeX{} entries will not be processed. Instead the cite key itself
+%%% will be printed. Note that this is not a bug, this is a feature! You
+%%% have to use |\nocite| tags for {\it all\/} entries that shall be
+%%% included in the listing. If you do not give any |\nocite| tag at all,
+%%% a listing with all entries is created.
+
+%%% Note that this style option assumes that you use either a version of
+%%% \LaTeX{}~2.09 after December~1991, I\LaTeX{}, or the {\sf babel}
+%%% system. Particulary, it requires the definition of |\refname| (i.e.,
+%%% the title of the ``references section'') which is supplied by these
+%%% systems. (Of course, you may supply this definition by yourself.)
+
+
+%%% \sect The entries in the resulting listing are formatted as follows:
+%%% %
+%%% \begin{description}
+
+%%% \item[\tt cite key] \leavevmode \null \dotfill \quad {\sf (Library info)}\break
+%%% Author(s).\\
+%%% Title.\\
+%%% Publication info.\\
+%%% Notes.\\
+%%% \null \qquad {\footnotesize Annotation}
+
+%%% \end{description}
+%%% %
+%%% I.e., an open format is used. Although this needs more space I think
+%%% the enhanced legibility pays back.
+
+%%% Note that you will not get the `Library info' and the `Annotation' in
+%%% the above format if your bibliography style does not supply this
+%%% information with the assumed markup. (See above for the |biblist|
+%%% bibliography style.) The parenthesis around the library info are
+%%% produced by this style option, not by \BibTeX{}.
+
+
+%%% \sect {\it Example\/}:\quad Suppose, there is a file |typography.bib|
+%%% with references on typography.
+%%% %
+%%% \begin{quote}
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% \begin{verbatim}
+%%% % typography.bib 13 Jan 92
+%%% %------------------------------------------------------------
+
+%%% %
+%%% % References on Typographie, Typesetting, and Book Design
+%%% %
+
+%%% % !!!! This is a kludge for biblist.doc !!!!
+%%% @preamble{"
+%%% \font\tenlogo=logo10
+%%% \let\logo=\tenlogo
+%%% \def\MF{{\logo META}\-{\logo FONT}}
+%%% "}
+
+%%% @book{typo:tschichold:selected,
+%%% author = {Jan Tschichold},
+%%% title = {Ausgew\"ahlte Aufs\"atze \"uber Fragen der Gestalt des
+%%% Buches und der Typographie},
+%%% publisher = {Birkh\"auser},
+%%% address = {Basel},
+%%% year = 1975,
+%%% isbn = {3-7643-1946-1},
+%%% note = {A second, unchanged, edition appeared in~1987.},
+%%% library = {},
+%%% annote = {A collection of his ``classic'' papers. The best book on
+%%% typographic principles read so far. A definitive `{\it
+%%% must\/}' for everyone interested in typography, book design,
+%%% or typesetting.}
+%%% }
+
+%%% @article{typo:blostein:music,
+%%% author = {Dorothea Blostein},
+%%% title = {Justification of Printed Music},
+%%% journal = cacm,
+%%% volume = 34,
+%%% number = 3,
+%%% month = mar,
+%%% year = 1991,
+%%% pages = {88-99},
+%%% annote = {Presents problems and solutions of the task to create a
+%%% correct spacing while setting notes. The proposed method also
+%%% takes the temporal relationship of notes into account.
+%%% Handles two-dimensional layout, e.g., staffs and texts.}
+%%% }
+
+%%% @book{typo:sta:zapf,
+%%% title = {Herrman Zapf and his Design Philosophy},
+%%% publisher = {Society of Typographic Arts},
+%%% address = {Chicago},
+%%% year = 1987,
+%%% isbn = {0-941447-00-6},
+%%% note = {},
+%%% library = {},
+%%% annote = {A valuable book. A chapter on his work around \MF{} is
+%%% included. Was among the most beautiful books of the year.}
+%%% }
+%%% \end{verbatim}
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% \end{quote}
+%%% %
+%%% Furthermore assume that the bibliography style |biblist| is
+%%% available. Then the \LaTeX{} file
+%%% %
+%%% \begin{verbatim}
+%%% \documentstyle[biblist]{article}
+
+%%% \begin{document}
+
+%%% \bibliography{typography}
+
+%%% \end{document}
+%%% \end{verbatim}
+%%% %
+%%% may be used to create a listing with all entries. You have to run
+%%% \LaTeX{}, \BibTeX{}, and \LaTeX{}. (Careful readers will note that
+%%% there will be a \BibTeX{} warning about a missing author or editor in
+%%% the Zapf entry.) You do {\it not\/} need to run \LaTeX{} twice after
+%%% the \BibTeX{} run. The result looks like this:
+%%% %
+%%% \begin{quote}
+%%% \examplewidth=\linewidth
+%%% \advance\examplewidth by -2\fboxrule
+%%% \advance\examplewidth by -2\fboxsep
+%%% \fbox{%
+%%% \begin{minipage}{\examplewidth}
+%%% \section*{References}
+
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % We must fake a little bit to include it here. \bibitem gobbles the
+%%% % next character since it thinks it's a line end. (This might be a
+%%% % problem for itself, but untill now all bibliography styles put
+%%% % \bibitem on an own line.) We must supply a token which might be
+%%% % eaten by \bibitem. Best to use a \relax for this.
+%%% %
+%%% \font\tenlogo=logo10 \let\logo=\tenlogo \def\MF{{\logo META}\-{\logo FONT}}
+%%% \begin{thebibliography}{1}
+
+%%% \bibitem{typo:tschichold:selected}\relax
+%%% Jan Tschichold.
+%%% \newblock {\it Ausgew\"ahlte Aufs\"atze \"uber Fragen der Gestalt des Buches
+%%% und der Typographie}.
+%%% \newblock Birkh\"auser, Basel, 1975. ISBN~3-7643-1946-1.
+%%% \newblock A second, unchanged, edition appeared in~1987.
+%%% \newblock
+%%% \annote A collection of his ``classic'' papers. The best book on typographic
+%%% principles read so far. A definitive `{\it must\/}' for everyone interested
+%%% in typography, book design, or typesetting.
+%%% \endannote.
+
+%%% \bibitem{typo:blostein:music}\relax
+%%% Dorothea Blostein.
+%%% \newblock Justification of Printed Music.
+%%% \newblock {\it Communications of the ACM}, 34(3):88--99, March 1991.
+%%% \newblock
+%%% \annote Presents problems and solutions of the task to create a correct spacing
+%%% while setting notes. The proposed method also takes the temporal relationship
+%%% of notes into account. Handles two-dimensional layout, e.g., staffs and
+%%% texts.
+%%% \endannote.
+
+%%% \bibitem{typo:sta:zapf}\relax
+%%% {\it Herrman Zapf and his Design Philosophy}.
+%%% \newblock Society of Typographic Arts, Chicago, 1987. ISBN~0-941447-00-6.
+%%% \newblock
+%%% \annote A valuable book. A chapter on his work around \MF{} is included. Was
+%%% among the most beautiful books of the year.
+%%% \endannote.
+
+%%% \end{thebibliography}
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% \end{minipage}%
+%%% }
+%%% \end{quote}
+
+%%% \bigskip
+
+%%% Otherwise -- without the |biblist| bibliography style -- you must issue
+%%% an appopriate tag. The following result was produced with |unsrt|:
+%%% %
+%%% \begin{quote}
+%%% \examplewidth=\linewidth
+%%% \advance\examplewidth by -2\fboxrule
+%%% \advance\examplewidth by -2\fboxsep
+%%% \fbox{%
+%%% \begin{minipage}{\examplewidth}
+%%% \section*{References}
+
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % Here the same reason for inserting \relax'es as in the previous
+%%% % example applies.
+%%% %
+%%% \font\tenlogo=logo10 \let\logo=\tenlogo \def\MF{{\logo META}\-{\logo FONT}}
+%%% \begin{thebibliography}{1}
+
+%%% \bibitem{typo:tschichold:selected}\relax
+%%% Jan Tschichold.
+%%% \newblock {\em Ausgew\"ahlte Aufs\"atze \"uber Fragen der Gestalt des Buches
+%%% und der Typographie}.
+%%% \newblock Birkh\"auser, Basel, 1975.
+%%% \newblock A second, unchanged, edition appeared in~1987.
+
+%%% \bibitem{typo:blostein:music}\relax
+%%% Dorothea Blostein.
+%%% \newblock Justification of printed music.
+%%% \newblock {\em Communications of the ACM}, 34(3):88--99, March 1991.
+
+%%% \bibitem{typo:sta:zapf}\relax
+%%% {\em Herrman Zapf and his Design Philosophy}.
+%%% \newblock Society of Typographic Arts, Chicago, 1987.
+
+%%% \end{thebibliography}
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% \end{minipage}%
+%%% }
+%%% \end{quote}
+
+%%% Of course, the ISBN numbers and the annotations are missing, since
+%%% |unsrt| does not extract them from the database. (Careful readers
+%%% will notice another difference: The |biblist| bibliography style does
+%%% not lower titles of articles as the standard styles do.)
+
+
+%%% \sect The preferred style for this style option is |article|. In fact,
+%%% all styles which use |\raggedbottom| will work. This is because a page
+%%% break within an entry is not allowed and the flexibility at the page
+%%% bottom is needed.
+
+
+%%% \sect As a future enhancement one could place an info on the starting
+%%% and the finishing entry on this page in the headline, like in a
+%%% dictionary.
+
+
+%%% \sect This program is free software; you can redistribute it and/or
+%%% modify it under the terms of the GNU General Public License as
+%%% published by the Free Software Foundation; either version~1, or (at your
+%%% option) any later version.
+
+%%% This program is distributed in the hope that it will be useful, but
+%%% {\bf without any warranty\/}; without even the implied warranty of
+%%% {\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+%%% the GNU General Public License for more details.
+
+%%% You should have received a copy of the GNU General Public License
+%%% along with this program; if not, write to the Free Software Foundation,
+%%% Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+%%% \sect This style option is supported. Send bug reports, comments and
+%%% repairs.
+
+
+
+
+%%% \chap Implementation.
+
+%%% The main work is to supply the environment |thebibliography|; in
+%%% fact, we implement it as a |description| environment. The environment
+%%% gets an (unused) argument. In addition we have to supply a correct
+%%% expansion for the |\bibitem| tag which takes the cite key as its
+%%% argument. Of course, this will result in an |\item|. After the
+%%% |\bibitem| a |\library| tag may follow, with one parameter followed
+%%% by a period. Then comes the reference, the (optional) annotation is
+%%% an own block, enclosed in |\annote| and |\endannote|. After
+%%% |\endannote| comes a period which should be discarded. (This should
+%%% be done in the \BibTeX{} style, but nevertheless\,\dots)
+
+%%% Later we will look for the things which would not be needed, but make
+%%% life easier.
+
+
+%%% \sect Before we start we declare some shorthands for category codes.
+%%% By declaring the underscore~`(|_|)' as letter we can use it in our
+%%% macros. (I agree with {\sc D.~Knuth} that
+%%% |\identifier_several_words_long| is more readable than
+%%% |\IdentifierSeveralWordsLong| and in every case better than
+%%% |\p@@@s|.) As this is a \LaTeX{} style option the at sign is a letter
+%%% anyhow; so we can use the ``private'' Plain and \LaTeX{} macros; and
+%%% with the underscore we can make our own macros more readable. But as
+%%% we have to restore this category code at the end of this macro file
+%%% we store its former value in the control sequence |\uscode|. This
+%%% method is better than to use a group because not all macros have to
+%%% be defined global this way.
+
+%%% \beginprog
+\chardef\escape=0
+\chardef\open=1
+\chardef\close=2
+\chardef\letter=11
+\chardef\other=12
+%\chardef\active=13 % is defined in Plain already
+
+\chardef\uscode=\catcode`\_ % top level macro file!
+
+\catcode`\_=\letter
+%%% \endprog
+
+
+%%% \sect Another care activity is needed: Users of the New Font
+%%% Selection Scheme (NFSS) will perhaps change the fonts in an
+%%% unexpected manner. \LaTeX{} since December~1991 (and, of course, NFSS
+%%% itself) provides the macro |\reset@font| to reset the font selection
+%%% stuff to a defined state. Since this style might be used with older
+%%% \LaTeX{} versions (e.g., with I\LaTeX{}) we will provide this macro.
+
+%%% \beginprog
+\ifx \reset@font\undefined
+ \let\reset@font\relax
+\fi
+%%% \endprog
+
+
+%%% \sect Within an entry we use a ragged right margin. To break within an
+%%% entry is always difficult and is made easier in this way. After all,
+%%% the open format we use gives a ragged impression anyhow. Within an
+%%% entry we dissallow page breaks and we do not treat periods as full
+%%% stops.
+
+%%% \beginprog
+\def\thebibliography#1{%
+ \description
+ \rightskip \z@ plus 2em
+ \interlinepenalty\@M
+ \sfcode`\.=\@m
+ }
+\let\endthebibliography=\enddescription
+%%% \endprog
+
+
+%%% \sect |\bibitem| should look for the next token: If a library info
+%%% exists it must go in the same line, otherwise a line break must be
+%%% issued.
+
+%%% But |\bibitem| itself is not of interest, it looks only for the
+%%% optional argument. We have to redefine |\@bibitem|. If an
+%%% bibliography style like |alpha| is used, |\bibitem| will be supplied
+%%% an optional argument. Then it expands to |\@lbibitem|; we will define
+%%% this to |\@bibitem| as well -- we ignore the print label supplied by
+%%% \BibTeX{}.
+
+%%% After the argument(s) of |\bibitem| a line end occurs in any case. The
+%%% optional |\library| tag will follow on the next line. This means we
+%%% first have to gobble the line end char |^^M|, and have to check the
+%%% next token afterwards. If this next token is |\library| we will do
+%%% nothing since |\library| will itself end the line. Otherwise we do a
+%%% line break. Experiments have shown that the dotted line at the start
+%%% on every entry helps finding the different entries.
+
+%%% \beginprog
+\def\@lbibitem[#1]{\@bibitem}
+
+\def\@bibitem#1{%
+ \item[\tt #1]\leavevmode
+ \null \dotfill
+ \begingroup
+ \obeylines
+ \afterassignment\prepare_check_library
+ \let\next % gobble following ^^M
+ }
+\def\prepare_check_library{%
+ \futurelet\next \check_library
+ }
+\def\check_library{%
+ \ifx \next\library
+ \else \break
+ \fi
+ \endgroup
+ }
+%%% \endprog
+
+
+%%% \sect We assume that the library info and the cite key will fit into
+%%% one line. If this is not true, a two line solution must be set up.
+
+%%% \beginprog
+\def\library#1#2.{% #2 is only needed to gobble the period
+ \quad {\sf (#1)}\break
+ }
+%%% \endprog
+
+
+%%% \sect A reference is divided into blocks starting with |\newblock|.
+%%% Each block shall start a new line, we use |\newline| for this. A
+%%% special block is the one with an annotation in it. Since we want to
+%%% indent this block once more we must change the parshape. But then we
+%%% have to finish the paragraph first. The annotation block starts with
+%%% |\annote| and may be easily recognized in this way.
+
+%%% \beginprog
+\def\newblock{%
+ \futurelet\next \@checkAnnote
+ }
+\def\@checkAnnote{%
+ \ifx \next\annote
+ \else \newline
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect The annotation is an own paragraph indented by |\leftmargin|.
+%%% Since it is not a paragraph in the logical sense we do not insert
+%%% vertical glue (i.e., |\parskip|) at the top. The annotation is typeset
+%%% in a smaller size. We assume that it consists of full sentences which
+%%% might be made up in a proper way. Therefore we don't use a ragged
+%%% margin here.
+
+%%% The change of |\parshape| have to be reset after the group -- these
+%%% changes are not local.
+
+%%% \beginprog
+\def\annote{%
+ \endgraf
+ \vskip -\parsep
+ \begingroup
+ \reset@font\footnotesize
+ \rightskip \z@skip
+ \advance\linewidth -\leftmargin
+ \advance\@totalleftmargin \leftmargin
+ \parshape \@ne \@totalleftmargin \linewidth
+ }
+\def\endannote#1.{% #1 is only needed to gobble the period
+ \endgraf
+ \endgroup
+ \parshape \@ne \@totalleftmargin \linewidth
+ }
+%%% \endprog
+
+
+%%% \sect In our files |\cite| will print the cite key in typewriter with
+%%% a framed box around. In fact, |\cite| expands to |\@citex|, which has
+%%% an optional argument. The flag |@tempswa| shows if this optional
+%%% argument is there.
+
+%%% \beginprog
+\def\@citex[#1]#2{\fbox{{\tt #2}\if@tempswa , #1\fi}}
+%%% \endprog
+
+
+
+
+%%% \sect Bells and Whistles.
+
+%%% Since the task we want to support most is the print of complete
+%%% \BibTeX{} databases with the |biblist| bibliography style, we supply
+%%% appropriate |\nocite| and |\bibliographystyle| tags, if they are
+%%% missing. The |\bibliography| command shall create a heading as well.
+
+%%% Furthermore we set up a headline.
+
+
+%%% \sect First the original meanings of the to-be-redefined control
+%%% sequences are saved. We define two macros which will issue the
+%%% default tags given above. These macros are not private, but
+%%% protected; a knowing user may redefine the `default bibliography
+%%% style' in this way.
+
+%%% \beginprog
+\let\@@nocite=\nocite
+\let\@@bibliographystyle=\bibliographystyle
+\let\@@bibliography=\bibliography
+
+\def\AddNocite{\nocite{*}}
+\def\AddBibliographystyle{\bibliographystyle{biblist}}
+%%% \endprog
+
+
+%%% \sect If |\nocite| or |\bibliographystyle| is issued, the default
+%%% tags are discarded, the original meaning is restored, and the control
+%%% sequence is reissued again.
+
+%%% \beginprog
+\def\nocite{%
+ \let\AddNocite\relax
+ \let\nocite\@@nocite
+ \nocite
+ }
+\def\bibliographystyle{%
+ \let\AddBibliographystyle\relax
+ \let\bibliographystyle\@@bibliographystyle
+ \bibliographystyle
+ }
+%%% \endprog
+
+
+%%% \sect The |\bibliography| tag will first issue the missing default
+%%% tags, will produce a heading afterwards, will setup the headline, and
+%%% will create the bibliography itself. For the heading we use |\refname|
+%%% which should be available -- either because the new \LaTeX{},
+%%% I\LaTeX{}, or the {\sf babel} system is used.
+
+%%% \beginprog
+\def\bibliography#1{%
+ \AddNocite
+ \AddBibliographystyle
+ \section*{\refname}%
+ \mark_for_headline{#1}%
+ \@@bibliography{#1}%
+ }
+%%% \endprog
+
+
+%%% \sect The headline will consist of the database names given in the
+%%% |\bibliography| tag and the current date. We ignore the database name
+%%% |abbrev|, since this name is used for |@string| definitions at our
+%%% site.
+
+%%% We do not issue a warning of no file name is given -- this will be
+%%% done by |\@@bibliography|. When a file name exists a comma and a
+%%% space will be prepended at the very beginning of |\bib_list|. The
+%%% comma is discarded after the loop. But when there was no file name
+%%% |\bib_list| will expand to an empty list, we supply a |\relax| as a
+%%% catch-up argument for |\@gobble|.
+
+%%% \beginprog
+\def\AbbrevFileName{abbrev}
+
+\def\mark_for_headline#1{%
+ \def\bib_list{}%
+ \@for \bib_file :=#1\do {%
+ \ifx \bib_file\AbbrevFileName
+ \else \edef\bib_list{\bib_list, \bib_file.bib}%
+ \fi
+ }%
+ \edef\bib_list{\expandafter\@gobble\bib_list \relax}%
+ \markboth{{\reset@font\tt \bib_list}}{{\reset@font\tt \bib_list}}%
+ }
+
+\def\@oddhead{\reset@font\rm \hfil \leftmark \quad (\today)}
+\def\@evenhead{\reset@font\rm (\today)\quad \ignorespaces \rightmark \hfil}
+%%% \endprog
+
+
+%%% \sect We must restore our catcode and are finished.
+
+%%% \beginprog
+\catcode`\_=\uscode
+
+\endinput
+%%% \endprog
+
+
+
+
+%%% \end{document}
diff --git a/macros/latex209/contrib/biblist/biblist.tex b/macros/latex209/contrib/biblist/biblist.tex
new file mode 100644
index 0000000000..a6f57e07da
--- /dev/null
+++ b/macros/latex209/contrib/biblist/biblist.tex
@@ -0,0 +1,653 @@
+% $Id: biblist.doc,v 1.4 1992/01/13 16:35:56 schrod Exp schrod $
+%----------------------------------------------------------------------
+% Copyright (c) 1991 by J.Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% Distributed under the terms of the GNU General Public License.
+
+%
+% LaTeX style option biblist for article style
+%
+% [LaTeX in MAKEPROG]
+
+
+%
+% $Log: biblist.doc,v $
+% Revision 1.4 1992/01/13 16:35:56 schrod
+% Added examples, repaired headline.
+% Called \reset@font where appropriate.
+% October 91 version of LaTeX was delayed until December 91. Readers
+% might be disturbed if there is the notion of a nonexistant version.
+%
+% Revision 1.3 1991/10/14 14:10:21 schrod
+% mentioned that this option is supported.
+% moved local guide section to separate file.
+%
+% Revision 1.2 1991/10/10 16:13:31 schrod
+% changed email address.
+% mentioned LaTeX 2.09 <Oct 91> (just announced).
+%
+% Revision 1.1 1991/04/13 15:03:08 schrod
+% Initial revision
+%
+
+
+
+
+\documentstyle[progltx,a4-9,rcs,names,biblist]{article}
+
+
+% We need biblist for the examples and do therefore include it. But it
+% sets the headline (see below ;-). So we just reset it again to the
+% value it had before. Well, it's a kind of a kludge, but it works...
+\pagestyle{plain}
+
+% The examples will consist of framed pseudo-output. We'll need a
+% variable for the width of these examples.
+\newdimen\examplewidth
+
+
+\nofiles % don't need an aux file
+
+
+\begin{document}
+
+
+\title{The {\tt biblist\/} Style Option}
+\author{% % LaTeX does not discard unnecessary glue...
+ Joachim Schrod%
+ \thanks{%
+ TU~Darmstadt, Alexanderstr.~10, D-6100 Darmstadt, Germany.\newline
+ Email: {\tt schrod@iti.informatik.th-darmstadt.de}.%
+ }%
+ }
+\RCSdate $Date: 1992/01/13 16:35:56 $
+
+\maketitle
+
+
+
+\chap What's this style option for?.
+
+This style option is appropriate to create a typeset listing of a
+(possibly large) \BibTeX{} input file. With such large files --
+especially, if the cite keys are long -- the needed string space is
+often exceeded. Often a Big\TeX{} is available to circumstance this
+problem, but with this style option each \TeX{} will do it.
+
+You have to prepare a \LaTeX{} document which uses the |article|
+style and the |biblist| style option. You may add almost all other
+style options, as you wish, e.g., |twoside|, |german| (or other
+language style options), |a4|, etc. This style option must be used
+with a ragged bottom; this has the effect, that it cannot be used with
+|twocolumn| or |multicol|.
+
+You must issue a |\bibliography| tag which names all \BibTeX{}
+databases which you want to print. You may issue a
+|\bibliographystyle| tag to specify how \BibTeX{} will process its
+databases. (In fact, you usually must issue it since the default
+bibliography style is not available on most installations; see
+below.) You may issue |\nocite| commands if you want to print only
+selected entries from the databases.
+
+
+\sect If you have not issued the |\bibliographystyle| tag, the
+|biblist| bibliography style will be used. This is a non-abbreviating
+style which does not do any sorting and no case conversion to titles.
+The field |isbn| is recognized for books (and parts of), and the
+field |issn| is recognized for articles and such. In addition, it
+provides the additional fields |library| and |annote| for all entry
+types. The usage of these fields depends on the definition of
+appropriate \TeX{} macros (which are supplied by this style option).
+
+On interest I can provide a diff to |btxbst.doc|.
+
+
+\sect A ``bug'' you may encounter is that |\cite| tags within
+\BibTeX{} entries will not be processed. Instead the cite key itself
+will be printed. Note that this is not a bug, this is a feature! You
+have to use |\nocite| tags for {\it all\/} entries that shall be
+included in the listing. If you do not give any |\nocite| tag at all,
+a listing with all entries is created.
+
+Note that this style option assumes that you use either a version of
+\LaTeX{}~2.09 after December~1991, I\LaTeX{}, or the {\sf babel}
+system. Particulary, it requires the definition of |\refname| (i.e.,
+the title of the ``references section'') which is supplied by these
+systems. (Of course, you may supply this definition by yourself.)
+
+
+\sect The entries in the resulting listing are formatted as follows:
+%
+ \begin{description}
+
+\item[\tt cite key] \leavevmode \null \dotfill \quad {\sf (Library info)}\break
+ Author(s).\\
+ Title.\\
+ Publication info.\\
+ Notes.\\
+ \null \qquad {\footnotesize Annotation}
+
+ \end{description}
+%
+ I.e., an open format is used. Although this needs more space I think
+the enhanced legibility pays back.
+
+Note that you will not get the `Library info' and the `Annotation' in
+the above format if your bibliography style does not supply this
+information with the assumed markup. (See above for the |biblist|
+bibliography style.) The parenthesis around the library info are
+produced by this style option, not by \BibTeX{}.
+
+
+\sect {\it Example\/}:\quad Suppose, there is a file |typography.bib|
+with references on typography.
+%
+ \begin{quote}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{verbatim}
+% typography.bib 13 Jan 92
+%------------------------------------------------------------
+
+%
+% References on Typographie, Typesetting, and Book Design
+%
+
+% !!!! This is a kludge for biblist.doc !!!!
+@preamble{"
+\font\tenlogo=logo10
+\let\logo=\tenlogo
+\def\MF{{\logo META}\-{\logo FONT}}
+"}
+
+@book{typo:tschichold:selected,
+ author = {Jan Tschichold},
+ title = {Ausgew\"ahlte Aufs\"atze \"uber Fragen der Gestalt des
+ Buches und der Typographie},
+ publisher = {Birkh\"auser},
+ address = {Basel},
+ year = 1975,
+ isbn = {3-7643-1946-1},
+ note = {A second, unchanged, edition appeared in~1987.},
+ library = {},
+ annote = {A collection of his ``classic'' papers. The best book on
+ typographic principles read so far. A definitive `{\it
+ must\/}' for everyone interested in typography, book design,
+ or typesetting.}
+}
+
+@article{typo:blostein:music,
+ author = {Dorothea Blostein},
+ title = {Justification of Printed Music},
+ journal = cacm,
+ volume = 34,
+ number = 3,
+ month = mar,
+ year = 1991,
+ pages = {88-99},
+ annote = {Presents problems and solutions of the task to create a
+ correct spacing while setting notes. The proposed method also
+ takes the temporal relationship of notes into account.
+ Handles two-dimensional layout, e.g., staffs and texts.}
+}
+
+@book{typo:sta:zapf,
+ title = {Herrman Zapf and his Design Philosophy},
+ publisher = {Society of Typographic Arts},
+ address = {Chicago},
+ year = 1987,
+ isbn = {0-941447-00-6},
+ note = {},
+ library = {},
+ annote = {A valuable book. A chapter on his work around \MF{} is
+ included. Was among the most beautiful books of the year.}
+}
+\end{verbatim}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \end{quote}
+%
+ Furthermore assume that the bibliography style |biblist| is
+available. Then the \LaTeX{} file
+%
+\begin{verbatim}
+ \documentstyle[biblist]{article}
+
+ \begin{document}
+
+ \bibliography{typography}
+
+ \end{document}
+\end{verbatim}
+%
+ may be used to create a listing with all entries. You have to run
+\LaTeX{}, \BibTeX{}, and \LaTeX{}. (Careful readers will note that
+there will be a \BibTeX{} warning about a missing author or editor in
+the Zapf entry.) You do {\it not\/} need to run \LaTeX{} twice after
+the \BibTeX{} run. The result looks like this:
+%
+ \begin{quote}
+ \examplewidth=\linewidth
+ \advance\examplewidth by -2\fboxrule
+ \advance\examplewidth by -2\fboxsep
+ \fbox{%
+ \begin{minipage}{\examplewidth}
+ \section*{References}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% We must fake a little bit to include it here. \bibitem gobbles the
+% next character since it thinks it's a line end. (This might be a
+% problem for itself, but untill now all bibliography styles put
+% \bibitem on an own line.) We must supply a token which might be
+% eaten by \bibitem. Best to use a \relax for this.
+%
+ \font\tenlogo=logo10 \let\logo=\tenlogo \def\MF{{\logo META}\-{\logo FONT}}
+\begin{thebibliography}{1}
+
+\bibitem{typo:tschichold:selected}\relax
+Jan Tschichold.
+\newblock {\it Ausgew\"ahlte Aufs\"atze \"uber Fragen der Gestalt des Buches
+ und der Typographie}.
+\newblock Birkh\"auser, Basel, 1975. ISBN~3-7643-1946-1.
+\newblock A second, unchanged, edition appeared in~1987.
+\newblock
+\annote A collection of his ``classic'' papers. The best book on typographic
+ principles read so far. A definitive `{\it must\/}' for everyone interested
+ in typography, book design, or typesetting.
+\endannote.
+
+\bibitem{typo:blostein:music}\relax
+Dorothea Blostein.
+\newblock Justification of Printed Music.
+\newblock {\it Communications of the ACM}, 34(3):88--99, March 1991.
+\newblock
+\annote Presents problems and solutions of the task to create a correct spacing
+ while setting notes. The proposed method also takes the temporal relationship
+ of notes into account. Handles two-dimensional layout, e.g., staffs and
+ texts.
+\endannote.
+
+\bibitem{typo:sta:zapf}\relax
+{\it Herrman Zapf and his Design Philosophy}.
+\newblock Society of Typographic Arts, Chicago, 1987. ISBN~0-941447-00-6.
+\newblock
+\annote A valuable book. A chapter on his work around \MF{} is included. Was
+ among the most beautiful books of the year.
+\endannote.
+
+\end{thebibliography}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \end{minipage}%
+ }
+ \end{quote}
+
+\bigskip
+
+Otherwise -- without the |biblist| bibliography style -- you must issue
+an appopriate tag. The following result was produced with |unsrt|:
+%
+ \begin{quote}
+ \examplewidth=\linewidth
+ \advance\examplewidth by -2\fboxrule
+ \advance\examplewidth by -2\fboxsep
+ \fbox{%
+ \begin{minipage}{\examplewidth}
+ \section*{References}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Here the same reason for inserting \relax'es as in the previous
+% example applies.
+%
+ \font\tenlogo=logo10 \let\logo=\tenlogo \def\MF{{\logo META}\-{\logo FONT}}
+\begin{thebibliography}{1}
+
+\bibitem{typo:tschichold:selected}\relax
+Jan Tschichold.
+\newblock {\em Ausgew\"ahlte Aufs\"atze \"uber Fragen der Gestalt des Buches
+ und der Typographie}.
+\newblock Birkh\"auser, Basel, 1975.
+\newblock A second, unchanged, edition appeared in~1987.
+
+\bibitem{typo:blostein:music}\relax
+Dorothea Blostein.
+\newblock Justification of printed music.
+\newblock {\em Communications of the ACM}, 34(3):88--99, March 1991.
+
+\bibitem{typo:sta:zapf}\relax
+{\em Herrman Zapf and his Design Philosophy}.
+\newblock Society of Typographic Arts, Chicago, 1987.
+
+\end{thebibliography}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \end{minipage}%
+ }
+ \end{quote}
+
+Of course, the ISBN numbers and the annotations are missing, since
+|unsrt| does not extract them from the database. (Careful readers
+will notice another difference: The |biblist| bibliography style does
+not lower titles of articles as the standard styles do.)
+
+
+\sect The preferred style for this style option is |article|. In fact,
+all styles which use |\raggedbottom| will work. This is because a page
+break within an entry is not allowed and the flexibility at the page
+bottom is needed.
+
+
+\sect As a future enhancement one could place an info on the starting
+and the finishing entry on this page in the headline, like in a
+dictionary.
+
+
+\sect This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version~1, or (at your
+option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+{\bf without any warranty\/}; without even the implied warranty of
+{\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software Foundation,
+Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+\sect This style option is supported. Send bug reports, comments and
+repairs.
+
+
+
+
+\chap Implementation.
+
+The main work is to supply the environment |thebibliography|; in
+fact, we implement it as a |description| environment. The environment
+gets an (unused) argument. In addition we have to supply a correct
+expansion for the |\bibitem| tag which takes the cite key as its
+argument. Of course, this will result in an |\item|. After the
+|\bibitem| a |\library| tag may follow, with one parameter followed
+by a period. Then comes the reference, the (optional) annotation is
+an own block, enclosed in |\annote| and |\endannote|. After
+|\endannote| comes a period which should be discarded. (This should
+be done in the \BibTeX{} style, but nevertheless\,\dots)
+
+Later we will look for the things which would not be needed, but make
+life easier.
+
+
+\sect Before we start we declare some shorthands for category codes.
+By declaring the underscore~`(|_|)' as letter we can use it in our
+macros. (I agree with {\sc D.~Knuth} that
+|\identifier_several_words_long| is more readable than
+|\IdentifierSeveralWordsLong| and in every case better than
+|\p@@@s|.) As this is a \LaTeX{} style option the at sign is a letter
+anyhow; so we can use the ``private'' Plain and \LaTeX{} macros; and
+with the underscore we can make our own macros more readable. But as
+we have to restore this category code at the end of this macro file
+we store its former value in the control sequence |\uscode|. This
+method is better than to use a group because not all macros have to
+be defined global this way.
+
+\beginprog
+\chardef\escape=0
+\chardef\open=1
+\chardef\close=2
+\chardef\letter=11
+\chardef\other=12
+%\chardef\active=13 % is defined in Plain already
+
+\chardef\uscode=\catcode`\_ % top level macro file!
+
+\catcode`\_=\letter
+\endprog
+
+
+\sect Another care activity is needed: Users of the New Font
+Selection Scheme (NFSS) will perhaps change the fonts in an
+unexpected manner. \LaTeX{} since December~1991 (and, of course, NFSS
+itself) provides the macro |\reset@font| to reset the font selection
+stuff to a defined state. Since this style might be used with older
+\LaTeX{} versions (e.g., with I\LaTeX{}) we will provide this macro.
+
+\beginprog
+\ifx \reset@font\undefined
+ \let\reset@font\relax
+\fi
+\endprog
+
+
+\sect Within an entry we use a ragged right margin. To break within an
+entry is always difficult and is made easier in this way. After all,
+the open format we use gives a ragged impression anyhow. Within an
+entry we dissallow page breaks and we do not treat periods as full
+stops.
+
+\beginprog
+\def\thebibliography#1{%
+ \description
+ \rightskip \z@ plus 2em
+ \interlinepenalty\@M
+ \sfcode`\.=\@m
+ }
+\let\endthebibliography=\enddescription
+\endprog
+
+
+\sect |\bibitem| should look for the next token: If a library info
+exists it must go in the same line, otherwise a line break must be
+issued.
+
+But |\bibitem| itself is not of interest, it looks only for the
+optional argument. We have to redefine |\@bibitem|. If an
+bibliography style like |alpha| is used, |\bibitem| will be supplied
+an optional argument. Then it expands to |\@lbibitem|; we will define
+this to |\@bibitem| as well -- we ignore the print label supplied by
+\BibTeX{}.
+
+After the argument(s) of |\bibitem| a line end occurs in any case. The
+optional |\library| tag will follow on the next line. This means we
+first have to gobble the line end char |^^M|, and have to check the
+next token afterwards. If this next token is |\library| we will do
+nothing since |\library| will itself end the line. Otherwise we do a
+line break. Experiments have shown that the dotted line at the start
+on every entry helps finding the different entries.
+
+\beginprog
+\def\@lbibitem[#1]{\@bibitem}
+
+\def\@bibitem#1{%
+ \item[\tt #1]\leavevmode
+ \null \dotfill
+ \begingroup
+ \obeylines
+ \afterassignment\prepare_check_library
+ \let\next % gobble following ^^M
+ }
+\def\prepare_check_library{%
+ \futurelet\next \check_library
+ }
+\def\check_library{%
+ \ifx \next\library
+ \else \break
+ \fi
+ \endgroup
+ }
+\endprog
+
+
+\sect We assume that the library info and the cite key will fit into
+one line. If this is not true, a two line solution must be set up.
+
+\beginprog
+\def\library#1#2.{% #2 is only needed to gobble the period
+ \quad {\sf (#1)}\break
+ }
+\endprog
+
+
+\sect A reference is divided into blocks starting with |\newblock|.
+Each block shall start a new line, we use |\newline| for this. A
+special block is the one with an annotation in it. Since we want to
+indent this block once more we must change the parshape. But then we
+have to finish the paragraph first. The annotation block starts with
+|\annote| and may be easily recognized in this way.
+
+\beginprog
+\def\newblock{%
+ \futurelet\next \@checkAnnote
+ }
+\def\@checkAnnote{%
+ \ifx \next\annote
+ \else \newline
+ \fi
+ }
+\endprog
+
+
+\sect The annotation is an own paragraph indented by |\leftmargin|.
+Since it is not a paragraph in the logical sense we do not insert
+vertical glue (i.e., |\parskip|) at the top. The annotation is typeset
+in a smaller size. We assume that it consists of full sentences which
+might be made up in a proper way. Therefore we don't use a ragged
+margin here.
+
+The change of |\parshape| have to be reset after the group -- these
+changes are not local.
+
+\beginprog
+\def\annote{%
+ \endgraf
+ \vskip -\parsep
+ \begingroup
+ \reset@font\footnotesize
+ \rightskip \z@skip
+ \advance\linewidth -\leftmargin
+ \advance\@totalleftmargin \leftmargin
+ \parshape \@ne \@totalleftmargin \linewidth
+ }
+\def\endannote#1.{% #1 is only needed to gobble the period
+ \endgraf
+ \endgroup
+ \parshape \@ne \@totalleftmargin \linewidth
+ }
+\endprog
+
+
+\sect In our files |\cite| will print the cite key in typewriter with
+a framed box around. In fact, |\cite| expands to |\@citex|, which has
+an optional argument. The flag |@tempswa| shows if this optional
+argument is there.
+
+\beginprog
+\def\@citex[#1]#2{\fbox{{\tt #2}\if@tempswa , #1\fi}}
+\endprog
+
+
+
+
+\sect Bells and Whistles.
+
+Since the task we want to support most is the print of complete
+\BibTeX{} databases with the |biblist| bibliography style, we supply
+appropriate |\nocite| and |\bibliographystyle| tags, if they are
+missing. The |\bibliography| command shall create a heading as well.
+
+Furthermore we set up a headline.
+
+
+\sect First the original meanings of the to-be-redefined control
+sequences are saved. We define two macros which will issue the
+default tags given above. These macros are not private, but
+protected; a knowing user may redefine the `default bibliography
+style' in this way.
+
+\beginprog
+\let\@@nocite=\nocite
+\let\@@bibliographystyle=\bibliographystyle
+\let\@@bibliography=\bibliography
+
+\def\AddNocite{\nocite{*}}
+\def\AddBibliographystyle{\bibliographystyle{biblist}}
+\endprog
+
+
+\sect If |\nocite| or |\bibliographystyle| is issued, the default
+tags are discarded, the original meaning is restored, and the control
+sequence is reissued again.
+
+\beginprog
+\def\nocite{%
+ \let\AddNocite\relax
+ \let\nocite\@@nocite
+ \nocite
+ }
+\def\bibliographystyle{%
+ \let\AddBibliographystyle\relax
+ \let\bibliographystyle\@@bibliographystyle
+ \bibliographystyle
+ }
+\endprog
+
+
+\sect The |\bibliography| tag will first issue the missing default
+tags, will produce a heading afterwards, will setup the headline, and
+will create the bibliography itself. For the heading we use |\refname|
+which should be available -- either because the new \LaTeX{},
+I\LaTeX{}, or the {\sf babel} system is used.
+
+\beginprog
+\def\bibliography#1{%
+ \AddNocite
+ \AddBibliographystyle
+ \section*{\refname}%
+ \mark_for_headline{#1}%
+ \@@bibliography{#1}%
+ }
+\endprog
+
+
+\sect The headline will consist of the database names given in the
+|\bibliography| tag and the current date. We ignore the database name
+|abbrev|, since this name is used for |@string| definitions at our
+site.
+
+We do not issue a warning of no file name is given -- this will be
+done by |\@@bibliography|. When a file name exists a comma and a
+space will be prepended at the very beginning of |\bib_list|. The
+comma is discarded after the loop. But when there was no file name
+|\bib_list| will expand to an empty list, we supply a |\relax| as a
+catch-up argument for |\@gobble|.
+
+\beginprog
+\def\AbbrevFileName{abbrev}
+
+\def\mark_for_headline#1{%
+ \def\bib_list{}%
+ \@for \bib_file :=#1\do {%
+ \ifx \bib_file\AbbrevFileName
+ \else \edef\bib_list{\bib_list, \bib_file.bib}%
+ \fi
+ }%
+ \edef\bib_list{\expandafter\@gobble\bib_list \relax}%
+ \markboth{{\reset@font\tt \bib_list}}{{\reset@font\tt \bib_list}}%
+ }
+
+\def\@oddhead{\reset@font\rm \hfil \leftmark \quad (\today)}
+\def\@evenhead{\reset@font\rm (\today)\quad \ignorespaces \rightmark \hfil}
+\endprog
+
+
+\sect We must restore our catcode and are finished.
+
+\beginprog
+\catcode`\_=\uscode
+
+\endinput
+\endprog
+
+
+
+
+\end{document}
diff --git a/macros/latex209/contrib/biemes/crib208.tex b/macros/latex209/contrib/biemes/crib208.tex
new file mode 100644
index 0000000000..350579eede
--- /dev/null
+++ b/macros/latex209/contrib/biemes/crib208.tex
@@ -0,0 +1,1815 @@
+\documentstyle[twoside,twocolumn]{article}
+
+% The cribsheet can be printed at 8 points for people with good eyes
+
+\newif\ifsmallcrib
+%\smallcribtrue % 8 point cribsheet
+
+% Fix \LaTeX macro so logo is in current font, not always \rm
+
+\newcount\lecurrentfam
+\def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex
+ \hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+
+% Fix \caption macro so that current font is used, not always \normalsize
+
+\makeatletter
+\long\def\@caption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\par
+ \begingroup
+ \@parboxrestore
+% \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+\makeatother
+
+% Here are the absolute dimensions for the cribsheet
+
+\topmargin 0in
+\oddsidemargin 0in
+\evensidemargin 0in
+\marginparwidth 0in
+\textheight 9.2in
+\textwidth 6.5in
+\ifsmallcrib \columnwidth 3in \columnsep .4in
+ \else \columnwidth 2.85in \columnsep .7in \fi
+
+% All the other dimensions are font-dependent
+
+\parskip .75ex plus .3ex minus .3ex
+
+\pagestyle{myheadings}
+\markboth{\LaTeX{} Command Summary}{\today}
+
+\begin{document}
+\thispagestyle{empty}
+
+\noindent
+{\large\bf \LaTeX{} Command Summary}
+\smallskip
+
+\begin{flushleft}
+\hspace*{2em} L. Botway and C. Biemesderfer\\
+\hspace*{2em} Space Telescope Science Institute\\
+\hspace*{2em} Baltimore, MD\ \ 21218\\[.5ex]
+\hspace*{2em} \today
+\end{flushleft}
+\smallskip
+
+\ifsmallcrib \footnotesize \fi
+\noindent
+This listing contains short descriptions of the control sequences that are
+likely to be useful for users of \LaTeX~v2.08 layered on \TeX~v1.3. Some
+of these commands are \LaTeX{} macros, while others belong to plain \TeX{};
+no attempt to differentiate them is made. We would
+appreciate hearing about errors in the list.
+\bigskip
+
+\raggedright \parindent -1em
+
+\verb*"\ " --- ordinary space after period.
+
+\verb"\!" --- negative thin space $ = -\frac{1}{6} $ quad;
+ \ifsmallcrib \relax \else \linebreak \fi
+ \verb"xx\!x" yields $xx\!x$ (math mode).
+
+\verb.\". makes an umlaut, as \"o.
+
+\verb"\#" prints a pound sign: \#.
+
+\verb"\$" prints a dollar sign: \$.
+
+\verb"\%" prints a percent sign: \%.
+
+\verb"\&" prints an ampersand: \&.
+
+\verb"\'" in \verb"tabbing" environment moves current column to the right
+ of the previous column. Elsewhere, acute accent, as \'o.
+
+\verb"\(" --- start math mode. Same as \verb"\begin{math}" or \verb"$".
+
+\verb"\)" --- end math mode. Same as \verb"\end{math}" or \verb"$".
+
+\verb"\*" is a discretionary multiplication sign, at which a line break
+ is allowed.
+
+\verb"\+" moves left margin to the right by one tab stop.
+ Begin tabbed line.
+
+\verb"\," --- thin space $ = \frac{1}{6} $ quad;
+ \verb"xx\,x" yields $xx\,x$. It is not restricted to math mode.
+
+\verb"\-" in \verb"tabbing" environment, moves left margin to the left
+ by one tab stop. Elsewhere, optional hyphenation.
+
+\verb"\." puts a dot accent over a letter, as \.o.
+
+\verb"\/" inserts italics adjustment space.
+
+\verb"\:" --- medium space $ = \frac{2}{9} $ quad;
+ \verb"xx\:x" yields $xx\:x$ (math mode).
+
+\verb"\;" --- thick space $ = \frac{5}{18} $ quad;
+ \verb"xx\;x" yields $xx\;x$ (math mode).
+
+\verb"\<" in \verb"tabbing" environment, puts text to left of local
+ left margin.
+
+\verb"\=" in \verb"tabbing" environment, sets a tab stop.
+ Elsewhere, makes a macron accent, as \=o.
+
+\verb"\>" in \verb"tabbing" environment is a forward tab. Otherwise,
+ medium space $ = \frac{2}{9}$ quad (math mode).
+
+\verb"\@" declares that the period that follows to be a sentence-ending
+ period.
+
+\verb"\[" --- same as \verb"\begin{displaymath}" or \verb"$$".
+
+\verb"\\" terminates a line.
+
+\verb"\\*" terminates a line, but disallows a pagebreak.
+
+\verb"\]" --- same as \verb"\end{displaymath}" or \verb"$$".
+
+\verb"\^" makes a circumflex, as \^o.
+
+\verb"\_" is an underscore, as in {\em hours\_worked}.
+
+\verb"\`" in \verb"tabbing" environment moves all text which follows (up to
+ \verb"\\") to the right margin. Elsewhere, grave accent
+ , as \`o.
+
+\verb"\{" prints a curly left brace: \{.
+
+\verb"\|" is $\|$ (math mode).
+
+\verb"\}" prints a curly right brace: \}.
+
+\verb"\~" prints a tilde, as \~n.
+
+%aaa
+\verb"\aa" is \aa. \verb"\AA" is \AA.
+
+\verb"\acute" makes an acute accent: $\acute a$ (math mode).
+
+\verb"\addcontentsline{toc}{section}{name}" adds the command
+ \verb"\contentsline{section}{name}" to the \verb".toc" file.
+
+\verb"\addtocontents{toc}{text}" writes \verb"text" to the \verb".toc" file.
+
+\verb"\addtocounter{name}{amount}" adds \verb"amount" to counter \verb"name".
+
+\verb"\addtolength{\nl}{length}" adds \verb"length" to length command
+ \verb"\nl". See also \verb"\setlength", \verb"\newlength",
+ \verb"\settowidth".
+
+\verb"\ae" is \ae. \verb"\AE" is \AE.
+
+\verb"\aleph" is $\aleph$ (math mode).
+
+\verb"\alph{counter}" makes numbering tokens for \verb"counter"
+ be lower-case letters. \verb"\Alph{counter}" makes tokens upper-case.
+
+\verb"\alpha" is $\alpha$ (math mode).
+
+\verb"\amalg" is $\amalg$ (math mode).
+
+\verb"\and" separates multiple authors for the \verb"\maketitle" command.
+
+\verb"\angle" is $\angle$ (math mode).
+
+\verb"\appendix" starts appendices.
+
+\verb"\approx" is $\approx$ (math mode).
+
+\verb"\arabic{counter}" makes numbering tokens for \verb"counter"
+ be arabic numerals 1, 2, etc.
+
+\verb"\arccos" is $\arccos$ (math mode).
+
+\verb"\arcsin" is $\arcsin$ (math mode).
+
+\verb"\arctan" is $\arctan$ (math mode).
+
+\verb"\arg" is $\arg$ (math mode).
+
+\verb"\arraycolsep" --- width of the space between columns in an
+ \verb"array" environment.
+
+\verb"\arrayrulewidth" --- width of the rule created in \verb"tabular"
+ or \verb"array" environment by \verb"|", \verb"\hline", or
+ \verb"\vline".
+
+\verb"\ast" is $\ast$ (math mode).
+
+\verb"\asymp" is $\asymp$ (math mode).
+
+\verb"\author{names}" declares author(s) for the \verb"\maketitle" command.
+
+%bbb
+\verb"\b" is a ``bar-under'' accent, as \b o.
+
+\verb"\backslash" is $\backslash$ (math mode).
+
+\verb"\bar" puts a macron over a letter: $\bar a$ (math mode).
+
+\verb"\baselineskip" --- distance from bottom of one line of a paragraph to
+ bottom of the next line.
+
+\verb"\baselinestretch" --- factor by which \verb"baselineskip" is multiplied
+ each time a type size changing command is executed.
+
+\verb"\begin{"{\it environment\/}\verb"}" --- always paired with
+ \ifsmallcrib \relax \else \linebreak \fi
+ \verb"\end{"{\it environment\/}\verb"}".
+ Following are the assorted environments.
+
+\verb"\begin{abstract}" starts an environment for producing an abstract.
+
+\verb"\begin{array}{lrc}" starts array environment with 3 columns,
+ left-justified, right-justified, and centered. Separate columns
+ with \&, and end lines with \verb"\\". \verb"@{text}" between
+ \verb"l", \verb"r" or \verb"c" arguments puts \verb"text"
+ between columns.
+
+\verb"\begin{center}" starts an environment in which every line is centered.
+ End lines with \verb"\\".
+
+\verb"\begin{description}" starts a labeled list. Items are
+ indicated by \verb"\item[label]".
+
+\verb"\begin{displaymath}" sets mathematics on lines of its own.
+ Same as \verb"\[" or \verb"$$".
+
+\verb"\begin{document}" starts the actual text of a document. Required.
+
+\verb"\begin{enumerate}" starts a numbered list.
+
+\verb"\begin{eqnarray}" starts a \verb"displaymath" environment in which
+ more than one equation can be accommodated. Separate equations
+ with \verb"\\" or \verb"\\*"; use \verb"\nonumber" to suppress
+ numbering a particular equation.
+
+\verb"\begin{eqnarray*}" begins an environment like the \verb"eqnarray"
+ environment except that the equations aren't numbered.
+
+\verb"\begin{equation}" starts a \verb"displaymath" environment and adds
+ an equation number.
+
+\verb"\begin{figure}[pos]" begins a floating environment, which may be
+ optionally placed at \verb"pos" (see \verb"positions" on
+ page~\pageref{pos-ref}). Document styles \verb"report" and
+ \verb"article" use the default \verb"tbp".
+
+\verb"\begin{figure*}[pos]" begins a two-column-wide figure.
+ See \verb"\begin{figure}".
+
+\verb"\begin{flushleft}" starts environment with ragged right-hand margin.
+ Separate lines with \verb"\\". See \verb"\raggedright".
+
+\verb"\begin{flushright}" starts environment with ragged left-hand margin.
+ Separate lines with \verb"\\". See \verb"\raggedleft".
+
+\verb"\begin{itemize}" starts a ``bulleted'' ($\bullet$) list.
+ Start each item with \verb"\item".
+
+\verb"\begin{list}{labeling}{spacing}" starts a general list environment.
+ \verb"labeling" specifies how items are labeled when \verb"\item"
+ has no argument. \verb"spacing" is an optional list of
+ spacing parameters.
+
+\verb"\begin{math}" starts a math display like this: $x^2 + y^2$, within text.
+ Same as \verb"$".
+
+\verb"\begin{minipage}[pos]{vsize}" starts a box of height \verb"vsize".
+ Text will be positioned according to \verb"pos" (see \verb"positions"
+ on page~\pageref{pos-ref}).
+
+\verb"\begin{picture}"$(x,y)(x_l,y_l)$ starts a picture environment whose
+ width is $x$ units, height is $y$ units, and lower-left corner is
+ the point $(x_l,y_l)$. Set units with \verb"\unitlength".
+
+\verb"\begin{quotation}" starts an environment with wider margins, normal
+ paragraph indenting, and offset from the text at top and bottom.
+
+\verb"\begin{quote}" starts an environment with wider margins, no paragraph
+ indenting, and offset from the text at top and bottom.
+
+\verb"\begin{tabbing}" starts a columnar environment. Use commands
+ \verb"\=" (set tab), \verb"\>" (tab), \verb"\<" (backtab),
+ \verb"\+" (indent one tab stop), \verb"\-" (outdent one tab stop),
+ \verb"\`" (flush right), \verb"\'" (flush left), \verb"\pushtabs",
+ \verb"\poptabs", \verb"\kill", \verb"\\".
+
+\verb"\begin{table}[pos]" begins a floating environment, which may be
+ optionally placed at \verb"pos" (see \verb"positions" on
+ page~\pageref{pos-ref}). Document styles \verb"report" and
+ \verb"article" use the default \verb"tbp".
+
+\verb"\begin{table*}[pos]" begins a two-column-wide table.
+ See \verb"\begin{table}".
+
+\verb"\begin{tabular}{arg}" starts an array environment which can be used
+ in or out of math mode. \verb"arg" contains column text positioning
+ commands \verb"r", \verb"l", \verb"c",
+ \verb"@{...}", \verb"p{length}" (see \verb"positions" on
+ page~\pageref{pos-ref}). \ifsmallcrib \relax \else \linebreak \fi
+ \verb"|" produces vertical line
+ between columns. \verb"*{7}{r|l|}" repeats that entry 7 times.
+
+\verb"\begin{theorem}" --- see \verb"\newtheorem".
+
+\verb"\begin{titlepage}" is an environment with no page number, and causes
+ following page to be numbered ``1''.
+
+\verb"\begin{verbatim}" starts an environment which will be typeset exactly
+ as you type it, carriage returns and all, usually in \verb"typewriter"
+ font.
+
+\verb"\begin{verse}" starts an environment for poetry with wider margins,
+ no paragraph indenting, and ragged right margin.
+
+\verb"\beginlistoffigures" produces the heading for the list of figures.
+
+\verb"\beginlistoftables" produces the heading for the list of tables.
+
+\verb"\begintableofcontents" produces the heading for the table of contents.
+
+\verb"\beta" is $\beta$ (math mode).
+
+\verb"\bf" switches to {\bf bold face} type.
+
+\verb"\bibitem{ref} text" creates a bibliography entry \verb"text",
+ numbers it, and labels it with reference label \verb"ref".
+
+\verb"\bibliography{file}" --- insert bibliography from file \verb"name.bib"
+ at this point in text.
+
+\verb"\bibliographystyle{style}" --- a format specifier, like
+ \verb"\documentstyle".
+
+\verb"\big" makes a large delimiter (as an ordinary variable); \verb"\Big"
+ is slightly larger (math mode).
+
+\verb"\bigcap" is $\bigcap$ (math mode).
+
+\verb"\bigcirc" is $\bigcirc$ (math mode).
+
+\verb"\bigcup" is $\bigcup$ (math mode).
+
+\verb"\bigg" makes a large delimiter (as an ordinary variable), slightly
+ larger than \verb"\Big"; \verb"\Bigg" is slightly larger (math mode).
+
+\verb"\biggl" opens a large left-hand delimiter, larger than \verb"\Bigl";
+ \verb"\Biggl" is slightly larger (math mode).
+
+\verb"\biggm" indicates a large delimiter in the middle of a formula, larger
+ than \verb"\Bigm"; \verb"\Biggm" is slightly larger (math mode).
+
+\verb"\biggr" opens a large right-hand delimiter, larger than \verb"\Bigr";
+ \verb"\Biggr" is slightly larger (math mode).
+
+\verb"\bigl" opens a large left-hand delimiter; \verb"\Bigl" is slightly
+ bigger (math mode).
+
+\verb"\bigm" indicates a large delimiter in the middle of a formula;
+ \verb"\Bigm" is slightly bigger (math mode).
+
+\verb"\bigodot" is $\bigodot$ (math mode).
+
+\verb"\bigoplus" is $\bigoplus$ (math mode).
+
+\verb"\bigotimes" is $\bigotimes$ (math mode).
+
+\verb"\bigr" opens a large right-hand delimiter; \verb"\Bigr" is slightly
+ bigger (math mode).
+
+\verb"\bigtriangledown" is $\bigtriangledown$ (math mode).
+
+\verb"\bigtriangleup" is $\bigtriangleup$ (math mode).
+
+\verb"\bigskip" --- vertical space \verb"\bigskipamount"; big skip between
+ paragraphs (cf.\ \verb"\smallskip" and \verb"\medskip").
+
+\verb"\bigskipamount" --- default length for \verb"\bigskip".
+
+\verb"\bigsqcup" is $\bigsqcup$ (math mode).
+
+\verb"\biguplus" is $\biguplus$ (math mode).
+
+\verb"\bigvee" is $\bigvee$ (math mode).
+
+\verb"\bigwedge" is $\bigwedge$ (math mode).
+
+\verb"\boldmath" changes math italics and math symbols to boldface. Should
+ be used {\em outside} of math mode.
+
+\verb"\bot" is $\bot$ (math mode).
+
+\verb"\bottomfraction" --- maximum fraction of page occupied by floats at
+ the bottom.
+
+\verb"\bowtie" is $\bowtie$ (math mode).
+
+\verb"\Box" is $\Box$ (math mode).
+
+\verb"\breve" makes a breve accent: $\breve a$ (math mode).
+
+\verb"\bullet" is $\bullet$ (math mode).
+
+%ccc
+\verb"\c" is a cedilla, as \c c.
+
+\verb"\cap" is $\cap$ (math mode).
+
+\verb"\caption[loftitle]{text}" creates a numbered caption in a \verb"figure"
+ or \verb"table" environment. Optional \verb"loftitle" contains
+ entry for the list of figures if different from \verb"text".
+
+\verb"\cdot" is $\cdot$ (math mode).
+
+\verb"\cdots" makes three dots centered on the line: $\cdots$
+ (cf.\ \verb"\ldots") (math mode).
+
+\verb"\centering" declares that all text following is to be centered
+ (cf.\ \verb"\begin{center}").
+
+\verb"\chapter[toctitle]{text}" begins a new section, automatically headed and
+ numbered. Optional \verb"toctitle" contains entry for the
+ table of contents if different from \verb"text".
+
+\verb"\chapter*{title}" is like \verb"\chapter{title}", but adds no
+ chapter number or table of contents entry.
+
+\verb"\check" makes a h\'a\v cek, as $\check a$ (math mode).
+
+\verb"\chi" is $\chi$ (math mode).
+
+\verb"\circ" is $\circ$ (math mode).
+
+\verb"\circle{diameter}" as a valid argument for \verb"\put" in a
+ \verb"picture" environment, draws a circle.
+
+\verb"\circle*{diameter}" is like \verb"\circle", but draws a solid circle.
+
+\verb"\cite[subcit]{ref}" produces a reference, in square brackets, to a
+ bibliographic item created with \verb"\bibitem{ref}".
+ optional sub-citation \verb"subcit" can be inserted in the entry.
+
+\verb"\cleardoublepage" forces next page to be a right-hand, odd-numbered page.
+
+\verb"\clearpage" ends a page where it is, and puts pending figures or tables
+ on separate float pages with no text.
+
+\verb"\cline{i-j}" draws a horizontal line across columns \verb"i" through
+ \verb"j" inclusive in \verb"array" or \verb"tabular" environments.
+
+\verb"\clubsuit" is $\clubsuit$ (math mode).
+
+\verb"\columnsep" --- distance between columns in two-column text.
+
+\verb"\columnseprule" --- width of the rule between columns on two-column
+ pages.
+
+\verb"\columnwidth" --- width of the current column. Equals \verb"\textwidth"
+ in single-column text.
+
+\verb"\cong" is $\cong$ (math mode).
+
+\verb"\contentsline{sectyp}{...{num}title}{page}" is the command inserted into
+ the \verb".toc" file for a table of contents entry.
+
+\verb"\coprod" is $\coprod$ (math mode).
+
+\verb"\copyright" is \copyright.
+
+\verb"\cos" is $\cos$ (math mode).
+
+\verb"\cosh" is $\cosh$ (math mode).
+
+\verb"\cot" is $\cot$ (math mode).
+
+\verb"\coth" is $\coth$ (math mode).
+
+\verb"\csc" is $\csc$ (math mode).
+
+\verb"\cup" is $\cup$ (math mode).
+
+%ddd
+\verb"\d" is a ``dot under'' accent, as \d o.
+
+\verb"\dag" is \dag.
+
+\verb"\dagger" is $\dagger$ (math mode).
+
+\verb"\dashbox{dwid}(width,height)[pos]{text}" creates a dashed rectangle
+ around \verb"text" in a \verb"picture" environment. Dashes are
+ \verb"dwid" units wide; dimensions of rectangle are \verb"width"
+ and \verb"height"; text is positioned at optional \verb"pos"
+ (see \verb"positions"\ on page~\pageref{pos-ref}).
+
+\verb"\dashv" is $\dashv$ (math mode).
+
+\verb"\date{adate}" declares the date for the \verb"\maketitle"
+ command. The default is \verb"\today".
+
+\verb"\day" --- current day of the month.
+
+\verb"\dblfloatpagefraction" --- minimum fraction of a float page that must
+ be occupied by floats, for two-column float pages.
+
+\verb"\dblfloatsep" --- distance between floats at the top or bottom of a
+ two-column float page.
+
+\verb"\dbltextfloatset" --- distance between double-width floats at the top
+ or bottom of a two-column page, and the text on that page.
+
+\verb"\ddag" is \ddag.
+
+\verb"\ddagger" is $\ddagger$ (math mode).
+
+\verb"\ddot" makes a dieresis over a letter: $\ddot a$ (math mode).
+
+\verb"\deg" is $\deg$ (math mode).
+
+\verb"\delimiterfactor" --- ratio for variable delimiters, times 1000.
+
+\verb"\delta" is $\delta$; \verb"\Delta" is $\Delta$ (math mode).
+
+\verb"\det" is $\det$ (math mode).
+
+\verb"\diamond" is $\diamond$. \verb"\Diamond" is $\Diamond$ (both math mode).
+
+\verb"\diamondsuit" is $\diamondsuit$ (math mode).
+
+\verb"\dim" is $\dim$ (math mode).
+
+\verb"\displaystyle" switches to \verb"displaymath" or \verb"equation"
+ environment typesetting.
+
+\verb"\div" is $\div$ (math mode).
+
+\verb"\documentstyle[substy]{sty}" determines default font, headings, etc. for
+ document of style \verb"sty" (and optional substyle \verb"substy")
+ Styles: \verb"report", \verb"article", \verb"letter",
+ \verb"slides". Substyles: \verb"11pt", \verb"12pt", \verb"twocolumn",
+ \verb"twoside", \verb"\fleqn", \verb"\draft", \verb"acm",
+ \verb"leqno" .
+
+\verb"\dot" makes a dot over a letter: $\dot a$ (math mode).
+
+\verb"\doteq" is $\doteq$ (math mode).
+
+\verb"\dotfill" expands to fill horizontal space with row of dots.
+
+\verb"\doublerulesep" --- horizontal distance between vertical rules created
+ by \verb"||" in \verb"tabular" or \verb"array" environment.
+
+\verb"\downarrow" is $\downarrow$; \verb"\Downarrow" is $\Downarrow$
+ (math mode).
+
+%eee
+\verb"\ell" is $\ell$ (math mode).
+
+\verb"\em" toggles between roman and {\em italic} fonts for {\em emphasis}.
+
+\verb"\emptyset" is $\emptyset$ (math mode).
+
+\verb"\end{"{\it environment\/}\verb"}" ends an environment begun by
+ \verb"\begin{"{\it environment\/}\verb"}" (q.v.).
+
+\verb"\epsilon" is $\epsilon$ (math mode).
+
+\verb"\equiv" is $\equiv$ (math mode).
+
+\verb"\eta" is $\eta$ (math mode).
+
+\verb"\evensidemargin" --- distance between left side of page and text's
+ normal left margin, for even-numbered pages in two-sided printing.
+
+\verb"\exists" is $\exists$ (math mode).
+
+\verb"\exp" is $\exp$ (math mode).
+
+%fff
+\verb"\fbox{text}" makes a \fbox{framed box} around \verb"text".
+
+\verb"\fboxrule" --- thickness of ruled frame for \verb"\fbox" and
+ \verb"\framebox".
+
+\verb"\fboxsep" --- space between frame and text for \verb"\fbox" and
+ \verb"\framebox".
+
+\verb"\flat" is $\flat$ (math mode).
+
+\verb"\floatpagefraction" --- minimum fraction of a float page occupied by
+ floats.
+
+\verb"\floatsep" --- distance between floats that appear at the top
+ or bottom of a text page.
+
+\verb"\flushbottom" causes pages to be stretched to \verb"textheight".
+
+\verb"\fnsymbol{counter}" makes numbering tokens for \verb"counter"
+ be ``footnote symbols''.
+
+\verb"\footheight" --- height of box at bottom of page that holds page number.
+
+\verb"\footnote{text}" creates a footnote of \verb"text".
+
+\verb"\footnotemark" puts a footnote number into the text.
+
+\verb"\footnotesep" --- height of strut placed at beginning of footnote.
+
+\verb"\footnotesize" switches to footnote-sized type.
+
+\verb"\footskip" --- vertical distance between bottom of last line of text
+ and bottom of page footing.
+
+\verb"\footnotetext{text}" specifies the text for a footnote which was
+ indicated by a \verb"\footnotemark".
+
+\verb"\forall" is $\forall$ (math mode).
+
+\verb"\frac{numerator}{denominator}" produces a fraction in \verb"math"
+ environments.
+
+\verb"\frame{text}" makes a framed (outlined) box around \verb"text", with
+ no margin between the text and the frame.
+
+\verb"\framebox[size][pos]{text}" produces a \fbox{framed box} of dimension
+ \verb"size" containing \verb"text", optionally \verb"pos"itioned
+ \verb"l" or \verb"r". \ifsmallcrib \relax \else \linebreak \fi
+ In \verb"picture" environment,
+ \verb"\framebox(width,height)[pos]{text}" creates a rectangle
+ around \verb"text"; dimensions of rectangle are \verb"width"
+ and \verb"height"; text is positioned at optional \verb"pos"
+ (see \verb"positions" on page~\pageref{pos-ref}).
+
+\verb"\frown" is $\frown$ (math mode).
+
+\verb"\fussy" is the default declaration for the line-breaking algorithm.
+ Opposite is \verb"\sloppy".
+
+%ggg
+\verb"\gamma" is $\gamma$; \verb"\Gamma" is $\Gamma$ (math mode).
+
+\verb"\gcd" is $\gcd$ (math mode).
+
+\verb"\ge" is $\ge$ (math mode).
+
+\verb"\geq" is $\geq$ (math mode).
+
+\verb"\gets" is $\gets$ (math mode).
+
+\verb"\gg" is $\gg$ (math mode).
+
+\verb"\glossary{text}" appends \verb"text" to the \verb".glo" file
+ by writing a \verb"\glossaryentry" command.
+
+\verb"\glossaryentry{text}{ref}" is written to the \verb".glo" file for
+ \verb"\glossary{text}" occuring at reference \verb"ref".
+
+\verb"\grave" makes a grave accent: $\grave a$ (math mode).
+
+%hhh
+\verb"\H" prints a long Hungarian umlaut, as \H o.
+
+\verb"\hat" makes a circumflex: $\hat a$ (math mode).
+
+\verb"\hbar" is $\hbar$ (math mode).
+
+\verb"\head{text}" defines headings for the \verb"myheadings" page style.
+
+\verb"\headheight" --- height of box at top of page that holds running head.
+
+\verb"\headsep" --- vertical distance between bottom of head and top of text.
+
+\verb"\heartsuit" is $\heartsuit$ (math mode).
+
+\verb"\hfill" expands to fill horizontal space available.
+
+\verb"\hline" draws a horizontal line across all columns of a \verb"tabular"
+ or \verb"array" environment.
+
+\verb"\hom" is $\hom$ (math mode).
+
+\verb"\hookleftarrow" is $\hookleftarrow$ (math mode).
+
+\verb"\hookrightarrow" is $\hookrightarrow$ (math mode).
+
+\verb"\hrulefill" expands to fill horizontal space with horizontal rule.
+
+\verb"\hspace{len}" leaves a horizontal space of dimension \verb"len".
+
+\verb"\hspace*{len}" is like \verb"\hspace{len}" but is not removed at the
+ end of a line.
+
+\verb"\huge" switches to a very large typeface.
+
+\verb"\hyphenation{wordlist}" declares hyphenation as indicated;
+ \verb"wordlist" contains words separated by spaces, with hyphens
+ indicated (e.g. ``\verb"aard-vark cal-i-bra-tion"'').
+
+%iii
+\verb"\i" is \i.
+
+\verb"\iff" is $\iff$ (math mode).
+
+\verb"\Im" is $\Im$ (math mode).
+
+\verb"\imath" is $\imath$ (math mode).
+
+\verb"\in" is $\in$ (math mode).
+
+\verb"\include{filename}" brings in \verb"filename" text at that point.
+
+\verb"\includeonly{file1,file2,...}" limits recognition of \verb"\include"
+ files.
+
+\verb"\index{text}" appends \verb"text" to the \verb".idx" file
+ by writing an \verb"\indexentry" command.
+
+\verb"\indexentry{text}{ref}" is written to the \verb".idx" file for
+ \verb"\index{text}" occuring at reference \verb"ref".
+
+\verb"\indexspace" puts blank space before first index entry starting with
+ a new letter.
+
+\verb"\inf" is $\inf$ (math mode).
+
+\verb"\infty" is $\infty$ (math mode).
+
+\verb"\input{file}" brings in text from \verb"file.tex" at that point.
+
+\verb"\int" is $\int$ (math mode).
+
+\verb"\intextsep" --- vertical space placed above and below float in middle
+ of text.
+
+\verb"\iota" is $\iota$ (math mode).
+
+\verb"\it" switches to {\it Italic\/} type.
+
+\verb"\item[text]" indicates a list entry. \verb"text" is optional, used in
+ \verb"description" environment.
+
+\verb"\itemindent" --- extra indentation before label in list item. Default
+ is \verb"0mm".
+
+\verb"\itemsep" --- vertical space between successive list items.
+
+%jjj
+\verb"\j" is \j.
+
+\verb"\jmath" is $\jmath$ (math mode).
+
+\verb"\Join" is $\Join$ (math mode).
+
+%kkk
+\verb"\kappa" is $\kappa$ (math mode).
+
+\verb"\ker" is $\ker$ (math mode).
+
+\verb"\kill" --- in a \verb"\tabbing" environment, deletes previous line so
+ tabs can be set without outputting text.
+
+%lll
+\verb"\l" is \l. \verb"\L" is \L.
+
+\verb"\label{text}" provides a reference point that is accessed with
+ \verb"\ref{text}" or \verb"\pageref{text}".
+
+\verb"\labelwidth" --- width of box containing list item label.
+
+\verb"\lambda" is $\lambda$; \verb"\Lambda" is $\Lambda$ (math mode).
+
+\verb"\land" is $\land$ (math mode).
+
+\verb"\langle" is $\langle$ (math mode).
+
+\verb"\large", \verb"\Large", and \verb"\LARGE" switch to successively
+ larger than \verb"\normalsize" type sizes.
+
+\verb"\lbrace" is $\lbrace$ (math mode).
+
+\verb"\lbrack" is $\lbrack$ (math mode).
+
+\verb"\lceil" is $\lceil$ (math mode).
+
+\verb"\ldots" makes three dots at the base of the line: \ldots
+ (cf.\ \verb"\cdots").
+
+\verb"\le" is $\le$ (math mode).
+
+\verb"\leadsto" is $\leadsto$ (math mode).
+
+\verb"\left*" (where \verb"*" is a delimiter) must be paired with
+ \verb"\right*" (not necessarily using the same delimiter).
+ `.' acts as a null delimiter (math mode).
+
+\verb"\leftarrow" is $\leftarrow$. \verb"\Leftarrow" is $\Leftarrow$
+ (math mode).
+
+\verb"\leftharpoondown" is $\leftharpoondown$ (math mode).
+
+\verb"\leftmargin", in \verb"list" environment, horizontal distance between left
+ margin of enclosing environment and left margin of list.
+ Settable for nesting levels 1 through 6, as \verb"\leftmargini"
+ through \verb"\leftmarginvi".
+
+\verb"\leftharpoonup" is $\leftharpoonup$ (math mode).
+
+\verb"\leftrightarrow" is $\leftrightarrow$. \verb"\Leftrightarrow" is
+ $\Leftrightarrow$ (math mode).
+
+\verb"\leq" is $\leq$ (math mode).
+
+\verb"\lfloor" is $\lfloor$ (math mode).
+
+\verb"\lg" is $\lg$ (math mode).
+
+\verb"\lhd" is $\lhd$ (math mode).
+
+\verb"\lim" is $\lim$ (math mode).
+
+\verb"\liminf" is $\liminf$ (math mode).
+
+\verb"\limsup" is $\limsup$ (math mode).
+
+\verb"\line(x,y){len}" in \verb"picture" environment, in \verb"\put" command,
+ draws line from \verb"\put" argument with length \verb"len" and
+ slope \verb"(x,y)".
+
+\verb"\linebreak[n]" forces a line to break exactly at this point, and
+ adjusts line just terminated (cf.\ \verb"newline"). \verb"n" is
+ optional: 0 is an optional break, 4 is a mandatory
+ break, 1, 2 and 3 are intermediate levels of insistency.
+\label{break-ref}
+
+\verb"\linethickness{dimen}" sets the thickness for all lines in a
+ \verb"picture".
+
+\verb"\linewidth" is the width of the current line in a paragraph.
+
+\verb"\listoffigures" begins a list of figures with heading.
+
+\verb"\listoftables" begins a list of tables with heading.
+
+\verb"\listparindent" --- extra indentation added to first line of every
+ paragraph of an item after the first, in \verb"list" environment.
+
+\verb"\ll" is $\ll$ (math mode).
+
+\verb"\ln" is $\ln$ (math mode).
+
+\verb"\lnot" is $\lnot$ (math mode).
+
+\verb"\log" is $\log$ (math mode).
+
+\verb"\longleftarrow" is $\longleftarrow$; \verb"\Longleftarrow" is
+ $\Longleftarrow$ (math mode).
+
+\verb"\longleftrightarrow" is $\longleftrightarrow$;
+ \verb"\Longleftrightarrow" is $\Longleftrightarrow$ (math mode).
+
+\verb"\longmapsto" is $\longmapsto$ (math mode).
+
+\verb"\longrightarrow" is $\longrightarrow$; \verb"\Longrightarrow"
+ is $\Longrightarrow$ (math mode).
+
+\verb"\lor" is $\lor$ (math mode).
+
+\verb"\lq" is a left-quote: \lq.
+
+%mmm
+\verb"\makebox[size][pos]{text}" creates a box of dimension \verb"size"
+ containing \verb"text" at optional \verb"pos".
+ \verb"\makebox(width,height)[pos]{text}" puts \verb"text" in a box;
+ dimensions of box are \verb"width" and \verb"height"; \verb"text"
+ is positioned at optional \verb"pos"
+ (see \verb"positions" on page~\pageref{pos-ref}).
+
+\verb"\makeglossary" enables writing of \verb"\glossaryentry" commands to
+ a \verb".glo" file.
+
+\verb"\makeindex" enables writing of \verb"\indexentry" commands to a
+ \verb".idx" file.
+
+\verb"\maketitle" produces a title with \verb"\title", \verb"\author",
+ and, optionally, \verb"\date".
+
+\verb"\mapsto" is $\mapsto$ (math mode).
+
+\verb"\marginpar{text}" puts \verb"text" in the margin as a note.
+
+\verb"\marginparpush" --- minimum amount of vertical space between two
+ marginal notes.
+
+\verb"\marginparsep" --- horizontal space between margin and marginal note.
+
+\verb"\marginparwidth" --- width of a marginal note.
+
+\verb"\markboth{lhd}{rhd}" defines the left-hand heading \verb"lhd" and
+ the right-hand heading \verb"rhd" for the \verb"headings" and
+ \verb"myheadings" page styles.
+
+\verb"\markright{rhd}" defines the right-hand heading \verb"rhd" for the
+ \verb"headings" and \verb"myheadings" page styles.
+
+\verb"\max" is $\max$ (math mode).
+
+\verb"\mbox{text}" places \verb"text" into a horizontal box.
+
+\verb"\medskip" --- vertical space \verb"\medskipamount"; medium skip between
+ paragraphs (cf.\ \verb"\smallskip" and \verb"\bigskip").
+
+\verb"\medskipamount" --- default length for \verb"\medskip".
+
+\verb"\mho" is $\mho$ (math mode).
+
+\verb"\mid" is $\mid$ (math mode).
+
+\verb"\min" is $\min$ (math mode).
+
+\verb"\mit" is ``math italic'' as in ${\mit \Pi}$ (math mode).
+
+\verb"\models" is $\models$ (math mode).
+
+\verb"\month" --- current month of the year.
+
+\verb"\mp" is $\mp$ (math mode).
+
+\verb"\mu" is $\mu$ (math mode).
+
+\verb"\multicolumn{noc}{fmt}{text}" in \verb"tabular" environment puts
+ \verb"text" across \verb"noc" columns using positioning format
+ \verb"fmt" (\verb"c", \verb"r", \verb"l", and/or \verb"|").
+
+\verb"\multiput("$x,y$\verb")("$\Delta x,\Delta y$\verb"){n}{obj}" is
+ \ifsmallcrib \relax \else \linebreak \fi
+ \verb"\put("$x,y$\verb"){obj}" \newline
+ \verb"\put("$x+\Delta x,y+\Delta y$\verb"){obj}" \newline
+ $\cdots$\newline
+ \verb"\put("$x+(n-1)\Delta x,y+(n-1)\Delta y$\verb"){obj}".
+
+%nnn
+\verb"\nabla" is $\nabla$ (math mode).
+
+\verb"\natural" is $\natural$ (math mode).
+
+\verb"\ne" is $\ne$ (math mode).
+
+\verb"\nearrow" is $\nearrow$ (math mode).
+
+\verb"\neg" is $\neg$ (math mode).
+
+\verb"\neq" is $\neq$ (math mode).
+
+\verb"\newcommand{\cs}[narg]{def}" defines a new control sequence \verb"\cs"
+ with definition \verb"def". Optionally, \verb"narg" is the number
+ of arguments, indicated in \verb"def" as \verb"#1", \verb"#2",
+ etc..
+
+\verb"\newcounter{counter}[name]" defines a \verb"counter" optionally
+ to be zeroed whenever the \verb"name" counter is incremented.
+
+\verb"\newenvironment{envname}[narg]{def1}{def2}" defines a new environment,
+ optionally with some number of arguments \verb"narg". \verb"def1"
+ is executed when the environment in entered and \verb"def2" is
+ executed when it is exited.
+
+\verb"\newfont{cs}{name}" defines a control sequence \verb"\cs" that
+ chooses the font \verb"name".
+
+\verb"\newlength{\nl}" sets up \verb"\nl" as a length of \verb"0in". See
+ also \verb"\setlength", \verb"\addtolength", \verb"\settowidth".
+
+\verb"\newline" breaks a line right where it is, with no stretching of
+ terminated line (cf.\ \verb"\linebreak").
+
+\verb"\newpage" ends a page where it appears. (cf.\ \verb"\clearpage").
+
+\verb"\newsavebox{\binname}" declares a new \verb"bin" to hold a
+ \verb"\savebox".
+
+\verb"\newtheorem{env}[env2]{label}[sectyp]" defines a new theorem environment
+ \verb"env" (optionally with the same numbering scheme as environment
+ \verb"env2") with labels \verb"label". Optionally, theorem numbers
+ can be related to document section \verb"sectyp".
+
+\verb"\ni" is $\ni$ (math mode).
+
+\verb"\nofiles" suppresses writing of auxiliary files \verb".idx",
+ \verb".toc", etc..
+
+\verb"\noindent" suppresses indentation of first line of paragraph.
+
+\verb"\nolinebreak[n]" prevents a line break at that point
+ (cf.\ \verb"\linebreak" on page~\pageref{break-ref}).
+
+\verb"\nonumber" is used in an \verb"eqnarray" environment to suppress
+ equation numbering.
+
+\verb"\nopagebreak[n]" prevents a page break at that point
+ (cf.\ \verb"\linebreak" on page~\pageref{break-ref}).
+
+\verb"\normalmarginpar" is default declaration for placement of marginal
+ notes (cf.\ \verb"\reversemarginpar").
+
+\verb"\normalsize" is the default type size for the document.
+
+\verb"\not" puts a slash through a relational operator:
+ \verb"\not=" is $\not=$ (math mode).
+
+\verb"\notin" is $\notin$ (math mode).
+
+\verb"\nu" is $\nu$ (math mode).
+
+\verb"\nwarrow" is $\nwarrow$ (math mode).
+
+%ooo
+\verb"\o" is \o. \verb"\O" is \O.
+
+\verb"\obeycr" makes embedded carriage returns act like line terminators.
+
+\verb"\oddsidemargin" --- distance between left side of page and text's normal
+ left margin.
+
+\verb"\odot" is $\odot$ (math mode).
+
+\verb"\oe" is \oe. \verb"\OE" is \OE.
+
+\verb"\oint" is $\oint$ (math mode).
+
+\verb"\omega" is $\omega$; \verb"\Omega" is $\Omega$ (math mode).
+
+\verb"\ominus" is $\ominus$ (math mode).
+
+\verb"\onecolumn" sets text in single column (default) (cf.\ \verb"\twocolumn".
+
+\verb"\oplus" is $\oplus$ (math mode).
+
+\verb"\oslash" is $\oslash$ (math mode).
+
+\verb"\otimes" is $\otimes$ (math mode).
+
+\verb"\oval(x,y)" as an argument to \verb"\put" draws an oval x units
+ wide and y units high.
+
+\verb"\overbrace{text}" gives $\overbrace{text}$ (math mode).
+
+\verb"\overline{text}" gives $\overline{text}$ (math mode).
+
+\verb"\owns" is $\owns$ (math mode).
+
+%ppp
+\verb"\P" is \P.
+
+\verb"\pagebreak[n]" forces a page break at that point
+ (cf.\ \verb"\linebreak" on page~\pageref{break-ref}).
+
+\verb"\pagenumbering{style}" determines page number style; \verb"style" may be
+ \verb"arabic" (3), \verb"roman" (iii), \verb"Roman" (III),
+ \verb"alph" (c), \verb"Alph" (C).
+
+\verb"\pageref{text}" is the page number on which \verb"\label{text}" occurs.
+
+\verb"\pagestyle{sty}" determines characteristics of a page's
+ head and foot. \verb"sty" may be \verb"plain" (page number only),
+ \verb"empty" (no page number), \verb"headings" (running headings
+ on each page), \verb"myheadings" (heading determined by
+ \verb"\head{text}").
+
+\verb"\paragraph[toctitle]{text}" begins a new paragraph, automatically headed and
+ numbered. Optional \verb"toctitle" contains entry for the
+ table of contents if different from \verb"text".
+
+\verb"\paragraph*{text}" begins a paragraph and prints a title, but doesn't include
+ a number or make a table of contents entry.
+
+\verb"\parallel" is $\parallel$ (math mode).
+
+\verb"\parbox[pos]{size}{text}" is a box created in paragraph mode. Text is
+ positioned optionally at \verb"pos" (see \verb"positions" on
+ page~\pageref{pos-ref}). Width is \verb"size".
+
+\verb"\parindent" --- horizontal indentation added at beginning of paragraph.
+
+\verb"\parsep" --- extra vertical space between paragraphs within a list item.
+
+\verb"\parskip" --- extra vertical space between paragraphs, normally.
+
+\verb"\parstretch" --- vertical stretch between paragraphs and list items.
+ Normally zero.
+
+\verb"\part[toctitle]{text}" begins a new part, automatically headed and
+ numbered. Optional \verb"toctitle" contains entry for the
+ table of contents if different from \verb"text".
+
+\verb"\part*{text}" begins a part and prints a title, but doesn't include
+ a number or make a table of contents entry.
+
+\verb"\partial" is $\partial$ (math mode).
+
+\verb"\perp" is $\perp$ (math mode).
+
+\verb"\phi" is $\phi$; \verb"\Phi" is $\Phi$ (math mode).
+
+\verb"\pi" is $\pi$; \verb"\Pi" is $\Pi$ (math mode).
+
+\verb"\pm" is $\pm$ (math mode).
+
+\verb"\poptabs" undoes the previous \verb"\pushtabs" command (restore
+ prior tab settings).
+
+\verb"positions", for boxing commands: \verb"t"=top, \verb"b"=bottom,
+ \verb"h"=here, \verb"l"=left, \verb"c"=center, \verb"r"=right,
+ \verb"p"=new page (\verb"figure" environment),
+ \verb"p"=parbox (\verb"tabular" environment), .
+\label{pos-ref}
+
+\verb"\pounds" is \pounds.
+
+\verb"\Pr" is $\Pr$ (math mode).
+
+\verb"\prec" is $\prec$ (math mode).
+
+\verb"\preceq" is $\preceq$ (math mode).
+
+\verb"\prime" is $\prime$ (math mode).
+
+\verb"\prod" is $\prod$ (math mode).
+
+\verb"\propto" is $\propto$ (math mode).
+
+\verb"\protect" permits the use of ``dangerous'' commands in
+ \verb"@"-expressions, or in sectioning command and \verb"\caption"
+ arguments.
+
+\verb"\psi" is $\psi$; \verb"\Psi" is $\Psi$ (math mode).
+
+\verb"\pushtabs" in \verb"tabbing" environment lets you stack tab stop
+ definitions. Undo with \verb"\poptabs".
+
+\verb"\put(x,y){stuff}" is the basic picture-drawing command.
+ \verb"(x,y)" is the {\em reference point}, whose meaning varies
+ for different \verb"stuff". \verb"stuff" may be anything
+ that goes in an \verb"\mbox".
+
+%rrr
+\verb"\raggedbottom" causes pages to assume natural height.
+
+\verb"\raggedleft" declares all text that follows is to be flush against
+ the right margin (cf.\ \verb"\begin{flushright}").
+
+\verb"\raggedright" declares all text that follows is to be flush against
+ the left margin (cf.\ \verb"\begin{flushleft}").
+
+\verb"\raisebox{dim}[d2][d3]{text}" moves \verb"text" up by \verb"dim"
+ (which may be negative). Optional \verb"d2" makes system think
+ that \verb"text" extends \verb"d2" above the baseline (and optionally
+ \verb"d3" below it).
+
+\verb"\rangle" is $\rangle$ (math mode).
+
+\verb"\rbrace" is $\rbrace$ (math mode).
+
+\verb"\rbrack" is $\rbrack$ (math mode).
+
+\verb"\rceil" is $\rceil$ (math mode).
+
+\verb"\Re" is $\Re$ (math mode).
+
+\verb"\ref{text}" is the section number in which \verb"\label{text}" occurs.
+
+\verb"\renewcommand{\cs}[narg]{def}" redefines an old control sequence
+ \verb"\cs" with definition \verb"def". Optionally, \verb"narg" is
+ the number of arguments, indicated in \verb"def" as \verb"#1",
+ \verb"#2", etc..
+
+\verb"\renewenvironment{envname}[narg]{def1}{def2}" redefines an old new
+ environment. See \verb"\newenvironment".
+
+\verb"\restorecr" undoes the \verb"\obeycr" command (makes carriage return
+ a space-producing character).
+
+\verb"\reversemarginpar" causes opposite margin to be used for marginal
+ notes (e.g., left margin on odd-numbered pages).
+
+\verb"\rfloor" is $\rfloor$ (math mode).
+
+\verb"\rhd" is $\rhd$ (math mode).
+
+\verb"\rho" is $\rho$ (math mode).
+
+\verb"\right*" (where \verb"*" is a delimiter) must be paired with
+ \verb"\left*" (not necessarily using the same delimiter).
+ `.' acts as a null delimiter (math mode).
+
+\verb"\rightarrow" is $\rightarrow$. \verb"\Rightarrow" is $\Rightarrow$
+ (math mode).
+
+\verb"\rightharpoondown" is $\rightharpoondown$ (math mode).
+
+\verb"\rightharpoonup" is $\rightharpoonup$ (math mode).
+
+\verb"\rightleftharpoons" is $\rightleftharpoons$ (math mode).
+
+\verb"\rightmargin" --- in \verb"list" environment, horizontal distance
+ between right margin of enclosing environment and right margin of
+ list. Default \verb"0in".
+
+\verb"\rm" switches to {\rm Roman} type.
+
+\verb"\roman{counter}" makes numbering tokens for \verb"counter"
+ be lower-case roman numerals. \verb"\Roman{counter}" gives
+ upper-case roman numerals.
+
+\verb"\rq" is a right-quote: \rq.
+
+\verb"\rule[height]{length}{width}" makes a rectangular blob of ink
+ \verb"length" long, \verb"width" wide, with optional \verb"height"
+ above baseline.
+
+%sss
+\verb"\S" is \S.
+
+\verb"\savebox{\binname}[width][pos]{text}" is exactly like \verb"\makebox"
+ (q.v.), but saves box definition in bin \verb"\binname". Access
+ with \verb"\usebox{\binname}".
+
+\verb"\sbox{\binname}{text}" saves \verb"text" in box \verb"\binname" (see
+ \verb"\savebox", above.).
+
+\verb"\sc" switches to caps and small caps font.
+
+\verb"\scriptscriptstyle" switches to second-level (very small)
+ sub- or superscript-sized typesetting.
+
+\verb"\scriptsize" switches subscript size type.
+
+\verb"\scriptstyle" switches to sub- or superscript-sized typesetting.
+
+\verb"\searrow" is $\searrow$ (math mode).
+
+\verb"\sec" is $\sec$ (math mode).
+
+\verb"\section[toctitle]{text}" begins a new section, automatically headed and
+ numbered. Optional \verb"toctitle" contains entry for the
+ table of contents if different from \verb"text".
+
+\verb"\section*{text}" begins a section, prints a title, but doesn't include
+ a number or make a table of contents entry.
+
+\verb"\setcounter{counter}{value}" resets the value of \verb"counter".
+
+\verb"\setlength{\nl}{length}" sets value of length command \verb"\nl"
+ to \verb"length". See also \verb"\addtolength", \verb"\newlength",
+ \verb"\settowidth".
+
+\verb"\setminus" is $\setminus$ (math mode).
+
+\verb"\settowidth{\nl}{text}" sets value of length command \verb"\nl" to the
+ width of \verb"text". See also \verb"\setlength", \verb"\newlength",
+ \verb"\addtolength".
+
+\verb"\sf" switches to {\sf sans serif} font.
+
+\verb"\sharp" is $\sharp$ (math mode).
+
+\verb"\shortstack[pos]{x\\yy\\zzz}" yields \shortstack{x\\yy\\zzz},
+ a one-column tabular arrangement of its arguments. Optional
+ \verb"pos" can be \verb"l" or \verb"r" for text position.
+
+\verb"\sigma" is $\sigma$; \verb"\Sigma" is $\Sigma$ (math mode).
+
+\verb"\sim" is $\sim$ (math mode).
+
+\verb"\simeq" is $\simeq$ (math mode).
+
+\verb"\sin" is $\sin$ (math mode).
+
+\verb"\sinh" is $\sinh$ (math mode).
+
+\verb"\sl" switches to {\sl slanted\/} typeface.
+
+\verb"\sloppy" relaxes the line-breaking algorithm to allow more or less
+ distance between words. (See \verb"\fussy").
+
+\verb"\small" switches to smaller than \verb"normalsize" typeface.
+
+\verb"\smallint" is $\smallint$ (math mode).
+
+\verb"\smallskip" --- vertical space \verb"\smallskipamount"; small skip
+ between paragraphs (cf.\ \verb"\medskip" and \verb"\bigskip").
+
+\verb"\smallskipamount" --- default length for \verb"\smallskip".
+
+\verb"\smile" is $\smile$ (math mode).
+
+\verb"\spadesuit" is $\spadesuit$ (math mode).
+
+\verb"\sqcap" is $\sqcap$ (math mode).
+
+\verb"\sqcup" is $\sqcup$ (math mode).
+
+\verb"\sqrt[3]{arg}" is $\sqrt[3]{arg}$. \verb"3" (root) is optional.
+
+\verb"\sqsubset" is $\sqsubset$ (math mode).
+
+\verb"\sqsubseteq" is $\sqsubseteq$ (math mode).
+
+\verb"\sqsupset" is $\sqsupset$ (math mode).
+
+\verb"\sqsupseteq" is $\sqsupseteq$ (math mode).
+
+\verb"\ss" is \ss.
+
+\verb"\stackrel{stuff}{delim}" puts \verb"stuff" above the \verb"delim"iter;
+ \verb"\stackrel{f}{\longrightarrow}"\ yields
+ $\stackrel{f}{\longrightarrow}$ (math mode).
+
+\verb"\star" is $\star$ (math mode).
+
+\verb"\stop" --- type this if \TeX{} stops with a \verb"*" and no error
+ message.
+
+\verb"\subparagraph[toctitle]{text}" begins a subparagraphs, automatically headed and
+ numbered. Optional \verb"toctitle" contains entry for the
+ table of contents if different from \verb"text".
+
+\verb"\subparagraph*{text}" begins a subparagraph and prints a title, but doesn't include
+ a number or make a table of contents entry.
+
+\verb"\subsection[toctitle]{text}", \verb"\subsubsection[toctitle]{text}" begin new
+ subsections, automatically headed and numbered. Optional
+ \verb"toctitle" contains entry for the table of contents if
+ different from \verb"text".
+
+\verb"\subsection*{text}", \verb"\subsubsection*{text}" begin subsections,
+ but suppress section number and table of contents entry.
+
+\verb"\subset" is $\subset$ (math mode).
+
+\verb"\subseteq" is $\subseteq$ (math mode).
+
+\verb"\succ" is $\succ$ (math mode).
+
+\verb"\succeq" is $\succeq$ (math mode).
+
+\verb"\sum" is $\sum$ (math mode).
+
+\verb"\sup" is $\sup$ (math mode).
+
+\verb"\supset" is $\supset$ (math mode).
+
+\verb"\supseteq" is $\supseteq$ (math mode).
+
+\verb"\surd" is $\surd$ (math mode).
+
+\verb"\swarrow" is $\swarrow$ (math mode).
+
+\verb"\symbol{cc}" produces the symbol (glyph) character code \verb"cc"
+ in the current font.
+
+%ttt
+\verb"\t" prints a ``tie-after'' accent, as \t oo.
+
+\verb"\tabbingsep" --- distance to left of a tab stop moved by \verb"\'".
+
+\verb"\tabcolsep" --- half the width of the space between columns in
+ \verb"tabular" environment.
+
+\verb"\tableofcontents" produces a table of contents. A \verb".toc" file
+ must have been generated during a previous \LaTeX{} run.
+
+\verb"\tan" is $\tan$ (math mode).
+
+\verb"\tanh" is $\tanh$ (math mode).
+
+\verb"\tau" is $\tau$ (math mode).
+
+\verb"\textstyle" switches to \verb"math" environment typesetting.
+
+\verb"\thanks{footnote}" adds an acknowledgement footnote to an author's
+ name used in a \verb"\maketitle" command.
+
+\verb"\theta" is $\theta$; \verb"\Theta" is $\Theta$ (math mode).
+
+\verb"\thicklines" is an alternate line thickness for lines in a \verb"picture"
+ environment. See also \verb"linethickness".
+
+\verb"\thinlines" is the default declaration for line thicknesses in a
+ \verb"picture" environment. See \verb"\thicklines".
+
+\verb"\thinspace" is the proper space between single and double quotes, as
+ in '\thinspace''.
+
+\verb"\tilde" makes a tilde, as: $\tilde a$ (math mode).
+
+\verb"\times" is $\times$ (math mode).
+
+\verb"\title{text}" declares a document title for the \verb"\maketitle" command.
+
+\verb"\to" is $\to$ (math mode).
+
+\verb"\today" generates today's date.
+
+\verb"\top" is $\top$ (math mode).
+
+\verb"\triangle" is $\triangle$ (math mode).
+
+\verb"\triangleleft" is $\triangleleft$ (math mode).
+
+\verb"\triangleright" is $\triangleright$ (math mode).
+
+\verb"\tt" switches to {\tt typewriter} type.
+
+\verb"\twocolumn[text]" declares a two-column page, with optional full-page
+ width heading \verb"text".
+
+\verb"\typein[\cs]{text}" displays \verb"text" on the screen and waits for
+ you to enter stuff which will be put in the document at that point.
+ Optional control sequence \verb"\cs" can be assigned the value
+ of your input, to be used later.
+
+\verb"\typeout{text}" displays \verb"text" on the screen and writes it to
+ the \verb".lis" file.
+
+%uuu
+\verb"\u" prints a breve accent, as \u o.
+
+\verb"\unboldmath" unemboldens math italics and math symbols. Should
+ be used {\em outside} of math mode.
+
+\verb"\underbrace{text}" gives $\underbrace{text}$ (math mode).
+
+\verb"\underline{text}" gives \underline{text} (math mode or not).
+
+\verb"\unitlength" --- length of coordinate units for \verb"picture"
+ environment.
+
+\verb"\unlhd" is $\unlhd$ (math mode).
+
+\verb"\unrhd" is $\unrhd$ (math mode).
+
+\verb"\uparrow" is $\uparrow$; \verb"\Uparrow" is $\Uparrow$ (math mode).
+
+\verb"\updownarrow" is $\updownarrow$; \verb"\Updownarrow" is $\Updownarrow$
+ (math mode).
+
+\verb"\uplus" is $\uplus$ (math mode).
+
+\verb"\upsilon" is $\upsilon$; \verb"\Upsilon" is $\Upsilon$ (math mode).
+
+\verb"\usebox{\binname}" recalls box definition saved in box
+ \verb"\binname".
+
+\verb"\usecounter{counter}" is used in a \verb"list" environment to cause
+ \verb"counter" to be used to number the items.
+
+%vvv
+\verb"\v" prints a h\'a\v cek, as \v o.
+
+\verb"\value{counter}" produces the numeric value of \verb"counter".
+
+\verb"\varepsilon" is $\varepsilon$ (math mode).
+
+\verb"\varphi" is $\varphi$ (math mode).
+
+\verb"\varpi" is $\varpi$ (math mode).
+
+\verb"\varrho" is $\varrho$ (math mode).
+
+\verb"\varsigma" is $\varsigma$ (math mode).
+
+\verb"\vartheta" is $\vartheta$ (math mode).
+
+\verb"\vdash" is $\vdash$ (math mode).
+
+\verb"\vec" puts a vector over a letter: $\vec a$ (math mode).
+
+\verb"\vector(x,y){len}" in \verb"picture" environment, in \verb"\put"
+ command, draws vector from \verb"\put" argument with length \verb"len"
+ and slope \verb"(x,y)", with arrowhead.
+
+\verb"\vee" is $\vee$ (math mode).
+
+\verb"\verb/text/" creates a local \verb"verbatim" environment for \verb"text",
+ printed in \verb"typewriter" font. Note that \verb"text"
+ is {\em not} in curly braces; it is between two identical delimiters,
+ neither of which appears in \verb"text".
+
+\verb"\verb*/text/" is like \verb"\verb/text/", but spaces print out
+ as \verb*" ".
+
+\verb"\vert" is $\vert$; \verb"\Vert" is $\Vert$ (math mode).
+
+\verb"\vspace{len}" leaves a vertical space of dimension \verb"len".
+
+%www
+\verb"\wedge" is $\wedge$ (math mode).
+
+\verb"\widehat{arg}" is $\widehat{arg}$ (math mode).
+
+\verb"\widetilde{arg}" is $\widetilde{arg}$ (math mode).
+
+\verb"\wp" is $\wp$ (math mode).
+
+\verb"\wr" is $\wr$ (math mode).
+
+%xxx
+\verb"\xi" is $\xi$; \verb"\Xi" is $\Xi$ (math mode).
+
+%yyy
+\verb"\year" --- current year (A.D.).
+
+%zzz
+\verb"\zeta" is $\zeta$ (math mode).
+
+\clearpage
+
+\begin{table}
+\centering
+\begin{tabular}{ll}
+\verb"\rm" & {\rm Roman} \\
+\verb"\it" & {\it Italic\/} \\
+\verb"\bf" & {\bf Boldface} \\
+\verb"\sl" & {\sl Slanted\/} \\
+\verb"\sf" & {\sf Sans serif} \\
+\verb"\sc" & {\sc Small Caps} \\
+\verb"\tt" & {\tt Typewriter} \\
+\end{tabular}
+\caption{Typefaces}
+\end{table}
+
+\begin{table}
+\centering
+\begin{tabular}{ll}
+\verb"pt" & point (72.27 pt/in) \\
+\verb"pc" & pica (12 pt/pc) \\
+\verb"in" & inch \\
+\verb"bp" & big point (72 bp/in) \\
+\verb"cm" & centimeter (2.54 cm/in) \\
+\verb"mm" & millimeter (10 mm/cm) \\
+\verb"dd" & did\^ot point (1157 dd = 1238 pt) \\
+\verb"cc" & cicero (12 dd/cc) \\
+\verb"sp" & scaled point (65536 sp/pt) \\
+\verb"em" & font-dependent; ``quad'' width \\
+\verb"ex" & font-dependent; ``\verb"x"''-height \\
+\end{tabular}
+\caption{Dimensions or lengths}
+\end{table}
+
+\begin{table}
+\centering
+\begin{tabular}{lll}
+abstract & array & center \\
+description & displaymath & enumerate \\
+eqnarray & equation & figure \\
+flushleft & flushright & itemize \\
+list & math & minipage \\
+picture & quotation & quote \\
+tabbing & table & tabular \\
+theorem & titlepage & verbatim \\
+verse & & \\
+\end{tabular}
+\caption{Environments}
+\end{table}
+
+\begin{table}
+\centering
+\begin{tabular}{*{2}{ll@{\hspace{4em}}}ll}
+\`{o} & \verb"\`{o}" & \={o} & \verb"\={o}" & \t{oo} & \verb"\t{oo}" \\
+\'{o} & \verb"\'{o}" & \.{o} & \verb"\.{o}" & \c{o} & \verb"\c{o}" \\
+\^{o} & \verb"\^{o}" & \u{o} & \verb"\u{o}" & \d{o} & \verb"\d{o}" \\
+\"{o} & \verb#\"{o}# & \v{o} & \verb"\v{o}" & \b{o} & \verb"\b{o}" \\
+\~{o} & \verb"\~{o}" & \H{o} & \verb"\H{o}" & & \\
+\end{tabular}
+\caption{Accents}
+\end{table}
+
+\begin{table}
+\centering
+\begin{tabular}{*{2}{ll@{\hspace{4em}}}ll}
+\oe & \verb"\oe" & \aa & \verb"\aa" & \l & \verb"\l" \\
+\OE & \verb"\OE" & \AA & \verb"\AA" & \L & \verb"\L" \\
+\ae & \verb"\ae" & \o & \verb"\o" & \ss & \verb"\ss" \\
+\AE & \verb"\AE" & \O & \verb"\O" & & \\
+\end{tabular}
+\caption{National Symbols}
+\end{table}
+
+\begin{table}
+\centering
+\begin{tabular}{*{2}{ll@{\hspace{4em}}}ll}
+\dag & \verb"\dag" & \S & \verb"\S" & \copyright & \verb"\copyright" \\
+\ddag & \verb"\ddag" & \P & \verb"\P" & \pounds & \verb"\pounds" \\
+\end{tabular}
+\caption{Miscellaneous Symbols}
+\end{table}
+
+\begin{table}
+\begin{tabular}{ll@{\hspace{4em}}ll}
+$\hat{a}$ & \verb"\hat{a}" & $\dot{a}$ & \verb"\dot{a}" \\
+$\check{a}$ & \verb"\check{a}" & $\ddot{a}$ & \verb"\ddot{a}" \\
+$\tilde{a}$ & \verb"\tilde{a}" & $\breve{a}$ & \verb"\breve{a}" \\
+$\acute{a}$ & \verb"\acute{a}" & $\bar{a}$ & \verb"\bar{a}" \\
+$\grave{a}$ & \verb"\grave{a}" & $\vec{a}$ & \verb"\vec{a}" \\
+\end{tabular}
+\caption{Accents (math mode)}
+\end{table}
+
+\begin{table}
+\centering
+\begin{tabular}{cl@{\hspace{3em}}cl}
+$\alpha$ & \verb"\alpha" & $\nu$ & \verb"\nu" \\
+$\beta$ & \verb"\beta" & $\xi$ & \verb"\xi" \\
+$\gamma$ & \verb"\gamma" & $o$ & \verb"o" \\
+$\delta$ & \verb"\delta" & $\pi$ & \verb"\pi" \\
+$\epsilon$ & \verb"\epsilon" & $\rho$ & \verb"\rho" \\
+$\zeta$ & \verb"\zeta" & $\sigma$ & \verb"\sigma" \\
+$\eta$ & \verb"\eta" & $\tau$ & \verb"\tau" \\
+$\theta$ & \verb"\theta" & $\upsilon$ & \verb"\upsilon" \\
+$\iota$ & \verb"\iota" & $\phi$ & \verb"\phi" \\
+$\kappa$ & \verb"\kappa" & $\chi$ & \verb"\chi" \\
+$\lambda$ & \verb"\lambda" & $\psi$ & \verb"\psi" \\
+$\mu$ & \verb"\mu" & $\omega$ & \verb"\omega" \\[4ex]
+
+$\varepsilon$ & \verb"\varepsilon" & $\varsigma$ & \verb"\varsigma" \\
+$\vartheta$ & \verb"\vartheta" & $\varphi$ & \verb"\varphi" \\
+$\varrho$ & \verb"\varrho" & & \\[4ex]
+
+$\Gamma$ & \verb"\Gamma" & $\Sigma$ & \verb"\Sigma" \\
+$\Delta$ & \verb"\Delta" & $\Upsilon$ & \verb"\Upsilon" \\
+$\Theta$ & \verb"\Theta" & $\Phi$ & \verb"\Phi" \\
+$\Lambda$ & \verb"\Lambda" & $\Psi$ & \verb"\Psi" \\
+$\Xi$ & \verb"\Xi" & $\Omega$ & \verb"\Omega" \\
+$\Pi$ & \verb"\Pi" & & \\
+\end{tabular}
+\caption{Greek letters (math mode)}
+\end{table}
+
+\begin{table}
+\centering
+\begin{tabular}{cl@{\hspace{3em}}cl}
+$\pm$ & \verb"\pm" & $\cap$ & \verb"\cap" \\
+$\mp$ & \verb"\mp" & $\cup$ & \verb"\cup" \\
+$\setminus$ & \verb"\setminus" & $\uplus$ & \verb"\uplus" \\
+$\cdot$ & \verb"\cdot" & $\sqcap$ & \verb"\sqcap" \\
+$\times$ & \verb"\times" & $\sqcup$ & \verb"\sqcup" \\
+$\ast$ & \verb"\ast" & $\triangleleft$ & \verb"\triangleleft" \\
+$\star$ & \verb"\star" & $\triangleright$ & \verb"\triangleright" \\
+$\diamond$ & \verb"\diamond" & $\wr$ & \verb"\wr" \\
+$\circ$ & \verb"\circ" & $\bigcirc$ & \verb"\bigcirc" \\
+$\bullet$ & \verb"\bullet" & $\bigtriangleup$ & \verb"\bigtriangleup" \\
+$\div$ & \verb"\div" & $\bigtriangledown$ & \verb"\bigtriangledown" \\
+$\lhd$ & \verb"\lhd" & $\rhd$ & \verb"\rhd" \\
+$\vee$ & \verb"\vee" & $\odot$ & \verb"\odot" \\
+$\wedge$ & \verb"\wedge" & $\dagger$ & \verb"\dagger" \\
+$\oplus$ & \verb"\oplus" & $\ddagger$ & \verb"\ddagger" \\
+$\ominus$ & \verb"\ominus" & $\amalg$ & \verb"\amalg" \\
+$\otimes$ & \verb"\otimes" & $\unlhd$ & \verb"\unlhd" \\
+$\oslash$ & \verb"\oslash" & $\unrhd$ & \verb"\unrhd" \\
+\end{tabular}
+\caption{Binary Operations (math mode)}
+\end{table}
+
+\begin{table}
+\centering
+\begin{tabular}{cl@{\hspace{4em}}cl}
+$\leq$ & \verb"\leq" & $\geq$ & \verb"\geq" \\
+$\prec$ & \verb"\prec" & $\succ$ & \verb"\succ" \\
+$\preceq$ & \verb"\preceq" & $\succeq$ & \verb"\succeq" \\
+$\ll$ & \verb"\ll" & $\gg$ & \verb"\gg" \\
+$\subset$ & \verb"\subset" & $\supset$ & \verb"\supset" \\
+$\subseteq$ & \verb"\subseteq" & $\supseteq$ & \verb"\supseteq" \\
+$\sqsubset$ & \verb"\sqsubset" & $\sqsupset$ & \verb"\sqsupset" \\
+$\sqsubseteq$ & \verb"\sqsubseteq" & $\sqsupseteq$ & \verb"\sqsupseteq" \\
+$\in$ & \verb"\in" & $\ni$ & \verb"\ni" \\
+$\vdash$ & \verb"\vdash" & $\dashv$ & \verb"\dashv" \\
+$\smile$ & \verb"\smile" & $\mid$ & \verb"\mid" \\
+$\frown$ & \verb"\frown" & $\parallel$ & \verb"\parallel" \\
+$\neq$ & \verb"\neq" & $\perp$ & \verb"\perp" \\
+$\equiv$ & \verb"\equiv" & $\cong$ & \verb"\cong" \\
+$\sim$ & \verb"\sim" & $\bowtie$ & \verb"\bowtie" \\
+$\simeq$ & \verb"\simeq" & $\propto$ & \verb"\propto" \\
+$\asymp$ & \verb"\asymp" & $\models$ & \verb"\models" \\
+$\approx$ & \verb"\approx" & $\doteq$ & \verb"\doteq" \\
+ & & $\Join$ & \verb"\Join" \\
+\end{tabular}
+\caption{Relations (math mode)}
+\end{table}
+
+\begin{table}
+\centering
+\leavevmode\hbox to 0pt{\hss\begin{tabular}{clcl}
+$\leftarrow$ & \verb"\leftarrow" & $\longleftarrow$ & \verb"\longleftarrow" \\
+$\Leftarrow$ & \verb"\Leftarrow" & $\Longleftarrow$ & \verb"\Longleftarrow" \\
+$\rightarrow$ & \verb"\rightarrow" &
+ $\longrightarrow$ & \verb"\longrightarrow" \\
+$\Rightarrow$ & \verb"\Rightarrow" &
+ $\Longrightarrow$ & \verb"\Longrightarrow" \\
+$\leftrightarrow$ & \verb"\leftrightarrow" &
+ $\longleftrightarrow$ & \verb"\longleftrightarrow" \\
+$\Leftrightarrow$ & \verb"\Leftrightarrow" &
+ $\Longleftrightarrow$ & \verb"\Longleftrightarrow" \\
+$\mapsto$ & \verb"\mapsto" & $\longmapsto$ & \verb"\longmapsto" \\
+$\hookleftarrow$ & \verb"\hookleftarrow" &
+ $\hookrightarrow$ & \verb"\hookrightarrow" \\
+$\leftharpoonup$ & \verb"\leftharpoonup" &
+ $\rightharpoonup$ & \verb"\rightharpoonup" \\
+$\leftharpoondown$ & \verb"\leftharpoondown" &
+ $\rightharpoondown$ & \verb"\rightharpoondown" \\
+$\rightleftharpoons$ & \verb"\rightleftharpoons" &
+ $\leadsto$ & \verb"\leadsto" \\
+$\uparrow$ & \verb"\uparrow" & $\Updownarrow$ & \verb"\Updownarrow"\\
+$\Uparrow$ & \verb"\Uparrow" & $\nearrow$ & \verb"\nearrow"\\
+$\downarrow$ & \verb"\downarrow" & $\searrow$ & \verb"\searrow" \\
+$\Downarrow$ & \verb"\Downarrow" & $\swarrow$ & \verb"\swarrow"\\
+$\updownarrow$ & \verb"\updownarrow" & $\nwarrow$ & \verb"\nwarrow"\\
+\end{tabular}\hss}
+\caption{Arrows (math mode)}
+\end{table}
+
+\begin{table}
+\centering
+\begin{tabular}{cl@{\hspace{3em}}cl}
+$\aleph$ & \verb"\aleph" & $\prime$ & \verb"\prime" \\
+$\hbar$ & \verb"\hbar" & $\emptyset$ & \verb"\emptyset" \\
+$\imath$ & \verb"\imath" & $\nabla$ & \verb"\nabla" \\
+$\jmath$ & \verb"\jmath" & $\surd$ & \verb"\surd" \\
+$\ell$ & \verb"\ell" & $\top$ & \verb"\top" \\
+$\wp$ & \verb"\wp" & $\bot$ & \verb"\bot" \\
+$\Re$ & \verb"\Re" & $\Vert$ & \verb!\"! \\
+$\Im$ & \verb"\Im" & $\angle$ & \verb"\angle" \\
+$\partial$ & \verb"\partial" & $\triangle$ & \verb"\triangle" \\
+$\infty$ & \verb"\infty" & $\backslash$ & \verb"\backslash" \\
+$\Box$ & \verb"\Box" & $\Diamond$ & \verb"\Diamond" \\
+$\forall$ & \verb"\forall" & $\sharp$ & \verb"\sharp" \\
+$\exists$ & \verb"\exists" & $\clubsuit$ & \verb"\clubsuit" \\
+$\neg$ & \verb"\neg" & $\diamondsuit$ & \verb"\diamondsuit" \\
+$\flat$ & \verb"\flat" & $\heartsuit$ & \verb"\heartsuit" \\
+$\natural$ & \verb"\natural" & $\spadesuit$ & \verb"\spadesuit" \\
+$\mho$ & \verb"\mho" & & \\
+\end{tabular}
+\caption{Miscellaneous Symbols (math mode)}
+\end{table}
+
+\begin{table}
+\begin{displaymath}
+\begin{array}{ccl@{\hspace{2em}}ccl}
+\sum & \displaystyle \sum & \hbox{\verb"\sum"} &
+ \bigcap & \displaystyle \bigcap & \hbox{\verb"\bigcap"} \\[.7ex]
+\prod & \displaystyle \prod & \hbox{\verb"\prod"} &
+ \bigcup & \displaystyle \bigcup & \hbox{\verb"\bigcup"} \\[.7ex]
+\coprod & \displaystyle \coprod & \hbox{\verb"\coprod"} &
+ \bigsqcup & \displaystyle \bigsqcup & \hbox{\verb"\bigsqcup"} \\[.7ex]
+\int & \displaystyle \int & \hbox{\verb"\int"} &
+ \bigvee & \displaystyle \bigvee & \hbox{\verb"\bigvee"} \\[.7ex]
+\oint & \displaystyle \oint & \hbox{\verb"\oint"} &
+ \bigwedge & \displaystyle \bigwedge & \hbox{\verb"\bigwedge"} \\[.7ex]
+\bigodot & \displaystyle \bigodot & \hbox{\verb"\bigodot"} &
+ \bigotimes & \displaystyle \bigotimes & \hbox{\verb"\bigotimes"} \\[.7ex]
+\bigoplus & \displaystyle \bigoplus & \hbox{\verb"\bigoplus"} &
+ \biguplus & \displaystyle \biguplus & \hbox{\verb"\biguplus"} \\
+\end{array}
+\end{displaymath}
+\caption{Variable-sized Symbols (math mode)}
+\end{table}
+
+\begin{table}
+\begin{verbatim}
+\arccos \coth \ker \min
+\arcsin \deg \lg \Pr
+\arctan \det \lim \sec
+\arg \dim \liminf \sin
+\cos \exp \limsup \sinh
+\csc \gcd \ln \sup
+\cosh \hom \log \tan
+\cot \inf \max \tanh
+\end{verbatim}
+\caption{``Log-like'' Functions (math mode)}
+\end{table}
+
+\begin{table}
+\begin{tabular}{lc@{\hspace{2em}}lc}
+$($ & \verb"(" & $)$ & \verb")" \\
+$[$ & \verb"[" & $]$ & \verb"]" \\
+$\{$ & \verb"\{" & $\}$ & \verb"\}" \\
+$\lfloor$ & \verb"\lfloor" & $\rfloor$ & \verb"\rfloor" \\
+$\lceil$ & \verb"\lceil" & $\rceil$ & \verb"\rceil" \\
+$\langle$ & \verb"\langle" & $\rangle$ & \verb"\rangle" \\
+$/$ & \verb"/" & $\backslash$ & \verb"\backslash" \\
+$\vert$ & \verb"\vert" & $\Vert$ & \verb"\Vert" \\
+$\uparrow$ & \verb"\uparrow" & $\Uparrow$ & \verb"\Uparrow" \\
+$\downarrow$ & \verb"\downarrow" & $\Downarrow$ & \verb"\Downarrow" \\
+$\updownarrow$ & \verb"\updownarrow" & $\Updownarrow$ & \verb"\Updownarrow" \\
+\end{tabular}
+\caption{Delimiters (math mode)}
+\end{table}
+
+\end{document}
diff --git a/macros/latex209/contrib/biemes/vg_guide.tex b/macros/latex209/contrib/biemes/vg_guide.tex
new file mode 100644
index 0000000000..60b997256a
--- /dev/null
+++ b/macros/latex209/contrib/biemes/vg_guide.tex
@@ -0,0 +1,370 @@
+\documentstyle[11pt,twoside,cdbtex]{article}
+
+\pagestyle{myheadings}
+\head{STScI Viewgraphs --- User Info}
+
+\begin{document}
+
+\begin{titlepage}
+\begin{center}
+\vspace*{2in}
+
+{\Large\bf Using the STScI Viewgraph Style}\\[.5in]
+
+\begin{abstract} \noindent
+The use of a \LaTeX{} document style for the preparation of viewgraphs
+at STScI is described. Some information that may be helpful for people
+who want to design their own viewgraph format is also included, but no
+promises are made.
+\end{abstract}
+
+\vspace{.5in}
+\today
+
+\vfill
+C. D. Biemesderfer\\[.3ex]
+Space Telescope Science Institute $\bullet$ Baltimore, Maryland
+\end{center}
+\end{titlepage}
+
+\thispagestyle{plain}
+\tableofcontents
+\smallskip
+\noindent\rule[6pt]{\textwidth}{.8pt}
+
+\section*{Introduction}
+
+There is a document style option available for \LaTeX{} users at the Institute
+that enables you to prepare viewgraphs in the comfort of your own office.
+Macros that extend plain \TeX{} are also under development and should be ready
+Real Soon Now, so stay tuned.
+
+I have endeavored to layer this style on top of vanilla \LaTeX{} as much as
+possible in order that the usual array of handy environments is available
+for producing itemized and enumerated lists, displayed equations, and so forth.
+I have largely been successful at that, I think, but there are plenty of
+bugs in this, and the reason I am releasing this now is that folks are
+starting to copy ``test'' versions of my files that are in intermediate
+(and not always working) condition. This can be very confusing for me,
+and it is obviously better to have everyone
+use the same file so I know where to start when the complaints come rolling
+in (interspersed, hopefully, with some positive feedback as well).
+
+Please feel free to exercise all the advertised capabilities and report on
+the things that don't work properly. Do not hesitate to send along
+suggestions for improvements and extensions, although you have to realize that
+I may take a while to implement complicated ones. It is preferable to receive
+communications in a filable form, and \filename{VAX} Mail is best for this;
+please note that my username is \filename{BIEMES}. Have fun.
+
+\section{What Is A Viewgraph ?}
+
+A `viewgraph' is a `page' as far as \LaTeX{} is concerned, so pagebreaking
+commands can be used to end a slide and get on with the next one. At the
+moment, there are five page `styles', and they have to do with viewgraphs
+not text documents, so don't just assume that the regular \LaTeX{}
+page styles will be there. Most of the time, you will
+probably use the default pagestyle, which is called `sthead'; the others
+are `empty', `plain', `noaohead', and `overlay'. They are covered in more
+detail in \S\ref{pssec}.
+
+\section{What You Cannot Do on Viewgraphs}
+
+The ST viewgraph style is layered on top of regular \LaTeX{}, and you should
+be aware of some things that are a function of the document style,
+and that I have chosen \emphasize{not} to implement for viewgraphs.
+
+\begin{description}
+ \item[Sections.] Forget sections entirely when you are making slides, and
+ do not try to use commands like \verb"\section" or \verb"\paragraph".
+ They are not defined.
+ \item[Marginal notes.] The margins of a viewgraph are off the glass of the
+ projector, so don't waste your (and my) time with these. They are
+ not completely disabled, but it could be arranged.
+ \item[Footnotes.] These are not disabled, either, but it seems to me to
+ be rather stupid to me to put teeny-weeny text on a viewgraph that
+ somebody with poor eyesight in the back row is supposed to see on
+ a projection screen (that is out of focus).
+ \item[Twosided substyle.] Do I need to explain this ?
+ \item[Front and back matter.] That's tables of contents, lists of figures,
+ glossaries, appendices, etc.
+\end{description}
+
+There are other things are not such a great idea, either; for instance, you
+shouldn't need things like the `figure' and `table' environments
+to define floats. Not that you shouldn't use `tabular' to make tables,
+but you should just have it appear on the slide wherever you typeset it.
+In general, you should be able to put a \verb"\nofiles" command right after
+\verb"\documentstyle" because there shouldn't ever need to be any auxiliary
+files. I can imagine why you \emphasize{might} want to use \verb"\label" and
+\verb"\ref" on viewgraphs, but I don't think this is good idea.
+
+\section{What You Can Do on Viewgraphs}
+
+Everything else you might expect should work properly.
+The list making environments (`itemize', `enumerate', `description') are
+probably the most useful, and other environments like `center', `quote',
+and `verse' can be used also. I think that `flushleft' and `flushright'
+will probably give you trouble, and I \emphasize{know} that the `verbatim'
+environment misbehaves. The trouble with these is with the margins; vanilla
+\LaTeX{} makes some assumptions about margin parameters that I use to pull
+the sides of the page away from the true width of the text (so that words
+don't mash into the frame), and I have to redefine certain \LaTeX{} macros
+to solve this. The problem at the present time is finding the right ones.
+
+\subsection{Substyles}
+
+There are only four substyles (those are the arguments to \verb"\documentstyle"
+that go in the square brackets) at the moment. Three of them are for the
+various default type sizes, and the fourth one turns on the frame around the
+whole slide.
+
+\begin{description}
+ \item[18pt] This is the default typesize, so you don't have to specify
+ `18pt' as a substyle, but you can if you like.
+ \item[20pt] This one gives you somewhat larger type, which is probably what
+ you expected.
+ \item[24pt] This is the largest size for which we have a complete
+ set of fonts.
+ \item[frame] Specify this substyle if you want frames around the whole
+ page. By default, only the header box is framed. You can change
+ your mind about framing in the document by using
+ \verb"\framepages" and \verb"\unframepages" commands.
+\end{description}
+
+Consider the implications of my statement above about the 24pt fonts. Since
+that is the largest ``set'' of fonts (Roman, math, slanted, italic, typewriter,
+san serif, and small caps faces make up a set), and the ``normal'' size for
+viewgraph type is quite large, you will find that the type size changing
+commands of \LaTeX{} won't always do something when you're trying to get
+\emphasize{bigger} type. The commands that select smaller type
+sizes should be fine.
+
+\subsection{Page styles} \label{pssec}
+
+The default pagestyle for viewgraphs assembles a header for the transparency
+consisting of the Institute name and several pieces of information that you
+can supply for the right-hand box (see \S\ref{rbsec}). You can have
+the entire viewgraph enclosed in a frame (see \S\ref{framesec}). This
+style is called `sthead', although it is not necessary to include a
+\verb"\pagestyle" command to use it.
+
+There is an `noaohead' pagestyle which is similar to the `sthead' style,
+but there is no ``right-hand box'' in the NOAO header. It just says
+``National Optical Astronomy Observatories'' across the top of the
+slide. The people at NOAO do not care much for this style.
+
+Two of the ``regular'' \LaTeX{} pagestyles are implemented for those of
+you who like to keep things simple (like the people at NOAO). These are
+`empty' and `plain', and they work like you would expect. The `empty'
+style doesn't add anything to the page besides what you type, while the
+`plain' style adds the page (slide) number in the lower right-hand corner
+of the viewgraph.
+
+The last style option for viewgraphs is `overlay', which will not put
+any borders or extraneous markings on the page. The page size parameters
+for the overlay style are tuned so
+that the meeting, date, and presenter information wind up in the appropriate
+locations on the page so that your \LaTeX ed output can be photocopied onto
+the Institute's blank overhead transparency forms. (By blank, I mean that
+there are not `Date' and `Presenter' words in the upper right-hand box.)
+If the registration of the pages isn't
+exactly what you like, you will have to twiddle page size parameters yourself.
+
+Please note that, while in principle you can toggle pagestyles,
+you will probably find that the frames are not the same size when you switch
+between pagestyles with headers and pagestyles without headers. I am trying
+to tune the sizes and the various macros involved so that this works smoothly,
+but it's very low priority because it seems to me that you should pick a
+style for a presentation and then stay with it. But I am working on it.
+
+\subsection{Framing the Page} \label{framesec}
+
+You can get the whole viewgraph enclosed in a big frame by either selecting
+the `frame' substyle or by putting a \verb"\framepages" command in your text.
+If you want to disable page framing, there is an \verb"\unframepages" command.
+These commands take effect on the page on which they are invoked.
+
+\subsection{Putting Stuff in the Little Box on the Right Side} \label{rbsec}
+
+Yes, this is the important part, isn't it ? There are three very short lines
+in the right-hand box in the header; the first one is for the name of the
+meeting, the middle one is for the date, and the bottom one is for the
+presenter. You can supply text for these lines with the commands
+\verb"\setmeeting", \verb"\setdate", and \verb"\setpresenter". These
+each take one argument, that being the text for the particular line;
+for instance,
+\begin{quote}
+\verb"\setmeeting{STOPAT}"
+\end{quote}
+could be issued so that the acronym \filename{STOPAT} appears at the left
+side of the top line in the little right-hand box. (Observe that the page
+number, or slide number, appears at the right side of this line, and at the
+moment I don't have a way for you to suppress that.) If you do not set the
+date, today's date is used; if you don't set the meeting or presenter, those
+items are left blank. No additional text
+is supplied by these commands, so in principle, you could put whatever you
+wanted on these very short lines in the little right-hand box. For example,
+\begin{quote}
+\verb"\setpresenter{I $\heartsuit$ SDAS}"
+\end{quote}
+would produce ``I $\heartsuit$ SDAS'' on the bottom line of the little
+right-hand box.
+
+By now, you have probably noticed that I am somewhat fanatical about the
+smallish size of the right-hand box. It is small because the Institute name
+is very long and takes up about 70\% of the available text width, so you
+are left with a little less than 2 inches to play with. If you put a longish
+bit of text on one of those lines (say, for instance, the presenter's name was
+something like Christopher D. Biemesderfer), you could very easily wind up
+with a header that is wider than the page width. I have arranged it so that
+such a header can be constructed without an overfull hbox, but
+unfortunately \TeX{} has its own ideas about what do
+in this situation, and will probably mess up the alignment of the header and the
+box containing the text of your viewgraph. I am trying to solve this, but
+it is quite tricky; as long as you are terse, everything will be OK anyway.
+
+\subsection{What About the ST Logo ?}
+
+You cannot simply pull the ST logo into the viewgraph header because it is
+generated with the \filename{NCAR} graphics software, which is very
+independent of \TeX . It is possible to leave some extra space on the
+left side of the Institute name by using the \verb"\stlogospace" command.
+This command also takes one argument, and that is the horizontal dimension
+of the white space you would like added before the word ``SPACE''.
+\begin{quote}
+\verb"\stlogospace{.65in}"
+\end{quote}
+would add about $\frac{2}{3}$ of an inch of blank space to the left of the
+Institute name. Please observe that this makes the left-hand box even
+\emphasize{bigger}, so you have to be that much briefer in the right-hand box.
+
+But, you say, leaving space is not the same thing as putting the logo in there.
+That is quite correct, and you have to get the logo on the page by
+``overlaying'' the graphics created by \filename{NCAR} on each viewgraph.
+Since \TeX{} and \filename{NCAR} know nothing about one another, it is
+completely up to you to make sure that the logo that \filename{NCAR} makes
+lands in the space that \LaTeX{} creates. This is sort of like playing
+pin the tail on the donkey when you have a broken leg and are drunk. You
+also have to make the graphics overlay, which is itself a non-trivial
+exercise.
+
+In short, I would suggest that you not bother with this. The logo might look
+cute, but \emphasize{overlaying} graphics material is the \emphasize{wrong} way
+to get graphics merged into \TeX{} documents, and hardly worth the pain
+and suffering to get the alignment correct (scissors and glue are far
+superior). The appropriate mechanisms (a discussion of which is too long
+and boring to include here) for doing this kind of integration
+are well known to the \TeX{} cognoscenti,
+and we are trying to deal with the problem.
+A proper solution will eventually be available.
+
+For those of you who insist on the presence of the little picture, you can
+use the `overlay' pagestyle that disables the page frame as well as the
+automatically generated ST header. You must then photocopy the output from
+\LaTeX{} onto a blank ST viewgraph form.
+
+\subsection{Shut Up and Give an Example}
+
+\begin{verbatim}
+% Select viewgraph document style and frame substyle so that pages get
+% surrounded by a big box.
+%
+\documentstyle[frame]{viewgraph}
+%
+% Turn off auxiliary output files. LaTeX always says "no file <file>.aux",
+% but that's what you asked for, so it's OK.
+%
+\nofiles
+%
+% That's all you need in the preamble.
+%
+\begin{document}
+
+\begin{center}
+\bf A Sample Viewgraph
+\end{center}
+
+Itemized components for the first slide~:
+\begin{itemize}
+ \item speed
+ \item accuracy
+ \item portability
+ \item nonsense
+\end{itemize}
+
+\clearpage % end of the first slide
+
+\setmeeting{RSDP ICD PDR} % acronyms don't have to make sense
+
+Enumerated components for the second slide~:
+\begin{enumerate}
+ \item speed
+ \item accuracy
+ \item portability
+ \item more nonsense
+\end{enumerate}
+
+In order to demonstrate this new style more completely, let's put some
+sentences here to show that you can also include running text. You probably
+want to stay away from too much of this though, because if there's lots of
+text on the screen, people will get eyestrain trying to read it, and they
+won't listen to a word you're saying.
+
+\clearpage % that's it for the second slide
+
+\unframepages % turn off the page frame
+\setpresenter{Charlie the Tasteful Tuna}
+\stlogospace .6in % leave white space and try to put a logo in it because
+ % you don't believe me that it's hard
+
+{\large Since the default type size is used for this set of viewgraphs
+(and there are bigger ones), the \verb"\large" command will select a
+larger size.}
+
+{\scriptsize This will be pretty small and therefore hard for your
+audience to read. This is where you put conclusions you are not sure about.}
+
+\end{document} % enough of this silliness
+\end{verbatim}
+
+\section{Making Your Own Headers}
+
+Some people are never satisfied. If you want to make up a header for
+viewgraphs that is impossible within the constraints of my macros, you
+can create your own substyle file to define an alternate pagestyle. If
+you do not know what a substyle file is, or the concept of an alternate
+page style is foreign to your mind, please don't read the rest of this
+section; it will only make things worse.
+
+As you may know, after \LaTeX{} has finished reading substyle files and
+executing the correct \verb"\ds@..." commands for defined document substyles,
+it will try to resolve outstanding substyle requests by reading files
+(named {\it substyle\/}\filename{.STY}) in
+the local (default) directory. The
+easiest way to implement alternate headers is to define a new pagestyle
+(a \verb"\ps@..." command) and place the custom \verb"\ps@..." description
+(plus whatever other specialized things are wanted) in a \filename{.STY}
+file in your \TeX{} directory. A few remarks about these definitions are
+in order.
+
+Since the viewgraph document style doesn't support twosided printing, you
+can save one level of macro replacement by defining \verb"\@thehead" and
+\verb"\@thefoot" directly (you can skip \verb"\@oddhead" and \verb"\@oddfoot",
+in other words). It is unbelievably important that when you define the
+header and footer macros, you leave \emphasize{absolutely} no spaces in the
+definition. I mean none at all, and that means you have to put a `\%' on the
+end of every line so \TeX{} doesn't interpret the CR-LF as a word break.
+If you leave spaces in the macros anywhere (other than \verb"\hspace" and
+\verb"\hfil" and white space you want as part of the header), the header and
+footer spacing will be completely screwed up.
+
+You will probably need to look at the comments in the \filename{VIEWGRAPH.DOC}
+file, because you might want to override the framing boolean or something
+like that. However, please note that the definitions I have written for the
+default Institute header have a lot more jazz going on in them than is
+required for most applications. If you would like to see an example of
+a special pagestyle (header), you would be better off examining
+one that I made up for the SDAS workshop. Ask me where it is hiding.
+
+\end{document}
diff --git a/macros/latex209/contrib/biemes/vg_guide_vg.tex b/macros/latex209/contrib/biemes/vg_guide_vg.tex
new file mode 100644
index 0000000000..f5920355cb
--- /dev/null
+++ b/macros/latex209/contrib/biemes/vg_guide_vg.tex
@@ -0,0 +1,59 @@
+% Select viewgraph document style and frame substyle so that pages get
+% surrounded by a big box.
+%
+\documentstyle[frame]{viewgraph}
+%
+% Turn off auxiliary output files. LaTeX always says "no file <file>.aux",
+% but that's what you asked for, so it's OK.
+%
+\nofiles
+%
+% That's all you need in the preamble.
+%
+\begin{document}
+
+\begin{center}
+\bf A Sample Viewgraph
+\end{center}
+
+Itemized components for the first slide~:
+\begin{itemize}
+ \item speed
+ \item accuracy
+ \item portability
+ \item nonsense
+\end{itemize}
+
+\clearpage % end of the first slide
+
+\setmeeting{RSDP ICD PDR} % acronyms don't have to make sense
+
+Enumerated components for the second slide~:
+\begin{enumerate}
+ \item speed
+ \item accuracy
+ \item portability
+ \item more nonsense
+\end{enumerate}
+
+In order to demonstrate this new style more completely, let's put some
+sentences here to show that you can also include running text. You probably
+want to stay away from too much of this though, because if there's lots of
+text on the screen, people will get eyestrain trying to read it, and they
+won't listen to a word you're saying.
+
+\clearpage % that's it for the second slide
+
+\unframepages % turn off the page frame
+\setpresenter{Charlie the Tasteful Tuna}
+\stlogospace .6in % leave white space and try to put a logo in it because
+ % you don't believe me that it's hard
+
+{\large Since the default type size is used for this set of viewgraphs
+(and there are bigger ones), the \verb"\large" command will select a
+larger size.}
+
+{\scriptsize This will be pretty small and therefore hard for your
+audience to read. This is where you put conclusions you are not sure about.}
+
+\end{document} % enough of this silliness
diff --git a/macros/latex209/contrib/biemes/viewgraph.notes b/macros/latex209/contrib/biemes/viewgraph.notes
new file mode 100644
index 0000000000..ac9522ada6
--- /dev/null
+++ b/macros/latex209/contrib/biemes/viewgraph.notes
@@ -0,0 +1,31 @@
+The files that support the LaTeX viewgraph style are currently in my TeX
+directory [BIEMES.TEX]. It's probably fairly obvious what these are, but
+I'll give a quick explanation anyway.
+
+VG18.STY;1 3 3-MAR-1987 14:54
+VG20.STY;1 4 3-MAR-1987 14:54
+VG24.STY;1 4 3-MAR-1987 14:54
+VG_GUIDE.AUX;5 2 19-MAR-1987 22:57
+VG_GUIDE.DVI;5 28 19-MAR-1987 22:57
+VG_GUIDE.TEX;6 35 19-MAR-1987 22:57
+VG_GUIDE.TOC;2 2 19-MAR-1987 22:26
+VG_GUIDE_VG.DVI;4 4 19-MAR-1987 23:04
+VG_GUIDE_VG.TEX;3 4 19-MAR-1987 22:33
+VIEWGRAPH.DOC;13 49 19-MAR-1987 23:05
+VIEWGRAPH.STY;18 23 19-MAR-1987 23:03
+
+Total of 11 files, 158 blocks.
+
+The LaTeX style definition is contained in VIEWGRAPH.STY, which is supposed to
+be identical with VIEWGRAPH.DOC minus comments and whitespace. The .DOC file
+contains supposedly helpful comments that explain what I was doing as I wrote
+the style. VG18, VG20, and VG24 are substyle files that define the type sizing
+commands (\large, \normalsize, etc.); they work just like the ones for regular
+LaTeX styles, and serve the same purpose. VG_* contain the documentation in
+two parts (the portrait-mode part and the landscape-mode part); the document
+doesn't have to live in TEX_INPUTS.
+
+The LaTeX Command Summary is in CRIB208.TEX; you may want to have that as well.
+There aren't many changes from 2.08 to 2.09 (\head goes away, something about
+\renewenvironment is different, etc.) so you can probably survive until we get
+2.09 installed and I can rewrite it again.
diff --git a/macros/latex209/contrib/bigsign/README b/macros/latex209/contrib/bigsign/README
new file mode 100644
index 0000000000..ce893b7f8b
--- /dev/null
+++ b/macros/latex209/contrib/bigsign/README
@@ -0,0 +1,92 @@
+\def\filedate{92/09/04}
+
+Copyright (C) 1992 by Anselm Lingnau.
+ All rights reserved.
+
+IMPORTANT NOTICE:
+
+You are not allowed to change this readme file.
+
+You should get the following files:
+
+ docstrip.cmd Command file for docstrip.tex to produce float.sty.
+
+ readme This file.
+
+ bigsign.doc `bigsign' style for LaTeX. You have to run it
+ through the docstrip.tex program to produce the
+ corresponding style file.
+ bigsign.tex Driver for bigsign documentation. See notes in this
+ file.
+
+ bigsdemo.tex Small sample LaTeX input file that demonstrates
+ some of the features of the bigsign style file.
+
+The docstrip.tex program is contained in the multicol package (MZ1).
+You should be able to get all these files through the same channels
+as this package.
+
+To produce the style files please run docstrip.tex through LaTeX
+and answer the question
+
+ `Command file docstrip.cmd found. Use it (y/n)?'
+
+with `y'. This will generate all sty files. If you already have
+older versions of the files, docstrip will ask whether or not you
+want to overwrite those versions.
+
+Distribution of unchanged versions:
+
+ You are NOT ALLOWED to take money for the distribution or use of
+ these files except for a nominal charge for copying etc.
+
+ Redistribution of unchanged files is allowed provided that all files
+ listed in the corresponding package README file are distributed
+ including this readme file.
+
+ If you receive only some of these files from someone, complain!
+
+ However, if these files are distributed by established suppliers as
+ part of a complete TeX distribution, and the structure of the
+ distribution would make it difficult to distribute the whole set of
+ files, *those parties* are allowed to distribute only some of the
+ files provided that it is made clear that the user will get a
+ complete distribution-set upon request to that supplier (not me).
+
+ Notice that this permission is not granted to the end user.
+
+Generation and distribution of changed versions:
+
+ The generation of changed versions of the files included in the
+ packages is allowed under the following restrictions:
+
+ - You rename the file before you make any changes to it.
+
+ - You acknowledge the origin of the changed version in the file and
+ keep the information that it (or a changed version) has to be
+ distributed under the restrictions mentioned in this file.
+
+ The distribution of changed versions of the files included in the
+ packages is allowed under the following restrictions:
+
+ - You provide the user with information how to obtain the original
+ package or, even better, distribute it with your files.
+
+ - You make sure that the changed versions contain a notice that
+ prevents that others to take money for distribution or use of your
+ files, i.e. they have to be distributed under the restrictions
+ mentioned in this file.
+
+ - You inform us that you created a changed version of the files.
+ This is only necessary if you want to distribute it to others.
+
+Error Reports in case of UNCHANGED versions to
+
+ Anselm Lingnau
+ Buchenweg 1
+ D-6239 Eppstein 2
+ Federal Republic of Germany
+ Internet: <lingnau@math.uni-frankfurt.de>
+
+bigsign.doc: \def\fileversion{v1.0a}
+bigsign.doc: \def\filedate{92/09/04}
diff --git a/macros/latex209/contrib/bigsign/bigsdemo.tex b/macros/latex209/contrib/bigsign/bigsdemo.tex
new file mode 100644
index 0000000000..90b07f7f37
--- /dev/null
+++ b/macros/latex209/contrib/bigsign/bigsdemo.tex
@@ -0,0 +1,12 @@
+\documentstyle[dina4,portland,bigsign]{article}
+\setlength{\parindent}{0pt}
+\begin{document}
+ \begin{signl}
+ Department of Mathematics\\
+ Open House\\
+ \vspace{\fill}
+ {\Giant Room 110}
+ \vspace{\fill}
+ \end{signl}
+\end{document}
+
diff --git a/macros/latex209/contrib/bigsign/bigsign.doc b/macros/latex209/contrib/bigsign/bigsign.doc
new file mode 100644
index 0000000000..7289623031
--- /dev/null
+++ b/macros/latex209/contrib/bigsign/bigsign.doc
@@ -0,0 +1,166 @@
+\def\fileversion{v1.0a}
+\def\filedate{92/09/04}
+\def\docdate{92/09/04}
+
+%% \CheckSum{37}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+%\iffalse % this is a METACOMMENT !
+%% Style-option `bigsign' to use with LaTeX v2.09
+%% Copyright (C) 1991, 1992 by Anselm Lingnau, all rights reserved.
+%
+% Copying of this file is authorized only if either
+% (1) you make absolutely no changes to your copy, including name, or
+% (2) if you do make changes, you name it something other than
+% bigsign.doc.
+% This restriction helps ensure that all styles developed here
+% remain identical.
+%\fi
+%
+% \DoNotIndex{\@ifundefined,\@spaces,\baselineskip,\begin,\docdate,\end}
+% \DoNotIndex{\endinput,\filedate,\fileversion,\newcommand,\newenvironment}
+% \DoNotIndex{\newfont,\pagestyle,\relax,\wlog}
+%
+% \title{Big Signs: A Quickie\thanks{%
+% This file has version number \fileversion{} dated \filedate.
+% The documentation was last revised on \docdate.
+% }}
+% \def\rtitlex{Big Signs: A Quickie (\fileversion)}
+% \thispagestyle{plain}
+%
+% \author{Anselm Lingnau}
+% \address{Buchenweg 1\\
+% D-6239 Eppstein\\
+% Federal Republic of Germany}
+% \netaddress[\network{Internet}]{lingnau@math.uni-frankfurt.de}
+%
+% \date{September 4, 1992}
+%
+% \maketitle
+%
+% \begin{abstract}
+% With this style option one can easily create big signs
+% for showing directions and the like.
+% ``Portrait'' and ``landscape'' signs are supported.
+% This style option needs Hubert Partl's {\tt portland} style.
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% Our University's yearly ``Open House'' day will take place tomorrow,
+% and my boss is going to give his famous talk on supercomputers.
+% Of course we need some signs to guide the audience to the lecture theater,
+% and I volunteered (sort of) to help create these signs.
+%
+% This is what came out of it, and I thought I might as well write it up.
+% Maybe it'll come in useful to somebody somewhere sometime. Remember
+% that I'm basically shooting from the hip here, so no flames please.
+% (Constructive criticism will, as always, be gladly accepted.)
+%
+% To use this style option, you need Dr.\ Hubert Partl's {\tt portland}
+% style, available from a good server near you. A printer that can actually
+% print landscape is necessary for genuine landscape signs. Also, you will
+% need a working \MF\ installation to create the huge fonts that this style
+% insists on using.
+%
+% \section{The User Interface}
+%
+% The {\tt bigsign} style option revolves around two environments,
+% {\tt signl} and {\tt signp}. The former is for making landscape signs,
+% the latter for signs in portrait format. The signs will be printed in a
+% rather huge version of Computer Modern Sans Serif Demibold Condensed
+% ({\tt cmssdc10}) which we found quite readable even from a distance.
+%
+% There's probably no need to examine all the commands and environments
+% (the four of them) individually. Here's a simple example of a complete
+% sign:
+% \begin{verbatim}
+% \documentstyle[a4,portland,bigsign]{article}
+% \begin{document}
+% \begin{signl}
+% Department of Mathematics\\
+% Open House\\
+% \vspace{\fill}
+% {\Giant Room 110\\}
+% \vspace{\fill}
+% \end{signl}
+% \end{document}
+% \end{verbatim}
+% As you can see, liberal use of \verb|\vspace{\fill}|s is encouraged.
+% The {\tt signl} and {\tt signp} environments start out using the
+% \verb|\Medium| font, namely {\tt cmssdc10} at 50~points.
+% The \verb|\Giant| font is {\tt cmssdc10} at 100~points.
+%
+% Note that you will have to take care of switching your printer to
+% landscape mode for this document. It is possible to hack {\tt portland.sty}
+% to do this automatically, see its documentation.
+%
+% \StopEventually{\makesignature\PrintIndex}
+%
+% \section{The Implementation}
+%
+% As usual, the file identifies itself in the log file.
+% But only if this file's macros aren't yet defined.
+% \begin{macrocode}
+\@ifundefined{signl}{}{\endinput}
+\wlog{Style-Option: `bigsign' \fileversion \space <\filedate> (AL)}
+\wlog{English Documentation \@spaces \@spaces <\docdate> (AL)}
+% \end{macrocode}
+% First of all, we must define the fonts that this style will be using.
+% Use \MF\ to create the fonts themselves if you need to; at our installation
+% the output drivers automagically take care of that.
+% \begin{macrocode}
+\newfont{\fMedium}{cmssdc10 at50pt}
+\newfont{\fGiant}{cmssdc10 at100pt}
+% \end{macrocode}
+% \begin{macro}{\Medium} \begin{macro}{\Giant}
+% Now we define commands to switch over to the fonts we just loaded.
+% There's a hard-coded baselineskip here which of course depends on the font.
+% This is not pretty but workable. I would have liked to use \verb|\Large|
+% or \verb|\Huge| in place of \verb|\Giant|, but these were already taken.
+% \begin{macrocode}
+\newcommand{\Medium}{\fMedium\baselineskip60pt\relax}
+\newcommand{\Giant}{\fGiant\baselineskip120pt\relax}
+% \end{macrocode}
+% \end{macro} \end{macro}
+% \begin{macro}{signl} \begin{macro}{signp}
+% And now for the environments. These are actually quite straightforward,
+% switching to the appropriate page format and enabling centering
+% before moving to the \verb|\Medium| font.
+% \begin{macrocode}
+\newenvironment{signl}{\begin{landscape}\begin{center}\Medium}%
+ {\end{center}\end{landscape}}
+\newenvironment{signp}{\begin{portrait}\begin{center}\Medium}%
+ {\end{center}\end{portrait}}
+% \end{macrocode}
+% \end{macro} \end{macro}
+% One usually doesn't need page numbers on signs. That's why we're switching
+% them off here.
+% \begin{macrocode}
+\pagestyle{empty}
+% \end{macrocode}
+% That's all there is to it!
+% Arrows at the appropriate size would be nice, too. Well, not now.
+% Maybe some other time
+% I'll feel like fooling around with \MF\ for a bit\dots
+%
+% \section{Acknowledgment}
+%
+% Thanks to Volker Kurz for helping with the fine tuning.
+% \Finale
+\endinput
diff --git a/macros/latex209/contrib/bigsign/bigsign.tex b/macros/latex209/contrib/bigsign/bigsign.tex
new file mode 100644
index 0000000000..619724525f
--- /dev/null
+++ b/macros/latex209/contrib/bigsign/bigsign.tex
@@ -0,0 +1,87 @@
+
+\ifx\selectfont\undefined
+ \documentstyle[newdoc,ltugboat]{article}
+\else
+ \documentstyle[oldlfont,doc,ltugboat]{article}
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% The next section defines a few font related commands if the
+%% new font selection scheme is in force.
+%%
+%% Additionally you have to use the oldlfont option because this was
+%% written for the old LaTeX.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx \selectfont\undefined \else
+ \ifx\tensl\undefined
+ \newcommand{\tensl}
+ {\family{cmr}\series{m}\shape{sl}\size{10}{12pt}\selectfont}
+ \fi
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% The next few lines are for those with a new TeX 3.0 to ensure
+%% that hyphenation etc. is done correctly.
+%%
+
+\ifx \lefthyphenmin\undefined \else
+ \lefthyphenmin=2
+ \righthyphenmin=3
+ \errorcontextlines=1
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% And finally some definitions for the doc style
+%% to get this special article right.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\SelfDocumenting
+\addtolength{\marginparwidth}{1cm} % Long macro names
+
+% Compensate for stupid long net address (lingnau@cs.uni-ffm.de should have
+% been all right, no?)
+\makeatletter
+\def\makesignature{%
+ \par
+ \rightline{%
+ \vbox{\hsize=15pc \ninepoint \raggedright % was 12pc
+ \parindent \z@ \everypar={\hangindent 1pc }
+ \parskip \z@skip
+ \netaddrat
+ \netaddrpercent
+ \def\|{\unskip\hfil\break}%
+ \def\\{\endgraf}%
+ \def\net{\tt}%
+ \def\phone{\rm Phone: } \rm
+ \medskip
+ \@signature}}
+ }
+\makeatother
+\PrelimDraftfalse
+\setcounter{page}{1}
+
+\setcounter{IndexColumns}{2} % two column index
+%\let\DescribeMacro\SpecialUsageIndex % \
+%\let\DescribeEnv\SpecialEnvIndex % > no marginal notes
+%\renewcommand{\PrintMacroName}[1]{} % /
+
+\renewcommand{\theCodelineNo}{{\rm\tiny\arabic{CodelineNo}}}
+
+%\MakeShortverb{\|}
+%\DisableCrossrefs % No Cross references
+\EnableCrossrefs
+%\OnlyDescription % Full article
+%\RecordChanges % Do not print changes
+\CodelineIndex % Code lines numbered
+%\PageIndex
+
+\begin{document}
+ \DocInput{bigsign.doc}
+\end{document}
+
diff --git a/macros/latex209/contrib/bigsign/docstrip.cmd b/macros/latex209/contrib/bigsign/docstrip.cmd
new file mode 100644
index 0000000000..93b6b0a69e
--- /dev/null
+++ b/macros/latex209/contrib/bigsign/docstrip.cmd
@@ -0,0 +1,26 @@
+\preamble
+
+Copyright (C) 1992 by Anselm Lingnau. All rights reserved.
+
+IMPORTANT NOTICE:
+
+You are NOT ALLOWED to change this file. You may however copy this file
+to a different name and then change that copy.
+
+You are ALLOWED to distribute this file. You are NOT ALLOWED
+to take money for the distribution or use of this file (or a changed
+version) except for some nominal charge for copying etc.
+
+Error Reports in case of UNCHANGED versions to
+
+ Anselm Lingnau
+ Buchenweg 1
+ D-6239 Eppstein 2
+ Federal Republic of Germany
+ Internet: <lingnau@math.uni-frankfurt.de>
+
+\endpreamble
+
+\processfile{bigsign}{doc}{sty}{t}
+
+\endinput
diff --git a/macros/latex209/contrib/birkhaeuser/birk.sty b/macros/latex209/contrib/birkhaeuser/birk.sty
new file mode 100644
index 0000000000..02313de238
--- /dev/null
+++ b/macros/latex209/contrib/birkhaeuser/birk.sty
@@ -0,0 +1,139 @@
+%%% Document option for proceedings after Birkhaeuser
+%%% Bengt M{\aa}rtensson bengt@mathematik.uni-Bremen.de g09e@dhbrrz41.bitnet
+
+\typeout{Document Option `BIRK <10 June 1989>}
+
+% For the title page:
+%
+% There is a new command \dedication, the command \date is ignored
+
+\newfont{\titlefont}{cmr17} % Like Birkhauser wants it
+\newfont{\authorfont}{cmr12}
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle \fi\thispagestyle{empty}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em % Vertical space above title.
+ \begin{center}
+ {\LARGE\titlefont \@title \par} % Title set in \LARGE size.
+ \vskip 4em % Vertical space after title.
+ {\large\authorfont % each author set in \large, in a
+ \lineskip .5em % tabular environment
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 2em % Vertical space after author.
+ \begin{flushright}
+ \normalsize\it\@dedication
+ \end{flushright}
+% {\large \@date} % Date set in \large size.
+\end{center}
+ \par
+ \vskip 1.5em} % Vertical space after date.
+
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\normalsize\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\small
+\quotation\noindent\ignorespaces
+\fi}
+
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+\def\dedication#1{\gdef\@dedication{#1}}
+\gdef\@dedication{\mbox{}} %Default is empty
+
+%%% For the end of the article:
+
+\def\authorinfo#1{\par\bigskip\noindent\ignorespaces#1}
+
+%%% Theorem- and Remark like environments (also see the file remark.sty)
+%%% The following theorem-like environments are pre-defined: theorem,
+%%% lemma, corollary, proposition.
+%%% The following remark-like environments are pre-defined:
+%%% definition, remark, example.
+%%% There is also a proof environement and an acknowledgement
+%%% environment.
+
+\input remark.sty
+
+\def\@beginremark#1#2{\trivlist \item[\hskip \labelsep{\it #1\ #2.\ }]}
+\def\@opargbeginremark#1#2#3{\trivlist
+ \item[\hskip \labelsep{\it #1\ #2\ (#3).\ }]}
+
+\newremark{definition}{Definition}
+\newremark{remark}{Remark}
+\newremark{example}[remark]{Example}
+
+
+% We put periods after the number, as opposed to standard LaTeX.
+\def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2.\ }]}
+\def\@opargbegintheorem#1#2#3{\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2.\ (#3)\ }]}
+\def\@endtheorem{\endtrivlist}
+
+\newtheorem{theorem}{Theorem}
+\newtheorem{corollary}[theorem]{Corollary}
+\newtheorem{lemma}[theorem]{Lemma}
+\newtheorem{proposition}[theorem]{Proposition}
+
+\def\@rectangle {\hbox{\vrule \vbox to 0.4em
+ {\hrule\hbox to 0.4em{\hfil}\vfil\hrule}\vrule}}
+\xdef\@endgadget #1{{\unskip\nobreak\hfil\penalty50\hskip1em\hbox{}\nobreak
+ \hfil#1\parfillskip=0pt\finalhyphendemerits=0\par}}
+%
+%\def\@qedsymbol{\@rectangle}
+\def\@qedsymbol{Q.E.D.}
+\def\qed{\@endgadget{\@qedsymbol}}
+%
+\newenvironment{declaration}[1]{\trivlist \item[\hskip \labelsep{\bf #1 }]\ignorespaces}{\endtrivlist}
+%\newenvironment{definition}{\begin{declaration}{Definition}}{\end{declaration}}
+\newenvironment{proofof}[1]{\begin{declaration}{#1}}{\qed\end{declaration}}
+\newenvironment{proof}{\begin{proofof}{Proof.}}{\end{proofof}}
+%
+\newenvironment{acknowledgement}{\trivlist \item[\hskip \labelsep{\it Acknowledgement:\quad}]\ignorespaces}{\endtrivlist}
+
+% Somewhat changed appearance
+\def\thebibliography#1{\begin{center}
+{REFERENCES\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\list{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\ds@twoside % Left- and right heads different
+
+\def\@threepart#1#2#3{\rlap{#1} \hfil {#2} \hfil \llap{#3}}
+\def\@oddfoot{}\def\@evenfoot{}
+\def\runningtitle#1#2{\def\@oddhead{\@threepart{}{\uppercase{#2}}{\thepage}}
+ \def\@evenhead{\@threepart{\thepage}{\uppercase{#1}}{}}}
+
+%%% Measures the way Birkhauser wants it
+
+\textheight = 42\baselineskip
+\advance\textheight by \topskip
+\textwidth 4.5in
+\let\footnotesize=\normalsize
+\def\footnoterule{\kern-3\p@
+ \hrule width 2in%.4\columnwidth
+ \kern 2.6\p@} % The \hrule has default height of .4pt .
diff --git a/macros/latex209/contrib/birkhaeuser/birkhaus.bib b/macros/latex209/contrib/birkhaeuser/birkhaus.bib
new file mode 100644
index 0000000000..92d915107d
--- /dev/null
+++ b/macros/latex209/contrib/birkhaeuser/birkhaus.bib
@@ -0,0 +1,21 @@
+@book{ TeX,
+ author= {D.K. Knuth},
+ title= {The {\rm T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}book},
+ publisher= {Addison-Wesley},
+ year= {1989},
+ ISBN= {0-201-13448-9},
+ }
+@book{ LaTeX,
+ author= {Leslie Lamport},
+ title= {\LaTeX: User's Guide and Reference Manual},
+ publisher= {Addison-Wesley},
+ year= {1986},
+ ISBN= {0-201-15709-X},
+ }
+@book{ LaTeXD,
+ author= {Helmut Kopka},
+ title= {\LaTeX, eine Einfuehrung},
+ publisher= {Addison-Wesley},
+ year= {1989},
+ ISBN= {3-89319-199-2},
+ }
diff --git a/macros/latex209/contrib/birkhaeuser/birkhaus.sty b/macros/latex209/contrib/birkhaeuser/birkhaus.sty
new file mode 100644
index 0000000000..1536ef7cd9
--- /dev/null
+++ b/macros/latex209/contrib/birkhaeuser/birkhaus.sty
@@ -0,0 +1,271 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Silvano Balemi, balemi@aut.ee.ethz.ch",
+%%% version = "1.2",
+%%% date = "14-MAY-1993",
+%%% filename = "birkhaus.sty",
+%%% address = "Birk\"auser Verlag AG
+%%% P.O.Box 133
+%%% Klosterweg 23, 4010 Basel, Switzerland",
+%%% telephone = "+41 (61) 271.74.00",
+%%% FAX = "+41 (61) 271.76.66",
+%%% email = "birkhauser@urz.unibas.ch (Internet)",
+%%% keywords = "LaTeX, publisher style",
+%%% supported = "yes. Please send comments via E-mail",
+%%% mainserver = "ifa.ethz.ch"
+%%% docstring = "document-style for books/ or conference/workshop
+%%% proceedings according to the instructions of
+%%% Birk\"auser Verlag.
+%%%
+%%% Usage:
+%%% \documentstyle[birkhauser]{article}
+%%% \begin{document}
+%%% \author{...}
+%%% \title{...}
+%%% \maketitle
+%%% \begin{abstract}...\end{abstract}
+%%% ...
+%%% \end{document}
+%%%
+%%% The command "\markboth{leftTEXT}{right}" puts the
+%%% text "leftTEXT" and "rightTEXT" on the running heads
+%%% together with the page number. The head on
+%%% the first page is defined by "\head{firstHEAD}".
+%%% In order to remove head and page number, insert
+%%% \thispagestyle{empty}\pagestyle{empty} or
+%%% \thispagestyle{plain}\pagestyle{plain}
+%%% right after the \maketitle command!!
+%%%
+%%% }
+%%% ====================================================================
+\typeout{Document Style `birkhaus' <14-MAY-1993>.}
+
+% Dimensions of the text
+\headheight 20mm
+\oddsidemargin 2.5mm
+\evensidemargin 2.5mm
+\topmargin -20mm
+\textheight 230mm
+\textwidth 155mm
+\pagestyle{myheadings}
+\newdimen\headwidth
+\newdimen\headrulewidth
+\headrulewidth 0.4pt
+\headwidth \textwidth
+\def\footnoterule{\kern-3\p@
+ \hrule width \columnwidth
+ \kern 2.6\p@}
+
+\def\head#1{\def\@head{#1}}
+\head{\copyright Birkh\"auser Verlag Basel}
+
+\def\ps@birkhauser{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}{\footnotesize\sc
+\@head}\hfill\rm\thepage}}
+
+%%% Definition of font sizes to 12 points for the normal size
+\def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt%
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{11.4pt}\xpt\@xpt%
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt
+}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt%
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt \def\bfsl{\frtnbfs}}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt \def\bfsl{\svtnbfs}}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt \def\bfsl{\twtybfs}}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt \def\bfsl{\twfvbfs}}
+\let\Huge=\huge
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep 6pt plus 2pt minus 2pt
+ \parsep 1pt plus 1pt minus 1pt
+ \itemsep 1pt plus 1pt minus 1pt}
+\let\@listi\@listI
+\@listi
+
+% Abstract defined to be left at the begining of a paragraph.
+% Paragraph is 135mm wide
+\def\abstract{
+\advance \rightskip by 10mm
+\advance \leftskip by 10mm
+\vspace{-0.8em}
+\noindent
+\small{\bf Abstract.}
+}
+\def\endabstract{\par\normalsize\rm}
+
+% Some additional definitions.
+% \titlenewline enforces a new line in the title but not in the
+% running heads. \headnewline enforces a new line in the
+% running heads but not in the title
+\def\commentout#1{}
+\def\titlenewline{\\}
+\def\headnewline{ }
+\def\samethanks{\addtocounter{footnote}{-1}\footnotemark}%%%Same affilation%%%
+
+% New definition of maketitle allowing the use of the definitions
+% above
+\def\maketitle{
+\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi
+\thispagestyle{birkhauser}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+\gdef\@thanks{}
+%\gdef\@author{}
+%\gdef\@title{}
+%\let\thanks\relax
+\def\titlenewline{ }
+\def\and{,~} %%%used in \author, but reactivated in headings RS%%%
+\let\thanks\commentout %%%\let instead of \def RS%%%
+\let\samethanks\relax %%%also reactivated RS%%%
+\def\headnewline{\\}
+}
+
+% title is 135mm wide like abstract paragraph
+\def\@maketitle{
+\newpage
+ \null
+\vskip 0em \begin{center}
+ \advance \rightskip by 10mm
+\advance \leftskip by 10mm
+ {\Large\sc \@title \par} \vskip 2.5em {\normalsize \lineskip .5em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \end{center}
+ \par
+ \vskip 2.5em
+}
+
+\ds@twoside % Left- and right heads different
+
+
+%\addtolength{\headwidth}{-60mm}
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}.}
+\def\thesubsection {\thesection\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+% Definition for the running heads. The standard command
+% \markboth{author's name}{title of the paper}
+% can be used to manually set the headers
+\def\@evenhead{\hbox to\headwidth{\vbox{\hbox
+{\rlap{\parbox[b]{\headwidth}{\centering\sc\leftmark \strut}}}
+\headrule}}\hss}
+\def\@oddhead{\hbox to\headwidth{\vbox{\hbox
+{\rlap{\parbox[b]{\headwidth}{\centering\sc\rightmark\strut}}}
+\headrule}}\hss}
+\def\headrule{\vskip 3pt{\hrule\@height\headrulewidth\@width\headwidth
+ \vskip-\headrulewidth}}
+\def\rightmark{\hfill\@title\hfill\thepage}
+\def\leftmark{\thepage\hfill\@author\hfill}
+\def\markboth#1#2{
+\def\leftmark{\thepage\hfill#1\hfill}
+\def\rightmark{\hfill#2\hfill\thepage}}
+
+% defines the command for putting the header
+% footernote{TEXT} is the same as markboth{TEXT}{TEXT}. Here for
+% compatibility with other style files.
+\def\footernote#1{\markboth{#1}{#1}}
+
+% Redefinition of the sections, subsections and subsubsection in order
+% to obtain different titles
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\normalsize\bf}{}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\normalsize\bf}{}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{0ex plus 0ex}{\normalsize\bf}{.\mbox{~}}}%%%\it changed in \bf RS%%%
+
+% Redefinition of startsection to allow an additional argument to
+% put for instance ". " after the subsubsection name.
+\def\@startsection#1#2#3#4#5#6#7{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi
+ \vskip -\parskip\@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}{#7}}
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}{}{#7}}}}
+
+\def\@sect#1#2#3#4#5#6#7[#8]#9{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #9#7\par}%
+ \endgroup
+ \csname #1mark\endcsname{#8}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #8}\else
+ \def\@svsechd{#6\hskip #3\@svsec #9#7\csname #1mark\endcsname
+ {#8}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #8}}\fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5#6{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M
+ #6#5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #6#5}\fi
+ \@xsect{#3}}
+
+
+%Redefinition of the label for REFERENCE to be upper case as required
+%for the section titles.
+\def\thebibliography#1{\section*{REFERENCES\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\long\def\@makecaption#1#2{
+\vskip 10pt
+\setbox\@tempboxa\hbox{\bf #1: \rm #2}
+\ifdim \wd\@tempboxa >\hsize \bf #1: \rm #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+\fi}
+
+% Definition of the proof environment
+\def\QED{~\rule[-1pt]{1.4ex}{1.4ex}\par\medskip}
+\newenvironment{proof}{\noindent{\bf Proof:}}{ \hspace*{\fill} \QED}
+
+\newtheorem{theorem}{Theorem}
+\newtheorem{corollary}{Corollary}
+\newtheorem{lemma}{Lemma}
+\newtheorem{proposition}{Proposition}
+\newtheorem{conjecture}{Conjecture}
+\newtheorem{remark}{Remark}
+\newtheorem{definition}{Definition}
+\newtheorem{problem}{Problem}
+
+\newcommand{\eqref}[1]{{\rm (\ref{#1})}}
+\newcommand{\scp}[1]{\setcounter{page}{#1}}
+
diff --git a/macros/latex209/contrib/birkhaeuser/birkhaus.tex b/macros/latex209/contrib/birkhaeuser/birkhaus.tex
new file mode 100644
index 0000000000..0caebc4589
--- /dev/null
+++ b/macros/latex209/contrib/birkhaeuser/birkhaus.tex
@@ -0,0 +1,138 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% birkhaus.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%% More information: see the header of birkhaus.sty %%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentstyle[birkhaus]{article}
+
+\begin{document}
+
+\setcounter{page}{9} %% Can be used to set first page number
+
+\bibliographystyle{unsrt} %% Set the bibliography style to be unsrt.bst
+
+%% defines the title
+\title{Sample Article for Preparation of \titlenewline Documents
+Using the \LaTeX\ Style File\titlenewline birkhaus.sty}
+
+\author{ % defines the authors
+Silvano Balemi\thanks{Automatic Control Laboratory, Swiss Federal
+Institute of Technology (ETH), 8092 Zurich, Switzerland,
+balemi@aut.ee.ethz.ch}\and
+Rein Smedinga\thanks{Dept. of Computing Science, University of Groningen,
+P.O.Box 800, NL-9700 Groningen, Netherlands, rein@cs.rug.nl}
+}
+
+%% Following command is optional to manually set the running heads.
+\markboth{Silvano Balemi and Rein Smedinga}
+{Sample Article for the \LaTeX\ Style File birkhaus.sty}
+
+\head{Sample Book \copyright Birkh\"auser Verlag Basel}
+
+\maketitle %% Produces the title.
+%\thispagestyle{empty}\pagestyle{empty} %% Removes the headers.
+
+\begin{abstract} %% Defines the abstract
+This sample \LaTeX\ article gives directions on the use of the
+birkhaus.sty style file, which formats articles for proceedings
+according to instructions of Birk\"auser Verlag, Basel.
+\end{abstract}
+
+\section{INTRODUCTION} %% SECTION TITLES IN CAPITALS
+The style file birkhaus.sty can be obtained by E-mail from
+the publisher upon request to birkhauser@urz.unibaz.ch
+
+The style file, which sets the font to 12 points, also automatically
+sets the running heads with the name of the authors and the title of
+the paper. Should it be necessary to set manually the running heads
+(because of the desire to break line at different places or because a
+different current head is desired) this can be done with the
+standard \LaTeX\ instruction
+{\tt$\backslash$markboth\{authors\}\{title\}}.
+The headers can also be disabled using the command
+{\tt $\backslash$pagestyle\{empty\}}.
+
+\subsection{Use of the Style File} %% Subsection Titles Lower-cased
+The first line of the file should be
+{\tt$\backslash$documentstyle[birkhaus]\{article\}}. Please pay
+attention to the following points
+\begin{itemize}
+\item no font or dimension changes
+\item no changes of parskip or parindent
+\item the affiliation of the authors should be in a footnote with
+ {\tt$\backslash$thanks}. Repeated affiliations can be obtained
+ with the command {\tt$\backslash$samethanks}. Please use full
+ address including E-mail address if possible.
+\item the bibliography style should be defined using the style file
+ {\tt unsrt.bib} with the command
+ {\tt$\backslash$bibliographystyle\{unsrt\}}
+\end{itemize}
+The titles of the sections should be in capital letters, subsections
+and subsubsections in lower case letters.
+
+\subsubsection{Environments} %% Subsubsection Titles Lower-cased
+The environments for theorem, propositions etc. can be used with the
+usual \LaTeX\ \cite{LaTeX,LaTeXD} syntax. The proof environment
+is already defined.
+
+\begin{theorem}[Theorem name]
+If $A$ satisfies the main axiom, then $A$ holds if and only if $B$
+holds.
+\end{theorem}
+\begin{proof}
+The proof is trivial
+\end{proof}
+
+The following environments have been predefined:
+\begin{enumerate}
+\item {\tt theorem}
+\item {\tt corollary}
+\item {\tt lemma}
+\item {\tt proposition}
+\item {\tt conjecture}
+\item {\tt proof}
+\end{enumerate}
+
+\subsubsection{Illustrations}
+Illustrations have centered caption.
+\begin{figure}[h]
+\begin{center}
+\begin{picture}(235,80)(5,85)
+\put( 5, 85){\framebox(235,80){}}
+\end{picture}
+\end{center}
+\caption{This is our sample figure}
+\end{figure}
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular}{|c||c|c|}
+\hline
+$\oplus$& 0 &1\\
+\hline\hline
+0 & 1 & 0\\\hline
+1 & 0 & 1\\\hline
+\end{tabular}
+\end{center}
+\caption{This is our sample table}
+\end{table}
+
+\subsection{OTHER ADDITIONAL COMMANDS}
+{\tt$\backslash$titlenewline} can be used to put a newline in the argument
+of {\tt$\backslash$title} that appears in the title only, {\tt$\backslash$%
+headnewline} similarly puts a newline in that argument that appears in
+the headings only.
+
+\section{CONCLUSION}
+Please address any question to the author balemi@aut.ee.ethz.ch.
+
+\subsection*{Acknowledgment}
+The authors would like to acknowledge many people for their useful
+comments.
+
+\nocite{*}
+\bibliography{bib-file} % defines the bib file for your references
+ % Here defined to be bib-file.bib
+\end{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% End of birkhaus.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/birkhaeuser/birksample.bib b/macros/latex209/contrib/birkhaeuser/birksample.bib
new file mode 100644
index 0000000000..b4273ced7e
--- /dev/null
+++ b/macros/latex209/contrib/birkhaeuser/birksample.bib
@@ -0,0 +1,10 @@
+@PHDTHESIS{BMPhD,
+ AUTHOR = "Bengt M{\aa}rtensson",
+ TITLE = "Adaptive Stabilization",
+ SCHOOL = "Lund Institute of Technology",
+ YEAR = "1986",
+ ADDRESS = "Department of Automatic Control, Lund, Sweden",
+ MONTH = "February",
+ optNOTE = ""
+}
+
diff --git a/macros/latex209/contrib/birkhaeuser/birksample.tex b/macros/latex209/contrib/birkhaeuser/birksample.tex
new file mode 100644
index 0000000000..bd78fba52b
--- /dev/null
+++ b/macros/latex209/contrib/birkhaeuser/birksample.tex
@@ -0,0 +1,80 @@
+\documentstyle[BIRK]{article}
+\begin{document}
+\title{New Uncertain Results on Control of Systems}
+\author{I. A. MLOST\thanks{Unsupported in part by NSF grant 1234}}
+\dedication{Dedicated to I. D. Iot on his $\pi$-th birthday}
+\maketitle
+\runningtitle{I. A. Mlost}{Uncertain Results on Control of Systems}
+ \begin{abstract}
+This paper demonstrates the use of the {\tt birk.sty} file for use in
+the proceedings of the workshop ``Control of Uncertain Systems''.
+ \end{abstract}
+%
+\section{Introduction}
+All papers start with and introduction, so there has to be an
+introduction also in this ``contribution''. To get something in the
+reference list, we remark that \cite{BMPhD} is ingenious.
+%
+\section{Definitions}
+%
+ \begin{definition}
+ For $\Xi \not= 0$ a complex number, define
+ \begin{displaymath}
+ \gamma(\Xi) = \frac{\Xi}{\bar\Xi}
+ \end{displaymath}
+ \end{definition}
+%
+ \begin{remark}
+ This is a rather pointless remark.
+ \end{remark}
+%
+\section{Main Results}
+%
+ \begin{proposition}
+ All theorems, propositions, lemmas, and corollaries are written in italics.
+ \end{proposition}
+%
+ \begin{proof}
+ Note the typesetting of the previous proposition,\ldots{},concluding
+ the proof.
+ \end{proof}
+We are now ready for the main result.
+ \begin{theorem}
+ For $n > 2$, there are no three positive integers $a,b,c$ such that
+ \begin{displaymath}
+ a^n + b^n = c^n
+ \end{displaymath}
+ \end{theorem}
+%
+ \begin{proof}
+ We leave the proof to the reader as a stimulating exercise.
+ \end{proof}
+%
+ \begin{corollary}
+ For economical reasons, please do not send large ($\geq$ 5 kbyte) email
+ from outside of Germany to {\tt bengt@mathematik.uni-Bremen.de},
+ but to {\tt g09e@dhbrrz41.bitnet}
+ \end{corollary}
+%
+ \begin{example}
+ An example.
+ \end{example}
+%
+\begin{acknowledgement}
+ The author would like to thank the great god Baccus for his stimulating
+ influence on this work.
+\end{acknowledgement}
+%
+\bibliography{BIRKsample}
+\bibliographystyle{abbrv}
+%
+\authorinfo{
+Bengt M\aa rtensson\\
+Institut f\"ur Dynamische Systeme\\
+Universit\"at Bremen\\
+Postfach 330 440\\
+D-2800 Bremen 33\\
+F.R.G.\\
+{\tt bengt@mathematik.uni-Bremen.de\\
+g09e@dhbrrz41.bitnet}}
+\end{document}
diff --git a/macros/latex209/contrib/bookform/bf10.sty b/macros/latex209/contrib/bookform/bf10.sty
new file mode 100644
index 0000000000..46de4b3c69
--- /dev/null
+++ b/macros/latex209/contrib/bookform/bf10.sty
@@ -0,0 +1,366 @@
+% BOOKFORM DOCUMENT STYLE -- for LaTeX version 2.08
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt}
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 44pt % Left margin on odd-numbered pages.
+ \evensidemargin 82pt % Left margin on even-numbered pages.
+ \marginparwidth 107pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -35pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 24pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 75pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 8.33in % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 6.25in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 12pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 6pt plus 2pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 10pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 15pt % Width of paragraph indentation.
+\topsep 8pt plus 2pt minus 4pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 2pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+\itemsep 4pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par \nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- i.e., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\parindent}
+ {3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+\def\subsection{\@startsection{subsection}{2}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus .2ex}{\subsectionstyle}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus -.2ex}{\subsubsectionstyle}}
+\def\paragraph{\@startsection {paragraph}{4}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\paragraphstyle}}
+\def\subparagraph{\@startsection {subparagraph}{5}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subparagraphstyle}}
+\def\subsubparagraph{\@startsection {subsubparagraph}{6}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubparagraphstyle}}
+\def\subsubsubparagraph{\@startsection {subsubsubparagraph}{7}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubsubparagraphstyle}}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{7}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section counter to zero and
+% -- reset the subsection counter to zero
+% -- redefine the \section command to produce the proper format appendix
+
+\def\appendix{\par
+ \clearpage
+ \renewcommand{\thepage}{\Roman{appnumber}-\arabic{page}}
+ \setcounter{appnumber}{0}
+ \ifnum \value{section} > 9 \setcounter{increment}{99}
+ \else \setcounter{increment}{9} \fi
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \makeatletter
+ \def\section{\clearpage \addtocounter{section}{\value{increment}}
+ \addtocounter{appnumber}{1} \setcounter{page}{1}
+ \addtocontents{toc}{\noindent\hspace{7em}APPENDIX~\Roman{appnumber}}
+ \setcounter{figure}{0}
+ \setcounter{table}{0}
+ \begin{center}
+ \large\bf
+ APPENDIX~\Roman{appnumber}
+ \end{center}
+ \par
+ \@startsection {section}{1}{\parindent}{3.5ex plus 1ex minus
+ .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+ \makeatother
+ \def\thefigure{\Roman{appnumber}-\arabic{figure}}
+ \def\thetable{\Roman{appnumber}-\Roman{table}}
+}
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin
+
+\leftmargini 4.5em % 25pt
+\leftmarginii 2.2em % 22pt % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % 18.7pt % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % 17pt % > \labelsep + width of 'M.'
+\leftmarginv 1em % 10pt
+\leftmarginvi 1em % 10pt
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 4pt plus 2pt minus 1pt
+
+\def\@listi{\leftmargin\leftmargini}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+% DEC/CMS REPLACEMENT HISTORY, Element BF10.STY
+% *7 25-FEB-1986 14:12:05 MCPHERSON "Change \footskip to move page number down a little"
+% *6 24-FEB-1986 13:22:24 MCPHERSON "Remove revision dates from the file"
+% *5 21-FEB-1986 18:12:59 MCPHERSON "Corrected the increment counter definition"
+% *4 21-FEB-1986 18:09:56 MCPHERSON "Correct appnumber counter definition"
+% *3 21-FEB-1986 17:36:36 MCPHERSON "Moved subsection,... text to end of title, fixed toc entries for appendix"
+% *2 17-FEB-1986 14:27:35 MCPHERSON "Appendices have figures and tables numbered from 1"
+% *1 7-FEB-1986 10:12:15 MCPHERSON "Initial bookform style"
+% DEC/CMS REPLACEMENT HISTORY, Element BF10.STY
diff --git a/macros/latex209/contrib/bookform/bf11.sty b/macros/latex209/contrib/bookform/bf11.sty
new file mode 100644
index 0000000000..1c4c8d4bd4
--- /dev/null
+++ b/macros/latex209/contrib/bookform/bf11.sty
@@ -0,0 +1,366 @@
+% BOOKFORM DOCUMENT STYLE -- for LaTeX version 2.08
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 4pt plus 2pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 36pt % Left margin on odd-numbered pages.
+ \evensidemargin 74pt % Left margin on even-numbered pages.
+ \marginparwidth 100pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+ \marginparwidth 83pt
+\fi
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -35pt % Nominal distance from top of page to top of
+
+\headheight 24pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 75pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 8.33in % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 6.25in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 12pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 6pt plus 2pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 11pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 17pt % Width of paragraph indentation.
+\topsep 9pt plus 3pt minus 5pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 3pt plus 1pt minus 2pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+\itemsep 4.5pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par\nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- i.e., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\parindent}
+ {3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+\def\subsection{\@startsection{subsection}{2}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus .2ex}{\subsectionstyle}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus -.2ex}{\subsubsectionstyle}}
+\def\paragraph{\@startsection {paragraph}{4}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\paragraphstyle}}
+\def\subparagraph{\@startsection {subparagraph}{5}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subparagraphstyle}}
+\def\subsubparagraph{\@startsection {subsubparagraph}{6}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubparagraphstyle}}
+\def\subsubsubparagraph{\@startsection {subsubsubparagraph}{7}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubsubparagraphstyle}}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{7}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section counter to zero and
+% -- reset the subsection counter to zero
+% -- redefine the \section command to produce the proper format appendix
+
+\def\appendix{\par
+ \clearpage
+ \renewcommand{\thepage}{\Roman{appnumber}-\arabic{page}}
+ \setcounter{appnumber}{0}
+ \ifnum \value{section} > 9 \setcounter{increment}{99}
+ \else \setcounter{increment}{9} \fi
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \makeatletter
+ \def\section{\clearpage \addtocounter{section}{\value{increment}}
+ \addtocounter{appnumber}{1} \setcounter{page}{1}
+ \addtocontents{toc}{\noindent\hspace{7em}APPENDIX~\Roman{appnumber}}
+ \setcounter{figure}{0}
+ \setcounter{table}{0}
+ \begin{center}
+ \large\bf
+ APPENDIX~\Roman{appnumber}
+ \end{center}
+ \par
+ \@startsection {section}{1}{\parindent}{3.5ex plus 1ex minus
+ .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+ \makeatother
+ \def\thefigure{\Roman{appnumber}-\arabic{figure}}
+ \def\thetable{\Roman{appnumber}-\Roman{table}}
+}
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 4.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 4.5pt plus 2pt minus 1pt
+
+\def\@listi{\leftmargin\leftmargini}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+% DEC/CMS REPLACEMENT HISTORY, Element BF11.STY
+% *7 25-FEB-1986 14:12:14 MCPHERSON "Change \footskip to move page number down a little"
+% *6 24-FEB-1986 13:22:42 MCPHERSON "Remove revision dates from the file"
+% *5 21-FEB-1986 18:13:03 MCPHERSON "Corrected the increment counter definition"
+% *4 21-FEB-1986 18:09:59 MCPHERSON "Correct appnumber counter definition"
+% *3 21-FEB-1986 17:36:40 MCPHERSON "Moved subsection,... text to end of title, fixed toc entries for appendix"
+% *2 17-FEB-1986 14:28:06 MCPHERSON "Appendices have figures and tables numbered from 1"
+% *1 7-FEB-1986 10:12:20 MCPHERSON "Initial bookform style"
+% DEC/CMS REPLACEMENT HISTORY, Element BF11.STY
diff --git a/macros/latex209/contrib/bookform/bf12.sty b/macros/latex209/contrib/bookform/bf12.sty
new file mode 100644
index 0000000000..fc82adbff5
--- /dev/null
+++ b/macros/latex209/contrib/bookform/bf12.sty
@@ -0,0 +1,367 @@
+% BOOKFORM DOCUMENT STYLE -- for LaTeX version 2.08
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+\def\@listi{\parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 21pt % Left margin on odd-numbered pages.
+ \evensidemargin 59pt % Left margin on even-numbered pages.
+ \marginparwidth 85pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+ \marginparwidth 68pt
+\fi
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -35pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 24pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 75pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 8.33in % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 6.25in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 14pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 8pt plus 2pt minus 4pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 14pt plus 2pt minus 4pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 14pt plus 4pt minus 4pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 14pt plus 2pt minus 4pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 10pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 10pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 7pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 12pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 1.5em % Width of paragraph indentation.
+\topsep 10pt plus 4pt minus 6pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 3pt plus 2pt minus 2pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+\itemsep 5pt plus 2.5pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par\nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\parindent}
+ {3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+\def\subsection{\@startsection{subsection}{2}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus .2ex}{\subsectionstyle}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus -.2ex}{\subsubsectionstyle}}
+\def\paragraph{\@startsection {paragraph}{4}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\paragraphstyle}}
+\def\subparagraph{\@startsection {subparagraph}{5}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subparagraphstyle}}
+\def\subsubparagraph{\@startsection {subsubparagraph}{6}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubparagraphstyle}}
+\def\subsubsubparagraph{\@startsection {subsubsubparagraph}{7}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubsubparagraphstyle}}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{7}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section counter to zero and
+% -- reset the subsection counter to zero
+% -- redefine the \section command to produce the proper format appendix
+
+\def\appendix{\par
+ \clearpage
+ \renewcommand{\thepage}{\Roman{appnumber}-\arabic{page}}
+ \setcounter{appnumber}{0}
+ \ifnum \value{section} > 9 \setcounter{increment}{99}
+ \else \setcounter{increment}{9} \fi
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \makeatletter
+ \def\section{\clearpage \addtocounter{section}{\value{increment}}
+ \addtocounter{appnumber}{1} \setcounter{page}{1}
+ \addtocontents{toc}{\noindent\hspace{7em}APPENDIX~\Roman{appnumber}}
+ \setcounter{figure}{0}
+ \setcounter{table}{0}
+ \begin{center}
+ \large\bf
+ APPENDIX~\Roman{appnumber}
+ \end{center}
+ \par
+ \@startsection {section}{1}{\parindent}{3.5ex plus 1ex minus
+ .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+ \makeatother
+ \def\thefigure{\Roman{appnumber}-\arabic{figure}}
+ \def\thetable{\Roman{appnumber}-\Roman{table}}
+}
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 4.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 5pt plus 2.5pt minus 1pt
+
+\def\@listi{\leftmargin\leftmargini}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+% DEC/CMS REPLACEMENT HISTORY, Element BF12.STY
+% *7 25-FEB-1986 14:12:24 MCPHERSON "Change \footskip to move page number down a little"
+% *6 24-FEB-1986 13:22:55 MCPHERSON "Remove revision dates from the file"
+% *5 21-FEB-1986 18:13:06 MCPHERSON "Corrected the increment counter definition"
+% *4 21-FEB-1986 18:10:04 MCPHERSON "Correct appnumber counter definition"
+% *3 21-FEB-1986 17:36:42 MCPHERSON "Moved subsection,... text to end of title, fixed toc entries for appendix"
+% *2 17-FEB-1986 14:28:23 MCPHERSON "Appendices have figures and tables numbered from 1"
+% *1 7-FEB-1986 10:12:23 MCPHERSON "Initial bookform style"
+% DEC/CMS REPLACEMENT HISTORY, Element BF12.STY
diff --git a/macros/latex209/contrib/bookform/bookform.sty b/macros/latex209/contrib/bookform/bookform.sty
new file mode 100644
index 0000000000..72df3842c0
--- /dev/null
+++ b/macros/latex209/contrib/bookform/bookform.sty
@@ -0,0 +1,744 @@
+% BOOKFORM DOCUMENT STYLE -- for LaTeX version 2.08
+
+\typeout{Document Style 'bookform'. Version EX 02 - revised 24 February 1986}
+\typeout{}
+
+\def\subsubparagraphmark#1{} % Default definitions for bookform style
+\def\subsubsubparagraphmark#1{}
+%
+% Ignore boxes up to 10 point to wide
+%
+%\hfuzz=10pt
+
+% The type size option is handled by reading a different file for each
+% size, as follows:
+% 10pt : BF10, 11pt : BF11, 12pt : BF12
+% Implemented by \def'ing \@ptsize to last digit of file name.
+%
+
+\def\@ptsize{0} % Default is BF10.STY
+\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt option reads in BF11.STY
+\@namedef{ds@12pt}{\def\@ptsize{2}} % 12pt option reads in BF12.STY
+%
+% Define \documentnumber and \documentdate commands
+\newcommand{\documentnumber}[1]{\def\docnumber{#1}}
+\newcommand{\documentdate}[1]{\def\docdate{#1}}
+% Two-side or one-side printing.
+%
+% \@twosidefalse % Default is one-sided printing.
+\def\ds@twoside{\@twosidetrue % Defines twoside option.
+ \@mparswitchtrue} % Marginpars go on outside of page.
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+%
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+\input bf1\@ptsize.sty\relax
+\input extradefs
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+%\newdimen\descriptionmargin
+%\descriptionmargin=3em
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+%
+%
+\def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+
+\def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+% The macro \@eqnnum defines how equation numbers are to appear in equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero.
+%
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+\tabcolsep 6pt % Half the space between columns in a tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is stepped.
+% Counter OLDCTR must already be defined.
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+\newcounter {subsubparagraph}[subparagraph]
+\newcounter {subsubsubparagraph}[subsubparagraph]
+\newcounter {appnumber}
+\newcounter {increment}
+
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+
+\def\thepart{\Roman{part}} % Roman numeral part numbers.
+\def\thesection {\arabic{section}.}
+\def\thesubsection {\thesection\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+\def\thesubsubparagraph {\thesubparagraph.\arabic{subsubparagraph}}
+\def\thesubsubsubparagraph {\thesubsubparagraph.\arabic{subsubsubparagraph}}
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \subsection command writes a
+% \contentsline{subsection}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If subsections are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \thesubsection. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table' environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@section,
+% \l@subsection, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note that \section is level 1,
+% \subsection is level 2, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+
+\def\@pnumwidth{3em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{7}
+
+
+% TABLEOFCONTENTS
+%
+\def\tableofcontents{\section*{\protect\centering{TABLE OF CONTENTS}
+ \markboth{TABLE OF CONTENTS}{TABLE OF CONTENTS}}
+ \addvspace{1.0em plus 1pt} % space above toc entry
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \hbox to\textwidth{Paragraph \hfill Page}\par
+ \addvspace{1.0em plus 1pt} % space below Parag... entry
+ \endgroup
+ {\parskip 0pt plus 1pt
+ \@starttoc{toc}}}
+
+\def\l@part#1#2{\addpenalty{-\@highpenalty}
+ \addvspace{2.25em plus 1pt} % space above part line
+ \begingroup
+ \@tempdima 3em % width of box holding part number, used by
+ \parindent \z@ \rightskip \@pnumwidth %% \numberline
+ \parfillskip -\@pnumwidth
+ {\large \bf % set line in \large boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak % Never break after part entry
+ \endgroup}
+
+\def\l@section{\@dottedtocline{1}{0em}{7em}}
+\def\l@subsection{\@dottedtocline{2}{0em}{7em}}
+\def\l@subsubsection{\@dottedtocline{3}{0em}{7em}}
+\def\l@paragraph{\@dottedtocline{4}{0em}{7em}}
+\def\l@subparagraph{\@dottedtocline{5}{0em}{7em}}
+\def\l@subsubparagraph{\@dottedtocline{6}{0em}{7em}}
+\def\l@subsubsubparagraph{\@dottedtocline{7}{0em}{7em}}
+
+% LIST OF FIGURES
+%
+\def\listoffigures{\section*{\protect\centering{LIST OF FIGURES}
+ \markboth{LIST OF FIGURES}{LIST OF FIGURES}}
+ \addvspace{1.0em plus 1pt} % space above lof entry
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \hbox to\textwidth{Figure \hfill Page}\par
+ \addvspace{1.0em plus 1pt} % space below Figure... entry
+ \endgroup
+ {\parskip 0pt plus 1pt
+ \@starttoc{lof}}}
+
+\def\l@figure{\@dottedtocline{1}{0em}{3.5em}}
+
+% LIST OF TABLES
+%
+\def\listoftables{\section*{\protect\centering{LIST OF TABLES}
+ \markboth{LIST OF TABLES}{LIST OF TABLES}}
+ \addvspace{1.0em plus 1pt} % space above lot entry
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \hbox to\textwidth{Table \hfill Page}\par
+ \addvspace{1.0em plus 1pt} % space below Table... entry
+ \endgroup
+ {\parskip 0pt plus 1pt
+ \@starttoc{lot}}}
+
+\let\l@table\l@figure
+
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% TEMPORARY DEFINITIONS:
+
+\def\thebibliography#1{\section*{References\markboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep\usecounter{enumi}}}
+
+\let\endthebibliography=\endlist
+
+% \def\@biblabel#1{[#1]\hfill} % Produces the label for a \bibitem[...]
+ % command.
+% \def\@cite#1{[#1]} % Produces the output of the \cite command.
+
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+
+\newif\if@restonecol
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \markboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+\def\@idxitem{\par\hangindent 40pt}
+
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@} % The \hrule has default height of .4pt .
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth). The following macro indents
+% all lines of the footnote by 10pt, and indents the first line of
+% a new paragraph by 1em. To change these dimensions, just substitute
+% the desired value for '10pt' [in both places] or '1em'.
+% The mark is flushright against the footnote.
+%
+% It is much easier to write a macro in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. In that case, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+ \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+ \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1. #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+
+% FIGURE
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{hbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}
+\def\thetable{\@Roman\c@table}
+
+\def\fps@table{hbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+
+% \maketitle ==
+% BEGIN
+% \par
+% \begingroup
+% redefine \@makefnmark so footnote marks take zero space (this make
+% centering look better)
+% \thefootnote == \fnsymbol{footnote} % to number by *, dagger, etc.
+% if @twocolumn = true
+% then \twocolumn[\@maketitle]
+% else \@maketitle
+% fi
+% \thispagestyle{plain}
+% \@thanks % \thanks defines \@thanks to have \footnotetext commands for
+% % producing footnotes.
+% \endgroup
+% END
+\def\maketitle{\par
+ \begingroup
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle \fi
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage \thispagestyle{empty}
+ \parskip 0pt plus 1pt
+ \null
+
+ \vspace{.4in}
+ \begin{center}
+ {\large \bf \@title \par} % Title set in \large size.
+ \end{center}
+ }
+
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \sectionmark, ... , where
+% \sectionmark{TEXT} is called by \section to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'left' mark. Works like TeX's
+% \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'right' mark. Works like TeX's
+% \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \section command and
+% the right mark is changed by a \subsection command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+
+\mark{{}{}} % Initializes TeX's marks
+
+% \def\ps@empty{\def\@oddhead{}
+% \def\@oddfoot{}
+% \def\@evenhead{}\def\@evenfoot{}}
+%
+% \def\ps@plain{\def\@oddhead{}
+% \def\@oddfoot{\rm\hfil\thepage\hfil}
+% \def\@evenhead{}
+% \let\@evenfoot\@oddfoot}
+
+% Definition of 'headings' page style
+% Note the use of ##1 for parameter of \def\sectionmark inside the
+% \def\ps@headings.
+%
+
+\if@twoside % If two-sided printing.
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@evenhead{\rm \thepage\hfil \sl \leftmark}% Left heading.
+\def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage}% Right heading.
+\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}%
+\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else % If one-sided printing.
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage}% Heading.
+\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+% Definition of 'myheadings' page style. The user's \head command
+% changes the definition of \@lhead and/or \@rhead.
+%
+\def\ps@myheadings{\def\@oddhead{\hbox{}\sl\@rhead \hfil \rm\thepage}%
+\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\@lhead\hbox {}}%
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+% Definition of 'bookform' page style for LSI bookform documents.
+% Note the use of ##1 for parameter of \def\sectionmark inside the
+% \def\ps@bookform.
+%
+
+\if@twoside % If two-sided printing.
+\def\ps@bookform{%
+ \def\@oddfoot{\makebox[\textwidth][l]{
+ \makebox[1.1\textwidth][r]{
+ \rm \hbox{}\hfil \docnumber \hspace{1.5in} \thepage}}}
+ \def\@evenfoot{\makebox[\textwidth][r]{
+ \makebox[1.1\textwidth][l]{
+ \rm \thepage \hspace{1.5in} \docnumber \hfil}}}%
+\def\@evenhead{}
+\def\@oddhead{}
+\def\sectionmark##1{}\def\subsectionmark##1{}}
+\else % If one-sided printing.
+\def\ps@bookform{%
+ \def\@oddfoot{\makebox[\textwidth][l]{% First box is \textwidth wide
+ \makebox[1.1\textwidth][r]{% Inner box is slightly bigger
+ \rm\hbox{}\hfil \docnumber \hspace{1.5in} \thepage}}}%
+\def\@evenfoot{}%
+\def\@oddhead{} \def\@evenhead{}
+\def\sectionmark##1{}\def\subsectionmark##1{}}
+\fi
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\number\day\space \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\year}
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\ps@bookform
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column.
+\def\docdate{}
+\def\docnumber{}
+\if@twoside\else\raggedbottom\fi % Ragged bottom unless twoside option.
+
+%
+% Define the section style commands
+%
+\def\sectionstyle{\large\bf}
+\def\subsectionstyle{\large\bf}
+\def\subsubsectionstyle{\normalsize\bf}
+\def\paragraphstyle{\normalsize\bf}
+\def\subparagraphstyle{\normalsize\bf}
+\def\subsubparagraphstyle{\normalsize\bf}
+\def\subsubsubparagraphstyle{\normalsize\bf}
+% DEC/CMS REPLACEMENT HISTORY, Element BOOKFORM.STY
+% *7 27-FEB-1986 10:29:38 MCPHERSON "Remove commented \l@section definition"
+% *6 24-FEB-1986 14:48:13 MCPHERSON "set \parskip to 0pt inside list of tables and figures"
+% *5 24-FEB-1986 13:23:45 MCPHERSON "Set \parskip to 0pt only for table of contents"
+% *4 21-FEB-1986 18:13:10 MCPHERSON "Corrected the increment counter definition"
+% *3 21-FEB-1986 18:10:07 MCPHERSON "Correct appnumber counter definition"
+% *2 21-FEB-1986 17:38:46 MCPHERSON "Changed enumeration labels, restored headings page style, defined appendix page style"
+% *1 7-FEB-1986 10:12:27 MCPHERSON "Initial bookform style"
+% DEC/CMS REPLACEMENT HISTORY, Element BOOKFORM.STY
diff --git a/macros/latex209/contrib/bookform/bookform.tex b/macros/latex209/contrib/bookform/bookform.tex
new file mode 100644
index 0000000000..de2fe12c83
--- /dev/null
+++ b/macros/latex209/contrib/bookform/bookform.tex
@@ -0,0 +1,54 @@
+\documentstyle[12pt]{bookform}
+\documentnumber{DO 1000}
+\documentdate{\today}
+\title{Document Title\\
+\docnumber \\ % DO NOT DELETE \docnumber or
+\docdate \\ % \docdate.
+Contract XXXXXX \\ % The contract or PO number must be filled in.
+Data Item No. XXX \\ % The data item number must be filled in.
+}
+
+\begin{document}
+
+\begin{titlepage}
+\maketitle
+\end{titlepage}
+
+\cleardoublepage
+%
+% Page 1 reserved for revision history page
+%
+\setcounter{page}{2}
+\tableofcontents
+\newpage
+
+% Since all bookform documents don't necessarily follow the same
+% section structure, the author must layout the document as desired.
+
+\section{Scope}
+
+This is the scope of this document.
+
+\section{Applicable Documents}
+
+The following documents are applicable:
+\begin{documentlist}
+\item[MIL-STD-490\\Notice 1] Title of MIL-STD-490 \\
+
+\item[MIL-S-52779] Title of MIL-S-52779
+\end{documentlist}
+
+\section{Next Section}
+
+\subsection{First subsection}
+
+\appendix
+
+\section{Appendix}
+
+The \verb"\appendix" command redefines the \verb"\section" command to produce
+appendices as shown here.
+
+\section{Another Appendix}
+
+\end{document}
diff --git a/macros/latex209/contrib/bruggink/bruggink.sty b/macros/latex209/contrib/bruggink/bruggink.sty
new file mode 100644
index 0000000000..1b5b4da490
--- /dev/null
+++ b/macros/latex209/contrib/bruggink/bruggink.sty
@@ -0,0 +1,33 @@
+% Bruggink.sty---provide for independent formatting for float captions.
+% The following is a re-definition of the \@caption macro which lets
+% you format your figure captions differently from your table captions, etc.
+% Your .sty file must provide for a meaning for, e.g., \@makefigurecaption,
+% etc. If you do not, the default \@makecaption will be used.
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \normalsize
+ \expandafter\let\expandafter\@tempa\csname @make#1caption\endcsname
+ \ifx\@tempa\relax\let\@tempa\@makecaption\fi
+ \@tempa{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+%
+% Here is the content of a .sty file containing definitions using the above
+hook.
+%
+% The following is the same as the \@makecaption in book.sty:
+\long\def\@makefigurecaption#1#2{%
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize #1: #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi}
+%
+% The following is slightly different from the \@makecaption in book.sty:
+\long\def\@maketablecaption#1#2{%
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1. #2}%
+ \ifdim \wd\@tempboxa >\hsize #1. #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil} %
+ \fi}
diff --git a/macros/latex209/contrib/bruggink/bruggink.tex b/macros/latex209/contrib/bruggink/bruggink.tex
new file mode 100644
index 0000000000..cb4c41114c
--- /dev/null
+++ b/macros/latex209/contrib/bruggink/bruggink.tex
@@ -0,0 +1,16 @@
+% Bruggink.tex---illustrate how to use Bruggink.sty
+\documentstyle{book}
+\documentstyle{bruggink}
+\begin{document}
+
+\begin{figure}[h]
+Content of figure
+\caption{Figure caption}%
+\end{figure}
+
+\begin{table}[h]
+Content of table
+\caption{Table caption}%
+\end{table}
+
+\end{document}
diff --git a/macros/latex209/contrib/cassette/cassette.pdf b/macros/latex209/contrib/cassette/cassette.pdf
new file mode 100644
index 0000000000..e9a0727df0
--- /dev/null
+++ b/macros/latex209/contrib/cassette/cassette.pdf
Binary files differ
diff --git a/macros/latex209/contrib/cassette/cassette.sty b/macros/latex209/contrib/cassette/cassette.sty
new file mode 100644
index 0000000000..039883d942
--- /dev/null
+++ b/macros/latex209/contrib/cassette/cassette.sty
@@ -0,0 +1,94 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% cassette.sty --- 8. November 1992 by Yellow Foot Software %
+% %
+% Folgende Befehle stehen zur Verf"ugung: %
+% %
+% \position{Bandsorte} --- Bandsorte angeben (Ferro, Chrom, %
+% Metall usw.) %
+% \eq{Equalizer-Einstellung} %
+% \nr{Rauschunterdr"uckung} --- Rauschunterdr"uckungssystem angeben %
+% (Dolby B, Dolby C usw.) %
+% \len{Bandl"ange} --- Spieldauer des Bandes (60, 90, 120) %
+% \dateA{Datum} --- Datum der Aufnahme Seite A, voreinge- %
+% stellt: \today %
+% \dateB{Datum} --- Datum der Aufnahme Seite B, voreinge- %
+% stellt: \today %
+% \interpretA{Name} --- Interpret Seite A %
+% \interpretB{Name} --- Interpret Seite B %
+% \titelA{Name} --- Titel von Seite A %
+% \titelB{Name} --- Titel von Seite B %
+% %
+% \songsA{...} --- Lieder auf Seite A %
+% \songsB{...} --- Lieder auf Seite B %
+% %
+% Die LaTeX-Quelldatei mu"s wie folgt aufgebaut sein: %
+% \documentstyle[...,cassette]{article} %
+% \begin{document} %
+% ... oben genannte Befehle ... %
+% \songsA{...} %
+% \songsB{...} %
+% Die einzelnen Songs m"ussen durch \\ getrennt werden. %
+% \cassette %
+% \end{document} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\typeout{Document Style Option 'cassette'. Released Nov 8, 1992 by Yellow Foot
+Soft}
+
+
+\newdimen\casswidth
+\casswidth100mm
+
+\pagestyle{empty}
+
+\def\posname{{\bf POS:} }
+\def\position#1{\def\@position{\posname #1}}
+\def\@position{\posname}
+
+\def\eqname{{\bf EQ:} }
+\def\eq#1{\def\@eq{\eqname #1$\mu$s}}
+\def\@eq{\eqname}
+
+\def\nrname{{\bf NR:} }
+\def\nr#1{\def\@nr{\nrname #1}}
+\def\@nr{\nrname}
+
+\def\lenname{{\bf LEN:} }
+\def\len#1{\def\@len{\lenname #1}}
+\def\@len{\lenname}
+
+\def\sideAname{{\bf Seite 1}}
+\def\sideBname{{\bf Seite 2}}
+
+\def\dateA#1{\def\@dateA{#1}}
+\def\@dateA{\today}
+\def\dateB#1{\def\@dateB{#1}}
+\def\@dateB{\today}
+
+\def\interpretA#1{\def\@interpretA{\xiipt\bf #1}}
+\def\interpretB#1{\def\@interpretB{\xiipt\bf #1}}
+
+\def\titelA#1{\def\@titelA{\xiipt\bf #1}}
+\def\titelB#1{\def\@titelB{\xiipt\bf #1}}
+
+\def\songsA#1{\def\@songsA{\parbox[t]{0.45\casswidth}{#1}}}
+\def\songsB#1{\def\@songsB{\parbox[t]{0.45\casswidth}{#1}}}
+
+\def\cassette{
+\begin{tabular*}{\casswidth}{|l@{\extracolsep\fill}l|} \hline
+& \\
+& \\
+& \\
+& \\
+& \\ \hline
+\@interpretA & \hfill\@titelA\\
+& \\
+\@interpretB & \hfill\@titelB\\ \hline
+\@position\hfill\@eq & \@nr\hfill\@len\\
+\sideAname\hspace{1em}\@dateA & \sideBname\hspace{1em}\@dateB\\ \hline
+\@songsA & \hfill\@songsB\\ \hline
+\end{tabular*}
+}
+
diff --git a/macros/latex209/contrib/cassette/cassette.tex b/macros/latex209/contrib/cassette/cassette.tex
new file mode 100644
index 0000000000..78b3742366
--- /dev/null
+++ b/macros/latex209/contrib/cassette/cassette.tex
@@ -0,0 +1,116 @@
+\documentstyle[german,cassette]{article}
+\begin{document}
+\section*{Cassettenh"ullen mit \LaTeX}
+Arne W.~Steuer
+\subsection*{Ein neuer Stylefile}
+Seit einiger Zeit "argere ich mich dar"uber, da"s die Handbeschriftung von
+Cassettenh"ullen recht m"uhevoll und absolut unpraktisch ist, sofern sich
+der Inhalt einer Cassette einmal "andern sollte.
+
+Warum also nicht \LaTeX\ nutzen und mit einfachen Mitteln ansehnliche
+Cassettenh"ullen erstellen, die sich zudem leicht "andern lassen?
+
+\subsection*{Die neuen Befehle}
+Ich habe dazu einen {\tt cassette.sty} geschrieben, der die folgenden neuen
+Befehle zur Verf"ugung stellt (Auszug aus cassette.sty):
+\begin{verbatim}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% \position{Bandsorte} --- Bandsorte angeben (Ferro, Chrom, %
+% Metall usw.) %
+% \eq{Equalizer-Einstellung} %
+% \nr{Rauschunterdr"uckung} --- Rauschunterdr"uckungssystem angeben %
+% (Dolby B, Dolby C usw.) %
+% \len{Bandl"ange} --- Spieldauer des Bandes (60, 90, 120) %
+% \dateA{Datum} --- Datum der Aufnahme Seite A, voreinge- %
+% stellt: \today %
+% \dateB{Datum} --- Datum der Aufnahme Seite B, voreinge- %
+% stellt: \today %
+% \interpretA{Name} --- Interpret Seite A %
+% \interpretB{Name} --- Interpret Seite B %
+% \titelA{Name} --- Titel von Seite A %
+% \titelB{Name} --- Titel von Seite B %
+% %
+% \songsA{...} --- Lieder auf Seite A %
+% \songsB{...} --- Lieder auf Seite B %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\end{verbatim}
+
+Die \LaTeX-Quelldatei mu"s wie folgt aufgebaut sein:
+\begin{verbatim}
+ \documentstyle[...,cassette]{article}
+ \begin{document}
+ ... oben genannte Befehle ...
+ \songsA{...\\
+ ...\\
+ ...}
+ \songsB{...\\
+ ...\\
+ ...}
+ \cassette
+ \end{document}
+\end{verbatim} %
+Sie k"onnen beliebig viele Songs auf einer Seite unterbringen. Nach Art
+vieler Cassettenh"ullen-Muster schl"agt man das "uberh"angende St"uck
+einfach nach innen ein.
+
+Da ich kein \TeX-Makro-Spezialist bin, sondern nur einfacher
+\LaTeX-Anwender, konnte ich mich um ausgekl"ugelte Programmiertricks nicht
+k"ummern. Der {\tt cassette.sty} ist deshalb nicht sehr elegant
+programmiert, er funktioniert aber --- und das ist doch auch nicht schlecht!
+\newpage
+\subsection*{Das Ergebnis\ldots}
+Mit den obigen Befehlen k"onnen Sie beispielsweise folgenden Output erzeugen:\\[2ex]
+\position{Chrom}
+\eq{120}
+\nr{Dolby B}
+\len{90}
+
+\dateA{\today}
+\dateB{01.~April 1992}
+
+\interpretA{Mark Knopfler}
+\titelA{Local Hero}
+
+\interpretB{Georg Friedrich H"andel}
+\titelB{Wassermusik}
+
+\songsA{
+ The Rocks and the Water\\
+ Wild Theme\\
+ Freeway Flyer\\
+ Boomtown (Variation Louis' Favourite)\\
+ The Way It Always Starts\\
+ The Rocks and the Thunder\\
+ The Ceilidh and the Northern Lights\\
+ The Mist Covered Mountains\\
+ The Ceilidh: Louis' Favourite/Billy's Tune\\
+ Whistle Theme\\
+ Smooching\\
+ Stargazer\\
+ The Rocks and the Thunder\\
+ Going Home: Theme of the Local Hero\\
+}
+\songsB{
+ Allegro\\
+ Air: Andante un poco Allegretto\\
+ Bourr{\'e}e: Vivace\\
+ Hornpipe: Delicato ma con molto brio\\
+ Andante espressivo\\
+ Hornpipe: Allegro\\
+}
+\cassette
+
+\vspace{2ex}
+
+Nun noch einfach ausschneiden, an den Kanten umfalten und fertig ist eine
+\TeX nische Cassettenh"ulle!
+
+Interessierten Anwendern stelle ich das kleine Stylefile gern kostenlos
+bei Einsendung einer 3,5" HD oder DD-Diskette und eines adressierten und
+frankierten R"uckumschlages zur Verf"ugung (bitte angeben, ob MS-DOS oder
+AmigaOS gew"unscht ist).
+\end{document}
+
+
diff --git a/macros/latex209/contrib/chbars/COPYING b/macros/latex209/contrib/chbars/COPYING
new file mode 100644
index 0000000000..9a17037581
--- /dev/null
+++ b/macros/latex209/contrib/chbars/COPYING
@@ -0,0 +1,249 @@
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/macros/latex209/contrib/chbars/README b/macros/latex209/contrib/chbars/README
new file mode 100644
index 0000000000..9e7ef57867
--- /dev/null
+++ b/macros/latex209/contrib/chbars/README
@@ -0,0 +1,127 @@
+% README for changebar macros 28 Jul 92
+%------------------------------------------------------------
+
+
+GENERAL NOTES by Joachim Schrod. (Minor revisions by R. Bernstein)
+
+These are my (Joachim Schrod's) macros for producing change bars with
+TeX or LaTeX. Please note that (1) these macros will not produce an
+optimal page breaking (i.e. vertical glue will disappear in many
+places) and (2) that there is still a problem with these macros: it is
+described in the last section of the chapter `Handling the Page
+Contents.' By the way, this problem is within the current LaTeX, too.
+
+The macros were written for TeX 2. In the meantime TeX 3 became
+available; new features (i.e., \holdinginsert) would now allow a
+better implementation.
+
+The macros are written for the usage with Plain TeX. R. Bernstein did
+the the LaTeX adaption because I neither use LaTeX in my own documents
+nor do I need change bars... For me, it was just a nice play to show
+what can be done with the \output routine of TeX. Therefore I will not
+put further work in these macros. But I will happily redistribute
+enhancements and will make them available on the usual TeX servers.
+
+So: If you enhance the macros, make further adaptations of them for
+LaTeX, or if you incorporate the new features of TeX 3, send them to
+me so that others can share your work.
+
+
+NOTES ON THE DISTRIBUTED FILES
+
+The macro file chbars.doc can be LaTeXed (the result is not as
+readable as it should be---but this is due to the inflexibility of the
+\@startsection macro of LaTeX). The needed style files are included.
+
+Furthermore four test files for the usage of change bars in vertical
+and horizontal mode are included, too. The files test1.tex, test2.tex
+and test3.tex should be run through Plain TeX; test4.ltx should be run
+through LaTeX. Files test3.tex and test4.tex try out features that
+have been added to these macros since they were originally written. In
+particular, setting the change bar width, placement on the right or
+left margin, redefining the \output routine, and a LaTeX test.
+
+These macros are documented with my MAKEPROG processor. Perhaps I
+should mention why I don't use the doc-option of Frank Mittelbach:
+MAKEPROG has been written by me before I have heard of the existence
+of doc. But even then I would have written it: doc is a special
+documentation tool for TeX macros which heavily depends on LaTeX and
+the LaTeX coding conventions. It is not very easy to use it for the
+documentation of other stuff than LaTeX macros. In contrary, MAKEPROG
+is a {\it general documentation facility\/} which I use for all things
+where WEB is not available. (In fact, it was created to document lex
+and yacc programs...) Especially the changefile possibility I need
+very hardly. MAKEPROG has the disadvantage that a special care of the
+TeX environment (e.g. the indexing of macro names) can not be
+implemented. I'm still working on MAKEPROG, the next version 2.0 will
+have a code rearrangement ability like TANGLE.
+
+MAKEPROG may be fetched from LISTSERV@DHDURZ1 (for the Bitnet folks)
+and per ftp from Washington (where it is in the UNIX distribution). I
+would prefer if you get it from there so that I don't have to mail out
+so much stuff. If you have no access contact me. If you are working
+on an IBM(-compatible) PC you should nevertheless contact me: I have
+changefiles for Turbo Pascal available.
+
+I'm not really satisfied that I have not found the time to update the
+documentation of MAKEPROG to mention that progltx, the
+progdoc-equivalent LaTeX style option, exists. To get a
+documentation you must run LaTeX over progltx.doc and print the
+result. Because I print the whole stuff usually on A4 paper I have
+included a style option for A4 page layout, too. The macro file
+a4-9.sty assumes that the driver leaves a margin of 1 in. Please
+note, that this is not just ``one other'' A4 page layout -- it was
+designed by a typographer and I have only done the LaTeX
+realization---have a look at a4-9.doc!
+
+Perhaps it is of interest for you how the verbatim typesetting in
+progltx is done---the scheme is robuster than the one LaTeX uses, it
+works with tabs (are you working on a VAX or a PC?), but it's slower,
+too. In the last sections of the files you can have a look at the
+`great' internal design of the current LaTeX, too.
+
+
+
+Well, I hope that you will enjoy the macros
+
+ Greetings
+ Joachim Schrod
+
+
+current address:
+ Technical University of Darmstadt
+ Department of Computer Science
+ Joachim Schrod
+ Alexanderstr. 10
+
+ D-6100 Darmstadt
+ FR Germany
+
+ Email: xitijsch@ddathd21.bitnet
+
+
+==============================================================================
+
+The following files are in the distribution:
+
+COPYING copy conditions, i.e. the GNU General Public License
+README this file you are reading
+
+chbars.doc The documented macro source (with MAKEPROG!)
+progltx.sty Style files needed to print it.
+a4-9.sty
+
+chbars.sty the macro version of chbars.doc
+chbars.tex the macro version of chbars.doc (identical to chbars.tex)
+chbars-orig.tex Joachim Schrod's original macro version of chbars.doc
+test1.tex Test files for chbars.tex
+test2.tex
+test3.tex Test file for some of the newer features added
+test4.ltx LaTeX test file for chbars.sty (a.k.a chbars.tex)
+
+a4-9.doc a non-arbitrary A4 page layout style option
+a4-marg.chf changefile for a4-9.doc, adaption to 1in driver margin
+
+makeprog.perl Perl version of MAKEPROG
+makeprog.lex Lex version of MAKEPROG
+--
diff --git a/macros/latex209/contrib/chbars/a4-9.doc b/macros/latex209/contrib/chbars/a4-9.doc
new file mode 100644
index 0000000000..d15ce6113d
--- /dev/null
+++ b/macros/latex209/contrib/chbars/a4-9.doc
@@ -0,0 +1,304 @@
+% This is A4-9.DOC as of 10 Oct 89
+%---------------------------------------------------------
+% (c) 1989 by J.Schrod. copy conditions see below.
+
+%
+% Macro package for a non-arbitrary A4 page layout
+% LaTeX style option
+% MAKEPROG is needed
+%
+
+%
+% DATE PERSON REMARK
+% 89-10-05 -js first version
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+
+% should be progtex...
+\documentstyle[progltx,a4-9]{article}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% local macros
+%
+
+\let\mc=\ninrm % for names like GNU
+
+\def\WEB{{\tt WEB\/}}
+\def\DVI{{\tt DVI\/}}
+\def\GNU{{\mc GNU}}
+
+\chardef\bs=`\\
+
+\def\fract#1/#2.{% % fraction a/b within text
+ \leavevmode % borrowed from D. Knuth's manmac
+ \kern .1em
+ \raise .5ex \hbox{\the\scriptfont0 #1}%
+ \kern -.1em/\kern -.15em
+ \lower .25ex \hbox{\the\scriptfont0 #2}%
+ }
+
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\begin{document}
+
+
+\title{
+ A non-arbitrary A4 page layout\\
+ The {\tt a4-9\/} style option
+ }
+\author{\sc Joachim Schrod}
+
+\maketitle
+
+
+
+\sect This macro file is the |a4-9| document style option for \LaTeX{}
+that produces a {\it well designed\/} A4 page layout. This style
+option works with all standard \LaTeX{} styles and should work with
+all other well written ones, too. It should not be used with an
+underlined headings page style (see below for an explanation).
+
+But what does this mean: ``a {\it well designed\/} page layout''?
+Mostly it means that the design is not chosen by accident but
+within a {\it non-arbitrary process}. To my knowledge this theme
+has first been covered by Jan Tschichold in his famous article of
+1962: ``Willk\"urfreie Ma\ss{}verh\"altnisse der Buchseite und
+des Satzspiegels'' (look for references at the end). This style
+option implements his design (I'm no designer\,\dots)
+
+If you are interested in typography and you do not know anything of
+Jan Tschichold, you should---he and Stanley Morrison were probably the
+two most important typographers in this century. He received as one
+of very few Europeans the gold medal of the American Institute of
+Graphic Arts, was a honorary member of the Double Crown Club, London,
+and of the Soci\'et\'e typographique de France. Furthermore he was
+appointed as Honorary Royal Designer for Industry by the Royal Society
+of Arts, London. In 1965 he got the Gutenberg-Preis of the city
+Leipzig (which celebrated its 800th~birthday in this year), the most
+important typographic award in Europe.
+
+
+\sect This program is free software; you can redistribute it and/or
+modify it under the terms of the \GNU{} General Public License as
+published by the Free Software Foundation; either version~1, or (at your
+option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+{\bf without any warranty\/}; without even the implied warranty of
+{\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+the \GNU{} General Public License for more details.
+
+%You should have received a copy of the \GNU{} General Public License
+%along with this program; if not, write to the Free Software Foundation,
+If you have not received a copy of the \GNU{} General Public License
+along with this program, write to the Free Software Foundation,
+Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+\sect This style option implements the partition by nine of the A4
+page as explained by Tschichold. The proportion for a two-sided
+layout is shown in Figure~\ref{fig:layout} (the picture is not true to
+scale due to the limited features of the \LaTeX{}-{\tt
+picture\/}-environment).
+%
+\begin{figure}
+\unitlength=.3mm
+\begin{center}
+\begin{picture}(420,315) % 420,297
+
+% double page (dashed lines)
+\multiput(0,0)(210,0){2}{\dashbox{5}(210,315){}} % 210,297
+
+% help lines for construction (thin lines)
+\put( 0, 0){\line( 4, 3){420}}
+\put( 0, 0){\line( 2, 3){210}}
+\put( 0,315){\line( 4,-3){420}}
+\put(210,315){\line( 2,-3){210}}
+
+\put(280,315){\line( 0,-1){105}}
+\put(140,210){\line( 4, 3){140}}
+
+% resulting pages (thick lines)
+\thicklines
+\multiput(46.66666,70)(186.66666,0){2}{\framebox(140,210){}} % 140,198
+
+\end{picture}
+\end{center}
+\caption{Partition by nine of the A4 page according to Tschichold}
+\label{fig:layout}
+\end{figure}
+%
+The important fact is that the proportions of the type area and the
+margins repeat the proportion of the whole page. The above
+construction yields margins with a ratio of $ \sqrt{2} : 1 : 2 :
+2\sqrt{2} $, where 1 is the ninth of the page width, i.e.\ $\rm
+23\fract 1/3. \,mm$. But we do not use this exact value because
+the margin will be shortened by bookbinding or filing. We assume a
+total need of 8\,mm for such purposes which results in 4\,mm for
+each page. This 4\,mm will first be subtracted from the total
+margin width of 70\,mm and the remaining 66\,mm will be divided
+into one third for the inner margin and two third for the outer
+margin. The resulting approximate values are therefore:
+%
+\begin{center}
+\begin{tabular}{lr}
+\multicolumn1{c}{\sc Dimension}& \multicolumn1{c}{\sc Value}\\[2pt]
+page width& 210\,mm\\
+width of type area& 140\,mm\\
+inner margin& 26\,mm\\
+outer margin& 44\,mm\\[1pt]
+page height& 297\,mm\\
+height of type area& 198\,mm\\
+top margin& 33\,mm\\
+bottom margin& 66\,mm\\
+\end{tabular}
+\end{center}
+%
+The value for the inner margin consists of 4\,mm for binding and
+filing purposes and 22\,mm ``real'' margin. Of course, all values
+are measured from the paper edge.
+
+If the page layout is not for two-sided printing, it can be still
+assumed that a margin of c\`a.~4\,mm will be needed for filing.
+This remaining margin space of 66\,mm is distributed evenly on the
+left and on the right side. Precisely spoken, we use 37\,mm for
+the left margin ($\rm = 33\,mm + 4\,mm$) and 33\,mm for the right
+margin. The resulting margins have a ratio of $1 : 1 : 1 :
+2\sqrt{2}$.
+
+
+\sect The height of the type area needs a special remark: Usually this
+height does neither include the headline nor the footline. But if the
+headline is underlined the headline should be taken into
+account---that's the reason why this style option cannot be used with
+underlined headings.
+
+The values in the above table are only approximations to the one
+we will use in reality. An approximation because the height of the
+type area must be a multiple of a line height, i.e.\ it must equal
+$ (n-1)|\baselineskip| + |\topskip| $ where $n$ is the number of lines
+on one page. If we have to choose we will prefer the longer type area.
+
+
+\sect We assume a starting position of $\rm (2\,cm, 2\,cm)$, i.e., the
+\DVI{} driver shall leave a top and a left margin of 2\,cm by his own. This is
+different from the usual 1\,in margin---but the usual margin was made
+for legal paper ($\rm 8\,in \times 11.5\,in$). I hope that this
+driver margin value---which was presented by Klaus Guntermann and
+me at the Euro\TeX88 conference in Exeter---will be accepted
+by the \DVI{} driver standards commitee of TUG.
+
+|\hoffset| and |\voffset| are set to 0\,mm, so that we can proceed on
+the assumption of the above margin. If you use a driver which leaves a
+margin of 1\,in you should use the changefile |a4-marg.chf|.
+
+\beginprog
+\hoffset=0mm
+\voffset=0mm
+\endprog
+
+
+\sect To get the precise value of |\textheight| we first calculate the
+number of lines which may be on the page in full. Then we add another
+line and recalculate the value of |\textheight|.
+
+\beginprog
+\normalsize % this sets \baselineskip
+
+\dimen@=198mm
+\count@=\dimen@ % value in sp
+\advance \count@ by -\topskip % \topskip and \baselineskip will be
+\divide \count@ by \baselineskip % coerced to integer, value is in sp
+
+\textheight=\count@\baselineskip % \count@ equals the number of lines - 1
+\advance \textheight by \topskip
+\endprog
+
+
+\sect Because we have altered the original value of |\textheight|
+(198\,mm) we must alter the value of the top margin, too. It will be
+just a third of the remaining place on the page. Please note that the
+place for the top margin consists of the four values driver
+margin, |\topmargin|, |\headheight|, and |\headsep|.
+
+\beginprog
+\topmargin=297mm
+ \advance \topmargin by -\textheight % place for top and bottom margin
+ \divide \topmargin by 3 % place for top margin
+ \advance \topmargin by -20mm % driver margin
+ \advance \topmargin by -\headheight
+ \advance \topmargin by -\headsep
+
+\textwidth=140.1mm
+\if@twoside
+ \oddsidemargin=6mm % 26mm - 20mm (driver margin)
+ \evensidemargin=24mm % 44mm - 20mm (driver margin)
+ \marginparwidth=33mm % half of total vertical margin
+\else
+ \oddsidemargin=17mm % 37mm - 20mm (driver margin)
+ \marginparwidth=22mm % third of total vertical margin
+ \evensidemargin=\maxdimen % usage should result in an error message
+\fi
+\endprog
+
+
+\sect We finish the macro file so that garbage (e.g.\ of exchanges
+between systems) can come afterwards.
+
+\beginprog
+\endinput
+\endprog
+
+
+%%%
+\newpage
+%%%
+
+\sect It remains to give a few pointers to the article where the
+design which was implemented here has been described:
+%
+\begin{itemize}
+
+\item {\sc Jan Tschichold}:
+Willk\"urfreie Ma\ss{}verh\"altnisse der Buchseite und des Satzspiegels.
+In {\it Typographische Monatsbl\"atter}.
+February 1964.
+
+\item {\sc Jan Tschichold}:
+Non-arbitrary proportions of page and type area.
+In {\it Print in Britain}.
+London: September 1963.
+
+\item {\sc Jan Tschichold}:
+Proportions rationelles du format du livre et de la page imprim\'ee.
+In {\it Revue suisse d'imprimerie}, 4.
+St-Gall 1964.
+
+\end{itemize}
+%
+The original paper is a private edition which can not be bought, it
+was published in 1962. It appeared in seven different publications
+in german language, three times in french, two times in dutch.
+Besides being translated to english, it was translated to danish,
+norwegian, finn, italian, and hungarian.
+
+
+
+\end{document}
diff --git a/macros/latex209/contrib/chbars/a4-9.sty b/macros/latex209/contrib/chbars/a4-9.sty
new file mode 100644
index 0000000000..e41c3fc6fc
--- /dev/null
+++ b/macros/latex209/contrib/chbars/a4-9.sty
@@ -0,0 +1,324 @@
+% This is A4-9.DOC as of 10 Oct 89
+%---------------------------------------------------------
+% (c) 1989 by J.Schrod. copy conditions see below.
+
+%
+% Macro package for a non-arbitrary A4 page layout
+% LaTeX style option
+% MAKEPROG is needed
+%
+
+%
+% DATE PERSON REMARK
+% 89-10-05 -js first version
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+
+% should be progtex...
+%%%%
+%%%%
+%%%% These TeX macros were documented with the documentation system
+%%%% MAKEPROG and automatically converted to the current form.
+%%%% If you have MAKEPROG available you may transform it back to
+%%%% the original input: Remove every occurence of three percents
+%%%% and one optional blank from the beginning of a line and remove
+%%%% every line which starts with four percents. The following lex
+%%%% program will do this:
+%%%%
+%%%% %%
+%%%%
+%%%% ^%%%\ ? ;
+%%%% ^%%%%.*\n ;
+%%%%
+%%%% MAKEPROG may be obtained over the net from the Bitnet-Listserver
+%%%% LISTSERV@DHDURZ1 (filelist WEBWARE), from tuglib@science.utah.edu,
+%%%% or via ftp from june.cs.washington.edu.
+%%%%
+%%%%
+%%% \documentstyle[progltx,a4-9]{article}
+
+
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % local macros
+%%% %
+
+%%% \let\mc=\ninrm % for names like GNU
+
+%%% \def\WEB{{\tt WEB\/}}
+%%% \def\DVI{{\tt DVI\/}}
+%%% \def\GNU{{\mc GNU}}
+
+%%% \chardef\bs=`\\
+
+%%% \def\fract#1/#2.{% % fraction a/b within text
+%%% \leavevmode % borrowed from D. Knuth's manmac
+%%% \kern .1em
+%%% \raise .5ex \hbox{\the\scriptfont0 #1}%
+%%% \kern -.1em/\kern -.15em
+%%% \lower .25ex \hbox{\the\scriptfont0 #2}%
+%%% }
+
+%%% %
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%% \begin{document}
+
+
+%%% \title{
+%%% A non-arbitrary A4 page layout\\
+%%% The {\tt a4-9\/} style option
+%%% }
+%%% \author{\sc Joachim Schrod}
+
+%%% \maketitle
+
+
+
+%%% \sect This macro file is the |a4-9| document style option for \LaTeX{}
+%%% that produces a {\it well designed\/} A4 page layout. This style
+%%% option works with all standard \LaTeX{} styles and should work with
+%%% all other well written ones, too. It should not be used with an
+%%% underlined headings page style (see below for an explanation).
+
+%%% But what does this mean: ``a {\it well designed\/} page layout''?
+%%% Mostly it means that the design is not chosen by accident but
+%%% within a {\it non-arbitrary process}. To my knowledge this theme
+%%% has first been covered by Jan Tschichold in his famous article of
+%%% 1962: ``Willk\"urfreie Ma\ss{}verh\"altnisse der Buchseite und
+%%% des Satzspiegels'' (look for references at the end). This style
+%%% option implements his design (I'm no designer\,\dots)
+
+%%% If you are interested in typography and you do not know anything of
+%%% Jan Tschichold, you should---he and Stanley Morrison were probably the
+%%% two most important typographers in this century. He received as one
+%%% of very few Europeans the gold medal of the American Institute of
+%%% Graphic Arts, was a honorary member of the Double Crown Club, London,
+%%% and of the Soci\'et\'e typographique de France. Furthermore he was
+%%% appointed as Honorary Royal Designer for Industry by the Royal Society
+%%% of Arts, London. In 1965 he got the Gutenberg-Preis of the city
+%%% Leipzig (which celebrated its 800th~birthday in this year), the most
+%%% important typographic award in Europe.
+
+
+%%% \sect This program is free software; you can redistribute it and/or
+%%% modify it under the terms of the \GNU{} General Public License as
+%%% published by the Free Software Foundation; either version~1, or (at your
+%%% option) any later version.
+
+%%% This program is distributed in the hope that it will be useful, but
+%%% {\bf without any warranty\/}; without even the implied warranty of
+%%% {\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+%%% the \GNU{} General Public License for more details.
+
+%%% %You should have received a copy of the \GNU{} General Public License
+%%% %along with this program; if not, write to the Free Software Foundation,
+%%% If you have not received a copy of the \GNU{} General Public License
+%%% along with this program, write to the Free Software Foundation,
+%%% Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+%%% \sect This style option implements the partition by nine of the A4
+%%% page as explained by Tschichold. The proportion for a two-sided
+%%% layout is shown in Figure~\ref{fig:layout} (the picture is not true to
+%%% scale due to the limited features of the \LaTeX{}-{\tt
+%%% picture\/}-environment).
+%%% %
+%%% \begin{figure}
+%%% \unitlength=.3mm
+%%% \begin{center}
+%%% \begin{picture}(420,315) % 420,297
+
+%%% % double page (dashed lines)
+%%% \multiput(0,0)(210,0){2}{\dashbox{5}(210,315){}} % 210,297
+
+%%% % help lines for construction (thin lines)
+%%% \put( 0, 0){\line( 4, 3){420}}
+%%% \put( 0, 0){\line( 2, 3){210}}
+%%% \put( 0,315){\line( 4,-3){420}}
+%%% \put(210,315){\line( 2,-3){210}}
+
+%%% \put(280,315){\line( 0,-1){105}}
+%%% \put(140,210){\line( 4, 3){140}}
+
+%%% % resulting pages (thick lines)
+%%% \thicklines
+%%% \multiput(46.66666,70)(186.66666,0){2}{\framebox(140,210){}} % 140,198
+
+%%% \end{picture}
+%%% \end{center}
+%%% \caption{Partition by nine of the A4 page according to Tschichold}
+%%% \label{fig:layout}
+%%% \end{figure}
+%%% %
+%%% The important fact is that the proportions of the type area and the
+%%% margins repeat the proportion of the whole page. The above
+%%% construction yields margins with a ratio of $ \sqrt{2} : 1 : 2 :
+%%% 2\sqrt{2} $, where 1 is the ninth of the page width, i.e.\ $\rm
+%%% 23\fract 1/3. \,mm$. But we do not use this exact value because
+%%% the margin will be shortened by bookbinding or filing. We assume a
+%%% total need of 8\,mm for such purposes which results in 4\,mm for
+%%% each page. This 4\,mm will first be subtracted from the total
+%%% margin width of 70\,mm and the remaining 66\,mm will be divided
+%%% into one third for the inner margin and two third for the outer
+%%% margin. The resulting approximate values are therefore:
+%%% %
+%%% \begin{center}
+%%% \begin{tabular}{lr}
+%%% \multicolumn1{c}{\sc Dimension}& \multicolumn1{c}{\sc Value}\\[2pt]
+%%% page width& 210\,mm\\
+%%% width of type area& 140\,mm\\
+%%% inner margin& 26\,mm\\
+%%% outer margin& 44\,mm\\[1pt]
+%%% page height& 297\,mm\\
+%%% height of type area& 198\,mm\\
+%%% top margin& 33\,mm\\
+%%% bottom margin& 66\,mm\\
+%%% \end{tabular}
+%%% \end{center}
+%%% %
+%%% The value for the inner margin consists of 4\,mm for binding and
+%%% filing purposes and 22\,mm ``real'' margin. Of course, all values
+%%% are measured from the paper edge.
+
+%%% If the page layout is not for two-sided printing, it can be still
+%%% assumed that a margin of c\`a.~4\,mm will be needed for filing.
+%%% This remaining margin space of 66\,mm is distributed evenly on the
+%%% left and on the right side. Precisely spoken, we use 37\,mm for
+%%% the left margin ($\rm = 33\,mm + 4\,mm$) and 33\,mm for the right
+%%% margin. The resulting margins have a ratio of $1 : 1 : 1 :
+%%% 2\sqrt{2}$.
+
+
+%%% \sect The height of the type area needs a special remark: Usually this
+%%% height does neither include the headline nor the footline. But if the
+%%% headline is underlined the headline should be taken into
+%%% account---that's the reason why this style option cannot be used with
+%%% underlined headings.
+
+%%% The values in the above table are only approximations to the one
+%%% we will use in reality. An approximation because the height of the
+%%% type area must be a multiple of a line height, i.e.\ it must equal
+%%% $ (n-1)|\baselineskip| + |\topskip| $ where $n$ is the number of lines
+%%% on one page. If we have to choose we will prefer the longer type area.
+
+
+%%% \sect We assume a starting position of $\rm (2\,cm, 2\,cm)$, i.e., the
+%%% \DVI{} driver shall leave a top and a left margin of 2\,cm by his own. This is
+%%% different from the usual 1\,in margin---but the usual margin was made
+%%% for legal paper ($\rm 8\,in \times 11.5\,in$). I hope that this
+%%% driver margin value---which was presented by Klaus Guntermann and
+%%% me at the Euro\TeX88 conference in Exeter---will be accepted
+%%% by the \DVI{} driver standards commitee of TUG.
+
+%%% |\hoffset| and |\voffset| are set to 0\,mm, so that we can proceed on
+%%% the assumption of the above margin. If you use a driver which leaves a
+%%% margin of 1\,in you should use the changefile |a4-marg.chf|.
+
+%%% \beginprog
+\hoffset=2cm \advance\hoffset by -1in
+\voffset=2cm \advance\voffset by -1in
+%%% \endprog
+
+
+%%% \sect To get the precise value of |\textheight| we first calculate the
+%%% number of lines which may be on the page in full. Then we add another
+%%% line and recalculate the value of |\textheight|.
+
+%%% \beginprog
+\normalsize % this sets \baselineskip
+
+\dimen@=198mm
+\count@=\dimen@ % value in sp
+\advance \count@ by -\topskip % \topskip and \baselineskip will be
+\divide \count@ by \baselineskip % coerced to integer, value is in sp
+
+\textheight=\count@\baselineskip % \count@ equals the number of lines - 1
+\advance \textheight by \topskip
+%%% \endprog
+
+
+%%% \sect Because we have altered the original value of |\textheight|
+%%% (198\,mm) we must alter the value of the top margin, too. It will be
+%%% just a third of the remaining place on the page. Please note that the
+%%% place for the top margin consists of the four values driver
+%%% margin, |\topmargin|, |\headheight|, and |\headsep|.
+
+%%% \beginprog
+\topmargin=297mm
+ \advance \topmargin by -\textheight % place for top and bottom margin
+ \divide \topmargin by 3 % place for top margin
+ \advance \topmargin by -20mm % driver margin
+ \advance \topmargin by -\headheight
+ \advance \topmargin by -\headsep
+
+\textwidth=140.1mm
+\if@twoside
+ \oddsidemargin=6mm % 26mm - 20mm (driver margin)
+ \evensidemargin=24mm % 44mm - 20mm (driver margin)
+ \marginparwidth=33mm % half of total vertical margin
+\else
+ \oddsidemargin=17mm % 37mm - 20mm (driver margin)
+ \marginparwidth=22mm % third of total vertical margin
+ \evensidemargin=\maxdimen % usage should result in an error message
+\fi
+%%% \endprog
+
+
+%%% \sect We finish the macro file so that garbage (e.g.\ of exchanges
+%%% between systems) can come afterwards.
+
+%%% \beginprog
+\endinput
+%%% \endprog
+
+
+%%% %%%
+%%% \newpage
+%%% %%%
+
+%%% \sect It remains to give a few pointers to the article where the
+%%% design which was implemented here has been described:
+%%% %
+%%% \begin{itemize}
+
+%%% \item {\sc Jan Tschichold}:
+%%% Willk\"urfreie Ma\ss{}verh\"altnisse der Buchseite und des Satzspiegels.
+%%% In {\it Typographische Monatsbl\"atter}.
+%%% February 1964.
+
+%%% \item {\sc Jan Tschichold}:
+%%% Non-arbitrary proportions of page and type area.
+%%% In {\it Print in Britain}.
+%%% London: September 1963.
+
+%%% \item {\sc Jan Tschichold}:
+%%% Proportions rationelles du format du livre et de la page imprim\'ee.
+%%% In {\it Revue suisse d'imprimerie}, 4.
+%%% St-Gall 1964.
+
+%%% \end{itemize}
+%%% %
+%%% The original paper is a private edition which can not be bought, it
+%%% was published in 1962. It appeared in seven different publications
+%%% in german language, three times in french, two times in dutch.
+%%% Besides being translated to english, it was translated to danish,
+%%% norwegian, finn, italian, and hungarian.
+
+
+
+%%% \end{document}
diff --git a/macros/latex209/contrib/chbars/a4-marg.chf b/macros/latex209/contrib/chbars/a4-marg.chf
new file mode 100644
index 0000000000..c5aba1d7a4
--- /dev/null
+++ b/macros/latex209/contrib/chbars/a4-marg.chf
@@ -0,0 +1,34 @@
+% This is A4-MARG.CHF as of 08 Oct 89
+%---------------------------------------------------------
+% (c) 1989 by J.Schrod.
+
+%
+% changefile for A4-9.DOC or A4-12.DOC
+% for DVI drivers with 1in margin
+%
+
+%
+% DATE PERSON REMARK
+% 89-10-05 -js first version
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+@x
+\hoffset=0mm
+\voffset=0mm
+@y
+\hoffset=2cm \advance\hoffset by -1in
+\voffset=2cm \advance\voffset by -1in
+@z
diff --git a/macros/latex209/contrib/chbars/chbars-orig.tex b/macros/latex209/contrib/chbars/chbars-orig.tex
new file mode 100644
index 0000000000..83801dd7a3
--- /dev/null
+++ b/macros/latex209/contrib/chbars/chbars-orig.tex
@@ -0,0 +1,758 @@
+% This is CHBARS.DOC as of 09 Oct 89
+%---------------------------------------------------------
+% (c) 1989 by J.Schrod. copy conditions see below.
+
+%
+% Macro package for creating changebars in Plain TeX
+% MAKEPROG is needed
+%
+% documented in LaTeX (for Anne and Chris)
+
+%
+% VERSION HISTORY (MSCF -- most significant change first)
+%
+% DATE PERSON REMARK
+% 89-10-09 -js converted to LaTeX (progltx)
+% 89-09-25 -js repaired \mark processing in horizontal mode
+% 89-08 -js first version (for EuroTeX89 in Karlsruhe)
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+
+% should be progtex...
+%%%%
+%%%%
+%%%% These TeX macros were documented with the documentation system
+%%%% MAKEPROG and automatically converted to the current form.
+%%%% If you have MAKEPROG available you may transform it back to
+%%%% the original input: Remove every occurence of three percents
+%%%% and one optional blank from the beginning of a line and remove
+%%%% every line which starts with four percents. The following lex
+%%%% program will do this:
+%%%%
+%%%% %%
+%%%%
+%%%% ^%%%\ ? ;
+%%%% ^%%%%.*\n ;
+%%%%
+%%%% MAKEPROG may be obtained over the net from the Bitnet-Listserver
+%%%% LISTSERV@DHDURZ1 (filelist WEBWARE), from tuglib@science.utah.edu,
+%%%% or via ftp from june.cs.washington.edu.
+%%%%
+%%%%
+%%% \documentstyle[progltx,a4-9]{article}
+
+
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % local macros
+%%% %
+
+%%% \let\mc=\small % for names like GNU
+
+%%% \def\PS{{\sc PostScript}}
+%%% \def\DVI{{\tt DVI}}
+%%% \def\GNU{{\mc GNU}}
+
+%%% \chardef\bs=`\\
+
+%%% %
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+%%% \begin{document}
+
+
+%%% \title{Changebars without {\tt \bs{}special}'s}
+%%% \author{\sc Joachim Schrod}
+
+%%% \maketitle
+
+
+
+%%% \begin{abstract}
+%%% It is common practice to use vertical bars in the margins of a
+%%% document to mark pieces of text which have changed since the last
+%%% version(s) of this document. Such vertical bars are usually
+%%% called {\em changebars}. It has often been said that it is
+%%% impossible to produce changebars with \TeX{} without the usage of
+%%% |\special| commands (driver directives), which extend the
+%%% primitives of \TeX{}. This paper presents a \TeX{} macro file
+%%% which implements changebars without such a usage. The macro file
+%%% is written for the usage with Plain~\TeX{} but the implementation
+%%% strategy can be used with \LaTeX{}, too.
+%%% \end{abstract}
+
+
+
+%%% \chap Introduction.
+
+%%% Changebars are used to mark modified parts in existing documents. For
+%%% the usage in \TeX{} documents, there exist only solutions that use
+%%% driver/printer features by the way of inserting |\special| commands in
+%%% the \TeX{} source, e.g.\ for \PS{} drivers. This results in documents
+%%% that are no longer as freely interchangeable as the \DVI{} concept would
+%%% allow---device dependency is problematic especially for this application
+%%% that is useful for multi-authoring or standards development.
+
+%%% This macro package offers a pure \TeX{} solution. Nevertheless, it has
+%%% its restrictions, too. The page break will no longer be optimal,
+%%% because no strechability or shrinkability on a page on top of the last
+%%% mark of a change is supported. But this seems to be acceptable,
+%%% especially as the change bar feature often will be used for proof
+%%% reading and not in the final document. This restriction is the reason
+%%% why no change marks can be used on titlepages or for similar
+%%% constructions. Changes in floating insertions (footnotes, figures) are
+%%% not discovered.
+
+%%% The demonstrated solution is written in Plain \TeX{}, because it was
+%%% easier and could be presented better at the Euro\TeX89 conference in
+%%% Karlsruhe. An adaption to \LaTeX{} is possible, but would require
+%%% modifications to the \LaTeX{} kernel, i.e.\ the output routine and the
+%%% layout parameters of the standard styles.
+
+
+%%% \sect This program is free software; you can redistribute it and/or
+%%% modify it under the terms of the \GNU{} General Public License as
+%%% published by the Free Software Foundation; either version~1, or (at your
+%%% option) any later version.
+
+%%% This program is distributed in the hope that it will be useful, but
+%%% {\bf without any warranty\/}; without even the implied warranty of
+%%% {\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+%%% the \GNU{} General Public License for more details.
+
+%%% %You should have received a copy of the \GNU{} General Public License
+%%% %along with this program; if not, write to the Free Software Foundation,
+%%% If you have not received a copy of the \GNU{} General Public License
+%%% along with this program, write to the Free Software Foundation,
+%%% Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+%%% \sect A changed area is described by two marks, |\beginchange| and
+%%% |\endchange|. The method for writing a change bar consists of three
+%%% parts: First, it will be indicated to the output routine that a change
+%%% has occured. Next, the position of the changed area will be found out
+%%% and fixed. A list of all changed areas is built, that can at last be
+%%% marked by the output routine using vertical rules at the right margin.
+
+%%% But before we start we declare some shorthands for category codes. By
+%%% declaring the at sign~(`|@|') as well as the underscore~`(|_|)' as
+%%% letters we can use them in our macros. (I agree with D.~Knuth that
+%%% |\identifier_several_words_long| is more readable than
+%%% |\IdentifierSeveralWordsLong| and in every case better than |\p@@@s|.)
+%%% With the at sign we can use the ``private'' Plain macros and with the
+%%% underscore we can make our own macros more readable. But as we have to
+%%% restore these category codes at the end of this macro file we store
+%%% their former values in the control sequences |\atcode| and |\uscode|.
+%%% This method is better than to use a group because not all macros have to
+%%% be defined global this way.
+
+%%% \beginprog
+\chardef\letter=11
+
+\chardef\atcode=\catcode`\@
+\chardef\uscode=\catcode`\_
+
+\catcode`\@=\letter
+\catcode`\_=\letter
+%%% \endprog
+
+
+
+
+%%% \chap Triggering the Output Routine.
+
+%%% \begin{sloppypar}
+%%% First, the output routine must know that changes occured. This is done
+%%% by the macros |\beginchange| and |\endchange| that append a reserved
+%%% penalty value |\break_penalty| to the current list that is below
+%%% $-10\,000$. The penalty will be in the range $|\change_penalty_group|
+%%% \cdot 100 - 99 \ldots |\change_penalty_group| \cdot 100$.
+%%% For the output it must be differentiated if the mark indicates
+%%% begin or end of the changed area. This is done with the values
+%%% |\change_penalty_begin| and |\change_penalty_end| that are used as the
+%%% second-to-last digit of the change penalty.
+%%% \end{sloppypar}
+
+%%% It must also be differentiated between the beginning of a mark being in
+%%% horizontal or vertical mode. In horizontal mode, the change bar must
+%%% not begin at the baseline of the actual text position, but on top of the
+%%% actual line. This is marked in the last digit, an odd digit will be
+%%% used in horizontal mode.
+
+%%% Note that the values mentioned above are used as digits here that can be
+%%% concatenated. If they are not followed by an other digit they should be
+%%% terminated by |\space| to stop the look-ahead for digits.
+
+%%% These interactions with the output routine adds a lot of dead cycles; we
+%%% must therefore increase |\maxdeadcycles| to prevent \TeX{} from grumbling.
+
+%%% \beginprog
+\def\change_penalty_group{-101}
+\def\change_penalty_begin{0}
+\def\change_penalty_end{1}
+
+\maxdeadcycles=100
+%%% \endprog
+
+
+%%% \sect The marks set the change penalty value (including the indication
+%%% of begin or end of mark). The rest (|\trigger_output|) is the same action
+%%% for both. An end change mark in horizontal mode can be preceeded by
+%%% glue that could cause a line break, thus including the following line to
+%%% the change area as well. To avoid this unwanted behaviour, the space is
+%%% saved in |\save_space|, discarded in front of the mark and restored
+%%% afterwards.
+
+%%% \beginprog
+\newcount\break_penalty
+\newskip\save_space
+
+\def\beginchange{%
+ \break_penalty=\change_penalty_group\change_penalty_begin0
+ \trigger_output
+ }
+\def\endchange{%
+ \ifhmode \save_space=\lastskip \unskip \fi
+ \break_penalty=\change_penalty_group\change_penalty_end0
+ \trigger_output
+ \ifhmode \hskip\save_space \fi
+ }
+%%% \endprog
+
+
+%%% \sect In |\trigger_output| the real output trigger is done. We must consider
+%%% that an |\output|-invocation by our |\break_penalty| can be discarded at
+%%% the beginning of a page. So we trigger the output routine twice, first
+%%% with a special penalty value that is 2~less than the correct value
+%%% (including the code for horizontal or vertical mode). After the first
+%%% page break it is asserted that the current list is empty. The output
+%%% routine has to save the former page contents if necessary.
+
+%%% Now we set the penalty to the correct value. The second page break does
+%%% the real work, restores the page contents and handles the split
+%%% insertions (footnotes, figures,~\dots)
+
+%%% In horizontal mode |\spacefactor| must not be destroyed.
+
+%%% \beginprog
+\newcount\save_space_factor
+
+\def\trigger_output{%
+ \ifinner \errmessage{Change cannot be marked inside a box}%
+ \else
+ \ifvmode \let\do_in_vmode=\relax
+ \advance \break_penalty by -2
+ \else \save_space_factor=\spacefactor
+ \let\do_in_vmode=\vadjust
+ \advance \break_penalty by -3
+ \fi
+ \do_in_vmode{%
+ \penalty\break_penalty
+ \null
+ \advance \break_penalty by 2 \penalty\break_penalty
+ }%
+ \ifhmode \spacefactor\save_space_factor \fi
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect The usage of the output routine as an information passing system
+%%% has always it's difficulties. One of the real hard parts is the
+%%% handling of the page marks, special token lists that are handled by
+%%% \TeX{}. These token lists provide informations about text on a page,
+%%% they are usually used to create head lines etc. The user may access
+%%% these token lists with three control sequences: |\botmark| is the
+%%% last page mark given, |\topmark| is the |\botmark| of the previous
+%%% page, and |\firstmark| is the first page mark on the actual page or
+%%% |\topmark| if none was given. Here ``page'' is used in the \TeX{}
+%%% sense, i.e.\ as the material which has been collected between two
+%%% |\output| invocations. Of course, the page marks must not be
+%%% destroyed---and that means they must be reinserted after each
+%%% special use of the output routine.
+
+%%% But we have luck: A ``special use'' consists of two |\output|
+%%% invocations, so we can insert |\topmark| again as a page mark after
+%%% the first invocation where it will be the only page mark on that
+%%% \TeX{} page. The second invocation will automatically transform this
+%%% page mark into the ``last page mark on the previous page,'' i.e.\ in
+%%% |\topmark|---that's what we need! Furthermore |\firstmark| and
+%%% |\botmark| are saved in control sequences during the first invocation,
+%%% they will be inserted again, too.
+
+%%% There's one situation where this approach doesn't work: In front of
+%%% the first page mark |\topmark|, |\firstmark|, and |\botmark| expand
+%%% to an empty token list. If we save them then and insert their old
+%%% values we have inserted empty page marks. If other page marks follow
+%%% on the same ``real'' page |\firstmark| will be empty instead of
+%%% expanding to the token list of the first page mark. To prevent this
+%%% we must not save and restore page marks before the first |\mark| has
+%%% been added to the main vertical list.
+
+%%% Well, that can be controlled with a switch---but this switch must be
+%%% set very carefully. If it is set immediately by the first |\mark|
+%%% this may be in horizontal mode and special output invocations can
+%%% occur above this page mark (i.e., there may be a |\beginchange| in the
+%%% same paragraph in front of the |\mark|). Therefore the setting of the
+%%% switch must be delayed until the vertical position of the |\mark|
+%%% (precisely: the position of the |\mark| in the current list) is
+%%% reached. In horizontal mode this can be done with a |\vadjust| and
+%%% the output routine! Voil\`a, this is another command group for the
+%%% output routine with only one command.
+
+%%% \beginprog
+\newif\if@save_mark@ \@save_mark@false
+
+\def\mark_penalty_group{-102}
+%%% \endprog
+
+
+%%% \sect We will redefine |\mark| so that the first page mark either sets
+%%% the switch to true (in vertical mode all possible special page breaks
+%%% are already handled) or forces the |\output| routine to do this at an
+%%% appropriate place. In the last case we can use |\trigger_output|
+%%% again. Afterwards we restore the original meaning of |\mark| again to
+%%% reduce the processing overhead (and the dead cycles).
+
+%%% This change of |\mark| has the consequence that the first |\mark| in a
+%%% document cannot be used anymore in horizontal mode inside a vertical
+%%% box that shall be split afterwards. But this is only sensible if this
+%%% mark shall be used as |\splitfirstmark| because it will almost never
+%%% migrate to the outer list---really a rare case!
+
+%%% \beginprog
+\let\@@mark=\mark
+\def\mark{%
+ \ifvmode
+ \ifinner \else \global\@save_mark@true \fi % split marks!
+ \else \break_penalty=\mark_penalty_group00 % this will corrupt \vsplit
+ \trigger_output
+ \fi
+ \global\let\mark=\@@mark
+ \@@mark
+ }
+%%% \endprog
+
+
+%%% \sect
+%%% \begin{sloppypar}
+%%% If the output routine is triggered with the mark penalty value
+%%% it will call |\start_saving_page_marks|.
+%%% \end{sloppypar}
+
+%%% \beginprog
+\def\start_saving_page_marks{% % this may be executed twice
+ \unvbox255
+ \global\@save_mark@true
+ }
+%%% \endprog
+
+
+%%% \sect To finish the treatment of page marks we can formulate the two
+%%% macros which are used at the first resp.\ second invocation of a
+%%% ``special output,'' the principles have already been explained.
+
+%%% \beginprog
+\def\backup_page_marks{%
+ \if@save_mark@
+ \mark{\topmark}%
+ \xdef\save_firstmark{\firstmark}%
+ \xdef\save_botmark{\botmark}%
+ \fi
+ }
+
+\def\restore_page_marks{%
+ \if@save_mark@
+ \mark{\save_firstmark}\mark{\save_botmark}%
+ \fi
+ }
+%%% \endprog
+
+
+
+
+
+%%% \chap Positioning the Change Marks.
+
+%%% Now we must handle the positions of the bars. |\change_pos| will hold
+%%% the position of the actual mark, i.e.\ the distance between top of page
+%%% and actual mark. |\top_change_pos| will hold the beginning of a changed
+%%% area; a value of |\maxdimen| indicates that no change is in effect. If
+%%% a changed area is completed, it is appended to the list |\bar_list| as
+%%% an element |\bar(\top_change_pos,\change_pos)|. This list contains all
+%%% changed areas within the current page so that bars can be written later
+%%% on. A single bar will be produced by |\write_bar|.
+
+%%% \noindent The definition of |\bar| to |\relax| allows the concatenation
+%%% of new elements to |\bar_list| with |\xdef|.
+
+%%% \beginprog
+\newdimen\change_pos
+\newdimen\top_change_pos \top_change_pos=\maxdimen
+
+\let\bar_list=\empty
+
+\let\bar=\relax
+\def\write_bar(#1,#2){%
+ \setbox0=\hbox{\vrule height -#1 depth #2}%
+ \dp0=0pt \ht0=0pt
+ \box0
+ }
+%%% \endprog
+
+
+%%% \sect If the output routine was activated by a |\outputpenalty| value
+%%% within the range of our reserved penalties, the change handling will
+%%% occur, otherwise standard plain output can be done.
+
+%%% \beginprog
+\newcount\penalty_group
+
+\output={%
+ \boxmaxdepth=\maxdepth
+ \penalty_group=\outputpenalty \divide \penalty_group by 100
+ \ifnum \penalty_group=\change_penalty_group\space \change_handling
+ \else
+ \ifnum \penalty_group=\mark_penalty_group\space
+ \start_saving_page_marks
+ \else \plainoutput
+ \fi
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect As explained before, the change handling must differentiate
+%%% between the kind of the change command (beginning is indicated by
+%%% $|\change_cmd|=0$, end by~1) and between the mode (horizontal indicated
+%%% by an odd |\change_mode| value, vertical by an even). A change mode
+%%% higher than one indicates that we are doing the first page break that
+%%% has to backup the page as far as it exists already and results in an
+%%% empty current list of page elements.
+
+%%% \beginprog
+\newcount\change_cmd
+\newcount\change_mode
+
+\def\change_handling{%
+ \change_cmd=-\outputpenalty % ==> absolute value
+ \advance \change_cmd by \change_penalty_group00 % subtraction
+ \change_mode=\change_cmd
+ \divide \change_cmd by 10 % second-to-last digit
+ \advance \change_mode by -\number\change_cmd0 % last digit
+ \ifnum \change_mode>1 \backup_page
+ \else
+ \ifcase \change_cmd \begin_change
+ \or \end_change
+ \else \errmessage{Invalid changepenalty}%
+ \fi
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect Processing a mark during the second trigger of the output routine
+%%% means restoring the page and storing the positions. At the beginning,
+%%% the begin of the change is saved, at the end, we know the bar already
+%%% and put it into the bar list. Then the positioning values are
+%%% reinitialized.
+
+%%% As within every output invocation, the box 255 must be unboxed. As we
+%%% are here in the second invocation of the output routine the |\box255|
+%%% consists only of the empty |\vbox| we have inserted in
+%%% |\trigger_output|. We can therefore throw it away.
+
+%%% \beginprog
+\def\begin_change{%
+ \restore_page
+ \setbox0=\box255
+ \ifdim \top_change_pos=\maxdimen
+ \global\top_change_pos=\change_pos \global\change_pos=0pt
+ \else \errmessage{Nested change bars are not supported}%
+ \fi
+ }
+
+\def\end_change{%
+ \restore_page
+ \setbox0=\box255
+ \ifdim \top_change_pos=\maxdimen
+ \errmessage{No change is in effect}%
+ \else
+ \xdef\bar_list{\bar_list \bar(\the\top_change_pos,\the\change_pos)}%
+ \global\top_change_pos=\maxdimen \global\change_pos=0pt
+ \fi
+ }
+%%% \endprog
+
+
+
+
+%%% \chap Handling the Page Contents.
+
+%%% We handle the part of the page that was collected up to now by putting
+%%% it into a box. This fixes the position of the change mark so that
+%%% |\change_pos| can be set and stored later on in |\top_change_pos| or as
+%%% the lower end of a bar in |\bar_list|.
+
+%%% To save the page contents in the first output invocation, we have to
+%%% save the page in |\save_page|. Before that, we store the size of the
+%%% box (which equals |\pagegoal|!)\ in |\page_goal|. If the unboxing
+%%% caused an increase of height (i.e.\ if $|\pagetotal|>|\pagegoal|$),
+%%% we eject the page up to the change mark. Now we have to compute the
+%%% current position of our mark in |\change_pos|. It is fixed by the size
+%%% of the |\save_page|, but in case of a begin mark in horizontal mode we
+%%% must decrease it from the baseline position to the top of the last line.
+%%% Finally, we must save the values for the allowed insertions and change
+%%% them to the maximal value so that a rest that is split from an insertion
+%%% will be appended to the insertion box at the second invocation in every
+%%% case.
+
+%%% The |\vsize| is initialized to |\maxdimen|. This allows to control
+%%% whether this first output invocation ocurred or if it was discarded.
+%%% For the same reason |\change_pos| is initialized to~0pt.
+
+%%% \beginprog
+\newbox\save_page
+
+\newdimen\page_goal
+\newdimen\save_vsize \save_vsize=\maxdimen
+\newdimen\save_dimen_topins
+\newdimen\save_dimen_footins
+
+\def\backup_page{%
+ \global\page_goal=\ht255
+ \global\setbox\save_page=\vbox{\unvbox255}%
+ \ifdim \ht\save_page>\page_goal \eject_page_so_far \fi
+ \change_pos=\ht\save_page \global\advance \change_pos by \dp\save_page
+ \ifnum \change_cmd=\change_penalty_begin\space
+ \ifodd \change_mode \higher_change_pos \fi
+ \fi
+ \global\save_vsize=\vsize \global\vsize=\maxdimen
+ \global\save_dimen_topins=\dimen\topins \global\dimen\topins=\maxdimen
+ \global\save_dimen_footins=\dimen\footins
+ \global\dimen\footins=\maxdimen
+ \backup_page_marks
+ }
+
+\change_pos=0pt
+%%% \endprog
+
+
+%%% \sect To eject a page as far as it is we restore it from the
+%%% |\save_page| back to box~255. In horizontal mode and at a begin mark
+%%% the last line contains the mark and must not be output. So we remove it
+%%% and the preceding glue from the stored rest, just leaving a single hbox
+%%% to be on top of the actual page (in |\save_page|) now. Then normal
+%%% output can be done with box~255.
+
+%%% \beginprog
+\def\eject_page_so_far{%
+ \begingroup
+ \vbadness=20000 % don't complain about underfull vboxes
+ \global\setbox255=\vbox to \page_goal{%
+ \unvbox\save_page
+ \ifnum \change_cmd=\change_penalty_begin\space
+ \ifodd \change_mode
+ \global\setbox\save_page=\lastbox
+ \unskip
+ \fi
+ \fi
+ }%
+ \endgroup
+ \plainoutput
+ }
+%%% \endprog
+
+
+%%% \sect
+%%% \begin{sloppypar}
+%%% In horizontal mode and at a begin mark, we need the position of
+%%% the mark (|\change_pos|) on the upper boundary of the last line in
+%%% |\save_page|. If there is just one line left from a recent eject, the
+%%% height is given by the topskip decreased by the height of this hbox. If
+%%% the height of the box is larger than |\topskip| the skip will not be
+%%% inserted and the change position results to~0pt. Otherwise,
+%%% |\save_page| is a vbox whose last hbox we delete temporarily using
+%%% box~0. Height and depth of the rest are the actual position on the page.
+%%% \end{sloppypar}
+
+%%% The double of the page we have constructed this way will immediately be
+%%% fed back to the garbage collector because it could have become
+%%% reasonably large.
+
+%%% \beginprog
+\def\higher_change_pos{%
+ \ifhbox \save_page % rest of page from \eject_page_so_far
+ \change_pos=\topskip \global\advance \change_pos by -\ht\save_page
+ \ifdim \change_pos<0pt \global\change_pos=0pt \fi
+ \else
+ \setbox0=\vbox{%
+ \unvcopy\save_page
+ \setbox0=\lastbox % delete last line
+ }%
+ \change_pos=\ht0 \global\advance \change_pos by \dp0
+ \setbox0=\box\voidb@x
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect To restore a page during the second output invocation, we first
+%%% restore the saved values, but only if they were really changed (this can
+%%% be discovered by the value of |\save_vsize|). Now the |\save_page| is
+%%% appended to the current list as a box, which stops later usage of its
+%%% stretch- and shrinkability! Then the collected insertions can be
+%%% inserted again. The page marks have to be inserted, too.
+
+%%% \beginprog
+\def\restore_page{%
+ \ifdim \save_vsize=\maxdimen
+ \else \global\vsize=\save_vsize
+ \global\dimen\topins=\save_dimen_topins
+ \global\dimen\footins=\save_dimen_footins
+ \global\save_vsize=\maxdimen
+ \restore_page_marks
+ \fi
+ \box\save_page % discards stretch- and shrinkability!
+ \ifvoid \topins
+ \else \insert\topins{\floatingpenalty=0 \unvbox\topins}%
+ \fi
+ \ifvoid \footins
+ \else \insert\footins{\floatingpenalty=20000 \unvbox\footins}%
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect {\em Please note, that there is still a problem with this concept
+%%% of handling the output trigger:}
+
+%%% \bigskip
+
+%%% If the first output trigger is discarded because a page break has occured
+%%% just in front, footnote parts may be juggled around. I.e., if a
+%%% footnote is split in three parts, the first part was just been shipped
+%%% out, the second part is inserted back into the recent contributions by
+%%% the output routine but {\em behind\/} the third part which is saved in
+%%% the ``special place'' (according to the \TeX{}book, p.~125). A solution to
+%%% this problem might be to insert a |\do_change| again within the second
+%%% output trigger and finishing the treatmend afterwards. Afterwards a
+%%% full triggering process (two output invocations) is executed again and
+%%% alle insertion parts will be accessible in the insertion box.
+
+%%% By the way, the almost same problem appears in \LaTeX{}, too. Almost: in
+%%% \LaTeX{} this can happen every time because at the first output invocation
+%%% the |\dimen|-values of the footnote insertion is not increased. I leave
+%%% the problem open to the reader\,\dots
+
+
+
+
+
+%%% \chap Writing the Stuff.
+
+%%% The positions of the bars which mark the changed areas are relative to
+%%% the top of the text, i.e.\ the height of the top insertion is not
+%%% included. Therefore it is best to write them just after the top
+%%% insertions before the page text---but to do this we have to change the
+%%% Plain macro |\pagecontents|.
+
+%%% Below is the new definition, I have just rearranged it a little bit so
+%%% that it is more legible. The line I have inserted is marked with
+%%% `|%%%%|'. |\insert_current_bar| inserts a last element in |\bar_list|
+%%% if a changed area is not yet finished, afterwards all bars can be
+%%% written.
+
+%%% \beginprog
+\def\pagecontents{%
+ \ifvoid \topins \else \unvbox\topins \fi
+ \insert_current_bar \write_all_bars %%%%
+ \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
+ \ifvoid \footins
+ \else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins
+ \fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi
+ }
+%%% \endprog
+
+
+%%% \sect If $|\top_change_pos|=|\maxdimen|$ no change is active. Otherwise
+%%% the current change reaches from the begin mark (|\top_change_pos|) to
+%%% the end of the page, i.e.\ we insert a virtual end mark. Because the
+%%% change continues on the next page we insert a virtual begin mark on the
+%%% top of the page, too.
+
+%%% \beginprog
+\def\insert_current_bar{%
+ \ifdim \top_change_pos=\maxdimen
+ \else
+ \change_pos=\ht255 \advance\change_pos by \dp255
+ \xdef\bar_list{\bar_list \bar(\the\top_change_pos,\the\change_pos)}%
+ \global\top_change_pos=0pt
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect Now we can write all bars---if they exist anyway. It's rather
+%%% easy, we just have to define |\bar| to |\write_bar| and execute
+%%% |\bar_list|. The resulting output must not use vertical place. We must
+%%% not forget to delete the list, or we will get the same bars on the next
+%%% page again.
+
+%%% \noindent |\BarDistance| is the amount of place between the text margin
+%%% and the change bars.
+
+%%% \beginprog
+\newbox\@bars
+\newdimen\BarDistance \BarDistance=2cc
+
+\def\write_all_bars{%
+ \ifx \bar_list\empty
+ \else % changes exist
+ \setbox\@bars=\hbox to \hsize{%
+ \hskip\hsize \hskip\BarDistance
+ \vbox to 0pt{\offinterlineskip
+ \let\bar=\write_bar \bar_list
+ }%
+ \hss
+ }%
+ \ht\@bars=0pt \dp\@bars=0pt \box\@bars
+ \global\let\bar_list=\empty
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect We finish the macro file so that garbage (e.g.\ of exchanges
+%%% between systems) can come afterwards.
+
+%%% \beginprog
+\catcode`\@=\atcode
+\catcode`\_=\uscode
+
+\endinput
+%%% \endprog
+
+
+
+%%% \end{document}
diff --git a/macros/latex209/contrib/chbars/chbars.aux b/macros/latex209/contrib/chbars/chbars.aux
new file mode 100644
index 0000000000..ae1303f2e0
--- /dev/null
+++ b/macros/latex209/contrib/chbars/chbars.aux
@@ -0,0 +1,26 @@
+\relax
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.}Introduction.}{1}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.}GNU General Public License.}{3}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.}User Interface.}{4}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.}Utility Routines.}{5}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {5.}\hbox {}}{5}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {6.}Triggering the Output Routine.}{7}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {7.}\hbox {}}{7}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {8.}\hbox {}}{7}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {9.}\hbox {}}{8}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {10.}\hbox {}}{9}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {11.}\hbox {}}{9}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {12.}\hbox {}}{10}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {13.}Positioning the Change Marks.}{11}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {14.}\hbox {}}{11}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {15.}\hbox {}}{12}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {16.}\hbox {}}{12}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {17.}Handling the Page Contents.}{14}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {18.}\hbox {}}{14}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {19.}\hbox {}}{15}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {20.}\hbox {}}{16}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {21.}\hbox {}}{16}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {22.}Writing the Stuff.}{17}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {23.}\hbox {}}{17}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {24.}\hbox {}}{17}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {25.}\hbox {}}{18}}
diff --git a/macros/latex209/contrib/chbars/chbars.doc b/macros/latex209/contrib/chbars/chbars.doc
new file mode 100644
index 0000000000..42fe8c5378
--- /dev/null
+++ b/macros/latex209/contrib/chbars/chbars.doc
@@ -0,0 +1,998 @@
+% This is CHBARS.STY as of Aug '92
+% -*-LaTeX-*-
+%---------------------------------------------------------
+% (c) 1989 by J.Schrod. copy conditions see below.
+
+%
+% Macro package for creating changebars in LaTeX.
+% MAKEPROG will ``weave'' this file into documentation that can be LaTeX'ed.
+%
+% documented in LaTeX (for Anne and Chris)
+
+%
+% VERSION HISTORY (MSCF -- most significant change first)
+%
+% DATE PERSON REMARK
+% 92-08-15 -rlb Use change bars in this document to mark major changes;
+% so now you can see for yourself what they are.
+% 92-07-28 -rlb Run through a spelling checker before distributing.
+% 92-01-15 -rlb 1) Keep \maxdeadcycles the same; just
+% don't count calls to output for change processing.
+% 2) Allow setting the change bar width.
+% 3) Some typos and rewording of some of the comments.
+% 4) Allow setting change bar width. Interface copied
+% from changebars.sty
+% 5) Allow changebars to be on the left as well as
+% the right.
+% 6) localize some variables global definitions now
+% start with cb_.
+% 7) Chain onto existing \output routine rather than assume
+% \plainoutput.
+% And miscellaneous minor hacks.
+% 89-10-09 -js converted to LaTeX (progltx)
+% 89-09-25 -js repaired \mark processing in horizontal mode
+% 89-08 -js first version (for EuroTeX89 in Karlsruhe)
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+
+% should be progtex...
+%
+%
+% These TeX macros were documented with the documentation system
+% MAKEPROG and automatically converted to the current form.
+% If you have MAKEPROG available you may transform it back to
+% the original input: Remove every occurence of three percents
+% and one optional blank from the beginning of a line and remove
+% every line which starts with four percents. The following lex
+% program will do this:
+%
+% %%
+%
+% ^%%%\ ? ;
+% ^%%%%.*\n ;
+%
+% MAKEPROG may be obtained over the net from the Bitnet-Listserver
+% LISTSERV@DHDURZ1 (filelist WEBWARE), from tuglib@science.utah.edu,
+% or via ftp from june.cs.washington.edu.
+%
+%
+\documentstyle[progltx,chbars,a4-9]{article}
+
+
+%
+% local macros
+%
+
+\let\mc=\small % for names like GNU
+
+\def\PS{{\sc PostScript}}
+\def\DVI{{\tt DVI}}
+\def\GNU{{\mc GNU}}
+
+\chardef\bs=`\\
+
+%
+
+
+
+\begin{document}
+\tableofcontents
+
+\title{Changebars without {\tt \bs{}special}'s}
+\author{\sc Joachim Schrod}
+
+\newcommand{\changedate}{Aug 15, 1992}
+\date{Revised last on \changedate\footnote{by {\tt rocky@watson.ibm.com}}\\
+ Formatted on \today}
+\maketitle
+
+
+
+\begin{abstract}
+It is common practice to use vertical bars in the margins of a
+document to mark pieces of text which have changed since the last
+version(s) of this document. Such vertical bars are usually
+called {\em changebars}. It has often been said that it is
+impossible to produce changebars with \TeX{} without the usage of
+|\special| commands (driver directives), which extend the
+primitives of \TeX{}. This paper presents a \TeX{} macro file
+which implements changebars without such a usage. The macro file
+is written for the usage with {\sc Plain}~\TeX{} but the implementation
+strategy can be used with \LaTeX{}, too with minor changes.
+
+\end{abstract}
+
+
+
+\chap Introduction.
+
+Changebars are used to mark modified parts in existing documents. For
+the usage in \TeX{} documents, there exist only solutions that use
+driver/printer features by the way of inserting |\special| commands in
+the \TeX{} source, e.g.\ for \PS{} drivers. This results in documents
+that are no longer as freely interchangeable as the \DVI{} concept would
+allow---device dependency is problematic especially for this application
+that is useful for multi-authoring or standards development.
+
+This macro package offers a pure \TeX{} solution. Nevertheless, it has
+its restrictions, too. The page break will no longer be optimal,
+because there is no strechability or shrinkability of a page
+on top of the last
+region of change marked. But this seems to be acceptable,
+especially as the change bar feature often will be used for proof
+reading and not in the final document. This restriction is the reason
+why no change marks can be used on title pages or on similar
+constructions. Changes in floating insertions (footnotes, figures) are
+not handled. Multi-column formats such as a two-column layout
+will not work. There is currently no support for nested changes.
+
+The method for writing a change bar consists of three
+parts: First, the output routine is signalled when the beginning
+or end of a change bar setting command is encountered.
+Next, the position of the changed area is found out
+and fixed; the end-of-change command adds the last change bar
+position, length and width to a list of all such positions,
+lengths and widths of change bars that is accumulated for the current
+page. Finally, when
+the output routine is triggered (either asynchronously in trying
+to ship out the page or synchronously when discovering that the
+end of a change bar lies off the page), this list of change
+bars information is used create vertical rules which are added to the page.
+If the change bar is not complete, a ``virtual'' end change is
+inserted, and a ``virtual'' begin change is inserted at the
+beginning of the next page.
+
+\beginchange
+The demonstrated solution was originally written in {\sc Plain}
+\TeX{}, because it was
+easier and could be presented better at the Euro\TeX89 conference in
+Karlsruhe. An adaptation to \LaTeX{} has been done too which
+requires minor modifications to the \LaTeX's output routine.
+\endchange
+
+Some history. The routines were initially written by Joachim
+Schrod. Around Jan.\ 1992, R.\ Bernstein added some of the features
+coded in |changebars.sty| to combine the best features
+of the two (and added a couple of his own). For example, the
+ability to specify change bar widths, put the change bars either on the
+right or left margin, specifiy the distance from the margin to the
+change bar, and chain to on top of a pre-existing modified
+output routine.
+\beginchange
+Initially, both the {\TeX} and the {\LaTeX}
+versions were put into one file. However, due problems in
+dealing with conditional definition of code, in particular
+problems with an extra or omitted |\fi| in defining or not
+|\ifr@ggedbottom|, the code was split into two.
+\endchange
+
+The |changebars.sty| package
+was written by Michael Fine and revised by Johannes Braams
+and Neil Winton. One or two ideas from Thomas J.~Reid have been
+used.
+
+\chap GNU General Public License.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the \GNU{} General Public License as
+published by the Free Software Foundation; either version~2, or (at your
+option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+{\bf without any warranty\/}; without even the implied warranty of
+{\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+the \GNU{} General Public License for more details.
+
+You should have received a copy of the \GNU{} General Public License
+along with this program; if not, write to the Free Software Foundation,
+Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+\chap User Interface.
+
+\begin{newsloppy}
+A changed area is described by two marks, |\beginchange| and
+|\endchange|. The |\beginchange| can take an optional argument,
+the bar thickness, enclosed in brackets. That is, either of the
+something like |\beginchange[0.4pt]|, or |\beginchange| is valid.
+In the latter case where no thickness dimension is specified, the value
+of |\changebarwidth| is used. Therefore, by setting this you can
+change the bar thickness used when none is given. Changing the bar
+thickness might be useful in identifying different classes of changes.
+
+Another pair of global values that can be set are the
+logical variables
+{\tt \bs chbar\-Right\-true} and {\tt \bs chbar\-Right\-false}.
+These specify whether
+changebars should be on the right or left. Say, if one wanted to
+have the changebars always appear on the outside margin, one could
+change these accordingly on each page.
+\end{newsloppy}
+
+Finally |\BarDistance| is the amount of place between the text margin
+and the change bars. This value should normally be positive. For
+change bars on the right this value is added to |\hsize|, while
+for change bars on the left this value is {\em subtracted\/} from
+|\hoffset|.
+
+\beginprog
+\newdimen\changebarwidth \changebarwidth=1pt\relax
+\newif\ifchbarRight \chbarRightfalse
+\newdimen\BarDistance \BarDistance=2cc
+
+\endprog
+
+\chap Utility Routines and Programming Conventions.
+
+Before we get into the nitty gritty details, we give some common
+macros.
+
+First, we declare some shorthands for category codes. By
+declaring the at sign~(`|@|') as well as the underscore~`(|_|)' as
+letters we can use them in our macros. (I agree with D.~Knuth that
+|\identifier_several_words_long| is more readable than
+|\IdentifierSeveralWordsLong| and in every case better than |\p@@@s|.)
+\beginchange
+By defining the at sign to be in the letter class,
+we can access {\sc Plain} \TeX's ``private''macros. By defining the
+underscore to be in the letter class, we make our own private macros more
+readable. But since have to
+restore these category codes at the end of this macro file, we store
+\endchange
+their former values in the control sequences |\atcode| and |\uscode|.
+This method is better than to use a group because not all macros have to
+be defined global this way.
+
+All {\em global\/} definitions of the package are prefixed by
+|cb_|. In this way, they can be easily determined. If other
+packages do likewise, it is less likely that definition
+names will clash between packages. (Unless the other package uses the
+|cb_| prefix too, in which case there is a good chance that many
+variable names will clash.)
+
+The {\TeX}book recommends the 255 registers be used for scratch
+space, so routines use this value when a spare register is
+needed. (See for example |\cb_write_bar|.)
+
+
+\beginprog
+\chardef\letter=11
+
+\chardef\atcode=\catcode`\@
+\chardef\uscode=\catcode`\_
+
+\catcode`\@=\letter
+\catcode`\_=\letter
+
+\endprog
+
+\sect Now we are ready to code the top-level routine for indicating the
+beginning of a change. But first we display the banner and
+version number associated with this package. If this package has
+been loaded already we terminate.
+
+Although one can specify a bar
+thickness on the |\beginchange| macro, it is at the |\endchange|
+where this thickness is recorded and put on a current list of
+change bar entries for the current page. It seems more natural to
+specify the thickness at the beginning of the change rather than
+the end. Therefore at the
+|\beginchange| we merely save the value given or save the value of
+|\changebarwidth| if no thickness was given.
+|\cb_changebarwidth| is this saved value. Auxiliary routine
+|\cb_xstart| is used to parse off the optional enclosing
+brackets. (This weird name was taken from one used in |changebars.sty|.)
+
+default value, that is the value when a width is not specified
+is |\changebarwidth|.
+
+\beginprog
+
+\@ifundefined{cb_xstart}{}{\endinput}
+\typeout{Style option `change bars' -- version 1.1a}
+
+\newdimen\cb_changebarwidth
+
+\def\beginchange{\@ifnextchar [
+ {\cb_xstart}
+ {\beginchange_\changebarwidth}}
+\def\cb_xstart[#1]{\beginchange_{#1}}
+
+\endprog
+
+\chap Triggering the Output Routine.
+
+\beginchange
+When a change bar is started or completed, we signal the output
+routine in the ``usual'' way described below. Why bother the
+output routine? The output routine is supposed to be thought of
+as an asynchronous process which has access to the page via the
+contents of box register 255. In theory, if we did not perform
+actions in the output routine, it might get triggered inadvertantly,
+and the output routine might modify this box register on us in the
+midst of our work. The information that needs to be recorded
+is the position of the beginning and end of the lines containing a
+marked change region.
+
+\begin{newsloppy}
+The macros |\beginchange| and |\endchange| signal the output
+routine. Rather than merely calling the output routine directly,
+these routines signal the output routine by setting a low page penalty, i.e.,
+one which tells {\TeX} that this is a really good place to break
+the page. Of course, we will modify the output routine so that it
+doesn't really split the page when it has been called in this fashion.
+Again, the reason we signal the output routine in what seems at
+first a pretty odd way, is that this is the way it is supposed to
+be done. If a low penalty were not set, some
+other action (if we weren't careful) might cause a penalty to be
+set and thus call the output routine (recursively).
+
+So that we can distinguish our calls from others, |\beginchange|
+and |\endchange| reserve a range of
+penalty values; he actual value is stored in |\cb_break_penalty|.
+This range of values is below
+$-10\,000$, the nominal value for indicating that a page should
+occur now. The penalty will be in the range $|\cb_penalty_group|
+\cdot 100 - 99 \ldots |\cb_penalty_group| \cdot 100$.
+The output routine then decides whether it has been called
+to start or end a change bar or neither. This is done with the values
+|\cb_penalty_begin| and |\cb_penalty_end| that are used as the
+second-to-last digit of the change penalty.
+\end{newsloppy}
+
+The output routine also needs to determine whether
+the beginning of change bar starts in horizontal or vertical mode
+so it can figure out the exact placement for the beginning of the
+bar line. In horizontal mode, the change bar does
+not begin at the baseline of the actual text position, but on top of the
+actual line. This is marked in the last digit, an odd digit will be
+used in horizontal mode.
+
+Note that the values mentioned above are used as digits here that can be
+concatenated. If they are not followed by an other digit they should be
+terminated by |\space| to stop {\TeX}'s look-ahead scanning for
+digits when reading a number.
+\endchange
+
+\beginprog
+\def\cb_penalty_group{-101} \def\cb_penalty_begin{0}
+\def\cb_penalty_end{1}
+
+\endprog
+
+
+\sect The calls to start or end a change bar, set an encoded page-break
+penalty which includes an
+indication of begin or end of a change bar. The variable
+|\cb_break_penalty| is used to create such as special value.
+The rest (|\cb_trigger_output|) is the same action
+for both. The region just before the end of the changed region can be
+in horizontal mode and preceded by
+glue that could cause a line break, thus including the following line to
+the change area as well. To avoid this unwanted behavior, the space is
+saved in |\save_lastskip|, discarded in front of the mark and restored
+afterwards.
+
+\beginprog
+\newcount\cb_break_penalty
+
+\def\beginchange_#1{%
+ \cb_changebarwidth=#1
+ \cb_break_penalty=\cb_penalty_group\cb_penalty_begin0
+ \cb_trigger_output
+ }
+\def\endchange{{%
+ \skipdef\save_lastskip=255%
+ \ifhmode \save_lastskip=\lastskip \unskip \fi%
+ \cb_break_penalty=\cb_penalty_group\cb_penalty_end0%
+ \cb_trigger_output%
+ \ifhmode \hskip\save_lastskip \fi%
+ }}%\endchange
+\endprog
+
+
+\sect The next routine, |\cb_trigger_output|,
+triggers calls to the output routine by setting the page-break
+penalty, |\penalty|. {\TeX} may discard an |\output| invocation at
+the beginning of a page. So we trigger the output routine twice, first
+with a special penalty value that is 2~less than the correct value
+(including the code for horizontal or vertical mode). After the first
+page break, it is asserted that the current list is empty. The output
+routine has to save the former page contents if necessary.
+
+Next we set the penalty to the correct value. The second page break does
+the real work, restores the page contents and handles the split
+insertions (footnotes, figures,~\dots).
+
+In horizontal mode |\spacefactor| must not be destroyed, so it is
+saved and restored via local count register |\save_spacefactor|.
+
+\beginprog
+
+\def\cb_trigger_output{%
+ \ifinner \errmessage{Change cannot be marked inside a box}%
+ \else{%
+ \countdef\save_spacefactor=255%
+ \ifvmode
+ \let\do_in_vmode=\relax
+ \advance \cb_break_penalty by -2
+ \else
+ \save_spacefactor=\spacefactor
+ \let\do_in_vmode=\vadjust
+ \advance \cb_break_penalty by -3
+ \fi
+ \do_in_vmode{%
+ \penalty\cb_break_penalty% first call to \output
+ \null
+ \advance \cb_break_penalty by 2
+ \penalty\cb_break_penalty% second call to \output
+ }%
+ \ifhmode \spacefactor=\save_spacefactor \fi
+ }%
+ \fi
+ }% cb_trigger_output
+\endprog
+
+
+\sect Using the output routine for passing
+information has it's difficulties. One of the hard parts is
+\beginchange
+handling page marks. These are token lists which are set by the
+|\mark| command. They record information that can later
+be accessed by the output routine. The canonical example of such
+a use of the |\mark| command is in creating
+\endchange
+dictionary-style entry headings.
+
+The output routine can access one of three
+token lists through three control sequences: |\botmark| is the
+last page mark given, |\topmark| is the |\botmark| of the previous
+page, and |\firstmark| is the first page mark on the actual page or
+|\topmark| if none was given. Here ``page'' is used in the \TeX{}
+sense, i.e.\ as the material which has been collected between two
+|\output| invocations. Of course, the page marks must not be
+destroyed---and that means they must be reinserted after each
+special use of the output routine.
+
+But we are lucky: A ``special use'' consists of two |\output|
+invocations, so we can insert |\topmark| again as a page mark after
+the first invocation where it will be the only page mark on that
+\TeX{} page. The second invocation will automatically transform this
+page mark into the ``last page mark on the previous page,'' i.e.\ in
+|\topmark|---that's what we need! Furthermore |\firstmark| and
+|\botmark| are saved in control sequences during the first invocation,
+they will be inserted again, too.
+
+There's one situation where this approach doesn't work: in front of
+the first page mark. Here, |\topmark|, |\firstmark|, and |\botmark| expand
+to an empty token list. If we save them then and insert their old
+values we have inserted empty page marks. If other page marks follow
+on the same ``real'' page, |\firstmark| will be empty instead of
+expanding to the token list of the first page mark. To prevent this
+we must not save and restore page marks before the first |\mark| has
+been added to the main vertical list.
+
+Well, that can be controlled with a switch---but this switch must be
+set very carefully. If it is set immediately by the first |\mark|
+this may be in horizontal mode and special output invocations can
+occur above this page mark (i.e., there may be a |\beginchange| in the
+same paragraph in front of the |\mark|). Therefore the setting of the
+switch must be delayed until the vertical position of the |\mark|
+(precisely: the position of the |\mark| in the current list) is
+reached. In horizontal mode this can be done with a |\vadjust| and
+the output routine! Voil\`a, this is another command group for the
+output routine with only one command.
+
+\beginprog
+\newif\if_cb_save_mark@ \_cb_save_mark@false
+
+\def\mark_penalty_group{-102}
+\endprog
+
+
+\sect We will redefine |\mark| so that the first page mark either sets
+the switch to true (in vertical mode all possible special page breaks
+are already handled) or forces the |\output| routine to do this at an
+appropriate place. In the last case we can use |\cb_trigger_output|
+again. Afterwards we restore the original meaning of |\mark| again to
+reduce the processing overhead (and the dead cycles).
+
+This change of |\mark| has the consequence that the first |\mark| in a
+document cannot be used anymore in horizontal mode inside a vertical
+box that shall be split afterwards. But this is only sensible if this
+mark shall be used as |\splitfirstmark| because it will almost never
+migrate to the outer list---really a rare case!
+
+\beginprog
+\let\cb_mark=\mark
+\def\mark{%
+ \ifvmode
+ \ifinner \else \global\_cb_save_mark@true \fi % split marks!
+ \else
+ \cb_break_penalty=\mark_penalty_group00 % this will corrupt \vsplit
+ \cb_trigger_output
+ \fi
+ \global\let\mark=\cb_mark
+ \cb_mark
+ }
+\endprog
+
+
+\sect
+\begin{newsloppy}
+If the output routine is triggered with the mark penalty value,
+it will call {\tt \bs cb\_save\discretionary{\_}{}{}page\_marks}.
+\end{newsloppy}
+
+\beginprog
+\def\cb_save_page_marks{% % this may be executed twice
+ \unvbox\@cclv
+ \global\_cb_save_mark@true
+ }
+\endprog
+
+
+\sect To finish the treatment of page marks we can formulate the two
+macros which are used at the first resp.\ second invocation of a
+``special output,'' the principles have already been explained.
+
+\beginprog
+\def\cb_backup_page_marks{%
+ \if_cb_save_mark@
+ \mark{\topmark}%
+ \xdef\cb_save_firstmark{\firstmark}%
+ \xdef\cb_save_botmark{\botmark}%
+ \fi
+ }
+
+\def\cb_restore_page_marks{%
+ \if_cb_save_mark@
+ \mark{\cb_save_firstmark}\mark{\cb_save_botmark}%
+ \fi
+ }
+\endprog
+
+
+
+
+
+\chap Positioning the Change Bars.
+
+\begin{newsloppy}
+Now we handle the positions of the bars.
+The dimension |\cb_bot_change_pos| will hold
+the position of the end of the change bar, i.e.\ the distance between
+top of page the end of the changed area. The dimension
+|\cb_top_change_pos| will hold the beginning of a changed
+area; a value of |\maxdimen| indicates that no change is in effect. If
+a changed area is completed, it is appended to the list |\cb_bar_list| as
+an element {\tt \bs cb\_bar(\bs cb\_top\_change\_pos,
+\bs cb\_bot\_change\_pos, \bs changebar\-width)}. This list contains all
+changed areas within the current page so that bars can be written later
+on. A single bar will be produced by |\cb_write_bar|.
+
+\noindent The definition of |\cb_bar| to |\relax| allows the concatenation
+of new elements to |\cb_bar_list| with |\xdef|.
+
+Local dimension register |\halfwidth| is used to center the change bar.
+\end{newsloppy}
+
+\beginprog
+\newdimen\cb_bot_change_pos
+\newdimen\cb_top_change_pos \cb_top_change_pos=\maxdimen
+
+\let\cb_bar_list=\empty
+
+\let\cb_bar=\relax
+\def\cb_write_bar(#1,#2,#3){{%
+ \dimendef\halfwidth=255%
+ \setbox0=\hbox{\vrule width #3 height -#1 depth #2}%
+ \dp0=0pt \ht0=0pt \wd0=0pt%
+ \halfwidth=#3 \divide\dimen255 by 2%
+ \hskip -\halfwidth%
+ \box0%
+ \hskip \halfwidth%
+ }}
+\endprog
+
+
+\sect If the output routine was activated by a |\outputpenalty| value
+within the range of our reserved penalties, the change handling will
+occur, otherwise standard plain output can be done. There may be
+a lot of interaction between the routines which set change bars and
+the output routine. These interactions should not be recorded in
+|\deadcycles| or else \TeX{} will soon grumble. One might consider
+doing the same for the|\mark_penalty_group|. But since this
+group is called once it shouldn't matter all that much.
+
+One might also consider adding a counter like |\deadcycles| just
+to count the change bar interactions as is done for the calls to
+|\output|, and have {\TeX} grumble if there are ``too many'' of
+them. For now we don't do this---all of this code is correct
+anyway!
+
+First we save away the old output routine in case the user had redefined
+this beforehand.
+
+\beginprog
+\newtoks\cb_oldoutput
+\edef\cb_oldoutput{\the\output}
+
+\newcount\penalty_group
+
+\output={%
+ \boxmaxdepth=\maxdepth
+ \penalty_group=\outputpenalty \divide \penalty_group by 100
+ \ifnum \penalty_group=\cb_penalty_group\space
+ {\countdef\new_deadcycles=255% don't count as a dead cycle
+ \new_deadcycles=\deadcycles
+ \advance \new_deadcycles by -1
+ \deadcycles=\new_deadcycles}
+ \cb_change_handling
+ \else
+ \ifnum \penalty_group=\mark_penalty_group\space
+ \cb_save_page_marks
+ \else \cb_oldoutput
+ \fi
+ \fi
+ }
+\endprog
+
+
+\sect As explained before, the change handling must differentiate
+between the kind of the change command (beginning is indicated by
+$|\cb_change_cmd|=0$, end by~1) and between the mode (horizontal indicated
+by an odd |\cb_change_mode| value, vertical by an even). A change mode
+higher than one indicates that we are doing the first page break that
+has to backup the page as far as it exists already and results in an
+empty current list of page elements.
+
+\beginprog
+\newcount\cb_change_cmd
+\newcount\cb_change_mode
+
+\def\cb_change_handling{%
+ \cb_change_cmd=-\outputpenalty % ==> absolute value
+ \advance \cb_change_cmd by \cb_penalty_group00 % subtraction
+ \cb_change_mode=\cb_change_cmd
+ \divide \cb_change_cmd by 10 % second-to-last digit
+ \advance \cb_change_mode by -\number\cb_change_cmd0 % last digit
+ \ifnum \cb_change_mode>1 \cb_backup_page
+ \else
+ \ifcase \cb_change_cmd \cb_begin_change
+ \or \cb_end_change
+ \else \errmessage{Invalid changepenalty}%
+ \fi
+ \fi
+ }
+\endprog
+
+
+\sect Processing a mark during the second trigger of the output routine
+means restoring the page and storing the positions. At the beginning,
+the begin of the change is saved, at the end, we know the bar already
+and put it into the bar list. Then the positioning values are
+reinitialized.
+
+As within every output invocation, the box 255 must be unboxed. As we
+are here in the second invocation of the output routine the |\box255|
+consists only of the empty |\vbox| we have inserted in
+|\cb_trigger_output|. We can therefore throw it away.
+
+\beginprog
+\def\cb_begin_change{%
+ \cb_restore_page
+ \setbox0=\box\@cclv
+ \ifdim \cb_top_change_pos=\maxdimen
+ \global\cb_top_change_pos=\cb_bot_change_pos
+ \global\cb_bot_change_pos=0pt
+ \else \errmessage{Nested change bars are not supported}%
+ \fi
+ }
+
+\def\cb_end_change{%
+ \cb_restore_page
+ \setbox0=\box\@cclv
+ \ifdim \cb_top_change_pos=\maxdimen
+ \errmessage{No change is in effect}%
+ \else
+ \xdef\cb_bar_list{\cb_bar_list
+ \cb_bar(\the\cb_top_change_pos,\the\cb_bot_change_pos,
+ \the\cb_changebarwidth)}
+ \global\cb_top_change_pos=\maxdimen
+ \global\cb_bot_change_pos=0pt
+ \fi
+ }
+\endprog
+
+
+\chap Handling the Page Contents.
+
+We handle the part of the page that was collected up to now by putting
+it into a box. This fixes the position of the change mark so that
+|\cb_bot_change_pos| can be set and stored in |\cb_top_change_pos|
+later on or as the lower end of a bar in |\cb_bar_list|.
+
+In the first output invocation, we save the contents of the
+page in |\cb_save_page|. Before that, we store the size of the
+box (which equals |\pagegoal|!)\ in |\cb_page_goal|. If the unboxing
+caused an increase of height (i.e.\ if $|\pagetotal|>|\pagegoal|$),
+we eject the page up to the change mark. Now we have to compute the
+current position of our mark in |\cb_bot_change_pos|. It is fixed by the size
+of the |\cb_save_page|, but if the change begins in horizontal mode we
+must decrease it from the baseline position to the top of the last line.
+Finally, we must save the values for the allowed insertions and change
+them to the maximal value so that a rest that is split from an insertion
+will be appended to the insertion box at the second invocation in every
+case.
+
+The |\vsize| is initialized to |\maxdimen|. This allows to control
+whether this first output invocation ocurred or if it was discarded.
+For the same reason |\cb_bot_change_pos| is initialized to~0pt.
+
+\beginprog
+\newbox\cb_save_page
+
+\newdimen\cb_page_goal
+\newdimen\cb_save_vsize \cb_save_vsize=\maxdimen
+\newdimen\cb_save_dimen_topins
+\newdimen\cb_save_dimen_footins
+
+\def\cb_backup_page{%
+ \global\cb_page_goal=\ht\@cclv
+ \global\setbox\cb_save_page=\vbox{\unvbox\@cclv}%
+ \ifdim \ht\cb_save_page>\cb_page_goal
+ \cb_eject_page_so_far \fi
+ \cb_bot_change_pos=\ht\cb_save_page
+ \global\advance \cb_bot_change_pos by \dp\cb_save_page
+ \ifnum \cb_change_cmd=\cb_penalty_begin\space
+ \ifodd \cb_change_mode \higher_change_pos \fi
+ \fi
+ \global\cb_save_vsize=\vsize \global\vsize=\maxdimen
+ \global\cb_save_dimen_footins=\dimen\footins
+ \global\dimen\footins=\maxdimen
+ \cb_backup_page_marks
+ }
+
+\cb_bot_change_pos=0pt
+\endprog
+
+
+\sect To eject a page as far as it is we restore it from the
+|\cb_save_page| back to box~255. In horizontal mode and at a begin mark
+the last line contains the mark and must not be output. So we remove it
+and the preceding glue from the stored rest, just leaving a single hbox
+to be on top of the actual page (in |\cb_save_page|) now. Then normal
+output can be done with box~255.
+
+\beginprog
+\def\cb_eject_page_so_far{%
+ \begingroup
+ \vbadness=20000 % don't complain about underfull vboxes
+ \global\setbox\@cclv=\vbox to \cb_page_goal{%
+ \unvbox\cb_save_page
+ \ifnum \cb_change_cmd=\cb_penalty_begin\space
+ \ifodd \cb_change_mode
+ \global\setbox\cb_save_page=\lastbox
+ \unskip
+ \fi
+ \fi
+ }%
+ \endgroup
+ \cb_oldoutput
+ }
+\endprog
+
+
+\sect
+\begin{newsloppy}
+In horizontal mode and at a begin mark, we need the position of
+the mark ({\tt \bs cb\_bot\discretionary{\_}{}{}change\_pos}) on the upper boundary of
+the last line in
+|\cb_save_page|. If there is just one line left from a recent eject, the
+height is given by |\topskip| decreased by the height of this hbox. If
+the height of the box is larger than |\topskip| the skip will not be
+inserted and the change position results to~0pt. Otherwise,
+|\cb_save_page| is a vbox whose last hbox we delete temporarily using
+box~0. Height and depth of the rest are the actual position on the page.
+\end{newsloppy}
+
+The double of the page we have constructed this way will immediately be
+fed back to the garbage collector because it could have become
+reasonably large.
+
+\beginprog
+\def\higher_change_pos{%
+ \ifhbox \cb_save_page % rest of page from \cb_eject_page_so_far
+ \cb_bot_change_pos=\topskip
+ \global\advance \cb_bot_change_pos by -\ht\cb_save_page
+ \ifdim \cb_bot_change_pos<0pt
+ \global\cb_bot_change_pos=0pt
+ \fi
+ \else
+ \setbox0=\vbox{%
+ \unvcopy\cb_save_page
+ \setbox0=\lastbox % delete last line
+ }%
+ \cb_bot_change_pos=\ht0
+ \global\advance \cb_bot_change_pos by \dp0
+ \setbox0=\box\voidb@x
+ \fi
+ }
+\endprog
+
+
+\sect To restore a page during the second output invocation, we first
+restore the saved values, but only if they were really changed (this can
+be discovered by the value of |\cb_save_vsize|). Now the |\cb_save_page| is
+appended to the current list as a box, which stops later usage of its
+stretch- and shrinkability! Then the collected insertions can be
+inserted again. The page marks have to be inserted, too.
+
+\beginprog
+\def\cb_restore_page{%
+ \ifdim \cb_save_vsize=\maxdimen
+ \else \global\vsize=\cb_save_vsize
+ \global\dimen\footins=\cb_save_dimen_footins
+ \global\cb_save_vsize=\maxdimen
+ \cb_restore_page_marks
+ \fi
+ \box\cb_save_page % discards stretch- and shrinkability!
+ \ifvoid \footins
+ \else \insert\footins{\floatingpenalty=20000 \unvbox\footins}%
+ \fi
+ }
+\endprog
+
+
+\sect {\em Please note, that there is still a problem with this concept
+of handling the output trigger:}
+
+\bigskip
+
+If the first output trigger is discarded because a page break has occurred
+just in front, footnote parts may be juggled around. I.e., if a
+footnote is split in three parts, the first part was just been shipped
+out, the second part is inserted back into the recent contributions by
+the output routine but {\em behind\/} the third part which is saved in
+the ``special place'' (according to the \TeX{}book, p.~125). A solution to
+this problem might be to insert a |\do_change| again within the second
+output trigger and finishing the treatment afterwards. Afterwards a
+full triggering process (two output invocations) is executed again and
+all insertion parts will be accessible in the insertion box.
+
+By the way, the almost same problem appears in \LaTeX{}, too. Almost: in
+\LaTeX{} this can happen every time because at the first output invocation
+the |\dimen|-values of the footnote insertion is not increased. I leave
+the problem open to the reader\,\dots
+
+
+
+
+
+\chap Writing the Stuff.
+
+The positions of the bars which mark the changed areas are relative to
+the top of the text, i.e.\ the height of the top insertion is not
+included. Therefore it is best to write them just after the top
+insertions before the page text---but to do this we have to change the
+\beginchange
+either the {\sc Plain} {\TeX} macro |\pagecontents| or the {\LaTeX}
+macro |\@makecol|.
+\endchange
+
+Below is the new definition, I have just rearranged it a little bit so
+that it is more legible. The new lines have been marked with
+`|%%%%|'. |\cb_insert_current_bar| inserts a last element in |\cb_bar_list|
+if a changed area is not yet finished, afterwards all bars can be
+written.
+
+\beginprog
+\def\@makecol{%
+ \ifvoid\footins
+ \setbox\@outputbox
+ \vbox{
+ %\typeout{write all bars -- no footins}
+ \cb_insert_current_bar \cb_write_all_bars %%%%
+ \unvbox\@cclv%
+ }
+ \else
+ \setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ %\typeout{write all bars}
+ \cb_insert_current_bar \cb_write_all_bars %%%%
+ \unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins%
+ }
+ \fi%
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}%
+ \global\maxdepth\@maxdepth}
+\endprog
+
+\sect If $|\cb_top_change_pos|=|\maxdimen|$ no change is active. Otherwise
+the current change reaches from the begin mark (|\cb_top_change_pos|) to
+the end of the page, i.e.\ we insert a virtual end mark. Because the
+change continues on the next page we insert a virtual begin mark on the
+top of the page, too.
+
+\beginprog
+\def\cb_insert_current_bar{%
+ \ifdim \cb_top_change_pos=\maxdimen
+ \else%
+ \cb_bot_change_pos=\ht\@cclv
+ \advance\cb_bot_change_pos by \dp\@cclv
+ \xdef\cb_bar_list{\cb_bar_list
+ \cb_bar(\the\cb_top_change_pos,
+ \the\cb_bot_change_pos,
+ \the\changebarwidth)}%
+ \global\cb_top_change_pos=0pt
+ \fi%
+ }
+\endprog
+
+
+\sect Now we can write all bars---if they exist anyway. It's rather
+easy, we just have to define |\cb_bar| to |\cb_write_bar| and execute
+|\cb_bar_list|. The resulting output must not use vertical place. We must
+not forget to delete the list, or we will get the same bars on the next
+page again.
+
+\beginprog
+\newbox\cb_bars
+\newdimen\cb_offset
+
+\def\cb_write_all_bars{%
+ \ifx \cb_bar_list\empty
+ \else % changes exist
+ \ifchbarRight
+ \cb_offset = \hsize
+ \advance \cb_offset by \BarDistance
+ \else
+ \cb_offset = \hoffset
+ \advance \cb_offset by -\BarDistance
+ \fi
+ \setbox\cb_bars=\hbox to \cb_offset{%
+ \hskip\cb_offset
+ \vbox to 0pt{\offinterlineskip
+ \let\cb_bar=\cb_write_bar \cb_bar_list
+ }%
+ \hss
+ }%
+ \ht\cb_bars=0pt \dp\cb_bars=0pt \box\cb_bars
+ \global\let\cb_bar_list=\empty
+ \fi
+ }
+\endprog
+
+
+\beginchange\chap Cleaning Up.\endchange
+
+We finish the macro file so that garbage (e.g.\ of exchanges
+between systems) can come afterwards.
+
+\beginprog
+\catcode`\@=\atcode
+\catcode`\_=\uscode
+
+\endinput
+\endprog
+
+
+
+\end{document}
+
diff --git a/macros/latex209/contrib/chbars/chbars.ltx b/macros/latex209/contrib/chbars/chbars.ltx
new file mode 100644
index 0000000000..42fe8c5378
--- /dev/null
+++ b/macros/latex209/contrib/chbars/chbars.ltx
@@ -0,0 +1,998 @@
+% This is CHBARS.STY as of Aug '92
+% -*-LaTeX-*-
+%---------------------------------------------------------
+% (c) 1989 by J.Schrod. copy conditions see below.
+
+%
+% Macro package for creating changebars in LaTeX.
+% MAKEPROG will ``weave'' this file into documentation that can be LaTeX'ed.
+%
+% documented in LaTeX (for Anne and Chris)
+
+%
+% VERSION HISTORY (MSCF -- most significant change first)
+%
+% DATE PERSON REMARK
+% 92-08-15 -rlb Use change bars in this document to mark major changes;
+% so now you can see for yourself what they are.
+% 92-07-28 -rlb Run through a spelling checker before distributing.
+% 92-01-15 -rlb 1) Keep \maxdeadcycles the same; just
+% don't count calls to output for change processing.
+% 2) Allow setting the change bar width.
+% 3) Some typos and rewording of some of the comments.
+% 4) Allow setting change bar width. Interface copied
+% from changebars.sty
+% 5) Allow changebars to be on the left as well as
+% the right.
+% 6) localize some variables global definitions now
+% start with cb_.
+% 7) Chain onto existing \output routine rather than assume
+% \plainoutput.
+% And miscellaneous minor hacks.
+% 89-10-09 -js converted to LaTeX (progltx)
+% 89-09-25 -js repaired \mark processing in horizontal mode
+% 89-08 -js first version (for EuroTeX89 in Karlsruhe)
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+
+% should be progtex...
+%
+%
+% These TeX macros were documented with the documentation system
+% MAKEPROG and automatically converted to the current form.
+% If you have MAKEPROG available you may transform it back to
+% the original input: Remove every occurence of three percents
+% and one optional blank from the beginning of a line and remove
+% every line which starts with four percents. The following lex
+% program will do this:
+%
+% %%
+%
+% ^%%%\ ? ;
+% ^%%%%.*\n ;
+%
+% MAKEPROG may be obtained over the net from the Bitnet-Listserver
+% LISTSERV@DHDURZ1 (filelist WEBWARE), from tuglib@science.utah.edu,
+% or via ftp from june.cs.washington.edu.
+%
+%
+\documentstyle[progltx,chbars,a4-9]{article}
+
+
+%
+% local macros
+%
+
+\let\mc=\small % for names like GNU
+
+\def\PS{{\sc PostScript}}
+\def\DVI{{\tt DVI}}
+\def\GNU{{\mc GNU}}
+
+\chardef\bs=`\\
+
+%
+
+
+
+\begin{document}
+\tableofcontents
+
+\title{Changebars without {\tt \bs{}special}'s}
+\author{\sc Joachim Schrod}
+
+\newcommand{\changedate}{Aug 15, 1992}
+\date{Revised last on \changedate\footnote{by {\tt rocky@watson.ibm.com}}\\
+ Formatted on \today}
+\maketitle
+
+
+
+\begin{abstract}
+It is common practice to use vertical bars in the margins of a
+document to mark pieces of text which have changed since the last
+version(s) of this document. Such vertical bars are usually
+called {\em changebars}. It has often been said that it is
+impossible to produce changebars with \TeX{} without the usage of
+|\special| commands (driver directives), which extend the
+primitives of \TeX{}. This paper presents a \TeX{} macro file
+which implements changebars without such a usage. The macro file
+is written for the usage with {\sc Plain}~\TeX{} but the implementation
+strategy can be used with \LaTeX{}, too with minor changes.
+
+\end{abstract}
+
+
+
+\chap Introduction.
+
+Changebars are used to mark modified parts in existing documents. For
+the usage in \TeX{} documents, there exist only solutions that use
+driver/printer features by the way of inserting |\special| commands in
+the \TeX{} source, e.g.\ for \PS{} drivers. This results in documents
+that are no longer as freely interchangeable as the \DVI{} concept would
+allow---device dependency is problematic especially for this application
+that is useful for multi-authoring or standards development.
+
+This macro package offers a pure \TeX{} solution. Nevertheless, it has
+its restrictions, too. The page break will no longer be optimal,
+because there is no strechability or shrinkability of a page
+on top of the last
+region of change marked. But this seems to be acceptable,
+especially as the change bar feature often will be used for proof
+reading and not in the final document. This restriction is the reason
+why no change marks can be used on title pages or on similar
+constructions. Changes in floating insertions (footnotes, figures) are
+not handled. Multi-column formats such as a two-column layout
+will not work. There is currently no support for nested changes.
+
+The method for writing a change bar consists of three
+parts: First, the output routine is signalled when the beginning
+or end of a change bar setting command is encountered.
+Next, the position of the changed area is found out
+and fixed; the end-of-change command adds the last change bar
+position, length and width to a list of all such positions,
+lengths and widths of change bars that is accumulated for the current
+page. Finally, when
+the output routine is triggered (either asynchronously in trying
+to ship out the page or synchronously when discovering that the
+end of a change bar lies off the page), this list of change
+bars information is used create vertical rules which are added to the page.
+If the change bar is not complete, a ``virtual'' end change is
+inserted, and a ``virtual'' begin change is inserted at the
+beginning of the next page.
+
+\beginchange
+The demonstrated solution was originally written in {\sc Plain}
+\TeX{}, because it was
+easier and could be presented better at the Euro\TeX89 conference in
+Karlsruhe. An adaptation to \LaTeX{} has been done too which
+requires minor modifications to the \LaTeX's output routine.
+\endchange
+
+Some history. The routines were initially written by Joachim
+Schrod. Around Jan.\ 1992, R.\ Bernstein added some of the features
+coded in |changebars.sty| to combine the best features
+of the two (and added a couple of his own). For example, the
+ability to specify change bar widths, put the change bars either on the
+right or left margin, specifiy the distance from the margin to the
+change bar, and chain to on top of a pre-existing modified
+output routine.
+\beginchange
+Initially, both the {\TeX} and the {\LaTeX}
+versions were put into one file. However, due problems in
+dealing with conditional definition of code, in particular
+problems with an extra or omitted |\fi| in defining or not
+|\ifr@ggedbottom|, the code was split into two.
+\endchange
+
+The |changebars.sty| package
+was written by Michael Fine and revised by Johannes Braams
+and Neil Winton. One or two ideas from Thomas J.~Reid have been
+used.
+
+\chap GNU General Public License.
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the \GNU{} General Public License as
+published by the Free Software Foundation; either version~2, or (at your
+option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+{\bf without any warranty\/}; without even the implied warranty of
+{\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+the \GNU{} General Public License for more details.
+
+You should have received a copy of the \GNU{} General Public License
+along with this program; if not, write to the Free Software Foundation,
+Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+\chap User Interface.
+
+\begin{newsloppy}
+A changed area is described by two marks, |\beginchange| and
+|\endchange|. The |\beginchange| can take an optional argument,
+the bar thickness, enclosed in brackets. That is, either of the
+something like |\beginchange[0.4pt]|, or |\beginchange| is valid.
+In the latter case where no thickness dimension is specified, the value
+of |\changebarwidth| is used. Therefore, by setting this you can
+change the bar thickness used when none is given. Changing the bar
+thickness might be useful in identifying different classes of changes.
+
+Another pair of global values that can be set are the
+logical variables
+{\tt \bs chbar\-Right\-true} and {\tt \bs chbar\-Right\-false}.
+These specify whether
+changebars should be on the right or left. Say, if one wanted to
+have the changebars always appear on the outside margin, one could
+change these accordingly on each page.
+\end{newsloppy}
+
+Finally |\BarDistance| is the amount of place between the text margin
+and the change bars. This value should normally be positive. For
+change bars on the right this value is added to |\hsize|, while
+for change bars on the left this value is {\em subtracted\/} from
+|\hoffset|.
+
+\beginprog
+\newdimen\changebarwidth \changebarwidth=1pt\relax
+\newif\ifchbarRight \chbarRightfalse
+\newdimen\BarDistance \BarDistance=2cc
+
+\endprog
+
+\chap Utility Routines and Programming Conventions.
+
+Before we get into the nitty gritty details, we give some common
+macros.
+
+First, we declare some shorthands for category codes. By
+declaring the at sign~(`|@|') as well as the underscore~`(|_|)' as
+letters we can use them in our macros. (I agree with D.~Knuth that
+|\identifier_several_words_long| is more readable than
+|\IdentifierSeveralWordsLong| and in every case better than |\p@@@s|.)
+\beginchange
+By defining the at sign to be in the letter class,
+we can access {\sc Plain} \TeX's ``private''macros. By defining the
+underscore to be in the letter class, we make our own private macros more
+readable. But since have to
+restore these category codes at the end of this macro file, we store
+\endchange
+their former values in the control sequences |\atcode| and |\uscode|.
+This method is better than to use a group because not all macros have to
+be defined global this way.
+
+All {\em global\/} definitions of the package are prefixed by
+|cb_|. In this way, they can be easily determined. If other
+packages do likewise, it is less likely that definition
+names will clash between packages. (Unless the other package uses the
+|cb_| prefix too, in which case there is a good chance that many
+variable names will clash.)
+
+The {\TeX}book recommends the 255 registers be used for scratch
+space, so routines use this value when a spare register is
+needed. (See for example |\cb_write_bar|.)
+
+
+\beginprog
+\chardef\letter=11
+
+\chardef\atcode=\catcode`\@
+\chardef\uscode=\catcode`\_
+
+\catcode`\@=\letter
+\catcode`\_=\letter
+
+\endprog
+
+\sect Now we are ready to code the top-level routine for indicating the
+beginning of a change. But first we display the banner and
+version number associated with this package. If this package has
+been loaded already we terminate.
+
+Although one can specify a bar
+thickness on the |\beginchange| macro, it is at the |\endchange|
+where this thickness is recorded and put on a current list of
+change bar entries for the current page. It seems more natural to
+specify the thickness at the beginning of the change rather than
+the end. Therefore at the
+|\beginchange| we merely save the value given or save the value of
+|\changebarwidth| if no thickness was given.
+|\cb_changebarwidth| is this saved value. Auxiliary routine
+|\cb_xstart| is used to parse off the optional enclosing
+brackets. (This weird name was taken from one used in |changebars.sty|.)
+
+default value, that is the value when a width is not specified
+is |\changebarwidth|.
+
+\beginprog
+
+\@ifundefined{cb_xstart}{}{\endinput}
+\typeout{Style option `change bars' -- version 1.1a}
+
+\newdimen\cb_changebarwidth
+
+\def\beginchange{\@ifnextchar [
+ {\cb_xstart}
+ {\beginchange_\changebarwidth}}
+\def\cb_xstart[#1]{\beginchange_{#1}}
+
+\endprog
+
+\chap Triggering the Output Routine.
+
+\beginchange
+When a change bar is started or completed, we signal the output
+routine in the ``usual'' way described below. Why bother the
+output routine? The output routine is supposed to be thought of
+as an asynchronous process which has access to the page via the
+contents of box register 255. In theory, if we did not perform
+actions in the output routine, it might get triggered inadvertantly,
+and the output routine might modify this box register on us in the
+midst of our work. The information that needs to be recorded
+is the position of the beginning and end of the lines containing a
+marked change region.
+
+\begin{newsloppy}
+The macros |\beginchange| and |\endchange| signal the output
+routine. Rather than merely calling the output routine directly,
+these routines signal the output routine by setting a low page penalty, i.e.,
+one which tells {\TeX} that this is a really good place to break
+the page. Of course, we will modify the output routine so that it
+doesn't really split the page when it has been called in this fashion.
+Again, the reason we signal the output routine in what seems at
+first a pretty odd way, is that this is the way it is supposed to
+be done. If a low penalty were not set, some
+other action (if we weren't careful) might cause a penalty to be
+set and thus call the output routine (recursively).
+
+So that we can distinguish our calls from others, |\beginchange|
+and |\endchange| reserve a range of
+penalty values; he actual value is stored in |\cb_break_penalty|.
+This range of values is below
+$-10\,000$, the nominal value for indicating that a page should
+occur now. The penalty will be in the range $|\cb_penalty_group|
+\cdot 100 - 99 \ldots |\cb_penalty_group| \cdot 100$.
+The output routine then decides whether it has been called
+to start or end a change bar or neither. This is done with the values
+|\cb_penalty_begin| and |\cb_penalty_end| that are used as the
+second-to-last digit of the change penalty.
+\end{newsloppy}
+
+The output routine also needs to determine whether
+the beginning of change bar starts in horizontal or vertical mode
+so it can figure out the exact placement for the beginning of the
+bar line. In horizontal mode, the change bar does
+not begin at the baseline of the actual text position, but on top of the
+actual line. This is marked in the last digit, an odd digit will be
+used in horizontal mode.
+
+Note that the values mentioned above are used as digits here that can be
+concatenated. If they are not followed by an other digit they should be
+terminated by |\space| to stop {\TeX}'s look-ahead scanning for
+digits when reading a number.
+\endchange
+
+\beginprog
+\def\cb_penalty_group{-101} \def\cb_penalty_begin{0}
+\def\cb_penalty_end{1}
+
+\endprog
+
+
+\sect The calls to start or end a change bar, set an encoded page-break
+penalty which includes an
+indication of begin or end of a change bar. The variable
+|\cb_break_penalty| is used to create such as special value.
+The rest (|\cb_trigger_output|) is the same action
+for both. The region just before the end of the changed region can be
+in horizontal mode and preceded by
+glue that could cause a line break, thus including the following line to
+the change area as well. To avoid this unwanted behavior, the space is
+saved in |\save_lastskip|, discarded in front of the mark and restored
+afterwards.
+
+\beginprog
+\newcount\cb_break_penalty
+
+\def\beginchange_#1{%
+ \cb_changebarwidth=#1
+ \cb_break_penalty=\cb_penalty_group\cb_penalty_begin0
+ \cb_trigger_output
+ }
+\def\endchange{{%
+ \skipdef\save_lastskip=255%
+ \ifhmode \save_lastskip=\lastskip \unskip \fi%
+ \cb_break_penalty=\cb_penalty_group\cb_penalty_end0%
+ \cb_trigger_output%
+ \ifhmode \hskip\save_lastskip \fi%
+ }}%\endchange
+\endprog
+
+
+\sect The next routine, |\cb_trigger_output|,
+triggers calls to the output routine by setting the page-break
+penalty, |\penalty|. {\TeX} may discard an |\output| invocation at
+the beginning of a page. So we trigger the output routine twice, first
+with a special penalty value that is 2~less than the correct value
+(including the code for horizontal or vertical mode). After the first
+page break, it is asserted that the current list is empty. The output
+routine has to save the former page contents if necessary.
+
+Next we set the penalty to the correct value. The second page break does
+the real work, restores the page contents and handles the split
+insertions (footnotes, figures,~\dots).
+
+In horizontal mode |\spacefactor| must not be destroyed, so it is
+saved and restored via local count register |\save_spacefactor|.
+
+\beginprog
+
+\def\cb_trigger_output{%
+ \ifinner \errmessage{Change cannot be marked inside a box}%
+ \else{%
+ \countdef\save_spacefactor=255%
+ \ifvmode
+ \let\do_in_vmode=\relax
+ \advance \cb_break_penalty by -2
+ \else
+ \save_spacefactor=\spacefactor
+ \let\do_in_vmode=\vadjust
+ \advance \cb_break_penalty by -3
+ \fi
+ \do_in_vmode{%
+ \penalty\cb_break_penalty% first call to \output
+ \null
+ \advance \cb_break_penalty by 2
+ \penalty\cb_break_penalty% second call to \output
+ }%
+ \ifhmode \spacefactor=\save_spacefactor \fi
+ }%
+ \fi
+ }% cb_trigger_output
+\endprog
+
+
+\sect Using the output routine for passing
+information has it's difficulties. One of the hard parts is
+\beginchange
+handling page marks. These are token lists which are set by the
+|\mark| command. They record information that can later
+be accessed by the output routine. The canonical example of such
+a use of the |\mark| command is in creating
+\endchange
+dictionary-style entry headings.
+
+The output routine can access one of three
+token lists through three control sequences: |\botmark| is the
+last page mark given, |\topmark| is the |\botmark| of the previous
+page, and |\firstmark| is the first page mark on the actual page or
+|\topmark| if none was given. Here ``page'' is used in the \TeX{}
+sense, i.e.\ as the material which has been collected between two
+|\output| invocations. Of course, the page marks must not be
+destroyed---and that means they must be reinserted after each
+special use of the output routine.
+
+But we are lucky: A ``special use'' consists of two |\output|
+invocations, so we can insert |\topmark| again as a page mark after
+the first invocation where it will be the only page mark on that
+\TeX{} page. The second invocation will automatically transform this
+page mark into the ``last page mark on the previous page,'' i.e.\ in
+|\topmark|---that's what we need! Furthermore |\firstmark| and
+|\botmark| are saved in control sequences during the first invocation,
+they will be inserted again, too.
+
+There's one situation where this approach doesn't work: in front of
+the first page mark. Here, |\topmark|, |\firstmark|, and |\botmark| expand
+to an empty token list. If we save them then and insert their old
+values we have inserted empty page marks. If other page marks follow
+on the same ``real'' page, |\firstmark| will be empty instead of
+expanding to the token list of the first page mark. To prevent this
+we must not save and restore page marks before the first |\mark| has
+been added to the main vertical list.
+
+Well, that can be controlled with a switch---but this switch must be
+set very carefully. If it is set immediately by the first |\mark|
+this may be in horizontal mode and special output invocations can
+occur above this page mark (i.e., there may be a |\beginchange| in the
+same paragraph in front of the |\mark|). Therefore the setting of the
+switch must be delayed until the vertical position of the |\mark|
+(precisely: the position of the |\mark| in the current list) is
+reached. In horizontal mode this can be done with a |\vadjust| and
+the output routine! Voil\`a, this is another command group for the
+output routine with only one command.
+
+\beginprog
+\newif\if_cb_save_mark@ \_cb_save_mark@false
+
+\def\mark_penalty_group{-102}
+\endprog
+
+
+\sect We will redefine |\mark| so that the first page mark either sets
+the switch to true (in vertical mode all possible special page breaks
+are already handled) or forces the |\output| routine to do this at an
+appropriate place. In the last case we can use |\cb_trigger_output|
+again. Afterwards we restore the original meaning of |\mark| again to
+reduce the processing overhead (and the dead cycles).
+
+This change of |\mark| has the consequence that the first |\mark| in a
+document cannot be used anymore in horizontal mode inside a vertical
+box that shall be split afterwards. But this is only sensible if this
+mark shall be used as |\splitfirstmark| because it will almost never
+migrate to the outer list---really a rare case!
+
+\beginprog
+\let\cb_mark=\mark
+\def\mark{%
+ \ifvmode
+ \ifinner \else \global\_cb_save_mark@true \fi % split marks!
+ \else
+ \cb_break_penalty=\mark_penalty_group00 % this will corrupt \vsplit
+ \cb_trigger_output
+ \fi
+ \global\let\mark=\cb_mark
+ \cb_mark
+ }
+\endprog
+
+
+\sect
+\begin{newsloppy}
+If the output routine is triggered with the mark penalty value,
+it will call {\tt \bs cb\_save\discretionary{\_}{}{}page\_marks}.
+\end{newsloppy}
+
+\beginprog
+\def\cb_save_page_marks{% % this may be executed twice
+ \unvbox\@cclv
+ \global\_cb_save_mark@true
+ }
+\endprog
+
+
+\sect To finish the treatment of page marks we can formulate the two
+macros which are used at the first resp.\ second invocation of a
+``special output,'' the principles have already been explained.
+
+\beginprog
+\def\cb_backup_page_marks{%
+ \if_cb_save_mark@
+ \mark{\topmark}%
+ \xdef\cb_save_firstmark{\firstmark}%
+ \xdef\cb_save_botmark{\botmark}%
+ \fi
+ }
+
+\def\cb_restore_page_marks{%
+ \if_cb_save_mark@
+ \mark{\cb_save_firstmark}\mark{\cb_save_botmark}%
+ \fi
+ }
+\endprog
+
+
+
+
+
+\chap Positioning the Change Bars.
+
+\begin{newsloppy}
+Now we handle the positions of the bars.
+The dimension |\cb_bot_change_pos| will hold
+the position of the end of the change bar, i.e.\ the distance between
+top of page the end of the changed area. The dimension
+|\cb_top_change_pos| will hold the beginning of a changed
+area; a value of |\maxdimen| indicates that no change is in effect. If
+a changed area is completed, it is appended to the list |\cb_bar_list| as
+an element {\tt \bs cb\_bar(\bs cb\_top\_change\_pos,
+\bs cb\_bot\_change\_pos, \bs changebar\-width)}. This list contains all
+changed areas within the current page so that bars can be written later
+on. A single bar will be produced by |\cb_write_bar|.
+
+\noindent The definition of |\cb_bar| to |\relax| allows the concatenation
+of new elements to |\cb_bar_list| with |\xdef|.
+
+Local dimension register |\halfwidth| is used to center the change bar.
+\end{newsloppy}
+
+\beginprog
+\newdimen\cb_bot_change_pos
+\newdimen\cb_top_change_pos \cb_top_change_pos=\maxdimen
+
+\let\cb_bar_list=\empty
+
+\let\cb_bar=\relax
+\def\cb_write_bar(#1,#2,#3){{%
+ \dimendef\halfwidth=255%
+ \setbox0=\hbox{\vrule width #3 height -#1 depth #2}%
+ \dp0=0pt \ht0=0pt \wd0=0pt%
+ \halfwidth=#3 \divide\dimen255 by 2%
+ \hskip -\halfwidth%
+ \box0%
+ \hskip \halfwidth%
+ }}
+\endprog
+
+
+\sect If the output routine was activated by a |\outputpenalty| value
+within the range of our reserved penalties, the change handling will
+occur, otherwise standard plain output can be done. There may be
+a lot of interaction between the routines which set change bars and
+the output routine. These interactions should not be recorded in
+|\deadcycles| or else \TeX{} will soon grumble. One might consider
+doing the same for the|\mark_penalty_group|. But since this
+group is called once it shouldn't matter all that much.
+
+One might also consider adding a counter like |\deadcycles| just
+to count the change bar interactions as is done for the calls to
+|\output|, and have {\TeX} grumble if there are ``too many'' of
+them. For now we don't do this---all of this code is correct
+anyway!
+
+First we save away the old output routine in case the user had redefined
+this beforehand.
+
+\beginprog
+\newtoks\cb_oldoutput
+\edef\cb_oldoutput{\the\output}
+
+\newcount\penalty_group
+
+\output={%
+ \boxmaxdepth=\maxdepth
+ \penalty_group=\outputpenalty \divide \penalty_group by 100
+ \ifnum \penalty_group=\cb_penalty_group\space
+ {\countdef\new_deadcycles=255% don't count as a dead cycle
+ \new_deadcycles=\deadcycles
+ \advance \new_deadcycles by -1
+ \deadcycles=\new_deadcycles}
+ \cb_change_handling
+ \else
+ \ifnum \penalty_group=\mark_penalty_group\space
+ \cb_save_page_marks
+ \else \cb_oldoutput
+ \fi
+ \fi
+ }
+\endprog
+
+
+\sect As explained before, the change handling must differentiate
+between the kind of the change command (beginning is indicated by
+$|\cb_change_cmd|=0$, end by~1) and between the mode (horizontal indicated
+by an odd |\cb_change_mode| value, vertical by an even). A change mode
+higher than one indicates that we are doing the first page break that
+has to backup the page as far as it exists already and results in an
+empty current list of page elements.
+
+\beginprog
+\newcount\cb_change_cmd
+\newcount\cb_change_mode
+
+\def\cb_change_handling{%
+ \cb_change_cmd=-\outputpenalty % ==> absolute value
+ \advance \cb_change_cmd by \cb_penalty_group00 % subtraction
+ \cb_change_mode=\cb_change_cmd
+ \divide \cb_change_cmd by 10 % second-to-last digit
+ \advance \cb_change_mode by -\number\cb_change_cmd0 % last digit
+ \ifnum \cb_change_mode>1 \cb_backup_page
+ \else
+ \ifcase \cb_change_cmd \cb_begin_change
+ \or \cb_end_change
+ \else \errmessage{Invalid changepenalty}%
+ \fi
+ \fi
+ }
+\endprog
+
+
+\sect Processing a mark during the second trigger of the output routine
+means restoring the page and storing the positions. At the beginning,
+the begin of the change is saved, at the end, we know the bar already
+and put it into the bar list. Then the positioning values are
+reinitialized.
+
+As within every output invocation, the box 255 must be unboxed. As we
+are here in the second invocation of the output routine the |\box255|
+consists only of the empty |\vbox| we have inserted in
+|\cb_trigger_output|. We can therefore throw it away.
+
+\beginprog
+\def\cb_begin_change{%
+ \cb_restore_page
+ \setbox0=\box\@cclv
+ \ifdim \cb_top_change_pos=\maxdimen
+ \global\cb_top_change_pos=\cb_bot_change_pos
+ \global\cb_bot_change_pos=0pt
+ \else \errmessage{Nested change bars are not supported}%
+ \fi
+ }
+
+\def\cb_end_change{%
+ \cb_restore_page
+ \setbox0=\box\@cclv
+ \ifdim \cb_top_change_pos=\maxdimen
+ \errmessage{No change is in effect}%
+ \else
+ \xdef\cb_bar_list{\cb_bar_list
+ \cb_bar(\the\cb_top_change_pos,\the\cb_bot_change_pos,
+ \the\cb_changebarwidth)}
+ \global\cb_top_change_pos=\maxdimen
+ \global\cb_bot_change_pos=0pt
+ \fi
+ }
+\endprog
+
+
+\chap Handling the Page Contents.
+
+We handle the part of the page that was collected up to now by putting
+it into a box. This fixes the position of the change mark so that
+|\cb_bot_change_pos| can be set and stored in |\cb_top_change_pos|
+later on or as the lower end of a bar in |\cb_bar_list|.
+
+In the first output invocation, we save the contents of the
+page in |\cb_save_page|. Before that, we store the size of the
+box (which equals |\pagegoal|!)\ in |\cb_page_goal|. If the unboxing
+caused an increase of height (i.e.\ if $|\pagetotal|>|\pagegoal|$),
+we eject the page up to the change mark. Now we have to compute the
+current position of our mark in |\cb_bot_change_pos|. It is fixed by the size
+of the |\cb_save_page|, but if the change begins in horizontal mode we
+must decrease it from the baseline position to the top of the last line.
+Finally, we must save the values for the allowed insertions and change
+them to the maximal value so that a rest that is split from an insertion
+will be appended to the insertion box at the second invocation in every
+case.
+
+The |\vsize| is initialized to |\maxdimen|. This allows to control
+whether this first output invocation ocurred or if it was discarded.
+For the same reason |\cb_bot_change_pos| is initialized to~0pt.
+
+\beginprog
+\newbox\cb_save_page
+
+\newdimen\cb_page_goal
+\newdimen\cb_save_vsize \cb_save_vsize=\maxdimen
+\newdimen\cb_save_dimen_topins
+\newdimen\cb_save_dimen_footins
+
+\def\cb_backup_page{%
+ \global\cb_page_goal=\ht\@cclv
+ \global\setbox\cb_save_page=\vbox{\unvbox\@cclv}%
+ \ifdim \ht\cb_save_page>\cb_page_goal
+ \cb_eject_page_so_far \fi
+ \cb_bot_change_pos=\ht\cb_save_page
+ \global\advance \cb_bot_change_pos by \dp\cb_save_page
+ \ifnum \cb_change_cmd=\cb_penalty_begin\space
+ \ifodd \cb_change_mode \higher_change_pos \fi
+ \fi
+ \global\cb_save_vsize=\vsize \global\vsize=\maxdimen
+ \global\cb_save_dimen_footins=\dimen\footins
+ \global\dimen\footins=\maxdimen
+ \cb_backup_page_marks
+ }
+
+\cb_bot_change_pos=0pt
+\endprog
+
+
+\sect To eject a page as far as it is we restore it from the
+|\cb_save_page| back to box~255. In horizontal mode and at a begin mark
+the last line contains the mark and must not be output. So we remove it
+and the preceding glue from the stored rest, just leaving a single hbox
+to be on top of the actual page (in |\cb_save_page|) now. Then normal
+output can be done with box~255.
+
+\beginprog
+\def\cb_eject_page_so_far{%
+ \begingroup
+ \vbadness=20000 % don't complain about underfull vboxes
+ \global\setbox\@cclv=\vbox to \cb_page_goal{%
+ \unvbox\cb_save_page
+ \ifnum \cb_change_cmd=\cb_penalty_begin\space
+ \ifodd \cb_change_mode
+ \global\setbox\cb_save_page=\lastbox
+ \unskip
+ \fi
+ \fi
+ }%
+ \endgroup
+ \cb_oldoutput
+ }
+\endprog
+
+
+\sect
+\begin{newsloppy}
+In horizontal mode and at a begin mark, we need the position of
+the mark ({\tt \bs cb\_bot\discretionary{\_}{}{}change\_pos}) on the upper boundary of
+the last line in
+|\cb_save_page|. If there is just one line left from a recent eject, the
+height is given by |\topskip| decreased by the height of this hbox. If
+the height of the box is larger than |\topskip| the skip will not be
+inserted and the change position results to~0pt. Otherwise,
+|\cb_save_page| is a vbox whose last hbox we delete temporarily using
+box~0. Height and depth of the rest are the actual position on the page.
+\end{newsloppy}
+
+The double of the page we have constructed this way will immediately be
+fed back to the garbage collector because it could have become
+reasonably large.
+
+\beginprog
+\def\higher_change_pos{%
+ \ifhbox \cb_save_page % rest of page from \cb_eject_page_so_far
+ \cb_bot_change_pos=\topskip
+ \global\advance \cb_bot_change_pos by -\ht\cb_save_page
+ \ifdim \cb_bot_change_pos<0pt
+ \global\cb_bot_change_pos=0pt
+ \fi
+ \else
+ \setbox0=\vbox{%
+ \unvcopy\cb_save_page
+ \setbox0=\lastbox % delete last line
+ }%
+ \cb_bot_change_pos=\ht0
+ \global\advance \cb_bot_change_pos by \dp0
+ \setbox0=\box\voidb@x
+ \fi
+ }
+\endprog
+
+
+\sect To restore a page during the second output invocation, we first
+restore the saved values, but only if they were really changed (this can
+be discovered by the value of |\cb_save_vsize|). Now the |\cb_save_page| is
+appended to the current list as a box, which stops later usage of its
+stretch- and shrinkability! Then the collected insertions can be
+inserted again. The page marks have to be inserted, too.
+
+\beginprog
+\def\cb_restore_page{%
+ \ifdim \cb_save_vsize=\maxdimen
+ \else \global\vsize=\cb_save_vsize
+ \global\dimen\footins=\cb_save_dimen_footins
+ \global\cb_save_vsize=\maxdimen
+ \cb_restore_page_marks
+ \fi
+ \box\cb_save_page % discards stretch- and shrinkability!
+ \ifvoid \footins
+ \else \insert\footins{\floatingpenalty=20000 \unvbox\footins}%
+ \fi
+ }
+\endprog
+
+
+\sect {\em Please note, that there is still a problem with this concept
+of handling the output trigger:}
+
+\bigskip
+
+If the first output trigger is discarded because a page break has occurred
+just in front, footnote parts may be juggled around. I.e., if a
+footnote is split in three parts, the first part was just been shipped
+out, the second part is inserted back into the recent contributions by
+the output routine but {\em behind\/} the third part which is saved in
+the ``special place'' (according to the \TeX{}book, p.~125). A solution to
+this problem might be to insert a |\do_change| again within the second
+output trigger and finishing the treatment afterwards. Afterwards a
+full triggering process (two output invocations) is executed again and
+all insertion parts will be accessible in the insertion box.
+
+By the way, the almost same problem appears in \LaTeX{}, too. Almost: in
+\LaTeX{} this can happen every time because at the first output invocation
+the |\dimen|-values of the footnote insertion is not increased. I leave
+the problem open to the reader\,\dots
+
+
+
+
+
+\chap Writing the Stuff.
+
+The positions of the bars which mark the changed areas are relative to
+the top of the text, i.e.\ the height of the top insertion is not
+included. Therefore it is best to write them just after the top
+insertions before the page text---but to do this we have to change the
+\beginchange
+either the {\sc Plain} {\TeX} macro |\pagecontents| or the {\LaTeX}
+macro |\@makecol|.
+\endchange
+
+Below is the new definition, I have just rearranged it a little bit so
+that it is more legible. The new lines have been marked with
+`|%%%%|'. |\cb_insert_current_bar| inserts a last element in |\cb_bar_list|
+if a changed area is not yet finished, afterwards all bars can be
+written.
+
+\beginprog
+\def\@makecol{%
+ \ifvoid\footins
+ \setbox\@outputbox
+ \vbox{
+ %\typeout{write all bars -- no footins}
+ \cb_insert_current_bar \cb_write_all_bars %%%%
+ \unvbox\@cclv%
+ }
+ \else
+ \setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ %\typeout{write all bars}
+ \cb_insert_current_bar \cb_write_all_bars %%%%
+ \unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins%
+ }
+ \fi%
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}%
+ \global\maxdepth\@maxdepth}
+\endprog
+
+\sect If $|\cb_top_change_pos|=|\maxdimen|$ no change is active. Otherwise
+the current change reaches from the begin mark (|\cb_top_change_pos|) to
+the end of the page, i.e.\ we insert a virtual end mark. Because the
+change continues on the next page we insert a virtual begin mark on the
+top of the page, too.
+
+\beginprog
+\def\cb_insert_current_bar{%
+ \ifdim \cb_top_change_pos=\maxdimen
+ \else%
+ \cb_bot_change_pos=\ht\@cclv
+ \advance\cb_bot_change_pos by \dp\@cclv
+ \xdef\cb_bar_list{\cb_bar_list
+ \cb_bar(\the\cb_top_change_pos,
+ \the\cb_bot_change_pos,
+ \the\changebarwidth)}%
+ \global\cb_top_change_pos=0pt
+ \fi%
+ }
+\endprog
+
+
+\sect Now we can write all bars---if they exist anyway. It's rather
+easy, we just have to define |\cb_bar| to |\cb_write_bar| and execute
+|\cb_bar_list|. The resulting output must not use vertical place. We must
+not forget to delete the list, or we will get the same bars on the next
+page again.
+
+\beginprog
+\newbox\cb_bars
+\newdimen\cb_offset
+
+\def\cb_write_all_bars{%
+ \ifx \cb_bar_list\empty
+ \else % changes exist
+ \ifchbarRight
+ \cb_offset = \hsize
+ \advance \cb_offset by \BarDistance
+ \else
+ \cb_offset = \hoffset
+ \advance \cb_offset by -\BarDistance
+ \fi
+ \setbox\cb_bars=\hbox to \cb_offset{%
+ \hskip\cb_offset
+ \vbox to 0pt{\offinterlineskip
+ \let\cb_bar=\cb_write_bar \cb_bar_list
+ }%
+ \hss
+ }%
+ \ht\cb_bars=0pt \dp\cb_bars=0pt \box\cb_bars
+ \global\let\cb_bar_list=\empty
+ \fi
+ }
+\endprog
+
+
+\beginchange\chap Cleaning Up.\endchange
+
+We finish the macro file so that garbage (e.g.\ of exchanges
+between systems) can come afterwards.
+
+\beginprog
+\catcode`\@=\atcode
+\catcode`\_=\uscode
+
+\endinput
+\endprog
+
+
+
+\end{document}
+
diff --git a/macros/latex209/contrib/chbars/chbars.sty b/macros/latex209/contrib/chbars/chbars.sty
new file mode 100644
index 0000000000..245f9e5459
--- /dev/null
+++ b/macros/latex209/contrib/chbars/chbars.sty
@@ -0,0 +1,1000 @@
+% This is CHBARS.STY as of Aug '92
+% -*-LaTeX-*-
+%---------------------------------------------------------
+% (c) 1989 by J.Schrod. copy conditions see below.
+
+%
+% Macro package for creating changebars in LaTeX.
+% MAKEPROG will ``weave'' this file into documentation that can be LaTeX'ed.
+%
+% documented in LaTeX (for Anne and Chris)
+
+%
+% VERSION HISTORY (MSCF -- most significant change first)
+%
+% DATE PERSON REMARK
+% 92-08-15 -rlb Use change bars in this document to mark major changes;
+% so now you can see for yourself what they are.
+% 92-07-28 -rlb Run through a spelling checker before distributing.
+% 92-01-15 -rlb 1) Keep \maxdeadcycles the same; just
+% don't count calls to output for change processing.
+% 2) Allow setting the change bar width.
+% 3) Some typos and rewording of some of the comments.
+% 4) Allow setting change bar width. Interface copied
+% from changebars.sty
+% 5) Allow changebars to be on the left as well as
+% the right.
+% 6) localize some variables global definitions now
+% start with cb_.
+% 7) Chain onto existing \output routine rather than assume
+% \plainoutput.
+% And miscellaneous minor hacks.
+% 89-10-09 -js converted to LaTeX (progltx)
+% 89-09-25 -js repaired \mark processing in horizontal mode
+% 89-08 -js first version (for EuroTeX89 in Karlsruhe)
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+
+% should be progtex...
+%%%%
+%%%%
+%%%% These TeX macros were documented with the documentation system
+%%%% MAKEPROG and automatically converted to the current form.
+%%%% If you have MAKEPROG available you may transform it back to
+%%%% the original input: Remove every occurence of three percents
+%%%% and one optional blank from the beginning of a line and remove
+%%%% every line which starts with four percents. The following lex
+%%%% program will do this:
+%%%%
+%%%% %%
+%%%%
+%%%% ^%%%\ ? ;
+%%%% ^%%%%.*\n ;
+%%%%
+%%%% MAKEPROG may be obtained over the net from the Bitnet-Listserver
+%%%% LISTSERV@DHDURZ1 (filelist WEBWARE), from tuglib@science.utah.edu,
+%%%% or via ftp from june.cs.washington.edu.
+%%%%
+%%%%
+%%% \documentstyle[progltx,chbars,a4-9]{article}
+
+
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % local macros
+%%% %
+
+%%% \let\mc=\small % for names like GNU
+
+%%% \def\PS{{\sc PostScript}}
+%%% \def\DVI{{\tt DVI}}
+%%% \def\GNU{{\mc GNU}}
+
+%%% \chardef\bs=`\\
+
+%%% %
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%% \begin{document}
+%%% \tableofcontents
+
+%%% \title{Changebars without {\tt \bs{}special}'s}
+%%% \author{\sc Joachim Schrod}
+
+%%% \newcommand{\changedate}{Aug 15, 1992}
+%%% \date{Revised last on \changedate\footnote{by {\tt rocky@watson.ibm.com}}\\
+%%% Formatted on \today}
+%%% \maketitle
+
+
+
+%%% \begin{abstract}
+%%% It is common practice to use vertical bars in the margins of a
+%%% document to mark pieces of text which have changed since the last
+%%% version(s) of this document. Such vertical bars are usually
+%%% called {\em changebars}. It has often been said that it is
+%%% impossible to produce changebars with \TeX{} without the usage of
+%%% |\special| commands (driver directives), which extend the
+%%% primitives of \TeX{}. This paper presents a \TeX{} macro file
+%%% which implements changebars without such a usage. The macro file
+%%% is written for the usage with {\sc Plain}~\TeX{} but the implementation
+%%% strategy can be used with \LaTeX{}, too with minor changes.
+
+%%% \end{abstract}
+
+
+
+%%% \chap Introduction.
+
+%%% Changebars are used to mark modified parts in existing documents. For
+%%% the usage in \TeX{} documents, there exist only solutions that use
+%%% driver/printer features by the way of inserting |\special| commands in
+%%% the \TeX{} source, e.g.\ for \PS{} drivers. This results in documents
+%%% that are no longer as freely interchangeable as the \DVI{} concept would
+%%% allow---device dependency is problematic especially for this application
+%%% that is useful for multi-authoring or standards development.
+
+%%% This macro package offers a pure \TeX{} solution. Nevertheless, it has
+%%% its restrictions, too. The page break will no longer be optimal,
+%%% because there is no strechability or shrinkability of a page
+%%% on top of the last
+%%% region of change marked. But this seems to be acceptable,
+%%% especially as the change bar feature often will be used for proof
+%%% reading and not in the final document. This restriction is the reason
+%%% why no change marks can be used on title pages or on similar
+%%% constructions. Changes in floating insertions (footnotes, figures) are
+%%% not handled. Multi-column formats such as a two-column layout
+%%% will not work. There is currently no support for nested changes.
+
+%%% The method for writing a change bar consists of three
+%%% parts: First, the output routine is signalled when the beginning
+%%% or end of a change bar setting command is encountered.
+%%% Next, the position of the changed area is found out
+%%% and fixed; the end-of-change command adds the last change bar
+%%% position, length and width to a list of all such positions,
+%%% lengths and widths of change bars that is accumulated for the current
+%%% page. Finally, when
+%%% the output routine is triggered (either asynchronously in trying
+%%% to ship out the page or synchronously when discovering that the
+%%% end of a change bar lies off the page), this list of change
+%%% bars information is used create vertical rules which are added to the page.
+%%% If the change bar is not complete, a ``virtual'' end change is
+%%% inserted, and a ``virtual'' begin change is inserted at the
+%%% beginning of the next page.
+
+%%% \beginchange
+%%% The demonstrated solution was originally written in {\sc Plain}
+%%% \TeX{}, because it was
+%%% easier and could be presented better at the Euro\TeX89 conference in
+%%% Karlsruhe. An adaptation to \LaTeX{} has been done too which
+%%% requires minor modifications to the \LaTeX's output routine.
+%%% \endchange
+
+%%% Some history. The routines were initially written by Joachim
+%%% Schrod. Around Jan.\ 1992, R.\ Bernstein added some of the features
+%%% coded in |changebars.sty| to combine the best features
+%%% of the two (and added a couple of his own). For example, the
+%%% ability to specify change bar widths, put the change bars either on the
+%%% right or left margin, specifiy the distance from the margin to the
+%%% change bar, and chain to on top of a pre-existing modified
+%%% output routine.
+%%% \beginchange
+%%% Initially, both the {\TeX} and the {\LaTeX}
+%%% versions were put into one file. However, due problems in
+%%% dealing with conditional definition of code, in particular
+%%% problems with an extra or omitted |\fi| in defining or not
+%%% |\ifr@ggedbottom|, the code was split into two.
+%%% \endchange
+%%%
+%%% The |changebars.sty| package
+%%% was written by Michael Fine and revised by Johannes Braams
+%%% and Neil Winton. One or two ideas from Thomas J.~Reid have been
+%%% used.
+
+%%% \chap GNU General Public License.
+
+%%% This program is free software; you can redistribute it and/or
+%%% modify it under the terms of the \GNU{} General Public License as
+%%% published by the Free Software Foundation; either version~2, or (at your
+%%% option) any later version.
+
+%%% This program is distributed in the hope that it will be useful, but
+%%% {\bf without any warranty\/}; without even the implied warranty of
+%%% {\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+%%% the \GNU{} General Public License for more details.
+
+%%% You should have received a copy of the \GNU{} General Public License
+%%% along with this program; if not, write to the Free Software Foundation,
+%%% Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+%%% \chap User Interface.
+
+%%% \begin{newsloppy}
+%%% A changed area is described by two marks, |\beginchange| and
+%%% |\endchange|. The |\beginchange| can take an optional argument,
+%%% the bar thickness, enclosed in brackets. That is, either of the
+%%% something like |\beginchange[0.4pt]|, or |\beginchange| is valid.
+%%% In the latter case where no thickness dimension is specified, the value
+%%% of |\changebarwidth| is used. Therefore, by setting this you can
+%%% change the bar thickness used when none is given. Changing the bar
+%%% thickness might be useful in identifying different classes of changes.
+
+%%% Another pair of global values that can be set are the
+%%% logical variables
+%%% {\tt \bs chbar\-Right\-true} and {\tt \bs chbar\-Right\-false}.
+%%% These specify whether
+%%% changebars should be on the right or left. Say, if one wanted to
+%%% have the changebars always appear on the outside margin, one could
+%%% change these accordingly on each page.
+%%% \end{newsloppy}
+
+%%% Finally |\BarDistance| is the amount of place between the text margin
+%%% and the change bars. This value should normally be positive. For
+%%% change bars on the right this value is added to |\hsize|, while
+%%% for change bars on the left this value is {\em subtracted\/} from
+%%% |\hoffset|.
+
+%%% \beginprog
+\newdimen\changebarwidth \changebarwidth=1pt\relax
+\newif\ifchbarRight \chbarRightfalse
+\newdimen\BarDistance \BarDistance=2cc
+
+%%% \endprog
+
+%%% \chap Utility Routines and Programming Conventions.
+
+%%% Before we get into the nitty gritty details, we give some common
+%%% macros.
+%%%
+%%% First, we declare some shorthands for category codes. By
+%%% declaring the at sign~(`|@|') as well as the underscore~`(|_|)' as
+%%% letters we can use them in our macros. (I agree with D.~Knuth that
+%%% |\identifier_several_words_long| is more readable than
+%%% |\IdentifierSeveralWordsLong| and in every case better than |\p@@@s|.)
+%%% \beginchange
+%%% By defining the at sign to be in the letter class,
+%%% we can access {\sc Plain} \TeX's ``private''macros. By defining the
+%%% underscore to be in the letter class, we make our own private macros more
+%%% readable. But since have to
+%%% restore these category codes at the end of this macro file, we store
+%%% \endchange
+%%% their former values in the control sequences |\atcode| and |\uscode|.
+%%% This method is better than to use a group because not all macros have to
+%%% be defined global this way.
+%%%
+%%% All {\em global\/} definitions of the package are prefixed by
+%%% |cb_|. In this way, they can be easily determined. If other
+%%% packages do likewise, it is less likely that definition
+%%% names will clash between packages. (Unless the other package uses the
+%%% |cb_| prefix too, in which case there is a good chance that many
+%%% variable names will clash.)
+%%%
+%%% The {\TeX}book recommends the 255 registers be used for scratch
+%%% space, so routines use this value when a spare register is
+%%% needed. (See for example |\cb_write_bar|.)
+%%%
+
+%%% \beginprog
+\chardef\letter=11
+
+\chardef\atcode=\catcode`\@
+\chardef\uscode=\catcode`\_
+
+\catcode`\@=\letter
+\catcode`\_=\letter
+
+%%% \endprog
+
+%%% \sect Now we are ready to code the top-level routine for indicating the
+%%% beginning of a change. But first we display the banner and
+%%% version number associated with this package. If this package has
+%%% been loaded already we terminate.
+%%%
+%%% Although one can specify a bar
+%%% thickness on the |\beginchange| macro, it is at the |\endchange|
+%%% where this thickness is recorded and put on a current list of
+%%% change bar entries for the current page. It seems more natural to
+%%% specify the thickness at the beginning of the change rather than
+%%% the end. Therefore at the
+%%% |\beginchange| we merely save the value given or save the value of
+%%% |\changebarwidth| if no thickness was given.
+%%% |\cb_changebarwidth| is this saved value. Auxiliary routine
+%%% |\cb_xstart| is used to parse off the optional enclosing
+%%% brackets. (This weird name was taken from one used in |changebars.sty|.)
+
+%%% default value, that is the value when a width is not specified
+%%% is |\changebarwidth|.
+
+%%% \beginprog
+
+\@ifundefined{cb_xstart}{}{\endinput}
+\typeout{Style option `change bars' -- version 1.1a}
+
+\newdimen\cb_changebarwidth
+
+\def\beginchange{\@ifnextchar [
+ {\cb_xstart}
+ {\beginchange_\changebarwidth}}
+\def\cb_xstart[#1]{\beginchange_{#1}}
+
+%%% \endprog
+
+%%% \chap Triggering the Output Routine.
+
+%%% \beginchange
+%%% When a change bar is started or completed, we signal the output
+%%% routine in the ``usual'' way described below. Why bother the
+%%% output routine? The output routine is supposed to be thought of
+%%% as an asynchronous process which has access to the page via the
+%%% contents of box register 255. In theory, if we did not perform
+%%% actions in the output routine, it might get triggered inadvertantly,
+%%% and the output routine might modify this box register on us in the
+%%% midst of our work. The information that needs to be recorded
+%%% is the position of the beginning and end of the lines containing a
+%%% marked change region.
+
+%%% \begin{newsloppy}
+%%% The macros |\beginchange| and |\endchange| signal the output
+%%% routine. Rather than merely calling the output routine directly,
+%%% these routines signal the output routine by setting a low page penalty, i.e.,
+%%% one which tells {\TeX} that this is a really good place to break
+%%% the page. Of course, we will modify the output routine so that it
+%%% doesn't really split the page when it has been called in this fashion.
+%%% Again, the reason we signal the output routine in what seems at
+%%% first a pretty odd way, is that this is the way it is supposed to
+%%% be done. If a low penalty were not set, some
+%%% other action (if we weren't careful) might cause a penalty to be
+%%% set and thus call the output routine (recursively).
+
+%%% So that we can distinguish our calls from others, |\beginchange|
+%%% and |\endchange| reserve a range of
+%%% penalty values; he actual value is stored in |\cb_break_penalty|.
+%%% This range of values is below
+%%% $-10\,000$, the nominal value for indicating that a page should
+%%% occur now. The penalty will be in the range $|\cb_penalty_group|
+%%% \cdot 100 - 99 \ldots |\cb_penalty_group| \cdot 100$.
+%%% The output routine then decides whether it has been called
+%%% to start or end a change bar or neither. This is done with the values
+%%% |\cb_penalty_begin| and |\cb_penalty_end| that are used as the
+%%% second-to-last digit of the change penalty.
+%%% \end{newsloppy}
+
+%%% The output routine also needs to determine whether
+%%% the beginning of change bar starts in horizontal or vertical mode
+%%% so it can figure out the exact placement for the beginning of the
+%%% bar line. In horizontal mode, the change bar does
+%%% not begin at the baseline of the actual text position, but on top of the
+%%% actual line. This is marked in the last digit, an odd digit will be
+%%% used in horizontal mode.
+
+%%% Note that the values mentioned above are used as digits here that can be
+%%% concatenated. If they are not followed by an other digit they should be
+%%% terminated by |\space| to stop {\TeX}'s look-ahead scanning for
+%%% digits when reading a number.
+%%% \endchange
+
+%%% \beginprog
+\def\cb_penalty_group{-101} \def\cb_penalty_begin{0}
+\def\cb_penalty_end{1}
+
+%%% \endprog
+
+
+%%% \sect The calls to start or end a change bar, set an encoded page-break
+%%% penalty which includes an
+%%% indication of begin or end of a change bar. The variable
+%%% |\cb_break_penalty| is used to create such as special value.
+%%% The rest (|\cb_trigger_output|) is the same action
+%%% for both. The region just before the end of the changed region can be
+%%% in horizontal mode and preceded by
+%%% glue that could cause a line break, thus including the following line to
+%%% the change area as well. To avoid this unwanted behavior, the space is
+%%% saved in |\save_lastskip|, discarded in front of the mark and restored
+%%% afterwards.
+
+%%% \beginprog
+\newcount\cb_break_penalty
+
+\def\beginchange_#1{%
+ \cb_changebarwidth=#1
+ \cb_break_penalty=\cb_penalty_group\cb_penalty_begin0
+ \cb_trigger_output
+ }
+\def\endchange{{%
+ \skipdef\save_lastskip=255%
+ \ifhmode \save_lastskip=\lastskip \unskip \fi%
+ \cb_break_penalty=\cb_penalty_group\cb_penalty_end0%
+ \cb_trigger_output%
+ \ifhmode \hskip\save_lastskip \fi%
+ }}%\endchange
+%%% \endprog
+
+
+%%% \sect The next routine, |\cb_trigger_output|,
+%%% triggers calls to the output routine by setting the page-break
+%%% penalty, |\penalty|. {\TeX} may discard an |\output| invocation at
+%%% the beginning of a page. So we trigger the output routine twice, first
+%%% with a special penalty value that is 2~less than the correct value
+%%% (including the code for horizontal or vertical mode). After the first
+%%% page break, it is asserted that the current list is empty. The output
+%%% routine has to save the former page contents if necessary.
+
+%%% Next we set the penalty to the correct value. The second page break does
+%%% the real work, restores the page contents and handles the split
+%%% insertions (footnotes, figures,~\dots).
+
+%%% In horizontal mode |\spacefactor| must not be destroyed, so it is
+%%% saved and restored via local count register |\save_spacefactor|.
+
+%%% \beginprog
+
+\def\cb_trigger_output{%
+ \ifinner \errmessage{Change cannot be marked inside a box}%
+ \else{%
+ \countdef\save_spacefactor=255%
+ \ifvmode
+ \let\do_in_vmode=\relax
+ \advance \cb_break_penalty by -2
+ \else
+ \save_spacefactor=\spacefactor
+ \let\do_in_vmode=\vadjust
+ \advance \cb_break_penalty by -3
+ \fi
+ \do_in_vmode{%
+ \penalty\cb_break_penalty% first call to \output
+ \null
+ \advance \cb_break_penalty by 2
+ \penalty\cb_break_penalty% second call to \output
+ }%
+ \ifhmode \spacefactor=\save_spacefactor \fi
+ }%
+ \fi
+ }% cb_trigger_output
+%%% \endprog
+
+
+%%% \sect Using the output routine for passing
+%%% information has it's difficulties. One of the hard parts is
+%%% \beginchange
+%%% handling page marks. These are token lists which are set by the
+%%% |\mark| command. They record information that can later
+%%% be accessed by the output routine. The canonical example of such
+%%% a use of the |\mark| command is in creating
+%%% \endchange
+%%% dictionary-style entry headings.
+%%%
+%%% The output routine can access one of three
+%%% token lists through three control sequences: |\botmark| is the
+%%% last page mark given, |\topmark| is the |\botmark| of the previous
+%%% page, and |\firstmark| is the first page mark on the actual page or
+%%% |\topmark| if none was given. Here ``page'' is used in the \TeX{}
+%%% sense, i.e.\ as the material which has been collected between two
+%%% |\output| invocations. Of course, the page marks must not be
+%%% destroyed---and that means they must be reinserted after each
+%%% special use of the output routine.
+
+%%% But we are lucky: A ``special use'' consists of two |\output|
+%%% invocations, so we can insert |\topmark| again as a page mark after
+%%% the first invocation where it will be the only page mark on that
+%%% \TeX{} page. The second invocation will automatically transform this
+%%% page mark into the ``last page mark on the previous page,'' i.e.\ in
+%%% |\topmark|---that's what we need! Furthermore |\firstmark| and
+%%% |\botmark| are saved in control sequences during the first invocation,
+%%% they will be inserted again, too.
+
+%%% There's one situation where this approach doesn't work: in front of
+%%% the first page mark. Here, |\topmark|, |\firstmark|, and |\botmark| expand
+%%% to an empty token list. If we save them then and insert their old
+%%% values we have inserted empty page marks. If other page marks follow
+%%% on the same ``real'' page, |\firstmark| will be empty instead of
+%%% expanding to the token list of the first page mark. To prevent this
+%%% we must not save and restore page marks before the first |\mark| has
+%%% been added to the main vertical list.
+
+%%% Well, that can be controlled with a switch---but this switch must be
+%%% set very carefully. If it is set immediately by the first |\mark|
+%%% this may be in horizontal mode and special output invocations can
+%%% occur above this page mark (i.e., there may be a |\beginchange| in the
+%%% same paragraph in front of the |\mark|). Therefore the setting of the
+%%% switch must be delayed until the vertical position of the |\mark|
+%%% (precisely: the position of the |\mark| in the current list) is
+%%% reached. In horizontal mode this can be done with a |\vadjust| and
+%%% the output routine! Voil\`a, this is another command group for the
+%%% output routine with only one command.
+
+%%% \beginprog
+\newif\if_cb_save_mark@ \_cb_save_mark@false
+
+\def\mark_penalty_group{-102}
+%%% \endprog
+
+
+%%% \sect We will redefine |\mark| so that the first page mark either sets
+%%% the switch to true (in vertical mode all possible special page breaks
+%%% are already handled) or forces the |\output| routine to do this at an
+%%% appropriate place. In the last case we can use |\cb_trigger_output|
+%%% again. Afterwards we restore the original meaning of |\mark| again to
+%%% reduce the processing overhead (and the dead cycles).
+
+%%% This change of |\mark| has the consequence that the first |\mark| in a
+%%% document cannot be used anymore in horizontal mode inside a vertical
+%%% box that shall be split afterwards. But this is only sensible if this
+%%% mark shall be used as |\splitfirstmark| because it will almost never
+%%% migrate to the outer list---really a rare case!
+
+%%% \beginprog
+\let\cb_mark=\mark
+\def\mark{%
+ \ifvmode
+ \ifinner \else \global\_cb_save_mark@true \fi % split marks!
+ \else
+ \cb_break_penalty=\mark_penalty_group00 % this will corrupt \vsplit
+ \cb_trigger_output
+ \fi
+ \global\let\mark=\cb_mark
+ \cb_mark
+ }
+%%% \endprog
+
+
+%%% \sect
+%%% \begin{newsloppy}
+%%% If the output routine is triggered with the mark penalty value,
+%%% it will call {\tt \bs cb\_save\discretionary{\_}{}{}page\_marks}.
+%%% \end{newsloppy}
+
+%%% \beginprog
+\def\cb_save_page_marks{% % this may be executed twice
+ \unvbox\@cclv
+ \global\_cb_save_mark@true
+ }
+%%% \endprog
+
+
+%%% \sect To finish the treatment of page marks we can formulate the two
+%%% macros which are used at the first resp.\ second invocation of a
+%%% ``special output,'' the principles have already been explained.
+
+%%% \beginprog
+\def\cb_backup_page_marks{%
+ \if_cb_save_mark@
+ \mark{\topmark}%
+ \xdef\cb_save_firstmark{\firstmark}%
+ \xdef\cb_save_botmark{\botmark}%
+ \fi
+ }
+
+\def\cb_restore_page_marks{%
+ \if_cb_save_mark@
+ \mark{\cb_save_firstmark}\mark{\cb_save_botmark}%
+ \fi
+ }
+%%% \endprog
+
+
+
+
+
+%%% \chap Positioning the Change Bars.
+
+%%% \begin{newsloppy}
+%%% Now we handle the positions of the bars.
+%%% The dimension |\cb_bot_change_pos| will hold
+%%% the position of the end of the change bar, i.e.\ the distance between
+%%% top of page the end of the changed area. The dimension
+%%% |\cb_top_change_pos| will hold the beginning of a changed
+%%% area; a value of |\maxdimen| indicates that no change is in effect. If
+%%% a changed area is completed, it is appended to the list |\cb_bar_list| as
+%%% an element {\tt \bs cb\_bar(\bs cb\_top\_change\_pos,
+%%% \bs cb\_bot\_change\_pos, \bs changebar\-width)}. This list contains all
+%%% changed areas within the current page so that bars can be written later
+%%% on. A single bar will be produced by |\cb_write_bar|.
+
+%%% \noindent The definition of |\cb_bar| to |\relax| allows the concatenation
+%%% of new elements to |\cb_bar_list| with |\xdef|.
+
+%%% Local dimension register |\halfwidth| is used to center the change bar.
+%%% \end{newsloppy}
+
+%%% \beginprog
+\newdimen\cb_bot_change_pos
+\newdimen\cb_top_change_pos \cb_top_change_pos=\maxdimen
+
+\let\cb_bar_list=\empty
+
+\let\cb_bar=\relax
+\def\cb_write_bar(#1,#2,#3){{%
+ \dimendef\halfwidth=255%
+ \setbox0=\hbox{\vrule width #3 height -#1 depth #2}%
+ \dp0=0pt \ht0=0pt \wd0=0pt%
+ \halfwidth=#3 \divide\dimen255 by 2%
+ \hskip -\halfwidth%
+ \box0%
+ \hskip \halfwidth%
+ }}
+%%% \endprog
+
+
+%%% \sect If the output routine was activated by a |\outputpenalty| value
+%%% within the range of our reserved penalties, the change handling will
+%%% occur, otherwise standard plain output can be done. There may be
+%%% a lot of interaction between the routines which set change bars and
+%%% the output routine. These interactions should not be recorded in
+%%% |\deadcycles| or else \TeX{} will soon grumble. One might consider
+%%% doing the same for the|\mark_penalty_group|. But since this
+%%% group is called once it shouldn't matter all that much.
+
+%%% One might also consider adding a counter like |\deadcycles| just
+%%% to count the change bar interactions as is done for the calls to
+%%% |\output|, and have {\TeX} grumble if there are ``too many'' of
+%%% them. For now we don't do this---all of this code is correct
+%%% anyway!
+
+%%% First we save away the old output routine in case the user had redefined
+%%% this beforehand.
+
+%%% \beginprog
+\newtoks\cb_oldoutput
+\edef\cb_oldoutput{\the\output}
+
+\newcount\penalty_group
+
+\output={%
+ \boxmaxdepth=\maxdepth
+ \penalty_group=\outputpenalty \divide \penalty_group by 100
+ \ifnum \penalty_group=\cb_penalty_group\space
+ {\countdef\new_deadcycles=255% don't count as a dead cycle
+ \new_deadcycles=\deadcycles
+ \advance \new_deadcycles by -1
+ \deadcycles=\new_deadcycles}
+ \cb_change_handling
+ \else
+ \ifnum \penalty_group=\mark_penalty_group\space
+ \cb_save_page_marks
+ \else \cb_oldoutput
+ \fi
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect As explained before, the change handling must differentiate
+%%% between the kind of the change command (beginning is indicated by
+%%% $|\cb_change_cmd|=0$, end by~1) and between the mode (horizontal indicated
+%%% by an odd |\cb_change_mode| value, vertical by an even). A change mode
+%%% higher than one indicates that we are doing the first page break that
+%%% has to backup the page as far as it exists already and results in an
+%%% empty current list of page elements.
+
+%%% \beginprog
+\newcount\cb_change_cmd
+\newcount\cb_change_mode
+
+\def\cb_change_handling{%
+ \cb_change_cmd=-\outputpenalty % ==> absolute value
+ \advance \cb_change_cmd by \cb_penalty_group00 % subtraction
+ \cb_change_mode=\cb_change_cmd
+ \divide \cb_change_cmd by 10 % second-to-last digit
+ \advance \cb_change_mode by -\number\cb_change_cmd0 % last digit
+ \ifnum \cb_change_mode>1 \cb_backup_page
+ \else
+ \ifcase \cb_change_cmd \cb_begin_change
+ \or \cb_end_change
+ \else \errmessage{Invalid changepenalty}%
+ \fi
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect Processing a mark during the second trigger of the output routine
+%%% means restoring the page and storing the positions. At the beginning,
+%%% the begin of the change is saved, at the end, we know the bar already
+%%% and put it into the bar list. Then the positioning values are
+%%% reinitialized.
+
+%%% As within every output invocation, the box 255 must be unboxed. As we
+%%% are here in the second invocation of the output routine the |\box255|
+%%% consists only of the empty |\vbox| we have inserted in
+%%% |\cb_trigger_output|. We can therefore throw it away.
+
+%%% \beginprog
+\def\cb_begin_change{%
+ \cb_restore_page
+ \setbox0=\box\@cclv
+ \ifdim \cb_top_change_pos=\maxdimen
+ \global\cb_top_change_pos=\cb_bot_change_pos
+ \global\cb_bot_change_pos=0pt
+ \else \errmessage{Nested change bars are not supported}%
+ \fi
+ }
+
+\def\cb_end_change{%
+ \cb_restore_page
+ \setbox0=\box\@cclv
+ \ifdim \cb_top_change_pos=\maxdimen
+ \errmessage{No change is in effect}%
+ \else
+ \xdef\cb_bar_list{\cb_bar_list
+ \cb_bar(\the\cb_top_change_pos,\the\cb_bot_change_pos,
+ \the\cb_changebarwidth)}
+ \global\cb_top_change_pos=\maxdimen
+ \global\cb_bot_change_pos=0pt
+ \fi
+ }
+%%% \endprog
+
+
+%%% \chap Handling the Page Contents.
+
+%%% We handle the part of the page that was collected up to now by putting
+%%% it into a box. This fixes the position of the change mark so that
+%%% |\cb_bot_change_pos| can be set and stored in |\cb_top_change_pos|
+%%% later on or as the lower end of a bar in |\cb_bar_list|.
+
+%%% In the first output invocation, we save the contents of the
+%%% page in |\cb_save_page|. Before that, we store the size of the
+%%% box (which equals |\pagegoal|!)\ in |\cb_page_goal|. If the unboxing
+%%% caused an increase of height (i.e.\ if $|\pagetotal|>|\pagegoal|$),
+%%% we eject the page up to the change mark. Now we have to compute the
+%%% current position of our mark in |\cb_bot_change_pos|. It is fixed by the size
+%%% of the |\cb_save_page|, but if the change begins in horizontal mode we
+%%% must decrease it from the baseline position to the top of the last line.
+%%% Finally, we must save the values for the allowed insertions and change
+%%% them to the maximal value so that a rest that is split from an insertion
+%%% will be appended to the insertion box at the second invocation in every
+%%% case.
+
+%%% The |\vsize| is initialized to |\maxdimen|. This allows to control
+%%% whether this first output invocation ocurred or if it was discarded.
+%%% For the same reason |\cb_bot_change_pos| is initialized to~0pt.
+
+%%% \beginprog
+\newbox\cb_save_page
+
+\newdimen\cb_page_goal
+\newdimen\cb_save_vsize \cb_save_vsize=\maxdimen
+\newdimen\cb_save_dimen_topins
+\newdimen\cb_save_dimen_footins
+
+\def\cb_backup_page{%
+ \global\cb_page_goal=\ht\@cclv
+ \global\setbox\cb_save_page=\vbox{\unvbox\@cclv}%
+ \ifdim \ht\cb_save_page>\cb_page_goal
+ \cb_eject_page_so_far \fi
+ \cb_bot_change_pos=\ht\cb_save_page
+ \global\advance \cb_bot_change_pos by \dp\cb_save_page
+ \ifnum \cb_change_cmd=\cb_penalty_begin\space
+ \ifodd \cb_change_mode \higher_change_pos \fi
+ \fi
+ \global\cb_save_vsize=\vsize \global\vsize=\maxdimen
+ \global\cb_save_dimen_footins=\dimen\footins
+ \global\dimen\footins=\maxdimen
+ \cb_backup_page_marks
+ }
+
+\cb_bot_change_pos=0pt
+%%% \endprog
+
+
+%%% \sect To eject a page as far as it is we restore it from the
+%%% |\cb_save_page| back to box~255. In horizontal mode and at a begin mark
+%%% the last line contains the mark and must not be output. So we remove it
+%%% and the preceding glue from the stored rest, just leaving a single hbox
+%%% to be on top of the actual page (in |\cb_save_page|) now. Then normal
+%%% output can be done with box~255.
+
+%%% \beginprog
+\def\cb_eject_page_so_far{%
+ \begingroup
+ \vbadness=20000 % don't complain about underfull vboxes
+ \global\setbox\@cclv=\vbox to \cb_page_goal{%
+ \unvbox\cb_save_page
+ \ifnum \cb_change_cmd=\cb_penalty_begin\space
+ \ifodd \cb_change_mode
+ \global\setbox\cb_save_page=\lastbox
+ \unskip
+ \fi
+ \fi
+ }%
+ \endgroup
+ \cb_oldoutput
+ }
+%%% \endprog
+
+
+%%% \sect
+%%% \begin{newsloppy}
+%%% In horizontal mode and at a begin mark, we need the position of
+%%% the mark ({\tt \bs cb\_bot\discretionary{\_}{}{}change\_pos}) on the upper boundary of
+%%% the last line in
+%%% |\cb_save_page|. If there is just one line left from a recent eject, the
+%%% height is given by |\topskip| decreased by the height of this hbox. If
+%%% the height of the box is larger than |\topskip| the skip will not be
+%%% inserted and the change position results to~0pt. Otherwise,
+%%% |\cb_save_page| is a vbox whose last hbox we delete temporarily using
+%%% box~0. Height and depth of the rest are the actual position on the page.
+%%% \end{newsloppy}
+
+%%% The double of the page we have constructed this way will immediately be
+%%% fed back to the garbage collector because it could have become
+%%% reasonably large.
+
+%%% \beginprog
+\def\higher_change_pos{%
+ \ifhbox \cb_save_page % rest of page from \cb_eject_page_so_far
+ \cb_bot_change_pos=\topskip
+ \global\advance \cb_bot_change_pos by -\ht\cb_save_page
+ \ifdim \cb_bot_change_pos<0pt
+ \global\cb_bot_change_pos=0pt
+ \fi
+ \else
+ \setbox0=\vbox{%
+ \unvcopy\cb_save_page
+ \setbox0=\lastbox % delete last line
+ }%
+ \cb_bot_change_pos=\ht0
+ \global\advance \cb_bot_change_pos by \dp0
+ \setbox0=\box\voidb@x
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect To restore a page during the second output invocation, we first
+%%% restore the saved values, but only if they were really changed (this can
+%%% be discovered by the value of |\cb_save_vsize|). Now the |\cb_save_page| is
+%%% appended to the current list as a box, which stops later usage of its
+%%% stretch- and shrinkability! Then the collected insertions can be
+%%% inserted again. The page marks have to be inserted, too.
+
+%%% \beginprog
+\def\cb_restore_page{%
+ \ifdim \cb_save_vsize=\maxdimen
+ \else \global\vsize=\cb_save_vsize
+ \global\dimen\footins=\cb_save_dimen_footins
+ \global\cb_save_vsize=\maxdimen
+ \cb_restore_page_marks
+ \fi
+ \box\cb_save_page % discards stretch- and shrinkability!
+ \ifvoid \footins
+ \else \insert\footins{\floatingpenalty=20000 \unvbox\footins}%
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect {\em Please note, that there is still a problem with this concept
+%%% of handling the output trigger:}
+
+%%% \bigskip
+
+%%% If the first output trigger is discarded because a page break has occurred
+%%% just in front, footnote parts may be juggled around. I.e., if a
+%%% footnote is split in three parts, the first part was just been shipped
+%%% out, the second part is inserted back into the recent contributions by
+%%% the output routine but {\em behind\/} the third part which is saved in
+%%% the ``special place'' (according to the \TeX{}book, p.~125). A solution to
+%%% this problem might be to insert a |\do_change| again within the second
+%%% output trigger and finishing the treatment afterwards. Afterwards a
+%%% full triggering process (two output invocations) is executed again and
+%%% all insertion parts will be accessible in the insertion box.
+
+%%% By the way, the almost same problem appears in \LaTeX{}, too. Almost: in
+%%% \LaTeX{} this can happen every time because at the first output invocation
+%%% the |\dimen|-values of the footnote insertion is not increased. I leave
+%%% the problem open to the reader\,\dots
+
+
+
+
+
+%%% \chap Writing the Stuff.
+
+%%% The positions of the bars which mark the changed areas are relative to
+%%% the top of the text, i.e.\ the height of the top insertion is not
+%%% included. Therefore it is best to write them just after the top
+%%% insertions before the page text---but to do this we have to change the
+%%% \beginchange
+%%% either the {\sc Plain} {\TeX} macro |\pagecontents| or the {\LaTeX}
+%%% macro |\@makecol|.
+%%% \endchange
+
+%%% Below is the new definition, I have just rearranged it a little bit so
+%%% that it is more legible. The new lines have been marked with
+%%% `|%%%%|'. |\cb_insert_current_bar| inserts a last element in |\cb_bar_list|
+%%% if a changed area is not yet finished, afterwards all bars can be
+%%% written.
+
+%%% \beginprog
+\def\@makecol{%
+ \ifvoid\footins
+ \setbox\@outputbox
+ \vbox{
+ %\typeout{write all bars -- no footins}
+ \cb_insert_current_bar \cb_write_all_bars %%%%
+ \unvbox\@cclv%
+ }
+ \else
+ \setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ %\typeout{write all bars}
+ \cb_insert_current_bar \cb_write_all_bars %%%%
+ \unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins%
+ }
+ \fi%
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}%
+ \global\maxdepth\@maxdepth}
+%%% \endprog
+
+%%% \sect If $|\cb_top_change_pos|=|\maxdimen|$ no change is active. Otherwise
+%%% the current change reaches from the begin mark (|\cb_top_change_pos|) to
+%%% the end of the page, i.e.\ we insert a virtual end mark. Because the
+%%% change continues on the next page we insert a virtual begin mark on the
+%%% top of the page, too.
+
+%%% \beginprog
+\def\cb_insert_current_bar{%
+ \ifdim \cb_top_change_pos=\maxdimen
+ \else%
+ \cb_bot_change_pos=\ht\@cclv
+ \advance\cb_bot_change_pos by \dp\@cclv
+ \xdef\cb_bar_list{\cb_bar_list
+ \cb_bar(\the\cb_top_change_pos,
+ \the\cb_bot_change_pos,
+ \the\changebarwidth)}%
+ \global\cb_top_change_pos=0pt
+ \fi%
+ }
+%%% \endprog
+
+
+%%% \sect Now we can write all bars---if they exist anyway. It's rather
+%%% easy, we just have to define |\cb_bar| to |\cb_write_bar| and execute
+%%% |\cb_bar_list|. The resulting output must not use vertical place. We must
+%%% not forget to delete the list, or we will get the same bars on the next
+%%% page again.
+
+%%% \beginprog
+\newbox\cb_bars
+\newdimen\cb_offset
+
+\def\cb_write_all_bars{%
+ \ifx \cb_bar_list\empty
+ \else % changes exist
+ \ifchbarRight
+ \cb_offset = \hsize
+ \advance \cb_offset by \BarDistance
+ \else
+ \cb_offset = \hoffset
+ \advance \cb_offset by -\BarDistance
+ \fi
+ \setbox\cb_bars=\hbox to \cb_offset{%
+ \hskip\cb_offset
+ \vbox to 0pt{\offinterlineskip
+ \let\cb_bar=\cb_write_bar \cb_bar_list
+ }%
+ \hss
+ }%
+ \ht\cb_bars=0pt \dp\cb_bars=0pt \box\cb_bars
+ \global\let\cb_bar_list=\empty
+ \fi
+ }
+%%% \endprog
+
+
+%%% \beginchange\chap Cleaning Up.\endchange
+
+%%% We finish the macro file so that garbage (e.g.\ of exchanges
+%%% between systems) can come afterwards.
+
+%%% \beginprog
+\catcode`\@=\atcode
+\catcode`\_=\uscode
+
+\endinput
+%%% \endprog
+
+
+
+%%% \end{document}
+
diff --git a/macros/latex209/contrib/chbars/chbars.tex b/macros/latex209/contrib/chbars/chbars.tex
new file mode 100644
index 0000000000..07b6d7d056
--- /dev/null
+++ b/macros/latex209/contrib/chbars/chbars.tex
@@ -0,0 +1,1067 @@
+% This is CHBARS.TEX as of Aug '92
+% -*-TeX-*-
+%---------------------------------------------------------
+% (c) 1989 by J.Schrod. copy conditions see below.
+
+%
+% Macro package for creating changebars in LaTeX.
+% MAKEPROG will ``weave'' this file into documentation that can be LaTeX'ed.
+%
+% documented in LaTeX (for Anne and Chris)
+
+%
+% VERSION HISTORY (MSCF -- most significant change first)
+%
+% DATE PERSON REMARK
+% 92-08-15 -rlb Use change bars in this document to mark major changes;
+% so now you can see for yourself what they are.
+% 92-07-28 -rlb Run through a spelling checker before distributing.
+% 92-01-15 -rlb 1) Keep \maxdeadcycles the same; just
+% don't count calls to output for change processing.
+% 2) Allow setting the change bar width.
+% 3) Some typos and rewording of some of the comments.
+% 4) Allow setting change bar width. Interface copied
+% from changebars.sty
+% 5) Allow changebars to be on the left as well as
+% the right.
+% 6) localize some variables global definitions now
+% start with cb_.
+% 7) Chain onto existing \output routine rather than assume
+% \plainoutput.
+% And miscellaneous minor hacks.
+% 89-10-09 -js converted to LaTeX (progltx)
+% 89-09-25 -js repaired \mark processing in horizontal mode
+% 89-08 -js first version (for EuroTeX89 in Karlsruhe)
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+
+% should be progtex...
+%%%%
+%%%%
+%%%% These TeX macros were documented with the documentation system
+%%%% MAKEPROG and automatically converted to the current form.
+%%%% If you have MAKEPROG available you may transform it back to
+%%%% the original input: Remove every occurence of three percents
+%%%% and one optional blank from the beginning of a line and remove
+%%%% every line which starts with four percents. The following lex
+%%%% program will do this:
+%%%%
+%%%% %%
+%%%%
+%%%% ^%%%\ ? ;
+%%%% ^%%%%.*\n ;
+%%%%
+%%%% MAKEPROG may be obtained over the net from the Bitnet-Listserver
+%%%% LISTSERV@DHDURZ1 (filelist WEBWARE), from tuglib@science.utah.edu,
+%%%% or via ftp from june.cs.washington.edu.
+%%%%
+%%%%
+%%% \documentstyle[progltx,chbars,a4-9]{article}
+
+
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % local macros
+%%% %
+
+%%% \let\mc=\small % for names like GNU
+
+%%% \def\PS{{\sc PostScript}}
+%%% \def\DVI{{\tt DVI}}
+%%% \def\GNU{{\mc GNU}}
+
+%%% \chardef\bs=`\\
+
+%%% %
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%% \begin{document}
+%%% \tableofcontents
+
+%%% \title{Changebars without {\tt \bs{}special}'s}
+%%% \author{\sc Joachim Schrod}
+
+%%% \newcommand{\changedate}{Aug 15, 1992}
+%%% \date{Revised last on \changedate\footnote{by {\tt rocky@watson.ibm.com}}\\
+%%% Formatted on \today}
+%%% \maketitle
+
+
+
+%%% \begin{abstract}
+%%% It is common practice to use vertical bars in the margins of a
+%%% document to mark pieces of text which have changed since the last
+%%% version(s) of this document. Such vertical bars are usually
+%%% called {\em changebars}. It has often been said that it is
+%%% impossible to produce changebars with \TeX{} without the usage of
+%%% |\special| commands (driver directives), which extend the
+%%% primitives of \TeX{}. This paper presents a \TeX{} macro file
+%%% which implements changebars without such a usage. The macro file
+%%% is written for the usage with {\sc Plain}~\TeX{} but the implementation
+%%% strategy can be used with \LaTeX{}, too with minor changes.
+
+%%% \end{abstract}
+
+
+
+%%% \chap Introduction.
+
+%%% Changebars are used to mark modified parts in existing documents. For
+%%% the usage in \TeX{} documents, there exist only solutions that use
+%%% driver/printer features by the way of inserting |\special| commands in
+%%% the \TeX{} source, e.g.\ for \PS{} drivers. This results in documents
+%%% that are no longer as freely interchangeable as the \DVI{} concept would
+%%% allow---device dependency is problematic especially for this application
+%%% that is useful for multi-authoring or standards development.
+
+%%% This macro package offers a pure \TeX{} solution. Nevertheless, it has
+%%% its restrictions, too. The page break will no longer be optimal,
+%%% because there is no strechability or shrinkability of a page
+%%% on top of the last
+%%% region of change marked. But this seems to be acceptable,
+%%% especially as the change bar feature often will be used for proof
+%%% reading and not in the final document. This restriction is the reason
+%%% why no change marks can be used on title pages or on similar
+%%% constructions. Changes in floating insertions (footnotes, figures) are
+%%% not handled. Multi-column formats such as a two-column layout
+%%% will not work. There is currently no support for nested changes.
+
+%%% The method for writing a change bar consists of three
+%%% parts: First, the output routine is signalled when the beginning
+%%% or end of a change bar setting command is encountered.
+%%% Next, the position of the changed area is found out
+%%% and fixed; the end-of-change command adds the last change bar
+%%% position, length and width to a list of all such positions,
+%%% lengths and widths of change bars that is accumulated for the current
+%%% page. Finally, when
+%%% the output routine is triggered (either asynchronously in trying
+%%% to ship out the page or synchronously when discovering that the
+%%% end of a change bar lies off the page), this list of change
+%%% bars information is used create vertical rules which are added to the page.
+%%% If the change bar is not complete, a ``virtual'' end change is
+%%% inserted, and a ``virtual'' begin change is inserted at the
+%%% beginning of the next page.
+
+%%% \beginchange
+%%% The demonstrated solution was originally written in {\sc Plain}
+%%% \TeX{}, because it was
+%%% easier and could be presented better at the Euro\TeX89 conference in
+%%% Karlsruhe. An adaptation to \LaTeX{} has been done too which
+%%% requires minor modifications to the \LaTeX's output routine.
+%%% \endchange
+
+%%% Some history. The routines were initially written by Joachim
+%%% Schrod. Around Jan.\ 1992, R.\ Bernstein added some of the features
+%%% coded in |changebars.sty| to combine the best features
+%%% of the two (and added a couple of his own). For example, the
+%%% ability to specify change bar widths, put the change bars either on the
+%%% right or left margin, specifiy the distance from the margin to the
+%%% change bar, and chain to on top of a pre-existing modified
+%%% output routine.
+%%% \beginchange
+%%% Initially, both the {\TeX} and the {\LaTeX}
+%%% versions were put into one file. However, due problems in
+%%% dealing with conditional definition of code, in particular
+%%% problems with an extra or omitted |\fi| in defining or not
+%%% |\ifr@ggedbottom|, the code was split into two.
+%%% \endchange
+%%%
+%%% The |changebars.sty| package
+%%% was written by Michael Fine and revised by Johannes Braams
+%%% and Neil Winton. One or two ideas from Thomas J.~Reid have been
+%%% used.
+
+%%% \chap GNU General Public License.
+
+%%% This program is free software; you can redistribute it and/or
+%%% modify it under the terms of the \GNU{} General Public License as
+%%% published by the Free Software Foundation; either version~2, or (at your
+%%% option) any later version.
+
+%%% This program is distributed in the hope that it will be useful, but
+%%% {\bf without any warranty\/}; without even the implied warranty of
+%%% {\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+%%% the \GNU{} General Public License for more details.
+
+%%% You should have received a copy of the \GNU{} General Public License
+%%% along with this program; if not, write to the Free Software Foundation,
+%%% Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+%%% \chap User Interface.
+
+%%% \begin{newsloppy}
+%%% A changed area is described by two marks, |\beginchange| and
+%%% |\endchange|. The |\beginchange| can take an optional argument,
+%%% the bar thickness, enclosed in brackets. That is, either of the
+%%% something like |\beginchange[0.4pt]|, or |\beginchange| is valid.
+%%% In the latter case where no thickness dimension is specified, the value
+%%% of |\changebarwidth| is used. Therefore, by setting this you can
+%%% change the bar thickness used when none is given. Changing the bar
+%%% thickness might be useful in identifying different classes of changes.
+
+%%% Another pair of global values that can be set are the
+%%% logical variables
+%%% {\tt \bs chbar\-Right\-true} and {\tt \bs chbar\-Right\-false}.
+%%% These specify whether
+%%% changebars should be on the right or left. Say, if one wanted to
+%%% have the changebars always appear on the outside margin, one could
+%%% change these accordingly on each page.
+%%% \end{newsloppy}
+
+%%% Finally |\BarDistance| is the amount of place between the text margin
+%%% and the change bars. This value should normally be positive. For
+%%% change bars on the right this value is added to |\hsize|, while
+%%% for change bars on the left this value is {\em subtracted\/} from
+%%% |\hoffset|.
+
+%%% \beginprog
+\newdimen\changebarwidth \changebarwidth=1pt\relax
+\newif\ifchbarRight \chbarRightfalse
+\newdimen\BarDistance \BarDistance=2cc
+
+%%% \endprog
+
+%%% \chap Utility Routines and Programming Conventions.
+
+%%% Before we get into the nitty gritty details, we give some common
+%%% macros.
+%%%
+%%% First, we declare some shorthands for category codes. By
+%%% declaring the at sign~(`|@|') as well as the underscore~`(|_|)' as
+%%% letters we can use them in our macros. (I agree with D.~Knuth that
+%%% |\identifier_several_words_long| is more readable than
+%%% |\IdentifierSeveralWordsLong| and in every case better than |\p@@@s|.)
+%%% \beginchange
+%%% By defining the at sign to be in the letter class,
+%%% we can access {\sc Plain} \TeX's ``private''macros. By defining the
+%%% underscore to be in the letter class, we make our own private macros more
+%%% readable. But since have to
+%%% restore these category codes at the end of this macro file, we store
+%%% \endchange
+%%% their former values in the control sequences |\atcode| and |\uscode|.
+%%% This method is better than to use a group because not all macros have to
+%%% be defined global this way.
+%%%
+%%% All {\em global\/} definitions of the package are prefixed by
+%%% |cb_|. In this way, they can be easily determined. If other
+%%% packages do likewise, it is less likely that definition
+%%% names will clash between packages. (Unless the other package uses the
+%%% |cb_| prefix too, in which case there is a good chance that many
+%%% variable names will clash.)
+%%%
+%%% The {\TeX}book recommends the 255 registers be used for scratch
+%%% space, so routines use this value when a spare register is
+%%% needed. (See for example |\cb_write_bar|.)
+%%%
+
+%%% \beginprog
+\chardef\letter=11
+
+\chardef\atcode=\catcode`\@
+\chardef\uscode=\catcode`\_
+
+\catcode`\@=\letter
+\catcode`\_=\letter
+
+%%% \endprog
+
+%%% \chap Utility Routines for \TeX vs.\ \LaTeX
+
+%%% If this program was not run from {\LaTeX}, \@ifundefined
+%%% may be, well, undefined. So, we define it. What do you know---the
+%%% the code for the macro almost contains a copy if itself?
+%%% Also, if this is run from {\sc Plain} {\TeX}, there are a few other macros
+%%% we need to copy in. These we borrow (sort of) from {\LaTeX},
+%%% if they were undefined. In particular, they are:
+%%%
+%%% |\@ifundefined{NAME}{YES}{NO}|: if |\NAME| is undefined then it
+%%% executes |YES|, otherwise it executes NO. More precisely,
+%%% true if |\NAME| either undefined or = |\relax|.
+%%%
+%%% |\@ifnextchar X{YES}{NO}|: Expands to |YES| if next character is
+%%% an 'X', and to |NO| otherwise. (Uses temps a-c). {\it Note:
+%%% gobbles any space following it.}
+%%%
+%%% \beginprog
+%%%
+\expandafter\ifx\csname @ifundefined\endcsname\relax%
+ \long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
+ #1\endcsname\relax#2\else#3\fi}%
+ \fi
+
+\def\typeout#1{{\immediate\write16{#1}}}
+
+% \@ifnextchar X{YES}{NO}
+% BEGIN
+% \@tempe := X % uses \let
+% \@tempa := YES
+% \@tempb := NO
+% \futurelet\@tempc
+% \@ifnch
+% END
+%
+% \@ifnch ==
+% BEGIN
+% if \@tempc = blank space
+% then \@tempd := def(\@xifnch)
+% else if \@tempc = \@tempe
+% then \@tempd := def(\@tempa)
+% else \@tempd := def(\@tempb)
+% fi
+% fi
+% \@tempd
+% END
+%
+% \@xifnch ==
+% BEGIN
+% gobble blanks
+% \futurelet\@tempc
+% \@ifnch
+% END
+%
+\def\@ifnextchar#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}\futurelet
+ \@tempc\@ifnch}%
+\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch%
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi
+ \fi \@tempd}
+
+% NOTE: the following hacking must precede the definition of \:
+% as math medium space.
+
+\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token
+
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}
+
+%%% \endprog
+
+%%% \sect Now we are ready to code the top-level routine for indicating the
+%%% beginning of a change. But first we display the banner and
+%%% version number associated with this package. If this package has
+%%% been loaded already we terminate.
+%%%
+%%% Although one can specify a bar
+%%% thickness on the |\beginchange| macro, it is at the |\endchange|
+%%% where this thickness is recorded and put on a current list of
+%%% change bar entries for the current page. It seems more natural to
+%%% specify the thickness at the beginning of the change rather than
+%%% the end. Therefore at the
+%%% |\beginchange| we merely save the value given or save the value of
+%%% |\changebarwidth| if no thickness was given.
+%%% |\cb_changebarwidth| is this saved value. Auxiliary routine
+%%% |\cb_xstart| is used to parse off the optional enclosing
+%%% brackets. (This weird name was taken from one used in |changebars.sty|.)
+
+%%% default value, that is the value when a width is not specified
+%%% is |\changebarwidth|.
+
+%%% \beginprog
+
+\@ifundefined{cb_xstart}{}{\endinput}
+\typeout{Style option `change bars' -- version 1.1a}
+
+\newdimen\cb_changebarwidth
+
+\def\beginchange{\@ifnextchar [
+ {\cb_xstart}
+ {\beginchange_\changebarwidth}}
+\def\cb_xstart[#1]{\beginchange_{#1}}
+
+%%% \endprog
+
+%%% \chap Triggering the Output Routine.
+
+%%% \beginchange
+%%% When a change bar is started or completed, we signal the output
+%%% routine in the ``usual'' way described below. Why bother the
+%%% output routine? The output routine is supposed to be thought of
+%%% as an asynchronous process which has access to the page via the
+%%% contents of box register 255. In theory, if we did not perform
+%%% actions in the output routine, it might get triggered inadvertantly,
+%%% and the output routine might modify this box register on us in the
+%%% midst of our work. The information that needs to be recorded
+%%% is the position of the beginning and end of the lines containing a
+%%% marked change region.
+
+%%% \begin{newsloppy}
+%%% The macros |\beginchange| and |\endchange| signal the output
+%%% routine. Rather than merely calling the output routine directly,
+%%% these routines signal the output routine by setting a low page penalty, i.e.,
+%%% one which tells {\TeX} that this is a really good place to break
+%%% the page. Of course, we will modify the output routine so that it
+%%% doesn't really split the page when it has been called in this fashion.
+%%% Again, the reason we signal the output routine in what seems at
+%%% first a pretty odd way, is that this is the way it is supposed to
+%%% be done. If a low penalty were not set, some
+%%% other action (if we weren't careful) might cause a penalty to be
+%%% set and thus call the output routine (recursively).
+
+%%% So that we can distinguish our calls from others, |\beginchange|
+%%% and |\endchange| reserve a range of
+%%% penalty values; he actual value is stored in |\cb_break_penalty|.
+%%% This range of values is below
+%%% $-10\,000$, the nominal value for indicating that a page should
+%%% occur now. The penalty will be in the range $|\cb_penalty_group|
+%%% \cdot 100 - 99 \ldots |\cb_penalty_group| \cdot 100$.
+%%% The output routine then decides whether it has been called
+%%% to start or end a change bar or neither. This is done with the values
+%%% |\cb_penalty_begin| and |\cb_penalty_end| that are used as the
+%%% second-to-last digit of the change penalty.
+%%% \end{newsloppy}
+
+%%% The output routine also needs to determine whether
+%%% the beginning of change bar starts in horizontal or vertical mode
+%%% so it can figure out the exact placement for the beginning of the
+%%% bar line. In horizontal mode, the change bar does
+%%% not begin at the baseline of the actual text position, but on top of the
+%%% actual line. This is marked in the last digit, an odd digit will be
+%%% used in horizontal mode.
+
+%%% Note that the values mentioned above are used as digits here that can be
+%%% concatenated. If they are not followed by an other digit they should be
+%%% terminated by |\space| to stop {\TeX}'s look-ahead scanning for
+%%% digits when reading a number.
+%%% \endchange
+
+%%% \beginprog
+\def\cb_penalty_group{-101}
+\def\cb_penalty_begin{0}
+\def\cb_penalty_end{1}
+
+%%% \endprog
+
+
+%%% \sect The calls to start or end a change bar, set an encoded page-break
+%%% penalty which includes an
+%%% indication of begin or end of a change bar. The variable
+%%% |\cb_break_penalty| is used to create such as special value.
+%%% The rest (|\cb_trigger_output|) is the same action
+%%% for both. The region just before the end of the changed region can be
+%%% in horizontal mode and preceded by
+%%% glue that could cause a line break, thus including the following line to
+%%% the change area as well. To avoid this unwanted behavior, the space is
+%%% saved in |\save_lastskip|, discarded in front of the mark and restored
+%%% afterwards.
+
+%%% \beginprog
+\newcount\cb_break_penalty
+
+\def\beginchange_#1{%
+ \cb_changebarwidth=#1
+ \cb_break_penalty=\cb_penalty_group\cb_penalty_begin0
+ \cb_trigger_output
+ }
+\def\endchange{{%
+ \skipdef\save_lastskip=255%
+ \ifhmode \save_lastskip=\lastskip \unskip \fi%
+ \cb_break_penalty=\cb_penalty_group\cb_penalty_end0%
+ \cb_trigger_output%
+ \ifhmode \hskip\save_lastskip \fi%
+ }}%\endchange
+%%% \endprog
+
+
+%%% \sect The next routine, |\cb_trigger_output|,
+%%% triggers calls to the output routine by setting the page-break
+%%% penalty, |\penalty|. {\TeX} may discard an |\output| invocation at
+%%% the beginning of a page. So we trigger the output routine twice, first
+%%% with a special penalty value that is 2~less than the correct value
+%%% (including the code for horizontal or vertical mode). After the first
+%%% page break, it is asserted that the current list is empty. The output
+%%% routine has to save the former page contents if necessary.
+
+%%% Next we set the penalty to the correct value. The second page break does
+%%% the real work, restores the page contents and handles the split
+%%% insertions (footnotes, figures,~\dots).
+
+%%% In horizontal mode |\spacefactor| must not be destroyed, so it is
+%%% saved and restored via local count register |\save_spacefactor|.
+
+%%% \beginprog
+
+\def\cb_trigger_output{%
+ \ifinner \errmessage{Change cannot be marked inside a box}%
+ \else{%
+ \countdef\save_spacefactor=255%
+ \ifvmode
+ \let\do_in_vmode=\relax
+ \advance \cb_break_penalty by -2
+ \else
+ \save_spacefactor=\spacefactor
+ \let\do_in_vmode=\vadjust
+ \advance \cb_break_penalty by -3
+ \fi
+ \do_in_vmode{%
+ \penalty\cb_break_penalty% first call to \output
+ \null
+ \advance \cb_break_penalty by 2
+ \penalty\cb_break_penalty% second call to \output
+ }%
+ \ifhmode \spacefactor=\save_spacefactor \fi
+ }%
+ \fi
+ }% cb_trigger_output
+%%% \endprog
+
+
+%%% \sect Using the output routine for passing
+%%% information has it's difficulties. One of the hard parts is
+%%% \beginchange
+%%% handling page marks. These are token lists which are set by the
+%%% |\mark| command. They record information that can later
+%%% be accessed by the output routine. The canonical example of such
+%%% a use of the |\mark| command is in creating
+%%% \endchange
+%%% dictionary-style entry headings.
+%%%
+%%% The output routine can access one of three
+%%% token lists through three control sequences: |\botmark| is the
+%%% last page mark given, |\topmark| is the |\botmark| of the previous
+%%% page, and |\firstmark| is the first page mark on the actual page or
+%%% |\topmark| if none was given. Here ``page'' is used in the \TeX{}
+%%% sense, i.e.\ as the material which has been collected between two
+%%% |\output| invocations. Of course, the page marks must not be
+%%% destroyed---and that means they must be reinserted after each
+%%% special use of the output routine.
+
+%%% But we are lucky: A ``special use'' consists of two |\output|
+%%% invocations, so we can insert |\topmark| again as a page mark after
+%%% the first invocation where it will be the only page mark on that
+%%% \TeX{} page. The second invocation will automatically transform this
+%%% page mark into the ``last page mark on the previous page,'' i.e.\ in
+%%% |\topmark|---that's what we need! Furthermore |\firstmark| and
+%%% |\botmark| are saved in control sequences during the first invocation,
+%%% they will be inserted again, too.
+
+%%% There's one situation where this approach doesn't work: in front of
+%%% the first page mark. Here, |\topmark|, |\firstmark|, and |\botmark| expand
+%%% to an empty token list. If we save them then and insert their old
+%%% values we have inserted empty page marks. If other page marks follow
+%%% on the same ``real'' page, |\firstmark| will be empty instead of
+%%% expanding to the token list of the first page mark. To prevent this
+%%% we must not save and restore page marks before the first |\mark| has
+%%% been added to the main vertical list.
+
+%%% Well, that can be controlled with a switch---but this switch must be
+%%% set very carefully. If it is set immediately by the first |\mark|
+%%% this may be in horizontal mode and special output invocations can
+%%% occur above this page mark (i.e., there may be a |\beginchange| in the
+%%% same paragraph in front of the |\mark|). Therefore the setting of the
+%%% switch must be delayed until the vertical position of the |\mark|
+%%% (precisely: the position of the |\mark| in the current list) is
+%%% reached. In horizontal mode this can be done with a |\vadjust| and
+%%% the output routine! Voil\`a, this is another command group for the
+%%% output routine with only one command.
+
+%%% \beginprog
+\newif\if_cb_save_mark@ \_cb_save_mark@false
+
+\def\mark_penalty_group{-102}
+%%% \endprog
+
+
+%%% \sect We will redefine |\mark| so that the first page mark either sets
+%%% the switch to true (in vertical mode all possible special page breaks
+%%% are already handled) or forces the |\output| routine to do this at an
+%%% appropriate place. In the last case we can use |\cb_trigger_output|
+%%% again. Afterwards we restore the original meaning of |\mark| again to
+%%% reduce the processing overhead (and the dead cycles).
+
+%%% This change of |\mark| has the consequence that the first |\mark| in a
+%%% document cannot be used anymore in horizontal mode inside a vertical
+%%% box that shall be split afterwards. But this is only sensible if this
+%%% mark shall be used as |\splitfirstmark| because it will almost never
+%%% migrate to the outer list---really a rare case!
+
+%%% \beginprog
+\let\cb_mark=\mark
+\def\mark{%
+ \ifvmode
+ \ifinner \else \global\_cb_save_mark@true \fi % split marks!
+ \else
+ \cb_break_penalty=\mark_penalty_group00 % this will corrupt \vsplit
+ \cb_trigger_output
+ \fi
+ \global\let\mark=\cb_mark
+ \cb_mark
+ }
+%%% \endprog
+
+
+%%% \sect
+%%% \begin{newsloppy}
+%%% If the output routine is triggered with the mark penalty value,
+%%% it will call {\tt \bs cb\_save\discretionary{\_}{}{}page\_marks}.
+%%% \end{newsloppy}
+
+%%% \beginprog
+\def\cb_save_page_marks{% % this may be executed twice
+ \unvbox\@cclv
+ \global\_cb_save_mark@true
+ }
+%%% \endprog
+
+
+%%% \sect To finish the treatment of page marks we can formulate the two
+%%% macros which are used at the first resp.\ second invocation of a
+%%% ``special output,'' the principles have already been explained.
+
+%%% \beginprog
+\def\cb_backup_page_marks{%
+ \if_cb_save_mark@
+ \mark{\topmark}%
+ \xdef\cb_save_firstmark{\firstmark}%
+ \xdef\cb_save_botmark{\botmark}%
+ \fi
+ }
+
+\def\cb_restore_page_marks{%
+ \if_cb_save_mark@
+ \mark{\cb_save_firstmark}\mark{\cb_save_botmark}%
+ \fi
+ }
+%%% \endprog
+
+
+
+
+
+%%% \chap Positioning the Change Bars.
+
+%%% \begin{newsloppy}
+%%% Now we handle the positions of the bars.
+%%% The dimension |\cb_bot_change_pos| will hold
+%%% the position of the end of the change bar, i.e.\ the distance between
+%%% top of page the end of the changed area. The dimension
+%%% |\cb_top_change_pos| will hold the beginning of a changed
+%%% area; a value of |\maxdimen| indicates that no change is in effect. If
+%%% a changed area is completed, it is appended to the list |\cb_bar_list| as
+%%% an element {\tt \bs cb\_bar(\bs cb\_top\_change\_pos,
+%%% \bs cb\_bot\_change\_pos, \bs changebar\-width)}. This list contains all
+%%% changed areas within the current page so that bars can be written later
+%%% on. A single bar will be produced by |\cb_write_bar|.
+
+%%% \noindent The definition of |\cb_bar| to |\relax| allows the concatenation
+%%% of new elements to |\cb_bar_list| with |\xdef|.
+
+%%% Local dimension register |\halfwidth| is used to center the change bar.
+%%% \end{newsloppy}
+
+%%% \beginprog
+\newdimen\cb_bot_change_pos
+\newdimen\cb_top_change_pos \cb_top_change_pos=\maxdimen
+
+\let\cb_bar_list=\empty
+
+\let\cb_bar=\relax
+\def\cb_write_bar(#1,#2,#3){{%
+ \dimendef\halfwidth=255%
+ \setbox0=\hbox{\vrule width #3 height -#1 depth #2}%
+ \dp0=0pt \ht0=0pt \wd0=0pt%
+ \halfwidth=#3 \divide\dimen255 by 2%
+ \hskip -\halfwidth%
+ \box0%
+ \hskip \halfwidth%
+ }}
+%%% \endprog
+
+
+%%% \sect If the output routine was activated by a |\outputpenalty| value
+%%% within the range of our reserved penalties, the change handling will
+%%% occur, otherwise standard plain output can be done. There may be
+%%% a lot of interaction between the routines which set change bars and
+%%% the output routine. These interactions should not be recorded in
+%%% |\deadcycles| or else \TeX{} will soon grumble. One might consider
+%%% doing the same for the|\mark_penalty_group|. But since this
+%%% group is called once it shouldn't matter all that much.
+
+%%% One might also consider adding a counter like |\deadcycles| just
+%%% to count the change bar interactions as is done for the calls to
+%%% |\output|, and have {\TeX} grumble if there are ``too many'' of
+%%% them. For now we don't do this---all of this code is correct
+%%% anyway!
+
+%%% First we save away the old output routine in case the user had redefined
+%%% this beforehand.
+
+%%% \beginprog
+\newtoks\cb_oldoutput
+\edef\cb_oldoutput{\the\output}
+
+\newcount\penalty_group
+
+\output={%
+ \boxmaxdepth=\maxdepth
+ \penalty_group=\outputpenalty \divide \penalty_group by 100
+ \ifnum \penalty_group=\cb_penalty_group\space
+ {\countdef\new_deadcycles=255% don't count as a dead cycle
+ \new_deadcycles=\deadcycles
+ \advance \new_deadcycles by -1
+ \deadcycles=\new_deadcycles}
+ \cb_change_handling
+ \else
+ \ifnum \penalty_group=\mark_penalty_group\space
+ \cb_save_page_marks
+ \else \cb_oldoutput
+ \fi
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect As explained before, the change handling must differentiate
+%%% between the kind of the change command (beginning is indicated by
+%%% $|\cb_change_cmd|=0$, end by~1) and between the mode (horizontal indicated
+%%% by an odd |\cb_change_mode| value, vertical by an even). A change mode
+%%% higher than one indicates that we are doing the first page break that
+%%% has to backup the page as far as it exists already and results in an
+%%% empty current list of page elements.
+
+%%% \beginprog
+\newcount\cb_change_cmd
+\newcount\cb_change_mode
+
+\def\cb_change_handling{%
+ \cb_change_cmd=-\outputpenalty % ==> absolute value
+ \advance \cb_change_cmd by \cb_penalty_group00 % subtraction
+ \cb_change_mode=\cb_change_cmd
+ \divide \cb_change_cmd by 10 % second-to-last digit
+ \advance \cb_change_mode by -\number\cb_change_cmd0 % last digit
+ \ifnum \cb_change_mode>1 \cb_backup_page
+ \else
+ \ifcase \cb_change_cmd \cb_begin_change
+ \or \cb_end_change
+ \else \errmessage{Invalid changepenalty}%
+ \fi
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect Processing a mark during the second trigger of the output routine
+%%% means restoring the page and storing the positions. At the beginning,
+%%% the begin of the change is saved, at the end, we know the bar already
+%%% and put it into the bar list. Then the positioning values are
+%%% reinitialized.
+
+%%% As within every output invocation, the box 255 must be unboxed. As we
+%%% are here in the second invocation of the output routine the |\box255|
+%%% consists only of the empty |\vbox| we have inserted in
+%%% |\cb_trigger_output|. We can therefore throw it away.
+
+%%% \beginprog
+\def\cb_begin_change{%
+ \cb_restore_page
+ \setbox0=\box\@cclv
+ \ifdim \cb_top_change_pos=\maxdimen
+ \global\cb_top_change_pos=\cb_bot_change_pos
+ \global\cb_bot_change_pos=0pt
+ \else \errmessage{Nested change bars are not supported}%
+ \fi
+ }
+
+\def\cb_end_change{%
+ \cb_restore_page
+ \setbox0=\box\@cclv
+ \ifdim \cb_top_change_pos=\maxdimen
+ \errmessage{No change is in effect}%
+ \else
+ \xdef\cb_bar_list{\cb_bar_list
+ \cb_bar(\the\cb_top_change_pos,\the\cb_bot_change_pos,
+ \the\cb_changebarwidth)}
+ \global\cb_top_change_pos=\maxdimen
+ \global\cb_bot_change_pos=0pt
+ \fi
+ }
+%%% \endprog
+
+
+%%% \chap Handling the Page Contents.
+
+%%% We handle the part of the page that was collected up to now by putting
+%%% it into a box. This fixes the position of the change mark so that
+%%% |\cb_bot_change_pos| can be set and stored in |\cb_top_change_pos|
+%%% later on or as the lower end of a bar in |\cb_bar_list|.
+
+%%% In the first output invocation, we save the contents of the
+%%% page in |\cb_save_page|. Before that, we store the size of the
+%%% box (which equals |\pagegoal|!)\ in |\cb_page_goal|. If the unboxing
+%%% caused an increase of height (i.e.\ if $|\pagetotal|>|\pagegoal|$),
+%%% we eject the page up to the change mark. Now we have to compute the
+%%% current position of our mark in |\cb_bot_change_pos|. It is fixed by the size
+%%% of the |\cb_save_page|, but if the change begins in horizontal mode we
+%%% must decrease it from the baseline position to the top of the last line.
+%%% Finally, we must save the values for the allowed insertions and change
+%%% them to the maximal value so that a rest that is split from an insertion
+%%% will be appended to the insertion box at the second invocation in every
+%%% case.
+
+%%% The |\vsize| is initialized to |\maxdimen|. This allows to control
+%%% whether this first output invocation ocurred or if it was discarded.
+%%% For the same reason |\cb_bot_change_pos| is initialized to~0pt.
+
+%%% \beginprog
+\newbox\cb_save_page
+
+\newdimen\cb_page_goal
+\newdimen\cb_save_vsize \cb_save_vsize=\maxdimen
+\newdimen\cb_save_dimen_topins
+\newdimen\cb_save_dimen_footins
+
+\def\cb_backup_page{%
+ \global\cb_page_goal=\ht\@cclv
+ \global\setbox\cb_save_page=\vbox{\unvbox\@cclv}%
+ \ifdim \ht\cb_save_page>\cb_page_goal
+ \cb_eject_page_so_far \fi
+ \cb_bot_change_pos=\ht\cb_save_page
+ \global\advance \cb_bot_change_pos by \dp\cb_save_page
+ \ifnum \cb_change_cmd=\cb_penalty_begin\space
+ \ifodd \cb_change_mode \higher_change_pos \fi
+ \fi
+ \global\cb_save_vsize=\vsize \global\vsize=\maxdimen
+ \global\cb_save_dimen_topins=\dimen\topins
+ \global\dimen\topins=\maxdimen
+ \global\cb_save_dimen_footins=\dimen\footins
+ \global\dimen\footins=\maxdimen
+ \cb_backup_page_marks
+ }
+
+\cb_bot_change_pos=0pt
+%%% \endprog
+
+
+%%% \sect To eject a page as far as it is we restore it from the
+%%% |\cb_save_page| back to box~255. In horizontal mode and at a begin mark
+%%% the last line contains the mark and must not be output. So we remove it
+%%% and the preceding glue from the stored rest, just leaving a single hbox
+%%% to be on top of the actual page (in |\cb_save_page|) now. Then normal
+%%% output can be done with box~255.
+
+%%% \beginprog
+\def\cb_eject_page_so_far{%
+ \begingroup
+ \vbadness=20000 % don't complain about underfull vboxes
+ \global\setbox\@cclv=\vbox to \cb_page_goal{%
+ \unvbox\cb_save_page
+ \ifnum \cb_change_cmd=\cb_penalty_begin\space
+ \ifodd \cb_change_mode
+ \global\setbox\cb_save_page=\lastbox
+ \unskip
+ \fi
+ \fi
+ }%
+ \endgroup
+ \cb_oldoutput
+ }
+%%% \endprog
+
+
+%%% \sect
+%%% \begin{newsloppy}
+%%% In horizontal mode and at a begin mark, we need the position of
+%%% the mark ({\tt \bs cb\_bot\discretionary{\_}{}{}change\_pos}) on the upper boundary of
+%%% the last line in
+%%% |\cb_save_page|. If there is just one line left from a recent eject, the
+%%% height is given by |\topskip| decreased by the height of this hbox. If
+%%% the height of the box is larger than |\topskip| the skip will not be
+%%% inserted and the change position results to~0pt. Otherwise,
+%%% |\cb_save_page| is a vbox whose last hbox we delete temporarily using
+%%% box~0. Height and depth of the rest are the actual position on the page.
+%%% \end{newsloppy}
+
+%%% The double of the page we have constructed this way will immediately be
+%%% fed back to the garbage collector because it could have become
+%%% reasonably large.
+
+%%% \beginprog
+\def\higher_change_pos{%
+ \ifhbox \cb_save_page % rest of page from \cb_eject_page_so_far
+ \cb_bot_change_pos=\topskip
+ \global\advance \cb_bot_change_pos by -\ht\cb_save_page
+ \ifdim \cb_bot_change_pos<0pt
+ \global\cb_bot_change_pos=0pt
+ \fi
+ \else
+ \setbox0=\vbox{%
+ \unvcopy\cb_save_page
+ \setbox0=\lastbox % delete last line
+ }%
+ \cb_bot_change_pos=\ht0
+ \global\advance \cb_bot_change_pos by \dp0
+ \setbox0=\box\voidb@x
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect To restore a page during the second output invocation, we first
+%%% restore the saved values, but only if they were really changed (this can
+%%% be discovered by the value of |\cb_save_vsize|). Now the |\cb_save_page| is
+%%% appended to the current list as a box, which stops later usage of its
+%%% stretch- and shrinkability! Then the collected insertions can be
+%%% inserted again. The page marks have to be inserted, too.
+
+%%% \beginprog
+\def\cb_restore_page{%
+ \ifdim \cb_save_vsize=\maxdimen
+ \else \global\vsize=\cb_save_vsize
+ \global\dimen\topins=\cb_save_dimen_topins
+ \global\dimen\footins=\cb_save_dimen_footins
+ \global\cb_save_vsize=\maxdimen
+ \cb_restore_page_marks
+ \fi
+ \box\cb_save_page % discards stretch- and shrinkability!
+ \ifvoid \topins
+ \else \insert\topins{\floatingpenalty=0 \unvbox\topins}%
+ \fi
+ \ifvoid \footins
+ \else \insert\footins{\floatingpenalty=20000 \unvbox\footins}%
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect {\em Please note, that there is still a problem with this concept
+%%% of handling the output trigger:}
+
+%%% \bigskip
+
+%%% If the first output trigger is discarded because a page break has occurred
+%%% just in front, footnote parts may be juggled around. I.e., if a
+%%% footnote is split in three parts, the first part was just been shipped
+%%% out, the second part is inserted back into the recent contributions by
+%%% the output routine but {\em behind\/} the third part which is saved in
+%%% the ``special place'' (according to the \TeX{}book, p.~125). A solution to
+%%% this problem might be to insert a |\do_change| again within the second
+%%% output trigger and finishing the treatment afterwards. Afterwards a
+%%% full triggering process (two output invocations) is executed again and
+%%% all insertion parts will be accessible in the insertion box.
+
+%%% By the way, the almost same problem appears in \LaTeX{}, too. Almost: in
+%%% \LaTeX{} this can happen every time because at the first output invocation
+%%% the |\dimen|-values of the footnote insertion is not increased. I leave
+%%% the problem open to the reader\,\dots
+
+
+
+
+
+%%% \chap Writing the Stuff.
+
+%%% The positions of the bars which mark the changed areas are relative to
+%%% the top of the text, i.e.\ the height of the top insertion is not
+%%% included. Therefore it is best to write them just after the top
+%%% insertions before the page text---but to do this we have to change the
+%%% \beginchange
+%%% either the {\sc Plain} {\TeX} macro |\pagecontents| or the {\LaTeX}
+%%% macro |\@makecol|.
+%%% \endchange
+
+%%% Below is the new definition, I have just rearranged it a little bit so
+%%% that it is more legible. The new lines have been marked with
+%%% `|%%%%|'. |\cb_insert_current_bar| inserts a last element in |\cb_bar_list|
+%%% if a changed area is not yet finished, afterwards all bars can be
+%%% written.
+
+%%% \beginprog
+\def\pagecontents{%
+ \ifvoid \topins \else \unvbox\topins \fi
+ \cb_insert_current_bar \cb_write_all_bars %%%%
+ \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
+ \ifvoid \footins
+ \else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins
+ \fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi
+ }
+%%% \endprog
+
+%%% \sect If $|\cb_top_change_pos|=|\maxdimen|$ no change is active. Otherwise
+%%% the current change reaches from the begin mark (|\cb_top_change_pos|) to
+%%% the end of the page, i.e.\ we insert a virtual end mark. Because the
+%%% change continues on the next page we insert a virtual begin mark on the
+%%% top of the page, too.
+
+%%% \beginprog
+\def\cb_insert_current_bar{%
+ \ifdim \cb_top_change_pos=\maxdimen
+ \else%
+ \cb_bot_change_pos=\ht\@cclv
+ \advance\cb_bot_change_pos by \dp\@cclv
+ \xdef\cb_bar_list{\cb_bar_list
+ \cb_bar(\the\cb_top_change_pos,
+ \the\cb_bot_change_pos,
+ \the\changebarwidth)}%
+ \global\cb_top_change_pos=0pt
+ \fi%
+ }
+%%% \endprog
+
+
+%%% \sect Now we can write all bars---if they exist anyway. It's rather
+%%% easy, we just have to define |\cb_bar| to |\cb_write_bar| and execute
+%%% |\cb_bar_list|. The resulting output must not use vertical place. We must
+%%% not forget to delete the list, or we will get the same bars on the next
+%%% page again.
+
+%%% \beginprog
+\newbox\cb_bars
+\newdimen\cb_offset
+
+\def\cb_write_all_bars{%
+ \ifx \cb_bar_list\empty
+ \else % changes exist
+ \ifchbarRight
+ \cb_offset = \hsize
+ \advance \cb_offset by \BarDistance
+ \else
+ \cb_offset = \hoffset
+ \advance \cb_offset by -\BarDistance
+ \fi
+ \setbox\cb_bars=\hbox to \cb_offset{%
+ \hskip\cb_offset
+ \vbox to 0pt{\offinterlineskip
+ \let\cb_bar=\cb_write_bar \cb_bar_list
+ }%
+ \hss
+ }%
+ \ht\cb_bars=0pt \dp\cb_bars=0pt \box\cb_bars
+ \global\let\cb_bar_list=\empty
+ \fi
+ }
+%%% \endprog
+
+
+%%% \beginchange\chap Cleaning Up.\endchange
+
+%%% We finish the macro file so that garbage (e.g.\ of exchanges
+%%% between systems) can come afterwards.
+
+%%% \beginprog
+\catcode`\@=\atcode
+\catcode`\_=\uscode
+
+\endinput
+%%% \endprog
+
+
+
+%%% \end{document}
+
diff --git a/macros/latex209/contrib/chbars/makeprog.lex b/macros/latex209/contrib/chbars/makeprog.lex
new file mode 100644
index 0000000000..e1c9a11d87
--- /dev/null
+++ b/macros/latex209/contrib/chbars/makeprog.lex
@@ -0,0 +1,4 @@
+%%
+
+^%%%\ ? ;
+^%%%%.*\n ;
diff --git a/macros/latex209/contrib/chbars/makeprog.perl b/macros/latex209/contrib/chbars/makeprog.perl
new file mode 100644
index 0000000000..6c1c889828
--- /dev/null
+++ b/macros/latex209/contrib/chbars/makeprog.perl
@@ -0,0 +1,3 @@
+#!/usr/bin/perl -np
+s/^%%%\ ?//g;
+s/^%%%%.*\n//g; \ No newline at end of file
diff --git a/macros/latex209/contrib/chbars/progltx.ltx b/macros/latex209/contrib/chbars/progltx.ltx
new file mode 100644
index 0000000000..389a3eae60
--- /dev/null
+++ b/macros/latex209/contrib/chbars/progltx.ltx
@@ -0,0 +1,754 @@
+% This is PROGLTX.DOC as of 25 May 90
+%---------------------------------------------------------
+% (c) 1989,1990 by J.Schrod. copy conditions see below
+
+%
+% Macro package for the documentation of programs
+% LaTeX style option
+% MAKEPROG is needed
+%
+
+%
+% DATE PERSON REMARK
+% 92-01-15 rlb add newsloppy environment (based on comment by
+% Frank Mittlebach. Don't force a \newpage in
+% Chapters, Just put a bigger space there.
+% 89-11-18 js repaired the handling of `|' (verbatim and \index).
+% 89-10-05 js first version (for TeX89)
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+
+% documented with itself...
+\documentstyle[progltx]{article}
+
+
+%
+%
+% local macros
+%
+
+\let\mc=\small % for names like GNU
+
+\def\WEB{{\tt WEB\/}}
+\def\GNU{{\mc GNU}}
+
+%
+%
+
+
+\begin{document}
+
+
+\title{
+ Documenting programs in a \WEB{} style\\
+ The {\tt progltx\/} style option
+ }
+\author{\sc Joachim Schrod}
+
+\maketitle
+
+
+\chap Introduction.
+
+\WEB{} systems allow the documentation of programs by supporting the
+separation in program fragments which can be collected and rearranged
+afterwards. This allows {\it top-down\/} programming as well as the
+{\it bottom-up\/} design of programs. Each program fragment can be
+documented, usually with \TeX{}\@. A disadvantadge is that \WEB{}
+actually exists only for a few programming languages (Pascal, C,
+Modula-2). Besides, building up \WEB{} systems for ``exotic''
+programming languages like \TeX{} is very difficult.
+
+This macro package was built to allow good documentation for programs
+in languages for which \WEB{} doesn't exist. It separates a program
+text in sections that can be documented. All sections, collected
+sequentially, will result in the complete program. In every section
+begin and end of the program part are marked with |\beginprog| and
+|\endprog|, this program part will be formatted as it is input
+(``verbatim'').
+
+Originally these macros were written for the usage with Plain \TeX{}
+resp.\ on top of the \WEB{} macro package |webmac.tex|. But often the
+requirement has been told to me that a \LaTeX{} version would be
+useful, too---well, here it is. But even with \LaTeX{} I have decided
+that still |\beginprog| and |\endprog| must be used for the markup of
+the program parts, not |\begin{prog}| or |\end{prog}| which would be
+more ``\LaTeX{}-like.'' The reason behind this is that I didn't want
+to maintain two versions of the {\mc MAKEPROG\/} processor---but {\mc
+MAKEPROG\/} wants to see the non-\LaTeX{}-like macros. But everybody
+is encouraged to change it by themselves (it is {\it very\/} easy).
+
+The user of these macros may use the usual sectioning macros of
+\LaTeX{} for structuring his documentation. Additionally we provide a
+|progdoc|-compatible (i.e.\ \WEB{}-like) markup with the two macros
+|\chap| and |\sect|.
+
+In the documentation part of a section text pieces, e.g.\ names of
+variables, can be inserted verbatim to demonstrate the connection to
+the program text. These parts are included in vertical bars
+(`{\tt\vbar}') This makes this style option extremely useful if your
+identifiers (or your file names) include characters which would be
+special characters for \TeX{} otherwise. (One example of these
+program languages is \TeX{} itself, but just enclose the macro names
+in vertical bars and {\tt \vbar|\relax|\vbar}.)
+
+The macros |\makevertother| and |\makevertactive| are available to
+activate and deactivate the special behaviour of the vertical bar but
+these macros should be needed seldom because the usual cases as the
+usage within |verbatim| and |tabular| environments or |\index| macros
+etc.\ are handled.
+
+If a vertical bar must be used in the original fashion you can use two
+command sequences: |\origvert| holds the meaning of the vertical bar
+at the time this macro file was read in and |\vbar| is the character
+with the {\mc ASCII\/} code of the vertical bar (i.e.~|"EC|) in the
+current font.
+
+The new notion of |\verb| must not be used within parameters of
+macros, e.g.\ in the argument of |\section| etc.---it will result in
+an error message by \TeX{}\@. Furthermore within the preamble of a
+|tabular|, an |array| environment, or the |\multicolumn| command the
+vertical bar has the same meaning as before. (That means within
+|@{|\ldots|}| it is an ordinary character and otherwise it specifies a
+vertical rule between the columns.
+
+This macro package does not offer the automatic creation of an index
+because it is not known which syntactical tokens the language has that
+should be mentioned in an index. But of course all \LaTeX{} stuff like
+|\index|, |\tableofcontents|, etc.\ may be used.
+
+
+\sect This program is free software; you can redistribute it and/or
+modify it under the terms of the \GNU{} General Public License as
+published by the Free Software Foundation; either version~1, or (at your
+option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+{\bf without any warranty\/}; without even the implied warranty of
+{\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+the \GNU{} General Public License for more details.
+
+You should have received a copy of the \GNU{} General Public License
+along with this program; if not, write to the Free Software Foundation,
+Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+\sect We have to realize three parts: (1)~the formatting of rather
+small verbatim texts in a line, (2)~the formatting of larger parts of
+program and (3)~the document structuring elements for the separation
+of the sections.
+
+\begin{sloppypar}
+Before we start we declare some shorthands for category codes. By
+declaring the underscore~`(|_|)' as a letter we can use it in our
+macros names. (I agree with D.~Knuth that
+|\identifier_several_words_long| is more readable than
+|\IdentifierSeveralWordsLong| and in every case better than
+|\p@@@s|.) But as we have to restore the category codes at the end
+of this macro file we store its former value in the control
+sequence |\uscode|. This method is better than the usage of a
+group because not all macros have to be defined global this way.
+\end{sloppypar}
+
+\beginprog
+\chardef\escape=0
+\chardef\open=1
+\chardef\close=2
+\chardef\letter=11
+\chardef\other=12
+%\chardef\active=13 % is defined in Plain already
+
+\chardef\uscode=\catcode`\_
+
+\catcode`\_=\letter
+\endprog
+
+
+
+
+\chap Local Verbatim Formatting.
+
+The main point of every verbatim formatting is the switching of the
+character codes of all characters that have a special \TeX{} meaning.
+This can be done with the control sequence |\dospecials| that applies
+the control sequence |\do| to all special characters. Additionally,
+every line is regarded as a paragraph without indentation. Between
+two paragraphs, i.e.\ between two lines, no extra space is set.
+Finally all blanks and tabular characters shall be obeyed and the
+inter word space after sentence terminators shall not be enlarged.
+The activation of the tabular characters with |\obeytabs| is
+equivalent to |\obeyspaces| in {\tt plain.tex}.
+
+\begin{sl}
+As a matter of fact, I would like to use the character set with the
+extended {\mc ASCII} (like in\/ \WEB{}) for setting the verbatim texts
+in monospace. But then I must code many\/ |\@getfont|'s\,\dots
+\end{sl}
+
+\beginprog
+%\font\tentex=cmtex10 % typewriter extended ASCII 10pt
+%\let\ttex=\tentex % only with base size 10pt
+\def\ttex{\tt} % as a substitute
+
+\def\setup_verbatim{%
+ \def\do##1{\catcode`##1\other}\dospecials
+ \parskip\z@skip \parindent\z@
+ \catcode`\`\active \@noligs
+ \obeylines \@vobeyspaces \obeytabs \frenchspacing
+ \ttex
+ }
+
+\let\tab=\space
+\begingroup
+ \catcode`\^^I=\active% % Attention: no tabs!
+ \gdef\obeytabs{\catcode`\^^I=\active\def^^I{\tab}}
+ \global\let^^I=\tab% % if an active tab appears in a \write
+\endgroup
+\endprog
+
+
+\sect After having saved the old meaning of `{\tt\vbar}' in
+|\origvert| and after declaring |\vbar| as a synonym for the character
+that has the code of a vertical bar in the actual font, the vertical
+bar can be made active. Then we call |\setup_verbatim|. But the
+newline characters shall not be processed, they shall be regarded like
+blank space. This can be reached by defining |\par| as |\space|.
+
+The next vertical bar in the input closes the group which becomes an
+(unbreakable) |\hbox| then. The old meanings of the special
+characters and of the vertical bar are restored and \TeX{} is in
+normal (horizontal) mode again.
+
+\beginprog
+\let\origvert=|
+\chardef\vbar=`\|
+
+\def\makebaractive{\catcode`\|\active}
+\def\makebarother{\catcode`\|\other}
+\makebaractive
+
+\def|{%
+ \leavevmode
+ \hbox\bgroup
+ \let\par\space \setup_verbatim
+ \let|\egroup
+ }
+\endprog
+
+
+\sect A problem with this definition of the vertical bar is that
+the bar is not a normal character any more but there exists situations
+where the \LaTeX{} macros assumes this:
+%
+\begin{itemize}
+
+\item In a |verbatim| environment a vertical bar must be typeset if it
+occurs in the input.
+
+\item In a |tabular| or an |array| environment a vertical bar is used
+to denote rules between columns in the table. These environments must
+be started with a parameter which is a ``preamble,'' the same preamble
+construction is used to specify the format of multi-column entries.
+
+\item In an output of an index entry the vertical bar must not result
+in an error message. Usually index entries are typeset in a seperate
+\TeX{} run where |idverb| is not used as a style option and the
+vertical bar is therefore useful. This is no problem in section
+headings or captions etc. Because they take their argument as a
+parameter in every case the vertical bar can never be used there. But
+|\origvert| resp.\ |\vbar| may be used there.
+
+\end{itemize}
+%
+In the next sections we handle each of these problems.
+
+
+\sect Before we start a |verbatim| environment we just redefine the
+vertical bar as an ordinary character. Because this is within the
+environment grouping the end of the environment will reestablish the
+special meaning.
+
+\beginprog
+\let\@@verbatim=\@verbatim
+\def\@verbatim{%
+ \makebarother
+ \@@verbatim
+ }
+\endprog
+
+
+\sect Special care is needed in the |tabular| and the |array|
+environment. Both environments are begun by one macro (|\@tabarray|),
+we redefine it so that the bar can be used in the preamble
+specification. The same problem occurs in |\multicolumn|, it is
+solved the same way. After the preamble construction (with
+|\@mkpream|) the special meaning of the bar can be switched on
+again---this allows the usage of the new meaning in the body of a
+table.
+
+Of course this mean that the ``verbatim identifier'' facility can
+not be used within a preamble of a table. Furthermore it can not
+be used within the |\multicolumn| statement, neither in the
+preamble part (the second parameter) nor within the text part (the
+third parameter).
+
+\beginprog
+\let\@@tabarray=\@tabarray
+\def\@tabarray{%
+ \makebarother
+ \@@tabarray
+ }
+
+\def\multicolumn#1{%
+ \multispan{#1}%
+ \begingroup
+ \makebarother
+ \restof_multicolumn
+ }
+\def\restof_multicolumn#1#2{%
+ \@mkpream{#1}%
+ \def\@sharp{#2}%
+ \let\protect\relax
+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \@arstrut \@preamble
+ \endgroup
+ \ignorespaces
+ }
+
+\let\@@mkpream=\@mkpream
+\def\@mkpream#1{%
+ \@@mkpream{#1}%
+ \makebaractive
+ }
+\endprog
+
+
+\sect Before an index entry is scanned almost all special characters
+are transformed into ordinary characters. The only exceptions are the
+opening and the closing brace because they are needed to delimit the
+argument. This transformation is done with |\@sanitize|, this macro
+must be called within a group. We just append the transformation of
+the vertical bar.
+
+\beginprog
+\begingroup
+ \def\@makeother{\noexpand\@makeother\noexpand}
+ \xdef\@sanitize{\@sanitize\@makeother\|}
+\endgroup
+\endprog
+
+
+
+
+\chap Fragments in Verbatim.
+
+We need macros to format the program fragments without any
+linebreaking. Such a text area shall start with the macro
+|\beginprog| and end with |\endprog|, i.e.\ as a kind of a
+|prog|-environment. The macro |\endprog| must stand at the very
+beginning of a line and must be followed by white space (blank, tab or
+newline character). After |\beginprog| as well as after
+|\endprog| the rest of the line is ignored.
+
+Two demands must be regarded: There should be no length restrictions
+for the processed text, and the tabular characters should be expanded
+so that this macro works on PC's and on VAXes etc., too.
+
+
+\sect The implementation method is quite simple: We read the next
+line, test, wether the end is reached (by comparing with the end line)
+and otherwise set the line actually read. Every character is
+inspected and tabular characters are expanded.
+
+The verbatim text is started with |\begin_verbatim| which will be
+either called by |\beginprog| or by |\beginverbatim|. These macros
+will also define the contents of the end line.
+
+Whether a line is set or whether the end of the processed area is
+reached is indicated by the switch |\if@print|. At the beginning of
+the |\begin_verbatim| macro most settings are done with
+|\setup_verbatim| (the vertical bar must be handled separately)
+and the rest of the line is ignored. As everything is done within
+a group, the end of the verbatim text can be processed by simply
+closing this group.
+
+For the user it looks as if |\endprog| or |\endverbatim|
+terminates the processing, but it just serves for the
+identification of the end, the true processing is done with the
+internal macro |\end_verbatim|.
+
+\beginprog
+\newif\if@print
+
+\def\begin_verbatim{%
+ \endgraf
+ \bigbreak
+ \begingroup
+ \setup_verbatim \makebarother
+ \@printtrue
+ \ignore_rest_line
+ }
+\let\end_verbatim=\endgroup % internal command !
+\endprog
+
+
+\sect {\sloppy
+ The first line is ignored, all the other lines are identified with
+|\set_next_line| and processed with |\do_set|. This separation in
+identification and processing allows that the line end character is
+active in the definition only for a short time.
+ \par}
+
+When a line is to be formatted, we first check with |\check_print|
+wether it contains the end line, otherwise it is printed with
+|\print_char|. The printing must be done for every character
+individually because we want to check for tabular characters; the
+exact algorithm is described below. Here we just have to note that
+|\print_char| is used with two parameters of which the second one is
+finished with the token |\end_line|. The first parameter is the first
+character of the line, the second parameter is the rest of the line.
+If the line is empty, the argument of |\do_set| is empty, too; so the
+activation of |\print_char| must be finished with two |\end_line|.
+Then the first |\end_line| is the first argument for |\print_char| and
+the second argument is empty. But if the line did contain something,
+the second |\end_line| is evaluated, for this case it is defined as
+|\relax|.
+
+At last we call |\set_next_line| again to format the next line. If
+the end is reached, i.e.\ if the sample line was found,
+|\set_next_line| will be redefined as |\relax|. This can be done
+because the original meaning is restored while closing the group
+with |\end_verbatim|.
+
+\beginprog
+\begingroup
+ \obeylines% % ^^M is active! ==> every line must end with %
+ \gdef\ignore_rest_line#1^^M{\set_next_line}%
+ \gdef\set_next_line#1^^M{\do_set{#1}}%
+\endgroup
+
+\def\do_set#1{%
+ \endgraf
+ \check_print{#1}%
+ \if@print \indent \print_char#1\end_line\end_line
+ \else \let\set_next_line\end_verbatim
+ \fi
+ \set_next_line
+ }
+\let\end_line=\relax
+\endprog
+
+
+\sect {\sloppy
+ Before we look at the problem of formatting a line, we declare
+|\check_print| that checks the end of the verbatim mode. We have to
+do two things: we must split everything in front of the first blank
+or tabular character and compare for identity with |\endprog|. The
+splitting is easy because the line which is our first argument
+contains blanks and tabulators as active characters. First we call
+|\cut_at_tab| that demands a tabular character as separator for its
+two pramenters so that everything in the line in front of the first
+tabulator is part of the first parameter. If there is no tabular
+character in the line, we append one so that the second parameter is
+empty. The same trick is used to separate the part in front of the
+first blank character from the resulting first part.
+ \par}
+
+The check is done with |\do_check|. We use a separate macro here so
+that we can indent it (in the following definition blanks are active!)
+
+\beginprog
+\begingroup
+\obeyspaces\obeytabs
+\gdef\check_print#1{\cut_at_tab#1^^I\end_line}
+\gdef\cut_at_tab#1^^I#2\end_line{\check_first_part#1 \end_line}% blank !
+\gdef\check_first_part#1 #2\end_line{\do_check{#1}}
+\endgroup
+\endprog
+
+
+\sect
+\begin{sloppypar}
+|\do_check| compares the line with a sample line that is
+available in |\end_verbatim_line|. This macro will be defined later.
+\end{sloppypar}
+
+\beginprog
+\def\do_check#1{%
+ \def\@line{#1}%
+ \ifx \@line\end_verbatim_line \@printfalse
+ \fi
+ }
+\endprog
+
+
+\sect Now we can set a line: we start with the first character,
+followed by the rest of the line. Each character is counted in
+|\char_count|. At the beginning of a line |\char_count| is~0, this
+is reset at the end of the line.
+
+\beginprog
+\newcount\char_count \char_count\z@
+
+\def\print_char#1#2\end_line{%
+ \print_first_char{#1}%
+ \print_rest_of_line{#2}%
+ }
+\endprog
+
+
+\sect For each character that is set |\char_count| is incremented.
+If a character is a tabulator, we set with |\print_tab| the fitting
+amount of blank characters, otherwise the character itself. We must
+compare the character that is stored in |\@char| with a macro of which
+the ``first-level'' expansion is an active tabulator. For this case
+we declare |\@tab|.
+
+\beginprog
+{\obeytabs\gdef\@tab{^^I}}
+
+\def\print_first_char#1{%
+ \def\@char{#1}%
+ \advance \char_count\@ne
+ \ifx \@char\@tab \print_tab
+ \else \@char
+ \fi
+ }
+\endprog
+
+
+\sect If we want to fill the line with blank spaces up to the next
+column with a number that can be divided by~8, we must be able to
+compute the column number modulo~8, but \TeX{} has no modulo operator.
+So we define the macro |\mod_viii| that computes its argument modulo~8
+and returns the result in the counter |\count_mod_viii|. For the
+computation we need the temporary counter |\count@|.
+
+\beginprog
+\newcount\count_mod_viii
+\def\mod_viii#1{%
+ \count@ #1\relax \count_mod_viii\count@
+ \divide \count@ 8\relax
+ \multiply \count@ 8\relax
+ \advance \count_mod_viii -\count@
+ }
+\endprog
+
+
+\sect Now we can declare |\print_tab|. We must remember that
+|\char_count| was incremented already, if we set only one blank
+character the counter keeps untouched.
+
+\beginprog
+\def\print_tab{%
+ \loop \space \mod_viii\char_count
+ \ifnum \count_mod_viii>\z@
+ \advance \char_count\@ne
+ \repeat
+ }
+\endprog
+
+
+\sect If the rest of the line is empty, we are ready. |\char_count|
+is reset to~0 for the next line.
+
+Inside the |\else| part of |\ifx| |\print_char| should not be used
+directly because this costs too much storage of \TeX{}\@. Instead we
+set a control sequence |\next| that is processed afterwards, depending
+on the result of the comparison. (This tail recursion will be
+discovered by \TeX{} and handled appropriately.) If there is still
+something to set, we use |\print_char| again, otherwise a
+syntactically similar macro that expands to |\relax|.
+
+\beginprog
+\def\print_rest_of_line#1{%
+ \def\@line{#1}%
+ \ifx \@line\empty \char_count\z@
+ \def\next##1\end_line{\relax}%
+ \else \let\next\print_char
+ \fi
+ \next#1\end_line
+ }
+\endprog
+
+
+\sect {\sloppy
+Now we are ready to define the two ``user accessible'' macros
+|\beginprog| and |\beginverbatim|. They must define the prototyp end
+line |\end_verbatim_line| which will be compared against every line
+in the verbatim text. During the definition of
+|\end_verbatim_line| it must be cared for that the escape character~`|\|'
+is a printable character: A comparison with |\ifx| demands identical
+category codes. As a temporary escape character we use the slash.
+\par}
+
+\beginprog
+{\catcode`\/=\escape % / is temporary escape char
+ \catcode`\\=\other
+ /gdef/beginprog{%
+ /gdef/end_verbatim_line{\endprog}%
+ /begin_verbatim
+ }
+ /gdef/beginverbatim{%
+ /gdef/end_verbatim_line{\endverbatim}%
+ /begin_verbatim
+ }
+} % here \endgroup can't be used
+\endprog
+
+
+
+
+\chap Document Structuring.
+
+In addition to the normal \LaTeX{} structuring markups we will
+provide a markup for a layout of the document that is like in
+\WEB{}. This can be done easily. All sections are numbered, the
+number of the next section is stored in the counter |section|. We
+distinguish between main sections which start a group of sections
+and between normal sections within a group.
+
+The main sections are started with the macro |\chap|. It has one
+parameter, the title of the section group. This parameter must be
+terminated by a dot. We start a new page, typeset the title in
+bold face and separate it from the section text with a |\medskip|.
+This text, the documentation part of the section, is formatted
+without paragraph indentation.
+
+If the \WEB{}-like macros are used every section number should be
+output with a following dot. We want to establish this when we use the
+|\chap| or the |\sect| macro the first time. Furthermore the new page
+at the begin of a main section should not be started at the first
+|\chap| because a title may precede it (and the title should not
+be on a seperate page unless explicitely requested). Instead a
+skip of (approximately) 2~pica should be set. To achieve
+both goals a macro |\chap_intro| is defined that defines |\thesection|
+appropriately, skips the 2~pica, and redefines itself to
+|\newpage|---we then just have to call |\chap_intro| at the beginning
+of |\chap|. The same applies to |\sect_intro|.
+
+\beginprog
+\newskip\pre_sect_skip \pre_sect_skip=2pc plus 1pc minus 6pt
+
+\def\chap_intro{%
+ \gdef\thesection{\arabic{section}.}%
+ \gdef\chap_intro{\bigbreak}%
+ \addvspace{\pre_sect_skip}%
+ }
+
+\def\sect_intro{%
+ \gdef\thesection{\arabic{section}.}%
+ \global\let\sect_intro\relax
+ }
+\endprog
+
+
+\sect Now we will have a look at the {\it wonderful\/} internal
+interface of \LaTeX{}\@. With ``wonderful'' I mean that I'm always
+full of wonder why it was designed in this way. E.g., if anybody
+can explain to me why the coding of the non-indentation of the first
+line in the following paragraph was combined with the coding of
+the skip which will come in front of the section---I will be thankful
+for the rest of my life. Such different things should be kept
+different, i.e., the suppression of the indentation should not be
+hidden in the sign of a skip! The same comment applies to the combined
+coding of the skip below the section heading resp.\ to the right
+of a run-in heading.
+
+\begin{quote} \it
+I want the following layout: no indentation in the following
+paragraph\/ {\rm but no} space in front of the section heading.
+How do I code a value of\/ $\sl -0 pt$?
+\end{quote}
+%
+Well, a work-around is to use a value of $\rm -1\,sp$ because the
+reader will not see this distance---but in my opinions this is no
+good programming style. In this special case I have luck, too:
+the skip is not set anyway, either it is discarded by the preceding
+|\newpage| or it is not added by |\addvspace| because of the preceding
+|\pre_sect_skip|.
+
+\beginprog
+\def\chap#1.{%
+ \chap_intro
+ \@startsection{section}{1}%
+ {\z@}%
+ {\m@ne sp}%
+ {\medskipamount}%
+ {\normalsize\bf}%
+ {#1.}%
+ }
+\endprog
+
+
+\sect Normal sections are started with |\sect|. This macro has no
+parameter. Between two paragraphs we skip |\pre_sect_skip|.
+Between the section number and the text one quad of space is set.
+We have to take care for empty documentation parts where the
+program part (i.e.\ |\beginprog|) will follow immediately. Then
+the program part should begin on a new line and not behind the
+section number. So we provide |\null| as an empty documentation
+part in every case.
+
+Now again the design of |\@startsection| comes in hand: \LaTeX{}
+always leaves a quad after the section number (by the way,
+this is not mentioned in the documentation---you have to look
+in the macros to figure this out). Because our section header
+consists only of the number we have to code a value of $\rm
+-0\,pt$\,\dots
+
+\begin{quote}
+Again: {\it non-orthogonal design is bad design}.
+\end{quote}
+
+\beginprog
+\def\sect{%
+ \sect_intro
+ \@startsection{section}{1}%
+ {\z@}%
+ {\pre_sect_skip}%
+ {\m@ne sp}%
+ {\normalsize\bf}%
+ {\null}%
+ }
+\endprog
+
+\sect Finally, the |newsloppy| environment. As pointed out by
+Frank Mittelbach, {\LaTeX}'s |\sloppy| environment is just a
+little too sloppy. The tolerence value with which it allows {\TeX} to
+break at is considered infinite. Using a value just short of this
+improves output considerably.
+
+\beginprog
+ \newcount\pl_tolerance \pl_tolerance = 9999
+ \newenvironment{newsloppy}%
+ {\begingroup\tolerance\pl_tolerance}%
+ {\endgroup}
+\endprog
+
+\sect We are finished and just have to restore the category code.
+
+\beginprog
+\catcode`\_=\uscode
+
+\endinput
+\endprog
+
+
+
+
+
+\end{document}
diff --git a/macros/latex209/contrib/chbars/progltx.sty b/macros/latex209/contrib/chbars/progltx.sty
new file mode 100644
index 0000000000..96f1129a32
--- /dev/null
+++ b/macros/latex209/contrib/chbars/progltx.sty
@@ -0,0 +1,774 @@
+% This is PROGLTX.DOC as of 25 May 90
+%---------------------------------------------------------
+% (c) 1989,1990 by J.Schrod. copy conditions see below
+
+%
+% Macro package for the documentation of programs
+% LaTeX style option
+% MAKEPROG is needed
+%
+
+%
+% DATE PERSON REMARK
+% 92-01-15 rlb add newsloppy environment (based on comment by
+% Frank Mittlebach. Don't force a \newpage in
+% Chapters, Just put a bigger space there.
+% 89-11-18 js repaired the handling of `|' (verbatim and \index).
+% 89-10-05 js first version (for TeX89)
+%
+
+% author's current address:
+%
+% Detig$\,\cdot\,$Schrod \TeX{}sys
+% Joachim Schrod
+% Kranichweg 1
+%
+% D-6074 R\"odermark-Urberach
+% FR Germany
+%
+% Tel. (+6074) 1617
+% Bitnet: XITIJSCH@DDATHD21
+
+
+
+% documented with itself...
+%%%%
+%%%%
+%%%% These TeX macros were documented with the documentation system
+%%%% MAKEPROG and automatically converted to the current form.
+%%%% If you have MAKEPROG available you may transform it back to
+%%%% the original input: Remove every occurence of three percents
+%%%% and one optional blank from the beginning of a line and remove
+%%%% every line which starts with four percents. The following lex
+%%%% program will do this:
+%%%%
+%%%% %%
+%%%%
+%%%% ^%%%\ ? ;
+%%%% ^%%%%.*\n ;
+%%%%
+%%%% MAKEPROG may be obtained over the net from the Bitnet-Listserver
+%%%% LISTSERV@DHDURZ1 (filelist WEBWARE), from tuglib@science.utah.edu,
+%%%% or via ftp from june.cs.washington.edu.
+%%%%
+%%%%
+%%% \documentstyle[progltx]{article}
+
+
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % local macros
+%%% %
+
+%%% \let\mc=\small % for names like GNU
+
+%%% \def\WEB{{\tt WEB\/}}
+%%% \def\GNU{{\mc GNU}}
+
+%%% %
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%% \begin{document}
+
+
+%%% \title{
+%%% Documenting programs in a \WEB{} style\\
+%%% The {\tt progltx\/} style option
+%%% }
+%%% \author{\sc Joachim Schrod}
+
+%%% \maketitle
+
+
+%%% \chap Introduction.
+
+%%% \WEB{} systems allow the documentation of programs by supporting the
+%%% separation in program fragments which can be collected and rearranged
+%%% afterwards. This allows {\it top-down\/} programming as well as the
+%%% {\it bottom-up\/} design of programs. Each program fragment can be
+%%% documented, usually with \TeX{}\@. A disadvantadge is that \WEB{}
+%%% actually exists only for a few programming languages (Pascal, C,
+%%% Modula-2). Besides, building up \WEB{} systems for ``exotic''
+%%% programming languages like \TeX{} is very difficult.
+
+%%% This macro package was built to allow good documentation for programs
+%%% in languages for which \WEB{} doesn't exist. It separates a program
+%%% text in sections that can be documented. All sections, collected
+%%% sequentially, will result in the complete program. In every section
+%%% begin and end of the program part are marked with |\beginprog| and
+%%% |\endprog|, this program part will be formatted as it is input
+%%% (``verbatim'').
+
+%%% Originally these macros were written for the usage with Plain \TeX{}
+%%% resp.\ on top of the \WEB{} macro package |webmac.tex|. But often the
+%%% requirement has been told to me that a \LaTeX{} version would be
+%%% useful, too---well, here it is. But even with \LaTeX{} I have decided
+%%% that still |\beginprog| and |\endprog| must be used for the markup of
+%%% the program parts, not |\begin{prog}| or |\end{prog}| which would be
+%%% more ``\LaTeX{}-like.'' The reason behind this is that I didn't want
+%%% to maintain two versions of the {\mc MAKEPROG\/} processor---but {\mc
+%%% MAKEPROG\/} wants to see the non-\LaTeX{}-like macros. But everybody
+%%% is encouraged to change it by themselves (it is {\it very\/} easy).
+
+%%% The user of these macros may use the usual sectioning macros of
+%%% \LaTeX{} for structuring his documentation. Additionally we provide a
+%%% |progdoc|-compatible (i.e.\ \WEB{}-like) markup with the two macros
+%%% |\chap| and |\sect|.
+
+%%% In the documentation part of a section text pieces, e.g.\ names of
+%%% variables, can be inserted verbatim to demonstrate the connection to
+%%% the program text. These parts are included in vertical bars
+%%% (`{\tt\vbar}') This makes this style option extremely useful if your
+%%% identifiers (or your file names) include characters which would be
+%%% special characters for \TeX{} otherwise. (One example of these
+%%% program languages is \TeX{} itself, but just enclose the macro names
+%%% in vertical bars and {\tt \vbar|\relax|\vbar}.)
+
+%%% The macros |\makevertother| and |\makevertactive| are available to
+%%% activate and deactivate the special behaviour of the vertical bar but
+%%% these macros should be needed seldom because the usual cases as the
+%%% usage within |verbatim| and |tabular| environments or |\index| macros
+%%% etc.\ are handled.
+
+%%% If a vertical bar must be used in the original fashion you can use two
+%%% command sequences: |\origvert| holds the meaning of the vertical bar
+%%% at the time this macro file was read in and |\vbar| is the character
+%%% with the {\mc ASCII\/} code of the vertical bar (i.e.~|"EC|) in the
+%%% current font.
+
+%%% The new notion of |\verb| must not be used within parameters of
+%%% macros, e.g.\ in the argument of |\section| etc.---it will result in
+%%% an error message by \TeX{}\@. Furthermore within the preamble of a
+%%% |tabular|, an |array| environment, or the |\multicolumn| command the
+%%% vertical bar has the same meaning as before. (That means within
+%%% |@{|\ldots|}| it is an ordinary character and otherwise it specifies a
+%%% vertical rule between the columns.
+
+%%% This macro package does not offer the automatic creation of an index
+%%% because it is not known which syntactical tokens the language has that
+%%% should be mentioned in an index. But of course all \LaTeX{} stuff like
+%%% |\index|, |\tableofcontents|, etc.\ may be used.
+
+
+%%% \sect This program is free software; you can redistribute it and/or
+%%% modify it under the terms of the \GNU{} General Public License as
+%%% published by the Free Software Foundation; either version~1, or (at your
+%%% option) any later version.
+
+%%% This program is distributed in the hope that it will be useful, but
+%%% {\bf without any warranty\/}; without even the implied warranty of
+%%% {\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+%%% the \GNU{} General Public License for more details.
+
+%%% You should have received a copy of the \GNU{} General Public License
+%%% along with this program; if not, write to the Free Software Foundation,
+%%% Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+%%% \sect We have to realize three parts: (1)~the formatting of rather
+%%% small verbatim texts in a line, (2)~the formatting of larger parts of
+%%% program and (3)~the document structuring elements for the separation
+%%% of the sections.
+
+%%% \begin{sloppypar}
+%%% Before we start we declare some shorthands for category codes. By
+%%% declaring the underscore~`(|_|)' as a letter we can use it in our
+%%% macros names. (I agree with D.~Knuth that
+%%% |\identifier_several_words_long| is more readable than
+%%% |\IdentifierSeveralWordsLong| and in every case better than
+%%% |\p@@@s|.) But as we have to restore the category codes at the end
+%%% of this macro file we store its former value in the control
+%%% sequence |\uscode|. This method is better than the usage of a
+%%% group because not all macros have to be defined global this way.
+%%% \end{sloppypar}
+
+%%% \beginprog
+\chardef\escape=0
+\chardef\open=1
+\chardef\close=2
+\chardef\letter=11
+\chardef\other=12
+%\chardef\active=13 % is defined in Plain already
+
+\chardef\uscode=\catcode`\_
+
+\catcode`\_=\letter
+%%% \endprog
+
+
+
+
+%%% \chap Local Verbatim Formatting.
+
+%%% The main point of every verbatim formatting is the switching of the
+%%% character codes of all characters that have a special \TeX{} meaning.
+%%% This can be done with the control sequence |\dospecials| that applies
+%%% the control sequence |\do| to all special characters. Additionally,
+%%% every line is regarded as a paragraph without indentation. Between
+%%% two paragraphs, i.e.\ between two lines, no extra space is set.
+%%% Finally all blanks and tabular characters shall be obeyed and the
+%%% inter word space after sentence terminators shall not be enlarged.
+%%% The activation of the tabular characters with |\obeytabs| is
+%%% equivalent to |\obeyspaces| in {\tt plain.tex}.
+
+%%% \begin{sl}
+%%% As a matter of fact, I would like to use the character set with the
+%%% extended {\mc ASCII} (like in\/ \WEB{}) for setting the verbatim texts
+%%% in monospace. But then I must code many\/ |\@getfont|'s\,\dots
+%%% \end{sl}
+
+%%% \beginprog
+%\font\tentex=cmtex10 % typewriter extended ASCII 10pt
+%\let\ttex=\tentex % only with base size 10pt
+\def\ttex{\tt} % as a substitute
+
+\def\setup_verbatim{%
+ \def\do##1{\catcode`##1\other}\dospecials
+ \parskip\z@skip \parindent\z@
+ \catcode`\`\active \@noligs
+ \obeylines \@vobeyspaces \obeytabs \frenchspacing
+ \ttex
+ }
+
+\let\tab=\space
+\begingroup
+ \catcode`\^^I=\active% % Attention: no tabs!
+ \gdef\obeytabs{\catcode`\^^I=\active\def^^I{\tab}}
+ \global\let^^I=\tab% % if an active tab appears in a \write
+\endgroup
+%%% \endprog
+
+
+%%% \sect After having saved the old meaning of `{\tt\vbar}' in
+%%% |\origvert| and after declaring |\vbar| as a synonym for the character
+%%% that has the code of a vertical bar in the actual font, the vertical
+%%% bar can be made active. Then we call |\setup_verbatim|. But the
+%%% newline characters shall not be processed, they shall be regarded like
+%%% blank space. This can be reached by defining |\par| as |\space|.
+
+%%% The next vertical bar in the input closes the group which becomes an
+%%% (unbreakable) |\hbox| then. The old meanings of the special
+%%% characters and of the vertical bar are restored and \TeX{} is in
+%%% normal (horizontal) mode again.
+
+%%% \beginprog
+\let\origvert=|
+\chardef\vbar=`\|
+
+\def\makebaractive{\catcode`\|\active}
+\def\makebarother{\catcode`\|\other}
+\makebaractive
+
+\def|{%
+ \leavevmode
+ \hbox\bgroup
+ \let\par\space \setup_verbatim
+ \let|\egroup
+ }
+%%% \endprog
+
+
+%%% \sect A problem with this definition of the vertical bar is that
+%%% the bar is not a normal character any more but there exists situations
+%%% where the \LaTeX{} macros assumes this:
+%%% %
+%%% \begin{itemize}
+
+%%% \item In a |verbatim| environment a vertical bar must be typeset if it
+%%% occurs in the input.
+
+%%% \item In a |tabular| or an |array| environment a vertical bar is used
+%%% to denote rules between columns in the table. These environments must
+%%% be started with a parameter which is a ``preamble,'' the same preamble
+%%% construction is used to specify the format of multi-column entries.
+
+%%% \item In an output of an index entry the vertical bar must not result
+%%% in an error message. Usually index entries are typeset in a seperate
+%%% \TeX{} run where |idverb| is not used as a style option and the
+%%% vertical bar is therefore useful. This is no problem in section
+%%% headings or captions etc. Because they take their argument as a
+%%% parameter in every case the vertical bar can never be used there. But
+%%% |\origvert| resp.\ |\vbar| may be used there.
+
+%%% \end{itemize}
+%%% %
+%%% In the next sections we handle each of these problems.
+
+
+%%% \sect Before we start a |verbatim| environment we just redefine the
+%%% vertical bar as an ordinary character. Because this is within the
+%%% environment grouping the end of the environment will reestablish the
+%%% special meaning.
+
+%%% \beginprog
+\let\@@verbatim=\@verbatim
+\def\@verbatim{%
+ \makebarother
+ \@@verbatim
+ }
+%%% \endprog
+
+
+%%% \sect Special care is needed in the |tabular| and the |array|
+%%% environment. Both environments are begun by one macro (|\@tabarray|),
+%%% we redefine it so that the bar can be used in the preamble
+%%% specification. The same problem occurs in |\multicolumn|, it is
+%%% solved the same way. After the preamble construction (with
+%%% |\@mkpream|) the special meaning of the bar can be switched on
+%%% again---this allows the usage of the new meaning in the body of a
+%%% table.
+
+%%% Of course this mean that the ``verbatim identifier'' facility can
+%%% not be used within a preamble of a table. Furthermore it can not
+%%% be used within the |\multicolumn| statement, neither in the
+%%% preamble part (the second parameter) nor within the text part (the
+%%% third parameter).
+
+%%% \beginprog
+\let\@@tabarray=\@tabarray
+\def\@tabarray{%
+ \makebarother
+ \@@tabarray
+ }
+
+\def\multicolumn#1{%
+ \multispan{#1}%
+ \begingroup
+ \makebarother
+ \restof_multicolumn
+ }
+\def\restof_multicolumn#1#2{%
+ \@mkpream{#1}%
+ \def\@sharp{#2}%
+ \let\protect\relax
+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \@arstrut \@preamble
+ \endgroup
+ \ignorespaces
+ }
+
+\let\@@mkpream=\@mkpream
+\def\@mkpream#1{%
+ \@@mkpream{#1}%
+ \makebaractive
+ }
+%%% \endprog
+
+
+%%% \sect Before an index entry is scanned almost all special characters
+%%% are transformed into ordinary characters. The only exceptions are the
+%%% opening and the closing brace because they are needed to delimit the
+%%% argument. This transformation is done with |\@sanitize|, this macro
+%%% must be called within a group. We just append the transformation of
+%%% the vertical bar.
+
+%%% \beginprog
+\begingroup
+ \def\@makeother{\noexpand\@makeother\noexpand}
+ \xdef\@sanitize{\@sanitize\@makeother\|}
+\endgroup
+%%% \endprog
+
+
+
+
+%%% \chap Fragments in Verbatim.
+
+%%% We need macros to format the program fragments without any
+%%% linebreaking. Such a text area shall start with the macro
+%%% |\beginprog| and end with |\endprog|, i.e.\ as a kind of a
+%%% |prog|-environment. The macro |\endprog| must stand at the very
+%%% beginning of a line and must be followed by white space (blank, tab or
+%%% newline character). After |\beginprog| as well as after
+%%% |\endprog| the rest of the line is ignored.
+
+%%% Two demands must be regarded: There should be no length restrictions
+%%% for the processed text, and the tabular characters should be expanded
+%%% so that this macro works on PC's and on VAXes etc., too.
+
+
+%%% \sect The implementation method is quite simple: We read the next
+%%% line, test, wether the end is reached (by comparing with the end line)
+%%% and otherwise set the line actually read. Every character is
+%%% inspected and tabular characters are expanded.
+
+%%% The verbatim text is started with |\begin_verbatim| which will be
+%%% either called by |\beginprog| or by |\beginverbatim|. These macros
+%%% will also define the contents of the end line.
+
+%%% Whether a line is set or whether the end of the processed area is
+%%% reached is indicated by the switch |\if@print|. At the beginning of
+%%% the |\begin_verbatim| macro most settings are done with
+%%% |\setup_verbatim| (the vertical bar must be handled separately)
+%%% and the rest of the line is ignored. As everything is done within
+%%% a group, the end of the verbatim text can be processed by simply
+%%% closing this group.
+
+%%% For the user it looks as if |\endprog| or |\endverbatim|
+%%% terminates the processing, but it just serves for the
+%%% identification of the end, the true processing is done with the
+%%% internal macro |\end_verbatim|.
+
+%%% \beginprog
+\newif\if@print
+
+\def\begin_verbatim{%
+ \endgraf
+ \bigbreak
+ \begingroup
+ \setup_verbatim \makebarother
+ \@printtrue
+ \ignore_rest_line
+ }
+\let\end_verbatim=\endgroup % internal command !
+%%% \endprog
+
+
+%%% \sect {\sloppy
+%%% The first line is ignored, all the other lines are identified with
+%%% |\set_next_line| and processed with |\do_set|. This separation in
+%%% identification and processing allows that the line end character is
+%%% active in the definition only for a short time.
+%%% \par}
+
+%%% When a line is to be formatted, we first check with |\check_print|
+%%% wether it contains the end line, otherwise it is printed with
+%%% |\print_char|. The printing must be done for every character
+%%% individually because we want to check for tabular characters; the
+%%% exact algorithm is described below. Here we just have to note that
+%%% |\print_char| is used with two parameters of which the second one is
+%%% finished with the token |\end_line|. The first parameter is the first
+%%% character of the line, the second parameter is the rest of the line.
+%%% If the line is empty, the argument of |\do_set| is empty, too; so the
+%%% activation of |\print_char| must be finished with two |\end_line|.
+%%% Then the first |\end_line| is the first argument for |\print_char| and
+%%% the second argument is empty. But if the line did contain something,
+%%% the second |\end_line| is evaluated, for this case it is defined as
+%%% |\relax|.
+
+%%% At last we call |\set_next_line| again to format the next line. If
+%%% the end is reached, i.e.\ if the sample line was found,
+%%% |\set_next_line| will be redefined as |\relax|. This can be done
+%%% because the original meaning is restored while closing the group
+%%% with |\end_verbatim|.
+
+%%% \beginprog
+\begingroup
+ \obeylines% % ^^M is active! ==> every line must end with %
+ \gdef\ignore_rest_line#1^^M{\set_next_line}%
+ \gdef\set_next_line#1^^M{\do_set{#1}}%
+\endgroup
+
+\def\do_set#1{%
+ \endgraf
+ \check_print{#1}%
+ \if@print \indent \print_char#1\end_line\end_line
+ \else \let\set_next_line\end_verbatim
+ \fi
+ \set_next_line
+ }
+\let\end_line=\relax
+%%% \endprog
+
+
+%%% \sect {\sloppy
+%%% Before we look at the problem of formatting a line, we declare
+%%% |\check_print| that checks the end of the verbatim mode. We have to
+%%% do two things: we must split everything in front of the first blank
+%%% or tabular character and compare for identity with |\endprog|. The
+%%% splitting is easy because the line which is our first argument
+%%% contains blanks and tabulators as active characters. First we call
+%%% |\cut_at_tab| that demands a tabular character as separator for its
+%%% two pramenters so that everything in the line in front of the first
+%%% tabulator is part of the first parameter. If there is no tabular
+%%% character in the line, we append one so that the second parameter is
+%%% empty. The same trick is used to separate the part in front of the
+%%% first blank character from the resulting first part.
+%%% \par}
+
+%%% The check is done with |\do_check|. We use a separate macro here so
+%%% that we can indent it (in the following definition blanks are active!)
+
+%%% \beginprog
+\begingroup
+\obeyspaces\obeytabs
+\gdef\check_print#1{\cut_at_tab#1^^I\end_line}
+\gdef\cut_at_tab#1^^I#2\end_line{\check_first_part#1 \end_line}% blank !
+\gdef\check_first_part#1 #2\end_line{\do_check{#1}}
+\endgroup
+%%% \endprog
+
+
+%%% \sect
+%%% \begin{sloppypar}
+%%% |\do_check| compares the line with a sample line that is
+%%% available in |\end_verbatim_line|. This macro will be defined later.
+%%% \end{sloppypar}
+
+%%% \beginprog
+\def\do_check#1{%
+ \def\@line{#1}%
+ \ifx \@line\end_verbatim_line \@printfalse
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect Now we can set a line: we start with the first character,
+%%% followed by the rest of the line. Each character is counted in
+%%% |\char_count|. At the beginning of a line |\char_count| is~0, this
+%%% is reset at the end of the line.
+
+%%% \beginprog
+\newcount\char_count \char_count\z@
+
+\def\print_char#1#2\end_line{%
+ \print_first_char{#1}%
+ \print_rest_of_line{#2}%
+ }
+%%% \endprog
+
+
+%%% \sect For each character that is set |\char_count| is incremented.
+%%% If a character is a tabulator, we set with |\print_tab| the fitting
+%%% amount of blank characters, otherwise the character itself. We must
+%%% compare the character that is stored in |\@char| with a macro of which
+%%% the ``first-level'' expansion is an active tabulator. For this case
+%%% we declare |\@tab|.
+
+%%% \beginprog
+{\obeytabs\gdef\@tab{^^I}}
+
+\def\print_first_char#1{%
+ \def\@char{#1}%
+ \advance \char_count\@ne
+ \ifx \@char\@tab \print_tab
+ \else \@char
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect If we want to fill the line with blank spaces up to the next
+%%% column with a number that can be divided by~8, we must be able to
+%%% compute the column number modulo~8, but \TeX{} has no modulo operator.
+%%% So we define the macro |\mod_viii| that computes its argument modulo~8
+%%% and returns the result in the counter |\count_mod_viii|. For the
+%%% computation we need the temporary counter |\count@|.
+
+%%% \beginprog
+\newcount\count_mod_viii
+\def\mod_viii#1{%
+ \count@ #1\relax \count_mod_viii\count@
+ \divide \count@ 8\relax
+ \multiply \count@ 8\relax
+ \advance \count_mod_viii -\count@
+ }
+%%% \endprog
+
+
+%%% \sect Now we can declare |\print_tab|. We must remember that
+%%% |\char_count| was incremented already, if we set only one blank
+%%% character the counter keeps untouched.
+
+%%% \beginprog
+\def\print_tab{%
+ \loop \space \mod_viii\char_count
+ \ifnum \count_mod_viii>\z@
+ \advance \char_count\@ne
+ \repeat
+ }
+%%% \endprog
+
+
+%%% \sect If the rest of the line is empty, we are ready. |\char_count|
+%%% is reset to~0 for the next line.
+
+%%% Inside the |\else| part of |\ifx| |\print_char| should not be used
+%%% directly because this costs too much storage of \TeX{}\@. Instead we
+%%% set a control sequence |\next| that is processed afterwards, depending
+%%% on the result of the comparison. (This tail recursion will be
+%%% discovered by \TeX{} and handled appropriately.) If there is still
+%%% something to set, we use |\print_char| again, otherwise a
+%%% syntactically similar macro that expands to |\relax|.
+
+%%% \beginprog
+\def\print_rest_of_line#1{%
+ \def\@line{#1}%
+ \ifx \@line\empty \char_count\z@
+ \def\next##1\end_line{\relax}%
+ \else \let\next\print_char
+ \fi
+ \next#1\end_line
+ }
+%%% \endprog
+
+
+%%% \sect {\sloppy
+%%% Now we are ready to define the two ``user accessible'' macros
+%%% |\beginprog| and |\beginverbatim|. They must define the prototyp end
+%%% line |\end_verbatim_line| which will be compared against every line
+%%% in the verbatim text. During the definition of
+%%% |\end_verbatim_line| it must be cared for that the escape character~`|\|'
+%%% is a printable character: A comparison with |\ifx| demands identical
+%%% category codes. As a temporary escape character we use the slash.
+%%% \par}
+
+%%% \beginprog
+{\catcode`\/=\escape % / is temporary escape char
+ \catcode`\\=\other
+ /gdef/beginprog{%
+ /gdef/end_verbatim_line{\endprog}%
+ /begin_verbatim
+ }
+ /gdef/beginverbatim{%
+ /gdef/end_verbatim_line{\endverbatim}%
+ /begin_verbatim
+ }
+} % here \endgroup can't be used
+%%% \endprog
+
+
+
+
+%%% \chap Document Structuring.
+
+%%% In addition to the normal \LaTeX{} structuring markups we will
+%%% provide a markup for a layout of the document that is like in
+%%% \WEB{}. This can be done easily. All sections are numbered, the
+%%% number of the next section is stored in the counter |section|. We
+%%% distinguish between main sections which start a group of sections
+%%% and between normal sections within a group.
+
+%%% The main sections are started with the macro |\chap|. It has one
+%%% parameter, the title of the section group. This parameter must be
+%%% terminated by a dot. We start a new page, typeset the title in
+%%% bold face and separate it from the section text with a |\medskip|.
+%%% This text, the documentation part of the section, is formatted
+%%% without paragraph indentation.
+
+%%% If the \WEB{}-like macros are used every section number should be
+%%% output with a following dot. We want to establish this when we use the
+%%% |\chap| or the |\sect| macro the first time. Furthermore the new page
+%%% at the begin of a main section should not be started at the first
+%%% |\chap| because a title may precede it (and the title should not
+%%% be on a seperate page unless explicitely requested). Instead a
+%%% skip of (approximately) 2~pica should be set. To achieve
+%%% both goals a macro |\chap_intro| is defined that defines |\thesection|
+%%% appropriately, skips the 2~pica, and redefines itself to
+%%% |\newpage|---we then just have to call |\chap_intro| at the beginning
+%%% of |\chap|. The same applies to |\sect_intro|.
+
+%%% \beginprog
+\newskip\pre_sect_skip \pre_sect_skip=2pc plus 1pc minus 6pt
+
+\def\chap_intro{%
+ \gdef\thesection{\arabic{section}.}%
+ \gdef\chap_intro{\bigbreak}%
+ \addvspace{\pre_sect_skip}%
+ }
+
+\def\sect_intro{%
+ \gdef\thesection{\arabic{section}.}%
+ \global\let\sect_intro\relax
+ }
+%%% \endprog
+
+
+%%% \sect Now we will have a look at the {\it wonderful\/} internal
+%%% interface of \LaTeX{}\@. With ``wonderful'' I mean that I'm always
+%%% full of wonder why it was designed in this way. E.g., if anybody
+%%% can explain to me why the coding of the non-indentation of the first
+%%% line in the following paragraph was combined with the coding of
+%%% the skip which will come in front of the section---I will be thankful
+%%% for the rest of my life. Such different things should be kept
+%%% different, i.e., the suppression of the indentation should not be
+%%% hidden in the sign of a skip! The same comment applies to the combined
+%%% coding of the skip below the section heading resp.\ to the right
+%%% of a run-in heading.
+
+%%% \begin{quote} \it
+%%% I want the following layout: no indentation in the following
+%%% paragraph\/ {\rm but no} space in front of the section heading.
+%%% How do I code a value of\/ $\sl -0 pt$?
+%%% \end{quote}
+%%% %
+%%% Well, a work-around is to use a value of $\rm -1\,sp$ because the
+%%% reader will not see this distance---but in my opinions this is no
+%%% good programming style. In this special case I have luck, too:
+%%% the skip is not set anyway, either it is discarded by the preceding
+%%% |\newpage| or it is not added by |\addvspace| because of the preceding
+%%% |\pre_sect_skip|.
+
+%%% \beginprog
+\def\chap#1.{%
+ \chap_intro
+ \@startsection{section}{1}%
+ {\z@}%
+ {\m@ne sp}%
+ {\medskipamount}%
+ {\normalsize\bf}%
+ {#1.}%
+ }
+%%% \endprog
+
+
+%%% \sect Normal sections are started with |\sect|. This macro has no
+%%% parameter. Between two paragraphs we skip |\pre_sect_skip|.
+%%% Between the section number and the text one quad of space is set.
+%%% We have to take care for empty documentation parts where the
+%%% program part (i.e.\ |\beginprog|) will follow immediately. Then
+%%% the program part should begin on a new line and not behind the
+%%% section number. So we provide |\null| as an empty documentation
+%%% part in every case.
+
+%%% Now again the design of |\@startsection| comes in hand: \LaTeX{}
+%%% always leaves a quad after the section number (by the way,
+%%% this is not mentioned in the documentation---you have to look
+%%% in the macros to figure this out). Because our section header
+%%% consists only of the number we have to code a value of $\rm
+%%% -0\,pt$\,\dots
+
+%%% \begin{quote}
+%%% Again: {\it non-orthogonal design is bad design}.
+%%% \end{quote}
+
+%%% \beginprog
+\def\sect{%
+ \sect_intro
+ \@startsection{section}{1}%
+ {\z@}%
+ {\pre_sect_skip}%
+ {\m@ne sp}%
+ {\normalsize\bf}%
+ {\null}%
+ }
+%%% \endprog
+
+%%% \sect Finally, the |newsloppy| environment. As pointed out by
+%%% Frank Mittelbach, {\LaTeX}'s |\sloppy| environment is just a
+%%% little too sloppy. The tolerence value with which it allows {\TeX} to
+%%% break at is considered infinite. Using a value just short of this
+%%% improves output considerably.
+
+%%% \beginprog
+ \newcount\pl_tolerance \pl_tolerance = 9999
+ \newenvironment{newsloppy}%
+ {\begingroup\tolerance\pl_tolerance}%
+ {\endgroup}
+%%% \endprog
+
+%%% \sect We are finished and just have to restore the category code.
+
+%%% \beginprog
+\catcode`\_=\uscode
+
+\endinput
+%%% \endprog
+
+
+
+
+
+%%% \end{document}
diff --git a/macros/latex209/contrib/chbars/test1.tex b/macros/latex209/contrib/chbars/test1.tex
new file mode 100644
index 0000000000..92d2839ef8
--- /dev/null
+++ b/macros/latex209/contrib/chbars/test1.tex
@@ -0,0 +1,60 @@
+\input chbars
+
+\catcode`\@=\letter
+\catcode`\_=\letter
+\hsize=2in \vsize=3in
+\tolerance=10000 \hbadness=10000
+\def\nl{\unskip \hfill \break}
+\def\np{%
+ \ifhmode \vadjust \fi
+ {%
+ \vfill \eject
+ }%
+ }
+
+\tracingall \tracingonline=0
+\tracingparagraphs=0
+
+Zeile 1
+\beginchange
+Zeile 2
+\mark{Mark 1}%
+\write 16{Ausgabe 1}%
+Zeile 3
+\endchange
+Zeile 4%
+\mark{Mark 2}%
+\mark{Mark 3}
+\beginchange
+Zeile 5
+\write 16{Ausgabe 2}%
+Zeile 6
+\endchange
+Zeile 7
+\beginchange
+Zeile 8
+\write 16{Ausgabe 3}%
+Zeile 9
+\endchange
+Zeile 10
+\beginchange
+Zeile 11
+\write 16{Ausgabe 4}%
+Zeile 12
+\endchange
+Zeile 13
+\beginchange
+Zeile 14
+\write 16{Ausgabe 5}%
+Zeile 15
+\endchange
+Zeile 16
+\beginchange
+Zeile 17
+\write 16{Ausgabe 6}%
+Zeile 18
+\endchange
+Zeile 19
+
+
+\bye
diff --git a/macros/latex209/contrib/chbars/test2.tex b/macros/latex209/contrib/chbars/test2.tex
new file mode 100644
index 0000000000..5dbdd4a17a
--- /dev/null
+++ b/macros/latex209/contrib/chbars/test2.tex
@@ -0,0 +1,70 @@
+\input chbars
+
+\hsize=2in \vsize=3in
+\tolerance=10000 \hbadness=10000
+\def\nl{\unskip \hfill \break}
+\def\np{%
+ \ifhmode \vadjust \fi
+ {%
+ \vfill \eject
+ }%
+ }
+
+\tracingall \tracingonline=0
+\tracingparagraphs=0
+
+Zeile 1
+
+\beginchange
+
+Zeile 2
+
+\mark{Mark 1}%
+\write 16{Ausgabe 1}%
+
+Zeile 3
+
+\endchange
+
+Zeile 4
+
+\mark{Mark 2}%
+
+\mark{Mark 3}%
+
+\beginchange
+
+Zeile 5
+
+\write 16{Ausgabe 2}%
+
+Zeile 6
+
+\endchange
+
+Zeile 7
+
+
+\beginchange
+
+Zeile 8
+
+\write 16{Ausgabe 3}%
+
+Zeile 9
+
+\endchange
+
+Zeile 10
+
+\beginchange
+
+Zeile 11
+
+\write 16{Ausgabe 4}%
+
+Zeile 12
+
+\endchange
+
+\bye
diff --git a/macros/latex209/contrib/chbars/test3.tex b/macros/latex209/contrib/chbars/test3.tex
new file mode 100644
index 0000000000..1f08fa6b98
--- /dev/null
+++ b/macros/latex209/contrib/chbars/test3.tex
@@ -0,0 +1,84 @@
+\message{--Starting test 3--}
+%%% Test redefinition of \output
+\output={\message{==output here==}\plainoutput}
+\input chbars
+\chardef\uscode=\catcode`\_
+\catcode`\@=\letter
+\catcode`\_=\letter
+\hsize=2in \vsize=3in
+\tolerance=10000 \hbadness=10000
+\def\nl{\unskip \hfill \break}
+\def\np{%
+ \ifhmode \vadjust \fi
+ {%
+ \vfill \eject
+ }%
+ }
+
+\tracingall \tracingonline=0
+\tracingparagraphs=0
+
+\changebarwidth=1.1pt % Set the default size to 1.1pt
+\chbarRighttrue % do the margins on the right
+Zeile 1
+
+\beginchange[2pt] % Test giving an option
+Zeile 2
+\mark{Mark 1}%
+\write 16{Ausgabe 1}%
+Zeile 3
+\endchange
+
+Zeile 4%
+\mark{Mark 2}%
+\mark{Mark 3}
+
+\beginchange[0.4pt] % Now try another size
+Zeile 5
+\write 16{Ausgabe 2}%
+Zeile 6
+\endchange
+
+Zeile 7
+\beginchange
+Zeile 8
+\write 16{Ausgabe 3}%
+Zeile 9
+\endchange
+Zeile 10
+\beginchange
+Zeile 11
+\write 16{Ausgabe 4}%
+Zeile 12
+\endchange
+Zeile 13
+\beginchange
+Zeile 14
+\write 16{Ausgabe 5}%
+Zeile 15
+\endchange
+Zeile 16
+\beginchange
+Zeile 17
+\write 16{Ausgabe 6}%
+Zeile 18
+\endchange
+Zeile 19
+\beginchange
+Zeile 20
+\write 16{Ausgabe 6}% Test of change bars spanning newpage
+\np
+Zeile 21
+\endchange
+
+\changebarwidth=3pt
+\beginchange
+Zeile 22
+\endchange
+
+Next to last paragraph.
+\np % No pagemarks across here
+
+One more line on the next page.
+
+\bye
diff --git a/macros/latex209/contrib/chbars/test4.aux b/macros/latex209/contrib/chbars/test4.aux
new file mode 100644
index 0000000000..84c3d38c0d
--- /dev/null
+++ b/macros/latex209/contrib/chbars/test4.aux
@@ -0,0 +1,3 @@
+\relax
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1}test}{1}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2}test2}{2}}
diff --git a/macros/latex209/contrib/chbars/test4.ltx b/macros/latex209/contrib/chbars/test4.ltx
new file mode 100644
index 0000000000..73a3ef0de9
--- /dev/null
+++ b/macros/latex209/contrib/chbars/test4.ltx
@@ -0,0 +1,86 @@
+\documentstyle[chbars]{article}
+\begin{document}
+\catcode`\@=\letter
+\catcode`\_=\letter
+\hsize=2in \vsize=3in
+\tolerance=10000 \hbadness=10000
+\def\nl{\unskip \hfill \break}
+\def\np{%
+ \ifhmode \vadjust \fi
+ {%
+ \vfill \eject
+ }%
+ }
+
+\tracingall \tracingonline=0
+\tracingparagraphs=0
+
+\section{test}
+
+\changebarwidth=1.1pt % Set the default size to 1.1pt
+Zeile 1
+
+\beginchange[2pt] % Test giving an option
+Zeile 2
+\mark{Mark 1}%
+\write 16{Ausgabe 1}%
+Zeile 3
+\endchange
+
+Zeile 4%
+\mark{Mark 2}%
+\mark{Mark 3}
+
+\beginchange[0.4pt] % Now try another size
+Zeile 5
+\write 16{Ausgabe 2}%
+Zeile 6
+\endchange
+
+Zeile 7
+\beginchange
+Zeile 8
+\write 16{Ausgabe 3}%
+Zeile 9
+\endchange
+Zeile 10
+\beginchange
+Zeile 11
+\write 16{Ausgabe 4}%
+Zeile 12
+\endchange
+Zeile 13
+\beginchange
+Zeile 14
+\write 16{Ausgabe 5}%
+Zeile 15
+\endchange
+Zeile 16
+\beginchange
+Zeile 17
+\write 16{Ausgabe 6}%
+Zeile 18
+\endchange
+Zeile 19
+\beginchange
+Zeile 20
+\write 16{Ausgabe 6}% Test of newpage
+\np
+Zeile 21
+\endchange
+
+\chbarRighttrue % do the margins on the right
+\changebarwidth=3pt
+\beginchange
+Zeile 22
+\endchange
+
+One last paragraph before the new section.
+
+\beginchange\section{test2}\endchange
+
+Last section and quit
+
+\end{document}
+
+
diff --git a/macros/latex209/contrib/chemstruct/chemdoc.pdf b/macros/latex209/contrib/chemstruct/chemdoc.pdf
new file mode 100644
index 0000000000..ad761e6125
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemdoc.pdf
Binary files differ
diff --git a/macros/latex209/contrib/chemstruct/chemdoc.tex b/macros/latex209/contrib/chemstruct/chemdoc.tex
new file mode 100644
index 0000000000..c2a6c07efa
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemdoc.tex
@@ -0,0 +1,462 @@
+%SUBJECT: File CHEMDOC.TEX
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Dokumentation zu:
+%
+% STRUCTURE - Makropaket zum Erstellen von chem. Strukturformeln
+%
+% Autor: Dr. Michael Ramek
+% Institut fuer Physikal. und Theoret. Chemie
+% Technische Universitaet Graz
+%
+% November 1987
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%-----
+% modified by H.Partl, TU Wien:
+% 88-04-11 (\input file names changed)
+% 88-11-21 (Titelseite erweitert fuer TU Wien
+%-----
+
+\magnification=1200
+
+% Titlepage inserted by H.Partl ---->
+
+\null\vfil
+\centerline{\bf CHEMSTRUCT}
+\bigskip
+\centerline{\bf Chemische Strukturformeln mit \TeX}
+\bigskip
+\centerline{Dr.~Michael Ramek}
+\centerline{Technische Universit\"at Graz}
+\centerline{November 1987}
+\vfil\vfil
+
+\noindent
+Anmerkungen:
+\medskip
+\noindent
+An der CYBER des EDV-Zentrums der TU~Wien
+sind die in diesem Handbuch beschriebenen Macros im File
+{\tt CHEMSTRUCT\_TEX} definiert, sie werden also mit dem \TeX-Befehl
+\medskip
+\centerline{\tt \char'134{}input chemstruct}
+\medskip\noindent
+verf\"ugbar gemacht.
+
+Die Verwendung ist sowohl in Plain \TeX\ als auch (mit Einschr\"ankungen)
+in La\TeX\ m\"oglich.
+
+Die schr\"agen Linien in den Strukturformeln werden aus sehr vielen Punkten
+zusammengesetzt. Dies kann bei manchen Driver-Programmen und
+Ausgabe\-ger\"aten zu Speicher-Problemen f\"uhren.
+Bei dem an der TU Wien installierten PostScript-Driver von Nelson Beebe
+sind bisher {\it keine\/} solchen Probleme aufgetreten.
+
+Das EDV-Zentrum der TU Wien dankt Herrn Dr.~Ramek daf\"ur, da\ss\ er uns
+seine Macros zur Verf\"ugung gestellt hat.
+
+\medskip
+\rightline{H.~Partl, TU Wien, 1988-11-28}
+
+\vfil\vfil
+\rightline{Handbuch-Nummer: X14}
+
+\eject
+
+% End of Titlepage <---
+
+
+
+%---\input chemstruct.def
+\input chemstruct % <--- new file name CHEMSRTUCT.TEX <----
+
+
+
+\def\tex{\TeX}
+\def\section#1{\vskip 2truecm plus 1truecm\goodbreak\leftline{\bf #1}\bigskip}
+\def\Structure{{\tt {\char'134}structure}}
+%\def\Nsingle{{\tt {\char'134}nsingle}}
+%\def\Ssingle{{\tt {\char'134}ssingle}}
+%\def\Esingle{{\tt {\char'134}esingle}}
+%\def\Wsingle{{\tt {\char'134}wsingle}}
+%\def\Sesingle{{\tt {\char'134}sesingle}}
+%\def\Swsingle{{\tt {\char'134}swsingle}}
+%\def\Nesingle{{\tt {\char'134}nesingle}}
+%\def\Nwsingle{{\tt {\char'134}nwsingle}}
+%\def\Ssesingle{{\tt {\char'134}ssesingle}}
+%\def\Sswsingle{{\tt {\char'134}sswsingle}}
+%\def\Nnesingle{{\tt {\char'134}nnesingle}}
+\def\Nnwsingle{{\tt {\char'134}nnwsingle}}
+%\def\Ndouble{{\tt {\char'134}ndouble}}
+%\def\Sdouble{{\tt {\char'134}sdouble}}
+%\def\Edouble{{\tt {\char'134}edouble}}
+%\def\Wdouble{{\tt {\char'134}wdouble}}
+%\def\Sedouble{{\tt {\char'134}sedouble}}
+%\def\Swdouble{{\tt {\char'134}swdouble}}
+%\def\Nedouble{{\tt {\char'134}nedouble}}
+%\def\Nwdouble{{\tt {\char'134}nwdouble}}
+%\def\Ssedouble{{\tt {\char'134}ssedouble}}
+%\def\Sswdouble{{\tt {\char'134}sswdouble}}
+%\def\Nnedouble{{\tt {\char'134}nnedouble}}
+\def\Nnwdouble{{\tt {\char'134}nnwdouble}}
+%\def\Ntriple{{\tt {\char'134}ntriple}}
+%\def\Striple{{\tt {\char'134}striple}}
+%\def\Etriple{{\tt {\char'134}etriple}}
+%\def\Wtriple{{\tt {\char'134}wtriple}}
+%\def\Setriple{{\tt {\char'134}setriple}}
+%\def\Swtriple{{\tt {\char'134}swtriple}}
+%\def\Netriple{{\tt {\char'134}netriple}}
+%\def\Nwtriple{{\tt {\char'134}nwtriple}}
+%\def\Ssetriple{{\tt {\char'134}ssetriple}}
+%\def\Sswtriple{{\tt {\char'134}sswtriple}}
+%\def\Nnetriple{{\tt {\char'134}nnetriple}}
+\def\Nnwtriple{{\tt {\char'134}nnwtriple}}
+%\def\Nphantom{{\tt {\char'134}nphantom}}
+%\def\Sphantom{{\tt {\char'134}sphantom}}
+%\def\Ephantom{{\tt {\char'134}ephantom}}
+%\def\Wphantom{{\tt {\char'134}wphantom}}
+%\def\Sephantom{{\tt {\char'134}sephantom}}
+%\def\Swphantom{{\tt {\char'134}swphantom}}
+%\def\Nephantom{{\tt {\char'134}nephantom}}
+%\def\Nwphantom{{\tt {\char'134}nwphantom}}
+%\def\Ssephantom{{\tt {\char'134}ssephantom}}
+%\def\Sswphantom{{\tt {\char'134}sswphantom}}
+%\def\Nnephantom{{\tt {\char'134}nnephantom}}
+\def\Nnwphantom{{\tt {\char'134}nnwphantom}}
+\def\Sebelow{{\tt {\char'134}sebelow}}
+%\def\Swbelow{{\tt {\char'134}swbelow}}
+\def\Nebelow{{\tt {\char'134}nebelow}}
+%\def\Nwbelow{{\tt {\char'134}nwbelow}}
+\def\Sseabove{{\tt {\char'134}sseabove}}
+%\def\Sswabove{{\tt {\char'134}sswabove}}
+\def\Nneabove{{\tt {\char'134}nneabove}}
+\def\Nnwabove{{\tt {\char'134}nnwabove}}
+%\def\Sseevoba{{\tt {\char'134}sseevoba}}
+%\def\Sswevoba{{\tt {\char'134}sswevoba}}
+%\def\Nneevoba{{\tt {\char'134}nneevoba}}
+\def\Nnwevoba{{\tt {\char'134}nnwevoba}}
+%\def\Ssebelow{{\tt {\char'134}ssebelow}}
+\def\Sswbelow{{\tt {\char'134}sswbelow}}
+\def\Nnebelow{{\tt {\char'134}nnebelow}}
+\def\Nnwbelow{{\tt {\char'134}nnwbelow}}
+%\def\Eseabove{{\tt {\char'134}eseabove}}
+%\def\Wswabove{{\tt {\char'134}wswabove}}
+%\def\Eneabove{{\tt {\char'134}eneabove}}
+%\def\Wnwabove{{\tt {\char'134}wnwabove}}
+%\def\Eseevoba{{\tt {\char'134}eseevoba}}
+%\def\Wswevoba{{\tt {\char'134}wswevoba}}
+%\def\Eneevoba{{\tt {\char'134}eneevoba}}
+%\def\Wnwevoba{{\tt {\char'134}wnwevoba}}
+%\def\Esebelow{{\tt {\char'134}esebelow}}
+%\def\Wswbelow{{\tt {\char'134}wswbelow}}
+%\def\Enebelow{{\tt {\char'134}enebelow}}
+%\def\Wnwbelow{{\tt {\char'134}wnwbelow}}
+\def\Wmostaromatatom{{\tt {\char'134}wmostaromatatom}}
+\def\Emostaromatatom{{\tt {\char'134}emostaromatatom}}
+\def\Nmostaromatatom{{\tt {\char'134}nmostaromatatom}}
+\def\Smostaromatatom{{\tt {\char'134}smostaromatatom}}
+\def\Firstbicycloatom{{\tt {\char'134}firstbicycloatom}}
+\def\Secondbicycloatom{{\tt {\char'134}secondbicycloatom}}
+\def\Atom{{\tt {\char'134}atom}}
+\def\Phantatom{{\tt {\char'134}phantatom}}
+\def\Side{{\tt {\char'134}side}}
+\def\Spin{{\tt {\char'134}spin}}
+\def\Epin{{\tt {\char'134}epin}}
+\def\Wpin{{\tt {\char'134}wpin}}
+\def\Npin{{\tt {\char'134}npin}}
+\def\Nopositioncheck{{\tt {\char'134}nopositioncheck}}
+% --- \nopagenumbers
+
+\section{INTRODUCTION}
+
+\TeX\ offers excellent tools for mathematical formulae but lacks
+corresponding commands
+for most other fields of science. The purpose of this contribution
+is to present the macro \Structure\ and a set of secondary
+macros, which allow an easy
+(but not unlimited) generation of the structural formulas used in
+chemistry.
+Portability should be guaranteed, since these macros are designed
+to work in the plain \TeX\ environment.
+No additional font tables are required.
+
+The following sections explain the rules for usage and the limitations of
+\Structure\ and all its secondary macros. As examples,
+the instructions used to generate the figures
+of this paper are listed in an appendix;
+readers are encouraged to crosscheck this appendix
+with the figures.
+
+
+\section{THE CONNECTION TO PLAIN \TeX}
+
+\Structure\ will generate a hbox, which can be used either
+immediately or saved by
+{\tt {\char'134}newbox{\char'134}name
+{\char'134}setbox{\char'134}name={\char'134}structure{\char'173}...{\char'175}}
+for a later
+{\tt {\char'134}copy{\char'134}name} or {\tt {\char'134}box{\char'134}name},
+if the same structural formula is needed
+more than once.
+
+The baseline of the hbox generated is identical
+with the baseline of the first atom or bond entry in
+the argument of \Structure,
+height and depth depend on the subsequent entries. The width of this
+hbox is adjusted by \Structure\ in processing the argument
+twice: once, without printing, to determine the amount of backspacing
+produced by all entries and a second time, after proper
+kerning, to actually do the print. This two step process combines
+correct positioning with the possibility to commence
+the structural formula definition at any atom.
+For testing purposes, or when starting with the leftmost atom,
+the first pass can and should be suppressed by issuing the
+command \Nopositioncheck\ as the first entry in the argument of \Structure.
+
+The secondary macros, which actually generate the formulas, are
+described in the following sections. They should only be used
+inside the argument of \Structure; an outside use may cause severe troubles by
+changing registers, dimensions, and boxes.
+Additional macros are used by the secondary macros; the names of
+these further macros contain one uppercase vowel somewhere in the
+middle to avoid inference with other user defined macros.
+
+\section{ATOMS AND BONDS}
+
+Atoms are depicted in structural formulas by their chemical
+symbol. It is easy to generate all possible symbols with
+\TeX's font tables at hand, quite contrary to their proper
+positioning. Latter is achieved by the \Atom\ macro with
+the chemical symbol as the argument.
+``Invisible'' atoms, i.\thinspace e. empty boxes with correct height,
+depth, and width for a given chemical symbol, can be generated by the
+\Phantatom\ macro with that symbol as the argument.
+
+Chemical bonding is symbolized in structural formulas by lines
+connecting the atoms. These lines also bear additional
+information: electronic properties (single, double, or triple
+bonding), nuclear geometry (esp. linear vs. non-linear), and
+steric arrangement (in plane, above or below the plane).
+The bond macros available in \Structure\ are named according to a
+system which combines all these informations in a simple
+way: the direction of the bond (given in ``geographic'' terms:
+{\tt n}, {\tt nne}, {\tt ne}, {\tt ene}, {\tt e}, {\tt ese}, {\tt se},
+{\tt sse}, {\tt s}, {\tt ssw}, {\tt sw}, {\tt wsw}, {\tt w}, {\tt wnw},
+{\tt nw}, {\tt nnw}) is followed either by
+{\tt single}, {\tt double}, {\tt triple}, or {\tt phantom}
+(i.\thinspace e. invisible) for in-plane bonds or, for
+out-of-plane bonds, by
+{\tt below}, {\tt above}, or {\tt evoba} (i.\thinspace e. a bond
+from above-plane down to in-plane).
+Directions for in-plane and
+out-of-plane bonds are not compatible:
+\Nnwsingle, \Nnwdouble, \Nnwtriple, and \Nnwphantom\
+have one common direction;
+\Nnwabove, \Nnwevoba, and \Nnwbelow\ have another common direction,
+which is slightly different from that of the
+\Nnwsingle-group.
+Not all combinations of direction and bond type are defined;
+fig.~1 shows all available visible bonds with their
+direction codes. Bond macros have no argument.
+
+For correct positioning, the last entry of \Structure\ is
+expected to be either \Atom\ or \Phantatom. (The first entry may be an atom
+or a bond.)
+
+\vskip 2truecm plus 2truecm
+\input chemf1
+\vskip 2truecm plus 2truecm
+
+\section{RINGS}
+
+The in-plane bonds allow a variety of ring shapes; fig.~2 shows
+a sample collection. Rings built up by identical atoms will close
+as perfect as the ones in fig.~2 do: the $(n+1)$th atom in a $n$-membered
+ring is printed
+exactly at the same position as the first atom. For rings built
+up by different atoms, however, chances are high for a mismatch due to
+different widths of the atom symbols. In such cases it is
+adviseable to begin a ring with an \Atom\ and to end it with a \Phantatom.
+
+\vskip 2truecm plus 2truecm
+\input chemf2
+\vskip 2truecm plus 2truecm
+
+Aromatic rings can be specified by generating
+four outmost ring atoms by \Wmostaromatatom, \Nmostaromatatom,
+\Smostaromatatom, and
+\Emostaromatatom\ instead of simply \Atom. The order of these four atoms is
+arbitrary; they can not be made invisible though.
+
+Unusually long single bonds, connecting atoms across a ring,
+can be generated by using the macros \Firstbicycloatom\ and
+\Secondbicycloatom\ instead of \Atom. Again, these atoms are always
+visible. As the names indicate, the \Firstbicycloatom\ must be
+definied before the \Secondbicycloatom.
+Nesting of such long bond definitions is impossible:
+a second or third bond
+across a ring can not be specified before completion of the
+previous one.
+
+Both of these groups of macros
+(aromatic rings and bicyclo bonds) use the same internal registers, so
+they can only be used one after the other.
+Chemists will not regret the impossibility to define a ring as both, aromatic
+and bicyclic. They will, however, appreciate a facility to nest
+bridging bonds for the generation of tricyclic or polycyclic
+rings; the instructions used to generate fig.~3, which displays
+an aromatic, a bicyclic, a tricyclic, and a tetracyclic ring, show
+how to handle such problems.
+
+Bicyclo bonds and the ellipses marking aromatic rings have more in
+common than just internal registers: they can never be predefined in a
+font table but have to be generated anew whenever needed
+by a long sequence of tiny
+little rule boxes. Only this method of generation makes them
+flexible enough to handle all possible situations (fig.~3 and 4
+show how different aromatic rings may look). There is, however, a
+problem caused by this method of generation: it needs a large portion
+of \TeX's memory. Pages full of aromatic rings or bicyclo bonds
+may require memory enlargement. (This manuscript was prepared with
+the standard main memory size of 58000.)
+
+\vskip 2truecm plus 2truecm
+\input chemf3
+\vskip 2truecm plus 2truecm
+
+Due to their generation by a series of rule boxes,
+bicyclo bonds need considerably more computer
+time than ordinary bonds do.
+Whenever possible, bridging in bicyclic rings should therefore
+be specified by normal bonds, as it was done in fig.~4. Bicyclo
+bonds can also be used to close mismatching rings (as the one shown
+in fig.~5 with mixed in-plane and out-of-plane bonds
+having slightly different lengths).
+
+\vskip 2truecm plus 2truecm
+%\input chemf45
+\vskip 2truecm plus 2truecm
+
+\section{SIDE CHAINS}
+
+Side chains are generated by the \Side\ macro.
+(In this context, a ``side chain''
+is anything attached to the main chain by some type of bond.)
+The \Side\ macro argument is the sequence of bonds and atoms, which
+define the side chain. This sequence must begin
+with a bond and must end with an \Atom\ or \Phantatom.
+
+\Side\ has to be called immediately after the atom, to which the
+side chain is bound. The definition of the main
+chain will be completely suspended while \Side\ is processed,
+which is especially important for the definition of aromatic
+rings or bicyclo bonds: partially specified aromatic rings or
+bicyclo bonds will be saved when \Side\ is entered and restored
+when \Side\ is left, thus \Side\ does not affect incomplete
+specifications of aromatic rings or bicyclo bonds at all. Furthermore,
+\Side\ is able to generate aromatic rings or bicyclo bonds of its own,
+as long as all necessary specifications are part of its argument
+(fig.~6 was generated in this way).
+
+Side chains often have side chains themselves. Therefore \Side\ may
+be called from inside \Side, the maximum nesting of side
+chains being 20:
+\Side\ may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side,
+which in turn may be called from an outer \Side.
+(Nesting side chains to that extent might need an enlargement of
+\tex's input stack size; this manuscript was prepared with the
+standard input stack size of 200.)
+
+\vskip 2truecm plus 2truecm
+\input chemf6
+\vskip 2truecm plus 2truecm
+
+\section{LARGER STRUCTURES}
+
+Structural formulas of considerable complexity can be generated with the
+macros discussed so far. Fig.~7--10 show a number of examples.
+These examples have also been included to point out the following
+details:
+\noindent \Sseabove\ goes with \Sebelow\ in fig.~6 and with \Sswbelow\
+in fig.~7 (as does \Nneabove\ with \Nebelow\ and \Nnebelow\ etc.);
+
+\vskip 2truecm plus 2truecm
+\input chemf7
+\vskip 2truecm plus 2truecm
+\input chemf8
+\vskip 2truecm plus 2truecm
+
+\noindent bonds below the plane may also be used to symbolize weak
+bonds (fig.~9);
+\noindent an active character ({\tt\catcode`\~=12 ~})
+can be used to compensate additional superscripts or subscripts (fig.~9);
+
+\vskip 2truecm plus 2truecm
+\input chemf9
+\vskip 2truecm plus 2truecm
+
+\noindent the choice of baseline, eventually
+with the help of invisible atoms and bonds, may be
+essential when structural formulas are combined with text or other
+symbols (fig.~10).
+
+\vskip 2truecm plus 2truecm
+\input chemf10
+\vskip 2truecm plus 2truecm
+
+For even larger structures like the ones shown in fig.~11 and 12
+the four macros \Wpin, \Epin, \Spin, and \Npin\ may be of interest:
+these macros generate side chains, which are attached to the main
+chain without an explicitly drawn bond. Fig.~11 also illustrates the
+multiple use of substructures saved in boxes.
+
+\vskip 2truecm plus 2truecm
+\input chemf11
+\vfil\eject
+\input chemf12
+\vfill\eject
+
+\section{APPENDIX}
+
+Here the instructions used to generate the figures in this paper
+are given.
+
+\begingroup\frenchspacing\parindent=0pt
+\catcode`\|=0 |catcode`|\=12 |catcode`|{=12 |catcode`|}=12 |catcode`|~=12
+|catcode`|$=12 |catcode`|%=12 |catcode`|_=12 |catcode`|^=12 |obeylines
+
+|bigskip|goodbreak|rm Fig. 1:|tt|bigskip|input chemf1
+|bigskip|goodbreak|rm Fig. 2:|tt|bigskip|input chemf2
+|bigskip|goodbreak|rm Fig. 3:|tt|bigskip|input chemf3
+|bigskip|goodbreak|rm Fig. 4 |& 5:|tt|bigskip|input chemf45
+|bigskip|goodbreak|rm Fig. 6:|tt|bigskip|input chemf6
+|bigskip|goodbreak|rm Fig. 7:|tt|bigskip|input chemf7
+|bigskip|goodbreak|rm Fig. 8:|tt|bigskip|input chemf8
+|bigskip|goodbreak|rm Fig. 9:|tt|bigskip|input chemf9
+|bigskip|goodbreak|rm Fig. 10:|tt|bigskip|input chemf10
+|bigskip|goodbreak|rm Fig. 11:|tt|bigskip|input chemf11
+|bigskip|goodbreak|rm Fig. 12:|tt|bigskip|input chemf12
+
+|endgroup
+\end
+
diff --git a/macros/latex209/contrib/chemstruct/chemf1.tex b/macros/latex209/contrib/chemstruct/chemf1.tex
new file mode 100644
index 0000000000..b0ac47f23c
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf1.tex
@@ -0,0 +1,54 @@
+%SUBJECT: File CHEMF1.TEX
+
+\vbox{
+\centerline{
+\structure{\phantatom{C}
+% The \phantatom just processed defines the central empty spot, from
+% which all the bonds spray out; each one of the following \side{...}
+% commands will generate one direction. The rules for \side are explained
+% later in this paper.
+\side{\wsingle\phantatom{C}\wdouble\phantatom{C}\wtriple\atom{\tt W}}
+\side{\esingle\phantatom{C}\edouble\phantatom{C}\etriple\atom{\tt E}}
+\side{\ssingle\phantatom{C}\sdouble\phantatom{C}\striple\atom{\tt S}}
+\side{\nsingle\phantatom{C}\ndouble\phantatom{C}\ntriple\atom{\tt N}}
+\side{\swsingle\phantatom{C}\swdouble\phantatom{C}\swtriple\atom{\tt SW}}
+\side{\sesingle\phantatom{C}\sedouble\phantatom{C}\setriple\atom{\tt SE}}
+\side{\nesingle\phantatom{C}\nedouble\phantatom{C}\netriple\atom{\tt NE}}
+\side{\nwsingle\phantatom{C}\nwdouble\phantatom{C}\nwtriple\atom{\tt NW}}
+\side{\nnwsingle\phantatom{C}\nnwdouble\phantatom{C}\nnwtriple
+\atom{\tt NNW}}
+\side{\nnesingle\phantatom{C}\nnedouble\phantatom{C}\nnetriple
+\atom{\tt NNE}}
+\side{\ssesingle\phantatom{C}\ssedouble\phantatom{C}\ssetriple
+\atom{\tt SSE}}
+\side{\sswsingle\phantatom{C}\sswdouble\phantatom{C}\sswtriple
+\atom{\tt SSW}}
+}
+\hskip 1truecm
+\structure{\phantatom{C}
+\side{\wnwbelow\phantatom{C}\wnwabove\phantatom{C}\wnwevoba
+\atom{\tt WNW}}
+\side{\enebelow\phantatom{C}\eneabove\phantatom{C}\eneevoba
+\atom{\tt ENE}}
+\side{\wswbelow\phantatom{C}\wswabove\phantatom{C}\wswevoba
+\atom{\tt WSW}}
+\side{\esebelow\phantatom{C}\eseabove\phantatom{C}\eseevoba
+\atom{\tt ESE}}
+\side{\swbelow\atom{\tt SW}}
+\side{\sebelow\atom{\tt SE}}
+\side{\nebelow\atom{\tt NE}}
+\side{\nwbelow\atom{\tt NW}}
+\side{\nnwbelow\phantatom{C}\nnwabove\phantatom{C}\nnwevoba
+\atom{\tt NNW}}
+\side{\nnebelow\phantatom{C}\nneabove\phantatom{C}\nneevoba
+\atom{\tt NNE}}
+\side{\ssebelow\phantatom{C}\sseabove\phantatom{C}\sseevoba
+\atom{\tt SSE}}
+\side{\sswbelow\phantatom{C}\sswabove\phantatom{C}\sswevoba
+\atom{\tt SSW}}
+}
+}
+\vskip 1truecm
+\centerline{\it Fig.~1: All available in-plane and out-of-plane bonds.}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf10.tex b/macros/latex209/contrib/chemstruct/chemf10.tex
new file mode 100644
index 0000000000..8d7a709525
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf10.tex
@@ -0,0 +1,19 @@
+%SUBJECT: File CHEMF10.TEX
+
+\vbox{
+\centerline{
+\structure{\nopositioncheck\phantatom{H}\sephantom\atom{N}
+\side{\wswabove\atom{H}}\side{\wnwbelow\atom{H}}\nnesingle\atom{C}
+\side{\nnwabove\atom{H}}\side{\nwbelow\atom{H}}\esingle\atom{C}
+\side{\nnedouble\atom{O}}\ssesingle\atom{O}\sswsingle\atom{H}}
+\hskip 1cm{$\rightleftharpoons$}\hskip 1cm
+\structure{\phantatom{H}\swphantom\atom{N}\side{\sseabove\atom{H}}
+\side{\sebelow\atom{H}}\nnesingle\atom{C}\side{\nnwabove\atom{H}}
+\side{\nwbelow\atom{H}}\esingle\atom{C}\side{\nnedouble\atom{O}}
+\ssesingle\atom{O}\esingle\atom{H}}
+}
+\vskip 1truecm
+\centerline{\it
+Fig.~10: Two conformeres of neutral glycine in equilibrium}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf11.tex b/macros/latex209/contrib/chemstruct/chemf11.tex
new file mode 100644
index 0000000000..d238c94cf7
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf11.tex
@@ -0,0 +1,24 @@
+%SUBJECT: File CHEMF11.TEX
+
+\newbox\monomera\setbox\monomera=
+\structure{\nopositioncheck\esingle\atom{C}
+\side{\nsingle\atom{C}\epin{H$_3$}}
+\atom{H}\esingle\atom{CH$_2$}}
+\newbox\monomerb\setbox\monomerb=
+\structure{\nopositioncheck\esingle\atom{C}
+\side{\ssingle\atom{C}\epin{H$_3$}}
+\atom{H}\esingle\atom{CH$_2$}}
+\newbox\monomere\setbox\monomere=
+\structure{\nopositioncheck\esingle\atom{C}
+\side{\nsingle\atom{C}\epin{H$_3$}}
+\atom{H}\esingle\atom{CH$_2$}\esingle\phantatom{}}
+\vbox{
+\centerline{\copy\monomera\copy\monomera\copy\monomera\copy\monomera
+\copy\monomera\copy\monomera\copy\monomere}
+\vskip 1truecm
+\centerline{\copy\monomera\copy\monomerb\copy\monomera\copy\monomerb
+\copy\monomera\copy\monomerb\copy\monomere}
+\vskip 1truecm
+\centerline{\it Fig.~11: Isotactic and syndiotactic polypropylene}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf12.tex b/macros/latex209/contrib/chemstruct/chemf12.tex
new file mode 100644
index 0000000000..8c3b6de00c
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf12.tex
@@ -0,0 +1,36 @@
+%SUBJECT: File CHEMF12.TEX
+
+\vbox{
+\centerline{\structure{
+\atom{C}\epin{H$_3$}\nnwsingle\atom{C}\wpin{H$_2$}
+\nnesingle\atom{C}\epin{H$_2$}\nnwsingle\atom{C}\wpin{H$_2$}
+\nnesingle\atom{C}\epin{H$_2$}\nnwsingle\atom{C}\wpin{H$_2$}
+\nnesingle\atom{C}\epin{H$_2$}\nnwsingle\atom{C}\wpin{H$_2$}
+\nnesingle\atom{C}\epin{H$_2$}\nnwsingle\atom{C}\wpin{H$_2$}
+\nnesingle\atom{C}\epin{H$_2$}\nnwsingle\atom{C}\wpin{H$_2$}
+\nnesingle\atom{C}\epin{H$_2$}\nnwsingle\atom{C}\wpin{H$_2$}
+\nnesingle\atom{C}\epin{H$_2$}\nnwsingle\atom{C}\side{\wdouble\atom{O}}
+\nnesingle\atom{O}\nesingle\atom{C}\epin{H$_2$}
+\nnesingle\firstbicycloatom{C}\side{\wsingle\atom{H}}
+\nnwsingle\atom{C}\wpin{H$_2$}\nnesingle\atom{O}
+\side{\nsingle\atom{P}\side{\esingle\atom{O$^\ominus$}}
+\side{\ndouble\atom{O}}
+\side{\wsingle\atom{O}\swsingle\atom{CH$_2$}\nwsingle
+\atom{~~H$_3$C---N$^\oplus$---CH$_2$}
+\side{\nsingle\atom{C}\epin{H$_3$}}\side{\ssingle\atom{C}\epin{H$_3$}}}}
+\ephantom\phantatom{OOO}\ephantom\ssephantom\phantatom{O}\sswphantom
+\secondbicycloatom{O}\sesingle\atom{C}\side{\nedouble\atom{O}}
+\ssesingle\atom{C}\epin{H$_2$}\sswsingle\atom{C}\wpin{H$_2$}
+\ssesingle\atom{C}\epin{H$_2$}\sswsingle\atom{C}\wpin{H$_2$}
+\ssesingle\atom{C}\epin{H$_2$}\sswsingle\atom{C}\wpin{H$_2$}
+\ssesingle\atom{C}\epin{H$_2$}\sswsingle\atom{C}\side{\wsingle\atom{H}}
+\ssedouble\atom{C}\side{\swsingle\atom{H}}
+\sesingle\atom{C}\epin{H$_2$}\ssesingle\atom{C}\wpin{H$_2$}
+\sesingle\atom{C}\epin{H$_2$}\ssesingle\atom{C}\wpin{H$_2$}
+\sesingle\atom{C}\epin{H$_2$}\ssesingle\atom{C}\wpin{H$_2$}
+\sesingle\atom{C}\epin{H$_2$}\ssesingle\atom{C}\epin{H$_3$}}}
+\vskip 1truecm
+\centerline{\it Fig.~12:
+1-Palmitoyl-2-oleoyl-3-\underbar{sn}-glycerophosphocholin}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf2.tex b/macros/latex209/contrib/chemstruct/chemf2.tex
new file mode 100644
index 0000000000..589cc1a513
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf2.tex
@@ -0,0 +1,53 @@
+%SUBJECT: File CHEMF2.TEX
+
+\vbox{
+\centerline{
+\structure{\nopositioncheck\atom{C}\esingle\atom{C}\nnwsingle
+\atom{C}\sswsingle\atom{C}}
+\hskip 1truecm
+\structure{\nopositioncheck\atom{C}\nsingle\atom{C}\sesingle\atom{C}
+\swsingle\atom{C}}
+\hskip 1truecm
+\structure{\nopositioncheck\atom{C}\nsingle\atom{C}\esingle\atom{C}
+\ssingle\atom{C}\wsingle\atom{C}}
+\hskip 1truecm
+\structure{\atom{C}\nwsingle\atom{C}\nesingle\atom{C}\sesingle
+\atom{C}\swsingle\atom{C}}
+\hskip 1truecm
+\structure{\atom{C}\nnwsingle\atom{C}\nesingle\atom{C}\sesingle
+\atom{C}\sswsingle\atom{C}\wsingle\atom{C}}
+}
+\vskip 1truecm
+\centerline{
+\structure{\atom{C}\nwsingle\atom{C}\nsingle\atom{C}\nesingle\atom{C}
+\sesingle\atom{C}\ssingle\atom{C}\swsingle\atom{C}}
+\hskip 1truecm
+\structure{\atom{C}\nnwsingle\atom{C}\nnesingle\atom{C}\esingle
+\atom{C}\ssesingle\atom{C}\sswsingle\atom{C}\wsingle\atom{C}}
+\hskip 1truecm
+\structure{\atom{C}\nnwsingle\atom{C}\nnesingle\atom{C}\esingle
+\atom{C}\sesingle\atom{C}\ssingle\atom{C}\swsingle\atom{C}\wsingle
+\atom{C}}
+\hskip 1truecm
+\structure{\atom{C}\nwsingle\atom{C}\nnwsingle\atom{C}\nesingle
+\atom{C}\esingle\atom{C}\sesingle\atom{C}\sswsingle\atom{C}\swsingle
+\atom{C}}
+}
+\vskip 1truecm
+\centerline{
+\structure{\atom{C}\nwsingle\atom{C}\nsingle\atom{C}\nesingle\atom{C}
+\esingle\atom{C}\sesingle\atom{C}\ssingle\atom{C}\swsingle\atom{C}
+\wsingle\atom{C}}
+\hskip 1truecm
+\structure{\atom{C}\nwsingle\atom{C}\nnwsingle\atom{C}\nsingle
+\atom{C}\nesingle\atom{C}\esingle\atom{C}\sesingle\atom{C}\ssingle
+\atom{C}\sswsingle\atom{C}\swsingle\atom{C}}
+\hskip 1truecm
+\structure{\atom{C}\nwsingle\atom{C}\nnwsingle\atom{C}\nnesingle
+\atom{C}\nesingle\atom{C}\esingle\atom{C}\sesingle\atom{C}\ssesingle
+\atom{C}\sswsingle\atom{C}\swsingle\atom{C}\wsingle\atom{C}}
+}
+\vskip 1truecm
+\centerline{\it Fig.~2: Three- to tenmembered carbon rings.}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf3.tex b/macros/latex209/contrib/chemstruct/chemf3.tex
new file mode 100644
index 0000000000..3ca5db6b4c
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf3.tex
@@ -0,0 +1,28 @@
+%SUBJECT: File CHEMF3.TEX
+
+\vbox{
+\centerline{
+\structure{\nopositioncheck\wmostaromatatom{C}\nsingle\atom{C}
+\nesingle\nmostaromatatom{C}\sesingle\emostaromatatom{C}\ssingle
+\atom{C}\swsingle\smostaromatatom{C}\nwsingle\phantatom{C}}
+\hskip 1truecm
+\structure{\nopositioncheck\atom{C}\ndouble\atom{C}\nesingle
+\firstbicycloatom{C}\sesingle\atom{C}\sdouble\atom{C}\swsingle
+\secondbicycloatom{C}\nwsingle\phantatom{C}}
+\hskip 1truecm
+\structure{\nopositioncheck\firstbicycloatom{C}\nsingle
+\phantatom{C}\nesingle\secondbicycloatom{C}\swphantom
+\firstbicycloatom{C}\nephantom\phantatom{C}\sesingle\atom{C}\sdouble
+\atom{C}\swsingle\secondbicycloatom{C}\nwsingle\phantatom{C}}
+\hskip 1truecm
+\structure{\nopositioncheck\firstbicycloatom{C}\sesingle
+\phantatom{C}\nephantom\secondbicycloatom{C}\swsingle
+\firstbicycloatom{C}\nephantom\phantatom{C}\nsingle\phantatom{C}
+\nwsingle\secondbicycloatom{C}\sephantom\firstbicycloatom{C}
+\nwphantom\phantatom{C}\swsingle\secondbicycloatom{C}\ssingle
+\phantatom{C}}
+}
+\vskip 1truecm
+\centerline{\it Fig.~3: Four different benzene structures.}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf45.tex b/macros/latex209/contrib/chemstruct/chemf45.tex
new file mode 100644
index 0000000000..9fb63e4007
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf45.tex
@@ -0,0 +1,21 @@
+%SUBJECT: File CHEMF45.TEX
+
+\hbox{\vbox{
+\hbox to 0.5\hsize{\hss
+\structure{\emostaromatatom{C}\swsingle\smostaromatatom{C}\wsingle
+\atom{C}\nnwsingle\wmostaromatatom{C}\nnesingle\nmostaromatatom{C}
+\esingle\atom{C}\sesingle\wmostaromatatom{C}\nesingle
+\nmostaromatatom{C}\ssesingle\emostaromatatom{C}\sswsingle
+\smostaromatatom{C}\nwsingle\phantatom{C}\nsingle\phantatom{C}}
+\hss}
+\vskip 1truecm
+\hbox to 0.5\hsize{\hss\it Fig.~4: The azulene ring system.\hss}
+}\vbox{
+\hbox to 0.5\hsize{\hss
+\structure{\firstbicycloatom{C}\nnwsingle\atom{C}\eneabove\atom{C}
+\eseevoba\atom{C}\sswsingle\secondbicycloatom{C}}
+\hss}
+\vskip 1truecm
+\hbox to 0.5\hsize{\hss\it Fig.~5: The envelope form of cyclopentane.\hss}
+}}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf6.tex b/macros/latex209/contrib/chemstruct/chemf6.tex
new file mode 100644
index 0000000000..339d56251d
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf6.tex
@@ -0,0 +1,22 @@
+%SUBJECT: File CHEMF6.TEX
+
+\vbox{
+\centerline{
+\structure{\nopositioncheck\atom{H}\esingle\wmostaromatatom{C}
+\nnesingle\nmostaromatatom{C}
+\side{\nnwsingle\atom{C}\side{\nneabove\atom{H}}
+\side{\nebelow\atom{H}}\wsingle\atom{H}}
+\esingle\atom{C}\side{\nnesingle\atom{H}}\ssesingle\emostaromatatom{C}
+\side{\esingle\atom{S}\esingle\wmostaromatatom{C}\nnesingle\atom{C}
+\side{\nnwsingle\atom{H}}\esingle\nmostaromatatom{C}\side{\nnesingle
+\atom{H}}\ssesingle\emostaromatatom{C}\side{\esingle\atom{C}
+\side{\sseabove\atom{H}}\side{\sebelow\atom{H}}\nnesingle\atom{H}}
+\sswsingle\smostaromatatom{C}\side{\ssesingle\atom{H}}\wsingle
+\atom{C}\side{\sswsingle\atom{H}}\nnwsingle\phantatom{C}}
+\sswsingle\atom{C}\side{\ssesingle\atom{H}}\wsingle
+\smostaromatatom{C}\side{\sswsingle\atom{H}}\nnwsingle\phantatom{C}}
+}
+\vskip 1truecm
+\centerline{\it Fig.~6: 3,4'-Ditolylsulfide}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf7.tex b/macros/latex209/contrib/chemstruct/chemf7.tex
new file mode 100644
index 0000000000..78774d2f3b
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf7.tex
@@ -0,0 +1,14 @@
+%SUBJECT: File CHEMF7.TEX
+
+\vbox{
+\centerline{
+\structure{\nopositioncheck\atom{H}\sesingle
+\atom{B}\side{\nesingle\atom{H}}
+\sseabove\atom{H}\sswevoba\atom{B}
+\side{\nnwbelow\atom{H}\nnebelow\phantatom{B}}
+\side{\swsingle\atom{H}}\sesingle\atom{H}}
+}
+\vskip 1truecm
+\centerline{\it Fig.~7: Diborane}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf8.tex b/macros/latex209/contrib/chemstruct/chemf8.tex
new file mode 100644
index 0000000000..27913e488a
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf8.tex
@@ -0,0 +1,20 @@
+%SUBJECT: File CHEMF8.TEX
+
+\vbox{
+\centerline{\structure{\nopositioncheck
+\atom{O}\etriple\atom{C}\esingle\firstbicycloatom{Fe}
+\side{\nwsingle\atom{C}\nwtriple\atom{O}}
+\side{\swsingle\atom{C}\swtriple\atom{O}}
+\sesingle\atom{C}\side{\sdouble\atom{O}}\nesingle\phantatom{Fe}
+\side{\esingle\atom{C}\etriple\atom{O}}
+\side{\sesingle\atom{C}\setriple\atom{O}}
+\side{\nesingle\atom{C}\netriple\atom{O}}
+\nnwsingle\secondbicycloatom{C}\side{\nnedouble\atom{O}}
+\ssephantom\firstbicycloatom{Fe}\swphantom\phantatom{C}\nwphantom
+\phantatom{Fe}\nnesingle\secondbicycloatom{C}\side{\nnwdouble\atom{O}}
+\sswphantom\firstbicycloatom{Fe}\sephantom\phantatom{C}\nephantom
+\secondbicycloatom{Fe}}}
+\vskip 1truecm
+\centerline{\it Fig.~8: Tri-$\mu$-carbonyl-bis(tricarbonyliron)}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemf9.tex b/macros/latex209/contrib/chemstruct/chemf9.tex
new file mode 100644
index 0000000000..53e904dca1
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemf9.tex
@@ -0,0 +1,27 @@
+%SUBJECT: File CHEMF9.TEX
+
+\vbox{
+\centerline{
+\structure{\atom{~~Li$^+$}
+\side{\nwbelow\atom{O}
+\side{\nsingle\atom{H}\nnwbelow\atom{O}\side{\wsingle\atom{H}}
+\nsingle\atom{H}}\swsingle\atom{H}\wnwbelow\atom{O}
+\side{\wsingle\atom{H}}\nsingle\atom{H}}
+\side{\nebelow\atom{O}
+\side{\nsingle\atom{H}\nnebelow\atom{O}\side{\esingle\atom{H}}
+\nsingle\atom{H}}\sesingle\atom{H}\enebelow\atom{O}
+\side{\esingle\atom{H}}\nsingle\atom{H}}
+\side{\swbelow\atom{O}
+\side{\ssingle\atom{H}\sswbelow\atom{O}\side{\wsingle\atom{H}}
+\ssingle\atom{H}}\nwsingle\atom{H}\wswbelow\atom{O}
+\side{\wsingle\atom{H}}\ssingle\atom{H}}
+\side{\sebelow\atom{O}
+\side{\ssingle\atom{H}\ssebelow\atom{O}\side{\esingle\atom{H}}
+\ssingle\atom{H}}\nesingle\atom{H}\esebelow\atom{O}
+\side{\esingle\atom{H}}\ssingle\atom{H}}}
+}
+\vskip 1truecm
+\centerline
+{\it Fig.~9: A lithium cation surrounded by two hydration spheres}
+}
+
diff --git a/macros/latex209/contrib/chemstruct/chemstruct.tex b/macros/latex209/contrib/chemstruct/chemstruct.tex
new file mode 100644
index 0000000000..13f01ce669
--- /dev/null
+++ b/macros/latex209/contrib/chemstruct/chemstruct.tex
@@ -0,0 +1,564 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Macropaket STRUCTURE
+% chem. Structurformeln mit TeX
+%
+% Autor: Dr. Michael Ramek
+% Institut fuer Physikal. und Theoret. Chemie
+% Technische Universitaet Graz
+%
+% Version 1.0
+% November 1987
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\atom#1{\sAve{#1}\adjustAtom}
+\def\phantatom#1{\sAve{#1}\phAntbox\adjustAtom}
+\def\adjustAtom{\advance\dimen0 by-\dimen6\ifnum\count23=1 \halfbAck\else
+\ifnum\count23=2 \fullbAck\fi\fi\raise\dimen1\box0\ifdim\dimen0<\dimen3 %
+\dimen3=\dimen0\fi\advance\dimen0 by\dimen6\dimen42=\baselineskip
+\dimen52=\count33sp\advance\dimen42 by\dimen1\advance\dimen52 by-\dimen1
+\vrule width0em height\dimen42 depth\dimen52\count23=0}
+
+\def\epin#1{\setbox0=\hbox{#1}\ifnum\count13=0 \phAntbox\fi
+\raise\dimen1\copy0\kern-\wd0\advance\dimen0 by\wd0
+\ifdim\dimen0>\dimen2 \dimen2=\dimen0\fi\advance\dimen0 by-\wd0}
+\def\wpin#1{\kern-\dimen6\setbox0=\hbox{#1}\ifnum\count13=0 \phAntbox\fi
+\kern-\wd0\advance\dimen0 by-\wd0\advance\dimen0 by-\dimen6
+\ifdim\dimen0<\dimen3 \dimen3=\dimen0\fi\advance\dimen0 by\dimen6
+\advance\dimen0 by\wd0\raise\dimen1\box0\kern\dimen6}
+\def\spin#1{\kern-0.5\dimen6\setbox0=\hbox{#1}\ifnum\count13=0 \phAntbox
+\fi\kern-0.5\wd0\advance\dimen1 by-\ht0\advance\dimen1 by-\dp0
+\advance\dimen1 by-0.2em\raise\dimen1\copy0\advance\dimen1 by\ht0
+\advance\dimen1 by\dp0\advance\dimen1 by0.2em\kern-0.5\wd0
+\kern0.5\dimen6}
+\def\npin#1{\kern-0.5\dimen6\setbox0=\hbox{#1}\ifnum\count13=0 \phAntbox
+\fi\kern-0.5\wd0\advance\dimen1 by\ht0\advance\dimen1 by\dp0
+\advance\dimen1 by0.2em\raise\dimen1\copy0\advance\dimen1 by-\ht0
+\advance\dimen1 by-\dp0\advance\dimen1 by-0.2em\kern-0.5\wd0
+\kern0.5\dimen6}
+
+\def\sAve#1{\setbox0=\hbox{#1}\dimen5=\ht0\advance\dimen5 by\dp0
+\dimen6=\wd0\advance\dimen4 by\wd0\advance\dimen0 by\wd0
+\ifdim\dimen0>\dimen2 \dimen2=\dimen0\fi\ifnum\count13=0 \phAntbox\fi}
+\def\phAntbox{\dimen12=\ht0\advance\dimen12 by-\dp0
+\dimen13=-\ht0\advance\dimen13 by\dimen12
+\dimen12=-\dimen12\advance\dimen12 by-\dp0
+\setbox0=\hbox{\vrule width\dimen6 height\dimen12 depth\dimen13}}
+
+\def\side#1{\ifnum\count11>20 %
+\message{Max. nesting of side chains exceeded!}\else
+\advance\count11 by1 \count21=\count11\multiply\count21 by10
+\count31=\count21\advance\count31 by10
+\loop\count41=\count31\advance\count41 by-10
+\ifnum\count41>0 \dimen\count31=\dimen\count41\advance\count31 by-1
+\repeat\count31=\count21\advance\count31 by20
+\loop\count41=\count31\advance\count41 by-10
+\ifnum\count41>10 \count\count31=\count\count41\advance\count31 by-10
+\repeat\dimen4=0em\count20=0 #1\kern-\dimen4\advance\dimen0 by-\dimen4
+\dimen1=\dimen11\count31=4\advance\count21 by1
+\loop\count41=\count31\advance\count41 by10
+\ifnum\count31<\count21 \dimen\count31=\dimen\count41\advance\count31 by1
+\repeat\advance\count21 by20\count31=20\ifnum\count20>0 %
+\message{Incomplete aromatic system in side chain ignored!}%
+\fi\loop\count41=\count31\advance\count41 by10
+\ifnum\count41<\count21 \count\count31=\count\count41
+\advance\count31 by10\repeat\advance\count11 by-1\fi}
+
+
+\def\fullbAck{\advance\dimen4 by-\dimen6\advance\dimen0 by-\dimen6
+\kern-\dimen6}
+\def\halfbAck{\advance\dimen4 by-0.5\dimen6\advance\dimen0 by-0.5\dimen6
+\kern-0.5\dimen6}
+\def\hstrIch{\hbox to 0.784em
+{\hss\vrule width0.6em height0.36em depth-0.32em\hss}}
+\def\nestrIch{\ifnum\count83=0 \setbox83=\hbox{\count12=0\dimen12=0.65em
+\kern0.09em\loop\dimen13=\dimen12\advance\dimen13 by-0.06em
+\vrule height\dimen12 depth-\dimen13 width0.012em
+\advance\dimen12 by0.0083em\advance\count12 by1 \ifnum\count12<50 \repeat
+\kern0.09em}\count83=1\fi\sAve{\copy83}}
+\def\nwstrIch{\ifnum\count93=0 \setbox93=\hbox{\count12=0\dimen12=0.65em
+\kern0.09em\loop\dimen13=\dimen12\advance\dimen13 by-0.06em
+\vrule height\dimen12 depth-\dimen13 width0.012em
+\advance\dimen12 by-0.0083em\advance\count12 by1 \ifnum\count12<50 %
+\repeat\kern0.09em}\count93=1\fi\sAve{\copy93}}
+\def\dotbackslAsh{\setbox1=\hbox{.}\raise0.650em\copy1
+\kern-0.15em\raise0.425em\copy1\kern-0.15em\raise0.200em\copy1
+\kern-0.15em\lower0.025em\copy1\kern-0.15em\lower0.250em\box1\kern0.08em}
+\def\dotslAsh{\setbox1=\hbox{.}\lower0.250em\copy1
+\kern-0.15em\lower0.025em\copy1\kern-0.15em\raise0.200em\copy1
+\kern-0.15em\raise0.425em\copy1\kern-0.15em\raise0.650em\box1\kern0.08em}
+\def\nnepfEil{\ifnum\count13=0 \sAve{\vrule height0em width0.377838em}%
+\else\sAve{\kern0.09em\dimen12=0.546em\dimen13=-0.541em\loop
+\ifdim\dimen13<0.554em \vrule width0.004em depth\dimen12 height\dimen13
+\advance\dimen12 by-0.015em\advance\dimen13 by0.05em\repeat
+\loop\ifdim\dimen13>-\dimen12 \vrule width0.004em depth\dimen12 %
+height\dimen13\advance\dimen12 by-0.015em\advance\dimen13 by-0.0005em
+\repeat}\fi}
+\def\enepfEil{\ifnum\count63=0 \setbox63=\hbox{\dimen12=0.086em
+\dimen13=-\dimen12\kern0.1em\loop\advance\dimen12 by-0.003em
+\advance\dimen13 by0.011em\ifdim\dimen13<0.2em %
+\vrule width0.025em depth\dimen12 height\dimen13\repeat
+\vrule width0.025em depth\dimen12 height0.1em\kern0.07em}\count63=1 \fi
+\sAve{\copy63}}
+\def\esepfEil{\ifnum\count43=0 \setbox43=\hbox{\dimen12=-0.086em
+\dimen13=-\dimen12\kern0.1em\loop\advance\dimen12 by0.003em
+\advance\dimen13 by-0.011em\ifdim\dimen13>-0.2em %
+\vrule width0.025em depth-\dimen13 height-\dimen12\repeat
+\vrule width0.025em height-\dimen12 depth0.1em\kern0.07em}\count43=1 \fi
+\sAve{\copy43}}
+\def\ssepfEil{\ifnum\count13=0 \sAve{\vrule height0em width0.377838em}
+\else\sAve{\kern0.09em\dimen12=0.546em\dimen13=-0.541em\loop
+\ifdim\dimen13<0.554em \vrule width0.004em height\dimen12 depth\dimen13
+\advance\dimen12 by-0.015em\advance\dimen13 by0.05em\repeat\loop
+\ifdim\dimen13>-\dimen12 \vrule width0.004em height\dimen12 depth\dimen13
+\advance\dimen12 by-0.015em\advance\dimen13 by-0.0005em\repeat}\fi}
+\def\sswpfEil{\ifnum\count13=0 \sAve{\vrule height0em width0.377838em}
+\else\sAve{\dimen12=-0.5em\dimen13=0.53em\loop\ifdim\dimen13<0.554em %
+\vrule width0.004em height\dimen12 depth\dimen13
+\advance\dimen12 by0.015em\advance\dimen13 by0.0005em\repeat
+\loop\ifdim\dimen12<0.546em %
+\vrule width0.004em height\dimen12 depth\dimen13
+\advance\dimen13 by-0.05em\advance\dimen12 by0.015em\repeat\kern0.05em}%
+\fi}
+\def\wswpfEil{\ifnum\count53=0 \setbox53=\hbox{\dimen12=0em\kern0.07em
+\vrule width0.025em depth0.1em height0em\advance\dimen12 by0.003em
+\dimen13=0.2em\loop\ifdim\dimen12>-\dimen13 %
+\vrule width0.025em depth\dimen13 height\dimen12
+\advance\dimen12 by0.003em\advance\dimen13 by-0.011em\repeat\kern0.1em}%
+\count53=1 \fi\sAve{\copy53}}
+\def\wnwpfEil{\ifnum\count73=0 \setbox73=\hbox{\dimen12=0em\kern0.07em
+\vrule width0.025em depth0em height0.1em\advance\dimen12 by0.003em
+\dimen13=0.2em\loop\ifdim\dimen12>-\dimen13 %
+\vrule width0.025em depth\dimen12 height\dimen13
+\advance\dimen12 by0.003em\advance\dimen13 by-0.011em\repeat\kern0.1em}%
+\count73=1 \fi\sAve{\copy73}}
+\def\nnwpfEil{\ifnum\count13=0 \sAve{\vrule height0em width0.377838em}
+\else\sAve{\dimen12=-0.5em\dimen13=0.53em\loop\ifdim\dimen13<0.554em %
+\vrule width0.004em depth\dimen12 height\dimen13
+\advance\dimen12 by0.015em\advance\dimen13 by0.0005em\repeat\loop
+\ifdim\dimen12<0.546em \vrule width0.004em depth\dimen12 height\dimen13
+\advance\dimen12 by0.015em\advance\dimen13 by-0.05em\repeat\kern0.05em}%
+\fi}
+
+\def\nphantom{\adjUstn\postadjUstn}
+\def\nsingle{\adjUstn\raise\dimen1\nstrIch\postadjUstn}
+\def\ndouble{\adjUstn\kern0.1em\raise\dimen1\nstrIch\kern-0.2em
+\raise\dimen1\nstrIch\kern0.1em\postadjUstn}
+\def\ntriple{\adjUstn\kern-0.2em\raise\dimen1\nstrIch\kern0.2em
+\raise\dimen1\nstrIch\kern0.2em\raise\dimen1\nstrIch\kern-0.2em
+\postadjUstn}
+\def\adjUstn{\advance\dimen1 by1.111111\dimen5\halfbAck}
+\def\postadjUstn{\advance\dimen1 by1.352em\count23=1}
+\def\nstrIch{\ifnum\count13=0 %
+\hbox{\vrule width0em height1.19em depth-0.1em}\else
+\hbox{\vrule width0.04em height1.19em depth-0.1em}\kern-0.04em\fi}
+
+\def\nneabove{\advance\dimen1 by2.05\dimen5\halfbAck\nnepfEil
+\raise\dimen1\box0\kern0.17\dimen6\advance\dimen4 by0.17\dimen6
+\advance\dimen0 by0.17\dimen6\advance\dimen1 by0.803em\count23=1}
+\def\nneevoba{\advance\dimen1 by2.05\dimen5\halfbAck\sswpfEil
+\raise\dimen1\box0\kern0.34\dimen6\advance\dimen4 by0.34\dimen6
+\advance\dimen0 by0.34\dimen6\advance\dimen1 by0.803em\count23=1}
+\def\nnebelow{\advance\dimen1 by2.05\dimen5\halfbAck
+\sAve{\setbox1=\hbox{.}\lower0.555em\copy1\kern-0.23em
+\lower0.310em\copy1\kern-0.23em\lower0.065em\copy1\kern-0.23em
+\raise0.180em\copy1\kern-0.23em\raise0.425em\box1}\raise\dimen1\box0
+\kern-0.05\dimen6\advance\dimen4 by-0.05\dimen6
+\advance\dimen0 by-0.05\dimen6\advance\dimen1 by0.803em\count23=1}
+\def\nnephantom{\halfbAck\sAve{/}\phAntbox\adjUstnne\raise\dimen1\box0
+\postadjUstnne}
+\def\nnesingle{\halfbAck\sAve{/}\adjUstnne\raise\dimen1\box0
+\postadjUstnne}
+\def\nnedouble{\halfbAck\sAve{/}\adjUstnne\advance\dimen1 by0.031em
+\kern-0.093em\raise\dimen1\copy0\advance\dimen1 by-0.062em\kern-\wd0
+\kern0.186em\raise\dimen1\box0\kern-0.093em\advance\dimen1 by0.031em
+\postadjUstnne}
+\def\nnetriple{\halfbAck\sAve{/}\adjUstnne\advance\dimen1 by0.062em
+\kern-0.186em\raise\dimen1\copy0\advance\dimen1 by-0.062em\kern-\wd0
+\kern0.186em\raise\dimen1\copy0\advance\dimen1 by-0.062em\kern-\wd0
+\kern0.186em\raise\dimen1\box0\kern-0.186em\advance\dimen1 by0.062em
+\postadjUstnne}
+\def\adjUstnne{\advance\dimen1 by1.111111\dimen5\kern0.37\dimen6
+\advance\dimen4 by0.37\dimen6\advance\dimen0 by0.37\dimen6}
+\def\postadjUstnne{\advance\dimen1 by\dimen5\kern0.13\dimen6
+\advance\dimen4 by0.13\dimen6\advance\dimen0 by0.13\dimen6
+\ifdim\dimen0>\dimen2 \dimen2=\dimen0\fi\count23=1}
+
+\def\nebelow{\halfbAck\sAve{\dotslAsh}\adjUstnne\raise\dimen1\box0
+\postadjUstnne}
+\def\nephantom{\nestrIch\phAntbox\raise\dimen1\box0
+\advance\dimen1 by1.055em}
+\def\nesingle{\nestrIch\raise\dimen1\box0\advance\dimen1 by1.055em}
+\def\nedouble{\nestrIch\advance\dimen1 by0.0707em\kern-0.0707em
+\raise\dimen1\copy0\kern-\wd0\kern0.1414em\advance\dimen1 by-0.1414em
+\raise\dimen1\box0\kern-0.0707em\advance\dimen1 by1.1257em}
+\def\netriple{\nestrIch\raise\dimen1\copy0\kern-\wd0\kern-0.1414em
+\advance\dimen1 by0.1414em\raise\dimen1\copy0\kern-\wd0\kern0.2828em
+\advance\dimen1 by-0.2828em\raise\dimen1\box0\kern-0.1414em
+\advance\dimen1 by1.1964em}
+
+\def\eneabove{\advance\dimen1 by0.49em\enepfEil\raise\dimen1\box0
+\advance\dimen1 by-0.09em}
+\def\eneevoba{\advance\dimen1 by0.585em\wswpfEil\raise\dimen1\box0
+\advance\dimen1 by-0.185em}
+\def\enebelow{\advance\dimen1 by0.51em\sAve{\setbox1=\hbox{.}\kern0.01em
+\lower0.125em\copy1\lower0.025em\copy1\raise0.075em\box1}%
+\raise\dimen1\box0\advance\dimen1 by-0.11em}
+
+\def\ephantom{\sAve{\hstrIch}\phAntbox\raise\dimen1\box0}
+\def\esingle{\sAve{\hstrIch}\raise\dimen1\box0}
+\def\edouble{\sAve{\hstrIch}\advance\dimen1 by0.1em\raise\dimen1\copy0
+\kern-\wd0\advance\dimen1 by-0.2em\raise\dimen1\box0
+\advance\dimen1 by0.1em}
+\def\etriple{\sAve{\hstrIch}\advance\dimen1 by0.2em\raise\dimen1\copy0
+\kern-\wd0\advance\dimen1 by-0.2em\raise\dimen1\copy0
+\advance\dimen1 by-0.2em\kern-\wd0\raise\dimen1\box0
+\advance\dimen1 by0.2em}
+
+\def\eseabove{\advance\dimen1 by0.19em\esepfEil\raise\dimen1\box0
+\advance\dimen1 by-0.59em}
+\def\eseevoba{\advance\dimen1 by0.09em\wnwpfEil\raise\dimen1\box0
+\advance\dimen1 by-0.49em}
+\def\esebelow{\advance\dimen1 by0.17em\sAve{\setbox1=\hbox{.}\kern0.01em
+\raise0.025em\copy1\lower0.075em\copy1\lower0.175em\box1\kern0.01em}%
+\raise\dimen1\box0\advance\dimen1 by-0.57em}
+
+\def\sebelow{\ssegenerAl{\dotbackslAsh}}
+\def\sephantom{\nwstrIch\phAntbox\advance\dimen1 by-0.628em
+\raise\dimen1\box0\advance\dimen1 by-0.428em}
+\def\sesingle{\nwstrIch\advance\dimen1 by-0.628em\raise\dimen1\box0
+\advance\dimen1 by-0.428em}
+\def\sedouble{\nwstrIch\advance\dimen1 by-0.6987em\kern-0.0707em
+\raise\dimen1\copy0\kern-\wd0\kern0.1414em\advance\dimen1 by0.1414em
+\raise\dimen1\box0\kern-0.0707em\advance\dimen1 by-0.4987em}
+\def\setriple{\nwstrIch\advance\dimen1 by-0.628em\raise\dimen1\copy0
+\kern-\wd0\kern-0.1414em\advance\dimen1 by-0.1414em\raise\dimen1\copy0
+\kern-\wd0\kern0.2828em\advance\dimen1 by0.2828em\raise\dimen1\box0
+\kern-0.1414em\advance\dimen1 by-0.5694em}
+
+\def\sseabove{\advance\dimen1 by-1.222222\dimen5\halfbAck\ssepfEil
+\raise\dimen1\box0\kern-0.06\dimen6\advance\dimen4 by-0.06\dimen6
+\advance\dimen0 by-0.06\dimen6\advance\dimen1 by-1.366666em\count23=1}
+\def\sseevoba{\advance\dimen1 by-1.222222\dimen5\halfbAck\nnwpfEil
+\raise\dimen1\box0\kern0.06\dimen6\advance\dimen4 by0.06\dimen6
+\advance\dimen0 by0.06\dimen6\advance\dimen1 by-1.366666em\count23=1}
+\def\ssebelow{\advance\dimen1 by-1.222222\dimen5\halfbAck
+\sAve{\setbox1=\hbox{.}\raise.455em\copy1\kern-.23em\raise.210em\copy1
+\kern-.23em\lower.035em\copy1\kern-.23em\lower.280em\copy1\kern-.23em
+\lower.525em\box1}\kern-0.08\dimen6\raise\dimen1\box0\kern-0.17\dimen6
+\advance\dimen4 by-0.25\dimen6\advance\dimen0 by-0.25\dimen6
+\advance\dimen1 by-1.366666em\count23=1}
+\def\ssephantom{\halfbAck\sAve{$\backslash$}\phAntbox\adjUstsse
+\raise\dimen1\box0\postadjUstsse}
+\def\ssesingle{\ssegenerAl{$\backslash$}}
+\def\ssedouble{\halfbAck\sAve{$\backslash$}\adjUstsse
+\advance\dimen1 by0.031em\kern0.093em\raise\dimen1\copy0
+\advance\dimen1 by-0.062em\kern-\wd0\kern-0.186em\raise\dimen1\box0
+\kern0.093em\advance\dimen1 by0.031em\postadjUstsse}
+\def\ssetriple{\halfbAck\sAve{$\backslash$}\adjUstsse
+\advance\dimen1 by0.062em\kern0.186em\raise\dimen1\copy0
+\advance\dimen1 by-0.062em\kern-\wd0\kern-0.186em\raise\dimen1\copy0
+\advance\dimen1 by-0.062em\kern-\wd0\kern-0.186em\raise\dimen1\box0
+\kern0.186em\advance\dimen1 by0.062em\postadjUstsse}
+\def\ssegenerAl#1{\halfbAck\sAve{#1}\adjUstsse\raise\dimen1\box0
+\postadjUstsse}
+\def\adjUstsse{\kern0.23\dimen6\advance\dimen4 by0.23\dimen6
+\advance\dimen0 by0.23\dimen6\advance\dimen1 by-\dimen5}
+\def\postadjUstsse{\advance\dimen1 by-1.111111\dimen5\kern0.27\dimen6
+\advance\dimen4 by0.27\dimen6\advance\dimen0 by0.27\dimen6
+\ifdim\dimen0>\dimen2 \dimen2=\dimen0\fi\count23=1}
+
+\def\sphantom{\adjUsts\postadjUsts}
+\def\ssingle{\adjUsts\raise\dimen1\sstrIch\postadjUsts}
+\def\sdouble{\adjUsts\kern0.1em\raise\dimen1\sstrIch\kern-0.2em
+\raise\dimen1\sstrIch\kern0.1em\postadjUsts}
+\def\striple{\adjUsts\kern-0.2em\raise\dimen1\sstrIch\kern0.2em
+\raise\dimen1\sstrIch\kern0.2em\raise\dimen1\sstrIch\kern-0.2em
+\postadjUsts}
+\def\adjUsts{\advance\dimen1 by-1.111111\dimen5\halfbAck}
+\def\postadjUsts{\advance\dimen1 by-1.352em\count23=1}
+\def\sstrIch{\ifnum\count13=0 %
+\hbox{\vrule width0em height0.54em depth0.55em}\else
+\hbox{\vrule width0.04em height0.54em depth0.55em}\kern-0.04em\fi}
+
+\def\sswabove{\advance\dimen1 by-1.222222\dimen5\halfbAck\sswpfEil
+\kern-1.25\dimen6\raise\dimen1\box0\kern-0.81\dimen6
+\advance\dimen4 by-2.06\dimen6\advance\dimen0 by-2.06\dimen6
+\advance\dimen1 by-1.366666em\count23=1}
+\def\sswevoba{\advance\dimen1 by-1.222222\dimen5\halfbAck\nnepfEil
+\kern-1.1\dimen6\raise\dimen1\box0\kern-0.83\dimen6
+\advance\dimen4 by-1.93\dimen6\advance\dimen0 by-1.93\dimen6
+\advance\dimen1 by-1.366666em\count23=1}
+\def\sswbelow{\advance\dimen1 by-1.222222\dimen5\halfbAck
+\sAve{\setbox1=\hbox{.}\lower0.505em\copy1\kern-0.23em\lower0.260em\copy1
+\kern-0.23em\lower0.015em\copy1\kern-0.23em\raise0.230em\copy1
+\kern-0.23em\raise0.475em\box1}\kern-0.9\dimen6\raise\dimen1\box0
+\kern-0.85\dimen6\advance\dimen4 by-1.75\dimen6
+\advance\dimen0 by-1.75\dimen6\advance\dimen1 by-1.366666em\count23=1}
+\def\sswphantom{\halfbAck\sAve{/}\phAntbox\adjUstssw\raise\dimen1\box0
+\postadjUstssw}
+\def\sswsingle{\sswgenerAl{/}}
+\def\sswdouble{\halfbAck\sAve{/}\adjUstssw\advance\dimen1 by0.031em
+\kern-0.093em\raise\dimen1\copy0\advance\dimen1 by-0.062em\kern-\wd0
+\kern0.186em\raise\dimen1\box0\kern-0.093em\advance\dimen1 by0.031em
+\postadjUstssw}
+\def\sswtriple{\halfbAck\sAve{/}\adjUstssw\advance\dimen1 by0.062em
+\kern-0.186em\raise\dimen1\copy0\advance\dimen1 by-0.062em\kern-\wd0
+\kern0.186em\raise\dimen1\copy0\advance\dimen1 by-0.062em\kern-\wd0
+\kern0.186em\raise\dimen1\box0\kern-0.186em\advance\dimen1 by0.062em
+\postadjUstssw}
+\def\sswgenerAl#1{\halfbAck\sAve{#1}\adjUstssw\raise\dimen1\box0
+\postadjUstssw}
+\def\adjUstssw{\kern-1.1\dimen6\advance\dimen1 by-\dimen5
+\advance\dimen4 by-1.1\dimen6\advance\dimen0 by-1.1\dimen6}
+\def\postadjUstssw{\advance\dimen1 by-1.111111\dimen5\kern-1.4\dimen6
+\advance\dimen0 by-1.4\dimen6\advance\dimen4 by-1.4\dimen6\count23=1}
+
+\def\swbelow{\sswgenerAl{\dotslAsh}}
+\def\swphantom{\fullbAck\nestrIch\phAntbox\advance\dimen1 by-1.054em
+\fullbAck\raise\dimen1\box0\fullbAck\count23=2}
+\def\swsingle{\fullbAck\nestrIch\advance\dimen1 by-1.054em\fullbAck
+\raise\dimen1\box0\fullbAck\count23=2}
+\def\swdouble{\fullbAck\nestrIch\advance\dimen1 by-1.1247em\fullbAck
+\kern0.0707em\raise\dimen1\copy0\kern-\wd0\kern-0.1414em
+\advance\dimen1 by0.1414em\raise\dimen1\box0\kern0.0707em
+\fullbAck\advance\dimen1 by-0.0707em\count23=2}
+\def\swtriple{\fullbAck\nestrIch\advance\dimen1 by-1.054em\fullbAck
+\raise\dimen1\copy0\kern-\wd0\kern-0.1414em\advance\dimen1 by0.1414em
+\raise\dimen1\copy0\kern-\wd0\kern0.2828em\advance\dimen1 by-0.2828em
+\raise\dimen1\box0\kern-0.1414em\fullbAck\advance\dimen1 by0.1414em
+\count23=2}
+
+\def\wswabove{\advance\dimen1 by0.19em\fullbAck\wswpfEil\fullbAck
+\raise\dimen1\box0\advance\dimen1 by-0.59em\fullbAck\count23=2}
+\def\wswevoba{\advance\dimen1 by0.09em\fullbAck\enepfEil\fullbAck
+\raise\dimen1\box0\advance\dimen1 by-0.49em\fullbAck\count23=2}
+\def\wswbelow{\advance\dimen1 by0.12em\fullbAck\sAve{\setbox1=\hbox{.}%
+\kern0.01em\lower0.125em\copy1\lower0.025em\copy1\raise0.075em\box1}%
+\fullbAck\raise\dimen1\box0\advance\dimen1 by-0.52em\fullbAck\count23=2}
+
+\def\wphantom{\adjUstw\advance\dimen0 by-\dimen6
+\advance\dimen4 by-\dimen6\count23=2}
+\def\wsingle{\adjUstw\raise\dimen1\box0\fullbAck\count23=2}
+\def\wdouble{\adjUstw\advance\dimen1 by0.1em
+\raise\dimen1\copy0\kern-\wd0\advance\dimen1 by-0.2em\raise\dimen1\box0
+\advance\dimen1 by0.1em\fullbAck\count23=2}
+\def\wtriple{\adjUstw\advance\dimen1 by0.2em\raise\dimen1\copy0\kern-\wd0
+\advance\dimen1 by-0.2em\raise\dimen1\copy0\kern-\wd0
+\advance\dimen1 by-0.2em\raise\dimen1\box0\advance\dimen1 by0.2em
+\fullbAck\count23=2}
+\def\adjUstw{\fullbAck\sAve{\hstrIch}\fullbAck
+\ifdim\dimen0<\dimen3 \dimen3=\dimen0\fi}
+
+\def\wnwabove{\advance\dimen1 by0.49em\fullbAck\wnwpfEil\fullbAck
+\raise\dimen1\box0\advance\dimen1 by-0.09em\fullbAck\count23=2}
+\def\wnwevoba{\advance\dimen1 by0.59em\fullbAck\esepfEil\fullbAck
+\raise\dimen1\box0\advance\dimen1 by-0.19em\fullbAck\count23=2}
+\def\wnwbelow{\advance\dimen1 by0.56em\fullbAck\sAve{\setbox1=\hbox{.}%
+\kern0.01em\raise0.025em\copy1\lower0.075em\copy1\lower0.175em\box1
+\kern0.01em}\fullbAck\raise\dimen1\box0\advance\dimen1 by-0.16em
+\fullbAck\count23=2}
+
+\def\nwbelow{\nnwgenerAl{\dotbackslAsh}}
+\def\nwphantom{\fullbAck\nwstrIch\phAntbox\fullbAck
+\advance\dimen1 by0.42em\raise\dimen1\box0\fullbAck
+\advance\dimen1 by0.635em\count23=2}
+\def\nwsingle{\fullbAck\nwstrIch\fullbAck\advance\dimen1 by0.42em
+\raise\dimen1\box0\fullbAck\advance\dimen1 by0.635em\count23=2}
+\def\nwdouble{\fullbAck\nwstrIch\fullbAck\kern-0.0707em
+\advance\dimen1 by0.3493em\raise\dimen1\copy0\kern-\wd0\kern0.1414em
+\advance\dimen1 by0.1414em\raise\dimen1\box0\kern-0.0707em
+\advance\dimen1 by0.5643em\fullbAck\count23=2}
+\def\nwtriple{\fullbAck\nwstrIch\fullbAck\advance\dimen1 by0.42em
+\raise\dimen1\copy0\kern-\wd0\kern-0.1414em\advance\dimen1 by-0.1414em
+\raise\dimen1\copy0\kern-\wd0\kern0.2828em\advance\dimen1 by0.2828em
+\raise\dimen1\box0\kern-0.1414em\fullbAck\advance\dimen1 by0.4936em
+\count23=2}
+
+\def\nnwabove{\advance\dimen1 by2.05\dimen5\halfbAck\nnwpfEil
+\kern-1.14\dimen6\raise\dimen1\box0\advance\dimen1 by0.803em
+\kern-1.20\dimen6\advance\dimen4 by-2.34\dimen6
+\advance\dimen0 by-2.34\dimen6\count23=1}
+\def\nnwevoba{\advance\dimen1 by2.05\dimen5\halfbAck\ssepfEil
+\kern-1.06\dimen6\raise\dimen1\box0\advance\dimen1 by0.803em
+\kern-1.11\dimen6\advance\dimen4 by-2.17\dimen6
+\advance\dimen0 by-2.17\dimen6\count23=1}
+\def\nnwbelow{\advance\dimen1 by2.05\dimen5\halfbAck
+\sAve{\setbox1=\hbox{.}\raise0.435em\copy1\kern-0.23em\raise0.190em\copy1
+\kern-0.23em\lower0.075em\copy1\kern-0.23em\lower0.3em\copy1
+\kern-0.23em\lower0.545em\box1}\kern-0.9\dimen6\raise\dimen1\box0
+\kern-1.05\dimen6\advance\dimen4 by-1.95\dimen6
+\advance\dimen0 by-1.95\dimen6\advance\dimen1 by0.803em\count23=1}
+\def\nnwphantom{\halfbAck\sAve{$\backslash$}\phAntbox\adjUstnnw
+\raise\dimen1\box0\postadjUstnnw}
+\def\nnwsingle{\nnwgenerAl{$\backslash$}}
+\def\nnwdouble{\halfbAck\sAve{$\backslash$}\adjUstnnw
+\advance\dimen1 by0.031em\kern0.093em\raise\dimen1\copy0
+\advance\dimen1 by-0.062em\kern-\wd0\kern-0.186em\raise\dimen1\box0
+\kern0.093em\advance\dimen1 by0.031em\postadjUstnnw}
+\def\nnwtriple{\halfbAck\sAve{$\backslash$}\adjUstnnw
+\advance\dimen1 by0.062em\kern0.186em\raise\dimen1\copy0
+\advance\dimen1 by-0.062em\kern-\wd0\kern-0.186em\raise\dimen1\copy0
+\advance\dimen1 by-0.062em\kern-\wd0\kern-0.186em\raise\dimen1\box0
+\kern0.186em\advance\dimen1 by0.062em\postadjUstnnw}
+\def\nnwgenerAl#1{\halfbAck\sAve{#1}\adjUstnnw\raise\dimen1\box0
+\postadjUstnnw}
+\def\adjUstnnw{\advance\dimen1 by1.111111\dimen5\kern-1.15\dimen6
+\advance\dimen4 by-1.15\dimen6\advance\dimen0 by-1.15\dimen6}
+\def\postadjUstnnw{\kern-1.35\dimen6\advance\dimen4 by-1.35\dimen6
+\advance\dimen0 by-1.35\dimen6\advance\dimen1 by\dimen5\count23=1}
+
+\def\nmostaromatatom#1{\atom{#1}\dimen8=\dimen1\advance\dimen8 by-0.4em
+\aromAtincr}
+\def\smostaromatatom#1{\atom{#1}\dimen10=\dimen1
+\advance\dimen10 by\dimen5\advance\dimen10 by0.3em\advance\count20 by1
+\aromAtincr}
+\def\wmostaromatatom#1{\atom{#1}\dimen7=\dimen0\advance\count20 by2
+\advance\dimen7 by0.36em\aromAtincr}
+\def\emostaromatatom#1{\atom{#1}\dimen9=\dimen0\advance\dimen9 by-\dimen6
+\advance\count20 by3 \advance\dimen9 by-0.24em\aromAtincr}
+\def\aromAtincr{\advance\count20 by1\count42=\count20\ifnum\count20=10 %
+\aromAtsymbol\fi}
+\def\wUrzel{% Here \count42=sqrt(\count52) is calculated by a recursion
+% formula. Since \wUrzel is called from inside a loop, and TeX cannot
+% handle loops within loops, this has to be done the hard way.
+\count42=\count52\divide\count42 by4\count62=\count52
+\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\count62=\count52\divide\count62 by\count42\advance\count62 by\count42
+\count72=\count62\divide\count72 by2\advance\count72 by5
+\ifnum\count42>\count72 \count42=\count62\divide\count42 by2
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+\def\aromAtsymbol{\count20=0\ifnum\count13>0 \advance\dimen8 by-\dimen10
+\dimen8=0.5\dimen8\advance\dimen7 by-\dimen9\dimen7=-0.5\dimen7
+\setbox1=\hbox{\vrule width0.04em height0.04em}\dimen22=0.4\wd1
+\count32=7100\count22=\dimen22\divide\count22 by60\dimen22=0.0001\dimen7
+\dimen23=0.0001\dimen8\setbox0=\hbox{\loop\advance\count32 by-\count22
+\count62=\count32\multiply\count62 by\count32\count52=100000000
+\advance\count52 by-\count62\wUrzel\kern\count42\dimen22
+\lower\count32\dimen23\copy1\kern-\wd1\raise\count32\dimen23\copy1
+\kern-\wd1\count72=-\count42\kern\count72\dimen22\kern\count72\dimen22
+\lower\count32\dimen23\copy1\kern-\wd1\raise\count32\dimen23\copy1
+\kern-\wd1\kern\count42\dimen22\kern\count32\dimen22
+\lower\count42\dimen23\copy1\kern-\wd1\raise\count42\dimen23\copy1
+\kern-\wd1\count72=-\count32\kern\count72\dimen22\kern\count72\dimen22
+\lower\count42\dimen23\copy1\kern-\wd1\raise\count42\dimen23\copy1
+\kern-\wd1\kern\count32\dimen22\ifnum\count32>\count22 \repeat
+\kern-10000\dimen22\copy1\kern-\wd1\kern20000\dimen22\copy1\kern-\wd1}%
+\advance\dimen9 by-\dimen0\kern\dimen9\kern-10000\dimen22
+\dimen13=\dimen10\advance\dimen13 by\dimen8\raise\dimen13\box0
+\kern-\dimen9\fi}
+
+\def\firstbicycloatom#1{\atom{#1}\ifnum\count13>0 \ifnum\count20>0 %
+\count20=0\message{Bicyclo definition ignored!}\else\dimen7=\dimen0
+\advance\dimen7 by-0.5\dimen6\count20=100\dimen8=\dimen1
+\advance\dimen8 by0.4\dimen5\dimen9=\dimen6\fi\fi}
+\def\secondbicycloatom#1{\atom{#1}\ifnum\count13>0 \ifnum\count20=100 %
+\dimen12=\dimen0\advance\dimen12 by-0.5\dimen6
+\dimen13=\dimen1\advance\dimen13 by0.4\dimen5
+\ifdim\dimen9<\dimen6 \dimen9=\dimen6\fi\ifdim\dimen9<\dimen5 %
+\dimen9=\dimen5\fi\setbox1=\hbox{\vrule width0.04em height0.04em}%
+\kern-0.5\dimen6\dimen22=\dimen7\advance\dimen22 by-\dimen12
+\divide\dimen22 by10000\dimen23=\dimen8\advance\dimen23 by-\dimen13
+\divide\dimen23 by10000\count42=\dimen22\multiply\count42 by\dimen22
+\count52=\dimen23\multiply\count52 by\dimen23\advance\count52 by\count42
+\wUrzel\divide\dimen9 by100\multiply\dimen9 by85\count32=\dimen9
+\divide\count32 by\count42\count52=10000\advance\count52 by-\count32
+\count72=\wd1%\multiply\count72 by4\divide\count72 by10
+\divide\count72 by2
+\divide\count72 by\count42\loop\dimen32=0em
+\advance\dimen32 by\count32\dimen22\dimen33=\dimen13
+\advance\dimen33 by\count32\dimen23\kern\dimen32\raise\dimen33\copy1
+\kern-\wd1\kern-\dimen32\advance\count32 by\count72
+\ifnum\count32<\count52 \repeat\kern0.5\dimen6\else
+\message{Bicyclo definition ignored!}\fi\fi\count20=0}
+
+\def\nopositioncheck{\count13=1}
+
+\def\structure#1{\hbox{\begingroup\rm\catcode`\ =9\catcode`\^^M=9
+\dimen252=\fontdimen2\tenrm\fontdimen2\tenrm=0pt
+\dimen253=\fontdimen3\tenrm\fontdimen3\tenrm=0pt
+\dimen254=\fontdimen4\tenrm\fontdimen4\tenrm=0pt
+\dimen255=\fontdimen7\tenrm\fontdimen7\tenrm=0pt
+\count11=0% side chain nesting
+\count20=0% definition counter of aromatatoms and bicycloatoms
+\count13=0% disable printing
+\count23=0% fullback/halfback/noback flag
+\dimen0=\baselineskip\advance\dimen0 by-0.7em
+\advance\baselineskip by-0.3em
+\count33=\dimen0 % amount of depth to be added
+\count43=0% marker for eseabove- and wnwevoba-bonds
+\count53=0% marker for wswabove- and eneevoba-bonds
+\count63=0% marker for eneabove- and wswevoba-bonds
+\count73=0% marker for wnwabove- and eseevoba-bonds
+\count83=0% marker for in-plane ne- and swbonds
+\count93=0% marker for in-plane nw- and sebonds
+\dimen0=0em% actual horizontal position
+\dimen1=0em% actual vertical position
+\dimen2=0em% maximum horizontal position
+\dimen3=0em% minimum horizontal position
+\dimen4=0em% horizontal side chain correction
+\dimen5=0em% last height + depth
+\dimen6=0em% last width
+\dimen7=0em%
+\dimen8=0em%
+\dimen9=0em%
+\dimen10=0em%
+#1\ifnum\count13=0 \kern-\dimen0\kern-\dimen3\dimen0=0em\dimen1=0em
+\dimen2=0em\count13=1 #1\fi\kern-\dimen0\kern\dimen2\ifnum\count20>0 %
+\message{Incomplete aromatic system ignored!}\fi
+\advance\baselineskip by0.3em\fontdimen2\tenrm=\dimen252 %
+\fontdimen3\tenrm=\dimen253 \fontdimen4\tenrm=\dimen254 %
+\fontdimen7\tenrm=\dimen255 \endgroup}}
+
+\endinput
diff --git a/macros/latex209/contrib/chemtex/announce b/macros/latex209/contrib/chemtex/announce
new file mode 100644
index 0000000000..7e34951ddf
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/announce
@@ -0,0 +1,59 @@
+From jwe@emx.utexas.edu Thu Mar 8 10:25:48 1990
+Posted-Date: Thu, 8 Mar 90 01:49:33 -0600
+To: morrison@cs.ubc.ca, dbuerger@cup.portal.com, rick@soma.neusc.bcm.tmc.edu,
+ luis@rice.edu, HOMH@qucdn.queensu.ca,
+ shahoumi%koh-sun5.usc.edu@usc.edu, naucse!naucse!jdc@cs.arizona.edu
+Subject: TeX/LaTeX chemical formula macros
+
+As promised, here are the chemical structure formula macros. These
+macros are described in
+
+@ARTICLE (
+ author = "Roswitha T. Haas and Kevin C. O'Kane",
+ title = "Typesetting Chemical Structure Formulas with the Text
+ Formatter \TeX/\LaTeX",
+journal = Computers \& Chemistry
+ year = "1987",
+ volume = "11",
+ number = "4",
+ pages = "251--271" )
+
+I did not have anything to do with writing the macros, but have been
+given permission to distribute them by one of the authors:
+
+> Received: From ORNLSTC(POSTMAST) by UTCHPC with Jnet id 8507
+> for CHPF127@UTCHPC; Fri, 4 Aug 89 13:26 CST
+> Date: Fri, 4 Aug 89 14:25 EST
+> Original_From: IRAVAX::HAASR
+> Subject: Dr. Eaton's letter of July 28, 89
+> To: chpf127@utchpc
+>
+> Dr. Eaton, thank you for your letter of July 28, 1989. I have no
+> objections against submitting the chemical structure macros to the
+> LaTeX style archive.
+> Sincerely, Roswitha Haas
+
+
+There is a significant amount of documentation that goes along with
+the macros -- all together about 200k in macros and docs.
+
+Let me know if you have any trouble unpacking the macros, or something
+gets lost along the way.
+
+Also, to Luis Soltero and Rick Gray: Thanks for the offer to archive
+the macros. If you do end up putting them somewhere for anonymous
+ftp, how about posting a note to the net?
+
+I offered them to the Clarkson archive a while back, but I don't think
+they were ever made available. Apparently the manager of the
+collection wanted a much shorter (?) documentation file. As I am not
+the author, I don't think it is really appropriate for me to chop up
+the documentation. In any case, I hope you find these useful.
+
+--
+John Eaton (not really a Dr. yet, but I hope to play one eventually)
+jwe@emx.utexas.edu
+Department of Chemical Engineering
+The University of Texas at Austin
+Austin, Texas 78712
+
diff --git a/macros/latex209/contrib/chemtex/appdb.tex b/macros/latex209/contrib/chemtex/appdb.tex
new file mode 100644
index 0000000000..402c2feb95
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/appdb.tex
@@ -0,0 +1,85 @@
+\chapter{Coordinates of points of attachment}
+ \vspace{4mm}
+
+ The tables in this appendix list coordinates of points of
+ attachment that will probably be used most frequently
+ with the techniques described in chapter V.
+ Table~\ref{tb:corners}
+ lists the coordinates of the six corners
+ of the carbon sixring and the coordinates at the end of the six
+ bonds extending from the sixring.
+
+\begin{table}[p]
+\begin{center}
+ \begin{tabular}{|c|l|l|}
+ \hline
+ Sixring Position & Ring Corner & End of Bond \\
+ \hline
+ 1 & \ (342,200) & \ (470,277) \\
+ 2 & \ (342,0) & \ (470,-77) \\
+ 3 & \ (171,-103) & \ (171,-203) \\
+ 4 & \ (0,0) & \ (-128,-77) \\
+ 5 & \ (0,200) & \ (-128,277) \\
+ 6 & \ (171,303) & \ (171,403) \\
+ \hline
+ \end{tabular}
+\end{center}
+ \caption{Points of attachment in the sixring}
+\label{tb:corners}
+\end{table}
+
+ The ring structures typeset by the macros
+ \verb+\fivering+,
+ \verb+\naphth+,
+ \verb+\steroid+,
+ \verb+\hetifive+,
+ \verb+\heticifive+,
+ \verb+\pyrazole+,
+ \verb+\hetisix+,
+ \verb+\pyrimidine+, and
+ \verb+\purine+ have identical coordinates at positions that are
+ equivalent to the sixring positions in regard to the printed
+ diagram. (The position numbers are not necessarily the same
+ as those of the sixring.)
+
+ Table~\ref{tb:otherpoints}
+ lists the coordinates of other points of attachment
+ in structures typeset by various macros.
+\begin{table}[p]
+\begin{center}
+ \begin{tabular}{|l|l|l|}
+ \hline
+ \ Macro & Position Description & Coordinates \\
+ \hline
+ \verb+\cbranch+ & begin of left bond & \ (-150,33) \\
+ \verb+\cbranch+ & end of right bond & \ (230,33) \\
+ \verb+\cright+ & begin of left bond & \ (-150,33) \\
+ \verb+\cleft+ & end of right bond & \ (230,33) \\
+ \verb+\chemup+ & end of vertical bond & \ (33,-150) \\
+ \verb+\cdown+ & end of vertical bond & \ (33,220) \\
+ \verb+\threering+ & ring position 1 & \ (300,0) \\
+ \verb+\threering+ & end of bond on 1 & \ (428,77) \\
+ \verb+\naphth+ & ring position 1 & \ (513,303) \\
+ \verb+\naphth+ & end of bond on 1 & \ (513,403) \\
+ \verb+\naphth+ & ring position 2 & \ (684,200) \\
+ \verb+\naphth+ & end of bond on 2 & \ (812,277) \\
+ \verb+\steroid+ & end of vert. bond on 17 & \ (1026,706)\\
+ \verb+\hetthree+ & end of bond on 3 & \ (580,30) \\
+ \verb+\pyranose+ & end of alpha bond & \ (688,100) \\
+ \verb+\pyranose+ & end of beta bond & \ (688,-100)\\
+ \verb+\furanose+ & end of alpha bond & \ (553,-63) \\
+ \verb+\furanose+ & end of beta bond & \ (553,63) \\
+ \verb+\furanose+ & end of vert. long bond & \ (448,380) \\
+ \verb+\purine+ & point below N(9) & \ (513,-130)\\
+ \verb+\fuseiv+ & upper point of attachment & \ (0,200) \\
+ \verb+\fuseiv+ & lower point of attachment & \ (0,0) \\
+ \verb+\fuseup+ & upper point of attachment & \ (-171,303)\\
+ \verb+\fuseup+ & lower point of attachment & \ (0,200) \\
+ \verb+\fuseiii+ & upper point of attachment & \ (0,200) \\
+ \verb+\fuseiii+ & lower point of attachment & \ (0,0) \\
+ \hline
+ \end{tabular}
+\end{center}
+ \caption{Points of attachment in various structures}
+\label{tb:otherpoints}
+\end{table}
diff --git a/macros/latex209/contrib/chemtex/appdc.tex b/macros/latex209/contrib/chemtex/appdc.tex
new file mode 100644
index 0000000000..dd6a77064f
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/appdc.tex
@@ -0,0 +1,53 @@
+\chapter{Slopes of lines drawn with \LaTeX}\label{ap:slopes}
+ Table~{tb:slopes}
+ lists the first quadrant slopes of lines that can be
+ typeset with \LaTeX, together with the corresponding degrees of
+ angle. The integers ${\rm x_s}$ and ${\rm y_s}$ represent the
+ slope in \LaTeX's line-drawing statement \\
+ \begin{center}
+{\verb+\put(x,y){\line(x+$_s$\verb+,y+$_s$\verb+){length}}+}
+\end{center}
+ Corresponding angles in the other quadrants can be
+ generated by preceding ${\rm x_s}$ and/or ${\rm y_s}$ with
+ a minus sign.
+\begin{table}
+\begin{center}
+ \begin{tabular}{|l|l|l|}
+ \hline
+ ${\rm x_s}$, ${\rm y_s}$ & tan$\theta $(${\rm y_s}$/${\rm x_s}$) &
+ $\theta $(degrees) \\
+ \hline
+ \ 1,0 & \ \ 0.00 & \ \ 0.0 \\
+ \ 6,1 & \ \ 0.17 & \ \ 9.5 \\
+ \ 5,1 & \ \ 0.20 & \ 11.3 \\
+ \ 4,1 & \ \ 0.25 & \ 14.0 \\
+ \ 3,1 & \ \ 0.33 & \ 18.5 \\
+ \ 5,2 & \ \ 0.40 & \ 21.8 \\
+ \ 2,1 & \ \ 0.50 & \ 26.5 \\
+ \ 5,3 & \ \ 0.60 & \ 31.0 \\
+ \ 3,2 & \ \ 0.67 & \ 33.7 \\
+ \ 4,3 & \ \ 0.75 & \ 36.8 \\
+ \ 5,4 & \ \ 0.80 & \ 38.7 \\
+ \ 6,5 & \ \ 0.83 & \ 39.8 \\
+ \ 1,1 & \ \ 1.00 & \ 45.0 \\
+ \ 5,6 & \ \ 1.20 & \ 50.2 \\
+ \ 4,5 & \ \ 1.25 & \ 51.3 \\
+ \ 3,4 & \ \ 1.33 & \ 53.2 \\
+ \ 2,3 & \ \ 1.50 & \ 56.3 \\
+ \ 3,5 & \ \ 1.67 & \ 59.0 \\
+ \ 1,2 & \ \ 2.00 & \ 63.5 \\
+ \ 2,5 & \ \ 2.50 & \ 68.2 \\
+ \ 1,3 & \ \ 3.00 & \ 71.5 \\
+ \ 1,4 & \ \ 4.00 & \ 76.0 \\
+ \ 1,5 & \ \ 5.00 & \ 78.7 \\
+ \ 1,6 & \ \ 6.00 & \ 80.5 \\
+ \ 0,1 & \ \ $\infty $& \ 90.0 \\
+ \hline
+ \end{tabular}
+\end{center}
+
+ \caption{Slopes of lines possible with \LaTeX}
+\label{tb:slopes}
+ \end{table}
+
+
diff --git a/macros/latex209/contrib/chemtex/chap3a.tex b/macros/latex209/contrib/chemtex/chap3a.tex
new file mode 100644
index 0000000000..8429a50913
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chap3a.tex
@@ -0,0 +1,581 @@
+\chapter{\TeX/\LaTeX\ code for components of organic chemical structure
+ diagrams}\label{ch:txltx}
+\section{Conventions for drawing the diagrams}\label{sc:convntns}
+ The chemical structure of a molecule is defined by the spatial
+ arrangement of the atoms and the bonding between them.
+ Chemists use several standard methods for representing the
+ structures two-dimensionally by diagrams called structural
+ formulas; and this thesis will develop mechanisms for printing
+ such diagrams using the \TeX/\LaTeX\ system.
+
+ A very common structure representation, sometimes called a
+ dash structural formula, uses the element symbols for the
+ atoms and a dash for each covalent bond in the compound.
+ Thus the dash represents the pair of shared electrons that
+ constitutes the bond. Two dashes ($=$) represent a double
+ bond and three dashes ($\equiv $) a triple bond. ---
+ It is usually neither necessary nor practical to represent
+ each bond in a molecule explicitly by a dash.
+ Some molecules and some bonds are so common that a complete
+ dash formula would not be used except at a very introductory
+ level of presenting chemical information.
+ A condensed structural formula is one alternative. It does
+ not contain dashes but uses the convention that atoms
+ bonded to a carbon are written immediately after that
+ carbon and otherwise atoms are written from left to right
+ in the order in which they occur in the real structure.
+ The following two structural formulas are a dash formula
+ and a condensed formula, respectively, for the same
+ compound, ethanol.
+ \[ \parbox{4.5cm} {
+ \begin{picture}(400,900)(0,-110)
+ \put(0,0) {\cbranch{H}{S}{H}{S}{C}{S}{}{S}{H} }
+ \put(240,0) {\cbranch{H}{S}{}{Q}{C}{S}{O---H}{S}{H} }
+ \end{picture} }
+ \hspace{1.5cm}
+ {\rm CH_{3}CH_{2}OH} \]
+ Multiple bonds are usually not implied unless a very common
+ group, such as the cyano group, is shown. It can be found
+ as $-$C$\equiv $N or simply as $-$CN.
+
+ Another alternative to a complete dash formula is a diagram
+ where the symbols for carbon and for hydrogen on carbon are
+ not shown. Each corner and each open-ended bond in these
+ diagrams implies a carbon atom with as many hydrogen
+ atoms bonded to it as there are free valences. This
+ representation is the customary one for ring structures
+ (structures with a closed chain of atoms). Thus, the
+ following two diagrams both represent the compound
+ cyclopropane.
+ \[ \hetthree{Q}{H}{H}{H}{H}{S}{S}{C}
+ \hspace{3cm} \yi=330
+ \threering{Q}{Q}{Q}{Q}{Q}{Q}{Q}{Q}{Q} \]
+
+ \reinit
+ The three different kinds of structure representation can
+ be combined in one diagram, such that in part of the
+ diagram all bonds are represented by dashes and all
+ atoms by an element symbol, in another part a condensed
+ structural formula fragment is used, and in still
+ another part a cyclic fragment with implied carbon
+ and hydrogen atoms occurs.
+
+ The rest of this chapter describes how \LaTeX\ can be used
+ to position and typeset the bond lines and condensed
+ formula strings that are the components of structure
+ diagrams.
+
+ It should be mentioned that there are no binding rules
+ for many aspects of the two-dimensional representations
+ of a chemical structure. Structures and fragments of
+ structures can be oriented in different ways depending
+ on the availability of space, the emphasis given to
+ a certain part of a structure, or the spatial
+ relationship of the parts to each other.
+ Thus, a cyclopropane ring can be represented in various
+ orientations, $\bigtriangleup $, $\bigtriangledown $,
+ and others. Also, the angles between
+ the bond lines can be different in different representations
+ of one and the same compound. Since most molecules do not
+ have all their atoms lying in one plane it would not
+ even be possible to reproduce all bond angles in a
+ two-dimensional representation. The structures shown in
+ this thesis adopt the orientations and bond angles
+ found to prevail in Solomons' textbook (Solomons 84),
+ the organic chemistry text used for several years at
+ the University of Tennessee.
+
+ There are some methods to indicate the real,
+ three-dimensional structure (the stereochemistry)
+ of a molecule in the two-dimensional representation:
+ A dashed line and a wedge instead of a full bond
+ line mean that the real bond extends below or
+ above the plane, respectively.
+
+\section{Bond line drawing and positioning}
+\subsection{Review of \TeX/\LaTeX\ facilities for line-drawing}
+\label{sc:review}
+ The easiest way to produce horizontal and vertical lines representing
+ chemical bonds is by the use of keyboard characters and simple control
+ sequences provided by \TeX. By typing one, two, or three hyphens,
+ a normal hyphen, a medium dash designed for number ranges, and a
+ punctuation dash are produced, - -- ---, respectively. When a hyphen
+ is typed in \TeX's math mode, it is interpreted as a minus sign and
+ the spacing around it will be different from text mode. ---
+ The equal sign can represent a double bond for chemistry typesetting.
+ It can be typed in text mode and in math mode, again resulting in
+ different spacing around the symbol. --- The control sequence
+ \verb+\equiv+ can be used as a triple bond ($\equiv $). It has to
+ be typed in math mode.
+
+ Vertical lines are available through the keyboard character or the
+ control sequences \verb+\vert+ and \verb+\mid+, all three to be
+ entered in math mode.
+ A double vertical bar is produced by \verb+\|+ or \verb+\Vert+,
+ again both in math mode.
+
+ The spacing around all these symbols can be controlled by adding
+ extra (positive or negative) space with the horizontal spacing
+ commands. The symbols, just as any other part of a line, can also
+ be raised or lowered respective to the normal baseline. The length
+ and height of the symbols however depend on the font currently
+ in use.
+
+ Where control of length and height of the bond lines is needed,
+ \TeX's or \LaTeX's command sequences for printing horizontal and
+ vertical ``rules'' can be used. The systems recognize several
+ length units, including the inch, centimeter, millimeter, and
+ printer point (Knuth 84, p. 57). One printer point (pt), an often
+ used unit in typesetting, measures about 0.35 mm. --- \LaTeX's
+ rule-printing command has the format
+ $$\hbox{\verb+\rule[raise-length]{width}{height}+}$$
+ Thus it can be used to produce horizontal and vertical rules.
+ Using the \verb+\rule+ command one can also print multiple
+ bond lines of user-controlled length, e.~g. $\dbond{16}{10} $,
+ $\tbond{16}{11} $, with the short control sequences \verb+\dbond+
+ and \verb+\tbond+ defined in this thesis. The vertical spacing
+ between the bonds depends on the current line spacing in the
+ document and may have to be adjusted. The control sequences
+ are set up for math mode.
+
+ When bond lines other than horizontal and vertical ones are to
+ be printed, and when a coordinate system is needed to control
+ placement of structure components relative to one another,
+ \LaTeX's picture environment (Lamport~86, pp.~101--111) is a
+ necessity.
+
+ A picture environment uses length units which are dimensionless
+ and have to be defined by the user before entering the
+ environment. This is done by the \verb+\setlength+ command.
+ In this study, \verb+\setlength{\unitlength}{0.1pt}+
+ is the definition used for most diagrams. Such a small
+ unitlength was chosen to have fine control over the appearance
+ of the diagram.
+
+ The picture environment starts with the statement
+ $$\hbox{\verb+\begin{picture}(width,height)+}$$
+ where picture width and height reserve space on the page
+ and are specified in terms of unitlengths. Optionally, one
+ can include the coordinates of the lower left corner of the
+ picture:
+ $$\hbox{\verb+\begin{picture}(width,height)(x+$_i$\verb+,y+$_i$\verb+)+}$$
+ The default value for these coordinates is (0,0).
+ Objects are placed into the picture with the \verb+\put+
+ command with their reference point at the coordinates (x,y):
+ \verb+\put(x,y){picture object}+.
+
+ The picture objects of most interest to this study are
+ straight lines. They are drawn by the \verb+\line+
+ command:
+ $$\hbox{\verb+\line(x+$_s$\verb+,y+$_s$\verb+){length}+}$$
+ where the coordinate pair specifies the slope of the line,
+ and the nonnegative value of length specifies the length
+ of the projection of the line on the x-axis for all
+ nonvertical lines, and the length of the line for vertical
+ lines. The reference point of a line is one of its ends.
+ Thus the statement
+ $$\hbox
+ {\verb+\put(x,y)+
+ \verb+{\line(x+$_s$\verb+,y+$_s$\verb+){len}}+}
+ $$
+ draws a line that begins at (x,y), has a slope of ${\rm y_s\mbox{/}x_s}$,
+ and extends for length len as explained above.
+
+ Only a limited number of slopes is available through the line
+ fonts in \LaTeX. The possible values for ${\rm x_s}$ and ${\rm y_s}$ are
+ integers between $-6$ and $+6$, inclusive. These values translate
+ into 25 different absolute angle values, which are listed
+ in Appendix~\ref{ap:slopes}.
+
+\subsection{Bonds in structural formulas written on one line}
+\label{sc:onelinebonds}
+ The application of some of the bond-drawing mechanisms for this
+ simplest type of structural diagrams is illustrated in
+ Figure~\ref{fg:oneline}.
+ \begin{figure}\centering
+ \begin{picture}(900,700)
+ \put(0,600) {a \ $CH\equiv C-CH=CH_{2}$}
+ \put(0,350) {b \ $CH$\raise.1ex\hbox{$\equiv$}$C-CH=CH_{2}$}
+ \put(0,100) {c \ $CH\tbond{14}{20} C\sbond{14}
+ CH\dbond{14}{19} CH_{2}$}
+ \end{picture}
+ \caption{One-line structural formulas}
+ \label{fg:oneline}
+ \end{figure}
+
+ For Figure~\ref{fg:oneline}a only keyboard characters and the \TeX\
+ command \verb+\equiv+ were used to produce the bonds.
+ Figure~\ref{fg:oneline}b
+ shows a slight improvement through raising the triple bond.
+ Figure~\ref{fg:oneline}c was printed using the \verb+\sbond+,
+ \verb+\dbond+, and \verb+\tbond+ command sequences from
+ this thesis, choosing a length of 14pt for the bonds.
+ It can be seen that each of the formulas in Figure~\ref{fg:oneline}
+ is a
+ creditable representation of the structure. Depending on the
+ design of the page, the reason for displaying the structure
+ at a particular place, and the emphasis put on features of the
+ structure in the text, one would choose shorter or longer
+ bonds and take more or less trouble to produce the structure.
+
+ The picture environment is not needed for one-line structural
+ formulas, unless one of these formulas has to be attached to
+ another structural fragment, as in Figure~\ref{fg:picline}
+ Then the
+ coordinate system of the picture environment makes it
+ possible to fit the two fragments together.
+ \begin{figure}
+ \hspace{5cm}
+ \parbox{70 pt} {
+ \begin{picture}(400,200)
+ \put(-155,0) {$CH_{3}-CH-CH_{2}-CH_{2}-CH_{2}-CH_{3}$}
+ \end{picture} }
+ \hspace{5cm} \yi=200 \pht=600
+ \sixring{Q}{Q}{Q}{Q}{Q}{}{D}{D}{D} \\
+ \caption{One-line structure in picture environment}
+ \label{fg:picline}
+ \end{figure}
+\subsection{Bonds in acyclic structures with vertical branches}
+ Structure diagrams with vertical, single- or double-bonded, branches,
+ going up or down, are frequently seen. Several experiments with \TeX\
+ and \LaTeX\ were made to see how this type of structure can be
+ handled. One method is to align the vertical bonds by using the
+ mechanisms for tabbing or for printing tables and matrices.
+ Here a structure such as the one shown in Figure~\ref{fg:vertbranch}
+ is treated
+ as a set of columns as indicated by the vertical dividing lines
+ drawn into the second version of this structure in
+ Figure~\ref{fg:vertbranch}.
+
+ \begin{figure}
+ \hspace{1cm}
+ \begin{minipage}{180pt}
+ \begin{tabbing}
+ $CH_{3}CH_{2}$\= $CH$\= $CHCH_{2}$\= $CHCH_{2}CH_{3}$\+ \kill
+ $Br$\> \> $CH_{3}$ \\
+ \hspace{2pt}$\vert $\> \> \hspace{2pt}$\vert $ \- \\
+ $CH_{3}CH_{2}$\> $CH$\> $CHCH_{2}$\> $CHCH_{2}CH_{3}$\+ \+ \\
+ \hspace{2pt} $\vert $ \\
+ $CH_{2}CH_{3}$
+ \end{tabbing}
+ \end{minipage}
+ \hspace{2.5cm}
+ \begin{minipage}{180pt}
+ \begin{tabbing}
+ $CH_{3}CH_{2}$\= $\vert CH$\= $\vert CHCH_{2}$\= $\vert CHCH_{2}CH_{3}$
+ \+ \kill
+ $\vert Br$\> $\vert $ \> $\vert CH_{3}$
+ \\
+ $\vert $\hspace{2pt}$\vert $\> $\vert $ \> $\vert $\hspace{2pt}
+ $\vert $ \- \\
+ $CH_{3}CH_{2}$\> $\vert CH$ \> $\vert CHCH_{2}$\> $\vert CHCH_{2}CH_{3}$
+ \+ \\
+ $\vert $\> $\vert $\hspace{2pt}$\vert $ \> $\vert $
+ \\
+ $\vert $\> $\vert CH_{2}CH_{3}$
+ \end{tabbing}
+ \end{minipage}
+ \caption{Vertical branches}\label{fg:vertbranch}
+ \end{figure}
+
+ The structure diagram in Figure~\ref{fg:vertbranch}
+ uses \verb+\vert+ for the vertical
+ bonds and \LaTeX's tabbing environment for the alignment. One can also
+ use ``rules'' as the vertical bonds in order to give the horizontal
+ and vertical bonds the same lengths. Furthermore, vertical bonds can
+ also be double bonds. The following examples illustrate these features.
+ $$
+ \tbranch{O}{D}{H_{2}N-}{C-NH_{2}}{}{}{1} \hspace{2cm}
+ \tbranch{}{}{CH_{3}-CH_{2}-}{C-CH_{3}}{D}{NH}{1} \hspace{2cm}
+ \tbranch{}{}{H-}{C=\ }{S}{Br}{1}\tbranch{}{}{}{C-H}{S}{Br}{1}
+ $$
+ Similar structures were also generated with \TeX's \verb+\halign+
+ mechanism which forms templates for the columns rather than setting
+ tab stops. For the purpose of printing the structure diagrams, no
+ clearcut advantage was seen in one or the other method of
+ alignment. In each case the vertical spacing depends on the line
+ spacing in the document.
+
+ The alternative method of producing these structures is the use
+ of the picture environment. It provides better control over
+ horizontal and vertical spacing and over bond lengths. Also,
+ as illustrated in Section~\ref{sc:onelinebonds},
+ using a picture environment makes
+ it possible to attach one structural fragment to another at
+ a specific place. Thus, although the picture environment is not
+ necessary for drawing structures with vertical branches, it
+ has several advantages, and writing \LaTeX\ code for this
+ implementation is not more difficult than writing the code
+ for the tabbing method of alignment.
+
+\subsection{Bonds in Structures Containing Slanted Bond Lines}
+ Structure diagrams with slanted bond lines are frequently used for
+ acyclic compounds and have to be used to depict almost all cyclic
+ structures. Two examples are shown here:
+ $$ \cdown{$CH_{3}$}{S}{$N^{+}$}{D}{$O$}{S}{$O^{-}$}
+ \hspace{3cm} \sixring{$COOH$}{$OCOCH_{3}$}{Q}{Q}{Q}{Q}{S}{S}{C} $$
+
+ In developing diagrams for such structures in this thesis the
+ conventions described in Section~\ref{sc:convntns} are followed.
+ Thus the symbol for carbon is not
+ printed for the carbons that are ring members, but it is usually
+ printed in acyclic structures, unless the acyclic structure fragment
+ is a long chain, or space for the diagram is limited.
+
+ The picture environment is always needed for slanted lines. It was
+ explained in Section~\ref{sc:review} that \LaTeX\ can draw lines
+ only with a finite number of slopes. This is not a severe limitation
+ for creating the structure diagrams, since the conventions for
+ structure representation allow variations in the angles.
+ The representation does not have to reflect the true
+ atomic coordinates. In fact many chemistry publications contain
+ structure diagrams with angles significantly deviating from the real
+ bond angles, even where those could have been used easily. Thus,
+ Solomons' text (Solomons~84)
+ shows the carboxylic acid group often in this form
+ \pht=600
+ \[ \cright{}{S}{C}{D}{O}{S}{OH} \]
+ \pht=900
+ with an angle of about $90\circ$ between the OH and doublebonded O,
+ whereas the true angle is close to $120\circ$. --- The angles used
+ in this thesis for the regular hexagon of the sixring deviate by
+ % \parbox{4mm}{+\vspace{-18pt}\\ $-$}~$1^0$ from $120^0$
+ $\pm 1^\circ$ from $120^\circ$
+ because of \LaTeX's limited
+ number of slopes. This difference is not big enough to be
+ detected as a flaw.
+
+ To write the \LaTeX\ statement for a slanted bond line, one chooses the
+ origin and the slope and then uses trigonometric functions to calculate
+ the \LaTeX\ ``length'' of the line for the desired real length. Once the
+ \LaTeX\ length is determined, the coordinates of the end point of the
+ line can be calculated in case the end point is needed as the origin
+ of a connecting line. --- The origin and length of slanted double
+ bonds were also calculated with standard methods from trigonometry.
+ As an example, Figure~\ref{fg:calcpos}
+ shows how coordinates of the origin were
+ calculated for the inside part of a ring double bond that is at a
+ distance d from the outside bond.
+
+ \setlength{\unitlength}{1pt}
+
+ \begin{figure}
+ \begin{picture}(300,250)(0,-100)
+ \thicklines
+ \put(0,0) {\line(5,3) {120}}
+ \put(120,72) {\line(5,-3) {120}}
+ \put(240,0) {\line(0,-1) {100}}
+ \put(215,-6) {\line(-5,3) {88}}
+ \thinlines
+ \put(120,72) {\circle*{4}}
+ \put(125,72) {($x$,$y$)}
+ \put(127,47) {\circle*{4}}
+ \put(132,47) {($x_d$,$y_d$)}
+ \put(120,72) {\line(0,-1) {16}}
+ \put(120,72) {\line(-3,-5){9}}
+ \put(111,56) {\line(1,0) {16}}
+ \put(127,56) {\line(0,-1) {9}}
+ \put(111,56) {\line(5,-3) {16}}
+ \put(111,62) {\scriptsize d}
+ \put(116,46) {\scriptsize d}
+ \put(112,17) {{\small $\theta =30^{0}$}}
+ \put(114,28) {\vector(0,1){27}}
+ \put(270,35) {$x_{d}=x-d\sin ${\small $\theta $}$+d\cos ${\small $\theta $}}
+ \put(270,5) {$y_{d}=y-d\sin ${\small $\theta $}$-d\cos ${\small $\theta $}}
+ \end{picture}
+ \caption{Calculating position and length of double bond.}
+\label{fg:calcpos}
+ \end{figure}
+
+ \reinit
+
+ The \LaTeX\ command \verb+\multiput+ is similar to \verb+\put+ and provides
+ a shortcut for the coding of structures where several bond lines of the
+ same slope and length occur at regular intervals. Multiput has the
+ format
+$$\hbox {\verb+multiput(x,y)(x+$\Delta$\verb+,+$\Delta$\verb+y){n}+
+ \verb+{object}+}$$
+ where n is the number of objects, {\em e.g.,\/}
+ lines. A structure diagram
+ for which several \verb+\multiput+ statements are appropriate is
+ the structure of vitamin~A shown in Figure~\ref{fg:multidiag}
+
+ \begin{figure}
+ \hspace{2cm}
+ \parbox{5cm} {
+ \begin{picture}(900,900)(-300,-300)
+ \put(342,200) {\line(0,-1) {200}}
+ \put(342,0) {\line(-5,-3) {171}}
+ \put(171,-103) {\line(-5,3) {171}}
+ \put(0,0) {\line(0,1) {200}}
+ \put(0,200) {\line(5,3) {171}}
+ \put(171,303) {\line(5,-3) {171}}
+ \put(322,180) {\line(0,-1) {160}}
+ \put(342,0) {\line(5,-3) {128}}
+ \put(171,303) {\line(5,3) {128}}
+ \put(171,303) {\line(-5,3) {128}}
+ \multiput(342,200)(342,0){5}{\line(5,3){171}}
+ \multiput(513,303)(342,0){4}{\line(5,-3){171}}
+ \multiput(527,270)(342,0){4}{\line(5,-3){135}}
+ \multiput(855,303)(684,0){2}{\line(0,1){160}}
+ \put(1881,275){=O}
+ \end{picture} }
+ \caption{Diagram using $\backslash $multiput}
+\label{fg:multidiag}
+ \end{figure}
+
+ The size of objects in a picture environment can be scaled in a simple
+ way by changing the unitlength. Figure~\ref{fg:scaling}
+ illustrates scaling and
+ two problems associated with it. Changing the unitlength changes the
+ length of the lines only, not the width of the lines or the size of
+ text characters. Thus ``it does not provide true magnification and
+ reduction'' (Lamport~86, p.~102). However, the size of the text
+ characters can be varied separately, as will be discussed in the
+ next section of this chapter.
+ \begin{figure}
+ \pht=750\centering
+ \setlength{\unitlength}{.07pt}
+ \sixring{$OH$}{Q}{Q}{Q}{Q}{$Br$}{S}{D}{S}
+ \hspace{1.5cm}
+ \setlength{\unitlength}{0.08pt}
+ \sixring{$OH$}{Q}{Q}{Q}{Q}{$Br$}{S}{D}{S}
+ \hspace{1.5cm} \yi=150
+ \setlength{\unitlength}{0.15pt}
+ \sixring{$OH$}{Q}{Q}{Q}{Q}{$Br$}{S}{D}{S}
+ \caption{Scaling (unitlength=0.07pt, 0.08pt, 0.15pt)}
+ \label{fg:scaling}
+ \end{figure}
+
+ The smallest diagram in Figure~\ref{fg:scaling}
+ illustrates a limitation that
+ is unfortunate for the printing of structure diagrams. The shortest
+ slanted line that can be printed by \LaTeX's line fonts is
+ one with an x-axis projection of about~3.6mm.
+ If a shorter slanted line is requested, \LaTeX\ just prints
+ nothing. A chemist would occasionally want to draw shorter lines,
+ especially for the purpose of generating dashed lines indicating
+ stereochemical features.
+
+\section{Atomic symbols and condensed structural fragments}
+\label{sc:fragments}
+ Special considerations for the printing of condensed structural
+ fragments are required since many of them contain subscripts.
+ \TeX\ considers the printing of subscripts a part of mathematics
+ typesetting which has to be done in the special math mode.
+ As it is known, typesetting of mathematics
+ documents is one of the strong points of \TeX; the fonts of type
+ for the math mode are designed to agree with all conventions
+ of high quality mathematics publishing. Each typestyle in math
+ mode consists of a family of three fonts (Knuth~84, p.~153),
+ a textfont for normal symbols, a scriptfont for first-level
+ sub- and superscripts, and a scriptscriptfont for higher-level
+ sub- and superscripts. When structural fragments such as
+ ${\rm C_{2}H_{5}}$ are typeset, the textfont is used
+ for the C and the~H.
+
+ As \TeX\ enters math mode it selects \verb+\textfont1+ as the textfont
+ unless otherwise instructed.
+ \verb+\textfont1+ is defined by the \TeX\
+ macros as math italic, a typestyle that prints letters (not
+ numbers) similar to the italic style, but with certain
+ features adapted for mathematics typesetting. The italic
+ style letters, lower and upper case, are the ones commonly
+ seen in typeset mathematical formulas. Chemical formulas
+ on the other hand are not usually printed with slanted
+ letters. In this thesis, two methods were employed
+ to produce chemistry-style letters in \TeX's math mode which
+ has to be used because of the presence of subscripts.
+
+ For a document that contains many chemical formulas it is
+ convenient to redefine
+ \verb+\textfont1+ at the beginning of the
+ \TeX\ input file. The statement \verb+\textfont1=\tenrm+
+ was used at the beginning of the input file that produced this
+ document and causes \TeX\
+ to select the roman font as the textfont in math mode.
+ The roman typestyle is the one normally used by \TeX\
+ outside of math mode and it is the style in which this
+ thesis is printed. The ten point size, which is slightly
+ smaller than the eleven point size of the text in this document,
+ was chosen because it appears to look better for the
+ chemical formulas which consist largely of capital letters.
+ When different typesizes are used in this way, all the
+ atomic symbols and formulas in any one structure, even
+ those without subscripts, have to be printed in math mode
+ so that they all have the same size. It could be a
+ problem with this method of selecting the roman font for
+ math mode that the lowercase Greek letters (and some other
+ symbols used in mathematics) are not available in this
+ font. To print these one can temporarily redefine
+ textfont1 to math italic with the statement
+ \verb+\textfont1=\tenmi+. One can also switch to
+ a math font different from the default \verb/\textfont1/.
+ Using one of \LaTeX's font definitions, \verb+\small+,
+ a statement \{\verb+\small$\theta$+\} will
+ print the Greek letter.
+
+ Another method for avoiding the math italic style for letters
+ in chemical formulas is to select the roman style in each
+ individual instance where a formula has to be printed in
+ math mode. A statement such as \verb+${\rm C_2H_5}$+
+ produces ${\rm C_{2}H_{5}}$ at the size of type currently used
+ in the document. When the typestyle is thus selected within
+ math mode, enclosed by dollar signs, \TeX\ changes the style
+ of the letters of the alphabet only; the lowercase Greek
+ letters and math symbols remain available.
+
+ The size of the letters in chemical formulas can be changed
+ with the ten size declarations provided by \LaTeX\ (Lamport~86,
+ p.~200) or with \TeX's declarations. (Some of \TeX's declarations
+ are not defined in \LaTeX\ (Lamport~86, p.~205)). The size
+ declaration has to be written outside of math mode.
+ One place in chemistry typesetting where a
+ smaller typesize is desirable is the writing on reaction
+ arrows. The size in the following example is scriptsize:
+ $$
+ \advance \yi by 100
+ HC\equiv CH + H_{2}O
+ \parbox{92pt} {\cto{Hg^{++}}{18\%\ H_{2}SO_{4},\ 90^\circ}{14}}
+ CH_{3}-CHO $$
+
+ Finally, condensed structural formulas sometimes have to be
+ right-justified to be attached to the main structural diagram.
+ Figure~\ref{fg:rightjus}
+ illustrates this for the positioning of the
+ substituent in the 4-position of the pyrazole ring. \LaTeX\
+ makes this positioning convenient with the \verb+\makebox+
+ command, especially in the picture environment where the command
+ has the format
+ $$\hbox{\verb+\makebox(width,height)[alignment]{content}+}$$
+ (Lamport~86, p.~104). The one-line piece of text that constitutes
+ the content of the (imaginary) box can be aligned with the
+ top, bottom, left side, or right side of the box.
+ \begin{figure}\centering
+ \parbox{\xbox pt} {
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(200,-84) {\line(5,3) {110}} % bond 1,2
+ \put(342,200) {\line(0,-1) {140}} % bond 3,2
+ \put(342,200) {\line(-1,0) {342}} % bond 3,4
+ \put(0,200) {\line(0,-1) {200}} % bond 4,5
+ \put(0,0) {\line(5,-3) {140}} % bond 5,1
+ \put(135,-130) {$N$} % N-1 in ring
+ \put(310,-30) {$N$} % N-2 in ring
+ \put(171,-137) {\line(0,-1) {83}} % subst. on
+ \put(150,-283) {$C_{6}H_{5}$} % on N-1
+ \put(370,-17) {\line(5,-3) {100}} % subst. on
+ \put(475,-100) {$C_{6}H_{5}$} % N-2
+ \put(335,211) {\line(5,3) {128}} % outside
+ \put(349,189) {\line(5,3) {128}} % double O
+ \put(475,250) {$O$} % on C-3
+ \put(0,200) {\line(-5,3) {128}} % single subst.
+ \put(-430,234) {\makebox(300,87)[r]{$CH_{3}COCH_{2}CH_{2}$}}
+ \put(-7,11) {\line(-5,-3){128}} % outside
+ \put(7,-11) {\line(-5,-3){128}} % double O
+ \put(-200,-130){$O$} % on C-5
+ \end{picture} } % end pyrazole macro
+ \caption{Right-justification of substituent formula}
+ \label{fg:rightjus}
+ \end{figure}
+
+
diff --git a/macros/latex209/contrib/chemtex/chap4.tex b/macros/latex209/contrib/chemtex/chap4.tex
new file mode 100644
index 0000000000..5e8773701e
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chap4.tex
@@ -0,0 +1,424 @@
+ \chapter{Macros for typesetting chemical structure fragments}
+\label{ch:frags}
+\section{General organization of a structure macro}
+ The macro facility in \TeX/\LaTeX\ was used to define mnemonics for
+ typesetting frequently occurring structure fragments such as
+ common ring structures and branching patterns.
+ Chapter~\ref{ch:macros}
+ describes the complete system of
+ macros designed for this thesis. All of the macros
+ are defined with the \LaTeX\ declaration \verb+\newcommand+ which
+ has the format
+ $$\hbox{\verb+\newcommand{\commandname}[n]{replacement text}+}$$
+ (\TeX\ calls these definitions macros, whereas \LaTeX\ just uses the
+ more general word ``command.'') In the definition, n is an integer
+ from 1 to 9 and gives the number of arguments if any are used.
+ The arguments are represented in the replacement text by
+ parameters of the form \#1, \#2 etc.
+
+ A macroname, like the name of any control sequence in \TeX,
+ can contain letters only, not numerals. Where it was considered
+ important in this thesis to indicate a numbering scheme in
+ a macroname, either the full word for the number or Roman
+ numerals in lower case letters were used. Thus \verb+\hetisix+
+ is a mnemonic for a hetero sixring with one hetero atom, and
+ \verb+\fuseiv+ indicates a fusing fragment with four atoms. ---
+ In some macronames the mnemonic as such is preceded by ``c''
+ or ``chem,'' for ``chemistry.'' This was mainly done where the
+ mnemonic was already used for a control sequence in \TeX\
+ or \LaTeX. Thus, chemical structure fragments that point
+ ``right'' or ``left'' are drawn by the macros \verb+\cright+
+ and \verb+\cleft+ since \TeX\ employs control sequences
+ \verb+\right+ and \verb+\left+ with different meanings.
+
+ All the structure-drawing macro definitions in this thesis
+ follow the same pattern in their organization. The actual
+ structure-drawing \LaTeX\ code is preceded by a ``box''
+ declaration.
+ The diagrams are produced in a box because it is sometimes
+ desirable to move the diagram as a whole.
+ In all but one of the macros, the box is the \LaTeX\
+ ``picture''; in the macro \verb+\tbranch+,
+ which uses the tabbing environment, the box is
+ the \LaTeX\ minipage. Box dimensions in the
+ macros are made flexible through the use of global variables.
+ --- The structure-drawing code itself consists of unconditional
+ and of conditional statements. The macro arguments are used to
+ vary parts of the structure diagram, such as substituents
+ and multiple bonds. Those features of a structure macro
+ that have not been discussed before are described in more
+ detail in the following sections.
+
+\subsection{Box constructions with global variables}
+ Integer variables such as the ones used here for box dimensions
+ have to be stored in one of \TeX's 256 numerical registers and can
+ be given symbolic names with \TeX's \verb+\newcount+ declaration
+ (Knuth~84, pp.~118--121). The variables used in the macros of
+ this thesis are defined and initialized in the macro
+ \verb+\initial+ which should be part of the preamble of an input
+ file containing chemistry typesetting using this system (see
+ Figure~\ref{fg:preamble}
+ for a summary of the preamble). A user can then change the
+ variables by simple assignment, e. g. \verb+\xi=400+.
+ When several variables have been changed, it is convenient to
+ reset all of them, including the unitlength, to their initial
+ values with the macro \verb+\reinit+.
+
+ The role of the \LaTeX\ picture for line-drawing was discussed
+ in Chapter~\ref{ch:txltx},
+ but the picture is also a box.
+ As such it is processed in horizontal mode, as part of a line.
+ Within a horizontal box, line breaks can never occur.
+ The macros use variables for all numerical
+ parameters in the picture declaration.
+ Thus, the picture declaration in the macros has the form \\
+ $$\hbox{\verb+\begin{picture}(\pw,\pht)(\-xi,\-yi)+}$$
+ The picture width and height, \verb+\pw+ and \verb+\pht+,
+ specify the nominal size used by \TeX\ to determine how much
+ room to leave for the box. The diagram in the box can extend
+ beyond these dimensions, but an adjoining box is typeset next
+ to the preceding one according to the specified width.
+ The user needs control over the picture width in cases where
+ several such boxes are put on one line, especially for the
+ horizontal connection of structure fragments.
+ Control over the picture height is important because
+ some chemical structures take up more vertical space than
+ others. The picture width and height are initialized to 400
+ and 900 respectively, which is about $1.4\times 3.2\hbox{cm}$ with
+ the unitlength of 0.1points.
+
+ Variables are used for the coordinates of the
+ lower left corner, \verb+\xi+ and \verb+\yi+, so that the
+ user can change the placement of the diagram within the
+ picture window. This is not often necessary for individual
+ structures since they can be conveniently centered by
+ the display mechanisms discussed later in this chapter;
+ and also the whole picture can be shifted horizontally by
+ adding horizontal space in front of it with the
+ \verb+\hspace+ command.
+ It was considered to be most convenient to put the minus
+ signs in front of \verb+\xi+ and \verb+\yi+ in the declaration,
+ since one thinks of the lower left corner of a coordinate
+ system as having negative coordinates. With this declaration,
+ an increase in the absolute \verb+\xi+ and \verb+\yi+ values
+ shifts the diagram to the right and up. The coordinates
+ \verb+\xi+ and \verb+\yi+ are initialized to 0 and 300
+ respectively, which places the coordinate origin about 1cm
+ above the bottom of the picture window with the unitlength
+ of 0.1points.
+
+ The minipage, the box used in the macro \verb+\tbranch+,
+ is a paragraph box, which allows line breaks. Only the width
+ is specified for a paragraph box since the height is
+ controlled by the number of lines that will be produced by
+ a given amount of text. The variable used in this system
+ for the width of paragraph boxes is \verb+\xbox+. The number
+ value assigned to \verb+\xbox+ is interpreted as printer
+ points.
+
+\subsection{Use of \TeX's conditional facility}
+ \TeX's conditional facility is very similar to those of other
+ high-level languages; it has the form:
+ $$\hbox
+ {\verb+\if+\(\langle\)condition\(\rangle\langle\)true text\(\rangle\)
+ \verb+\else+\(\langle\)false text\(\rangle\)\verb+\fi+}
+ $$
+ (Knuth~84, p.~207ff.). Nesting is possible.
+ The \TeX\ \verb+\if+ primitive has over ten different forms
+ for testing numbers, processing modes, or tokens.
+ The form used in the chemical structure macros is
+ \verb+\ifx+${\rm \langle token_{1}\rangle \langle
+ token_{2}\rangle}$, which tests for the equality of the
+ (character code, category code) pair of two tokens.
+
+ In the structure macros, the \verb+\ifx+ tests the
+ arguments. When the arguments are single characters,
+ such as ``S'', ``D'', or ``C'' for single bond, double
+ bond, and circle, respectively, the application is
+ straightforward. The character ``Q'' is used as argument
+ where ``no action'' --- no substituent, no additional bond
+ --- is a desired option at a particular place in a structure
+ diagram. Thus, the coding for ring positions where substituents
+ are an option is:
+
+ \begin{tabbing}
+ move in some\= $\backslash $ifx\#nQ\= print the substituent \#n
+ $\backslash $fi\+ \kill
+ \verb+\ifx+\#nQ\> \\
+ \verb+\else+ \> draw a bond line \+ \\
+ print the substituent \#n \verb+\fi+
+ \end{tabbing}
+
+ The parameter n represents the substituent formula. ---
+ The explicit no-action symbol makes it possible to distinguish
+ three different cases at a particular ring position: no action,
+ just a bond line extending from the ring, and a bond line with
+ a substituent at the position. As an example, the purine macro
+ was used with an argument of Q for the 9-position in the
+ left-hand diagram and with an empty set argument in the
+ right-hand diagram:
+ \[ \purine{Q}{D}{Q}{D}{Q}{$NH_{2}$}{Q}{D}{Q}
+ \hspace{3cm}\purine{Q}{D}{Q}{D}{Q}{$NH_{2}$}{Q}{D}{} \]
+ One would use the bond-line-only option in cases where another
+ structure fragment in a picture is to be attached to the bond.
+ --- The character Q was chosen because it is not part of any
+ element symbol and is not commonly used as a structural symbol
+ otherwise.
+
+ When the parameter after the \verb+\ifx+ is substituted by a
+ text string representing a multi-character substituent, \TeX\
+ actually compares the first character of the string with its
+ second character, since these are the first two tokens
+ encountered. Thus, a substituent that begins with two identical
+ characters always makes the condition true. In such cases,
+ one has to ensure that the string as a whole is compared by
+ enclosing it in a box, {\it e.g.,\/}
+ \verb+\mbox{$\rm NNHC_{6}H_{5}$}+.
+
+ \TeX's conditional facility can also be used to impart some
+ chemical intelligence to a macro by causing screen messages
+ to be generated when the user supplies a combination of
+ arguments that is chemically not possible. Such a combination
+ would be a ring double bond (argument 7=``D'') and a
+ circle denoting aromaticity (argument 9=``C'') for the
+ carbon sixring. A section of code
+
+ \begin{tabbing}
+ move in \= $\backslash $ifx\#7D $\backslash $ifx\#9C
+ \= $\backslash $message\{Error: $\ldots $\}\+ \kill
+ \verb+\ifx+\#7D \verb+\ifx+\#9C \> \+ \\
+ \verb+\message{Error:+ $\ldots $\verb+}+ \- \\
+ \verb+\fi \fi+
+ \end{tabbing}
+
+ will produce the message on the screen while the input
+ file is processed by \TeX\ to give the DVI file. The user
+ can then correct the mistake and reprocess the input file
+ before sending the DVI file to the output device.
+ Error messages were not placed into all macros, just into
+ the \verb+\sixring+ macro to demonstrate this feature.
+
+ In addition to the simple \verb+\if+ statements \TeX\ has
+ an \verb+\ifcase+ construction of the form \\
+ \indent \verb+\ifcase+(number)(text for case 0) \verb+\or+
+ (text for case 1) \verb+\or+ $\ldots $ \\
+ \indent \ \ \ \verb+\or+ (text for case n) \verb+\else+
+ (text for all other cases) \verb+\fi+ \\
+ (Knuth~84, p.~210). When the \verb+\ifcase+ statement
+ is used in a macro and the case number is passed as an
+ argument, many different actions can be requested
+ through one argument. For a larger number of cases, the
+ \TeX\ code with \verb+\ifcase+ is somewhat more elegant
+ than a series of individual \verb+\if+ statements.
+ A suitable application for the chemical structure
+ macros is the placement of double bonds in various
+ positions of a structure, where the position number,
+ or a numeric code for a combination of positions,
+ is passed as the case number. One version of the
+ sixring macro, \verb+\sixringb+, contains an
+ \verb+\ifcase+ construct.
+
+\section{Use of structure macros}
+\subsection{Invoking the structure macros}
+ In order to typeset a chemical structure through invoking one
+ of the macros in this system, the user must know how the structure
+ will be oriented on the page, besides knowing, of course,
+ the function of each argument. The structures in this system can
+ not be rotated; they are oriented according to common practices
+ in chemistry, but occasionally the user will have to adapt
+ a model structure to the given orientation. Chapter~\ref{ch:macros}
+ shows
+ for each macro a typical structure produced by it, to illustrate
+ the orientation and the position numbers. In this section it
+ will be demonstrated with two representative macros how this
+ information is to be used.
+
+ The macro \verb+\cright+ typesets structures or structure
+ fragments of the general form
+ $$\pht=600\cright{$R^{1}$}{S}{$Z$}{S}{$R^{5}$}{S}{$R^{7}$} \hspace{1cm}
+ \mbox{.}$$
+ The arguments~1, 3, 5, and~7 are the substituents or groups
+ $R^{1}$, $Z$, $R^{5}$, and $R^{7}$. Arguments 2, 4, and 6 trigger
+ the drawing of bonds between $R^{1}$ and $Z$, between $Z$ and $R^{5}$,
+ and between $Z$ and $R^{7}$, respectively. The bonds can be single
+ or double bonds, from arguments ``S'' and ``D'' respectively,
+ and the bond between $R^{1}$ and $Z$ does not have to be present.
+ A typical structure is shown in Figure~\ref{fg:crightexample};
+ it was drawn using \verb+\cright{$CH_3$}{Q}{$CH$}{S}{$COOCH_3$}S{$COOCH_3$}+.
+ Since the second argument for Figure+\ref{fg:crightexample}
+ is ``Q,'' no bond is drawn between ${\rm R^{1}}$ and Z; and
+ ${\rm R^{1}}$, which is in a \verb+\makebox+ (see Section~\ref{sc:fragments}),
+ is moved next to Z. Figure~\ref{fg:crighttwo}
+ shows two additional structures
+ drawn with the \verb+\cright+ macro.
+
+ \begin{figure}\centering
+ \cright{$CH_{3}$}{Q}{$CH$}{S}{$COOCH_{3}$}{S}{$COOCH_{3}$}
+ \caption{Figure drawn using \tt\char"5C{}cright}
+\label{fg:crightexample}
+ \end{figure}
+
+
+ \begin{figure} % figure 3.2
+ \hspace{3cm}
+ \cright{$CH_{3}CH$}{D}{$C$}{S}{$CH_{3}$}{S}{$CH_{3}$}
+ \hspace{3cm}
+ \cright{$R$}{S}{$C$}{S}{$O^{-}$}{D}{${NH_{2}}^{+}$}
+ \caption{Structures drawn with the {\tt\char"5C{}cright} macro}
+\label{fg:crighttwo}
+ \end{figure}
+
+ The macro \verb+\sixring+ typesets the very common carbon sixring.
+ For this structure and all the ring structures, the user has to
+ know how the system of macros assigns position numbers to the
+ ring atoms. The assignment follows chemical nomenclature rules
+ where applicable. However in the case of single-ring structures
+ where all ring atoms are carbons,
+ the assignment of position
+ number~1 is arbitrary. In this system of macros, the sixring is
+ numbered as follows:
+ \pht=900
+ \[ \sixring{$R^{1}$}{$R^{2}$}{$R^{3}$}{$R^{4}$}{$R^{5}$}{$R^{6}$}
+ {S}{S}{S} \hspace{2cm} \mbox{.} \]
+ The first six arguments are the formulas for the optional
+ substituents in the respective positions. The user has to
+ refer to the position assignment to supply the text strings
+ in the correct form, e. g. a sulfonic acid group for positions
+ 4 and~5 would be typed in as $HO_{3}S$, whereas it would be
+ $SO_{3}H$ for all other positions. The remaining three
+ arguments can produce alternating ring double bonds, but each
+ of them has a second function. Argument~7 can produce a second
+ substituent at position~1, argument~8 an outside double bond
+ with substituent in position~3, and argument~9 a circle inside
+ the ring denoting aromaticity. Where arguments have two
+ functions in this way, the different structural features
+ generated are of course mutually exclusive chemically.
+ Figure~\ref{fg:sixexample}
+ shows a sixring structure typeset with the command
+\verb+\sixring{$OH$}{Q}{Q}{Q}{$NC$}{Q}{$CH_{3}$}{$NH$}{D}+.
+ The substituent in position~3 is passed
+ as argument~8 since it is not the regular single-bonded
+ substituent represented by argument~3.
+
+ \begin{figure}\centering
+ \sixring{$OH$}{Q}{Q}{Q}{$NC$}{Q}{$CH_{3}$}{$NH$}{D}
+ \caption{Structure typeset using \tt\char"5C{}sixring}
+\label{fg:sixexample}
+ \end{figure}
+
+\subsection{Displaying macro-generated diagrams
+ within a document}
+ Since the macro-generated diagrams constitute \TeX\ boxes, the
+ code for a diagram can be included anywhere in the input file
+ and \TeX\ will try to find a place for the diagram as a whole
+ in the line and on the page. The diagrams, however, take up
+ more space horizontally and vertically than a box of text;
+ therefore \TeX's line- and page breaking mechanisms would be
+ strained, sometimes to such a degree that text squeezing or
+ spreading would be apparent on the printed page.
+
+ A convenient way to display one or several structures on one
+ line by themselves and centered, is the math display environment,
+ enclosed by \LaTeX\ with brackets in the form \verb+\[+$\ldots $\verb+\]+.
+ A modification of this environment puts
+ consecutive equation numbers at the right edge of the line.
+ When using math display one has to remember that the only
+ spacing in math mode is around math operators, space inserted
+ by the user is ignored. Also, a new
+ paragraph can not be started in math display. ---
+ The diagrams in math display are printed at the place in
+ the document where they are coded in the input file.
+ Thus the display can still cause problems with pagebreaking,
+ especially since the diagrams usually take up more vertical
+ space than a math equation for which the environment is
+ designed.
+
+ The \LaTeX\ figure environment was specially designed for larger
+ displays, such as the structure diagrams (Lamport 86, pp.~59, 60,
+ 176, 177). A figure will usually not appear at the place in the
+ document where the user has coded it; instead \LaTeX\ finds space
+ for it on the current page or the next one in such a way that
+ an overfull page is never produced. The user has some control
+ over the placement of figures with optional parameters such as
+ top or bottom of a page, but \LaTeX\ still makes the final
+ decision, often producing surprising results.
+ Since a figure is moved to a convenient place by
+ \LaTeX\ , the figure is called a ``float.'' In addition to the
+ automatic space-finding, the figure environment has the
+ advantage that it makes captions possible. Furthermore,
+ several displayed objects, each with a caption, can be included
+ in one figure environment; Figures~\ref{fg:lactics} and~\ref{fg:lacticr}
+ present an
+ example, produced by the \LaTeX\ code in Figure~\ref{fg:lacticc}
+ The code shows that each picture with its caption is enclosed in
+ a \verb+\parbox+.
+
+ \begin{figure}
+ \parbox{.4\textwidth}{\centering
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(90,0) {\circle{180}}
+ \put(90,90) {\line(0,1) {70}} % behind and up
+ \put(60,170) {$COOH$}
+ \thicklines
+ \put(30,10) {\line(-5,2) {140}} % in front
+ \put(-415,30) {\makebox(300,87)[r]{$HO$}} % and left
+ \put(150,10) {\line(5,2) {140}} % in front
+ \put(300,30) {$H$} % and right
+ \thinlines
+ \put(90,-90) {\line(0,-1) {90}} % behind and
+ \put(60,-260) {$CH_{3}$} % down
+ \end{picture}
+ \caption{${\rm (S)-}$lactic acid} }
+ \label{fg:lactics}
+ \hfill
+ \parbox{.4\textwidth}{\centering
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(90,0) {\circle{180}}
+ \put(90,90) {\line(0,1) {70}} % behind and up
+ \put(60,170) {$COOH$}
+ \thicklines
+ \put(30,10) {\line(-5,2) {140}} % in front
+ \put(-415,30) {\makebox(300,87)[r]{$H$}} % and left
+ \put(150,10) {\line(5,2) {140}} % in front
+ \put(300,30) {$OH$} % and right
+ \thinlines
+ \put(90,-90) {\line(0,-1) {90}} % behind and
+ \put(60,-260) {$CH_{3}$} % down
+ \end{picture}
+ \caption{${\rm (R)-}$lactic acid} }
+ \label{fg:lacticr}
+ \end{figure}
+
+ \begin{figure}\centering
+ \begin{verbatim}
+ \begin{figure}
+ \parbox{.4\textwidth}{\centering
+ \ccirc{$COOH$}{$HO$}{$H$}{$CH_{3}$}
+ %ccirc is a macro
+ \caption{${\rm (S)-lactic acid}$}}
+ \hfill
+ \parbox{.4\textwidth}{\centering
+ \ccirc{$COOH$}{$H$}{$OH$}{$CH_{3}$}
+ \caption{${\rm (R)-lactic acid}$}}
+ \end{figure}
+ \end{verbatim}
+ \caption{\LaTeX\ code for two captions in one figure}
+ \label{fg:lacticc}
+ \end{figure}
+
+ It should also be mentioned that all the display mechanisms
+ discussed above can be used in a two-column document style
+ which is the format of most scientific chemistry journals.
+
+ If the same structure is to be printed many times in a
+ document, processing time can be saved by storing it in a
+ \LaTeX\ \verb+\savebox+. The structure-drawing code then has to
+ be processed once only. Applied to the chemistry macros,
+ a statement
+ $$\hbox{\verb+\savebox1{\macroname{arg+$_1$\verb+}{arg+$_2$\verb+}+}$$
+ will process the code and save the typeset structure.
+ A \verb+\usebox1+ statement, enclosed in a math display or
+ figure environment, is then placed into the input file
+ whereever the structure is to be printed. A \verb+\savebox+
+ can also be given a symbolic name (Lamport~86, p.~101).
+
diff --git a/macros/latex209/contrib/chemtex/chap5.tex b/macros/latex209/contrib/chemtex/chap5.tex
new file mode 100644
index 0000000000..6f364630cf
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chap5.tex
@@ -0,0 +1,569 @@
+
+ \documentstyle[12pt]{report}
+ \nofiles
+ \def\LATEX{\LaTeX}
+ \let\TEX = \TeX
+ \setcounter{totalnumber}{5}
+ \setcounter{topnumber}{3}
+ \setcounter{bottomnumber}{3}
+ \setlength{\oddsidemargin}{3.9cm} %real measurement 1.5in
+ \setlength{\textwidth}{5.7in} %right margin is now 1in
+ \setlength{\topmargin}{1cm}
+ \setlength{\headheight}{.6cm}
+ \setlength{\textheight}{8.5in}
+ \setlength{\parindent}{1cm}
+ \renewcommand{\baselinestretch}{1.5}
+ \raggedbottom
+ \input{init.tex}
+ \input{hetisix.tex}
+ \input{hetifive.tex}
+ \input{furanose.tex}
+ \input{pyranose.tex}
+ \input{purine.tex}
+ \input{six.tex}
+ \input{fparts.tex}
+ \input{cleft.tex}
+ \input{cto.tex}
+ \begin {document}
+ \setcounter{page}{35}
+ \setcounter{chapter}{5}
+ \textfont1=\tenrm
+ \initial
+ \len=4
+
+ \centerline{CHAPTER V}
+ \vspace{\len mm}
+ \centerline{COMBINING STRUCTURES FROM SEVERAL MACROS}
+ \vspace{\len mm}
+ \centerline{1. GENERAL CONSIDERATIONS FOR COMBINING STRUCTURES}
+ \centerline{IN THIS SYSTEM}
+ \vspace{\len mm}
+ Many individual
+ structure diagrams can be typeset using just one of the macros
+ together with condensed, one-line formulas; but often it will be
+ necessary to combine the ring structure or the branched fragment
+ from one macro with a structure part from another. To do this,
+ the separate parts have to be precisely aligned horizontally and
+ vertically. The typesetting of chemical equations containing
+ structure diagrams also requires such alignments and is therefore
+ included in this chapter.
+ For the system of macros described here, alignment consists of moving
+ each of the structure fragments as a whole, either within its
+ picture box or together with the box.
+
+ In each structure diagram there are many different points to which
+ other fragments can be attached. Similarly, one and the same
+ structure can be aligned in different ways with others to produce
+ a chemical equation. For these reasons, it was not considered
+ feasible to develop a symbolic language for alignment, such as
+ ``attach(sixring) at(1) to(fivering) at(4).'' Instead, this
+ system lets the user manipulate the placement of the structures
+ at a lower level by using some of the numerical coordinates from
+ the macros. While it may be considered a disadvantage that the
+ user has to extract information from the macros, this method also
+ puts a lot more control into the hands of the user. The type of
+ user anticipated for this system will probably prefer this
+ mechanism to an overdose of user-friendliness. Outright manipulation
+ of coordinates is also well suited for the textual method of
+ structure input employed in this system, since it helps the user
+ to visualize the result.
+
+ The information that is needed from a macro
+ to form a new structure \linebreak from fragments is the coordinate
+ pair for the point of attachment in each fragment. A part of
+ the code for the sixring and the relevant part of the structure
+ is shown in figure 5.1 to illustrate briefly how these
+ coordinate pairs are obtained:
+ If a fragment is to be attached directly to a ring position,
+ for example to position 1, the coordinate pair is found in
+ the unconditional part of the code as the origin of the bondline
+ beginning at position 1. (The code for the bond is located by
+ finding the respective line comment.) The coordinate pair in
+ this case would be (342,200). --- A fragment can also be attached
+ to the end of a bond extending from the ring. These bonds are
+ optional and part of the conditional code. The optional bond
+ extending from position 1 is located through the comment
+ ``substituent on 1.'' The x-coordinate at the end of this bond
+ is $342 + 128 = 470$, since the length of the bond given in
+ the code, 128 units, is the projection on the x-axis.
+ The y increment from ring position 1 to the end of the bond
+ is obtained from the slope of the line and the x increment
+ of 128: ${\rm \Delta x(3\mbox{/}5)=77}$.
+ Thus, the y-coordinate at the end of the bond is
+ $200 + 77 = 277$ units. -- Appendix B lists the coordinates
+ of the more commonly used points of attachment for the
+ system of macros described here.
+
+ \setlength{\unitlength}{.2pt}
+ \begin{figure}[tb]
+ \hspace{5cm}
+ \begin{picture}(400,530)(0,-200)
+ \put(342,200) {\line(0,-1) {200}}
+ \put(342,0) {\line(-5,-3){171}}
+ \put(171,303) {\line(5,-3) {171}}
+ \put(342,200) {\line(5,3) {128}}
+ \thinlines
+ \put(342,200) {\vector(1,0){128}}
+ \put(470,200) {\vector(-1,0){128}}
+ \put(470,200) {\vector(0,1) {77}}
+ \put(470,277) {\vector(0,-1){77}}
+ \put(320,160) {{\scriptsize 1}}
+ \put(320,0) {{\scriptsize 2}}
+ \put(370,150) {{\scriptsize 128}}
+ \put(490,220) {{\scriptsize 77}}
+ \end{picture}
+
+ \begin{minipage}{14cm}
+ \begin{verbatim}
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ .....
+ \put(342,200) {\line(0,-1) {200}} % bond from 1 to 2
+ \ifx#1Q
+ \else\put(342,200){\line(5,3) {128}} % substituent on 1
+ \put(475,250){#1} \fi
+ .....
+ \end{picture}
+ \end{verbatim}
+ \end{minipage}
+
+ \caption{Finding coordinates of points of attachment}
+ \end{figure} %figure 5.1
+ \setlength{\unitlength}{.1pt}
+
+ Two conceptually different methods were used in this thesis
+ to combine structure fragments from different macros. ---
+ One method follows a suggestion in the LaTeX manual (Lamport 86,
+ p. 110) to put subpictures into an encompassing picture with
+ the \verb+\+put command: \\
+ \centerline{$\backslash $put(x,y)\{$\backslash $begin\{picture\}
+ $\ldots \backslash $end\{picture\} \ \ \}. }
+ The reference point (x,y) is the lower left corner of the
+ subpicture. When this technique is applied to the chemical
+ structure macros, the macro invocation constitutes the
+ subpicture. The user has to set up the encompassing picture
+ and determine the coordinates of the reference points from
+ the coordinates of the points of attachment between structure
+ fragments.
+
+ The second method is somewhat less versatile; but there are
+ applications for which it is preferable. In this method, the
+ individual picture boxes are put next to one another on one
+ line or on successive lines. The fragments in the separate
+ pictures are aligned by shifting the coordinate system, i. e.
+ by changing the \verb+\+xi and \verb+\+yi values in the
+ picture declaration, in one or more of the pictures.
+
+ Finally, for the alignment of structures in a chemical
+ equation, it is convenient to use a paragraph box
+ construction (\verb+\+parbox) in addition to coordinate
+ shifting. LaTeX centers a paragraph box vertically on the
+ current line which contains, in the case of the chemical
+ equation, textual items such as plus symbols, condensed
+ formulas, and reaction arrows.
+
+ Typical applications of all methods of combining structure
+ fragments will be described in the rest of this chapter.
+
+ \pagebreak
+ \vspace{\len mm}
+ \centerline{2. COMBINING FRAGMENTS TO FORM A NEW STRUCTURE}
+ \vspace{\len mm}
+ \noindent A. \underline{Attachment by the Subpicture Method}
+
+ A simple example for this technique of structure-building is
+ shown in figure 5.2, where two different heterocycles are
+ fitted together to produce the structure of nicotine.
+ The LaTeX code to be entered by the user for this structure
+ is given underneath the diagram.
+
+ \begin{figure}[h] % fig. 5.2
+ \hspace{5cm}
+ \begin{picture}(900,900)(0,0)
+ \put(0,0) {\hetisix{D}{Q}{}{Q}{Q}{Q}{D}{D}{N} }
+ \put(470,277) {\hetifive{$CH_{3}$}{Q}{Q}{Q}{Q}{S}{S}{S}{N} }
+ \put(135,330) {A}
+ \put(605,600) {B}
+ \end{picture}
+
+ \begin{minipage}{14 cm}
+ \begin{verbatim}
+ \begin{picture}(900,900)(0,0)
+ \put(0,0) {\hetisix{D}{Q}{}{Q}{Q}{Q}{D}{D}{N} }
+ \put(470,277) {\hetifive{$CH_{3}$}{Q}{Q}{Q}{Q}{S}{S}{S}{N}}
+ \end{picture}
+ \end{verbatim}
+ \end{minipage}
+
+ \caption{Nicotine structure with LaTeX code}
+ \end{figure}
+
+ The code in figure 5.2 illustrates how the user has to set up the
+ encompassing picture with the \verb+\+begin and \verb+\+end
+ statements and estimated values for the picture width and height,
+ both 900 units (about 3cm) in this example. Then the picture box
+ of the pyridine ring is placed at the origin of the outer picture.
+ Next, the points of attachment are found in the respective
+ macros as ${\rm x_{AB}=470}$, ${\rm y_{AB}=277}$ for pyridine
+ and ${\rm x_{BA}=0}$, ${\rm y_{BA}=0}$ for pyrrolidine.
+ The coordinates of the reference point in the outer picture
+ where the inner picture with the pyrrolidine ring has to be
+ placed then are \\
+ \centerline{${\rm x=x_{AB}-x_{BA}=470}$, \
+ ${\rm y=y_{AB}-y_{BA}=277}$.}
+ It is assumed that the lower left corner of both subpictures has
+ the same coordinates, and this is the case when the macros
+ are used. When more than two ring structures are combined
+ one after the other, the calculation of the reference points
+ is appropriately extended.
+
+ Since the macros for the various acyclic branched fragments also
+ consist of picture boxes, these fragments can be used as
+ subpictures together with ring structures and with other
+ acyclic fragments. Thus the structure of thymol in figure 5.3
+ is produced from the \verb+\+sixring and the \verb+\+cdown
+ macros. Again, the coordinates for the point of reference for
+ the \verb+\+cdown picture are calculated from the points of
+ attachment:\\
+ \indent ${\rm x=x_{sixring}-x_{cdown}=\ \ 171-\ \ 33=\ \ 138}$\\
+ \indent ${\rm y=y_{sixring}-y_{cdown}=-103-220=-323}$.\\
+ Figure 5.4, the structure of penicillic acid, combines
+ three subpictures, one from the \verb+\+cleft macro and two
+ from the \verb+\+cbranch macro which draws vertical branches.
+
+ \begin{figure}[h] % fig. 5.3
+ \hspace{6cm}
+ \begin{picture}(500,1100)(0,-300)
+ \put(0,0) {\sixring{Q}{$OH$}{Q}{Q}{Q}{$CH_{3}$}{S}{S}{C} }
+ \put(138,-323) {\begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(33,80) {\line(0,1) {140}}
+ \put(0,0) {$CH$}
+ \put(0,0) {\line(-5,-3){121}}
+ \put(80,0) {\line(5,-3) {121}}
+ \put(-430,-150){\makebox(300,87)[r]{$H_{3}C$}}
+ \put(210,-140) {$CH_{3}$}
+ \end{picture} }
+ \end{picture}
+
+ \begin{minipage}{14cm}
+ \begin{verbatim}
+ \begin{picture}(500,1100)(0,-300) % estimated dimensions
+ \put(0,0) {\sixring ... }
+ \put(138,-323){\cdown ... }
+ \end{picture}
+ \end{verbatim}
+ \end{minipage}
+
+ \caption{Combining ring structure and acyclic subpictures}
+ \end{figure}
+
+ % I did not use the cdown macro, because this chapter needs
+ % several macros and I did not want to run out of Tex memory.
+ % But I tried the structure out with the macro.
+ \yi=200
+
+
+ \begin{figure}[t] % fig. 5.4
+ \hspace{4.5cm}
+ \begin{picture}(900,600)(0,-100)
+ \put(-405,160) {\makebox(300,87)[r]{$H_{3}C$}}
+ \put(0,70) {\line(-1,1) {100}}
+ \put(-405,-185) {\makebox(300,87)[r]{$H_{2}C$}}
+ \put(-9,9) {\line(-1,-1) {100}}
+ \put(9,-9) {\line(-1,-1) {100}}
+ \put(0,0) {$C$}
+ \put(90,33) {\line(1,0) {140}}
+ \put(240,200) {$O$}
+ \multiput(267,85)(26,0){2} {\line(0,1){100}}
+ \put(240,0) {$C$}
+ \put(330,33) {\line(1,0) {140}}
+ \put(480,200) {$OCH_{3}$}
+ \put(520,85) {\line(0,1) {100}}
+ \put(480,0) {$C$}
+ \multiput(570,20)(0,26){2} {\line(1,0){140}}
+ \put(720,0) {$CHCOOH$}
+ \end{picture}
+ \caption{Combining acyclic subpictures}
+ \end{figure}
+
+ % Again I did not actually use the macros here, but
+ % I tried it out with them.
+
+ Many structures contain condensed formula fragments between
+ ring diagrams. The structure of the anesthetic piridocaine
+ is shown as an example in figure 5.5. In such a case one has
+ to estimate the average horizontal space per character and move
+ the second subpicture that much further to the right for each
+ character, including the subscripts, in the condensed formula
+ fragment. In the ten point size, in which the characters in
+ figure 5.5 are printed, the horizontal space per character
+ is 6.8 points or 68 of the picture units.
+
+ \pht=800
+ \begin{figure}[h] % fig. 5.5
+ \hspace{4.5cm}
+ \begin{picture}(1200,800)(0,0)
+ \put(0,0) {\sixring{$NH_{2}$}{$COOCH_{2}CH_{2}$}
+ {Q}{Q}{Q}{Q}{D}{D}{D} }
+ \put(1210,0) {\hetisix{$H$}{Q}{Q}{Q}{Q}{}{Q}{}{$N$} }
+ \end{picture}
+ \caption{Condensed formula fragment between rings}
+ \end{figure}
+ \reinit
+
+ Other special cases occur where a diagram would become
+ too crowded when the two fragments are put next to one
+ another. (This does not necessarily reflect steric hindrance
+ in the real, three-dimensional chemical structure.)
+ In such cases the user can design a longer bondline and
+ put it into the outer picture between two points of attachment
+ on macro-produced structure fragments. The structure of
+ sucrose, shown in figure 5.6, illustrates this technique.
+ For this structure, it was estimated that the x-offset
+ between the bonding oxygen on glucose and the fructose
+ ring should be at least 200 units to produce a diagram
+ that does not appear crowded. Using this x-offset and
+ a bonding angle of $45^{0}$ (the angle used in the pyranose
+ macro for glucose), the user can then easily calculate the
+ point of reference for the fructose subpicture.
+
+
+ \begin{figure}
+ \hspace{3.5cm}
+ \begin{picture}(1200,800)(0,-100)
+ \put(0,0) {\pyranose{$H$}{$O$}{}{$OH$}{$OH$}{}{}
+ {$HO$}{$HO$} }
+ \put(785,200) {\line(1,1){200}}
+ \put(985,100) {\furanose{}{$CH_{2}OH$}{$HO$}{}{}{$OH$}{Q}{$HO$} }
+ \end{picture}
+
+ \begin{minipage}{14cm}
+ \begin{verbatim}
+ \put(0,0) {\pyranose .... }
+ \put(785,200) {\line(1,1){200}} } % user-designed line
+ \put(985,100) {\furanose ... }
+ \end{verbatim}
+ \end{minipage}
+
+ \caption{User-designed connecting bond line}
+ \end{figure}
+
+ An important special case of combining structure fragments is
+ the generation of fused ring systems. In a fused ring system
+ more than one ring atom is shared between rings. ---
+ A simple method for producing such diagrams is to print the
+ shared bondlines from individual ring structures precisely
+ on top of each other. The bond lines have to have the same
+ lengths, which is true in this system of macros for the
+ five- and sixrings, the most frequently occurring ones.
+ The shared lines don't appear to be heavier in the printed
+ picture than other bond lines. Figure 5.7 shows the structure
+ diagram of quinoline produced by this method together with
+ the respective LaTeX code. These fused systems can of
+ course include substituents and multiple bond variations
+ at all positions where the original macros made them
+ possible. --- A relatively small number of single-ring
+ fragments can produce a large number of fused systems
+ in this way, among them the very common fused systems
+ of anthracene, phenanthrene, chrysene, indene, indol,
+ benzimidazole, quinoline, and acridine.
+
+ \begin{figure} % fig. 5.7
+ \hspace{6cm}
+ \begin{picture}(900,900)(0,0)
+ \put(0,0) {\sixring{Q}{Q}{Q}{Q}{Q}{Q}{S}{D}{D} }
+ \put(342,0) {\hetisix{D}{Q}{Q}{Q}{Q}{Q}{D}{D}{$N$}}
+ \end{picture}
+
+ \begin{minipage}{14cm}
+ \begin{verbatim}
+ \begin{picture}(900,900)(0,0)
+ \put(0,0) {\sixring{Q}{Q}{Q}{Q}{Q}{Q}{S}{D}{D} }
+ \put(342,0) {\hetisix{D}{Q}{Q}{Q}{Q}{Q}{D}{D}{N} }
+ \end{picture}
+ \end{verbatim}
+ \end{minipage}
+ \caption{Fusion of fully drawn rings}
+ \end{figure}
+
+ There are also some macros that draw fragments specifically
+ designed for fusing. The following fragments \\
+ \[ \fuseiv{Q}{Q}{Q}{Q}{Q}{Q}{Q}{Q}{Q} \hspace{2.6cm}
+ \fuseup{Q}{Q}{Q}{Q}{Q}{Q}{Q}{Q}{Q} \hspace{1.4cm}
+ \fuseiii{Q}{Q}{Q}{Q}{Q}{Q} \]
+ are produced by the \verb+\+fuseiv, \verb+\+fuseup, and
+ \verb+\+fuseiii macros. They can be attached to the five-
+ and sixrings as subpictures. These fragments have the
+ advantage that they can provide more options for double
+ bond locations than a full ring structure within the
+ constraint of nine arguments.
+
+ \vspace{\len mm}
+ \noindent B. \underline{Attachment by Shifting the Coordinate
+ System}
+
+ This method is easy to use when a complex structure can be
+ perceived as a series of fragments put next to one another
+ horizontally, although not necessarily on exactly the same
+ level. The structure of nicotine shown in figure 5.2
+ belongs to this category. As an alternative to the code
+ listed in figure 5.2, the following LaTeX statements can
+ be used to produce the nicotine diagram: \\
+ \indent \verb+\+pw = 470 \\
+ \indent \verb+\+hetisix $\ldots$ \\
+ \indent \verb+\+advance \verb+\+yi by 277 \\
+ \indent \verb+\+hetifive $\ldots$\ \ \ . \\
+ The first statement here sets the picture width \verb+\+pw
+ for the pyridine ring so that the rightside end of the
+ picture box is at the x-coordinate of the point of attachment.
+ Now LaTeX will put the next item on the line, in this case
+ the picture box with the pyrrolidine ring, flush next to
+ the pyridine box. When the structure is printed in a math
+ display environment (see chapter II) where no spacing between
+ items on a line is applied, there will be no space between
+ the picture boxes. When the structure is put into a figure
+ environment only, without math display, normal spacing
+ occurs as it would happen between words on a line.
+ The user then has to request negative horizontal space
+ between invoking the pyridine and the pyrrolidine macro
+ to correct for the spacing. A statement
+ \verb+\+hspace\{-11pt\} produced the right correction for the
+ typestyle of this document.
+
+ The statement \verb+\+advance \verb+\+yi by 277 causes the
+ coordinate-shifting in the pyrrolidine picture.
+ By increasing the y-coordinate, the pyrrolidine structure
+ is shifted upwards so that the points of attachment
+ of the two rings meet. In general, the coordinate shifts
+ $\,\Delta $xi and $\,\Delta $yi applied to the second or any
+ following picture are determined from the points of
+ attachment (${\rm x_{AB}}$,${\rm y_{AB}}$) and
+ (${\rm x_{BA}}$,${\rm y_{BA}}$)
+ (the terminology used for figure 5.2) as follows: \\
+ \centerline{${\rm \Delta xi=x_{BA} \mbox{,}\;
+ \Delta yi=y_{AB}-y_{BA} }$.}
+
+ For vertical attachment, connecting one fragment to the
+ lower end of another by coordinate shifting, the following
+ steps are necessary: The points of attachment of the
+ upper and the lower fragment are shifted to the bottom
+ and to the top of their respective picture boxes and
+ the x-coordinates of attachment are aligned. The new
+ \verb+\+xi and \verb+\+yi values are then \\
+ \indent $\backslash {\rm yi_{upper}=-y_{upper} }$ \\
+ \indent $\backslash {\rm xi_{lower}=x_{upper}-x_{lower} }$ \\
+ \indent $\backslash {\rm yi_{lower}=\backslash pht_{lower}-
+ y_{lower}+14}$(correction for vertical spacing). \\
+ \indent For the structure of adenosine shown in figure 5.8
+ the points of attachment on purine (at the bottom of
+ N-9) and on deoxyribose (at the top of the long bond)
+ have the coordinates (513,-130) and (448,380),
+ respectively. Thus the structure was produced by the code
+ given underneath the diagram.
+ The horizontal space is used here instead of the centering
+ option. The blank lines \newpage
+ \noindent after each ring structure code are
+ necessary to inform LaTeX that the next item should not
+ be printed on the same line.
+
+ \begin{figure}
+ \hspace{5cm} \yi=130
+ \purine{Q}{D}{Q}{D}{Q}{$NH_2$}{Q}{D}{Q}
+
+ \hspace{5cm} \xi=65 \yi=534
+ \furanose{N}{}{}{$OH$}{}{$OH$}{}{$HO$}
+
+ \begin{minipage}{14cm}
+ \begin{verbatim}
+ \hspace{5cm} \yi=130 \purine{ ... }
+ (blank line)
+ \hspace{5cm} \xi=65 \yi=534 \furanose{ ... }
+ (blank line)
+ \caption{ ... }
+ \end{verbatim}
+ \end{minipage}
+
+ \caption{Vertical attachment by coordinate shifting}
+ \end{figure}
+
+
+ \vspace{\len mm}
+ \centerline{3. ALIGNING STRUCTURES IN AN EQUATION}
+ \vspace{\len mm}
+ In a chemical equation containing structure diagrams the
+ various constituents of the equation have to be horizontally
+ aligned. The equation is typeset in LaTeX's horizontal mode
+ on one line, the current printline. Text items such as
+ condensed formulas and plus symbols are put on the line
+ as usual, their (imaginary) baseline determining the
+ position of the line. The structure diagrams, as drawn
+ by the macros, will not be vertically centered on the
+ current line. They are drawn in picture boxes which are
+ typeset on the line with the lower end of the (imaginary)
+ box at the baseline of the current line. The picture boxes
+ are positioned at this height without regard to the
+ coordinates declared for the lower left corner of the
+ box. To line up the vertical middle of the diagram in the
+ box with the text of the line, one would have to shift the
+ diagram downwards beyond the bottom of the declared picture.
+ While this can be done, it might result in a lack of space
+ under the equation, since LaTeX reserves space only according
+ to the declared dimensions of the picture. Paragraph boxes
+ on the other hand are normally centered on the vertical
+ center of the current line. Paragraph boxes containing
+ the macros are positioned somewhat differently, with
+ a point one third up from the bottom of the picture at
+ the base of the current line. Thus there is one third of
+ the declared picture below the base of the current line
+ which yields enough vertical space to set off the
+ equation from the succeeding text.
+
+ The equation in
+ figure 5.9 was typeset by putting each macro-drawn
+ diagram into a \verb+\+parbox. The y-coordinate of the
+ lower end of the pictures is -300 as usual, which puts
+ position 2 of the sixring and the CHOH part from the
+ \verb+\+cleft macro at the base of the current line.
+ The LaTeX code for the equation is shown underneath it
+ in the figure.
+ The y-coordinates of the structures and of the reaction
+ arrow, in this case drawn by a macro, could be
+ shifted individually as well to change the alignment.
+ The TeX control sequence \verb+\+to ($\to $) can be used
+ instead of the special reaction arrow for chemistry;
+ ($\,\to $) is always centered on the line.
+
+ Getting good-looking horizontal spacings within the
+ equation usually requires some experimenting.
+ As previously mentioned, there is no inter-item
+ spacing in math mode. Therefore more explicit horizontal
+ space has to be added when chemical equations are
+ typeset in the math display environment.
+
+ \begin{figure}
+ \hspace{1.5cm}
+ \parbox{40pt}{\sixring{Q}{$R^{2}$}{Q}{Q}{Q}{Q}{S}{S}{C} }
+ \hspace{1cm} $+$ \hspace{1.5cm}
+ \parbox{40pt}{\cleft{$CH_{3}$}{S}{$CHOH$}{S}
+ {$CH_{3}$}{Q}{} }
+ \parbox{40pt}{\cto{BF_{3}}{60^{0}}{3} }
+ \hspace{3mm}
+ \parbox{40pt}{\sixring{$CH{(CH_3)}_2$}{$R^{2}$}{Q}{Q}{Q}{Q}{S}{S}{C} }
+
+ \begin{minipage}{14cm}
+ \begin{verbatim}
+ \hspace{1.5cm}
+ \parbox{40pt}{\sixring{Q}{$R^{2}$}{Q}{Q}{Q}{Q}{S}{S}{C} }
+ \hspace{1cm} $+$ \hspace{1.5cm}
+ \parbox{40pt}{\cleft{$CH_{3}$}{S}{$CHOH$}{S}
+ {$CH_{3}$}{Q}{} }
+ \parbox{40pt}{\cto{BF_{3}}{60_{0}}{3} }
+ \hspace{3mm}
+ \parbox{40pt}{\sixring{$CH{(CH_3)}_2$}{$R_{2}$}{Q}{Q}{Q}{Q}
+ {S}{S}{C} }
+ \end{verbatim}
+ \end{minipage}
+
+ \caption{Alignment in a chemical equation}
+ \end{figure}
+
+ \end{document}
diff --git a/macros/latex209/contrib/chemtex/chap6a.tex b/macros/latex209/contrib/chemtex/chap6a.tex
new file mode 100644
index 0000000000..96b9559c76
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chap6a.tex
@@ -0,0 +1,232 @@
+ \len=4
+ \newcommand{\ri}{No action is taken for any other value of
+ the argument}
+ \chapter{The complete system of macros---its design and its use}
+\label{ch:macros}
+ \section{General design criteria}
+ \LaTeX\ code can be written to typeset a structure diagram for any
+ chemical compound in such a way that the diagram conforms to
+ accepted practices in chemistry publications. The purpose
+ of the macros in this thesis is to reduce the amount of
+ low-level, bond-by-bond coding necessary to typeset a particular
+ structure. The problem of designing a generally useful system
+ of macros for this purpose has to be seen in the context
+ of the large number of possible structures: More than 7~million
+ chemical compounds are registered with the Chemical Abstracts
+ Service, including 60,000 different ring systems, and
+ innumerable additional structures are possible.
+ The fragments to be typeset by the macros in this thesis were
+ selected such that they could be helpful in producing the
+ more common types of structures. The arguments of each macro
+ in turn were selected with the goal of making the respective
+ fragment as flexible as possible, such that the more common
+ known structures of this type can be typeset by a particular
+ macro. The selection criteria were informal, using the
+ ``expert knowledge'' of the writer. Where a related
+ approach to displaying chemical structure diagrams was taken
+ in previous work, a similar selection of fragments was made
+ (Zimmerman~84)(Bendall~80,85). Both authors are chemists and
+ present a collection of fragments without any attempt to
+ justify their choices.
+
+ For more flexibility, the user of the system of macros
+ presented in this thesis can effect many structural
+ variations by defining an outer picture
+ and placing supplemental lines and atomic symbols into
+ it in addition to the fragment(s) produced by the macros.
+ It is estimated that the
+ macros can provide shortcuts
+ to the drawing of more than 50\% of the structures shown
+ in the widely used textbook by Solomons (Solomons~84).
+
+ The next section lists the individual macros in this system,
+ each with a typical generic structure and directions for
+ the use of all arguments. Specific selection criteria for
+ the fragment as such and the arguments are mentioned in
+ many cases. The fragments are listed in the traditional
+ categories of organic chemistry: acyclic structures,
+ alicyclic structures (rings where all ring members are
+ carbon atoms), and heterocyclic structures. The number
+ of arguments is given in brackets behind the macro name.
+
+\section{Macros of the system}
+\subsection{Macros for acyclic fragments}
+\subsubsection{Macro {\tt\char"5C{}cbranch}[9]}
+This macro
+ typesets structural fragments with vertical branches:
+$$\pht=700
+ \cbranch{$R^{1}$}{S}{$R^{3}$}{S}{$Z$}{S}{$R^{7}$}{S}{$R^{9}$} $$
+
+ \begin{description}
+ \item[{\rm Arguments 1,~3,~7,~9:}] The substituent formulas for
+ ${\rm R^1}$, ${\rm R^3}$, ${\rm R^7}$, and
+ ${\rm R^9}$.
+ \item[{\rm Argument 2:}] The bond between ${\rm R^1}$ and Z,
+ ``S'' for a single bond and ``D'' for a double
+ bond. No action is taken for any other value of
+ the argument.
+ \item[{\rm Argument 4:}] The bond between ${\rm R^3}$ and Z,
+ ``S'' for a single bond and ``D'' for a double
+ bond. When the argument is ``Q'', no bond is
+ drawn and ${\rm R^3}$ is moved next to Z.
+ \item[{\rm Argument 5:}] The center atom(s), Z. When the argument is
+ a string of more than one character, argument~6
+ should not be ``S'' or ``D,'' and argument~7
+ should be an empty set.
+ \item[{\rm Argument 6:}] The bond between Z and ${\rm R^7}$,
+ ``S'' for a single bond and ``D'' for a double
+ bond. No action is taken for any other value
+ of the argument.
+ \item[{\rm Argument 8:}] The bond between Z and ${\rm R^9}$,
+ ``S'' for a single bond and ``D'' for a double
+ bond. No action is taken for any other value
+ of the argument.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}tbranch}[7]}
+ This macro typesets structural fragments with vertical branches
+ similar to \verb+\cbranch+. The main reason for including
+ \verb+\tbranch+ is to show the use of the \LaTeX\ tabbing
+ mechanism for printing structural fragments.
+ Macro \verb+\cbranch+ is the preferred macro for structures
+ of this type. In contrast to the other macros, \verb+\tbranch+
+ provides the math mode for the substituent formulas in the
+ macro code. Therefore substituent formula arguments do not
+ have to be enclosed by \verb-$- symbols.
+ \[ \tbranch{R^1}{S}{R^3-}{Z-}{S}{R^6}{1} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1 and 6:}] The substituent formulas
+ for ${\rm R^1}$ and ${\rm R^6}$.
+ \item[{\rm Argument 2:}] The bond between ${\rm R^1}$
+ and Z, ``S'' for a single bond and ``D'' for a double
+ bond. No action is taken for any other value of the
+ argument.
+ \item[{\rm Argument 3:}] Atom symbols and bonds to the
+ left of Z. Single bonds have to be typed in as hyphens,
+ double bonds as equal signs.
+ \item[{\rm Argument 4:}] The center atom Z and any
+ bonds and atom symbols to its right. Single bonds have to
+ be typed in as hyphens, double bonds as equal signs.
+ \item[{\rm Argument 5:}] The bond between Z and
+ ${\rm R^6}$, ``S'' for a single bond and ``D'' for
+ a double bond. No action is taken for any other value
+ of the argument.
+ \item[{\rm Argument 7:}] An integer number which is interpreted
+ as printer points of negative space between lines.
+ The correct number for a document with double spacing
+ is 13.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}ethene}[4]}
+ This macro typesets an ethene fragment with four variable
+ substituents:
+ \[ \ethene{$R^1$}{$R^2$}{$R^3$}{$R^4$} \]
+
+ Arguments 1--4 are the substituent formulas represented by
+ ${\rm R^1}$, ${\rm R^2}$, ${\rm R^3}$, and ${\rm R^4}$.
+
+\subsubsection{Macro {\tt\char"5C{}upethene}[4]}
+ This macro is similar to \verb+\ethene+, but it draws
+ the ethene double bond vertically:
+ \[ \upethene{$R^1$}{$R^2$}{$R^3$}{$R^4$} \]
+
+ The arguments have the same meaning as they do for
+ \verb+\ethene+.
+
+ \subsubsection{Macro {\tt\char"5C{}cright}[7]}
+ This macro typesets the following fragment which is
+ often used for carboxylic acids and their derivatives:
+ \[ \cright{$R^1$}{S}{$Z$}{S}{$R^5$}{S}{$R^7$} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1,5,7:}] The substituent formulas
+ ${\rm R^1}$, ${\rm R^5}$, and ${\rm R^7}$.
+ \item[{\rm Argument 2:}] The bond between ${\rm R^1}$
+ and Z, ``S'' for a single bond and ``D'' for a double
+ bond. For an argument of ``Q'', no bond is drawn and
+ ${\rm R^1}$ is moved next to Z.
+ \item[{\rm Argument 3:}] The center atom(s) Z.
+ \item[{\rm Argument 4:}] The bond between Z and
+ ${\rm R^5}$, ``S'' for a single bond and ``D'' for
+ a double bond. \ri .
+ \item[{\rm Argument 6:}] The bond between Z and ${\rm R^7}$,
+ ``S'' for a single bond and ``D'' for a double bond. \ri .
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}cleft}[7]}
+ This macro typesets a fragment similar to the one produced
+ by \verb+\cright+, but opening to the left:
+ \[ \cleft{$R^1$}{S}{$Z$}{S}{$R^5$}{S}{$R^7$} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1, 5, 7:}] The substituent formulas
+ ${\rm R^1}$, ${\rm R^5}$, and ${\rm R^7}$.
+ \item[{\rm Argument 2:}] The bond between ${\rm R^1}$
+ and Z, ``S'' for a single bond and ``D'' for a double
+ bond. \ri .
+ \item[{\rm Argument 3:}] The center atom(s) Z.
+ When the argument is a string of more than one character,
+ argument~6 should not be ``S'' or ``D'', and argument~7
+ should be an empty set.
+ \item[{\rm Argument 4:}] The bond between ${\rm R^5}$
+ and Z, ``S'' for a single bond and ``D'' for a double
+ bond. \ri .
+ \item[{\rm Argument 6:}] The bond between Z and
+ ${\rm R^7}$, ``S''for a single bond and ``D'' for a
+ double bond. \ri .
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}chemup}[7]}
+ This macro typesets the following fragment which can
+ be used for small molecules with trigonal geometry:
+ \[ \chemup{$R^1$}{S}{$Z$}{S}{$R^5$}{S}{$R^7$} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1, 5, 7:}] The substituent formulas
+ ${\rm R^1}$, ${\rm R^5}$, and ${\rm R^7}$.
+ \item[{\rm Argument 2:}] The bond between ${\rm R^1}$ and
+ Z, ``S'' for a single bond and ``D'' for a double bond. \ri .
+ \item[{\rm Argument 3:}] The center atom Z.
+ \item[{\rm Argument 4:}] The bond between Z and ${\rm R^5}$,
+ ``S'' for a single bond and ``D'' for a double bond. \ri .
+ \item[{\rm Argument 6:}] The bond between Z and ${\rm R^7}$,
+ ``S'' for a single bond and ``D'' for a double bond. \ri .
+ \end{description}
+
+\subsubsection{Macro{\tt\char"5C{}cdown}[7]}
+ This macro typesets a fragment similar to the one produced
+ by \verb+\chemup+, but opening downwards:
+ \[ \cdown{$R^1$}{S}{$Z$}{S}{$R^5$}{S}{$R^7$} \]
+
+ The arguments have the same meaning as they do for \verb+\chemup+.
+
+\subsubsection{Macro {\tt\char"5C{}csquare}[5]}
+ This macro typesets a fragment that is sometimes used when all
+ four substituents on a center atom have to be shown explicitly:
+ \[ \csquare{$R^1$}{$R^2$}{$Z$}{$R^4$}{$R^5$} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--4:}] The substituent formulas
+ ${\rm R^1}$, ${\rm R^2}$, ${\rm R^4}$, and ${\rm R^5}$.
+ \item[{\rm Argument 3:}] The center atom Z.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}ccirc}[4]}.
+ This macro typesets a fragment used to show the actual
+ configuration at a tetrahedral atom. The tetrahedral atom itself
+ is not shown and is assumed to be in the middle of the sphere
+ represented by the circle. The bonds typeset as heavier lines
+ and intersecting the circle are directed out of the plane of
+ the paper, towards the viewer.
+ \[ \ccirc{$R^1$}{$R^2$}{$R^3$}{$R^4$} \]
+
+ The arguments 1--4
+ are the substituent formulas ${\rm R^1}$, ${\rm R^2}$,
+ ${\rm R^3}$, and ${\rm R^4}$.
+
+
+
+
+
+
diff --git a/macros/latex209/contrib/chemtex/chap6b.tex b/macros/latex209/contrib/chemtex/chap6b.tex
new file mode 100644
index 0000000000..f0d03f8e66
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chap6b.tex
@@ -0,0 +1,291 @@
+ \textfont1=\tenrm
+ \initial
+ \len=4
+ \newcommand{\ru}{No action is taken for any other value of
+ the argument}
+
+\subsection{Macros for alicyclic ring systems}
+\subsubsection{Macro {\tt\char"5C{}threering}[9]}
+ This macro typesets the cyclopropane ring. The aromatic
+ cyclopropenyl cation is drawn with a circle enclosing a plus
+ sign inside the ring. The ring positions to which ${\rm R^1}$,
+ ${\rm R^2}$, and ${\rm R^3}$ are attached are designated as
+ position 1, 2, and 3, respectively:
+ \[ \threering{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{$R^6$}{S}{Q}{Q}
+ \hspace{3cm}
+ \threering{$R^1$}{$R^2$}{$R^3$}{Q}{Q}{Q}{S}{Q}{C} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--6:}] An argument of ``Q''
+ causes no action. All other argument values are used as
+ the respective substituent formulas ${\rm R^1}$, ${\rm R^2}$,
+ ${\rm R^3}$, ${\rm R^4}$, ${\rm R^5}$, and ${\rm R^6}$.
+ The bond line to ${\rm R^2}$ is straight if the circle is in
+ the ring or if there is no second substituent at position 2,
+ and slanted otherwise.
+ \item[{\rm Argument 7:}] An argument of ``D'' typesets
+ a second bond between ring positions 1 and 3. \ru .
+ \item[{\rm Argument 8:}] An argument of ``Q'' causes
+ no action. All other argument values cause an outside double
+ bond to be drawn from ring position 2, and the argument itself
+ to be put at the end of the double bond as the substituent formula.
+ \item[{\rm Argument 9:}] An argument of ``C'' typesets
+ a circle enclosing a plus sign inside the ring. All other
+ argument values cause no action.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}fourring}[9]}
+ This macro typesets the cyclobutane ring. The ring positions
+ to which ${\rm R^1}$, ${\rm R^2}$, ${\rm R^3}$, and ${\rm R^4}$
+ are attached are designated position 1, 2, 3, and 4, respectively.
+ \[ \fourring{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{$R^6$}{S}{S}{Q}
+ \hspace{3cm}
+ \fourring{Q}{Q}{Q}{Q}{Q}{Q}{Q}{D}{$R^9$} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--6:}] An argument of ``Q'' causes
+ no action. All other argument values are used as the respective
+ substituent formulas ${\rm R^1}$, ${\rm R^2}$, ${\rm R^3}$,
+ ${\rm R^4}$, ${\rm R^5}$, and ${\rm R^6}$.
+ \item[{\rm Argument 7:}] An argument of ``D'' typesets
+ a second bond between ring positions 1 and 2. \ru .
+ \item[{\rm Argument 8:}] An argument of ``D'' typesets
+ a second bond between ring positions 3 and 4. \ru .
+ \item[{\rm Argument 9:}] An argument of ``Q'' causes
+ no action. All other argument values cause an outside
+ double bond to be drawn from ring position 2, and the
+ argument itself to be put at the end of the double bond
+ as substituent formula ${\rm R^9}$.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}fivering}[9]}
+ This macro typesets the cyclopentane ring. The aromatic
+ cyclopentadienyl anion is drawn with a circle enclosing a
+ minus sign inside the ring. The ring positions to which
+ ${\rm R^1}$, ${\rm R^2}$, ${\rm R^3}$, ${\rm R^4}$, and
+ ${\rm R^5}$ are attached are designated as position
+ 1, 2, 3, 4, and 5, respectively:
+ \[ \fivering{$R^1$}{$R^2$}{Q}{$R^4$}{$R^5$}{$R^6$}{$R^7$}{$R^8$}{Q}
+ \hspace{3cm}
+ \fivering{Q}{Q}{$R^3$}{Q}{Q}{S}{S}{Q}{C} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--5:}] An argument of ``Q''
+ causes no action. All other argument values are used as the
+ respective substituent formulas ${\rm R^1}$, ${\rm R^2}$,
+ ${\rm R^3}$, ${\rm R^4}$, and ${\rm R^5}$.
+ \item[{\rm Argument 6:}] An argument of ``D'' typesets
+ a second bond between ring positions 1 and 2. An argument
+ of ``S'' causes no action. All other argument values are
+ used as the substituent formula ${\rm R^6}$.
+ \item[{\rm Argument 7:}] An argument of ``D'' typesets
+ a second bond between ring positions 4 and 5. An argument
+ of ``S'' causes no action. All other argument values are
+ used as the substituent formula ${\rm R^7}$.
+ \item[{\rm Argument 8:}] An argument of ``Q'' causes
+ no action. All other argument values cause an outside
+ double bond to be drawn from ring position 3, and the
+ argument itself to be put at the end of the double bond
+ as substituent formula ${\rm R^8}$.
+ \item[{\rm Argument 9:}] An argument of ``C'' typesets
+ a circle enclosing a minus sign inside the ring. \ru .
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}sixring}[9]}
+ This macro typesets a carbon sixring as a regular hexagon.
+ A benzene ring can be drawn with alternating double bonds or
+ with a circle inside the ring. The ring positions to which
+ ${\rm R^1}$, ${\rm R^2}$, ${\rm R^3}$, ${\rm R^4}$, ${\rm R^5}$,
+ and ${\rm R^6}$ are attached are designated as position
+ 1, 2, 3, 4, 5, and 6, respectively:
+ \[ \sixring{$R^1$}{$R^2$}{Q}{$R^4$}{$R^5$}{$R^6$}{$R^7$}{$R^8$}{D}
+ \hspace{3cm}
+ \sixring{Q}{Q}{$R^3$}{Q}{Q}{Q}{S}{S}{C} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--6:}] An argument of ``Q'' causes
+ no action. All other argument values are used as the respective
+ substituent formulas ${\rm R^1}$, ${\rm R^2}$, ${\rm R^3}$,
+ ${\rm R^4}$, ${\rm R^5}$, and ${\rm R^6}$.
+ \item[{\rm Argument 7:}] An argument of ``D'' typesets
+ a second bond between ring positions 1 and 2. An argument
+ of ``S'' causes no action. All other argument values are
+ used as the substituent formula ${\rm R^7}$.
+ \item[{\rm Argument 8:}] An argument of ``D'' typesets
+ a second bond between ring positions 3 and 4. An argument
+ of ``S'' causes no action. All other argument values cause
+ an outside double bond to be drawn from ring position 3
+ and the argument itself to be put at the end of the double
+ bond as substituent formula ${\rm R^8}$.
+ \item[{\rm Argument 9:}] An argument of ``D'' typesets
+ a second bond between ring positions 5 and 6. An argument
+ of ``C'' typesets a circle inside the ring. \ru .
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}sixringa}[9]}
+ This macro differs from \verb+\sixring+ only in the positions
+ of the double bonds. A value of ``D'' for arguments 7, 8, and 9
+ puts a double bond between ring positions 1 and 6, ring positions
+ 2 and 3, and ring positions 4 and 5, respectively.
+ Since the carbon sixring is so common, more options are needed
+ for it than for the other rings.
+
+\subsubsection{Macro {\tt\char"5C{}sixringb}[9]}
+ This macro is also very similar to \verb+\sixring+, but it
+ allows all 17 chemically possible combinations of double bonds,
+ including the three quinoid structures that can not be typeset
+ with \verb+\sixring+ or \verb+\sixringa+.
+ \[ \sixringb{Q}{Q}{Q}{Q}{Q}{Q}{$R^7$}{$R^8$}{9} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--6:}] These arguments have the
+ same meaning as in \verb+\+sixring+.
+ \item[{\rm Argument 7:}] An argument of ``Q'' causes
+ no action. All other argument values cause an outside
+ double bond to be drawn from ring position 6 and the
+ argument itself to be put at the end of the double bond
+ as substituent formula ${\rm R^7}$.
+ \item[{\rm Argument 8:}] An argument of ``Q'' causes
+ no action. All other argument values cause an outside
+ double bond to be drawn from ring position 3 and the
+ argument itself to be put at the end of the double bond
+ as substituent formula ${\rm R^8}$.
+ \item[{\rm Argument 9:}] An integer number. The number
+ zero causes the circle to be drawn inside the ring.
+ All other integers are interpreted as a combination of
+ ring double bonds according to the bit pattern corresponding
+ to the decimal integer: A bit pattern of 000001 is interpreted
+ as a double bond beginning at ring position 1, a bit pattern
+ of 100000 (integer 32) as a double bond beginning at ring
+ position 6. Thus, argument 9 for the diagram shown above
+ is 9 (001001).
+ No action occurs for argument values that correspond to
+ a combination of double bonds which is chemically not
+ possible, namely any combination with two adjoining
+ double bonds.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}chair}[8]}
+ This macro typesets the saturated carbon sixring in its most
+ favorable conformation. The axial and equatorial bond lines
+ to the substituents are always drawn by this macro, even when
+ there is no substituent in a particular position. This is the
+ usual practice in drawing the chair form.
+ \[ \chair{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{$R^6$}{$R^7$}{$R^8$} \]
+
+ The eight arguments represent the respective substituent formulas
+ ${\rm R^1}$--${\rm R^8}$.
+
+\subsubsection{Macro {\tt\char"5C{}naphth}9]}
+ This macro typesets the aromatic naphthalene ring system,
+ the fully saturated decalin ring system, and the
+ 1,2,3,4-tetra\-hydro\-naphthalene shown in the diagram. The position
+ numbers 1--8 are specified by the nomenclature rules of
+ chemistry.
+ \[ \naphth{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{$R^6$}{$R^7$}
+ {$R^8$}{Q} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--8:}] An argument of Q causes
+ no action. All other argument values are used as the
+ respective substituent formulas ${\rm R^1}$--${\rm R^8}$.
+ \item[{\rm Argument 9:}] A value of ``S'' typesets the
+ ring system with no double bonds (decalin). A value of ``D''
+ typesets the aromatic system naphthalene with alternating
+ double bonds. All other argument values draw the partially
+ saturated system shown above.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}terpene}[9]}
+ This macro typesets the bicyclo(2.2.1)heptane ring system
+ found in such terpenes as borneol, camphor, and fenchol.
+ The position numbers 1--7 are specified by the
+ nomenclature rules of chemistry.
+ \[ \terpene{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{$R^6$}
+ {M}{$R^8$}{Q} \hspace{3.5cm}
+ \terpene{Q}{Q}{Q}{Q}{Q}{Q}{Q}{O}{$R^9$} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--6:}] An argument of ``Q''
+ causes no action. All other argument values are used
+ as the respective substituent formulas ${\rm R^1}$--${\rm R^6}$.
+ \item[{\rm Argument 7:}] An argument of ``M''
+ prints two methyl groups on bonds extending from
+ carbon \#7. All other arguments cause no action.
+ \item[{\rm Argument 8:}] An argument of ``Q''
+ causes no action. An argument of ``O'' prints an
+ oxo group at carbon \#2. All other argument values
+ are used as a second substituent on carbon \#2,
+ shown as ${\rm R^8}$.
+ \item[{\rm Argument 9:}] An argument of ``Q''
+ causes no action. An argument of ``D'' prints a second bond
+ between positions 2 and 3. All other argument values
+ are used as a second substituent on carbon \#3,
+ shown as ${\rm R^9}$.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}steroid}[9]}
+ This macro typesets the steroid skeleton. The position
+ numbers are specified by the nomenclature rules. The
+ arguments are selected such that common types of steroids
+ can be printed. Cholesterol, estradiol, progesterone,
+ and cortisone are some of the steroids that can be produced.
+ \pht=1600 \pw=1200
+ \[ \steroid{$R^{11}$}{D}{$R^3$}{Q}{Q}{D}{$R^{20}$}
+ {$R^{21}$}{$R^{17}$} \]
+
+ \pht=900 \pw=400
+ \begin{description}
+ \item[{\rm Argument 1:}] An argument of ``D''
+ prints a second bond between positions 1 and 2.
+ An argument of ``Q'' causes no action. All other
+ argument values cause an outside double bond to be
+ drawn from position 11 and the argument itself to be
+ put at the end of the double bond as substituent
+ formula ${\rm R^{11}}$.
+ \item[{\rm Argument 2:}] An argument of ``D''
+ prints a second bond between positions 3 and 4
+ (this double bond is shown in the diagram).
+ An argument of ``Q'' causes no action. All other
+ argument values cause an outside double bond to be
+ drawn from position 3 and the argument itself to be
+ put at the end of the double bond.
+ \item[{\rm Argument 3:}] An argument of ``Q''
+ causes no action. All other argument values cause
+ a single bond to be drawn from position 3 and the
+ argument itself to be put at the end of the bond
+ as substituent formula ${\rm R^3}$.
+ \item[{\rm Argument 4:}] An argument of ``D''
+ prints a second bond between positions 4 and 5.
+ All other argument values cause no action.
+ \item[{\rm Argument 5:}] An argument of ``D''
+ prints a second bond between positions 5 and 6.
+ An argument of ``Q'' causes no action. All other
+ argument values cause an outside double bond
+ to be drawn from position 17 and the argument
+ itself to be put at the end of the double bond.
+ \item[{\rm Argument 6:}] An argument of ``D''
+ prints a second bond between positions 5 and 10
+ (shown in the diagram). An argument of ``M''
+ prints the methyl group containing carbon \#19 and the
+ bond to it.
+ \ru .
+ \item[{\rm Argument 7:}] An argument of ``Q''
+ causes no action. All other argument values print
+ the substituent formula beginning with carbon \#20,
+ represented by ${\rm R^{20}}$ in the diagram, and the
+ bond to it.
+ \item[{\rm Argument 8:}] An argument of ``Q''
+ causes no action. All other argument values print
+ the substituent formula beginning with carbon \#21,
+ represented by ${\rm R^{21}}$ in the diagram,
+ and the bond to it.
+ \item[{\rm Argument 9:}] An argument of ``Q''
+ causes no action. All other argument values print
+ the second substituent on carbon \#17 and the bond
+ to it. This substituent is shown in the diagram
+ as ${\rm R^{17}}$.
+ \end{description}
+
+
+
diff --git a/macros/latex209/contrib/chemtex/chap6c.tex b/macros/latex209/contrib/chemtex/chap6c.tex
new file mode 100644
index 0000000000..00ec5601a6
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chap6c.tex
@@ -0,0 +1,285 @@
+ \textfont1=\tenrm
+ \initial
+ \len=4
+ \newcommand{\rii}{All other argument values cause no action}
+ \newcommand{\rhq}{An argument of ``Q'' causes no action. \ }
+
+\subsection{Macros for heterocyclic ring systems}
+\subsubsection{Macro {\tt\char"5C{}hetthree}[8]}
+ This macro typesets a 3-membered ring with one hetero atom.
+ The common ring structures of this type are epoxides (oxirane)
+ and ethylene imine (aziridine). Ring positions 1, 2, and 3 are
+ the positions to which ${\rm R^1}$, ${\rm R^2}$, and ${\rm R^3}$
+ are attached.
+ \[ \hetthree{${\rm R^1}$}{${\rm R^2}$}{${\rm R^3}$}{${\rm R^4}$}
+ {Q}{S}{H}{N} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--5:}] An argument of ``Q''
+ causes no action. All other argument values are used as
+ the respective substituent formulas ${\rm R^1}$--${\rm R^5}$.
+ \item[{\rm Argument 6:}] An argument of ``S'' typesets
+ a bond to the left of ring atom \#2. An argument of ``H''
+ puts ---H to the left of ring atom \#2. For all other
+ argument values, no bond is drawn and ${\rm R^2}$ is moved
+ next to ring atom \#2.
+ \item[{\rm Argument 7:}] An argument of ``S'' typesets
+ a bond to the right of ring atom \#3. An argument of ``H''
+ puts H--- to the right of ring atom \#3. For all other
+ argument values, no bond is drawn and ${\rm R^3}$ is
+ moved next to ring atom \#3.
+ \item[{\rm Argument 8:}] The atom symbol for the
+ hetero atom.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}hetifive}[9]}
+ This macro typesets 5-membered rings with one hetero atom.
+ Thus it can be used to print the pyrrole, furan, and
+ thiophene ring systems, and their hydrogenated versions.
+ The arguments are selected such that common compounds like
+ proline, pyrrolidone, maleic anhydride, and vitamin C
+ can be printed. Ring positions 1, 2, 3, 4, and 5 are the
+ positions to which ${\rm R^1}$--${\rm R^5}$ are attached.
+ \[ \hetifive{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{D}{Q}{D}{$N$}
+ \hspace{3cm}
+ \hetifive{Q}{O}{Q}{Q}{O}{Q}{D}{Q}{O} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1,3,4:}] An argument of ``Q''
+ causes no action. All other argument values are used
+ as the respective substituent formulas ${\rm R^1}$,
+ ${\rm R^3}$, and ${\rm R^4}$.
+ \item[{\rm Argument 2:}] An argument value of ``Q''
+ causes no action. An argument value of ``O'' puts an
+ outside double bond with an O in ring position 2.
+ All other argument values are used as the substituent
+ formula ${\rm R^2}$ with a single bond.
+ \item[{\rm Argument 5:}] An argument value of ``Q''
+ causes no action. An argument value of ``O'' puts an
+ outside double bond with an O in ring position 5.
+ All other argument values are used as the substituent
+ formula ${\rm R^5}$ with a single bond.
+ \item[{\rm Argument 6:}] An argument of ``D'' draws
+ a second bond between ring positions 2 and 3. \rii .
+ \item[{\rm Argument 7:}] An argument of ``D'' draws
+ a second bond between ring positions 3 and 4. \rii .
+ \item[{\rm Argument 8:}] An argument of ``D'' draws
+ a second bond between ring positions 4 and 5. \rii .
+ \item[{\rm Argument 9:}] The atomic symbol of the
+ hetero atom.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}heticifive}[9]}
+ This macro typesets a 5-membered ring with 2 hetero atoms
+ separated by a carbon atom. Thus it can be used to print ring
+ systems such as imidazole, thiazole, and oxazole. The arguments
+ were selected by considering actually occurring compounds
+ containing these ring systems. Ring positions 1, 2, 3, 4, and 5
+ are the positions to which ${\rm R^1}$--${\rm R^5}$ are
+ attached.
+ \[ \heticifive{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{Q}{$R^7$}
+ {$N$}{$N$} \hspace{3cm}
+ \heticifive{Q}{O}{Q}{Q}{Q}{Q}{D}{N}{O} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1, 3, 5:}] An argument of ``Q''
+ causes no action. All other argument values are used as
+ the respective substituent formulas ${\rm R^1}$, ${\rm R^3}$,
+ and ${\rm R^5}$.
+ \item[{\rm Argument 2:}] An argument of ``Q''causes no
+ action. An argument of ``O'' puts an outside double bond
+ with an O in ring position 2. All other argument values
+ are used as the substituent formula ${\rm R^2}$ with
+ a single bond.
+ \item[{\rm Argument 4:}] An argument of ``Q''causes
+ no action. An argument of ``O'' puts an outside double bond
+ with an O in ring position 4. All other argument values
+ are used as the substituent formula ${\rm R^4}$ with a
+ single bond.
+ \item[{\rm Argument 6:}] An argument of ``D'' draws
+ a second bond between ring positions 2 and 3. \rii .
+ \item[{\rm Argument 7:}] An argument of ``Q'' causes
+ no action. An argument of ``D'' draws a second bond
+ between ring positions 4 and 5. All other argument values
+ are used as the substituent formula ${\rm R^7}$, the second
+ substituent at ring position 5.
+ \item[{\rm Arguments 8 and 9:}] The atomic symbols of the
+ hetero atoms in position 1 and 3, respectively.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}pyrazole}[8]}
+ The pyrazole ring is found in a number of drugs, such as
+ aminopyrine. Ring positions 1, 2, 3, 4, and 5 are the
+ positions to which ${\rm R^1}$--${\rm R^5}$ are attached.
+ \yi=200 \pht=750
+ \[ \pyrazole{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{Q}{D}{Q}
+ \hspace{3cm}
+ \pyrazole{$R^1$}{Q}{Q}{Q}{O}{D}{Q}{Q} \]
+
+ \reinit
+ \begin{description}
+ \item[{\rm Arguments 1, 2, 4:}] An argument of ``Q''
+ causes no action. All other argument values are used as
+ the respective substituent formulas ${\rm R^1}$, ${\rm R^2}$,
+ and ${\rm R^4}$.
+ \item[{\rm Argument 3:}] An argument of ``Q'' causes
+ no action. An argument of ``O'' puts an outside double
+ bond with an O in ring position 3. All other argument
+ values are used as the substituent formula ${\rm R^3}$
+ with a single bond.
+ \item[{\rm Argument 5:}] An argument of ``Q'' causes
+ no action. An argument of ``O'' puts an outside double
+ bond with an O in ring position 5. All other argument
+ values are used as the substituent formula ${\rm R^5}$
+ with a single bond.
+ \item[{\rm Arguments 6, 7, 8:}] An argument of ``D''
+ draws a second bond between ring positions 2 and 3,
+ ring positions 3 and 4, and ring positions 4 and 5,
+ respectively. \rii .
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}hetisix}[9]}
+ This macro typesets a six-membered ring with one hetero
+ atom. Thus it can be used to print ring systems such as
+ pyridine and pyran. The arguments were selected by
+ considering actually occurring compounds such as the
+ B vitamins niacin and pyridoxine and the coumarin ring
+ system. Ring positions 1--6 are the positions to which
+ ${\rm R^1}$--${\rm R^6}$ are attached.
+ \[ \hetisix{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{$R^6$}
+ {D}{D}{$N$}
+ \hspace{3cm}
+ \hetisix{Q}{Q}{Q}{Q}{Q}{Q}{$R^7$}{Q}{O} \]
+
+ \begin{description}
+ \item[{\rm Argument 1:}] An argument of ``Q'' causes
+ no action. An argument of ``D'' prints a second bond
+ between positions 1 and 6. All other arguments values
+ are used as the substituent formula ${\rm R^1}$.
+ \item[{\rm Arguments 2--6:}] An argument of ``Q''
+ causes no action. All other argument values are used as
+ the respective substituent formulas ${\rm R^2}$--${\rm R^6}$.
+ \item[{\rm Argument 7:}] An argument of ``Q'' causes
+ no action. An argument of ``D'' prints a second bond
+ between positions 2 and 3. All other argument values
+ cause an outside double bond to be drawn from position
+ 2 and the argument itself to be put at the end of the
+ double bond as ${\rm R^7}$.
+ \item[{\rm Argument 8:}] An argument of ``D'' prints
+ a second bond between positions 4 and 5. \rii .
+ \item[{\rm Argument 9:}] The atomic symbol of the
+ hetero atom.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}pyrimidine}[9]}
+ The pyrimidine ring occurs in such important compounds
+ as cytosine, thymine, uracil, and the barbiturates.
+ The arguments of the macro were selected such that
+ these compounds can be typeset. Ring positions 1--6
+ are the positions to which ${\rm R^1}$--${\rm R^6}$
+ are attached.
+ \[ \pyrimidine{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{$R^6$}
+ {Q}{Q}{D}
+ \hspace{3cm}
+ \pyrimidine{$H$}{O}{$H$}{O}{$R^5$}{O}{Q}{$R^8$}{Q} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1, 3, 5:}] An argument of ``Q''
+ causes no action. All other argument values are used
+ as the respective substituent formulas ${\rm R^1}$,
+ ${\rm R^3}$, and ${\rm R^5}$.
+ \item[{\rm Argument 2:}] An argument of ``Q'' causes
+ no action. An argument of ``O'' causes an outside double
+ bond with an O to be drawn at position 2. All other
+ argument values are used as the substituent formula
+ ${\rm R^2}$ with a single bond.
+ \item[{\rm Argument 4:}] An argument of ``Q'' causes
+ no action. An argument of ``O'' causes an outside double
+ bond with an O to be drawn at position 4. All other
+ argument values are used as the substituent formula
+ ${\rm R^4}$ with a single bond.
+ \item[{\rm Argument 6:}] An argument of ``Q'' causes
+ no action. An argument of ``O'' causes an outside double
+ bond with an O to be drawn at position 6. All other
+ argument values are used as the substituent formula
+ ${\rm R^6}$ with a single bond.
+ \item[{\rm Argument 7:}] An argument of ``D''
+ prints a second bond between positions 1 and 2. \rii .
+ \item[{\rm Argument 8:}] An argument of ``Q'' causes
+ no action. An argument of ``D'' prints a second bond
+ between positions 3 and 4. All other argument values
+ are used as the second substituent in position 5,
+ ${\rm R^8}$.
+ \item[{\rm Argument 9:}] An argument of ``D''
+ prints a second bond between positions 5 and 6. \rii .
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}pyranose}[9]}
+ This macro was developed specifically for monosaccharide
+ structures. Carbon \#1 is at the position to which
+ ${\rm R^1}$ is attached. Structures from this macro look
+ best with substituent formulas in 10 point size (shown)
+ or even smaller.
+ \[ \pyranose{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{$R^6$}
+ {$R^7$}{$R^8$}{$R^9$} \]
+
+ Arguments 1--9 are used as the respective substituent
+ formulas ${\rm R^1}$--${\rm R^9}$. \rhq
+
+ \subsubsection{Macro {\tt\char"5C{}furanose}[8]}
+ This macro was also developed specifically for
+ monosaccharide structures. Carbon \#1 is at the position
+ to which ${\rm R^1}$ is attached. Structures look best
+ with substituent formulas in 10 point size (shown)
+ or even smaller.
+ \[ \furanose{$R^1$}{$R^2$}{$R^3$}{$R^4$}{$R^5$}{$R^6$}
+ {$R^7$}{$R^8$} \]
+
+ \begin{description}
+ \item[{\rm Argument 1:}] \rhq An argument of ``N''
+ prints a long vertical bond at position 1,
+ used for attachment to
+ purine and pyrimidine bases to form nucleosides.
+ All other argument values are used as the substituent
+ formula ${\rm R^1}$.
+ \item[{\rm Arguments 2--8}] \rhq All other
+ argument values are used as the respective substituent
+ formulas ${\rm R^2}$--${\rm R^8}$.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}purine}[9]}
+ The purine ring system occurs in such important compounds
+ as adenine, guanine, caffeine, and uric acid. The arguments
+ of the macro were selected such that these compounds can
+ be typeset. Positions 1, 2, 3, 6, 7, 8, and 9 are indicated
+ in the following diagram by the respective substituent
+ formulas.
+ \[ \purine{$R^1$}{$R^2$}{$R^3$}{Q}{$R^6$}{Q}{$R^7$}
+ {$R^8$}{$R^9$} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1, 3, 6, 7, 9:}] \rhq
+ All other argument values are used as the respective
+ substituent formulas ${\rm R^1}$ $\ldots$ ${\rm R^9}$.
+ \item[{\rm Argument 2:}] An argument of ``D'' prints
+ a second bond between positions 2 and 3. All other
+ argument values cause an outside double bond to be
+ printed at position 2 and the argument itself to be put
+ at the end of the double bond as the substituent formula
+ ${\rm R^2}$.
+ \item[{\rm Argument 4:}] An argument of ``D'' prints
+ a second bond between positions 1 and 6. \rii .
+ \item[{\rm Argument 5:}] \rhq All other argument
+ values cause an outside double bond to be printed at
+ position 6 and the argument itself to be put at the end
+ of the double bond as the substituent formula
+ ${\rm R^6}$.
+ \item[{\rm Argument 8:}] An argument of ``D'' prints
+ a second bond between positions 7 and 8. All other
+ argument values cause an outside double bond to be
+ printed at position 8 and the argument itself to be put
+ at the end of the double bond as the substituent
+ formula ${\rm R^8}$.
+ \end{description}
+
+
diff --git a/macros/latex209/contrib/chemtex/chap6d.tex b/macros/latex209/contrib/chemtex/chap6d.tex
new file mode 100644
index 0000000000..569bbb8c7b
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chap6d.tex
@@ -0,0 +1,245 @@
+% \input{init.tex}
+% \input{fparts.tex}
+% \input{cto.tex}
+% \input{bonds.tex}
+ \textfont1=\tenrm
+ \initial
+ \len=4
+
+\subsection{General Utility Macros}
+\subsubsection{Macro {\tt\char"5C{}fuseiv}[9]}
+ This macro typesets a fragment that is designed to be
+ connected at two places to another ring system with the
+ effect of fusing an additional sixring to that system.
+ The fragment can be fused to positions 1 and~2 of the
+ carbon fivering and the carbon sixring, and to positions
+ 2 and~3 of the \verb+\hetifive+ and \verb+\hetisix+ rings
+ without changing
+ the unitlength and the \verb+\yi+ coordinate.
+ \yi=200 \pht=750
+ \[ \fuseiv{$R^1$}{$R^2$}{$R^3$}{$R^4$}{D}{$R^6$}{Q}{Q}{D} \]
+
+ \reinit
+ \begin{description}
+ \item[{\rm Arguments 1--4:}] \rhq All other argument
+ values are used as the substituent formulas ${\rm R^1}$--${\rm R^4}$.
+ \item[{\rm Argument 5:}] An argument of ``D''
+ prints a second bond between the upper point of
+ attachment and position 1 (this double bond is shown
+ in the diagram). \rii
+ \item[{\rm Argument 6:}] \rhq An argument of ``D'' prints
+ a second bond between positions 1 and 2. All other argument
+ values are used as the substituent formula ${\rm R^6}$.
+ \item[{\rm Argument 7:}] An argument of ``D''
+ prints a second bond between positions 2 and 3. All other
+ argument values cause no action.
+ \item[{\rm Argument 8:}] \rhq An argument of ``D'' prints
+ a second bond between positions 3 and 4. All other
+ argument values are used as a second substituent in
+ position 3 (not shown in the diagram).
+ \item[{\rm Argument 9:}] An argument of ``D'' prints
+ a second bond from the lower point of attachment to
+ position 4 (this double bond is shown in the diagram).
+ All other argument values cause no action.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}fuseup}[9]}
+ This macro typesets a fragment that is designed to be
+ connected at two places to another ring system with the
+ effect of fusing an additional sixring to that system
+ at an angle. The fragment can be fused to positions
+ 1 and~6 of the carbon sixring and positions 3 and~4 of
+ the \verb+\hetisix+ rings without changing the unitlength
+ and the \verb+\yi+ coordinate.
+ \advance \yi by -500
+ \[ \fuseup{$R^1$}{$R^2$}{$R^3$}{$R^4$}{D}{Q}{D}{Q}{D} \]
+
+ \yi=300
+ \begin{description}
+ \item[{\rm Arguments 1--4:}] \rhq All other
+ argument values are used as the respective substituent
+ formulas ${\rm R^1}$--${\rm R^4}$.
+ \item[{\rm Argument 5:}] An argument of ``D'' prints
+ a second bond from the upper point of attachment to
+ position 1 (the resulting double bond is shown in the
+ diagram). \rii
+ \item[{\rm Argument 6:}] An argument of ``D'' prints
+ a second bond between positions 1 and 2. \rii
+ \item[{\rm Argument 7:}] An argument of ``D'' prints
+ a second bond between positions 2 and 3 (the resulting
+ double bond is shown in the diagram). \rii
+ \item[{\rm Argument 8:}] An argument of ``D'' prints
+ a second bond between positions 3 and 4. \rii
+ \item[{\rm Argument 9:}] An argument of ``D'' prints
+ a second bond between position 4 and the lower point
+ of attachment (the resulting double bond is shown in
+ the diagram). \rii
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}fuseiii}[6]}
+ This macro typesets a fragment that is designed to be
+ connected at two places to another ring system with the
+ effect of fusing an additional fivering to that system.
+ The fragment can be fused to positions 1 and 2 of the
+ carbon fivering and sixring, and to positions 2 and 3 of
+ the \verb+\hetifive+ and \verb+\hetisix+ rings
+ without changing the unitlength and the \verb+\yi+
+ coordinate.
+ \pht=600
+ \[ \fuseiii{$R^1$}{$R^2$}{$R^3$}{$R^4$}{Q}{D} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1--4:}] \rhq All other
+ arguments are used as the respective substituent
+ formulas ${\rm R^1}$--${\rm R^4}$.
+ \item[{\rm Argument 5:}] \rhq All other argument
+ values are used as a second substituent in position~2
+ (not shown in the diagram).
+ \item[{\rm Argument 6:}] An argument of ``D''
+ prints a second bond between positions 1 and 2. \rii
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}cto}[3]}
+ This macro draws a reaction arrow and puts the requested
+ character strings representing reagents and reaction
+ conditions on top and below the arrow, respectively.
+ The arrow is made long enough to accommodate the longer
+ of the strings. The vertical position of the arrow can be
+ changed by changing the \verb+\yi+ value.
+ \pw=1500
+ \[ \cto{string\ on\ top\ of\ the\ arrow}{string\ below}{26} \]
+
+ \begin{description}
+ \item[{\rm Arguments 1 and 2:}] The character
+ strings above and below the arrow, respectively.
+ \item[{\rm Argument 3:}] An integer, the number of
+ characters---including subscripts---in the longer string.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}sbond}[1]}
+ This macro draws a horizontal single bond of a specified
+ length, vertically centered on a line. It should be used
+ for structural formulas that do not use the picture
+ environment and are written on one line.
+ \[ \sbond{20} \]
+
+ The argument is an integer, expressing the length of the
+ bond in printer points (1pt~=~.35mm).
+
+\subsubsection{Macro {\tt\char"5C{}dbond}[2]}
+ This macro draws a horizontal double bond of a
+ specified length. It should be used for structural
+ formulas that do not use the picture environment and
+ are written on one line.
+ \[ \dbond{20}{10} \]
+
+ \begin{description}
+ \item[{\rm Argument 1:}] An integer, expressing
+ the length of the bond in printer points.
+ \item[{\rm Argument 2:}] An integer, expressing
+ the amount of vertical space by which the bonds have
+ to be pushed together to give the desired vertical
+ distance. In a document with double spacing, the
+ value~19 produces appropriate spacing. The value~10 works for
+ single spacing.
+ \end{description}
+
+\subsubsection{Macro {\tt\char"5C{}tbond}[2]}
+ This macro is similar to \verb+\dbond+, except that it
+ draws a triple bond:
+ \[ \tbond{20}{11} \]
+
+ The meaning of the arguments is the same as in
+ \verb+\dbond+. The value 20~can be used as argument~2 for double
+ spacing; 11~works for single spacing.
+
+\section{Common requirements for the use of the system}
+ So far in this thesis it has been explained how to write
+ \LaTeX\ code to produce a chemical structure diagram at a
+ particular place in a document. This section will discuss the
+ mandatory and the optional statements at the beginning of an
+ input file that make the system of macros accessible and
+ its use more practical and convenient. Figure~\ref{fg:preamble}
+ contains
+ these statements together with the two required declarations
+ at the beginning of a \LaTeX\ file, lines (1) and~(7).
+ (The line numbers are for reference only, they are not used
+ in the input file.)
+
+ The part of the input file preceding the \verb+\begin{document}+
+ statement is called the ``preamble'' in the \LaTeX\ Manual.
+ In addition to the statements shown here, the preamble usually
+ contains declarations pertaining to text formatting details
+ such as margin width, text height on a page, and space between
+ lines.
+
+ The document style option \verb+chemtex+ on line~(1) of
+ Figure~\ref{fg:preamble} is necessary if the
+ structure-drawing macros of this thesis are to be used for
+ the preparation of a document. This statement reads the file
+ \verb+chemtex.sty+ into \TeX's memory, a file that contains the
+ macros, \verb+\initial+ and \verb+\reinit+ as well as those
+ described above. Macro \verb+\initial+
+ defines the command sequences \verb+\xi+, \verb+\yi+, \verb+\pw+,
+ \verb+\pht+, \verb+\xbox+, and \verb+\len+ as integer variables
+ and assigns a count register to each of them. The use of the
+ first four variables in the picture declaration and the use
+ of \verb+\xbox+ in a minipage or parbox environment was
+ explained in chapter II. The counter \verb+\len+ is a general
+ purpose integer variable for the user. All the variables
+ except \verb+\len+ are also given initial values.
+ Furthermore, the unitlength for the picture environments is
+ set to 0.1 printer points in \verb+\initial+. This is the
+ recommended unitlength for the chemical structure diagrams,
+ but it can be changed anywhere in the document.
+ Line~(9) from Figure~\ref{fg:preamble}
+ calls \verb+\initial+.
+
+ The macro \verb+\reinit+ simply resets all the parameters
+ to their initial values from \verb+\initial+. It is a
+ convenience, especially for cases where more than one
+ variable needs to be reset.
+
+ \begin{figure}\centering
+ \begin{minipage}{10cm}
+ \begin{verbatim}
+ (1) \documentstyle[chemtex,...]{report}
+ (2) \setcounter{totalnumber}{4}
+ (3) \setcounter{topnumber}{2}
+ (4) \setcounter{bottomnumber}{2}
+ (5) \renewcommand{\topfraction}{.5}
+ (6) \renewcommand{\bottomfraction}{.5}
+ (7) \begin{document}
+ (8) \textfont1=\tenrm
+ (9) \initial
+ \end{verbatim}
+ \end{minipage}
+ \caption{Statements at the beginning of a \LaTeX\ file}
+\label{fg:preamble}
+ \end{figure}
+
+Note that
+ other document style options (represented by the \verb+...+) can
+ also be indicated on the \verb+\documentstyle+ command. See the
+ \LaTeX\ manual for details.
+
+ Lines (2)--(6) in Figure~\ref{fg:preamble} affect the placement of
+ ``floats'' on the page. The only floats discussed in this
+ thesis are the diagrams produced in the figure
+ environment (see Chapter~\ref{ch:frags}). In defining the style
+ of a document--the report style is designated by
+ line~(1)---the \LaTeX\ program sets default values for the maximum
+ total number of floats on a page (three), the maximum
+ number of floats at the top of the page (two), and at
+ the bottom of the page (one). These values can be
+ changed for documents with an unusually large number
+ of figures. Thus, lines (2)--(4) increase the
+ maximum number of floats to~4, evenly distributed on
+ the page. It is then necessary to change the counters
+ \verb+\topfraction+ and \verb+\+bottomfraction+ to
+ reflect the distribution of figures on the page.
+
+ Finally, line~(9) is the optional redefinition of the
+ math textfont, discussed in Chapter~\ref{ch:txltx}. This definition
+ can be changed anywhere in the document.
+
diff --git a/macros/latex209/contrib/chemtex/chemdoc.tex b/macros/latex209/contrib/chemtex/chemdoc.tex
new file mode 100644
index 0000000000..5eb09cf704
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chemdoc.tex
@@ -0,0 +1,35 @@
+ \documentstyle[11pt,chemtex,widepage]{report}
+ \def\LATEX{\LaTeX}
+ \let\TEX = \TeX
+ \setcounter{totalnumber}{4}
+ \setcounter{topnumber}{2}
+ \setcounter{bottomnumber}{2}
+ \renewcommand{\topfraction}{.5}
+ \renewcommand{\bottomfraction}{.5}
+ \setlength{\oddsidemargin}{0cm}
+ \setlength{\textwidth}{6.5in} %right margin is now 1in
+ \setlength{\topmargin}{0cm}
+ \setlength{\headheight}{0cm}
+ \setlength{\textheight}{8.5in}
+ \setlength{\parindent}{1cm}
+ \raggedbottom
+ \begin {document}
+ \textfont1=\tenrm
+ \initial
+\title{Typesetting Chemical Equations using \LaTeX}
+\author{}
+\date{}
+\maketitle
+
+\tableofcontents
+\hbadness 10001
+ \input{chap3A}
+ \input chap4
+ \input chap6A
+ \input chap6B
+ \input chap6C
+ \input chap6D
+\appendix
+ \input appdc
+ \input appdb
+\end{document}
diff --git a/macros/latex209/contrib/chemtex/chemtex.readme b/macros/latex209/contrib/chemtex/chemtex.readme
new file mode 100644
index 0000000000..7b8fc0fa90
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chemtex.readme
@@ -0,0 +1,18 @@
+The macros were provided by
+Roswitha Haas, and published by Haas and O'Kane, Comput. Chem.
+(1987) 11:251-271, and should be acknowledged by users who produce
+finished manuscripts. Use the macros by adding chemtex to the document
+style options; for example,
+ \documentstyle[chemtex,12point]{report}
+To get a copy of the manual, latex and print the CHEMDOC TeX file
+It is 58 pages long.
+Files belonging to CHEMTEX macro.
+CHAP3A TEX K1
+APPDC TEX K1
+APPDB TEX K1
+CHAP6B TEX K1
+CHAP6C TEX K1
+CHAP6D TEX K1
+CHAP4 TEX K1
+CHAP6A TEX K1
+CHEMTEX TEX K1
diff --git a/macros/latex209/contrib/chemtex/chemtex.sty b/macros/latex209/contrib/chemtex/chemtex.sty
new file mode 100644
index 0000000000..d5ade89bf5
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chemtex.sty
@@ -0,0 +1,1318 @@
+ \newcommand{\initial} {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Macro initial declares variables and initializes the %
+ % variables and the unitlength. Macro reinit resets the %
+ % values of the variables and the unitlength to the %
+ % original values. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \setlength{\unitlength}{.1pt}
+ \newcount\xi \newcount\yi
+ \xi=0 \yi=300
+ % coordinates of lower left corner
+ \newcount\pht \pht=900 % picture height
+ \newcount\pw \pw=400 % picture width
+ \newcount\xbox \xbox=50 % width of minipage
+ \newcount\len } % general purpose variable
+ % end macro initial
+ \newcommand{\reinit} {\xi=0 \yi=300 \xbox=50
+ \setlength{\unitlength}{.1pt}
+ \pht=900 \pw=400 } % end macro reinit
+ \newcommand{\cbranch}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The cbranch macro draws vertical branches as single and %
+ % double bonds, up and down. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,200) {#1} % upper subst.
+ \ifx#2S \put(40,85) {\line(0,1) {100}} % single up
+ \else\ifx#2D\multiput(27,85)(26,0){2} % double up
+ {\line(0,1) {100}} \fi \fi
+ \ifx#4Q \put(-305,0) {\makebox(300,87)[r]{#3}}
+ % left substituent without bond
+ \else \put(-455,0) {\makebox(300,87)[r]{#3}} \fi
+ % left substituent with bond
+ \ifx#4S \put(-150,33) {\line(1,0) {140}} % single left
+ \else\ifx#4D\multiput(-150,20)(0,26){2} % double left
+ {\line(1,0) {140}} \fi \fi
+ \put(0,0) {#5} % center
+ % atom(s)
+ \ifx#6S \put(90,33) {\line(1,0) {140}} % single right
+ \else\ifx#6D\multiput(90,20)(0,26){2} % double right
+ {\line(1,0) {140}} \fi \fi
+ \put(240,0) {#7} % right subst.
+ \ifx#8S \put(40,-15) {\line(0,-1) {100}} % single down
+ \else\ifx#8D\multiput(27,-15)(26,0){2} % double down
+ {\line(0,-1) {100}} \fi \fi
+ \put(0,-210) {#9} % lower subst.
+ \end{picture} } % end cbranch macro
+ \newcommand{\tbranch}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Macro tbranch draws structures with vertical branches, %
+ % single or double bonds, going up or down. %
+ % This macro uses the LaTeX tabbing mechanism. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{minipage}{\xbox pt}
+ \begin{tabbing}
+ $#3$\= $#4$\+ \kill
+ $#1$ \\ [-#7pt] % print top subst.
+ \ifx#2S % vertical bond going up
+ \hspace{4pt}\rule{0.4pt}{8pt} \\ [-#7pt]\fi
+ \ifx#2D
+ \hspace{2pt}\rule{0.4pt}{8pt}
+ \hspace{-2pt}\rule{0.4pt}{8pt} \\ [-#7pt]\fi
+ \- \kill
+ $#3$\> $#4$\+ \\ [-#7pt] % substituents on print line
+ \ifx#5S % vertical bond going down
+ \hspace{4pt}\rule{0.4pt}{8pt} \\ [-#7pt]\fi
+ \ifx#5D
+ \hspace{2pt}\rule{0.4pt}{8pt}
+ \hspace{-2pt}\rule{0.4pt}{8pt} \\ [-#7pt]\fi
+ $#6$
+ \end{tabbing}
+ \end{minipage} } % end tbranch macro
+ \newcommand{\ethene}[4] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a horizontal ethene fragment with %
+ % four variable substituents. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-405,170) {\makebox(300,87)[r]{#1}} % upper left
+ % subst.
+ \put(-405,-185) {\makebox(300,87)[r]{#3}} % lower left
+ % subst.
+ \put(0,70) {\line(-1,1) {100}} % NW bond
+ \put(0,0) {\line(-1,-1) {100}} % SW bond
+ \put(0,0) {C} % left C
+ \multiput(90,20)(0,25){2} {\line(1,0){140}} % double bond
+ \put(240,0) {C} % right C
+ \put(315,70) {\line(1,1) {100}} % NE bond
+ \put(315,0) {\line(1,-1) {100}} % SE bond
+ \put(425,170) {#2} % upper right
+ % subst.
+ \put(425,-170) {#4} % lower right
+ % subst.
+ \end{picture} } % end ethene macro
+ \newcommand{\upethene}[4] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a vertical ethene fragment with four %
+ % variable substituents. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-430,360) {\makebox(300,87)[r]{#1}} % NW subst.
+ \put(-430,-150) {\makebox(300,87)[r]{#2}} % SW subst.
+ \put(210,370) {#3} % NE subst.
+ \put(210,-140) {#4} % SE subst.
+ \put(0,300) {\line(-5,3) {121}} % NW bond
+ \put(0,230) {C} % upper C
+ \put(20,80) {\line(0,1) {140}} % vertical
+ \put(46,80) {\line(0,1) {140}} % d. bond
+ \put(0,0) {C} % lower C
+ \put(0,0) {\line(-5,-3) {121}} % SW bond
+ \put(80,300) {\line(5,3) {121}} % NE bond
+ \put(80,0) {\line(5,-3) {121}} % SE bond
+ \end{picture} } % end upethene macro
+ \newcommand{\cright}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a trigonal fragment, opening to the %
+ % right. The fragment has a variable center atom and three %
+ % variable substituents. Bonds can be single or double. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \ifx#2Q \put(-305,-15){\makebox(300,87)[r]{#1}} % left sub.
+ \else \put(-455,-15){\makebox(300,87)[r]{#1}} \fi
+ \ifx#2S \put(-150,33) {\line(1,0) {140}} \fi % single
+ % hor. bond
+ \ifx#2D \put(-150,20) {\line(1,0) {140}} % hor.
+ \put(-150,46) {\line(1,0) {140}} \fi % d. bond
+ \put(0,0) {#3} % center
+ % atoms
+ \ifx#4S \put(80,70) {\line(1,1) {100}} \fi % NE single
+ % bond
+ \ifx#4D \put(71,79) {\line(1,1) {100}}
+ \put(89,61) {\line(1,1) {100}} \fi % NE double
+ \put(185,170) {#5} % NE subst.
+ \ifx#6S \put(80,0) {\line(1,-1) {100}} \fi % SE single
+ \ifx#6D \put(71,-9) {\line(1,-1) {100}} % SE double
+ \put(89,9) {\line(1,-1) {100}} \fi % bond
+ \put(185,-170) {#7} % SE subst.
+ \end{picture} } % end cright macro
+ \newcommand{\cleft}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a trigonal fragment, opening to the %
+ % left. The fragment has a variable center atom and three %
+ % variable substituents. Bonds can be single or double. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-405,160) {\makebox(300,87)[r]{#1}} % NW subst.
+ \ifx#2S \put(0,70) {\line(-1,1) {100}} \fi % NW single
+ % bond
+ \ifx#2D \put(9,79) {\line(-1,1) {100}} % NW double
+ \put(-9,61) {\line(-1,1) {100}} \fi % bond
+ \put(0,0) {#3} % center
+ % atoms(s)
+ \ifx#4S \put(0,0) {\line(-1,-1) {100}} \fi % SW single
+ \ifx#4D \put(-9,9) {\line(-1,-1) {100}} % SW double
+ \put(9,-9) {\line(-1,-1) {100}} \fi % bond
+ \put(-405,-185) {\makebox(300,87)[r]{#5}} % SW subst.
+ \ifx#6S \put(90,33) {\line(1,0) {140}} \fi % hor.
+ % single
+ \ifx#6D \put(90,20) {\line(1,0) {140}} % double
+ \put(90,46) {\line(1,0) {140}} \fi % bond
+ \put(240,0) {#7} % right sub.
+ \end{picture} } % end cleft macro
+ \newcommand{\chemup}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a trigonal fragment, opening %
+ % upwards. The fragment has a variable center atom and %
+ % three variable substituents. Bonds are single or %
+ % double. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-430,130) {\makebox(300,87)[r]{#1}} % NW subst.
+ \ifx#2S \put(0,70) {\line(-5,3) {121}} \fi % NW single
+ \ifx#2D \put(7,81) {\line(-5,3) {121}} % NW double
+ \put(-7,59) {\line(-5,3) {121}} \fi % bond
+ \put(0,0) {#3} % center
+ % atom(s)
+ \ifx#4S \put(33,-10) {\line(0,-1) {140}} \fi % vertical
+ % single
+ \ifx#4D \put(20,-10) {\line(0,-1) {140}} % vertical
+ \put(46,-10) {\line(0,-1) {140}} \fi % double
+ \put(0,-230) {#5} % bottom
+ % subst.
+ \ifx#6S \put(80,70) {\line(5,3) {121}} \fi % NE single
+ \ifx#6D \put(73,81) {\line(5,3) {121}} % NE double
+ \put(87,59) {\line(5,3) {121}} \fi % bond
+ \put(210,140) {#7} % NE subst.
+ \end{picture} } % end chemup macro
+ \newcommand{\cdown}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a trigonal fragment, opening %
+ % downwards. The fragment has a variable center atom and %
+ % three variable substituents. Bonds are single or double. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,230) {#1} % upper sub.
+ \ifx#2S \put(33,80) {\line(0,1) {140}} \fi % vert.
+ % single
+ \ifx#2D \put(20,80) {\line(0,1) {140}} % double
+ \put(46,80) {\line(0,1) {140}} \fi
+ \put(0,0) {#3} % center
+ % atom(s)
+ \ifx#4S \put(0,0) {\line(-5,-3) {121}} \fi % SW single
+ \ifx#4D \put(-7,11) {\line(-5,-3) {121}} % SW double
+ \put(7,-11) {\line(-5,-3) {121}} \fi % bond
+ \put(-430,-150) {\makebox(300,87)[r]{#5}} % SW subst.
+ \ifx#6S \put(80,0) {\line(5,-3) {121}} \fi % SE bond
+ \ifx#6D \put(87,11) {\line(5,-3) {121}} % SE double
+ \put(73,-11) {\line(5,-3) {121}} \fi % bond
+ \put(210,-140) {#7} % SE subst.
+ \end{picture} } % end cdown macro
+ \newcommand{\csquare}[5] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a fragment that consists of a variable %
+ % center atom with four variable substituents pointing to %
+ % the four corners of a square. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-405,160) {\makebox(300,87)[r]{#1}} % NW subst.
+ \put(0,70) {\line(-1,1) {100}} % NW bond
+ \put(0,0) {#3} % center
+ % atom
+ \put(0,0) {\line(-1,-1) {100}} % SW bond
+ \put(-405,-185) {\makebox(300,87)[r]{#4}} % SW subst.
+ \put(80,70) {\line(1,1) {100}} % NE bond
+ \put(185,170) {#2} % NE subst.
+ \put(80,0) {\line(1,-1) {100}} % SE bond
+ \put(185,-170) {#5} % SE subst.
+ \end{picture} } % end csquare macro
+ \newcommand{\ccirc}[4] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The ccirc macro draws a circle with 2 substituents %
+ % infront of the circle and 2 behind it to give a %
+ % threedimensional impression. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(90,0) {\circle{180}}
+ \put(90,90) {\line(0,1) {70}} % behind and up
+ \put(60,170) {#1}
+ \thicklines
+ \put(30,10) {\line(-5,2) {140}} % in front
+ \put(-415,30) {\makebox(300,87)[r]{#2}} % and left
+ \put(150,10) {\line(5,2) {140}} % in front
+ \put(300,30) {#3} % and right
+ \thinlines
+ \put(90,-90) {\line(0,-1) {90}} % behind and
+ \put(60,-260) {#4} % down
+ \end{picture} } % end ccirc macro
+
+ \newcommand{\threering}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The threering macro typesets the cyclopropane ring %
+ % with optional substituents, an optional double bond, %
+ % and a plus inside the ring for aromaticity. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(300,0) {\line(-3,-5) {150}} % bond 1 to 2
+ \put(150,-244) {\line(-3,5) {150}} % bond 2 to 3
+ \put(0,0) {\line(1,0) {300}} % bond 3 to 1
+ \ifx#7D \put(40,-40){\line(1,0){220}}\fi % double 3 to 1
+ \ifx#1Q % subst. on 1
+ \else\put(300,0) {\line(5,3) {128}}
+ \put(433,50) {#1} \fi
+ \ifx#2Q % subst. on 2
+ \else\ifx#9C \put(150,-244) {\line(0,-1){100}}
+ \put(114,-424) {#2} % on straight bond
+ \else\put(150,-244) {\line(5,-3) {128}}
+ \put(283,-344) {#2} \fi \fi % slanted
+ \ifx#2Q % subst. on 2
+ \else\ifx#5Q \put(150,-244) {\line(0,-1){100}}
+ \put(114,-424) {#2} % on straight bond
+ \else\put(150,-244) {\line(5,-3) {128}}
+ \put(283,-344) {#2} \fi \fi % slanted
+ \ifx#3Q % subst. on 3
+ \else\put(0,0) {\line(-5,3) {128}}
+ \put(-430,34) {\makebox(300,87)[r]{#3}} \fi
+ \ifx#4Q % second subst.
+ \else\put(300,0) {\line(5,-3) {128}} % on 1
+ \put(433,-100) {#4} \fi
+ \ifx#5Q % second subst.
+ \else\put(150,-244) {\line(-5,-3) {128}} % on 2
+ \put(-280,-360){\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q % second subst.
+ \else\put(0,0) {\line(-5,-3) {128}} % on 3
+ \put(-430,-116){\makebox(300,87)[r]{#6}} \fi
+ \ifx#8Q
+ \else\multiput(135,-244)(30,0){2} % outside
+ {\line(0,-1) {100}} % double
+ \put(114,-424) {#8} \fi % on 2
+ \ifx#9C \put(150,-90){\circle{120}} % circle with +
+ \put(110,-120){+} \fi
+ \end{picture} } % end cycloprop. macro
+ \newcommand{\fourring}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The fourring macro typesets the cyclobutane ring with %
+ % optional substituents and double bonds. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(300,300) {\line(0,-1) {300}} % bond 1 to 2
+ \put(300,0) {\line(-1,0) {300}} % 2 to 3
+ \put(0,0) {\line(0,1) {300}} % 3 to 4
+ \put(0,300) {\line(1,0) {300}} % 4 to 1
+ \ifx#7D\put(260,260){\line(0,-1){220}}\fi % double 1 to 2
+ \ifx#8D\put(40,40) {\line(0,1) {220}}\fi % double 3 to 4
+ \ifx#1Q % subst. on 1
+ \else\put(300,300){\line(5,3) {128}}
+ \put(433,350){#1} \fi
+ \ifx#2Q % subst. on 2
+ \else\put(300,0) {\line(5,-3){128}}
+ \put(433,-100){#2} \fi
+ \ifx#3Q % subst. on 3
+ \else\put(0,0) {\line(-5,-3){128}}
+ \put(-430,-116){\makebox(300,87)[r]{#3}} \fi
+ \ifx#4Q % subst. on 4
+ \else\put(0,300) {\line(-5,3) {128}}
+ \put(-430,334){\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q % second subst.
+ \else\put(300,300){\line(5,-3) {128}} % on 1
+ \put(433,200){#5} \fi
+ \ifx#6Q % second subst.
+ \else\put(0,300) {\line(-5,-3){128}} % on 4
+ \put(-430,184){\makebox(300,87)[r]{#6}} \fi
+ \ifx#9Q % outs. double
+ \else\multiput(280,-5)(20,30){2} % and subst.
+ {\line(1,-1){100}} \put(405,-140){#9} \fi % on 2
+ \end{picture} } % end cyclobutane macro
+ \newcommand{\fivering}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the cyclopentane ring with optional %
+ % substituents and double bonds. A minus sign in a circle %
+ % can be put inside the ring to denote aromaticity. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,200) {\line(0,-1) {200}} % bond 1 to 2
+ \put(342,0) {\line(-5,-3) {171}} % bond 2 to 3
+ \put(171,-103) {\line(-5,3) {171}} % bond 3 to 4
+ \put(0,0) {\line(0,1) {200}} % bond 4 to 5
+ \put(0,200) {\line(1,0) {342}} % bond 5 to 1
+ \ifx#1Q % subst. on 1
+ \else\put(342,200) {\line(5,3) {128}}
+ \put(475,250) {#1} \fi
+ \ifx#2Q % subst. on 2
+ \else\put(342,0) {\line(5,-3) {128}}
+ \put(475,-100) {#2} \fi
+ \ifx#3Q % subst. on 3
+ \else\put(171,-103) {\line(0,-1) {100}}
+ \put(150,-283) {#3} \fi
+ \ifx#4Q % subst. on 4
+ \else\put(0,0) {\line(-5,-3){128}}
+ \put(-430,-116) {\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q % subst. on 5
+ \else\put(0,200) {\line(-5,3) {128}}
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6D\put(316,174) {\line(0,-1) {148}} % double 1,2
+ \else\ifx#6S
+ \else\put(342,200) {\line(5,-3) {128}}
+ \put(475,100){#6} \fi % second sub.
+ \fi % on 1
+ \ifx#7D\put(26,26) {\line(0,1) {148}} % double 4,5
+ \else\ifx#7S
+ \else\put(0,200){\line(-5,-3){128}} % second sub.
+ \put(-430,84){\makebox(300,87)[r]{#7}} \fi
+ \fi % on 5
+ \ifx#8Q % outs. double
+ \else\multiput(156,-103)(30,0){2} % and subst.
+ {\line(0,-1) {100}} \put(135,-283){#8} \fi % on 3
+ \ifx#9C\put(171,60) {\circle{210}} % circle and
+ \put(130,35) {$-$} \fi % minus
+ \end{picture} } % end 5-ring macro
+ \newcommand{\sixring}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The sixring macro draws standard carbon sixrings in the %
+ % shape of a regular hexagon. There are optional ring %
+ % double bonds and substituents. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,200) {\line(0,-1) {200}} % bond 1 to 2
+ \put(342,0) {\line(-5,-3) {171}} % bond 2 to 3
+ \put(171,-103) {\line(-5,3) {171}} % bond 3 to 4
+ \put(0,0) {\line(0,1) {200}} % bond 4 to 5
+ \put(0,200) {\line(5,3) {171}} % bond 5 to 6
+ \put(171,303) {\line(5,-3) {171}} % bond 6 to 1
+ \ifx#7D % d. bond 1,2
+ \put(316,174) {\line(0,-1) {148}}
+ \else \ifx#7S % 2. sub. on 1
+ \else\put(342,200) {\line(5,-3) {128}}
+ \put(475,100) {#7} \fi \fi
+ \ifx#8D
+ \put(162,-67) {\line(-5,3) {126}} % double 3 to 4
+ \else\ifx#8S
+ \else\put(156,-203) {\line(0,1){100}} % outside
+ % double and
+ \put(186,-203) {\line(0,1){100}} % subst. on 3
+ \put(135,-283) {#8} \fi \fi
+ \ifx#9D
+ \put(36,191) {\line(5,3) {126}} \fi % double 5 to 6
+ \ifx#9C \put(171,100) {\circle{250}} \fi % circle for
+ % aromaticity
+ \ifx#1Q % subst. on 1
+ \else\put(342,200) {\line(5,3){128}}
+ \put(475,250) {#1} \fi
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3){128}} % subst. on 2
+ \put(475,-100) {#2} \fi
+ \ifx#3Q
+ \else\put(171,-203) {\line(0,1){100}}
+ \put(150,-283) {#3} \fi % subst. on 3
+ \ifx#4Q
+ \else\put(0,0) {\line(-5,-3){128}} % subst. on 4
+ \put(-430,-116){\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3){128}} % subst. on 5
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q
+ \else\put(171,303) {\line(0,1){100}} % subst. on 6
+ \put(150,410) {#6} \fi
+ \ifx#7D \ifx#9C \message{Error: ring double bond
+ simultaneous with circle}
+ \fi \fi
+ \end{picture} } % end sixring macro
+ \newcommand{\sixringa}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro differs from the original sixring macro only %
+ % in the position of the double bonds in the ring. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,200) {\line(0,-1) {200}} % bond 1 to 2
+ \put(342,0) {\line(-5,-3) {171}} % bond 2 to 3
+ \put(171,-103) {\line(-5,3) {171}} % bond 3 to 4
+ \put(0,0) {\line(0,1) {200}} % bond 4 to 5
+ \put(0,200) {\line(5,3) {171}} % bond 5 to 6
+ \put(171,303) {\line(5,-3) {171}} % bond 6 to 1
+ \ifx#7D % double 1,6
+ \put(306,191) {\line(-5,3) {126}}
+ \else \ifx#7S % second subst.
+ \else\put(342,200) {\line(5,-3) {128}}
+ \put(475,100) {#7} \fi \fi % on 1
+ \ifx#8D
+ \put(178,-67) {\line(5,3) {126}} % double 3,2
+ \else\ifx#8S
+ \else\put(156,-203) {\line(0,1){100}} % outs. double
+ \put(186,-203) {\line(0,1){100}} % and subst.
+ \put(135,-283) {#8} \fi \fi % on 3
+ \ifx#9D
+ \put(26,26) {\line(0,1) {148}} \fi % double 4,5
+ \ifx#9C \put(171,100) {\circle{250}} \fi % circle for
+ % aromaticity
+ \ifx#1Q % subst. on 1
+ \else\put(342,200) {\line(5,3){128}}
+ \put(475,250) {#1} \fi
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3){128}} % subst. on 2
+ \put(475,-100) {#2} \fi
+ \ifx#3Q
+ \else\put(171,-203) {\line(0,1){100}}
+ \put(150,-283) {#3} \fi % subst. on 3
+ \ifx#4Q
+ \else\put(0,0) {\line(-5,-3){128}} % subst. on 4
+ \put(-430,-116){\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3){128}} % subst. on 5
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q
+ \else\put(171,303) {\line(0,1){100}} % subst. on 6
+ \put(150,410) {#6} \fi
+ \ifx#7D \ifx#9C \message{Error: ring double bond with
+ circle} \fi \fi
+ \end{picture} } % end sixringa macro
+ \newcommand{\sixringb}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This variation of the sixring can typeset all combina- %
+ % tions of double bonds in the ring through argument 9. %
+ % A para-quinoid structure is also possible. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % macros to typeset the ring double bonds:
+ \newcommand{\di} {\put(316,174){\line(0,-1){148}}} %double 1-2
+ \newcommand{\dii} {\put(178,-67){\line(5,3) {126}}} %double 2-3
+ \newcommand{\diii} {\put(162,-67){\line(-5,3){126}}} %double 3-4
+ \newcommand{\dfour}{\put(26,26) {\line(0,1) {148}}} %double 4-5
+ \newcommand{\dv} {\put(36,191) {\line(5,3) {126}}} %double 5-6
+ \newcommand{\dsix} {\put(306,191){\line(-5,3){126}}} %double 6-1
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,200) {\line(0,-1) {200}} % bond 1 to 2
+ \put(342,0) {\line(-5,-3) {171}} % bond 2 to 3
+ \put(171,-103) {\line(-5,3) {171}} % bond 3 to 4
+ \put(0,0) {\line(0,1) {200}} % bond 4 to 5
+ \put(0,200) {\line(5,3) {171}} % bond 5 to 6
+ \put(171,303) {\line(5,-3) {171}} % bond 6 to 1
+ \ifx#7Q
+ \else\put(158,303) {\line(0,1) {100}} % outs. double
+ \put(184,303) {\line(0,1) {100}} % bond and
+ \put(130,420) {#7} \fi % sub. on 6
+ \ifx#8Q
+ \else\put(156,-203){\line(0,1){100}} % outs. double
+ \put(186,-203){\line(0,1){100}} % bond and
+ \put(135,-283) {#8} \fi % sub.on 3
+ % 17 double bond combinations:
+ \ifcase#9 \put(171,100) {\circle{250}} % circle
+ \or \di \or \dii \or \or diii \or \di \diii % arg 9=1-5
+ \or \or \or dfour \or \dfour \di % arg 9=6-9
+ \or \dfour \dii \or \or \or \or \or \or \dv % arg 9=10-16
+ \or \dv \di \or \dv \dii \or \or \dv \diii % arg 9=17-20
+ \or \dv \diii \di \or \or \or \or \or \or % arg 9=21-27
+ \or \or \or \or \or \dsix \or \or \dsix \dii % 28-34
+ \or \or \dsix \diii \or \or \or % arg 9=35-39
+ \or \dsix \dfour \or \or \dsix \dfour \dii % arg 9=40-42
+ \fi
+ \ifx#1Q % subst. on 1
+ \else\put(342,200) {\line(5,3){128}}
+ \put(475,250) {#1} \fi
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3){128}} % subst. on 2
+ \put(475,-100) {#2} \fi
+ \ifx#3Q
+ \else\put(171,-203) {\line(0,1){100}}
+ \put(150,-283) {#3} \fi % subst. on 3
+ \ifx#4Q
+ \else\put(0,0) {\line(-5,-3){128}} % subst. on 4
+ \put(-430,-116){\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3){128}} % subst. on 5
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q
+ \else\put(171,303) {\line(0,1){100}} % subst. on 6
+ \put(150,410) {#6} \fi
+ \ifx#7D \ifx#9C \message{Error: ring double bond with
+ circle} \fi \fi
+ \end{picture} } % end sixringb macro
+ \newcommand{\chair}[8] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The chair macro typesets the saturated carbon sixring in %
+ % its most favorable conformation. Axial and equatorial %
+ % substituents can be attached in 4 positions. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,0) {\line(3,-4) {170}} % bond 1 to 2
+ \put(170,-226) {\line(3,1) {403}} % 2 to 3
+ \put(573,-91) {\line(6,-1) {210}} % 3 to 4
+ \put(783,-126) {\line(-3,4) {170}} % 4 to 5
+ \put(613,100) {\line(-3,-1) {403}} % 5 to 6
+ \put(210,-35) {\line(-6,1) {210}} % 6 to 1
+ % bonds to subst. :
+ \put(0,0) {\line(0,1) {100}} % axial on 1
+ \put(170,-226) {\line(0,-1) {100}} % axial on 2
+ \put(573,-91) {\line(0,1) {100}} % axial on 3
+ \put(783,-126) {\line(0,-1) {100}} % axial on 4
+ \put(613,100) {\line(0,1) {100}} % axial on 5
+ \put(210,-35) {\line(0,-1) {100}} % axial on 6
+ \put(0,0) {\line(-3,-1) {128}} % eq. on 1
+ \put(170,-226) {\line(-3,1) {128}} % eq. on 2
+ \put(573,-91) {\line(3,-1) {128}} % eq. on 3
+ \put(783,-126) {\line(3,1) {128}} % eq. on 4
+ \put(613,100) {\line(3,-1) {128}} % eq. on 5
+ \put(210,-35) {\line(-3,1) {128}} % eq on 6
+ % variable subst.:
+ \ifx#1Q\else\put(-30,110) {#1} \fi % axial on 1
+ \ifx#2Q\else\put(140,-406) {#2} \fi % axial on 2
+ \ifx#3Q\else\put(543,9) {#3} \fi % axial on 3
+ \ifx#4Q\else\put(753,-306) {#4} \fi % axial on 4
+ \ifx#5Q\else\put(-430,-85) {\makebox(300,87)[r]{#5}}
+ \fi % eq. on 1
+ \ifx#6Q\else\put(-260,-226){\makebox(300,87)[r]{#6}}
+ \fi % eq. on 2
+ \ifx#7Q\else\put(415,-230) {\makebox(300,87)[r]{#7}}
+ \fi % eq. on 3
+ \ifx#8Q\else\put(916,-115) {#8} \fi % eq. on 4
+ \end{picture} } % end chair macro
+ \newcommand{\naphth}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the naphthalene ring system. %
+ % One or both rings can be saturated. An optional sub- %
+ % stituent is possible at each ring position. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \multiput(0,200)(342,0){2} {\line(5,3) {171}} % 7,8; 8a,1
+ \multiput(171,303)(342,0){2} {\line(5,-3){171}} % 8,8a; 1,2
+ \multiput(0,0)(342,0){3} {\line(0,1) {200}} % 6,7;4a,8a
+ % 3,2
+ \multiput(0,0)(342,0){2} {\line(5,-3){171}} % 6,5; 4a,4
+ \multiput(171,-103)(342,0){2}{\line(5,3) {171}} % 5,4a; 4,3
+ \ifx#1Q
+ \else\put(513,303) {\line(0,1) {100}} % sub. on 1
+ \put(492,410) {#1} \fi
+ \ifx#2Q
+ \else\put(684,200) {\line(5,3) {128}} % sub. on 2
+ \put(817,250) {#2} \fi
+ \ifx#3Q
+ \else\put(684,0) {\line(5,-3){128}} % sub. on 3
+ \put(817,-100) {#3} \fi
+ \ifx#4Q
+ \else\put(513,-103) {\line(0,-1){100}} % sub. on 4
+ \put(492,-283) {#4} \fi
+ \ifx#5Q
+ \else\put(171,-103) {\line(0,-1){100}} % sub. on 5
+ \put(150,-283) {#5} \fi
+ \ifx#6Q
+ \else\put(0,0) {\line(-5,-3){128}} % sub. on 6
+ \put(-430,-116) {\makebox(300,87)[r]{#6}} \fi
+ \ifx#7Q
+ \else\put(0,200) {\line(-5,3) {128}} % sub. on 7
+ \put(-430,234) {\makebox(300,87)[r]{#7}} \fi
+ \ifx#8Q
+ \else\put(171,303) {\line(0,1) {100}} %sub. on 8
+ \put(150,410) {#8} \fi
+ \ifx#9S %all single
+ \else\put(316,174) {\line(0,-1) {148}} %double
+ % 4a,8a
+ \put(162,-67) {\line(-5,3) {126}} %double 5,6
+ \put(36,191) {\line(5,3) {126}} %double 7,8
+ \fi
+ \ifx#9D\put(648,191) {\line(-5,3) {126}} %double 2,1
+ \put(520,-67) {\line(5,3) {126}} %double 4,3
+ \fi
+ \end{picture} } % end naphthalene macro
+ \newcommand{\terpene}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the bicyclo(2.2.1)heptane ring %
+ % system with optional methyl groups at the one-carbon %
+ % bridge. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,0) {\line(5,1) {196}} % bond 5 to 4
+ \put(196,39) {\line(5,-2) {186}} % bond 4 to 3
+ \put(382,-35) {\line(2,5) {66}} % bond 3 to 2
+ \put(448,130) {\line(-5,2) {186}} % bond 2 to 1
+ \put(262,204) {\line(-5,-1){196}} % bond 1 to 6
+ \put(66,165) {\line(-2,-5){66}} % bond 6 to 5
+ \put(196,39) {\line(0,1) {330}} % long part of
+ % bridge
+ \put(262,204) {\line(-2,5) {66}} % shorter part
+ % of bridge
+ \ifx#1Q % subst. on 1
+ \else\put(262,204) {\line(4,3) {120}}
+ \put(387,267) {#1} \fi
+ \ifx#2Q % subst. on 2
+ \else\put(448,130) {\line(4,3) {120}}
+ \put(573,193) {#2} \fi
+ \ifx#3Q % subst. on 3
+ \else\put(382,-35) {\line(5,-2) {120}}
+ \put(507,-121) {#3} \fi
+ \ifx#4Q % subst. on 4
+ \else\put(196,39) {\line(2,-5) {56}}
+ \put(231,-180) {#4} \fi
+ \ifx#5Q % subst. on 5
+ \else\put(0,0) {\line(-5,-2){139}}
+ \put(-441,-95) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q % subst. on 6
+ \else\put(66,165) {\line(-4,3) {120}}
+ \put(-362,216) {\makebox(300,87)[r]{#6}} \fi
+ \ifx#7M\put(196,369) {\line(4,3) {120}} % methyl
+ \put(196,369) {\line(-4,3) {120}} % groups
+ \put(321,432) {\small ${\rm CH_3}$}
+ \put(-226,425) % on bridge
+ {\makebox(300,87)[r]{\small ${\rm CH_3}$}} \fi
+ \ifx#8Q\else
+ \ifx#8O\put(443,142) {\line(5,2) {130}} % double-
+ \put(453,118) {\line(5,2) {130}} % bonded
+ \put(583,155) {$O$} % O on 2
+ \else\put(448,130) {\line(5,-2) {120}} % sec. subst.
+ \put(573,44) {#8} \fi \fi % on 2
+ \ifx#9Q\else
+ \ifx#9D\put(368,-1) {\line(2,5) {46}} % double 3 to 2
+ \else\put(382,-35) {\line(4,3) {120}} % second subst.
+ \put(507,28) {#9} \fi \fi % on 3
+ \end{picture} } % end terpene macro
+ \newcommand{\steroid}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the steroid skeleton. Optional double %
+ % bonds and substituents make it possible to print the %
+ % structures of common steroids. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \multiput(0,0)(342,0){3} {\line(0,1) {200}} %3-2,
+ % 5-10,7-8
+ \multiput(513,303)(342,0){3}{\line(0,1) {200}} %9-11,14-13,
+ % 15-16
+ \multiput(0,200)(342,0){3} {\line(5,3) {171}} %2-1,
+ % 10-9,
+ % 8-14
+ \multiput(0,0)(342,0){2} {\line(5,-3){171}} %3-4, 5-6
+ \multiput(171,-103)(342,0){2}{\line(5,3) {171}} %4-5, 6-7
+ \multiput(171,303)(342,0){2}{\line(5,-3){171}} %1-10, 9-8
+ \multiput(513,503)(342,0){2}{\line(5,3) {171}} %11-12,
+ % 13-17
+ \multiput(684,606)(342,0){2}{\line(5,-3){171}} %12-13,
+ % 17-16
+ \put(855,303) {\line(1,0) {342}} %14-15
+ \put(855,503) {\line(0,1) {128}} % methyl 18
+ \put(795,638) {\small ${\rm CH_3}$}
+ \ifx#1D\put(36,191) {\line(5,3) {126}}% double
+ \else\ifx#1Q % 1 to 2
+ \else\put(520,514) {\line(-5,3) {128}}
+ \put(506,492) {\line(-5,3) {128}}
+ \put(83,547) {\makebox(300,87)[r]{#1}} \fi
+ \fi % outside double & subst. 11
+ \ifx#2D\put(162,-67) {\line(-5,3) {126}} % double
+ \else\ifx#2Q % 4 to 3
+ \else\put(-7,11) {\line(-5,-3) {128}}
+ \put(7,-11) {\line(-5,-3) {128}}
+ \put(-430,-116) {\makebox(300,87)[r]{#2}} \fi
+ \fi % outside double & subst. 3
+ \ifx#3Q
+ \else\put(0,0) {\line(-5,-3){128}} % subst.
+ \put(-430,-116) {\makebox(300,87)[r]{#3}} \fi % on 3
+ \ifx#4D\put(178,-67) {\line(5,3) {126}} \fi % double
+ % 4 to 5
+ \ifx#5D\put(378,9) {\line(5,-3) {126}} % double
+ % 6 to 5
+ \else\ifx#5Q
+ \else\multiput(1011,606)(30,0){2} {\line(0,1) {100}}
+ \put(985,713) {#5} \fi
+ \fi % outside double & subst. 17
+ \ifx#6D\put(316,174) {\line(0,-1) {148}} \fi % double
+ % 5 to 10
+ \ifx#6M\put(342,200) {\line(0,1) {128}} % methyl
+ % 19
+ \put(282,335) {\small ${\rm CH_3}$} \fi
+ \ifx#7Q
+ \else\put(1026,606) {\line(0,1) {100}} % lower
+ % subst.
+ \put(995,713) {#7} \fi % part
+ % on 17
+ \ifx#8Q
+ \else\put(1026,791) {\line(0,1) {100}} % upper
+ % subst.
+ \put(995,900) {#8} \fi % part
+ % on 17
+ \ifx#9Q
+ \else\put(1026,606) {\line(1,0) {128}} % the other
+ \put(1160,575) {#9} \fi % subst.
+ % on 17
+ \end{picture} } % end steroid macro
+
+ \newcommand{\hetthree}[8] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The hetthree macro draws a three-membered ring with one %
+ % hetero atom. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(170,-170) {#8} % hetero atom
+ \put(0,0) {C} % C-2
+ \put(360,0) {C} % C-3
+ \put(80,30) {\line(1,0) {270}} % bond 2-3
+ \put(70,-10) {\line(1,-1) {100}} % bond 2-1
+ \put(350,-10) {\line(-1,-1){100}} % bond 3-1
+ \ifx#1Q % substituent
+ \else\put(210,-180) {\line(0,-1){80}} % on het. atom
+ \put(180,-340) {#1} \fi
+ \ifx#6S\put(-10,30) {\line(-1,0){140}} % subst. on C-2
+ \put(-460,-10) {\makebox(300,87)[r]{#2}} % with hor.
+ % bond
+ \else\ifx#6H\put(-90,30) {\line(-1,0) {140}}% bond and H
+ \put(-70,0) {H} % on C-2
+ \put(-540,-10) {\makebox(300,87)[r]{#2}}
+ \else \put(-310,-10) {\makebox(300,87)[r]{#2}} \fi \fi
+ % no bond on 2
+ \ifx#7S\put(440,30) {\line(1,0) {140}} % subst. on C-3
+ \put(590,0) {#3} % with hor. bond
+ \else\ifx#7H\put(430,0) {H} % bond with H
+ \put(510,30) {\line(1,0) {140}}
+ \put(660,0) {#3}
+ \else \put(445,0) {#3} \fi \fi % no bond on 3
+ \ifx#4Q
+ \else\put(40,80) {\line(0,1) {140}} % second subst.
+ \put(-225,220) {\makebox(300,87)[r]{#4}} \fi % on C-2
+ \ifx#5Q
+ \else\put(400,80) {\line(0,1) {140}} % second subst.
+ \put(360,230) {#5} \fi % on C-3
+ \end{picture} } % end hetthree macro
+ \newcommand{\hetifive}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The hetifive macro typesets a five-membered ring with one %
+ % hetero atom. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,0) {\line(-5,-3) {140}} % bond 2,1
+ \put(342,0) {\line(0,1) {200}} % bond 2,3
+ \put(342,200) {\line(-1,0) {342}} % bond 3,4
+ \put(0,200) {\line(0,-1) {200}} % bond 4,5
+ \put(0,0) {\line(5,-3) {140}} % bond 5,1
+ \ifx#1Q
+ \else\put(171,-137) {\line(0,-1) {83}} % subst.on
+ \put(135,-283) {#1} \fi % het.atom
+ \ifx#2Q
+ \else\ifx#2O\put(349,11) {\line(5,-3) {128}} % outside
+ \put(335,-11){\line(5,-3) {128}} % double O
+ \put(475,-120) {O} % on C-2
+ \else\put(342,0) {\line(5,-3) {128}} % single
+ \put(475,-100) {#2} \fi % subst.
+ \fi % on C-2
+ \ifx#3Q
+ \else\put(342,200) {\line(5,3) {128}} % subst. on
+ \put(475,250) {#3} \fi % C-3
+ \ifx#4Q
+ \else\put(0,200) {\line(-5,3) {128}} % subst. on
+ \put(-430,234) {\makebox(300,87)[r]{#4}}\fi % C-4
+ \ifx#5Q
+ \else\ifx#5O\put(-7,11) {\line(-5,-3) {128}} % outside
+ \put(7,-11) {\line(-5,-3) {128}} % double O
+ \put(-200,-130) {O} % on C-5
+ \else\put(0,0) {\line(-5,-3) {128}} % single
+ \put(-430,-116){\makebox(300,87)[r]{#5}} \fi % sub.
+ \fi % on C-5
+ \ifx#6D\put(316,26) {\line(0,1) {148}} \fi % double 2,3
+ \ifx#7D\put(316,174) {\line(-1,0) {290}} \fi % double 3,4
+ \ifx#8D\put(26,174) {\line(0,-1) {148}} \fi % double 4,5
+ \put(135,-130) {#9} % hetero atom
+ \end{picture} } % end one-hetero fivering macro
+ \newcommand{\heticifive}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The heticifive macro typesets a five-membered ring with %
+ % two hetero atoms separated by a carbon atom. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,0) {\line(-5,-3) {140}} % bond 2,1
+ \put(342,0) {\line(0,1) {160}} % bond 2,3
+ \put(0,200) {\line(1,0) {300}} % bond 4,3
+ \put(0,200) {\line(0,-1) {200}} % bond 4,5
+ \put(0,0) {\line(5,-3) {140}} % bond 5,1
+ \ifx#1Q
+ \else\put(171,-137) {\line(0,-1) {83}} % subst. on
+ \put(135,-283) {#1} \fi % het-1
+ \ifx#2Q
+ \else\ifx#2O\put(349,11) {\line(5,-3) {128}} % outside
+ \put(335,-11) {\line(5,-3) {128}} % double O
+ \put(475,-120) {O} % on C-2
+ \else\put(342,0) {\line(5,-3) {128}} % single sub.
+ \put(475,-100) {#2} \fi % on C-2
+ \fi
+ \ifx#3Q
+ \else\put(370,217) {\line(5,3) {100}} % subst. on
+ \put(475,250) {#3} \fi % on het-3
+ \ifx#4Q
+ \else\ifx#4O\put(-7,189) {\line(-5,3) {128}} % outside
+ \put(7,211) {\line(-5,3) {128}} % double O
+ \put(-200,250) {O} % on C-4
+ \else\put(0,200) {\line(-5,3) {128}} % single sub.
+ \put(-430,234) {\makebox(300,87)[r]{#4}} \fi
+ \fi % on C-4
+ \ifx#5Q
+ \else\put(0,0) {\line(-5,-3) {128}} % 1. single
+ \put(-430,-116){\makebox(300,87)[r]{#5}}\fi % subst.
+ % on C-5
+ \ifx#6D\put(316,26) {\line(0,1) {130}} \fi % double 2,3
+ \ifx#7Q
+ \else\ifx#7D\put(26,174) {\line(0,-1) {148}} % double 4,5
+ \else\put(0,0) {\line(-5,3) {128}} % 2. subst.
+ \put(-430,34) {\makebox(300,87)[r]{#7}} \fi
+ \fi % on C-5
+ \put(135,-130) {#8} % het.atom 1
+ \put(310,170) {#9} % het.atom 3
+ \end{picture} } % end heticifive macro
+ \newcommand{\pyrazole}[8] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the pyrazole ring with optional %
+ % substituents and double bonds inside and outside the %
+ % ring. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(200,-84) {\line(5,3) {110}} % bond 1,2
+ \put(342,200) {\line(0,-1) {140}} % bond 3,2
+ \put(342,200) {\line(-1,0) {342}} % bond 3,4
+ \put(0,200) {\line(0,-1) {200}} % bond 4,5
+ \put(0,0) {\line(5,-3) {140}} % bond 5,1
+ \put(135,-130) {N} % ring N-1
+ \put(310,-30) {N} % ring N-2
+ \ifx#1Q
+ \else\put(171,-137) {\line(0,-1) {83}} % subst. on
+ \put(150,-283) {#1} \fi % on N-1
+ \ifx#2Q
+ \else\put(370,-17) {\line(5,-3) {100}} % subst. on
+ \put(475,-100) {#2} \fi % N-2
+ \ifx#3Q
+ \else\ifx#3O\put(335,211) {\line(5,3) {128}} % outside
+ \put(349,189) {\line(5,3) {128}} % double O
+ \put(475,250) {O} % on C-3
+ \else\put(342,200) {\line(5,3) {128}} % single sub.
+ \put(475,250) {#3} \fi % on C-3
+ \fi
+ \ifx#4Q
+ \else\put(0,200) {\line(-5,3) {128}} % single sub.
+ \put(-430,234) {\makebox(300,87)[r]{#4}}\fi % on C-4
+ \ifx#5Q
+ \else\ifx#5O\put(-7,11) {\line(-5,-3){128}} % outside
+ \put(7,-11) {\line(-5,-3){128}} % double O
+ \put(-200,-130){O} % on C-5
+ \else\put(0,0) {\line(-5,-3){128}} % single sub.
+ \put(-430,-116) {\makebox(300,87)[r]{#5}} \fi
+ \fi % on C-5
+ \ifx#6D\put(316,174) {\line(0,-1) {114}} \fi % double 3,2
+ \ifx#7D\put(316,174) {\line(-1,0) {290}} \fi % double 3,4
+ \ifx#8D\put(26,174) {\line(0,-1) {148}} \fi % double 4,5
+ \end{picture} } % end pyrazole macro
+ \newcommand{\hetisix}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The hetisix macro typesets a six-membered ring with %
+ % one hetero atom. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,0) {\line(-5,-3) {140}} % bond 2 to 1
+ \put(0,0) {\line(5,-3) {140}} % bond 6 to 1
+ \put(342,0) {\line(0,1) {200}} % bond 2 to 3
+ \put(342,200) {\line(-5,3) {171}} % bond 3 to 4
+ \put(171,303) {\line(-5,-3) {171}} % bond 4 to 5
+ \put(0,200) {\line(0,-1) {200}} % bond 5 to 6
+ \ifx#7D
+ \put(316,26) {\line(0,1) {148}} % double 2 to 3
+ \else\ifx#7Q
+ \else\put(349,11) {\line(5,-3){128}} % outside
+ \put(335,-11) {\line(5,-3){128}} % double sub.
+ \put(475,-120){#7} \fi % on C-2
+ \fi
+ \ifx#8D
+ \put(36,191) {\line(5,3) {126}} \fi % double 5 to 4
+ \ifx#1D
+ \put(36,9) {\line(5,-3) {110}} % double 6 to 1
+ \else\ifx#1Q
+ \else\put(171,-220) {\line(0,1) {83}}
+ \put(150,-283) {#1} \fi % subst. on het.
+ \fi
+ \put(135,-130) {#9} % the het.atom
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3) {128}} % subst. on 2
+ \put(475,-100) {#2}
+ \fi
+ \ifx#3Q
+ \else\put(342,200) {\line(5,3) {128}} % subst. on 3
+ \put(475,250) {#3}
+ \fi
+ \ifx#4Q
+ \else\put(171,303) {\line(0,1) {100}} % subst. on 4
+ \put(150,410) {#4}
+ \fi
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3) {128}} % subst. on 5
+ \put(-430,234) {\makebox(300,87)[r]{#5}}
+ \fi
+ \ifx#6Q
+ \else\put(0,0) {\line(-5,-3) {128}} % subst. on 6
+ \put(-430,-116){\makebox(300,87)[r]{#6}}
+ \fi % end sixring macro with
+ \end{picture} } % one hetero atom
+ \newcommand{\pyrimidine}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the pyrimidine ring with optional %
+ % substituents and double bonds inside and outside the %
+ % ring. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,0) {\line(-5,-3) {140}} % from 2 to 1
+ \put(0,0) {\line(5,-3) {140}} % from 6 to 1
+ \put(342,0) {\line(0,1) {160}} % from 2 to 3
+ \put(171,303) {\line(5,-3) {140}} % from 4 to 3
+ \put(171,303) {\line(-5,-3) {171}} % from 4 to 5
+ \put(0,200) {\line(0,-1) {200}} % from 5 to 6
+ \put(135,-130) {N}
+ \put(310,170) {N}
+ \ifx#1Q
+ \else\put(171,-137) {\line(0,-1) {83}} % sub. on N-1
+ \put(150,-283) {#1} \fi
+ \ifx#2Q
+ \else\ifx#2O\put(349,11) {\line(5,-3) {128}} % outside
+ \put(335,-11) {\line(5,-3) {128}} % double O
+ \put(475,-120){O} % on C-2
+ \else\put(342,0) {\line(5,-3) {128}} % single
+ \put(475,-100) {#2} \fi % subst.
+ \fi
+ \ifx#3Q
+ \else\put(370,217) {\line(5,3) {100}} % subst.
+ \put(475,250) {#3} \fi % on N-3
+ \ifx#4Q
+ \else\ifx#4O\put(158,303) {\line(0,1) {100}} % outside
+ \put(184,303) {\line(0,1) {100}} % double O
+ \put(130,410) {O} % on C-4
+ \else\put(171,303) {\line(0,1) {100}} % single
+ \put(150,410) {#4} \fi % subst.
+ \fi % on C-4
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3) {128}} % 1. subst.
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ % on C-5
+ \ifx#6Q
+ \else\ifx#6O\put(-7,11) {\line(-5,-3){128}} % outside
+ \put(7,-11) {\line(-5,-3){128}} % double O
+ \put(-210,-130){O} % on C-6
+ \else\put(0,0) {\line(-5,-3){128}} % single s.
+ \put(-430,-116) {\makebox(300,87)[r]{#6}} \fi
+ \fi % on C-6
+ \ifx#7D\put(306,9) {\line(-5,-3) {120}} \fi % 2,1 doub.
+ \ifx#8D\put(180,267) {\line(5,-3) {120}} % 4,3 doub.
+ \else\ifx#8Q
+ \else\put(0,200){\line(-5,-3) {128}} % 2. subst.
+ \put(-430,84) {\makebox(300,87)[r]{#8}} \fi
+ \fi % on C-5
+ \ifx#9D\put(26,174) {\line(0,-1) {148}} \fi % 5,6 doub.
+ \end{picture} } % end pyrimidine macro
+ \newcommand{\pyranose}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets monosaccharides with a pyran ring %
+ % system. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(588,0) {\line(-1,-1) {159}} % 1,2 bond
+ \put(429,-159) {\line(-1,0) {270}} % 2,3 bond
+ \put(159,-159) {\line(-1,1) {159}} % 3,4 bond
+ \put(0,0) {\line(1,1) {159}} % 4,5 bond
+ \put(159,159) {\line(1,0) {225}} % C-5 to O
+ \put(394,130) {\small O} % ring O
+ \put(460,130) {\line(1,-1) {128}} % O to C-1
+ \ifx#1Q
+ \else\put(588,0) {\line(1,1) {100}} % beta sub.
+ \put(700,75) {#1} \fi % on C-1
+ \ifx#2Q
+ \else\put(588,0) {\line(1,-1) {100}} % alpha sub.
+ \put(700,-120){#2} \fi % on C-1
+ \ifx#3Q
+ \else\put(429,-159){\line(0,1) {85}} % up subst.
+ \put(225,-75) {\makebox(250,87)[r]{#3}} \fi % on C-2
+ \ifx#4Q
+ \else\put(429,-159){\line(0,-1) {85}} % down sub.
+ \put(400,-315){#4} \fi % on C-2
+ \ifx#5Q
+ \else\put(159,-159){\line(0,1) {85}} % up subst.
+ \put(130,-73) {#5} \fi % on C-3
+ \ifx#6Q
+ \else\put(159,-159){\line(0,-1) {85}} % down sub.
+ \put(130,-315){#6} \fi % on C-3
+ \ifx#7Q
+ \else\put(0,0) {\line(0,1) {85}} % up subst.
+ \put(-270,84) {\makebox(300,87)[r]{#7}} \fi % on C-4
+ \ifx#8Q
+ \else\put(0,0) {\line(0,-1) {85}} % down sub.
+ \put(-270,-160){\makebox(300,87)[r]{#8}}\fi % on C-4
+ \put(159,159) {\line(0,1) {85}} % C-6
+ \put(130,250) {\small ${\rm CH_{2}}$} % sub. on
+ \put(-370,245) {\makebox(500,87)[r]{#9}} % C-6
+ \end{picture} } % end pyranose macro
+ \newcommand{\furanose}[8] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets monosaccharides with a furan ring %
+ % system. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(448,0) {\line(-1,-2) {89}} % bond 1,2
+ \put(359,-179) {\line(-1,0) {270}} % bond 2,3
+ \put(89,-179) {\line(-1,2) {89}} % bond 3,4
+ \put(0,0) {\line(5,3) {188}} % C-4 to O
+ \put(192,110) {\small O} % ring O
+ \put(260,113) {\line(5,-3) {188}} % O to C-1
+ \ifx#1Q
+ \else\ifx#1N\put(448,0) {\line(0,1) {380}} % long bond
+ % for nucl.
+ \else\put(448,0) {\line(5,3) {105}} % beta sub.
+ \put(558,50) {#1} \fi % on C-1
+ \fi
+ \ifx#2Q
+ \else\put(448,0) {\line(5,-3) {105}} % alpha sub.
+ \put(558,-90) {#2} \fi % on C-1
+ \ifx#3Q
+ \else\put(359,-179) {\line(0,1) {85}} % up subst.
+ \put(155,-95) {\makebox(250,87)[r]{#3}}\fi %on C-2
+ \ifx#4Q
+ \else\put(359,-179) {\line(0,-1) {85}} % down sub.
+ \put(330,-335) {#4} \fi % on C-2
+ \ifx#5Q
+ \else\put(89,-179) {\line(0,1) {85}} % up sub.
+ \put(60,-93) {#5} \fi % on C-3
+ \ifx#6Q
+ \else\put(89,-179) {\line(0,-1) {85}} % down sub.
+ \put(60,-335) {#6} \fi % on C-3
+ \ifx#7Q
+ \else\put(0,0) {\line(0,-1) {85}} % down sub.
+ \put(-270,-160) {\makebox(300,87)[r]{#7}}\fi %on C-4
+ \put(0,0) {\line(0,1) {85}} % C-5
+ \put(-30,90) {\small ${\rm CH_{2}}$}
+ \put(-530,80) {\makebox(500,87)[r]{#8}}
+ \end{picture} } % end furanose macro
+ \newcommand{\purine}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the purine ring system with optional %
+ % double bonds and substituents. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,0) {\line(0,1) {160}} % bond 2 to 1
+ \put(0,0) {\line(5,-3) {140}} % from 2 to 3
+ \put(342,0) {\line(-5,-3) {140}} % from 4 to 3
+ \put(342,0) {\line(0,1) {200}} % from 4 to 5
+ \put(316,174) {\line(0,-1) {148}} % double 5 to 4
+ \put(342,200) {\line(-5,3) {171}} % from 5 to 6
+ \put(171,303) {\line(-5,-3) {140}} % from 6 to 1
+ \put(342,200) {\line(1,0) {300}} % from 5 to 7
+ \put(684,0) {\line(0,1) {160}} % from 8 to 7
+ \put(684,0) {\line(-5,-3) {140}} % from 8 to 9
+ \put(342,0) {\line(5,-3) {140}} % from 4 to 9
+ \put(-32,170) {\small N} % N at 1
+ \put(135,-130) {\small N} % N at 3
+ \put(652,170) {\small N} % N at 7
+ \put(477,-130) {\small N} % N at 9
+ \ifx#1Q
+ \else\put(-128,277) {\line(5,-3) {100}} % subst. on 1
+ \put(-430,234) {\makebox(300,87)[r]{#1}}
+ \fi
+ \ifx#2D\put(36,9) {\line(5,-3) {100}} % double 2 to 3
+ \else\put(-7,11) {\line(-5,-3) {128}}
+ \put(7,-11) {\line(-5,-3) {128}}
+ \put(-430,-116){\makebox(300,87)[r]{#2}}
+ \fi %outside double
+ % bond on 2
+ \ifx#3Q % subst. on 3
+ \else\put(171,-130) {\line(0,-1) {73}}
+ \put(135,-283) {#3}
+ \fi
+ \ifx#4D\put(162,267) {\line(-5,-3){110}} \fi % d. bond 6,1
+ \ifx#5Q
+ \else\multiput(158,303)(26,0){2} {\line(0,1) {100}}
+ \put(135,410) {#5} % outside d.-bond
+ \fi % and subst. on 6
+ \ifx#6Q % single-bonded
+ \else\put(171,303) {\line(0,1) {100}} % subst. on 6
+ \put(150,410) {#6}
+ \fi
+ \ifx#7Q % subst. on 7
+ \else\put(812,277) {\line(-5,-3){100}}
+ \put(817,250) {#7}
+ \fi
+ \ifx#8D\put(658,26) {\line(0,1) {125}} % d.-bond 8 to 7
+ \else\put(691,11) {\line(5,-3) {128}}
+ \put(677,-11) {\line(5,-3) {128}}
+ \put(817,-110) {#8} % outside d.-bond
+ \fi % and subst. on 8
+ \ifx#9Q % subst. on 9
+ \else\put(513,-130) {\line(0,-1) {73}}
+ \put(492,-283) {#9}
+ \fi
+ \end{picture} } % end purine macro
+
+
+
+
+
+
+
+ \newcommand{\fuseiv}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a four-carbon fragment designed to %
+ % be connected to another ring at two places. As the %
+ % result, a sixring is fused linearly to another ring %
+ % system. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,200) {\line(5,3) {171}} % NE bond
+ \put(171,303) {\line(5,-3) {171}} % SE bond
+ \put(342,200) {\line(0,-1) {200}} % S bond
+ \put(342,0) {\line(-5,-3){171}} % SW bond
+ \put(171,-103) {\line(-5,3) {171}} % NW bond
+ \ifx#1Q
+ \else\put(171,303) {\line(0,1) {100}} % subst.
+ \put(150,410) {#1} \fi % on top
+ \ifx#2Q
+ \else\put(342,200) {\line(5,3) {128}} % subst.
+ \put(475,250) {#2} \fi % top rt.
+ \ifx#3Q
+ \else\put(342,0) {\line(5,-3) {128}} % subst.
+ \put(475,-100) {#3} \fi % low rt.
+ \ifx#4Q
+ \else\put(171,-103) {\line(0,-1) {100}} % bottom
+ \put(150,-283) {#4} \fi % subst.
+ \ifx#5D \put(36,191) {\line(5,3) {126}} \fi % NE double
+ \ifx#6D \put(180,267) {\line(5,-3) {126}} % SE double
+ \else\ifx#6Q
+ \else\put(342,200) {\line(5,-3) {128}} % 2. subst.
+ \put(475,100) {#6} \fi % top rt.
+ \fi
+ \ifx#7D \put(316,174) {\line(0,-1) {148}} \fi % S double
+ \ifx#8D \put(306,9) {\line(-5,-3) {126}} % SW double
+ \else\ifx#8Q
+ \else\put(342,0) {\line(5,3) {128}} % 2. subst.
+ \put(475,50) {#8} \fi % lower rt.
+ \fi
+ \ifx#9D \put(162,-67) {\line(-5,3) {126}}\fi % NW double
+ \end{picture} } % end fuseiv macro
+ \newcommand{\fuseup}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a four-carbon fragment designed to %
+ % connect to another ring at two places. As the result, %
+ % a sixring is fused angularly to the original ring. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-171,303) {\line(0,1) {200}} % N bond
+ \put(-171,503) {\line(5,3) {171}} % NE bond
+ \put(0,606) {\line(5,-3) {171}} % SE bond
+ \put(171,503) {\line(0,-1) {200}} % S bond
+ \put(171,303) {\line(-5,-3) {171}} % SW bond
+ \ifx#1Q
+ \else\put(-171,503) {\line(-5,3) {128}} % upper left
+ \put(-600,537) {\makebox(300,87)[r]{#1}}\fi % subst.
+ \ifx#2Q
+ \else\put(0,606) {\line(0,1) {100}} % top sub.
+ \put(-19,713) {#2} \fi
+ \ifx#3Q
+ \else\put(171,503) {\line(5,3) {128}} % top rt.
+ \put(304,553) {#3} \fi % subst.
+ \ifx#4Q
+ \else\put(171,303) {\line(5,-3) {128}} % lower rt.
+ \put(304,203) {#4} \fi % subst.
+ \ifx#5D\put(-145,329) {\line(0,1) {148}} \fi % N double
+ \ifx#6D\put(-135,494) {\line(5,3) {126}} \fi % NE double
+ \ifx#7D\put(9,570) {\line(5,-3) {126}} \fi % SE double
+ \ifx#8D\put(145,477) {\line(0,-1) {148}} \fi % S double
+ \ifx#9D\put(135,312) {\line(-5,-3) {126}} \fi % SW double
+ \end{picture} } % end fuseup macro
+ \newcommand{\fuseiii}[6] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a three-carbon fragment designed to %
+ % be connected to another ring at two places. As the %
+ % result, a fivering is fused linearly to the original %
+ % ring system. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,200) {\line(1,0) {342}} % E bond
+ \put(342,200) {\line(0,-1) {200}} % S bond
+ \put(342,0) {\line(-5,-3) {171}} % SW bond
+ \put(171,-103) {\line(-5,3) {171}} % NW bond
+ \ifx#1Q
+ \else\put(342,200) {\line(5,3) {128}} % upper rt.
+ \put(475,250) {#1} \fi % subst.
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3) {128}} % lower rt.
+ \put(475,-100) {#2} \fi % subst.
+ \ifx#3Q
+ \else\put(171,-103) {\line(0,-1) {100}} % bottom
+ \put(150,-283) {#3} \fi % subst.
+ \ifx#4Q
+ \else\put(342,200) {\line(5,-3) {128}} % 2. upper
+ \put(475,100) {#4} \fi % rt. sub.
+ \ifx#5Q
+ \else\put(342,0) {\line(5,3) {128}} % 2. lower
+ \put(475,50) {#5} \fi % rt. sub.
+ \ifx#6D \put(316,174) {\line(0,-1) {148}} \fi % S double
+ \end{picture} } % end fuseiii macro
+ \newcommand{\cto}[3] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets an arrow for a chemical equation and %
+ % puts text above and below it. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \len=50 \multiply \len by #3 % calc. arrow
+ \advance \len by 120 % length
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(60,50) {\vector(1,0) {\len}} % draw arrow
+ \put(90,70) {\makebox(\len,70)[l]
+ {\scriptsize ${\rm #1}$}} % text on top
+ \put(90,-40) {\makebox(\len,70)[l]
+ {\scriptsize ${\rm #2}$}} % text below
+ \end{picture} }
+ \newcommand{\sbond}[1] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a horizontal single bond of user- %
+ % specified length. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \xbox=#1 \advance \xbox by 2
+ \hspace{1.5pt} \parbox{\xbox pt} {\rule{#1 pt}{0.4pt} }
+ \xbox=50 } % end sbond macro
+ \newcommand{\dbond}[2] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a horizontal double bond of user- %
+ % specified length. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \xbox=#1 \advance \xbox by 2
+ \hspace{1.5pt}\parbox{\xbox pt}
+ {\rule{#1 pt}{0.4pt}\vspace{-#2 pt}\\
+ \rule{#1 pt}{0.4pt} }
+ \xbox=50 } % end dbond macro
+ \newcommand{\tbond}[2] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a horizontal triple bond of user- %
+ % specified length. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \xbox=#1 \advance \xbox by 2
+ \hspace{1.5pt} \parbox{\xbox pt}
+ {\rule{#1 pt}{0.4pt}\vspace{-#2 pt}\\
+ \rule{#1 pt}{0.4pt}\vspace{-#2 pt}\\
+ \rule{#1 pt}{0.4pt} }
+ \xbox=50 } % end tbond macro
diff --git a/macros/latex209/contrib/chemtex/chemtex.tex b/macros/latex209/contrib/chemtex/chemtex.tex
new file mode 100644
index 0000000000..c1d0f65751
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/chemtex.tex
@@ -0,0 +1,4 @@
+\newlinechar=`\^^J
+\message{THE METHOD FOR LOADING THE CHEMTEX MACROS IS CHANGING; }
+\message{SEE THE FILE CHEMTEX README FOR THE NEW INSTRUCTIONS.}
+\input chemtex.sty
diff --git a/macros/latex209/contrib/chemtex/macros.tex b/macros/latex209/contrib/chemtex/macros.tex
new file mode 100644
index 0000000000..44454e7d91
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/macros.tex
@@ -0,0 +1,1318 @@
+ \newcommand{\initial} {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Macro initial declares variables and initializes the %
+ % variables and the unitlength. Macro reinit resets the %
+ % values of the variables and the unitlength to the %
+ % original values. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \setlength{\unitlength}{.1pt}
+ \newcount\xi \newcount\yi
+ \xi=0 \yi=300
+ % coordinates of lower left corner
+ \newcount\pht \pht=900 % picture height
+ \newcount\pw \pw=400 % picture width
+ \newcount\xbox \xbox=50 % width of minipage
+ \newcount\len } % general purpose variable
+ % end macro initial
+ \newcommand{\reinit} {\xi=0 \yi=300 \xbox=50
+ \setlength{\unitlength}{.1pt}
+ \pht=900 \pw=400 } % end macro reinit
+ \newcommand{\cbranch}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The cbranch macro draws vertical branches as single and %
+ % double bonds, up and down. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,200) {#1} % upper subst.
+ \ifx#2S \put(40,85) {\line(0,1) {100}} % single up
+ \else\ifx#2D\multiput(27,85)(26,0){2} % double up
+ {\line(0,1) {100}} \fi \fi
+ \ifx#4Q \put(-305,0) {\makebox(300,87)[r]{#3}}
+ % left substituent without bond
+ \else \put(-455,0) {\makebox(300,87)[r]{#3}} \fi
+ % left substituent with bond
+ \ifx#4S \put(-150,33) {\line(1,0) {140}} % single left
+ \else\ifx#4D\multiput(-150,20)(0,26){2} % double left
+ {\line(1,0) {140}} \fi \fi
+ \put(0,0) {#5} % center
+ % atom(s)
+ \ifx#6S \put(90,33) {\line(1,0) {140}} % single right
+ \else\ifx#6D\multiput(90,20)(0,26){2} % double right
+ {\line(1,0) {140}} \fi \fi
+ \put(240,0) {#7} % right subst.
+ \ifx#8S \put(40,-15) {\line(0,-1) {100}} % single down
+ \else\ifx#8D\multiput(27,-15)(26,0){2} % double down
+ {\line(0,-1) {100}} \fi \fi
+ \put(0,-210) {#9} % lower subst.
+ \end{picture} } % end cbranch macro
+ \newcommand{\tbranch}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Macro tbranch draws structures with vertical branches, %
+ % single or double bonds, going up or down. %
+ % This macro uses the LaTeX tabbing mechanism. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{minipage}{\xbox pt}
+ \begin{tabbing}
+ $#3$\= $#4$\+ \kill
+ $#1$ \\ [-#7pt] % print top subst.
+ \ifx#2S % vertical bond going up
+ \hspace{4pt}\rule{0.4pt}{8pt} \\ [-#7pt]\fi
+ \ifx#2D
+ \hspace{2pt}\rule{0.4pt}{8pt}
+ \hspace{-2pt}\rule{0.4pt}{8pt} \\ [-#7pt]\fi
+ \- \kill
+ $#3$\> $#4$\+ \\ [-#7pt] % substituents on print line
+ \ifx#5S % vertical bond going down
+ \hspace{4pt}\rule{0.4pt}{8pt} \\ [-#7pt]\fi
+ \ifx#5D
+ \hspace{2pt}\rule{0.4pt}{8pt}
+ \hspace{-2pt}\rule{0.4pt}{8pt} \\ [-#7pt]\fi
+ $#6$
+ \end{tabbing}
+ \end{minipage} } % end tbranch macro
+ \newcommand{\ethene}[4] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a horizontal ethene fragment with %
+ % four variable substituents. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-405,170) {\makebox(300,87)[r]{#1}} % upper left
+ % subst.
+ \put(-405,-185) {\makebox(300,87)[r]{#3}} % lower left
+ % subst.
+ \put(0,70) {\line(-1,1) {100}} % NW bond
+ \put(0,0) {\line(-1,-1) {100}} % SW bond
+ \put(0,0) {C} % left C
+ \multiput(90,20)(0,25){2} {\line(1,0){140}} % double bond
+ \put(240,0) {C} % right C
+ \put(315,70) {\line(1,1) {100}} % NE bond
+ \put(315,0) {\line(1,-1) {100}} % SE bond
+ \put(425,170) {#2} % upper right
+ % subst.
+ \put(425,-170) {#4} % lower right
+ % subst.
+ \end{picture} } % end ethene macro
+ \newcommand{\upethene}[4] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a vertical ethene fragment with four %
+ % variable substituents. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-430,360) {\makebox(300,87)[r]{#1}} % NW subst.
+ \put(-430,-150) {\makebox(300,87)[r]{#2}} % SW subst.
+ \put(210,370) {#3} % NE subst.
+ \put(210,-140) {#4} % SE subst.
+ \put(0,300) {\line(-5,3) {121}} % NW bond
+ \put(0,230) {C} % upper C
+ \put(20,80) {\line(0,1) {140}} % vertical
+ \put(46,80) {\line(0,1) {140}} % d. bond
+ \put(0,0) {C} % lower C
+ \put(0,0) {\line(-5,-3) {121}} % SW bond
+ \put(80,300) {\line(5,3) {121}} % NE bond
+ \put(80,0) {\line(5,-3) {121}} % SE bond
+ \end{picture} } % end upethene macro
+ \newcommand{\cright}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a trigonal fragment, opening to the %
+ % right. The fragment has a variable center atom and three %
+ % variable substituents. Bonds can be single or double. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \ifx#2Q \put(-305,-15){\makebox(300,87)[r]{#1}} % left sub.
+ \else \put(-455,-15){\makebox(300,87)[r]{#1}} \fi
+ \ifx#2S \put(-150,33) {\line(1,0) {140}} \fi % single
+ % hor. bond
+ \ifx#2D \put(-150,20) {\line(1,0) {140}} % hor.
+ \put(-150,46) {\line(1,0) {140}} \fi % d. bond
+ \put(0,0) {#3} % center
+ % atoms
+ \ifx#4S \put(80,70) {\line(1,1) {100}} \fi % NE single
+ % bond
+ \ifx#4D \put(71,79) {\line(1,1) {100}}
+ \put(89,61) {\line(1,1) {100}} \fi % NE double
+ \put(185,170) {#5} % NE subst.
+ \ifx#6S \put(80,0) {\line(1,-1) {100}} \fi % SE single
+ \ifx#6D \put(71,-9) {\line(1,-1) {100}} % SE double
+ \put(89,9) {\line(1,-1) {100}} \fi % bond
+ \put(185,-170) {#7} % SE subst.
+ \end{picture} } % end cright macro
+ \newcommand{\cleft}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a trigonal fragment, opening to the %
+ % left. The fragment has a variable center atom and three %
+ % variable substituents. Bonds can be single or double. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-405,160) {\makebox(300,87)[r]{#1}} % NW subst.
+ \ifx#2S \put(0,70) {\line(-1,1) {100}} \fi % NW single
+ % bond
+ \ifx#2D \put(9,79) {\line(-1,1) {100}} % NW double
+ \put(-9,61) {\line(-1,1) {100}} \fi % bond
+ \put(0,0) {#3} % center
+ % atoms(s)
+ \ifx#4S \put(0,0) {\line(-1,-1) {100}} \fi % SW single
+ \ifx#4D \put(-9,9) {\line(-1,-1) {100}} % SW double
+ \put(9,-9) {\line(-1,-1) {100}} \fi % bond
+ \put(-405,-185) {\makebox(300,87)[r]{#5}} % SW subst.
+ \ifx#6S \put(90,33) {\line(1,0) {140}} \fi % hor.
+ % single
+ \ifx#6D \put(90,20) {\line(1,0) {140}} % double
+ \put(90,46) {\line(1,0) {140}} \fi % bond
+ \put(240,0) {#7} % right sub.
+ \end{picture} } % end cleft macro
+ \newcommand{\chemup}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a trigonal fragment, opening %
+ % upwards. The fragment has a variable center atom and %
+ % three variable substituents. Bonds are single or %
+ % double. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-430,130) {\makebox(300,87)[r]{#1}} % NW subst.
+ \ifx#2S \put(0,70) {\line(-5,3) {121}} \fi % NW single
+ \ifx#2D \put(7,81) {\line(-5,3) {121}} % NW double
+ \put(-7,59) {\line(-5,3) {121}} \fi % bond
+ \put(0,0) {#3} % center
+ % atom(s)
+ \ifx#4S \put(33,-10) {\line(0,-1) {140}} \fi % vertical
+ % single
+ \ifx#4D \put(20,-10) {\line(0,-1) {140}} % vertical
+ \put(46,-10) {\line(0,-1) {140}} \fi % double
+ \put(0,-230) {#5} % bottom
+ % subst.
+ \ifx#6S \put(80,70) {\line(5,3) {121}} \fi % NE single
+ \ifx#6D \put(73,81) {\line(5,3) {121}} % NE double
+ \put(87,59) {\line(5,3) {121}} \fi % bond
+ \put(210,140) {#7} % NE subst.
+ \end{picture} } % end chemup macro
+ \newcommand{\cdown}[7] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a trigonal fragment, opening %
+ % downwards. The fragment has a variable center atom and %
+ % three variable substituents. Bonds are single or double. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,230) {#1} % upper sub.
+ \ifx#2S \put(33,80) {\line(0,1) {140}} \fi % vert.
+ % single
+ \ifx#2D \put(20,80) {\line(0,1) {140}} % double
+ \put(46,80) {\line(0,1) {140}} \fi
+ \put(0,0) {#3} % center
+ % atom(s)
+ \ifx#4S \put(0,0) {\line(-5,-3) {121}} \fi % SW single
+ \ifx#4D \put(-7,11) {\line(-5,-3) {121}} % SW double
+ \put(7,-11) {\line(-5,-3) {121}} \fi % bond
+ \put(-430,-150) {\makebox(300,87)[r]{#5}} % SW subst.
+ \ifx#6S \put(80,0) {\line(5,-3) {121}} \fi % SE bond
+ \ifx#6D \put(87,11) {\line(5,-3) {121}} % SE double
+ \put(73,-11) {\line(5,-3) {121}} \fi % bond
+ \put(210,-140) {#7} % SE subst.
+ \end{picture} } % end cdown macro
+ \newcommand{\csquare}[5] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a fragment that consists of a variable %
+ % center atom with four variable substituents pointing to %
+ % the four corners of a square. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-405,160) {\makebox(300,87)[r]{#1}} % NW subst.
+ \put(0,70) {\line(-1,1) {100}} % NW bond
+ \put(0,0) {#3} % center
+ % atom
+ \put(0,0) {\line(-1,-1) {100}} % SW bond
+ \put(-405,-185) {\makebox(300,87)[r]{#4}} % SW subst.
+ \put(80,70) {\line(1,1) {100}} % NE bond
+ \put(185,170) {#2} % NE subst.
+ \put(80,0) {\line(1,-1) {100}} % SE bond
+ \put(185,-170) {#5} % SE subst.
+ \end{picture} } % end csquare macro
+ \newcommand{\ccirc}[4] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The ccirc macro draws a circle with 2 substituents %
+ % infront of the circle and 2 behind it to give a %
+ % threedimensional impression. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(90,0) {\circle{180}}
+ \put(90,90) {\line(0,1) {70}} % behind and up
+ \put(60,170) {#1}
+ \thicklines
+ \put(30,10) {\line(-5,2) {140}} % in front
+ \put(-415,30) {\makebox(300,87)[r]{#2}} % and left
+ \put(150,10) {\line(5,2) {140}} % in front
+ \put(300,30) {#3} % and right
+ \thinlines
+ \put(90,-90) {\line(0,-1) {90}} % behind and
+ \put(60,-260) {#4} % down
+ \end{picture} } % end ccirc macro
+
+ \newcommand{\threering}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The threering macro typesets the cyclopropane ring %
+ % with optional substituents, an optional double bond, %
+ % and a plus inside the ring for aromaticity. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(300,0) {\line(-3,-5) {150}} % bond 1 to 2
+ \put(150,-244) {\line(-3,5) {150}} % bond 2 to 3
+ \put(0,0) {\line(1,0) {300}} % bond 3 to 1
+ \ifx#7D \put(40,-40){\line(1,0){220}}\fi % double 3 to 1
+ \ifx#1Q % subst. on 1
+ \else\put(300,0) {\line(5,3) {128}}
+ \put(433,50) {#1} \fi
+ \ifx#2Q % subst. on 2
+ \else\ifx#9C \put(150,-244) {\line(0,-1){100}}
+ \put(114,-424) {#2} % on straight bond
+ \else\put(150,-244) {\line(5,-3) {128}}
+ \put(283,-344) {#2} \fi \fi % slanted
+ \ifx#2Q % subst. on 2
+ \else\ifx#5Q \put(150,-244) {\line(0,-1){100}}
+ \put(114,-424) {#2} % on straight bond
+ \else\put(150,-244) {\line(5,-3) {128}}
+ \put(283,-344) {#2} \fi \fi % slanted
+ \ifx#3Q % subst. on 3
+ \else\put(0,0) {\line(-5,3) {128}}
+ \put(-430,34) {\makebox(300,87)[r]{#3}} \fi
+ \ifx#4Q % second subst.
+ \else\put(300,0) {\line(5,-3) {128}} % on 1
+ \put(433,-100) {#4} \fi
+ \ifx#5Q % second subst.
+ \else\put(150,-244) {\line(-5,-3) {128}} % on 2
+ \put(-280,-360){\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q % second subst.
+ \else\put(0,0) {\line(-5,-3) {128}} % on 3
+ \put(-430,-116){\makebox(300,87)[r]{#6}} \fi
+ \ifx#8Q
+ \else\multiput(135,-244)(30,0){2} % outside
+ {\line(0,-1) {100}} % double
+ \put(114,-424) {#8} \fi % on 2
+ \ifx#9C \put(150,-90){\circle{120}} % circle with +
+ \put(110,-120){+} \fi
+ \end{picture} } % end cycloprop. macro
+ \newcommand{\fourring}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The fourring macro typesets the cyclobutane ring with %
+ % optional substituents and double bonds. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(300,300) {\line(0,-1) {300}} % bond 1 to 2
+ \put(300,0) {\line(-1,0) {300}} % 2 to 3
+ \put(0,0) {\line(0,1) {300}} % 3 to 4
+ \put(0,300) {\line(1,0) {300}} % 4 to 1
+ \ifx#7D\put(260,260){\line(0,-1){220}}\fi % double 1 to 2
+ \ifx#8D\put(40,40) {\line(0,1) {220}}\fi % double 3 to 4
+ \ifx#1Q % subst. on 1
+ \else\put(300,300){\line(5,3) {128}}
+ \put(433,350){#1} \fi
+ \ifx#2Q % subst. on 2
+ \else\put(300,0) {\line(5,-3){128}}
+ \put(433,-100){#2} \fi
+ \ifx#3Q % subst. on 3
+ \else\put(0,0) {\line(-5,-3){128}}
+ \put(-430,-116){\makebox(300,87)[r]{#3}} \fi
+ \ifx#4Q % subst. on 4
+ \else\put(0,300) {\line(-5,3) {128}}
+ \put(-430,334){\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q % second subst.
+ \else\put(300,300){\line(5,-3) {128}} % on 1
+ \put(433,200){#5} \fi
+ \ifx#6Q % second subst.
+ \else\put(0,300) {\line(-5,-3){128}} % on 4
+ \put(-430,184){\makebox(300,87)[r]{#6}} \fi
+ \ifx#9Q % outs. double
+ \else\multiput(280,-5)(20,30){2} % and subst.
+ {\line(1,-1){100}} \put(405,-140){#9} \fi % on 2
+ \end{picture} } % end cyclobutane macro
+ \newcommand{\fivering}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the cyclopentane ring with optional %
+ % substituents and double bonds. A minus sign in a circle %
+ % can be put inside the ring to denote aromaticity. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,200) {\line(0,-1) {200}} % bond 1 to 2
+ \put(342,0) {\line(-5,-3) {171}} % bond 2 to 3
+ \put(171,-103) {\line(-5,3) {171}} % bond 3 to 4
+ \put(0,0) {\line(0,1) {200}} % bond 4 to 5
+ \put(0,200) {\line(1,0) {342}} % bond 5 to 1
+ \ifx#1Q % subst. on 1
+ \else\put(342,200) {\line(5,3) {128}}
+ \put(475,250) {#1} \fi
+ \ifx#2Q % subst. on 2
+ \else\put(342,0) {\line(5,-3) {128}}
+ \put(475,-100) {#2} \fi
+ \ifx#3Q % subst. on 3
+ \else\put(171,-103) {\line(0,-1) {100}}
+ \put(150,-283) {#3} \fi
+ \ifx#4Q % subst. on 4
+ \else\put(0,0) {\line(-5,-3){128}}
+ \put(-430,-116) {\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q % subst. on 5
+ \else\put(0,200) {\line(-5,3) {128}}
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6D\put(316,174) {\line(0,-1) {148}} % double 1,2
+ \else\ifx#6S
+ \else\put(342,200) {\line(5,-3) {128}}
+ \put(475,100){#6} \fi % second sub.
+ \fi % on 1
+ \ifx#7D\put(26,26) {\line(0,1) {148}} % double 4,5
+ \else\ifx#7S
+ \else\put(0,200){\line(-5,-3){128}} % second sub.
+ \put(-430,84){\makebox(300,87)[r]{#7}} \fi
+ \fi % on 5
+ \ifx#8Q % outs. double
+ \else\multiput(156,-103)(30,0){2} % and subst.
+ {\line(0,-1) {100}} \put(135,-283){#8} \fi % on 3
+ \ifx#9C\put(171,60) {\circle{210}} % circle and
+ \put(130,35) {$-$} \fi % minus
+ \end{picture} } % end 5-ring macro
+ \newcommand{\sixring}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The sixring macro draws standard carbon sixrings in the %
+ % shape of a regular hexagon. There are optional ring %
+ % double bonds and substituents. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,200) {\line(0,-1) {200}} % bond 1 to 2
+ \put(342,0) {\line(-5,-3) {171}} % bond 2 to 3
+ \put(171,-103) {\line(-5,3) {171}} % bond 3 to 4
+ \put(0,0) {\line(0,1) {200}} % bond 4 to 5
+ \put(0,200) {\line(5,3) {171}} % bond 5 to 6
+ \put(171,303) {\line(5,-3) {171}} % bond 6 to 1
+ \ifx#7D % d. bond 1,2
+ \put(316,174) {\line(0,-1) {148}}
+ \else \ifx#7S % 2. sub. on 1
+ \else\put(342,200) {\line(5,-3) {128}}
+ \put(475,100) {#7} \fi \fi
+ \ifx#8D
+ \put(162,-67) {\line(-5,3) {126}} % double 3 to 4
+ \else\ifx#8S
+ \else\put(156,-203) {\line(0,1){100}} % outside
+ % double and
+ \put(186,-203) {\line(0,1){100}} % subst. on 3
+ \put(135,-283) {#8} \fi \fi
+ \ifx#9D
+ \put(36,191) {\line(5,3) {126}} \fi % double 5 to 6
+ \ifx#9C \put(171,100) {\circle{250}} \fi % circle for
+ % aromaticity
+ \ifx#1Q % subst. on 1
+ \else\put(342,200) {\line(5,3){128}}
+ \put(475,250) {#1} \fi
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3){128}} % subst. on 2
+ \put(475,-100) {#2} \fi
+ \ifx#3Q
+ \else\put(171,-203) {\line(0,1){100}}
+ \put(150,-283) {#3} \fi % subst. on 3
+ \ifx#4Q
+ \else\put(0,0) {\line(-5,-3){128}} % subst. on 4
+ \put(-430,-116){\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3){128}} % subst. on 5
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q
+ \else\put(171,303) {\line(0,1){100}} % subst. on 6
+ \put(150,410) {#6} \fi
+ \ifx#7D \ifx#9C \message{Error: ring double bond
+ simultaneous with circle}
+ \fi \fi
+ \end{picture} } % end sixring macro
+ \newcommand{\sixringa}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro differs from the original sixring macro only %
+ % in the position of the double bonds in the ring. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,200) {\line(0,-1) {200}} % bond 1 to 2
+ \put(342,0) {\line(-5,-3) {171}} % bond 2 to 3
+ \put(171,-103) {\line(-5,3) {171}} % bond 3 to 4
+ \put(0,0) {\line(0,1) {200}} % bond 4 to 5
+ \put(0,200) {\line(5,3) {171}} % bond 5 to 6
+ \put(171,303) {\line(5,-3) {171}} % bond 6 to 1
+ \ifx#7D % double 1,6
+ \put(306,191) {\line(-5,3) {126}}
+ \else \ifx#7S % second subst.
+ \else\put(342,200) {\line(5,-3) {128}}
+ \put(475,100) {#7} \fi \fi % on 1
+ \ifx#8D
+ \put(178,-67) {\line(5,3) {126}} % double 3,2
+ \else\ifx#8S
+ \else\put(156,-203) {\line(0,1){100}} % outs. double
+ \put(186,-203) {\line(0,1){100}} % and subst.
+ \put(135,-283) {#8} \fi \fi % on 3
+ \ifx#9D
+ \put(26,26) {\line(0,1) {148}} \fi % double 4,5
+ \ifx#9C \put(171,100) {\circle{250}} \fi % circle for
+ % aromaticity
+ \ifx#1Q % subst. on 1
+ \else\put(342,200) {\line(5,3){128}}
+ \put(475,250) {#1} \fi
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3){128}} % subst. on 2
+ \put(475,-100) {#2} \fi
+ \ifx#3Q
+ \else\put(171,-203) {\line(0,1){100}}
+ \put(150,-283) {#3} \fi % subst. on 3
+ \ifx#4Q
+ \else\put(0,0) {\line(-5,-3){128}} % subst. on 4
+ \put(-430,-116){\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3){128}} % subst. on 5
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q
+ \else\put(171,303) {\line(0,1){100}} % subst. on 6
+ \put(150,410) {#6} \fi
+ \ifx#7D \ifx#9C \message{Error: ring double bond with
+ circle} \fi \fi
+ \end{picture} } % end sixringa macro
+ \newcommand{\sixringb}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This variation of the sixring can typeset all combina- %
+ % tions of double bonds in the ring through argument 9. %
+ % A para-quinoid structure is also possible. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % macros to typeset the ring double bonds:
+ \newcommand{\di} {\put(316,174){\line(0,-1){148}}} %double 1-2
+ \newcommand{\dii} {\put(178,-67){\line(5,3) {126}}} %double 2-3
+ \newcommand{\diii} {\put(162,-67){\line(-5,3){126}}} %double 3-4
+ \newcommand{\dfour}{\put(26,26) {\line(0,1) {148}}} %double 4-5
+ \newcommand{\dv} {\put(36,191) {\line(5,3) {126}}} %double 5-6
+ \newcommand{\dsix} {\put(306,191){\line(-5,3){126}}} %double 6-1
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,200) {\line(0,-1) {200}} % bond 1 to 2
+ \put(342,0) {\line(-5,-3) {171}} % bond 2 to 3
+ \put(171,-103) {\line(-5,3) {171}} % bond 3 to 4
+ \put(0,0) {\line(0,1) {200}} % bond 4 to 5
+ \put(0,200) {\line(5,3) {171}} % bond 5 to 6
+ \put(171,303) {\line(5,-3) {171}} % bond 6 to 1
+ \ifx#7Q
+ \else\put(158,303) {\line(0,1) {100}} % outs. double
+ \put(184,303) {\line(0,1) {100}} % bond and
+ \put(130,420) {#7} \fi % sub. on 6
+ \ifx#8Q
+ \else\put(156,-203){\line(0,1){100}} % outs. double
+ \put(186,-203){\line(0,1){100}} % bond and
+ \put(135,-283) {#8} \fi % sub.on 3
+ % 17 double bond combinations:
+ \ifcase#9 \put(171,100) {\circle{250}} % circle
+ \or \di \or \dii \or \or diii \or \di \diii % arg 9=1-5
+ \or \or \or dfour \or \dfour \di % arg 9=6-9
+ \or \dfour \dii \or \or \or \or \or \or \dv % arg 9=10-16
+ \or \dv \di \or \dv \dii \or \or \dv \diii % arg 9=17-20
+ \or \dv \diii \di \or \or \or \or \or \or % arg 9=21-27
+ \or \or \or \or \or \dsix \or \or \dsix \dii % 28-34
+ \or \or \dsix \diii \or \or \or % arg 9=35-39
+ \or \dsix \dfour \or \or \dsix \dfour \dii % arg 9=40-42
+ \fi
+ \ifx#1Q % subst. on 1
+ \else\put(342,200) {\line(5,3){128}}
+ \put(475,250) {#1} \fi
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3){128}} % subst. on 2
+ \put(475,-100) {#2} \fi
+ \ifx#3Q
+ \else\put(171,-203) {\line(0,1){100}}
+ \put(150,-283) {#3} \fi % subst. on 3
+ \ifx#4Q
+ \else\put(0,0) {\line(-5,-3){128}} % subst. on 4
+ \put(-430,-116){\makebox(300,87)[r]{#4}} \fi
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3){128}} % subst. on 5
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q
+ \else\put(171,303) {\line(0,1){100}} % subst. on 6
+ \put(150,410) {#6} \fi
+ \ifx#7D \ifx#9C \message{Error: ring double bond with
+ circle} \fi \fi
+ \end{picture} } % end sixringb macro
+ \newcommand{\chair}[8] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The chair macro typesets the saturated carbon sixring in %
+ % its most favorable conformation. Axial and equatorial %
+ % substituents can be attached in 4 positions. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,0) {\line(3,-4) {170}} % bond 1 to 2
+ \put(170,-226) {\line(3,1) {403}} % 2 to 3
+ \put(573,-91) {\line(6,-1) {210}} % 3 to 4
+ \put(783,-126) {\line(-3,4) {170}} % 4 to 5
+ \put(613,100) {\line(-3,-1) {403}} % 5 to 6
+ \put(210,-35) {\line(-6,1) {210}} % 6 to 1
+ % bonds to subst. :
+ \put(0,0) {\line(0,1) {100}} % axial on 1
+ \put(170,-226) {\line(0,-1) {100}} % axial on 2
+ \put(573,-91) {\line(0,1) {100}} % axial on 3
+ \put(783,-126) {\line(0,-1) {100}} % axial on 4
+ \put(613,100) {\line(0,1) {100}} % axial on 5
+ \put(210,-35) {\line(0,-1) {100}} % axial on 6
+ \put(0,0) {\line(-3,-1) {128}} % eq. on 1
+ \put(170,-226) {\line(-3,1) {128}} % eq. on 2
+ \put(573,-91) {\line(3,-1) {128}} % eq. on 3
+ \put(783,-126) {\line(3,1) {128}} % eq. on 4
+ \put(613,100) {\line(3,-1) {128}} % eq. on 5
+ \put(210,-35) {\line(-3,1) {128}} % eq on 6
+ % variable subst.:
+ \ifx#1Q\else\put(-30,110) {#1} \fi % axial on 1
+ \ifx#2Q\else\put(140,-406) {#2} \fi % axial on 2
+ \ifx#3Q\else\put(543,9) {#3} \fi % axial on 3
+ \ifx#4Q\else\put(753,-306) {#4} \fi % axial on 4
+ \ifx#5Q\else\put(-430,-85) {\makebox(300,87)[r]{#5}}
+ \fi % eq. on 1
+ \ifx#6Q\else\put(-260,-226){\makebox(300,87)[r]{#6}}
+ \fi % eq. on 2
+ \ifx#7Q\else\put(415,-230) {\makebox(300,87)[r]{#7}}
+ \fi % eq. on 3
+ \ifx#8Q\else\put(916,-115) {#8} \fi % eq. on 4
+ \end{picture} } % end chair macro
+ \newcommand{\naphth}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the naphthalene ring system. %
+ % One or both rings can be saturated. An optional sub- %
+ % stituent is possible at each ring position. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \multiput(0,200)(342,0){2} {\line(5,3) {171}} % 7,8; 8a,1
+ \multiput(171,303)(342,0){2} {\line(5,-3){171}} % 8,8a; 1,2
+ \multiput(0,0)(342,0){3} {\line(0,1) {200}} % 6,7;4a,8a
+ % 3,2
+ \multiput(0,0)(342,0){2} {\line(5,-3){171}} % 6,5; 4a,4
+ \multiput(171,-103)(342,0){2}{\line(5,3) {171}} % 5,4a; 4,3
+ \ifx#1Q
+ \else\put(513,303) {\line(0,1) {100}} % sub. on 1
+ \put(492,410) {#1} \fi
+ \ifx#2Q
+ \else\put(684,200) {\line(5,3) {128}} % sub. on 2
+ \put(817,250) {#2} \fi
+ \ifx#3Q
+ \else\put(684,0) {\line(5,-3){128}} % sub. on 3
+ \put(817,-100) {#3} \fi
+ \ifx#4Q
+ \else\put(513,-103) {\line(0,-1){100}} % sub. on 4
+ \put(492,-283) {#4} \fi
+ \ifx#5Q
+ \else\put(171,-103) {\line(0,-1){100}} % sub. on 5
+ \put(150,-283) {#5} \fi
+ \ifx#6Q
+ \else\put(0,0) {\line(-5,-3){128}} % sub. on 6
+ \put(-430,-116) {\makebox(300,87)[r]{#6}} \fi
+ \ifx#7Q
+ \else\put(0,200) {\line(-5,3) {128}} % sub. on 7
+ \put(-430,234) {\makebox(300,87)[r]{#7}} \fi
+ \ifx#8Q
+ \else\put(171,303) {\line(0,1) {100}} %sub. on 8
+ \put(150,410) {#8} \fi
+ \ifx#9S %all single
+ \else\put(316,174) {\line(0,-1) {148}} %double
+ % 4a,8a
+ \put(162,-67) {\line(-5,3) {126}} %double 5,6
+ \put(36,191) {\line(5,3) {126}} %double 7,8
+ \fi
+ \ifx#9D\put(648,191) {\line(-5,3) {126}} %double 2,1
+ \put(520,-67) {\line(5,3) {126}} %double 4,3
+ \fi
+ \end{picture} } % end naphthalene macro
+ \newcommand{\terpene}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the bicyclo(2.2.1)heptane ring %
+ % system with optional methyl groups at the one-carbon %
+ % bridge. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,0) {\line(5,1) {196}} % bond 5 to 4
+ \put(196,39) {\line(5,-2) {186}} % bond 4 to 3
+ \put(382,-35) {\line(2,5) {66}} % bond 3 to 2
+ \put(448,130) {\line(-5,2) {186}} % bond 2 to 1
+ \put(262,204) {\line(-5,-1){196}} % bond 1 to 6
+ \put(66,165) {\line(-2,-5){66}} % bond 6 to 5
+ \put(196,39) {\line(0,1) {330}} % long part of
+ % bridge
+ \put(262,204) {\line(-2,5) {66}} % shorter part
+ % of bridge
+ \ifx#1Q % subst. on 1
+ \else\put(262,204) {\line(4,3) {120}}
+ \put(387,267) {#1} \fi
+ \ifx#2Q % subst. on 2
+ \else\put(448,130) {\line(4,3) {120}}
+ \put(573,193) {#2} \fi
+ \ifx#3Q % subst. on 3
+ \else\put(382,-35) {\line(5,-2) {120}}
+ \put(507,-121) {#3} \fi
+ \ifx#4Q % subst. on 4
+ \else\put(196,39) {\line(2,-5) {56}}
+ \put(231,-180) {#4} \fi
+ \ifx#5Q % subst. on 5
+ \else\put(0,0) {\line(-5,-2){139}}
+ \put(-441,-95) {\makebox(300,87)[r]{#5}} \fi
+ \ifx#6Q % subst. on 6
+ \else\put(66,165) {\line(-4,3) {120}}
+ \put(-362,216) {\makebox(300,87)[r]{#6}} \fi
+ \ifx#7M\put(196,369) {\line(4,3) {120}} % methyl
+ \put(196,369) {\line(-4,3) {120}} % groups
+ \put(321,432) {\small ${\rm CH_3}$}
+ \put(-226,425) % on bridge
+ {\makebox(300,87)[r]{\small ${\rm CH_3}$}} \fi
+ \ifx#8Q\else
+ \ifx#8O\put(443,142) {\line(5,2) {130}} % double-
+ \put(453,118) {\line(5,2) {130}} % bonded
+ \put(583,155) {$O$} % O on 2
+ \else\put(448,130) {\line(5,-2) {120}} % sec. subst.
+ \put(573,44) {#8} \fi \fi % on 2
+ \ifx#9Q\else
+ \ifx#9D\put(368,-1) {\line(2,5) {46}} % double 3 to 2
+ \else\put(382,-35) {\line(4,3) {120}} % second subst.
+ \put(507,28) {#9} \fi \fi % on 3
+ \end{picture} } % end terpene macro
+ \newcommand{\steroid}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the steroid skeleton. Optional double %
+ % bonds and substituents make it possible to print the %
+ % structures of common steroids. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \multiput(0,0)(342,0){3} {\line(0,1) {200}} %3-2,
+ % 5-10,7-8
+ \multiput(513,303)(342,0){3}{\line(0,1) {200}} %9-11,14-13,
+ % 15-16
+ \multiput(0,200)(342,0){3} {\line(5,3) {171}} %2-1,
+ % 10-9,
+ % 8-14
+ \multiput(0,0)(342,0){2} {\line(5,-3){171}} %3-4, 5-6
+ \multiput(171,-103)(342,0){2}{\line(5,3) {171}} %4-5, 6-7
+ \multiput(171,303)(342,0){2}{\line(5,-3){171}} %1-10, 9-8
+ \multiput(513,503)(342,0){2}{\line(5,3) {171}} %11-12,
+ % 13-17
+ \multiput(684,606)(342,0){2}{\line(5,-3){171}} %12-13,
+ % 17-16
+ \put(855,303) {\line(1,0) {342}} %14-15
+ \put(855,503) {\line(0,1) {128}} % methyl 18
+ \put(795,638) {\small ${\rm CH_3}$}
+ \ifx#1D\put(36,191) {\line(5,3) {126}}% double
+ \else\ifx#1Q % 1 to 2
+ \else\put(520,514) {\line(-5,3) {128}}
+ \put(506,492) {\line(-5,3) {128}}
+ \put(83,547) {\makebox(300,87)[r]{#1}} \fi
+ \fi % outside double & subst. 11
+ \ifx#2D\put(162,-67) {\line(-5,3) {126}} % double
+ \else\ifx#2Q % 4 to 3
+ \else\put(-7,11) {\line(-5,-3) {128}}
+ \put(7,-11) {\line(-5,-3) {128}}
+ \put(-430,-116) {\makebox(300,87)[r]{#2}} \fi
+ \fi % outside double & subst. 3
+ \ifx#3Q
+ \else\put(0,0) {\line(-5,-3){128}} % subst.
+ \put(-430,-116) {\makebox(300,87)[r]{#3}} \fi % on 3
+ \ifx#4D\put(178,-67) {\line(5,3) {126}} \fi % double
+ % 4 to 5
+ \ifx#5D\put(378,9) {\line(5,-3) {126}} % double
+ % 6 to 5
+ \else\ifx#5Q
+ \else\multiput(1011,606)(30,0){2} {\line(0,1) {100}}
+ \put(985,713) {#5} \fi
+ \fi % outside double & subst. 17
+ \ifx#6D\put(316,174) {\line(0,-1) {148}} \fi % double
+ % 5 to 10
+ \ifx#6M\put(342,200) {\line(0,1) {128}} % methyl
+ % 19
+ \put(282,335) {\small ${\rm CH_3}$} \fi
+ \ifx#7Q
+ \else\put(1026,606) {\line(0,1) {100}} % lower
+ % subst.
+ \put(995,713) {#7} \fi % part
+ % on 17
+ \ifx#8Q
+ \else\put(1026,791) {\line(0,1) {100}} % upper
+ % subst.
+ \put(995,900) {#8} \fi % part
+ % on 17
+ \ifx#9Q
+ \else\put(1026,606) {\line(1,0) {128}} % the other
+ \put(1160,575) {#9} \fi % subst.
+ % on 17
+ \end{picture} } % end steroid macro
+
+ \newcommand{\hetthree}[8] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The hetthree macro draws a three-membered ring with one %
+ % hetero atom. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(170,-170) {#8} % hetero atom
+ \put(0,0) {C} % C-2
+ \put(360,0) {C} % C-3
+ \put(80,30) {\line(1,0) {270}} % bond 2-3
+ \put(70,-10) {\line(1,-1) {100}} % bond 2-1
+ \put(350,-10) {\line(-1,-1){100}} % bond 3-1
+ \ifx#1Q % substituent
+ \else\put(210,-180) {\line(0,-1){80}} % on het. atom
+ \put(180,-340) {#1} \fi
+ \ifx#6S\put(-10,30) {\line(-1,0){140}} % subst. on C-2
+ \put(-460,-10) {\makebox(300,87)[r]{#2}} % with hor.
+ % bond
+ \else\ifx#6H\put(-90,30) {\line(-1,0) {140}}% bond and H
+ \put(-70,0) {H} % on C-2
+ \put(-540,-10) {\makebox(300,87)[r]{#2}}
+ \else \put(-310,-10) {\makebox(300,87)[r]{#2}} \fi \fi
+ % no bond on 2
+ \ifx#7S\put(440,30) {\line(1,0) {140}} % subst. on C-3
+ \put(590,0) {#3} % with hor. bond
+ \else\ifx#7H\put(430,0) {H} % bond with H
+ \put(510,30) {\line(1,0) {140}}
+ \put(660,0) {#3}
+ \else \put(445,0) {#3} \fi \fi % no bond on 3
+ \ifx#4Q
+ \else\put(40,80) {\line(0,1) {140}} % second subst.
+ \put(-225,220) {\makebox(300,87)[r]{#4}} \fi % on C-2
+ \ifx#5Q
+ \else\put(400,80) {\line(0,1) {140}} % second subst.
+ \put(360,230) {#5} \fi % on C-3
+ \end{picture} } % end hetthree macro
+ \newcommand{\hetifive}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The hetifive macro typesets a five-membered ring with one %
+ % hetero atom. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,0) {\line(-5,-3) {140}} % bond 2,1
+ \put(342,0) {\line(0,1) {200}} % bond 2,3
+ \put(342,200) {\line(-1,0) {342}} % bond 3,4
+ \put(0,200) {\line(0,-1) {200}} % bond 4,5
+ \put(0,0) {\line(5,-3) {140}} % bond 5,1
+ \ifx#1Q
+ \else\put(171,-137) {\line(0,-1) {83}} % subst.on
+ \put(135,-283) {#1} \fi % het.atom
+ \ifx#2Q
+ \else\ifx#2O\put(349,11) {\line(5,-3) {128}} % outside
+ \put(335,-11){\line(5,-3) {128}} % double O
+ \put(475,-120) {O} % on C-2
+ \else\put(342,0) {\line(5,-3) {128}} % single
+ \put(475,-100) {#2} \fi % subst.
+ \fi % on C-2
+ \ifx#3Q
+ \else\put(342,200) {\line(5,3) {128}} % subst. on
+ \put(475,250) {#3} \fi % C-3
+ \ifx#4Q
+ \else\put(0,200) {\line(-5,3) {128}} % subst. on
+ \put(-430,234) {\makebox(300,87)[r]{#4}}\fi % C-4
+ \ifx#5Q
+ \else\ifx#5O\put(-7,11) {\line(-5,-3) {128}} % outside
+ \put(7,-11) {\line(-5,-3) {128}} % double O
+ \put(-200,-130) {O} % on C-5
+ \else\put(0,0) {\line(-5,-3) {128}} % single
+ \put(-430,-116){\makebox(300,87)[r]{#5}} \fi % sub.
+ \fi % on C-5
+ \ifx#6D\put(316,26) {\line(0,1) {148}} \fi % double 2,3
+ \ifx#7D\put(316,174) {\line(-1,0) {290}} \fi % double 3,4
+ \ifx#8D\put(26,174) {\line(0,-1) {148}} \fi % double 4,5
+ \put(135,-130) {#9} % hetero atom
+ \end{picture} } % end one-hetero fivering macro
+ \newcommand{\heticifive}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The heticifive macro typesets a five-membered ring with %
+ % two hetero atoms separated by a carbon atom. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,0) {\line(-5,-3) {140}} % bond 2,1
+ \put(342,0) {\line(0,1) {160}} % bond 2,3
+ \put(0,200) {\line(1,0) {300}} % bond 4,3
+ \put(0,200) {\line(0,-1) {200}} % bond 4,5
+ \put(0,0) {\line(5,-3) {140}} % bond 5,1
+ \ifx#1Q
+ \else\put(171,-137) {\line(0,-1) {83}} % subst. on
+ \put(135,-283) {#1} \fi % het-1
+ \ifx#2Q
+ \else\ifx#2O\put(349,11) {\line(5,-3) {128}} % outside
+ \put(335,-11) {\line(5,-3) {128}} % double O
+ \put(475,-120) {O} % on C-2
+ \else\put(342,0) {\line(5,-3) {128}} % single sub.
+ \put(475,-100) {#2} \fi % on C-2
+ \fi
+ \ifx#3Q
+ \else\put(370,217) {\line(5,3) {100}} % subst. on
+ \put(475,250) {#3} \fi % on het-3
+ \ifx#4Q
+ \else\ifx#4O\put(-7,189) {\line(-5,3) {128}} % outside
+ \put(7,211) {\line(-5,3) {128}} % double O
+ \put(-200,250) {O} % on C-4
+ \else\put(0,200) {\line(-5,3) {128}} % single sub.
+ \put(-430,234) {\makebox(300,87)[r]{#4}} \fi
+ \fi % on C-4
+ \ifx#5Q
+ \else\put(0,0) {\line(-5,-3) {128}} % 1. single
+ \put(-430,-116){\makebox(300,87)[r]{#5}}\fi % subst.
+ % on C-5
+ \ifx#6D\put(316,26) {\line(0,1) {130}} \fi % double 2,3
+ \ifx#7Q
+ \else\ifx#7D\put(26,174) {\line(0,-1) {148}} % double 4,5
+ \else\put(0,0) {\line(-5,3) {128}} % 2. subst.
+ \put(-430,34) {\makebox(300,87)[r]{#7}} \fi
+ \fi % on C-5
+ \put(135,-130) {#8} % het.atom 1
+ \put(310,170) {#9} % het.atom 3
+ \end{picture} } % end heticifive macro
+ \newcommand{\pyrazole}[8] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the pyrazole ring with optional %
+ % substituents and double bonds inside and outside the %
+ % ring. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(200,-84) {\line(5,3) {110}} % bond 1,2
+ \put(342,200) {\line(0,-1) {140}} % bond 3,2
+ \put(342,200) {\line(-1,0) {342}} % bond 3,4
+ \put(0,200) {\line(0,-1) {200}} % bond 4,5
+ \put(0,0) {\line(5,-3) {140}} % bond 5,1
+ \put(135,-130) {N} % ring N-1
+ \put(310,-30) {N} % ring N-2
+ \ifx#1Q
+ \else\put(171,-137) {\line(0,-1) {83}} % subst. on
+ \put(150,-283) {#1} \fi % on N-1
+ \ifx#2Q
+ \else\put(370,-17) {\line(5,-3) {100}} % subst. on
+ \put(475,-100) {#2} \fi % N-2
+ \ifx#3Q
+ \else\ifx#3O\put(335,211) {\line(5,3) {128}} % outside
+ \put(349,189) {\line(5,3) {128}} % double O
+ \put(475,250) {O} % on C-3
+ \else\put(342,200) {\line(5,3) {128}} % single sub.
+ \put(475,250) {#3} \fi % on C-3
+ \fi
+ \ifx#4Q
+ \else\put(0,200) {\line(-5,3) {128}} % single sub.
+ \put(-430,234) {\makebox(300,87)[r]{#4}}\fi % on C-4
+ \ifx#5Q
+ \else\ifx#5O\put(-7,11) {\line(-5,-3){128}} % outside
+ \put(7,-11) {\line(-5,-3){128}} % double O
+ \put(-200,-130){O} % on C-5
+ \else\put(0,0) {\line(-5,-3){128}} % single sub.
+ \put(-430,-116) {\makebox(300,87)[r]{#5}} \fi
+ \fi % on C-5
+ \ifx#6D\put(316,174) {\line(0,-1) {114}} \fi % double 3,2
+ \ifx#7D\put(316,174) {\line(-1,0) {290}} \fi % double 3,4
+ \ifx#8D\put(26,174) {\line(0,-1) {148}} \fi % double 4,5
+ \end{picture} } % end pyrazole macro
+ \newcommand{\hetisix}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % The hetisix macro typesets a six-membered ring with %
+ % one hetero atom. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,0) {\line(-5,-3) {140}} % bond 2 to 1
+ \put(0,0) {\line(5,-3) {140}} % bond 6 to 1
+ \put(342,0) {\line(0,1) {200}} % bond 2 to 3
+ \put(342,200) {\line(-5,3) {171}} % bond 3 to 4
+ \put(171,303) {\line(-5,-3) {171}} % bond 4 to 5
+ \put(0,200) {\line(0,-1) {200}} % bond 5 to 6
+ \ifx#7D
+ \put(316,26) {\line(0,1) {148}} % double 2 to 3
+ \else\ifx#7Q
+ \else\put(349,11) {\line(5,-3){128}} % outside
+ \put(335,-11) {\line(5,-3){128}} % double sub.
+ \put(475,-120){#7} \fi % on C-2
+ \fi
+ \ifx#8D
+ \put(36,191) {\line(5,3) {126}} \fi % double 5 to 4
+ \ifx#1D
+ \put(36,9) {\line(5,-3) {110}} % double 6 to 1
+ \else\ifx#1Q
+ \else\put(171,-220) {\line(0,1) {83}}
+ \put(150,-283) {#1} \fi % subst. on het.
+ \fi
+ \put(135,-130) {#9} % the het.atom
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3) {128}} % subst. on 2
+ \put(475,-100) {#2}
+ \fi
+ \ifx#3Q
+ \else\put(342,200) {\line(5,3) {128}} % subst. on 3
+ \put(475,250) {#3}
+ \fi
+ \ifx#4Q
+ \else\put(171,303) {\line(0,1) {100}} % subst. on 4
+ \put(150,410) {#4}
+ \fi
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3) {128}} % subst. on 5
+ \put(-430,234) {\makebox(300,87)[r]{#5}}
+ \fi
+ \ifx#6Q
+ \else\put(0,0) {\line(-5,-3) {128}} % subst. on 6
+ \put(-430,-116){\makebox(300,87)[r]{#6}}
+ \fi % end sixring macro with
+ \end{picture} } % one hetero atom
+ \newcommand{\pyrimidine}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the pyrimidine ring with optional %
+ % substituents and double bonds inside and outside the %
+ % ring. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(342,0) {\line(-5,-3) {140}} % from 2 to 1
+ \put(0,0) {\line(5,-3) {140}} % from 6 to 1
+ \put(342,0) {\line(0,1) {160}} % from 2 to 3
+ \put(171,303) {\line(5,-3) {140}} % from 4 to 3
+ \put(171,303) {\line(-5,-3) {171}} % from 4 to 5
+ \put(0,200) {\line(0,-1) {200}} % from 5 to 6
+ \put(135,-130) {N}
+ \put(310,170) {N}
+ \ifx#1Q
+ \else\put(171,-137) {\line(0,-1) {83}} % sub. on N-1
+ \put(150,-283) {#1} \fi
+ \ifx#2Q
+ \else\ifx#2O\put(349,11) {\line(5,-3) {128}} % outside
+ \put(335,-11) {\line(5,-3) {128}} % double O
+ \put(475,-120){O} % on C-2
+ \else\put(342,0) {\line(5,-3) {128}} % single
+ \put(475,-100) {#2} \fi % subst.
+ \fi
+ \ifx#3Q
+ \else\put(370,217) {\line(5,3) {100}} % subst.
+ \put(475,250) {#3} \fi % on N-3
+ \ifx#4Q
+ \else\ifx#4O\put(158,303) {\line(0,1) {100}} % outside
+ \put(184,303) {\line(0,1) {100}} % double O
+ \put(130,410) {O} % on C-4
+ \else\put(171,303) {\line(0,1) {100}} % single
+ \put(150,410) {#4} \fi % subst.
+ \fi % on C-4
+ \ifx#5Q
+ \else\put(0,200) {\line(-5,3) {128}} % 1. subst.
+ \put(-430,234) {\makebox(300,87)[r]{#5}} \fi
+ % on C-5
+ \ifx#6Q
+ \else\ifx#6O\put(-7,11) {\line(-5,-3){128}} % outside
+ \put(7,-11) {\line(-5,-3){128}} % double O
+ \put(-210,-130){O} % on C-6
+ \else\put(0,0) {\line(-5,-3){128}} % single s.
+ \put(-430,-116) {\makebox(300,87)[r]{#6}} \fi
+ \fi % on C-6
+ \ifx#7D\put(306,9) {\line(-5,-3) {120}} \fi % 2,1 doub.
+ \ifx#8D\put(180,267) {\line(5,-3) {120}} % 4,3 doub.
+ \else\ifx#8Q
+ \else\put(0,200){\line(-5,-3) {128}} % 2. subst.
+ \put(-430,84) {\makebox(300,87)[r]{#8}} \fi
+ \fi % on C-5
+ \ifx#9D\put(26,174) {\line(0,-1) {148}} \fi % 5,6 doub.
+ \end{picture} } % end pyrimidine macro
+ \newcommand{\pyranose}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets monosaccharides with a pyran ring %
+ % system. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(588,0) {\line(-1,-1) {159}} % 1,2 bond
+ \put(429,-159) {\line(-1,0) {270}} % 2,3 bond
+ \put(159,-159) {\line(-1,1) {159}} % 3,4 bond
+ \put(0,0) {\line(1,1) {159}} % 4,5 bond
+ \put(159,159) {\line(1,0) {225}} % C-5 to O
+ \put(394,130) {\small O} % ring O
+ \put(460,130) {\line(1,-1) {128}} % O to C-1
+ \ifx#1Q
+ \else\put(588,0) {\line(1,1) {100}} % beta sub.
+ \put(700,75) {#1} \fi % on C-1
+ \ifx#2Q
+ \else\put(588,0) {\line(1,-1) {100}} % alpha sub.
+ \put(700,-120){#2} \fi % on C-1
+ \ifx#3Q
+ \else\put(429,-159){\line(0,1) {85}} % up subst.
+ \put(225,-75) {\makebox(250,87)[r]{#3}} \fi % on C-2
+ \ifx#4Q
+ \else\put(429,-159){\line(0,-1) {85}} % down sub.
+ \put(400,-315){#4} \fi % on C-2
+ \ifx#5Q
+ \else\put(159,-159){\line(0,1) {85}} % up subst.
+ \put(130,-73) {#5} \fi % on C-3
+ \ifx#6Q
+ \else\put(159,-159){\line(0,-1) {85}} % down sub.
+ \put(130,-315){#6} \fi % on C-3
+ \ifx#7Q
+ \else\put(0,0) {\line(0,1) {85}} % up subst.
+ \put(-270,84) {\makebox(300,87)[r]{#7}} \fi % on C-4
+ \ifx#8Q
+ \else\put(0,0) {\line(0,-1) {85}} % down sub.
+ \put(-270,-160){\makebox(300,87)[r]{#8}}\fi % on C-4
+ \put(159,159) {\line(0,1) {85}} % C-6
+ \put(130,250) {\small ${\rm CH_{2}}$} % sub. on
+ \put(-370,245) {\makebox(500,87)[r]{#9}} % C-6
+ \end{picture} } % end pyranose macro
+ \newcommand{\furanose}[8] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets monosaccharides with a furan ring %
+ % system. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(448,0) {\line(-1,-2) {89}} % bond 1,2
+ \put(359,-179) {\line(-1,0) {270}} % bond 2,3
+ \put(89,-179) {\line(-1,2) {89}} % bond 3,4
+ \put(0,0) {\line(5,3) {188}} % C-4 to O
+ \put(192,110) {\small O} % ring O
+ \put(260,113) {\line(5,-3) {188}} % O to C-1
+ \ifx#1Q
+ \else\ifx#1N\put(448,0) {\line(0,1) {380}} % long bond
+ % for nucl.
+ \else\put(448,0) {\line(5,3) {105}} % beta sub.
+ \put(558,50) {#1} \fi % on C-1
+ \fi
+ \ifx#2Q
+ \else\put(448,0) {\line(5,-3) {105}} % alpha sub.
+ \put(558,-90) {#2} \fi % on C-1
+ \ifx#3Q
+ \else\put(359,-179) {\line(0,1) {85}} % up subst.
+ \put(155,-95) {\makebox(250,87)[r]{#3}}\fi %on C-2
+ \ifx#4Q
+ \else\put(359,-179) {\line(0,-1) {85}} % down sub.
+ \put(330,-335) {#4} \fi % on C-2
+ \ifx#5Q
+ \else\put(89,-179) {\line(0,1) {85}} % up sub.
+ \put(60,-93) {#5} \fi % on C-3
+ \ifx#6Q
+ \else\put(89,-179) {\line(0,-1) {85}} % down sub.
+ \put(60,-335) {#6} \fi % on C-3
+ \ifx#7Q
+ \else\put(0,0) {\line(0,-1) {85}} % down sub.
+ \put(-270,-160) {\makebox(300,87)[r]{#7}}\fi %on C-4
+ \put(0,0) {\line(0,1) {85}} % C-5
+ \put(-30,90) {\small ${\rm CH_{2}}$}
+ \put(-530,80) {\makebox(500,87)[r]{#8}}
+ \end{picture} } % end furanose macro
+ \newcommand{\purine}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets the purine ring system with optional %
+ % double bonds and substituents. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,0) {\line(0,1) {160}} % bond 2 to 1
+ \put(0,0) {\line(5,-3) {140}} % from 2 to 3
+ \put(342,0) {\line(-5,-3) {140}} % from 4 to 3
+ \put(342,0) {\line(0,1) {200}} % from 4 to 5
+ \put(316,174) {\line(0,-1) {148}} % double 5 to 4
+ \put(342,200) {\line(-5,3) {171}} % from 5 to 6
+ \put(171,303) {\line(-5,-3) {140}} % from 6 to 1
+ \put(342,200) {\line(1,0) {300}} % from 5 to 7
+ \put(684,0) {\line(0,1) {160}} % from 8 to 7
+ \put(684,0) {\line(-5,-3) {140}} % from 8 to 9
+ \put(342,0) {\line(5,-3) {140}} % from 4 to 9
+ \put(-32,170) {\small N} % N at 1
+ \put(135,-130) {\small N} % N at 3
+ \put(652,170) {\small N} % N at 7
+ \put(477,-130) {\small N} % N at 9
+ \ifx#1Q
+ \else\put(-128,277) {\line(5,-3) {100}} % subst. on 1
+ \put(-430,234) {\makebox(300,87)[r]{#1}}
+ \fi
+ \ifx#2D\put(36,9) {\line(5,-3) {100}} % double 2 to 3
+ \else\put(-7,11) {\line(-5,-3) {128}}
+ \put(7,-11) {\line(-5,-3) {128}}
+ \put(-430,-116){\makebox(300,87)[r]{#2}}
+ \fi %outside double
+ % bond on 2
+ \ifx#3Q % subst. on 3
+ \else\put(171,-130) {\line(0,-1) {73}}
+ \put(135,-283) {#3}
+ \fi
+ \ifx#4D\put(162,267) {\line(-5,-3){110}} \fi % d. bond 6,1
+ \ifx#5Q
+ \else\multiput(158,303)(26,0){2} {\line(0,1) {100}}
+ \put(135,410) {#5} % outside d.-bond
+ \fi % and subst. on 6
+ \ifx#6Q % single-bonded
+ \else\put(171,303) {\line(0,1) {100}} % subst. on 6
+ \put(150,410) {#6}
+ \fi
+ \ifx#7Q % subst. on 7
+ \else\put(812,277) {\line(-5,-3){100}}
+ \put(817,250) {#7}
+ \fi
+ \ifx#8D\put(658,26) {\line(0,1) {125}} % d.-bond 8 to 7
+ \else\put(691,11) {\line(5,-3) {128}}
+ \put(677,-11) {\line(5,-3) {128}}
+ \put(817,-110) {#8} % outside d.-bond
+ \fi % and subst. on 8
+ \ifx#9Q % subst. on 9
+ \else\put(513,-130) {\line(0,-1) {73}}
+ \put(492,-283) {#9}
+ \fi
+ \end{picture} } % end purine macro
+
+
+
+
+
+
+
+ \newcommand{\fuseiv}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a four-carbon fragment designed to %
+ % be connected to another ring at two places. As the %
+ % result, a sixring is fused linearly to another ring %
+ % system. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,200) {\line(5,3) {171}} % NE bond
+ \put(171,303) {\line(5,-3) {171}} % SE bond
+ \put(342,200) {\line(0,-1) {200}} % S bond
+ \put(342,0) {\line(-5,-3){171}} % SW bond
+ \put(171,-103) {\line(-5,3) {171}} % NW bond
+ \ifx#1Q
+ \else\put(171,303) {\line(0,1) {100}} % subst.
+ \put(150,410) {#1} \fi % on top
+ \ifx#2Q
+ \else\put(342,200) {\line(5,3) {128}} % subst.
+ \put(475,250) {#2} \fi % top rt.
+ \ifx#3Q
+ \else\put(342,0) {\line(5,-3) {128}} % subst.
+ \put(475,-100) {#3} \fi % low rt.
+ \ifx#4Q
+ \else\put(171,-103) {\line(0,-1) {100}} % bottom
+ \put(150,-283) {#4} \fi % subst.
+ \ifx#5D \put(36,191) {\line(5,3) {126}} \fi % NE double
+ \ifx#6D \put(180,267) {\line(5,-3) {126}} % SE double
+ \else\ifx#6Q
+ \else\put(342,200) {\line(5,-3) {128}} % 2. subst.
+ \put(475,100) {#6} \fi % top rt.
+ \fi
+ \ifx#7D \put(316,174) {\line(0,-1) {148}} \fi % S double
+ \ifx#8D \put(306,9) {\line(-5,-3) {126}} % SW double
+ \else\ifx#8Q
+ \else\put(342,0) {\line(5,3) {128}} % 2. subst.
+ \put(475,50) {#8} \fi % lower rt.
+ \fi
+ \ifx#9D \put(162,-67) {\line(-5,3) {126}}\fi % NW double
+ \end{picture} } % end fuseiv macro
+ \newcommand{\fuseup}[9] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a four-carbon fragment designed to %
+ % connect to another ring at two places. As the result, %
+ % a sixring is fused angularly to the original ring. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(-171,303) {\line(0,1) {200}} % N bond
+ \put(-171,503) {\line(5,3) {171}} % NE bond
+ \put(0,606) {\line(5,-3) {171}} % SE bond
+ \put(171,503) {\line(0,-1) {200}} % S bond
+ \put(171,303) {\line(-5,-3) {171}} % SW bond
+ \ifx#1Q
+ \else\put(-171,503) {\line(-5,3) {128}} % upper left
+ \put(-600,537) {\makebox(300,87)[r]{#1}}\fi % subst.
+ \ifx#2Q
+ \else\put(0,606) {\line(0,1) {100}} % top sub.
+ \put(-19,713) {#2} \fi
+ \ifx#3Q
+ \else\put(171,503) {\line(5,3) {128}} % top rt.
+ \put(304,553) {#3} \fi % subst.
+ \ifx#4Q
+ \else\put(171,303) {\line(5,-3) {128}} % lower rt.
+ \put(304,203) {#4} \fi % subst.
+ \ifx#5D\put(-145,329) {\line(0,1) {148}} \fi % N double
+ \ifx#6D\put(-135,494) {\line(5,3) {126}} \fi % NE double
+ \ifx#7D\put(9,570) {\line(5,-3) {126}} \fi % SE double
+ \ifx#8D\put(145,477) {\line(0,-1) {148}} \fi % S double
+ \ifx#9D\put(135,312) {\line(-5,-3) {126}} \fi % SW double
+ \end{picture} } % end fuseup macro
+ \newcommand{\fuseiii}[6] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a three-carbon fragment designed to %
+ % be connected to another ring at two places. As the %
+ % result, a fivering is fused linearly to the original %
+ % ring system. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(0,200) {\line(1,0) {342}} % E bond
+ \put(342,200) {\line(0,-1) {200}} % S bond
+ \put(342,0) {\line(-5,-3) {171}} % SW bond
+ \put(171,-103) {\line(-5,3) {171}} % NW bond
+ \ifx#1Q
+ \else\put(342,200) {\line(5,3) {128}} % upper rt.
+ \put(475,250) {#1} \fi % subst.
+ \ifx#2Q
+ \else\put(342,0) {\line(5,-3) {128}} % lower rt.
+ \put(475,-100) {#2} \fi % subst.
+ \ifx#3Q
+ \else\put(171,-103) {\line(0,-1) {100}} % bottom
+ \put(150,-283) {#3} \fi % subst.
+ \ifx#4Q
+ \else\put(342,200) {\line(5,-3) {128}} % 2. upper
+ \put(475,100) {#4} \fi % rt. sub.
+ \ifx#5Q
+ \else\put(342,0) {\line(5,3) {128}} % 2. lower
+ \put(475,50) {#5} \fi % rt. sub.
+ \ifx#6D \put(316,174) {\line(0,-1) {148}} \fi % S double
+ \end{picture} } % end fuseiii macro
+ \newcommand{\cto}[3] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets an arrow for a chemical equation and %
+ % puts text above and below it. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \len=50 \multiply \len by #3 % calc. arrow
+ \advance \len by 120 % length
+ \begin{picture}(\pw,\pht)(-\xi,-\yi)
+ \put(60,50) {\vector(1,0) {\len}} % draw arrow
+ \put(90,70) {\makebox(\len,70)[l]
+ {\scriptsize ${\rm #1}$}} % text on top
+ \put(90,-40) {\makebox(\len,70)[l]
+ {\scriptsize ${\rm #2}$}} % text below
+ \end{picture} }
+ \newcommand{\sbond}[1] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a horizontal single bond of user- %
+ % specified length. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \xbox=#1 \advance \xbox by 2
+ \hspace{1.5pt} \parbox{\xbox pt} {\rule{#1 pt}{0.4pt} }
+ \xbox=50 } % end sbond macro
+ \newcommand{\dbond}[2] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a horizontal double bond of user- %
+ % specified length. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \xbox=#1 \advance \xbox by 2
+ \hspace{1.5pt}\parbox{\xbox pt}
+ {\rule{#1 pt}{0.4pt}\vspace{-#2 pt}\\
+ \rule{#1 pt}{0.4pt} }
+ \xbox=50 } % end dbond macro
+ \newcommand{\tbond}[2] {
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % This macro typesets a horizontal triple bond of user- %
+ % specified length. %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \xbox=#1 \advance \xbox by 2
+ \hspace{1.5pt} \parbox{\xbox pt}
+ {\rule{#1 pt}{0.4pt}\vspace{-#2 pt}\\
+ \rule{#1 pt}{0.4pt}\vspace{-#2 pt}\\
+ \rule{#1 pt}{0.4pt} }
+ \xbox=50 } % end tbond macro
diff --git a/macros/latex209/contrib/chemtex/readme b/macros/latex209/contrib/chemtex/readme
new file mode 100644
index 0000000000..5f4d692588
--- /dev/null
+++ b/macros/latex209/contrib/chemtex/readme
@@ -0,0 +1,44 @@
+INSTRUCTIONS FOR THE USE OF THE CHEMICAL STRUCTURE TEX MACROS
+AND THE TEX SOURCE FILES WITH DOCUMENTATION:
+
+File macros.tex contains all the macros. The other files are also TeX
+source files and contain instructions and other useful information.
+The files called chap*.tex are chapters from my thesis. Files
+appdb.tex and appdc.tex contain information on numeric values of
+coordinates in the structure diagrams and on slopes possible in LaTeX,
+respectively.
+
+To run a file like chap5.tex through TeX/LaTeX, you first have to look
+at the \input statements at the beginning of the files and make sure
+that these files are in your directory. The easiest way to include
+ALL macros would be a statement \input {macros.tex}. Since I could
+not do that on our system because of TeX memory limitations, I had to
+put individual macros (or groups of macros) into separate files and
+use statements such as \input{purine.tex} where file purine.tex
+contains the macro (\newcommand) called purine. Separate files such
+as purine.tex are not part of the files sent to you now; you would
+have to cut them out of macros.tex if necessary.
+
+The macros called initial and reinit are always needed when the
+chemical structure macros are used.
+
+Author:
+
+Roswitha Haas
+EMCT Information Program
+Oak Ridge National Laboratory
+P.O. Box 2008
+Oak Ridge, TN 37831-6050
+
+
+Reference:
+
+@ARTICLE (
+ AUTHOR = "Roswitha T. Haas and Kevin C. O'Kane",
+ TITLE = "Typesetting Chemical Structure Formulas with the Text Formatter
+ \TeX/\LaTeX",
+ JOURNAL = "Computers and Chemistry",
+ YEAR = "1987",
+ VOLUME = "11",
+ NUMBER = "4",
+ PAGES = "251--271" )
diff --git a/macros/latex209/contrib/citesidx/README b/macros/latex209/contrib/citesidx/README
new file mode 100644
index 0000000000..c913384f82
--- /dev/null
+++ b/macros/latex209/contrib/citesidx/README
@@ -0,0 +1,51 @@
+CITESIDX
+
+(Based on fancycites.sty and windex.tex)
+Author: Frank Buchholz, Dortmund, Germany, Dec. 1992
+email: buchholz@lusty.informatik.uni-dortmund.de
+
+Main purpose:
+ Add reference-page-list to bibliography-items.
+ This is done by using the index-facility.
+
+ Am Ende der Literaturangaben wird jeweils eine Liste der Seiten
+ angef"ugt, auf denen zitiert wird. Diese Liste wird, ebenso wie der
+ Index, mit dem Programm "makeindex" erstellt. Daf"ur ben"otigt
+ "makeindex" die Datei "citesidx.isty".
+
+Files:
+ README This file
+ CITESIDX.STY Style-File used by LaTeX
+ CITESIDX.ISTY Style-file used by 'makeindex'. Every char-group
+ ( A, B, C, ... ) is started with a header.
+ If your makeindex-programm doesn't understand this,
+ use the following file instead.
+ CITESIDX1.ISTY Style-file used by 'makeindex'
+
+Documentation:
+ see CITESIDX.STY
+
+Usage:
+ latex <file>
+ bibtex <file> % if neccesary
+ makeindex -s makeindex.isty <file>
+ latex <file>
+ latex <file>
+
+Why use file CITESIDX.ISTY?
+ The program "makeindex" has to write entries like the following
+ \item \indexciteitem{<key>}{<pageno-list>}
+ into the *.ind-file if it recognizes entries like
+ \indexentry{<key>@\indexciteitem{<key>}}{<pageno>}
+ in the *.idx-file. The latter entries are produced by the
+ \cites-commands.
+
+ Notice that the pageno-list is enclosed in brackets, because
+ the command \indexciteitem takes two parameters.
+
+Hint:
+ If you change file "makeindex.isty" to get an other index-layout or
+ if you like to use an other program than "makeindex" to produce the
+ file <name>.ind, take care that the page-list have to be enclosed in
+ brackets.
+
diff --git a/macros/latex209/contrib/citesidx/citesidx.isty b/macros/latex209/contrib/citesidx/citesidx.isty
new file mode 100644
index 0000000000..f98a26f7c6
--- /dev/null
+++ b/macros/latex209/contrib/citesidx/citesidx.isty
@@ -0,0 +1,22 @@
+
+preamble "\\begin{theindex}\n"
+
+group_skip "}\n\n \\indexspace\n"
+
+lethead_prefix " \\fbox{\\bf "
+lethead_suffix "}\n \\indexspace\n{"
+lethead_flag 1
+
+item_0 "}\n \\item "
+item_1 "}\n \\subitem "
+item_01 "}\n \\subitem "
+item_2 "}\n \\subsubitem "
+item_12 "}\n \\subsubitem "
+item_x2 "}\n \\subsubitem "
+
+delim_0 "{, "
+delim_1 "{, "
+delim_2 "{, "
+
+postamble "}\n\n\\end{theindex}\n"
+
diff --git a/macros/latex209/contrib/citesidx/citesidx.sty b/macros/latex209/contrib/citesidx/citesidx.sty
new file mode 100644
index 0000000000..fc19847f5e
--- /dev/null
+++ b/macros/latex209/contrib/citesidx/citesidx.sty
@@ -0,0 +1,260 @@
+% File: CITESIDX.STY
+% (Based on fancycites.sty and windex.tex)
+% Author: Frank Buchholz, Dortmund, Germany, Dez. 1992
+%
+% Main purpose:
+% Add reference-page-list to bibliography-items.
+% This is done by using the index-facility.
+%
+% USAGE:
+% Switch index-commands on:
+% \makeindex
+%
+% User selection:
+% Put indexed terms into the margin (not ready):
+% \indexmark{margin}
+% Mark indexed terms with a vertical rule:
+% \indexmark{rule}
+%
+% User selection:
+% Put references of cites into index
+% \indexstyle{citesinind}
+% Put references of cites into bibliography (default)
+% \indexstyle{citesinbib}
+%
+% Switch sorting of numeric keys on:
+% \sortcitekeys
+%
+% Put some text in front of bibliography
+% (Use '\\[\parskip]' instead of '\par'):
+% \bibintro{<Text>}
+%
+% Run LaTeX to create the <file>.idx
+% Run BiBTeX if neccesary.
+% Run 'makeindex -s citesidx.isty <file>' to create <file>.ind
+% Run LaTeX twice to get correct references (Maybe you need even more, if you
+% are using crossrefs in the bibliography.)
+
+\typeout{Document style option `citesidx' - Frank Buchholz, Dez. 1992}
+
+% REDEFINITION OF \@wrindex#1 TO CALL \@indexmark#1
+% see LATEX.TEX
+
+\def\@wrindex#1{%
+ \@indexmark{#1}%
+ \let\thepage\relax%
+ \edef\@tempa{\write\@indexfile{%
+ \string\indexentry{#1}{\thepage}}}%
+ \expandafter\endgroup\@tempa%
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+% REDEFINITION OF \@citex[#1]#2 TO FACILITATE REFERENCE BACKPOINTERS AND SORTING
+% see LATEX.TEX
+
+\def\@citex[#1]#2{%
+ \if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+ \@sortkeys{#2}% new
+ %\def\@citea{}%
+ \let\@citea\@empty
+ \@cite{\@for\@citeb:=#2\do{%
+ \indexcite{\@citeb}% new
+ \@citea\def\@citea{,\penalty\@m\ }%
+ \@ifundefined{b@\@aref{\@citeb}}{{\reset@font\bf ?}\@warning%
+ {Citation `\@aref{\@citeb}' on page \thepage \space undefined}}%
+ \hbox{\csname b@\@aref{\@citeb}\endcsname}}}%
+ {#1}}
+
+% REDEFINITION OF \enddocument TO DEFINE \windcite
+% see LATEX.TEX
+
+% \enddocument is the user's command for ending the manuscript file.
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+ \if@filesw \immediate\closeout\@mainaux
+ \def\global\@namedef##1##2{}%
+ \def\newlabel{\@testdef r}%
+ \def\windcite{\@testdef {bp}}% new
+ \def\bibcite{\@testdef b}
+ \@tempswafalse
+ \makeatletter
+ \input \jobname.aux
+ \if@tempswa \@warning{Label(s) may have changed. Rerun to get
+ cross-references right}\fi
+ \fi\endgroup\deadcycles\z@\@@end}
+
+% REDEFINITION OF \@idxitem#1#2
+% see ARTICLE.STY, REPORT.STY, BOOK.STY
+
+%\let\@orig@idxitem=\@idxitem
+%\def\@idxitem#1#2 \par{\@orig@idxitem#1{#2}}
+
+% DEFINITION OF \printindex
+% see MAKEIDX.STY
+
+\def\printindex{\@input{\jobname.ind}}
+
+%%% NEW COMMANDS
+
+% WARNING MESSAGE
+
+\def\@fcwarning#1{\typeout{CitesIdx Warning: #1.}}
+
+% MAKING BACKPOINTERS FROM REFERENCES TO WHERE CITED
+
+% not used ???
+%\def\@backcite#1{\@for\@citeb:=#1\do{\indexcite{\@citeb}}}
+
+% used by \@citex[#1]#2
+% used by \@backcite#1
+\def\indexcite#1{\index{\@ifundefined{b@#1}{#1}{\@nameuse{b@#1}}%
+ \string @\string\indexciteitem{#1}}}
+
+% used by \indexcite#1
+\def\indexciteitem#1#2{%
+ \auxout@citationpages{#1}{#2}%
+ \@indexciteitem{#1}{#2}}
+
+% used by \indexciteitem#1#2
+\def\auxout@citationpages#1#2{%
+ \if@filesw \immediate\write\@auxout{%
+ \string\windcite{#1}{\@stripcom#2\@nil}}\fi}
+
+% used by \auxout@citationpages#1#2
+\def\@stripcom, #1\@nil{#1}
+
+% Read References from aux-file
+\def\windcite#1#2{\global\@namedef{bp@#1}{#2}}
+
+% USER SELECTION OF INDEXSTYLE
+
+\def\indexstyle{\@ifstar{\@emptyindex}{\@selectindexstyle}}
+\def\@selectindexstyle#1{\@nameuse{is@#1}}
+
+% Select style: Cites in index
+\def\is@citesinind{%
+ \def\@indexciteitem##1{\refdescriptor{\@reflabel{##1}}}
+}
+
+% Select Style: Cites in bibliography
+\def\is@citesinbib{%
+ \def\@indexciteitem##1##2{}% Ignore
+ % see LATEX.TEX
+ \def\bibitem{\@ifnextchar[{\@@lbibitem}{\@@bibitem}}%
+}
+
+% Default style
+\is@citesinbib
+
+% used by \is@citesinbib
+\def\@@lbibitem[#1]#2#3\par{\@lbibitem[#1]{#2}#3\bibitempages{\@refpages{#2}}}
+\def\@@bibitem#1#2\par{\@bibitem{#1}#2\bibitempages{\@refpages{#1}}}
+
+% used by \@@lbibitem[#1]#2#3\par
+\def\@refpages#1{%
+ \@ifundefined{bp@#1}
+ {{\bf -}\@fcwarning{Citations to #1 not indexed}}
+ {\@nameuse{bp@#1}}}
+
+% used by \@@lbibitem[#1]#2#3\par
+% used by \@@bibitem#1#2\par
+\def\bibitempages#1{\newblock [#1]}
+
+% used by \bibitempages#1
+% see ARTICLE.STY, REPORT.STY, BOOK.STY
+\def\newblock{\hskip .11em plus .33em minus -.07em}%
+
+% used by \is@citesinind
+\def\refdescriptor#1{Referenz [#1]}%
+\def\@reflabel#1{\@ifundefined{b@#1}{{\bf ?}}{\@nameuse{b@#1}}}
+
+% MAKING CITATION KEYS PRINT IN SORTED ORDER
+
+\def\@edefname#1{\expandafter\edef\csname #1\endcsname}
+
+\def\@aref#1{\@nameuse{array@#1}}
+\def\@aset#1#2{\@edefname{array@#1}{#2}}
+
+\def\@refnum#1{\@ifundefined {b@\@aref{#1}}{0}{\@nameuse{b@\@aref{#1}}}}
+\def\@swap#1#2{\edef\@swaptemp{\@aref{#1}}%
+\@aset{#1}{\@aref{#2}}\@aset{#2}{\@swaptemp}}
+
+\def\@carcom#1,#2\@nil{#1}
+\def\@cdrcom#1,#2\@nil{#2}
+
+\def\@sortkeys#1{\@for\@lpctri:=#1\do {\@aset{\@lpctri}{\@lpctri}}}
+
+\newif\ifmorelist
+% \loop macro used instead of \@for for inner loop of \@sortkeys in order to
+% avoid exceeding parameter stack size.
+% Note bizarre variation on bubble sort. The loop counter on both inner and
+% outer loop goes through entire array. Since the sort would be correct if
+% the inner loop counter would stop when it reaches the outer loop counter,
+% the sort here is correct. When the inner loop counter passes the outer
+% counter and does some perverse swaps, it does not change the invariant that
+% the portion of the array up to the outer loop counter is sorted.
+
+% Switch sorting of numeric keys on
+\def\sortcitekeys{%
+ \def\@sortkeys##1{%
+ \@for\@lpctri:=##1\do {\@aset{\@lpctri}{\@lpctri}}%
+ \@for\@lpctri:=##1\do {%
+ \edef\@rest{##1,\empty,}%
+ \morelisttrue
+ \loop
+ \edef\@lpctrj{\expandafter\@carcom\@rest\@nil}%
+ \edef\@rest{\expandafter\@cdrcom\@rest\@nil}%
+ \ifx\@lpctrj\empty\morelistfalse\else\fi
+ \ifmorelist
+ \ifnum\@refnum{\@lpctrj}>\@refnum{\@lpctri}%
+ \@swap{\@lpctri}{\@lpctrj}\else\fi
+ \repeat}
+}}
+
+% PUT SOME TEXT IN FRONT OF THE BIBLIOGRAPHY
+
+\def\bibintro#1{%
+ \let\@origthebib=\thebibliography
+ \let\@origlist=\list
+ \def\thebibliography{\def\list{#1\par\bigskip\@origlist}\@origthebib}%
+}
+
+% USER SELECTION: MARK INDEXED TERMS
+
+\def\indexmark{\@ifstar{\@emptyindex}{\@selectindexmark}}
+\def\@selectindexmark#1{\@nameuse{is@index#1}}
+
+% Put indexed terms into the margin:
+\def\is@indexmargin{%
+ \def\@indexmark##1{\marginpar{\fbox{\parbox[t]{\marginparwidth}{\tiny ##1}}}}
+}
+
+% Mark indexed terms with a vertical rule:
+\def\is@indexrule{%
+ \def\@indexmark##1{\unskip\hbox{\vrule depth0pt width1pt height 2ex}}
+}
+
+% no default
+\def\@indexmark#1{}
+
+% Make all characters ``other'' so that par box doesn't give errors
+% used by \is@indexmargin
+\def\@makeallother{%
+\@makeother a\@makeother n\@makeother A\@makeother N%
+\@makeother b\@makeother o\@makeother B\@makeother O%
+\@makeother c\@makeother p\@makeother C\@makeother P%
+\@makeother d\@makeother q\@makeother D\@makeother Q%
+\@makeother e\@makeother r\@makeother E\@makeother R%
+\@makeother f\@makeother s\@makeother F\@makeother S%
+\@makeother g\@makeother t\@makeother G\@makeother T%
+\@makeother h\@makeother u\@makeother H\@makeother U%
+\@makeother i\@makeother v\@makeother I\@makeother V%
+\@makeother j\@makeother w\@makeother J\@makeother W%
+\@makeother k\@makeother x\@makeother K\@makeother X%
+\@makeother l\@makeother y\@makeother L\@makeother Y%
+\@makeother m\@makeother z\@makeother M\@makeother Z%
+\@makeother /\@makeother !\@makeother <\@makeother >%
+\@makeother \$\@makeother [\@makeother ]%
+%\@makeother\
+\@makeother\\\@makeother\$\@makeother\&%
+\@makeother\#\@makeother\^\@makeother\^^K\@makeother\_\@makeother\^^A%
+\@makeother\%\@makeother\~}
+
diff --git a/macros/latex209/contrib/citesidx/citesidx1.isty b/macros/latex209/contrib/citesidx/citesidx1.isty
new file mode 100644
index 0000000000..44b96c8ca3
--- /dev/null
+++ b/macros/latex209/contrib/citesidx/citesidx1.isty
@@ -0,0 +1,22 @@
+
+preamble "\\begin{theindex}\n{"
+
+group_skip "}\n\n \\indexspace\n{"
+
+
+
+
+
+item_0 "}\n \\item "
+item_1 "}\n \\subitem "
+item_01 "}\n \\subitem "
+item_2 "}\n \\subsubitem "
+item_12 "}\n \\subsubitem "
+item_x2 "}\n \\subsubitem "
+
+delim_0 "{, "
+delim_1 "{, "
+delim_2 "{, "
+
+postamble "}\n\n\\end{theindex}\n"
+
diff --git a/macros/latex209/contrib/cmcyralt/cmcyr.sty b/macros/latex209/contrib/cmcyralt/cmcyr.sty
new file mode 100644
index 0000000000..20fef0ef4c
--- /dev/null
+++ b/macros/latex209/contrib/cmcyralt/cmcyr.sty
@@ -0,0 +1,324 @@
+%%
+%%
+\def\fileversion{v1.0}
+\def\filedate{93/05/7}
+
+\typeout{Style Option: `cmcyr'
+ \fileversion\space <\filedate> (A. Harin)}
+\@ifundefined{selectfont}
+ {\@latexerr{`cmcyr' style option could only be used
+ with the new font selection scheme}\@eha
+ \endinput}{}
+
+\new@fontshape{cmcyr}{m}{n}{%
+ <5>uczr5%
+ <6>uczr6%
+ <7>uczr7%
+ <8>uczr8%
+ <9>uczr9%
+ <10>uczr10%
+ <11>uczr10 at10.95pt%
+ <12>uczr12%
+ <14>uczr12 at14.4pt%
+ <17>uczr17%
+ <20>uczr17 at20.736pt%
+ <25>uczr17 at24.8832pt}{}
+\extra@def{cmcyr}{}{}
+\new@fontshape{cmcyr}{m}{sl}{%
+ <5>uczro8 at5pt%
+ <6>uczro8 at6pt%
+ <7>uczro8 at7pt%
+ <8>uczro8%
+ <9>uczro9%
+ <10>uczro10%
+ <11>uczro10 at10.95pt%
+ <12>uczro12%
+ <14>uczro12 at14.4pt%
+ <17>uczro12 at17.28pt%
+ <20>uczro12 at20.74pt%
+ <25>uczro12 at24.88pt%
+ }{}
+
+\new@fontshape{cmcyr}{m}{it}{%
+ <5>uczri7 at5pt%
+ <6>uczri7 at6pt%
+ <7>uczri7%
+ <8>uczri8%
+ <9>uczri9%
+ <10>uczri10%
+ <11>uczri10 at10.95pt%
+ <12>uczri12%
+ <14>uczri12 at14.4pt%
+ <17>uczri12 at17.28pt%
+ <20>uczri12 at20.74pt%
+ <25>uczri12 at24.88pt%
+ }{}
+
+\new@fontshape{cmcyr}{m}{sc}{%
+ <5>uczrc8 at5pt%
+ <6>uczrc8 at6pt%
+ <7>uczrc8 at7pt%
+ <8>uczrc8%
+ <9>uczrc9%
+ <10>uczrc10%
+ <11>uczrc10 at10.95pt%
+ <12>uczrc10 at12pt%
+ <14>uczrc10 at14.4pt%
+ <17>uczrc10 at17.28pt%
+ <20>uczrc10 at20.74pt%
+ <25>uczrc10 at24.88pt%
+ }{}
+%%
+%% Warning: please note that the upright shape below is used
+%% for the \pounds symbol of LaTeX. So this font
+%% definition shouldn't be removed.
+%%
+% If cmu below 10pt is not available we substitute
+% cmti as far as possible (sizes 7, 8, 9). This is
+% done because cmu is used mainly for producing the
+% the \pound symbol and it is better to get a slanted
+% (or bigger) pound then to get a $ sign in such situations.
+%%
+\new@fontshape{cmcyr}{m}{u}{%
+ <5>uczru10 at5pt%
+ <6>uczru10 at6pt%
+ <7>uczru10 at7pt%
+ <8>uczru10 at8pt%
+ <9>uczru10 at9pt%
+ <10>uczru10%
+ <11>uczru10 at10.95pt%
+ <12>uczru10 at12pt%
+ <14>uczru10 at14.4pt%
+ <17>uczru10 at17.28pt%
+ <20>uczru10 at20.74pt%
+ <25>uczru10 at24.88pt%
+ }{}
+
+%%%%%%%% bold series
+
+\new@fontshape{cmcyr}{b}{n}{%
+ <5>uczb10 at5pt%
+ <6>uczb10 at6pt%
+ <7>uczb10 at7pt%
+ <8>uczb10 at8pt%
+ <9>uczb10 at9pt%
+ <10>uczb10%
+ <11>uczb10 at10.95pt%
+ <12>uczb10 at12pt%
+ <14>uczb10 at14.4pt%
+ <17>uczb10 at17.28pt%
+ <20>uczb10 at20.736pt%
+ <25>uczb10 at24.8832pt%
+ }{}
+
+%%%%%%%%% bold extended series
+
+\new@fontshape{cmcyr}{bx}{n}{%
+ <5>uczbx5%
+ <6>uczbx6%
+ <7>uczbx7%
+ <8>uczbx8%
+ <9>uczbx9%
+ <10>uczbx10%
+ <11>uczbx10 at10.95pt%
+ <12>uczbx12%
+ <14>uczbx12 at14.4pt%
+ <17>uczbx12 at17.28pt%
+ <20>uczbx12 at20.74pt%
+ <25>uczbx12 at24.88pt%
+ }{}
+
+\new@fontshape{cmcyr}{bx}{sl}{%
+ <5>uczbox10 at5pt%
+ <6>uczbox10 at6pt%
+ <7>uczbox10 at7pt%
+ <8>uczbox10 at8pt%
+ <9>uczbox10 at9pt%
+ <10>uczbox10%
+ <11>uczbox10 at10.95pt%
+ <12>uczbox10 at12pt%
+ <14>uczbox10 at14.4pt%
+ <17>uczbox10 at17.28pt%
+ <20>uczbox10 at20.74pt%
+ <25>uczbox10 at24.88pt%
+ }{}
+
+\new@fontshape{cmcyr}{bx}{it}{%
+ <5>uczbix10 at5pt%
+ <6>uczbix10 at6pt%
+ <7>uczbix10 at7pt%
+ <8>uczbix10 at8pt%
+ <9>uczbix10 at9pt%
+ <10>uczbix10%
+ <11>uczbix10 at10.95pt%
+ <12>uczbix10 at12pt%
+ <14>uczbix10 at14.4pt%
+ <17>uczbix10 at17.28pt%
+ <20>uczbix10 at20.74pt%
+ <25>uczbix10 at24.88pt%
+ }{}
+
+%% Again this is necessary for a correct \pound symbol in the cmr fonts
+%% Hopefully the dc/ec font layout will take over soon.
+%%
+
+\subst@fontshape{cmcyr}{bx}{u}{cmcyr}{m}{u}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Sans serif font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{cmcss}{m}{n}{%
+ <5>uczrs8 at5pt%
+ <6>uczrs8 at6pt%
+ <7>uczrs8 at7pt%
+ <8>uczrs8%
+ <9>uczrs9%
+ <10>uczrs10%
+ <11>uczrs10 at10.95pt%
+ <12>uczrs12%
+ <14>uczrs12 at14.4pt%
+ <17>uczrs17%
+ <20>uczrs17 at20.74pt%
+ <25>uczrs17 at24.88pt%
+ }{}
+
+
+\subst@fontshape{cmcss}{m}{it}{cmcss}{m}{sl}
+
+\new@fontshape{cmcss}{m}{sl}{%
+ <5>uczris8 at5pt%
+ <6>uczris8 at6pt%
+ <7>uczris8 at7pt%
+ <8>uczris8%
+ <9>uczris9%
+ <10>uczris10%
+ <11>uczris10 at10.95pt%
+ <12>uczris12%
+ <14>uczris12 at14.4pt%
+ <17>uczris17%
+ <20>uczris17 at20.74pt%
+ <25>uczris17 at24.88pt%
+ }{}
+
+%%%%%%% Font/shape undefined, therefore substituted
+
+\subst@fontshape{cmcss}{m}{sc}{cmcyr}{m}{sc}
+
+%%%%%%%% semibold condensed series
+
+\new@fontshape{cmcss}{sbc}{n}{%
+ <5>uczdsc10 at5pt%
+ <6>uczdsc10 at6pt%
+ <7>uczdsc10 at7pt%
+ <8>uczdsc10 at8pt%
+ <9>uczdsc10 at9pt%
+ <10>uczdsc10%
+ <11>uczdsc10 at10.95pt%
+ <12>uczdsc10 at12pt%
+ <14>uczdsc10 at14.4pt%
+ <17>uczdsc10 at17.28pt%
+ <20>uczdsc10 at20.74pt%
+ <25>uczdsc10 at24.88pt%
+ }{}
+
+%%%%%%%%% bold extended series
+
+\new@fontshape{cmcss}{bx}{n}{%
+ <5>uczbsx10 at5pt%
+ <6>uczbsx10 at6pt%
+ <7>uczbsx10 at7pt%
+ <8>uczbsx10 at8pt%
+ <9>uczbsx10 at9pt%
+ <10>uczbsx10%
+ <11>uczbsx10 at10.95pt%
+ <12>uczbsx10 at12pt%
+ <14>uczbsx10 at14.4pt%
+ <17>uczbsx10 at17.28pt%
+ <20>uczbsx10 at20.74pt%
+ <25>uczbsx10 at24.88pt%
+ }{}
+
+\extra@def{cmcss}{}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Typewriter font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{cmctt}{m}{n}{%
+ <5>uczrt8 at5pt%
+ <6>uczrt8 at6pt%
+ <7>uczrt8 at7pt%
+ <8>uczrt8%
+ <9>uczrt9%
+ <10>uczrt10%
+ <11>uczrt10 at10.95pt%
+ <12>uczrt12%
+ <14>uczrt12 at14.4pt%
+ <17>uczrt12 at17.28pt%
+ <20>uczrt12 at20.74pt%
+ <25>uczrt12 at24.88pt%
+ }{}
+
+\new@fontshape{cmctt}{m}{it}{%
+ <5>uczrit10 at5pt%
+ <6>uczrit10 at6pt%
+ <7>uczrit10 at7pt%
+ <8>uczrit10 at8pt%
+ <9>uczrit10 at9pt%
+ <10>uczrit10%
+ <11>uczrit10 at10.95pt%
+ <12>uczrit10 at12pt%
+ <14>uczrit10 at14.4pt%
+ <17>uczrit10 at17.28pt%
+ <20>uczrit10 at20.74pt%
+ <25>uczrit10 at24.88pt%
+ }{}
+
+\new@fontshape{cmctt}{m}{sl}{%
+ <5>uczrot10 at5pt%
+ <6>uczrot10 at6pt%
+ <7>uczrot10 at7pt%
+ <8>uczrot10 at8pt%
+ <9>uczrot10 at9pt%
+ <10>uczrot10%
+ <11>uczrot10 at10.95pt%
+ <12>uczrot10 at12pt%
+ <14>uczrot10 at14.4pt%
+ <17>uczrot10 at17.28pt%
+ <20>uczrot10 at20.74pt%
+ <25>uczrot10 at24.88pt%
+ }{}
+
+\new@fontshape{cmctt}{m}{sc}{%
+ <5>uczrct10 at5pt%
+ <6>uczrct10 at6pt%
+ <7>uczrct10 at7pt%
+ <8>uczrct10 at8pt%
+ <9>uczrct10 at9pt%
+ <10>uczrct10%
+ <11>uczrct10 at10.95pt%
+ <12>uczrct10 at12pt%
+ <14>uczrct10 at14.4pt%
+ <17>uczrct10 at17.28pt%
+ <20>uczrct10 at20.74pt%
+ <25>uczrct10 at24.88pt%
+ }{}
+
+\extra@def{cmctt}{\hyphenchar #1\m@ne}{}
+
+\renewcommand{\rmdefault}{cmcyr}
+\renewcommand{\sfdefault}{cmcss}
+\renewcommand{\ttdefault}{cmctt}
+\let\@dqtmp\"
+\def\"#1{{\def\@tmpzzz{#1}\def\@tmpye{¥}\def\@tmplt{<}\def\@tmpgt{>}%
+ \if\@tmpzzz\@tmpye\char'361%
+ \else\if\@tmpzzz\@tmplt\char'372%
+ \else\if\@tmpzzz\@tmpgt\char'373%
+ \else\@dqtmp#1\fi\fi\fi%
+ \let\@tmpzzz\relax\let\@tmpye\relax\let\@tmplt\relax\let\@tmpgt\relax}}
+\def\No{{\char'374}}
diff --git a/macros/latex209/contrib/cmcyralt/lhyphen.rus b/macros/latex209/contrib/cmcyralt/lhyphen.rus
new file mode 100644
index 0000000000..ff03ce1bf1
--- /dev/null
+++ b/macros/latex209/contrib/cmcyralt/lhyphen.rus
@@ -0,0 +1,24 @@
+% File LHYPHEN - Created 04 November 1991.
+% Copyright (C) 1991 by Leslie Lamport
+%
+
+\message{Loading hyphenation patterns for US english.}
+
+% PREPARING A FOREIGN LANGUAGE VERSION:
+%
+% This file loads hyphenation patterns for US english.
+% If you want to load additional or other hyphenation patterns,
+% you have to change this file, which is hereby allowed explicitly,
+% under the restriction that if you do so, you MUST also change the
+% message above.
+%
+
+\language=0
+\lefthyphenmin=2 \righthyphenmin=3 % disallow x- or -xx breaks
+\input hyphen
+
+\message{Loading hyphenation patterns for Russian}
+
+\input rhyphen.tex
+
+\endinput
diff --git a/macros/latex209/contrib/cmcyralt/readme b/macros/latex209/contrib/cmcyralt/readme
new file mode 100644
index 0000000000..5b6357d88e
--- /dev/null
+++ b/macros/latex209/contrib/cmcyralt/readme
@@ -0,0 +1,60 @@
+ LaTeX 2.09 NFSS1 style for Russian fonts in alternative encoding.
+
+The alternative encoding is de-facto standard on MS-DOS PC
+computers in Russia. In this encoding first half of code
+table (0-127) coincides with standard ASCII and cyrillic
+characters are located in second part of the table (128-255).
+Usually some simple screen and keyboard driver is used in order
+to type cyrillic characters.
+
+This directory includes:
+
+readme - this file
+cmcyr.sty - main style file
+lhyphen.rus rhyphen.tex - support of Russian hyphenation
+rusfonts.tex - simple test
+
+In order to use cmcyr style you need Russian fonts in
+alternative encoding. These fonts is available from CTAN in
+/fonts/cmcyralt
+Actually it is composite virtual fonts which reproduce
+alternative encoding by mapping first half of ASCII table to
+standard TeX's Computer Modern font and second part to cmcyr fonts.
+
+The cmcyr style replaces basic LaTeX fonts by these virtual fonts.
+Just place cmcyr.sty files into LaTeX input directory and say
+
+\documantstyle[cmcyr,... ]{...}
+
+in the preamble of your document. Now you can type any English
+and Russian text (in alternative encoding) in any order.
+No any special font switching commands is required.
+
+Since alternative encoding uses codes higher than 127 for
+Russian characters you need TeX which understand 8-bit input,
+and drivers which understand virtual fonts.
+The best choice for MS-DOS PC is emTeX and its dvidrv drivers
+(/systems/msdos/emtex directory on CTAN).
+
+If you want to have correct hyphenation for Russian you
+need to regenerate LaTeX format file. Put lhyphen.rus
+and rhyphen.tex in LaTeX input directory.
+Copy files (it is a good idea to save old ones):
+lhyphen.rus -> lhyphen.tex
+lfonts.new -> lfonts.tex
+preload.ori -> preload.tex
+basefont.tex -> xxxlfont.sty
+fontdef.max (or other option of fontdef.*) -> fontdef.tex
+Call iniTeX on lplain. In particular, for emTeX you have to say:
+
+> tex /i /o /8 /mt65500 lplain \dump
+
+This produces format with both English and Russian hyphenation
+tables. Notice, that generated format must be invoked with the
+same /mt65500 switch
+
+> tex /mt65500 &lplain yourdoc.tex
+
+Uploaded by Vadim V. Zhytnikov (vvzhy@phy.ncu.edu.tw)
+on the behalf of Alexander Harin (harin@lourie.und.ac.za)
+
diff --git a/macros/latex209/contrib/cmcyralt/rhyphen.tex b/macros/latex209/contrib/cmcyralt/rhyphen.tex
new file mode 120000
index 0000000000..9710d44162
--- /dev/null
+++ b/macros/latex209/contrib/cmcyralt/rhyphen.tex
@@ -0,0 +1 @@
+../../../latex/contrib/cmcyralt/rhyphen.tex \ No newline at end of file
diff --git a/macros/latex209/contrib/cmcyralt/rusfonts.tex b/macros/latex209/contrib/cmcyralt/rusfonts.tex
new file mode 100644
index 0000000000..205003282c
--- /dev/null
+++ b/macros/latex209/contrib/cmcyralt/rusfonts.tex
@@ -0,0 +1,49 @@
+\documentstyle[12pt,cmcyr]{article}
+
+\begin{document}
+
+{ One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\it One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\sl One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\sc One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\bf One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\bf\it One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\bf\sl One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+\bigskip
+
+{\sf One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\sf\sl One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\sf\bf One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+\bigskip
+
+{\tt One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\tt\sl One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\tt\it One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+{\tt\sc One two "three"
+\dots\ \"<  § ¤¢  âਠ\dots \">\ \No\ e\"¥}
+
+\end{document}
diff --git a/macros/latex209/contrib/code/code.sty b/macros/latex209/contrib/code/code.sty
new file mode 100644
index 0000000000..8b96a5386d
--- /dev/null
+++ b/macros/latex209/contrib/code/code.sty
@@ -0,0 +1,65 @@
+%%%%
+%% code.sty : LaTex environment for verbatim program code displays
+%%
+%% George Ferguson, ferguson@cs.rochester.edu, 3 Jul 1991.
+%%
+%% Requires Rainer Sch\"opf's (SCHOEPF@SC.ZIB-Berlin.DE) verbatim
+%% style option. Based on a suggestion by Bernd Raichle
+%% (raichle@azu.informatik.uni-stuttgart.de).
+%%
+%% Uses LaTeX iteration macro @tfor to process arguments to code
+%% environment.
+%%
+\typeout{Style-option: `code' (George Ferguson)}
+\input{/u/ferguson/lib/tex/verbatim.sty}
+
+%%
+%% Miscellaneous stuff so we could easily `let' things.
+%%
+\def\gf@flushleft#1{\noindent#1\hfill}
+\def\gf@flushright#1{\hfill\relax#1}
+\def\gf@indented#1{\par\hskip\parskip#1\hfill}
+\def\gf@noop#1{#1}
+
+%%
+%% The code environment formats the text between \begin{code}{opts}
+%% \end{code} in verbatim mode. The box containing the code is only as
+%% wide as its longest line. The `opts' are interpreted as follows:
+%% c : center the block of code
+%% l : make the block of code flush to the left margin
+%% r : make the block of code flush to the right margin
+%% i : indent the block of code (by \parskip) from the left
+%% f : draw a frame around the block of code
+%% t : make the resulting box have its baseline at the top
+%% b : make the resulting box have its baseline at the bottom
+%% Any combination and order of options is acceptable, but only the last
+%% of {c,l,r,i} and {t,b} will have horizontal and vertical effect,
+%% respectively.
+%% The default is to produce a flush-left, bottom-aligned block of code.
+%%
+\newenvironment{code}[1]{%
+ % redefine `processline' to produce only a line as wide
+ % as the natural width of the line
+ \def\verbatim@processline{%
+ {\setbox0=\hbox{\the\verbatim@line}%
+ \hsize=\wd0 \the\verbatim@line\par}}%
+ % set finishing ``mode''
+ \global\let\gf@hadjust\hbox
+ \global\let\gf@vadjust\vbox
+ \global\let\gf@frame\gf@noop
+ \@tfor \gf@char :=#1\do
+ {\if\gf@char c\global\let\gf@hadjust\centerline\fi
+ \if\gf@char l\global\let\gf@hadjust\gf@flushleft\fi
+ \if\gf@char r\global\let\gf@hadjust\gf@flushright\fi
+ \if\gf@char i\global\let\gf@hadjust\gf@indented\fi
+ \if\gf@char t\global\let\gf@vadjust\vtop\fi
+ \if\gf@char b\global\let\gf@vadjust\vbox\fi
+ \if\gf@char f\global\let\gf@frame\frame\fi
+ }
+ % save the verbatim code in a box
+ \setbox0=\gf@vadjust\bgroup \verbatim
+}{%
+ \endverbatim
+ \egroup % close the box and `box' it appropriately
+ \gf@hadjust{\gf@frame{\box0}}
+}
diff --git a/macros/latex209/contrib/code/foo.tex b/macros/latex209/contrib/code/foo.tex
new file mode 100644
index 0000000000..1074e286c9
--- /dev/null
+++ b/macros/latex209/contrib/code/foo.tex
@@ -0,0 +1,100 @@
+\documentstyle[11pt,code]{article}
+\begin{document}
+
+Here is the first paragraphs. I'll type some more just so we have more
+than one line. At least I hope it will be enough. Here's some verbatim
+text:
+
+\begin{code}{}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\noindent
+Centered:
+
+\begin{code}{c}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\noindent
+Left-adjusted:
+
+\begin{code}{l}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\noindent
+Right-adjusted:
+
+\begin{code}{r}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\noindent
+Indented:
+
+\begin{code}{i}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\pagebreak
+\noindent
+Framed:
+
+\begin{code}{f}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\noindent
+Centered, framed:
+
+\begin{code}{cf}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\noindent
+Left-adjusted, framed:
+
+\begin{code}{lf}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\noindent
+Right-adjusted, framed:
+
+\begin{code}{rf}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\noindent
+Indented, framed:
+
+\begin{code}{if}
+foobar.
+dhe#%^@&#(*#&^*(@)#.
+barfoo.
+\end{code}
+
+\noindent
+There. Now here's some more text just for comparison.
+
+\end{document}
+
diff --git a/macros/latex209/contrib/colortex/README b/macros/latex209/contrib/colortex/README
new file mode 100644
index 0000000000..ffe755c9ba
--- /dev/null
+++ b/macros/latex209/contrib/colortex/README
@@ -0,0 +1,9 @@
+This is ColorRGB.TeX (Release 3.3) a new macro set to handle color
+in TeX documents:
+ -color300dpi.ps:user guide in Postscript format.
+ -color600dpi.ps:user guide in Postscript format high resolution.
+ -color.tex:user guide source (written in french).
+ -colorrgb.tex:set of color macros.
+ -colorrap.sty, mancolor.sty:style TeX files.
+
+have Fun........
diff --git a/macros/latex209/contrib/colortex/color.tex b/macros/latex209/contrib/colortex/color.tex
new file mode 100644
index 0000000000..c45137817f
--- /dev/null
+++ b/macros/latex209/contrib/colortex/color.tex
@@ -0,0 +1,1818 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Ce fichier contient la definition de l'environnement LaTeX\
+% utilise' ainsi que les appels des fichiers a inclure pour
+% l'e'laboration du guide d'utilisation des macros colorrgb.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\font\myl=manfnt
+\def\panneau{{\myl\char"7F}}
+\def\lettrepanneau{\noindent\hangindent=8mm\hangafter=-2
+\hskip-8mm\smash{\raise-2mm\hbox to 8mm{\panneau\hfill}}\ignorespaces}
+
+ \input{colorrgb.tex}
+ \documentstyle[12pt,mancolor]{colorrap}
+
+% format standard, centre'
+ \setlength{\oddsidemargin}{1mm}
+ \setlength{\evensidemargin}{1mm}
+ \setlength{\textwidth}{160mm}
+ \setlength{\textheight}{230mm}
+ \setlength{\topmargin}{-18mm}
+
+% 1 mm entre chaque paragraphe
+ \setlength{\parskip}{1mm}
+ \pagestyle{headings}
+\def\ggf{\raise.4ex\hbox{%
+ $\scriptscriptstyle\langle\!\langle\;$}}
+\def\gdf{\raise.4ex\hbox{%
+ $\scriptscriptstyle\;\rangle\!\rangle\;$}}
+
+\begin{document}
+\date{17 d\'ecembre 1993}
+
+\begin{titlepage}
+ \vspace*{1.0in}
+ \begin{flushright}
+ {\huge\bf ColorRgb.\TeX ~: guide d'utilisation
+des macros de mise en couleur} \\[.25cm]
+ {\rule[.1in]{4.5in}{.02in}}\\[.25cm]
+ {\large\bf Manuel de R\'ef\'erence} \\[2.0cm]
+ {\large\bf Version 3.3} \\[2.5cm]
+ {\bf Christophe C\'erin}\\[7mm]
+ {Universit\'e de Picardie}\\
+ {Facult\'e de Math\'ematique et d'Informatique}\\
+ {Lamifa}\\
+ {33, rue St Leu -- 80039 Amiens}\\
+ {tel : 22-82-75-03}\\
+ \&\\
+ {Universit\'e de Paris Sud}\\
+ {LRI bat 490}\\
+ {91405 Orsay - France}\\
+ {mail : cerin@lri.lri.fr}\\
+ {tel : 69-41-70-82}
+ \end{flushright}
+\end{titlepage}
+
+\pagenumbering{roman}
+
+\chapter*{Petite histoire de ces macros}
+
+Dans un article des Cahiers Gutenberg \cite{cc}, nous pr\'esentions les
+avantages d'utilisation de la couleur dans le traitement de texte \TeX\ au
+travers de deux jeux de macros~: color\-rgb.tex et co\-lorcmyk.tex
+fonctionnant pour les imprimantes couleur PostScript des cons\-truc\-teurs
+QMS, Oc\'e, Hitachi, Seiko.
+
+Dans cet article, nous discutions de la couleur en g\'en\'eral, comment la
+sp\'ecifier, la repr\'esen\-ter, puis, nous d\'egagions des classes de
+probl\`emes qui appellent des classes de solutions communes, des
+algorithmes communs. Cela nous conduisait \`a proposer un ensemble minimal
+de primitives permettant de r\'esoudre les probl\`emes identifi\'es
+suivants~: action sur une entit\'e syntaxique (lettre, mot, phrase,
+paragraphe) et action sur une entit\'e graphique~: vecteur ou fl\`eche de
+l'environnement \verb!picture! de \LaTeX .
+
+Au moyen des constructeurs de base \verb[\begincolor[ et \verb[\endcolor[,
+nous r\'ealisions des d\'egrad\'es de couleur sur des cha\^\i nes de
+caract\`eres~: la couleur d'une lettre d\'epend de celle de ses voisines
+ou, plus g\'en\'eralement, de param\`etres sp\'ecifiant l'interaction des
+couleurs.
+
+La version 2.9 des macros b\'en\'eficiait de l'ajout de primitives comme
+la cr\'eation de bo\^\i tes en couleur contenant du texte dans une couleur
+diff\'erente. Vous trouviez \'egalement des macros pour \'ecrire du texte
+sur un fond d\'egrad\'e et des primitives pour dessiner des courbes de
+Bezier en couleur et en particulier des contours ferm\'es quelconques,
+des cercles hachur\'es ainsi que la possibilit\'e de placer du texte le
+long d'une courbe.
+
+Les principaux ajouts de la version 3.3 sont les suivants : dessins de
+fl\`eches compos\'es d'un spline et d'un symbole de fl\`eche, le symbole
+de la fl\`eche pouvant \^etre positionn\'e n'importe o\`u le long du
+spline. Nous proposons \'egalement une macros pour dessiner la
+repr\'esentation graphique d'une fonction math\'ematique et diverses
+solutions pour tracer des \'echelles gradu\'ees et des grilles ainsi que
+des macros pour tracer des boites 3D orientables. Vous disposez aussi de
+macros pour dessiner d'une part des logos de fl\`eches (il y a une macro
+pour positionner ces logos dans la marge gauche) et d'autre part des logos
+de stations de travail, de disque, de serveur et de routeur.
+
+L'implantation des constructeurs initiaux propos\'ee est r\'ealis\'ee en
+partie avec Post\-Script, par l'interm\'ediaire de la commande
+\verb[special[ dans la syntaxe reconnue par le translateur
+\verb[dvips 5.4x[ de Tom Rokicki, et en \TeX . L'ensemble des macros est
+\'ecrit pour fonctionner avec \LaTeX .
+
+\raggedbottom
+\pagenumbering{arabic}
+\pagestyle{headings}
+%\chapter*{Description des macros}
+
+\begin{manpage}{Librairie RGB}{Guide d'utilisation}{Version 3.3}
+
+\subtitle*{Mod\`eles RGB, CMYK et HSB}
+
+Ce module d\'ecrit l'ensemble des primitives qui sp\'ecifient la couleur
+dans les mod\`eles RGB, CMYK et HSB. Il est constitu\'e d'une partie
+per\-met\-tant de d\'eclarer des variables, d'une partie permet\-tant
+d'effectuer des initialisations sur ces variables et d'une partie qui
+d\'ecrit la manipulation de la couleur sur des cha\^\i nes de caract\`eres.
+Nous proposons ensuite les descriptions des macros graphiques puis nous
+listons quelques macros de confort qui d\'eclarent des couleurs
+pr\'ed\'efinies.
+
+\subtitle*{Primitives de base pour le changement de couleur}
+
+\function*{$\backslash$beginrgbcolor( \{rouge\}\{vert\}\{bleu\} ) }
+Passage, dans le mod\`ele RGB, dans la couleur sp\'ecifi\'ee par les
+param\`etres.
+
+\function*{$\backslash$endrgbcolor( {} ) }
+Retour \`a la couleur avant l'appel \`a \verb|\beginrgbcolor|.
+
+\function*{$\backslash$rgbcolor(\{rouge\}\{vert\}\{bleu\} ) }
+Effectue un \verb|\beginrgbcolor| suivi d'un \verb|\endrgbcolor| sur le
+groupe (cf d\'efinition d'un group dans \cite{mt}) courant.
+
+\function*{$\backslash$beginhsbcolor(\{hue\}\{saturation\}\{brightness\} ) }
+Passage, dans le mod\`ele HSB, dans la couleur sp\'ecifi\'ee par les
+param\`etres.
+
+\function*{$\backslash$endhsbcolor( {} ) }
+Retour \`a la couleur avant l'appel \`a \verb|\beginhsbcolor|.
+
+\function*{$\backslash$begincmykcolor(\{cyan\}\{yellow\}\{magenta\}\{black\} ) }
+Passage, dans le mod\`ele CMYK, dans la couleur sp\'ecifi\'ee par les
+param\`etres.
+
+\function*{$\backslash$endcmykcolor( {} ) }
+Retour \`a la couleur avant l'appel \`a \verb|\begincmykcolor|.
+
+\subtitle*{D\'eclarations concernant les couleurs}
+
+\function*{$\backslash$rouge(=int ) }
+contient la valeur de la composante rouge.
+
+\function*{$\backslash$vert(=int ) }
+contient la valeur de la composante verte.
+
+\function*{$\backslash$bleu(=int ) }
+contient la valeur de la composante bleue.
+
+\function*{$\backslash$increrouge(=long ) }
+contient la valeur de l'incr\'ement du rouge.
+
+\function*{$\backslash$increvert(=long ) }
+contient la valeur de l'incr\'ement du vert.
+
+\function*{$\backslash$increbleu(=long ) }
+contient la valeur de l'incr\'ement du bleu.
+
+\function*{$\backslash$modulo(=long ) }
+valeur du nombre de lettres dans la m\^eme couleur.
+
+\function*{$\backslash$maxrouge(=int ) }
+contient la valeur de la composante rouge maximale.
+
+\function*{$\backslash$maxvert(=int ) }
+contient la valeur de la composante verte maximale.
+
+\function*{$\backslash$maxbleu(=int ) }
+contient la valeur de la composante bleue maximale.
+
+\subtitle*{Primitives d'initialisation des couleurs}
+
+\function*{$\backslash$initcolor(\{rouge\}\{vert\}\{bleu\} , \{maxrouge\}\{maxvert\}\{maxbleu\}\{modulo\} ) }
+Proc\'edure d'initialisation des couleurs, des couleurs maximales et du
+param\`etre \ggf modulo\gdf permettant de sp\'ecifier le nombre de
+caract\`eres devant \^etre imprim\'es dans la m\^eme couleur.
+
+\function*{$\backslash$initinc(\{rouge\}\{vert\}\{bleu\} ) }
+Proc\'edure d'initialisation des valeurs d'incr\'ement de chaque couleur
+par des valeurs de type \verb+int+.
+
+\subtitle*{D\'eclarations concernant la forme des traits}
+
+Pour certaines primitives pr\'esent\'ees plus loin, vous avez la
+possibilit\'e d'affecter la forme des traits en appelant d'abort les
+\hbox{primitives suivantes :}
+
+\function*{$\backslash$CCap,$\backslash$Join( {} ) }
+Ces variables permettent de modifier la forme des bouts de traits
+et la forme des jointures entre traits. Les seules valeurs
+autoris\'ees sont $0,1$ et $2$ (cf op\'erateurs PostScript \verb|setlinecap|
+et \verb|setlinejoin|). Par d\'efaut, ces valeurs sont fix\'ees comme suit :
+\verb|\CCap=1\Join=1|.
+
+\function*{$\backslash$InitCapJoinMatrix(\{cap\}\{join\} ) }
+Cette macro r\'ealise l'initialisation des variables \verb|CCap, Join|.
+
+\function*{$\backslash$SetCapJoinMatrix(\{cap\}\{join\} ) }
+Cette macro permet de modifier, au niveau du code PostScript, les valeurs
+des formes des traits en ex\'ecutant les ordres \verb|setlinecap| et
+\verb|setlinejoin|.
+
+\subtitle*{Couleur sur les cha\^\i nes}
+
+\function*{$\backslash$fboxcolor(\{texte\}\{rouge\}\{vert\}\{bleu\} ) }
+Boite dont le contour est trac\'e en couleur. La macro est inspir\'ee de
+la macro \LaTeX\ \verb[\fbox[ et elle utilise les variables \verb[\fboxrule[
+et \verb[\fboxsep[. Elle ne peut donc s'utiliser que sous \LaTeX .
+
+\function*{$\backslash$boxcolor(\{texte\}\{rouge\}\{vert\}\{bleu\} ) }
+Boite dont le contenu est en couleur. Cette macro est inspir\'ee de la macro
+\LaTeX\ \verb[\fbox[ et elle utilise les variables
+\LaTeX\ \verb[\fboxrule[ et \verb[\fboxsep[. De plus, on utilise une
+nouvelle bo\^\i te \verb[\@myboxb[ et une nouvelle dimension \verb[\@mydimb[
+afin d'\'eviter certains conflits de variables si l'on effectue un
+\verb[\fbox{}[ de la bo\^\i te en couleur.
+
+\function*{$\backslash$underlinecolor(\{texte\}\{rouge\}\{vert\}\{bleu\} ) }
+Le texte \verb[texte[ est soulign\'e en couleur.
+
+\function*{$\backslash$dentdescie(\{texte\} ) }
+Cette proc\'edure prend une cha\^\i ne de caract\`eres et imprime les \ggf
+mo\-du\-lo\gdf premiers caract\`eres dans la couleur sp\'ecifi\'ee par les
+trois compo\-santes rouge, vert, bleu d\'efinies au moyen de la primitive
+\hbox{\verb[\initcolor[ ;} puis d\'ecr\'emente chaque composante d'une valeur
+sp\'ecifi\'ee au moyen de la primitive \verb[\initinc[ et imprime encore
+\ggf mo\-du\-lo\gdf caract\`eres dans cette nouvelle couleur jusqu'\`a ce
+que \ggf modulo\gdf atteigne une valeur maximale. Dans ce cas, on
+recommence l'affichage des \ggf mo\-du\-lo\gdf pre\-miers caract\`eres
+sui\-vants \`a partir de la couleur initiale sp\'e\-ci\-fi\'ee par les trois
+premiers param\`etres de la primitive \verb[\initcolor[.
+
+\function*{$\backslash$echelon(\{texte\} ) }
+Cette proc\'edure prend une cha\^\i ne de caract\`eres et imprime les
+\ggf mo\-du\-lo\gdf premiers caract\`eres dans la couleur sp\'ecifi\'ee
+par les trois compo\-santes rouge, vert, bleu d\'efinies au moyen de la
+primitive \hbox{\verb+\initcolor+ ;} puis incr\'emente chaque composante d'une
+valeur d\'efinie au moyen de la primitive \verb+\initinc+ et imprime
+encore \ggf modulo\gdf ca\-rac\-t\`e\-res dans cette nouvelle couleur jusqu'\`a
+ce que \ggf modulo\gdf atteigne une borne max. Dans ce cas, on recommence
+l'affichage des \ggf modulo\gdf ca\-rac\-t\`e\-res suivants en d\'ecr\'ementant
+les couleurs jusqu'aux valeurs initiales qui sont sauvegard\'ees dans les
+variables \verb+\sauvxxx+. La varia\-ble globale \verb+\sens+
+initialis\'ee \`a 1 d\'etermine un \'eclaircissement progressif des
+couleurs alors que \verb+\sens+ = 0 d\'etermine un noircissement
+progressif des couleurs.
+
+\function*{$\backslash$degrade(\{texte\} ) }
+Cette macro prend une cha\^\i ne de caract\`eres puis r\'epartit
+uniform\'ement les gammes de couleurs d\'efinies par la primitive
+\verb+\initcolor+ sur l'en\-sem\-ble de la cha\^\i ne.
+
+\function*{$\backslash$longueur([texte] ) }
+Cette macro calcule la longueur d'une cha\^\i ne de caract\`eres. Le
+r\'esultat est rang\'e dans la variable globale \verb+\lg+. Le
+param\`etre doit \^etre entre crochets.
+
+\subtitle*{Comment cr\'eer des effets sp\'eciaux ?}
+
+Voici des macros qui effectue des d\'egrad\'es concentriques sur des
+cercles ou lin\'eaires sur des bo\^\i tes. L'utilisateur peut placer du texte
+(\'eventuellement en couleur) au milieu des cercles ou des bo\^\i tes et
+passer des bo\^\i tes \TeX\ comme param\`etres aux proc\'edures.
+
+\function*{$\backslash$CercleCouleur( \{texte\}\{max\}\{min\}\{couleur\}\{nb-nuances\} ) }
+Macro qui trace des cercles degrad\'es sous le texte \ggf texte\gdf
+en commen\c cant par un grand cercle de couleur \ggf max\gdf jusqu'au
+petit cercle de couleur \ggf min\gdf en tracant \ggf nb-nuances\gdf
+nuances de couleur \ggf couleur\gdf . Si le param\`etre de la couleur
+vaut 1 on effectue un d\'egrad\'e en rouge, si le param\`etre de la couleur
+vaut 2 on effectue un d\'egrad\'e en vert, si le param\`etre de la couleur
+vaut 3 on effectue un d\'egrad\'e en bleu. Remarquer que \ggf
+nb-nuances\gdf doit \^etre > 0 pour \'eviter des divisions par 0 !
+
+\function*{$\backslash$CercleGeneral( \{texte\}\{rouge\}\{vert\}\{bleu\} ,
+\{maxrouge\}\{maxvert\}\{maxbleu\}\{nb-nuances\} ) }
+Cette macro trace des cercles degrad\'es sous le texte \ggf texte\gdf en
+commencant par un grand cercle de couleur \ggf rouge, vert, bleu\gdf
+jusqu'au petit cercle de couleur \ggf maxrouge, maxvert, maxbleu\gdf en
+tracant \ggf nb-nuances\gdf nuances de couleur. Cette macro est une
+g\'en\'eralisation de la pr\'ec\'edente que l'on conserve pour raison
+historique. De plus, l'utilisateur peut sp\'ecifier un d\'ecalage pour le centre du
+cercle au moyen des variables \verb+\xtrans+ et \verb+ytrans+. On peut alors
+obtenir l'effet d'une boule d\'egrad\'ee (cf exemples).
+Remarquer que \ggf nb-nuances\gdf doit \^etre > 0 pour
+\'eviter des divisions par 0 !
+
+\function*{$\backslash$RectangleDegrade( \{texte\}\{rouge\}\{vert\}\{bleu\} ,
+\{maxrouge\}\{maxvert\}\{maxbleu\}\{nb-nuances\} ) }
+Cette macro trace des rectangles d\'egrad\'es sous le texte \ggf texte\gdf
+en commencant par un rectangle de couleur \ggf rouge, vert, bleu\gdf
+jus\-qu'au rectangle de couleur \ggf maxrouge, maxvert, maxbleu\gdf en
+tracant \ggf nb-nuances\gdf rectangles de couleur differentes. Pour
+choisir le sens du d\'e\-gra\-d\'e (de gauche \`a droite ou de haut en bas),
+vous utiliserez un bool\'een repr\'esent\'e en \TeX\ par
+\verb+\ifhorizontal+. Si vous souhaitez un d\'egrad\'e de couleurs
+dispos\'ees de haut en bas, vous \'ecrirez \verb+\horizontaltrue+ ; si
+vous souhaitez une disposition de cou\-leurs de la gauche vers la droite,
+vous \'ecrirez \verb+\horizontalfalse+ avant l'appel \`a
+\verb+\RectangleDegrade+. Remarquer que \ggf nb-nuances\gdf doit \^etre >
+0 pour \'eviter des divisions par 0 !
+
+\subtitle*{Tracer des courbes}
+
+\function*{$\backslash$bezierps( \ liste $\backslash${\bf endbezierps} ,
+\{wd\}\{dash1\}\{dash2\}\{red\}\{green\}\{blue\} ) }
+Cette macro trace une courbe de bezier en couleur avec les points du
+param\`etre \verb+liste+ qui est un tableau de tableaux au sens PostScript.
+Le param\`etre \verb+wd+ contient la largeur des traits.
+Lorsque l'on veut tracer des courbes pointill\'ees, il faut
+positionner le bool\'een \verb+\ifdashps+ \`a vrai (\verb+\dashpstrue+)
+et \`a ce moment \verb+dash1+ sp\'ecifie la forme des pointill\'es (voir
+la commande Postscript \verb+setdash+) et \verb+dash2+ d\'efinit le
+d\'eplacement (\`a partir du d\'ebut du trait) apr\`es lequel
+d\'ebutera le trac\'e. Si on a positionn\'e \verb+\dashpsfalse+ alors
+la courbe est continue. Attention, les unit\'es sont des millim\`etres
+et il faut un blanc avant \verb+\endbezierps+. Enfin,
+l'ordre des param\`etres est :
+
+\verb+\bezierps [ [ x0 y0 x1 y1 x2 y2 x3 y3 ]...] +\\
+\quad\quad\quad\verb+\endbezierps {}{}{}{}{}+
+
+avec les points $x_0,y_0,x_1,y_1$ d\'efinissant la premi\`ere tangente \`a
+la courbe et les points $x_2,y_2,x_3,y_3$ d\'efinissant la deuxi\`eme
+tangente \`a la courbe.
+
+\function*{$\backslash$ellipseps(\{l\}\{h\}\{line\}\{dash\}\{deb\}\{rouge\}\{vert\}\{bleu\} ) }
+Trace une ellipse avec les dimensions $(l,h)$. Le param\`etre $l$
+repr\'esente la "largeur" de l'ellipse et $h$ la hauteur (exprim\'ees en
+mm). Le param\`etre $line$ contient la largeur des traits. Lorsque l'on
+veut tracer une ellipse en pointill\'ees, il faut positionner le boolean
+\verb|\ifdashps| \`a vrai (faire la commande \verb|\dashpstrue|) et \`a ce
+moment $dash$ contient le nombre total d'espaces noirs et d'espaces blancs
+selon les unit\'es de mesures courantes ; $deb$ d\'efinit le nombre
+d'unit\'es \`a placer en d\'ebut de trait. Ces deux param\`etres sont de
+la forme [9] 4 ($dash = [9], deb=4$) car ils doivent correspondre aux
+param\`etres de la commande PostScript \verb|setdash|. Si on a
+positionn\'e \verb|\dashpsfalse| alors la courbe est continue. Attention,
+les unit\'es sont des MILLIMETRES. Le param\`etre ``rouge'' sp\'ecifie
+l'intensit\'e du rouge qui remplit l'ellipse (cette valeur doit \^etre
+inf\'erieure \`a
+$256$), ``vert'' l'intensit\'e du vert (cette valeur doit \^etre inf\'erieure \`a $256$)
+et ``bleu'' l'intensit\'e du bleu (valeur inf\'erieure \`a $256$). Enfin, le trait du
+contour de l'ellipse est trac\'e dans la couleur actuelle d\'efinie par les
+composantes \verb|\rouge, \vert, \bleu|.
+
+\function*{$\backslash$Line( \ liste\ $\backslash${\bf endLine}\{larg\}\{dash\}\{deb\}\{rouge\}\{vert\}\{bleu\} ) }
+Trace une ligne avec les points du param\`etre ``liste'' qui est un tableau
+de tableaux. Le param\`etre ``larg'' contient la largeur des traits. Lorsque
+l'on veut tracer des lignes pointill\'ees, il faut positionner le bool\'een
+\verb|\ifdashps| a vrai au moyen d'un ordre \verb|\dashpstrue| et \`a ce
+moment ``dash'' contient le nombre total d'espaces noirs et d'espaces
+blancs selon les unit\'es de mesures courantes ; ``deb'' d\'efinit le nombre
+d'unit\'es \`a placer en debut de trait (cf commande pr\'ec\'edente). Si
+on a positionner \verb|\dashpsfalse| alors la courbe est continue.
+Attention les unit\'es sont des MILLIMETRES et il faut un blanc avant
+\verb|\endLine|. Le param\`etre ``rouge'' sp\'ecifie l'intensit\'e du
+rouge du trait (cette valeur doit \^etre inf\'erieure \`a $256$), ``vert'' l'intensit\'e
+du vert (cette valeur doit \^etre inf\'erieure \`a $256$) et ``bleu'' l'intensit\'e du
+bleu (valeur inf\'erieure \`a $256$). Enfin les valeur courantes de \verb|CCap| et
+\verb|Join| sont utilis\'ees pour le rendu des traits (cf commande
+\verb|\SetCapJoinMatrix|)
+
+Pour tracer une ligne bris\'ee il faut taper :
+\begin{verbatim}
+ \Line [ [ x0 y0 x1 y1 ] [ x1 y1 x2 y2 ] ...] \endLine{}{}...
+\end{verbatim}
+En fait, cet appel provoque, en sous main, la r\'ep\'etition de la
+fonction qui trace un trait.
+
+\function*{$\backslash$CourbeRempliee( \ liste $\backslash${\bf endcourbe} ,
+\{wd\}\{dash1\}\{dash2\}\{red\}\{green\}\{blue\} ) }
+Trace une courbe ferm\'ee au moyen de courbes de Bezier avec les points
+du param\`etre \verb+liste+ qui est un tableau de tableaux. Le param\`etre
+wd contient la largeur des traits du contour. Lorsque l'on veut
+tracer des courbes pointill\'ees, il faut positionner le bool\'een
+\verb+\ifdashps+ \`a vrai (\verb+\dashpstrue+) et \`a ce moment
+\verb+dash1+ sp\'ecifie la forme des pointill\'es (voir la commande
+Postscript \verb+setdash+) et \verb+dash2+ d\'efinit le d\'eplacement (\`a
+partir du d\'ebut du trait) apr\`es lequel d\'ebutera le trac\'e. Si on a
+positionn\'e \verb+\dashpsfalse+ alors la courbe est continue. (cf
+fonction \verb+\bezierps+). Attention, les unit\'es sont des millim\`etres et
+il faut un blanc avant \verb+\endcourbe+. L'ordre des param\`etres est le
+m\^eme que celui de la fonction \verb+\bezierps+. Le remplissage est
+effectu\'e avec les couleurs sp\'ecifi\'ees par les trois derniers
+param\`etres. Le contour est trac\'e dans la couleur actuelle d\'efinie par
+les composantes \verb+\rouge, \vert, \bleu+. Le contour est ferm\'e si le
+bool\'een \verb+\ifclosepath+ est positionn\'e \`a vrai
+(\verb+\closepathtrue+). Enfin, tous les points sont en positions relatives
+par rapport \`a $x_0,y_0$ contrairement aux points d\'efinissant les
+tangentes dans la macro \verb+\bezierps+ et il faut respecter les blancs
+\hbox{convenablement :}
+
+\verb+\CourbeRempliee [ [ x0 y0 x1 y1 x2 y2 x3 y3 ]...] +\\
+\quad\quad\quad\verb+\endcourbe{}{}{}{}{}+
+
+\subtitle*{Les objets graphiques ``hachur\'es''}
+
+\function*{$\backslash$CercleHachure( \{rayon\}\{wdrayon\}\{wd\}
+\{angle\}\{r\}\{g\}\{b\}\{space\} ) }
+Cette macro trace un cercle de rayon \verb+rayon+ mm et d'\'epaisseur
+\verb+wdrayon+ mm, puis remplit ce cercle avec des hachures de largeur
+\'egale \`a \verb+wd+ mm inclin\'ees de \verb+angle+ degr\'es. La couleur
+est specifi\'ee par les param\`etres r, g, b. Le param\`etre \verb+space+
+donne l'espacement entre les hachures. Les angles doivent \^etre compris
+entre 0 et 180 degr\'es.
+
+\function*{$\backslash$CarreHachure( \{ht\}\{wd1\}\{wd2\}
+\{angle\}\{r\}\{g\}\{b\}\{space\} ) }
+Cette macro trace un carr\'e de hauteur \verb+2*ht+ mm et d'\'epaisseur
+\verb+wd1+ mm, puis remplit ce cercle avec des hachures de largeur \'egale
+\`a \verb+wd2+ mm inclin\'ees de \verb+angle+ degr\'es. La couleur est
+specifi\'ee par les param\`etres r, g, b. Le param\`etre \verb+space+
+donne l'espacement entre les hachures. Les angles doivent \^etre
+compris entre 0 et 180 degr\'es.
+
+\subtitle*{Faire une rotation}
+
+\function*{$\backslash$RotObj( \{angle\}\{texte\} ) }
+Pour mettre du texte en rotation ou tout autre chose, programmez avec la
+macro \verb+\RotObj+. Le point \`a partir duquel la rotation se fait
+peut varier suivant l'appel \`a certaines macros : par d\'efaut ce point
+est fix\'e au premier caract\`ere du texte. Par exemple, l'appel
+\verb+\mc+ possitionne ce point au milieu de la cha\^\i ne, l'appel
+\verb+\fc+ \`a la fin, et l'appel \verb+\dc+ au d\'ebut. Il y a seulement
+cr\'eation d'une boite de largeur nulle, donc il n'y a pas de place de
+r\'eserv\'ee pour l'objet. Voici un exemple de \hbox{programmation :}\\
+\verb+\mc\RotObj{45}{\Huge\bf Exemple}+.
+
+\subtitle*{Mettre automatiquement du texte le long d'une courbe}
+
+\function*{$\backslash$TraceTexte( \{texte\}\{$x_0$\}\{$y_0$\}\{$x_1$\}\{$y_1$\}\{$x_2$\}\{$y_2$\}\{$x_3$\}\{$y_3$\} ) }
+Cette macro r\'epartit pas \`a pas chaque caract\`ere de la cha\^\i ne
+\verb+texte+ le long de la courbe sp\'ecifi\'ee par les 4 points
+$x_0,y_0,x_1,y_1,x_2,y_2,x_3,y_3$ (cf macro \verb+bezierps+). La formule
+math\'ematique de la courbe de Bezier est d\'eriv\'ee de la paire
+d'\'equation cubique param\'etrique de param\`etre $t\, (0\leq t\leq 1)$
+suivante\ :
+
+\setbox2=\hbox{\it coordonn\'ees en x}
+\setbox3=\hbox{\it coordonn\'ees en y}
+
+$$
+\begin{array}{ccl}
+x(t) & = & a_{x}t^{3} + b_{x}t^{2} + c_{x}t + x_{0}\quad\quad\box2\nonumber\\
+y(t) & = & a_{y}t^{3} + b_{y}t^{2} + c_{y}t + y_{0}\quad\quad\box3\nonumber
+\end{array}
+$$
+
+Les points de contr\^ole sont d\'efinis par :
+
+$$
+\begin{array}{ll}
+x_1=x_0+c_x/3 & y_1=y_0+c_y/3\nonumber\\
+x_2=x_1+(c_x+b_x)/3 & y_2=y_1+(c_y+b_y)/3\nonumber\\
+x_3=x_0+c_x+b_x+a_x & y_3=y_0+c_y+b_y+a_y\nonumber
+\end{array}
+$$
+
+Pour chaque lettre \`a positionner, les diff\'erentes valeurs du
+param\`etre $t$ sont calcul\'ees en fonction de la largeur des caract\`eres et de la
+tantente \`a la courbe. Par exemple, supposons que l'on cherche \`a
+positionner le caract\`ere \verb+c+ de la figure \ref{fd:one} page
+\pageref{fd:one}. On connait la valeur $t'$ et les coordonn\'ees $(x',y')$
+du point sur la courbe, obtenu au moyen des \'equations param\'etriques,
+qui nous ont servi \`a positionner le carac\`ere \verb+a+. Pour calculer
+la tangente, nous cherchons la valeur de $t''$ correspondant \`a un
+d\'eplacement le long de la courbe \'egal \`a la longueur du caract\`ere
+\verb+c+. Soit $(x'',y'')$ les coordon\'ees du point sur la courbe
+associ\'e \`a $t''$. On pose\ :
+
+\begin{equation}
+tan (\alpha)=\frac{y' - y''}{x' - x''}\nonumber
+\end{equation}
+
+Le caract\`ere est positionn\'e \`a partir de $(x',y')$ en le faisant
+pivot\'e de l'angle $\alpha$. On continue ce m\^eme traitement avec le
+prochain caract\`ere de la cha\^\i ne \`a partir du point $(x'',y'')$. Les
+conditions initiales sont : le premier caract\`ere \`a positionner est le
+premier caract\`ere de la cha\^\i ne, $t=0$, l'angle est d\'etermin\'e au
+moyen du proc\'ed\'e d\'ecrit plus haut et ne correspond pas \`a la
+tangente d\'efinie par les points $x_0,y_0,x_1,y_1$ qui est la tangente au
+point $x_0,y_0$ (un caract\`ere a une largeur non nulle).
+
+La variable \verb+\BlancInterLettre+ vous permet de rajouter de l'espace
+entre les caract\`eres. Par d\'efaut, sa valeur est fix\'ee \`a 1mm (on
+rappelle que l'unit\'e de tous les param\`etres num\'eriques doit \^etre
+le mm).
+
+L'implantation est r\'ealis\'ee en \TeX\ pour ce qui est de l'application
+r\'ecursive des calculs et de l'obtention de la largeur des caract\`eres.
+Les calculs num\'eriques sont implant\'es, quant \`a eux, en PostScript.
+L'utilisation successive, dans le corps de la macro, de plusieurs ordres
+\verb+\special+ pour ins\'erer du code PostScript n\'ecessite des
+traitements particuliers car l'implantation du \verb+\special+ introduit
+des ordres de positionnement, en plus du code PostScript que l'on souhaite
+ins\'er\'e, qui perturbent le bon fonctionnement. La macro a donc \'et\'e
+test\'ee et ne fonctionne pour l'instant qu'avec le translateur
+\verb+dvips 5.4+. De petits ajustements de ces macros sont n\'ecessaires pour
+des versions ant\'erieures du translateur \verb!dvips!.
+
+\function*{$\backslash$ColleTexte( \{texte\}\{$x_0$\}\{$y_0$\}\{$x_1$\}\{$y_1$\}\{$x_2$\}\{$y_2$\}\{$x_3$\}\{$y_3$\} ) }
+Cette macro r\'epartit la cha\^\i ne \verb+texte+ le long de la {\bf
+totalit\'e} de la courbe de Bezier sp\'ecifi\'ee par les points
+$x_0,y_0,x_1,y_1,x_2,y_2,x_3,y_3$. Le calcul des diff\'erentes valeurs du
+param\`etre $t$ est plus facile que dans le cas de la macro
+\verb+TraceTexte+ : la nouvelle valeur du param\`etre est obtenue en
+augmentant la derni\`ere valeur du param\`etre de la quantit\'e
+$\displaystyle\frac{1}{\mid texte - 1\mid}$ (attention : une croissance
+lin\'eaire de $t$ n'entraine pas n\'ecessairement un espacement identique
+entre chaque caract\`ere du fait de l'\'equation cubique param\'etrique
+utilis\'ee). Un exemple est pr\'esent\'e \`a la figure \ref{fd:one} page
+\pageref{fd:one}.
+
+\hbox to\textwidth{\hrulefill}
+\lettrepanneau\ \`A partir de maintenant, les courbes trac\'ees
+avec les macros qui suivent sont dans la couleur courante sp\'ecifi\'ee
+par \verb|\rouge|, \verb|\vert|, \verb|\bleu|. Il convient donc de
+positionner convenablement chacune de ces valeurs avant les appels.\par
+\hbox to\textwidth{\hrulefill}
+
+\subtitle*{Tracer des grilles et des \'echelles gradu\'ees}
+
+On vous offre la possibilit\'e de tracer une grille sans graduations ou
+bien de tracer une grille et des \'echelles gradu\'ees. Pour tracer des
+grilles, les variables suivantes sont utilis\'ees :
+
+\begin{enumerate}
+ \item \verb|\pasx| contient le ``pas'' d'espacement en (mm) pour les
+gra\-dua\-tions de l'axe des x ; \verb|\pasy| contient le ``pas''
+d'espacement en (mm) pour les graduations de l'axe des y ;
+ \item \verb|\vinitx| et \verb|\vincx| contiennent respectivement les
+valeurs initiales et d'incr\'ementation des puissances sur l'axe des x ;
+ \item \verb|\vinity| et \verb|\vincy| contiennent respectivement les
+valeurs initiales et d'incr\'ementation des puissances sur l'axe des y ;
+\end{enumerate}
+
+La macro de base pour tracer une grille est la suivante :
+
+\Function*{$\backslash$Grille! (larg ,haut)(esp-x ,esp-y)\{dash1\}\{dash2\}\{wd\} ! }
+Trace une grille au point courant sur larg mm en largeur et de haut mm
+en hauteur. Les lignes de la grille sont espac\'ees de esp-x mm selon l'axe
+des x et de esp-y mm selon l'axe des y. Les param\`etres dash1 et dash2
+sont les param\`etres du setdash dans le cas ou l'on souhaite tracer
+des lignes pointill\'ees : dans ce cas, le bool\'een \verb|dashps| doit \^etre
+positionn\'e \`a true. wd est la largeur des traits.
+
+\Function*{$\backslash$GridNumNum! (x1 ,y1)(l ,h)(esp-x ,esp-y)\{dash1\}\{dash2\}\{wd\} ! }
+Trace une grille avec des \'echelles gradu\'ees au point $(x1,y1)$. Les
+gra\-dua\-tions sur l'axes des x et des y sont des entiers. Les autres
+param\`etres de cette macro ont les significations de ceux de Grille.
+Les valeurs de \verb|\pasx| et \verb|\pasy| sont les valeurs en mm
+d'espacement entre 2 graduations cons\'ecutives.
+
+\Function*{$\backslash$GridNumPuiss! (x1 ,y1)(l ,h)(esp-x ,esp-y)\{dash1\}\{dash2\}\{wd\} ! }
+Trace une grille avec des \'echelles gradu\'ees au point $(x1,y1)$. Les
+gra\-dua\-tions sur l'axes des x sont des entiers de la forme de
+\verb|\vinitx|, les graduations sur l'axes des y des entiers de la forme
+\verb|\vinity^\vincy|. Les autres param\`etres de cette macro ont les
+m\^emes significations que ceux de Grille. Les valeurs de
+\verb|\pasx| et \verb|\pasy| sont les valeurs en mm d'espacement entre 2 graduations
+cons\'ecutives.
+
+\Function*{$\backslash$multiputnum! (x1 ,y1)(x-t ,y-t)\{num\}\{obj\}\{inc\} ! }
+Place num objets a partir de $(x1,y1)$ en se translatant de x-t et y-t
+\`a chaque nouvel objet. L'objet de d\'epart est $obj$, puis $obj + inc$ (pas
+d'it\'eration), puis $obj + (2 * inc)$\ldots Attention, obj doit \^etre de
+type entier.
+
+\Function*{$\backslash$multiputpuissance!(x1 ,y1)(x-trans ,y-trans)\{num\}\{x\}\{y\} ! }
+Place num objets de la forme $x^y$ \`a partir de $(x1,y1)$ en se
+translatant de x-trans mm selon l'axe des x et y-trans mm selon l'axe des
+y \`a chaque nouvel objet. L'objet de d\'epart est $x^y$, puis
+$x^{\hbox{$y+1$}}$, puis $x^{\hbox{$y+2$}}$\ldots Attention, x doit \^etre
+un entier ainsi que le param\`etre num.
+
+\newpage
+
+\subtitle*{Tracer des fonctions math\'ematiques}
+
+\function*{$\backslash$plotfunction( \{deb\}\{fin\}\{x-fact\}\{y-fact\}\{width\}\{dash\}\{fct\} ) }
+Trace une fonction d\'ecrite au format PostScript par le param\`etre fct.
+Le param\`etre en x \`a faire figurer doit s'appeler XX. La valeur de XX
+varie de deb \`a fin. On applique le facteur d'echelle x-fact selon l'axe
+des x et le facteur y-fact selon l'axe des y. Attention, l'unit\'e par
+d\'efaut est ici le centim\`etre. width est l'\'epaisseur des traits en cm.
+dash sp\'ecifie le param\`etre des pointill\'es si le bool\'een dashps est
+vrai (\verb|dashpstrue|). La fonction est trac\'ee dans la couleur
+sp\'ecifi\'ee par \verb|\rouge, \vert, \bleu|.
+
+\subtitle*{Tracer des fl\`eches}
+
+Vous avez la possibilit\'e de tracer des fl\`eches avec le symbole de
+fl\`eche d\'epos\'e n'importe o\`u sur le trait ou encore une fl\`eche
+comportant deux symboles de fl\`eche, un \`a chaque extr\'emit\'e du
+trait. Les traits des fl\`eches sont d\'efinis comme des splines.
+
+Les bool\'eens suivant permettent de choisir un endroit pour d\'eposer les
+fl\`eches :
+
+\begin{itemize}
+ \item \verb|\ifarrowheads| positionn\'e \`a la valeur true vous permet
+d'avoir deux symboles de fl\`eches ;
+ \item \verb|\ifarrowheadleft| positionn\'e \`a la valeur true vous
+permet d'obtenir un symbole de fl\`eche au d\'ebut du trait de fl\`eche ;
+ \item \verb|\ifarrowheadright| positionn\'e \`a la valeur true vous
+permet d'obtenir un symbole de fl\`eche en fin du trait de fl\`eche ;
+\end{itemize}
+
+\function*{$\backslash$ArrowForm( \{sens\} ) }
+Cette macro permet d'initialiser la forme des fl\`eches. Un appel avec le
+param\`etre sens valant h va s\'electionner le mode``deux symboles de
+fl\`eches'', un appel avec le param\`etre sens valant l va s\'electionner
+le mode ``symbole de fl\`eches au d\'ebut'' et un appel avec le param\`etre
+sens valant r va s\'electionner le mode ``symboles de fl\`eches \`a
+droite''. Au moment de la compilation, un message vous averti si vous avez
+effectu\'e un appel \`a cette macro avec un param\`etre autre que ceux
+explicit\'es ici.
+
+Pour tracer les fl\`eches proprement dites vous avez \`a votre disposition
+les macros suivantes :
+
+\function*{$\backslash$Fleche( ~spline $\backslash${\bf endfleche}\{pourc\}\{prof\}\{haut\}\{larg\}\{pt-size\} , \{wd\}\{dash1\}\{dash2\} ) }
+Les param\`etres de cette macro sont les suivants : spline est un tableau
+de tableaux \`a deux cases. La premi\`ere case contient du texte, la
+seconde 4 points d\'efinissant le spline support de la fl\`eche, pourc est
+le pour\-cen\-ta\-ge de la longueur du spline o\`u va figurer le symbole
+de fl\`eche, prof est la profondeur de la fl\`eche, haut sa hauteur, larg
+sa largeur, pt-size est la hauteur de la fonte pour le texte wd (cf
+exemples d'utilisation) est l'epaisseur des traits dash1 et dash2
+permettent de tracer des pointill\'es (cf commande PostScript
+\verb|setdash|).
+
+\function*{$\backslash$FlecheSpeciale( ~spline $\backslash${\bf endflechespeciale}\{pos\}\{prof\} , \{haut\}\{larg\}\{pt-size\}\{wd\}\{dash1\}\{dash2\} ) }
+Cette macro est un raccourci pour tracer une fl\`eche avec le(s) symbole(s)
+de fl\`eche \`a l'une des extr\'emit\'es du trait. Le param\`etre pos est
+soit un h soit un r soit un l (cf au dessus pour les d\'efinitions de ces
+symboles). Les autres param\`etres sont les m\^emes que ceux de
+\verb|Fleche|.
+
+{\catcode`\|=\active \def|{$\mid$}
+\Function*{$\backslash$TraceArrow! (x1 ,y1)(x2 ,y2)|shape| ! }
+\catcode`\|=13
+}Trace deux symboles de fl\`eches aux extr\'emit\'es d'une droite fictive
+d\'efinie par les points $(x_1,y_1)$ et $(x_2,y_2)$. Le param\`etre shape
+est de la forme "p h w" ou p, h, w sont respectivement la profondeur la
+hauteur et la largeur de la fl\`eche. Enfin, si on a le bool\'een
+\verb|\externe| positionn\'e \`a true alors les fl\`eches sont tourn\'ees
+vers l'ext\'erieur, sinon vers l'int\'erieur. Cette macro est d'une
+utilit\'e pour le trac\'e des cotations.
+
+Pour tracer des cotations vous disposez des macros suivantes :
+
+{\catcode`\|=\active \def|{$\mid$}
+\Function*{$\backslash$Cotes! (x1 ,y1)(x2 ,y2)[ep ,ep-per][lg-g ,lg-d]|dash| ! }
+\catcode`\|=13
+}Trace une droite du point $A=(x_1,y_1)$ au point $B=(x_2,y_2)$
+d'\'epaisseur ep mm puis deux traits perpendiculaires \`a la droite
+pr\'ec\'edente d'\'epaisseur ep-per et de longueurs respectives lg-g mm du
+point A et lg-d mm du point B. Enfin, si le bool\'een \verb|\dashps| est
+positionn\'e \`a true alors dash sp\'ecifie les pointill\'es. Ainsi, dash
+doit \^etre de la forme : \verb|[ xx ] yy| (cd commande PostScript
+\verb|setdash|).
+
+{\catcode`\|=\active \def|{$\mid$}
+\Function*{$\backslash$CotesFleche! (x1 ,y1)(x2 ,y2)[ep ,ep-per][lg-g ,lg-d]|shape| ! }
+\catcode`\|=13
+}Cette macro est tr\`es semblable \`a la pr\'ec\'edente. On ajoute des
+symboles de fl\`eches au bout des traits. Elle commence par tracer une
+droite du point $A=(x_1,y_1)$ au point $B=(x_2,y_2)$ d'\'epaisseur ep mm
+puis deux traits perpendiculaires \`a la droite pr\'ec\'edente
+d'\'epaisseur ep-per et de longueurs respectives lg-g mm du point A et
+lg-d mm du point B. Le param\`etre shape est de la forme w h w pour un
+appel a Arrow. Enfin, si on a \verb|externetrue| alors les fl\`eches sont
+tourn\'ees vers l'ext\'erieur, sinon vers l'int\'erieur.
+
+Pour tracer des logos de fl\`eches vous disposez des fonctions suivantes :
+
+\function*{$\backslash$LogoFlecheOne( \{epaisseur\}\{scale-x\}\{scale-y\} ) }
+Trace un logo de fl\`eche dont les traits sont d'\'epaisseur "epaisseur".
+Les facteurs "scale-x" et "scale-y" permettent de grossir ou de diminuer
+la taille du dessin selon l'axe des x et l'axe des y respectivement. Le
+symbole est dessin\'e dans la couleur des param\`etres \verb|\rouge|,
+\verb|\vert|, \verb|bleu|.
+
+\function*{$\backslash$LeftLogoFlecheOne( {} ) }
+Positionne dans la marge gauche le logo pr\'ec\'edent. Le
+symbole est dessin\'e dans la couleur des param\`etres \verb|\rouge|,
+\verb|\vert|, \verb|bleu|.
+
+\function*{$\backslash$LogoFlecheTwo( \{epaisseur\}\{scale-x\}\{scale-y\} ) }
+Pour la d\'efinition des param\`etres, voir la macro \verb|LogoFlecheOne|.
+
+\function*{$\backslash$LeftLogoFlecheTwo( {} ) }
+Positionne dans la marge gauche le logo pr\'ec\'edent. Le
+symbole est dessin\'e dans la couleur des param\`etres \verb|\rouge|,
+\verb|\vert|, \verb|bleu|.
+
+\subtitle*{Tracer des boites 3D pour r\'ealiser des histogrammes}
+
+{\catcode`\|=\active \def|{$\mid$}
+\function*{$\backslash$TroisDbox(\{h\}\{w\}\{ang\}\{c-box\}\{c-inner\} , \{x-retrait\}\{y-retrait\}\{rayon\} ) }
+\catcode`\|=13
+}Trace une boite 3D de hauteur h.mm et w.mm orient\'e de ang. La couleur
+de la boite est donn\'ee par le param\`etre c-box qui doit \^etre un
+triplet de la forme 'rouge vert bleu'. Le parametre c-inner est la couleur
+des faces. Ces faces ont une hauteur \'egale a h $-$ 2$*$x-retrait (mm) et
+une largeur de w $-$ 2$*$y-retrait (mm). Le param\`etre rayon est le rayon
+des arrondis aux quatre coins des faces. Noter que si ce param\`etre vaut
+0 alors on obtient le dessin d'un rectangle. De plus, lorsque le bool\'een
+innerbox est True (\verb|\innerboxtrue|) la face avant de la boite ne
+comporte pas de boite int\'erieure en couleur.
+
+\subtitle*{Pour obtenir des logos informatiques}
+
+\function*{$\backslash$SunStation( \{epaisseur\}\{scale-x\}\{scale-y\} ) }
+Trace un logo de station de travail dont les traits sont d'\'epaisseur
+"epaisseur". Les facteurs "scale-x" et "scale-y" permettent de grossir ou
+de diminuer la taille du dessin selon l'axe des x et l'axe des y
+respectivement. Le symbole est dessin\'e dans la couleur des param\`etres
+\verb|\rouge|, \verb|\vert|, \verb|bleu|.
+
+\function*{$\backslash$SunDisk( \{epaisseur\}\{scale-x\}\{scale-y\} ) }
+Trace un logo d'unit\'e de disque dont les traits sont d'\'epaisseur
+"epaisseur". Les facteurs "scale-x" et "scale-y" permettent de grossir ou
+de diminuer la taille du dessin selon l'axe des x et l'axe des y
+respectivement. Le symbole est dessin\'e dans la couleur des param\`etres
+\verb|\rouge|, \verb|\vert|, \verb|bleu|.
+
+\function*{$\backslash$SunServer( \{epaisseur\}\{scale-x\}\{scale-y\} ) }
+Trace un logo de serveur dont les traits sont d'\'epaisseur "epaisseur".
+Les facteurs "scale-x" et "scale-y" permettent de grossir ou de diminuer
+la taille du dessin selon l'axe des x et l'axe des y respectivement. Le
+symbole est dessin\'e dans la couleur des param\`etres \verb|\rouge|,
+\verb|\vert|, \verb|bleu|.
+
+\function*{$\backslash$SunRouter( \{epaisseur\}\{scale-x\}\{scale-y\} ) }
+Trace un logo de routeur de communication dont les traits sont
+d'\'epaisseur "epaisseur". Les facteurs "scale-x" et "scale-y" permettent
+de grossir ou de diminuer la taille du dessin selon l'axe des x et l'axe
+des y respectivement. Le symbole est dessin\'e dans la couleur des
+param\`etres \verb|\rouge|, \verb|\vert|, \verb|bleu|.
+
+\subtitle*{Quelques macros de confort}
+
+Afin de faciliter la manipulation de textes, de graphiques en couleur
+nous proposons quelques raccourcis.
+
+\function*{$\backslash$icone(~ ) }
+Equivalent \`a un \verb+\item+ et place sur la feuille un point en bleu.
+
+\function*{$\backslash$ictwo(~ ) }
+Equivalent \`a un \verb+\item+ et place sur la feuille un diamand en bleu.
+
+\function*{$\backslash$bcrouge(~ ) }
+Remplace la couleur courante par la couleur rouge.
+
+\function*{$\backslash$bcbleu(~ ) }
+Remplace la couleur courante par la couleur bleue.
+
+\function*{$\backslash$bcjaune(~ ) }
+Remplace la couleur courante par la couleur jaune.
+
+\function*{$\backslash$bcvert(~ ) }
+Remplace la couleur courante par la couleur vert.
+
+\function*{$\backslash$bcmauve(~ ) }
+Remplace la couleur courante par la couleur mauve.
+
+\function*{$\backslash$bcmagenta(~ ) }
+Remplace la couleur courante par la couleur magenta.
+
+\function*{$\backslash$bcorange(~ ) }
+Remplace la couleur courante par la couleur orange.
+
+\function*{$\backslash$bcvj(~ ) }
+Remplace la couleur courante par la couleur vert-jaune.
+
+\function*{$\backslash$bcblanc(~ ) }
+Remplace la couleur courante par la couleur blanche.
+
+\function*{$\backslash$ec(~ ) }
+Substitue la couleur sauvegard\'ee \`a la couleur courante.
+
+Pour changer de couleur, vous disposez \'egalement de macros qui portent
+les noms des primitives qui permettent de sp\'ecifier une couleur sous
+l'environement X11 : \verb+\MediumAquamarine+, \verb+\coral+,
+\verb+\DarkOliveGreen+, \verb+\MediumOrchid+ \ldots Reportez-vous au
+fichier \verb+colorrgb.tex+ pour obtenir toutes les red\'efinitions.
+
+\chapter*{Exemples d'utilisation dans le mod\`ele RGB}
+
+Pour mettre en couleur le mot \ggf bonjour\gdf dans cette phrase,
+il suffit de baliser le mot par \verb+\beginrgbcolor{255}{0}{0}+ (ou
+\verb+\bcrouge+) et \verb+\endrgbcolor+ (ou \verb+\ec+) pour obtenir
+\beginrgbcolor{255}{0}{0} bonjour \endrgbcolor. De la m\^eme fa\c con, on peut
+baliser des traits, des fl\`eches de l'environnement \verb+\picture+.
+
+Par exemple, le trait qui suit est cod\'e de la mani\`ere suivante~:
+
+\begin{verbatim}
+\bcbleu %un trait bleu de longueur 8cm
+\hrule height 2pt width 8cm %et d'epaisseur 2pt
+\ec
+\end{verbatim}
+
+{\bcbleu %un trait bleu de longueur 8cm
+\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
+%et d'epaisseur 2pt
+\ec}
+
+Voici un exemple d'utilisation de la macros \verb+\echelon+ avec
+initialisation des couleurs et des incr\'ements de chaque couleur. Les
+couleurs sont initialis\'ees avec la valeur 20 et on d\'esire qu'elles
+croissent jusqu'\`a la valeur 210 par saut de 40 entre chaque caract\`eres
+(modulo = 1).
+
+\begin{verbatim}
+{% debut de groupe
+\Huge\bf
+% rouge=bleu=vert=20
+% maxrouge=maxvert=maxbleu=210
+% chaque caractere change de couleur
+\initcolor{20}{20}{20}{210}{210}{210}{1}
+% increrouge=increvert=increbleu=40
+\initinc{40}{40}{40}
+\echelon{la\ fonction\ echelon}
+}% fin du groupe
+\end{verbatim}
+
+{% debut de groupe
+\Huge\bf
+% rouge=bleu=vert=20
+% maxrouge=maxvert=maxbleu=210
+% chaque caractere change de couleur
+\initcolor{20}{20}{20}{210}{210}{210}{1}
+% increrouge=increvert=increbleu=40
+\initinc{40}{40}{40}
+\echelon{la\ fonction\ echelon}
+}% fin du groupe
+
+\vskip 1cm
+
+\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
+
+\vskip 1cm
+
+Pour construire des boites dont le fond est en couleur, et le texte sur
+deux colonnes dans une autre couleur, nous programmons~:
+
+\begin{verbatim}
+\setbox2=\vbox{\hsize=0.485\textwidth
+Dans un article r\'ecent \cite{cc}, nous pr\'esentions
+les avantages d'utilisation de la couleur dans le
+traitement de texte \TeX\ au travers de deux jeux
+de macros~: Color\TeX rgb et color\TeX cmyk fonctionnant
+pour les imprimantes couleur PostScript des constructeurs
+QMS, Oc\'e, Hitachi, Sei\-ko.
+
+identifi\'es suivants~: action sur une entit\'e
+syntaxique (lettre, mot, phrase, paragraphe) ; et action
+sur une entit\'e graphique~: vecteur ou fl\`eche de
+l'environnement {\bf picture} de \LaTeX .
+\par
+}% fin de la bo\^\i te numero 2
+% on annule le blanc interbo\^\i te
+\splittopskip=0pt
+% on coupe la bo\^\i te 2 en deux selon la hauteur
+% et on range dans la bo\^\i te 1
+\setbox1=\vsplit2 to 0.5\ht2%
+\setbox1=\vbox{\unvbox1}%
+% on pose sur la feuille les deux bo\^\i tes
+\hbox{\boxcolor{\box1}{200}{255}{255}\quad\vrule\quad
+ \boxcolor{\box2}{50}{255}{255}}
+\end{verbatim}
+
+On remarque que le texte est coll\'e sur le bord de la bo\^\i te en
+\hbox{couleur ;} pour ajouter du blanc, il faut utiliser la variable \LaTeX\
+\verb+\fboxsep+.
+
+\setbox2=\vbox{\hsize=0.485\textwidth
+Dans un article r\'ecent \cite{cc}, nous pr\'e\-sen\-tions les avantages
+d'utilisation de la cou\-leur dans le traitement de texte
+\TeX\ au travers de deux jeux de macros~: Color\TeX rgb et color\TeX cmyk
+fonctionnant pour les im\-pri\-man\-tes couleur PostScript des constructeurs
+QMS, Oc\'e, Hitachi, Seiko.
+
+Dans cet article, nous discutions de la cou\-leur en g\'en\'eral, comment
+la sp\'ecifier, la re\-pr\'e\-sen\-ter, puis, nous d\'egagions des
+clas\-ses de pro\-bl\`e\-mes qui appellent des classes de solutions
+communes, des algorithmes communs. Cela nous conduisait \`a proposer un
+ensemble minimal de primitives permettant de r\'e\-sou\-dre les probl\`emes
+identifi\'es suivants~: action sur une entit\'e syn\-ta\-xique (lettre,
+mot, phrase, paragraphe) ; et action sur une entit\'e gra\-phi\-que~:
+vecteur ou fl\`eche de l'environnement {\bf picture} de \LaTeX .
+\par
+}% fin de la bo\^\i te numero 2
+% on annule le blanc interbo\^\i te
+\splittopskip=0pt
+% on coupe la bo\^\i te 2 en deux selon la hauteur
+% et on range dans la bo\^\i te 1
+\setbox1=\vsplit2 to 0.5\ht2%
+\setbox1=\vbox{\unvbox1}%
+% on pose sur la feuille les deux bo\^\i tes
+\hbox{\boxcolor{\box1}{200}{255}{255}\quad\vrule\quad
+ \boxcolor{\box2}{50}{255}{255}}
+
+\vskip 1cm
+
+\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
+
+\vskip 1cm
+
+Nous pr\'esentons maintenant le codage d'un tableau avec les pourtours en
+magenta. On notera l'utilisation de la macro \verb+\halign+ avec la
+s\'equence \verb+\bcmagenta\tvc#\endrgbcolor&+ ce qui provoque un passage \`a
+la couleur magenta pour tous les traits verticaux s\'eparant les colonnes.
+Pour une explication d\'etaill\'ee de la s\'equence \verb+#&+ dans
+l'environnement d'un \verb+\halign+, le lecteur est invit\'e \`a se
+reporter \`a \cite{rs}, pages 126 et suivantes.
+
+\begin{verbatim}
+$$\vbox{\offinterlineskip
+\def\cc#1{\kern .2em\hfill\raise 1.5mm%
+ \hbox{#1}\hfill\kern .2em}
+\def\tvi{\vrule height 24pt depth 2pt width 0pt}
+\def\tvc{\tvi\vrule width 1mm}
+\halign{\bcmagenta\tvc#\endrgbcolor&%
+&\cc{$\displaystyle#$}&\bcmagenta\tvc#\endrgbcolor\cr
+\noalign{\bcmagenta\hrule height 1mm\endrgbcolor}
+&\omit\cc{\bf Fonction}&&\omit\cc{\bf Primitive}&\cr
+\noalign{\bcmagenta\hrule height 1mm\endrgbcolor}
+ height 34pt depth 30pt&{ 1 \over 1 + x^2 }&&{\rm
+ Arctg}\,(x)+C&\cr
+\noalign{\bcmagenta\hrule height 1mm\endrgbcolor}
+}}$$
+\end{verbatim}
+
+$$\vbox{\offinterlineskip
+\def\cc#1{\kern .2em\hfill\raise 1.5mm%
+ \hbox{#1}\hfill\kern .2em}%
+\def\tvi{\vrule height 24pt depth 2pt width 0pt}%
+\def\tvc{\tvi\vrule width 1mm}%
+\halign{\bcmagenta\tvc#\endrgbcolor&%
+&\cc{$\displaystyle#$}&\bcmagenta\tvc#\endrgbcolor\cr%
+\noalign{\bcmagenta\hrule height 1mm\endrgbcolor}%
+&\omit\cc{\bf Fonction}&&\omit\cc{\bf Primitive}&\cr%
+\noalign{\bcmagenta\hrule height 1mm\endrgbcolor}height 34pt depth 30pt
+&1\over 1+{x^2} &&{\rm Arctg}\,(x)+C&\cr%
+\noalign{\bcmagenta\hrule height 1mm\endrgbcolor}%
+}}$$
+
+\vskip 1cm
+
+\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
+
+\vskip 1cm
+
+Pour coder une bo\^\i te en couleur avec un cadre dans une autre \hbox{couleur
+:}
+
+\begin{verbatim}
+{\Large
+\fboxsep=0pt% on initialise le blanc
+\fboxrule=3pt% la dimension du cadre est de 3pt
+\fboxcolor{\fboxsep=8pt\fboxrule=0pt
+ \boxcolor{du texte en noir}%
+ {255}{255}{0}}{255}{0}{0}
+}
+\end{verbatim}
+
+{\Large
+\fboxsep=0pt% on initialise le blanc
+\fboxrule=3pt% la dimension du cadre est de 3pt
+\fboxcolor{\fboxsep=8pt\fboxrule=0pt\boxcolor{du texte en noir}{255}{255}{0}}%
+ {255}{0}{0}
+}
+
+
+\vskip 1cm
+
+\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
+
+\vskip 1cm
+
+Pour tracer un cercle avec des d\'egrad\'es concentriques qui partent de
+la couleur rouge jusqu'au noir en d\'ecalant le centre (effet boule
+d\'egrad\'ee), on programme\ :
+
+\setbox100=\vbox{\Huge\bf\beginrgbcolor{255}{255}{255}
+\halign{\quad#&\quad#&\quad#\cr
+& LRI& \cr
+LRI& LRI& LRI\cr
+& LRI& \cr}
+\endrgbcolor}
+% rouge=(255,0,0) noir=(0,0,0) nb-nuances=10
+\xtrans=50pt% on decale le centre de 50pt vers la droite
+\ytrans=50pt% et 50pt vers le haut
+\centerline{
+\CercleGeneral{\copy100}{255}{0}{0}{0}{0}{0}{10}
+}
+
+\begin{verbatim}
+
+\setbox100=\vbox{\Huge\bf
+\halign{\quad#&\quad#&\quad#\cr
+\beginrgbcolor{255}{255}{255}
+& LRI& \cr
+LRI& LRI& LRI\cr
+& LRI& \cr}
+\endrgbcolor}
+\xtrans=50pt% on decale le centre de 50pt vers la droite
+\ytrans=50pt% et 50pt vers le haut
+\CercleGeneral{\copy100}{255}{0}{0}{0}{0}{0}{10}
+
+\end{verbatim}
+
+\vskip 1cm
+
+\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
+
+\vskip 1cm
+
+Pour tracer une bo\^\i te dont le contenu est d\'egrad\'e, on programme\ :
+
+\vskip 8mm
+
+\setbox101=\vbox{\hsize=0.68\textwidth\bf%
+\beginrgbcolor{255}{255}{255}%
+Dans un article r\'ecent, nous pr\'esentions
+les avantages d'utilisation de la couleur dans le
+traitement de texte \TeX\ au travers de deux jeux
+de macros~: Color\TeX rgb et color\TeX cmyk fonctionnant
+pour les impri\-man\-tes couleur PostScript des constructeurs\break
+QMS, Oc\'e, Hitachi, Seiko.\endrgbcolor
+\par}
+\horizontaltrue
+\centerline{
+\RectangleDegrade{\copy101}{255}{255}{0}{0}{0}{0}{50}
+}
+
+\begin{verbatim}
+\setbox10=\vbox{\hsize=0.6\textwidth\bf
+\beginrgbcolor{255}{255}{255}% texte blanc
+Dans un article r\'ecent, nous pr\'esentions
+les avantages d'utilisation de la couleur dans le
+traitement de texte \TeX\ au travers de deux jeux
+de macros~: Color\TeX rgb et color\TeX cmyk fonctionnant
+pour les impri\-man\-tes couleur PostScript des constructeurs
+QMS, Oc\'e, Hitachi, Seiko.
+
+\par
+}
+\horizontaltrue % des degrades de haut en bas
+\centerline{%
+\RectangleDegrade{\copy10}{255}{255}{0}{0}{0}{0}{50}}
+\end{verbatim}
+
+\vskip 1cm
+
+\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
+
+Pour tracer les courbes de bezier des figures \ref{extre} et
+\ref{extretwo}, on pourra marquer avec \verb+Pictex+ ou \verb+TexCad+
+les points d\'efinissant les tangentes, puis r\'ecup\'erer la
+valeur de ces points sous \'editeur et programmer :
+
+\begin{verbatim}
+\begin{figure}[th]
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(74.00,61.00)
+\put(0.00,0.00){\framebox(74.00,61.00)[t]{}}
+\put(3.97,10.00){\vector(1,0){28.10}}
+....
+% debut de la premiere courbe de bezier (celle de gauche)
+\put(0,0){\bezierps [ [ 2.06 36.98 6.03 39.00 10.95 39.00
+ 14.03 29.02][14.03 29.02 19.05 16.06 23.02 16.98 30.00 13.97]]
+ \endbezierps{.4}{3}{2}{255}{0}{0}}
+% fin de la premiere courbe de bezier (celle de droite)
+% debut de la 2 courbe de bezier (celle de gauche)
+\put(0,0){\bezierps [[33.97 39.00 37.94 39.00 40.00 37.94
+42.06 34.92] [42.06 34.92 44.92 26.98 50.95 16.98 66.98 12.06]]
+\endbezierps{.4}{3}{2}{255}{0}{0}}
+% fin de la 2 courbe de bezier
+% je place un cercle hachure
+\put(6.03,38){\CercleHachure{4.5}{.5}{.1}{60}{255}{60}{255}{2}}
+\put(42,35){\CarreHachure{4}{.6}{.1}{135}{255}{0}{255}{1}}
+....
+\put(6.03,54){\makebox(0,0)[cc]{$f(x)$}}
+\put(42,54){\makebox(0,0)[cc]{$f(x)$}}
+\end{picture}
+\caption{{\it extremum particulier}}
+\label{extre}
+\end{center}
+\end{figure}
+\end{verbatim}
+
+\begin{figure}[th]
+\begin{center}
+\unitlength=1.00mm
+% \special{em:linewidth 0.4pt}
+\linethickness{0.4pt}
+\begin{picture}(74.00,61.00)
+\put(0.00,0.00){\framebox(74.00,61.00)[t]{}}
+\put(3.97,10.00){\vector(1,0){28.10}}
+\put(39.05,10.00){\vector(1,0){30.00}}
+\put(6.03,7.94){\vector(0,1){39.05}}
+\put(42.06,7.94){\vector(0,1){39.05}}
+\put(9.05,43.97){\makebox(0,0)[lc]{$A(0,a)$}}
+% debut de la premiere courbe de bezier (celle de gauche)
+\put(0,0){\bezierps [ [ 2.06 36.98 6.03 39.00 10.95 39.00
+ 14.03 29.02 ] [ 14.03 29.02 19.05 16.06 23.02 16.98 30.00 13.97 ] ]
+ \endbezierps{.4}{3}{2}{255}{0}{0}}
+%\put(2.06,36.98){\makebox(0,0)[cc]{1}}
+%\put(6.03,40.00){\makebox(0,0)[cc]{2}}
+%\put(10.95,40.00){\makebox(0,0)[cc]{3}}
+%\put(16.03,33.02){\makebox(0,0)[cc]{4}}
+%\put(16.03,33.02){\makebox(0,0)[cc]{5}}
+%\put(19.05,22.06){\makebox(0,0)[cc]{6}}
+%\put(23.02,16.98){\makebox(0,0)[cc]{7}}
+%\put(30.00,13.97){\makebox(0,0)[cc]{8}}
+% fin de la premiere courbe de bezier (celle de gauche)
+% debut de la 2 courbe de bezier (celle de gauche)
+\put(0,0){\bezierps [ [ 33.97 39.00 37.94 39.00 40.00 37.94
+ 42.06 34.92 ] [ 42.06 34.92 44.92 26.98 50.95 16.98 66.98 12.06 ] ]
+ \endbezierps{.4}{3}{2}{255}{0}{0}}
+%\put(33.97,40.00){\makebox(0,0)[cc]{1}}
+%\put(37.94,39.05){\makebox(0,0)[cc]{2}}
+%\put(40.00,37.94){\makebox(0,0)[cc]{3}}
+%\put(42.06,34.92){\makebox(0,0)[cc]{4}}
+%\put(42.06,34.92){\makebox(0,0)[cc]{5}}
+%\put(44.92,26.98){\makebox(0,0)[cc]{6}}
+%\put(50.95,16.98){\makebox(0,0)[cc]{7}}
+%\put(66.98,12.06){\makebox(0,0)[cc]{8}}
+% fin de la 2 courbe de bezier (celle de gauche)
+\put(42.06,34.92){\circle*{1.90}}
+% je place un cercle hachure
+\put(6.03,38){\CercleHachure{4.5}{.5}{.1}{60}{255}{60}{255}{2}}
+\put(42,35){\CarreHachure{6}{.6}{.1}{135}{255}{0}{255}{1}}
+\put(8.5,31){\makebox(0,0)[cc]{$V$}}
+\put(6.03,38.00){\circle*{1.90}}
+\put(30,6){\makebox(0,0)[cc]{$x$}}
+\put(61,6){\makebox(0,0)[cc]{$x$}}
+\put(6.03,54){\makebox(0,0)[cc]{$f(x)$}}
+\put(42,54){\makebox(0,0)[cc]{$f(x)$}}
+\end{picture}
+\caption{{\it extremum particulier}}
+\label{extre}
+\end{center}
+\end{figure}
+
+\begin{verbatim}
+\begin{figure}[th]
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(74.00,61.00)
+\put(0.00,0.00){\framebox(74.00,61.00)[t]{}}
+....
+% debut de la courbe de bezier
+\put(0,0){\bezierps [
+[ 16.03 14.92 20.00 16.03 26.98 39.05 33.97 43.02 ]
+[ 33.97 43.02 42.06 40.95 43.97 20.95 47.94 19.05 ]
+[ 47.94 19.05 52.06 20.95 54.92 49.05 56.98 52.06 ]
+[ 56.98 52.60 60.00 49.05 62.06 32.06 64.92 17.94 ]
+] \endbezierps{.4}{2}{.5}{255}{0}{0}}
+....
+\end{picture}
+\caption{{\it extremums locaux et globaux}}
+\label{extretwo}
+\end{center}
+\end{figure}
+\end{verbatim}
+
+\begin{figure}[th]
+\begin{center}
+\unitlength=1.00mm
+% \special{em:linewidth 0.4pt}
+\linethickness{0.4pt}
+\begin{picture}(74.00,61.00)
+\put(0.00,0.00){\framebox(74.00,61.00)[t]{}}
+\put(10.00,10.95){\vector(1,0){54.92}}
+\put(12.06,7.94){\vector(0,1){48.10}}
+\put(68.00,4.92){\makebox(0,0)[cc]{$x$}}
+% debut de la premiere courbe de bezier (celle de gauche)
+\put(0,0){\bezierps [
+ [ 16.03 14.92 20.00 16.03 26.98 39.05 33.97 43.02 ]
+ [ 33.97 43.02 42.06 40.95 43.97 20.95 47.94 19.05 ]
+ [ 47.94 19.05 52.06 20.95 54.92 49.05 56.98 52.06 ]
+ [ 56.98 52.60 60.00 49.05 62.06 32.06 64.92 17.94 ]
+] \endbezierps{.4}{2}{.5}{255}{0}{0}}
+% \put(16.03,14.92){\makebox(0,0)[cc]{1}}
+%\put(20.00,16.03){\makebox(0,0)[cc]{2}}
+%\put(26.98,39.05){\makebox(0,0)[cc]{3}}
+%\put(33.97,43.02){\makebox(0,0)[cc]{4}}
+%\put(33.97,43.02){\makebox(0,0)[cc]{5}}
+%\put(42.06,40.95){\makebox(0,0)[cc]{6}}
+%\put(43.97,20.95){\makebox(0,0)[cc]{7}}
+%\put(47.94,19.05){\makebox(0,0)[cc]{8}}
+%\put(47.94,19.05){\makebox(0,0)[cc]{9}}
+%\put(52.06,20.95){\makebox(0,0)[cc]{10}}
+%\put(54.92,49.05){\makebox(0,0)[cc]{11}}
+%\put(56.98,52.06){\makebox(0,0)[cc]{12}}
+%\put(56.98,52.06){\makebox(0,0)[cc]{13}}
+%\put(60.00,49.05){\makebox(0,0)[cc]{14}}
+%\put(62.06,32.06){\makebox(0,0)[cb]{15}}
+%\put(64.92,17.94){\makebox(0,0)[cc]{16}}
+\put(20.00,10.06){\line(0,1){12.04}}
+\put(30.00,10.06){\line(0,1){31.04}}
+\put(40.00,10.06){\line(0,1){30.04}}
+\put(50.00,12.06){\line(0,-1){2.04}}
+\put(60.00,12.06){\line(0,-1){2.04}}
+\put(10.95,52.06){\line(1,0){2.14}}
+\put(10.95,43.02){\line(1,0){25.14}}
+\put(10.95,39.02){\line(1,0){21.14}}
+\put(10.95,20.02){\line(1,0){12.00}}
+\put(20.00,4.92){\makebox(0,0)[cc]{$a$}}
+\put(30.00,4.92){\makebox(0,0)[cc]{$b$}}
+\put(40.00,4.92){\makebox(0,0)[cc]{$c$}}
+\put(50.00,4.92){\makebox(0,0)[cc]{$d$}}
+\put(20.00,10.95){\makebox(0,0)[cc]{\bf [}}
+\put(40.00,10.95){\makebox(0,0)[cc]{\bf ]}}
+%\put(6.03,51.06){\makebox(0,0)[cc]{$max$}}
+\put(6.03,56.03){\makebox(0,0)[cc]{$f(x)$}}
+\put(6.03,38.52){\makebox(0,0)[cc]{$f(b)$}}
+\put(6.1,43.02){\makebox(0,0)[cc]{$M$}}
+\end{picture}
+\caption{{\it extremums locaux et globaux}}
+\label{extretwo}
+\end{center}
+\end{figure}
+
+\vskip 1cm
+
+\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
+
+Pour tracer des objets quelconques au moyen de courbes de Bezier dont le
+fond est en couleur, nous programmons :
+
+\begin{verbatim}
+\begin{figure}
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(124,100)
+\put(0,0){\framebox(124,100)[cc]{}}
+\put(20,80){\makebox(0,0)[cc]{\Large\bf\LaTeX}}
+\put(97,5){\makebox(0,0)[cc]{\small
+ $\copyright - lri - 1991$}}
+% Definition de la couleur du contour.
+% Le trait est en pointille.
+\rouge=255\vert=0\bleu=255\dashpstrue
+\put(0.00,0.00){\CourbeFermee [
+[ 20 10 10 50 25 75 50 80 ]
+[ 50 80 25 55 20 10 0 0 ]
+] \endcourbe{1}{1}{1}{255}{0}{0}}
+% Le contour n'est plus en pointille
+\dashpsfalse\closepathfalse
+\rouge=0\vert=0\bleu=255
+\put(0.00,0.00){\CourbeFermee
+ [ [ 70 10 5 90 30 75 40 40 ]
+] \endcourbe{1}{1}{1}{255}{255}{0}}
+\end{picture}
+\caption{{\it Des courbes remplies}}
+\label{f:remplie}
+\end{center}
+\end{figure}
+\end{verbatim}
+
+qui produit le r\'esultat de la figure \ref{f:remplie}
+
+\begin{figure}
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(124,100)
+\put(0,0){\framebox(124,100)[cc]{}}
+\put(20,80){\makebox(0,0)[cc]{\Large\bf\LaTeX}}
+\put(97,5){\makebox(0,0)[cc]{\small $\copyright - lri - 1991$}}
+% Definition de la couleur du contour.
+% Le trait est en pointille.
+\rouge=255\vert=0\bleu=255\dashpstrue
+\put(0.00,0.00){\CourbeFermee [
+[ 20 10 10 50 25 75 50 80 ]
+[ 50 80 25 55 20 10 0 0 ]
+] \endcourbe{1}{1}{1}{255}{0}{0}}
+% Le contour n'est plus en pointille
+\dashpsfalse\closepathfalse
+\rouge=0\vert=0\bleu=255
+\put(0.00,0.00){\CourbeFermee
+ [ [ 70 10 5 90 30 75 40 40 ]
+] \endcourbe{1}{1}{1}{255}{255}{0}}
+\end{picture}
+\caption{{\it Des courbes remplies}}
+\label{f:remplie}
+\end{center}
+\end{figure}
+
+\vskip 1cm
+
+\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
+
+Pour placer du texte le long de courbes de Bezier il faut programmer, par
+exemple, qui produit le r\'esultat de la figure \ref{fd:one} :
+
+\hbox to\textwidth{\hrulefill}
+\lettrepanneau\ Il y a un bug lorsque l'on demande une impression
+\`a une r\'esolution autre que 300dpi : les lettres ne sont pas
+plac\'ees au bon endroit.\par
+\hbox to\textwidth{\hrulefill}
+
+
+\begin{verbatim}
+\Huge\bf
+\BlancInterLettre=1% 1 mm entre les lettres
+\begin{figure}[htp]
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(95,70)
+\put(0,0){\LightBlue\TraceTexte{TraceTexte}
+ {5}{65}{15}{35}{35}{35}{90}{65}\ec}
+\put(0,0){\bcvert\ColleTexte{ColleTexte}
+ {5}{5}{15}{35}{15}{35}{81}{5}\ec}
+\put(0.00,0.00){\framebox(95,70)[cc]{}}
+\end{picture}
+\caption{{\it courbes sur un texte}}
+\label{fd:one}
+\end{center}
+\end{figure}
+\end{verbatim}
+
+{\Huge\bf
+\BlancInterLettre=1% 1 mm entre les lettres
+\begin{figure}[htp]
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(95,70)
+\put(0,0){\LightBlue\TraceTexte{TraceTexte}{5}{65}{15}{35}{35}{35}{90}{65}\ec}
+\put(0,0){\bcvert\ColleTexte{ColleTexte}{5}{5}{15}{35}{15}{35}{81}{5}\ec}
+\put(0.00,0.00){\framebox(95,70)[cc]{}}
+\put(19,48){\circle*{1}}
+\put(23,44){\circle*{1}}
+\put(18,49){\line(1,-1){7}}
+\put(14,43){\line(1,0){10.5}}
+\put(17,45){\makebox(0,0)[cc]{{\small $\alpha$}}}
+\put(11,49){\makebox(0,0)[cc]{{\small $(x',y')$}}}
+\put(18,40.5){\makebox(0,0)[cc]{{\small $(x'',y'')$}}}
+\end{picture}
+\caption{{\it courbes sur un texte}}
+\label{fd:one}
+\end{center}
+\end{figure}
+}
+
+\section*{Manipulation des grilles, des \'echelles gradu\'ees}
+
+Pour tracer une grille simple (sans axes et en ``trait plein'') faites :
+
+\begin{center}
+\unitlength=1mm
+\linethickness{0.4pt}
+\begin{picture}(70,70)
+\put(0.00,0.00){\framebox(70,70)[t]{}}
+\put(10.00,10.00){\Grille(50,50)(2,5){2}{4}{0.1}}
+\end{picture}
+\end{center}
+
+\begin{verbatim}
+\begin{center}
+\unitlength=1mm
+\linethickness{0.4pt}
+\begin{picture}(70,70)
+\put(0.00,0.00){\framebox(70,70)[t]{}}
+\put(10.00,10.00){\Grille(50,50)(2,5){2}{4}{0.1}}
+\end{picture}
+\end{center}
+\end{verbatim}
+
+Pour tracer une grille compl\'et\'e d'axes gradu\'es avec, sur l'axe des
+$x$ des valeurs augmentant de $10$ en $10$ et sur l'axe des $y$ des valeurs
+d'exposant augmentant de $1$ en $1$, vous pouvez faire :
+
+\begin{center}
+\unitlength=1mm
+\linethickness{0.4pt}
+\vinitx=0
+\vincx=10
+\vinity=10
+\vincy=1
+\begin{picture}(70,70)
+\put(0.00,0.00){\framebox(70,70)[t]{}}
+\GridNumPuiss(10,10)(50,50)(2,5){2}{4}{0.1}
+\end{picture}
+\end{center}
+
+\begin{verbatim}
+\begin{center}
+\unitlength=1mm
+\linethickness{0.4pt}
+\vinitx=0
+\vincx=10
+\vinity=10
+\vincy=1
+\begin{picture}(70,70)
+\put(0.00,0.00){\framebox(70,70)[t]{}}
+\GridNumPuiss(10,10)(50,50)(2,5){2}{4}{0.1}
+\end{picture}
+\end{center}
+\end{verbatim}
+
+La variante pour obtenir le dessin qui suit se code :
+
+\begin{center}
+\unitlength=1mm
+\linethickness{0.4pt}
+\vinitx=0
+\vincx=10
+\vinity=0
+\vincy=20
+\begin{picture}(70,70)
+\put(0.00,0.00){\framebox(70,70)[t]{}}
+\GridNumNum(10,10)(50,50)(2,5){2}{4}{0.1}
+\end{picture}
+\end{center}
+
+\begin{verbatim}
+\begin{center}
+\unitlength=1mm
+\linethickness{0.4pt}
+\vinitx=0
+\vincx=10
+\vinity=0
+\vincy=20
+\begin{picture}(70,70)
+\put(0.00,0.00){\framebox(70,70)[t]{}}
+\GridNumNum(10,10)(50,50)(2,5){2}{4}{0.1}
+\end{picture}
+\end{center}
+\end{verbatim}
+
+\section*{Pour tracer des fonctions}
+
+Pour tracer en rouge la fonction $\log_2$ pour x variant entre $0.3$ et
+$5.1$ accompagn\'ee des axes et de la grille de fond pointill\'ee, vous
+pouvez faire :
+
+\begin{center}
+\unitlength=1mm
+\linethickness{0.4pt}
+\begin{picture}(80,80)
+\put(0.00,0.00){\framebox(80,80)[t]{}}
+\dashpstrue
+\put(10.00,10.00){\Grille(65,65)(5,5){3 1 3 1}{1}{0.1}}
+\dashpsfalse
+\put(10,30){\vector(1,0){65}}
+\put(10,10){\vector(0,1){65}}
+\multiputnum(11.5,25)(10,0){7}{0}{1}
+\multiputnum(5,10)(0,10){7}{-2}{1}
+\multiput(8.5,10)(0,10){7}{\traith{3}}
+\multiput(10,28)(10,0){6}{\traitv{4}}
+\rouge=255\vert=0\bleu=0
+\put(10,30){\plotfunction{0.3}{5.1}{1}{1}{0.1}{0}{XX ln 2 ln div}}
+\end{picture}
+\end{center}
+
+\begin{verbatim}
+\begin{center}
+\unitlength=1mm
+\linethickness{0.4pt}
+\begin{picture}(80,80)
+\put(0.00,0.00){\framebox(80,80)[t]{}}
+%%% grille en pointillee
+\dashpstrue
+\put(10.00,10.00){\Grille(65,65)(2,5){3 1 3 1}{1}{0.1}}
+\dashpsfalse% fin des traits pointilles
+%%% les axes
+\put(10,30){\vector(1,0){65}}
+\put(10,10){\vector(0,1){65}}
+\multiputnum(11.5,25)(10,0){7}{0}{1}
+\multiputnum(5,10)(0,10){7}{-2}{1}
+\multiput(8.5,10)(0,10){7}{\traith{3}}
+\multiput(10,28)(10,0){6}{\traitv{4}}
+%%% la fonction
+\put(10,30){\plotfunction{0.3}{5.1}{1}{1}{0.1}{0}%
+ {XX ln 2 ln div}}
+\end{picture}
+\end{center}
+\end{verbatim}
+
+Noter que l'on a pas acc\'es en PostScript \`a la fonction $\log_2$ si bien
+que nous avons d\^u la composer : $\log_2(x)=\frac{ln(x)}{ln(2)}$.
+Reportez vous aux r\'ef\'erences \cite{psu} \cite{psd} et \cite{pst} pour
+obtenir la liste des fonctions (arithm\'etiques\ldots) disponibles en
+PostScript. De plus, il est rappel\'e que le nom de la va\-ria\-ble des
+fonctions est \verb|XX| par convention.
+
+\section*{Manipulation des fl\`eches}
+
+%\ArrowForm{h} % pour obtenir des fleches des deux cotes
+%\ArrowForm{l} % pour obtenir des fleches "a gauche"
+%\ArrowForm{r} % pour obtenir des fleches "a droite"
+%\unitlength=1mm
+%\linethickness{0.4pt}
+%\begin{picture}(36.02,33.01)
+%\put(0.00,0.00){\framebox(36,33)[t]{}}
+%\put(36.00,33.00){\line(-1,0){18.03}}
+%\put(17.97,33.01){\line(0,-1){6.02}}
+%\put(17.97,26.99){\line(1,-1){6.02}}
+%\put(23.98,20.98){\line(1,0){12.03}}
+%\put(36.02,20.98){\line(0,1){12.03}}
+%
+%\put(5.00,33.00){\line(1,0){7.03}}
+%\put(12.03,33.01){\line(0,-1){12.03}}
+%\put(12.03,20.98){\line(-1,0){7.02}}
+%\put(5.02,20.98){\line(0,1){12.03}}
+%\put(5.00,27.00){\line(1,0){7.03}}
+%
+%\put(18.00,12.00){\line(1,0){18.02}}
+%\put(36.02,12.03){\line(0,-1){7.02}}
+%\put(36.02,5.01){\line(-1,0){18.05}}
+%\put(17.97,5.01){\line(0,1){7.02}}
+%
+%\put(9.00,30.00){\circle{4.00}}
+%\put(18.00,32.00){\dashbox{0.5}(18.00,0.00)[cc]{}}
+%\put(18.00,28.00){\dashbox{0.5}(18.00,0.00)[cc]{}}
+%%%% trait qui descend
+%\put(24.00,12.00){\dashbox{0.5}(0.00,-9.00)[cc]{}}
+%\put(18.00,11){\dashbox{0.5}(18.00,0.00)[cc]{}}
+%\put(18.00,7){\dashbox{0.5}(18.00,0.00)[cc]{}}
+%\end{picture}
+
+L'exemple de la Figure \ref{fd:f} illustre les diff\'erentes formes de
+fl\`eches que l'on peut obtenir avec \verb|colorrgb.tex| :
+
+\begin{figure}[htp]
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(135,165)
+\put(0.00,0.00){\framebox(135,165)[t]{}}
+%%% debut des axes
+\put(10,10){\vector(1,0){110}}
+\put(10,10){\vector(0,1){150}}
+\multiputnum(10,5)(10,0){10}{0}{1000}
+\multiputpuissance(5,10)(0,10){15}{10}{1}
+\multiput(8.5,20)(0,10){14}{\traith{3}}
+\multiput(20,8)(10,0){9}{\traitv{4}}
+%%%% fin des echelles graduees
+\dashpstrue\rouge=0\vert=0\bleu=0
+\put(0,0){\dashpsfalse\rouge=0\vert=0\bleu=0%
+ \FlecheSpeciale [
+ [[(C)] [120 10 120 120 120 120 10 120] ]
+ ] \endflechespeciale{h}{1}{3}{2}{4}{0.1}{3}{4}}%
+\put(0,0){\Fleche{[[[()] [10 10 20 20 30 70 40 80]]
+ [[()] [120 150 100 150 40 150 10 150] ]
+ ]} \endfleche{70}{1}{3}{2}{4}{0.1}{3}{4}}%
+\put(0,0){\dashpsfalse\rouge=0\vert=0\bleu=0%
+ \FlecheSpeciale [
+ [[(BB)] [40 80 50 70 60 20 100 10]]
+ ] \endflechespeciale{l}{1}{3}{2}{4}{0.1}{3}{4}}%
+\put(0,0){\dashpstrue\rouge=0\vert=0\bleu=0%
+ \Cotes(10,10)(80,40)[1,0.4][16,36]| [ 3 2 3 2 ] 1 | }
+\put(0,0){\dashpsfalse\rouge=0\vert=0\bleu=0\externefalse
+ \CotesFleche(10,60)(100,80)[1,0.4][16,36]|1 5 2.2| }
+\end{picture}
+\caption{{\it Dessins de fl\`eches}}
+\label{fd:f}
+\end{center}
+\end{figure}
+
+\begin{verbatim}
+\begin{figure}[htp]
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(135,165)
+\put(0.00,0.00){\framebox(135,165)[t]{}}
+%%% debut des axes
+\put(10,10){\vector(1,0){110}}
+\put(10,10){\vector(0,1){150}}
+\multiputnum(10,5)(10,0){10}{0}{1000}
+\multiputpuissance(5,10)(0,10){15}{10}{1}
+\multiput(8.5,20)(0,10){14}{\traith{3}}
+\multiput(20,8)(10,0){9}{\traitv{4}}
+%%%% fin des echelles graduees
+\dashpstrue\rouge=0\vert=0\bleu=0
+\put(0,0){\dashpsfalse\rouge=0\vert=0\bleu=0%
+ \FlecheSpeciale [
+ [[(C)] [120 10 120 120 120 120 10 120] ]
+ ] \endflechespeciale{h}{1}{3}{2}{4}{0.1}{3}{4}}%
+\put(0,0){\Fleche{[[[()] [10 10 20 20 30 70 40 80]]
+ [[()] [120 150 100 150 40 150 10 150] ]
+ ]} \endfleche{70}{1}{3}{2}{4}{0.1}{3}{4}}%
+\put(0,0){\dashpsfalse\rouge=0\vert=0\bleu=0%
+ \FlecheSpeciale [
+ [[(BB)] [40 80 50 70 60 20 100 10]]
+ ] \endflechespeciale{l}{1}{3}{2}{4}{0.1}{3}{4}}%
+\put(0,0){\dashpstrue\rouge=0\vert=0\bleu=0%
+ \Cotes(10,10)(80,40)[1,0.4][16,36]|[ 3 2 3 2 ] 1|}%
+\put(0,0){\dashpsfalse\rouge=0\vert=0\bleu=0\externefalse%
+ \CotesFleche(10,60)(100,80)[1,0.4][16,36]|1 5 2.2|}
+\end{picture}
+\caption{{\it Dessins de fl\`eches}}
+\label{fd:f}
+\end{center}
+\end{figure}
+\end{verbatim}
+
+\section*{Tracer des boites 3D}
+
+Pour tracer des boites 3D vous pouvez vous inspirer du code suivant pour
+obtenir le r\'esultat de la Figure \ref{fd:box} :
+
+\begin{verbatim}
+\begin{figure}[htp]
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(135,135)
+\put(0.00,0.00){\framebox(135,135)[t]{}}
+%%%% debut des boites
+\put(35,10){\TroisDbox{60}{30}{-10}{ 1 0 0 }%
+ { 1 1 0.5 }{2}{1}{5.25}}
+\innerboxfalse
+\put(95,20){\TroisDbox{50}{20}{10}{ 1 0 0 }%
+ { 1 1 0.5 }{1}{1}{1.25}}
+\innerboxtrue
+\put(95,100){\TroisDbox{20}{20}{0}{ 0 0.5 1 }%
+ { 1 1 0.5 }{1}{1}{1.25}}
+%%%% fin des boites
+\put(35,105){\makebox(0,0)[lc]{\large\bf Boites 3D}}
+\end{picture}
+\caption{{\it Boites 3D}}
+\label{fd:box}
+\end{center}
+\end{figure}
+\end{verbatim}
+
+\begin{figure}[htp]
+\begin{center}
+\unitlength=1.00mm
+\linethickness{0.4pt}
+\begin{picture}(135,135)
+\put(0.00,0.00){\framebox(135,135)[t]{}}
+%%%% debut des boites
+\put(35,10){\TroisDbox{60}{30}{-10}{ 1 0 0 }{ 1 1 0.5 }{2}{1}{5.25}}
+\innerboxfalse
+\put(95,20){\TroisDbox{50}{20}{10}{ 1 0 0 }{ 1 1 0.5 }{1}{1}{1.25}}
+\innerboxtrue
+\put(95,100){\TroisDbox{20}{20}{0}{ 0 0.5 1 }{ 1 1 0.5 }{1}{1}{1.25}}
+%%%% fin des boites
+\put(35,105){\makebox(0,0)[lc]{\large\bf Boites 3D}}
+\end{picture}
+\caption{{\it Boites 3D}}
+\label{fd:box}
+\end{center}
+\end{figure}
+
+\section*{Quelques logos de fl\`eches}
+
+Les macros qui suivent permettent\LeftLogoFlecheOne\ de tracer des logos
+repr\'esentant des symboles de fl\`eches ; il s'agit de
+\verb|\LogoFlecheOne| et \verb|LogoFlecheTwo|. De plus, un support est
+pr\'evu pour \'ecrire ces symboles dans la marge gauche au travers des
+macros \verb|\LeftLogoFlecheOne| et \verb|LeftLogoFlecheTwo| que l'on
+place au sein d'un paragraphe.
+
+Par exemple, le symbole\LeftLogoFlecheTwo\ que vous voyez appara\^{\i}tre
+dans la marge gauche est cod\'e :
+
+\begin{verbatim}
+Par exemple, le symbole\LeftLogoFlecheTwo\ que vous voyez
+appara\^{\i}tre dans la marge gauche est cod\'e :
+\end{verbatim}
+
+\section*{Logos informatiques : dessins de stations de travail, de
+disques, de routeurs\ldots}
+
+Voici maintenant un exemple o\`u est r\'esum\'e l'utilisation des symboles
+informatiques :
+
+\begin{center}
+\rouge=0\vert=0\bleu=0% c'est du noir !
+\setlength{\unitlength}{0.11mm}
+\begin{picture}(1020,498)(-580,240)
+\put(-580,240){\framebox(1020,500){}}
+\put(220,260){\small\bf (Amiens)}
+\put(220,300){\small\bf Lamifa}
+\put(-500,260){\small\bf (Rouen)}
+\put(-500,300){\small\bf Crihan}
+\put(-380,660){\small\sf TCP/IP}
+\put(-380,700){\small\sf Ethernet}
+\put(-160,320){\small\sf TCP/IP}
+\put(-160,360){\small\sf Ethernet}
+\put(-200,480){\small\sf France T\'el\'ecom}
+\put(-200,520){\small\sf Num\'eris}
+\put(-280,620){\line(1,0){40}}
+\put(-200,420){\line(0,-1){40}}
+\put(-240,400){\line(1,0){170}}
+\put(-240,440){\line(0,-1){40}}
+\put(-280,480){\line(1,-1){40}}
+\put(-220,500){\line(-3,-1){60}}
+\put(-280,540){\line(3,-2){60}}
+\put(-220,560){\line(-3,-1){60}}
+\put(-260,600){\line(1,-1){40}}
+\put(-260,640){\line(0,-1){40}}
+\put(-400,640){\line(1,0){140}}
+%---- Site du crihan ---------
+\put(-500,340){\SunStation{0.21}{0.85}{0.85}}
+\put(-460,470){\SunServer{0.21}{0.6}{0.7}}
+\put(-565,470){\SunDisk{0.21}{0.6}{0.85}}
+\put(-500,620){\SunRouter{0.21}{1.2}{1.2}}
+\put(-517,282){\closepathfalse%
+\LogoFlecheTwo{0.02}{0.55}{0.55}}
+%---- Site du Lamifa ---------
+\put(218,610){\SunStation{0.21}{0.85}{0.85}}
+\put(55,610){\SunStation{0.21}{0.85}{0.85}}
+\put(218,470){\SunStation{0.21}{0.85}{0.85}}
+\put(218,340){\SunStation{0.21}{0.85}{0.85}}
+\put(55,450){\SunServer{0.21}{0.6}{0.6}}
+\put(62,340){\SunDisk{0.21}{0.6}{0.6}}
+\put(-91,400){\SunRouter{0.21}{1.2}{1.2}}
+\put(200,285){\closepathfalse
+\LogoFlecheOne{0.04}{0.9}{0.9}}
+\end{picture}
+\end{center}
+
+La programmation est la suivante :
+
+\begin{verbatim}
+\rouge=0\vert=0\bleu=0% c'est du noir !
+\setlength{\unitlength}{0.11mm}
+\begin{picture}(1020,498)(-580,240)
+\put(-580,240){\framebox(1020,500){}}
+\put(220,260){\small\bf (Amiens)}
+\put(220,300){\small\bf Lamifa}
+\put(-500,260){\small\bf (Rouen)}
+\put(-500,300){\small\bf Crihan}
+\put(-380,660){\small\sf TCP/IP}
+\put(-380,700){\small\sf Ethernet}
+\put(-160,320){\small\sf TCP/IP}
+\put(-160,360){\small\sf Ethernet}
+\put(-200,480){\small\sf France T\'el\'ecom}
+\put(-200,520){\small\sf Num\'eris}
+\put(-280,620){\line(1,0){40}}
+\put(-200,420){\line(0,-1){40}}
+\put(-240,400){\line(1,0){170}}
+\put(-240,440){\line(0,-1){40}}
+\put(-280,480){\line(1,-1){40}}
+\put(-220,500){\line(-3,-1){60}}
+\put(-280,540){\line(3,-2){60}}
+\put(-220,560){\line(-3,-1){60}}
+\put(-260,600){\line(1,-1){40}}
+\put(-260,640){\line(0,-1){40}}
+\put(-400,640){\line(1,0){140}}
+%---- Site du crihan ---------
+\put(-500,340){\SunStation{0.21}{0.85}{0.85}}
+\put(-460,470){\SunServer{0.21}{0.6}{0.7}}
+\put(-565,470){\SunDisk{0.21}{0.6}{0.85}}
+\put(-500,620){\SunRouter{0.21}{1.2}{1.2}}
+\put(-517,282){\closepathfalse%
+\LogoFlecheTwo{0.02}{0.55}{0.55}}
+%---- Site du Lamifa ---------
+\put(218,610){\SunStation{0.21}{0.85}{0.85}}
+\put(55,610){\SunStation{0.21}{0.85}{0.85}}
+\put(218,470){\SunStation{0.21}{0.85}{0.85}}
+\put(218,340){\SunStation{0.21}{0.85}{0.85}}
+\put(55,450){\SunServer{0.21}{0.6}{0.6}}
+\put(62,340){\SunDisk{0.21}{0.6}{0.6}}
+\put(-91,400){\SunRouter{0.21}{1.2}{1.2}}
+\put(200,285){\closepathfalse
+\LogoFlecheOne{0.04}{0.9}{0.9}}
+\end{picture}
+\end{verbatim}
+
+\end{manpage}
+
+\begin{thebibliography}{99}{\TeX}
+
+\bibitem{cc}Christophe C\'erin et Beno\^\i t Lemaire {\em Vers
+l'introduction de la couleur dans \TeX}, Cahiers GUTenberg num\'ero 5,
+pages .
+
+\bibitem{pst}Adobe Systems Incorporated. {\em PostScript Language
+Reference Manual}, Addison-Wesley, October 1986.
+
+\bibitem{psd}Adobe Systems Incorporated. {\em PostScript Language
+Tutorial and Cookbook}, Addison-Wesley, March 1987.
+
+\bibitem{psu}Adobe Systems Incorporated. {\em PostScript Language Program
+Design}, Addison-Wesley, February 1988.
+
+\bibitem{mt} Donald E.Knuth, {\em The \TeX book}, Addison-Wesley, 1986.
+
+\bibitem{latex} Leslie Lamport. {\em \LaTeX~user's guide \& reference
+Manual}, Addison-Wesley, 1986.
+
+\bibitem{rs} Raymond Seroul, {\em Le petit livre de \TeX}, InterEdition,
+mai 1989.
+
+\end{thebibliography}
+
+\end{document}
diff --git a/macros/latex209/contrib/colortex/color300dpi.ps.gz b/macros/latex209/contrib/colortex/color300dpi.ps.gz
new file mode 100644
index 0000000000..3ebd7e657a
--- /dev/null
+++ b/macros/latex209/contrib/colortex/color300dpi.ps.gz
Binary files differ
diff --git a/macros/latex209/contrib/colortex/color600dpi.ps.gz b/macros/latex209/contrib/colortex/color600dpi.ps.gz
new file mode 100644
index 0000000000..034a14f694
--- /dev/null
+++ b/macros/latex209/contrib/colortex/color600dpi.ps.gz
Binary files differ
diff --git a/macros/latex209/contrib/colortex/colorrap.sty.gz b/macros/latex209/contrib/colortex/colorrap.sty.gz
new file mode 100644
index 0000000000..4567bfbb6c
--- /dev/null
+++ b/macros/latex209/contrib/colortex/colorrap.sty.gz
Binary files differ
diff --git a/macros/latex209/contrib/colortex/colorrgb.tex b/macros/latex209/contrib/colortex/colorrgb.tex
new file mode 100644
index 0000000000..3c66a44e1f
--- /dev/null
+++ b/macros/latex209/contrib/colortex/colorrgb.tex
@@ -0,0 +1,2023 @@
+%
+% ColorRgb.tex version 3.3 au 17-12-1993
+% for PostScript printers.
+%
+% ColorRgb.tex is a set of color macros for TeX & LaTeX written by:
+%
+% Christophe C\'erin
+%
+% Universit\'e de Paris Sud Universit\'e de Picardie Jules Verne
+% L.R.I bat 490 UFR Maths & Informatique
+% 91405 ORSAY France 33, rue St Leu
+% email: cerin@lri.lri.fr 80039 Amiens France
+%
+% from a initial version named "Colorrgb.tex 2.9" in collaboration with
+% Benoit Lemaire.
+%
+% Permission is granted for use and non-profit distribution of rgb.tex
+% providing that this notice be clearly maintained, but the right to
+% distribute any portion of color/tex for profit or as part of any commercial
+% product is specifically reserved for the author.
+%
+% compatibilities : LaTeX : use of variables \fboxsep and \fboxrule in \fboxc
+%
+\ifx\colorrgbloaded\relax\let\next\endinput
+\else \let\colorrgbloaded\relax\let\next\relax \fi
+\next
+\catcode`\@=11\relax%
+\newwrite\@unused%
+\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}%
+\typeout{ColorRgb.tex 3.3 by Christophe Cerin}%
+\typeout{ColorRgb.tex 3.3 for PostScript Laser Printer and dvips driver}%
+\typeout{ColorRgb.tex 3.3 release, 17-12-1993}%
+%
+%-------RGB---------
+\def\beginrgbcolor#1#2#3{%
+ \special{ps::[begin]%
+ currentrgbcolor #1 255 div #2 255 div #3 255 div setrgbcolor}}
+\def\endrgbcolor{%
+ \special{ps::[end] setrgbcolor}}
+
+\def\rgbcolor#1#2#3{\aftergroup\endrgbcolor%
+ \beginrgbcolor{#1}{#2}{#3}}
+%-------HSB--------
+\def\beginhsbcolor#1#2#3{%
+ \special{ps::[begin]%
+ currenthsbcolor #1 255 div #2 255 div #3 255 div sethsbcolor}}
+\def\endhsbcolor{%
+ \special{ps::[end] sethsbcolor}}
+
+\def\hsbcolor#1#2#3{\aftergroup\endhsbcolor%
+ \beginhsbcolor{#1}{#2}{#3}}
+%-------CMYK--------
+\def\begincymkcolor#1#2#3#4{%
+ \special{ps::[begin]%
+ currentcymkcolor #1 255 div #2 255 div %
+ #3 255 div #4 255 div setcymkcolor}}
+\def\endcymkcolor{%
+ \special{ps::[end] setcymkcolor}}
+
+\def\cymkcolor#1#2#3#4{\aftergroup\endcymkcolor%
+ \begincymkcolor{#1}{#2}{#3}{4}}
+%------------------
+% Init forme des traits
+\countdef\CCap=90
+\countdef\Join=91
+\CCap=1\Join=1
+\def\InitCapJoinMatrix#1#2{%
+\ifnum #1 >2 #2 > 2 #1 < 0 #2 < 0 {%
+ \typeout{***bad argument range in function InitCapJoinMatrix}
+}\else{%
+ \CCap=#1\Join=#2%
+}
+\fi
+}
+
+\def\SetCapJoinMatrix#1#2{%
+% modification de la facon de terminer les traits :
+% si #1 = 0 alors terminaison de trait nette
+% si #1 = 1 alors terminaison de trait arrondi centre'
+% si #1 = 2 alors terminaison de trait carre'
+% si #2 = 0 alors angle de trait carre
+% si #2 = 1 alors angle de trait arrondi
+% si #2 = 2 alors angle de trait carre
+\ifnum #1 >2 #2 > 2 #1 < 0 #2 < 0 {%
+ \typeout{***bad argument range in function InitCapJoinMatrix}
+}\else%
+ (\the\CCap ) cvi setlinecap (\the\Join ) cvi setlinejoin %
+\fi
+}
+%------------------
+% boite dont le contour est trac\'e en couleur :
+% il s'agit de la meme definition que celle fournit dans Latex.tex 1.09
+% et utilise les variables \fboxrule et \fboxsep : elle ne peut donc
+% s'utiliser directement que sous LaTeX
+% appel \fboxcolor{text}{red}{green}{bleu}
+\def\fboxcolor#1#2#3#4{\leavevmode%
+ \setbox\@tempboxa\hbox{#1}\@tempdima\fboxrule%
+ \advance\@tempdima \fboxsep \advance\@tempdima\dp\@tempboxa%
+ \beginrgbcolor{#2}{#3}{#4}%
+ \hbox{\lower\@tempdima\hbox%
+ {\vbox{\hrule\@height\fboxrule%
+ \hbox{\vrule\@width\fboxrule\hskip\fboxsep%
+ \vbox{\vskip\fboxsep\endrgbcolor\box\@tempboxa%
+ \beginrgbcolor{#2}{#3}{#4}\vskip\fboxsep}%
+ \hskip 1pt%
+ \hskip\fboxsep\vrule\@width\fboxrule}%
+ \hrule\@height\fboxrule}}}\endrgbcolor}%
+
+% \boxcolor : boite dont le contenu est en couleur,
+% on utilise les variables \fboxrule et \fboxsep : elle ne peut donc
+% s'utiliser directement que sous LaTeX. De plus, on utilise la boite
+% \@myboxb et la dimension \@mydimb afin de pouvoir effectuer un \fboxcolor
+% qui n'aurait pas ete possible avec l'utilisation de \@tempboxa (conflit
+% de variable)
+% appel \boxcolor{text}{red}{green}{bleu}
+\def\boxcolor#1#2#3#4{\leavevmode%
+ \newbox\@myboxb\newdimen\@mydimb%
+ \setbox\@myboxb\hbox{\hskip\fboxsep\hbox{#1}%
+ \hskip\fboxsep}\@mydimb\fboxrule%
+ \advance\@mydimb\dp\@myboxb%
+ \beginrgbcolor{#2}{#3}{#4}%
+ \hbox{%\hskip\fboxsep%
+ \lower\@mydimb\hbox%
+ {\vbox{\hsize=\ht\@myboxb\vsize=\wd\@myboxb%
+ \hbox{\vrule\@width\wd\@myboxb%
+ \hskip-\wd\@myboxb%
+ \vbox{\endrgbcolor%
+ \vskip\fboxsep\box\@myboxb\vskip\fboxsep}%
+}}}}}%
+
+\def\underlinecolor#1#2#3#4{%
+ \newbox\@myboxbb\newbox\@myboxcc%
+ \setbox\@myboxbb=\hbox{#1}%
+ \setbox\@myboxcc=\hbox{\beginrgbcolor{#2}{#3}{#4}%
+ \vrule height .5pt depth 0pt width \wd\@myboxbb\endrgbcolor}
+ \hbox{\raise -2.8pt\vbox{\offinterlineskip\@myboxbb\@myboxcc}}}
+
+
+\countdef\rouge=112% contient la valeur de la composante rouge
+\countdef\vert=113% contient la valeur de la composante vert
+\countdef\bleu=114% contient la valeur de la composante bleu
+\countdef\increrouge=115% contient la valeur de l'increment du rouge
+\countdef\increvert=116% contient la valeur de l'increment du vert
+\countdef\increbleu=117% contient la valeur de l'increment du bleu
+\countdef\modulo=118% valeur du nombre de lettres dans la meme couleur
+\countdef\sauverouge=119% contient la valeur de la composante rouge sauvegardee
+\countdef\sauvevert=120% contient la valeur de la composante vert sauvegardee
+\countdef\sauvebleu=121% contient la valeur de la composante bleu sauvegardee
+\countdef\maxrouge=122% contient la valeur de la composante rouge maximale
+\countdef\maxvert=123% contient la valeur de la composante vert maximale
+\countdef\maxbleu=124% contient la valeur de la composante bleu maximale
+% procedure d'initialisation des couleurs, utilisation :
+% \initcolor{rouge}{vert}{bleu}{maxrouge}{maxvert}{maxbleu}{modulo}
+\def\initcolor#1#2#3#4#5#6#7{% procedure d'initialisation des couleurs
+ \rouge=#1\vert=#2\bleu=#3\modulo=#7%
+ \sauverouge=#1\sauvevert=#2\sauvebleu=#3%
+ \maxrouge=#4\maxvert=#5\maxbleu=#6}
+\def\initinc#1#2#3{% procedure d'initialisation des increments
+ \increrouge=#1\increvert=#2\increbleu=#3}
+\def\incrouge#1{%
+ \global\advance\rouge by #1}
+\def\incvert#1{%
+ \global\advance\vert by #1}
+\def\incbleu#1{%
+ \global\advance\bleu by #1}
+\def\decrouge#1{%
+ \global\advance\rouge by -#1}
+\def\decvert#1{%
+ \global\advance\vert by -#1}
+\def\decbleu#1{%
+ \global\advance\bleu by -#1}
+\def\incmodulo#1{% procedure d'increment du modulo
+ \global\advance\modulo by #1}
+\initcolor{20}{20}{20}{210}{210}{210}{1}%
+\initinc{40}{40}{40}%
+% La procedure echelon prend une chaine de caracteres et imprime les
+% modulo premiers caracteres dans la couleur specifiee par les 3 composantes
+% rouge, vert, bleu puis incremente chaque composante d'une valeur, puis imprime
+% encore modulo caracteres dans cette nouvelle couleur jusqu'a ce que modulo
+% atteigne une borne max. Dans ce cas on recommence l'affichage des modulo
+% caracteres suivants a partir de la couleur du
+% tout debut qui est constituee par les variables \sauvexxx.
+% Utilisation :
+% texte texte .....
+% \initcolor{rouge}{vert}{bleu}{maxrouge}{maxvert}{maxbleu}{modulo}
+% \initinc{incrouge}{incvert}{incbleu}
+% \echelon{blablabla}
+% texte texte .....
+\def\echelon#1{\echelons[#1]}
+\def\echelons#1{\def\tete{}%
+ \countdef\myinc=200%
+ \myinc=1%
+ \def\ECHELON##1{\ifx##1]%
+ \def\next{\tete}%
+ \else\ifnum\myinc>\modulo{%
+ \ifnum\sauverouge<\maxrouge
+ {\incrouge{\the\increrouge}}%
+ \else
+ {\decrouge{\the\increrouge}}%
+ \fi
+ \ifnum\sauvevert<\maxvert
+ {\incvert{\the\increvert}}%
+ \else
+ {\decvert{\the\increvert}}%
+ \fi
+ \ifnum\sauvebleu<\maxbleu
+ {\incbleu{\the\increbleu}}%
+ \else
+ {\decbleu{\the\increbleu}}%
+ \fi
+ \multiply\myinc by 0%
+ \global\advance\myinc by 2%
+ }\else{%
+ \global\advance\myinc by 1%
+ }\fi
+ \ifnum\sauverouge<\maxrouge
+ {\ifnum\rouge>\maxrouge{%
+ \global\rouge=\sauverouge%
+ }\fi}%
+ \else
+ {\ifnum\rouge<\maxrouge{%
+ \global\rouge=\sauverouge%
+ }\fi}%
+ \fi%
+ \ifnum\sauvevert<\maxvert
+ {\ifnum\vert>\maxvert{%
+ \global\vert=\sauvevert%
+ }\fi}%
+ \else
+ {\ifnum\vert<\maxvert{%
+ \global\vert=\sauvevert%
+ }\fi}%
+ \fi%
+ \ifnum\sauvebleu<\maxbleu
+ {\ifnum\bleu>\maxbleu{%
+ \global\bleu=\sauvebleu%
+ }\fi}%
+ \else
+ {\ifnum\bleu<\maxbleu{%
+ \global\bleu=\sauvebleu%
+ }\fi}%
+ \fi%
+ \edef\tete{\tete\beginrgbcolor{\number\rouge}{\number\vert}{\number\bleu}##1\endrgbcolor}%
+ \let\next=\ECHELON\fi%
+ \next}\ECHELON}
+
+% La procedure dentdescie prend une chaine de caracteres et imprime les
+% modulo premiers caracteres dans la couleur specifiee par les 3 composantes
+% rouge, vert, bleu puis incremente chaque composante d'une valeur, puis imprime
+% encore modulo caracteres dans cette nouvelle couleur jusqu'a ce que modulo
+% atteigne une borne max. Dans ce cas on recommence l'affichage des modulo
+% caracteres suivants en decrementant les couleurs jusqu'aux valeurs initiales
+% qui sont sauvegardees dans les variables \sauvexxx. La variable globale
+% \sens initialisee a 1 determine un eclaircissement des couleurs, alors que
+% sens = 0 determine un noircissement des couleurs.
+% Utilisation :
+% texte texte .....
+% \initcolor{rouge}{vert}{bleu}{maxrouge}{maxvert}{maxbleu}{modulo}
+% \initinc{incrouge}{incvert}{incbleu}
+% \sens=1%
+% \dentdescie{blablabla}
+% texte texte .....
+\countdef\sens=201%
+\sens=1% pour eclaircir et 0 pour noircir
+\def\dentdescie#1{\dentdescies[#1]}
+\def\dentdescies#1{\def\tete{}%
+ \countdef\myinc=200%
+ \myinc=1%
+ \def\DENTDESCIE##1{\ifx##1]%
+ \def\next{\tete}%
+ \else\ifnum\myinc>\modulo{%
+ \ifnum\sens>0{%
+ \incrouge{\the\increrouge}%
+ \incvert{\the\increvert}%
+ \incbleu{\the\increbleu}%
+ }\else{%
+ \decrouge{\the\increrouge}%
+ \decvert{\the\increvert}%
+ \decbleu{\the\increbleu}%
+ }\fi%
+ \global\myinc=2%
+ }\else{%
+ \global\advance\myinc by 1%
+ }\fi
+ \ifnum\rouge>\maxrouge{%
+ \global\rouge=\maxrouge%
+ \global\sens=0%
+ }\fi%
+ \ifnum\vert>\maxvert{%
+ \global\sens=0%
+ \global\vert=\maxvert%
+ }\fi%
+ \ifnum\bleu>\maxbleu{%
+ \global\bleu=\maxbleu%
+ \global\sens=0%
+ }\fi%
+ \ifnum\rouge<\sauverouge{%
+ \global\rouge=\sauverouge%
+ \global\sens=1%
+ }\fi%
+ \ifnum\vert<\sauvevert{%
+ \global\sens=1%
+ \global\vert=\sauvevert%
+ }\fi%
+ \ifnum\bleu<\sauvebleu{%
+ \global\bleu=\sauvebleu%
+ \global\sens=1%
+ }\fi%
+ \edef\tete{\tete\beginrgbcolor{\number\rouge}{\number\vert}{\number\bleu}##1\endrgbcolor}%
+ \let\next=\DENTDESCIE\fi%
+ \next}\DENTDESCIE}
+
+%La macro degrade prend une chaine de caracteres puis repartit uniformement
+%les gammes de couleurs definies par initcolor sur l'ensemble de la chaine
+\def\degrade#1{%
+ \countdef\lg=220%
+ \longueur[#1]%
+ \ifnum\lg=0{%
+ \typeout{macro degrade : parametre vide}}
+ \else{%
+ \ifnum\lg>1{%
+ \global\advance\lg by -1% astuce des piquets et des barrieres
+ \ifnum\sauverouge<\maxrouge{%
+ \increrouge=\maxrouge%
+ \global\advance\increrouge by -\sauverouge}%
+ \else{%
+ \increrouge=\sauverouge%
+ \global\advance\increrouge by -\maxrouge}%
+ \fi
+ \global\divide\increrouge by \lg%
+ \ifnum\sauvevert<\maxvert{%
+ \increvert=\maxvert%
+ \global\advance\increvert by -\sauvevert}%
+ \else{%
+ \increvert=\sauvevert%
+ \global\advance\increvert by -\maxvert}%
+ \fi
+ \global\divide\increvert by \lg%
+ \ifnum\sauvebleu<\maxbleu{%
+ \increbleu=\maxbleu%
+ \global\advance\increbleu by -\sauvebleu}%
+ \else{%
+ \increbleu=\sauvebleu%
+ \global\advance\increbleu by -\maxbleu}%
+ \fi
+ \global\divide\increbleu by \lg}%
+ \fi%
+ \echelons[#1]}%
+ \fi}%
+
+
+%La macro longueur calcule la longueur d'une chaine. Le resultat est stocke
+%dans la variable globale \lg. Le parametre doit etre entre crochets
+\def\longueur#1{%
+ \lg=0%
+ \def\LONGUEUR##1{%
+ \ifx##1]%
+ \def\next{}%
+ \else%
+ \global\advance\lg by 1%
+ \let\next=\LONGUEUR%
+ \fi
+ \next}
+ \LONGUEUR}
+
+% quelques redefinitions
+
+\def\icone{
+ \item[\beginrgbcolor{255}{255}{0}$\bullet$\endcolor]}
+\def\ictwo{
+ \item[\beginrgbcolor{255}{255}{0}$\bf\diamond$\endcolor]}
+\def\bcrouge{\beginrgbcolor{255}{0}{0}}
+\def\bcbleu{\beginrgbcolor{0}{0}{255}}
+\def\bcjaune{\beginrgbcolor{255}{255}{0}}
+\def\bcvert{\beginrgbcolor{0}{255}{0}}
+\def\bcmauve{\beginrgbcolor{255}{255}{0}}
+\def\bcmagenta{\beginrgbcolor{0}{255}{0}}
+\def\bcorange{\beginrgbcolor{0}{153}{255}}
+\def\bcvj{\beginrgbcolor{153}{51}{255}}
+\def\bcblanc{\beginrgbcolor{255}{255}{255}}
+\def\ec{\endrgbcolor}
+\def\aquamarine{\beginrgbcolor{112}{219}{147}}
+\def\MediumAquamarine{\beginrgbcolor{50}{204}{153}}
+\def\black{\beginrgbcolor{0}{0}{0}}
+\def\blue{\beginrgbcolor{0}{0}{255}}
+\def\CadetBlue{\beginrgbcolor{95}{159}{159}}
+\def\CornflowerBlue{\beginrgbcolor{66}{66}{111}}
+\def\DarkSlateBlue{\beginrgbcolor{107}{35}{142}}
+\def\LightBlue{\beginrgbcolor{191}{216}{216}}
+\def\LightSteelBlue{\beginrgbcolor{143}{143}{188}}
+\def\MediumBlue{\beginrgbcolor{50}{50}{204}}
+\def\MediumSlateBlue{\beginrgbcolor{127}{0}{255}}
+\def\MidnightBlue{\beginrgbcolor{47}{47}{79}}
+\def\NavyBlue{\beginrgbcolor{35}{35}{142}}
+\def\navy{\beginrgbcolor{35}{35}{142}}
+\def\SkyBlue{\beginrgbcolor{50}{153}{204}}
+\def\SlateBlue{\beginrgbcolor{0}{127}{255}}
+\def\SteelBlue{\beginrgbcolor{35}{107}{142}}
+\def\coral{\beginrgbcolor{255}{127}{0}}
+\def\cyan{\beginrgbcolor{0}{255}{255}}
+\def\purple{\beginrgbcolor{176}{0}{255}}
+\def\firebrick{\beginrgbcolor{142}{35}{35}}
+\def\brown{\beginrgbcolor{165}{42}{42}}
+\def\SandyBrown{\beginrgbcolor{244}{164}{96}}
+\def\gold{\beginrgbcolor{204}{127}{50}}
+\def\goldenrod{\beginrgbcolor{219}{219}{112}}
+\def\MediumGoldenrod{\beginrgbcolor{234}{234}{173}}
+\def\green{\beginrgbcolor{0}{255}{0}}
+\def\DarkGreen{\beginrgbcolor{47}{79}{47}}
+\def\DarkOliveGreen{\beginrgbcolor{79}{79}{47}}
+\def\ForestGreen{\beginrgbcolor{35}{142}{35}}
+\def\LimeGreen{\beginrgbcolor{50}{204}{50}}
+\def\MediumForestGreen{\beginrgbcolor{107}{142}{35}}
+\def\MediumSeaGreen{\beginrgbcolor{66}{111}{66}}
+\def\MediumSpringGreen{\beginrgbcolor{127}{255}{0}}
+\def\PaleGreen{\beginrgbcolor{143}{188}{143}}
+\def\SeaGreen{\beginrgbcolor{35}{142}{107}}
+\def\SpringGreen{\beginrgbcolor{0}{255}{127}}
+\def\YellowGreen{\beginrgbcolor{153}{204}{50}}
+\def\DarkSlateGrey{\beginrgbcolor{47}{79}{79}}
+\def\DarkSlateGray{\beginrgbcolor{47}{79}{79}}
+\def\DimGrey{\beginrgbcolor{84}{84}{84}}
+\def\DimGray{\beginrgbcolor{84}{84}{84}}
+\def\LightGrey{\beginrgbcolor{168}{168}{168}}
+\def\LightGray{\beginrgbcolor{168}{168}{168}}
+\def\gray{\beginrgbcolor{192}{192}{192}}
+\def\grey{\beginrgbcolor{192}{192}{192}}
+\def\khaki{\beginrgbcolor{159}{159}{95}}
+\def\magenta{\beginrgbcolor{255}{0}{255}}
+\def\maroon{\beginrgbcolor{142}{35}{107}}
+\def\orange{\beginrgbcolor{204}{50}{50}}
+\def\orchid{\beginrgbcolor{219}{112}{219}}
+\def\DarkOrchid{\beginrgbcolor{153}{50}{204}}
+\def\MediumOrchid{\beginrgbcolor{147}{112}{219}}
+\def\pink{\beginrgbcolor{188}{143}{143}}
+\def\plum{\beginrgbcolor{234}{173}{234}}
+\def\red{\beginrgbcolor{255}{0}{0}}
+\def\IndianRed{\beginrgbcolor{79}{47}{47}}
+\def\MediumVioletRed{\beginrgbcolor{219}{112}{147}}
+\def\OrangeRed{\beginrgbcolor{255}{0}{127}}
+\def\VioletRed{\beginrgbcolor{204}{50}{153}}
+\def\salmon{\beginrgbcolor{111}{66}{66}}
+\def\sienna{\beginrgbcolor{142}{107}{35}}
+\def\tan{\beginrgbcolor{219}{147}{112}}
+\def\thistle{\beginrgbcolor{216}{191}{216}}
+\def\turquoise{\beginrgbcolor{173}{234}{234}}
+\def\DarkTurquoise{\beginrgbcolor{112}{147}{219}}
+\def\MediumTurquoise{\beginrgbcolor{112}{219}{219}}
+\def\violet{\beginrgbcolor{79}{47}{79}}
+\def\BlueViolet{\beginrgbcolor{159}{95}{159}}
+\def\wheat{\beginrgbcolor{216}{216}{191}}
+\def\white{\beginrgbcolor{255}{255}{255}}
+\def\yellow{\beginrgbcolor{255}{255}{0}}
+\def\GreenYellow{\beginrgbcolor{147}{219}{112}}
+
+%---Definitions des macros pour tracer des cercles.
+
+\def\PScouleur#1#2#3#4#5#6{%
+% le parametre #4 est de la forme 123.24556pt : le "pt" est de
+% trop ce qui necessite le traitement avec la macro /pttt pour
+% recuperer le reel 123.24556. Le parametre #6 represente la couleur.
+\ifcase #6\or\special{"gsave
+ /pttt (#4) (pt) search pop 3 1 roll pop pop cvr def
+ 0 0 moveto
+ currentpoint translate
+ #2 #2 #3 sub #5 div cvi neg #3{
+% newpath dup /valeur exch def
+ newpath /valeur exch def
+ valeur 255 div 0 0 setrgbcolor
+ 0 0 moveto
+ 0 0 valeur #3 sub #2 #3 sub div
+ pttt mul 72 div 35 mul 0 360 arc fill
+ closepath
+ } for
+ grestore}
+\or\special{"gsave
+ /pttt (#4) (pt) search pop 3 1 roll pop pop cvr def
+ 0 0 moveto
+ currentpoint translate
+ #2 #2 #3 sub #5 div cvi neg #3{
+ newpath /valeur exch def
+ 0 valeur 255 div 0 setrgbcolor
+ 0 0 moveto
+ 0 0 valeur #3 sub #2 #3 sub div
+ pttt mul 72 div 35 mul 0 360 arc fill
+ closepath
+ } for
+ grestore}
+\or\special{"gsave
+ /pttt (#4) (pt) search pop 3 1 roll pop pop cvr def
+ 0 0 moveto
+ currentpoint translate
+ #2 #2 #3 sub #5 div cvi neg #3{
+ newpath /valeur exch def
+ 0 0 valeur 255 div setrgbcolor
+ 0 0 moveto
+ 0 0 valeur #3 sub #2 #3 sub div
+ pttt mul 72 div 35 mul 0 360 arc fill
+ closepath
+ } for
+ grestore}\fi}
+
+\def\CercleCouleurRGB#1#2#3#4#5#6{%
+% appel : \CercleCouleurRouge{texte}{max}{min}{rayon}{nb-nuances}
+% trace un cercle degrade autour du texte "texte" en commencant
+% par un grand cercle de rayon max "max" jusqu'au petit cercle de
+% rayon min "min" en tracant "nb-nuances" nuances de couleur
+\dimen4=#4
+\divide\dimen4 by 2
+\hbox{\hsize\dimen4\hskip\dimen4
+ \vbox to #4{\vskip\dimen4
+ \PScouleur{#1}{#2}{#3}{#4}{#5}{#6}
+ }%
+ \hskip-\dimen4\hskip8pt
+ \setbox1=\hbox{#1}%
+ \dimen5=\wd1%
+ \divide\dimen5 by 2%
+ \raise\dimen5\vbox{\hbox{#1}}
+}}
+
+\def\CercleCouleur#1#2#3#4#5{%
+% appel : \CercleCouleur{texte}{max}{min}{couleur}{nb-nuances}
+% trace un cercle degrade autour du texte "texte" en commencant
+% par un grand cercle de couleur "max" jusqu'au petit cercle de
+% couleur "min" en tracant "nb-nuances" nuances de couleur
+% "couleur"
+\setbox3\hbox{#1}\newdimen\rayon
+\ifdim\ht3>\wd3%
+ \rayon=\ht3%
+\else%
+ \rayon=\wd3%
+\fi%
+\advance\rayon by 16pt
+%\typeout{rayon = \the\rayon}
+% diametre du cercle = (max{largueur texte, hauteur texte} + 16pt)
+\ifnum #2 > 255 #3 <0
+ \typeout{Les parametres de CercleCouleur sont incorrectes !!!}
+\else
+ \ifcase #4\or\CercleCouleurRGB{#1}{#2}{#3}{\the\rayon}{#5}{1}
+ \or\CercleCouleurRGB{#1}{#2}{#3}{\the\rayon}{#5}{2}
+ \or\CercleCouleurRGB{#1}{#2}{#3}{\the\rayon}{#5}{3}
+ \fi
+ \ifnum #4 > 3
+ \typeout{+++++Mauvais parametre dans Cercle Couleur : #4}
+ \fi
+\fi
+}
+
+%--------definitions generales des cercles en couleur-------------
+
+% ces variables determinent l'offset du clipping path
+\newdimen\xtrans\xtrans=0pt
+\newdimen\ytrans\ytrans=0pt
+
+\def\PSgenerale#1#2#3#4#5#6#7#8{%
+% le parametre #9 est de la forme 123.24556pt : le "pt" est de
+% trop ce qui necessite le traitement avec la macro /pttt pour
+% recuperer le reel 123.24556.
+\special{"gsave
+ /pttt (#8) (pt) search pop 3 1 roll pop pop cvr def
+ /xtrans (\the\xtrans ) (pt) search pop 3 1 roll pop pop cvr def
+ /ytrans (\the\ytrans ) (pt) search pop 3 1 roll pop pop cvr def
+ /offsetrayon {xtrans dup mul ytrans dup mul add sqrt 2 mul} def
+ /valeurrouge #1 def
+ /valeurvert #2 def
+ /valeurbleu #3 def
+ 0 0 moveto
+ currentpoint translate
+ newpath
+ 0 0 moveto
+ 0 0 #1 #4 sub #1 #4 sub div
+ pttt mul 72 div 35 mul 0 360 arc
+ closepath clip
+ xtrans ytrans translate
+ #1 #1 #4 sub #7 1 sub div cvi neg #4{
+ newpath
+ /valeur exch def
+ valeurrouge 255 div
+ valeurvert 255 div
+ valeurbleu 255 div
+ setrgbcolor
+ 0 0 moveto
+ 0 0 valeur #4 sub #1 #4 sub div
+ pttt offsetrayon add mul 0.5 mul 0 360 arc fill
+ stroke
+ /valeurrouge valeurrouge #1 #3 sub #7 div cvi neg add def
+ /valeurvert valeurvert #2 #5 sub #7 div cvi neg add def
+ /valeurbleu valeurbleu #3 #6 sub #7 div cvi neg add def
+ } for
+ grestore}
+}
+
+\def\CercleGRGB#1#2#3#4#5#6#7#8#9{%
+% appel : \CercleGRGB{texte}{rouge}{vert}{bleu}
+% {maxrouge}{maxvert}{maxbleu}{nb-nuances}{rayon}
+% trace un cercle degrade autour du texte "texte" en commencant
+% par un grand cercle de couleur "rouge"+"vert"+"bleu" jusqu'au
+% petit cercle de couleur "maxrouge"+"maxvert"+"maxbleu" en tracant
+% "nb-nuances=#8" nuances de couleur
+\dimen4=#9%
+\divide\dimen4 by 2%
+\dimen5\dimen4
+%\advance\dimen5 by 16pt
+\hbox to #9{\hskip\dimen5
+ \vbox to #9{\vskip\dimen4%
+ \PSgenerale{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}%
+ }%
+ \hskip-\dimen5%\hskip-6pt
+ \setbox1=\hbox{#1}%
+ \dimen5=#9\divide\dimen5 by 2%
+ \dimen4=\ht1\divide\dimen4 by 2
+ \advance\dimen5 by -\dimen4
+ \raise\dimen5\vbox{\hbox{#1}}
+}}
+
+\def\CercleGeneral#1#2#3#4#5#6#7#8{%
+% appel : \CercleGeneral{texte}{rouge}{vert}{bleu}{maxrouge}
+% {maxvert}{maxbleu}{nb-nuances}
+% trace un cercle degrade autour du texte "texte" en commencant
+% par un grand cercle de couleur "rouge"+"vert"+bleu" jusqu'au
+% petit cercle de couleur "maxrouge"+"maxvert"+"maxbleu" en tracant
+% "nb-nuances" nuances de couleur.
+\setbox3\hbox{#1}\newdimen\rayon%
+\ifdim\ht3>\wd3%
+ \rayon=\ht3%
+\else%
+ \rayon=\wd3%
+\fi%
+\advance\rayon by 16pt%
+%\typeout{rayon = \the\rayon}
+% diametre du cercle = (max{largueur texte, hauteur texte} + 16pt)
+\ifnum #2 > 255 #5 <0 #3 > 255 #6 <0 #4 > 255 #7 <0%
+ \typeout{Les parametres de CercleGeneral sont incorrects !!!}
+\else
+ \CercleGRGB{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{\the\rayon}%
+\fi
+}
+
+%--------definitions generales des rectancles degrades en couleur-------
+
+\newif\ifhorizontal% determine le "sens" du degrade : gauche-droite
+\horizontaltrue % ou haut-bas
+
+\def\PSrectangle#1#2#3#4#5#6#7#8{%
+% trace un rectangle divise en #7 rectangles chacun dans une couleur
+% differente. Si \ifhorizontal est vrai alors les rectangles sont empiles
+% horizontalement, sinon verticalement. Le parametre #8==la boite
+% dont on peut extraire la hauteur et la largueur.
+% ATTENTION : on ecrit des commandes \TeX au milieu d'un ordre
+% \special !!!
+\setbox6\hbox{#8}
+\special{" gsave
+ \SetCapJoinMatrix{\the\CCap}{\the\Join}
+ /pthauteur (\the\ht6) (pt) search pop 3 1 roll pop pop cvr def
+ /ptlargueur (\the\wd6) (pt) search pop 3 1 roll pop pop cvr def
+ /valeurrouge #1 def
+ /valeurvert #2 def
+ /valeurbleu #3 def
+ 0 0 moveto
+ currentpoint translate
+ \ifhorizontal
+ #1 #1 #4 sub #7 1 sub div cvi neg #4{
+ pop
+ valeurrouge 255 div abs
+ valeurvert 255 div abs
+ valeurbleu 255 div abs
+ setrgbcolor
+ newpath
+ 0 0 moveto
+ ptlargueur 0 rlineto
+ 0 pthauteur #7 div neg rlineto
+ ptlargueur neg 0 rlineto
+ closepath fill
+ /valeurrouge valeurrouge #2 #5 sub #7 1 sub div neg add def
+ /valeurvert valeurvert #2 #5 sub #7 1 sub div neg add def
+ /valeurbleu valeurbleu #3 #6 sub #7 1 sub div neg add def
+ 0 pthauteur #7 div neg moveto currentpoint translate
+ } for
+ \else
+ #1 #1 #4 sub #7 1 sub div cvi neg #4{
+ pop
+ valeurrouge 255 div valeurvert 255 div valeurbleu 255 div
+ setrgbcolor
+ newpath
+ 0 0 moveto
+ ptlargueur #7 div 0 rlineto
+ 0 pthauteur neg rlineto
+ ptlargueur neg #7 div 0 rlineto
+ closepath fill
+ /valeurrouge valeurrouge #2 #5 sub #7 1 sub div neg add def
+ /valeurvert valeurvert #2 #5 sub #7 1 sub div neg add def
+ /valeurbleu valeurbleu #3 #6 sub #7 1 sub div neg add def
+ ptlargueur #7 div 0 moveto currentpoint translate
+ } for
+ \fi
+ grestore}}
+
+\def\RectangleDegrade#1#2#3#4#5#6#7#8{%
+% appel : \RectangleDegrade{texte}{rouge}{vert}{bleu}{maxrouge}
+% {maxvert}{maxbleu}{nb-nuances}
+% trace un rectangle degrade autour du texte "texte" en commencant
+% par un rectangle de couleur "rouge"+"vert"+bleu" jusqu'au
+% rectangle de couleur "maxrouge"+"maxvert"+"maxbleu" en tracant
+% "nb-nuances" nuances de couleur. Le sens du degrade est determine par la
+% variable booleene \ifhorizontal.
+\setbox3=\hbox{\hskip 8pt\vbox{\vskip 2pt\hbox{#1}\vskip 2pt}\hskip 8pt}
+\ifnum #2 > 255 #5 <0 #3 > 255 #6 <0 #4 > 255 #7 <0
+ \typeout{Les parametres de RectangleGeneral sont incorrects !!!}
+\else
+\hbox{\hskip-4pt
+\hbox{\hsize\wd3%
+ \vbox to \ht3{%
+ \vskip-3pt%
+ \PSrectangle{#2}{#3}{#4}{#5}{#6}{#7}{#8}{\copy3}
+ }%
+ \hskip 11pt%
+ \raise 8pt\vbox{\hbox{#1}}}
+}
+\fi
+}
+
+%-----------------------Des macros pour le dessin-----------------
+
+\newif\ifdashps % determine si on veut des pointilles
+\dashpsfalse
+\def\bezierps#1 \endbezierps#2#3#4#5#6#7{%
+% trace une courbe de bezier avec les points du parametre #1 qui
+% est un tableau de tableaux. Le parametre #2 contient la largueur
+% des traits. Lorsque l'on veut tracer des courbes pointillees, il faut
+% positionner le boolean \ifdashps a vrai (\dashpstrue) et a ce moment
+% #3 contient le nombre total d'espaces noirs et d'espaces blancs selon
+% les unites de mesures courantes ; #4 definit le nombre d'unites \`a
+% placer en debut de trait : [9] 4 setdash --> un trait pointille. Si
+% on a positionner \dashpsfalse alors la courbe est continue.
+% attention ; les unites sont des millimetres et il faut un blanc avant
+% \endbezierps
+% constitue de 4 unites, puis 5, puis 4, puis 5 ...
+% l'ordre des parametres est :
+% \bezierps [ [ x0 y0 x1 y1 x2 y2 x3 y3 ] ...] \endbezierps{}{}
+% #5 = intensite du rouge < 256, #6 = intensite du vert < 256
+% #7 = intensite du bleu < 256
+% Enfin, la constante 2.85 = 72 / 25.6 ==> pour travailler en mm
+\special{" gsave 2.85 2.85 scale #2 setlinewidth
+ \ifdashps [ #3 ] #4 setdash \fi
+ \SetCapJoinMatrix{\the\CCap}{\the\Join}
+ #5 255 div #6 255 div #7 255 div setrgbcolor
+ newpath 0 0 moveto currentpoint translate
+ #1 { aload pop 8 -2 roll moveto curveto } forall stroke grestore}}
+
+
+\def\ellipseps#1#2#3#4#5#6#7#8{%
+% trace une ellipse avec les dimensions (#1,#2). #1 represente la "largeur" de
+% l'ellipse et #2 la hauteur (exprimees en mm). Le parametre #3
+% contient la largueur des traits. Lorsque l'on veut tracer une
+% ellipse en pointillees, il faut
+% positionner le boolean \ifdashps a vrai (\dashpstrue) et a ce moment
+% #4 contient le nombre total d'espaces noirs et d'espaces blancs selon
+% les unites de mesures courantes ; #5 definit le nombre d'unites \`a
+% placer en debut de trait : [9] 4 setdash --> un trait pointille. Si
+% on a positionne \dashpsfalse alors la courbe est continue.
+% attention ; les unites sont des MILLIMETRES
+% #6 = intensite du rouge < 256, #7 = intensite du vert < 256
+% #8 = intensite du bleu < 256
+% Le contour est trace dans la couleur actuelle definie par les composantes
+% \rouge, \vert, \bleu
+% Enfin, la constante 2.85 = 72 / 25.6 ==> pour travailler en mm
+\special{" gsave 2.85 2.85 scale #3 setlinewidth
+ 0 0 moveto currentpoint translate
+ /cm { matrix currentmatrix } def
+ /mtrx cm def
+ /mymax { #1 #2 ge { #1 } { #2 } ifelse 10 mul } def
+ /mymin { #1 #2 le { #1 } { #2 } ifelse 10 mul } def
+ mymax mymin scale
+ % contenu
+ newpath
+ 0 0 mymax 0 360 arc
+ #6 255 div #7 255 div #8 255 div setrgbcolor fill
+ stroke
+ % contour
+ ifdashps [ #4 ] #5 setdash \fi
+ \SetCapJoinMatrix{\the\CCap}{\the\Join}
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div (\the\bleu )
+ cvr 255 div setrgbcolor
+ newpath
+ 0 0 mymax 0 360 arc
+ mtrx setmatrix
+ stroke
+}}
+
+\def\Line
+#1 \endLine#2#3#4#5#6#7{%
+% trace une ligne avec les points du parametre #1 qui
+% est un tableau de tableaux. Le parametre #2 contient la largueur
+% des traits. Lorsque l'on veut tracer des courbes pointillees, il faut
+% positionner le boolean \ifdashps a vrai (\dashpstrue) et a ce moment
+% #3 contient le nombre total d'espaces noirs et d'espaces blancs selon
+% les unites de mesures courantes ; #4 definit le nombre d'unites \`a
+% placer en debut de trait : [9] 4 setdash --> un trait pointille. Si
+% on a positionner \dashpsfalse alors la courbe est continue.
+% attention ; les unites sont des millimetres et il faut un blanc avant
+% \endLine
+% constitue de 4 unites, puis 5, puis 4, puis 5 ...
+% l'ordre des parametres est :
+% \Line [ [ x0 y0 x1 y1 ] [ x1 y1 x2 y2 ] ...] \endLine{}{}...
+% trace une ligne brisee
+% #5 = intensite du rouge < 256, #6 = intensite du vert < 256
+% #7 = intensite du bleu < 256
+% Enfin, la constante 2.85 = 72 / 25.6 ==> pour travailler en mm
+\special{" gsave 2.85 2.85 scale #2 setlinewidth
+ \ifdashps [ #3 ] #4 setdash \fi
+ #5 255 div #6 255 div #7 255 div setrgbcolor
+ \SetCapJoinMatrix{\the\CCap}{\the\Join}
+ newpath 0 0 moveto currentpoint translate
+ #1 { aload pop 4 -2 roll moveto lineto } forall stroke grestore}}
+
+\def\CercleHachure#1#2#3#4#5#6#7#8{%
+% trace un cercle de rayon #1mm et d'epaisseur du trait = #2mm,
+% puis remplit ce cercle avec des hachures de largueur = #3mm inclinees
+% de #4 degres. La couleur est specifiee par les parametres #5 #6 #7
+% (r g b : dans cet ordre). Le parametre #8 donne l'espacement entre
+% les hachures. Les angles doivent etre compris entre 0 et 180 degres.
+\ifnum #4 > 180 #4 <0
+ \typeout{---CercleHachure : le rayon #4 n'est pas <= 180 ni >= 0}
+\else
+ \special{" gsave 2.85 2.85 scale
+ #5 255 div #6 255 div #7 255 div setrgbcolor
+ 0 0 moveto currentpoint translate newpath
+ 0 0 #1 0 360 arc #2 setlinewidth stroke
+ newpath 0 0 #1 0 360 arc closepath clip
+ newpath
+ #3 setlinewidth
+ \SetCapJoinMatrix{\the\CCap}{\the\Join}
+ \ifdashps [ 2 2 ] 0 setdash \fi
+ #4 90 ge {
+ 180 #4 sub cos abs #1 mul #4 sin abs #1 mul add
+ 180 #4 sub cos abs #1 mul #4 sin abs #1 mul sub
+ translate #4 rotate
+ 0 #8 #1 2 mul {
+ pop 0 0 moveto
+ #1 2 mul 0 lineto
+ 0 #8 moveto currentpoint translate
+ } for
+ } {
+ 180 #4 sub cos abs #1 mul #4 sin abs #1 mul sub
+ 180 #4 sub cos abs #1 mul #4 sin abs #1 mul add
+ translate #4 rotate
+ 0 #8 #1 2 mul {
+ pop 0 0 moveto
+ #1 2 mul neg 0 lineto
+ 0 #8 neg moveto currentpoint translate
+ } for
+ } ifelse
+ stroke}
+\fi}
+
+\def\CarreHachure#1#2#3#4#5#6#7#8{%
+% trace un carre incline de largueur 2* #1mm et d'epaisseur du trait = #2mm,
+% puis remplit ce carre avec des hachures de largueur = #3mm inclinees
+% de #4 degres. La couleur est specifiee par les parametres #5 #6 #7
+% (r g b : dans cet ordre). Le parametre #8 donne l'espacement entre
+% les hachures. Les angles doivent etre compris entre 0 et 180 degres.
+\ifnum #4 > 180 #4 <0
+ \typeout{---CarreHachure : l'angle #4 n'est pas <= 180 ni >= 0}
+\else
+ \special{" gsave 2.85 2.85 scale #2 setlinewidth
+ #5 255 div #6 255 div #7 255 div setrgbcolor
+ #3 setlinewidth
+ \SetCapJoinMatrix{\the\CCap}{\the\Join}
+ \ifdashps [ 2 2 ] 0 setdash \fi
+ #4 90 ge {
+ 180 #4 sub cos abs #1 mul #4 sin abs #1 mul add
+ 180 #4 sub cos abs #1 mul #4 sin abs #1 mul sub
+ translate #4 rotate
+ 1 #8 #1 2 mul {
+ pop 0 0 moveto
+ #1 2 mul 0 lineto
+ 0 #8 moveto currentpoint translate
+ } for
+ stroke
+ newpath 0 0 moveto
+ 0 #1 2 mul neg rlineto
+ #1 2 mul 0 rlineto
+ 0 #1 2 mul rlineto
+ closepath
+ #2 setlinewidth
+ } {
+ 180 #4 sub cos abs #1 mul #4 sin abs #1 mul sub
+ 180 #4 sub cos abs #1 mul #4 sin abs #1 mul add
+ translate #4 rotate
+ 1 #8 #1 2 mul {
+ pop 0 0 moveto
+ #1 2 mul neg 0 lineto
+ 0 #8 neg moveto currentpoint translate
+ } for
+ stroke
+ newpath 0 0 moveto
+ 0 #1 2 mul rlineto
+ #1 2 mul neg 0 rlineto
+ 0 #1 2 mul neg rlineto
+ closepath
+ #2 setlinewidth
+ } ifelse
+ stroke}
+\fi}
+
+\def\CourbeFermee#1 \endcourbe#2#3#4#5#6#7{%
+% Trace une courbe fermee au moyen de courbes de Bezier avec les points
+% du parametre #1 qui est un tableau de tableaux. Le parametre #2
+% contient la largueur des traits. Lorsque l'on veut tracer le contour en
+% pointillees, il faut positionner le boolean \ifdashps a vrai
+% (\dashpstrue) et a ce moment
+% #3 contient le nombre total d'espaces noirs et d'espaces blancs selon
+% les unites de mesures courantes ; #4 definit le nombre d'unites \`a
+% placer en debut de trait (cf la macro \bezierps)
+%
+% Attention ; les unites sont des millimetres et il faut un blanc avant
+% \endcourbe
+%
+% L'ordre des parametres est :
+% \CourbeFermee [ [ x0 y0 x1 y1 x2 y2 x3 y3 ] ...] \endcourbe{}{}
+%
+% Le remplissage est effectue avec les couleurs :
+% #5 = intensite du rouge < 256, #6 = intensite du vert < 256
+% #7 = intensite du bleu < 256
+%
+% Le contour est trace dans la couleur actuelle definie par les composantes
+% \rouge, \vert, \bleu
+% Enfin, la constante 2.85 = 72 / 25.6 ==> pour travailler en mm
+\typeout{+++coordonnees: #1}
+\special{"gsave 2.85 2.85 scale #2 setlinewidth
+ \ifdashps [ #3 ] #4 setdash \fi
+ \SetCapJoinMatrix{\the\CCap}{\the\Join}
+ newpath \filtre #1
+ moveto currentpoint translate
+ #1 { aload pop curveto } forall
+ \ifclosepath closepath \fi
+ gsave #5 255 div #6 255 div #7 255 div setrgbcolor eofill grestore
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div (\the\bleu )
+ cvr 255 div setrgbcolor stroke grestore}}
+\def\filtre[ [ #1 #2 #3 ] ] {#1 #2 }
+\newif\ifclosepath
+\closepathtrue
+
+%----------------------------------------
+% Pour mettre du texte ou autre chose en rotation :
+% RotObj{angle}{texte}
+% Suivant les valeurs de \t@vss, \b@vss, \l@vss, \r@vss le point \`a
+% partir duquel la rotation se fait, peut varier : par defaut ce point est
+% fix\'e au centre du texte. Par exemple, les definitions \def\t@vss{\vss},
+% \def\b@vss{} \def\l@hss{\hss}, \def\r@hss{} positionne le point en
+% question au bout de la chaine.
+\def\RotObj#1#2{%
+\special{ps: gsave currentpoint currentpoint translate
+ #1 neg rotate neg exch neg exch translate}%
+ \RotBis{#2}%
+ \special{ps: currentpoint grestore moveto}}
+% Par defaut, le point a partir duquel se fait la rotation est situe
+% au debut de la chaine
+\def\dc{\edef\t@vss{}\edef\b@vss{\vss}\edef\l@hss{}\edef\r@hss{\hss}}
+\dc
+\def\RotBis#1{\vbox to 0pt{\normalbaselines
+ \t@vss
+ \hbox to 0pt{\l@hss
+ \hbox {#1}%
+ \r@hss}%
+ \b@vss}}
+\def\fc{\edef\t@vss{\vss}\edef\b@vss{}\edef\l@hss{\hss}\edef\r@hss{}}
+\def\mc{\edef\t@vss{\vss}\edef\b@vss{\vss}\edef\l@hss{\hss}\edef\r@hss{\hss}}
+
+%----------------------------------------
+% Les macros pour coller du texte le long de courbes de Bezier.
+% L'implantation est comment\'e dans le manuel d'utilisation
+%----------------------------------------
+\def\ColleTexte#1#2#3#4#5#6#7#8#9{%
+\typeout{***** limitation de ColleTexte : dvips 5.4 uniquement ****}
+\countdef\lg=220%
+\longueur[#1]\hss%
+\special{ps: /debut {gsave currentpoint translate currentpoint %
+ exch neg exch translate} def %
+ % je me suis plac'e en (x_0,y_0)
+ /xx #2 def %
+ /yy #3 def %
+ /angle #5 #3 sub #4 #2 sub 0.001 add atan def %
+ /n-t 0 def /bidonxone #8 def /bidonxtwo #2 def %
+ /cx #4 #2 sub 3 mul def %
+ /bx #6 #4 sub 3 mul cx sub def %
+ /ax #8 #2 sub cx sub bx sub def %
+ /cy #5 #3 sub 3 mul def %
+ /by #7 #5 sub 3 mul cy sub def %
+ /ay #9 #3 sub cy sub by sub def %
+ /ConstanteX { 0.35 Resolution 300 div mul } def %
+ /bidon {(a) search pop pop pop cvx exec} def %
+ /ancien-y 0 def /ancien-x 0 def /ancien-nt 0 def (%
+}%
+\special{ps: ) bidon
+ /fonctionX { n-t n-t n-t ax mul mul mul n-t n-t bx mul mul n-t cx mul %
+#2 add add add} def %
+ /fonctionY { n-t n-t n-t ay mul mul mul n-t n-t by mul mul n-t cy mul %
+#3 add add add} def %
+ /long {\the\lg} def %
+ /pas-nt { long 1 sub 1 gt { 1 long 1 sub div }{ 0.5 } ifelse } def %
+ debut newpath #2 12 Resolution 300 div mul mul #3 12 %
+ Resolution 300 div mul mul neg moveto ( }%
+\courbebisbis[#1]}%
+\def\courbebisbis#1{\def\tete{}%
+ \def\COURBEBISBIS##1{\ifx##1]%
+ \def\next{\tete\special{ps: ) bidon closepath grestore}}%
+ \else%
+ \setbox20=\hbox{##1}%
+ \edef\tete{\tete%
+ \hss\special{ps: ) bidon %
+ gsave %
+ currentpoint translate currentpoint %
+ angle neg rotate neg exch neg exch translate ( }\hss%
+ \setbox21=\hbox{##1\hss}\box21%
+ \special{ps: ) bidon %
+ /wdcar (\the\wd20) (pt) search pop 3 1 roll pop pop cvr %
+ ConstanteX mul def %
+ /ancien-nt n-t def /ancien-y yy def /ancien-x xx def %
+ /n-t wdcar bidonxone bidonxtwo sub 0.001 add div ancien-nt %
+ add def %
+ /xx fonctionX def %
+ /yy fonctionY def %
+ /angle yy ancien-y sub xx ancien-x sub 0.001 add atan def %
+ /n-t ancien-nt pas-nt add def %
+ /xx fonctionX def %
+ /yy fonctionY def %
+ grestore %
+ xx 12.0 Resolution 300 div mul mul yy 12.0 %
+ Resolution 300 div mul mul neg moveto ( }%
+ }\let\next=\COURBEBISBIS\fi%
+ \next}\COURBEBISBIS}%
+
+\countdef\BlancInterLettre=221%
+\BlancInterLettre=1% par defaut 1mm
+
+\def\TraceTexte#1#2#3#4#5#6#7#8#9{%
+\typeout{***** limitation de TraceTexte : dvips 5.4 uniquement ****}
+\special{ps:/debut {gsave currentpoint translate currentpoint %
+ exch neg exch translate} def %
+ % je me suis plac'e en (x_0,y_0)
+ /xx #2 def %
+ /yy #3 def %
+ /angle #5 #3 sub #4 #2 sub 0.001 add atan def %
+ /n-t 0 def /bidonxone #8 def /bidonxtwo #2 def %
+ /bidon {(a) search pop pop pop cvx exec} def %
+ /cx #4 #2 sub 3 mul def %
+ /bx #6 #4 sub 3 mul cx sub def %
+ /ax #8 #2 sub cx sub bx sub def %
+ /cy #5 #3 sub 3 mul def %
+ /by #7 #5 sub 3 mul cy sub def %
+ /ay #9 #3 sub cy sub by sub def ( }\hss%
+\special{ps: ) bidon %
+ /D { 12.0 Resolution 300 div mul } def %
+ /CY { Resolution 300 div } def %
+ /MyCte { 0.35277 } def %
+ /ancien-nt 0 def /ancien-y 0 def /ancien-x 0 def ( }\hss%
+\special{ps: ) bidon %
+ /fonctionX { n-t n-t n-t ax mul mul mul n-t n-t bx mul mul n-t cx mul %
+ #2 add add add} def %
+ /fonctionY { n-t n-t n-t ay mul mul mul n-t n-t by mul mul n-t cy mul %
+ #3 add add add} def %
+ /long #2 def %
+ /blanc {\the\BlancInterLettre} def ( }\hss%
+\special{ps: ) bidon %
+ /MyFunction{/n-t wdcar bidonxone bidonxtwo sub 0.001 %
+ add div ancien-nt add def %
+ /xx fonctionX def %
+ /yy fonctionY def %
+ /angle yy ancien-y sub xx ancien-x %
+ sub 0.001 add atan def %
+ /n-t ancien-nt def %
+ /n-t angle cos wdcar mul bidonxone %
+ bidonxtwo sub 0.001 add div n-t add def %
+ /long angle cos wdcar mul long add blanc add def %
+ } def %
+ debut newpath #2 D mul #3 D mul neg moveto ( }\hss%
+\courbebis[#1]}%
+
+\def\courbebis#1{\def\tete{}%
+ \def\COURBEBIS##1{\ifx##1]%
+ \def\next{\tete\hss\special{ps: ) bidon closepath grestore}}%
+ \else%
+ \setbox20=\hbox{##1}%
+ \edef\tete{\tete\hss%
+ \special{ps: ) bidon %
+ gsave %
+/wdcar (\the\wd20) (pt) search pop 3 1 roll pop pop cvr %
+MyCte mul def %
+ /ancien-nt n-t def /ancien-y yy def /ancien-x xx def ( }\hss%
+ \special{ps: ) bidon %
+ MyFunction %
+ { fonctionX long le %
+ { /n-t n-t 0.001 add def } %
+ {exit} ifelse } loop %
+ /xx fonctionX def %
+ /yy fonctionY def ( }\hss%
+ \special{ps: ) bidon %
+ currentpoint translate currentpoint %
+ angle neg rotate neg exch neg exch %
+ translate ( }\hss%
+ \setbox21=\hbox{##1\hss}\box21%
+ \special{ps: ) bidon %
+ grestore %
+ xx D mul yy D mul neg moveto ( %
+ }%
+ }\let\next=\COURBEBIS\fi%
+ \next}\COURBEBIS}%
+
+%------------------------------
+% Macro pour tracer des splines terminees par des fleches,
+% des ronds, des triangles... Plusieurs modes sont suportes :
+% les symboles (fleches, ronds...) peuvent apparaitre aux deux
+% extremites, au debut ou a la fin du spline.
+
+\newif\ifarrowheads
+\newif\ifarrowheadleft
+\newif\ifarrowheadright
+\def\ArrowForm#1{
+ \arrowheadsfalse
+ \arrowheadleftfalse
+ \arrowheadrightfalse
+ \ifx#1h%
+ \arrowheadstrue
+ \else
+ \ifx#1l%
+ \arrowheadlefttrue
+ \else
+ \ifx#1r%
+ \arrowheadrighttrue
+ \else
+ \typeout{*** bad parameter in function ArrowForm}
+ \fi
+ \fi
+ \fi
+}
+
+%%% On tape :
+%%% \ArrowForm{h} % pour obtenir des symboles des deux cotes
+%%% \ArrowForm{l} % pour obtenir des symboles "a gauche"
+%%% \ArrowForm{r} % pour obtenir des symboles "a droite"
+
+\countdef\Psymbol=205\countdef\Ssymbol=206
+
+\def\PositionPsymbol#1{
+ \ifnum#1>100 #1<0
+ \typeout{*** bad parameter in function PositionPsymbol}
+ \else
+ \Psymbol=#1
+ \fi
+}
+
+\def\PositionSsymbol#1{
+ \ifnum#1>100 #1<0
+ \typeout{*** bad parameter in function PositionSsymbol}
+ \else
+ \Ssymbol=#1
+ \fi
+}
+
+%-------Nouveaux developpement pour la version 3.0--------------
+
+
+\newif\ifinnerbox\innerboxtrue
+\def\TroisDbox#1#2#3#4#5#6#7#8{%
+% D'apres le PostScript Language Journal vol 2 - number 1 - pages
+% 19, 31 et 32 -- modifie par mes soins pour
+% tracer une boite 3D de hauteur #1mm et #2mm orient\'e de #3.
+% la couleur de la boite est donne par le parametre #4 qui doit
+% etre de la forme 'rouge vert bleu'. Le parametre #5 est la
+% couleur des faces. Ces faces ont une hauteur egale a #1 - 2*#6mm
+% et une largeur de #2 - 2*#7mm. Le parametre #8 est le rayon des
+% arondis au quatre coins des faces. Noter que si ce parametre vaut
+% 0 alors on obtient le dessin d'un rectangle. De plus, lorsque le
+% booleen innerbox est True (\innerboxtrue) la face avant de la boite
+% ne comporte pas de boite interieure en couleur.
+\ifnum#1=0
+\typeout{===== Le 2eme Parametre de \TroisDBox doit etre <>0 =====}
+\else
+\special{"%
+gsave %
+%%% Variables importantes comme la hauteur, la largeur\ldots
+/xheight #1 def
+/ywidth #2 def
+/angle #3 def
+/csquare { #4 } def
+/cround { #5 } def
+/x-retrait #6 def
+/y-retrait #7 def
+/ang-round #8 def
+%%%
+/left 1 def
+/right -1 def
+/scaler 2 31 exp 1 sub def
+/pop4 { pop pop pop pop } def
+
+%box with rounded corners
+/roundedbox {
+ gsave
+ /corner exch def
+ /y y-retrait def % retrait en y
+ /x x-retrait def % retrait en x
+ newpath
+ /height xheight y 2 mul sub def
+ /width ywidth x 2 mul sub def
+ /xend x width add def
+ /yend y height add def
+ x y corner add moveto
+ x yend xend yend corner arcto pop4
+ xend yend xend y corner arcto pop4
+ xend y x y corner arcto pop4
+ x y x yend corner arcto pop4
+ cround setrgbcolor
+ fill
+ grestore
+} def
+
+%draw a xheight*width color square stroked
+/square {
+ gsave
+ newpath 0 0 moveto
+ ywidth 0 rlineto 0 xheight rlineto
+ ywidth neg 0 rlineto
+ closepath currentrgbcolor fill stroke
+ grestore
+} def
+
+%draw a block
+/block {%
+ /slant exch def
+ slant 0 lt {
+ /doside left def
+ /slant slant neg def
+ }{
+ /doside right def
+ } ifelse
+ %side length is based on size of slant
+ /sidelen slant 100 div .35 add def
+ [ 1 slant 100 div doside mul 0 1 0 0 ] concat
+ %draw front
+ gsave
+ %draw the outline square
+ csquare setrgbcolor square %
+ %draw the inner rounded box
+ \ifinnerbox ang-round roundedbox \fi %
+ grestore
+ %draw side
+ gsave
+ doside left eq {
+ -1 1 scale
+ }{
+ ywidth 0 translate
+ } ifelse
+ [ 1 .5 0 1 0 0] concat
+ sidelen 1 scale
+ %darken side away from light
+ csquare setrgbcolor square
+ ang-round roundedbox
+ grestore
+ %draw top of box
+ gsave
+ doside left eq {
+ ywidth xheight translate -1 1 scale
+ }{
+ 0 xheight translate
+ } ifelse
+% 1 1 scale
+ [ 1 0 2 1 0 0] concat
+ 1 sidelen 2 xheight ywidth div mul div scale
+ csquare setrgbcolor square
+ ang-round roundedbox
+ grestore
+grestore
+} def
+%%% Programme principal
+0 0 moveto
+2.85 2.85 scale
+0.1 setlinewidth
+0 setlinecap 2 setlinejoin
+angle block
+%%% fin programme principal
+grestore
+}\fi}
+
+\def\plotfunction#1#2#3#4#5#6#7{%
+% trace d'une fonction decrite au format PostScript dans le parametre
+% #7. Le parametre en x a faire figurer doit s'appele XX. La valeur de
+% XX varie de #1 a #2. On applique le facteur d'echelle #3 selon l'axe
+% des x et le facteur #4 selon l'axe des y. #5 est l'epaisseur des traits.
+% #6 specifie le parametre des pointilles
+\special{"%
+ gsave %
+ 2.85 2.85 scale #5 setlinewidth %
+ \ifdashps #6 setdash \fi%
+ 1 setlinecap 1 setlinejoin %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ /XX #1 def
+ /Myfunction { #7 } def
+ /inc #2 #1 sub 60 div def
+ gsave
+ #3 10 mul #4 10 mul scale % pour passer en echelle des cm
+ #1 Myfunction moveto currentpoint
+ 24 {
+ /x1 XX def
+ /y1 Myfunction def
+ /XX XX inc add def
+ /x2 XX def
+ /y2 Myfunction def
+ /XX XX inc add def
+ /x3 XX def
+ /y3 Myfunction def
+ x1 y1 x2 y2 x3 y3 curveto
+ /XX XX inc add def
+ } repeat
+ stroke grestore
+ grestore
+}%
+}
+
+\newcount\pasx % ``pas'' pour les graduations selon axe des x
+\newcount\pasy % ``pas'' pour les graduations selon axe des y
+\pasx=10\pasy=10
+% compteurs intermediaires
+\newcount\mycinterone\newcount\mycintertwo
+% valeurs initiales et d'incrementation des axes
+\newcount\vinitx\newcount\vincx
+\newcount\vinity\newcount\vincy
+\vinitx=0
+\vincx=10
+\vinity=10
+\vincy=1
+\def\GridNumPuiss(#1,#2)(#3,#4)(#5,#6)#7#8#9{%
+% Trace d'une grille avec echelles gradu\'ees au point (#1,#2). Les
+% graduations sur l'axes des x sont des entiers de la forme $\vinitx$, les
+% graduations sur l'axes des y de la forme $\vinity^\vincy$. Les
+% autres parametres de cette macros sont ceux de Grille. Les valeurs de
+% \pasx et \pasy sont les valeurs en mm d'espacement entre 2 graduations
+% consecutives.
+ %------les vecteurs-----------------------
+ \put(#1,#2){\vector(1,0){#3}}
+ \put(#1,#2){\vector(0,1){#4}}
+ %------les graduations horizontales-------
+ \mycinterone=#2
+ \advance\mycinterone by -5
+ \mycintertwo=#3
+ \divide\mycintertwo by \pasx\advance\mycintertwo by 1
+ \multiputnum(#1,\number\mycinterone)(\number\pasx,0)%
+ {\number\mycintertwo}{\number\vinitx}{\number\vincx}
+ %------les graduations verticales---------
+ \mycintertwo=#4
+ \divide\mycintertwo by \pasy\advance\mycintertwo by 1
+ \multiputpuissance(\number\mycinterone,#2)(0,\number\pasy)%
+ {\number\mycintertwo}{\number\vinity}{\number\vincy}
+ %------les marqueurs horizontaux-----------
+ \mycinterone=#1
+ \advance\mycinterone by -2
+ \multiput(\number\mycinterone,\number\pasy)(0,\number\pasy)%
+ {\number\mycintertwo}{\traith{3}}
+ %------les marquers verticaux--------------
+ \mycinterone=#3
+ \divide\mycinterone by \pasx\advance\mycinterone by 1
+ \mycintertwo=#2
+ \advance\mycintertwo by -2
+ \multiput(\number\pasx,\number\mycintertwo)(\number\pasx,0)%
+ {\number\mycinterone}{\traitv{4}}
+ %-------la grille, enfin !-----------------
+ \put(#1,#2){\Grille(#3,#4)(#5,#6){#7}{#8}{#9}}
+}
+
+
+\def\GridNumNum(#1,#2)(#3,#4)(#5,#6)#7#8#9{%
+% Trace d'une grille avec echelles gradu\'ees au point (#1,#2). Les
+% graduations sur l'axes des x sont des entiers de la forme $\vinitx$, les
+% graduations sur l'axes des y de la forme $\vinity. Les autres
+% parametres de cette macros sont ceux de Grille. Les valeurs de
+% \pasx et \pasy sont les valeurs en mm d'espacement entre 2 graduations
+% consecutives.
+ %------les vecteurs-----------------------
+ \put(#1,#2){\vector(1,0){#3}}
+ \put(#1,#2){\vector(0,1){#4}}
+ %------les graduations horizontales-------
+ \mycinterone=#2
+ \advance\mycinterone by -5
+ \mycintertwo=#3
+ \divide\mycintertwo by \pasx\advance\mycintertwo by 1
+ \multiputnum(#1,\number\mycinterone)(\number\pasx,0)%
+ {\number\mycintertwo}{\number\vinitx}{\number\vincx}
+ %------les graduations verticales---------
+ \mycintertwo=#4
+ \divide\mycintertwo by \pasy\advance\mycintertwo by 1
+ \multiputnum(\number\mycinterone,#2)(0,\number\pasy)%
+ {\number\mycintertwo}{\number\vinity}{\number\vincy}
+ %------les marqueurs horizontaux-----------
+ \mycinterone=#1
+ \advance\mycinterone by -2
+ \multiput(\number\mycinterone,\number\pasy)(0,\number\pasy)%
+ {\number\mycintertwo}{\traith{3}}
+ %------les marquers verticaux--------------
+ \mycinterone=#3
+ \divide\mycinterone by \pasx\advance\mycinterone by 1
+ \mycintertwo=#2
+ \advance\mycintertwo by -2
+ \multiput(\number\pasx,\number\mycintertwo)(\number\pasx,0)%
+ {\number\mycinterone}{\traitv{4}}
+ %-------la grille, enfin !-----------------
+ \put(#1,#2){\Grille(#3,#4)(#5,#6){#7}{#8}{#9}}
+}
+
+\def\Grille(#1,#2)(#3,#4)#5#6#7{%
+% Trace une grille au point courant sur #1mm de largeur et de #2mm
+% de hauteur. Les lignes de la grille sont espaces de #3mm selon l'axe
+% des x et de #4mm selon l'axe des y. Les parametres #5 et #6 sont les
+% parametres du setdash dans le cas ou l'on souhaite tracer des lignes
+% pointillees. #7 est la largeur des traits.
+\special{"%
+ /height #1 def
+ /width #2 def
+ /divx #3 def % division spacing along x axis
+ /divy #4 def % division spacing along y axis
+ 2.85 2.85 scale
+ \ifdashps [ #5 ] #6 setdash \fi %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ 0 0 moveto currentpoint translate %
+ #7 setlinewidth
+ 2 setlinecap
+ gsave
+ /index divx def
+ divx 0 translate
+ width divx div cvi 1 sub
+ {
+ newpath
+ 0 0 moveto
+ 0 height lineto
+ stroke
+ divx 0 translate
+ /index index divx add def
+ } repeat
+ grestore
+ gsave
+ /index divy def
+ 0 divy translate
+ height divy div cvi 1 sub
+ {
+ newpath
+ 0 0 moveto
+ width 0 lineto
+ stroke
+ 0 divy translate
+ /index index divy add def
+ } repeat
+ grestore
+}%
+}
+
+\def\Fleche#1 \endfleche#2#3#4#5#6#7#8#9{%
+% #1 est un tableau de points definissant les splines
+% #2 est le pourcentage
+% #3 est la profondeur de la fleche, #4 sa hauteur, #5 sa largeur
+% #6 est la hauteur de la fonte pour le texte
+% #7 est l'epaisseur des traits
+% #8 et #9 permettent de tracer des pointilles
+\special{"/ed { exch def } def %
+ /Arrow { /w ed /h ed /a ed %
+ 0 0 moveto h neg w 2 div lineto a w 2 div neg rlineto %
+ a neg w 2 div neg rlineto h w 2 div rlineto %
+ gsave fill grestore }def %
+ /pointsize #6 def %
+ /Helvetica-Bold findfont pointsize scalefont setfont %
+ 1 setlinecap 1 setlinejoin %
+ \ifarrowheadright%
+ /pourcentage 100 def %
+ \else%
+ /pourcentage #2 def %
+ \fi%
+ /fonctionX { n-t n-t n-t ax mul mul mul %
+ n-t n-t bx mul mul n-t cx mul %
+ x1 add add add} def %
+ /fonctionY { n-t n-t n-t ay mul mul mul %
+ n-t n-t by mul %
+ mul n-t cy mul %
+ y1 add add add} def %
+ gsave %
+ 2.85 2.85 scale #7 setlinewidth %
+ \ifdashps [ #8 ] #9 setdash \fi %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ newpath 0 0 moveto currentpoint translate %
+ #1 %
+ { aload pop %
+ /spline exch def %
+ /mystr exch 0 get def %
+ spline aload pop 8 -2 roll %
+ moveto curveto stroke gsave newpath %
+ /x1 spline 0 get def %
+ /y1 spline 1 get def %
+ /x2 spline 2 get def %
+ /y2 spline 3 get def %
+ /x3 spline 4 get def %
+ /y3 spline 5 get def %
+ /x4 spline 6 get def %
+ /y4 spline 7 get def %
+ x1 y1 moveto %
+ /cx x2 x1 sub 3 mul def %
+ /bx x3 x2 sub 3 mul cx sub def %
+ /ax x4 x1 sub cx sub bx sub def %
+ /cy y2 y1 sub 3 mul def %
+ /by y3 y2 sub 3 mul cy sub def %
+ /ay y4 y1 sub cy sub by sub def %
+ \ifarrowheads%
+ gsave %
+ /n-t 1 def %
+ /xx fonctionX def /yy fonctionY def %
+ xx yy moveto %
+ /n-t n-t 0.05 add def %
+ gsave
+% xx yy translate fonctionY yy sub fonctionX xx %
+x4 y4 translate fonctionY yy sub fonctionX xx %
+ sub 0.001 add atan rotate %
+ % call: depth height weight Arrow %
+ \ifdashps [ 1 0 ] 0 setdash \fi %
+ #3 #4 #5 Arrow %
+ grestore gsave %
+ /n-t 0 def %
+ /xx fonctionX def /yy fonctionY def %
+ xx yy moveto %
+ /n-t n-t 0.05 add def %
+% gsave xx yy translate fonctionY yy sub fonctionX xx %
+ gsave x1 y1 translate fonctionY yy sub fonctionX xx %
+ sub 0.001 add atan 180 sub rotate %
+ % call: depth height weight Arrow %
+ \ifdashps [ 1 0 ] 0 setdash \fi%
+ #3 #4 #5 Arrow %
+ grestore gsave %
+ /n-t 0.5 def %
+ /xx fonctionX def /yy fonctionY def %
+ xx yy moveto %
+ /n-t n-t 0.05 add def %
+ gsave xx yy translate fonctionY yy sub fonctionX xx %
+ sub 0.001 add atan rotate %
+ % enlever le neg dans 15 neg pour texte %
+ % 15 neg --> 5 %
+ mystr stringwidth pop 2 div neg pointsize neg moveto %
+ mystr show stroke grestore %
+ \else%
+ \ifarrowheadleft%
+ gsave %
+ /n-t 0 def %
+ /xx fonctionX def /yy fonctionY def %
+ xx yy moveto %
+ /n-t n-t 0.05 add def %
+% gsave xx yy translate fonctionY yy sub fonctionX xx %
+ gsave x1 y1 translate fonctionY yy sub fonctionX xx %
+ sub 0.001 add atan 180 sub rotate %
+ % call: depth height weight Arrow %
+ \ifdashps [ 1 0 ] 0 setdash \fi%
+ #3 #4 #5 Arrow %
+ grestore gsave %
+ /n-t 0.5 def %
+ /xx fonctionX def /yy fonctionY def %
+ xx yy moveto %
+ /n-t n-t 0.05 add def %
+ gsave xx yy translate fonctionY yy sub fonctionX xx %
+ sub 0.001 add atan rotate %
+ % enlever le neg dans 15 neg pour texte %
+ % 15 neg --> 5 %
+ mystr stringwidth pop 2 div neg pointsize neg moveto %
+ mystr show stroke grestore %
+ \else%
+ /n-t pourcentage 100 div def %
+ /xx fonctionX def /yy fonctionY def %
+ xx yy moveto %
+ /n-t n-t 0.05 add def %
+ gsave xx yy translate fonctionY yy sub fonctionX xx %
+ sub 0.001 add atan rotate %
+ % call: depth height weight Arrow %
+ \ifdashps [ 1 0 ] 0 setdash \fi%
+ #3 #4 #5 Arrow %
+ % enlever le neg dans 15 neg pour texte %
+ % 15 neg --> 5 %
+ mystr stringwidth pop 2 div neg pointsize neg moveto %
+ mystr show stroke %
+ \fi\fi%
+ grestore %
+ closepath %
+ grestore %
+ newpath %
+ } forall closepath closepath%
+}%end special %
+\arrowheadsfalse%
+\arrowheadleftfalse%
+\arrowheadrightfalse%
+}
+
+\def\Cotes(#1,#2)(#3,#4)[#5,#6][#7,#8]|#9|{%
+% trace une droite du point A=(#1,#2) au point B=(#3,#4) d'epaisseur
+% #5mm puis deux traits perpendiculaires a la droite precedente d'epaisseur
+% #6 et de longueur respectives #7mm du point A et #8mm du point B.
+% Enfin, si \dashps est true alors #9 specifie les pointilles. #9 doit
+% etre de la forme : "[ xx ] yy"
+\special{"newpath %
+ gsave %
+ 2.85 2.85 scale #5 setlinewidth %
+ \ifdashps #9 setdash \fi%
+ 1 setlinecap 1 setlinejoin %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ newpath 0 0 moveto currentpoint translate %
+ #1 #2 moveto #3 #4 lineto stroke %
+ \ifdashps [ 1 0 ] 0 setdash \fi%
+ #6 setlinewidth gsave #3 #4 translate %
+ #4 #2 sub #3 #1 %
+ sub 0.001 add atan 90 add rotate %
+ 0 0 moveto currentpoint exch currentlinewidth 3 mul %
+ sub exch moveto %
+ #8 currentlinewidth 3 mul add 0 lineto stroke grestore %
+ gsave #1 #2 translate %
+ #4 #2 sub #3 #1 %
+ sub 0.001 add atan 90 add rotate %
+ 0 0 moveto currentpoint exch currentlinewidth 3 mul %
+ sub exch moveto %
+ #7 currentlinewidth 3 mul add 0 lineto stroke grestore %
+ closepath %
+ grestore %
+closepath%
+}%end special
+}
+
+\def\EtatTransition#1{
+\special{" newpath
+ [
+ [ [ (8 \(C E\))] [100 40] ]
+ [ [ (6 \(A B\))] [40 140] ]
+ ]
+ { aload pop
+ /cercle exch def
+ /mystr exch 0 get def
+ cercle aload pop
+ pointsize 2 mul 0 360 arc
+ stroke
+ gsave cercle aload pop translate
+ mystr stringwidth pop 2 div neg pointsize neg 2 div
+ pointsize 3 div add moveto %
+ mystr show grestore
+ closepath
+ newpath
+ } forall closepath
+grestore
+showpage
+}%end special
+}
+
+\newif\ifarrowheads\arrowheadsfalse
+\newif\ifarrowheadleft\arrowheadleftfalse
+\newif\ifarrowheadright\arrowheadrightfalse
+\newif\ifencore\encoretrue
+\def\ArrowForm#1{%
+ \arrowheadsfalse%
+ \arrowheadleftfalse%
+ \arrowheadrightfalse%
+ \def\bidonarrow{#1 }%
+ \def\hh{h }\def\rr{r }\def\ll{l }%
+ \loop\message{Initialisation de la forme des fleches}%
+ \ifx\bidonarrow\hh%
+ \arrowheadstrue\encorefalse%
+ \else%
+ \ifx\bidonarrow\ll%
+ \arrowheadlefttrue\encorefalse%
+ \else%
+ \ifx\bidonarrow\rr%
+ \arrowheadrighttrue\encorefalse%
+ \else%
+ \message{*** bad parameter in function ArrowForm (h l r)}%
+ \read16 to \bidonarrow%
+ \encoretrue%
+ \fi%
+ \fi%
+ \fi%
+ \ifencore%
+ \repeat%
+}
+
+\def\FlecheSpeciale#1 \endflechespeciale#2#3#4#5#6#7#8#9{%
+% le parametre #2 est soit un h soit un r soit un l
+\ArrowForm{#2}\Fleche #1 \endfleche{100}{#3}{#4}{#5}{#6}{#7}{#8}{#9}%
+}
+
+
+\def\TraceArrow(#1,#2)(#3,#4)|#5|{%
+% trace une paire de fleches aux points (#1,2) et (#3,#4)
+% #5 est de la forme "p h w" ou p, h, w sont respectivement la
+% profondeur la hauteur et la largeur de la fleche
+% Enfin, si on a externetrue alors les fleches sont tournees vers
+% l'exterieur, sinon vers l'interieur.
+\special{"newpath gsave %
+ /ed { exch def } def %
+ /Arrow { /w ed /h ed /a ed %
+ 0 0 moveto h neg w 2 div lineto a w 2 div neg rlineto %
+ a neg w 2 div neg rlineto h w 2 div rlineto %
+ gsave fill grestore }def %
+ \ifexterne /ang-sup 0 def \else /ang-sup 180 def \fi%
+ 2.85 2.85 scale %
+ 1 setlinecap 1 setlinejoin %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ newpath gsave #3 #4 translate %
+ #4 #2 sub #3 #1 sub 0.001 add atan ang-sup add rotate %
+ #5 Arrow grestore %
+ gsave #1 #2 translate %
+ #4 #2 sub #3 #1 %
+ sub 0.001 add atan 180 add ang-sup add rotate %
+ #5 Arrow grestore %
+grestore closepath%
+}%
+}%
+
+\newif\ifexterne\externetrue
+\def\CotesFleche(#1,#2)(#3,#4)[#5,#6][#7,#8]|#9|{%
+% trace une droite du point A=(#1,#2) au point B=(#3,#4) d'epaisseur
+% #5mm puis deux traits perpendiculaires a la droite precedente d'epaisseur
+% #6 et de longueur respectives #7mm du point A et #8mm du point B.
+% Le parametre #9 est de la forme w h w pour un appel a Arrow.
+% Enfin, si on a externetrue alors les fleches sont tournees vers
+% l'exterieur, sinon vers l'interieur.
+\Cotes(#1,#2)(#3,#4)[#5,#6][#7,#8]|#9|\TraceArrow(#1,#2)(#3,#4)|#9|%
+}
+
+%------------------trace des grilles, axes----------------
+\newcount\multicnt
+\newdimen\xdim
+\newdimen\ydim
+\newcount\fechelle
+
+\def\whilenoop#1{}
+\def\whilenum#1\do #2{\ifnum #1\relax #2\relax\iwhilenum{#1\relax
+ #2\relax}\fi}
+\def\iwhilenum#1{\ifnum #1\let\nextwhile=\iwhilenum
+ \else\let\nextwhile=\whilenoop\fi\nextwhile{#1}}
+
+\def\whiledim#1\do #2{\ifdim #1\relax#2\iwhiledim{#1\relax#2}\fi}
+\def\iwhiledim#1{\ifdim #1\let\nextwhile=\iwhiledim
+ \else\let\nextwhile=\whilenoop\fi\nextwhile{#1}}
+
+\long\def\multiputnum(#1,#2)(#3,#4)#5#6#7{\killglue\multicnt=#5\relax
+% Place #5 objets a partir de (#1,#2) en se translatant de #3 et #4
+% a chaque nouvel objet. L'objet de d\'epart est #6, puis #6 + #7 (pas
+% d'iteration), puis #6 + (2 * #7) ... Attention, #6 doit etre entier.
+\xdim=#1\unitlength%
+\ydim=#2\unitlength%
+\fechelle=#6%\unitlength
+\whilenum \multicnt > 0\do%
+{\raise\ydim\hbox to 0mm{\setbox2=\hbox{{\the\fechelle}}%
+\dimen1=\wd2\divide\dimen1 by 2\wd2=\dimen1%
+\dimen1=\ht2\divide\dimen1 by 2\ht2=\dimen1%
+\kern-\wd2\kern\xdim\raise-\ht2\hbox{\the\fechelle}\hss}\advance\multicnt-1%
+\advance\fechelle#7%
+\advance\xdim#3\unitlength\advance\ydim #4\unitlength}\ignorespaces}
+
+\long\def\multiputpuissance(#1,#2)(#3,#4)#5#6#7{\killglue\multicnt=#5\relax
+% Place #5 objets a partir de (#1,#2) en se translatant de #3 et #4
+% a chaque nouvel objet. L'objet de d\'epart est #6^{#7}, puis #6^{#7+1}
+% d'iteration), puis #6^{#7+2}... Attention, #6 doit etre entier.
+\xdim=#1\unitlength
+\ydim=#2\unitlength
+\fechelle=#7%\unitlength
+\whilenum \multicnt > 0\do%
+{\raise\ydim\hbox to 0mm{\setbox2=\hbox{$#6^{\the\fechelle}$}%
+\dimen1=\wd2\divide\dimen1 by 2\wd2=\dimen1%
+\dimen1=\ht2\divide\dimen1 by 2\ht2=\dimen1%
+\kern-\wd2\kern\xdim\raise-\ht2\hbox{$#6^{\the\fechelle}$}\hss}%
+\advance\multicnt-1%
+\advance\fechelle#7%
+\advance\xdim#3\unitlength\advance\ydim#4\unitlength}\ignorespaces}
+
+\def\killglue{\unskip\whiledim \lastskip >0mm\do{\unskip}}
+
+\def\traith#1{\hbox{\vrule height .4pt depth 0pt width #1mm}}
+\def\traitv#1{\hbox{\vrule height #1mm depth 0pt width 0.4pt}}
+
+%--------------------------------------------------
+% Logos de fleches (eventuellement ecrits dans la
+% marge gauche)
+%--------------------------------------------------
+% Trace' d'un logo de fleche dont les traits sont d'epaisseur #1mm. #2 et
+% #3 sont les facteurs d'echelle que l'on peut appliquer pour deformer le
+% dessin. Si le booleen \ifclosepath est vrai alors la fleche est remplie
+% dans la couleur donnee par les parametres \rouge, \vert, \bleu.
+\def\LogoFlecheOne#1#2#3{%
+\special{" %
+ gsave %
+ 2.85 2.85 scale #1 setlinewidth %
+ 1 setlinecap 1 setlinejoin %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ gsave %
+ #2 10 mul #3 10 mul scale % pour passer en echelle des cm
+ 0 0 moveto 0.4 neg 0.4 neg lineto 0 0.15 rlineto %
+ 0.4 neg 0 rlineto 0 0.5 rlineto %
+ 0.4 0 rlineto 0 0.15 rlineto %
+ 0.4 0.4 neg rlineto %
+ \ifclosepath gsave fill grestore \fi %
+ stroke grestore %
+ grestore %
+}%
+}
+
+\newdimen\dimeminter
+% Trace le logo de la fleche precedente dans la marge gauche
+\def\LeftLogoFlecheOne{\leavevmode\vadjust{\setbox1=\vtop{\hsize 10mm %
+ \parindent=0pt\baselineskip=9pt\rightskip=4mm plus %
+ 4mm\LogoFlecheOne{0.04}{0.9}{0.9}}%
+ \dimeminter=\textwidth \advance\dimeminter by -\leftmargin
+ \hbox to \dimeminter{\rlap{%
+ \kern\leftmargin\kern-15mm\smash{\raise6pt\box1}}\hfill}}}
+
+% Une variante de logo avec des courbes au lieu de ligne. Pour les
+% parametres voir la macro precedente
+\def\LogoFlecheTwo#1#2#3{%
+\special{" %
+ gsave %
+ 2.85 2.85 scale #1 setlinewidth %
+ 1 setlinecap 1 setlinejoin %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ gsave %
+ #2 10 mul #3 10 mul scale % pour passer en echelle des cm
+ newpath %
+ 0 0 moveto 0.1 neg 0.01 0.65 neg 0.23 0.7 neg 0.3 rcurveto %
+ 0.1 0.05 neg 0.25 0.07 neg 0.3 0.007 rcurveto %
+ 0.1 neg 0.2 0.4 neg 0.9 0.65 neg 1.1 rcurveto %
+ 0.2 0 0.3 0 0.4 0 rcurveto %
+ 0.1 0.2 neg 0.4 0.9 neg 0.45 1.1 neg rcurveto %
+ 0.08 0.05 0.10 0.06 0.12 0.15 rcurveto %
+ closepath \ifclosepath gsave fill grestore \fi %
+ stroke grestore %
+ grestore %
+}%
+}
+
+% Trace le logo de la fleche precedente dans la marge gauche
+\def\LeftLogoFlecheTwo{\leavevmode\vadjust{\setbox1=\vtop{\hsize 10mm %
+ \parindent=0pt\baselineskip=9pt\rightskip=4mm plus %
+ 4mm\LogoFlecheTwo{0.02}{0.55}{0.55}}%
+ \dimeminter=\textwidth \advance\dimeminter by -\leftmargin
+ \hbox to \dimeminter{\rlap{%
+ \kern\leftmargin\kern-15mm\smash{\raise6pt\box1}}\hfill}}}
+
+%--------------------------------------------------
+% Logos "informatiques" : stations de travail, disques, serveurs,
+% routeurs.
+%--------------------------------------------------
+
+% Trace d'un logo de Station Sun dont les traits sont d'epaisseur #1,
+% #2 et #3 sont les facteurs d'echelle que l'on peut appliquer pour
+% deformer le dessin.
+\def\SunStation#1#2#3{
+\special{"
+ gsave %
+ 0 0 moveto %
+%------- modifier le scaling ici----
+% faire qq chose comme : 0.3 #1 mul 0.3 #2 mul scale
+ 0.3 #2 mul 0.3 #3 mul scale %
+%---------------------
+ #1 0.3 div 72 25.6 div mul setlinewidth %
+ 1 setlinecap 1 setlinejoin %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ gsave %
+ -63.0 162.0 translate %
+ 0.900 -0.900 scale %
+ newpath %
+ 204 134 moveto 204 39 lineto 79 39 lineto 79 134 lineto %
+ closepath stroke %
+ newpath %
+ 199 129 moveto 199 44 lineto 84 44 lineto 84 129 lineto %
+ closepath stroke %
+ newpath %
+ 214 174 moveto 214 134 lineto 69 134 lineto 69 174 lineto %
+ closepath stroke %
+ newpath %
+ 209 179 moveto 209 174 lineto 74 174 lineto 74 179 lineto %
+ closepath stroke %
+ grestore %
+}%
+}
+
+% Trace d'un logo d'unite de sauvegarde disk dont les traits sont %
+% d'epaisseur #1, #2 et #3 sont les facteurs d'echelle que l'on peut
+% appliquer pour deformer le dessin.
+\def\SunDisk#1#2#3{
+\special{"
+ gsave %
+ 0 0 moveto %
+%--- modifier le scalling ici
+% faire qq chose comme : 0.3 #1 mul 0.3 #2 mul scale
+ 0.3 #2 mul 0.3 #3 mul scale %
+%-------------------------------
+ 1 setlinecap 1 setlinejoin %
+ #1 0.3 div 72 25.6 div mul setlinewidth %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ gsave %
+ -81.0 165.0 translate 0.900 -0.900 scale %
+ gsave %
+ 136 94 translate 47 20 scale %
+ #1 0.3 div 72 25.6 div mul 47 div setlinewidth %
+ newpath 0 0 1 0 360 arc stroke %
+ grestore %
+ gsave %
+ 136 163 translate 47 20 scale %
+ #1 0.3 div 72 25.6 div mul 47 div setlinewidth %
+ newpath 0 0 1 0 360 arc stroke %
+ grestore %
+ gsave newpath %
+ 89 94 moveto 89 159 lineto % lineto %
+ stroke grestore gsave newpath %
+ 184 94 moveto 184 164 lineto % lineto %
+ stroke grestore %
+ grestore %
+}}
+
+% Trace d'un logo de Serveur Sun dont les traits sont d'epaisseur #1, #2
+% et #3 sont les facteurs d'echelle que l'on peut appliquer pour deformer
+% le dessin.
+\def\SunServer#1#2#3{
+\special{"
+ gsave %
+ 0 0 moveto %
+%------- modifier le scaling ici----
+ 0.3 #2 mul 0.3 #3 mul scale %
+% faire qq chose comme : 0.3 #1 mul 0.3 #2 mul scale
+%---------------------
+ #1 0.3 div 72 25.6 div mul setlinewidth %
+ 1 setlinecap 1 setlinejoin %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ gsave %
+%---- translation originale
+% -63.0 162.0 translate
+%----------
+ -43.0 205.0 translate %
+ 0.900 -0.900 scale %
+ newpath %
+ 169 219 moveto 169 39 lineto 79 39 lineto 79 219 lineto %
+ closepath stroke %
+ newpath %
+ 159 64 moveto 159 54 lineto 89 54 lineto 89 64 lineto %
+ closepath stroke %
+ newpath %
+ 94 139 moveto 94 204 lineto %
+ closepath stroke %
+ newpath %
+ 104 139 moveto 104 204 lineto %
+ closepath stroke %
+ newpath %
+ 114 139 moveto 114 204 lineto %
+ closepath stroke %
+ newpath %
+ 124 139 moveto 124 204 lineto %
+ closepath stroke %
+ newpath %
+ 134 139 moveto 134 204 lineto %
+ closepath stroke %
+ newpath %
+ 144 139 moveto 144 204 lineto %
+ closepath stroke %
+ newpath %
+ 154 139 moveto 154 204 lineto %
+ closepath stroke %
+ newpath %
+ 79 199 moveto 44 219 lineto 44 229 lineto %
+ 79 229 lineto 79 219 lineto %
+ closepath stroke %
+ newpath %
+ 169 199 moveto 204 219 lineto %
+ 204 229 lineto 169 229 lineto 169 219 lineto %
+ closepath stroke %
+ grestore %
+}%
+}
+
+% Trace d'un logo d'un router - modem dont les traits sont d'epaisseur #1,
+% #2 et #3 sont les facteurs d'echelle que l'on peut appliquer pour
+% deformer le dessin.
+\def\SunRouter#1#2#3{
+\special{"%
+ gsave %
+ 0 0 moveto %
+%------- modifier le scaling ici----
+ 0.3 #2 mul 0.3 #3 mul scale %
+% faire qq chose comme : 0.3 #1 mul 0.3 #2 mul scale
+%---------------------
+ #1 0.3 div 72 25.6 div mul setlinewidth %
+ 1 setlinecap 1 setlinejoin %
+ (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div %
+ (\the\bleu ) cvr 255 div setrgbcolor %
+ gsave %
+ -63.0 162.0 translate %
+ 0.900 -0.900 scale %
+ newpath %
+ 75 165 moveto 75 144 lineto %
+% 78 165 moveto 78 144 lineto %
+ 81 165 moveto 81 144 lineto %
+% 84 165 moveto 84 144 lineto %
+ 87 165 moveto 87 144 lineto %
+ closepath stroke %
+ newpath %
+ gsave %
+ 90 165 moveto 180 rotate -1 1 scale %
+ /Helvetica findfont 10 scalefont setfont %
+ (ROUTER) show %
+ grestore %
+ closepath %
+ newpath %
+ 164 174 moveto 164 134 lineto 69 134 lineto 69 174 lineto %
+ closepath stroke %
+ newpath %
+ 159 179 moveto 159 174 lineto 74 174 lineto 74 179 lineto %
+ closepath stroke %
+ grestore %
+}}
+\catcode`\@=12\relax%
diff --git a/macros/latex209/contrib/colortex/mancolor.sty.gz b/macros/latex209/contrib/colortex/mancolor.sty.gz
new file mode 100644
index 0000000000..8a46d9f6c1
--- /dev/null
+++ b/macros/latex209/contrib/colortex/mancolor.sty.gz
Binary files differ
diff --git a/macros/latex209/contrib/corrects/corrects.pdf b/macros/latex209/contrib/corrects/corrects.pdf
new file mode 100644
index 0000000000..fea2eff2fe
--- /dev/null
+++ b/macros/latex209/contrib/corrects/corrects.pdf
Binary files differ
diff --git a/macros/latex209/contrib/corrects/corrects.sty b/macros/latex209/contrib/corrects/corrects.sty
new file mode 100644
index 0000000000..f734fafc1f
--- /dev/null
+++ b/macros/latex209/contrib/corrects/corrects.sty
@@ -0,0 +1,45 @@
+
+%%% CORRECTS.STY
+\typeout{Corrections style option for LaTeX, (c) Mike Piff, 07/22/92}
+
+\newif\ifcorrections \correctionsfalse
+\newif\ifrealpage \realpagetrue
+\def\correctionsonly{%
+ \correctionstrue \realpagefalse}
+\def\currentstate#1#2#3{%
+ \setcounter{#1}{#2}%
+ \addtocounter{#1}{-1}%
+ \csname #1\endcsname{#3}\mbox{}}%
+\def\startpage#1{\npage{#1}%
+ \resetcounters}
+\def\startpageflushleft#1{\npage{#1}%
+ \noindent\resetcounters}
+\newcommand{\resetcounters}{\ignorespaces}
+\def\npage#1{\clearpage
+ \global\realpagetrue
+ \setcounter{page}{#1}}
+\def\endpageflushright{%
+ {\parfillskip0pt\par\pagebreak}}
+\def\endpage{\pagebreak}
+\def\anotherpageflushleft{%
+ \global\realpagetrue\noindent}
+\def\anotherpage{\global\realpagetrue}
+\def\morefootnotetext#1{\@bsphack{%
+ \def\@makefntext##1{\noindent ##1}%
+ \footnotetext{#1}}\@esphack}
+\let\@@outputpage\@outputpage
+\def\@outputpage{%
+ \ifrealpage\@@outputpage
+ \else\global\@specialpagefalse
+ \let\firstmark\botmark\fi
+ \ifcorrections\global\realpagefalse\fi}
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Dr M J Piff %% e-mail:
+%% Department of Pure Mathematics %%
+%% University of Sheffield %% M.Piff@sheffield.ac.uk
+%% Hicks Building %%
+%% Hounsfield Road %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% SHEFFIELD S3 7RH %% Telephone: SHEFFIELD (0742) 768555
+%% England %% Ext. 4431
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/corrects/corrects.tex b/macros/latex209/contrib/corrects/corrects.tex
new file mode 100644
index 0000000000..06eaee0865
--- /dev/null
+++ b/macros/latex209/contrib/corrects/corrects.tex
@@ -0,0 +1,273 @@
+
+\documentstyle{ltugboat}
+\emergencystretch1in
+\title{Correction sheets in \LaTeX}
+\author{Mike Piff}
+\address{Department of Pure Mathematics\\University of Sheffield\\Sheffield
+ S10 2TN\\England}
+\netaddress[\network{Janet}]{pm1mjp@pa.shef.ac.uk}
+\begin{document}
+\maketitle
+\begin{abstract}
+ In this article the author explains how to produce minor correction
+ sheets to a \LaTeX\ book.
+ The sort of corrections handled are those which
+ involve changes to a few words or possibly rewriting a few lines on a page,
+ but not the sort that would cause \TeX\ to reformat the whole book because
+ a page has stretched or shrunk too much. The
+ author has used these macros for corrections to a book in print, but they
+ could equally well make the last stages of proof reading
+ and correction less irksome.
+\end{abstract}
+\section{Introduction}
+Reprinting individual pages of a \LaTeX\ book for correction
+can be quite a tricky task. One can always process the whole book again,
+but chances are that the page breaks will all be different. This can also
+cause
+cross-references and the index to be inaccurate, and so is
+not really suitable unless the whole book is being reset.
+
+The following style option \verb"corrections.sty" makes the job easier.
+It was developed in particular for the author's needs,
+but should be easy to customize.
+
+\section{The style in use}
+It is assumed that a root file is available to produce the book.
+Make a copy of this,
+and insert the correction style option, and also the commands
+\begin{verbatim}
+\correctionsonly
+\renewcommand{\resetcounters}[2]{%
+ \setcounter{Theorem}{#1}%
+ \setcounter{Example}{#2}%
+ \ignorespaces}
+\end{verbatim}
+in the preamble. The former is to tell \LaTeX\ to produce only correction
+sheets, and the latter is customized to the particular counters being
+used in the
+current book---in this case, theorem and example counters.
+We must either make a copy of the \verb"aux" file from the original book,
+or carefully replace
+any \verb"\ref" and \verb"\pageref" commands with
+their expansions in the corrections file. The author's own preference was the
+latter; he changed his root file so that it actually contained the pages to be
+printed, rather than have to \verb"\input" or \verb"\include" copies of each
+chapter file and \verb"aux" file. As a precaution, he also redefined \verb"\ref"
+and \verb"\pageref" so as to give an error message.
+
+Most of the body of the book may now be discarded.
+In its place, we put instructions to print individual pages.
+At least the text of these pages must be retained.
+But this is where the complications begin, since it is possible to be heavily
+nested within several layers of environments at the start of a page, as well
+as being mid-paragraph in section~9 of chapter~4, and about to produce
+Example~4.97 and Theorem~4.25. Moreover, at the end of the page we may be in
+a different paragraph and a different section. The headers on the pages will
+have to reflect the current state, and the page must finish flush right.
+
+None of these problems is of much significance in itself, but the
+combination of all of them means that we have to be pretty careful in giving
+the exact state of the book for each page. Some counters change rapidly from
+page to page, whereas some change more slowly. I have divided them
+accordingly, and provide explicit commands to reset the slow counters, such
+as \verb"chapter" and \verb"section", whilst allowing the individual page
+instruction to reset the quicker moving sort, such as \verb"Theorem" or
+\verb"Example".
+
+The instructions
+\begin{verbatim}
+\currentstate{chapter}{4}%
+ {The theory of relaxors}
+\currentstate{section}{9}%
+ {Covariant relaxors}
+\end{verbatim}
+tell \LaTeX\ that we are firmly in chapter~4, section~9. \LaTeX\ now needs to
+know how many theorems and examples are behind us. We will tell it at the start
+of the next page.
+
+But first we need to inform \LaTeX\ of the current state
+of nesting of environments
+at the top of the next page.
+We can do this either by leaving the immediately
+preceding text in, or by just giving it a clue like this.
+\begin{verbatim}
+\begin{enumerate}
+ \item \mbox{}
+ \item \mbox{}
+ \item
+ \begin{itemize}
+ \item\mbox{}
+ %%This is the text that
+ %%immediately preceded the curr-
+\end{verbatim}
+The paragraph is clearly in full flow, and so we tell \LaTeX\ to start the page
+flush left, where ``left'' means according to the level of indentation of
+environments.
+\begin{verbatim}
+\startpageflushleft{101}{24}{96}%
+ -ent page.
+ Now we are producing page~101.
+ The next theorem will be~25.
+ The next example will be~97.
+\end{verbatim}
+There is also a similar \verb"\startpage" command to produce a normally
+indented paragraph at the top of the page, or to use if the first thing
+on the page is a theorem, say.
+
+This page ends in mid-flow, so we let \LaTeX\ know about this.
+\begin{verbatim}
+ ...it was clearly not too diff-%
+ \endpageflushright.
+\end{verbatim}
+The \verb"\endpage" command has a similar meaning, but allows normal
+paragraph termination in mid-line. Both cause the page to end flush bottom.
+Just use \verb"\clearpage" if this page is at the end of a chapter.
+
+It may happen that a run of two or more pages have mistakes on them. The macros
+in the style option are designed to make that easier to handle. At the start of
+a second, or subsequent, page in mid-paragraph, insert the instruction
+\begin{verbatim}
+\anotherpageflushleft
+\end{verbatim}
+or include the command \verb"\anotherpage" in its text if it does not have to
+start flush left.
+Terminate any such pages in the usual way.
+This saves having to retype the
+current state of the fast moving counters.
+
+The author has found that floating figures are handled correctly, but \TeX\
+has to see the whole page where the figure is defined. Alternatively,
+the figure can be moved to an appropriate place on the page being printed.
+Clearly a large number of held-over insertions could present some problems,
+and the best course of action might then be to move them to the exact place
+where they should appear, with the ``insert here'' option active.
+
+Footnotes on the current page can be handled by using the optional
+parameter to set the correct mark. Footnotes held over wholly from a
+previous page can be inserted with \verb"\footnotetext".
+A split footnote from a previous page is handled by means of the
+\verb"\morefootnotetext" command, which takes the text of the footnote
+as its only parameter.
+
+The final feature of this style option is the fact that {\em only\/} the pages
+specified above get through to the \verb"dvi" file.
+
+\section{The style in detail}
+
+We first of all define two boolean variables. The variable
+\verb"\ifcorrections" is an indicator of
+whether we are producing corrections or not. Its default is false, so the
+style will have no effect unless it is changed to true.
+Variable \verb"\ifrealpage" is used internally to tell \LaTeX\ to
+actually ship out the current page. Its default is true.
+\begin{verbatim}
+\newif\ifcorrections \correctionsfalse
+\newif\ifrealpage \realpagetrue
+\end{verbatim}
+To switch from this default mode, where the style has no effect, we provide
+a command to change the values of these two variables.
+\begin{verbatim}
+\def\correctionsonly{%
+ \correctionstrue \realpagefalse}
+\end{verbatim}
+
+The sectioning counters can be changed by means of the \verb"\currentstate"
+command. We provide some dummy text by means of the
+\verb"\mbox{}" command.
+\begin{verbatim}
+\def\currentstate#1#2#3{%
+ \setcounter{#1}{#2}%
+ \addtocounter{#1}{-1}%
+ \csname #1\endcsname{#3}\mbox{}}%
+\end{verbatim}
+
+To start a page of output, we specify the page number and then call a
+command \verb"\resetcounters", whose default meaning is to do
+nothing but ignore spaces.
+This command should be redefined in the user's
+preamble to take account of any counters that might
+need updating.
+\begin{verbatim}
+\def\startpage#1{\npage{#1}%
+ \resetcounters}
+\def\startpageflushleft#1{\npage{#1}%
+ \noindent\resetcounters}
+\newcommand{\resetcounters}{\ignorespaces}
+\end{verbatim}
+
+Both commands to produce a new page make use of the \verb"\npage" command.
+\begin{verbatim}
+\def\npage#1{\clearpage
+ \global\realpagetrue
+ \setcounter{page}{#1}}
+\end{verbatim}
+
+The end of a page, flush right or not, is produced by the following two
+commands, or if appropriate by a \verb"\clearpage".
+\begin{verbatim}
+\def\endpageflushright{%
+ {\parfillskip0pt\par\pagebreak}}
+\def\endpage{\pagebreak}
+\end{verbatim}
+If the page after this one also needs to be printed, an alternative way
+of producing it is to use one of the following two commands.
+\begin{verbatim}
+\def\anotherpageflushleft{%
+ \global\realpagetrue\noindent}
+\def\anotherpage{\global\realpagetrue}
+\end{verbatim}
+
+A footnote from the previous page, part of which appears at the bottom of
+the current page, can be handled by inserting a left justified
+footnote without a mark in either the text or the footnote itself.
+This command should be invisible in the surrounding text, and so we make
+certain that it does not alter \TeX' space factor.
+\begin{verbatim}
+\def\morefootnotetext#1{\@bsphack{%
+ \def\@makefntext##1{\noindent ##1}%
+ \footnotetext{#1}}\@esphack}
+\end{verbatim}
+
+The only thing that remains is to make sure that any extraneous text, such
+as is created by sectioning commands, is not printed. We first take a copy
+of the \LaTeX\ command that actually ships a page to the \verb"dvi" file.
+\begin{verbatim}
+\let\@@outputpage\@outputpage
+\end{verbatim}
+The command \verb"\@outputpage" is then redefined in terms of its old
+meaning. First, only ``real'' pages are printed, that is, only when
+\verb"\ifrealpage" returns true. Then, if we are only printing correction
+sheets, we immediately switch off printing of pages after this one.
+Only the \verb"\startpage" and \verb"\anotherpage" commands will switch
+printing on again.
+
+Note that we need to ensure that any special page style
+set by \verb"\thispagestyle" on a page that has not been printed
+does not carry over to the following page.
+For instance, a \verb"\chapter" command will generally introduce a
+\verb"plain" page style command into the document.
+
+The command \verb"\@outputpage" should otherwise do everything that its old
+version did, apart from shipping the page out to the \verb"dvi" file.
+\begin{verbatim}
+\def\@outputpage{%
+ \ifrealpage\@@outputpage
+ \else\global\@specialpagefalse
+ \let\firstmark\botmark\fi
+ \ifcorrections\global\realpagefalse\fi}
+\end{verbatim}
+\makesignature
+\end{document}
+
+%%% CORRECTION.STY
+
+\typeout{Corrections style option for LaTeX, (c) Mike Piff, 07/22/92}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Dr M J Piff %% e-mail:
+%% Department of Pure Mathematics %%
+%% University of Sheffield %% M.Piff@sheffield.ac.uk
+%% Hicks Building %%
+%% Hounsfield Road %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% SHEFFIELD S3 7RH %% Telephone: SHEFFIELD (0742) 768555
+%% England %% Ext. 4431
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/crc/crc.sty b/macros/latex209/contrib/crc/crc.sty
new file mode 100644
index 0000000000..8b75e173b8
--- /dev/null
+++ b/macros/latex209/contrib/crc/crc.sty
@@ -0,0 +1,242 @@
+%%%
+%%% This file name is ``crc.sty''
+%%%
+%%% Document option for using in Proceedings of
+%%% the 1991 International Workshop on Robust Control, San Antonio, Texas
+%%% March 13 - 15, 1991
+%%%
+%%% Modified from ``art12.sty'' and Martensson's ``birk.sty''
+
+\typeout{Document Option `CRC' <16 April 1991>}
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt
+\def\@listi{\parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\normalsize
+
+\if@twoside \oddsidemargin 0.29in \evensidemargin 0.29in \marginparwidth 85pt
+\else \oddsidemargin 0.29in \evensidemargin 0.29in
+ \marginparwidth 68pt
+\fi
+\marginparsep 10pt
+ \topmargin -.5in \headheight 12pt \headsep 25pt \footskip 30pt
+
+\textheight 9.0in %\baselineskip
+\advance\textheight by \topskip
+\textwidth 6.0in \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 8.4pt
+\skip\footins 10.8pt plus 4pt minus 2pt
+\floatsep 14pt plus 2pt minus 4pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt \@maxsep 20pt \dblfloatsep 14pt plus 2pt
+minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 10pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 10pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+
+\parskip 0pt plus 1pt \parindent 2.5em \topsep 10pt plus 4pt minus 6pt
+\partopsep 3pt plus 2pt minus 2pt \itemsep 5pt plus 2.5pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf Part \thepart \par\nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\it}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}.}
+\def\thesubsection {\thesection \arabic{subsection}.}
+\def\thesubsubsection {\thesubsection \arabic{subsubsection}.}
+\def\theparagraph {\thesubsubsection \arabic{paragraph}.}
+\def\thesubparagraph {\theparagraph \arabic{subparagraph}.}
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\parsep 5pt plus 2.5pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+%%
+%%
+\newfont{\titlefont}{cmr17} % Like Birkhauser wants it
+\newfont{\authorfont}{cmr12}
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle \fi\thispagestyle{empty}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em % Vertical space above title.
+ \begin{center}
+ {\LARGE\titlefont \@title \par} % Title set in \LARGE size.
+ \vskip 4em % Vertical space after title.
+ {\large\authorfont % each author set in \large, in a
+ \lineskip .5em % tabular environment
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 2em % Vertical space after author.
+\end{center}
+ \par
+ \vskip 1.5em}
+
+
+%%% Theorem- and Remark like environments (also see the file remark.sty)
+%%% The following theorem-like environments are pre-defined: theorem,
+%%% lemma, corollary, proposition.
+%%% The following remark-like environments are pre-defined:
+%%% definition, remark, example.
+%%% There is also a proof environement and an acknowledgement
+%%% environment.
+
+\input remark.sty
+
+\def\@beginremark#1#2{\trivlist \item[\hskip \labelsep{\it #1\ #2.\ }]}
+\def\@opargbeginremark#1#2#3{\trivlist
+ \item[\hskip \labelsep{\it #1\ #2\ (#3).\ }]}
+
+\newremark{definition}{Definition}
+\newremark{remark}{Remark}
+\newremark{example}{Example}
+
+
+% We put periods after the number, as opposed to standard LaTeX.
+\def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2.\ }]}
+\def\@opargbegintheorem#1#2#3{\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2.\ (#3)\ }]}
+\def\@endtheorem{\endtrivlist}
+
+\newtheorem{theorem}{Theorem}
+\newtheorem{corollary}{Corollary}
+\newtheorem{lemma}{Lemma}
+\newtheorem{proposition}{Proposition}
+\newtheorem{conjecture}{Conjecture}
+
+\def\@rectangle {\hbox{\vrule \vbox to 0.4em
+ {\hrule\hbox to 0.4em{\hfil}\vfil\hrule}\vrule}}
+\xdef\@endgadget #1{{\unskip\nobreak\hfil\penalty50\hskip1em\hbox{}\nobreak
+ \hfil#1\parfillskip=0pt\finalhyphendemerits=0\par}}
+%
+\def\@qedsymbol{Q.E.D.}
+\def\qed{\@endgadget{\@qedsymbol}}
+%
+\newenvironment{declaration}[1]{\trivlist \item[\hskip \labelsep{\bf #1
+ }]\ignorespaces}{\endtrivlist}
+\newenvironment{proofof}[1]{\begin{declaration}{#1}}{\qed\end{declaration}}
+\newenvironment{proof}{\begin{proofof}{Proof.}}{\end{proofof}}
+%
+
+% Somewhat changed appearance
+\def\thebibliography#1{
+\vskip 2pc
+\begin{center}
+{\normalsize\bf REFERENCES\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\list{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\ds@twoside % Left- and right heads different
+
+\def\@threepart#1#2#3{\rlap{#1} \hfil {#2} \hfil \llap{#3}}
+\def\@oddfoot{}\def\@evenfoot{}
+\def\runningtitle#1#2{\def\@oddhead{\@threepart{}{\uppercase{#2}}{}}
+ \def\@evenhead{\@threepart{}{\uppercase{#1}}{}}}
+
+\let\footnotesize=\normalsize
+\def\footnoterule{\kern-3\p@
+ \hrule width 2in%.4\columnwidth
+ \kern 2.6\p@} % The \hrule has default height of .4pt .
+
+
+\def\abstract#1{
+\vskip 3pc
+\begin{center}
+\section*{ABSTRACT}
+\end{center}
+\normalsize{#1}
+\vskip 1pc}
+
+\def\acknowledgement{
+\vskip 2pc
+\noindent{\normalsize\it{Acknowledgement:}}
+\hskip 30pt\ignorespaces}
+
diff --git a/macros/latex209/contrib/crc/remark.sty b/macros/latex209/contrib/crc/remark.sty
new file mode 100644
index 0000000000..569256d5b2
--- /dev/null
+++ b/macros/latex209/contrib/crc/remark.sty
@@ -0,0 +1,135 @@
+%%
+%% This file name is ``remark.sty''
+%%
+% ****************************************
+% * REMARK ENVIRONMENTS *
+% ****************************************
+%
+% The user creates his own remark-like environments with the command
+% \newremark{NAME}{TEXT}[COUNTER] or
+% \newremark{NAME}[OLDNAME]{TEXT}
+% This defines the environment NAME to be just as one would expect a
+% remark environment to be, except that it prints ``TEXT'' instead of
+% ``Remark''.
+%
+% If OLDNAME is given, then environments NAME and OLDNAME use the same
+% counter, so using a NAME environment advances the number of the next
+% NAME environment, and vice-versa.
+%
+% If COUNTER is given, then environment NAME is numbered within COUNTER.
+% E.g., if COUNTER = subsection, then the first NAME in subsection 7.2
+% is numbered TEXT 7.2.1.
+%
+% The way NAME environments are numbered can be changed by redefining
+% \theNAME.
+%
+% DOCUMENT STYLE PARAMETERS
+%
+% \@rmkcounter{COUNTER} : A command such that
+% \edef\theCOUNTER{\@rmkcounter{COUNTER}}
+% defines \theCOUNTER to produce a number for a remark environment.
+% The default is:
+% BEGIN \noexpand\arabic{COUNTER} END
+%
+% \@rmkcountersep : A separator placed between a remark number and
+% the number of the counter within which it is numbered.
+% E.g., to make the third remark of section 7.2 be numbered
+% 7.2-3, \@rmkcountersep should be \def'ed to '-'. Its
+% default is '.'.
+%
+% \@beginremark{NAME}{NUMBER} : A command that begins a remark
+% environment for a 'remark' named 'NAME NUMBER' --
+% e.g., \@beginremark{Lemma}{3.7} starts Lemma 3.7.
+%
+% \@opargbeginremark{NAME}{NUMBER}{OPARG} : A command that begins a remark
+% environment for a 'remark' named 'NAME NUMBER' with optional
+% argument OPARG -- e.g., \@beginremark{Lemma}{3.7}{Jones}
+% starts `Lemma 3.7 (Jones):'.
+%
+% \@endremark : A command that ends a remark environment.
+%
+% \newremark{NAME}{TEXT}[COUNTER] ==
+% BEGIN
+% if \NAME is definable
+% then \@definecounter{NAME}
+% if COUNTER present
+% then \@addtoreset{NAME}{COUNTER} fi
+% \theNAME == BEGIN \theCOUNTER \@rmkcountersep
+% eval\@rmkcounter{NAME} END
+% else \theNAME == BEGIN eval\@rmkcounter{NAME} END
+% \NAME == \@rmk{NAME}{TEXT}
+% \endNAME == \@endremark
+% else error
+% fi
+% END
+%
+% \newremark{NAME}[OLDNAME]{TEXT}==
+% BEGIN
+% if \NAME is definable
+% then \theNAME == \theOLDNAME
+% \NAME == \@rmk{OLDNAME}{TEXT}
+% \endNAME == \@endremark
+% else error
+% fi
+% END
+%
+% \@rmk{NAME}{TEXT} ==
+% BEGIN
+% \refstepcounter{NAME}
+% if next char = [
+% then \@yrmk{NAME}{TEXT}
+% else \@xrmk{NAME}{TEXT}
+% fi
+% END
+%
+% \@xrmk{NAME}{TEXT} ==
+% BEGIN
+% \@beginremark{TEXT}{\theNAME}
+% \ignorespaces
+% END
+%
+% \@yrmk{NAME}{TEXT}[OPARG] ==
+% BEGIN
+% \@opargbeginremark{TEXT}{\theNAME}{OPARG}
+% \ignorespaces
+% END
+%
+\def\newremark#1{\@ifnextchar[{\@ormk{#1}}{\@nrmk{#1}}}
+
+\def\@nrmk#1#2{%
+\@ifnextchar[{\@xnrmk{#1}{#2}}{\@ynrmk{#1}{#2}}}
+
+\def\@xnrmk#1#2[#3]{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\@addtoreset{#1}{#3}%
+\expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+ \csname the#3\endcsname \@rmkcountersep \@rmkcounter{#1}}%
+\global\@namedef{#1}{\@rmk{#1}{#2}}\global\@namedef{end#1}{\@endremark}}}
+
+\def\@ynrmk#1#2{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@rmkcounter{#1}}%
+\global\@namedef{#1}{\@rmk{#1}{#2}}\global\@namedef{end#1}{\@endremark}}}
+
+\def\@ormk#1[#2]#3{\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{the#1}{\@nameuse{the#2}}%
+\global\@namedef{#1}{\@rmk{#2}{#3}}%
+\global\@namedef{end#1}{\@endremark}}}
+
+\def\@rmk#1#2{\refstepcounter
+ {#1}\@ifnextchar[{\@yrmk{#1}{#2}}{\@xrmk{#1}{#2}}}
+
+\def\@xrmk#1#2{\@beginremark{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@yrmk#1#2[#3]{\@opargbeginremark{#2}{\csname
+ the#1\endcsname}{#3}\ignorespaces}
+
+%DEFAULT VALUES
+\def\@rmkcounter#1{\noexpand\arabic{#1}}
+\def\@rmkcountersep{.}
+%deleted September 2, 1986 MDK
+%\def\@makermknumber#1#2{\bf #1 #2:}
+\def\@beginremark#1#2{\trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+\def\@opargbeginremark#1#2#3{\trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+\def\@endremark{\endtrivlist}
+
+
diff --git a/macros/latex209/contrib/cyrmemo/cyracc.def b/macros/latex209/contrib/cyrmemo/cyracc.def
new file mode 100644
index 0000000000..ddc4aaaf75
--- /dev/null
+++ b/macros/latex209/contrib/cyrmemo/cyracc.def
@@ -0,0 +1,272 @@
+%% filename: cyracc.def
+%% version: 2.2b
+%% date: 2001/10/01
+%%
+%% American Mathematical Society
+%% Technical Support
+%% Publications Technical Group
+%% 201 Charles Street
+%% Providence, RI 02904
+%% USA
+%% tel: (401) 455-4080
+%% (800) 321-4267 (USA and Canada only)
+%% fax: (401) 331-3842
+%% email: tech-support@ams.org
+%%
+%% Copyright 1996, 2001, 2009 American Mathematical Society.
+%%
+%% Unlimited copying and redistribution of this file are permitted as
+%% long as this file is not modified. Modifications, and distribution
+%% of modified versions, are permitted, but only if the resulting file
+%% is renamed.
+%%
+%% ====================================================================
+%%
+%% This file is intended for use only with Plain TeX and AMS-TeX.
+%% It is not compatible with LaTeX.
+%%
+%% The \font specification(s) should be made elsewhere, and should include
+%% \newfam\cyrfam
+%% \font\...cyr=wncyr... (e.g. \font\tencyr=wncyr10 )
+%% An appropriate definition for cyrillic, usable in math and text, is
+%% \def\cyr{\fam\cyrfam\...cyr\cyracc}
+%% More extensive instructions for using cyrillic fonts are included
+%% in the AMSFonts 2.2 User's Guide.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chardef\tempcat=\the\catcode`\@
+\catcode`\@=11
+
+% The first set of definitions is what will be in effect outside of cyrillic,
+% i.e., in transliterated text.
+
+% Definition of \cydot is not ideal; real dot should be in an accent font.
+\def\cydot{{\mathsurround=0pt$\cdot$}}
+
+% \ubar is the definition of \b from PLAIN; it may not work in math mode.
+\def\ubar#1{\oalign{#1\crcr\hidewidth
+ \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}
+
+% Soft and hard signs are represented in transliteration by prime and
+% double prime respectively.
+\def\cprime{\/{\mathsurround=0pt$'$}}
+\def\Cprime{{\mathsurround=0pt$'$}}
+\def\cdprime{\/{\mathsurround=0pt$''$}}
+\def\Cdprime{{\mathsurround=0pt$\ubar{\hbox{$''$}}$}}
+
+\def\dbar{dj} % make real barred d when accent font available
+\def\Dbar{Dj} % ""
+
+% It would be nice to make these control sequences unnecessary; that will
+% probably require d to become active.
+\def\dz{dz}
+\def\Dz{Dz}
+\def\dzh{dzh\cydot }
+\def\Dzh{Dzh\cydot }
+
+
+% Stress marks are sometimes used in cyrillic text, mainly for pedagogic
+% reasons. These definitions support stress marks within {\cyr ...};
+% in transliteration, they are suppressed. Stress is indicated in
+% input by \! preceding a letter on which a stress mark is to appear;
+% an acute accent will appear in the output. Since \! is also a plain
+% command, for negative thin space in math mode, test for math mode and
+% include the plain definition as appropriate.
+
+\def\@gobble#1{}
+\def\@testgrave{\`}
+\def\@stressit{\futurelet\chartest\@stresschar }
+
+\def\@stresschar#1{%
+ \ifx #1y\def\result{\futurelet\chartest\@yligature}%
+ \else \ifx #1Y\def\result{\futurelet\chartest\@Yligature}%
+ \else \ifx\chartest\@testgrave \def\result{\accent"26 }%
+ \else \def\result{\accent"26 #1}%
+ \fi \fi \fi
+ \result }
+
+\def\@yligature{%
+ \ifx a\chartest \def\result{\accent"26 \char"1F \@gobble}%
+ \else \ifx u\chartest \def\result{\accent"26 \char"18 \@gobble}%
+ \else \def\result{\accent"26 y}%
+ \fi \fi
+ \result }
+
+\def\@Yligature{%
+ \ifx a\chartest \def\result{\accent"26 \char"17 \@gobble}%
+ \else \ifx A\chartest \def\result{\accent"26 \char"17 \@gobble}%
+ \else \ifx u\chartest \def\result{\accent"26 \char"10 \@gobble}%
+ \else \ifx U\chartest \def\result{\accent"26 \char"10 \@gobble}%
+ \else \def\result{\accent"26 Y}%
+ \fi \fi \fi \fi
+ \result }
+
+\def\!{\ifmmode \mskip-\thinmuskip \fi}
+
+
+% These are the definitions that will produce cyrillic letters within
+% {\cyr ...} for letters represented in input by control sequences and
+% accented latin letters.
+
+\def\cyracc{%
+ \def\cydot{{\kern0pt}}%
+ \def\cprime{\char"7E }\def\Cprime{\char"5E }%
+ \def\cdprime{\char"7F }\def\Cdprime{\char"5F }%
+ \def\dbar{dj}\def\Dbar{Dj}%
+ \def\dz{\char"1E }\def\Dz{\char"16 }%
+ \def\dzh{\char"0A }\def\Dzh{\char"02 }%
+ \def\'##1{\if c##1\char"0F %
+ \else \if C##1\char"07 %
+ \else \accent"26 ##1\fi \fi }%
+ \def\`##1{\if e##1\char"0B %
+ \else \if E##1\char"03 %
+ \else \errmessage{accent \string\` not defined in cyrillic}%
+ ##1\fi \fi }%
+ \def\=##1{\if e##1\char"0D %
+ \else \if E##1\char"05 %
+ \else \if \i##1\char"0C %
+ \else \if I##1\char"04 %
+ \else \errmessage{accent \string\= not defined in cyrillic}%
+ ##1\fi \fi \fi \fi }%
+ \def\u##1{\if \i##1\accent"24 i%
+ \else \accent"24 ##1\fi }%
+ \def\"##1{\if \i##1\accent"20 \char"3D %
+ \else \if I##1\accent"20 \char"04 %
+ \else \accent"20 ##1\fi \fi }%
+ \def\!{\ifmmode \def\result{\mskip-\thinmuskip}%
+ \else \def\result{\@stressit}\fi \result}}
+
+
+% If cyrillic strings are to be included in \mark's, the accents need
+% to be kept in unexpanded form until the \mark's are interpreted.
+% See note on \mark below for details.
+
+\def\keep@cyracc{\let\cyr=\relax \let\i=\relax
+ \let\ubar=\relax \let\cydot=\relax
+ \let\cprime=\relax \let\Cprime=\relax
+ \let\cdprime=\relax \let\Cdprime=\relax
+ \let\dbar=\relax \let\Dbar=\relax
+ \let\dz=\relax \let\Dz=\relax
+ \let\dzh=\relax \let\Dzh=\relax
+ \let\'=\relax \let\`=\relax \let\==\relax
+ \let\u=\relax \let\"=\relax \let\!=\relax }
+
+
+\catcode`\@=\tempcat
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***** CYRACC.DEF *****
+%
+% Access to the cyrillic is through the MR 1980 transliteration scheme,
+% using TeX/Metafont ligature capability. (An alternate set of ligatures
+% exists, for accessing letters beyond the 26 located in the font positions
+% of the 26 roman letters. An authoritative list of the ligature rules is
+% given below, under the heading Ligatures.) Successful use of this file
+% requires appropriate cyrillic and accent fonts, arranged according to
+% the AMS/MR scheme.
+%
+% There are some weaknesses in this ligaturing and accent system.
+% The following are known to be less than satisfactory:
+%
+% the intermediate `ligatures' for shch access numerals;
+% primes (transliteration of hard/soft signs) use math mode;
+% underbar on `cap' double prime is too low (hard sign);
+% thorn d's don't yet exist;
+% \cydot uses math mode;
+% this scheme is not compatible with automatic Russian hyphenation.
+%
+%
+% Notes on the macros:
+%
+% The single space following each hex character code is necessary
+% to prevent the next input character from being gobbled.
+%
+%
+% Note on \mark :
+%
+% Control sequences such as these cyrillic accents should remain
+% unexpanded when generating \mark's; otherwise, the definition of
+% the expanded strings in effect when the \mark is used may be
+% inappropriate. By \let\...=\relax , the \... takes on the important
+% characteristic of a primitive that it will not be expanded further.
+% The following code has been shown to generate correct \mark entries
+% that can be used successfully in running heads:
+%
+% \newtoks\marktoks
+% \def\domark{\keep@cyracc \mark{\the\marktoks}}
+%
+% In running heads, the marks should be accessed using \the to expand
+% the tokens strings properly.
+%
+%
+% Ligatures
+%
+% This is a list of all the letter ligatures in the AMS cyrillic fonts,
+% and in other cyrillic fonts (such as those developed at the University
+% of Washington that use the AMS arrangement).
+%
+% LOWER CASE LIGATURES
+%
+% A. All-letter ligatures
+%
+% ch = `q
+% dj = '016
+% kh = `h
+% lj = '011
+% nj = '010
+% sh = `x; xc = `7 (shc); 7h = `w (shch)
+% ts = `c
+% ya = '037
+% yu = '030
+% zh = '031
+%
+% B. Ligatures with keyed numerals
+%
+% c1 = '017
+% d1 = '016 (dj); d2 = '012 (dzh); d3 = '036 (dz)
+% e0 = '033; e1 = '013; e2 = '015
+% i0 = '032; i1 = '014
+% j1 = '037 (ya); j2 = '030 (yu)
+% l1 = '011 (lj)
+% n1 = '010 (nj)
+% p1 = '176; p2 = '177
+% z1 = '031 (zh)
+%
+% UPPER CASE LIGATURES
+% A. All-letter ligatures
+%
+% CH, Ch = `Q
+% KH, Kh = `H
+% LJ, Lj = '001
+% NJ, Nj = '000
+% SH, Sh = `X; XH, Xh = `6 (SHC, SHc, Shc);
+% 6H, 6h = `W (SHCH, SHCh, SHch, Shch)
+% TS, Ts = `C
+% YA, Ya = '027
+% YU, Yu = '020
+% ZH, Zh = '021
+%
+% B. Ligatures with keyed numerals
+%
+% C1 = '007
+% D1 = '006 (DJ); D2 = '002 (DZH); D3 = '026 (DZ)
+% E0 = '023; E1 = '003; E2 = '005
+% I0 = '022; I1 = '004
+% J1 = '027 (YA); J2 = '020 (YU)
+% L1 = '001 (LJ)
+% N0 = '175 (Number sign); N1 = '000 (NJ)
+% P1 = '136; P2 = '137
+% Z1 = '021 (ZH)
+%
+% DEACTIVATED LIGATURES
+%
+% The dzh and DZH ligatures were originally built in the following manner,
+% but the results were not compatible with desired keyboarding schemes.
+%
+% dz = '036; '036(roman s)h = '012 (dzh)
+% DZ = '026; '026(roman S)H = '002 (DZH)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/cyrmemo/cyrmemo.def b/macros/latex209/contrib/cyrmemo/cyrmemo.def
new file mode 100644
index 0000000000..cb2c52e97a
--- /dev/null
+++ b/macros/latex209/contrib/cyrmemo/cyrmemo.def
@@ -0,0 +1,81 @@
+% ***** CYRMEMO.DEF ***** 11 Aug 85, bb
+%
+% This file contains the instructions necessary to produce the memos
+% which describe the use of the AMS cyrillic font. PLAIN is presumed
+% to be preloaded. The cyrillic 10-point font is required, as is
+% the file CYRACC.DEF.
+
+\newfam\cyrfam
+\font\tencyr=mcyr10
+\font\tensmc=amcsc10 \def\smc{\tensmc}
+
+\input cyracc.def
+
+\def\cyr{\tencyr\cyracc}
+
+
+\newif\iffirstpage
+\firstpagetrue
+\newdimen\pagelgt
+\pagelgt=9in
+\newbox\letterhead
+\setbox\letterhead=\vbox{\vskip 1pc
+ \vbox to 0pt{\halign{\hss{#}\hss\cr
+ \bf American Mathematical Society\cr
+ P.\thinspace O.~Box 6248\cr
+ Providence, RI 02940\cr}\vss}}
+\vsize=\pagelgt
+\advance\vsize by-\ht\letterhead
+
+\headline={\iffirstpage \centerline{\bf INTEROFFICE MEMORANDUM}\else
+ \line{\ssub \hfil \rdate\quad Page \folio}\fi}
+\footline={\iffirstpage \rightline{\box\letterhead}\global\vsize=\pagelgt
+ \global\firstpagefalse \fi}
+
+\def \topitem#1#2{\leavevmode \hangindent 5pc \hbox to 5pc{\bf #1\hss}#2\par }
+
+\def \toname #1<{\gdef\mto{\topitem{To:}{#1}}}
+\def \fromname #1<{\gdef\mfrom{\topitem{From:}{#1}}}
+\def \longsub #1<{\gdef\lsub{\topitem{Subject:}{#1}}}
+\def \shortsub #1<{\gdef\ssub{#1}}
+
+\def \date #1<{\gdef\mdate{\topitem{\bf Date:}{#1}}
+ \gdef\rdate{#1}}
+
+\def \topinfo{{\parindent=0pt
+ \parskip=.5\baselineskip
+ \def \\{\hfil\break }
+ \mdate
+ \mto
+ \mfrom
+ \lsub
+ \vskip\baselineskip }}
+
+
+% Support verbatim listing of TeX source, as defined in TeXbook, p. 421
+% lifted from MANMAC.TEX, and modified slightly as for TUGboat
+
+\chardef\other=12
+\def\ttverbatim{\begingroup
+ \catcode`\\=\other \catcode`\{=\other
+ \catcode`\}=\other \catcode`\$=\other \catcode`\&=\other
+ \catcode`\#=\other \catcode`\%=\other \catcode`\~=\other
+ \catcode`\_=\other \catcode`\^=\other
+ \obeyspaces \obeylines \tt}
+
+\newdimen\ttrightskip
+\ttrightskip=5pc
+
+\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=\z@
+ \catcode`\|=0 \rightskip=-\ttrightskip \ttfinish}
+{\catcode`\|=0 |catcode`|\=\other % | is temporary escape character
+ |obeylines % end of line is active
+ |gdef|ttfinish#1^^M#2\endtt{#1|vbox{#2}|endgroup$$}}
+
+\catcode`\|=\active
+{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}}
+
+\newskip\ttglue
+{\tentt \global\ttglue=.5em plus .25em minus .15em}
+% this should be installed in each font
+
diff --git a/macros/latex209/contrib/cyrmemo/cyrmemo.tex b/macros/latex209/contrib/cyrmemo/cyrmemo.tex
new file mode 100644
index 0000000000..2eeb85f715
--- /dev/null
+++ b/macros/latex209/contrib/cyrmemo/cyrmemo.tex
@@ -0,0 +1,143 @@
+\input cyrmemo.def
+
+\date 12 August 1985<
+\fromname Barbara N. Beeton\\
+ Computer Services Division<
+
+\toname Users of AMS cyrillic in \TeX<
+
+\longsub \TeX82 Cyrillic input instructions<
+\shortsub \TeX82 Cyrillic input<
+
+\topinfo
+
+The AMS cyrillic fonts have been designed so that input using the
+``new'' (post-1982) Math.~Reviews cyrillic transliteration will be
+converted directly to cyrillic text. An alternate input form is
+available for most cyrillic letters which are not transliterated by
+the equivalent single roman letters. Numerals and punctuation follow
+the normal input conventions for roman. Cyrillic is indicated to
+\TeX\ by the command |{\cyr...}|.
+
+The table below is in alphabetical order as given in the table published
+in the 1983 MR Author Index. The three paired columns contain:\ \ %
+(1)~cyrillic;
+(2)~transliteration-style input;
+(3)~alternate input, if any.
+
+\bigskip
+
+\parindent=0pt
+\parskip=0pt
+\baselineskip=15pt
+
+\newbox\BoxA
+\newbox\BoxB
+
+\def\TwoUp{\centerline{%
+ \valign{##\vfil\cr
+ \box\BoxA\cr
+ \noalign{\hfil\vrule\hfil}
+ \box\BoxB\cr}}}
+
+\newbox\TestBox
+\setbox\TestBox=\hbox{\quad\cyr Zh}
+\newdimen\cyrwd
+\cyrwd=\wd\TestBox
+\setbox\TestBox=\hbox{\enskip\tt xCdprime}
+\newdimen\ttawd
+\ttawd=\wd\TestBox
+\setbox\TestBox=\hbox{\enskip\tt N0}
+\newdimen\ttbwd
+\ttbwd=\wd\TestBox
+
+
+\settabs \+\hskip\cyrwd &\hskip\cyrwd\quad
+ &\hskip\ttawd &\hskip\ttawd\quad
+ &\hskip\ttbwd &\hskip\ttbwd\cr
+
+% \def\1 #1,#2;#3,#4;#5,#6<{\+{\cyr\ignorespaces#1}%
+% &{\cyr\ignorespaces#2\hfil}%
+% &\ignorespaces#3\hfil &\ignorespaces#4\hfil
+% &{\tt\ignorespaces#5\hfil}&{\tt\ignorespaces#6\hfil}}
+
+\setbox\BoxA=\vbox{\hsize=.45\hsize \tt
+\+{\cyr A}&{\cyr a}& |A| & |a| & & \cr
+\+{\cyr B}&{\cyr b}& |B| & |b| & & \cr
+\+{\cyr V}&{\cyr v}& |V| & |v| & & \cr
+\+{\cyr G}&{\cyr g}& |G| & |g| & & \cr
+\+{\cyr D}&{\cyr d}& |D| & |d| & & \cr
+\+{\cyr Dj}&{\cyr dj}& |Dj| & |dj| & D1 & d1\cr
+\+{\cyr \'G}&{\cyr \'g}& |\'G| & |\'g| & & \cr
+\+{\cyr E}&{\cyr e}& |E| & |e| & & \cr
+\+{\cyr \"E}&{\cyr \"e}& |\"E| & |\"e| & & \cr
+\+{\cyr \=E}&{\cyr \=e}& |\=E| & |\=e| & E2 & e2\cr
+\+{\cyr Zh}&{\cyr zh}& |Zh| & |zh| & Z1 & z1\cr
+\+{\cyr Z}&{\cyr z}& |Z| & |z| & & \cr
+\+{\cyr I}&{\cyr i}& |I| & |i| & & \cr
+\+{\cyr \=I}&{\cyr \=\i}& |\=I| & |\=\i| & I1 & i1\cr
+\+{\cyr \"I}&{\cyr \"\i}& |\"I| & |\"\i| & & \cr
+\+{\cyr J}&{\cyr j}& |J| & |j| & & \cr
+\+{\cyr \u I}&{\cyr \u\i}& |\u I| & |\u\i| & & \cr
+\+{\cyr K}&{\cyr k}& |K| & |k| & & \cr
+\+{\cyr L}&{\cyr l}& |L| & |l| & & \cr
+\+{\cyr Lj}&{\cyr lj}& |Lj| & |lj| & L1 & l1\cr
+\+{\cyr M}&{\cyr m}& |M| & |m| & & \cr
+\+{\cyr N}&{\cyr n}& |N| & |n| & & \cr
+\+{\cyr Nj}&{\cyr nj}& |Nj| & |nj| & N1 & n1\cr
+\+{\cyr O}&{\cyr o}& |O| & |o| & & \cr
+\+{\cyr P}&{\cyr p}& |P| & |p| & & \cr
+} % end \BoxA
+
+\setbox\BoxB=\vbox{\hsize=.45\hsize \tt
+\+{\cyr R}&{\cyr r}& |R| & |r| & & \cr
+\+{\cyr S}&{\cyr s}& |S| & |s| & & \cr
+\+{\cyr T}&{\cyr t}& |T| & |t| & & \cr
+\+{\cyr \'C}&{\cyr \'c}& |\'C| & |\'c| & C1 & c1\cr
+\+{\cyr \'K}&{\cyr \'k}& |\'K| & |\'k| & & \cr
+\+{\cyr U}&{\cyr u}& |U| & |u| & & \cr
+\+{\cyr \u U}&{\cyr \u u}& |\u U| & |\u u| & & \cr
+\+{\cyr F}&{\cyr f}& |F| & |f| & & \cr
+\+{\cyr Kh}&{\cyr kh}& |Kh| & |kh| & H & h\cr
+\+{\cyr Ts}&{\cyr ts}& |Ts| & |ts| & C & c\cr
+\+{\cyr Ch}&{\cyr ch}& |Ch| & |ch| & Q & q\cr
+\+{\cyr \Dzh}&{\cyr \dzh}& |\Dzh| & |\dzh| & D2 & d2\cr
+\+{\cyr Sh}&{\cyr sh}& |Sh| & |sh| & X & x\cr
+\+{\cyr Shch}&{\cyr shch}& |Shch| & |shch| & W & w\cr
+\+{\cyr \Cdprime}&{\cyr \cdprime}& |\Cdprime| & |\cdprime| & P2 & p2\cr
+\+{\cyr Y}&{\cyr y}& |Y| & |y| & & \cr
+\+{\cyr \Cprime}&{\cyr \cprime}& |\Cprime| & |\cprime| & P1 & p1\cr
+\+{\cyr \`E}&{\cyr \`e}& |\`E| & |\`e| & E1 & e1\cr
+\+{\cyr Yu}&{\cyr yu}& |Yu| & |yu| & J2 & j2\cr
+\+{\cyr Ya}&{\cyr ya}& |Ya| & |ya| & J1 & j1\cr
+\+{\cyr \Dz}&{\cyr \dz}& |\Dz| & |\dz| & D3 & d3\cr
+\+{\cyr N0}& & & & N0 & \cr
+\+{\cyr <}& & |<| & & & \cr
+\+{\cyr >}& & |>| & & & \cr
+\+\hbox to \hsize{}\cr
+} % end \BoxB
+
+\TwoUp
+
+\bigskip
+\normalbaselines
+
+\noindent In addition to the input codes shown in the table, the code
+|\cydot| is used between letters that ordinarily become ligatures to
+indicate that they are really separate letters. For example,
+|t\cydot s|${}\mapsto{}${\cyr t\cydot s} (in transliteration, t\cydot s)
+as opposed to |ts|${}\mapsto{}${\cyr ts}.
+
+\medskip
+
+\noindent {\bf Technical notes:}\ \ The names of the AMS cyrillic fonts
+begin with the letters ``|MC|'' (for ``Math Society cyrillic''). Only
+|MCYR| (lightface) is available at present, but several other styles
+are under construction: |MCB| (bold), |MCSS| (sans serif),
+|MCSSB| (bold sans serif), and others may be added from time to time.
+These fonts were prepared using {\smc Metafont79}.
+In addition to the font files, the file |CYRACC.DEF| must also be
+input for the complete cyrillic alphabet to be usable according to these
+instructions.
+
+\vfil\end
diff --git a/macros/latex209/contrib/deproc/README b/macros/latex209/contrib/deproc/README
new file mode 120000
index 0000000000..afda01a698
--- /dev/null
+++ b/macros/latex209/contrib/deproc/README
@@ -0,0 +1 @@
+deproc.readme \ No newline at end of file
diff --git a/macros/latex209/contrib/deproc/deproc-doc.tex b/macros/latex209/contrib/deproc/deproc-doc.tex
new file mode 100644
index 0000000000..9a3abb72e5
--- /dev/null
+++ b/macros/latex209/contrib/deproc/deproc-doc.tex
@@ -0,0 +1,1043 @@
+% DEPROCLDC.TeX
+%
+% This file is the preliminary version of a talk given at the Spring '86
+% DECUS in Dallas by Barbara Beeton, American Mathematical Society.
+% It describes the method by which an author of an article for the DECUS
+% Proceedings can prepare his camera copy using LaTeX.
+%
+% This file, when run through LaTeX, will be formatted as described below.
+% It uses the macro package DEPROC.STY and the LaTeX ARTICLE.STY files,
+% plus a few locally defined macros, which are given at the top of this file.
+%
+% One page in the output will be blank, reserved for a table. The
+% contents of the table are in the file DEPROCDEV.TeX, which is to be
+% run through TeX as a separate job.
+%
+% Although essentially complete, and to the best of my knowledge correct,
+% some details can be expected to change prior to publication.
+%
+% Barbara Beeton
+% American Mathematical Society
+% P O Box 6248
+% Providence, RI 02940
+% (401)272-9500
+%
+% 20 Apr 86
+
+% If TeX is the program being run, this \input statement is required.
+%\input latex
+\documentstyle [draft]{deproc}
+
+% try to force a blank page in the middle for the floating figure
+
+\def\dblfloatpagefraction{.5}
+\def\textfraction{0}
+\def\floatpagefraction{.5}
+
+% macros needed for this article
+
+\newcommand{\AMS}{American Mathematical Society}
+\newcommand{\Proc}{Proceedings}
+\newcommand{\DP}{\mbox{\tt DEPROC}}
+\newcommand{\DProc}{{\sl DECUS \Proc}}
+\newcommand{\POBox}{P.\thinspace O.~Box }
+\newcommand{\TB}{{\sl The \TeX book}}
+\newcommand{\tub}{TUGboat}
+\newcommand{\TUG}{\TeX\ Users Group}
+\newcommand{\VAX}{\leavevmode\hbox{V\kern-.12em A\kern-.1em X}}
+
+%\def{\<#1>{$\langle${#1}$\rangle$}
+%\newcommand{\cs}{\<cs>}
+%\newcommand{\css}{\cs es}
+\newcommand{\cs}{{\tt cs}}
+\newcommand{\css}{\cs-es}
+\newcommand{\CR}{$\langle${\sc cr}$\rangle$}
+\newcommand{\tab}{$\langle${\sc tab}$\rangle$}
+\newcommand{\ttvert}{{\tt\char'174 }\ignorespaces}
+\newcommand{\allowhbreak}{\penalty0\hskip0pt}
+
+\makeatletter
+\newlength{\n@rmal@labelwidth}\setlength{\n@rmal@labelwidth}{\labelwidth}
+\newlength{\n@rmal@labelsep}\setlength{\n@rmal@labelsep}{\labelsep}
+\def\pseudobibliography#1{\setbox0=\hbox{#1}\list
+ {\ifomit@biblabels \else [\arabic{enumi}]\fi}{\ifomit@biblabels
+ \setlength{\labelwidth}{0pt}\setlength{\labelsep}{0pt}\else
+ \settowidth\labelwidth{[#1]}\fi\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \ifomit@biblabels\else\usecounter{enumi}\fi}}
+\def\endpseudobibliography{\endlist \global\omit@biblabelsfalse
+ \setlength{\labelwidth}{\n@rmal@labelwidth}%
+ \setlength{\labelsep}{\n@rmal@labelsep}}
+\makeatother
+\def\pseudocite#1{[#1]}
+
+
+
+
+
+
+
+
+
+
+\begin{document}
+
+\title{Typesetting Articles for the DECUS
+ Proceedings with \LaTeX}
+\author{Barbara N. Beeton\\
+ \AMS\\
+ Providence, Rhode Island}
+
+\begin{abstract}
+The \DProc\/ have traditionally been published from copy supplied by
+the authors, prepared according to rules devised for typewritten
+material. The power of the computer typesetting language
+\TeX,\footnotemark\ through the macro package \LaTeX, has
+now been applied to this task, and a formatting package, named \DP,
+has been submitted to the DECUS Program Library for use by authors who
+have access to a working \TeX\ system. (The \TeX\ program and related
+software, created by Donald Knuth of Stanford, are in the public domain.)
+
+This paper presents the important features of the \LaTeX\ implementation
+of \DP\ and, through
+examples, shows how it is to be used. Use of \DP, which is
+encouraged, will produce the author's work, nicely typeset, in the
+standard {\sl\Proc\/} format. There is a general description
+of how the package works and of the mechanical requirements for camera
+copy of {\sl\Proc\/} articles, which will be created on the
+author's local output device.
+
+No prior knowledge of \TeX\ or \LaTeX\ is required, but authors using \DP\ will
+be expected to learn some rudiments, especially if their papers
+contain special notation or formats such as tables.
+\end{abstract}
+
+%\begin{document}
+
+\maketitle
+
+\footnotetext[1]{\TeX\ is a trademark of the \AMS.}
+
+The \DProc, like the conference proceedings of many other organizations,
+is rushed to publication as quickly as possible so that the material
+will reach the conference participants and other interested readers
+before its value is diminished by time. Reproducing author-prepared
+copy eliminates the considerable bother and expense of typesetting,
+proofreading and corrections. The published document should be
+compact, uniform in appearance, and readable, regardless of the kind
+or quality of printing device available to the author. For these
+reasons, instructions to authors have heretofore assumed that nothing
+more elaborate is available than an ordinary typewriter or dot matrix
+printer.
+
+To enforce uniformity, the author is provided with ``model paper'', on
+which are printed (in non-reproducing ink) column and page borders,
+alignment marks, and instructions for placement of title, author, and
+the other parts of a proceedings article. The dimensions of the model
+paper are almost always larger than those of the published \Proc\Dash
+this permits more text to be packed onto each page, and also improves
+its appearance or ``quality'' when photographically reduced, smoothing
+out the rough edges of letters and symbols generated by a typewriter,
+dot-matrix printer or other ``low-resolution'' device.
+
+Within the past few years, advances in laser-printer technology have
+made good-quality output accessible to a growing number of users,
+through a widening selection of low-cost output systems based on print
+engines with 300 dot-per-inch resolution and (relatively) easy-to-use
+interfaces. Such devices have been attached to most kinds of DEC
+computers, and drivers now exist to print the output from such programs
+as Scribe,\footnote{Scribe is a trademark of Unilogic Ltd.}
+\TeX\ and Troff. Most low-end laser printers cannot use paper wider
+than $8\sfrac1/2''$, however, so even if both a good composition
+program and output printer had been available, until now an author
+would have been discouraged from using them for mechanical reasons.
+
+The editor of the \DProc\/ has now agreed to accept typeset copy
+printed on such a system at 100\% on $8\sfrac1/2\times11''$ paper,
+provided it conforms to the published format. This article (which has
+itself been produced by the technique it describes) introduces a
+package, \DP, designed to prepare {\sl\Proc\/} articles using \LaTeX.
+
+
+
+
+
+
+
+
+
+
+
+\newcommand{\Dag}{$^{\thinspace\dagger}$}
+\newcommand{\1}[1]{{\let\\=\newline\parbox[t]{.177\hsize}{\raggedright#1}}}
+\newcommand{\8}{\vrule height .9\baselineskip depth 0pt width 0pt\ignorespaces}
+\newcommand{\9}{\vrule height 0pt depth .4\baselineskip width 0pt}
+\newcommand{\KnS}{Kellerman\thinspace\&\thinspace Smith}
+\begin{figure*}[p]
+\begin{tabular}{|l|l|l|l|l|} \hline
+\1{\8\9}& \multicolumn{1}{c}{DECSystem-10}
+ & \multicolumn{1}{c}{DECSYSTEM-20}
+ & \multicolumn{1}{c}{VAX (Unix)}
+ & \multicolumn{1}{c}{VAX (VMS)} \\ \hline
+\1{\8 Allied Linotronic\\L100, L300P\9}
+ & & & \1{Textset}
+ & \1{Textset} \\ \hline
+\1{\8 Apple LaserWriter\\ \9}
+ & & & \1{Carleton University\\Textset\Dag}
+ & \1{Textset\Dag} \\ \hline
+\1{\8 Autologic\\APS-5, Micro-5\9}
+ & & \1{Textset}
+ & \1{Textset}
+ & \1{Intergraph\Dag\\Textset} \\ \hline
+\1{\8 Canon\\ \9}
+ & & & \1{Canon} & \\ \hline
+\1{\8 Compugraphic\\8400, 8600\9}
+ & & & & \1{\KnS} \\ \hline
+\1{\8 DEC LN01\\ \9}
+ & & & \1{Univ of Washington}
+ & \1{Louisiana State U} \\ \hline
+\1{\8 DEC LN03\\ \9}
+ & & & & \1{DEC\\ \KnS} \\ \hline
+\1{\8 Imagen\\ \9}
+ & \1{Stanford\\Vanderbilt}
+ & \1{SRI\\Columbia}
+ & \1{Univ of Maryland}
+ & \1{\KnS\Dag} \\ \hline
+\1{\8 QMS Lasergrafix\\ \9}
+ & & & \1{Textset\\Univ of Washington}
+ & \1{GA Technologies\\Texas A\&M\\Textset\9} \\ \hline
+\1{\8 Symbolics\\ \9}
+ & & \1{Univ of Washington}
+ & \1{Univ of Washington}
+ & \1{UMass} \\ \hline
+\1{\8 Talaris\\ \9}
+ & \1{Talaris\Dag}
+ & \1{Talaris\Dag}
+ & \1{Talaris\Dag}
+ & \1{Talaris\Dag} \\ \hline
+\1{\8 Xerox Dover\\ \9}
+ & & \1{Carnegie-Mellon U}
+ & \1{Stanford} & \\ \hline
+\1{\8 Xerox 2700\\ \9}
+ & & \1{Ohio State U}
+ & \1{Ohio State U} & \\ \hline
+\1{\8 Xerox 9700\\ \9}
+ & \1{Univ of Delaware}
+ & & \1{Univ of Delaware}
+ & \1{ACC\\Textset} \\ \hline
+\end{tabular}
+\par\vspace{2pt}
+\mbox{\Dag\thinspace Graphics supported}
+\vspace{-.5\baselineskip}
+\caption[outdev]{Computer/output device combinations with \TeX\ interfaces}
+\vspace{.5\baselineskip}
+\label{outdev}
+\end{figure*}
+\newcommand{\site}[1]{\par \noindent \hangindent 20pt
+ {\bf #1}\quad\ignorespaces}
+\begin{table*}[p]
+\hbox to\textwidth{%
+\parbox[t]{.47\textwidth}{%
+ Information regarding the interfaces shown here can be obtained
+ from the individual listed below for the site. This table and
+ the names of the site contacts were provided by the \TeX\ Users Group.
+
+\raggedright \hyphenpenalty=10000 \exhyphenpenalty=10000
+\medskip
+\site{ACC {\rm(Advanced Computer Communications)}} Diane~Cast, 805-963-9431
+
+\site{Canon {\rm (Tokyo)}} Masaaki Nagashima, (03) 758-2111
+
+\site{Carleton University} Neil Holtz, 613-231-7145
+
+\site{Carnegie-Mellon University} Howard Gayle, 412-578-3042
+
+\site{Columbia University} Frank da Cruz, 212-280-5126
+
+\site{DEC {\rm(Digital Equipment Corp)}} John Sauter, 603-881-2301
+
+\site{GA Technologies} Phil Andrews, 619-455-4583
+
+\site{Intergraph} Mike Cunningham, 205-772-2000
+
+\site{\KnS} Barry Smith, 503-222-4234
+
+}% end \parbox
+\hfill
+\parbox[t]{.47\textwidth}{%
+\raggedright \hyphenpenalty=10000 \exhyphenpenalty=10000
+\site{Louisiana State University} Neil Stoltzfus, 504-388-1570
+
+\site{Ohio State University} John Gourlay, 614-422-6653
+
+\site{SRI}
+
+\site{Stanford}
+
+\site{Talaris} Sonny Burkett, 619-587-0787
+
+\site{Texas A\&M} Bart Childs, 409-845-5470
+
+\site{Textset} Bruce Baker, 313-996-3566
+
+\site{University of Delaware} Daniel Grim, 302-451-1990
+
+\site{University of Maryland} Chris Torek, 301-454-7690
+
+\site{University of Massachusetts} Gary Wallace, 413-545-4296
+
+\site{University of Washington} Pierre MacKay, 206-543-2386
+
+\site{Vanderbilt University} H. Denson Burnum, 615-322-2357
+
+}% end \parbox
+}% end \line
+\end{table*}
+
+
+
+
+
+
+
+
+
+
+
+\section{What is \TeX? What is \LaTeX?}
+
+\TeX\ is a public-domain typesetting language created by Donald Knuth
+of Stanford University. His original aim was to typeset his own books,
+in particular {\sl The Art of Computer Programming\/} \cite{ACP}, with
+a quality equal to that produced by the best traditional composition
+methods. The technical content of these books assured that full
+attention was given to the niceties of formatting mathematical
+expressions, as well as to the structures of documents commonly
+encountered in technical publishing.
+
+\TeX\ deals with low-level concepts familiar to typesetters\Dash type
+size, leading, interword spacing and kerning. It does not incorporate
+directly the structures an author encounters when writing a paper\Dash
+title, figure references, bibliographic entries. However, \TeX\ is
+essentially a macro compiler, and provides a full vocabulary of low-level
+functions that can be manipulated by knowledgeable users to create
+higher-level packages to support the casual user.
+
+One such macro package is \LaTeX. \LaTeX\ \cite{LT} is
+a powerful document formatter, providing the capability to format
+books and reports, with functionality similar to that provided by
+Scribe.
+
+
+
+
+
+
+
+
+
+
+
+\section{The \DP\ macro package}
+
+In order to use this implementation of the \DP\ macro package, the
+author of a \DProc\/ article must have available a working \LaTeX\ system,
+which presupposes a working \TeX\ system.
+\TeX\ has been implemented on \VAX es and DECsystem-10s and -20s
+under the standard operating systems.
+There is also a good selection of output devices available, capable
+of production output of quality suitable for the {\sl\Proc\/};
+Table~\ref{outdev}
+shows the computer/output device combinations known to the \TUG.
+(\TeX\ has not, however, been implemented on PDP-11s, since
+it requires a larger address space than is supported on those machines.)
+
+\LaTeX\ may not be available to all \TeX\ users. (\TeX\ is a very large
+program by itself, and routinely adding a large macro package can put
+unwelcome strain on an already overloaded machine. Some system
+administrators prefer not to give their users that opportunity.)
+An earlier implementation of \DP\ does not require \LaTeX, but only
+\TeX\ itself; it was
+described in \cite{DP}, and the supporting files are on the Fall~'85
+DECUS Program Library tapes for Languages \& Tools, Large Systems, and \VAX.
+
+The present \LaTeX-based version of this macro package
+is called \verb|DEPROC.STY|, for ``\DProc\/ style file''. It is
+an ordinary ASCII file, and has been submitted to the Spring~86 DECUS
+Program Library for the same systems listed above.
+
+
+
+
+
+
+
+
+
+
+
+\section{Some preliminary \TeX nical information}
+
+An author who intends to use the \LaTeX\ version of \DP\ should
+preferably have used \LaTeX\ already. Nonetheless, a few basic
+concepts are worth repeating. (\LaTeX\ is identical to \TeX\ in
+many ways. The following discussion will specify \LaTeX\ only when
+there is a difference.)
+
+\subsection{Spacing}
+
+\TeX\ uses different spacing rules in text (paragraphs) and math.
+Paragraphs are set so that interword spacing is as uniform as possible.
+Wider spaces are set after punctuation that indicates the ends of
+sentences (period, !\ and ?). Within math, the best traditions for
+arranging symbols in two dimensions, including proper spacing, are
+observed. Thus input spacing is largely ignored, except
+for its functions of separating words and marking the boundaries of
+certain kinds of expressions. \TeX\ considers
+multiple spaces in an input file to be equivalent to a single space.
+The carriage return \CR\ and the tab character \tab\ are equivalent
+to ordinary spaces, except in special environments (noted below).
+And all spaces at the beginning of any line are ignored.
+
+\subsection{Paragraph breaks}
+
+A blank line in the input file indicates a paragraph break. A line is
+blank if it contains only a \CR\ or spaces and a \CR. Multiple blank
+lines are equivalent to a single blank line. (A paragraph can also be
+indicated by \verb|\par|; terms beginning with \verb|\| are described below.)
+
+\subsection{Comments}
+
+A comment may be entered on any line; a comment begins with a \verb|%| sign:
+\begin{verbatim}
+% This line contains nothing but a comment.
+\newcommand{\cs}{...}% explanatory comment
+... Smythe % ***** check spelling *****
+\end{verbatim}
+\TeX\ will ignore the \verb|%| and everything following it, including the \CR.
+Thus, the space ordinarily indicated by the \CR\ will be suppressed,
+and if a space is really wanted between the last item before a comment
+and the first item on the next line, it must be input before the \verb|%|.
+Conversely, if no space is wanted between the last item on a line and
+the first item on the next, a \verb|%| can be used to suppress it
+intentionally.
+
+\subsection{Control sequences, also called macros}
+
+A ``control sequence'' \cs\ is an instruction for \TeX\ to perform
+some action or to produce a particular symbol. A \cs\ begins with a
+backslash, \verb|\|. There are two types of \css:
+\begin{itemize}
+\item[--] A ``control word'' consists of \verb|\| followed by one or more
+ letters. It is terminated by any non-letter, including a space;
+ multiple spaces follow the usual compression rule, so a
+ special technique (see next paragraph) is required to create an
+ output space after a control word. \verb|\TeX| is an example of
+ a control word; it produces the \TeX\ logo.
+\item[--] A ``control symbol'' consists of \verb|\| followed by exactly one
+ non-letter. Since its length is known, no special terminator
+ is required. \verb|\&| is a control symbol to produce an \&.
+ \verb*|\ | (\verb|\| followed by a space) is an explicit space, to
+ be used where an output space should follow an element
+ input as a control word.
+\end{itemize}
+
+\noindent
+New \css\ can be defined within a document to make input easier or clearer.
+A few principles governing \cs\ names should be observed carefully.
+\begin{itemize}
+\item[--] Case matters; \verb|\csname| is not the same as
+ \verb|\Csname| or \verb|\CSName|.
+ Try to pick a name that means something to you, and is easy to type.
+\item[--] Don't try to redefine an existing \cs\ name unless you really
+ know what you're doing; results, as they say, ``may be unpredictable''.
+\item[--] Never define or redefine any \cs\ whose name begins with
+ `\verb|\end|'.
+\end{itemize}
+
+\noindent
+To define a new command,
+\begin{verbatim}
+\newcommand{\csname}{...something...}
+\end{verbatim}
+If the name has been used before, \LaTeX\ will stop and report an
+error. If you are really adamant about re-using this name,
+\begin{verbatim}
+\renewcommand{\csname}{...something...}
+\end{verbatim}
+will assign it the new meaning.
+
+The control symbols \verb|\0,...,\9| always start out undefined, so they are
+available for transient use without checking.
+
+A \cs\ with arguments is defined by
+\begin{verbatim}
+\newcommand{\csname}[2]{...#1...{#2}...}
+\end{verbatim}
+with the number of arguments given in brackets as shown; for details,
+see \cite{LT}.
+
+\subsection{Math}
+
+Mathematical expressions are input between \verb|\(...\)|. Display
+math is begun and ended with \verb|\[...\]|. For details of math
+input, see \cite{LT}.
+%(Math input is also described in \cite{FG} and \cite{TB}, in
+%increasing order of complexity of expressions handled.)
+
+
+
+
+
+
+
+
+
+
+
+\section{Starting a \DProc\/ article}
+
+The first step in preparing an article is to create a file.
+The first two lines in this file should be
+\begin{verbatim}
+\documentstyle{deproc}
+\begin{document}
+\end{verbatim}
+This will cause the formatting definitions to be loaded when the file
+is input to \LaTeX.
+
+Next, enter the ``top matter''. This consists of such
+things as the title of the article, the author(s) and their addresses,
+and the abstract.
+
+\subsection{Title and authors}
+
+For an article with a short title and one author, the input looks like this:
+\begin{verbatim}
+\title{A One-Line Title}
+\author{Author Name\\
+ Author's Organization\\
+ City, State}
+\end{verbatim}
+The double backslashes \verb"\\" indicate line breaks. This technique is
+also used to break up long titles:
+\begin{verbatim}
+\title{Here We Have a Particularly
+ Long Title\\That Can't Possibly
+ Fit on a Single Line}
+\end{verbatim}
+This will be set (in a boldface font slightly larger than text size) as\strut
+\begin{center}
+ \bf Here We Have a Particularly Long Title\\
+ That Can't Possibly Fit on a Single Line
+\end{center}
+Notice that the way the lines are broken in the input file is not how
+they appear in the output\Dash only \verb"\\" matters to \TeX.
+Actually, \TeX\ will break long titles into lines short enough to fit
+on the page, but a multi-line title usually makes more sense to the reader
+if the author decides where the line breaks should occur.
+
+For multiple authors, the same \verb"\author" tag is used with
+\verb"\and" or \verb"\And":
+\begin{verbatim}
+\author{First Author
+ \and
+ Second Author\\
+ Common Organization\\
+ City, State}
+\end{verbatim}
+or
+\begin{verbatim}
+\author{First Author\\
+ First Organization\\
+ City, State
+ \And
+ Second Author\\
+ Second Organization\\
+ City, State}
+\end{verbatim}
+and so forth, which will appear thus in the output:\strut
+\begin{center}
+ {\bf First Author\enspace{\rm and}\enspace Second Author}\\
+ Common Organization\\
+ City, State
+\end{center}
+\par\noindent
+or\strut
+\begin{center}
+ \interlinepenalty=10000
+ {\bf First Author}\\
+ First Organization\\
+ City, State\\
+ \hspace{10pt}\\
+ {\bf Second Author}\\
+ Second Organization\\
+ City, State\endgraf
+\end{center}
+%\noindent
+Authors' names (the first line, and the first line after \verb"\And") are
+printed in boldface; if an author name is to appear on any other line,
+begin that line with \verb"\bf" (the \TeX\ instruction for boldface type).
+
+The title and author of the present paper look like this in the file:
+\begin{verbatim}
+\title{Typesetting Articles for the DECUS
+ Proceedings with \LaTeX}
+\author{Barbara N. Beeton\\
+ \AMS\\
+ Providence, Rhode Island}
+\end{verbatim}
+One item to look at here is \verb"\AMS", which becomes \AMS\ in the output.
+This is an example of a ``local definition'', something that is not likely
+to be useful to anyone else, but can save the author a lot of time correcting
+typing errors. Local definitions that are used throughout an article are
+best input right after specifying the document style:
+\begin{verbatim}
+\documentstyle{deproc}
+\newcommand{\AMS}{American
+ Mathematical Society}
+...
+\begin{document}
+\end{verbatim}
+
+\subsection{Abstract}
+
+The abstract is the final part of the top matter.
+\begin{verbatim}
+\begin{abstract}
+This is a short summary of what
+the article is about.
+\end{abstract}
+\end{verbatim}
+\par\noindent
+The heading ``{\bf Abstract}'' is provided automatically; don't input it.
+The abstract may contain more than one paragraph. Paragraphs are
+separated by a blank line or by \verb"\par", as usual.
+
+The top matter is now complete. The body of the article follows.
+\begin{itemize} \parskip=0pt \itemsep=0pt
+\item[] \verb"\maketitle"
+\item[] (\it{Text of footnotes to the top matter is given here\/})
+\item[] {}
+\item[] \verb"This is the first sentence of article text."
+\item[] \verb"..."
+\item[] \verb"\end{document}"
+\end{itemize}
+
+
+
+
+
+
+
+
+
+
+
+\section{The body of the article}
+
+An article can start out with text or with a heading.
+Three levels of headings are provided by \DP:
+\begin{verbatim}
+\section{Section heading}
+\subsection{Subsection heading}
+\subsubsection{Subsubsection heading}
+\end{verbatim}
+These produce headings (with extra space above and below, not shown here)
+in the following styles:
+$$\vbox{\advance\baselineskip by 2pt
+\centerline{\bf Section heading}
+\leftline{\bf Subsection heading}
+\leftline{\it Subsubsection heading}}
+$$
+
+The first paragraph following a heading will not be indented in the
+default style. Other paragraphs will be indented a standard amount.
+To suppress indentation on a single paragraph, precede it by \verb"\noindent".
+
+\subsection{Footnotes}
+
+A footnote consists of two parts, the mark and the text. These
+are usually entered as a unit\footnote{Like this.}:
+\begin{verbatim}
+... as a unit\footnote{Like this.}:
+\end{verbatim}
+This is equivalent to the two statements\footnotemark
+\footnotetext{Or this.}
+\begin{verbatim}
+... two statements\footnotemark
+\footnotetext{Or this.}
+\end{verbatim}
+The two-statement form must be used for footnotes in the title or
+abstract and in ``boxed'' environments
+ (which will not be explained here; see
+\cite{LT} for details). In such cases, the \verb"\footnotetext" should
+be specified as soon as possible after completion of the special
+environment.
+
+Footnotes are automatically numbered sequentially starting with 1.
+Numbers may also be given explicitly, between \verb"[...]"
+following the \verb"\footnote..." command. In most contexts, this is
+optional, but for footnotes in abstracts or in ``boxed'' environments,
+the number {\sl must\/} be given for the \verb"\footnotetext"; the
+first footnote in this article was produced by the following:
+\begin{verbatim}
+\maketitle
+\footnotetext[1]{\TeX\ is a trademark
+ of the \AMS.}
+\end{verbatim}
+
+Footnote numbers can be reset if necessary by
+\begin{itemize}
+\item[] \verb"\resetcounter{footnote}{"{\it integer\/}\verb"}"
+\end{itemize}
+
+
+\subsection{Quotations}
+
+Short quotations, of less than a paragraph, are set with
+\begin{verbatim}
+\begin{quote}
+If you can't fix it, ... {\em Button}
+\end{quote}
+\end{verbatim}
+and look like this:
+\begin{quote}
+If you can't fix it, call it a feature. \ {\em Button}
+\end{quote}
+
+\noindent
+For longer quotations, use
+\begin{verbatim}
+\begin{quotation}
+...
+\end{quotation}
+\end{verbatim}
+in a similar manner, separating paragraphs with blank lines as usual.
+
+
+\subsection{Lists}
+
+Itemized and enumerated lists occur in many \DProc\/ articles.
+\LaTeX\ provides automatic counters and up to four levels of nesting.
+Here is a short example of a two-level itemized list.
+\begin{verbatim}
+\begin{itemize}
+ \item first item
+ \item second item
+ \begin{itemize}
+ \item new level
+ \item one more
+ \end{itemize}
+ \item back a level
+\end{itemize}
+\end{verbatim}
+\par\noindent
+Here's what the output looks like, after padding out the text a bit to show
+how longer items look.
+\begin{itemize}
+\item The first item in this list isn't particularly interesting,
+ but it has to be long enough to make two lines.
+\item The second item isn't either.
+\begin{itemize}
+\item Even going to a new level doesn't add very much
+ excitement to this exercise.
+\item We'll do one more at this level.
+\end{itemize}
+\item Then we'll go back a level to finish things off.
+\end{itemize}
+%\noindent
+If \verb"{enumerate}" is specified instead of \verb"{itemize}", the
+items will be numbered\Dash 1, 2,\dots\ at the first level,
+a, b,\dots\ at the second level. If the default labels aren't what
+you want, an overriding label may be specified, for example,
+\mbox{\verb"[--]"} (used in Figure~\ref{figtype}). Each item
+comprises one paragraph; an unlabeled paragraph can be produced by
+specifying an empty label. Extra space above and below a list is
+provided automatically.
+
+\begin{figure}[t,b]
+\hrule
+\begin{itemize}
+\item[--] Small figures which can be set in place, i.e., in the same
+ relative position where they occur in the input file
+\item[--] One-column figures to be set at the top or bottom of the
+ first available column
+\item[--] Double-column figures to be set at the top or bottom of the
+ first available page
+\item[--] Full-page figures
+\end{itemize}
+\vspace{-.5\baselineskip}
+\caption[figtype]{Possible figure formats}
+\vspace{.5\baselineskip}
+\hrule
+\label{figtype}
+\end{figure}
+
+\subsection{Figures}
+
+Figures come in the sizes, shapes and page locations listed in
+Figure \ref{figtype}. Not all these formats are supported yet by \DP\@.
+In particular, two-column figures cannot be placed at the
+bottom of text pages.
+
+\subsubsection{One-column figures}
+
+To get a single-column figure, enter
+\begin{itemize} \parskip=0pt \itemsep=0pt
+\item[] \verb"\begin{figure}["{\it loc\/}\verb"]"
+\item[] {\it content of figure}
+\item[] \verb"\caption{Caption text}"
+\item[] \verb"\label{"{\it label\/}\verb"}"
+\item[] \verb"\end{figure}"
+\end{itemize}
+\par\noindent
+{\it loc\/} is the location where the figure is to be placed, specified
+by one to four letters (in the order in which you find the possible
+locations suitable), as follows:
+\begin{itemize}
+\item[\verb"h"] here, at the position in the text where the figure is input.
+\item[\verb"t"] at the top of a text page.
+\item[\verb"b"] at the bottom of a text page.
+\item[\verb"p"] on a page of ``floats''.
+\end{itemize}
+\par\noindent
+The default {\it loc\/} is \verb"tbp"; note that figures will not be
+placed in-line unless \verb"h" is indicated explicitly. For
+additional details, see \cite{LT}.
+
+Figures are numbered automatically. The optional {\it label\/} is
+provided to permit references in the text to the figure:
+\begin{itemize}
+\item[] \verb"... shown in Figure~\ref{"{\it label\/}\verb"}"
+\end{itemize}
+
+To reserve space for figures which will be prepared separately,
+use the command \verb"\vspace{"{\it dimension\/}\verb"}".
+Some space is automatically skipped above and below a figure, and also
+between the figure and the caption, so the dimension given with
+\verb"\vspace" should be precisely the height of the item to be pasted in.
+
+
+\subsubsection{Two-column figures}
+
+Double-column figures can be placed either at the top of a text
+page or on a separate page of ``floats''. The command syntax is the same
+as for one-column figures, except that the ``star'' notation
+\verb"\begin{figure*}...\end{figure*}" is used.
+
+
+\subsubsection{Full-page figures}
+
+Full-page figures are a special case of two-column figures,
+specified by \verb"\begin{figure*}[p]...\end{figure*}". A full-page
+figure will be placed on the first available page. If space is to
+be reserved for insertion of a separately-prepared figure, use the
+\verb"\vspace" command with a suitably large dimension; \verb"8.5in"
+should be sufficient.
+
+
+\subsection{Tables}
+
+\LaTeX\ contains powerful table-formatting capabilities. However, since
+their use is specialized and the rules somewhat complex, specifics
+are not presented here; see \cite{LT} for details.
+
+
+\subsection{Verbatim}
+
+Verbatim items are printed in so-called ``typewriter'' style, using \TeX's
+\verb"\tt" font. In-text verbatim items are preceded by the command
+\verb"\verb" and enclosed within a pair of identical characters which
+do not occur within the verbatim string (except a space, a letter,
+or \verb"*"), for example, vertical bars \verb"|...|" or ditto marks
+\verb|"..."|. Blocks of verbatim code are delimited by
+\begin{itemize} \parskip=0pt \itemsep=0pt
+\item[] \verb"\begin{verbatim}"
+\item[] \verb"..."
+\item[] \verb"\end{verbatim}"
+\end{itemize}
+\verb"\begin{verbatim}" and \verb"\end{verbatim}" should be on lines
+by themselves. Within verbatim
+mode, \CR s are obeyed as line breaks, not spaces. An input line that is too
+long for the current column width will be broken at a space if possible,
+and the remainder of the line hanging indented on the next output line;
+since this may change the meaning of the verbatim passage, such passages
+should be checked with special care in the output. Overlong lines also
+frequently result in overfull \verb"\hbox"es, which are listed in the
+transcript file. To mark overfull \verb"\hbox"es clearly on the printed
+output (with black boxes: \rule{5pt}{\ht\strutbox}\thinspace), specify
+\begin{verbatim}
+\documentstyle [draft]{deproc}
+\end{verbatim}
+at the beginning of your input file.
+%{\vrule height\ht\strutbox depth\dp\strutbox width 5pt }\thinspace.
+The \verb"draft" option can easily be removed when you are ready to
+prepare the final copy.
+
+A passage occurring between \verb"\begin{verbatim}..."\allowhbreak
+\verb"\end{verbatim}"
+is treated as a unit by \LaTeX\Dash if it is too long for the vertical
+space available, it either will be carried over as a unit to the next
+column or page, or will result in an overfull \verb"\vbox", which will
+be noted only in the transcript of the \LaTeX\ run. In such a case,
+the best remedy is to break the passage in two, by inserting another
+\verb"\end{verbatim} \begin{verbatim}".
+
+Verbatim mode is suitable for program listings, indicating keyboarding
+instructions, file names, and similar uses.
+
+\subsection{References, bibliography}
+
+References in text to items in the bibliography are input as
+\begin{itemize}
+\item[] \verb"\cite{"{\it label\/}\verb"}"
+\item[] \verb"\cite["{\it text\/}\verb"]{"{\it label\/}\verb"}"
+\end{itemize}
+where the label is the same as that specified for the item in the bibliography.
+For a label ``ABC'', the reference will be rendered \pseudocite{ABC}.
+See \cite[pp.~73, 189]{LT} for further details.
+
+References may also be made to figures, tables, or anything else for which
+you have established a label:
+\begin{itemize}
+\item[] \verb"\ref{"{\it label\/}\verb"}"
+\item[] \verb"\pageref{"{\it label\/}\verb"}"
+\end{itemize}
+\verb"\pageref" is not immediately useful\Dash the page numbers
+generated by \TeX\ will not be the same as those assigned when the
+collection is put together in the editorial office. This feature would
+become useful if it ever becomes possible to submit articles electronically,
+as \LaTeX\ input files.
+
+Before you start to input the reference list, some housekeeping is
+required\Dash you must decide what you want the list to look like.
+This is what the input looks like for one of the items in the reference
+list at the end of this article:
+\begin{verbatim}
+\bibitem[TB]{TB} Knuth, Donald E., \TB,
+ Addison-Wesley and \AMS, 1984.
+\end{verbatim}
+(\verb"\TB" and \verb"\AMS" are among the local definitions for this article.)
+Default output looks like this:
+\smallskip
+{\begin{pseudobibliography}{ACP}
+\bibitem[TB]{TB} Knuth, Donald E., \TB, Addison-Wesley and \AMS, 1984.\endgraf
+\end{pseudobibliography}
+}
+\smallskip
+
+Labels may also be omitted, or numbered sequentially. Begin the
+reference list with this command:
+\begin{itemize}
+\item[] \verb"\begin{thebibliography}{"{\it widest label\/}\verb"}"
+\end{itemize}
+This will generate the {\bf References} section heading, and establish
+the item indentation, using the width of the specified label.
+
+If you do not wish to use labels, substitute \verb"\omit" for the widest
+label. (The \verb"{...}" are still required in the context of
+\verb"\bibitem".)
+\begin{verbatim}
+\bibitem{} Knuth, Donald E., ...
+\end{verbatim}
+will result in
+\par\nobreak\smallskip
+{\begin{pseudobibliography}{\omit}
+\bibitem{} Knuth, Donald E., \TB, Addison-Wesley and \AMS, 1984.\endgraf
+\end{pseudobibliography}
+}
+\smallskip
+\noindent Note that \verb"\cite" cannot be used if references are unlabeled.
+
+If your labels are numeric, no labels need be entered\Dash items will
+automatically be numbered sequentially. However, the widest label
+must be specified at the beginning of \verb"thebibliography" environment.
+The input
+\begin{verbatim}
+\begin{thebibliography}{99}
+\bibitem{TB} Knuth, Donald E., ...
+\end{verbatim}
+will now look like this:
+\par\nobreak\smallskip
+{\begin{pseudobibliography}{99}
+\bibitem[2]{TB} Knuth, Donald E., \TB, Addison-Wesley and \AMS, 1984.\endgraf
+\end{pseudobibliography}
+}
+
+
+
+
+
+
+
+
+
+
+
+\section{Caveats}
+
+\DP\ and this article were created on a DECSYSTEM-20 at the
+\AMS, running \LaTeX\ version~2.08 under
+\TeX\ version~1.3. The AMS installation is standard in all ways.
+
+With one exception, none of the changes to the \TeX\ program since
+version~1.0 should have any noticeable effect on an article produced
+with \DP. The exception is large, complex tables\Dash
+tables incorporating many boxes and rules require large amounts of
+\TeX\ memory. Memory management was radically changed in version~1.3
+to make more memory available to the user without actually changing
+the physical memory allotment. (Otherwise, if you run out of memory,
+the most likely cause is an input error.)
+
+Although thorough testing has been attempted, no one outside the AMS has
+tried to use \DP\ yet, so bugs are sure to be found. In fact,
+the version of \DP\ first placed in the Program Library should best
+be considered a beta test version. If you find a bug, please
+communicate it to the author, accompanied by an example which
+demonstrates the bug as simply as possible. Suggestions for
+improvements are also welcome. Send everything to\break
+{\obeylines %
+ \indent Barbara Beeton
+ \AMS
+ \POBox 6248
+ Providence, RI 02940
+}
+
+
+
+
+
+
+
+
+
+
+
+%\Bibliography{ACP}
+\begin{thebibliography}{ACP}
+
+\bibitem[DP]{DP} Beeton, Barbara, Typesetting articles for the DECUS
+ Proceedings with \TeX, {\sl Proceedings of the Digital Equipment
+ Computer Users Society}, USA Spring 1985, 349--356.
+
+\bibitem[ACP]{ACP} Knuth, Donald E., {\sl The Art of Computer Programming},
+ Addison-Wesley, Vol.~2, second edition, 1981.
+
+\bibitem[TB]{TB} Knuth, Donald E., \TB, Addison-Wesley and \AMS, 1984.
+
+\bibitem[LT]{LT} Lamport, Leslie, {\sl L\kern-.36em\raise.3ex\hbox{\small A}%
+ \kern-.15em\TeX, A document preparation system}, Addison-Wesley,
+ 1985.
+
+\bibitem[TD]{TD} Southall, Richard, First principles of typographic design
+ for document production, {\sl\tub\/} Vol.~5 (1984), No.~2, 79--90;
+ Corrigenda, Vol.~6 (1985), No.~1, p.~6.
+
+\bibitem[TUB]{TUB} {\sl\tub, the Newsletter of the \TUG}, \TUG, \careof\AMS,
+ \POBox 9506, Providence, RI, 02940.
+
+\end{thebibliography}
+
+\end{document}
+
diff --git a/macros/latex209/contrib/deproc/deproc.readme b/macros/latex209/contrib/deproc/deproc.readme
new file mode 100644
index 0000000000..c5b7d4805c
--- /dev/null
+++ b/macros/latex209/contrib/deproc/deproc.readme
@@ -0,0 +1,43 @@
+%>>>>DEPROC.README
+DEPROC -- A TeX Header for Formatting DECUS Proceedings Articles
+
+
+DEPROC is a package that will format articles for the DECUS Pro-
+ceedings. It can be used by anyone who has access to the TeX
+typesetting system. DEPROC is a TeX header (macro package).
+
+
+The DECUS Proceedings have traditionally been published from copy
+supplied by the authors, prepared according to rules devised for
+typewritten material. The power of the computer typesetting language
+TeX has now been applied to this task, and a formatting package, named
+DEPROC, has been submitted to the DECUS Program Library for use by
+authors who have access to a working TeX system. (The TeX program and
+related software, created by Donald Knuth of Stanford, are in the
+public domain.)
+
+The documentation (which was itself produced by the DEPROC package--
+see file DEPROCDOC.TEX) presents the important features of DEPROC and,
+through examples, shows how it is to be used. Use of DEPROC, which is
+encouraged, will produce the author's work, nicely typeset, in the
+standard Proceedings format. There is a general description of how
+the package works and of the mechanical requirements for camera copy
+of Proceedings articles, which will be created on the author's local
+output device.
+
+No prior knowledge of TeX is required, but authors using DEPROC will
+be expected to learn some rudiments, especially if their papers
+contain special notation or formats such as tables. A sample table
+appears in DEPROCDEV.TEX and DEPROCDEV.FIL, the files used to prepare
+a table of output devices which have been interfaced to DEC computers.
+
+
+Questions and suggestions about DEPROC may be sent to
+
+ Barbara N. Beeton
+ American Mathematical Society
+ Post Office Box 6248
+ Providence, Rhode Island 02940
+ 401-272-9500
+
+
diff --git a/macros/latex209/contrib/deproc/deproc.sty b/macros/latex209/contrib/deproc/deproc.sty
new file mode 100644
index 0000000000..b7c389156f
--- /dev/null
+++ b/macros/latex209/contrib/deproc/deproc.sty
@@ -0,0 +1,183 @@
+% deproc.sty 24-Apr-86, by Barbara Beeton, AMS
+
+\typeout{Document Style Option 'deproc' -- Released 24 April 1986}
+\input article.sty
+
+\oddsidemargin -2.5pc \evensidemargin -2.5pc
+\topmargin -3pc \headheight 0pt \headsep 0pt
+%\footheight 0pt \footskip 0pt
+\footheight 1pc \footskip 2pc
+\textheight 58pc \textwidth 44pc \columnsep 2pc \columnseprule 0pt
+
+\def\@oddhead{}\def\@evenhead{}
+% For debugging, keep running footers.
+%\def\@oddfoot{}
+%\def\@oddfoot{\rm\rightmark \hfil Page \thepage}
+\def\@oddfoot{\hfil \tiny\thepage \hfil}
+\def\@evenfoot{\@oddfoot}
+\def\maketitle{\par
+ \begingroup
+ \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \twocolumn[\@maketitle]
+ \@thanks
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax
+ \@afterheading}
+
+\def\@maketitle{\vbox{\hsize\textwidth
+ \linewidth\hsize \vskip\baselineskip \centering
+ {\large\bf \@title \par} \vskip 2em
+ {%\let\@endline=\\\def\\{\@endline\rm}%
+ \def\and{\unskip\enspace{\rm and}\enspace}%
+ \def\And{\unskip\\\null\\\bf}%
+ \begin{tabular}[t]{c}\bf\@author \end{tabular}\par} \vskip 3\baselineskip
+ \unvbox\@abstractbox}}
+
+%\def\copyrightspace{\footnotetext[0]{\mbox{}\vrule height 97pt width 0pt}}
+
+\newbox\@abstractbox
+\long\def\abstract{\def\endabstract{\ifhmode\unskip\strut\endgraf\fi
+ \vskip 3\baselineskip \egroup}%
+ \global\setbox\@abstractbox=\vbox\bgroup \hsize=\textwidth
+ \leftskip=1.25in \rightskip=\leftskip
+ \centerline{\bf Abstract}%
+ \vskip.5\baselineskip
+ \noindent\strut\ignorespaces }
+
+
+% Allow more space above a narrower footnote rule.
+% Footnotes not quite so far apart.
+\footnotesep=10pt
+\skip\footins=12pt % full blank line
+\def\footnoterule{\kern-8pt
+ \hrule width 5pc \kern 7.6pt } % the \hrule is .4pt high
+
+
+% Force footnotes to bottom of page, regardless of ragged bottom.
+\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
+ \else\setbox\@outputbox
+ \vbox to\@colht{\unvbox\@cclv\vfill\relax
+ \vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\unvbox\@outputbox \@textbottom}\global\maxdepth\@maxdepth}
+
+
+% All footnotes are numbered; no other symbols.
+\setcounter{footnote}{0}
+% Section headings differ from those in ARTICLE.STY.
+% Omit section numbers (just suppress printing), use different fonts.
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \interlinepenalty \@M #8\par
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex
+ minus -.2ex}{2.3ex plus .2ex}{\centering\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex
+ minus -.2ex}{1.5ex plus .2ex}{\parindent=\z@\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus -1ex
+ minus -.2ex}{1.5ex plus .2ex}{\parindent=\z@\normalsize\sl}}
+
+% Change the default item labels after the first.
+
+\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
+
+\def\labelitemii{$\circ$}
+\def\labelitemiii{\bull}
+\def\labelitemiv{$\ast$}
+% Indent verbatim blocks
+\def\verbatim{\@totalleftmargin\parindent
+ \@verbatim \frenchspacing\@vobeyspaces \@xverbatim}
+
+% Figure and table caption labels boldface
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\bf#1:}\enspace#2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+ to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+% Reference list varies from standard by permitting labels to be omitted.
+
+\newif\ifomit@biblabels \omit@biblabelsfalse
+\def\omit{\global\omit@biblabelstrue}
+
+\def\thebibliography#1{\setbox0=\hbox{#1}\section*{References\markboth
+ {REFERENCES}{REFERENCES}}\list
+ {\ifomit@biblabels \else [\arabic{enumi}]\fi}{\ifomit@biblabels
+ \setlength{\labelwidth}{0pt}\setlength{\labelsep}{0pt}\else
+ \settowidth\labelwidth{[#1]}\fi\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \ifomit@biblabels\else\usecounter{enumi}\fi}}
+
+\newlength{\n@rmal@parindent} % set below after \parindent set
+\def\no@biblabelindent{\ifomit@biblabels\leavevmode\kern\n@rmal@parindent\fi}
+
+\def\@lbibitem[#1]#2{\item[\@biblabel{#1}]\if@filesw
+ { \def\protect##1{\string ##1\space}\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}\fi
+ \no@biblabelindent\ignorespaces}}
+\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
+ {\string\bibcite{#1}{\the\c@enumi}}\fi\no@biblabelindent\ignorespaces}
+% Abbreviations (same list as in DEPROC.TeX).
+
+\def \careof{\leavevmode\hbox{\raise.75ex\hbox{c}\kern-.15em
+ /\kern-.125em\smash{\lower.3ex\hbox{o}}} } % ends with space
+
+% This is \frac in DEPROC.TeX, but that conflicts with LaTeX \frac .
+\def \sfrac#1/#2{\leavevmode\kern.1em
+ \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
+ /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}
+
+\def \d@sh#1{\nobreak\thinspace#1\penalty0\thinspace}
+\def \dash{\d@sh{--}}
+\def \Dash{\d@sh{---}}
+
+\def \DECUS{Digital Equipment Computer Users Society}
+\def \TeX{\leavevmode\hbox{T\kern-.1667em\lower.424ex\hbox{E}\kern-.125emX}}
+\def \AMSTeX{\leavevmode\hbox{$\cal A\kern-.2em\lower.376ex
+ \hbox{$\cal M$}\kern-.2em\cal S$-\TeX}}
+% The following definition of \LaTeX does not depend on the presence
+% of a small caps font to match every type style.
+%\newcount\TestCount
+%\def\LaTeX{\TestCount=\the\fam
+% \leavevmode L\raise.4ex
+% \hbox{$\fam\TestCount\scriptstyle\kern-.3em A$}\kern-.15em\TeX}
+% Unfortunately, standard LaTeX does not provide scriptstyle \bf, \sl
+% or \sf fonts, so a definition comparable to that used in LaTeX.TeX
+% is kept; the definition used in LaTeX version 2.08 (the most recent
+% available at AMS) does not incorporate the definitive TeX logo, so
+% an adjusted version is given here.
+\def \LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}}
+\def \MF{{\logo META}\-{\logo FONT}}
+\def \WEB{{\tt WEB}}
+\twocolumn
+\sloppy
+\parindent 20pt
+\setlength{\n@rmal@parindent}{\parindent}
+\leftmargini 2em
+\leftmargin\leftmargini
+\leftmarginv .5em
+\leftmarginvi .5em
+%\flushbottom
+
+\endinput
+
diff --git a/macros/latex209/contrib/diagramf/README b/macros/latex209/contrib/diagramf/README
new file mode 100644
index 0000000000..9feb8fdd86
--- /dev/null
+++ b/macros/latex209/contrib/diagramf/README
@@ -0,0 +1,14 @@
+This is v1.1 of the diagramf package. It consists of the following files:
+
+README diagramf.mf diagramf.tex ltugboat.sty
+arrows.mf diagramf.sty dmfexmpl.mf tugboat.cmn
+
+Please do not distribute these files individually.
+
+The diagramf package is brought to you by Alan Jeffrey
+(alanje@cogs.sussex.ac.uk) and maintained by Jeremy Gibbons
+(jeremy@cs.aukuni.ac.nz). Please drop us a line if you have any
+comments, queries, words of undying praise, etc.
+
+2 Jun 1992
+
diff --git a/macros/latex209/contrib/diagramf/arrows.mf b/macros/latex209/contrib/diagramf/arrows.mf
new file mode 100644
index 0000000000..7289780695
--- /dev/null
+++ b/macros/latex209/contrib/diagramf/arrows.mf
@@ -0,0 +1,188 @@
+%%% ====================================================================
+%%% @METAFONT-file{
+%%% author = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "13:26:18 BST",
+%%% filename = "arrows.mf",
+%%% address = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone = "+44 273 606755 x 3238",
+%%% FAX = "+44 273 678188",
+%%% checksum = "02505 188 855 6803",
+%%% email = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "diagrams, metafont, arrows",
+%%% supported = "yes",
+%%% abstract = "This is a metafont program which provides
+%%% commands for drawing arrows",
+%%% docstring = "This is part of the diagramf package which
+%%% interfaces TeX and metafont. It is
+%%% described in diagramf.tex.
+%%%
+%%% Copyright 1992 Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "diagramf",
+%%% dependencies = "none",
+%%% maintainer = "Jeremy Gibbons",
+%%% address-maintainer = "Department of Computer Science
+%%% University of Aukland
+%%% Private Bag
+%%% Aukland
+%%% New Zealand",
+%%% email-maintainer = "jeremy@cs.aukuni.ac.nz",
+%%% }
+%%% ====================================================================
+%%%
+%%% 25 Oct 1990, v1.0: Released version 1.0.
+%%%
+%%% 2 Jun 1992, v1.1: Added standard headers.
+
+% This program draws arrows---if you say drawarrow p, where p is a
+% path, you get p drawn with an arrowhead at the end. Actually, you
+% don't quite get p, as we have to chop a bit off the end, so you get
+%
+% *
+% *
+% ******
+% *******
+% ******
+% *
+% *
+%
+% rather than
+%
+% *
+% *
+% *******
+% *******
+% *******
+% *
+% *
+%
+% Also the path gets straightened out a bit, so paths which end in
+% very tight curves usually get drawn OK.
+%
+% The parameters we need are
+%
+% arrowheadcrisp --- the value of crisp (see cmbase) for arrowheads,
+% arrowheadheight --- the height of an arrowhead facing right,
+% arrowheadwidth --- the width of an arrowhead facing right,
+% arrowheadstraight --- the straightness of an arrowhead (from 0 to 1),
+% arrowheadline --- the width of line an arrowhead is drawn with.
+% arrowpathstraight --- the length of the straight bit added to a path, and
+%
+% Their default values are ripped off from cmr10 (apart from
+% arrowpathstraight, which I just guesstimated).
+
+if unknown arrowheadcrisp: arrowheadcrisp := 0pt; fi
+if unknown arrowheadheight: arrowheadheight := 120/36pt; fi
+if unknown arrowheadwidth: arrowheadwidth := 60/36pt; fi
+if unknown arrowheadstraight: arrowheadstraight := .381966; fi
+if unknown arrowheadline: arrowheadline := 11/36pt; fi
+if unknown arrowpathstraight: arrowpathstraight := 2.5arrowheadline; fi
+
+% To begin with, a couple of path intersectors --- p joinedpath q
+% draws p until it intersects with q, then draws the rest of q.
+
+tertiarydef p joinedpath q =
+ begingroup
+ numeric t,u;
+ (t,u) = p intersectiontimes q;
+ (subpath (0,t) of p) .. (subpath (u,infinity) of q)
+ endgroup
+enddef;
+
+% And p uptopath q is p until in intersects with q.
+
+tertiarydef p uptopath q =
+ subpath (0, xpart (p intersectiontimes q)) of p
+enddef;
+
+% And a declaration localpen that saves all the variables associated
+% with the current pen, and gives you fresh ones to play with.
+
+def localpen =
+ interim pen_lft:=0;
+ interim pen_rt:=0;
+ interim pen_top:=0;
+ interim pen_bot:=0;
+ interim currentbreadth:=0;
+ save currentpen, currentpen_path;
+ pen currentpen;
+ path currentpen_path;
+enddef;
+
+% pos is nicked from cmbase.
+
+newinternal currentbreadth;
+vardef pos@#(expr b,d) =
+ if known b: if b<=currentbreadth: errmessage "bad pos"; fi fi
+ (x@#r-x@#l,y@#r-y@#l)=(b-currentbreadth,0) rotated d;
+ x@#=.5(x@#l+x@#r); y@#=.5(y@#l+y@#r) enddef;
+def numeric_pickup_ primary q =
+ currentpen:=pen_[q];
+ pen_lft:=pen_lft_[q]; pen_rt:=pen_rt_[q];
+ pen_top:=pen_top_[q]; pen_bot:=pen_bot_[q];
+ currentpen_path:=pen_path_[q];
+ if known breadth_[q]: currentbreadth:=breadth_[q]; fi enddef;
+
+% And arrowheadcrisp.nib is just a scaled pencircle.
+
+pickup pencircle scaled arrowheadcrisp;
+arrowheadcrisp.nib := savepen;
+
+% We can now draw an unstraightened arrow. This is just ripped off
+% from the cmr symbol font.
+
+def drawunstraightenedarrow expr p =
+ begingroup;
+ save x, y, theta;
+ theta = angle (direction (length p) of p);
+ begingroup
+ localpen;
+ pickup arrowheadcrisp.nib;
+ z0 = point (length p) of p;
+ pos3 (arrowheadline,theta+180);
+ pos4 (arrowheadline,theta+180);
+ z3 = z0 + (-arrowheadwidth,.5arrowheadheight) rotated theta;
+ z4 = z0 + (-arrowheadwidth,-.5arrowheadheight) rotated theta;
+ pos5 (arrowheadline,angle(z3-z0));
+ pos6 (arrowheadline,angle(z4-z0));
+ z5l = z6l = z0;
+ z9 = arrowheadstraight[.5[z3,z4],z0];
+ filldraw (z5l..z4l{z4-z9})
+ -- ((z4r{z9-z4}..z5r) joinedpath (z6r..z3r{z3-z9}))
+ -- (z3l{z9-z3}..z6l)
+ -- cycle;
+ endgroup;
+ draw p uptopath (z4r{z9-z4}..z5r);
+ endgroup;
+enddef;
+
+% We then straighten a path by taking the last section of it, keeping
+% its control points, but moving the last point back by
+% arrowpathstraight, and putting in a straight line at the end.
+
+def straightenpath expr p =
+ subpath (0,length p - 1) of p
+ .. controls (postcontrol (length p - 1) of p)
+ and (precontrol (length p) of p)
+ .. arrowpathstraight
+ * (unitvector (- (direction (length p) of p)))
+ + (point (length p) of p)
+ -- point (length p) of p
+enddef;
+
+% Finally, we draw an arrow as an unstraightened arrow of a
+% straightened path.
+
+def drawarrow = drawunstraightenedarrow straightenpath enddef;
diff --git a/macros/latex209/contrib/diagramf/diagramf.mf b/macros/latex209/contrib/diagramf/diagramf.mf
new file mode 100644
index 0000000000..c9b68b1959
--- /dev/null
+++ b/macros/latex209/contrib/diagramf/diagramf.mf
@@ -0,0 +1,319 @@
+%%% ====================================================================
+%%% @METAFONT-file{
+%%% author = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "13:36:35 BST",
+%%% filename = "diagramf.mf",
+%%% address = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone = "+44 273 606755 x 3238",
+%%% FAX = "+44 273 678188",
+%%% checksum = "49217 319 1584 10327",
+%%% email = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "diagrams, metafont",
+%%% supported = "yes",
+%%% abstract = "This is a metafont program which provides
+%%% commands for setting labels in TeX.",
+%%% docstring = "This is part of the diagramf package which
+%%% interfaces TeX and metafont. It is
+%%% described in diagramf.tex.
+%%%
+%%% Copyright 1992 Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "diagramf",
+%%% dependencies = "diagramf.sty",
+%%% maintainer = "Jeremy Gibbons",
+%%% address-maintainer = "Department of Computer Science
+%%% University of Aukland
+%%% Private Bag
+%%% Aukland
+%%% New Zealand",
+%%% email-maintainer = "jeremy@cs.aukuni.ac.nz",
+%%% }
+%%% ====================================================================
+%%%
+%%% 25 Oct 1990, v1.0: Released version 1.0.
+%%%
+%%% 2 Jun 1992, v1.1: Added standard headers.
+
+diagramfbaseloaded := 1;
+
+% This is a metafont program for describing diagrams with TeX labels
+% on them. The mf code is of the form:
+%
+% begindiagram (NUMBER,WIDTH,HEIGHT,DEPTH);
+% hboxes (LISTOFBOXES);
+% ...
+% enddiagram;
+%
+% where NUMBER is the diagram number and LISTOFBOXES is a list of the
+% labels used in that diagram. The fancy thing is that characters can
+% contain the variables
+%
+% hboxSOMETHING[N]
+%
+% where N is a number and SOMETHING is one of bl, l, tl, br, r, tr, wd,
+% ht and dp. These represent the dimensions of a label which will
+% later on be put down by TeX, for example
+%
+% hboxbl3 --- the bottom left coordinate of the third label,
+% hboxr7 --- the right-hand baseline of the seventh label,
+% hboxht9 --- the height of the ninth label,
+%
+% and so on. You can then specify the contents of a label by saying
+%
+% setbox NUMBER "SOME", "TEX", "CODE";
+%
+% for example
+%
+% setbox3 "Fred";
+% setbox7 "$\begin{array}{c}",
+% "a\\b\\c",
+% "\end{array}$";
+%
+% the comma-separated version is useful for labels more than one line
+% long.
+%
+% NB: Because of the way diagrams are implemented in LaTeX, it's a
+% {\em very bad idea\/} for labels to contain \diagramfile's.
+%
+% Your TeX file then says
+%
+% \diagramfile{FILENAME}
+% \diagramf{NUMBER}
+%
+% where FILENAME is the name of the mf file, and NUMBER is the diagram
+% number. It's a good idea not to have too many diagrams per file
+% (like more than about 50 or so) because TeX has to use up one box per
+% diagram.
+%
+% This all works by providing an interface between TeX and MF... MF
+% reads in a file JOBNAME.dim containing the dimensions of the TeX
+% labels and writes out a file JOBNAME.dia containing the TeX labels
+% and where they should be positioned. TeX then reads in the .dia
+% file and writes the .dim file.
+%
+% So the production cycle for a document containing diagrams is
+%
+% 1) Create an empty .dim file (because bloody MF can't tell
+% whether a file exists or not grumble grumble grumble...)
+% 2) Run MF to create the .dia file containing the labels,
+% 3) Run TeX to set the labels and find their dimensions,
+% 4) Run MF to create the final version of the diagram, now that we
+% know what size the labels are, and
+% 5) Run TeX to produce the document.
+%
+% A sample .dim file is
+%
+% wd#[2][0] := 20.3344pt#;
+% ht#[2][0] := 6.94444pt#;
+% dp#[2][0] := 1.94444pt#;
+%
+% which defines the size of the zeroth label of the second
+% diagram---it's width is 20.3344pt, height 6.94444pt and depth
+% 1.94444pt.
+%
+% A sample .dia file is (almost)
+%
+% \newdiagramfont{example}
+% \newdiagram{2}
+% \diagramlabel{0}{4.88908pt}{0pt}
+% $g \circ h$
+% \enddiagramlabel
+% \diagramchar{2}
+% \endnewdiagram
+%
+% (The `almost' is because actually all the lines end with the comment
+% `% diagramf' to flag them.)
+%
+% This means that the diagram font is called
+% example, and diagram 2 contains label 0 at coordiates
+% (4.88908pt,0pt) which consists of the text $g \circ h$.
+%
+% That's enough interfaces, Ed.
+%
+% To begin with, we need to declare the variables used in the .dim
+% file.
+
+numeric wd#[][], ht#[][], dp#[][];
+
+% Then we input the .dim file.
+
+scantokens ("input " & jobname & ".dim");
+
+% Right, now we define the macros for writing the .dia file. Metafont
+% contains no (count 'em---none) primitives for file handling, except
+% for writing information out on the .log file. So we'll write the
+% .dia file to the .log file with tags saying `% diagramf'. You can then
+% use an incantation like
+%
+% grep "% diagramf" blah.log > blah.dia
+%
+% to recover the .dia file. This is a right pain! But there's no
+% other real way to do it---see Section 7 of Appendix D of the MFbook
+% for a similar hack by DEK.
+%
+% So to produce the TeX output
+%
+% blah% diagramf
+% waffle% diagramf
+%
+% you say
+%
+% texoutput "blah", "waffle";
+%
+% which just produces the right messages.
+
+def texoutput text t =
+ for s = t: message s & "% diagramf"; endfor
+ message ""
+enddef;
+
+% So to begin with, we'll produce a header message which contains the
+% filename, the date, and the name of the font we're producing.
+
+string monthname[];
+monthname[1] = "Jan"; monthname[2] = "Feb"; monthname[3] = "Mar";
+monthname[4] = "Apr"; monthname[5] = "May"; monthname[6] = "Jun";
+monthname[7] = "Jul"; monthname[8] = "Aug"; monthname[9] = "Sep";
+monthname[10] = "Oct"; monthname[11] = "Nov"; monthname[12] = "Dec";
+
+string today;
+today = decimal day & " " & monthname[month] & " " & decimal year;
+
+texoutput "% Filename: " & jobname & ".dia ",
+ "% Generated by: diagramf.mf ",
+ "% Date: " & today & " ",
+ "\newdiagramfont{" & jobname & "}";
+
+% To convert a coordinate (36pt,5.2pt) into a string "{36pt}{5.2pt}"
+% you use coordinate:
+
+def coordinate expr z =
+ "{" & decimal (xpart z/hppp) & "pt}{" & decimal (ypart z/hppp) & "pt}"
+enddef;
+
+% We can now define the macros used in preparing diagrams. To begin
+% with, begindiagram... enddiagram.
+%
+% This sets variables
+%
+% diagram --- the number of the diagram,
+% character --- the number of the character produced (at the moment
+% this is just the same as the diagram number, but this may
+% change soon...)
+% hboxwd[], hboxht[], hboxdp[] --- the dimensions of the box, and
+% hboxl[] --- the left end of the box.
+%
+% It also produces the output \newdiagram{DIAGRAM} and does a
+% beginchar.
+%
+% We read in the dimensions of the character as a text parameter to
+% make sure they aren't evaluated until {\em after\/} diagram has been
+% set. This means you can use hboxwd#, hboxht# and hboxdp# in a
+% begindiagram and all will be well.
+
+def begindiagram (expr n) (text t) =
+ begingroup;
+ diagram:=n;
+ character:=n;
+ numeric hboxwd[], hboxht[], hboxdp[];
+ pair hboxl[];
+ texoutput "\newdiagram{" & decimal diagram & "}";
+ beginchar (character) (t)
+enddef;
+
+% enddiagram just closes down all the groups and outputs the
+% \diagramchar and \endnewdiagram TeX macros.
+
+def enddiagram =
+ endchar;
+ texoutput "\diagramchar{" & decimal character & "}";
+ texoutput "\endnewdiagram";
+ endgroup
+enddef;
+
+% Then the other coordinates of the box are vardefs based on hboxl@#,
+
+vardef hboxtl@# = hboxl@# + (0, hboxht@#) enddef;
+vardef hboxtr@# = hboxl@# + (hboxwd@#, hboxht@#) enddef;
+vardef hboxr@# = hboxl@# + (hboxwd@#, 0) enddef;
+vardef hboxbr@# = hboxl@# + (hboxwd@#, -hboxdp@#) enddef;
+vardef hboxbl@# = hboxl@# + (0, -hboxdp@#) enddef;
+
+% and the sharp dimensions of the boxes.
+
+vardef hboxwd#.@# =
+ if unknown wd#[diagram]@#: eps
+ else: wd#[diagram]@#
+ fi
+enddef;
+
+vardef hboxht#.@# =
+ if unknown ht#[diagram]@#: eps
+ else: ht#[diagram]@#
+ fi
+enddef;
+
+vardef hboxdp#.@# =
+ if unknown dp#[diagram]@#: eps
+ else: dp#[diagram]@#
+ fi
+enddef;
+
+% Then hboxes (sigma) sets the constraints on all the hboxes from
+% sigma. For example, hboxes (1,2,3) sets up hbox1, hbox2 and hbox3.
+
+def hboxes (text t) =
+ for n = t:
+ hboxwd[n] = hboxwd#[n] * hppp;
+ hboxht[n] = hboxht#[n] * hppp;
+ hboxdp[n] = hboxdp#[n] * hppp;
+ endfor
+enddef;
+
+% We can then set a box by outputting the TeX code for it. If
+% proofing is set, we draw a box to show where the label goes.
+
+vardef setbox@# text t =
+ texoutput "\diagramlabel{" & decimal @# & "}" & coordinate hboxl@#,
+ t,
+ "\enddiagramlabel";
+ if proofing=2: prooflabel@# fi
+enddef;
+
+% If we're in a proofing mode, we'll draw the label with a .25pt
+% pen.
+
+vardef prooflabel@# =
+ begingroup;
+ localpen;
+ pickup pencircle scaled .25pt;
+ draw hboxbl@# -- hboxtl@# -- hboxtr@# -- hboxbr@# -- cycle;
+ draw hboxl@# -- hboxr@#;
+ endgroup
+enddef;
+
+% Where localpen provides local variables for all the pen values.
+
+def localpen =
+ interim pen_lft:=0;
+ interim pen_rt:=0;
+ interim pen_top:=0;
+ interim pen_bot:=0;
+ if known currentbreadth: interim currentbreadth:=0; fi
+ save currentpen, currentpen_path;
+ pen currentpen;
+ path currentpen_path;
+enddef;
+
diff --git a/macros/latex209/contrib/diagramf/diagramf.pdf b/macros/latex209/contrib/diagramf/diagramf.pdf
new file mode 100644
index 0000000000..29e7314fb4
--- /dev/null
+++ b/macros/latex209/contrib/diagramf/diagramf.pdf
Binary files differ
diff --git a/macros/latex209/contrib/diagramf/diagramf.sty b/macros/latex209/contrib/diagramf/diagramf.sty
new file mode 100644
index 0000000000..ab2daaf506
--- /dev/null
+++ b/macros/latex209/contrib/diagramf/diagramf.sty
@@ -0,0 +1,222 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "13:39:09 BST",
+%%% filename = "diagramf.sty",
+%%% address = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone = "+44 273 606755 x 3238",
+%%% FAX = "+44 273 678188",
+%%% checksum = "50716 222 988 7967",
+%%% email = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "diagrams, metafont",
+%%% supported = "yes",
+%%% abstract = "This is a LaTeX style file for importing
+%%% diagrams drawn in metafont.",
+%%% docstring = "This is part of the diagramf package which
+%%% interfaces TeX and metafont. It is
+%%% described in diagramf.tex.
+%%%
+%%% Copyright 1992 Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "diagramf",
+%%% dependencies = "diagramf.mf",
+%%% maintainer = "Jeremy Gibbons",
+%%% address-maintainer = "Department of Computer Science
+%%% University of Aukland
+%%% Private Bag
+%%% Aukland
+%%% New Zealand",
+%%% email-maintainer = "jeremy@cs.aukuni.ac.nz",
+%%% }
+%%% ====================================================================
+%%%
+%%% 25 Oct 1990, v1.0: Released version 1.0.
+%%%
+%%% 29 Oct 1990, v1.01: Discovered I'd put \everylabel into the
+%%% diagram rather than the label. Silly me.
+%%%
+%%% 30 Oct 1990, v1.02: \diagramf now uses \copy to put down the
+%%% diagram rather than \box, so diagrams can be reused.
+%%%
+%%% 2 Jun 1992, v1.1: Added standard headers.
+
+% This style allows you to use diagrams generated in metafont with TeX
+% lables, such as those produced with diagramf.mf.
+%
+% To use the diagrams generated by example.mf, you say
+%
+% \diagramfile{example}
+%
+% which loads all the diagrams and stores them in boxes. You can then
+% use a diagram by saying (for example)
+%
+% \diagramf{2}
+%
+% which gets you the second diagram. When you load in another
+% file of diagrams, you over-write the previous diagrams.
+%
+% All the definitions made by \diagramfile are purely local, so if you
+% say
+%
+% \diagramfile{foo}
+% {\diagramfile{baz}\diagramf{1}}
+% \diagramf{2}
+%
+% You get diagram 1 from baz, and diagram 2 from foo.
+%
+% The metafont program for the diagrams contains TeX code for the
+% labels, which it spits out to an auxilary .dia file, of the
+% form
+%
+% \newdiagramfont{example}
+% \newdiagram{2}
+% \diagramlabel{0}{4.88908pt}{0pt}
+% $g \circ h$
+% \enddiagramlabel
+% \diagramchar{2}
+% \endnewdiagram
+%
+% This says that the font for these diagrams is called example, and
+% it contains diagram number 2. This has one label (number 0),
+% which should be positioned at coordinates (4.88909pt, 0pt), and whose
+% text is $g \circ h$. The diagram itself is character 1 in the
+% font.
+%
+% When \diagramfile{example} is called, it loads in example.dia, which
+% sets the boxes containing the diagrams, and in turn writes out
+% example.dim, containing the dimensions of the lables, for example
+%
+% wd#[2][0] := 20.3344pt#;
+% ht#[2][0] := 6.94444pt#;
+% dp#[2][0] := 1.94444pt#;
+%
+% This is then read by metafont, and we go round the production cycle
+% one more time...
+%
+% Right, that's what we're doing, let's get on with it!
+
+% To begin with, the counters, dimensions, etc. we need.
+
+\newwrite\dimensionsfile % The .dim output file
+\newcount\diagramnumber % The number of the diagram
+\newcount\labelnumber % The number of the label
+\newdimen\labelxoffset % The x-coordinate of the label
+\newdimen\labelyoffset % The y-coordinate of the label
+\newtoks\everylabel % Tokens put in every label (a la \everymath)
+
+
+% A handy macro for hacking around with \csname's...
+% \csnameafter\foo{baz} expands out to \foo\baz.
+
+\def\csnameafter#1#2{\expandafter#1\csname#2\endcsname}
+
+% \percent is a % mark, only with catcode 11 (i.e. a letter),
+% similarly \hashmark.
+
+{\catcode`\%=11\gdef\percent{%}}
+{\catcode`\#=11\gdef\hashmark{#}}
+
+% \allocatebox{foo} gets a new box \foo, if \foo is undefined.
+
+\def\allocatebox#1%
+ {\@ifundefined{#1}{\csnameafter\newbox{#1}}{}}
+
+% In order to do this, \newbox has to be non-\outer, grumble grumble
+% why was it ever \outer in the first place grumble grumble...
+
+\def\newbox{\alloc@4\box\chardef\insc@unt}
+
+% When you say \diagramfile{example} we open
+% example.dim for output, read in example.dia, and then close
+% example.dia.
+
+\def\diagramfile#1%
+ {\immediate\openout\dimensionsfile #1.dim%
+ \immediate\write\dimensionsfile{\percent Filename: #1.dim}%
+ \immediate\write\dimensionsfile{\percent Generated by: diagramf.sty}%
+ \immediate\write\dimensionsfile{\percent Date: \today}%
+ \@input{#1.dia}%
+ \immediate\closeout\dimensionsfile
+ \typeout{Dimensions written on #1.dim.}}
+
+% The first command in FONTNAME.dia should be
+% \newdiagramfont{FONTNAME}---this causes us to load the font in.
+% (Exercise for the reader: why isn't this done by \diagramfile? Hint: if
+% we run LaTeX before running metafont, neither FONTNAME.dia nor
+% FONTNAME.tfm will exist.)
+
+\def\newdiagramfont#1{\font\diagramfont=#1\relax}
+
+% Then the macro that defines a diagram. \newdiagram{N} makes us
+% define \diagramnumber to be N, allocate a new box \diagram-N, and
+% set the box to whatever comes between here and the \endnewdiagram.
+
+\def\newdiagram#1%
+ {\diagramnumber=#1
+ \allocatebox{diagram-#1}%
+ \csnameafter\setbox{diagram-#1}\hbox\bgroup}
+
+\def\endnewdiagram
+ {\egroup}
+
+% Within the \newdiagram we can have commands to set labels, of the
+% form \diagramlabel{N}{X}{Y}...\enddiagramlabel. To begin with, we
+% set \labelnumber to N, \labelxoffset to X, \labelyoffset to Y, then
+% set box 0 to be everything up to the \enddiagramlabel.
+
+\def\diagramlabel#1#2#3%
+ {\labelnumber=#1
+ \labelxoffset=#2
+ \labelyoffset=#3
+ \setbox0\hbox\bgroup\the\everylabel}
+
+% When we have set the box containing the label, we write its
+% dimensions on the .dim file, move the box to coordinates
+% (\labelxoffset, \labelyoffset), reduce it to zero size, and set it.
+
+\def\enddiagramlabel
+ {\egroup
+ \immediate\write\dimensionsfile
+ {wd\hashmark[\the\diagramnumber][\the\labelnumber]
+ := \the\wd0\hashmark;}%
+ \immediate\write\dimensionsfile
+ {ht\hashmark[\the\diagramnumber][\the\labelnumber]
+ := \the\ht0\hashmark;}%
+ \immediate\write\dimensionsfile
+ {dp\hashmark[\the\diagramnumber][\the\labelnumber]
+ := \the\dp0\hashmark;}%
+ \setbox0\hbox{\kern\labelxoffset\raise\labelyoffset\box0}%
+ \wd0=0pt \ht0=0pt \dp0=0pt
+ \box0}
+
+% The other command you can have within a diagram is \diagramchar{N}
+% which just causes us to set character N of \diagramfont.
+
+\def\diagramchar#1%
+ {{\diagramfont\char#1\relax}}
+
+% Finally, to set a diagram, you just say \diagramf{N} which causes us
+% to leave vertical mode (in the same fashion as \mbox) and set box
+% \diagram-N.
+
+\def\diagramf#1%
+ {\leavevmode
+ \@ifundefined
+ {diagram-#1}
+ {??\@warning{Diagram #1 on page \thepage\space undefined}}
+ {\csnameafter\copy{diagram-#1}}}
+
+
+
diff --git a/macros/latex209/contrib/diagramf/diagramf.tex b/macros/latex209/contrib/diagramf/diagramf.tex
new file mode 100644
index 0000000000..6ec4f7e087
--- /dev/null
+++ b/macros/latex209/contrib/diagramf/diagramf.tex
@@ -0,0 +1,301 @@
+%%% ====================================================================
+%%% @LaTeX-file{
+%%% author = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "13:45:34 BST",
+%%% filename = "diagramf.tex",
+%%% address = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone = "+44 273 606755 x 3238",
+%%% FAX = "+44 273 678188",
+%%% checksum = "57849 301 1353 10551",
+%%% email = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "diagrams, metafont",
+%%% supported = "yes",
+%%% abstract = "This is a metafont program which provides
+%%% commands for setting labels in TeX.",
+%%% docstring = "This is the documentation for the diagramf
+%%% package which interfaces TeX and metafont.
+%%%
+%%% Copyright 1992 Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "diagramf",
+%%% dependencies = "diagramf.mf diagramf.sty dmfexmpl.mf
+%%% arrows.mf ltugboat.sty tugboat.com",
+%%% maintainer = "Jeremy Gibbons",
+%%% address-maintainer = "Department of Computer Science
+%%% University of Aukland
+%%% Private Bag
+%%% Aukland
+%%% New Zealand",
+%%% email-maintainer = "jeremy@cs.aukuni.ac.nz",
+%%% }
+%%% ====================================================================
+%%%
+%%% 25 Oct 1990, v1.0: Released version 1.0.
+%%%
+%%% 2 Jun 1992, v1.1: Added standard headers, and replaced example.mf
+%%% with dmfexmpl.mf.
+
+% Permission is granted to Tugboat to reproduce this.
+
+% A keyboard check:
+%
+% @ # $ % ^ & * ~ at hash dollar percent caret ampersand asterisk tilde
+% : ; , . colon semicolon comma period
+% ? ! question-mark exclamation-mark
+% " ' ` double-quote apostrophe back-quote
+% ( ) { } [ ] parentheses braces square-brackets
+% - + = / \ minus plus equals forward-slash backslash
+% _ | < > underscore vertical-bar less-than greater-than
+
+\documentstyle[diagramf]{ltugboat}
+
+\title{Labelled diagrams in \MF}
+
+\author{Alan Jeffrey}
+
+%\address{Programming Research Group\\
+% Oxford University\\
+% 11 Keble Road\\
+% Oxford OX1 3QD}
+%
+%\netaddress{Alan.Jeffrey@prg.ox.ac.uk}
+
+\address{School of Cognitive and Computing Sciences\\
+ University of Sussex\\
+ Brighton BN1 9QH\\
+ UK}
+
+\netaddress{alanje@cogs.sussex.ac.uk}
+
+\signature
+ {\medskip
+ \signaturemark
+ \theauthor{1}\\
+ \theaddress{1}\\
+ \thenetaddress{1}\\
+ \medskip
+ \copyright\ 1990 Alan Jeffrey\\
+}
+
+% The current version of ltugboat.sty uses (and doesn't define)
+% \tensl.
+
+\font\tensl cmsl10
+
+%\typeout{}
+%\typeout{I've added a copyright notice to the signature, as TUGboat}
+%\typeout{seems not to have one.}
+
+\diagramfile{dmfexmpl}
+
+\bgroup
+\catcode`\{=11 \catcode`\}=11 \catcode`\[=1 \catcode`\]=2
+\gdef\braces#1[{#1}]
+\egroup
+
+\begin{document}
+
+\maketitle
+
+\section{Diagrams in \MF}
+
+In \TUB~11(4),
+%\typeout{}%
+%\typeout{I've made a reference to Alan's article (without reading}%
+%\typeout{it of course!) --- have I got the reference right?}%
+Alan Hoenig described a method of producing diagrams in \MF\ with
+labels provided by \TeX. His method relied on passing information
+around via font dimensions. This is a standard method of passing
+information from \MF\ to \TeX, but it has some drawbacks:
+\begin{itemize}
+\item There are only a limited number of font dimensions available,
+ and each label uses up two of them.
+
+\item As \MF\ can only communicate with \TeX\ via font dimensions,
+ each label has to be assigned a font dimension, and it is difficult
+ for the correspondence between font dimensions and labels to be kept
+ automatically.
+
+\item Since \TeX\ is providing the labels, and \MF\ is providing the
+ diagrams, the diagrams have to be kept in a different file from the
+ labels.
+
+\item There is no communication between \TeX\ and \MF, so \MF\ cannot
+ change the diagram depending on the size and shape of the labels.
+%\typeout{}%
+%\typeout{At least, I think this is true---I'm having to base this on}%
+%\typeout{Alan's talk at Cork.}%
+ This is rather inconvenient for diagrams such as
+ \begin{center}
+ \diagramf{1}
+ \end{center}
+ where the shape of the ovals depends on the size of the contents.
+\end{itemize}
+Fired with enthusiasm by Alan's talk at the European \TUG\ meeting, I
+stole the best of his ideas, and slightly modified them to produce a
+simple \MF--\TeX\ interface. This allows \TeX\ code to be embedded
+within a \MF\ program, for example
+\begin{verbatim}
+begindiagram(2,30pt#,7pt#,2pt#);
+ hboxes(0);
+ pickup pencircle scaled 0.4pt;
+ .5[hboxl0,hboxr0] = (.5w,0);
+ draw hboxbl0..hboxtl0
+ ---hboxtr0..hboxbr0
+ ---cycle;
+ setbox0 "$g \circ h$";
+enddiagram;
+\end{verbatim}
+produces the diagram \diagramf{2}.
+The new facilities used are:
+\begin{description}
+\item[\tt begindiagram(2,30pt\#,7pt\#,2pt\#)]
+ starts off diagram~2,
+ which is 30pt wide, 7pt tall and 2pt
+ deep.
+
+\item[\tt hboxes(0)]
+ says that the only label we'll be using is number~0.
+ This has a similar syntax to \verb|labels|, so you can say
+ \verb|hboxes(1,2,7)| or \verb|hboxes(3 upto 9)|.
+
+\item[\tt hboxl0]
+ is the left point of label number~0, at the
+ baseline. Similarly, {\tt hboxbl0} is the bottom left, {\tt
+ hboxtr0} is top right, and so on. In this example, these points
+ are
+ \begin{center}
+ \diagramf{3}
+ \end{center}
+ You can also use the numeric variables
+ {\tt hboxwd0}, {\tt hboxht0} and
+ {\tt hboxdp0} which are the width, height and depth of label~0,
+ and \verb|hboxwd#0|, \verb|hboxht#0| and \verb|hboxdp#0| which are their
+ sharp equivalents.
+
+\item[\tt setbox0 "\$g \string\circ\ h\$"]
+ sets label number~0 to be $g \circ h$.
+
+\item[\tt enddiagram]
+ finishes it all off.
+\end{description}
+The rest of the diagram is standard \MF.
+Within a \TeX\ document you can use
+\begin{description}
+\item[\tt\string\diagramfile\braces{dmfexmpl}] to load in the diagrams kept in
+{\tt dmfexmpl.mf},
+
+\item[\tt\string\diagramf\braces{2}] to get the second diagram, and
+
+\item[\tt\string\everylabel] which is a token register added to every
+label, in the same fashion as \verb|\everymath|. It should be set
+{\em before\/} saying \verb|\diagramfile|.
+\end{description}
+These commands behave well inside groups, so if you say
+\begin{verbatim}
+\diagramfile{foo}
+{\diagramfile{baz}\diagramf{1}}
+\diagramf{2}
+\end{verbatim}
+you get the first diagram from {\tt baz} and the second diagram from
+{\tt foo}.
+
+\section{How it all works}
+
+In the \verb|diagramf| package, \TeX\ and \MF\ communicate by
+auxiliary files, in a similar fashion to the {\sf MG} \TeX-\PS\
+interface (`Problems on the \TeX/\PS/graphics interface', \TUB~11(3)).
+
+When you run \MF\ on \verb|dmfexmpl.mf| it reads in
+\verb|dmfexmpl.dim|, which specifies the dimensions of all the boxes.
+In our example, part of \verb|dmfexmpl.dim| is
+\begin{verbatim}
+wd#[2][0] := 20.3344pt#;
+ht#[2][0] := 6.94444pt#;
+dp#[2][0] := 1.94444pt#;
+\end{verbatim}
+So, in diagram~2, label~0 has width~20.3344pt,
+height~6.94444pt and depth~1.94444pt. From this, \MF\ calculates
+where to put each label, and outputs a \verb|.dia| file, containing
+\TeX\ code. For example \verb|dmfexmpl.dia|
+contains\footnote{Actually, each line ends with {\tt\percent\space diagramf}.}:
+\begin{verbatim}
+\newdiagram{2}
+\diagramlabel{0}{4.88908pt}{0pt}
+$g \circ h$
+\enddiagramlabel
+\diagramchar{2}
+\endnewdiagram
+\end{verbatim}
+This tells \TeX\ that diagram number~2 contains
+label~0 at coordinates $\rm(4.88908pt,0pt)$ consisting of
+\verb|$g \circ h$|. The diagram is character number~2 in the {\tt
+dmfexmpl} font.
+
+Similarly, when \TeX\ encounters the instruction
+\verb|\diagramfile{dmfexmpl}| it loads in \verb|dmfexmpl.dia| and produces
+\verb|dmfexmpl.dim|. And so we can have our \MF\ cake and eat it in
+\TeX.
+
+Well, almost. Unfortunately for all these grand ideas, \MF\ has {\em
+no\/} file-handling capabilities at all! The only files \MF\ generates are
+the \verb|.tfm|, \verb|.gf| and \verb|.log| files.
+
+This is rather annoying, but fortunately we can steal an idea from
+Section~7 of the Dirty Tricks appendix in \MFB. There, Knuth uses the
+\verb|.log| file as a means of communicating between \MF\ jobs.
+Similarly, we use the \verb|.log| file as a way of sending messages to
+\TeX. Our \verb|texoutput| macro is defined
+\begin{verbatim}
+def texoutput text t =
+ for s = t:
+ message s & "% diagramf";
+ endfor
+ message ""
+enddef;
+\end{verbatim}
+So \verb|texoutput "Fred", "Ethel"| produces the output
+\begin{verbatim}
+Fred% diagramf
+Ethel% diagramf
+\end{verbatim}
+You can then use your favourite file-handling utility to filter the
+\verb|.log| file, keeping only the lines containing \verb|% diagramf|. On
+my UNIX set-up, for example, I have an alias \verb|diagramf foo|
+which expands out to
+\begin{verbatim}
+touch foo.dim
+mf foo
+grep "% diagramf" foo.log > foo.dia
+echo Labels written on foo.dia.
+\end{verbatim}
+The crucial line in this is the \verb|grep|, which takes all the lines
+from \verb|foo.log| containing \verb|% diagramf| and puts them in
+\verb|foo.dia|.
+
+And so we've achieved labelled diagrams in \MF. The {\tt diagramf}
+package is free software, and is available from the Aston archive.
+% Or at least it will be by the time this article appears.
+
+\section{Acknowledgements}
+
+The inspiration, and many of the original ideas, for this article came
+from Alan Hoenig's talk on the same subject at Cork. I'd also like to
+thank Jeremy Gibbons and Damian Cugley for comments, advice and
+allowing me to bounce ideas off them.
+
+\makesignature
+
+\end{document}
diff --git a/macros/latex209/contrib/diagramf/dmfexmpl.mf b/macros/latex209/contrib/diagramf/dmfexmpl.mf
new file mode 100644
index 0000000000..cbc76e9eaa
--- /dev/null
+++ b/macros/latex209/contrib/diagramf/dmfexmpl.mf
@@ -0,0 +1,114 @@
+%%% ====================================================================
+%%% @METAFONT-file{
+%%% author = "Alan Jeffrey",
+%%% version = "1.1",
+%%% date = "02 June 1992",
+%%% time = "13:54:01 BST",
+%%% filename = "dmfexmpl.mf",
+%%% address = "School of Cognitive and Computing Sciences
+%%% University of Sussex
+%%% Brighton BN1 9QH
+%%% UK",
+%%% telephone = "+44 273 606755 x 3238",
+%%% FAX = "+44 273 678188",
+%%% checksum = "15329 114 377 3956",
+%%% email = "alanje@cogs.sussex.ac.uk",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "diagrams, metafont",
+%%% supported = "yes",
+%%% abstract = "Example diagrams for the diagramf package.",
+%%% docstring = "These are the example diagrams for the
+%%% diagramf package, described in diagramf.tex.
+%%%
+%%% Copyright 1992 Alan Jeffrey.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% package = "diagramf",
+%%% dependencies = "diagramf.mf diagramf.sty arrows.mf",
+%%% maintainer = "Jeremy Gibbons",
+%%% address-maintainer = "Department of Computer Science
+%%% University of Aukland
+%%% Private Bag
+%%% Aukland
+%%% New Zealand",
+%%% email-maintainer = "jeremy@cs.aukuni.ac.nz",
+%%% }
+%%% ====================================================================
+%%%
+%%% 25 Oct 1990, v1.0: Released version 1.0.
+%%%
+%%% 2 Jun 1992, v1.1: Added standard headers, and renamed the file
+%%% from example.mf to dmfexmpl.mf.
+
+mode_setup;
+input diagramf;
+input arrows;
+
+vardef setoval@# text t =
+ setbox@# t;
+ draw hboxbl@#{hboxbr@#-hboxtl@#}
+ ..hboxbr@#{hboxtr@#-hboxbl@#}
+ ..hboxtr@#{hboxtl@#-hboxbr@#}
+ ..hboxtl@#{hboxbl@#-hboxtr@#}
+ ..cycle
+enddef;
+
+begindiagram (1,48pt#,35pt#,0pt#);
+ hboxes (0 upto 4);
+ pickup pencircle scaled 0.4pt;
+ .5[hboxtl0,hboxtr0] = (.5w,h-3pt);
+ hboxtr1-hboxbl0 = (-10pt,-10pt);
+ hboxtl2-hboxbr0 = (10pt,-10pt);
+ hboxbr3 = 2/3[hboxbl0,hboxtr1];
+ hboxbl4 = 2/3[hboxbr0,hboxtl2];
+ drawarrow hboxbl0--top rt hboxtr1;
+ drawarrow hboxbr0--top lft hboxtl2;
+ setoval0 "$\mathstrut a \vert b$";
+ setoval1 "$\mathstrut a$";
+ setoval2 "$\mathstrut b$";
+ setbox3 "$\mathstrut b$";
+ setbox4 "$\mathstrut a$";
+enddiagram;
+
+begindiagram (2,30pt#,7pt#,2pt#);
+ hboxes (0);
+ pickup pencircle scaled 0.4pt;
+ .5[hboxl0,hboxr0] = (.5w,0);
+ draw hboxbl0..hboxtl0
+ ---hboxtr0..hboxbr0
+ ---cycle;
+ setbox0 "$g \circ h$";
+enddiagram;
+
+begindiagram(3,120pt#,40pt#,0pt#);
+ hboxes (0 upto 6);
+ .5[hboxtr0,hboxbl0] = (.5w,.5[h,-d]);
+ hboxtl1=(0,h);
+ hboxtr2=(w,h);
+ hboxr3=(w,ypart hboxr0);
+ hboxbr4=(w,-d);
+ hboxbl5=(0,-d);
+ hboxl6=(0,ypart hboxl0);
+ pickup pencircle scaled 0.4pt;
+ drawarrow .5[hboxbr1,hboxtr1]--hboxtl0;
+ drawarrow .5[hboxbl2,hboxtl2]--hboxtr0;
+ drawarrow .5[hboxbl3,hboxtl3]--hboxr0;
+ drawarrow .5[hboxbl4,hboxtl4]--hboxbr0;
+ drawarrow .5[hboxbr5,hboxtr5]--hboxbl0;
+ drawarrow .5[hboxbr6,hboxtr6]--hboxl0;
+ prooflabel0;
+ setbox0 "$g \circ h$";
+ setbox1 "\tt hboxtl0";
+ setbox2 "\tt hboxtr0";
+ setbox3 "\tt hboxr0";
+ setbox4 "\tt hboxbr0";
+ setbox5 "\tt hboxbl0";
+ setbox6 "\tt hboxl0";
+enddiagram;
+
+end;
diff --git a/macros/latex209/contrib/diagramf/ltugboat.sty b/macros/latex209/contrib/diagramf/ltugboat.sty
new file mode 120000
index 0000000000..7db247b18c
--- /dev/null
+++ b/macros/latex209/contrib/diagramf/ltugboat.sty
@@ -0,0 +1 @@
+../tugboat/ltugboat.sty \ No newline at end of file
diff --git a/macros/latex209/contrib/diagramf/tugboat.cmn b/macros/latex209/contrib/diagramf/tugboat.cmn
new file mode 120000
index 0000000000..72c6ed15b7
--- /dev/null
+++ b/macros/latex209/contrib/diagramf/tugboat.cmn
@@ -0,0 +1 @@
+../../../plain/contrib/tugboat/tugboat.cmn \ No newline at end of file
diff --git a/macros/latex209/contrib/dropcaps/dropcaps.sty b/macros/latex209/contrib/dropcaps/dropcaps.sty
new file mode 100644
index 0000000000..b1675580e8
--- /dev/null
+++ b/macros/latex209/contrib/dropcaps/dropcaps.sty
@@ -0,0 +1,130 @@
+%%
+%% Style-option `dropcaps' for use with LaTeX v2.09
+%%
+\def\fileversion{0.30}
+\def\filedate{13 Sep 1993}
+\def\docdate{\filedate}
+%%
+%% Copyright (C) 1993 by Fred J. Lauwers, fred@dutspf.tudelft.nl .
+%% All rights reserved.
+%%
+%% THANKS
+%% Jeremy Gibbons
+%%
+%% DESCRIPTION:
+%% dropcaps.sty contains a macro for dropping caps in LaTeX.
+%%
+%% INSTALLATION:
+%% Put this file where your TeX looks for inputs,
+%% under the name dropcaps.sty.
+%%
+%% DOCUMENTATION:
+%% dropcaps.tex
+%%
+%% COPYING:
+%% Copying of part or all of this file is allowed under the following
+%% conditions only:
+%% (1) You may freely distribute unchanged copies of the file. Please
+%% include the documentation when you do so.
+%% (2) You may modify a renamed copy of the file, but only for personal
+%% use or use within an organization.
+%% (3) You may copy fragments from the file, for personal use or for
+%% distribution, as long as credit is given where credit is due.
+%%
+%% You are NOT ALLOWED to take money for the distribution or use of
+%% this file or modified versions or fragments thereof, except for
+%% a nominal charge for copying etc.
+%%
+\typeout{\space\space Style option: 'dropcaps' v\fileversion \space\space
+ <\filedate> \space\space (FJL)}%
+
+\font\fredfont=cmbxsl10
+\def\fred{F\kern-.25em\j\kern-.1emL}
+
+\def\yes{y }\def\no{n }\newif\ifdvips
+\message{*** Are you using Rokicki's DVIPS [y/n] ? }
+\read-1 to \answer
+\ifx\answer\yes\dvipstrue
+\else\dvipsfalse\fi
+
+\newcount\bigscale
+\ifdvips\typeout{*** Good choice.}%
+%
+% DVIPS users
+%
+\newcount\wantedcount\newcount\actualcount%
+\newdimen\actualheight%
+\def\findsize#1#2{%
+\bigscale=1000%
+\font\BIG=#1 scaled \bigscale%
+\setbox0=\hbox{\BIG #2\/}%
+\actualheight=\ht0%
+\typeout{*** Needed height: \the\wantedheight,
+ \space Unscaled height: \the\actualheight}%
+\wantedcount=\wantedheight \actualcount=\actualheight%
+\advance\actualcount by 50%
+\divide\actualcount by 100%
+\multiply\wantedcount by 10%
+\divide\wantedcount by \actualcount%
+\font\BIG=#1 scaled \wantedcount%
+\setbox0=\hbox{\BIG #2\/}%
+\bigscale=\wantedcount%
+}
+\else\typeout{*** OK, prepare for bad output...}%
+%
+% non-DVIPS users
+%
+\def\nextmagstep#1#2#3{%
+\bigscale=#3%
+\font\BIG=#1 scaled \bigscale%
+\setbox0=\hbox{\BIG #2\/}}%
+\def\findsize#1#2{%
+\typeout{*** Needed height: \the\wantedheight}%
+\nextmagstep{#1}{#2}{\magstep0}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstephalf}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep1}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep2}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep3}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep4}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep5}%
+\fi\fi\fi\fi\fi\fi%
+}\fi
+
+\newcount\down
+\newdimen\saveunitlength
+\newdimen\wantedheight
+\def\bigdrop#1#2#3#4{%
+\saveunitlength=\unitlength%
+\unitlength=\baselineskip%
+\setbox1=\hbox{\the\font I}%
+\wantedheight=#2\baselineskip \advance\wantedheight by -\baselineskip%
+\advance\wantedheight by \ht1%
+\findsize{#3}{#4}%
+\advance\wantedheight by -\ht0% only for typeout...
+\typeout{*** #3 scaled \the\bigscale \space ==> height:
+ \the\ht0 \space (error: \the\wantedheight).}%
+\hangindent=\wd0 \advance\hangindent by #1%
+\hangafter=-#2%
+\ifdim\dp0>0.25\baselineskip% 0pt ?
+ \typeout{*** extra line(s) indented: non-zero depth: \the\dp0}
+ \loop\ifdim\dp0>\baselineskip
+ \advance\baselineskip by \baselineskip
+ \advance\hangafter by -1
+ \repeat
+ \advance\hangafter by -1
+ \baselineskip=\unitlength
+\fi%
+\noindent%
+\down=-#2 \advance\down by 1%
+\begin{picture}(0,0)%
+\put(0,\down){\makebox(0,0)[br]{\box0}}%
+\end{picture}%
+\unitlength=\saveunitlength}
+
+\endinput
diff --git a/macros/latex209/contrib/dropcaps/dropdoc.tex b/macros/latex209/contrib/dropcaps/dropdoc.tex
new file mode 100644
index 0000000000..940e812ed7
--- /dev/null
+++ b/macros/latex209/contrib/dropcaps/dropdoc.tex
@@ -0,0 +1,143 @@
+% DROPDOC.TEX -- 13-09-1993
+%
+\documentstyle[dropcaps]{ttn2n1a}
+\begin{document}
+
+\Section{{\huge {\tt dropcaps.sty}}\\
+ a style file for dropping caps (\fred)}
+
+\bigdrop{-10pt}{3}{cmsl10}{I}n a previous issue of \TTN\
+(vol. 1, No. 4, 1992), Peter Flynn dedicates a subsection of
+{\sl Typographer's Inn\/} to the problem of dropped capitals. This is
+my answer to some of his questions. Basically, I don't start with the
+capital, but I let the capital's size depend on the chosen design.
+I wrote a dropped caps macro for use with \LaTeX, and took these
+design decisions:
+\begin{itemize}
+\item First, let the writer choose her favourite design, within certain
+ limitations though, and let the macro do the dirty work: adjusting
+ the cap to the optimal size.
+\item Let the writer decide how many lines she wants to dropindent. Let
+ her also decide in which font the cap should appear, whether to
+ start the cap {\em at\/} the left margin, or somewhat to the left
+ (into the white space) or to the right (into text direction). Let
+ her decide what she puts into dropped caps: a single character, or
+ even one or more whole words, or without caps at all.
+\item The limitations: Let the cap's baseline be aligned with the baseline
+ of the lowest of the indenting lines. Let the cap's top line be
+ aligned with the top line of the first of the indenting lines.
+ Don't let the writer mess with this!
+\end{itemize}
+
+\Subsection{Usage}
+
+\bigdrop{-10pt}{3}{cmsl10}{M}y {\tt dropcaps.sty} is a \LaTeX\ style
+file, that defines a macro command \verb+\bigdrop+ that enables you to
+drop capitals at the beginning of a paragraph. The layout can be
+controlled in various ways, with four parameters (not optional). For
+instance, the current paragraph started with\\ [2pt]
+\verb+\bigdrop{-10pt}{3}{cmsl10}{M}y ...+\\ [2pt]
+The required parameters are:
+\begin{enumerate}
+\item a {\em length}, that denotes the distance from the left margin
+ (to the left or to the right) at which the dropped capital starts,
+ in this case 10pt into the left margin: {\tt -10pt}.
+\item an integer value, that denotes the number of lines to be indented,
+ in this case {\tt 3} lines.
+\item the font to be used for the dropped capital, in this case {\tt cmsl10}.
+\item the character or text to be dropped, in this case a single {\tt M}.
+\end{enumerate}
+
+\Subsection{The messy details}
+
+\bigdrop{-10pt}{3}{cmsl10}{W}hen the macro \verb+\bigdrop+ is called
+(with four parameters), this is what happens. First, a capital "I" is
+typeset in the current text font and put in a box (\verb+box1+). The
+desired font height (\verb+\wantedheight+) is then computed from
+\verb|(n-1)*\baselineskip+\ht1|, where {\tt n} is the number of lines
+to indent. Then the procedure differs, depending on the choice for DVIPS
+or not.\\ [8pt]
+%
+{\fredfont DVIPS users}\\
+%
+In this case the text to be capitalized, typeset in the chosen font
+(at scale \verb+1000+), is put in a box (\verb+box0+), with height
+\verb+\actualheight+ $=$ \verb+\ht0+. Now, the scaling factor for this
+font can be computed from dividing \verb+\wantedheight+ by
+\verb+\actualheight+ and multiplying this by \verb+1000+. Because
+divisions are integer, the heights are first put in count registers,
+and then, to prevent from rounding errors and overflow,
+\verb+\wantedheight*10+ is divided by \verb+\actualheight/100+. The
+outcome of this is the scale at which the chosen font is typeset.\\ [8pt]
+%
+{\fredfont non-DVIPS users}\\
+%
+Without DVIPS things are less elegant, for only the standard magsteps
+are available for scaling fonts\footnote{The \verb+magstep+'s {\tt 0},
+{\tt half}, {\tt 1}, {\tt 2}, {\tt 3}, {\tt 4}, and {\tt 5}.}. The text
+to be capitalized in the chosen font, is first typeset at
+\verb|\magstep 0| and put in a box (\verb+box0+), with height \verb+\ht0+.
+
+If \verb+\wantedheight+ is bigger then \verb+\ht0+, the text is typeset
+at \verb|\magstephalf|, and put in \verb+box0+ again. If
+\verb+\wantedheight+ is still bigger then \verb+\ht0+, again the
+\verb|\magstep| is increased one step, et cetera. This process is
+repeated until \verb+\wantedheight+ is smaller then \verb+\ht0+.\\ [8pt]
+%
+{\fredfont both}\\
+%
+The result of the computation can be observed on the screen and in the
+{\tt .log} file. Each time a capital is dropped, two lines like\\ [2pt]
+\verb|*** Needed height: 30.83331pt, Unscaled height: 6.83331pt|\\
+\verb|*** cmsl10 scaled 4512 ==> height: 30.83195pt (error: 0.00136pt).|\\ [2pt]
+appear. This example is from processing this document with {\tt n = 3}
+and font {\tt cmsl10}.
+
+At the end of the computation {\tt box0} contains the text, typeset in
+the desired font and scaled such that \verb+\ht0+ equals the height of
+the indenting lines. Then, \verb+\hangindent+ and \verb+\hangafter+ are
+set according to {\tt box0} and the parameter values:
+\verb|\hangindent:=\wd0+#1|, and \verb|\hangafter:=-#2|.
+Precautions are taken for the case that \verb+\dp0+ is not equal to
+zero\footnote{An extra line is indented, if overlap occurs, the test file
+{\tt droptest.tex} shows an example of this.}. Finally, in a \LaTeX\
+picture environment, the text is placed where we want it.
+
+\Subsection{Requirements}
+
+\bigdrop{-10pt}{3}{cmsl10}{I}n order to use this style file, a big
+version of \LaTeX\ is needed, because almost always fonts have to be
+generated, and already from 4 indenting lines, they tend to become very
+large. I tested this with em\TeX's \TeX386 (with emx) on a 486DX33 PC,
+and with em\TeX's b\TeX186 on a AT286 PC.
+
+Also needed is a version of {\bf DVIPS} by Tomas Rokicki with {\bf MakeTeXPK}
+running, so the generation of fonts will be done automatically. For me
+the recently uploaded {\bf DVIPS 5.518} works great on both machines.
+
+All this is necessary because the implemented procedure in this macro
+automatically leads to non-standard fonts. So, for optimal pleasure,
+use a big \TeX\ and Rokicki's {\bf DVIPS}.
+
+\Subsection{Alternatives}
+
+\bigdrop{-10pt}{3}{cmsl10}{O}nly one style file that does something
+similar is listed in \TeX--index v1.06 by David M. Jones, namely
+{\tt drop.sty} by David G. Cantor. The latest version is dated
+17--02--1988. This style file also defines a macro to drop capitals,
+but has no possibilities to accept controlling parameters, except for
+the choice of font. You are not able to choose the desired height by
+supplying the number of lines to be indented.
+
+The dropped capital has a fixed size, namely \verb+\magstep5+, and
+always two lines are indented. This font height is somewhat smaller
+than the height of two indenting lines, so the vertical placement of
+the dropped capital's baseline lies not at the same height as the
+vertical placement of the baseline of the second indenting line (next
+to it). The advantage of this is that everyone has this font.
+
+\vspace{2cm}
+\leftline{Fred J. Lauwers ({\sl \fred\/})}
+\leftline{\tt fred@dutspf.tudelft.nl}
+
+\end{document}
diff --git a/macros/latex209/contrib/dropcaps/droptest.tex b/macros/latex209/contrib/dropcaps/droptest.tex
new file mode 100644
index 0000000000..9e2e1f9b1d
--- /dev/null
+++ b/macros/latex209/contrib/dropcaps/droptest.tex
@@ -0,0 +1,70 @@
+% DROPTEST.TEX -- 13-09-1993
+%
+\documentstyle[dropcaps]{ttn2n1a}
+\begin{document}
+
+\Section{{\huge {\tt bigdrop}}\\
+ a macro for dropping caps (\fred)}
+
+\Subsection{Watch the caps!}
+
+\bigdrop{25pt}{1}{cmbx12}{T}his is the first example of the
+\verb+\bigdrop+ macro. This time the macro is used like this:
+\verb+\bigdrop{25pt}{1}{cmbx12}{T}his is...+ The first parameter
+says that the dropped capital starts {\tt 25pt} from the left margin.
+The second parameter says that only one line is indenting, and the
+third is there to choose the wished font {\tt cmbx12}. The fourth is
+just the character to be dropped. Note: this example can also be done
+without this macro, with a small effort to get the 12pt character
+10pt high.
+
+\bigdrop{0pt}{2}{cmsl10}{I'}m happy to show another example of this
+\verb+\bigdrop+ macro. This time it is used like this:
+\verb+\bigdrop{0pt}{2}{cmsl10}{I'}m happy...+ The first parameter says
+that the dropped capital starts at the left margin. The second parameter
+says that two lines are indenting, the third is the wanted font for the
+cap, and the fourth is just the text to be dropped. Note: this can be
+more than one character.
+
+\Subsection{And again!}
+
+\bigdrop{0pt}{3}{cmr10}{\TeX}is a beautiful program, with a lot
+of possibilities. Take this nice example of the \verb+\bigdrop+ macro,
+this time called with \verb+\bigdrop{0pt}{3}{cmr10}{\TeX}is a...+\\
+The first parameter says that the dropped capital starts at the left
+margin. The second parameter says that three lines are indented, the
+third is the chosen font, and the fourth is the text to be dropped.
+Note: there are four lines indented instead of the requested three.
+To explain why we take a look at the next example.
+
+\bigdrop{0pt}{3}{cmr10}{TEX}is a beautiful program, even when the
+macro is called with \verb+\bigdrop{0pt}{3}{cmr10}{TEX}is a...+\\
+We see something remarkable here: in both cases the number of indenting
+lines is three, but in the previous example four lines are indented!
+The reason for this is that in the first case the string \verb+\TeX+
+has non--zero depth, as opposed to the second case --- and the first
+two examples --- where the string fits exactly in the reserved space.
+The author could have chosen to fit the logo in the three--lines--space,
+but in that case the font would have been smaller, and to the author's
+opinion the best outcome is obtained by equal numbers of indenting lines
+with equal font heights in any document.
+So, when a non--zero depth is met, the macro automatically determines
+whether an extra indenting line (or maybe more) is needed.
+
+\bigdrop{-20pt}{5}{cmsl10}{A}s a last example we make a very big
+dropped cap. What? You did not know you could make such big
+fonts? Of course you can, just use Rokicki's {\bf DVIPS} with running
+{\bf MakeTeXPK}, then the fonts are generated automatically!
+In this example the macro is called with
+\verb+\bigdrop{-20pt}{5}{cmsl10}{A}s a last...+
+Note that the fonts automatically get bigger:
+the height depends on the number of lines to be indented, the current
+text font, the current baselineskip, and the chosen font. The
+\verb+\bigdrop+ macro computes the needed height of the font, so you
+don't have to worry about that.
+
+\vspace{2cm}
+\leftline{Fred J. Lauwers ({\sl \fred\/})}
+\leftline{\tt fred@dutspf.tudelft.nl}
+
+\end{document}
diff --git a/macros/latex209/contrib/dropcaps/ttn2n1a.sty b/macros/latex209/contrib/dropcaps/ttn2n1a.sty
new file mode 100644
index 0000000000..f0efbe33af
--- /dev/null
+++ b/macros/latex209/contrib/dropcaps/ttn2n1a.sty
@@ -0,0 +1,135 @@
+%% IMPORTANT NOTICE: You *MUST* use this version 2.1 of tugnews.sty
+%% dated Jan. 1993 in order to run vol.2, no.1 of
+%% _TeX and TUG NEWS_. (Ch. Thiele, Editor, TTN).
+%%
+
+\input report.sty %% default report style, 10pt font
+
+\typeout{Version 2.1 -- Jan. 93}
+
+\textwidth=29pc
+\textheight=43pc
+\voffset=-2pc
+\overfullrule=0pt \hfuzz=5pt
+
+\font\Sectionfont=cmbxsl10 scaled \magstep2 %% \Large = 14.40pt
+%% \Subsectionfont and \bsl aren't used in TTN 1,3:
+\font\Subsectionfont=cmbxsl10 scaled \magstep1 %% \large = 12pt
+\font\subsectionbit=cmbxti10 scaled\magstep1 %% bold italic 12pt
+%% \font\bsl=cmbxsl10 %% bold slant 10pt
+\font\unsl=cmu10 %% unslant 10pt for
+ %% upright pound sign
+%test for nfss as suggested by Johannes Braams (cjc, 1992.10)
+ \ifx\undefined\selectfont
+ % If NFSS is not preloaded, do nothing.
+ \else
+ % If NFSS has been preloaded, we need the following:
+ % \font\tenmi=cmmi10 % or better yet:
+ \def\tenmi{\fontfamily{cmm}\fontseries{m}\fontshape{it}%
+ \fontsize{10}{12pt}\selectfont}
+ \fi
+
+
+\newcommand{\Section}[1]{\section*{\centering%
+ \hrule\hrule \vskip.5pc
+ {\Sectionfont #1}
+ \vskip.5pc \hrule\hrule
+ \vskip1pc
+ }
+ }
+%% The following macro hasn't been used since the prototype:
+%% Reggie's \Subsection (6 MAY 91): %% 15 JAN 92: not used in 1,1
+\newcommand{\Subsection}[1]{\subsection*{\centering%
+ \centerline{\vrule width 6cm height .5pt} \vskip 6pt
+ {{\Subsectionfont #1}}
+ \centerline{\vrule width 6cm height .5pt} \vskip 6pt
+ }
+ }
+
+
+%% 11 JAN 92: added \bibentry, a hanging indent biblio style (Ch.)
+\newcommand{\bibentry}{\hangindent=\parindent
+ \hangafter=1
+ \noindent \sloppy
+ \clubpenalty500 \widowpenalty500
+ \frenchspacing
+ }
+
+%% 3 FEB 92: Jackie Damrau provided this:
+\newenvironment{Address}{\begin{verse}}%
+ {\end{verse}}
+
+
+%% Abbreviations and Logos (some copped from tugboat.cmn):
+
+%% for the METAFONT logo font:
+\font\manual=manfnt %% logo10
+\def\MF{{\manual META}\-{\manual FONT}}
+
+\def\PS{{\sc Post\-Script}}
+
+\def\TUG{\TeX{} Users Group}
+\def\tug{{\small TUG}} %% added 30 SEP 92 (Ch.)
+\def\TUB{{\sl TUGboat\/}}
+\def\TTN{{\sl\TeX{} and TUG NEWS\/}}
+\def\ttn{{\small TTN}} %% added 30 SEP 92 (Ch.)
+\def\isbn{{\small ISBN}} %% added 30 SEP 92 (Ch.)
+\def\issn{{\small ISSN}} %% added 30 SEP 92 (Ch.)
+\def\nfss{{\small NFSS}} %% added 30 SEP 92 (Ch.)
+\def\uk{{\small UK}} %% added 15 OCT 92 (Ch.)
+\def\fax{{\small FAX}} %% added 15 OCT 92 (Ch.)
+
+\def\pounds{{\unsl\$}} %% added 15 OCT 92 (Ch.)
+
+\def\GUTenberg{{\small GUT}enberg} %% added 2 FEB 93 (Ch.)
+
+
+%% 4 FEB 92: improved versions of LaTeX, and (La)TeX macros:
+
+\newcount\TestCount
+\def\La{\TestCount=\the\fam \leavevmode L\raise.42ex
+ \hbox{$\fam\TestCount\scriptstyle\kern-.3em A$}}
+
+\def\LaTeX{\La\kern-.15em\TeX}
+
+\def\AllTeX{{(\La)\TeX}}
+
+\def\AmSTeX{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
+ {\the\textfont2 M}\kern-.125em{\the\textfont2 S}-\TeX}
+
+\def\AmSLaTeX{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
+ {\the\textfont2 M}\kern-.125em{\the\textfont2 S}-\LaTeX}
+
+\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025emb}\kern-.08em\TeX}}
+
+\def\careof{\leavevmode\hbox{\raise.75ex\hbox{c}\kern-.15em
+ /\kern-.125em\smash{\lower.3ex\hbox{o}}} \ignorespaces}
+
+\def\ILaTeX{I\LaTeX}
+
+\def\TeCH{{\rm T\kern-.1667em\lower.7ex\hbox{E}\kern-.125em{\sf CH}}}
+
+\def\TeXline{{\TeX\kern-0.1em line}}
+
+%% 28 JAN 93: from Phil Taylor:
+
+\def\UK-TuG{UK-T\lower0.5ex\hbox{U}G}
+
+
+%% Miscellaneous:
+
+\hyphenation{Karls-ruhe}
+
+\let\ts=\thinspace
+\let\nl=\newline
+
+
+%% CHANGES FROM ttn1-1.sty TO ttn1-2.sty:
+
+%% 25 MAY 92: changed \smc to \sc in \BiBTeX def'n (Ch.)
+%% added \AmSLaTeX def'n (Ch.)
+%% 14 JUN 92: added \TeXline def (Ch.)
+
+%% CHANGES from ttn1-2.sty TO ttn1-3.sty:
+%% 10 SEP 92: Jackie added {ttnlist}
+
diff --git a/macros/latex209/contrib/e_symbol/e_symbol.tex b/macros/latex209/contrib/e_symbol/e_symbol.tex
new file mode 100644
index 0000000000..d82d323c5d
--- /dev/null
+++ b/macros/latex209/contrib/e_symbol/e_symbol.tex
@@ -0,0 +1,573 @@
+% Diese Datei enth"alt nur elektrische Symbole, die zur Erstellung
+% eines Schaltplans genutzt werden k"onnen. Dazu ist das File mit
+% \input{e_symbol} in das Dokument einzubinden.
+%
+% Es gibt die Zeichen \hwiderstand{x}{y}, \vwiderstand{x}{y},
+% \hkondensator{x}{y}, \vkondensator{x}{y}, \hspule{x}{y},
+% \vspule{x}{y}, \masse{x}{y}, \biptrans{x}{y}{dir}{typ}{invers},
+% \fet{x}{y}{dir}{typ}, \diode{x}{y}{dir}, \zdiode{x}{y}{dir}.
+
+\typeout{} % 60 * / Zeile(10.Spalte--70.Spalte
+\typeout{*************************************************************}
+\typeout{* e_symbol.tex enthaelt Befehlsergaenzungen zum Erstellen__ *}
+\typeout{* von Schaltplaenen._______________________________________ *}
+\typeout{* Dieter Jurzitza, 30.07.92 0721/691909____________________ *}
+\typeout{*************************************************************}
+\typeout{}
+
+% horizontal angeordneter Widerstand der L"ange 2 Einheiten. #1(x)
+% und #2(y) geben den linken Drahtanfang an. Die Dicke betr"agt
+% 0.4 Einheiten.
+
+\newcommand{\hwiderstand}[2]{%
+ \put(#1,#2){%
+ \line(1,0){0.5}
+ \put(0,-0.2){\line(0,1){0.4}}
+ \put(0,-0.2){\line(1,0){1}}
+ \put(0,0.2){\line(1,0){1}}
+ \put(1,-0.2){\line(0,1){0.4}}
+ \put(1,0){\line(1,0){0.5}}
+ }%
+ }%
+
+% vertikal angeordneter Widerstand der L"ange 2 Einheiten. #1(x)
+% und #2(y) geben den unteren Drahtanfang an. Die Dicke betr"agt
+% 0.4 Einheiten.
+
+\newcommand{\vwiderstand}[2]{%
+ \put(#1,#2){%
+ \line(0,1){0.5}
+ \put(-0.2,0.5){\line(1,0){0.4}}
+ \put(-0.2,0.5){\line(0,1){1}}
+ \put(0.2,0.5){\line(0,1){1}}
+ \put(-0.2,1.5){\line(1,0){0.4}}
+ \put(0,1.5){\line(0,1){0.5}}
+ }%
+ }%
+
+% horizontal angeordneter Kondensator der L"ange 1 Einheit. #1(x)
+% und #2(y) geben den linken Drahtanfang an. Die Dicke betr"agt 1
+% Einheit.
+
+\newcommand{\hkondensator}[2]{%
+ \put(#1,#2){%
+ \line(1,0){0.4}
+ \put(0,-0.5){\line(0,1){1}}
+ \put(0.2,-0.5){\line(0,1){1}}
+ \put(0.2,0){\line(1,0){0.4}}
+ }%
+ }%
+
+% vertikal angeordneter Kondensator der L"ange 1 Einheit. #1(x)
+% und #2(y) geben den unteren Drahtanfang an. Die Dicke betr"agt 1
+% Einheit.
+
+\newcommand{\vkondensator}[2]{%
+ \put(#1,#2){%
+ \line(0,1){0.4}
+ \put(-0.5,0.4){\line(1,0){1}}
+ \put(-0.5,0.6){\line(1,0){1}}
+ \put(0,0.6){\line(0,1){0.4}}
+ }%
+ }%
+
+
+% horizontal angeordnete Spule der L"ange 3 Einheiten. #1(x)
+% und #2(y) geben den linken Drahtanfang an. Die Dicke betr"agt 0.5
+% Einheiten.
+
+\newcommand{\hspule}[2]{%
+ \put(#1,#2){%
+ \line(1,0){0.5}
+ \put(0.25,0){\oval(0.5,0.5)[t]}
+ \put(0.75,0){\oval(0.5,0.5)[t]}
+ \put(1.25,0){\oval(0.5,0.5)[t]}
+ \put(1.75,0){\oval(0.5,0.5)[t]}
+ \put(2,0){\line(1,0){0.5}}
+ }%
+ }%
+
+% vertikal angeordnete Spule der L"ange 3 Einheiten. #1(x)
+% und #2(y) geben den linken Drahtanfang an. Die Dicke betr"agt 0.5
+% Einheiten.
+
+\newcommand{\vspule}[2]{%
+ \put(#1,#2){%
+ \line(0,1){0.5}
+ \put(0,0.75){\oval(0.5,0.5)[l]}
+ \put(0,1.25){\oval(0.5,0.5)[l]}
+ \put(0,1.75){\oval(0.5,0.5)[l]}
+ \put(0,2.25){\oval(0.5,0.5)[l]}
+ \put(0,2.5){\line(0,1){0.5}}
+ }%
+ }%
+
+% horizontaler Strich der L"ange 0.5 Einheiten, symmetrisch zu
+% #1(x) und #2(y) angeordnet.
+
+\newcommand{\masse}[2]{
+ \put(#1,#2){%
+ \put(-0.25,0){\line(1,0){0.5}}
+ }%
+ }%
+
+% npn -- oder pnp Transistoren, nach links, nach rechts, nach
+% oben oder nach unten gerichtet. Die Ausrichtung ist vom
+% "ubergebenen Parameter #3, der Typ von Parameter #4 abh"angig.
+% Zul"assige Werte f"ur #3: o(ben), u(nten), (r)echts, (l)inks.
+% Zul"assige Werte f"ur #4: n(pn) oder p(np). #1 ergibt die X, #2
+% die Y- Koordinate. Die Boxgr"o"se betr"agt 1*1.5, Basisanschlu"s
+% bei (0,0.75)(r), (1,0.75)(l), (0.75,0)(o), (0.75,1.0)(u).
+% Parameter #5 vertauscht die Anschl"usse f"ur Kollektor und
+% Emitter, so da"s eine beliebige Orientierung des Elementes
+% m"oglich ist. Es gilt: Normal r: Emitter rechts unten, l:
+% Emitter links unten, o: Emitter rechts oben, u: Emitter rechts
+% unten.
+% Invers : jeweils oben und unten vertauscht.
+
+\newcommand{\biptrans}[5]%
+ {%
+ \let\transhlp=*% Zustandsspeicher f"ur Fehlermeldungen
+ \if#3r% Transistor nach rechts....
+ {%
+ \put(#1,#2)%
+ {%
+ \global\let\transhlp=t%
+ \put(0.5,0.25){\line(0,1){1.0}}% Basisbalken...
+ \put(0,0.75){\line(1,0){0.5}}% Basisanschlu"s...
+ %
+ \if#5i% Wenn Schalter 'invers'....
+ {%
+ \if#4n% und n(pn)
+ {%
+ \put(0.5,1.0){\vector(2,1){0.5}}%
+ }% Emitter rechts oben!
+ \else% sonst...
+ {% und p(np)
+ \put(1.0,1.25){\vector(-2,-1){0.5}}%
+ }% Emitter rechts oben!
+ \fi%
+ \put(0.5,0.5){\line(2,-1){0.5}}%
+ }% Kollektor rechts unten!
+ \else% Schalter 'normal'....
+ {%
+ \if#4n% und n(pn)
+ {%
+ \put(0.5,0.5){\vector(2,-1){0.5}}%
+ }% Emitter rechts unten!
+ \else%
+ {% und p(np)
+ \put(1.0,0.25){\vector(-2,1){0.5}}%
+ }% Emitter rechts unten!
+ \fi%
+ \put(0.5,1.0){\line(2,1){0.5}}%
+ }% Kollektor rechts oben!
+ \fi%
+ % Anschlu"s f"ur Kollektor und Emitter....
+ \put(1.0,0.25){\line(0,-1){0.25}}%
+ \put(1,1.25){\line(0,1){0.25}}%
+ }%
+ }%
+ \fi%
+ %
+ \if#3l% Transistor nach links...
+ {%
+ \put(#1,#2)%
+ {%
+ \global\let\transhlp=t%
+ \put(0.5,0.25){\line(0,1){1.0}}% Basisbalken..
+ \put(0.5,0.75){\line(1,0){0.5}}% Basisanschlu"s...
+ %
+ \if#5i% Wenn Schalter 'invers'...
+ {%
+ \if#4n% und n(pn)...
+ {%
+ \put(0.5,1.0){\vector(-2,1){0.5}}%
+ }% Emitter links oben!
+ \else%
+ {% und p(np)...
+ \put(0.0,1.25){\vector(2,-1){0.5}}%
+ }% Emitter links oben!
+ \fi%
+ \put(0.5,0.5){\line(-2,-1){0.5}}%
+ }% Kollektor links unten!
+ \else% Schalter 'normal'...
+ {%
+ \if#4n%
+ {% und n(pn)...
+ \put(0.5,0.5){\vector(-2,-1){0.5}}%
+ }% Emitter links unten!
+ \else%
+ {% und p(np)...
+ \put(0,0.25){\vector(2,1){0.5}}%
+ }% Emitter links unten!
+ \fi%
+ \put(0.5,1.0){\line(-2,1){0.5}}%
+ }% Kollektor links oben!
+ \fi%
+ % Anschlu"s f"ur Kollektor und Emitter...
+ \put(0,0.25){\line(0,-1){0.25}}%
+ \put(0,1.25){\line(0,1){0.25}}%
+ }%
+ }%
+ \fi%
+ %
+ \if#3o% Transistor nach oben...
+ {%
+ \put(#1,#2)%
+ {%
+ \global\let\transhlp=t%
+ \put(0.25,0.5){\line(1,0){1.0}}% Basisbalken...
+ \put(0.75,0){\line(0,1){0.5}}% Basisanschlu"s...
+ %
+ \if#5i% Schalter 'invers'...
+ {%
+ \if#4n% und n(pn)...
+ {%
+ \put(0.5,0.5){\vector(-1,2){0.25}}%
+ }% Emitter links oben!
+ \else%
+ {% und p(np)...
+ \put(0.25,1.0){\vector(1,-2){0.25}}%
+ }% Emitter links oben!
+ \fi%
+ \put(1.0,0.5){\line(1,2){0.25}}%
+ }% Kollektor rechts oben!
+ \else% Schalter 'normal...
+ {%
+ \if#4n% und n(pn)...
+ {%
+ \put(1.0,0.5){\vector(1,2){0.25}}%
+ }% Emitter rechts oben!
+ \else%
+ {% und p(np)...
+ \put(1.25,1.0){\vector(-1,-2){0.25}}%
+ }% Emitter rechts oben!
+ \fi%
+ \put(0.5,0.5){\line(-1,2){0.25}}%
+ }% Kollektor links oben!
+ \fi%
+ % Anschlu"s f"ur Kollektor und Emitter...
+ \put(1.25,1.0){\line(1,0){0.25}}%
+ \put(0,1){\line(1,0){0.25}}%
+ }%
+ }%
+ \fi%
+ %
+ \if#3u% Transistor nach unten...
+ {%
+ \put(#1,#2)%
+ {%
+ \global\let\transhlp=t%
+ \put(0.25,0.5){\line(1,0){1.0}}% Basisbalken...
+ \put(0.75,0.5){\line(0,1){0.5}}% Basisanschlu"s...
+ %
+ \if#5i% Schalter 'invers'...
+ {%
+ \if#4n% und n(pn)...
+ {%
+ \put(0.5,0.5){\vector(-1,-2){0.25}}%
+ }% Emitter links unten!
+ \else%
+ {% und p(np)...
+ \put(0.25,0){\vector(1,2){0.25}}%
+ }% Emitter links unten!
+ \fi%
+ \put(1.0,0.5){\line(1,-2){0.25}}%
+ }% Kollektor rechts unten!
+ \else%
+ {% Schalter 'normal'...
+ \if#4n% und n(pn)...
+ {%
+ \put(1.0,0.5){\vector(1,-2){0.25}}%
+ }% Emitter rechts unten!
+ \else%
+ {% und p(np)...
+ \put(1.25,0){\vector(-1,2){0.25}}%
+ }% Emitter rechts unten!
+ \fi%
+ \put(0.5,0.5){\line(-1,-2){0.25}}%
+ }% Kollektor links unten!
+ \fi%
+ % Anschlu"s f"ur Kollektor und Emitter!
+ \put(1.25,0){\line(1,0){0.25}}%
+ \put(0,0){\line(1,0){0.25}}%
+ }%
+ }%
+ \fi%
+ %
+ \if\transhlp*%
+ {%
+ \typeout{}%
+ \typeout{Falscher Parameter!}%
+ \typeout{Parameter 3 kann die Werte r(echts), l(inks), o(ben), u(unten) annehmen.}%
+ \typeout{Parameter 4 sollte die Werte n(pn) oder p(np) annehmen.}%
+ \typeout{Parameter 5 sollte i(nvers) oder n(ormal) sein}%
+ \typeout{Gewaehlt: #1 #2 #3 #4 #5}%
+ \typeout{}%
+ }%
+ \fi
+ }%
+
+% p- oder n-Kanal Feldeffekttransistoren, nach links, nach
+% rechts, nach oben oder nach unten gerichtet. Die Ausrichtung
+% ist vom "ubergebenen Parameter #3, der Typ von Parameter #4
+% abh"angig. Zul"assige Werte f"ur #3: o(ben), u(nten), (r)echts,
+% (l)inks. Zul"assige Werte f"ur #4: n(pn) oder p(np). #1 ergibt
+% die X, #2 die Y- Koordinate. Die Boxgr"o"se betr"agt 1*1,
+% Gateanschlu"s bei (0,0.5)(r), (1,0.5)(l), (0.5,0)(o),
+% (0.5,1.0)(u).
+
+\newcommand{\fet}[4]%
+ {%
+ \let\transhlp=*
+ \if#3r%
+ {%
+ \put(#1,#2)%
+ {%
+ \global\let\transhlp=t%
+ \if#4n%
+ {%
+ \put(0,0.5){\vector(1,0){0.5}}%
+ }%
+ \else%
+ {%
+ \put(0.5,0.5){\vector(-1,0){0.5}}%
+ }%
+ \fi%
+ \put(0.5,0){\line(0,1){1.0}}%
+ %
+ \put(0.5,0.25){\line(1,0){0.5}}%
+ \put(0.5,0.75){\line(1,0){0.5}}%
+ %
+ \put(1.0,0.25){\line(0,-1){0.25}}%
+ \put(1.0,0.75){\line(0,1){0.25}}%
+ }%
+ }%
+ \fi%
+
+ \if#3l%
+ {%
+ \put(#1,#2)%
+ {%
+ \global\let\transhlp=t%
+ \if#4n%
+ {%
+ \put(1.0,0.5){\vector(-1,0){0.5}}%
+ }%
+ \else%
+ {%
+ \put(0.5,0.5){\vector(1,0){0.5}}%
+ }%
+ \fi%
+ \put(0.5,0){\line(0,1){1.0}}%
+ %
+ \put(0.5,0.25){\line(-1,0){0.5}}%
+ \put(0.5,0.75){\line(-1,0){0.5}}%
+ %
+ \put(0,0.25){\line(0,-1){0.25}}%
+ \put(0,0.75){\line(0,1){0.25}}%
+ }%
+ }%
+ \fi%
+
+ \if#3u%
+ {%
+ \put(#1,#2)%
+ {%
+ \global\let\transhlp=t%
+ \if#4n%
+ {%
+ \put(0.5,1.0){\vector(0,-1){0.5}}%
+ }%
+ \else%
+ {%
+ \put(0.5,0.5){\vector(0,1){0.5}}%
+ }%
+ \fi%
+ \put(0,0.5){\line(1,0){1.0}}%
+ %
+ \put(0.25,0.5){\line(0,-1){0.5}}%
+ \put(0.75,0.5){\line(0,-1){0.5}}%
+ %
+ \put(0,0){\line(1,0){0.25}}%
+ \put(0.75,0){\line(1,0){0.25}}%
+ }%
+ }%
+ \fi%
+
+ \if#3o%
+ {%
+ \put(#1,#2)%
+ {%
+ \global\let\transhlp=t%
+ \if#4n%
+ {%
+ \put(0.5,0){\vector(0,1){0.5}}%
+ }%
+ \else%
+ {%
+ \put(0.5,0.5){\vector(0,-1){0.5}}%
+ }%
+ \fi%
+ \put(0,0.5){\line(1,0){1.0}}%
+ %
+ \put(0.25,0.5){\line(0,1){0.5}}%
+ \put(0.75,0.5){\line(0,1){0.5}}%
+ %
+ \put(0,1.0){\line(1,0){0.25}}%
+ \put(0.75,1.0){\line(1,0){0.25}}%
+ }%
+ }%
+ \fi%
+
+ \if\transhlp*%
+ {%
+ \typeout{}%
+ \typeout{Falscher Parameter!}%
+ \typeout{Parameter 3 kann die Werte r, l, o, u annehmen, nicht: #3 !}%
+ \typeout{}%
+ }%
+ \fi
+ }%
+
+% Zenerdiode in vier Richtungen. Gemeinsam ist die Anode. Die
+% L"ange betr"agt 1.5. Die Richtung wird mit #3 "ubergeben. Analog
+% \biptrans und \fet.
+
+\newcommand{\zdiode}[3]%
+ {%
+ \if#3o%
+ {%
+ \put(#1,#2)%
+ {%
+ \put(0,0){\line(0,1){1.5}}%
+ %
+ \put(-0.25,0.5){\line(1,0){0.5}}%
+ \put(-0.25,1.0){\line(1,0){0.5}}%
+ \put(0.25,1.0){\line(0,-1){0.15}}%
+ %
+ \put(-0.25,0.5){\line(1,2){0.25}}%
+ \put(0,1.0){\line(1,-2){0.25}}%
+ }%
+ }%
+ \fi
+
+ \if#3u%
+ {%
+ \put(#1,#2)%
+ {%
+ \put(0,0){\line(0,-1){1.5}}%
+ %
+ \put(-0.25,-1.0){\line(1,0){0.5}}%
+ \put(-0.25,-0.5){\line(1,0){0.5}}%
+ \put(-0.25,-1){\line(0,1){0.15}}%
+ %
+ \put(-0.25,-0.5){\line(1,-2){0.25}}%
+ \put(0.25,-0.5){\line(-1,-2){0.25}}%
+ }%
+ }%
+ \fi
+
+ \if#3r%
+ {%
+ \put(#1,#2)%
+ {%
+ \put(0,0){\line(1,0){1.5}}%
+ %
+ \put(1.0,0.25){\line(0,-1){0.5}}%
+ \put(0.5,0.25){\line(0,-1){0.5}}%
+ \put(1.0,-0.25){\line(-1,0){0.15}}%
+ %
+ \put(0.5,0.25){\line(2,-1){0.5}}%
+ \put(0.5,-0.25){\line(2,1){0.5}}%
+ }%
+ }%
+ \fi
+
+ \if#3l%
+ {%
+ \put(#1,#2)%
+ {%
+ \put(0,0){\line(-1,0){1.5}}%
+ %
+ \put(-1.0,0.25){\line(0,-1){0.5}}%
+ \put(-0.5,0.25){\line(0,-1){0.5}}%
+ \put(-1.0,0.25){\line(1,0){0.15}}%
+ %
+ \put(-0.5,0.25){\line(-2,-1){0.5}}%
+ \put(-0.5,-0.25){\line(-2,1){0.5}}%
+ }%
+ }%
+ \fi
+ }%
+
+% Diode in vier Richtungen. Gemeinsam ist die Anode. Die L"ange
+% betr"agt 1.5. Die Richtung wird mit #3 "ubergeben. Analog
+% \biptrans und \fet.
+
+\newcommand{\diode}[3]%
+ {%
+ \if#3o%
+ {%
+ \put(#1,#2)%
+ {%
+ \put(0,0){\line(0,1){1.5}}%
+ %
+ \put(-0.25,0.5){\line(1,0){0.5}}%
+ \put(-0.25,1.0){\line(1,0){0.5}}%
+ %
+ \put(-0.25,0.5){\line(1,2){0.25}}%
+ \put(0,1.0){\line(1,-2){0.25}}%
+ }%
+ }%
+ \fi
+
+ \if#3u%
+ {%
+ \put(#1,#2)%
+ {%
+ \put(0,0){\line(0,-1){1.5}}%
+ %
+ \put(-0.25,-1.0){\line(1,0){0.5}}%
+ \put(-0.25,-0.5){\line(1,0){0.5}}%
+ %
+ \put(-0.25,-0.5){\line(1,-2){0.25}}%
+ \put(0.25,-0.5){\line(-1,-2){0.25}}%
+ }%
+ }%
+ \fi
+
+ \if#3r%
+ {%
+ \put(#1,#2)%
+ {%
+ \put(0,0){\line(1,0){1.5}}%
+ %
+ \put(1.0,0.25){\line(0,-1){0.5}}%
+ \put(0.5,0.25){\line(0,-1){0.5}}%
+ %
+ \put(0.5,0.25){\line(2,-1){0.5}}%
+ \put(0.5,-0.25){\line(2,1){0.5}}%
+ }%
+ }%
+ \fi
+
+ \if#3l%
+ {%
+ \put(#1,#2)%
+ {%
+ \put(0,0){\line(-1,0){1.5}}%
+ %
+ \put(-1.0,0.25){\line(0,-1){0.5}}%
+ \put(-0.5,0.25){\line(0,-1){0.5}}%
+ %
+ \put(-0.5,0.25){\line(-2,-1){0.5}}%
+ \put(-0.5,-0.25){\line(-2,1){0.5}}%
+ }%
+ }%
+ \fi
+ }%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%% ENDE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/e_symbol/esymbdoc.dvi b/macros/latex209/contrib/e_symbol/esymbdoc.dvi
new file mode 100644
index 0000000000..fde7a2d12c
--- /dev/null
+++ b/macros/latex209/contrib/e_symbol/esymbdoc.dvi
Binary files differ
diff --git a/macros/latex209/contrib/e_symbol/esymbdoc.tex b/macros/latex209/contrib/e_symbol/esymbdoc.tex
new file mode 100644
index 0000000000..6ec01622ae
--- /dev/null
+++ b/macros/latex209/contrib/e_symbol/esymbdoc.tex
@@ -0,0 +1,305 @@
+\documentstyle[12pt,german,fleqn]{article}
+\input{e_symbol}
+
+\textheight 24cm
+\textwidth 15cm
+\headheight 0cm
+\headsep 0cm
+\topmargin -1cm
+\oddsidemargin 0cm
+\evensidemargin 0cm
+
+\newfont{\mat}{cmsy10 scaled 1728}
+
+\pagestyle{plain}
+\sloppy
+
+\begin{document}
+
+\section{Schaltbilder mit \LaTeX}
+Insbesondere f"ur Elektrotechniker, aber auch f"ur Physiker besteht
+immer wieder einmal die Erfordernis, eine Schaltbild in ein
+Dokument mit einzubinden. Um dies f"ur weniger umfangreiche
+Stroml"aufe mit \LaTeX\ zu erm"oglichen, wurde eine Bibliothek von
+elektrischen Symbolen erstellt. Sie enth"alt Definitionen f"ur
+Schaltelemente wie Kondensatoren, Widerst"anden, Spulen, Dioden,
+und Transistoren, die innerhalb einer picture--Umgebung
+verwendbar sind. Dazu ist im Kopf des Dokumentes der
+Aufruf \verb|\input{e_symbol}| einzuf"ugen. Diese Datei
+stellt die erforderlichen Makros zur Verf"ugung.
+
+Ein damit erstelltes Schaltbild hat etwa die folgende Form:
+\begin{verbatim}
+\documentstyle[12pt,german]{article}
+\input{e_symbol}
+\end{verbatim}
+... {\bf Formatdeklarationen} ...
+\begin{verbatim}
+\begin{document}
+\unitlength1cm
+\begin{figure}[htbp]
+\begin{picture}(15,14)
+ \thicklines
+
+ \put(2.5,0.5){\line(1,0){7.0}}
+ \put(9.6,0.5){\circle{0.2}}
+ \put(9.0,0.8)%
+ {%
+ $-V_B$%
+ }%
+
+ \put(1.5,13.5){\line(1,0){8.0}}
+ \put(9.6,13.5){\circle{0.2}}
+ \put(9.0,13.0)%
+ {%
+ $+V_B$%
+ }%
+
+ \vwiderstand{2.5}{1.0}
+ \put(2.8,1.5)% Widerstand R1
+ {%
+ $R_1$%
+ }%
+
+
+ \biptrans{2.5}{3.5}{l}{n}{n}
+ \put(3.3,3.5)%
+ {%
+ $T_3$%
+ }%
+\end{verbatim}
+... {\bf Weitere Bildelemente} ...
+\begin{verbatim}
+\end{picture}
+\end{figure}
+\end{document}
+\end{verbatim}
+Es lassen sich auf diese Weise Schaltbilder wie das in
+Abbildung~\ref{schaltbild} gezeigte erstellen:
+\begin{figure}[btp]
+\unitlength1cm
+\begin{picture}(15,14)
+ \thicklines
+ \put(0,0){\makebox(10,14){}}
+ \put(10.5,0)%
+ {%
+ \makebox(4.5,14)[t]%
+ {%
+ \begin{minipage}{4cm}
+\caption[]{Bei"-spiel f"ur ein Schalt"-bild mit
+zu"-s"atz"-lich"-em ~Be"-gleit"-text. ~Die Gr"o"-"se
+der er"-stell"-ten ~Zeich"-nung l"a"st sich durch
+Va"-ria"-ti"-on des Ein"-heits"-ma"-"ses fast
+be"-lie"-big ver"-"an"-dern.}\label{schaltbild}
+ \end{minipage}
+ }%
+ }%
+
+ \put(2.5,0.5){\line(1,0){7.0}}
+ \put(9.6,0.5){\circle{0.2}}
+ \put(9.0,0.8)%
+ {%
+ $-V_B$%
+ }%
+
+ \put(1.5,13.5){\line(1,0){8.0}}
+ \put(9.6,13.5){\circle{0.2}}
+ \put(9.0,13.0)%
+ {%
+ $+V_B$%
+ }%
+
+ \put(2.5,0.5){\line(0,1){0.5}}
+
+ \vwiderstand{2.5}{1.0}
+ \put(2.8,1.5)% Widerstand R1
+ {%
+ $R_1$%
+ }%
+
+ \put(2.5,3.0){\line(0,1){0.5}}
+
+ \biptrans{2.5}{3.5}{l}{n}{n}
+ \put(3.3,3.5)%
+ {%
+ $T_3$%
+ }%
+
+ \put(2.5,5.0){\line(0,1){2.5}}
+ \put(2.5,7.5){\circle*{0.1}}
+
+ \put(1.5,7.5){\line(1,0){2}}
+ \put(1.5,7.5){\line(0,1){1}}
+
+ \fet{0.5}{8.5}{r}{n}
+ \put(0.8,8.0)%
+ {%
+ $T_1$%
+ }%
+
+ \put(0.2,9){\line(1,0){0.3}}
+ \put(0.1,9.0){\circle{0.2}}
+ \put(1.5,9.5){\line(0,1){4}}
+ \put(0.0,9.3)%
+ {%
+ $-E$%
+ }%
+
+ \put(3.5,7.5){\line(0,1){1.0}}
+
+ \fet{3.5}{8.5}{l}{n}
+ \put(3.8,8.0)%
+ {%
+ $T_2$%
+ }%
+
+ \put(3.5,9.5){\line(0,1){1.5}}
+
+ \vwiderstand{3.5}{11}
+ \put(3.8,11.5)%
+ {%
+ $R_2$%
+ }%
+
+ \put(3.5,13){\line(0,1){0.5}}
+ \put(3.5,13.5){\circle*{0.1}}
+
+ \put(3.5,10.5){\circle*{0.1}}
+ \put(3.5,10.5){\line(1,0){2.5}}
+
+ \put(4.5,13.5){\circle*{0.1}}
+ \put(4.5,13.5){\line(0,-1){1.0}}
+
+ \vkondensator{4.5}{11.5}
+ \put(4.8,11.5)%
+ {%
+ $C_1$%
+ }%
+
+ \put(4.5,10.5){\circle*{0.1}}
+ \put(4.5,10.5){\line(0,1){1.0}}
+
+ \put(5.5,13.5){\circle*{0.1}}
+ \put(5.5,13.5){\line(0,-1){0.5}}
+
+ \vwiderstand{5.5}{11}
+ \put(5.8,11.5)%
+ {%
+ $R_3$%
+ }%
+
+ \put(5.5,11.0){\line(0,-1){8.25}}
+
+ \zdiode{5.5}{1.25}{o}
+ \put(5.8,1.5)%
+ {%
+ $ZD_1$%
+ }%
+
+ \put(5.5,0.5){\circle*{0.1}}
+ \put(5.5,0.5){\line(0,1){0.75}}
+ \put(5.5,4.25){\circle*{0.1}}
+ \put(5.5,4.25){\line(-1,0){2.0}}
+
+ \put(4.5,9.0){\line(0,-1){2.5}}
+ \put(4.5,6.5){\line(-1,0){4.3}}
+ \put(0.1,6.5){\circle{0.2}}
+ \put(0.0,6.0)%
+ {%
+ $+E$%
+ }%
+
+ \put(7.0,13.5){\circle*{0.1}}
+ \put(7.0,13.5){\line(0,-1){0.5}}
+
+ \vwiderstand{7}{11}
+ \put(7.3,11.5)%
+ {%
+ $R_4$%
+ }%
+
+ \biptrans{6.0}{9.75}{r}{p}{i}
+ \put(7.3,10.0)%
+ {%
+ $T_4$%
+ }%
+
+ \put(7.0,9.75){\line(0,-1){0.5}}
+
+ \diode{7}{9.25}{u}
+ \put(7.3,8.25)%
+ {%
+ $D_1$%
+ }%
+
+ \diode{7}{7.75}{u}
+ \put(7.3,6.75)%
+ {%
+ $D_2$%
+ }%
+
+ \diode{7}{6.25}{u}
+ \put(7.3,5.25)%
+ {%
+ $D_3$%
+ }%
+
+ \put(7.0,4.75){\line(0,-1){2.25}}
+
+ \vwiderstand{7.0}{1.0}
+ \put(7.3,1.5)%
+ {%
+ $R_5$%
+ }%
+
+ \put(7.0,1.0){\line(0,-1){0.5}}
+ \put(7.0,0.5){\circle*{0.1}}
+
+ \put(8.5,13.5){\circle*{0.1}}
+ \put(8.5,13.5){\line(0,-1){3.25}}
+
+ \biptrans{7.5}{8.75}{r}{n}{n}
+ \put(8.8,9.0)%
+ {%
+ $T_5$%
+ }%
+
+ \put(7.0,9.5){\circle*{0.1}}
+ \put(7.0,9.5){\line(1,0){0.5}}
+
+ \vwiderstand{8.5}{7.0}
+ \put(8.8,7.5)%
+ {%
+ $R_6$%
+ }%
+
+ \put(8.5,7.0){\circle*{0.1}}
+ \put(8.5,7.0){\line(1,0){0.9}}
+ \put(9.4,7.0){\circle{0.2}}
+
+ \vwiderstand{8.5}{5.0}
+ \put(8.8,5.5)%
+ {%
+ $R_7$%
+ }%
+
+ \biptrans{7.5}{3.75}{r}{p}{i}
+ \put(8.8,4.0)%
+ {%
+ $T_6$%
+ }%
+
+ \put(7.0,4.5){\circle*{0.1}}
+ \put(7.0,4.5){\line(1,0){0.5}}
+ \put(8.5,3.75){\line(0,-1){3.25}}
+ \put(8.5,0.5){\circle*{0.1}}
+\end{picture}
+\end{figure}
+
+Bei Schaltungen dieser Gr"o"senordnung wird es schon recht
+aufwendig. Elegant w"are es, solche Bibliotheken etwa in das
+\TeX{CAD}--Programm einzubinden, das zusammen mit EM\TeX\ bei
+DANTE erh"altlich ist. Das Erstellen eines solchen Schaltbildes
+lie"se sich damit erheblich vereinfachen, der zun"achst notwendige
+Entwurf auf dem Papier k"onnte entfallen.
+\end{document}
diff --git a/macros/latex209/contrib/editbar/editbar.sty b/macros/latex209/contrib/editbar/editbar.sty
new file mode 100644
index 0000000000..bb4d487397
--- /dev/null
+++ b/macros/latex209/contrib/editbar/editbar.sty
@@ -0,0 +1,545 @@
+\iffalse%
+
+ LaTeX Style: editbar.sty 1.3
+
+ Written by: Michael R. Van Geest
+ Unisys Corp.
+ M.S. 4522
+ 2276 Highcrest Road
+ Roseville, MN 55113
+
+ Internet: mrv@unirsvl.rsvl.unisys.com
+
+ Date: January 7, 1994
+
+ TeX Drivers Supported: DVIPS
+
+
+ General Information:
+
+ editbar.sty is a LaTeX style to be used to print edit bars
+ (change bars) with PostScript as the final output.
+
+ DVIPS is the only driver currently supported, but others could
+ be used.
+
+ Generation of edit bars on one page and/or spanning
+ multiple pages.
+
+ The output routine of LaTeX is modified to include the edit
+ bar commands to span multiple pages.
+
+
+ Macro usage:
+
+ ebarsetup - Place before \begin{document}
+
+ ebarcleanup - Place before \end{document}
+ It is adviseable to put a \clearpage before
+ \ebarcleanup.
+
+ genebaron - Start generating edit bars.
+
+ genebaroff - End generating edit bars.
+
+
+ Counters that can be modified are:
+
+ \ebaroddside - Distance in points from the left side of the
+ paper to where the edit bar on the odd side
+ of the paper is placed.
+
+ Currently set to 508.
+
+ \ebarevenside - Distance in points from the left side of the
+ paper to where the edit bar on the even side
+ of the paper is placed.
+
+ Currently set to -30.
+
+ \ebarbarheight - Height of edit bar in points on current line.
+ Currently set to 12 (1 pica).
+
+ \ebarbarwidth - Edit bar width in points, currently set to 2.
+
+
+ Auxilary files that are created are:
+
+ \jobname.ebo - Edit bar out file.
+
+ \count0 is written to this file in the output
+ routine by the \write command.
+
+ \jobname.ebi - Edit bar in file. The contents of \jobname.ebo
+ are copied to this file after 1 pass of LaTeX.
+ This file is used as input to the genebaron
+ and genebaroff macros to find out which page(s)
+ to place the edit bars.
+
+
+ Restrictions:
+
+ - Does not span multiple chapters. The edit bar must
+ end at the chapter. This is because count0 is used
+ as the edit bar counter to place on odd or even sides
+ if two sided styles are used. If one sided styles
+ are used, the odd side edit bar code is used.
+
+ - Nested edit bars are not supported.
+
+ Examples:
+
+ \genebaron Text \genebaron text \genebaroff
+
+ \genebaron Text \genebaroff text \genebaroff
+
+ - Does support paper resolution. The DVIPS
+ PostScript def Resolution is used.
+
+ - Edit bars in Longtable.sty should work.
+
+
+ Sample Usage:
+
+ \documentstyle[editbar]{book}
+ %
+ \ebarsetup{}%
+ %
+ \begin{document}
+ %
+ Paragraph on page 1
+ %
+ \newpage
+ This paragraph \genebaron{}has an edit bar on it.
+ %
+ \newpage
+ %
+ This is a paragraph that has an edit bar around it.
+ %
+ This \genebaroff{}is a paragraph with end edit bar that ends it.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ %
+ \clearpage\ebarcleanup{}%
+ \end{document}
+
+\fi%
+
+\def\fileversion{v1.3}
+\def\filedate{07JAN94}
+\wlog{Style-Option: `editbar' \fileversion \space\space <\filedate> (M.R.V.G.)}
+
+% Dimen Register - truepagetotal
+%
+% This is set in the sample output routine. Must be used for edit bars
+% to work correctly.
+%
+\newdimen\truepagetotal
+%
+%
+% Read Register - ebarin
+% Edit Bar read in file
+%
+\newread\ebarin
+
+% Write Register - ebarout
+% Edit Bar write out file
+%
+\newwrite\ebarout
+
+% Count Register - ebarnest
+%
+\newcount\ebarnest
+\ebarnest=0
+
+% Count Register - ebaronpagedelay
+%
+\newcount\ebaronpagedelay
+\ebaronpagedelay=0
+
+% Count Register - ebaroddside
+%
+\newcount\ebaroddside
+\ebaroddside=508
+
+% Count Register - ebarevenside
+%
+\newcount\ebarevenside
+\ebarevenside=-30
+
+% Count Register - ebarbarwidth
+%
+\newcount\ebarbarwidth
+\ebarbarwidth=2
+
+% Count Register - ebarbarheight
+%
+\newcount\ebarbarheight
+\ebarbarheight=12
+
+% Count Register - ebarpagesspan
+%
+\newcount\ebarpagesspan
+\ebarpagesspan=0
+
+% Count Register - ebaroncapture
+%
+\newcount\ebaroncapture
+\ebaroncapture=0
+
+% Count Register - ebaroncapturesave
+%
+\newcount\ebaroncapturesave
+\ebaroncapturesave=0
+
+% Count Register - ebaroffcapture
+%
+\newcount\ebaroffcapture
+\ebaroffcapture=0
+
+% Count Register - ebarsubtract
+%
+\newcount\ebarsubtract
+\ebarsubtract=0
+
+% If - ifebarfileopen
+% Checks to see if the ebarfile is open
+%
+\newif\ifebarfileopen
+%
+% ebarsetup
+%
+% Sets up the input and output ebar files
+%
+% Place at the top of the document
+%
+\globaldefs1%
+\def\ebarsetup{%
+\immediate\openin\ebarin=\jobname.ebi %
+\ifeof\ebarin%
+ \typeout{No file \jobname.ebi}%
+ \global\ebarfileopenfalse%
+\else%
+ \global\ebarfileopentrue%
+\fi%
+\immediate\openout\ebarout=\jobname.ebo %
+}%
+%
+% ebarcleanup
+%
+% Closes the ebar output file, then opens the ebar output file for read,
+% then copies the ebar output file to the ebar input file for the next
+% pass to read the ebar input file
+%
+% Place at the end of the document
+%
+\def\ebarcleanup{%
+\immediate\closein\ebarin%
+\immediate\closeout\ebarout%
+%%
+\immediate\openin\ebarin=\jobname.ebo %
+\immediate\openout\ebarout=\jobname.ebi %
+%%
+\ebarfileopentrue%
+%%
+\loop%
+ \immediate\read\ebarin to \ebarinin%
+ \ifeof\ebarin%
+ \ebarfileopenfalse%
+ \fi%
+ \ifebarfileopen%
+ \immediate\write\ebarout{\ebarinin}%
+\repeat%
+%%
+\closein\ebarin%
+\closeout\ebarout%
+}%
+%
+% ebargeton
+%
+% Gets the next ebar reference from the ebar input file
+%
+% Specifically, gets the relative page number output from the prior
+% pass of genebar macro
+%
+\def\ebargeton{%
+\immediate%
+\ifeof\ebarin%
+%
+\else%
+ \immediate\read\ebarin to \ebarinon%
+ \global\ebaroncapture=\ebarinon%
+ \global\ebaroncapturesave=\ebarinon%
+\fi%
+}
+%
+% ebargetoff
+%
+% Gets the next ebar reference from the ebar input file
+%
+% Specifically, gets the relative page number output from the prior
+% pass of genebar macro
+%
+\def\ebargetoff{%
+\immediate%
+\ifeof\ebarin%
+%
+\else%
+ \immediate\read\ebarin to \ebarinoff%
+ \global\ebaroffcapture=\ebarinoff%
+\fi%
+}
+%
+% endebarthispage
+%
+% Check edit bar status to end an edit bar on this page
+%
+\def\endebarthispage{%
+ \ifnum\ebarpagesspan=0%
+ \else%
+ \ifnum\ebaroncapturesave>\count0%
+ \global\ebaronpagedelay=1%
+ \else%
+ \genebaroffpage{}%
+ \fi%
+ \fi%
+}%
+%
+% beginebarnextpage
+%
+% Check edit bar status to begin an edit bar on next page
+%
+\def\beginebarnextpage{%
+ \ifnum\ebarpagesspan>0%
+ \ifnum\ebaronpagedelay=1%
+ \global\ebaronpagedelay=0%
+ \else
+ \genebaronpage{}%
+ \global\advance\ebarpagesspan by -1%
+ \fi%
+ \fi%
+}%
+%
+% ebarspecialstart, ebarspecialodd, ebarspecialeven, and ebarspecialend
+%
+% Start, Odd and even pages, and end special macros
+%
+\newtoks\ebarendline
+\ebarendline={ }%
+%
+%
+\def\ebarspecialstart{%
+ \special{ps:%
+ /SPECIALSTART pop % FOR DEBUGGING PostScript
+ Resolution 72 div /Point exch def % Get points conversion
+ currentpoint exch pop % Get current Y point
+ Point \the\ebarbarheight\the\ebarendline %
+ mul sub /Y1point exch def % Get current Y point
+ % minus ebar height
+ }%
+}%
+%
+\def\ebarspecialodd{%
+ \special{ps:%
+ /SPECIALODD pop % FOR DEBUGGING PostScript
+ Point \the\ebaroddside\the\ebarendline %
+ mul /Xpoint exch def % Get X point
+ }%
+}%
+%
+\def\ebarspecialeven{%
+ \special{ps:%
+ /SPECIALEVEN pop % FOR DEBUGGING PostScript
+ Point \the\ebarevenside\the\ebarendline %
+ mul /Xpoint exch def % Get X point
+ }%
+}%
+%
+\def\ebarspecialend{%
+ \special{ps:%
+ /SPECIALEND pop % FOR DEBUGGING PostScript
+ gsave %
+ Point \the\ebarbarwidth\the\ebarendline %
+ mul setlinewidth % Edit Bar width
+ currentpoint exch pop \the\ebarsubtract\the\ebarendline %
+ % Get current Y point
+ Point mul sub /Y2point exch def % minus adjustment
+ Xpoint Y1point moveto %
+ Xpoint Y2point lineto stroke %
+ grestore}%
+}%
+%
+% genebaron
+%
+% Writes the relative page number to the ebar output file,
+% reads from the ebar input file if open and generates the ebar on
+%
+% Place where the ebar will occur
+%
+\def\genebaron{%
+ \write\ebarout{\the\count0}%
+\ifeof\ebarin%
+\else%
+ \global\advance\ebarnest by 1 %
+%
+ \ifnum\ebarnest=1 %
+ \else%
+ \@latexerr{Edit bar are nested, bad results can occur.}%
+ {Please use genebaroff before using genebaron}%
+ \fi%
+%
+ \ebargeton% % Get ebar on page
+ \ebargetoff% % Get ebar off page
+%
+ \global\ebarpagesspan=\ebaroffcapture% % Get page span
+ \global\advance\ebarpagesspan by -\ebaroncapture%
+%
+ \special{ps:%
+ /GENEBARON pop % FOR DEBUGGING PostScript
+ }%
+%
+ \ebarspecialstart%
+%
+ \if@twoside%
+ \ifodd\ebaroncapture%
+ \ebarspecialodd%
+ \else%
+ \ebarspecialeven%
+ \fi%
+ \else%
+ \ebarspecialodd%
+ \fi%
+\fi%
+}%
+%
+% genebaronpage
+%
+% Fake ebar on for page begin
+%
+%
+\def\genebaronpage{%
+\ifeof\ebarin%
+\else%
+ \special{ps:%
+ /GENEBARONPAGE pop % FOR DEBUGGING PostScript
+ }%
+ \ebarspecialstart%
+%
+ \if@twoside%
+ \ifodd\count0%
+ \ebarspecialodd%
+ \else%
+ \ebarspecialeven%
+ \fi%
+ \else%
+ \ebarspecialodd%
+ \fi%
+\fi%
+}%
+%
+% genebaroff
+%
+% Writes the relative page number to the ebar output file, and
+% generates special code for end
+%
+% Place where the ebar will occur
+%
+\def\genebaroff{\write\ebarout{\the\count0}%
+\ifeof\ebarin%
+\else%
+ \global\ebarsubtract=0 %
+ \global\advance\ebarnest by -1 %
+%
+ \ifnum\ebarnest=0 %
+ \else%
+ \@latexerr{Edit bar are nested, bad results can occur.}%
+ {Please use genebaron before using genebaroff}%
+ \fi%
+%
+ \special{ps:%
+ /GENEBAROFF pop % FOR DEBUGGING PostScript
+ }%
+ \ebarspecialend%
+\fi%
+}%
+%
+% genebaroffpage
+%
+% Fake ebar off for page end
+%
+\def\genebaroffpage{%
+\ifeof\ebarin%
+\else%
+ \global\ebarsubtract=\pagegoal % Get pagegoal
+ \ifdim\truepagetotal < \pagegoal %
+ \global\advance\ebarsubtract by -\truepagetotal % subtract truepagetotal
+ \else
+ \global\advance\ebarsubtract by -\pagegoal % subtract pagegoal
+ \fi
+%
+ \global\divide\ebarsubtract by 65536 % Divide by scaled points
+%
+ \special{ps:%
+ /GENEBAROFFPAGE pop % FOR DEBUGGING PostScript
+ }%
+ \ebarspecialend%
+\fi%
+}%
+%
+%
+\globaldefs0%
+%
+% Sample shipout routine changes
+%
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+%
+ {\setbox0=\vbox{\unvcopy\@outputbox} % MRV 07JAN94
+ \global\truepagetotal=\ht0} % Get true page total
+%
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth
+ {\let\label\@gobble \let\index\@gobble
+ \@thehead}} %% 22 Feb 87
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+%
+ \box\@outputbox
+%
+ \endebarthispage%
+%
+ \baselineskip\footskip
+ \hbox to\textwidth{\let\label\@gobble
+ \let\index\@gobble %% 22 Feb 87
+ \@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark%
+%
+ \beginebarnextpage{}}
+
+
+
diff --git a/macros/latex209/contrib/envelope/env-sample.tex b/macros/latex209/contrib/envelope/env-sample.tex
new file mode 100644
index 0000000000..d32808fe7e
--- /dev/null
+++ b/macros/latex209/contrib/envelope/env-sample.tex
@@ -0,0 +1,33 @@
+% This is used to print one or more envelopes on the laser printer.
+
+%\begin{envelope}
+%Prof. Blah\\
+%Department of Mathematics\\
+%City, State Zip
+%\ZipBar{Zip-Zip}
+%\end{envelope}
+
+\documentstyle[env]{article}
+\nofiles
+
+\textwidth9.5in
+\textheight4.125in
+\pagestyle{empty}
+
+\begin{document}
+
+\from{Dimitri Vulis}
+
+\begin{envelope}
+\envaddress{
+Dimitri Vulis\\
+Department of Mathematics/Box 330\\
+Graduate School \& University Center\\
+City University of New York\\
+33 West 42 Street\\
+New York, New York 10036
+}
+\ZipBar{10036-8099}
+\end{envelope}
+\end{document}
+
diff --git a/macros/latex209/contrib/envelope/envelope.sty b/macros/latex209/contrib/envelope/envelope.sty
new file mode 100644
index 0000000000..d5dda5df2e
--- /dev/null
+++ b/macros/latex209/contrib/envelope/envelope.sty
@@ -0,0 +1,44 @@
+% Envelopes
+% Latex option file to print addresses onto a business envelope fed through the
+% manual paper feed on an Apple LaserWriter II NT
+% SAMPLE FILE :
+%
+%\documentstyle[12pt,envelope]{article}
+%\begin{document}
+%\from{name\\ address\\ city/state} %define return address
+%\to{name\\ address\\ city/state} %define destination address
+%\envelope %actually create envelope
+%\end{document}
+%
+%Create postscript file with DVIOUT/LANDSCAPE {\it filename}}.
+%
+%Feed envelope into printer through manual feed rack with printing side up and
+%with the left edge of the envelope the edge with the flap.
+%
+% Heather Sherman, March 10, 1989
+\pagestyle{empty}
+\textheight=7.0in
+\textwidth=7.5in
+\topmargin=-1.5in
+\oddsidemargin=0.75in
+
+\def\from#1{\def\@from{#1}}
+\def\to#1{\def\@to{#1}}
+\def\@from{\mbox{}}
+\def\@to{\mbox{}}
+
+\def\envelope{
+ \clearpage
+ \vspace*{2.1in}
+ \parbox[t]{3.5in}{
+ \begin{flushleft}
+ \@from
+ \end{flushleft}
+ }
+ \parbox[t]{3.5in}{
+ \vspace*{1.5in}
+ \begin{flushleft}
+ \@to
+ \end{flushleft}
+ }
+}
diff --git a/macros/latex209/contrib/eqmark/eqmark.pdf b/macros/latex209/contrib/eqmark/eqmark.pdf
new file mode 100644
index 0000000000..c7100342ae
--- /dev/null
+++ b/macros/latex209/contrib/eqmark/eqmark.pdf
Binary files differ
diff --git a/macros/latex209/contrib/eqmark/eqmark.sty b/macros/latex209/contrib/eqmark/eqmark.sty
new file mode 100644
index 0000000000..f5bc064ff7
--- /dev/null
+++ b/macros/latex209/contrib/eqmark/eqmark.sty
@@ -0,0 +1,94 @@
+%%%%%%%%%%%%%%%%%%%%%%%% CUT HERE %%%%%%%%%%%%%%%%%%%%%%
+%
+% This is Eqmark.Sty (Version 2.0 93/12/10)
+%
+% Dirk Nitschke
+% Semperstr. 41
+%
+% D-22303 Hamburg
+%
+% e-mail: nietschke@math.uni-hamburg.de
+%
+
+%
+% Die neuen Befehle
+% \rmark#1
+% \lmark#1
+% ermoeglichen es, in einer Formel mit Nummerierung, also
+% z.\,B. in einer \equation oder einem \eqnarray, anstelle
+% der Formelnummer einen beliebigen Text auszugeben, der im
+% Mathematik-Modus (im Textstyle) ausgegeben wird.
+%
+% Mit \rmark{FOO} erhaelt man den Text FOO am rechten Rand,
+% mit \lmark{FOO} erhaelt man den Text FOO am linken Rand.
+%
+% Die automatische Formelnummerierung wird hierdurch nicht gestoert.
+% Jedoch lassen sich die mit \rmark oder \lmark gesetzten Texte
+% nicht referieren, wie dies sonst bei den normalen Formelnummern
+% moeglich ist.
+%
+% Will man die Stiloption leqno verwenden, so MUSS leqno VOR
+% diesem Style angegeben werden! Macht man dies nicht, so sind
+% zwar die Befehle \rmark und \lmark verwendbar, jedoch bekommt
+% man nicht das, was man bestellt hat, denn alle Formelnummern
+% landen auf der linken Seite, die gewuenschten Markierungen bleiben
+% jedoch verborgen. Benutzt man in einer Formelzeile die beiden Befehle
+% \lmark UND \rmark , so liefert der Output die gewuenschten Texte
+% links UND rechts.
+%
+% Dieser Style funktioniert auch in Verbindung mit der Option fleqn .
+% Jedoch beachte man, dass die Verwendung von \lmark leicht zu
+% Ueberschneidungen von Formel und dem am linken Rand erscheinenden
+% Text kommen kann. Dies kann natuerlich auch ohne die Option fleqn
+% geschehen.
+%
+% Die Verwendung von \lmark und \rmark in Verbindung mit \nonumber
+% ist zu vermeiden. Sie fuehrt dazu, dass in der naechsten Zeile, die
+% mit einer Formelnummer versehen werden soll, der Text links bzw.\
+% rechts erscheint, den man eigentlich in der vorherigen Zeile anstelle
+% einer Formelnummer plazieren wollte. Hat man in dieser naechsten Zeile
+% eine neu Markierung durch \lmark oder \rmark definiert, so erhaelt
+% man diese und die Markierung der vorherigen Zeile ist verloren gegangen.
+%
+\@ifundefined{rmark}{}{\endinput} % Falls schon bekannt abbrechen
+\def\fileversion{2.0}
+\def\filedate{10 Dec 1993}
+\typeout{Style Option `eqmark' Version\space\fileversion\space<\filedate> (DN)}
+
+\let\@qnnum\@eqnnum % Alte Definition retten (so weiss man, ob Nummern
+ % standardmaessig links oder rechts sind)
+\newif\ifstdeqn % Neues if: Will man Standardnummerierung?
+\stdeqntrue % Zunaechst JA
+\newif\ifrtext % Neues if: Gibt es Text fuer rechts?
+\newif\ifltext % Neues if: Gibt es Text fuer links?
+\def\rmark#1{\global\rtexttrue% Ja, Text fuer rechts
+ \global\stdeqnfalse% Nein, keine Standardnummer
+ \global\def\rtext{#1}% und der steht jetzt in \rtext
+}
+\def\lmark#1{\global\ltexttrue% Ja, Text fuer links
+ \global\stdeqnfalse% Nein, keine Standardnummer
+ \global\def\ltext{#1}% und der steht jetzt in \ltext
+}
+\def\@eqnnum{%
+ \ifstdeqn% %wenn Standardnummerierung (meistens)
+ \@qnnum% %dann geretteter Befehl
+ \else% %wenn nicht:
+ \hbox to .01\p@{}% %zunaechst die kleine Box
+ \addtocounter{equation}{-1} %damit Zaehlung weiter richtig
+ \ifrtext% %wenn Text fuer rechts:
+ \llap{$\rtext$}% %Ausgabe wie Standardnummer rechts
+ \global\rtextfalse% %nein, kein weiterer Text rechts
+ \global\stdeqntrue% %wieder Standard
+ \fi% %end of \ifrtext
+ \ifltext% %wenn Text fuer links:
+ \rlap{\hskip-\displaywidth% %Ausgabe wie Standardnummer links
+ $\ltext$}% %(vgl.\ leqno.sty)
+ \global\ltextfalse% %nein, kein weiterer Text links
+ \global\stdeqntrue% %wieder Standard
+ \fi% %end of \ifltext
+ \fi% %end of \ifstdeqn
+}
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% end of eqmark.sty
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/eqmark/eqmark.tex b/macros/latex209/contrib/eqmark/eqmark.tex
new file mode 100644
index 0000000000..c3ebbda0ee
--- /dev/null
+++ b/macros/latex209/contrib/eqmark/eqmark.tex
@@ -0,0 +1,138 @@
+\documentstyle[12pt,german,eqmark]{article}
+
+\title{Markieren von Formeln}
+\author{Dirk Nitschke}
+\date{14.~Dezember 1993}
+
+\begin{document}
+\maketitle
+
+Der Leserbrief von Herrn Franz Strobl in der Ausgabe
+2/1993 von "`Die \TeX{}nische Kom"odie"' gab den
+Ansto"s zu diesem Artikel. Herr Strobl fragte, wie man
+Formeln mit Markierungen wie $(\ast)$ oder $\Box$
+versehen kann. Zun"achst soll dieses Problem f"ur
+abgesetzte Formeln behandelt werden. Anschlie"send
+wende ich mich der \verb+eqnarray+-""Umgebung zu.
+Dabei wird der \verb+eqmark+-""Style beschrieben, der
+zwei Befehle zum Anbringen von Markierungen im
+\verb+eqnarray+ zur Verf"ugung stellt.
+
+In \LaTeX{} werden abgesetzte Formeln ohne Nummerierung
+von \verb+\[+ und \verb+\]+ oder --- "aquivalent hierzu
+--- \verb+\begin{displaymath}+ und
+\verb+\end{displaymath}+ eingeschlossen. Man kann aber
+auch den \TeX-""Originalbefehl \verb+$$+ verwenden.
+Dies hat zum Vorteil, da"s die beiden \TeX-""Befehle
+\verb+\eqno+ und \verb+\leqno+ benutzt werden d"urfen.
+Diese Befehle stehen f"ur {\em equation number\/} sowie
+{\em left equation number\/} und erzeugen in einer
+abgesetzten Formel am rechten bzw.{} linken Rand eine
+beliebige Markierung. Der entsprechende
+Markierungstext wird dabei als Argument (ohne
+einschlie"sende Klammern \verb+{+ und \verb+}+)
+"ubergeben. Das erste Dollarzeichen des die abgesetzte
+Formel beendenden \verb+$$+ kennzeichnet auch das Ende
+des Arguments. (Siehe hierzu auch~[1], pp.~186--187,
+189--191, 193, 293.) Daher ist die Verwendung dieser
+beiden Befehle nur in solchen abgesetzten Formeln
+m"oglich, die von \verb+$$+ beendet werden. Der
+Quellcode
+
+\begin{verbatim}
+$$
+ a = b + c \eqno (\ast)
+$$
+\end{verbatim}
+
+hat als Ergebnis
+
+$$
+ a = b + c \eqno (\ast)
+$$
+
+und \verb+\leqno+ anstelle von \verb+\eqno+ h"atte
+$(\ast)$ am linken Rand ergeben. Als Argument von
+\verb+\eqno+ und \verb+\leqno+ ist alles erlaubt, was
+auch im Mathematikmodus gestattet ist. Man beachte,
+da"s die Marke im \verb+textstyle+ gesetzt wird. Dies
+f"uhrt bei Eingabe von \verb+(\ast\ast\ast)+ zu
+$(\ast\ast\ast)$ und nicht zu dem wohl gew"unschten
+$(\ast{\ast}\ast)$. Ebenso liefert \verb+\sum_i+ nicht
+$\displaystyle\sum_i$ sondern $\sum_i$.
+
+M"ochte man "ahnliches in einem \verb+eqnarray+
+erreichen, so mu"s man zun"achst wissen, wie \LaTeX{}
+die automatische Formelnummerierung vornimmt. Wurde
+die Nummerierung nicht durch \verb+\nonumber+
+abgeschaltet, so wird der Befehl \verb+\llap{\@eqnnum}+
+ausgef"uhrt, der die Markierung setzt. Dies "andert
+sich auch nicht bei der Option \verb+leqno+. Hier wird
+lediglich \verb+\@eqnnum+ so ver"andert, da"s die
+Nummerierung auf der linken Seite erscheint. Der
+\verb+eqmark+-""Stil definiert ebenfalls den Befehl
+\verb+\@eqnnum+ um und stellt zus"atzlich die beiden
+Befehle \verb+\lmark+ und \verb+\rmark+ zur Verf"ugung,
+die eine Markierung am linken bzw.{} rechten Rand
+erzeugen und die standardm"a"sige Formelnummerierung
+unterdr"ucken. Hat man mit \verb+\lmark+ und/oder
+\verb+\rmark+ eine Markierung der Formel definiert, so
+wird diese gesetzt, ansonsten die normale Nummerierung
+(insbesondere keine Nummerierung bei \verb+\nonumber+).
+\verb+\lmark+ und \verb+\rmark+ haben als Argument die
+gew"unschte Marke, die dann --- genau wie bei
+\verb+\eqno+ oder \verb+\leqno+ --- im \verb+textstyle+
+des Mathematikmodus gesetzt wird. Als Beispiel
+betrachte man den folgenden Quellcode:
+
+\begin{verbatim}
+\begin{eqnarray}
+ a &=& b + c \\
+ a &=& b + c \nonumber \\
+ a &=& b + c \lmark{(\ast{\ast}\ast)} \\
+ a &=& b + c \rmark{\Box} \\
+ a &=& b + c \lmark{\bf Hallo}\rmark{\rm Dirk} \\
+ a &=& b + c
+\end{eqnarray}
+\end{verbatim}
+
+Als Ergebnis erh"alt man:
+
+\begin{eqnarray}
+ a &=& b + c \\
+ a &=& b + c \nonumber \\
+ a &=& b + c \lmark{(\ast{\ast}\ast)} \\
+ a &=& b + c \rmark{\Box} \\
+ a &=& b + c \lmark{\bf Hallo}\rmark{\rm Dirk} \\
+ a &=& b + c
+\end{eqnarray}
+
+Als Argument von \verb+\lmark+ und \verb+\rmark+ ist
+alles erlaubt, was im Mathematikmodus m"oglich ist.
+Die Verwendung von \verb+\lmark+ oder \verb+\lmark+ in
+Verbindung mit \verb+\nonumber+ ist zwar zul"assig,
+f"uhrt aber nicht zu dem gew"unschten Ergebnis. Man
+erh"alt n"amlich in dieser Formelzeile {\em keine\/}
+Markierung (und keine Nummerierung). In der n"achsten
+Formelzeile (das kann auch die erste Zeile eines neuen
+\verb+eqnarray+ sein) bekommt man dann die aktuell
+gesetzte Markierung.
+
+Man kann diesen Style mit den Optionen \verb+fleqn+
+oder auch \verb+leqno+ verwenden, jedoch darf
+\verb+eqmark+ erst {\em nach\/} \verb+leqno+ angegeben
+werden.
+
+Der \verb+eqmark.sty+ kann bei DANTE, Deutschsprachige
+Anwendervereinigung \TeX{} e.V., oder mir bezogen
+werden.
+
+\begin{thebibliography}{99}
+\bibitem{1}{\sc D.E. Knuth,}
+ {\em The \TeX book.}
+ Seventeenth printing,
+ Addison Wesley,
+ Januar 1990.
+\end{thebibliography}
+
+\end{document}
diff --git a/macros/latex209/contrib/eslides/eslides-example.tex b/macros/latex209/contrib/eslides/eslides-example.tex
new file mode 100644
index 0000000000..78f31f85f9
--- /dev/null
+++ b/macros/latex209/contrib/eslides/eslides-example.tex
@@ -0,0 +1,82 @@
+% Save file as: ESLIDES-EXAMPLE.TEX Source: FILESERV@SHSU.BITNET
+%----------------------(begin of file example.tex)-----------------------------
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Text of the two example slides for the article: %
+% %
+% An Easy Way Making Slides With LaTeX %
+% %
+% by %
+% %
+% Georg Denk %
+% Mathematisches Institut %
+% Technische Universitaet Muenchen %
+% Arcisstr. 21 %
+% D-8000 Muenchen 2 %
+% West-Germany %
+% %
+% E-mail: T1111AA@DM0LRZ01 at Bitnet %
+% %
+% %
+% Please do NOT produce the empty titlepage! %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentstyle[titlepage,eslides]{article}
+% titlepage used, because first page
+% should have a running head
+
+\magnification{1728}
+\renewcommand{\conference}{TUGboat 1990}
+
+\begin{document}
+\pagestyle{myslide}
+\markright{An Easy Way Making Slides With
+ \LaTeX}
+
+\begin{titlepage}
+\mbox{}
+\end{titlepage}
+% see p. 162 of Lamport's LaTeX book,
+% the first page should have a
+% running head
+
+
+\begin{slide}
+ \begin{center}
+ \bf
+ A Short-Cut to Your Slides:
+ \end{center}
+ \begin{itemize}
+ \item take your finished
+ {\tt article} file
+ \item add the style option
+ {\tt eslides}
+ \item initialize
+ \verb#\magnification#
+ and
+ \verb#\conference#
+ \item put some
+ \verb#\begin{slide}#s
+ and
+ \verb#\end{slide}#s
+ around the parts you
+ want to present
+ \item comment out the rest
+ \item run \LaTeX
+ \end{itemize}
+\end{slide}
+\begin{remark}
+ This is a note to myself,
+ perhaps reminding me of
+ what I wanted to say here,
+ e.~g.\ that this note is
+ stolen from Lamport's
+ \LaTeX\ book.
+
+\end{remark}
+\end{document}
+
+%------------------------(end of file)----------------------------------------
diff --git a/macros/latex209/contrib/eslides/eslides.pdf b/macros/latex209/contrib/eslides/eslides.pdf
new file mode 100644
index 0000000000..3b4f24becf
--- /dev/null
+++ b/macros/latex209/contrib/eslides/eslides.pdf
Binary files differ
diff --git a/macros/latex209/contrib/eslides/eslides.sty b/macros/latex209/contrib/eslides/eslides.sty
new file mode 100644
index 0000000000..eaeaa22cf5
--- /dev/null
+++ b/macros/latex209/contrib/eslides/eslides.sty
@@ -0,0 +1,132 @@
+% Save file as: ESLIDES.STY Source: FILESERV@SHSU.BITNET
+%----------------------(begin of file eslides.sty)-----------------------------
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% An Easy Way Making Slides With LaTeX %
+% (TUGboat, vol. 11, No. 2 (1990), pp. 280-283) %
+% by Georg Denk, Mathematisches Institut, TU Muenchen %
+% %
+% This small style file makes it easy to produce slides for %
+% the presentation of an {article} document: %
+% %
+% * adjust the \logo definition for your purpose (see below) %
+% * add the style option eslides %
+% * initialize \magnification (e.g. \magnification{1440}) %
+% and \conference (e.g. \renewcommand{\conference}{\LaTeX course})
+% * put some \begin{slide} and \end{slide} around the parts you %
+% want to present as seperate slides %
+% * comment out the rest %
+% * run LaTeX %
+% * print the DVI file with the option "magnify the output" %
+% (with the same magnification as above) %
+% %
+% NOTE: On some output devices it may be necessary to change the %
+% order of the \devide and \multiply sequences with the %
+% \addtolength{..}{-1in} block (e.g. for Textures on the %
+% Mac). This is due to a non-standard offset (upper-left %
+% corner of the page for printing and 1 inch below and right %
+% for LaTeX. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\typeout{***** eslides.sty created by G. Denk <5 Feb 1990>}
+%
+\setlength{\unitlength}{1.cm}
+\setlength{\oddsidemargin}{1cm}
+\setlength{\evensidemargin}{1cm}
+\setlength{\topmargin}{2.0cm}
+\setlength{\headheight}{20pt}
+\setlength{\headsep}{10pt}
+\setlength{\footskip}{10pt}
+\setlength{\footheight}{1cm}
+\setlength{\textwidth}{19cm} % DIN A 4: width of the sheet - 2cm
+\setlength{\textheight}{20cm} % DIN A 4: \textwidth + 1cm
+\setlength{\parskip}{10pt}
+\setlength{\parindent}{0pt}
+%
+\newcommand{\magnification}[1]{
+ \gdef\mag{#1} % \gdef, because it may be used for
+ % a \magnification-dependent \def
+ % of \logo
+%
+ \typeout{}
+ \typeout{***** Don't forget: magnification = \mag}
+ \typeout{}
+%
+ \divide\unitlength by \mag
+ \multiply\unitlength by 1000
+%
+ \divide\textwidth by \mag
+ \multiply\textwidth by 1000
+%
+ \divide\textheight by \mag
+ \multiply\textheight by 1000
+%
+ \divide\topmargin by \mag
+ \multiply\topmargin by 1000
+%
+ \divide\evensidemargin by \mag % only for magnification
+ \multiply\evensidemargin by 1000 % by the output device
+%
+ \divide\oddsidemargin by \mag % only for magnification
+ \multiply\oddsidemargin by 1000 % by the output device
+%
+% \newdimen\hilfsdim % only for magnification
+% \hilfsdim = 10.5cm % 1/2 of sheet width % by a photocopying
+% \advance\hilfsdim by -\oddsidemargin % machine
+% \divide\hilfsdim by \magnification % only for magnification
+% \multiply\hilfsdim by 1000 % by a photocopying
+% \oddsidemargin = 10.5cm % machine
+% \advance\oddsidemargin by -\hilfsdim % only for magnification
+% % % by a photocopying
+% \hilfsdim = 10.5cm % machine
+% \advance\hilfsdim by -\evensidemargin % only for magnification
+% \divide\hilfsdim by \magnification % by a photocopying
+% \multiply\hilfsdim by 1000 % machine
+% \evensidemargin = 10.5cm % only for magnification
+% \advance\evensidemargin by -\hilfsdim % by a photocopying
+% % machine
+} % end \newcommand
+%
+\addtolength{\oddsidemargin}{-1in} % used only, if voffset = 1in
+\addtolength{\evensidemargin}{-1in} % hoffset = 1in
+\addtolength{\topmargin}{-1in} % skip, if voffset = 0, hoffset = 0
+%
+\newenvironment{slide}%
+ {\vspace*{\fill}}%
+ {\vspace*{\fill}\clearpage}
+%
+\newenvironment{remark}%
+ {\def\thepage{\rm Remark to \arabic{page}}%
+ \addtocounter{page}{-1}%
+ \vspace*{\fill}}%
+ {\vspace*{\fill}\clearpage%
+ \def\thepage{\arabic{page}}}
+%
+\newcommand{\conference}{ }
+%
+\def\logo{{\setlength{\unitlength}{1.00mm}
+ \divide\unitlength by \mag
+ \multiply\unitlength by 1000
+ % here you should put something like a \picture-d logo
+ % of your university or company or anything you like
+}} % end def \logo
+%
+\def\ps@myslide{\let\@mkboth\markboth
+ \def\@oddfoot{\parbox{\textwidth}%
+ {\rule{\textwidth}{0.4pt}\\[-3pt]
+ \mbox{}\logo\hfill\scriptsize\conference\hfill\scriptsize\thepage}}%
+ \def\@oddhead{\parbox{\textwidth}%
+ {\hbox{}\hfill\small\rightmark\hfill\hbox{}\\[-5pt]
+ \rule{\textwidth}{0.4pt}}}%
+ \def\@evenfoot{\parbox{\textwidth}%
+ {\rule{\textwidth}{0.4pt}\\[-3pt]
+ \mbox{}\logo\hfill\scriptsize\conference\hfill\scriptsize\thepage}}%
+ \def\@evenhead{\parbox{\textwidth}%
+ {\hbox{}\hfill\small\rightmark\hfill\hbox{}\\[-5pt]
+ \rule{\textwidth}{0.4pt}}}%
+ \def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+%------------------------(end of file)----------------------------------------
+
diff --git a/macros/latex209/contrib/eslides/eslides.tex b/macros/latex209/contrib/eslides/eslides.tex
new file mode 100644
index 0000000000..e3dbe557f9
--- /dev/null
+++ b/macros/latex209/contrib/eslides/eslides.tex
@@ -0,0 +1,229 @@
+% Save file as: ESLIDES.TEX Source: FILESERV@SHSU.BITNET
+%----------------------(begin of file "article for TUGboat")-------------------
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Text of the following article: %
+% %
+% An Easy Way Making Slides With LaTeX %
+% %
+% by %
+% %
+% Georg Denk %
+% Mathematisches Institut %
+% Technische Universitaet Muenchen %
+% Arcisstr. 21 %
+% D-8000 Muenchen 2 %
+% West-Germany %
+% %
+% E-mail: T1111AA@DM0LRZ01 at Bitnet %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentstyle[ltugboat]{article}
+
+%\addtolength{\evensidemargin}{1in} % shift voffset and hoffset
+%\addtolength{\oddsidemargin}{1in} % to the upper left corner
+%\addtolength{\topmargin}{1in} % of the sheet if necessary
+
+\title{An Easy Way Making Slides With \LaTeX}
+\author{Georg Denk}
+\address{Mathematisches Institut\\
+ Technische Universit\"at M\"unchen\\
+ Arcisstra\ss e 21\\
+ D-8000 M\"unchen 2\\
+ Bitnet: {\tt T1111AA@DM0LRZ01}}
+
+% last line is a trick as the following line does not work
+%\netaddress[\network{Bitnet}]{T1111AA@DM0LRZ01}
+
+\begin{document}
+\maketitle
+\section*{Introduction}
+
+In the following, a style option for the {\tt article} style will
+be presented which makes it easy to produce slides. It does not
+support an overlay structure as \SliTeX , but it enables the user
+to change an {\tt article} to a sequence of slides by
+simply copying and rearranging. Therefore, it is merely
+an option for the {\tt article} style and not a new style.
+
+The design of this
+option fits into the philosophy of \LaTeX : The logical structure
+of a text is created by the user and not the details how to put
+this into a nice output.
+
+The style option described here supports a standard layout
+which is nevertheless easy to change if necessary. The
+user is able to think in ``normal'' dimensions and font sizes
+as the proper magnification of the slide is done by
+the output device.
+
+
+\section*{Some Commands}
+
+The style option {\tt eslides} --- which stands for {\it e\/}asy {\it slides\/}
+and is used to distinguish this option from \SliTeX\ --- makes several commands
+and environments available to the user. These are described in the following.
+This style option will not conflict with other style options as {\tt 12pt}
+or {\tt german}. The option file is not listed here but is available from
+the author. Send a short request to the e-mail address given below.
+
+\subsection*{The Magnification of the Slide}
+The \verb#\magnification# command gives the global magnification of
+the slide. As the {\tt dvi} file should be magnified by the same factor,
+only the quantities 1000, 1095, 1200, 1440, 1728, 2074 and 2488, resp., should
+be used. A magnification factor of 1440 or 1728 will give good results, e.~g.,
+\begin{quote}
+ \verb#\magnification{1440}#
+\end{quote}
+Leslie Lamport has written that \LaTeX\ should not worry about a
+magnification of a document. As the output device, however,
+magnifies everything on the page but the sheet of paper,
+it is necessary that some of the lengths for the page layout as
+\verb#\textwidth# have to be scaled properly.
+This is done by the \verb#\magnification# command.
+As this procedure is hidden away from the user, he is able
+to think in ``real'' dimensions. The previewing will show
+a correct picture of the slide, only somehow smaller as
+usually.
+
+If the output device is not able to magnify the slide, it can be done
+with a photocopying machine, too. The calculation of the various lengths of
+the page differs as the fixed point of the mapping has changed from the
+offset point to the middle of the upper edge of the sheet. The
+{\tt eslides.sty} file contains the necessary commands
+to handle this case.
+
+\subsection*{Page Layout}
+The {\tt eslides} style makes the pagestyle {\tt myslide} available
+to the user:
+\begin{quote}
+ \verb#\pagestyle{myslide}#
+\end{quote}
+Every slide will have a head line and a foot line, seperated from the
+text by a horizontal rule.\\
+The head consists of a centered running head which is set with the
+\verb#\markright# or \verb#\markboth# command. The foot line
+contains a logo, the ``name of the conference'' and the page number
+of the slide.
+
+The logo can be anything, e.~g., the logo of the university or of
+the company. In the following examples it is the logo of the
+Technical University of Munich which is drawn by some
+\verb#picture# commands. The logo is changed by
+\begin{quote}
+ \verb#\renewcommand{\logo}{#{\it your logo}\verb#}#
+\end{quote}
+As the logo will not change often, the probably best place
+for the definition will be in the {\tt eslides.sty} file.
+Perhaps, the logo can be taken from your special {\tt letter.sty}.
+
+Similarily, the conference is set by
+\begin{quote}
+ \verb#\renewcommand{\conference}{#{\it what\\ever you want}\verb#}#
+\end{quote}
+and can be everything, e.~g., the name of the conference at which the
+slides are presented or a \verb#\today# command.
+
+\subsection*{The {\tt slide} Environment}
+
+The text of a slide is put between \verb#\begin{slide}# and
+\verb#\end{slide}#. It is vertical centered between the
+horizontal rules. The user has to take care that the text
+fits within a single page.
+
+\subsection*{The {\tt remark} Environment}
+
+The {\tt remark} environment enables the user to create
+a remark to a slide. This will produce an extra page
+which contains the note and is numbered with ``Remark to \ldots''.
+The {\tt remark} environment should follow directly the
+slide to which it belongs:
+\begin{quote}
+ \verb#\end{slide}#\\
+ \verb#\begin{remark}#\\
+ \ldots\\
+ \verb#\end{remark}#
+\end{quote}
+
+\section*{Example}
+On the following two pages an example for a slide with
+a remark is given. These pages are produced with a
+magnification of 1728. The input for the example
+is shown in the following.
+The blank titlepage is not presented, it is a trick to
+produce a running head even on the first page of a
+document. Normally, the first slide giving the title
+of the presentation does not need such a running
+head.
+
+\bigskip\bigskip
+% \inputverbatim of example.tex:
+
+\begin{verbatim}
+\documentstyle[titlepage,eslides]{article}
+% titlepage used, because first page
+% should have a running head
+
+\magnification{1728}
+\renewcommand{\conference}{TUGboat 1990}
+
+\begin{document}
+\pagestyle{myslide}
+\markright{An Easy Way Making Slides With
+ \LaTeX}
+
+\begin{titlepage}
+\mbox{}
+\end{titlepage}
+% see p. 162 of Lamport's LaTeX book,
+% the first page should have a
+% running head
+
+
+\begin{slide}
+ \begin{center}
+ \bf
+ A Short-Cut to Your Slides:
+ \end{center}
+ \begin{itemize}
+ \item take your finished
+ {\tt article} file
+ \item add the style option
+ {\tt eslides}
+ \item initialize
+ \verb#\magnification#
+ and
+ \verb#\conference#
+ \item put some
+ \verb#\begin{slide}#s
+ and
+ \verb#\end{slide}#s
+ around the parts you
+ want to present
+ \item comment out the rest
+ \item run \LaTeX
+ \end{itemize}
+\end{slide}
+\begin{remark}
+ This is a note to myself,
+ perhaps reminding me of
+ what I wanted to say here,
+ e.~g.\ that this note is
+ stolen from Lamport's
+ \LaTeX\ book.
+
+\end{remark}
+\end{document}
+\end{verbatim}
+
+\makesignature
+\end{document}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% and here the two example slides --- see file example.tex --- %
+% should follow (properly magnified) %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%------------------------(end of file)-----------------------------------------
diff --git a/macros/latex209/contrib/eslides/logo-denk.tex b/macros/latex209/contrib/eslides/logo-denk.tex
new file mode 100644
index 0000000000..336d035dc7
--- /dev/null
+++ b/macros/latex209/contrib/eslides/logo-denk.tex
@@ -0,0 +1,29 @@
+% Save file as: LOGO-DENK.TEX Source: FILESERV@SHSU.BITNET
+% This is an example picture for the \logo environment of Georg Denk's
+% ESLIDES.STY taken from the original ESLIDES.STY file, but removed by
+% Denk for the distribution. By default, ESLIDES.STY has a null
+% environment defined by \logo.
+ \begin{picture}(40,20)(0,8)
+ \put( 4, 0){\line(1,0){ 4}}
+ \put(12, 0){\line(1,0){12}}
+ \put(28, 0){\line(1,0){ 4}}
+ \put(36, 0){\line(1,0){ 4}}
+ \put(16, 4){\line(1,0){ 4}}
+ \put( 0,14){\line(1,0){ 4}}
+ \put( 8,14){\line(1,0){ 4}}
+ \put(24,14){\line(1,0){ 4}}
+ \put(32,14){\line(1,0){ 4}}
+ \put( 0,18){\line(1,0){16}}
+ \put(20,18){\line(1,0){20}}
+ \put( 0,14){\line(0,1){ 4}}
+ \put( 4, 0){\line(0,1){14}}
+ \put( 8, 0){\line(0,1){14}}
+ \put(12, 0){\line(0,1){14}}
+ \put(16, 4){\line(0,1){14}}
+ \put(20, 4){\line(0,1){14}}
+ \put(24, 0){\line(0,1){14}}
+ \put(28, 0){\line(0,1){14}}
+ \put(32, 0){\line(0,1){14}}
+ \put(36, 0){\line(0,1){14}}
+ \put(40, 0){\line(0,1){18}}
+ \end{picture}
diff --git a/macros/latex209/contrib/exercise/docstrip.cmd b/macros/latex209/contrib/exercise/docstrip.cmd
new file mode 100644
index 0000000000..75632e0b7c
--- /dev/null
+++ b/macros/latex209/contrib/exercise/docstrip.cmd
@@ -0,0 +1,30 @@
+\preamble
+
+Copyright (C) 1991 by Anselm Lingnau. All rights reserved.
+
+IMPORTANT NOTICE:
+
+You are not allowed to change this file. You may however copy this file
+to a different name and then change this copy.
+
+You are allowed to distribute this file under the condition that it is
+distributed together with all files mentioned in the appropriate README
+file. If you received only some of these files from someone, complain!
+
+You are NOT ALLOWED to distribute this file alone. You are NOT ALLOWED
+to take money for the distribution or use of this file (or a changed
+version) except for some nominal charge for copying etc.
+
+Error Reports in case of UNCHANGED versions to
+
+ Anselm Lingnau
+ Buchenweg 1
+ D-6239 Eppstein 2
+ Federal Republic of Germany
+ Internet: <lingnau@informatik.uni-frankfurt.de>
+
+\endpreamble
+
+\processfile{exercise}{doc}{sty}{t}
+
+\endinput
diff --git a/macros/latex209/contrib/exercise/exercise.doc b/macros/latex209/contrib/exercise/exercise.doc
new file mode 100644
index 0000000000..0c2d057893
--- /dev/null
+++ b/macros/latex209/contrib/exercise/exercise.doc
@@ -0,0 +1,441 @@
+\def\fileversion{v1.0d}
+\def\filedate{92/07/02}
+\def\docdate{92/07/02}
+
+%% \CheckSum{139}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+%\iffalse % this is a METACOMMENT !
+%% Style-option `exercise' to use with LaTeX v2.09
+%% Copyright (C) 1991 by Anselm Lingnau, all rights reserved.
+%
+% Copying of this file is authorized only if either
+% (1) you make absolutely no changes to your copy, including name, or
+% (2) if you do make changes, you name it something other than
+% exercise.doc.
+% This restriction helps ensure that all styles developed here
+% remain identical.
+%
+% Error reports please to: Anselm Lingnau
+% Buchenweg 1
+% D-6239 Eppstein
+% Federal Republic of Germany
+% Email: <lingnau@math.uni-frankfurt.de>
+%
+%
+%\fi
+%
+% \changes{v1.0d}{92/07/02}{New Internet address.}
+% \changes{v1.0c}{91/10/08}{Write version number to transcript file only.}
+% \changes{v1.0b}{91/10/08}{Polished the documentation.}
+%
+% \DoNotIndex{\@addtoreset,\@ifundefined,\@makeother,\@spaces,\@tempa}
+% \DoNotIndex{\@warning,\^,\active,\arabic,\begin,\bf,\catcode}
+% \DoNotIndex{\closeout,\csname,\def,\do,\docdate,\dospecials}
+% \DoNotIndex{\edef,\else,\end,\endcsname,\endinput,\endtrivlist}
+% \DoNotIndex{\errhelp,\errmessage,\expandafter,\fi,\filedate}
+% \DoNotIndex{\fileversion,\ifx,\immediate,\input,\item,\jobname,\let}
+% \DoNotIndex{\medbreak,\newcounter,\newif,\newenvironment,\newwrite}
+% \DoNotIndex{\openout,\par,\refstepcounter,\relax,\renewcommand,\section}
+% \DoNotIndex{\space,\string,\subsection,\the,\trivlist,\typeout,\wlog}
+% \DoNotIndex{\write}
+%
+% \title{A \LaTeX\ Environment for Typesetting Exercises\thanks{%
+% This file has version number \fileversion{} dated \filedate.
+% The documentation was last revised on \docdate.
+% }}
+% \def\rtitlex{A \LaTeX\ Environment for Typesetting Exercises}
+% \thispagestyle{plain}
+%
+% \author{Anselm Lingnau}
+% \address{Buchenweg 1\\
+% D-6239 Eppstein\\
+% Federal Republic of Germany}
+% \netaddress[\network{Internet}]{lingnau@informatik.uni-frankfurt.de}
+%
+% \date{October 8, 1991}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This style option implements a \LaTeX{} environment for
+% typesetting exercises.
+% The {\tt exercise} environment is modelled along the lines of
+% the exercise macros in {\sl The \TeX book},
+% i.\ e.\ the answer can be given right after the exercise.
+% Answers are collected in a file that can be included afterwards.
+% The macros presented here are based on Rainer Sch\"opf's
+% reimplementation of the {\tt verbatim} environment.
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% \TeX\ users everywhere are looking up to Donald Knuth's {\sl \TeX book\/}
+% as a source of inspiration and good ideas.
+% When I began writing a major software manual,
+% I thought that it would be nice to have little exercises
+% that would let the readers practise using the input language and so on.
+% On pages 422--423,
+% {\sl The \TeX book\/} lists some macros for exercises.
+% Their most interesting feature is that the answer can be given
+% immediately after the exercise itself.
+% Thus exercises and answers always conveniently stay together,
+% making it easy to insert, delete or move exercises without having to
+% worry about numbering.
+% The following example was lifted from {\sl The \TeX book\/}:
+%\begin{verbatim}
+% \exercise After you have mastered the material in this book,
+% what will you be: A \TeX pert, or a \TeX nician?
+% \answer A \TeX nician (underpaid); sometimes also called
+% a \TeX acker.
+%\end{verbatim}
+% Obviously, these macros are geared towards \PlainTeX,
+% and while they can be hacked to seemingly work with \LaTeX\ as well,
+% I have experienced some nasty incompatibilities
+% that didn't look straightforward to fix.
+%
+% Luckily, I came across Rainer Sch\"opf's reimplementation
+% of the {\tt verbatim} environment \& Co.,
+% and using this it was very easy to reimplement the exercise macros
+% and make them fit within \LaTeX.
+% The remainder of this document discusses the use and implementation
+% of these macros.
+%
+% {\bf Warning:} This style option assumes
+% that you have Rainer Sch\"opf's {\tt verbatim} macros.
+% It won't work otherwise.
+% You can get these macros from major software servers everywhere
+% or from your local \TeX\ Users Group, e.\ g., DANTE e.\ V. in Germany.
+%
+% \section{The User Interface}
+%
+% To use {\tt exercise.sty}, the style option {\tt exercise}
+% must be included among the document style options.
+% Be sure that you say {\tt verbatim} somewhere in the
+% \verb|\documentstyle| command
+% in order to load Rainer Sch\"opf's {\tt verbatim} stuff.
+% Thus,
+%\begin{verbatim}
+% \documentstyle[foo,verbatim,bar,exercise,baz]{article}
+%\end{verbatim}
+%
+% \DescribeEnv{exercise}
+% The {\tt exercise} environment is the most important part
+% of our new style option.
+% It will format its contents as an exercise,
+% namely preceding it with an exercise number and, optionally,
+% a ``title''. (Refer to the Implementation to find out how to change
+% the formatting of exercise ``heads''.)
+% The answer to the exercise is given right after the exercise itself,
+% following the |\answer| command.
+% Generally, an exercise looks like this:\\[2pt]
+% \hspace*{\MacroIndent}|\begin{exercise}|\\
+% \hspace*{\MacroIndent}\meta{The exercise itself}\\
+% \hspace*{\MacroIndent}|\answer|\\
+% \hspace*{\MacroIndent}\meta{The answer to this exercise}\\
+% \hspace*{\MacroIndent}|\end{exercise}|\\[2pt]
+% The \meta{answer} is copied out to the file {\tt answers.tex}.
+% This file can be read back in later with the |\listanswers| command.
+%
+% In {\sl The \TeX book}, the answer is finished by a blank line.
+% With the {\tt exercise} environment, however, the answer includes
+% everything up to the |\end{exercise}| command.
+% Note that the |\answer| command may not occur inside another
+% environment opened within the {\tt exercise}, that is, not at the same
+% level of nesting as the |\begin{exercise}| \dots |\end{exercise}|
+% commands. The implementation tries to detect this error and issues
+% an appropriate diagnostic.
+%
+% Sometimes you may want to state an exercise without any answer
+% (for example, a research problem).
+% You can use the {\tt exercise} environment to typeset an
+% answer-less exercise as well,
+% thereby keeping the style and numbering of exercises uniform.
+%
+% \DescribeMacro{\listanswers}
+% At some stage you will want to list the collected answers, presumably
+% in an appendix of some sort. The |\listanswers| command will take
+% care of that.
+% You should say something along the lines of
+%\begin{verbatim}
+% \appendix
+% \chapter{Answers to the Exercises}
+% Don't peek.
+% \listanswers
+%\end{verbatim}
+%
+% \StopEventually{\makesignature}
+%
+% \section{The Implementation}
+%
+% As usual, the file identifies itself. Following Nico Poppelier's
+% suggestion to Frank Mittelbach, the rather verbose headers are only written
+% to the transcript file.
+% \changes{v1.0c}{91/10/08}{Write version number to transcript file only.}
+% We read this file only once.
+% \begin{macrocode}
+\@ifundefined{exercise}{}{\endinput}
+\wlog{Style-Option: `exercise'
+ \fileversion \space <\filedate> (AL)}
+\wlog{English Documentation
+ \@spaces \@spaces \space <\docdate> (AL)}
+% \end{macrocode}
+% We need a new counter for counting the exercises.
+% Tricky manipulations are necessary because exercises are normally
+% numbered within some sectional unit, e.\ g., the chapter.
+% This, of course, is for the user to decide---we can't simply
+% stick in a |\newcounter{exercise}[chapter]| because there's
+% no way we'd be able to undo this, should our guess prove
+% wrong\footnote{Oh well, I suppose we could always keep track
+% of which sectional unit the exercises are numbered within.
+% Then we could remove the entry from the corresponding list.
+% What a mess.}.
+% So, by default, the exercises are numbered consecutively throughout
+% the whole document.
+% (This is what you want when you're typing up homework assignments.)
+% \begin{macrocode}
+\newcounter{exercise}
+% \end{macrocode}
+%
+% \begin{macro}{\numberexercises}
+% The |\numberexercises| command lets the user specify
+% where the exercises are actually supposed to be numbered.
+% I. e., |\numberexercises{chapter}| will reset the {\tt exercise}
+% counter to zero whenever a new chapter begins.
+% The actual exercise number is appended to the number of
+% whatever we are numbering the exercises within.
+% |\numberexercises| can occur only once in a document,
+% and it must appear before the first exercise.
+% Otherwise we issue a warning message.
+% \begin{macrocode}
+\newif\if@exnofixed
+\def\numberexercises#1{%
+ \if@exnofixed\@warning{Exercise numbering already fixed}
+ \else\@addtoreset{exercise}{#1}%
+ \renewcommand{\theexercise}{\csname
+ the#1\endcsname--\arabic{exercise}}\fi
+ \@exnofixedtrue}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\exercisehead}
+% One can imagine quite a lot of different ways to start an exercise:
+% compare ``{$\bullet$\,\small\bf EXERCISE \normalsize\bf 2--3}'' to
+% ``{\sl Exercise 2--3.}'' or even ``\fbox{2--3}''.
+% The |\exercisehead| command lets the user specify
+% how the exercise headings are to be formatted---its
+% first argument is inserted right in front of the exercise number,
+% while the second argument is inserted right afterwards.
+% The default is to print just the exercise number in boldface;
+% the examples above would be realized by the commands
+%\begin{verbatim}
+% \exercisehead{$\bullet$\,\small\bf EXERCISE \normalsize\bf}{}
+% \exercisehead{\sl Exercise }{.}
+% \exercisehead{\fbox}{}
+%\end{verbatim}
+% respectively.
+% Note the (seemingly extraneous) braces around |\theexercise|
+% in the definition of |\exercisehead|.
+% They make the last example possible.
+% \begin{macrocode}
+\def\exercisehead#1#2{\def\exercise@head{#1{\theexercise}#2}}
+\exercisehead{\bf}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\exenvname}
+% We'll need the name of the {\tt exercise} environment
+% later on, to check whether the |\answer| occurs at `top level'
+% inside the environment.
+% \begin{macrocode}
+\def\exenvname{exercise}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\exercise}
+% Now we define the {\tt exercise} environment.
+% The |\@exnofixedtrue| inhibits use of the
+% |\numberexercises| command after the first exercise.
+% The |\refstepcounter| command lets you |\label|
+% exercises for cross-reference.
+% \begin{macrocode}
+\def\exercise{\medbreak\@exnofixedtrue
+ \refstepcounter{exercise}\trivlist\item[]{\exercise@head}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\endexercise}
+% The |\endexercise| command finishes up an exercise.
+% \begin{macrocode}
+\def\endexercise{\endtrivlist}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\answer}
+% Now for the tougher bits.
+% We check whether the name of the current environment equals
+% ``{\tt exercise}''.
+% If not, then some other environment has been opened but not closed
+% before the |\answer|.
+% That's bad, because the verbatim scanning mechanism will look for
+% the wrong |\end|.
+% It certainly rates an error message,
+% which is output by |\@answererr|.
+% Otherwise, all is well and we delegate the work to |\@answer|.
+% Note that we call |\@answer| in a non-straightforward fashion:
+% if we had
+%\begin{verbatim}
+% \ifx\@currenvir\exenvname\@answer\else\@answererr\fi
+%\end{verbatim}
+% then |\@answer| would copy the |\else| and following
+% tokens to the answer file.
+% We have to make sure that the answer text is immediately next
+% when |\@answer| is called.
+% \begin{macrocode}
+\def\answer{%
+ \ifx\@currenvir\exenvname\let\next\@answer
+ \else\let\next\@answererr\fi\next}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@answererr}
+% This macro issues an error message when the current environment name
+% is found not to match {\tt exercise}.
+% It tries to correct the error by finishing the current environment
+% and repeating the test.
+% \begin{macrocode}
+\def\@answererr{\errhelp{There may be no unmatched `\begin' between
+ the^^J`\begin{exercise}' and `\answer'.}%
+ \errmessage{LaTeX error: Wrong \string\answer\space (current
+ environment is `\@currenvir')}%
+ \edef\@tempa{{\@currenvir}} \expandafter\end\@tempa \answer}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@answer}
+% The |\@answer| macro diverts subsequent lines to the answer file,
+% up to the line that finishes the {\tt exercise} environment,
+% namely |\end{exercise}|.
+% Rainer Sch\"opf's {\tt verbatim} macros do the hard work;
+% this macro is essentially adapted from his {\tt verbatimwrite}
+% environment.
+%
+% Before we start copying the answer,
+% we write a line containing the current exercise number.
+% This line is of the form\\[2pt]
+% \hspace*{\MacroIndent}|\ansno{|\meta{exercise number}|}|\\[2pt]
+% and |\ansno| will be suitably defined later on.
+% |\ans| is the file descriptor for the answer file.
+% \begin{macrocode}
+\def\@answer{%
+ \immediate\write\ans{\string\ansno{\theexercise}}
+% \end{macrocode}
+% Now we get ready for copying the answer.
+% All special characters are disabled,
+% while the end of line is made active.
+% According to Rainer Sch\"opf's paper the |\verbatim@processline|
+% macro is called from within the {\tt verbatim} environment when
+% a whole line of stuff has been accumulated.
+% We will define this macro such that this line is then output
+% to the answer file.
+% |\verbatim@start| launches the copying process.
+% \begin{macrocode}
+ \let\do\@makeother\dospecials \catcode`\^^M\active
+ \let\verbatim@processline=\answer@processline
+ \verbatim@start}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\answer@processline}
+% The {\tt verbatim} macros gather a complete line of input into the
+% token variable |\verbatim@line|.
+% Here we output the contents of this variable to the answer file.
+% This macro is called whenever a line has been completely read.
+% \begin{macrocode}
+\def\answer@processline{\immediate\write\ans{\the\verbatim@line}}
+% \end{macrocode}
+% \end{macro}
+%
+% \DescribeEnv{exercises}
+% We define another environment that will introduce a special section
+% for the exercises. The name of the environment is unfortunate,
+% but I couldn't think of anything else. Maybe {\tt homework} or
+% {\tt assignment} might have been more sensible. (Any ideas, anyone?)
+% Anyhow, you can say\\[2pt]
+% \hspace*{\MacroIndent}|\begin{exercises}|\\
+% \hspace*{\MacroIndent}|Make sure you attempt all of them.|\\
+% \hspace*{\MacroIndent}\quad|\begin{exercise}|\\
+% \hspace*{\MacroIndent}\quad\meta{exercise$_1$}\\
+% \hspace*{\MacroIndent}\quad|\end{exercise}|\\
+% \hspace*{\MacroIndent}\dots\\
+% \hspace*{\MacroIndent}\quad|\begin{exercise}|\\
+% \hspace*{\MacroIndent}\quad\meta{exercise$_n$}\\
+% \hspace*{\MacroIndent}\quad|\end{exercise}|\\
+% \hspace*{\MacroIndent}|\end{exercises}|\\[2pt]
+% With {\tt article}, the exercises will be placed in a subsection,
+% whereas, with {\tt report} and {\tt book}, the exercises will
+% be put into a section.
+% \DescribeMacro{\exercisetitle}
+% The |\exercisetitle| can be redefined according to
+% the desired language.
+% \begin{macrocode}
+\def\exercisetitle{Exercises}
+\@ifundefined{chapter}{\let\exsection\subsection}%
+ {\let\exsection\section}
+\newenvironment{exercises}{\exsection*{\exercisetitle}}{}
+% \end{macrocode}
+%
+% Now we open the file for the answers.
+% Its name is the current job name plus {\tt.ans},
+% i.\ e., if the document is {\tt paper.tex},
+% the answer file is {\tt paper.ans}. In the original, the
+% file name is always {\tt answers.tex}; using the job name makes
+% it possible to put the answers into a separate document without
+% causing undue confusion, since every document gets its own
+% answer file.
+% \begin{macrocode}
+\newwrite\ans
+\immediate\openout\ans=\jobname.ans
+\typeout{Writing answers to \jobname.ans.}
+% \end{macrocode}
+%
+% \begin{macro}{\listanswers}
+% The |\listanswers| command will close the answer file
+% and replace itself by its contents.
+% \begin{macrocode}
+\def\listanswers{\immediate\closeout\ans \input\jobname.ans\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ansno}
+% Finally we have to define how the exercise numbers will appear
+% with the answers.
+% By default, we reuse whatever was defined for
+% |\exercise@head|.
+% Typographically speaking, this should be the sound thing to do.
+% But conceivably one might want to let the exercise numbers stick
+% out into the margin, by saying something like
+%\begin{verbatim}
+% \def\ansno#1{\par{\noindent\strut\llap{\Ansno#1 }}}
+%\end{verbatim}
+% where |\Ansno| contains any commands necessary for formatting
+% the exercise number.
+% \begin{macrocode}
+\def\ansno#1{\par{\def\theexercise{#1}\exercise@head}}
+% \end{macrocode}
+% \end{macro}
+% \Finale
+\endinput
diff --git a/macros/latex209/contrib/exercise/exercise.sty b/macros/latex209/contrib/exercise/exercise.sty
new file mode 100644
index 0000000000..da42657713
--- /dev/null
+++ b/macros/latex209/contrib/exercise/exercise.sty
@@ -0,0 +1,98 @@
+%%
+%% This is file `exercise.sty' generated
+%% on <1991/12/4> with the docstrip utility (v1.1l test).
+%%
+%% The original source file was `exercise.doc'.
+%%
+%%
+%% Copyright (C) 1991 by Anselm Lingnau. All rights reserved.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy this file
+%% to a different name and then change this copy.
+%%
+%% You are allowed to distribute this file under the condition that it is
+%% distributed together with all files mentioned in the appropriate README
+%% file. If you received only some of these files from someone, complain!
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT ALLOWED
+%% to take money for the distribution or use of this file (or a changed
+%% version) except for some nominal charge for copying etc.
+%%
+%% Error Reports in case of UNCHANGED versions to
+%%
+%% Anselm Lingnau
+%% Buchenweg 1
+%% D-6239 Eppstein 2
+%% Federal Republic of Germany
+%% Internet: <lingnau@informatik.uni-frankfurt.de>
+%%
+\def\fileversion{v1.0c}
+\def\filedate{91/10/08}
+\def\docdate{91/10/08}
+
+%% \CheckSum{139}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%% Style-option `exercise' to use with LaTeX v2.09
+%% Copyright (C) 1991 by Anselm Lingnau, all rights reserved.
+\@ifundefined{exercise}{}{\endinput}
+\wlog{Style-Option: `exercise'
+ \fileversion \space <\filedate> (AL)}
+\wlog{English Documentation
+ \@spaces \@spaces \space <\docdate> (AL)}
+\newcounter{exercise}
+\newif\if@exnofixed
+\def\numberexercises#1{%
+ \if@exnofixed\@warning{Exercise numbering already fixed}
+ \else\@addtoreset{exercise}{#1}%
+ \renewcommand{\theexercise}{\csname
+ the#1\endcsname--\arabic{exercise}}\fi
+ \@exnofixedtrue}
+\def\exercisehead#1#2{\def\exercise@head{#1{\theexercise}#2}}
+\exercisehead{\bf}{}
+\def\exenvname{exercise}
+\def\exercise{\medbreak\@exnofixedtrue
+ \refstepcounter{exercise}\trivlist\item[]{\exercise@head}}
+\def\endexercise{\endtrivlist}
+\def\answer{%
+ \ifx\@currenvir\exenvname\let\next\@answer
+ \else\let\next\@answererr\fi\next}
+\def\@answererr{\errhelp{There may be no unmatched `\begin' between
+ the^^J`\begin{exercise}' and `\answer'.}%
+ \errmessage{LaTeX error: Wrong \string\answer\space (current
+ environment is `\@currenvir')}%
+ \edef\@tempa{{\@currenvir}} \expandafter\end\@tempa \answer}
+\def\@answer{%
+ \immediate\write\ans{\string\ansno{\theexercise}}
+ \let\do\@makeother\dospecials \catcode`\^^M\active
+ \let\verbatim@processline=\answer@processline
+ \verbatim@start}
+\def\answer@processline{\immediate\write\ans{\the\verbatim@line}}
+\def\exercisetitle{Exercises}
+\@ifundefined{chapter}{\let\exsection\subsection}%
+ {\let\exsection\section}
+\newenvironment{exercises}{\exsection*{\exercisetitle}}{}
+\newwrite\ans
+\immediate\openout\ans=\jobname.ans
+\typeout{Writing answers to \jobname.ans.}
+\def\listanswers{\immediate\closeout\ans \input\jobname.ans\relax}
+\def\ansno#1{\par{\def\theexercise{#1}\exercise@head}}
+\endinput
+%%
+%% End of file `exercise.sty'.
diff --git a/macros/latex209/contrib/exercise/exercise.tex b/macros/latex209/contrib/exercise/exercise.tex
new file mode 100644
index 0000000000..72210c222c
--- /dev/null
+++ b/macros/latex209/contrib/exercise/exercise.tex
@@ -0,0 +1,88 @@
+
+\ifx\selectfont\undefined
+ \documentstyle[newdoc,ltugboat]{article}
+\else
+ \documentstyle[oldlfont,newdoc,ltugboat]{article}
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% The next section defines a few font related commands if the
+%% new font selection scheme is in force.
+%%
+%% Additionally you have to use the oldlfont option because this was
+%% written for the old LaTeX.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx \selectfont\undefined \else
+ \ifx\tensl\undefined
+ \newcommand{\tensl}
+ {\family{cmr}\series{m}\shape{sl}\size{10}{12pt}\selectfont}
+ \fi
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% The next few lines are for those with a new TeX 3.0 to ensure
+%% that hyphenation etc. is done correctly.
+%%
+
+\ifx \lefthyphenmin\undefined \else
+ \lefthyphenmin=2
+ \righthyphenmin=3
+ \errorcontextlines=1
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% And finally some definitions for the doc style
+%% to get this special article right.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\SelfDocumenting
+\addtolength{\marginparwidth}{1cm} % Long macro names
+
+% Compensate for stupid long net address
+\makeatletter
+\def\makesignature{%
+ \par
+ \rightline{%
+ \vbox{\hsize=19pc \ninepoint \raggedright % was 12pc
+ \parindent \z@ \everypar={\hangindent 1pc }
+ \parskip \z@skip
+ \netaddrat
+ \netaddrpercent
+ \def\|{\unskip\hfil\break}%
+ \def\\{\endgraf}%
+ \def\net{\tt}%
+ \def\phone{\rm Phone: } \rm
+ \medskip
+ \@signature}}
+ }
+\makeatother
+
+\PrelimDraftfalse
+\setcounter{page}{1}
+
+\setcounter{IndexColumns}{2} % two column index
+%\let\DescribeMacro\SpecialUsageIndex % \
+%\let\DescribeEnv\SpecialEnvIndex % > no marginal notes
+%\renewcommand{\PrintMacroName}[1]{} % /
+
+\renewcommand{\theCodelineNo}{{\rm\tiny\arabic{CodelineNo}}}
+
+\MakeShortverb{\|}
+\DisableCrossrefs % No Cross references
+%\EnableCrossrefs
+%\OnlyDescription % Full article
+%\RecordChanges % Do not print changes
+\CodelineIndex % Code lines numbered
+%\PageIndex
+
+\begin{document}
+ \DocInput{exercise.doc}
+ \PrintIndex
+\end{document}
+
diff --git a/macros/latex209/contrib/exercise/extest.tex b/macros/latex209/contrib/exercise/extest.tex
new file mode 100644
index 0000000000..5dbb4e9257
--- /dev/null
+++ b/macros/latex209/contrib/exercise/extest.tex
@@ -0,0 +1,35 @@
+\documentstyle[verbatim,exercise]{report}
+\newcommand{\fivetimes}[1]{#1 #1 #1 #1 #1}
+\numberexercises{chapter}
+\exercisehead{\bf$\bullet$\,EXERCISE }{:}
+\begin{document}
+\chapter{First Chapter}
+\fivetimes{\fivetimes{Some text.}}
+\begin{exercise}
+\fivetimes{This is the first exercise in Chapter~1.}
+\answer
+Answer to the first exercise in Chapter~1.
+\end{exercise}
+\begin{exercise} \label{x12}
+\fivetimes{This is the second exercise in Chapter~1.}
+\fivetimes{This is the second exercise in Chapter~1.}
+\answer
+Answer to the second exercise in Chapter~1.
+\end{exercise}
+\begin{exercise}
+\fivetimes{This is the third exercise in Chapter~1.}
+\end{exercise}
+\chapter{Second Chapter}
+\fivetimes{\fivetimes{Some more text.}}
+\begin{exercise}
+\fivetimes{This is the first exercise in Chapter~2.}
+(See also exercise~\ref{x12}).
+\answer
+Answer to the first exercise in Chapter~2.
+\end{exercise}
+\begin{exercise}
+\fivetimes{This is the second exercise in Chapter~2.}
+\answer
+Answer to the second exercise in Chapter~2.
+\end{exercise}
+\end{document}
diff --git a/macros/latex209/contrib/exercise/readme b/macros/latex209/contrib/exercise/readme
new file mode 100644
index 0000000000..8a454df249
--- /dev/null
+++ b/macros/latex209/contrib/exercise/readme
@@ -0,0 +1,95 @@
+\def\filedate{92/07/02}
+
+Copyright (C) 1991 by Anselm Lingnau.
+ All rights reserved.
+
+IMPORTANT NOTICE:
+
+You are not allowed to change this readme file.
+
+You should get the following files:
+
+ docstrip.cmd Command file for docstrip.tex to produce exercise.sty.
+
+ exercise.doc `exercise' style for LaTeX. You have to run it
+ through the docstrip.tex program to produce the
+ corresponding style file. You can also use this file
+ directly by copying or linking it to exercise.sty,
+ but that will be less efficient.
+ exercise.tex Driver for exercise documentation. Run this through
+ LaTeX for the documented version.
+
+ extest.tex Small sample LaTeX input file that demonstrates
+ some of the features of the exercise style file.
+
+ readme This file.
+
+To work with this package you also need the verbatim package (MZ4).
+The docstrip.tex program is contained in the multicol package (MZ1).
+You should be able to get all these files through the same channels
+as this package.
+
+To produce the style files please run docstrip.tex through LaTeX
+and answer the question
+
+ `Command file docstrip.cmd found. Use it (y/n)?'
+
+with `y'. This will generate all sty files. If you already have
+older versions of the files, docstrip will ask whether or not you
+want to overwrite those versions.
+
+Distribution of unchanged versions:
+
+ You are NOT ALLOWED to take money for the distribution or use of
+ these files except for a nominal charge for copying etc.
+
+ Redistribution of unchanged files is allowed provided that all files
+ listed in the corresponding package README file are distributed
+ including this readme file.
+
+ If you receive only some of these files from someone, complain!
+
+ However, if these files are distributed by established suppliers as
+ part of a complete TeX distribution, and the structure of the
+ distribution would make it difficult to distribute the whole set of
+ files, *those parties* are allowed to distribute only some of the
+ files provided that it is made clear that the user will get a
+ complete distribution-set upon request to that supplier (not me).
+
+ Notice that this permission is not granted to the end user.
+
+Generation and distribution of changed versions:
+
+ The generation of changed versions of the files included in the
+ packages is allowed under the following restrictions:
+
+ - You rename the file before you make any changes to it.
+
+ - You acknowledge the origin of the changed version in the file and
+ keep the information that it (or a changed version) has to be
+ distributed under the restrictions mentioned in this file.
+
+ The distribution of changed versions of the files included in the
+ packages is allowed under the following restrictions:
+
+ - You provide the user with information how to obtain the original
+ package or, even better, distribute it with your files.
+
+ - You make sure that the changed versions contain a notice that
+ prevents others from taking money for distribution or use of your
+ files, i.e. they have to be distributed under the restrictions
+ mentioned in this file.
+
+ - You inform me that you created a changed version of the files.
+ This is only necessary if you want to distribute it to others.
+
+Error Reports in case of UNCHANGED versions to
+
+ Anselm Lingnau
+ Buchenweg 1
+ D-6239 Eppstein 2
+ Federal Republic of Germany
+ Internet: <lingnau@math.uni-frankfurt.de>
+
+exercise.doc: \def\fileversion{v1.0d}
+exercise.doc: \def\filedate{92/07/02}
diff --git a/macros/latex209/contrib/fchart/fcdoc.pdf b/macros/latex209/contrib/fchart/fcdoc.pdf
new file mode 100644
index 0000000000..8fd7c35761
--- /dev/null
+++ b/macros/latex209/contrib/fchart/fcdoc.pdf
Binary files differ
diff --git a/macros/latex209/contrib/fchart/fcdoc.tex b/macros/latex209/contrib/fchart/fcdoc.tex
new file mode 100644
index 0000000000..dd185060db
--- /dev/null
+++ b/macros/latex209/contrib/fchart/fcdoc.tex
@@ -0,0 +1,345 @@
+\documentstyle[german]{article}
+
+\def\stat#1{$\langle${\em #1\/}$\rangle$}
+
+\def\bs{\tt\char'134}
+\def\lb{\tt\char'173}
+\def\rb{\tt\char'175}
+\def\ti{\tt\char'176}
+
+\def\exprleft{$\vcenter\bgroup\hsize=4.5cm}
+\def\exprmid{\egroup\Longrightarrow\vcenter\bgroup\hsize=6cm}
+\def\exprright{\egroup$}
+
+\input{fchart}
+
+\title{
+ {\tt floatchart}\\
+ Flu"sdiagramme in \TeX/\LaTeX
+}
+
+\author{M.~Schollmeyer}
+
+\begin{document}
+
+\maketitle
+
+{\tt floatchart} sind eine Sammlung von Definitionen, die das Erstellen von
+Struktogrammen in \TeX/\LaTeX\ erm"oglichen.
+
+Wenn man an \LaTeX\ und Struktogramme denkt, wird man geneigt sein, eine {\tt
+picture} Umgebung zu nehmen, eine Menge {\em counter} und {\em dimensions} zu
+definieren und\dots. \TeX\ bietet eine viel einfachere Art an, dieses Problem
+zu l"osen, und mich wundert es, da"s ich so etwas noch auf keinem SoftServer
+gesehen habe.
+
+Die Dateien {\tt fchart.tex} und {\tt fcdoc.tex} k"onnen "uber Anonymous Ftp vom
+SoftServer der Uni Stuttgart\hfill {\tt rusinfo.rus.uni-stuttgart.de}\hfill
+$[129.69.1.12]$\\
+"uber {\em INTERNET\/} bezogen werden.
+
+Falls jemand da drau"sen Vorschl"age, Anmerkungen oder Probleme (mit diesen
+Definitionen) hat, mein Name ist Michael Schollmeyer und ich bin "uber
+{\tt nw@itlrsun1.luftfahrt.uni-stuttgart.de} zu erreichen.
+
+\section{Struktogramme}
+Ein Dokument, in das Sie Struktogramme einbinden m"ochten, mu"s die Definitionen
+f"ur Struktogramme einlesen. Dazu mu"s irgendwo vor dem ersten Struktogramm der
+Befehl
+
+\begin{verbatim}
+ \input{fchart}
+\end{verbatim}
+
+\noindent stehen. Mit diesem Befehl werden die Definitionen eingelesen.
+Nat"urlich brauchen Sie die Datei {\tt fchart.tex} dazu. Sie k"onnen die Datei
+auch in {\tt fchart.sty} umbenennen und dann mit dem Befehl
+\verb|documentstyle| einbinden. Das ist schon alles was Sie brauchen, jetzt
+k"onnen Sie loslegen: Grunds"atzlich mu"s man zwischen Struktogrammen in \TeX\ und
+Struktogrammen in \LaTeX\ unterscheiden. Beide sehen nat"urlich genau gleich aus
+und sind auch gleich, nur die Bedienung ist etwas unterschiedlich. In \TeX\
+sagen Sie, wenn sie ein Flu"sdiagramm beginnen m"ochten
+
+\begin{verbatim}
+ \FLOATCHART(breite){titel}{
+ anweisungen
+ }
+\end{verbatim}
+
+\stat{breite} ist die Breite, die das Struktogramm einnehmen soll. Breite ist
+etwas, das \TeX\ \stat{dimen} nennt, also eine Dimension. Man kann hier
+beispielsweise \verb|10cm| eingeben. \stat{titel} ist eine beliebige
+Zeichenkette, die in die erste Box des Struktogramms gesetzt wird. In dieser
+Zeichenkette k"onnen die Befehle \verb|\TITLE{|\stat{string}\verb|}| und
+\verb|\VAR{|\stat{string}\verb|}| gesetzt werden. bei \verb|\TITLE| wird vor
+die Zeichenkette \stat{string} automatisch \verb|Program| gesetzt, bei
+\verb|\VAR| wird \verb|var| gesetzt. Diese Zeichenketten k"onnen auch ver"andert
+werden.
+
+In \LaTeX\ sagen sie
+
+\begin{verbatim}
+ \begin{floatchart}(breite){titel}
+ anweisungen
+ \end{floatchart}
+\end{verbatim}
+
+F"ur \stat{anweisungen} k"onnen mehrere der folgenden Befehle stehen. Es gibt f"ur
+jeden Schleifentyp eine Definition, mit der dieser Typ erzeugt werden kann.
+
+\begin{description}
+ \item[{\bs S\{\stat{text}\}}] Das ist der einfachste Befehl. S $\equiv$
+ {\em Statement}. Der Text wird links\-b"un\-dig in eine Box gesetzt.
+ \item[{\bs IF(\stat{text})\{\stat{anweisungen}\}\{\stat{anweisungen}\}}]
+ Es wird eine Verzweigungsstruktur mit zwei "Asten erzeugt. Jeder Ast kann
+ wieder beliebige Anweisungen enthalten. Das letzte Argument kann auch
+ weggelassen werden, dann ist dieser Anweisungsblock leer. Der Text "uber den
+ Verzweigungsbl"ocken kann mit \verb|\def\fnyes{...}| und \verb|\def\fnno{...}|
+ eingestellt werden.
+
+\end{description}
+
+ \exprleft
+ \begin{verbatim}
+\IF(\stat{text}){
+ \S{\stat{anweisungen}}
+}{
+ \S{\stat{anweisungen}}
+}
+ \end{verbatim}
+ \exprmid
+ \begin{floatchart}(6cm){\bs IF-Konstruktion}
+ \IF(\stat{text}){
+ \S{\stat{anweisungen}}
+ }{
+ \S{\stat{anweisungen}}
+ }
+ \end{floatchart}
+ \exprright
+
+\begin{description}
+ \item[{\bs WHILE(\stat{text})\{\stat{anweisungen}\}}]
+ Es wird eine Schleifenstruktur erzeugt. Die Zeichenkette vor {\tt text}
+ kann mit \verb|\def\fnwhile{...}| eingestellt werden.
+\end{description}
+
+ \exprleft
+ \begin{verbatim}
+\WHILE(\stat{text}){
+ \S{\stat{anweisungen}}
+}
+ \end{verbatim}
+ \exprmid
+ \begin{floatchart}(6cm){\bs WHILE-Konstruktion}
+ \WHILE(\stat{text}){
+ \S{\stat{anweisungen}}
+ }
+ \end{floatchart}
+ \exprright
+
+\begin{description}
+ \item[{\bs REPEAT\stat{anweisungen}\bs UNTIL(\stat{text})}]
+ Das ist ebenfalls eine Schleifenstruktur. Die Zeichenkette vor {\tt text}
+ kann mit \verb|\def\fnuntil{...}| eingestellt werden.
+\end{description}
+
+ \exprleft
+ \begin{verbatim}
+\REPEAT
+ \S{\stat{anweisungen}}
+\UNTIL(\stat{text})
+ \end{verbatim}
+ \exprmid
+ \begin{floatchart}(6cm){\bs REPEAT-Konstruktion}
+ \REPEAT
+ \S{\stat{anweisungen}}
+ \UNTIL(\stat{text})
+ \end{floatchart}
+ \exprright
+
+\begin{description}
+ \item[{\bs SWITCH(\stat{text})\{\stat{anweisungen}\}}]
+ Das ist eine spezielle Verzweigungsstruktur. Nein, eigentlich ist das eine
+ allgemeine Verweigungsstruktur, auf die z.B. die {\bs IF}-Konstruktion
+ aufbaut. F"ur \stat{anweisungen} sollten nur die beiden Befehle {\bs CASE}
+ und {\bs DEFAULT} verwendet werden.
+\end{description}
+
+ \exprleft
+ \begin{verbatim}
+\SWITCH(\stat{text}){
+ \CASE(\stat{first}){
+ \S{\stat{anw.}}
+ }
+ \CASE(\stat{second}){
+ \VOID
+ }
+ \DEFAULT(\stat{def}){
+ \S{\stat{anw.}}
+ }
+}
+ \end{verbatim}
+ \exprmid
+ \begin{floatchart}(6cm){\bs SWITCH-Konstruktion}
+ \SWITCH(\stat{text}){
+ \CASE(\stat{first}){
+ \S{\stat{anw.}}
+ }
+ \CASE(\stat{second}){
+ \VOID
+ }
+ \DEFAULT(\stat{def}){
+ \S{\stat{anw.}}
+ }
+ }
+ \end{floatchart}
+ \exprright
+
+\begin{description}
+ \item[{\bs FOR(\stat{first})\{\stat{upto}\}(\stat{last})\{\stat{anweisungen}\}}]
+ Das ist eine Schleifenstruktur, in der irgendetwas von einem Zustand in
+ einen Anderen ger"at und dabei evt.~das Abbruchkriterium beeinflu"st. Die
+ Zeichenkette vor {\tt first} kann mit \verb|\def\fnfor{...}| eingestellt
+ werden.
+\end{description}
+
+ \exprleft
+ \begin{verbatim}
+\FOR(\stat{first})
+ {\tt upto}
+ (\stat{last}){
+ \S{\stat{anweisungen}}
+}
+ \end{verbatim}
+ \exprmid
+ \begin{floatchart}(6cm){\bs FOR-Konstruktion}
+ \FOR(\stat{first}){\tt upto}(\stat{last}){
+ \S{\stat{anweisungen}}
+ }
+ \end{floatchart}
+ \exprright
+
+\begin{description}
+ \item[{\bs FOREVER\{\stat{anweisungen}\}}]
+ Das ist eine endlose Schleifenstruktur.
+\end{description}
+
+ \exprleft
+ \begin{verbatim}
+\FOREVER{
+ \S{\stat{anweisungen}}
+}
+ \end{verbatim}
+ \exprmid
+ \begin{floatchart}(6cm){\bs FOREVER-Konstruktion}
+ \FOREVER{
+ \S{\stat{anweisungen}}
+ }
+ \end{floatchart}
+ \exprright
+
+\vskip10pt
+
+Es gibt eine ganze Reihe von Variablen, die das Aussehen der Flu"sdiagramme
+beeinflussen. Einige dieser Variablen sind \verb|\count|er und
+\verb|\dimen|sionen, k"onnen also einfach durch \verb|\variable=wert| ver"andert
+werden. Andere Variablen sind \verb|\def|initionen, die mit
+\verb|\def\variable{wert}| ver"andert werden k"onnen. Die hier angegebenen Werte
+sind die Voreinstellungen.
+
+\begin{description}
+ \item[\tt\bs flnwidth=.5pt] Strichdicke f"ur horizontale und vertikale Linien
+ \item[\tt\bs boxskip=8pt] Abstand des Textes von den Linien
+ \item[\tt\bs boxindent=20pt] Einzug f"ur Verschachtelungen
+ \item[\tt\bs quality=200] Qualit"at f"ur diagonale Linien (klein=schlecht)
+ \item[\tt\bs def\bs fnname\{\bs tt Program \bs bf \}] Text f"ur Titelzeile
+ \item[\tt\bs def\bs fnvar\{\bs tt VAR \bs it \}] Text f"ur Variablen-Definitionen
+ \item[\tt\bs def\bs fnwhile\{\bs tt While \}] Text f"ur While-Schleife
+ \item[\tt\bs def\bs fnuntil\{\bs tt Until \}] Text f"ur While-Until-Schleife
+ \item[\tt\bs def\bs fnfor\{\bs tt For \}] Text f"ur For-Next-Schleife
+ \item[\tt\bs def\bs fnyes\{Yes \}] Text f"ur If-Then-Konstruktion
+ \item[\tt\bs def\bs fnno\{No \}] Text f"ur If-Then-Konstruktion
+ \item[\tt\bs fnnotext] Kein Text f"ur obige Variablen
+ \item[\tt\bs fndeftext] Default Text f"ur obige Variablen
+\end{description}
+
+
+\section{Baumstrukturen}
+
+Struktogramme sind eine brauchbare Art Abl"aufe schematisch darzustellen. F"ur
+Daten und Zusammenh"ange zwischen Daten k"onnen {\em Baumdiagramme} verwendet
+werden. Die Darstellung von Baumdiagrammen ist vielseitiger als die von
+Struktogrammen. Das hier verwendete Layout ist (noch) nicht weit verbreitet,
+aber es l"a"st sich gut in \TeX\ implementieren.
+
+Baumstrukturen basieren auf \stat{nodes}, die jeweils ein Datum darstellen.
+\stat{nodes}, die einger"uckt erscheinen, sind voneinander abh"angig.
+\stat{nodes}, die untereinander stehen, stehen in einer Verbindung zueinander.
+Wie stark diese Bindung ist, wird durch eine Linie angedeutet.
+
+\vskip10pt
+
+\node~{\bs node\it c\lb\it name\rb\it t\lb\it title\rb\lb\it subnodes\rb}-
+ {Druckt eine \stat{node}. Das ist der einzige Befehl, der zur Verf"ugung gestellt
+ wird. Alle anderen Sachen werden mit Optionen eingestellt.}{
+ \node!{\it c}-{Optionales Argument, da"s die Verbindungslinie oder eine
+ Referenz angibt. }{
+ \node{\it c= \tt !}-{Durchgezogene Verbindungslinie}
+ \node{\it c= \ti}-{Geschl"angelte Verbindungslinie}
+ \node{\it c += \tt +}-{Diese \stat{node} ist eine Referenz. Es wird kein Name
+ gedruckt, sondern ein Kreis mit einem automatisch generierten
+ Buchstaben in der Mitte. Der Name kann sp"ater wieder verwendet werden,
+ um den gleichen Buchstaben zu erhalten. Damit k"onnen Bez"uge hergestellt
+ werden.}
+ }
+ \node{\lb\it name\rb}-{Der Name der \stat{node}, wird in Klammern '$\langle
+ name\rangle$' gesetzt.}
+ \node!{\it t}-{Optionales Zeichen, das angibt, ob diese \stat{node} einen Titel
+ hat.}{
+ \node{\it t= \tt -}-{Es gibt einen Titel. Diese Option darf bei
+ Referenzen nicht benutzt werden.}
+ }
+ \node{\lb\it title\rb}-{Titel f"ur diese \stat{node}, wird \bs hangindent\rm`ed
+ gesetzt}
+ \node{\lb subnode\rb}-{Optionales Argument, da"s weitere \stat{subnodes} enth"alt.
+ Mit diesem Argument werden \stat{nodes} verschachtelt.}
+}
+\node~{\bs killnodes}-{Alle Referenzen l"oschen und mit der Buchstabierung neu
+ beginnen.}
+\node{\bs nodemark\{name\}}-{Der Buchstabe f"ur {\tt name} wird an dieser Stelle
+gesetzt.}
+
+\vskip10pt
+
+\node~{Apfelstrudel}-{Rezept nach Hausmannsart}{
+ \node!{Strudelteig}-{Aus den angegebenen Zutaten einen Strudelteig
+ herstellen ---Unter einem erhitzten Topf 30 Minuten ruhen lassen---}{
+ \node{$\mit 250\,\mbox{\it g}$ Mehl}
+ \node{$\mit 1\,\mbox{\it Teel.}$ Butter}
+ \node{$\mit 1\mbox{\it --}2$ Eier}
+ \node{$\mit 1/4\,\mbox{\it Tasse}$ lauwarmes Wasser}
+ \node{$\mit 1\,\mbox{\it Prise}$ Salz}
+ \node{$\mit 1/2\,\mbox{\it Teel.}$ Essig}
+ }
+ \node~{F"ulle}-{Die gezuckerten "Apfel auf dem Teil verteilen und Zimt, die
+ gehackten Mandeln und Sultaninen dar"uberstreuen.}{
+ \node{$\mit 2\,\mbox{\it kg}$ "Apfel}
+ \node{$\mit 8\,\mbox{\it E"sl.}$ Zucker}
+ \node{Zimt}
+ \node{$\mit 1\,\mbox{\it Tasse}$ Mandeln oder N"usse}
+ \node{$\mit 1\,1/2\,\mbox{\it Tassen}$ Sultaninen}
+ \node{$\mit 6\,\mbox{\it E"sl.}$ Butter}
+ \node{$\mit 4\,\mbox{\it E"sl.}$ Br"osel}
+ }
+ \node+{util}
+}
+\node~{Zwetschgennudeln}{
+ \node{\dots}
+}
+\node{\nodemark{util}$:=$Ger"ate}{
+ \node{R"uhrbesen}
+ \node{\dots}
+}
+\killnodes
+
+\end{document}
diff --git a/macros/latex209/contrib/fchart/fchart.tex b/macros/latex209/contrib/fchart/fchart.tex
new file mode 100644
index 0000000000..c842060fa7
--- /dev/null
+++ b/macros/latex209/contrib/fchart/fchart.tex
@@ -0,0 +1,548 @@
+% fchart.tex -- Version 2.0 -- Copyright (c) 1992 M.Schollmeyer -- 6.12.1992
+\message{fchart -- Version 2.0 -- Copyright (c) 1992 M.Schollmeyer}
+%
+% 1. Setzt Struktogramme in TeX/LaTeX
+% Aufbau eines Struktogramms:
+%
+% \FLOATCHART(<dimen>){<text>}{
+% \S{<text>}
+% \IF(<text>){ <statement> }{ <statement> }
+% \WHILE(<text>){ <statement> }
+% \REPEAT <statement> \UNTIL(<text>)
+% \SWITCH(<text>){\CASE(<text>){ <statement> }\DEFAULT(<text>){ <statement> }}
+% \FOR(<text>){<text>}(<text>){ <statement> }
+% \FOREVER{ <statement> }
+% }
+%
+% oder (nur in LaTeX):
+%
+% \begin{floatchart}(<dimen>){<text>}
+% <commands>
+% \end{floatchart}
+%
+% Folgende Variablen k"onnen extern modifiziert werden:
+% Defaultwerte in eckigen Klammern
+%
+% \flnwidth[=.5pt] Strichdicke f"ur horizontale und vertikale
+% Linien
+% \boxskip[=8pt] Abstand des Textes von den Linien
+% \boxindent[=20pt] Einzug f"ur Verschachtelungen
+% \quality[=200] Qualit"at f"ur diagonale Linien (klein=schlecht)
+% \def\fnname{\tt Program \bf } Text f"ur Titelzeile
+% \def\fnvar{\tt VAR \it } Text f"ur Variablen-Definitionen
+% \def\fnwhile{\tt While } Text f"ur While-Schleife
+% \def\fnuntil{\tt Until } Text f"ur While-Until-Schleife
+% \def\fnfor{\tt For } Text f"ur For-Next-Schleife
+% \def\fnyes{Yes } Text f"ur If-Then-Konstruktion
+% \def\fnno{No } Text f"ur If-Then-Konstruktion
+% \fnnotext Kein Text f"ur obige Variablen
+% \fndeftext Default Text f"ur obige Variablen
+%
+%
+% 2. Setzt Ablaufpl"ane
+%
+% \node<c>{name}<t>{title}{subnodes} -> prints a note
+% <c> -> optional argument specifying leaders:
+% <c>=! -> bar
+% <c>=~ -> serpentine line
+% <c>=+ -> this one is a refnode
+% {name} -> name of this note, will be set in angles '<name>'
+% <t> -> optional character specifying if there is a title
+% <t>=- -> there is a title
+% {title} -> title for this node, will be set \hangindended
+% {subnode} -> optional argument specifying subnodes
+%
+% Folgende Variablen k"onnen extern modifiziert werden:
+% Defaultwerte in eckigen Klammern
+%
+% \halfnodeindent[=1em] Halber Einzug f"ur Unterknoten
+%
+% 3. Below is a complete list of all commands in 'fchart'
+%
+% \@ifnextch@r
+% \@true
+% \@false
+% \textch@r
+% \@@ifnc
+% \@ifundefined
+% \b@xwidth
+% \flnwidth
+% \boxskip
+% \boxindent
+% \b@xheight
+% \quality
+% \@frightskip
+% \fndeftext
+% \fnname
+% \fnvar
+% \fnwhile
+% \fnuntil
+% \fnfor
+% \fnyes
+% \fnno
+% \fnnotext
+% \floatchart
+% \TITLE
+% \VAR
+% \endfloatchart
+% \@statement
+% \S
+% \FOREVER
+% \WHILE
+% \REPEAT
+% \SWITCH
+% \CASE
+% \DEFAULT
+% \VOID
+% \caseslash
+% \cross
+% \IF
+% \@ifthenelse
+% \@ifthen
+% \FOR
+% \@exprht
+% \halfnodeindent
+% \leaderb@r
+% \le@derwr
+% \node
+% \i@node
+% \leaderbar
+% \ii@node
+% \next
+% \iii@node
+% \iv@node
+% \refnode
+% \nodemark
+% \newnode
+% \expsubn@de
+% \killnod@s
+% \r@store
+% \addton@des
+% \killnodes
+
+\catcode`@=11 % Make AT letter
+
+%
+% \@ifnextchar t{true}{false}
+% Expands to {true} if the next token is <t>
+% {false} if the next token is not <t>
+%
+\def\@ifnextch@r #1#2#3{\def\@true{#2}\def\@false{#3}\let\testch@r#1
+ \futurelet\nextch@r\@@ifnc}
+\def\@@ifnc{
+ \ifx\nextch@r\testch@r\let\@exec\@true
+ \else\let\@exec\@false\fi\@exec
+}
+
+% \@ifundefined{NAME}{YES}{NO}
+% : If \NAME is undefined then it executes YES,
+% otherwise it executes NO. More precisely,
+% true if \NAME either undefined or = \relax.
+% taken from \LaTeX
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
+ #1\endcsname\relax#2\else#3\fi}
+
+\newdimen\b@xwidth % Aktuelle Breite der Boxen
+\newdimen\flnwidth \flnwidth=.5pt % Linienbreite f"ur Boxen
+\newdimen\boxskip \boxskip=8pt % Rand f"ur Boxen
+\newdimen\boxindent \boxindent=20pt % Einzug f"ur Boxen
+\newdimen\b@xheight % H"ohe der Boxen (switch--case)
+\newcount\quality \quality=200
+\newskip\@frightskip \@frightskip=\z@ plus 1fil
+
+\def\fndeftext{
+ \gdef\fnname{\tt Program \bf }
+ \gdef\fnvar{\tt VAR \it }
+ \gdef\fnwhile{{\tt While} }
+ \gdef\fnuntil{{\tt Until} }
+ \gdef\fnfor{{\tt For} }
+ \gdef\fnyes{\tt Yes }
+ \gdef\fnno{\tt No }
+}
+\fndeftext
+
+\def\fnnotext{
+ \let\fnname\empty
+ \let\fnvar\empty
+ \let\fnwhile\empty
+ \let\fnuntil\empty
+ \let\fnfor\empty
+ \let\fnyes\empty
+ \let\fnno\empty
+}
+
+% Die folgenden Definitionen sind f"ur \LaTeX
+%
+\def\floatchart(#1)#2{%
+ \vbox\bgroup%
+ \def\TITLE##1{\fnname ##1}%
+ \def\VAR##1{\fnvar ##1}%
+ \tolerance10000%
+ \hsize=#1 \b@xwidth=#1%
+ \parindent\z@%
+ \hrule width\b@xwidth height\flnwidth%
+ \vrule width\flnwidth%
+ \kern-\flnwidth%
+ \vbox\bgroup\rightskip=\@frightskip%
+ \S{#2}%
+}%
+
+\def\endfloatchart{%
+ \hfill\egroup%
+ \kern -\flnwidth%
+ \vrule width\flnwidth%
+ \egroup%
+}%
+
+% Die folgenden Definitionen sind f"ur \TeX oder \LaTeX
+%
+\def\FLOATCHART(#1)#2#3{\floatchart(#1){#2}{#3}
+ \endfloatchart}
+
+
+\long\def\@statement#1{\begingroup%
+ \advance\b@xwidth by -2\boxskip \advance\b@xwidth by -2\flnwidth%
+ \vskip \boxskip%
+ \hbox{\hskip \boxskip%
+ \vbox{\rightskip=\@frightskip%
+ \hsize=\b@xwidth #1%
+ }\hskip \boxskip%
+ }%
+ \vskip \boxskip%
+ \endgroup%
+ \hrule width\b@xwidth height\flnwidth%
+}%
+\let\S\@statement%
+
+\def\FOREVER#1{\vskip 3\boxskip plus 1fil%
+ \hbox{\hskip\boxindent\vrule width\flnwidth%
+ \kern -\flnwidth%
+ \vbox{\advance\b@xwidth by -\boxindent%
+ \hsize=\b@xwidth%
+ \vrule width\b@xwidth height\flnwidth%
+ {#1}}%
+ }
+ \vskip 2\boxskip plus 1fil%
+ \vrule width\b@xwidth height\flnwidth%
+}%
+
+\def\WHILE(#1)#2{{%
+ \advance\b@xwidth by -2\boxskip \advance\b@xwidth by -2\flnwidth%
+ \vskip \boxskip%
+ \hbox{\hskip \boxskip%
+ \vbox{\hsize=\b@xwidth\fnwhile {#1}}\hskip \boxskip}%
+ \vskip \boxskip%
+ }%
+ \nointerlineskip%
+ \hbox{\vrule width\boxindent height\flnwidth%
+ \vrule width\flnwidth%
+ \kern -\flnwidth%
+ \vbox{\advance\b@xwidth by -\boxindent%
+ \hsize=\b@xwidth%
+ \vrule width\b@xwidth height\flnwidth%
+ \vskip -\flnwidth%
+ \nointerlineskip%
+ {#2}%
+ }%
+ }%
+ \nointerlineskip%
+}%
+
+\def\REPEAT#1\UNTIL(#2){\begingroup%
+ \hbox{\hskip \boxindent%
+ \vrule width\flnwidth%
+ \kern -\flnwidth%
+ \vbox{\advance\b@xwidth by -\boxindent%
+ \hsize=\b@xwidth%
+ {#1}%
+ }%
+ }%
+ \endgroup\begingroup%
+ \advance\b@xwidth by -2\boxskip \advance\b@xwidth by -2\flnwidth%
+ \vskip \boxskip plus 1fil%
+ \nointerlineskip%
+ \hbox{\hskip \boxskip%
+ \vbox{%
+ \hsize=\b@xwidth\fnuntil #2%
+ }%
+ \hskip \boxskip%
+ }%
+ \vskip \boxskip plus 1fil%
+ \endgroup%
+ \vrule width\b@xwidth height\flnwidth%
+}%
+
+\def\SWITCH(#1)#2{\begingroup%
+ \advance\b@xwidth by -2\boxskip \advance\b@xwidth by -2\flnwidth%
+ \vskip \boxskip plus 1fil%
+ \hbox{%
+ \hskip \boxskip%
+ \vbox{%
+ \hsize=\b@xwidth #1%
+ }%
+ \hskip \boxskip%
+ }%
+ \vskip \boxskip plus 1fil%
+ \endgroup\begingroup%
+ \count255=0%
+ \def\CASE(##1)##2{\global\advance\count255 by 1}%
+ \let\DEFAULT\CASE%
+ {#2}\advance\b@xwidth by -\flnwidth%
+ \hbox to\b@xwidth{%
+ \dimen@=\b@xwidth \divide\dimen@ by\count255%
+ \advance\b@xwidth by -\dimen@%
+ \caseslash%
+ }%
+ \nointerlineskip%
+ \vskip -1pt%
+ \divide\b@xwidth by\count255%
+ \hsize=\b@xwidth%
+ \def\CASE(##1)##2{\hskip \z@\vbox{\S{##1}}%
+ \vrule width\flnwidth\kern-\flnwidth\hskip \z@}%
+ \def\DEFAULT(##1)##2{\hskip \z@\vbox{\S{##1}}%
+ \hskip \z@}%
+ \hbox{\hskip \z@#2}%
+ \vskip -1pt%
+ \def\CASE(##1)##2{\hskip \z@%
+ \vbox{##2}\vrule width\flnwidth\kern-\flnwidth\hskip \z@%
+ }%
+ \def\DEFAULT(##1)##2{\hskip \z@%
+ \vbox{##2}\hskip \z@%
+ }%
+ \nointerlineskip%
+ \let\VOID\cross%
+ % maximale H"ohe ermitteln und \b@xheight setzten
+ \b@xheight=\z@%
+ \setbox0=\hbox{#2}\b@xheight=\ht0%
+ % Boxen setzten
+ \hbox{\hskip\z@#2\hskip\flnwidth}%
+ \nointerlineskip%
+ \endgroup%
+}%
+
+\def\caseslash{\begingroup%
+ \advance\count255 by -1%
+ \dimen@i=\z@ \dimen@ii=\boxindent \divide\dimen@ii by\count255%
+ \divide\dimen@ii by\quality%
+ \advance\count255 by -1%
+ \hbox to \b@xwidth{%
+ \loop%
+ \count254=\quality%
+ {\loop%
+ \vbox to \boxindent{%
+ \vskip\dimen@i\hrule width\flnwidth height\flnwidth\vss\vfill%
+ }%
+ \hss\hfill%
+ \global\advance\dimen@i by \dimen@ii \advance\count254 by -1%
+ \ifnum\count254>0%
+ \repeat}%
+ \advance\count255 by -1%
+ \ifnum\count255>0%
+ {\dimen@ii=\boxindent \advance\dimen@ii by -\dimen@i%
+ \vbox to \boxindent{%
+ \vskip\dimen@i\hrule width\flnwidth height\dimen@ii\vss\vfill%
+ }%
+ \hss\hfill%
+ }%
+ \repeat%
+ \hfill%
+ }%
+ \hbox to\dimen@{%
+ \dimen@ii=\boxindent \divide\dimen@ii by\quality%
+ \count 254=\quality%
+ \dimen@i=\boxindent%
+ \loop%
+ \vbox to \boxindent{%
+ \vskip\dimen@i\hrule width\flnwidth height\flnwidth\vss\vfill%
+ }%
+ \hss\hfill%
+ \advance\dimen@i by -\dimen@ii%
+ \advance\count254 by -1%
+ \ifnum\count254>0%
+ \repeat%
+ \hfill%
+ }%
+ \endgroup%
+}%
+
+\def\cross{%
+ \ifdim\b@xheight=\z@\else % ignorieren, wenn wir beim scannen sind%
+ \baselineskip=\flnwidth%
+ \vskip \z@%
+ \vbox to \b@xheight{%
+ \dimen@=\b@xwidth \advance\dimen@ by -2\flnwidth%
+ \count254=\quality \dimen@i=\b@xwidth \divide\dimen@i by\count254%
+ \multiply\dimen@i by 2%
+ \loop%
+ \vskip \z@%
+ \hbox to \b@xwidth{%
+ \hfill\vrule height\flnwidth width\flnwidth%
+ \hskip\dimen@ \vrule height\flnwidth width\flnwidth\hfill%
+ }%
+ \vss%
+ \advance\dimen@ by -\dimen@i%
+ \advance\count254 by -1%
+ \ifnum\count254>0%
+ \repeat%
+ }%
+ \hrule height \flnwidth%
+ \fi%
+}%
+
+\def\IF(#1)#2{
+ \@ifnextch@r \bgroup{\@ifthenelse{#1}{#2}}{\@ifthen{#1}{#2}}}
+
+\def\@ifthenelse#1#2#3{\SWITCH(#1){\CASE(\fnyes){#2}\DEFAULT(\fnno){#3}}}
+\def\@ifthen#1#2#3{\SWITCH(#1){\CASE(\fnyes){#2}\DEFAULT(\fnno){\VOID}}}
+
+\def\FOR(#1)#2(#3)#4{\let\fnwhile\fnfor\WHILE(#1 { \tt #2 } #3){#4}}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% nodes
+%
+%
+% \@exprht -> \skip for titles that span multiple lines
+\newdimen\@exprht \@exprht=\z@
+% \halfnodeindent -> half of the indentation for subnodes
+\newskip\halfnodeindent \halfnodeindent=1em
+% \maxnode -> last number for reference node
+\newcount\maxnode \maxnode=\z@
+
+% gereral leaders
+\def\leaderb@r{\cleaders\hrule width.5pt\vfil}
+\def\le@derwr{\cleaders\vbox{\vskip 5.7pt\smash{$\wr$}}\vfil}
+
+% \node<c>{name}<t>{title}{subnodes} -> prints a note
+% <c> -> optional argument specifying leaders:
+% <c>=! -> bar
+% <c>=~ -> serpentine line
+% <c>+=+ -> this one is a refnode
+% {name} -> name of this note, will be set in angles '<name>'
+% or name of refnode
+% <t> -> optional character specifying if there is a title
+% <t>=- -> there is a title (not for reference nodes)
+% {title} -> title for this node, will be set \hangindent`ed
+% {subnode} -> optional argument specifying subnodes
+%
+\def\node{\bgroup%
+ \parindent\z@ \@exprht=\z@%
+ \@ifnextch@r \bgroup{\i@node\space}%
+ \i@node}%
+
+% \i@node sets leaders and checks for reference node
+% #1 -> \space if there are no options or the option token
+\def\i@node#1{%
+ % setup leader bar
+ \let\leaderbar\empty \let\next\ref@node%
+ \ifx!#1\let\leaderbar\leaderb@r%
+ \else\ifx~#1\let\leaderbar\le@derwr%
+ \else\ifx+#1\let\next\fref@node%
+ \fi\fi\fi%
+ \@ifnextch@r +\ref@node{\next\space}}%
+
+\def\fref@node#1{\ref@node+}%
+
+% \ref@node -> checks for refnotes and defnodes
+%
+\def\ref@node#1#2{%
+ \ifx+#1\let\next=\v@node%
+ \else\let\next=\ii@node%
+ \fi%
+ \@ifnextch@r -{\next{#2}}{\next{#2}\space}}%
+
+% \ii@node -> checks for title
+% #1 -> name or subnodes
+% #2 -> '-' if there is a title
+\def\ii@node#1#2{%
+ \ifx-#2\let\next=\iii@node%
+ \else\let\next=\iv@node%
+ \fi%
+ \next{#1}}%
+
+% \iii@node -> expands notes with title
+% #1 -> name
+% #2 -> title
+\def\iii@node#1#2{%
+ \vbox\bgroup%
+ \setbox0=\vbox{\hangindent 3\halfnodeindent\strut$\langle${#1}%
+ $\rangle\longrightarrow$ #2\strut\par}%
+ \@exprht=\ht0%
+ \vbox{\box0\vskip-\@exprht\vskip 10pt}%
+ \advance\@exprht-10pt%
+ \@ifnextch@r \bgroup \expsubn@de \skip@title%
+}%
+
+% \skip@title -> skips vertical space for node with title but without subnodes
+\def\skip@title{%
+ \ifdim\@exprht>\z@%
+ \hbox to 2\halfnodeindent{\hss\vbox to \@exprht{\leaderbar}\hss}%
+ \fi%
+ \egroup\egroup%
+}%
+
+% \iv@node -> expands ordinary nodes
+% #1 -> name
+\def\iv@node#1{%
+ \vbox\bgroup%
+ \hbox{\strut$\langle${#1}$\rangle$}%
+ \@ifnextch@r \bgroup \expsubn@de {\egroup\egroup}}%
+
+% \v@node -> expand a reference node
+% #1 -> name
+% #2 -> ignored
+\def\v@node#1#2{%
+ \vbox\bgroup%
+ \hbox to \tw@\halfnodeindent{\hss\nodemark{#1}\hss}%
+ % force \skip below node
+ \@exprht=6pt%
+ \@ifnextch@r \bgroup \expsubn@de {\expsubn@de{}}}%
+
+% \nodemark -> \bigcirc with argument centered
+\def\nodemark#1{%
+ \@ifundefined{n@#1}{\newnode{#1}}{}%
+ \hbox to 10pt{\rlap{$\bigcirc$}\hfil$\scriptstyle%
+ \nodech@r{#1}$\hfil}}%
+
+% \nodech@r -> gets character for a defnode name
+% #1 -> name
+\def\nodech@r#1{
+ \expandafter\ifcase\csname n@#1\endcsname\nodetable\fi}
+
+\def\nodetable{
+ a\or b\or c\or d\or e\or f\or g\or h\or i\or k\or
+ l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or
+ v\or w\or x\or y\or z\else *}
+
+% \newnode -> creates a command sequence \n@<name> wich is set
+% to \maxnode++ and adds it to the restore list
+% #1 -> name
+\def\newnode#1{%
+ \expandafter\xdef\csname n@#1\endcsname{\the\maxnode}%
+ \global\advance\maxnode 1%
+ \addton@des{n@#1}}%
+
+\def\killnod@s{}%
+\def\addton@des#1{\begingroup%
+ \let\r@store\relax%
+ \xdef\killnod@s{\killnod@s\r@store{#1}}\endgroup}%
+
+\def\killnodes{\begingroup%
+ \def\r@store##1{%
+ \expandafter\let\csname ##1\endcsname\relax}%
+ \killnod@s\xdef\killnodes{}\endgroup\global\maxnode=\z@}%
+
+% \expsubn@de -> expands a subnode
+% #1 -> subnodes
+\def\expsubn@de#1{%
+ \hbox{%
+ \setbox0=\vbox{\advance\hsize -2\halfnodeindent\vskip\@exprht\relax #1}%
+ \hbox to 2\halfnodeindent{\hss\vbox to \ht0{\leaderbar}\hss}%
+ \box0%
+ }%
+ \egroup\egroup%
+}%
+
+\catcode`@=12 % Make AT other
+
+% end of file fchart.tex
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC.tex
new file mode 100644
index 0000000000..b8f28c590b
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC.tex
@@ -0,0 +1,124 @@
+% FEYNMANDOC.TEX
+%
+% DOCUMENTATION FOR RUNNING FEYNMAN.TEX IN LATEX.
+%
+% \includes the following files:
+% FEYNMANDOC1.TEX: Chapter 1.
+% FEYNMANDOC2A.TEX: Chapter 2 up to list of styles of PHOTONS.
+% FEYNMANDOC2B.TEX: Chapter 2 to the end of PHOTONS.
+% FEYNMANDOC2C.TEX: Chapter 2 GLUONS part one.
+% FEYNMANDOC2D.TEX: Chapter 2 GLUONS part two.
+% FEYNMANDOC2E.TEX: Chapter 2 GLUONS part three.
+% FEYNMANDOC2F.TEX: Chapter 2 GLUONS part four.
+% FEYNMANDOC2G.TEX: Chapter 2 ARROWS.
+% FEYNMANDOC2H.TEX: Chapter 2 Labels and Review Exercise.
+% FEYNMANDOC3A.TEX: Chapter 3
+% FEYNMANDOC3B.TEX: Chapter 3
+% FEYNMANDOC3C.TEX: Chapter 3
+% FEYNMANDOC3D.TEX: Chapter 3
+% .
+% .
+% FEYNMANDOCEXER.TEX: Appendix A: Solution to Exercises.
+%
+\documentstyle[11pt]{report}
+%
+\input FEYNMAN
+%\includeonly{FEYNMANDOCTITLEA,FEYNMANDOCPRELIMS,FEYNMANDOC1}
+%\includeonly{FEYNMANDOC2A,FEYNMANDOC2B}
+
+%\includeonly{FEYNMANDOCPRELIMS}
+%\includeonly{FEYNMANDOC1}
+%\includeonly{FEYNMANDOC2A}
+%\includeonly{FEYNMANDOC2B}
+%\includeonly{FEYNMANDOC2C}
+%\includeonly{FEYNMANDOC2D}
+%\includeonly{FEYNMANDOC2E}
+%\includeonly{FEYNMANDOC2F}
+%\includeonly{FEYNMANDOC2G}
+%\includeonly{FEYNMANDOC2H}
+%\includeonly{FEYNMANDOC3A}
+%\includeonly{FEYNMANDOC3B}
+%\includeonly{FEYNMANDOC3C}
+%\includeonly{FEYNMANDOC3D}
+%\includeonly{FEYNMANDOC3E}
+%\includeonly{FEYNMANDOC4A}
+%\includeonly{FEYNMANDOC4B}
+%\includeonly{FEYNMANDOC4C}
+%\includeonly{FEYNMANDOC4D}
+%\includeonly{FEYNMANDOC4E}
+%\includeonly{FEYNMANDOC4F}
+%\includeonly{FEYNMANDOC4G}
+%\includeonly{FEYNMANDOC4H}
+%\includeonly{FEYNMANDOC4I}
+%\includeonly{FEYNMANDOC4J}
+%\includeonly{FEYNMANDOCEXER}
+%\includeonly{FEYNMANDOCAPPB}
+%\includeonly{FEYNMANDOCAPPC}
+%
+%\voffset=-0.750in
+%\hoffset=-0.75in
+\voffset=-0.750in
+\voffset=-0.75in
+\hoffset=-0.2in
+\def\FEYNMAN{{\large\bf FEYNMAN}}
+\def\bs{$\backslash$}
+\def\bbeginpic{\bs begin\{picture\}}
+\def\eendpic{\bs end\{picture\}}
+\def\ddrawline{\bs drawline}
+\def\ddrawvertex{\bs drawvertex}
+\def\gddrawline{\ddrawline\ggluon[\bs E \bs REG]}
+\def\ppback{(\bs pbackx,\bs pbacky)}
+\def\etc{{\it etc.\ }}
+\def\ie{{\it i.e.\ }}
+%\textheight 650pt \textwidth 400pt
+%\textheight 725pt \textwidth 450pt
+%\textheight 700pt \textwidth 450pt
+\textheight 700pt \textwidth 450pt
+%\setlength{\textheight}{9in}
+%\setlength{\textwidth}{7.0in}
+%\textheight 9.5in \textwidth 7.0in
+
+\title{{\Huge\bf FEYNMAN}\\[1in]\Large A \LaTeX\ Routine
+for Generating Feynman Diagrams\\
+{\small Version 1.0}}
+\author{Michael Levine} % Declares the author's name.
+\date{Oct. 21, 1988} % Deleting this command produces today's date.
+
+\begin{document} % End of preamble and beginning of text.
+
+%*** THE FOLLOWING IS READ IN BY FEYNMANDOC.INC ***
+
+%\callvertex
+\include{FEYNMANDOCTITLEA}
+%\include{FEYNMANDOCTITLE}
+\voffset=-1.30in
+\hoffset=-0.50in
+\include{FEYNMANDOCPRELIMS}
+\include{FEYNMANDOC1}
+\include{FEYNMANDOC2A}
+\include{FEYNMANDOC2B}
+\include{FEYNMANDOC2C}
+\include{FEYNMANDOC2D}
+\include{FEYNMANDOC2E}
+\include{FEYNMANDOC2F}
+\include{FEYNMANDOC2G}
+\include{FEYNMANDOC2H}
+\include{FEYNMANDOC3A}
+\include{FEYNMANDOC3B}
+\include{FEYNMANDOC3C}
+\include{FEYNMANDOC3D}
+\include{FEYNMANDOC3E}
+\include{FEYNMANDOC4A}
+\include{FEYNMANDOC4B}
+\include{FEYNMANDOC4C}
+\include{FEYNMANDOC4D}
+\include{FEYNMANDOC4E}
+\include{FEYNMANDOC4F}
+\include{FEYNMANDOC4G}
+\include{FEYNMANDOC4H}
+\include{FEYNMANDOC4I}
+\include{FEYNMANDOC4J}
+\include{FEYNMANDOCEXER}
+\include{FEYNMANDOCAPPB}
+\include{FEYNMANDOCAPPC}
+\end{document}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC1.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC1.tex
new file mode 100644
index 0000000000..6504874aed
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC1.tex
@@ -0,0 +1,223 @@
+% FEYNMANDOC1 RUN BY BATCH1 OR PRINTDOC
+% FEYNMAN DOCUMENTATION - CHAPTER 1 - INTRODUCTION
+%\tableofcontents moved to FEYNMANDOCPRELIMS
+%
+\pagenumbering{arabic}
+\setcounter{page}{1}
+\chapter{Introduction}
+
+\section{What is FEYNMAN?}
+
+\FEYNMAN\ is a \LaTeX\ macropackage which allows the user to easily draw
+Feynman diagrams as part of the text of a \LaTeX\ document.
+
+\section{What is \LaTeX?}
+
+\LaTeX\ is a \TeX\ macropackage, that is a collection of definitions and
+subroutines, which modifies and expands upon
+the basic \TeX\ commands by establishing
+a series of {\em environments}.
+In your input document these environments have the form
+\begin{center}
+\bs begin\{environment name\} \\
+$ \vdots $ \\
+\bs end\{environment name\}
+\end{center}
+The above was produced in the {\em center} environment.
+
+\FEYNMAN\ operates in the {\em picture} environment. For full details
+about this environment, or \LaTeX\ in general, the \LaTeX\ User's
+Guide and Reference Manual by Leslie Lamport is most highly recommended.
+A basic familiarity with \LaTeX\ will be assumed in this manual.
+
+\section{How is FEYNMAN used?}
+
+Prior to entering the picture environment to draw a Feynman diagram the
+%user must (at the time which this document was prepared) issue the statement
+user must\footnote{This is true at the time which this document is being
+prepared for the Cavendish Laboratories HEP Vax system, Cambridge, England.}
+issue the statement
+%\begin{center} \bs input HEP0::FEYNMAN \end{center}
+\begin{center} \bs input FEYNMAN \end{center}
+This may be included at the beginning of the document (following
+\bs begin\{document\}) or immediately preceeding the first usage of
+\FEYNMAN\ as in
+\begin{center} \bs input FEYNMAN \\
+ \bs begin\{picture\} \\
+ $\vdots$\\
+ \bs end\{picture\}
+\end{center}
+Of course normal picture environment commands may be used in conjunction
+with those of \FEYNMAN.
+
+\section{How does FEYNMAN work?}
+
+Basically \FEYNMAN\ pieces together mathematical symbols
+and special characters in order to draw the lines and vertices of Feynman
+diagrams. If you are not familiar with what a Feynman diagram is
+you probably do not need to use this package in any event.
+\LaTeX\ has defined a number of new character fonts. The ones which are used
+in this macropackage draw pieces of lines and circles. These are then
+pieced together in certain modular configurations and stored with the
+{\it savebox} facility of \LaTeX. These pieces are in turn used to
+construct more complicated structures and so forth. Only the basic
+\LaTeX\ fonts are required, not the extended sets.
+
+This latter point was instituted to permit greater compatibility with other
+systems. The disadvantage is that the basic set has an extremely limited
+range of characters to play with and thus there is little scope for adjusting
+the size and shape of particle lines which one might wish to be be drawn.
+For instance
+there are only ten different sized circles and the minimum length of
+a diagonal line is about half a centimeter. A further deficiency of
+standard \LaTeX\ (or \TeX\ for that matter) implementations is the small
+amount of internal working space which the program permits.
+This restricts the volume of text which may be processed at a time.
+Since \FEYNMAN\ eats up a lot of internal memory, and a great deal more
+is required to store the positions of all of the individual symbols
+which go into drawing a complicated diagram, one is restricted in
+the maximum size and complexity
+of picture which may be drawn. This, and a possible
+remedy, will be further discussed in the ERRORS section at the end.
+
+\section{The Basics}
+
+This manual is divided into essentially three sections. The first
+(chapters two and three) illustrates the basic commands for drawing
+particle lines and vertices. The second (chapter four) details some
+advanced features and uses. The third consists of various appendices
+and the solutions to problems posed at random throughout.
+
+In the {\it picture mode} of \LaTeX, in which \FEYNMAN\ operates,
+a {\em grid} is established with Cartesian $(x,y)$ co-ordinates on which
+the picture is drawn.
+The scale of the grid is normally user-defined but \FEYNMAN\ utilizes a
+default grid size in which all distances are measured in {\bf centipoints}.
+One centipoint is 1/7227 of an inch or 0.14 mils or 0.0035 millimeters
+or 3.5 microns. This is an exceedingly small measure but there is a reason for
+this. All numbers input to \FEYNMAN's parameters, in particular lengths
+and positions, must be integers. You will probably find it most convenient to
+think of lengths in terms of thousands of centipoints;
+a thousand centipoints equalling one seventh of an
+inch or one third of a centimeter. The eye is quite capable of detecting
+displacements of one centipoint (or even less) even if the system printer
+is incapable of such resolution. Printers will, however, round positions to
+the nearest pixel and accurate positioning will aid correct rounding.
+
+When drawing a Feynman diagram the user should have a rough sketch of
+the picture, including labelling, arrows \etc
+He or she should then select a {\em box size}, in centipoints,
+into which the picture should be placed. This will determine size of the block
+allocated on your page, possibly between text, equations or other
+pictures, which will be given to the current picture.
+One then issues the command:\\
+\bbeginpic(7000,7000)\\
+which enters picture mode and sets the box size to be $7000\times 7000$,
+or roughly 1 inch by 1 inch. Any box size may be used, up to the
+declared size of the page.
+When \FEYNMAN\ is input it automatically
+sets the scale and this will be retained unless re-defined by the user.
+{\em This cannot be done while \FEYNMAN\ is in effect or disaster will
+ensue.}
+
+Next the user must select a co-ordinate, generally (0,0), from which to
+start drawing the diagram. You need not keep track of the numerical
+co-ordinates thereafter, \FEYNMAN\ will do that for you. In fact that
+is the whole point of the program. You tell it what you want drawn, in which
+direction and how long (in some sense) it should be and it will do it.
+After drawing a line (or vertex) all of the important positions will be
+given names and you can specify {\it these} to tell it where to commence
+the next line. In point of fact you can usually begin your diagram at any
+point in it and fill the lines in many different orders. A little experience
+will show that it is usually easiest to start at one end, or branch, and
+work your way along. This way the same position names may be re-used,
+superseding the old values. The details will be given in chapter~2.
+When the picture is complete the command:\\
+\eendpic\\
+is issued.
+
+The basic command for drawing lines is \ddrawline. With this all
+standard line and vertex types may be drawn. In addition a number
+of specialized vertices have been pre-defined. These are drawn with
+the \ddrawvertex\ command which is discussed in chapter three.
+
+\section{Getting Started}
+
+A basic familiarity with \FEYNMAN\ may be obtained by reading chapter one and
+sections 2.1-2.7 and 2.9.
+The following small sample file illustrates the basic form of a
+file utilizing \FEYNMAN.
+
+\begin{verbatim}
+
+\documentstyle[12pt]{article}
+\begin{document}
+\input FEYNMAN
+\textheight 800pt \textwidth 450pt
+The gluon then branches into a pair of partons, in this case a quark-antiquark
+pair:
+
+\begin{picture}(10000,18000)
+\drawline\gluon[\S\REG](0,16000)[8]
+\put(2500,\pmidy){Times 3 colours}
+\drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+\end{picture}
+\hskip 1.38 in
+\begin{picture}(10000,18000)
+\drawline\gluon[\S\CENTRALGLUON](0,16000)[8]
+\drawline\scalar[\SW\REG](\gluonbackx,\gluonbacky)[5]
+\drawline\scalar[\SE\REG](\gluonbackx,\gluonbacky)[5]
+\end{picture}
+
+Where the second picture is the interaction with the hypothesized squark.
+\end{document}
+
+\end{verbatim}
+
+A few brief points should be made about the above. The {\em textheight}
+and {\em textwidth} set the pagesize, made larger than usual in the above
+in order to draw longer and wider pictures.
+The \bs{\em put} command is a basic \LaTeX\ command for placing text in
+a picture. The commands {\em \bs hskip, \bs vskip} may be used for adding
+extra space, horizontally and vertically, where needed.
+Any size ([10pt],[11pt] or [12pt]) and style of document may be
+specified and the resultant diagrams will be unaffected with one
+exception.\footnote{The exception is that when horizontal photons are drawn in
+a [12pt] document, that the command ``\bs bigphotons'' must appear
+somewhere between the \bs input FEYNMAN statement and the first
+time that such a photon is drawn.}
+The reader might
+wish to duplicate the above example and run it to see the results.
+
+Running and printing a \LaTeX\ file is a system-dependent operation.
+On the Cavendish Labs Vax, where this program was developed,
+the syntax is: LATEX $<$filename$>$\\
+with default filetype `TEX'. To print out the compiled file on the
+LN03 laser printer the commands:\\
+%\newpage
+\vbox{
+DVI2LN3 $<$filename$>$.DVI /H=337.5 /V=200 \\
+PRINT/QUEUE=LN03 $<$filename$>$.LN3 \\
+}
+would be issued. It is generally easier to define a command file,
+called PRINTLATEX.COM, or some such, of the form:
+
+\vbox{
+\begin{verbatim}
+
+$! To print out a Latex file
+$ LATEX 'P1'
+$ DVI2LN3 'P1'.DVI /H=337.5 /V=200 ! /s=14 /n=1
+$ PRINT/QUEUE=LN03 'P1'.LN3
+$ DELETE 'P1'.DVI;*
+$ DELETE 'P1'.LIS;*
+$ DELETE 'P1'.AUX;*
+\end{verbatim}
+}
+\quad \\
+which would be executed by @PRINTLATEX $<$filename$>$ and would further
+delete the additional files which \LaTeX\ will place on your disk.
+On other computer systems the implementation will be somewhat different.
+
+The syntax of the various \FEYNMAN\ commands will now be presented.
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2A.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2A.tex
new file mode 100644
index 0000000000..65ee3bebb7
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2A.tex
@@ -0,0 +1,670 @@
+\chapter{Drawing Lines}
+
+\section{The \ddrawline\ Command}
+
+The principal command for drawing a particle line in \FEYNMAN\ is
+via the {\it \ddrawline}\ statement. The syntax is:\\
+%\ddrawline$<$particle type$>$[$<$particle direction$> <$configuration$>$]
+%$<$co-ordinates of the beginning of the line of form $(x,y)>$[$<$length$>$\\
+\begin{verbatim}
+
+\drawline<particle type>[<particle direction><configuration>]
+ <(x,y), the co-ordinates of the beginning of the line>[<length>]
+
+\end{verbatim}
+where it is understood that the triangular brackets do not appear in the
+syntax but their contents describe what goes in that position.
+An example would be:
+\begin{verbatim}
+
+\drawline\photon[\NW\FLIPPED](1500,-18000)[6]
+
+\end{verbatim}
+which would draw a photon (or W,Z) starting from the point (1500,-18000),
+with distances in centipoints (section 1.5), in the NorthWesterly direction
+(\ie towards the upper lefthand corner), in a {\it flipped} configuration
+(described below) for an extent of 6 `units'. In the case of photons
+each unit is a `half-wiggle'. The actual distance traversed on the page
+is not specified since photons come in distinct `quanta', in this case
+half-wiggles.
+
+When the above statement is issued a number of parameters are returned.
+These may be used by the artiste (this is `Feyn Art').
+These are:
+\begin{verbatim}
+
+\photonfrontx,\photonfronty: The (x,y) co-ordinates of the front of the line.
+\photonbackx,\photonbacky: The (x,y) co-ordinates of the back of the line.
+\photonlengthx,\photonlengthy: The (x,y) extent of the line.
+\photoncount The number of photons printed thus far.
+\particlefrontx,\particlefronty: The (x,y) co-ords of the front of the line.
+\particlemidx,\particlemidy: The (x,y) co-ordinates of the middle of the line.
+\particlebackx,\particlebacky: The (x,y) co-ordinates of the back of the line.
+\particlelengthx,\particlelengthy: The (x,y) extent of the line.
+
+\end{verbatim}
+
+All of the terms beginning with `\bs particle' may be abbreviated to
+`\bs p' plus the rest of the name. For instance, \bs pmidx is the
+same as \bs particlemidx \etc
+You may be wondering why there is some duplication, such as
+\bs pfrontx and \bs photonfrontx. The reason is that terms beginning with
+{\it \bs particle} refer to the last particle line drawn by \ddrawline\
+whereas those commencing with {\it \bs photon} refer only to the last
+{\em photon line} drawn. This distinction often proves to be most
+convenient.
+
+To illustrate this point consider the following combination of
+statements:
+\begin{verbatim}
+
+\input FEYNMAN
+
+\vskip -0.7in
+\begin{picture}(18000,8000)
+\drawline\gluon[\S\CURLY](0,0)[8]
+\drawline\fermion[\SW\REG](\particlebackx,\particlebacky)[2500]
+\drawline\fermion[\SE\REG](\particlebackx,\particlebacky)[2500]
+\drawline\gluon[\S\CURLY](10000,0)[8]
+\drawline\fermion[\SW\REG](\particlebackx,\particlebacky)[2500]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2500]
+\end{picture}
+
+\vskip 1.5in
+
+\end{verbatim}
+which produces the following results:
+%\input FEYNMAN % MOVED TO FEYNMANDOC.TEX calling routine.
+\vskip -0.7in
+\begin{picture}(18000,8000)
+\drawline\gluon[\S\CURLY](0,0)[8]
+\drawline\fermion[\SW\REG](\particlebackx,\particlebacky)[2500]
+\drawline\fermion[\SE\REG](\particlebackx,\particlebacky)[2500]
+\drawline\gluon[\S\CURLY](10000,0)[8]
+\drawline\fermion[\SW\REG](\particlebackx,\particlebacky)[2500]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2500]
+\end{picture}
+
+\vskip 1.5in
+
+We see immediately what the difference is.
+In the first diagram \bs particlebackx,y refers, first to the gluon after
+it is drawn, and then to the \bs SW fermion after that has been drawn.
+If a third reference to those co-ordinates had been made it would have referred
+to the final co-ordinates of the \bs SE fermion.
+The second gluon line begins 10000 centipoints to the right of the first.
+This time the \bs SE fermion commences at \bs gluonbackx,y which is the
+end co-ordinates of the gluon and will remain so until the end of the
+picture of until another gluon is drawn.
+
+We now proceed to detail the various parameters of the \ddrawline\ command
+given above.
+
+\section{The Types of Particle Lines}
+
+The four basic kinds of particle lines which \FEYNMAN\ can draw are
+given by the following input parameters:
+\begin{verbatim}
+
+\fermion
+\scalar
+\photon
+\gluon
+
+\end{verbatim}
+A fifth category, {\tt \bs especial}, which allows the user to define his
+own non-standard style of line, has not yet been implemented.
+As we have seen this is the first input parameter of \ddrawline\ and
+is implemented as
+\begin{verbatim}
+ \drawline\fermion...
+ \drawline\scalar...
+ \drawline\photon...
+ \drawline\gluon...
+\end{verbatim}
+
+Note that this is the only argument of \ddrawline\ which is in lowercase
+letters. The specifics of each of these will be given in separate sections.
+
+\section{Particle Direction}
+
+Each particle line may be drawn in any of eight possible directions,
+specified by the points of the compass with North always understood
+as being at the top of the page:
+
+\begin{verbatim}
+
+ \N \NE \E \SE \S \SW \W \NW
+
+\end{verbatim}
+This is the second argument of \ddrawline.
+\begin{verbatim}
+\drawline\photon[\NW...
+\end{verbatim}
+and so forth. The line is drawn from the specified {\it front} point
+in the indicated direction. Note that all directions are in uppercase
+and don't forget the backslash!
+
+\section{Line Configuration}
+
+Many different particle types are available in a variety of forms.
+For the specific forms available see the section on the appropriate
+particle type below. The current configurations available are:
+
+\begin{verbatim}
+
+\REG
+\FLIPPED
+\CURLY
+\FLIPPEDCURLY
+\FLAT
+\FLIPPEDFLAT
+\CENTRAL
+\FLIPPEDCENTRAL
+\LONGPHOTON
+\FLIPPEDLONG
+\SQUASHEDGLUON
+
+\end{verbatim}
+
+The shape of the individual particle types will be presented shortly but
+a few general words might be given here. First, not every particle type
+exists in all configurations in all directions. \bs REG is something
+of a default (although \verb@\REG@\ must still be included as a parameter
+in \ddrawline) and is defined for all particles in all directions.
+It may not be your own \ae sthetic favourite, however. \bs FLIPPED lines
+are inverted about their axes with respect to the \bs REG lines, but
+are otherwise the same. Obviously, since fermions and scalars are merely
+straight lines, the \bs REG and \bs FLIPPED configurations will be the same.
+In fact for these two particle types \bs REG is the {\bf only}
+legitimate configuration (but see \bs THICKLINES at the conclusion of
+this section). The other configurations do not, in general, exist for
+all of the directions available to a particle. \bs FLIPPEDCURLY,
+\bs FLIPPEDCENTRAL, \bs FLIPPEDLONG
+and \bs FLIPPEDFLAT are flipped along the direction
+axis when compared with \bs CURLY, \bs CENTRAL, \bs LONGPHOTON and \bs FLAT
+respectively. \bs CENTRAL and \bs FLIPPEDCENTRAL exist only for
+gluons (\bs gluon), \bs LONGPHOTON and \bs FLIPPEDLONG exist only for photons,
+while \bs SQUASHED exists only for gluons in the \bs E
+direction!
+
+The line configuration is the third input to \ddrawline\ and follows
+the direction within the square brackets with no intervening spaces:
+
+\begin{verbatim}
+
+\drawline\scalar[\S\REG]...
+\drawline\gluon[\NW\FLIPPED]...
+
+\end{verbatim}
+and so forth.
+
+A final word concerns the \bs THINLINES and \bs THICKLINES commands.
+When issued prior to a \ddrawline\ or \ddrawvertex\ statement
+they cause the particle lines to be drawn in a thin or thick fashion
+This remains in effect until superseded or the end of the picture is
+encountered. The default is \bs THINLINES.
+% The only lines which
+%cannot be drawn in a thick mode are photons in the
+These commands are identical to the \LaTeX\ \bs thinlines and
+\bs thicklines commands except when drawing photons in the
+\verb@\E@ and \verb@\W@ directions (any configuration).
+These will not be emboldened by \bs thicklines but will be by
+\bs THICKLINES. Photons in the
+\verb@\N@ and \verb@\S@ directions (any configuration)
+are unaffected since they are drawn in an intermediate state.
+The following illustrates the difference:
+
+\begin{verbatim}
+
+\begin{picture}(8000,2000)
+\drawline\gluon[\E\FLIPPEDCENTRAL](0,0)[5]
+\end{picture}
+
+\begin{picture}(8000,2000)
+\THICKLINES
+\drawline\gluon[\E\FLIPPEDCENTRAL](0,0)[5]
+\end{picture}
+
+\end{verbatim}
+which produces
+
+\begin{picture}(8000,2000)
+\drawline\gluon[\E\FLIPPEDCENTRAL](0,0)[5]
+\end{picture}
+
+\begin{picture}(8000,2000)
+\thicklines
+\drawline\gluon[\E\FLIPPEDCENTRAL](0,0)[5]
+\end{picture}
+
+\section{Line Co-ordinate Parameters}
+
+\subsection{Input Parameters}
+
+The fourth and fifth arguments of the \ddrawline\ command
+are the (x,y) co-ordinates of the {\em beginning} of the particle
+line. these are as measured in {\em centipoints} on the grid
+which \FEYNMAN\ has established. They are entered in the format
+$(x\ co$-$ordinate,y\ co$-$ordinate)$\ where $x$ and $y$ may be integer
+numbers (between, roughly, -30,000 and +30,000) or variables
+(counters) with numerical values. A number of variables have been
+pre-defined and available for use. The user may also define his own
+(see section 4.2.1 on storing information). Some samples may be
+illustrative:
+\begin{verbatim}
+
+\drawline\fermion[\SE\REG](-1500,12000)[2000]
+\drawline\gluon[\E\SQUASHEDGLUON](\photonbackx,\photonbacky)[2]
+\drawline\scalar[\N\REG](\Xone,\Yone)[11]
+\drawline\photon[\S\FLIPPEDFLAT](3000,\pmidy)[7]
+
+\end{verbatim}
+
+In the above \bs photonbackx and \bs photonbacky are co-ordinates,
+presumably returned from a previously drawing a photon.
+\bs Xone and \bs Yone are some values stored by the user and
+\bs pmidy is the ordinate of the midpoint of the previously drawn line.
+Note in the last example how the x co-ordinate is a number while
+the y co-ordinate is a variable.
+
+\subsection{Output Parameters}
+
+As discussed in section 2.1 a number of useful positional parameters
+are returned when \ddrawline\ is called.
+For the appropriate lines the following are defined, each definition superseding
+the previous value of the variable.
+
+For all lines:
+\begin{verbatim}
+
+\particlefrontx,\particlefronty: The (x,y) co-ords of the front of the line.
+\particlemidx,\particlemidy: The (x,y) co-ordinates of the middle of the line.
+\particlebackx,\particlebacky: The (x,y) co-ordinates of the back of the line.
+
+\end{verbatim}
+For photons:
+\begin{verbatim}
+
+\photonfrontx,\photonfronty: The (x,y) co-ordinates of the front of the photon.
+\photonbackx,\photonbacky: The (x,y) co-ordinates of the back of the photon.
+
+\end{verbatim}
+For gluons:
+\begin{verbatim}
+
+\gluonfrontx,\gluonfronty: The (x,y) co-ordinates of the front of the gluon.
+\gluonbackx,\gluonbacky: The (x,y) co-ordinates of the back of the gluon.
+
+\end{verbatim}
+For fermions:
+\begin{verbatim}
+
+\fermionfrontx,\fermionfronty: The (x,y) co-ordinates of the front of the fermion.
+\fermionbackx,\fermionbacky: The (x,y) co-ordinates of the back of the fermion.
+
+\end{verbatim}
+For scalars:
+\begin{verbatim}
+
+\scalarfrontx,\scalarfronty: The (x,y) co-ordinates of the front of the scalar.
+\scalarbackx,\scalarbacky: The (x,y) co-ordinates of the back of the scalar.
+
+\end{verbatim}
+As an illustration the command\\
+\verb@ \drawline\fermion[\E\REG](0,0)[2000] @ \\
+has \\
+\begin{verbatim}
+ \pfrontx=0 \pfronty=0
+ \pmidx=1000 \pmidy=0
+ \pbackx=2000 \pbacky=0
+\end{verbatim}
+
+
+\section{Line Length}
+
+\subsection{Input Parameters}
+
+The final parameter to be given to \ddrawline\ is the {\it length}
+of the particle to be drawn. The units in which the length is given
+vary between the four particle types. For fermions it is simply the
+actual length in centipoints. For scalars it is the number of line segments,
+each of which is separated by a {\it gap}. The scalar line always begins and
+ends on a line segment, never a gap. The default lengths of both segments
+and gaps may be overruled by the user (see the section on scalars).
+For gluons the length parameter is the {\em number of loops}.
+The actual length of each loop depends upon which style is selected and
+whether the gluon is drawn diagonally (at a slant) or not.
+For photons the unit of measure is not a `wiggle', but a `half-wiggle'.
+This enables one to produce a photon which both begins and ends on
+the `upward' (or `downward') part of its oscillation. This is illustrated
+in the following program:
+
+\begin{verbatim}
+
+\begin{document}
+\input FEYNMAN
+\textheight 600pt \textwidth 400pt
+
+\begin{picture}(20000,10000)
+\drawline\fermion[\E\REG](0,10000)[5000]
+\drawline\gluon[\E\REG](10000,10000)[5]
+\drawline\photon[\E\REG](0,5000)[5]
+\drawline\photon[\E\REG](0,0)[6]
+\drawline\scalar[\E\REG](10000,5000)[5]
+\seglength=1200 \gaplength=300 % Changes the \scalar defaults.
+\drawline\scalar[\E\REG](10000,0)[5]
+\end{picture}
+\end{document}
+
+\end{verbatim}
+\newpage
+which produces:
+
+\vskip 0.5in
+\begin{picture}(20000,10000)
+\drawline\fermion[\E\REG](0,10000)[5000]
+\drawline\gluon[\E\REG](10000,10000)[5]
+\drawline\photon[\E\REG](0,5000)[5]
+\drawline\photon[\E\REG](0,0)[6]
+\drawline\scalar[\E\REG](10000,5000)[5]
+\seglength=1200 \gaplength=300 % Changes the \scalar defaults.
+\drawline\scalar[\E\REG](10000,0)[5]
+\end{picture}
+\vskip 0.5in
+\subsection{Output Parameters}
+
+In the same way as co-ordinates related to the particle are returned,
+the {\em displacements} of the line are also given. These are
+essentially the $(\Delta x,\Delta y)$\
+between the ending and beginning co-ordinates. Thus a particle
+drawn in the \bs N direction will have positive \bs particlelengthy
+(\bs plengthy for short) and zero \bs particlelengthx.
+A particle in the \bs SE direction will have a positive \bs particlelengthx
+but a negative \bs particlelengthy (and these will be of the same magnitude).
+The full list is:
+
+\begin{verbatim}
+
+\particlelengthx,\particlelengthy: The (x,y) extent of the line.
+\photonlengthx,\photonlengthy: The (x,y) extent of the photon.
+\gluonlengthx,\gluonlengthy: The (x,y) extent of the gluon.
+\scalarlengthx,\scalarlengthy: The (x,y) extent of the scalar.
+\fermionlengthx,\fermionlengthy: The (x,y) extent of the fermion.
+\fermionlength The total length of the fermion.
+
+\end{verbatim}
+A common usage of this parameter would be to draw a fermion line
+to be the same length as, say, a gluon line.
+\begin{verbatim}
+\begin{picture}(9000,4500)
+\drawline\gluon[\E\REG](0,4000)[7]
+\drawline\fermion[\E\REG](0,0)[\gluonlengthx]
+\end{picture}
+\end{verbatim}
+\vskip 0.5in
+\begin{picture}(9000,4500)
+\drawline\gluon[\E\REG](0,4000)[7]
+\drawline\fermion[\E\REG](0,0)[\gluonlengthx]
+\end{picture}
+
+\vskip 0.2in
+Each time that a new line is drawn \bs plengthx,y are re-assigned.
+\bs photonlengthx,y is only re-assigned when the next photon is drawn,
+\bs gluonlengthx,y is only re-assigned when the next gluon is drawn \etc
+\newpage
+\section{Fermions}
+
+The format for drawing a fermion with \ddrawline\ is:
+\begin{verbatim}
+
+\drawline\fermion[<fermion direction>\REG]
+ <(x,y), the co-ordinates of the beginning of the fermion>[<length(cpt)>]
+
+\end{verbatim}
+where the arguments have been described in the preceding sections.
+When \FEYNMAN draws a fermion it uses the \bs line facility of \LaTeX.
+This places a restriction upon diagonally drawn fermions (those in the
+\bs NE, \bs SE, \bs NW and \bs SW directions). The minimum length of such
+lines is 1416 centipoints. The user can draw fermions in other directions
+(NNE \etc) by utilizing the \bs put command of \LaTeX. The minimum extension
+of these lines is at least as great. Fermions drawn in the N,S,E and W
+directions have no such restrictions. If attempts are made to draw a fermion
+of sub-minimal length it will be as though it were invisible. That is all of
+the spacing and parameters will be as before but a blank space will appear
+on the page. This effect may be deliberately achieved for {\em any}
+particle or vertex using the {\em phantom} facility discussed under
+advanced features.
+
+The only option really available for fermions is the use of \bs thicklines
+and \bs thinlines as described at the conclusion of section 2.4.
+The parameters returned by \ddrawline\ when a fermion is drawn are:
+\begin{verbatim}
+
+\fermionfrontx,\fermionfronty: The (x,y) co-ordinates of the front of the line.
+\fermionbackx,\fermionbacky: The (x,y) co-ordinates of the back of the line.
+\fermionlengthx,\fermionlengthy: The (x,y) extent of the line.
+\fermionlength The total length of the line.
+\fermioncount The number of fermions printed thus far.
+\particlefrontx,\particlefronty: The (x,y) co-ords of the front of the line.
+\particlemidx,\particlemidy: The (x,y) co-ordinates of the middle of the line.
+\particlebackx,\particlebacky: The (x,y) co-ordinates of the back of the line.
+\particlelengthx,\particlelengthy: The (x,y) extent of the line.
+
+\end{verbatim}
+As an example:
+
+\begin{verbatim}
+
+\begin{picture}(8000,8000)
+\drawline\fermion[\E\REG](0,0)[6000]
+\THICKLINES
+\drawline\fermion[\N\REG](\fermionbackx,\pbacky)[5000]
+\drawline\fermion[\SW\REG](\fermionbackx,\fermionbacky)[4000]
+\THINLINES
+\drawline\fermion[\NW\REG](\pmidx,\pmidy)[2000]
+\drawline\fermion[\W\REG](\pfrontx,\pfronty)[\fermionlengthy]
+\end{picture}
+\end{verbatim}
+which produces:
+\vskip -0.25in \hskip 1.75in
+\begin{picture}(8000,8000)
+\drawline\fermion[\E\REG](0,0)[6000]
+\thicklines
+\drawline\fermion[\N\REG](\fermionbackx,\pbacky)[5000]
+\drawline\fermion[\SW\REG](\fermionbackx,\fermionbacky)[4000]
+\thinlines
+\drawline\fermion[\NW\REG](\pmidx,\pmidy)[2000]
+\drawline\fermion[\W\REG](\pfrontx,\pfronty)[\fermionlengthy]
+\end{picture}
+%\bigskip
+\newpage
+\section{Scalars}
+\subsection{The Anatomy of a Scalar}
+A scalar particle (eg. a Higgs) is generally drawn as a dashed line,
+that is a series of line {\it segments} separated by {\it gaps}.
+The format for drawing a scalar with \ddrawline\ is:
+\begin{verbatim}
+
+\drawline\scalar[<scalar direction>\REG]
+ <(x,y), the co-ordinates of the beginning of the scalar>
+ [<number of segments>]
+
+\end{verbatim}
+We note the similarity between the fermion and scalar lines.
+The principal difference is in the units of length. Here the extent of
+the line is given by an integral number of segments. These will be
+of equal length and equally spaced. The same limitations on the
+length of fermion lines applies here: diagonal (NW, NE \etc)
+line segments may not be shorter than 1416 centipoints, which is
+the default length for all directions. The default gap length is
+850 centipoints and there is no innate limitation on this value
+(other than it must not be negative or larger than the page size).
+Attempts to draw a slanted scalar with segments of under 1416 centipoints
+will lead to a blank space in the diagram.
+
+The parameters returned by \ddrawline\ when a scalar is drawn are:
+\begin{verbatim}
+
+\scalarfrontx,\scalarfronty: The (x,y) co-ordinates of the front of the scalar.
+\scalarbackx,\scalarbacky: The (x,y) co-ordinates of the back of the scalar.
+\scalarlengthx,\scalarlengthy: The (x,y) extent of the scalar.
+\scalarcount: The total number of scalars printed thus far.
+\particlefrontx,\particlefronty: The (x,y) co-ords of the front of the line.
+\particlemidx,\particlemidy: The (x,y) co-ordinates of the middle of the line.
+\particlebackx,\particlebacky: The (x,y) co-ordinates of the back of the line.
+\particlelengthx,\particlelengthy: The (x,y) extent of the line.
+
+\end{verbatim}
+
+\subsection{Adjusting the Spacing}
+
+The segment length is given, in centipoints, by the variable
+\bs seglength and the gap length by \bs gaplength. Both are
+adjustable by the user by issuing the commands:
+
+\begin{verbatim}
+\global\seglength=<your length in centipoints>
+\global\gaplength=<your length in centipoints>
+\end{verbatim}
+just prior to a \ddrawline\bs scalar command. After this they automatically
+return to their default values of 1416 and 850. If only one is adjusted the
+other will retain its default value. The modifiers \bs thicklines and
+\bs thinlines work normally here with \bs thinlines the default (but
+\bs thicklines will remain in effect until \bs thinlines or \eendpic\
+is encountered).
+
+\bigskip
+These features are illustrated by the following sample file:
+\newpage
+\begin{verbatim}
+
+\begin{picture}(25000,25000)
+% First picture:
+\drawline\scalar[\E\REG](6000,0)[5]
+\drawline\fermion[\SE\REG](\scalarbackx,\scalarbacky)[2000]
+\drawline\fermion[\NE\REG](\scalarbackx,\scalarbacky)[2000]
+\drawline\fermion[\SW\REG](\scalarfrontx,\scalarfronty)[2000]
+\drawline\fermion[\NW\REG](\scalarfrontx,\scalarfronty)[2000]
+\global\seglength=1000 \global\gaplength=250
+\drawline\scalar[\W\REG](\pbackx,\pbacky)[5]
+\drawline\fermion[\SW\REG](\particlebackx,\particlebacky)[2000]
+\drawline\fermion[\NW\REG](\scalarbackx,\scalarbacky)[2000]
+\drawline\fermion[\NE\REG](\scalarfrontx,\scalarfronty)[2000]
+\put(4000,0){1}
+
+% Second Picture:
+\THICKLINES
+\drawline\fermion[\N\REG](23000,3000)[12345]
+\global\gaplength=473
+\drawline\scalar[\NW\REG](\pbackx,\fermionbacky)[3]
+\global\gaplength=473
+\drawline\scalar[\NE\REG](\fermionbackx,\pfronty)[3]
+\drawline\scalar[\SW\REG](\fermionfrontx,\fermionfronty)[3]
+\drawline\scalar[\SE\REG](\fermionfrontx,\fermionfronty)[3]
+\put(23500,14000){2}
+
+% Third Picture:
+\THINLINES
+\global\gaplength=0 \global\seglength=1000
+\drawline\scalar[\S\REG](1000,16000)[4]
+\drawline\fermion[\NW\REG](1000,16000)[1500]
+\drawline\fermion[\NE\REG](1000,16000)[1500]
+\drawline\fermion[\SW\REG](1000,12000)[1500]
+\drawline\fermion[\SE\REG](1000,12000)[1500]
+\put(1500,14000){3}
+
+% Fourth Picture:
+\global\gaplength=500 \global\seglength=500
+\thicklines
+\drawline\scalar[\NE\REG](6000,7000)[10]
+\put(\pmidx,\pmidy){4}
+\drawline\fermion[\W\REG](\scalarfrontx,\scalarfronty)[2500]
+\drawline\fermion[\S\REG](\scalarfrontx,\scalarfronty)[2500]
+\drawline\fermion[\E\REG](\scalarbackx,\scalarbacky)[2500]
+\drawline\fermion[\N\REG](\scalarbackx,\scalarbacky)[2500]
+\end{picture}
+
+\end{verbatim}
+which produces:
+
+\begin{picture}(25000,25000)
+% First picture:
+\drawline\scalar[\E\REG](6000,0)[5]
+\drawline\fermion[\SE\REG](\scalarbackx,\scalarbacky)[2000]
+\drawline\fermion[\NE\REG](\scalarbackx,\scalarbacky)[2000]
+\drawline\fermion[\SW\REG](\scalarfrontx,\scalarfronty)[2000]
+\drawline\fermion[\NW\REG](\scalarfrontx,\scalarfronty)[2000]
+\global\seglength=1000 \global\gaplength=250
+\drawline\scalar[\W\REG](\pbackx,\pbacky)[5]
+\drawline\fermion[\SW\REG](\particlebackx,\particlebacky)[2000]
+\drawline\fermion[\NW\REG](\scalarbackx,\scalarbacky)[2000]
+\drawline\fermion[\NE\REG](\scalarfrontx,\scalarfronty)[2000]
+\put(4000,0){1}
+% Second Picture:
+\thicklines
+\drawline\fermion[\N\REG](23000,3000)[12345]
+\global\gaplength=473
+\drawline\scalar[\NW\REG](\pbackx,\fermionbacky)[3]
+\global\gaplength=473
+\drawline\scalar[\NE\REG](\fermionbackx,\pfronty)[3]
+\drawline\scalar[\SW\REG](\fermionfrontx,\fermionfronty)[3]
+\drawline\scalar[\SE\REG](\fermionfrontx,\fermionfronty)[3]
+\put(23500,14000){2}
+% Third Picture:
+\thinlines
+\global\gaplength=0 \global\seglength=1000
+\drawline\scalar[\S\REG](1000,16000)[4]
+\drawline\fermion[\NW\REG](1000,16000)[1500]
+\drawline\fermion[\NE\REG](1000,16000)[1500]
+\drawline\fermion[\SW\REG](1000,12000)[1500]
+\drawline\fermion[\SE\REG](1000,12000)[1500]
+\put(1500,14000){3}
+% Fourth Picture:
+\global\gaplength=500 \global\seglength=500
+\thicklines
+\drawline\scalar[\NE\REG](6000,7000)[10]
+\put(\pmidx,\pmidy){4}
+\drawline\fermion[\W\REG](\scalarfrontx,\scalarfronty)[2500]
+\drawline\fermion[\S\REG](\scalarfrontx,\scalarfronty)[2500]
+\drawline\fermion[\E\REG](\scalarbackx,\scalarbacky)[2500]
+\drawline\fermion[\N\REG](\scalarbackx,\scalarbacky)[2500]
+\end{picture}
+\bigskip
+\bigskip
+\bigskip
+
+There are a few points of note. In the first picture observe how
+\bs pbackx,y ($\equiv$\bs particlebackx,y) is used as opposed to
+\bs scalarbackx,y. For more on this point see section 2.1.
+Also note that the \bs seglength assignments stay in effect until
+the next scalar is drawn. The second figure illustrates how
+\bs gaplength automatically reverts to its default and further
+demonstrates the assignments of the co-ordinate variables.
+The third diagram shows that a zero gaplength creates a fermion
+and that numerical co-ordinates may be used just as easily as
+the pre-assigned positioning variables. This is also illustrated by
+the positioning of the numerical labels (1,2,3,4) which was accomplished
+with minimal thought. Finally the fourth diagram shows what happens when the
+value of \bs seglength is reduced to less that 1416 for a diagonal
+(non-horizontal, non-vertical) scalar. It also demonstrates how to
+locate the central point of a line.
+
+\section{Photons}
+\subsection{The Anatomy of a Photon}
+
+A photon line consists of a series of `wiggles' or undulations.
+The length of each undulation depends upon the style of photon selected.
+The format for drawing a photon with \ddrawline\ is:
+\begin{verbatim}
+
+\drawline\photon[<photon direction><photon style>]
+ <(x,y), the co-ordinates of the beginning of the photon>
+ [<number of HALF-wiggles>]
+
+\end{verbatim}
+The reason for specifying the number of {\it half}-wiggles is that it
+is sometimes convenient to have a line begin and end in either orientation
+(see section 2.6.1 for an example of this).
+
+The styles currently available for photons are:
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2B.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2B.tex
new file mode 100644
index 0000000000..c6e0464977
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2B.tex
@@ -0,0 +1,263 @@
+% FEYNMANDOC2B: PART B OF CHAPTER 2; PHOTONS CONTINUED. \included by
+% FEYNMANDOC
+\begin{verbatim}
+ \REG
+ \FLIPPED
+ \CURLY
+ \FLIPPEDCURLY
+ \FLAT
+ \FLIPPEDFLAT
+ \LONGPHOTON
+ \FLIPPEDLONG
+
+\end{verbatim}
+
+The \bs REG and \bs FLIPPED styles are available in all orientations.
+The \bs LONGPHOTON and \bs FLIPPEDLONG photons are only available in the
+\bs N and \bs S directions.
+The others are available only in the following directions:
+\verb^\N, \S, \NE, \SE, \NW, \SW^. The \bs thicklines option is only available
+to photons drawn in the \verb^\NE, \SW, \SE ^and \verb^\NW^\ directions,
+however \bs THICKLINES is also available in the \verb^\E^ and \verb^\W^
+orientations and has the same effect.
+Attempts to draw a combination other than these will result in an
+error message on the screen and in the $<$jobname$>$.lis file.
+These options will be illustrated in the next subsection.
+
+The parameters returned by \ddrawline\bs photon are analogous
+to those returned after drawing fermions and scalars.
+These are:
+\begin{verbatim}
+
+\photonfrontx,\photonfronty: The (x,y) co-ordinates of the front of the line.
+\photonbackx,\photonbacky: The (x,y) co-ordinates of the back of the line.
+\photonlengthx,\photonlengthy: The (x,y) extent of the line.
+\photoncount The number of photons printed thus far.
+\particlefrontx,\particlefronty: The (x,y) co-ords of the front of the line.
+\particlemidx,\particlemidy: The (x,y) co-ordinates of the middle of the line.
+\particlebackx,\particlebacky: The (x,y) co-ordinates of the back of the line.
+\particlelengthx,\particlelengthy: The (x,y) extent of the line.
+
+\end{verbatim}
+
+\subsection{Examples and Details}
+
+The different styles of photon are:
+\vskip 0.5in % \hskip 0.4in
+\begin{picture}(42000,10000)
+\drawline\photon[\S\LONGPHOTON](0,8000)[6]
+\put(-3000,10000){{\tiny \bs LONGPHOTON}}
+\drawline\photon[\S\FLIPPEDLONG](6000,8000)[6]
+\put(3300,10000){{\tiny \bs FLIPPEDLONG}}
+\drawline\photon[\S\CURLY](12000,8000)[6]
+\put(10500,10000){{\tiny \bs CURLY}}
+\drawline\photon[\S\FLIPPEDCURLY](18000,8000)[6]
+\put(15000,10000){{\tiny \bs FLIPPEDCURLY}}
+\drawline\photon[\S\FLAT](24000,8000)[6]
+\put(23000,10000){{\tiny \bs FLAT}}
+\drawline\photon[\S\FLIPPEDFLAT](30000,8000)[6]
+\put(27000,10000){{\tiny \bs FLIPPEDFLAT}}
+\drawline\photon[\S\REG](36000,8000)[6]
+\put(35000,10000){{\tiny \bs REG}}
+\drawline\photon[\S\FLIPPED](42000,8000)[6]
+\put(40000,10000){{\tiny \bs FLIPPED}}
+
+\end{picture}
+\vskip 0.3in
+The different directions may be illustrated by the following file:
+
+\begin{verbatim}
+
+% EXAMPLE OF USING FEYNMAN TO DRAW PHOTON DIAGRAMS IN TEX.
+\documentstyle [11pt]{article}
+\input FEYNMAN
+\begin {document}
+\centerline{PHOTONBURST using FEYNMAN}
+\vskip 0.75in
+\hskip 1.2in
+\begin{picture}(20000,20000)(-10000,-10000)
+\put(0,0){\circle*{1500}}
+\drawline\photon[\N\REG](0,0)[8]
+\drawline\photon[\NE\CURLY](0,0)[8]
+\drawline\photon[\E\REG](0,0)[8]
+\drawline\photon[\SE\CURLY](0,0)[8]
+\drawline\photon[\S\REG](0,0)[8]
+\drawline\photon[\SW\CURLY](0,0)[8]
+\drawline\photon[\W\REG](0,0)[8]
+\drawline\photon[\NW\CURLY](0,0)[8]
+\end{picture}
+\end{document}
+
+\end{verbatim}
+Which produces:
+
+\centerline{PHOTONBURST using FEYNMAN}
+\vskip 0.75in
+\hskip 1.4in
+\begin{picture}(20000,20000)(-10000,-10000)
+\put(0,0){\circle*{1500}}
+\drawline\photon[\N\REG](0,0)[8]
+\drawline\photon[\NE\CURLY](0,0)[8]
+\drawline\photon[\E\REG](0,0)[8]
+\drawline\photon[\SE\CURLY](0,0)[8]
+\drawline\photon[\S\REG](0,0)[8]
+\drawline\photon[\SW\CURLY](0,0)[8]
+\drawline\photon[\W\REG](0,0)[8]
+\drawline\photon[\NW\CURLY](0,0)[8]
+\end{picture}
+\vskip 0.5in
+
+A number of points may be noted. The first is the additional argument in the
+\bbeginpic\ statement. This sets the lower left-hand corner of the
+picture box to the co-ordinates \hbox{(-10000,-10000)} in centipoints. Thus far
+this has been omitted and this corner is assigned the default co-ordinate
+of (0,0). The next point is the use of \bs circle*. This draws a disk centred
+at the specified spot of the demanded diameter. Only small disks can be
+thus drawn. Also note that all of the photons begin their curvature in a
+{\em clockwise} sense. Similarly the \bs flipped versions begin in a
+counter-clockwise orientation.
+In passing, the \bs centerline command may be used as an
+alternative to the \LaTeX\ centered environment.
+
+The next example illustrates a case where it becomes useful to be able
+to draw an odd number of half-wiggles.
+
+\begin{verbatim}
+
+\documentstyle [12pt]{article}
+\input FEYNMAN
+\begin {document}
+\bigphotons
+\begin{picture}(10000,10000)(0,0)
+\drawline\photon[\E\REG](0,0)[8] % Even number of half-wiggles.
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[\photonlengthx]
+ % Make the fermions the same length as the photon.
+\drawline\fermion[\SW\REG](\photonfrontx,\photonfronty)[\photonlengthx]
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\global\divide\fermionlength by 2 % Halves \fermionlength
+\drawline\photon[\E\REG](\pmidx,\pmidy)[9] % Odd number of half-wiggles.
+\drawline\fermion[\SW\REG](\photonbackx,\photonbacky)[\fermionlength]
+ % Draws fermion at the halved value of \fermionlength...which is
+ % Half of the value of the previous fermions.
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[\fermionlength]
+\drawline\photon[\E\FLIPPED](\pbackx,\pbacky)[8] % Even number of half-wiggles.
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[\photonlengthx]
+ % Make the fermions the same length as the photon.
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\end{picture}
+\vskip 1in
+\end{document}
+
+\end{verbatim}
+Which draws:
+\vskip -0.15in
+\hskip 0.5in
+\begin{picture}(10000,10000)(0,0)
+\drawline\photon[\E\REG](0,0)[8] % Even number of half-wiggles.
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[\photonlengthx]
+ % Make the fermions the same length as the photon.
+\drawline\fermion[\SW\REG](\photonfrontx,\photonfronty)[\photonlengthx]
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\global\divide\fermionlength by 2 % Halves \fermionlength
+\drawline\photon[\E\REG](\pmidx,\pmidy)[9] % Odd number of half-wiggles.
+\drawline\fermion[\SW\REG](\photonbackx,\photonbacky)[\fermionlength]
+ % Draws fermion at the halved value of \fermionlength...which is
+ % Half of the value of the previous fermions.
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[\fermionlength]
+\drawline\photon[\E\FLIPPED](\pbackx,\pbacky)[8] % Even number of half-wiggles.
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[\photonlengthx]
+ % Make the fermions the same length as the photon.
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\end{picture}
+\vskip 1in
+Let us analyse this.
+The first new feature that we see is the ``\bs bigphotons''
+statement. This statement is only required when photons are going to
+be drawn either in the \bs E or \bs W directions {\bf and}
+the document size has been selected to be [12pt]. It is best to
+include it automatically if any Feynman diagrams are to be drawn in a
+12pt document. It should appear somewhere after the \bs input FEYNMAN
+statement and before the first \verb@\drawline\photon[\E...@ or
+\verb@\drawline\photon[\W...@ command. This is the only instance when
+it is used.
+
+The next thing we observe is how the \bs photonlengthx was used to
+draw the fermions and photons to the same length. This technique
+could not be used to draw, say, gluons and photons to the same length.
+Because of the angle between the second (middle) photon line and
+the fermion legs to which it is attached it was desirable to
+draw both ends of the photon as `down-turning'. If the connecting
+photon had been drawn between the upper fermion lines then, instead of
+the middle photon being\\
+\verb@\drawline\photon[\E\REG](\pmidx,\pmidy)[7]@ it would have been\\
+\verb@\drawline\photon[\E\FLIPPED](\pmidx,\pmidy)[7]@.
+
+The next new item is the ``\bs global\bs divide'' command.
+This will be further discussed
+in chapter four but its function here is obvious. We wish to draw a fermion
+line centered at the end of the middle photon's right (East) end.
+The easiest way to do this is to draw fermions of half of the desired length
+in opposite directions. To obtain this value we use the statement
+\verb@\global\divide\fermionlength by 2@ which
+reduces the value of this variable
+by a factor of two. The divisor must be integral and the quotient will be
+rounded to an integer. See the section on information storage for how
+to record the value of \bs fermionlength prior to halving it.
+This technique could just as easily been used if, instead of a fermion,
+we had had a photon or gluon (with an even number of loops or half-wiggles).
+In these case one of the two halves would have been {\em flipped} with
+respect to the other. Can you see why a scalar could not be drawn this way?
+
+The final point is that the third (right-most) photon was drawn in a
+\bs flipped configuration in order to give a left-right symmetry to the
+diagram. The user is encouraged to try the following exercises.
+Firstly draw the above but with an even number of wiggles in all three
+photons to see the difference. Secondly try to draw the picture where
+photons connect both the upper and lower fermion pairs, creating a loop.
+Finally try to rotate the diagram through 45$^\circ$.
+
+Aside from \bs bigphotons discussed above there is one other photonic
+feature which we will mention in passing. Photons may be drawn with
+{\it stems} on them. This is an advanced feature which will be discussed
+in chapter four and an example illustrating the difference between a stemmed
+and unstemmed line will suffice for the present:
+
+\begin{picture}(25000,10000)
+\drawline\photon[\E\REG](0,7000)[6]
+\advance \photonfrontx by -800
+\put(\photonfrontx,2000){UNSTEMMED}
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[2000]
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[2000]
+\stemmed\drawline\photon[\E\REG](13000,7000)[6]
+\photonbacky=\pbacky \photonbackx=\pbackx
+\advance \photonfrontx by 400
+\put(\photonfrontx,2000){STEMMED}
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[2000]
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[2000]
+\end{picture}
+\vskip 0.30in
+Exercise: The following diagram has eight lines. Using \FEYNMAN\
+duplicate it using only eight commands.
+\vskip 0.25in
+
+%\begin{picture}(20000,20000)
+\hskip 1.5in
+\begin{picture}(20000,15000)
+\thicklines\drawline\photon[\N\FLIPPEDCURLY](3000,3000)[7]
+\drawline\fermion[\NW\REG](\pbackx,\pbacky)[\photonlengthy]
+\drawline\fermion[\E\REG](\fermionfrontx,\fermionfronty)[\fermionlength]
+\drawline\fermion[\SW\REG](\photonfrontx,\photonfronty)[\photonlengthy]
+\drawline\fermion[\E\REG](\photonfrontx,\photonfronty)[\photonlengthy]
+\drawline\fermion[\N\REG](\pbackx,\pbacky)[\photonlengthy]
+\drawline\photon[\SE\REG](\fermionfrontx,\fermionfronty)[7]
+\drawline\photon[\NE\FLIPPED](\fermionbackx,\fermionbacky)[7]
+\end{picture}
+\newpage
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2C.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2C.tex
new file mode 100644
index 0000000000..be61a16d42
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2C.tex
@@ -0,0 +1,122 @@
+% FEYNMANDOC2C: CHAPTER 2 PART C OF FEYNMANDOC.TEX \include d there.
+%
+\section{Gluons}
+\subsection{Anatomy of a Gluon}
+
+A gluon consists of connected loops. As in the case of the photon line,
+the length of a single loop varies between styles and configurations.
+The syntax for creating a gluon with the \ddrawline\ command is:
+\begin{verbatim}
+
+\drawline\gluon[<gluon direction><gluon style>]
+ <(x,y), the co-ordinates of the beginning of the gluon>[<number of loops>]
+
+\end{verbatim}
+The styles currently available for gluons are:
+
+\begin{verbatim}
+
+ \REG
+ \FLIPPED
+ \CURLY
+ \FLIPPEDCURLY
+ \FLAT
+ \FLIPPEDFLAT
+ \CENTRAL
+ \FLIPPEDCENTRAL
+ \SQUASHEDGLUON
+
+\end{verbatim}
+
+The \bs REG and \bs FLIPPED styles are available in all orientations.
+The others are available only in the following directions:
+\begin{verbatim}
+
+ \CURLY: \N, \S, \E, \W
+ \FLIPPEDCURLY: \N, \S, \E, \W
+ \CENTRAL: \N, \S, \E, \W
+ \FLIPPEDCENTRAL: \N, \S, \E, \W
+ \FLAT: \E, \W
+ \FLIPPEDFLAT: \E, \W
+ \SQUASHEDGLUON: \E
+
+\end{verbatim}
+The differences in style are illustrated in the next subsection.
+The \bs THICKLINES, \bs THINLINES,
+\bs thicklines and \bs thinlines options are available in all
+orientations and styles.
+
+\medskip
+The parameters returned by \ddrawline\bs gluon are analogous
+to those returned after drawing photons, fermions and scalars:
+
+\begin{verbatim}
+
+\gluonfrontx,\gluonfronty: The (x,y) co-ordinates of the front of the line.
+\gluonbackx,\gluonbacky: The (x,y) co-ordinates of the back of the line.
+\gluonlengthx,\gluonlengthy: The (x,y) extent of the line.
+\gluoncount The number of gluons printed thus far.
+\particlefrontx,\particlefronty: The (x,y) co-ords of the front of the line.
+\particlemidx,\particlemidy: The (x,y) co-ordinates of the middle of the line.
+\particlebackx,\particlebacky: The (x,y) co-ordinates of the back of the line.
+\particlelengthx,\particlelengthy: The (x,y) extent of the line.
+
+\end{verbatim}
+\newpage
+%
+\subsection{Examples and Details}
+
+The different styles of gluon are:
+\vskip -0.5in \hskip 0.4in
+\begin{picture}(40000,8000)(0,10000)
+\drawline\gluon[\S\REG](0,8000)[6]
+\put(-1000,10000){{\tiny \bs REG}}
+\drawline\gluon[\S\FLIPPED](6000,8000)[6]
+\put(4300,10000){{\tiny \bs FLIPPED}}
+\drawline\gluon[\S\CURLY](12000,8000)[6]
+\put(10500,10000){{\tiny \bs CURLY}}
+\drawline\gluon[\S\FLIPPEDCURLY](18000,8000)[6]
+\put(15000,10000){{\tiny \bs FLIPPEDCURLY}}
+\drawline\gluon[\S\CENTRAL](24000,8000)[6]
+\put(22200,10000){{\tiny \bs CENTRAL}}
+\drawline\gluon[\S\FLIPPEDCENTRAL](30000,8000)[6]
+\put(26500,10000){{\tiny \bs FLIPPEDCENTRAL}}
+\drawline\gluon[\E\FLAT](-1000,-500)[6]
+\put(1500,-2500){{\tiny \bs FLAT}}
+\drawline\gluon[\E\FLIPPEDFLAT](11200,-500)[6]
+\put(12100,-2500){{\tiny \bs FLIPPEDFLAT}}
+\drawline\gluon[\E\SQUASHEDGLUON](23500,-500)[6]
+\put(23500,-2500){{\tiny \bs SQUASHEDGLUON}}
+%\drawline\gluon[\E\FLAT](5000,-500)[6]
+%\put(7000,-2500){{\tiny \bs FLAT}}
+%\drawline\gluon[\E\SQUASHEDGLUON](20000,-500)[6]
+%\put(20000,-2500){{\tiny \bs SQUASHEDGLUON}}
+
+\end{picture}
+\vskip 2.5in
+The different directions may be illustrated by the following file:
+
+\begin{verbatim}
+
+% EXAMPLE OF USING FEYNMAN TO DRAW gluon DIAGRAMS IN TEX.
+\documentstyle [11pt]{article}
+\input FEYNMAN
+\begin {document}
+\centerline{GLUONBURST using FEYNMAN}
+\vskip 0.75in
+\hskip 1.5in
+\begin{picture}(20000,20000)(-10000,-10000)
+\put(0,0){\circle*{1500}}
+\drawline\gluon[\N\CENTRAL](0,0)[10]
+\drawline\gluon[\NE\REG](0,0)[8]
+\drawline\gluon[\E\CENTRAL](0,0)[10]
+\drawline\gluon[\SE\REG](0,0)[8]
+\drawline\gluon[\S\CENTRAL](0,0)[10]
+\drawline\gluon[\SW\REG](0,0)[8]
+\drawline\gluon[\W\CENTRAL](0,0)[10]
+\drawline\gluon[\NW\REG](0,0)[8]
+\end{picture}
+
+\end{verbatim}
+Which produces:
+
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2D.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2D.tex
new file mode 100644
index 0000000000..1ea4a460ff
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2D.tex
@@ -0,0 +1,48 @@
+% FEYNMANDOC2D: CHAPTER 2 PART D OF FEYNMANDOC.TEX \include d there.
+%
+
+\centerline{GLUONBURST using FEYNMAN}
+\vskip 0.75in
+\hskip 1.5in
+\begin{picture}(20000,20000)(-10000,-10000)
+\put(0,0){\circle*{1500}}
+\drawline\gluon[\N\CENTRAL](0,0)[10]
+\drawline\gluon[\NE\REG](0,0)[8]
+\drawline\gluon[\E\CENTRAL](0,0)[10]
+\drawline\gluon[\SE\REG](0,0)[8]
+\drawline\gluon[\S\CENTRAL](0,0)[10]
+\drawline\gluon[\SW\REG](0,0)[8]
+\drawline\gluon[\W\CENTRAL](0,0)[10]
+\drawline\gluon[\NW\REG](0,0)[8]
+\end{picture}
+\vskip 0.5in
+We will see in the next chapter a way of making this look better.
+
+The same points which were noted following the picture {\em photonburst}
+in the previous section may be noted here. Again the curvature of the gluons
+commences in the clockwise sense here and in the counter-clockwise
+orientation for {\it flipped} styles. The following examples may prove helpful.
+
+\begin{verbatim}
+
+\begin{picture}(15000,15000)(-2000,-12000)
+\drawline\gluon[\E\FLIPPEDCURLY](0,0)[6]
+\drawline\fermion[\NE\REG](\pbackx,\pbacky)[\gluonlengthx]
+\drawline\fermion[\SE\REG](\pfrontx,\pfronty)[\gluonlengthx]
+\drawline\fermion[\NE\REG](\pbackx,\pbacky)[\gluonlengthx]
+\drawline\gluon[\W\FLIPPEDCURLY](\pfrontx,\pfronty)[6]
+\drawline\fermion[\SW\REG](\pbackx,\pbacky)[\fermionlength]
+\drawline\fermion[\NW\REG](\gluonbackx,\gluonbacky)[\fermionlength]
+\drawline\fermion[\SW\REG](\pbackx,\pbacky)[\fermionlength]
+\end{picture}
+\hskip 3.5in
+% Second Picture:
+\begin{picture}(6000,15000)
+\THICKLINES
+\drawline\gluon[\S\REG](3000,14000)[8]
+\drawline\fermion[\NE\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[2000]
+\end{picture}
+\end{verbatim}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2E.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2E.tex
new file mode 100644
index 0000000000..3b75f9b0c4
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2E.tex
@@ -0,0 +1,47 @@
+% FEYNMANDOC2E: CHAPTER 2 PART E OF FEYNMANDOC.TEX \include d there.
+%
+which renders:
+\vskip 0.5in
+
+\begin{picture}(15000,15000)(-2000,-12000)
+\drawline\gluon[\E\FLIPPEDCURLY](0,0)[6]
+\drawline\fermion[\NE\REG](\pbackx,\pbacky)[\gluonlengthx]
+\drawline\fermion[\SE\REG](\pfrontx,\pfronty)[\gluonlengthx]
+\drawline\fermion[\NE\REG](\pbackx,\pbacky)[\gluonlengthx]
+\drawline\gluon[\W\FLIPPEDCURLY](\pfrontx,\pfronty)[6]
+\drawline\fermion[\SW\REG](\pbackx,\pbacky)[\fermionlength]
+\drawline\fermion[\NW\REG](\gluonbackx,\gluonbacky)[\fermionlength]
+\drawline\fermion[\SW\REG](\pbackx,\pbacky)[\fermionlength]
+\end{picture}
+
+\hskip 3.5in
+
+\begin{picture}(6000,15000)
+\THICKLINES
+\drawline\gluon[\S\REG](3000,14000)[8]
+\drawline\fermion[\NE\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[2000]
+\end{picture}
+
+\vskip 0.15in
+As in the photonic case we use \bs gluonlengthx,y to draw fermion lines
+which are the same length as gluon lines. A word of caution.
+Variables such as `\bs gluonlengthx' or `\bs photonlengthy' measure
+the {\em displacements} of the line drawn and so may be either
+positive or negative. That is, \bs fermionlengthx will be positive
+for fermions drawn in the E, NE or SE directions and negative for those
+drawn in the W, NW and SW directions. For N and S fermions it will vanish.
+The length argument of \ddrawline, however, must be positive so caution is
+advised. The `\bs negate' command described in the section concerning
+alignments in chapter four is often helpful.
+The variables \bs {\it boxlengthx} and \bs {\it boxlengthy} may also be
+used. They are generally the absolute values of \bs particlelengthx
+and \bs particlelengthy respectively (however see subsection 2.11.1).
+These two values must never be altered by the user.
+The variable `\bs fermionlength' is the total length of the
+previously drawn fermion and so is always positive.
+The second diagram merely demonstrates the \bs THICKLINES option when used
+with gluons. For further clarification of these points it may be useful to
+review the previous section (PHOTONS).
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2F.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2F.tex
new file mode 100644
index 0000000000..5084ec6daf
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2F.tex
@@ -0,0 +1,174 @@
+A general result concerning gluon styles is that the \bs CURLY
+(\bs FLIPPEDCURLY) and the \bs CENTRAL (\bs FLIPPEDCENTRAL)
+configurations are frequently more appealing than the \bs REG (\bs FLIPPED)
+configuration if both diagonal and non-diagonal gluons appear in
+the same diagram. The reason is that slanted (eg. NW) gluons may only
+be drawn in a \bs CENTRALGLUON sort of style (but still called \bs REG)
+and the \bs CURLY style is also very similar to this from a spacing and
+size viewpoint. Another important point is that gluons are by far the
+most {\em expensive} sort of lines to draw from the viewpoint of
+\TeX's internal memory (independent of the memory of the driving system).
+For this reason you will quickly discover that diagrams involving a great
+many gluons tend to run out of \TeX\ capacity. One way to alleviate
+the problem is to use \LaTeX's `\bs include' facility which allows you
+to divide up a long program into a series of small ones connected by
+{\em auxiliary} files which are automatically produced when \LaTeX\ is run.
+Dozens of photonic, scalar and fermionic diagrams may be constructed
+for the same memory usage of a single hadronic diagram.
+
+A number a further features exist which will be mentioned here and elaborated
+on in subsequent chapters. Thus far no multi-gluon vertices have been
+drawn. Using the techniques presented here it is obvious how this
+may be done - draw a gluon at (\bs gluonbackx,\bs gluonbacky),
+attaching it at the rear of the last gluon. The results are not always
+\ae sthetically appealing so a number a pre-drawn vertices are available.
+This is the subject of chapter 3. A further feature has to do with
+attaching gluons end-to-end. This may not seem necessary but is often
+desirable (see the exercise below). The problem is illustrated by the
+following file:
+
+\begin{verbatim}
+
+\begin{picture}(25000,7000)
+\drawline\gluon[\E\REG](0,3000)[4]
+\drawline\gluon[\E\REG](\pbackx,\pbacky)[4]
+
+\drawline\gluon[\E\CENTRAL](15000,3000)[4]
+\drawline\gluon[\E\CENTRAL](\pbackx,\pbacky)[4]
+\end{picture}
+
+\end{verbatim}
+giving us:
+
+\begin{picture}(25000,7000)
+\drawline\gluon[\E\REG](0,4000)[4]
+\drawline\gluon[\E\REG](\pbackx,\pbacky)[4]
+
+\drawline\gluon[\E\CENTRAL](15000,4000)[4]
+\drawline\gluon[\E\CENTRAL](\pbackx,\pbacky)[4]
+\end{picture}
+
+For gluons in the N,S, E and W directions \bs REG, \bs CURLY, \bs FLAT
+and \bs SQUASHED configurations may be attached end-to-end trivially.
+For \bs CENTRAL gluons and all gluons in the NW, NE, SE and SW directions
+the connection is imperfect. The \verb@\gluonlink@ command, discussed
+in chapter four, alleviates this:
+
+\begin{verbatim}
+
+\begin{picture}(10000,5000)
+\drawline\gluon[\E\CENTRAL](0,3000)[4]\gluonlink
+\drawline\gluon[\E\CENTRAL](\pbackx,\pbacky)[4]
+\end{picture}
+\end{verbatim}
+\begin{picture}(10000,5000)
+\drawline\gluon[\E\CENTRAL](0,3000)[4]\gluonlink
+\drawline\gluon[\E\CENTRAL](\pbackx,\pbacky)[4]
+\end{picture}
+\vskip 0.15in
+The {\em stemmed} option demonstrated for photons is also available for
+gluons and is of significantly more interest, especially for those of the
+\bs CENTRAL variety:
+\vskip 0.2in \hskip 1.25in
+\begin{picture}(25000,10000)
+\drawline\gluon[\E\CENTRAL](0,7000)[6]
+\advance \gluonfrontx by -800
+\put(\gluonfrontx,2000){UNSTEMMED}
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\NE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+\stemmed\drawline\gluon[\E\CENTRAL](13000,7000)[6]
+\gluonbacky=\pbacky \gluonbackx=\pbackx
+\advance \gluonfrontx by 400
+\put(\gluonfrontx,2000){STEMMED}
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[2000]
+\drawline\fermion[\NE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+\end{picture}
+\vskip 0.34in
+The chief advantage of \bs CENTRAL gluons is that their endpoints are
+approximately on the axis along which the line is being drawn.
+This may be artificially achieved for other styles using the \bs gluoncap
+command.
+The {\it capped} option is unique to gluons. It is employed to make
+gluon lines of a non-central variety (\ie\ those which do not terminate
+near the axis of the gluon line) appear centralized. An example is:
+\vskip 0.2in \hskip 0.71in
+\begin{picture}(25000,10000)
+\THICKLINES
+\put(4000,7000){\circle{3000}}
+\drawline\gluon[\E\REG](5400,7000)[4]
+\drawline\fermion[\NE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\gluon[\W\FLIPPED](2600,7000)[4]
+\drawline\fermion[\NW\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[2000]
+\advance \gluonfrontx by -1500
+\put(\gluonfrontx,2000){UNCAPPED}
+%\put(24000,7000){\circle{3000}}
+%\drawline\gluon[\E\REG](25500,7000)[4]\gluoncap
+%\drawline\fermion[\NE\REG](\gluonbackx,\gluonbacky)[2000]
+%\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+%\drawline\gluon[\W\FLIPPED](22500,7000)[4]\gluoncap
+%\drawline\fermion[\NW\REG](\gluonbackx,\gluonbacky)[2000]
+%\drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[2000]
+%\advance \gluonfrontx by -900
+%\put(\gluonfrontx,2000){CAPPED}
+\put(24000,7000){\circle{3000}}
+\startphantom
+\drawline\gluon[\E\REG](0,0)[2]\gluoncap
+\stopphantom
+\pbackx=22600 \pbacky=7000
+\multiply \plengthx by -1 \multiply \plengthy by -1
+\advance \pbackx by \plengthx \advance \pbacky by \plengthy
+\drawline\gluon[\E\REG](\pbackx,\pbacky)[2]\gluoncap
+%\advance\gluonfrontx by 75
+\drawline\gluon[\W\FLIPPED](\gluonfrontx,\gluonfronty)[2]\gluoncap
+\drawline\fermion[\NW\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[2000]
+\gluonbackx=25400 \gluonbacky=7000
+\multiply \gluonlengthx by -1 \multiply \gluonlengthy by -1
+\advance \gluonbackx by \gluonlengthx \advance \gluonbacky by \gluonlengthy
+\drawline\gluon[\W\FLIPPED](\gluonbackx,\gluonbacky)[2]\gluoncap
+%\advance\gluonfrontx by -75
+\drawline\gluon[\E\REG](\gluonfrontx,\gluonfronty)[2]\gluoncap
+\drawline\fermion[\NE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+\advance \gluonfrontx by -6800
+\put(\gluonfrontx,2000){CAPPED}
+\THINLINES
+\end{picture}
+\vskip 0.2in
+
+There are a number of subtleties involved with the above
+features which is why their discussion is being postponed.
+Finally a primitive \bs drawloop\footnote{currently only available for gluons}
+command allows a gluon loop to be drawn.
+These are also discussed in chapter four.
+
+We conclude with the following exercises. First draw the following
+which uses \bs REG style gluons:
+
+\begin{picture}(20000,20000)
+\thinlines
+\drawline\gluon[\E\REG](18000,18000)[4]
+\drawline\fermion[\S\REG](\pfrontx,\pfronty)[\gluonlengthx]
+\thicklines
+\drawline\gluon[\E\REG](\gluonbackx,\gluonbacky)[4]
+\drawline\fermion[\S\REG](\pbackx,\pbacky)[\gluonlengthx]
+\thinlines
+\drawline\fermion[\S\REG](\pbackx,\pbacky)[\gluonlengthx]
+\drawline\gluon[\W\REG](\fermionbackx,\fermionbacky)[4]
+\thicklines
+\drawline\gluon[\W\REG](\gluonbackx,\gluonbacky)[4]
+\drawline\fermion[\N\REG](\pbackx,\pbacky)[\fermionlength]
+\end{picture}
+\vskip -0.15in
+How would you draw this using \bs CENTRAL gluons {\it without} invoking the
+\bs gluonlink command?
+% Answer: each gluon should be drawn in 3 overlapping pieces:
+%\drawline\gluon[\E\CENTRAL](0,0)[5]
+%\drawline\gluon[\E\CENTRAL](0,0)[4]
+%\thicklines\drawline\gluon[\E\CENTRAL](0,0)[4]
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2G.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2G.tex
new file mode 100644
index 0000000000..6f7d07426b
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2G.tex
@@ -0,0 +1,246 @@
+\section{Arrows and Labels}
+
+In addition to the actual lines of a Feynman diagram one commonly desires
+to include labels directly on the diagram, occasionally explanatory
+text or equations, and quite frequently arrows indicating the flow of
+momentum or some quantum number. These are accommodated quite easily in
+\FEYNMAN.
+
+\subsection{Arrows}
+
+The command for drawing arrows is \bs drawarrow.
+The syntax is similar to the \ddrawline\ command:
+
+\begin{verbatim}
+
+\drawarrow[<direction><configuration>]
+ (<(x,y) co-ordinates of the arrow>)
+
+\end{verbatim}
+An arrowhead is produced at the specified (x,y) co-ordinates, generally
+at the end or middle of a line. The direction is one of the usual
+compass point directions:
+
+\begin{verbatim}
+
+ \N \NE \E \SE \S \SW \W \NW
+
+\end{verbatim}
+If \bs LDIR or \bs LINEDIRECTION is used instead then the direction of the
+last drawn line will automatically be used (pre-supposing that a line has
+been drawn in the current picture). If the previous line was drawn by
+the \ddrawvertex\ command (see next chapter) then the {\it initially specified}
+vertex direction will be used. The {\em configuration} is one of the
+following:
+
+\begin{verbatim}
+
+ \ATTIP \ATBASE
+
+\end{verbatim}
+These specify whether the co-ordinates which you've input refer to
+the position of the {\bf base} of the arrow or the {\bf tip} of the
+arrow. Arrows may be drawn boldly if \bs thicklines is in operation.
+The length of an arrow is given by the variable \bs arrowlength.
+When an arrow is attached to the end of a line the \bs particlelengthx,y
+are not altered (and neither is \bs gluonlengthx \etc) however the
+variables \bs{\it boxlengthx} and \bs{\it boxlengthy}, mentioned in
+subsection 2.10.2, assume a different meaning now. The {\it tip} of the
+arrow will always have co-ordinates (\bs~boxlengthx,\bs~boxlengthy),
+whether it is drawn with \bs ATTIP or \bs ATBASE. The following
+examples should illustrate these features.
+
+\begin{verbatim}
+\documentstyle [12pt]{article}
+\input FEYNMAN
+\begin {document}
+\bigphotons
+\centerline{ARROWS using FEYNMAN.TEX}
+\begin{picture}(10000,10000)(0,0) % PICTURE 1
+\drawline\fermion[\NE\REG](0,0)[8000]
+\drawarrow[\LDIR\ATTIP](\pmidx,\pmidy)
+\drawline\fermion[\E\REG](\fermionbackx,\fermionbacky)[2000]
+\drawline\fermion[\N\REG](\fermionfrontx,\fermionfronty)[2000]
+\drawline\fermion[\W\REG](0,0)[2000]
+\drawline\fermion[\S\REG](0,0)[2000]
+\drawarrow[\S\ATBASE](0,-2000)
+\drawarrow[\W\ATBASE](-2000,0)
+\end{picture}
+\hskip -0.4in
+\begin{picture}(10000,10000)(0,0) % PICTURE 2
+\drawline\fermion[\SW\REG](0,0)[8000]
+\thicklines
+\drawarrow[\SW\ATTIP](\pbackx,\pbacky)
+\thinlines
+\drawline\fermion[\W\REG](\fermionbackx,\fermionbacky)[2000]
+\drawline\fermion[\S\REG](\fermionfrontx,\fermionfronty)[2000]
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawline\fermion[\N\REG](0,0)[2000]
+\drawarrow[\E\ATBASE](2000,0)
+\drawarrow[\N\ATBASE](0,2000)
+\end{picture}
+\hskip -0.4in
+\begin{picture}(10000,10000)(0,0) % PICTURE 3
+\drawline\scalar[\SW\REG](0,0)[6]
+\drawarrow[\SW\ATTIP](\pbackx,\pbacky)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawline\fermion[\N\REG](0,0)[2000]
+\drawarrow[\E\ATBASE](2000,0)
+\drawarrow[\E\ATTIP](2000,0)
+\drawarrow[\N\ATBASE](0,2000)
+\drawarrow[\N\ATTIP](0,2000)
+\drawline\fermion[\W\REG](\scalarbackx,\scalarbacky)[2000]
+\drawline\fermion[\S\REG](\scalarbackx,\scalarbacky)[2000]
+\drawarrow[\E\ATTIP](\scalarbackx,\scalarbacky)
+\drawarrow[\N\ATTIP](\scalarbackx,\scalarbacky)
+\end{picture}
+\begin{picture}(10000,10000)(0,0) % PICTURE 4
+\thicklines
+\drawline\fermion[\NW\REG](0,0)[8000]
+\drawline\fermion[\W\REG](\fermionbackx,\fermionbacky)[2000]
+\drawline\fermion[\N\REG](\fermionfrontx,\fermionfronty)[2000]
+\drawarrow[\NW\ATBASE](-1000,1000)
+\drawarrow[\NW\ATBASE](-2000,2000)
+\drawarrow[\NW\ATBASE](-3000,3000)
+\drawarrow[\NW\ATTIP](-4000,4000)
+\drawarrow[\NW\ATTIP](-5000,5000)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawline\fermion[\S\REG](0,0)[2000]
+\end{picture}
+\begin{picture}(10000,10000)(0,0) % PICTURE 5
+\drawline\photon[\E\REG](0,0)[8]
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[200]
+\drawarrow[\E\ATBASE](\pbackx,\pbacky)
+\drawline\fermion[\SW\REG](0,0)[2000]
+\drawline\fermion[\NW\REG](0,0)[2000]
+\end{picture}
+\vskip 0.5in
+\begin{picture}(10000,10000)(0,0) % PICTURE 6
+\drawline\gluon[\E\REG](0,0)[8]
+\drawarrow[\E\ATBASE](\pbackx,\pbacky)
+\drawline\fermion[\SW\REG](0,0)[2000]
+\drawline\fermion[\NW\REG](0,0)[2000]
+\end{picture}
+\hskip 0.42in
+\begin{picture}(10000,10000)(0,0) % PICTURE 7
+\drawline\photon[\SE\REG](0,0)[8]
+\drawarrow[\E\ATBASE](\pmidx,\pmidy)
+\drawarrow[\E\ATBASE](\pbackx,\pbacky)
+\drawline\fermion[\W\REG](0,0)[2000]
+\drawline\fermion[\N\REG](0,0)[2000]
+\end{picture}
+\begin{picture}(10000,10000)(0,0) % PICTURE 8
+\drawline\gluon[\SE\REG](0,0)[7]
+\drawarrow[\E\ATTIP](\pmidx,\pmidy)
+\drawarrow[\S\ATBASE](\pbackx,\pbacky)
+\drawline\fermion[\W\REG](0,0)[2000]
+\drawline\fermion[\N\REG](0,0)[2000]
+\end{picture}
+\end{verbatim}
+giving
+
+\centerline{ARROWS using FEYNMAN.TEX}
+\begin{picture}(10000,10000)(0,0)
+\drawline\fermion[\NE\REG](0,0)[8000]
+\drawarrow[\LDIR\ATTIP](\pmidx,\pmidy)
+\drawline\fermion[\E\REG](\fermionbackx,\fermionbacky)[2000]
+\drawline\fermion[\N\REG](\fermionfrontx,\fermionfronty)[2000]
+\global\advance\fermionfrontx by 400
+\global\advance\fermionfronty by 400
+\put(\fermionfrontx,\fermionfronty){{\scriptsize 1}}
+\drawline\fermion[\W\REG](0,0)[2000]
+\drawline\fermion[\S\REG](0,0)[2000]
+\drawarrow[\S\ATBASE](0,-2000)
+\drawarrow[\W\ATBASE](-2000,0)
+\end{picture}
+\hskip -0.4in
+\begin{picture}(10000,10000)(0,0)
+\drawline\fermion[\SW\REG](0,0)[8000]
+\thicklines
+\drawarrow[\SW\ATTIP](\pbackx,\pbacky)
+\thinlines
+\drawline\fermion[\W\REG](\fermionbackx,\fermionbacky)[2000]
+\drawline\fermion[\S\REG](\fermionfrontx,\fermionfronty)[2000]
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawline\fermion[\N\REG](0,0)[2000]
+\global\advance\fermionfrontx by 400
+\global\advance\fermionfronty by 400
+\put(\fermionfrontx,\fermionfronty){{\scriptsize 2}}
+\drawarrow[\E\ATBASE](2000,0)
+\drawarrow[\N\ATBASE](0,2000)
+\end{picture}
+\hskip -0.4in
+\begin{picture}(10000,10000)(0,0)
+\drawline\scalar[\SW\REG](0,0)[6]
+\drawarrow[\SW\ATTIP](\pbackx,\pbacky)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawline\fermion[\N\REG](0,0)[2000]
+\global\advance\fermionfrontx by 400
+\global\advance\fermionfronty by 400
+\put(\fermionfrontx,\fermionfronty){{\scriptsize 3}}
+\drawarrow[\E\ATBASE](2000,0)
+\drawarrow[\E\ATTIP](2000,0)
+\drawarrow[\N\ATBASE](0,2000)
+\drawarrow[\N\ATTIP](0,2000)
+\drawline\fermion[\W\REG](\scalarbackx,\scalarbacky)[2000]
+\drawline\fermion[\S\REG](\scalarbackx,\scalarbacky)[2000]
+\drawarrow[\E\ATTIP](\scalarbackx,\scalarbacky)
+\drawarrow[\N\ATTIP](\scalarbackx,\scalarbacky)
+\end{picture}
+\begin{picture}(10000,10000)(0,0)
+\thicklines
+\drawline\fermion[\NW\REG](0,0)[8000]
+\global\advance\pmidy by 500
+\put(\pmidx,\pmidy){{\scriptsize 4}}
+\drawline\fermion[\W\REG](\fermionbackx,\fermionbacky)[2000]
+\drawline\fermion[\N\REG](\fermionfrontx,\fermionfronty)[2000]
+\drawarrow[\NW\ATBASE](-1000,1000)
+\drawarrow[\NW\ATBASE](-2000,2000)
+\drawarrow[\NW\ATBASE](-3000,3000)
+\drawarrow[\NW\ATTIP](-4000,4000)
+\drawarrow[\NW\ATTIP](-5000,5000)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawline\fermion[\S\REG](0,0)[2000]
+\end{picture}
+\begin{picture}(10000,10000)(0,0)
+\drawline\photon[\E\REG](0,0)[8]
+\global\advance\pmidx by -600
+\global\advance\pmidy by 500
+\put(\pmidx,\pmidy){{\scriptsize 5}}
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[200]
+\drawarrow[\E\ATBASE](\pbackx,\pbacky)
+\drawline\fermion[\SW\REG](0,0)[2000]
+\drawline\fermion[\NW\REG](0,0)[2000]
+\end{picture}
+\vskip 0.5in
+\begin{picture}(10000,10000)(0,0)
+\drawline\gluon[\E\REG](0,0)[8]
+\global\advance\pmidx by -200
+\global\advance\pmidy by -2000
+\put(\pmidx,\pmidy){{\scriptsize 6}}
+\drawarrow[\E\ATBASE](\pbackx,\pbacky)
+\drawline\fermion[\SW\REG](0,0)[2000]
+\drawline\fermion[\NW\REG](0,0)[2000]
+\end{picture}
+\hskip 0.42in
+\begin{picture}(10000,10000)(0,0)
+\drawline\photon[\SE\REG](0,0)[8]
+\drawarrow[\E\ATBASE](\pmidx,\pmidy)
+\drawarrow[\E\ATBASE](\pbackx,\pbacky)
+\global\advance\pmidx by -200
+\global\advance\pmidy by 500
+\put(\pmidx,\pmidy){{\scriptsize 7}}
+\drawline\fermion[\W\REG](0,0)[2000]
+\drawline\fermion[\N\REG](0,0)[2000]
+\end{picture}
+\begin{picture}(10000,10000)(0,0)
+\drawline\gluon[\SE\REG](0,0)[7]
+\drawarrow[\E\ATTIP](\pmidx,\pmidy)
+\drawarrow[\S\ATBASE](\pbackx,\pbacky)
+\global\advance\pmidx by 100
+\global\advance\pmidy by 800
+\put(\pmidx,\pmidy){{\scriptsize 8}}
+\drawline\fermion[\W\REG](0,0)[2000]
+\drawline\fermion[\N\REG](0,0)[2000]
+\end{picture}
+\hskip 0.41in
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2H.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2H.tex
new file mode 100644
index 0000000000..0ff3972f8d
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC2H.tex
@@ -0,0 +1,80 @@
+\subsection{Labels}
+
+We have already seen several examples of how to draw labels.
+One is to label the overall diagram, at the top or bottom.
+The \bs centerline command (see the PHOTONBURST diagram in section 2.9.2)
+is useful for this.
+
+The way to include text within the picture is with the \verb@\put@ command.
+This was done in the sample file in section 1.6.
+The syntax is:
+\begin{verbatim}
+
+\put(<(x,y) co-ordinates of the lower left point of the text>){<text>}
+
+\end{verbatim}
+
+More complicated constructions are possible when used in conjunction
+with the \LaTeX\ \bs framebox and \bs makebox commands (see the\LaTeX\
+manual for details). The ``text'' can be mathematical equations,
+normal words or even other pictures. As an example:
+
+\begin{verbatim}
+
+\begin{picture}(20000,8000)
+\drawline\photon[\N\REG](3000,0)[5]
+\put(4000,\pmidy){$\leftarrow \frac{ig_{\mu\nu}}{p^2-m^2+i\epsilon}$}
+\put(2000,\pbacky){$\mu$}
+\put(2000,\pfronty){$\nu$}
+\end{picture}
+
+\end{verbatim}
+which results in
+
+\begin{picture}(20000,8000)
+\drawline\photon[\N\REG](3000,0)[5]
+\put(4000,\pmidy){$\leftarrow \frac{ig_{\mu\nu}}{p^2-m^2+i\epsilon}$}
+\put(2000,\pbacky){$\mu$}
+\put(2000,\pfronty){$\nu$}
+\end{picture}
+
+\section{Review Exercise for Chapter Two}
+
+Produce the following diagram, including labelling. Note the styles
+and boldness used.
+
+%\begin{verbatim}
+
+\begin{picture}(20000,20000)
+\thicklines\drawline\photon[\SE\REG](18000,18000)[5]
+\drawline\fermion[\S\REG](\photonfrontx,\photonfronty)[\boxlengthy]
+\drawarrow[\N\ATBASE](\pmidx,\pmidy)
+\drawline\fermion[\W\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\drawarrow[\W\ATTIP](\pmidx,\pmidy)
+\thinlines\drawline\fermion[\S\REG](\fermionbackx,\fermionbacky)[150]
+\drawline\fermion[\W\REG](\fermionfrontx,\fermionfronty)[150]
+\drawline\fermion[\SW\REG](\fermionbackx,\fermionbacky)[7000]
+\drawline\fermion[\S\REG](\fermionbackx,\fermionbacky)[75]
+\drawline\fermion[\E\REG](\fermionbackx,\fermionbacky)[75]
+\drawline\gluon[\SW\REG](\fermionbackx,\fermionbacky)[5]
+\put(\gluonfrontx,\gluonfronty){\circle*{500}}
+\drawline\fermion[\S\REG](\fermionbackx,\fermionbacky)[75]
+\drawline\fermion[\E\REG](\fermionbackx,\fermionbacky)[75]
+\drawline\fermion[\NE\REG](\fermionbackx,\fermionbacky)[7000]
+\put(\gluonbackx,\gluonbacky){\circle*{500}}
+\gaplength=300
+\drawline\scalar[\NW\REG](\gluonbackx,\gluonbacky)[3]
+\thicklines\drawarrow[\NW\ATBASE](\scalarbackx,\scalarbacky)
+\gaplength=300 \thinlines
+\drawline\scalar[\SE\REG](\gluonbackx,\gluonbacky)[3]
+\put(\pfrontx,\scalarbacky){{\bf H}$^0$}
+\put(\gluonfrontx,\gluonfronty)
+{\ $\,{}_{\longleftarrow f_6(\omega,p_+\cdot q_-)}$}
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[2000]
+\drawarrow[\NW\ATBASE](\pbackx,\pbacky)
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[2000]
+\drawarrow[\NW\ATTIP](\pmidx,\pmidy)
+\put(\pbackx,\pbacky){$\,\,p+q$}
+\end{picture}
+
+%\end{verbatim}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3A.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3A.tex
new file mode 100644
index 0000000000..81f1b7df92
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3A.tex
@@ -0,0 +1,416 @@
+% Read in by FEYNMANDOC: FEYNMANDOC3A. Called by FD3A.COM
+%\callvertex statements removed: see FEYNMANDOC3AOLD.
+\chapter{Drawing Vertices}
+
+Most types of vertices will be drawn using the \ddrawline\ command.
+A few specialized vertices, those of three and four gauge bosons,
+have been pre-defined.
+
+\section{The \ddrawvertex\ Command}
+
+The command {\it \ddrawvertex} is used to produce a limited number of
+vertices in conjunction with a number of special options.
+The syntax is:\\
+\begin{verbatim}
+
+\drawvertex<particle type>[<direction><number of lines in vertex>]
+ (<(x,y) co-ordinates of `beginning' of vertex>)[length of lines in vertex]
+
+\end{verbatim}
+where the parameters are similar to those of the \ddrawline\ statement.
+An example is:
+\begin{verbatim}
+
+\drawvertex\gluon[\S 3](0,10000)[4]
+
+\end{verbatim}
+which would draw a three-gluon vertex commencing from the co-ordinate
+point (0,10000) (see section 1.5 for a discussion of the co-ordinate
+grid), with the initial line drawn in a {\it southerly} direction
+(towards the bottom of the page) then branching into two other gluons
+(in the \verb@\SE@ and \verb@\SW@ direction in this case). Each would
+be of length four, \ie\ have four loops. Thus the end result would be
+a three-gluon vertex centred at some point (which will receive a
+co-ordinate label \verb@(\vertexmidx,\vertexmidy)@) beneath the
+point (0,10000). It will have one gluon line running {\it northward}
+from that line and terminating at (0,10000) and two others running
+southeasterly and southwesterly. In point of fact it would be:
+
+\begin{picture}(24000,15000)
+\drawvertex\gluon[\S 3](20000,14000)[4]
+\put(20100,13900){$\leftarrow(0,10000)$}
+\end{picture}
+\vskip 0.75in
+
+%Sometime prior to the initial use of \ddrawvertex the command
+%\verb@\callvertex@ must be issued. This may be done any time after
+%\FEYNMAN\ has been input and must only be done once per document.
+%
+We will refer to the initial line drawn (that one specified by the
+direction parameter) as {\em line one} and number the lines sequentially
+in a clockwise sense about the vertex. Therefore we will have
+line two, three and, possibly, four. In the above example line one
+is the northerly line, line two is the southeasterly line and
+line three is the southwesterly line (with respect to the centre).
+When \ddrawvertex\ is executed it returns the following parameters:
+
+
+\begin{verbatim}
+
+\vertexonex,\vertexoney: The (x,y) co-ordinates of the back of line one.
+\vertextwox,\vertextwoy: The (x,y) co-ordinates of the back of line two.
+\vertexthreex,\vertexthreey: The (x,y) co-ordinates of the back of line three.
+\vertexfourx,\vertexfoury: The (x,y) co-ordinates of the back of line four.
+\vertexmidx,\vertexmidy: The (x,y) co-ordinates of the middle of the vertex.
+\vertexcount: The number of vertices printed thus far.
+
+\end{verbatim}
+
+When drawing a gluon vertex all of the parameters returned by
+\verb@\drawline\gluon@ are defined but take the values of the last
+gluon drawn (number three for a three-gluon vertex and number four
+for a four-gluon vertex). Thus when \verb@\drawvertex\gluon[\N 4]...@
+is encountered \bs gluonlengthx, \bs pmidy, \bs gluonfrontx, \etc\
+will be defined with the values appropriate for gluon four (the \bs E
+gluon in this instance). The same applies for photonic vertices.
+
+\section{The Types of Vertex Lines}
+
+The kinds of particle lines which \FEYNMAN\ can draw with \ddrawvertex\ are:
+\begin{verbatim}
+
+ \photon
+ \gluon
+
+\end{verbatim}
+which are implemented as
+\begin{verbatim}
+ \drawvertex\photon...
+ \drawvertex\gluon...
+\end{verbatim}
+
+Note that this is the only argument of \ddrawvertex\ which is in lowercase
+letters. The \bs photon option is useful to represent ZWW, ZZWW, graviton
+vertices and so forth. Drawing $\psi\bar\psi\gamma$\ and similar
+vertices has been demonstrated repeatedly. Section 2.1 illustrated the
+basic command sequence.
+
+\section{Particle Direction}
+
+Each vertex may be drawn in any of eight possible directions,
+specified by the points of the compass with North always understood
+as being at the top of the page:
+
+\begin{verbatim}
+
+ \N \NE \E \SE \S \SW \W \NW
+
+\end{verbatim}
+This is the second argument of \ddrawvertex, just as it was for \ddrawline.
+\begin{verbatim}
+\drawvertex\photon[\NW...
+\end{verbatim}
+and so forth. Line one is drawn from the specified point
+in the indicated direction. The vertex is at the terminus of this line.
+Note that all directions are in uppercase and, as always,
+don't omit the backslash.
+All of the particle lines in the vertex are drawn in these compass directions.
+Vertices with four particles are drawn in a cross, that is each line is
+separated by $90^\circ$. Vertices with three particle lines are drawn
+in a `{\sf Y}' configuration with the specified direction being the `base'
+of the {\sf Y}. Thus a four-photon vertex drawn in the \bs NW
+direction will have line one in the \bs NW direction, with the vertex
+at the NW end. Line two will move around clockwise from this by $90^\circ$\
+and so will be drawn in the \bs SW direction out of the hub. Line three
+will be in the \bs NW direction and line four in the \bs NE from the
+vertex. A three-photon vertex drawn in the \bs NW direction will again
+have line one in the same direction. Line two will now be $135^\circ$\ further
+in a clockwise sense and therefore will be in the \bs W direction. Line three
+will be in the \bs N direction. Lines two and three will always be
+separated by $90^\circ$.
+
+\section{The Number of Lines}
+
+The third parameter will either be a 3 or a 4. It declares whether
+a three or four particle vertex is to be drawn. Any other entry will
+result in an error.
+
+\section{Line Co-ordinate Parameters}
+
+\subsection{Input Parameters}
+
+The fourth and fifth arguments of the \ddrawvertex\ command
+are the (x,y) co-ordinates of the {\em beginning} of particle
+line number one. These are as measured in {\em centipoints} on the grid
+which \FEYNMAN\ has established. They are entered in the format
+$(x\ co$-$ordinate,y\ co$-$ordinate)$\ where $x$ and $y$ may be integer
+numbers (between, roughly, -30,000 and +30,000) or variables
+(counters) with numerical values. A number of variables have been
+pre-defined and available for use. The user may also define his own
+(see the section on storing information). Once again some samples may be
+illustrative:
+\begin{verbatim}
+
+\drawvertex\photon[\SE 3](-1500,12000)[2]
+\drawvertex\photon[\E 4](\photonbackx,\photonbacky)[2]
+\drawvertex\gluon[\N 4](\Xone,\Yone)[1]
+\drawvertex\gluon[\SW 3](3000,\vertexthreey)[7]
+
+\end{verbatim}
+
+In the above \bs photonbackx and \bs photonbacky are co-ordinates,
+presumably returned from a previously drawing a photon.
+\bs Xone and \bs Yone are some values stored by the user and
+\bs vertexthreey is the ordinate of the endpoint of the third line in
+the previously drawn vertex.
+
+\subsection{Output Parameters}
+
+In section 3.1 we listed a number of useful positional parameters
+which are returned when \ddrawvertex\ is called.
+For the appropriate vertices the following are defined, each definition
+superseding the previous value of the variable.
+\begin{verbatim}
+
+\vertexonex,\vertexoney: The (x,y) co-ordinates of the back of line one.
+\vertextwox,\vertextwoy: The (x,y) co-ordinates of the back of line two.
+\vertexthreex,\vertexthreey: The (x,y) co-ordinates of the back of line three.
+\vertexfourx,\vertexfoury: The (x,y) co-ordinates of the back of line four.
+\vertexmidx,\vertexmidy: The (x,y) co-ordinates of the middle of the vertex.
+\vertexcount: The number of vertices printed thus far.
+
+\end{verbatim}
+These are graphically illustrated by
+
+\begin{verbatim}
+
+\begin{picture}(20000,11000)
+\drawvertex\photon[\N 3](18500,0)[4]
+\drawline\fermion[\SW\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\SE\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\put(\vertexonex,\vertexoney){\quad (vertexonex,vertexoney)}
+\put(1000,\vertextwoy){(vertextwox,vertextwoy)}
+\put(\fermionbackx,\vertexthreey){\quad (vertexthreex,vertexthreey)}
+\put(\vertexmidx,\vertexmidy){\quad (vertexmidx,vertexmidy)}
+\end{picture}
+
+\end{verbatim}
+%which assumes that \bs callvertex has not been issued previously.
+This yields
+\vskip 0.5in
+
+\begin{picture}(20000,11000)
+\drawvertex\photon[\N 3](18500,0)[4]
+\drawline\fermion[\SW\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\SE\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\put(\vertexonex,\vertexoney){\quad (vertexonex,vertexoney)}
+\put(1000,\vertextwoy){(vertextwox,vertextwoy)}
+\put(\fermionbackx,\vertexthreey){\quad (vertexthreex,vertexthreey)}
+\put(\vertexmidx,\vertexmidy){\quad (vertexmidx,vertexmidy)}
+\end{picture}
+\vskip 0.5in
+and
+\begin{verbatim}
+
+\begin{picture}(8000,8000)
+\drawvertex\gluon[\NE 4](0,0)[3]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\E\REG](\vertexfourx,\vertexfoury)[2000]
+\drawline\fermion[\S\REG](\vertexfourx,\vertexfoury)[2000]
+\put(\vertexonex,\vertexoney){ (vertexonex,vertexoney)}
+\put(\vertextwox,\vertextwoy){ (vertextwox,vertextwoy)}
+\put(\vertexthreex,\vertexthreey){ (vertexthreex,vertexthreey)}
+\put(\vertexfourx,\vertexfoury){ (vertexfourx,vertexfoury)}
+\put(\vertexmidx,\vertexmidy){ (vertexmidx,vertexmidy)}
+\end{picture}
+
+\end{verbatim}
+giving us
+\vskip 0.481in
+\begin{picture}(18000,8000)
+\drawvertex\gluon[\NE 4](12000,0)[3]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+%\put(\vertexonex,\fermionbacky){(vertexonex,vertexoney)}
+\put(0,\fermionbacky){(vertexonex,vertexoney)}
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+%\put(\vertextwox,\fermionbacky){(vertextwox,vertextwoy)}
+\put(0,\fermionbacky){(vertextwox,vertextwoy)}
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\put(\fermionbackx,\vertexthreey){\quad (vertexthreex,vertexthreey)}
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\E\REG](\vertexfourx,\vertexfoury)[2000]
+\put(\fermionbackx,\vertexfoury){\quad (vertexfourx,vertexfoury)}
+\drawline\fermion[\S\REG](\vertexfourx,\vertexfoury)[2000]
+\put(\vertexmidx,\vertexmidy){\quad\quad (vertexmidx,vertexmidy)}
+\end{picture}
+\vskip 0.5in
+%Note that we no longer need (or may use) a \bs callvertex statement.
+
+\section{Vertex Line Lengths}
+
+To make the analogy between \ddrawline\ complete,
+the final parameter to be given to \ddrawvertex\ is the {\it length}
+of the particles to be drawn. The units in which the length is given
+varies in way discussed in section 2.6
+For gluons the length parameter is the {\em number of loops}.
+The actual length of each loop depends upon which style is selected and
+whether the gluon is drawn diagonally (at a slant) or not.
+For photons the unit of measure is not a `wiggle', but a `half-wiggle'.
+This enables one to produce a photon which both begins and ends on
+the `upward' (or `downward') part of its oscillation.
+Each `leg' of the vertex will be drawn with the requested number of loops
+or half-wiggles. If a gluon vertex with a different number of loops
+on each leg were required then the additional loops would be attached
+subsequently to a basic vertex. Special features are discussed in
+the next chapter for doing this (\bs vertexlink and \bs vertexcap).
+The particle styles selected will be discussed in sections 3.8 and 3.9.
+
+The following illustrates the length parameter for photons:
+
+\vskip 0.1in
+\begin{picture}(18000,18000)
+\drawvertex\photon[\NE 4](0,0)[1]
+\drawvertex\photon[\NE 4](\vertextwox,\vertextwoy)[2]
+\drawvertex\photon[\NE 4](\vertextwox,\vertextwoy)[3]
+\drawvertex\photon[\NE 4](\vertextwox,\vertextwoy)[4]
+\end{picture}
+\vskip 0.2in
+which was drawn with
+
+\begin{verbatim}
+
+\begin{picture}(18000,18000)
+\drawvertex\photon[\NE 4](0,0)[1]
+\drawvertex\photon[\NE 4](\vertextwox,\vertextwoy)[2]
+\drawvertex\photon[\NE 4](\vertextwox,\vertextwoy)[3]
+\drawvertex\photon[\NE 4](\vertextwox,\vertextwoy)[4]
+\end{picture}
+
+\end{verbatim}
+In the above example both \bs photonlengthx,y and \bs particlelengthx,y
+would assume the values of the last photon actually drawn
+(the \bs SE photon with four half-wiggles).
+
+\section{Flipped Vertices}
+
+\ddrawline\ draws the vertices in a standard configuration. For four-particle
+vertices all of the lines commence from the hub in a clockwise orientation.
+For three-particle vertices lines one and two begin in a clockwise curvature and
+line three in a counter-clockwise sense. It is often very convenient,
+particularly when linking vertices directly together, to be able to draw
+one or more lines in a \bs {\it flipped} configuration, that is flipped
+about its axis. Obviously this will usually result in an \ae sthetically
+unpleasing vertex. \FEYNMAN\ admits a few more-or-less appealing flipped
+vertices to be drawn using the \verb&\flipvertex& command.
+
+When \verb&\flipvertex& appears directly prior to a \ddrawvertex\ statement
+certain of the lines will be drawn flipped with respect to the default.
+For four-particle vertices {\em all} of the lines are flipped. For
+three-particle vertices only {\em line one} will be flipped. Other
+combination may be drawn using \ddrawline.
+
+The following file illustrates \bs flipvertex at work:
+
+\begin{verbatim}
+
+\begin{picture}(28000,28000)
+\drawvertex\gluon[\NE 4](0,19000)[3]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\E\REG](\vertexfourx,\vertexfoury)[2000]
+\drawline\fermion[\S\REG](\vertexfourx,\vertexfoury)[2000]
+
+\flipvertex\drawvertex\gluon[\NE 4](18000,19000)[3]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\E\REG](\vertexfourx,\vertexfoury)[2000]
+\drawline\fermion[\S\REG](\vertexfourx,\vertexfoury)[2000]
+
+\THICKLINES
+
+\drawvertex\photon[\SE 3](0,8000)[5]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\SE\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\SW\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[2000]
+
+\flipvertex\drawvertex\photon[\SE 3](18000,8000)[5]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\SE\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\SW\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[2000]
+
+\end{picture}
+
+\end{verbatim}
+which would draw:
+\vskip 0.5in \hskip 1.05in
+\begin{picture}(28000,28000)
+\drawvertex\gluon[\NE 4](0,19000)[3]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\E\REG](\vertexfourx,\vertexfoury)[2000]
+\drawline\fermion[\S\REG](\vertexfourx,\vertexfoury)[2000]
+
+\flipvertex\drawvertex\gluon[\NE 4](18000,19000)[3]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\E\REG](\vertexfourx,\vertexfoury)[2000]
+\drawline\fermion[\S\REG](\vertexfourx,\vertexfoury)[2000]
+\THICKLINES
+\drawvertex\photon[\SE 3](0,8000)[5]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\SE\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\SW\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[2000]
+
+\flipvertex\drawvertex\photon[\SE 3](18000,8000)[5]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\SE\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\SW\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[2000]
+
+\end{picture}
+\vskip 0.8in
+\bs flipvertex may be used with any other options, such as \bs THICKLINES,
+as demonstrated above, and features yet to be presented (\bs linkvertices,
+\bs vertexcap \etc).
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3B.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3B.tex
new file mode 100644
index 0000000000..355eaa7c3b
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3B.tex
@@ -0,0 +1,133 @@
+% Read in by FEYNMANDOC: FEYNMANDOC3B. Called by FD3B.COM
+\section{Photon Vertices}
+
+\subsection{The Anatomy of a Photon Vertex}
+
+%All photons drawn by using \ddrawvertex\ command are drawn in either
+%\bs REG or \bs FLIPPED styles. % changed with PHOTONSETUP27/FEYNMAN34
+All four-photon vertices drawn by the \ddrawvertex\ command
+use photons drawn in either
+\bs REG or \bs FLIPPED styles.
+For three-photon vertices diagonal lines are \bs CURLY or \bs FLIPPEDCURLY.
+The format for drawing a photon vertex with \ddrawvertex\ is:
+\begin{verbatim}
+
+\drawvertex\photon[<direction of photon one><number of photons>]
+ <(x,y), the co-ordinates of the beginning of the photon one>
+ [<number of half-wiggles in each photon line>]
+
+\end{verbatim}
+The reason for specifying the number of {\it half}-wiggles is that it
+is sometimes convenient to have a line begin and end in either orientation
+(see section 2.6.1 for an example of this).
+
+Photonic vertices may be drawn in any of the eight compass directions.
+If emboldened photons are desired then \bs THICKLINES, as opposed to
+\bs thicklines, should be used. When the document is [12pt]
+the \bs bigphotons statement must be used (as discussed in section 2.9.2).
+
+The following parameters are returned by \ddrawvertex\bs photon:
+
+\begin{verbatim}
+
+\photonfrontx,\photonfronty: The (x,y) co-ordinates of the front of the last line.
+\photonbackx,\photonbacky: The (x,y) co-ordinates of the back of the last line.
+\photonlengthx,\photonlengthy: The (x,y) extent of the last line.
+\photoncount: The number of photons printed thus far.
+\pfrontx,\pfronty: The (x,y) co-ords of the front of the last line.
+\pmidx,\pmidy: The (x,y) co-ords of the middle of the last line.
+\pbackx,\pbacky: The (x,y) co-ordinates of the back of the last line.
+\plengthx,\plengthy: The (x,y) extent of the line.
+\vertexonex,\vertexoney: The (x,y) co-ordinates of the back of line one.
+\vertextwox,\vertextwoy: The (x,y) co-ordinates of the back of line two.
+\vertexthreex,\vertexthreey: The (x,y) co-ordinates of the back of line three.
+\vertexfourx,\vertexfoury: The (x,y) co-ordinates of the back of line four.
+\vertexmidx,\vertexmidy: The (x,y) co-ordinates of the middle of the vertex.
+\vertexcount: The number of vertices printed thus far.
+
+\end{verbatim}
+
+\subsection{Examples and Details}
+
+The following example illustrates that vertices need not only represent
+branchings but also crossed lines.
+\begin{verbatim}
+
+\begin{picture}(22000,22000)
+\drawline\fermion[\NE\REG](0,0)[6000]
+\drawvertex\photon[\NE 4](\pbackx,\pbacky)[7]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[\photonlengthx]
+\drawline\fermion[\N\REG](\fermionbackx,\fermionbacky)[\plengthy]
+\drawline\fermion[\NW\REG](\vertextwox,\vertextwoy)[6000]
+\end{picture}
+
+\end{verbatim}
+Producing
+\vskip 1.5in \hskip 1in
+\begin{picture}(22000,22000)
+\drawline\fermion[\NE\REG](0,0)[6000]
+\drawvertex\photon[\NE 4](\pbackx,\pbacky)[7]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[\photonlengthx]
+\drawline\fermion[\N\REG](\fermionbackx,\fermionbacky)[\plengthy]
+\drawline\fermion[\NW\REG](\vertextwox,\vertextwoy)[6000]
+\end{picture}
+\vskip 0.25in
+A couple of items may be noted. In order to draw the connecting fermion line
+we've drawn it in two stages. We know that \bs photonlengthx will return the
+horizontal length of line four of the four-photon vertex. Since line one is
+the one radiating from the centre in the \bs SW direction (since it was drawn
+{\it to} the centre of the vertex in the \bs NE direction) we count
+around clockwise to the fourth line being in the \bs SE direction.
+Since the picture is symmetric the `x' extent of line four is equal to the
+`y' extent of lines one and two. Therefore to connect the ends of lines one
+and two we need to draw a fermion of that length twice.
+In the second \ddrawline\ statement we use \bs plengthy so that it is the
+same length as the previous line.\ \ If, instead, we'd wanted
+\vskip 1.25in \hskip 1in
+
+\begin{picture}(12000,12000)(-10000,0)
+\drawline\fermion[\NE\REG](0,0)[6000]
+\THICKLINES\drawvertex\photon[\NE 4](\pbackx,\pbacky)[7]
+\THINLINES\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[\photonlengthx]
+\drawline\fermion[\N\REG](\fermionbackx,\fermionbacky)[\plengthy]
+\drawline\fermion[\NW\REG](\vertextwox,\vertextwoy)[6000]
+\THICKLINES\flipvertex\drawvertex\photon[\NE 3](\vertexthreex,\vertexthreey)[4]
+\flipvertex\drawvertex\photon[\SE 3](\vertexfourx,\vertexfoury)[4]
+\end{picture}
+\vskip 0.25in \hskip -1.52em
+we'd have added
+\begin{verbatim}
+
+\THICKLINES\flipvertex\drawvertex\photon[\NE 3](\vertexthreex,\vertexthreey)[4]
+\flipvertex\drawvertex\photon[\SE 3](\vertexfourx,\vertexfoury)[4]
+
+\end{verbatim}
+and put a \verb@\THICKLINES@ modifier before the first \ddrawvertex\ and a
+\verb)\THINLINES) following it.
+Note how we had to use \bs flipvertex in order to make the sets of vertices
+connect properly. In point of fact the above pictures are flawed since
+the two fermion-fermion-photon vertices are not symmetric. In this instance
+it would be more appropriate to draw two long photons instead of a vertex.
+
+Photonic vertices may also be {\it stemmed}, as will be discussed in
+the next chapter (however see section 2.9 for an example of stemmed
+photons). Finally we point out, in the form of an exercise, that
+being able to produce photons with an odd number of half-wiggles again
+has its uses.
+\vskip 0.5in
+Exercise: Draw the following using \ddrawvertex. How could you
+replace the fermion on the right by a scalar?
+\vskip 0.5in \hskip 0.5in
+\begin{picture}(20000,12000)(0,-6000)
+\drawline\photon[\E\REG](4000,0)[7]
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[4000]
+\drawline\fermion[\SW\REG](\photonfrontx,\photonfronty)[4000]
+\drawvertex\photon[\E 3](\photonbackx,\photonbacky)[7]
+\drawline\fermion[\S\REG](\vertextwox,\vertextwoy)[\vertextwoy]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[\vertextwoy]
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[\vertextwoy]
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[\vertextwoy]
+\end{picture}
+\vskip 2.05in
+Note that the diagonal fermion segments on the right have half of the length
+of the vertical segment.
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3C.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3C.tex
new file mode 100644
index 0000000000..64d7ac62db
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3C.tex
@@ -0,0 +1,93 @@
+% Read in by FEYNMANDOC: FEYNMANDOC3C. Called by FD3C.COM
+\section{Gluon Vertices}
+
+\subsection{The Anatomy of a Gluon Vertex}
+
+When a three-gluon vertex is drawn in the N, S, E or W directions
+using the \ddrawvertex\ command, diagonal gluon lines are drawn in a
+\bs REG style, while horizontal and vertical lines
+are drawn in a \bs CENTRAL configuration.
+When a three-gluon vertex is drawn in the NE, SW, SE or NW directions
+using the \ddrawvertex\ command, diagonal gluon lines are drawn in a
+\bs REG style, while horizontal and vertical lines
+are drawn in a \bs CURLY configuration.
+When preceded by a \bs flipvertex qualifier line one (and only line one)
+is flipped to become
+\bs FLIPPED, \bs FLIPPEDCURLY or \bs FLIPPEDCENTRAL.
+When a Four-gluon vertex is produced all of the lines will be either
+\bs REG (if drawn in a slanted direction) or \bs CURLY (if in a N, S, E or W
+direction). When \bs flipvertex is employed {\em all} of the lines will be
+flipped.
+
+The format is:
+\begin{verbatim}
+
+\drawvertex\gluon[<direction of gluon one><number of gluons>]
+ <(x,y), the co-ordinates of the beginning of the gluon one>
+ [<number of loops in each gluon line>]
+
+\end{verbatim}
+
+Gluonic vertices may be drawn in any of the eight compass directions.
+If {\bf bold} gluons are desired then \bs THICKLINES {\it or}
+\bs thicklines may be used.
+The following parameters are returned by \ddrawvertex\bs gluon:
+
+\begin{verbatim}
+
+\gluonfrontx,\gluonfronty: The (x,y) co-ordinates of the front of the last line.
+\gluonbackx,\gluonbacky: The (x,y) co-ordinates of the back of the last line.
+\gluonlengthx,\gluonlengthy: The (x,y) extent of the last line.
+\gluoncount: The number of gluons printed thus far.
+\pfrontx,\pfronty: The (x,y) co-ords of the front of the last line.
+\pmidx,\pmidy: The (x,y) co-ords of the middle of the last line.
+\pbackx,\pbacky: The (x,y) co-ordinates of the back of the last line.
+\plengthx,\plengthy: The (x,y) extent of the line.
+\vertexonex,\vertexoney: The (x,y) co-ordinates of the back of line one.
+\vertextwox,\vertextwoy: The (x,y) co-ordinates of the back of line two.
+\vertexthreex,\vertexthreey: The (x,y) co-ordinates of the back of line three.
+\vertexfourx,\vertexfoury: The (x,y) co-ordinates of the back of line four.
+\vertexmidx,\vertexmidy: The (x,y) co-ordinates of the middle of the vertex.
+\vertexcount: The number of vertices printed thus far.
+
+\end{verbatim}
+
+\subsection{Examples and Details}
+
+We illustrate the effect of \bs flipvertex in on three-gluon vertices.
+The co-ordinate numbering has been done to scale.
+\vskip 0.2in
+
+\begin{picture}(30000,40000)
+\drawvertex\gluon[\E3](5000,30000)[3]
+\put(-4000,22000){{\tt \bs drawvertex\bs gluon[\bs E3](0,30000)[3]}}
+\flipvertex\drawvertex\gluon[\E3](30000,30000)[3]
+\put(19000,22000)
+{{\tt \bs flipvertex\bs drawvertex\bs gluon[\bs E3](30000,30000)[3]}}
+\drawvertex\gluon[\NE3](5000,10000)[3]
+\put(-5000,8000){{\tt \bs drawvertex\bs gluon[\bs NE3](5000,10000)[3]}}
+\flipvertex\drawvertex\gluon[\NE3](30000,10000)[3]
+\put(19000,8000)
+{{\tt \bs flipvertex\bs drawvertex\bs gluon[\bs NE3](30000,10000)[3]}}
+\end{picture}
+
+The following example illustrates how repeated use of the four-gluon
+vertex may be employed with great effect. It also illustrates a great
+shortcoming of using gluon vertices since this small example uses up
+most of \LaTeX's standardly available internal memory. For this reason
+an \bs{\it include} statement was used (see \LaTeX\ manual).
+
+\begin{verbatim}
+
+\begin{picture}(30000,15000)
+\drawvertex\gluon[\E 4](15000,0)[3]
+\drawline\fermion[\SW\REG](\vertexonex,\vertexoney)[\vertextwoy]
+\flipvertex\drawvertex\gluon[\E 4](\vertexthreex,\vertexthreey)[3]
+\drawvertex\gluon[\N 4](\vertextwox,\vertextwoy)[3]
+\flipvertex\drawvertex\gluon[\W 4](\vertextwox,\vertextwoy)[3]
+\drawline\fermion[\NW\REG](\vertexthreex,\vertexthreey)[\fermionlength]
+\drawline\fermion[\S\REG](\vertexthreex,\vertexthreey)[\vertexthreey]
+\end{picture}
+
+\end{verbatim}
+giving:
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3D.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3D.tex
new file mode 100644
index 0000000000..d5fa0c24b8
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3D.tex
@@ -0,0 +1,52 @@
+% Read in by FEYNMANDOC: FEYNMANDOC3D. Called by FD3D.COM
+\begin{picture}(30000,15000)
+\drawvertex\gluon[\E 4](15000,0)[3]
+\drawline\fermion[\SW\REG](\vertexonex,\vertexoney)[\vertextwoy]
+\flipvertex\drawvertex\gluon[\E 4](\vertexthreex,\vertexthreey)[3]
+\drawvertex\gluon[\N 4](\vertextwox,\vertextwoy)[3]
+\flipvertex\drawvertex\gluon[\W 4](\vertextwox,\vertextwoy)[3]
+\drawline\fermion[\NW\REG](\vertexthreex,\vertexthreey)[\fermionlength]
+\drawline\fermion[\S\REG](\vertexthreex,\vertexthreey)[\vertexthreey]
+%%%% TEX CAPACITY EXCEEDED %%%
+%\vertexlink3
+%\drawvertex\gluon[\N 3](\vertexfourx,\vertexfoury)[4]
+%\drawvertex\gluon[\NE 4](\vertexthreex,\vertexthreey)[3]
+%\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+%\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\end{picture}
+
+\vskip 0.72in
+Of note here are the lengths used for the fermions. Since the first
+vertex is drawn with ordinate $y=0$, \bs vertextwoy will be
+the length of each gluon arm. Thus the lower exterior
+fermion will also be of this length. The upper fermion is of
+length \bs fermionlength, that is the length of the previously drawn
+fermion, assuring a match. The final fermion line is drawn from the
+specified point to $y=0$ using the same trick as above.
+
+An unfortunate defect of \FEYNMAN\ may be noticed by returning to
+the three-gluon vertices on the previous page. Occasionally
+one might wish to attach the upper left example onto the
+Eastern line of the lower right example. This would lead to
+a gluon of \bs FLIPPEDCURLY (\ie\ a non-central style) being joined
+with a \bs CENTRAL gluon configuration. This cannot be accomplished
+smoothly without employing arcane tricks usually involving some effort.
+% TO SEE HOW LOOK AT FILE VERTEST23.TEX, VERTEST24.TEX
+Similar comments can be made concerning certain combinations of three- and
+four-gluon vertices.
+
+Vertices may also be linked, capped and stemmed, as will be discussed in
+the next chapter. Examples of these features were given in
+section 2.10.2. Also in that section was a diagram labelled ``gluonburst''.
+We conclude this chapter by re-creating this using two \ddrawvertex\ commands.
+The reproduction of this diagram is an exercise for the section on
+placement of information in chapter four.
+In parting a brief word of caution about \TeX's memory usage. In the section
+on gluon lines it was pointed out that gluons consume vast portions of
+\LaTeX's 65500 words of internal memory (only 40000 of which is available to
+the user).
+This is trebly true for gluon
+vertices. Extending the vertices on the following page by two loops per
+line requires an additional 10000 words. In point of fact this one sample
+diagram uses 99\% of the available memory! For this reason it has been
+drawn slightly smaller than the example in chapter 2.
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3E.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3E.tex
new file mode 100644
index 0000000000..2cce101506
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC3E.tex
@@ -0,0 +1,25 @@
+% Read in by FEYNMANDOC: FEYNMANDOC3E. Called by FD3E.COM
+\centerline{GLUONBURST}
+\vskip -0.3in
+\begin{picture}(30000,15000)
+%\startphantom\drawvertex\gluon[\E 4](0,0)[6]\stopphantom
+%\startphantom\drawvertex\gluon[\E 4](0,0)[7]\stopphantom
+%\startphantom\drawvertex\gluon[\E 4](0,0)[8]\stopphantom
+\startphantom\drawvertex\gluon[\E 4](0,0)[9]\stopphantom
+\global\Xone=\vertexmidx
+\global\multiply\Xone by -1 % or use \negate
+\global\Yone=\vertexmidy
+\global\multiply\Yone by -1 % or use \negate
+%\drawvertex\gluon[\NE 4](15000,-10000)[8]
+%\drawvertex\gluon[\NE 4](15000,-10000)[4]
+%\drawvertex\gluon[\NE 4](15000,-10000)[5]
+%\drawvertex\gluon[\NE 4](15000,-10000)[6]
+\drawvertex\gluon[\NE 4](15000,-10000)[7]
+\global\advance\vertexmidx by \Xone
+\global\advance\vertexmidy by \Yone
+%\drawvertex\gluon[\E 4](\vertexmidx,\vertexmidy)[6]
+%\drawvertex\gluon[\E 4](\vertexmidx,\vertexmidy)[7]
+%\drawvertex\gluon[\E 4](\vertexmidx,\vertexmidy)[8]
+\drawvertex\gluon[\E 4](\vertexmidx,\vertexmidy)[9]
+\put(\vertexmidx,\vertexmidy){\circle*{1500}}
+\end{picture}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4A.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4A.tex
new file mode 100644
index 0000000000..22c7253269
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4A.tex
@@ -0,0 +1,264 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4A. Called by FD4A.COM
+\chapter{Advanced Features}
+% placement: \advance,\negate,\multroothalf etc., \phantom, \boxlengths
+% links: lines,vertices
+% stems: lines,vertices
+% caps: lines,vertices
+% loops
+% saving and re-using: \Xone, \newcount etc.; \drawandsave, \savebox etc.
+% internal variables available: \vertexcount etc., \unitheights etc.
+% internal codes: \N==0 etc.
+% errors: FEYNMAN-defined; TeX-defined
+%
+This chapter describes a number of techniques and commands, some alluded to
+earlier, which may be employed by the user to aid him or her in producing
+the desired Feynman diagram as closely and quickly as possible.
+
+\section{Placing It Where You Want It}
+
+\FEYNMAN\ has been designed in such a way that particle lines may
+be drawn in relation with one another with a minimum of effort.
+Instances invariably arise, however, where the simple commands defined
+thus far become inadequate to the task. The user might then be condemned
+to perform some algebra or, much worse, to experiment with the positions
+of lines and vertices in order to make the appropriate lines connect
+or place labels in the desired positions.
+
+Fortunately a number of features and tricks are available to reduce
+this unwanted tedium.
+
+\subsection{Arithmetic Operations: Manipulating Returned Parameters}
+
+The most common placement problems occur when labels are used or
+closed structures, such as loops, are included. We've seen numerous
+examples of loops. Those which involve fermions and, to a lesser extent
+scalars, are most easily constructed. Re-examining the example in section
+2.10.2 and the problems posed at the conclusions of sections
+2.9.2, 2.10.2, and 2.12 we note one thing in common. Each involves
+drawing a fermion which is the same (or a simple constant times the) length
+of a gluon or photon. These make use of the various \verb@\length@
+parameters which are returned when a line is drawn: \verb@\gluonlengthx@,
+\verb@\gluonlengthy@, \verb@\photonlengthx@, \verb@\photonlengthy@,
+\verb@\fermionlengthx@, \verb@\fermionlengthy@, \verb@\scalarlengthx@, and
+\verb@\scalarlengthy@, as well as \verb@\plengthx@ and
+\verb@\plengthy@, which correspond to the previous line.
+Each of these has a sign and magnitude depending upon the direction drawn.
+\verb@\fermionlength@ is an especially useful additional measure whose length
+is always positive and equal to the entire length of the previously
+drawn fermion.
+It is often more difficult to prepare loops when the \ddrawvertex\ statement
+has been used since only the length of one line is recorded. This was evident
+in the example is section 3.8.2.
+
+It is often desirable to know the separation of two arbitrary points,
+perhaps on two different Feynman diagrams or between points in
+different sub-branches of a single diagram. Since these points will, in
+general, be at co-ordinates unknown to the user,
+the ability to perform simple arithmetic within the \TeX\ file is needed.
+
+\TeX\ defines the following useful commands:
+\begin{verbatim}
+
+\global\advance <variable name> by <increment (number or variable)>
+\global\multiply <variable name> by <multiplier (number or variable)>
+\global\divide <variable name> by <divisor (number or variable)>
+
+\end{verbatim}
+where, as usual, \verb@<,>@ are not part of the syntax.
+In addition \FEYNMAN\ provides:
+\begin{verbatim}
+
+\negate <variable name>
+\double <variable name>
+\multroothalf <variable name>
+
+\end{verbatim}
+
+In each case the variable name, such as \bs fermionlength, will be an
+integer and the result will be an integer (rounded). The first three
+add, multiply and divide respectively. The second three multiply by minus
+one, multiply by two, and multiply by $\frac{1}{\sqrt2}$ respectively.
+Each represents an {\em action}, not a result.
+Thus to subtract \bs Y from \bs X you would enter
+\begin{verbatim}
+
+\negate\Y
+\global\advance \X by \Y
+
+\end{verbatim}
+but {\bf not}: \verb@\global\advance \X by \negate\Y@. (For the
+cognoscente you must expand the token ``\bs negate \bs Y'' first).
+Note that \LaTeX\ defines the commands:
+\begin{verbatim}
+
+\newcounter{<variable name>}
+\setcounter{<variable name><variable value}
+\addtocounter{<variable name><increment>}
+
+\end{verbatim}
+but that \verb@\addtocounter@ should not be used with \FEYNMAN\ unless
+the variable has been user-defined (see section 4.2) {\em with \bs newcounter}.
+
+As an example consider labelling the midpoint of a particle line. Suppose
+that the following is desired:
+
+\hskip 1.75in
+\begin{picture}(8000,8000)
+\drawline\photon[\NE\REG](0,0)[10]
+\global\advance\pmidx by 650
+\global\advance\pmidy by -450
+\put(\pmidx,\pmidy){$\gamma$}
+\end{picture}
+\bigskip
+
+Where the label is at the midpoint of the photon on the lower side.
+The {\it true} (geometric) midpoint is at the co-ordinates
+(\bs pmidx,\bs pmidy). However if we try:
+\begin{verbatim}
+
+\begin{picture}(8000,8000)
+\drawline\photon[\NE\REG](0,0)[10]
+\put(\pmidx,\pmidy){$\gamma$}
+\end{picture}
+
+\end{verbatim}
+we'd produce:
+
+\hskip 1.75in
+\begin{picture}(8000,8000)
+\drawline\photon[\NE\REG](0,0)[10]
+\put(\pmidx,\pmidy){$\gamma$}
+\end{picture}
+\medskip
+
+One would like to move the `$\gamma$' about two millimeters to the right and
+about one and a half millimeters down. This may be readily accomplished
+with:
+\begin{verbatim}
+
+\begin{picture}(8000,8000)
+\drawline\photon[\NE\REG](0,0)[10]
+\global\advance\pmidx by 650
+\global\advance\pmidy by -450
+\put(\pmidx,\pmidy){$\gamma$}
+\end{picture}
+
+\end{verbatim}
+The exact values used are a question of style and one will frequently
+experiment to achieve particular \ae stetics.
+
+A frequent use of \bs multroothalf occurs when one desires to make
+a horizontal or vertical line the same length as a slanted line
+(or vice-versa). As a simple exercise, reproduce the following diagram
+for Delbr\"uck scattering where all lines are of precisely the same
+length. Begin by drawing a photon.
+
+\vskip-0.25in \hskip 0.75in
+\begin{picture}(10000,10000)(0,0)
+\drawline\photon[\SE\FLIPPED](0,5000)[6]
+\double\photonlengthx \multroothalf\photonlengthx
+\drawline\fermion[\E\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\drawline\photon[\NE\REG](\pbackx,\pbacky)[6]
+\drawline\fermion[\S\REG](\photonfrontx,\photonfronty)[\fermionlength]
+\drawline\photon[\SE\FLIPPED](\pbackx,\pbacky)[6]
+\drawline\fermion[\W\REG](\photonfrontx,\photonfronty)[\fermionlength]
+\drawline\photon[\SW\REG](\pbackx,\pbacky)[6]
+\drawline\fermion[\N\REG](\photonfrontx,\photonfronty)[\fermionlength]
+\end{picture}
+%\vskip 0.5in \vskip 0.75in
+\vskip 1.35in
+As a final example we consider the following case, which is the lowest order
+QED correction to Coulomb scattering of a lepton from a nucleus
+which distinguishes between a positron and an electron.
+\vskip 0.25in
+\hskip 0.75in
+\begin{picture}(10000,10000)(0,0)
+\THICKLINES
+\drawline\photon[\NE\REG](5000,0)[6]
+\multiply\unitboxheight by 3
+\multroothalf\unitboxheight
+\drawline\fermion[\E\REG](\photonbackx,\photonbacky)[\unitboxheight]
+\drawline\fermion[\NW\REG](\photonbackx,\photonbacky)[\fermionlength]
+\drawline\fermion[\N\REG](\fermionbackx,\fermionbacky)[\fermionlength]
+\drawline\photon[\SW\FLIPPED](\fermionfrontx,\fermionfronty)[9]
+\drawline\fermion[\E\REG](\photonbackx,\photonbacky)[7000]
+\drawline\fermion[\W\REG](\photonbackx,\photonbacky)[3000]
+\drawline\fermion[\E\REG](\fermionbackx,-500)[10000]
+\drawline\fermion[\W\REG](\fermionbackx,-1000)[10000]
+\end{picture}
+%\vskip 0.2in
+\newpage
+%Here the problem is how to space the two photon lines such that
+%an integral number of half-wiggles (three in this case)
+Here the problem is how to space the two photon lines, which differ in length
+by three half-wiggles, such that both will connect smoothly
+to the fermions. To facilitate this we introduce
+two new variables which are returned by \ddrawline\ and \ddrawvertex\
+(and also by \bs drawloop): \bs {\it unitboxwidth} and \bs {\it unitboxheight}.
+They are (respectively) the width and height (x and y extents) of
+the {\bf smallest complete unit} of the previously line.
+For a gluon this is one loop, for a photon an {\em entire} wiggle,
+for a scalar one segment plus one gap and for a fermion the entire length.
+Of course one can equally well use a
+\begin{verbatim}
+\global\divide\gluonlengthx by <number of loops>
+\end{verbatim}
+and so forth to obtain the equivalent value.
+Using these the above may be quickly drawn:
+\begin{verbatim}
+
+\hskip 0.75in
+\begin{picture}(10000,10000)(0,0)
+\THICKLINES
+\drawline\photon[\NE\REG](5000,0)[6]
+\multiply\unitboxheight by 3
+\multroothalf\unitboxheight
+\drawline\fermion[\E\REG](\photonbackx,\photonbacky)[\unitboxheight]
+\drawline\fermion[\NW\REG](\photonbackx,\photonbacky)[\fermionlength]
+\drawline\fermion[\N\REG](\fermionbackx,\fermionbacky)[\fermionlength]
+\drawline\photon[\SW\FLIPPED](\fermionfrontx,\fermionfronty)[9]
+\drawline\fermion[\E\REG](\photonbackx,\photonbacky)[7000]
+\drawline\fermion[\W\REG](\photonbackx,\photonbacky)[3000]
+\drawline\fermion[\E\REG](\fermionbackx,-500)[10000]
+\drawline\fermion[\W\REG](\fermionbackx,-1000)[10000]
+\end{picture}
+
+\end{verbatim}
+Since ``\bs particlelengthx'', \etc represent the {\em extent}, or increment,
+of the previous line they are often negative. For a gluon drawn in the \bs SW
+direction, for instance, both \bs gluonlengthx and \bs gluonlengthy are
+negative. When using these to compare lengths one must generally employ
+the ``\bs negate'' command. An alternative is to use \bs {\em boxlengthx}
+and \bs {\em boxlengthy} which give the {\em absolute magnitudes}
+of the length parameters. There are a few instances, however,
+where the two might not match (see the sections on stems and caps).
+
+The placement of arrows sometimes requires fine adjustments as well.
+As an additional exercise try to draw the following as closely as possible.
+Use a 12-point document size.
+
+\begin{center}
+Drell-Yan W-Production
+
+\begin{picture}(10000,10000)
+%\bigphotons
+\THICKLINES
+\drawline\photon[\E\REG](5000,5000)[11]
+\drawarrow[\E\ATBASE](\pmidx,4820)
+\put(\pmidx,5800){$W^+$}
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[5500]
+\drawarrow[\SE\ATBASE](\pmidx,\pmidy)
+\put(3500,7100){q}
+\drawline\fermion[\SW\REG](\photonfrontx,\photonfronty)[5500]
+\drawarrow[\SW\ATBASE](\pmidx,\pmidy)
+\put(3500,2300){$\overline{q}'$}
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[5500]
+\drawarrow[\SW\ATBASE](\pmidx,\pmidy)
+\advance \pmidx by -1400
+\put(\pmidx,7100){$e^+$}
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[5500]
+\drawarrow[\SE\ATBASE](\pmidx,\pmidy)
+\advance \pmidx by -1200
+\put(\pmidx,2300){$\nu$}
+\end{picture}
+\end{center}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4B.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4B.tex
new file mode 100644
index 0000000000..563ef77cb2
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4B.tex
@@ -0,0 +1,86 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4B. Called by FD4B.COM
+%\chapter{Advanced Features con't}
+%
+\subsection{Phantom Commands}
+
+It will sometimes happen, generally when vertices and loops are involved,
+that one wishes that one could draw an invisible line; one
+which would not actually appear in the final version of a diagram.
+This is almost always the result of an alignment problem.
+For instance if, for some reason, you wished to draw two photons,
+parallel to one another, whose spacing was equal to a {\em gluon}
+of five loops in a certain configuration. This might be for an overlay
+of a transparency. One would like to connect the ends of the photons
+with a {\em phantom} gluon.
+
+The solution to this problem is to draw the line in {\bf phantom} mode.
+Any \FEYNMAN\ commands between the statements:
+\begin{verbatim}
+
+\startphantom
+ .
+ .
+ .
+\stopphantom
+
+\end{verbatim}
+are performed but are not printed. In particular all of the returned
+parameters are evaluated as if the lines and vertices had actually been
+produced. Note also that \FEYNMAN's internal working resources are
+similarly depleted. The one item that will still be printed while
+\bs startphantom is in effect is a labelling command (or any use of \bs put).
+\bs startphantom does not extend
+beyond the confines of the given picture. The following is a classic
+example of the use of phantom commands in conjunction with \ddrawvertex:
+
+% from VERTEST5.TEX
+% An example of using PHANTOM MODE to position lines and vertices.
+%\newcount\Yone \newcount\Xone
+%\newcount\Xtwo \newcount\Ytwo
+%\newcount\Xthree \newcount\Ythree
+\begin{picture}(8000,8000)
+%\THICKLINES
+% This picture isn't printed out. The \drawvertex statement sets up some
+% spacing for the pic below. It tests the `phantom mode' option.
+% The \fermions below are superfluous and merely test \startphantom.
+\startphantom
+\drawvertex\gluon[\NE 3](0,0)[4]
+\drawline\fermion[\SW\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\SE\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\E\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\S\REG](\vertexthreex,\vertexthreey)[2000]
+\stopphantom
+\global\Xtwo=\vertextwox \global\Ytwo=\vertextwoy
+\global\Xthree=\vertexthreex \global\Ythree=\vertexthreey
+\end{picture}
+%\message{\vertexcount = \the\vertexcount}
+\hskip 2.0in
+\begin{picture}(18000,18000)
+\global\Xone=\Xthree \negate\Xone
+\global\Yone=\Ytwo \negate\Yone
+\drawvertex\gluon[\NE 3](\Xone,\Yone)[4]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\global\Xone=\Xthree \negate\Xone
+\global\Yone=\Ytwo %\negate\Yone
+\drawvertex\gluon[\SE 3](\Xone,\Yone)[4]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[2000]
+\global\Xone=\Xthree %\negate\Yone
+\global\Yone=\Ytwo \negate\Yone
+%\global\advance\Xone by 30
+%\global\advance \Yone by 15
+\drawvertex\gluon[\NW 3](\Xone,\Yone)[4]
+\drawline\fermion[\E\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+\global\Xone=\Xthree %\negate\Xone
+\global\Yone=\Ytwo %\negate\Yone
+\drawvertex\gluon[\SW 3](\Xone,\Yone)[4]
+\drawline\fermion[\E\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[2000]
+\put(-9500,-14000){The number of vertices (including phantom vertices) =
+\number\vertexcount}
+\end{picture}
+%\message{\vertexcount = \the\vertexcount}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4C.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4C.tex
new file mode 100644
index 0000000000..b1e6fb0505
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4C.tex
@@ -0,0 +1,210 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4C. Called by FD4C.COM
+%\chapter{Advanced Features con't - PHANTOM COMMANDS - STORING ITEMS}
+%
+%\subsection{Phantom Commands}
+which is produced by:
+\begin{verbatim}
+
+\begin{picture}(8000,8000)
+% This picture isn't printed out. The \drawvertex statement sets up some
+% spacing for the pic below. It tests the `phantom mode' option.
+% The \fermions below are superfluous and merely test \startphantom.
+\startphantom
+\drawvertex\gluon[\NE 3](0,0)[4]
+\drawline\fermion[\SW\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\SE\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\E\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\S\REG](\vertexthreex,\vertexthreey)[2000]
+\stopphantom
+\global\Xtwo=\vertextwox \global\Ytwo=\vertextwoy
+\global\Xthree=\vertexthreex \global\Ythree=\vertexthreey
+\end{picture}
+\hskip 2.0in
+\begin{picture}(18000,18000)
+\global\Xone=\Xthree \negate\Xone
+\global\Yone=\Ytwo \negate\Yone
+\drawvertex\gluon[\NE 3](\Xone,\Yone)[4]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\global\Xone=\Xthree \negate\Xone
+\global\Yone=\Ytwo %\negate\Yone
+\drawvertex\gluon[\SE 3](\Xone,\Yone)[4]
+\drawline\fermion[\W\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[2000]
+\global\Xone=\Xthree %\negate\Yone
+\global\Yone=\Ytwo \negate\Yone
+\drawvertex\gluon[\NW 3](\Xone,\Yone)[4]
+\drawline\fermion[\E\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\S\REG](\vertexonex,\vertexoney)[2000]
+\global\Xone=\Xthree %\negate\Xone
+\global\Yone=\Ytwo %\negate\Yone
+\drawvertex\gluon[\SW 3](\Xone,\Yone)[4]
+\drawline\fermion[\E\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertexonex,\vertexoney)[2000]
+\put(-9500,-14000){The number of vertices (including phantom vertices) =
+\number\vertexcount}
+\end{picture}
+
+
+\end{verbatim}
+We see that the diagram is drawn by reflecting the lower left
+vertex three times. This is necessary since each vertex
+can only be drawn beginning at one specific point.
+%The slight mismatches at the joints occur because the various
+%vertices are not truly symmetric (a \TeX\ defect).
+First the \bs NE vertex is drawn, commencing at (0,0), in phantom mode.
+This provides the $x$ and $y$ displacements of the vertex relative
+to what will become the centre of the square gluon loop at the co-ordinate
+(0,0). Then we use reflection symmetry, with the \bs negate command,
+to draw all four vertices. The assignment statements such as
+\verb@\global\Yone=\Ytwo@ are discussed
+below in the section on saving and re-using items.
+
+As an exercise in the use of phantom and arithmetic commands
+draw the following box diagram for the supersymmetric production process
+$q\bar q \rightarrow \tilde q \bar{\tilde q}$. Make sure that the
+box is exactly square, that the scalar gaps are
+precisely one half of the length of the segments,
+and use a gluon of the \bs FLAT type.
+\vskip 0.3in
+\begin{picture}(20000,15000)
+\drawline\gluon[\E\FLAT](10000,15000)[7]
+% Calc lengths of scalars segments and gaps.
+\global\Xone=\gluonlengthx
+\global\divide\Xone by 8 % \Xone will be the gap length
+\global\Yone=\Xone
+\double\Yone % \Yone will be the segment length
+% Draw fermions:
+\drawline\fermion[\W\REG](\gluonfrontx,\gluonfronty)[\gluonlengthx]
+\drawline\fermion[\S\REG](\gluonfrontx,\gluonfronty)[\gluonlengthx]
+\drawline\fermion[\W\REG](\fermionbackx,\fermionbacky)[\gluonlengthx]
+% Draw scalars
+\global\gaplength=\Xone \global\seglength=\Yone
+\drawline\scalar[\E\REG](\gluonbackx,\gluonbacky)[3]
+\global\gaplength=\Xone \global\seglength=\Yone
+\drawline\scalar[\S\REG](\gluonbackx,\gluonbacky)[3]
+\global\gaplength=\Xone \global\seglength=\Yone
+\drawline\scalar[\E\REG](\scalarbackx,\scalarbacky)[3]
+% Now the photon. Need to know it's length so use \phantom
+\startphantom
+\drawline\photon[\E\FLIPPED](0,0)[8] % Can draw from anywhere
+\stopphantom % Now we have the photon's length!!
+\negate\photonlengthx
+\global\advance\gluonlengthx by \photonlengthx % the difference
+\global\divide\gluonlengthx by 2
+\drawline\fermion[\E\REG](\fermionfrontx,\fermionfronty)[\gluonlengthx]
+\drawline\photon[\E\FLIPPED](\pbackx,\pbacky)[8] % Exactly as in phantom mode.
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[\gluonlengthx]
+% This is even easier using stemmed photons!
+\end{picture}
+\vskip -0.1in
+You might also try labelling the lines. What would be the difficulty
+in rotating this diagram through 45 degrees?
+You will find it convenient to use the assignment statement
+\verb@\global<name>=<name>@ mentioned above. Remember that \bs seglength
+and \bs gaplength always resume their defaults after a line is drawn.
+
+\section{Storing and Re-Using Items}
+
+It is often convenient, as well as efficient, to store a line, collection
+of lines and vertices, or even an entire picture for re-use later.
+\FEYNMAN\ itself continuously stores lines for various periods.
+It is also useful to be able to store a parameter value for use
+later in the same or a subsequent picture. Examples of the latter have
+already been given and will now be presented formally.
+
+\subsection{Storing and Re-Using Information}
+
+The basic command for storing a parameter is
+\begin{verbatim}
+\global<parameter 1>=<parameter 2>
+\end{verbatim}
+Several examples were given in the previous section such as:
+\begin{verbatim}
+\global\gaplength=\Xone \global\seglength=\Yone
+\end{verbatim}
+Such statements are particularly useful when some value needs to be
+altered, such as by
+\begin{verbatim}
+\global\advance\particlebackx by 2000
+\end{verbatim}
+and yet also need to be retained for further use. Certain variables,
+such as \verb@\vertexcount@, are dangerous to adjust and so would need
+to be copied prior to alteration. Note that \verb@\global<\name>=...@
+is a \TeX\ primitive operation. As discussed earlier \LaTeX\
+has its own equivalent statements but these should not be used in conjunction
+with variables defined internally by \FEYNMAN. (For instance attempting
+to use \verb@\setcounter@ in conjunction with \verb@\pmidx@ would result in
+an error.) The \verb@\global@ statement prior to \verb@<name>=, \advance@
+\etc is often superfluous but it is safest to use it. This makes the
+changes instituted common to all subroutines called by \FEYNMAN.
+If you continually forget to use it you may someday find the following
+baffling sort of error:
+\begin{verbatim}
+TeX capacity exceeded.
+Save Stack overflow.
+\end{verbatim}
+If this occurs go back and insert \verb@\global@
+just prior to every assignment and alteration statement.
+
+Every variable named must commence with a backslash (\bs)
+however one cannot indiscriminantly create a variable, say \verb@\mycopy@,
+by entering \verb@\global\mycopy=\pbackx@.
+This is because {\em control sequences}, such as \verb@\begin@, also commence
+with backslashes. \FEYNMAN\ has pre-defined a series of empty variable
+names which may be freely used. These are
+\begin{verbatim}
+ \Xone \Yone
+ \Xtwo \Ytwo
+ \Xthree \Ythree
+ \Xfour \Yfour
+ \Xfive \Yfive
+ \Xsix \Ysix
+ \Xseven \Yseven
+ \Xeight \Yeight
+\end{verbatim}
+Not terribly imaginative, I'll grant you, but they work.
+If the user feels obliged to define his own variable names be warned
+that there is very little excess \LaTeX\ capacity available for such
+man\oe vers. A handfull may be defined. This is done by entering
+\begin{verbatim}
+\global\newcount<your variable name>
+\end{verbatim}
+prior to assigning it a value. This may be done on the same line:
+\begin{verbatim}
+\global\newcount\pmidycopy \global\pmidycopy=\pmidy
+\end{verbatim}
+The globals may be omitted ({\it every} time \bs pmidycopy is assigned or
+altered!) if the variable's value is not to be retained from picture to picture.
+Note, however, that \verb@\pmidycopy@ will remain defined as a variable
+until the end of the program and so
+\verb@\global\newcount\pmidycopy@ must appear only once in the program
+(this may be prior to the \verb@\begin{document}@ statement).
+To repeat it is to receive an error. Attempts to define variable names
+such as ``\bs begin'' or ``\bs drawline'' lead to real trouble.
+
+A word about outputting the value of a variable. As illustrated
+at the end of the final example of the previous section, one cannot
+simply say \verb@\put(x,y){\pmidycopy}@ and expect the current value of
+\verb@\pmidycopy@ to be placed that the indicated co-ordinates.
+It must first be converted from a parameter name to what that name represents
+(\ie evaluated). This may be done by preceeding the variable by
+\bs number or \bs the. The same is true of output to the terminal which
+is done via the \bs message command:
+\begin{verbatim}
+\message{pmidycopy=\the\pmidycopy}
+\end{verbatim}
+This latter is often useful for debugging your picture when things
+are not appearing where you thought they would go.
+
+
+\subsection{Storing and Re-Using Pictures}
+
+\FEYNMAN\ has a number of specialized commands which enables the user to
+store and re-use one or a number of lines. To store a segment of, or an
+entire, picture one utilizes \LaTeX's \bs{\it savebox} facility.
+Unfortunately one will frequently exhaust \LaTeX's (tiny) internal
+working memory when this is attempted. The best solution in this
+case is to ask a kindly \TeX\ wizard to expand \TeX's capacity.
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4D.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4D.tex
new file mode 100644
index 0000000000..66ef60a54a
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4D.tex
@@ -0,0 +1,211 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4D. Called by FD4D.COM
+%\chapter{Advanced Features con't Storing Pictures}
+%
+%\subsection{Phantom Commands}
+\subsubsection{Storing Lines}
+
+Why would one wish to store a single particle line? It might
+be that diagram has the same line repeated over and over commencing
+from different starting points. The user may simply like a particular
+line style and length and want to always use it (for instance an \bs E
+\bs FLIPPEDFLAT gluon five loops in length).
+To store a line under the name \verb@<line name>@ the basic command is:
+\begin{verbatim}
+\drawandsaveline `<line name>' as <the same arguments as \drawline>
+\end{verbatim}
+Note the `...' around the name (which must commence with a backslash).
+As an example one could have
+\begin{verbatim}
+\drawandsaveline `\cutephoton' as \photon[\S\LONGPHOTON](-2000,500)[7]
+\end{verbatim}
+which would draw a photon as if
+\begin{verbatim}
+\drawline\photon[\S\LONGPHOTON](-2000,500)[7]
+\end{verbatim}
+had appeared but save it under the name \bs cutephoton.
+
+To utilize the saved line one enters
+\begin{verbatim}
+\drawoldpic<line name>(x,y)
+\end{verbatim}
+where (x,y) is the co-ordinate to draw the line from. For example
+\begin{verbatim}
+\drawandsaveline `\cutephoton' as \photon[\S\LONGPHOTON](-2000,500)[7]
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[6500]
+\drawoldpic\cutephoton(1500,\pbacky)
+\drawoldpic\cutephoton(2500,\pbacky)
+\drawoldpic\cutephoton(3500,\pbacky)
+\end{verbatim}
+\bs drawoldpic re-assigns the values of \bs pfrontx,y; \bs pmidx,y and
+\bs pbackx,y but does {\bf not} alter any other existing
+paramenters such as \bs plengthx, \bs gluonbacky or \bs photoncount.
+(\bs pfrontx,\bs pfronty) are assigned the (x,y) values and
+(\bs pbackx,\bs pbacky) are incremented by the {\it current} values of
+\bs plengthx and \bs plengthy.
+Subsequent usage of \bs drawoldpic costs no additional internal \TeX\ memory
+resources. The above example would draw:
+
+\begin{picture}(12000,18000)
+\drawandsaveline `\cutephoton' as \photon[\S\LONGPHOTON](0,18000)[7]
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[6500]
+\drawoldpic\cutephoton(1500,\pbacky)
+\drawoldpic\cutephoton(2500,\pbacky)
+\drawoldpic\cutephoton(3500,\pbacky)
+\end{picture}
+\vskip -0.1in
+The storage space for \bs cutephoton will be reclaimed following the
+\verb@\end{picture}@ statement. Two other features exist to draw lines.
+At any time, while in picture mode, the last line drawn via the
+\ddrawline\ command is stored under the name `\bs lastline' and may
+be freely used. \bs lastline is replaced when \ddrawline\ is
+next encountered. Note that you may never use the same name twice
+when storing a line.
+To illustrate the use of \bs lastline, a portion of the previous example could
+be produced using:
+\begin{verbatim}
+\drawline\fermion[\E\REG](0,16000)[6500]
+\drawline\photon[\S\LONGPHOTON](1500,\pbacky)[7]
+\drawoldpic\lastline(2500,\pfronty)
+\drawoldpic\lastline(3500,\pfronty)
+\end{verbatim}
+to wit
+
+\begin{picture}(12000,14000)
+\drawline\fermion[\E\REG](0,12000)[6500]
+\drawline\photon[\S\LONGPHOTON](1500,\pbacky)[7]
+\drawoldpic\lastline(2500,\pfronty)
+\drawoldpic\lastline(3500,\pfronty)
+\end{picture}
+
+One may also store a line {\it after} it has been drawn by using the
+\bs {\it saveas} command.
+The statements:
+\begin{verbatim}
+\drawline\photon[\S\LONGPHOTON](0,18000)[7]
+\saveas `\cutephoton'
+\end{verbatim}
+would be equivalent to the statement
+\begin{verbatim}
+\drawandsaveline `\cutephoton' as \photon[\S\LONGPHOTON](0,18000)[7]
+\end{verbatim}
+The latter statement is superior, however, since \bs saveas actually
+re-draws the line (in a phantom mode) and thus uses twice as much of
+\TeX's resources. Thus \bs saveas should be avoided and has been
+mentioned merely for completeness. Since it saves the last line drawn
+it is most useful when used subsequent to a \ddrawvertex\ statement.
+
+\subsubsection{Storing Pictures}
+
+It frequently happens that a picture, or part of a picture,
+needs to replicated. In many instances it is only the labels which
+need to be changed. The general \LaTeX\ command for saving objects is
+\begin{verbatim}
+
+\savebox{<box name>}(<box width>,<box height>)[<position>]{<object>}
+
+\end{verbatim}
+This saves the `object' in a `box' but does not draw it directly.
+To draw it the \bs drawoldpic command may again be used as shown below.
+The box name must begin with a backslash (\bs). The width and height
+will be in centipoints. The ``position'' argument is optional
+and may be ignored. If so the picture will be centred in the box.
+Other options are {\tt [tr] [br] [tl] [bl]} which will position the
+picture in a corner of the named box, and {\tt [t] [b] [l] [r]}
+which will place the picture along a side. The `object' in this case
+is a picture commencing with \verb@\begin{picture}@ and terminating
+with \verb@\end{picture}@. Just as variable names must be
+initialized so must box names. Prior to the \bs savebox a command
+\verb@\global\newsavebox<name>@ must appear and this name must not be used
+again. The saved picture takes the form:
+\newpage
+\begin{verbatim}
+\global\newsavebox{\Brehmsstrahlung}
+ .
+ .
+ .
+\savebox{\Brehmsstrahlung}(10000,14000)[tl]{
+\begin{picture}(10000,140000)(2000,3000)
+ .
+ .
+ .
+\end{picture}
+} % end of \savebox
+ .
+ .
+ .
+\begin{picture}(18000,22000)
+...(various Feynman commands)
+\drawoldpic\Brehmsstrahlung(\pbackx,\pbacky)
+\global\advance\pbackx by 2000
+\drawoldpic\Brehmsstrahlung(\pbackx,\pbacky)
+\global\advance\pbackx by 2000
+\drawoldpic\Brehmsstrahlung(\pbackx,\pbacky)
+...(various Feynman commands)
+\end{picture}
+
+\end{verbatim}
+with further possible uses in other diagrams. Of course the picture could
+be merely stored and directly used as an entire diagram.
+\LaTeX\ keeps the stored box around thereafter occupying valuable
+storage space. Thus when one is done with the stored picture the command
+\begin{verbatim}
+\sbox{\Brehmsstrahlung}{}
+\end{verbatim}
+will clear the space. The box will continue to exist and new objects
+may be stored in it without a further \bs newsavebox statement.
+One is cautioned that positioning the old picture within a new picture
+may require some experimentation since the box sizes may not match.
+The other caution is that \TeX's resources tend to become
+exhausted with a bewildering rapidity which limits the size
+of stored pictures.
+The following is a simple example.
+\begin{verbatim}
+
+\global\newsavebox{\ESHOWER}
+\savebox{\ESHOWER}(0,0)[tl]{
+\begin{picture}(0,0)
+\drawline\photon[\SE\REG](0,0)[8]
+\drawline\fermion[\E\REG](\photonbackx,\photonbacky)[2000]
+\drawline\fermion[\S\REG](\photonbackx,\photonbacky)[2000]
+\end{picture}
+} % end savebox
+\begin{picture}(15000,5000)
+\drawline\fermion[\E\REG](0,5000)[15000]
+\drawoldpic\ESHOWER(0,5000)
+\drawoldpic\ESHOWER(5000,5000)
+\drawoldpic\ESHOWER(10000,5000)
+\end{picture}
+\sbox{\ESHOWER}{}
+
+\end{verbatim}
+producing
+\vskip 0.1in
+\global\newsavebox{\ESHOWER}
+\savebox{\ESHOWER}(0,0)[tl]{
+\begin{picture}(0,0)
+\drawline\photon[\SE\REG](0,0)[8]
+\drawline\fermion[\E\REG](\photonbackx,\photonbacky)[2000]
+\drawline\fermion[\S\REG](\photonbackx,\photonbacky)[2000]
+\end{picture}
+} % end savebox
+\begin{picture}(15000,5000)
+\drawline\fermion[\E\REG](0,5000)[15000]
+\drawoldpic\ESHOWER(0,5000)
+\drawoldpic\ESHOWER(5000,5000)
+\drawoldpic\ESHOWER(10000,5000)
+\end{picture}
+\sbox{\ESHOWER}{}
+
+\vskip 0.4in
+Note the \bs sbox used to empty the box.
+Also note the trick of storing a box of zero dimension.
+This greatly simplifies the positioning of stored diagram.
+One might expect that
+the gluon branches (together with labelling) in
+the cover diagram were generated this way. Alas there was insufficient
+memory to store them (gluon vertices are particularly expensive)
+and they were drawn by duplicating the statements. This saved storage
+space at the expense of CPU.
+One may also store boxes within boxes. Thus the entire three-photon
+diagram above could have been stored and re-used. Indeed this is
+the basic technique used in constructing lines and vertices.
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4E.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4E.tex
new file mode 100644
index 0000000000..a615d15a15
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4E.tex
@@ -0,0 +1,127 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4E. Called by FD4E.COM
+%\chapter{Advanced Features con't Links, Stems and Caps: LINKS}
+%
+\section{Links, Stems and Caps}
+
+In this section we discuss a number of important embellishments which may be
+used to both simplify the construction of a diagram and beautify the results.
+
+\subsection{Gluon Links}
+
+Ideally one would like to draw identical lines (or vertices) following
+one another and have them join seamlessly, as if a single line had been drawn.
+For photons, scalars and fermions there is no difficulty in doing this.
+For many styles of gluon this is likewise true. For diagonally-drawn
+gluons and those produced in the \verb@\CENTRAL@ style this is not the
+case, as illustrated in section 2.10.2. A similar problem ensues when
+one wishes to attach a gluon to a vertex constructed from lines drawn in these
+styles.
+
+\subsubsection{Linking Lines}
+
+The \bs gluonlink command is used between two \ddrawline\bs gluon statements
+when the direction of the gluons is \verb@\NW, \NE, \SW @ or \verb@\SE@ or
+when the gluons are both in a \verb@\CENTRAL@ or \verb@\FLIPPEDCENTRAL@
+configuration. It's effect is:
+\begin{verbatim}
+
+\begin{picture}(10000,5000)
+% No \gluonlink:
+\drawline\gluon[\NE\FLIPPED](0,0)[2]
+\drawline\gluon[\NE\FLIPPED](\pbackx,\pbacky)[2]
+%
+% With \gluonlink:
+\drawline\gluon[\NE\FLIPPED](5000,0)[2]\gluonlink
+\drawline\gluon[\NE\FLIPPED](\pbackx,\pbacky)[2]
+\end{picture}
+
+\end{verbatim}
+Note that the \bs gluonlink may also appear on a separate line or preceding the
+second gluon. There may be labelling statements interspersed but no other
+lines may be joined. The result is:
+
+
+\begin{picture}(10000,5000)
+% No \gluonlink:
+\drawline\gluon[\NE\FLIPPED](0,0)[2]
+\drawline\gluon[\NE\FLIPPED](\pbackx,\pbacky)[2]
+%
+% With \gluonlink:
+\drawline\gluon[\NE\FLIPPED](5000,0)[2]\gluonlink
+\drawline\gluon[\NE\FLIPPED](\pbackx,\pbacky)[2]
+\end{picture}
+
+Individually its effect is
+\begin{verbatim}
+\begin{picture}(5000,5000)
+\drawline\gluon[\SE\REG](5000,0)[2]\gluonlink
+\drawline\fermion[\N\REG](\gluonbackx,\gluonbacky)[1500]
+\drawline\fermion[\SE\REG](\pbackx,\pbacky)[1500]
+\end{picture}
+\end{verbatim}
+\begin{picture}(5000,5000)
+\drawline\gluon[\SE\REG](0,5000)[2]\gluonlink
+\drawline\fermion[\W\REG](\pbackx,\pbacky)[1500]
+\drawline\fermion[\N\REG](\gluonbackx,\gluonbacky)[1500]
+\end{picture}
+
+
+\subsubsection{Linking Vertices}
+
+
+When the number of loops is specified in a \ddrawvertex\ command,
+every line radiating from the center has that number of loops.
+A \bs gluonlink following the \ddrawvertex\ will pertain solely to the
+{\it last} line drawn. In order to permit linkages to other or multiple
+vertex lines the \bs {\it vertexlink} and
+\bs {\it vertexlinks} commands are used.
+Unlike \bs gluonlink, \bs vertexlink(s) {\it preceds} the \ddrawvertex\
+statement. The format is
+\verb@\vertexlink@$n$, where $n$ is the line number of the vertex to be linked.
+For a vertex drawn in a \verb@\S@ direction, line one is the first drawn,
+\ie\ the \bs S line drawn {\it to} the centre (or if you prefer the \bs N
+line coming out of the middle of the vertex). The others are counted
+clockwise around the midpoint \verb@(\vertexmidx,\vertexmidy)@.
+\verb@\vertexlinks@ is an abbreviation of
+\begin{verbatim}
+\vertexlink1\vertexlink2\vertexlink3
+\vertexlink1\vertexlink2\vertexlink3\vertexlink4
+\end{verbatim}
+for a three and four line vertex respectively.
+For instance, when the line
+
+\begin{verbatim}
+\vertexlink2\vertexlink3\flipvertex\drawvertex\gluon[\NE 4](0,0)[3]
+\end{verbatim}
+is encountered a four-gluon vertex (four lines each with 3 loops)
+is drawn in the \bs flipped configuration. The tip of the southwestern arm
+is at (0,0) and the northwestern and northeastern arms have links attached
+(ending at \verb@vertextwox,y@ and \verb@vertexthreex,y@ respectively).
+The only time that a \verb@\N, \S, \E or \W@ gluon vertex requires a link is
+for \bs vertexone when a three-gluon vertex is drawn. Vertices are generally
+linked to gluon lines but may also be linked together directly as in the
+following example.
+\vskip 0.75in
+
+\hskip 1.25in
+\begin{picture}(8000,12000)
+\vertexlink3 \drawvertex\gluon[\SE 4](0,14500)[3]
+\flipvertex\drawvertex\gluon[\SE 3](\vertexthreex,\vertexthreey)[2]
+\flipvertex\drawvertex\gluon[\E 4](\vertextwox,\vertextwoy)[4]
+\end{picture}
+
+which was produced by the three statements
+\begin{verbatim}
+
+\begin{picture}(8000,12000)
+\vertexlink3 \drawvertex\gluon[\SE 4](0,11500)[3]
+\flipvertex\drawvertex\gluon[\SE 3](\vertexthreex,\vertexthreey)[2]
+\flipvertex\drawvertex\gluon[\E 4](\vertextwox,\vertextwoy)[4]
+\end{picture}
+
+\end{verbatim}
+Note that the \bs E four-gluon vertex requires no special links (since it is
+drawn using \bs CURLY style gluons).
+In parting note that links may be drawn both with \bs THINLINES and
+\bs THICKLINES and will not appear when used within phantom mode
+(section 4.1.2).
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4F.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4F.tex
new file mode 100644
index 0000000000..633cad2c67
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4F.tex
@@ -0,0 +1,210 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4F. Called by FD4F.COM
+%\chapter{Advanced Features con't Links, Stems and Caps: STEMS}
+%
+\subsection{Stems}
+
+Stems are small line segments attached to the end of particle lines.
+Gluons and photons may be specified with a stem on either end or both ends.
+Vertices may also be drawn with stems on any or all of the lines.
+
+\subsubsection{Stemmed Lines}
+
+Examples of stemmed lines have been given in sections 2.9.2 (photons)
+and 2.10.2 (gluons).
+They are most \ae stetically pleasing when used in conjunction with
+gluons of a centralized style (\ie\ diagonal gluons or those of styles
+\bs CENTRAL and \bs FLIPPEDCENTRAL). To add a stem to a line enter one of
+\verb@\frontstemmed@ or \verb@\backstemmed@
+just prior to the \ddrawline\ statement.
+To stem both front and back enter \verb@\stemmed@. That is
+\begin{verbatim}
+
+\frontstemmed\drawline...
+\backstemmed\drawline...
+\stemmed\drawline...
+
+\end{verbatim}
+The length of a stem may be set by issuing the command
+\begin{verbatim}
+\global\stemlength=<number in centipoints>
+\end{verbatim}
+just prior to the stem command. The length is automatically re-set to its
+default value. Note that, since diagonal lines of length less than 1415
+centipoints cannot be drawn, this is the minimum stemlength possible
+for a diagonal particle. Attempts to draw a shorter stem will result in
+a gap. To illustrate
+\begin{verbatim}
+
+\begin{picture}(15000,8000)
+\frontstemmed\drawline\gluon[\E\CENTRAL](1000,6000)[3]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[1500]
+
+\global\stemlength=750
+\frontstemmed\drawline\gluon[\E\CENTRAL](1000,1000)[3]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[1500]
+
+\stemmed\drawline\photon[\NE\FLIPPED](10000,2000)[5]
+\global\Xone=\pbackx \global\Yone=\pbacky
+\drawline\fermion[\S\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\W\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\N\REG](\Xone,\Yone)[1500]
+\drawline\fermion[\E\REG](\Xone,\Yone)[1500]
+\end{picture}
+
+\end{verbatim}
+giving
+
+\begin{picture}(15000,8000)
+\frontstemmed\drawline\gluon[\E\CENTRAL](1000,6000)[3]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[1500]
+
+\global\stemlength=750
+\frontstemmed\drawline\gluon[\E\CENTRAL](1000,1000)[3]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[1500]
+
+\stemmed\drawline\photon[\NE\FLIPPED](10000,2000)[5]
+\global\Xone=\pbackx \global\Yone=\pbacky
+\drawline\fermion[\S\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\W\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\N\REG](\Xone,\Yone)[1500]
+\drawline\fermion[\E\REG](\Xone,\Yone)[1500]
+\end{picture}
+
+Stems may be also emboldened via \bs THICKLINES and will not appear
+when used in phantom mode. A number of additional features need to
+be mentioned.
+
+Occasionally it may transpire that the user needs to reference the position
+of the endpoint of a line both with the stem and without it (perhaps for
+alignment purposes). After the \bs stemmed\ddrawline\ has been issued
+the following returned parameters refer to the tips of the {\it stems}:
+\begin{verbatim}
+ \pfrontx \pbackx \pmidx \plengthx \boxlengthx
+ \pfronty \pbacky \pmidy \plengthy \boxlengthy
+\end{verbatim}
+whereas
+the following returned parameters refer to the tips of the {\it particle}:
+\begin{verbatim}
+ \gluonfrontx \gluonbackx \gluonlengthx
+ \gluonfronty \gluonbacky \gluonlengthy
+ \photonfrontx \photonbackx \photonlengthx
+ \photonfronty \photonbacky \photonlengthy
+\end{verbatim}
+the same is true for \bs frontstemmed and \bs backstemmed.
+This does have a disadvantage in that one frequently must store
+the values of \verb@\pbackx,\pbacky@ \etc\ in order to draw arrows and so
+forth after intervening \ddrawline\ commands.
+
+When a stem is drawn it does not truly become part of the line to which it
+has been attached. For this reason if \bs drawandsaveline is used with a stem
+statement the {\em line} will be saved but {\em not} the stem(s). That is the
+statements
+\begin{verbatim}
+\global\stemlength=100
+\stemmed\drawandsaveline`\littlestem' as \gluon[\W\CENTRALGLUON](0,0)[5]
+\end{verbatim}
+will produce a line as if \ddrawline\ had been issued (with stems) but
+attempts to re-use \bs littlestem will result in a stemless gluon.
+The same is true for storing gluons with links and caps attached.
+Stems saved with the \bs savebox facility will, of course, be retained.
+Furthermore in the above example the reduced \bs stemlength will also
+revert to its default value.
+We demonstrate the previous points:
+
+\begin{verbatim}
+
+\begin{picture}(8000,10000)
+
+\stemmed\drawandsaveline`\unstemmed' as \gluon[\W\CENTRAL](7000,8000)[5]
+\global\Xone=\pbackx \global\Yone=\pbacky
+\global\Xthree=\plengthx \global\Ythree=\plengthy % store gluon length
+\drawline\fermion[\NE\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\SE\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\NW\REG](\Xone,\Yone)[1500]
+\drawline\fermion[\SW\REG](\Xone,\Yone)[1500]
+
+\global\plengthx=\Xthree \global\plengthy=\Ythree %re-sets gluon lengths
+
+\drawoldpic\unstemmed(7000,4000)
+\global\Xone=\pbackx \global\Yone=\pbacky
+\global\Xtwo=\pfrontx \global\Ytwo=\pfronty
+\drawline\fermion[\NE\REG](\gluonfrontx,\gluonfronty)[3000]
+\drawline\fermion[\SE\REG](\gluonfrontx,\gluonfronty)[3000]
+\drawline\fermion[\NW\REG](\gluonbackx,\gluonbacky)[3000]
+\drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[3000]
+
+\drawline\fermion[\NE\REG](\Xtwo,\Ytwo)[1500]
+\drawline\fermion[\SE\REG](\Xtwo,\Ytwo)[1500]
+\drawline\fermion[\NW\REG](\Xone,\Yone)[1500]
+\drawline\fermion[\SW\REG](\Xone,\Yone)[1500]
+\end{picture}
+
+\end{verbatim}
+
+\begin{picture}(8000,10000)
+\stemmed\drawandsaveline`\unstemmed' as \gluon[\W\CENTRAL](7000,8000)[5]
+\global\Xone=\pbackx \global\Yone=\pbacky
+\global\Xthree=\plengthx \global\Ythree=\plengthy
+\drawline\fermion[\NE\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\SE\REG](\pfrontx,\pfronty)[1500]
+\drawline\fermion[\NW\REG](\Xone,\Yone)[1500]
+\drawline\fermion[\SW\REG](\Xone,\Yone)[1500]
+
+\global\plengthx=\Xthree \global\plengthy=\Ythree %re-sets gluon lengths
+
+\drawoldpic\unstemmed(7000,4000)
+\global\Xone=\pbackx \global\Yone=\pbacky
+\global\Xtwo=\pfrontx \global\Ytwo=\pfronty
+\drawline\fermion[\NE\REG](\gluonfrontx,\gluonfronty)[3000]
+\drawline\fermion[\SE\REG](\gluonfrontx,\gluonfronty)[3000]
+\drawline\fermion[\NW\REG](\gluonbackx,\gluonbacky)[3000]
+\drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[3000]
+
+\drawline\fermion[\NE\REG](\Xtwo,\Ytwo)[1500]
+\drawline\fermion[\SE\REG](\Xtwo,\Ytwo)[1500]
+\drawline\fermion[\NW\REG](\Xone,\Yone)[1500]
+\drawline\fermion[\SW\REG](\Xone,\Yone)[1500]
+\end{picture}
+
+Note how the line length needed to be stored when \bs drawoldpic was
+called. As explained before \bs drawoldpic re-sets \bs pfrontx,y
+to the point from which the line is currently being drawn and calculates
+\bs pmidx,y and \bs pbackx,y based upon that point and the most recent
+value of \bs plengthx,y. This is useful when the same line is being
+repeatedly drawn without intervening \ddrawline\ or \ddrawvertex\
+commands. When such commands occur the lengths are lost.
+Obviously \bs plengthx,y were measured inclusive of the stems.
+To avoid this difficulty one would instead let \bs Xthree=\bs gluonlengthx
+and then assign this value to \bs plengthx.
+
+The same line may be both stemmed and linked. If this is attempted on
+the same end you will obtain nonsense.
+
+\begin{picture}(18000,10000)
+\global\stemlength=1416
+\backstemmed\drawline\gluon[\SE\REG](0,8000)[3]\gluonlink
+\frontstemmed\drawline\gluon[\E\CENTRAL](10000,4000)[4]\gluonlink
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[4000]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[4000]
+\flipvertex\drawvertex\gluon[\E 3](\gluonbackx,\gluonbacky)[3]
+\end{picture}
+\vskip 0.2in
+which comes from
+
+\begin{verbatim}
+
+\begin{picture}(18000,10000)
+\global\stemlength=1416
+\backstemmed\drawline\gluon[\SE\REG](0,8000)[3]\gluonlink
+
+\frontstemmed\drawline\gluon[\E\CENTRAL](10000,4000)[4]\gluonlink
+\drawline\fermion[\NW\REG](\pfrontx,\pfronty)[4000]
+\drawline\fermion[\SW\REG](\pfrontx,\pfronty)[4000]
+\flipvertex\drawvertex\gluon[\E 3](\gluonbackx,\gluonbacky)[3]
+\end{picture}
+
+\end{verbatim}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4G.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4G.tex
new file mode 100644
index 0000000000..defd95c345
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4G.tex
@@ -0,0 +1,61 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4G. Called by FD4G.COM
+%\chapter{Advanced Features con't Links, Stems and Caps: STEMS}
+%
+\subsubsection{Stemmed Vertices}
+
+The \bs{\it stemvertex} and \bs{\it stemvertices} qualifiers add a stem or stems
+to the rear of vertex lines drawn with a \ddrawvertex\ command.
+The syntax is:
+\begin{verbatim}
+
+\stemvertex<n>\drawvertex...
+\stemvertices\drawvertex...
+
+\end{verbatim}
+where \verb@<n>@ is the number of the vertex line to be stemmed.
+\bs stemvertices stems all of the lines. Theses commands remain in effect only
+for the current \ddrawvertex. For example
+\begin{verbatim}
+
+\stemvertex2\drawvertex\photon[\E 3](\Xone,\Yone)[6]
+\global\stemlength=1415
+\stemvertices\drawvertex\gluon[\SW 4](0,0)[4]
+
+\end{verbatim}
+will draw a three-photon vertex with a stem of standard length on the second
+line (in the NE direction) and a four-gluon vertex with stems of length 1415 on
+each of the four lines. Note that the stemlength is not reset until the entire
+vertex has been completed. To stem just lines two and four one would have
+written
+\begin{verbatim}
+\global\stemlength=1415
+\stemvertex2\stemvertex4\drawvertex\gluon[\SW 4](0,0)[4]
+\end{verbatim}
+and so forth. In this case \bs vertexonex,
+\bs vertexoney \etc\ refer to the end of the stem and there is no easy
+way of marking the end of a given line {\it sans stem}.
+\bs stemvertex may be used in conjunction with \bs vertexlink and
+\bs vertexcap. As an exercise try to produce:
+\vskip 2.150in
+\hskip 1.25in
+\begin{picture}(8000,8000)
+\stemvertex1\vertexlink3\drawvertex\gluon[\N 3](0,0)[4]
+\drawline\fermion[\SW\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\SE\REG](\vertexonex,\vertexoney)[2000]
+%\drawline\fermion[\SW\REG](\vertexthreex,\vertexthreey)[2000]
+%\drawline\fermion[\NW\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\global\stemlength=1500
+\stemvertex3\vertexlink4\drawvertex\gluon[\NE 4](\vertexthreex,\vertexthreey)[3]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+\stemlength=1500
+\backstemmed\drawline\gluon[\SE\REG](\vertexfourx,\vertexfoury)[2]
+\drawarrow[\SE\ATTIP](\pbackx,\pbacky)
+\end{picture}
+\vskip 0.45in
+where the diagonal stems are of length 1500. Use links and stems wherever
+possible.
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4H.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4H.tex
new file mode 100644
index 0000000000..dfa3ac174a
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4H.tex
@@ -0,0 +1,115 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4H. Called by FD4H.COM
+%\chapter{Advanced Features con't Links, Stems and Caps: CAPS}
+%
+\subsection{Capped Gluons}
+
+Gluons drawn in the styles \bs REG, \bs FLIPPED, \bs CURLY, \bs FLIPPEDCURLY,
+\bs FLAT, \bs FLIPPEDFLAT and \bs SQUASHED commence and conclude on one
+{\em edge} of the particle line as opposed to \bs CENTRAL gluons which begin
+and end near the middle of the line. This can be seen clearly in section
+2.10.1. On occasion one wishes to draw a gluon which is central on one side
+and non-central and the other. To centralize a gluon the \bs{\it gluoncap}
+modifier is invoked. Similarly gluon verticies may be capped via
+\bs{\it vertexcap} and \bs{\it vertexcaps}.
+
+\subsubsection{Capped Lines}
+
+The \bs{\it gluoncap} statement is similar to the \bs gluonlink statement.
+Only the rear of the gluon is ever capped. If both ends need to be
+centralized it is best to use a \bs CENTRAL gluon. Any horizontal or vertical
+gluon may be capped but \bs CENTRAL and \bs FLIPPEDCENTRAL gluons will receive
+caps of size zero. Diagonal gluons may be stemmed but not capped. Examples
+are:
+\begin{verbatim}
+
+\drawline\gluon[\W\FLAT](8000,0)[5]\gluoncap
+\drawline\gluon[\E\SQUASHED](10000,0)[5]\gluoncap
+
+\end{verbatim}
+
+\begin{picture}(15000,5000)
+\drawline\gluon[\W\FLAT](8000,2500)[5]\gluoncap
+\drawline\gluon[\E\SQUASHED](10000,2500)[5]\gluoncap
+\end{picture}
+\vskip 0.2in
+
+Caps may be emboldened and are not printed in phantom mode.
+The length of the stem of the cap is \bs stemlength and this may be re-set as
+described in the section on stems (4.3.2).
+Unlike the case of links both \bs gluonbackx,y and
+\bs pbackx,y will refer to the end of the cap. The details of
+the uncapped gluon may be stored prior to issuing the \bs gluoncap command.
+(and ditto for
+\bs gluonlengthx,y \etc). As an exercise try to reproduce the capped example
+at the conclusion of section 2.10.2 (note that this picture is better drawn
+using stemmed CENTRAL gluons).
+
+\subsubsection{Capped Vertices}
+
+Gluon caps find their greatest use when appended to \ddrawvertex-generated
+vertices. One does not have a choice of which gluon type is produced when
+\ddrawvertex\bs gluon is employed. Capped vertices may be seen in the lower
+left of the cover illustration. In this case gluons of types \bs CURLY and
+\bs FLIPPEDCURLY are capped. The syntax is
+\begin{verbatim}
+
+\vertexcap<n>\drawvertex\gluon...
+\vertexcaps\drawvertex\gluon...
+
+\end{verbatim}
+Where, once again, \verb@<n>@ is the gluon line to be capped. \bs vertexcaps
+caps all lines which can be capped. Examples would be
+\begin{verbatim}
+
+\vertexcap1\vertexcap4\drawvertex\gluon[\S 4](0,0)[6]
+\vertexcaps\drawvertex\gluon[\W 3](0,0)[3]
+
+\end{verbatim}
+In the latter case no caps would be drawn since all three lines are of a
+CENTRAL variety. \bs vertexcap may be used in conjunction with
+\bs vertexlink and \bs stemvertex.
+
+Exercise: Produce
+
+\begin{picture}(20000,21000)
+% Work our way from the upper left to lower right.
+%
+\global\stemlength=1500
+\backstemmed\drawline\photon[\SE\FLIPPED](0,20000)[8]
+\global\advance\pbackx by 1000
+\global\advance\pbacky by -1000
+\THICKLINES\put(\pbackx,\pbacky){\circle{2830}}\THINLINES % The circle (thick)
+\global\advance\pbackx by 1000
+\global\advance\pbacky by -1000
+\global\stemlength=1500
+% The extra length on this vertex line is from one loop plus a link.
+% Note that the line is both stemmed and linked.
+\frontstemmed\drawline\gluon[\SE\FLIPPED](\pbackx,\pbacky)[1]\gluonlink
+\vertexcap2\vertexcap3\drawvertex\gluon[\SE 3](\gluonbackx,\gluonbacky)[3]
+% Alternately we could have \vertexlink1\vertexcap2\vertexcap3\drawvertex...
+% Now draw the fermions, arrows and labels:
+\drawline\fermion[\SW\REG](\vertexthreex,\vertexthreey)[2000]
+\drawarrow[\SW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by -700
+\global\advance\fermionbacky by -450
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[2000]
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -450
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\NE\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -250
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\SE\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -750
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+\end{picture}
+
+\vskip 0.2in
+In the above the circle is of diameter $1000\sqrt2$ and the `stems' attached
+to it of length 1500. Try to work from the upper left to the lower right.
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4I.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4I.tex
new file mode 100644
index 0000000000..608c1a1f08
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4I.tex
@@ -0,0 +1,183 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4I. Called by FD4I.COM
+%\chapter{Advanced Features con't : LOOPS}
+%
+\section{Loops}
+
+There is a primitive facility in \FEYNMAN\ for drawing loops. In the current
+version it is only capable of drawing gluon loops. Fermion loops may be drawn
+with the \bs circle command as illustrated, for instance, in the exercise at
+the conclusion of the previous section. In future versions it is hoped that
+photonic (and perhaps scalar) loops may be available.
+
+\subsection{Non-central Loops}
+
+To draw a circular
+gluonic loop, or portion thereof, one uses the \bs{\it drawloop} command whose
+syntax is reminiscent of the \ddrawline\ and \ddrawvertex\ commands.
+\begin{verbatim}
+
+\drawloop<particle type>[<initial direction><extent>](x,y)
+
+\end{verbatim}
+where the particle type is currently limited to \bs{\bf gluon}.
+The `extent' is the number of eighths of a complete loop which are to be drawn
+(1-8) with 8 indicating a complete, closed, circular loop. The loop commences
+from the point $(x,y)$ in the direction of `initial direction' and continues
+being drawn clockwise until the requested number of eighths have been
+completed. A number of useful parameters are returned after \bs drawloop
+has been called.
+\begin{verbatim}
+
+\loopfrontx,\loopfronty co-ords of beginning point of loop
+\loopbackx,\loopbacky co-ords of opposite point of loop
+\loopmidx,\loopmidy co-ords of geometric middle point of loop
+\pbackx,\pbacky co-ords of end point of loop
+\gluonbackx,\gluonbacky co-ords of end point of loop (for a gluon loop)
+
+\end{verbatim}
+It must be noted that \bs loopbackx,y and \bs loopmidx,y are {\em only}
+assigned values if at least half of a loop has been drawn, that is if the loops
+`extent' is at least 4. Some examples will illustrate this:
+\begin{verbatim}
+
+\THICKLINES
+\begin{picture}(8000,8000)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawloop\gluon[\NE 3](\pbackx,\pbacky)
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[2000]
+\drawline\fermion[\W\REG](\pbackx,\pbacky)[7000]
+\end{picture}
+
+\end{verbatim}
+would produce
+
+\THICKLINES
+\begin{picture}(8000,8000)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawloop\gluon[\NE 3](\pbackx,\pbacky)
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[2000]
+\drawline\fermion[\W\REG](\pbackx,\pbacky)[7000]
+\end{picture}
+\vskip 0.2in
+whereas
+\begin{verbatim}
+
+\THICKLINES
+\begin{picture}(8000,8000)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawloop\gluon[\N 5](\pbackx,\pbacky)
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[2000]
+\drawline\fermion[\W\REG](\pbackx,\pbacky)[7000]
+\end{picture}
+
+\end{verbatim}
+would give
+
+\THICKLINES
+\begin{picture}(8000,8000)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawloop\gluon[\N 5](\pbackx,\pbacky)
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[2000]
+\drawline\fermion[\W\REG](\pbackx,\pbacky)[7000]
+\end{picture}
+\vskip 0.2in
+
+As can be seen \bs THICKLINES works. So does phantom mode.
+To produce:
+
+\begin{picture}(8000,8000)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawloop\gluon[\NE 5](\pbackx,\pbacky)
+\negate\gluonbackx
+\global\advance\fermionbackx by \gluonbackx
+\double\fermionbackx \multroothalf\fermionbackx
+\drawline\fermion[\NW\REG](\pbackx,\pbacky)[\fermionbackx]
+\drawline\fermion[\S\REG](\pfrontx,\pfronty)[2000]
+\end{picture}
+\THINLINES
+\vskip 0.75in
+one would enter
+
+\begin{verbatim}
+
+
+\begin{picture}(8000,8000)
+\drawline\fermion[\E\REG](0,0)[2000]
+\drawloop\gluon[\NE 5](\pbackx,\pbacky)
+\negate\gluonbackx
+\global\advance\fermionbackx by \gluonbackx
+\double\fermionbackx \multroothalf\fermionbackx
+\drawline\fermion[\NW\REG](\pbackx,\pbacky)[\fermionbackx]
+\drawline\fermion[\S\REG](\pfrontx,\pfronty)[2000]
+\end{picture}
+
+\end{verbatim}
+Finally, to point out exactly where \bs loopmidx,y and \bs loopbackx,y are,
+we try:
+
+% FROM GLULOOP6.TEX
+\vskip -0.205in
+\begin{picture}(8000,8000)
+\drawloop\gluon[\NE 8](0,0)
+\drawline\fermion[\W\REG](0,0)[2000]
+\drawline\fermion[\E\REG](\loopbackx,\loopbacky)[2000]
+\drawline\fermion[\E\REG](\loopmidx,\loopmidy)[1000]
+\drawline\fermion[\W\REG](\loopmidx,\loopmidy)[1000]
+\drawline\fermion[\S\REG](\loopmidx,\loopmidy)[1000]
+\drawline\fermion[\N\REG](\loopmidx,\loopmidy)[1000]
+\drawline\fermion[\S\REG](\pbackx,\pbacky)[2000]
+\end{picture}
+\vskip 0.4in
+
+created via
+\begin{verbatim}
+
+\drawloop\gluon[\NE 8](0,0)
+
+\drawline\fermion[\W\REG](\loopfrontx,\loopfronty)[2000]
+\drawline\fermion[\E\REG](\loopbackx,\loopbacky)[2000]
+\drawline\fermion[\E\REG](\loopmidx,\loopmidy)[1000]
+\drawline\fermion[\W\REG](\loopmidx,\loopmidy)[1000]
+\drawline\fermion[\S\REG](\loopmidx,\loopmidy)[1000]
+\drawline\fermion[\N\REG](\loopmidx,\loopmidy)[1000]
+\drawline\fermion[\S\REG](\pbackx,\pbacky)[2000]
+
+\end{verbatim}
+
+\subsection{Central Loops}
+
+As can be seen from the previous example, \bs loopfrontx,y and \bs loopbackx,y
+are not at the same level as \bs loopmidx,y or each other. This is because the
+peculiar way in which \LaTeX\ draws gluons. The result is that certain loops
+may appear stilted, for instance the gluon loop correction to a gluon
+propagator. To alleviate this problem an alternate mode exists. If the user
+requests that the number of `eighths' drawn be zero then a complete loop will
+be drawn in the {\em central} mode. In this mode the only parameters to be
+entered are the co-ordinates of the {\bf centre} of the loop. The initial
+direction may be specified as anything and is irrelevant. ONLY complete loops
+may be drawn in this fashion. The returned parameters are the same but have
+slightly altered interpretations. \bs loopmidx,y are as before.
+\bs loopfrontx,y refer to the {\em left-most} point (that furthest west) of the
+loop and \bs loopbackx,y refers to the {\em right-most} point (furthest east).
+For instance
+\begin{verbatim}
+\drawloop\gluon[\NE 0](0,0)
+\end{verbatim}
+would produce a complete loop centred at (0,0) with \bs loopfronty and
+\bs loopbacky both equal to zero. In this way one could produce
+\vskip -0.1in
+\hskip 0.5in
+\begin{picture}(18000,8000)
+\drawloop\gluon[\NE 0](8000,0)
+\frontstemmed\drawline\gluon[\E\CENTRAL](\loopbackx,\loopbacky)[5]
+\frontstemmed\drawline\gluon[\W\FLIPPEDCENTRAL](\loopfrontx,\loopfronty)[5]
+\end{picture}
+\vskip 0.47in
+
+with the three statements
+\begin{verbatim}
+
+\drawloop\gluon[\NE 0](0,0)
+\frontstemmed\drawline\gluon[\E\CENTRAL](\loopbackx,\loopbacky)[5]
+\frontstemmed\drawline\gluon[\W\FLIPPEDCENTRAL](\loopfrontx,\loopfronty)[5]
+\end{verbatim}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4J.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4J.tex
new file mode 100644
index 0000000000..0c6816cc70
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOC4J.tex
@@ -0,0 +1,98 @@
+% Read in by FEYNMANDOC: FEYNMANDOC4J. Called by FD4J.COM
+%\chapter{Advanced Features con't : REVIEW EXER FOR CH 4.}
+% placement: \advance,\negate,\multroothalf etc., \phantom, \boxlengths
+% links: lines,vertices
+% stems: lines,vertices
+% caps: lines,vertices
+% loops
+% saving and re-using: \Xone, \newcount etc.; \drawandsave, \savebox etc.
+% internal variables available: \vertexcount etc., \unitheights etc.
+% internal codes: \N==0 etc.
+% errors: FEYNMAN-defined; TeX-defined
+%
+\section{Review Exercises for Chapter 4}
+
+{\Large\bf A:}
+\vskip 0.2in
+Describe (but don't reproduce) how you would make the following
+example of `Feyn Art':
+
+% THEORY.TEX
+%\vskip 1in
+\vskip 0.5in
+\hskip 0.75in
+\begin{picture}(28000,8000)
+%T:
+\drawline\gluon[\N\CENTRAL](0,0)[5]
+\global\Yone=\gluonbacky
+\drawline\fermion[\W\REG](\gluonbackx,\gluonbacky)[4000]
+\drawline\fermion[\E\REG](\gluonbackx,\gluonbacky)[4000]
+\global\advance\pbackx by 1000
+%H:
+\drawline\fermion[\N\REG](\pbackx,\gluonfronty)[\gluonlengthy]
+\drawline\photon[\E\REG](\pmidx,\pmidy)[5]
+\drawline\fermion[\N\REG](\pbackx,\gluonfronty)[\gluonlengthy]
+\global\advance\pbackx by 1000
+%E:
+\drawline\fermion[\N\REG](\pbackx,\gluonfronty)[\gluonlengthy]
+\global\advance\pmidy by -300
+\drawline\gluon[\E\FLIPPEDCURLY](\pmidx,\pmidy)[4]
+\global\advance\plengthx by 500
+\drawline\fermion[\E\REG](\gluonfrontx,0)[\plengthx]
+\drawline\fermion[\E\REG](\gluonfrontx,\Yone)[\plengthx]
+\global\advance\pbackx by 4000
+%O:
+\drawloop\gluon[\NW 8](\pbackx,300)
+\global\advance\loopbackx by 5500
+%R:
+\drawline\gluon[\S\CURLY](\loopbackx,\Yone)[3]
+\global\Xone=\boxlengthy \double\Xone \multroothalf\Xone
+\put(\pmidx,\pmidy){\oval(\Xone,\boxlengthy)[r]}
+\drawline\fermion[\S\REG](\pbackx,\pbacky)[\pbacky]
+\global\advance\pfrontx by 500
+%\global\advance\pfronty by 30
+\global\advance\pfronty by 20
+\drawline\photon[\SE\CURLY](\pfrontx,\pfronty)[4]
+%Y:
+\global\advance\pbackx by 2600
+\drawline\photon[\N\CURLY](\pbackx,0)[3]
+\global\Ytwo=\Yone
+\negate\plengthy
+\global\advance\Ytwo by \plengthy
+\double\Ytwo \multroothalf\Ytwo
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[\Ytwo]
+\drawline\fermion[\NW\REG](\photonbackx,\photonbacky)[\Ytwo]
+\end{picture}
+\vskip 0.57in
+{\noindent{\Large\bf B:}}
+\vskip 0.2in
+Reproduce the `balloon in the tree' diagram:
+\vskip 0.2in
+
+\begin{picture}(28000,28000)
+\THICKLINES
+%set up position of bottom of loop
+\startphantom
+\drawloop\gluon[\NE 0](0,0)
+\stopphantom
+\global\Xone=\loopfrontx % diameter of `true' loop
+\drawloop\gluon[\S 7](12000,18000)
+\global\Xtwo=\gluonbackx
+\global\Ytwo=\gluonbacky
+% draw gluon vertex
+\global\advance\loopmidy by \Xone
+\global\stemlength=400
+\stemvertex1\drawvertex\gluon[\S 3](\loopmidx,\loopmidy)[3]
+% Determine diameter and centre of fermion loop
+\negate\Xtwo
+\global\advance\Xtwo by \loopfrontx
+\global\Xthree=\Xtwo % Store. Will use shortly
+\double\Xtwo % \Xtwo is now the diameter of the fermion loop
+\put(\loopfrontx,\Ytwo){\circle{\Xtwo}}
+% Lastly the photon
+% This begins located at root 1/2 times radius in x & y direction from centre
+\multroothalf\Xthree % This is why we stored it.
+\global\advance\loopfrontx by \Xthree
+\global\advance\Ytwo by \Xthree
+\drawline\photon[\NE\FLIPPED](\loopfrontx,\Ytwo)[5]
+\end{picture}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCAPPB.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCAPPB.tex
new file mode 100644
index 0000000000..e4d9678fc4
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCAPPB.tex
@@ -0,0 +1,334 @@
+% Appendix B of FEYNMANDOC
+\appendix
+\addtocounter{chapter}{1}
+\chapter{Syntax and Features}
+
+This appendix summarizes the features available in \FEYNMAN\ and their usage.
+
+\section{Lines}
+
+\subsection{Arguments and Syntax of the \ddrawline\ command}
+
+The \ddrawline\ command:
+\begin{verbatim}
+
+\drawline |type| [|direction| |style|] (|starting x-co-ord|,|y-co-ord|)[|length|]
+
+ \fermion \N \REG (integer,integer) extent (cpt)
+ \scalar \NE \FLIPPED (variable,integer) # segments
+ \photon \E \CURLY (integer,variable) # half-wiggles
+ \gluon \SE \FLIPPEDCURLY (variable,variable) # loops
+ \especial \S \FLAT ALL IN CENTIPOINTS # units
+ \SW \FLIPPEDFLAT (1000 cpt = 1/3 cm) (integer/
+ \W \CENTRAL variable)
+ \NW \FLIPPEDCENTRAL
+ \LONGPHOTON
+ \FLIPPEDLONG
+ \SQUASHED
+
+\end{verbatim}
+Where the length corresponds to the particle {\em type} in the same column.
+Not all combination of directions and styles are permitted. Fermions, for
+instance, only appear in the \verb@\REG@ style. Integer-valued positions and
+lengths will be in {\em centipoints} (cpt) with approximate extent of
+$\frac{1}{3000}\ cm$ or $\frac{1}{7000}\ in$. Variables may either be
+user-defined (see next section) or \FEYNMAN-defined, such as
+\verb@\pmidx@, \verb@\gluonlengthy@, \verb@\gaplength@, or
+\verb@\fermioncount@.
+
+Examples:
+\begin{verbatim}
+
+\drawline\photon[\E\FLIPPEDFLAT](\particlebackx,25000)[9]
+\drawline\fermion[\SW\REG](\vertexfourx,\vertexfoury)[\fermionlengthy]
+
+\end{verbatim}
+
+\subsection{Line Modifiers}
+
+The following is a list of modifiers which can be used to alter or embellish
+particle lines. The number in parentheses is the section in which the feature
+is discussed.
+
+\begin{verbatim}
+
+ \bigphotons (2.9.2)
+ \documentstyle (1.6)
+ \gaplength (2.8.2)
+ \gluoncap (4.3.3)
+ \gluonlink (4.3.1)
+ \linethickness (LaTeX manual section C.13.3)
+ \THICKLINES; \THINLINES; \thicklines; \thinlines (2.4)
+ \seglength (2.8.2)
+ \stemmed,\frontstemmed,\backstemmed (4.3.2)
+ \stemlength (4.3.2)
+
+\end{verbatim}
+
+\section{Vertices}
+
+\subsection{Arguments and Syntax of the \ddrawvertex\ command}
+
+The \ddrawvertex\ command:
+\begin{verbatim}
+
+\drawvertex |type| [|direction| |number|] (|starting x-co-ord|,|y-co-ord|)[|length|]
+
+ \photon \N 3 (integer,integer) # half-wiggles
+ \gluon \NE 4 (variable,integer) # loops
+ \E (integer,variable)
+ \SE (variable,variable)
+ \S ALL IN CENTIPOINTS
+ \SW (1000 cpt = 1/3 cm) (integer/
+ \W variable)
+ \NW
+
+\end{verbatim}
+Where the length corresponds to the particle {\em type} in the same column.
+The vertex is drawn starting from the specified (x,y) co-ordinate with either
+three or four lines. The first line is drawn in the indicated direction,
+terminating at the hub (midpoint) of the vertex. It is called {\em line one}.
+The remaining lines are drawn radiating from the vertex and numbered
+counterclockwise as line two, line three (and line four if `number'=4).
+Every line will have the same number of gluon loops or photon wiggles.
+Examples of other vertices, such as a fermion-fermion-photon vertex, are
+discussed throughout the manual.
+
+Examples:
+\begin{verbatim}
+
+\drawvertex\photon[\E 3](\vertexonex,-5000)[5]
+\drawvertex\gluon[\SW 4](\vertexfourx,\vertexfoury)[4]
+
+\end{verbatim}
+
+\subsection{Vertex Modifiers}
+
+The following is a list of modifiers which can be used to alter or embellish
+vertices. The number in parentheses is the section in which the feature
+is discussed.
+
+\begin{verbatim}
+
+ \bigphotons (2.9.2)
+ \documentstyle (1.6)
+ \flipvertex (3.7)
+ \THICKLINES; \THINLINES; \thicklines; \thinlines (2.4)
+ \stemlength (4.3.2)
+ \stemvertex, \stemvertices (4.3.2)
+ \vertexcap, \vertexcaps (4.3.3)
+ \vertexlink, \vertexlinks (4.3.1)
+
+\end{verbatim}
+
+
+\section{Returned Parameters}
+
+The following is a list of all arguments returned by \ddrawline, \ddrawvertex\
+and \bs drawloop.
+Arguments such as \verb@\photonfronty@ will only be returned when
+a photon is drawn. All returned parameters are {\em globally} defined
+and immediately supersede the previous value of the variable.
+Thus if a gluon were drawn (or a gluon vertex) the values of
+\verb@\pbackx@ and \verb@\gluonlengthx@ would be updated but
+\verb@\photonfrontx@ would retain its former value. When a vertex or loop is
+drawn line parameters, such as \bs pmidx, will refer to the {\em last} line
+or line portion drawn.
+Parameters commencing with \bs{\bf vertex}
+are \underline{only} returned by \ddrawvertex.
+Parameters commencing with \bs{\bf loop}
+are \underline{only} returned by \bs drawloop.
+Note that some of these parameters may be altered by stems, caps, links and
+arrows (see appropriate sections).
+
+\begin{verbatim}
+
+\boxlengthx,\boxlengthy: The absolute valued (x,y) extent of the line.
+\fermionbackx,\fermionbacky: The (x,y) co-ordinates of the back of the line.
+\fermioncount The number of fermions printed thus far.
+\fermionfrontx,\fermionfronty: The (x,y) co-ordinates of the front of the line.
+\fermionlength The total length of the fermion line.
+\fermionlengthx,\fermionlengthy: The (x,y) extent of the line.
+\gluonbackx,\gluonbacky: The (x,y) co-ordinates of the back of the line.
+\gluoncount The number of gluons printed thus far.
+\gluonfrontx,\gluonfronty: The (x,y) co-ordinates of the front of the line.
+\gluonlengthx,\gluonlengthy: The (x,y) extent of the line.
+\lastline: The name of the last drawn particle line.
+\loopbackx,\loopbacky: The (x,y) co-ordinates of the back of the loop.
+\loopfrontx,\loopfronty: The (x,y) co-ordinates of the front of the loop.
+\particlebackx,\particlebacky: The (x,y) co-ordinates of the back of the line.
+\particlefrontx,\particlefronty: The (x,y) co-ords of the front of the line.
+\particlelengthx,\particlelengthy: The (x,y) extent of the line.
+\particlemidx,\particlemidy: The (x,y) co-ordinates of the middle of the line.
+\pbackx,\pbacky: = \particlebackx,\particlebacky
+\pfrontx,\pfronty: = \particlefrontx,\particlefronty
+\plengthx,\plengthy: = \particlelengthx,\particlelengthy
+\pmidx,\pmidy: = \particlemidx,\particlemidy
+\photoncount The number of photons printed thus far.
+\photonbackx,\photonbacky: The (x,y) co-ordinates of the back of the line.
+\photonfrontx,\photonfronty: The (x,y) co-ordinates of the front of the line.
+\photonlengthx,\photonlengthy: The (x,y) extent of the line.
+\scalarcount: The total number of scalars printed thus far.
+\scalarbackx,\scalarbacky: The (x,y) co-ordinates of the back of the scalar.
+\scalarfrontx,\scalarfronty: The (x,y) co-ordinates of the front of the scalar.
+\scalarlengthx,\scalarlengthy: The (x,y) extent of the scalar.
+\unitboxlength,\unitboxheight: The (x,y) extent of one unit of the last line.
+\unitboxnumber: The `length' of the previous line in `units'.
+\vertexcount: The number of vertices printed thus far.
+\vertexonex,\vertexoney: The (x,y) co-ordinates of the back of line one.
+\vertextwox,\vertextwoy: The (x,y) co-ordinates of the back of line two.
+\vertexthreex,\vertexthreey: The (x,y) co-ordinates of the back of line three.
+\vertexfourx,\vertexfoury: The (x,y) co-ordinates of the back of line four.
+\vertexmidx,\vertexmidy: The (x,y) co-ordinates of the middle of the vertex.
+
+\end{verbatim}
+
+\section{Arrows and Loops}
+
+The other two \bs draw commands in \FEYNMAN\ are \bs drawarrow and \bs drawloop.
+
+\subsection{\bs drawarrow}
+
+The syntax is:
+
+\begin{verbatim}
+
+\drawarrow[|direction| |configuration|] (|starting x-co-ord|,|y-co-ord|)
+
+ \N \ATBASE (integer,integer)
+ \NE \ATTIP (variable,integer)
+ \E (integer,variable)
+ \SE (variable,variable)
+ \S ALL IN CENTIPOINTS
+ \SW (1000 cpt = 1/3 cm)
+ \W
+ \NW
+ \LINEDIRECTION
+ \LDIR
+
+\end{verbatim}
+An arrowhead is produced at the specified (x,y) co-ordinates in the specified
+direction. If \bs LDIR or \bs LINEDIRECTION is used then the direction will be
+that of the most recently
+drawn line in the current picture. If the previous line was drawn by
+the \ddrawvertex\ command then the {\it initially specified}
+vertex direction will be used.
+If \bs ATBASE is used then the specified co-ordinates refer to the {\em base}
+of the arrow.
+If \bs ATTIP is used then the specified co-ordinates refer to the {\em tip}
+of the arrow.
+
+The following parameters are returned by \bs drawarrow:
+
+
+\begin{verbatim}
+
+\arrowlength The (absolute) length of the arrow drawn (cp).
+\boxlengthx,\boxlengthy The (x,y) co-ordinatess of the TIP of the arrow.
+
+\end{verbatim}
+Other variables, such as \bs pbackx,y and \bs photonlengthx,y are unaffected by
+\bs drawarrow. Arrows may be emboldened, via \bs THICKLINES, independently of
+the line to which they are attached. Arrows will remain invisible in phantom
+mode. Examples are:
+\begin{verbatim}
+
+\drawarrow[\LDIR\ATTIP](\pmidx,\pmidy)
+\drawarrow[\S\ATBASE](0,0)
+
+\end{verbatim}
+
+\subsection{\bs drawloop}
+
+This was detailed in section 4.4. The syntax is:
+\begin{verbatim}
+
+\drawloop |type| [|direction| |extent|] (|starting x-co-ord|,|y-co-ord|)
+
+ \gluon \N 0 (integer,integer)
+ \NE 1 (variable,integer)
+ \E 2 (integer,variable)
+ \SE 3 (variable,variable)
+ \S 4 ALL IN CENTIPOINTS
+ \SW 5 (1000 cpt = 1/3 cm)
+ \W 6
+ \NW 7
+ 8
+
+\end{verbatim} A {\em central} loop is drawn if the extent is specified as zero
+(section 4.4.2). Returned parameters are:
+\begin{verbatim}
+
+\loopbackx,\loopbacky co-ords of opposite point of loop (non-central loop)
+ co-ords of right-most point of loop (central loop)
+\loopfrontx,\loopfronty co-ords of beginning point of loop (non-central loop)
+ co-ords of left-most point of loop (central loop)
+\loopmidx,\loopmidy co-ords of geometric middle point of loop
+\pbackx,\pbacky co-ords of end point of loop
+\gluonbackx,\gluonbacky co-ords of end point of loop (for a gluon loop)
+
+\end{verbatim}
+\bs loopbackx,y and \bs loopmidx,y are only
+assigned values if at least half of a loop has been drawn, that is if the loop
+`extent' is 0,4,5,6,7 or 8. Example:
+\begin{verbatim}
+
+\drawloop\gluon[\NE 3](\pbackx,\pbacky)
+\drawloop\gluon[\E 0](0,0)
+
+\end{verbatim}
+
+\section{Placement and Storage Features}
+
+Placement and storage facilities were discussed in sections 4.1 and 4.2.
+The following is a list followed by the syntax or typical usage. In cases
+where the feature is principally discussed in other sections these are listed
+in parentheses. Parameters such as \bs gluonlengthx and \bs vertexmidx have
+been listed in appendix B.3.
+
+\begin{verbatim}
+
+\addtocounter: \addtocounter{<variable name><increment>} (See 4.1.1)
+\advance: \global\advance<variable> by <increment(number or variable)>
+ Example: \global\advance \X by \Y
+\divide: \global\divide<variable> by <divisor(number or variable)>
+\double: \double<variable> Eg: \double\Yfive.
+\drawandsaveline: \drawandsaveline `<line name>' as <arguments as with \drawline>
+\drawoldpic: \drawoldpic<line name>(x,y) Eg: \drawoldpic\mygluon(0,\pbacky)
+\hskip: \hskip<length> (1.6) Used to move pictures around on the page.
+\lastline: Stored name of previously drawn line. Eg: \drawoldpic\lastline(0,0)
+\multiply: \global\multiply<variable> by <multiplier(number or variable)>
+ Example: \global\multiply \Xtwo by 7
+\multroothalf: \multroothalf<variable>
+\negate: \negate<variable> eg: \negate\plengthx
+\newcount: \global\newcount<your variable name>
+ Example: \global\newcount\pmidycopy \global\pmidycopy=\pmidy
+\newcounter: \newcounter{<variable name>} (See 4.1.1)
+\newsavebox: \global\newsavebox{<name>}. Eg: \global\newsavebox{\Bhabha}.
+\put: \put(<x>,<y>){<object>}. Eg: \put(0,\pmidx){\circle{1000}} (2.11.2).
+\savebox: \savebox{<box name>}(<box width>,<box height>)[<position>]{<object>}
+\sbox: \sbox{<name>}{<object>}. Like \savebox. Eg:\savebox{\Mypic}{}.
+\setcounter: \setcounter{<variable name><variable value>} (See 4.1.1)
+\startphantom: \startphantom...text...\stopphantom
+\stopphantom: \startphantom...text...\stopphantom
+\the: Evaluates a variable (section 4.2.1).
+\vskip: \vskip<length> (1.6) Used to move pictures around on the page.
+\Xone: Unassigned variable pre-defined by FEYNMAN.
+\Xtwo: Unassigned variable pre-defined by FEYNMAN.
+\Xthree: Unassigned variable pre-defined by FEYNMAN.
+\Xfour: Unassigned variable pre-defined by FEYNMAN.
+\Xfive: Unassigned variable pre-defined by FEYNMAN.
+\Xsix: Unassigned variable pre-defined by FEYNMAN.
+\Xseven: Unassigned variable pre-defined by FEYNMAN.
+\Xeight: Unassigned variable pre-defined by FEYNMAN.
+\Yone: Unassigned variable pre-defined by FEYNMAN.
+\Ytwo: Unassigned variable pre-defined by FEYNMAN.
+\Ythree: Unassigned variable pre-defined by FEYNMAN.
+\Yfour: Unassigned variable pre-defined by FEYNMAN.
+\Yfive: Unassigned variable pre-defined by FEYNMAN.
+\Ysix: Unassigned variable pre-defined by FEYNMAN.
+\Yseven: Unassigned variable pre-defined by FEYNMAN.
+\Yeight: Unassigned variable pre-defined by FEYNMAN.
+=: \global<variable>=<value(number or variable)>. Eg: \global\X=2.
+
+\end{verbatim}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCAPPC.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCAPPC.tex
new file mode 100644
index 0000000000..6d8efb6c07
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCAPPC.tex
@@ -0,0 +1,351 @@
+% Appendix C of FEYNMANDOC
+\appendix
+\addtocounter{chapter}{2}
+\chapter{Errors}
+
+In this appendix we discuss some of the more common errors which you might
+encounter. When the statement \verb@LATEX <FILENAME>@
+is executed it will produce
+a number of files including a \verb@<FILENAME>.LIS@ file.
+Error messages will be recorded in this file (which the user often deletes
+automatically if running a \TeX\ program via a standard user-defined macro).
+If submitted interactively they will also appear on the terminal screen.
+Rule one is to check the error message in the LIS file and locate the
+purportedly offending code sequence. Check for typos, particularly missing
+backslashes, \bs end\{...\}, omitted blank spaces
+and incautious use of upper or lower case letters.
+If you cannot understand the error after using this appendix you might try,
+firstly, the on-line interactive help facility or, failing that, the ERROR
+sections in the \LaTeX\ and \TeX\ manuals.
+
+\section{Option Errors}
+
+\FEYNMAN\ issues a number of error statements if an incorrect sequence of
+parameters is issued to a \ddrawline, \ddrawvertex\ or \bs drawloop command.
+The most common of these is
+\begin{verbatim}
+ *** ERROR IN PARTICLE OPTIONS SELECTION ***
+\end{verbatim}
+This means that you asked for a combination of parameters which does not exist
+or has not been implemented. Examples are asking for a FERMION of any type
+other than REG, a PHOTON in the \bs E direction of type FLIPPEDLONG, a 5-gluon
+vertex, a four-scalar vertex, a photon loop and so forth. The usual result is
+that, instead of the desired line(s) a series of tiny ``Error'' statements will
+appear in your diagram (see section C.2 for an example).
+Other messages of this type are:
+\begin{verbatim}
+ *** ERROR IN PARTICLE TYPE SELECTION ***
+ +++ Try with line type \fermion, \scalar, \photon, \gluon (see manual) +++
+
+ *** ERROR IN PARTICLE DIRECTION SELECTION ***
+ +++ Try again with direction N, NE, E, SE etc. or see manual +++
+\end{verbatim}
+In the first instance you specified some type of line of type other than
+\bs fermion, \bs scalar, \bs photon or \bs gluon. In the second instance a
+direction other than \verb@\N, \NE, \E, \SE, \S, \SW, \W@ or \verb@\NW@ was
+specified (for instance ``\bs NNW'' or ``E''). This may have been preceded by
+``Expecting Number...'' (see below).
+Another message in the same vein is
+\begin{verbatim}
+ *** ERROR: PARTICLE OF NEGATIVE OR ZERO LENGTH REQUESTED. ***
+ *** TAKING ABSOLUTE VALUE. ***
+\end{verbatim}
+which is self-explanatory. Just remember that most parameters such as
+\bs photonlengthx, \bs plengthy \etc\ may be positive or negative
+(see section 2.6).
+
+A warning or error statement will be issued if a line of absurd length has been
+requested. For gluons, for instance, the statements would be
+\begin{verbatim}
+*** WARNING *** Gluon with <specified number of loops> loops requested ***
+\end{verbatim}
+if the number of loops which
+the user had requested was in excess of 40 and further
+\begin{verbatim}
+*** Reducing gluon length to 6 loops (max 85) ***
+\end{verbatim}
+if the user had requested in excess of 85 loops and finally
+\begin{verbatim}
+*** Probable Cause: Gluon selected instead of Fermion ***
+\end{verbatim}
+if the user had requested more than 1000 loops.
+
+The latter recognizes a common cause of such problems:\ \ copying lines with an
+editor. When a \ddrawline\bs fermion statement for a fermion of length 2000
+is copied and altered to generate a photon the user may forget to change the
+length and thus request a photon of 2000 half-wiggles! The result
+would be (if not caught)
+either to run out of \TeX\ capacity or to produce about 30 blank pages on your
+laser printer.
+
+\section{Unexpected Results and Other Errors}
+
+Overcoming exhausted \TeX\ capacity will be dealt with separately in the next
+section. Here we consider unusual objects which may appear in one's Feynman
+diagram and a few strange \TeX-generated error messages.
+
+\hskip 1.05in
+\begin{picture}(8000,8000)
+\put(-8000,4000){The diagram}
+\global\unitboxheight=-900
+\drawline\gluon[\SE\FLAT](0,6500)[6]
+\drawline\fermion[\N\REG](\gluonfrontx,\gluonfronty)[1000]
+\drawline\fermion[\W\REG](\gluonfrontx,\gluonfronty)[1000]
+\drawline\fermion[\S\REG](\gluonbackx,\gluonbacky)[1000]
+\drawline\fermion[\E\REG](\gluonbackx,\gluonbacky)[1000]
+\global\advance\pbackx by 2500
+\put(\pbackx,4000){was produced by}
+\end{picture}
+\begin{verbatim}
+
+\begin{picture}(8000,8000)
+\drawline\gluon[\SE\FLAT](0,7000)[6]
+\drawline\fermion[\N\REG](\gluonfrontx,\gluonfronty)[1000]
+\drawline\fermion[\W\REG](\gluonfrontx,\gluonfronty)[1000]
+\drawline\fermion[\S\REG](\gluonbackx,\gluonbacky)[1000]
+\drawline\fermion[\E\REG](\gluonbackx,\gluonbacky)[1000]
+\end{picture}
+\end{verbatim}
+because gluons in the SE direction cannot appear in the \bs FLAT mode
+(see ``ERROR IN PARTICLE OPTIONS SELECTION'' in C.1).
+\medskip
+
+{\bf Unexpected gaps and invisible lines:}\ \ These
+may appear as the result of drawing diagonal straight lines of length less than
+the minimum of 1416 centipoints. This may occur in fermions, scalars (of
+seglength less than the above), stems and caps. The minimum size of a circle
+is 401 centipoints. See also section 4.1.2.
+\medskip
+
+Broken horizontal photons, such as
+\vskip -0.205in \hskip 2.43in
+%\begin{picture}(8200,2000)
+\begin{picture}(8200,0)
+\bigphotons
+\drawline\photon[\E\REG](0,0)[8]
+\end{picture}
+are the result of mis-using (or not using) ``\bs bigphotons'' (section 2.9).
+\global\BIGPHOTONS=0pt % re-set for rest of document.
+\medskip
+
+Other sorts of errors are:
+
+\medskip
+{\bf Expected Number ...}\ \ \ You've left a backslash off of a parameter or
+variable.
+\begin{verbatim}
+
+LaTeX error. See LaTeX manual for explanation.
+ Type H <return> for immediate help.
+! \begin{picture} ended by \end{document}.
+\end{verbatim}
+or, possibly something like
+\begin{verbatim}
+! Missing } inserted.
+<inserted text>
+ }
+<to be read again>
+ \vfil
+\newpage ->\par \vfil
+ \penalty -\@M
+\clearpage ->\newpage
+ \write \m@ne {}\vbox {}\penalty -\@Mi
+\enddocument ->\@checkend {document}\clearpage
+ \begingroup \if@filesw \immed...
+
+\end #1->\csname end#1\endcsname
+ \endgroup \@checkend {#1}\if@ignore \global...
+l.13 \end{document}
+\end{verbatim}
+You've forgotten to close a grouping with a \bs end\{...\}. In this case you
+forgot the \verb@\end{picture}@ statement.
+If the error is
+\begin{verbatim}
+! Use of \picture doesn't match its definition.
+\end{verbatim}
+Then you typed ``\bs picture'' instead of ``picture''.
+
+\section{\TeX\ Capacity Exceeded}
+
+This is the most dreaded of all error messages. It is also the most common.
+
+\LaTeX\ allows the user a certain amount of internal working space and then
+uses up most of it itself. To increase this a \TeX\ wizard must re-compile
+\TeX\ (generally in Pascal). The most obvious way in which \TeX\ will exceed
+its limit is if there is too much text. Since \FEYNMAN\ uses quite a bit of
+\LaTeX's internal resources this limits the size and complexity of diagrams to
+roughly that of the cover diagram. If gluons are not involved then more
+complex diagrams are possible. \LaTeX\ provides a partial solution to this
+problem which will be discussed last.
+When \TeX\ is used the LIS file will end with a summary of memory usage of the
+form:
+\begin{verbatim}
+
+Here is how much of TeX's memory you used:
+ 462 strings out of 2520
+ 4525 string characters out of 29548
+ 44019 words of memory out of 65501
+ 2381 multiletter control sequences out of 2500
+ 19296 words of font info for 73 fonts, out of 35000 for 100
+ 14 hyphenation exceptions out of 307
+ 20i,16n,53p,168b,280s stack positions out of 200i,40n,60p,500b,600s
+No pages of output.
+\end{verbatim}
+
+\subsection{Exhausting Internal Storage}
+
+\TeX\ keeps track of a number of internal variables and will cease processing a
+file should the allocated maximum usage be exceeded. When \FEYNMAN\ is being
+used extensively the most common \TeX\ capacity exceeded messages will be:
+
+\medskip
+{\bf Save-Stack:}\ \ Likely cause is that variables were passed both locally and
+globally between subroutines too many times. Check that \bs global precedes
+all assignment statements, arithmetic operations (except \bs negate \etc) and
+so forth. In the above LIS file example 280 out of 600 S-stack (save stack)
+positions were used.
+
+\medskip
+{\bf P-Stack:}\ \ Your macro definitions have exceeded the maximum total
+number of arguments permitted.
+This, and the above error, could be caused by a recursive definition gone awry.
+In the above example 53 out of 60 P-Stack positions were used.
+
+\medskip
+{\bf ! No room for a new \bs count.:}\ \ You have defined too many numerical
+counters via the \bs newcount or \bs newcounter command. Between them \TeX,
+\LaTeX, and \FEYNMAN, may use up to 218 out of 234 available counters. Try to
+re-use old variables, the \bs Xone...\bs Yeight available for the user or use
+some \bs dimen counters where possible.
+Typically the last few lines in your LIS file will look like:
+\begin{verbatim}
+
+\OOO=\count234
+
+! No room for a new \count .
+\ch@ck ...\else \errmessage {No room for a new #3}
+ \fi
+\alloc@ ...\advance \count 1#1by\@ne \ch@ck #1#4#2
+ \allocationnumber =\count ...
+l.36 \newcount\PPP
+
+\end{verbatim}
+followed by a synopsis of \TeX's memory usage.
+
+\medskip
+{\bf Multi-letter Control Sequences:}\ \ Probably too many macro \bs def's
+defined. Many such errors will occur if you attempt to input
+\FEYNMAN\ more than once.
+
+\subsection{Exhausting Memory Size}
+
+If your LIS file tells you that you've used 65501 words of memory out of 65501
+then you have reached the maximum file `size' that \LaTeX\ will permit.
+Unless you've made some error, such as having a file \bs input itself, your
+choices are to enlarge \TeX\ (this requires a `wizard', whatever that is),
+make your program smaller, or break your document up into smaller pieces.
+The last option would be irritating if, for instance, you were writing a book
+and had to continually keep track of cross-references between these divisions,
+page numbering and so forth. \LaTeX\ uses the \bs include facility to
+alleviate the tedium. The only drawback is that after a break in the document
+the new position will begin on a fresh page. Individual Feynman diagrams cannot
+be broken up this way and this limits their ultimate complexity.
+
+To process just a portion of a document place the different portions in a
+series of files and have a {\em driving} file which includes the statements
+\begin{verbatim}
+\include <file1> \include <file2> \include <file3>... \include <file n>
+\end{verbatim}
+These should appear at the positions in which you want them and may be
+interspersed with text and commands within the driving file. Prior to
+\TeX ing the file the commands \verb@includeonly <file>@
+should appear for each piece that you want processed on that particular run.
+For instance, to print out the
+first part of chapter three of this manual I have a file, which I call
+FD3A.TEX, containing
+\begin{verbatim}
+\documentstyle[11pt]{report}
+\input FEYNMAN
+\includeonly{FEYNMANDOC3A}
+\input FEYNMANDOC.INC
+\end{verbatim}
+where the file FEYNMANDOC.INC, unconditionally input, contains
+\begin{verbatim}
+\textheight 700pt \textwidth 450pt
+<VARIOUS DEFINITIONS COMMON TO ALL PARTS>
+
+\begin{document} % End of preamble and beginning of text.
+
+\include{FEYNMANDOCTITLE}
+\include{FEYNMANDOCPRELIMS}
+\include{FEYNMANDOC1}
+\include{FEYNMANDOC2A}
+\include{FEYNMANDOC2B}
+\include{FEYNMANDOC2C}
+ .
+ .
+ .
+\include{FEYNMANDOC4H}
+\include{FEYNMANDOC4I}
+\include{FEYNMANDOC4J}
+\include{FEYNMANDOCEXER}
+\include{FEYNMANDOCAPPB}
+\include{FEYNMANDOCAPPC}
+\end{document}
+\end{verbatim}
+When executed each section will create a number of files such as the
+\verb@<filename>.AUX@ file. These must be retained on your \TeX\ directory
+as they transmit
+information about one section to the others. AUX files tell about page
+numbering, sections \etc, BIB files contain the accumulated bibliography, TOC
+files the table of contents and so forth. For this reason it may take several
+runs to get your document to come out correctly as each AUX file will be
+updating itself based upon updates of the other AUX files. TOC files will be
+the last to come out correctly. To print out this entire document I had a
+COMMAND file called MAKEDOC.COM which contained:
+\begin{verbatim}
+$ SET DEFAULT DRA1:[LEVINE.TEXBOOK]
+$ LATEXIT FDTITLE
+$ LATEXIT FDPRE
+$ LATEXIT FD1
+$ LATEXIT FD2A
+$ LATEXIT FD2B
+$ PURGE FD*.AUX
+$ LATEXIT FD2C
+ .
+ .
+ .
+$ LATEXIT FD4H
+$ LATEXIT FD4I
+$ LATEXIT FD4J
+$ PURGE FD*.AUX
+$ LATEXIT FDADDA
+$ LATEXIT FDAPPB
+$ LATEXIT FDAPPC
+$ PURGE FD*.*
+$ PURGE FEYNMANDOC*.*
+
+\end{verbatim}
+Where LATEXIT is a command which \LaTeX s a file, sends it to the printer and
+then erases the LIS and printer files. The files FD1, FD2A \etc\
+are like the small FD3A
+file above which processed just the first part of chapter three.
+The PURGE statements remove old versions of the AUX files from your disk.
+The above file is sent as a batch job by a command file like PRINTDOC which
+contains
+\begin{verbatim}
+$! Prints FEYNMANDOC.TEX...all of it.
+$ SET DEFAULT DRA1:[LEVINE.TEXBOOK]
+$ SUBMIT/NOPRINTER/NOTIFY DRA1:[LEVINE.TEXBOOK]MAKEDOC.COM
+\end{verbatim}
+The above is in VAX code but the format on other machines should be apparent.
+\vskip 3.5in
+\vbox{
+\vfill
+This work was supported by the UK Science and Engineering Research Council.
+I would like to thank all of the people at the Cavendish Labs, Cambridge,
+England, who gave their preferences and comments as to which line styles
+should be incorporated.
+
+\hskip 2in Michael Levine, 1988
+}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCEXER.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCEXER.tex
new file mode 100644
index 0000000000..5ba597b813
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCEXER.tex
@@ -0,0 +1,494 @@
+%\setcounter{page}{874}
+\appendix
+\chapter{Solution to Exercises}
+
+It should first be noted that none of these solutions is unique.
+There are frequently many ways of drawing a diagram with \FEYNMAN,
+the number increasing dramatically with the complexity. The following
+are reasonable (although not necessarily optimal) solutions to
+all of the problems posed throughout the manual.
+
+
+\section{Exercises for section 2.9.2}
+
+The question was posed as to why one cannot draw a scalar in two pieces,
+commencing from the same point but in opposite directions.
+The answer is that all scalars both {\it begin} and {\it end} with a
+line segment. Hence the central segment of such a scalar would be twice
+the length of the surrounding segments. It is easily to overcome this
+difficulty by drawing the central segment separately, either as a fermion
+or as a scalar of extent [1], and then drawing the two scalars from the
+ends. For example to draw
+
+\begin{picture}(15000,5000)
+\drawline\photon[\N\CURLY](7000,0)[4]
+\drawline\fermion[\W\REG](7000,0)[400]
+\drawline\fermion[\E\REG](7000,0)[400]
+\seglength=800 \gaplength=250
+\drawline\scalar[\W\REG](7400,0)[4]
+\seglength=800 \gaplength=250
+\drawline\scalar[\E\REG](6600,0)[4]
+\end{picture}
+
+You could enter:
+\begin{verbatim}
+
+\begin{picture}(15000,5000)
+\drawline\photon[\N\CURLY](7000,0)[4]
+\drawline\fermion[\W\REG](7000,0)[400]
+\drawline\fermion[\E\REG](7000,0)[400]
+\seglength=800 \gaplength=250 % It is better to use \global\seglength=800 etc.
+\drawline\scalar[\W\REG](7400,0)[4]
+\seglength=800 \gaplength=250
+\drawline\scalar[\E\REG](6600,0)[4]
+\end{picture}
+
+\end{verbatim}
+
+The diagram at the conclusion of 2.9.2 may be produced by the following
+eight commands (or permutations thereof):
+
+\begin{verbatim}
+
+\begin{picture}(20000,20000)
+\thicklines\drawline\photon[\N\FLIPPEDCURLY](3000,3000)[7]
+\drawline\fermion[\NW\REG](\pbackx,\pbacky)[\photonlengthy]
+\drawline\fermion[\E\REG](\fermionfrontx,\fermionfronty)[\fermionlength]
+\drawline\fermion[\SW\REG](\photonfrontx,\photonfronty)[\photonlengthy]
+\drawline\fermion[\E\REG](\photonfrontx,\photonfronty)[\photonlengthy]
+\drawline\fermion[\N\REG](\pbackx,\pbacky)[\photonlengthy]
+\drawline\photon[\SE\REG](\fermionfrontx,\fermionfronty)[7]
+\drawline\photon[\NE\FLIPPED](\fermionbackx,\fermionbacky)[7]
+\end{picture}
+
+\end{verbatim}
+
+\section{Exercises for section 2.10.2}
+
+\begin{verbatim}
+
+\begin{picture}(20000,20000)
+\THINLINES % Upper-left corner:
+\drawline\gluon[\E\REG](18000,18000)[4]
+\drawline\fermion[\S\REG](\pfrontx,\pfronty)[\gluonlengthx]
+\THICKLINES % Upper-right corner:
+\drawline\gluon[\E\REG](\gluonbackx,\gluonbacky)[4]
+\drawline\fermion[\S\REG](\pbackx,\pbacky)[\gluonlengthx]
+\THINLINES % Lower-right corner:
+\drawline\fermion[\S\REG](\pbackx,\pbacky)[\gluonlengthx]
+\drawline\gluon[\W\REG](\fermionbackx,\fermionbacky)[4]
+\THICKLINES % Lower-left corner:
+\drawline\gluon[\W\REG](\gluonbackx,\gluonbacky)[4]
+\drawline\fermion[\N\REG](\pbackx,\pbacky)[\fermionlength]
+\end{picture}
+
+\end{verbatim}
+
+To draw this with \bs CENTRAL gluons one could divide each side into
+{\em three} pieces, not two. Alternatively, starting at one point draw the
+\bs THICKLINES segment and then starting {\it at the same point}
+draw the \bs THINLINES piece on top of it. For example:
+
+\begin{verbatim}
+
+\THICKLINES\drawline\gluon[\E\CENTRAL](0,0)[4]
+\THINLINES\drawline\gluon[\E\CENTRAL](0,0)[9]
+
+\end{verbatim}
+
+\section{Exercise for section 2.12}
+\begin{verbatim}
+
+\begin{picture}(20000,20000) % Start at upper right.
+\thicklines\drawline\photon[\SE\REG](18000,18000)[5]
+\drawline\fermion[\S\REG](\photonfrontx,\photonfronty)[\boxlengthy]
+\drawarrow[\N\ATBASE](\pmidx,\pmidy)
+\drawline\fermion[\W\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\drawarrow[\W\ATTIP](\pmidx,\pmidy)
+% Draw 2 small lines to connect the vector meson (parallel lines) at a corner:
+\thinlines\drawline\fermion[\S\REG](\fermionbackx,\fermionbacky)[150]
+\drawline\fermion[\W\REG](\fermionfrontx,\fermionfronty)[150]
+\drawline\fermion[\SW\REG](\fermionbackx,\fermionbacky)[7000] % Upper || line
+\drawline\fermion[\S\REG](\fermionbackx,\fermionbacky)[75] % Find the centre of
+\drawline\fermion[\E\REG](\fermionbackx,\fermionbacky)[75] % the double fermion
+\drawline\gluon[\SW\REG](\fermionbackx,\fermionbacky)[5]
+\put(\gluonfrontx,\gluonfronty){\circle*{500}} % A `blob': the vector->gauge trans.
+\drawline\fermion[\S\REG](\fermionbackx,\fermionbacky)[75] % Draw to position the
+\drawline\fermion[\E\REG](\fermionbackx,\fermionbacky)[75] % Second parallel line
+\drawline\fermion[\NE\REG](\fermionbackx,\fermionbacky)[7000] % Lower || line
+\put(\gluonbackx,\gluonbacky){\circle*{500}}
+\gaplength=300
+\drawline\scalar[\NW\REG](\gluonbackx,\gluonbacky)[3] % Left half of scalar
+\thicklines\drawarrow[\NW\ATBASE](\scalarbackx,\scalarbacky)
+\gaplength=300 \thinlines
+\drawline\scalar[\SE\REG](\gluonbackx,\gluonbacky)[3] % Right half of scalar
+\put(\pfrontx,\scalarbacky){{\bf H}$^0$}
+\put(\gluonfrontx,\gluonfronty){\ $\,{}_{\longleftarrow f_6(\omega,p_+\cdot q_-)}$}
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[2000]
+\drawarrow[\NW\ATBASE](\pbackx,\pbacky)
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[2000]
+\drawarrow[\NW\ATTIP](\pmidx,\pmidy)
+\put(\pbackx,\pbacky){$\,\,p+q$} % \, gives extra space in math mode.
+\end{picture}
+
+\end{verbatim}
+
+\section{Exercise for section 3.8}
+\begin{verbatim}
+
+\begin{picture}(20000,12000)(0,6000)
+\drawline\photon[\E\REG](4000,0)[7] % Left half of long photon.
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[4000]
+\drawline\fermion[\SW\REG](\photonfrontx,\photonfronty)[4000]
+\drawvertex\photon[\E 3](\photonbackx,\photonbacky)[7] % Continue long photon.
+\drawline\fermion[\S\REG](\vertextwox,\vertextwoy)[\vertextwoy] % Upper half
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[\vertextwoy] % Lower half
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[\vertextwoy]
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[\vertextwoy]
+\end{picture}
+
+\end{verbatim}
+Since we've slyly selected the main axis to have zero ordinate (y=0)
+that we can use \bs vertextwoy as a length in order to ensure
+that the diagonal fermion segments on the right have half of the length
+of the vertical segment. The vertical fermion is drawn in two sections.
+
+In order to draw a scalar in place of the fermion line on the right
+we must set \bs seglength and \bs gaplength so that the vertical line
+will connect properly with the photons. The section on spacing in
+chapter four shows how to do this using the \bs phantom commands.
+Here we could just divide the line length by an integer. For instance
+the commands
+\begin{verbatim}
+
+\global\divide \vertextwoy by 4
+\global\gaplength=\vertextwoy
+\global\multiply\vertextwoy by 2
+\global\seglength=\vertextwoy
+\drawline\scalar[\S\REG](\vertextwox,\vertextwoy)[3]
+
+\end{verbatim}
+would draw a vertical connecting scalar with three segments.
+%\newpage
+%\tableofcontents
+
+\section{Exercises for section 4.1.1}
+\begin{verbatim}
+% Exercise 1: Delbruck Scattering:
+
+\hskip 0.75in % Move the whole picture to the right.
+\begin{picture}(10000,10000)(0,0)
+\drawline\photon[\SE\FLIPPED](0,5000)[6] % Start from the upper left.
+\double\photonlengthx \multroothalf\photonlengthx % mults by root 2.
+\drawline\fermion[\E\REG](\photonbackx,\photonbacky)[\photonlengthx]
+\drawline\photon[\NE\REG](\pbackx,\pbacky)[6]
+\drawline\fermion[\S\REG](\photonfrontx,\photonfronty)[\fermionlength]
+\drawline\photon[\SE\FLIPPED](\pbackx,\pbacky)[6]
+\drawline\fermion[\W\REG](\photonfrontx,\photonfronty)[\fermionlength]
+\drawline\photon[\SW\REG](\pbackx,\pbacky)[6]
+\drawline\fermion[\N\REG](\photonfrontx,\photonfronty)[\fermionlength]
+\end{picture}
+
+
+% Exercise 2: Drell-Yan
+
+\documentstyle [12pt]{report}
+\begin{document}
+\input FEYNMAN
+\begin{center} % Everything to be centred.
+Drell-Yan W-Production
+
+\begin{picture}(10000,10000) % Note that the 10000 x 10000 box is centred.
+\bigphotons % needed in 12-pt.
+\THICKLINES
+\drawline\photon[\E\REG](5000,5000)[11]
+\drawarrow[\E\ATBASE](\pmidx,4820)
+\put(\pmidx,5800){$W^+$}
+\drawline\fermion[\NW\REG](\photonfrontx,\photonfronty)[5500]
+\drawarrow[\SE\ATBASE](\pmidx,\pmidy)
+\put(3500,7100){q}
+\drawline\fermion[\SW\REG](\photonfrontx,\photonfronty)[5500]
+\drawarrow[\SW\ATBASE](\pmidx,\pmidy)
+\put(3500,2300){$\overline{q}'$}
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[5500]
+\drawarrow[\SW\ATBASE](\pmidx,\pmidy)
+\global\advance \pmidx by -1400
+\put(\pmidx,7100){$e^+$}
+\drawline\fermion[\SE\REG](\photonbackx,\photonbacky)[5500]
+\drawarrow[\SE\ATBASE](\pmidx,\pmidy)
+\global\advance \pmidx by -1200
+\put(\pmidx,2300){$\nu$}
+\end{picture}
+\end{center}
+\end{document}
+
+\end{verbatim}
+Note the necessary blank line prior to the \bs begin\{picture\} command.
+
+\section{Exercises for section 4.1.2}
+\begin{verbatim}
+
+% Using Phantom Mode.
+
+\begin{picture}(20000,15000)
+\drawline\gluon[\E\FLAT](10000,15000)[7]
+% Calc lengths of scalars segments and gaps.
+\global\Xone=\gluonlengthx
+\global\divide\Xone by 8 % \Xone will be the gap length
+\global\Yone=\Xone % \Xone, \Yone convenient unused variable names.
+\double\Yone % \Yone will be the segment length
+% Draw fermions:
+\drawline\fermion[\W\REG](\gluonfrontx,\gluonfronty)[\gluonlengthx]
+\drawline\fermion[\S\REG](\gluonfrontx,\gluonfronty)[\gluonlengthx]
+\drawline\fermion[\W\REG](\fermionbackx,\fermionbacky)[\gluonlengthx]
+% Draw scalars
+\global\gaplength=\Xone \global\seglength=\Yone
+\drawline\scalar[\E\REG](\gluonbackx,\gluonbacky)[3]
+\global\gaplength=\Xone \global\seglength=\Yone
+\drawline\scalar[\S\REG](\gluonbackx,\gluonbacky)[3]
+\global\gaplength=\Xone \global\seglength=\Yone
+\drawline\scalar[\E\REG](\scalarbackx,\scalarbacky)[3]
+% Now the photon. Need to know it's length so use \phantom
+\startphantom
+\drawline\photon[\E\FLIPPED](0,0)[8] % Can draw from anywhere
+\stopphantom % Now we have the photon's length!!
+\negate\photonlengthx
+\global\advance\gluonlengthx by \photonlengthx % the difference
+\global\divide\gluonlengthx by 2
+\drawline\fermion[\E\REG](\fermionfrontx,\fermionfronty)[\gluonlengthx]
+\drawline\photon[\E\FLIPPED](\pbackx,\pbacky)[8] % Exactly same as in phantom mode.
+\drawline\fermion[\E\REG](\pbackx,\pbacky)[\gluonlengthx]
+% This is even easier using stemmed photons!
+\end{picture}
+\end{verbatim}
+The difficulty in rotating this diagram through 45 degrees is that we would
+require very short ``stems'' on the ends of the photon and there
+is a minimum length which diagonal lines may be drawn. One could try to
+connect the ends by a semi-circle (which may be slightly smaller), a kinked
+pair of vertical and horizontal lines, a large dot at the vertex \etc
+
+Almost any diagram may be drawn without recourse to phantom mode
+given enough effort and ingenuity. In this case one could
+\begin{verbatim}
+1) Draw the Gluon
+2) From the point (\pmidx,\pmidy) go down a distance of
+ \gluonlengthx (or \plengthx)
+3) Draw one half of the photon to the left and one half to the right
+4) Draw fermions of length \photonfrontx minus \gluonfrontx or
+ \gluonbackx minus \photonbackx at either end
+5) Draw the fermions and scalars as before.
+\end{verbatim}
+% good place to break appendix **** !!!
+\section{Exercise for section 4.3.2}
+\begin{verbatim}
+
+\hskip 1.25in
+\begin{picture}(8000,8000)
+% Three-gluon vertex:
+\stemvertex1\vertexlink3\drawvertex\gluon[\N 3](0,0)[4]
+\drawline\fermion[\SW\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\SE\REG](\vertexonex,\vertexoney)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+% Four-gluon vertex:
+\global\stemlength=1500
+\stemvertex3\vertexlink4\drawvertex\gluon[\NE 4](\vertexthreex,\vertexthreey)[3]
+\drawline\fermion[\W\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawline\fermion[\N\REG](\vertexthreex,\vertexthreey)[2000]
+% Add loops to line four of the four-gluon vertex (linked above with \vertexlink4).
+\global\stemlength=1500
+\backstemmed\drawline\gluon[\SE\REG](\vertexfourx,\vertexfoury)[2]
+\drawarrow[\SE\ATTIP](\pbackx,\pbacky)
+\end{picture}
+
+\end{verbatim}
+
+\section{Exercises for Section 4.3.3}
+
+The capped part of the diagram in section 2.10.2 was produced by:
+
+\begin{verbatim}
+
+\begin{picture}(25000,10000)
+\THICKLINES
+\put(24000,7000){\circle{3000}}
+% We request a circle of diameter 3000 so LaTeX will use it's maximum: 2800.
+% First establish the length of half of the doubly capped gluon (since only the
+\startphantom % back may be capped).
+\drawline\gluon[\E\REG](0,0)[2]\gluoncap
+\stopphantom
+\pbackx=22600 \pbacky=7000 % Establish left edge of circle with diameter=2800.
+\global\multiply \plengthx by -1 \global\multiply \plengthy by -1
+\global\advance \pbackx by \plengthx \global\advance \pbacky by \plengthy
+\drawline\gluon[\E\REG](\pbackx,\pbacky)[2]\gluoncap % Draw gluon TO the circle
+\drawline\gluon[\W\FLIPPED](\gluonfrontx,\gluonfronty)[2]\gluoncap
+\drawline\fermion[\NW\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[2000]
+\gluonbackx=25400 \gluonbacky=7000 % Establish right circle edge: diameter=2800.
+\negate\gluonlengthx \negate\gluonlengthy % Repeat on the right-hand side.
+\global\advance\gluonbackx by \gluonlengthx
+\global\advance\gluonbacky by \gluonlengthy
+\drawline\gluon[\W\FLIPPED](\gluonbackx,\gluonbacky)[2]\gluoncap
+\drawline\gluon[\E\REG](\gluonfrontx,\gluonfronty)[2]\gluoncap
+\drawline\fermion[\NE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+\advance \gluonfrontx by -6800 % Experiment or measure out ``CAPPED'' by ruler.
+\put(\gluonfrontx,2000){CAPPED}
+\THINLINES
+\end{picture}
+
+\end{verbatim}
+Note that an effective radius of 1400, instead of 1500, was used since
+the largest circle which \LaTeX\ can draw has a diameter of 28 points.
+
+The concluding exercise of 4.3.3 may be drawn with:
+
+\begin{verbatim}
+
+\begin{picture}(20000,21000)
+% Work our way from the upper left to lower right.
+%
+\global\stemlength=1500
+\backstemmed\drawline\photon[\SE\FLIPPED](0,20000)[8]
+\global\advance\pbackx by 1000 % Move to the centre
+\global\advance\pbacky by -1000 % of the circle.
+\THICKLINES\put(\pbackx,\pbacky){\circle{2830}}\THINLINES % The circle (thick)
+\global\advance\pbackx by 1000 % Move to the SW side
+\global\advance\pbacky by -1000 % of the circle.
+\global\stemlength=1500
+% The extra length on this vertex line is from one loop plus a link.
+% Note that the following line is both stemmed and linked.
+\frontstemmed\drawline\gluon[\SE\FLIPPED](\pbackx,\pbacky)[1]\gluonlink
+\vertexcap2\vertexcap3\drawvertex\gluon[\SE 3](\gluonbackx,\gluonbacky)[3]
+% Alternately we could have \vertexlink1\vertexcap2\vertexcap3\drawvertex...
+% Now draw the fermions, arrows and labels:
+\drawline\fermion[\SW\REG](\vertexthreex,\vertexthreey)[2000] % Southmost gluon.
+\drawarrow[\SW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by -700
+\global\advance\fermionbacky by -450
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[2000] % Eastmost gluon.
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -450
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\NE\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -250
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\SE\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -750
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+\end{picture}
+
+\end{verbatim}
+
+\section{Exercises for section 4.5}
+
+{\Large\bf A:}
+\vskip 0.2in
+This calligraphic masterpiece was created by:
+
+\begin{verbatim}
+
+\begin{picture}(28000,8000)
+%T:
+\drawline\gluon[\N\CENTRAL](0,0)[5]
+\global\Yone=\gluonbacky
+\drawline\fermion[\W\REG](\gluonbackx,\gluonbacky)[4000]
+\drawline\fermion[\E\REG](\gluonbackx,\gluonbacky)[4000]
+\global\advance\pbackx by 1000
+%H:
+\drawline\fermion[\N\REG](\pbackx,\gluonfronty)[\gluonlengthy]
+\drawline\photon[\E\REG](\pmidx,\pmidy)[5]
+\drawline\fermion[\N\REG](\pbackx,\gluonfronty)[\gluonlengthy]
+\global\advance\pbackx by 1000
+%E:
+\drawline\fermion[\N\REG](\pbackx,\gluonfronty)[\gluonlengthy]
+\global\advance\pmidy by -300
+\drawline\gluon[\E\FLIPPEDCURLY](\pmidx,\pmidy)[4]
+\global\advance\plengthx by 500
+\drawline\fermion[\E\REG](\gluonfrontx,0)[\plengthx]
+\drawline\fermion[\E\REG](\gluonfrontx,\Yone)[\plengthx]
+\global\advance\pbackx by 4000
+%O:
+\drawloop\gluon[\NW 8](\pbackx,300)
+\global\advance\loopbackx by 5500
+%R:
+\drawline\gluon[\S\CURLY](\loopbackx,\Yone)[3]
+\global\Xone=\boxlengthy \double\Xone \multroothalf\Xone
+\put(\pmidx,\pmidy){\oval(\Xone,\boxlengthy)[r]}
+\drawline\fermion[\S\REG](\pbackx,\pbacky)[\pbacky]
+\global\advance\pfrontx by 500
+\global\advance\pfronty by 50
+\drawline\photon[\SE\REG](\pfrontx,\pfronty)[4]
+%Y:
+\global\advance\pbackx by 2600
+\drawline\photon[\N\CURLY](\pbackx,0)[3]
+\global\Ytwo=\Yone
+\negate\plengthy
+\global\advance\Ytwo by \plengthy
+\double\Ytwo \multroothalf\Ytwo
+\drawline\fermion[\NE\REG](\photonbackx,\photonbacky)[\Ytwo]
+\drawline\fermion[\NW\REG](\photonbackx,\photonbacky)[\Ytwo]
+\end{picture}
+
+\end{verbatim}
+\newpage
+{\noindent{\Large\bf B:}}
+\vskip 0.2in
+The `balloon in the tree' diagram:
+\begin{verbatim}
+
+\begin{picture}(28000,28000)
+\THICKLINES
+%set up position of bottom of loop
+\startphantom
+\drawloop\gluon[\NE 0](0,0)
+\stopphantom
+\global\Xone=\loopfrontx % diameter of `true' loop
+\drawloop\gluon[\S 7](12000,18000)
+\global\Xtwo=\gluonbackx
+\global\Ytwo=\gluonbacky
+% draw gluon vertex
+\global\advance\loopmidy by \Xone
+\global\stemlength=400 % lengthen the stem since this is drawn in BOLD
+\stemvertex1\drawvertex\gluon[\S 3](\loopmidx,\loopmidy)[3]
+% Determine diameter and centre of fermion loop
+\negate\Xtwo
+\global\advance\Xtwo by \loopfrontx
+\global\Xthree=\Xtwo % Store. Will use shortly
+\double\Xtwo % \Xtwo is now the diameter of the fermion loop
+\put(\loopfrontx,\Ytwo){\circle{\Xtwo}}
+% Lastly the photon
+% This begins located at root 1/2 times radius in x & y direction from centre
+\multroothalf\Xthree % This is why we stored it.
+\global\advance\loopfrontx by \Xthree
+\global\advance\Ytwo by \Xthree
+\drawline\photon[\NE\FLIPPED](\loopfrontx,\Ytwo)[5]
+\end{picture}
+
+\end{verbatim}
+In phantom mode we draw a `central loop' (extent=`0'). This gives us the
+position of the {\em east-most} point of a complete loop and thus the true loop
+``radius''. By symmetry we now use this to find the south-most position on an
+{\em incomplete} loop (extent of seven).
+We store the (negative of the)
+``radius'' under the name \verb@\Xone@ and then draw the gluon
+loop, clockwise, storing the endpoints as \verb@(\Xtwo,\Ytwo)@. We next draw
+the three-gluon vertex beginning at the bottom of the gluon loop. To find this
+point we subtract the radius (\bs Xone) from the midpoint of the loop,
+(\bs loopmidx,\bs loopmidy).
+
+Next we draw the fermion loop.
+We accomplish this by finding the radius of the circle, which is the difference
+between the initial and final $x$ (or $y$) coordinates of the gluon loop.
+This is now stored as \verb@\Xthree@. The centre is simply at the $x$
+coordinate of the front of the gluon loop and the $y$ coordinate of the rear.
+Finally we use \bs multroothalf in order to find the spot, $45^\circ$ around the
+circle, from which to draw the photon.
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCPRELIMS.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCPRELIMS.tex
new file mode 100644
index 0000000000..8372500ede
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCPRELIMS.tex
@@ -0,0 +1,17 @@
+% Read in by FEYNMANDOC: FEYNMANDOCPRELIMS. Called by FDPRE.COM
+% PRELIMINARIES: TABLE OF CONTENTS, DEDICATION
+% SEE FEYNMANDOC.INC FOR INCLUDED FILES.
+\pagenumbering{roman}
+% DEDICATION:
+\begin{center}
+{\Huge\bf Dedication}\\[0.71in]\Large
+This Routine is dedicated to the memory of\\
+Professor Richard P. Feynman\\
+who died on February 15, 1988.
+\end{center}
+\normalsize
+\newpage
+% TABLE OF CONTENTS:
+\tableofcontents
+%\pagenumbering{arabic}
+%\setcounter{page}{0}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCTITLEA.tex b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCTITLEA.tex
new file mode 100644
index 0000000000..37a85f1eec
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/FEYNMANDOCTITLEA.tex
@@ -0,0 +1,159 @@
+% FEYNMANDOCTITLE : TITLEPAGE OF FEYNMANDOC...TEST VERSION
+% INPUT FEYNMAN.INC RUN WITH FDTITLE.TEX OR PRINTDOC
+%\pagestyle{empty} % no numbering.
+%\centerline{Initial and Final State Radiation}
+\begin{titlepage}
+\begin{flushright} % added 6/7/89 to give cav-hep preprint number <<<
+\quad\\[-1.0in]
+\mbox{\mbox{\hskip 4in}Cavendish-HEP 88/11}\\[0.58in]
+\end{flushright} % added 6/7/89 to give cav-hep preprint number <<<
+\begin{center}
+{\Huge\bf FEYNMAN}\\[0.71in]\Large A \LaTeX\ Routine
+for Generating Feynman Diagrams\\
+{\small Version 1.0}\\[0.46in]
+Michael Levine\\[0.23in] % Declares the author's name.
+Oct. 21, 1988 %\today % Deleting this command produces today's date.
+\end{center}
+\normalsize
+%
+\vskip 2in \hskip -1.0in
+\begin{picture}(30000,10000)
+%
+% THE PROTON
+%
+\put(1500,1500){\oval(1000,4000)}
+\put(-800,4300){PROTON}
+\thicklines
+\drawline\fermion[\W\REG](1000,1350)[2000]
+\drawline\fermion[\W\REG](1000,1400)[2000]
+\drawline\fermion[\W\REG](1000,1450)[2000]
+\drawline\fermion[\W\REG](1000,1500)[2000]
+\drawline\fermion[\W\REG](1000,1550)[2000]
+\drawline\fermion[\W\REG](1000,1600)[2000]
+\drawline\fermion[\W\REG](1000,1650)[2000]
+\thinlines
+\drawline\fermion[\E\REG](2000,1500)[5000]
+\drawarrow[\E\ATBASE](\pbackx,\pbacky)
+\drawline\fermion[\E\REG](2000,3000)[5000]
+\drawarrow[\E\ATBASE](\pbackx,\pbacky)
+\drawarrow[\E\ATBASE](\pbackx,0)
+\put(8000,2000){Spectators}
+\drawline\fermion[\E\REG](2000,0)[25000]
+%
+% THE LEPTONIC SECTOR:
+%
+\drawline\photon[\NE\REG](\fermionbackx,\pbacky)[10]
+\global\advance\pmidx by 650
+\global\advance\pmidy by -450
+\put(\pmidx,\pmidy){$\gamma,\,W^\pm,\,Z$}
+\drawline\fermion[\E\REG](\photonbackx,\photonbacky)[15000]
+\drawarrow[\W\ATBASE](\pmidx,\pmidy)
+\global\advance \pbackx by 250
+\global\advance \pbacky by -300
+\put(\pbackx,\pbacky){$e$}
+\drawline\fermion[\NW\REG](\photonbackx,\photonbacky)[15000]
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance \pbackx by -1250
+\global\advance \pbacky by 150
+\put(\pbackx,\pbacky){$e,\,\nu_e$}
+%
+% INITIAL STATE RADIATION:
+%
+\drawline\gluon[\SE\FLIPPED](4000,0)[2]\gluonlink
+\vertexcap2\vertexcap3\drawvertex\gluon[\SE 3](\gluonbackx,\gluonbacky)[5]
+\drawline\fermion[\SW\REG](\vertexthreex,\vertexthreey)[2000]
+\drawarrow[\SW\ATBASE](\pmidx,\pmidy)
+%\global\advance\fermionbackx by -550
+%\global\advance\fermionbacky by -600
+\global\advance\fermionbackx by -700
+\global\advance\fermionbacky by -450
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[2000]
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -450
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\NE\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -250
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\SE\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -750
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+%
+\drawline\gluon[\SE\FLIPPED](16000,0)[2]\gluonlink
+\vertexcap2\vertexcap3\drawvertex\gluon[\SE 3](\gluonbackx,\gluonbacky)[5]
+\drawline\fermion[\SW\REG](\vertexthreex,\vertexthreey)[2000]
+\drawarrow[\SW\ATBASE](\pmidx,\pmidy)
+%\global\advance\fermionbackx by -550
+%\global\advance\fermionbacky by -600
+\global\advance\fermionbackx by -700
+\global\advance\fermionbacky by -450
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\SE\REG](\vertexthreex,\vertexthreey)[2000]
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -450
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+\drawline\fermion[\NE\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\NE\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -250
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\SE\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -750
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+%
+%
+% FINAL STATE RADIATION:
+%
+%\end{picture}
+%\end{document}
+\drawline\fermion[\SE\REG](\photonfrontx,\photonfronty)[5000]
+\backstemmed\drawline\gluon[\E\CENTRAL](\pbackx,\pbacky)[4]
+%\drawline\fermion[\NE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\NE\REG](\pbackx,\pbacky)[2000]
+\drawarrow[\NE\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -250
+\put(\fermionbackx,\fermionbacky){$q$}
+%\drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+\drawline\fermion[\SE\REG](\fermionfrontx,\fermionfronty)[2000]
+\drawarrow[\NW\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -750
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+\drawline\fermion[\SE\REG](\gluonfrontx,\gluonfronty)[8000]
+\flipvertex\drawvertex\gluon[\E 3](\fermionbackx,\fermionbacky)[3]
+\drawline\fermion[\S\REG](\vertexthreex,\vertexthreey)[2000]
+\drawarrow[\S\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by -275
+\global\advance\fermionbacky by -650
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\E\REG](\vertexthreex,\vertexthreey)[2000]
+\drawarrow[\W\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -250
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+\drawline\fermion[\N\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\N\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by -275
+\global\advance\fermionbacky by 375
+\put(\fermionbackx,\fermionbacky){$q$}
+\drawline\fermion[\E\REG](\vertextwox,\vertextwoy)[2000]
+\drawarrow[\W\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 50
+\global\advance\fermionbacky by -250
+\put(\fermionbackx,\fermionbacky){$\bar q$}
+\drawline\fermion[\SE\REG](\vertexonex,\vertexoney)[12000]
+\drawarrow[\SE\ATBASE](\pmidx,\pmidy)
+\global\advance\fermionbackx by 75
+\global\advance\fermionbacky by -650
+\put(\fermionbackx,\fermionbacky){$q$}
+\end{picture}
+\end{titlepage}
diff --git a/macros/latex209/contrib/feynman/DOCMANUAL/README.1ST b/macros/latex209/contrib/feynman/DOCMANUAL/README.1ST
new file mode 100644
index 0000000000..29cce1cc9b
--- /dev/null
+++ b/macros/latex209/contrib/feynman/DOCMANUAL/README.1ST
@@ -0,0 +1,3 @@
+You need the FEYNMAN macros before you can latex this manual. You will
+also need to "latex FEYNMANDOC" twice in order to get the table of
+contents. The manual is 93 pages (8.5" x 11").
diff --git a/macros/latex209/contrib/feynman/doc/feynmandoc.ps b/macros/latex209/contrib/feynman/doc/feynmandoc.ps
new file mode 100644
index 0000000000..6fef660c0a
--- /dev/null
+++ b/macros/latex209/contrib/feynman/doc/feynmandoc.ps
@@ -0,0 +1,9245 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
+%%Title: FEYNMANDOC.dvi
+%%Pages: 93 1
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%%BeginProcSet: tex.pro
+/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
+load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
+isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
+round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
+N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
+/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{
+statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N
+/FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin
+/FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array
+/BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2
+array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}
+B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont
+setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup
+length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{
+ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B
+/ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0
+N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S
+dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0
+ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}
+imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr
+put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf
+div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook
+known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore
+showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256
+array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N
+/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X
+/rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0
+7 getinterval(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1
+TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1
+-.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{
+moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{
+S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B
+/j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w
+}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
+a}B /bos{/SS save N}B /eos{clear SS restore}B end
+%%EndProcSet
+TeXDict begin 1000 300 300 @start /Fa 1 111 df<C00000C00000600000600000600000
+3000003000003000001800001800001800000C00000C00000C0000060000060000060000030000
+03000003000001800001800001800000C00000C00000C000006000006000006000003000003000
+003000001800001800001800000C00000C00000C00000600000600000600000300000300000300
+0001800001800001800000C000004012317DA419>110 D E /Fb 1 90 df<F80000F87C0001F0
+3C0001E03E0003E01F0003C00F0007800F800F8007C00F0003C01F0003E01E0001F03C0000F07C
+00007878000078F000003CF000001CE000001FE000000FC0000007800000078000000780000007
+800000078000000780000007800000078000000780000007800000078000000780000007800000
+0780001D20809F1E>89 D E /Fc 2 24 df<08081818181818181818303030303032307270B46F
+1C60006000C000C000C0000F107E8A13>22 D<F8083018301830103030606060C061806700DC00
+E0000D0B7E8A0F>I E /Fd 2 111 df<FFFFC0FFFFC012027D8618>0 D<C000C0006000600060
+003000300030001800180018000C000C000C0006000600060003000300030001800180018000C0
+00400A197D9210>110 D E /Fe 2 42 df<00200040008001000300060004000C000C00180018
+003000300030007000600060006000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E0006000600060007000300030003000180018000C000C0004000600030001000080004000
+200B327CA413>40 D<800040002000100018000C000400060006000300030001800180018001C0
+00C000C000C000E000E000E000E000E000E000E000E000E000E000E000E000E000E000C000C000
+C001C0018001800180030003000600060004000C00180010002000400080000B327DA413>I
+E /Ff 8 83 df<00000000001800000000003C00000000007C0000000000F80000000001F00000
+000003E00000000007C0000000000F80000000001F00000000003E00000000007C0000000000F8
+0000000001F00000000003E00000000007C0000000000F80000000001F00000000003E00000000
+007C0000000000F80000000001F00000000003E00000000007C0000000000F80000000001F0000
+0000003E00000000007C0000000000F80000000001F00000000003E00000000007C0000000000F
+80000000001F00000000003E00000000007C0000000000F80000000001F00000000003E0000000
+0007C0000000000F80000000001F00000000003E00000000007C0000000000F80000000000F000
+000000006000000000002E2E82AB2A>0 D<001000001800003C00003E00003F00007F80007FC0
+00FFE000FFF000FFF801FFFC01FFFE03FFFF03FFFC07FFE007FF800FFC000FF0001FC0001F0000
+3C0000300000400000800000181880972A>9 D<00000200000E00003E0001FE0007FE003FFE01
+FFFE0FFFFEFFFFFEFFFFFE0FFFFE01FFFE003FFE0007FE0001FE00003E00000E00000217127E88
+2A>27 D<800000E00000F80000FF0000FFC000FFF800FFFF00FFFFE0FFFFFEFFFFFEFFFFE0FFFF
+00FFF800FFC000FF0000F80000E0000080000017126F882A>45 D<00C00000C00000C00000C000
+01E00001E00001E00003F00003F00003F00007F80007F80007F8000FFC000FFC001FFE001FFE00
+1FFE003FFF003FFF007FFF807FFF80FFFFC0121789A72A>54 D<600000000000F00000000000F8
+00000000007C00000000003E00000000001F00000000000F800000000007C00000000003E00000
+000001F00000000000F800000000007C00000000003E00000000001F00000000000F8000000000
+07C00000000003E00000000001F00000000000F800000000007C00000000003E00000000001F00
+000000000F800000000007C00000000003E00000000001F00000000000F800000000007C000000
+00003E00000000001F00000000000F800000000007C00000000003E00000000001F00000000000
+F800000000007C00000000003E00000000001F00000000000F800000000007C00000000003E000
+00000001F00000000000F800000000007C00000000003C0000000000182E2E82AB2A>64
+D<8000004000003000003C00001F00001FC0000FF0000FFC0007FF8007FFE003FFFC03FFFF01FF
+FE01FFFC00FFF800FFF000FFE0007FC0007F80003F00003E00003C00001800001000181880A92A
+>73 D<000800001800003C00007C0000FC0001FE0003FE0007FF000FFF001FFF003FFF807FFF80
+FFFFC03FFFC007FFE001FFE0003FF0000FF00003F80000F800003C00000C00000200000118186E
+972A>82 D E /Fg 2 96 df<800000000040400000000080400000000080200000000100180000
+0006000C0000000C0006000000180001800000600000F00003C000003F003F0000000FFFFC0000
+0000FFC000002A0C7D9231>94 D<0003FFF00000001FFFFE0000007C000F800000E00001C00003
+800000700006000000180008000000040010000000020020000000010040000000008040000000
+00808000000000402A0C7D9231>I E /Fh 22 40 df<7800FE00FF007F800FC003E001E001F000
+F000F000F000700C0C888311>0 D<0020007000F000F000F001F001E003E00FC07F80FF00FE00
+78000C0D888C11>I<20007000F000F000F000F80078007C003F001FF00FF807F801F00D0D808C
+11>I<01F007F80FF81FF03F007C007800F800F000F000F00070000D0C808311>I<7C0000FF8000
+FFC0007FF00007F80000FC00007E00001F00000F800007800007C00003E00001E00001E00001F0
+0000F00000F00000F00000F00000701414908321>I<0003F0001FF8003FF800FFF001FE0003F0
+0007E0000F80001F00001E00003E00007C0000780000780000F80000F00000F00000F00000F000
+007000001514808321>7 D<7E000000FFC00000FFF800007FFE000003FF0000003FC000000FE0
+000003F0000001F80000007C0000003E0000001F0000000F0000000F80000007C0000003C00000
+03E0000001E0000001E0000001F0000000F0000000F0000000F800000078000000780000007800
+00007800000078000000301D1D998332>I<000000300000007800000078000000780000007800
+000078000000F8000000F0000000F0000000F0000001F0000001E0000003E0000003C0000007C0
+00000F8000000F0000001F0000003E0000007C000001F8000003F000000FE000003FC00003FF00
+007FFE0000FFF80000FFE000007E0000001D1D999C32>I<60000000F0000000F0000000F00000
+00F0000000F0000000F80000007800000078000000780000007C0000003C0000003E0000001E00
+00001F0000000F8000000780000007C0000003E0000001F0000000FC0000007E0000003F800000
+1FE0000007FE000003FFF00000FFF800003FF8000003F01D1D809C32>I<000003F000003FF800
+00FFF80003FFF00007FE00001FE000003F8000007E000000FC000001F0000003E0000007C00000
+078000000F8000001F0000001E0000003E0000003C0000007C0000007C00000078000000780000
+00F8000000F0000000F0000000F0000000F0000000F0000000600000001D1D808332>I<7F8000
+000000FFF800000000FFFF000000007FFFE000000000FFF8000000000FFE0000000001FF800000
+00003FC0000000000FF00000000003F80000000000FC00000000007E00000000001F0000000000
+0F800000000007C00000000003E00000000001F00000000000F800000000007800000000007C00
+000000003E00000000001E00000000001F00000000000F00000000000F80000000000780000000
+0007C00000000003C00000000003C00000000003E00000000001E00000000001E00000000001F0
+0000000000F00000000000F00000000000F00000000000F8000000000078000000000078000000
+0000780000000000780000000000780000000000780000000000780000000000382D2DA98353>
+16 D<000000000010000000000038000000000078000000000078000000000078000000000078
+0000000000780000000000780000000000780000000000F80000000000F00000000000F0000000
+0000F00000000001F00000000001E00000000001E00000000003E00000000003C00000000003C0
+0000000007C0000000000780000000000F80000000000F00000000001F00000000001E00000000
+003E00000000007C0000000000780000000000F80000000001F00000000003E00000000007C000
+0000000F80000000001F00000000007E0000000000FC0000000003F8000000000FF0000000003F
+C000000001FF800000000FFE00000000FFF80000007FFFE0000000FFFF00000000FFF800000000
+7F80000000002D2EA9AD53>I<200000000000700000000000F00000000000F00000000000F000
+00000000F00000000000F00000000000F00000000000F00000000000F800000000007800000000
+007800000000007800000000007C00000000003C00000000003C00000000003E00000000001E00
+000000001E00000000001F00000000000F00000000000F800000000007800000000007C0000000
+0003C00000000003E00000000001F00000000000F00000000000F800000000007C00000000003E
+00000000001F00000000000F800000000007C00000000003F00000000001F80000000000FE0000
+0000007F80000000001FE0000000000FFC0000000003FF8000000000FFF8000000003FFFF80000
+0007FFFC00000000FFFC000000000FF82E2E80AD53>I<000000000FF800000000FFFC00000007
+FFFC0000003FFFF8000000FFF800000003FF800000000FFC000000001FE0000000007F80000000
+00FE0000000001F80000000003F00000000007C0000000000F80000000001F00000000003E0000
+0000007C0000000000F80000000000F00000000001F00000000003E00000000003C00000000007
+C0000000000780000000000F80000000000F00000000001F00000000001E00000000001E000000
+00003E00000000003C00000000003C00000000007C000000000078000000000078000000000078
+0000000000F80000000000F00000000000F00000000000F00000000000F00000000000F0000000
+0000F00000000000F000000000007000000000002E2D808353>I<7FC0000000000000FFFF0000
+00000000FFFFE000000000007FFFFC0000000000007FFF80000000000001FFE00000000000003F
+F800000000000007FE00000000000000FF800000000000003FC00000000000000FF00000000000
+0003F800000000000000FC000000000000007F000000000000001F800000000000000FC0000000
+00000007E000000000000001F000000000000000F8000000000000007C000000000000003E0000
+00000000001F000000000000000F80000000000000078000000000000007C000000000000003E0
+00000000000001F000000000000000F000000000000000F8000000000000007C00000000000000
+3C000000000000003E000000000000001E000000000000001F000000000000000F000000000000
+000F80000000000000078000000000000007C000000000000003C000000000000003C000000000
+000003E000000000000001E000000000000001E000000000000001F000000000000000F0000000
+00000000F000000000000000F80000000000000078000000000000007800000000000000780000
+0000000000780000000000000078000000000000007C000000000000003C000000000000003C00
+0000000000003C000000000000003C000000000000003C000000000000003C000000000000003C
+000000000000003C00000000000000183E3EBA8374>24 D<000000000000001800000000000000
+3C000000000000003C000000000000003C000000000000003C000000000000003C000000000000
+003C000000000000003C000000000000003C000000000000007C00000000000000780000000000
+00007800000000000000780000000000000078000000000000007800000000000000F800000000
+000000F000000000000000F000000000000001F000000000000001E000000000000001E0000000
+00000003E000000000000003C000000000000003C000000000000007C000000000000007800000
+000000000F800000000000000F000000000000001F000000000000001E000000000000003E0000
+00000000003C000000000000007C00000000000000F800000000000000F000000000000001F000
+000000000003E000000000000007C000000000000007800000000000000F800000000000001F00
+0000000000003E000000000000007C00000000000000F800000000000001F000000000000007E0
+0000000000000FC00000000000001F800000000000007F00000000000000FC00000000000003F8
+0000000000000FF00000000000003FC0000000000000FF80000000000007FE0000000000003FF8
+000000000001FFE000000000007FFF80000000007FFFFC0000000000FFFFE00000000000FFFF00
+00000000007FC00000000000003E3EBABD74>I<6000000000000000F000000000000000F00000
+0000000000F000000000000000F000000000000000F000000000000000F000000000000000F000
+000000000000F000000000000000F8000000000000007800000000000000780000000000000078
+00000000000000780000000000000078000000000000007C000000000000003C00000000000000
+3C000000000000003E000000000000001E000000000000001E000000000000001F000000000000
+000F000000000000000F000000000000000F80000000000000078000000000000007C000000000
+000003C000000000000003E000000000000001E000000000000001F000000000000000F0000000
+00000000F8000000000000007C000000000000003C000000000000003E000000000000001F0000
+00000000000F80000000000000078000000000000007C000000000000003E000000000000001F0
+00000000000000F8000000000000007C000000000000003E000000000000001F80000000000000
+0FC000000000000007E000000000000003F800000000000000FC000000000000007F0000000000
+00003FC00000000000000FF000000000000007FC00000000000001FF800000000000007FF00000
+000000001FFE00000000000007FFF8000000000000FFFFF800000000001FFFFC000000000003FF
+FC0000000000000FF83E3E80BD74>I<0000000000000FF8000000000003FFFC00000000001FFF
+FC0000000000FFFFF80000000007FFF800000000001FFE0000000000007FF0000000000001FF80
+000000000007FC0000000000000FF00000000000003FC00000000000007F00000000000000FC00
+000000000003F800000000000007E00000000000000FC00000000000001F800000000000003E00
+0000000000007C00000000000000F800000000000001F000000000000003E000000000000007C0
+00000000000007800000000000000F800000000000001F000000000000003E000000000000003C
+000000000000007C00000000000000F800000000000000F000000000000001F000000000000001
+E000000000000003E000000000000003C000000000000007C00000000000000780000000000000
+0F800000000000000F000000000000000F000000000000001F000000000000001E000000000000
+001E000000000000003E000000000000003C000000000000003C000000000000007C0000000000
+000078000000000000007800000000000000780000000000000078000000000000007800000000
+000000F800000000000000F000000000000000F000000000000000F000000000000000F0000000
+00000000F000000000000000F000000000000000F000000000000000F000000000000000600000
+00000000003E3E808374>I<7FE0000000000000000000FFFFC00000000000000000FFFFFC0000
+0000000000007FFFFFC000000000000000003FFFF80000000000000000007FFF00000000000000
+000007FFC00000000000000000007FF80000000000000000000FFE00000000000000000001FF80
+0000000000000000007FE00000000000000000000FF000000000000000000003FC000000000000
+00000000FE000000000000000000003F800000000000000000001FC000000000000000000007F0
+00000000000000000003F800000000000000000000FC000000000000000000007F000000000000
+000000001F800000000000000000000FC000000000000000000007E000000000000000000001F0
+00000000000000000000F8000000000000000000007C000000000000000000003E000000000000
+000000001F000000000000000000000F8000000000000000000007C000000000000000000003E0
+00000000000000000001F000000000000000000000F000000000000000000000F8000000000000
+000000007C000000000000000000003E000000000000000000001E000000000000000000001F00
+0000000000000000000F80000000000000000000078000000000000000000007C0000000000000
+00000003E000000000000000000001E000000000000000000001F000000000000000000000F800
+00000000000000000078000000000000000000007C000000000000000000003C00000000000000
+0000003E000000000000000000001E000000000000000000001F000000000000000000000F0000
+00000000000000000F000000000000000000000F80000000000000000000078000000000000000
+000007C000000000000000000003C000000000000000000003C000000000000000000003E00000
+0000000000000001E000000000000000000001E000000000000000000001F00000000000000000
+0000F000000000000000000000F000000000000000000000F000000000000000000000F8000000
+000000000000007800000000000000000000780000000000000000000078000000000000000000
+007C000000000000000000003C000000000000000000003C000000000000000000003C00000000
+0000000000003C000000000000000000003C000000000000000000003C00000000000000000000
+3E000000000000000000001E000000000000000000001E000000000000000000001E0000000000
+00000000001E000000000000000000001E000000000000000000001E000000000000000000001E
+000000000000000000001E000000000000000000001E000000000000000000000C5757D383A6>
+36 D<000000000000000000000C000000000000000000001E000000000000000000001E000000
+000000000000001E000000000000000000001E000000000000000000001E000000000000000000
+001E000000000000000000001E000000000000000000001E000000000000000000001E00000000
+0000000000003E000000000000000000003C000000000000000000003C00000000000000000000
+3C000000000000000000003C000000000000000000003C000000000000000000003C0000000000
+00000000007C000000000000000000007800000000000000000000780000000000000000000078
+00000000000000000000F800000000000000000000F000000000000000000000F0000000000000
+00000000F000000000000000000001F000000000000000000001E000000000000000000001E000
+000000000000000003E000000000000000000003C000000000000000000003C000000000000000
+000007C000000000000000000007800000000000000000000F800000000000000000000F000000
+000000000000000F000000000000000000001F000000000000000000001E000000000000000000
+003E000000000000000000003C000000000000000000007C000000000000000000007800000000
+000000000000F800000000000000000001F000000000000000000001E000000000000000000003
+E000000000000000000007C000000000000000000007800000000000000000000F800000000000
+000000001F000000000000000000001E000000000000000000003E000000000000000000007C00
+000000000000000000F800000000000000000000F000000000000000000001F000000000000000
+000003E000000000000000000007C00000000000000000000F800000000000000000001F000000
+000000000000003E000000000000000000007C00000000000000000000F8000000000000000000
+01F000000000000000000007E00000000000000000000FC00000000000000000001F8000000000
+00000000007F00000000000000000000FC00000000000000000003F800000000000000000007F0
+0000000000000000001FC00000000000000000003F80000000000000000000FE00000000000000
+000003FC0000000000000000000FF00000000000000000007FE0000000000000000001FF800000
+0000000000000FFE0000000000000000007FF8000000000000000007FFC000000000000000007F
+FF00000000000000003FFFF8000000000000007FFFFFC000000000000000FFFFFC000000000000
+0000FFFFC000000000000000007FE00000000000000000005757D3D6A6>I<6000000000000000
+000000F000000000000000000000F000000000000000000000F000000000000000000000F00000
+0000000000000000F000000000000000000000F000000000000000000000F00000000000000000
+0000F000000000000000000000F000000000000000000000F80000000000000000000078000000
+000000000000007800000000000000000000780000000000000000000078000000000000000000
+00780000000000000000000078000000000000000000007C000000000000000000003C00000000
+0000000000003C000000000000000000003C000000000000000000003E00000000000000000000
+1E000000000000000000001E000000000000000000001E000000000000000000001F0000000000
+00000000000F000000000000000000000F000000000000000000000F8000000000000000000007
+80000000000000000000078000000000000000000007C000000000000000000003C00000000000
+0000000003E000000000000000000001E000000000000000000001E000000000000000000001F0
+00000000000000000000F000000000000000000000F80000000000000000000078000000000000
+000000007C000000000000000000003C000000000000000000003E000000000000000000001F00
+0000000000000000000F000000000000000000000F8000000000000000000007C0000000000000
+00000003C000000000000000000003E000000000000000000001F000000000000000000000F000
+000000000000000000F8000000000000000000007C000000000000000000003E00000000000000
+0000001E000000000000000000001F000000000000000000000F8000000000000000000007C000
+000000000000000003E000000000000000000001F000000000000000000000F800000000000000
+0000007C000000000000000000003E000000000000000000001F000000000000000000000FC000
+000000000000000007E000000000000000000003F000000000000000000001FC00000000000000
+0000007E000000000000000000003F800000000000000000001FC000000000000000000007F000
+000000000000000003F800000000000000000000FE000000000000000000007F80000000000000
+0000001FE00000000000000000000FFC00000000000000000003FF00000000000000000000FFE0
+0000000000000000003FFC00000000000000000007FFC0000000000000000001FFFC0000000000
+000000003FFFF8000000000000000007FFFFFC00000000000000007FFFFE000000000000000007
+FFFE0000000000000000000FFC575780D6A6>I<0000000000000000000FFC0000000000000000
+07FFFE00000000000000007FFFFE0000000000000007FFFFFC000000000000003FFFF800000000
+00000001FFFC000000000000000007FFC000000000000000003FFC000000000000000000FFE000
+0000000000000003FF0000000000000000000FFC0000000000000000001FE00000000000000000
+007F80000000000000000000FE00000000000000000003F800000000000000000007F000000000
+00000000001FC00000000000000000003F800000000000000000007E00000000000000000001FC
+00000000000000000003F000000000000000000007E00000000000000000000FC0000000000000
+0000001F000000000000000000003E000000000000000000007C00000000000000000000F80000
+0000000000000001F000000000000000000003E000000000000000000007C00000000000000000
+000F800000000000000000001F000000000000000000001E000000000000000000003E00000000
+0000000000007C00000000000000000000F800000000000000000000F000000000000000000001
+F000000000000000000003E000000000000000000003C000000000000000000007C00000000000
+000000000F800000000000000000000F000000000000000000001F000000000000000000003E00
+0000000000000000003C000000000000000000007C000000000000000000007800000000000000
+000000F800000000000000000000F000000000000000000001F000000000000000000001E00000
+0000000000000001E000000000000000000003E000000000000000000003C00000000000000000
+0007C0000000000000000000078000000000000000000007800000000000000000000F80000000
+0000000000000F000000000000000000000F000000000000000000001F00000000000000000000
+1E000000000000000000001E000000000000000000001E000000000000000000003E0000000000
+00000000003C000000000000000000003C000000000000000000003C000000000000000000007C
+000000000000000000007800000000000000000000780000000000000000000078000000000000
+00000000780000000000000000000078000000000000000000007800000000000000000000F800
+000000000000000000F000000000000000000000F000000000000000000000F000000000000000
+000000F000000000000000000000F000000000000000000000F000000000000000000000F00000
+0000000000000000F000000000000000000000F000000000000000000000600000000000000000
+000057578083A6>I E /Fi 1 111 df<C00000E00000E000007000007000007000003800003800
+003800001C00001C00000E00000E00000E000007000007000007000003800003800003800001C0
+0001C00001C00000E00000E00000E000007000007000007000003800003800001C00001C00001C
+00000E00000E00000E000007000007000007000003800003800003800001C00001C00001C00000
+E00000E00000E000007000007000003800003800003800001C00001C00001C00000E00000E0000
+06173C7DAC1E>110 D E /Fj 1 111 df<C000C000600060006000300030003000180018001800
+0C000C000C0006000600060003000300030001800180018000C000C000C0006000600060003000
+300030001800180018000C00040E257E9B13>110 D E /Fk 91 126 df<70F8F8F8F8F8F8F8F8
+F8F8F8F8F8F8F8F870000000000070F8F8F870051C779B18>33 D<030600078F00078F00078F00
+078F00078F00078F007FFFC0FFFFE0FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E00
+7FFFC0FFFFE0FFFFE07FFFC01E3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18>
+35 D<00C00001C00001C00001C00003F0000FFC003FFE007DCF0071C700E1C380E1C780E1C780
+E1C780F1C00079C0003DC0001FE0000FF80003FC0001DE0001CF0001C70061C380F1C380F1C380
+E1C380E1C70071C70079DE003FFE001FF80007E00001C00001C00001C00000C00011247D9F18>
+I<3803007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E007C3C007C3C00387C
+0000780000780000F80000F00001F00001E00001E00003E00003C00003C00007C0000783800787
+C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07C018038013247E9F18>I<01
+C00007E0000FF0000E70001C38001C38001C38001C38001C73F01C73F01CE3F00FE3800FC7000F
+87000F07001F0E003F0E007B8E0073DC00E1DC00E0F800E0F800E07070E0787070FC707FFFE03F
+CFE00F03C0141C7F9B18>I<387C7C7E3E0E0E0E1C1C38F8F0C0070E789B18>I<007000F001E003
+C007800F001E001C00380038007000700070007000E000E000E000E000E000E000E000E0007000
+700070007000380038001C001E000F00078003C001F000F000700C24799F18>I<6000F0007800
+3C001E000F000780038001C001C000E000E000E000E00070007000700070007000700070007000
+E000E000E000E001C001C0038007800F001E003C007800F00060000C247C9F18>I<01C00001C0
+0001C00001C000C1C180F1C780F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C7
+80C1C18001C00001C00001C00001C00011147D9718>I<00600000F00000F00000F00000F00000
+F00000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F00000F00000
+F00000600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>I<7FFF00FFFF80FFFF80
+7FFF0011047D8F18>I<3078FCFC78300606778518>I<000300000780000780000F80000F00001F
+00001E00001E00003E00003C00007C0000780000780000F80000F00001F00001E00003E00003C0
+0003C00007C0000780000F80000F00000F00001F00001E00003E00003C00003C00007C00007800
+00F80000F00000F0000060000011247D9F18>I<01F00007FC000FFE001F1F001C070038038078
+03C07001C07001C0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E070
+01C07001C07803C03803801C07001F1F000FFE0007FC0001F000131C7E9B18>I<018003800380
+07800F803F80FF80FB804380038003800380038003800380038003800380038003800380038003
+80038003807FFCFFFE7FFC0F1C7B9B18>I<03F0000FFE003FFF007C0F807003C0E001C0F000E0
+F000E06000E00000E00000E00001C00001C00003C0000780000F00001E00003C0000780000F000
+01E00007C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<07F8001FFE003FFF
+007807807803C07801C03001C00001C00003C0000380000F0003FF0003FE0003FF000007800003
+C00001C00000E00000E00000E0F000E0F000E0F001C0F003C07C07803FFF001FFE0003F800131C
+7E9B18>I<001F00003F0000770000770000E70001E70001C7000387000787000707000E07001E
+07003C0700380700780700F00700FFFFF8FFFFF8FFFFF800070000070000070000070000070000
+0700007FF000FFF8007FF0151C7F9B18>I<1FFF803FFF803FFF80380000380000380000380000
+3800003800003800003800003BF8003FFE003FFF003C07801803C00001C00000E00000E06000E0
+F000E0F000E0E001C07003C07C0F803FFF001FFC0003F000131C7E9B18>I<007E0001FF0007FF
+800F83C01E03C01C03C0380180380000700000700000E1F800E7FE00FFFF00FE0780F803C0F001
+C0F000E0E000E0F000E07000E07000E07000E03801C03C03C01E07800FFF0007FE0001F800131C
+7E9B18>I<E00000FFFFE0FFFFE0FFFFE0E003C0E00780000700000E00001E00001C0000380000
+380000700000700000E00000E00000E00001C00001C00001C00001C00003C00003800003800003
+8000038000038000038000038000131D7E9C18>I<03F8000FFE001FFF003E0F803803807001C0
+7001C07001C07001C03803803C07801FFF0007FC000FFE001F1F003C07807001C0F001E0E000E0
+E000E0E000E0E000E07001C07803C03E0F801FFF000FFE0003F800131C7E9B18>I<03F0000FFC
+001FFE003C0F00780780700380E001C0E001C0E001C0E001E0E001E07001E07803E03C0FE01FFF
+E00FFEE003F0E00000E00001C00001C00001C0300380780780780F00783E003FFC001FF00007C0
+00131C7E9B18>I<3078FCFC783000000000000000003078FCFC78300614779318>I<183C7E7E3C
+180000000000000000183C7E7E3E1E0E1C3C78F060071A789318>I<000300000780001F80003F
+00007E0001FC0003F00007E0001FC0003F00007E0000FC0000FC00007E00003F00001FC00007E0
+0003F00001FC00007E00003F00001F8000078000030011187D9918>I<7FFFC0FFFFE0FFFFE0FF
+FFE0000000000000000000000000FFFFE0FFFFE0FFFFE07FFFC0130C7E9318>I<600000F00000
+FC00007E00003F00001FC00007E00003F00001FC00007E00003F00001F80001F80003F00007E00
+01FC0003F00007E0001FC0003F00007E0000FC0000F0000060000011187D9918>I<007C0001FE
+0007FF000F87801E03C03C1DC0387FC070FFE071E3E071C1E0E1C1E0E380E0E380E0E380E0E380
+E0E380E0E380E0E1C1C071C1C071E3C070FF80387F003C1C001E00E00F83E007FFC001FF80007E
+00131C7E9B18>64 D<00700000F80000F80000D80000D80001DC0001DC0001DC00018C00038E00
+038E00038E00038E000306000707000707000707000707000FFF800FFF800FFF800E03800E0380
+1C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>I<FFFC00FFFF00FFFF801C03C01C01C01C00
+E01C00E01C00E01C00E01C01E01C01C01C07C01FFF801FFF001FFFC01C03C01C00E01C00F01C00
+701C00701C00701C00701C00F01C00E01C03E0FFFFC0FFFF80FFFE00141C7F9B18>I<00F8E003
+FEE007FFE00F07E01E03E03C01E03800E07000E07000E0700000E00000E00000E00000E00000E0
+0000E00000E00000E000007000007000E07000E03800E03C00E01E01C00F07C007FF8003FE0000
+F800131C7E9B18>I<7FF800FFFE007FFF001C0F801C03C01C03C01C01E01C00E01C00E01C00F0
+1C00701C00701C00701C00701C00701C00701C00701C00701C00F01C00E01C00E01C01E01C01C0
+1C03C01C0F807FFF00FFFE007FF800141C7F9B18>I<FFFFF0FFFFF0FFFFF01C00701C00701C00
+701C00701C00001C00001C0E001C0E001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00
+001C00001C00381C00381C00381C00381C0038FFFFF8FFFFF8FFFFF8151C7F9B18>I<FFFFE0FF
+FFE0FFFFE01C00E01C00E01C00E01C00E01C00001C00001C1C001C1C001C1C001FFC001FFC001F
+FC001C1C001C1C001C1C001C00001C00001C00001C00001C00001C00001C0000FFC000FFC000FF
+C000131C7E9B18>I<01F1C003FDC00FFFC01F0FC01C03C03803C03801C07001C07001C0700000
+E00000E00000E00000E00000E00000E00FF0E01FF0E00FF07001C07001C07003C03803C03803C0
+1C07C01F0FC00FFFC003FDC001F1C0141C7E9B18>I<7F07F0FF8FF87F07F01C01C01C01C01C01
+C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C01C01
+C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>I<7FFF00FF
+FF807FFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF00FFFF807F
+FF00111C7D9B18>I<01FFC003FFC001FFC0000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00F00E00
+F00E00F03C007FFC003FF0000FC000121C7D9B18>I<7F07F0FF87F87F07F01C03C01C07801C07
+001C0E001C1E001C3C001C38001C70001CF0001DF0001DF0001FB8001FB8001F1C001E1C001C0E
+001C0E001C07001C07001C03801C03801C01C07F03F0FF87F87F03F0151C7F9B18>I<7FE000FF
+E0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00000E00000E00700E00700E00700E00700E00707FFFF0FFFFF07F
+FFF0141C7F9B18>I<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B8EE03B8EE0398CE0
+398CE039DCE039DCE039DCE038D8E038D8E038F8E03870E03870E03800E03800E03800E03800E0
+3800E03800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07F01D81C01D81C01D81
+C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C01C39C01C39C01C39
+C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C7F9B18>I<0FF8003F
+FE007FFF00780F00700700F00780E00380E00380E00380E00380E00380E00380E00380E00380E0
+0380E00380E00380E00380E00380E00380E00380E00380F00780700700780F007FFF003FFE000F
+F800111C7D9B18>I<FFFE00FFFF80FFFFC01C03C01C01E01C00E01C00701C00701C00701C0070
+1C00701C00E01C01E01C03C01FFFC01FFF801FFE001C00001C00001C00001C00001C00001C0000
+1C00001C0000FF8000FF8000FF8000141C7F9B18>I<0FF8003FFE007FFF00780F00700700F007
+80E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E003
+80E00380E1E380E1E380F0E78070F700787F007FFF003FFE000FFC00001C00001E00000E00000F
+0000070000070011227D9B18>I<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C
+01C01C03C01C03801C0F801FFF001FFE001FFE001C0F001C07001C03801C03801C03801C03801C
+03801C039C1C039C1C039C7F01F8FF81F87F00F0161C7F9B18>I<03F3801FFF803FFF807C0F80
+700780E00380E00380E00380E000007000007800003F00001FF00007FE0000FF00000F800003C0
+0001C00000E00000E06000E0E000E0E001E0F001C0F80780FFFF80FFFE00E7F800131C7E9B18>
+I<7FFFF8FFFFF8FFFFF8E07038E07038E07038E070380070000070000070000070000070000070
+0000700000700000700000700000700000700000700000700000700000700000700000700007FF
+0007FF0007FF00151C7F9B18>I<FF83FEFF83FEFF83FE1C00701C00701C00701C00701C00701C
+00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C
+00700E00E00F01E00783C003FF8001FF00007C00171C809B18>I<FF07F8FF07F8FF07F81C01C0
+1C01C01C01C01C01C00E03800E03800E03800E03800F0780070700070700070700070700038E00
+038E00038E00038E00018C0001DC0001DC0001DC0000D80000F80000F800007000151C7F9B18>
+I<FE03F8FE03F8FE03F87000707000707000703800E03800E03800E03800E03800E038F8E038F8
+E039DCE039DCE019DCC019DCC019DCC0198CC01D8DC01D8DC01D8DC01D8DC00D8D800D05800F07
+800F07800E0380151C7F9B18>I<7F8FE07F9FE07F8FE00E07000F0700070E00078E00039C0003
+DC0001F80001F80000F00000F00000700000F00000F80001F80001DC00039E00038E00070F0007
+07000E07800E03801E03C07F07F0FF8FF87F07F0151C7F9B18>I<FF07F8FF07F8FF07F81C01C0
+1E03C00E03800F0780070700070700038E00038E0001DC0001DC0001DC0000F80000F800007000
+00700000700000700000700000700000700000700000700001FC0003FE0001FC00151C7F9B18>
+I<3FFFE07FFFE07FFFE07001C07003C0700780700700000F00001E00001C00003C000078000070
+0000F00001E00001C00003C0000780000700000F00001E00E01C00E03C00E07800E07000E0FFFF
+E0FFFFE0FFFFE0131C7E9B18>I<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000FFF8FFF8FFF80D24779F18>I<600000F00000F00000F800007800007C00003C00003C0000
+3E00001E00001F00000F00000F00000F800007800007C00003C00003C00003E00001E00001F000
+00F00000F800007800007800007C00003C00003E00001E00001E00001F00000F00000F80000780
+00078000030011247D9F18>I<FFF8FFF8FFF80038003800380038003800380038003800380038
+003800380038003800380038003800380038003800380038003800380038003800380038003800
+38FFF8FFF8FFF80D247F9F18>I<018007C01FF07EFCF83EE00E0F067C9B18>I<7FFF00FFFF80FF
+FF807FFF0011047D7F18>I<061E3E387070E0E0E0F8FC7C7C38070E789E18>I<1FE0003FF8007F
+FC00781E00300E0000070000070000FF0007FF001FFF007F0700780700E00700E00700E00700F0
+0F00781F003FFFF01FFBF007E1F014147D9318>I<7E0000FE00007E00000E00000E00000E0000
+0E00000E00000E3E000EFF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E0038
+0E00380E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF
+001FFF803E0780380300700000700000E00000E00000E00000E00000E00000E000007000007001
+C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80003F80001F8000038000038000
+038000038000038003E3800FFB801FFF803C1F80380F80700780700380E00380E00380E00380E0
+0380E00380E00380700780700780380F803C1F801FFFF00FFBF803E3F0151C7E9B18>I<01F000
+07FC001FFE003E0F00380780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0E00000700000
+7001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80007FC000FFE000E1E001C0
+C001C00001C00001C0007FFFC0FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01
+E1F007FFF80FFFF81E1E301C0E003807003807003807003807003807001C0E001E1E001FFC001F
+F80039E0003800001C00001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E0003878
+00F07E03F01FFFC00FFF8001FC00151F7F9318>I<7E0000FE00007E00000E00000E00000E0000
+0E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03800007C0
+0007C00007C0000380000000000000000000000000007FC000FFC0007FC00001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF
+80FFFF00111D7C9C18>I<0038007C007C007C003800000000000000000FFC1FFC0FFC001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C6038F078FFF07FE03F800E277E9C18>I<FE0000FE0000FE00000E00000E00000E00000E0000
+0E00000E3FF00E7FF00E3FF00E07800E0F000E1E000E3C000E78000EF0000FF8000FFC000F9C00
+0F0E000E0F000E07000E03800E03C0FFC7F8FFC7F8FFC7F8151C7F9B18>I<7FE000FFE0007FE0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0131C
+7E9B18>I<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C
+1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FF
+BFBF807F1F1F001914819318>I<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E
+00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC17148093
+18>I<01F0000FFE001FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0
+F001E07001C07803C03C07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF807FFF
+C00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F00700F80
+E00FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E00000E00007FC000FFE0
+007FC000151E809318>I<01E38007FB801FFF803E1F80380F80700780700780E00380E00380E0
+0380E00380E00380E00380700780700780380F803C1F801FFF800FFB8003E38000038000038000
+0380000380000380000380000380003FF8003FF8003FF8151E7E9318>I<7F87E0FF9FF07FBFF8
+03F87803F03003E00003C00003C000038000038000038000038000038000038000038000038000
+0380007FFE00FFFF007FFE0015147F9318>I<07F7003FFF007FFF00780F00E00700E00700E007
+007C00007FE0001FFC0003FE00001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F0
+0011147D9318>I<0180000380000380000380000380007FFFC0FFFFC0FFFFC003800003800003
+80000380000380000380000380000380000380000380400380E00380E00380E001C1C001FFC000
+FF80003E0013197F9818>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC1714809318>
+I<7F8FF0FF8FF87F8FF01E03C00E03800E03800E0380070700070700070700038E00038E00038E
+00038E0001DC0001DC0001DC0000F80000F80000700015147F9318>I<FF8FF8FF8FF8FF8FF838
+00E03800E03800E01C01C01C01C01C71C01CF9C01CF9C01CD9C01CD9C00DDD800DDD800DDD800D
+8D800F8F800F8F8007070015147F9318>I<7F8FF07F9FF07F8FF0070700078E00039E0001DC00
+01F80000F80000700000F00000F80001DC00039E00038E000707000F07807F8FF0FF8FF87F8FF0
+15147F9318>I<7F8FF0FF8FF87F8FF00E01C00E03800E03800703800707000707000387000386
+00038E0001CE0001CE0000CC0000CC0000DC0000780000780000780000700000700000700000F0
+0000E00079E0007BC0007F80003F00001E0000151E7F9318>I<3FFFF07FFFF07FFFF07001E070
+03C0700780000F00001E00003C0000F80001F00003C0000780000F00701E00703C0070780070FF
+FFF0FFFFF0FFFFF014147F9318>I<0007E0001FE0007FE000780000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00001E0007FC000FF8000FF80007FC00001E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000007800007FE0
+001FE00007E013247E9F18>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0600424769F18>I<7C0000FF0000FFC00003C00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00000E00000F000007FC0003FE0003FE0007FC000
+F00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00003C000FF
+C000FF00007C000013247E9F18>I E /Fl 44 123 df<00FC000182000703000607000E02000E
+00000E00000E00000E00000E0000FFFF000E07000E07000E07000E07000E07000E07000E07000E
+07000E07000E07000E07000E07000E07000E07007F0FE0131A809915>12
+D<60C0F1E0F9F068D0081008100810102010202040C1800C0B7F9913>34
+D<60F0F07010101020204080040B7D830B>44 D<60F0F06004047D830B>46
+D<03000700FF000700070007000700070007000700070007000700070007000700070007000700
+0700070007000700FFF00C187D9713>49 D<0F80106020304038803CC01CE01C401C003C003800
+380070006000C001800100020004040804100430083FF87FF8FFF80E187E9713>I<000C000000
+0C0000000C0000001E0000001E0000003F00000027000000270000004380000043800000438000
+0081C0000081C0000081C0000100E0000100E00001FFE000020070000200700006007800040038
+000400380008001C0008001C001C001E00FF00FFC01A1A7F991D>65 D<003F0201C0C603002E0E
+001E1C000E1C0006380006780002700002700002F00000F00000F00000F00000F00000F0000070
+00027000027800023800041C00041C00080E000803003001C0C0003F00171A7E991C>67
+D<FFFFF00E00700E00300E00100E00180E00080E00080E00080E04000E04000E04000E0C000FFC
+000E0C000E04000E04000E04000E00040E00040E00080E00080E00080E00180E00380E0070FFFF
+F0161A7E991A>69 D<FFFFE00E00E00E00600E00200E00300E00100E00100E00100E04000E0400
+0E04000E0C000FFC000E0C000E04000E04000E04000E00000E00000E00000E00000E00000E0000
+0E00000E0000FFF000141A7E9919>I<FFE7FF0E00700E00700E00700E00700E00700E00700E00
+700E00700E00700E00700E00700FFFF00E00700E00700E00700E00700E00700E00700E00700E00
+700E00700E00700E00700E0070FFE7FF181A7E991D>72 D<FFF0000E00000E00000E00000E0000
+0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0020
+0E00200E00200E00600E00400E00400E00C00E03C0FFFFC0131A7E9918>76
+D<FF0003FC0F0003C00F0003C00B8005C00B8005C00B8005C009C009C009C009C009C009C008E0
+11C008E011C008E011C0087021C0087021C0083841C0083841C0083841C0081C81C0081C81C008
+1C81C0080F01C0080F01C0080F01C0080601C01C0601C0FF861FFC1E1A7E9923>I<FE01FF0F00
+380F00100B80100B801009C01008E01008E010087010087010083810081C10081C10080E10080E
+100807100803900803900801D00801D00800F00800700800700800301C0030FF8010181A7E991D
+>I<FFFF000E03C00E00E00E00700E00700E00780E00780E00780E00780E00700E00700E00E00E
+03C00FFF000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000FF
+E000151A7E991A>80 D<7FFFFF00701C0700401C0100401C0100C01C0180801C0080801C008080
+1C0080001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000
+001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000003FFE000191A7F
+991C>84 D<FF801FC01E000F001C0006000E0004000E0004000700080007000800070008000380
+10000380100003C0300001C0200001C0200000E0400000E0400000E04000007080000070800000
+3900000039000000390000001E0000001E0000001E0000000C0000000C00001A1A7F991D>86
+D<FF801FE01E0007000E0006000F000400070008000780080003C0100001C0300001E0200000F0
+4000007040000078800000388000001D0000001F0000000E0000000E0000000E0000000E000000
+0E0000000E0000000E0000000E0000000E0000000E000000FFE0001B1A7F991D>89
+D<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07
+257D9B0B>91 D<1830204040804080810081008100B160F9F078F030600C0B7B9913>I<FEFE06
+0606060606060606060606060606060606060606060606060606060606060606FEFE0725809B0B
+>I<3F8070C070E020700070007007F01C7030707070E070E071E071E0F171FB1E3C10107E8F13>
+97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001CF8001F0E00
+1E07001C03801C01801C01C01C01C01C01C01C01C01C01C01C01C01C03801C03001E07001B0C00
+10F000121A7F9915>I<07F80C1C381C30087000E000E000E000E000E000E0007000300438080C
+1807E00E107F8F11>I<007E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+0003CE000C3E00380E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00600E00700E
+00381E001C2E0007CFC0121A7F9915>I<07C01C3030187018600CE00CFFFCE000E000E000E000
+6000300438080C1807E00E107F8F11>I<01F0031807380E100E000E000E000E000E000E00FFC0
+0E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00D1A80990C>I<0FCE
+187330307038703870387038303018602FC02000600070003FF03FFC1FFE600FC003C003C003C0
+036006381C07E010187F8F13>I<FC00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001CF8001D0C001E0E001E0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C
+0E001C0E001C0E001C0E00FF9FC0121A7F9915>I<18003C003C00180000000000000000000000
+0000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091A80990A
+>I<FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C00FF80091A80990A>108 D<FC7C1F001D8E63801E0781C01E0781
+C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C07
+01C01C0701C0FF9FE7F81D107F8F20>I<FCF8001D0C001E0E001E0E001C0E001C0E001C0E001C
+0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00FF9FC012107F8F15>I<07E01C38300C
+700E6006E007E007E007E007E007E0076006700E381C1C3807E010107F8F13>I<FCF8001F0E00
+1E07001C03801C03801C01C01C01C01C01C01C01C01C01C01C01C01C03801C03001E07001F0C00
+1CF0001C00001C00001C00001C00001C00001C0000FF800012177F8F15>I<FCE01D701E701E20
+1C001C001C001C001C001C001C001C001C001C001C00FFC00C107F8F0F>114
+D<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F800C107F8F0F>
+I<0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C001C001C201C201C20
+1C201C200E4003800B177F960F>I<FC7E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00
+1C0E001C0E001C0E001C0E001C0E001C1E000C2E0007CFC012107F8F15>I<FF1F803C06001C04
+001C04001E0C000E08000E080007100007100007900003A00003A00001C00001C00001C0000080
+0011107F8F14>I<FF3F9F803C0E0700380E06001C1604001C1704001E170C000E2308000E2388
+000F239800074190000741D00003C1E0000380E0000380E0000180C0000100400019107F8F1C>
+I<FF3F803C1C001C18000E100007200007600003C00001C00001E00003E0000270000438000838
+00181C00381E00FC3FC012107F8F14>I<FF1F803C06001C04001C04001E0C000E08000E080007
+100007100007900003A00003A00001C00001C00001C000008000008000010000010000E10000E2
+0000E4000078000011177F8F14>I<7FF86070407040E041C041C00380070007000E081C081C08
+381070107030FFF00D107F8F11>I E /Fm 24 115 df<00C00000C00000C00000C00000C00000
+C00000C00000C00000C000FFFF80FFFF8000C00000C00000C00000C00000C00000C00000C00000
+C00000C00011147E8F17>43 D<0C003C00CC000C000C000C000C000C000C000C000C000C000C00
+0C000C00FF8009107E8F0F>49 D<1F00618040C08060C0600060006000C00180030006000C0010
+2020207FC0FFC00B107F8F0F>I<0780184030C060C06000C000CF00F080E040C060C060C06040
+6060C030801F000B107F8F0F>54 D<00C00000C00000C000016000016000023000023000023000
+041800041800080C000FFC00080C00100600100600300700FC1FC012117F9016>65
+D<03F10C0B1807300360014001C000C000C000C000C00040016001300218020C0C03F010117E90
+16>67 D<FFF800180C001803001801001801801800801800C01800C01800C01800C01800C01800
+C0180180180100180300180E00FFF80012117F9017>I<FFFC180C1804180618021842184018C0
+1FC018C018411841180118021802180EFFFE10117F9014>I<FFFE180618021803180118211820
+18601FE01860182018201800180018001800FF0010117F9014>I<03F1000C0B00180700300300
+600100400100C00000C00000C00000C03FC0C003004003006003003003001803000C070003F900
+12117E9017>I<FF3FC01806001806001806001806001806001806001806001FFE001806001806
+00180600180600180600180600180600FF3FC012117F9016>I<FF181818181818181818181818
+181818FF08117F900B>I<FF001800180018001800180018001800180018001802180218021806
+1804181CFFFC0F117F9013>76 D<F81FC01C07001C020016020013020013020011820010C20010
+C200106200103200101200101A00100E00100600380600FE020012117F9016>78
+D<03E0000C1800100400200200600300400100C00180C00180C00180C00180C001806003006003
+003006003006000C180003E00011117E9017>I<FFF0181C18041806180618061804181C1FF018
+00180018001800180018001800FF000F117F9014>I<03E0000C18001004003006006003004001
+00C00180C00180C00180C00180C0018040010060030021C2003226000E380003F0800030800030
+80001980001F00000E0011167E9017>I<FFE000181800180C00180600180600180600180C0018
+18001FE000181800180C00180C00180C00180C00180C20180420FF03C013117F9016>I<1F2060
+E0006080208020800060003E001F8000C00060002080208020C040E0C09F000B117E9011>I<7F
+FF8060C18040C080C0C0C080C04080C04000C00000C00000C00000C00000C00000C00000C00000
+C00000C00000C0000FFC0012117F9016>I<FF1FC0180700180200180200180200180200180200
+1802001802001802001802001802001802000802000C040006080001F00012117F9016>I<FC07
+C03003001802001C06000C040006080007100003100001A00000C00000C00000C00000C00000C0
+0000C00000C00007F80012117F9016>89 D<1F00318060C0C060C060C060C060C06060C031801F
+000B0B7F8A0F>111 D<F700398030003000300030003000300030003000FC00090B7F8A0C>114
+D E /Fn 12 57 df<0102040C1818303070606060E0E0E0E0E0E0E0E0E0E06060607030301818
+0C04020108227D980E>40 D<8040203018180C0C0E060606070707070707070707070606060E0C
+0C18183020408008227E980E>I<00300000300000300000300000300000300000300000300000
+3000003000003000FFFFFCFFFFFC00300000300000300000300000300000300000300000300000
+300000300000300016187E931B>43 D<07C018303018701C600C600CE00EE00EE00EE00EE00EE0
+0EE00EE00EE00E600C600C701C30181C7007C00F157F9412>48 D<03000700FF00070007000700
+070007000700070007000700070007000700070007000700070007007FF00C157E9412>I<0F80
+30E040708030C038E0384038003800700070006000C00180030006000C08080810183FF07FF0FF
+F00D157E9412>I<0FE030306018701C701C001C00180038006007E000300018000C000E000EE0
+0EE00EC00C401830300FE00F157F9412>I<00300030007000F001F00170027004700870187010
+7020704070C070FFFE0070007000700070007003FE0F157F9412>I<20303FE03FC02400200020
+00200020002F8030E020700030003800384038E038E0388030406020C01F000D157E9412>I<01
+F00608080C181C301C70006000E000E3E0EC30F018F00CE00EE00EE00E600E600E300C30181830
+07C00F157F9412>I<40007FFE7FFC7FF8C0088010802000400080008001000100030002000600
+06000E000E000E000E000E0004000F167E9512>I<07E018302018600C600C700C78183E101F60
+0FC00FF018F8607C601EC00EC006C006C004600C38300FE00F157F9412>I
+E /Fo 32 123 df<00003F03E00000C386700001878CF00003879CF00003031860000700380000
+070038000007003800000E003800000E007000000E007000000E00700000FFFFFF80001C007000
+001C00E000001C00E000001C00E000001C00E000003800E000003801C000003801C000003801C0
+00003801C000007001C0000070038000007003800000700380000070038000006003800000E007
+000000E007000000E007000000E007000000C006000001C00E000001C00E000031860C0000798F
+180000F31E100000620C6000003C07C000002429829F1C>11 D<00003FE00000E0100001803800
+0380780003007800070030000700000007000000070000000E0000000E0000000E000000FFFFE0
+000E00E0001C01C0001C01C0001C01C0001C01C0001C0380003803800038038000380380003807
+0000380700007007000070071000700E2000700E2000700E2000E00E2000E0064000E0038000E0
+000000C0000001C0000001C000003180000079800000F3000000620000003C0000001D29829F1A
+>I<00003FCE0000E0EE000181FC000381FC000300DC0007001C0007003800070038000E003800
+0E0038000E0070000E007000FFFFF0001E0070001C00E0001C00E0001C00E0001C00E0001C01C0
+003801C0003801C0003801C0003803800038038000700380007003880070071000700710007007
+1000E0071000E0032000E001C000E0000000C0000001C0000001C000003180000079800000F300
+0000620000003C0000001F29829F1B>I<1C3C3C3C3C040408081020204080060E7D840E>44
+D<7FF0FFE07FE00C037D8A10>I<70F8F8F0E005057B840E>I<0FFFFFF01E0780E0180780201007
+802020078020200F0020600F0020400F0020400F0020801E0040001E0000001E0000001E000000
+3C0000003C0000003C0000003C00000078000000780000007800000078000000F0000000F00000
+00F0000000F0000001E0000001E0000001E0000001E0000003E00000FFFF00001C1F789E21>84
+D<00F1800389C00707800E03801C03803C0380380700780700780700780700F00E00F00E00F00E
+00F00E20F01C40F01C40703C40705C40308C800F070013147C9317>97 D<07803F800700070007
+0007000E000E000E000E001C001C001CF01D0C3A0E3C0E380F380F700F700F700F700FE01EE01E
+E01EE01CE03CE038607060E031C01F0010207B9F15>I<007E0001C1000300800E07801E07801C
+07003C0200780000780000780000F00000F00000F00000F00000F0000070010070020030040018
+380007C00011147C9315>I<0000780003F80000700000700000700000700000E00000E00000E0
+0000E00001C00001C000F1C00389C00707800E03801C03803C0380380700780700780700780700
+F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F070015207C9F17>I<007C
+01C207010E011C013C013802780C7BF07C00F000F000F000F0007000700170023804183807C010
+147C9315>I<00007800019C00033C00033C000718000700000700000E00000E00000E00000E00
+000E0001FFE0001C00001C00001C00001C00003800003800003800003800003800007000007000
+00700000700000700000700000E00000E00000E00000E00000C00001C00001C000018000318000
+7B0000F300006600003C00001629829F0E>I<003C6000E27001C1E00380E00700E00F00E00E01
+C01E01C01E01C01E01C03C03803C03803C03803C03803C07003C07001C0F001C17000C2E0003CE
+00000E00000E00001C00001C00301C00783800F0700060E0003F8000141D7E9315>I<01E0000F
+E00001C00001C00001C00001C000038000038000038000038000070000070000071E000763000E
+81800F01C00E01C00E01C01C03801C03801C03801C0380380700380700380700380E10700E2070
+0C20701C20700C40E00CC060070014207D9F17>I<00C001E001E001C000000000000000000000
+000000000E003300230043804300470087000E000E000E001C001C001C00384038803080708031
+0033001C000B1F7C9E0E>I<01E0000FE00001C00001C00001C00001C000038000038000038000
+0380000700000700000703C00704200E08E00E11E00E21E00E40C01C80001D00001E00001FC000
+38E000387000387000383840707080707080707080703100E03100601E0013207D9F15>107
+D<03C01FC0038003800380038007000700070007000E000E000E000E001C001C001C001C003800
+3800380038007000700070007100E200E200E200E200640038000A207C9F0C>I<1C0F80F00026
+30C318004740640C004780680E004700700E004700700E008E00E01C000E00E01C000E00E01C00
+0E00E01C001C01C038001C01C038001C01C038001C01C0708038038071003803806100380380E1
+0038038062007007006600300300380021147C9325>I<1C0F802630C047406047806047007047
+00708E00E00E00E00E00E00E00E01C01C01C01C01C01C01C038438038838030838070838031070
+03303001C016147C931A>I<007C0001C3000301800E01C01E01C01C01E03C01E07801E07801E0
+7801E0F003C0F003C0F003C0F00780F00700700F00700E0030180018700007C00013147C9317>
+I<01C1E002621804741C04781C04701E04701E08E01E00E01E00E01E00E01E01C03C01C03C01C0
+3C01C0380380780380700380E003C1C0072380071E000700000700000E00000E00000E00000E00
+001C00001C0000FFC000171D809317>I<00F0400388C00705800E03801C03803C038038070078
+0700780700780700F00E00F00E00F00E00F00E00F01C00F01C00703C00705C0030B8000F380000
+380000380000700000700000700000700000E00000E0000FFE00121D7C9315>I<1C1E00266100
+4783804787804707804703008E00000E00000E00000E00001C00001C00001C00001C0000380000
+38000038000038000070000030000011147C9313>I<00FC030206010C030C070C060C000F800F
+F007F803FC003E000E700EF00CF00CE008401020601F8010147D9313>I<018001C00380038003
+80038007000700FFF007000E000E000E000E001C001C001C001C00380038003800382070407040
+7080708031001E000C1C7C9B0F>I<0E00C03300E02301C04381C04301C04701C08703800E0380
+0E03800E03801C07001C07001C07001C07101C0E20180E20180E201C1E200C264007C38014147C
+9318>I<0E03803307802307C04383C04301C04700C08700800E00800E00800E00801C01001C01
+001C01001C02001C02001C04001C04001C08000E300003C00012147C9315>I<0E00C1C03300E3
+C02301C3E04381C1E04301C0E04701C060870380400E0380400E0380400E0380401C0700801C07
+00801C0700801C0701001C0701001C0602001C0F02000C0F04000E13080003E1F0001B147C931E
+>I<0383800CC4401068E01071E02071E02070C040E00000E00000E00000E00001C00001C00001
+C00001C040638080F38080F38100E5810084C60078780013147D9315>I<0E00C03300E02301C0
+4381C04301C04701C08703800E03800E03800E03801C07001C07001C07001C07001C0E00180E00
+180E001C1E000C3C0007DC00001C00001C00003800F03800F07000E06000C0C0004380003E0000
+131D7C9316>I<01C04003E08007F1800C1F000802000004000008000010000020000040000080
+000100000200000401000802001002003E0C0063FC0041F80080E00012147D9313>I
+E /Fp 57 123 df<000FF000007FFC0001F80E0003E01F0007C03F000F803F000F803F000F801E
+000F800C000F8000000F8000000F8000000F800000FFFFFF00FFFFFF000F801F000F801F000F80
+1F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F
+801F000F801F000F801F000F801F000F801F000F801F007FF0FFE07FF0FFE01B237FA21F>12
+D<FFFCFFFCFFFCFFFC0E047F8C13>45 D<387CFEFEFE7C3807077C8610>I<00FE0007FFC00F83
+E01F01F03E00F83E00F87C007C7C007C7C007CFC007CFC007EFC007EFC007EFC007EFC007EFC00
+7EFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C7C007C3E00F83E00F81F01
+F00F83E007FFC000FE0017207E9F1C>48 D<00180000780001F800FFF800FFF80001F80001F800
+01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F800
+01F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE013207C
+9F1C>I<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003
+F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C0180380180700
+180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007FFC00F07E01E
+03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE0001FF0000
+07C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E
+07F00FFFC001FE0017207E9F1C>I<0000E00001E00003E00003E00007E0000FE0001FE0001FE0
+0037E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E07007E0E007E0
+FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE17207E9F1C>
+I<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC00018000018000018000018000019FC
+001FFF001E0FC01807E01803E00003F00003F00003F80003F83803F87C03F8FE03F8FE03F8FC03
+F0FC03F07007E03007C01C1F800FFF0003F80015207D9F1C>I<001F8000FFE003F07007C0F00F
+01F81F01F83E01F83E01F87E00F07C00007C0000FC0800FC7FC0FCFFE0FD80F0FF00F8FE007CFE
+007CFC007EFC007EFC007EFC007E7C007E7C007E7C007E3C007C3E007C1E00F80F00F00783E003
+FFC000FF0017207E9F1C>I<00FE0003FFC00703E00E00F01C00F01C00783C00783E00783F0078
+3F80783FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E7FF83C1FFC7807FC7801FEF000FE
+F0003EF0001EF0001EF0001CF8001C7800383C00381F01F00FFFC001FF0017207E9F1C>56
+D<01FE0007FF800F83E01E01F03E00F07C00F87C0078FC007CFC007CFC007CFC007EFC007EFC00
+7EFC007E7C00FE7C00FE3E01FE1E037E0FFE7E07FC7E00207E00007C00007C1E007C3F00F83F00
+F83F00F03F01E01E03C01C0F800FFE0003F80017207E9F1C>I<387CFEFEFE7C38000000000000
+0000387CFEFEFE7C3807167C9510>I<000070000000007000000000F800000000F800000000F8
+00000001FC00000001FC00000003FE00000003FE00000003FE00000006FF000000067F0000000E
+7F8000000C3F8000000C3F800000183FC00000181FC00000381FE00000300FE00000300FE00000
+600FF000006007F00000E007F80000FFFFF80000FFFFF800018001FC00018001FC00038001FE00
+030000FE00030000FE000600007F000600007F00FFE00FFFF8FFE00FFFF825227EA12A>65
+D<FFFFFF8000FFFFFFE00007F001F80007F000FC0007F0007E0007F0007E0007F0007F0007F000
+7F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FE0007F000FC0007F003F80007FF
+FFF00007FFFFF00007F001FC0007F0007E0007F0003F0007F0003F8007F0001F8007F0001FC007
+F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0003F8007F0003F8007F0007F00
+07F001FE00FFFFFFF800FFFFFFC00022227EA128>I<0003FE0080001FFF818000FF01E38001F8
+003F8003E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E
+000001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
+FE00000000FE000000007E000000007E000001807F000001803F000001803F000003801F800003
+000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC0000003FE000021227D
+A128>I<FFFFFF8000FFFFFFF00007F003FC0007F0007E0007F0003F0007F0001F8007F0000FC0
+07F00007E007F00007E007F00007F007F00003F007F00003F007F00003F007F00003F807F00003
+F807F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F000
+03F007F00003F007F00003F007F00007E007F00007E007F0000FC007F0001F8007F0003F0007F0
+007E0007F003FC00FFFFFFF000FFFFFF800025227EA12B>I<FFFFFFFCFFFFFFFC07F000FC07F0
+003C07F0001C07F0000C07F0000E07F0000E07F0000607F0180607F0180607F0180607F0180007
+F0380007F0780007FFF80007FFF80007F0780007F0380007F0180007F0180007F0180307F01803
+07F0000307F0000607F0000607F0000607F0000E07F0000E07F0001E07F0003E07F001FCFFFFFF
+FCFFFFFFFC20227EA125>I<FFFFFFF8FFFFFFF807F001F807F0007807F0003807F0001807F000
+1C07F0001C07F0000C07F0000C07F0180C07F0180C07F0180007F0180007F0380007F0780007FF
+F80007FFF80007F0780007F0380007F0180007F0180007F0180007F0180007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F00000FFFFE000FFFFE0001E227EA123>I<00
+03FE0040001FFFC0C0007F00F1C001F8003FC003F0000FC007C00007C00FC00003C01F800003C0
+3F000001C03F000001C07F000000C07E000000C07E000000C0FE00000000FE00000000FE000000
+00FE00000000FE00000000FE00000000FE00000000FE000FFFFC7E000FFFFC7F00001FC07F0000
+1FC03F00001FC03F00001FC01F80001FC00FC0001FC007E0001FC003F0001FC001FC003FC0007F
+80E7C0001FFFC3C00003FF00C026227DA12C>I<FFFFE0FFFFE003F80003F80003F80003F80003
+F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
+F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800FF
+FFE0FFFFE013227FA115>73 D<FFFFE000FFFFE00007F0000007F0000007F0000007F0000007F0
+000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F0001807F0001807F0001807F0001807F00038
+07F0003807F0007007F0007007F000F007F001F007F007F0FFFFFFF0FFFFFFF01D227EA122>76
+D<FFF000000FFFFFF800001FFF07F800001FE006FC000037E006FC000037E006FC000037E0067E
+000067E0067E000067E0063F0000C7E0063F0000C7E0061F800187E0061F800187E0060FC00307
+E0060FC00307E0060FC00307E00607E00607E00607E00607E00603F00C07E00603F00C07E00601
+F81807E00601F81807E00601F81807E00600FC3007E00600FC3007E006007E6007E006007E6007
+E006003FC007E006003FC007E006001F8007E006001F8007E006001F8007E006000F0007E0FFF0
+0F00FFFFFFF00600FFFF30227EA135>I<FFF8001FFEFFFC001FFE07FC0000C007FE0000C006FF
+0000C0067F8000C0063FC000C0061FE000C0060FE000C0060FF000C00607F800C00603FC00C006
+01FE00C00600FE00C00600FF00C006007F80C006003FC0C006001FE0C006000FF0C0060007F0C0
+060007F8C0060003FCC0060001FEC0060000FFC00600007FC00600007FC00600003FC00600001F
+C00600000FC006000007C006000003C006000003C0FFF00001C0FFF00000C027227EA12C>I<00
+07FC0000003FFF800000FC07E00003F001F80007E000FC000FC0007E001F80003F001F80003F00
+3F00001F803F00001F807F00001FC07E00000FC07E00000FC0FE00000FE0FE00000FE0FE00000F
+E0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00000FC07F0000
+1FC07F00001FC03F00001F803F80003F801F80003F000FC0007E0007E000FC0003F001F80000FC
+07E000003FFF80000007FC000023227DA12A>I<FFFFFF00FFFFFFE007F007F007F001FC07F000
+FC07F0007E07F0007E07F0007F07F0007F07F0007F07F0007F07F0007F07F0007E07F0007E07F0
+00FC07F001FC07F007F007FFFFE007FFFF0007F0000007F0000007F0000007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFF8000FFFF8000
+20227EA126>I<FFFFFE0000FFFFFFC00007F007F00007F001F80007F000FC0007F0007E0007F0
+007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FC0007
+F001F80007F007F00007FFFFC00007FFFF800007F00FE00007F007F00007F003F80007F001FC00
+07F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC
+0607F000FE0607F000FF0CFFFF803FF8FFFF800FF027227EA12A>82 D<01FC0407FF8C1F03FC3C
+007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFFC03FFFF01F
+FFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE0001EE0001EF0
+003CFC003CFF00F8C7FFE080FF8018227DA11F>I<7FFFFFFF807FFFFFFF807E03F80F807803F8
+07807003F803806003F80180E003F801C0E003F801C0C003F800C0C003F800C0C003F800C0C003
+F800C00003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000003F800000003F8000003FFFFF80003FFFFF80022227EA1
+27>I<FFFF803FFCFFFF803FFC07F000018007F000018007F000018007F000018007F000018007
+F000018007F000018007F000018007F000018007F000018007F000018007F000018007F0000180
+07F000018007F000018007F000018007F000018007F000018007F000018007F000018007F00001
+8007F000018007F000018007F000018003F000030003F800030001F800060000FC000E00007E00
+1C00003F80F800000FFFE0000001FF000026227EA12B>I<FFFF800FFEFFFF800FFE07F00000C0
+07F80000C003F800018003F800018001FC00030001FC00030001FE00070000FE00060000FF0006
+00007F000C00007F800C00003F801800003F801800003FC03800001FC03000001FE03000000FE0
+6000000FF060000007F0C0000007F0C0000007F9C0000003F980000003FD80000001FF00000001
+FF00000000FE00000000FE00000000FE000000007C000000007C00000000380000000038000027
+227FA12A>I<FFFF800FFEFFFF800FFE07F80000C007F80001C003FC00018001FE00030001FE00
+070000FF00060000FF000C00007F801C00003FC01800003FC03000001FE07000000FF06000000F
+F0E0000007F8C0000003FD80000003FF80000001FF00000001FE00000000FE00000000FE000000
+00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
+0000FE00000000FE0000001FFFF000001FFFF00027227FA12A>89 D<07FC001FFF803F07C03F03
+E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01
+F0FC01F07E02F07E0CF81FF87F07E03F18167E951B>97 D<FF000000FF0000001F0000001F0000
+001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0F
+E0001F3FF8001FF07C001F801E001F001F001F000F801F000F801F000FC01F000FC01F000FC01F
+000FC01F000FC01F000FC01F000FC01F000FC01F000F801F001F801F801F001FC03E001EE07C00
+1C3FF800180FC0001A237EA21F>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000
+FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF80
+00FE0014167E9519>I<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000
+003E0000003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E00
+3E003E007E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E
+00FC003E007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC01A237EA21F>
+I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC00
+00FC00007C00007C00007E00003E00181F00300FC07003FFC000FF0015167E951A>I<003F8000
+FFC001E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FF
+FC000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
+80000F80000F80000F80000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F
+3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC00300000
+3000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C
+7C007C3F01F80FFFE001FF0018217E951C>I<FF000000FF0000001F0000001F0000001F000000
+1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F07E0001F1FF8
+001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F003E001F003E001F00
+3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FF
+E1FFC01A237EA21F>I<1C003E007F007F007F003E001C000000000000000000000000000000FF
+00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+FFE0FFE00B247EA310>I<0038007C00FE00FE00FE007C00380000000000000000000000000000
+03FE03FE003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E003E00
+3E003E003E003E003E003E783EFC3EFC3CFC7C78F87FE01F800F2E83A311>I<FF000000FF0000
+001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00
+00001F0000001F00FF801F00FF801F0038001F0060001F01C0001F0380001F0700001F0E00001F
+1C00001F7E00001FFF00001FCF00001F0F80001F07C0001F03E0001F01E0001F01F0001F00F800
+1F007C001F003C00FFE0FFC0FFE0FFC01A237EA21E>I<FF00FF001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+001F001F001F001F001F00FFE0FFE00B237EA210>I<FF07F007F000FF1FFC1FFC001F303E303E
+001F403E403E001F801F801F001F801F801F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0FFE0FFE0FFE0FFE02B16
+7E9530>I<FF07E000FF1FF8001F307C001F403C001F803E001F803E001F003E001F003E001F00
+3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F
+003E001F003E00FFE1FFC0FFE1FFC01A167E951F>I<00FE0007FFC00F83E01E00F03E00F87C00
+7C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01
+F00F83E007FFC000FE0017167E951C>I<FF0FE000FF3FF8001FF07C001F803E001F001F001F00
+1F801F001F801F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F
+001F801F001F801F803F001FC03E001FE0FC001F3FF8001F0FC0001F0000001F0000001F000000
+1F0000001F0000001F0000001F0000001F000000FFE00000FFE000001A207E951F>I<FE1F00FE
+3FC01E67E01EC7E01E87E01E87E01F83C01F00001F00001F00001F00001F00001F00001F00001F
+00001F00001F00001F00001F00001F0000FFF000FFF00013167E9517>114
+D<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF
+00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F00011167E9516>I<01800001
+80000180000180000380000380000780000780000F80003F8000FFFF00FFFF000F80000F80000F
+80000F80000F80000F80000F80000F80000F80000F80000F80000F81800F81800F81800F81800F
+81800F830007C30003FE0000F80011207F9F16>I<FF01FE00FF01FE001F003E001F003E001F00
+3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F
+003E001F003E001F003E001F007E001F00FE000F81BE0007FF3FC001FC3FC01A167E951F>I<FF
+E01FE0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E0180003E0180001F03000
+01F0300000F8600000F86000007CC000007CC000007FC000003F8000003F8000001F0000001F00
+00000E0000000E00001B167F951E>I<FFE7FF07F8FFE7FF07F81F007800C00F807801800F807C
+01800F807C018007C07E030007C0DE030007E0DE070003E0DF060003E18F060001F18F0C0001F3
+8F8C0001FB079C0000FB07D80000FE03D800007E03F000007E03F000007C01F000003C01E00000
+3800E000001800C00025167F9528>I<FFE07FC0FFE07FC00F801C0007C0380003E0700003F060
+0001F8C00000F98000007F8000003F0000001F0000001F8000003FC0000037C0000063E00000C1
+F00001C0F8000380FC0007007E000E003E00FF80FFE0FF80FFE01B167F951E>I<FFE01FE0FFE0
+1FE00F8006000F8006000FC00E0007C00C0007E01C0003E0180003E0180001F0300001F0300000
+F8600000F86000007CC000007CC000007FC000003F8000003F8000001F0000001F0000000E0000
+000E0000000C0000000C00000018000078180000FC380000FC300000FC60000069C000007F8000
+001F0000001B207F951E>I<7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00C03E00C07E00
+00FC0000F80001F00003F03007E03007C0300F80701F80703F00603E00E07C03E0FFFFE0FFFFE0
+14167E9519>I E /Fq 61 122 df<0001FF0000001FFFC000007F80F00000FC00F80001F801F8
+0003F803FC0007F003FC0007F003FC0007F003FC0007F001F80007F000F00007F000000007F000
+000007F000000007F0000000FFFFFFFC00FFFFFFFC00FFFFFFFC0007F001FC0007F001FC0007F0
+01FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007
+F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC00
+07F001FC0007F001FC0007F001FC007FFF1FFFC07FFF1FFFC07FFF1FFFC0222A7FA926>12
+D<1C007F007F00FF80FFC0FFC07FC07FC01CC000C000C00180018001800300030006000C001800
+300020000A157B8813>44 D<FFFF80FFFF80FFFF80FFFF80FFFF80FFFF8011067F9017>I<1C00
+3E007F00FF80FF80FF807F003E001C0009097B8813>I<003F800001FFF00007E0FC000FC07E00
+1F803F001F803F003F001F803F001F807F001FC07F001FC07F001FC07F001FC0FF001FE0FF001F
+E0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF00
+1FE0FF001FE0FF001FE0FF001FE07F001FC07F001FC07F001FC07F001FC03F001F803F001F801F
+803F001F803F000FC07E0007E0FC0001FFF000003F80001B277DA622>48
+D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFF
+FE17277BA622>I<00FF800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF003F
+C0FF003FE0FF001FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F800000
+7F000000FE000000FC000001F8000003F0000003E00000078000000F0000001E0000003C00E000
+7000E000E000E001C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80
+FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007FFFC000F81FE001F00FF003F80FF00
+3F807F803F807F803F807F801F807F800F007F800000FF000000FF000000FE000001FC000001F8
+000007F00000FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC00000
+3FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F
+01FE001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E0000003E0000007E0000
+00FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E0000707E00
+00E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E0038007E0070007E
+00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE000000FE000000FE000000
+FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D277EA622>I<0C0003000F803F000FFF
+FE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000FFE00000E0000000E0000000E0000000E
+0000000E0000000E0000000E7FC0000FFFF8000F80FC000E003E000C003F0000001F8000001FC0
+00001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001F
+C078003F8078003F803C007F001F01FE000FFFF80003FFF00000FF80001B277DA622>I<0007F0
+00003FFC0000FFFE0001FC0F0003F01F8007E03F800FC03F801FC03F801F803F803F801F003F80
+00007F0000007F0000007F000000FF000000FF0FC000FF3FF800FF707C00FFC03E00FFC03F00FF
+801F80FF801FC0FF001FC0FF001FE0FF001FE0FF001FE07F001FE07F001FE07F001FE07F001FE0
+3F001FE03F001FC01F801FC01F803F800FC03F0007E07E0003FFFC0000FFF000003FC0001B277D
+A622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF
+0070000E0070000E0070001C00E0003800E0007000E000E0000000E0000001C000000380000007
+800000078000000F0000000F0000001F0000001F0000003F0000003E0000003E0000007E000000
+7E0000007E0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
+00FE0000007C0000003800001C297CA822>I<003FC00001FFF00003FFFC0007C07E000F003F00
+1E001F001E000F803E000F803E000F803F000F803F000F803FC00F003FF01F001FFC1E001FFE3C
+000FFFF80007FFE00003FFF80001FFFC0001FFFE0007FFFF000F0FFF801E03FFC03C01FFC07C00
+7FE078001FE0F80007E0F80007E0F80003E0F80003E0F80003E0F80003C07C0003C07C0007803F
+000F001FC03E000FFFFC0003FFF800007FC0001B277DA622>I<007F800001FFF00007FFF8000F
+E0FC001F807E003F803F007F003F007F001F80FF001F80FF001FC0FF001FC0FF001FC0FF001FE0
+FF001FE0FF001FE0FF001FE07F001FE07F003FE03F003FE01F807FE00F807FE007C1DFE003FF9F
+E0007E1FE000001FE000001FC000001FC000001FC000003F801F003F803F803F003F803F003F80
+7E003F807C001F01F8001E03F0000FFFE00007FF800001FE00001B277DA622>I<1C003E007F00
+FF80FF80FF807F003E001C000000000000000000000000000000000000001C003E007F00FF80FF
+80FF807F003E001C00091B7B9A13>I<01FF000FFFE01E03F03801F87801FCFC01FEFE01FEFE01
+FEFE01FE7C01FE3801FC0003F80007F00007C0000F80001F00001E00003C000038000038000078
+000070000070000070000070000070000070000000000000000000000000000000000000000070
+0000F80001FC0003FE0003FE0003FE0001FC0000F800007000172A7CA920>63
+D<000003800000000007C00000000007C0000000000FE0000000000FE0000000000FE000000000
+1FF0000000001FF0000000003FF8000000003FF8000000003FF80000000073FC0000000073FC00
+000000F3FE00000000E1FE00000000E1FE00000001C0FF00000001C0FF00000003C0FF80000003
+807F80000007807FC0000007003FC0000007003FC000000E003FE000000E001FE000001E001FF0
+00001C000FF000001FFFFFF000003FFFFFF800003FFFFFF80000780007FC0000700003FC000070
+0003FC0000E00001FE0000E00001FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFF
+FEFFFE001FFFFEFFFE001FFFFE2F297EA834>65 D<FFFFFFF80000FFFFFFFF8000FFFFFFFFC000
+03F8001FF00003F8000FF80003F80007FC0003F80003FC0003F80003FC0003F80003FE0003F800
+01FE0003F80001FE0003F80001FE0003F80003FE0003F80003FC0003F80003FC0003F80007F800
+03F8000FF00003F8001FE00003F800FFC00003FFFFFE000003FFFFFFE00003F80007F00003F800
+03FC0003F80001FE0003F80001FE0003F80000FF0003F80000FF0003F80000FF8003F80000FF80
+03F80000FF8003F80000FF8003F80000FF8003F80000FF8003F80000FF0003F80001FF0003F800
+03FE0003F80007FC0003F8001FF800FFFFFFFFF000FFFFFFFFC000FFFFFFFE000029297DA831>
+I<00003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003FC
+00003F8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007803FC0000003
+807FC0000003807F80000003807F8000000000FF8000000000FF8000000000FF8000000000FF80
+00000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000007F80000000
+007F80000000007FC0000003803FC0000003803FC0000003801FE0000003801FE0000007000FF0
+0000070007F000000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC0
+000003FFFF000000003FF8000029297CA832>I<FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003
+FC001FF80003FC0007FC0003FC0001FE0003FC0000FF0003FC00007F8003FC00003FC003FC0000
+1FC003FC00001FE003FC00001FE003FC00000FF003FC00000FF003FC00000FF003FC00000FF003
+FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC0000
+0FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF003FC00000FF003FC00000FF003
+FC00001FE003FC00001FE003FC00001FC003FC00003FC003FC00007F8003FC00007F0003FC0001
+FE0003FC0003FC0003FC001FF800FFFFFFFFE000FFFFFFFF8000FFFFFFFC00002D297DA835>I<
+FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FC001FE003FC0007F003FC0001F003FC0001F003FC0000
+F003FC00007003FC00007003FC00007003FC01C07803FC01C03803FC01C03803FC01C03803FC03
+C00003FC03C00003FC0FC00003FFFFC00003FFFFC00003FFFFC00003FC0FC00003FC03C00003FC
+03C00003FC01C00E03FC01C00E03FC01C00E03FC01C01C03FC00001C03FC00001C03FC00001C03
+FC00003C03FC00003803FC00007803FC0000F803FC0001F803FC0003F803FC001FF8FFFFFFFFF0
+FFFFFFFFF0FFFFFFFFF027297DA82D>I<FFFFFFFFC0FFFFFFFFC0FFFFFFFFC003FC003FC003FC
+000FE003FC0003E003FC0001E003FC0001E003FC0000E003FC0000E003FC0000E003FC0000F003
+FC03807003FC03807003FC03807003FC03800003FC07800003FC07800003FC1F800003FFFF8000
+03FFFF800003FFFF800003FC1F800003FC07800003FC07800003FC03800003FC03800003FC0380
+0003FC03800003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC000000FFFFFC0000FFFFFC0000FFFFFC000024297DA82B>I<00007FE003
+000003FFFC0700001FFFFF0F00003FF00FFF0000FF8001FF0001FE0000FF0003F800003F0007F0
+00003F000FF000001F001FE000000F001FE000000F003FC000000F003FC0000007007FC0000007
+007F80000007007F8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80
+00000000FF8000000000FF8000000000FF8000000000FF8001FFFFF87F8001FFFFF87F8001FFFF
+F87FC00000FF003FC00000FF003FC00000FF001FE00000FF001FE00000FF000FF00000FF0007F0
+0000FF0003F80000FF0001FE0000FF0000FF8001FF00003FF007BF00001FFFFF1F000003FFFE0F
+0000007FF003002D297CA836>I<FFFFF01FFFFEFFFFF01FFFFEFFFFF01FFFFE03FC00007F8003
+FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC0000
+7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003
+FC00007F8003FFFFFFFF8003FFFFFFFF8003FFFFFFFF8003FC00007F8003FC00007F8003FC0000
+7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003
+FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC0000
+7F8003FC00007F80FFFFF01FFFFEFFFFF01FFFFEFFFFF01FFFFE2F297DA836>I<FFFFFCFFFFFC
+FFFFFC01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
+01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
+01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00FFFFFCFFFFFCFFFFFC
+16297EA81A>I<FFFFFC0000FFFFFC0000FFFFFC000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00000003FC00000003FC0001C003FC0001C003FC0001C003FC0001C003FC0003C003FC0003
+8003FC00038003FC00078003FC00078003FC000F8003FC000F8003FC001F8003FC007F8003FC01
+FF00FFFFFFFF00FFFFFFFF00FFFFFFFF0022297DA829>76 D<FFFE0000001FFFC0FFFE0000001F
+FFC0FFFF0000003FFFC003FF0000003FF00003FF0000003FF00003BF80000077F00003BF800000
+77F000039FC00000E7F000039FC00000E7F000038FE00001C7F000038FE00001C7F0000387F000
+0387F0000387F0000387F0000387F0000387F0000383F8000707F0000383F8000707F0000381FC
+000E07F0000381FC000E07F0000380FE001C07F0000380FE001C07F0000380FF003807F0000380
+7F003807F00003807F003807F00003803F807007F00003803F807007F00003801FC0E007F00003
+801FC0E007F00003800FE1C007F00003800FE1C007F00003800FE1C007F000038007F38007F000
+038007F38007F000038003FF0007F000038003FF0007F000038001FE0007F000038001FE0007F0
+00038000FC0007F000038000FC0007F000FFFE00FC01FFFFC0FFFE007801FFFFC0FFFE007801FF
+FFC03A297DA841>I<FFFC0000FFFEFFFE0000FFFEFFFF0000FFFE03FF8000038003FF80000380
+03BFC0000380039FE0000380039FF0000380038FF80003800387F80003800383FC0003800381FE
+0003800381FF0003800380FF80038003807FC0038003803FC0038003801FE0038003800FF00380
+03800FF80380038007FC0380038003FC0380038001FE0380038000FF0380038000FF8380038000
+7FC3800380003FE3800380001FE3800380000FF38003800007FB8003800007FF8003800003FF80
+03800001FF8003800000FF80038000007F80038000007F80038000003F80038000001F80038000
+000F80FFFE00000780FFFE00000380FFFE000003802F297DA836>I<0000FFE000000007FFFC00
+00003FC07F8000007F001FC00001FC0007F00003F80003F80007F00001FC000FF00001FE001FE0
+0000FF001FE00000FF003FC000007F803FC000007F807FC000007FC07F8000003FC07F8000003F
+C07F8000003FC0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF80
+00003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE07F8000003FC07FC000007F
+C07FC000007FC03FC000007F803FC000007F801FE00000FF001FE00000FF000FF00001FE0007F0
+0001FC0003F80003F80001FC0007F00000FF001FE000003FC07F8000000FFFFE00000000FFE000
+002B297CA834>I<FFFFFFF800FFFFFFFF00FFFFFFFFC003FC003FE003FC000FF003FC0007F803
+FC0007FC03FC0003FC03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE
+03FC0003FE03FC0003FC03FC0007FC03FC0007F803FC000FF003FC003FE003FFFFFF8003FFFFFE
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+000000FFFFF00000FFFFF00000FFFFF0000027297DA82F>I<FFFFFFE00000FFFFFFFE0000FFFF
+FFFF800003FC007FE00003FC000FF00003FC0007F80003FC0007FC0003FC0003FC0003FC0003FE
+0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FC0003FC
+0007F80003FC0007F80003FC001FE00003FC007FC00003FFFFFE000003FFFFF0000003FC00FC00
+0003FC007F000003FC003F800003FC003F800003FC001FC00003FC001FE00003FC001FE00003FC
+001FE00003FC001FE00003FC001FE00003FC001FF00003FC001FF00003FC001FF00003FC001FF0
+0703FC001FF80703FC000FF80703FC0007F80EFFFFF003FE1CFFFFF001FFF8FFFFF0003FF03029
+7DA834>82 D<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001E0FC
+0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC00
+1FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007F8000003
+F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003E0FF0007C0FFE0
+1F80F3FFFF00E0FFFE00C01FF0001D297CA826>I<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC0
+7F803FC03FC07E003FC007C078003FC003C078003FC003C070003FC001C0F0003FC001E0F0003F
+C001E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E000003FC00000
+00003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003F
+C0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC00000
+00003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003F
+C0000000003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>I<FFFFF001FF
+FCFFFFF001FFFCFFFFF001FFFC03FC0000070003FC0000070003FC0000070003FC0000070003FC
+0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
+0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC
+0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
+0003FC0000070003FC0000070003FC0000070003FC0000070001FC00000E0001FE00000E0000FE
+00001C00007E00001C00007F00003800003FC000F000000FF007E0000007FFFFC0000001FFFF00
+0000001FF800002E297DA835>I<FFFFF0003FFF80FFFFF0003FFF80FFFFF0003FFF8003FE0000
+01E00001FE000001C00001FF000003C00000FF000003800000FF0000038000007F800007000000
+7F8000070000007FC0000F0000003FC0000E0000003FE0001E0000001FE0001C0000001FF0001C
+0000000FF000380000000FF0003800000007F8007000000007F8007000000007FC00F000000003
+FC00E000000003FE01E000000001FE01C000000001FF01C000000000FF038000000000FF038000
+000000FF8780000000007F8700000000007FCF00000000003FCE00000000003FFE00000000001F
+FC00000000001FFC00000000000FF800000000000FF800000000000FF8000000000007F0000000
+000007F0000000000003E0000000000003E0000000000001C000000031297FA834>I<FFFFE07F
+FFF007FFF0FFFFE07FFFF007FFF0FFFFE07FFFF007FFF003FC0001FE00001C0003FC0001FE0000
+1C0001FE0001FF0000380001FE0000FF0000380001FF0000FF0000780000FF0000FF8000700000
+FF0000FF8000700000FF8000FF8000F000007F8001FFC000E000007F8001FFC000E000003FC003
+FFE001C000003FC0039FE001C000003FE0039FE003C000001FE0070FF0038000001FE0070FF003
+8000001FF00F0FF0078000000FF00E07F8070000000FF00E07F80700000007F81E07FC0E000000
+07F81C03FC0E00000007FC1C03FC1E00000003FC3801FE1C00000003FC3801FE1C00000001FE78
+01FF3800000001FE7000FF3800000001FE7000FF3800000000FFF000FFF000000000FFE0007FF0
+00000000FFE0007FF0000000007FC0003FE0000000007FC0003FE0000000003FC0003FC0000000
+003F80001FC0000000003F80001FC0000000001F80001F80000000001F00000F80000000001F00
+000F80000000000E00000700000044297FA847>I<7FFFF81FFFF07FFFF81FFFF07FFFF81FFFF0
+01FF0000780000FF8000F000007FC001E000007FC001C000003FE003C000001FF0078000000FF8
+0F0000000FF80E00000007FC1E00000003FE3C00000003FE7800000001FF7000000000FFF00000
+00007FE0000000007FC0000000003FE0000000001FF0000000001FF0000000001FF8000000001F
+FC000000003FFE000000007BFE00000000F1FF00000000E0FF80000001E0FFC0000003C07FC000
+0007803FE0000007001FF000000F001FF000001E000FF800003C0007FC0000380003FE00007800
+03FE0000F00001FF0000E00000FF80FFFF801FFFFEFFFF801FFFFEFFFF801FFFFE2F297EA834>
+I<FFFFF0003FFF80FFFFF0003FFF80FFFFF0003FFF8003FF000001E00001FF000003C00000FF80
+00038000007FC000078000007FE0000F0000003FE0000E0000001FF0001E0000001FF8003C0000
+000FF8003800000007FC007800000007FE00F000000003FE00E000000001FF01E000000001FF83
+C000000000FF8380000000007FC780000000007FEF00000000003FEE00000000001FFE00000000
+000FFC00000000000FF8000000000007F8000000000007F8000000000007F8000000000007F800
+0000000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000000
+07F8000000000007F8000000000007F8000000000007F8000000000007F80000000001FFFFE000
+000001FFFFE000000001FFFFE0000031297FA834>I<01FF800007FFF0000F81F8001FC07E001F
+C07E001FC03F000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F80
+0FE03F803F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF
+803F839FFC0FFF0FFC01FC03FC1E1B7E9A21>97 D<FFE0000000FFE0000000FFE00000000FE000
+00000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0
+0000000FE00000000FE00000000FE00000000FE1FE00000FE7FF80000FFE07E0000FF801F0000F
+F000F8000FE000FC000FE000FE000FE0007F000FE0007F000FE0007F000FE0007F800FE0007F80
+0FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE0007F000FE0007F
+000FE000FE000FE000FC000FF001F8000FF803F0000F9E07E0000F07FF80000E01FC0000212A7E
+A926>I<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000
+007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F00
+00007F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE0001A1B7E9A1F
+>I<00003FF80000003FF80000003FF800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
+1FE3F80000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F800
+7F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8
+00FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00F
+F80003F03BFF8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FFF80003F07E0007C01F
+000F801F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFF
+FFE0FF000000FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007
+E0038003F81F0000FFFE00001FF0001B1B7E9A20>I<0007F0003FFC00FE3E01F87F03F87F03F0
+7F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F0
+0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0
+0007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<00
+FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F00
+7F007F007F007F003F007E001F007C001F80FC000FC1F8001FFFE00018FF800038000000380000
+003C0000003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C00
+01F8F80000F8F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE0000
+7FF0001E287E9A22>I<FFE0000000FFE0000000FFE00000000FE00000000FE00000000FE00000
+000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000
+00000FE00000000FE07F00000FE1FFC0000FE787E0000FEE03F0000FF803F0000FF803F8000FF0
+03F8000FF003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F
+E003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800
+0FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80212A7DA926>I<07000F801FC03F
+E03FE03FE01FC00F8007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFF
+FE0F2B7DAA14>I<FFE00000FFE00000FFE000000FE000000FE000000FE000000FE000000FE000
+000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE01FFC0FE01FFC0FE0
+1FFC0FE007800FE00F000FE01E000FE03C000FE078000FE0E0000FE3C0000FE7C0000FEFE0000F
+FFE0000FFFF0000FF3F8000FE3F8000FC1FC000FC0FE000FC07F000FC07F000FC03F800FC01FC0
+0FC00FC00FC00FE0FFFC3FFEFFFC3FFEFFFC3FFE1F2A7EA924>107 D<FFE0FFE0FFE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2A7DA9
+14>I<FFC07F800FF000FFC1FFE03FFC00FFC383F0707E000FC603F8C07F000FCC01F9803F000F
+D801FF003F800FF001FE003F800FF001FE003F800FE001FC003F800FE001FC003F800FE001FC00
+3F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0
+01FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F
+800FE001FC003F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFFC3FFF8FFFE1FFFC3FFF8351B7D
+9A3A>I<FFC07F0000FFC1FFC000FFC787E0000FCE03F0000FD803F0000FD803F8000FF003F800
+0FF003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
+000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003
+F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80211B7D9A26>I<003FE00001FFFC0003F0
+7E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF
+0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE0
+1F800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FFE1FE0000FFE7FF8000FFFE
+07E0000FF803F0000FF001F8000FE000FC000FE000FE000FE000FF000FE0007F000FE0007F000F
+E0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F00
+0FE000FF000FE000FF000FE000FE000FE001FC000FF001F8000FF803F0000FFE0FE0000FE7FF80
+000FE1FC00000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000
+00000FE00000000FE0000000FFFE000000FFFE000000FFFE00000021277E9A26>I<FFC1F0FFC7
+FCFFCE3E0FD87F0FD87F0FF07F0FF03E0FF01C0FE0000FE0000FE0000FE0000FE0000FE0000FE0
+000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000FFFF00FFFF00FFFF00181B
+7E9A1C>114 D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE
+007FFF803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC00
+70FF01E0F7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000F00001
+F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007
+F00007F00007F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803
+F03803F87001F86000FFC0001F8015267FA51B>I<FFE03FF800FFE03FF800FFE03FF8000FE003
+F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
+03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F
+E003F8000FE003F8000FE007F80007E007F80007E00FF80003F03BFF8001FFF3FF80003FC3FF80
+211B7D9A26>I<FFFE03FF80FFFE03FF80FFFE03FF8007F000700007F000700007F800F00003F8
+00E00003FC01E00001FC01C00001FC01C00000FE03800000FE038000007F070000007F07000000
+7F8F0000003F8E0000003FDE0000001FDC0000001FDC0000000FF80000000FF80000000FF80000
+0007F000000007F000000003E000000003E000000001C00000211B7F9A24>I<FFFE7FFC0FFEFF
+FE7FFC0FFEFFFE7FFC0FFE0FE007E000E007F003F001C007F003F001C007F807F803C003F807F8
+038003F807F8038001FC0EFC070001FC0EFC070001FE1EFC0F0000FE1C7E0E0000FE1C7E0E0000
+FF383F1E00007F383F1C00007F783F3C00003FF01FB800003FF01FB800003FF01FF800001FE00F
+F000001FE00FF000000FC007E000000FC007E000000FC007E00000078003C00000078003C0002F
+1B7F9A32>I<FFFC0FFF00FFFC0FFF00FFFC0FFF0007F003C00003F807800001FC07800000FE0F
+000000FF1E0000007F3C0000003FF80000001FF00000000FF00000000FF000000007F000000007
+F80000000FFC0000001FFE0000001EFE0000003C7F000000783F800000F01FC00001E01FE00001
+C00FE00003C007F000FFF01FFF80FFF01FFF80FFF01FFF80211B7F9A24>I<FFFE03FF80FFFE03
+FF80FFFE03FF8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C00001FC
+01C00000FE03800000FE038000007F070000007F070000007F8F0000003F8E0000003FDE000000
+1FDC0000001FDC0000000FF80000000FF80000000FF800000007F000000007F000000003E00000
+0003E000000001C000000001C000000003800000000380000038078000007C07000000FE0F0000
+00FE0E000000FE1E000000FE3C0000007C780000003FE00000000FC000000021277F9A24>I
+E /Fr 17 121 df<00001E000000003E00000000FE00000003FE0000003FFE0000FFFFFE0000FF
+FFFE0000FFFFFE0000FFCFFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000
+000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00
+00000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE
+0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000F
+FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000000
+0FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00007FFFFFFFC0
+7FFFFFFFC07FFFFFFFC07FFFFFFFC0223879B731>49 D<0007FE0000007FFFE00001FFFFF80003
+FFFFFE0007F01FFF000F8007FF801F0001FFC03E0000FFE07F8000FFF07FC0007FF0FFE0007FF8
+FFF0003FF8FFF0003FFCFFF0003FFCFFF0003FFCFFF0003FFC7FE0003FFC3FC0003FFC1F80003F
+FC0000003FFC0000003FF80000007FF80000007FF00000007FF0000000FFE0000000FFC0000001
+FF80000001FF00000003FE00000007FC00000007F80000000FF00000001FC00000003F80000000
+7F00000000FC00000001F800000001F0003C0003E0003C0007C0003C000F000078001E00007800
+3C00007800780000F800F00000F801FFFFFFF803FFFFFFF007FFFFFFF00FFFFFFFF01FFFFFFFF0
+3FFFFFFFF07FFFFFFFF0FFFFFFFFF0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE026387BB731>I<0003
+FF8000001FFFF000007FFFFE0000FE03FF0001F000FF8003C000FFC00780007FE00FF0007FF00F
+F8007FF01FFC007FF81FFE007FF81FFE007FF81FFE007FF81FFE007FF81FFE007FF80FFC007FF0
+07F8007FF003F0007FF0000000FFE0000000FFC0000001FF80000001FF00000003FE00000007FC
+0000001FF000000FFFC000000FFF8000000FFFF800000003FE00000000FF800000007FE0000000
+3FF00000003FF80000003FFC0000001FFC0000001FFE0000001FFE0200001FFF1FC0001FFF3FE0
+001FFF7FF0001FFF7FF0001FFFFFF8001FFFFFF8001FFFFFF8001FFEFFF8001FFEFFF0001FFE7F
+F0003FFC7FE0003FFC3FC0003FF81F80007FF01FE000FFE007FC03FFC003FFFFFF0001FFFFFE00
+003FFFF0000007FF800028397CB731>I<00000007C0000000000FC0000000000FC0000000001F
+C0000000003FC0000000007FC000000000FFC000000000FFC000000001FFC000000003FFC00000
+0007FFC00000000FFFC00000000FFFC00000001EFFC00000003CFFC00000007CFFC0000000F8FF
+C0000000F0FFC0000001E0FFC0000003C0FFC0000007C0FFC000000F80FFC000000F00FFC00000
+1E00FFC000003C00FFC000007C00FFC00000F800FFC00000F000FFC00001E000FFC00003C000FF
+C00007C000FFC0000F8000FFC0000F0000FFC0001E0000FFC0003C0000FFC0007C0000FFC000F8
+0000FFC000FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0000001FFC000000001FF
+C000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC00000
+0001FFC000000001FFC0000007FFFFFFC00007FFFFFFC00007FFFFFFC00007FFFFFFC02A377DB6
+31>I<00000001F80000000000000001F80000000000000003FC0000000000000003FC00000000
+00000007FE0000000000000007FE0000000000000007FE000000000000000FFF00000000000000
+0FFF000000000000001FFF800000000000001FFF800000000000001FFF800000000000003FFFC0
+0000000000003FFFC00000000000007FFFE00000000000007DFFE00000000000007DFFE0000000
+000000FDFFF0000000000000F8FFF0000000000001F8FFF8000000000001F07FF8000000000001
+F07FF8000000000003F07FFC000000000003E03FFC000000000007E03FFE000000000007C01FFE
+00000000000FC01FFF00000000000F801FFF00000000000F800FFF00000000001F800FFF800000
+00001F0007FF80000000003F0007FFC0000000003E0003FFC0000000003E0003FFC0000000007E
+0003FFE0000000007C0001FFE000000000FC0001FFF000000000F80000FFF000000000F80000FF
+F000000001FFFFFFFFF800000001FFFFFFFFF800000003FFFFFFFFFC00000003FFFFFFFFFC0000
+0003E000003FFC00000007E000003FFE00000007C000001FFE0000000FC000001FFF0000000F80
+00000FFF0000001F8000000FFF8000001F0000000FFF8000001F00000007FF8000003F00000007
+FFC000003E00000003FFC000007E00000003FFE00000FF00000001FFE000FFFFFC0001FFFFFFF0
+FFFFFC0001FFFFFFF0FFFFFC0001FFFFFFF0FFFFFC0001FFFFFFF0443B7DBA4B>65
+D<FFFFFFFFFFC00000FFFFFFFFFFFC0000FFFFFFFFFFFF0000FFFFFFFFFFFFC000007FF00001FF
+F000007FF000007FF800007FF000003FFC00007FF000001FFE00007FF000001FFE00007FF00000
+0FFF00007FF000000FFF00007FF0000007FF80007FF0000007FF80007FF0000007FF80007FF000
+0007FF80007FF0000007FF80007FF0000007FF80007FF0000007FF80007FF0000007FF00007FF0
+00000FFF00007FF000000FFF00007FF000001FFE00007FF000001FFC00007FF000003FF800007F
+F000007FF000007FF00001FFE000007FF0000FFF8000007FFFFFFFFE0000007FFFFFFFFE000000
+7FFFFFFFFFC000007FF000007FF000007FF000001FFC00007FF000000FFE00007FF0000007FF00
+007FF0000007FF80007FF0000003FFC0007FF0000003FFC0007FF0000001FFE0007FF0000001FF
+E0007FF0000001FFF0007FF0000001FFF0007FF0000001FFF0007FF0000001FFF0007FF0000001
+FFF0007FF0000001FFF0007FF0000001FFF0007FF0000001FFF0007FF0000001FFE0007FF00000
+03FFE0007FF0000003FFC0007FF0000007FFC0007FF000000FFF80007FF000001FFF00007FF000
+003FFE00007FF00001FFFC00FFFFFFFFFFFFF800FFFFFFFFFFFFE000FFFFFFFFFFFF8000FFFFFF
+FFFFF800003C3B7CBA46>I<0000001FFF000030000001FFFFE000F000000FFFFFFC01F000007F
+FFFFFE03F00001FFFE007F87F00003FFE0000FCFF0000FFF000003FFF0001FFC000001FFF0003F
+F80000007FF0007FF00000003FF000FFC00000003FF001FFC00000001FF003FF800000000FF007
+FF000000000FF00FFF0000000007F00FFE0000000007F01FFE0000000003F01FFE0000000003F0
+3FFC0000000003F03FFC0000000001F03FFC0000000001F07FFC0000000001F07FF80000000001
+F07FF80000000000007FF8000000000000FFF8000000000000FFF8000000000000FFF800000000
+0000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000
+000000FFF8000000000000FFF8000000000000FFF80000000000007FF80000000000007FF80000
+000000007FF80000000000007FFC0000000000F03FFC0000000000F03FFC0000000000F03FFC00
+00000000F01FFE0000000000F01FFE0000000001E00FFE0000000001E00FFF0000000001E007FF
+0000000003C003FF8000000003C001FFC0000000078000FFE00000000F00007FF00000001F0000
+3FF80000003E00001FFC0000007C00000FFF000001F8000003FFE00007F0000001FFFE003FC000
+00007FFFFFFF000000000FFFFFFC0000000001FFFFF000000000001FFF0000003C3D7BBB47>I<
+001FFF00000001FFFFF0000003FFFFFC000007F007FE00000FF801FF00001FFC00FF80001FFC00
+7FC0001FFC007FE0001FFC003FE0000FF8003FF0000FF8003FF00007F0003FF00001C0003FF000
+0000003FF0000000003FF0000000003FF0000000FFFFF000000FFFFFF000007FF83FF00001FF80
+3FF00007FE003FF0000FF8003FF0001FF0003FF0003FE0003FF0007FE0003FF0007FE0003FF000
+FFC0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FFC0007FF0007FE0007FF0007FE000
+DFF0003FF0039FF8001FFC0F0FFFF007FFFE0FFFF001FFFC07FFF0003FE000FFF02C267DA530>
+97 D<000000003FC00000003FFFC00000003FFFC00000003FFFC00000003FFFC000000001FFC0
+00000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0000000
+00FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0
+00000000FFC000000000FFC000000000FFC00000FFC0FFC0000FFFF8FFC0003FFFFEFFC000FFE0
+3FFFC001FF000FFFC003FE0003FFC007FC0001FFC00FF80000FFC01FF00000FFC01FF00000FFC0
+3FF00000FFC03FE00000FFC07FE00000FFC07FE00000FFC07FE00000FFC0FFE00000FFC0FFE000
+00FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0
+FFE00000FFC07FE00000FFC07FE00000FFC07FE00000FFC03FF00000FFC03FF00000FFC01FF000
+00FFC00FF80001FFC007F80003FFC003FC0007FFC001FE000FFFE000FFC07EFFFF003FFFFCFFFF
+000FFFF0FFFF0001FF80FFFF303C7DBB37>100 D<0001FFC000000FFFF800003FFFFE0000FF80
+FF0001FE003F8007FC001FC00FF8000FE00FF8000FF01FF00007F03FF00007F83FF00007F87FE0
+0007F87FE00003FC7FE00003FC7FE00003FCFFE00003FCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFF
+E0000000FFE0000000FFE0000000FFE00000007FE00000007FE00000007FE00000003FE0000000
+3FF000003C1FF000003C1FF000003C0FF800007807FC0000F803FE0001F001FF0007E000FFC03F
+C0003FFFFF000007FFFC000000FFE00026267DA52D>I<00FF00000000FFFF00000000FFFF0000
+0000FFFF00000000FFFF0000000007FF0000000003FF0000000003FF0000000003FF0000000003
+FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000
+000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003
+FF007FC00003FF01FFF80003FF07FFFC0003FF0F03FE0003FF1C01FF0003FF3001FF8003FF6000
+FF8003FFE000FFC003FFC000FFC003FF8000FFC003FF8000FFC003FF8000FFC003FF0000FFC003
+FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000
+FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
+FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000
+FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF303C7CBB37>
+104 D<01F00007FC000FFE000FFE001FFF001FFF001FFF001FFF001FFF000FFE000FFE0007FC00
+01F00000000000000000000000000000000000000000000000000000000000000000FF00FFFF00
+FFFF00FFFF00FFFF0007FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
+03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
+03FF0003FF0003FF0003FF0003FF0003FF00FFFFF8FFFFF8FFFFF8FFFFF8153D7DBC1B>I<00FE
+007FC000FFFE01FFF800FFFE07FFFC00FFFE0F03FE00FFFE1C01FF0007FE3001FF8003FE6000FF
+8003FEE000FFC003FEC000FFC003FF8000FFC003FF8000FFC003FF8000FFC003FF0000FFC003FF
+0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF
+C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF
+0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF
+C003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF30267CA537>110
+D<00FF01FF8000FFFF0FFFF000FFFF3FFFFC00FFFFFE03FF00FFFFF000FF8003FFC0007FC003FF
+80003FE003FF00003FF003FF00001FF803FF00001FFC03FF00000FFC03FF00000FFE03FF00000F
+FE03FF000007FE03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF
+000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FE03FF000007FE03FF00000F
+FE03FF00000FFC03FF00000FFC03FF00001FF803FF00001FF803FF00003FF003FF80003FE003FF
+C0007FC003FFF001FF8003FFFC07FF0003FF3FFFFC0003FF0FFFF00003FF01FF000003FF000000
+0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF
+0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000FFFFFC0000
+00FFFFFC000000FFFFFC000000FFFFFC00000030377DA537>112 D<00FE03F000FFFE0FFE00FF
+FE1FFF00FFFE3C3F80FFFE707FC007FE60FFE003FEE0FFE003FEC0FFE003FFC0FFE003FF807FC0
+03FF807FC003FF803F8003FF800E0003FF00000003FF00000003FF00000003FF00000003FF0000
+0003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00
+000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF
+000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE000023267DA529>114
+D<0007800000078000000780000007800000078000000F8000000F8000000F8000000F8000001F
+8000001F8000003F8000003F8000007F800000FF800001FF800007FF80001FFFFFF0FFFFFFF0FF
+FFFFF0FFFFFFF001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF8000
+01FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF80
+0001FF800001FF803C01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C00FF
+807800FFC078007FC070003FE0E0001FFFC00007FF800001FF001E377EB626>116
+D<FFFFF007FFFCFFFFF007FFFCFFFFF007FFFCFFFFF007FFFC01FF8000FC0000FFC000F80000FF
+E001F000007FF003E000003FF007C000001FF80FC000000FFC1F8000000FFE1F00000007FF3E00
+000003FFFC00000001FFF800000000FFF0000000007FE0000000007FF0000000003FF800000000
+1FF8000000001FFC000000003FFE000000007FFF00000000FBFF80000001F9FF80000003F0FFC0
+000003E07FE0000007C07FF000000F803FF800001F001FFC00003E000FFC00007C0007FE0000FC
+0003FF0001FC0003FF80FFFF801FFFFEFFFF801FFFFEFFFF801FFFFEFFFF801FFFFE2F267EA534
+>120 D E /Fs 8 113 df<400004C0000C6000183000301800600C00C006018003030001860000
+CC0000780000300000300000780000CC000186000303000601800C00C0180060300030600018C0
+000C40000416187A9623>2 D<FFFFFFF07FFFFFF0000000000000000000000000000000000000
+00000000000000000000FFFFFFF0FFFFFFF0000000000000000000000000000000000000000000
+000000000000007FFFFFF0FFFFFFF01C147D9423>17 D<01000000000200000000020000000004
+00000000080000000010000000002000000000FFFFFFFFF8FFFFFFFFF820000000001000000000
+0800000000040000000002000000000200000000010000000025107C922D>32
+D<0000000400000000020000000002000000000100000000008000000000400000000020FFFFFF
+FFFCFFFFFFFFFC0000000020000000004000000000800000000100000000020000000002000000
+00040026107D922D>I<000F0038006000E001C001C001C001C001C001C001C001C001C001C001
+C001C001C001C001C0038007001E00F8001E000700038001C001C001C001C001C001C001C001C0
+01C001C001C001C001C001C001C000E000600038000F102D7DA117>102
+D<F8001E000700038001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0
+00E000600038000F0038006000E001C001C001C001C001C001C001C001C001C001C001C001C001
+C001C001C0038007001E00F800102D7DA117>I<C000C000C00060006000600030003000300018
+00180018000C000C000C0006000600060003000300030001800180018000C000C000C000600060
+0060003000300030001800180018000C000C000C000600060006000300030001102D7DA117>
+110 D<00000000080000000018000000003000000000300000000060000000006000000000C000
+000000C00000000180000000018000000003000000000300000000060000000006000000000C00
+0000000C00000000180000000018000000003000000000300000000060000000006000000000C0
+00060000C0001E000180002F000180004F000300008780030000078006000003C006000003C00C
+000003C00C000001E018000001E018000000F030000000F030000000786000000078600000003C
+C00000003CC00000001F800000001F800000000F000000000F0000000006000000000600000025
+2E7E8126>112 D E /Ft 1 98 df<001800001800001800003C00003C00004E00004E00004E00
+0087000087000187800103800103800201C00201C003FFC00400E00400E0080070080070180070
+3C0078FE01FF18177F961C>97 D E /Fu 52 122 df<387CFEFEFEFEFE7C7C7C7C7C7C7C383838
+3838383800000000387CFEFEFE7C3807207C9F10>33 D<FFF0FFF0FFF0FFF00C047F8B11>45
+D<387CFEFEFE7C3807077C860F>I<01FC0007FF001F07C01E03C03E03E07C01F07C01F07C01F0
+FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8FC01F8
+7C01F07C01F07C01F03E03E01E03C01F8FC007FF0001FC00151D7E9C1A>48
+D<00E00001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E00003E0
+0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
+0003E000FFFF80FFFF80111D7C9C1A>I<07F0001FFE00383F007C1F80FE0FC0FE0FC0FE0FE0FE
+07E07C07E03807E0000FE0000FC0000FC0001F80001F00003E0000780000F00000E00001C00003
+80600700600E00601C00E01FFFC03FFFC07FFFC0FFFFC0FFFFC0131D7D9C1A>I<01FC0007FF00
+0E0F801E0FC03F07E03F07E03F07E03F07E01E0FC0000FC0000F80001F0001FC0001FC00000F80
+0007C00003E00003F00003F83803F87C03F8FE03F8FE03F8FE03F0FC03F07807E03C0FC01FFF80
+03FC00151D7E9C1A>I<0001C00003C00007C00007C0000FC0001FC0003BC00073C00063C000C3
+C00183C00383C00703C00E03C00C03C01803C03803C07003C0E003C0FFFFFEFFFFFE0007C00007
+C00007C00007C00007C00007C000FFFE00FFFE171D7F9C1A>I<3803803FFF803FFF003FFE003F
+FC003FF0003F800030000030000030000030000033F80037FE003C1F00380F801007C00007C000
+07E00007E07807E0FC07E0FC07E0FC07E0FC07C0780FC0600F80381F001FFC0007F000131D7D9C
+1A>I<003F0001FFC007E0E00F81E01F03F01E03F03E03F07C03F07C01E07C0000FC1000FCFF00
+FDFFC0FD03E0FE01F0FE01F0FC01F8FC01F8FC01F8FC01F87C01F87C01F87C01F83C01F03E01F0
+1E03E00F07C007FF8001FE00151D7E9C1A>I<6000007FFFF87FFFF87FFFF07FFFE07FFFC0E001
+80C00300C00300C00600000C0000180000380000380000780000700000F00000F00001F00001F0
+0001F00001F00003F00003F00003F00003F00003F00003F00001E00000C000151E7D9D1A>I<01
+FC0007FF000F07801E03C01C01E03C01E03C01E03E01E03F01E03FC3C01FE3801FFF000FFE0007
+FF8007FFC01FFFE03C3FF0780FF07803F8F001F8F000F8F00078F00078F000707800707C00E03E
+03C00FFF8003FC00151D7E9C1A>I<387CFEFEFE7C38000000000000387CFEFEFE7C3807147C93
+0F>58 D<0000E000000000E000000001F000000001F000000001F000000003F800000003F80000
+0006FC00000006FC0000000EFE0000000C7E0000000C7E000000183F000000183F000000303F80
+0000301F800000701FC00000600FC00000600FC00000C007E00000FFFFE00001FFFFF000018003
+F000018003F000030001F800030001F800060001FC00060000FC000E0000FE00FFE00FFFE0FFE0
+0FFFE0231F7E9E28>65 D<FFFFFE00FFFFFFC007C007E007C003F007C001F807C001FC07C001FC
+07C001FC07C001FC07C001FC07C001F807C003F807C007F007C00FE007FFFF8007FFFFC007C003
+F007C001F807C001FC07C000FC07C000FE07C000FE07C000FE07C000FE07C000FE07C000FC07C0
+01FC07C003F807C007F0FFFFFFE0FFFFFF001F1F7E9E25>I<0007FC02003FFF0E00FE03DE03F0
+00FE07E0003E0FC0001E1F80001E3F00000E3F00000E7F0000067E0000067E000006FE000000FE
+000000FE000000FE000000FE000000FE000000FE0000007E0000007E0000067F0000063F000006
+3F00000C1F80000C0FC0001807E0003803F0007000FE01C0003FFF800007FC001F1F7D9E26>I<
+FFFFFE0000FFFFFFC00007E007F00007E001F80007E000FC0007E0007E0007E0003F0007E0003F
+0007E0001F8007E0001F8007E0001F8007E0001FC007E0001FC007E0001FC007E0001FC007E000
+1FC007E0001FC007E0001FC007E0001FC007E0001FC007E0001F8007E0001F8007E0001F8007E0
+003F0007E0003F0007E0007E0007E000FC0007E001F80007E007F000FFFFFFC000FFFFFE000022
+1F7E9E28>I<FFFFFFE0FFFFFFE007E007E007E001E007E000E007E0006007E0007007E0003007
+E0003007E0603007E0603007E0600007E0E00007E1E00007FFE00007FFE00007E1E00007E0E000
+07E0600007E0600C07E0600C07E0000C07E0001807E0001807E0001807E0003807E0007807E000
+F807E003F0FFFFFFF0FFFFFFF01E1F7E9E22>I<FFFFFFE0FFFFFFE007E007E007E001E007E000
+E007E0006007E0007007E0003007E0003007E0603007E0603007E0600007E0E00007E1E00007FF
+E00007FFE00007E1E00007E0E00007E0600007E0600007E0600007E0000007E0000007E0000007
+E0000007E0000007E0000007E0000007E00000FFFF8000FFFF80001C1F7E9E21>I<FFFF0FFFF0
+FFFF0FFFF007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E
+0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007FFFFFE0007FFFFFE0007E000
+7E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0007E0
+007E0007E0007E0007E0007E0007E0007E0007E0007E00FFFF0FFFF0FFFF0FFFF0241F7E9E29>
+72 D<FFFFFFFF07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0
+07E007E007E007E007E007E007E007E007E007E007E0FFFFFFFF101F7E9E14>I<FFFF8000FFFF
+800007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007
+E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000C007E000C0
+07E000C007E001C007E001C007E001C007E0038007E0038007E00F8007E01F80FFFFFF80FFFFFF
+801A1F7E9E1F>76 D<FFE000003FF8FFF000007FF807F000007F0006F80000DF0006F80000DF00
+06F80000DF00067C00019F00067C00019F00063E00031F00063E00031F00061F00061F00061F00
+061F00060F800C1F00060F800C1F000607C0181F000607C0181F000607C0181F000603E0301F00
+0603E0301F000601F0601F000601F0601F000600F8C01F000600F8C01F0006007D801F0006007D
+801F0006003F001F0006003F001F0006003F001F0006001E001F00FFF01E03FFF8FFF00C03FFF8
+2D1F7E9E32>I<FFE000FFF0FFF000FFF007F000060007F800060006FC000600067E000600063F
+000600063F800600061F800600060FC006000607E006000603F006000601F806000601FC060006
+00FC060006007E060006003F060006001F860006001FC60006000FE600060007E600060003F600
+060001FE00060000FE00060000FE000600007E000600003E000600001E000600000E00FFF00006
+00FFF0000600241F7E9E29>I<FFFFFE00FFFFFF8007E00FE007E003F007E001F807E001F807E0
+01FC07E001FC07E001FC07E001FC07E001FC07E001F807E001F807E003F007E00FE007FFFF8007
+FFFE0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000
+07E0000007E0000007E00000FFFF0000FFFF00001E1F7E9E24>80 D<03FC080FFF381E03F83800
+F8700078700038F00038F00018F00018F80000FC00007FC0007FFE003FFF801FFFE00FFFF007FF
+F000FFF80007F80000FC00007C00003CC0003CC0003CC0003CE00038E00078F80070FE01E0E7FF
+C081FF00161F7D9E1D>83 D<FFFF01FFE0FFFF01FFE007E0000C0007E0000C0007E0000C0007E0
+000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007
+E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C0007E0000C00
+07E0000C0007E0000C0007E0000C0003E000180001F000180001F000300000F8006000007E03C0
+00001FFF80000003FC0000231F7E9E28>85 D<FFFE003FF8FFFE003FF807E000038007E0000300
+07F000070003F000060003F8000E0001F8000C0001FC000C0000FC00180000FC001800007E0030
+00007E003000003F006000003F006000003F80E000001F80C000001FC1C000000FC18000000FE1
+80000007E300000007E300000003F600000003F600000003FE00000001FC00000001FC00000000
+F800000000F8000000007000000000700000251F7F9E28>I<07FC001FFF003F0F803F07C03F03
+E03F03E00C03E00003E0007FE007FBE01F03E03C03E07C03E0F803E0F803E0F803E0FC05E07E0D
+E03FF8FE0FE07E17147F9319>97 D<FF0000FF00001F00001F00001F00001F00001F00001F0000
+1F00001F00001F00001F00001F1FC01F7FF01FE0F81F807C1F007E1F003E1F003E1F003F1F003F
+1F003F1F003F1F003F1F003F1F003E1F003E1F007C1F807C1EC1F81C7FE0181F8018207E9F1D>
+I<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC0000FC00
+007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<0007F80007F80000F800
+00F80000F80000F80000F80000F80000F80000F80000F80000F801F8F80FFEF81F83F83E01F87E
+00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87C00F87E00F83E01F81F
+07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF800F83C01E01E03E00F07C00F07C00F8FC00F8
+FFFFF8FFFFF8FC0000FC0000FC00007C00007C00003E00181E00180F807007FFE000FF8015147F
+9318>I<001F8000FFC001F3E003E7E003C7E007C7E007C3C007C00007C00007C00007C00007C0
+00FFFC00FFFC0007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0
+0007C00007C00007C00007C00007C0003FFC003FFC0013207F9F10>I<01FC3C07FFFE0F079E1E
+03DE3E03E03E03E03E03E03E03E03E03E01E03C00F07800FFF0009FC001800001800001C00001F
+FF800FFFF007FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C78003C3F01F80FFFE001
+FF00171E7F931A>I<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F0000
+1F00001F00001F0FC01F3FE01F61F01FC0F81F80F81F00F81F00F81F00F81F00F81F00F81F00F8
+1F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18207D9F1D>I<1C003E007F
+007F007F003E001C00000000000000000000000000FF00FF001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F00FFE0FFE00B217EA00E>I<FF0000FF00001F00001F
+00001F00001F00001F00001F00001F00001F00001F00001F00001F01FE1F01FE1F00F01F00C01F
+03801F07001F0C001F18001F7C001FFC001F9E001F0F001E0F801E07C01E03C01E01E01E01F01E
+00F8FFC3FFFFC3FF18207E9F1C>107 D<FF00FF001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FF
+E0FFE00B207E9F0E>I<FE0FE03F80FE1FF07FC01E70F9C3E01E407D01F01E807E01F01F807E01
+F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C
+01F01F007C01F01F007C01F01F007C01F01F007C01F0FFE3FF8FFEFFE3FF8FFE27147D932C>I<
+FE0FC0FE3FE01E61F01EC0F81E80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
+1F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18147D931D>I<01FF0007FFC01F83F03E00
+F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F83E00
+F81F83F007FFC001FF0017147F931A>I<FF1FC0FF7FF01FE1F81F80FC1F007E1F007E1F003E1F
+003F1F003F1F003F1F003F1F003F1F003F1F003E1F007E1F007C1F80FC1FC1F81F7FE01F1F801F
+00001F00001F00001F00001F00001F00001F0000FFE000FFE000181D7E931D>I<01F81807FE38
+1F87783F01F83E01F87E00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87E00F8
+7E00F83F01F81F87F80FFEF803F8F80000F80000F80000F80000F80000F80000F80000F80007FF
+0007FF181D7E931C>I<FE3E00FE7F801ECFC01E8FC01E8FC01F8FC01F03001F00001F00001F00
+001F00001F00001F00001F00001F00001F00001F00001F0000FFF000FFF00012147E9316>I<0F
+E63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007C007E007F006F81EFFFCC7F0
+10147E9315>I<01800180018003800380038007800F803F80FFFCFFFC0F800F800F800F800F80
+0F800F800F800F800F800F860F860F860F860F8607CC03F801F00F1D7F9C14>I<FF07F8FF07F8
+1F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
+1F01F81F01F80F06F807FCFF03F8FF18147D931D>I<FFE07F80FFE07F801F001C000F8018000F
+80180007C0300007C0300003E0600003E0600001F0C00001F0C00001F9C00000F9800000FF8000
+007F0000007F0000003E0000003E0000001C0000001C000019147F931C>I<FFE7FE1FE0FFE7FE
+1FE01F00F003001F00F803000F80F806000F80F8060007C1BC0C0007C1BC0C0007C1BE0C0003E3
+1E180003E31E180001F60F300001F60F300001F60FB00000FC07E00000FC07E000007803C00000
+7803C000007803C000003001800023147F9326>I<FFE1FF00FFE1FF000F80700007C0E00007E0
+C00003E1800001F3800000FF0000007E0000003E0000003F0000007F8000006F800000C7C00001
+83E0000381F0000701F8000E00FC00FF81FF80FF81FF8019147F931C>I<FFE07F80FFE07F801F
+001C000F8018000F80180007C0300007C0300003E0600003E0600001F0C00001F0C00001F9C000
+00F9800000FF8000007F0000007F0000003E0000003E0000001C0000001C000000180000001800
+0078300000FC300000FC600000C0E00000E1C000007F8000001E000000191D7F931C>I
+E /Fv 10 114 df<07C01C00300060006000FF00C000C000C000C000C000400030C01F000A0E7E
+8D0E>15 D<10002020007040003040003080202080602080602080606080404080C0C081C180E7
+67007E7E003C3C00140E7F8D16>33 D<60F0F070101020204040040A7D830A>59
+D<07C01C20301060106020FFC0C000C000C000C000C010402060C01F000C0E7E8D10>101
+D<000E0013003700360060006000600060006007FC00C000C000C000C000C00180018001800180
+0180018003000300030003006600E600CC007800101D7E9611>I<00E2031E060E0C0E0C0C180C
+180C180C101810181018183808F00730003000306060E060C1C07F000F14808D11>I<03000380
+03000000000000000000000000001C002400460046008C000C0018001800180031003100320032
+001C0009177F960C>105 D<383C1E0044C6630047028100460301008E0703000C0603000C0603
+000C060600180C0600180C0620180C0C20180C0C4030180440301807801B0E7F8D1F>109
+D<1C3C22462382230346030603060306030C060C060C0C0C081A3019E018001800300030003000
+FC001014808D12>112 D<071018D0307060706060C060C060C06080C080C080C0C1C047803980
+018001800300030003001FC00C147E8D10>I E /Fw 7 113 df<FFFFF0FFFFF014027D881B>0
+D<60F0F06004047D890A>I<001000003000003000003000003000003000003000003000003000
+003000003000FFFFFCFFFFFC003000003000003000003000003000003000003000003000003000
+FFFFFCFFFFFC16187E961B>6 D<0F801FC0306060306030C018C018C018C0186030603030601F
+C00F800D0E7E8E12>14 D<0400000008000000080000001000000020000000FFFFFFF8FFFFFFF8
+20000000100000000800000008000000040000001D0C7D8D23>32 D<060F0F0E1E1E1C3C383830
+707060E0C04008117F910A>48 D<00000008000000180000003000000030000000600000006000
+0000C0000000C0000001800000030000000300000006000000060000000C0000000C0000001800
+0000180030003000D8003000180060000C0060000C00C0000600C0000601800003018000030300
+00018600000186000000CC000000CC0000007800000078000000300000003000001D227F811D>
+112 D E /Fx 24 122 df<03E0040FF0081FF8083FF810301C10400C10C0042080042000024000
+024000028000028000028000030000030000030000020000020000020000060000060000060000
+0C00000C00000C00000C00001800001800001800001000161E7F9318>13
+D<01801801C01C0380380380380380380380380700700700700700700700700E00E00E00E00E00
+E00E00E11E01C21E01C21E03C21E05C43F08C439F0783800003800007000007000007000007000
+00E00000E00000E00000C00000181E7F931B>22 D<0F00307F00380E00700E00700E00700E00E0
+1C00E01C01C01C01C01C0380380300380600380C0038180070300070600070C000730000FC0000
+F0000015147E9316>I<0000100000001000000010000000200000002000000020000000200000
+004000000040000000400000004000000080000F008180118083C0218083E021C101E041C100E0
+43810060838100400702004007020040070200400E0200800E0400800E0401000E0401000E0402
+000E080400060808000708300001C8C000007F0000001000000010000000100000002000000020
+0000002000000020000000400000004000001B297E9F1E>32 D<70F8F8F87005057C840D>58
+D<70F8FCFC74040404080810102040060E7C840D>I<000001C00000078000001E000000780000
+01E00000078000000E00000038000000F0000003C000000F0000003C000000F0000000F0000000
+3C0000000F00000003C0000000F0000000380000000E0000000780000001E0000000780000001E
+0000000780000001C01A1A7C9723>I<E0000000780000001E0000000780000001E00000007800
+00001C0000000700000003C0000000F00000003C0000000F00000003C0000003C000000F000000
+3C000000F0000003C00000070000001C00000078000001E00000078000001E00000078000000E0
+0000001A1A7C9723>62 D<FFF03FFC1FF80F8007C003C00F00078001800F00078001000F000780
+02000F00078002000F000F8004000F00178004000F00178008000F00278018000F0027C010000F
+0043C020000F8043C020000F8083C04000078183C04000078103C08000078203C08000078203C1
+0000078403C20000078403C20000078803C40000078803C40000079003C8000007A003C8000007
+A003D0000007C003F0000007C003E00000078001C00000078001C0000007000180000003000180
+00000200010000002D207E9E2B>87 D<007FFFF800FC00F000E001E000C003C001800780010007
+8003000F0002001E0002003C00040078000000F8000000F0000001E0000003C00000078000000F
+0000000F0000001E0000003C00000078008000F0008001F0010001E0010003C00300078002000F
+0006001E0004003E000C003C003C007800F800FFFFF8001D1F7D9E1F>90
+D<00F1800389C00707800E03801C03803C0380380700780700780700780700F00E00F00E00F00E
+00F00E10F01C20F01C20703C20705C40308C400F078014147E9318>97 D<007C01C207010E0F1E
+0F1C0E3C04780078007800F000F000F000F000F00070017002300418380FC010147E9314>99
+D<0000780003F80000700000700000700000700000E00000E00000E00000E00001C00001C000F1
+C00389C00707800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E
+10F01C20F01C20703C20705C40308C400F078015207E9F18>I<007C01C207010E011C013C0138
+02780C7BF07C00F000F000F000F0007000700170023004183807C010147E9315>I<00E001E001
+E000C000000000000000000000000000000E00130023804380438043808700070007000E000E00
+1C001C001C20384038403840388019000E000B1F7E9E10>105 D<1E07C07C00231861860023A0
+32030043C03403004380380380438038038087007007000700700700070070070007007007000E
+00E00E000E00E00E000E00E00E000E00E01C101C01C01C201C01C038201C01C038401C01C01840
+38038018801801800F0024147E9328>109 D<1E07802318C023A06043C0704380704380708700
+E00700E00700E00700E00E01C00E01C00E01C00E03821C03841C07041C07081C03083803101801
+E017147E931B>I<007C0001C3000301800E01C01E01C01C01E03C01E07801E07801E07801E0F0
+03C0F003C0F003C0F00780F00700700F00700E0030180018700007C00013147E9316>I<03C1E0
+04621804741C08781C08701E08701E10E01E00E01E00E01E00E01E01C03C01C03C01C03C01C038
+0380780380700380E003C1C0072380071E000700000700000E00000E00000E00000E00001C0000
+1C0000FFC000171D819317>I<00F0400388C00705800E03801C03803C03803807007807007807
+00780700F00E00F00E00F00E00F00E00F01C00F01C00703C00705C0030B8000F38000038000038
+0000700000700000700000700000E00000E0000FFE00121D7E9314>I<1E1E0023210023C38043
+C7804387804383008700000700000700000700000E00000E00000E00000E00001C00001C00001C
+00001C000038000018000011147E9315>I<00C000E001C001C001C001C003800380FFF8038007
+000700070007000E000E000E000E001C001C001C001C10382038203820384018800F000D1C7F9B
+10>116 D<03C1C00C62201034701038F02038F020386040700000700000700000700000E00000
+E00000E00000E02061C040F1C040F1C080E2C080446300383C0014147E931A>120
+D<0F00601180702180E021C0E041C0E04380E08381C00701C00701C00701C00E03800E03800E03
+800E03800E07000C07000C07000E0F00061E0003EE00000E00000E00001C007818007838007070
+0060600021C0001F0000141D7E9316>I E /Fy 10 83 df<000000000020000000000060000000
+0000C0000000000180000000000300000000000600000000000C00000000001800000000003000
+00000000600000000000C0000000000180000000000300000000000600000000000C0000000000
+180000000000300000000000600000000000C00000000001800000000003000000000006000000
+00000C0000000000180000000000300000000000600000000000C0000000000180000000000300
+000000000600000000000C0000000000180000000000300000000000600000000000C000000000
+0180000000000300000000000600000000000C0000000000180000000000300000000000600000
+000000C000000000008000000000002B2C80AA2A>0 D<0100018003C003E003F007F807FC07FE
+0FFF0FFC1FE01F003C007000600080001010808F2A>9 D<00010006000E003C00F807F83FF0FF
+F07FE03FE01FE00FC007C003C001800080101066A92A>18 D<0002001E007E01FE0FFEFFFEFFFE
+0FFE01FE007E001E00020F0C7E852A>27 D<8000F000FC00FF00FFE0FFFEFFFEFFE0FF00FC00F0
+0080000F0C67852A>45 D<06000600060006000F000F000F001F801F803FC03FC07FE07FE07FE0
+FFF00C0F86A72A>54 D<FFF07FE07FE07FE03FC03FC01F801F800F000F000F0006000600060006
+000C0F86902A>63 D<800000000000C00000000000600000000000300000000000180000000000
+0C000000000006000000000003000000000001800000000000C000000000006000000000003000
+000000001800000000000C000000000006000000000003000000000001800000000000C0000000
+00006000000000003000000000001800000000000C000000000006000000000003000000000001
+800000000000C000000000006000000000003000000000001800000000000C0000000000060000
+00000003000000000001800000000000C000000000006000000000003000000000001800000000
+000C000000000006000000000003000000000001800000000000C0000000000060000000000020
+2B2C80AA2A>I<8000600070003C001F001FE00FFC0FFF07FE07FC07F803F003E003C001800100
+101080A92A>73 D<0080018003C007C00FC01FE03FE07FE0FFF03FF007F800F8003C000E000600
+011010668F2A>82 D E /Fz 24 127 df<F000FC000E0003000180018000C000C000C000C00A0A
+888111>0 D<00C000C000C000C00180018003000E00FC00F0000A0A888911>I<C000C000C00060
+006000300018000E0007C001C00A0A808911>I<01C007C00E001800300060006000C000C000C0
+000A0A808111>I<F80000FF000007800000E000007000001800000C0000060000060000030000
+01800001800001800000C00000C00000C00000C00000C01212908121>I<0000C00000C00000C0
+0000C00000C0000180000180000180000300000600000600000C0000180000700000E000078000
+FF0000F800001212909121>I<C00000C00000C00000C000006000006000006000003000001800
+001800000C000006000003000001C00000E000003C00001FC00003C01212809121>I<0003C000
+1FC0003C0000E00001C0000300000600000C0000180000180000300000300000600000600000C0
+0000C00000C00000C000001212808121>I<F8000000FF80000007E0000000780000001C000000
+070000000380000000C0000000600000003000000018000000180000000C000000060000000600
+000003000000030000000180000001800000018000000180000000C0000000C0000000C0000000
+C0000000C0000000401A1B988132>I<00000040000000C0000000C0000000C0000000C0000000
+C0000001800000018000000180000001800000030000000300000006000000060000000C000000
+18000000180000003000000060000000C0000003800000070000001C00000078000007E00000FF
+800000F80000001A1B989A32>I<40000000C0000000C0000000C0000000C0000000C000000060
+0000006000000060000000300000003000000018000000180000000C0000000600000006000000
+030000000180000000C000000060000000380000001C0000000700000003C0000000F80000003F
+E0000007E01B1B809A32>I<000007E000003FE00000F8000003C00000070000001C0000003800
+000060000000C00000018000000300000006000000060000000C00000018000000180000003000
+000030000000600000006000000060000000C0000000C0000000C0000000C0000000C000000040
+0000001B1B808132>I<FC00000000FFE000000003F8000000001F0000000007C000000000E000
+00000038000000001C0000000006000000000300000000018000000000C0000000006000000000
+3000000000300000000018000000000C000000000C000000000600000000060000000006000000
+00030000000003000000000180000000018000000001800000000180000000018000000000C000
+000000C000000000C000000000C000000000C000000000C000000000402223A08142>I<000000
+004000000000C000000000C000000000C000000000C000000000C000000000C000000001800000
+000180000000018000000001800000000180000000030000000003000000000600000000060000
+000006000000000C000000000C000000001800000000300000000030000000006000000000C000
+00000180000000030000000006000000001C000000003800000000E000000007C00000001F0000
+0003F8000000FFE0000000FC000000002223A0A242>I<4000000000C000000000C000000000C0
+00000000C000000000C000000000C0000000006000000000600000000060000000006000000000
+30000000003000000000180000000018000000000C000000000C00000000060000000006000000
+0003000000000180000000018000000000C0000000006000000000300000000018000000000E00
+000000070000000001C000000000F0000000003C000000000F0000000003F000000000FFE00000
+000FE0232380A242>I<0000000FE0000000FFE0000003F00000000F000000003C00000000F000
+000001C000000007000000000E00000000180000000030000000006000000000C0000000018000
+000001800000000300000000060000000006000000000C000000000C0000000018000000001800
+000000300000000030000000006000000000600000000060000000006000000000C000000000C0
+00000000C000000000C000000000C000000000C00000000040000000002323808142>I<FE0000
+000000FFF00000000001FE00000000000FC00000000001F000000000003C00000000000F000000
+000003800000000000E000000000007000000000001800000000000C0000000000060000000000
+03000000000001800000000000C000000000006000000000006000000000003000000000001800
+000000001800000000000C00000000000C00000000000600000000000600000000000300000000
+0003000000000003000000000001800000000001800000000001800000000000C00000000000C0
+0000000000C00000000000C00000000000C0000000000060000000000060000000000060000000
+0000600000000000600000000000600000000000602B2BA98153>I<0000000000600000000000
+600000000000600000000000600000000000600000000000600000000000600000000000C00000
+000000C00000000000C00000000000C00000000000C00000000001800000000001800000000001
+80000000000300000000000300000000000300000000000600000000000600000000000C000000
+00000C0000000000180000000000180000000000300000000000600000000000600000000000C0
+000000000180000000000300000000000600000000000C00000000001800000000007000000000
+00E0000000000380000000000F00000000003C0000000001F0000000000FC000000001FE000000
+00FFF000000000FE00000000002B2BA9AA53>I<C00000000000C00000000000C00000000000C0
+0000000000C00000000000C00000000000C0000000000060000000000060000000000060000000
+000060000000000030000000000030000000000030000000000018000000000018000000000018
+00000000000C00000000000C000000000006000000000006000000000003000000000003000000
+000001800000000000C00000000000600000000000600000000000300000000000180000000000
+0C000000000006000000000003000000000001C00000000000E000000000003000000000001C00
+000000000F000000000003C00000000000F800000000003F000000000007F00000000000FFE000
+0000000FE02B2B80AA53>I<000000000FE000000000FFE000000007F0000000003F0000000000
+F80000000003C0000000000F00000000001C0000000000300000000000E00000000001C0000000
+000300000000000600000000000C00000000001800000000003000000000006000000000006000
+00000000C000000000018000000000030000000000030000000000060000000000060000000000
+0C00000000000C0000000000180000000000180000000000180000000000300000000000300000
+000000300000000000600000000000600000000000600000000000600000000000C00000000000
+C00000000000C00000000000C00000000000C00000000000C00000000000C000000000002B2B80
+8153>I<FE000000000000FFF8000000000001FF00000000000007E0000000000000FC00000000
+00001F0000000000000380000000000000E0000000000000780000000000001C00000000000007
+0000000000000380000000000000C0000000000000600000000000003000000000000018000000
+0000000C0000000000000600000000000003000000000000018000000000000180000000000000
+C00000000000006000000000000060000000000000300000000000003000000000000018000000
+0000000C0000000000000C00000000000006000000000000060000000000000600000000000003
+000000000000030000000000000300000000000001800000000000018000000000000180000000
+000000C0000000000000C0000000000000C0000000000000C0000000000000C0000000000000C0
+000000000000600000000000006000000000000060000000000000600000000000006000000000
+00006000000000000060000000000000203334B18164>I<000000000000200000000000006000
+000000000060000000000000600000000000006000000000000060000000000000600000000000
+0060000000000000C0000000000000C0000000000000C0000000000000C0000000000000C00000
+00000000C000000000000180000000000001800000000000018000000000000300000000000003
+000000000000030000000000000600000000000006000000000000060000000000000C00000000
+00000C000000000000180000000000003000000000000030000000000000600000000000006000
+0000000000C0000000000001800000000000018000000000000300000000000006000000000000
+0C000000000000180000000000003000000000000060000000000000C000000000000380000000
+0000070000000000001C00000000000078000000000000E00000000000038000000000001F0000
+00000000FC000000000007E00000000001FF0000000000FFF80000000000FE0000000000003334
+B1B364>I<00FC0007FF800FFFC01FFFE03FFFF07FFFF87FFFF8FFFFFCFFFFFCFFFFFCFFFFFCFF
+FFFCFFFFFCFFFFFCFFFFFC7FFFF87FFFF83FFFF01FFFE00FFFC007FF8000FC0016168B8A15>
+116 D<0000007FF8000000000007FFFF80000000001FFFFFE0000000007FFFFFF800000001FFFF
+FFFE00000003FFFFFFFF0000000FFFFFFFFFC000001FFFFFFFFFE000003FFFFFFFFFF000007FFF
+FFFFFFF80000FFFFFFFFFFFC0001FFFFFFFFFFFE0003FFFFFFFFFFFF0003FFFFFFFFFFFF0007FF
+FFFFFFFFFF800FFFFFFFFFFFFFC00FFFFFFFFFFFFFC01FFFFFFFFFFFFFE01FFFFFFFFFFFFFE03F
+FFFFFFFFFFFFF03FFFFFFFFFFFFFF07FFFFFFFFFFFFFF87FFFFFFFFFFFFFF87FFFFFFFFFFFFFF8
+7FFFFFFFFFFFFFF8FFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFCFFFFFFFFFFFFFF
+FCFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFCFFFFFFFFFFFF
+FFFCFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFC7FFFFFFFFFFFFFF87FFFFFFFFF
+FFFFF87FFFFFFFFFFFFFF87FFFFFFFFFFFFFF83FFFFFFFFFFFFFF03FFFFFFFFFFFFFF01FFFFFFF
+FFFFFFE01FFFFFFFFFFFFFE00FFFFFFFFFFFFFC00FFFFFFFFFFFFFC007FFFFFFFFFFFF8003FFFF
+FFFFFFFF0003FFFFFFFFFFFF0001FFFFFFFFFFFE0000FFFFFFFFFFFC00007FFFFFFFFFF800003F
+FFFFFFFFF000001FFFFFFFFFE000000FFFFFFFFFC0000003FFFFFFFF00000001FFFFFFFE000000
+007FFFFFF8000000001FFFFFE00000000007FFFF8000000000007FF80000003E3E9F9E3E>126
+D E /FA 12 116 df<004000800100020006000C000C0018001800300030007000600060006000
+E000E000E000E000E000E000E000E000E000E000E000E000600060006000700030003000180018
+000C000C00060002000100008000400A2A7D9E10>40 D<800040002000100018000C000C000600
+060003000300038001800180018001C001C001C001C001C001C001C001C001C001C001C001C001
+8001800180038003000300060006000C000C00180010002000400080000A2A7E9E10>I<60F0F0
+6004047C830C>46 D<03C00C301818300C300C700E60066006E007E007E007E007E007E007E007
+E007E007E007E007E007E00760066006700E300C300C18180C3007E0101D7E9B15>48
+D<030007003F00C700070007000700070007000700070007000700070007000700070007000700
+07000700070007000700070007000F80FFF80D1C7C9B15>I<FFE00FF01F0003C00F0001800F00
+01000F800300078002000780020003C0040003C0040003C0040001E0080001E0080001F0080000
+F0100000F0100000F830000078200000782000003C4000003C4000003C4000001E8000001E8000
+001F8000000F0000000F00000006000000060000000600001C1D7F9B1F>86
+D<03E00C301818300C700E6006E006FFFEE000E000E000E00060007002300218040C1803E00F12
+7F9112>101 D<18003C003C0018000000000000000000000000000000FC001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>105
+D<FC7C001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C03801C03801C03801C0380FF9FF014127F9117>110 D<03F0000E1C001806003003007003
+80600180E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F0
+0012127F9115>I<FCE01D301E781E781C301C001C001C001C001C001C001C001C001C001C001C
+001C00FFC00D127F9110>114 D<1F9030704030C010C010E010F8007F803FE00FF000F8803880
+18C018C018E010D0608FC00D127F9110>I E /FB 1 98 df<0001000000038000000380000003
+80000007C0000007C000000BE0000009E0000009E0000010F0000010F0000030F8000020780000
+20780000403C0000403C0000C03E0000801E0000801E0001FFFF0001FFFF0001000F0002000780
+02000780040003C0040003C00C0003C00C0001E03E0003F0FF000FFEFF000FFE1F1F7E9E25>97
+D E /FC 39 122 df<78FCFCFEFE7A02020202040404081010204007127B8511>44
+D<78FCFCFCFC7806067B8511>46 D<00100000700001F0000FF000FEF000F0F00000F00000F000
+00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
+00F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F000
+00F00000F00000F00001F8007FFFE07FFFE013287BA71E>49 D<00FE0007FF800E07E01803F020
+01F82000F840007C40007CF8007EFC007EFC003EFC003EFC003E78007E00007E00007C00007C00
+00F80000F80001F00001E00003C0000780000700000E00001C0000380000700000600000C00001
+80020300020600040C000418000410000C3FFFFC7FFFF8FFFFF8FFFFF817287DA71E>I<180018
+1F00F01FFFE01FFFC01FFF801FFF0011F800100000100000100000100000100000100000100000
+100000107E001183801600C01800E010007000007800003C00003C00003C00003E00003E00003E
+70003EF8003EF8003EF8003EF8003C80003C40007C4000782000783000F01801E00E07C007FF00
+01FC0017297DA71E>53 D<007F000001FFC0000381F000060078000C003C001C001C0018000E00
+38000E0038000E0038000E003C000E003C000E003E001C001F8018001FC038000FF0600007F8C0
+0003FF800001FF0000007FC00000FFE000030FF8000603FC001C01FE0038007E0030003F007000
+0F0070000780E0000780E0000380E0000380E0000380E0000380F0000300700007007800060038
+000C001E0038000F80F00003FFE000007F000019297EA71E>56 D<007F000001FFC00007C1E000
+0F0070001E0038001C003C003C001C0078001E0078001E00F8000F00F8000F00F8000F00F8000F
+00F8000F80F8000F80F8000F80F8000F8078000F8078001F803C001F803C001F801C002F800E00
+4F800700CF8003810F80007E0F8000000F0000000F0000000F0000001E0000001E0000001E0000
+003C001C003C003E0078003E0070003C00E0001801C0001C0780000FFE000003F8000019297EA7
+1E>I<00001800000000180000000018000000003C000000003C000000003C000000007E000000
+007E00000000FF000000009F000000009F000000011F800000010F800000010F8000000207C000
+000207C000000207C000000403E000000403E000000403E000000801F000000801F000001801F8
+00001000F800001000F800002000FC000020007C00003FFFFC00007FFFFE000040003E00004000
+3E000080001F000080001F000080001F000100000F800100000F800100000F8002000007C00700
+0007C01F80000FE0FFF000FFFFFFF000FFFF282A7EA92D>65 D<FFFFFFC000FFFFFFF80007E000
+FC0003E0003F0003E0000F8003E00007C003E00003E003E00001F003E00000F003E00000F803E0
+00007C03E000007C03E000007C03E000003E03E000003E03E000003E03E000003F03E000003F03
+E000003F03E000003F03E000003F03E000003F03E000003F03E000003F03E000003F03E000003F
+03E000003E03E000003E03E000007E03E000007C03E000007C03E00000F803E00000F803E00001
+F003E00003E003E00007C003E0000F8003E0001F0007E000FE00FFFFFFF800FFFFFFC00028297E
+A82E>68 D<FFFFFFFF80FFFFFFFF8007E0001F8003E000078003E00001C003E00000C003E00000
+C003E000004003E000004003E000004003E000004003E000002003E001002003E001002003E001
+000003E001000003E003000003E003000003E00F000003FFFF000003FFFF000003E00F000003E0
+03000003E003000003E001000003E001001003E001001003E001001003E000001003E000002003
+E000002003E000002003E000002003E000006003E000006003E00000E003E00001E003E00003C0
+07E0001FC0FFFFFFFFC0FFFFFFFFC024297EA829>I<FFFFFFFF00FFFFFFFF0007E0003F0003E0
+00070003E000038003E000018003E000018003E000008003E000008003E000008003E000008003
+E000004003E002004003E002004003E002000003E002000003E002000003E006000003E00E0000
+03FFFE000003FFFE000003E00E000003E006000003E002000003E002000003E002000003E00200
+0003E002000003E000000003E000000003E000000003E000000003E000000003E000000003E000
+000003E000000003E000000003E000000007F0000000FFFFE00000FFFFE0000022297EA827>I<
+0000FF00100007FFE030001FC07830003E000C7000F80006F001F00003F003E00001F007C00000
+F00F800000700F800000701F000000303F000000303E000000303E000000107E000000107E0000
+00107C00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00
+000000FC00000000FC0000FFFF7C0000FFFF7E000003F07E000001F03E000001F03E000001F03F
+000001F01F000001F00F800001F00F800001F007C00001F003E00001F001F00002F000F80002F0
+003E000C70001FC038300007FFE0100000FF8000282B7DA92F>I<FFFFE000FFFFE00007F00000
+03E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E000
+0003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0
+000003E0000003E0000003E0000103E0000103E0000103E0000103E0000203E0000203E0000203
+E0000203E0000603E0000603E0000E03E0001E03E0007C07E001FCFFFFFFFCFFFFFFFC20297EA8
+25>76 D<FFE0000003FFC0FFE0000003FFC007E0000003F80002F0000005F00002F0000005F000
+0278000009F0000278000009F0000278000009F000023C000011F000023C000011F000021E0000
+21F000021E000021F000021E000021F000020F000041F000020F000041F0000207800081F00002
+07800081F0000207800081F0000203C00101F0000203C00101F0000203E00201F0000201E00201
+F0000201E00201F0000200F00401F0000200F00401F0000200F00401F0000200780801F0000200
+780801F00002003C1001F00002003C1001F00002003C1001F00002001E2001F00002001E2001F0
+0002000F4001F00002000F4001F00002000F4001F0000200078001F0000700078001F0000F8003
+0003F800FFF803007FFFC0FFF803007FFFC032297EA837>I<0001FF0000000F01E000003C0078
+000078003C0000E0000E0001E0000F0003C000078007800003C00F800003E01F000001F01F0000
+01F03E000000F83E000000F87E000000FC7E000000FC7C0000007C7C0000007CFC0000007EFC00
+00007EFC0000007EFC0000007EFC0000007EFC0000007EFC0000007EFC0000007EFC0000007E7C
+0000007C7E000000FC7E000000FC7E000000FC3E000000F83F000001F81F000001F01F000001F0
+0F800003E007800003C007C00007C003E0000F8000F0001E000078003C00003C007800000F01E0
+000001FF0000272B7DA92E>79 D<FFFFFF8000FFFFFFF00007E000FC0003E0003E0003E0001F00
+03E0000F8003E0000FC003E00007C003E00007E003E00007E003E00007E003E00007E003E00007
+E003E00007E003E00007C003E0000FC003E0000F8003E0001F0003E0003E0003E001F80003FFFF
+E00003E000000003E000000003E000000003E000000003E000000003E000000003E000000003E0
+00000003E000000003E000000003E000000003E000000003E000000003E000000003E000000003
+E000000003E000000007F0000000FFFF800000FFFF80000023297EA829>I<FFFFFE000000FFFF
+FFC0000007E003F0000003E000FC000003E0003E000003E0001F000003E0001F800003E0000F80
+0003E0000FC00003E0000FC00003E0000FC00003E0000FC00003E0000FC00003E0000FC00003E0
+000F800003E0001F000003E0001E000003E0003C000003E000F8000003E003E0000003FFFE0000
+0003E00780000003E001E0000003E000F0000003E00078000003E0007C000003E0003C000003E0
+003E000003E0003E000003E0003E000003E0003E000003E0003F000003E0003F000003E0003F00
+0003E0003F000003E0003F008003E0003F808003E0001F808007F0000F8100FFFF8007C100FFFF
+8003C20000000000FC00292A7EA82C>82 D<7FFFFFFFF87FFFFFFFF87C007C00F870007C003860
+007C001840007C000840007C0008C0007C000CC0007C000C80007C000480007C000480007C0004
+80007C000480007C000400007C000000007C000000007C000000007C000000007C000000007C00
+0000007C000000007C000000007C000000007C000000007C000000007C000000007C000000007C
+000000007C000000007C000000007C000000007C000000007C000000007C000000007C00000000
+7C000000007C000000007C00000000FE000000FFFFFE0000FFFFFE0026297EA82B>84
+D<7FFF803FFE007FFF803FFE0003FC000FE00000F80007000000FC00020000007C00040000003E
+00040000003F00080000001F00100000001F80100000000FC02000000007C04000000007E04000
+000003F08000000001F10000000001F90000000000FE00000000007C00000000007E0000000000
+3F00000000001F00000000003F80000000002FC00000000047C000000000C7E00000000083E000
+00000101F00000000301F80000000200F80000000400FC0000000C007E00000008003E00000010
+003F00000030001F80000020000F80000040000FC00000C00007E00001C00003E00007F0000FF0
+00FFFC003FFFC0FFFC003FFFC02A297FA82D>88 D<01FC00000E0780001001C0003C00E0003E00
+F0003E0078001C00780008007800000078000000780000007800007FF80003E078000F8078001F
+0078003E0078007C00780078007820F8007820F8007820F8007820F800F8207C00F8203C013C40
+1F063FC007F80F001B1A7E991E>97 D<07800000FF800000FF8000000F80000007800000078000
+000780000007800000078000000780000007800000078000000780000007800000078000000780
+00000783F000078C1C0007B0070007A0038007C003C0078001E0078001E0078000F0078000F007
+8000F8078000F8078000F8078000F8078000F8078000F8078000F8078000F0078000F0078001F0
+078001E0078001C007C003C00740078007200E0006181C000407E0001D2A7FA921>I<007F8001
+C0700780080F003C1E007C3C007C3C00387C0010780000F80000F80000F80000F80000F80000F8
+0000F80000F800007800007C00003C00043C00041E00080F001007802001C0C0007F00161A7E99
+1B>I<00000F000001FF000001FF0000001F0000000F0000000F0000000F0000000F0000000F00
+00000F0000000F0000000F0000000F0000000F0000000F0000000F00003F0F0001C0CF0003802F
+000F001F001E001F001C000F003C000F007C000F0078000F0078000F00F8000F00F8000F00F800
+0F00F8000F00F8000F00F8000F00F8000F0078000F0078000F003C000F003C000F001E001F000E
+002F0007004F8001C18FF8007E0FF81D2A7EA921>I<007E0003C3800700E00E00F01C00703C00
+783C003878003C78003CF8003CF8003CFFFFFCF80000F80000F80000F80000F800007800007C00
+003C00043C00041E00080E001007002001C0C0007F00161A7E991B>I<001F000070C000E1E001
+C3E003C3E00381C0078080078000078000078000078000078000078000078000078000078000FF
+FE00FFFE0007800007800007800007800007800007800007800007800007800007800007800007
+800007800007800007800007800007800007800007800007800007800007C000FFFE00FFFE0013
+2A7FA912>I<0000078001FC1840070721C00E03C1C01E03C0803C01E0003C01E0007C01F0007C
+01F0007C01F0007C01F0007C01F0003C01E0003C01E0001E03C0000E0380001707000011FC0000
+300000003000000030000000380000001C0000001FFFC0000FFFF80007FFFC001C003E0030000F
+007000070060000380E0000380E0000380E0000380E0000380700007007000070038000E000C00
+18000780F00000FF80001A287E9A1E>I<07800000FF800000FF8000000F800000078000000780
+000007800000078000000780000007800000078000000780000007800000078000000780000007
+8000000783F800078C1C0007900E0007A0070007A0078007C0078007C007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780078007
+800780078007800780078007800780078007800780FFFCFFFCFFFCFFFC1E2A7FA921>I<07000F
+801F801F800F80070000000000000000000000000000000000000007807F807F800F8007800780
+078007800780078007800780078007800780078007800780078007800780078007800780FFF8FF
+F80D297FA811>I<0780FF80FF800F800780078007800780078007800780078007800780078007
+800780078007800780078007800780078007800780078007800780078007800780078007800780
+07800780078007800780FFFCFFFC0E2A7FA911>108 D<0781F800FC00FF860E030700FF98070C
+03800FA0079003C007A003D001E007C003E001E007C003E001E0078003C001E0078003C001E007
+8003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C0
+01E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E007
+8003C001E0078003C001E0FFFC7FFE3FFFFFFC7FFE3FFF301A7F9933>I<0783F800FF8C1C00FF
+900E000FA0070007A0078007C0078007C007800780078007800780078007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780078007
+800780078007800780FFFCFFFCFFFCFFFC1E1A7F9921>I<007F000001C1C000070070000E0038
+001C001C003C001E003C001E0078000F0078000F00F8000F80F8000F80F8000F80F8000F80F800
+0F80F8000F80F8000F80F8000F8078000F0078000F003C001E003C001E001E003C000E00380007
+00700001C1C000007F0000191A7E991E>I<0787C0FF98E0FF91F00FA1F007C1F007C0E007C000
+078000078000078000078000078000078000078000078000078000078000078000078000078000
+07800007800007800007C000FFFE00FFFE00141A7F9917>114 D<07F8401C06C03001C06000C0
+6000C0E00040E00040F00040F800007E00007FF0003FFE000FFF0003FF80003FC00007C08001E0
+8001E0C000E0C000E0C000E0E000C0F001C0F80180C4070083F800131A7E9918>I<0080000080
+000080000080000180000180000180000380000380000780000F80001FFF80FFFF800780000780
+000780000780000780000780000780000780000780000780000780000780000780000780400780
+4007804007804007804007804007804003C08001C08000E100003E0012257FA417>I<07800780
+FF80FF80FF80FF800F800F80078007800780078007800780078007800780078007800780078007
+800780078007800780078007800780078007800780078007800780078007800780078007800780
+0F8007800F800380178001C027C000E047FC003F87FC1E1A7F9921>I<FFF00FF8FFF00FF80F80
+03C0078003800780010003C0020003C0020003E0020001E0040001E0040000F0080000F0080000
+F818000078100000781000003C2000003C2000003E6000001E4000001E4000000F8000000F8000
+000700000007000000070000000200001D1A7F9920>I<FFF1FFC1FFFFF1FFC1FF0F803E00780F
+001E003007801E002007801E002007801F002003C03F004003C027004003C027804001E0678080
+01E043808001E043C08000F081C10000F081C10000F881E300007900E200007900E200007D00F6
+00003E007400003E007400001E007800001C003800001C003800000C0030000008001000281A7F
+992B>I<FFF00FF8FFF00FF80F8003C0078003800780010003C0020003C0020003E0020001E004
+0001E0040000F0080000F0080000F818000078100000781000003C2000003C2000003E6000001E
+4000001E4000000F8000000F800000070000000700000007000000020000000200000004000000
+040000000400000008000070080000F8100000F8100000F8200000F0400000608000001F000000
+1D267F9920>121 D E /FD 29 122 df<0000000003E000000000000000000007F00000000000
+0000000007F00000000000000000000FF80000000000000000000FF80000000000000000000FF8
+0000000000000000001FFC0000000000000000001FFC0000000000000000003FFE000000000000
+0000003FFE0000000000000000007FFF0000000000000000007FFF0000000000000000007FFF00
+0000000000000000FFFF800000000000000000FFFF800000000000000001FFFFC0000000000000
+0001FFFFC00000000000000001FFFFC00000000000000003FFFFE00000000000000003EFFFE000
+00000000000007EFFFF00000000000000007CFFFF00000000000000007C7FFF000000000000000
+0FC7FFF8000000000000000F83FFF8000000000000001F83FFFC000000000000001F03FFFC0000
+00000000001F01FFFC000000000000003F01FFFE000000000000003E00FFFE000000000000007E
+00FFFF000000000000007C007FFF00000000000000FC007FFF80000000000000F8007FFF800000
+00000000F8003FFF80000000000001F8003FFFC0000000000001F0001FFFC0000000000003F000
+1FFFE0000000000003E0001FFFE0000000000003E0000FFFE0000000000007E0000FFFF0000000
+000007C00007FFF000000000000FC00007FFF800000000000F800007FFF800000000000F800003
+FFF800000000001F800003FFFC00000000001F000001FFFC00000000003FFFFFFFFFFE00000000
+003FFFFFFFFFFE00000000007FFFFFFFFFFF00000000007FFFFFFFFFFF00000000007FFFFFFFFF
+FF0000000000FC0000007FFF8000000000F80000003FFF8000000001F80000003FFFC000000001
+F00000003FFFC000000001F00000001FFFC000000003F00000001FFFE000000003E00000000FFF
+E000000007E00000000FFFF000000007C00000000FFFF000000007C000000007FFF00000000FC0
+00000007FFF80000000F8000000003FFF80000001F8000000003FFFC0000001F0000000003FFFC
+0000007FC000000001FFFC0000FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC0
+0007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF8051487CC75A>65
+D<000000003FFE00000E0000000FFFFFC0001E0000007FFFFFF8003E000003FFFFFFFE00FE0000
+0FFFFFFFFF81FE00003FFFF800FFC3FE0000FFFF80000FF7FE0001FFFC000003FFFE0007FFF000
+0001FFFE000FFFC00000007FFE001FFF800000003FFE003FFF000000001FFE007FFE000000000F
+FE00FFFC0000000007FE01FFF80000000007FE03FFF00000000003FE03FFF00000000001FE07FF
+E00000000001FE07FFE00000000000FE0FFFC00000000000FE0FFFC000000000007E1FFFC00000
+0000007E1FFF8000000000007E3FFF8000000000007E3FFF8000000000003E3FFF800000000000
+3E7FFF8000000000003E7FFF0000000000003E7FFF000000000000007FFF00000000000000FFFF
+00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF000000
+00000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF000000000000
+00FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF000000000000007FFF
+000000000000007FFF000000000000007FFF000000000000007FFF8000000000003E3FFF800000
+0000003E3FFF8000000000003E3FFF8000000000003E1FFF8000000000003E1FFFC00000000000
+3E0FFFC000000000007C0FFFC000000000007C07FFE000000000007C07FFE00000000000F803FF
+F00000000000F803FFF00000000001F801FFF80000000001F000FFFC0000000003E0007FFE0000
+000007E0003FFF000000000FC0001FFF800000001F80000FFFC00000003F000007FFF0000000FE
+000001FFFC000001FC000000FFFF80000FF80000003FFFF8007FF00000000FFFFFFFFFC0000000
+03FFFFFFFF00000000007FFFFFFC00000000000FFFFFE00000000000003FFE000000474979C756
+>67 D<FFFFFFFFFFFFC0000000FFFFFFFFFFFFFE000000FFFFFFFFFFFFFFC00000FFFFFFFFFFFF
+FFF00000FFFFFFFFFFFFFFFC0000001FFF800007FFFF0000001FFF8000007FFF8000001FFF8000
+000FFFE000001FFF80000007FFF000001FFF80000001FFF800001FFF80000000FFFC00001FFF80
+0000007FFE00001FFF800000003FFF00001FFF800000001FFF00001FFF800000000FFF80001FFF
+800000000FFFC0001FFF8000000007FFC0001FFF8000000007FFE0001FFF8000000003FFE0001F
+FF8000000003FFF0001FFF8000000003FFF0001FFF8000000003FFF8001FFF8000000001FFF800
+1FFF8000000001FFF8001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FFFC
+001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FFFE001FFF8000000000FF
+FE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000
+FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF80000000
+00FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF800000
+0001FFFE001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000
+000001FFFC001FFF8000000001FFF8001FFF8000000001FFF8001FFF8000000001FFF8001FFF80
+00000003FFF0001FFF8000000003FFF0001FFF8000000003FFF0001FFF8000000007FFE0001FFF
+8000000007FFE0001FFF800000000FFFC0001FFF800000000FFF80001FFF800000001FFF80001F
+FF800000003FFF00001FFF800000003FFE00001FFF800000007FFC00001FFF80000001FFF80000
+1FFF80000003FFF000001FFF8000000FFFE000001FFF8000007FFFC000001FFF800003FFFF0000
+FFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFFF80000FFFFFFFFFFFFFFC00000FFFFFFFFFFFFFE0000
+00FFFFFFFFFFFFC00000004F477CC65B>I<FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFF
+FFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFF00001FFFC00001FFFF00001FFFC00000
+1FFF00001FFFC0000007FF00001FFFC0000003FF00001FFFC0000000FF00001FFFC00000007F00
+001FFFC00000007F00001FFFC00000003F00001FFFC00000003F80001FFFC00000001F80001FFF
+C00000001F80001FFFC00000001F80001FFFC00000000F80001FFFC00000000F80001FFFC0007C
+000F80001FFFC0007C000F80001FFFC0007C0007C0001FFFC0007C0007C0001FFFC0007C0007C0
+001FFFC0007C0007C0001FFFC000FC000000001FFFC000FC000000001FFFC000FC000000001FFF
+C001FC000000001FFFC003FC000000001FFFC01FFC000000001FFFFFFFFC000000001FFFFFFFFC
+000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFC01FFC000000
+001FFFC003FC000000001FFFC001FC000000001FFFC000FC000000001FFFC000FC000000001FFF
+C000FC000000001FFFC0007C00007C001FFFC0007C00007C001FFFC0007C00007C001FFFC0007C
+0000F8001FFFC0007C0000F8001FFFC0007C0000F8001FFFC000000000F8001FFFC000000001F8
+001FFFC000000001F0001FFFC000000001F0001FFFC000000001F0001FFFC000000003F0001FFF
+C000000003F0001FFFC000000007F0001FFFC000000007E0001FFFC00000000FE0001FFFC00000
+001FE0001FFFC00000003FE0001FFFC00000007FE0001FFFC0000000FFE0001FFFC0000003FFC0
+001FFFC000000FFFC0001FFFC00000FFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFF
+FFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF8046467CC54E>I<FFFFFFFFFFFFFFFC
+00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFE00001F
+FFC00003FFFE00001FFFC000003FFE00001FFFC000000FFE00001FFFC0000003FE00001FFFC000
+0001FE00001FFFC0000000FE00001FFFC0000000FE00001FFFC00000007E00001FFFC00000007F
+00001FFFC00000003F00001FFFC00000003F00001FFFC00000001F00001FFFC00000001F00001F
+FFC00000001F00001FFFC00000001F00001FFFC0007C001F00001FFFC0007C000F80001FFFC000
+7C000F80001FFFC0007C000F80001FFFC0007C000F80001FFFC0007C000000001FFFC000FC0000
+00001FFFC000FC000000001FFFC000FC000000001FFFC001FC000000001FFFC003FC000000001F
+FFC01FFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFFFFF
+FC000000001FFFFFFFFC000000001FFFC01FFC000000001FFFC003FC000000001FFFC001FC0000
+00001FFFC000FC000000001FFFC000FC000000001FFFC000FC000000001FFFC0007C000000001F
+FFC0007C000000001FFFC0007C000000001FFFC0007C000000001FFFC0007C000000001FFFC000
+7C000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000000000
+00001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001F
+FFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC000
+00000000001FFFC00000000000001FFFC00000000000001FFFC00000000000FFFFFFFFFF000000
+00FFFFFFFFFF00000000FFFFFFFFFF00000000FFFFFFFFFF00000000FFFFFFFFFF000000004146
+7CC54B>I<FFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE000FFFE000000FFFE0
+00000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFF
+E000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000F
+FFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE00000
+0FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000
+000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE0
+00000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFF
+E000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000F
+FFE000000FFFE000000FFFE000000FFFE000000FFFE000FFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFF
+FFFFFFFEFFFFFFFFFE27477DC62D>73 D<FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF00
+0000FFFFFFFFFF000000FFFFFFFFFF000000001FFFC000000000001FFFC000000000001FFFC000
+000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0
+00000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
+C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001F
+FFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC00000000000
+1FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000
+001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
+00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC00000
+0000001FFFC000000000001FFFC0000000F8001FFFC0000000F8001FFFC0000000F8001FFFC000
+0000F8001FFFC0000001F0001FFFC0000001F0001FFFC0000001F0001FFFC0000001F0001FFFC0
+000001F0001FFFC0000003F0001FFFC0000003F0001FFFC0000003F0001FFFC0000007F0001FFF
+C0000007F0001FFFC000000FE0001FFFC000001FE0001FFFC000001FE0001FFFC000003FE0001F
+FFC000007FE0001FFFC00000FFE0001FFFC00003FFE0001FFFC0000FFFE0001FFFC0007FFFE0FF
+FFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0
+3D477CC647>76 D<FFFFFFE0000000000003FFFFFFFFFFFFF0000000000007FFFFFFFFFFFFF000
+0000000007FFFFFFFFFFFFF800000000000FFFFFFFFFFFFFF800000000000FFFFFFF001FFFF800
+000000000FFFF800001FFFFC00000000001EFFF800001FFFFC00000000001EFFF800001FBFFE00
+000000003CFFF800001FBFFE00000000003CFFF800001F9FFF000000000078FFF800001F9FFF00
+0000000078FFF800001F8FFF8000000000F0FFF800001F8FFF8000000000F0FFF800001F87FFC0
+00000001E0FFF800001F87FFC000000001E0FFF800001F87FFC000000001E0FFF800001F83FFE0
+00000003C0FFF800001F83FFE000000003C0FFF800001F81FFF00000000780FFF800001F81FFF0
+0000000780FFF800001F80FFF80000000F00FFF800001F80FFF80000000F00FFF800001F807FFC
+0000001E00FFF800001F807FFC0000001E00FFF800001F807FFC0000001E00FFF800001F803FFE
+0000003C00FFF800001F803FFE0000003C00FFF800001F801FFF0000007800FFF800001F801FFF
+0000007800FFF800001F800FFF800000F000FFF800001F800FFF800000F000FFF800001F8007FF
+C00001E000FFF800001F8007FFC00001E000FFF800001F8003FFE00003C000FFF800001F8003FF
+E00003C000FFF800001F8003FFE00003C000FFF800001F8001FFF000078000FFF800001F8001FF
+F000078000FFF800001F8000FFF8000F0000FFF800001F8000FFF8000F0000FFF800001F80007F
+FC001E0000FFF800001F80007FFC001E0000FFF800001F80003FFE003C0000FFF800001F80003F
+FE003C0000FFF800001F80001FFF00780000FFF800001F80001FFF00780000FFF800001F80001F
+FF00780000FFF800001F80000FFF80F00000FFF800001F80000FFF80F00000FFF800001F800007
+FFC1E00000FFF800001F800007FFC1E00000FFF800001F800003FFE3C00000FFF800001F800003
+FFE3C00000FFF800001F800001FFF7800000FFF800001F800001FFF7800000FFF800001F800001
+FFF7800000FFF800001F800000FFFF000000FFF800001F800000FFFF000000FFF800001F800000
+7FFE000000FFF800001F8000007FFE000000FFF800001F8000003FFC000000FFF800001F800000
+3FFC000000FFF800001F8000001FF8000000FFF800001F8000001FF8000000FFF800007FE00000
+0FF0000000FFF800FFFFFFF0000FF00007FFFFFFFFFFFFFFF0000FF00007FFFFFFFFFFFFFFF000
+07E00007FFFFFFFFFFFFFFF00007E00007FFFFFFFFFFFFFFF00003C00007FFFFFFFF68477CC671
+>I<FFFFFFC0000000FFFFFFF0FFFFFFE0000000FFFFFFF0FFFFFFF0000000FFFFFFF0FFFFFFF8
+000000FFFFFFF0FFFFFFFC000000FFFFFFF0001FFFFC000000007FE000001FFFFE000000001F80
+00001FFFFF000000001F8000001FFFFF800000001F8000001FFFFFC00000001F8000001FBFFFE0
+0000001F8000001F9FFFE00000001F8000001F9FFFF00000001F8000001F8FFFF80000001F8000
+001F87FFFC0000001F8000001F83FFFE0000001F8000001F81FFFF0000001F8000001F80FFFF00
+00001F8000001F80FFFF8000001F8000001F807FFFC000001F8000001F803FFFE000001F800000
+1F801FFFF000001F8000001F800FFFF800001F8000001F8007FFF800001F8000001F8007FFFC00
+001F8000001F8003FFFE00001F8000001F8001FFFF00001F8000001F8000FFFF80001F8000001F
+80007FFFC0001F8000001F80003FFFC0001F8000001F80003FFFE0001F8000001F80001FFFF000
+1F8000001F80000FFFF8001F8000001F800007FFFC001F8000001F800003FFFE001F8000001F80
+0001FFFF001F8000001F800001FFFF001F8000001F800000FFFF801F8000001F8000007FFFC01F
+8000001F8000003FFFE01F8000001F8000001FFFF01F8000001F8000000FFFF81F8000001F8000
+000FFFF81F8000001F80000007FFFC1F8000001F80000003FFFE1F8000001F80000001FFFF1F80
+00001F80000000FFFF9F8000001F800000007FFFDF8000001F800000007FFFDF8000001F800000
+003FFFFF8000001F800000001FFFFF8000001F800000000FFFFF8000001F8000000007FFFF8000
+001F8000000003FFFF8000001F8000000003FFFF8000001F8000000001FFFF8000001F80000000
+00FFFF8000001F80000000007FFF8000001F80000000003FFF8000001F80000000001FFF800000
+1F80000000001FFF8000001F80000000000FFF8000001F800000000007FF8000001F8000000000
+03FF8000001F800000000001FF8000007FE00000000000FF8000FFFFFFF000000000FF8000FFFF
+FFF0000000007F8000FFFFFFF0000000003F8000FFFFFFF0000000001F8000FFFFFFF000000000
+0F000054477CC65D>I<00007FF00007000007FFFF000F00001FFFFFC01F00007FFFFFF03F0000
+FFFFFFFC7F0003FFC00FFEFF0007FE0000FFFF0007FC00003FFF000FF000001FFF001FF0000007
+FF001FE0000003FF003FE0000001FF003FC0000001FF007FC0000000FF007FC00000007F007FC0
+0000007F00FFC00000003F00FFC00000003F00FFC00000003F00FFE00000003F00FFE00000001F
+00FFF00000001F00FFF80000001F00FFFC0000001F00FFFF00000000007FFFC0000000007FFFFE
+000000007FFFFFE00000003FFFFFFF0000003FFFFFFFF000001FFFFFFFFC00001FFFFFFFFF0000
+0FFFFFFFFFC00007FFFFFFFFE00007FFFFFFFFF00003FFFFFFFFF80000FFFFFFFFFC00007FFFFF
+FFFE00003FFFFFFFFE00000FFFFFFFFF000001FFFFFFFF0000003FFFFFFF80000001FFFFFF8000
+00000FFFFFC000000000FFFFC0000000001FFFC0000000000FFFE00000000007FFE00000000003
+FFE07800000001FFE0F800000000FFE0F800000000FFE0F8000000007FE0F8000000007FE0F800
+0000007FE0FC000000007FE0FC000000007FC0FC000000007FC0FE000000007FC0FE000000007F
+80FF00000000FF80FF80000000FF80FFC0000000FF00FFE0000001FE00FFF8000003FE00FFFE00
+0007FC00FFFF80000FF800FFFFFC007FF000FE3FFFFFFFE000FC0FFFFFFF8000F803FFFFFF0000
+F0007FFFF80000E00003FFC00000334979C742>83 D<FFFFFFFFE000001FFFFFE0FFFFFFFFE000
+001FFFFFE0FFFFFFFFE000001FFFFFE0FFFFFFFFE000001FFFFFE0FFFFFFFFE000001FFFFFE000
+7FFF80000000003FE000003FFFC0000000000F8000003FFFC0000000001F8000001FFFE0000000
+001F0000001FFFE0000000003F0000000FFFE0000000003E0000000FFFF0000000007E00000007
+FFF0000000007C00000007FFF8000000007C00000007FFF800000000FC00000003FFFC00000000
+F800000003FFFC00000001F800000001FFFE00000001F000000001FFFE00000003F000000000FF
+FE00000003E000000000FFFF00000007E0000000007FFF00000007C0000000007FFF80000007C0
+000000007FFF8000000FC0000000003FFFC000000F80000000003FFFC000001F80000000001FFF
+C000001F00000000001FFFE000003F00000000000FFFE000003E00000000000FFFF000007E0000
+0000000FFFF000007E000000000007FFF800007C000000000007FFF80000FC000000000003FFFC
+0000F8000000000003FFFC0001F8000000000001FFFC0001F0000000000001FFFE0003F0000000
+000000FFFE0003E0000000000000FFFF0003E0000000000000FFFF0007E00000000000007FFF80
+07C00000000000007FFF800FC00000000000003FFFC00F800000000000003FFFC01F8000000000
+00001FFFC01F000000000000001FFFE03F000000000000000FFFE03E000000000000000FFFF03E
+000000000000000FFFF07E0000000000000007FFF87C0000000000000007FFF8FC000000000000
+0003FFF8F80000000000000003FFFDF80000000000000001FFFDF00000000000000001FFFFF000
+00000000000001FFFFF00000000000000000FFFFE00000000000000000FFFFE000000000000000
+007FFFC000000000000000007FFFC000000000000000003FFF8000000000000000003FFF800000
+0000000000001FFF0000000000000000001FFF0000000000000000001FFF000000000000000000
+0FFE0000000000000000000FFE00000000000000000007FC00000000000000000007FC00000000
+000000000003F800000000000000000003F800000000000000000001F0000000000053487DC65A
+>86 D<FFFFFFFFF000000FFFFFF8FFFFFFFFF000000FFFFFF8FFFFFFFFF000000FFFFFF8FFFFFF
+FFF000000FFFFFF8FFFFFFFFF000000FFFFFF8003FFFF0000000001FF000001FFFF0000000000F
+C000000FFFF8000000001F8000000FFFFC000000001F80000007FFFC000000003F00000003FFFE
+000000007E00000003FFFF00000000FC00000001FFFF00000000FC00000000FFFF80000001F800
+000000FFFFC0000003F0000000007FFFC0000003F0000000003FFFE0000007E0000000003FFFF0
+00000FC0000000001FFFF000000FC0000000000FFFF800001F80000000000FFFFC00003F000000
+000007FFFC00003F000000000003FFFE00007E000000000003FFFF0000FC000000000001FFFF00
+00FC000000000000FFFF8001F8000000000000FFFFC003F00000000000007FFFC003F000000000
+00003FFFE007E00000000000003FFFF00FC00000000000001FFFF00FC00000000000000FFFF81F
+800000000000000FFFFC3F0000000000000007FFFC3F0000000000000003FFFE7E000000000000
+0003FFFFFC0000000000000001FFFFFC0000000000000000FFFFF80000000000000000FFFFF000
+000000000000007FFFF000000000000000003FFFE000000000000000003FFFC000000000000000
+001FFF8000000000000000001FFF8000000000000000001FFF8000000000000000001FFF800000
+0000000000001FFF8000000000000000001FFF8000000000000000001FFF800000000000000000
+1FFF8000000000000000001FFF8000000000000000001FFF8000000000000000001FFF80000000
+00000000001FFF8000000000000000001FFF8000000000000000001FFF8000000000000000001F
+FF8000000000000000001FFF8000000000000000001FFF8000000000000000001FFF8000000000
+000000001FFF8000000000000000001FFF8000000000000000001FFF8000000000000000001FFF
+8000000000000000001FFF8000000000000000001FFF8000000000000000FFFFFFFFF800000000
+0000FFFFFFFFF8000000000000FFFFFFFFF8000000000000FFFFFFFFF8000000000000FFFFFFFF
+F800000055477EC65A>89 D<0007FFFC000000007FFFFFC0000001FFFFFFF8000003FFFFFFFE00
+0007FE001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000FFF80007FF0000FFF80
+007FF8000FFF80007FF80007FF00003FFC0007FF00003FFC0003FE00003FFC0000F800003FFC00
+000000003FFC00000000003FFC00000000003FFC00000000003FFC00000007FFFFFC000000FFFF
+FFFC000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003FFC0007FFC0003FFC000F
+FF00003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC007FF800003FFC00FFF000003F
+FC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000007FFC007FF8
+0000FFFC007FF80001EFFC003FFC0003EFFC003FFF0007CFFF000FFFC03F8FFFF807FFFFFF07FF
+FC01FFFFFC03FFFC007FFFF001FFFC0003FF80007FF8362E7DAD3A>97 D<00001FFFC0000000FF
+FFF8000007FFFFFE00001FFFFFFF80007FFC00FFC000FFE001FFC001FFC003FFE003FF8003FFE0
+07FF0003FFE00FFE0003FFE00FFE0003FFE01FFC0001FFC01FFC0001FFC03FFC0000FF803FFC00
+003E007FF8000000007FF8000000007FF800000000FFF800000000FFF800000000FFF800000000
+FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800
+0000007FF8000000007FF8000000007FFC000000003FFC000000003FFC000000001FFC000000F8
+1FFE000000F80FFE000000F80FFF000001F007FF800003F003FFC00007E001FFE0000FC000FFF0
+001F80007FFE00FF00001FFFFFFE000007FFFFF8000000FFFFE00000001FFE00002D2E7CAD35>
+99 D<00000000007FC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000
+FFFFC00000000000FFFFC0000000000003FFC0000000000001FFC0000000000001FFC000000000
+0001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000
+000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000
+00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000
+0000000001FFC0000000000001FFC00000000FFC01FFC0000000FFFF81FFC0000007FFFFE1FFC0
+00001FFFFFF9FFC000007FFC03FFFFC00000FFF0007FFFC00001FFC0001FFFC00003FF80000FFF
+C00007FF000007FFC0000FFE000003FFC0000FFE000003FFC0001FFC000003FFC0001FFC000003
+FFC0003FFC000003FFC0003FFC000003FFC0007FF8000003FFC0007FF8000003FFC0007FF80000
+03FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF800
+0003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8
+000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC0003FF8000003FFC0003F
+FC000003FFC0003FFC000003FFC0001FFC000003FFC0001FFC000003FFC0000FFE000007FFC000
+07FF00000FFFC00003FF00001FFFC00001FFC0003FFFC00000FFE000FFFFE000007FF807FBFFFF
+80001FFFFFF3FFFF800007FFFFC3FFFF800001FFFF03FFFF8000001FF803FFFF8039487CC742>
+I<00001FFE00000001FFFFE0000007FFFFF800001FFFFFFE00007FFC07FF0000FFE001FF8001FF
+C0007FC003FF80003FE007FF00003FF00FFE00001FF01FFE00000FF81FFC00000FF83FFC00000F
+FC3FFC000007FC7FFC000007FC7FF8000007FC7FF8000007FE7FF8000007FEFFF8000007FEFFF8
+000007FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFF800000000FFF8000000
+00FFF800000000FFF8000000007FF8000000007FF8000000007FFC000000003FFC000000003FFC
+000000003FFC0000001C1FFE0000003E0FFE0000003E07FF0000007E07FF000000FC03FF800001
+F801FFC00003F0007FF0001FE0003FFE00FFC0001FFFFFFF800007FFFFFE000000FFFFF8000000
+0FFF80002F2E7DAD36>I<00000000001F8000007FF000FFE00007FFFF03FFF0001FFFFFC7FFF0
+007FFFFFFFC7F800FFE03FFE0FF801FF800FFC0FF803FF0007FE0FF807FE0003FF07F007FE0003
+FF07F00FFC0001FF81C00FFC0001FF80000FFC0001FF80001FFC0001FFC0001FFC0001FFC0001F
+FC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0000FFC0001FF80000FFC0001FF
+80000FFC0001FF800007FE0003FF000007FE0003FF000003FF0007FE000001FF800FFC000000FF
+E03FF8000001FFFFFFF0000001DFFFFFC0000003C7FFFF00000003C07FF000000007C000000000
+0007C0000000000007C0000000000007C0000000000007E0000000000007F0000000000007F800
+0000000007FFFFFFF0000007FFFFFFFF000003FFFFFFFFE00003FFFFFFFFF80001FFFFFFFFFE00
+01FFFFFFFFFF0000FFFFFFFFFF80007FFFFFFFFF8003FFFFFFFFFFC00FFFFFFFFFFFC01FF80000
+1FFFE03FE0000001FFE07FC00000007FF07FC00000003FF0FF800000001FF0FF800000001FF0FF
+800000001FF0FF800000001FF0FF800000001FF07FC00000003FE07FC00000003FE03FE0000000
+7FC03FF0000000FFC01FFC000003FF800FFF00000FFF0003FFF000FFFC0000FFFFFFFFF000003F
+FFFFFFC0000007FFFFFE000000003FFFC0000035447DAE3B>103 D<00FC0001FE0003FF0007FF
+800FFFC01FFFE01FFFE01FFFE01FFFE01FFFE01FFFE00FFFC007FF8003FF0001FE0000FC000000
+00000000000000000000000000000000000000000000000000000000000000007FC0FFFFC0FFFF
+C0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF
+C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF
+C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0FFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFF18497CC820>105 D<007FC000FFFFC000FFFFC000FFFFC000FF
+FFC000FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
+01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
+0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF
+C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
+FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
+01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
+0001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF801948
+7CC720>108 D<007FC001FFC00000FFFFC00FFFF80000FFFFC03FFFFE0000FFFFC0FFFFFF0000
+FFFFC1FC07FF8000FFFFC3E003FFC00003FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE0
+0001FFDC0000FFE00001FFFC0000FFF00001FFF80000FFF00001FFF00000FFF00001FFF00000FF
+F00001FFF00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000
+FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE000
+00FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0
+0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF
+E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001
+FFE00000FFF00001FFE00000FFF00001FFE00000FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0
+FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE03B2E7CAD42>110
+D<00000FFF0000000000FFFFF000000007FFFFFE0000001FFFFFFF8000003FFC03FFC00000FFE0
+007FF00001FF80001FF80003FF00000FFC0007FE000007FE000FFE000007FF000FFC000003FF00
+1FFC000003FF803FFC000003FFC03FF8000001FFC03FF8000001FFC07FF8000001FFE07FF80000
+01FFE07FF8000001FFE0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FF
+F8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001
+FFF07FF8000001FFE07FF8000001FFE07FF8000001FFE07FF8000001FFE03FFC000003FFC03FFC
+000003FFC01FFC000003FF801FFE000007FF800FFE000007FF0007FF00000FFE0003FF80001FFC
+0001FFC0003FF80000FFE0007FF000007FFC03FFE000001FFFFFFF80000007FFFFFE00000000FF
+FFF0000000000FFF000000342E7DAD3B>I<00FF803F8000FFFF80FFF000FFFF83FFFC00FFFF87
+FFFE00FFFF8FC3FF00FFFF8F07FF0003FF9E0FFF8001FFBC0FFF8001FFB80FFF8001FFF80FFF80
+01FFF00FFF8001FFF007FF0001FFF007FF0001FFE003FE0001FFE000F80001FFE000000001FFE0
+00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000
+01FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0
+00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000
+01FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000FFFFFFE00000FFFFFF
+E00000FFFFFFE00000FFFFFFE00000FFFFFFE00000292E7CAD31>114 D<000FFF00E0007FFFF3
+E001FFFFFFE007FFFFFFE00FF800FFE01FC0001FE03F80000FE03F000007E07F000003E07F0000
+03E0FF000003E0FF000003E0FF800003E0FFC0000000FFF0000000FFFE000000FFFFF800007FFF
+FFC0007FFFFFF0003FFFFFFC001FFFFFFF000FFFFFFF8007FFFFFFC003FFFFFFE000FFFFFFF000
+3FFFFFF00003FFFFF800001FFFF8000000FFFC0000001FFC7800000FFCF8000007FCF8000003FC
+FC000003FCFC000003FCFE000003F8FE000003F8FF000003F8FF800007F0FFC0000FF0FFF0001F
+E0FFFC00FFC0FFFFFFFF80FC7FFFFE00F81FFFF800E003FF8000262E7CAD2F>I<0001F0000000
+01F000000001F000000001F000000001F000000001F000000003F000000003F000000003F00000
+0007F000000007F000000007F00000000FF00000000FF00000001FF00000003FF00000003FF000
+00007FF0000001FFF0000003FFF000000FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFF
+FFC000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FF
+F0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000
+FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF00000
+00FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FFF001
+F000FFF001F0007FF001E0007FF803E0003FF803E0003FFC07C0001FFE0F80000FFFFF800007FF
+FE000001FFFC0000001FF00024427EC12E>I<007FE000003FF000FFFFE0007FFFF000FFFFE000
+7FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF00003FFE00001FFF00001FFE0
+0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF
+E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001
+FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000
+01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0
+0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF
+F00001FFE00000FFF00001FFE00001FFF00001FFE00001FFF00001FFE00001FFF00001FFE00003
+FFF00000FFE00007FFF00000FFE0000F7FF000007FE0001F7FF000007FF0003E7FF800003FFC00
+FC7FFFE0001FFFFFF87FFFE00007FFFFE07FFFE00001FFFF807FFFE000003FFE007FFFE03B2E7C
+AD42>I<FFFFFF8001FFFFFFFFFF8001FFFFFFFFFF8001FFFFFFFFFF8001FFFFFFFFFF8001FFFF
+01FFE000001FC001FFF000001F8001FFF000001F8000FFF800001F0000FFF800003F00007FF800
+003E00007FFC00007E00003FFC00007C00003FFE0000FC00001FFE0000F800001FFF0001F80000
+0FFF0001F000000FFF8003F0000007FF8003E0000007FFC007E0000007FFC007E0000003FFE007
+C0000003FFE00FC0000001FFE00F80000001FFF01F80000000FFF01F00000000FFF83F00000000
+7FF83E000000007FFC7E000000003FFC7C000000003FFEFC000000001FFEF8000000001FFFF800
+0000001FFFF8000000000FFFF0000000000FFFF00000000007FFE00000000007FFE00000000003
+FFC00000000003FFC00000000001FF800000000001FF800000000000FF000000000000FF000000
+0000007E0000000000003C000000382E7DAD3F>I<FFFFFF07FFFFE007FFFEFFFFFF07FFFFE007
+FFFEFFFFFF07FFFFE007FFFEFFFFFF07FFFFE007FFFEFFFFFF07FFFFE007FFFE03FFC0001FFC00
+003FC003FFE0000FFC00001F8001FFE0000FFC00001F0001FFE0000FFE00001F0001FFF00007FE
+00003F0000FFF0000FFF00003E0000FFF8000FFF00007E00007FF8000FFF00007C00007FF8001F
+FF80007C00003FFC001FFF8000F800003FFC003FFFC000F800003FFE003EFFC001F800001FFE00
+3EFFC001F000001FFE007EFFE003F000000FFF007C7FE003E000000FFF00FC7FF003E000000FFF
+80F83FF007E0000007FF80F83FF007C0000007FF81F83FF80FC0000003FFC1F01FF80F80000003
+FFC3F01FFC0F80000003FFE3E00FFC1F80000001FFE3E00FFC1F00000001FFE7E00FFE3F000000
+00FFF7C007FE3E00000000FFFFC007FF3E00000000FFFF8003FF7E000000007FFF8003FF7C0000
+00007FFF8003FFFC000000003FFF0001FFF8000000003FFF0001FFF8000000003FFE0000FFF800
+0000001FFE0000FFF0000000001FFE0000FFF0000000000FFC00007FE0000000000FFC00007FE0
+000000000FF800003FE00000000007F800003FC00000000007F800003FC00000000003F000001F
+800000000001E000000F0000004F2E7DAD56>I<7FFFFF801FFFFF007FFFFF801FFFFF007FFFFF
+801FFFFF007FFFFF801FFFFF007FFFFF801FFFFF00007FF80001FF0000007FFC0001FC0000003F
+FE0003F80000001FFF0007F00000000FFF0007E000000007FF800FC000000003FFC01F80000000
+03FFE03F8000000001FFF07F0000000000FFF8FE00000000007FF9FC00000000003FFFF8000000
+00003FFFF000000000001FFFE000000000000FFFC0000000000007FFC0000000000003FFC00000
+00000001FFE0000000000001FFF0000000000001FFF8000000000003FFFC000000000003FFFE00
+0000000007FFFE00000000000FEFFF00000000001FCFFF80000000003F87FFC0000000007F03FF
+E000000000FE01FFE000000001FC00FFF000000001F8007FF800000003F0007FFC00000007F000
+3FFE0000000FE0001FFF0000001FC0000FFF0000003F800007FF800000FF800007FFC000FFFFF8
+003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC03A2E
+7EAD3F>I<7FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF807FFF
+FFC000FFFF8000FFF000000FE00000FFF800000FC00000FFF800000FC000007FFC00000F800000
+7FFC00001F8000003FFC00001F0000003FFE00003F0000001FFE00003E0000001FFF00007E0000
+000FFF00007C0000000FFF8000FC00000007FF8000F800000007FFC001F800000003FFC001F000
+000003FFE003F000000003FFE003F000000001FFF003E000000001FFF007E000000000FFF007C0
+00000000FFF80FC0000000007FF80F80000000007FFC1F80000000003FFC1F00000000003FFE3F
+00000000001FFE3E00000000001FFF7E00000000000FFF7C00000000000FFFFC00000000000FFF
+FC000000000007FFF8000000000007FFF8000000000003FFF0000000000003FFF0000000000001
+FFE0000000000001FFE0000000000000FFC0000000000000FFC00000000000007F800000000000
+007F800000000000003F000000000000003F000000000000003F000000000000003E0000000000
+00007E000000000000007C00000000000000FC000000001F8000F8000000003FC001F800000000
+7FE001F000000000FFF003F000000000FFF003E000000000FFF007E000000000FFF00FC0000000
+00FFF01F8000000000FFF03F80000000007FE07F00000000007F43FE00000000003FFFF8000000
+00001FFFF0000000000007FFC0000000000001FE00000000000039427EAD3F>I
+E /FE 94 128 df<00008000000001C000000001C000000003E000000003E000000005F0000000
+04F000000008F80000000878000000107C000000103C000000203E000000201E000000401F0000
+00400F000000800F80000080078000010007C000010003C000020003E000020001E000040001F0
+00040000F000080000F80008000078001000007C001000003C002000003E002000001E007FFFFF
+FF007FFFFFFF00FFFFFFFF8021207E9F26>1 D<001F83E000F06E3001C078780380F8780300F0
+3007007000070070000700700007007000070070000700700007007000FFFFFF80070070000700
+700007007000070070000700700007007000070070000700700007007000070070000700700007
+0070000700700007007000070070000700700007007000070070007FE3FF001D20809F1B>11
+D<003F0000E0C001C0C00381E00701E00701E0070000070000070000070000070000070000FFFF
+E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700
+E00700E00700E00700E00700E00700E07FC3FE1720809F19>I<003FE000E0E001C1E00381E007
+00E00700E00700E00700E00700E00700E00700E00700E0FFFFE00700E00700E00700E00700E007
+00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007
+00E07FE7FE1720809F19>I<001F81F80000F04F040001C07C06000380F80F000300F00F000700
+F00F00070070000007007000000700700000070070000007007000000700700000FFFFFFFF0007
+007007000700700700070070070007007007000700700700070070070007007007000700700700
+070070070007007007000700700700070070070007007007000700700700070070070007007007
+00070070070007007007007FE3FE3FF02420809F26>I<001F81FF0000F06F070001C07C0F0003
+80F80F000300F00700070070070007007007000700700700070070070007007007000700700700
+0700700700FFFFFFFF000700700700070070070007007007000700700700070070070007007007
+000700700700070070070007007007000700700700070070070007007007000700700700070070
+070007007007000700700700070070070007007007007FE3FE3FF02420809F26>I<FFFF10017D
+9A17>22 D<1FE01F00303871C0780CC060780F8070300780700007803800070038000700380007
+003800FFFFF80F8700001E0700003807000078070000F0078000F0078008F007C008700CC0103C
+3830600FE01F801D147E9321>26 D<01F803E0070C0E381C03180C1803B00E3801B00E7001F007
+7000E007F000E007F000E007F000FFFFF000E000F000E000F000E0007000E0007801F0003801B0
+011803B8011C031802070C060C01F803F020147F9323>I<70F8F8F8F8F8F8F870707070707070
+7070702020202020000000000070F8F8F87005217CA00D>33 D<7038F87CFC7EFC7E743A040204
+0204020804080410081008201040200F0E7E9F17>I<0F0000301880003030600060703001C060
+2C06C06013F980E0100300E0100300E0100600E0100C00E0100C00E01018006010300060203000
+702060003040C0001880C0000F018000000300E0000303100006060800060604000C0C0400180C
+0400181C0200301C0200601C0200601C0200C01C0201801C0201801C0203000C0406000C040600
+06040C00060818000310080000E01F257DA126>37 D<70F8FCFC74040404080810102040060E7C
+9F0D>39 D<0020004000800100020006000C000C00180018003000300030007000600060006000
+E000E000E000E000E000E000E000E000E000E000E000E000600060006000700030003000300018
+0018000C000C000600020001000080004000200B2E7DA112>I<800040002000100008000C0006
+0006000300030001800180018001C000C000C000C000E000E000E000E000E000E000E000E000E0
+00E000E000E000C000C000C001C001800180018003000300060006000C00080010002000400080
+000B2E7DA112>I<01800180018001800180C183F18F399C0FF003C003C00FF0399CF18FC18301
+80018001800180018010147DA117>I<0006000000060000000600000006000000060000000600
+00000600000006000000060000000600000006000000060000000600000006000000060000FFFF
+FFF0FFFFFFF0000600000006000000060000000600000006000000060000000600000006000000
+0600000006000000060000000600000006000000060000000600001C207D9A23>I<70F8FCFC74
+040404080810102040060E7C840D>I<FFC0FFC00A027F8A0F>I<70F8F8F87005057C840D>I<00
+0100030003000600060006000C000C000C00180018001800300030003000600060006000C000C0
+00C00180018001800300030003000600060006000C000C000C0018001800180030003000300060
+0060006000C000C000C000102D7DA117>I<03F0000E1C001C0E00180600380700700380700380
+700380700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0
+F003C0F003C07003807003807003807807803807001806001C0E000E1C0003F000121F7E9D17>
+I<018003800F80F380038003800380038003800380038003800380038003800380038003800380
+03800380038003800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C1C00100E0020
+0700400780800780F007C0F803C0F803C0F803C02007C00007C0000780000780000F00000E0000
+1C0000380000700000600000C0000180000300000600400C00401800401000803FFF807FFF80FF
+FF80121E7E9D17>I<03F0000C1C00100E00200F00780F80780780780780380F80000F80000F00
+000F00000E00001C0000380003F000003C00000E00000F000007800007800007C02007C0F807C0
+F807C0F807C0F00780400780400F00200E001C3C0003F000121F7E9D17>I<000600000600000E
+00000E00001E00002E00002E00004E00008E00008E00010E00020E00020E00040E00080E00080E
+00100E00200E00200E00400E00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E
+0000FFE0141E7F9D17>I<1803001FFE001FFC001FF8001FE00010000010000010000010000010
+000010000011F000161C00180E001007001007800003800003800003C00003C00003C07003C0F0
+03C0F003C0E00380400380400700200600100E000C380003E000121F7E9D17>I<007C00018200
+0701000E03800C07801C0780380300380000780000700000700000F1F000F21C00F40600F80700
+F80380F80380F003C0F003C0F003C0F003C0F003C07003C07003C0700380380380380700180700
+0C0E00061C0001F000121F7E9D17>I<4000007FFFC07FFF807FFF804001008002008002008004
+0000080000080000100000200000200000400000400000C00000C00001C0000180000380000380
+00038000038000078000078000078000078000078000078000078000030000121F7D9D17>I<03
+F0000C0C001006003003002001806001806001806001807001807803003E03003F06001FC8000F
+F00003F80007FC000C7E00103F00300F806003804001C0C001C0C000C0C000C0C000C0C0008060
+01802001001002000C0C0003F000121F7E9D17>I<03F0000E18001C0C00380600380700700700
+700380F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C0
+03E3C0000380000380000380000700300700780600780E00700C002018001070000FC000121F7E
+9D17>I<70F8F8F8700000000000000000000070F8F8F87005147C930D>I<70F8F8F87000000000
+00000000000070F0F8F878080808101010202040051D7C930D>I<7FFFFFE0FFFFFFF000000000
+00000000000000000000000000000000000000000000000000000000FFFFFFF07FFFFFE01C0C7D
+9023>61 D<0FC0307040384038E03CF03CF03C603C0038007000E000C001800180010003000200
+020002000200020002000000000000000000000007000F800F800F8007000E207D9F15>63
+D<001F800000E0700001000800060006000800010008000100100F00802030C0402060404040C0
+202041C01C2041C01C2081801C1083801C1083801C1083801C1083801C1083801C1083801C1081
+801C1041C01C1041C01C1040C03C2020605C202030CC40100F0780080000000800000006000070
+010001C000E01F00001FF0001C207D9F23>I<000100000003800000038000000380000007C000
+0007C0000007C0000009E0000009E0000009E0000010F0000010F0000010F00000207800002078
+000020780000403C0000403C0000403C0000801E0000801E0000FFFE0001000F0001000F000100
+0F00020007800200078002000780040003C00E0003C01F0007E0FFC03FFE1F207F9F22>I<FFFF
+E0000F80380007801E0007801F0007800F0007800F8007800F8007800F8007800F8007800F8007
+800F0007801F0007801E0007803C0007FFF00007803C0007801E0007800F0007800F8007800780
+078007C0078007C0078007C0078007C0078007C00780078007800F8007800F0007801F000F803C
+00FFFFF0001A1F7E9E20>I<000FC040007030C001C009C0038005C0070003C00E0001C01E0000
+C01C0000C03C0000C07C0000407C00004078000040F8000000F8000000F8000000F8000000F800
+0000F8000000F8000000F8000000F8000000780000007C0000407C0000403C0000401C0000401E
+0000800E000080070001000380020001C0040000703800000FC0001A217D9F21>I<FFFFE0000F
+803C0007801E000780070007800380078003C0078001E0078001E0078001F0078000F0078000F0
+078000F8078000F8078000F8078000F8078000F8078000F8078000F8078000F8078000F8078000
+F0078000F0078000F0078001E0078001E0078003C0078003800780070007800E000F803C00FFFF
+E0001D1F7E9E23>I<FFFFFF000F800F0007800300078003000780010007800180078000800780
+008007800080078080800780800007808000078080000781800007FF8000078180000780800007
+8080000780800007808000078000200780002007800020078000400780004007800040078000C0
+078000C0078001800F800F80FFFFFF801B1F7E9E1F>I<FFFFFF000F800F000780030007800300
+078001000780018007800080078000800780008007800080078080000780800007808000078080
+000781800007FF8000078180000780800007808000078080000780800007800000078000000780
+000007800000078000000780000007800000078000000FC00000FFFE0000191F7E9E1E>I<000F
+E0200078186000E004E0038002E0070001E00F0000E01E0000601E0000603C0000603C0000207C
+00002078000020F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8007FFC
+F80003E0780001E07C0001E03C0001E03C0001E01E0001E01E0001E00F0001E0070001E0038002
+E000E0046000781820000FE0001E217D9F24>I<FFF8FFF80F800F8007800F0007800F0007800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007FF
+FF0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007
+800F0007800F0007800F0007800F0007800F000F800F80FFF8FFF81D1F7E9E22>I<FFFC0FC007
+800780078007800780078007800780078007800780078007800780078007800780078007800780
+07800780078007800780078007800FC0FFFC0E1F7F9E10>I<0FFFC0007C00003C00003C00003C
+00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C
+00003C00003C00003C00003C00003C00203C00F83C00F83C00F83C00F0380040780040700030E0
+000F800012207E9E17>I<FFFC0FFC0FC003E00780018007800100078002000780040007800800
+07801000078020000780400007808000078100000783000007878000078F80000793C0000791E0
+0007A1E00007C0F0000780F0000780780007803C0007803C0007801E0007801E0007800F000780
+078007800780078007C00FC007E0FFFC3FFC1E1F7E9E23>I<FFFE000FC0000780000780000780
+000780000780000780000780000780000780000780000780000780000780000780000780000780
+0007800007800007800207800207800207800207800607800407800407800C07801C0F807CFFFF
+FC171F7E9E1C>I<FF80001FF80F80001F800780001F0005C0002F0005C0002F0005C0002F0004
+E0004F0004E0004F000470008F000470008F000470008F000438010F000438010F000438010F00
+041C020F00041C020F00041C020F00040E040F00040E040F00040E040F000407080F000407080F
+000407080F000403900F000403900F000401E00F000401E00F000401E00F000E00C00F001F00C0
+1F80FFE0C1FFF8251F7E9E2A>I<FF803FF807C007C007C0038005E0010005E0010004F0010004
+78010004780100043C0100043C0100041E0100040F0100040F010004078100040781000403C100
+0401E1000401E1000400F1000400F1000400790004003D0004003D0004001F0004001F0004000F
+0004000700040007000E0003001F000300FFE001001D1F7E9E22>I<001F800000F0F00001C038
+0007801E000F000F000E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0F800
+01F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E07C
+0003E07C0003E03C0003C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0F000
+001F80001C217D9F23>I<FFFFE0000F80780007801C0007801E0007800F0007800F8007800F80
+07800F8007800F8007800F8007800F8007800F0007801E0007801C000780780007FFE000078000
+000780000007800000078000000780000007800000078000000780000007800000078000000780
+000007800000078000000FC00000FFFC0000191F7E9E1F>I<001F800000F0F00001C038000780
+1E000F000F000E0007001E0007803C0003C03C0003C07C0003E07C0003E0780001E0F80001F0F8
+0001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001E0780001E0
+7C0003E03C0003C03C0F03C01E1087800E2047000F204F0007A03E0001E0380000F0F010001FB0
+1000003010000038300000387000003FF000001FE000001FE000000FC0000007801C297D9F23>
+I<FFFF80000F80F0000780780007803C0007801E0007801E0007801F0007801F0007801F000780
+1F0007801E0007801E0007803C00078078000780F00007FF80000781C0000780E0000780F00007
+80700007807800078078000780780007807C0007807C0007807C0007807C0407807E0407803E04
+0FC01E08FFFC0F10000003E01E207E9E21>I<07E0800C1980100780300380600180600180E001
+80E00080E00080E00080F00000F000007800007F00003FF0001FFC000FFE0003FF00001F800007
+800003C00003C00001C08001C08001C08001C08001C0C00180C00380E00300F00600CE0C0081F8
+0012217D9F19>I<7FFFFFE0780F01E0600F0060400F0020400F0020C00F0030800F0010800F00
+10800F0010800F0010000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
+0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000001F800007FFFE001C1F7E9E21>I<FFFC3FF80FC007C0078003800780010007
+800100078001000780010007800100078001000780010007800100078001000780010007800100
+078001000780010007800100078001000780010007800100078001000780010007800100078001
+00038002000380020001C0020001C0040000E008000070180000382000000FC0001D207E9E22>
+I<FFF003FE1F8000F80F0000600F800060078000400780004003C0008003C0008003C0008001E0
+010001E0010001F0010000F0020000F0020000F806000078040000780400003C0800003C080000
+3C0800001E1000001E1000001F3000000F2000000F20000007C0000007C0000007C00000038000
+0003800000038000000100001F207F9E22>I<FFF07FF81FF01F800FC007C00F00078003800F00
+078001000F0007C00100078007C00200078007C00200078007C0020003C009E0040003C009E004
+0003C009E0040003E010F00C0001E010F0080001E010F0080001F02078080000F02078100000F0
+2078100000F0403C10000078403C20000078403C20000078C03E2000003C801E4000003C801E40
+00003C801E4000001F000F8000001F000F8000001F000F8000001E00078000000E00070000000E
+00070000000C000300000004000200002C207F9E2F>I<7FF83FF80FE00FC007C0070003C00200
+01E0040001F00C0000F0080000781000007C1000003C2000003E4000001E4000000F8000000F80
+00000780000003C0000007E0000005E0000009F0000018F8000010780000207C0000603C000040
+1E0000801F0001800F0001000780020007C0070003C01F8007E0FFE01FFE1F1F7F9E22>I<FFF0
+03FF1F8000F80F8000600780004007C0004003E0008001E0008001F0010000F0030000F8020000
+7C0400003C0400003E0800001E0800001F1000000FB0000007A0000007C0000003C0000003C000
+0003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C0000007C0
+00007FFE00201F7F9E22>I<7FFFF87C00F87000F06001E04001E0C003C0C003C0800780800F80
+800F00001E00001E00003C00003C0000780000F80000F00001E00001E00003C00403C004078004
+0F80040F000C1E000C1E00083C00183C0018780038F801F8FFFFF8161F7D9E1C>I<FEFEC0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FE
+FE072D7CA10D>I<080410082010201040204020804080408040B85CFC7EFC7E7C3E381C0F0E7B
+9F17>I<FEFE060606060606060606060606060606060606060606060606060606060606060606
+0606060606060606FEFE072D7FA10D>I<081020204040808080B8FCFC7C38060E7D9F0D>96
+D<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E001E0E00380E00780E
+00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317>I<0E0000FE00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000EC3800F01C00F00E00E
+00E00E00700E00700E00780E00780E00780E00780E00780E00780E00700E00700E00E00F00E00D
+01C00CC300083E0015207F9F19>I<03F80E0C1C1E381E380C70007000F000F000F000F000F000
+F00070007000380138011C020E0C03F010147E9314>I<000380003F8000038000038000038000
+038000038000038000038000038000038000038003E380061B801C078038038038038070038070
+0380F00380F00380F00380F00380F00380F003807003807003803803803807801C07800E1B8003
+E3F815207E9F19>I<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80
+F00000F00000F000007000007000003800801800800C010007060001F80011147F9314>I<007C
+00C6018F038F07060700070007000700070007000700FFF0070007000700070007000700070007
+0007000700070007000700070007000700070007007FF01020809F0E>I<0000E003E3300E3C30
+1C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033E000200000200000
+3000003000003FFE001FFF800FFFC03001E0600070C00030C00030C00030C000306000603000C0
+1C038003FC00141F7F9417>I<0E0000FE00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E3E000E43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16207F9F19>I<1C
+001E003E001E001C000000000000000000000000000E007E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000E0
+000000000000000000000000007007F000F0007000700070007000700070007000700070007000
+7000700070007000700070007000700070007000706070F060F0C061803F000C28829E0E>I<0E
+0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E
+03C00E03000E02000E04000E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E
+07000E07800E03800E03C00E03E0FFCFF815207F9F18>I<0E00FE000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E000E000E00FFE00B20809F0C>I<0E1F01F000FE618618000E81C81C000F00F00E000F00
+F00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E
+00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE0
+23147F9326>I<0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16147F9319>I<01F80007
+0E001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E070
+00E03801C03801C01C0380070E0001F80014147F9317>I<0E3E00FEC3800F01C00F00E00E00E0
+0E00F00E00700E00780E00780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C0
+0EC3000E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000151D7F9319>
+I<03E0800619801C05803C0780380380780380700380F00380F00380F00380F00380F00380F003
+807003807803803803803807801C0B800E138003E3800003800003800003800003800003800003
+80000380000380003FF8151D7E9318>I<0E78FE8C0F1E0F1E0F0C0E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E00FFE00F147F9312>I<1F9030704030C010C010C010E000
+78007F803FE00FF00070803880188018C018C018E030D0608F800D147E9312>I<020002000200
+060006000E000E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E080E080E
+080E080E080610031001E00D1C7F9B12>I<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C0
+0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC
+16147F9319>I<FF83F81E01E01C00C00E00800E00800E00800701000701000382000382000382
+0001C40001C40001EC0000E80000E80000700000700000700000200015147F9318>I<FF9FE1FC
+3C0780701C0300601C0380200E0380400E0380400E03C0400707C0800704C0800704E080038861
+000388710003C8730001D0320001D03A0000F03C0000E01C0000E01C0000601800004008001E14
+7F9321>I<7FC3FC0F01E00701C007018003810001C20000E40000EC00007800003800003C0000
+7C00004E000087000107000303800201C00601E01E01E0FF07FE1714809318>I<FF83F81E01E0
+1C00C00E00800E00800E008007010007010003820003820003820001C40001C40001EC0000E800
+00E800007000007000007000002000002000004000004000004000F08000F08000F10000620000
+3C0000151D7F9318>I<3FFF380E200E201C40384078407000E001E001C00380078007010E011E
+011C0338027006700EFFFE10147F9314>I<1C043F1863F080E00E047C9D17>126
+D<30307878F87C787830300E057C9E17>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300
+TeXDict begin
+%%EndSetup
+%%Page: 0 1
+bop 1589 -161 a FE(Ca)o(v)o(endish-HEP)16 b(88/11)783 99 y
+FD(FEYNMAN)411 387 y FC(A)k(L)491 379 y FB(a)519 387 y FC(T)552
+405 y(E)586 387 y(X)g(Routine)f(for)i(Generating)e(F)-5 b(eynman)18
+b(Diagrams)998 461 y FA(V)m(ersion)c(1.0)901 674 y FC(Mic)n(hael)k(Levine)920
+818 y(Oct.)27 b(21,)19 b(1988)-95 1754 y Fz(\007)p -95 1903
+2 133 v -95 1920 a(\006)-54 1754 y(\004)p -54 1903 V -54 1920
+a(\005)p -78 1920 9 2 v -78 1754 V -169 1720 a FE(PR)o(OTON)p
+-178 1844 83 4 v -178 1842 V -178 1840 V -178 1838 V -178 1836
+V -178 1834 V -178 1832 V -54 1837 208 2 v 128 1836 a Fy(-)p
+-54 1775 V 128 1774 a(-)128 1898 y(-)196 1815 y FE(Sp)q(ectators)p
+-54 1899 1038 2 v 1035 1848 2 2 v 1035 1873 a Fz(\011)p 1010
+1873 V 1087 1796 V 1087 1821 a(\011)p 1061 1821 V 1138 1744
+V 1138 1770 a(\011)p 1113 1770 V 1190 1692 V 1190 1718 a(\011)p
+1165 1718 V 1242 1640 V 1242 1666 a(\011)p 1217 1666 V 983
+1873 a(\013)p 983 1898 V 1009 1873 V 1035 1821 a(\013)p 1035
+1847 V 1060 1821 V 1087 1770 a(\013)p 1087 1795 V 1112 1770
+V 1138 1718 a(\013)p 1138 1743 V 1164 1718 V 1190 1666 a(\013)p
+1190 1691 V 1216 1666 V 1141 1787 a Fx(\015)s(;)14 b(W)1244
+1771 y Fw(\006)1274 1787 y Fx(;)g(Z)p 1243 1640 623 2 v 1540
+1639 a Fy(\033)1876 1652 y Fx(e)1201 1639 y Fy(@)1160 1598
+y(@)1118 1556 y(@)1077 1515 y(@)1035 1473 y(@)994 1432 y(@)952
+1390 y(@)911 1348 y(@)869 1307 y(@)828 1265 y(@)803 1241 y(@)1013
+1450 y(I)752 1193 y Fx(e;)h(\027)823 1200 y Fv(e)p 28 1902
+2 5 v 28 1945 a Fz(\022)p 70 1945 5 2 v 65 1940 2 5 v 65 1982
+a(\022)p 108 1982 5 2 v 103 1977 2 5 v 103 2020 a(\022)p 145
+2020 5 2 v 82 1936 2 1 v 82 1945 a(\001)p 75 1945 1 2 v 119
+1973 2 1 v 119 1982 a(\001)p 112 1982 1 2 v 65 1928 a(\003)p
+65 1935 2 1 v(\000)p 82 1935 V 75 1928 1 2 v 103 1966 a(\003)p
+103 1973 2 1 v -1 w(\000)p 119 1973 V 112 1966 1 2 v 156 2010
+2 1 v 156 2020 a(\001)p 148 2020 1 2 v 139 2003 a(\003)p 139
+2010 2 1 v(\000)p 156 2010 V 148 2003 1 2 v 326 2201 2 5 v
+326 2244 a(\022)p 368 2244 5 2 v 288 2164 2 5 v 288 2206 a(\022)p
+331 2206 5 2 v 251 2127 2 5 v 251 2169 a(\022)p 293 2169 5
+2 v 214 2089 2 5 v 214 2132 a(\022)p 256 2132 5 2 v 176 2052
+2 5 v 176 2094 a(\022)p 219 2094 5 2 v 139 2015 2 5 v 139 2057
+a(\022)p 181 2057 5 2 v 326 2190 a(\003)p 326 2197 2 1 v 335
+2190 1 2 v 288 2152 a(\003)p 288 2159 2 1 v 297 2152 1 2 v
+251 2115 a(\003)p 251 2122 2 1 v 260 2115 1 2 v 214 2078 a(\003)p
+214 2085 2 1 v 223 2078 1 2 v 176 2040 a(\003)p 176 2047 2
+1 v 185 2040 1 2 v 342 2190 a(\000)p 342 2197 2 1 v 342 2206
+a(\001)p 335 2206 1 2 v 335 2190 V 305 2152 a(\000)p 305 2160
+2 1 v 305 2169 a(\001)p 297 2169 1 2 v 297 2152 V 268 2115
+a(\000)p 268 2122 2 1 v 268 2132 a(\001)p 260 2132 1 2 v 260
+2115 V 230 2078 a(\000)p 230 2085 2 1 v 230 2094 a(\001)p 223
+2094 1 2 v 223 2078 V 193 2040 a(\000)p 193 2048 2 1 v 193
+2057 a(\001)p 185 2057 1 2 v 185 2040 V 415 2236 a(\010)p 415
+2261 2 2 v 390 2236 V -15 w(\010)p 450 2261 V 425 2236 V -15
+w(\010)p 485 2261 V 460 2236 V -15 w(\010)p 520 2261 V 495
+2236 V -14 w(\010)p 556 2261 V 531 2236 V 398 2259 2 1 v 398
+2268 a(\002)p 415 2259 V(\001)p 407 2268 1 2 v 433 2259 2 1
+v 1 w(\002)p 450 2259 V(\001)p 442 2268 1 2 v 469 2259 2 1
+v 2 w(\002)p 485 2259 V -1 w(\001)p 478 2268 1 2 v 504 2259
+2 1 v 2 w(\002)p 520 2259 V -1 w(\001)p 513 2268 1 2 v 539
+2259 2 1 v 2 w(\002)p 556 2259 V(\001)p 548 2268 1 2 v 398
+2236 a(\013)p 398 2261 2 2 v 424 2236 V -15 w(\013)p 433 2261
+V 459 2236 V -14 w(\013)p 469 2261 V 494 2236 V -15 w(\013)p
+504 2261 V 530 2236 V -15 w(\013)p 539 2261 V 565 2236 V -6
+w(\004)p 583 2252 2 1 v 567 2236 1 2 v 584 2253 12 2 v 364
+2262 2 2 v 364 2288 a(\012)p 390 2288 V 364 2297 V 364 2323
+a(\012)p 390 2323 V 364 2333 V 364 2358 a(\012)p 390 2358 V
+364 2368 V 364 2394 a(\012)p 390 2394 V 364 2403 V 364 2429
+a(\012)p 390 2429 V 396 2271 a(\000)p 396 2279 2 1 v 396 2288
+a(\001)p 389 2288 1 2 v 389 2271 V 396 2306 a(\000)p 396 2314
+2 1 v 396 2323 a(\001)p 389 2323 1 2 v 389 2306 V 396 2342
+a(\000)p 396 2349 2 1 v 396 2358 a(\001)p 389 2358 1 2 v 389
+2342 V 396 2377 a(\000)p 396 2384 2 1 v 396 2394 a(\001)p 389
+2394 1 2 v 389 2377 V 396 2412 a(\000)p 396 2420 2 1 v 396
+2429 a(\001)p 389 2429 1 2 v 389 2412 V 364 2271 a(\013)p 364
+2296 2 2 v 390 2271 V 364 2306 a(\013)p 364 2332 V 390 2306
+V 364 2342 a(\013)p 364 2367 V 390 2342 V 364 2377 a(\013)p
+364 2402 V 390 2377 V 364 2412 a(\013)p 364 2437 V 390 2412
+V 364 2438 2 1 v 364 2455 a(\006)p 382 2455 1 2 v 381 2466
+2 12 v 364 2236 a(\013)p 364 2261 2 2 v 390 2236 V 340 2507
+a Fy(\000)323 2525 y(\000)343 2505 y(\011)295 2543 y Fx(q)382
+2507 y Fy(@)399 2525 y(@)401 2527 y(I)446 2543 y FE(\026)-26
+b Fx(q)594 2252 y Fy(\000)611 2235 y(\000)593 2254 y(\022)656
+2204 y Fx(q)594 2294 y Fy(@)611 2311 y(@)614 2313 y(I)659 2342
+y FE(\026)g Fx(q)p 526 1902 2 5 v 526 1945 a Fz(\022)p 568
+1945 5 2 v 563 1940 2 5 v 563 1982 a(\022)p 606 1982 5 2 v
+601 1977 2 5 v 601 2020 a(\022)p 643 2020 5 2 v 580 1936 2
+1 v 580 1945 a(\001)p 572 1945 1 2 v 617 1973 2 1 v 617 1982
+a(\001)p 610 1982 1 2 v 563 1928 a(\003)p 563 1935 2 1 v(\000)p
+580 1935 V 572 1928 1 2 v 601 1966 a(\003)p 601 1973 2 1 v
+-1 w(\000)p 617 1973 V 610 1966 1 2 v 654 2010 2 1 v 654 2020
+a(\001)p 646 2020 1 2 v 637 2003 a(\003)p 637 2010 2 1 v(\000)p
+654 2010 V 646 2003 1 2 v 823 2201 2 5 v 823 2244 a(\022)p
+866 2244 5 2 v 786 2164 2 5 v 786 2206 a(\022)p 828 2206 5
+2 v 749 2127 2 5 v 749 2169 a(\022)p 791 2169 5 2 v 711 2089
+2 5 v 711 2132 a(\022)p 754 2132 5 2 v 674 2052 2 5 v 674 2094
+a(\022)p 716 2094 5 2 v 637 2015 2 5 v 637 2057 a(\022)p 679
+2057 5 2 v 823 2190 a(\003)p 823 2197 2 1 v 833 2190 1 2 v
+786 2152 a(\003)p 786 2159 2 1 v 795 2152 1 2 v 749 2115 a(\003)p
+749 2122 2 1 v 758 2115 1 2 v 711 2078 a(\003)p 711 2085 2
+1 v 721 2078 1 2 v 674 2040 a(\003)p 674 2047 2 1 v 683 2040
+1 2 v 840 2190 a(\000)p 840 2197 2 1 v 840 2206 a(\001)p 833
+2206 1 2 v 833 2190 V 803 2152 a(\000)p 803 2160 2 1 v 803
+2169 a(\001)p 795 2169 1 2 v 795 2152 V 765 2115 a(\000)p 765
+2122 2 1 v 765 2132 a(\001)p 758 2132 1 2 v 758 2115 V 728
+2078 a(\000)p 728 2085 2 1 v 728 2094 a(\001)p 721 2094 1 2
+v 721 2078 V 691 2040 a(\000)p 691 2048 2 1 v 691 2057 a(\001)p
+683 2057 1 2 v 683 2040 V 912 2236 a(\010)p 912 2261 2 2 v
+887 2236 V -14 w(\010)p 948 2261 V 923 2236 V -15 w(\010)p
+983 2261 V 958 2236 V -15 w(\010)p 1018 2261 V 993 2236 V -14
+w(\010)p 1054 2261 V 1028 2236 V 896 2259 2 1 v 896 2268 a(\002)p
+912 2259 V -1 w(\001)p 905 2268 1 2 v 931 2259 2 1 v 2 w(\002)p
+948 2259 V(\001)p 940 2268 1 2 v 966 2259 2 1 v 1 w(\002)p
+983 2259 V(\001)p 976 2268 1 2 v 1002 2259 2 1 v 2 w(\002)p
+1018 2259 V -1 w(\001)p 1011 2268 1 2 v 1037 2259 2 1 v 2 w(\002)p
+1054 2259 V(\001)p 1046 2268 1 2 v 896 2236 a(\013)p 896 2261
+2 2 v 922 2236 V -15 w(\013)p 931 2261 V 957 2236 V -15 w(\013)p
+966 2261 V 992 2236 V -14 w(\013)p 1002 2261 V 1027 2236 V
+-15 w(\013)p 1037 2261 V 1063 2236 V -6 w(\004)p 1081 2252
+2 1 v 1064 2236 1 2 v 1082 2253 12 2 v 862 2262 2 2 v 862 2288
+a(\012)p 888 2288 V 862 2297 V 862 2323 a(\012)p 888 2323 V
+862 2333 V 862 2358 a(\012)p 888 2358 V 862 2368 V 862 2394
+a(\012)p 888 2394 V 862 2403 V 862 2429 a(\012)p 888 2429 V
+894 2271 a(\000)p 894 2279 2 1 v 894 2288 a(\001)p 887 2288
+1 2 v 887 2271 V 894 2306 a(\000)p 894 2314 2 1 v 894 2323
+a(\001)p 887 2323 1 2 v 887 2306 V 894 2342 a(\000)p 894 2349
+2 1 v 894 2358 a(\001)p 887 2358 1 2 v 887 2342 V 894 2377
+a(\000)p 894 2384 2 1 v 894 2394 a(\001)p 887 2394 1 2 v 887
+2377 V 894 2412 a(\000)p 894 2420 2 1 v 894 2429 a(\001)p 887
+2429 1 2 v 887 2412 V 862 2271 a(\013)p 862 2296 2 2 v 888
+2271 V 862 2306 a(\013)p 862 2332 V 888 2306 V 862 2342 a(\013)p
+862 2367 V 888 2342 V 862 2377 a(\013)p 862 2402 V 888 2377
+V 862 2412 a(\013)p 862 2437 V 888 2412 V 862 2438 2 1 v 862
+2455 a(\006)p 880 2455 1 2 v 879 2466 2 12 v 862 2236 a(\013)p
+862 2261 2 2 v 888 2236 V 838 2507 a Fy(\000)821 2525 y(\000)841
+2505 y(\011)792 2543 y Fx(q)879 2507 y Fy(@)897 2525 y(@)899
+2527 y(I)944 2543 y FE(\026)g Fx(q)1092 2252 y Fy(\000)1109
+2235 y(\000)1091 2254 y(\022)1154 2204 y Fx(q)1092 2294 y Fy(@)1109
+2311 y(@)1112 2313 y(I)1157 2342 y FE(\026)g Fx(q)984 1940
+y Fy(@)1025 1981 y(@)1067 2023 y(@)1089 2045 y(@)1182 2020
+y Fz(\010)p 1182 2045 V 1157 2020 V -15 w(\010)p 1217 2045
+V 1192 2020 V -15 w(\010)p 1252 2045 V 1227 2020 V -14 w(\010)p
+1288 2045 V 1263 2020 V -15 w(\010)p 1323 2045 V 1298 2020
+V 1165 2043 2 1 v 1165 2052 a(\002)p 1182 2043 V(\001)p 1174
+2052 1 2 v 1201 2043 2 1 v 2 w(\002)p 1217 2043 V -1 w(\001)p
+1210 2052 1 2 v 1236 2043 2 1 v 2 w(\002)p 1252 2043 V -1 w(\001)p
+1245 2052 1 2 v 1271 2043 2 1 v 2 w(\002)p 1288 2043 V(\001)p
+1280 2052 1 2 v 1130 2020 a(\013)p 1130 2045 2 2 v 1156 2020
+V -15 w(\013)p 1165 2045 V 1191 2020 V -14 w(\013)p 1201 2045
+V 1226 2020 V -15 w(\013)p 1236 2045 V 1262 2020 V -15 w(\013)p
+1271 2045 V 1297 2020 V 1324 2046 12 2 v 1335 2045 a Fy(\000)1352
+2028 y(\000)1334 2047 y(\022)1396 1997 y Fx(q)1335 2087 y Fy(@)1352
+2104 y(@)1355 2106 y(I)1400 2135 y FE(\026)f Fx(q)1130 2087
+y Fy(@)1172 2128 y(@)1213 2170 y(@)1255 2211 y(@)1296 2253
+y(@)1323 2280 y(@)1470 2255 y Fz(\013)p 1470 2280 2 2 v 1496
+2255 V -85 w(\013)p 1435 2280 V 1460 2255 V -86 w(\013)p 1399
+2280 V 1425 2255 V -85 w(\013)p 1364 2280 V 1390 2255 V 1470
+2278 2 1 v 1470 2287 a(\002)p 1487 2278 V(\001)p 1479 2287
+1 2 v 1435 2278 2 1 v -69 w(\002)p 1451 2278 V -1 w(\001)p
+1444 2287 1 2 v 1399 2278 2 1 v -69 w(\002)p 1416 2278 V(\001)p
+1408 2287 1 2 v 1522 2255 a(\010)p 1522 2280 2 2 v 1497 2255
+V -86 w(\010)p 1486 2280 V 1461 2255 V -85 w(\010)p 1451 2280
+V 1426 2255 V -85 w(\010)p 1416 2280 V 1391 2255 V 1522 2235
+a(\023)p 1522 2280 2 5 v 1564 2235 5 2 v 1559 2198 a(\023)p
+1559 2242 2 5 v 1601 2198 5 2 v 1596 2160 a(\023)p 1596 2205
+2 5 v 1639 2160 5 2 v 1634 2123 a(\023)p 1634 2168 2 5 v 1676
+2123 5 2 v 1576 2235 a(\000)p 1576 2242 2 1 v 1568 2235 1 2
+v 1613 2198 a(\000)p 1613 2205 2 1 v 1606 2198 1 2 v 1650 2160
+a(\000)p 1650 2167 2 1 v 1643 2160 1 2 v 1559 2242 2 1 v 1559
+2251 a(\002)p 1576 2242 V(\001)p 1568 2251 1 2 v 1596 2205
+2 1 v 1596 2214 a(\002)p 1613 2205 V(\001)p 1606 2214 1 2 v
+1634 2168 2 1 v 1634 2177 a(\002)p 1650 2168 V -1 w(\001)p
+1643 2177 1 2 v 1521 2284 2 5 v 1521 2326 a(\022)p 1564 2326
+5 2 v 1559 2321 2 5 v 1559 2363 a(\022)p 1601 2363 5 2 v 1596
+2358 2 5 v 1596 2401 a(\022)p 1638 2401 5 2 v 1633 2396 2 5
+v 1633 2438 a(\022)p 1676 2438 5 2 v 1575 2317 2 1 v 1575 2326
+a(\001)p 1568 2326 1 2 v 1613 2354 2 1 v 1613 2364 a(\001)p
+1605 2364 1 2 v 1650 2392 2 1 v 1650 2401 a(\001)p 1642 2401
+1 2 v 1559 2310 a(\003)p 1559 2317 2 1 v -1 w(\000)p 1575 2317
+V 1568 2310 1 2 v 1596 2347 a(\003)p 1596 2354 2 1 v(\000)p
+1613 2354 V 1605 2347 1 2 v 1633 2384 a(\003)p 1633 2391 2
+1 v(\000)p 1650 2391 V 1642 2384 1 2 v 1677 2520 2 83 v 1679
+2493 a Fy(?)1667 2547 y Fx(q)p 1678 2438 83 2 v 1706 2437 a
+Fy(\033)1767 2448 y FE(\026)h Fx(q)p 1679 2122 2 83 v 1681
+2108 a Fy(6)1670 2023 y Fx(q)p 1680 2123 83 2 v 1708 2122 a
+Fy(\033)1769 2132 y FE(\026)g Fx(q)1365 2321 y Fy(@)1406 2363
+y(@)1448 2404 y(@)1489 2446 y(@)1531 2487 y(@)1572 2529 y(@)1614
+2570 y(@)1656 2612 y(@)1675 2632 y(@)1510 2466 y(R)1721 2659
+y Fx(q)p eop
+%%Page: 1 2
+bop 728 -53 a FD(Dedication)434 235 y FC(This)20 b(Routine)g(is)f(dedicated)g
+(to)h(the)g(memory)d(of)611 310 y(Professor)i(Ric)n(hard)h(P)-5
+b(.)19 b(F)-5 b(eynman)595 385 y(who)20 b(died)g(on)g(F)-5
+b(ebruary)20 b(15,)f(1988.)1002 2906 y FE(i)p eop
+%%Page: 2 3
+bop 74 249 a FD(Con)m(ten)m(ts)74 517 y Fu(1)42 b(In)o(tro)q(duction)1487
+b(1)142 574 y FE(1.1)46 b(What)14 b(is)i(FEYNMAN?)42 b Fx(:)22
+b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)88 b FE(1)142
+630 y(1.2)46 b(What)14 b(is)i(L)432 624 y Ft(a)453 630 y FE(T)478
+644 y(E)504 630 y(X?)21 b Fx(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)88 b FE(1)142 687 y(1.3)46 b(Ho)o(w)14 b(is)i(FEYNMAN)f
+(used?)34 b Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)88
+b FE(1)142 743 y(1.4)46 b(Ho)o(w)14 b(do)q(es)i(FEYNMAN)f(w)o(ork?)38
+b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)88 b FE(2)142 799
+y(1.5)46 b(The)15 b(Basics)47 b Fx(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)88 b FE(2)142 856 y(1.6)46
+b(Getting)15 b(Started)k Fx(:)k(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)88 b FE(3)74 958 y Fu(2)42 b(Dra)o(wing)18
+b(Lines)1444 b(5)142 1014 y FE(2.1)46 b(The)15 b Fs(n)p FE(dra)o(wline)h
+(Command)42 b Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)88
+b FE(5)142 1071 y(2.2)46 b(The)15 b(T)o(yp)q(es)h(of)e(P)o(article)i(Lines)29
+b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)88 b FE(6)142
+1127 y(2.3)46 b(P)o(article)16 b(Direction)h Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)88 b FE(7)142 1184 y(2.4)46
+b(Line)17 b(Con\014guration)29 b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)88 b FE(7)142 1240 y(2.5)46 b(Line)17 b(Co-ordinate)e(P)o
+(arameters)38 b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)88 b
+FE(8)247 1297 y(2.5.1)50 b(Input)16 b(P)o(arameters)e Fx(:)23
+b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)88 b FE(8)247 1353
+y(2.5.2)50 b(Output)16 b(P)o(arameters)d Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)88 b FE(9)142 1410 y(2.6)46 b(Line)17 b(Length)22
+b Fx(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)66 b FE(10)247 1466 y(2.6.1)50 b(Input)16 b(P)o(arameters)e
+Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(10)247
+1522 y(2.6.2)50 b(Output)16 b(P)o(arameters)d Fx(:)22 b(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)66 b FE(11)142 1579 y(2.7)46 b(F)l(ermions)12
+b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)66 b FE(12)142 1635 y(2.8)46 b(Scalars)18 b
+Fx(:)k(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)66 b FE(13)247 1692 y(2.8.1)50 b(The)16 b(Anatom)o(y)e(of)h(a)g
+(Scalar)39 b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(13)247
+1748 y(2.8.2)50 b(Adjusting)16 b(the)f(Spacing)30 b Fx(:)23
+b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(13)142 1805 y(2.9)46
+b(Photons)29 b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(15)247 1861 y(2.9.1)50 b(The)16
+b(Anatom)o(y)e(of)h(a)g(Photon)g Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(15)247 1918 y(2.9.2)50 b(Examples)16 b(and)f(Details)38
+b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(16)142 1974
+y(2.10)23 b(Gluons)18 b Fx(:)k(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(20)247 2031 y(2.10.1)27
+b(Anatom)o(y)15 b(of)f(a)h(Gluon)27 b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)66 b FE(20)247 2087 y(2.10.2)27 b(Examples)16 b(and)f(Details)38
+b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(21)142 2143
+y(2.11)23 b(Arro)o(ws)14 b(and)h(Lab)q(els)32 b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(26)247 2200 y(2.11.1)27
+b(Arro)o(ws)45 b Fx(:)23 b(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)66 b FE(26)247 2256 y(2.11.2)27 b(Lab)q(els)f Fx(:)c(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b
+FE(29)142 2313 y(2.12)23 b(Review)16 b(Exercise)g(for)f(Chapter)g(Tw)o(o)g
+Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(29)74 2415 y Fu(3)42
+b(Dra)o(wing)18 b(V)l(ertices)1353 b(30)142 2471 y FE(3.1)46
+b(The)15 b Fs(n)p FE(dra)o(wv)o(ertex)f(Command)25 b Fx(:)d(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)66 b FE(30)142 2528 y(3.2)46 b(The)15 b(T)o(yp)q(es)h(of)e
+(V)l(ertex)i(Lines)h Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)
+f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(31)142 2584 y(3.3)46 b(P)o(article)16 b(Direction)h Fx(:)22
+b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(31)142 2641 y(3.4)46 b(The)15 b(Num)o(b)q(er)h(of)f(Lines)h
+Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(32)142 2697 y(3.5)46 b(Line)17 b(Co-ordinate)e(P)o(arameters)38
+b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(32)247 2753
+y(3.5.1)50 b(Input)16 b(P)o(arameters)e Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)66 b FE(32)996 2906 y(ii)p eop
+%%Page: 3 4
+bop 247 -83 a FE(3.5.2)50 b(Output)16 b(P)o(arameters)d Fx(:)22
+b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(32)142 -26 y(3.6)46
+b(V)l(ertex)15 b(Line)i(Lengths)36 b Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)66 b FE(34)142 30 y(3.7)46 b(Flipp)q(ed)17
+b(V)l(ertices)46 b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)66 b FE(35)142 87 y(3.8)46 b(Photon)15 b(V)l(ertices)i
+Fx(:)23 b(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(37)247 143 y(3.8.1)50 b(The)16 b(Anatom)o(y)e(of)h(a)g(Photon)f(V)l
+(ertex)e Fx(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(37)247 199 y(3.8.2)50 b(Examples)16
+b(and)f(Details)38 b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(37)142 256 y(3.9)46 b(Gluon)16 b(V)l(ertices)40 b Fx(:)23
+b(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(40)247 312 y(3.9.1)50 b(The)16 b(Anatom)o(y)e(of)h(a)g(Gluon)g(V)l
+(ertex)35 b Fx(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(40)247 369 y(3.9.2)50 b(Examples)16
+b(and)f(Details)38 b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)
+f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(40)74 471 y Fu(4)42 b(Adv)m(anced)18 b(F)l(eatures)1312
+b(44)142 527 y FE(4.1)46 b(Placing)16 b(It)f(Where)h(Y)l(ou)f(W)l(an)o(t)g
+(It)45 b Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(44)247
+584 y(4.1.1)50 b(Arithmetic)17 b(Op)q(erations:)j(Manipulating)d(Returned)f
+(P)o(arameters)23 b Fx(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(44)247
+640 y(4.1.2)50 b(Phan)o(tom)15 b(Commands)h Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)66 b FE(48)142 697 y(4.2)46 b(Storing)15 b(and)g(Re-Using)i(Items)
+27 b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(50)247
+753 y(4.2.1)50 b(Storing)16 b(and)f(Re-Using)i(Information)39
+b Fx(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)66 b FE(50)247 809 y(4.2.2)50 b(Storing)16 b(and)f(Re-Using)i
+(Pictures)41 b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(51)142 866 y(4.3)46
+b(Links,)16 b(Stems)f(and)g(Caps)j Fx(:)k(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)66 b FE(56)247 922 y(4.3.1)50 b(Gluon)16 b(Links)f
+Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(56)247 979 y(4.3.2)50 b(Stems)34 b Fx(:)22 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(58)247 1035
+y(4.3.3)50 b(Capp)q(ed)16 b(Gluons)23 b Fx(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)66 b FE(62)142 1092 y(4.4)46 b(Lo)q(ops)39 b
+Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)66 b FE(64)247 1148 y(4.4.1)50 b(Non-cen)o(tral)16
+b(Lo)q(ops)35 b Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(64)247 1205 y(4.4.2)50 b(Cen)o(tral)15 b(Lo)q(ops)f Fx(:)22
+b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(66)142
+1261 y(4.5)46 b(Review)16 b(Exercises)g(for)f(Chapter)g(4)27
+b Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(67)74 1363 y
+Fu(A)28 b(Solution)20 b(to)d(Exercises)1267 b(68)142 1419 y
+FE(A.1)35 b(Exercises)16 b(for)e(section)i(2.9.2)33 b Fx(:)22
+b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(68)142 1476
+y(A.2)35 b(Exercises)16 b(for)e(section)i(2.10.2)45 b Fx(:)22
+b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(69)142 1532 y(A.3)35
+b(Exercise)16 b(for)e(section)i(2.12)28 b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)66 b FE(69)142 1589 y(A.4)35 b(Exercise)16
+b(for)e(section)i(3.8)g Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)66 b FE(70)142 1645 y(A.5)35 b(Exercises)16 b(for)e(section)i(4.1.1)33
+b Fx(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(71)142
+1702 y(A.6)35 b(Exercises)16 b(for)e(section)i(4.1.2)33 b Fx(:)22
+b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(72)142 1758
+y(A.7)35 b(Exercise)16 b(for)e(section)i(4.3.2)f Fx(:)23 b(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)66 b FE(73)142 1815 y(A.8)35 b(Exercises)16
+b(for)e(Section)j(4.3.3)25 b Fx(:)d(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(73)142 1871 y(A.9)35 b(Exercises)16 b(for)e(section)i(4.5)33
+b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b
+FE(75)74 1973 y Fu(B)31 b(Syn)o(tax)17 b(and)h(F)l(eatures)1278
+b(77)142 2029 y FE(B.1)37 b(Lines)18 b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(77)247 2086 y(B.1.1)41 b(Argumen)o(ts)15 b(and)g(Syn)o(tax)g(of)g(the)g
+Fs(n)p FE(dra)o(wline)h(command)35 b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)h(:)66 b FE(77)247 2142 y(B.1.2)41 b(Line)17 b(Mo)q(di\014ers)44
+b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(77)142 2199 y(B.2)37 b(V)l(ertices)f Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b
+FE(78)247 2255 y(B.2.1)41 b(Argumen)o(ts)15 b(and)g(Syn)o(tax)g(of)g(the)g
+Fs(n)p FE(dra)o(wv)o(ertex)f(command)k Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)66 b FE(78)247 2312 y(B.2.2)41 b(V)l(ertex)16 b(Mo)q(di\014ers)35
+b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b
+FE(78)142 2368 y(B.3)37 b(Returned)16 b(P)o(arameters)e Fx(:)22
+b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(79)142
+2425 y(B.4)37 b(Arro)o(ws)14 b(and)h(Lo)q(ops)41 b Fx(:)23
+b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b
+FE(80)247 2481 y(B.4.1)41 b Fs(n)p FE(dra)o(w)o(arro)o(w)25
+b Fx(:)e(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(80)247 2538 y(B.4.2)41 b Fs(n)p FE(dra)o(wlo)q(op)19 b
+Fx(:)j(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(81)142 2594 y(B.5)37 b(Placemen)o(t)15 b(and)h(Storage)e(F)l(eatures)45
+b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(81)989 2906 y(iii)p
+eop
+%%Page: 4 5
+bop 74 -83 a Fu(C)30 b(Errors)1601 b(83)142 -26 y FE(C.1)36
+b(Option)16 b(Errors)i Fx(:)k(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)h(:)66 b FE(83)142 30 y(C.2)36 b(Unexp)q(ected)17
+b(Results)f(and)f(Other)h(Errors)38 b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(84)142 87 y(C.3)36 b(T)272 96 y(E)297 87 y(X)16 b(Capacit)o(y)f
+(Exceeded)33 b Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66
+b FE(85)247 143 y(C.3.1)40 b(Exhausting)16 b(In)o(ternal)g(Storage)f
+Fx(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(86)247 199 y(C.3.2)40 b(Exhausting)16
+b(Memory)e(Size)46 b Fx(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)66 b FE(86)990
+2906 y(iv)p eop
+%%Page: 1 6
+bop 74 229 a Fr(Chapter)34 b(1)74 436 y FD(In)m(tro)s(duction)74
+677 y Fq(1.1)70 b(What)23 b(is)f(FEYNMAN?)74 778 y Fp(FEYNMAN)11
+b FE(is)g(a)f(L)468 772 y Ft(a)489 778 y FE(T)514 792 y(E)540
+778 y(X)g(macropac)o(k)m(age)g(whic)o(h)i(allo)o(ws)e(the)h(user)g(to)e
+(easily)j(dra)o(w)e(F)l(eynman)g(diagrams)74 835 y(as)15 b(part)g(of)f(the)i
+(text)e(of)h(a)g(L)555 829 y Ft(a)576 835 y FE(T)601 848 y(E)627
+835 y(X)g(do)q(cumen)o(t.)74 978 y Fq(1.2)70 b(What)23 b(is)f
+FC(L)507 970 y FB(a)535 978 y FC(T)568 996 y(E)602 978 y(X)p
+Fq(?)74 1079 y FE(L)86 1073 y Ft(a)107 1079 y FE(T)132 1093
+y(E)158 1079 y(X)12 b(is)g(a)g(T)306 1089 y(E)331 1079 y(X)g(macropac)o(k)m
+(age,)g(that)f(is)h(a)g(collection)i(of)d(de\014nitions)j(and)e(subroutines,)
+h(whic)o(h)g(mo)q(di\014es)74 1136 y(and)j(expands)g(up)q(on)h(the)e(basic)i
+(T)673 1146 y(E)698 1136 y(X)f(commands)f(b)o(y)h(establishing)h(a)e(series)i
+(of)e Fo(envir)n(onments)p FE(.)k(In)e(y)o(our)74 1192 y(input)f(do)q(cumen)o
+(t)g(these)f(en)o(vironmen)o(ts)h(ha)o(v)o(e)f(the)g(form)737
+1286 y Fs(n)p FE(b)q(egin)p Fs(f)p FE(en)o(vironmen)o(t)h(name)p
+Fs(g)1002 1331 y FE(.)1002 1348 y(.)1002 1364 y(.)755 1421
+y Fs(n)p FE(end)p Fs(f)p FE(en)o(vironmen)o(t)g(name)p Fs(g)74
+1514 y FE(The)g(ab)q(o)o(v)o(e)e(w)o(as)h(pro)q(duced)h(in)g(the)f
+Fo(c)n(enter)g FE(en)o(vironmen)o(t.)145 1570 y Fp(FEYNMAN)c
+FE(op)q(erates)h(in)g(the)f Fo(pictur)n(e)h FE(en)o(vironmen)o(t.)19
+b(F)l(or)10 b(full)j(details)f(ab)q(out)f(this)h(en)o(vironmen)o(t,)74
+1627 y(or)j(L)142 1621 y Ft(a)163 1627 y FE(T)188 1641 y(E)213
+1627 y(X)g(in)h(general,)f(the)g(L)574 1621 y Ft(a)595 1627
+y FE(T)620 1641 y(E)646 1627 y(X)g(User's)f(Guide)i(and)f(Reference)h(Man)o
+(ual)f(b)o(y)g(Leslie)i(Lamp)q(ort)e(is)g(most)74 1683 y(highly)i
+(recommended.)j(A)c(basic)g(familiarit)o(y)g(with)f(L)1017
+1677 y Ft(a)1038 1683 y FE(T)1063 1697 y(E)1089 1683 y(X)g(will)i(b)q(e)f
+(assumed)f(in)h(this)g(man)o(ual.)74 1827 y Fq(1.3)70 b(Ho)n(w)23
+b(is)f(FEYNMAN)h(used?)74 1928 y FE(Prior)13 b(to)f(en)o(tering)i(the)f
+(picture)h(en)o(vironmen)o(t)f(to)g(dra)o(w)f(a)h(F)l(eynman)g(diagram)g(the)
+g(user)g(m)o(ust)1740 1912 y Fn(1)1772 1928 y FE(issue)h(the)74
+1984 y(statemen)o(t)817 2078 y Fs(n)p FE(input)i(FEYNMAN)74
+2171 y(This)23 b(ma)o(y)f(b)q(e)h(included)i(at)d(the)h(b)q(eginning)h(of)e
+(the)h(do)q(cumen)o(t)g(\(follo)o(wing)g Fs(n)p FE(b)q(egin)p
+Fs(f)p FE(do)q(cumen)o(t)p Fs(g)p FE(\))g(or)74 2228 y(immediately)17
+b(preceeding)g(the)e(\014rst)g(usage)g(of)g Fp(FEYNMAN)g FE(as)g(in)817
+2321 y Fs(n)p FE(input)h(FEYNMAN)851 2378 y Fs(n)p FE(b)q(egin)p
+Fs(f)p FE(picture)p Fs(g)1002 2423 y FE(.)1002 2440 y(.)1002
+2456 y(.)869 2513 y Fs(n)p FE(end)p Fs(f)p FE(picture)p Fs(g)74
+2606 y FE(Of)j(course)g(normal)g(picture)h(en)o(vironmen)o(t)f(commands)f(ma)
+o(y)g(b)q(e)i(used)f(in)h(conjunction)g(with)f(those)g(of)74
+2662 y Fp(FEYNMAN)p FE(.)p 74 2693 748 2 v 126 2720 a Fm(1)143
+2736 y Fl(This)d(is)g(true)f(at)g(the)g(time)g(whic)o(h)h(this)g(do)q(cumen)o
+(t)g(is)g(b)q(eing)g(prepared)h(for)d(the)i(Ca)o(v)o(endish)g(Lab)q
+(oratories)h(HEP)e(V)m(ax)74 2781 y(system,)e(Cam)o(bridge,)h(England.)997
+2906 y FE(1)p eop
+%%Page: 2 7
+bop 74 -83 a Fq(1.4)70 b(Ho)n(w)23 b(do)r(es)g(FEYNMAN)g(w)n(ork?)74
+19 y FE(Basically)15 b Fp(FEYNMAN)f FE(pieces)h(together)e(mathematical)g
+(sym)o(b)q(ols)h(and)g(sp)q(ecial)h(c)o(haracters)e(in)h(order)74
+75 y(to)21 b(dra)o(w)f(the)i(lines)g(and)g(v)o(ertices)f(of)g(F)l(eynman)g
+(diagrams.)38 b(If)22 b(y)o(ou)e(are)h(not)g(familiar)h(with)g(what)e(a)74
+132 y(F)l(eynman)f(diagram)f(is)g(y)o(ou)g(probably)h(do)f(not)g(need)h(to)f
+(use)h(this)f(pac)o(k)m(age)g(in)i(an)o(y)d(ev)o(en)o(t.)29
+b(L)1752 126 y Ft(a)1773 132 y FE(T)1798 145 y(E)1824 132 y(X)18
+b(has)74 188 y(de\014ned)f(a)e(n)o(um)o(b)q(er)g(of)g(new)h(c)o(haracter)e
+(fon)o(ts.)20 b(The)15 b(ones)g(whic)o(h)i(are)e(used)g(in)h(this)g(macropac)
+o(k)m(age)f(dra)o(w)74 244 y(pieces)20 b(of)e(lines)h(and)g(circles.)30
+b(These)19 b(are)f(then)g(pieced)i(together)e(in)h(certain)f(mo)q(dular)h
+(con\014gurations)74 301 y(and)d(stored)e(with)i(the)f Fo(saveb)n(ox)g
+FE(facilit)o(y)h(of)f(L)857 295 y Ft(a)878 301 y FE(T)903 315
+y(E)929 301 y(X.)g(These)g(pieces)i(are)e(in)h(turn)f(used)h(to)f(construct)g
+(more)74 357 y(complicated)g(structures)e(and)g(so)g(forth.)19
+b(Only)14 b(the)g(basic)g(L)1117 351 y Ft(a)1138 357 y FE(T)1163
+371 y(E)1188 357 y(X)g(fon)o(ts)e(are)h(required,)i(not)e(the)g(extended)74
+414 y(sets.)145 470 y(This)18 b(latter)f(p)q(oin)o(t)h(w)o(as)f(instituted)i
+(to)e(p)q(ermit)h(greater)f(compatibilit)o(y)i(with)f(other)f(systems.)27
+b(The)74 527 y(disadv)m(an)o(tage)19 b(is)g(that)e(the)i(basic)g(set)f(has)g
+(an)h(extremely)g(limited)h(range)e(of)g(c)o(haracters)f(to)h(pla)o(y)h(with)
+74 583 y(and)c(th)o(us)f(there)h(is)g(little)h(scop)q(e)f(for)f(adjusting)h
+(the)g(size)g(and)g(shap)q(e)g(of)f(particle)i(lines)g(whic)o(h)g(one)e(migh)
+o(t)74 640 y(wish)j(to)f(b)q(e)g(b)q(e)h(dra)o(wn.)23 b(F)l(or)15
+b(instance)i(there)g(are)f(only)g(ten)h(di\013eren)o(t)f(sized)i(circles)f
+(and)g(the)f(minim)o(um)74 696 y(length)f(of)f(a)g(diagonal)g(line)i(is)f(ab)
+q(out)f(half)g(a)g(cen)o(timeter.)20 b(A)14 b(further)g(de\014ciency)j(of)c
+(standard)h(L)1764 690 y Ft(a)1785 696 y FE(T)1810 710 y(E)1836
+696 y(X)g(\(or)74 753 y(T)99 762 y(E)125 753 y(X)f(for)g(that)g(matter\))f
+(implemen)o(tations)j(is)f(the)f(small)i(amoun)o(t)d(of)h(in)o(ternal)i(w)o
+(orking)e(space)h(whic)o(h)g(the)74 809 y(program)i(p)q(ermits.)25
+b(This)17 b(restricts)g(the)g(v)o(olume)g(of)f(text)h(whic)o(h)g(ma)o(y)f(b)q
+(e)i(pro)q(cessed)f(at)f(a)h(time.)25 b(Since)74 865 y Fp(FEYNMAN)15
+b FE(eats)e(up)h(a)g(lot)g(of)g(in)o(ternal)g(memory)l(,)g(and)g(a)g(great)f
+(deal)h(more)g(is)g(required)h(to)f(store)f(the)74 922 y(p)q(ositions)j(of)e
+(all)i(of)f(the)g(individual)j(sym)o(b)q(ols)d(whic)o(h)h(go)e(in)o(to)h(dra)
+o(wing)g(a)f(complicated)i(diagram,)f(one)g(is)74 978 y(restricted)j(in)g
+(the)f(maxim)o(um)h(size)g(and)g(complexit)o(y)g(of)f(picture)h(whic)o(h)g
+(ma)o(y)f(b)q(e)h(dra)o(wn.)26 b(This,)18 b(and)f(a)74 1035
+y(p)q(ossible)g(remedy)l(,)e(will)i(b)q(e)f(further)f(discussed)i(in)f(the)f
+(ERR)o(ORS)i(section)f(at)e(the)i(end.)74 1178 y Fq(1.5)70
+b(The)22 b(Basics)74 1280 y FE(This)h(man)o(ual)f(is)h(divided)h(in)o(to)f
+(essen)o(tially)g(three)g(sections.)41 b(The)23 b(\014rst)e(\(c)o(hapters)h
+(t)o(w)o(o)f(and)h(three\))74 1336 y(illustrates)e(the)f(basic)h(commands)f
+(for)f(dra)o(wing)h(particle)h(lines)h(and)e(v)o(ertices.)32
+b(The)19 b(second)h(\(c)o(hapter)74 1392 y(four\))d(details)i(some)f(adv)m
+(anced)g(features)g(and)g(uses.)28 b(The)18 b(third)g(consists)g(of)g(v)m
+(arious)g(app)q(endices)i(and)74 1449 y(the)15 b(solutions)h(to)f(problems)h
+(p)q(osed)f(at)g(random)g(throughout.)145 1505 y(In)h(the)g
+Fo(pictur)n(e)h(mo)n(de)f FE(of)g(L)616 1499 y Ft(a)637 1505
+y FE(T)662 1519 y(E)688 1505 y(X,)f(in)i(whic)o(h)g Fp(FEYNMAN)f
+FE(op)q(erates,)f(a)h Fo(grid)g FE(is)g(established)i(with)74
+1562 y(Cartesian)e(\()p Fx(x;)8 b(y)r FE(\))14 b(co-ordinates)i(on)g(whic)o
+(h)h(the)f(picture)h(is)g(dra)o(wn.)k(The)c(scale)f(of)g(the)g(grid)g(is)h
+(normally)74 1618 y(user-de\014ned)f(but)f Fp(FEYNMAN)g FE(utilizes)h(a)e
+(default)h(grid)g(size)h(in)f(whic)o(h)g(all)h(distances)f(are)f(measured)74
+1675 y(in)j Fu(cen)o(tip)q(oin)o(ts)p FE(.)25 b(One)17 b(cen)o(tip)q(oin)o(t)
+g(is)g(1/7227)e(of)h(an)g(inc)o(h)h(or)f(0.14)f(mils)j(or)d(0.0035)g
+(millimeters)j(or)e(3.5)74 1731 y(microns.)k(This)13 b(is)g(an)g(exceedingly)
+i(small)f(measure)e(but)h(there)g(is)g(a)g(reason)f(for)g(this.)20
+b(All)14 b(n)o(um)o(b)q(ers)f(input)74 1788 y(to)g Fp(FEYNMAN)p
+FE('s)h(parameters,)f(in)i(particular)f(lengths)g(and)g(p)q(ositions,)h(m)o
+(ust)e(b)q(e)i(in)o(tegers.)k(Y)l(ou)14 b(will)74 1844 y(probably)20
+b(\014nd)f(it)g(most)f(con)o(v)o(enien)o(t)h(to)g(think)g(of)f(lengths)i(in)f
+(terms)g(of)f(thousands)h(of)f(cen)o(tip)q(oin)o(ts;)j(a)74
+1901 y(thousand)d(cen)o(tip)q(oin)o(ts)h(equalling)h(one)e(sev)o(en)o(th)g
+(of)g(an)g(inc)o(h)h(or)e(one)h(third)h(of)e(a)h(cen)o(timeter.)29
+b(The)18 b(ey)o(e)74 1957 y(is)f(quite)g(capable)h(of)e(detecting)h
+(displacemen)o(ts)h(of)e(one)g(cen)o(tip)q(oin)o(t)i(\(or)e(ev)o(en)h(less\))
+f(ev)o(en)h(if)g(the)g(system)74 2013 y(prin)o(ter)h(is)f(incapable)i(of)e
+(suc)o(h)g(resolution.)27 b(Prin)o(ters)17 b(will,)i(ho)o(w)o(ev)o(er,)d
+(round)i(p)q(ositions)g(to)e(the)h(nearest)74 2070 y(pixel)g(and)e(accurate)g
+(p)q(ositioning)i(will)g(aid)f(correct)f(rounding.)145 2126
+y(When)20 b(dra)o(wing)h(a)e(F)l(eynman)i(diagram)f(the)g(user)g(should)i(ha)
+o(v)o(e)e(a)f(rough)h(sk)o(etc)o(h)g(of)g(the)h(picture,)74
+2183 y(including)i(lab)q(elling,)h(arro)o(ws)18 b Fo(etc.)j
+FE(He)f(or)g(she)g(should)h(then)g(select)g(a)f Fo(b)n(ox)g(size)p
+FE(,)g(in)h(cen)o(tip)q(oin)o(ts,)h(in)o(to)74 2239 y(whic)o(h)e(the)e
+(picture)i(should)f(b)q(e)h(placed.)31 b(This)19 b(will)h(determine)g(size)f
+(of)g(the)f(blo)q(c)o(k)i(allo)q(cated)f(on)g(y)o(our)74 2296
+y(page,)h(p)q(ossibly)g(b)q(et)o(w)o(een)f(text,)g(equations)h(or)e(other)h
+(pictures,)h(whic)o(h)g(will)h(b)q(e)e(giv)o(en)h(to)e(the)h(curren)o(t)74
+2352 y(picture.)i(One)16 b(then)f(issues)i(the)e(command:)74
+2409 y Fs(n)p FE(b)q(egin)p Fs(f)p FE(picture)p Fs(g)p FE(\(7000,7000\))74
+2465 y(whic)o(h)g(en)o(ters)e(picture)i(mo)q(de)e(and)h(sets)f(the)h(b)q(o)o
+(x)g(size)g(to)f(b)q(e)h(7000)7 b Fs(\002)g FE(7000,)12 b(or)h(roughly)h(1)f
+(inc)o(h)i(b)o(y)e(1)g(inc)o(h.)74 2522 y(An)o(y)g(b)q(o)o(x)g(size)h(ma)o(y)
+e(b)q(e)h(used,)h(up)f(to)f(the)h(declared)h(size)g(of)e(the)h(page.)19
+b(When)13 b Fp(FEYNMAN)h FE(is)f(input)h(it)74 2578 y(automatically)g(sets)e
+(the)h(scale)h(and)f(this)h(will)g(b)q(e)g(retained)f(unless)i(re-de\014ned)f
+(b)o(y)f(the)g(user.)19 b Fo(This)14 b(c)n(annot)74 2634 y(b)n(e)i(done)g
+(while)g Fp(FEYNMAN)h Fo(is)f(in)g(e\013e)n(ct)f(or)i(disaster)f(wil)r(l)g
+(ensue.)145 2691 y FE(Next)h(the)h(user)g(m)o(ust)f(select)h(a)f
+(co-ordinate,)h(generally)h(\(0,0\),)d(from)h(whic)o(h)h(to)f(start)g(dra)o
+(wing)g(the)74 2747 y(diagram.)i(Y)l(ou)13 b(need)h(not)f(k)o(eep)g(trac)o(k)
+f(of)g(the)h(n)o(umerical)i(co-ordinates)e(thereafter,)f Fp(FEYNMAN)h
+FE(will)997 2906 y(2)p eop
+%%Page: 3 8
+bop 74 -83 a FE(do)19 b(that)e(for)h(y)o(ou.)29 b(In)19 b(fact)f(that)g(is)h
+(the)f(whole)h(p)q(oin)o(t)g(of)f(the)h(program.)28 b(Y)l(ou)19
+b(tell)h(it)e(what)g(y)o(ou)g(w)o(an)o(t)74 -26 y(dra)o(wn,)f(in)h(whic)o(h)h
+(direction)f(and)g(ho)o(w)f(long)g(\(in)h(some)f(sense\))h(it)f(should)i(b)q
+(e)f(and)f(it)h(will)h(do)e(it.)26 b(After)74 30 y(dra)o(wing)12
+b(a)g(line)h(\(or)e(v)o(ertex\))h(all)g(of)g(the)g(imp)q(ortan)o(t)g(p)q
+(ositions)g(will)i(b)q(e)f(giv)o(en)f(names)g(and)g(y)o(ou)g(can)g(sp)q
+(ecify)74 87 y Fo(these)17 b FE(to)f(tell)i(it)f(where)g(to)f(commence)h(the)
+g(next)g(line.)26 b(In)17 b(p)q(oin)o(t)h(of)e(fact)g(y)o(ou)h(can)f(usually)
+j(b)q(egin)f(y)o(our)74 143 y(diagram)f(at)f(an)o(y)h(p)q(oin)o(t)g(in)h(it)g
+(and)f(\014ll)h(the)f(lines)i(in)f(man)o(y)e(di\013eren)o(t)i(orders.)25
+b(A)17 b(little)h(exp)q(erience)h(will)74 199 y(sho)o(w)d(that)f(it)i(is)g
+(usually)g(easiest)g(to)f(start)f(at)g(one)i(end,)f(or)g(branc)o(h,)h(and)f
+(w)o(ork)f(y)o(our)h(w)o(a)o(y)f(along.)24 b(This)74 256 y(w)o(a)o(y)15
+b(the)i(same)f(p)q(osition)h(names)f(ma)o(y)f(b)q(e)i(re-used,)g(sup)q
+(erseding)h(the)e(old)h(v)m(alues.)24 b(The)16 b(details)i(will)f(b)q(e)74
+312 y(giv)o(en)f(in)g(c)o(hapter)f(2.)k(When)d(the)f(picture)h(is)g(complete)
+g(the)f(command:)74 369 y Fs(n)p FE(end)p Fs(f)p FE(picture)p
+Fs(g)74 425 y FE(is)h(issued.)145 482 y(The)g(basic)g(command)g(for)g(dra)o
+(wing)f(lines)j(is)e Fs(n)p FE(dra)o(wline.)23 b(With)16 b(this)h(all)f
+(standard)g(line)h(and)g(v)o(ertex)74 538 y(t)o(yp)q(es)c(ma)o(y)f(b)q(e)h
+(dra)o(wn.)19 b(In)13 b(addition)h(a)f(n)o(um)o(b)q(er)g(of)f(sp)q(ecialized)
+k(v)o(ertices)d(ha)o(v)o(e)f(b)q(een)i(pre-de\014ned.)21 b(These)74
+595 y(are)15 b(dra)o(wn)g(with)g(the)h Fs(n)p FE(dra)o(wv)o(ertex)d(command)j
+(whic)o(h)g(is)f(discussed)i(in)f(c)o(hapter)f(three.)74 738
+y Fq(1.6)70 b(Getting)21 b(Started)74 839 y FE(A)16 b(basic)g(familiarit)o(y)
+h(with)f Fp(FEYNMAN)g FE(ma)o(y)f(b)q(e)h(obtained)h(b)o(y)e(reading)h(c)o
+(hapter)g(one)g(and)g(sections)74 896 y(2.1-2.7)i(and)i(2.9.)33
+b(The)20 b(follo)o(wing)h(small)f(sample)h(\014le)f(illustrates)h(the)f
+(basic)h(form)e(of)g(a)h(\014le)h(utilizing)74 952 y Fp(FEYNMAN)p
+FE(.)74 1115 y Fk(\\documentstyle[12pt]{articl)o(e})74 1171
+y(\\begin{document})74 1228 y(\\input)i(FEYNMAN)74 1284 y(\\textheight)g
+(800pt)g(\\textwidth)f(450pt)74 1341 y(The)i(gluon)f(then)g(branches)g(into)g
+(a)h(pair)f(of)h(partons,)f(in)g(this)h(case)f(a)h(quark-antiquark)74
+1397 y(pair:)74 1510 y(\\begin{picture}\(10000,18000)o(\))74
+1567 y(\\drawline\\gluon[\\S\\REG]\(0,1)o(6000\)[8])74 1623
+y(\\put\(2500,\\pmidy\){Times)d(3)j(colours})74 1680 y
+(\\drawline\\fermion[\\SW\\REG]\()o(\\gluonba)o(ckx,\\gl)o(uonback)o
+(y\)[2000])74 1736 y(\\drawline\\fermion[\\SE\\REG]\()o(\\gluonba)o(ckx,\\gl)
+o(uonback)o(y\)[2000])74 1792 y(\\end{picture})74 1849 y(\\hskip)f(1.38)h(in)
+74 1905 y(\\begin{picture}\(10000,18000)o(\))74 1962 y
+(\\drawline\\gluon[\\S\\CENTRALG)o(LUON]\(0,)o(16000\)[)o(8])74
+2018 y(\\drawline\\scalar[\\SW\\REG]\(\\)o(gluonbac)o(kx,\\glu)o(onbacky)o
+(\)[5])74 2075 y(\\drawline\\scalar[\\SE\\REG]\(\\)o(gluonbac)o(kx,\\glu)o
+(onbacky)o(\)[5])74 2131 y(\\end{picture})74 2244 y(Where)f(the)h(second)f
+(picture)g(is)g(the)h(interaction)e(with)h(the)h(hypothesized)e(squark.)74
+2301 y(\\end{document})145 2463 y FE(A)17 b(few)f(brief)i(p)q(oin)o(ts)f
+(should)h(b)q(e)g(made)f(ab)q(out)f(the)h(ab)q(o)o(v)o(e.)25
+b(The)17 b Fo(textheight)h FE(and)f Fo(textwidth)g FE(set)g(the)74
+2520 y(pagesize,)e(made)f(larger)h(than)f(usual)h(in)g(the)f(ab)q(o)o(v)o(e)g
+(in)h(order)f(to)g(dra)o(w)f(longer)i(and)f(wider)h(pictures.)21
+b(The)74 2576 y Fs(n)p Fo(put)15 b FE(command)f(is)g(a)g(basic)h(L)586
+2570 y Ft(a)607 2576 y FE(T)632 2590 y(E)657 2576 y(X)g(command)f(for)f
+(placing)j(text)d(in)i(a)f(picture.)20 b(The)15 b(commands)f
+Fs(n)p Fo(hskip,)74 2633 y Fs(n)p Fo(vskip)f FE(ma)o(y)h(b)q(e)g(used)h(for)e
+(adding)i(extra)e(space,)h(horizon)o(tally)h(and)f(v)o(ertically)l(,)h(where)
+f(needed.)21 b(An)o(y)14 b(size)74 2689 y(\([10pt],[11pt])c(or)i([12pt]\))g
+(and)h(st)o(yle)g(of)g(do)q(cumen)o(t)g(ma)o(y)g(b)q(e)g(sp)q(eci\014ed)i
+(and)f(the)f(resultan)o(t)g(diagrams)f(will)997 2906 y(3)p
+eop
+%%Page: 4 9
+bop 74 -83 a FE(b)q(e)15 b(una\013ected)f(with)g(one)g(exception.)736
+-99 y Fn(2)776 -83 y FE(The)h(reader)e(migh)o(t)h(wish)h(to)e(duplicate)j
+(the)e(ab)q(o)o(v)o(e)f(example)i(and)74 -26 y(run)h(it)f(to)g(see)g(the)g
+(results.)145 30 y(Running)f(and)e(prin)o(ting)i(a)e(L)630
+24 y Ft(a)651 30 y FE(T)676 44 y(E)701 30 y(X)h(\014le)g(is)g(a)f(system-dep)
+q(enden)o(t)i(op)q(eration.)19 b(On)13 b(the)f(Ca)o(v)o(endish)h(Labs)74
+87 y(V)l(ax,)i(where)g(this)h(program)e(w)o(as)g(dev)o(elop)q(ed,)j(the)e
+(syn)o(tax)g(is:)20 b(LA)l(TEX)c Fx(<)p FE(\014lename)p Fx(>)74
+143 y FE(with)23 b(default)g(\014let)o(yp)q(e)h(`TEX'.)e(T)l(o)g(prin)o(t)h
+(out)f(the)h(compiled)h(\014le)g(on)f(the)g(LN03)f(laser)h(prin)o(ter)g(the)
+74 199 y(commands:)145 238 y(D)o(VI2LN3)15 b Fx(<)p FE(\014lename)p
+Fx(>)p FE(.D)o(VI)h(/H=337.5)e(/V=200)74 294 y(PRINT/QUEUE=LN03)i
+Fx(<)p FE(\014lename)p Fx(>)p FE(.LN3)74 407 y(w)o(ould)h(b)q(e)g(issued.)25
+b(It)17 b(is)g(generally)h(easier)f(to)f(de\014ne)h(a)g(command)f(\014le,)i
+(called)g(PRINTLA)l(TEX.COM,)74 464 y(or)d(some)g(suc)o(h,)g(of)g(the)g
+(form:)74 583 y Fk($!)24 b(To)f(print)h(out)f(a)h(Latex)f(file)74
+639 y($)h(LATEX)f('P1')74 696 y($)h(DVI2LN3)f('P1'.DVI)g(/H=337.5)f(/V=200)47
+b(!)24 b(/s=14)f(/n=1)74 752 y($)h(PRINT/QUEUE=LN03)e('P1'.LN3)74
+809 y($)i(DELETE)f('P1'.DVI;*)74 865 y($)h(DELETE)f('P1'.LIS;*)74
+922 y($)h(DELETE)f('P1'.AUX;*)74 1091 y FE(whic)o(h)16 b(w)o(ould)g(b)q(e)g
+(executed)h(b)o(y)e(@PRINTLA)l(TEX)i Fx(<)p FE(\014lename)p
+Fx(>)g FE(and)f(w)o(ould)g(further)f(delete)i(the)e(addi-)74
+1147 y(tional)d(\014les)h(whic)o(h)f(L)425 1141 y Ft(a)446
+1147 y FE(T)471 1161 y(E)497 1147 y(X)f(will)i(place)g(on)e(y)o(our)g(disk.)
+20 b(On)12 b(other)f(computer)g(systems)g(the)h(implemen)o(tation)74
+1203 y(will)17 b(b)q(e)f(somewhat)e(di\013eren)o(t.)145 1260
+y(The)h(syn)o(tax)g(of)f(the)i(v)m(arious)f Fp(FEYNMAN)h FE(commands)f(will)i
+(no)o(w)d(b)q(e)i(presen)o(ted.)p 74 2647 748 2 v 126 2674
+a Fm(2)143 2690 y Fl(The)22 b(exception)i(is)e(that)g(when)g(horizon)o(tal)j
+(photons)e(are)f(dra)o(wn)g(in)h(a)e([12pt])h(do)q(cumen)o(t,)j(that)d(the)g
+(command)74 2736 y(\\)p Fj(n)p Fl(bigphotons")17 b(m)o(ust)c(app)q(ear)h
+(somewhere)g(b)q(et)o(w)o(een)g(the)f Fj(n)p Fl(input)i(FEYNMAN)e(statemen)o
+(t)g(and)h(the)g(\014rst)f(time)h(that)f(suc)o(h)74 2781 y(a)g(photon)h(is)g
+(dra)o(wn.)997 2906 y FE(4)p eop
+%%Page: 5 10
+bop 74 229 a Fr(Chapter)34 b(2)74 436 y FD(Dra)m(wing)40 b(Lines)74
+677 y Fq(2.1)70 b(The)22 b Fi(n)p Fq(dra)n(wline)g(Command)74
+778 y FE(The)13 b(principal)i(command)e(for)f(dra)o(wing)h(a)f(particle)i
+(line)g(in)g Fp(FEYNMAN)f FE(is)h(via)f(the)f Fs(n)p Fo(dr)n(aw)r(line)h
+FE(state-)74 835 y(men)o(t.)20 b(The)15 b(syn)o(tax)g(is:)74
+1037 y Fk(\\drawline<particle)22 b(type>[<particle)f
+(direction><configuration>])289 1093 y(<\(x,y\),)i(the)g(co-ordinates)g(of)g
+(the)h(beginning)e(of)i(the)f(line>[<length>])74 1239 y FE(where)f(it)f(is)h
+(understo)q(o)q(d)g(that)f(the)g(triangular)h(brac)o(k)o(ets)e(do)h(not)g
+(app)q(ear)h(in)g(the)g(syn)o(tax)e(but)i(their)74 1295 y(con)o(ten)o(ts)15
+b(describ)q(e)i(what)d(go)q(es)h(in)h(that)f(p)q(osition.)21
+b(An)15 b(example)h(w)o(ould)g(b)q(e:)74 1441 y Fk
+(\\drawline\\photon[\\NW\\FLIPPE)o(D]\(1500,)o(-18000\))o([6])74
+1587 y FE(whic)o(h)k(w)o(ould)g(dra)o(w)f(a)g(photon)g(\(or)f(W,Z\))g
+(starting)h(from)g(the)g(p)q(oin)o(t)h(\(1500,-18000\),)d(with)i(distances)74
+1643 y(in)h(cen)o(tip)q(oin)o(ts)g(\(section)f(1.5\),)g(in)g(the)h(NorthW)l
+(esterly)e(direction)j(\()p Fo(i.e.)e FE(to)o(w)o(ards)e(the)i(upp)q(er)h
+(lefthand)74 1700 y(corner\),)d(in)h(a)f Fo(\015ipp)n(e)n(d)g
+FE(con\014guration)h(\(describ)q(ed)h(b)q(elo)o(w\))f(for)e(an)i(exten)o(t)f
+(of)f(6)i(`units'.)26 b(In)18 b(the)f(case)h(of)74 1756 y(photons)d(eac)o(h)g
+(unit)h(is)f(a)g(`half-wiggle'.)20 b(The)c(actual)f(distance)h(tra)o(v)o
+(ersed)e(on)h(the)g(page)g(is)g(not)g(sp)q(eci\014ed)74 1813
+y(since)i(photons)d(come)i(in)g(distinct)g(`quan)o(ta',)d(in)k(this)e(case)g
+(half-wiggles.)145 1869 y(When)i(the)f(ab)q(o)o(v)o(e)g(statemen)o(t)g(is)h
+(issued)g(a)g(n)o(um)o(b)q(er)g(of)f(parameters)f(are)i(returned.)24
+b(These)17 b(ma)o(y)e(b)q(e)74 1926 y(used)h(b)o(y)f(the)g(artiste)g(\(this)g
+(is)h(`F)l(eyn)f(Art'\).)k(These)d(are:)74 2071 y Fk
+(\\photonfrontx,\\photonfronty)o(:)164 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(front)g(of)h(the)g(line.)74 2128 y(\\photonbackx,\\photonbacky:)
+211 b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(back)h(of)f(the)h(line.)74
+2184 y(\\photonlengthx,\\photonlengt)o(hy:)116 b(The)24 b(\(x,y\))f(extent)g
+(of)h(the)f(line.)74 2241 y(\\photoncount)547 b(The)24 b(number)f(of)g
+(photons)g(printed)g(thus)h(far.)74 2297 y(\\particlefrontx,\\particlefr)o
+(onty:)68 b(The)24 b(\(x,y\))f(co-ords)g(of)h(the)f(front)g(of)h(the)f(line.)
+74 2353 y(\\particlemidx,\\particlemidy)o(:)164 b(The)24 b(\(x,y\))f
+(co-ordinates)f(of)i(the)f(middle)g(of)h(the)f(line.)74 2410
+y(\\particlebackx,\\particlebac)o(ky:)116 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(back)h(of)f(the)h(line.)74 2466 y(\\particlelengthx,\\particlel)o
+(engthy:)c(The)k(\(x,y\))f(extent)g(of)h(the)f(line.)145 2612
+y FE(All)17 b(of)e(the)h(terms)g(b)q(eginning)i(with)e(`)p
+Fs(n)p FE(particle')g(ma)o(y)f(b)q(e)h(abbreviated)h(to)e(`)p
+Fs(n)p FE(p')g(plus)i(the)f(rest)g(of)f(the)74 2669 y(name.)k(F)l(or)12
+b(instance,)h Fs(n)p FE(pmidx)g(is)f(the)h(same)f(as)g Fs(n)p
+FE(particlemidx)h Fo(etc.)h FE(Y)l(ou)e(ma)o(y)g(b)q(e)g(w)o(ondering)h(wh)o
+(y)f(there)74 2725 y(is)17 b(some)f(duplication,)i(suc)o(h)e(as)g
+Fs(n)p FE(pfron)o(tx)f(and)i Fs(n)p FE(photonfron)o(tx.)k(The)16
+b(reason)g(is)h(that)e(terms)h(b)q(eginning)74 2781 y(with)21
+b Fs(n)p Fo(p)n(article)e FE(refer)h(to)f(the)h(last)g(particle)h(line)h(dra)
+o(wn)e(b)o(y)g Fs(n)p FE(dra)o(wline)g(whereas)g(those)g(commencing)997
+2906 y(5)p eop
+%%Page: 6 11
+bop 74 -83 a FE(with)14 b Fs(n)p Fo(photon)g FE(refer)g(only)g(to)f(the)h
+(last)g Fo(photon)h(line)e FE(dra)o(wn.)19 b(This)14 b(distinction)i(often)d
+(pro)o(v)o(es)g(to)h(b)q(e)g(most)74 -26 y(con)o(v)o(enien)o(t.)145
+30 y(T)l(o)h(illustrate)h(this)g(p)q(oin)o(t)f(consider)h(the)g(follo)o(wing)
+g(com)o(bination)f(of)g(statemen)o(ts:)74 180 y Fk(\\input)23
+b(FEYNMAN)74 293 y(\\vskip)g(-0.7in)74 350 y(\\begin{picture}\(18000,8000\))
+74 406 y(\\drawline\\gluon[\\S\\CURLY]\(0)o(,0\)[8])74 463
+y(\\drawline\\fermion[\\SW\\REG]\()o(\\particl)o(ebackx,)o(\\partic)o
+(lebacky\))o([2500])74 519 y(\\drawline\\fermion[\\SE\\REG]\()o(\\particl)o
+(ebackx,)o(\\partic)o(lebacky\))o([2500])74 576 y
+(\\drawline\\gluon[\\S\\CURLY]\(1)o(0000,0\)[)o(8])74 632 y
+(\\drawline\\fermion[\\SW\\REG]\()o(\\particl)o(ebackx,)o(\\partic)o
+(lebacky\))o([2500])74 688 y(\\drawline\\fermion[\\SE\\REG]\()o(\\gluonba)o
+(ckx,\\gl)o(uonback)o(y\)[2500])74 745 y(\\end{picture})74
+858 y(\\vskip)g(1.5in)74 1008 y FE(whic)o(h)16 b(pro)q(duces)g(the)g(follo)o
+(wing)f(results:)p 143 1144 2 2 v 143 1170 a Fz(\011)p 118
+1170 V 143 1179 V 143 1205 a(\011)p 118 1205 V 143 1215 V 143
+1240 a(\011)p 118 1240 V 143 1250 V 143 1276 a(\011)p 118 1276
+V 143 1285 V 143 1311 a(\011)p 118 1311 V 143 1320 V 143 1346
+a(\011)p 118 1346 V 143 1356 V 143 1381 a(\011)p 118 1381 V
+143 1391 V 143 1417 a(\011)p 118 1417 V 111 1153 a(\003)p 111
+1161 2 1 v 111 1170 a(\002)p 120 1170 1 2 v 120 1153 V 111
+1188 a(\003)p 111 1196 2 1 v 111 1205 a(\002)p 120 1205 1 2
+v 120 1188 V 111 1224 a(\003)p 111 1231 2 1 v 111 1240 a(\002)p
+120 1240 1 2 v 120 1224 V 111 1259 a(\003)p 111 1266 2 1 v
+111 1276 a(\002)p 120 1276 1 2 v 120 1259 V 111 1294 a(\003)p
+111 1302 2 1 v 111 1311 a(\002)p 120 1311 1 2 v 120 1294 V
+111 1329 a(\003)p 111 1337 2 1 v 111 1346 a(\002)p 120 1346
+1 2 v 120 1329 V 111 1365 a(\003)p 111 1372 2 1 v 111 1381
+a(\002)p 120 1381 1 2 v 120 1365 V 111 1400 a(\003)p 111 1407
+2 1 v 111 1417 a(\002)p 120 1417 1 2 v 120 1400 V 143 1153
+a(\010)p 143 1178 2 2 v 118 1153 V 143 1188 a(\010)p 143 1214
+V 118 1188 V 143 1224 a(\010)p 143 1249 V 118 1224 V 143 1259
+a(\010)p 143 1284 V 118 1259 V 143 1294 a(\010)p 143 1319 V
+118 1294 V 143 1329 a(\010)p 143 1355 V 118 1329 V 143 1365
+a(\010)p 143 1390 V 118 1365 V 143 1400 a(\010)p 143 1425 V
+118 1400 V 102 1467 a Fy(\000)71 1498 y(\000)71 1540 y(@)102
+1572 y(@)p 558 1144 V 558 1170 a Fz(\011)p 533 1170 V 558 1179
+V 558 1205 a(\011)p 533 1205 V 558 1215 V 558 1240 a(\011)p
+533 1240 V 558 1250 V 558 1276 a(\011)p 533 1276 V 558 1285
+V 558 1311 a(\011)p 533 1311 V 558 1320 V 558 1346 a(\011)p
+533 1346 V 558 1356 V 558 1381 a(\011)p 533 1381 V 558 1391
+V 558 1417 a(\011)p 533 1417 V 526 1153 a(\003)p 526 1161 2
+1 v 526 1170 a(\002)p 535 1170 1 2 v 535 1153 V 526 1188 a(\003)p
+526 1196 2 1 v 526 1205 a(\002)p 535 1205 1 2 v 535 1188 V
+526 1224 a(\003)p 526 1231 2 1 v 526 1240 a(\002)p 535 1240
+1 2 v 535 1224 V 526 1259 a(\003)p 526 1266 2 1 v 526 1276
+a(\002)p 535 1276 1 2 v 535 1259 V 526 1294 a(\003)p 526 1302
+2 1 v 526 1311 a(\002)p 535 1311 1 2 v 535 1294 V 526 1329
+a(\003)p 526 1337 2 1 v 526 1346 a(\002)p 535 1346 1 2 v 535
+1329 V 526 1365 a(\003)p 526 1372 2 1 v 526 1381 a(\002)p 535
+1381 1 2 v 535 1365 V 526 1400 a(\003)p 526 1407 2 1 v 526
+1417 a(\002)p 535 1417 1 2 v 535 1400 V 558 1153 a(\010)p 558
+1178 2 2 v 533 1153 V 558 1188 a(\010)p 558 1214 V 533 1188
+V 558 1224 a(\010)p 558 1249 V 533 1224 V 558 1259 a(\010)p
+558 1284 V 533 1259 V 558 1294 a(\010)p 558 1319 V 533 1294
+V 558 1329 a(\010)p 558 1355 V 533 1329 V 558 1365 a(\010)p
+558 1390 V 533 1365 V 558 1400 a(\010)p 558 1425 V 533 1400
+V 517 1467 a Fy(\000)486 1498 y(\000)559 1467 y(@)591 1498
+y(@)145 1649 y FE(W)l(e)20 b(see)g(immediately)h(what)e(the)h(di\013erence)h
+(is.)34 b(In)20 b(the)g(\014rst)f(diagram)h Fs(n)p FE(particlebac)o(kx,y)g
+(refers,)74 1706 y(\014rst)d(to)g(the)g(gluon)h(after)e(it)i(is)f(dra)o(wn,)g
+(and)h(then)f(to)g(the)g Fs(n)p FE(SW)g(fermion)h(after)e(that)g(has)i(b)q
+(een)g(dra)o(wn.)74 1762 y(If)i(a)e(third)i(reference)g(to)e(those)h
+(co-ordinates)g(had)h(b)q(een)g(made)f(it)g(w)o(ould)h(ha)o(v)o(e)e(referred)
+i(to)e(the)h(\014nal)74 1819 y(co-ordinates)14 b(of)f(the)g
+Fs(n)p FE(SE)h(fermion.)19 b(The)14 b(second)g(gluon)g(line)h(b)q(egins)f
+(10000)f(cen)o(tip)q(oin)o(ts)h(to)f(the)g(righ)o(t)h(of)74
+1875 y(the)f(\014rst.)18 b(This)13 b(time)g(the)f Fs(n)p FE(SE)h(fermion)g
+(commences)f(at)g Fs(n)p FE(gluon)o(bac)o(kx,y)g(whic)o(h)h(is)g(the)g(end)g
+(co-ordinates)74 1932 y(of)i(the)g(gluon)h(and)f(will)i(remain)f(so)f(un)o
+(til)h(the)f(end)h(of)f(the)g(picture)h(of)f(un)o(til)h(another)f(gluon)h(is)
+g(dra)o(wn.)145 1988 y(W)l(e)f(no)o(w)g(pro)q(ceed)h(to)e(detail)j(the)e(v)m
+(arious)h(parameters)e(of)h(the)g Fs(n)p FE(dra)o(wline)h(command)f(giv)o(en)
+h(ab)q(o)o(v)o(e.)74 2131 y Fq(2.2)70 b(The)22 b(T)n(yp)r(es)h(of)g(P)n
+(article)e(Lines)74 2233 y FE(The)14 b(four)f(basic)h(kinds)h(of)e(particle)h
+(lines)h(whic)o(h)g Fp(FEYNMAN)f FE(can)f(dra)o(w)g(are)g(giv)o(en)h(b)o(y)g
+(the)f(follo)o(wing)74 2289 y(input)j(parameters:)74 2440 y
+Fk(\\fermion)74 2496 y(\\scalar)74 2552 y(\\photon)74 2609
+y(\\gluon)997 2906 y FE(6)p eop
+%%Page: 7 12
+bop 74 -83 a FE(A)14 b(\014fth)f(category)l(,)g Fs(n)p Fk(especial)p
+FE(,)f(whic)o(h)j(allo)o(ws)e(the)h(user)g(to)e(de\014ne)j(his)f(o)o(wn)g
+(non-standard)f(st)o(yle)h(of)f(line,)74 -26 y(has)j(not)f(y)o(et)h(b)q(een)h
+(implemen)o(ted.)23 b(As)16 b(w)o(e)f(ha)o(v)o(e)h(seen)g(this)g(is)h(the)f
+(\014rst)f(input)i(parameter)e(of)g Fs(n)p FE(dra)o(wline)74
+30 y(and)h(is)f(implemen)o(ted)i(as)575 123 y Fk(\\drawline\\fermion...)575
+180 y(\\drawline\\scalar...)575 236 y(\\drawline\\photon...)575
+293 y(\\drawline\\gluon...)145 386 y FE(Note)c(that)g(this)h(is)g(the)f(only)
+h(argumen)o(t)f(of)g Fs(n)p FE(dra)o(wline)h(whic)o(h)h(is)f(in)g(lo)o(w)o
+(ercase)f(letters.)20 b(The)13 b(sp)q(eci\014cs)74 442 y(of)i(eac)o(h)g(of)g
+(these)g(will)i(b)q(e)f(giv)o(en)g(in)g(separate)e(sections.)74
+585 y Fq(2.3)70 b(P)n(article)20 b(Direction)74 687 y FE(Eac)o(h)c(particle)h
+(line)h(ma)o(y)d(b)q(e)i(dra)o(wn)f(in)h(an)o(y)f(of)f(eigh)o(t)h(p)q
+(ossible)i(directions,)g(sp)q(eci\014ed)g(b)o(y)e(the)g(p)q(oin)o(ts)h(of)74
+743 y(the)e(compass)g(with)h(North)e(alw)o(a)o(ys)h(understo)q(o)q(d)h(as)e
+(b)q(eing)j(at)e(the)g(top)g(of)f(the)i(page:)384 905 y Fk(\\N)72
+b(\\NE)f(\\E)g(\\SE)g(\\S)h(\\SW)f(\\W)g(\\NW)74 1067 y FE(This)16
+b(is)g(the)f(second)h(argumen)o(t)e(of)h Fs(n)p FE(dra)o(wline.)74
+1160 y Fk(\\drawline\\photon[\\NW...)74 1253 y FE(and)h(so)f(forth.)k(The)d
+(line)h(is)f(dra)o(wn)f(from)f(the)i(sp)q(eci\014ed)h Fo(fr)n(ont)e
+FE(p)q(oin)o(t)h(in)g(the)g(indicated)h(direction.)k(Note)74
+1310 y(that)15 b(all)h(directions)g(are)f(in)h(upp)q(ercase)g(and)g(don't)e
+(forget)h(the)g(bac)o(kslash!)74 1453 y Fq(2.4)70 b(Line)22
+b(Con\014guration)74 1554 y FE(Man)o(y)12 b(di\013eren)o(t)h(particle)h(t)o
+(yp)q(es)e(are)g(a)o(v)m(ailable)j(in)e(a)f(v)m(ariet)o(y)h(of)f(forms.)19
+b(F)l(or)12 b(the)g(sp)q(eci\014c)j(forms)c(a)o(v)m(ailable)74
+1611 y(see)19 b(the)g(section)g(on)g(the)f(appropriate)h(particle)h(t)o(yp)q
+(e)e(b)q(elo)o(w.)31 b(The)19 b(curren)o(t)g(con\014gurations)f(a)o(v)m
+(ailable)74 1667 y(are:)74 1829 y Fk(\\REG)74 1886 y(\\FLIPPED)74
+1942 y(\\CURLY)74 1999 y(\\FLIPPEDCURLY)74 2055 y(\\FLAT)74
+2111 y(\\FLIPPEDFLAT)74 2168 y(\\CENTRAL)74 2224 y(\\FLIPPEDCENTRAL)74
+2281 y(\\LONGPHOTON)74 2337 y(\\FLIPPEDLONG)74 2394 y(\\SQUASHEDGLUON)145
+2556 y FE(The)k(shap)q(e)h(of)f(the)g(individual)k(particle)d(t)o(yp)q(es)f
+(will)i(b)q(e)f(presen)o(ted)g(shortly)f(but)h(a)e(few)i(general)74
+2612 y(w)o(ords)c(migh)o(t)h(b)q(e)h(giv)o(en)g(here.)34 b(First,)21
+b(not)f(ev)o(ery)g(particle)h(t)o(yp)q(e)f(exists)g(in)h(all)g
+(con\014gurations)f(in)h(all)74 2669 y(directions.)h Fs(n)p
+FE(REG)15 b(is)g(something)h(of)f(a)g(default)h(\(although)f
+Fk(\\REG)f FE(m)o(ust)h(still)i(b)q(e)f(included)i(as)d(a)g(param-)74
+2725 y(eter)k(in)i Fs(n)p FE(dra)o(wline\))e(and)h(is)g(de\014ned)h(for)d
+(all)j(particles)f(in)g(all)h(directions.)34 b(It)19 b(ma)o(y)g(not)g(b)q(e)h
+(y)o(our)f(o)o(wn)74 2781 y(\032sthetic)h(fa)o(v)o(ourite,)f(ho)o(w)o(ev)o
+(er.)32 b Fs(n)p FE(FLIPPED)19 b(lines)i(are)f(in)o(v)o(erted)f(ab)q(out)h
+(their)g(axes)f(with)h(resp)q(ect)g(to)997 2906 y(7)p eop
+%%Page: 8 13
+bop 74 -83 a FE(the)16 b Fs(n)p FE(REG)f(lines,)h(but)g(are)f(otherwise)g
+(the)h(same.)k(Ob)o(viously)l(,)c(since)h(fermions)f(and)f(scalars)g(are)g
+(merely)74 -26 y(straigh)o(t)k(lines,)j(the)d Fs(n)p FE(REG)h(and)f
+Fs(n)p FE(FLIPPED)h(con\014gurations)f(will)i(b)q(e)g(the)e(same.)33
+b(In)20 b(fact)f(for)g(these)74 30 y(t)o(w)o(o)c(particle)j(t)o(yp)q(es)f
+Fs(n)p FE(REG)f(is)h(the)g Fu(only)g FE(legitimate)g(con\014guration)g(\(but)
+f(see)h Fs(n)p FE(THICKLINES)h(at)e(the)74 87 y(conclusion)i(of)d(this)i
+(section\).)22 b(The)16 b(other)f(con\014gurations)h(do)g(not,)f(in)i
+(general,)f(exist)h(for)e(all)i(of)e(the)h(di-)74 143 y(rections)e(a)o(v)m
+(ailable)h(to)d(a)h(particle.)20 b Fs(n)p FE(FLIPPEDCURL)l(Y,)14
+b Fs(n)p FE(FLIPPEDCENTRAL,)f Fs(n)p FE(FLIPPEDLONG)74 199
+y(and)23 b Fs(n)p FE(FLIPPEDFLA)l(T)g(are)g(\015ipp)q(ed)i(along)f(the)f
+(direction)h(axis)g(when)f(compared)g(with)h Fs(n)p FE(CURL)l(Y,)74
+256 y Fs(n)p FE(CENTRAL,)10 b Fs(n)p FE(LONGPHOTON)h(and)g
+Fs(n)p FE(FLA)l(T)f(resp)q(ectiv)o(ely)l(.)20 b Fs(n)p FE(CENTRAL)10
+b(and)g Fs(n)p FE(FLIPPEDCENTRAL)74 312 y(exist)j(only)g(for)f(gluons)i(\()p
+Fs(n)p FE(gluon\),)e Fs(n)p FE(LONGPHOTON)i(and)e Fs(n)p FE(FLIPPEDLONG)h
+(exist)g(only)h(for)e(photons,)74 369 y(while)17 b Fs(n)p FE(SQUASHED)f
+(exists)f(only)h(for)e(gluons)i(in)g(the)f Fs(n)p FE(E)g(direction!)145
+425 y(The)h(line)i(con\014guration)e(is)h(the)f(third)g(input)i(to)d
+Fs(n)p FE(dra)o(wline)i(and)f(follo)o(ws)g(the)g(direction)i(within)f(the)74
+482 y(square)e(brac)o(k)o(ets)g(with)g(no)g(in)o(terv)o(ening)i(spaces:)74
+644 y Fk(\\drawline\\scalar[\\S\\REG]...)74 701 y
+(\\drawline\\gluon[\\NW\\FLIPPED)o(]...)74 864 y FE(and)f(so)e(forth.)145
+920 y(A)d(\014nal)i(w)o(ord)e(concerns)h(the)f Fs(n)p FE(THINLINES)i(and)f
+Fs(n)p FE(THICKLINES)h(commands.)18 b(When)12 b(issued)h(prior)74
+977 y(to)18 b(a)f Fs(n)p FE(dra)o(wline)i(or)f Fs(n)p FE(dra)o(wv)o(ertex)f
+(statemen)o(t)g(they)h(cause)g(the)h(particle)g(lines)h(to)d(b)q(e)i(dra)o
+(wn)f(in)h(a)e(thin)74 1033 y(or)h(thic)o(k)h(fashion)g(This)g(remains)g(in)h
+(e\013ect)e(un)o(til)i(sup)q(erseded)g(or)e(the)g(end)i(of)e(the)g(picture)i
+(is)f(encoun-)74 1089 y(tered.)34 b(The)20 b(default)g(is)h
+Fs(n)p FE(THINLINES.)f(These)h(commands)e(are)h(iden)o(tical)h(to)f(the)g(L)
+1625 1083 y Ft(a)1646 1089 y FE(T)1671 1103 y(E)1696 1089 y(X)g
+Fs(n)p FE(thinlines)74 1146 y(and)i Fs(n)p FE(thic)o(klines)h(commands)e
+(except)h(when)g(dra)o(wing)g(photons)f(in)h(the)g Fk(\\E)f
+FE(and)h Fk(\\W)f FE(directions)i(\(an)o(y)74 1202 y(con\014guration\).)29
+b(These)19 b(will)h(not)d(b)q(e)i(em)o(b)q(oldened)h(b)o(y)f
+Fs(n)p FE(thic)o(klines)h(but)e(will)i(b)q(e)f(b)o(y)f Fs(n)p
+FE(THICKLINES.)74 1259 y(Photons)c(in)g(the)g Fk(\\N)g FE(and)g
+Fk(\\S)g FE(directions)h(\(an)o(y)e(con\014guration\))h(are)g(una\013ected)g
+(since)h(they)f(are)g(dra)o(wn)f(in)74 1315 y(an)i(in)o(termediate)h(state.)j
+(The)d(follo)o(wing)g(illustrates)g(the)f(di\013erence:)74
+1478 y Fk(\\begin{picture}\(8000,2000\))74 1534 y
+(\\drawline\\gluon[\\E\\FLIPPEDC)o(ENTRAL]\()o(0,0\)[5])74
+1591 y(\\end{picture})74 1704 y(\\begin{picture}\(8000,2000\))74
+1760 y(\\THICKLINES)74 1817 y(\\drawline\\gluon[\\E\\FLIPPEDC)o(ENTRAL]\()o
+(0,0\)[5])74 1873 y(\\end{picture})74 2036 y FE(whic)o(h)h(pro)q(duces)p
+195 2133 2 2 v 195 2159 a Fz(\011)p 170 2159 V 231 2133 V -14
+w(\011)p 205 2159 V 266 2133 V -15 w(\011)p 241 2159 V 301
+2133 V -15 w(\011)p 276 2159 V 336 2133 V -15 w(\011)p 311
+2159 V 372 2133 V -14 w(\011)p 346 2159 V 179 2127 a(\003)p
+179 2134 2 1 v -1 w(\000)p 195 2134 V 188 2127 1 2 v 2 w(\003)p
+214 2134 2 1 v(\000)p 231 2134 V 223 2127 1 2 v 1 w(\003)p
+249 2134 2 1 v(\000)p 266 2134 V 258 2127 1 2 v 1 w(\003)p
+284 2134 2 1 v(\000)p 301 2134 V 294 2127 1 2 v 2 w(\003)p
+320 2134 2 1 v -1 w(\000)p 336 2134 V 329 2127 1 2 v 143 2133
+2 2 v 143 2159 a(\012)p 169 2159 V 179 2133 V -14 w(\012)p
+204 2159 V 214 2133 V -15 w(\012)p 240 2159 V 249 2133 V -15
+w(\012)p 275 2159 V 284 2133 V -15 w(\012)p 310 2159 V 320
+2133 V -14 w(\012)p 345 2159 V 194 2220 4 2 v 194 2247 a Fh(\011)p
+170 2247 2 4 v 230 2220 4 2 v -14 w(\011)p 205 2247 2 4 v 265
+2220 4 2 v -15 w(\011)p 241 2247 2 4 v 300 2220 4 2 v -15 w(\011)p
+276 2247 2 4 v 335 2220 4 2 v -15 w(\011)p 311 2247 2 4 v 371
+2220 4 2 v -14 w(\011)p 346 2247 2 4 v 178 2214 a(\003)p 178
+2221 4 1 v -1 w(\000)p 194 2221 V 188 2214 1 4 v 2 w(\003)p
+213 2221 4 1 v(\000)p 230 2221 V 223 2214 1 4 v 1 w(\003)p
+248 2221 4 1 v(\000)p 265 2221 V 258 2214 1 4 v 2 w(\003)p
+284 2221 4 1 v -1 w(\000)p 300 2221 V 294 2214 1 4 v 2 w(\003)p
+319 2221 4 1 v -1 w(\000)p 335 2221 V 329 2214 1 4 v 143 2220
+4 2 v 143 2247 a(\012)p 169 2247 2 4 v 178 2220 4 2 v -15 w(\012)p
+204 2247 2 4 v 213 2220 4 2 v -15 w(\012)p 240 2247 2 4 v 248
+2220 4 2 v -15 w(\012)p 275 2247 2 4 v 284 2220 4 2 v -14 w(\012)p
+310 2247 2 4 v 319 2220 4 2 v -15 w(\012)p 345 2247 2 4 v 74
+2362 a Fq(2.5)70 b(Line)22 b(Co-ordinate)g(P)n(arameters)74
+2465 y Fp(2.5.1)55 b(Input)19 b(P)n(arameters)74 2551 y FE(The)g(fourth)g
+(and)g(\014fth)g(argumen)o(ts)f(of)g(the)h Fs(n)p FE(dra)o(wline)h(command)e
+(are)h(the)g(\(x,y\))f(co-ordinates)h(of)f(the)74 2608 y Fo(b)n(e)n(ginning)
+13 b FE(of)i(the)g(particle)h(line.)22 b(these)15 b(are)g(as)g(measured)g(in)
+h Fo(c)n(entip)n(oints)d FE(on)j(the)f(grid)g(whic)o(h)h Fp(FEYN-)74
+2664 y(MAN)e FE(has)g(established.)21 b(They)14 b(are)f(en)o(tered)i(in)f
+(the)g(format)f(\()p Fx(x)g(co)p FE(-)p Fx(or)q(dinate;)8 b(y)15
+b(co)p FE(-)p Fx(or)q(dinate)p FE(\))e(where)h Fx(x)74 2721
+y FE(and)g Fx(y)i FE(ma)o(y)d(b)q(e)h(in)o(teger)g(n)o(um)o(b)q(ers)g(\(b)q
+(et)o(w)o(een,)g(roughly)l(,)g(-30,000)e(and)i(+30,000\))e(or)h(v)m(ariables)
+i(\(coun)o(ters\))74 2777 y(with)f(n)o(umerical)h(v)m(alues.)21
+b(A)14 b(n)o(um)o(b)q(er)g(of)f(v)m(ariables)i(ha)o(v)o(e)e(b)q(een)i
+(pre-de\014ned)h(and)e(a)o(v)m(ailable)h(for)e(use.)20 b(The)997
+2906 y(8)p eop
+%%Page: 9 14
+bop 74 -83 a FE(user)16 b(ma)o(y)e(also)h(de\014ne)i(his)f(o)o(wn)e(\(see)i
+(section)f(4.2.1)f(on)h(storing)g(information\).)20 b(Some)15
+b(samples)h(ma)o(y)e(b)q(e)74 -26 y(illustrativ)o(e:)74 124
+y Fk(\\drawline\\fermion[\\SE\\REG]\()o(-1500,12)o(000\)[20)o(00])74
+180 y(\\drawline\\gluon[\\E\\SQUASHED)o(GLUON]\(\\)o(photonb)o(ackx,\\p)o
+(hotonbac)o(ky\)[2])74 237 y(\\drawline\\scalar[\\N\\REG]\(\\X)o(one,\\Yon)o
+(e\)[11])74 293 y(\\drawline\\photon[\\S\\FLIPPED)o(FLAT]\(30)o(00,\\pmi)o
+(dy\)[7])145 444 y FE(In)h(the)h(ab)q(o)o(v)o(e)e Fs(n)p FE(photon)o(bac)o
+(kx)h(and)g Fs(n)p FE(photon)o(bac)o(ky)f(are)h(co-ordinates,)g(presumably)h
+(returned)g(from)74 500 y(a)k(previously)i(dra)o(wing)f(a)f(photon.)36
+b Fs(n)p FE(Xone)21 b(and)g Fs(n)p FE(Y)l(one)f(are)h(some)f(v)m(alues)i
+(stored)e(b)o(y)g(the)h(user)g(and)74 556 y Fs(n)p FE(pmidy)16
+b(is)g(the)f(ordinate)g(of)g(the)g(midp)q(oin)o(t)h(of)f(the)g(previously)h
+(dra)o(wn)f(line.)21 b(Note)15 b(in)h(the)f(last)g(example)74
+613 y(ho)o(w)g(the)g(x)g(co-ordinate)h(is)f(a)g(n)o(um)o(b)q(er)h(while)h
+(the)e(y)g(co-ordinate)h(is)f(a)g(v)m(ariable.)74 735 y Fp(2.5.2)55
+b(Output)19 b(P)n(arameters)74 820 y FE(As)10 b(discussed)i(in)f(section)g
+(2.1)e(a)h(n)o(um)o(b)q(er)g(of)g(useful)h(p)q(ositional)h(parameters)d(are)h
+(returned)g(when)h Fs(n)p FE(dra)o(wline)74 877 y(is)18 b(called.)29
+b(F)l(or)17 b(the)h(appropriate)g(lines)h(the)f(follo)o(wing)g(are)f
+(de\014ned,)j(eac)o(h)d(de\014nition)j(sup)q(erseding)f(the)74
+933 y(previous)d(v)m(alue)h(of)d(the)i(v)m(ariable.)145 990
+y(F)l(or)e(all)i(lines:)74 1140 y Fk(\\particlefrontx,\\particlefr)o(onty:)21
+b(The)i(\(x,y\))g(co-ords)g(of)h(the)f(front)g(of)h(the)f(line.)74
+1197 y(\\particlemidx,\\particlemidy)o(:)117 b(The)23 b(\(x,y\))g
+(co-ordinates)g(of)g(the)h(middle)f(of)g(the)h(line.)74 1253
+y(\\particlebackx,\\particlebac)o(ky:)69 b(The)23 b(\(x,y\))g(co-ordinates)g
+(of)g(the)h(back)f(of)g(the)h(line.)74 1403 y FE(F)l(or)15
+b(photons:)74 1554 y Fk(\\photonfrontx,\\photonfronty)o(:)117
+b(The)23 b(\(x,y\))g(co-ordinates)g(of)g(the)h(front)f(of)g(the)h(photon.)74
+1610 y(\\photonbackx,\\photonbacky:)164 b(The)23 b(\(x,y\))g(co-ordinates)g
+(of)g(the)h(back)f(of)g(the)h(photon.)74 1760 y FE(F)l(or)15
+b(gluons:)74 1911 y Fk(\\gluonfrontx,\\gluonfronty:)164 b(The)23
+b(\(x,y\))g(co-ordinates)g(of)g(the)h(front)f(of)g(the)h(gluon.)74
+1967 y(\\gluonbackx,\\gluonbacky:)212 b(The)23 b(\(x,y\))g(co-ordinates)g(of)
+g(the)h(back)f(of)g(the)h(gluon.)74 2117 y FE(F)l(or)15 b(fermions:)74
+2268 y Fk(\\fermionfrontx,\\fermionfron)o(ty:)69 b(The)23 b(\(x,y\))g
+(co-ordinates)g(of)g(the)h(front)f(of)g(the)h(fermion.)74 2324
+y(\\fermionbackx,\\fermionbacky)o(:)117 b(The)23 b(\(x,y\))g(co-ordinates)g
+(of)g(the)h(back)f(of)g(the)h(fermion.)74 2474 y FE(F)l(or)15
+b(scalars:)74 2625 y Fk(\\scalarfrontx,\\scalarfronty)o(:)117
+b(The)23 b(\(x,y\))g(co-ordinates)g(of)g(the)h(front)f(of)g(the)h(scalar.)74
+2681 y(\\scalarbackx,\\scalarbacky:)164 b(The)23 b(\(x,y\))g(co-ordinates)g
+(of)g(the)h(back)f(of)g(the)h(scalar.)997 2906 y FE(9)p eop
+%%Page: 10 15
+bop 74 -83 a FE(As)15 b(an)g(illustration)i(the)e(command)98
+-26 y Fk(\\drawline\\fermion[\\E\\REG]\()o(0,0\)[200)o(0])74
+30 y FE(has)193 180 y Fk(\\pfrontx=0)166 b(\\pfronty=0)193
+237 y(\\pmidx=1000)142 b(\\pmidy=0)193 293 y(\\pbackx=2000)118
+b(\\pbacky=0)74 436 y Fq(2.6)70 b(Line)22 b(Length)74 540 y
+Fp(2.6.1)55 b(Input)19 b(P)n(arameters)74 625 y FE(The)g(\014nal)g(parameter)
+e(to)h(b)q(e)g(giv)o(en)h(to)f Fs(n)p FE(dra)o(wline)g(is)h(the)f
+Fo(length)g FE(of)g(the)g(particle)h(to)f(b)q(e)h(dra)o(wn.)28
+b(The)74 682 y(units)21 b(in)h(whic)o(h)f(the)g(length)g(is)g(giv)o(en)g(v)m
+(ary)g(b)q(et)o(w)o(een)g(the)f(four)g(particle)i(t)o(yp)q(es.)36
+b(F)l(or)20 b(fermions)h(it)g(is)74 738 y(simply)d(the)e(actual)h(length)g
+(in)g(cen)o(tip)q(oin)o(ts.)24 b(F)l(or)16 b(scalars)g(it)h(is)f(the)h(n)o
+(um)o(b)q(er)g(of)e(line)j(segmen)o(ts,)e(eac)o(h)h(of)74 795
+y(whic)o(h)g(is)g(separated)f(b)o(y)g(a)g Fo(gap)p FE(.)23
+b(The)16 b(scalar)g(line)i(alw)o(a)o(ys)d(b)q(egins)j(and)e(ends)h(on)f(a)g
+(line)h(segmen)o(t,)f(nev)o(er)74 851 y(a)g(gap.)24 b(The)17
+b(default)h(lengths)f(of)f(b)q(oth)h(segmen)o(ts)f(and)h(gaps)f(ma)o(y)g(b)q
+(e)h(o)o(v)o(erruled)g(b)o(y)g(the)g(user)f(\(see)h(the)74
+908 y(section)e(on)f(scalars\).)20 b(F)l(or)13 b(gluons)i(the)g(length)g
+(parameter)f(is)h(the)f Fo(numb)n(er)h(of)h(lo)n(ops)p FE(.)j(The)c(actual)f
+(length)74 964 y(of)i(eac)o(h)h(lo)q(op)g(dep)q(ends)h(up)q(on)f(whic)o(h)h
+(st)o(yle)f(is)g(selected)g(and)g(whether)g(the)g(gluon)g(is)g(dra)o(wn)f
+(diagonally)74 1021 y(\(at)e(a)h(slan)o(t\))f(or)h(not.)k(F)l(or)14
+b(photons)h(the)g(unit)h(of)e(measure)h(is)h(not)e(a)h(`wiggle',)f(but)i(a)e
+(`half-wiggle'.)21 b(This)74 1077 y(enables)16 b(one)e(to)g(pro)q(duce)i(a)e
+(photon)g(whic)o(h)h(b)q(oth)g(b)q(egins)h(and)e(ends)h(on)g(the)f(`up)o(w)o
+(ard')g(\(or)f(`do)o(wn)o(w)o(ard'\))74 1134 y(part)i(of)g(its)g
+(oscillation.)21 b(This)16 b(is)g(illustrated)h(in)f(the)f(follo)o(wing)h
+(program:)74 1296 y Fk(\\begin{document})74 1353 y(\\input)23
+b(FEYNMAN)74 1409 y(\\textheight)g(600pt)g(\\textwidth)f(400pt)74
+1522 y(\\begin{picture}\(20000,10000)o(\))74 1579 y
+(\\drawline\\fermion[\\E\\REG]\(0)o(,10000\)[)o(5000])74 1635
+y(\\drawline\\gluon[\\E\\REG]\(100)o(00,10000)o(\)[5])74 1691
+y(\\drawline\\photon[\\E\\REG]\(0,)o(5000\)[5])74 1748 y
+(\\drawline\\photon[\\E\\REG]\(0,)o(0\)[6])74 1804 y
+(\\drawline\\scalar[\\E\\REG]\(10)o(000,5000)o(\)[5])74 1861
+y(\\seglength=1200)70 b(\\gaplength=300)f(\045)48 b(Changes)23
+b(the)g(\\scalar)g(defaults.)74 1917 y(\\drawline\\scalar[\\E\\REG]\(10)o
+(000,0\)[5)o(])74 1974 y(\\end{picture})74 2030 y(\\end{document})985
+2906 y FE(10)p eop
+%%Page: 11 16
+bop 145 -83 a FE(whic)o(h)16 b(pro)q(duces:)p 144 81 208 2
+v 591 81 a Fz(\010)p 591 113 2 9 v 558 81 9 2 v -7 w(\010)p
+634 113 2 9 v 602 81 9 2 v -6 w(\010)p 678 113 2 9 v 646 81
+9 2 v -6 w(\010)p 722 113 2 9 v 689 81 9 2 v -7 w(\010)p 765
+113 2 9 v 733 81 9 2 v 574 111 2 1 v 574 120 a(\002)p 591 111
+V(\001)p 583 120 1 2 v 618 111 2 1 v 10 w(\002)p 634 111 V
+-1 w(\001)p 627 120 1 2 v 661 111 2 1 v 10 w(\002)p 678 111
+V(\001)p 670 120 1 2 v 705 111 2 1 v 10 w(\002)p 722 111 V(\001)p
+714 120 1 2 v 748 111 2 1 v 9 w(\002)p 765 111 V(\001)p 758
+120 1 2 v 574 81 a(\013)p 574 113 2 9 v 600 81 9 2 v -6 w(\013)p
+618 113 2 9 v 644 81 9 2 v -7 w(\013)p 661 113 2 9 v 687 81
+9 2 v -6 w(\013)p 705 113 2 9 v 731 81 9 2 v -7 w(\013)p 748
+113 2 9 v 774 81 9 2 v 140 294 a Fg(_)35 b(_)f(_)182 304 y(^)g(^)140
+501 y(_)h(_)f(_)182 512 y(^)g(^)g(^)p 559 289 59 2 v 653 289
+V 747 289 V 841 289 V 935 289 V 559 496 50 2 v 621 496 V 683
+496 V 746 496 V 808 496 V 74 703 a Fp(2.6.2)55 b(Output)19
+b(P)n(arameters)74 789 y FE(In)j(the)g(same)g(w)o(a)o(y)e(as)h(co-ordinates)h
+(related)g(to)f(the)h(particle)h(are)e(returned,)j(the)d Fo(displac)n(ements)
+g FE(of)74 845 y(the)c(line)h(are)e(also)g(giv)o(en.)24 b(These)17
+b(are)f(essen)o(tially)i(the)e(\(\001)p Fx(x;)8 b FE(\001)p
+Fx(y)r FE(\))15 b(b)q(et)o(w)o(een)h(the)h(ending)g(and)g(b)q(eginning)74
+902 y(co-ordinates.)35 b(Th)o(us)20 b(a)g(particle)i(dra)o(wn)d(in)i(the)g
+Fs(n)p FE(N)f(direction)h(will)h(ha)o(v)o(e)e(p)q(ositiv)o(e)h
+Fs(n)p FE(particlelength)o(y)74 958 y(\()p Fs(n)p FE(plength)o(y)h(for)f
+(short\))f(and)i(zero)g Fs(n)p FE(particlelengthx.)40 b(A)22
+b(particle)h(in)f(the)g Fs(n)p FE(SE)f(direction)i(will)h(ha)o(v)o(e)74
+1015 y(a)e(p)q(ositiv)o(e)i Fs(n)p FE(particlelengthx)g(but)e(a)g(negativ)o
+(e)h Fs(n)p FE(particlelength)o(y)h(\(and)e(these)h(will)h(b)q(e)f(of)f(the)g
+(same)74 1071 y(magnitude\).)e(The)c(full)g(list)g(is:)74 1234
+y Fk(\\particlelengthx,\\particlel)o(engthy:)k(The)k(\(x,y\))f(extent)g(of)h
+(the)f(line.)74 1290 y(\\photonlengthx,\\photonlengt)o(hy:)116
+b(The)24 b(\(x,y\))f(extent)g(of)h(the)f(photon.)74 1347 y
+(\\gluonlengthx,\\gluonlengthy)o(:)164 b(The)24 b(\(x,y\))f(extent)g(of)h
+(the)f(gluon.)74 1403 y(\\scalarlengthx,\\scalarlengt)o(hy:)116
+b(The)24 b(\(x,y\))f(extent)g(of)h(the)f(scalar.)74 1460 y
+(\\fermionlengthx,\\fermionlen)o(gthy:)68 b(The)24 b(\(x,y\))f(extent)g(of)h
+(the)f(fermion.)74 1516 y(\\fermionlength)499 b(The)24 b(total)f(length)g(of)
+h(the)f(fermion.)74 1679 y FE(A)15 b(common)g(usage)g(of)g(this)h(parameter)f
+(w)o(ould)g(b)q(e)h(to)f(dra)o(w)f(a)h(fermion)h(line)h(to)e(b)q(e)h(the)f
+(same)g(length)h(as,)74 1735 y(sa)o(y)l(,)f(a)f(gluon)i(line.)74
+1829 y Fk(\\begin{picture}\(9000,4500\))74 1886 y
+(\\drawline\\gluon[\\E\\REG]\(0,4)o(000\)[7])74 1942 y
+(\\drawline\\fermion[\\E\\REG]\(0)o(,0\)[\\glu)o(onlengt)o(hx])74
+1999 y(\\end{picture})105 2222 y Fz(\010)p 105 2254 2 9 v 73
+2222 9 2 v -6 w(\010)p 149 2254 2 9 v 117 2222 9 2 v -6 w(\010)p
+193 2254 2 9 v 160 2222 9 2 v -7 w(\010)p 236 2254 2 9 v 204
+2222 9 2 v -6 w(\010)p 280 2254 2 9 v 247 2222 9 2 v -7 w(\010)p
+323 2254 2 9 v 291 2222 9 2 v -6 w(\010)p 367 2254 2 9 v 334
+2222 9 2 v 89 2252 2 1 v 89 2261 a(\002)p 105 2252 V -1 w(\001)p
+98 2261 1 2 v 132 2252 2 1 v 10 w(\002)p 149 2252 V(\001)p
+141 2261 1 2 v 176 2252 2 1 v 10 w(\002)p 193 2252 V(\001)p
+185 2261 1 2 v 219 2252 2 1 v 9 w(\002)p 236 2252 V(\001)p
+229 2261 1 2 v 263 2252 2 1 v 10 w(\002)p 280 2252 V(\001)p
+272 2261 1 2 v 307 2252 2 1 v 10 w(\002)p 323 2252 V -1 w(\001)p
+316 2261 1 2 v 350 2252 2 1 v 10 w(\002)p 367 2252 V(\001)p
+359 2261 1 2 v 89 2222 a(\013)p 89 2254 2 9 v 115 2222 9 2
+v -7 w(\013)p 132 2254 2 9 v 158 2222 9 2 v -6 w(\013)p 176
+2254 2 9 v 202 2222 9 2 v -7 w(\013)p 219 2254 2 9 v 245 2222
+9 2 v -6 w(\013)p 263 2254 2 9 v 289 2222 9 2 v -6 w(\013)p
+307 2254 2 9 v 332 2222 9 2 v -7 w(\013)p 350 2254 2 9 v 376
+2222 9 2 v 73 2388 311 2 v 145 2503 a FE(Eac)o(h)g(time)g(that)g(a)g(new)h
+(line)g(is)g(dra)o(wn)f Fs(n)p FE(plengthx,y)h(are)f(re-assigned.)24
+b Fs(n)p FE(photonlengthx,y)16 b(is)h(only)74 2560 y(re-assigned)f(when)f
+(the)f(next)h(photon)f(is)i(dra)o(wn,)d Fs(n)p FE(gluonlengthx,y)j(is)f(only)
+g(re-assigned)g(when)g(the)g(next)74 2616 y(gluon)h(is)g(dra)o(wn)e
+Fo(etc.)985 2906 y FE(11)p eop
+%%Page: 12 17
+bop 74 -83 a Fq(2.7)70 b(F)-6 b(ermions)74 19 y FE(The)16 b(format)d(for)i
+(dra)o(wing)g(a)g(fermion)h(with)f Fs(n)p FE(dra)o(wline)h(is:)74
+167 y Fk(\\drawline\\fermion[<fermion)k(direction>\\REG])241
+223 y(<\(x,y\),)j(the)h(co-ordinates)e(of)h(the)h(beginning)e(of)i(the)g
+(fermion>[<length\(cpt\)>])74 371 y FE(where)11 b(the)g(argumen)o(ts)f(ha)o
+(v)o(e)h(b)q(een)h(describ)q(ed)g(in)g(the)f(preceding)h(sections.)19
+b(When)11 b Fp(FEYNMAN)p FE(dra)o(ws)74 428 y(a)18 b(fermion)g(it)g(uses)g
+(the)g Fs(n)p FE(line)h(facilit)o(y)g(of)e(L)841 422 y Ft(a)862
+428 y FE(T)887 442 y(E)913 428 y(X.)g(This)i(places)f(a)g(restriction)g(up)q
+(on)h(diagonally)g(dra)o(wn)74 484 y(fermions)13 b(\(those)e(in)i(the)f
+Fs(n)p FE(NE,)g Fs(n)p FE(SE,)f Fs(n)p FE(NW)h(and)g Fs(n)p
+FE(SW)g(directions\).)20 b(The)12 b(minim)o(um)i(length)e(of)g(suc)o(h)h
+(lines)74 541 y(is)g(1416)e(cen)o(tip)q(oin)o(ts.)20 b(The)13
+b(user)f(can)h(dra)o(w)f(fermions)g(in)i(other)e(directions)h(\(NNE)f
+Fo(etc.)i FE(\))19 b(b)o(y)12 b(utilizing)j(the)74 597 y Fs(n)p
+FE(put)h(command)f(of)h(L)453 591 y Ft(a)474 597 y FE(T)499
+611 y(E)524 597 y(X.)g(The)g(minim)o(um)h(extension)f(of)g(these)g(lines)h
+(is)g(at)e(least)h(as)f(great.)21 b(F)l(ermions)74 654 y(dra)o(wn)15
+b(in)h(the)f(N,S,E)g(and)g(W)g(directions)h(ha)o(v)o(e)f(no)g(suc)o(h)h
+(restrictions.)k(If)15 b(attempts)f(are)h(made)g(to)g(dra)o(w)74
+710 y(a)e(fermion)h(of)e(sub-minimal)k(length)e(it)f(will)i(b)q(e)f(as)f
+(though)g(it)h(w)o(ere)f(in)o(visible.)22 b(That)12 b(is)i(all)g(of)f(the)g
+(spacing)74 767 y(and)k(parameters)f(will)i(b)q(e)g(as)e(b)q(efore)h(but)g(a)
+f(blank)h(space)g(will)i(app)q(ear)e(on)f(the)h(page.)24 b(This)17
+b(e\013ect)g(ma)o(y)74 823 y(b)q(e)g(delib)q(erately)i(ac)o(hiev)o(ed)f(for)e
+Fo(any)g FE(particle)i(or)e(v)o(ertex)g(using)h(the)g Fo(phantom)g
+FE(facilit)o(y)g(discussed)h(under)74 880 y(adv)m(anced)e(features.)145
+936 y(The)21 b(only)h(option)f(really)h(a)o(v)m(ailable)h(for)d(fermions)h
+(is)h(the)f(use)h(of)e Fs(n)p FE(thic)o(klines)j(and)e Fs(n)p
+FE(thinlines)i(as)74 992 y(describ)q(ed)h(at)c(the)i(conclusion)h(of)e
+(section)i(2.4.)37 b(The)22 b(parameters)f(returned)h(b)o(y)f
+Fs(n)p FE(dra)o(wline)h(when)g(a)74 1049 y(fermion)16 b(is)f(dra)o(wn)g(are:)
+74 1197 y Fk(\\fermionfrontx,\\fermionfron)o(ty:)116 b(The)24
+b(\(x,y\))f(co-ordinates)f(of)i(the)f(front)g(of)h(the)g(line.)74
+1253 y(\\fermionbackx,\\fermionbacky)o(:)164 b(The)24 b(\(x,y\))f
+(co-ordinates)f(of)i(the)f(back)h(of)f(the)h(line.)74 1310
+y(\\fermionlengthx,\\fermionlen)o(gthy:)68 b(The)24 b(\(x,y\))f(extent)g(of)h
+(the)f(line.)74 1366 y(\\fermionlength)499 b(The)24 b(total)f(length)g(of)h
+(the)f(line.)74 1423 y(\\fermioncount)523 b(The)24 b(number)f(of)g(fermions)g
+(printed)g(thus)g(far.)74 1479 y(\\particlefrontx,\\particlefr)o(onty:)68
+b(The)24 b(\(x,y\))f(co-ords)g(of)h(the)f(front)g(of)h(the)f(line.)74
+1536 y(\\particlemidx,\\particlemidy)o(:)164 b(The)24 b(\(x,y\))f
+(co-ordinates)f(of)i(the)f(middle)g(of)h(the)f(line.)74 1592
+y(\\particlebackx,\\particlebac)o(ky:)116 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(back)h(of)f(the)h(line.)74 1649 y(\\particlelengthx,\\particlel)o
+(engthy:)c(The)k(\(x,y\))f(extent)g(of)h(the)f(line.)74 1797
+y FE(As)15 b(an)g(example:)74 1957 y Fk(\\begin{picture}\(8000,8000\))74
+2013 y(\\drawline\\fermion[\\E\\REG]\(0)o(,0\)[6000)o(])74
+2070 y(\\THICKLINES)74 2126 y(\\drawline\\fermion[\\N\\REG]\(\\)o(fermionb)o
+(ackx,\\p)o(backy\)[)o(5000])74 2182 y(\\drawline\\fermion[\\SW\\REG]\()o
+(\\fermion)o(backx,\\)o(fermion)o(backy\)[4)o(000])74 2239
+y(\\THINLINES)74 2295 y(\\drawline\\fermion[\\NW\\REG]\()o(\\pmidx,\\)o
+(pmidy\)[)o(2000])74 2352 y(\\drawline\\fermion[\\W\\REG]\(\\)o(pfrontx,)o
+(\\pfront)o(y\)[\\fer)o(mionleng)o(thy])74 2408 y(\\end{picture})74
+2512 y FE(whic)o(h)h(pro)q(duces:)p 669 2782 249 2 v 916 2781
+4 208 v 876 2616 a Ff(\000)835 2657 y(\000)801 2691 y(\000)818
+2633 y Fy(@)801 2616 y(@)p 801 2634 59 2 v 985 2906 a FE(12)p
+eop
+%%Page: 13 18
+bop 74 -83 a Fq(2.8)70 b(Scalars)74 20 y Fp(2.8.1)55 b(The)19
+b(Anatom)n(y)f(of)g(a)h(Scalar)74 106 y FE(A)i(scalar)f(particle)h(\(eg.)35
+b(a)20 b(Higgs\))g(is)h(generally)g(dra)o(wn)f(as)g(a)g(dashed)h(line,)i
+(that)d(is)h(a)f(series)h(of)e(line)74 163 y Fo(se)n(gments)14
+b FE(separated)h(b)o(y)g Fo(gaps)p FE(.)20 b(The)15 b(format)f(for)g(dra)o
+(wing)i(a)e(scalar)i(with)f Fs(n)p FE(dra)o(wline)h(is:)74
+313 y Fk(\\drawline\\scalar[<scalar)21 b(direction>\\REG])241
+369 y(<\(x,y\),)i(the)h(co-ordinates)e(of)h(the)h(beginning)e(of)i(the)g
+(scalar>)241 426 y([<number)f(of)h(segments>])74 576 y FE(W)l(e)16
+b(note)f(the)g(similarit)o(y)h(b)q(et)o(w)o(een)g(the)f(fermion)h(and)g
+(scalar)f(lines.)21 b(The)16 b(principal)i(di\013erence)e(is)g(in)g(the)74
+632 y(units)g(of)f(length.)21 b(Here)16 b(the)f(exten)o(t)h(of)e(the)i(line)h
+(is)f(giv)o(en)g(b)o(y)f(an)g(in)o(tegral)h(n)o(um)o(b)q(er)g(of)f(segmen)o
+(ts.)20 b(These)74 689 y(will)c(b)q(e)e(of)g(equal)g(length)h(and)f(equally)h
+(spaced.)20 b(The)14 b(same)g(limitations)h(on)e(the)h(length)h(of)e(fermion)
+i(lines)74 745 y(applies)g(here:)k(diagonal)14 b(\(NW,)e(NE)h
+Fo(etc.)h FE(\))19 b(line)c(segmen)o(ts)d(ma)o(y)h(not)f(b)q(e)i(shorter)f
+(than)f(1416)g(cen)o(tip)q(oin)o(ts,)74 802 y(whic)o(h)20 b(is)f(the)g
+(default)g(length)g(for)g(all)g(directions.)32 b(The)19 b(default)g(gap)g
+(length)g(is)g(850)f(cen)o(tip)q(oin)o(ts)i(and)74 858 y(there)d(is)g(no)g
+(innate)h(limitation)g(on)e(this)i(v)m(alue)g(\(other)e(than)g(it)h(m)o(ust)g
+(not)f(b)q(e)h(negativ)o(e)g(or)g(larger)f(than)74 915 y(the)e(page)g
+(size\).)20 b(A)o(ttempts)13 b(to)h(dra)o(w)f(a)h(slan)o(ted)g(scalar)g(with)
+h(segmen)o(ts)e(of)h(under)g(1416)f(cen)o(tip)q(oin)o(ts)i(will)74
+971 y(lead)h(to)f(a)g(blank)h(space)f(in)h(the)f(diagram.)145
+1028 y(The)g(parameters)g(returned)g(b)o(y)g Fs(n)p FE(dra)o(wline)h(when)g
+(a)f(scalar)g(is)h(dra)o(wn)e(are:)74 1178 y Fk
+(\\scalarfrontx,\\scalarfronty)o(:)164 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(front)g(of)h(the)g(scalar.)74 1234 y
+(\\scalarbackx,\\scalarbacky:)211 b(The)24 b(\(x,y\))f(co-ordinates)f(of)i
+(the)f(back)h(of)f(the)h(scalar.)74 1291 y(\\scalarlengthx,\\scalarlengt)o
+(hy:)116 b(The)24 b(\(x,y\))f(extent)g(of)h(the)f(scalar.)74
+1347 y(\\scalarcount:)523 b(The)24 b(total)f(number)g(of)h(scalars)f(printed)
+f(thus)i(far.)74 1404 y(\\particlefrontx,\\particlefr)o(onty:)68
+b(The)24 b(\(x,y\))f(co-ords)g(of)h(the)f(front)g(of)h(the)f(line.)74
+1460 y(\\particlemidx,\\particlemidy)o(:)164 b(The)24 b(\(x,y\))f
+(co-ordinates)f(of)i(the)f(middle)g(of)h(the)f(line.)74 1517
+y(\\particlebackx,\\particlebac)o(ky:)116 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(back)h(of)f(the)h(line.)74 1573 y(\\particlelengthx,\\particlel)o
+(engthy:)c(The)k(\(x,y\))f(extent)g(of)h(the)f(line.)74 1751
+y Fp(2.8.2)55 b(Adjusting)19 b(the)g(Spacing)74 1837 y FE(The)d(segmen)o(t)g
+(length)h(is)f(giv)o(en,)g(in)h(cen)o(tip)q(oin)o(ts,)g(b)o(y)f(the)g(v)m
+(ariable)h Fs(n)p FE(seglength)g(and)f(the)g(gap)g(length)g(b)o(y)74
+1894 y Fs(n)p FE(gaplength.)k(Both)15 b(are)g(adjustable)h(b)o(y)f(the)g
+(user)g(b)o(y)h(issuing)g(the)f(commands:)74 2000 y Fk
+(\\global\\seglength=<your)21 b(length)i(in)h(centipoints>)74
+2056 y(\\global\\gaplength=<your)d(length)i(in)h(centipoints>)74
+2163 y FE(just)13 b(prior)f(to)g(a)h Fs(n)p FE(dra)o(wline)p
+Fs(n)p FE(scalar)g(command.)19 b(After)12 b(this)h(they)g(automatically)g
+(return)f(to)g(their)i(default)74 2219 y(v)m(alues)h(of)d(1416)g(and)i(850.)k
+(If)13 b(only)h(one)g(is)f(adjusted)h(the)f(other)g(will)h(retain)g(its)f
+(default)h(v)m(alue.)20 b(The)14 b(mo)q(d-)74 2275 y(i\014ers)h
+Fs(n)p FE(thic)o(klines)h(and)e Fs(n)p FE(thinlines)i(w)o(ork)d(normally)h
+(here)h(with)f Fs(n)p FE(thinlines)i(the)e(default)h(\(but)e
+Fs(n)p FE(thic)o(klines)74 2332 y(will)k(remain)f(in)g(e\013ect)f(un)o(til)h
+Fs(n)p FE(thinlines)h(or)e Fs(n)p FE(end)p Fs(f)p FE(picture)p
+Fs(g)h FE(is)g(encoun)o(tered\).)145 2438 y(These)f(features)g(are)g
+(illustrated)i(b)o(y)e(the)g(follo)o(wing)h(sample)g(\014le:)985
+2906 y(13)p eop
+%%Page: 14 19
+bop 74 -26 a Fk(\\begin{picture}\(25000,25000)o(\))74 30 y(\045)24
+b(First)f(picture:)74 87 y(\\drawline\\scalar[\\E\\REG]\(60)o(00,0\)[5])74
+143 y(\\drawline\\fermion[\\SE\\REG]\()o(\\scalarb)o(ackx,\\s)o(calarba)o
+(cky\)[200)o(0])74 199 y(\\drawline\\fermion[\\NE\\REG]\()o(\\scalarb)o
+(ackx,\\s)o(calarba)o(cky\)[200)o(0])74 256 y
+(\\drawline\\fermion[\\SW\\REG]\()o(\\scalarf)o(rontx,\\)o(scalarf)o
+(ronty\)[2)o(000])74 312 y(\\drawline\\fermion[\\NW\\REG]\()o(\\scalarf)o
+(rontx,\\)o(scalarf)o(ronty\)[2)o(000])74 369 y(\\global\\seglength=1000)45
+b(\\global\\gaplength=250)74 425 y(\\drawline\\scalar[\\W\\REG]\(\\p)o
+(backx,\\p)o(backy\)[)o(5])74 482 y(\\drawline\\fermion[\\SW\\REG]\()o
+(\\particl)o(ebackx,)o(\\partic)o(lebacky\))o([2000])74 538
+y(\\drawline\\fermion[\\NW\\REG]\()o(\\scalarb)o(ackx,\\s)o(calarba)o
+(cky\)[200)o(0])74 595 y(\\drawline\\fermion[\\NE\\REG]\()o(\\scalarf)o
+(rontx,\\)o(scalarf)o(ronty\)[2)o(000])74 651 y(\\put\(4000,0\){1})74
+764 y(\045)24 b(Second)f(Picture:)74 820 y(\\THICKLINES)74
+877 y(\\drawline\\fermion[\\N\\REG]\(2)o(3000,300)o(0\)[1234)o(5])74
+933 y(\\global\\gaplength=473)74 990 y(\\drawline\\scalar[\\NW\\REG]\(\\)o
+(pbackx,\\)o(fermion)o(backy\)[)o(3])74 1046 y(\\global\\gaplength=473)74
+1103 y(\\drawline\\scalar[\\NE\\REG]\(\\)o(fermionb)o(ackx,\\p)o(fronty\))o
+([3])74 1159 y(\\drawline\\scalar[\\SW\\REG]\(\\)o(fermionf)o(rontx,\\)o
+(fermion)o(fronty\)[)o(3])74 1216 y(\\drawline\\scalar[\\SE\\REG]\(\\)o
+(fermionf)o(rontx,\\)o(fermion)o(fronty\)[)o(3])74 1272 y
+(\\put\(23500,14000\){2})74 1385 y(\045)h(Third)f(Picture:)74
+1441 y(\\THINLINES)74 1498 y(\\global\\gaplength=0)69 b
+(\\global\\seglength=1000)74 1554 y(\\drawline\\scalar[\\S\\REG]\(10)o
+(00,16000)o(\)[4])74 1611 y(\\drawline\\fermion[\\NW\\REG]\()o(1000,160)o
+(00\)[150)o(0])74 1667 y(\\drawline\\fermion[\\NE\\REG]\()o(1000,160)o
+(00\)[150)o(0])74 1724 y(\\drawline\\fermion[\\SW\\REG]\()o(1000,120)o
+(00\)[150)o(0])74 1780 y(\\drawline\\fermion[\\SE\\REG]\()o(1000,120)o
+(00\)[150)o(0])74 1837 y(\\put\(1500,14000\){3})74 1950 y(\045)24
+b(Fourth)f(Picture:)74 2006 y(\\global\\gaplength=500)45 b
+(\\global\\seglength=500)74 2062 y(\\thicklines)74 2119 y
+(\\drawline\\scalar[\\NE\\REG]\(6)o(000,7000)o(\)[10])74 2175
+y(\\put\(\\pmidx,\\pmidy\){4})74 2232 y(\\drawline\\fermion[\\W\\REG]\(\\)o
+(scalarfr)o(ontx,\\s)o(calarfr)o(onty\)[25)o(00])74 2288 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(scalarfr)o(ontx,\\s)o(calarfr)o
+(onty\)[25)o(00])74 2345 y(\\drawline\\fermion[\\E\\REG]\(\\)o(scalarba)o
+(ckx,\\sc)o(alarbac)o(ky\)[2500)o(])74 2401 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(scalarba)o(ckx,\\sc)o(alarbac)o
+(ky\)[2500)o(])74 2458 y(\\end{picture})74 2620 y FE(whic)o(h)16
+b(pro)q(duces:)985 2906 y(14)p eop
+%%Page: 15 20
+bop 393 914 59 2 v 487 914 V 581 914 V 675 914 V 769 914 V
+828 954 a Fy(@)845 972 y(@)828 913 y(\000)845 896 y(\000)351
+954 y(\000)334 972 y(\000)351 913 y(@)334 896 y(@)p 293 855
+42 2 v 241 855 V 189 855 V 137 855 V 85 855 V -332 w(\000)27
+913 y(\000)44 854 y(@)27 837 y(@)334 854 y(\000)351 837 y(\000)311
+913 y FE(1)p 1097 788 4 513 v 1057 276 a Ff(@)-42 b(@)1001
+221 y(@)g(@)946 165 y(@)g(@)1098 276 y(\000)g(\000)1154 221
+y(\000)g(\000)1209 165 y(\000)g(\000)1057 830 y(\000)g(\000)990
+896 y(\000)g(\000)924 963 y(\000)g(\000)1098 830 y(@)g(@)1165
+896 y(@)g(@)1231 963 y(@)g(@)1120 332 y FE(2)p 185 291 2 42
+v 185 332 V 185 374 V 185 415 V 144 249 a Fy(@)142 247 y(@)185
+249 y(\000)188 247 y(\000)144 457 y(\000)142 459 y(\000)185
+457 y(@)188 459 y(@)207 332 y FE(3)533 483 y(4)p 289 624 104
+4 v 391 726 4 104 v 671 346 104 4 v 670 344 4 104 v 145 1119
+a(There)10 b(are)g(a)g(few)g(p)q(oin)o(ts)g(of)g(note.)18 b(In)11
+b(the)f(\014rst)g(picture)h(observ)o(e)f(ho)o(w)g Fs(n)p FE(pbac)o(kx,y)f(\()
+p Fs(\021n)p FE(particlebac)o(kx,y\))74 1175 y(is)14 b(used)f(as)g(opp)q
+(osed)h(to)e Fs(n)p FE(scalarbac)o(kx,y)l(.)19 b(F)l(or)12
+b(more)h(on)g(this)h(p)q(oin)o(t)f(see)g(section)h(2.1.)k(Also)c(note)f(that)
+f(the)74 1232 y Fs(n)p FE(seglength)f(assignmen)o(ts)g(sta)o(y)f(in)i
+(e\013ect)f(un)o(til)h(the)f(next)g(scalar)g(is)h(dra)o(wn.)18
+b(The)11 b(second)h(\014gure)f(illustrates)74 1288 y(ho)o(w)k
+Fs(n)p FE(gaplength)g(automatically)g(rev)o(erts)g(to)f(its)h(default)h(and)f
+(further)g(demonstrates)f(the)h(assignmen)o(ts)74 1345 y(of)g(the)g
+(co-ordinate)g(v)m(ariables.)21 b(The)15 b(third)h(diagram)f(sho)o(ws)f(that)
+g(a)h(zero)g(gaplength)g(creates)g(a)g(fermion)74 1401 y(and)21
+b(that)f(n)o(umerical)i(co-ordinates)f(ma)o(y)f(b)q(e)h(used)g(just)g(as)f
+(easily)i(as)e(the)h(pre-assigned)g(p)q(ositioning)74 1457
+y(v)m(ariables.)g(This)14 b(is)g(also)g(illustrated)h(b)o(y)f(the)g(p)q
+(ositioning)h(of)e(the)h(n)o(umerical)h(lab)q(els)h(\(1,2,3,4\))10
+b(whic)o(h)15 b(w)o(as)74 1514 y(accomplished)g(with)d(minimal)i(though)o(t.)
+19 b(Finally)14 b(the)e(fourth)g(diagram)h(sho)o(ws)e(what)h(happ)q(ens)i
+(when)f(the)74 1570 y(v)m(alue)20 b(of)e Fs(n)p FE(seglength)h(is)g(reduced)g
+(to)f(less)h(that)f(1416)f(for)h(a)g(diagonal)h(\(non-horizon)o(tal,)h(non-v)
+o(ertical\))74 1627 y(scalar.)g(It)15 b(also)g(demonstrates)g(ho)o(w)g(to)f
+(lo)q(cate)i(the)f(cen)o(tral)g(p)q(oin)o(t)h(of)f(a)g(line.)74
+1770 y Fq(2.9)70 b(Photons)74 1873 y Fp(2.9.1)55 b(The)19 b(Anatom)n(y)f(of)g
+(a)h(Photon)74 1959 y FE(A)f(photon)g(line)h(consists)f(of)f(a)h(series)g(of)
+g(`wiggles')f(or)h(undulations.)29 b(The)18 b(length)g(of)g(eac)o(h)g
+(undulation)74 2015 y(dep)q(ends)h(up)q(on)f(the)f(st)o(yle)g(of)f(photon)h
+(selected.)27 b(The)17 b(format)f(for)g(dra)o(wing)h(a)g(photon)g(with)g
+Fs(n)p FE(dra)o(wline)74 2072 y(is:)74 2222 y Fk(\\drawline\\photon[<photon)k
+(direction><photon)g(style>])241 2279 y(<\(x,y\),)i(the)h(co-ordinates)e(of)h
+(the)h(beginning)e(of)i(the)g(photon>)241 2335 y([<number)f(of)h
+(HALF-wiggles>])74 2485 y FE(The)15 b(reason)f(for)f(sp)q(ecifying)k(the)d(n)
+o(um)o(b)q(er)h(of)f Fo(half)p FE(-wiggles)h(is)g(that)e(it)i(is)g(sometimes)
+f(con)o(v)o(enien)o(t)h(to)f(ha)o(v)o(e)74 2542 y(a)h(line)i(b)q(egin)f(and)g
+(end)g(in)g(either)g(orien)o(tation)f(\(see)g(section)h(2.6.1)d(for)i(an)g
+(example)h(of)f(this\).)145 2598 y(The)g(st)o(yles)g(curren)o(tly)h(a)o(v)m
+(ailable)h(for)e(photons)g(are:)985 2906 y(15)p eop
+%%Page: 16 21
+bop 862 -83 a Fk(\\REG)862 -26 y(\\FLIPPED)862 30 y(\\CURLY)862
+87 y(\\FLIPPEDCURLY)862 143 y(\\FLAT)862 199 y(\\FLIPPEDFLAT)862
+256 y(\\LONGPHOTON)862 312 y(\\FLIPPEDLONG)145 471 y FE(The)16
+b Fs(n)p FE(REG)g(and)h Fs(n)p FE(FLIPPED)f(st)o(yles)h(are)f(a)o(v)m
+(ailable)i(in)f(all)g(orien)o(tations.)24 b(The)16 b Fs(n)p
+FE(LONGPHOTON)74 528 y(and)21 b Fs(n)p FE(FLIPPEDLONG)f(photons)g(are)g(only)
+h(a)o(v)m(ailable)h(in)f(the)g Fs(n)p FE(N)f(and)g Fs(n)p FE(S)h(directions.)
+36 b(The)21 b(others)74 584 y(are)16 b(a)o(v)m(ailable)h(only)f(in)h(the)f
+(follo)o(wing)g(directions:)23 b Fk(\\N,)g(\\S,)g(\\NE,)h(\\SE,)f(\\NW,)g
+(\\SW)p FE(.)15 b(The)h Fs(n)p FE(thic)o(klines)74 641 y(option)g(is)h(only)f
+(a)o(v)m(ailable)i(to)d(photons)h(dra)o(wn)f(in)i(the)f Fk(\\NE,)24
+b(\\SW,)f(\\SE)g FE(and)16 b Fk(\\NW)g FE(directions,)h(ho)o(w)o(ev)o(er)74
+697 y Fs(n)p FE(THICKLINES)12 b(is)g(also)f(a)o(v)m(ailable)h(in)g(the)f
+Fk(\\E)g FE(and)g Fk(\\W)f FE(orien)o(tations)h(and)g(has)g(the)g(same)g
+(e\013ect.)18 b(A)o(ttempts)74 753 y(to)f(dra)o(w)g(a)h(com)o(bination)g
+(other)f(than)h(these)g(will)h(result)f(in)h(an)e(error)g(message)h(on)f(the)
+h(screen)g(and)g(in)74 810 y(the)d Fx(<)p FE(jobname)p Fx(>)p
+FE(.lis)i(\014le.)k(These)16 b(options)f(will)i(b)q(e)f(illustrated)g(in)g
+(the)f(next)h(subsection.)145 866 y(The)e(parameters)f(returned)i(b)o(y)f
+Fs(n)p FE(dra)o(wline)p Fs(n)p FE(photon)h(are)e(analogous)h(to)g(those)g
+(returned)g(after)g(dra)o(w-)74 923 y(ing)i(fermions)f(and)h(scalars.)k
+(These)15 b(are:)74 1070 y Fk(\\photonfrontx,\\photonfronty)o(:)164
+b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(front)g(of)h(the)g(line.)74
+1127 y(\\photonbackx,\\photonbacky:)211 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(back)h(of)f(the)h(line.)74 1183 y(\\photonlengthx,\\photonlengt)o
+(hy:)116 b(The)24 b(\(x,y\))f(extent)g(of)h(the)f(line.)74
+1240 y(\\photoncount)547 b(The)24 b(number)f(of)g(photons)g(printed)g(thus)h
+(far.)74 1296 y(\\particlefrontx,\\particlefr)o(onty:)68 b(The)24
+b(\(x,y\))f(co-ords)g(of)h(the)f(front)g(of)h(the)f(line.)74
+1353 y(\\particlemidx,\\particlemidy)o(:)164 b(The)24 b(\(x,y\))f
+(co-ordinates)f(of)i(the)f(middle)g(of)h(the)f(line.)74 1409
+y(\\particlebackx,\\particlebac)o(ky:)116 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(back)h(of)f(the)h(line.)74 1465 y(\\particlelengthx,\\particlel)o
+(engthy:)c(The)k(\(x,y\))f(extent)g(of)h(the)f(line.)74 1643
+y Fp(2.9.2)55 b(Examples)17 b(and)i(Details)74 1729 y FE(The)d(di\013eren)o
+(t)f(st)o(yles)g(of)g(photon)g(are:)139 2012 y Fe(\))139 2112
+y(\))139 2211 y(\))129 2062 y(\()129 2162 y(\()129 2261 y(\()20
+1892 y Fd(n)p Fm(LONGPHOTON)380 2012 y Fe(\()380 2112 y(\()380
+2211 y(\()390 2062 y(\))390 2162 y(\))390 2261 y(\))282 1892
+y Fd(n)p Fm(FLIPPEDLONG)638 2011 y Fe(\))638 2102 y(\))638
+2194 y(\))632 2057 y(\()632 2148 y(\()632 2239 y(\()580 1892
+y Fd(n)p Fm(CURL)n(Y)878 2012 y Fe(\()878 2104 y(\()878 2195
+y(\()884 2058 y(\))884 2149 y(\))884 2240 y(\))767 1892 y Fd(n)p
+Fm(FLIPPEDCURL)n(Y)1136 2012 y Fe(\))1136 2095 y(\))1136 2178
+y(\))1131 2054 y(\()1131 2137 y(\()1131 2220 y(\()1099 1892
+y Fd(n)p Fm(FLA)n(T)1375 2012 y Fe(\()1375 2095 y(\()1375 2178
+y(\()1378 2055 y(\))1378 2138 y(\))1378 2221 y(\))1265 1892
+y Fd(n)p Fm(FLIPPEDFLA)n(T)1635 2006 y FA(\))1635 2089 y(\))1635
+2172 y(\))1626 2047 y(\()1626 2130 y(\()1626 2213 y(\()1597
+1892 y Fd(n)p Fm(REG)1874 2006 y FA(\()1874 2089 y(\()1874
+2172 y(\()1884 2047 y(\))1884 2130 y(\))1884 2213 y(\))1804
+1892 y Fd(n)p Fm(FLIPPED)145 2453 y FE(The)g(di\013eren)o(t)h(directions)g
+(ma)o(y)f(b)q(e)g(illustrated)i(b)o(y)e(the)g(follo)o(wing)h(\014le:)74
+2612 y Fk(\045)24 b(EXAMPLE)f(OF)g(USING)h(FEYNMAN)e(TO)i(DRAW)f(PHOTON)g
+(DIAGRAMS)g(IN)h(TEX.)74 2669 y(\\documentstyle)e([11pt]{article})74
+2725 y(\\input)h(FEYNMAN)74 2781 y(\\begin)g({document})985
+2906 y FE(16)p eop
+%%Page: 17 22
+bop 74 -83 a Fk(\\centerline{PHOTONBURST)21 b(using)i(FEYNMAN})74
+-26 y(\\vskip)g(0.75in)74 30 y(\\hskip)g(1.2in)74 87 y
+(\\begin{picture}\(20000,20000)o(\)\(-10000)o(,-10000)o(\))74
+143 y(\\put\(0,0\){\\circle*{1500}})74 199 y
+(\\drawline\\photon[\\N\\REG]\(0,)o(0\)[8])74 256 y
+(\\drawline\\photon[\\NE\\CURLY])o(\(0,0\)[8])74 312 y
+(\\drawline\\photon[\\E\\REG]\(0,)o(0\)[8])74 369 y
+(\\drawline\\photon[\\SE\\CURLY])o(\(0,0\)[8])74 425 y
+(\\drawline\\photon[\\S\\REG]\(0,)o(0\)[8])74 482 y
+(\\drawline\\photon[\\SW\\CURLY])o(\(0,0\)[8])74 538 y
+(\\drawline\\photon[\\W\\REG]\(0,)o(0\)[8])74 595 y
+(\\drawline\\photon[\\NW\\CURLY])o(\(0,0\)[8])74 651 y(\\end{picture})74
+708 y(\\end{document})74 853 y FE(Whic)o(h)16 b(pro)q(duces:)642
+910 y(PHOTONBURST)g(using)g(FEYNMAN)980 1563 y Fz(~)967 1552
+y FA(\()967 1469 y(\()967 1386 y(\()967 1303 y(\()977 1511
+y(\))977 1428 y(\))977 1345 y(\))977 1262 y(\))p 1036 1509
+2 5 v 1036 1534 a Fz(\011)p 1008 1534 5 2 v 1094 1451 2 5 v
+1094 1476 a(\011)p 1066 1476 5 2 v 1152 1393 2 5 v 1152 1418
+a(\011)p 1124 1418 5 2 v 1210 1334 2 5 v 1210 1360 a(\011)p
+1182 1360 5 2 v 978 1534 a(\013)p 978 1563 2 5 v 1004 1534
+5 2 v 1036 1476 a(\013)p 1036 1505 2 5 v 1062 1476 5 2 v 1094
+1418 a(\013)p 1094 1447 2 5 v 1120 1418 5 2 v 1152 1360 a(\013)p
+1152 1388 2 5 v 1178 1360 5 2 v 975 1569 a Fg(_)35 b(_)f(_)g(_)1017
+1579 y(^)g(^)g(^)g(^)1007 1564 y Fz(\010)p 1007 1592 2 5 v
+979 1564 5 2 v 1065 1622 a(\010)p 1065 1650 2 5 v 1037 1622
+5 2 v 1123 1680 a(\010)p 1123 1708 2 5 v 1095 1680 5 2 v 1181
+1738 a(\010)p 1181 1766 2 5 v 1153 1738 5 2 v 1007 1596 2 5
+v 1007 1622 a(\012)p 1033 1622 5 2 v 1065 1654 2 5 v 1065 1680
+a(\012)p 1091 1680 5 2 v 1123 1712 2 5 v 1123 1738 a(\012)p
+1149 1738 5 2 v 1181 1770 2 5 v 1181 1796 a(\012)p 1207 1796
+5 2 v 977 1593 a FA(\))977 1676 y(\))977 1759 y(\))977 1842
+y(\))967 1635 y(\()967 1718 y(\()967 1801 y(\()967 1884 y(\()p
+978 1567 2 5 v 978 1593 a Fz(\011)p 950 1593 5 2 v 920 1625
+2 5 v 920 1651 a(\011)p 892 1651 5 2 v 862 1683 2 5 v 862 1709
+a(\011)p 834 1709 5 2 v 804 1741 2 5 v 804 1767 a(\011)p 776
+1767 5 2 v 920 1593 a(\013)p 920 1621 2 5 v 946 1593 5 2 v
+862 1651 a(\013)p 862 1679 2 5 v 888 1651 5 2 v 804 1709 a(\013)p
+804 1737 2 5 v 830 1709 5 2 v 746 1767 a(\013)p 746 1795 2
+5 v 771 1767 5 2 v 894 1569 a Fg(_)-132 b(_)g(_)f(_)936 1579
+y(^)g(^)h(^)g(^)p 949 1538 2 5 v 949 1563 a Fz(\012)p 975 1564
+5 2 v 891 1480 2 5 v 891 1505 a(\012)p 917 1505 5 2 v 833 1422
+2 5 v 833 1447 a(\012)p 859 1447 5 2 v 775 1364 2 5 v 775 1389
+a(\012)p 801 1389 5 2 v 949 1505 a(\010)p 949 1534 2 5 v 921
+1505 5 2 v 891 1447 a(\010)p 891 1476 2 5 v 863 1447 5 2 v
+833 1389 a(\010)p 833 1417 2 5 v 805 1389 5 2 v 775 1331 a(\010)p
+775 1359 2 5 v 747 1331 5 2 v 145 2184 a FE(A)10 b(n)o(um)o(b)q(er)g(of)g(p)q
+(oin)o(ts)h(ma)o(y)e(b)q(e)i(noted.)18 b(The)11 b(\014rst)e(is)i(the)f
+(additional)i(argumen)o(t)d(in)i(the)f Fs(n)p FE(b)q(egin)p
+Fs(f)p FE(picture)p Fs(g)74 2240 y FE(statemen)o(t.)17 b(This)11
+b(sets)f(the)g(lo)o(w)o(er)g(left-hand)h(corner)f(of)g(the)g(picture)h(b)q(o)
+o(x)f(to)g(the)g(co-ordinates)g(\(-10000,-10000\))74 2297 y(in)i(cen)o(tip)q
+(oin)o(ts.)20 b(Th)o(us)11 b(far)f(this)h(has)g(b)q(een)h(omitted)f(and)h
+(this)f(corner)g(is)h(assigned)f(the)g(default)h(co-ordinate)74
+2353 y(of)h(\(0,0\).)k(The)c(next)g(p)q(oin)o(t)g(is)h(the)f(use)g(of)f
+Fs(n)p FE(circle*.)20 b(This)14 b(dra)o(ws)e(a)g(disk)i(cen)o(tred)f(at)f
+(the)h(sp)q(eci\014ed)i(sp)q(ot)e(of)74 2410 y(the)g(demanded)h(diameter.)20
+b(Only)14 b(small)g(disks)g(can)f(b)q(e)g(th)o(us)g(dra)o(wn.)19
+b(Also)13 b(note)g(that)g(all)h(of)e(the)h(photons)74 2466
+y(b)q(egin)18 b(their)f(curv)m(ature)g(in)g(a)f Fo(clo)n(ckwise)g
+FE(sense.)24 b(Similarly)18 b(the)f Fs(n)p FE(\015ipp)q(ed)h(v)o(ersions)f(b)
+q(egin)h(in)f(a)f(coun)o(ter-)74 2523 y(clo)q(c)o(kwise)i(orien)o(tation.)26
+b(In)17 b(passing,)g(the)h Fs(n)p FE(cen)o(terline)g(command)f(ma)o(y)f(b)q
+(e)i(used)f(as)g(an)g(alternativ)o(e)g(to)74 2579 y(the)e(L)164
+2573 y Ft(a)185 2579 y FE(T)210 2593 y(E)236 2579 y(X)g(cen)o(tered)h(en)o
+(vironmen)o(t.)145 2636 y(The)k(next)f(example)i(illustrates)g(a)e(case)h
+(where)g(it)g(b)q(ecomes)g(useful)h(to)e(b)q(e)h(able)h(to)e(dra)o(w)g(an)h
+(o)q(dd)74 2692 y(n)o(um)o(b)q(er)c(of)e(half-wiggles.)985
+2906 y(17)p eop
+%%Page: 18 23
+bop 74 -83 a Fk(\\documentstyle)22 b([12pt]{article})74 -26
+y(\\input)h(FEYNMAN)74 30 y(\\begin)g({document})74 87 y(\\bigphotons)74
+143 y(\\begin{picture}\(10000,10000)o(\)\(0,0\))74 199 y
+(\\drawline\\photon[\\E\\REG]\(0,)o(0\)[8])45 b(\045)23 b(Even)h(number)f(of)
+g(half-wiggles.)74 256 y(\\drawline\\fermion[\\NW\\REG]\()o(\\photonf)o
+(rontx,\\)o(photonf)o(ronty\)[\\)o(photonl)o(engthx])170 312
+y(\045)g(Make)h(the)f(fermions)g(the)g(same)h(length)f(as)g(the)h(photon.)74
+369 y(\\drawline\\fermion[\\SW\\REG]\()o(\\photonf)o(rontx,\\)o(photonf)o
+(ronty\)[\\)o(photonl)o(engthx])74 425 y(\\drawline\\fermion[\\NE\\REG]\()o
+(\\photonb)o(ackx,\\p)o(hotonba)o(cky\)[\\ph)o(otonlen)o(gthx])74
+482 y(\\drawline\\fermion[\\SE\\REG]\()o(\\photonb)o(ackx,\\p)o(hotonba)o
+(cky\)[\\ph)o(otonlen)o(gthx])74 538 y(\\global\\divide\\fermionlengt)o(h)d
+(by)j(2)47 b(\045)h(Halves)23 b(\\fermionlength)74 595 y
+(\\drawline\\photon[\\E\\REG]\(\\p)o(midx,\\pm)o(idy\)[9])44
+b(\045)24 b(Odd)f(number)g(of)h(half-wiggles.)74 651 y
+(\\drawline\\fermion[\\SW\\REG]\()o(\\photonb)o(ackx,\\p)o(hotonba)o
+(cky\)[\\fe)o(rmionle)o(ngth])170 708 y(\045)f(Draws)h(fermion)e(at)i(the)f
+(halved)h(value)f(of)g(\\fermionlength...which)e(is)170 764
+y(\045)i(Half)h(of)f(the)h(value)f(of)g(the)h(previous)f(fermions.)74
+820 y(\\drawline\\fermion[\\NE\\REG]\()o(\\photonb)o(ackx,\\p)o(hotonba)o
+(cky\)[\\fe)o(rmionle)o(ngth])74 877 y(\\drawline\\photon[\\E\\FLIPPED)o
+(]\(\\pback)o(x,\\pbac)o(ky\)[8])44 b(\045)24 b(Even)f(number)g(of)h
+(half-wiggles.)74 933 y(\\drawline\\fermion[\\NW\\REG]\()o(\\photonf)o
+(rontx,\\)o(photonf)o(ronty\)[\\)o(photonl)o(engthx])170 990
+y(\045)f(Make)h(the)f(fermions)g(the)g(same)h(length)f(as)g(the)h(photon.)74
+1046 y(\\drawline\\fermion[\\NE\\REG]\()o(\\photonb)o(ackx,\\p)o(hotonba)o
+(cky\)[\\ph)o(otonlen)o(gthx])74 1103 y(\\drawline\\fermion[\\SE\\REG]\()o
+(\\photonb)o(ackx,\\p)o(hotonba)o(cky\)[\\ph)o(otonlen)o(gthx])74
+1159 y(\\end{picture})74 1216 y(\\vskip)f(1in)74 1272 y(\\end{document})74
+1430 y FE(Whic)o(h)16 b(dra)o(ws:)290 1810 y Fg(_)35 b(_)f(_)g(_)332
+1821 y(^)g(^)g(^)h(^)252 1804 y Fy(@)211 1762 y(@)169 1721
+y(@)128 1679 y(@)86 1638 y(@)59 1610 y(@)252 1845 y(\000)211
+1887 y(\000)169 1929 y(\000)128 1970 y(\000)86 2012 y(\000)59
+2039 y(\000)626 1804 y(\000)668 1762 y(\000)709 1721 y(\000)751
+1679 y(\000)792 1638 y(\000)820 1610 y(\000)626 1845 y(@)668
+1887 y(@)709 1929 y(@)751 1970 y(@)792 2012 y(@)820 2039 y(@)740
+1927 y Fg(_)g(_)f(_)g(_)g(_)782 1938 y(^)g(^)g(^)g(^)1076 1963
+y Fy(\000)1035 2004 y(\000)1000 2039 y(\000)1118 1921 y(\000)1159
+1880 y(\000)1194 1846 y(\000)1232 1821 y Fg(^)g(^)g(^)g(^)1273
+1811 y(_)h(_)f(_)g(_)1194 1804 y Fy(@)1152 1762 y(@)1111 1721
+y(@)1069 1679 y(@)1028 1638 y(@)1000 1610 y(@)1568 1804 y(\000)1609
+1762 y(\000)1651 1721 y(\000)1692 1679 y(\000)1734 1638 y(\000)1761
+1610 y(\000)1568 1845 y(@)1609 1887 y(@)1651 1929 y(@)1692
+1970 y(@)1734 2012 y(@)1761 2039 y(@)145 2160 y FE(Let)20 b(us)h(analyse)g
+(this.)36 b(The)21 b(\014rst)f(new)h(feature)f(that)g(w)o(e)g(see)h(is)g(the)
+g(\\)p Fs(n)p FE(bigphotons")f(statemen)o(t.)74 2217 y(This)e(statemen)o(t)e
+(is)h(only)h(required)g(when)g(photons)f(are)g(going)g(to)f(b)q(e)i(dra)o(wn)
+f(either)g(in)h(the)f Fs(n)p FE(E)g(or)g Fs(n)p FE(W)74 2273
+y(directions)g Fu(and)g FE(the)f(do)q(cumen)o(t)g(size)h(has)e(b)q(een)i
+(selected)g(to)f(b)q(e)g([12pt].)21 b(It)16 b(is)g(b)q(est)g(to)f(include)j
+(it)f(auto-)74 2330 y(matically)c(if)e(an)o(y)g(F)l(eynman)h(diagrams)f(are)g
+(to)f(b)q(e)i(dra)o(wn)f(in)h(a)f(12pt)g(do)q(cumen)o(t.)19
+b(It)11 b(should)i(app)q(ear)e(some-)74 2386 y(where)18 b(after)e(the)h
+Fs(n)p FE(input)h(FEYNMAN)f(statemen)o(t)f(and)i(b)q(efore)f(the)g(\014rst)g
+Fk(\\drawline\\photon[\\E...)74 2443 y FE(or)e Fk(\\drawline\\photon[\\W...)d
+FE(command.)20 b(This)c(is)f(the)h(only)f(instance)h(when)g(it)f(is)h(used.)
+145 2499 y(The)23 b(next)f(thing)i(w)o(e)e(observ)o(e)h(is)g(ho)o(w)f(the)h
+Fs(n)p FE(photonlengthx)g(w)o(as)f(used)h(to)f(dra)o(w)g(the)h(fermions)74
+2556 y(and)18 b(photons)f(to)g(the)h(same)f(length.)28 b(This)18
+b(tec)o(hnique)h(could)g(not)e(b)q(e)h(used)g(to)f(dra)o(w,)g(sa)o(y)l(,)h
+(gluons)g(and)74 2612 y(photons)h(to)f(the)h(same)g(length.)31
+b(Because)20 b(of)f(the)g(angle)g(b)q(et)o(w)o(een)g(the)g(second)h
+(\(middle\))g(photon)e(line)74 2669 y(and)e(the)g(fermion)h(legs)f(to)f(whic)
+o(h)i(it)g(is)f(attac)o(hed)f(it)i(w)o(as)e(desirable)i(to)f(dra)o(w)f(b)q
+(oth)h(ends)h(of)e(the)h(photon)74 2725 y(as)g(`do)o(wn-turning'.)22
+b(If)16 b(the)g(connecting)h(photon)e(had)i(b)q(een)g(dra)o(wn)e(b)q(et)o(w)o
+(een)h(the)g(upp)q(er)h(fermion)g(lines)74 2781 y(then,)e(instead)h(of)f(the)
+g(middle)i(photon)e(b)q(eing)985 2906 y(18)p eop
+%%Page: 19 24
+bop 74 -83 a Fk(\\drawline\\photon[\\E\\REG]\(\\p)o(midx,\\pm)o(idy\)[7])12
+b FE(it)j(w)o(ould)h(ha)o(v)o(e)e(b)q(een)74 -26 y Fk
+(\\drawline\\photon[\\E\\FLIPPED)o(]\(\\pmidx)o(,\\pmidy)o(\)[7])p
+FE(.)145 30 y(The)20 b(next)g(new)g(item)g(is)h(the)f(\\)p
+Fs(n)p FE(global)p Fs(n)p FE(divide")h(command.)34 b(This)21
+b(will)g(b)q(e)g(further)f(discussed)h(in)74 87 y(c)o(hapter)16
+b(four)g(but)h(its)f(function)h(here)g(is)g(ob)o(vious.)23
+b(W)l(e)16 b(wish)h(to)f(dra)o(w)f(a)h(fermion)h(line)h(cen)o(tered)e(at)g
+(the)74 143 y(end)i(of)g(the)f(middle)j(photon's)d(righ)o(t)g(\(East\))f
+(end.)28 b(The)18 b(easiest)g(w)o(a)o(y)e(to)h(do)h(this)g(is)g(to)f(dra)o(w)
+g(fermions)74 199 y(of)e(half)i(of)e(the)h(desired)h(length)f(in)h(opp)q
+(osite)f(directions.)23 b(T)l(o)16 b(obtain)g(this)g(v)m(alue)h(w)o(e)e(use)h
+(the)g(statemen)o(t)74 256 y Fk(\\global\\divide\\fermionlengt)o(h)21
+b(by)j(2)15 b FE(whic)o(h)h(reduces)g(the)f(v)m(alue)h(of)f(this)g(v)m
+(ariable)i(b)o(y)e(a)f(factor)h(of)74 312 y(t)o(w)o(o.)31 b(The)19
+b(divisor)i(m)o(ust)d(b)q(e)i(in)o(tegral)g(and)f(the)h(quotien)o(t)f(will)i
+(b)q(e)f(rounded)g(to)f(an)g(in)o(teger.)32 b(See)20 b(the)74
+369 y(section)d(on)g(information)g(storage)e(for)h(ho)o(w)g(to)g(record)g
+(the)h(v)m(alue)h(of)e Fs(n)p FE(fermionlength)h(prior)g(to)f(halving)74
+425 y(it.)k(This)c(tec)o(hnique)g(could)g(just)e(as)h(easily)h(b)q(een)f
+(used)h(if,)f(instead)g(of)g(a)f(fermion,)h(w)o(e)g(had)g(had)g(a)f(photon)74
+482 y(or)j(gluon)h(\(with)f(an)g(ev)o(en)g(n)o(um)o(b)q(er)h(of)f(lo)q(ops)g
+(or)g(half-wiggles\).)27 b(In)18 b(these)f(case)g(one)h(of)f(the)g(t)o(w)o(o)
+f(halv)o(es)74 538 y(w)o(ould)k(ha)o(v)o(e)f(b)q(een)i Fo(\015ipp)n(e)n(d)f
+FE(with)g(resp)q(ect)g(to)f(the)g(other.)33 b(Can)20 b(y)o(ou)f(see)h(wh)o(y)
+f(a)h(scalar)f(could)i(not)e(b)q(e)74 595 y(dra)o(wn)c(this)h(w)o(a)o(y?)145
+651 y(The)e(\014nal)h(p)q(oin)o(t)g(is)g(that)f(the)g(third)h(\(righ)o
+(t-most\))e(photon)h(w)o(as)g(dra)o(wn)g(in)h(a)f Fs(n)p FE(\015ipp)q(ed)i
+(con\014guration)74 708 y(in)22 b(order)g(to)e(giv)o(e)i(a)f(left-righ)o(t)h
+(symmetry)f(to)g(the)g(diagram.)38 b(The)22 b(user)g(is)g(encouraged)f(to)g
+(try)g(the)74 764 y(follo)o(wing)f(exercises.)31 b(Firstly)19
+b(dra)o(w)f(the)h(ab)q(o)o(v)o(e)f(but)h(with)g(an)g(ev)o(en)g(n)o(um)o(b)q
+(er)g(of)f(wiggles)i(in)f(all)h(three)74 820 y(photons)e(to)f(see)h(the)f
+(di\013erence.)29 b(Secondly)19 b(try)e(to)g(dra)o(w)g(the)h(picture)g(where)
+g(photons)g(connect)g(b)q(oth)74 877 y(the)e(upp)q(er)g(and)f(lo)o(w)o(er)g
+(fermion)h(pairs,)f(creating)h(a)f(lo)q(op.)21 b(Finally)16
+b(try)f(to)g(rotate)f(the)h(diagram)g(through)74 933 y(45)120
+917 y Fw(\016)139 933 y FE(.)145 990 y(Aside)i(from)e Fs(n)p
+FE(bigphotons)h(discussed)i(ab)q(o)o(v)o(e)e(there)g(is)g(one)h(other)e
+(photonic)i(feature)f(whic)o(h)h(w)o(e)e(will)74 1046 y(men)o(tion)h(in)h
+(passing.)22 b(Photons)15 b(ma)o(y)g(b)q(e)i(dra)o(wn)e(with)h
+Fo(stems)g FE(on)f(them.)22 b(This)16 b(is)h(an)f(adv)m(anced)g(feature)74
+1103 y(whic)o(h)j(will)h(b)q(e)e(discussed)i(in)f(c)o(hapter)f(four)f(and)h
+(an)g(example)h(illustrating)h(the)e(di\013erence)h(b)q(et)o(w)o(een)f(a)74
+1159 y(stemmed)d(and)h(unstemmed)f(line)i(will)g(su\016ce)f(for)e(the)i
+(presen)o(t:)140 1303 y Fg(_)35 b(_)f(_)182 1313 y(^)g(^)g(^)112
+1504 y FE(UNSTEMMED)102 1297 y Fy(@)85 1280 y(@)102 1338 y(\000)85
+1355 y(\000)393 1297 y(\000)410 1280 y(\000)393 1338 y(@)410
+1355 y(@)p 684 1297 12 2 v 691 1303 a Fg(_)g(_)h(_)733 1313
+y(^)f(^)g(^)p 945 1297 V 712 1504 a FE(STEMMED)642 1297 y Fy(@)625
+1280 y(@)642 1338 y(\000)625 1355 y(\000)955 1297 y(\000)973
+1280 y(\000)955 1338 y(@)973 1355 y(@)145 1734 y FE(Exercise:)26
+b(The)18 b(follo)o(wing)g(diagram)g(has)g(eigh)o(t)g(lines.)29
+b(Using)18 b Fp(FEYNMAN)h FE(duplicate)g(it)f(using)74 1790
+y(only)e(eigh)o(t)f(commands.)712 2363 y Fe(\))712 2272 y(\))712
+2181 y(\))712 2090 y(\))706 2318 y(\()706 2226 y(\()706 2135
+y(\()677 2056 y Ff(@)635 2015 y(@)594 1973 y(@)552 1932 y(@)511
+1890 y(@)493 1872 y(@)p 718 2058 320 4 v 677 2417 a(\000)635
+2459 y(\000)594 2500 y(\000)552 2542 y(\000)511 2583 y(\000)493
+2602 y(\000)p 718 2378 V 1036 2376 4 320 v 1062 2378 a Fh(\010)p
+1062 2402 4 2 v 1038 2378 2 4 v 1114 2429 a(\010)p 1114 2454
+4 2 v 1090 2429 2 4 v 1166 2481 a(\010)p 1166 2505 4 2 v 1142
+2481 2 4 v 1218 2533 a(\010)p 1218 2557 4 2 v 1194 2533 2 4
+v 1062 2403 4 2 v 1062 2429 a(\012)p 1089 2429 2 4 v 1114 2455
+4 2 v 1114 2481 a(\012)p 1141 2481 2 4 v 1166 2506 4 2 v 1166
+2533 a(\012)p 1192 2533 2 4 v 1062 2006 a(\013)p 1062 2030
+4 2 v 1089 2006 2 4 v 1114 1954 a(\013)p 1114 1979 4 2 v 1141
+1954 2 4 v 1166 1902 a(\013)p 1166 1927 4 2 v 1192 1902 2 4
+v 1062 2031 4 2 v 1062 2058 a(\011)p 1038 2058 2 4 v 1114 1980
+4 2 v 1114 2006 a(\011)p 1090 2006 2 4 v 1166 1928 4 2 v 1166
+1954 a(\011)p 1142 1954 2 4 v 1218 1876 4 2 v 1218 1902 a(\011)p
+1194 1902 2 4 v 985 2906 a FE(19)p eop
+%%Page: 20 25
+bop 74 -83 a Fq(2.10)70 b(Gluons)74 20 y Fp(2.10.1)55 b(Anatom)n(y)18
+b(of)h(a)g(Gluon)74 106 y FE(A)12 b(gluon)g(consists)g(of)f(connected)h(lo)q
+(ops.)19 b(As)12 b(in)g(the)g(case)f(of)g(the)h(photon)f(line,)j(the)d
+(length)h(of)g(a)f(single)i(lo)q(op)74 163 y(v)m(aries)18 b(b)q(et)o(w)o(een)
+f(st)o(yles)g(and)g(con\014gurations.)24 b(The)17 b(syn)o(tax)f(for)h
+(creating)g(a)f(gluon)h(with)g(the)g Fs(n)p FE(dra)o(wline)74
+219 y(command)e(is:)74 357 y Fk(\\drawline\\gluon[<gluon)21
+b(direction><gluon)h(style>])241 413 y(<\(x,y\),)h(the)h(co-ordinates)e(of)h
+(the)h(beginning)e(of)i(the)g(gluon>[<number)d(of)j(loops>])74
+551 y FE(The)16 b(st)o(yles)f(curren)o(tly)h(a)o(v)m(ailable)g(for)f(gluons)h
+(are:)862 696 y Fk(\\REG)862 752 y(\\FLIPPED)862 809 y(\\CURLY)862
+865 y(\\FLIPPEDCURLY)862 922 y(\\FLAT)862 978 y(\\FLIPPEDFLAT)862
+1035 y(\\CENTRAL)862 1091 y(\\FLIPPEDCENTRAL)862 1148 y(\\SQUASHEDGLUON)145
+1293 y FE(The)e Fs(n)p FE(REG)g(and)h Fs(n)p FE(FLIPPED)f(st)o(yles)h(are)f
+(a)o(v)m(ailable)i(in)f(all)g(orien)o(tations.)20 b(The)14
+b(others)g(are)g(a)o(v)m(ailable)74 1349 y(only)i(in)g(the)f(follo)o(wing)h
+(directions:)456 1487 y Fk(\\CURLY:)262 b(\\N,)23 b(\\S,)g(\\E,)h(\\W)456
+1543 y(\\FLIPPEDCURLY:)94 b(\\N,)23 b(\\S,)g(\\E,)h(\\W)456
+1600 y(\\CENTRAL:)214 b(\\N,)23 b(\\S,)g(\\E,)h(\\W)456 1656
+y(\\FLIPPEDCENTRAL:)46 b(\\N,)23 b(\\S,)g(\\E,)h(\\W)456 1713
+y(\\FLAT:)286 b(\\E,)23 b(\\W)456 1769 y(\\FLIPPEDFLAT:)118
+b(\\E,)23 b(\\W)456 1826 y(\\SQUASHEDGLUON:)70 b(\\E)74 1963
+y FE(The)11 b(di\013erences)g(in)g(st)o(yle)f(are)g(illustrated)h(in)g(the)g
+(next)f(subsection.)19 b(The)10 b Fs(n)p FE(THICKLINES,)h Fs(n)p
+FE(THINLINES,)74 2020 y Fs(n)p FE(thic)o(klines)17 b(and)f
+Fs(n)p FE(thinlines)h(options)e(are)g(a)o(v)m(ailable)i(in)f(all)g(orien)o
+(tations)f(and)h(st)o(yles.)145 2096 y(The)d(parameters)f(returned)h(b)o(y)g
+Fs(n)p FE(dra)o(wline)p Fs(n)p FE(gluon)g(are)g(analogous)f(to)g(those)h
+(returned)g(after)f(dra)o(wing)74 2152 y(photons,)j(fermions)g(and)h
+(scalars:)74 2298 y Fk(\\gluonfrontx,\\gluonfronty:)211 b(The)24
+b(\(x,y\))f(co-ordinates)f(of)i(the)f(front)g(of)h(the)g(line.)74
+2354 y(\\gluonbackx,\\gluonbacky:)259 b(The)24 b(\(x,y\))f(co-ordinates)f(of)
+i(the)f(back)h(of)f(the)h(line.)74 2411 y(\\gluonlengthx,\\gluonlengthy)o(:)
+164 b(The)24 b(\(x,y\))f(extent)g(of)h(the)f(line.)74 2467
+y(\\gluoncount)571 b(The)24 b(number)f(of)g(gluons)h(printed)e(thus)i(far.)74
+2523 y(\\particlefrontx,\\particlefr)o(onty:)68 b(The)24 b(\(x,y\))f(co-ords)
+g(of)h(the)f(front)g(of)h(the)f(line.)74 2580 y
+(\\particlemidx,\\particlemidy)o(:)164 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(middle)g(of)h(the)f(line.)74 2636 y
+(\\particlebackx,\\particlebac)o(ky:)116 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(back)h(of)f(the)h(line.)74 2693 y(\\particlelengthx,\\particlel)o
+(engthy:)c(The)k(\(x,y\))f(extent)g(of)h(the)f(line.)985 2906
+y FE(20)p eop
+%%Page: 21 26
+bop 74 -83 a Fp(2.10.2)55 b(Examples)17 b(and)i(Details)74
+3 y FE(The)d(di\013eren)o(t)f(st)o(yles)g(of)g(gluon)h(are:)p
+263 289 2 9 v 263 315 a Fz(\011)p 231 315 9 2 v 263 333 2 9
+v 263 358 a(\011)p 231 358 9 2 v 263 376 2 9 v 263 402 a(\011)p
+231 402 9 2 v 263 420 2 9 v 263 446 a(\011)p 231 446 9 2 v
+263 463 2 9 v 263 489 a(\011)p 231 489 9 2 v 263 507 2 9 v
+263 533 a(\011)p 231 533 9 2 v 224 298 a(\003)p 224 306 2 1
+v 224 315 a(\002)p 233 315 1 2 v 233 298 V 224 342 a(\003)p
+224 349 2 1 v 224 358 a(\002)p 233 358 1 2 v 233 342 V 224
+385 a(\003)p 224 393 2 1 v 224 402 a(\002)p 233 402 1 2 v 233
+385 V 224 429 a(\003)p 224 436 2 1 v 224 445 a(\002)p 233 445
+1 2 v 233 429 V 224 472 a(\003)p 224 480 2 1 v 224 489 a(\002)p
+233 489 1 2 v 233 472 V 224 516 a(\003)p 224 523 2 1 v 224
+533 a(\002)p 233 533 1 2 v 233 516 V 263 298 a(\010)p 263 330
+2 9 v 231 298 9 2 v 263 342 a(\010)p 263 374 2 9 v 231 342
+9 2 v 263 385 a(\010)p 263 418 2 9 v 231 385 9 2 v 263 429
+a(\010)p 263 461 2 9 v 231 429 9 2 v 263 472 a(\010)p 263 505
+2 9 v 231 472 9 2 v 263 516 a(\010)p 263 548 2 9 v 231 516
+9 2 v 223 198 a Fd(n)p Fm(REG)p 512 290 2 9 v 512 316 a Fz(\012)p
+538 316 9 2 v 512 334 2 9 v 512 359 a(\012)p 538 359 9 2 v
+512 377 2 9 v 512 403 a(\012)p 538 403 9 2 v 512 421 2 9 v
+512 446 a(\012)p 538 446 9 2 v 512 464 2 9 v 512 490 a(\012)p
+538 490 9 2 v 512 508 2 9 v 512 534 a(\012)p 538 534 9 2 v
+551 299 a(\000)p 551 306 2 1 v 551 316 a(\001)p 544 316 1 2
+v 544 299 V 551 342 a(\000)p 551 350 2 1 v 551 359 a(\001)p
+544 359 1 2 v 544 342 V 551 386 a(\000)p 551 394 2 1 v 551
+403 a(\001)p 544 403 1 2 v 544 386 V 551 430 a(\000)p 551 437
+2 1 v 551 446 a(\001)p 544 446 1 2 v 544 430 V 551 473 a(\000)p
+551 481 2 1 v 551 490 a(\001)p 544 490 1 2 v 544 473 V 551
+517 a(\000)p 551 524 2 1 v 551 533 a(\001)p 544 533 1 2 v 544
+517 V 512 299 a(\013)p 512 331 2 9 v 538 299 9 2 v 512 342
+a(\013)p 512 375 2 9 v 538 342 9 2 v 512 386 a(\013)p 512 418
+2 9 v 538 386 9 2 v 512 430 a(\013)p 512 462 2 9 v 538 430
+9 2 v 512 473 a(\013)p 512 506 2 9 v 538 473 9 2 v 512 517
+a(\013)p 512 549 2 9 v 538 517 9 2 v 443 198 a Fd(n)p Fm(FLIPPED)p
+761 282 2 2 v 761 308 a Fz(\011)p 736 308 V 761 317 V 761 343
+a(\011)p 736 343 V 761 352 V 761 378 a(\011)p 736 378 V 761
+388 V 761 413 a(\011)p 736 413 V 761 423 V 761 449 a(\011)p
+736 449 V 761 458 V 761 484 a(\011)p 736 484 V 729 291 a(\003)p
+729 299 2 1 v 729 308 a(\002)p 738 308 1 2 v 738 291 V 729
+326 a(\003)p 729 334 2 1 v 729 343 a(\002)p 738 343 1 2 v 738
+326 V 729 362 a(\003)p 729 369 2 1 v 729 378 a(\002)p 738 378
+1 2 v 738 362 V 729 397 a(\003)p 729 404 2 1 v 729 413 a(\002)p
+738 413 1 2 v 738 397 V 729 432 a(\003)p 729 440 2 1 v 729
+449 a(\002)p 738 449 1 2 v 738 432 V 729 467 a(\003)p 729 475
+2 1 v 729 484 a(\002)p 738 484 1 2 v 738 467 V 761 291 a(\010)p
+761 316 2 2 v 736 291 V 761 326 a(\010)p 761 351 V 736 326
+V 761 362 a(\010)p 761 387 V 736 362 V 761 397 a(\010)p 761
+422 V 736 397 V 761 432 a(\010)p 761 457 V 736 432 V 761 467
+a(\010)p 761 492 V 736 467 V 700 198 a Fd(n)p Fm(CURL)n(Y)p
+1011 282 V 1011 308 a Fz(\012)p 1036 308 V 1011 317 V 1011
+343 a(\012)p 1036 343 V 1011 352 V 1011 378 a(\012)p 1036 378
+V 1011 388 V 1011 413 a(\012)p 1036 413 V 1011 423 V 1011 449
+a(\012)p 1036 449 V 1011 458 V 1011 484 a(\012)p 1036 484 V
+1043 291 a(\000)p 1043 299 2 1 v 1043 308 a(\001)p 1035 308
+1 2 v 1035 291 V 1043 326 a(\000)p 1043 334 2 1 v 1043 343
+a(\001)p 1035 343 1 2 v 1035 326 V 1043 362 a(\000)p 1043 369
+2 1 v 1043 378 a(\001)p 1035 378 1 2 v 1035 362 V 1043 397
+a(\000)p 1043 404 2 1 v 1043 413 a(\001)p 1035 413 1 2 v 1035
+397 V 1043 432 a(\000)p 1043 440 2 1 v 1043 449 a(\001)p 1035
+449 1 2 v 1035 432 V 1043 467 a(\000)p 1043 475 2 1 v 1043
+484 a(\001)p 1035 484 1 2 v 1035 467 V 1011 291 a(\013)p 1011
+316 2 2 v 1036 291 V 1011 326 a(\013)p 1011 351 V 1036 326
+V 1011 362 a(\013)p 1011 387 V 1036 362 V 1011 397 a(\013)p
+1011 422 V 1036 397 V 1011 432 a(\013)p 1011 457 V 1036 432
+V 1011 467 a(\013)p 1011 492 V 1036 467 V 887 198 a Fd(n)p
+Fm(FLIPPEDCURL)n(Y)p 1286 308 V 1286 334 a Fz(\011)p 1261 334
+V 1286 343 V 1286 369 a(\011)p 1261 369 V 1286 379 V 1286 404
+a(\011)p 1261 404 V 1286 414 V 1286 440 a(\011)p 1261 440 V
+1286 449 V 1286 475 a(\011)p 1261 475 V 1286 485 V 1286 510
+a(\011)p 1261 510 V 1286 520 V 1286 546 a(\011)p 1261 546 V
+1251 317 a(\003)p 1251 325 2 1 v 1251 334 a(\002)p 1261 334
+1 2 v 1261 317 V 1251 353 a(\003)p 1251 360 2 1 v 1251 369
+a(\002)p 1261 369 1 2 v 1261 353 V 1251 388 a(\003)p 1251 395
+2 1 v 1251 405 a(\002)p 1261 405 1 2 v 1261 388 V 1251 423
+a(\003)p 1251 431 2 1 v 1251 440 a(\002)p 1261 440 1 2 v 1261
+423 V 1251 458 a(\003)p 1251 466 2 1 v 1251 475 a(\002)p 1261
+475 1 2 v 1261 458 V 1251 494 a(\003)p 1251 501 2 1 v 1251
+510 a(\002)p 1261 510 1 2 v 1261 494 V 1286 282 a(\010)p 1286
+307 2 2 v 1261 282 V 1286 317 a(\010)p 1286 342 V 1261 317
+V 1286 353 a(\010)p 1286 378 V 1261 353 V 1286 388 a(\010)p
+1286 413 V 1261 388 V 1286 423 a(\010)p 1286 448 V 1261 423
+V 1286 458 a(\010)p 1286 484 V 1261 458 V 1286 494 a(\010)p
+1286 519 V 1261 494 V 1186 198 a Fd(n)p Fm(CENTRAL)p 1483 308
+V 1483 334 a Fz(\012)p 1508 334 V 1483 343 V 1483 369 a(\012)p
+1508 369 V 1483 379 V 1483 404 a(\012)p 1508 404 V 1483 414
+V 1483 440 a(\012)p 1508 440 V 1483 449 V 1483 475 a(\012)p
+1508 475 V 1483 485 V 1483 510 a(\012)p 1508 510 V 1483 520
+V 1483 546 a(\012)p 1508 546 V 1517 317 a(\000)p 1517 325 2
+1 v 1517 334 a(\001)p 1509 334 1 2 v 1509 317 V 1517 353 a(\000)p
+1517 360 2 1 v 1517 369 a(\001)p 1509 369 1 2 v 1509 353 V
+1517 388 a(\000)p 1517 395 2 1 v 1517 405 a(\001)p 1509 405
+1 2 v 1509 388 V 1517 423 a(\000)p 1517 431 2 1 v 1517 440
+a(\001)p 1509 440 1 2 v 1509 423 V 1517 458 a(\000)p 1517 466
+2 1 v 1517 475 a(\001)p 1509 475 1 2 v 1509 458 V 1517 494
+a(\000)p 1517 501 2 1 v 1517 510 a(\001)p 1509 510 1 2 v 1509
+494 V 1483 282 a(\013)p 1483 307 2 2 v 1508 282 V 1483 317
+a(\013)p 1483 342 V 1508 317 V 1483 353 a(\013)p 1483 378 V
+1508 353 V 1483 388 a(\013)p 1483 413 V 1508 388 V 1483 423
+a(\013)p 1483 448 V 1508 423 V 1483 458 a(\013)p 1483 484 V
+1508 458 V 1483 494 a(\013)p 1483 519 V 1508 494 V 1364 198
+a Fd(n)p Fm(FLIPPEDCENTRAL)256 635 y Fz(\014)p 256 668 V 223
+635 V -14 w(\014)p 308 668 V 275 635 V -13 w(\014)p 361 668
+V 327 635 V -14 w(\014)p 413 668 V 379 635 V -14 w(\014)p 465
+668 V 432 635 V -14 w(\014)p 517 668 V 484 635 V 240 666 2
+1 v 240 675 a(\002)p 256 666 V -1 w(\001)p 249 675 1 2 v 292
+666 2 1 v 19 w(\002)p 308 666 V -1 w(\001)p 301 675 1 2 v 344
+666 2 1 v 19 w(\002)p 361 666 V(\001)p 353 675 1 2 v 396 666
+2 1 v 18 w(\002)p 413 666 V(\001)p 405 675 1 2 v 449 666 2
+1 v 19 w(\002)p 465 666 V -1 w(\001)p 458 675 1 2 v 501 666
+2 1 v 19 w(\002)p 518 666 V(\001)p 510 675 1 2 v 240 635 a(\017)p
+240 668 2 2 v 274 635 V -14 w(\017)p 292 668 V 326 635 V -14
+w(\017)p 344 668 V 378 635 V -14 w(\017)p 396 668 V 430 635
+V -13 w(\017)p 449 668 V 483 635 V -14 w(\017)p 501 668 V 535
+635 V 327 716 a Fd(n)p Fm(FLA)n(T)p 762 600 V 762 634 a Fz(\015)p
+729 635 V 815 600 V -13 w(\015)p 781 635 V 867 600 V -14 w(\015)p
+833 635 V 919 600 V -14 w(\015)p 885 635 V 971 600 V -14 w(\015)p
+938 635 V 1024 600 V -13 w(\015)p 990 635 V 746 594 a(\003)p
+746 601 2 1 v -1 w(\000)p 762 601 V 755 594 1 2 v 19 w(\003)p
+798 601 2 1 v(\000)p 815 601 V 807 594 1 2 v 18 w(\003)p 850
+601 2 1 v(\000)p 867 601 V 859 594 1 2 v 18 w(\003)p 902 601
+2 1 v(\000)p 919 601 V 912 594 1 2 v 19 w(\003)p 955 601 2
+1 v -1 w(\000)p 971 601 V 964 594 1 2 v 19 w(\003)p 1007 601
+2 1 v(\000)p 1024 601 V 1016 594 1 2 v 746 600 2 2 v 746 634
+a(\016)p 780 635 V 798 600 V -14 w(\016)p 832 635 V 850 600
+V -14 w(\016)p 884 635 V 903 600 V -13 w(\016)p 937 635 V 955
+600 V -14 w(\016)p 989 635 V 1007 600 V -14 w(\016)p 1041 635
+V 767 716 a Fd(n)p Fm(FLIPPEDFLA)n(T)1273 635 y Fz(\004)p 1273
+658 2 9 v 1241 635 17 2 v 17 w(\004)p 1323 658 2 9 v 1290 635
+17 2 v 17 w(\004)p 1373 658 2 9 v 1340 635 17 2 v 16 w(\004)p
+1422 658 2 9 v 1390 635 17 2 v 17 w(\004)p 1472 658 2 9 v 1440
+635 17 2 v 17 w(\004)p 1522 658 2 9 v 1490 635 17 2 v 1256
+656 2 1 v 1256 665 a(\002)p 1273 656 V(\001)p 1266 665 1 2
+v 1306 656 2 1 v 16 w(\002)p 1323 656 V(\001)p 1315 665 1 2
+v 1356 656 2 1 v 16 w(\002)p 1373 656 V(\001)p 1365 665 1 2
+v 1406 656 2 1 v 16 w(\002)p 1422 656 V -1 w(\001)p 1415 665
+1 2 v 1456 656 2 1 v 17 w(\002)p 1472 656 V -1 w(\001)p 1465
+665 1 2 v 1505 656 2 1 v 16 w(\002)p 1522 656 V(\001)p 1514
+665 1 2 v 1256 635 a(\007)p 1256 658 2 9 v 1274 635 17 2 v
+17 w(\007)p 1306 658 2 9 v 1324 635 17 2 v 17 w(\007)p 1356
+658 2 9 v 1373 635 17 2 v 17 w(\007)p 1406 658 2 9 v 1423 635
+17 2 v 17 w(\007)p 1456 658 2 9 v 1473 635 17 2 v 16 w(\007)p
+1505 658 2 9 v 1523 635 17 2 v 1240 716 a Fd(n)p Fm(SQUASHEDGLUON)145
+1004 y FE(The)f(di\013eren)o(t)h(directions)g(ma)o(y)f(b)q(e)g(illustrated)i
+(b)o(y)e(the)g(follo)o(wing)h(\014le:)74 1167 y Fk(\045)24
+b(EXAMPLE)f(OF)g(USING)h(FEYNMAN)e(TO)i(DRAW)f(gluon)h(DIAGRAMS)e(IN)i(TEX.)
+74 1224 y(\\documentstyle)e([11pt]{article})74 1280 y(\\input)h(FEYNMAN)74
+1336 y(\\begin)g({document})74 1393 y(\\centerline{GLUONBURST)e(using)i
+(FEYNMAN})74 1449 y(\\vskip)g(0.75in)74 1506 y(\\hskip)g(1.5in)74
+1562 y(\\begin{picture}\(20000,20000)o(\)\(-10000)o(,-10000)o(\))74
+1619 y(\\put\(0,0\){\\circle*{1500}})74 1675 y
+(\\drawline\\gluon[\\N\\CENTRAL])o(\(0,0\)[10)o(])74 1732 y
+(\\drawline\\gluon[\\NE\\REG]\(0,)o(0\)[8])74 1788 y
+(\\drawline\\gluon[\\E\\CENTRAL])o(\(0,0\)[10)o(])74 1845 y
+(\\drawline\\gluon[\\SE\\REG]\(0,)o(0\)[8])74 1901 y
+(\\drawline\\gluon[\\S\\CENTRAL])o(\(0,0\)[10)o(])74 1957 y
+(\\drawline\\gluon[\\SW\\REG]\(0,)o(0\)[8])74 2014 y
+(\\drawline\\gluon[\\W\\CENTRAL])o(\(0,0\)[10)o(])74 2070 y
+(\\drawline\\gluon[\\NW\\REG]\(0,)o(0\)[8])74 2127 y(\\end{picture})74
+2290 y FE(Whic)o(h)16 b(pro)q(duces:)985 2906 y(21)p eop
+%%Page: 22 27
+bop 659 -83 a FE(GLUONBURST)17 b(using)f(FEYNMAN)1010 570 y
+Fz(~)982 519 y(\013)p 982 544 2 2 v 1008 519 V 982 484 a(\013)p
+982 509 V 1008 484 V 982 449 a(\013)p 982 474 V 1008 449 V
+982 414 a(\013)p 982 439 V 1008 414 V 982 378 a(\013)p 982
+403 V 1008 378 V 982 343 a(\013)p 982 368 V 1008 343 V 982
+308 a(\013)p 982 333 V 1008 308 V 982 273 a(\013)p 982 298
+V 1008 273 V 982 237 a(\013)p 982 262 V 1008 237 V 982 202
+a(\013)p 982 227 V 1008 202 V 982 167 a(\013)p 982 192 V 1008
+167 V 1016 519 a(\000)p 1016 527 2 1 v 1016 536 a(\001)p 1009
+536 1 2 v 1009 519 V 1016 484 a(\000)p 1016 492 2 1 v 1016
+501 a(\001)p 1009 501 1 2 v 1009 484 V 1016 449 a(\000)p 1016
+456 2 1 v 1016 465 a(\001)p 1009 465 1 2 v 1009 449 V 1016
+414 a(\000)p 1016 421 2 1 v 1016 430 a(\001)p 1009 430 1 2
+v 1009 414 V 1016 378 a(\000)p 1016 386 2 1 v 1016 395 a(\001)p
+1009 395 1 2 v 1009 378 V 1016 343 a(\000)p 1016 351 2 1 v
+1016 360 a(\001)p 1009 360 1 2 v 1009 343 V 1016 308 a(\000)p
+1016 315 2 1 v 1016 324 a(\001)p 1009 324 1 2 v 1009 308 V
+1016 273 a(\000)p 1016 280 2 1 v 1016 289 a(\001)p 1009 289
+1 2 v 1009 273 V 1016 237 a(\000)p 1016 245 2 1 v 1016 254
+a(\001)p 1009 254 1 2 v 1009 237 V 1016 202 a(\000)p 1016 209
+2 1 v 1016 219 a(\001)p 1009 219 1 2 v 1009 202 V 982 546 2
+2 v 982 571 a(\012)p 1008 571 V 982 510 V 982 536 a(\012)p
+1008 536 V 982 475 V 982 501 a(\012)p 1008 501 V 982 440 V
+982 465 a(\012)p 1008 465 V 982 404 V 982 430 a(\012)p 1008
+430 V 982 369 V 982 395 a(\012)p 1008 395 V 982 334 V 982 360
+a(\012)p 1008 360 V 982 299 V 982 324 a(\012)p 1008 324 V 982
+263 V 982 289 a(\012)p 1008 289 V 982 228 V 982 254 a(\012)p
+1008 254 V 982 193 V 982 219 a(\012)p 1008 219 V 1008 525 a(\023)p
+1008 570 2 5 v 1050 525 5 2 v 1045 488 a(\023)p 1045 533 2
+5 v 1088 488 5 2 v 1083 451 a(\023)p 1083 495 2 5 v 1125 451
+5 2 v 1120 413 a(\023)p 1120 458 2 5 v 1162 413 5 2 v 1157
+376 a(\023)p 1157 421 2 5 v 1200 376 5 2 v 1195 339 a(\023)p
+1195 383 2 5 v 1237 339 5 2 v 1232 301 a(\023)p 1232 346 2
+5 v 1274 301 5 2 v 1269 264 a(\023)p 1269 309 2 5 v 1312 264
+5 2 v 1307 227 a(\023)p 1307 271 2 5 v 1349 227 5 2 v 1062
+525 a(\000)p 1062 532 2 1 v 1055 525 1 2 v 1099 488 a(\000)p
+1099 495 2 1 v 1092 488 1 2 v 1137 451 a(\000)p 1137 458 2
+1 v 1129 451 1 2 v 1174 413 a(\000)p 1174 420 2 1 v 1167 413
+1 2 v 1211 376 a(\000)p 1211 383 2 1 v 1204 376 1 2 v 1249
+339 a(\000)p 1249 346 2 1 v 1241 339 1 2 v 1286 301 a(\000)p
+1286 308 2 1 v 1279 301 1 2 v 1323 264 a(\000)p 1323 271 2
+1 v 1316 264 1 2 v 1045 533 2 1 v 1045 542 a(\002)p 1062 533
+V(\001)p 1055 542 1 2 v 1083 495 2 1 v 1083 505 a(\002)p 1099
+495 V -1 w(\001)p 1092 505 1 2 v 1120 458 2 1 v 1120 467 a(\002)p
+1137 458 V(\001)p 1129 467 1 2 v 1157 421 2 1 v 1157 430 a(\002)p
+1174 421 V(\001)p 1167 430 1 2 v 1195 383 2 1 v 1195 393 a(\002)p
+1211 383 V -1 w(\001)p 1204 393 1 2 v 1232 346 2 1 v 1232 355
+a(\002)p 1249 346 V(\001)p 1241 355 1 2 v 1269 309 2 1 v 1269
+318 a(\002)p 1286 309 V(\001)p 1279 318 1 2 v 1307 271 2 1
+v 1307 280 a(\002)p 1323 271 V -1 w(\001)p 1316 280 1 2 v 1061
+545 a(\010)p 1061 570 2 2 v 1035 545 V -15 w(\010)p 1096 570
+V 1071 545 V -15 w(\010)p 1131 570 V 1106 545 V -15 w(\010)p
+1166 570 V 1141 545 V -14 w(\010)p 1202 570 V 1177 545 V -15
+w(\010)p 1237 570 V 1212 545 V -15 w(\010)p 1272 570 V 1247
+545 V -15 w(\010)p 1307 570 V 1282 545 V -14 w(\010)p 1343
+570 V 1318 545 V -15 w(\010)p 1378 570 V 1353 545 V -15 w(\010)p
+1413 570 V 1388 545 V 1044 568 2 1 v 1044 577 a(\002)p 1061
+568 V(\001)p 1053 577 1 2 v 1079 568 2 1 v 1 w(\002)p 1096
+568 V(\001)p 1088 577 1 2 v 1114 568 2 1 v 1 w(\002)p 1131
+568 V(\001)p 1124 577 1 2 v 1150 568 2 1 v 2 w(\002)p 1166
+568 V -1 w(\001)p 1159 577 1 2 v 1185 568 2 1 v 2 w(\002)p
+1202 568 V(\001)p 1194 577 1 2 v 1220 568 2 1 v 1 w(\002)p
+1237 568 V(\001)p 1229 577 1 2 v 1256 568 2 1 v 2 w(\002)p
+1272 568 V -1 w(\001)p 1265 577 1 2 v 1291 568 2 1 v 2 w(\002)p
+1307 568 V -1 w(\001)p 1300 577 1 2 v 1326 568 2 1 v 2 w(\002)p
+1343 568 V(\001)p 1335 577 1 2 v 1361 568 2 1 v 1 w(\002)p
+1378 568 V(\001)p 1370 577 1 2 v 1009 545 a(\013)p 1009 570
+2 2 v 1034 545 V -15 w(\013)p 1044 570 V 1070 545 V -15 w(\013)p
+1079 570 V 1105 545 V -15 w(\013)p 1114 570 V 1140 545 V -14
+w(\013)p 1150 570 V 1175 545 V -15 w(\013)p 1185 570 V 1211
+545 V -15 w(\013)p 1220 570 V 1246 545 V -14 w(\013)p 1256
+570 V 1281 545 V -15 w(\013)p 1291 570 V 1317 545 V -15 w(\013)p
+1326 570 V 1352 545 V -15 w(\013)p 1361 570 V 1387 545 V 1054
+571 a(\020)p 1054 616 2 5 v 1009 571 5 2 v 1091 608 a(\020)p
+1091 653 2 5 v 1046 608 5 2 v 1128 646 a(\020)p 1128 690 2
+5 v 1084 646 5 2 v 1166 683 a(\020)p 1166 728 2 5 v 1121 683
+5 2 v 1203 720 a(\020)p 1203 765 2 5 v 1158 720 5 2 v 1240
+758 a(\020)p 1240 802 2 5 v 1196 758 5 2 v 1278 795 a(\020)p
+1278 840 2 5 v 1233 795 5 2 v 1315 832 a(\020)p 1315 877 2
+5 v 1270 832 5 2 v 1352 870 a(\020)p 1352 914 2 5 v 1308 870
+5 2 v 1054 616 2 1 v 1054 625 a(\001)p 1046 625 1 2 v 1091
+653 2 1 v 1091 662 a(\001)p 1084 662 1 2 v 1128 690 2 1 v 1128
+700 a(\001)p 1121 700 1 2 v 1166 728 2 1 v 1166 737 a(\001)p
+1158 737 1 2 v 1203 765 2 1 v 1203 774 a(\001)p 1196 774 1
+2 v 1240 802 2 1 v 1240 812 a(\001)p 1233 812 1 2 v 1278 840
+2 1 v 1278 849 a(\001)p 1270 849 1 2 v 1315 877 2 1 v 1315
+886 a(\001)p 1308 886 1 2 v 1037 608 a(\003)p 1037 616 2 1
+v 1037 625 a(\002)p 1046 625 1 2 v 1046 608 V 1074 646 a(\003)p
+1074 653 2 1 v 1074 662 a(\002)p 1084 662 1 2 v 1084 646 V
+1112 683 a(\003)p 1112 690 2 1 v 1112 700 a(\002)p 1121 700
+1 2 v 1121 683 V 1149 720 a(\003)p 1149 728 2 1 v 1149 737
+a(\002)p 1158 737 1 2 v 1158 720 V 1186 758 a(\003)p 1186 765
+2 1 v 1186 774 a(\002)p 1196 774 1 2 v 1196 758 V 1224 795
+a(\003)p 1224 802 2 1 v 1224 812 a(\002)p 1233 812 1 2 v 1233
+795 V 1261 832 a(\003)p 1261 840 2 1 v 1261 849 a(\002)p 1270
+849 1 2 v 1270 832 V 1298 870 a(\003)p 1298 877 2 1 v 1298
+886 a(\002)p 1308 886 1 2 v 1308 870 V 1035 597 2 2 v 1035
+623 a(\011)p 1010 623 V 1035 633 V 1035 658 a(\011)p 1010 658
+V 1035 668 V 1035 694 a(\011)p 1010 694 V 1035 703 V 1035 729
+a(\011)p 1010 729 V 1035 738 V 1035 764 a(\011)p 1010 764 V
+1035 774 V 1035 799 a(\011)p 1010 799 V 1035 809 V 1035 835
+a(\011)p 1010 835 V 1035 844 V 1035 870 a(\011)p 1010 870 V
+1035 880 V 1035 905 a(\011)p 1010 905 V 1035 915 V 1035 941
+a(\011)p 1010 941 V 1035 950 V 1035 976 a(\011)p 1010 976 V
+1001 607 a(\003)p 1001 614 2 1 v 1001 623 a(\002)p 1010 623
+1 2 v 1010 607 V 1001 642 a(\003)p 1001 649 2 1 v 1001 658
+a(\002)p 1010 658 1 2 v 1010 642 V 1001 677 a(\003)p 1001 685
+2 1 v 1001 694 a(\002)p 1010 694 1 2 v 1010 677 V 1001 712
+a(\003)p 1001 720 2 1 v 1001 729 a(\002)p 1010 729 1 2 v 1010
+712 V 1001 748 a(\003)p 1001 755 2 1 v 1001 764 a(\002)p 1010
+764 1 2 v 1010 748 V 1001 783 a(\003)p 1001 790 2 1 v 1001
+800 a(\002)p 1010 800 1 2 v 1010 783 V 1001 818 a(\003)p 1001
+826 2 1 v 1001 835 a(\002)p 1010 835 1 2 v 1010 818 V 1001
+853 a(\003)p 1001 861 2 1 v 1001 870 a(\002)p 1010 870 1 2
+v 1010 853 V 1001 889 a(\003)p 1001 896 2 1 v 1001 905 a(\002)p
+1010 905 1 2 v 1010 889 V 1001 924 a(\003)p 1001 931 2 1 v
+1001 941 a(\002)p 1010 941 1 2 v 1010 924 V 1035 571 a(\010)p
+1035 596 2 2 v 1010 571 V 1035 607 a(\010)p 1035 632 V 1010
+607 V 1035 642 a(\010)p 1035 667 V 1010 642 V 1035 677 a(\010)p
+1035 702 V 1010 677 V 1035 712 a(\010)p 1035 737 V 1010 712
+V 1035 748 a(\010)p 1035 773 V 1010 748 V 1035 783 a(\010)p
+1035 808 V 1010 783 V 1035 818 a(\010)p 1035 843 V 1010 818
+V 1035 853 a(\010)p 1035 879 V 1010 853 V 1035 889 a(\010)p
+1035 914 V 1010 889 V 1035 924 a(\010)p 1035 949 V 1010 924
+V 1008 574 2 5 v 1008 617 a(\021)p 963 617 5 2 v 971 612 2
+5 v 971 654 a(\021)p 926 654 5 2 v 933 649 2 5 v 933 691 a(\021)p
+889 691 5 2 v 896 686 2 5 v 896 729 a(\021)p 851 729 5 2 v
+859 724 2 5 v 859 766 a(\021)p 814 766 5 2 v 821 761 2 5 v
+821 803 a(\021)p 777 803 5 2 v 784 798 2 5 v 784 841 a(\021)p
+739 841 5 2 v 747 836 2 5 v 747 878 a(\021)p 702 878 5 2 v
+709 873 2 5 v 709 915 a(\021)p 665 915 5 2 v 954 607 2 1 v
+954 617 a(\002)p 963 617 1 2 v 917 645 2 1 v 917 654 a(\002)p
+926 654 1 2 v 879 682 2 1 v 879 691 a(\002)p 889 691 1 2 v
+842 719 2 1 v 842 729 a(\002)p 851 729 1 2 v 805 757 2 1 v
+805 766 a(\002)p 814 766 1 2 v 767 794 2 1 v 767 803 a(\002)p
+777 803 1 2 v 730 831 2 1 v 730 841 a(\002)p 739 841 1 2 v
+693 869 2 1 v 693 878 a(\002)p 702 878 1 2 v 954 600 a(\003)p
+954 607 2 1 v(\000)p 971 607 V 963 600 1 2 v 917 637 a(\003)p
+917 644 2 1 v -1 w(\000)p 933 644 V 926 637 1 2 v 879 675 a(\003)p
+879 682 2 1 v(\000)p 896 682 V 889 675 1 2 v 842 712 a(\003)p
+842 719 2 1 v(\000)p 859 719 V 851 712 1 2 v 805 749 a(\003)p
+805 756 2 1 v -1 w(\000)p 821 756 V 814 749 1 2 v 767 787 a(\003)p
+767 794 2 1 v(\000)p 784 794 V 777 787 1 2 v 730 824 a(\003)p
+730 831 2 1 v(\000)p 747 831 V 739 824 1 2 v 693 861 a(\003)p
+693 868 2 1 v -1 w(\000)p 709 868 V 702 861 1 2 v 956 571 2
+2 v 956 597 a(\012)p 982 597 V 921 571 V -85 w(\012)p 947 597
+V 886 571 V -85 w(\012)p 911 597 V 850 571 V -86 w(\012)p 876
+597 V 815 571 V -85 w(\012)p 841 597 V 780 571 V -85 w(\012)p
+806 597 V 745 571 V -85 w(\012)p 770 597 V 709 571 V -86 w(\012)p
+735 597 V 674 571 V -85 w(\012)p 700 597 V 639 571 V -85 w(\012)p
+665 597 V 604 571 V -85 w(\012)p 629 597 V 956 565 a(\003)p
+956 572 2 1 v(\000)p 973 572 V 965 565 1 2 v -69 w(\003)p 921
+572 2 1 v(\000)p 938 572 V 930 565 1 2 v -69 w(\003)p 886 572
+2 1 v -1 w(\000)p 902 572 V 895 565 1 2 v -69 w(\003)p 850
+572 2 1 v(\000)p 867 572 V 860 565 1 2 v -69 w(\003)p 815 572
+2 1 v(\000)p 832 572 V 824 565 1 2 v -69 w(\003)p 780 572 2
+1 v -1 w(\000)p 796 572 V 789 565 1 2 v -68 w(\003)p 745 572
+2 1 v -1 w(\000)p 761 572 V 754 565 1 2 v -69 w(\003)p 709
+572 2 1 v(\000)p 726 572 V 718 565 1 2 v -69 w(\003)p 674 572
+2 1 v(\000)p 691 572 V 683 565 1 2 v -69 w(\003)p 639 572 2
+1 v -1 w(\000)p 655 572 V 648 565 1 2 v 1008 571 2 2 v 1008
+597 a(\011)p 983 597 V 973 571 V -85 w(\011)p 948 597 V 938
+571 V -85 w(\011)p 912 597 V 902 571 V -86 w(\011)p 877 597
+V 867 571 V -85 w(\011)p 842 597 V 832 571 V -85 w(\011)p 807
+597 V 796 571 V -86 w(\011)p 771 597 V 761 571 V -85 w(\011)p
+736 597 V 726 571 V -85 w(\011)p 701 597 V 691 571 V -85 w(\011)p
+666 597 V 655 571 V -86 w(\011)p 630 597 V 962 529 2 5 v 962
+571 a(\022)p 1005 571 5 2 v 925 491 2 5 v 925 534 a(\022)p
+967 534 5 2 v 888 454 2 5 v 888 496 a(\022)p 930 496 5 2 v
+850 417 2 5 v 850 459 a(\022)p 893 459 5 2 v 813 379 2 5 v
+813 422 a(\022)p 855 422 5 2 v 776 342 2 5 v 776 384 a(\022)p
+818 384 5 2 v 738 305 2 5 v 738 347 a(\022)p 781 347 5 2 v
+701 267 2 5 v 701 310 a(\022)p 743 310 5 2 v 664 230 2 5 v
+664 272 a(\022)p 706 272 5 2 v 962 517 a(\003)p 962 524 2 1
+v 972 517 1 2 v 925 480 a(\003)p 925 487 2 1 v 934 480 1 2
+v 888 442 a(\003)p 888 449 2 1 v 897 442 1 2 v 850 405 a(\003)p
+850 412 2 1 v 860 405 1 2 v 813 368 a(\003)p 813 375 2 1 v
+822 368 1 2 v 776 330 a(\003)p 776 337 2 1 v 785 330 1 2 v
+738 293 a(\003)p 738 300 2 1 v 747 293 1 2 v 701 256 a(\003)p
+701 263 2 1 v 710 256 1 2 v 979 517 a(\000)p 979 524 2 1 v
+979 534 a(\001)p 972 534 1 2 v 972 517 V 942 480 a(\000)p 942
+487 2 1 v 942 496 a(\001)p 934 496 1 2 v 934 480 V 904 442
+a(\000)p 904 450 2 1 v 904 459 a(\001)p 897 459 1 2 v 897 442
+V 867 405 a(\000)p 867 412 2 1 v 867 422 a(\001)p 860 422 1
+2 v 860 405 V 830 368 a(\000)p 830 375 2 1 v 830 384 a(\001)p
+822 384 1 2 v 822 368 V 792 330 a(\000)p 792 338 2 1 v 792
+347 a(\001)p 785 347 1 2 v 785 330 V 755 293 a(\000)p 755 300
+2 1 v 755 310 a(\001)p 748 310 1 2 v 748 293 V 718 256 a(\000)p
+718 263 2 1 v 718 272 a(\001)p 710 272 1 2 v 710 256 V 145
+1191 a FE(W)l(e)f(will)i(see)e(in)h(the)g(next)f(c)o(hapter)g(a)g(w)o(a)o(y)f
+(of)h(making)g(this)h(lo)q(ok)f(b)q(etter.)145 1248 y(The)e(same)g(p)q(oin)o
+(ts)g(whic)o(h)h(w)o(ere)f(noted)g(follo)o(wing)h(the)f(picture)h
+Fo(photonburst)g FE(in)g(the)f(previous)h(section)74 1304 y(ma)o(y)h(b)q(e)i
+(noted)f(here.)22 b(Again)16 b(the)g(curv)m(ature)h(of)e(the)h(gluons)g
+(commences)h(in)f(the)g(clo)q(c)o(kwise)h(sense)g(here)74 1361
+y(and)g(in)g(the)f(coun)o(ter-clo)q(c)o(kwise)i(orien)o(tation)e(for)g
+Fo(\015ipp)n(e)n(d)f FE(st)o(yles.)24 b(The)16 b(follo)o(wing)h(examples)g
+(ma)o(y)f(pro)o(v)o(e)74 1417 y(helpful.)74 1580 y Fk
+(\\begin{picture}\(15000,15000)o(\)\(-2000,)o(-12000\))74 1636
+y(\\drawline\\gluon[\\E\\FLIPPEDC)o(URLY]\(0,)o(0\)[6])74 1693
+y(\\drawline\\fermion[\\NE\\REG]\()o(\\pbackx,)o(\\pbacky)o(\)[\\gluo)o
+(nlengthx)o(])74 1749 y(\\drawline\\fermion[\\SE\\REG]\()o(\\pfrontx)o
+(,\\pfron)o(ty\)[\\gl)o(uonlengt)o(hx])74 1806 y
+(\\drawline\\fermion[\\NE\\REG]\()o(\\pbackx,)o(\\pbacky)o(\)[\\gluo)o
+(nlengthx)o(])74 1862 y(\\drawline\\gluon[\\W\\FLIPPEDC)o(URLY]\(\\p)o
+(frontx,)o(\\pfront)o(y\)[6])74 1919 y(\\drawline\\fermion[\\SW\\REG]\()o
+(\\pbackx,)o(\\pbacky)o(\)[\\ferm)o(ionlengt)o(h])74 1975 y
+(\\drawline\\fermion[\\NW\\REG]\()o(\\gluonba)o(ckx,\\gl)o(uonback)o
+(y\)[\\ferm)o(ionleng)o(th])74 2032 y(\\drawline\\fermion[\\SW\\REG]\()o
+(\\pbackx,)o(\\pbacky)o(\)[\\ferm)o(ionlengt)o(h])74 2088 y(\\end{picture})74
+2144 y(\\hskip)23 b(3.5in)74 2201 y(\045)h(Second)f(Picture:)74
+2257 y(\\begin{picture}\(6000,15000\))74 2314 y(\\THICKLINES)74
+2370 y(\\drawline\\gluon[\\S\\REG]\(300)o(0,14000\))o([8])74
+2427 y(\\drawline\\fermion[\\NE\\REG]\()o(\\pfrontx)o(,\\pfron)o(ty\)[200)o
+(0])74 2483 y(\\drawline\\fermion[\\NW\\REG]\()o(\\pfrontx)o(,\\pfron)o
+(ty\)[200)o(0])74 2540 y(\\drawline\\fermion[\\SE\\REG]\()o(\\gluonba)o
+(ckx,\\gl)o(uonback)o(y\)[2000])74 2596 y(\\drawline\\fermion[\\SW\\REG]\()o
+(\\gluonba)o(ckx,\\gl)o(uonback)o(y\)[2000])74 2653 y(\\end{picture})985
+2906 y FE(22)p eop
+%%Page: 23 28
+bop 145 -83 a FE(whic)o(h)16 b(renders:)p 252 171 2 2 v 252
+197 a Fz(\011)p 227 197 V 287 171 V -15 w(\011)p 262 197 V
+323 171 V -14 w(\011)p 298 197 V 358 171 V -15 w(\011)p 333
+197 V 393 171 V -15 w(\011)p 368 197 V 428 171 V -15 w(\011)p
+403 197 V 235 164 a(\003)p 235 171 2 1 v(\000)p 252 171 V 245
+164 1 2 v 2 w(\003)p 271 171 2 1 v -1 w(\000)p 287 171 V 280
+164 1 2 v 2 w(\003)p 306 171 2 1 v(\000)p 323 171 V 315 164
+1 2 v 1 w(\003)p 341 171 2 1 v(\000)p 358 171 V 350 164 1 2
+v 2 w(\003)p 377 171 2 1 v -1 w(\000)p 393 171 V 386 164 1
+2 v 2 w(\003)p 412 171 2 1 v -1 w(\000)p 428 171 V 421 164
+1 2 v 235 171 2 2 v 235 197 a(\012)p 261 197 V 271 171 V -14
+w(\012)p 296 197 V 306 171 V -15 w(\012)p 332 197 V 341 171
+V -15 w(\012)p 367 197 V 377 171 V -14 w(\012)p 402 197 V 412
+171 V -15 w(\012)p 438 197 V 439 196 a Fy(\000)480 154 y(\000)522
+113 y(\000)547 88 y(\000)439 237 y(@)480 279 y(@)522 320 y(@)547
+345 y(@)o(\000)630 304 y(\000)671 262 y(\000)696 237 y(\000)561
+346 y Fz(\013)p 561 371 V 587 346 V -85 w(\013)p 526 371 V
+552 346 V -85 w(\013)p 491 371 V 517 346 V -85 w(\013)p 456
+371 V 481 346 V -86 w(\013)p 420 371 V 446 346 V -85 w(\013)p
+385 371 V 411 346 V 561 369 2 1 v 561 378 a(\002)p 578 369
+V(\001)p 571 378 1 2 v 526 369 2 1 v -69 w(\002)p 543 369 V(\001)p
+535 378 1 2 v 491 369 2 1 v -69 w(\002)p 508 369 V(\001)p 500
+378 1 2 v 456 369 2 1 v -69 w(\002)p 472 369 V -1 w(\001)p
+465 378 1 2 v 420 369 2 1 v -69 w(\002)p 437 369 V(\001)p 429
+378 1 2 v 385 369 2 1 v -69 w(\002)p 402 369 V(\001)p 394 378
+1 2 v 578 346 a(\010)p 578 371 2 2 v 553 346 V -85 w(\010)p
+543 371 V 518 346 V -86 w(\010)p 507 371 V 482 346 V -85 w(\010)p
+472 371 V 447 346 V -85 w(\010)p 437 371 V 412 346 V -85 w(\010)p
+402 371 V 377 346 V 335 387 a Fy(\000)294 428 y(\000)252 470
+y(\000)227 495 y(\000)335 345 y(@)294 304 y(@)252 262 y(@)227
+237 y(@)-84 b(\000)144 279 y(\000)102 320 y(\000)77 345 y(\000)p
+267 804 4 9 v 267 831 a Fh(\011)p 235 831 9 4 v 267 848 4 9
+v 267 874 a(\011)p 235 874 9 4 v 267 891 4 9 v 267 918 a(\011)p
+235 918 9 4 v 267 935 4 9 v 267 961 a(\011)p 235 961 9 4 v
+267 978 4 9 v 267 1005 a(\011)p 235 1005 9 4 v 267 1022 4 9
+v 267 1048 a(\011)p 235 1048 9 4 v 267 1065 4 9 v 267 1092
+a(\011)p 235 1092 9 4 v 267 1109 4 9 v 267 1136 a(\011)p 235
+1136 9 4 v 228 814 a(\003)p 228 821 4 1 v 228 830 a(\002)p
+238 830 1 4 v 238 814 V 228 857 a(\003)p 228 864 4 1 v 228
+874 a(\002)p 238 874 1 4 v 238 857 V 228 901 a(\003)p 228 908
+4 1 v 228 918 a(\002)p 238 918 1 4 v 238 901 V 228 944 a(\003)p
+228 951 4 1 v 228 961 a(\002)p 238 961 1 4 v 238 944 V 228
+988 a(\003)p 228 995 4 1 v 228 1005 a(\002)p 238 1005 1 4 v
+238 988 V 228 1032 a(\003)p 228 1039 4 1 v 228 1048 a(\002)p
+238 1048 1 4 v 238 1032 V 228 1075 a(\003)p 228 1082 4 1 v
+228 1092 a(\002)p 238 1092 1 4 v 238 1075 V 228 1119 a(\003)p
+228 1126 4 1 v 228 1135 a(\002)p 238 1135 1 4 v 238 1119 V
+267 814 a(\010)p 267 845 4 9 v 235 814 9 4 v 267 857 a(\010)p
+267 889 4 9 v 235 857 9 4 v 267 901 a(\010)p 267 932 4 9 v
+235 901 9 4 v 267 944 a(\010)p 267 976 4 9 v 235 944 9 4 v
+267 988 a(\010)p 267 1020 4 9 v 235 988 9 4 v 267 1032 a(\010)p
+267 1063 4 9 v 235 1032 9 4 v 267 1075 a(\010)p 267 1107 4
+9 v 235 1075 9 4 v 267 1119 a(\010)p 267 1150 4 9 v 235 1119
+9 4 v 268 796 a Ff(\000)286 779 y(\000)227 796 y(@)210 779
+y(@)268 1192 y(@)286 1209 y(@)227 1192 y(\000)210 1209 y(\000)145
+1478 y FE(As)16 b(in)h(the)g(photonic)g(case)g(w)o(e)f(use)h
+Fs(n)p FE(gluonlengthx,y)g(to)f(dra)o(w)f(fermion)i(lines)h(whic)o(h)g(are)e
+(the)g(same)74 1534 y(length)e(as)e(gluon)h(lines.)21 b(A)13
+b(w)o(ord)f(of)g(caution.)19 b(V)l(ariables)14 b(suc)o(h)f(as)g(`)p
+Fs(n)p FE(gluonlengthx')g(or)f(`)p Fs(n)p FE(photonlength)o(y')74
+1591 y(measure)17 b(the)f Fo(displac)n(ements)f FE(of)h(the)g(line)i(dra)o
+(wn)e(and)h(so)f(ma)o(y)g(b)q(e)h(either)g(p)q(ositiv)o(e)g(or)f(negativ)o
+(e.)24 b(That)74 1647 y(is,)f Fs(n)p FE(fermionlengthx)f(will)g(b)q(e)g(p)q
+(ositiv)o(e)g(for)e(fermions)i(dra)o(wn)e(in)i(the)f(E,)g(NE)g(or)f(SE)i
+(directions)g(and)74 1704 y(negativ)o(e)f(for)f(those)g(dra)o(wn)g(in)h(the)g
+(W,)f(NW)g(and)h(SW)f(directions.)37 b(F)l(or)20 b(N)h(and)f(S)h(fermions)g
+(it)f(will)74 1760 y(v)m(anish.)31 b(The)19 b(length)g(argumen)o(t)e(of)i
+Fs(n)p FE(dra)o(wline,)g(ho)o(w)o(ev)o(er,)f(m)o(ust)g(b)q(e)h(p)q(ositiv)o
+(e)h(so)e(caution)h(is)g(advised.)74 1817 y(The)14 b(`)p Fs(n)p
+FE(negate')e(command)i(describ)q(ed)h(in)g(the)e(section)h(concerning)h
+(alignmen)o(ts)f(in)h(c)o(hapter)e(four)g(is)h(often)74 1873
+y(helpful.)27 b(The)17 b(v)m(ariables)h Fs(n)p Fo(b)n(oxlengthx)e
+FE(and)h Fs(n)p Fo(b)n(oxlengthy)f FE(ma)o(y)g(also)h(b)q(e)g(used.)26
+b(They)17 b(are)f(generally)i(the)74 1930 y(absolute)h(v)m(alues)g(of)f
+Fs(n)p FE(particlelengthx)h(and)g Fs(n)p FE(particlelength)o(y)g(resp)q
+(ectiv)o(ely)h(\(ho)o(w)o(ev)o(er)d(see)h(subsection)74 1986
+y(2.11.1\).)28 b(These)19 b(t)o(w)o(o)f(v)m(alues)i(m)o(ust)e(nev)o(er)h(b)q
+(e)g(altered)g(b)o(y)g(the)g(user.)30 b(The)19 b(v)m(ariable)h(`)p
+Fs(n)p FE(fermionlength')74 2043 y(is)i(the)f(total)f(length)i(of)f(the)g
+(previously)h(dra)o(wn)f(fermion)g(and)g(so)g(is)h(alw)o(a)o(ys)e(p)q(ositiv)
+o(e.)38 b(The)22 b(second)74 2099 y(diagram)16 b(merely)h(demonstrates)f(the)
+g Fs(n)p FE(THICKLINES)i(option)f(when)g(used)g(with)f(gluons.)24
+b(F)l(or)16 b(further)74 2155 y(clari\014cation)h(of)e(these)g(p)q(oin)o(ts)h
+(it)f(ma)o(y)f(b)q(e)i(useful)h(to)d(review)i(the)f(previous)h(section)g
+(\(PHOTONS\).)985 2906 y(23)p eop
+%%Page: 24 29
+bop 145 -83 a FE(A)21 b(general)g(result)g(concerning)h(gluon)g(st)o(yles)f
+(is)g(that)f(the)h Fs(n)p FE(CURL)l(Y)h(\()p Fs(n)p FE(FLIPPEDCURL)l(Y\))f
+(and)74 -26 y(the)e Fs(n)p FE(CENTRAL)g(\()p Fs(n)p FE(FLIPPEDCENTRAL\))g
+(con\014gurations)g(are)f(frequen)o(tly)h(more)g(app)q(ealing)h(than)74
+30 y(the)j Fs(n)p FE(REG)f(\()p Fs(n)p FE(FLIPPED\))g(con\014guration)h(if)g
+(b)q(oth)g(diagonal)g(and)g(non-diagonal)g(gluons)g(app)q(ear)g(in)74
+87 y(the)f(same)f(diagram.)38 b(The)22 b(reason)f(is)g(that)g(slan)o(ted)h
+(\(eg.)38 b(NW\))21 b(gluons)h(ma)o(y)e(only)i(b)q(e)g(dra)o(wn)f(in)h(a)74
+143 y Fs(n)p FE(CENTRALGLUON)c(sort)e(of)g(st)o(yle)h(\(but)f(still)i(called)
+h Fs(n)p FE(REG\))d(and)h(the)f Fs(n)p FE(CURL)l(Y)i(st)o(yle)f(is)g(also)f
+(v)o(ery)74 199 y(similar)h(to)e(this)h(from)f(a)h(spacing)g(and)g(size)g
+(viewp)q(oin)o(t.)23 b(Another)16 b(imp)q(ortan)o(t)f(p)q(oin)o(t)h(is)g
+(that)f(gluons)h(are)74 256 y(b)o(y)h(far)f(the)h(most)f Fo(exp)n(ensive)g
+FE(sort)g(of)g(lines)j(to)d(dra)o(w)g(from)g(the)h(viewp)q(oin)o(t)h(of)f(T)
+1505 266 y(E)1530 256 y(X's)g(in)o(ternal)h(memory)74 312 y(\(indep)q(enden)o
+(t)g(of)e(the)h(memory)e(of)h(the)h(driving)g(system\).)22
+b(F)l(or)16 b(this)h(reason)e(y)o(ou)h(will)i(quic)o(kly)g(disco)o(v)o(er)74
+369 y(that)g(diagrams)h(in)o(v)o(olving)h(a)e(great)g(man)o(y)g(gluons)h
+(tend)g(to)g(run)g(out)f(of)g(T)1424 379 y(E)1450 369 y(X)h(capacit)o(y)l(.)
+30 b(One)20 b(w)o(a)o(y)e(to)74 425 y(alleviate)f(the)f(problem)g(is)g(to)f
+(use)h(L)704 419 y Ft(a)725 425 y FE(T)750 439 y(E)775 425
+y(X's)f(`)p Fs(n)p FE(include')i(facilit)o(y)g(whic)o(h)f(allo)o(ws)g(y)o(ou)
+f(to)g(divide)j(up)e(a)f(long)74 482 y(program)9 b(in)o(to)i(a)f(series)h(of)
+f(small)h(ones)f(connected)h(b)o(y)g Fo(auxiliary)g FE(\014les)g(whic)o(h)g
+(are)f(automatically)h(pro)q(duced)74 538 y(when)k(L)204 532
+y Ft(a)225 538 y FE(T)250 552 y(E)276 538 y(X)f(is)h(run.)20
+b(Dozens)15 b(of)f(photonic,)h(scalar)f(and)h(fermionic)h(diagrams)e(ma)o(y)g
+(b)q(e)h(constructed)g(for)74 595 y(the)g(same)g(memory)g(usage)g(of)g(a)g
+(single)h(hadronic)g(diagram.)145 651 y(A)22 b(n)o(um)o(b)q(er)h(a)f(further)
+h(features)f(exist)h(whic)o(h)g(will)i(b)q(e)e(men)o(tioned)g(here)g(and)g
+(elab)q(orated)g(on)f(in)74 708 y(subsequen)o(t)16 b(c)o(hapters.)k(Th)o(us)
+15 b(far)f(no)h(m)o(ulti-gluon)i(v)o(ertices)e(ha)o(v)o(e)g(b)q(een)h(dra)o
+(wn.)k(Using)c(the)f(tec)o(hniques)74 764 y(presen)o(ted)d(here)g(it)g(is)h
+(ob)o(vious)e(ho)o(w)h(this)g(ma)o(y)f(b)q(e)h(done)g(-)g(dra)o(w)f(a)g
+(gluon)i(at)e(\()p Fs(n)p FE(gluon)o(bac)o(kx,)p Fs(n)p FE(gluon)o(bac)o
+(ky\),)74 820 y(attac)o(hing)18 b(it)h(at)f(the)g(rear)g(of)g(the)g(last)h
+(gluon.)30 b(The)18 b(results)h(are)f(not)g(alw)o(a)o(ys)g(\032sthetically)h
+(app)q(ealing)74 877 y(so)f(a)g(n)o(um)o(b)q(er)h(a)g(pre-dra)o(wn)f(v)o
+(ertices)h(are)f(a)o(v)m(ailable.)32 b(This)19 b(is)g(the)f(sub)s(ject)h(of)f
+(c)o(hapter)g(3.)30 b(A)18 b(further)74 933 y(feature)d(has)g(to)g(do)g(with)
+g(attac)o(hing)g(gluons)h(end-to-end.)21 b(This)15 b(ma)o(y)g(not)g(seem)g
+(necessary)g(but)h(is)f(often)74 990 y(desirable)i(\(see)e(the)g(exercise)i
+(b)q(elo)o(w\).)j(The)15 b(problem)h(is)g(illustrated)g(b)o(y)g(the)f(follo)o
+(wing)h(\014le:)74 1151 y Fk(\\begin{picture}\(25000,7000\))74
+1208 y(\\drawline\\gluon[\\E\\REG]\(0,3)o(000\)[4])74 1264
+y(\\drawline\\gluon[\\E\\REG]\(\\pb)o(ackx,\\pb)o(acky\)[4)o(])74
+1377 y(\\drawline\\gluon[\\E\\CENTRAL])o(\(15000,3)o(000\)[4])74
+1433 y(\\drawline\\gluon[\\E\\CENTRAL])o(\(\\pbackx)o(,\\pback)o(y\)[4])74
+1490 y(\\end{picture})74 1651 y FE(giving)g(us:)176 1790 y
+Fz(\010)p 176 1822 2 9 v 144 1790 9 2 v -6 w(\010)p 220 1822
+2 9 v 187 1790 9 2 v -7 w(\010)p 263 1822 2 9 v 231 1790 9
+2 v -6 w(\010)p 307 1822 2 9 v 274 1790 9 2 v 159 1820 2 1
+v 159 1829 a(\002)p 176 1820 V(\001)p 168 1829 1 2 v 203 1820
+2 1 v 10 w(\002)p 220 1820 V(\001)p 212 1829 1 2 v 246 1820
+2 1 v 9 w(\002)p 263 1820 V(\001)p 256 1829 1 2 v 290 1820
+2 1 v 10 w(\002)p 307 1820 V(\001)p 299 1829 1 2 v 159 1790
+a(\013)p 159 1822 2 9 v 185 1790 9 2 v -6 w(\013)p 203 1822
+2 9 v 229 1790 9 2 v -7 w(\013)p 246 1822 2 9 v 272 1790 9
+2 v -6 w(\013)p 290 1822 2 9 v 316 1790 9 2 v 16 w(\010)p 356
+1822 2 9 v 323 1790 9 2 v -7 w(\010)p 399 1822 2 9 v 367 1790
+9 2 v -6 w(\010)p 443 1822 2 9 v 410 1790 9 2 v -7 w(\010)p
+486 1822 2 9 v 454 1790 9 2 v 339 1820 2 1 v 339 1829 a(\002)p
+356 1820 V(\001)p 348 1829 1 2 v 383 1820 2 1 v 10 w(\002)p
+399 1820 V -1 w(\001)p 392 1829 1 2 v 426 1820 2 1 v 10 w(\002)p
+443 1820 V(\001)p 435 1829 1 2 v 470 1820 2 1 v 10 w(\002)p
+486 1820 V -1 w(\001)p 479 1829 1 2 v 339 1790 a(\013)p 339
+1822 2 9 v 365 1790 9 2 v -6 w(\013)p 383 1822 2 9 v 408 1790
+9 2 v -7 w(\013)p 426 1822 2 9 v 452 1790 9 2 v -6 w(\013)p
+470 1822 2 9 v 495 1790 9 2 v 818 1764 a(\010)p 818 1789 2
+2 v 793 1764 V -15 w(\010)p 853 1789 V 828 1764 V -14 w(\010)p
+889 1789 V 863 1764 V -15 w(\010)p 924 1789 V 899 1764 V -15
+w(\010)p 959 1789 V 934 1764 V 801 1787 2 1 v 801 1796 a(\002)p
+818 1787 V(\001)p 810 1796 1 2 v 837 1787 2 1 v 2 w(\002)p
+853 1787 V -1 w(\001)p 846 1796 1 2 v 872 1787 2 1 v 2 w(\002)p
+889 1787 V(\001)p 881 1796 1 2 v 907 1787 2 1 v 1 w(\002)p
+924 1787 V(\001)p 916 1796 1 2 v 766 1764 a(\013)p 766 1789
+2 2 v 792 1764 V -15 w(\013)p 801 1789 V 827 1764 V -14 w(\013)p
+837 1789 V 862 1764 V -15 w(\013)p 872 1789 V 898 1764 V -15
+w(\013)p 907 1789 V 933 1764 V 54 w(\010)p 1011 1789 V 986
+1764 V -14 w(\010)p 1047 1789 V 1021 1764 V -15 w(\010)p 1082
+1789 V 1057 1764 V -15 w(\010)p 1117 1789 V 1092 1764 V -15
+w(\010)p 1152 1789 V 1127 1764 V 995 1787 2 1 v 995 1796 a(\002)p
+1011 1787 V -1 w(\001)p 1004 1796 1 2 v 1030 1787 2 1 v 2 w(\002)p
+1047 1787 V(\001)p 1039 1796 1 2 v 1065 1787 2 1 v 1 w(\002)p
+1082 1787 V(\001)p 1074 1796 1 2 v 1100 1787 2 1 v 1 w(\002)p
+1117 1787 V(\001)p 1110 1796 1 2 v 959 1764 a(\013)p 959 1789
+2 2 v 985 1764 V -14 w(\013)p 995 1789 V 1020 1764 V -15 w(\013)p
+1030 1789 V 1056 1764 V -15 w(\013)p 1065 1789 V 1091 1764
+V -14 w(\013)p 1101 1789 V 1126 1764 V 145 2011 a FE(F)l(or)j(gluons)g(in)i
+(the)e(N,S,)g(E)h(and)f(W)g(directions)i Fs(n)p FE(REG,)e Fs(n)p
+FE(CURL)l(Y,)h Fs(n)p FE(FLA)l(T)f(and)h Fs(n)p FE(SQUASHED)74
+2068 y(con\014gurations)15 b(ma)o(y)f(b)q(e)i(attac)o(hed)e(end-to-end)i
+(trivially)l(.)22 b(F)l(or)14 b Fs(n)p FE(CENTRAL)i(gluons)f(and)g(all)h
+(gluons)f(in)74 2124 y(the)h(NW,)g(NE,)f(SE)h(and)g(SW)g(directions)h(the)f
+(connection)h(is)g(imp)q(erfect.)23 b(The)16 b Fk(\\gluonlink)f
+FE(command,)74 2181 y(discussed)i(in)f(c)o(hapter)f(four,)f(alleviates)j
+(this:)74 2342 y Fk(\\begin{picture}\(10000,5000\))74 2398
+y(\\drawline\\gluon[\\E\\CENTRAL])o(\(0,3000\))o([4]\\glu)o(onlink)74
+2455 y(\\drawline\\gluon[\\E\\CENTRAL])o(\(\\pbackx)o(,\\pback)o(y\)[4])74
+2511 y(\\end{picture})125 2632 y Fz(\010)p 125 2657 V 100 2632
+V -15 w(\010)p 160 2657 V 135 2632 V -14 w(\010)p 196 2657
+V 171 2632 V -15 w(\010)p 231 2657 V 206 2632 V -15 w(\010)p
+266 2657 V 241 2632 V 108 2655 2 1 v 108 2664 a(\002)p 125
+2655 V(\001)p 118 2664 1 2 v 144 2655 2 1 v 2 w(\002)p 160
+2655 V -1 w(\001)p 153 2664 1 2 v 179 2655 2 1 v 2 w(\002)p
+196 2655 V(\001)p 188 2664 1 2 v 214 2655 2 1 v 1 w(\002)p
+231 2655 V(\001)p 223 2664 1 2 v 73 2632 a(\013)p 73 2657 2
+2 v 99 2632 V -15 w(\013)p 108 2657 V 134 2632 V -14 w(\013)p
+144 2657 V 169 2632 V -15 w(\013)p 179 2657 V 205 2632 V -15
+w(\013)p 214 2657 V 240 2632 V 250 2657 2 1 v 250 2666 a(\002)p
+267 2657 V(\001)p 259 2666 1 2 v 302 2632 a(\010)p 302 2657
+2 2 v 277 2632 V -15 w(\010)p 337 2657 V 312 2632 V -15 w(\010)p
+372 2657 V 347 2632 V -14 w(\010)p 408 2657 V 383 2632 V -15
+w(\010)p 443 2657 V 418 2632 V 285 2655 2 1 v 285 2664 a(\002)p
+302 2655 V(\001)p 294 2664 1 2 v 320 2655 2 1 v 1 w(\002)p
+337 2655 V(\001)p 330 2664 1 2 v 356 2655 2 1 v 2 w(\002)p
+372 2655 V -1 w(\001)p 365 2664 1 2 v 391 2655 2 1 v 2 w(\002)p
+408 2655 V(\001)p 400 2664 1 2 v 250 2632 a(\013)p 250 2657
+2 2 v 276 2632 V -15 w(\013)p 285 2657 V 311 2632 V -15 w(\013)p
+320 2657 V 346 2632 V -14 w(\013)p 356 2657 V 382 2632 V -15
+w(\013)p 391 2657 V 417 2632 V 985 2906 a FE(24)p eop
+%%Page: 25 30
+bop 145 -83 a FE(The)15 b Fo(stemme)n(d)g FE(option)g(demonstrated)f(for)h
+(photons)f(is)i(also)f(a)o(v)m(ailable)i(for)d(gluons)h(and)h(is)f(of)g
+(signi\014-)74 -26 y(can)o(tly)h(more)e(in)o(terest,)h(esp)q(ecially)j(for)d
+(those)f(of)h(the)h Fs(n)p FE(CENTRAL)f(v)m(ariet)o(y:)571
+149 y Fz(\010)p 571 174 2 2 v 546 149 V -15 w(\010)p 606 174
+V 581 149 V -15 w(\010)p 641 174 V 616 149 V -15 w(\010)p 676
+174 V 651 149 V -14 w(\010)p 712 174 V 687 149 V -15 w(\010)p
+747 174 V 722 149 V -15 w(\010)p 782 174 V 757 149 V 554 172
+2 1 v 554 181 a(\002)p 571 172 V(\001)p 563 181 1 2 v 589 172
+2 1 v 1 w(\002)p 606 172 V(\001)p 598 181 1 2 v 625 172 2 1
+v 2 w(\002)p 641 172 V -1 w(\001)p 634 181 1 2 v 660 172 2
+1 v 2 w(\002)p 676 172 V -1 w(\001)p 669 181 1 2 v 695 172
+2 1 v 2 w(\002)p 712 172 V(\001)p 704 181 1 2 v 730 172 2 1
+v 1 w(\002)p 747 172 V(\001)p 739 181 1 2 v 519 149 a(\013)p
+519 174 2 2 v 545 149 V -15 w(\013)p 554 174 V 580 149 V -15
+w(\013)p 589 174 V 615 149 V -14 w(\013)p 625 174 V 650 149
+V -15 w(\013)p 660 174 V 686 149 V -15 w(\013)p 695 174 V 721
+149 V -15 w(\013)p 730 174 V 756 149 V 487 381 a FE(UNSTEMMED)477
+174 y Fy(@)460 156 y(@)477 215 y(\000)460 232 y(\000)783 174
+y(\000)800 156 y(\000)783 215 y(@)800 232 y(@)p 1059 174 12
+2 v 1121 149 a Fz(\010)p 1121 174 2 2 v 1096 149 V -14 w(\010)p
+1157 174 V 1132 149 V -15 w(\010)p 1192 174 V 1167 149 V -15
+w(\010)p 1227 174 V 1202 149 V -15 w(\010)p 1262 174 V 1237
+149 V -14 w(\010)p 1298 174 V 1273 149 V -15 w(\010)p 1333
+174 V 1308 149 V 1105 172 2 1 v 1105 181 a(\002)p 1121 172
+V -1 w(\001)p 1114 181 1 2 v 1140 172 2 1 v 2 w(\002)p 1157
+172 V(\001)p 1149 181 1 2 v 1175 172 2 1 v 1 w(\002)p 1192
+172 V(\001)p 1184 181 1 2 v 1211 172 2 1 v 2 w(\002)p 1227
+172 V -1 w(\001)p 1220 181 1 2 v 1246 172 2 1 v 2 w(\002)p
+1262 172 V -1 w(\001)p 1255 181 1 2 v 1281 172 2 1 v 2 w(\002)p
+1298 172 V(\001)p 1290 181 1 2 v 1070 149 a(\013)p 1070 174
+2 2 v 1095 149 V -15 w(\013)p 1105 174 V 1131 149 V -15 w(\013)p
+1140 174 V 1166 149 V -15 w(\013)p 1175 174 V 1201 149 V -14
+w(\013)p 1211 174 V 1236 149 V -15 w(\013)p 1246 174 V 1272
+149 V -15 w(\013)p 1281 174 V 1307 149 V 1334 174 12 2 v 1087
+381 a FE(STEMMED)1017 174 y Fy(@)1000 156 y(@)1017 215 y(\000)1000
+232 y(\000)1345 174 y(\000)1362 156 y(\000)1345 215 y(@)1362
+232 y(@)145 622 y FE(The)k(c)o(hief)g(adv)m(an)o(tage)f(of)h
+Fs(n)p FE(CENTRAL)g(gluons)g(is)g(that)f(their)h(endp)q(oin)o(ts)h(are)e
+(appro)o(ximately)h(on)74 679 y(the)c(axis)h(along)f(whic)o(h)g(the)h(line)g
+(is)g(b)q(eing)g(dra)o(wn.)k(This)15 b(ma)o(y)f(b)q(e)i(arti\014cially)h(ac)o
+(hiev)o(ed)f(for)e(other)h(st)o(yles)74 735 y(using)g(the)g
+Fs(n)p FE(gluoncap)g(command.)k(The)c Fo(c)n(app)n(e)n(d)f
+FE(option)h(is)g(unique)h(to)e(gluons.)20 b(It)15 b(is)g(emplo)o(y)o(ed)g(to)
+f(mak)o(e)74 792 y(gluon)20 b(lines)g(of)f(a)f(non-cen)o(tral)i(v)m(ariet)o
+(y)f(\()p Fo(i.e.)38 b FE(those)18 b(whic)o(h)i(do)f(not)g(terminate)g(near)f
+(the)h(axis)h(of)e(the)74 848 y(gluon)e(line\))g(app)q(ear)g(cen)o(tralized.)
+21 b(An)16 b(example)g(is:)464 1108 y Fh(\032\031)464 992 y(\033\030)612
+1050 y(\010)p 612 1081 4 9 v 581 1050 9 4 v -6 w(\010)p 656
+1081 4 9 v 624 1050 9 4 v -7 w(\010)p 699 1081 4 9 v 668 1050
+9 4 v -6 w(\010)p 743 1081 4 9 v 711 1050 9 4 v 596 1079 4
+1 v 596 1089 a(\002)p 612 1079 V -1 w(\001)p 606 1089 1 4 v
+639 1079 4 1 v 10 w(\002)p 656 1079 V(\001)p 649 1089 1 4 v
+683 1079 4 1 v 10 w(\002)p 699 1079 V -1 w(\001)p 693 1089
+1 4 v 726 1079 4 1 v 10 w(\002)p 743 1079 V(\001)p 736 1089
+1 4 v 596 1050 a(\013)p 596 1081 4 9 v 622 1050 9 4 v -7 w(\013)p
+639 1081 4 9 v 666 1050 9 4 v -6 w(\013)p 683 1081 4 9 v 709
+1050 9 4 v -7 w(\013)p 726 1081 4 9 v 753 1050 9 4 v 761 1048
+a Ff(\000)778 1031 y(\000)761 1090 y(@)778 1107 y(@)430 1050
+y Fh(\013)p 430 1081 4 9 v 457 1050 9 4 v -93 w(\013)p 387
+1081 4 9 v 413 1050 9 4 v -94 w(\013)p 343 1081 4 9 v 370 1050
+9 4 v -93 w(\013)p 300 1081 4 9 v 326 1050 9 4 v 430 1079 4
+1 v 430 1089 a(\002)p 447 1079 V(\001)p 440 1089 1 4 v 387
+1079 4 1 v -77 w(\002)p 403 1079 V -1 w(\001)p 397 1089 1 4
+v 343 1079 4 1 v -77 w(\002)p 360 1079 V(\001)p 353 1089 1
+4 v 300 1079 4 1 v -77 w(\002)p 316 1079 V -1 w(\001)p 310
+1089 1 4 v 447 1050 a(\010)p 447 1081 4 9 v 416 1050 9 4 v
+-94 w(\010)p 403 1081 4 9 v 372 1050 9 4 v -93 w(\010)p 360
+1081 4 9 v 328 1050 9 4 v -94 w(\010)p 316 1081 4 9 v 285 1050
+9 4 v 243 1048 a Ff(@)226 1031 y(@)243 1090 y(\000)226 1107
+y(\000)403 1256 y FE(UNCAPPED)1294 1108 y Fh(\032\031)1294
+992 y(\033\030)1201 1030 y(\010)p 1201 1061 4 9 v 1170 1030
+9 4 v -6 w(\010)p 1245 1061 4 9 v 1213 1030 9 4 v 1184 1058
+4 1 v 1184 1068 a(\002)p 1201 1058 V(\001)p 1194 1068 1 4 v
+1228 1058 4 1 v 10 w(\002)p 1245 1058 V(\001)p 1238 1068 1
+4 v 1184 1030 a(\013)p 1184 1061 4 9 v 1211 1030 9 4 v -6 w(\013)p
+1228 1061 4 9 v 1255 1030 9 4 v 1282 1029 a(\004)p 1282 1048
+4 5 v 1263 1029 5 4 v 1284 1050 12 4 v 1136 1030 a(\013)p 1136
+1061 4 9 v 1162 1030 9 4 v -94 w(\013)p 1092 1061 4 9 v 1119
+1030 9 4 v 1136 1058 4 1 v 1136 1068 a(\002)p 1152 1058 V -1
+w(\001)p 1145 1068 1 4 v 1092 1058 4 1 v -77 w(\002)p 1109
+1058 V(\001)p 1102 1068 1 4 v 1152 1030 a(\010)p 1152 1061
+4 9 v 1121 1030 9 4 v -93 w(\010)p 1109 1061 4 9 v 1077 1030
+9 4 v 1055 1029 a(\007)p 1055 1048 4 5 v 1073 1029 5 4 v 1045
+1050 12 4 v 1003 1048 a Ff(@)986 1031 y(@)1003 1090 y(\000)986
+1107 y(\000)1502 1030 y Fh(\013)p 1502 1061 4 9 v 1528 1030
+9 4 v -94 w(\013)p 1458 1061 4 9 v 1485 1030 9 4 v 1502 1058
+4 1 v 1502 1068 a(\002)p 1518 1058 V -1 w(\001)p 1512 1068
+1 4 v 1458 1058 4 1 v -77 w(\002)p 1475 1058 V(\001)p 1468
+1068 1 4 v 1518 1030 a(\010)p 1518 1061 4 9 v 1487 1030 9 4
+v -93 w(\010)p 1475 1061 4 9 v 1443 1030 9 4 v 1421 1029 a(\007)p
+1421 1048 4 5 v 1440 1029 5 4 v 1412 1050 12 4 v 1567 1030
+a(\010)p 1567 1061 4 9 v 1536 1030 9 4 v -6 w(\010)p 1611 1061
+4 9 v 1579 1030 9 4 v 1551 1058 4 1 v 1551 1068 a(\002)p 1567
+1058 V -1 w(\001)p 1561 1068 1 4 v 1594 1058 4 1 v 10 w(\002)p
+1611 1058 V(\001)p 1604 1068 1 4 v 1551 1030 a(\013)p 1551
+1061 4 9 v 1577 1030 9 4 v -7 w(\013)p 1594 1061 4 9 v 1621
+1030 9 4 v 1649 1029 a(\004)p 1649 1048 4 5 v 1630 1029 5 4
+v 1650 1050 12 4 v 1661 1048 a Ff(\000)1678 1031 y(\000)1661
+1090 y(@)1678 1107 y(@)1255 1256 y FE(CAPPED)145 1455 y(There)h(are)f(a)g(n)o
+(um)o(b)q(er)h(of)f(subtleties)i(in)o(v)o(olv)o(ed)g(with)f(the)g(ab)q(o)o(v)
+o(e)f(features)g(whic)o(h)i(is)f(wh)o(y)f(their)h(dis-)74 1512
+y(cussion)i(is)f(b)q(eing)g(p)q(ostp)q(oned.)28 b(Finally)19
+b(a)e(primitiv)o(e)i Fs(n)p FE(dra)o(wlo)q(op)1250 1495 y Fn(1)1287
+1512 y FE(command)e(allo)o(ws)h(a)f(gluon)h(lo)q(op)g(to)74
+1568 y(b)q(e)e(dra)o(wn.)j(These)d(are)f(also)g(discussed)i(in)f(c)o(hapter)f
+(four.)145 1625 y(W)l(e)g(conclude)j(with)e(the)f(follo)o(wing)h(exercises.)
+22 b(First)16 b(dra)o(w)f(the)g(follo)o(wing)h(whic)o(h)h(uses)f
+Fs(n)p FE(REG)f(st)o(yle)74 1681 y(gluons:)923 1778 y Fz(\010)p
+923 1810 2 9 v 890 1778 9 2 v -7 w(\010)p 966 1810 2 9 v 934
+1778 9 2 v -6 w(\010)p 1010 1810 2 9 v 978 1778 9 2 v -7 w(\010)p
+1053 1810 2 9 v 1021 1778 9 2 v 906 1808 2 1 v 906 1817 a(\002)p
+923 1808 V(\001)p 915 1817 1 2 v 950 1808 2 1 v 10 w(\002)p
+966 1808 V -1 w(\001)p 959 1817 1 2 v 993 1808 2 1 v 10 w(\002)p
+1010 1808 V(\001)p 1002 1817 1 2 v 1037 1808 2 1 v 10 w(\002)p
+1053 1808 V -1 w(\001)p 1046 1817 1 2 v 906 1778 a(\013)p 906
+1810 2 9 v 932 1778 9 2 v -6 w(\013)p 950 1810 2 9 v 975 1778
+9 2 v -7 w(\013)p 993 1810 2 9 v 1019 1778 9 2 v -6 w(\013)p
+1037 1810 2 9 v 1063 1778 9 2 v 890 1957 2 180 v 1102 1779
+a Fh(\010)p 1102 1810 4 9 v 1070 1779 9 4 v -7 w(\010)p 1145
+1810 4 9 v 1114 1779 9 4 v -6 w(\010)p 1189 1810 4 9 v 1157
+1779 9 4 v -7 w(\010)p 1232 1810 4 9 v 1201 1779 9 4 v 1085
+1808 4 1 v 1085 1818 a(\002)p 1102 1808 V(\001)p 1095 1818
+1 4 v 1128 1808 4 1 v 9 w(\002)p 1145 1808 V(\001)p 1138 1818
+1 4 v 1172 1808 4 1 v 10 w(\002)p 1189 1808 V(\001)p 1182 1818
+1 4 v 1216 1808 4 1 v 10 w(\002)p 1232 1808 V -1 w(\001)p 1226
+1818 1 4 v 1085 1779 a(\013)p 1085 1810 4 9 v 1112 1779 9 4
+v -6 w(\013)p 1129 1810 4 9 v 1155 1779 9 4 v -7 w(\013)p 1172
+1810 4 9 v 1199 1779 9 4 v -6 w(\013)p 1216 1810 4 9 v 1242
+1779 9 4 v 1248 1957 4 180 v 1249 2136 2 180 v 1216 2111 2
+9 v 1216 2137 a Fz(\012)p 1242 2137 9 2 v 1173 2111 2 9 v -93
+w(\012)p 1199 2137 9 2 v 1129 2111 2 9 v -94 w(\012)p 1155
+2137 9 2 v 1086 2111 2 9 v -93 w(\012)p 1112 2137 9 2 v 1216
+2098 a(\003)p 1216 2105 2 1 v(\000)p 1233 2105 V 1226 2098
+1 2 v -77 w(\003)p 1173 2105 2 1 v(\000)p 1190 2105 V 1182
+2098 1 2 v -78 w(\003)p 1129 2105 2 1 v(\000)p 1146 2105 V
+1138 2098 1 2 v -77 w(\003)p 1086 2105 2 1 v -1 w(\000)p 1102
+2105 V 1095 2098 1 2 v 1233 2111 2 9 v 1233 2137 a(\011)p 1201
+2137 9 2 v 1190 2111 2 9 v -93 w(\011)p 1157 2137 9 2 v 1146
+2111 2 9 v -94 w(\011)p 1114 2137 9 2 v 1102 2111 2 9 v -94
+w(\011)p 1070 2137 9 2 v 1035 2111 4 9 v 1035 2138 a Fh(\012)p
+1062 2138 9 4 v 992 2111 4 9 v -93 w(\012)p 1018 2138 9 4 v
+948 2111 4 9 v -94 w(\012)p 975 2138 9 4 v 904 2111 4 9 v -94
+w(\012)p 931 2138 9 4 v 1035 2099 a(\003)p 1035 2106 4 1 v(\000)p
+1052 2106 V 1045 2099 1 4 v -77 w(\003)p 992 2106 4 1 v -1
+w(\000)p 1008 2106 V 1002 2099 1 4 v -77 w(\003)p 948 2106
+4 1 v(\000)p 965 2106 V 958 2099 1 4 v -78 w(\003)p 904 2106
+4 1 v(\000)p 921 2106 V 914 2099 1 4 v 1052 2111 4 9 v 1052
+2138 a(\011)p 1020 2138 9 4 v 1008 2111 4 9 v -94 w(\011)p
+977 2138 9 4 v 965 2111 4 9 v -93 w(\011)p 933 2138 9 4 v 921
+2111 4 9 v -94 w(\011)p 890 2138 9 4 v 887 2136 4 180 v 145
+2535 a FE(Ho)o(w)g(w)o(ould)i(y)o(ou)f(dra)o(w)f(this)i(using)g
+Fs(n)p FE(CENTRAL)f(gluons)h Fo(without)g FE(in)o(v)o(oking)g(the)f
+Fs(n)p FE(gluonlink)i(com-)74 2592 y(mand?)p 74 2739 748 2
+v 126 2766 a Fm(1)143 2781 y Fl(curren)o(tly)d(only)f(a)o(v)n(ailable)i(for)d
+(gluons)985 2906 y FE(25)p eop
+%%Page: 26 31
+bop 74 -83 a Fq(2.11)70 b(Arro)n(ws)24 b(and)g(Lab)r(els)74
+19 y FE(In)17 b(addition)h(to)e(the)h(actual)g(lines)h(of)e(a)g(F)l(eynman)h
+(diagram)f(one)h(commonly)g(desires)h(to)e(include)j(lab)q(els)74
+75 y(directly)13 b(on)e(the)g(diagram,)g(o)q(ccasionally)i(explanatory)e
+(text)g(or)g(equations,)h(and)f(quite)h(frequen)o(tly)g(arro)o(ws)74
+132 y(indicating)19 b(the)f(\015o)o(w)e(of)h(momen)o(tum)g(or)g(some)g(quan)o
+(tum)g(n)o(um)o(b)q(er.)26 b(These)18 b(are)e(accommo)q(dated)h(quite)74
+188 y(easily)f(in)g Fp(FEYNMAN)p FE(.)74 310 y Fp(2.11.1)55
+b(Arro)n(ws)74 396 y FE(The)23 b(command)f(for)g(dra)o(wing)h(arro)o(ws)e(is)
+i Fs(n)p FE(dra)o(w)o(arro)o(w.)39 b(The)23 b(syn)o(tax)f(is)h(similar)h(to)e
+(the)g Fs(n)p FE(dra)o(wline)74 452 y(command:)74 615 y Fk
+(\\drawarrow[<direction><conf)o(iguratio)o(n>])313 671 y(\(<\(x,y\))h
+(co-ordinates)f(of)i(the)f(arrow>\))74 834 y FE(An)18 b(arro)o(whead)e(is)i
+(pro)q(duced)g(at)f(the)g(sp)q(eci\014ed)j(\(x,y\))c(co-ordinates,)h
+(generally)i(at)d(the)i(end)g(or)e(middle)74 890 y(of)f(a)g(line.)21
+b(The)16 b(direction)g(is)g(one)f(of)g(the)g(usual)h(compass)f(p)q(oin)o(t)h
+(directions:)384 1053 y Fk(\\N)72 b(\\NE)f(\\E)g(\\SE)g(\\S)h(\\SW)f(\\W)g
+(\\NW)74 1216 y FE(If)16 b Fs(n)p FE(LDIR)h(or)f Fs(n)p FE(LINEDIRECTION)h
+(is)g(used)g(instead)f(then)h(the)f(direction)h(of)f(the)g(last)g(dra)o(wn)g
+(line)h(will)74 1272 y(automatically)i(b)q(e)g(used)g(\(pre-supp)q(osing)h
+(that)d(a)h(line)i(has)f(b)q(een)g(dra)o(wn)f(in)h(the)g(curren)o(t)f
+(picture\).)30 b(If)74 1329 y(the)14 b(previous)h(line)g(w)o(as)f(dra)o(wn)f
+(b)o(y)h(the)g Fs(n)p FE(dra)o(wv)o(ertex)e(command)i(\(see)g(next)g(c)o
+(hapter\))g(then)g(the)g Fo(initial)r(ly)74 1385 y(sp)n(e)n(ci\014e)n(d)g
+FE(v)o(ertex)g(direction)j(will)g(b)q(e)f(used.)k(The)c Fo(c)n(on\014gur)n
+(ation)e FE(is)i(one)f(of)g(the)g(follo)o(wing:)504 1548 y
+Fk(\\ATTIP)405 b(\\ATBASE)74 1711 y FE(These)15 b(sp)q(ecify)h(whether)f(the)
+g(co-ordinates)g(whic)o(h)g(y)o(ou'v)o(e)f(input)i(refer)e(to)g(the)h(p)q
+(osition)h(of)e(the)h Fu(base)g FE(of)74 1767 y(the)h(arro)o(w)f(or)g(the)h
+Fu(tip)h FE(of)e(the)h(arro)o(w.)21 b(Arro)o(ws)14 b(ma)o(y)i(b)q(e)g(dra)o
+(wn)g(b)q(oldly)h(if)f Fs(n)p FE(thic)o(klines)i(is)f(in)f(op)q(eration.)74
+1824 y(The)d(length)g(of)e(an)h(arro)o(w)f(is)i(giv)o(en)g(b)o(y)f(the)g(v)m
+(ariable)i Fs(n)p FE(arro)o(wlength.)k(When)12 b(an)g(arro)o(w)f(is)i(attac)o
+(hed)e(to)h(the)74 1880 y(end)i(of)e(a)g(line)j(the)d Fs(n)p
+FE(particlelengthx,y)i(are)f(not)f(altered)h(\(and)g(neither)g(is)g
+Fs(n)p FE(gluonlengthx)h Fo(etc.)g FE(\))19 b(ho)o(w)o(ev)o(er)74
+1936 y(the)e(v)m(ariables)i Fs(n)p Fo(b)n(oxlengthx)d FE(and)i
+Fs(n)p Fo(b)n(oxlengthy)p FE(,)e(men)o(tioned)i(in)g(subsection)g(2.10.2,)e
+(assume)h(a)g(di\013eren)o(t)74 1993 y(meaning)e(no)o(w.)k(The)c
+Fo(tip)f FE(of)g(the)h(arro)o(w)d(will)k(alw)o(a)o(ys)e(ha)o(v)o(e)g
+(co-ordinates)g(\()p Fs(n)g FE(b)q(o)o(xlengthx,)p Fs(n)g FE(b)q(o)o(xlength)
+o(y\),)74 2049 y(whether)f(it)g(is)h(dra)o(wn)e(with)h Fs(n)p
+FE(A)l(TTIP)g(or)f Fs(n)p FE(A)l(TBASE.)h(The)g(follo)o(wing)h(examples)f
+(should)h(illustrate)g(these)74 2106 y(features.)74 2212 y
+Fk(\\documentstyle)22 b([12pt]{article})74 2269 y(\\input)h(FEYNMAN)74
+2325 y(\\begin)g({document})74 2381 y(\\bigphotons)74 2438
+y(\\centerline{ARROWS)f(using)h(FEYNMAN.TEX})74 2494 y
+(\\begin{picture}\(10000,10000)o(\)\(0,0\))307 b(\045)24 b(PICTURE)f(1)74
+2551 y(\\drawline\\fermion[\\NE\\REG]\()o(0,0\)[800)o(0])74
+2607 y(\\drawarrow[\\LDIR\\ATTIP]\(\\pm)o(idx,\\pmi)o(dy\))74
+2664 y(\\drawline\\fermion[\\E\\REG]\(\\)o(fermionb)o(ackx,\\f)o(ermionb)o
+(acky\)[20)o(00])74 2720 y(\\drawline\\fermion[\\N\\REG]\(\\)o(fermionf)o
+(rontx,\\)o(fermion)o(fronty\)[)o(2000])74 2777 y
+(\\drawline\\fermion[\\W\\REG]\(0)o(,0\)[2000)o(])985 2906
+y FE(26)p eop
+%%Page: 27 32
+bop 74 -83 a Fk(\\drawline\\fermion[\\S\\REG]\(0)o(,0\)[2000)o(])74
+-26 y(\\drawarrow[\\S\\ATBASE]\(0,-20)o(00\))74 30 y
+(\\drawarrow[\\W\\ATBASE]\(-2000)o(,0\))74 87 y(\\end{picture})74
+143 y(\\hskip)23 b(-0.4in)74 199 y(\\begin{picture}\(10000,10000)o(\)\(0,0\))
+307 b(\045)24 b(PICTURE)f(2)74 256 y(\\drawline\\fermion[\\SW\\REG]\()o
+(0,0\)[800)o(0])74 312 y(\\thicklines)74 369 y
+(\\drawarrow[\\SW\\ATTIP]\(\\pbac)o(kx,\\pbac)o(ky\))74 425
+y(\\thinlines)74 482 y(\\drawline\\fermion[\\W\\REG]\(\\)o(fermionb)o
+(ackx,\\f)o(ermionb)o(acky\)[20)o(00])74 538 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(fermionf)o(rontx,\\)o(fermion)o
+(fronty\)[)o(2000])74 595 y(\\drawline\\fermion[\\E\\REG]\(0)o(,0\)[2000)o(])
+74 651 y(\\drawline\\fermion[\\N\\REG]\(0)o(,0\)[2000)o(])74
+708 y(\\drawarrow[\\E\\ATBASE]\(2000,)o(0\))74 764 y
+(\\drawarrow[\\N\\ATBASE]\(0,200)o(0\))74 820 y(\\end{picture})74
+877 y(\\hskip)g(-0.4in)74 933 y(\\begin{picture}\(10000,10000)o(\)\(0,0\))307
+b(\045)24 b(PICTURE)f(3)74 990 y(\\drawline\\scalar[\\SW\\REG]\(0)o(,0\)[6])
+74 1046 y(\\drawarrow[\\SW\\ATTIP]\(\\pbac)o(kx,\\pbac)o(ky\))74
+1103 y(\\drawline\\fermion[\\E\\REG]\(0)o(,0\)[2000)o(])74
+1159 y(\\drawline\\fermion[\\N\\REG]\(0)o(,0\)[2000)o(])74
+1216 y(\\drawarrow[\\E\\ATBASE]\(2000,)o(0\))74 1272 y
+(\\drawarrow[\\E\\ATTIP]\(2000,0)o(\))74 1329 y
+(\\drawarrow[\\N\\ATBASE]\(0,200)o(0\))74 1385 y
+(\\drawarrow[\\N\\ATTIP]\(0,2000)o(\))74 1441 y
+(\\drawline\\fermion[\\W\\REG]\(\\)o(scalarba)o(ckx,\\sc)o(alarbac)o
+(ky\)[2000)o(])74 1498 y(\\drawline\\fermion[\\S\\REG]\(\\)o(scalarba)o
+(ckx,\\sc)o(alarbac)o(ky\)[2000)o(])74 1554 y
+(\\drawarrow[\\E\\ATTIP]\(\\scala)o(rbackx,\\)o(scalarb)o(acky\))74
+1611 y(\\drawarrow[\\N\\ATTIP]\(\\scala)o(rbackx,\\)o(scalarb)o(acky\))74
+1667 y(\\end{picture})74 1724 y(\\begin{picture}\(10000,10000)o(\)\(0,0\))307
+b(\045)24 b(PICTURE)f(4)74 1780 y(\\thicklines)74 1837 y
+(\\drawline\\fermion[\\NW\\REG]\()o(0,0\)[800)o(0])74 1893
+y(\\drawline\\fermion[\\W\\REG]\(\\)o(fermionb)o(ackx,\\f)o(ermionb)o
+(acky\)[20)o(00])74 1950 y(\\drawline\\fermion[\\N\\REG]\(\\)o(fermionf)o
+(rontx,\\)o(fermion)o(fronty\)[)o(2000])74 2006 y
+(\\drawarrow[\\NW\\ATBASE]\(-100)o(0,1000\))74 2062 y
+(\\drawarrow[\\NW\\ATBASE]\(-200)o(0,2000\))74 2119 y
+(\\drawarrow[\\NW\\ATBASE]\(-300)o(0,3000\))74 2175 y
+(\\drawarrow[\\NW\\ATTIP]\(-4000)o(,4000\))74 2232 y
+(\\drawarrow[\\NW\\ATTIP]\(-5000)o(,5000\))74 2288 y
+(\\drawline\\fermion[\\E\\REG]\(0)o(,0\)[2000)o(])74 2345 y
+(\\drawline\\fermion[\\S\\REG]\(0)o(,0\)[2000)o(])74 2401 y(\\end{picture})74
+2458 y(\\begin{picture}\(10000,10000)o(\)\(0,0\))307 b(\045)24
+b(PICTURE)f(5)74 2514 y(\\drawline\\photon[\\E\\REG]\(0,)o(0\)[8])74
+2571 y(\\drawline\\fermion[\\E\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([200])74
+2627 y(\\drawarrow[\\E\\ATBASE]\(\\pbac)o(kx,\\pbac)o(ky\))74
+2683 y(\\drawline\\fermion[\\SW\\REG]\()o(0,0\)[200)o(0])74
+2740 y(\\drawline\\fermion[\\NW\\REG]\()o(0,0\)[200)o(0])985
+2906 y FE(27)p eop
+%%Page: 28 33
+bop 74 -83 a Fk(\\end{picture})74 -26 y(\\vskip)23 b(0.5in)74
+30 y(\\begin{picture}\(10000,10000)o(\)\(0,0\))307 b(\045)24
+b(PICTURE)f(6)74 87 y(\\drawline\\gluon[\\E\\REG]\(0,0)o(\)[8])74
+143 y(\\drawarrow[\\E\\ATBASE]\(\\pbac)o(kx,\\pbac)o(ky\))74
+199 y(\\drawline\\fermion[\\SW\\REG]\()o(0,0\)[200)o(0])74
+256 y(\\drawline\\fermion[\\NW\\REG]\()o(0,0\)[200)o(0])74
+312 y(\\end{picture})74 369 y(\\hskip)g(0.42in)74 425 y
+(\\begin{picture}\(10000,10000)o(\)\(0,0\))307 b(\045)24 b(PICTURE)f(7)74
+482 y(\\drawline\\photon[\\SE\\REG]\(0)o(,0\)[8])74 538 y
+(\\drawarrow[\\E\\ATBASE]\(\\pmid)o(x,\\pmidy)o(\))74 595 y
+(\\drawarrow[\\E\\ATBASE]\(\\pbac)o(kx,\\pbac)o(ky\))74 651
+y(\\drawline\\fermion[\\W\\REG]\(0)o(,0\)[2000)o(])74 708 y
+(\\drawline\\fermion[\\N\\REG]\(0)o(,0\)[2000)o(])74 764 y(\\end{picture})74
+820 y(\\begin{picture}\(10000,10000)o(\)\(0,0\))307 b(\045)24
+b(PICTURE)f(8)74 877 y(\\drawline\\gluon[\\SE\\REG]\(0,)o(0\)[7])74
+933 y(\\drawarrow[\\E\\ATTIP]\(\\pmidx)o(,\\pmidy\))74 990
+y(\\drawarrow[\\S\\ATBASE]\(\\pbac)o(kx,\\pbac)o(ky\))74 1046
+y(\\drawline\\fermion[\\W\\REG]\(0)o(,0\)[2000)o(])74 1103
+y(\\drawline\\fermion[\\N\\REG]\(0)o(,0\)[2000)o(])74 1159
+y(\\end{picture})74 1265 y FE(giving)664 1322 y(ARR)o(O)o(WS)16
+b(using)g(FEYNMAN.TEX)144 1750 y Fy(\000)186 1708 y(\000)227
+1667 y(\000)269 1625 y(\000)310 1584 y(\000)337 1557 y(\000)221
+1674 y(\022)p 379 1516 83 2 v 378 1515 2 83 v 396 1499 a Fn(1)p
+61 1751 83 2 v 143 1833 2 83 v 145 1847 a Fy(?)47 1750 y(\033)407
+1791 y(\000)366 1833 y(\000)324 1874 y(\000)283 1916 y(\000)241
+1957 y(\000)214 1984 y(\000)-41 b Ff(\011)p 131 1985 83 2 v
+214 2067 2 83 v 449 1751 83 2 v 448 1750 2 83 v 466 1733 a
+Fn(2)506 1750 y Fy(-)450 1694 y(6)594 1911 y(\011)p 754 1751
+83 2 v 753 1750 2 83 v 771 1733 a Fn(3)811 1750 y Fy(-)-57
+b(-)755 1694 y(6)755 1708 y(6)p 510 1912 83 2 v 592 1994 2
+83 v 552 1911 a(-)594 1952 y(6)1137 1750 y Ff(@)1096 1708 y(@)1054
+1667 y(@)1013 1625 y(@)971 1584 y(@)944 1557 y(@)1062 1612
+y Fn(4)p 861 1517 83 4 v 943 1515 4 83 v 1128 1740 a Ff(I)1086
+1698 y(I)1045 1657 y(I)1014 1625 y(I)972 1584 y(I)p 1179 1752
+83 4 v 1177 1833 4 83 v 1600 1756 a Fg(_)35 b(_)f(_)g(_)1642
+1766 y(^)g(^)g(^)g(^)1746 1729 y Fn(5)p 1936 1751 9 2 v 1918
+1750 a Fy(-)1562 1791 y(\000)1545 1808 y(\000)1562 1750 y(@)1545
+1733 y(@)176 2320 y Fz(\010)p 176 2352 2 9 v 144 2320 9 2 v
+-6 w(\010)p 220 2352 2 9 v 187 2320 9 2 v -7 w(\010)p 263 2352
+2 9 v 231 2320 9 2 v -6 w(\010)p 307 2352 2 9 v 274 2320 9
+2 v -7 w(\010)p 350 2352 2 9 v 318 2320 9 2 v -6 w(\010)p 394
+2352 2 9 v 361 2320 9 2 v -7 w(\010)p 437 2352 2 9 v 405 2320
+9 2 v -6 w(\010)p 481 2352 2 9 v 449 2320 9 2 v 159 2350 2
+1 v 159 2359 a(\002)p 176 2350 V(\001)p 168 2359 1 2 v 203
+2350 2 1 v 10 w(\002)p 220 2350 V(\001)p 212 2359 1 2 v 246
+2350 2 1 v 9 w(\002)p 263 2350 V(\001)p 256 2359 1 2 v 290
+2350 2 1 v 10 w(\002)p 307 2350 V(\001)p 299 2359 1 2 v 334
+2350 2 1 v 10 w(\002)p 350 2350 V -1 w(\001)p 343 2359 1 2
+v 377 2350 2 1 v 10 w(\002)p 394 2350 V(\001)p 386 2359 1 2
+v 421 2350 2 1 v 10 w(\002)p 437 2350 V -1 w(\001)p 430 2359
+1 2 v 464 2350 2 1 v 10 w(\002)p 481 2350 V(\001)p 473 2359
+1 2 v 159 2320 a(\013)p 159 2352 2 9 v 185 2320 9 2 v -6 w(\013)p
+203 2352 2 9 v 229 2320 9 2 v -7 w(\013)p 246 2352 2 9 v 272
+2320 9 2 v -6 w(\013)p 290 2352 2 9 v 316 2320 9 2 v -6 w(\013)p
+334 2352 2 9 v 359 2320 9 2 v -7 w(\013)p 377 2352 2 9 v 403
+2320 9 2 v -6 w(\013)p 421 2352 2 9 v 446 2320 9 2 v -7 w(\013)p
+464 2352 2 9 v 490 2320 9 2 v 313 2402 a Fn(6)472 2319 y Fy(-)102
+2360 y(\000)85 2377 y(\000)102 2319 y(@)85 2302 y(@)725 2320
+y Fz(\010)p 725 2345 2 2 v 700 2320 V 777 2372 a(\010)p 777
+2397 V 752 2372 V 829 2423 a(\010)p 829 2448 V 804 2423 V 881
+2475 a(\010)p 881 2500 V 856 2475 V 725 2346 V 725 2372 a(\012)p
+751 2372 V 777 2398 V 777 2423 a(\012)p 803 2423 V 829 2449
+V 829 2475 a(\012)p 855 2475 V 881 2501 V 881 2527 a(\012)p
+906 2527 V 777 2423 a Fy(-)881 2526 y(-)796 2402 y Fn(7)p 617
+2320 83 2 v 699 2319 2 83 v 1175 2320 a Fz(\020)p 1175 2364
+2 5 v 1130 2320 5 2 v 1212 2357 a(\020)p 1212 2402 2 5 v 1167
+2357 5 2 v 1250 2394 a(\020)p 1250 2439 2 5 v 1205 2394 5 2
+v 1287 2432 a(\020)p 1287 2476 2 5 v 1242 2432 5 2 v 1324 2469
+a(\020)p 1324 2514 2 5 v 1279 2469 5 2 v 1362 2506 a(\020)p
+1362 2551 2 5 v 1317 2506 5 2 v 1399 2544 a(\020)p 1399 2588
+2 5 v 1354 2544 5 2 v 1436 2581 a(\020)p 1436 2626 2 5 v 1391
+2581 5 2 v 1175 2364 2 1 v 1175 2374 a(\001)p 1167 2374 1 2
+v 1212 2402 2 1 v 1212 2411 a(\001)p 1205 2411 1 2 v 1250 2439
+2 1 v 1250 2448 a(\001)p 1242 2448 1 2 v 1287 2476 2 1 v 1287
+2486 a(\001)p 1279 2486 1 2 v 1324 2514 2 1 v 1324 2523 a(\001)p
+1317 2523 1 2 v 1362 2551 2 1 v 1362 2560 a(\001)p 1354 2560
+1 2 v 1399 2589 2 1 v 1399 2598 a(\001)p 1391 2598 1 2 v 1158
+2357 a(\003)p 1158 2364 2 1 v 1158 2374 a(\002)p 1167 2374
+1 2 v 1167 2357 V 1196 2394 a(\003)p 1196 2402 2 1 v 1196 2411
+a(\002)p 1205 2411 1 2 v 1205 2394 V 1233 2432 a(\003)p 1233
+2439 2 1 v 1233 2448 a(\002)p 1242 2448 1 2 v 1242 2432 V 1270
+2469 a(\003)p 1270 2476 2 1 v 1270 2486 a(\002)p 1279 2486
+1 2 v 1279 2469 V 1308 2506 a(\003)p 1308 2514 2 1 v 1308 2523
+a(\002)p 1317 2523 1 2 v 1317 2506 V 1345 2544 a(\003)p 1345
+2551 2 1 v 1345 2560 a(\002)p 1354 2560 1 2 v 1354 2544 V 1382
+2581 a(\003)p 1382 2589 2 1 v 1382 2598 a(\002)p 1391 2598
+1 2 v 1391 2581 V 1243 2472 a Fy(-)1438 2640 y(?)1288 2439
+y Fn(8)p 1047 2320 83 2 v 1129 2319 2 83 v 985 2906 a FE(28)p
+eop
+%%Page: 29 34
+bop 74 -83 a Fp(2.11.2)55 b(Lab)r(els)74 3 y FE(W)l(e)21 b(ha)o(v)o(e)g
+(already)g(seen)h(sev)o(eral)f(examples)h(of)e(ho)o(w)h(to)f(dra)o(w)h(lab)q
+(els.)38 b(One)22 b(is)g(to)e(lab)q(el)j(the)e(o)o(v)o(erall)74
+59 y(diagram,)14 b(at)g(the)h(top)f(or)g(b)q(ottom.)19 b(The)c
+Fs(n)p FE(cen)o(terline)h(command)f(\(see)g(the)f(PHOTONBURST)i(diagram)74
+116 y(in)g(section)g(2.9.2\))d(is)j(useful)g(for)f(this.)145
+172 y(The)i(w)o(a)o(y)f(to)g(include)j(text)e(within)h(the)f(picture)h(is)f
+(with)g(the)g Fk(\\put)g FE(command.)24 b(This)18 b(w)o(as)e(done)h(in)74
+229 y(the)e(sample)h(\014le)g(in)g(section)g(1.6.)j(The)d(syn)o(tax)e(is:)74
+379 y Fk(\\put\(<\(x,y\))23 b(co-ordinates)f(of)h(the)h(lower)f(left)g(point)
+g(of)h(the)g(text>\){<text>})145 529 y FE(More)e(complicated)i(constructions)
+e(are)h(p)q(ossible)h(when)f(used)g(in)g(conjunction)h(with)f(the)f(L)1836
+523 y Ft(a)1857 529 y FE(T)1882 543 y(E)1908 529 y(X)74 586
+y Fs(n)p FE(frameb)q(o)o(x)d(and)g Fs(n)p FE(mak)o(eb)q(o)o(x)g(commands)g
+(\(see)g(theL)1010 580 y Ft(a)1031 586 y FE(T)1056 600 y(E)1082
+586 y(X)h(man)o(ual)f(for)g(details\).)33 b(The)20 b(\\text")e(can)h(b)q(e)74
+642 y(mathematical)d(equations,)f(normal)g(w)o(ords)f(or)h(ev)o(en)g(other)g
+(pictures.)21 b(As)15 b(an)g(example:)74 805 y Fk
+(\\begin{picture}\(20000,8000\))74 861 y(\\drawline\\photon[\\N\\REG]\(30)o
+(00,0\)[5])74 918 y(\\put\(4000,\\pmidy\){$\\leftarr)o(ow)21
+b(\\frac{ig_{\\mu\\nu}}{p^2-m^2+)o(i\\epsil)o(on}$})74 974
+y(\\put\(2000,\\pbacky\){$\\mu$})74 1031 y(\\put\(2000,\\pfronty\){$\\nu$})74
+1087 y(\\end{picture})74 1250 y FE(whic)o(h)16 b(results)g(in)256
+1575 y FA(\()256 1492 y(\()256 1409 y(\()266 1534 y(\))266
+1451 y(\))311 1482 y Fs( )423 1459 y Fv(ig)452 1463 y Fc(\026\027)p
+374 1472 165 2 v 374 1499 a Fv(p)392 1489 y Fm(2)409 1499 y
+Fw(\000)p Fv(m)467 1489 y Fm(2)485 1499 y Fn(+)p Fv(i\017)228
+1378 y Fx(\026)228 1586 y(\027)74 1729 y Fq(2.12)70 b(Review)21
+b(Exercise)g(for)j(Chapter)f(Tw)n(o)74 1831 y FE(Pro)q(duce)16
+b(the)f(follo)o(wing)h(diagram,)f(including)j(lab)q(elling.)k(Note)15
+b(the)h(st)o(yles)f(and)g(b)q(oldness)i(used.)915 1929 y Fh(\010)p
+915 1953 4 2 v 891 1929 2 4 v 967 1980 a(\010)p 967 2004 4
+2 v 943 1980 2 4 v 1019 2032 a(\010)p 1019 2056 4 2 v 995 2032
+2 4 v 915 1954 4 2 v 915 1980 a(\012)p 942 1980 2 4 v 967 2006
+4 2 v 967 2032 a(\012)p 993 2032 2 4 v 889 2056 4 130 v 892
+2019 a Ff(6)p 891 2058 131 4 v 957 2056 a(\033)p 890 2062 2
+7 v 885 2057 7 2 v 843 2098 a Fy(\000)802 2139 y(\000)760 2181
+y(\000)719 2222 y(\000)679 2262 y(\000)p 678 2265 2 4 v 679
+2266 4 2 v 682 2269 2 5 v 682 2311 a Fz(\021)p 637 2311 5 2
+v 644 2306 2 5 v 644 2349 a(\021)p 599 2349 5 2 v 607 2344
+2 5 v 607 2386 a(\021)p 562 2386 5 2 v 570 2381 2 5 v 570 2423
+a(\021)p 525 2423 5 2 v 532 2418 2 5 v 532 2461 a(\021)p 487
+2461 5 2 v 495 2456 2 5 v 495 2498 a(\021)p 450 2498 5 2 v
+628 2302 2 1 v 628 2311 a(\002)p 637 2311 1 2 v 590 2339 2
+1 v 590 2349 a(\002)p 599 2349 1 2 v 553 2377 2 1 v 553 2386
+a(\002)p 562 2386 1 2 v 516 2414 2 1 v 516 2423 a(\002)p 525
+2423 1 2 v 478 2451 2 1 v 478 2461 a(\002)p 487 2461 1 2 v
+628 2295 a(\003)p 628 2302 2 1 v -1 w(\000)p 644 2302 V 637
+2295 1 2 v 590 2332 a(\003)p 590 2339 2 1 v(\000)p 607 2339
+V 599 2332 1 2 v 553 2369 a(\003)p 553 2376 2 1 v(\000)p 570
+2376 V 562 2369 1 2 v 516 2407 a(\003)p 516 2414 2 1 v -1 w(\000)p
+532 2414 V 525 2407 1 2 v 478 2444 a(\003)p 478 2451 2 1 v(\000)p
+495 2451 V 487 2444 1 2 v 683 2265 a(t)p 682 2268 2 4 v 682
+2269 4 2 v 685 2268 a Fy(\000)727 2226 y(\000)768 2185 y(\000)810
+2143 y(\000)849 2104 y(\000)451 2497 y Fz(t)-63 b Fy(@)-43
+b(@)358 2447 y(@)h(@)308 2396 y(@)g(@)298 2386 y Ff(I)450 2539
+y Fy(@)g(@)500 2589 y(@)g(@)551 2639 y(@)g(@)-142 b Fu(H)492
+2623 y Fn(0)706 2274 y Fw( )-6 b(\000)q Fv(f)780 2279 y Fm(6)797
+2274 y Fn(\()p Fv(!)q(;p)862 2278 y Fm(+)887 2274 y Fw(\001)p
+Fv(q)913 2278 y Fd(\000)938 2274 y Fn(\))849 1927 y Fy(@)832
+1910 y(@)823 1899 y(I)1021 2098 y(@)1038 2115 y(@)1051 2127
+y(I)1095 2115 y Fx(p)10 b FE(+)h Fx(q)985 2906 y FE(29)p eop
+%%Page: 30 35
+bop 74 229 a Fr(Chapter)34 b(3)74 436 y FD(Dra)m(wing)40 b(V)-10
+b(ertices)74 659 y FE(Most)13 b(t)o(yp)q(es)h(of)g(v)o(ertices)g(will)h(b)q
+(e)g(dra)o(wn)f(using)g(the)g Fs(n)p FE(dra)o(wline)h(command.)k(A)14
+b(few)g(sp)q(ecialized)j(v)o(ertices,)74 715 y(those)e(of)g(three)g(and)h
+(four)e(gauge)h(b)q(osons,)g(ha)o(v)o(e)g(b)q(een)h(pre-de\014ned.)74
+858 y Fq(3.1)70 b(The)22 b Fi(n)p Fq(dra)n(wv)n(ertex)h(Command)74
+960 y FE(The)14 b(command)g Fs(n)p Fo(dr)n(awvertex)g FE(is)g(used)g(to)f
+(pro)q(duce)i(a)e(limited)i(n)o(um)o(b)q(er)f(of)g(v)o(ertices)g(in)g
+(conjunction)h(with)74 1016 y(a)g(n)o(um)o(b)q(er)h(of)e(sp)q(ecial)j
+(options.)j(The)c(syn)o(tax)e(is:)74 1223 y Fk(\\drawvertex<particle)21
+b(type>[<direction><number)g(of)i(lines)h(in)f(vertex>])146
+1279 y(\(<\(x,y\))g(co-ordinates)f(of)h(`beginning')g(of)g(vertex>\)[length)f
+(of)i(lines)f(in)h(vertex])74 1430 y FE(where)16 b(the)f(parameters)f(are)h
+(similar)h(to)f(those)g(of)g(the)g Fs(n)p FE(dra)o(wline)h(statemen)o(t.)j
+(An)c(example)h(is:)74 1580 y Fk(\\drawvertex\\gluon[\\S)21
+b(3]\(0,10000\)[4])74 1730 y FE(whic)o(h)16 b(w)o(ould)g(dra)o(w)e(a)h
+(three-gluon)h(v)o(ertex)f(commencing)h(from)e(the)i(co-ordinate)f(p)q(oin)o
+(t)h(\(0,10000\))c(\(see)74 1787 y(section)17 b(1.5)f(for)g(a)h(discussion)h
+(of)f(the)f(co-ordinate)h(grid\),)g(with)g(the)g(initial)i(line)g(dra)o(wn)d
+(in)h(a)g Fo(southerly)74 1843 y FE(direction)c(\(to)o(w)o(ards)c(the)i(b)q
+(ottom)g(of)g(the)g(page\))g(then)g(branc)o(hing)h(in)o(to)g(t)o(w)o(o)d
+(other)i(gluons)h(\(in)g(the)f Fk(\\SE)g FE(and)74 1900 y Fk(\\SW)16
+b FE(direction)h(in)g(this)g(case\).)22 b(Eac)o(h)16 b(w)o(ould)g(b)q(e)h(of)
+f(length)g(four,)g Fo(i.e.)33 b FE(ha)o(v)o(e)16 b(four)f(lo)q(ops.)23
+b(Th)o(us)16 b(the)g(end)74 1956 y(result)11 b(w)o(ould)g(b)q(e)g(a)f
+(three-gluon)i(v)o(ertex)e(cen)o(tred)h(at)f(some)g(p)q(oin)o(t)h(\(whic)o(h)
+g(will)h(receiv)o(e)f(a)g(co-ordinate)f(lab)q(el)74 2012 y
+Fk(\(\\vertexmidx,\\vertexmidy\))p FE(\))e(b)q(eneath)13 b(the)f(p)q(oin)o(t)
+g(\(0,10000\).)k(It)c(will)h(ha)o(v)o(e)e(one)h(gluon)h(line)g(running)74
+2069 y Fo(northwar)n(d)18 b FE(from)f(that)g(line)i(and)f(terminating)g(at)f
+(\(0,10000\))e(and)i(t)o(w)o(o)f(others)i(running)g(southeasterly)74
+2125 y(and)e(south)o(w)o(esterly)l(.)j(In)d(p)q(oin)o(t)g(of)e(fact)h(it)h(w)
+o(ould)f(b)q(e:)947 2321 y Fz(\013)p 947 2346 2 2 v 973 2321
+V 947 2286 a(\013)p 947 2311 V 973 2286 V 947 2251 a(\013)p
+947 2276 V 973 2251 V 947 2216 a(\013)p 947 2241 V 973 2216
+V 947 2180 a(\013)p 947 2205 V 973 2180 V 981 2321 a(\000)p
+981 2329 2 1 v 981 2338 a(\001)p 974 2338 1 2 v 974 2321 V
+981 2286 a(\000)p 981 2294 2 1 v 981 2303 a(\001)p 974 2303
+1 2 v 974 2286 V 981 2251 a(\000)p 981 2258 2 1 v 981 2267
+a(\001)p 974 2267 1 2 v 974 2251 V 981 2216 a(\000)p 981 2223
+2 1 v 981 2232 a(\001)p 974 2232 1 2 v 974 2216 V 947 2347
+2 2 v 947 2373 a(\012)p 973 2373 V 947 2312 V 947 2338 a(\012)p
+973 2338 V 947 2277 V 947 2303 a(\012)p 973 2303 V 947 2242
+V 947 2267 a(\012)p 973 2267 V 947 2206 V 947 2232 a(\012)p
+973 2232 V 1019 2373 a(\020)p 1019 2418 2 5 v 974 2373 5 2
+v 1056 2410 a(\020)p 1056 2455 2 5 v 1011 2410 5 2 v 1093 2448
+a(\020)p 1093 2492 2 5 v 1048 2448 5 2 v 1131 2485 a(\020)p
+1131 2530 2 5 v 1086 2485 5 2 v 1168 2522 a(\020)p 1168 2567
+2 5 v 1123 2522 5 2 v 1019 2418 2 1 v 1019 2427 a(\001)p 1011
+2427 1 2 v 1056 2455 2 1 v 1056 2464 a(\001)p 1048 2464 1 2
+v 1093 2492 2 1 v 1093 2501 a(\001)p 1086 2501 1 2 v 1131 2530
+2 1 v 1131 2539 a(\001)p 1123 2539 1 2 v 1002 2410 a(\003)p
+1002 2418 2 1 v 1002 2427 a(\002)p 1011 2427 1 2 v 1011 2410
+V 1039 2448 a(\003)p 1039 2455 2 1 v 1039 2464 a(\002)p 1048
+2464 1 2 v 1048 2448 V 1077 2485 a(\003)p 1077 2492 2 1 v 1077
+2501 a(\002)p 1086 2501 1 2 v 1086 2485 V 1114 2522 a(\003)p
+1114 2530 2 1 v 1114 2539 a(\002)p 1123 2539 1 2 v 1123 2522
+V 927 2373 a(\023)p 927 2418 2 5 v 969 2373 5 2 v 889 2410
+a(\023)p 889 2455 2 5 v 932 2410 5 2 v 852 2448 a(\023)p 852
+2493 2 5 v 894 2448 5 2 v 815 2485 a(\023)p 815 2530 2 5 v
+857 2485 5 2 v 777 2523 a(\023)p 777 2567 2 5 v 820 2523 5
+2 v 927 2418 2 1 v 927 2427 a(\002)p 936 2427 1 2 v 889 2455
+2 1 v 889 2464 a(\002)p 898 2464 1 2 v 852 2493 2 1 v 852 2502
+a(\002)p 861 2502 1 2 v 815 2530 2 1 v 815 2539 a(\002)p 824
+2539 1 2 v 943 2410 a(\000)p 943 2418 2 1 v 943 2427 a(\001)p
+936 2427 1 2 v 936 2410 V 906 2448 a(\000)p 906 2455 2 1 v
+906 2464 a(\001)p 898 2464 1 2 v 898 2448 V 869 2485 a(\000)p
+869 2493 2 1 v 869 2502 a(\001)p 861 2502 1 2 v 861 2485 V
+831 2522 a(\000)p 831 2530 2 1 v 831 2539 a(\001)p 824 2539
+1 2 v 824 2522 V 979 2184 a Fs( )e FE(\(0)p Fx(;)8 b FE(10000\))985
+2906 y(30)p eop
+%%Page: 31 36
+bop 145 -83 a FE(W)l(e)18 b(will)j(refer)d(to)g(the)g(initial)j(line)f(dra)o
+(wn)e(\(that)g(one)g(sp)q(eci\014ed)j(b)o(y)e(the)f(direction)i(parameter\))d
+(as)74 -26 y Fo(line)h(one)g FE(and)h(n)o(um)o(b)q(er)f(the)h(lines)h(sequen)
+o(tially)g(in)f(a)f(clo)q(c)o(kwise)h(sense)g(ab)q(out)f(the)h(v)o(ertex.)28
+b(Therefore)74 30 y(w)o(e)15 b(will)h(ha)o(v)o(e)f(line)h(t)o(w)o(o,)d(three)
+i(and,)g(p)q(ossibly)l(,)h(four.)k(In)15 b(the)g(ab)q(o)o(v)o(e)f(example)i
+(line)h(one)e(is)g(the)g(northerly)74 87 y(line,)i(line)h(t)o(w)o(o)c(is)i
+(the)g(southeasterly)g(line)h(and)f(line)h(three)f(is)g(the)g(south)o(w)o
+(esterly)f(line)j(\(with)e(resp)q(ect)g(to)74 143 y(the)f(cen)o(tre\).)20
+b(When)c Fs(n)p FE(dra)o(wv)o(ertex)d(is)j(executed)g(it)g(returns)f(the)g
+(follo)o(wing)h(parameters:)74 306 y Fk(\\vertexonex,\\vertexoney:)164
+b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)h(back)f(of)h(line)f(one.)74
+362 y(\\vertextwox,\\vertextwoy:)164 b(The)23 b(\(x,y\))h(co-ordinates)e(of)h
+(the)h(back)f(of)h(line)f(two.)74 419 y(\\vertexthreex,\\vertexthreey)o(:)69
+b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)h(back)f(of)h(line)f(three.)74
+475 y(\\vertexfourx,\\vertexfoury:)116 b(The)23 b(\(x,y\))h(co-ordinates)e
+(of)h(the)h(back)f(of)h(line)f(four.)74 532 y(\\vertexmidx,\\vertexmidy:)164
+b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)h(middle)f(of)g(the)h(vertex.)74
+588 y(\\vertexcount:)428 b(The)23 b(number)g(of)h(vertices)f(printed)g(thus)g
+(far.)145 751 y FE(When)f(dra)o(wing)g(a)g(gluon)g(v)o(ertex)g(all)h(of)f
+(the)g(parameters)f(returned)h(b)o(y)g Fk(\\drawline\\gluon)e
+FE(are)74 807 y(de\014ned)15 b(but)g(tak)o(e)e(the)h(v)m(alues)h(of)f(the)g
+(last)g(gluon)g(dra)o(wn)g(\(n)o(um)o(b)q(er)g(three)g(for)f(a)h(three-gluon)
+g(v)o(ertex)g(and)74 864 y(n)o(um)o(b)q(er)d(four)f(for)f(a)i(four-gluon)f(v)
+o(ertex\).)18 b(Th)o(us)10 b(when)h Fk(\\drawvertex\\gluon[\\N)21
+b(4]...)10 b FE(is)g(encoun)o(tered)74 920 y Fs(n)p FE(gluonlengthx,)k
+Fs(n)p FE(pmidy)l(,)f Fs(n)p FE(gluonfron)o(tx,)f Fo(etc.)25
+b FE(will)14 b(b)q(e)f(de\014ned)h(with)e(the)g(v)m(alues)i(appropriate)e
+(for)g(gluon)74 977 y(four)j(\(the)g Fs(n)p FE(E)g(gluon)g(in)i(this)e
+(instance\).)21 b(The)15 b(same)g(applies)i(for)d(photonic)i(v)o(ertices.)74
+1120 y Fq(3.2)70 b(The)22 b(T)n(yp)r(es)h(of)g(V)-6 b(ertex)23
+b(Lines)74 1221 y FE(The)16 b(kinds)g(of)f(particle)h(lines)h(whic)o(h)f
+Fp(FEYNMAN)f FE(can)h(dra)o(w)e(with)i Fs(n)p FE(dra)o(wv)o(ertex)d(are:)575
+1371 y Fk(\\photon)575 1428 y(\\gluon)74 1578 y FE(whic)o(h)j(are)f(implemen)
+o(ted)i(as)575 1672 y Fk(\\drawvertex\\photon...)575 1728 y
+(\\drawvertex\\gluon...)145 1822 y FE(Note)k(that)g(this)g(is)h(the)g(only)g
+(argumen)o(t)f(of)g Fs(n)p FE(dra)o(wv)o(ertex)f(whic)o(h)i(is)g(in)g(lo)o(w)
+o(ercase)f(letters.)39 b(The)74 1879 y Fs(n)p FE(photon)16
+b(option)g(is)g(useful)h(to)e(represen)o(t)h(ZWW,)f(ZZWW,)g(gra)o(viton)g(v)o
+(ertices)h(and)g(so)f(forth.)22 b(Dra)o(wing)74 1935 y Fx( )115
+1923 y FE(\026)106 1935 y Fx( )q(\015)d FE(and)e(similar)h(v)o(ertices)f(has)
+g(b)q(een)h(demonstrated)f(rep)q(eatedly)l(.)26 b(Section)18
+b(2.1)e(illustrated)i(the)f(basic)74 1992 y(command)e(sequence.)74
+2135 y Fq(3.3)70 b(P)n(article)20 b(Direction)74 2236 y FE(Eac)o(h)e(v)o
+(ertex)g(ma)o(y)f(b)q(e)i(dra)o(wn)f(in)h(an)o(y)f(of)g(eigh)o(t)g(p)q
+(ossible)i(directions,)g(sp)q(eci\014ed)g(b)o(y)e(the)h(p)q(oin)o(ts)f(of)g
+(the)74 2293 y(compass)d(with)g(North)g(alw)o(a)o(ys)g(understo)q(o)q(d)g(as)
+g(b)q(eing)i(at)d(the)i(top)e(of)h(the)g(page:)384 2456 y Fk(\\N)72
+b(\\NE)f(\\E)g(\\SE)g(\\S)h(\\SW)f(\\W)g(\\NW)74 2618 y FE(This)16
+b(is)g(the)f(second)h(argumen)o(t)e(of)h Fs(n)p FE(dra)o(wv)o(ertex,)e(just)i
+(as)g(it)g(w)o(as)g(for)f Fs(n)p FE(dra)o(wline.)74 2712 y
+Fk(\\drawvertex\\photon[\\NW...)985 2906 y FE(31)p eop
+%%Page: 32 37
+bop 74 -83 a FE(and)15 b(so)e(forth.)19 b(Line)d(one)e(is)h(dra)o(wn)f(from)f
+(the)i(sp)q(eci\014ed)h(p)q(oin)o(t)f(in)g(the)f(indicated)i(direction.)21
+b(The)15 b(v)o(ertex)74 -26 y(is)i(at)e(the)i(termin)o(us)f(of)g(this)g
+(line.)25 b(Note)15 b(that)h(all)h(directions)g(are)f(in)h(upp)q(ercase)g
+(and,)g(as)e(alw)o(a)o(ys,)h(don't)74 30 y(omit)c(the)h(bac)o(kslash.)19
+b(All)13 b(of)f(the)g(particle)i(lines)f(in)g(the)g(v)o(ertex)e(are)h(dra)o
+(wn)g(in)h(these)f(compass)g(directions.)74 87 y(V)l(ertices)j(with)g(four)f
+(particles)h(are)f(dra)o(wn)g(in)h(a)f(cross,)g(that)f(is)i(eac)o(h)g(line)g
+(is)g(separated)f(b)o(y)h(90)1734 70 y Fw(\016)1753 87 y FE(.)k(V)l(ertices)
+74 143 y(with)c(three)g(particle)g(lines)h(are)e(dra)o(wn)g(in)i(a)e(`)p
+Fb(Y)p FE(')g(con\014guration)g(with)h(the)g(sp)q(eci\014ed)h(direction)g(b)q
+(eing)g(the)74 199 y(`base')h(of)g(the)h Fb(Y)p FE(.)f(Th)o(us)g(a)g
+(four-photon)h(v)o(ertex)f(dra)o(wn)g(in)h(the)g Fs(n)p FE(NW)f(direction)h
+(will)h(ha)o(v)o(e)f(line)h(one)e(in)74 256 y(the)d Fs(n)p
+FE(NW)g(direction,)h(with)f(the)g(v)o(ertex)f(at)h(the)g(NW)f(end.)20
+b(Line)c(t)o(w)o(o)c(will)k(mo)o(v)o(e)d(around)h(clo)q(c)o(kwise)h(from)74
+312 y(this)j(b)o(y)g(90)277 296 y Fw(\016)314 312 y FE(and)f(so)h(will)h(b)q
+(e)f(dra)o(wn)f(in)i(the)f Fs(n)p FE(SW)f(direction)i(out)e(of)g(the)h(h)o
+(ub.)28 b(Line)19 b(three)f(will)h(b)q(e)f(in)74 369 y(the)e
+Fs(n)p FE(NW)f(direction)h(and)g(line)h(four)e(in)h(the)g Fs(n)p
+FE(NE)f(from)g(the)g(v)o(ertex.)20 b(A)c(three-photon)f(v)o(ertex)g(dra)o(wn)
+g(in)74 425 y(the)i Fs(n)p FE(NW)f(direction)i(will)h(again)e(ha)o(v)o(e)f
+(line)j(one)d(in)i(the)f(same)f(direction.)26 b(Line)19 b(t)o(w)o(o)c(will)k
+(no)o(w)d(b)q(e)h(135)1923 409 y Fw(\016)74 482 y FE(further)d(in)h(a)e(clo)q
+(c)o(kwise)i(sense)g(and)f(therefore)f(will)j(b)q(e)e(in)h(the)f
+Fs(n)p FE(W)f(direction.)21 b(Line)15 b(three)f(will)i(b)q(e)e(in)h(the)74
+538 y Fs(n)p FE(N)g(direction.)21 b(Lines)c(t)o(w)o(o)d(and)h(three)g(will)i
+(alw)o(a)o(ys)e(b)q(e)h(separated)f(b)o(y)g(90)1371 522 y Fw(\016)1390
+538 y FE(.)74 681 y Fq(3.4)70 b(The)22 b(Num)n(b)r(er)g(of)i(Lines)74
+782 y FE(The)13 b(third)g(parameter)f(will)j(either)e(b)q(e)h(a)e(3)g(or)h(a)
+f(4.)19 b(It)12 b(declares)i(whether)f(a)f(three)h(or)f(four)h(particle)h(v)o
+(ertex)74 839 y(is)i(to)e(b)q(e)i(dra)o(wn.)k(An)o(y)15 b(other)g(en)o(try)g
+(will)h(result)g(in)g(an)f(error.)74 982 y Fq(3.5)70 b(Line)22
+b(Co-ordinate)g(P)n(arameters)74 1085 y Fp(3.5.1)55 b(Input)19
+b(P)n(arameters)74 1171 y FE(The)d(fourth)e(and)i(\014fth)f(argumen)o(ts)f
+(of)h(the)g Fs(n)p FE(dra)o(wv)o(ertex)f(command)h(are)g(the)g(\(x,y\))f
+(co-ordinates)h(of)g(the)74 1227 y Fo(b)n(e)n(ginning)e FE(of)i(particle)i
+(line)g(n)o(um)o(b)q(er)f(one.)21 b(These)16 b(are)f(as)g(measured)h(in)g
+Fo(c)n(entip)n(oints)e FE(on)i(the)f(grid)h(whic)o(h)74 1284
+y Fp(FEYNMAN)f FE(has)g(established.)22 b(They)15 b(are)g(en)o(tered)g(in)h
+(the)f(format)e(\()p Fx(x)i(co)p FE(-)p Fx(or)q(dinate;)8 b(y)16
+b(co)p FE(-)p Fx(or)q(dinate)p FE(\))74 1340 y(where)h Fx(x)g
+FE(and)g Fx(y)i FE(ma)o(y)d(b)q(e)i(in)o(teger)f(n)o(um)o(b)q(ers)g(\(b)q(et)
+o(w)o(een,)g(roughly)l(,)h(-30,000)d(and)i(+30,000\))e(or)i(v)m(ariables)74
+1396 y(\(coun)o(ters\))f(with)h(n)o(umerical)i(v)m(alues.)26
+b(A)17 b(n)o(um)o(b)q(er)g(of)g(v)m(ariables)h(ha)o(v)o(e)f(b)q(een)h
+(pre-de\014ned)g(and)f(a)o(v)m(ailable)74 1453 y(for)d(use.)20
+b(The)14 b(user)g(ma)o(y)g(also)g(de\014ne)h(his)g(o)o(wn)f(\(see)g(the)h
+(section)f(on)h(storing)f(information\).)19 b(Once)c(again)74
+1509 y(some)g(samples)h(ma)o(y)e(b)q(e)i(illustrativ)o(e:)74
+1657 y Fk(\\drawvertex\\photon[\\SE)21 b(3]\(-1500,12000\)[2])74
+1714 y(\\drawvertex\\photon[\\E)g(4]\(\\photonbackx,\\photonback)o(y\)[2])74
+1770 y(\\drawvertex\\gluon[\\N)g(4]\(\\Xone,\\Yone\)[1])74
+1827 y(\\drawvertex\\gluon[\\SW)g(3]\(3000,\\vertexthreey\)[7])145
+1975 y FE(In)15 b(the)h(ab)q(o)o(v)o(e)e Fs(n)p FE(photon)o(bac)o(kx)h(and)g
+Fs(n)p FE(photon)o(bac)o(ky)f(are)h(co-ordinates,)g(presumably)h(returned)g
+(from)74 2031 y(a)k(previously)i(dra)o(wing)f(a)f(photon.)36
+b Fs(n)p FE(Xone)21 b(and)g Fs(n)p FE(Y)l(one)f(are)h(some)f(v)m(alues)i
+(stored)e(b)o(y)g(the)h(user)g(and)74 2088 y Fs(n)p FE(v)o(ertexthreey)15
+b(is)g(the)h(ordinate)f(of)g(the)g(endp)q(oin)o(t)i(of)d(the)i(third)f(line)i
+(in)f(the)g(previously)g(dra)o(wn)f(v)o(ertex.)74 2209 y Fp(3.5.2)55
+b(Output)19 b(P)n(arameters)74 2295 y FE(In)i(section)g(3.1)f(w)o(e)g(listed)
+i(a)e(n)o(um)o(b)q(er)h(of)f(useful)i(p)q(ositional)g(parameters)d(whic)o(h)j
+(are)e(returned)h(when)74 2351 y Fs(n)p FE(dra)o(wv)o(ertex)c(is)i(called.)31
+b(F)l(or)17 b(the)i(appropriate)f(v)o(ertices)h(the)f(follo)o(wing)h(are)f
+(de\014ned,)i(eac)o(h)e(de\014nition)74 2408 y(sup)q(erseding)f(the)e
+(previous)h(v)m(alue)h(of)d(the)i(v)m(ariable.)74 2556 y Fk
+(\\vertexonex,\\vertexoney:)164 b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)
+h(back)f(of)h(line)f(one.)74 2612 y(\\vertextwox,\\vertextwoy:)164
+b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)h(back)f(of)h(line)f(two.)74
+2669 y(\\vertexthreex,\\vertexthreey)o(:)69 b(The)23 b(\(x,y\))h
+(co-ordinates)e(of)h(the)h(back)f(of)h(line)f(three.)74 2725
+y(\\vertexfourx,\\vertexfoury:)116 b(The)23 b(\(x,y\))h(co-ordinates)e(of)h
+(the)h(back)f(of)h(line)f(four.)74 2781 y(\\vertexmidx,\\vertexmidy:)164
+b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)h(middle)f(of)g(the)h(vertex.)
+985 2906 y FE(32)p eop
+%%Page: 33 38
+bop 74 -83 a Fk(\\vertexcount:)428 b(The)23 b(number)g(of)h(vertices)f
+(printed)g(thus)g(far.)74 67 y FE(These)16 b(are)f(graphically)h(illustrated)
+h(b)o(y)74 230 y Fk(\\begin{picture}\(20000,11000)o(\))74 287
+y(\\drawvertex\\photon[\\N)k(3]\(18500,0\)[4])74 343 y
+(\\drawline\\fermion[\\SW\\REG]\()o(\\vertexo)o(nex,\\ve)o(rtexone)o
+(y\)[2000])74 400 y(\\drawline\\fermion[\\SE\\REG]\()o(\\vertexo)o(nex,\\ve)o
+(rtexone)o(y\)[2000])74 456 y(\\drawline\\fermion[\\N\\REG]\(\\)o(vertextw)o
+(ox,\\ver)o(textwoy)o(\)[2000])74 512 y(\\drawline\\fermion[\\W\\REG]\(\\)o
+(vertextw)o(ox,\\ver)o(textwoy)o(\)[2000])74 569 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexth)o(reex,\\v)o(ertexth)o
+(reey\)[20)o(00])74 625 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexth)o
+(reex,\\v)o(ertexth)o(reey\)[20)o(00])74 682 y
+(\\put\(\\vertexonex,\\vertexone)o(y\){\\quad)f(\(vertexonex,vertexoney\)})74
+738 y(\\put\(1000,\\vertextwoy\){\(ver)o(textwox,)o(vertext)o(woy\)})74
+795 y(\\put\(\\fermionbackx,\\vertext)o(hreey\){\\)o(quad)h
+(\(vertexthreex,vertexthre)o(ey\)})74 851 y(\\put\(\\vertexmidx,\\vertexmid)o
+(y\){\\quad)f(\(vertexmidx,vertexmidy\)})74 908 y(\\end{picture})74
+1070 y FE(This)c(yields)909 1554 y FA(\))909 1637 y(\))900
+1596 y(\()900 1679 y(\()p 882 1499 2 5 v 882 1525 a Fz(\012)p
+907 1525 5 2 v 824 1441 2 5 v 824 1467 a(\012)p 849 1467 5
+2 v 8 w(\010)p 882 1495 2 5 v 853 1467 5 2 v 824 1408 a(\010)p
+824 1437 2 5 v 795 1408 5 2 v 940 1467 a(\013)p 940 1495 2
+5 v 965 1467 5 2 v 998 1408 a(\013)p 998 1437 2 5 v 1024 1408
+5 2 v 940 1499 2 5 v 940 1525 a(\011)p 912 1525 5 2 v 998 1441
+2 5 v 998 1467 a(\011)p 970 1467 5 2 v 870 1731 a Fy(\000)853
+1748 y(\000)912 1731 y(@)929 1748 y(@)p 795 1408 2 83 v 712
+1409 83 2 v 1027 1408 2 83 v 1028 1409 83 2 v 958 1690 a FE(\(v)o
+(ertexonex,v)o(ertexoney\))186 1408 y(\(v)o(ertext)o(w)o(o)o(x,v)o(ertext)o
+(w)n(o)o(y\))487 b(\(v)o(ertexthreex,v)o(ertexthreey\))958
+1524 y(\(v)o(ertexmidx,v)o(ertexmidy\))145 1896 y(and)74 2046
+y Fk(\\begin{picture}\(8000,8000\))74 2103 y(\\drawvertex\\gluon[\\NE)21
+b(4]\(0,0\)[3])74 2159 y(\\drawline\\fermion[\\W\\REG]\(\\)o(vertexon)o
+(ex,\\ver)o(texoney)o(\)[2000])74 2216 y(\\drawline\\fermion[\\S\\REG]\(\\)o
+(vertexon)o(ex,\\ver)o(texoney)o(\)[2000])74 2272 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(vertextw)o(ox,\\ver)o(textwoy)o
+(\)[2000])74 2329 y(\\drawline\\fermion[\\W\\REG]\(\\)o(vertextw)o(ox,\\ver)o
+(textwoy)o(\)[2000])74 2385 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexth)o
+(reex,\\v)o(ertexth)o(reey\)[20)o(00])74 2442 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexth)o(reex,\\v)o(ertexth)o
+(reey\)[20)o(00])74 2498 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexfo)o
+(urx,\\ve)o(rtexfou)o(ry\)[2000)o(])74 2555 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(vertexfo)o(urx,\\ve)o(rtexfou)o
+(ry\)[2000)o(])74 2611 y(\\put\(\\vertexonex,\\vertexone)o(y\){)45
+b(\(vertexonex,vertexoney\)})74 2667 y(\\put\(\\vertextwox,\\vertextwo)o
+(y\){)g(\(vertextwox,vertextwoy\)})74 2724 y(\\put\(\\vertexthreex,\\vertext)
+o(hreey\){)f(\(vertexthreex,vertexthreey\)})74 2780 y
+(\\put\(\\vertexfourx,\\vertexfo)o(ury\){)h(\(vertexfourx,vertexfour)o(y\)})
+985 2906 y FE(33)p eop
+%%Page: 34 39
+bop 74 -83 a Fk(\\put\(\\vertexmidx,\\vertexmid)o(y\){)45 b
+(\(vertexmidx,vertexmidy\)})74 -26 y(\\end{picture})74 117
+y FE(giving)16 b(us)p 799 452 2 5 v 799 495 a Fz(\021)p 754
+495 5 2 v 761 490 2 5 v 761 532 a(\021)p 717 532 5 2 v 724
+527 2 5 v 724 569 a(\021)p 679 569 5 2 v 687 564 2 5 v 687
+607 a(\021)p 642 607 5 2 v 745 486 2 1 v 745 495 a(\002)p 754
+495 1 2 v 707 523 2 1 v 707 532 a(\002)p 717 532 1 2 v 670
+560 2 1 v 670 569 a(\002)p 679 569 1 2 v 745 478 a(\003)p 745
+485 2 1 v -1 w(\000)p 761 485 V 754 478 1 2 v 707 515 a(\003)p
+707 522 2 1 v(\000)p 724 522 V 717 515 1 2 v 670 553 a(\003)p
+670 560 2 1 v(\000)p 687 560 V 679 553 1 2 v 753 407 2 5 v
+753 449 a(\022)p 795 449 5 2 v 716 369 2 5 v 716 412 a(\022)p
+758 412 5 2 v 678 332 2 5 v 678 374 a(\022)p 721 374 5 2 v
+641 295 2 5 v 641 337 a(\022)p 683 337 5 2 v 753 395 a(\003)p
+753 402 2 1 v 762 395 1 2 v 716 358 a(\003)p 716 365 2 1 v
+725 358 1 2 v 678 320 a(\003)p 678 327 2 1 v 687 320 1 2 v
+770 395 a(\000)p 770 403 2 1 v 770 412 a(\001)p 762 412 1 2
+v 762 395 V 732 358 a(\000)p 732 365 2 1 v 732 374 a(\001)p
+725 374 1 2 v 725 358 V 695 320 a(\000)p 695 328 2 1 v 695
+337 a(\001)p 688 337 1 2 v 688 320 V 799 403 a(\023)p 799 448
+2 5 v 841 403 5 2 v 836 366 a(\023)p 836 411 2 5 v 878 366
+5 2 v 873 329 a(\023)p 873 374 2 5 v 916 329 5 2 v 911 291
+a(\023)p 911 336 2 5 v 953 291 5 2 v 853 403 a(\000)p 853 410
+2 1 v 845 403 1 2 v 890 366 a(\000)p 890 373 2 1 v 882 366
+1 2 v 927 329 a(\000)p 927 336 2 1 v 920 329 1 2 v 836 411
+2 1 v 836 420 a(\002)p 853 411 V(\001)p 845 420 1 2 v 873 374
+2 1 v 873 383 a(\002)p 890 374 V(\001)p 882 383 1 2 v 911 336
+2 1 v 911 345 a(\002)p 927 336 V -1 w(\001)p 920 345 1 2 v
+844 449 a(\020)p 844 494 2 5 v 800 449 5 2 v 882 486 a(\020)p
+882 531 2 5 v 837 486 5 2 v 919 524 a(\020)p 919 569 2 5 v
+874 524 5 2 v 956 561 a(\020)p 956 606 2 5 v 912 561 5 2 v
+844 494 2 1 v 844 503 a(\001)p 837 503 1 2 v 882 531 2 1 v
+882 540 a(\001)p 874 540 1 2 v 919 569 2 1 v 919 578 a(\001)p
+912 578 1 2 v 828 486 a(\003)p 828 494 2 1 v 828 503 a(\002)p
+837 503 1 2 v 837 486 V 865 524 a(\003)p 865 531 2 1 v 865
+540 a(\002)p 874 540 1 2 v 874 524 V 902 561 a(\003)p 902 569
+2 1 v 902 578 a(\002)p 912 578 1 2 v 912 561 V 559 607 83 2
+v 641 689 2 83 v 145 689 a FE(\(v)o(ertexonex,v)o(ertexoney\))p
+641 291 V 145 208 a(\(v)o(ertext)o(w)o(o)o(x,v)o(ert)o(ext)o(w)o(o)n(y\))p
+558 292 83 2 v 957 292 V 1086 291 a(\(v)o(ertexthreex,v)o(ertexthreey\))p
+956 291 2 83 v 957 607 83 2 v 1086 606 a(\(v)o(ertexfourx,v)o(ertexfoury\))p
+956 689 2 83 v 891 448 a(\(v)o(ertexmidx,v)o(ertexmidy\))74
+831 y Fq(3.6)70 b(V)-6 b(ertex)22 b(Line)g(Lengths)74 932 y
+FE(T)l(o)10 b(mak)o(e)g(the)g(analogy)g(b)q(et)o(w)o(een)g
+Fs(n)p FE(dra)o(wline)h(complete,)h(the)e(\014nal)h(parameter)e(to)h(b)q(e)h
+(giv)o(en)f(to)g Fs(n)p FE(dra)o(wv)o(ertex)74 989 y(is)16
+b(the)f Fo(length)f FE(of)h(the)g(particles)h(to)e(b)q(e)i(dra)o(wn.)j(The)c
+(units)h(in)g(whic)o(h)g(the)f(length)h(is)f(giv)o(en)h(v)m(aries)f(in)h(w)o
+(a)o(y)74 1045 y(discussed)k(in)f(section)g(2.6)e(F)l(or)g(gluons)i(the)f
+(length)h(parameter)e(is)i(the)f Fo(numb)n(er)h(of)g(lo)n(ops)p
+FE(.)29 b(The)18 b(actual)74 1101 y(length)d(of)f(eac)o(h)h(lo)q(op)f(dep)q
+(ends)i(up)q(on)f(whic)o(h)h(st)o(yle)e(is)h(selected)h(and)e(whether)h(the)f
+(gluon)h(is)g(dra)o(wn)f(diag-)74 1158 y(onally)g(\(at)f(a)g(slan)o(t\))g(or)
+g(not.)19 b(F)l(or)13 b(photons)g(the)g(unit)h(of)f(measure)h(is)g(not)f(a)g
+(`wiggle',)g(but)h(a)f(`half-wiggle'.)74 1214 y(This)j(enables)g(one)f(to)f
+(pro)q(duce)i(a)f(photon)g(whic)o(h)h(b)q(oth)f(b)q(egins)h(and)f(ends)h(on)f
+(the)g(`up)o(w)o(ard')e(\(or)i(`do)o(wn-)74 1271 y(w)o(ard'\))e(part)g(of)h
+(its)g(oscillation.)21 b(Eac)o(h)14 b(`leg')f(of)h(the)g(v)o(ertex)f(will)j
+(b)q(e)f(dra)o(wn)e(with)h(the)g(requested)h(n)o(um)o(b)q(er)74
+1327 y(of)j(lo)q(ops)g(or)g(half-wiggles.)29 b(If)18 b(a)g(gluon)g(v)o(ertex)
+g(with)g(a)g(di\013eren)o(t)g(n)o(um)o(b)q(er)g(of)g(lo)q(ops)g(on)g(eac)o(h)
+g(leg)g(w)o(ere)74 1384 y(required)g(then)f(the)g(additional)h(lo)q(ops)f(w)o
+(ould)g(b)q(e)h(attac)o(hed)e(subsequen)o(tly)i(to)e(a)h(basic)g(v)o(ertex.)
+24 b(Sp)q(ecial)74 1440 y(features)19 b(are)g(discussed)i(in)f(the)f(next)h
+(c)o(hapter)f(for)g(doing)h(this)f(\()p Fs(n)p FE(v)o(ertexlink)h(and)g
+Fs(n)p FE(v)o(ertexcap\).)31 b(The)74 1497 y(particle)16 b(st)o(yles)g
+(selected)g(will)h(b)q(e)f(discussed)h(in)f(sections)f(3.8)g(and)g(3.9.)145
+1553 y(The)g(follo)o(wing)h(illustrates)g(the)g(length)f(parameter)g(for)f
+(photons:)p 169 2318 2 2 v 169 2344 a Fz(\011)p 144 2344 V
+143 2292 V 143 2318 a(\012)p 169 2318 V 169 2292 a(\013)p 169
+2317 V 195 2292 V 195 2318 a(\010)p 195 2343 V 170 2318 V 195
+2240 V 195 2266 a(\011)p 170 2266 V -102 w(\013)p 143 2291
+V 169 2266 V 169 2214 V 169 2240 a(\012)p 195 2240 V 170 2188
+a(\010)p 170 2213 V 145 2188 V 247 2188 V 247 2214 a(\011)p
+222 2214 V -102 w(\013)p 195 2239 V 221 2214 V 221 2240 a(\010)p
+221 2265 V 196 2240 V 221 2266 V 221 2292 a(\012)p 247 2292
+V 221 2111 V 221 2136 a(\011)p 196 2136 V 169 2162 V 169 2188
+a(\011)p 144 2188 V 169 2136 a(\013)p 169 2161 V 195 2136 V
+195 2085 V 195 2110 a(\012)p 221 2111 V 143 2033 V 143 2059
+a(\012)p 169 2059 V 3 w(\010)p 196 2084 V 171 2059 V 273 2059
+V 273 2084 a(\011)p 248 2084 V -102 w(\013)p 221 2110 V 247
+2084 V 273 2033 a(\013)p 273 2058 V 299 2033 V 247 2111 a(\010)p
+247 2135 V 222 2111 V 299 2162 a(\010)p 299 2187 V 274 2162
+V 247 2136 V -102 w(\012)p 273 2162 V 247 1929 V 247 1955 a(\011)p
+222 1955 V 195 1981 V 195 2007 a(\011)p 170 2007 V 195 1955
+a(\013)p 195 1980 V 221 1955 V 143 2007 a(\013)p 143 2032 V
+169 2007 V 221 1903 V 221 1929 a(\012)p 247 1929 V 169 1851
+V 169 1877 a(\012)p 195 1877 V 3 w(\010)p 222 1902 V 197 1877
+V 170 1825 a(\010)p 170 1850 V 145 1825 V 299 1877 V 299 1903
+a(\011)p 274 1903 V 351 1825 V 351 1851 a(\011)p 326 1851 V
+247 1903 a(\013)p 247 1928 V 273 1903 V 299 1851 a(\013)p 299
+1876 V 324 1851 V 273 1929 a(\010)p 273 1954 V 248 1929 V 325
+1981 a(\010)p 325 2006 V 300 1981 V 273 1955 V -102 w(\012)p
+299 1981 V 325 2007 V 325 2033 a(\012)p 350 2033 V 145 2459
+a FE(whic)o(h)i(w)o(as)e(dra)o(wn)h(with)74 2612 y Fk
+(\\begin{picture}\(18000,18000)o(\))74 2669 y(\\drawvertex\\photon[\\NE)21
+b(4]\(0,0\)[1])74 2725 y(\\drawvertex\\photon[\\NE)g
+(4]\(\\vertextwox,\\vertextwoy)o(\)[2])74 2781 y(\\drawvertex\\photon[\\NE)g
+(4]\(\\vertextwox,\\vertextwoy)o(\)[3])985 2906 y FE(34)p eop
+%%Page: 35 40
+bop 74 -83 a Fk(\\drawvertex\\photon[\\NE)21 b(4]\(\\vertextwox,\\vertextwoy)
+o(\)[4])74 -26 y(\\end{picture})74 127 y FE(In)c(the)f(ab)q(o)o(v)o(e)g
+(example)h(b)q(oth)f Fs(n)p FE(photonlengthx,y)g(and)g Fs(n)p
+FE(particlelengthx,y)h(w)o(ould)g(assume)f(the)g(v)m(alues)74
+183 y(of)f(the)g(last)g(photon)g(actually)h(dra)o(wn)f(\(the)g
+Fs(n)p FE(SE)g(photon)g(with)h(four)f(half-wiggles\).)74 325
+y Fq(3.7)70 b(Flipp)r(ed)21 b(V)-6 b(ertices)74 427 y Fs(n)p
+FE(dra)o(wline)18 b(dra)o(ws)f(the)g(v)o(ertices)h(in)g(a)f(standard)g
+(con\014guration.)26 b(F)l(or)17 b(four-particle)h(v)o(ertices)g(all)g(of)f
+(the)74 483 y(lines)i(commence)f(from)f(the)g(h)o(ub)h(in)g(a)f(clo)q(c)o
+(kwise)i(orien)o(tation.)26 b(F)l(or)17 b(three-particle)h(v)o(ertices)g
+(lines)h(one)74 539 y(and)d(t)o(w)o(o)e(b)q(egin)j(in)f(a)g(clo)q(c)o(kwise)g
+(curv)m(ature)g(and)g(line)h(three)f(in)g(a)f(coun)o(ter-clo)q(c)o(kwise)i
+(sense.)22 b(It)15 b(is)h(often)74 596 y(v)o(ery)e(con)o(v)o(enien)o(t,)h
+(particularly)g(when)g(linking)i(v)o(ertices)d(directly)i(together,)d(to)h(b)
+q(e)h(able)g(to)f(dra)o(w)f(one)i(or)74 652 y(more)f(lines)h(in)g(a)e
+Fs(n)p Fo(\015ipp)n(e)n(d)g FE(con\014guration,)h(that)f(is)i(\015ipp)q(ed)g
+(ab)q(out)f(its)g(axis.)20 b(Ob)o(viously)15 b(this)f(will)i(usually)74
+709 y(result)d(in)g(an)f(\032sthetically)h(unpleasing)h(v)o(ertex.)k
+Fp(FEYNMAN)13 b FE(admits)f(a)f(few)h(more-or-less)g(app)q(ealing)74
+765 y(\015ipp)q(ed)17 b(v)o(ertices)f(to)e(b)q(e)i(dra)o(wn)f(using)h(the)f
+Fk(\\flipvertex)f FE(command.)145 822 y(When)i Fk(\\flipvertex)f
+FE(app)q(ears)h(directly)h(prior)f(to)f(a)h Fs(n)p FE(dra)o(wv)o(ertex)f
+(statemen)o(t)g(certain)h(of)f(the)i(lines)74 878 y(will)g(b)q(e)f(dra)o(wn)f
+(\015ipp)q(ed)j(with)e(resp)q(ect)g(to)f(the)g(default.)21
+b(F)l(or)15 b(four-particle)i(v)o(ertices)f Fo(al)r(l)f FE(of)g(the)g(lines)i
+(are)74 935 y(\015ipp)q(ed.)31 b(F)l(or)17 b(three-particle)j(v)o(ertices)e
+(only)h Fo(line)f(one)g FE(will)h(b)q(e)g(\015ipp)q(ed.)31
+b(Other)18 b(com)o(bination)h(ma)o(y)e(b)q(e)74 991 y(dra)o(wn)e(using)h
+Fs(n)p FE(dra)o(wline.)145 1048 y(The)f(follo)o(wing)h(\014le)g(illustrates)h
+Fs(n)p FE(\015ip)o(v)o(ertex)e(at)f(w)o(ork:)74 1201 y Fk
+(\\begin{picture}\(28000,28000)o(\))74 1257 y(\\drawvertex\\gluon[\\NE)21
+b(4]\(0,19000\)[3])74 1314 y(\\drawline\\fermion[\\W\\REG]\(\\)o(vertexon)o
+(ex,\\ver)o(texoney)o(\)[2000])74 1370 y(\\drawline\\fermion[\\S\\REG]\(\\)o
+(vertexon)o(ex,\\ver)o(texoney)o(\)[2000])74 1427 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(vertextw)o(ox,\\ver)o(textwoy)o
+(\)[2000])74 1483 y(\\drawline\\fermion[\\W\\REG]\(\\)o(vertextw)o(ox,\\ver)o
+(textwoy)o(\)[2000])74 1539 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexth)o
+(reex,\\v)o(ertexth)o(reey\)[20)o(00])74 1596 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexth)o(reex,\\v)o(ertexth)o
+(reey\)[20)o(00])74 1652 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexfo)o
+(urx,\\ve)o(rtexfou)o(ry\)[2000)o(])74 1709 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(vertexfo)o(urx,\\ve)o(rtexfou)o
+(ry\)[2000)o(])74 1822 y(\\flipvertex\\drawvertex\\gluo)o(n[\\NE)g
+(4]\(18000,19000\)[3])74 1878 y(\\drawline\\fermion[\\W\\REG]\(\\)o(vertexon)
+o(ex,\\ver)o(texoney)o(\)[2000])74 1935 y(\\drawline\\fermion[\\S\\REG]\(\\)o
+(vertexon)o(ex,\\ver)o(texoney)o(\)[2000])74 1991 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(vertextw)o(ox,\\ver)o(textwoy)o
+(\)[2000])74 2048 y(\\drawline\\fermion[\\W\\REG]\(\\)o(vertextw)o(ox,\\ver)o
+(textwoy)o(\)[2000])74 2104 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexth)o
+(reex,\\v)o(ertexth)o(reey\)[20)o(00])74 2160 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexth)o(reex,\\v)o(ertexth)o
+(reey\)[20)o(00])74 2217 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexfo)o
+(urx,\\ve)o(rtexfou)o(ry\)[2000)o(])74 2273 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(vertexfo)o(urx,\\ve)o(rtexfou)o
+(ry\)[2000)o(])74 2386 y(\\THICKLINES)74 2499 y(\\drawvertex\\photon[\\SE)g
+(3]\(0,8000\)[5])74 2556 y(\\drawline\\fermion[\\W\\REG]\(\\)o(vertexon)o
+(ex,\\ver)o(texoney)o(\)[2000])74 2612 y(\\drawline\\fermion[\\N\\REG]\(\\)o
+(vertexon)o(ex,\\ver)o(texoney)o(\)[2000])74 2669 y
+(\\drawline\\fermion[\\NE\\REG]\()o(\\vertext)o(wox,\\ve)o(rtextwo)o
+(y\)[2000])74 2725 y(\\drawline\\fermion[\\SE\\REG]\()o(\\vertext)o(wox,\\ve)
+o(rtextwo)o(y\)[2000])74 2781 y(\\drawline\\fermion[\\SW\\REG]\()o(\\vertext)
+o(hreex,\\)o(vertext)o(hreey\)[2)o(000])985 2906 y FE(35)p
+eop
+%%Page: 36 41
+bop 74 -83 a Fk(\\drawline\\fermion[\\SE\\REG]\()o(\\vertext)o(hreex,\\)o
+(vertext)o(hreey\)[2)o(000])74 30 y(\\flipvertex\\drawvertex\\phot)o(on[\\SE)
+21 b(3]\(18000,8000\)[5])74 87 y(\\drawline\\fermion[\\W\\REG]\(\\)o
+(vertexon)o(ex,\\ver)o(texoney)o(\)[2000])74 143 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexon)o(ex,\\ver)o(texoney)o
+(\)[2000])74 199 y(\\drawline\\fermion[\\NE\\REG]\()o(\\vertext)o(wox,\\ve)o
+(rtextwo)o(y\)[2000])74 256 y(\\drawline\\fermion[\\SE\\REG]\()o(\\vertext)o
+(wox,\\ve)o(rtextwo)o(y\)[2000])74 312 y(\\drawline\\fermion[\\SW\\REG]\()o
+(\\vertext)o(hreex,\\)o(vertext)o(hreey\)[2)o(000])74 369 y
+(\\drawline\\fermion[\\SE\\REG]\()o(\\vertext)o(hreex,\\)o(vertext)o
+(hreey\)[2)o(000])74 482 y(\\end{picture})74 644 y FE(whic)o(h)16
+b(w)o(ould)g(dra)o(w:)p 616 1018 2 5 v 616 1061 a Fz(\021)p
+571 1061 5 2 v 578 1056 2 5 v 578 1098 a(\021)p 534 1098 5
+2 v 541 1093 2 5 v 541 1135 a(\021)p 496 1135 5 2 v 504 1130
+2 5 v 504 1173 a(\021)p 459 1173 5 2 v 562 1052 2 1 v 562 1061
+a(\002)p 571 1061 1 2 v 525 1089 2 1 v 525 1098 a(\002)p 534
+1098 1 2 v 487 1126 2 1 v 487 1136 a(\002)p 496 1136 1 2 v
+562 1044 a(\003)p 562 1051 2 1 v(\000)p 579 1051 V 571 1044
+1 2 v 525 1082 a(\003)p 525 1089 2 1 v -1 w(\000)p 541 1089
+V 534 1082 1 2 v 487 1119 a(\003)p 487 1126 2 1 v(\000)p 504
+1126 V 496 1119 1 2 v 570 973 2 5 v 570 1015 a(\022)p 613 1015
+5 2 v 533 935 2 5 v 533 978 a(\022)p 575 978 5 2 v 496 898
+2 5 v 496 940 a(\022)p 538 940 5 2 v 458 861 2 5 v 458 903
+a(\022)p 501 903 5 2 v 570 961 a(\003)p 570 968 2 1 v 579 961
+1 2 v 533 924 a(\003)p 533 931 2 1 v 542 924 1 2 v 495 887
+a(\003)p 495 894 2 1 v 505 887 1 2 v 587 961 a(\000)p 587 969
+2 1 v 587 978 a(\001)p 579 978 1 2 v 579 961 V 549 924 a(\000)p
+549 931 2 1 v 549 941 a(\001)p 542 941 1 2 v 542 924 V 512
+887 a(\000)p 512 894 2 1 v 512 903 a(\001)p 505 903 1 2 v 505
+887 V 616 970 a(\023)p 616 1014 2 5 v 658 970 5 2 v 653 932
+a(\023)p 653 977 2 5 v 696 932 5 2 v 691 895 a(\023)p 691 940
+2 5 v 733 895 5 2 v 728 858 a(\023)p 728 902 2 5 v 770 858
+5 2 v 670 970 a(\000)p 670 977 2 1 v 662 970 1 2 v 707 932
+a(\000)p 707 939 2 1 v 700 932 1 2 v 744 895 a(\000)p 744 902
+2 1 v 737 895 1 2 v 653 977 2 1 v 653 986 a(\002)p 670 977
+V(\001)p 662 986 1 2 v 690 940 2 1 v 690 949 a(\002)p 707 940
+V(\001)p 700 949 1 2 v 728 902 2 1 v 728 911 a(\002)p 744 902
+V -1 w(\001)p 737 911 1 2 v 661 1015 a(\020)p 661 1060 2 5
+v 617 1015 5 2 v 699 1053 a(\020)p 699 1097 2 5 v 654 1053
+5 2 v 736 1090 a(\020)p 736 1135 2 5 v 691 1090 5 2 v 773 1127
+a(\020)p 773 1172 2 5 v 729 1127 5 2 v 661 1060 2 1 v 661 1069
+a(\001)p 654 1069 1 2 v 699 1097 2 1 v 699 1106 a(\001)p 691
+1106 1 2 v 736 1135 2 1 v 736 1144 a(\001)p 729 1144 1 2 v
+645 1052 a(\003)p 645 1060 2 1 v 645 1069 a(\002)p 654 1069
+1 2 v 654 1052 V 682 1090 a(\003)p 682 1097 2 1 v 682 1106
+a(\002)p 691 1106 1 2 v 691 1090 V 720 1127 a(\003)p 720 1135
+2 1 v 720 1144 a(\002)p 729 1144 1 2 v 729 1127 V 376 1173
+83 2 v 458 1255 2 83 v 458 857 V 376 858 83 2 v 774 858 V 773
+857 2 83 v 774 1173 83 2 v 773 1255 2 83 v 1317 1015 a(\023)p
+1317 1059 2 5 v 1360 1015 5 2 v 1280 1052 a(\023)p 1280 1097
+2 5 v 1322 1052 5 2 v 1243 1089 a(\023)p 1243 1134 2 5 v 1285
+1089 5 2 v 1205 1127 a(\023)p 1205 1171 2 5 v 1248 1127 5 2
+v 1317 1059 2 1 v 1317 1069 a(\002)p 1326 1069 1 2 v 1280 1097
+2 1 v 1280 1106 a(\002)p 1289 1106 1 2 v 1242 1134 2 1 v 1242
+1143 a(\002)p 1252 1143 1 2 v 1334 1052 a(\000)p 1334 1059
+2 1 v 1334 1069 a(\001)p 1326 1069 1 2 v 1326 1052 V 1296 1089
+a(\000)p 1296 1097 2 1 v 1296 1106 a(\001)p 1289 1106 1 2 v
+1289 1089 V 1259 1127 a(\000)p 1259 1134 2 1 v 1259 1143 a(\001)p
+1252 1143 1 2 v 1252 1127 V 1363 969 a(\020)p 1363 1014 2 5
+v 1318 969 5 2 v 1326 932 a(\020)p 1326 977 2 5 v 1281 932
+5 2 v 1288 895 a(\020)p 1288 939 2 5 v 1244 895 5 2 v 1251
+857 a(\020)p 1251 902 2 5 v 1206 857 5 2 v 1309 969 a(\003)p
+1309 976 2 1 v 1318 969 1 2 v 1272 932 a(\003)p 1272 939 2
+1 v 1281 932 1 2 v 1234 895 a(\003)p 1234 902 2 1 v 1244 895
+1 2 v 1309 977 2 1 v 1309 986 a(\002)p 1326 977 V(\001)p 1318
+986 1 2 v 1272 939 2 1 v 1272 949 a(\002)p 1288 939 V -1 w(\001)p
+1281 949 1 2 v 1234 902 2 1 v 1234 911 a(\002)p 1251 902 V(\001)p
+1244 911 1 2 v 1410 972 2 5 v 1410 1015 a(\021)p 1365 1015
+5 2 v 1447 935 2 5 v 1447 977 a(\021)p 1402 977 5 2 v 1485
+898 2 5 v 1485 940 a(\021)p 1440 940 5 2 v 1522 860 2 5 v 1522
+903 a(\021)p 1477 903 5 2 v 1410 961 a(\000)p 1410 968 2 1
+v 1402 961 1 2 v 1447 923 a(\000)p 1447 930 2 1 v 1440 923
+1 2 v 1485 886 a(\000)p 1485 893 2 1 v 1477 886 1 2 v 1393
+961 a(\003)p 1393 968 2 1 v 1393 977 a(\002)p 1402 977 1 2
+v 1402 961 V 1431 923 a(\003)p 1431 931 2 1 v 1431 940 a(\002)p
+1440 940 1 2 v 1440 923 V 1468 886 a(\003)p 1468 894 2 1 v
+1468 903 a(\002)p 1477 903 1 2 v 1477 886 V 1363 1018 2 5 v
+1363 1060 a(\022)p 1405 1060 5 2 v 1400 1055 2 5 v 1400 1097
+a(\022)p 1443 1097 5 2 v 1438 1092 2 5 v 1438 1135 a(\022)p
+1480 1135 5 2 v 1475 1130 2 5 v 1475 1172 a(\022)p 1517 1172
+5 2 v 1417 1051 2 1 v 1417 1060 a(\001)p 1410 1060 1 2 v 1454
+1088 2 1 v 1454 1097 a(\001)p 1447 1097 1 2 v 1492 1126 2 1
+v 1492 1135 a(\001)p 1484 1135 1 2 v 1400 1043 a(\003)p 1400
+1050 2 1 v(\000)p 1417 1050 V 1409 1043 1 2 v 1438 1081 a(\003)p
+1438 1088 2 1 v -1 w(\000)p 1454 1088 V 1447 1081 1 2 v 1475
+1118 a(\003)p 1475 1125 2 1 v(\000)p 1492 1125 V 1484 1118
+1 2 v 1123 1173 83 2 v 1205 1255 2 83 v 1205 857 V 1123 858
+83 2 v 1522 859 V 1522 858 2 83 v 1520 1172 83 2 v 1519 1254
+2 83 v 574 1749 4 5 v 574 1775 a Fh(\012)p 600 1776 5 4 v 515
+1691 4 5 v 515 1717 a(\012)p 542 1717 5 4 v 457 1633 4 5 v
+457 1659 a(\012)p 484 1659 5 4 v 574 1717 a(\010)p 574 1745
+4 5 v 546 1717 5 4 v 515 1659 a(\010)p 515 1686 4 5 v 488 1659
+5 4 v 601 1779 a Fg(_)34 b(_)g(_)642 1789 y(^)g(^)601 1780
+y(_)g(_)g(_)642 1791 y(^)g(^)593 1800 y FA(\()593 1883 y(\()593
+1966 y(\()603 1842 y(\))603 1925 y(\))p 376 1630 83 4 v 457
+1628 4 83 v 812 1774 a Ff(\000)829 1756 y(\000)812 1815 y(@)829
+1832 y(@)564 2019 y(\000)546 2036 y(\000)605 2019 y(@)622 2036
+y(@)1349 1746 y Fh(\010)p 1349 1774 4 5 v 1322 1746 5 4 v 1291
+1688 a(\010)p 1291 1715 4 5 v 1264 1688 5 4 v 1233 1630 a(\010)p
+1233 1657 4 5 v 1206 1630 5 4 v 1291 1720 4 5 v 1291 1746 a(\012)p
+1318 1746 5 4 v 1233 1662 4 5 v 1233 1688 a(\012)p 1260 1688
+5 4 v 1347 1779 a Fg(_)h(_)f(_)1389 1789 y(^)g(^)1347 1780
+y(_)h(_)f(_)1389 1791 y(^)g(^)1340 1800 y FA(\()1340 1883 y(\()1340
+1966 y(\()1349 1842 y(\))1349 1925 y(\))p 1123 1630 83 4 v
+1204 1628 4 83 v 1559 1774 a Ff(\000)1576 1756 y(\000)1559
+1815 y(@)1576 1832 y(@)1310 2019 y(\000)1293 2036 y(\000)1352
+2019 y(@)1369 2036 y(@)145 2257 y Fs(n)p FE(\015ip)o(v)o(ertex)16
+b(ma)o(y)f(b)q(e)i(used)f(with)g(an)o(y)g(other)g(options,)f(suc)o(h)i(as)e
+Fs(n)p FE(THICKLINES,)i(as)f(demonstrated)74 2313 y(ab)q(o)o(v)o(e,)f(and)g
+(features)g(y)o(et)g(to)f(b)q(e)i(presen)o(ted)g(\()p Fs(n)p
+FE(linkv)o(ertices,)g Fs(n)p FE(v)o(ertexcap)e Fo(etc.)i FE(\).)985
+2906 y(36)p eop
+%%Page: 37 42
+bop 74 -83 a Fq(3.8)70 b(Photon)23 b(V)-6 b(ertices)74 20 y
+Fp(3.8.1)55 b(The)19 b(Anatom)n(y)f(of)g(a)h(Photon)g(V)-5
+b(ertex)74 106 y FE(All)12 b(four-photon)f(v)o(ertices)g(dra)o(wn)f(b)o(y)h
+(the)g Fs(n)p FE(dra)o(wv)o(ertex)e(command)i(use)g(photons)g(dra)o(wn)f(in)i
+(either)f Fs(n)p FE(REG)74 163 y(or)f Fs(n)p FE(FLIPPED)g(st)o(yles.)18
+b(F)l(or)9 b(three-photon)i(v)o(ertices)f(diagonal)h(lines)h(are)d
+Fs(n)p FE(CURL)l(Y)i(or)f Fs(n)p FE(FLIPPEDCURL)l(Y.)74 219
+y(The)16 b(format)d(for)i(dra)o(wing)g(a)g(photon)g(v)o(ertex)g(with)g
+Fs(n)p FE(dra)o(wv)o(ertex)f(is:)74 369 y Fk(\\drawvertex\\photon[<directi)o
+(on)21 b(of)j(photon)f(one><number)f(of)i(photons>])241 426
+y(<\(x,y\),)f(the)h(co-ordinates)e(of)h(the)h(beginning)e(of)i(the)g(photon)f
+(one>)241 482 y([<number)g(of)h(half-wiggles)e(in)h(each)h(photon)f(line>])74
+632 y FE(The)15 b(reason)f(for)f(sp)q(ecifying)k(the)d(n)o(um)o(b)q(er)h(of)f
+Fo(half)p FE(-wiggles)h(is)g(that)e(it)i(is)g(sometimes)f(con)o(v)o(enien)o
+(t)h(to)f(ha)o(v)o(e)74 689 y(a)h(line)i(b)q(egin)f(and)g(end)g(in)g(either)g
+(orien)o(tation)f(\(see)g(section)h(2.6.1)d(for)i(an)g(example)h(of)f
+(this\).)145 745 y(Photonic)20 b(v)o(ertices)h(ma)o(y)e(b)q(e)i(dra)o(wn)f
+(in)h(an)o(y)f(of)g(the)g(eigh)o(t)h(compass)f(directions.)36
+b(If)20 b(em)o(b)q(oldened)74 802 y(photons)13 b(are)g(desired)i(then)e
+Fs(n)p FE(THICKLINES,)i(as)e(opp)q(osed)g(to)g Fs(n)p FE(thic)o(klines,)i
+(should)g(b)q(e)f(used.)19 b(When)14 b(the)74 858 y(do)q(cumen)o(t)i(is)f
+([12pt])f(the)i Fs(n)p FE(bigphotons)f(statemen)o(t)f(m)o(ust)h(b)q(e)g(used)
+h(\(as)f(discussed)h(in)g(section)g(2.9.2\).)145 915 y(The)f(follo)o(wing)h
+(parameters)e(are)h(returned)h(b)o(y)f Fs(n)p FE(dra)o(wv)o(ertex)p
+Fs(n)p FE(photon:)74 1077 y Fk(\\photonfrontx,\\photonfronty)o(:)69
+b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)h(front)f(of)h(the)f(last)g
+(line.)74 1134 y(\\photonbackx,\\photonbacky:)116 b(The)23
+b(\(x,y\))h(co-ordinates)e(of)h(the)h(back)f(of)h(the)f(last)h(line.)74
+1190 y(\\photonlengthx,\\photonlengt)o(hy:)d(The)i(\(x,y\))h(extent)f(of)g
+(the)h(last)f(line.)74 1247 y(\\photoncount:)428 b(The)23 b(number)g(of)h
+(photons)f(printed)g(thus)g(far.)74 1303 y(\\pfrontx,\\pfronty:)308
+b(The)23 b(\(x,y\))h(co-ords)e(of)i(the)g(front)f(of)g(the)h(last)f(line.)74
+1360 y(\\pmidx,\\pmidy:)404 b(The)23 b(\(x,y\))h(co-ords)e(of)i(the)g(middle)
+f(of)g(the)h(last)f(line.)74 1416 y(\\pbackx,\\pbacky:)356
+b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)h(back)f(of)h(the)f(last)h
+(line.)74 1473 y(\\plengthx,\\plengthy:)260 b(The)23 b(\(x,y\))h(extent)f(of)
+g(the)h(line.)74 1529 y(\\vertexonex,\\vertexoney:)164 b(The)23
+b(\(x,y\))h(co-ordinates)e(of)h(the)h(back)f(of)h(line)f(one.)74
+1586 y(\\vertextwox,\\vertextwoy:)164 b(The)23 b(\(x,y\))h(co-ordinates)e(of)
+h(the)h(back)f(of)h(line)f(two.)74 1642 y(\\vertexthreex,\\vertexthreey)o(:)
+69 b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)h(back)f(of)h(line)f(three.)
+74 1698 y(\\vertexfourx,\\vertexfoury:)116 b(The)23 b(\(x,y\))h(co-ordinates)
+e(of)h(the)h(back)f(of)h(line)f(four.)74 1755 y(\\vertexmidx,\\vertexmidy:)
+164 b(The)23 b(\(x,y\))h(co-ordinates)e(of)h(the)h(middle)f(of)g(the)h
+(vertex.)74 1811 y(\\vertexcount:)428 b(The)23 b(number)g(of)h(vertices)f
+(printed)g(thus)g(far.)74 1990 y Fp(3.8.2)55 b(Examples)17
+b(and)i(Details)74 2075 y FE(The)i(follo)o(wing)g(example)g(illustrates)g
+(that)e(v)o(ertices)i(need)g(not)f(only)h(represen)o(t)f(branc)o(hings)h(but)
+f(also)74 2132 y(crossed)15 b(lines.)74 2282 y Fk
+(\\begin{picture}\(22000,22000)o(\))74 2339 y
+(\\drawline\\fermion[\\NE\\REG]\()o(0,0\)[600)o(0])74 2395
+y(\\drawvertex\\photon[\\NE)21 b(4]\(\\pbackx,\\pbacky\)[7])74
+2451 y(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexon)o(ex,\\ver)o(texoney)o
+(\)[\\photo)o(nlength)o(x])74 2508 y(\\drawline\\fermion[\\N\\REG]\(\\)o
+(fermionb)o(ackx,\\f)o(ermionb)o(acky\)[\\p)o(lengthy)o(])74
+2564 y(\\drawline\\fermion[\\NW\\REG]\()o(\\vertext)o(wox,\\ve)o(rtextwo)o
+(y\)[6000])74 2621 y(\\end{picture})985 2906 y FE(37)p eop
+%%Page: 38 43
+bop 74 -83 a FE(Pro)q(ducing)444 1293 y Fy(\000)486 1251 y(\000)527
+1210 y(\000)569 1168 y(\000)578 1158 y(\000)p 801 936 2 2 v
+801 962 a Fz(\011)p 776 962 V 749 988 V 749 1014 a(\011)p 724
+1014 V 697 1040 V 697 1066 a(\011)p 672 1066 V 645 1092 V 645
+1118 a(\011)p 620 1118 V 749 962 a(\013)p 749 987 V 775 962
+V 697 1014 a(\013)p 697 1039 V 723 1014 V 645 1066 a(\013)p
+645 1091 V 671 1066 V 775 910 V 775 936 a(\012)p 800 936 V
+723 859 V 723 884 a(\012)p 749 884 V 671 807 V 671 833 a(\012)p
+697 833 V 619 755 V 619 781 a(\012)p 645 781 V 776 884 a(\010)p
+776 909 V 751 884 V 724 833 a(\010)p 724 858 V 699 833 V 672
+781 a(\010)p 672 806 V 647 781 V 853 885 V 853 910 a(\011)p
+827 910 V 904 833 V 904 858 a(\011)p 879 858 V 956 781 V 956
+807 a(\011)p 931 807 V 801 910 a(\013)p 801 935 V 826 910 V
+853 858 a(\013)p 853 884 V 878 858 V 904 807 a(\013)p 904 832
+V 930 807 V 956 755 a(\013)p 956 780 V 982 755 V 827 936 a(\010)p
+827 961 V 802 936 V 878 988 a(\010)p 878 1013 V 853 988 V 930
+1040 a(\010)p 930 1065 V 905 1040 V 982 1092 a(\010)p 982 1117
+V 957 1092 V 827 962 V 827 988 a(\012)p 852 988 V 878 1014
+V 878 1040 a(\012)p 904 1040 V 930 1066 V 930 1092 a(\012)p
+956 1092 V 619 1117 2 183 v 619 935 V 578 754 a Fy(@)537 712
+y(@)495 671 y(@)454 629 y(@)444 619 y(@)145 1424 y FE(A)14
+b(couple)h(of)f(items)g(ma)o(y)g(b)q(e)g(noted.)20 b(In)15
+b(order)f(to)f(dra)o(w)h(the)g(connecting)h(fermion)f(line)i(w)o(e'v)o(e)e
+(dra)o(wn)74 1481 y(it)h(in)g(t)o(w)o(o)e(stages.)19 b(W)l(e)14
+b(kno)o(w)g(that)g Fs(n)p FE(photonlengthx)g(will)i(return)f(the)f(horizon)o
+(tal)h(length)g(of)f(line)i(four)e(of)74 1537 y(the)f(four-photon)f(v)o
+(ertex.)19 b(Since)14 b(line)g(one)e(is)h(the)g(one)g(radiating)g(from)e(the)
+i(cen)o(tre)g(in)g(the)g Fs(n)p FE(SW)f(direction)74 1594 y(\(since)i(it)f(w)
+o(as)f(dra)o(wn)h Fo(to)g FE(the)g(cen)o(tre)g(of)g(the)g(v)o(ertex)g(in)h
+(the)f Fs(n)p FE(NE)f(direction\))i(w)o(e)f(coun)o(t)g(around)g(clo)q(c)o
+(kwise)74 1650 y(to)j(the)g(fourth)g(line)i(b)q(eing)f(in)g(the)f
+Fs(n)p FE(SE)h(direction.)24 b(Since)17 b(the)g(picture)g(is)g(symmetric)f
+(the)g(`x')g(exten)o(t)g(of)74 1707 y(line)h(four)e(is)h(equal)g(to)f(the)g
+(`y')g(exten)o(t)g(of)g(lines)i(one)e(and)h(t)o(w)o(o.)j(Therefore)c(to)f
+(connect)i(the)g(ends)g(of)f(lines)74 1763 y(one)e(and)g(t)o(w)o(o)e(w)o(e)h
+(need)i(to)e(dra)o(w)g(a)g(fermion)h(of)f(that)g(length)h(t)o(wice.)20
+b(In)13 b(the)g(second)g Fs(n)p FE(dra)o(wline)g(statemen)o(t)74
+1820 y(w)o(e)i(use)h Fs(n)p FE(plength)o(y)f(so)g(that)g(it)g(is)h(the)f
+(same)g(length)h(as)f(the)g(previous)h(line.)31 b(If,)15 b(instead,)h(w)o
+(e'd)f(w)o(an)o(ted)559 2753 y Fy(\000)600 2712 y(\000)642
+2670 y(\000)683 2628 y(\000)693 2619 y(\000)p 915 2397 4 2
+v 915 2423 a Fh(\011)p 890 2423 2 4 v 863 2448 4 2 v 863 2475
+a(\011)p 839 2475 2 4 v 811 2500 4 2 v 811 2527 a(\011)p 787
+2527 2 4 v 759 2552 4 2 v 759 2579 a(\011)p 735 2579 2 4 v
+863 2423 a(\013)p 863 2447 4 2 v 889 2423 2 4 v 811 2475 a(\013)p
+811 2499 4 2 v 838 2475 2 4 v 759 2527 a(\013)p 759 2551 4
+2 v 786 2527 2 4 v 889 2371 4 2 v 889 2397 a(\012)p 915 2398
+2 4 v 837 2319 4 2 v 837 2345 a(\012)p 864 2345 2 4 v 785 2267
+4 2 v 785 2293 a(\012)p 812 2293 2 4 v 733 2215 4 2 v 733 2242
+a(\012)p 760 2242 2 4 v 890 2345 a(\010)p 890 2370 4 2 v 866
+2345 2 4 v 838 2293 a(\010)p 838 2318 4 2 v 814 2293 2 4 v
+786 2242 a(\010)p 786 2266 4 2 v 762 2242 2 4 v 967 2345 4
+2 v 967 2371 a(\011)p 942 2371 2 4 v 1018 2293 4 2 v 1018 2319
+a(\011)p 994 2319 2 4 v 1070 2241 4 2 v 1070 2268 a(\011)p
+1046 2268 2 4 v 915 2371 a(\013)p 915 2396 4 2 v 941 2371 2
+4 v 967 2319 a(\013)p 967 2344 4 2 v 993 2319 2 4 v 1018 2268
+a(\013)p 1018 2292 4 2 v 1045 2268 2 4 v 1070 2216 a(\013)p
+1070 2240 4 2 v 1097 2216 2 4 v 941 2398 a(\010)p 941 2421
+4 2 v 916 2398 2 4 v 993 2449 a(\010)p 993 2473 4 2 v 968 2449
+2 4 v 1044 2501 a(\010)p 1044 2525 4 2 v 1020 2501 2 4 v 1096
+2553 a(\010)p 1096 2577 4 2 v 1072 2553 2 4 v 941 2422 4 2
+v 941 2449 a(\012)p 967 2449 2 4 v 993 2474 4 2 v 993 2501
+a(\012)p 1019 2501 2 4 v 1044 2526 4 2 v 1044 2553 a(\012)p
+1071 2553 2 4 v 734 2577 2 183 v 734 2395 V 693 2214 a Fy(@)652
+2172 y(@)610 2131 y(@)569 2089 y(@)559 2080 y(@)1184 2100 y
+Fh(\013)p 1184 2127 4 5 v 1210 2100 5 4 v 1126 2158 a(\013)p
+1126 2185 4 5 v 1152 2158 5 4 v 1184 2131 4 5 v 8 w(\011)p
+1156 2158 5 4 v 1126 2189 4 5 v 1126 2216 a(\011)p 1098 2216
+5 4 v 1205 2091 a FA(\()1205 2008 y(\()1215 2050 y(\))1215
+1967 y(\))1211 2114 y Fg(^)34 b(^)1252 2104 y(_)h(_)1211 2116
+y(^)f(^)1252 2106 y(_)h(_)1213 2666 y Fh(\010)p 1213 2693 4
+5 v 1186 2666 5 4 v 1155 2608 a(\010)p 1155 2635 4 5 v 1127
+2608 5 4 v 1155 2639 4 5 v 1155 2666 a(\012)p 1181 2666 5 4
+v 1097 2581 4 5 v 1097 2608 a(\012)p 1123 2608 5 4 v 1211 2698
+a Fg(_)f(_)1253 2709 y(^)g(^)1211 2700 y(_)g(_)1253 2711 y(^)g(^)1203
+2720 y FA(\()1203 2803 y(\()1213 2761 y(\))1213 2844 y(\))985
+2906 y FE(38)p eop
+%%Page: 39 44
+bop 76 -83 a FE(w)o(e'd)14 b(ha)o(v)o(e)h(added)74 67 y Fk
+(\\THICKLINES\\flipvertex\\draw)o(vertex\\p)o(hoton[\\)o(NE)21
+b(3]\(\\vertexthreex,\\vertexth)o(reey\)[4])74 124 y
+(\\flipvertex\\drawvertex\\phot)o(on[\\SE)g(3]\(\\vertexfourx,\\vertex)o
+(foury\)[)o(4])74 274 y FE(and)c(put)g(a)g Fk(\\THICKLINES)e
+FE(mo)q(di\014er)j(b)q(efore)f(the)g(\014rst)f Fs(n)p FE(dra)o(wv)o(ertex)g
+(and)h(a)f Fk(\\THINLINES)g FE(follo)o(wing)h(it.)74 331 y(Note)f(ho)o(w)g(w)
+o(e)f(had)i(to)e(use)i Fs(n)p FE(\015ip)o(v)o(ertex)f(in)h(order)f(to)f(mak)o
+(e)h(the)g(sets)g(of)g(v)o(ertices)g(connect)h(prop)q(erly)l(.)23
+b(In)74 387 y(p)q(oin)o(t)18 b(of)f(fact)g(the)g(ab)q(o)o(v)o(e)g(pictures)h
+(are)f(\015a)o(w)o(ed)g(since)i(the)e(t)o(w)o(o)f(fermion-fermion-photon)j(v)
+o(ertices)e(are)74 444 y(not)12 b(symmetric.)19 b(In)13 b(this)g(instance)h
+(it)e(w)o(ould)h(b)q(e)g(more)f(appropriate)h(to)f(dra)o(w)f(t)o(w)o(o)h
+(long)g(photons)g(instead)74 500 y(of)j(a)g(v)o(ertex.)145
+556 y(Photonic)h(v)o(ertices)h(ma)o(y)f(also)g(b)q(e)h Fo(stemme)n(d)p
+FE(,)f(as)g(will)i(b)q(e)e(discussed)i(in)f(the)g(next)f(c)o(hapter)g(\(ho)o
+(w)o(ev)o(er)74 613 y(see)h(section)h(2.9)e(for)h(an)g(example)g(of)g
+(stemmed)g(photons\).)25 b(Finally)18 b(w)o(e)f(p)q(oin)o(t)h(out,)e(in)i
+(the)f(form)g(of)f(an)74 669 y(exercise,)g(that)e(b)q(eing)j(able)f(to)e(pro)
+q(duce)i(photons)f(with)h(an)f(o)q(dd)g(n)o(um)o(b)q(er)h(of)e(half-wiggles)j
+(again)e(has)g(its)74 726 y(uses.)145 932 y(Exercise:)20 b(Dra)o(w)12
+b(the)h(follo)o(wing)h(using)h Fs(n)p FE(dra)o(wv)o(ertex.)j(Ho)o(w)12
+b(could)j(y)o(ou)e(replace)h(the)g(fermion)g(on)f(the)74 989
+y(righ)o(t)i(b)o(y)g(a)g(scalar?)456 1407 y Fg(_)35 b(_)f(_)g(_)498
+1417 y(^)g(^)g(^)418 1401 y Fy(@)377 1359 y(@)343 1325 y(@)418
+1442 y(\000)377 1484 y(\000)343 1518 y(\000)956 1407 y Fg(_)-132
+b(_)g(_)997 1417 y(^)g(^)g(^)g(^)p 1099 1347 2 5 v 1099 1372
+a Fz(\011)p 1071 1372 5 2 v 1157 1289 2 5 v 1157 1314 a(\011)p
+1129 1314 5 2 v 1215 1231 2 5 v 1215 1256 a(\011)p 1187 1256
+5 2 v 1041 1372 a(\013)p 1041 1401 2 5 v 1066 1372 5 2 v 1099
+1314 a(\013)p 1099 1343 2 5 v 1125 1314 5 2 v 1157 1256 a(\013)p
+1157 1284 2 5 v 1183 1256 5 2 v 1215 1198 a(\013)p 1215 1226
+2 5 v 1241 1198 5 2 v 1041 1405 2 5 v 1041 1431 a(\012)p 1066
+1431 5 2 v 1099 1463 2 5 v 1099 1489 a(\012)p 1125 1489 5 2
+v 1157 1521 2 5 v 1157 1547 a(\012)p 1183 1547 5 2 v 1215 1579
+2 5 v 1215 1605 a(\012)p 1241 1605 5 2 v 1099 1431 a(\010)p
+1099 1459 2 5 v 1071 1431 5 2 v 1157 1489 a(\010)p 1157 1517
+2 5 v 1129 1489 5 2 v 1215 1547 a(\010)p 1215 1575 2 5 v 1187
+1547 5 2 v 1244 1401 2 204 v 1244 1604 V 1245 1197 a Fy(\000)1286
+1156 y(\000)1328 1114 y(\000)1347 1095 y(\000)1245 1645 y(@)1286
+1687 y(@)1328 1728 y(@)1347 1748 y(@)145 2321 y FE(Note)13
+b(that)g(the)h(diagonal)h(fermion)f(segmen)o(ts)f(on)h(the)g(righ)o(t)g(ha)o
+(v)o(e)f(half)h(of)g(the)g(length)g(of)g(the)g(v)o(ertical)74
+2377 y(segmen)o(t.)985 2906 y(39)p eop
+%%Page: 40 45
+bop 74 -83 a Fq(3.9)70 b(Gluon)23 b(V)-6 b(ertices)74 20 y
+Fp(3.9.1)55 b(The)19 b(Anatom)n(y)f(of)g(a)h(Gluon)g(V)-5 b(ertex)74
+106 y FE(When)21 b(a)f(three-gluon)g(v)o(ertex)g(is)h(dra)o(wn)f(in)g(the)h
+(N,)f(S,)g(E)g(or)f(W)h(directions)h(using)g(the)f Fs(n)p FE(dra)o(wv)o
+(ertex)74 163 y(command,)15 b(diagonal)i(gluon)f(lines)h(are)e(dra)o(wn)h(in)
+g(a)f Fs(n)p FE(REG)h(st)o(yle,)f(while)j(horizon)o(tal)d(and)h(v)o(ertical)h
+(lines)74 219 y(are)i(dra)o(wn)g(in)h(a)f Fs(n)p FE(CENTRAL)h
+(con\014guration.)32 b(When)20 b(a)e(three-gluon)j(v)o(ertex)d(is)i(dra)o(wn)
+f(in)h(the)g(NE,)74 275 y(SW,)15 b(SE)h(or)e(NW)i(directions)g(using)g(the)g
+Fs(n)p FE(dra)o(wv)o(ertex)e(command,)h(diagonal)g(gluon)h(lines)h(are)e(dra)
+o(wn)g(in)74 332 y(a)e Fs(n)p FE(REG)g(st)o(yle,)h(while)g(horizon)o(tal)g
+(and)g(v)o(ertical)f(lines)i(are)e(dra)o(wn)g(in)h(a)f Fs(n)p
+FE(CURL)l(Y)h(con\014guration.)20 b(When)74 388 y(preceded)14
+b(b)o(y)f(a)g Fs(n)p FE(\015ip)o(v)o(ertex)g(quali\014er)h(line)h(one)e
+(\(and)g(only)g(line)i(one\))d(is)i(\015ipp)q(ed)h(to)d(b)q(ecome)i
+Fs(n)p FE(FLIPPED,)74 445 y Fs(n)p FE(FLIPPEDCURL)l(Y)g(or)e
+Fs(n)p FE(FLIPPEDCENTRAL.)h(When)g(a)f(F)l(our-gluon)h(v)o(ertex)g(is)g(pro)q
+(duced)h(all)g(of)e(the)74 501 y(lines)19 b(will)f(b)q(e)g(either)f
+Fs(n)p FE(REG)g(\(if)g(dra)o(wn)f(in)i(a)e(slan)o(ted)h(direction\))h(or)f
+Fs(n)p FE(CURL)l(Y)g(\(if)g(in)h(a)e(N,)h(S,)f(E)h(or)f(W)74
+558 y(direction\).)21 b(When)16 b Fs(n)p FE(\015ip)o(v)o(ertex)f(is)h(emplo)o
+(y)o(ed)f Fo(al)r(l)g FE(of)g(the)g(lines)i(will)g(b)q(e)f(\015ipp)q(ed.)145
+614 y(The)f(format)f(is:)74 764 y Fk(\\drawvertex\\gluon[<directio)o(n)21
+b(of)j(gluon)f(one><number)f(of)i(gluons>])241 821 y(<\(x,y\),)f(the)h
+(co-ordinates)e(of)h(the)h(beginning)e(of)i(the)g(gluon)f(one>)241
+877 y([<number)g(of)h(loops)f(in)g(each)h(gluon)f(line>])145
+1028 y FE(Gluonic)17 b(v)o(ertices)g(ma)o(y)e(b)q(e)i(dra)o(wn)f(in)g(an)o(y)
+g(of)g(the)g(eigh)o(t)h(compass)e(directions.)24 b(If)17 b
+Fu(b)q(old)g FE(gluons)f(are)74 1084 y(desired)d(then)e Fs(n)p
+FE(THICKLINES)i Fo(or)e Fs(n)p FE(thic)o(klines)i(ma)o(y)e(b)q(e)h(used.)19
+b(The)11 b(follo)o(wing)h(parameters)f(are)g(returned)74 1141
+y(b)o(y)k Fs(n)p FE(dra)o(wv)o(ertex)p Fs(n)p FE(gluon:)74
+1303 y Fk(\\gluonfrontx,\\gluonfronty:)68 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(front)g(of)h(the)f(last)h(line.)74 1360 y
+(\\gluonbackx,\\gluonbacky:)116 b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)
+f(back)g(of)h(the)f(last)h(line.)74 1416 y(\\gluonlengthx,\\gluonlengthy)o(:)
+d(The)j(\(x,y\))f(extent)g(of)g(the)h(last)f(line.)74 1473
+y(\\gluoncount:)404 b(The)24 b(number)f(of)g(gluons)g(printed)g(thus)h(far.)
+74 1529 y(\\pfrontx,\\pfronty:)260 b(The)24 b(\(x,y\))f(co-ords)g(of)g(the)h
+(front)f(of)h(the)f(last)g(line.)74 1586 y(\\pmidx,\\pmidy:)356
+b(The)24 b(\(x,y\))f(co-ords)g(of)g(the)h(middle)f(of)g(the)h(last)f(line.)74
+1642 y(\\pbackx,\\pbacky:)308 b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f
+(back)g(of)h(the)f(last)h(line.)74 1698 y(\\plengthx,\\plengthy:)212
+b(The)24 b(\(x,y\))f(extent)g(of)g(the)h(line.)74 1755 y
+(\\vertexonex,\\vertexoney:)116 b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)
+f(back)g(of)h(line)f(one.)74 1811 y(\\vertextwox,\\vertextwoy:)116
+b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(back)g(of)h(line)f(two.)74
+1868 y(\\vertexthreex,\\vertexthreey)o(:)e(The)j(\(x,y\))f(co-ordinates)f(of)
+i(the)f(back)g(of)h(line)f(three.)74 1924 y(\\vertexfourx,\\vertexfoury:)68
+b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(back)g(of)h(line)f(four.)74
+1981 y(\\vertexmidx,\\vertexmidy:)116 b(The)24 b(\(x,y\))f(co-ordinates)f(of)
+i(the)f(middle)g(of)h(the)f(vertex.)74 2037 y(\\vertexcount:)380
+b(The)24 b(number)f(of)g(vertices)g(printed)g(thus)g(far.)74
+2215 y Fp(3.9.2)55 b(Examples)17 b(and)i(Details)74 2301 y
+FE(W)l(e)g(illustrate)g(the)g(e\013ect)f(of)g Fs(n)p FE(\015ip)o(v)o(ertex)g
+(in)i(on)e(three-gluon)h(v)o(ertices.)30 b(The)18 b(co-ordinate)h(n)o(um)o(b)
+q(ering)74 2358 y(has)c(b)q(een)i(done)e(to)g(scale.)985 2906
+y(40)p eop
+%%Page: 41 46
+bop 456 292 2 2 v 456 317 a Fz(\012)p 482 317 V 421 292 V -85
+w(\012)p 447 317 V 386 292 V -85 w(\012)p 412 317 V 351 292
+V -85 w(\012)p 376 317 V 456 286 a(\003)p 456 293 2 1 v(\000)p
+473 293 V 466 286 1 2 v -69 w(\003)p 421 293 2 1 v(\000)p 438
+293 V 430 286 1 2 v -69 w(\003)p 386 293 2 1 v -1 w(\000)p
+402 293 V 395 286 1 2 v 508 292 2 2 v 508 317 a(\011)p 483
+317 V 473 292 V -85 w(\011)p 448 317 V 438 292 V -85 w(\011)p
+413 317 V 402 292 V -86 w(\011)p 377 317 V 508 246 a(\023)p
+508 291 2 5 v 551 246 5 2 v 546 208 a(\023)p 546 253 2 5 v
+588 208 5 2 v 583 171 a(\023)p 583 216 2 5 v 625 171 5 2 v
+620 134 a(\023)p 620 179 2 5 v 663 134 5 2 v 562 246 a(\000)p
+562 253 2 1 v 555 246 1 2 v 600 208 a(\000)p 600 215 2 1 v
+592 208 1 2 v 637 171 a(\000)p 637 178 2 1 v 629 171 1 2 v
+546 253 2 1 v 546 262 a(\002)p 562 253 V -1 w(\001)p 555 262
+1 2 v 583 216 2 1 v 583 225 a(\002)p 600 216 V(\001)p 592 225
+1 2 v 620 179 2 1 v 620 188 a(\002)p 637 179 V(\001)p 629 188
+1 2 v 508 295 2 5 v 508 337 a(\022)p 550 337 5 2 v 545 332
+2 5 v 545 374 a(\022)p 588 374 5 2 v 583 369 2 5 v 583 412
+a(\022)p 625 412 5 2 v 620 407 2 5 v 620 449 a(\022)p 662 449
+5 2 v 562 328 2 1 v 562 337 a(\001)p 554 337 1 2 v 599 365
+2 1 v 599 374 a(\001)p 592 374 1 2 v 636 403 2 1 v 636 412
+a(\001)p 629 412 1 2 v 545 320 a(\003)p 545 327 2 1 v(\000)p
+562 327 V 554 320 1 2 v 583 358 a(\003)p 583 365 2 1 v -1 w(\000)p
+599 365 V 592 358 1 2 v 620 395 a(\003)p 620 402 2 1 v -1 w(\000)p
+636 402 V 629 395 1 2 v -21 622 a Fs(n)p Fk(drawvertex)p Fs(n)p
+Fk(gluon[)p Fs(n)p Fk(E3)o(]\(0,3000)o(0\)[3])1494 265 y Fz(\013)p
+1494 291 2 2 v 1519 265 V -86 w(\013)p 1458 291 V 1484 265
+V -85 w(\013)p 1423 291 V 1449 265 V -85 w(\013)p 1388 291
+V 1414 265 V 1494 289 2 1 v 1494 298 a(\002)p 1510 289 V -1
+w(\001)p 1503 298 1 2 v 1458 289 2 1 v -69 w(\002)p 1475 289
+V(\001)p 1467 298 1 2 v 1423 289 2 1 v -69 w(\002)p 1440 289
+V(\001)p 1432 298 1 2 v 1545 265 a(\010)p 1545 291 2 2 v 1520
+265 V -85 w(\010)p 1510 291 V 1485 265 V -85 w(\010)p 1475
+291 V 1450 265 V -85 w(\010)p 1440 291 V 1415 265 V 1545 246
+a(\023)p 1545 291 2 5 v 1588 246 5 2 v 1583 208 a(\023)p 1583
+253 2 5 v 1625 208 5 2 v 1620 171 a(\023)p 1620 216 2 5 v 1662
+171 5 2 v 1657 134 a(\023)p 1657 179 2 5 v 1700 134 5 2 v 1599
+246 a(\000)p 1599 253 2 1 v 1592 246 1 2 v 1637 208 a(\000)p
+1637 215 2 1 v 1629 208 1 2 v 1674 171 a(\000)p 1674 178 2
+1 v 1667 171 1 2 v 1583 253 2 1 v 1583 262 a(\002)p 1599 253
+V -1 w(\001)p 1592 262 1 2 v 1620 216 2 1 v 1620 225 a(\002)p
+1637 216 V(\001)p 1629 225 1 2 v 1657 179 2 1 v 1657 188 a(\002)p
+1674 179 V(\001)p 1667 188 1 2 v 1545 295 2 5 v 1545 337 a(\022)p
+1587 337 5 2 v 1582 332 2 5 v 1582 374 a(\022)p 1625 374 5
+2 v 1620 369 2 5 v 1620 412 a(\022)p 1662 412 5 2 v 1657 407
+2 5 v 1657 449 a(\022)p 1699 449 5 2 v 1599 328 2 1 v 1599
+337 a(\001)p 1592 337 1 2 v 1636 365 2 1 v 1636 374 a(\001)p
+1629 374 1 2 v 1674 403 2 1 v 1674 412 a(\001)p 1666 412 1
+2 v 1582 320 a(\003)p 1582 327 2 1 v(\000)p 1599 327 V 1592
+320 1 2 v 1620 358 a(\003)p 1620 365 2 1 v -1 w(\000)p 1636
+365 V 1629 358 1 2 v 1657 395 a(\003)p 1657 402 2 1 v(\000)p
+1674 402 V 1666 395 1 2 v 933 622 a Fs(n)p Fk(flipvertex)p
+Fs(n)p Fk(drawvertex)p Fs(n)o Fk(gluon[)p Fs(n)o Fk(E3]\(300)o(00,3000)o
+(0\)[3])p 508 967 2 5 v 508 1009 a Fz(\021)p 463 1009 5 2 v
+471 1004 2 5 v 471 1046 a(\021)p 426 1046 5 2 v 434 1041 2
+5 v 434 1084 a(\021)p 389 1084 5 2 v 396 1079 2 5 v 396 1121
+a(\021)p 351 1121 5 2 v 454 1000 2 1 v 454 1009 a(\002)p 463
+1009 1 2 v 417 1037 2 1 v 417 1046 a(\002)p 426 1046 1 2 v
+380 1075 2 1 v 380 1084 a(\002)p 389 1084 1 2 v 454 993 a(\003)p
+454 1000 2 1 v(\000)p 471 1000 V 463 993 1 2 v 417 1030 a(\003)p
+417 1037 2 1 v(\000)p 434 1037 V 426 1030 1 2 v 380 1067 a(\003)p
+380 1074 2 1 v -1 w(\000)p 396 1074 V 389 1067 1 2 v 502 920
+a(\013)p 502 945 2 2 v 528 920 V 502 884 a(\013)p 502 909 V
+528 884 V 502 849 a(\013)p 502 874 V 528 849 V 534 920 a(\000)p
+534 927 2 1 v 534 936 a(\001)p 527 936 1 2 v 527 920 V 534
+884 a(\000)p 534 892 2 1 v 534 901 a(\001)p 527 901 1 2 v 527
+884 V 534 849 a(\000)p 534 857 2 1 v 534 866 a(\001)p 527 866
+1 2 v 527 849 V 502 910 2 2 v 502 936 a(\012)p 528 936 V 502
+875 V 502 901 a(\012)p 528 901 V 502 840 V 502 866 a(\012)p
+528 866 V 552 945 V 105 x(\011)p 527 971 V 587 945 V -15 w(\011)p
+562 971 V 622 945 V -15 w(\011)p 597 971 V 535 939 a(\003)p
+535 946 2 1 v(\000)p 552 946 V 544 939 1 2 v 1 w(\003)p 570
+946 2 1 v(\000)p 587 946 V 579 939 1 2 v 2 w(\003)p 606 946
+2 1 v -1 w(\000)p 622 946 V 615 939 1 2 v 535 945 2 2 v 535
+971 a(\012)p 561 971 V 570 945 V -15 w(\012)p 596 971 V 606
+945 V -14 w(\012)p 631 971 V 501 945 V -155 w(\012)p 527 971
+V -63 1203 a Fs(n)p Fk(drawvertex)p Fs(n)p Fk(gluon[)p Fs(n)p
+Fk(NE3]\(5)o(000,1000)o(0\)[3])1500 963 y Fz(\023)p 1500 1008
+2 5 v 1542 963 5 2 v 1463 1000 a(\023)p 1463 1045 2 5 v 1505
+1000 5 2 v 1425 1038 a(\023)p 1425 1082 2 5 v 1468 1038 5 2
+v 1388 1075 a(\023)p 1388 1120 2 5 v 1430 1075 5 2 v 1500 1008
+2 1 v 1500 1017 a(\002)p 1509 1017 1 2 v 1463 1045 2 1 v 1463
+1054 a(\002)p 1472 1054 1 2 v 1425 1082 2 1 v 1425 1092 a(\002)p
+1434 1092 1 2 v 1517 1000 a(\000)p 1517 1008 2 1 v 1517 1017
+a(\001)p 1509 1017 1 2 v 1509 1000 V 1479 1038 a(\000)p 1479
+1045 2 1 v 1479 1054 a(\001)p 1472 1054 1 2 v 1472 1038 V 1442
+1075 a(\000)p 1442 1082 2 1 v 1442 1092 a(\001)p 1434 1092
+1 2 v 1434 1075 V 1540 919 a(\013)p 1540 944 2 2 v 1566 919
+V 1540 884 a(\013)p 1540 909 V 1566 884 V 1540 848 a(\013)p
+1540 873 V 1566 848 V 1572 919 a(\000)p 1572 926 2 1 v 1572
+935 a(\001)p 1565 935 1 2 v 1565 919 V 1572 884 a(\000)p 1572
+891 2 1 v 1572 900 a(\001)p 1565 900 1 2 v 1565 884 V 1572
+848 a(\000)p 1572 856 2 1 v 1572 865 a(\001)p 1565 865 1 2
+v 1565 848 V 1540 910 2 2 v 1540 935 a(\012)p 1566 935 V 1540
+874 V 1540 900 a(\012)p 1566 900 V 1540 839 V 1540 865 a(\012)p
+1566 865 V 1590 945 V 105 x(\011)p 1565 970 V 1625 945 V -15
+w(\011)p 1600 970 V 1660 945 V -15 w(\011)p 1635 970 V 1573
+938 a(\003)p 1573 945 2 1 v(\000)p 1590 945 V 1582 938 1 2
+v 1 w(\003)p 1608 945 2 1 v(\000)p 1625 945 V 1617 938 1 2
+v 2 w(\003)p 1644 945 2 1 v -1 w(\000)p 1660 945 V 1653 938
+1 2 v 1573 945 2 2 v 1573 970 a(\012)p 1599 970 V 1608 945
+V -15 w(\012)p 1634 970 V 1644 945 V -14 w(\012)p 1669 970
+V 1539 945 V -155 w(\012)p 1565 970 V 933 1203 a Fs(n)p Fk(flipvertex)p
+Fs(n)p Fk(drawvertex)p Fs(n)o Fk(gluon[)p Fs(n)o Fk(NE3]\(30)o(000,100)o
+(00\)[3])145 1592 y FE(The)19 b(follo)o(wing)g(example)g(illustrates)h(ho)o
+(w)e(rep)q(eated)h(use)g(of)g(the)f(four-gluon)h(v)o(ertex)g(ma)o(y)f(b)q(e)h
+(em-)74 1648 y(plo)o(y)o(ed)13 b(with)g(great)f(e\013ect.)18
+b(It)13 b(also)f(illustrates)i(a)e(great)g(shortcoming)g(of)g(using)h(gluon)g
+(v)o(ertices)g(since)h(this)74 1705 y(small)j(example)g(uses)g(up)f(most)g
+(of)f(L)714 1699 y Ft(a)735 1705 y FE(T)760 1718 y(E)786 1705
+y(X's)h(standardly)g(a)o(v)m(ailable)i(in)o(ternal)f(memory)l(.)22
+b(F)l(or)16 b(this)h(reason)74 1761 y(an)e Fs(n)p Fo(include)g
+FE(statemen)o(t)f(w)o(as)g(used)i(\(see)f(L)821 1755 y Ft(a)842
+1761 y FE(T)867 1775 y(E)893 1761 y(X)g(man)o(ual\).)74 1924
+y Fk(\\begin{picture}\(30000,15000)o(\))74 1980 y(\\drawvertex\\gluon[\\E)21
+b(4]\(15000,0\)[3])74 2037 y(\\drawline\\fermion[\\SW\\REG]\()o(\\vertexo)o
+(nex,\\ve)o(rtexone)o(y\)[\\vert)o(extwoy])74 2093 y
+(\\flipvertex\\drawvertex\\gluo)o(n[\\E)g(4]\(\\vertexthreex,\\vertext)o
+(hreey\)[)o(3])74 2150 y(\\drawvertex\\gluon[\\N)g
+(4]\(\\vertextwox,\\vertextwoy\)[)o(3])74 2206 y
+(\\flipvertex\\drawvertex\\gluo)o(n[\\W)g(4]\(\\vertextwox,\\vertextwo)o
+(y\)[3])74 2262 y(\\drawline\\fermion[\\NW\\REG]\()o(\\vertext)o(hreex,\\)o
+(vertext)o(hreey\)[\\)o(fermion)o(length])74 2319 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(vertexth)o(reex,\\v)o(ertexth)o
+(reey\)[\\v)o(ertexth)o(reey])74 2375 y(\\end{picture})74 2538
+y FE(giving:)985 2906 y(41)p eop
+%%Page: 42 47
+bop 845 473 2 2 v 845 499 a Fz(\012)p 871 499 V 810 473 V -85
+w(\012)p 836 499 V 775 473 V -85 w(\012)p 801 499 V 845 467
+a(\003)p 845 474 2 1 v(\000)p 862 474 V 854 467 1 2 v -69 w(\003)p
+810 474 2 1 v(\000)p 827 474 V 819 467 1 2 v -69 w(\003)p 775
+474 2 1 v -1 w(\000)p 791 474 V 784 467 1 2 v 862 473 2 2 v
+862 499 a(\011)p 837 499 V 827 473 V -85 w(\011)p 802 499 V
+791 473 V -86 w(\011)p 766 499 V 872 464 2 1 v 872 482 a(\006)p
+889 482 1 2 v 1 w(\004)p 906 498 2 1 v 890 482 1 2 v 889 465
+a(\007)p 889 481 2 1 v 907 465 1 2 v 889 481 2 1 v 889 499
+a(\005)p 873 499 1 2 v 872 439 a(\013)p 872 464 2 2 v 898 439
+V 872 404 a(\013)p 872 429 V 898 404 V 872 369 a(\013)p 872
+394 V 898 369 V 904 439 a(\000)p 904 447 2 1 v 904 456 a(\001)p
+897 456 1 2 v 897 439 V 904 404 a(\000)p 904 411 2 1 v 904
+420 a(\001)p 897 420 1 2 v 897 404 V 904 369 a(\000)p 904 376
+2 1 v 904 385 a(\001)p 897 385 1 2 v 897 369 V 872 430 2 2
+v 872 456 a(\012)p 898 456 V 872 395 V 872 420 a(\012)p 898
+420 V 872 359 V 872 385 a(\012)p 898 385 V 931 465 a(\010)p
+931 490 V 906 465 V -14 w(\010)p 967 490 V 942 465 V -15 w(\010)p
+1002 490 V 977 465 V 915 488 2 1 v 915 497 a(\002)p 931 488
+V -1 w(\001)p 924 497 1 2 v 950 488 2 1 v 2 w(\002)p 967 488
+V(\001)p 959 497 1 2 v 985 488 2 1 v 1 w(\002)p 1002 488 V(\001)p
+994 497 1 2 v 915 465 a(\013)p 915 490 2 2 v 941 465 V -15
+w(\013)p 950 490 V 976 465 V -15 w(\013)p 985 490 V 1011 465
+V 906 499 V 906 525 a(\011)p 881 525 V 906 534 V 906 560 a(\011)p
+881 560 V 906 570 V 906 595 a(\011)p 881 595 V 874 508 a(\003)p
+874 516 2 1 v 874 525 a(\002)p 883 525 1 2 v 883 508 V 874
+543 a(\003)p 874 551 2 1 v 874 560 a(\002)p 883 560 1 2 v 883
+543 V 874 579 a(\003)p 874 586 2 1 v 874 595 a(\002)p 883 595
+1 2 v 883 579 V 906 508 a(\010)p 906 533 2 2 v 881 508 V 906
+543 a(\010)p 906 569 V 881 543 V 906 579 a(\010)p 906 604 V
+881 579 V 725 540 a Fy(\000)683 581 y(\000)668 597 y(\000)1091
+465 y Fz(\013)p 1091 490 V 1117 465 V -85 w(\013)p 1056 490
+V 1082 465 V -85 w(\013)p 1021 490 V 1046 465 V 1091 488 2
+1 v 1091 497 a(\002)p 1108 488 V(\001)p 1100 497 1 2 v 1056
+488 2 1 v -69 w(\002)p 1072 488 V -1 w(\001)p 1065 497 1 2
+v 1021 488 2 1 v -68 w(\002)p 1037 488 V -1 w(\001)p 1030 497
+1 2 v 1108 465 a(\010)p 1108 490 2 2 v 1083 465 V -86 w(\010)p
+1072 490 V 1047 465 V -85 w(\010)p 1037 490 V 1012 465 V 1118
+482 a(\007)p 1118 498 2 1 v 1135 482 1 2 v 1152 464 2 1 v 1
+w(\005)p 1136 482 1 2 v 1135 465 a(\004)p 1135 481 2 1 v 1119
+465 1 2 v 1135 481 2 1 v 1135 499 a(\006)p 1152 499 1 2 v 1151
+440 a(\010)p 1151 465 2 2 v 1126 440 V 1151 404 a(\010)p 1151
+430 V 1126 404 V 1151 369 a(\010)p 1151 394 V 1126 369 V 1119
+440 a(\003)p 1119 447 2 1 v 1119 456 a(\002)p 1128 457 1 2
+v 1128 440 V 1119 404 a(\003)p 1119 412 2 1 v 1119 421 a(\002)p
+1128 421 1 2 v 1128 404 V 1119 369 a(\003)p 1119 377 2 1 v
+1119 386 a(\002)p 1128 386 1 2 v 1128 369 V 1151 431 2 2 v
+1151 456 a(\011)p 1126 457 V 1151 395 V 1151 421 a(\011)p 1126
+421 V 1151 360 V 1151 386 a(\011)p 1126 386 V 1177 473 V 1177
+499 a(\011)p 1152 499 V 1212 473 V -15 w(\011)p 1187 499 V
+1248 473 V -14 w(\011)p 1223 499 V 1161 467 a(\003)p 1161 474
+2 1 v -1 w(\000)p 1177 474 V 1170 467 1 2 v 2 w(\003)p 1196
+474 2 1 v -1 w(\000)p 1212 474 V 1205 467 1 2 v 2 w(\003)p
+1231 474 2 1 v(\000)p 1248 474 V 1240 467 1 2 v 1161 473 2
+2 v 1161 499 a(\012)p 1186 499 V 1196 473 V -15 w(\012)p 1222
+499 V 1231 473 V -15 w(\012)p 1257 499 V 1118 499 V 1118 525
+a(\012)p 1143 525 V 1118 534 V 1118 560 a(\012)p 1143 560 V
+1118 570 V 1118 595 a(\012)p 1143 595 V 1150 508 a(\000)p 1150
+516 2 1 v 1150 525 a(\001)p 1142 525 1 2 v 1142 508 V 1150
+543 a(\000)p 1150 551 2 1 v 1150 560 a(\001)p 1142 560 1 2
+v 1142 543 V 1150 579 a(\000)p 1150 586 2 1 v 1150 595 a(\001)p
+1142 595 1 2 v 1142 579 V 1118 508 a(\013)p 1118 533 2 2 v
+1143 508 V 1118 543 a(\013)p 1118 569 V 1143 543 V 1118 579
+a(\013)p 1118 604 V 1143 579 V 1151 254 V 1151 279 a(\011)p
+1126 279 V 1151 289 V 1151 315 a(\011)p 1126 315 V 1151 324
+V 1151 350 a(\011)p 1126 350 V 1119 263 a(\003)p 1119 270 2
+1 v 1119 279 a(\002)p 1128 279 1 2 v 1128 263 V 1119 298 a(\003)p
+1119 306 2 1 v 1119 315 a(\002)p 1128 315 1 2 v 1128 298 V
+1119 333 a(\003)p 1119 341 2 1 v 1119 350 a(\002)p 1128 350
+1 2 v 1128 333 V 1151 263 a(\010)p 1151 288 2 2 v 1126 263
+V 1151 298 a(\010)p 1151 323 V 1126 298 V 1151 333 a(\010)p
+1151 358 V 1126 333 V 1118 219 2 1 v 1118 236 a(\006)p 1135
+236 1 2 v 1 w(\004)p 1152 253 2 1 v 1136 236 1 2 v 1135 219
+a(\007)p 1135 236 2 1 v 1152 219 1 2 v 1135 236 2 1 v 1135
+253 a(\005)p 1119 253 1 2 v 1091 228 2 2 v -77 w(\012)p 1117
+254 V 1056 228 V -85 w(\012)p 1082 254 V 1021 228 V -85 w(\012)p
+1046 254 V 1091 221 a(\003)p 1091 228 2 1 v(\000)p 1108 228
+V 1100 221 1 2 v -69 w(\003)p 1056 228 2 1 v -1 w(\000)p 1072
+228 V 1065 221 1 2 v -68 w(\003)p 1021 228 2 1 v -1 w(\000)p
+1037 228 V 1030 221 1 2 v 1108 228 2 2 v 1108 253 a(\011)p
+1083 254 V 1072 228 V -86 w(\011)p 1047 254 V 1037 228 V -85
+w(\011)p 1012 254 V 1118 194 a(\013)p 1118 219 V 1143 194 V
+1118 158 a(\013)p 1118 184 V 1143 158 V 1118 123 a(\013)p 1118
+148 V 1143 123 V 1150 194 a(\000)p 1150 201 2 1 v 1150 210
+a(\001)p 1142 210 1 2 v 1142 194 V 1150 158 a(\000)p 1150 166
+2 1 v 1150 175 a(\001)p 1142 175 1 2 v 1142 158 V 1150 123
+a(\000)p 1150 131 2 1 v 1150 140 a(\001)p 1142 140 1 2 v 1142
+123 V 1118 185 2 2 v 1118 210 a(\012)p 1143 210 V 1118 149
+V 1118 175 a(\012)p 1143 175 V 1118 114 V 1118 140 a(\012)p
+1143 140 V 1177 219 a(\010)p 1177 244 V 1152 219 V -15 w(\010)p
+1212 244 V 1187 219 V -14 w(\010)p 1248 244 V 1223 219 V 1161
+242 2 1 v 1161 251 a(\002)p 1177 242 V -1 w(\001)p 1170 251
+1 2 v 1196 242 2 1 v 2 w(\002)p 1212 242 V -1 w(\001)p 1205
+251 1 2 v 1231 242 2 1 v 2 w(\002)p 1248 242 V(\001)p 1240
+251 1 2 v 1161 219 a(\013)p 1161 244 2 2 v 1186 219 V -15 w(\013)p
+1196 244 V 1222 219 V -15 w(\013)p 1231 244 V 1257 219 V 931
+228 V 931 253 a(\011)p 906 254 V 967 228 V -14 w(\011)p 942
+254 V 1002 228 V -15 w(\011)p 977 254 V 915 221 a(\003)p 915
+228 2 1 v -1 w(\000)p 931 228 V 924 221 1 2 v 2 w(\003)p 950
+228 2 1 v(\000)p 967 228 V 959 221 1 2 v 1 w(\003)p 985 228
+2 1 v(\000)p 1002 228 V 994 221 1 2 v 915 228 2 2 v 915 253
+a(\012)p 941 254 V 950 228 V -15 w(\012)p 976 254 V 985 228
+V -15 w(\012)p 1011 254 V 872 236 a(\007)p 872 253 2 1 v 889
+236 1 2 v 906 219 2 1 v 1 w(\005)p 890 236 1 2 v 889 219 a(\004)p
+889 236 2 1 v 873 219 1 2 v 889 236 2 1 v 889 253 a(\006)p
+907 253 1 2 v 872 254 2 2 v 872 279 a(\012)p 898 279 V 872
+289 V 872 315 a(\012)p 898 315 V 872 324 V 872 350 a(\012)p
+898 350 V 904 263 a(\000)p 904 270 2 1 v 904 279 a(\001)p 897
+279 1 2 v 897 263 V 904 298 a(\000)p 904 306 2 1 v 904 315
+a(\001)p 897 315 1 2 v 897 298 V 904 333 a(\000)p 904 341 2
+1 v 904 350 a(\001)p 897 350 1 2 v 897 333 V 872 263 a(\013)p
+872 288 2 2 v 898 263 V 872 298 a(\013)p 872 323 V 898 298
+V 872 333 a(\013)p 872 358 V 898 333 V 845 219 a(\013)p 845
+244 V 871 219 V -85 w(\013)p 810 244 V 836 219 V -85 w(\013)p
+775 244 V 801 219 V 845 242 2 1 v 845 251 a(\002)p 862 242
+V(\001)p 854 251 1 2 v 810 242 2 1 v -69 w(\002)p 827 242 V(\001)p
+819 251 1 2 v 775 242 2 1 v -69 w(\002)p 791 242 V -1 w(\001)p
+784 251 1 2 v 862 219 a(\010)p 862 244 2 2 v 837 219 V -85
+w(\010)p 827 244 V 802 219 V -86 w(\010)p 791 244 V 766 219
+V 906 194 a(\010)p 906 219 V 881 194 V 906 159 a(\010)p 906
+184 V 881 159 V 906 124 a(\010)p 906 149 V 881 124 V 874 194
+a(\003)p 874 202 2 1 v 874 211 a(\002)p 883 211 1 2 v 883 194
+V 874 159 a(\003)p 874 167 2 1 v 874 176 a(\002)p 883 176 1
+2 v 883 159 V 874 124 a(\003)p 874 131 2 1 v 874 140 a(\002)p
+883 140 1 2 v 883 124 V 906 185 2 2 v 906 211 a(\011)p 881
+211 V 906 150 V 906 176 a(\011)p 881 176 V 906 115 V 906 140
+a(\011)p 881 140 V 725 218 a Fy(@)683 177 y(@)668 161 y(@)p
+765 498 2 280 v 145 770 a FE(Of)19 b(note)g(here)g(are)g(the)g(lengths)h
+(used)f(for)g(the)g(fermions.)32 b(Since)20 b(the)f(\014rst)g(v)o(ertex)g(is)
+g(dra)o(wn)g(with)74 827 y(ordinate)h Fx(y)h FE(=)f(0,)g Fs(n)p
+FE(v)o(ertext)o(w)o(o)o(y)d(will)k(b)q(e)f(the)f(length)h(of)f(eac)o(h)g
+(gluon)h(arm.)32 b(Th)o(us)19 b(the)g(lo)o(w)o(er)g(exterior)74
+883 y(fermion)d(will)i(also)d(b)q(e)i(of)e(this)h(length.)22
+b(The)16 b(upp)q(er)h(fermion)f(is)g(of)f(length)i Fs(n)p FE(fermionlength,)f
+(that)f(is)h(the)74 940 y(length)e(of)f(the)g(previously)i(dra)o(wn)e
+(fermion,)h(assuring)f(a)g(matc)o(h.)19 b(The)13 b(\014nal)i(fermion)e(line)i
+(is)f(dra)o(wn)f(from)74 996 y(the)i(sp)q(eci\014ed)j(p)q(oin)o(t)d(to)g
+Fx(y)g FE(=)e(0)h(using)i(the)g(same)f(tric)o(k)g(as)g(ab)q(o)o(v)o(e.)145
+1053 y(An)c(unfortunate)g(defect)g(of)g Fp(FEYNMAN)g FE(ma)o(y)f(b)q(e)i
+(noticed)g(b)o(y)f(returning)g(to)f(the)h(three-gluon)h(v)o(er-)74
+1109 y(tices)j(on)f(the)h(previous)g(page.)k(Occasionally)e(one)d(migh)o(t)g
+(wish)h(to)f(attac)o(h)f(the)i(upp)q(er)g(left)g(example)g(on)o(to)74
+1166 y(the)g(Eastern)g(line)h(of)f(the)g(lo)o(w)o(er)f(righ)o(t)h(example.)21
+b(This)15 b(w)o(ould)h(lead)f(to)g(a)f(gluon)i(of)e Fs(n)p
+FE(FLIPPEDCURL)l(Y)74 1222 y(\()p Fo(i.e.)27 b FE(a)14 b(non-cen)o(tral)f(st)
+o(yle\))h(b)q(eing)g(joined)h(with)e(a)g Fs(n)p FE(CENTRAL)h(gluon)g
+(con\014guration.)19 b(This)14 b(cannot)f(b)q(e)74 1279 y(accomplished)k(smo)
+q(othly)d(without)h(emplo)o(ying)h(arcane)e(tric)o(ks)h(usually)h(in)o(v)o
+(olving)g(some)e(e\013ort.)19 b(Similar)74 1335 y(commen)o(ts)c(can)g(b)q(e)h
+(made)f(concerning)i(certain)e(com)o(binations)h(of)f(three-)g(and)h
+(four-gluon)f(v)o(ertices.)145 1391 y(V)l(ertices)g(ma)o(y)e(also)h(b)q(e)h
+(link)o(ed,)g(capp)q(ed)h(and)e(stemmed,)g(as)f(will)j(b)q(e)f(discussed)g
+(in)g(the)g(next)f(c)o(hapter.)74 1448 y(Examples)19 b(of)f(these)g(features)
+g(w)o(ere)g(giv)o(en)h(in)g(section)g(2.10.2.)27 b(Also)19
+b(in)g(that)e(section)i(w)o(as)e(a)h(diagram)74 1504 y(lab)q(elled)23
+b(\\gluon)o(burst".)35 b(W)l(e)21 b(conclude)h(this)e(c)o(hapter)h(b)o(y)f
+(re-creating)h(this)f(using)h(t)o(w)o(o)e Fs(n)p FE(dra)o(wv)o(ertex)74
+1561 y(commands.)30 b(The)19 b(repro)q(duction)g(of)f(this)h(diagram)f(is)h
+(an)g(exercise)g(for)f(the)h(section)g(on)f(placemen)o(t)i(of)74
+1617 y(information)15 b(in)g(c)o(hapter)f(four.)19 b(In)c(parting)g(a)f
+(brief)h(w)o(ord)f(of)g(caution)h(ab)q(out)f(T)1480 1627 y(E)1505
+1617 y(X's)g(memory)g(usage.)19 b(In)74 1674 y(the)12 b(section)g(on)g(gluon)
+g(lines)h(it)f(w)o(as)f(p)q(oin)o(ted)h(out)f(that)g(gluons)h(consume)g(v)m
+(ast)g(p)q(ortions)g(of)f(L)1681 1668 y Ft(a)1702 1674 y FE(T)1727
+1687 y(E)1752 1674 y(X's)h(65500)74 1730 y(w)o(ords)18 b(of)f(in)o(ternal)i
+(memory)f(\(only)g(40000)f(of)h(whic)o(h)h(is)f(a)o(v)m(ailable)i(to)d(the)i
+(user\).)28 b(This)19 b(is)g(trebly)f(true)74 1787 y(for)d(gluon)h(v)o
+(ertices.)21 b(Extending)16 b(the)f(v)o(ertices)h(on)f(the)h(follo)o(wing)g
+(page)f(b)o(y)h(t)o(w)o(o)e(lo)q(ops)h(p)q(er)h(line)h(requires)74
+1843 y(an)e(additional)i(10000)d(w)o(ords.)19 b(In)c(p)q(oin)o(t)h(of)f(fact)
+f(this)i(one)f(sample)h(diagram)f(uses)g(99\045)g(of)f(the)h(a)o(v)m(ailable)
+74 1900 y(memory!)k(F)l(or)c(this)h(reason)e(it)i(has)f(b)q(een)h(dra)o(wn)f
+(sligh)o(tly)h(smaller)g(than)f(the)h(example)g(in)g(c)o(hapter)f(2.)985
+2906 y(42)p eop
+%%Page: 43 48
+bop 845 -83 a FE(GLUONBURST)p 1073 566 2 5 v 1073 608 a Fz(\021)p
+1028 608 5 2 v 1035 603 2 5 v 1035 645 a(\021)p 990 645 5 2
+v 998 640 2 5 v 998 683 a(\021)p 953 683 5 2 v 960 678 2 5
+v 960 720 a(\021)p 916 720 5 2 v 923 715 2 5 v 923 757 a(\021)p
+878 757 5 2 v 886 752 2 5 v 886 795 a(\021)p 841 795 5 2 v
+848 790 2 5 v 848 832 a(\021)p 804 832 5 2 v 811 827 2 5 v
+811 869 a(\021)p 766 869 5 2 v 1019 599 2 1 v 1019 608 a(\002)p
+1028 608 1 2 v 981 636 2 1 v 981 645 a(\002)p 990 645 1 2 v
+944 674 2 1 v 944 683 a(\002)p 953 683 1 2 v 907 711 2 1 v
+907 720 a(\002)p 916 720 1 2 v 869 748 2 1 v 869 757 a(\002)p
+878 757 1 2 v 832 786 2 1 v 832 795 a(\002)p 841 795 1 2 v
+795 823 2 1 v 795 832 a(\002)p 804 832 1 2 v 1019 591 a(\003)p
+1019 598 2 1 v -1 w(\000)p 1035 598 V 1028 591 1 2 v 981 629
+a(\003)p 981 636 2 1 v(\000)p 998 636 V 990 629 1 2 v 944 666
+a(\003)p 944 673 2 1 v(\000)p 961 673 V 953 666 1 2 v 907 703
+a(\003)p 907 710 2 1 v -1 w(\000)p 923 710 V 916 703 1 2 v
+869 741 a(\003)p 869 748 2 1 v(\000)p 886 748 V 878 741 1 2
+v 832 778 a(\003)p 832 785 2 1 v -1 w(\000)p 848 785 V 841
+778 1 2 v 795 815 a(\003)p 795 822 2 1 v -1 w(\000)p 811 822
+V 804 815 1 2 v 1027 520 2 5 v 1027 562 a(\022)p 1069 563 5
+2 v 990 483 2 5 v 990 525 a(\022)p 1032 525 5 2 v 952 445 2
+5 v 952 488 a(\022)p 995 488 5 2 v 915 408 2 5 v 915 450 a(\022)p
+957 450 5 2 v 878 371 2 5 v 878 413 a(\022)p 920 413 5 2 v
+840 333 2 5 v 840 376 a(\022)p 883 376 5 2 v 803 296 2 5 v
+803 338 a(\022)p 845 338 5 2 v 765 259 2 5 v 765 301 a(\022)p
+808 301 5 2 v 1027 508 a(\003)p 1027 515 2 1 v 1036 508 1 2
+v 990 471 a(\003)p 990 478 2 1 v 999 471 1 2 v 952 434 a(\003)p
+952 441 2 1 v 961 434 1 2 v 915 396 a(\003)p 915 403 2 1 v
+924 396 1 2 v 877 359 a(\003)p 877 366 2 1 v 887 359 1 2 v
+840 322 a(\003)p 840 329 2 1 v 849 322 1 2 v 803 284 a(\003)p
+803 291 2 1 v 812 284 1 2 v 1043 508 a(\000)p 1043 516 2 1
+v 1043 525 a(\001)p 1036 525 1 2 v 1036 508 V 1006 471 a(\000)p
+1006 479 2 1 v 1006 488 a(\001)p 999 488 1 2 v 999 471 V 969
+434 a(\000)p 969 441 2 1 v 969 450 a(\001)p 961 450 1 2 v 961
+434 V 931 396 a(\000)p 931 404 2 1 v 931 413 a(\001)p 924 413
+1 2 v 924 396 V 894 359 a(\000)p 894 367 2 1 v 894 376 a(\001)p
+887 376 1 2 v 887 359 V 857 322 a(\000)p 857 329 2 1 v 857
+338 a(\001)p 849 338 1 2 v 849 322 V 819 284 a(\000)p 819 292
+2 1 v 819 301 a(\001)p 812 301 1 2 v 812 284 V 1073 517 a(\023)p
+1073 562 2 5 v 1115 517 5 2 v 1110 479 a(\023)p 1110 524 2
+5 v 1152 479 5 2 v 1147 442 a(\023)p 1147 487 2 5 v 1190 442
+5 2 v 1185 405 a(\023)p 1185 450 2 5 v 1227 405 5 2 v 1222
+367 a(\023)p 1222 412 2 5 v 1264 367 5 2 v 1259 330 a(\023)p
+1259 375 2 5 v 1302 330 5 2 v 1297 293 a(\023)p 1297 337 2
+5 v 1339 293 5 2 v 1334 255 a(\023)p 1334 300 2 5 v 1376 255
+5 2 v 1126 517 a(\000)p 1126 524 2 1 v 1119 517 1 2 v 1164
+479 a(\000)p 1164 486 2 1 v 1156 479 1 2 v 1201 442 a(\000)p
+1201 449 2 1 v 1194 442 1 2 v 1238 405 a(\000)p 1238 412 2
+1 v 1231 405 1 2 v 1276 367 a(\000)p 1276 374 2 1 v 1268 367
+1 2 v 1313 330 a(\000)p 1313 337 2 1 v 1306 330 1 2 v 1351
+293 a(\000)p 1351 300 2 1 v 1343 293 1 2 v 1110 524 2 1 v 1110
+533 a(\002)p 1126 524 V -1 w(\001)p 1119 533 1 2 v 1147 487
+2 1 v 1147 496 a(\002)p 1164 487 V(\001)p 1156 496 1 2 v 1185
+450 2 1 v 1185 459 a(\002)p 1201 450 V -1 w(\001)p 1194 459
+1 2 v 1222 412 2 1 v 1222 421 a(\002)p 1238 412 V -1 w(\001)p
+1231 421 1 2 v 1259 375 2 1 v 1259 384 a(\002)p 1276 375 V(\001)p
+1268 384 1 2 v 1297 338 2 1 v 1297 347 a(\002)p 1313 338 V
+-1 w(\001)p 1306 347 1 2 v 1334 300 2 1 v 1334 309 a(\002)p
+1351 300 V(\001)p 1343 309 1 2 v 1118 563 a(\020)p 1118 607
+2 5 v 1073 563 5 2 v 1155 600 a(\020)p 1155 644 2 5 v 1111
+600 5 2 v 1193 637 a(\020)p 1193 682 2 5 v 1148 637 5 2 v 1230
+674 a(\020)p 1230 719 2 5 v 1185 674 5 2 v 1268 712 a(\020)p
+1268 757 2 5 v 1223 712 5 2 v 1305 749 a(\020)p 1305 794 2
+5 v 1260 749 5 2 v 1342 786 a(\020)p 1342 831 2 5 v 1297 786
+5 2 v 1380 824 a(\020)p 1380 869 2 5 v 1335 824 5 2 v 1118
+607 2 1 v 1118 616 a(\001)p 1111 616 1 2 v 1156 645 2 1 v 1156
+654 a(\001)p 1148 654 1 2 v 1193 682 2 1 v 1193 691 a(\001)p
+1185 691 1 2 v 1230 719 2 1 v 1230 728 a(\001)p 1223 728 1
+2 v 1268 757 2 1 v 1268 766 a(\001)p 1260 766 1 2 v 1305 794
+2 1 v 1305 803 a(\001)p 1297 803 1 2 v 1342 831 2 1 v 1342
+840 a(\001)p 1335 840 1 2 v 1102 600 a(\003)p 1102 607 2 1
+v 1102 616 a(\002)p 1111 616 1 2 v 1111 600 V 1139 637 a(\003)p
+1139 645 2 1 v 1139 654 a(\002)p 1148 654 1 2 v 1148 637 V
+1176 674 a(\003)p 1176 682 2 1 v 1176 691 a(\002)p 1185 691
+1 2 v 1185 674 V 1214 712 a(\003)p 1214 719 2 1 v 1214 728
+a(\002)p 1223 728 1 2 v 1223 712 V 1251 749 a(\003)p 1251 757
+2 1 v 1251 766 a(\002)p 1260 766 1 2 v 1260 749 V 1288 786
+a(\003)p 1288 794 2 1 v 1288 803 a(\002)p 1297 803 1 2 v 1297
+786 V 1326 824 a(\003)p 1326 831 2 1 v 1326 840 a(\002)p 1335
+840 1 2 v 1335 824 V 1029 554 2 2 v 1029 579 a(\012)p 1055
+580 V 994 554 V -85 w(\012)p 1020 580 V 959 554 V -85 w(\012)p
+985 580 V 924 554 V -85 w(\012)p 949 580 V 888 554 V -86 w(\012)p
+914 580 V 853 554 V -85 w(\012)p 879 580 V 818 554 V -85 w(\012)p
+844 580 V 783 554 V -85 w(\012)p 808 580 V 747 554 V -86 w(\012)p
+773 580 V 1029 547 a(\003)p 1029 554 2 1 v(\000)p 1046 554
+V 1039 547 1 2 v -69 w(\003)p 994 554 2 1 v(\000)p 1011 554
+V 1003 547 1 2 v -69 w(\003)p 959 554 2 1 v(\000)p 976 554
+V 968 547 1 2 v -69 w(\003)p 924 554 2 1 v -1 w(\000)p 940
+554 V 933 547 1 2 v -69 w(\003)p 888 554 2 1 v(\000)p 905 554
+V 898 547 1 2 v -69 w(\003)p 853 554 2 1 v(\000)p 870 554 V
+862 547 1 2 v -69 w(\003)p 818 554 2 1 v(\000)p 835 554 V 827
+547 1 2 v -69 w(\003)p 783 554 2 1 v -1 w(\000)p 799 554 V
+792 547 1 2 v -69 w(\003)p 747 554 2 1 v(\000)p 764 554 V 756
+547 1 2 v 1046 554 2 2 v 1046 579 a(\011)p 1021 580 V 1011
+554 V -85 w(\011)p 986 580 V 976 554 V -85 w(\011)p 950 580
+V 940 554 V -86 w(\011)p 915 580 V 905 554 V -85 w(\011)p 880
+580 V 870 554 V -85 w(\011)p 845 580 V 834 554 V -86 w(\011)p
+809 580 V 799 554 V -85 w(\011)p 774 580 V 764 554 V -85 w(\011)p
+739 580 V 1056 545 2 1 v 1056 562 a(\006)p 1074 562 1 2 v 1
+w(\004)p 1090 579 2 1 v 1074 562 1 2 v 1073 545 a(\007)p 1073
+562 2 1 v 1091 545 1 2 v 1073 562 2 1 v 1073 579 a(\005)p 1057
+579 1 2 v 1056 520 a(\013)p 1056 545 2 2 v 1082 520 V 1056
+484 a(\013)p 1056 510 V 1082 484 V 1056 449 a(\013)p 1056 474
+V 1082 449 V 1056 414 a(\013)p 1056 439 V 1082 414 V 1056 379
+a(\013)p 1056 404 V 1082 379 V 1056 343 a(\013)p 1056 369 V
+1082 343 V 1056 308 a(\013)p 1056 333 V 1082 308 V 1056 273
+a(\013)p 1056 298 V 1082 273 V 1056 238 a(\013)p 1056 263 V
+1082 238 V 1088 520 a(\000)p 1088 527 2 1 v 1088 536 a(\001)p
+1081 536 1 2 v 1081 520 V 1088 484 a(\000)p 1088 492 2 1 v
+1088 501 a(\001)p 1081 501 1 2 v 1081 484 V 1088 449 a(\000)p
+1088 457 2 1 v 1088 466 a(\001)p 1081 466 1 2 v 1081 449 V
+1088 414 a(\000)p 1088 421 2 1 v 1088 431 a(\001)p 1081 431
+1 2 v 1081 414 V 1088 379 a(\000)p 1088 386 2 1 v 1088 395
+a(\001)p 1081 395 1 2 v 1081 379 V 1088 343 a(\000)p 1088 351
+2 1 v 1088 360 a(\001)p 1081 360 1 2 v 1081 343 V 1088 308
+a(\000)p 1088 316 2 1 v 1088 325 a(\001)p 1081 325 1 2 v 1081
+308 V 1088 273 a(\000)p 1088 280 2 1 v 1088 290 a(\001)p 1081
+290 1 2 v 1081 273 V 1088 238 a(\000)p 1088 245 2 1 v 1088
+254 a(\001)p 1081 254 1 2 v 1081 238 V 1056 511 2 2 v 1056
+536 a(\012)p 1082 536 V 1056 475 V 1056 501 a(\012)p 1082 501
+V 1056 440 V 1056 466 a(\012)p 1082 466 V 1056 405 V 1056 431
+a(\012)p 1082 431 V 1056 370 V 1056 395 a(\012)p 1082 395 V
+1056 334 V 1056 360 a(\012)p 1082 360 V 1056 299 V 1056 325
+a(\012)p 1082 325 V 1056 264 V 1056 289 a(\012)p 1082 289 V
+1056 228 V 1056 254 a(\012)p 1082 254 V 1116 545 a(\010)p 1116
+570 V 1090 545 V -15 w(\010)p 1151 570 V 1126 545 V -15 w(\010)p
+1186 570 V 1161 545 V -15 w(\010)p 1221 570 V 1196 545 V -14
+w(\010)p 1257 570 V 1231 545 V -15 w(\010)p 1292 570 V 1267
+545 V -15 w(\010)p 1327 570 V 1302 545 V -15 w(\010)p 1362
+570 V 1337 545 V -14 w(\010)p 1398 570 V 1373 545 V 1099 568
+2 1 v 1099 577 a(\002)p 1116 568 V(\001)p 1108 577 1 2 v 1134
+568 2 1 v 1 w(\002)p 1151 568 V(\001)p 1143 577 1 2 v 1169
+568 2 1 v 1 w(\002)p 1186 568 V(\001)p 1179 577 1 2 v 1205
+568 2 1 v 2 w(\002)p 1221 568 V -1 w(\001)p 1214 577 1 2 v
+1240 568 2 1 v 2 w(\002)p 1257 568 V(\001)p 1249 577 1 2 v
+1275 568 2 1 v 1 w(\002)p 1292 568 V(\001)p 1284 577 1 2 v
+1311 568 2 1 v 2 w(\002)p 1327 568 V -1 w(\001)p 1320 577 1
+2 v 1346 568 2 1 v 2 w(\002)p 1362 568 V -1 w(\001)p 1355 577
+1 2 v 1381 568 2 1 v 2 w(\002)p 1398 568 V(\001)p 1390 577
+1 2 v 1099 545 a(\013)p 1099 570 2 2 v 1125 545 V -15 w(\013)p
+1134 570 V 1160 545 V -15 w(\013)p 1169 570 V 1195 545 V -14
+w(\013)p 1205 570 V 1230 545 V -15 w(\013)p 1240 570 V 1266
+545 V -15 w(\013)p 1275 570 V 1301 545 V -14 w(\013)p 1311
+570 V 1336 545 V -15 w(\013)p 1346 570 V 1372 545 V -15 w(\013)p
+1381 570 V 1407 545 V 1090 580 V 1090 605 a(\011)p 1065 605
+V 1090 615 V 1090 641 a(\011)p 1065 641 V 1090 650 V 1090 676
+a(\011)p 1065 676 V 1090 685 V 1090 711 a(\011)p 1065 711 V
+1090 721 V 1090 746 a(\011)p 1065 746 V 1090 756 V 1090 782
+a(\011)p 1065 782 V 1090 791 V 1090 817 a(\011)p 1065 817 V
+1090 826 V 1090 852 a(\011)p 1065 852 V 1090 862 V 1090 887
+a(\011)p 1065 887 V 1058 589 a(\003)p 1058 596 2 1 v 1058 605
+a(\002)p 1067 605 1 2 v 1067 589 V 1058 624 a(\003)p 1058 632
+2 1 v 1058 641 a(\002)p 1067 641 1 2 v 1067 624 V 1058 659
+a(\003)p 1058 667 2 1 v 1058 676 a(\002)p 1067 676 1 2 v 1067
+659 V 1058 695 a(\003)p 1058 702 2 1 v 1058 711 a(\002)p 1067
+711 1 2 v 1067 695 V 1058 730 a(\003)p 1058 737 2 1 v 1058
+746 a(\002)p 1067 746 1 2 v 1067 730 V 1058 765 a(\003)p 1058
+773 2 1 v 1058 782 a(\002)p 1067 782 1 2 v 1067 765 V 1058
+800 a(\003)p 1058 808 2 1 v 1058 817 a(\002)p 1067 817 1 2
+v 1067 800 V 1058 836 a(\003)p 1058 843 2 1 v 1058 852 a(\002)p
+1067 852 1 2 v 1067 836 V 1058 871 a(\003)p 1058 878 2 1 v
+1058 888 a(\002)p 1067 888 1 2 v 1067 871 V 1090 589 a(\010)p
+1090 614 2 2 v 1065 589 V 1090 624 a(\010)p 1090 649 V 1065
+624 V 1090 659 a(\010)p 1090 684 V 1065 659 V 1090 695 a(\010)p
+1090 720 V 1065 695 V 1090 730 a(\010)p 1090 755 V 1065 730
+V 1090 765 a(\010)p 1090 790 V 1065 765 V 1090 800 a(\010)p
+1090 825 V 1065 800 V 1090 836 a(\010)p 1090 861 V 1065 836
+V 1090 871 a(\010)p 1090 896 V 1065 871 V 1074 562 a(~)985
+2906 y FE(43)p eop
+%%Page: 44 49
+bop 74 229 a Fr(Chapter)34 b(4)74 436 y FD(Adv)-7 b(anced)40
+b(F)-10 b(eatures)74 659 y FE(This)17 b(c)o(hapter)e(describ)q(es)j(a)d(n)o
+(um)o(b)q(er)h(of)g(tec)o(hniques)h(and)f(commands,)f(some)h(alluded)i(to)d
+(earlier,)h(whic)o(h)74 715 y(ma)o(y)f(b)q(e)g(emplo)o(y)o(ed)h(b)o(y)f(the)h
+(user)f(to)f(aid)i(him)g(or)f(her)g(in)h(pro)q(ducing)h(the)e(desired)h(F)l
+(eynman)g(diagram)e(as)74 771 y(closely)j(and)e(quic)o(kly)i(as)d(p)q
+(ossible.)74 914 y Fq(4.1)70 b(Placing)21 b(It)i(Where)g(Y)-6
+b(ou)23 b(W)-6 b(an)n(t)24 b(It)74 1016 y Fp(FEYNMAN)11 b FE(has)f(b)q(een)i
+(designed)g(in)f(suc)o(h)g(a)f(w)o(a)o(y)f(that)h(particle)i(lines)g(ma)o(y)d
+(b)q(e)i(dra)o(wn)f(in)i(relation)f(with)74 1072 y(one)18 b(another)e(with)i
+(a)f(minim)o(um)h(of)f(e\013ort.)25 b(Instances)18 b(in)o(v)m(ariably)h
+(arise,)e(ho)o(w)o(ev)o(er,)g(where)g(the)h(simple)74 1129
+y(commands)13 b(de\014ned)h(th)o(us)e(far)g(b)q(ecome)i(inadequate)f(to)f
+(the)h(task.)18 b(The)13 b(user)g(migh)o(t)g(then)g(b)q(e)g(condemned)74
+1185 y(to)g(p)q(erform)h(some)g(algebra)g(or,)f(m)o(uc)o(h)h(w)o(orse,)f(to)g
+(exp)q(erimen)o(t)i(with)g(the)f(p)q(ositions)h(of)e(lines)j(and)e(v)o
+(ertices)74 1241 y(in)i(order)f(to)g(mak)o(e)f(the)i(appropriate)f(lines)i
+(connect)e(or)g(place)h(lab)q(els)h(in)f(the)f(desired)i(p)q(ositions.)145
+1298 y(F)l(ortunately)e(a)g(n)o(um)o(b)q(er)g(of)g(features)g(and)g(tric)o
+(ks)g(are)g(a)o(v)m(ailable)i(to)e(reduce)h(this)f(un)o(w)o(an)o(ted)g
+(tedium.)74 1419 y Fp(4.1.1)55 b(Arithmetic)16 b(Op)r(erations:)24
+b(Manipulating)18 b(Returned)g(P)n(arameters)74 1505 y FE(The)f(most)f
+(common)g(placemen)o(t)h(problems)h(o)q(ccur)f(when)g(lab)q(els)h(are)f(used)
+g(or)f(closed)h(structures,)g(suc)o(h)74 1561 y(as)e(lo)q(ops,)g(are)g
+(included.)22 b(W)l(e'v)o(e)15 b(seen)h(n)o(umerous)f(examples)h(of)f(lo)q
+(ops.)20 b(Those)15 b(whic)o(h)h(in)o(v)o(olv)o(e)g(fermions)74
+1618 y(and,)23 b(to)e(a)g(lesser)h(exten)o(t)f(scalars,)h(are)f(most)g
+(easily)h(constructed.)39 b(Re-examining)24 b(the)d(example)h(in)74
+1674 y(section)f(2.10.2)d(and)i(the)g(problems)g(p)q(osed)h(at)e(the)h
+(conclusions)i(of)d(sections)h(2.9.2,)f(2.10.2,)g(and)h(2.12)74
+1731 y(w)o(e)i(note)g(one)g(thing)g(in)h(common.)40 b(Eac)o(h)21
+b(in)o(v)o(olv)o(es)i(dra)o(wing)f(a)f(fermion)h(whic)o(h)h(is)g(the)f(same)f
+(\(or)g(a)74 1787 y(simple)k(constan)o(t)e(times)h(the\))g(length)h(of)e(a)g
+(gluon)i(or)e(photon.)46 b(These)24 b(mak)o(e)f(use)h(of)g(the)g(v)m(arious)
+74 1844 y Fk(\\length)10 b FE(parameters)g(whic)o(h)i(are)e(returned)i(when)f
+(a)g(line)h(is)f(dra)o(wn:)18 b Fk(\\gluonlengthx)p FE(,)9
+b Fk(\\gluonlengthy)p FE(,)74 1900 y Fk(\\photonlengthx)p FE(,)20
+b Fk(\\photonlengthy)p FE(,)f Fk(\\fermionlengthx)p FE(,)g
+Fk(\\fermionlengthy)p FE(,)g Fk(\\scalarlengthx)p FE(,)74 1957
+y(and)j Fk(\\scalarlengthy)p FE(,)f(as)g(w)o(ell)h(as)f Fk(\\plengthx)g
+FE(and)g Fk(\\plengthy)p FE(,)h(whic)o(h)g(corresp)q(ond)g(to)f(the)h(pre-)74
+2013 y(vious)g(line.)41 b(Eac)o(h)22 b(of)f(these)h(has)f(a)h(sign)g(and)g
+(magnitude)g(dep)q(ending)i(up)q(on)e(the)g(direction)h(dra)o(wn.)74
+2069 y Fk(\\fermionlength)12 b FE(is)h(an)h(esp)q(ecially)i(useful)e
+(additional)h(measure)e(whose)g(length)h(is)g(alw)o(a)o(ys)f(p)q(ositiv)o(e)h
+(and)74 2126 y(equal)19 b(to)f(the)g(en)o(tire)h(length)g(of)f(the)g
+(previously)h(dra)o(wn)f(fermion.)30 b(It)18 b(is)h(often)f(more)f
+(di\016cult)j(to)e(pre-)74 2182 y(pare)e(lo)q(ops)g(when)h(the)f
+Fs(n)p FE(dra)o(wv)o(ertex)e(statemen)o(t)h(has)h(b)q(een)h(used)f(since)h
+(only)g(the)f(length)h(of)e(one)h(line)i(is)74 2239 y(recorded.)i(This)c(w)o
+(as)f(eviden)o(t)h(in)g(the)f(example)h(is)g(section)g(3.8.2.)145
+2295 y(It)c(is)h(often)g(desirable)h(to)e(kno)o(w)g(the)g(separation)h(of)f
+(t)o(w)o(o)f(arbitrary)h(p)q(oin)o(ts,)h(p)q(erhaps)g(on)g(t)o(w)o(o)e
+(di\013eren)o(t)74 2352 y(F)l(eynman)i(diagrams)g(or)g(b)q(et)o(w)o(een)g(p)q
+(oin)o(ts)h(in)f(di\013eren)o(t)h(sub-branc)o(hes)g(of)e(a)h(single)h
+(diagram.)19 b(Since)c(these)74 2408 y(p)q(oin)o(ts)i(will,)i(in)f(general,)f
+(b)q(e)h(at)e(co-ordinates)h(unkno)o(wn)g(to)g(the)g(user,)g(the)g(abilit)o
+(y)h(to)e(p)q(erform)h(simple)74 2465 y(arithmetic)f(within)g(the)g(T)539
+2474 y(E)564 2465 y(X)f(\014le)i(is)e(needed.)145 2521 y(T)170
+2531 y(E)195 2521 y(X)g(de\014nes)i(the)e(follo)o(wing)h(useful)g(commands:)
+74 2669 y Fk(\\global\\advance)46 b(<variable)22 b(name>)i(by)f(<increment)47
+b(\(number)23 b(or)g(variable\)>)74 2725 y(\\global\\multiply)f(<variable)g
+(name>)i(by)f(<multiplier)g(\(number)g(or)g(variable\)>)74
+2781 y(\\global\\divide)70 b(<variable)22 b(name>)i(by)f(<divisor)95
+b(\(number)23 b(or)g(variable\)>)985 2906 y FE(44)p eop
+%%Page: 45 50
+bop 74 -2 a FE(where,)15 b(as)g(usual,)h Fk(<,>)e FE(are)h(not)g(part)g(of)f
+(the)i(syn)o(tax.)j(In)d(addition)g Fp(FEYNMAN)g FE(pro)o(vides:)74
+135 y Fk(\\negate)166 b(<variable)23 b(name>)74 191 y(\\double)166
+b(<variable)23 b(name>)74 248 y(\\multroothalf)f(<variable)h(name>)145
+385 y FE(In)18 b(eac)o(h)g(case)f(the)h(v)m(ariable)h(name,)f(suc)o(h)g(as)f
+Fs(n)p FE(fermionlength,)h(will)i(b)q(e)e(an)f(in)o(teger)h(and)g(the)g
+(result)74 441 y(will)d(b)q(e)g(an)e(in)o(teger)h(\(rounded\).)19
+b(The)14 b(\014rst)g(three)f(add,)h(m)o(ultiply)h(and)f(divide)i(resp)q
+(ectiv)o(ely)l(.)21 b(The)14 b(second)74 498 y(three)e(m)o(ultiply)h(b)o(y)f
+(min)o(us)g(one,)h(m)o(ultiply)g(b)o(y)f(t)o(w)o(o,)e(and)i(m)o(ultiply)i(b)o
+(y)1324 480 y Fn(1)p 1309 487 48 2 v 1309 492 a Fw(p)p 1339
+492 18 2 v 1339 519 a Fn(2)1373 498 y FE(resp)q(ectiv)o(ely)l(.)21
+b(Eac)o(h)11 b(represen)o(ts)74 562 y(an)k Fo(action)p FE(,)g(not)g(a)g
+(result.)20 b(Th)o(us)15 b(to)g(subtract)f Fs(n)p FE(Y)h(from)g
+Fs(n)p FE(X)g(y)o(ou)g(w)o(ould)g(en)o(ter)74 699 y Fk(\\negate\\Y)74
+755 y(\\global\\advance)22 b(\\X)i(by)f(\\Y)74 892 y FE(but)f
+Fu(not)p FE(:)33 b Fk(\\global\\advance)21 b(\\X)j(by)g(\\negate\\Y)p
+FE(.)19 b(\(F)l(or)i(the)h(cognoscen)o(te)f(y)o(ou)g(m)o(ust)g(expand)h(the)
+74 949 y(tok)o(en)15 b(\\)p Fs(n)p FE(negate)f Fs(n)p FE(Y")h(\014rst\).)k
+(Note)c(that)f(L)831 943 y Ft(a)852 949 y FE(T)877 962 y(E)903
+949 y(X)h(de\014nes)i(the)e(commands:)74 1086 y Fk(\\newcounter{<variable)21
+b(name>})74 1142 y(\\setcounter{<variable)g(name><variable)h(value})74
+1199 y(\\addtocounter{<variable)f(name><increment>})74 1336
+y FE(but)15 b(that)g Fk(\\addtocounter)e FE(should)j(not)e(b)q(e)i(used)g
+(with)f Fp(FEYNMAN)g FE(unless)i(the)e(v)m(ariable)h(has)f(b)q(een)74
+1392 y(user-de\014ned)i(\(see)e(section)h(4.2\))e Fo(with)j
+Fs(n)p Fo(newc)n(ounter)p FE(.)145 1448 y(As)12 b(an)h(example)h(consider)f
+(lab)q(elling)j(the)d(midp)q(oin)o(t)h(of)e(a)g(particle)i(line.)21
+b(Supp)q(ose)14 b(that)e(the)g(follo)o(wing)74 1505 y(is)k(desired:)p
+720 1790 2 2 v 720 1816 a Fz(\011)p 695 1816 V 772 1738 V 772
+1764 a(\011)p 747 1764 V 824 1686 V 824 1712 a(\011)p 799 1712
+V 876 1635 V 876 1660 a(\011)p 851 1660 V 927 1583 V 927 1608
+a(\011)p 902 1608 V 668 1816 a(\013)p 668 1841 V 694 1816 V
+720 1764 a(\013)p 720 1789 V 746 1764 V 772 1712 a(\013)p 772
+1737 V 798 1712 V 824 1660 a(\013)p 824 1685 V 849 1660 V 876
+1608 a(\013)p 876 1634 V 901 1608 V 826 1730 a Fx(\015)145
+1937 y FE(Where)g(the)h(lab)q(el)h(is)f(at)e(the)i(midp)q(oin)o(t)g(of)f(the)
+h(photon)f(on)g(the)h(lo)o(w)o(er)f(side.)24 b(The)17 b Fo(true)g
+FE(\(geometric\))74 1993 y(midp)q(oin)o(t)g(is)e(at)g(the)g(co-ordinates)h
+(\()p Fs(n)p FE(pmidx,)p Fs(n)p FE(pmidy\).)k(Ho)o(w)o(ev)o(er)14
+b(if)i(w)o(e)f(try:)74 2130 y Fk(\\begin{picture}\(8000,8000\))74
+2187 y(\\drawline\\photon[\\NE\\REG]\(0)o(,0\)[10])74 2243
+y(\\put\(\\pmidx,\\pmidy\){$\\gamma)o($})74 2300 y(\\end{picture})74
+2437 y FE(w)o(e'd)g(pro)q(duce:)p 720 2731 V 720 2756 a Fz(\011)p
+695 2756 V 772 2679 V 772 2704 a(\011)p 747 2704 V 824 2627
+V 824 2653 a(\011)p 799 2653 V 876 2575 V 876 2601 a(\011)p
+851 2601 V 927 2523 V 927 2549 a(\011)p 902 2549 V 668 2756
+a(\013)p 668 2781 V 694 2756 V 720 2704 a(\013)p 720 2730 V
+746 2704 V 772 2653 a(\013)p 772 2678 V 798 2653 V 824 2601
+a(\013)p 824 2626 V 849 2601 V 876 2549 a(\013)p 876 2574 V
+901 2549 V 799 2652 a Fx(\015)985 2906 y FE(45)p eop
+%%Page: 46 51
+bop 145 -83 a FE(One)14 b(w)o(ould)g(lik)o(e)h(to)e(mo)o(v)o(e)f(the)i(`)p
+Fx(\015)s FE(')e(ab)q(out)h(t)o(w)o(o)f(millimeters)k(to)d(the)h(righ)o(t)f
+(and)h(ab)q(out)f(one)h(and)f(a)h(half)74 -26 y(millimeters)j(do)o(wn.)j
+(This)c(ma)o(y)e(b)q(e)i(readily)h(accomplished)g(with:)74
+124 y Fk(\\begin{picture}\(8000,8000\))74 180 y
+(\\drawline\\photon[\\NE\\REG]\(0)o(,0\)[10])74 237 y
+(\\global\\advance\\pmidx)k(by)j(650)74 293 y(\\global\\advance\\pmidy)d(by)j
+(-450)74 350 y(\\put\(\\pmidx,\\pmidy\){$\\gamma)o($})74 406
+y(\\end{picture})74 556 y FE(The)19 b(exact)g(v)m(alues)h(used)g(are)e(a)h
+(question)g(of)g(st)o(yle)g(and)g(one)g(will)i(frequen)o(tly)e(exp)q(erimen)o
+(t)h(to)e(ac)o(hiev)o(e)74 613 y(particular)e(\032stetics.)145
+669 y(A)c(frequen)o(t)f(use)i(of)e Fs(n)p FE(m)o(ultro)q(othalf)g(o)q(ccurs)i
+(when)f(one)g(desires)h(to)e(mak)o(e)g(a)h(horizon)o(tal)g(or)f(v)o(ertical)h
+(line)74 726 y(the)j(same)f(length)h(as)f(a)h(slan)o(ted)f(line)j(\(or)c
+(vice-v)o(ersa\).)20 b(As)15 b(a)f(simple)i(exercise,)f(repro)q(duce)h(the)e
+(follo)o(wing)74 782 y(diagram)20 b(for)g(Delbr)q(\177)-24
+b(uc)o(k)21 b(scattering)f(where)g(all)h(lines)h(are)e(of)g(precisely)i(the)e
+(same)g(length.)36 b(Begin)21 b(b)o(y)74 839 y(dra)o(wing)15
+b(a)g(photon.)p 368 985 2 2 v 368 1011 a Fz(\012)p 394 1011
+V 420 1037 V 420 1063 a(\012)p 446 1063 V 472 1089 V 472 1115
+a(\012)p 498 1115 V 420 1011 a(\010)p 420 1036 V 395 1011 V
+472 1063 a(\010)p 472 1088 V 447 1063 V 524 1115 a(\010)p 524
+1140 V 499 1115 V 525 1141 221 2 v 796 1089 2 2 v 222 w(\011)p
+771 1115 V 847 1037 V 847 1063 a(\011)p 822 1063 V 899 985
+V 899 1011 a(\011)p 874 1011 V 744 1115 a(\013)p 744 1140 V
+770 1115 V 796 1063 a(\013)p 796 1088 V 821 1063 V 847 1011
+a(\013)p 847 1036 V 873 1011 V 744 1360 2 221 v 744 1361 2
+2 v 744 1387 a(\012)p 770 1387 V 796 1413 V 796 1438 a(\012)p
+821 1438 V 847 1464 V 847 1490 a(\012)p 873 1490 V 796 1387
+a(\010)p 796 1412 V 771 1387 V 847 1438 a(\010)p 847 1463 V
+822 1438 V 899 1490 a(\010)p 899 1515 V 874 1490 V 525 1361
+221 2 v 524 1361 2 2 v 524 1387 a(\011)p 499 1387 V 472 1413
+V 472 1438 a(\011)p 447 1438 V 420 1464 V 420 1490 a(\011)p
+395 1490 V 472 1387 a(\013)p 472 1412 V 498 1387 V 420 1438
+a(\013)p 420 1463 V 446 1438 V 368 1490 a(\013)p 368 1515 V
+394 1490 V 524 1360 2 221 v 145 1653 a FE(As)e(a)f(\014nal)i(example)g(w)o(e)
+f(consider)h(the)f(follo)o(wing)g(case,)g(whic)o(h)h(is)g(the)f(lo)o(w)o(est)
+f(order)h(QED)g(correction)74 1710 y(to)j(Coulom)o(b)g(scattering)f(of)h(a)g
+(lepton)g(from)g(a)f(n)o(ucleus)j(whic)o(h)e(distinguishes)j(b)q(et)o(w)o
+(een)d(a)g(p)q(ositron)g(and)74 1766 y(an)f(electron.)p 627
+2209 4 2 v 627 2236 a Fh(\011)p 602 2236 2 4 v 679 2157 4 2
+v 679 2184 a(\011)p 654 2184 2 4 v 730 2105 4 2 v 730 2132
+a(\011)p 706 2132 2 4 v 575 2236 a(\013)p 575 2260 4 2 v 601
+2236 2 4 v 627 2184 a(\013)p 627 2208 4 2 v 653 2184 2 4 v
+679 2132 a(\013)p 679 2156 4 2 v 705 2132 2 4 v 732 2106 110
+4 v 691 2104 a Ff(@)654 2068 y(@)p 653 2027 4 110 v 628 2029
+a Fh(\013)p 628 2053 4 2 v 654 2029 2 4 v 576 2080 a(\013)p
+576 2104 4 2 v 602 2080 2 4 v 524 2132 a(\013)p 524 2156 4
+2 v 551 2132 2 4 v 472 2184 a(\013)p 472 2208 4 2 v 499 2184
+2 4 v 420 2236 a(\013)p 420 2260 4 2 v 447 2236 2 4 v 628 2054
+4 2 v 628 2080 a(\011)p 603 2080 2 4 v 576 2105 4 2 v 576 2132
+a(\011)p 552 2132 2 4 v 524 2157 4 2 v 524 2184 a(\011)p 500
+2184 2 4 v 472 2209 4 2 v 472 2236 a(\011)p 448 2236 2 4 v
+421 2262 291 4 v 296 2262 125 4 v 296 2283 415 4 v 296 2303
+V 985 2906 a FE(46)p eop
+%%Page: 47 52
+bop 145 -83 a FE(Here)14 b(the)f(problem)i(is)f(ho)o(w)f(to)g(space)h(the)g
+(t)o(w)o(o)e(photon)i(lines,)h(whic)o(h)f(di\013er)g(in)h(length)f(b)o(y)g
+(three)g(half-)74 -26 y(wiggles,)i(suc)o(h)g(that)f(b)q(oth)h(will)h(connect)
+f(smo)q(othly)g(to)f(the)h(fermions.)22 b(T)l(o)15 b(facilitate)i(this)f(w)o
+(e)f(in)o(tro)q(duce)74 30 y(t)o(w)o(o)f(new)h(v)m(ariables)i(whic)o(h)f(are)
+f(returned)g(b)o(y)g Fs(n)p FE(dra)o(wline)h(and)f Fs(n)p FE(dra)o(wv)o
+(ertex)f(\(and)h(also)g(b)o(y)g Fs(n)p FE(dra)o(wlo)q(op\):)74
+87 y Fs(n)p Fo(unitb)n(oxwidth)23 b FE(and)f Fs(n)p Fo(unitb)n(oxheight)p
+FE(.)42 b(They)22 b(are)g(\(resp)q(ectiv)o(ely\))i(the)e(width)h(and)g(heigh)
+o(t)g(\(x)f(and)g(y)74 143 y(exten)o(ts\))16 b(of)g(the)g Fu(smallest)k
+(complete)f(unit)f FE(of)e(the)g(previously)i(line.)26 b(F)l(or)15
+b(a)h(gluon)h(this)g(is)g(one)g(lo)q(op,)74 199 y(for)12 b(a)g(photon)h(an)f
+Fo(entir)n(e)g FE(wiggle,)h(for)f(a)g(scalar)h(one)g(segmen)o(t)f(plus)h(one)
+g(gap)f(and)h(for)f(a)g(fermion)h(the)g(en)o(tire)74 256 y(length.)21
+b(Of)15 b(course)g(one)h(can)f(equally)i(w)o(ell)f(use)f(a)74
+350 y Fk(\\global\\divide\\gluonlengthx)20 b(by)k(<number)f(of)g(loops>)74
+444 y FE(and)16 b(so)e(forth)h(to)f(obtain)i(the)f(equiv)m(alen)o(t)i(v)m
+(alue.)k(Using)16 b(these)f(the)h(ab)q(o)o(v)o(e)e(ma)o(y)h(b)q(e)h(quic)o
+(kly)g(dra)o(wn:)74 594 y Fk(\\hskip)23 b(0.75in)74 650 y
+(\\begin{picture}\(10000,10000)o(\)\(0,0\))74 707 y(\\THICKLINES)74
+763 y(\\drawline\\photon[\\NE\\REG]\(5)o(000,0\)[6)o(])74 820
+y(\\multiply\\unitboxheight)e(by)i(3)74 876 y(\\multroothalf\\unitboxheight)
+74 933 y(\\drawline\\fermion[\\E\\REG]\(\\)o(photonba)o(ckx,\\ph)o(otonbac)o
+(ky\)[\\uni)o(tboxhei)o(ght])74 989 y(\\drawline\\fermion[\\NW\\REG]\()o
+(\\photonb)o(ackx,\\p)o(hotonba)o(cky\)[\\fe)o(rmionle)o(ngth])74
+1045 y(\\drawline\\fermion[\\N\\REG]\(\\)o(fermionb)o(ackx,\\f)o(ermionb)o
+(acky\)[\\f)o(ermionl)o(ength])74 1102 y(\\drawline\\photon[\\SW\\FLIPPE)o
+(D]\(\\ferm)o(ionfron)o(tx,\\fer)o(mionfron)o(ty\)[9])74 1158
+y(\\drawline\\fermion[\\E\\REG]\(\\)o(photonba)o(ckx,\\ph)o(otonbac)o
+(ky\)[7000)o(])74 1215 y(\\drawline\\fermion[\\W\\REG]\(\\)o(photonba)o
+(ckx,\\ph)o(otonbac)o(ky\)[3000)o(])74 1271 y
+(\\drawline\\fermion[\\E\\REG]\(\\)o(fermionb)o(ackx,-5)o(00\)[100)o(00])74
+1328 y(\\drawline\\fermion[\\W\\REG]\(\\)o(fermionb)o(ackx,-1)o(000\)[10)o
+(000])74 1384 y(\\end{picture})74 1534 y FE(Since)18 b(\\)p
+Fs(n)p FE(particlelengthx",)e Fo(etc.)h FE(represen)o(t)f(the)g
+Fo(extent)p FE(,)f(or)g(incremen)o(t,)i(of)e(the)h(previous)h(line)g(they)f
+(are)74 1591 y(often)f(negativ)o(e.)20 b(F)l(or)14 b(a)h(gluon)h(dra)o(wn)e
+(in)i(the)f Fs(n)p FE(SW)g(direction,)h(for)e(instance,)i(b)q(oth)f
+Fs(n)p FE(gluonlengthx)h(and)74 1647 y Fs(n)p FE(gluonlength)o(y)h(are)e
+(negativ)o(e.)22 b(When)16 b(using)h(these)f(to)f(compare)h(lengths)g(one)g
+(m)o(ust)g(generally)h(emplo)o(y)74 1704 y(the)g(\\)p Fs(n)p
+FE(negate")e(command.)23 b(An)17 b(alternativ)o(e)f(is)h(to)f(use)g
+Fs(n)p Fo(b)n(oxlengthx)g FE(and)g Fs(n)p Fo(b)n(oxlengthy)f
+FE(whic)o(h)i(giv)o(e)g(the)74 1760 y Fo(absolute)g(magnitudes)g
+FE(of)f(the)g(length)h(parameters.)22 b(There)17 b(are)f(a)g(few)g
+(instances,)h(ho)o(w)o(ev)o(er,)e(where)i(the)74 1817 y(t)o(w)o(o)d(migh)o(t)
+h(not)g(matc)o(h)g(\(see)g(the)g(sections)h(on)f(stems)g(and)g(caps\).)145
+1873 y(The)20 b(placemen)o(t)g(of)f(arro)o(ws)f(sometimes)i(requires)h
+(\014ne)f(adjustmen)o(ts)f(as)g(w)o(ell.)34 b(As)20 b(an)g(additional)74
+1930 y(exercise)c(try)f(to)g(dra)o(w)f(the)h(follo)o(wing)h(as)f(closely)i
+(as)d(p)q(ossible.)22 b(Use)15 b(a)g(12-p)q(oin)o(t)h(do)q(cumen)o(t)f(size.)
+763 2036 y(Drell-Y)l(an)i(W-Pro)q(duction)1004 2253 y Fg(_)34
+b(_)g(_)g(_)h(_)f(_)1045 2263 y(^)h(^)f(^)g(^)g(^)1004 2254
+y(_)g(_)g(_)g(_)h(_)f(_)1045 2265 y(^)h(^)f(^)g(^)g(^)1210
+2255 y Ff(-)1237 2214 y Fx(W)1286 2198 y Fn(+)966 2247 y Ff(@)924
+2206 y(@)883 2164 y(@)846 2128 y(@)896 2177 y(R)946 2160 y
+FE(q)966 2289 y Ff(\000)924 2331 y(\000)883 2372 y(\000)846
+2409 y(\000)917 2338 y(\011)p 946 2335 22 2 v 946 2360 a Fx(q)968
+2343 y Fw(0)1465 2247 y Ff(\000)1506 2206 y(\000)1548 2164
+y(\000)1584 2128 y(\000)1536 2177 y(\011)1488 2160 y Fx(e)1509
+2144 y Fn(+)1465 2289 y Ff(@)1506 2331 y(@)1548 2372 y(@)1584
+2409 y(@)1515 2338 y(R)1496 2360 y Fx(\027)985 2906 y FE(47)p
+eop
+%%Page: 48 53
+bop 74 -83 a Fp(4.1.2)55 b(Phan)n(tom)19 b(Commands)74 3 y
+FE(It)14 b(will)i(sometimes)e(happ)q(en,)h(generally)g(when)f(v)o(ertices)h
+(and)f(lo)q(ops)g(are)g(in)o(v)o(olv)o(ed,)h(that)e(one)h(wishes)h(that)74
+59 y(one)h(could)g(dra)o(w)e(an)i(in)o(visible)i(line;)e(one)g(whic)o(h)g(w)o
+(ould)f(not)g(actually)h(app)q(ear)g(in)g(the)f(\014nal)h(v)o(ersion)g(of)e
+(a)74 116 y(diagram.)24 b(This)17 b(is)g(almost)f(alw)o(a)o(ys)g(the)g
+(result)h(of)f(an)h(alignmen)o(t)g(problem.)24 b(F)l(or)16
+b(instance)i(if,)f(for)e(some)74 172 y(reason,)h(y)o(ou)g(wished)h(to)f(dra)o
+(w)f(t)o(w)o(o)g(photons,)h(parallel)i(to)d(one)i(another,)e(whose)h(spacing)
+h(w)o(as)f(equal)h(to)74 229 y(a)d Fo(gluon)g FE(of)f(\014v)o(e)i(lo)q(ops)f
+(in)h(a)f(certain)g(con\014guration.)20 b(This)15 b(migh)o(t)f(b)q(e)g(for)g
+(an)g(o)o(v)o(erla)o(y)f(of)h(a)f(transparency)l(.)74 285 y(One)j(w)o(ould)g
+(lik)o(e)g(to)f(connect)g(the)h(ends)f(of)g(the)g(photons)g(with)h(a)f
+Fo(phantom)h FE(gluon.)145 342 y(The)h(solution)h(to)e(this)i(problem)f(is)h
+(to)e(dra)o(w)g(the)i(line)g(in)g Fu(phan)o(tom)f FE(mo)q(de.)26
+b(An)o(y)17 b Fp(FEYNMAN)74 398 y FE(commands)e(b)q(et)o(w)o(een)h(the)f
+(statemen)o(ts:)74 548 y Fk(\\startphantom)193 605 y(.)193
+661 y(.)193 718 y(.)74 774 y(\\stopphantom)74 925 y FE(are)h(p)q(erformed)g
+(but)h(are)e(not)h(prin)o(ted.)24 b(In)17 b(particular)f(all)h(of)f(the)g
+(returned)h(parameters)e(are)h(ev)m(aluated)74 981 y(as)i(if)i(the)e(lines)i
+(and)f(v)o(ertices)g(had)g(actually)h(b)q(een)f(pro)q(duced.)32
+b(Note)18 b(also)h(that)f Fp(FEYNMAN)p FE('s)g(in-)74 1037
+y(ternal)g(w)o(orking)e(resources)i(are)e(similarly)j(depleted.)28
+b(The)17 b(one)g(item)h(that)e(will)j(still)g(b)q(e)f(prin)o(ted)g(while)74
+1094 y Fs(n)p FE(startphan)o(tom)e(is)i(in)h(e\013ect)f(is)g(a)g(lab)q
+(elling)i(command)e(\(or)f(an)o(y)h(use)g(of)f Fs(n)p FE(put\).)28
+b Fs(n)p FE(startphan)o(tom)16 b(do)q(es)74 1150 y(not)f(extend)i(b)q(ey)o
+(ond)f(the)g(con\014nes)g(of)g(the)g(giv)o(en)g(picture.)22
+b(The)16 b(follo)o(wing)h(is)f(a)f(classic)i(example)g(of)e(the)74
+1207 y(use)h(of)e(phan)o(tom)h(commands)g(in)h(conjunction)g(with)g
+Fs(n)p FE(dra)o(wv)o(ertex:)p 932 2132 2 5 v 932 2175 a Fz(\021)p
+887 2175 5 2 v 894 2170 2 5 v 894 2212 a(\021)p 850 2212 5
+2 v 857 2207 2 5 v 857 2249 a(\021)p 812 2249 5 2 v 820 2244
+2 5 v 820 2287 a(\021)p 775 2287 5 2 v 782 2282 2 5 v 782 2324
+a(\021)p 738 2324 5 2 v 878 2165 2 1 v 878 2175 a(\002)p 887
+2175 1 2 v 840 2203 2 1 v 840 2212 a(\002)p 850 2212 1 2 v
+803 2240 2 1 v 803 2249 a(\002)p 812 2249 1 2 v 766 2277 2
+1 v 766 2287 a(\002)p 775 2287 1 2 v 878 2158 a(\003)p 878
+2165 2 1 v -1 w(\000)p 894 2165 V 887 2158 1 2 v 840 2195 a(\003)p
+840 2202 2 1 v(\000)p 857 2202 V 850 2195 1 2 v 803 2233 a(\003)p
+803 2240 2 1 v(\000)p 820 2240 V 812 2233 1 2 v 766 2270 a(\003)p
+766 2277 2 1 v -1 w(\000)p 782 2277 V 775 2270 1 2 v 925 2085
+a(\013)p 925 2110 2 2 v 951 2085 V 925 2050 a(\013)p 925 2075
+V 951 2050 V 925 2015 a(\013)p 925 2040 V 951 2015 V 925 1979
+a(\013)p 925 2004 V 951 1979 V 957 2085 a(\000)p 957 2093 2
+1 v 957 2102 a(\001)p 950 2102 1 2 v 950 2085 V 957 2050 a(\000)p
+957 2057 2 1 v 957 2066 a(\001)p 950 2066 1 2 v 950 2050 V
+957 2015 a(\000)p 957 2022 2 1 v 957 2031 a(\001)p 950 2031
+1 2 v 950 2015 V 957 1979 a(\000)p 957 1987 2 1 v 957 1996
+a(\001)p 950 1996 1 2 v 950 1979 V 925 2076 2 2 v 925 2102
+a(\012)p 951 2102 V 925 2041 V 925 2066 a(\012)p 951 2066 V
+925 2005 V 925 2031 a(\012)p 951 2031 V 925 1970 V 925 1996
+a(\012)p 951 1996 V 975 2111 V 141 x(\011)p 950 2137 V 1010
+2111 V -15 w(\011)p 985 2137 V 1046 2111 V -14 w(\011)p 1021
+2137 V 1081 2111 V -15 w(\011)p 1056 2137 V 958 2104 a(\003)p
+958 2111 2 1 v(\000)p 975 2111 V 968 2104 1 2 v 2 w(\003)p
+994 2111 2 1 v -1 w(\000)p 1010 2111 V 1003 2104 1 2 v 2 w(\003)p
+1029 2111 2 1 v(\000)p 1046 2111 V 1038 2104 1 2 v 1 w(\003)p
+1064 2111 2 1 v(\000)p 1081 2111 V 1073 2104 1 2 v 959 2111
+2 2 v 959 2137 a(\012)p 984 2137 V 994 2111 V -15 w(\012)p
+1020 2137 V 1029 2111 V -15 w(\012)p 1055 2137 V 1064 2111
+V -15 w(\012)p 1090 2137 V 925 2111 V -189 w(\012)p 951 2137
+V 737 2406 2 83 v 655 2324 83 2 v 887 1769 2 5 v 887 1811 a(\022)p
+929 1811 5 2 v 849 1731 2 5 v 849 1774 a(\022)p 892 1774 5
+2 v 812 1694 2 5 v 812 1736 a(\022)p 854 1736 5 2 v 775 1657
+2 5 v 775 1699 a(\022)p 817 1699 5 2 v 737 1619 2 5 v 737 1662
+a(\022)p 780 1662 5 2 v 887 1757 a(\003)p 887 1764 2 1 v 896
+1757 1 2 v 849 1720 a(\003)p 849 1727 2 1 v 858 1720 1 2 v
+812 1682 a(\003)p 812 1689 2 1 v 821 1682 1 2 v 774 1645 a(\003)p
+774 1652 2 1 v 784 1645 1 2 v 903 1757 a(\000)p 903 1765 2
+1 v 903 1774 a(\001)p 896 1774 1 2 v 896 1757 V 866 1720 a(\000)p
+866 1727 2 1 v 866 1736 a(\001)p 858 1736 1 2 v 858 1720 V
+828 1682 a(\000)p 828 1690 2 1 v 828 1699 a(\001)p 821 1699
+1 2 v 821 1682 V 791 1645 a(\000)p 791 1652 2 1 v 791 1662
+a(\001)p 784 1662 1 2 v 784 1645 V 976 1804 a(\010)p 976 1828
+2 2 v 950 1804 V -15 w(\010)p 1011 1828 V 986 1804 V -15 w(\010)p
+1046 1828 V 1021 1804 V -15 w(\010)p 1081 1828 V 1056 1804
+V 959 1826 2 1 v 959 1836 a(\002)p 976 1826 V(\001)p 968 1836
+1 2 v 994 1826 2 1 v 1 w(\002)p 1011 1826 V(\001)p 1003 1836
+1 2 v 1029 1826 2 1 v 1 w(\002)p 1046 1826 V(\001)p 1039 1836
+1 2 v 1065 1826 2 1 v 2 w(\002)p 1081 1826 V -1 w(\001)p 1074
+1836 1 2 v 959 1804 a(\013)p 959 1828 2 2 v 985 1804 V -15
+w(\013)p 994 1828 V 1020 1804 V -15 w(\013)p 1029 1828 V 1055
+1804 V -14 w(\013)p 1065 1828 V 1090 1804 V 925 1829 V 925
+1855 a(\012)p 951 1855 V 925 1865 V 925 1890 a(\012)p 951 1890
+V 925 1900 V 925 1926 a(\012)p 951 1926 V 925 1935 V 925 1961
+a(\012)p 951 1961 V 957 1839 a(\000)p 957 1846 2 1 v 957 1855
+a(\001)p 950 1855 1 2 v 950 1839 V 957 1874 a(\000)p 957 1881
+2 1 v 957 1891 a(\001)p 950 1891 1 2 v 950 1874 V 957 1909
+a(\000)p 957 1917 2 1 v 957 1926 a(\001)p 950 1926 1 2 v 950
+1909 V 957 1944 a(\000)p 957 1952 2 1 v 957 1961 a(\001)p 950
+1961 1 2 v 950 1944 V 925 1839 a(\013)p 925 1864 2 2 v 951
+1839 V 925 1874 a(\013)p 925 1899 V 951 1874 V 925 1909 a(\013)p
+925 1934 V 951 1909 V 925 1944 a(\013)p 925 1970 V 951 1944
+V 925 1803 a(\013)p 925 1828 V 951 1803 V 655 1616 83 2 v 737
+1615 2 83 v 1294 2129 a(\020)p 1294 2174 2 5 v 1250 2129 5
+2 v 1332 2166 a(\020)p 1332 2211 2 5 v 1287 2166 5 2 v 1369
+2204 a(\020)p 1369 2248 2 5 v 1324 2204 5 2 v 1406 2241 a(\020)p
+1406 2286 2 5 v 1362 2241 5 2 v 1444 2278 a(\020)p 1444 2323
+2 5 v 1399 2278 5 2 v 1294 2174 2 1 v 1294 2183 a(\001)p 1287
+2183 1 2 v 1332 2211 2 1 v 1332 2220 a(\001)p 1324 2220 1 2
+v 1369 2248 2 1 v 1369 2258 a(\001)p 1362 2258 1 2 v 1406 2286
+2 1 v 1406 2295 a(\001)p 1399 2295 1 2 v 1278 2166 a(\003)p
+1278 2174 2 1 v 1278 2183 a(\002)p 1287 2183 1 2 v 1287 2166
+V 1315 2204 a(\003)p 1315 2211 2 1 v 1315 2220 a(\002)p 1324
+2220 1 2 v 1324 2204 V 1352 2241 a(\003)p 1352 2248 2 1 v 1352
+2258 a(\002)p 1362 2258 1 2 v 1362 2241 V 1390 2278 a(\003)p
+1390 2286 2 1 v 1390 2295 a(\002)p 1399 2295 1 2 v 1399 2278
+V 1205 2111 2 2 v 1205 2137 a(\012)p 1231 2137 V 1170 2111
+V -85 w(\012)p 1196 2137 V 1135 2111 V -85 w(\012)p 1161 2137
+V 1100 2111 V -85 w(\012)p 1125 2137 V 1205 2104 a(\003)p 1205
+2111 2 1 v(\000)p 1222 2111 V 1214 2104 1 2 v -69 w(\003)p
+1170 2111 2 1 v(\000)p 1187 2111 V 1179 2104 1 2 v -69 w(\003)p
+1135 2111 2 1 v -1 w(\000)p 1151 2111 V 1144 2104 1 2 v -68
+w(\003)p 1100 2111 2 1 v -1 w(\000)p 1116 2111 V 1109 2104
+1 2 v 1222 2111 2 2 v 1222 2137 a(\011)p 1197 2137 V 1187 2111
+V -85 w(\011)p 1162 2137 V 1151 2111 V -86 w(\011)p 1126 2137
+V 1116 2111 V -85 w(\011)p 1091 2137 V 1256 2086 a(\010)p 1256
+2111 V 1231 2086 V 1256 2050 a(\010)p 1256 2076 V 1231 2050
+V 1256 2015 a(\010)p 1256 2040 V 1231 2015 V 1256 1980 a(\010)p
+1256 2005 V 1231 1980 V 1224 2086 a(\003)p 1224 2093 2 1 v
+1224 2102 a(\002)p 1233 2103 1 2 v 1233 2086 V 1224 2050 a(\003)p
+1224 2058 2 1 v 1224 2067 a(\002)p 1233 2067 1 2 v 1233 2050
+V 1224 2015 a(\003)p 1224 2023 2 1 v 1224 2032 a(\002)p 1233
+2032 1 2 v 1233 2015 V 1224 1980 a(\003)p 1224 1987 2 1 v 1224
+1997 a(\002)p 1233 1997 1 2 v 1233 1980 V 1256 2077 2 2 v 1256
+2102 a(\011)p 1231 2103 V 1256 2041 V 1256 2067 a(\011)p 1231
+2067 V 1256 2006 V 1256 2032 a(\011)p 1231 2032 V 1256 1971
+V 1256 1996 a(\011)p 1231 1996 V 1257 2111 V 1257 2137 a(\011)p
+1232 2137 V 1445 2324 83 2 v 1444 2406 2 83 v 1249 1765 a(\023)p
+1249 1810 2 5 v 1291 1765 5 2 v 1286 1728 a(\023)p 1286 1773
+2 5 v 1328 1728 5 2 v 1323 1691 a(\023)p 1323 1735 2 5 v 1366
+1691 5 2 v 1361 1653 a(\023)p 1361 1698 2 5 v 1403 1653 5 2
+v 1398 1616 a(\023)p 1398 1661 2 5 v 1440 1616 5 2 v 1303 1765
+a(\000)p 1303 1772 2 1 v 1295 1765 1 2 v 1340 1728 a(\000)p
+1340 1735 2 1 v 1333 1728 1 2 v 1377 1691 a(\000)p 1377 1698
+2 1 v 1370 1691 1 2 v 1415 1653 a(\000)p 1415 1660 2 1 v 1407
+1653 1 2 v 1286 1773 2 1 v 1286 1782 a(\002)p 1303 1773 V(\001)p
+1295 1782 1 2 v 1323 1735 2 1 v 1323 1745 a(\002)p 1340 1735
+V(\001)p 1333 1745 1 2 v 1361 1698 2 1 v 1361 1707 a(\002)p
+1377 1698 V -1 w(\001)p 1370 1707 1 2 v 1398 1661 2 1 v 1398
+1670 a(\002)p 1415 1661 V(\001)p 1407 1670 1 2 v 1256 1829
+2 2 v 1256 1855 a(\011)p 1231 1855 V 1256 1865 V 1256 1890
+a(\011)p 1231 1890 V 1256 1900 V 1256 1926 a(\011)p 1231 1926
+V 1256 1935 V 1256 1961 a(\011)p 1231 1961 V 1224 1839 a(\003)p
+1224 1846 2 1 v 1224 1855 a(\002)p 1233 1855 1 2 v 1233 1839
+V 1224 1874 a(\003)p 1224 1881 2 1 v 1224 1891 a(\002)p 1233
+1891 1 2 v 1233 1874 V 1224 1909 a(\003)p 1224 1917 2 1 v 1224
+1926 a(\002)p 1233 1926 1 2 v 1233 1909 V 1224 1944 a(\003)p
+1224 1952 2 1 v 1224 1961 a(\002)p 1233 1961 1 2 v 1233 1944
+V 1256 1839 a(\010)p 1256 1864 2 2 v 1231 1839 V 1256 1874
+a(\010)p 1256 1899 V 1231 1874 V 1256 1909 a(\010)p 1256 1934
+V 1231 1909 V 1256 1944 a(\010)p 1256 1970 V 1231 1944 V 1205
+1804 a(\013)p 1205 1828 V 1231 1804 V -85 w(\013)p 1170 1828
+V 1196 1804 V -85 w(\013)p 1135 1828 V 1161 1804 V -85 w(\013)p
+1100 1828 V 1125 1804 V 1205 1826 2 1 v 1205 1836 a(\002)p
+1222 1826 V(\001)p 1214 1836 1 2 v 1170 1826 2 1 v -69 w(\002)p
+1187 1826 V(\001)p 1179 1836 1 2 v 1135 1826 2 1 v -69 w(\002)p
+1151 1826 V -1 w(\001)p 1144 1836 1 2 v 1100 1826 2 1 v -68
+w(\002)p 1116 1826 V -1 w(\001)p 1109 1836 1 2 v 1222 1804
+a(\010)p 1222 1828 2 2 v 1197 1804 V -85 w(\010)p 1187 1828
+V 1162 1804 V -86 w(\010)p 1151 1828 V 1126 1804 V -85 w(\010)p
+1116 1828 V 1091 1804 V 1257 1803 a(\010)p 1257 1828 V 1232
+1803 V 1445 1616 83 2 v 1444 1615 2 83 v 698 2550 a FE(The)f(n)o(um)o(b)q(er)
+h(of)e(v)o(ertices)i(\(including)i(phan)o(tom)c(v)o(ertices\))h(=)h(35)985
+2906 y(48)p eop
+%%Page: 49 54
+bop 145 -83 a FE(whic)o(h)16 b(is)f(pro)q(duced)i(b)o(y:)74
+67 y Fk(\\begin{picture}\(8000,8000\))74 124 y(\045)24 b(This)f(picture)g
+(isn't)g(printed)g(out.)47 b(The)24 b(\\drawvertex)e(statement)h(sets)g(up)h
+(some)74 180 y(\045)g(spacing)f(for)g(the)h(pic)f(below.)47
+b(It)24 b(tests)f(the)g(`phantom)g(mode')g(option.)74 237 y(\045)h(The)f
+(\\fermions)g(below)g(are)h(superfluous)e(and)h(merely)g(test)h
+(\\startphantom.)74 293 y(\\startphantom)74 350 y(\\drawvertex\\gluon[\\NE)d
+(3]\(0,0\)[4])74 406 y(\\drawline\\fermion[\\SW\\REG]\()o(\\vertexo)o
+(nex,\\ve)o(rtexone)o(y\)[2000])74 463 y(\\drawline\\fermion[\\SE\\REG]\()o
+(\\vertexo)o(nex,\\ve)o(rtexone)o(y\)[2000])74 519 y
+(\\drawline\\fermion[\\E\\REG]\(\\)o(vertextw)o(ox,\\ver)o(textwoy)o
+(\)[2000])74 576 y(\\drawline\\fermion[\\N\\REG]\(\\)o(vertextw)o(ox,\\ver)o
+(textwoy)o(\)[2000])74 632 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexth)o
+(reex,\\v)o(ertexth)o(reey\)[20)o(00])74 688 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(vertexth)o(reex,\\v)o(ertexth)o
+(reey\)[20)o(00])74 745 y(\\stopphantom)74 801 y(\\global\\Xtwo=\\vertextwox)
+45 b(\\global\\Ytwo=\\vertextwo)o(y)74 858 y(\\global\\Xthree=\\vertexthree)o
+(x)g(\\global\\Ythree=\\vertexthree)o(y)74 914 y(\\end{picture})74
+971 y(\\hskip)23 b(2.0in)74 1027 y(\\begin{picture}\(18000,18000)o(\))74
+1084 y(\\global\\Xone=\\Xthree)45 b(\\negate\\Xone)74 1140
+y(\\global\\Yone=\\Ytwo)93 b(\\negate\\Yone)74 1197 y
+(\\drawvertex\\gluon[\\NE)21 b(3]\(\\Xone,\\Yone\)[4])74 1253
+y(\\drawline\\fermion[\\S\\REG]\(\\)o(vertexon)o(ex,\\ver)o(texoney)o
+(\)[2000])74 1309 y(\\drawline\\fermion[\\W\\REG]\(\\)o(vertexon)o(ex,\\ver)o
+(texoney)o(\)[2000])74 1366 y(\\global\\Xone=\\Xthree)45 b(\\negate\\Xone)74
+1422 y(\\global\\Yone=\\Ytwo)93 b(\045\\negate\\Yone)74 1479
+y(\\drawvertex\\gluon[\\SE)21 b(3]\(\\Xone,\\Yone\)[4])74 1535
+y(\\drawline\\fermion[\\W\\REG]\(\\)o(vertexon)o(ex,\\ver)o(texoney)o
+(\)[2000])74 1592 y(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexon)o(ex,\\ver)o
+(texoney)o(\)[2000])74 1648 y(\\global\\Xone=\\Xthree)45 b
+(\045\\negate\\Yone)74 1705 y(\\global\\Yone=\\Ytwo)93 b(\\negate\\Yone)74
+1761 y(\\drawvertex\\gluon[\\NW)21 b(3]\(\\Xone,\\Yone\)[4])74
+1818 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexon)o(ex,\\ver)o(texoney)o
+(\)[2000])74 1874 y(\\drawline\\fermion[\\S\\REG]\(\\)o(vertexon)o(ex,\\ver)o
+(texoney)o(\)[2000])74 1930 y(\\global\\Xone=\\Xthree)45 b
+(\045\\negate\\Xone)74 1987 y(\\global\\Yone=\\Ytwo)93 b(\045\\negate\\Yone)
+74 2043 y(\\drawvertex\\gluon[\\SW)21 b(3]\(\\Xone,\\Yone\)[4])74
+2100 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexon)o(ex,\\ver)o(texoney)o
+(\)[2000])74 2156 y(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexon)o(ex,\\ver)o
+(texoney)o(\)[2000])74 2213 y(\\put\(-9500,-14000\){The)g(number)i(of)h
+(vertices)e(\(including)h(phantom)g(vertices\))f(=)74 2269
+y(\\number\\vertexcount})74 2326 y(\\end{picture})74 2532 y
+FE(W)l(e)g(see)g(that)f(the)g(diagram)g(is)i(dra)o(wn)e(b)o(y)g(re\015ecting)
+i(the)e(lo)o(w)o(er)g(left)h(v)o(ertex)g(three)f(times.)39
+b(This)23 b(is)74 2589 y(necessary)g(since)h(eac)o(h)e(v)o(ertex)g(can)h
+(only)g(b)q(e)g(dra)o(wn)f(b)q(eginning)j(at)d(one)g(sp)q(eci\014c)j(p)q(oin)
+o(t.)42 b(First)22 b(the)74 2645 y Fs(n)p FE(NE)f(v)o(ertex)f(is)h(dra)o(wn,)
+g(commencing)h(at)e(\(0,0\),)g(in)h(phan)o(tom)f(mo)q(de.)37
+b(This)21 b(pro)o(vides)g(the)g Fx(x)f FE(and)h Fx(y)74 2702
+y FE(displacemen)o(ts)16 b(of)d(the)h(v)o(ertex)g(relativ)o(e)g(to)g(what)f
+(will)j(b)q(ecome)e(the)g(cen)o(tre)g(of)g(the)g(square)g(gluon)g(lo)q(op)h
+(at)74 2758 y(the)i(co-ordinate)g(\(0,0\).)22 b(Then)c(w)o(e)e(use)h
+(re\015ection)g(symmetry)l(,)g(with)f(the)h Fs(n)p FE(negate)f(command,)h(to)
+f(dra)o(w)985 2906 y(49)p eop
+%%Page: 50 55
+bop 74 -83 a FE(all)14 b(four)f(v)o(ertices.)20 b(The)14 b(assignmen)o(t)f
+(statemen)o(ts)f(suc)o(h)i(as)f Fk(\\global\\Yone=\\Ytwo)e
+FE(are)i(discussed)i(b)q(elo)o(w)74 -26 y(in)h(the)f(section)h(on)f(sa)o
+(ving)h(and)f(re-using)h(items.)145 30 y(As)j(an)g(exercise)i(in)f(the)g(use)
+f(of)g(phan)o(tom)g(and)h(arithmetic)g(commands)f(dra)o(w)g(the)g(follo)o
+(wing)h(b)q(o)o(x)74 87 y(diagram)i(for)f(the)i(sup)q(ersymmetric)g(pro)q
+(duction)g(pro)q(cess)f Fx(q)5 b FE(\026)-26 b Fx(q)26 b Fs(!)i
+FE(~)-26 b Fx(q)1318 76 y FE(\026)1322 87 y(~)g Fx(q)r FE(.)40
+b(Mak)o(e)22 b(sure)g(that)f(the)i(b)q(o)o(x)f(is)74 143 y(exactly)c(square,)
+f(that)f(the)i(scalar)f(gaps)f(are)h(precisely)i(one)f(half)f(of)g(the)g
+(length)h(of)f(the)g(segmen)o(ts,)g(and)74 199 y(use)f(a)f(gluon)g(of)g(the)g
+Fs(n)p FE(FLA)l(T)g(t)o(yp)q(e.)592 306 y Fz(\014)p 592 339
+2 2 v 559 306 V -13 w(\014)p 645 339 V 611 306 V -14 w(\014)p
+697 339 V 663 306 V -14 w(\014)p 749 339 V 716 306 V -13 w(\014)p
+802 339 V 768 306 V -14 w(\014)p 854 339 V 820 306 V -14 w(\014)p
+906 339 V 873 306 V 576 337 2 1 v 576 346 a(\002)p 593 337
+V(\001)p 585 346 1 2 v 628 337 2 1 v 18 w(\002)p 645 337 V(\001)p
+637 346 1 2 v 680 337 2 1 v 18 w(\002)p 697 337 V(\001)p 690
+346 1 2 v 733 337 2 1 v 19 w(\002)p 749 337 V -1 w(\001)p 742
+346 1 2 v 785 337 2 1 v 19 w(\002)p 802 337 V(\001)p 794 346
+1 2 v 837 337 2 1 v 18 w(\002)p 854 337 V(\001)p 846 346 1
+2 v 890 337 2 1 v 19 w(\002)p 906 337 V -1 w(\001)p 899 346
+1 2 v 576 306 a(\017)p 576 339 2 2 v 610 306 V -14 w(\017)p
+628 339 V 662 306 V -14 w(\017)p 680 339 V 714 306 V -13 w(\017)p
+733 339 V 767 306 V -14 w(\017)p 785 339 V 819 306 V -14 w(\017)p
+837 339 V 871 306 V -13 w(\017)p 890 339 V 924 306 V 193 306
+366 2 v 558 671 2 366 v 193 672 366 2 v 925 306 92 2 v 1062
+306 V 1199 306 V 924 396 2 92 v 924 534 V 924 671 V 925 672
+92 2 v 1062 672 V 1199 672 V 559 672 17 2 v 572 688 a Fg(^)34
+b(^)g(^)h(^)614 678 y(_)f(_)g(_)g(_)p 908 672 V 145 954 a FE(Y)l(ou)24
+b(migh)o(t)f(also)h(try)f(lab)q(elling)j(the)e(lines.)47 b(What)23
+b(w)o(ould)h(b)q(e)g(the)g(di\016cult)o(y)g(in)h(rotating)e(this)74
+1010 y(diagram)e(through)g(45)f(degrees?)39 b(Y)l(ou)22 b(will)h(\014nd)f(it)
+f(con)o(v)o(enien)o(t)h(to)e(use)i(the)f(assignmen)o(t)g(statemen)o(t)74
+1067 y Fk(\\global<name>=<name>)13 b FE(men)o(tioned)k(ab)q(o)o(v)o(e.)22
+b(Remem)o(b)q(er)17 b(that)e Fs(n)p FE(seglength)i(and)f Fs(n)p
+FE(gaplength)g(alw)o(a)o(ys)74 1123 y(resume)g(their)f(defaults)h(after)e(a)h
+(line)i(is)f(dra)o(wn.)74 1265 y Fq(4.2)70 b(Storing)23 b(and)h(Re-Using)d
+(Items)74 1367 y FE(It)13 b(is)h(often)f(con)o(v)o(enien)o(t,)h(as)f(w)o(ell)
+h(as)f(e\016cien)o(t,)h(to)e(store)h(a)g(line,)h(collection)i(of)c(lines)j
+(and)f(v)o(ertices,)f(or)g(ev)o(en)74 1423 y(an)20 b(en)o(tire)h(picture)g
+(for)e(re-use)i(later.)34 b Fp(FEYNMAN)20 b FE(itself)h(con)o(tin)o(uously)g
+(stores)f(lines)h(for)f(v)m(arious)74 1480 y(p)q(erio)q(ds.)27
+b(It)17 b(is)h(also)f(useful)i(to)d(b)q(e)i(able)g(to)e(store)h(a)g
+(parameter)f(v)m(alue)i(for)f(use)g(later)h(in)g(the)f(same)g(or)f(a)74
+1536 y(subsequen)o(t)f(picture.)21 b(Examples)15 b(of)f(the)h(latter)f(ha)o
+(v)o(e)g(already)h(b)q(een)h(giv)o(en)f(and)g(will)h(no)o(w)e(b)q(e)i(presen)
+o(ted)74 1593 y(formally)l(.)74 1713 y Fp(4.2.1)55 b(Storing)19
+b(and)g(Re-Using)e(Information)74 1799 y FE(The)f(basic)f(command)h(for)e
+(storing)h(a)g(parameter)f(is)74 1888 y Fk(\\global<parameter)22
+b(1>=<parameter)g(2>)74 1976 y FE(Sev)o(eral)16 b(examples)g(w)o(ere)f(giv)o
+(en)g(in)h(the)g(previous)g(section)f(suc)o(h)h(as:)74 2064
+y Fk(\\global\\gaplength=\\Xone)45 b(\\global\\seglength=\\Yone)74
+2153 y FE(Suc)o(h)16 b(statemen)o(ts)e(are)h(particularly)h(useful)h(when)e
+(some)g(v)m(alue)i(needs)f(to)e(b)q(e)i(altered,)f(suc)o(h)h(as)f(b)o(y)74
+2241 y Fk(\\global\\advance\\particlebac)o(kx)21 b(by)j(2000)74
+2330 y FE(and)c(y)o(et)f(also)h(need)g(to)f(b)q(e)h(retained)g(for)f(further)
+h(use.)33 b(Certain)20 b(v)m(ariables,)h(suc)o(h)f(as)f Fk(\\vertexcount)p
+FE(,)74 2386 y(are)24 b(dangerous)h(to)e(adjust)h(and)h(so)f(w)o(ould)h(need)
+g(to)f(b)q(e)h(copied)h(prior)e(to)g(alteration.)48 b(Note)24
+b(that)74 2443 y Fk(\\global<\\name>=...)17 b FE(is)k(a)e(T)641
+2452 y(E)667 2443 y(X)g(primitiv)o(e)i(op)q(eration.)34 b(As)20
+b(discussed)h(earlier)g(L)1584 2437 y Ft(a)1605 2443 y FE(T)1630
+2456 y(E)1655 2443 y(X)f(has)g(its)g(o)o(wn)74 2499 y(equiv)m(alen)o(t)g
+(statemen)o(ts)c(but)i(these)g(should)g(not)g(b)q(e)g(used)g(in)h
+(conjunction)f(with)g(v)m(ariables)h(de\014ned)g(in-)74 2556
+y(ternally)d(b)o(y)g Fp(FEYNMAN)p FE(.)f(\(F)l(or)f(instance)i(attempting)f
+(to)g(use)h Fk(\\setcounter)d FE(in)j(conjunction)h(with)74
+2612 y Fk(\\pmidx)d FE(w)o(ould)h(result)h(in)f(an)g(error.\))k(The)c
+Fk(\\global)f FE(statemen)o(t)f(prior)i(to)f Fk(<name>=,)23
+b(\\advance)14 b Fo(etc.)i FE(is)74 2669 y(often)h(sup)q(er\015uous)h(but)g
+(it)f(is)h(safest)f(to)f(use)i(it.)26 b(This)18 b(mak)o(es)f(the)g(c)o
+(hanges)g(instituted)i(common)e(to)f(all)74 2725 y(subroutines)f(called)h(b)o
+(y)f Fp(FEYNMAN)p FE(.)f(If)h(y)o(ou)f(con)o(tin)o(ually)h(forget)f(to)g(use)
+g(it)h(y)o(ou)f(ma)o(y)g(someda)o(y)f(\014nd)74 2781 y(the)i(follo)o(wing)h
+(ba\017ing)g(sort)e(of)h(error:)985 2906 y(50)p eop
+%%Page: 51 56
+bop 74 -83 a Fk(TeX)24 b(capacity)e(exceeded.)74 -26 y(Save)h(Stack)h
+(overflow.)74 67 y FE(If)16 b(this)h(o)q(ccurs)f(go)f(bac)o(k)h(and)g(insert)
+h Fk(\\global)e FE(just)h(prior)g(to)f(ev)o(ery)h(assignmen)o(t)g(and)g
+(alteration)g(state-)74 124 y(men)o(t.)145 180 y(Ev)o(ery)d(v)m(ariable)i
+(named)f(m)o(ust)g(commence)g(with)g(a)g(bac)o(kslash)g(\()p
+Fs(n)p FE(\))f(ho)o(w)o(ev)o(er)g(one)h(cannot)f(indiscrimi-)74
+237 y(nan)o(tly)i(create)g(a)g(v)m(ariable,)h(sa)o(y)f Fk(\\mycopy)p
+FE(,)e(b)o(y)i(en)o(tering)h Fk(\\global\\mycopy=\\pbackx)p
+FE(.)h(This)f(is)f(b)q(ecause)74 293 y Fo(c)n(ontr)n(ol)j(se)n(quenc)n(es)p
+FE(,)d(suc)o(h)j(as)f Fk(\\begin)p FE(,)f(also)i(commence)f(with)h(bac)o
+(kslashes.)27 b Fp(FEYNMAN)18 b FE(has)f(pre-)74 350 y(de\014ned)g(a)e
+(series)g(of)g(empt)o(y)g(v)m(ariable)i(names)e(whic)o(h)h(ma)o(y)e(b)q(e)i
+(freely)g(used.)21 b(These)15 b(are)528 444 y Fk(\\Xone)476
+b(\\Yone)528 500 y(\\Xtwo)g(\\Ytwo)528 556 y(\\Xthree)428 b(\\Ythree)528
+613 y(\\Xfour)452 b(\\Yfour)528 669 y(\\Xfive)g(\\Yfive)528
+726 y(\\Xsix)476 b(\\Ysix)528 782 y(\\Xseven)428 b(\\Yseven)528
+839 y(\\Xeight)g(\\Yeight)74 933 y FE(Not)17 b(terribly)h(imaginativ)o(e,)g
+(I'll)g(gran)o(t)e(y)o(ou,)h(but)g(they)h(w)o(ork.)24 b(If)18
+b(the)f(user)g(feels)h(obliged)h(to)d(de\014ne)i(his)74 989
+y(o)o(wn)c(v)m(ariable)h(names)f(b)q(e)h(w)o(arned)f(that)f(there)h(is)h(v)o
+(ery)f(little)h(excess)g(L)1303 983 y Ft(a)1324 989 y FE(T)1349
+1003 y(E)1374 989 y(X)f(capacit)o(y)h(a)o(v)m(ailable)g(for)f(suc)o(h)74
+1045 y(man\033v)o(ers.)20 b(A)15 b(handfull)i(ma)o(y)e(b)q(e)g(de\014ned.)22
+b(This)16 b(is)f(done)h(b)o(y)f(en)o(tering)74 1139 y Fk
+(\\global\\newcount<your)21 b(variable)i(name>)74 1233 y FE(prior)16
+b(to)e(assigning)i(it)f(a)g(v)m(alue.)21 b(This)16 b(ma)o(y)f(b)q(e)h(done)f
+(on)g(the)h(same)e(line:)74 1327 y Fk(\\global\\newcount\\pmidycopy)68
+b(\\global\\pmidycopy=\\pmidy)74 1421 y FE(The)17 b(globals)g(ma)o(y)g(b)q(e)
+g(omitted)g(\()p Fo(every)f FE(time)h Fs(n)p FE(pmidycop)o(y)h(is)f(assigned)
+g(or)f(altered!\))25 b(if)17 b(the)g(v)m(ariable's)74 1477
+y(v)m(alue)c(is)g(not)f(to)f(b)q(e)i(retained)g(from)e(picture)i(to)f
+(picture.)19 b(Note,)12 b(ho)o(w)o(ev)o(er,)g(that)f Fk(\\pmidycopy)g
+FE(will)j(remain)74 1534 y(de\014ned)i(as)d(a)h(v)m(ariable)i(un)o(til)f(the)
+f(end)h(of)f(the)g(program)f(and)h(so)g Fk(\\global\\newcount\\pmidycopy)d
+FE(m)o(ust)74 1590 y(app)q(ear)21 b(only)f(once)h(in)g(the)f(program)g
+(\(this)g(ma)o(y)g(b)q(e)g(prior)h(to)f(the)g Fk(\\begin{document})e
+FE(statemen)o(t\).)74 1647 y(T)l(o)i(rep)q(eat)g(it)g(is)g(to)f(receiv)o(e)i
+(an)f(error.)33 b(A)o(ttempts)19 b(to)h(de\014ne)g(v)m(ariable)i(names)e(suc)
+o(h)g(as)f(\\)p Fs(n)p FE(b)q(egin")i(or)74 1703 y(\\)p Fs(n)p
+FE(dra)o(wline")16 b(lead)g(to)e(real)i(trouble.)145 1759 y(A)k(w)o(ord)f(ab)
+q(out)h(outputting)g(the)g(v)m(alue)h(of)e(a)h(v)m(ariable.)35
+b(As)20 b(illustrated)h(at)e(the)h(end)h(of)e(the)h(\014nal)74
+1816 y(example)e(of)f(the)h(previous)g(section,)g(one)g(cannot)f(simply)i(sa)
+o(y)d Fk(\\put\(x,y\){\\pmidycopy})f FE(and)i(exp)q(ect)74
+1872 y(the)e(curren)o(t)h(v)m(alue)g(of)f Fk(\\pmidycopy)f
+FE(to)g(b)q(e)i(placed)h(that)d(the)h(indicated)i(co-ordinates.)k(It)15
+b(m)o(ust)g(\014rst)f(b)q(e)74 1929 y(con)o(v)o(erted)19 b(from)f(a)g
+(parameter)g(name)h(to)f(what)g(that)g(name)h(represen)o(ts)f(\()p
+Fo(i.e.)h FE(ev)m(aluated\).)32 b(This)19 b(ma)o(y)74 1985
+y(b)q(e)h(done)f(b)o(y)f(preceeding)j(the)d(v)m(ariable)i(b)o(y)f
+Fs(n)p FE(n)o(um)o(b)q(er)g(or)f Fs(n)p FE(the.)30 b(The)19
+b(same)f(is)i(true)e(of)g(output)h(to)f(the)74 2042 y(terminal)e(whic)o(h)g
+(is)g(done)f(via)h(the)f Fs(n)p FE(message)g(command:)74 2136
+y Fk(\\message{pmidycopy=\\the\\pmi)o(dycopy})74 2229 y FE(This)g(latter)e
+(is)h(often)g(useful)h(for)e(debugging)i(y)o(our)e(picture)i(when)f(things)h
+(are)e(not)h(app)q(earing)g(where)g(y)o(ou)74 2286 y(though)o(t)h(they)g(w)o
+(ould)g(go.)74 2408 y Fp(4.2.2)55 b(Storing)19 b(and)g(Re-Using)e(Pictures)74
+2493 y(FEYNMAN)k FE(has)f(a)f(n)o(um)o(b)q(er)i(of)e(sp)q(ecialized)24
+b(commands)c(whic)o(h)g(enables)i(the)e(user)g(to)g(store)f(and)74
+2550 y(re-use)14 b(one)f(or)g(a)f(n)o(um)o(b)q(er)i(of)f(lines.)20
+b(T)l(o)13 b(store)g(a)g(segmen)o(t)f(of,)h(or)g(an)g(en)o(tire,)g(picture)h
+(one)g(utilizes)h(L)1806 2544 y Ft(a)1827 2550 y FE(T)1852
+2563 y(E)1878 2550 y(X's)74 2606 y Fs(n)p Fo(saveb)n(ox)k FE(facilit)o(y)l(.)
+35 b(Unfortunately)20 b(one)g(will)i(frequen)o(tly)e(exhaust)g(L)1323
+2600 y Ft(a)1344 2606 y FE(T)1369 2620 y(E)1395 2606 y(X's)f(\(tin)o(y\))h
+(in)o(ternal)g(w)o(orking)74 2663 y(memory)15 b(when)i(this)f(is)g
+(attempted.)22 b(The)16 b(b)q(est)g(solution)g(in)h(this)f(case)g(is)h(to)e
+(ask)g(a)h(kindly)h(T)1735 2672 y(E)1761 2663 y(X)f(wizard)74
+2719 y(to)f(expand)h(T)313 2729 y(E)338 2719 y(X's)f(capacit)o(y)l(.)985
+2906 y(51)p eop
+%%Page: 52 57
+bop 74 -83 a Fu(Storing)18 b(Lines)74 3 y FE(Wh)o(y)13 b(w)o(ould)h(one)g
+(wish)g(to)f(store)f(a)h(single)i(particle)g(line?)22 b(It)13
+b(migh)o(t)g(b)q(e)i(that)d(diagram)h(has)h(the)f(same)g(line)74
+59 y(rep)q(eated)i(o)o(v)o(er)f(and)g(o)o(v)o(er)g(commencing)h(from)e
+(di\013eren)o(t)i(starting)f(p)q(oin)o(ts.)20 b(The)14 b(user)h(ma)o(y)e
+(simply)j(lik)o(e)f(a)74 116 y(particular)f(line)h(st)o(yle)f(and)f(length)h
+(and)g(w)o(an)o(t)e(to)h(alw)o(a)o(ys)f(use)i(it)f(\(for)g(instance)h(an)f
+Fs(n)p FE(E)g Fs(n)p FE(FLIPPEDFLA)l(T)74 172 y(gluon)k(\014v)o(e)g(lo)q(ops)
+g(in)h(length\).)24 b(T)l(o)16 b(store)g(a)g(line)j(under)e(the)g(name)f
+Fk(<line)23 b(name>)16 b FE(the)h(basic)g(command)74 229 y(is:)74
+321 y Fk(\\drawandsaveline)22 b(`<line)h(name>')g(as)h(<the)f(same)g
+(arguments)g(as)g(\\drawline>)74 413 y FE(Note)15 b(the)h(`...')j(around)d
+(the)g(name)f(\(whic)o(h)h(m)o(ust)f(commence)h(with)g(a)g(bac)o(kslash\).)21
+b(As)15 b(an)h(example)g(one)74 469 y(could)g(ha)o(v)o(e)74
+561 y Fk(\\drawandsaveline)22 b(`\\cutephoton')g(as)i
+(\\photon[\\S\\LONGPHOTON]\()o(-2000,5)o(00\)[7])74 653 y FE(whic)o(h)16
+b(w)o(ould)g(dra)o(w)e(a)h(photon)g(as)g(if)74 745 y Fk
+(\\drawline\\photon[\\S\\LONGPHO)o(TON]\(-20)o(00,500\))o([7])74
+837 y FE(had)h(app)q(eared)f(but)h(sa)o(v)o(e)e(it)i(under)g(the)f(name)g
+Fs(n)p FE(cutephoton.)145 893 y(T)l(o)g(utilize)i(the)e(sa)o(v)o(ed)g(line)i
+(one)e(en)o(ters)74 985 y Fk(\\drawoldpic<line)22 b(name>\(x,y\))74
+1077 y FE(where)16 b(\(x,y\))e(is)h(the)h(co-ordinate)f(to)g(dra)o(w)f(the)i
+(line)g(from.)k(F)l(or)14 b(example)74 1169 y Fk(\\drawandsaveline)22
+b(`\\cutephoton')g(as)i(\\photon[\\S\\LONGPHOTON]\()o(-2000,5)o(00\)[7])74
+1226 y(\\drawline\\fermion[\\E\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([6500])74
+1282 y(\\drawoldpic\\cutephoton\(1500)o(,\\pbacky)o(\))74 1339
+y(\\drawoldpic\\cutephoton\(2500)o(,\\pbacky)o(\))74 1395 y
+(\\drawoldpic\\cutephoton\(3500)o(,\\pbacky)o(\))74 1487 y
+Fs(n)p FE(dra)o(w)o(oldpic)12 b(re-assigns)g(the)g(v)m(alues)h(of)e
+Fs(n)p FE(pfron)o(tx,y;)g Fs(n)p FE(pmidx,y)h(and)g Fs(n)p
+FE(pbac)o(kx,y)g(but)f(do)q(es)i Fu(not)f FE(alter)f(an)o(y)74
+1544 y(other)f(existing)h(paramen)o(ters)e(suc)o(h)i(as)f Fs(n)p
+FE(plengthx,)h Fs(n)p FE(gluon)o(bac)o(ky)f(or)g Fs(n)p FE(photoncoun)o(t.)17
+b(\()p Fs(n)p FE(pfron)o(tx,)p Fs(n)p FE(pfron)o(t)o(y\))74
+1600 y(are)f(assigned)g(the)g(\(x,y\))e(v)m(alues)j(and)f(\()p
+Fs(n)p FE(pbac)o(kx,)p Fs(n)p FE(pbac)o(ky\))e(are)i(incremen)o(ted)h(b)o(y)e
+(the)h Fo(curr)n(ent)g FE(v)m(alues)h(of)74 1656 y Fs(n)p FE(plengthx)i(and)f
+Fs(n)p FE(plength)o(y)l(.)28 b(Subsequen)o(t)19 b(usage)f(of)f
+Fs(n)p FE(dra)o(w)o(oldpic)h(costs)g(no)g(additional)h(in)o(ternal)g(T)1883
+1666 y(E)1908 1656 y(X)74 1713 y(memory)c(resources.)20 b(The)15
+b(ab)q(o)o(v)o(e)g(example)h(w)o(ould)f(dra)o(w:)139 1763 y
+Fe(\))139 1863 y(\))139 1962 y(\))139 2062 y(\))129 1813 y(\()129
+1913 y(\()129 2012 y(\()p 144 2076 270 2 v 201 2113 a(\))201
+2212 y(\))201 2312 y(\))201 2411 y(\))192 2162 y(\()192 2262
+y(\()192 2362 y(\()243 2113 y(\))243 2212 y(\))243 2312 y(\))243
+2411 y(\))233 2162 y(\()233 2262 y(\()233 2362 y(\()284 2113
+y(\))284 2212 y(\))284 2312 y(\))284 2411 y(\))274 2162 y(\()274
+2262 y(\()274 2362 y(\()145 2499 y FE(The)j(storage)g(space)h(for)e
+Fs(n)p FE(cutephoton)i(will)h(b)q(e)f(reclaimed)h(follo)o(wing)f(the)g
+Fk(\\end{picture})e FE(state-)74 2556 y(men)o(t.)30 b(Tw)o(o)17
+b(other)i(features)f(exist)h(to)f(dra)o(w)f(lines.)32 b(A)o(t)18
+b(an)o(y)g(time,)h(while)h(in)g(picture)f(mo)q(de,)h(the)e(last)74
+2612 y(line)f(dra)o(wn)f(via)f(the)h Fs(n)p FE(dra)o(wline)g(command)g(is)g
+(stored)f(under)h(the)g(name)f(`)p Fs(n)p FE(lastline')i(and)e(ma)o(y)g(b)q
+(e)h(freely)74 2669 y(used.)24 b Fs(n)p FE(lastline)18 b(is)f(replaced)g
+(when)g Fs(n)p FE(dra)o(wline)g(is)g(next)f(encoun)o(tered.)24
+b(Note)16 b(that)g(y)o(ou)g(ma)o(y)f(nev)o(er)i(use)74 2725
+y(the)h(same)g(name)g(t)o(wice)g(when)g(storing)g(a)f(line.)30
+b(T)l(o)18 b(illustrate)h(the)f(use)g(of)f Fs(n)p FE(lastline,)j(a)d(p)q
+(ortion)i(of)e(the)74 2781 y(previous)f(example)g(could)g(b)q(e)g(pro)q
+(duced)h(using:)985 2906 y(52)p eop
+%%Page: 53 58
+bop 74 -83 a Fk(\\drawline\\fermion[\\E\\REG]\(0)o(,16000\)[)o(6500])74
+-26 y(\\drawline\\photon[\\S\\LONGPHO)o(TON]\(150)o(0,\\pbac)o(ky\)[7])74
+30 y(\\drawoldpic\\lastline\(2500,\\)o(pfronty\))74 87 y
+(\\drawoldpic\\lastline\(3500,\\)o(pfronty\))74 180 y FE(to)15
+b(wit)p 144 268 270 2 v 201 305 a Fe(\))201 404 y(\))201 504
+y(\))201 604 y(\))192 355 y(\()192 454 y(\()192 554 y(\()243
+305 y(\))243 404 y(\))243 504 y(\))243 604 y(\))233 355 y(\()233
+454 y(\()233 554 y(\()284 305 y(\))284 404 y(\))284 504 y(\))284
+604 y(\))274 355 y(\()274 454 y(\()274 554 y(\()145 822 y FE(One)20
+b(ma)o(y)e(also)i(store)e(a)h(line)i Fo(after)e FE(it)h(has)f(b)q(een)i(dra)o
+(wn)d(b)o(y)i(using)g(the)f Fs(n)p Fo(save)n(as)f FE(command.)32
+b(The)74 878 y(statemen)o(ts:)74 972 y Fk(\\drawline\\photon[\\S\\LONGPHO)o
+(TON]\(0,1)o(8000\)[7)o(])74 1029 y(\\saveas)23 b(`\\cutephoton')74
+1122 y FE(w)o(ould)16 b(b)q(e)g(equiv)m(alen)o(t)h(to)d(the)h(statemen)o(t)74
+1216 y Fk(\\drawandsaveline)22 b(`\\cutephoton')g(as)i
+(\\photon[\\S\\LONGPHOTON]\()o(0,18000)o(\)[7])74 1310 y FE(The)11
+b(latter)g(statemen)o(t)f(is)h(sup)q(erior,)h(ho)o(w)o(ev)o(er,)f(since)h
+Fs(n)p FE(sa)o(v)o(eas)d(actually)j(re-dra)o(ws)e(the)h(line)i(\(in)e(a)g
+(phan)o(tom)74 1366 y(mo)q(de\))17 b(and)h(th)o(us)f(uses)g(t)o(wice)g(as)g
+(m)o(uc)o(h)g(of)g(T)886 1376 y(E)911 1366 y(X's)g(resources.)26
+b(Th)o(us)17 b Fs(n)p FE(sa)o(v)o(eas)f(should)i(b)q(e)g(a)o(v)o(oided)f(and)
+74 1423 y(has)c(b)q(een)h(men)o(tioned)g(merely)f(for)g(completeness.)20
+b(Since)14 b(it)f(sa)o(v)o(es)f(the)h(last)g(line)i(dra)o(wn)d(it)h(is)h
+(most)e(useful)74 1479 y(when)k(used)g(subsequen)o(t)f(to)g(a)g
+Fs(n)p FE(dra)o(wv)o(ertex)f(statemen)o(t.)74 1599 y Fu(Storing)k(Pictures)74
+1685 y FE(It)12 b(frequen)o(tly)g(happ)q(ens)g(that)f(a)g(picture,)i(or)e
+(part)g(of)g(a)g(picture,)i(needs)f(to)f(replicated.)20 b(In)12
+b(man)o(y)f(instances)74 1742 y(it)k(is)f(only)h(the)f(lab)q(els)i(whic)o(h)f
+(need)g(to)f(b)q(e)h(c)o(hanged.)20 b(The)14 b(general)h(L)1269
+1736 y Ft(a)1290 1742 y FE(T)1315 1755 y(E)1341 1742 y(X)f(command)g(for)g
+(sa)o(ving)g(ob)s(jects)74 1798 y(is)74 1948 y Fk(\\savebox{<box)22
+b(name>}\(<box)h(width>,<box)f(height>\)[<position>]{<obje)o(ct>})74
+2099 y FE(This)d(sa)o(v)o(es)f(the)g(`ob)s(ject')f(in)i(a)f(`b)q(o)o(x')g
+(but)g(do)q(es)h(not)f(dra)o(w)g(it)g(directly)l(.)31 b(T)l(o)18
+b(dra)o(w)g(it)g(the)h Fs(n)p FE(dra)o(w)o(oldpic)74 2155 y(command)g(ma)o(y)
+g(again)g(b)q(e)h(used)g(as)f(sho)o(wn)g(b)q(elo)o(w.)33 b(The)19
+b(b)q(o)o(x)h(name)f(m)o(ust)g(b)q(egin)h(with)g(a)f(bac)o(kslash)74
+2212 y(\()p Fs(n)p FE(\).)30 b(The)20 b(width)f(and)g(heigh)o(t)h(will)g(b)q
+(e)g(in)g(cen)o(tip)q(oin)o(ts.)32 b(The)19 b(\\p)q(osition")h(argumen)o(t)e
+(is)h(optional)h(and)74 2268 y(ma)o(y)e(b)q(e)h(ignored.)31
+b(If)19 b(so)f(the)h(picture)h(will)g(b)q(e)f(cen)o(tred)g(in)h(the)e(b)q(o)o
+(x.)30 b(Other)19 b(options)g(are)f Fk([tr])24 b([br])74 2324
+y([tl])f([bl])12 b FE(whic)o(h)i(will)g(p)q(osition)g(the)e(picture)i(in)f(a)
+g(corner)f(of)g(the)h(named)g(b)q(o)o(x,)f(and)h Fk([t])24
+b([b])f([l])h([r])74 2381 y FE(whic)o(h)19 b(will)i(place)e(the)g(picture)g
+(along)f(a)h(side.)30 b(The)19 b(`ob)s(ject')e(in)i(this)g(case)g(is)g(a)f
+(picture)h(commencing)74 2437 y(with)14 b Fk(\\begin{picture})e
+FE(and)i(terminating)g(with)g Fk(\\end{picture})p FE(.)j(Just)d(as)g(v)m
+(ariable)h(names)e(m)o(ust)g(b)q(e)74 2494 y(initialized)k(so)d(m)o(ust)f(b)q
+(o)o(x)h(names.)19 b(Prior)14 b(to)f(the)h Fs(n)p FE(sa)o(v)o(eb)q(o)o(x)e(a)
+i(command)f Fk(\\global\\newsavebox<name>)74 2550 y FE(m)o(ust)i(app)q(ear)g
+(and)h(this)f(name)g(m)o(ust)g(not)g(b)q(e)h(used)f(again.)20
+b(The)c(sa)o(v)o(ed)f(picture)h(tak)o(es)e(the)h(form:)985
+2906 y(53)p eop
+%%Page: 54 59
+bop 74 -83 a Fk(\\global\\newsavebox{\\Brehmss)o(trahlung)o(})217
+-26 y(.)217 30 y(.)217 87 y(.)74 143 y(\\savebox{\\Brehmsstrahlung}\()o
+(10000,14)o(000\)[tl)o(]{)74 199 y(\\begin{picture}\(10000,14000)o
+(0\)\(2000,)o(3000\))217 256 y(.)217 312 y(.)217 369 y(.)74
+425 y(\\end{picture})74 482 y(})48 b(\045)23 b(end)h(of)g(\\savebox)217
+538 y(.)217 595 y(.)217 651 y(.)74 708 y(\\begin{picture}\(18000,22000)o(\))
+74 764 y(...\(various)f(Feynman)f(commands\))74 820 y
+(\\drawoldpic\\Brehmsstrahlung)o(\(\\pbackx)o(,\\pback)o(y\))74
+877 y(\\global\\advance\\pbackx)f(by)j(2000)74 933 y
+(\\drawoldpic\\Brehmsstrahlung)o(\(\\pbackx)o(,\\pback)o(y\))74
+990 y(\\global\\advance\\pbackx)d(by)j(2000)74 1046 y
+(\\drawoldpic\\Brehmsstrahlung)o(\(\\pbackx)o(,\\pback)o(y\))74
+1103 y(...\(various)f(Feynman)f(commands\))74 1159 y(\\end{picture})74
+1302 y FE(with)14 b(further)g(p)q(ossible)i(uses)e(in)h(other)f(diagrams.)19
+b(Of)14 b(course)g(the)g(picture)h(could)g(b)q(e)g(merely)f(stored)g(and)74
+1358 y(directly)19 b(used)g(as)e(an)h(en)o(tire)g(diagram.)28
+b(L)818 1352 y Ft(a)839 1358 y FE(T)864 1372 y(E)890 1358 y(X)18
+b(k)o(eeps)g(the)g(stored)f(b)q(o)o(x)h(around)g(thereafter)f(o)q(ccup)o
+(ying)74 1414 y(v)m(aluable)g(storage)d(space.)20 b(Th)o(us)15
+b(when)h(one)f(is)h(done)g(with)f(the)h(stored)e(picture)i(the)g(command)74
+1494 y Fk(\\sbox{\\Brehmsstrahlung}{})74 1573 y FE(will)f(clear)e(the)g
+(space.)19 b(The)13 b(b)q(o)o(x)g(will)h(con)o(tin)o(ue)f(to)g(exist)g(and)g
+(new)g(ob)s(jects)f(ma)o(y)g(b)q(e)h(stored)g(in)g(it)g(without)74
+1630 y(a)k(further)f Fs(n)p FE(newsa)o(v)o(eb)q(o)o(x)g(statemen)o(t.)24
+b(One)18 b(is)f(cautioned)h(that)e(p)q(ositioning)i(the)f(old)h(picture)f
+(within)h(a)74 1686 y(new)e(picture)g(ma)o(y)f(require)i(some)e(exp)q(erimen)
+o(tation)h(since)h(the)f(b)q(o)o(x)f(sizes)h(ma)o(y)f(not)g(matc)o(h.)21
+b(The)15 b(other)74 1742 y(caution)j(is)g(that)f(T)412 1752
+y(E)437 1742 y(X's)g(resources)h(tend)f(to)g(b)q(ecome)h(exhausted)g(with)g
+(a)f(b)q(ewildering)j(rapidit)o(y)e(whic)o(h)74 1799 y(limits)f(the)e(size)h
+(of)f(stored)g(pictures.)20 b(The)c(follo)o(wing)g(is)f(a)g(simple)i
+(example.)74 1935 y Fk(\\global\\newsavebox{\\ESHOWER)o(})74
+1991 y(\\savebox{\\ESHOWER}\(0,0\)[tl])o({)74 2048 y(\\begin{picture}\(0,0\))
+74 2104 y(\\drawline\\photon[\\SE\\REG]\(0)o(,0\)[8])74 2160
+y(\\drawline\\fermion[\\E\\REG]\(\\)o(photonba)o(ckx,\\ph)o(otonbac)o
+(ky\)[2000)o(])74 2217 y(\\drawline\\fermion[\\S\\REG]\(\\)o(photonba)o
+(ckx,\\ph)o(otonbac)o(ky\)[2000)o(])74 2273 y(\\end{picture})74
+2330 y(})72 b(\045)23 b(end)h(savebox)74 2386 y
+(\\begin{picture}\(15000,5000\))74 2443 y(\\drawline\\fermion[\\E\\REG]\(0)o
+(,5000\)[1)o(5000])74 2499 y(\\drawoldpic\\ESHOWER\(0,5000\))74
+2556 y(\\drawoldpic\\ESHOWER\(5000,50)o(00\))74 2612 y
+(\\drawoldpic\\ESHOWER\(10000,5)o(000\))74 2669 y(\\end{picture})74
+2725 y(\\sbox{\\ESHOWER}{})985 2906 y FE(54)p eop
+%%Page: 55 60
+bop 74 -83 a FE(pro)q(ducing)p 144 -39 623 2 v 184 -39 a Fz(\010)p
+184 -14 2 2 v 159 -39 V 236 13 a(\010)p 236 38 V 211 13 V 288
+65 a(\010)p 288 90 V 263 65 V 340 117 a(\010)p 340 142 V 315
+117 V 184 -13 V 184 13 a(\012)p 210 13 V 236 39 V 236 65 a(\012)p
+262 65 V 288 91 V 288 117 a(\012)p 314 117 V 340 143 V 340
+168 a(\012)p 366 168 V 367 169 83 2 v 366 251 2 83 v 392 -39
+a(\010)p 392 -14 2 2 v 367 -39 V 444 13 a(\010)p 444 38 V 418
+13 V 495 65 a(\010)p 495 90 V 470 65 V 547 117 a(\010)p 547
+142 V 522 117 V 392 -13 V 392 13 a(\012)p 417 13 V 444 39 V
+444 65 a(\012)p 469 65 V 495 91 V 495 117 a(\012)p 521 117
+V 547 143 V 547 168 a(\012)p 573 168 V 574 169 83 2 v 573 251
+2 83 v 599 -39 a(\010)p 599 -14 2 2 v 574 -39 V 651 13 a(\010)p
+651 38 V 626 13 V 703 65 a(\010)p 703 90 V 678 65 V 755 117
+a(\010)p 755 142 V 730 117 V 599 -13 V 599 13 a(\012)p 625
+13 V 651 39 V 651 65 a(\012)p 677 65 V 703 91 V 703 117 a(\012)p
+729 117 V 755 143 V 755 168 a(\012)p 780 168 V 781 169 83 2
+v 781 251 2 83 v 145 344 a FE(Note)10 b(the)h Fs(n)p FE(sb)q(o)o(x)f(used)i
+(to)e(empt)o(y)g(the)h(b)q(o)o(x.)19 b(Also)11 b(note)f(the)h(tric)o(k)g(of)f
+(storing)h(a)f(b)q(o)o(x)h(of)f(zero)h(dimension.)74 401 y(This)20
+b(greatly)f(simpli\014es)j(the)d(p)q(ositioning)j(of)d(stored)g(diagram.)32
+b(One)20 b(migh)o(t)f(exp)q(ect)h(that)f(the)h(gluon)74 457
+y(branc)o(hes)e(\(together)f(with)i(lab)q(elling\))h(in)f(the)f(co)o(v)o(er)f
+(diagram)h(w)o(ere)g(generated)g(this)g(w)o(a)o(y)l(.)28 b(Alas)18
+b(there)74 513 y(w)o(as)i(insu\016cien)o(t)i(memory)f(to)f(store)g(them)h
+(\(gluon)g(v)o(ertices)g(are)f(particularly)i(exp)q(ensiv)o(e\))g(and)f(they)
+74 570 y(w)o(ere)c(dra)o(wn)g(b)o(y)f(duplicating)k(the)d(statemen)o(ts.)24
+b(This)18 b(sa)o(v)o(ed)e(storage)g(space)h(at)g(the)g(exp)q(ense)h(of)f
+(CPU.)74 626 y(One)j(ma)o(y)e(also)h(store)g(b)q(o)o(xes)g(within)h(b)q(o)o
+(xes.)32 b(Th)o(us)19 b(the)g(en)o(tire)g(three-photon)h(diagram)e(ab)q(o)o
+(v)o(e)h(could)74 683 y(ha)o(v)o(e)14 b(b)q(een)h(stored)e(and)i(re-used.)20
+b(Indeed)15 b(this)g(is)f(the)h(basic)f(tec)o(hnique)i(used)e(in)h
+(constructing)f(lines)i(and)74 739 y(v)o(ertices.)985 2906
+y(55)p eop
+%%Page: 56 61
+bop 74 -83 a Fq(4.3)70 b(Links,)23 b(Stems)f(and)h(Caps)74
+19 y FE(In)17 b(this)h(section)f(w)o(e)f(discuss)i(a)e(n)o(um)o(b)q(er)h(of)g
+(imp)q(ortan)o(t)f(em)o(b)q(ellishmen)o(ts)j(whic)o(h)e(ma)o(y)f(b)q(e)i
+(used)f(to)f(b)q(oth)74 75 y(simplify)h(the)e(construction)h(of)f(a)g
+(diagram)f(and)i(b)q(eautify)g(the)f(results.)74 197 y Fp(4.3.1)55
+b(Gluon)19 b(Links)74 283 y FE(Ideally)c(one)f(w)o(ould)g(lik)o(e)g(to)f(dra)
+o(w)g(iden)o(tical)i(lines)g(\(or)e(v)o(ertices\))g(follo)o(wing)h(one)g
+(another)f(and)g(ha)o(v)o(e)g(them)74 339 y(join)k(seamlessly)l(,)g(as)f(if)h
+(a)f(single)h(line)h(had)f(b)q(een)g(dra)o(wn.)23 b(F)l(or)15
+b(photons,)h(scalars)g(and)h(fermions)f(there)h(is)74 396 y(no)e(di\016cult)o
+(y)g(in)g(doing)g(this.)21 b(F)l(or)13 b(man)o(y)h(st)o(yles)h(of)f(gluon)h
+(this)g(is)g(lik)o(ewise)h(true.)j(F)l(or)14 b(diagonally-dra)o(wn)74
+452 y(gluons)j(and)f(those)f(pro)q(duced)i(in)g(the)f Fk(\\CENTRAL)f
+FE(st)o(yle)h(this)g(is)h(not)e(the)h(case,)g(as)g(illustrated)h(in)g
+(section)74 508 y(2.10.2.)25 b(A)18 b(similar)g(problem)g(ensues)h(when)f
+(one)f(wishes)h(to)f(attac)o(h)g(a)g(gluon)h(to)f(a)g(v)o(ertex)g
+(constructed)74 565 y(from)e(lines)h(dra)o(wn)f(in)h(these)g(st)o(yles.)74
+685 y Fu(Linking)j(Lines)74 771 y FE(The)i Fs(n)p FE(gluonlink)i(command)d
+(is)i(used)f(b)q(et)o(w)o(een)g(t)o(w)o(o)e Fs(n)p FE(dra)o(wline)p
+Fs(n)p FE(gluon)j(statemen)o(ts)e(when)h(the)g(direc-)74 827
+y(tion)e(of)e(the)i(gluons)f(is)h Fk(\\NW,)k(\\NE,)g(\\SW)42
+b FE(or)18 b Fk(\\SE)f FE(or)h(when)h(the)f(gluons)h(are)e(b)q(oth)i(in)g(a)f
+Fk(\\CENTRAL)f FE(or)74 884 y Fk(\\FLIPPEDCENTRAL)c FE(con\014guration.)20
+b(It's)15 b(e\013ect)g(is:)74 1034 y Fk(\\begin{picture}\(10000,5000\))74
+1090 y(\045)24 b(No)f(\\gluonlink:)74 1147 y(\\drawline\\gluon[\\NE\\FLIPPED)
+o(]\(0,0\)[2)o(])74 1203 y(\\drawline\\gluon[\\NE\\FLIPPED)o(]\(\\pback)o
+(x,\\pbac)o(ky\)[2])74 1260 y(\045)74 1316 y(\045)h(With)f(\\gluonlink:)74
+1373 y(\\drawline\\gluon[\\NE\\FLIPPED)o(]\(5000,0)o(\)[2]\\gl)o(uonlink)74
+1429 y(\\drawline\\gluon[\\NE\\FLIPPED)o(]\(\\pback)o(x,\\pbac)o(ky\)[2])74
+1486 y(\\end{picture})74 1636 y FE(Note)18 b(that)g(the)g Fs(n)p
+FE(gluonlink)i(ma)o(y)e(also)g(app)q(ear)h(on)f(a)g(separate)g(line)i(or)e
+(preceding)i(the)e(second)h(gluon.)74 1692 y(There)e(ma)o(y)f(b)q(e)h(lab)q
+(ellin)q(g)i(statemen)o(ts)c(in)o(tersp)q(ersed)j(but)f(no)g(other)f(lines)i
+(ma)o(y)e(b)q(e)i(joined.)25 b(The)17 b(result)74 1749 y(is:)p
+190 1919 2 5 v 190 1962 a Fz(\021)p 145 1961 5 2 v 227 1882
+2 5 v 227 1924 a(\021)p 182 1924 5 2 v 264 1845 2 5 v 264 1887
+a(\021)p 220 1887 5 2 v 190 1908 a(\000)p 190 1915 2 1 v 182
+1908 1 2 v 227 1870 a(\000)p 227 1877 2 1 v 220 1870 1 2 v
+173 1908 a(\003)p 173 1915 2 1 v 173 1924 a(\002)p 182 1924
+1 2 v 182 1908 V 210 1870 a(\003)p 210 1878 2 1 v 210 1887
+a(\002)p 219 1887 1 2 v 219 1870 V 310 1801 2 5 v 310 1843
+a(\021)p 266 1843 5 2 v 348 1764 2 5 v 348 1806 a(\021)p 303
+1806 5 2 v 385 1726 2 5 v 385 1769 a(\021)p 340 1769 5 2 v
+310 1789 a(\000)p 310 1796 2 1 v 303 1789 1 2 v 348 1752 a(\000)p
+348 1759 2 1 v 340 1752 1 2 v 294 1789 a(\003)p 294 1797 2
+1 v 294 1806 a(\002)p 303 1806 1 2 v 303 1789 V 331 1752 a(\003)p
+331 1760 2 1 v 331 1769 a(\002)p 340 1769 1 2 v 340 1752 V
+397 1919 2 5 v 397 1962 a(\021)p 352 1961 5 2 v 434 1882 2
+5 v 434 1924 a(\021)p 390 1924 5 2 v 472 1845 2 5 v 472 1887
+a(\021)p 427 1887 5 2 v 397 1908 a(\000)p 397 1915 2 1 v 390
+1908 1 2 v 434 1870 a(\000)p 434 1877 2 1 v 427 1870 1 2 v
+380 1908 a(\003)p 380 1915 2 1 v 380 1924 a(\002)p 390 1924
+1 2 v 390 1908 V 418 1870 a(\003)p 418 1878 2 1 v 418 1887
+a(\002)p 427 1887 1 2 v 427 1870 V 472 1835 a(\000)p 472 1842
+2 1 v 465 1835 1 2 v -34 w(\003)p 455 1842 2 1 v 455 1851 a(\002)p
+465 1851 1 2 v 465 1835 V 510 1809 2 5 v 510 1852 a(\021)p
+465 1851 5 2 v 547 1772 2 5 v 547 1814 a(\021)p 502 1814 5
+2 v 584 1735 2 5 v 584 1777 a(\021)p 539 1777 5 2 v 510 1798
+a(\000)p 510 1805 2 1 v 502 1798 1 2 v 547 1760 a(\000)p 547
+1767 2 1 v 539 1760 1 2 v 493 1798 a(\003)p 493 1805 2 1 v
+493 1814 a(\002)p 502 1814 1 2 v 502 1798 V 530 1760 a(\003)p
+530 1768 2 1 v 530 1777 a(\002)p 539 1777 1 2 v 539 1760 V
+145 2017 a FE(Individually)i(its)c(e\013ect)g(is)74 2111 y
+Fk(\\begin{picture}\(5000,5000\))74 2167 y(\\drawline\\gluon[\\SE\\REG]\(50)o
+(00,0\)[2])o(\\gluonl)o(ink)74 2224 y(\\drawline\\fermion[\\N\\REG]\(\\)o
+(gluonbac)o(kx,\\glu)o(onbacky)o(\)[1500])74 2280 y
+(\\drawline\\fermion[\\SE\\REG]\()o(\\pbackx,)o(\\pbacky)o(\)[1500])74
+2336 y(\\end{picture})118 2389 y Fz(\020)p 118 2434 2 5 v 73
+2389 5 2 v 156 2426 a(\020)p 156 2471 2 5 v 111 2426 5 2 v
+193 2464 a(\020)p 193 2508 2 5 v 148 2464 5 2 v 118 2434 2
+1 v 118 2443 a(\001)p 111 2443 1 2 v 156 2471 2 1 v 156 2480
+a(\001)p 148 2480 1 2 v 102 2426 a(\003)p 102 2434 2 1 v 102
+2443 a(\002)p 111 2443 1 2 v 111 2426 V 139 2464 a(\003)p 139
+2471 2 1 v 139 2480 a(\002)p 148 2480 1 2 v 148 2464 V 194
+2508 2 1 v 194 2518 a(\001)p 186 2518 1 2 v 177 2501 a(\003)p
+177 2508 2 1 v 177 2518 a(\002)p 186 2518 1 2 v 186 2501 V
+123 2501 63 2 v 185 2500 2 63 v 985 2906 a FE(56)p eop
+%%Page: 57 62
+bop 74 -83 a Fu(Linking)19 b(V)l(ertices)74 3 y FE(When)13
+b(the)f(n)o(um)o(b)q(er)g(of)g(lo)q(ops)g(is)h(sp)q(eci\014ed)h(in)f(a)f
+Fs(n)p FE(dra)o(wv)o(ertex)e(command,)j(ev)o(ery)f(line)h(radiating)g(from)e
+(the)74 59 y(cen)o(ter)k(has)f(that)g(n)o(um)o(b)q(er)h(of)g(lo)q(ops.)20
+b(A)14 b Fs(n)p FE(gluonlink)j(follo)o(wing)e(the)g Fs(n)p
+FE(dra)o(wv)o(ertex)e(will)k(p)q(ertain)e(solely)h(to)74 116
+y(the)e Fo(last)f FE(line)i(dra)o(wn.)k(In)14 b(order)f(to)g(p)q(ermit)h
+(link)m(ages)h(to)e(other)g(or)g(m)o(ultiple)j(v)o(ertex)d(lines)i(the)e
+Fs(n)p Fo(vertexlink)74 172 y FE(and)g Fs(n)p Fo(vertexlinks)d
+FE(commands)i(are)g(used.)19 b(Unlik)o(e)14 b Fs(n)p FE(gluonlink,)g
+Fs(n)p FE(v)o(ertexlink\(s\))e Fo(pr)n(e)n(c)n(e)n(ds)f FE(the)h
+Fs(n)p FE(dra)o(wv)o(ertex)74 229 y(statemen)o(t.)18 b(The)c(format)d(is)j
+Fk(\\vertexlink)p Fx(n)p FE(,)e(where)h Fx(n)h FE(is)f(the)h(line)g(n)o(um)o
+(b)q(er)g(of)f(the)g(v)o(ertex)g(to)f(b)q(e)i(link)o(ed.)74
+285 y(F)l(or)19 b(a)g(v)o(ertex)f(dra)o(wn)h(in)h(a)f Fk(\\S)g
+FE(direction,)i(line)g(one)f(is)f(the)h(\014rst)e(dra)o(wn,)i
+Fo(i.e.)39 b FE(the)19 b Fs(n)p FE(S)g(line)i(dra)o(wn)e Fo(to)74
+342 y FE(the)f(cen)o(tre)g(\(or)f(if)h(y)o(ou)g(prefer)g(the)g
+Fs(n)p FE(N)f(line)j(coming)e(out)f(of)h(the)g(middle)h(of)f(the)g(v)o
+(ertex\).)26 b(The)19 b(others)74 398 y(are)g(coun)o(ted)f(clo)q(c)o(kwise)i
+(around)f(the)g(midp)q(oin)o(t)h Fk(\(\\vertexmidx,\\vertexmidy)o(\))p
+FE(.)28 b Fk(\\vertexlinks)17 b FE(is)74 455 y(an)e(abbreviation)h(of)74
+548 y Fk(\\vertexlink1\\vertexlink2\\ve)o(rtexlink)o(3)74 605
+y(\\vertexlink1\\vertexlink2\\ve)o(rtexlink)o(3\\verte)o(xlink4)74
+699 y FE(for)f(a)g(three)g(and)g(four)g(line)i(v)o(ertex)e(resp)q(ectiv)o
+(ely)l(.)21 b(F)l(or)15 b(instance,)h(when)f(the)h(line)74
+805 y Fk(\\vertexlink2\\vertexlink3\\fl)o(ipvertex)o(\\drawve)o(rtex\\gl)o
+(uon[\\NE)k(4]\(0,0\)[3])74 911 y FE(is)c(encoun)o(tered)h(a)e(four-gluon)h
+(v)o(ertex)f(\(four)g(lines)j(eac)o(h)d(with)h(3)g(lo)q(ops\))g(is)g(dra)o
+(wn)f(in)i(the)e Fs(n)p FE(\015ipp)q(ed)j(con-)74 968 y(\014guration.)i(The)
+15 b(tip)g(of)f(the)h(south)o(w)o(estern)f(arm)g(is)h(at)f(\(0,0\))f(and)i
+(the)g(north)o(w)o(estern)f(and)h(northeastern)74 1024 y(arms)j(ha)o(v)o(e)g
+(links)i(attac)o(hed)d(\(ending)j(at)d Fk(vertextwox,y)g FE(and)i
+Fk(vertexthreex,y)d FE(resp)q(ectiv)o(ely\).)31 b(The)74 1081
+y(only)22 b(time)g(that)e(a)h Fk(\\N,)j(\\S,)f(\\E)h(or)f(\\W)f
+FE(gluon)f(v)o(ertex)g(requires)h(a)f(link)i(is)f(for)f Fs(n)p
+FE(v)o(ertexone)g(when)g(a)74 1137 y(three-gluon)15 b(v)o(ertex)e(is)h(dra)o
+(wn.)19 b(V)l(ertices)14 b(are)g(generally)g(link)o(ed)i(to)d(gluon)h(lines)h
+(but)f(ma)o(y)f(also)g(b)q(e)h(link)o(ed)74 1194 y(together)h(directly)h(as)f
+(in)h(the)f(follo)o(wing)h(example.)p 631 1444 2 5 v 631 1486
+a Fz(\022)p 673 1486 5 2 v 593 1407 2 5 v 593 1449 a(\022)p
+636 1449 5 2 v 556 1369 2 5 v 556 1412 a(\022)p 598 1412 5
+2 v 519 1332 2 5 v 519 1374 a(\022)p 561 1374 5 2 v 631 1432
+a(\003)p 631 1439 2 1 v 640 1432 1 2 v 593 1395 a(\003)p 593
+1402 2 1 v 602 1395 1 2 v 556 1358 a(\003)p 556 1365 2 1 v
+565 1358 1 2 v 647 1432 a(\000)p 647 1440 2 1 v 647 1449 a(\001)p
+640 1449 1 2 v 640 1432 V 610 1395 a(\000)p 610 1402 2 1 v
+610 1412 a(\001)p 602 1412 1 2 v 602 1395 V 573 1358 a(\000)p
+573 1365 2 1 v 573 1374 a(\001)p 565 1374 1 2 v 565 1358 V
+676 1441 a(\023)p 676 1485 2 5 v 719 1441 5 2 v 714 1403 a(\023)p
+714 1448 2 5 v 756 1403 5 2 v 751 1366 a(\023)p 751 1411 2
+5 v 793 1366 5 2 v 788 1329 a(\023)p 788 1373 2 5 v 831 1329
+5 2 v 730 1441 a(\000)p 730 1448 2 1 v 723 1441 1 2 v 768 1403
+a(\000)p 768 1410 2 1 v 760 1403 1 2 v 805 1366 a(\000)p 805
+1373 2 1 v 797 1366 1 2 v 714 1448 2 1 v 714 1457 a(\002)p
+730 1448 V -1 w(\001)p 723 1457 1 2 v 751 1411 2 1 v 751 1420
+a(\002)p 768 1411 V(\001)p 760 1420 1 2 v 788 1373 2 1 v 788
+1383 a(\002)p 805 1373 V(\001)p 797 1383 1 2 v 722 1486 a(\020)p
+722 1531 2 5 v 677 1486 5 2 v 759 1524 a(\020)p 759 1568 2
+5 v 714 1524 5 2 v 797 1561 a(\020)p 797 1606 2 5 v 752 1561
+5 2 v 834 1598 a(\020)p 834 1643 2 5 v 789 1598 5 2 v 722 1531
+2 1 v 722 1540 a(\001)p 714 1540 1 2 v 759 1568 2 1 v 759 1578
+a(\001)p 752 1578 1 2 v 797 1606 2 1 v 797 1615 a(\001)p 789
+1615 1 2 v 705 1524 a(\003)p 705 1531 2 1 v 705 1540 a(\002)p
+714 1540 1 2 v 714 1524 V 743 1561 a(\003)p 743 1568 2 1 v
+743 1578 a(\002)p 752 1578 1 2 v 752 1561 V 780 1598 a(\003)p
+780 1606 2 1 v 780 1615 a(\002)p 789 1615 1 2 v 789 1598 V
+835 1643 2 1 v 835 1652 a(\001)p 827 1652 1 2 v 818 1636 a(\003)p
+818 1643 2 1 v 818 1652 a(\002)p 827 1652 1 2 v 827 1636 V
+676 1489 2 5 v 676 1532 a(\021)p 631 1532 5 2 v 639 1527 2
+5 v 639 1569 a(\021)p 594 1569 5 2 v 602 1564 2 5 v 602 1607
+a(\021)p 557 1607 5 2 v 564 1602 2 5 v 564 1644 a(\021)p 519
+1644 5 2 v 622 1523 2 1 v 622 1532 a(\002)p 631 1532 1 2 v
+585 1560 2 1 v 585 1569 a(\002)p 594 1569 1 2 v 548 1597 2
+1 v 548 1607 a(\002)p 557 1607 1 2 v 622 1515 a(\003)p 622
+1522 2 1 v(\000)p 639 1522 V 631 1515 1 2 v 585 1553 a(\003)p
+585 1560 2 1 v(\000)p 602 1560 V 594 1553 1 2 v 548 1590 a(\003)p
+548 1597 2 1 v -1 w(\000)p 564 1597 V 557 1590 1 2 v 946 1709
+a(\020)p 946 1754 2 5 v 902 1709 5 2 v 909 1672 a(\020)p 909
+1717 2 5 v 864 1672 5 2 v 872 1635 a(\020)p 872 1680 2 5 v
+827 1635 5 2 v 892 1709 a(\003)p 892 1716 2 1 v 902 1709 1
+2 v 855 1672 a(\003)p 855 1679 2 1 v 864 1672 1 2 v 892 1717
+2 1 v 892 1726 a(\002)p 909 1717 V(\001)p 902 1726 1 2 v 855
+1680 2 1 v 855 1689 a(\002)p 872 1680 V(\001)p 864 1689 1 2
+v 990 1747 a(\010)p 990 1772 2 2 v 965 1747 V -15 w(\010)p
+1025 1772 V 1000 1747 V 973 1770 2 1 v 973 1779 a(\002)p 990
+1770 V(\001)p 983 1779 1 2 v 1009 1770 2 1 v 2 w(\002)p 1025
+1770 V -1 w(\001)p 1018 1779 1 2 v 974 1747 a(\013)p 974 1772
+2 2 v 999 1747 V -15 w(\013)p 1009 1772 V 1035 1747 V 940 1773
+V 940 1799 a(\012)p 966 1799 V 940 1808 V 940 1834 a(\012)p
+966 1834 V 972 1782 a(\000)p 972 1790 2 1 v 972 1799 a(\001)p
+964 1799 1 2 v 964 1782 V 972 1817 a(\000)p 972 1825 2 1 v
+972 1834 a(\001)p 964 1834 1 2 v 964 1817 V 940 1782 a(\013)p
+940 1807 2 2 v 966 1782 V 940 1817 a(\013)p 940 1843 V 966
+1817 V 940 1747 a(\013)p 940 1772 V 966 1747 V 160 w(\013)p
+1150 1772 V 1176 1747 V -85 w(\013)p 1115 1772 V 1140 1747
+V -86 w(\013)p 1079 1772 V 1105 1747 V -85 w(\013)p 1044 1772
+V 1070 1747 V 1150 1770 2 1 v 1150 1779 a(\002)p 1166 1770
+V -1 w(\001)p 1159 1779 1 2 v 1115 1770 2 1 v -68 w(\002)p
+1131 1770 V -1 w(\001)p 1124 1779 1 2 v 1079 1770 2 1 v -69
+w(\002)p 1096 1770 V(\001)p 1088 1779 1 2 v 1044 1770 2 1 v
+-69 w(\002)p 1061 1770 V(\001)p 1053 1779 1 2 v 1166 1747 a(\010)p
+1166 1772 2 2 v 1141 1747 V -85 w(\010)p 1131 1772 V 1106 1747
+V -85 w(\010)p 1096 1772 V 1071 1747 V -85 w(\010)p 1061 1772
+V 1036 1747 V 1176 1764 a(\007)p 1176 1780 2 1 v 1194 1764
+1 2 v 1211 1747 2 1 v 2 w(\005)p 1194 1764 1 2 v 1194 1747
+a(\004)p 1194 1763 2 1 v 1177 1747 1 2 v 1194 1764 2 1 v 1194
+1781 a(\006)p 1211 1781 1 2 v 1210 1722 a(\010)p 1210 1747
+2 2 v 1185 1722 V 1210 1687 a(\010)p 1210 1712 V 1185 1687
+V 1210 1651 a(\010)p 1210 1677 V 1185 1651 V 1210 1616 a(\010)p
+1210 1641 V 1185 1616 V 1178 1722 a(\003)p 1178 1730 2 1 v
+1178 1739 a(\002)p 1187 1739 1 2 v 1187 1722 V 1178 1687 a(\003)p
+1178 1694 2 1 v 1178 1703 a(\002)p 1187 1703 1 2 v 1187 1687
+V 1178 1651 a(\003)p 1178 1659 2 1 v 1178 1668 a(\002)p 1187
+1668 1 2 v 1187 1651 V 1178 1616 a(\003)p 1178 1624 2 1 v 1178
+1633 a(\002)p 1187 1633 1 2 v 1187 1616 V 1210 1713 2 2 v 1210
+1739 a(\011)p 1185 1739 V 1210 1678 V 1210 1703 a(\011)p 1185
+1703 V 1210 1642 V 1210 1668 a(\011)p 1185 1668 V 1210 1607
+V 1210 1633 a(\011)p 1185 1633 V 1236 1755 V 1236 1781 a(\011)p
+1211 1781 V 1271 1755 V -15 w(\011)p 1246 1781 V 1306 1755
+V -15 w(\011)p 1281 1781 V 1342 1755 V -14 w(\011)p 1317 1781
+V 1219 1749 a(\003)p 1219 1756 2 1 v(\000)p 1236 1756 V 1228
+1749 1 2 v 2 w(\003)p 1255 1756 2 1 v -1 w(\000)p 1271 1756
+V 1264 1749 1 2 v 2 w(\003)p 1290 1756 2 1 v -1 w(\000)p 1306
+1756 V 1299 1749 1 2 v 2 w(\003)p 1325 1756 2 1 v(\000)p 1342
+1756 V 1334 1749 1 2 v 1219 1755 2 2 v 1219 1781 a(\012)p 1245
+1781 V 1255 1755 V -14 w(\012)p 1280 1781 V 1290 1755 V -15
+w(\012)p 1316 1781 V 1325 1755 V -15 w(\012)p 1351 1781 V 1176
+1781 V 1176 1807 a(\012)p 1202 1807 V 1176 1817 V 1176 1842
+a(\012)p 1202 1842 V 1176 1852 V 1176 1878 a(\012)p 1202 1878
+V 1176 1887 V 1176 1913 a(\012)p 1202 1913 V 1209 1790 a(\000)p
+1209 1798 2 1 v 1209 1807 a(\001)p 1201 1807 1 2 v 1201 1790
+V 1209 1826 a(\000)p 1209 1833 2 1 v 1209 1842 a(\001)p 1201
+1842 1 2 v 1201 1826 V 1209 1861 a(\000)p 1209 1868 2 1 v 1209
+1878 a(\001)p 1201 1878 1 2 v 1201 1861 V 1209 1896 a(\000)p
+1209 1904 2 1 v 1209 1913 a(\001)p 1201 1913 1 2 v 1201 1896
+V 1176 1790 a(\013)p 1176 1816 2 2 v 1202 1790 V 1176 1826
+a(\013)p 1176 1851 V 1202 1826 V 1176 1861 a(\013)p 1176 1886
+V 1202 1861 V 1176 1896 a(\013)p 1176 1921 V 1202 1896 V 145
+1986 a FE(whic)o(h)g(w)o(as)e(pro)q(duced)j(b)o(y)e(the)g(three)g(statemen)o
+(ts)74 2136 y Fk(\\begin{picture}\(8000,12000\))74 2193 y(\\vertexlink3)22
+b(\\drawvertex\\gluon[\\SE)f(4]\(0,11500\)[3])74 2249 y
+(\\flipvertex\\drawvertex\\gluo)o(n[\\SE)g(3]\(\\vertexthreex,\\vertex)o
+(threey\))o([2])74 2305 y(\\flipvertex\\drawvertex\\gluo)o(n[\\E)g
+(4]\(\\vertextwox,\\vertextwo)o(y\)[4])74 2362 y(\\end{picture})74
+2512 y FE(Note)16 b(that)f(the)g Fs(n)p FE(E)h(four-gluon)g(v)o(ertex)f
+(requires)i(no)e(sp)q(ecial)j(links)f(\(since)f(it)g(is)h(dra)o(wn)e(using)h
+Fs(n)p FE(CURL)l(Y)74 2569 y(st)o(yle)10 b(gluons\).)19 b(In)11
+b(parting)f(note)g(that)f(links)j(ma)o(y)d(b)q(e)i(dra)o(wn)f(b)q(oth)g(with)
+g Fs(n)p FE(THINLINES)i(and)e Fs(n)p FE(THICKLINES)74 2625
+y(and)16 b(will)g(not)f(app)q(ear)h(when)f(used)h(within)g(phan)o(tom)f(mo)q
+(de)h(\(section)f(4.1.2\).)985 2906 y(57)p eop
+%%Page: 58 63
+bop 74 -83 a Fp(4.3.2)55 b(Stems)74 3 y FE(Stems)16 b(are)g(small)h(line)h
+(segmen)o(ts)e(attac)o(hed)g(to)f(the)i(end)g(of)f(particle)h(lines.)25
+b(Gluons)16 b(and)h(photons)f(ma)o(y)74 59 y(b)q(e)i(sp)q(eci\014ed)h(with)e
+(a)g(stem)f(on)h(either)h(end)g(or)e(b)q(oth)h(ends.)26 b(V)l(ertices)18
+b(ma)o(y)e(also)h(b)q(e)h(dra)o(wn)e(with)i(stems)74 116 y(on)d(an)o(y)g(or)g
+(all)h(of)f(the)g(lines.)74 233 y Fu(Stemmed)i(Lines)74 319
+y FE(Examples)j(of)e(stemmed)h(lines)i(ha)o(v)o(e)e(b)q(een)h(giv)o(en)f(in)h
+(sections)g(2.9.2)d(\(photons\))h(and)i(2.10.2)d(\(gluons\).)74
+376 y(They)e(are)e(most)h(\032stetically)h(pleasing)h(when)e(used)h(in)g
+(conjunction)g(with)g(gluons)g(of)e(a)h(cen)o(tralized)i(st)o(yle)74
+432 y(\()p Fo(i.e.)23 b FE(diagonal)12 b(gluons)g(or)f(those)g(of)g(st)o
+(yles)g Fs(n)p FE(CENTRAL)h(and)f Fs(n)p FE(FLIPPEDCENTRAL\).)g(T)l(o)g(add)h
+(a)e(stem)74 489 y(to)15 b(a)h(line)h(en)o(ter)e(one)h(of)f
+Fk(\\frontstemmed)f FE(or)h Fk(\\backstemmed)f FE(just)i(prior)f(to)g(the)h
+Fs(n)p FE(dra)o(wline)h(statemen)o(t.)74 545 y(T)l(o)e(stem)g(b)q(oth)g(fron)
+o(t)f(and)i(bac)o(k)f(en)o(ter)g Fk(\\stemmed)p FE(.)k(That)14
+b(is)74 681 y Fk(\\frontstemmed\\drawline...)74 738 y
+(\\backstemmed\\drawline...)74 794 y(\\stemmed\\drawline...)74
+931 y FE(The)i(length)f(of)g(a)g(stem)g(ma)o(y)f(b)q(e)i(set)f(b)o(y)g
+(issuing)i(the)e(command)74 1011 y Fk(\\global\\stemlength=<number)20
+b(in)k(centipoints>)74 1091 y FE(just)16 b(prior)f(to)g(the)h(stem)f
+(command.)22 b(The)16 b(length)g(is)g(automatically)g(re-set)g(to)f(its)h
+(default)g(v)m(alue.)22 b(Note)74 1147 y(that,)f(since)h(diagonal)f(lines)h
+(of)e(length)h(less)h(than)e(1415)g(cen)o(tip)q(oin)o(ts)h(cannot)g(b)q(e)g
+(dra)o(wn,)g(this)g(is)g(the)74 1204 y(minim)o(um)f(stemlength)e(p)q(ossible)
+j(for)c(a)h(diagonal)h(particle.)31 b(A)o(ttempts)17 b(to)h(dra)o(w)g(a)g
+(shorter)f(stem)h(will)74 1260 y(result)e(in)g(a)f(gap.)k(T)l(o)c(illustrate)
+74 1397 y Fk(\\begin{picture}\(15000,8000\))74 1453 y
+(\\frontstemmed\\drawline\\gluo)o(n[\\E\\CEN)o(TRAL]\(1)o(000,600)o(0\)[3])74
+1510 y(\\drawline\\fermion[\\SW\\REG]\()o(\\pfrontx)o(,\\pfron)o(ty\)[150)o
+(0])74 1566 y(\\drawline\\fermion[\\NW\\REG]\()o(\\pfrontx)o(,\\pfron)o
+(ty\)[150)o(0])74 1679 y(\\global\\stemlength=750)74 1736 y
+(\\frontstemmed\\drawline\\gluo)o(n[\\E\\CEN)o(TRAL]\(1)o(000,100)o(0\)[3])74
+1792 y(\\drawline\\fermion[\\SW\\REG]\()o(\\pfrontx)o(,\\pfron)o(ty\)[150)o
+(0])74 1848 y(\\drawline\\fermion[\\NW\\REG]\()o(\\pfrontx)o(,\\pfron)o
+(ty\)[150)o(0])74 1961 y(\\stemmed\\drawline\\photon[\\N)o(E\\FLIPPE)o
+(D]\(1000)o(0,2000\))o([5])74 2018 y(\\global\\Xone=\\pbackx)45
+b(\\global\\Yone=\\pbacky)74 2074 y(\\drawline\\fermion[\\S\\REG]\(\\)o
+(pfrontx,)o(\\pfront)o(y\)[1500)o(])74 2131 y
+(\\drawline\\fermion[\\W\\REG]\(\\)o(pfrontx,)o(\\pfront)o(y\)[1500)o(])74
+2187 y(\\drawline\\fermion[\\N\\REG]\(\\)o(Xone,\\Yo)o(ne\)[150)o(0])74
+2244 y(\\drawline\\fermion[\\E\\REG]\(\\)o(Xone,\\Yo)o(ne\)[150)o(0])74
+2300 y(\\end{picture})74 2437 y FE(giving)p 186 2533 12 2 v
+249 2507 a Fz(\010)p 249 2533 2 2 v 223 2507 V -15 w(\010)p
+284 2533 V 259 2507 V -15 w(\010)p 319 2533 V 294 2507 V -15
+w(\010)p 354 2533 V 329 2507 V 232 2531 2 1 v 232 2540 a(\002)p
+249 2531 V(\001)p 241 2540 1 2 v 267 2531 2 1 v 1 w(\002)p
+284 2531 V(\001)p 276 2540 1 2 v 302 2531 2 1 v 1 w(\002)p
+319 2531 V(\001)p 312 2540 1 2 v 197 2507 a(\013)p 197 2533
+2 2 v 222 2507 V -15 w(\013)p 232 2533 V 258 2507 V -15 w(\013)p
+267 2533 V 293 2507 V -15 w(\013)p 302 2533 V 328 2507 V 144
+2574 a Fy(\000)142 2576 y(\000)144 2533 y(@)142 2531 y(@)p
+186 2741 32 2 v 268 2715 a Fz(\010)p 268 2740 2 2 v 243 2715
+V -14 w(\010)p 304 2740 V 278 2715 V -15 w(\010)p 339 2740
+V 314 2715 V -15 w(\010)p 374 2740 V 349 2715 V 252 2738 2
+1 v 252 2747 a(\002)p 268 2738 V -1 w(\001)p 261 2747 1 2 v
+287 2738 2 1 v 2 w(\002)p 304 2738 V(\001)p 296 2747 1 2 v
+322 2738 2 1 v 1 w(\002)p 339 2738 V(\001)p 331 2747 1 2 v
+216 2715 a(\013)p 216 2740 2 2 v 242 2715 V -14 w(\013)p 252
+2740 V 277 2715 V -15 w(\013)p 287 2740 V 313 2715 V -15 w(\013)p
+322 2740 V 348 2715 V 144 2781 a Fy(\000)142 2784 y(\000)144
+2740 y(@)142 2738 y(@)592 2639 y Fz(\013)p 592 2664 V 618 2639
+V 644 2588 a(\013)p 644 2613 V 670 2588 V 592 2666 V 592 2691
+a(\011)p 567 2691 V 644 2614 V 644 2639 a(\011)p 619 2639 V
+696 2562 V 696 2588 a(\011)p 671 2588 V 558 2761 2 63 v 497
+2699 63 2 v 704 2553 2 63 v 705 2554 63 2 v 985 2906 a FE(58)p
+eop
+%%Page: 59 64
+bop 145 -83 a FE(Stems)22 b(ma)o(y)g(b)q(e)i(also)e(em)o(b)q(oldened)j(via)e
+Fs(n)p FE(THICKLINES)h(and)e(will)j(not)d(app)q(ear)h(when)g(used)g(in)74
+-26 y(phan)o(tom)15 b(mo)q(de.)20 b(A)15 b(n)o(um)o(b)q(er)h(of)f(additional)
+h(features)f(need)h(to)f(b)q(e)g(men)o(tioned.)145 30 y(Occasionally)i(it)e
+(ma)o(y)f(transpire)i(that)e(the)h(user)g(needs)h(to)e(reference)i(the)f(p)q
+(osition)h(of)f(the)g(endp)q(oin)o(t)74 87 y(of)22 b(a)g(line)h(b)q(oth)f
+(with)h(the)f(stem)g(and)g(without)g(it)g(\(p)q(erhaps)h(for)e(alignmen)o(t)i
+(purp)q(oses\).)40 b(After)22 b(the)74 143 y Fs(n)p FE(stemmed)p
+Fs(n)p FE(dra)o(wline)16 b(has)g(b)q(een)h(issued)g(the)f(follo)o(wing)g
+(returned)g(parameters)f(refer)h(to)f(the)h(tips)g(of)f(the)74
+199 y Fo(stems)p FE(:)193 292 y Fk(\\pfrontx)95 b(\\pbackx)118
+b(\\pmidx)h(\\plengthx)f(\\boxlengthx)193 349 y(\\pfronty)95
+b(\\pbacky)118 b(\\pmidy)h(\\plengthy)f(\\boxlengthy)74 442
+y FE(whereas)15 b(the)h(follo)o(wing)f(returned)h(parameters)e(refer)h(to)g
+(the)g(tips)h(of)f(the)g Fo(p)n(article)p FE(:)384 535 y Fk(\\gluonfrontx)94
+b(\\gluonbackx)118 b(\\gluonlengthx)384 591 y(\\gluonfronty)94
+b(\\gluonbacky)118 b(\\gluonlengthy)384 648 y(\\photonfrontx)70
+b(\\photonbackx)94 b(\\photonlengthx)384 704 y(\\photonfronty)70
+b(\\photonbacky)94 b(\\photonlengthy)74 797 y FE(the)14 b(same)g(is)h(true)f
+(for)f Fs(n)p FE(fron)o(tstemmed)g(and)i Fs(n)p FE(bac)o(kstemmed.)k(This)14
+b(do)q(es)h(ha)o(v)o(e)f(a)f(disadv)m(an)o(tage)i(in)g(that)74
+853 y(one)g(frequen)o(tly)g(m)o(ust)f(store)g(the)h(v)m(alues)g(of)f
+Fk(\\pbackx,\\pbacky)f Fo(etc.)30 b FE(in)15 b(order)g(to)f(dra)o(w)g(arro)o
+(ws)f(and)h(so)74 910 y(forth)h(after)f(in)o(terv)o(ening)i
+Fs(n)p FE(dra)o(wline)g(commands.)145 966 y(When)22 b(a)f(stem)g(is)h(dra)o
+(wn)f(it)g(do)q(es)h(not)f(truly)h(b)q(ecome)g(part)f(of)f(the)i(line)h(to)e
+(whic)o(h)h(it)g(has)f(b)q(een)74 1023 y(attac)o(hed.)27 b(F)l(or)17
+b(this)h(reason)f(if)h Fs(n)p FE(dra)o(w)o(andsa)o(v)o(eline)g(is)g(used)g
+(with)g(a)g(stem)f(statemen)o(t)g(the)g Fo(line)g FE(will)i(b)q(e)74
+1079 y(sa)o(v)o(ed)c(but)g Fo(not)g FE(the)h(stem\(s\).)i(That)d(is)h(the)f
+(statemen)o(ts)74 1172 y Fk(\\global\\stemlength=100)74 1229
+y(\\stemmed\\drawandsaveline`\\l)o(ittleste)o(m')21 b(as)j
+(\\gluon[\\W\\CENTRALGLUON])o(\(0,0\)[5)o(])74 1322 y FE(will)i(pro)q(duce)g
+(a)e(line)i(as)e(if)h Fs(n)p FE(dra)o(wline)g(had)g(b)q(een)g(issued)h
+(\(with)e(stems\))g(but)g(attempts)g(to)g(re-use)74 1378 y
+Fs(n)p FE(littlestem)f(will)g(result)g(in)f(a)g(stemless)g(gluon.)40
+b(The)22 b(same)g(is)g(true)g(for)f(storing)g(gluons)i(with)f(links)74
+1434 y(and)c(caps)g(attac)o(hed.)28 b(Stems)18 b(sa)o(v)o(ed)f(with)i(the)f
+Fs(n)p FE(sa)o(v)o(eb)q(o)o(x)f(facilit)o(y)i(will,)h(of)d(course,)i(b)q(e)f
+(retained.)29 b(F)l(ur-)74 1491 y(thermore)18 b(in)g(the)g(ab)q(o)o(v)o(e)g
+(example)g(the)g(reduced)h Fs(n)p FE(stemlength)f(will)i(also)d(rev)o(ert)h
+(to)f(its)h(default)g(v)m(alue.)74 1547 y(W)l(e)d(demonstrate)g(the)g
+(previous)h(p)q(oin)o(ts:)74 1709 y Fk(\\begin{picture}\(8000,10000\))74
+1822 y(\\stemmed\\drawandsaveline`\\u)o(nstemmed)o(')21 b(as)j
+(\\gluon[\\W\\CENTRAL]\(7000,)o(8000\)[5)o(])74 1878 y
+(\\global\\Xone=\\pbackx)45 b(\\global\\Yone=\\pbacky)74 1935
+y(\\global\\Xthree=\\plengthx)g(\\global\\Ythree=\\plength)o(y)g(\045)24
+b(store)f(gluon)g(length)74 1991 y(\\drawline\\fermion[\\NE\\REG]\()o
+(\\pfrontx)o(,\\pfron)o(ty\)[150)o(0])74 2048 y
+(\\drawline\\fermion[\\SE\\REG]\()o(\\pfrontx)o(,\\pfron)o(ty\)[150)o(0])74
+2104 y(\\drawline\\fermion[\\NW\\REG]\()o(\\Xone,\\Y)o(one\)[15)o(00])74
+2160 y(\\drawline\\fermion[\\SW\\REG]\()o(\\Xone,\\Y)o(one\)[15)o(00])74
+2273 y(\\global\\plengthx=\\Xthree)e(\\global\\plengthy=\\Ythree)68
+b(\045re-sets)23 b(gluon)g(lengths)74 2386 y(\\drawoldpic\\unstemmed\(7000,)o
+(4000\))74 2443 y(\\global\\Xone=\\pbackx)45 b(\\global\\Yone=\\pbacky)74
+2499 y(\\global\\Xtwo=\\pfrontx)g(\\global\\Ytwo=\\pfronty)74
+2556 y(\\drawline\\fermion[\\NE\\REG]\()o(\\gluonfr)o(ontx,\\g)o(luonfro)o
+(nty\)[300)o(0])74 2612 y(\\drawline\\fermion[\\SE\\REG]\()o(\\gluonfr)o
+(ontx,\\g)o(luonfro)o(nty\)[300)o(0])74 2669 y
+(\\drawline\\fermion[\\NW\\REG]\()o(\\gluonba)o(ckx,\\gl)o(uonback)o
+(y\)[3000])74 2725 y(\\drawline\\fermion[\\SW\\REG]\()o(\\gluonba)o(ckx,\\gl)
+o(uonback)o(y\)[3000])985 2906 y FE(59)p eop
+%%Page: 60 65
+bop 74 -83 a Fk(\\drawline\\fermion[\\NE\\REG]\()o(\\Xtwo,\\Y)o(two\)[15)o
+(00])74 -26 y(\\drawline\\fermion[\\SE\\REG]\()o(\\Xtwo,\\Y)o(two\)[15)o(00])
+74 30 y(\\drawline\\fermion[\\NW\\REG]\()o(\\Xone,\\Y)o(one\)[15)o(00])74
+87 y(\\drawline\\fermion[\\SW\\REG]\()o(\\Xone,\\Y)o(one\)[15)o(00])74
+143 y(\\end{picture})p 424 337 12 2 v 370 337 2 2 v 370 363
+a Fz(\012)p 396 363 V 335 337 V -85 w(\012)p 361 363 V 300
+337 V -85 w(\012)p 326 363 V 265 337 V -85 w(\012)p 290 363
+V 229 337 V -86 w(\012)p 255 363 V 194 337 V -85 w(\012)p 220
+363 V 370 331 a(\003)p 370 338 2 1 v(\000)p 387 338 V 379 331
+1 2 v -69 w(\003)p 335 338 2 1 v(\000)p 352 338 V 344 331 1
+2 v -69 w(\003)p 300 338 2 1 v -1 w(\000)p 316 338 V 309 331
+1 2 v -68 w(\003)p 265 338 2 1 v -1 w(\000)p 281 338 V 274
+331 1 2 v -69 w(\003)p 229 338 2 1 v(\000)p 246 338 V 238 331
+1 2 v 422 337 2 2 v 422 363 a(\011)p 397 363 V 387 337 V -85
+w(\011)p 362 363 V 352 337 V -85 w(\011)p 327 363 V 316 337
+V -86 w(\011)p 291 363 V 281 337 V -85 w(\011)p 256 363 V 246
+337 V -85 w(\011)p 221 363 V 184 337 12 2 v 434 336 a Fy(\000)437
+334 y(\000)434 378 y(@)437 380 y(@)142 336 y(@)139 334 y(@)142
+378 y(\000)139 380 y(\000)p 382 503 2 2 v 382 529 a Fz(\012)p
+407 529 V 346 503 V -86 w(\012)p 372 529 V 311 503 V -85 w(\012)p
+337 529 V 276 503 V -85 w(\012)p 302 529 V 241 503 V -85 w(\012)p
+266 529 V 205 503 V -86 w(\012)p 231 529 V 382 497 a(\003)p
+382 504 2 1 v -1 w(\000)p 398 504 V 391 497 1 2 v -69 w(\003)p
+346 504 2 1 v(\000)p 363 504 V 356 497 1 2 v -69 w(\003)p 311
+504 2 1 v(\000)p 328 504 V 320 497 1 2 v -69 w(\003)p 276 504
+2 1 v(\000)p 293 504 V 285 497 1 2 v -69 w(\003)p 241 504 2
+1 v -1 w(\000)p 257 504 V 250 497 1 2 v 434 503 2 2 v 434 529
+a(\011)p 408 529 V 398 503 V -86 w(\011)p 373 529 V 363 503
+V -85 w(\011)p 338 529 V 328 503 V -85 w(\011)p 303 529 V 293
+503 V -85 w(\011)p 267 529 V 257 503 V -86 w(\011)p 232 529
+V 423 336 a Fy(\000)465 295 y(\000)469 290 y(\000)423 378 y(@)465
+419 y(@)469 424 y(@)153 336 y(@)112 295 y(@)107 290 y(@)153
+378 y(\000)112 419 y(\000)107 424 y(\000)434 502 y(\000)437
+500 y(\000)434 544 y(@)437 546 y(@)142 502 y(@)139 500 y(@)142
+544 y(\000)139 546 y(\000)145 725 y FE(Note)16 b(ho)o(w)g(the)h(line)h
+(length)g(needed)g(to)e(b)q(e)h(stored)f(when)h Fs(n)p FE(dra)o(w)o(oldpic)h
+(w)o(as)d(called.)26 b(As)17 b(explained)74 781 y(b)q(efore)d
+Fs(n)p FE(dra)o(w)o(oldpic)g(re-sets)f Fs(n)p FE(pfron)o(tx,y)g(to)g(the)g(p)
+q(oin)o(t)h(from)f(whic)o(h)i(the)e(line)j(is)e(curren)o(tly)g(b)q(eing)h
+(dra)o(wn)74 838 y(and)k(calculates)g Fs(n)p FE(pmidx,y)g(and)f
+Fs(n)p FE(pbac)o(kx,y)g(based)h(up)q(on)g(that)e(p)q(oin)o(t)i(and)g(the)f
+(most)g(recen)o(t)g(v)m(alue)i(of)74 894 y Fs(n)p FE(plengthx,y)l(.)j(This)16
+b(is)h(useful)g(when)f(the)g(same)g(line)i(is)e(b)q(eing)h(rep)q(eatedly)h
+(dra)o(wn)d(without)h(in)o(terv)o(ening)74 951 y Fs(n)p FE(dra)o(wline)i(or)f
+Fs(n)p FE(dra)o(wv)o(ertex)f(commands.)26 b(When)17 b(suc)o(h)h(commands)f(o)
+q(ccur)g(the)h(lengths)g(are)e(lost.)26 b(Ob-)74 1007 y(viously)19
+b Fs(n)p FE(plengthx,y)e(w)o(ere)h(measured)f(inclusiv)o(e)j(of)d(the)h
+(stems.)26 b(T)l(o)17 b(a)o(v)o(oid)h(this)f(di\016cult)o(y)i(one)f(w)o(ould)
+74 1063 y(instead)e(let)g Fs(n)p FE(Xthree=)p Fs(n)p FE(gluonlengthx)g(and)g
+(then)f(assign)g(this)h(v)m(alue)g(to)f Fs(n)p FE(plengthx.)145
+1120 y(The)g(same)f(line)j(ma)o(y)d(b)q(e)h(b)q(oth)g(stemmed)g(and)g(link)o
+(ed.)21 b(If)15 b(this)g(is)h(attempted)e(on)h(the)g(same)f(end)h(y)o(ou)74
+1176 y(will)i(obtain)e(nonsense.)189 1265 y Fz(\020)p 189 1309
+2 5 v 144 1265 5 2 v 226 1302 a(\020)p 226 1347 2 5 v 181 1302
+5 2 v 263 1339 a(\020)p 263 1384 2 5 v 219 1339 5 2 v 301 1376
+a(\020)p 301 1421 2 5 v 256 1376 5 2 v 189 1309 2 1 v 189 1318
+a(\001)p 181 1318 1 2 v 226 1347 2 1 v 226 1356 a(\001)p 219
+1356 1 2 v 264 1384 2 1 v 264 1393 a(\001)p 256 1393 1 2 v
+172 1302 a(\003)p 172 1309 2 1 v 172 1318 a(\002)p 181 1318
+1 2 v 181 1302 V 210 1339 a(\003)p 210 1347 2 1 v 210 1356
+a(\002)p 219 1356 1 2 v 219 1339 V 247 1376 a(\003)p 247 1384
+2 1 v 247 1393 a(\002)p 256 1393 1 2 v 256 1376 V 302 1463
+a Fy(@)-42 b(@)p 302 1421 2 1 v 302 1430 a Fz(\001)p 294 1430
+1 2 v 285 1414 a(\003)p 285 1421 2 1 v 285 1430 a(\002)p 294
+1430 1 2 v 294 1414 V 560 1430 12 2 v 622 1404 a(\010)p 622
+1429 2 2 v 597 1404 V -15 w(\010)p 657 1429 V 632 1404 V -15
+w(\010)p 692 1429 V 667 1404 V -14 w(\010)p 728 1429 V 703
+1404 V -15 w(\010)p 763 1429 V 738 1404 V 605 1427 2 1 v 605
+1437 a(\002)p 622 1427 V(\001)p 614 1436 1 2 v 641 1427 2 1
+v 2 w(\002)p 657 1427 V -1 w(\001)p 650 1436 1 2 v 676 1427
+2 1 v 2 w(\002)p 693 1427 V(\001)p 685 1436 1 2 v 711 1427
+2 1 v 1 w(\002)p 728 1427 V(\001)p 720 1436 1 2 v 570 1404
+a(\013)p 570 1429 2 2 v 596 1404 V -15 w(\013)p 605 1429 V
+631 1404 V -14 w(\013)p 641 1429 V 666 1404 V -15 w(\013)p
+676 1429 V 702 1404 V -15 w(\013)p 711 1429 V 737 1404 V 747
+1429 2 1 v 747 1439 a(\002)p 764 1429 V(\001)p 756 1439 1 2
+v 517 1429 a Fy(@)476 1388 y(@)442 1354 y(@)517 1471 y(\000)476
+1512 y(\000)442 1547 y(\000)852 1404 y Fz(\013)p 852 1429 2
+2 v 878 1404 V -85 w(\013)p 817 1429 V 842 1404 V -86 w(\013)p
+781 1429 V 807 1404 V -85 w(\013)p 746 1429 V 772 1404 V 852
+1427 2 1 v 852 1437 a(\002)p 869 1427 V(\001)p 861 1436 1 2
+v 817 1427 2 1 v -69 w(\002)p 833 1427 V -1 w(\001)p 826 1436
+1 2 v 781 1427 2 1 v -69 w(\002)p 798 1427 V(\001)p 791 1436
+1 2 v 904 1404 a(\010)p 904 1429 2 2 v 879 1404 V -85 w(\010)p
+869 1429 V 843 1404 V -86 w(\010)p 833 1429 V 808 1404 V -85
+w(\010)p 798 1429 V 773 1404 V 904 1385 a(\023)p 904 1429 2
+5 v 946 1385 5 2 v 941 1347 a(\023)p 941 1392 2 5 v 984 1347
+5 2 v 979 1310 a(\023)p 979 1355 2 5 v 1021 1310 5 2 v 1016
+1273 a(\023)p 1016 1317 2 5 v 1058 1273 5 2 v 958 1385 a(\000)p
+958 1392 2 1 v 950 1385 1 2 v 995 1347 a(\000)p 995 1354 2
+1 v 988 1347 1 2 v 1032 1310 a(\000)p 1032 1317 2 1 v 1025
+1310 1 2 v 941 1392 2 1 v 941 1401 a(\002)p 958 1392 V(\001)p
+950 1401 1 2 v 979 1355 2 1 v 979 1364 a(\002)p 995 1355 V
+-1 w(\001)p 988 1364 1 2 v 1016 1317 2 1 v 1016 1327 a(\002)p
+1032 1317 V -1 w(\001)p 1025 1327 1 2 v 903 1433 2 5 v 903
+1476 a(\022)p 946 1476 5 2 v 941 1471 2 5 v 941 1513 a(\022)p
+983 1513 5 2 v 978 1508 2 5 v 978 1551 a(\022)p 1020 1551 5
+2 v 1015 1546 2 5 v 1015 1588 a(\022)p 1058 1588 5 2 v 957
+1467 2 1 v 957 1476 a(\001)p 950 1476 1 2 v 995 1504 2 1 v
+995 1513 a(\001)p 987 1513 1 2 v 1032 1542 2 1 v 1032 1551
+a(\001)p 1025 1551 1 2 v 941 1459 a(\003)p 941 1466 2 1 v -1
+w(\000)p 957 1466 V 950 1459 1 2 v 978 1497 a(\003)p 978 1504
+2 1 v(\000)p 995 1504 V 987 1497 1 2 v 1015 1534 a(\003)p 1015
+1541 2 1 v(\000)p 1032 1541 V 1025 1534 1 2 v 145 1712 a FE(whic)o(h)16
+b(comes)f(from)74 1875 y Fk(\\begin{picture}\(18000,10000)o(\))74
+1931 y(\\global\\stemlength=1416)74 1988 y(\\backstemmed\\drawline\\gluon)o
+([\\SE\\REG)o(]\(0,800)o(0\)[3]\\g)o(luonlink)74 2100 y
+(\\frontstemmed\\drawline\\gluo)o(n[\\E\\CEN)o(TRAL]\(1)o(0000,40)o
+(00\)[4]\\g)o(luonlin)o(k)74 2157 y(\\drawline\\fermion[\\NW\\REG]\()o
+(\\pfrontx)o(,\\pfron)o(ty\)[400)o(0])74 2213 y
+(\\drawline\\fermion[\\SW\\REG]\()o(\\pfrontx)o(,\\pfron)o(ty\)[400)o(0])74
+2270 y(\\flipvertex\\drawvertex\\gluo)o(n[\\E)21 b
+(3]\(\\gluonbackx,\\gluonback)o(y\)[3])74 2326 y(\\end{picture})985
+2906 y FE(60)p eop
+%%Page: 61 66
+bop 74 -83 a Fu(Stemmed)17 b(V)l(ertices)74 3 y FE(The)i Fs(n)p
+Fo(stemvertex)e FE(and)h Fs(n)p Fo(stemvertic)n(es)f FE(quali\014ers)j(add)e
+(a)g(stem)g(or)f(stems)h(to)f(the)i(rear)e(of)h(v)o(ertex)g(lines)74
+59 y(dra)o(wn)d(with)g(a)g Fs(n)p FE(dra)o(wv)o(ertex)f(command.)20
+b(The)15 b(syn)o(tax)g(is:)74 210 y Fk(\\stemvertex<n>\\drawvertex..)o(.)74
+266 y(\\stemvertices\\drawvertex...)74 416 y FE(where)f Fk(<n>)g
+FE(is)g(the)g(n)o(um)o(b)q(er)g(of)g(the)g(v)o(ertex)f(line)j(to)d(b)q(e)h
+(stemmed.)20 b Fs(n)p FE(stem)o(v)o(ertices)13 b(stems)h(all)g(of)g(the)g
+(lines.)74 473 y(Theses)i(commands)f(remain)g(in)h(e\013ect)f(only)h(for)f
+(the)g(curren)o(t)g Fs(n)p FE(dra)o(wv)o(ertex.)j(F)l(or)d(example)74
+623 y Fk(\\stemvertex2\\drawvertex\\pho)o(ton[\\E)21 b
+(3]\(\\Xone,\\Yone\)[6])74 680 y(\\global\\stemlength=1415)74
+736 y(\\stemvertices\\drawvertex\\gl)o(uon[\\SW)f(4]\(0,0\)[4])74
+886 y FE(will)d(dra)o(w)e(a)g(three-photon)h(v)o(ertex)f(with)h(a)f(stem)g
+(of)g(standard)g(length)h(on)g(the)f(second)h(line)i(\(in)e(the)f(NE)74
+943 y(direction\))k(and)f(a)f(four-gluon)h(v)o(ertex)f(with)h(stems)g(of)f
+(length)h(1415)f(on)g(eac)o(h)h(of)f(the)h(four)g(lines.)28
+b(Note)74 999 y(that)14 b(the)h(stemlength)g(is)h(not)e(reset)h(un)o(til)h
+(the)f(en)o(tire)g(v)o(ertex)f(has)h(b)q(een)h(completed.)21
+b(T)l(o)14 b(stem)h(just)g(lines)74 1056 y(t)o(w)o(o)f(and)h(four)g(one)h(w)o
+(ould)f(ha)o(v)o(e)g(written)74 1150 y Fk(\\global\\stemlength=1415)74
+1206 y(\\stemvertex2\\stemvertex4\\dr)o(awvertex)o(\\gluon[)o(\\SW)21
+b(4]\(0,0\)[4])74 1300 y FE(and)14 b(so)g(forth.)19 b(In)14
+b(this)h(case)f Fs(n)p FE(v)o(ertexonex,)f Fs(n)p FE(v)o(ertexoney)g
+Fo(etc.)29 b FE(refer)14 b(to)f(the)h(end)h(of)e(the)h(stem)g(and)g(there)74
+1356 y(is)21 b(no)f(easy)g(w)o(a)o(y)f(of)g(marking)h(the)g(end)h(of)f(a)g
+(giv)o(en)g(line)i Fo(sans)e(stem)p FE(.)34 b Fs(n)p FE(stem)o(v)o(ertex)19
+b(ma)o(y)g(b)q(e)i(used)f(in)74 1413 y(conjunction)c(with)g
+Fs(n)p FE(v)o(ertexlink)g(and)f Fs(n)p FE(v)o(ertexcap.)20
+b(As)15 b(an)g(exercise)h(try)f(to)f(pro)q(duce:)p 545 2227
+2 2 v 545 2252 a Fz(\011)p 520 2252 V 545 2262 V 545 2288 a(\011)p
+520 2288 V 545 2297 V 545 2323 a(\011)p 520 2323 V 545 2332
+V 545 2358 a(\011)p 520 2358 V 545 2368 V 545 2393 a(\011)p
+520 2393 V 511 2236 a(\003)p 511 2243 2 1 v 511 2252 a(\002)p
+520 2252 1 2 v 520 2236 V 511 2271 a(\003)p 511 2278 2 1 v
+511 2288 a(\002)p 520 2288 1 2 v 520 2271 V 511 2306 a(\003)p
+511 2314 2 1 v 511 2323 a(\002)p 520 2323 1 2 v 520 2306 V
+511 2341 a(\003)p 511 2349 2 1 v 511 2358 a(\002)p 520 2358
+1 2 v 520 2341 V 545 2200 a(\010)p 545 2225 2 2 v 520 2200
+V 545 2236 a(\010)p 545 2261 V 520 2236 V 545 2271 a(\010)p
+545 2296 V 520 2271 V 545 2306 a(\010)p 545 2331 V 520 2306
+V 545 2341 a(\010)p 545 2367 V 520 2341 V 519 2405 2 12 v 473
+2158 2 5 v 473 2200 a(\022)p 515 2200 5 2 v 435 2120 2 5 v
+435 2163 a(\022)p 478 2163 5 2 v 398 2083 2 5 v 398 2125 a(\022)p
+440 2125 5 2 v 361 2046 2 5 v 361 2088 a(\022)p 403 2088 5
+2 v 323 2008 2 5 v 323 2051 a(\022)p 366 2051 5 2 v 473 2146
+a(\003)p 473 2153 2 1 v 482 2146 1 2 v 435 2109 a(\003)p 435
+2116 2 1 v 444 2109 1 2 v 398 2071 a(\003)p 398 2078 2 1 v
+407 2071 1 2 v 361 2034 a(\003)p 361 2041 2 1 v 370 2034 1
+2 v 489 2146 a(\000)p 489 2154 2 1 v 489 2163 a(\001)p 482
+2163 1 2 v 482 2146 V 452 2109 a(\000)p 452 2116 2 1 v 452
+2125 a(\001)p 444 2125 1 2 v 444 2109 V 414 2071 a(\000)p 414
+2079 2 1 v 414 2088 a(\001)p 407 2088 1 2 v 407 2071 V 377
+2034 a(\000)p 377 2041 2 1 v 377 2051 a(\001)p 370 2051 1 2
+v 370 2034 V 565 2158 2 5 v 565 2200 a(\021)p 520 2200 5 2
+v 602 2121 2 5 v 602 2163 a(\021)p 557 2163 5 2 v 639 2083
+2 5 v 639 2126 a(\021)p 595 2126 5 2 v 677 2046 2 5 v 677 2088
+a(\021)p 632 2088 5 2 v 714 2009 2 5 v 714 2051 a(\021)p 669
+2051 5 2 v 565 2146 a(\000)p 565 2153 2 1 v 557 2146 1 2 v
+602 2109 a(\000)p 602 2116 2 1 v 595 2109 1 2 v 639 2072 a(\000)p
+639 2079 2 1 v 632 2072 1 2 v 677 2034 a(\000)p 677 2041 2
+1 v 669 2034 1 2 v 548 2146 a(\003)p 548 2154 2 1 v 548 2163
+a(\002)p 557 2163 1 2 v 557 2146 V 585 2109 a(\003)p 585 2117
+2 1 v 585 2126 a(\002)p 594 2126 1 2 v 594 2109 V 623 2072
+a(\003)p 623 2079 2 1 v 623 2088 a(\002)p 632 2088 1 2 v 632
+2072 V 660 2034 a(\003)p 660 2042 2 1 v 660 2051 a(\002)p 669
+2051 1 2 v 669 2034 V 714 1999 a(\000)p 714 2006 2 1 v 707
+1999 1 2 v -33 w(\003)p 698 2006 2 1 v 698 2015 a(\002)p 707
+2015 1 2 v 707 1999 V 477 2447 a Fy(\000)460 2464 y(\000)519
+2447 y(@)536 2464 y(@)p 323 2004 2 83 v 241 2005 83 2 v 863
+1861 2 5 v 863 1903 a Fz(\021)p 818 1903 5 2 v 826 1898 2 5
+v 826 1941 a(\021)p 781 1941 5 2 v 788 1936 2 5 v 788 1978
+a(\021)p 743 1978 5 2 v 751 1973 2 5 v 751 2015 a(\021)p 706
+2015 5 2 v 809 1894 2 1 v 809 1903 a(\002)p 818 1903 1 2 v
+772 1932 2 1 v 772 1941 a(\002)p 781 1941 1 2 v 734 1969 2
+1 v 734 1978 a(\002)p 743 1978 1 2 v 809 1887 a(\003)p 809
+1894 2 1 v(\000)p 826 1894 V 818 1887 1 2 v 772 1924 a(\003)p
+772 1931 2 1 v -1 w(\000)p 788 1931 V 781 1924 1 2 v 734 1961
+a(\003)p 734 1968 2 1 v(\000)p 751 1968 V 743 1961 1 2 v 817
+1815 2 5 v 817 1858 a(\022)p 860 1858 5 2 v 780 1778 2 5 v
+780 1820 a(\022)p 822 1820 5 2 v 743 1741 2 5 v 743 1783 a(\022)p
+785 1783 5 2 v 705 1703 2 5 v 705 1746 a(\022)p 748 1746 5
+2 v 817 1804 a(\003)p 817 1811 2 1 v 826 1804 1 2 v 780 1766
+a(\003)p 780 1773 2 1 v 789 1766 1 2 v 743 1729 a(\003)p 743
+1736 2 1 v 752 1729 1 2 v 834 1804 a(\000)p 834 1811 2 1 v
+834 1820 a(\001)p 826 1820 1 2 v 826 1804 V 797 1766 a(\000)p
+797 1774 2 1 v 797 1783 a(\001)p 789 1783 1 2 v 789 1766 V
+759 1729 a(\000)p 759 1737 2 1 v 759 1746 a(\001)p 752 1746
+1 2 v 752 1729 V 863 1812 a(\023)p 863 1857 2 5 v 905 1812
+5 2 v 900 1775 a(\023)p 900 1820 2 5 v 943 1775 5 2 v 938 1737
+a(\023)p 938 1782 2 5 v 980 1737 5 2 v 975 1700 a(\023)p 975
+1745 2 5 v 1017 1700 5 2 v 917 1812 a(\000)p 917 1819 2 1 v
+909 1812 1 2 v 954 1775 a(\000)p 954 1782 2 1 v 947 1775 1
+2 v 992 1737 a(\000)p 992 1744 2 1 v 984 1737 1 2 v 900 1820
+2 1 v 900 1829 a(\002)p 917 1820 V(\001)p 909 1829 1 2 v 938
+1782 2 1 v 938 1791 a(\002)p 954 1782 V -1 w(\001)p 947 1791
+1 2 v 975 1745 2 1 v 975 1754 a(\002)p 992 1745 V(\001)p 984
+1754 1 2 v 1022 1699 a Fy(\000)1025 1697 y(\000)909 1858 y
+Fz(\020)p 909 1902 2 5 v 864 1858 5 2 v 946 1895 a(\020)p 946
+1940 2 5 v 901 1895 5 2 v 983 1932 a(\020)p 983 1977 2 5 v
+938 1932 5 2 v 1021 1970 a(\020)p 1021 2015 2 5 v 976 1970
+5 2 v 909 1903 2 1 v 909 1912 a(\001)p 901 1912 1 2 v 946 1940
+2 1 v 946 1949 a(\001)p 938 1949 1 2 v 983 1977 2 1 v 983 1986
+a(\001)p 976 1986 1 2 v 892 1895 a(\003)p 892 1903 2 1 v 892
+1912 a(\002)p 901 1912 1 2 v 901 1895 V 929 1932 a(\003)p 929
+1940 2 1 v 929 1949 a(\002)p 938 1949 1 2 v 938 1932 V 967
+1970 a(\003)p 967 1977 2 1 v 967 1986 a(\002)p 976 1986 1 2
+v 976 1970 V 1021 2015 2 1 v 1021 2024 a(\001)p 1014 2024 1
+2 v 1005 2007 a(\003)p 1005 2015 2 1 v 1005 2024 a(\002)p 1014
+2024 1 2 v 1014 2007 V 623 1700 83 2 v 705 1699 2 83 v 1065
+1656 83 2 v 1065 1655 2 83 v 1058 2007 a(\020)p 1058 2052 2
+5 v 1013 2007 5 2 v 1095 2044 a(\020)p 1095 2089 2 5 v 1050
+2044 5 2 v 1133 2082 a(\020)p 1133 2127 2 5 v 1088 2082 5 2
+v 1058 2052 2 1 v 1058 2061 a(\001)p 1050 2061 1 2 v 1095 2089
+2 1 v 1095 2098 a(\001)p 1088 2098 1 2 v 1041 2044 a(\003)p
+1041 2052 2 1 v 1041 2061 a(\002)p 1050 2061 1 2 v 1050 2044
+V 1079 2082 a(\003)p 1079 2089 2 1 v 1079 2098 a(\002)p 1088
+2098 1 2 v 1088 2082 V 1134 2168 a Fy(@)1137 2170 y(@)1137
+2171 y(R)145 2597 y FE(where)h(the)g(diagonal)h(stems)f(are)g(of)g(length)h
+(1500.)i(Use)e(links)g(and)g(stems)e(wherev)o(er)i(p)q(ossible.)985
+2906 y(61)p eop
+%%Page: 62 67
+bop 74 -83 a Fp(4.3.3)55 b(Capp)r(ed)19 b(Gluons)74 3 y FE(Gluons)11
+b(dra)o(wn)e(in)i(the)g(st)o(yles)f Fs(n)p FE(REG,)f Fs(n)p
+FE(FLIPPED,)h Fs(n)p FE(CURL)l(Y,)g Fs(n)p FE(FLIPPEDCURL)l(Y,)h
+Fs(n)p FE(FLA)l(T,)f Fs(n)p FE(FLIPPEDFLA)l(T)74 59 y(and)22
+b Fs(n)p FE(SQUASHED)h(commence)f(and)h(conclude)g(on)f(one)g
+Fo(e)n(dge)g FE(of)g(the)g(particle)h(line)h(as)d(opp)q(osed)i(to)74
+116 y Fs(n)p FE(CENTRAL)15 b(gluons)h(whic)o(h)f(b)q(egin)i(and)e(end)g(near)
+g(the)g(middle)i(of)d(the)h(line.)22 b(This)15 b(can)g(b)q(e)h(seen)f
+(clearly)74 172 y(in)20 b(section)f(2.10.1.)28 b(On)19 b(o)q(ccasion)h(one)f
+(wishes)g(to)f(dra)o(w)g(a)g(gluon)h(whic)o(h)h(is)f(cen)o(tral)g(on)g(one)f
+(side)i(and)74 229 y(non-cen)o(tral)d(and)g(the)f(other.)24
+b(T)l(o)16 b(cen)o(tralize)i(a)e(gluon)h(the)g Fs(n)p Fo(gluonc)n(ap)f
+FE(mo)q(di\014er)h(is)g(in)o(v)o(ok)o(ed.)24 b(Similarly)74
+285 y(gluon)16 b(v)o(erticies)g(ma)o(y)f(b)q(e)g(capp)q(ed)i(via)e
+Fs(n)p Fo(vertexc)n(ap)g FE(and)h Fs(n)p Fo(vertexc)n(aps)p
+FE(.)74 405 y Fu(Capp)q(ed)i(Lines)74 491 y FE(The)e Fs(n)p
+Fo(gluonc)n(ap)f FE(statemen)o(t)g(is)h(similar)h(to)e(the)g
+Fs(n)p FE(gluonlink)j(statemen)o(t.)i(Only)d(the)e(rear)g(of)h(the)f(gluon)i
+(is)74 548 y(ev)o(er)g(capp)q(ed.)27 b(If)18 b(b)q(oth)f(ends)h(need)g(to)e
+(b)q(e)i(cen)o(tralized)h(it)e(is)h(b)q(est)f(to)g(use)g(a)g
+Fs(n)p FE(CENTRAL)h(gluon.)26 b(An)o(y)74 604 y(horizon)o(tal)13
+b(or)f(v)o(ertical)g(gluon)h(ma)o(y)f(b)q(e)h(capp)q(ed)g(but)g
+Fs(n)p FE(CENTRAL)f(and)h Fs(n)p FE(FLIPPEDCENTRAL)g(gluons)74
+661 y(will)i(receiv)o(e)g(caps)e(of)h(size)g(zero.)19 b(Diagonal)14
+b(gluons)g(ma)o(y)f(b)q(e)h(stemmed)f(but)h(not)f(capp)q(ed.)21
+b(Examples)14 b(are:)74 811 y Fk(\\drawline\\gluon[\\W\\FLAT]\(80)o
+(00,0\)[5])o(\\gluonc)o(ap)74 867 y(\\drawline\\gluon[\\E\\SQUASHED)o
+(]\(10000,)o(0\)[5]\\g)o(luoncap)p 439 1036 2 2 v 439 1070
+a Fz(\016)p 473 1070 V 387 1036 V -118 w(\016)p 421 1070 V
+335 1036 V -118 w(\016)p 369 1070 V 283 1036 V -118 w(\016)p
+317 1070 V 230 1036 V -119 w(\016)p 264 1070 V 439 1029 a(\003)p
+439 1036 2 1 v(\000)p 456 1036 V 449 1029 1 2 v -86 w(\003)p
+387 1036 2 1 v(\000)p 404 1036 V 396 1029 1 2 v -86 w(\003)p
+335 1036 2 1 v -1 w(\000)p 351 1036 V 344 1029 1 2 v -85 w(\003)p
+283 1036 2 1 v -1 w(\000)p 299 1036 V 292 1029 1 2 v -86 w(\003)p
+230 1036 2 1 v(\000)p 247 1036 V 239 1029 1 2 v 456 1036 2
+2 v 456 1070 a(\015)p 422 1070 V 404 1036 V -118 w(\015)p 370
+1070 V 351 1036 V -119 w(\015)p 318 1070 V 299 1036 V -118
+w(\015)p 266 1070 V 247 1036 V -118 w(\015)p 213 1070 V 193
+1052 2 5 v -120 w(\006)p 210 1070 5 2 v 182 1048 12 2 v 367
+w(\004)p 593 1094 2 9 v 561 1070 17 2 v 17 w(\004)p 643 1094
+2 9 v 610 1070 17 2 v 16 w(\004)p 692 1094 2 9 v 660 1070 17
+2 v 17 w(\004)p 742 1094 2 9 v 710 1070 17 2 v 17 w(\004)p
+792 1094 2 9 v 760 1070 17 2 v 576 1092 2 1 v 576 1101 a(\002)p
+593 1092 V(\001)p 585 1101 1 2 v 626 1092 2 1 v 16 w(\002)p
+643 1092 V(\001)p 635 1101 1 2 v 676 1092 2 1 v 16 w(\002)p
+693 1092 V(\001)p 685 1101 1 2 v 726 1092 2 1 v 16 w(\002)p
+742 1092 V -1 w(\001)p 735 1101 1 2 v 775 1092 2 1 v 16 w(\002)p
+792 1092 V(\001)p 785 1101 1 2 v 576 1070 a(\007)p 576 1094
+2 9 v 594 1070 17 2 v 17 w(\007)p 626 1094 2 9 v 644 1070 17
+2 v 17 w(\007)p 676 1094 2 9 v 693 1070 17 2 v 17 w(\007)p
+726 1094 2 9 v 743 1070 17 2 v 16 w(\007)p 775 1094 2 9 v 793
+1070 17 2 v 16 w(\000)p 824 1086 2 9 v 809 1070 9 2 v 825 1086
+12 2 v 145 1289 a FE(Caps)i(ma)o(y)h(b)q(e)g(em)o(b)q(oldened)i(and)e(are)g
+(not)g(prin)o(ted)g(in)h(phan)o(tom)e(mo)q(de.)26 b(The)17
+b(length)h(of)e(the)h(stem)74 1346 y(of)f(the)h(cap)f(is)h
+Fs(n)p FE(stemlength)g(and)f(this)h(ma)o(y)f(b)q(e)h(re-set)f(as)g(describ)q
+(ed)j(in)e(the)f(section)h(on)g(stems)f(\(4.3.2\).)74 1402
+y(Unlik)o(e)f(the)e(case)g(of)f(links)j(b)q(oth)e Fs(n)p FE(gluon)o(bac)o
+(kx,y)f(and)i Fs(n)p FE(pbac)o(kx,y)e(will)j(refer)e(to)f(the)h(end)h(of)e
+(the)i(cap.)19 b(The)74 1458 y(details)g(of)e(the)h(uncapp)q(ed)i(gluon)e(ma)
+o(y)f(b)q(e)i(stored)e(prior)h(to)f(issuing)i(the)f Fs(n)p
+FE(gluoncap)h(command.)27 b(\(and)74 1515 y(ditto)18 b(for)g
+Fs(n)p FE(gluonlengthx,y)g Fo(etc.)h FE(\).)28 b(As)18 b(an)g(exercise)h(try)
+f(to)f(repro)q(duce)i(the)g(capp)q(ed)g(example)g(at)e(the)74
+1571 y(conclusion)g(of)d(section)i(2.10.2)d(\(note)h(that)h(this)g(picture)h
+(is)f(b)q(etter)g(dra)o(wn)g(using)h(stemmed)f(CENTRAL)74 1628
+y(gluons\).)74 1748 y Fu(Capp)q(ed)j(V)l(ertices)74 1834 y
+FE(Gluon)j(caps)g(\014nd)h(their)f(greatest)e(use)i(when)h(app)q(ended)g(to)e
+Fs(n)p FE(dra)o(wv)o(ertex-generated)g(v)o(ertices.)36 b(One)74
+1890 y(do)q(es)16 b(not)f(ha)o(v)o(e)g(a)g(c)o(hoice)h(of)f(whic)o(h)i(gluon)
+f(t)o(yp)q(e)f(is)h(pro)q(duced)h(when)f Fs(n)p FE(dra)o(wv)o(ertex)p
+Fs(n)p FE(gluon)e(is)i(emplo)o(y)o(ed.)74 1947 y(Capp)q(ed)i(v)o(ertices)f
+(ma)o(y)f(b)q(e)h(seen)g(in)h(the)f(lo)o(w)o(er)f(left)h(of)f(the)h(co)o(v)o
+(er)f(illustration.)26 b(In)17 b(this)h(case)e(gluons)i(of)74
+2003 y(t)o(yp)q(es)d Fs(n)p FE(CURL)l(Y)h(and)g Fs(n)p FE(FLIPPEDCURL)l(Y)g
+(are)f(capp)q(ed.)21 b(The)15 b(syn)o(tax)f(is)74 2153 y Fk
+(\\vertexcap<n>\\drawvertex\\gl)o(uon...)74 2210 y
+(\\vertexcaps\\drawvertex\\gluo)o(n...)74 2360 y FE(Where,)g(once)h(again,)f
+Fk(<n>)g FE(is)h(the)g(gluon)g(line)h(to)d(b)q(e)i(capp)q(ed.)21
+b Fs(n)p FE(v)o(ertexcaps)14 b(caps)g(all)i(lines)g(whic)o(h)f(can)f(b)q(e)74
+2417 y(capp)q(ed.)21 b(Examples)16 b(w)o(ould)f(b)q(e)74 2567
+y Fk(\\vertexcap1\\vertexcap4\\draw)o(vertex\\g)o(luon[\\S)20
+b(4]\(0,0\)[6])74 2623 y(\\vertexcaps\\drawvertex\\gluo)o(n[\\W)h
+(3]\(0,0\)[3])985 2906 y FE(62)p eop
+%%Page: 63 68
+bop 74 -83 a FE(In)20 b(the)g(latter)f(case)g(no)g(caps)h(w)o(ould)f(b)q(e)h
+(dra)o(wn)f(since)i(all)f(three)f(lines)i(are)e(of)g(a)g(CENTRAL)h(v)m(ariet)
+o(y)l(.)74 -26 y Fs(n)p FE(v)o(ertexcap)15 b(ma)o(y)f(b)q(e)i(used)g(in)g
+(conjunction)g(with)g Fs(n)p FE(v)o(ertexlink)g(and)f Fs(n)p
+FE(stem)o(v)o(ertex.)145 30 y(Exercise:)20 b(Pro)q(duce)p 143
+77 2 2 v 143 102 a Fz(\012)p 169 102 V 195 129 V 195 154 a(\012)p
+221 154 V 247 180 V 247 206 a(\012)p 273 206 V 299 232 V 299
+258 a(\012)p 324 258 V 195 102 a(\010)p 195 128 V 170 102 V
+247 154 a(\010)p 247 179 V 222 154 V 299 206 a(\010)p 299 231
+V 274 206 V 351 258 a(\010)p 351 283 V 326 258 V 352 325 a
+Fy(@)355 327 y(@)378 428 y Fh(\032\031)378 312 y(\033\030)479
+452 y Fy(@)482 454 y(@)p 521 458 2 5 v 521 501 a Fz(\022)p
+563 501 5 2 v 558 496 2 5 v 558 538 a(\022)p 601 538 5 2 v
+575 491 2 1 v 575 501 a(\001)p 568 501 1 2 v 558 484 a(\003)p
+558 491 2 1 v(\000)p 575 491 V 568 484 1 2 v 611 529 2 1 v
+611 538 a(\001)p 604 538 1 2 v 595 521 a(\003)p 595 528 2 1
+v -1 w(\000)p 611 528 V 604 521 1 2 v 707 645 2 5 v 707 687
+a(\022)p 749 687 5 2 v 669 608 2 5 v 669 650 a(\022)p 712 650
+5 2 v 632 570 2 5 v 632 613 a(\022)p 674 613 5 2 v 595 533
+2 5 v 595 575 a(\022)p 637 575 5 2 v 707 633 a(\003)p 707 640
+2 1 v 716 633 1 2 v 669 596 a(\003)p 669 603 2 1 v 678 596
+1 2 v 632 559 a(\003)p 632 566 2 1 v 641 559 1 2 v 723 633
+a(\000)p 723 641 2 1 v 723 650 a(\001)p 716 650 1 2 v 716 633
+V 686 596 a(\000)p 686 603 2 1 v 686 613 a(\001)p 678 613 1
+2 v 678 596 V 649 559 a(\000)p 649 566 2 1 v 649 575 a(\001)p
+641 575 1 2 v 641 559 V 796 680 a(\010)p 796 705 2 2 v 770
+680 V -15 w(\010)p 831 705 V 806 680 V -15 w(\010)p 866 705
+V 841 680 V 779 703 2 1 v 779 712 a(\002)p 796 703 V(\001)p
+788 712 1 2 v 814 703 2 1 v 1 w(\002)p 831 703 V(\001)p 823
+712 1 2 v 849 703 2 1 v 1 w(\002)p 866 703 V(\001)p 859 712
+1 2 v 779 680 a(\013)p 779 705 2 2 v 805 680 V -15 w(\013)p
+814 705 V 840 680 V -14 w(\013)p 850 705 V 875 680 V -7 w(\004)p
+893 696 2 1 v 877 680 1 2 v 894 697 12 2 v 745 706 2 2 v 745
+732 a(\012)p 771 732 V 745 741 V 745 767 a(\012)p 771 767 V
+745 776 V 745 802 a(\012)p 771 802 V 777 715 a(\000)p 777 722
+2 1 v 777 732 a(\001)p 770 732 1 2 v 770 715 V 777 750 a(\000)p
+777 758 2 1 v 777 767 a(\001)p 770 767 1 2 v 770 750 V 777
+785 a(\000)p 777 793 2 1 v 777 802 a(\001)p 770 802 1 2 v 770
+785 V 745 715 a(\013)p 745 740 2 2 v 771 715 V 745 750 a(\013)p
+745 775 V 771 750 V 745 785 a(\013)p 745 811 V 771 785 V 745
+811 2 1 v 745 829 a(\006)p 763 829 1 2 v 762 839 2 12 v 745
+680 a(\013)p 745 705 2 2 v 771 680 V 721 881 a Fy(\000)704
+898 y(\000)724 879 y(\011)676 916 y Fx(q)763 881 y Fy(@)780
+898 y(@)782 899 y(I)827 916 y FE(\026)-26 b Fx(q)905 696 y
+Fy(\000)922 679 y(\000)904 698 y(\022)966 648 y Fx(q)905 737
+y Fy(@)922 755 y(@)925 757 y(I)970 786 y FE(\026)f Fx(q)145
+1022 y FE(In)15 b(the)f(ab)q(o)o(v)o(e)g(the)g(circle)i(is)f(of)e(diameter)i
+(1000)977 984 y Fs(p)p 1014 984 23 2 v 1014 1022 a FE(2)f(and)g(the)g
+(`stems')f(attac)o(hed)h(to)f(it)i(of)f(length)h(1500.)74 1078
+y(T)l(ry)g(to)g(w)o(ork)f(from)g(the)i(upp)q(er)g(left)f(to)g(the)g(lo)o(w)o
+(er)g(righ)o(t.)985 2906 y(63)p eop
+%%Page: 64 69
+bop 74 -83 a Fq(4.4)70 b(Lo)r(ops)74 19 y FE(There)18 b(is)g(a)f(primitiv)o
+(e)i(facilit)o(y)g(in)f Fp(FEYNMAN)g FE(for)f(dra)o(wing)h(lo)q(ops.)28
+b(In)18 b(the)f(curren)o(t)h(v)o(ersion)g(it)g(is)74 75 y(only)f(capable)f
+(of)g(dra)o(wing)g(gluon)g(lo)q(ops.)23 b(F)l(ermion)16 b(lo)q(ops)g(ma)o(y)g
+(b)q(e)g(dra)o(wn)g(with)g(the)g Fs(n)p FE(circle)h(command)74
+132 y(as)f(illustrated,)h(for)e(instance,)h(in)h(the)f(exercise)h(at)e(the)h
+(conclusion)i(of)d(the)h(previous)h(section.)23 b(In)16 b(future)74
+188 y(v)o(ersions)g(it)f(is)h(hop)q(ed)g(that)e(photonic)i(\(and)f(p)q
+(erhaps)h(scalar\))f(lo)q(ops)h(ma)o(y)e(b)q(e)i(a)o(v)m(ailable.)74
+310 y Fp(4.4.1)55 b(Non-cen)n(tral)18 b(Lo)r(ops)74 396 y FE(T)l(o)g(dra)o(w)
+f(a)h(circular)h(gluonic)g(lo)q(op,)g(or)e(p)q(ortion)h(thereof,)g(one)g
+(uses)g(the)g Fs(n)p Fo(dr)n(aw)r(lo)n(op)g FE(command)g(whose)74
+452 y(syn)o(tax)d(is)g(reminiscen)o(t)i(of)e(the)g Fs(n)p FE(dra)o(wline)h
+(and)f Fs(n)p FE(dra)o(wv)o(ertex)f(commands.)74 602 y Fk
+(\\drawloop<particle)22 b(type>[<initial)g(direction><extent>]\(x,y)o(\))74
+753 y FE(where)14 b(the)f(particle)h(t)o(yp)q(e)g(is)f(curren)o(tly)h
+(limited)h(to)e Fs(n)p Fu(gluon)p FE(.)20 b(The)13 b(`exten)o(t')f(is)i(the)g
+(n)o(um)o(b)q(er)f(of)g(eigh)o(ths)h(of)74 809 y(a)f(complete)g(lo)q(op)g
+(whic)o(h)h(are)e(to)h(b)q(e)g(dra)o(wn)f(\(1-8\))g(with)h(8)f(indicating)j
+(a)e(complete,)g(closed,)h(circular)g(lo)q(op.)74 865 y(The)j(lo)q(op)g
+(commences)g(from)f(the)h(p)q(oin)o(t)g(\()p Fx(x;)8 b(y)r
+FE(\))15 b(in)j(the)e(direction)i(of)f(`initial)h(direction')g(and)f(con)o
+(tin)o(ues)74 922 y(b)q(eing)g(dra)o(wn)d(clo)q(c)o(kwise)j(un)o(til)f(the)g
+(requested)f(n)o(um)o(b)q(er)h(of)f(eigh)o(ths)g(ha)o(v)o(e)g(b)q(een)i
+(completed.)j(A)c(n)o(um)o(b)q(er)74 978 y(of)f(useful)h(parameters)f(are)f
+(returned)i(after)f Fs(n)p FE(dra)o(wlo)q(op)f(has)h(b)q(een)i(called.)74
+1129 y Fk(\\loopfrontx,\\loopfronty)69 b(co-ords)23 b(of)g(beginning)g(point)
+g(of)h(loop)74 1185 y(\\loopbackx,\\loopbacky)117 b(co-ords)23
+b(of)g(opposite)g(point)g(of)h(loop)74 1242 y(\\loopmidx,\\loopmidy)165
+b(co-ords)23 b(of)g(geometric)g(middle)g(point)g(of)h(loop)74
+1298 y(\\pbackx,\\pbacky)261 b(co-ords)23 b(of)g(end)h(point)f(of)g(loop)74
+1354 y(\\gluonbackx,\\gluonbacky)69 b(co-ords)23 b(of)g(end)h(point)f(of)g
+(loop)h(\(for)f(a)h(gluon)f(loop\))74 1505 y FE(It)14 b(m)o(ust)g(b)q(e)g
+(noted)g(that)f Fs(n)p FE(lo)q(opbac)o(kx,y)h(and)g Fs(n)p
+FE(lo)q(opmidx,y)h(are)e Fo(only)h FE(assigned)g(v)m(alues)h(if)g(at)e(least)
+h(half)h(of)74 1561 y(a)g(lo)q(op)h(has)f(b)q(een)i(dra)o(wn,)d(that)h(is)h
+(if)f(the)h(lo)q(ops)g(`exten)o(t')e(is)i(at)e(least)i(4.)k(Some)15
+b(examples)h(will)h(illustrate)74 1618 y(this:)74 1768 y Fk(\\THICKLINES)74
+1824 y(\\begin{picture}\(8000,8000\))74 1881 y
+(\\drawline\\fermion[\\E\\REG]\(0)o(,0\)[2000)o(])74 1937 y
+(\\drawloop\\gluon[\\NE)k(3]\(\\pbackx,\\pbacky\))74 1994 y
+(\\drawline\\fermion[\\E\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([2000])74
+2050 y(\\drawline\\fermion[\\W\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([7000])74
+2107 y(\\end{picture})74 2257 y FE(w)o(ould)16 b(pro)q(duce)p
+144 2604 83 4 v 225 2558 a Fh(\023)p 225 2602 4 5 v 268 2558
+5 4 v 263 2520 a(\023)p 263 2564 4 5 v 306 2520 5 4 v 279 2558
+a(\000)p 279 2565 4 1 v 273 2558 1 4 v 263 2564 4 1 v 263 2574
+a(\002)p 279 2564 V -1 w(\001)p 273 2574 1 4 v 334 2521 a(\010)p
+334 2545 4 2 v 310 2521 2 4 v 318 2543 4 1 v 318 2553 a(\002)p
+334 2543 V -1 w(\001)p 328 2553 1 4 v 318 2521 a(\013)p 318
+2545 4 2 v 344 2521 2 4 v 21 w(\020)p 389 2564 4 5 v 345 2521
+5 4 v 427 2558 a(\020)p 427 2602 4 5 v 383 2558 5 4 v 389 2564
+4 1 v 389 2574 a(\001)p 383 2574 1 4 v 373 2558 a(\003)p 373
+2565 4 1 v 373 2574 a(\002)p 383 2574 1 4 v 383 2558 V 428
+2604 83 4 v 221 2604 291 4 v 145 2718 a FE(whereas)985 2906
+y(64)p eop
+%%Page: 65 70
+bop 74 -26 a Fk(\\THICKLINES)74 30 y(\\begin{picture}\(8000,8000\))74
+87 y(\\drawline\\fermion[\\E\\REG]\(0)o(,0\)[2000)o(])74 143
+y(\\drawloop\\gluon[\\N)22 b(5]\(\\pbackx,\\pbacky\))74 199
+y(\\drawline\\fermion[\\E\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([2000])74
+256 y(\\drawline\\fermion[\\W\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([7000])74
+312 y(\\end{picture})74 445 y FE(w)o(ould)16 b(giv)o(e)p 144
+792 83 4 v 226 766 a Fh(\013)p 226 790 4 2 v 253 766 2 4 v
+-18 w(\000)p 258 773 4 1 v 258 783 a(\001)p 251 783 1 4 v 251
+766 V 226 756 4 2 v -49 w(\012)p 253 783 2 4 v 225 711 a(\023)p
+225 755 4 5 v 268 711 5 4 v 263 674 a(\023)p 263 718 4 5 v
+306 674 5 4 v 279 711 a(\000)p 279 718 4 1 v 273 711 1 4 v
+263 718 4 1 v 263 728 a(\002)p 279 718 V -1 w(\001)p 273 728
+1 4 v 334 674 a(\010)p 334 698 4 2 v 310 674 2 4 v 318 696
+4 1 v 318 706 a(\002)p 334 696 V -1 w(\001)p 328 706 1 4 v
+318 674 a(\013)p 318 698 4 2 v 344 674 2 4 v 21 w(\020)p 389
+718 4 5 v 345 674 5 4 v 427 711 a(\020)p 427 755 4 5 v 383
+711 5 4 v 389 718 4 1 v 389 728 a(\001)p 383 728 1 4 v 373
+711 a(\003)p 373 718 4 1 v 373 728 a(\002)p 383 728 1 4 v 383
+711 V 427 756 4 2 v 427 783 a(\011)p 402 783 2 4 v 395 766
+a(\003)p 395 773 4 1 v 395 783 a(\002)p 405 783 1 4 v 405 766
+V 427 766 a(\010)p 427 790 4 2 v 402 766 2 4 v 428 792 83 4
+v 221 792 291 4 v 145 906 a FE(As)f(can)g(b)q(e)h(seen)g Fs(n)p
+FE(THICKLINES)g(w)o(orks.)j(So)c(do)q(es)h(phan)o(tom)e(mo)q(de.)21
+b(T)l(o)15 b(pro)q(duce:)p 144 1256 83 4 v 225 1210 a Fh(\023)p
+225 1254 4 5 v 268 1210 5 4 v 263 1172 a(\023)p 263 1216 4
+5 v 306 1172 5 4 v 279 1210 a(\000)p 279 1217 4 1 v 273 1210
+1 4 v 263 1216 4 1 v 263 1226 a(\002)p 279 1216 V -1 w(\001)p
+273 1226 1 4 v 334 1173 a(\010)p 334 1197 4 2 v 310 1173 2
+4 v 318 1195 4 1 v 318 1205 a(\002)p 334 1195 V -1 w(\001)p
+328 1205 1 4 v 318 1173 a(\013)p 318 1197 4 2 v 344 1173 2
+4 v 21 w(\020)p 389 1216 4 5 v 345 1173 5 4 v 427 1210 a(\020)p
+427 1254 4 5 v 383 1210 5 4 v 389 1216 4 1 v 389 1226 a(\001)p
+383 1226 1 4 v 373 1210 a(\003)p 373 1217 4 1 v 373 1226 a(\002)p
+383 1226 1 4 v 383 1210 V 427 1255 4 2 v 427 1281 a(\011)p
+402 1281 2 4 v 395 1265 a(\003)p 395 1272 4 1 v 395 1281 a(\002)p
+405 1281 1 4 v 405 1265 V 427 1265 a(\010)p 427 1289 4 2 v
+402 1265 2 4 v 427 1293 4 5 v 427 1336 a(\021)p 383 1336 5
+4 v 389 1330 4 5 v 389 1374 a(\021)p 345 1374 5 4 v 373 1326
+4 1 v 373 1336 a(\002)p 383 1336 1 4 v 373 1320 a(\003)p 373
+1327 4 1 v -1 w(\000)p 389 1327 V 383 1320 1 4 v 304 1372 a
+Ff(@)262 1330 y(@)227 1295 y(@)p 344 1455 4 83 v 145 1535 a
+FE(one)g(w)o(ould)h(en)o(ter)74 1730 y Fk(\\begin{picture}\(8000,8000\))74
+1786 y(\\drawline\\fermion[\\E\\REG]\(0)o(,0\)[2000)o(])74
+1842 y(\\drawloop\\gluon[\\NE)21 b(5]\(\\pbackx,\\pbacky\))74
+1899 y(\\negate\\gluonbackx)74 1955 y(\\global\\advance\\fermionback)o(x)g
+(by)j(\\gluonbackx)74 2012 y(\\double\\fermionbackx)69 b
+(\\multroothalf\\fermionbackx)74 2068 y(\\drawline\\fermion[\\NW\\REG]\()o
+(\\pbackx,)o(\\pbacky)o(\)[\\ferm)o(ionbackx)o(])74 2125 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(pfrontx,)o(\\pfront)o(y\)[2000)o(])74
+2181 y(\\end{picture})74 2319 y FE(Finally)l(,)17 b(to)d(p)q(oin)o(t)i(out)f
+(exactly)g(where)h Fs(n)p FE(lo)q(opmidx,y)g(and)f Fs(n)p FE(lo)q(opbac)o
+(kx,y)g(are,)f(w)o(e)h(try:)143 2560 y Fz(\023)p 143 2605 2
+5 v 186 2560 5 2 v 181 2523 a(\023)p 181 2568 2 5 v 223 2523
+5 2 v 197 2560 a(\000)p 197 2567 2 1 v 190 2560 1 2 v 180 2568
+2 1 v 180 2577 a(\002)p 197 2568 V(\001)p 190 2577 1 2 v 252
+2523 a(\010)p 252 2548 2 2 v 227 2523 V 235 2546 2 1 v 235
+2555 a(\002)p 252 2546 V(\001)p 245 2555 1 2 v 235 2523 a(\013)p
+235 2548 2 2 v 261 2523 V 22 w(\020)p 307 2568 2 5 v 262 2523
+5 2 v 344 2560 a(\020)p 344 2605 2 5 v 300 2560 5 2 v 307 2568
+2 1 v 307 2577 a(\001)p 300 2577 1 2 v 290 2560 a(\003)p 290
+2568 2 1 v 290 2577 a(\002)p 300 2577 1 2 v 300 2560 V 345
+2606 2 2 v 345 2632 a(\011)p 320 2632 V 312 2615 a(\003)p 312
+2623 2 1 v 312 2632 a(\002)p 322 2632 1 2 v 322 2615 V 345
+2615 a(\010)p 345 2640 2 2 v 320 2615 V 344 2644 2 5 v 344
+2687 a(\021)p 300 2687 5 2 v 307 2682 2 5 v 307 2724 a(\021)p
+262 2724 5 2 v 290 2678 2 1 v 290 2687 a(\002)p 300 2687 1
+2 v 290 2670 a(\003)p 290 2677 2 1 v(\000)p 307 2677 V 300
+2670 1 2 v 235 2698 2 2 v 235 2724 a(\012)p 261 2724 V 235
+2692 a(\003)p 235 2699 2 1 v(\000)p 252 2699 V 245 2692 1 2
+v 252 2698 2 2 v 252 2724 a(\011)p 227 2724 V 181 2682 2 5
+v -121 w(\022)p 223 2724 5 2 v 143 2644 2 5 v 143 2687 a(\022)p
+186 2687 5 2 v 180 2670 a(\003)p 180 2677 2 1 v 190 2670 1
+2 v(\000)p 197 2678 2 1 v 197 2687 a(\001)p 190 2687 1 2 v
+190 2670 V 143 2616 a(\013)p 143 2641 2 2 v 169 2616 V -17
+w(\000)p 176 2623 2 1 v 176 2632 a(\001)p 168 2632 1 2 v 168
+2616 V 143 2606 2 2 v -50 w(\012)p 169 2632 V 61 2606 83 2
+v 345 2641 V 245 2624 42 2 v 203 2624 V 244 2664 2 42 v 244
+2623 V 244 2664 2 83 v 145 2781 a FE(created)g(via)985 2906
+y(65)p eop
+%%Page: 66 71
+bop 74 -26 a Fk(\\drawloop\\gluon[\\NE)21 b(8]\(0,0\))74 87
+y(\\drawline\\fermion[\\W\\REG]\(\\)o(loopfron)o(tx,\\loo)o(pfronty)o
+(\)[2000])74 143 y(\\drawline\\fermion[\\E\\REG]\(\\)o(loopback)o(x,\\loop)o
+(backy\)[)o(2000])74 199 y(\\drawline\\fermion[\\E\\REG]\(\\)o(loopmidx)o
+(,\\loopm)o(idy\)[10)o(00])74 256 y(\\drawline\\fermion[\\W\\REG]\(\\)o
+(loopmidx)o(,\\loopm)o(idy\)[10)o(00])74 312 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(loopmidx)o(,\\loopm)o(idy\)[10)o(00])74
+369 y(\\drawline\\fermion[\\N\\REG]\(\\)o(loopmidx)o(,\\loopm)o(idy\)[10)o
+(00])74 425 y(\\drawline\\fermion[\\S\\REG]\(\\)o(pbackx,\\)o(pbacky\))o
+([2000])74 603 y Fp(4.4.2)55 b(Cen)n(tral)19 b(Lo)r(ops)74
+689 y FE(As)i(can)g(b)q(e)h(seen)f(from)g(the)g(previous)h(example,)g
+Fs(n)p FE(lo)q(opfron)o(tx,y)e(and)i Fs(n)p FE(lo)q(opbac)o(kx,y)e(are)h(not)
+g(at)f(the)74 746 y(same)g(lev)o(el)h(as)e Fs(n)p FE(lo)q(opmidx,y)i(or)e
+(eac)o(h)h(other.)34 b(This)20 b(is)h(b)q(ecause)f(the)g(p)q(eculiar)i(w)o(a)
+o(y)d(in)i(whic)o(h)f(L)1836 740 y Ft(a)1857 746 y FE(T)1882
+759 y(E)1908 746 y(X)74 802 y(dra)o(ws)15 b(gluons.)22 b(The)16
+b(result)h(is)f(that)f(certain)h(lo)q(ops)h(ma)o(y)e(app)q(ear)h(stilted,)g
+(for)g(instance)g(the)g(gluon)h(lo)q(op)74 859 y(correction)h(to)f(a)h(gluon)
+g(propagator.)26 b(T)l(o)17 b(alleviate)i(this)f(problem)h(an)f(alternate)f
+(mo)q(de)h(exists.)28 b(If)18 b(the)74 915 y(user)c(requests)f(that)g(the)g
+(n)o(um)o(b)q(er)h(of)f(`eigh)o(ths')g(dra)o(wn)f(b)q(e)i(zero)g(then)f(a)g
+(complete)h(lo)q(op)g(will)h(b)q(e)f(dra)o(wn)f(in)74 972 y(the)j
+Fo(c)n(entr)n(al)g FE(mo)q(de.)23 b(In)17 b(this)f(mo)q(de)h(the)f(only)h
+(parameters)e(to)h(b)q(e)h(en)o(tered)f(are)g(the)h(co-ordinates)f(of)g(the)
+74 1028 y Fu(cen)o(tre)d FE(of)h(the)f(lo)q(op.)20 b(The)14
+b(initial)i(direction)f(ma)o(y)e(b)q(e)h(sp)q(eci\014ed)i(as)e(an)o(ything)f
+(and)h(is)h(irrelev)m(an)o(t.)20 b(ONL)l(Y)74 1084 y(complete)15
+b(lo)q(ops)g(ma)o(y)f(b)q(e)i(dra)o(wn)e(in)h(this)g(fashion.)20
+b(The)15 b(returned)g(parameters)f(are)g(the)h(same)f(but)h(ha)o(v)o(e)74
+1141 y(sligh)o(tly)h(altered)g(in)o(terpretations.)k Fs(n)p
+FE(lo)q(opmidx,y)15 b(are)g(as)f(b)q(efore.)20 b Fs(n)p FE(lo)q(opfron)o
+(tx,y)14 b(refer)h(to)f(the)h Fo(left-most)74 1197 y FE(p)q(oin)o(t)g(\(that)
+e(furthest)g(w)o(est\))g(of)h(the)g(lo)q(op)g(and)h Fs(n)p
+FE(lo)q(opbac)o(kx,y)e(refers)h(to)g(the)g Fo(right-most)g
+FE(p)q(oin)o(t)h(\(furthest)74 1254 y(east\).)k(F)l(or)c(instance)74
+1348 y Fk(\\drawloop\\gluon[\\NE)21 b(0]\(0,0\))74 1441 y FE(w)o(ould)d(pro)q
+(duce)g(a)f(complete)g(lo)q(op)h(cen)o(tred)g(at)e(\(0,0\))g(with)h
+Fs(n)p FE(lo)q(opfron)o(t)o(y)f(and)i Fs(n)p FE(lo)q(opbac)o(ky)f(b)q(oth)g
+(equal)74 1498 y(to)e(zero.)k(In)d(this)g(w)o(a)o(y)e(one)h(could)i(pro)q
+(duce)526 1806 y Fz(\013)p 526 1831 2 2 v 551 1806 V -18 w(\000)p
+558 1813 2 1 v 558 1822 a(\001)p 550 1822 1 2 v 550 1806 V
+526 1797 2 2 v -49 w(\012)p 551 1822 V 525 1751 a(\023)p 525
+1796 2 5 v 567 1751 5 2 v 562 1713 a(\023)p 562 1758 2 5 v
+605 1713 5 2 v 579 1751 a(\000)p 579 1758 2 1 v 571 1751 1
+2 v 562 1758 2 1 v 562 1767 a(\002)p 579 1758 V(\001)p 571
+1767 1 2 v 634 1714 a(\010)p 634 1739 2 2 v 609 1714 V 617
+1736 2 1 v 617 1746 a(\002)p 634 1736 V(\001)p 626 1746 1 2
+v 617 1714 a(\013)p 617 1739 2 2 v 643 1714 V 22 w(\020)p 689
+1758 2 5 v 644 1714 5 2 v 726 1751 a(\020)p 726 1796 2 5 v
+681 1751 5 2 v 689 1758 2 1 v 689 1767 a(\001)p 681 1767 1
+2 v 672 1751 a(\003)p 672 1758 2 1 v 672 1767 a(\002)p 681
+1767 1 2 v 681 1751 V 726 1797 2 2 v 726 1822 a(\011)p 701
+1822 V 694 1806 a(\003)p 694 1813 2 1 v 694 1822 a(\002)p 703
+1822 1 2 v 703 1806 V 726 1806 a(\010)p 726 1831 2 2 v 701
+1806 V 726 1835 2 5 v 726 1877 a(\021)p 681 1877 5 2 v 689
+1872 2 5 v 689 1915 a(\021)p 644 1915 5 2 v 672 1868 2 1 v
+672 1877 a(\002)p 681 1877 1 2 v 672 1861 a(\003)p 672 1868
+2 1 v(\000)p 689 1868 V 681 1861 1 2 v 617 1889 2 2 v 617 1915
+a(\012)p 643 1915 V 617 1882 a(\003)p 617 1889 2 1 v(\000)p
+634 1889 V 626 1882 1 2 v 634 1889 2 2 v 634 1915 a(\011)p
+609 1915 V 562 1872 2 5 v -122 w(\022)p 605 1915 5 2 v 525
+1835 2 5 v 525 1877 a(\022)p 567 1877 5 2 v 562 1861 a(\003)p
+562 1868 2 1 v 571 1861 1 2 v(\000)p 579 1868 2 1 v 579 1877
+a(\001)p 571 1877 1 2 v 571 1861 V 719 1814 12 2 v 782 1788
+a(\010)p 782 1813 2 2 v 757 1788 V -15 w(\010)p 817 1813 V
+792 1788 V -15 w(\010)p 852 1813 V 827 1788 V -14 w(\010)p
+888 1813 V 862 1788 V -15 w(\010)p 923 1813 V 898 1788 V -15
+w(\010)p 958 1813 V 933 1788 V 765 1811 2 1 v 765 1820 a(\002)p
+782 1811 V(\001)p 774 1820 1 2 v 800 1811 2 1 v 1 w(\002)p
+817 1811 V(\001)p 810 1820 1 2 v 836 1811 2 1 v 2 w(\002)p
+852 1811 V -1 w(\001)p 845 1820 1 2 v 871 1811 2 1 v 2 w(\002)p
+888 1811 V(\001)p 880 1820 1 2 v 906 1811 2 1 v 1 w(\002)p
+923 1811 V(\001)p 915 1820 1 2 v 730 1788 a(\013)p 730 1813
+2 2 v 756 1788 V -15 w(\013)p 765 1813 V 791 1788 V -15 w(\013)p
+800 1813 V 826 1788 V -14 w(\013)p 836 1813 V 861 1788 V -15
+w(\013)p 871 1813 V 897 1788 V -15 w(\013)p 906 1813 V 932
+1788 V 523 1814 12 2 v -486 w(\013)p 470 1813 2 2 v 496 1788
+V -85 w(\013)p 435 1813 V 460 1788 V -86 w(\013)p 399 1813
+V 425 1788 V -85 w(\013)p 364 1813 V 390 1788 V -85 w(\013)p
+329 1813 V 355 1788 V -85 w(\013)p 294 1813 V 319 1788 V 470
+1811 2 1 v 470 1820 a(\002)p 487 1811 V(\001)p 479 1820 1 2
+v 435 1811 2 1 v -69 w(\002)p 451 1811 V -1 w(\001)p 444 1820
+1 2 v 399 1811 2 1 v -69 w(\002)p 416 1811 V(\001)p 409 1820
+1 2 v 364 1811 2 1 v -69 w(\002)p 381 1811 V(\001)p 373 1820
+1 2 v 329 1811 2 1 v -69 w(\002)p 346 1811 V(\001)p 338 1820
+1 2 v 522 1788 a(\010)p 522 1813 2 2 v 497 1788 V -85 w(\010)p
+487 1813 V 461 1788 V -86 w(\010)p 451 1813 V 426 1788 V -85
+w(\010)p 416 1813 V 391 1788 V -85 w(\010)p 381 1813 V 356
+1788 V -85 w(\010)p 346 1813 V 320 1788 V 145 2010 a FE(with)e(the)h(three)f
+(statemen)o(ts)74 2161 y Fk(\\drawloop\\gluon[\\NE)21 b(0]\(0,0\))74
+2217 y(\\frontstemmed\\drawline\\gluo)o(n[\\E\\CEN)o(TRAL]\(\\)o(loopbac)o
+(kx,\\loop)o(backy\)[)o(5])74 2273 y(\\frontstemmed\\drawline\\gluo)o
+(n[\\W\\FLI)o(PPEDCEN)o(TRAL]\(\\)o(loopfron)o(tx,\\loo)o(pfronty)o(\)[5])985
+2906 y FE(66)p eop
+%%Page: 67 72
+bop 74 -83 a Fq(4.5)70 b(Review)20 b(Exercises)i(for)h(Chapter)g(4)74
+19 y(A:)145 135 y FE(Describ)q(e)16 b(\(but)f(don't)g(repro)q(duce\))h(ho)o
+(w)e(y)o(ou)h(w)o(ould)h(mak)o(e)e(the)i(follo)o(wing)g(example)g(of)e(`F)l
+(eyn)h(Art':)342 582 y Fz(\013)p 342 607 2 2 v 368 582 V 342
+547 a(\013)p 342 572 V 368 547 V 342 511 a(\013)p 342 536 V
+368 511 V 342 476 a(\013)p 342 501 V 368 476 V 342 441 a(\013)p
+342 466 V 368 441 V 342 406 a(\013)p 342 431 V 368 406 V 376
+582 a(\000)p 376 589 2 1 v 376 598 a(\001)p 369 598 1 2 v 369
+582 V 376 547 a(\000)p 376 554 2 1 v 376 563 a(\001)p 369 563
+1 2 v 369 547 V 376 511 a(\000)p 376 519 2 1 v 376 528 a(\001)p
+369 528 1 2 v 369 511 V 376 476 a(\000)p 376 484 2 1 v 376
+493 a(\001)p 369 493 1 2 v 369 476 V 376 441 a(\000)p 376 448
+2 1 v 376 457 a(\001)p 369 457 1 2 v 369 441 V 342 608 2 2
+v 342 634 a(\012)p 368 634 V 342 573 V 342 598 a(\012)p 368
+598 V 342 537 V 342 563 a(\012)p 368 563 V 342 502 V 342 528
+a(\012)p 368 528 V 342 467 V 342 493 a(\012)p 368 493 V 342
+432 V 342 457 a(\012)p 368 457 V 203 406 166 2 v 369 406 V
+576 633 2 228 v 573 525 a Fg(_)34 b(_)g(_)614 535 y(^)h(^)p
+783 633 V 825 633 V 851 506 2 2 v 851 532 a Fz(\011)p 826 532
+V 886 506 V -15 w(\011)p 861 532 V 921 506 V -15 w(\011)p 896
+532 V 956 506 V -15 w(\011)p 931 532 V 834 500 a(\003)p 834
+507 2 1 v(\000)p 851 507 V 843 500 1 2 v 1 w(\003)p 869 507
+2 1 v(\000)p 886 507 V 878 500 1 2 v 2 w(\003)p 905 507 2 1
+v -1 w(\000)p 921 507 V 914 500 1 2 v 2 w(\003)p 940 507 2
+1 v -1 w(\000)p 956 507 V 949 500 1 2 v 834 506 2 2 v 834 532
+a(\012)p 860 532 V 869 506 V -15 w(\012)p 895 532 V 905 506
+V -14 w(\012)p 930 532 V 940 506 V -15 w(\012)p 966 532 V 826
+634 162 2 v 826 406 V 1107 579 2 5 v 1107 621 a(\022)p 1149
+621 5 2 v 1070 541 2 5 v 1070 584 a(\022)p 1112 584 5 2 v 1107
+567 a(\003)p 1107 574 2 1 v 1116 567 1 2 v -1 w(\000)p 1123
+574 2 1 v 1123 584 a(\001)p 1116 584 1 2 v 1116 567 V 1070
+512 a(\013)p 1070 538 2 2 v 1095 512 V -18 w(\000)p 1102 520
+2 1 v 1102 529 a(\001)p 1094 529 1 2 v 1094 512 V 1070 503
+2 2 v -49 w(\012)p 1095 529 V 1069 457 a(\023)p 1069 502 2
+5 v 1111 457 5 2 v 1106 420 a(\023)p 1106 465 2 5 v 1149 420
+5 2 v 1123 457 a(\000)p 1123 464 2 1 v 1116 457 1 2 v 1106
+465 2 1 v 1106 474 a(\002)p 1123 465 V(\001)p 1116 474 1 2
+v 1178 420 a(\010)p 1178 445 2 2 v 1153 420 V 1161 443 2 1
+v 1161 452 a(\002)p 1178 443 V(\001)p 1171 452 1 2 v 1161 420
+a(\013)p 1161 445 2 2 v 1187 420 V 22 w(\020)p 1233 465 2 5
+v 1188 420 5 2 v 1270 457 a(\020)p 1270 502 2 5 v 1226 457
+5 2 v 1233 465 2 1 v 1233 474 a(\001)p 1226 474 1 2 v 1216
+457 a(\003)p 1216 465 2 1 v 1216 474 a(\002)p 1226 474 1 2
+v 1226 457 V 1271 503 2 2 v 1271 529 a(\011)p 1245 529 V 1238
+512 a(\003)p 1238 520 2 1 v 1238 529 a(\002)p 1248 529 1 2
+v 1248 512 V 1271 512 a(\010)p 1271 538 2 2 v 1245 512 V 1270
+542 2 5 v 1270 584 a(\021)p 1226 584 5 2 v 1233 579 2 5 v 1233
+621 a(\021)p 1188 621 5 2 v 1216 575 2 1 v 1216 584 a(\002)p
+1226 584 1 2 v 1216 567 a(\003)p 1216 574 2 1 v(\000)p 1233
+574 V 1226 567 1 2 v 1161 596 2 2 v 1161 621 a(\012)p 1187
+621 V 1161 589 a(\003)p 1161 596 2 1 v(\000)p 1178 596 V 1171
+589 1 2 v 1178 596 2 2 v 1178 621 a(\011)p 1153 621 V 1416
+406 V 1416 432 a(\011)p 1391 432 V 1416 441 V 1416 467 a(\011)p
+1391 467 V 1416 477 V 1416 502 a(\011)p 1391 502 V 1384 415
+a(\003)p 1384 423 2 1 v 1384 432 a(\002)p 1393 432 1 2 v 1393
+415 V 1384 450 a(\003)p 1384 458 2 1 v 1384 467 a(\002)p 1393
+467 1 2 v 1393 450 V 1384 486 a(\003)p 1384 493 2 1 v 1384
+502 a(\002)p 1393 502 1 2 v 1393 486 V 1416 415 a(\010)p 1416
+440 2 2 v 1391 415 V 1416 450 a(\010)p 1416 476 V 1391 450
+V 1416 486 a(\010)p 1416 511 V 1391 486 V 1491 406 a(\024)p
+1491 461 2 7 v 1491 512 a(\025)p 1417 512 25 2 v 1417 406 V
+1416 633 2 122 v 1465 511 a(\010)p 1465 539 2 5 v 1437 511
+5 2 v 1523 569 a(\010)p 1523 597 2 5 v 1495 569 5 2 v 1465
+543 2 5 v -108 w(\012)p 1491 569 5 2 v 1523 601 2 5 v 1523
+627 a(\012)p 1549 627 5 2 v 1649 620 a Fe(\()1649 529 y(\()1655
+574 y(\))1661 496 y Fy(\000)1703 454 y(\000)1710 447 y(\000)1620
+496 y(@)1578 454 y(@)1571 447 y(@)74 860 y Fq(B:)145 976 y
+FE(Repro)q(duce)16 b(the)g(`ballo)q(on)g(in)g(the)f(tree')g(diagram:)p
+640 1465 4 2 v 640 1492 a Fh(\011)p 616 1492 2 4 v 608 1475
+a(\003)p 608 1482 4 1 v 608 1492 a(\002)p 618 1492 1 4 v 618
+1475 V 640 1475 a(\010)p 640 1500 4 2 v 616 1475 2 4 v 640
+1504 4 5 v 640 1547 a(\021)p 596 1547 5 4 v 603 1541 4 5 v
+603 1584 a(\021)p 559 1584 5 4 v 586 1537 4 1 v 586 1547 a(\002)p
+596 1547 1 4 v 586 1530 a(\003)p 586 1537 4 1 v(\000)p 603
+1537 V 596 1530 1 4 v 531 1558 4 2 v 531 1584 a(\012)p 558
+1585 2 4 v 531 1552 a(\003)p 531 1559 4 1 v(\000)p 548 1559
+V 541 1552 1 4 v 548 1558 4 2 v 548 1584 a(\011)p 524 1585
+2 4 v 476 1541 4 5 v -122 w(\022)p 519 1585 5 4 v 439 1504
+4 5 v 439 1547 a(\022)p 482 1547 5 4 v 476 1530 a(\003)p 476
+1537 4 1 v 486 1530 1 4 v(\000)p 493 1537 4 1 v 493 1547 a(\001)p
+486 1547 1 4 v 486 1530 V 439 1476 a(\013)p 439 1500 4 2 v
+466 1476 2 4 v -18 w(\000)p 471 1483 4 1 v 471 1492 a(\001)p
+465 1493 1 4 v 465 1476 V 439 1466 4 2 v -49 w(\012)p 466 1493
+2 4 v 439 1421 a(\023)p 439 1465 4 5 v 482 1421 5 4 v 476 1383
+a(\023)p 476 1427 4 5 v 519 1383 5 4 v 493 1421 a(\000)p 493
+1428 4 1 v 486 1421 1 4 v 476 1427 4 1 v 476 1437 a(\002)p
+493 1427 V(\001)p 486 1437 1 4 v 547 1384 a(\010)p 547 1408
+4 2 v 523 1384 2 4 v 531 1406 4 1 v 531 1416 a(\002)p 547 1406
+V -1 w(\001)p 541 1416 1 4 v 531 1384 a(\013)p 531 1408 4 2
+v 557 1384 2 4 v 513 1697 a(\013)p 513 1722 4 2 v 540 1697
+2 4 v 513 1662 a(\013)p 513 1686 4 2 v 540 1662 2 4 v 513 1627
+a(\013)p 513 1651 4 2 v 540 1627 2 4 v 513 1592 a(\013)p 513
+1616 4 2 v 540 1592 2 4 v 548 1697 a(\000)p 548 1704 4 1 v
+548 1714 a(\001)p 541 1714 1 4 v 541 1697 V 548 1662 a(\000)p
+548 1669 4 1 v 548 1679 a(\001)p 541 1679 1 4 v 541 1662 V
+548 1627 a(\000)p 548 1634 4 1 v 548 1644 a(\001)p 541 1644
+1 4 v 541 1627 V 513 1723 4 2 v 513 1749 a(\012)p 540 1749
+2 4 v 513 1687 4 2 v 513 1714 a(\012)p 540 1714 2 4 v 513 1652
+4 2 v 513 1679 a(\012)p 540 1679 2 4 v 513 1617 4 2 v 513 1644
+a(\012)p 540 1644 2 4 v 540 1590 4 17 v 585 1749 a(\020)p 585
+1793 4 5 v 541 1749 5 4 v 622 1786 a(\020)p 622 1830 4 5 v
+578 1786 5 4 v 660 1824 a(\020)p 660 1868 4 5 v 616 1824 5
+4 v 697 1861 a(\020)p 697 1905 4 5 v 653 1861 5 4 v 585 1793
+4 1 v 585 1803 a(\001)p 578 1803 1 4 v 622 1830 4 1 v 622 1840
+a(\001)p 616 1840 1 4 v 660 1868 4 1 v 660 1878 a(\001)p 653
+1878 1 4 v 568 1786 a(\003)p 568 1793 4 1 v 568 1803 a(\002)p
+578 1803 1 4 v 578 1786 V 606 1824 a(\003)p 606 1831 4 1 v
+606 1840 a(\002)p 616 1840 1 4 v 616 1824 V 643 1861 a(\003)p
+643 1868 4 1 v 643 1878 a(\002)p 653 1878 1 4 v 653 1861 V
+493 1749 a(\023)p 493 1793 4 5 v 536 1749 5 4 v 456 1787 a(\023)p
+456 1831 4 5 v 499 1787 5 4 v 418 1824 a(\023)p 418 1868 4
+5 v 462 1824 5 4 v 381 1861 a(\023)p 381 1905 4 5 v 424 1861
+5 4 v 493 1793 4 1 v 493 1803 a(\002)p 503 1803 1 4 v 456 1831
+4 1 v 456 1841 a(\002)p 466 1841 1 4 v 418 1868 4 1 v 418 1878
+a(\002)p 428 1878 1 4 v 510 1787 a(\000)p 510 1794 4 1 v 510
+1803 a(\001)p 503 1803 1 4 v 503 1787 V 472 1824 a(\000)p 472
+1831 4 1 v 472 1841 a(\001)p 466 1841 1 4 v 466 1824 V 435
+1861 a(\000)p 435 1868 4 1 v 435 1878 a(\001)p 428 1878 1 4
+v 428 1861 V 558 1466 a(&\045)558 1300 y('$)725 1273 y(\013)p
+725 1297 4 2 v 752 1273 2 4 v 777 1221 a(\013)p 777 1245 4
+2 v 804 1221 2 4 v 725 1298 4 2 v 725 1324 a(\011)p 701 1325
+2 4 v 777 1246 4 2 v 777 1273 a(\011)p 753 1273 2 4 v 829 1194
+4 2 v 829 1221 a(\011)p 805 1221 2 4 v 985 2906 a FE(67)p eop
+%%Page: 68 73
+bop 74 229 a Fr(App)s(endix)34 b(A)74 436 y FD(Solution)43
+b(to)d(Exercises)74 659 y FE(It)20 b(should)i(\014rst)e(b)q(e)g(noted)h(that)
+e(none)i(of)f(these)g(solutions)h(is)g(unique.)36 b(There)21
+b(are)f(frequen)o(tly)h(man)o(y)74 715 y(w)o(a)o(ys)14 b(of)h(dra)o(wing)h(a)
+f(diagram)g(with)h Fp(FEYNMAN)p FE(,)f(the)h(n)o(um)o(b)q(er)f(increasing)i
+(dramatically)f(with)g(the)74 771 y(complexit)o(y)l(.)21 b(The)15
+b(follo)o(wing)g(are)g(reasonable)g(\(although)g(not)f(necessarily)i
+(optimal\))f(solutions)h(to)e(all)i(of)74 828 y(the)f(problems)h(p)q(osed)g
+(throughout)f(the)g(man)o(ual.)74 971 y Fq(A.1)69 b(Exercises)22
+b(for)h(section)f(2.9.2)74 1073 y FE(The)17 b(question)g(w)o(as)f(p)q(osed)h
+(as)g(to)f(wh)o(y)g(one)h(cannot)f(dra)o(w)g(a)h(scalar)f(in)i(t)o(w)o(o)d
+(pieces,)j(commencing)g(from)74 1129 y(the)g(same)f(p)q(oin)o(t)g(but)h(in)g
+(opp)q(osite)g(directions.)27 b(The)18 b(answ)o(er)f(is)h(that)e(all)i
+(scalars)g(b)q(oth)f Fo(b)n(e)n(gin)f FE(and)h Fo(end)74 1186
+y FE(with)j(a)f(line)i(segmen)o(t.)31 b(Hence)20 b(the)f(cen)o(tral)h(segmen)
+o(t)f(of)f(suc)o(h)i(a)f(scalar)g(w)o(ould)h(b)q(e)g(t)o(wice)f(the)g(length)
+74 1242 y(of)g(the)h(surrounding)h(segmen)o(ts.)32 b(It)20
+b(is)g(easily)h(to)e(o)o(v)o(ercome)g(this)h(di\016cult)o(y)h(b)o(y)f(dra)o
+(wing)f(the)h(cen)o(tral)74 1298 y(segmen)o(t)c(separately)l(,)h(either)g(as)
+f(a)g(fermion)g(or)g(as)g(a)g(scalar)g(of)g(exten)o(t)g([1],)g(and)g(then)h
+(dra)o(wing)f(the)g(t)o(w)o(o)74 1355 y(scalars)f(from)g(the)g(ends.)20
+b(F)l(or)15 b(example)h(to)f(dra)o(w)422 1563 y Fe(\()422 1472
+y(\()428 1517 y(\))428 1426 y(\))p 418 1576 17 2 v 434 1576
+V 418 1576 34 2 v 374 1576 V 331 1576 V 287 1576 V 418 1576
+V 461 1576 V 505 1576 V 549 1576 V 145 1632 a FE(Y)l(ou)g(could)h(en)o(ter:)
+74 1782 y Fk(\\begin{picture}\(15000,5000\))74 1839 y
+(\\drawline\\photon[\\N\\CURLY]\()o(7000,0\)[)o(4])74 1895
+y(\\drawline\\fermion[\\W\\REG]\(7)o(000,0\)[4)o(00])74 1951
+y(\\drawline\\fermion[\\E\\REG]\(7)o(000,0\)[4)o(00])74 2008
+y(\\seglength=800)46 b(\\gaplength=250)70 b(\045)23 b(It)h(is)g(better)f(to)g
+(use)h(\\global\\seglength=800)d(etc.)74 2064 y
+(\\drawline\\scalar[\\W\\REG]\(74)o(00,0\)[4])74 2121 y(\\seglength=800)46
+b(\\gaplength=250)74 2177 y(\\drawline\\scalar[\\E\\REG]\(66)o(00,0\)[4])74
+2234 y(\\end{picture})145 2384 y FE(The)15 b(diagram)g(at)f(the)i(conclusion)
+g(of)f(2.9.2)f(ma)o(y)g(b)q(e)i(pro)q(duced)g(b)o(y)f(the)g(follo)o(wing)h
+(eigh)o(t)f(commands)74 2440 y(\(or)g(p)q(erm)o(utations)g(thereof)t(\):)74
+2603 y Fk(\\begin{picture}\(20000,20000)o(\))74 2660 y
+(\\thicklines\\drawline\\photon)o([\\N\\FLIP)o(PEDCURL)o(Y]\(3000)o
+(,3000\)[7)o(])74 2716 y(\\drawline\\fermion[\\NW\\REG]\()o(\\pbackx,)o
+(\\pbacky)o(\)[\\phot)o(onlength)o(y])74 2772 y
+(\\drawline\\fermion[\\E\\REG]\(\\)o(fermionf)o(rontx,\\)o(fermion)o
+(fronty\)[)o(\\fermio)o(nlength)o(])985 2906 y FE(68)p eop
+%%Page: 69 74
+bop 74 -83 a Fk(\\drawline\\fermion[\\SW\\REG]\()o(\\photonf)o(rontx,\\)o
+(photonf)o(ronty\)[\\)o(photonl)o(engthy])74 -26 y
+(\\drawline\\fermion[\\E\\REG]\(\\)o(photonfr)o(ontx,\\p)o(hotonfr)o
+(onty\)[\\p)o(hotonle)o(ngthy])74 30 y(\\drawline\\fermion[\\N\\REG]\(\\)o
+(pbackx,\\)o(pbacky\))o([\\photo)o(nlengthy)o(])74 87 y
+(\\drawline\\photon[\\SE\\REG]\(\\)o(fermionf)o(rontx,\\)o(fermion)o
+(fronty\)[)o(7])74 143 y(\\drawline\\photon[\\NE\\FLIPPE)o(D]\(\\ferm)o
+(ionback)o(x,\\ferm)o(ionbacky)o(\)[7])74 199 y(\\end{picture})74
+399 y Fq(A.2)69 b(Exercises)22 b(for)h(section)f(2.10.2)74
+557 y Fk(\\begin{picture}\(20000,20000)o(\))74 614 y(\\THINLINES)70
+b(\045)24 b(Upper-left)f(corner:)74 670 y(\\drawline\\gluon[\\E\\REG]\(180)o
+(00,18000)o(\)[4])74 726 y(\\drawline\\fermion[\\S\\REG]\(\\)o(pfrontx,)o
+(\\pfront)o(y\)[\\glu)o(onlength)o(x])74 783 y(\\THICKLINES)46
+b(\045)24 b(Upper-right)e(corner:)74 839 y(\\drawline\\gluon[\\E\\REG]\(\\gl)
+o(uonbackx)o(,\\gluon)o(backy\)[)o(4])74 896 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([\\gluon)o
+(lengthx])74 952 y(\\THINLINES)70 b(\045)24 b(Lower-right)e(corner:)74
+1009 y(\\drawline\\fermion[\\S\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([\\gluon)o
+(lengthx])74 1065 y(\\drawline\\gluon[\\W\\REG]\(\\fe)o(rmionbac)o(kx,\\fer)o
+(mionbac)o(ky\)[4])74 1122 y(\\THICKLINES)46 b(\045)24 b(Lower-left)f
+(corner:)74 1178 y(\\drawline\\gluon[\\W\\REG]\(\\gl)o(uonbackx)o(,\\gluon)o
+(backy\)[)o(4])74 1235 y(\\drawline\\fermion[\\N\\REG]\(\\)o(pbackx,\\)o
+(pbacky\))o([\\fermi)o(onlength)o(])74 1291 y(\\end{picture})145
+1454 y FE(T)l(o)13 b(dra)o(w)g(this)h(with)g Fs(n)p FE(CENTRAL)g(gluons)g
+(one)g(could)g(divide)i(eac)o(h)d(side)i(in)o(to)e Fo(thr)n(e)n(e)h
+FE(pieces,)h(not)e(t)o(w)o(o.)74 1510 y(Alternativ)o(ely)l(,)j(starting)e(at)
+f(one)i(p)q(oin)o(t)g(dra)o(w)f(the)g Fs(n)p FE(THICKLINES)i(segmen)o(t)e
+(and)g(then)h(starting)f Fo(at)i(the)74 1567 y(same)g(p)n(oint)f
+FE(dra)o(w)g(the)g Fs(n)p FE(THINLINES)h(piece)h(on)e(top)g(of)g(it.)20
+b(F)l(or)14 b(example:)74 1729 y Fk(\\THICKLINES\\drawline\\gluon[)o
+(\\E\\CENTR)o(AL]\(0,0)o(\)[4])74 1786 y(\\THINLINES\\drawline\\gluon[\\)o
+(E\\CENTRA)o(L]\(0,0\))o([9])74 1985 y Fq(A.3)69 b(Exercise)22
+b(for)h(section)f(2.12)74 2143 y Fk(\\begin{picture}\(20000,20000)o(\))69
+b(\045)24 b(Start)f(at)g(upper)h(right.)74 2200 y
+(\\thicklines\\drawline\\photon)o([\\SE\\REG)o(]\(18000)o(,18000\))o([5])74
+2256 y(\\drawline\\fermion[\\S\\REG]\(\\)o(photonfr)o(ontx,\\p)o(hotonfr)o
+(onty\)[\\b)o(oxlengt)o(hy])74 2313 y(\\drawarrow[\\N\\ATBASE]\(\\pmid)o
+(x,\\pmidy)o(\))74 2369 y(\\drawline\\fermion[\\W\\REG]\(\\)o(photonba)o
+(ckx,\\ph)o(otonbac)o(ky\)[\\pho)o(tonleng)o(thx])74 2426 y
+(\\drawarrow[\\W\\ATTIP]\(\\pmidx)o(,\\pmidy\))74 2482 y(\045)g(Draw)f(2)h
+(small)f(lines)g(to)h(connect)f(the)g(vector)g(meson)g(\(parallel)g(lines\))g
+(at)h(a)f(corner:)74 2539 y(\\thinlines\\drawline\\fermion)o([\\S\\REG])o
+(\(\\fermi)o(onbackx)o(,\\fermio)o(nbacky\))o([150])74 2595
+y(\\drawline\\fermion[\\W\\REG]\(\\)o(fermionf)o(rontx,\\)o(fermion)o
+(fronty\)[)o(150])74 2651 y(\\drawline\\fermion[\\SW\\REG]\()o(\\fermion)o
+(backx,\\)o(fermion)o(backy\)[7)o(000])45 b(\045)23 b(Upper)g(||)h(line)74
+2708 y(\\drawline\\fermion[\\S\\REG]\(\\)o(fermionb)o(ackx,\\f)o(ermionb)o
+(acky\)[75)o(])45 b(\045)24 b(Find)f(the)g(centre)h(of)74 2764
+y(\\drawline\\fermion[\\E\\REG]\(\\)o(fermionb)o(ackx,\\f)o(ermionb)o
+(acky\)[75)o(])45 b(\045)24 b(the)f(double)g(fermion)985 2906
+y FE(69)p eop
+%%Page: 70 75
+bop 74 -83 a Fk(\\drawline\\gluon[\\SW\\REG]\(\\f)o(ermionba)o(ckx,\\fe)o
+(rmionba)o(cky\)[5])74 -26 y(\\put\(\\gluonfrontx,\\gluonfro)o(nty\){\\ci)o
+(rcle*{5)o(00}})21 b(\045)i(A)h(`blob':)f(the)h(vector->gauge)e(trans.)74
+30 y(\\drawline\\fermion[\\S\\REG]\(\\)o(fermionb)o(ackx,\\f)o(ermionb)o
+(acky\)[75)o(])45 b(\045)24 b(Draw)f(to)h(position)e(the)74
+87 y(\\drawline\\fermion[\\E\\REG]\(\\)o(fermionb)o(ackx,\\f)o(ermionb)o
+(acky\)[75)o(])45 b(\045)24 b(Second)f(parallel)g(line)74 143
+y(\\drawline\\fermion[\\NE\\REG]\()o(\\fermion)o(backx,\\)o(fermion)o
+(backy\)[7)o(000])45 b(\045)23 b(Lower)g(||)h(line)74 199 y
+(\\put\(\\gluonbackx,\\gluonback)o(y\){\\circ)o(le*{500)o(}})74
+256 y(\\gaplength=300)74 312 y(\\drawline\\scalar[\\NW\\REG]\(\\)o(gluonbac)o
+(kx,\\glu)o(onbacky)o(\)[3])45 b(\045)23 b(Left)h(half)f(of)h(scalar)74
+369 y(\\thicklines\\drawarrow[\\NW\\A)o(TBASE]\(\\)o(scalarb)o(ackx,\\s)o
+(calarbac)o(ky\))74 425 y(\\gaplength=300)70 b(\\thinlines)74
+482 y(\\drawline\\scalar[\\SE\\REG]\(\\)o(gluonbac)o(kx,\\glu)o(onbacky)o
+(\)[3])45 b(\045)23 b(Right)h(half)f(of)g(scalar)74 538 y
+(\\put\(\\pfrontx,\\scalarbacky\))o({{\\bf)e(H}$^0$})74 595
+y(\\put\(\\gluonfrontx,\\gluonfro)o(nty\){\\)g($\\,{}_{\\longleftarrow)g
+(f_6\(\\omega,p_+\\cdot)g(q_-\)}$})74 651 y(\\drawline\\fermion[\\NW\\REG]\()
+o(\\photonf)o(rontx,\\)o(photonf)o(ronty\)[2)o(000])74 708
+y(\\drawarrow[\\NW\\ATBASE]\(\\pba)o(ckx,\\pba)o(cky\))74 764
+y(\\drawline\\fermion[\\SE\\REG]\()o(\\photonb)o(ackx,\\p)o(hotonba)o
+(cky\)[200)o(0])74 820 y(\\drawarrow[\\NW\\ATTIP]\(\\pmid)o(x,\\pmidy)o(\))74
+877 y(\\put\(\\pbackx,\\pbacky\){$\\,\\,)o(p+q$})68 b(\045)24
+b(\\,)g(gives)f(extra)g(space)g(in)h(math)f(mode.)74 933 y(\\end{picture})74
+1131 y Fq(A.4)69 b(Exercise)22 b(for)h(section)f(3.8)74 1289
+y Fk(\\begin{picture}\(20000,12000)o(\)\(0,6000)o(\))74 1345
+y(\\drawline\\photon[\\E\\REG]\(40)o(00,0\)[7])68 b(\045)24
+b(Left)f(half)g(of)h(long)f(photon.)74 1401 y
+(\\drawline\\fermion[\\NW\\REG]\()o(\\photonf)o(rontx,\\)o(photonf)o
+(ronty\)[4)o(000])74 1458 y(\\drawline\\fermion[\\SW\\REG]\()o(\\photonf)o
+(rontx,\\)o(photonf)o(ronty\)[4)o(000])74 1514 y(\\drawvertex\\photon[\\E)e
+(3]\(\\photonbackx,\\photonback)o(y\)[7])45 b(\045)23 b(Continue)g(long)g
+(photon.)74 1571 y(\\drawline\\fermion[\\S\\REG]\(\\)o(vertextw)o(ox,\\ver)o
+(textwoy)o(\)[\\verte)o(xtwoy])44 b(\045)24 b(Upper)f(half)74
+1627 y(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexth)o(reex,\\v)o(ertexth)o
+(reey\)[\\v)o(ertextw)o(oy])e(\045)j(Lower)f(half)74 1684 y
+(\\drawline\\fermion[\\NE\\REG]\()o(\\vertext)o(wox,\\ve)o(rtextwo)o
+(y\)[\\vert)o(extwoy])74 1740 y(\\drawline\\fermion[\\SE\\REG]\()o(\\vertext)
+o(hreex,\\)o(vertext)o(hreey\)[\\)o(vertext)o(woy])74 1797
+y(\\end{picture})74 1942 y FE(Since)13 b(w)o(e'v)o(e)d(slyly)i(selected)g
+(the)f(main)h(axis)f(to)f(ha)o(v)o(e)h(zero)g(ordinate)g(\(y=0\))f(that)g(w)o
+(e)h(can)g(use)g Fs(n)p FE(v)o(ertext)o(w)o(o)o(y)74 1998 y(as)j(a)g(length)i
+(in)f(order)f(to)g(ensure)h(that)f(the)h(diagonal)g(fermion)g(segmen)o(ts)f
+(on)g(the)h(righ)o(t)f(ha)o(v)o(e)g(half)h(of)f(the)74 2055
+y(length)i(of)f(the)g(v)o(ertical)h(segmen)o(t.)j(The)d(v)o(ertical)f
+(fermion)h(is)g(dra)o(wn)e(in)i(t)o(w)o(o)e(sections.)145 2111
+y(In)j(order)f(to)g(dra)o(w)g(a)h(scalar)f(in)i(place)g(of)e(the)h(fermion)g
+(line)h(on)f(the)f(righ)o(t)h(w)o(e)f(m)o(ust)g(set)h Fs(n)p
+FE(seglength)74 2167 y(and)g Fs(n)p FE(gaplength)h(so)e(that)h(the)g(v)o
+(ertical)h(line)h(will)f(connect)g(prop)q(erly)g(with)f(the)h(photons.)25
+b(The)18 b(section)74 2224 y(on)13 b(spacing)h(in)g(c)o(hapter)e(four)h(sho)o
+(ws)f(ho)o(w)h(to)f(do)h(this)g(using)h(the)f Fs(n)p FE(phan)o(tom)f
+(commands.)19 b(Here)13 b(w)o(e)g(could)74 2280 y(just)i(divide)i(the)e(line)
+i(length)f(b)o(y)f(an)g(in)o(teger.)21 b(F)l(or)14 b(instance)i(the)f
+(commands)74 2418 y Fk(\\global\\divide)22 b(\\vertextwoy)g(by)i(4)74
+2474 y(\\global\\gaplength=\\vertextw)o(oy)74 2531 y
+(\\global\\multiply\\vertextwoy)c(by)k(2)74 2587 y
+(\\global\\seglength=\\vertextw)o(oy)74 2644 y
+(\\drawline\\scalar[\\S\\REG]\(\\v)o(ertextwo)o(x,\\vert)o(extwoy\))o([3])74
+2781 y FE(w)o(ould)16 b(dra)o(w)e(a)h(v)o(ertical)h(connecting)g(scalar)f
+(with)h(three)f(segmen)o(ts.)985 2906 y(70)p eop
+%%Page: 71 76
+bop 74 -83 a Fq(A.5)69 b(Exercises)22 b(for)h(section)f(4.1.1)74
+19 y Fk(\045)i(Exercise)f(1:)g(Delbruck)g(Scattering:)74 132
+y(\\hskip)g(0.75in)477 b(\045)23 b(Move)h(the)f(whole)g(picture)g(to)h(the)f
+(right.)74 188 y(\\begin{picture}\(10000,10000)o(\)\(0,0\))74
+244 y(\\drawline\\photon[\\SE\\FLIPPE)o(D]\(0,500)o(0\)[6])68
+b(\045)24 b(Start)f(from)h(the)f(upper)g(left.)74 301 y
+(\\double\\photonlengthx)45 b(\\multroothalf\\photonlength)o(x)g(\045)24
+b(mults)f(by)h(root)f(2.)74 357 y(\\drawline\\fermion[\\E\\REG]\(\\)o
+(photonba)o(ckx,\\ph)o(otonbac)o(ky\)[\\pho)o(tonleng)o(thx])74
+414 y(\\drawline\\photon[\\NE\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([6])74
+470 y(\\drawline\\fermion[\\S\\REG]\(\\)o(photonfr)o(ontx,\\p)o(hotonfr)o
+(onty\)[\\f)o(ermionl)o(ength])74 527 y(\\drawline\\photon[\\SE\\FLIPPE)o
+(D]\(\\pbac)o(kx,\\pba)o(cky\)[6])74 583 y(\\drawline\\fermion[\\W\\REG]\(\\)
+o(photonfr)o(ontx,\\p)o(hotonfr)o(onty\)[\\f)o(ermionl)o(ength])74
+640 y(\\drawline\\photon[\\SW\\REG]\(\\)o(pbackx,\\)o(pbacky\))o([6])74
+696 y(\\drawline\\fermion[\\N\\REG]\(\\)o(photonfr)o(ontx,\\p)o(hotonfr)o
+(onty\)[\\f)o(ermionl)o(ength])74 753 y(\\end{picture})74 922
+y(\045)h(Exercise)f(2:)47 b(Drell-Yan)74 1035 y(\\documentstyle)22
+b([12pt]{report})74 1091 y(\\begin{document})74 1148 y(\\input)h(FEYNMAN)74
+1204 y(\\begin{center})94 b(\045)47 b(Everything)23 b(to)g(be)h(centred.)74
+1261 y(Drell-Yan)f(W-Production)74 1374 y(\\begin{picture}\(10000,10000)o(\))
+93 b(\045)24 b(Note)f(that)g(the)h(10000)f(x)h(10000)f(box)g(is)h(centred.)74
+1430 y(\\bigphotons)70 b(\045)24 b(needed)f(in)h(12-pt.)74
+1486 y(\\THICKLINES)74 1543 y(\\drawline\\photon[\\E\\REG]\(50)o(00,5000\))o
+([11])74 1599 y(\\drawarrow[\\E\\ATBASE]\(\\pmid)o(x,4820\))74
+1656 y(\\put\(\\pmidx,5800\){$W^+$})74 1712 y
+(\\drawline\\fermion[\\NW\\REG]\()o(\\photonf)o(rontx,\\)o(photonf)o
+(ronty\)[5)o(500])74 1769 y(\\drawarrow[\\SE\\ATBASE]\(\\pmi)o(dx,\\pmid)o
+(y\))74 1825 y(\\put\(3500,7100\){q})74 1882 y
+(\\drawline\\fermion[\\SW\\REG]\()o(\\photonf)o(rontx,\\)o(photonf)o
+(ronty\)[5)o(500])74 1938 y(\\drawarrow[\\SW\\ATBASE]\(\\pmi)o(dx,\\pmid)o
+(y\))74 1995 y(\\put\(3500,2300\){$\\overline{)o(q}'$})74 2051
+y(\\drawline\\fermion[\\NE\\REG]\()o(\\photonb)o(ackx,\\p)o(hotonba)o
+(cky\)[550)o(0])74 2107 y(\\drawarrow[\\SW\\ATBASE]\(\\pmi)o(dx,\\pmid)o(y\))
+74 2164 y(\\global\\advance)e(\\pmidx)h(by)h(-1400)74 2220
+y(\\put\(\\pmidx,7100\){$e^+$})74 2277 y(\\drawline\\fermion[\\SE\\REG]\()o
+(\\photonb)o(ackx,\\p)o(hotonba)o(cky\)[550)o(0])74 2333 y
+(\\drawarrow[\\SE\\ATBASE]\(\\pmi)o(dx,\\pmid)o(y\))74 2390
+y(\\global\\advance)e(\\pmidx)h(by)h(-1200)74 2446 y
+(\\put\(\\pmidx,2300\){$\\nu$})74 2503 y(\\end{picture})74
+2559 y(\\end{center})74 2616 y(\\end{document})74 2778 y FE(Note)15
+b(the)g(necessary)h(blank)g(line)h(prior)e(to)f(the)i Fs(n)p
+FE(b)q(egin)p Fs(f)p FE(picture)p Fs(g)g FE(command.)985 2906
+y(71)p eop
+%%Page: 72 77
+bop 74 -83 a Fq(A.6)69 b(Exercises)22 b(for)h(section)f(4.1.2)74
+75 y Fk(\045)i(Using)f(Phantom)g(Mode.)74 188 y
+(\\begin{picture}\(20000,15000)o(\))74 244 y
+(\\drawline\\gluon[\\E\\FLAT]\(10)o(000,1500)o(0\)[7])74 301
+y(\045)h(Calc)f(lengths)g(of)h(scalars)f(segments)f(and)i(gaps.)74
+357 y(\\global\\Xone=\\gluonlengthx)74 414 y(\\global\\divide\\Xone)d(by)j(8)
+g(\045)47 b(\\Xone)24 b(will)f(be)g(the)h(gap)f(length)74 470
+y(\\global\\Yone=\\Xone)45 b(\045)24 b(\\Xone,)f(\\Yone)g(convenient)g
+(unused)g(variable)g(names.)74 527 y(\\double\\Yone)46 b(\045)i(\\Yone)23
+b(will)g(be)h(the)f(segment)g(length)74 583 y(\045)h(Draw)f(fermions:)74
+640 y(\\drawline\\fermion[\\W\\REG]\(\\)o(gluonfro)o(ntx,\\gl)o(uonfron)o
+(ty\)[\\glu)o(onlengt)o(hx])74 696 y(\\drawline\\fermion[\\S\\REG]\(\\)o
+(gluonfro)o(ntx,\\gl)o(uonfron)o(ty\)[\\glu)o(onlengt)o(hx])74
+753 y(\\drawline\\fermion[\\W\\REG]\(\\)o(fermionb)o(ackx,\\f)o(ermionb)o
+(acky\)[\\g)o(luonlen)o(gthx])74 809 y(\045)h(Draw)f(scalars)74
+865 y(\\global\\gaplength=\\Xone)45 b(\\global\\seglength=\\Yone)74
+922 y(\\drawline\\scalar[\\E\\REG]\(\\g)o(luonback)o(x,\\gluo)o(nbacky\))o
+([3])74 978 y(\\global\\gaplength=\\Xone)g(\\global\\seglength=\\Yone)74
+1035 y(\\drawline\\scalar[\\S\\REG]\(\\g)o(luonback)o(x,\\gluo)o(nbacky\))o
+([3])74 1091 y(\\global\\gaplength=\\Xone)g(\\global\\seglength=\\Yone)74
+1148 y(\\drawline\\scalar[\\E\\REG]\(\\s)o(calarbac)o(kx,\\sca)o(larback)o
+(y\)[3])74 1204 y(\045)24 b(Now)f(the)h(photon.)47 b(Need)23
+b(to)g(know)h(it's)f(length)g(so)h(use)f(\\phantom)74 1261
+y(\\startphantom)74 1317 y(\\drawline\\photon[\\E\\FLIPPED)o(]\(0,0\)[8)o(])
+45 b(\045)24 b(Can)f(draw)g(from)h(anywhere)74 1374 y(\\stopphantom)142
+b(\045)23 b(Now)h(we)f(have)h(the)f(photon's)g(length!!)74
+1430 y(\\negate\\photonlengthx)74 1486 y(\\global\\advance\\gluonlength)o(x)e
+(by)j(\\photonlengthx)46 b(\045)23 b(the)h(difference)74 1543
+y(\\global\\divide\\gluonlengthx)c(by)k(2)74 1599 y
+(\\drawline\\fermion[\\E\\REG]\(\\)o(fermionf)o(rontx,\\)o(fermion)o
+(fronty\)[)o(\\gluonl)o(engthx])74 1656 y(\\drawline\\photon[\\E\\FLIPPED)o
+(]\(\\pback)o(x,\\pbac)o(ky\)[8])44 b(\045)24 b(Exactly)f(same)g(as)h(in)f
+(phantom)g(mode.)74 1712 y(\\drawline\\fermion[\\E\\REG]\(\\)o(pbackx,\\)o
+(pbacky\))o([\\gluon)o(lengthx])74 1769 y(\045)h(This)f(is)h(even)f(easier)g
+(using)g(stemmed)g(photons!)74 1825 y(\\end{picture})74 1931
+y FE(The)16 b(di\016cult)o(y)g(in)g(rotating)f(this)h(diagram)f(through)g(45)
+g(degrees)g(is)h(that)f(w)o(e)g(w)o(ould)h(require)g(v)o(ery)f(short)74
+1988 y(\\stems")e(on)h(the)f(ends)i(of)e(the)h(photon)f(and)h(there)g(is)g(a)
+g(minim)o(um)h(length)f(whic)o(h)h(diagonal)f(lines)h(ma)o(y)e(b)q(e)74
+2044 y(dra)o(wn.)22 b(One)17 b(could)g(try)e(to)h(connect)g(the)h(ends)f(b)o
+(y)g(a)g(semi-circle)i(\(whic)o(h)f(ma)o(y)e(b)q(e)i(sligh)o(tly)g
+(smaller\),)f(a)74 2101 y(kink)o(ed)g(pair)g(of)f(v)o(ertical)g(and)h
+(horizon)o(tal)f(lines,)i(a)e(large)g(dot)g(at)f(the)i(v)o(ertex)e
+Fo(etc.)145 2157 y FE(Almost)g(an)o(y)f(diagram)h(ma)o(y)f(b)q(e)h(dra)o(wn)g
+(without)g(recourse)g(to)f(phan)o(tom)g(mo)q(de)i(giv)o(en)f(enough)g
+(e\013ort)74 2214 y(and)i(ingen)o(uit)o(y)l(.)21 b(In)15 b(this)h(case)f(one)
+h(could)74 2308 y Fk(1\))48 b(Draw)23 b(the)g(Gluon)74 2364
+y(2\))48 b(From)23 b(the)g(point)h(\(\\pmidx,\\pmidy\))d(go)j(down)f(a)h
+(distance)f(of)170 2420 y(\\gluonlengthx)f(\(or)h(\\plengthx\))74
+2477 y(3\))48 b(Draw)23 b(one)g(half)h(of)f(the)h(photon)f(to)g(the)h(left)f
+(and)h(one)f(half)g(to)h(the)f(right)74 2533 y(4\))48 b(Draw)23
+b(fermions)g(of)g(length)g(\\photonfrontx)f(minus)i(\\gluonfrontx)e(or)170
+2590 y(\\gluonbackx)g(minus)h(\\photonbackx)f(at)i(either)f(end)74
+2646 y(5\))48 b(Draw)23 b(the)g(fermions)g(and)h(scalars)f(as)g(before.)985
+2906 y FE(72)p eop
+%%Page: 73 78
+bop 74 -83 a Fq(A.7)69 b(Exercise)22 b(for)h(section)f(4.3.2)74
+75 y Fk(\\hskip)h(1.25in)74 132 y(\\begin{picture}\(8000,8000\))74
+188 y(\045)h(Three-gluon)e(vertex:)74 244 y(\\stemvertex1\\vertexlink3\\dr)o
+(awvertex)o(\\gluon[)o(\\N)f(3]\(0,0\)[4])74 301 y
+(\\drawline\\fermion[\\SW\\REG]\()o(\\vertexo)o(nex,\\ve)o(rtexone)o
+(y\)[2000])74 357 y(\\drawline\\fermion[\\SE\\REG]\()o(\\vertexo)o(nex,\\ve)o
+(rtexone)o(y\)[2000])74 414 y(\\drawline\\fermion[\\N\\REG]\(\\)o(vertextw)o
+(ox,\\ver)o(textwoy)o(\)[2000])74 470 y(\\drawline\\fermion[\\W\\REG]\(\\)o
+(vertextw)o(ox,\\ver)o(textwoy)o(\)[2000])74 527 y(\045)j(Four-gluon)e
+(vertex:)74 583 y(\\global\\stemlength=1500)74 640 y
+(\\stemvertex3\\vertexlink4\\dr)o(awvertex)o(\\gluon[)o(\\NE)f
+(4]\(\\vertexthreex,\\vertext)o(hreey\)[3)o(])74 696 y
+(\\drawline\\fermion[\\W\\REG]\(\\)o(vertextw)o(ox,\\ver)o(textwoy)o
+(\)[2000])74 753 y(\\drawline\\fermion[\\N\\REG]\(\\)o(vertextw)o(ox,\\ver)o
+(textwoy)o(\)[2000])74 809 y(\\drawline\\fermion[\\E\\REG]\(\\)o(vertexth)o
+(reex,\\v)o(ertexth)o(reey\)[20)o(00])74 865 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(vertexth)o(reex,\\v)o(ertexth)o
+(reey\)[20)o(00])74 922 y(\045)j(Add)f(loops)h(to)f(line)g(four)h(of)f(the)h
+(four-gluon)e(vertex)h(\(linked)g(above)g(with)h(\\vertexlink4\).)74
+978 y(\\global\\stemlength=1500)74 1035 y(\\backstemmed\\drawline\\gluon)o
+([\\SE\\REG)o(]\(\\vert)o(exfourx)o(,\\vertex)o(foury\)[)o(2])74
+1091 y(\\drawarrow[\\SE\\ATTIP]\(\\pbac)o(kx,\\pbac)o(ky\))74
+1148 y(\\end{picture})74 1346 y Fq(A.8)69 b(Exercises)22 b(for)h(Section)f
+(4.3.3)74 1447 y FE(The)16 b(capp)q(ed)g(part)f(of)f(the)i(diagram)e(in)i
+(section)g(2.10.2)e(w)o(as)g(pro)q(duced)i(b)o(y:)74 1596 y
+Fk(\\begin{picture}\(25000,10000)o(\))74 1652 y(\\THICKLINES)74
+1709 y(\\put\(24000,7000\){\\circle{30)o(00}})74 1765 y(\045)24
+b(We)f(request)g(a)h(circle)f(of)h(diameter)f(3000)g(so)g(LaTeX)h(will)f(use)
+g(it's)h(maximum:)46 b(2800.)74 1822 y(\045)24 b(First)f(establish)g(the)g
+(length)g(of)h(half)f(of)h(the)f(doubly)g(capped)g(gluon)g(\(since)g(only)h
+(the)74 1878 y(\\startphantom)142 b(\045)954 b(back)23 b(may)h(be)f
+(capped\).)74 1935 y(\\drawline\\gluon[\\E\\REG]\(0,0)o(\)[2]\\glu)o(oncap)74
+1991 y(\\stopphantom)74 2048 y(\\pbackx=22600)f(\\pbacky=7000)70
+b(\045)24 b(Establish)f(left)g(edge)g(of)h(circle)f(with)g(diameter=2800.)74
+2104 y(\\global\\multiply)f(\\plengthx)g(by)i(-1)95 b(\\global\\multiply)22
+b(\\plengthy)h(by)g(-1)74 2160 y(\\global\\advance)f(\\pbackx)h(by)g
+(\\plengthx)47 b(\\global\\advance)22 b(\\pbacky)h(by)g(\\plengthy)74
+2217 y(\\drawline\\gluon[\\E\\REG]\(\\pb)o(ackx,\\pb)o(acky\)[2)o(]\\gluon)o
+(cap)45 b(\045)24 b(Draw)f(gluon)g(TO)h(the)f(circle)74 2273
+y(\\drawline\\gluon[\\W\\FLIPPED])o(\(\\gluonf)o(rontx,\\)o(gluonfr)o
+(onty\)[2])o(\\gluonc)o(ap)74 2330 y(\\drawline\\fermion[\\NW\\REG]\()o
+(\\gluonba)o(ckx,\\gl)o(uonback)o(y\)[2000])74 2386 y
+(\\drawline\\fermion[\\SW\\REG]\()o(\\gluonba)o(ckx,\\gl)o(uonback)o
+(y\)[2000])74 2443 y(\\gluonbackx=25400)f(\\gluonbacky=7000)f(\045)j
+(Establish)f(right)g(circle)g(edge:)g(diameter=2800.)74 2499
+y(\\negate\\gluonlengthx)93 b(\\negate\\gluonlengthy)45 b(\045)24
+b(Repeat)f(on)g(the)h(right-hand)e(side.)74 2556 y
+(\\global\\advance\\gluonbackx)e(by)k(\\gluonlengthx)74 2612
+y(\\global\\advance\\gluonbacky)c(by)k(\\gluonlengthy)74 2669
+y(\\drawline\\gluon[\\W\\FLIPPED])o(\(\\gluonb)o(ackx,\\g)o(luonbac)o
+(ky\)[2]\\g)o(luoncap)74 2725 y(\\drawline\\gluon[\\E\\REG]\(\\gl)o(uonfront)
+o(x,\\gluo)o(nfronty)o(\)[2]\\glu)o(oncap)74 2781 y
+(\\drawline\\fermion[\\NE\\REG]\()o(\\gluonba)o(ckx,\\gl)o(uonback)o
+(y\)[2000])985 2906 y FE(73)p eop
+%%Page: 74 79
+bop 74 -83 a Fk(\\drawline\\fermion[\\SE\\REG]\()o(\\gluonba)o(ckx,\\gl)o
+(uonback)o(y\)[2000])74 -26 y(\\advance)23 b(\\gluonfrontx)f(by)i(-6800)47
+b(\045)24 b(Experiment)e(or)i(measure)f(out)g(``CAPPED'')f(by)i(ruler.)74
+30 y(\\put\(\\gluonfrontx,2000\){CAP)o(PED})74 87 y(\\THINLINES)74
+143 y(\\end{picture})74 306 y FE(Note)17 b(that)f(an)g(e\013ectiv)o(e)h
+(radius)h(of)e(1400,)f(instead)j(of)e(1500,)g(w)o(as)g(used)h(since)h(the)f
+(largest)f(circle)i(whic)o(h)74 362 y(L)86 356 y Ft(a)107 362
+y FE(T)132 376 y(E)158 362 y(X)d(can)g(dra)o(w)g(has)g(a)g(diameter)g(of)g
+(28)g(p)q(oin)o(ts.)145 419 y(The)g(concluding)i(exercise)g(of)e(4.3.3)e(ma)o
+(y)i(b)q(e)g(dra)o(wn)g(with:)74 581 y Fk(\\begin{picture}\(20000,21000)o(\))
+74 638 y(\045)24 b(Work)f(our)h(way)f(from)g(the)h(upper)f(left)g(to)h(lower)
+f(right.)74 694 y(\045)74 751 y(\\global\\stemlength=1500)74
+807 y(\\backstemmed\\drawline\\photo)o(n[\\SE\\FL)o(IPPED]\()o(0,20000)o
+(\)[8])74 864 y(\\global\\advance\\pbackx)e(by)j(1000)190 b(\045)24
+b(Move)f(to)h(the)f(centre)74 920 y(\\global\\advance\\pbacky)e(by)j(-1000)
+166 b(\045)24 b(of)f(the)h(circle.)74 977 y(\\THICKLINES\\put\(\\pbackx,\\pb)
+o(acky\){\\c)o(ircle{2)o(830}}\\T)o(HINLINES)68 b(\045)24 b(The)f(circle)g
+(\(thick\))74 1033 y(\\global\\advance\\pbackx)e(by)j(1000)190
+b(\045)24 b(Move)f(to)h(the)f(SW)h(side)74 1089 y(\\global\\advance\\pbacky)d
+(by)j(-1000)166 b(\045)24 b(of)f(the)h(circle.)74 1146 y
+(\\global\\stemlength=1500)74 1202 y(\045)g(The)f(extra)h(length)f(on)g(this)
+g(vertex)h(line)f(is)g(from)h(one)f(loop)h(plus)f(a)h(link.)74
+1259 y(\045)g(Note)f(that)h(the)f(following)g(line)g(is)h(both)f(stemmed)g
+(and)g(linked.)74 1315 y(\\frontstemmed\\drawline\\gluo)o(n[\\SE\\FL)o
+(IPPED]\()o(\\pbackx)o(,\\pbacky)o(\)[1]\\gl)o(uonlink)74 1372
+y(\\vertexcap2\\vertexcap3\\draw)o(vertex\\g)o(luon[\\S)o(E)e
+(3]\(\\gluonbackx,\\gluonbacky\))o([3])74 1428 y(\045)j(Alternately)e(we)i
+(could)f(have)g(\\vertexlink1\\vertexcap2\\verte)o(xcap3\\d)o(rawvert)o
+(ex...)74 1485 y(\045)h(Now)f(draw)h(the)f(fermions,)g(arrows)g(and)g
+(labels:)74 1541 y(\\drawline\\fermion[\\SW\\REG]\()o(\\vertext)o(hreex,\\)o
+(vertext)o(hreey\)[2)o(000])e(\045)i(Southmost)g(gluon.)74
+1598 y(\\drawarrow[\\SW\\ATBASE]\(\\pmi)o(dx,\\pmid)o(y\))74
+1654 y(\\global\\advance\\fermionback)o(x)e(by)j(-700)74 1710
+y(\\global\\advance\\fermionback)o(y)d(by)j(-450)74 1767 y
+(\\put\(\\fermionbackx,\\fermion)o(backy\){$)o(q$})74 1823
+y(\\drawline\\fermion[\\SE\\REG]\()o(\\vertext)o(hreex,\\)o(vertext)o
+(hreey\)[2)o(000])d(\045)i(Eastmost)g(gluon.)74 1880 y
+(\\drawarrow[\\NW\\ATBASE]\(\\pmi)o(dx,\\pmid)o(y\))74 1936
+y(\\global\\advance\\fermionback)o(x)e(by)j(50)74 1993 y
+(\\global\\advance\\fermionback)o(y)d(by)j(-450)74 2049 y
+(\\put\(\\fermionbackx,\\fermion)o(backy\){$)o(\\bar)d(q$})74
+2106 y(\\drawline\\fermion[\\NE\\REG]\()o(\\vertext)o(wox,\\ve)o(rtextwo)o
+(y\)[2000])74 2162 y(\\drawarrow[\\NE\\ATBASE]\(\\pmi)o(dx,\\pmid)o(y\))74
+2219 y(\\global\\advance\\fermionback)o(x)g(by)j(50)74 2275
+y(\\global\\advance\\fermionback)o(y)d(by)j(-250)74 2331 y
+(\\put\(\\fermionbackx,\\fermion)o(backy\){$)o(q$})74 2388
+y(\\drawline\\fermion[\\SE\\REG]\()o(\\vertext)o(wox,\\ve)o(rtextwo)o
+(y\)[2000])74 2444 y(\\drawarrow[\\NW\\ATBASE]\(\\pmi)o(dx,\\pmid)o(y\))74
+2501 y(\\global\\advance\\fermionback)o(x)d(by)j(50)74 2557
+y(\\global\\advance\\fermionback)o(y)d(by)j(-750)74 2614 y
+(\\put\(\\fermionbackx,\\fermion)o(backy\){$)o(\\bar)d(q$})74
+2670 y(\\end{picture})985 2906 y FE(74)p eop
+%%Page: 75 80
+bop 74 -83 a Fq(A.9)69 b(Exercises)22 b(for)h(section)f(4.5)74
+19 y(A:)145 135 y FE(This)16 b(calligraphic)h(masterpiece)f(w)o(as)e(created)
+i(b)o(y:)74 298 y Fk(\\begin{picture}\(28000,8000\))74 354
+y(\045T:)74 411 y(\\drawline\\gluon[\\N\\CENTRAL])o(\(0,0\)[5])74
+467 y(\\global\\Yone=\\gluonbacky)74 524 y(\\drawline\\fermion[\\W\\REG]\(\\)
+o(gluonbac)o(kx,\\glu)o(onbacky)o(\)[4000])74 580 y
+(\\drawline\\fermion[\\E\\REG]\(\\)o(gluonbac)o(kx,\\glu)o(onbacky)o
+(\)[4000])74 637 y(\\global\\advance\\pbackx)21 b(by)j(1000)74
+693 y(\045H:)74 749 y(\\drawline\\fermion[\\N\\REG]\(\\)o(pbackx,\\)o
+(gluonfr)o(onty\)[\\)o(gluonlen)o(gthy])74 806 y
+(\\drawline\\photon[\\E\\REG]\(\\p)o(midx,\\pm)o(idy\)[5])74
+862 y(\\drawline\\fermion[\\N\\REG]\(\\)o(pbackx,\\)o(gluonfr)o(onty\)[\\)o
+(gluonlen)o(gthy])74 919 y(\\global\\advance\\pbackx)d(by)j(1000)74
+975 y(\045E:)74 1032 y(\\drawline\\fermion[\\N\\REG]\(\\)o(pbackx,\\)o
+(gluonfr)o(onty\)[\\)o(gluonlen)o(gthy])74 1088 y(\\global\\advance\\pmidy)d
+(by)j(-300)74 1145 y(\\drawline\\gluon[\\E\\FLIPPEDC)o(URLY]\(\\p)o(midx,\\p)
+o(midy\)[4)o(])74 1201 y(\\global\\advance\\plengthx)d(by)i(500)74
+1258 y(\\drawline\\fermion[\\E\\REG]\(\\)o(gluonfro)o(ntx,0\)[)o(\\plengt)o
+(hx])74 1314 y(\\drawline\\fermion[\\E\\REG]\(\\)o(gluonfro)o(ntx,\\Yo)o
+(ne\)[\\pl)o(engthx])74 1370 y(\\global\\advance\\pbackx)e(by)j(4000)74
+1427 y(\045O:)74 1483 y(\\drawloop\\gluon[\\NW)d(8]\(\\pbackx,300\))74
+1540 y(\\global\\advance\\loopbackx)g(by)i(5500)74 1596 y(\045R:)74
+1653 y(\\drawline\\gluon[\\S\\CURLY]\(\\)o(loopback)o(x,\\Yone)o(\)[3])74
+1709 y(\\global\\Xone=\\boxlengthy)45 b(\\double\\Xone)h
+(\\multroothalf\\Xone)74 1766 y(\\put\(\\pmidx,\\pmidy\){\\oval\(\\)o
+(Xone,\\bo)o(xlength)o(y\)[r]})74 1822 y(\\drawline\\fermion[\\S\\REG]\(\\)o
+(pbackx,\\)o(pbacky\))o([\\pback)o(y])74 1879 y(\\global\\advance\\pfrontx)21
+b(by)i(500)74 1935 y(\\global\\advance\\pfronty)e(by)i(50)74
+1991 y(\\drawline\\photon[\\SE\\REG]\(\\)o(pfrontx,)o(\\pfront)o(y\)[4])74
+2048 y(\045Y:)74 2104 y(\\global\\advance\\pbackx)e(by)j(2600)74
+2161 y(\\drawline\\photon[\\N\\CURLY]\()o(\\pbackx,)o(0\)[3])74
+2217 y(\\global\\Ytwo=\\Yone)74 2274 y(\\negate\\plengthy)74
+2330 y(\\global\\advance\\Ytwo)d(by)j(\\plengthy)74 2387 y(\\double\\Ytwo)46
+b(\\multroothalf\\Ytwo)74 2443 y(\\drawline\\fermion[\\NE\\REG]\()o
+(\\photonb)o(ackx,\\p)o(hotonba)o(cky\)[\\Yt)o(wo])74 2500
+y(\\drawline\\fermion[\\NW\\REG]\()o(\\photonb)o(ackx,\\p)o(hotonba)o
+(cky\)[\\Yt)o(wo])74 2556 y(\\end{picture})985 2906 y FE(75)p
+eop
+%%Page: 76 81
+bop 74 -83 a Fq(B:)145 34 y FE(The)15 b(`ballo)q(on)h(in)g(the)f(tree')g
+(diagram:)74 184 y Fk(\\begin{picture}\(28000,28000)o(\))74
+240 y(\\THICKLINES)74 297 y(\045set)23 b(up)h(position)f(of)g(bottom)g(of)h
+(loop)74 353 y(\\startphantom)74 410 y(\\drawloop\\gluon[\\NE)d(0]\(0,0\))74
+466 y(\\stopphantom)74 523 y(\\global\\Xone=\\loopfrontx)45
+b(\045)23 b(diameter)g(of)h(`true')f(loop)74 579 y(\\drawloop\\gluon[\\S)f
+(7]\(12000,18000\))74 636 y(\\global\\Xtwo=\\gluonbackx)74
+692 y(\\global\\Ytwo=\\gluonbacky)74 748 y(\045)i(draw)f(gluon)g(vertex)74
+805 y(\\global\\advance\\loopmidy)e(by)i(\\Xone)74 861 y
+(\\global\\stemlength=400)69 b(\045)23 b(lengthen)g(the)h(stem)f(since)g
+(this)h(is)f(drawn)g(in)h(BOLD)74 918 y(\\stemvertex1\\drawvertex\\glu)o
+(on[\\S)d(3]\(\\loopmidx,\\loopmidy\)[)o(3])74 974 y(\045)j(Determine)f
+(diameter)f(and)i(centre)f(of)g(fermion)g(loop)74 1031 y(\\negate\\Xtwo)74
+1087 y(\\global\\advance\\Xtwo)e(by)j(\\loopfrontx)74 1144
+y(\\global\\Xthree=\\Xtwo)d(\045)48 b(Store.)f(Will)23 b(use)h(shortly)74
+1200 y(\\double\\Xtwo)46 b(\045)24 b(\\Xtwo)f(is)h(now)f(the)h(diameter)e(of)
+i(the)f(fermion)g(loop)74 1257 y(\\put\(\\loopfrontx,\\Ytwo\){\\ci)o
+(rcle{\\Xt)o(wo}})74 1313 y(\045)h(Lastly)f(the)g(photon)74
+1369 y(\045)h(This)f(begins)g(located)g(at)h(root)f(1/2)h(times)f(radius)g
+(in)g(x)h(&)g(y)g(direction)e(from)h(centre)74 1426 y(\\multroothalf\\Xthree)
+e(\045)48 b(This)23 b(is)h(why)f(we)h(stored)f(it.)74 1482
+y(\\global\\advance\\loopfrontx)d(by)k(\\Xthree)74 1539 y
+(\\global\\advance\\Ytwo)d(by)j(\\Xthree)74 1595 y
+(\\drawline\\photon[\\NE\\FLIPPE)o(D]\(\\loop)o(frontx,)o(\\Ytwo\)[)o(5])74
+1652 y(\\end{picture})74 1802 y FE(In)15 b(phan)o(tom)e(mo)q(de)i(w)o(e)f
+(dra)o(w)f(a)h(`cen)o(tral)g(lo)q(op')g(\(exten)o(t=`0'\).)k(This)d(giv)o(es)
+f(us)g(the)g(p)q(osition)i(of)d(the)h Fo(e)n(ast-)74 1858 y(most)h
+FE(p)q(oin)o(t)h(of)f(a)f(complete)i(lo)q(op)g(and)f(th)o(us)g(the)g(true)g
+(lo)q(op)h(\\radius".)k(By)15 b(symmetry)g(w)o(e)g(no)o(w)f(use)i(this)74
+1915 y(to)c(\014nd)i(the)f(south-most)f(p)q(osition)i(on)f(an)g
+Fo(inc)n(omplete)f FE(lo)q(op)i(\(exten)o(t)e(of)h(sev)o(en\).)19
+b(W)l(e)13 b(store)f(the)h(\(negativ)o(e)74 1971 y(of)k(the\))g(\\radius")g
+(under)h(the)f(name)g Fk(\\Xone)g FE(and)g(then)g(dra)o(w)g(the)g(gluon)h(lo)
+q(op,)g(clo)q(c)o(kwise,)g(storing)f(the)74 2028 y(endp)q(oin)o(ts)h(as)f
+Fk(\(\\Xtwo,\\Ytwo\))p FE(.)23 b(W)l(e)17 b(next)h(dra)o(w)e(the)h
+(three-gluon)h(v)o(ertex)e(b)q(eginning)j(at)e(the)g(b)q(ottom)74
+2084 y(of)e(the)g(gluon)h(lo)q(op.)k(T)l(o)15 b(\014nd)h(this)g(p)q(oin)o(t)f
+(w)o(e)g(subtract)g(the)g(radius)h(\()p Fs(n)p FE(Xone\))e(from)h(the)g(midp)
+q(oin)o(t)h(of)f(the)74 2141 y(lo)q(op,)h(\()p Fs(n)p FE(lo)q(opmidx,)p
+Fs(n)p FE(lo)q(opmidy\).)145 2197 y(Next)j(w)o(e)g(dra)o(w)g(the)g(fermion)h
+(lo)q(op.)33 b(W)l(e)19 b(accomplish)i(this)e(b)o(y)h(\014nding)g(the)g
+(radius)g(of)e(the)i(circle,)74 2254 y(whic)o(h)14 b(is)f(the)g(di\013erence)
+i(b)q(et)o(w)o(een)e(the)g(initial)i(and)e(\014nal)h Fx(x)f
+FE(\(or)f Fx(y)r FE(\))g(co)q(ordinates)i(of)e(the)h(gluon)h(lo)q(op.)20
+b(This)74 2310 y(is)e(no)o(w)e(stored)h(as)f Fk(\\Xthree)p
+FE(.)25 b(The)17 b(cen)o(tre)g(is)h(simply)g(at)e(the)i Fx(x)f
+FE(co)q(ordinate)g(of)g(the)g(fron)o(t)f(of)g(the)i(gluon)74
+2367 y(lo)q(op)f(and)f(the)g Fx(y)i FE(co)q(ordinate)f(of)e(the)h(rear.)22
+b(Finally)c(w)o(e)e(use)g Fs(n)p FE(m)o(ultro)q(othalf)g(in)h(order)e(to)h
+(\014nd)h(the)f(sp)q(ot,)74 2423 y(45)120 2407 y Fw(\016)154
+2423 y FE(around)g(the)f(circle,)h(from)f(whic)o(h)h(to)e(dra)o(w)h(the)g
+(photon.)985 2906 y(76)p eop
+%%Page: 77 82
+bop 74 229 a Fr(App)s(endix)34 b(B)74 436 y FD(Syn)m(tax)39
+b(and)g(F)-10 b(eatures)74 659 y FE(This)16 b(app)q(endix)h(summarizes)e(the)
+h(features)f(a)o(v)m(ailable)h(in)h Fp(FEYNMAN)e FE(and)g(their)h(usage.)74
+802 y Fq(B.1)69 b(Lines)74 905 y Fp(B.1.1)55 b(Argumen)n(ts)18
+b(and)h(Syn)n(tax)g(of)g(the)f Fa(n)p Fp(dra)n(wline)g(command)74
+991 y FE(The)e Fs(n)p FE(dra)o(wline)g(command:)74 1141 y Fk(\\drawline)23
+b(|type|)g([|direction|)f(|style|])h(\(|starting)f
+(x-co-ord|,|y-co-ord|\)[|length)o(|])289 1254 y(\\fermion)94
+b(\\N)119 b(\\REG)334 b(\(integer,integer\))165 b(extent)23
+b(\(cpt\))289 1310 y(\\scalar)118 b(\\NE)95 b(\\FLIPPED)238
+b(\(variable,integer\))141 b(#)23 b(segments)289 1367 y(\\photon)118
+b(\\E)h(\\CURLY)286 b(\(integer,variable\))141 b(#)23 b(half-wiggles)289
+1423 y(\\gluon)142 b(\\SE)95 b(\\FLIPPEDCURLY)118 b(\(variable,variable\))f
+(#)23 b(loops)289 1480 y(\\especial)70 b(\\S)119 b(\\FLAT)310
+b(ALL)23 b(IN)h(CENTIPOINTS)142 b(#)23 b(units)575 1536 y(\\SW)95
+b(\\FLIPPEDFLAT)142 b(\(1000)23 b(cpt)h(=)f(1/3)h(cm\))119
+b(\(integer/)575 1593 y(\\W)g(\\CENTRAL)834 b(variable\))575
+1649 y(\\NW)95 b(\\FLIPPEDCENTRAL)742 1706 y(\\LONGPHOTON)742
+1762 y(\\FLIPPEDLONG)742 1818 y(\\SQUASHED)74 1969 y FE(Where)18
+b(the)g(length)h(corresp)q(onds)f(to)g(the)g(particle)h Fo(typ)n(e)f
+FE(in)h(the)f(same)g(column.)29 b(Not)18 b(all)g(com)o(bination)74
+2025 y(of)f(directions)h(and)f(st)o(yles)g(are)g(p)q(ermitted.)25
+b(F)l(ermions,)18 b(for)e(instance,)i(only)f(app)q(ear)g(in)h(the)f
+Fk(\\REG)f FE(st)o(yle.)74 2082 y(In)o(teger-v)m(alued)21 b(p)q(ositions)g
+(and)f(lengths)g(will)h(b)q(e)f(in)g Fo(c)n(entip)n(oints)e
+FE(\(cpt\))h(with)h(appro)o(ximate)f(exten)o(t)h(of)106 2120
+y Fn(1)p 79 2127 71 2 v 79 2154 a(3000)170 2138 y Fx(cm)15
+b FE(or)332 2120 y Fn(1)p 305 2127 V 305 2154 a(7000)396 2138
+y Fx(in)p FE(.)20 b(V)l(ariables)c(ma)o(y)e(either)i(b)q(e)g(user-de\014ned)h
+(\(see)e(next)g(section\))h(or)f Fp(FEYNMAN)p FE(-)74 2195
+y(de\014ned,)h(suc)o(h)g(as)f Fk(\\pmidx)p FE(,)f Fk(\\gluonlengthy)p
+FE(,)f Fk(\\gaplength)p FE(,)g(or)i Fk(\\fermioncount)p FE(.)145
+2251 y(Examples:)74 2401 y Fk(\\drawline\\photon[\\E\\FLIPPED)o(FLAT]\(\\p)o
+(article)o(backx,2)o(5000\)[9])74 2458 y(\\drawline\\fermion[\\SW\\REG]\()o
+(\\vertexf)o(ourx,\\v)o(ertexfo)o(ury\)[\\fe)o(rmionle)o(ngthy])74
+2636 y Fp(B.1.2)55 b(Line)18 b(Mo)r(di\014ers)74 2722 y FE(The)e(follo)o
+(wing)h(is)g(a)e(list)i(of)f(mo)q(di\014ers)g(whic)o(h)h(can)f(b)q(e)h(used)g
+(to)e(alter)h(or)f(em)o(b)q(ellish)k(particle)e(lines.)24 b(The)74
+2778 y(n)o(um)o(b)q(er)16 b(in)g(paren)o(theses)f(is)h(the)f(section)h(in)g
+(whic)o(h)g(the)f(feature)g(is)h(discussed.)985 2906 y(77)p
+eop
+%%Page: 78 83
+bop 122 -26 a Fk(\\bigphotons)22 b(\(2.9.2\))122 30 y(\\documentstyle)g
+(\(1.6\))122 87 y(\\gaplength)g(\(2.8.2\))122 143 y(\\gluoncap)h(\(4.3.3\))
+122 199 y(\\gluonlink)f(\(4.3.1\))122 256 y(\\linethickness)g(\(LaTeX)h
+(manual)g(section)g(C.13.3\))122 312 y(\\THICKLINES;)f(\\THINLINES;)g
+(\\thicklines;)h(\\thinlines)f(\(2.4\))122 369 y(\\seglength)g(\(2.8.2\))122
+425 y(\\stemmed,\\frontstemmed,\\b)o(ackstemm)o(ed)f(\(4.3.2\))122
+482 y(\\stemlength)h(\(4.3.2\))74 681 y Fq(B.2)69 b(V)-6 b(ertices)74
+785 y Fp(B.2.1)55 b(Argumen)n(ts)18 b(and)h(Syn)n(tax)g(of)g(the)f
+Fa(n)p Fp(dra)n(wv)n(ertex)g(command)74 870 y FE(The)e Fs(n)p
+FE(dra)o(wv)o(ertex)d(command:)74 1021 y Fk(\\drawvertex)23
+b(|type|)g([|direction|)f(|number|])g(\(|starting)h
+(x-co-ord|,|y-co-ord|\)[|len)o(gth|])337 1134 y(\\photon)118
+b(\\N)262 b(3)215 b(\(integer,integer\))165 b(#)23 b(half-wiggles)337
+1190 y(\\gluon)142 b(\\NE)238 b(4)215 b(\(variable,integer\))141
+b(#)23 b(loops)623 1246 y(\\E)501 b(\(integer,variable\))623
+1303 y(\\SE)477 b(\(variable,variable\))623 1359 y(\\S)501
+b(ALL)23 b(IN)h(CENTIPOINTS)623 1416 y(\\SW)477 b(\(1000)23
+b(cpt)h(=)f(1/3)h(cm\))119 b(\(integer/)623 1472 y(\\W)1097
+b(variable\))623 1529 y(\\NW)74 1679 y FE(Where)18 b(the)g(length)g(corresp)q
+(onds)g(to)f(the)h(particle)h Fo(typ)n(e)e FE(in)i(the)f(same)f(column.)28
+b(The)18 b(v)o(ertex)f(is)i(dra)o(wn)74 1735 y(starting)f(from)g(the)g(sp)q
+(eci\014ed)j(\(x,y\))c(co-ordinate)i(with)g(either)g(three)g(or)f(four)g
+(lines.)32 b(The)18 b(\014rst)g(line)j(is)74 1792 y(dra)o(wn)15
+b(in)i(the)e(indicated)i(direction,)g(terminating)f(at)f(the)g(h)o(ub)h
+(\(midp)q(oin)o(t\))g(of)f(the)h(v)o(ertex.)k(It)c(is)g(called)74
+1848 y Fo(line)d(one)p FE(.)19 b(The)14 b(remaining)g(lines)g(are)f(dra)o(wn)
+g(radiating)g(from)g(the)g(v)o(ertex)f(and)i(n)o(um)o(b)q(ered)f(coun)o
+(terclo)q(c)o(k-)74 1905 y(wise)h(as)e(line)j(t)o(w)o(o,)d(line)i(three)f
+(\(and)g(line)i(four)e(if)g(`n)o(um)o(b)q(er'=4\).)18 b(Ev)o(ery)13
+b(line)i(will)f(ha)o(v)o(e)f(the)g(same)g(n)o(um)o(b)q(er)74
+1961 y(of)f(gluon)i(lo)q(ops)f(or)f(photon)h(wiggles.)19 b(Examples)14
+b(of)e(other)g(v)o(ertices,)h(suc)o(h)g(as)g(a)f(fermion-fermion-photon)74
+2018 y(v)o(ertex,)j(are)f(discussed)j(throughout)e(the)g(man)o(ual.)145
+2074 y(Examples:)74 2224 y Fk(\\drawvertex\\photon[\\E)21 b
+(3]\(\\vertexonex,-5000\)[5])74 2281 y(\\drawvertex\\gluon[\\SW)g
+(4]\(\\vertexfourx,\\vertexfour)o(y\)[4])74 2459 y Fp(B.2.2)55
+b(V)-5 b(ertex)18 b(Mo)r(di\014ers)74 2545 y FE(The)13 b(follo)o(wing)g(is)g
+(a)f(list)h(of)f(mo)q(di\014ers)h(whic)o(h)g(can)f(b)q(e)h(used)g(to)f(alter)
+g(or)g(em)o(b)q(ellish)j(v)o(ertices.)k(The)13 b(n)o(um)o(b)q(er)74
+2601 y(in)j(paren)o(theses)g(is)f(the)g(section)h(in)g(whic)o(h)g(the)g
+(feature)f(is)g(discussed.)122 2764 y Fk(\\bigphotons)22 b(\(2.9.2\))985
+2906 y FE(78)p eop
+%%Page: 79 84
+bop 122 -83 a Fk(\\documentstyle)22 b(\(1.6\))122 -26 y(\\flipvertex)g
+(\(3.7\))122 30 y(\\THICKLINES;)g(\\THINLINES;)g(\\thicklines;)h(\\thinlines)
+f(\(2.4\))122 87 y(\\stemlength)g(\(4.3.2\))122 143 y(\\stemvertex,)g
+(\\stemvertices)g(\(4.3.2\))122 199 y(\\vertexcap,)g(\\vertexcaps)h
+(\(4.3.3\))122 256 y(\\vertexlink,)f(\\vertexlinks)g(\(4.3.1\))74
+456 y Fq(B.3)69 b(Returned)22 b(P)n(arameters)74 557 y FE(The)e(follo)o(wing)
+g(is)g(a)f(list)i(of)e(all)h(argumen)o(ts)f(returned)h(b)o(y)f
+Fs(n)p FE(dra)o(wline,)i Fs(n)p FE(dra)o(wv)o(ertex)d(and)i
+Fs(n)p FE(dra)o(wlo)q(op.)74 614 y(Argumen)o(ts)12 b(suc)o(h)h(as)f
+Fk(\\photonfronty)f FE(will)j(only)f(b)q(e)g(returned)g(when)g(a)f(photon)g
+(is)h(dra)o(wn.)19 b(All)14 b(returned)74 670 y(parameters)h(are)h
+Fo(glob)n(al)r(ly)g FE(de\014ned)h(and)f(immediately)i(sup)q(ersede)g(the)e
+(previous)h(v)m(alue)g(of)f(the)g(v)m(ariable.)74 726 y(Th)o(us)11
+b(if)h(a)f(gluon)h(w)o(ere)f(dra)o(wn)g(\(or)f(a)h(gluon)h(v)o(ertex\))f(the)
+g(v)m(alues)i(of)d Fk(\\pbackx)h FE(and)g Fk(\\gluonlengthx)f
+FE(w)o(ould)74 783 y(b)q(e)15 b(up)q(dated)f(but)g Fk(\\photonfrontx)e
+FE(w)o(ould)i(retain)g(its)g(former)f(v)m(alue.)21 b(When)14
+b(a)f(v)o(ertex)h(or)f(lo)q(op)h(is)h(dra)o(wn)74 839 y(line)j(parameters,)e
+(suc)o(h)h(as)f Fs(n)p FE(pmidx,)h(will)i(refer)d(to)g(the)h
+Fo(last)f FE(line)i(or)e(line)i(p)q(ortion)f(dra)o(wn.)24 b(P)o(arameters)74
+896 y(commencing)19 b(with)g Fs(n)p Fu(v)o(ertex)d FE(are)i(only)p
+707 911 85 2 v 19 w(returned)g(b)o(y)g Fs(n)p FE(dra)o(wv)o(ertex.)28
+b(P)o(arameters)17 b(commencing)i(with)74 952 y Fs(n)p Fu(lo)q(op)c
+FE(are)f(only)p 283 968 V 15 w(returned)h(b)o(y)f Fs(n)p FE(dra)o(wlo)q(op.)
+19 b(Note)14 b(that)f(some)h(of)g(these)h(parameters)e(ma)o(y)h(b)q(e)g
+(altered)h(b)o(y)74 1009 y(stems,)g(caps,)f(links)j(and)e(arro)o(ws)f(\(see)h
+(appropriate)g(sections\).)74 1171 y Fk(\\boxlengthx,\\boxlengthy:)259
+b(The)24 b(absolute)f(valued)g(\(x,y\))g(extent)g(of)g(the)h(line.)74
+1228 y(\\fermionbackx,\\fermionbacky)o(:)164 b(The)24 b(\(x,y\))f
+(co-ordinates)f(of)i(the)f(back)h(of)f(the)h(line.)74 1284
+y(\\fermioncount)523 b(The)24 b(number)f(of)g(fermions)g(printed)g(thus)g
+(far.)74 1341 y(\\fermionfrontx,\\fermionfron)o(ty:)116 b(The)24
+b(\(x,y\))f(co-ordinates)f(of)i(the)f(front)g(of)h(the)g(line.)74
+1397 y(\\fermionlength)499 b(The)24 b(total)f(length)g(of)h(the)f(fermion)g
+(line.)74 1454 y(\\fermionlengthx,\\fermionlen)o(gthy:)68 b(The)24
+b(\(x,y\))f(extent)g(of)h(the)f(line.)74 1510 y(\\gluonbackx,\\gluonbacky:)
+259 b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(back)h(of)f(the)h(line.)74
+1567 y(\\gluoncount)571 b(The)24 b(number)f(of)g(gluons)h(printed)e(thus)i
+(far.)74 1623 y(\\gluonfrontx,\\gluonfronty:)211 b(The)24 b(\(x,y\))f
+(co-ordinates)f(of)i(the)f(front)g(of)h(the)g(line.)74 1680
+y(\\gluonlengthx,\\gluonlengthy)o(:)164 b(The)24 b(\(x,y\))f(extent)g(of)h
+(the)f(line.)74 1736 y(\\lastline:)595 b(The)24 b(name)f(of)h(the)f(last)h
+(drawn)f(particle)f(line.)74 1792 y(\\loopbackx,\\loopbacky:)307
+b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(back)h(of)f(the)h(loop.)74
+1849 y(\\loopfrontx,\\loopfronty:)259 b(The)24 b(\(x,y\))f(co-ordinates)f(of)
+i(the)f(front)g(of)h(the)g(loop.)74 1905 y(\\particlebackx,\\particlebac)o
+(ky:)116 b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(back)h(of)f(the)h
+(line.)74 1962 y(\\particlefrontx,\\particlefr)o(onty:)68 b(The)24
+b(\(x,y\))f(co-ords)g(of)h(the)f(front)g(of)h(the)f(line.)74
+2018 y(\\particlelengthx,\\particlel)o(engthy:)d(The)k(\(x,y\))f(extent)g(of)
+h(the)f(line.)74 2075 y(\\particlemidx,\\particlemidy)o(:)164
+b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(middle)g(of)h(the)f(line.)74
+2131 y(\\pbackx,\\pbacky:)451 b(=)24 b(\\particlebackx,\\particlebac)o(ky)74
+2188 y(\\pfrontx,\\pfronty:)403 b(=)24 b(\\particlefrontx,\\particlefr)o
+(onty)74 2244 y(\\plengthx,\\plengthy:)355 b(=)24 b
+(\\particlelengthx,\\particlel)o(engthy)74 2301 y(\\pmidx,\\pmidy:)499
+b(=)24 b(\\particlemidx,\\particlemidy)74 2357 y(\\photoncount)547
+b(The)24 b(number)f(of)g(photons)g(printed)g(thus)h(far.)74
+2413 y(\\photonbackx,\\photonbacky:)211 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(back)h(of)f(the)h(line.)74 2470 y(\\photonfrontx,\\photonfronty)o
+(:)164 b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(front)g(of)h(the)g
+(line.)74 2526 y(\\photonlengthx,\\photonlengt)o(hy:)116 b(The)24
+b(\(x,y\))f(extent)g(of)h(the)f(line.)74 2583 y(\\scalarcount:)523
+b(The)24 b(total)f(number)g(of)h(scalars)f(printed)f(thus)i(far.)74
+2639 y(\\scalarbackx,\\scalarbacky:)211 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(back)h(of)f(the)h(scalar.)74 2696 y
+(\\scalarfrontx,\\scalarfronty)o(:)164 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(front)g(of)h(the)g(scalar.)74 2752 y
+(\\scalarlengthx,\\scalarlengt)o(hy:)116 b(The)24 b(\(x,y\))f(extent)g(of)h
+(the)f(scalar.)985 2906 y FE(79)p eop
+%%Page: 80 85
+bop 74 -83 a Fk(\\unitboxlength,\\unitboxheig)o(ht:)116 b(The)24
+b(\(x,y\))f(extent)g(of)h(one)f(unit)g(of)h(the)f(last)h(line.)74
+-26 y(\\unitboxnumber:)475 b(The)24 b(`length')f(of)g(the)h(previous)e(line)i
+(in)f(`units'.)74 30 y(\\vertexcount:)523 b(The)24 b(number)f(of)g(vertices)g
+(printed)g(thus)g(far.)74 87 y(\\vertexonex,\\vertexoney:)259
+b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(back)h(of)f(line)h(one.)74
+143 y(\\vertextwox,\\vertextwoy:)259 b(The)24 b(\(x,y\))f(co-ordinates)f(of)i
+(the)f(back)h(of)f(line)h(two.)74 199 y(\\vertexthreex,\\vertexthreey)o(:)164
+b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(back)h(of)f(line)h(three.)74
+256 y(\\vertexfourx,\\vertexfoury:)211 b(The)24 b(\(x,y\))f(co-ordinates)f
+(of)i(the)f(back)h(of)f(line)h(four.)74 312 y(\\vertexmidx,\\vertexmidy:)259
+b(The)24 b(\(x,y\))f(co-ordinates)f(of)i(the)f(middle)g(of)h(the)f(vertex.)74
+510 y Fq(B.4)69 b(Arro)n(ws)24 b(and)g(Lo)r(ops)74 611 y FE(The)16
+b(other)e(t)o(w)o(o)g Fs(n)p FE(dra)o(w)g(commands)h(in)i Fp(FEYNMAN)e
+FE(are)g Fs(n)p FE(dra)o(w)o(arro)o(w)e(and)i Fs(n)p FE(dra)o(wlo)q(op.)74
+731 y Fp(B.4.1)55 b Fa(n)p Fp(dra)n(w)n(arro)n(w)74 817 y FE(The)16
+b(syn)o(tax)e(is:)74 963 y Fk(\\drawarrow[|direction|)21 b(|configuration|])h
+(\(|starting)g(x-co-ord|,|y-co-ord|\))408 1076 y(\\N)262 b(\\ATBASE)286
+b(\(integer,integer\))408 1132 y(\\NE)238 b(\\ATTIP)310 b
+(\(variable,integer\))408 1188 y(\\E)716 b(\(integer,variable\))408
+1245 y(\\SE)692 b(\(variable,variable\))408 1301 y(\\S)716
+b(ALL)23 b(IN)h(CENTIPOINTS)408 1358 y(\\SW)692 b(\(1000)23
+b(cpt)h(=)f(1/3)h(cm\))408 1414 y(\\W)408 1471 y(\\NW)408 1527
+y(\\LINEDIRECTION)408 1584 y(\\LDIR)74 1730 y FE(An)e(arro)o(whead)e(is)i
+(pro)q(duced)h(at)d(the)i(sp)q(eci\014ed)h(\(x,y\))d(co-ordinates)i(in)g(the)
+g(sp)q(eci\014ed)h(direction.)40 b(If)74 1786 y Fs(n)p FE(LDIR)22
+b(or)e Fs(n)p FE(LINEDIRECTION)j(is)e(used)h(then)f(the)h(direction)g(will)h
+(b)q(e)e(that)g(of)f(the)h(most)f(recen)o(tly)74 1843 y(dra)o(wn)13
+b(line)i(in)g(the)e(curren)o(t)h(picture.)20 b(If)14 b(the)g(previous)g(line)
+h(w)o(as)e(dra)o(wn)g(b)o(y)g(the)h Fs(n)p FE(dra)o(wv)o(ertex)e(command)74
+1899 y(then)i(the)g Fo(initial)r(ly)g(sp)n(e)n(ci\014e)n(d)d
+FE(v)o(ertex)j(direction)g(will)i(b)q(e)e(used.)20 b(If)14
+b Fs(n)p FE(A)l(TBASE)f(is)h(used)g(then)g(the)g(sp)q(eci\014ed)74
+1956 y(co-ordinates)j(refer)f(to)g(the)g Fo(b)n(ase)g FE(of)g(the)g(arro)o
+(w.)22 b(If)17 b Fs(n)p FE(A)l(TTIP)f(is)h(used)g(then)g(the)f(sp)q
+(eci\014ed)j(co-ordinates)74 2012 y(refer)c(to)g(the)g Fo(tip)g
+FE(of)g(the)h(arro)o(w.)145 2069 y(The)f(follo)o(wing)h(parameters)e(are)h
+(returned)h(b)o(y)f Fs(n)p FE(dra)o(w)o(arro)o(w:)74 2215 y
+Fk(\\arrowlength)428 b(The)24 b(\(absolute\))e(length)h(of)h(the)f(arrow)g
+(drawn)g(\(cp\).)74 2271 y(\\boxlengthx,\\boxlengthy)164 b(The)24
+b(\(x,y\))f(co-ordinatess)f(of)h(the)h(TIP)f(of)h(the)f(arrow.)74
+2417 y FE(Other)11 b(v)m(ariables,)h(suc)o(h)e(as)g Fs(n)p
+FE(pbac)o(kx,y)g(and)g Fs(n)p FE(photonlengthx,y)g(are)g(una\013ected)h(b)o
+(y)f Fs(n)p FE(dra)o(w)o(arro)o(w.)15 b(Arro)o(ws)74 2474 y(ma)o(y)e(b)q(e)h
+(em)o(b)q(oldened,)h(via)f Fs(n)p FE(THICKLINES,)g(indep)q(enden)o(tly)i(of)d
+(the)h(line)h(to)d(whic)o(h)j(they)e(are)g(attac)o(hed.)74
+2530 y(Arro)o(ws)h(will)j(remain)f(in)o(visible)i(in)e(phan)o(tom)e(mo)q(de.)
+21 b(Examples)15 b(are:)74 2669 y Fk(\\drawarrow[\\LDIR\\ATTIP]\(\\pm)o
+(idx,\\pmi)o(dy\))74 2725 y(\\drawarrow[\\S\\ATBASE]\(0,0\))985
+2906 y FE(80)p eop
+%%Page: 81 86
+bop 74 -83 a Fp(B.4.2)55 b Fa(n)p Fp(dra)n(wlo)r(op)74 3 y
+FE(This)16 b(w)o(as)e(detailed)j(in)f(section)g(4.4.)j(The)c(syn)o(tax)g(is:)
+74 151 y Fk(\\drawloop)23 b(|type|)g([|direction|)f(|extent|])h(\(|starting)f
+(x-co-ord|,|y-co-ord|\))313 264 y(\\gluon)118 b(\\N)239 b(0)310
+b(\(integer,integer\))575 320 y(\\NE)215 b(1)310 b(\(variable,integer\))575
+376 y(\\E)239 b(2)310 b(\(integer,variable\))575 433 y(\\SE)215
+b(3)310 b(\(variable,variable\))575 489 y(\\S)239 b(4)310 b(ALL)23
+b(IN)h(CENTIPOINTS)575 546 y(\\SW)215 b(5)310 b(\(1000)23 b(cpt)g(=)h(1/3)g
+(cm\))575 602 y(\\W)239 b(6)575 659 y(\\NW)215 b(7)862 715
+y(8)74 863 y FE(A)16 b Fo(c)n(entr)n(al)f FE(lo)q(op)i(is)f(dra)o(wn)g(if)h
+(the)f(exten)o(t)f(is)i(sp)q(eci\014ed)h(as)e(zero)g(\(section)g(4.4.2\).)21
+b(Returned)c(parameters)74 919 y(are:)74 1067 y Fk(\\loopbackx,\\loopbacky)
+117 b(co-ords)23 b(of)g(opposite)g(point)g(of)h(loop)f(\(non-central)f
+(loop\))695 1123 y(co-ords)h(of)g(right-most)g(point)g(of)g(loop)h(\(central)
+e(loop\))74 1180 y(\\loopfrontx,\\loopfronty)69 b(co-ords)23
+b(of)g(beginning)g(point)g(of)h(loop)f(\(non-central)f(loop\))695
+1236 y(co-ords)h(of)g(left-most)g(point)g(of)h(loop)f(\(central)g(loop\))74
+1293 y(\\loopmidx,\\loopmidy)165 b(co-ords)23 b(of)g(geometric)g(middle)g
+(point)g(of)h(loop)74 1349 y(\\pbackx,\\pbacky)261 b(co-ords)23
+b(of)g(end)h(point)f(of)g(loop)74 1406 y(\\gluonbackx,\\gluonbacky)69
+b(co-ords)23 b(of)g(end)h(point)f(of)g(loop)h(\(for)f(a)h(gluon)f(loop\))74
+1553 y Fs(n)p FE(lo)q(opbac)o(kx,y)12 b(and)g Fs(n)p FE(lo)q(opmidx,y)h(are)f
+(only)g(assigned)h(v)m(alues)g(if)g(at)e(least)h(half)h(of)e(a)h(lo)q(op)h
+(has)f(b)q(een)h(dra)o(wn,)74 1610 y(that)i(is)g(if)h(the)f(lo)q(op)h(`exten)
+o(t')e(is)i(0,4,5,6,7)c(or)j(8.)k(Example:)74 1757 y Fk
+(\\drawloop\\gluon[\\NE)i(3]\(\\pbackx,\\pbacky\))74 1814 y
+(\\drawloop\\gluon[\\E)h(0]\(0,0\))74 2013 y Fq(B.5)69 b(Placemen)n(t)21
+b(and)i(Storage)h(F)-6 b(eatures)74 2114 y FE(Placemen)o(t)12
+b(and)f(storage)e(facilities)14 b(w)o(ere)c(discussed)j(in)f(sections)f(4.1)f
+(and)h(4.2.)18 b(The)11 b(follo)o(wing)h(is)f(a)g(list)h(fol-)74
+2171 y(lo)o(w)o(ed)g(b)o(y)g(the)g(syn)o(tax)f(or)g(t)o(ypical)i(usage.)18
+b(In)13 b(cases)f(where)g(the)g(feature)f(is)i(principally)h(discussed)g(in)e
+(other)74 2227 y(sections)19 b(these)g(are)f(listed)i(in)f(paren)o(theses.)31
+b(P)o(arameters)17 b(suc)o(h)i(as)f Fs(n)p FE(gluonlengthx)h(and)g
+Fs(n)p FE(v)o(ertexmidx)74 2284 y(ha)o(v)o(e)c(b)q(een)h(listed)h(in)f(app)q
+(endix)h(B.3.)74 2443 y Fk(\\addtocounter:)22 b(\\addtocounter{<variable)f
+(name><increment>})93 b(\(See)23 b(4.1.1\))74 2499 y(\\advance:)142
+b(\\global\\advance<variable>)21 b(by)i(<increment\(number)f(or)h
+(variable\)>)432 2556 y(Example:)71 b(\\global\\advance)21
+b(\\X)j(by)g(\\Y)74 2612 y(\\divide:)166 b(\\global\\divide<variable>)21
+b(by)i(<divisor\(number)f(or)i(variable\)>)74 2669 y(\\double:)166
+b(\\double<variable>)46 b(Eg:)h(\\double\\Yfive.)74 2725 y
+(\\drawandsaveline:)22 b(\\drawandsaveline)f(`<line)i(name>')g(as)h
+(<arguments)f(as)g(with)g(\\drawline>)74 2781 y(\\drawoldpic:)70
+b(\\drawoldpic<line)22 b(name>\(x,y\))46 b(Eg:)24 b
+(\\drawoldpic\\mygluon\(0,\\)o(pbacky\))985 2906 y FE(81)p
+eop
+%%Page: 82 87
+bop 74 -83 a Fk(\\hskip:)190 b(\\hskip<length>)22 b(\(1.6\))47
+b(Used)23 b(to)h(move)f(pictures)g(around)g(on)h(the)f(page.)74
+-26 y(\\lastline:)118 b(Stored)23 b(name)g(of)h(previously)f(drawn)g(line.)47
+b(Eg:)g(\\drawoldpic\\lastline\(0,0\))74 30 y(\\multiply:)118
+b(\\global\\multiply<variable>)20 b(by)k(<multiplier\(number)d(or)j
+(variable\)>)432 87 y(Example:)71 b(\\global\\multiply)21 b(\\Xtwo)i(by)h(7)
+74 143 y(\\multroothalf:)e(\\multroothalf<variable>)74 199
+y(\\negate:)166 b(\\negate<variable>)189 b(eg:)23 b(\\negate\\plengthx)74
+256 y(\\newcount:)118 b(\\global\\newcount<your)21 b(variable)i(name>)432
+312 y(Example:)71 b(\\global\\newcount\\pmidyc)o(opy)e
+(\\global\\pmidycopy=\\pmidy)74 369 y(\\newcounter:)h(\\newcounter{<variable)
+21 b(name>})405 b(\(See)23 b(4.1.1\))74 425 y(\\newsavebox:)70
+b(\\global\\newsavebox{<name>}.)44 b(Eg:)j(\\global\\newsavebox{\\Bhabha}.)74
+482 y(\\put:)238 b(\\put\(<x>,<y>\){<object>}.)45 b(Eg:)i
+(\\put\(0,\\pmidx\){\\circle{10)o(00}})21 b(\(2.11.2\).)74
+538 y(\\savebox:)142 b(\\savebox{<box)22 b(name>}\(<box)h(width>,<box)f
+(height>\)[<position>]{<obje)o(ct>})74 595 y(\\sbox:)214 b
+(\\sbox{<name>}{<object>}.)45 b(Like)23 b(\\savebox.)46 b
+(Eg:\\savebox{\\Mypic}{}.)74 651 y(\\setcounter:)70 b(\\setcounter{<variable)
+21 b(name><variable)h(value>})h(\(See)g(4.1.1\))74 708 y(\\startphantom:)f
+(\\startphantom...text...\\sto)o(pphanto)o(m)74 764 y(\\stopphantom:)46
+b(\\startphantom...text...\\sto)o(pphanto)o(m)74 820 y(\\the:)238
+b(Evaluates)23 b(a)g(variable)g(\(section)g(4.2.1\).)74 877
+y(\\vskip:)190 b(\\vskip<length>)22 b(\(1.6\))47 b(Used)23
+b(to)h(move)f(pictures)g(around)g(on)h(the)f(page.)74 933 y(\\Xone:)214
+b(Unassigned)23 b(variable)f(pre-defined)h(by)g(FEYNMAN.)74
+990 y(\\Xtwo:)214 b(Unassigned)23 b(variable)f(pre-defined)h(by)g(FEYNMAN.)74
+1046 y(\\Xthree:)166 b(Unassigned)23 b(variable)f(pre-defined)h(by)g
+(FEYNMAN.)74 1103 y(\\Xfour:)190 b(Unassigned)23 b(variable)f(pre-defined)h
+(by)g(FEYNMAN.)74 1159 y(\\Xfive:)190 b(Unassigned)23 b(variable)f
+(pre-defined)h(by)g(FEYNMAN.)74 1216 y(\\Xsix:)214 b(Unassigned)23
+b(variable)f(pre-defined)h(by)g(FEYNMAN.)74 1272 y(\\Xseven:)166
+b(Unassigned)23 b(variable)f(pre-defined)h(by)g(FEYNMAN.)74
+1329 y(\\Xeight:)166 b(Unassigned)23 b(variable)f(pre-defined)h(by)g
+(FEYNMAN.)74 1385 y(\\Yone:)214 b(Unassigned)23 b(variable)f(pre-defined)h
+(by)g(FEYNMAN.)74 1441 y(\\Ytwo:)214 b(Unassigned)23 b(variable)f
+(pre-defined)h(by)g(FEYNMAN.)74 1498 y(\\Ythree:)166 b(Unassigned)23
+b(variable)f(pre-defined)h(by)g(FEYNMAN.)74 1554 y(\\Yfour:)190
+b(Unassigned)23 b(variable)f(pre-defined)h(by)g(FEYNMAN.)74
+1611 y(\\Yfive:)190 b(Unassigned)23 b(variable)f(pre-defined)h(by)g(FEYNMAN.)
+74 1667 y(\\Ysix:)214 b(Unassigned)23 b(variable)f(pre-defined)h(by)g
+(FEYNMAN.)74 1724 y(\\Yseven:)166 b(Unassigned)23 b(variable)f(pre-defined)h
+(by)g(FEYNMAN.)74 1780 y(\\Yeight:)166 b(Unassigned)23 b(variable)f
+(pre-defined)h(by)g(FEYNMAN.)74 1837 y(=:)310 b
+(\\global<variable>=<value\(nu)o(mber)21 b(or)i(variable\)>.)47
+b(Eg:)23 b(\\global\\X=2.)985 2906 y FE(82)p eop
+%%Page: 83 88
+bop 74 229 a Fr(App)s(endix)34 b(C)74 436 y FD(Errors)74 659
+y FE(In)22 b(this)g(app)q(endix)h(w)o(e)e(discuss)h(some)f(of)g(the)h(more)e
+(common)h(errors)g(whic)o(h)h(y)o(ou)f(migh)o(t)g(encoun)o(ter.)74
+715 y(When)14 b(the)g(statemen)o(t)f Fk(LATEX)23 b(<FILENAME>)13
+b FE(is)h(executed)h(it)f(will)i(pro)q(duce)e(a)g(n)o(um)o(b)q(er)g(of)g
+(\014les)g(including)74 771 y(a)e Fk(<FILENAME>.LIS)e FE(\014le.)20
+b(Error)11 b(messages)h(will)i(b)q(e)f(recorded)f(in)h(this)g(\014le)g
+(\(whic)o(h)g(the)f(user)g(often)g(deletes)74 828 y(automatically)21
+b(if)h(running)g(a)e(T)657 838 y(E)683 828 y(X)g(program)g(via)h(a)g
+(standard)f(user-de\014ned)j(macro\).)35 b(If)21 b(submitted)74
+884 y(in)o(teractiv)o(ely)i(they)f(will)h(also)f(app)q(ear)g(on)g(the)g
+(terminal)g(screen.)40 b(Rule)24 b(one)d(is)i(to)e(c)o(hec)o(k)h(the)g(error)
+74 941 y(message)16 b(in)i(the)e(LIS)i(\014le)f(and)g(lo)q(cate)g(the)g(purp)
+q(ortedly)g(o\013ending)g(co)q(de)g(sequence.)25 b(Chec)o(k)17
+b(for)f(t)o(yp)q(os,)74 997 y(particularly)d(missing)g(bac)o(kslashes,)g
+Fs(n)p FE(end)p Fs(f)p FE(...)p Fs(g)p FE(,)e(omitted)g(blank)i(spaces)f(and)
+g(incautious)h(use)f(of)g(upp)q(er)h(or)74 1054 y(lo)o(w)o(er)h(case)h
+(letters.)20 b(If)15 b(y)o(ou)f(cannot)g(understand)i(the)e(error)g(after)g
+(using)i(this)f(app)q(endix)h(y)o(ou)e(migh)o(t)h(try)l(,)74
+1110 y(\014rstly)l(,)j(the)g(on-line)h(in)o(teractiv)o(e)f(help)h(facilit)o
+(y)g(or,)e(failing)i(that,)e(the)h(ERR)o(OR)g(sections)g(in)h(the)e(L)1836
+1104 y Ft(a)1857 1110 y FE(T)1882 1124 y(E)1908 1110 y(X)74
+1167 y(and)f(T)188 1176 y(E)213 1167 y(X)f(man)o(uals.)74 1310
+y Fq(C.1)69 b(Option)22 b(Errors)74 1411 y Fp(FEYNMAN)c FE(issues)h(a)e(n)o
+(um)o(b)q(er)h(of)f(error)g(statemen)o(ts)g(if)h(an)g(incorrect)g(sequence)h
+(of)e(parameters)g(is)74 1468 y(issued)g(to)d(a)h Fs(n)p FE(dra)o(wline,)g
+Fs(n)p FE(dra)o(wv)o(ertex)f(or)h Fs(n)p FE(dra)o(wlo)q(op)g(command.)20
+b(The)15 b(most)f(common)h(of)g(these)g(is)337 1562 y Fk(***)23
+b(ERROR)g(IN)h(PARTICLE)f(OPTIONS)g(SELECTION)f(***)74 1655
+y FE(This)c(means)g(that)f(y)o(ou)g(ask)o(ed)h(for)f(a)g(com)o(bination)i(of)
+e(parameters)g(whic)o(h)h(do)q(es)g(not)g(exist)g(or)f(has)g(not)74
+1712 y(b)q(een)22 b(implemen)o(ted.)39 b(Examples)21 b(are)g(asking)g(for)f
+(a)h(FERMION)g(of)g(an)o(y)g(t)o(yp)q(e)g(other)f(than)h(REG,)f(a)74
+1768 y(PHOTON)c(in)f(the)g Fs(n)p FE(E)g(direction)h(of)f(t)o(yp)q(e)g
+(FLIPPEDLONG,)g(a)f(5-gluon)i(v)o(ertex,)e(a)g(four-scalar)h(v)o(ertex,)74
+1825 y(a)h(photon)h(lo)q(op)g(and)g(so)f(forth.)24 b(The)17
+b(usual)g(result)g(is)g(that,)f(instead)i(of)e(the)g(desired)i(line\(s\))g(a)
+e(series)i(of)74 1881 y(tin)o(y)f(\\Error")e(statemen)o(ts)g(will)j(app)q
+(ear)f(in)g(y)o(our)f(diagram)g(\(see)g(section)h(C.2)f(for)g(an)g
+(example\).)24 b(Other)74 1938 y(messages)15 b(of)g(this)g(t)o(yp)q(e)h(are:)
+337 2032 y Fk(***)23 b(ERROR)g(IN)h(PARTICLE)f(TYPE)g(SELECTION)g(***)122
+2088 y(+++)g(Try)h(with)f(line)g(type)h(\\fermion,)e(\\scalar,)h(\\photon,)g
+(\\gluon)g(\(see)g(manual\))g(+++)337 2201 y(***)g(ERROR)g(IN)h(PARTICLE)f
+(DIRECTION)f(SELECTION)h(***)146 2257 y(+++)g(Try)h(again)f(with)g(direction)
+g(N,)g(NE,)h(E,)f(SE)h(etc.)f(or)h(see)f(manual)g(+++)74 2351
+y FE(In)12 b(the)f(\014rst)f(instance)i(y)o(ou)f(sp)q(eci\014ed)i(some)d(t)o
+(yp)q(e)h(of)g(line)h(of)f(t)o(yp)q(e)g(other)f(than)h Fs(n)p
+FE(fermion,)g Fs(n)p FE(scalar,)h Fs(n)p FE(photon)74 2408
+y(or)i Fs(n)p FE(gluon.)20 b(In)14 b(the)h(second)f(instance)h(a)f(direction)
+i(other)d(than)h Fk(\\N,)24 b(\\NE,)f(\\E,)h(\\SE,)f(\\S,)g(\\SW,)h(\\W)14
+b FE(or)74 2464 y Fk(\\NW)g FE(w)o(as)f(sp)q(eci\014ed)i(\(for)e(instance)i
+(\\)p Fs(n)p FE(NNW")e(or)g(\\E"\).)g(This)h(ma)o(y)f(ha)o(v)o(e)g(b)q(een)i
+(preceded)h(b)o(y)d(\\Exp)q(ecting)74 2521 y(Num)o(b)q(er...")19
+b(\(see)d(b)q(elo)o(w\).)k(Another)15 b(message)g(in)h(the)f(same)g(v)o(ein)h
+(is)241 2614 y Fk(***)24 b(ERROR:)47 b(PARTICLE)22 b(OF)i(NEGATIVE)f(OR)g
+(ZERO)h(LENGTH)f(REQUESTED.)f(***)241 2671 y(***)215 b(TAKING)23
+b(ABSOLUTE)f(VALUE.)596 b(***)985 2906 y FE(83)p eop
+%%Page: 84 89
+bop 74 -83 a FE(whic)o(h)25 b(is)g(self-explanatory)l(.)49
+b(Just)25 b(remem)o(b)q(er)f(that)g(most)g(parameters)f(suc)o(h)i(as)f
+Fs(n)p FE(photonlengthx,)74 -26 y Fs(n)p FE(plength)o(y)16
+b Fo(etc.)31 b FE(ma)o(y)15 b(b)q(e)g(p)q(ositiv)o(e)i(or)d(negativ)o(e)i
+(\(see)f(section)g(2.6\).)145 30 y(A)h(w)o(arning)h(or)e(error)h(statemen)o
+(t)g(will)i(b)q(e)f(issued)g(if)g(a)f(line)i(of)e(absurd)h(length)g(has)f(b)q
+(een)i(requested.)74 87 y(F)l(or)d(gluons,)g(for)g(instance,)g(the)h
+(statemen)o(ts)e(w)o(ould)h(b)q(e)74 176 y Fk(***)24 b(WARNING)f(***)g(Gluon)
+g(with)g(<specified)g(number)g(of)h(loops>)f(loops)g(requested)f(***)74
+266 y FE(if)16 b(the)f(n)o(um)o(b)q(er)h(of)e(lo)q(ops)i(whic)o(h)g(the)f
+(user)h(had)f(requested)h(w)o(as)e(in)i(excess)g(of)f(40)f(and)i(further)74
+356 y Fk(***)24 b(Reducing)e(gluon)i(length)f(to)g(6)h(loops)f(\(max)g(85\))h
+(***)74 446 y FE(if)16 b(the)f(user)g(had)h(requested)f(in)i(excess)e(of)g
+(85)g(lo)q(ops)g(and)h(\014nally)74 536 y Fk(***)24 b(Probable)e(Cause:)47
+b(Gluon)23 b(selected)g(instead)g(of)h(Fermion)f(***)74 625
+y FE(if)16 b(the)f(user)g(had)h(requested)f(more)g(than)g(1000)f(lo)q(ops.)
+145 682 y(The)d(latter)g(recognizes)h(a)f(common)g(cause)h(of)e(suc)o(h)i
+(problems:)23 b(cop)o(ying)11 b(lines)i(with)f(an)f(editor.)19
+b(When)74 738 y(a)14 b Fs(n)p FE(dra)o(wline)p Fs(n)p FE(fermion)h(statemen)o
+(t)e(for)g(a)h(fermion)g(of)g(length)h(2000)e(is)h(copied)h(and)g(altered)f
+(to)g(generate)f(a)74 795 y(photon)f(the)g(user)g(ma)o(y)f(forget)g(to)g(c)o
+(hange)h(the)g(length)h(and)f(th)o(us)g(request)g(a)f(photon)h(of)f(2000)g
+(half-wiggles!)74 851 y(The)16 b(result)g(w)o(ould)g(b)q(e)h(\(if)e(not)h
+(caugh)o(t\))f(either)h(to)f(run)h(out)f(of)g(T)1225 861 y(E)1251
+851 y(X)h(capacit)o(y)f(or)h(to)f(pro)q(duce)h(ab)q(out)g(30)74
+908 y(blank)g(pages)f(on)g(y)o(our)g(laser)g(prin)o(ter.)74
+1050 y Fq(C.2)69 b(Unexp)r(ected)21 b(Results)h(and)h(Other)g(Errors)74
+1152 y FE(Ov)o(ercoming)c(exhausted)g(T)572 1161 y(E)597 1152
+y(X)f(capacit)o(y)h(will)h(b)q(e)f(dealt)f(with)h(separately)f(in)h(the)g
+(next)f(section.)30 b(Here)74 1208 y(w)o(e)17 b(consider)h(un)o(usual)h(ob)s
+(jects)d(whic)o(h)i(ma)o(y)f(app)q(ear)g(in)h(one's)f(F)l(eynman)g(diagram)g
+(and)h(a)f(few)g(strange)74 1265 y(T)99 1274 y(E)125 1265 y(X-generated)e
+(error)g(messages.)128 1444 y(The)g(diagram)459 1341 y Fm(Error)503
+1378 y(Error)546 1415 y(Error)590 1453 y(Error)633 1490 y(Error)677
+1527 y(Error)720 1565 y(Error)p 458 1341 2 42 v 418 1342 42
+2 v 720 1606 2 42 v 720 1566 42 2 v 866 1444 a FE(w)o(as)g(pro)q(duced)h(b)o
+(y)74 1757 y Fk(\\begin{picture}\(8000,8000\))74 1813 y
+(\\drawline\\gluon[\\SE\\FLAT]\(0)o(,7000\)[6)o(])74 1870 y
+(\\drawline\\fermion[\\N\\REG]\(\\)o(gluonfro)o(ntx,\\gl)o(uonfron)o
+(ty\)[1000)o(])74 1926 y(\\drawline\\fermion[\\W\\REG]\(\\)o(gluonfro)o
+(ntx,\\gl)o(uonfron)o(ty\)[1000)o(])74 1982 y
+(\\drawline\\fermion[\\S\\REG]\(\\)o(gluonbac)o(kx,\\glu)o(onbacky)o
+(\)[1000])74 2039 y(\\drawline\\fermion[\\E\\REG]\(\\)o(gluonbac)o(kx,\\glu)o
+(onbacky)o(\)[1000])74 2095 y(\\end{picture})74 2185 y FE(b)q(ecause)f
+(gluons)g(in)g(the)f(SE)g(direction)i(cannot)e(app)q(ear)g(in)h(the)f
+Fs(n)p FE(FLA)l(T)g(mo)q(de)g(\(see)h(\\ERR)o(OR)g(IN)f(P)l(AR-)74
+2242 y(TICLE)i(OPTIONS)g(SELECTION")g(in)g(C.1\).)145 2321
+y Fu(Unexp)q(ected)25 b(gaps)g(and)g(in)o(visible)h(lines:)43
+b FE(These)22 b(ma)o(y)f(app)q(ear)g(as)h(the)f(result)h(of)f(dra)o(wing)74
+2378 y(diagonal)d(straigh)o(t)f(lines)i(of)e(length)h(less)g(than)f(the)h
+(minim)o(um)g(of)f(1416)f(cen)o(tip)q(oin)o(ts.)28 b(This)18
+b(ma)o(y)f(o)q(ccur)74 2434 y(in)g(fermions,)g(scalars)f(\(of)g(seglength)h
+(less)g(than)f(the)h(ab)q(o)o(v)o(e\),)f(stems)g(and)g(caps.)24
+b(The)17 b(minim)o(um)g(size)h(of)74 2491 y(a)d(circle)i(is)f(401)e(cen)o
+(tip)q(oin)o(ts.)21 b(See)16 b(also)f(section)h(4.1.2.)145
+2571 y(Brok)o(en)f(horizon)o(tal)g(photons,)g(suc)o(h)g(as)877
+2572 y Fg(_)34 b(_)g(_)h(_)919 2582 y(^)f(^)g(^)g(^)1235 2566
+y FE(are)20 b(the)h(result)g(of)f(mis-using)j(\(or)c(not)74
+2622 y(using\))d(\\)p Fs(n)p FE(bigphotons")f(\(section)g(2.9\).)145
+2702 y(Other)g(sorts)f(of)h(errors)g(are:)145 2781 y Fu(Exp)q(ected)j(Num)o
+(b)q(er)f(...)44 b FE(Y)l(ou'v)o(e)15 b(left)g(a)g(bac)o(kslash)h(o\013)e(of)
+h(a)g(parameter)f(or)h(v)m(ariable.)985 2906 y(84)p eop
+%%Page: 85 90
+bop 74 -26 a Fk(LaTeX)23 b(error.)47 b(See)24 b(LaTeX)f(manual)g(for)g
+(explanation.)408 30 y(Type)47 b(H)24 b(<return>)47 b(for)23
+b(immediate)g(help.)74 87 y(!)h(\\begin{picture})e(ended)h(by)g
+(\\end{document}.)74 180 y FE(or,)14 b(p)q(ossibly)j(something)f(lik)o(e)74
+274 y Fk(!)24 b(Missing)f(})h(inserted.)74 331 y(<inserted)f(text>)456
+387 y(})74 444 y(<to)h(be)f(read)h(again>)528 500 y(\\vfil)74
+556 y(\\newpage)f(->\\par)g(\\vfil)599 613 y(\\penalty)g(-\\@M)74
+669 y(\\clearpage)g(->\\newpage)599 726 y(\\write)g(\\m@ne)g({}\\vbox)g
+({}\\penalty)g(-\\@Mi)74 782 y(\\enddocument)f(->\\@checkend)h
+({document}\\clearpage)1196 839 y(\\begingroup)f(\\if@filesw)h(\\immed...)74
+952 y(\\end)g(#1->\\csname)g(end#1\\endcsname)862 1008 y(\\endgroup)f
+(\\@checkend)h({#1}\\if@ignore)f(\\global...)74 1065 y(l.13)h
+(\\end{document})74 1158 y FE(Y)l(ou'v)o(e)10 b(forgotten)f(to)h(close)h(a)f
+(grouping)h(with)g(a)f Fs(n)p FE(end)p Fs(f)p FE(...)p Fs(g)p
+FE(.)17 b(In)11 b(this)g(case)f(y)o(ou)g(forgot)f(the)i Fk(\\end{picture})74
+1215 y FE(statemen)o(t.)19 b(If)c(the)h(error)e(is)74 1309
+y Fk(!)24 b(Use)f(of)h(\\picture)f(doesn't)g(match)g(its)g(definition.)74
+1402 y FE(Then)16 b(y)o(ou)f(t)o(yp)q(ed)g(\\)p Fs(n)p FE(picture")h(instead)
+f(of)g(\\picture".)74 1546 y Fq(C.3)69 b(T)283 1559 y(E)319
+1546 y(X)23 b(Capacit)n(y)f(Exceeded)74 1647 y FE(This)16 b(is)g(the)f(most)f
+(dreaded)i(of)f(all)h(error)f(messages.)k(It)c(is)h(also)f(the)g(most)g
+(common.)145 1704 y(L)157 1698 y Ft(a)178 1704 y FE(T)203 1717
+y(E)228 1704 y(X)g(allo)o(ws)f(the)g(user)h(a)f(certain)g(amoun)o(t)g(of)g
+(in)o(ternal)h(w)o(orking)e(space)i(and)f(then)h(uses)f(up)h(most)f(of)74
+1760 y(it)j(itself.)24 b(T)l(o)16 b(increase)h(this)g(a)f(T)647
+1770 y(E)672 1760 y(X)g(wizard)h(m)o(ust)f(re-compile)i(T)1230
+1770 y(E)1255 1760 y(X)f(\(generally)g(in)g(P)o(ascal\).)22
+b(The)17 b(most)74 1816 y(ob)o(vious)12 b(w)o(a)o(y)f(in)i(whic)o(h)g(T)526
+1826 y(E)551 1816 y(X)f(will)i(exceed)f(its)f(limit)h(is)g(if)f(there)g(is)h
+(to)q(o)e(m)o(uc)o(h)h(text.)18 b(Since)c Fp(FEYNMAN)74 1873
+y FE(uses)h(quite)f(a)g(bit)h(of)f(L)453 1867 y Ft(a)474 1873
+y FE(T)499 1887 y(E)524 1873 y(X's)g(in)o(ternal)h(resources)f(this)h(limits)
+g(the)g(size)g(and)f(complexit)o(y)h(of)f(diagrams)g(to)74
+1929 y(roughly)h(that)f(of)g(the)g(co)o(v)o(er)g(diagram.)19
+b(If)c(gluons)g(are)f(not)g(in)o(v)o(olv)o(ed)h(then)g(more)f(complex)h
+(diagrams)f(are)74 1986 y(p)q(ossible.)22 b(L)275 1980 y Ft(a)296
+1986 y FE(T)321 2000 y(E)346 1986 y(X)15 b(pro)o(vides)g(a)f(partial)h
+(solution)h(to)e(this)h(problem)g(whic)o(h)g(will)i(b)q(e)e(discussed)h
+(last.)k(When)74 2042 y(T)99 2052 y(E)125 2042 y(X)15 b(is)h(used)f(the)h
+(LIS)g(\014le)g(will)h(end)f(with)f(a)g(summary)g(of)g(memory)f(usage)h(of)g
+(the)g(form:)74 2193 y Fk(Here)23 b(is)h(how)g(much)f(of)g(TeX's)h(memory)f
+(you)g(used:)98 2249 y(462)g(strings)g(out)h(of)f(2520)98 2305
+y(4525)g(string)g(characters)g(out)g(of)h(29548)98 2362 y(44019)f(words)g(of)
+h(memory)f(out)g(of)h(65501)98 2418 y(2381)f(multiletter)g(control)g
+(sequences)f(out)i(of)f(2500)98 2475 y(19296)g(words)g(of)h(font)f(info)h
+(for)f(73)h(fonts,)f(out)g(of)h(35000)f(for)g(100)98 2531 y(14)h(hyphenation)
+e(exceptions)g(out)i(of)g(307)98 2588 y(20i,16n,53p,168b,280s)d(stack)i
+(positions)g(out)g(of)h(200i,40n,60p,500b,600s)74 2644 y(No)g(pages)f(of)h
+(output.)985 2906 y FE(85)p eop
+%%Page: 86 91
+bop 74 -83 a Fp(C.3.1)56 b(Exhausting)18 b(In)n(ternal)g(Storage)74
+3 y FE(T)99 13 y(E)125 3 y(X)f(k)o(eeps)h(trac)o(k)f(of)g(a)g(n)o(um)o(b)q
+(er)h(of)g(in)o(ternal)g(v)m(ariables)h(and)f(will)h(cease)f(pro)q(cessing)g
+(a)g(\014le)g(should)h(the)74 59 y(allo)q(cated)i(maxim)o(um)e(usage)g(b)q(e)
+h(exceeded.)35 b(When)19 b Fp(FEYNMAN)h FE(is)g(b)q(eing)h(used)f(extensiv)o
+(ely)h(the)74 116 y(most)15 b(common)f(T)392 126 y(E)418 116
+y(X)h(capacit)o(y)g(exceeded)i(messages)e(will)i(b)q(e:)145
+197 y Fu(Sa)o(v)o(e-Stac)o(k:)29 b FE(Lik)o(ely)17 b(cause)e(is)g(that)g(v)m
+(ariables)h(w)o(ere)f(passed)g(b)q(oth)g(lo)q(cally)i(and)e(globally)i(b)q
+(et)o(w)o(een)74 254 y(subroutines)c(to)q(o)e(man)o(y)g(times.)19
+b(Chec)o(k)12 b(that)f Fs(n)p FE(global)h(precedes)h(all)g(assignmen)o(t)f
+(statemen)o(ts,)e(arithmetic)74 310 y(op)q(erations)17 b(\(except)g
+Fs(n)p FE(negate)g Fo(etc.)g FE(\))25 b(and)17 b(so)g(forth.)24
+b(In)18 b(the)f(ab)q(o)o(v)o(e)f(LIS)i(\014le)g(example)g(280)e(out)g(of)h
+(600)74 367 y(S-stac)o(k)e(\(sa)o(v)o(e)f(stac)o(k\))g(p)q(ositions)i(w)o
+(ere)f(used.)145 448 y Fu(P-Stac)o(k:)28 b FE(Y)l(our)15 b(macro)e
+(de\014nitions)j(ha)o(v)o(e)e(exceeded)i(the)e(maxim)o(um)h(total)e(n)o(um)o
+(b)q(er)i(of)f(argumen)o(ts)74 504 y(p)q(ermitted.)22 b(This,)16
+b(and)g(the)f(ab)q(o)o(v)o(e)h(error,)e(could)j(b)q(e)f(caused)g(b)o(y)g(a)f
+(recursiv)o(e)h(de\014nition)i(gone)d(a)o(wry)l(.)20 b(In)74
+561 y(the)15 b(ab)q(o)o(v)o(e)g(example)h(53)f(out)g(of)f(60)h(P-Stac)o(k)g
+(p)q(ositions)h(w)o(ere)f(used.)145 642 y Fu(!)25 b(No)18 b(ro)q(om)g(for)g
+(a)h(new)e Fs(n)p Fu(coun)o(t.:)31 b FE(Y)l(ou)16 b(ha)o(v)o(e)g(de\014ned)h
+(to)q(o)e(man)o(y)g(n)o(umerical)i(coun)o(ters)f(via)g(the)74
+699 y Fs(n)p FE(new)o(coun)o(t)j(or)g Fs(n)p FE(new)o(coun)o(ter)f(command.)
+32 b(Bet)o(w)o(een)19 b(them)g(T)1196 709 y(E)1222 699 y(X,)g(L)1300
+693 y Ft(a)1321 699 y FE(T)1346 712 y(E)1371 699 y(X,)g(and)h
+Fp(FEYNMAN)p FE(,)f(ma)o(y)74 755 y(use)f(up)g(to)f(218)g(out)g(of)g(234)g(a)
+o(v)m(ailable)i(coun)o(ters.)27 b(T)l(ry)18 b(to)f(re-use)h(old)g(v)m
+(ariables,)h(the)f Fs(n)p FE(Xone...)p Fs(n)p FE(Y)l(eigh)o(t)74
+812 y(a)o(v)m(ailable)f(for)d(the)g(user)h(or)f(use)h(some)g
+Fs(n)p FE(dimen)g(coun)o(ters)g(where)g(p)q(ossible.)21 b(T)o(ypically)c(the)
+d(last)h(few)g(lines)74 868 y(in)h(y)o(our)f(LIS)h(\014le)g(will)h(lo)q(ok)f
+(lik)o(e:)74 1018 y Fk(\\OOO=\\count234)74 1131 y(!)24 b(No)f(room)h(for)f(a)
+h(new)f(\\count)g(.)74 1188 y(\\ch@ck)g(...\\else)g(\\errmessage)f({No)i
+(room)f(for)h(a)f(new)h(#3})1267 1244 y(\\fi)74 1301 y(\\alloc@)f
+(...\\advance)f(\\count)h(1#1by\\@ne)g(\\ch@ck)g(#1#4#2)1267
+1357 y(\\allocationnumber)f(=\\count)h(...)74 1414 y(l.36)g(\\newcount\\PPP)
+74 1564 y FE(follo)o(w)o(ed)16 b(b)o(y)f(a)g(synopsis)g(of)g(T)606
+1574 y(E)632 1564 y(X's)g(memory)f(usage.)145 1645 y Fu(Multi-letter)k(Con)o
+(trol)e(Sequences:)26 b FE(Probably)15 b(to)q(o)e(man)o(y)g(macro)h
+Fs(n)p FE(def)t('s)f(de\014ned.)21 b(Man)o(y)13 b(suc)o(h)74
+1702 y(errors)i(will)h(o)q(ccur)g(if)g(y)o(ou)f(attempt)f(to)g(input)j
+Fp(FEYNMAN)e FE(more)g(than)g(once.)74 1823 y Fp(C.3.2)56 b(Exhausting)18
+b(Memory)f(Size)74 1909 y FE(If)f(y)o(our)f(LIS)i(\014le)f(tells)h(y)o(ou)e
+(that)g(y)o(ou'v)o(e)g(used)h(65501)f(w)o(ords)f(of)i(memory)f(out)g(of)g
+(65501)f(then)i(y)o(ou)g(ha)o(v)o(e)74 1966 y(reac)o(hed)h(the)f(maxim)o(um)g
+(\014le)h(`size')f(that)f(L)830 1960 y Ft(a)851 1966 y FE(T)876
+1979 y(E)902 1966 y(X)h(will)i(p)q(ermit.)23 b(Unless)17 b(y)o(ou'v)o(e)e
+(made)h(some)g(error,)f(suc)o(h)74 2022 y(as)e(ha)o(ving)g(a)f(\014le)i
+Fs(n)p FE(input)g(itself,)g(y)o(our)e(c)o(hoices)i(are)f(to)f(enlarge)h(T)
+1199 2032 y(E)1225 2022 y(X)g(\(this)g(requires)h(a)e(`wizard',)h(whatev)o
+(er)74 2079 y(that)h(is\),)h(mak)o(e)g(y)o(our)f(program)g(smaller,)h(or)g
+(break)g(y)o(our)f(do)q(cumen)o(t)i(up)f(in)o(to)g(smaller)h(pieces.)21
+b(The)15 b(last)74 2135 y(option)f(w)o(ould)g(b)q(e)g(irritating)g(if,)f(for)
+g(instance,)h(y)o(ou)f(w)o(ere)h(writing)f(a)g(b)q(o)q(ok)h(and)g(had)f(to)g
+(con)o(tin)o(ually)i(k)o(eep)74 2191 y(trac)o(k)k(of)h(cross-references)g(b)q
+(et)o(w)o(een)g(these)h(divisions,)h(page)e(n)o(um)o(b)q(ering)h(and)f(so)g
+(forth.)33 b(L)1735 2185 y Ft(a)1756 2191 y FE(T)1781 2205
+y(E)1807 2191 y(X)20 b(uses)74 2248 y(the)e Fs(n)p FE(include)i(facilit)o(y)f
+(to)e(alleviate)i(the)f(tedium.)28 b(The)18 b(only)h(dra)o(wbac)o(k)e(is)h
+(that)f(after)g(a)h(break)f(in)i(the)74 2304 y(do)q(cumen)o(t)f(the)f(new)g
+(p)q(osition)h(will)h(b)q(egin)f(on)f(a)g(fresh)g(page.)25
+b(Individual)20 b(F)l(eynman)e(diagrams)e(cannot)74 2361 y(b)q(e)g(brok)o(en)
+f(up)h(this)f(w)o(a)o(y)g(and)g(this)h(limits)g(their)g(ultimate)g(complexit)
+o(y)l(.)145 2417 y(T)l(o)f(pro)q(cess)h(just)f(a)g(p)q(ortion)g(of)g(a)g(do)q
+(cumen)o(t)h(place)h(the)e(di\013eren)o(t)h(p)q(ortions)f(in)h(a)g(series)g
+(of)f(\014les)h(and)74 2474 y(ha)o(v)o(e)f(a)g Fo(driving)g
+FE(\014le)h(whic)o(h)g(includes)h(the)f(statemen)o(ts)74 2568
+y Fk(\\include)23 b(<file1>)g(\\include)g(<file2>)g(\\include)f(<file3>...)h
+(\\include)g(<file)g(n>)74 2661 y FE(These)i(should)h(app)q(ear)f(at)f(the)h
+(p)q(ositions)h(in)f(whic)o(h)h(y)o(ou)e(w)o(an)o(t)g(them)h(and)g(ma)o(y)f
+(b)q(e)h(in)o(tersp)q(ersed)74 2718 y(with)e(text)f(and)h(commands)f(within)i
+(the)f(driving)g(\014le.)43 b(Prior)23 b(to)f(T)1338 2728 y(E)1363
+2718 y(Xing)h(the)g(\014le)h(the)e(commands)74 2774 y Fk(includeonly)h
+(<file>)13 b FE(should)i(app)q(ear)f(for)g(eac)o(h)g(piece)i(that)d(y)o(ou)h
+(w)o(an)o(t)f(pro)q(cessed)i(on)f(that)f(particular)985 2906
+y(86)p eop
+%%Page: 87 92
+bop 74 -83 a FE(run.)20 b(F)l(or)13 b(instance,)h(to)f(prin)o(t)g(out)h(the)f
+(\014rst)g(part)g(of)g(c)o(hapter)g(three)h(of)f(this)h(man)o(ual)g(I)g(ha)o
+(v)o(e)f(a)g(\014le,)h(whic)o(h)74 -26 y(I)i(call)g(FD3A.TEX,)e(con)o
+(taining)74 67 y Fk(\\documentstyle[11pt]{report)o(})74 124
+y(\\input)23 b(FEYNMAN)74 180 y(\\includeonly{FEYNMANDOC3A})74
+237 y(\\input)g(FEYNMANDOC.INC)74 331 y FE(where)16 b(the)f(\014le)h
+(FEYNMANDOC.INC,)e(unconditionally)k(input,)e(con)o(tains)74
+424 y Fk(\\textheight)23 b(700pt)g(\\textwidth)f(450pt)74 481
+y(<VARIOUS)h(DEFINITIONS)f(COMMON)h(TO)h(ALL)f(PARTS>)74 594
+y(\\begin{document})260 b(\045)24 b(End)g(of)f(preamble)g(and)g(beginning)g
+(of)h(text.)74 707 y(\\include{FEYNMANDOCTITLE})74 763 y
+(\\include{FEYNMANDOCPRELIMS})74 820 y(\\include{FEYNMANDOC1})74
+876 y(\\include{FEYNMANDOC2A})74 933 y(\\include{FEYNMANDOC2B})74
+989 y(\\include{FEYNMANDOC2C})575 1045 y(.)575 1102 y(.)575
+1158 y(.)74 1215 y(\\include{FEYNMANDOC4H})74 1271 y(\\include{FEYNMANDOC4I})
+74 1328 y(\\include{FEYNMANDOC4J})74 1384 y(\\include{FEYNMANDOCEXER})74
+1441 y(\\include{FEYNMANDOCAPPB})74 1497 y(\\include{FEYNMANDOCAPPC})74
+1554 y(\\end{document})74 1647 y FE(When)11 b(executed)h(eac)o(h)e(section)h
+(will)i(create)d(a)g(n)o(um)o(b)q(er)h(of)f(\014les)i(suc)o(h)f(as)f(the)h
+Fk(<filename>.AUX)d FE(\014le.)20 b(These)74 1704 y(m)o(ust)14
+b(b)q(e)g(retained)h(on)f(y)o(our)g(T)612 1714 y(E)637 1704
+y(X)h(directory)f(as)g(they)g(transmit)f(information)i(ab)q(out)f(one)g
+(section)h(to)e(the)74 1760 y(others.)19 b(A)o(UX)c(\014les)h(tell)g(ab)q
+(out)e(page)h(n)o(um)o(b)q(ering,)g(sections)g Fo(etc.)h FE(,)f(BIB)g
+(\014les)h(con)o(tain)f(the)f(accum)o(ulated)74 1817 y(bibliograph)o(y)l(,)j
+(TOC)e(\014les)i(the)e(table)h(of)f(con)o(ten)o(ts)f(and)i(so)f(forth.)20
+b(F)l(or)14 b(this)i(reason)f(it)h(ma)o(y)e(tak)o(e)h(sev)o(eral)74
+1873 y(runs)f(to)f(get)g(y)o(our)g(do)q(cumen)o(t)h(to)f(come)g(out)g
+(correctly)h(as)f(eac)o(h)h(A)o(UX)f(\014le)i(will)g(b)q(e)f(up)q(dating)g
+(itself)h(based)74 1930 y(up)q(on)f(up)q(dates)g(of)f(the)h(other)f(A)o(UX)g
+(\014les.)20 b(TOC)14 b(\014les)g(will)h(b)q(e)f(the)g(last)f(to)g(come)g
+(out)g(correctly)l(.)20 b(T)l(o)13 b(prin)o(t)74 1986 y(out)i(this)h(en)o
+(tire)f(do)q(cumen)o(t)h(I)f(had)h(a)f(COMMAND)f(\014le)i(called)h
+(MAKEDOC.COM)e(whic)o(h)h(con)o(tained:)74 2080 y Fk($)24 b(SET)f(DEFAULT)g
+(DRA1:[LEVINE.TEXBOOK])74 2136 y($)h(LATEXIT)f(FDTITLE)74 2193
+y($)h(LATEXIT)f(FDPRE)74 2249 y($)h(LATEXIT)f(FD1)74 2306 y($)h(LATEXIT)f
+(FD2A)74 2362 y($)h(LATEXIT)f(FD2B)74 2419 y($)h(PURGE)f(FD*.AUX)74
+2475 y($)h(LATEXIT)f(FD2C)241 2532 y(.)241 2588 y(.)241 2644
+y(.)74 2701 y($)h(LATEXIT)f(FD4H)74 2757 y($)h(LATEXIT)f(FD4I)985
+2906 y FE(87)p eop
+%%Page: 88 93
+bop 74 -83 a Fk($)24 b(LATEXIT)f(FD4J)74 -26 y($)h(PURGE)f(FD*.AUX)74
+30 y($)h(LATEXIT)f(FDADDA)74 87 y($)h(LATEXIT)f(FDAPPB)74 143
+y($)h(LATEXIT)f(FDAPPC)74 199 y($)h(PURGE)f(FD*.*)74 256 y($)h(PURGE)f
+(FEYNMANDOC*.*)74 406 y FE(Where)18 b(LA)l(TEXIT)h(is)g(a)e(command)h(whic)o
+(h)h(L)890 400 y Ft(a)911 406 y FE(T)936 420 y(E)962 406 y(Xs)f(a)g(\014le,)h
+(sends)g(it)f(to)f(the)h(prin)o(ter)h(and)f(then)g(erases)74
+463 y(the)e(LIS)h(and)e(prin)o(ter)h(\014les.)22 b(The)16 b(\014les)h(FD1,)d
+(FD2A)h Fo(etc.)32 b FE(are)16 b(lik)o(e)g(the)g(small)h(FD3A)d(\014le)j(ab)q
+(o)o(v)o(e)e(whic)o(h)74 519 y(pro)q(cessed)i(just)f(the)g(\014rst)f(part)h
+(of)f(c)o(hapter)h(three.)23 b(The)16 b(PUR)o(GE)g(statemen)o(ts)f(remo)o(v)o
+(e)g(old)h(v)o(ersions)h(of)74 576 y(the)i(A)o(UX)g(\014les)h(from)e(y)o(our)
+g(disk.)32 b(The)19 b(ab)q(o)o(v)o(e)g(\014le)g(is)h(sen)o(t)e(as)h(a)g(batc)
+o(h)f(job)h(b)o(y)g(a)f(command)h(\014le)h(lik)o(e)74 632 y(PRINTDOC)c(whic)o
+(h)g(con)o(tains)74 726 y Fk($!)48 b(Prints)23 b(FEYNMANDOC.TEX...all)e(of)i
+(it.)74 782 y($)h(SET)f(DEFAULT)g(DRA1:[LEVINE.TEXBOOK])74
+839 y($)h(SUBMIT/NOPRINTER/NOTIFY)d(DRA1:[LEVINE.TEXBOOK]MA)o(KEDOC.CO)o(M)74
+933 y FE(The)16 b(ab)q(o)o(v)o(e)e(is)i(in)g(V)-5 b(AX)15 b(co)q(de)h(but)g
+(the)f(format)f(on)h(other)g(mac)o(hines)h(should)g(b)q(e)g(apparen)o(t.)145
+2027 y(This)i(w)o(ork)e(w)o(as)h(supp)q(orted)g(b)o(y)h(the)f(UK)h(Science)h
+(and)f(Engineering)g(Researc)o(h)g(Council.)28 b(I)18 b(w)o(ould)74
+2084 y(lik)o(e)i(to)f(thank)g(all)h(of)e(the)h(p)q(eople)i(at)d(the)h(Ca)o(v)
+o(endish)h(Labs,)g(Cam)o(bridge,)f(England,)i(who)d(ga)o(v)o(e)h(their)74
+2140 y(preferences)d(and)g(commen)o(ts)e(as)h(to)g(whic)o(h)h(line)h(st)o
+(yles)e(should)h(b)q(e)g(incorp)q(orated.)745 2196 y(Mic)o(hael)g(Levine,)g
+(1988)985 2906 y(88)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/latex209/contrib/feynman/doc/readme.1st b/macros/latex209/contrib/feynman/doc/readme.1st
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/macros/latex209/contrib/feynman/doc/readme.1st
diff --git a/macros/latex209/contrib/feynman/fermionsetup.tex b/macros/latex209/contrib/feynman/fermionsetup.tex
new file mode 100644
index 0000000000..552a236117
--- /dev/null
+++ b/macros/latex209/contrib/feynman/fermionsetup.tex
@@ -0,0 +1,44 @@
+% FERMIONSETUP(7).TEX
+% CALLED BY FEYNMAN(34).TEX.
+% USED FOR GENERATING FERMION LINES IN FEYNMAN DIAGRAMS IN LATEX.
+\global\newcount\fermionlength % THE TOTAL FERMION LINE LENGTH.
+\global\newcount\fermionlengthx
+\global\newcount\fermionlengthy
+\global\newcount\fermionfrontx %}(x,y) co-ord of left of fermion
+\global\newcount\fermionfronty %}
+\global\newcount\fermionbackx
+\global\newcount\fermionbacky
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\ALLfermion{ % READ IN FROM FEYNMAN \selectfermion
+\global\fermionfrontx=\particlefrontx \global\fermionfronty=\particlefronty
+% Error messages for overly-long lines. See FEYNMAN for negative-lengths.
+\ifnum\unitboxnumber > 50000
+\message{ *** WARNING *** Fermion of length
+\the\unitboxnumber\space requested *** }
+\ifnum\unitboxnumber > 80000
+\message{ *** Reducing fermion length to 30000 (max 80000) *** }
+\global\unitboxnumber=30000 \fi \fi % end of length error
+\global\fermionlength=\unitboxnumber % The TOTAL line length
+\global\particleadjustx=0 \global\particleadjusty=0 %Default
+\global\numlineparts = 1 \global\numupperunits=1
+\global\upperlineadjx=-200 \global\upperlineadjy=0
+\global\fermionlengthx=\fermionlength \global\fermionlengthy=\fermionlength
+\gslanttest(\fermionlengthx,\fermionlengthy) % See FEYNMAN22.TEX (FOR \XDIR).
+\global\multiply\fermionlengthx by \XDIR % In keeping with photons and gluons.
+\global\multiply\fermionlengthy by \YDIR % In keeping with photons and gluons.
+\global\unitboxheight=\fermionlengthy \global\unitboxwidth=\fermionlengthx
+\global\advance \fermionlengthx by \particleadjustx
+\global\advance \fermionlengthy by \particleadjusty
+\global\particlelengthx=\fermionlengthx
+\global\particlelengthy=\fermionlengthy
+\boxlengthdefault \rearcoords \midcoords
+\global\fermionbackx=\particlebackx \global\fermionbacky=\particlebacky
+\ifcase\LINECONFIGURATION %\REG case
+\ifnum\XDIR=0
+\gdef\upperunitbox{\line(\XDIR,\YDIR){\boxlengthy}} %\N or \S
+\else
+\gdef\upperunitbox{\line(\XDIR,\YDIR){\boxlengthx}}
+\fi
+\else \UNIMPERROR
+\fi
+}
diff --git a/macros/latex209/contrib/feynman/feynman.tex b/macros/latex209/contrib/feynman/feynman.tex
new file mode 100644
index 0000000000..1e922b6288
--- /dev/null
+++ b/macros/latex209/contrib/feynman/feynman.tex
@@ -0,0 +1,578 @@
+% FEYNMAN(34).TEX
+% CALLING ROUTINE FOR DRAWING FEYNMAN DIAGRAMS IN LATEX.
+% DOCUMENTATION IN "FEYNMAN - A LaTeX Routine for Generating Feynman Diagrams"
+% Cavendish-HEP 88/11 (Cavendish Labs, Cambridge, UK).
+% See also: Levine, M.J.S., A LaTeX Graphics Routine for Drawing Feynman
+% Diagrams, Cavendish - HEP 89/4.
+% USES THE FOLLOWING TEX FILES:
+% GLUONSETUP(31), PHOTONSETUP(28), FERMIONSETUP(7), SCALARSETUP(9)
+% VERTEX(25), GLUONLINKS, LOOPS(1)
+%
+% THIS PROGRAM PACKAGE NOT TO BE ALTERED WITHOUT THE EXPRESS WRITTEN
+% PERMISSION OF THE AUTHOR.
+%
+%**************************************************************************
+%
+% SAMPLE USAGE
+%
+% \documentstyle[12pt]{article}
+% \begin{document}
+% \input feynman
+% \textheight 800pt \textwidth 450pt
+% \begin{picture}(10000,18000)
+% \drawline\gluon[\S\REG](0,16000)[8]
+% \drawline\fermion[\SW\REG](\gluonbackx,\gluonbacky)[2000]
+% \drawline\fermion[\SE\REG](\gluonbackx,\gluonbacky)[2000]
+% \end{picture}
+% \end{document}
+%
+%**************************************************************************
+%
+\message{FEYNMAN: For generating Feynman Diagrams in LaTex}
+\message{Mark 1.0 Last Altered by MJSL 2/89}
+\textheight 650pt \textwidth 400pt % Page size set.
+\setlength{\unitlength}{0.01pt}
+\gdef\Feynmanlength{\setlength{\unitlength}{0.01pt}} % Say \Feynmanlength
+\gdef\unlock{\catcode`\@=11}
+% Allows use of "@" in macro names, like PLAIN.TEX does.
+\gdef\lock{\catcode`\@=12}% Change @'s back to their normal category code.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ESTABLISH SOME COUNTERS TO INDICATE WHICH TYPE OF PARTICLE LINE IS
+% BEING DRAWN.
+%
+% EACH TYPE OF PARTICLE LINE HAS A CODE OF 3 1-DIGIT NUMBERS.
+% THE FIRST DIGIT INDICATES THE BASIC PARTICLE TYPE (GLUON, PHOTON ETC.)
+% THE SECOND INDICATES THE DIRECTION (HORIZONTAL, ANGLED, VERTICLE)
+% THE THIRD INDICATES SUB-CASES (DIFFERENT SIZES ETC.)
+%
+% THE CODE
+% ========
+%
+% FIRST DIGIT: \LINETYPE or \LTYPE
+%
+% 1 FERMION (SOLID LINE)
+% 2 SCALAR (DASHED LINE)
+% 3 PHOTON/VECTOR BOSON (UNDULATING LINE)
+% 4 GLUON (CURLY, LOOPING LINE)
+% 5 ESPECIAL (USER-DEFINED)
+%
+% SECOND DIGIT: \LINEDIRECTION or \LDIR
+%
+% Eight directions are possible...the eight compass points.
+% North is at the top of the page
+%
+% 0 \N North (Vertical; bottom to top)
+% 1 \NE North-East (45 degrees; to the upper right)
+% 2 \E East (Horizontal; left to right)
+% 3 \SE South-East (45 degrees; to the lower right)
+% 4 \N South (Vertical; top to bottom)
+% 5 \SW South-West (45 degrees; to the lower left)
+% 6 \W West (Horizontal; right to left)
+% 7 \NE North-West (45 degrees; to the upper left)
+%
+% THIRD DIGIT: \LINECONFIGURATION or \LCONFIG
+%
+% 0 STANDARD CONFIGURATION
+% 1 FLIPPED (INVERTED; UPSIDE-DOWN) CONFIGURATION (PHOTONS & GLUONS)
+% 2 CURLY
+% 3 FLIPPEDCURLY
+% 4 FLAT (PHOTONS AND GLUONS - CERTAIN DIRECTIONS ONLY)
+% 5 FLIPPEDFLAT
+% 6 CENTRAL (GLUONS ONLY); LONGPHOTON (PHOTONS ONLY)
+% 7 FLIPPEDCENTRAL; FLIPPEDLONG
+% 8 SQUASHED (GLUONS ONLY - ONLY `EASTBOUND')
+% 9 FLIPPEDSQUASHED
+%
+%.............................................................
+%
+\global\newcount\LINETYPE
+\global\newcount\LINEDIRECTION
+\global\newcount\LINECONFIGURATION
+\newcommand{\LTYPE}{\LINETYPE}
+\newcommand{\LDIR}{\LINEDIRECTION}
+\newcommand{\LCONFIG}{\LINECONFIGURATION}
+%DEFAULTS: Horizontal fermion.
+\global\LINETYPE=1 \global\LINEDIRECTION=0 \global\LINECONFIGURATION=0
+% The parametric code names. Don't change these.
+\global\newcount\fermion \fermion=1
+\global\newcount\scalar \scalar=2
+\global\newcount\photon \photon=3
+\global\newcount\gluon \gluon=4
+\global\newcount\especial \especial=5
+\gdef\N{0} \gdef\NE{1} \gdef\E{2} \gdef\SE{3}
+\gdef\S{4} \gdef\SW{5} \gdef\W{6} \gdef\NW{7}
+\global\newcount\REG \global\REG=0
+\global\newcount\FLIPPED \global\FLIPPED=1
+\global\newcount\CURLY \global\CURLY=2
+\global\newcount\FLIPPEDCURLY \global\FLIPPEDCURLY=3
+\global\newcount\FLAT \global\FLAT=4
+\global\newcount\FLIPPEDFLAT \global\FLIPPEDFLAT=5
+\global\newcount\CENTRAL \global\CENTRAL=6
+\global\newcount\FLIPPEDCENTRAL \global\FLIPPEDCENTRAL=7
+\gdef\LONGPHOTON{6} \gdef\FLIPPEDLONG{7}
+\global\newcount\SQUASHEDGLUON \global\SQUASHEDGLUON=8
+\gdef\SQUASHED{\SQUASHEDGLUON}
+%\global\newcount\FLIPPEDSQUASHEDGLUON \FLIPPEDSQUASHEDGLUON=9
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% SOME COUNTERS AND DEFINITIONS FOR POSITIONS AND LENGTHS OF LINES & FEATURES %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\adjx \adjx=0
+\newcount\adjy \adjy=0
+\global\newdimen\BIGPHOTONS \BIGPHOTONS=0pt % DEFAULT: 10 & 11-PT PHOTONS
+\gdef\bigphotons{\global\BIGPHOTONS=12pt}%FOR 12-PT DOCS DRAWING E-W PHOTONS.
+\global\newdimen\THICKPHOTONS \THICKPHOTONS=0pt % FOR E-W PHOTONS
+\global\newdimen\THICKPHOTONSWITCH \THICKPHOTONSWITCH=0pt
+\gdef\THICKPHOTONTEST{
+\THICKPHOTONSWITCH=0pt
+\ifdim\THICKPHOTONS=0pt \relax
+ \else \ifnum\LTYPE=3
+ \ifnum\LDIR=2 \THICKPHOTONSWITCH=1pt \fi % THICK \E PHOTON
+ \ifnum\LDIR=6 \THICKPHOTONSWITCH=1pt \fi % THICK \W PHOTON
+ \fi
+\fi
+} % end of THICKPHOTONTEST
+\gdef\THICKLINES{\thicklines \THICKPHOTONS=1pt}
+\gdef\THINLINES{\thinlines \THICKPHOTONS=0pt}
+\global\newcount\phantomswitch \global\phantomswitch=0
+\global\newcount\stemlength \global\stemlength=275 % Default STEM length.
+\global\newcount\absstemlength % A copy of STEM length.
+\global\newcount\stemlengthx % FOR STEMS on particle lines
+\global\newcount\stemlengthy % FOR STEMS on particle lines
+\newdimen\FRONTSTEM \FRONTSTEM=0pt % FOR STEMS
+\newdimen\BACKSTEM \BACKSTEM=0pt % FOR STEMS
+\newdimen\EITHERSTEM \EITHERSTEM=0pt % FOR STEMS
+\gdef\frontstemmed{\FRONTSTEM=1pt} % FOR STEMS
+\gdef\backstemmed{\BACKSTEM=1pt} % FOR STEMS
+\gdef\stemmed{\FRONTSTEM=1pt \BACKSTEM=1pt} % FOR STEMS
+\global\newcount\arrowlength % FOR ARROWS
+\global\newdimen\ATTIP \global\ATTIP=0pt % FOR ARROWS
+\global\newdimen\ATBASE \global\ATBASE=1pt % FOR ARROWS
+\global\newcount\unitboxnumber % SHOWS THE NUMBER OF `UNIT BOXES' IN LINE
+\global\newcount\unitboxnumberpo % One more than \unitboxnumber (in GLUONSETUP)
+\global\newcount\particlelengthx % THE X-LENGTH OF THE PARTICLE LINE
+\gdef\plengthx{\particlelengthx}
+\global\newcount\particlelengthy % THE Y-LENGTH OF THE PARTICLE LINE
+\gdef\plengthy{\particlelengthy}
+\global\newcount\boxlengthx % THE X-LENGTH OF THE BOX: abs(plengthx) usually
+\global\newcount\boxlengthy % THE y-LENGTH OF THE box: abs(plengthy) usually
+\global\newcount\particleadjustx % Replaces \gluonadjustx, \scalaradjustx etc.
+\global\newcount\particleadjusty % Replaces \gluonadjusty, \scalaradjusty etc.
+\global\newcount\particlelength % The LENGTH of a particle line BOX (x)
+\global\newcount\particlefrontx
+\gdef\pfrontx{\particlefrontx}
+\global\newcount\PFRONTx
+\global\newcount\particlefronty
+\gdef\pfronty{\particlefronty}
+\global\newcount\PFRONTy
+\global\newcount\particlebackx
+\gdef\pbackx{\particlebackx}
+\global\newcount\particlebacky
+\gdef\pbacky{\particlebacky}
+\global\newcount\particlemidx
+\gdef\pmidx{\particlemidx}
+\global\newcount\particlemidy
+\gdef\pmidy{\particlemidy}
+% SOME SPECIAL DEFS FOR \SCALARs:
+\global\newcount\seglength \global\newcount\gaplength
+\global\gaplength=850 %default
+\global\seglength=1416 % Length of each seg not including `ends' for attachment
+% Now some storage locations for the user:
+\global\newcount\Xone \global\newcount\Yone % user co-ords (\Xone,\Yone)
+\global\newcount\Xtwo \global\newcount\Ytwo % user co-ords (\Xtwo,\Ytwo)
+\global\newcount\Xthree \global\newcount\Ythree % user's (\Xthree,\Ythree)
+\global\newcount\Xfour \global\newcount\Yfour % user co-ords (\Xfour,\Yfour)
+\global\newcount\Xfive \global\newcount\Yfive % user co-ords (\Xfive,\Yfive)
+\global\newcount\Xsix \global\newcount\Ysix % user co-ords (\Xsix,\Ysix)
+\global\newcount\Xseven \global\newcount\Yseven % user's (\Xseven,\Yseven)
+\global\newcount\Xeight \global\newcount\Yeight % user's (\Xeight,\Yeight)
+%
+% SOME COUNTERS IDENTIFYING VARIOUS LINE PORTIONS AND DIMENSIONS:
+%
+\newsavebox{\lastline} % Default name for an unnamed particle line.
+\global\newcount\numlineparts % Num of pieces each unitbox of the line needs
+\global\newcount\upperlineadjx \upperlineadjx=0 %Default
+\global\newcount\upperlineadjy \upperlineadjy=0 %Default
+\global\newcount\lowerlineadjx \lowerlineadjx=0 %Default
+\global\newcount\lowerlineadjy \lowerlineadjy=0 %Default
+\global\newcount\thirdlineadjx \thirdlineadjx=0 %Default
+\global\newcount\thirdlineadjy \thirdlineadjy=0 %Default
+\global\newcount\fourthlineadjx \fourthlineadjx=0 %Default
+\global\newcount\fourthlineadjy \fourthlineadjy=0 %Default
+\global\newcount\unitboxwidth \unitboxwidth=1000%Default
+\global\newcount\unitboxheight \unitboxheight=0 %Default
+\global\newcount\numupperunits \numupperunits=8 %Default
+\global\newcount\numlowerunits \numlowerunits=8 %Default
+\global\newcount\numthirdunits \numthirdunits=8 %Default
+\global\newcount\numfourthunits \numfourthunits=8 %Default
+% Some counters. =0 until a line-type is drawn. Then=1.
+\global\newcount\fermioncount \global\fermioncount=0
+\global\newcount\scalarcount \global\scalarcount=0
+\global\newcount\photoncount \global\photoncount=0
+\global\newcount\gluoncount \global\gluoncount=0
+\global\newcount\especialcount \global\especialcount=0
+\global\newcount\vertexcount \global\vertexcount=-1
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% AUXILIARY ROUTINES FOR SETTING PARTICLE DIRECTIONS %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\global\newcount\XDIR
+\global\newcount\YDIR
+\gdef\SETDIR{ % SETS THE DIRECTIONS
+\ifcase\LDIR
+ \global\XDIR=0 \global\YDIR=1 %\N case.
+\or \global\XDIR=1 \global\YDIR=1 %\NE case.
+\or \global\XDIR=1 \global\YDIR=0 %\E case.
+\or \global\XDIR=1 \global\YDIR=-1 %\SE case.
+\or \global\XDIR=0 \global\YDIR=-1 %\S case.
+\or \global\XDIR=-1 \global\YDIR=-1 %\SW case.
+\or \global\XDIR=-1 \global\YDIR=0 %\W case.
+\or \global\XDIR=-1 \global\YDIR=1 %\NW case.
+\else\DIRECTERROR
+\fi} % END OF \SETDIR
+%
+\gdef\moduloeight#1{
+\ifnum#1>7 \global\advance #1 by -8
+\relax
+\moduloeight#1
+\relax
+\else \relax
+\fi}
+\gdef\multroothalf#1{\global\multiply #1 by 7071 \global\divide #1 by 10000}
+\gdef\negate#1{\global\multiply #1 by -1}
+\gdef\double#1{\global\multiply #1 by 2}
+\gdef\slanttest(#1,#2){
+\ifodd\LDIR
+\multiply #1 by 7071 \divide #1 by 10000
+\multiply #2 by 7071 \divide #2 by 10000
+\fi
+}
+\gdef\gslanttest(#1,#2){
+\ifodd\LDIR
+\multroothalf#1
+\multroothalf#2
+\fi
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% AUXILIARY ROUTINES FOR SETTING PARTICLE LENGTHS & POSTIONS %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\gdef\setplength{ % calcs length of particle line
+\global\particlelengthx=\unitboxwidth
+\global\particlelengthy=\unitboxheight
+\global\multiply \particlelengthx by \unitboxnumber
+\global\multiply \particlelengthy by \unitboxnumber
+\global\advance \particlelengthx by \particleadjustx
+\global\advance \particlelengthy by \particleadjusty
+}
+\gdef\boxlengthdefault{ % DEFAULT FOR BOX SIZES IN \drawas
+\global\boxlengthx=\plengthx
+\global\boxlengthy=\plengthy
+\ifnum\plengthx<0 \global\multiply\boxlengthx by -1 \fi
+\ifnum\plengthy<0 \global\multiply\boxlengthy by -1 \fi
+}
+\gdef\rearcoords{ % CALCULATES THE CO-ORDINATES OF THE BACK OF PARTICLE LINE
+\global\particlebacky=\particlefronty
+\global\particlebackx=\particlefrontx
+\global\advance \particlebackx by \particlelengthx
+\global\advance \particlebacky by \particlelengthy
+}
+\gdef\midcoords{ % CALCULATES THE CO-ORDINATES OF THE MID OF PARTICLE LINE
+\global\particlemidy=\particlefronty
+\global\particlemidx=\particlefrontx
+\global\stemlengthx=\particlelengthx % Convenient variables not being used
+\global\stemlengthy=\particlelengthy
+\global\divide\stemlengthx by 2
+\global\divide\stemlengthy by 2
+\global\advance \particlemidx by \stemlengthx
+\global\advance \particlemidy by \stemlengthy
+}
+\gdef\setparticle{\setplength\rearcoords\midcoords\boxlengthdefault} %sets line
+%
+\gdef\setcoords(#1,#2,#3)(#4,#5,#6)[#7,#8]{
+% Sets co-ords of first 3 line-parts of a line and the unitbox height and width
+% Used by photons and gluons.
+\global\upperlineadjx=#1
+\global\lowerlineadjx=#2
+\global\thirdlineadjx=#3
+\global\upperlineadjy=#4
+\global\lowerlineadjy=#5
+\global\thirdlineadjy=#6
+\global\unitboxwidth=#7
+\global\unitboxheight=#8
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% ROUTINES FOR DRAWING LINES %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ************** ROUTINE FOR DRAWING STORED LINES AND PICTURES *************
+%
+\gdef\drawoldpic#1(#2,#3){ % DRAWS PRE-SAVED PICTURE
+\global\particlefrontx=#2
+\global\particlefronty=#3
+\rearcoords
+\midcoords
+\put(#2,#3){\usebox{#1}}
+}
+%
+\gdef\drawsavedline`#1' as #2[#3#4](#5,#6)[#7]{
+\global\LINETYPE=#2
+\global\LINEDIRECTION=#3
+\global\LINECONFIGURATION=#4
+\global\particlefrontx=#5
+\global\particlefronty=#6
+\global\unitboxnumber=#7
+% Formerly called \numhalfwiggles,\numdashes, \numloops, \fermionlength
+% #1 is saved linename; #2 is \LINETYPE; #3 is \LINEDIRECTION
+% #4 is \LINECONFIGURATION (#5,#6)=(x,y) co-ords; #7 is linelength (eg#wiggles)
+\selectcase
+\rearcoords% moved from before selectcase.
+\midcoords
+\ifnum\phantomswitch=0 \drawas{#1}\fi
+% if \phantomswitch=1 then just set the line up and don't draw it.
+}
+
+\gdef\startphantom{\phantomswitch=1} % BEGIN PHANTOM MODE.
+\gdef\stopphantom{\phantomswitch=0} % END PHANTOM MODE.
+% USE AS:
+% \startphantom...\drawline\gluon[...]...\drawvertex\photon...\stopphantom
+
+\gdef\drawas#1{
+\global\savebox{#1}(\boxlengthx,\boxlengthy){
+\setlength{\unitlength}{0.01pt}
+\begin{picture}(\boxlengthx,\boxlengthy)
+\multiput(\upperlineadjx,\upperlineadjy)(\unitboxwidth,\unitboxheight)
+{\numupperunits}{\upperunitbox}
+\ifnum\numlineparts > 1 % If the line needs 2 parts per unit or more
+\multiput(\lowerlineadjx,\lowerlineadjy)(\unitboxwidth,\unitboxheight)
+{\numlowerunits}{\lowerunitbox}
+\fi
+\ifnum\numlineparts > 2 % If the line needs 3 parts per unit or more
+\multiput(\thirdlineadjx,\thirdlineadjy)(\unitboxwidth,\unitboxheight)
+{\numthirdunits}{\thirdunitbox}
+\fi
+\ifnum\numlineparts > 3 % If the line needs 4 parts per unit or more
+\multiput(\fourthlineadjx,\fourthlineadjy)(\unitboxwidth,\unitboxheight)
+{\numfourthunits}{\lowerunitbox}
+\fi
+\end{picture} }
+% CHECK STEMS
+\global\PFRONTx=\pfrontx \global\PFRONTy=\pfronty %save this value
+\SETFRONTSTEM
+% Now take into account the possibility of THICK E-W photons (drawn twice)
+\THICKPHOTONTEST
+\ifdim\THICKPHOTONSWITCH=1pt\global\advance\PFRONTy by 20 \fi
+\put(\PFRONTx,\PFRONTy) {\usebox{#1}} %\pfrontX,Y=\particlefrontx,y
+%\put(\particlefrontx,\particlefronty) {\usebox{#1}}
+\ifdim\THICKPHOTONSWITCH=1pt
+\global\advance\PFRONTy by -40
+\put(\PFRONTx,\PFRONTy) {\usebox{#1}} % The second \E or \W photon ->thicker
+\global\advance \PFRONTy by 20 %re-adjust: advanced by -20 in total above.
+\fi %End of \ifdim\THICKPHOTONSWITCH=1
+\SETBACKSTEM
+\seglength=1416 \gaplength=850 % Re-set \SCALR defaults.
+}
+%
+% ********* ROUTINES FOR STORING LINES *******
+%
+
+\gdef\drawandsaveline`#1' as #2[#3#4](#5,#6)[#7]{
+% #1 is saved linename; #2 is \LINETYPE; #3 is \LINEDIRECTION
+% #4 is \LINECONFIGURATION (#5,#6)=(x,y) co-ords; #7 is linelength (eg#wiggles)
+\global\newsavebox{#1}
+\drawsavedline`#1' as #2[#3#4](#5,#6)[#7]
+}
+
+\gdef\drawline#1[#2#3](#4,#5)[#6]{ % Draw line but don't name it.
+\drawsavedline`\lastline' as #1[#2#3](#4,#5)[#6]}
+
+\gdef\saveas#1{ % For saving a line after the fact.
+\global\newsavebox#1
+\drawas#1}
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% C A S E S %
+% --------- %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ERROR MESSAGES FOR INCORRECT CASE SPECIFICATION:
+\gdef\TYPEERROR{\message{*** ERROR IN PARTICLE TYPE SELECTION ***}
+\message{+++ Try with line type \fermion,\scalar,\photon,\gluon
+(see manual) +++}\SETERR}
+\gdef\DIRECTERROR{\SETERR\message{*** ERROR IN PARTICLE DIRECTION SELECTION ***}
+\message{+++ Try again with direction N, NE, E, SE etc. or see manual +++}}
+\gdef\UNIMPERROR{\message{*** ERROR IN PARTICLE OPTIONS SELECTION ***}
+\message{
++++ The requested options combination has not yet been implemented +++}\SETERR}
+\gdef\SETERR{\gdef\upperunitbox{{\tiny Error}} % PRINTS `error' in diagram.
+\gdef\lowerunitbox{\relax}
+\gdef\thirdunitbox{\relax}
+}
+\gdef\neglengthcheck{\ifnum\unitboxnumber < 1
+\message{ *** ERROR: PARTICLE OF NEGATIVE OR ZERO LENGTH REQUESTED. *** }
+\message{ *** TAKING ABSOLUTE VALUE. *** }\negate\unitboxnumber \fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\selectcase{
+\neglengthcheck % check for particles of negative length.
+% select PARTICLE alignment:
+\SETDIR
+% Select particle type
+\ifcase\LINETYPE
+\TYPEERROR % \LINETYPE=0 case.
+\or \selectfermion % \LINETYPE=1 case.
+\or \selectscalar % \LINETYPE=2 case.
+\or \selectphoton % \LINETYPE=3 case.
+\or \selectgluon % \LINETYPE=4 case.
+\or \selectespecial % \LINETYPE=5 case.
+\else \TYPEERROR \fi }
+%%%%%%%%%%% (1) FERMIONS %%%%%%%%%%%
+\gdef\selectfermion{
+% Input fermion-setup stuff ONLY IF HAVE NOT DONE SO YET.
+% This avoids having to process a fermion if none are drawn.
+\ifnum\fermioncount=0 \input fermionsetup \fi
+% CONTAINS fermion DEFINITIONS.
+\global\advance\fermioncount by 1 % Counts number of fermions drawn.
+\ALLfermion
+}
+%%%%%%%%%%% (2) SCALARS %%%%%%%%%%%
+\gdef\selectscalar{
+% Input scalar-setup stuff ONLY IF HAVE NOT DONE SO YET.
+% This avoids having to process a scalar if none are drawn.
+\ifnum\scalarcount=0 \input scalarsetup \fi
+% CONTAINS scalar DEFINITIONS.
+\global\advance\scalarcount by 1 % Counts number of scalars drawn.
+\ALLscalar
+}
+%%%%%%%%%%% (3) PHOTONS %%%%%%%%%%%
+\gdef\selectphoton{ % RECURSIVELY RE-DEFINED IN PHOTONSETUP(23+).TEX.
+% Input photon-setup stuff ONLY IF HAVE NOT DONE SO YET.
+% This avoids having to process a photon if none are drawn.
+\ifnum\photoncount=0 \input photonsetup \fi
+\selectphoton
+%CONTAINS PHOTON DEFINITIONS.
+}
+%%%%%%%%%%% (4) GLUONS %%%%%%%%%%%
+\gdef\selectgluon{ % RECURSIVELY RE-DEFINED IN GLUONSETUP(25+).TEX.
+% Input gluon-setup stuff ONLY IF HAVE NOT DONE SO YET.
+% This avoids having to process a gluon if none are drawn.
+\ifnum\gluoncount=0 \input gluonsetup \fi
+\selectgluon
+% CONTAINS gluon DEFINITIONS.
+}
+%%%%%%%%%%% (5) SPECIAL - USER DEFINED %%%%%%%%%%%
+\gdef\selectespecial{\UNIMPERROR}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% ROUTINES FOR DRAWING VERTICES %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Input vertex-setup stuff ONLY IF HAVE NOT DONE SO YET. %
+% This avoids having to process a vertex if none are drawn.
+\gdef\checkvertex{ %immediately re-defines \drawvertex,\vertexcap,\linkvertex...
+\ifnum\vertexcount=-1 \input vertex \fi}
+% RECURSIVE DEFINITIONS:
+\gdef\drawvertex#1[#2#3](#4,#5)[#6]{\checkvertex\drawvertex#1[#2#3](#4,#5)[#6]}
+\gdef\vertexcap#1{\checkvertex\vertexcap#1}
+\gdef\vertexcaps{\checkvertex\vertexcaps}
+\gdef\vertexlink#1{\checkvertex\vertexlink#1}
+\gdef\vertexlinks{\checkvertex\vertexlinks}
+\gdef\stemvertex#1{\checkvertex\stemvertex#1}
+\gdef\stemvertices{\checkvertex\stemvertices}
+\gdef\flipvertex{\checkvertex\flipvertex}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% ROUTINES FOR DRAWING ARROWS %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SYNTAX: \drawarrow[\NW\ATBASE](\pmidx,\pmidy) etc.
+\global\arrowlength=349 % Length of arrow
+\gdef\drawarrow[#1#2](#3,#4){
+\global\LDIR=#1
+\SETDIR
+\global\boxlengthx=#3 % Just a convenient variable name. No significance.
+\global\boxlengthy=#4 % The Arrow co-ordinates.
+\ifdim#2=1pt % CASE \ATBASE WHERE THE CO-ORDS ARE AT THE ARROWS BASE.
+ % #2 IS either \ATTIP or \ATBASE...Depending where it is to be positioned.
+\adjx=\arrowlength \adjy=\arrowlength
+\multiply\adjx by \XDIR \multiply\adjy by \YDIR % Set in \SETDIR
+\slanttest(\adjx,\adjy)
+\global\advance\boxlengthx by \adjx \global\advance\boxlengthy by \adjy
+\fi
+\ifnum\phantomswitch=0\put(\boxlengthx,\boxlengthy){\vector(\XDIR,\YDIR){0}}\fi
+} % END OF \drawarrow.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% ROUTINES FOR DRAWING STEMS %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\gdef\SETFRONTSTEM{
+\EITHERSTEM=\FRONTSTEM \advance\EITHERSTEM by \BACKSTEM
+\ifdim\EITHERSTEM>0pt
+\global\stemlengthx=\stemlength \global\stemlengthy=\stemlength
+\global\absstemlength=\stemlength
+\SETDIR
+\gslanttest(\stemlengthx,\stemlengthy)
+\gslanttest(\absstemlength,\REG) % the \REG is to use up the parameter space.
+\ifnum\XDIR=0 \stemlengthx=0 \fi
+\ifnum\YDIR=0 \stemlengthy=0 \fi
+\global\multiply\stemlengthx by \XDIR
+\global\multiply\stemlengthy by \YDIR
+\ifdim\FRONTSTEM=1pt
+\ifnum\phantomswitch=0
+ \put(\pfrontx,\pfronty){\line(\XDIR,\YDIR){\absstemlength}}\fi
+\global\advance\plengthx by \stemlengthx
+\global\advance\plengthy by \stemlengthy
+\global\advance\PFRONTx by \stemlengthx
+\global\advance\PFRONTy by \stemlengthy
+\global\advance\pmidx by \stemlengthx
+\global\advance\pmidy by \stemlengthy
+\global\advance\pbackx by \stemlengthx
+\global\advance\pbacky by \stemlengthy
+% FOR STEMMED PHOTONS AND GLUONS, \photonfront,back(x,y) are for the
+% photon proper (no stem) while \pbackx,y include the stems.
+\ifnum\LTYPE=3
+\global\photonfrontx=\PFRONTx \global\photonfronty=\PFRONTy
+\global\photonbackx=\pbackx \global\photonbacky=\pbacky
+\fi % END LTYPE
+\ifnum\LTYPE=4
+\global\gluonfrontx=\PFRONTx \global\gluonfronty=\PFRONTy
+\global\gluonbackx=\pbackx \global\gluonbacky=\pbacky
+\fi % END LTYPE
+\fi % END FRONTSTEM
+\fi % END EITHERSTEM
+} % end of \SETFRONTSTEM
+%
+\gdef\SETBACKSTEM{
+\ifdim\BACKSTEM=1pt
+\ifnum\phantomswitch=0
+ \put(\pbackx,\pbacky){\line(\XDIR,\YDIR){\absstemlength}}\fi
+\global\advance\plengthx by \stemlengthx
+\global\advance\plengthy by \stemlengthy
+\global\advance\pbackx by \stemlengthx
+\global\advance\pbacky by \stemlengthy
+\fi % END BACKSTEM
+\global\stemlength=275 \FRONTSTEM=0pt \BACKSTEM=0pt % Reset default switches.
+} % END OF \SETBACKSTEM
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% LOOPS %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\drawloop#1[#2#3](#4,#5){ %RECURSIVE.
+\input loops % contains loops definitions
+\drawloop#1[#2#3](#4,#5)}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\Feynmanlength % Set length scale to centipoints.
diff --git a/macros/latex209/contrib/feynman/gluonlinks.tex b/macros/latex209/contrib/feynman/gluonlinks.tex
new file mode 100644
index 0000000000..c6c1a12388
--- /dev/null
+++ b/macros/latex209/contrib/feynman/gluonlinks.tex
@@ -0,0 +1,144 @@
+% GLUONLINKS.TEX (FEB. 5, 1989)
+% CALLED BY FEYNMAN(34).TEX.
+%
+% Routines for drawing GLUON LINKS and GLUON CAPS used by FEYNMAN.TEX.
+% Formerly in separate files (GLUONLINKS & GLUONCAPS).
+% This file is read in when \gluonlink, \gluoncap, defined in GLUONSETUP(21+),
+% and related commands (in \drawvetex) are used.
+%
+% GLUON LINKS are used to link \CENTRAL-type gluon lines together
+% (eg: \REG & \FLIPPED gluons drawn diagonally).
+% Syntax: \drawline\gluon[\W\CENTRAL](x,y)[number of loops]\gluonlink
+% \drawline\gluon[\W\CENTRAL](\pbackx,\pbacky)[number of loops]
+%
+% GLUON CAPS are used on vertical and horizontal gluons to make the
+% terminus of the gluon line end along the gluon axis. It then draws
+% a stem of length \stemlength (as though the command \BACKSTEMMED had
+% been issued). Principal use is when \drawvertex is used.
+% Syntax: \drawline\gluon[\W\FLAT](x,y)[number of loops]\gluoncap
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% GLUON LINKS %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ROUTINE FOR LINKING \CENTRAL AND \FLIPPEDCENTRAL GLUONS
+%
+\gdef\gluonlink{
+\global\stemlengthx=401 \SETDIR \setadjxy \divide\adjx by -2 \divide\adjy by -2
+\ifcase\LDIR
+ \linksetupB \ifodd\LCONFIG\LINKPUT[l] \else\LINKPUT[r] \fi %\Ngluon
+\or \ifodd\LCONFIG \linksetupBx \LINKPUT[tr]\LINKPUT[l] %\NEgluon
+ \else \linksetupBy \LINKPUT[tr]\LINKPUT[b] \fi
+\or \linksetupB \ifodd\LCONFIG\LINKPUT[t] \else\LINKPUT[b] \fi %\Egluon
+\or \ifodd\LCONFIG \linksetupBy \LINKPUT[br]\LINKPUT[t] %\SEgluon
+ \else \linksetupBx \LINKPUT[br]\LINKPUT[l] \fi
+\or \linksetupB \ifodd\LCONFIG\LINKPUT[r] \else\LINKPUT[l] \fi %\Sgluon
+\or \ifodd\LCONFIG \linksetupBx \LINKPUT[bl]\LINKPUT[r] %\SWgluon
+ \else \linksetupBy \LINKPUT[bl]\LINKPUT[t] \fi
+\or \linksetupB \ifodd\LCONFIG\LINKPUT[b] \else\LINKPUT[t] \fi %\Wgluon
+\or \ifodd\LCONFIG \linksetupBy \LINKPUT[tl]\LINKPUT[b] %\NWgluon
+ \else \linksetupBx \LINKPUT[tl]\LINKPUT[r] \fi
+\else \UNIMPERROR
+\fi
+\ifodd\LDIR\relax
+\else \global\advance\pbackx by \adjx \global\advance\pbacky by \adjy \fi
+\linksetupC
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% GLUONCAPS %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ROUTINE FOR CENTRALIZING/CAPPING GLUONS
+%
+\gdef\gluoncap{ % For centralizing gluons
+\global\stemlengthx=0
+\ifodd\LDIR\message{NOTE: Diagonal Gluons are not Capped}\relax
+\else
+\ifcase\LCONFIG \global\stemlengthx=1000 %\REG case for NSEW
+\or \global\stemlengthx=1000 %\FLIPPED case (NSEW)
+\or \global\stemlengthx=825 %\CURLY case (NSEW)
+\or \global\stemlengthx=825 %\FLIPPEDCURLY case (NSEW)
+\or \global\stemlengthx=1030 %\FLAT case (NSEW)
+\or \global\stemlengthx=1030 %\FLIPPEDFLAT case (NSEW)
+\or \global\stemlengthx=0 %\CENTRAL case (NSEW)
+\or \global\stemlengthx=0 %\FLIPPEDCENTRAL case (NSEW)
+\or \global\stemlengthx=800 %\SQUASHED case (NSEW)
+\else\UNIMPERROR
+\fi % end \ifcase\LCONFIG
+\ifnum\stemlengthx>400
+\global\advance\LDIR by 2 \moduloeight\LDIR \SETDIR
+\global\advance\LDIR by 6 \moduloeight\LDIR \setadjxy
+\ifodd\LCONFIG \multiply \adjx by -1 \multiply \adjy by -1 \fi
+\divide\adjx by 2 \divide\adjy by 2 \linksetupB
+\ifcase\LDIR
+ \ifodd\LCONFIG\LINKPUT[tr] \else\LINKPUT[tl] \fi %\NGLUON
+\or \relax % \NEGLUON
+\or \ifodd\LCONFIG\LINKPUT[br] \else\LINKPUT[tr] \fi %\Egluon
+\or \relax % \SEgluon
+\or \ifodd\LCONFIG\LINKPUT[bl] \else\LINKPUT[br] \fi %\Sgluon
+\or \relax % \SWgluon
+\or \ifodd\LCONFIG\LINKPUT[tl] \else\LINKPUT[bl] \fi %\Wgluon
+\or \relax % \NWgluon
+\else \UNIMPERROR
+\fi
+\linksetupD
+\else\message{* NOTE: Attempt to use gluoncap of less that 401 centipoints *}
+\fi % End of \ifnum\stemlengthx
+\fi % end \ifodd
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% AUXILIARY ROUTINES USED BY BOTH \gluonlink and \gluoncap %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\gdef\setadjxy{
+\adjx=\stemlengthx \adjy=\stemlengthx % Yes, it's `x', not `y'.
+\multiply \adjx by \XDIR%
+\multiply \adjy by \YDIR%
+}
+\gdef\advancegluonlength{
+\global\advance\particlelengthx by \adjx \global\advance\particlelengthy by\adjy
+\global\advance\gluonlengthx by \adjx \global\advance\gluonlengthy by \adjy
+% The new adjusted gluon lengths.
+}
+\gdef\LINKPUT[#1]{\ifnum\phantomswitch=0\put(\gluonbackx,\gluonbacky)
+{\oval(\stemlengthx,\stemlengthx)[#1]}\fi}
+\gdef\linksetupBx{\global\advance\gluonbackx by \adjx}
+\gdef\linksetupBy{\global\advance\gluonbacky by \adjy}
+\gdef\linksetupB{\linksetupBx\linksetupBy}
+\gdef\linksetupC{
+\global\advance\pbackx by \adjx \global\advance\pbacky by \adjy
+\global\gluonbackx=\pbackx \global\gluonbacky=\pbacky
+% Take negative particle lengths into account. \BOXLENGTHX,Y remain as before.
+\ifnum\plengthx<0 \multiply\adjx by -1 \fi
+\ifnum\plengthy<0 \multiply\adjy by -1 \fi
+\advancegluonlength
+}
+\gdef\linksetupD{
+\linksetupC
+\SETDIR
+\setadjxy
+\divide\adjx by 2 \divide\adjy by 2 \linksetupB
+\global\pbackx=\gluonbackx \global\pbacky=\gluonbacky
+\advancegluonlength
+\ifnum\phantomswitch=0\put(\pbackx,\pbacky){\line(\XDIR,\YDIR){\stemlength}}\fi
+\stemlengthx=\stemlength %TESTING
+\setadjxy
+\global\advance\pbackx by \adjx \global\advance\pbacky by \adjy
+\global\gluonbackx=\pbackx \global\gluonbacky=\pbacky
+\advancegluonlength
+% The new adjusted gluon lengths and rear positions
+}
diff --git a/macros/latex209/contrib/feynman/gluonsetup.tex b/macros/latex209/contrib/feynman/gluonsetup.tex
new file mode 100644
index 0000000000..ab36a4f766
--- /dev/null
+++ b/macros/latex209/contrib/feynman/gluonsetup.tex
@@ -0,0 +1,287 @@
+% GLUONSETUP(31).TEX
+% CALLED BY FEYNMAN(34).
+% USED FOR GENERATING GLUON LINES IN FEYNMAN DIAGRAMS IN LATEX.
+\global\newcount\gluonlength
+\global\newcount\gluonlengthx
+\global\newcount\gluonlengthy
+\global\newcount\gluonfrontx %}(x,y) co-ord of left of gluon
+\global\newcount\gluonfronty %}
+\global\newcount\gluonbackx
+\global\newcount\gluonbacky
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\setunitbox(#1)[#2][#3](#4)[#5]{
+\gdef\upperunitbox{\oval(#1,#1)[#2]}
+\gdef\lowerunitbox{\oval(401,401)[#3]}
+\gdef\thirdunitbox{\oval(#4,#4)[#5]}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\selectgluon{ % ORIGINALLY DEFINED IN FEYNMAN(29+). RECURSIVELY RE-DEFINE
+\global\advance\gluoncount by 1 % Counts number of gluons drawn.
+\global\gluonfrontx=\particlefrontx % READ IN FROM FEYNMAN \selectgluon
+\global\gluonfronty=\particlefronty % READ IN FROM FEYNMAN \selectgluon
+\global\particleadjustx=0 \global\particleadjusty=0
+% Error messages for overly-long lines. See FEYNMAN for negative-lengths.
+\ifnum\unitboxnumber > 40
+\message{ *** WARNING *** Gluon with
+\the\unitboxnumber\space loops requested *** }
+\ifnum\unitboxnumber > 85
+\message{ *** Reducing gluon length to 6 loops (max 85) *** }
+\ifnum\unitboxnumber > 1000
+\message{ *** Probable Cause: Gluon selected instead of Fermion *** }
+\fi \global\unitboxnumber=6 \fi \fi % end of length error
+\global\unitboxnumberpo=\unitboxnumber % DEFINED IN \drawsavedline (FEYNMAN).
+\global\advance\unitboxnumberpo by 1 %\unitboxnumber if \unitboxnumber is odd.
+% DEFAULTS:
+\global\numlineparts = 3
+\global\numupperunits=\unitboxnumber
+\global\numlowerunits=\unitboxnumber
+\global\numthirdunits=\unitboxnumber
+% select gluon alignment:
+\ifcase\LINEDIRECTION
+\Ngluon %\LINEDIRECTION=0 (NORTH) CASE
+\or \NEgluon % 1 case
+\or \Egluon % 2 case...horizontal gluon.
+\or \SEgluon
+\or \Sgluon
+\or \SWgluon
+\or \Wgluon
+\or \NWgluon
+\else\DIRECTERROR \fi
+\setparticle
+\global\gluonlengthx=\particlelengthx \global\gluonlengthy=\particlelengthy
+\global\gluonbackx=\particlebackx \global\gluonbacky=\particlebacky
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\Ngluon{ % VERTICAL gluons
+\ifcase\LINECONFIGURATION % \REG GLUON CONFIGURATION
+\setcoords(600,540,600)(20,620,1220)[0,1050]
+\setunitbox(1600)[tl][r](1600)[bl]
+\particleadjusty=195
+\or % \FLIPPED
+\setcoords(-990,-930,-990)(12,615,1215)[0,1050]
+\setunitbox(1600)[tr][l](1600)[br]
+\particleadjusty=195
+\or % \CURLYGLUON
+\setcoords(440,390,440)(-10,415,840)[0,850]
+\setunitbox(1250)[tl][r](1250)[bl]
+\particleadjustx=0
+\particleadjusty=-10
+\or % \FLIPPED case
+\setcoords(-820,-770,-820)(-25,400,825)[0,850] % Matches change in \S\CURLY
+\particleadjusty=-10 % goes with \CURLY \particleadjusty=-10
+\setunitbox(1250)[tr][l](1250)[br]
+\or \UNIMPERROR % \LCONFIG=4 is \FLAT case
+\or \UNIMPERROR % \LCONFIG=5 is \FLIPPEDFLAT case
+\or % \LCONFIG=6 is \CENTRALGLUON case
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumberpo
+\setcoords(-200,-200,-200)(616,1041,616)[0,850]
+\setunitbox(1250)[tl][r](1250)[bl]
+\particleadjusty=1238
+\particleadjusty=1233
+\or % \FLIPPEDCENTRAL
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumberpo
+\setcoords(-200,-200,-200)(620,1045,620)[0,850]
+\setunitbox(1250)[tr][l](1250)[br]
+\particleadjusty=1245
+\else \UNIMPERROR % etc.
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\NEgluon{
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumber
+\ifcase\LINECONFIGURATION
+\setcoords(900,900,900)(0,900,900)[900,900]
+\setunitbox(2200)[tl][tr](401)[b]
+\particleadjustx=1100 \particleadjusty=1100
+\or % \FLIPPED case
+\setcoords(-180,720,720)(1090,1091,1091)[900,900]
+\setunitbox(2200)[br][tr](401)[l]
+\particleadjustx=1110 \particleadjusty=1050
+\else \UNIMPERROR % etc.
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\Egluon{ % EASTWARD HORIZONTAL gluons
+\ifcase\LINECONFIGURATION
+\setcoords(-210,390,990)(-800,-745,-800)[1050,0] % draws from outer line edge
+\setunitbox(1600)[tr][b](1600)[tl]
+\particleadjustx=130 % draws from outer line edge
+\or % \FLIPPED
+\setcoords(-210,390,990)(800,745,800)[1050,0] % draws from outer line edge
+\setunitbox(1600)[br][t](1600)[bl]
+\particleadjustx=130
+\or % \CURLYGLUON
+\setcoords(-200,225,650)(-625,-575,-625)[850,0]
+\setunitbox(1250)[tr][b](1250)[tl]
+\or % \FLIPPED case
+\setcoords(-200,225,650)(625,575,625)[850,0]
+\setunitbox(1250)[br][t](1250)[bl]
+\or % \LCONFIG=4 is \FLAT case
+\setcoords(-200,430,1060)(-830,-780,-830)[1260,0]
+\setunitbox(1660)[tr][b](1660)[tl]
+\or % \LCONFIG=5 is \FLIPPEDFLAT case
+\setcoords(-200,430,1060)(830,780,830)[1260,0]
+\setunitbox(1660)[br][t](1660)[bl]
+\or % \LCONFIG=6 is \CENTRALGLUON case
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumberpo
+\setcoords(440,865,440)(0,50,0)[850,0]
+\setunitbox(1250)[tr][b](1250)[tl]
+\particleadjustx=1260
+\or % \FLIPPEDCENTRALGLUON case
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumberpo
+\setcoords(430,855,430)(0,-50,0)[850,0]
+\setunitbox(1250)[br][t](1250)[bl]
+\particleadjustx=1250
+\or % \LCONFIG=8 is \SQUASHEDGLUON case
+\setcoords(-160,440,1040)(-600,-550,-600)[1200,0]
+\gdef\upperunitbox{\oval(1600,1200)[tr]}
+\gdef\thirdunitbox{\oval(1600,1200)[tl]}
+\gdef\lowerunitbox{\oval(401,401)[b]}
+\else \UNIMPERROR
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\SEgluon{
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumber
+\ifcase\LINECONFIGURATION
+\setcoords(-200,700,700)(-1100,-1100,-1100)[900,-900]
+\setunitbox(2200)[tr][br](401)[l]
+\particleadjustx=1100 \particleadjusty=-1100
+\or % \FLIPPED case
+\setcoords(890,890,890)(0,-900,-900)[900,-900]
+\setunitbox(2200)[bl][br](401)[t]
+\particleadjustx=1050 \particleadjusty=-1100
+\else \UNIMPERROR % etc.
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\Sgluon{ % VERTICAL gluons
+\ifcase\LINECONFIGURATION % \REG STYLE GLUON
+\setcoords(-1000,-940,-1000)(0,-595,-1195)[0,-1050]
+\setunitbox(1600)[br][l](1600)[tr]
+\particleadjusty=-150
+\or % \FLIPPED
+\setcoords(605,545,605)(-20,-615,-1215)[0,-1050]
+\setunitbox(1600)[bl][r](1600)[tl]
+\particleadjusty=-150
+\or % \CURLYGLUON
+\setcoords(-820,-770,-820)(0,-425,-850)[0,-850]
+\setunitbox(1250)[br][l](1250)[tr]
+\or % \FLIPPED case
+\setcoords(440,390,440)(0,-425,-850)[0,-850]
+\setunitbox(1250)[bl][r](1250)[tl]
+\or \UNIMPERROR % \LCONFIG=4 is \FLATGLUON case
+\or \UNIMPERROR
+\or % \LCONFIG=6 is \CENTRALGLUON case
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumberpo
+\setcoords(-180,-180,-180)(-635,-1060,-635)[0,-850]
+\setunitbox(1250)[br][l](1250)[tr]
+\particleadjusty=-1290
+\or % \FLIPPEDCENTRAL case
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumberpo
+\setcoords(-180,-180,-180)(-635,-1060,-635)[0,-850]
+\setunitbox(1250)[bl][r](1250)[tl]
+\particleadjusty=-1290
+\else \UNIMPERROR % etc.
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\SWgluon{
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumber
+\ifcase\LINECONFIGURATION
+\setcoords(-1300,-1300,-1300)(0,-900,-900)[-900,-900]
+\setunitbox(2200)[br][bl](401)[t]
+\particleadjustx=-1100 \particleadjusty=-1100
+\or % \FLIPPED case
+\setcoords(-215,-1115,-1115)(-1107,-1107,-1107)[-900,-900]
+\setunitbox(2200)[tl][bl](401)[r]
+\particleadjustx=-1120 \particleadjusty=-1120
+\else \UNIMPERROR % FLIPPED FLATGLUON etc.
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\Wgluon{ % HORIZONTAL gluons
+\ifcase\LINECONFIGURATION
+\setcoords(-190,-790,-1390)(800,745,800)[-1050,0]
+\setunitbox(1600)[bl][t](1600)[br]
+\particleadjustx=-150 %302
+\or % \UNIMPERROR % \FLIPPED
+\setcoords(-190,-790,-1390)(-800,-745,-800)[-1050,0]
+\setunitbox(1600)[tl][b](1600)[tr]
+\particleadjustx=-150 %302
+\or % \CURLYGLUON
+\setcoords(-200,-625,-1050)(625,575,625)[-850,0]
+\setunitbox(1250)[bl][t](1250)[br]
+\or % \FLIPPED case
+\setcoords(-200,-625,-1050)(-625,-575,-625)[-850,0]
+\setunitbox(1250)[tl][b](1250)[tr]
+\or % \LCONFIG=4 is \FLATGLUON case
+\setcoords(-230,-860,-1490)(830,780,830)[-1260,0]
+\setunitbox(1660)[bl][t](1660)[br]
+\or % \UNIMPERROR
+\setcoords(-230,-860,-1490)(-830,-780,-830)[-1260,0]
+\setunitbox(1660)[tl][b](1660)[tr]
+\or % \LCONFIG=6 is \CENTRALGLUON case
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumberpo
+\setcoords(-825,-1250,-825)(0,-50,0)[-850,0]
+\setunitbox(1250)[bl][t](1250)[br]
+\particleadjustx=-1250
+\or % \FLIPPEDCENTRALGLUON
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumberpo
+\setcoords(-825,-1250,-825)(0,50,0)[-850,0]
+\setunitbox(1250)[tl][b](1250)[tr]
+\particleadjustx=-1250
+\else \UNIMPERROR % FLIPPED FLATGLUON etc.
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\NWgluon{
+\numupperunits=\unitboxnumberpo
+\numlowerunits=\unitboxnumber
+\numthirdunits=\unitboxnumber
+\ifcase\LINECONFIGURATION
+\setcoords(-200,-1100,-1100)(1100,1100,1100)[-900,900]
+\setunitbox(2200)[bl][tl](401)[r]
+\particleadjustx=-1110 \particleadjusty=1100
+\or % \FLIPPED
+\setcoords(-1309,-1309,-1309)(-15,885,885)[-900,900]
+\setunitbox(2200)[tr][tl](401)[b]
+\particleadjustx=-1120 \particleadjusty=1065
+\else \UNIMPERROR % FLIPPED FLATGLUON etc.
+\fi
+}
+%
+% *** GLUON LINKS AND CAPS ***
+%
+%
+\gdef\gluonlink{ % A `RECURSIVE' DEFINITION.
+\input gluonlinks % \gluonlink is redefined here.
+\gluonlink} % THIS RE-DEFINES \gluonlink FOR ALL FUTURE USES.
+%
+%
+\gdef\gluoncap{ % A `RECURSIVE' DEFINITION.
+\input gluonlinks % \gluoncap is redefined here.
+\gluoncap} % THIS RE-DEFINES \gluoncap FOR ALL FUTURE USES.
diff --git a/macros/latex209/contrib/feynman/loops.tex b/macros/latex209/contrib/feynman/loops.tex
new file mode 100644
index 0000000000..f4ed116277
--- /dev/null
+++ b/macros/latex209/contrib/feynman/loops.tex
@@ -0,0 +1,58 @@
+% LOOPS(1).TEX
+% DRAWS LOOPS FOR FEYNMAN(32+).TEX: GLUON LOOPS ONLY
+\global\newcount\loopfrontx \global\newcount\loopfronty
+\global\newcount\loopbackx \global\newcount\loopbacky
+\global\newcount\loopmidx \global\newcount\loopmidy
+\global\newdimen\CENTRALLOOP
+\gdef\drawloop#1[#2#3](#4,#5){
+\global\CENTRALLOOP=0pt % non-central is default
+\global\LINETYPE=#1
+\ifnum\LTYPE=\gluon\relax\else\UNIMPERROR\LTYPE=1\message{Reverting to Gluons}
+\fi
+\global\LINEDIRECTION=#2 %initial loop direction
+\global\fourthlineadjx=#3 %number of eighths of loop
+\ifnum\fourthlineadjx=0 % (x,y) now midpoint.
+ \global\CENTRALLOOP=1pt % non-central is default
+ \global\fourthlineadjx=8
+ \global\LDIR=0
+\fi
+\global\fourthlineadjy=\fourthlineadjx % a conveniently unused variable.
+\global\advance\fourthlineadjy by -4
+\global\loopfrontx=#4 \global\loopfronty=#5
+\ifdim\CENTRALLOOP=1pt
+ \global\advance\loopfrontx by -2413 \global\advance\loopfronty by -425
+\fi % diameter of gluonloop is 4825 to 4830 cpt.
+\global\unitboxnumber=1 % default; \gluoncase
+\ifnum\LINETYPE=\photon \unitboxnumber=2 \fi
+\checkdir
+\drawline\LINETYPE[\LDIR\LCONFIG](\loopfrontx,\loopfronty)[\unitboxnumber]
+\DRAWLOOP
+\ifnum\fourthlineadjy>-1 % at least 1/2 a loop
+\global\loopmidx=\loopfrontx \global\loopmidy=\loopfronty
+\global\advance\loopmidx by \loopbackx \global\advance\loopmidy by \loopbacky
+\divide\loopmidx by 2 \divide\loopmidy by 2 % midpoints of loop
+\ifdim\CENTRALLOOP=1pt
+ \global\advance\loopfrontx by 200 \global\advance\loopfronty by 425
+ \global\advance\loopbackx by -200 \global\advance\loopbacky by -425
+\fi
+\fi % end of \ifnum\fourthlineadjy>-1
+}
+\gdef\DRAWLOOP{
+\global\advance\fourthlineadjx by -1
+\ifnum\fourthlineadjx=0\relax % finished!
+\else
+\ifnum\fourthlineadjx=\fourthlineadjy % opposite side of loop
+ \global\loopbackx=\pbackx \global\loopbacky=\pbacky
+\fi
+\global\advance\LDIR by 1
+\moduloeight\LDIR
+\checkdir
+\drawline\LINETYPE[\LDIR\LCONFIG](\pbackx,\pbacky)[\unitboxnumber]
+\fi % end \ifnum\fourthlineadjx
+\ifnum\fourthlineadjx>1 \DRAWLOOP \fi % recursive
+}
+\gdef\checkdir{
+\ifnum\LTYPE=\gluon
+\ifodd\LDIR \global\LCONFIG=0 \else \global\LCONFIG=2 \fi
+\fi %end of \gluon
+}
diff --git a/macros/latex209/contrib/feynman/photonsetup.tex b/macros/latex209/contrib/feynman/photonsetup.tex
new file mode 100644
index 0000000000..fa364ada33
--- /dev/null
+++ b/macros/latex209/contrib/feynman/photonsetup.tex
@@ -0,0 +1,245 @@
+% PHOTONSETUP(28).TEX
+% CALLED BY FEYNMAN(34).TEX.
+% USED FOR GENERATING PHOTON LINES IN FEYNMAN DIAGRAMS IN LATEX.
+\newcount\numwiggles \newcount\numwigglespo
+\global\newcount\photonlengthx
+\global\newcount\photonlengthy
+\global\newcount\photonfrontx %}(x,y) co-ord of left of photon
+\global\newcount\photonfronty %}
+\global\newcount\photonbackx
+\global\newcount\photonbacky
+\newcount\halfwigglelength
+%
+\global\font\Twelverom=cmr12
+\global\font\Tenrom=cmr10
+\gdef\Lbr{{\Twelverom(}} \gdef\Rbr{{\Twelverom)}}
+\gdef\SLbr{{\Tenrom(}} \gdef\SRbr{{\Tenrom)}}
+% Want \smile,\frown to always be 12-point but won't work!
+\gdef\Smile{{\large$\smile$}} % Default for 10 and 11-point documents.
+\gdef\Frown{{\large$\frown$}} % Default for 10 and 11-point documents.
+\ifdim\BIGPHOTONS>0pt \gdef\Smile{$\smile$} \gdef\Frown{$\frown$} \fi
+% For use with 12-point documents only. Invoked by saying \bigphotons.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\selectphoton{ % RECURSIVELY RE-DEFINED HERE. Define in FEYNMAN.
+\global\advance\photoncount by 1 % Counts number of photons drawn.
+\global\photonfrontx=\particlefrontx % READ IN FROM FEYNMAN \selectphoton
+\global\photonfronty=\particlefronty % READ IN FROM FEYNMAN \selectphoton
+% Error messages for overly-long lines. See FEYNMAN for negative-lengths.
+\ifnum\unitboxnumber > 50
+\message{ *** WARNING *** Photon with
+\the\unitboxnumber\space half-wiggles requested *** }
+\ifnum\unitboxnumber > 150
+\message{ *** Reducing photon length to 10 half-wiggles (max 150) *** }
+\ifnum\unitboxnumber > 1000
+\message{ *** Probable Cause: Photon selected instead of Fermion *** }
+\fi \global\unitboxnumber=10 \fi \fi % end of length error
+\numwiggles=\unitboxnumber
+\divide\numwiggles by 2
+\global\unitboxnumberpo=\numwiggles % here \unitboxnumberpo is an unused counter
+\global\multiply \unitboxnumberpo by -1
+\numwigglespo=\unitboxnumber
+\advance\numwigglespo by \unitboxnumberpo %\numwigglespo is one greater than
+\global\numlineparts = 2 % DEFAULT %\numwiggles in this case.
+\global\numupperunits=\numwigglespo % DEFAULT
+\global\numlowerunits=\numwiggles % DEFAULT
+\particleadjustx=0 %DEFAULT
+\particleadjusty=0 %DEFAULT
+% select photon alignment:
+\ifcase\LINEDIRECTION
+ \Nphoton %\LINEDIRECTION=0 (NORTH) CASE
+\or \NEphoton % 1 case
+\or \Ephoton % 2 case...horizontal photon.
+\or \SEphoton % .
+\or \Sphoton % .
+\or \SWphoton % .
+\or \Wphoton % .
+\or \NWphoton % 7 case
+\else\DIRECTERROR \fi
+\setplength
+\global\divide\plengthx by 2 \global\divide\plengthy by 2
+\rearcoords \boxlengthdefault \midcoords
+\global\photonbackx=\pbackx %PHOTONSETUP26
+\global\photonbacky=\pbacky %PHOTONSETUP26
+\global\photonlengthx=\plengthx %PHOTONSETUP26
+\global\photonlengthy=\plengthy %PHOTONSETUP26
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\SETUNITBOX(#1)[#2][#3]{ % For slanted photons only.
+\gdef\upperunitbox{\oval(#1,#1)[#2]}
+\gdef\lowerunitbox{\oval(#1,#1)[#3]}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\Nphoton{ % VERTICAL PHOTONS
+\ifcase\LINECONFIGURATION %\REG case
+\setcoords(-490,-250,0)(260,1250,0)[0,2000]
+\gdef\upperunitbox{\SLbr} \gdef\lowerunitbox{\SRbr}
+\particleadjusty=10
+\or % \FLIPPED case
+\setcoords(-271,-501,0)(250,1250,0)[0,2000]
+\gdef\upperunitbox{\SRbr} \gdef\lowerunitbox{\SLbr}
+\or %\CURLY case (a bit shorter).
+\particleadjusty=0
+\setcoords(-501,-351,0)(300,1400,0)[0,2200]
+\gdef\upperunitbox{\Lbr} \gdef\lowerunitbox{\Rbr}
+\or %\FLIPPEDCURLY case.
+\setcoords(-353,-499,0)(300,1400,0)[0,2200]
+\gdef\upperunitbox{\Rbr} \gdef\lowerunitbox{\Lbr}
+\or % \FLAT case. Flatter and shorter than \CURLY.
+\setcoords(-481,-371,0)(280,1300,0)[0,2000]
+\gdef\upperunitbox{\Lbr} \gdef\lowerunitbox{\Rbr}
+\particleadjusty=150
+\ifnum\numwiggles=\number\numwigglespo \particleadjustx=-50 \fi
+\or %\FLIPPEDFLAT case. \LINECONFIGURATION=5.
+\setcoords(-321,-391,0)(280,1300,0)[0,2000]
+\gdef\upperunitbox{\Rbr} \gdef\lowerunitbox{\Lbr}
+\particleadjusty=150
+\ifnum\numwiggles=\number\numwigglespo \particleadjustx=80 \fi
+\or % \LONGPHOTON
+\setcoords(-490,-260,0)(300,1500,0)[0,2400]
+\gdef\upperunitbox{\Lbr} \gdef\lowerunitbox{\Rbr}
+\or % \FLIPPEDLONGPHOTON
+\setcoords(-301,-531,0)(300,1500,0)[0,2400]
+\gdef\upperunitbox{\Rbr} \gdef\lowerunitbox{\Lbr}
+\else \UNIMPERROR
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\NEphoton{ % NE SLANTED PHOTONS: RE-ORDERED IN PHOTONSETUP27
+\ifcase\LINECONFIGURATION %\REG case
+\setcoords(425,425,0)(1250,0,0)[1250,1250] \SETUNITBOX(1250)[br][tl]
+\ifnum\numwigglespo > \number \numwiggles \particleadjustx=15 \fi
+\or % \FLIPPED case
+\setcoords(1050,-200,0)(625,625,0)[1250,1250] \SETUNITBOX(1250)[tl][br]
+\ifnum\numwigglespo > \number \numwiggles \particleadjustx=25 \fi
+\or % \CURLY case.
+\setcoords(500,500,0)(1400,0,0)[1400,1400] \SETUNITBOX(1400)[br][tl]
+\or % \FLIPPEDCURLY case
+\setcoords(1200,-200,0)(700,700,0)[1400,1400] \SETUNITBOX(1400)[tl][br]
+\or % \FLAT case
+\setcoords(400,400,0)(1200,0,0)[1200,1200] \SETUNITBOX(1200)[br][tl]
+\or % \FLIPPEDFLAT case
+\setcoords(1000,-200,0)(600,600,0)[1200,1200] \SETUNITBOX(1200)[tl][br]
+\else \UNIMPERROR
+\fi
+\numupperunits=\numwiggles \numlowerunits=\numwigglespo
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\Ephoton{ % EASTWARD HORIZONTAL PHOTONS
+\ifcase\LINECONFIGURATION % REG case
+\setcoords(-285,715,0)(-150,-400,0)[2005,0]
+\gdef\upperunitbox{\Frown} \gdef\lowerunitbox{\Smile}
+\or % \FLIPPED case
+\setcoords(-285,715,0)(-420,-170,0)[2005,0]
+\gdef\upperunitbox{\Smile} \gdef\lowerunitbox{\Frown}
+\else \UNIMPERROR
+\fi
+\particleadjustx=-15 % Lengths are in centipoints.
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\SEphoton{ % SE SLANTED PHOTONS: RE-ORDERED IN PHOTONSETUP27
+\ifcase\LINECONFIGURATION %\REG case
+\setcoords(-200,1050,0)(-625,-625,0)[1250,-1250] \SETUNITBOX(1250)[tr][bl]
+\ifnum\numwigglespo > \number \numwiggles \particleadjustx=25 \fi
+\or % \FLIPPED case
+\setcoords(425,425,0)(0,-1250,0)[1250,-1250] \SETUNITBOX(1250)[bl][tr]
+\ifnum\numwigglespo > \number \numwiggles \particleadjustx=15 \fi
+\or % \CURLY case.
+\setcoords(-200,1200,0)(-700,-700,0)[1400,-1400] \SETUNITBOX(1400)[tr][bl]
+\or % \FLIPPEDCURLY case
+\setcoords(500,500,0)(0,-1400,0)[1400,-1400] \SETUNITBOX(1400)[bl][tr]
+\or % \FLAT case
+\setcoords(-200,1000,0)(-600,-600,0)[1200,-1200] \SETUNITBOX(1200)[tr][bl]
+\particleadjustx=-20
+\or % \FLIPPEDFLAT case
+\setcoords(420,420,0)(0,-1200,0)[1200,-1200] \SETUNITBOX(1200)[bl][tr]
+\particleadjustx=40
+\else \UNIMPERROR
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\Sphoton{ % DOWN, DOWN VERTICAL PHOTONS
+\ifcase\LINECONFIGURATION %\REG case
+\setcoords(-252,-490,0)(-740,-1740,0)[0,-2000]
+\gdef\upperunitbox{\SRbr} \gdef\lowerunitbox{\SLbr}
+\or % \FLIPPED case
+\setcoords(-490,-260,0)(-740,-1740,0)[0,-2002]
+\gdef\upperunitbox{\SLbr} \gdef\lowerunitbox{\SRbr}
+\or %\CURLY case (a bit shorter).
+\setcoords(-299,-449,0)(-870,-1970,0)[0,-2200]
+\gdef\upperunitbox{\Rbr} \gdef\lowerunitbox{\Lbr}
+\particleadjusty=-95
+\or %\FLIPPEDCURLY case.
+\setcoords(-517,-371,0)(-900,-2000,0)[0,-2200]
+\gdef\upperunitbox{\Lbr} \gdef\lowerunitbox{\Rbr}
+\particleadjusty=-165
+\or % \FLAT case. Flatter and shorter than \CURLY. \LINECONFIGURATION=4.
+\setcoords(-299,-409,0)(-885,-1905,0)[0,-2000]
+\gdef\upperunitbox{\Rbr} \gdef\lowerunitbox{\Lbr}
+\particleadjustx=50 \particleadjusty=-380
+\ifodd\unitboxnumber\relax\else\particleadjustx=250 \particleadjusty=-400 \fi
+\or %\FLIPPEDFLAT case. \LINECONFIGURATION=5.
+\setcoords(-519,-449,0)(-900,-1920,0)[0,-2000]
+\gdef\upperunitbox{\Lbr} \gdef\lowerunitbox{\Rbr}
+\particleadjusty=-370
+\ifodd\unitboxnumber\relax\else\particleadjustx=-240 \particleadjusty=-400 \fi
+\or % \LONGPHOTON
+\gdef\upperunitbox{\Rbr} \gdef\lowerunitbox{\Lbr}
+\setcoords(-325,-555,0)(-900,-2100,0)[0,-2400]
+\particleadjusty=-40
+\or % \FLIPPEDLONG
+\setcoords(-505,-275,0)(-900,-2100,0)[0,-2400]
+\gdef\upperunitbox{\Lbr} \gdef\lowerunitbox{\Rbr}
+\particleadjusty=-30 % Lengths are in centipoints.
+\else \UNIMPERROR
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\SWphoton{ % SW SLANTED PHOTONS: RE-ORDERED IN PHOTONSETUP27
+\ifcase\LINECONFIGURATION %\REG case
+\setcoords(-825,-825,0)(0,-1250,0)[-1250,-1250] \SETUNITBOX(1250)[br][tl]
+\or % \FLIPPED case
+\setcoords(-175,-1425,0)(-625,-625,0)[-1250,-1250] \SETUNITBOX(1250)[tl][br]
+\or % \CURLY case.
+\setcoords(-900,-900,0)(0,-1410,0)[-1400,-1400] \SETUNITBOX(1400)[br][tl]
+\or % \FLIPPEDCURLY case
+\setcoords(-200,-1600,0)(-700,-700,0)[-1400,-1400] \SETUNITBOX(1400)[tl][br]
+\or % \FLAT case
+\setcoords(-800,-800,0)(0,-1200,0)[-1200,-1200] \SETUNITBOX(1200)[br][tl]
+\or % \FLIPPEDFLAT case
+\setcoords(-200,-1400,0)(-600,-600,0)[-1200,-1200] \SETUNITBOX(1200)[tl][br]
+\else \UNIMPERROR
+\fi
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\Wphoton{
+\ifcase\LINECONFIGURATION %\REG case
+\setcoords(-2245,-1245,0)(-150,-400,0)[-2005,0]
+\gdef\upperunitbox{\Frown} \gdef\lowerunitbox{\Smile}
+\or % \FLIPPED case
+\setcoords(-2245,-1245,0)(-400,-150,0)[-2005,0]
+\gdef\upperunitbox{\Smile} \gdef\lowerunitbox{\Frown}
+\else \UNIMPERROR
+\fi
+\particleadjustx=57 % Lengths are in centipoints.
+\ifnum\numwigglespo=\number\numwiggles \particleadjustx=0 \fi
+\numlowerunits=\numwigglespo \numupperunits=\numwiggles
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\NWphoton{ % NW SLANTED PHOTONS: RE-ORDERED IN PHOTONSETUP27
+\ifcase\LINECONFIGURATION %\REG case
+\setcoords(-200,-1425,0)(625,625,0)[-1250,1250] \SETUNITBOX(1250)[bl][tr]
+\or % \FLIPPED case
+\setcoords(-825,-825,0)(0,1250,0)[-1250,1250] \SETUNITBOX(1250)[tr][bl]
+\ifnum\numwigglespo > \number \numwiggles \particleadjusty=-15 \fi
+\or % \CURLY case.
+\setcoords(-200,-1600,0)(700,700,0)[-1400,1400] \SETUNITBOX(1400)[bl][tr]
+\or % \FLIPPEDCURLY case
+\setcoords(-900,-900,0)(0,1400,0)[-1400,1400] \SETUNITBOX(1400)[tr][bl]
+\or % \FLAT case.
+\setcoords(-200,-1400,0)(600,600,0)[-1200,1200] \SETUNITBOX(1200)[bl][tr]
+\or % \FLIPPEDFLAT case
+\setcoords(-800,-800,0)(0,1200,0)[-1200,1200] \SETUNITBOX(1200)[tr][bl]
+\else \UNIMPERROR
+\fi
+}
diff --git a/macros/latex209/contrib/feynman/scalarsetup.tex b/macros/latex209/contrib/feynman/scalarsetup.tex
new file mode 100644
index 0000000000..24e7547b84
--- /dev/null
+++ b/macros/latex209/contrib/feynman/scalarsetup.tex
@@ -0,0 +1,39 @@
+% SCALARSETUP(9).TEX
+% CALLED BY FEYNMAN(34).
+% USED FOR GENERATING SCALAR LINES IN FEYNMAN DIAGRAMS IN LATEX.
+\newcount\scalarlength
+\newcount\scalarlengthx
+\newcount\scalarlengthy
+\newcount\scalarfrontx %}(x,y) co-ord of left of scalar
+\newcount\scalarfronty %}
+\newcount\scalarbackx
+\newcount\scalarbacky
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\ALLscalar{
+\global\scalarfrontx=\particlefrontx % READ IN FROM FEYNMAN \selectscalar
+\global\scalarfronty=\particlefronty % READ IN FROM FEYNMAN \selectscalar
+% \gaplength=850 \seglength=1416 % Default defined in FEYNMAN.TEX.
+\numlineparts = 1 \numupperunits=\unitboxnumber
+\ifcase\LINECONFIGURATION
+\global\upperlineadjx=-200 \global\upperlineadjy=0
+\slanttest(\seglength,\gaplength) %SEE FEYNMAN22.TEX.
+\gdef\upperunitbox{\line(\XDIR,\YDIR){\seglength}}
+\else \UNIMPERROR % etc.
+\fi
+\global\unitboxwidth=\seglength \global\advance\unitboxwidth by \gaplength
+\global\multiply \unitboxwidth by \XDIR
+\global\unitboxheight=\seglength \global\advance\unitboxheight by \gaplength
+\global\multiply \unitboxheight by \YDIR
+\global\particleadjustx=\gaplength \global\multiply\particleadjustx by \XDIR
+\global\particleadjusty=\gaplength \global\multiply\particleadjusty by \YDIR
+\negate\particleadjustx \negate\particleadjusty % SUBTRACT from linelength
+\setparticle %SCALAR8
+\global\scalarlengthx=\particlelengthx %SCALAR8
+\global\scalarlengthy=\particlelengthy %SCALAR8
+% Warning message for overly-long lines. See FEYNMAN for negative-lengths.
+\ifnum\boxlengthx > 50000
+\message{ *** WARNING *** Scalar of length in excess of 50000cp requested!}\fi
+\ifnum\boxlengthy > 50000
+\message{ *** WARNING *** Scalar of length in excess of 50000cp requested!}\fi
+\global\scalarbackx=\pbackx \global\scalarbacky=\pbacky %SCALAR8
+}
diff --git a/macros/latex209/contrib/feynman/vertex.tex b/macros/latex209/contrib/feynman/vertex.tex
new file mode 100644
index 0000000000..892541bb2e
--- /dev/null
+++ b/macros/latex209/contrib/feynman/vertex.tex
@@ -0,0 +1,399 @@
+% VERTEX(25)
+% CALLED BY FEYNMAN(34).TEX.
+% Vertex functions for FEYNMAN drawn via \drawvertex.
+%
+\global\advance\vertexcount by 1 % Needed and defined in FEYNMAN19&20.
+\newsavebox{\vertexbox}
+\global\newcount\LDIRcount % Counts the number of vertices drawn.
+\global\newcount\VERTEXNUMBER % 3 or 4; The number of particles in the vertex.
+\global\newdimen\VERTEXLINKONE % And now some switches.
+\global\newdimen\VERTEXLINKTWO
+\global\newdimen\VERTEXLINKTHREE
+\global\newdimen\VERTEXLINKFOUR %\clearvertex %sets them to zero
+\global\newdimen\VERTEXCAPONE % And now some GLUONCAP switches.
+\global\newdimen\VERTEXCAPTWO
+\global\newdimen\VERTEXCAPTHREE
+\global\newdimen\VERTEXCAPFOUR %\clearvertex %sets them to zero
+\global\newdimen\STEMVERTEXONE
+\global\newdimen\STEMVERTEXTWO
+\global\newdimen\STEMVERTEXTHREE
+\global\newdimen\STEMVERTEXFOUR %\clearvertex %sets them to zero
+\global\newcount\stemlengthcopy
+\global\newcount\vertexonex \global\newcount\vertexoney
+\global\newcount\vertextwox \global\newcount\vertextwoy
+\global\newcount\vertexthreex \global\newcount\vertexthreey
+\global\newcount\vertexfourx \global\newcount\vertexfoury
+\global\newcount\vertexmidx \global\newcount\vertexmidy
+\global\newcount\VERTEXLINE
+\global\newcount\FLIPVERTEX \global\FLIPVERTEX=0
+\gdef\flipvertex{\global\FLIPVERTEX=1} %For drawing vertices with flipped lines
+\newcount\vertadj \newcount\negvertadj
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SAMPLE USAGE:
+%
+% Syntax: \drawvertex<\particletype[\DIRECTION #particles in vertex (3 or 4)]
+% (x,y)[\number of loops or half-wiggles]>
+% eg: \drawvertex\gluon[\NE 3}(0,10000)[3]
+% Where the particle type is either \gluon or \photon
+% Direction is \N, \NE, \E...\NW as with drawing lines.
+% This is the direction of the initial vertex line which you give
+% the co-ords of. For 3-prong vertices the other 2 lines are 90-degrees
+% to each other and `opposite' the initial line forming a `Y'.
+% For 4-prong vertices an `X' or `+' is formed.
+% The initial line begins at co-ords (vertexonex,\vertexoney) and
+% are numbered in a clockwise sense so that the next line ends are
+% (\vertextwox,\vertextwoy) etc. The point of convergence is at
+% (\vertexmidx,\vertexmidy).
+% The number of particles will be either 3 (eg: WWZ vertex) or 4.
+% Co-ords of directed line as above.
+% These then become (\vertexonex,\vertexoney).
+% The number of loops each line of a gluon vertex has or the number of half-
+% wiggles each line of a general gauge vertex is the final parameter.
+%
+% To flip the initial (\vertexone) line configuration for a 3-vertex
+% or ALL of the lines in a 4-vertex say \flipvertex\drawvertex...
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% CALLING ROUTINES %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\gdef\drawvertex#1[#2#3](#4,#5)[#6]{
+\global\advance\vertexcount by 1 % Counts number of vertices draw.
+\global\LINETYPE=#1 % either \gluon or \photon
+\global\LINEDIRECTION=#2
+\global\VERTEXNUMBER=#3 % either 3 or 4
+\global\vertexonex=#4
+\global\vertexoney=#5
+\global\unitboxnumber=#6
+\global\stemlengthcopy=\stemlength % Record use-defined value.
+%
+% SELECT VERTEX:
+%
+\ifnum\LINETYPE<3 \LINEERROR \fi
+\ifnum\LINETYPE=3 % *** PHOTONS ***
+% TEST WHETHER GLUONS HAVE BEEN PREVIOUSLY DRAWN:
+\ifnum\gluoncount=0 \def\gluonlink{\relax} \def\gluoncap{\relax} \fi
+ \ifnum\VERTEXNUMBER<3 \UNIMPERROR \fi
+ \ifnum\VERTEXNUMBER=3 \THREEPHOTON\fi % 3-PHOTON VERTEX
+ \ifnum\VERTEXNUMBER=4 \FOURPHOTON \fi % 4-PHOTON VERTEX
+ \ifnum\VERTEXNUMBER>4 \UNIMPERROR \fi
+\fi
+\ifnum\LINETYPE=4 % *** GLUONS ***
+ \ifnum\VERTEXNUMBER<3 \UNIMPERROR \fi
+ \ifnum\VERTEXNUMBER=3 \THREEGLUON \fi % 3-GLUON VERTEX
+ \ifnum\VERTEXNUMBER=4 \FOURGLUON \fi % 4-GLUON VERTEX
+ \ifnum\VERTEXNUMBER>4 \UNIMPERROR \fi
+\fi
+\ifnum\LINETYPE>4 \LINEERROR \fi
+\clearvertex % Resets VERTEXLINKs, VERTEXCAPS etc.
+} % END \drawvertex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PHOTON VERTICES %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\gdef\advtwomodeight#1{
+\global\advance\LDIRcount by2\moduloeight\LDIRcount \diagFOURVERT#1[\LDIRcount]}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%
+% % Three-Photon Vertex %
+% %%%%%%%%%%%%%%%%%%%%%%%
+\gdef\THREEPHOTON{
+\ifcase\LDIR % N vertex
+\setvertexA[\S\REG]
+\setvertexB[\NW\CURLY](0,0)[2] \setvertexB[\NE\FLIPPEDCURLY](0,0)[3]
+\or % NE vertex
+\setvertexA[\SW\CURLY]
+\setvertexB[\N\REG](70,-100)[2] \setvertexB[\E\FLIPPED](0,0)[3]
+\or % E vertex
+\setvertexA[\W0]
+\setvertexB[\NE\CURLY](20,0)[2] \setvertexB[\SE\FLIPPEDCURLY](20,0)[3]
+\or % SE VERTEX
+\setvertexA[\NW\CURLY]
+\setvertexB[\E\REG](0,0)[2] \setvertexB[\S1](20,100)[3]
+\or % S VERTEX
+\setvertexA[\N\REG]
+\setvertexB[\SE\CURLY](0,0)[2] \setvertexB[\SW\FLIPPEDCURLY](0,0)[3]
+\or % SW vertex
+\setvertexA[\NE\CURLY]
+\setvertexB[\S\REG](-20,100)[2]
+\setvertexB[\W\FLIPPED](0,0)[3]
+\or % W vertex
+\setvertexA[\E\REG]
+\setvertexB[\SW\CURLY](0,0)[2] \setvertexB[\NW\FLIPPEDCURLY](0,0)[3]
+\or % NW vertex
+\setvertexA[\SE\CURLY]
+\setvertexB[\W\REG](0,0)[2]
+\setvertexB[\N\FLIPPED](-40,-100)[3]
+\else \DIRECTERROR
+\fi
+} %end \THREEPHOTON
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% %%%%%%%%%%%%%%%%%%%%%%
+% % Four-Photon Vertex %
+% %%%%%%%%%%%%%%%%%%%%%%
+\gdef\FOURPHOTON{
+\ifnum\LDIR>-1
+\global\LDIRcount=\LDIR \global\advance\LDIRcount by 4 \moduloeight\LDIRcount
+\setvertexA[\LDIRcount\REG] \advtwomodeight2 \advtwomodeight3 \advtwomodeight4
+\else \UNIMPERROR \fi
+\global\FLIPVERTEX=0
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% GLUON VERTICES %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% %%%%%%%%%%%%%%%%%%%%%%
+% % Three-Gluon Vertex %
+% %%%%%%%%%%%%%%%%%%%%%%
+\gdef\THREEGLUON{
+\vertadj=0 \adjvert % No special adjustments required for this case.
+\ifcase\LDIR % N vertex
+\setvertexA[\S\CENTRAL]
+\setvertexB[\NW\REG](0,0)[2] \setvertexB[\NE\FLIPPED](0,0)[3]
+\or % NE vertex
+\setvertexA[\SW\REG]
+\setvertexB[\N\CURLY](-170,442)[2] \setvertexB[\E 3](420,-183)[3]
+\setvertexC(442,442)[bl]
+\or % E vertex
+\setvertexA[\W6]
+\setvertexB[\NE\REG](0,0)[2] \setvertexB[\SE\FLIPPED](0,0)[3]
+\or % SE VERTEX
+\setvertexA[\NW\REG]
+\setvertexB[\E\CURLY](420,183)[2] \setvertexB[\S3](-183,-442)[3]
+\setvertexC(442,-442)[tl]
+\or % S VERTEX
+\setvertexA[\N\CENTRAL]
+\setvertexB[\SE\REG](0,0)[2] \setvertexB[\SW\FLIPPED](0,0)[3]
+\or % SW vertex
+\setvertexA[\NE\REG]
+\setvertexB[\S\CURLY](170,-442)[2]
+\setvertexB[\W\FLIPPEDCURLY](-420,183)[3]
+\setvertexC(-442,-442)[tr]
+\or % W vertex
+\setvertexA[\E\CENTRAL]
+\setvertexB[\SW\REG](0,0)[2] \setvertexB[\NW\FLIPPED](0,0)[3]
+\or % NW vertex
+\setvertexA[\SE\REG]
+\setvertexB[\W\CURLY](-420,-183)[2]
+\setvertexB[\N\FLIPPEDCURLY](170,442)[3]
+\setvertexC(-442,442)[br]
+\else \DIRECTERROR
+\fi
+} %end \THREEGLUON
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% %%%%%%%%%%%%%%%%%%%%%
+% % Four-Gluon Vertex %
+% %%%%%%%%%%%%%%%%%%%%%
+%
+%
+\gdef\FOURGLUON{
+\ifodd\LDIR\vertadj=0 \else \vertadj=412 \fi \adjvert
+\ifcase\LDIR % N vertex
+\setvertexA[\S\CURLY] \MIDADJUST(\negvertadj,\vertadj)
+\WFOURVERT2 \NFOURVERT3 \EFOURVERT4
+\or \FOURPHOTON % NE vertex
+\or % E vertex
+\setvertexA[\W\CURLY] \MIDADJUST(\vertadj,\vertadj)
+\NFOURVERT2 \EFOURVERT3 \SFOURVERT4
+\or \FOURPHOTON % SE VERTEX
+\or % S VERTEX
+\setvertexA[\N\CURLY] \MIDADJUST(\vertadj,\negvertadj)
+\EFOURVERT2 \SFOURVERT3 \WFOURVERT4
+\or \FOURPHOTON % SW vertex
+\or % W vertex
+\setvertexA[\E\CURLY] \MIDADJUST(\negvertadj,\negvertadj)
+\SFOURVERT2 \WFOURVERT3 \NFOURVERT4
+\or \FOURPHOTON % NW vertex
+\else \DIRECTERROR
+\fi
+\global\FLIPVERTEX=0 % reset \FLIPVERTEX to unflipped case.
+} % End of \FOURGLUON
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % %
+% % FOUR GLUON UTILITY ROUTINES: % %
+% % % %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \MIDADJUST Adjusts the position of the vertex midpoint and draws the
+% central four-gluon pattern.
+\gdef\MIDADJUST(#1,#2){
+\ifnum\FLIPVERTEX=0
+\global\advance\vertexmidx by #1 \global\advance\vertexmidy by #2
+\setvertexC(0,\vertadj)[bl] \setvertexC(0,\negvertadj)[tr]
+\setvertexC(\vertadj,0)[tl] \setvertexC(\negvertadj,0)[br]
+\else % \FLIPPED case
+\global\particleadjustx=#1 \global\particleadjusty=#2
+\ifnum\LDIR=0 \global\multiply\particleadjustx by -1 \fi
+\ifnum\LDIR=2 \global\multiply\particleadjusty by -1 \fi
+\ifnum\LDIR=4 \global\multiply\particleadjustx by -1 \fi
+\ifnum\LDIR=6 \global\multiply\particleadjusty by -1 \fi
+\global\advance\vertexmidx by \particleadjustx
+\global\advance\vertexmidy by \particleadjusty
+\setvertexC(0,\negvertadj)[tl] \setvertexC(0,\vertadj)[br]
+\setvertexC(\negvertadj,0)[tr] \setvertexC(\vertadj,0)[bl]
+\fi
+}
+%
+\gdef\NFOURVERT#1{
+ \ifnum\FLIPVERTEX=0 \setvertexB[\N\CURLY](\negvertadj,\vertadj)[#1]
+ \else \setvertexB[\N\FLIPPEDCURLY](\vertadj,\vertadj)[#1] \fi}
+\gdef\SFOURVERT#1{
+ \ifnum\FLIPVERTEX=0 \setvertexB[\S\CURLY](\vertadj,\negvertadj)[#1]
+ \else \setvertexB[\S\FLIPPEDCURLY](\negvertadj,\negvertadj)[#1] \fi}
+\gdef\EFOURVERT#1{
+ \ifnum\FLIPVERTEX=0 \setvertexB[\E\CURLY](\vertadj,\vertadj)[#1]
+ \else \setvertexB[\E\FLIPPEDCURLY](\vertadj,\negvertadj)[#1] \fi}
+\gdef\WFOURVERT#1{
+ \ifnum\FLIPVERTEX=0 \setvertexB[\W\CURLY](\negvertadj,\negvertadj)[#1]
+ \else \setvertexB[\W\FLIPPEDCURLY](\negvertadj,\vertadj)[#1] \fi}
+\gdef\diagFOURVERT#1[#2]{\setvertexB[#2\FLIPVERTEX](0,0)[#1]} %for\NE,\SE,\SW\NW
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Utility Routines Used in Setting Up General Vertices %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+\gdef\setvertexA[#1#2]{
+\global\savebox\vertexbox(0,0){
+\begin{picture}(0,0)
+%eg: \drawline\LINETYPE[\S\CENTRAL](0,0)[\unitboxnumber]
+\global\adjx=#2
+\ifnum\FLIPVERTEX=1 \global\advance\adjx by 1
+ \ifnum\VERTEXNUMBER=3 \global\FLIPVERTEX=0 \fi
+ \fi % Checks for flipped vertex and then Resets \FLIPVERTEX in 3-glue case.
+\ifdim\STEMVERTEXONE=1pt\backstemmed \fi
+\drawline\LINETYPE[#1\adjx](0,0)[\unitboxnumber]
+\global\stemlength=\stemlengthcopy % Re-set to use-defined value.
+\ifdim\VERTEXLINKONE=1pt\gluonlink \fi % For linking external gluons to vertex
+\ifdim\VERTEXCAPONE=1pt\gluoncap \fi % For capping external gluons to vertex
+\global\vertexmidx=\particlebackx \global\vertexmidy=\particlebacky
+\end{picture}
+}%end of \savebox
+\global\multiply\vertexmidx by -1 \global\multiply\vertexmidy by -1
+\global\advance\vertexmidx by \vertexonex
+\global\advance\vertexmidy by \vertexoney
+%eg: \drawline\LINETYPE[\S\CENTRAL](\vertexmidx,\vertexmidy)[\unitboxnumber]
+\ifdim\STEMVERTEXONE=1pt\backstemmed \fi
+\drawline\LINETYPE[#1\adjx](\vertexmidx,\vertexmidy)[\unitboxnumber]
+\global\stemlength=\stemlengthcopy % Re-set to use-defined value.
+\ifdim\VERTEXLINKONE=1pt\gluonlink \fi % For linking external gluons to vertex
+\ifdim\VERTEXCAPONE=1pt\gluoncap \fi % For capping external gluons to vertex
+} %End of \setvertexA
+%
+%
+\gdef\setvertexB[#1#2](#3,#4)[#5]{
+\global\adjx=\vertexmidx \global\adjy=\vertexmidy
+\global\advance\adjx by #3 \global\advance\adjy by #4
+\VERTEXLINE=#5
+\ifcase\VERTEXLINE\UNIMPERROR %=0
+\or \UNIMPERROR %line 1 %%%%%%%%%%%%%%%%%%%%%
+\or \ifdim\STEMVERTEXTWO=1pt\backstemmed \fi % For stemming %
+\or \ifdim\STEMVERTEXTHREE=1pt\backstemmed\fi % external gluons %
+\or \ifdim\STEMVERTEXFOUR=1pt\backstemmed\fi % to vertex %
+\else \UNIMPERROR %%%%%%%%%%%%%%%%%%%%%
+\fi
+\drawline\LINETYPE[#1#2](\adjx,\adjy)[\unitboxnumber]
+\global\stemlength=\stemlengthcopy % Re-set to use-defined value.
+\ifcase\VERTEXLINE\UNIMPERROR %=0
+\or \UNIMPERROR %line 1
+\or \ifdim\VERTEXLINKTWO=1pt\gluonlink \fi % For linking external gluons to vert
+ \ifdim\VERTEXCAPTWO=1pt\gluoncap \fi % For capping external gluons to vertex
+ \global\vertextwox=\particlebackx \global\vertextwoy=\particlebacky
+\or \ifdim\VERTEXLINKTHREE=1pt\gluonlink\fi %For linking external gluons to vert
+ \ifdim\VERTEXCAPTHREE=1pt\gluoncap\fi %For capping external gluons to vertex
+ \global\vertexthreex=\particlebackx \global\vertexthreey=\particlebacky
+\or \ifdim\VERTEXLINKFOUR=1pt\gluonlink\fi % For linking external gluons to vert
+ \ifdim\VERTEXCAPFOUR=1pt\gluoncap\fi % For capping external gluons to vertex
+ \global\vertexfourx=\particlebackx \global\vertexfoury=\particlebacky
+\else \UNIMPERROR
+\fi
+}
+\gdef\setvertexC(#1,#2)[#3#4]{
+\global\adjx=\vertexmidx \global\adjy=\vertexmidy
+\global\advance\adjx by #1 \global\advance\adjy by #2
+\absstemlength=1250 % Default for 3-gluon vertex; \absstemlength unused var.
+\ifnum \VERTEXNUMBER=4 \absstemlength=\vertadj\double\absstemlength \fi
+\ifnum\phantomswitch=0
+ \put(\adjx,\adjy) {\oval(\absstemlength,\absstemlength)[#3#4]}\fi
+}
+\gdef\adjvert{\negvertadj=\vertadj \multiply\negvertadj by -1}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% LINKING GLUONS TO VERTICES %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\gdef\vertexlink#1{
+\global\VERTEXLINE=#1
+\ifcase\VERTEXLINE\UNIMPERROR
+\or \global\VERTEXLINKONE=1pt \or \global\VERTEXLINKTWO=1pt
+\or \global\VERTEXLINKTHREE=1pt \or \global\VERTEXLINKFOUR=1pt
+\else\UNIMPERROR\fi}
+\gdef\vertexlinks{
+\global\VERTEXLINKONE=1pt \global\VERTEXLINKTWO=1pt
+\global\VERTEXLINKTHREE=1pt \global\VERTEXLINKFOUR=1pt }
+% counters cleared by \clearvertex now defined in STEM section below.
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% CAPPING GLUONS ON VERTICES %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\gdef\vertexcap#1{
+\global\VERTEXLINE=#1
+\ifcase\VERTEXLINE\UNIMPERROR
+\or \global\VERTEXCAPONE=1pt \or \global\VERTEXCAPTWO=1pt
+\or \global\VERTEXCAPTHREE=1pt \or \global\VERTEXCAPFOUR=1pt
+\else\UNIMPERROR\fi}
+\gdef\vertexcaps{
+\global\VERTEXCAPONE=1pt \global\VERTEXCAPTWO=1pt
+\global\VERTEXCAPTHREE=1pt \global\VERTEXCAPFOUR=1pt }
+% counters cleared by \clearvertex now defined in STEM section below.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% LINKING STEMS TO VERTICES %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+\gdef\stemvertex#1{
+\global\VERTEXLINE=#1
+\ifcase\VERTEXLINE\UNIMPERROR
+\or \global\STEMVERTEXONE=1pt \or \global\STEMVERTEXTWO=1pt
+\or \global\STEMVERTEXTHREE=1pt \or \global\STEMVERTEXFOUR=1pt
+\else\UNIMPERROR\fi}
+\gdef\stemvertices{
+\global\STEMVERTEXONE=1pt \global\STEMVERTEXTWO=1pt
+\global\STEMVERTEXTHREE=1pt \global\STEMVERTEXFOUR=1pt }
+\gdef\clearvertex{
+\global\STEMVERTEXONE=0pt \global\STEMVERTEXTWO=0pt
+\global\STEMVERTEXTHREE=0pt \global\STEMVERTEXFOUR=0pt
+\global\VERTEXLINKONE=0pt \global\VERTEXLINKTWO=0pt
+\global\VERTEXLINKTHREE=0pt \global\VERTEXLINKFOUR=0pt
+\global\VERTEXCAPONE=0pt \global\VERTEXCAPTWO=0pt
+\global\VERTEXCAPTHREE=0pt \global\VERTEXCAPFOUR=0pt
+\global\stemlength=275} % Re-set default.
+\global\stemlengthcopy=\stemlength
+\clearvertex %set them to zero initially.
+\global\stemlength=\stemlengthcopy
diff --git a/macros/latex209/contrib/fillform/README b/macros/latex209/contrib/fillform/README
new file mode 120000
index 0000000000..ad7944a1f7
--- /dev/null
+++ b/macros/latex209/contrib/fillform/README
@@ -0,0 +1 @@
+fillform.readme \ No newline at end of file
diff --git a/macros/latex209/contrib/fillform/fairysel.tex b/macros/latex209/contrib/fillform/fairysel.tex
new file mode 100644
index 0000000000..064afe7cc1
--- /dev/null
+++ b/macros/latex209/contrib/fillform/fairysel.tex
@@ -0,0 +1,53 @@
+\documentstyle[select]{article}
+\def\selection{%%% you may use \renewcommand{\selection}{... as well
+ \typeout{***********************************}
+ \typeout{* Example of fairy tale selection *}
+ \typeout{***********************************}
+ \typeout{}
+ \typein[\name]{Please enter your name:\space}
+ \writedef{\name}
+ \typeout{}
+ \typeout{Select the fairy tale to be printed}
+ \typeout{0=Cinderella}
+ \typeout{1=Sleeping Beauty}
+ \typeout{2=Snow White and Seven Dwarfs}
+ \typeout{3=Little Red Riding-hood}
+ \def\cz{0}
+ \def\ci{1}
+ \def\cii{2}
+ \def\ciii{3}
+ \newcount\fairytalectr \fairytalectr=100
+ \loop \ifnum \fairytalectr > 3
+ \typein[\choice]{Enter your choice [0..3]}
+ \ifx\cz\choice \fairytalectr=0 \else
+ \ifx\ci\choice \fairytalectr=1 \else
+ \ifx\cii\choice \fairytalectr=2 \else
+ \ifx\ciii\choice \fairytalectr=3
+ \fi \fi \fi \fi
+ \repeat
+ \writenewcnt{\fairytalectr}
+ \ifcase \fairytalectr \def\choice{Cinderella}
+ \or \def\choice{Sleeping Beauty}
+ \or \def\choice{Snow White and Seven Dwarfs}
+ \or \def\choice{Little Red Riding-hood}
+ \fi
+ \writedef{\choice}
+}
+
+\begin{document}
+\makeselection
+{\Large\it Dear \name}
+
+I am going to tell you the fairy tale called ``\choice''.
+
+\ifcase\fairytalectr
+Cinderella was sadly sitting above the dish full of flour mixed with ash.
+\or
+\ldots\ and Sleeping Beauty and the whole kingdom were sleeping in the roses.
+\or
+Snow White fell asleep in the Seven Dwarfs' beds.
+\or
+Once Little Red Riding-hood went to meet her grandmother and she met a wolf
+in the forest.
+\fi
+\end{document}
diff --git a/macros/latex209/contrib/fillform/fillform.readme b/macros/latex209/contrib/fillform/fillform.readme
new file mode 100644
index 0000000000..5b2bb0b7b9
--- /dev/null
+++ b/macros/latex209/contrib/fillform/fillform.readme
@@ -0,0 +1,23 @@
+Following files are made for those who do not have conventional typewriter
+(such as me) but need to fill in various questionnaires etc. FILLFORM.TEX
+accepts interactive input of entries with specified position and stores them
+in a file. You can preview the filled-in form with framed entries so that you
+can find out whether your will fit into the space available. If the entry does
+not fit, you can edit the saved document (e.g. add `\small') and rerun
+FILLFORM.TEX. Finally you rerun it without frames and print.
+
+All you need is to have LaTeX or emTeX installed and to have a printer which
+enables feeding of single sheets of paper.
+
+The file uses transfer mechanism of SELECT.STY, which is therefore included in
+this pack. You should obtain the set of five files:
+
+FILLFORM.REA --- this file
+FILLFORM.TEX --- the main file
+SAMPLFRM.TEX --- sample file with comments
+SELECT.STY --- transfer mechanism needed by FILLFORM.TEX
+FAIRYSEL.TEX --- demonstration how to use SELECT.STY
+
+The last two files mentioned are slightly different from those I have recently
+posted to Info-TeX but FILLFORM.TEX will properly work even with the older
+version.
diff --git a/macros/latex209/contrib/fillform/fillform.tex b/macros/latex209/contrib/fillform/fillform.tex
new file mode 100644
index 0000000000..26da5677ce
--- /dev/null
+++ b/macros/latex209/contrib/fillform/fillform.tex
@@ -0,0 +1,169 @@
+\documentstyle[select]{article}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Copyright (C) 1992 by Zden\v{e}k Wagner. All rights reserved.
+%%
+%% IMPORTANT NOTICE
+%%
+%% You are NOT ALLOWED to delete this notice. You are NOT ALLOWED to take
+%% money for the distribution or use of this file (or a changed version)
+%% except for a nominal charge for copying etc.
+%%
+%% If you change or add something, you are obliged to comment it in such a
+%% way that anyone could restore the original version.
+%%
+%% Error Reports and suggestions for improvements to:<Wagner@csearn.bitnet>
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\typeout{--- >>>FillForm.TeX<<< --- Copyright (C) 1992 by Z.Wagner}
+\typeout{.........................................................}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is used to fill in forms, questionnaires, etc. with \LaTeX. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% At the very beginning of the file, we define the page layout options so %
+% that the whole page is available. No headers, footers, side margins and %
+% similar stuff are allowed. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\oddsidemargin -1in
+\evensidemargin -1in
+\textwidth 21cm
+\textheight 31cm
+\marginparwidth 0pt
+\marginparsep 0pt
+\topmargin -1in
+\headsep 0pt
+\footskip 0pt
+\headheight 0pt
+\footheight 0pt
+\parindent 0pt
+\pagestyle{empty}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The following macro is called from SELECT.STY. (Please, try FAIRYSEL.TEX,
+% if you want to see an example, how to use SELECT.STY.) The description
+% inside this comment is used for beginners who would like to change this
+% file to suit their personal needs. TeXperts would understand this simple
+% code without my explanations.
+%
+% You need to do only two things to make this file work for you. First, you
+% might like to change \unitlength to some other unit. It is not advisable to
+% use large units as 1cm or 1in or even larger because you would be unable to
+% control positionning. The second think, which might require modification,
+% is the definition of the {picture} environment. The form of the command
+% applicable to this file is:
+%
+% \begin{picture}(W,H)(0,-Y)
+%
+% Here, W and H are the available width and height of the paper,
+% respectively (expressed in terms of \unitlength). Assuming that the area of
+% height T on the top of the paper is not available (due to printer hardware)
+% when feeding it manually, then Y = H + T. For STAR LC 24--10, H = 260mm,
+% T = 20mm, thence using \unitlength of 1mm we get
+%
+% \begin{picture}(210,260)(0,-280)
+%
+% You may measure the available space used by your printer by printing
+% TESTPAGE.TEX, which, I hope, is widely available.
+%
+% Now you want to commence filling-in your form. You can print only one
+% page per file. The name of the fill-in document is transferred between
+% \LaTeX passes using the mechanism of SELECT.STY. You have to delete
+% FILLFORM.SEL if you want to work with other document. The fill-in document,
+% however, remains on the hard disk. If you enter the name of the existing
+% document, it is loaded from the disk and doesn't allow interactive input.
+% This enables you to prepare and preview several pages of fill-in documents,
+% preview them and then print them.
+%
+% As mentioned above, the input is interactive within the first pass. The
+% input is stored in the file of the specified name and then processed. If you
+% are not satisfied with what you entered, you may edit the file without the
+% necessity of re-typing all entries.
+%
+% The first question, you are asked, is the request for the name of the
+% fill-in document. Please notice that the macrocode adds the `default'
+% extension `.frm'. You may specify path (but use `/' as separators, not
+% MS--DOS's `\'!) but extension must not appear in your entry. If the file
+% exists, it is loaded. If not, interactive questions are asked.
+%
+% Take the form to be filled in and your ruler. you must supply `Left
+% distance', which is the distance of the lower left corner of the input
+% field from the left edge of the paper (of course in \unitlength), `Upper
+% distance', which is the distance of the lower left corner of the input
+% field from the upper edge of the paper, `Width', which is the width of the
+% input field, and `Height', which is the height of the input field.
+% Afterwards, the file requests the alignment. The text is always aligned
+% with the bottom of the input field. As default, it is centered. You can
+% enter `l' for left or `r' for right alignment, respectively. Entering the
+% text needs some precautions. Your interactive input is written to the file
+% and then processed using standard \input command. Therefore, all control
+% sequences (those words starting with `\') must be preceded by `\string',
+% otherwise \TeX would run out of memory. I this case, you do not need Wizard
+% as suggested in the error message. You just need to use \string, e.g.
+% \string\today for date. Remember that \TeX eats up all spaces after the
+% control sequence. Thence `\string\it John Wilkiesbood' will produce
+% `undefined control sequence \itJohn' when the frm-file is processed. To
+% prevent such errors, you must enter `\string\it{}John Wilkiesbood'. Anyway,
+% once you make such an error, the easiest way to recover is to edit the
+% frm-file and re-\LaTeX FILLFORM.TEX.
+%
+% Type `y' if there are more items to be input or `n' if everything is
+% done. Afterwards, the file is closed and then input and processed. Just
+% before inputting your file, FILLFORM.SEL asks the question:
+%
+% Show frames? (y/n)
+%
+% If you answer `y', all entries will be framed. Thence you can verify in
+% preview that all entries fit inside the space available. When everything is
+% O.K., rerun FILLFORM.TEX without frames.
+%
+% If there is something wrong in your fill-in document, edit the frm-file
+% and then rerun FILLFORM.TEX. Your document will automatically be loaded.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\selection{%
+\typein[\fillin]{Enter the name of the fill-in document}
+\writeline{\string\def\string\y{y}}
+\writeline{\string\typein[\string\frames]{Show frames? (y/n)}}
+\writeline{\string\ifx \string\y\string\frames
+ \string\let\string\formbox=\string\framebox \string\else}
+\writeline{\string\let\string\formbox=\string\makebox \string\fi}
+\writeline{\string\input{\fillin.frm}}
+\openin1 \fillin.frm
+\ifeof1
+ \typeout{No file \fillin.frm}
+ \newwrite\form\relax
+ \immediate\openout\form=\fillin.frm\relax
+ \immediate\write\form{\string\setlength{\string\unitlength}{1mm}}
+ \immediate\write\form{\string\begin{picture}(210,260)(0,-280)}
+ \newcount\nextctr \nextctr=1
+ \def\next{y}
+ \def\no{n}
+ \loop \ifnum \nextctr > 0
+ \typein[\x]{Left distance}
+ \typein[\y]{Upper distance}
+ \typein[\w]{Width}
+ \typein[\h]{Height}
+ \typein[\pos]{Position}
+ \typein[\text]{Text}
+ \immediate\write\form{\string\put(\x,-\y)
+ {\string\formbox(\w,\h)[b\pos]{\text}}}
+ \typein[\next]{Next item? (y/n)}
+ \ifx\no\next \nextctr=0 \fi
+ \repeat
+ \immediate\write\form{\string\end{picture}}
+ \immediate\closeout\form
+\else \closein1\relax
+\fi
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Now we begin the document, make selection (which calls \selection defined
+% above) and finish. There's nothing else to be done.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{document}
+\makeselection
+\end{document}
diff --git a/macros/latex209/contrib/fillform/samplfrm.tex b/macros/latex209/contrib/fillform/samplfrm.tex
new file mode 100644
index 0000000000..360e4f4e79
--- /dev/null
+++ b/macros/latex209/contrib/fillform/samplfrm.tex
@@ -0,0 +1,107 @@
+\documentstyle{article}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Copyright (C) 1992 by Zden\v{e}k Wagner. All rights reserved.
+%%
+%% IMPORTANT NOTICE
+%%
+%% This file may only be distributed together with FILLFORM.TEX provided
+%% both files contain identical definitions of \unitlength and
+%% \begin{picture}.
+%%
+%% You are NOT ALLOWED to delete this notice. You are NOT ALLOWED to take
+%% money for the distribution or use of this file (or a changed version)
+%% except for a nominal charge for copying etc.
+%%
+%% If you change or add something, you are obliged to comment it in such a
+%% way that anyone could restore the original version.
+%%
+%% Error Reports and suggestions for improvements to:<Wagner@csearn.bitnet>
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file is the demonstration of FILLFORM.TEX. Insert a single sheet of
+% paper into your printer and print this document. Then insert the same sheet
+% of paper into the printer again, run FILLFORM.TEX without any changes to
+% \unitlength and \begin{picture} with the following input:
+% (Included is the modified log-file from my experiment)
+%
+% Enter the name of the fill-in document
+% \fillin=sample
+% Left distance
+% \x=33
+% Upper distance
+% \y=55
+% Width
+% \w=50
+% Height
+% \h=10
+% Position
+% \pos=l
+% Text
+% \text=\string\it{}Your Name
+% Next item? (y/n)
+% \next=y
+% Left distance
+% \x=66
+% Upper distance
+% \y=70
+% Width
+% \w=4
+% Height
+% \h=4
+% Position
+% \pos=
+% Text
+% \text=X
+% Next item? (y/n)
+% \next=y
+% Left distance
+% \x=55
+% Upper distance
+% \y=90
+% Width
+% \w=40
+% Height
+% \h=10
+% Position
+% \pos=l
+% Text
+% \text=\string\today
+% Next item? (y/n)
+% \next=n
+% (fillform.sel
+% Show frames? (y/n)
+% \frames=n
+% (sample.frm))
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\oddsidemargin -1in
+\evensidemargin -1in
+\textwidth 21cm
+\textheight 31cm
+\marginparwidth 0pt
+\marginparsep 0pt
+\topmargin -1in
+\headsep 0pt
+\footskip 0pt
+\headheight 0pt
+\footheight 0pt
+\parindent 0pt
+\pagestyle{empty}
+
+\begin{document}
+\setlength{\unitlength}{1mm}
+\begin{picture}(210,260)(0,-280)
+\put(0,-30){\makebox(210,15){\large\bf MY FIRST QUESTIONNAIRE}}
+\put(12,-55){\makebox(20,10)[br]{\bf Name:}}
+\put(33,-56){\line(1,0){50}}
+\put(20,-70){\makebox(30,10)[br]{\bf I like FillForm.TEX}}
+\put(55,-70){\makebox(10,10)[bl]{\bf YES}}
+\put(65,-71){\framebox(4,4){}}
+\put(55,-77){\makebox(10,10)[bl]{\bf NO}}
+\put(65,-78){\framebox(4,4){}}
+\put(14,-90){\makebox(40,10)[br]{Date:}}
+\put(55,-91){\line(1,0){30}}
+\end{picture}
+\end{document}
diff --git a/macros/latex209/contrib/fillform/select.sty b/macros/latex209/contrib/fillform/select.sty
new file mode 100644
index 0000000000..a8a5277efd
--- /dev/null
+++ b/macros/latex209/contrib/fillform/select.sty
@@ -0,0 +1,61 @@
+%%
+%% Copyright (C) 1992 by Zden\v{e}k Wagner. All rights reserved.
+%%
+%% IMPORTANT NOTICE
+%%
+%% You are NOT ALLOWED to delete this notice. You are NOT ALLOWED to take
+%% money for the distribution or use of this file (or a changed version)
+%% except for a nominal charge for copying etc.
+%%
+%% If you change or add something, you are obliged to comment it in such a
+%% way that anyone could restore the original version.
+%%
+%% Error Reports and suggestions for improvements to:<Wagner@csearn.bitnet>
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\typeout{_____________________________________________________________}
+\typeout{Cumbersome version of "selection" designed by Z. Wagner, 1992}
+\typeout{-------------------------------------------------------------}
+\typeout{}
+\newwrite\sel\relax
+
+\def\writeline#1{%
+ \immediate\write \sel {#1}
+}
+
+\def\writedef#1{%
+ \immediate\write \sel {\string\def\string#1{#1}}
+}
+
+\def\writenewcnt#1{%
+ \writeline{\string\newcount\string#1 \string#1=\the#1}
+}
+
+\def\writecnt#1{%
+ \writeline{\string#1=\the#1}
+}
+
+\def\selection{
+ \writeline{\string\typeout{No selection was made. Please use}}
+ \writeline{\string\typeout{\string\string\string\renewcommand{\string\string
+ \string\selection}{...your commands...}}}
+ \writeline{\string\typeout{or \string\string\string\def\string\string
+ \string\selection{...your commands...}}}
+ \writeline{\string\typeout{to define your selection routine. Do not forget
+ to delete \jobname.sel!}}
+}
+
+\def\makeselection{%
+ \openin1 \jobname.sel
+ \ifeof1
+ \typeout{No file \jobname.sel}
+ \immediate\openout\sel=\jobname.sel\relax
+ \selection % this calls user selection routine
+ \immediate\closeout \sel
+ \else \closein1\relax
+ \fi
+ \input{\jobname.sel}
+}
+
+\endinput
diff --git a/macros/latex209/contrib/genindex/genindex.sty b/macros/latex209/contrib/genindex/genindex.sty
new file mode 100644
index 0000000000..ed43f831fe
--- /dev/null
+++ b/macros/latex209/contrib/genindex/genindex.sty
@@ -0,0 +1,45 @@
+% GENINDEX.STY -- version 1.0 -- 5 August 1993 -- Cameron Smith
+
+% \newindex{NAME}{\FILEIDENTIFIER}{EXTENSION}{\CONSTRUCTOR}
+% defines two macros, \makeNAME and \NAME. If \makeNAME is
+% executed in the preamble of a document, executing \NAME{ENTRY} writes
+% the line \CONSTRUCTOR{ENTRY}{PAGENUM} to the file \jobname.EXTENSION,
+% where PAGENUM is the number of the page on which the \NAME command was
+% given. If \makeNAME is not executed, then calls to \NAME are no-ops.
+% \FILEIDENTIFIER is a control sequence used internally to
+% identify the output channel allocated to the file.
+
+% \FILEIDENTIFIER and \CONSTRUCTOR should be control sequences;
+% NAME and EXTENSION should not. EXTENSION should not include a period.
+
+% Example: \newindex{index}{\@indexfile}{idx}{\indexentry}
+% defines the macros \makeindex and \index. If \makeindex is
+% executed in the preamble of a document, then \index{ENTRY} causes
+% the line \indexentry{ENTRY}{PAGENUM} to be written to the file
+% \jobname.idx, which is identified internally as channel \@indexfile.
+% If \makeindex is not executed, \index{ENTRY} is a no-op.
+
+% The effect of \newindex{glossary}{\@glossaryfile}{glo}{\glossaryentry}
+% is similar.
+
+\def\newindex#1#2#3#4{%
+ \@namedef{make#1}{%
+ \if@filesw
+ \newwrite#2%
+ \immediate\openout#2=\jobname.#3
+ \@namedef{#1}{\@bsphack\begingroup
+ \def\protect########1{\string########1\space}\@sanitize
+ \@@wrindex#2#4}%
+ \typeout{Writing #1 file \jobname.#3 }%
+ \fi
+ }%
+ \@namedef{#1}{\@bsphack\begingroup \@sanitize\@index}%
+}
+
+\def\@@wrindex#1#2#3{\let\thepage\relax
+ \edef\@tempa{\write#1{\string#2{#3}{\thepage}}}%
+ \expandafter\endgroup\@tempa
+ \if@nobreak\ifvmode\nobreak\fi\fi\@esphack
+}
+
+\def\@index#1{\endgroup\@esphack}
diff --git a/macros/latex209/contrib/genindex/memo.sty b/macros/latex209/contrib/genindex/memo.sty
new file mode 100644
index 0000000000..ae14daa53f
--- /dev/null
+++ b/macros/latex209/contrib/genindex/memo.sty
@@ -0,0 +1,3 @@
+\@input{genindex.sty}
+\newindex{memo}{\@memofile}{mem}{\memoentry}
+\makememo
diff --git a/macros/latex209/contrib/genindex/readme b/macros/latex209/contrib/genindex/readme
new file mode 100644
index 0000000000..4e40436195
--- /dev/null
+++ b/macros/latex209/contrib/genindex/readme
@@ -0,0 +1,87 @@
+If you examine the code in latex.tex (LATEX VERSION 2.09 <25 March 1992>)
+that defines the index- and glossary-making macros, you will see that
+\makeindex and \makeglossary are nearly identical, and that the definitions
+of \index and \glossary are nearly identical, "mutatis mutandis".
+That is, the index-making macros write an .idx file, and the
+glossary-making macros write a .glo file, but they do it in almost
+exactly the same way. Reading the comments in the file leads one
+to believe that the \index feature was defined earlier, and the \glossary
+feature was added later as an adaptation of \index.
+
+I recently needed to create a third kind of file that I wanted to
+be handled similarly to the .idx and .glo files, so I abstracted
+the definitions of the index and glossary macros into a separate
+style file. Since I think of these as "generalized" index macros,
+I call it "genindex.sty". I'm rather surprised that this wasn't
+done at the time the \glossary feature was added, since it seems like
+a natural extension. It takes fewer lines of code to define a
+generalized structure and invoke it twice than it does to give
+separate definitions of \index and \glossary!
+
+As indicated in the comments in genindex.sty, the index and glossary
+macros of latex.tex could be specified as follows:
+
+ \newindex{index}{\@indexfile}{idx}{\indexentry}
+ \newindex{glossary}{\@glossaryfile}{glo}{\glossaryentry}
+
+Actually, there is one discrepancy: the definition of \glossary
+in latex.tex does not include the definition of \protect, which
+means that a \glossary entry in a moving argument (such as a footnote)
+can get you into trouble. Again, examining the comments in latex.tex
+suggests that \index was defined first, then \glossary was cloned from
+\index, and at a later date the \protect definition was added to \index
+as a bug fix but the fixer did not make the corresponding change
+to \glossary. In any case, all index-like structures defined by \newindex
+define \protect the way the standard \index macro does, so they are safe
+to use wherever \index may be used.
+
+(Incidentally, the eight # marks in a row in the body of \newindex are
+a record for me. \newindex defines macros like \makeindex, which
+define macros like \index, which define the macro \protect.
+This is the deepest nesting of macros defining macros I've ever
+had occasion to use.)
+
+The particular application that moved me to do this was the ability to
+make memos to myself in the source files for a book. I'm working with
+a co-author, and we both want to be able to place little notes in
+the source that will remind us of issues to consider as we develop the
+book, but we don't want theses notes to be visible in the typeset pages.
+We used to use comments, but it's easy to overlook comments in the source
+files. We each are especially prone to overlook the other's comments
+since we don't know where to expect them. By using the \memo macro we
+get all the memos written to a separate file, with each memo keyed to
+the page to which it applies. We can run the book and then read the .mem
+file to see the reminders we've made. Note that unlike the .idx and .glo
+files, the .mem file is not processed by makeindex or other utility and
+read back into LaTeX (although I've considered making a *separate* driver
+file that would read another document's .mem file and make a nice list
+of the memos). With the generalized index macros above it is easy to
+define the \memo macro:
+
+=============================================================================
+
+Note that I go ahead and execute \makememo within memo.sty, since I
+always want the \memo command to be active. Now I can place \memo{ENTRY}
+in the source and have \memoentry{ENTRY}{PAGENUM} in the .mem file with
+no effect on the typeset pages. (Well, no more effect than \index
+would have.)
+
+I offer this in hopes it will be useful to others.
+Comments and suggestions for improvement are welcome.
+
+By the way, if the \index and \glossary functions are to retain
+anything like their present form in the new, improved LaTeX descendants
+that are going to appear Real Soon Now, then I strongly suggest that
+this generalized approach be used. I think the fact that the original
+\index functionality has been adapted twice (\glossary and \memo)
+is evidence that a generalized capability would be useful.
+I'm sure that other LaTeX users will think (or have already thought) of
+additional uses for this idea.
+
+--Cameron Smith
+ cameron@symcom.math.uiuc.edu
+
+P.S. Archivists, please feel free to put the above in an archive in
+ whatever form you deem suitable.
+
+
diff --git a/macros/latex209/contrib/geomsty/Makefile b/macros/latex209/contrib/geomsty/Makefile
new file mode 100644
index 0000000000..79eee7f2b7
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/Makefile
@@ -0,0 +1,108 @@
+#
+# Makefile contributed by Steve Rumsby
+# and modified by Mark Phillips
+#
+
+# Where your TeX input files live
+TEXINPUTSDEST = /usr/local/lib/tex/inputs
+
+# Name of your Latex (for documentation)
+# Note: this must support NFSS in order for you to latex the manual;
+# otherwise print manual.ps
+LATEX = latex
+
+# Name of your DVI to PostScript converter, and
+# flags needed to process the manual
+DRIVER = dvips
+DRIVERFLAGS =
+
+# Where it keeps its support files
+PSDIR = /usr/local/lib/tex/dvips
+
+# System executable directory
+BINDIR = /u/geom/bin
+
+# Directory for Manual pages
+MANDIR = /u/geom/man/man1
+
+# Where perl lives
+PERL = /usr/local/bin/perl
+
+# Where you want to install the PostScript copy of the manual
+# ("manual.ps"). If you don't want to formally install this,
+# leave this definition blank.
+MANUALDIR = /u/geom/lib/geomsty
+
+# Pathname of directory where you want to install the auxiliary
+# programs geomfix and mathlabels. These are used by mathfig.
+AUXDIR=/u/geom/lib/geomsty
+
+# If your system doesn't support symbolic links you
+# could change this to "cp"
+LN = ln -s
+
+# Change this to "install" if you want
+CP = /bin/cp
+
+# You shouldn't have to change anything below here
+
+########################################################################
+
+SHELL=/bin/sh
+
+MANUALFILES = manual.ps
+
+all: mathlabels mathfig mathfig.1
+
+install: all
+ $(CP) *.sty *.chg $(TEXINPUTSDEST)
+ /bin/rm -f $(TEXINPUTSDEST)/driver.chg
+ $(LN) $(TEXINPUTSDEST)/$(DRIVER).chg $(TEXINPUTSDEST)/driver.chg
+ $(CP) mathfig $(BINDIR)
+ $(CP) mathlabels geomfix $(AUXDIR)
+ $(CP) math.pro illustrator.pro $(PSDIR)
+ $(CP) mathfig.1 $(MANDIR)
+ if [ "${MANUALDIR}" != "" ] ; then /bin/cp ${MANUALFILES} ${MANUALDIR} ; fi
+
+mathlabels: Makefile
+ /bin/rm -f mathlabels
+ (echo '#!$(PERL)'; sed 1d mathlabels.orig) > mathlabels
+ chmod 755 mathlabels
+
+mathfig: Makefile mathfig.orig
+ /bin/rm -f mathfig
+ sed -e 's|geomfix=geomfix|geomfix=${AUXDIR}/geomfix|' \
+ -e 's|mathlabels=mathlabels|mathlabels=${AUXDIR}/mathlabels|' \
+ < mathfig.orig > mathfig
+ chmod 755 mathfig
+
+mathfig.1: Makefile mathfig.1.orig
+ /bin/rm -f mathfig.1
+ sed -e 's|^geomfix$$|${AUXDIR}/geomfix|' \
+ -e 's|^mathlabels$$|${AUXDIR}/mathlabels|' \
+ < mathfig.1.orig > mathfig.1
+
+clean:
+ /bin/rm -f *~ #*#
+
+distclean: clean
+ /bin/rm -f *.dvi *.log *.lof *.aux *.bbl *.blg *.idx *.toc \
+ mathlabels mathfig mathfig.1 geomsty.tar.Z geomsty.shar
+
+manual.dvi: manual.tex manual.bib
+ ${LATEX} manual
+ bibtex manual
+ ${LATEX} manual
+ ${LATEX} manual
+
+manual.ps: manual.dvi
+ ${DRIVER} ${DRIVERFLAG} manual.dvi
+
+doc: manual.ps
+
+tar: distclean manual.ps
+ gnutar hcvfZ geomsty.tar.Z -C .. `sed '1,/^\** *CONTENTS/ d' README`
+
+shar: distclean manual.ps
+ (cd ..; shar -F -L95 -ogeomsty/geomsty.shar `sed '1,/^\** *CONTENTS/ d' README`)
+
diff --git a/macros/latex209/contrib/geomsty/PStorus.lab b/macros/latex209/contrib/geomsty/PStorus.lab
new file mode 100644
index 0000000000..89c8de7507
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/PStorus.lab
@@ -0,0 +1,4 @@
+\setlabel{a}{48.600000}{4.162104}{0.000000}{1.000000}
+\setlabel{b}{4.162104}{48.600000}{1.000000}{0.000000}
+\setlabel{a'}{48.600000}{93.037896}{0.000000}{-1.000000}
+\setlabel{b'}{93.037896}{48.600000}{-1.000000}{0.000000}
diff --git a/macros/latex209/contrib/geomsty/PStorus.ps b/macros/latex209/contrib/geomsty/PStorus.ps
new file mode 100644
index 0000000000..476859adf4
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/PStorus.ps
@@ -0,0 +1,82 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 0 0 97.20 97.20
+%%Creator: Mathematica
+%%EndComments
+MyDict begin
+/Mlmarg 0 72 mul def
+/Mrmarg 0 72 mul def
+/Mbmarg 0 72 mul def
+/Mtmarg 0 72 mul def
+/Mwidth 1.35 72 mul def
+/Mheight 1.35 72 mul def
+/Mtransform { } bind def
+/Mnodistort true def
+/Mfixwid false def
+/Mfixdash false def
+/Mrot 0 def
+%%AspectRatio: 1
+MathPictureStart
+/Courier findfont 10 scalefont setfont
+.04282 .91436 .04282 .91436 [
+[ 0 0 0 0 ]
+[ 1 1 0 0 ]
+] MathScale
+1 setlinecap
+1 setlinejoin
+n
+%%Object: Graphics
+[ ] 0 d
+0 g
+gs
+gr
+gs
+gs
+.4 Ma
+.04282 .04282 m
+.95718 .04282 l
+k
+.86774 .06183 m
+.95718 .04282 l
+.86774 .02381 l
+f
+gr
+gs
+.4 Ma
+.04282 .04282 m
+.04282 .95718 l
+k
+.02381 .86774 m
+.04282 .95718 l
+.06183 .86774 l
+f
+gr
+gs
+.4 Ma
+.04282 .95718 m
+.95718 .95718 l
+k
+.86774 .97619 m
+.95718 .95718 l
+.86774 .93817 l
+f
+gr
+gs
+.4 Ma
+.95718 .04282 m
+.95718 .95718 l
+k
+.93817 .86774 m
+.95718 .95718 l
+.97619 .86774 l
+f
+gr
+gr
+0 0 m
+1 0 l
+1 1 l
+0 1 l
+closepath
+clip
+n
+MathPictureEnd
+end
diff --git a/macros/latex209/contrib/geomsty/README b/macros/latex209/contrib/geomsty/README
new file mode 100644
index 0000000000..a3846d5b11
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/README
@@ -0,0 +1,75 @@
+This is the distribution directory for the "geom" style for LaTeX,
+which provides, among other things, the following features:
+
+- inclusion of PostScript figures, and of TeX text within figures
+- automatic creation of index entries and cross-references where appropriate
+- no need to worry about fragile commands in almost all situations
+- greater versatility in defining theorem-like environments
+- proofing aids such as version numbers and a running index
+
+The files listed below are part of the distribution. For details and
+installation instructions, print the file manual.ps and turn to
+Section 3. If the file does not print for any reason, look for the
+section Installation in manual.tex.
+
+All files in this distribution are
+
+Copyright 1992 Silvio Levy
+
+unless specified otherwise. You can make copies of these files and
+redistribute them for non-commercial purposes. If you make changes to
+any files (other than adapting the Makefile to your site), CHANGE THE
+NAMES of the changed files, and please let me know of any changes that
+may be of interest to a wider audience.
+
+This software is distributed without any warranty, express or implied.
+
+Silvio Levy
+The Geometry Center
+1300 South Second Street
+Minneapolis, MN 55454
+email: levy@geom.umn.edu
+
+************* CONTENTS OF DISTRIBUTION **************
+geomsty/Makefile
+geomsty/PStorus.lab
+geomsty/PStorus.ps
+geomsty/README
+geomsty/dvips.chg
+geomsty/geom.sty
+geomsty/geomar10.sty
+geomsty/geomar11.sty
+geomsty/geomar12.sty
+geomsty/geomart.sty
+geomsty/geombk10.sty
+geomsty/geombk11.sty
+geomsty/geombk12.sty
+geomsty/geombook.sty
+geomsty/geomenv.sty
+geomsty/geomeqns.sty
+geomsty/geomfig.sty
+geomsty/geomfix
+geomsty/geomfnt.sty
+geomsty/geomindx.sty
+geomsty/geompsfi.sty
+geomsty/illustrator.pro
+geomsty/manual.bib
+geomsty/manual.ps
+geomsty/manual.tex
+geomsty/math.pro
+geomsty/mathfig.orig
+geomsty/mathfig.1.orig
+geomsty/mathlabels.orig
+geomsty/multicol.sty
+geomsty/mainz/doc/doc.doc
+geomsty/mainz/doc/doc.bug
+geomsty/mainz/doc/newdoc.doc
+geomsty/mainz/doc/docstrip.doc
+geomsty/mainz/doc/readme.mz
+geomsty/mainz/doc/readme.mz0
+geomsty/mainz/doc/install.mz0
+geomsty/mainz/multicol/multicol.doc
+geomsty/mainz/multicol/multicol.bug
+geomsty/mainz/multicol/readme.mz
+geomsty/mainz/multicol/readme.mz1
+geomsty/mainz/multicol/install.mz1
diff --git a/macros/latex209/contrib/geomsty/dvips.chg b/macros/latex209/contrib/geomsty/dvips.chg
new file mode 100644
index 0000000000..6f32ef4fe1
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/dvips.chg
@@ -0,0 +1,59 @@
+% $Header: /u/levy/texts/geombook/RCS/dvips.chg,v 1.4 1993/01/13 15:50:36 levy Exp $
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% DRIVER-DEPENDENT DEFINITIONS %
+% %
+{\catcode`\p=12 \catcode`\t=12 \gdef\read@PT#1pt{#1}}
+\def\sp@topt#1#2{\psfig@dimen=#2sp \if\psfig@dimen=0pt \psfig@dimen=1sp\fi
+ \edef#1{\expandafter\read@PT \the\psfig@dimen}}
+\def\sp@tobp#1#2{\psfig@dimen=#2sp \if\psfig@dimen=0pt \psfig@dimen=1sp\fi
+ \expandafter\@tempdima\expandafter\read@PT \the\psfig@dimen bp
+ \advance\psfig@dimen-.5 \@tempdima \multiply\psfig@dimen 2
+ \edef#1{\expandafter\read@PT \the\psfig@dimen}}
+\def\ps@init{}
+\def\ps@begin{\sp@tobp\@tempa\@p@sbbllx \sp@tobp\@tempb\@p@sbblly
+ \sp@tobp\@tempc\@p@sbburx \sp@tobp\@tempd\@p@sbbury
+ \sp@tobp\@tempe{\@p@swidth0} \sp@tobp\@tempf{\@p@sheight0}
+ \special{PSfile=\@p@sfile\space llx=\@tempa\space lly=\@tempb\space
+ urx=\@tempc\space ury=\@tempd\space rwi=\@tempe\space rhi=\@tempf}}
+% rwi is the total width, in tenths of the units used for the
+% other dimensions (this is dvips's brain damage)
+\def\ps@prolog{\ifmathematica\special{header=math.pro}\fi
+ \ifillustrator\special{header=illustrator.pro}\fi}
+\def\ps@clip{} %
+\def\ps@include{} %
+\def\ps@postlog{} %
+\def\ps@end{} %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% $Log: dvips.chg,v $
+%Revision 1.4 1993/01/13 15:50:36 levy
+%expressed things in bp (correctly)
+%
+%Revision 1.3 1993/01/10 02:12:09 levy
+%*** empty log message ***
+%
+%Revision 1.2 92/06/10 12:44:13 levy
+%mathematica and illustrator dependences
+%
+%Revision 1.10 91/11/27 16:45:26 levy
+%removed path name from math.pro
+%
+%Revision 1.9 91/01/01 15:21:13 levy
+%checked in with -k by dbae at 91.01.12.17.41.23.
+%
+%Revision 1.9 91/01/01 15:21:13 levy
+%*** empty log message ***
+%
+%Revision 1.8 90/11/18 11:25:35 levy
+%*** empty log message ***
+%
+%Revision 1.7 90/11/18 11:19:34 levy
+%*** empty log message ***
+%
+% Revision 1.6 90/11/18 11:03:06 levy
+% *** empty log message ***
+
diff --git a/macros/latex209/contrib/geomsty/geom.sty b/macros/latex209/contrib/geomsty/geom.sty
new file mode 100644
index 0000000000..6622787b16
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geom.sty
@@ -0,0 +1,596 @@
+% $Header: /usr/home/levy/texts/geomsty/RCS/geom.sty,v 1.21 95/08/02 16:22:57 levy Exp Locker: levy $
+% NFSS2 mods 95/06/18 by J Rawnsley
+
+% Test for LaTeX2e
+\def\format@e{LaTeX2e}
+
+\ifx\fmtname\format@e
+ \ProvidesPackage{geom}[95/06/18]
+\fi
+
+\ifx\DeclareFontShape\@undefined
+\else
+ \let\normalshape\normalfont
+ \let\mediumseries\relax
+\fi
+
+%
+% This is the geom style master file, by Silvio Levy.
+% It contains modifications to latex.tex and lplain.tex.
+% LATEX VERSION 2.09 <14 January 1991>
+%
+\typeout{Reading Geometry Center style by Silvio Levy, $Revision: 1.21 $}
+\typeout{NFSS2 compatibility by J. Rawnsley, Maths Institute, Warwick 95/06/18}
+
+% Find out which style has been loaded (book or article).
+% If \chapter is undefined we assume the style is article, otherwise book.
+
+\def\@article{\@@article} \def\@book{\@@book}
+\@ifundefined{chapter}{\def\@style{\@@article}}{\def\@style{\@@book}}
+
+% Load an appropriate file with changes to book.sty or article.sty.
+
+\ifx\@style\@book \input geombook.sty \else \input geomart.sty \fi
+
+% Load in other definitions.
+
+\input geomenv.sty % environments
+\input geomfig.sty % figures
+\input geomfnt.sty % new fonts
+\input geomindx.sty % indexing macros
+\ifx\fmtname\format@e
+ \usepackage{multicol} % two-column formatting
+\else
+ \input multicol.sty % two-column formatting
+\fi
+% ****************************************
+% * USEFUL HACKS *
+% ****************************************
+%
+% \@@warning and \@warning don't need the word ``LaTeX''.
+%
+\def\@@warning#1{\typeout{Warning: #1.}}
+
+% **********************************************
+% * SPACING / LINE AND PAGE BREAKING *
+% **********************************************
+
+% Avoid the lack of spacing after a list when the first item is run-in.
+
+\def\endtrivlist{\if@newlist\@noitemerr\fi
+ \if@inlabel\indent\fi
+ \ifhmode\unskip \par\fi
+% \if@noparlist \else
+ \ifdim\lastskip >\z@ \@tempskipa\lastskip \vskip -\lastskip
+ \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip
+ \vskip\@tempskipa
+ \fi\@endparenv
+% \fi
+}
+\let\endcenter=\endtrivlist
+\let\endflushleft=\endtrivlist
+\let\endflushright=\endtrivlist
+\let\endverbatim=\endtrivlist
+\expandafter\let\csname endverbatim*\endcsname =\endtrivlist
+
+% ****************************************
+% * FILE HANDLING *
+% ****************************************
+%
+% Proofing is true by default.
+%
+\newif\ifproofing\proofingtrue
+\def\include#1{\ifproofing\@include#1 \else\input{#1.tex}\fi}
+\def\noproofing{\noexpand\proofingfalse}
+\def\@proofingfalse{\proofingfalse}
+\def\checkproofing{\ifx\@partlist\@proofingfalse\proofingfalse\fi}
+\def\includeonly#1{\@partswtrue\edef\@partlist{#1}\checkproofing}
+
+% ****************************************
+% * CROSS-REFERENCING MACROS *
+% ****************************************
+
+\let\@xf\expandafter
+%
+% The main differences between these macros and LaTeX's are that keys
+% are not expanded, and the first field in the record's value contains
+% the type of object referred to. For example,
+% \newlabel{square torus in space}{{problem 1.1.1}{5}}
+% This information is read at the time the record is formed
+% from the \object@type. Expansion of the key is inhibited by storing
+% it into the token list \@key, with everything protected by \noexpand's.
+%
+\def\object@type{??}
+\def\setlabeltype#1{\edef\object@type{#1}}
+\newtoks\@key
+\def\set@key#1{{\aftergroup\@key\aftergroup{\sanitize#1\endsanity}}}
+
+%
+% These are the user-level macros:
+%
+% \fullref{...} expands to theorem~3.7
+% \Fullref{...} expands to Theorem~3.7
+% \ref{...} expands to 3.7
+% \pageref{...} expands to 377
+
+\def\fullref{\@ref{\@xf\@car}}
+\def\Fullref{\@ref{\@xf\@xf\@xf\cap@first\@xf\@car}}
+\def\pageref{\@ref{\@xf\@cdr}}
+\def\ref{\@ref{\@xf\@xf\@xf\discard@first\@xf\@car}}
+\def\reftype{\@ref{\@xf\@xf\@xf\discard@second\@xf\@car}}
+\def\Reftype{\@ref{\@xf\@xf\@xf\@xf\@xf\@xf\@xf\discard@second
+ \@xf\@xf\@xf\cap@first\@xf\@car}}
+\def\cap@first#1{\uppercase{#1}}
+\def\discard@first#1~{}
+\def\discard@second#1~\preref{#1\@gobble}
+
+%
+% This is similar to \ref in LaTeX, but has two arguments: the second
+% is the key, which is not expanded; the first is an operator to be
+% applied to the value of the record.
+%
+\newtoks\@value
+\def\@ref#1{\@ifnextchar*{\@r@f{#1}}{\@r@f{#1}+}}
+\def\@r@f#1#2#3{\set@key{#3}\@ifundefined{r@\the\@key}%
+ {{\bf ??}\@warning{Reference `\expand@key' %on page \thepage\space
+ undefined}}%
+ {\@value=\@xf\@xf\@xf{\csname r@\the\@key\endcsname}#1\the\@value\@nil\null}%
+ \if#2*\refindex{#3} (#3)\else\refinvindex{#3}\fi}
+\def\expand@key{\@xf\empty\the\@key}
+
+\def\@lbibitem[#1]#2{\set@key{#2}\item[\@biblabel{#1}]\if@filesw
+ \xdef\@gtempa{\immediate\write\@auxout{\string\bibcite{\the\@key}{#1}}}
+ \@gtempa\fi\ignorespaces}
+
+%
+% Like \label in LaTeX, but follows the conventions explained at the
+% top of this file. The \label* variant creates a more comprehensive
+% index entry.
+%
+\def\preref#1{#1}
+\def\label{\@ifnextchar*{\l@bel}{\l@bel+}}
+\def\l@bel#1#2{\set@key{#2}\@bsphack\if@filesw
+ {\let\thepage\relax
+ \xdef\@gtempa{\write\@auxout{\string\newlabel{\the\@key}%
+ {{\object@type\string~\string\preref{\@currentlabel}}%
+ {\string\preref{\thepage}}}%
+ }}}\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack
+ \if#1*\labelindex{#2}\else\index{#2}\fi\ignorespaces}
+
+\def\newlabel{\bgroup\@sanitize\afterassignment\@readlabel\global\@key}
+\def\bibcite{\bgroup\@sanitize\afterassignment\@readbibcite\global\@key}
+\def\@readlabel{\egroup\r@adlabel r}
+\def\@readbibcite{\egroup\r@adlabel b}
+\def\r@adlabel#1#2{\@ifundefined{#1@\the\@key}{}%
+ {\@warning{Label `\expand@key' multiply defined}}%
+ \global\@namedef{#1@\the\@key}{#2}}
+
+%
+% sanitize
+%
+\def\citeseparator{,}
+\def\@citex[#1]#2{\set@key{#2}\if@filesw
+ \xdef\@gtempa{\immediate\write\@auxout{\string\citation{\the\@key}}}\@gtempa\fi
+ \let\@citea\@empty
+ \@xf\@cite\@xf{\@xf\@for\@xf\@citeb\@xf:\@xf=\the\@key\do
+ {\@citea\def\@citea{\citeseparator\penalty\@m\ }%
+ \def\@tempa##1##2\@nil{\edef\@citeb{\if##1\space##2\else##1##2\fi}}%
+ \expandafter\@tempa\@citeb\@nil
+ \@ifundefined{b@\@citeb}{{\reset@font\bf ?}\@warning
+ {Citation `\@citeb' %on page \thepage \space
+ undefined}}%
+ {\csname b@\@citeb\endcsname}}}{#1}}
+
+%
+% add a preref
+%
+\def\@cite#1#2{\preref{[{#1\if@tempswa , #2\fi}]}}
+
+\def\nocite#1{\set@key{#1}\@bsphack\if@filesw
+ \xdef\@gtempa{\immediate\write\@auxout{\string\citation{\the\@key}}}\@gtempa\fi
+ \@esphack}
+
+\def\@testdef #1#2#3{\set@key{#2}\def\@tempa{#3}%
+ \@xf\ifx\csname #1@\the\@key\endcsname\@tempa\else\@tempswatrue\fi}
+
+\def\\{\let\stoken= } \\
+\def\sanitize{\futurelet\next\sanswitch}
+\def\sanswitch{\let\@tempa\relax \ifx\next\endsanity \let\@tempa\endsanity
+ \else\ifcat\noexpand\next\stoken\aftergroup\space\let\@tempa\eat
+ \else\ifcat\noexpand\next\bgroup\aftergroup{\let\@tempa\eat
+ \else\ifcat\noexpand\next\egroup\aftergroup}\let\@tempa\eat
+ \else\let\@tempa\copytoken\fi\fi\fi\fi \@tempa}
+\def\eat{\afterassignment\sanitize \let\next= }
+\long\def\copytoken#1{%
+ \ifcat\noexpand#1##\aftergroup\string\aftergroup\string##\aftergroup\string
+ \else\ifcat\noexpand#1\noexpand~\aftergroup\string
+ \else\ifcat\noexpand#1\relax\aftergroup\str@ng \fi\fi\fi
+ \aftergroup#1\sanitize}
+\def\endsanity\endsanity{}
+\def\str@ng#1{\string#1\expandafter\if@secondletter\string #1\next\nex}
+\def\if@secondletter#1#2#3\nex{\ifx #2\next\else\ifnum`#2<`A \else
+ \ifnum`#2<`Z \space\else\ifnum`#2<`a \else\ifnum`#2<`z \space\fi\fi\fi\fi\fi}
+
+% Labels are automatically added to theorems, section headings and the
+% like if \autolabel is true.
+
+\newif\ifautolabel\autolabeltrue
+
+% ****************************************
+% * ENVIRONMENTS *
+% ****************************************
+
+\long\def\@writefile#1#2{\@ifundefined{tf@#1}{}{
+\edef\@tempa{\immediate\write\csname tf@#1\endcsname}
+{\aftergroup\@tempa\aftergroup{\sanitize #2\endsanity}}}}
+
+% **********************************************
+% * MATH ENVIRONMENTS *
+% **********************************************
+
+%% following RmS 91/09/29: \reset@font added.
+
+\def\@eqnnum{{\reset@font\rm (\theequation)}}
+
+%
+% set object type
+%
+\def\equation{$$ % $$ BRACE MATCHING HACK
+ \def\object@type{equation}\refstepcounter{equation}}
+
+%% following RmS 92/01/10: put \hbox around \@eqnnum
+
+\def\endequation{\eqno \hbox{\@eqnnum}% $$ BRACE MATCHING HACK
+$$\global\@ignoretrue}
+
+\def\eqnarray{\def\object@type{equation}%
+ \stepcounter{equation}\edef\@currentlabel{\theequation}%
+\global\@eqnswtrue\m@th
+\global\@eqcnt\z@\tabskip\@centering\let\\\@eqncr
+$$\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\@eqncr{{\ifnum0=`}\fi\@ifstar{\global\@eqpen\@M
+ \@yeqncr}{\global\@eqpen\interdisplaylinepenalty \@yeqncr}%
+ \edef\@currentlabel{\theequation}}
+
+%
+% allow equations to be numbered with other environments
+%
+
+\def\equationwith#1{%
+ \@xf\edef\@xf\c@equation\@xf{\csname c@#1\endcsname}%
+ \@xf\let\@xf\theequation\csname the#1\endcsname
+}
+
+%
+% Bring back \eqalign from plain TeX (for less than full-width alignments)
+%
+\def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
+ \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
+ \crcr#1\crcr}}\,}
+
+% ****************************************
+% * THE LIST ENVIRONMENT *
+% ****************************************
+
+% make the \listparindent non-zero
+
+\def\list#1#2{\ifnum \@listdepth >5\relax \@toodeep
+ \else \global\advance\@listdepth\@ne \fi
+ \rightmargin \z@ \listparindent.8\parindent \itemindent\z@
+ \csname @list\romannumeral\the\@listdepth\endcsname
+ \def\@itemlabel{#1}\let\makelabel\@mklab \@nmbrlistfalse #2\relax
+ \@trivlist
+ \parskip\parsep \parindent\listparindent
+ \advance\linewidth -\rightmargin \advance\linewidth -\leftmargin
+ \advance\@totalleftmargin \leftmargin
+ \parshape \@ne \@totalleftmargin \linewidth
+ \ignorespaces}
+
+% for bibliography
+\def\@mklab#1{#1\hskip 0pt plus .0001fil\relax}
+
+% Use \unhbox instead of \box for labels like theorems etc.
+% Add normalshape
+% Removed a \penalty0 to avoid line ending with blank space
+%
+% to make part (a) of an enumerate that immediate follows a label
+% start on a fresh line, change the last line of \@item to:
+%
+%\def\@item[#1]{\if@noparitem \@donoparitem
+% ...
+% \hskip \labelsep}\vrule width 0pt \ignorespaces}
+%
+\def\@item[#1]{\if@noparitem \@donoparitem
+ \else \if@inlabel \indent \par \fi
+ \ifhmode \unskip\unskip \par \fi
+ \if@newlist \if@nobreak \@nbitem \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep \addvspace{-\parskip}\fi
+ \else \addpenalty\@itempenalty \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+\fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+ \if@inlabel\global\@inlabelfalse \hskip -\parindent \unhbox\@labels
+% \penalty\z@ \fi
+ \fi
+ \everypar{}}\global\@nobreakfalse
+\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+\setbox\@tempboxa\hbox{\makelabel{#1}}%
+%\setbox\@tempboxa\hbox{\makelabel{\normalshape #1}}% this would kill \sc
+\global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+ \hskip -\labelwidth \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \unhbox\@tempboxa
+ \else \hbox to\labelwidth {\makelabel{\normalshape #1}}\fi
+ \hskip \labelsep}\ignorespaces}
+
+% ****************************************
+% * ITEMIZE AND ENUMERATE *
+% ****************************************
+
+% Save \@currentlabel to allow correct label in the cases like this:
+%
+% \begin{theorem}
+% \begin{equation}
+% \end{equation}
+% \begin{enumerate}
+% \label
+%
+
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{\hss\llap{\normalshape ##1}}}\fi
+ \let\@@currentlabel\@currentlabel}
+
+% commented out Jan 11 93; had been added to version 1.14, but I have no
+% idea how it was supposed to work, or what unrobustness it was trying
+% to solve (see log). With this code, \@@currentlabel was never assigned.
+%
+% \let\@savecurrentlabel\@currentlabel}
+%
+%\@ifundefined{@@currentlabel}{\@currentlabel}{\@savecurrentlabel}
+
+% ****************************************
+% * THEOREM ENVIRONMENTS *
+% ****************************************
+
+% See geomenv.sty
+
+% *****************************************
+% * SECTIONING *
+% *****************************************
+
+% Allow up to \presection at bottom of page before new section
+% to encourage section to start on fresh page
+
+\newskip\presection \presection 0pt plus 10ex \relax
+
+\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \advance\@tempskipa by\presection
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}%
+ \allowbreak\vskip -\presection \fi \@ifstar
+ {\@ssect{#1}{#2}{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+% Add a . after section number instead of skipping 1em
+% Mess with \addcontentsline
+% Automatic labels
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\def\object@type{#1}%
+ \ifnum #2>\c@secnumdepth\def\@svsec{}\def\@tempb{}%
+ \else\refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname. }%
+ \edef\@tempb{\noexpand\numberline{\csname the#1\endcsname}} \fi
+ \@tempskipa #5\relax
+ \def\@tempa{\addcontentsline{toc}{#1}}%
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \expandafter\@tempa\expandafter{\@tempb #7}%
+ \ifautolabel\label*{#8}\fi
+ \else
+ \def\@svsechd{#6\hskip #3\relax
+ \@svsec #8\csname #1mark\endcsname {#7}%
+ \expandafter\@tempa\expandafter{\@tempb #7}%
+ \ifautolabel\label*{#8}\fi}\fi
+ \@xsect{#5}}
+
+% Add automatic content line and label
+
+\def\@ssect#1#2#3#4#5#6#7{%
+ \ifnum #2>\c@secnumdepth\def\@tempb{}%
+ \else \def\@tempb{\numberline{}}\fi
+ \@tempskipa #5\relax
+ \def\@tempa{\addcontentsline{toc}{s#1}}%
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3}{\interlinepenalty \@M #7\par}%
+ \endgroup
+ \csname s#1mark\endcsname{#7}%
+ \ifstarredcontents\expandafter\@tempa\expandafter{\@tempb #7}\fi
+ \ifautolabel\label*{#7}\fi
+ \else
+ \def\@svsechd{#6\hskip #3\relax #7%
+ \csname s#1mark\endcsname {#7}%
+ \ifautolabel\label*{#7}\fi}\fi
+ \@xsect{#5}}
+
+\newif\ifstarredcontents\starredcontentstrue
+\def\ssubsectionmark#1{}
+\def\ssubsubsectionmark#1{}
+\def\sparagraphmark#1{}
+\def\ssubparagraphmark#1{}
+
+% *****************************************
+% * TABLE OF CONTENTS, ETC. *
+% *****************************************
+
+% Don't expand macros when writing lines for the table of contents.
+
+\def\addcontentsline#1#2#3{\if@filesw \begingroup
+\set@key{#3}%
+\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
+ {\let\thepage\relax
+\xdef\@gtempa{\write \@auxout{\string\@writefile{#1}{\noexpand\string
+ \noexpand\contentsline{#2}{\the\@key}{\thepage}}}}\@gtempa}
+ \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+
+\long\def\addtocontents#1#2{\if@filesw \begingroup
+\set@key{#2}%
+\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
+\edef\@tempa{\write \@auxout {\string\@writefile{#1}{\the\@key}}}\@tempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+
+% ****************************************
+% * FLOATS *
+% ****************************************
+
+% Make marginal pars tiny and ragged right
+
+\long\def\@savemarbox#1#2{\global\setbox#1\vtop{\hsize\marginparwidth
+ \@parboxrestore\marginparstyle #2}}
+
+\def\marginparstyle{\tiny\normalshape\mediumseries\raggedright}
+
+% ****************************************
+% * INITIAL DECLARATION COMMANDS *
+% ****************************************
+
+% Don't expand macros in marks.
+
+\newtoks\@mark
+\def\markboth#1#2{{\global\@mark={{#1}{#2}}{%
+ \mark{\the\@mark}}\if@nobreak\ifvmode\nobreak\fi\fi}}
+
+\def\markbothsame#1{{\global\@mark={{#1}{#1}}{%
+ \mark{\the\@mark}}\if@nobreak\ifvmode\nobreak\fi\fi}}
+
+\def\markright#1{{\expandafter\@markright\the\@mark
+ {#1}\mark{\the\@mark}}\if@nobreak\ifvmode\nobreak\fi\fi}
+
+\def\@markright#1#2#3{\global\@mark{{#1}{#3}}}
+
+\@mark{{}{}}
+
+% ****************************************
+% * OUTPUT *
+% ****************************************
+
+% CHECK if this bug really has disappeared.
+% the two lines after ``here was the bug''
+% avoid disappearing \write's before a \marginpar
+% at the top of a page (SL 900302). The bug is exemplified by
+% \documentstyle{article}
+% \begin{document}
+% \label{foo}\marginpar{foo}
+% \end{document}
+%
+\def\@specialoutput{\ifnum\outputpenalty > -\@Mii
+ \@doclearpage
+ \else
+ \ifnum \outputpenalty <-\@Miii
+ \ifnum\outputpenalty<-\@MM \deadcycles\z@\fi
+ \global\setbox\@holdpg\vbox{\unvbox\@cclv}%
+ \else % here was the bug
+ \ifdim\ht\@cclv=\pagegoal\else
+ \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa\fi
+ \setbox\@tempboxa\box\@cclv
+ \@pagedp\dp\@holdpg \@pageht\ht\@holdpg
+ \unvbox\@holdpg
+ \@next\@currbox\@currlist{\ifnum\count\@currbox >\z@
+ \ifvoid\footins\else\advance\@pageht\ht\footins
+ \advance\@pageht\skip\footins \advance\@pagedp\dp\footins
+ \insert\footins{\unvbox\footins}\fi
+ \@addtocurcol\else
+ \ifvoid\footins\else\insert\footins{\unvbox\footins}\fi
+ \@addmarginpar\fi}\@latexbug
+ \ifnum \outputpenalty <\z@ \penalty\interlinepenalty\fi
+ \fi\fi}
+
+% Avoid headers on blank pages
+\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
+ \thispagestyle{plain}\hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
+
+% $Log: geom.sty,v $
+%Revision 1.21 95/08/02 16:22:57 levy
+%introduced cite separator
+%
+%Revision 1.20 95/07/18 18:19:57 levy
+%\normalshape migrated from \@item to \enumerate, so \sc will work w/
+%\description, say
+%
+%Revision 1.19 95/07/03 14:08:49 levy
+%NFSS2 changes by John Rawnsley
+%
+%Revision 1.19 95/07/03 14:07:58 levy
+%*** empty log message ***
+%
+%Revision 1.17 93/08/04 10:00:53 levy
+%fixed problem with \ssectionmark (so running heads for Bibliography etc.
+%are correct).
+%
+%Revision 1.16 93/01/31 16:15:20 levy
+%created \marginparstyle
+%
+%Revision 1.16 93/01/12 01:50:02 levy
+%*** empty log message ***
+%
+%Revision 1.15 1992/08/25 19:53:57 levy
+%fixed \@mklab (previous fix was nonsense)
+%
+%Revision 1.14 92/08/25 19:33:50 levy
+%@@currentlabel more robust
+%
+%Revision 1.13 92/07/31 09:50:26 levy
+%redefine \@mklab
+%
+%Revision 1.12 92/07/17 13:44:12 levy
+%*** empty log message ***
+%
+%Revision 1.11 92/07/13 21:54:14 levy
+%further cleaned up the environments
+%
+%Revision 1.10 92/07/13 11:11:48 levy
+%*** empty log message ***
+%
+%Revision 1.9 92/07/13 08:57:20 levy
+%changes to geomenv.sty
+%
+%Revision 1.8 1992/07/06 19:04:42 levy
+%sanitize \bibcite, \cite
+%
+%Revision 1.7 92/06/26 18:46:57 levy
+%\reftype
+%
+%Revision 1.6 92/06/03 11:25:59 levy
+%*** empty log message ***
+%
+%Revision 1.5 92/04/16 12:58:26 levy
+%*** empty log message ***
+%
+%Revision 1.4 92/04/07 09:09:03 levy
+%*** empty log message ***
+%
+%Revision 1.3 1992/03/21 02:37:06 levy
+%*** empty log message ***
+%
+%Revision 1.2 1992/03/20 22:39:40 levy
+%*** empty log message ***
+%
+%Revision 1.1 1992/03/20 19:09:34 levy
+%Initial revision
+%
+
diff --git a/macros/latex209/contrib/geomsty/geomar10.sty b/macros/latex209/contrib/geomsty/geomar10.sty
new file mode 100644
index 0000000000..620e34957e
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomar10.sty
@@ -0,0 +1,142 @@
+% $Header: /u/levy/texts/geombook/RCS/geomar10.sty,v 1.5 1994/06/14 21:49:20 levy Exp levy $
+
+%
+% This is the geom style art10 file, by Silvio Levy.
+% It contains modifications to art10.sty of 22 Dec 87
+%
+% \typeout{Reading geomart10.sty $Revision: 1.5 $ (changes to art10.sty)}
+
+% make the \parsep 0pt
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+ \abovedisplayskip 9pt plus2pt minus4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 0pt plus2.5pt
+ \belowdisplayshortskip 5pt plus2.5pt minus2.5pt
+ \def\@listi{\leftmargin\leftmargini \parsep 0pt
+ \itemsep 2.5pt plus 2pt minus 0pt
+ \topsep 5pt plus 2pt minus 2pt}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+ \abovedisplayskip 7.2pt plus 2pt minus 4pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt%
+ \belowdisplayshortskip 4pt plus 2pt minus 2pt
+ \def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+ \parsep 0pt
+ \topsep 4pt plus 2pt minus 2pt
+ \itemsep 2pt plus 1pt minus 1pt}}
+
+% Make chapter and section heads less huge
+
+\let\chapheadsize=\LARGE
+\let\huge=\Large
+\let\Large=\large
+
+% Increase the page size
+
+\textwidth 5.5in \oddsidemargin .6in \evensidemargin .4in
+
+\textheight = 44\baselineskip \advance\textheight by \topskip \topmargin -.25in
+
+% Increase the parindent
+
+\parindent 20pt
+
+% Following change commented out 940614 for the following imperfectly
+% understood reason. When the partopsep is NOT set here, it is zero
+% at the beginning of a run (even though defined to be 3 +1 -2 in
+% art10.sty). When it is set here, it is nonzero, and breaks the
+% footnotes on the first page of amsart.sty.
+
+% Extra vertical space, in addition to
+% \parskip and \topsep, added when user
+% leaves blank line before environment.
+% (Changed from 3 +1 -2)
+
+%\partopsep 2pt plus 1pt minus 1pt
+
+% mess with \addcontentsline; \chapheadsize instead of \Huge
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-1\relax % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \def\@tempa{\addcontentsline{toc}{part}} %
+ \expandafter\@tempa\expandafter{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ {\centering
+ \ifnum \c@secnumdepth >-1\relax % IF secnumdepth > -1
+ \Large\bf Part \thepart % THEN Print 'Part' and number
+ \par\nobreak % in \Large bold.
+ \fi % FI
+ \chapheadsize \bf %
+ #2\markboth{}{}\par}
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+\def\@spart#1{{\centering
+ \chapheadsize \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Normalize according to \parindent
+
+\leftmargini\parindent
+\listparindent .8\parindent
+\leftmarginii .8\parindent
+\leftmarginiii .8\parindent
+\leftmarginiv .8\parindent
+\leftmarginv .8\parindent
+\leftmarginvi .8\parindent
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+% Make \parsep 0
+
+\def\@listI{\leftmargin\leftmargini
+ \parsep 0pt
+ \topsep 8pt plus 3pt minus 4pt%
+ \itemsep 4pt plus 2pt minus 1pt}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4pt plus 2pt minus 1pt
+ \itemsep 2.5pt plus \p@ minus \p@
+ \parsep \z@}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep \p@ plus \z@ minus \p@
+ \itemsep \topsep}
+
+% $Log: geomar10.sty,v $
+%Revision 1.5 1994/06/14 21:49:20 levy
+%*** empty log message ***
+%
+%Revision 1.4 1994/06/14 21:48:58 levy
+%*** empty log message ***
+%
+%Revision 1.3 1994/06/14 21:48:37 levy
+%*** empty log message ***
+%
+%Revision 1.2 1993/12/21 05:16:58 levy
+%corrected \footnotesize
+%
+%Revision 1.1 92/07/11 22:28:19 levy
+%Initial revision
+%
+%Revision 1.1 92/04/07 09:09:06 levy
+%Initial revision
+%
+%Revision 1.1 1992/03/20 22:38:55 levy
+%Initial revision
+%
diff --git a/macros/latex209/contrib/geomsty/geomar11.sty b/macros/latex209/contrib/geomsty/geomar11.sty
new file mode 100644
index 0000000000..05e1601e7e
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomar11.sty
@@ -0,0 +1,130 @@
+% $Header: /u/levy/texts/geombook/RCS/geomar11.sty,v 1.2 1994/06/14 21:49:20 levy Exp levy $
+
+%
+% This is the geom style art11 file, by Silvio Levy.
+% It contains modifications to art11.sty of 22 Dec 87
+%
+% \typeout{Reading geomart11.sty $Revision: 1.2 $ (changes to art11.sty)}
+
+% make the \parsep 0pt
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 0pt plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt
+ \def\@listi{\leftmargin\leftmargini \parsep 0pt
+ \itemsep 3pt plus 2pt minus 0pt
+ \topsep 6pt plus 2pt minus 2pt}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+ \abovedisplayskip 8pt plus 2pt minus 4pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt%
+ \belowdisplayshortskip 4pt plus 2pt minus 2pt
+ \def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+ \parsep 0pt
+ \topsep 4pt plus 2pt minus 2pt
+ \itemsep 2pt plus 1pt minus 1pt}}
+
+% Make chapter and section heads less huge
+
+\let\chapheadsize=\LARGE
+\let\huge=\Large
+\let\Large=\large
+
+% Increase the page size
+
+\textwidth 5.5in \oddsidemargin .6in \evensidemargin .4in
+
+\textheight = 44\baselineskip \advance\textheight by \topskip \topmargin -.25in
+
+% Increase the parindent
+
+\parindent 20pt
+
+% Following change commented out 940614 for the following imperfectly
+% understood reason. When the partopsep is NOT set here, it is zero
+% at the beginning of a run (even though defined to be 3 +1 -2 in
+% art11.sty). When it is set here, it is nonzero, and breaks the
+% footnotes on the first page of amsart.sty.
+
+% Extra vertical space, in addition to
+% \parskip and \topsep, added when user
+% leaves blank line before environment.
+% (Changed from 3 +1 -2)
+
+%\partopsep 2pt plus 1pt minus 1pt
+
+% mess with \addcontentsline; \chapheadsize instead of \Huge
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-1\relax % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \def\@tempa{\addcontentsline{toc}{part}} %
+ \expandafter\@tempa\expandafter{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ {\centering
+ \ifnum \c@secnumdepth >-1\relax % IF secnumdepth > -1
+ \Large\bf Part \thepart % THEN Print 'Part' and number
+ \par\nobreak % in \Large bold.
+ \fi % FI
+ \chapheadsize \bf %
+ #2\markboth{}{}\par}
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+\def\@spart#1{{\centering
+ \chapheadsize \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Normalize according to \parindent
+
+\leftmargini\parindent
+\listparindent .8\parindent
+\leftmarginii .8\parindent
+\leftmarginiii .8\parindent
+\leftmarginiv .8\parindent
+\leftmarginv .8\parindent
+\leftmarginvi .8\parindent
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+% Make \parsep 0
+
+\def\@listI{\leftmargin\leftmargini
+ \parsep 0pt
+ \topsep 9pt plus 3pt minus 5pt%
+ \itemsep 4.5pt plus 2pt minus 1pt}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5pt plus 2pt minus 1pt
+ \itemsep 2.5pt plus \p@ minus \p@
+ \parsep \z@}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep \p@ plus \z@ minus \p@
+ \itemsep \topsep}
+
+% $Log: geomar11.sty,v $
+%Revision 1.2 1994/06/14 21:49:20 levy
+%*** empty log message ***
+%
+%Revision 1.1 92/04/07 09:09:06 levy
+%Initial revision
+%
+%Revision 1.1 1992/03/20 22:38:55 levy
+%Initial revision
+%
diff --git a/macros/latex209/contrib/geomsty/geomar12.sty b/macros/latex209/contrib/geomsty/geomar12.sty
new file mode 100644
index 0000000000..27f3c9a4f7
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomar12.sty
@@ -0,0 +1,132 @@
+% $Header: /u/levy/texts/geombook/RCS/geomar12.sty,v 1.3 1994/06/14 21:49:20 levy Exp levy $
+
+%
+% This is the geom style art12 file, by Silvio Levy.
+% It contains modifications to art12.sty of 22 Dec 87
+%
+% \typeout{Reading geomart12.sty $Revision: 1.3 $ (changes to art12.sty)}
+
+% make the \parsep 0pt
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+\def\@listi{\leftmargin\leftmargini \parsep 0pt
+ \itemsep 4.5pt plus 2pt minus 0pt
+ \topsep 9pt plus 3pt minus 5pt}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 0pt plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt
+ \def\@listi{\leftmargin\leftmargini \parsep 0pt
+ \itemsep 3pt plus 2pt minus 0pt
+ \topsep 6pt plus 2pt minus 2pt}}
+
+% Make chapter and section heads less huge
+
+\let\chapheadsize=\LARGE
+\let\huge=\Large
+\let\Large=\large
+
+% Increase the page size
+
+\textwidth 5.5in \oddsidemargin .6in \evensidemargin .4in
+
+\textheight = 44\baselineskip \advance\textheight by \topskip \topmargin -.25in
+
+% Increase the parindent
+
+\parindent 20pt
+
+% Following change commented out 940614 for the following imperfectly
+% understood reason. When the partopsep is NOT set here, it is zero
+% at the beginning of a run (even though defined to be 3 +2 -2 in
+% art10.sty). When it is set here, it is nonzero, and breaks the
+% footnotes on the first page of amsart.sty.
+
+% Extra vertical space, in addition to
+% \parskip and \topsep, added when user
+% leaves blank line before environment.
+% (Changed from 3 +2 -2)
+
+%\partopsep 2pt plus 1pt minus 1pt
+
+% mess with \addcontentsline; \chapheadsize instead of \Huge
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-1\relax % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \def\@tempa{\addcontentsline{toc}{part}} %
+ \expandafter\@tempa\expandafter{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ {\centering
+ \ifnum \c@secnumdepth >-1\relax % IF secnumdepth > -1
+ \Large\bf Part \thepart % THEN Print 'Part' and number
+ \par\nobreak % in \Large bold.
+ \fi % FI
+ \chapheadsize \bf %
+ #2\markboth{}{}\par}
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+\def\@spart#1{{\centering
+ \chapheadsize \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Normalize according to \parindent
+
+\leftmargini\parindent
+\listparindent .8\parindent
+\leftmarginii .8\parindent
+\leftmarginiii .8\parindent
+\leftmarginiv .8\parindent
+\leftmarginv .8\parindent
+\leftmarginvi .8\parindent
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+% Make \parsep 0
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep 10pt plus 4pt minus 6pt%
+ \itemsep 5pt plus 2.5pt minus 1pt
+ \parsep \z@}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus \p@
+ \itemsep 2.5pt plus \p@ minus \p@
+ \parsep \z@}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus \p@ minus \p@
+ \parsep \z@ \partopsep \p@ plus \z@ minus \p@
+ \itemsep \topsep}
+
+% $Log: geomar12.sty,v $
+%Revision 1.3 1994/06/14 21:49:20 levy
+%*** empty log message ***
+%
+%Revision 1.2 1994/06/14 21:48:58 levy
+%*** empty log message ***
+%
+%Revision 1.1 92/04/07 09:09:07 levy
+%Initial revision
+%
+%Revision 1.1 1992/03/20 22:38:55 levy
+%Initial revision
+%
diff --git a/macros/latex209/contrib/geomsty/geomart.sty b/macros/latex209/contrib/geomsty/geomart.sty
new file mode 100644
index 0000000000..3cf2d58765
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomart.sty
@@ -0,0 +1,193 @@
+% $Header: /a/tampa/h/tampa_a/fac/levy/texts/geombook/RCS/geomart.sty,v 1.7 94/07/22 09:55:30 levy Exp Locker: levy $
+
+%
+% This is the geom style article file, by Silvio Levy.
+% It contains modifications to article.sty of <16 Mar 88>.
+%
+% \typeout{Reading geomart.sty $Revision: 1.7 $ (changes to article.sty)}
+
+% Marginpars go on right side of page.
+
+\@mparswitchfalse
+
+% Input size-dependent information. \@ptsize.sty is defined in book.sty.
+
+\input geomar1\@ptsize.sty\relax
+
+% Layout parameters
+
+\tolerance 1000
+\clubpenalty 10000
+\widowpenalty 10000
+\hfuzz=.1pt
+
+% First two levels of enumerations are (a) and (i), respectively,
+% rather than 1. and (a).
+
+\let\@@currentlabel\relax %assign initial value
+
+\def\labelenumi{\theenumi}
+\def\theenumi{(\alph{enumi})}
+\def\p@enumi{\@@currentlabel}
+
+\def\labelenumii{\theenumii}
+\def\theenumii{(\roman{enumii})}
+\def\p@enumii{\@@currentlabel}
+
+\def\p@enumiii{\@@currentlabel}
+
+\def\p@enumiv{\@@currentlabel}
+
+% Less space around contents of \fbox (2pt instead of 3pt)
+
+\fboxsep = 2pt
+
+% No explicit \@mkboth needed in \tableofcontents
+% marks are automatically added by \section*
+
+\@ifundefined{contentsname}{\def\contentsname{Contents}}{}
+\def\tableofcontents{{\starredcontentsfalse\section*{\contentsname}\@starttoc{toc}}}
+
+% Contents line for part
+
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2em plus 1pt} % space above part line
+ \begingroup
+ \def\\{\unskip\ \ignorespaces} % deal with \\ in chapter titles --SL
+ \@tempdima 3em % width of box holding part number, used by
+ \parindent \z@ %% \numberline
+ \rightskip \@pnumwidth plus 3em % allow ragged right
+ \parfillskip -\rightskip % when line wraps around --SL
+ \hangindent 1.5em % hangindent is same as l@section below --SL
+ {\bf % set line in boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak % Never break after part entry
+ \endgroup}
+
+% Treat contents entry for section same as the others
+
+\def\l@section{\@dottedtocline{1}{0em}{2.3em}}
+\def\l@subsection{\@dottedtocline{2}{2.3em}{3.2em}}
+\def\l@subsubsection{\@dottedtocline{3}{5.5em}{4.1em}}
+\def\l@paragraph{\@dottedtocline{4}{9.6em}{5em}}
+\def\l@subparagraph{\@dottedtocline{5}{14.6em}{6em}}
+
+\def\l@ssection{\@dottedtocline{1}{0em}{0em}}
+\def\l@ssubsection{\@dottedtocline{2}{2.3em}{0em}}
+\def\l@ssubsubsection{\@dottedtocline{3}{5.5em}{0em}}
+\def\l@sparagraph{\@dottedtocline{4}{9.6em}{0em}}
+\def\l@ssubparagraph{\@dottedtocline{5}{14.6em}{0em}}
+
+% No explicit \@mkboth needed in \listoffigures \listoftables \thebibliography
+% marks are automatically added by \section*
+
+\@ifundefined{listfigurename}{\def\listfigurename{List of Figures}}{}
+\@ifundefined{listtablename}{\def\listtablename{List of Tables}}{}
+\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}}
+\def\listoftables{\section*{\listtablename}\@starttoc{lot}}
+
+% no indentation for figure contents line, since there are
+% no higher-level entries
+
+\def\l@figure{\@dottedtocline{1}{0em}{2.3em}}
+\let\l@table\l@figure
+
+\@ifundefined{refname}{\def\refname{References}}{}
+\def\thebibliography#1{\section*{\refname}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+% Index uses two columns and smaller type.
+
+\@ifundefined{indexname}{\def\indexname{Index}}{}
+\def\theindex{\begingroup\section*{\indexname}\small
+ \parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem
+ \begin{multicols}2}
+\def\endtheindex{\end{multicols}\endgroup}
+
+\def\glo#1{${}^{\dagger}$#1\index{\dag #1}}
+
+\@ifundefined{glossaryname}{\def\glossaryname{Glossary}}{}
+\newenvironment{theglossary}%
+ {\begingroup\section*{\glossaryname}\small
+ \begin{multicols}2}%
+ {\end{multicols}\endgroup}
+\def\entry{\medbreak\@ifnextchar[{\entry@}{\entry@@}}
+\def\entry@@#1{\par\noindent{\bf #1.}\enspace\ignorespaces}
+\def\entry@[#1]#2{\par\noindent{\bf #2} #1.\enspace\ignorespaces}
+
+% Indentation in index is smaller (12pt instead of 40pt)
+
+\def\@idxitem{\par\hangindent 12pt}
+
+% Allow more of the page to be taken by figures.
+
+\def\bottomfraction{.7}
+\def\floatpagefraction{.7}
+
+% Captions at set with a width somewhat smaller than the main text width
+
+\newdimen\@captionmargin\@captionmargin=\parindent
+\newdimen\@captionwidth\@captionwidth=\hsize
+\advance\@captionwidth by -2\@captionmargin
+
+% left and right footers (normally set by RCS)
+
+\def\leftfoot{{}}
+\def\rightfoot{{}}
+
+% Definition of 'headings' page style.
+
+\def\ps@headings{\let\@mkboth\markboth
+ \def\@oddfoot{\ifproofing\leftfoot\hfil\rightfoot\unskip\else\hfil\fi}
+ \def\@evenfoot{\ifproofing\leftfoot\hfil\rightfoot\unskip\else\hfil\fi}
+ \def\@evenhead{\footnotesize\rm\thepage\hfil\leftmark}% Left heading.
+ \def\@oddhead{\footnotesize\rm\hbox{}\rightmark\hfil\thepage}%Right heading
+ \def\ssectionmark##1{\markbothsame{##1}}%
+ \def\sectionmark##1{{% Expand the \ifnum, not the ##1
+ \edef\@tempa{\ifnum \c@secnumdepth >\z@ \thesection. \fi}%
+ \expandafter \markbothsame \expandafter{\@tempa ##1}}}}
+
+\def\ps@plain{\let\@mkboth\markboth
+ \def\@oddfoot{\ifproofing\leftfoot\hfil\rightfoot\else\hfil\fi}%
+ \def\@evenfoot{\ifproofing\leftfoot\hfil\rightfoot\else\hfil\fi}%
+ \def\@evenhead{\hfil}\def\@oddhead{\hfil}}
+
+% Put the new \ps@headings into effect.
+
+\ps@headings
+
+% $Log: geomart.sty,v $
+%Revision 1.7 94/07/22 09:55:30 levy
+%\contentsname etc.
+%
+%Revision 1.6 1994/04/08 22:04:06 levy
+%initial value for @@currentlabel
+%
+%Revision 1.5 92/07/17 13:44:17 levy
+%*** empty log message ***
+%
+%Revision 1.4 92/07/13 21:54:23 levy
+%further cleaned up the environments
+%
+%Revision 1.3 92/07/13 08:49:21 levy
+%theoremSt -> Theorem
+%
+%Revision 1.2 92/06/10 12:38:44 levy
+%geomart12 -> geomar12
+%
+%Revision 1.1 92/04/07 09:09:05 levy
+%Initial revision
+%
+%Revision 1.3 1992/03/20 22:39:40 levy
+%*** empty log message ***
+%
+%Revision 1.2 1992/03/20 19:17:42 levy
+%*** empty log message ***
+%
diff --git a/macros/latex209/contrib/geomsty/geombk10.sty b/macros/latex209/contrib/geomsty/geombk10.sty
new file mode 100644
index 0000000000..dba9e2b14a
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geombk10.sty
@@ -0,0 +1,157 @@
+% $Header: /u/levy/texts/geombook/RCS/geombk10.sty,v 1.2 1993/12/21 05:16:58 levy Exp levy $
+
+%
+% This is the geom style bk10 file, by Silvio Levy.
+% It contains modifications to bk10.sty of <24 Nov 89>.
+%
+% \typeout{Reading geombk10.sty $Revision: 1.2 $ (changes to bk10.sty)}
+
+% make the \parsep 0pt
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+ \abovedisplayskip 8pt plus 2pt minus 4pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt%
+ \belowdisplayshortskip 4pt plus 2pt minus 2pt
+ \def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+ \parsep 0pt
+ \topsep 4pt plus 2pt minus 2pt
+ \itemsep 2pt plus 1pt minus 1pt}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+ \abovedisplayskip 7.2pt plus 2pt minus 4pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt%
+ \belowdisplayshortskip 4pt plus 2pt minus 2pt
+ \def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+ \parsep 0pt
+ \topsep 4pt plus 2pt minus 2pt
+ \itemsep 2pt plus 1pt minus 1pt}}
+
+% Make chapter and section heads less huge
+
+\let\chapheadsize=\LARGE
+\let\huge=\Large
+\let\Large=\large
+
+% Increase the page size
+
+\textwidth 5.5in \oddsidemargin .6in \evensidemargin .4in
+
+\textheight = 44\baselineskip \advance\textheight by \topskip \topmargin -.25in
+
+% Increase the parindent
+
+\parindent 20pt
+
+% Extra vertical space, in addition to
+% \parskip and \topsep, added when user
+% leaves blank line before environment.
+% (Changed from 3 +2 -2)
+
+\partopsep 2pt plus 1pt minus 1pt
+
+% Replaced \Huge by \chapheadsize, added +10pt at end
+
+\def\@makechapterhead#1{ % Heading for \chapter command
+ \vspace*{50pt} % Space at top of text page.
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ \huge\bf \@chapapp{} \thechapter % Print 'Chapter' and number.
+ \par
+ \vskip 20pt \fi % Space between number and title.
+ \chapheadsize \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40pt plus 10 pt % Space between title and text.
+ } }
+
+\def\@makeschapterhead#1{ % Heading for \chapter* command
+ \vspace*{50pt} % Space at top of page.
+ { \parindent 0pt \raggedright
+ \chapheadsize \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40pt plus 10pt % Space between title and text.
+ } }
+
+% Don't skip page if proofing
+
+\def\chapter{\ifproofing\clearpage\else\cleardoublepage\fi
+ \thispagestyle{chapter} % Page style of chapter page is 'plain'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
+
+% Define \object@type
+% stepcounter section so subsidiary counters (e.g. theorems) get reset
+% don't \typeout
+% mess with \addcontentsline
+% no need for \protect before \addvspace
+% automatic label
+
+\def\@chapter[#1]#2{%
+ \ifnum \c@secnumdepth >\m@ne \def\object@type{chapter}
+ \refstepcounter{section}\refstepcounter{chapter}
+ \def\@tempa{\addcontentsline{toc}{chapter}}%
+ \edef\@tempb{\noexpand\numberline{\thechapter}}%
+ \expandafter\@tempa\expandafter{\@tempb #1}%
+ \else\addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\addvspace{10pt}}
+ \addtocontents{lot}{\addvspace{10pt}}
+ \if@twocolumn \@topnewpage[\@makechapterhead{#2}]%
+ \else \@makechapterhead{#2}\@afterheading \fi
+ \ifautolabel\label*{#2}\fi}
+
+% add mark and table of contents line
+
+\def\@schapter#1{%
+ \schaptermark{#1}
+ \ifstarredcontents\addcontentsline{toc}{chapter}{#1}\fi
+ \addtocontents{lof}{\addvspace{10pt}}
+ \addtocontents{lot}{\addvspace{10pt}}
+ \if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}\@afterheading\fi}
+
+% Normalize according to \parindent
+
+\leftmargini\parindent
+\listparindent .8\parindent
+\leftmarginii .8\parindent
+\leftmarginiii .8\parindent
+\leftmarginiv .8\parindent
+\leftmarginv .8\parindent
+\leftmarginvi .8\parindent
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+% Make \parsep 0
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep 6pt plus 3pt minus 3pt
+ \itemsep 3pt plus 2pt minus \p@
+ \parsep \z@}
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus \p@
+ \itemsep 2.5pt plus \p@ minus \p@
+ \parsep \z@}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus \p@ minus \p@
+ \parsep \z@ \partopsep \p@ plus \z@ minus \p@
+ \itemsep \topsep}
+
+% $Log: geombk10.sty,v $
+%Revision 1.2 1993/12/21 05:16:58 levy
+%corrected \footnotesize
+%
+%Revision 1.1 92/07/11 22:35:33 levy
+%Initial revision
+%
+
diff --git a/macros/latex209/contrib/geomsty/geombk11.sty b/macros/latex209/contrib/geomsty/geombk11.sty
new file mode 100644
index 0000000000..2c3e403fb9
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geombk11.sty
@@ -0,0 +1,152 @@
+% $Header: /u/levy/texts/geombook/RCS/geombk11.sty,v 1.1 1992/07/11 22:32:09 levy Exp levy $
+
+%
+% This is the geom style bk12 file, by Silvio Levy.
+% It contains modifications to bk12.sty of <24 Nov 89>.
+%
+% \typeout{Reading geombk12.sty $Revision: 1.1 $ (changes to bk12.sty)}
+
+% make the \parsep 0pt
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 0pt plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt
+ \def\@listi{\leftmargin\leftmargini \parsep 0pt
+ \itemsep 3pt plus 2pt minus 0pt
+ \topsep 6pt plus 2pt minus 2pt}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+ \abovedisplayskip 8pt plus 2pt minus 4pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt%
+ \belowdisplayshortskip 4pt plus 2pt minus 2pt
+ \def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+ \parsep 0pt
+ \topsep 4pt plus 2pt minus 2pt
+ \itemsep 2pt plus 1pt minus 1pt}}
+
+% Make chapter and section heads less huge
+
+\let\chapheadsize=\LARGE
+\let\huge=\Large
+\let\Large=\large
+
+% Increase the page size
+
+\textwidth 5.5in \oddsidemargin .6in \evensidemargin .4in
+
+\textheight = 44\baselineskip \advance\textheight by \topskip \topmargin -.25in
+
+% Increase the parindent
+
+\parindent 20pt
+
+% Extra vertical space, in addition to
+% \parskip and \topsep, added when user
+% leaves blank line before environment.
+% (Changed from 3 +2 -2)
+
+\partopsep 2pt plus 1pt minus 1pt
+
+% Replaced \Huge by \chapheadsize, added +10pt at end
+
+\def\@makechapterhead#1{ % Heading for \chapter command
+ \vspace*{50pt} % Space at top of text page.
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ \huge\bf \@chapapp{} \thechapter % Print 'Chapter' and number.
+ \par
+ \vskip 20pt \fi % Space between number and title.
+ \chapheadsize \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40pt plus 10 pt % Space between title and text.
+ } }
+
+\def\@makeschapterhead#1{ % Heading for \chapter* command
+ \vspace*{50pt} % Space at top of page.
+ { \parindent 0pt \raggedright
+ \chapheadsize \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40pt plus 10pt % Space between title and text.
+ } }
+
+% Don't skip page if proofing
+
+\def\chapter{\ifproofing\clearpage\else\cleardoublepage\fi
+ \thispagestyle{chapter} % Page style of chapter page is 'plain'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
+
+% Define \object@type
+% stepcounter section so subsidiary counters (e.g. theorems) get reset
+% don't \typeout
+% mess with \addcontentsline
+% no need for \protect before \addvspace
+% automatic label
+
+\def\@chapter[#1]#2{%
+ \ifnum \c@secnumdepth >\m@ne \def\object@type{chapter}
+ \refstepcounter{section}\refstepcounter{chapter}
+ \def\@tempa{\addcontentsline{toc}{chapter}}%
+ \edef\@tempb{\noexpand\numberline{\thechapter}}%
+ \expandafter\@tempa\expandafter{\@tempb #1}%
+ \else\addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\addvspace{10pt}}
+ \addtocontents{lot}{\addvspace{10pt}}
+ \if@twocolumn \@topnewpage[\@makechapterhead{#2}]%
+ \else \@makechapterhead{#2}\@afterheading \fi
+ \ifautolabel\label*{#2}\fi}
+
+% add mark and table of contents line
+
+\def\@schapter#1{%
+ \schaptermark{#1}
+ \ifstarredcontents\addcontentsline{toc}{chapter}{#1}\fi
+ \addtocontents{lof}{\addvspace{10pt}}
+ \addtocontents{lot}{\addvspace{10pt}}
+ \if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}\@afterheading\fi}
+
+% Normalize according to \parindent
+
+\leftmargini\parindent
+\listparindent .8\parindent
+\leftmarginii .8\parindent
+\leftmarginiii .8\parindent
+\leftmarginiv .8\parindent
+\leftmarginv .8\parindent
+\leftmarginvi .8\parindent
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+% Make \parsep 0
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep 6pt plus 3pt minus 3pt
+ \itemsep 3pt plus 2pt minus \p@
+ \parsep \z@}
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus \p@
+ \itemsep 2.5pt plus \p@ minus \p@
+ \parsep \z@}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus \p@ minus \p@
+ \parsep \z@ \partopsep \p@ plus \z@ minus \p@
+ \itemsep \topsep}
+
+% $Log: geombk11.sty,v $
+%Revision 1.1 1992/07/11 22:32:09 levy
+%Initial revision
+%
diff --git a/macros/latex209/contrib/geomsty/geombk12.sty b/macros/latex209/contrib/geomsty/geombk12.sty
new file mode 100644
index 0000000000..062484cb15
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geombk12.sty
@@ -0,0 +1,157 @@
+% $Header: /a/tampa/h/tampa_a/fac/levy/texts/geombook/RCS/geombk12.sty,v 1.3 92/06/18 16:56:17 levy Exp $
+
+%
+% This is the geom style bk12 file, by Silvio Levy.
+% It contains modifications to bk12.sty of <24 Nov 89>.
+%
+% \typeout{Reading geombk12.sty $Revision: 1.3 $ (changes to bk12.sty)}
+
+% make the \parsep 0pt
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+ \abovedisplayskip 11pt plus3pt minus6pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 0pt plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+ \def\@listi{\leftmargin\leftmargini \parsep 0pt
+ \itemsep 4.5pt plus 2pt minus 0pt
+ \topsep 9pt plus 3pt minus 5pt}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 0pt plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt
+ \def\@listi{\leftmargin\leftmargini \parsep 0pt
+ \itemsep 3pt plus 2pt minus 0pt
+ \topsep 6pt plus 2pt minus 2pt}}
+
+% Make chapter and section heads less huge
+
+\let\chapheadsize=\LARGE
+\let\huge=\Large
+\let\Large=\large
+
+% Increase the page size
+
+\textwidth 5.5in \oddsidemargin .6in \evensidemargin .4in
+
+\textheight = 44\baselineskip \advance\textheight by \topskip \topmargin -.25in
+
+% Increase the parindent
+
+\parindent 20pt
+
+% Extra vertical space, in addition to
+% \parskip and \topsep, added when user
+% leaves blank line before environment.
+% (Changed from 3 +2 -2)
+
+\partopsep 2pt plus 1pt minus 1pt
+
+% Replaced \Huge by \chapheadsize, added +10pt at end
+
+\def\@makechapterhead#1{ % Heading for \chapter command
+ \vspace*{50pt} % Space at top of text page.
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ \huge\bf \@chapapp{} \thechapter % Print 'Chapter' and number.
+ \par
+ \vskip 20pt \fi % Space between number and title.
+ \chapheadsize \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40pt plus 10 pt % Space between title and text.
+ } }
+
+\def\@makeschapterhead#1{ % Heading for \chapter* command
+ \vspace*{50pt} % Space at top of page.
+ { \parindent 0pt \raggedright
+ \chapheadsize \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40pt plus 10pt % Space between title and text.
+ } }
+
+% Don't skip page if proofing
+
+\def\chapter{\ifproofing\clearpage\else\cleardoublepage\fi
+ \thispagestyle{chapter} % Page style of chapter page is 'plain'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
+
+% Define \object@type
+% stepcounter section so subsidiary counters (e.g. theorems) get reset
+% don't \typeout
+% mess with \addcontentsline
+% no need for \protect before \addvspace
+% automatic label
+
+\def\@chapter[#1]#2{%
+ \ifnum \c@secnumdepth >\m@ne \def\object@type{chapter}
+ \refstepcounter{section}\refstepcounter{chapter}
+ \def\@tempa{\addcontentsline{toc}{chapter}}%
+ \edef\@tempb{\noexpand\numberline{\thechapter}}%
+ \expandafter\@tempa\expandafter{\@tempb #1}%
+ \else\addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\addvspace{10pt}}
+ \addtocontents{lot}{\addvspace{10pt}}
+ \if@twocolumn \@topnewpage[\@makechapterhead{#2}]%
+ \else \@makechapterhead{#2}\@afterheading \fi
+ \ifautolabel\label*{#2}\fi}
+
+% add mark and table of contents line
+
+\def\@schapter#1{%
+ \schaptermark{#1}
+ \ifstarredcontents\addcontentsline{toc}{chapter}{#1}\fi
+ \addtocontents{lof}{\addvspace{10pt}}
+ \addtocontents{lot}{\addvspace{10pt}}
+ \if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}\@afterheading\fi}
+
+% Normalize according to \parindent
+
+\leftmargini\parindent
+\listparindent .8\parindent
+\leftmarginii .8\parindent
+\leftmarginiii .8\parindent
+\leftmarginiv .8\parindent
+\leftmarginv .8\parindent
+\leftmarginvi .8\parindent
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+% Make \parsep 0
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep 6pt plus 3pt minus 3pt
+ \itemsep 3pt plus 2pt minus \p@
+ \parsep \z@}
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus \p@
+ \itemsep 2.5pt plus \p@ minus \p@
+ \parsep \z@}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus \p@ minus \p@
+ \parsep \z@ \partopsep \p@ plus \z@ minus \p@
+ \itemsep \topsep}
+
+% $Log: geombk12.sty,v $
+%Revision 1.3 92/06/18 16:56:17 levy
+%footers in chapter openers
+%
+%Revision 1.2 92/04/07 09:09:08 levy
+%*** empty log message ***
+%
+%Revision 1.1 1992/03/20 22:38:55 levy
+%Initial revision
+%
diff --git a/macros/latex209/contrib/geomsty/geombook.sty b/macros/latex209/contrib/geomsty/geombook.sty
new file mode 100644
index 0000000000..a3ca2320ae
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geombook.sty
@@ -0,0 +1,249 @@
+% $Header: /a/tampa/h/tampa_a/fac/levy/texts/geombook/RCS/geombook.sty,v 1.13 94/07/22 09:55:37 levy Exp Locker: levy $
+
+%
+% This is the geom style book file, by Silvio Levy.
+% It contains modifications to book.sty of <24 Nov 89>.
+%
+% \typeout{Reading geombook.sty $Revision: 1.13 $ (changes to book.sty)}
+
+% Marginpars go on right side of page.
+
+\@mparswitchfalse
+
+% Input size-dependent information. \@ptsize.sty is defined in book.sty.
+
+\input geombk1\@ptsize.sty\relax
+
+% Layout parameters
+
+\tolerance 1000
+\clubpenalty 10000
+\widowpenalty 10000
+\hfuzz=.1pt
+
+% syntatic sugar for \includeonly
+% \chap1{34} expands to chap1/1.3,chap1/1.4
+
+\def\chap#1#2{\ch@p#1#2!}
+\def\ch@p#1#2{\if#2!\else chap#1/#1.#2,\expandafter\ch@p\expandafter#1\fi}
+
+% First two levels of enumerations are (a) and (i), respectively,
+% rather than 1. and (a).
+
+\let\@@currentlabel\relax %assign initial value
+
+\def\labelenumi{\theenumi}
+\def\theenumi{(\alph{enumi})}
+\def\p@enumi{\@@currentlabel}
+
+\def\labelenumii{\theenumii}
+\def\theenumii{(\roman{enumii})}
+\def\p@enumii{\@@currentlabel}
+
+\def\p@enumiii{\@@currentlabel}
+
+\def\p@enumiv{\@@currentlabel}
+
+% Less space around contents of \fbox (2pt instead of 3pt)
+
+\fboxsep = 2pt
+
+% mess with \addcontentsline; \chapheadsize instead of \Huge
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+ \refstepcounter{part} % THEN step part counter
+ \def\@tempa{\addcontentsline{toc}{part}} %
+ \expandafter\@tempa\expandafter{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ \markboth{}{}
+ {\centering
+ \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+ \huge\bf Part \thepart % THEN Print 'Part' and number
+ \par % in \huge bold.
+ \vskip 20pt \fi % Add space before title.
+ \chapheadsize \bf % FI
+ #2\par}\@endpart}
+
+\def\@spart#1{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+ \def\@tempa{\addcontentsline{toc}{spart}} %
+ \expandafter\@tempa\expandafter{#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{spart}{#1}\fi % FI
+ {\centering \chapheadsize \bf #1\par}\@endpart}
+
+% No explicit \@mkboth needed in \tableofcontents
+% marks are automatically added by \chapter*
+
+\@ifundefined{contentsname}{\def\contentsname{Contents}}{}
+\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi{\starredcontentsfalse\chapter*{\contentsname}}%
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+
+% Contents line for chapter
+
+\def\l@chapter#1#2{\addpenalty{-\@highpenalty}
+ \vskip 1.0em plus 1pt % space above chapter line
+ \@tempdima 1.5em % width of box holding chapter number
+ \begingroup
+ \def\\{\unskip\ \ignorespaces} % deal with \\ in chapter titles --SL
+ \hyphenpenalty10000 % prohibit hyphenation --SL
+ \parindent \z@
+ \rightskip \@pnumwidth plus 3em % allow ragged right
+ \parfillskip -\rightskip % when line wraps around --SL
+ \hangindent 1.5em % hangindent is same as l@section below --SL
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
+ \hskip -\leftskip %% 25 Jan 88 change to \numberline
+ #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \penalty\@highpenalty %% added 24 May 89 as suggested by J. Leichter
+ \endgroup}
+
+% Contents line for part is the same as for chapter
+
+\let\l@part\l@chapter
+\let\l@spart\l@chapter
+
+\let\l@schapter\l@chapter
+\def\l@ssection{\@dottedtocline{1}{1.5em}{0em}}
+\def\l@ssubsection{\@dottedtocline{2}{3.8em}{0em}}
+\def\l@ssubsubsection{\@dottedtocline{3}{7.0em}{0em}}
+\def\l@sparagraph{\@dottedtocline{4}{10em}{0em}}
+\def\l@ssubparagraph{\@dottedtocline{5}{12em}{0em}}
+
+% No explicit \@mkboth needed in \listoffigures \listoftables \thebibliography
+% marks are automatically added by \chapter*
+
+\@ifundefined{listfigurename}{\def\listfigurename{List of Figures}}{}
+\@ifundefined{listtablename}{\def\listtablename{List of Tables}}{}
+\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{\listfigurename}\@starttoc{lof}\if@restonecol
+ \twocolumn\fi}
+
+\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{\listtablename}\@starttoc{lot}\if@restonecol
+ \twocolumn\fi}
+
+% no indentation for figure contents line, since there are
+% no higher-level entries
+
+\def\l@figure{\@dottedtocline{1}{0em}{2.3em}}
+\let\l@table\l@figure
+
+\@ifundefined{bibname}{\def\bibname{Bibliography}}{}
+\def\thebibliography#1{\chapter*{\bibname}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+% Index uses two columns and smaller type.
+
+\@ifundefined{indexname}{\def\indexname{Index}}{}
+\def\theindex{\begingroup\chapter*{\indexname}\small
+ \parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem
+ \begin{multicols}2}
+\def\endtheindex{\end{multicols}\endgroup}
+
+\def\glo#1{${}^{\dagger}$#1\index{\dag #1}}
+
+\@ifundefined{glossaryname}{\def\glossaryname{Glossary}}{}
+\newenvironment{theglossary}%
+ {\begingroup\chapter*{\glossaryname}\small
+ \begin{multicols}2}%
+ {\end{multicols}\endgroup}
+\def\entry{\medbreak\@ifnextchar[{\entry@}{\entry@@}}
+\def\entry@@#1{\par\noindent{\bf #1.}\enspace\ignorespaces}
+\def\entry@[#1]#2{\par\noindent{\bf #2} #1.\enspace\ignorespaces}
+
+% Indentation in index is smaller (12pt instead of 40pt)
+
+\def\@idxitem{\par\hangindent 12pt}
+
+% Allow more of the page to be taken by figures.
+
+\def\bottomfraction{.7}
+\def\floatpagefraction{.7}
+
+% Captions at set with a width somewhat smaller than the main text width
+
+\newdimen\@captionmargin\@captionmargin=\parindent
+\newdimen\@captionwidth %not set here because depends on hsize
+
+% left and right footers (normally set by RCS)
+
+\def\leftfoot{{}}
+\def\rightfoot{{}}
+
+% Definition of 'headings' page style.
+
+\def\ps@headings{\let\@mkboth\markboth
+ \def\@oddfoot{\ifproofing\leftfoot\hfil\rightfoot\else\hfil\fi}%
+ \def\@evenfoot{\ifproofing\leftfoot\hfil\rightfoot\else\hfil\fi}%
+ \def\@evenhead{\footnotesize\rm\thepage\hfil\leftmark}% Left heading.
+ \def\@oddhead{\footnotesize\rm\hbox{}\rightmark\hfil\thepage}%Right heading
+ \def\chaptermark##1{{% Expand the \ifnum, not the ##1
+ \edef\@tempa{\ifnum \c@secnumdepth >\m@ne \@chapapp\ \thechapter. \fi}%
+ \expandafter \markboth \expandafter{\@tempa ##1}{}}}%
+ \def\schaptermark##1{\markboth {##1}{##1}}%
+ \def\ssectionmark##1{\markbothsame{##1}}%
+ \def\sectionmark##1{{% Expand the \ifnum, not the ##1
+ \edef\@tempa{\ifnum \c@secnumdepth >\z@ \thesection. \fi}%
+ \expandafter \markright \expandafter{\@tempa ##1}}}}
+
+% footline in \ps@plain and \ps@chapter gets no page number
+
+\def\ps@chapter{\let\@mkboth\markboth
+ \def\@oddfoot{\ifproofing\leftfoot\hfil\rightfoot\else\hfil\fi}%
+ \def\@evenfoot{\ifproofing\leftfoot\hfil\rightfoot\else\hfil\fi}%
+ \def\@evenhead{\hfil}\def\@oddhead{\hfil}}
+
+\def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@oddhead{}\def\@oddfoot{}%
+ \def\@evenhead{}\let\@evenfoot\@oddfoot}
+
+% Put the new \ps@headings into effect.
+
+\ps@headings
+
+% $Log: geombook.sty,v $
+%Revision 1.13 94/07/22 09:55:37 levy
+%\contentsname etc.
+%
+%Revision 1.12 1994/05/11 17:07:26 levy
+%*** empty log message ***
+%
+%Revision 1.11 1994/05/08 06:05:01 levy
+%schapter etc.
+%
+%Revision 1.10 1994/04/27 07:15:50 levy
+%ssectionmark
+%
+%Revision 1.9 1994/04/08 22:04:06 levy
+%initial value for @@currentlabel
+%
+%Revision 1.8 92/07/17 13:44:19 levy
+%*** empty log message ***
+%
+%Revision 1.7 92/07/13 21:54:25 levy
+%further cleaned up the environments
+%
+%Revision 1.6 92/07/13 08:46:31 levy
+%theoremSt -> Theorem
+%
+%Revision 1.5 92/06/18 16:55:56 levy
+%footers in chapter openers
+%caption width error
+%
+%Revision 1.4 92/04/07 09:09:09 levy
+%*** empty log message ***
+%
+%Revision 1.3 1992/03/20 22:39:40 levy
+%*** empty log message ***
+%
+%Revision 1.2 1992/03/20 19:17:42 levy
+%*** empty log message ***
+%
diff --git a/macros/latex209/contrib/geomsty/geomenv.sty b/macros/latex209/contrib/geomsty/geomenv.sty
new file mode 100644
index 0000000000..338ebc4b91
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomenv.sty
@@ -0,0 +1,189 @@
+% $Header: /usr/home/levy/texts/geomsty/RCS/geomenv.sty,v 1.15 95/12/13 20:32:50 levy Exp Locker: levy $
+
+\@ifundefined{@@newtheorem}{}{\endinput}
+
+%
+% \newtheorem is modified so as to accept a (first) optional argument.
+% If this is present, the new theorem type ``foo'' will spawn an inner
+% environment ``foo@''. The optional argument contains two
+% brace-delimited token sequences, be inserted before and after the inner
+% environment starts.
+%
+\def\newtheorem{\@ifnextchar[{\@newtheorem}{\@newtheorem[{}{}]}}%]
+
+\long\def\@newtheorem[#1]{\@@newtheorem#1}
+
+\long\def\@@newtheorem#1#2#3{%
+ \newenvironment{#3}%
+ {\def\object@type{#3}#1\@ifnextchar[{\@enva{#3}{#2}}{\@envb{#3}{#2}}}%]
+ {\end{#3@}}%
+ \@ifnextchar[{\@othm{#3@}}{\@nnthm{#3}}%]
+}
+
+\def\@nnthm#1#2{%
+\@ifnextchar[{\@xnnthm{#1}{#2}}{\@ynnthm{#1}{#2}}}
+
+\def\unnumbered#1{\expandafter\let\csname the#1\endcsname\relax}
+
+\def\@xnnthm#1#2[#3]{\@definecounter{#1}\@addtoreset{#1}{#3}%
+\expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+ \csname the#3\endcsname \@thmcountersep \@thmcounter{#1}}%
+\global\@namedef{#1@}{\@thm{#1}{#2}}\global\@namedef{end#1@}{\@endtheorem}}
+
+\def\@ynnthm#1#2{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1@}{\@thm{#1}{#2}}\global\@namedef{end#1@}{\@endtheorem}}
+
+\def\@enva#1#2[#3]{\begin{#1@}[#3]#2}
+\def\@envb#1#2{\begin{#1@}#2}
+
+%
+% Avoid indentation after end of theorem-like environment.
+%
+
+\def\end#1{\csname end#1\endcsname\@checkend{#1}%
+ \expandafter\endgroup \if@endpe \@doendpe \@restorepar \fi
+ \if@ignore \global\@ignorefalse \ignorespaces\fi}
+
+%
+% \theoremintro allows the user to choose how the theorem take is
+% going to look like.
+%
+
+\def\theoremintro#1{\normalshape\bf#1. }
+%
+% cannot use \@ifempty for this test because #2 typically looks like
+% \csname thetheorem\csname, and \thetheorem has been \let to \relax.
+%
+\def\thrmintro#1#2{#1%
+ \def\@tempa{#1}\ifx\@tempa\@empty\else
+ \expandafter\let\expandafter\@tempa#2% This gives \thetheorem
+ \ifx\@tempa\relax\else{ }\fi\fi#2}
+
+\def\@begintheorem#1#2{\trivlist\item[\hskip\labelsep
+ \theoremintro{\thrmintro{#1}{#2}}\hskip-\labelsep]}
+
+\def\@opargbegintheorem#1#2#3{\trivlist\item[\hskip \labelsep
+ \theoremintro{\thrmintro{#1}{#2} (#3)}\hskip-\labelsep]\ifautolabel\label*{#3}\fi}
+
+%
+% \specialdigits causes digits and punctuation to become active
+% and print in roman type. \regulardigits cancels that.
+%
+
+\def\dowith#1{\let\@tempa#1%
+ \@tempa,\@tempa.\@tempa:\@tempa;\@tempa(\@tempa)\@tempa!\@tempa?%
+ \@tempa0\@tempa1\@tempa2\@tempa3\@tempa4%
+ \@tempa5\@tempa6\@tempa7\@tempa8\@tempa9}
+%
+\def\makeactive#1{\catcode`#1=13}
+\def\makeother#1{\catcode\expandafter`\noexpand#1=12}
+\def\makechoice#1{\edef#1{%
+ \noexpand\ifmmode\string#1%
+ \noexpand\else\noexpand\ifhmode\/\noexpand\fi%
+ {\noexpand\normalshape\string#1}\noexpand\fi}}
+%
+\def\regulardigits{\dowith\makeother}
+
+{\dowith\makeactive
+\gdef\specialdigits{%
+\dowith\makeactive
+\let\@tempa\makechoice
+ \@tempa,\@tempa.\@tempa:\@tempa;\@tempa(\@tempa)\@tempa!\@tempa?%
+ \@tempa0\@tempa1\@tempa2\@tempa3\@tempa4%
+ \@tempa5\@tempa6\@tempa7\@tempa8\@tempa9}%
+}
+
+% The proof environment takes an optional argument, which defaults
+% to \prooftag (which should be set by theorem-like environments).
+% This argument is stored in \provedbox (after being passed to
+% \provedboxcontents), to be printed in the ``proved box'' at
+% the end of the proof. It is also printed at the beginning of proof,
+% after being passed to \proofintro.
+
+% If the proof
+% ends with a displayed formula, it is recommented that the proved box
+% be placed next to the formula (as if it were a tag). This is done
+% by inserting \proved before the closing $$. In even more difficult
+% cases (e.g., if the formula already has a tag, or is part of a
+% multi-line display), plop \box\provedbox where we want the box to be.
+
+\def\prooftag{}
+\def\setprooftag{\xdef\prooftag{\@currentlabel}}
+
+\def\proof{}
+\renewenvironment{proof}
+ {\trivlist\item[]\@ifnextchar[{\pro@f}{\pro@f[\prooftag]}}%]
+ {\ifvoid\provedbox\else\hproved\fi\endtrivlist}
+
+% the next few lines, parallel to the Theorem setup, don't work for
+% two reasons: \provedbox is set within a group and so disappears, and
+% the nextchar seen by processproof is always \hskip.
+%\newenvironment{proof}
+% {\trivlist\item[\hskip\labelsep\process@proof\hskip-\labelsep]}
+% {\ifvoid\provedbox\else\hproved\fi\endtrivlist}
+%\def\process@proof{\@ifnextchar[{\pro@f}{\pro@f[\prooftag]}}%]
+
+\def\pro@f[#1]{\setbox\provedbox\hbox{\provedboxcontents{#1}}\proofintro{#1}}
+
+\def\proofintro#1{\expandafter\def\expandafter\@tempa\expandafter{#1}%
+ {\it Proof\ifx\@tempa\empty\else\ of #1\fi. }\ignorespaces}
+
+\def\provedboxcontents#1{\expandafter\def\expandafter\@tempa\expandafter{#1}%
+ \ifx\@tempa\empty$\square$\else\fbox{\small#1}\fi}
+
+\newbox\provedbox
+
+\def\proved{\ifmmode\eqno{\box\provedbox}\else\hproved\fi}
+
+\def\hproved{\unskip\nobreak\hfil\penalty50\hskip.5em\hbox{}\nobreak\hfil
+ \box\provedbox{\parfillskip=0pt\finalhyphendemerits=0\par}}
+
+% $Log: geomenv.sty,v $
+%Revision 1.15 95/12/13 20:32:50 levy
+%make {proof} a redefinition instead of a definition
+%
+%Revision 1.14 95/07/22 13:32:31 levy
+%put space after period in \theoremintro
+%(while at the same time removing the \labelsep)
+%
+%Revision 1.13 93/08/18 08:35:24 levy
+%> eliminated space for \newtheorem{justnumber}{}
+%added definition of \unnumbered
+%
+%Revision 1.12 1993/03/16 23:55:14 levy
+%*** empty log message ***
+%
+%Revision 1.11 93/03/07 23:08:41 levy
+%removed a repeated invocation of \theoremintro in \opargbegintheorem
+%
+%Revision 1.10 1993/01/10 20:57:03 levy
+%comparison in \proofintro should have \edef, not \def
+%
+%Revision 1.9 1993/01/10 17:11:12 levy
+%*** empty log message ***
+%
+%Revision 1.8 92/10/01 15:31:59 levy
+%fixed space in "Theorem ."
+%
+%Revision 1.7 92/07/17 13:44:21 levy
+%*** empty log message ***
+%
+%Revision 1.6 92/07/13 21:54:27 levy
+%further cleaned up the environments
+%
+%Revision 1.5 92/07/13 11:12:10 levy
+%big change (abolished MakeStEnv)
+%
+%Revision 1.4 92/06/15 19:15:35 levy
+%fixed disappearing punctuation in fancy italics
+%
+%Revision 1.3 92/06/03 11:25:24 levy
+%active punctuation
+%
+%Revision 1.2 92/04/07 09:08:56 levy
+%*** empty log message ***
+%
+%Revision 1.1 1992/03/21 02:42:28 levy
+%Initial revision
+%
diff --git a/macros/latex209/contrib/geomsty/geomeqns.sty b/macros/latex209/contrib/geomsty/geomeqns.sty
new file mode 100644
index 0000000000..95e3963028
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomeqns.sty
@@ -0,0 +1,49 @@
+% $Header: /u/levy/texts/geomsty/RCS/geomeqns.sty,v 1.6 95/07/01 02:23:17 levy Exp Locker: levy $
+
+% format equation numbers like subsection numbers
+
+\def\@eqnnum{\hbox{\normalshape\bf \theequation.}}
+
+% set equations on left side
+
+\def\equation{$$ % $$ BRACE MATCHING HACK
+ \def\object@type{equation}\refstepcounter{equation}}
+\def\endequation{\leqno \@eqnnum % $$ BRACE MATCHING HACK
+ $$\global\@ignoretrue}
+
+\def\eqnarray{\def\object@type{equation}\stepcounter{equation}%
+ \edef\@currentlabel{\theequation}
+ \global\@eqnswtrue\global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+ $$\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering % $$BRACE MATCHING
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne\hfil${}##{}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+\def\@@eqncr{\let\@tempa\relax
+ \ifcase\@eqcnt \def\@tempa{& & &}\or \def\@tempa{& &}
+ \else \def\@tempa{&}\fi
+ \@tempa
+ \if@eqnsw\hbox to .01pt{}\rlap{\rm \hskip -\displaywidth\@eqnnum}%
+ \stepcounter{equation}\fi
+ \global\@eqnswtrue\global\@eqcnt\z@\cr}
+\def\@eqncr{{\ifnum0=`}\fi\@ifstar{\global\@eqpen\@M
+ \@yeqncr}{\global\@eqpen\interdisplaylinepenalty \@yeqncr}%
+ \edef\@currentlabel{\theequation }}
+
+% $Log: geomeqns.sty,v $
+%Revision 1.6 95/07/01 02:23:17 levy
+%fixed currentlabel inside eqnarray
+%
+%Revision 1.5 92/07/13 21:54:29 levy
+%further cleaned up the environments
+%
+%Revision 1.4 92/07/13 08:46:04 levy
+%theoremSt -> Theorem
+%
+%Revision 1.3 92/04/02 09:08:39 levy
+%*** empty log message ***
+%
+%Revision 1.2 1992/03/20 19:17:42 levy
+%*** empty log message ***
+%
diff --git a/macros/latex209/contrib/geomsty/geomfig.sty b/macros/latex209/contrib/geomsty/geomfig.sty
new file mode 100644
index 0000000000..6d2753a4df
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomfig.sty
@@ -0,0 +1,168 @@
+% $Header: /u/levy/texts/geomsty/RCS/geomfig.sty,v 1.10 95/07/20 13:42:16 levy Exp Locker: levy $
+
+\@ifundefined{multifig}{}{\endinput}
+\input geompsfi.sty
+
+% set \object@type
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \def\object@type{#1}%
+ \global\setbox\@currbox\vbox\bgroup
+ \hsize\columnwidth \@parboxrestore}
+
+%
+% Higher-level environments for figures
+%
+
+\newenvironment{Table}{\@ifnextchar[%]
+ {\@Float{table}}{\@Float{table}[htbp]}}{\end@Float{table}}
+\newenvironment{Figure}{\@ifnextchar[%]
+ {\@Float{figure}}{\@Float{figure}[htbp]}}{\end@Float{figure}}
+%
+% #1 = type #2 = placement #3 = label #4 = title #5 = caption
+%
+
+\def\@Float#1[#2]#3#4#5{%
+ \begin{#1}[#2]%
+ \def\the@label{#3}%
+ \def\the@title{#4}%
+ \def\the@caption{#5}%
+}
+
+\def\end@Float#1{%
+ \expandafter\caption\expandafter[\the@title]{%
+ {\bf\the@title\ifx\the@caption\empty\else\ifx\the@title\empty\else. \fi\fi}%
+ \ignorespaces\the@caption}%
+ \expandafter\label\expandafter*\expandafter{\the@label}%
+ \end{#1}}
+
+\def\masterpicpath{} % Needs redefining -- may need change in catcodes
+
+%
+% Definitions for figures
+%
+% Driver will look for figure in file .../chap3/2 (for book) or .../2 (art)
+%
+\ifx\@style\@book
+\def\picpath{\masterpicpath chap\thechapter/\arabic{section}/}
+\else
+\def\picpath{\masterpicpath\thesection/}
+\fi
+%
+% User macros:
+% \fig, \doublefig, \triplefig
+% followed by <optional placement>{filename}{title}{caption}
+%
+\def\fig{\multifig1}
+\def\doublefig{\multifig2}
+\def\triplefig{\multifig3}
+\def\multifig#1{\ifvmode\else\unskip\fi\@ifnextchar[{\@fig#1}{\@fig#1[htbp]}}
+%
+\def\@vtick{\vrule depth6pt width.2pt}
+\def\@htick{\vrule height.2pt width6pt}
+\def\@figbox#1{\setbox0=\psfig{figure=\picpath #1}\dimen0=\wd0
+ \ifproofing
+ \vbox{\offinterlineskip
+ \hbox to \dimen0{\@htick\hfil\@htick}\kern -.4pt
+ \hbox to \dimen0{\@vtick\hfil\@vtick}\kern -6pt
+ \box0
+ \kern -6pt\hbox to \dimen0{\@vtick\hfil\@vtick}%
+ \kern -.4pt\hbox to \dimen0{\@htick\hfil\@htick}}%
+ \else\box0\fi}
+
+%
+% #1 = number of parts #2 = placement #3 = filename(=label) #4 = title
+% #5 = caption
+%
+
+\def\@fig#1[#2]{%
+ \def\@tempb{\@@fig{#1}[#2]}%
+ \def\@tempa{\egroup\expandafter\@tempb\expandafter{\thea@label}}%
+ \bgroup\@sanitize\afterassignment\@tempa\gdef\thea@label}
+
+\def\@@fig#1[#2]#3#4#5{%
+ \begin{Figure}[#2]{#3}{#4}{#5}%
+ {\hyperactivelabels
+ \centerline{\ifnum#1=1 \@figbox{#3}\else\valign{\vfil##\vfil\cr
+ \@figbox{#3-1}\cr \noalign{\hfil}\@figbox{#3-2}\cr
+ \ifnum#1>2 \noalign{\hfil}\@figbox{#3-3}\cr\fi}\fi}}%
+ \end{Figure}%
+}
+
+%
+\let\hyperactivelabels\relax % redefine as appropriate
+%
+
+\long\def\@caption#1[#2]#3{\par
+ \def\@tempa{\addcontentsline{\csname ext@#1\endcsname}{#1}}
+ \edef\@tempb{\noexpand\numberline{\csname the#1\endcsname}}
+ \expandafter\@tempa\expandafter{\@tempb\ignorespaces #2}\begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{%
+ \setlanguage\language % put in a whatsit so that later \unhbox
+ % will know what language it is
+ \ignorespaces #3}\par
+ \endgroup}
+
+\newskip\captionskip
+\captionskip=10pt
+%
+% Redefined from book.sty.
+%
+\long\def\@makecaption#1#2{%
+ \vskip\captionskip
+ \setbox\@tempboxa\hbox{%
+ \ifproofing\@ifundefined{the@label}{}
+ {\hbox to 0pt{\vbox to 0pt{\vss\hbox{\tiny\the@label}\bigskip}\hss}}\fi
+ \small\sf{\bf #1. }\ignorespaces #2}%
+ \@captionwidth=\hsize \advance\@captionwidth-2\@captionmargin
+ \ifdim \wd\@tempboxa >\@captionwidth {%
+ \rightskip=\@captionmargin\leftskip=\@captionmargin
+ \unhbox\@tempboxa\par}%
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi}
+
+% $Log: geomfig.sty,v $
+%Revision 1.10 95/07/20 13:42:16 levy
+%\captionskip
+%
+%Revision 1.9 1994/08/12 17:35:53 levy
+%allows empty title in figure (ie. \fig{filename}{}{foo})
+%> allows _ ^ \ & # $ % ~ in file names
+%
+%Revision 1.8 93/09/16 22:14:30 levy
+%language whatsit in caption
+%
+%Revision 1.7 92/07/17 13:44:23 levy
+%*** empty log message ***
+%
+%Revision 1.6 92/06/25 22:31:08 levy
+%tables
+%
+%Revision 1.5 92/06/18 16:55:16 levy
+%caption width error
+%
+%Revision 1.4 92/06/10 12:42:10 levy
+%geompsfig -> geompsfi
+%
+%Revision 1.3 92/05/27 02:08:42 levy
+%moved \hyperactivelabels to before figure (instead of caption!)
+%
+%Revision 1.2 1992/04/07 09:43:26 levy
+%commented out log line
+%
+% Revision 1.1 92/04/07 09:09:00 levy
+% Initial revision
+
diff --git a/macros/latex209/contrib/geomsty/geomfix b/macros/latex209/contrib/geomsty/geomfix
new file mode 100644
index 0000000000..aff40c9bd9
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomfix
@@ -0,0 +1,156 @@
+#! /bin/sh
+#
+# This is geomfix, Copyright 1992 Silvio Levy
+# $Header: /a/tampa/h/tampa_a/fac/levy/texts/geombook/RCS/geomfix,v 1.1 92/07/17 13:27:45 levy Exp $
+#
+# This shell file reads stdin (or any list of files) and adds a header
+# similar to the one added by psfix, but without any of the definitons.
+# It also abbreviates certain PostScript commands.
+
+# Defaults:
+lmargin=1.0 # default left margin: .5 inches
+rmargin=1.0 # default right margin: .5 inches
+bmargin=1.0 # default bottom margin: .5 inches
+tmargin=1.0 # default top margin: .5 inches
+width=8.5 # default page width: 8.5 inches
+height=11 # default page height: 11 inches
+transform='' # default transformation: identity
+nodistort=true # default no-stretching: no
+fixwid=false # default fixwid compensation
+fixdash=false # default fixdash compensation
+while :; do
+ case $# in
+ 0)
+ break 2
+ ;;
+ esac
+ case "$1" in
+ -lmarg)
+ shift
+ lmargin=$1
+ shift
+ ;;
+ -rmarg)
+ shift
+ rmargin=$1
+ shift
+ ;;
+ -bmarg)
+ shift
+ bmargin=$1
+ shift
+ ;;
+ -tmarg)
+ shift
+ tmargin=$1
+ shift
+ ;;
+ -width)
+ shift
+ width=$1
+ shift
+ ;;
+ -height)
+ shift
+ height=$1
+ shift
+ ;;
+ -land)
+ tmp=$width
+ width=$height
+ height=$tmp
+ transform="90 rotate 0 Mheight neg translate"
+ shift
+ ;;
+ -stretch)
+ nodistort=false
+ shift
+ ;;
+ -stringfix)
+ fixwid=false
+ shift
+ ;;
+ -dashfix)
+ fixdash=false
+ shift
+ ;;
+ -*)
+ echo \
+'Usage: psfix [-lmarg inches] [-rmarg inches] [-bmarg inches] [-tmarg inches]
+ [-land] [-stretch] [-width inches] [-height inches]
+ [-stringfix] [-dashfix] [file...]' \
+ >&2
+ exit 1
+ ;;
+ *)
+ break 2
+ ;;
+ esac
+done
+
+# Output header
+echo '%!PS-Adobe-2.0 EPSF-2.0'
+# Compute bounding box
+(
+bc <<!
+$width * 72
+$height * 72
+!
+) | (
+ read right
+ read top
+ echo "%%BoundingBox: 0 0 $right $top"
+)
+cat <<'!'
+%%Creator: Mathematica
+%%EndComments
+!
+
+# Output default values
+sed 's/[ ]*%.*$//
+s/^[ ]*//
+/^[ ]*$/d' <<!
+
+MyDict begin
+/Mlmarg $lmargin 72 mul def % left margin (points)
+/Mrmarg $rmargin 72 mul def % right margin (points)
+/Mbmarg $bmargin 72 mul def % top margin (points)
+/Mtmarg $tmargin 72 mul def % bottom margin (points)
+/Mwidth $width 72 mul def % total page width (points)
+/Mheight $height 72 mul def % total page height
+/Mtransform { $transform } bind def % possible page rotation
+/Mnodistort $nodistort def % no-stretching flag
+/Mfixwid $fixwid def % fixedwidth font only flag
+/Mfixdash $fixdash def % fixeddash flag
+/Mrot 0 def % angle at which text is rendered
+!
+
+# Some of the following abbrevs were used by me
+# prior to version 2.1 to save space.
+# In version 2.1 different abbrevs were introduced.
+# Only k causes a conflict.
+
+sed '/^%!$/d
+s/^0\.\([0-9]\)/.\1/
+s/\([ -]\)0\.\([0-9]\)/\1.\2/g
+s/\<k\>$/setcmykcolor/
+s/\<Mabswid\>$/Ma/g
+s/\<arc\>$/a/g
+s/\<curveto\>$/c/g
+s/\<setdash\>$/d/g
+s/\<fill\>$/f/g
+s/\<setgray\>$/g/g
+s/\<grestore\>$/gr/g
+s/\<gsave\>$/gs/g
+s/\<stroke\>$/k/g
+s/\<lineto\>$/l/g
+s/\<setlinewidth\>$/lw/g
+s/\<moveto\>$/m/g
+s/\<newpath\>$/n/g
+s/\<setrgbcolor\>$/r/g
+/^%%Creator:/d' $@
+
+echo end
+
+
+
diff --git a/macros/latex209/contrib/geomsty/geomfnt.sty b/macros/latex209/contrib/geomsty/geomfnt.sty
new file mode 100644
index 0000000000..4e64a52bff
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomfnt.sty
@@ -0,0 +1,135 @@
+% $Header: /usr/home/levy/texts/geomsty/RCS/geomfnt.sty,v 1.2 95/07/03 14:44:31 levy Exp Locker: levy $
+% NFSS2 mods 95/06/18 by J Rawnsley
+
+\ifx\fmtname\format@e
+ \RequirePackage{amsfonts}
+ \RequirePackage{amssymb}
+\else
+ \input newlfont.sty
+ \input amsfonts.sty
+ \input amssymb.sty
+\fi
+
+\let\emptyset\varnothing
+\let\epsilon\varepsilon %to agree with figure labels; also looks better
+
+\def\hide@fi{\fi}
+\def\hide@else{\else}
+
+\ifx\DeclareMathAlphabet\@undefined
+ \def\mathss{\protect\pmathss}
+ \def\pmathss{\RIfM@\expandafter\mathss@\hide@else
+ \expandafter\nonmatherr@\expandafter\mathss\hide@fi}
+ \newmathalphabet*\mathss@{cmss}{m}{n}
+ \def\mathtt{\protect\pmathtt}
+ \def\pmathtt{\RIfM@\expandafter\mathtt@\hide@else
+ \expandafter\nonmatherr@\expandafter\mathtt\hide@fi}
+ \newmathalphabet*\mathtt@{cmtt}{m}{n}
+%
+% mods needed because of the Mittelbach-Schoepf font scheme
+%
+\def\bf{\ifmmode
+ \@warning{\string\bf\space ignored in mathmode; use \string\mathbf{...}}%
+ \else\protect\pbf\fi}
+\def\tt{\ifmmode
+ \@warning{\string\tt\space ignored in mathmode; use \string\mathtt{...}}%
+ \else\protect\ptt\fi}
+\def\rm{\ifmmode
+ \@warning{\string\rm\space ignored in mathmode; use \string\mathrm{...}}%
+ \else\protect\prm\fi}
+\def\it{\ifmmode
+ \@warning{\string\it\space ignored in mathmode; use \string\mathit{...}}%
+ \else\protect\pit\fi}
+\def\sf{\ifmmode
+ \@warning{\string\sf\space ignored in mathmode; use \string\mathss{...}}%
+ \else\protect\psf\fi}
+ \let\mathbf\bold
+\else
+ \DeclareMathAlphabet\mathss{OT1}{cmss}{m}{n}
+ \DeclareMathAlphabet\mathtt{OT1}{cmtt}{m}{n}
+ \let\text\textrm
+ \let\bold\mathbf
+\fi
+
+\let\sans\mathss
+\let\type\mathtt
+
+\def\${{\protect\pdollar}}
+\def\pdollar{\ifmmode\char`\$\else\text{\ifdim \fontdimen\@ne\font >\z@
+ \sl \else \normalshape \fi\char`\$}\fi}
+
+%
+% mod routines from amstex.sty
+%
+\def\bmod{\mskip-\medmuskip\mkern5mu\mathbin
+ {\operator@font mod}\penalty900
+ \mkern5mu\mskip-\medmuskip}
+\def\pmod#1{\allowbreak\ifinner\mkern8mu\else\mkern18mu\fi
+ ({\operator@font mod}\,\,#1)}
+\def\pod#1{\allowbreak\ifinner\mkern8mu\else\mkern18mu\fi(#1)}
+\def\mod#1{\allowbreak\ifinner\mkern12mu
+ \else\mkern18mu\fi{\operator@font mod}\,\,#1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Math extension font
+%% (from fontdef.ams)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\DeclareMathAlphabet\@undefined
+\new@fontshape{cmex}{m}{n}{%
+ <5>cmex7 at5pt%
+ <6>cmex7 at6pt%
+ <7>cmex7%
+ <8>cmex8%
+ <9>cmex9%
+ <10>cmex10%
+ <11>cmex10 at10.95pt%
+ <12>cmex10 at12pt%
+ <14>cmex10 at14.4pt%
+ <17>cmex10 at17.28pt%
+ <20>cmex10 at20.74pt%
+ <25>cmex10 at24.88pt%
+ }{}
+
+\extra@def{cmex}{}{}
+
+\define@mathgroup\mv@normal{3}{cmex}{m}{n}
+\define@mathgroup\mv@bold{3}{cmex}{b}{n}
+
+\new@mathgroup\cmss@group
+\define@mathgroup\mv@normal\cmss@group{cmss}{m}{n}
+\define@mathgroup\mv@bold\cmss@group{cmss}{b}{n}
+\else
+ \catcode`\ =9
+\DeclareFontShape{OMX}{cmex}{m}{n}{%
+ <-8> cmex7%
+ <8>cmex8%
+ <9>cmex9%
+ <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>cmex10%
+ }{}%
+ \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
+ \catcode`\ =10
+
+\DeclareSymbolFont{cmss}{OT1}{cmss}{m}{n}
+\fi
+
+%$Log: geomfnt.sty,v $
+%Revision 1.2 95/07/03 14:44:31 levy
+%NFSS2 changes by John Rawnsley
+%
+%Revision 1.2 95/07/03 14:31:45 levy
+%NFSS2 changes by John Rawnsley
+%
+%Revision 1.2 95/07/03 14:09:28 levy
+%NFSS2 changes by John Rawnsley
+%
+%Revision 1.2 95/07/03 14:08:08 levy
+%*** empty log message ***
+%
+%Revision 1.1 92/04/07 09:45:07 levy
+%Initial revision
+%
+% Revision 1.1 92/04/07 09:09:01 levy
+% Initial revision
diff --git a/macros/latex209/contrib/geomsty/geomindx.sty b/macros/latex209/contrib/geomsty/geomindx.sty
new file mode 100644
index 0000000000..368ba4a3dc
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geomindx.sty
@@ -0,0 +1,72 @@
+% $Header: /home/tampa_a/fac/levy/texts/geombook/RCS/index.sty,v 1.1 92/04/07 09:47:28 levy Exp $
+
+\@ifundefined{@margin}{}{\endinput}
+
+%
+% index and glossary macros
+%
+% the basic user-level command is \index, which, in proof mode
+% merely prints the entry on the left margin. To revert to
+% index-making behavior, type \makeindex.
+%
+
+\newif\ifmakingindex\makingindexfalse
+\def\makeindex{\if@filesw \newwrite\@indexfile
+ \immediate\openout\@indexfile=\jobname.idx
+ \makingindextrue\typeout{Writing index file \jobname.idx }\fi}
+
+\def\index#1{\@bsphack\ifproofing\marginindex{#1}\fi\ifmakingindex\begingroup
+ \set@key{#1}\@wrindex{\the\@key}\else\@esphack\fi}
+\def\marginindex#1{{\everypar{}\insert\@margin{%
+ \vbox{\marginstyle\strut #1\hfil\strut}}}}
+\def\marginstyle{\tiny \hsize=1in \parindent=0pt \hangindent=10pt
+ \hangafter=1 \rightskip=0pt plus 5em }
+\newinsert\@margin \dimen\@margin=\maxdimen \count\@margin=0 \skip\@margin=0pt
+
+%
+% change in output routine to account for new insertion class
+%
+\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
+ \else\setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox
+ \ifvoid\@margin\else
+ \llap{\vbox to0pt {\kern4pt\box\@margin \vss}\kern .1in}\fi
+ \unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}
+ \global\maxdepth\@maxdepth}
+
+%
+% But \index does not print its argument. To index a word that
+% actually appears in the text say \ix{...}. To index notation say \ixn$...$
+% or \ixninv$...$, depending on whether the word should appear or not.
+% And just for symmetry, you can also use \ixinv, which equals \index:
+%
+% Text Notation
+%
+% Visible \ix \ixn
+% Invisible \ixinv \ixninv
+%
+\def\ixinv{\index} % must not use \let, since meaning changes
+ % under \makeindex
+\def\ix#1{#1\index{#1}}
+\def\ixninv$#1${\index{$#1$}}
+\def\ixn$#1${$#1$\index{$#1$}}
+
+%
+% Some functions such as cross-referencing automatically invoke
+% indexing. The particular format is defined here.
+% The xfs for \labelindex are needed because \index doesn't expand
+%
+\def\labelindex#1{\@xf\@xf\@xf\index
+ \@xf\@xf\@xf{\@xf\cap@first\object@type\space``#1''}}
+\def\refindex#1{\index{#1}}
+{\catcode`\%=12 \gdef\refinvindex#1{\index{% #1}}}
+
+% $Log: index.sty,v $
+%Revision 1.1 92/04/07 09:47:28 levy
+%Initial revision
+%
diff --git a/macros/latex209/contrib/geomsty/geompsfi.sty b/macros/latex209/contrib/geomsty/geompsfi.sty
new file mode 100644
index 0000000000..d158531e71
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/geompsfi.sty
@@ -0,0 +1,632 @@
+% $Header: /usr/home/levy/texts/geomsty/RCS/geompsfi.sty,v 1.18 95/12/06 13:40:51 levy Exp $
+
+% This is geompsfig.sty, based on psfig.tex by Trevor Darrell (as
+% modified by Stefan Bechtoslheim).
+%
+% It works with Latex and plain TeX (normally under the name geompsfi.tex).
+% Thanks to Ket Richter for working out the changes for Plain tex.
+
+% Copyright 1991, 1992, 1993 Silvio Levy
+
+% This file is part of the Geom Latex style files. It is distributed in
+% the hope that it will be useful, but WITHOUT ANY WARRANTY. The author
+% makes no representation as to its suitability for any purpose.
+
+% Permission is granted for use and non-profit distribution of this
+% file provided that this notice is clearly maintained. The right to
+% distribute this file for profit or as part of any commercial
+% product is specifically reserved for the author. If you make
+% changes to this file you cannot distribute it under the same name,
+% but you can distribute it under a different name provided it is not
+% for profit of as part of a commercial product, and provided that the
+% copyright line above and this notice are clearly maintained.
+
+% This version assumes that dimensions read from a PostScript file or
+% from a .lab file are in bp (big points). Dimensions found in the
+% source TeX file (as in \psfig{...,height=2in}) are true dimensions
+% (that is, are not scaled pt -> bp). This is all as it should be.
+
+\edef\atcatcode{\the\catcode`\@}
+\catcode`@=11
+
+\newif\ifoldlabels \oldlabelsfalse
+\expandafter\ifx\csname @ifundefined\endcsname\relax
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
+ #1\endcsname\relax#2\else#3\fi}
+\def\@iden#1{#1}
+%\newdimen\@tempdima
+\alloc@1\dimen\dimendef\insc@unt\@tempdima
+\def\@warning#1{\message{Warning: #1.}}
+\fi
+
+\@ifundefined{ps@init}{}{\endinput}
+
+\@ifundefined{hyperactivelabels}{\let\hyperactivelabels\relax}{}
+
+\newif\if@topspecials %false for Rokicki's dvips: \special is at bottom of box
+ % true for dvitps, dvi2ps
+
+\input driver.chg % driver-dependent definitions (generally a symlink)
+
+\newcount\psfc@a
+\newcount\psfc@b
+\newcount\psfc@c
+\newcount\psfc@d
+\newcount\psfc@e
+\newcount\psfc@f
+\newcount\psfc@g
+\newcount\psfc@h
+\newcount\psfc@i
+\newcount\psfc@j
+\newcount\psscale@count
+\newtoks\psfigtoks@
+% A dimension register for temporarily storing a dimension in
+% \@pDimenToSpNumber.
+\newdimen\psfig@dimen
+%
+%\newwrite\@unused
+%\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
+
+% Identifying message is here.
+% \typeout{psfig/tex 1.4.gcg / TeXPS}\fi
+%
+% @psdo control structure -- similar to Latex @for.
+% I redefined these with different names so that psfig can
+% be used with TeX as well as LaTeX, and so that it will not
+% be vunerable to future changes in LaTeX's internal
+% control structure.
+\def\@nnil{\@nil}
+\def\@empty{}
+\def\@psdonoop#1\@@#2#3{}
+\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi}
+\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi}
+\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}}
+\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi}
+\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}}
+%
+\def\psdraft{%
+ \def\@psdraft{0}
+ %\typeout{draft level now is \@psdraft \space.}
+}
+\def\psfull{%
+ \def\@psdraft{100}
+ %\typeout{draft level now is \@psdraft \space.}
+}
+\psfull
+\newif\if@prologfile
+\newif\if@postlogfile
+\newif\if@noisy
+\def\pssilent{%
+ \@noisyfalse
+}
+\def\psnoisy{%
+ \@noisytrue
+}
+%\psnoisy
+\pssilent
+% These are for the option list:
+% a specification of the form a = b maps to calling \@p@@sa{b}.
+\newif\if@bbllx
+\newif\if@bblly
+\newif\if@bburx
+\newif\if@bbury
+\newif\if@height
+\newif\if@width
+\newif\if@rheight
+\newif\if@rwidth
+\newif\if@clip
+\newif\if@proportional
+\newif\if@scale
+\newif\if@verbose
+\def\@p@@sclip#1{\@cliptrue}
+\def\@p@@sproportional#1{\@proportionaltrue}
+\def\@p@@sfile#1{%
+ %\typeout{file is #1}
+ \def\@p@sfile{#1.ps}%
+ \def\@labfile{#1.lab}%
+}
+\def\@p@@sfigure#1{%
+ \def\@p@sfile{#1.ps}%
+ \def\@labfile{#1.lab}%
+}
+% \@pDimenToSpNumber
+% ==================
+% Convert a dimension into scaled points.
+% #1: the name of macro which will expand to the dimension in
+% scaled points, without the unit 'sp' though, i.e. as a pure
+% integer.
+% #2: the dimension (not a dimension register, use
+% \the if dimension is stored in a dimension register).
+\def\@pDimenToSpNumber #1#2{%
+ \psfig@dimen = #2\relax
+ \edef#1{\number\psfig@dimen}%
+}
+\def\@p@@sbbllx#1{%
+ %\typeout{bbllx is #1}
+ \@bbllxtrue
+ \@pDimenToSpNumber{\@p@sbbllx}{#1}%
+}
+\def\@p@@sbblly#1{%
+ %\typeout{bblly is #1}
+ \@bbllytrue
+ \@pDimenToSpNumber{\@p@sbblly}{#1}%
+}
+\def\@p@@sbburx#1{%
+ %\typeout{bburx is #1}
+ \@bburxtrue
+ \@pDimenToSpNumber{\@p@sbburx}{#1}%
+}
+\def\@p@@sbbury#1{%
+ %\typeout{bbury is #1}
+ \@bburytrue
+ \@pDimenToSpNumber{\@p@sbbury}{#1}%
+}
+\def\@p@@sheight#1{%
+ \@heighttrue
+ \@pDimenToSpNumber{\@p@sheight}{#1}%
+ %\typeout{Height is \@p@sheight}
+}
+\def\@p@@swidth#1{%
+ %\typeout{Width is #1}
+ \@widthtrue
+ \@pDimenToSpNumber{\@p@swidth}{#1}%
+}
+\def\@p@@srheight#1{%
+ %\typeout{Reserved height is #1}
+ \@rheighttrue
+ \@pDimenToSpNumber{\@p@srheight}{#1}%
+}
+\def\@p@@srwidth#1{%
+ %\typeout{Reserved width is #1}
+ \@rwidthtrue
+ \@pDimenToSpNumber{\@p@srwidth}{#1}%
+}
+\def\@p@@ssilent#1{%
+ \@verbosefalse
+}
+\def\@p@@sscale #1{%
+ \def\@p@scale{#1}%
+ \@scaletrue
+}
+
+\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}}
+\def\@p@@spostlog#1{\@postlogfiletrue\def\@postlogfileval{#1}}
+\def\@cs@name#1{\csname #1\endcsname}
+\def\@setparms#1=#2,{\def\@tempa{#2}\ifx\@tempa\@empty
+ \@warning{bad syntax (missing = or extra comma) in argument of \string\psfig}%
+ \else\@@setparms#1=#2,\fi}
+\def\@@setparms#1=#2=,{\@cs@name{@p@@s#1}{#2}}
+%
+% Initialize the defaults.
+%
+\def\ps@init@parms{%
+ \@bbllxfalse \@bbllyfalse
+ \@bburxfalse \@bburyfalse
+ \@heightfalse \@widthfalse
+ \@rheightfalse \@rwidthfalse
+ \@scalefalse
+ \def\@p@sbbllx{}\def\@p@sbblly{}%
+ \def\@p@sbburx{}\def\@p@sbbury{}%
+ \def\@p@sheight{}\def\@p@swidth{}%
+ \def\@p@srheight{}\def\@p@srwidth{}%
+ \def\@p@sfile{}%
+ \def\@labfile{}%
+ \def\@p@scost{10}%
+ \def\@sc{}%
+ \@prologfiletrue
+ \@postlogfilefalse
+ \@clipfalse
+ \@proportionalfalse
+ \if@noisy
+ \@verbosetrue
+ \else
+ \@verbosefalse
+ \fi
+}
+%
+% Go through the options setting things up.
+%
+\def\parse@ps@parms#1{%
+ \@psdo\@psfiga:=#1\do
+ {\expandafter\@setparms\@psfiga=,}%
+}
+
+\newif\ifno@file
+\newif\ifno@bb
+\newif\ifnot@eof
+\newif\if@bbmatch
+\newif\if@crematch
+\newif\ifmathematica
+\newif\ifillustrator
+\newread\ps@stream
+\newread\lab@stream
+\newcount\@linecount
+\newcount\maxheaderlines
+\maxheaderlines=100
+
+%
+% Scan header of file, looking for ``BoundingBox'' and ``Creator'' lines
+%
+\def\scan@header{%
+ \openin\ps@stream=\@p@sfile
+ \openin\lab@stream=\@labfile
+ \ifeof\ps@stream
+ \relax %needed so the \@warning won't cause trouble
+ \@warning{cannot open \@p@sfile}
+ \no@filetrue
+ \else
+ \not@eoftrue
+ \ifno@bb \@bbmatchfalse \else \@bbmatchtrue \fi
+ \@crematchfalse
+ \catcode`\%=12
+ \catcode`\:=12 % in case punctuation is active (e.g., under french.sty)
+ \@linecount=\maxheaderlines
+ \loop
+ \read\ps@stream to \line@in
+ \global\psfigtoks@=\expandafter{\line@in}
+ \ifeof\ps@stream \not@eoffalse \fi
+ %\typeout{ looking at :: \the\psfigtoks@ }
+ \if@bbmatch \else \@bbtest{\psfigtoks@} \fi
+ \if@crematch \else \@cretest{\psfigtoks@} \fi
+ \if@crematch \if@bbmatch \not@eoffalse \fi \fi
+ \advance\@linecount-1
+ \ifnum\@linecount=0 \not@eoffalse \fi
+ \ifnot@eof \repeat
+ \fi
+ \catcode`\%=14
+}
+
+% '% ' becomes a regular character for a very short time.
+{
+ \catcode`\%=12
+ \catcode`\:=12
+ \gdef\@bbtest#1{\expandafter\@bb@\the#1%%BoundingBox:\@bbtest\@bb@}
+ \global\long\def\@bb@#1%%BoundingBox:#2#3\@bb@{\ifx\@bbtest#2
+ \else\@bbmatchtrue\expandafter\bb@cull\the\psfigtoks@\fi}
+
+ \gdef\@cretest#1{\expandafter\@cre@\the#1%%Creator:\@cretest\@cre@}
+ \global\long\def\@cre@#1%%Creator:#2#3\@cre@{\ifx\@cretest#2
+ \else\@crematchtrue\@mathtest{\psfigtoks@}\@illtest{\psfigtoks@}\fi}
+}
+
+%
+% Takes action if ``Creator'' line contains ``Mathematica'' or ``Illustrator''
+%
+\def\@mathtest#1{\expandafter\@math@\the#1Mathematica\@mathtest\@math@}
+\long\def\@math@#1Mathematica#2#3\@math@{\ifx\@mathtest#2
+ \else\mathematicatrue \fi}
+
+\def\@illtest#1{\expandafter\@ill@\the#1Illustrator\@illtest\@ill@}
+\long\def\@ill@#1Illustrator#2#3\@ill@{\ifx\@illtest#2
+ \else\illustratortrue \fi}
+
+\def\bb@cull#1:{\expandafter\bb@@cull\@iden}
+\long\def\bb@@cull#1 #2 #3 #4 {%
+ \@pDimenToSpNumber{\@p@sbbllx}{#1bp}%
+ \@pDimenToSpNumber{\@p@sbblly}{#2bp}%
+ \@pDimenToSpNumber{\@p@sbburx}{#3bp}%
+ \@pDimenToSpNumber{\@p@sbbury}{#4bp}%
+ \no@bbfalse
+}
+
+% Compute \@bbw and \@bbh, the width and height of the
+% bounding box.
+\def\compute@bb{%
+ \no@bbfalse
+ \if@bbllx \else \no@bbtrue \fi
+ \if@bblly \else \no@bbtrue \fi
+ \if@bburx \else \no@bbtrue \fi
+ \if@bbury \else \no@bbtrue \fi
+ \scan@header
+ \ifno@file
+ \else
+ \ifno@bb
+ \@warning{no bounding box found in \@p@sfile}
+ \no@filetrue
+ \else
+ % Now compute the size of the bounding box.
+ \psfc@c=\@p@sbburx
+ \psfc@b=\@p@sbbury
+ \advance\psfc@c by -\@p@sbbllx
+ \advance\psfc@b by -\@p@sbblly
+ \edef\@bbw{\number\psfc@c}
+ \edef\@bbh{\number\psfc@b}
+ %\typeout{\string\compute@bb: bbh = \@bbh, bbw = \@bbw}
+ \fi
+ \fi
+}
+
+%
+% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds,
+% then leaves the result in \@result.
+%
+% note: #3 should be a big number, or a multiple of 10.
+%
+\def\in@hundreds #1#2#3{%
+ \psfc@g=#2
+ \psfc@d=#3
+ \divide\psfc@d 10
+ \psfc@a=\psfc@g % First two digits #2/#3.
+ \divide\psfc@a by \psfc@d
+ \psfc@f=\psfc@a
+ \multiply\psfc@f by \psfc@d
+ \advance\psfc@g by -\psfc@f
+ \multiply\psfc@g by 10
+ \psfc@f=\psfc@g % Third digit of #2/#3.
+ \divide\psfc@f by \psfc@d
+ \psfc@j=\psfc@f
+ \multiply\psfc@j by \psfc@d
+ \advance\psfc@g by -\psfc@j
+ \multiply\psfc@g by 10
+ \psfc@j=\psfc@g % Third digit.
+ \divide\psfc@j by \psfc@d
+ \psfc@h=#1\psfc@i=0
+ \psfc@e=\psfc@h
+ \multiply\psfc@e by \psfc@a
+ \advance\psfc@i by \psfc@e
+ \psfc@e=\psfc@h
+ \divide\psfc@e by 10
+ \multiply\psfc@e by \psfc@f
+ \advance\psfc@i by \psfc@e
+ %
+ \psfc@e=\psfc@h
+ \divide\psfc@e by 100
+ \multiply\psfc@e by \psfc@j
+ \advance\psfc@i by \psfc@e
+ \divide\psfc@i 10
+ %
+ \edef\@result{\number\psfc@i}
+}
+% Scale a value #1 by the current scaling factor and reassign the new
+% scaled value.
+\def\@ScaleInHundreds #1{%
+ \in@hundreds{#1}{\@p@scale}{100}%
+ \edef#1{\@result}%
+}
+%
+%
+% Compute width from height.
+\def\compute@wfromh{%
+ % computing : width = height * (bbw / bbh)
+ \in@hundreds{\@p@sheight}{\@bbw}{\@bbh}%
+ %\typeout{ \@p@sheight * \@bbw / \@bbh, = \@result }
+ \edef\@p@swidth{\@result}%
+ %\typeout{w from h: width is \@p@swidth}%
+}
+%
+% Compute height from width.
+%
+\def\compute@hfromw{%
+ % computing : height = width * (bbh / bbw)
+ \in@hundreds{\@p@swidth}{\@bbh}{\@bbw}%
+ %\typeout{ \@p@swidth * \@bbh / \@bbw = \@result }
+ \edef\@p@sheight{\@result}%
+ %\typeout{h from w : height is \@p@sheight}%
+}
+%
+% Compute height and width when both are given and proportionality
+% must be preserved.
+%
+\def\compute@minhw{%
+ \in@hundreds{\@p@swidth}{\@bbh}{\@bbw}%
+ \ifnum\@p@sheight<\@result
+ \in@hundreds{\@p@sheight}{\@bbw}{\@bbh}%
+ \edef\@p@swidth{\@result}%
+ \else
+ \edef\@p@sheight{\@result}%
+ \fi
+}
+%
+% Compute height and width, i.e. \@p@sheight and \@p@swidth.
+%
+\def\compute@handw{%
+ % If height is given.
+ \if@height
+ % If width is given
+ \if@width
+ \if@proportional
+ \compute@minhw
+ \fi
+ \else
+ % Height, no width: compute width.
+ \compute@wfromh
+ \fi
+ \else
+ % No height.
+ \if@width
+ % Width is given, no height though: compute it.
+ \compute@hfromw
+ \else
+ % Neither width no height is give.
+ \edef\@p@sheight{\@bbh}
+ \edef\@p@swidth{\@bbw}
+ \fi
+ \fi
+}
+% Compute the amount of space to reserve. Unless defined
+% using rheight and rwidth when \psfig is called, these values
+% default to \@p@sheight and \@p@swidth.
+\def\compute@resv{%
+ \if@rheight \else \edef\@p@srheight{\@p@sheight} \fi
+ \if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi
+}
+%
+%
+% \psfig
+% ======
+% usage: \psfig{file=, height=, width=, bbllx=, bblly=, bburx=, bbury=,
+% rheight=, rwidth=, clip=, scale=, proportional=}
+%
+% "clip=" and "proportional=" are switches and take no value,
+% but the `=' must be present.
+%
+\def\partest{\par}
+\def\psfig#1{%
+ \vbox {%
+ \offinterlineskip
+ \ps@init@parms
+ \parse@ps@parms{#1}%
+ % Compute any missing sizes.
+ \compute@bb
+ \ifno@file\vbox{\hbox{{\tt\@p@sfile} not found}}%
+ \else
+ \compute@handw
+ \compute@resv
+ \if@scale
+ %\if@verbose \typeout{psfig: scaling by \@p@scale}\fi
+ % We now scale the width and height as reported to the PS printer.
+ \@ScaleInHundreds{\@p@swidth}%
+ \@ScaleInHundreds{\@p@sheight}%
+ \@ScaleInHundreds{\@p@srwidth}%
+ \@ScaleInHundreds{\@p@srheight}%
+ \fi
+ %
+ \ifnum\@p@scost<\@psdraft
+ %\if@verbose \typeout{psfig: including \@p@sfile \space}\fi
+ \if@topspecials\do@specials\fi
+ % Create a vbox to reserve the proper amount of space for the figure.
+ \vbox to \@p@srheight sp{%
+ \hbox to \@p@srwidth sp{}%
+ \vss
+ }%
+ \if@topspecials\else\do@specials\fi
+ \ifeof\lab@stream
+ %\if@verbose\typeout{psfig: no file \@labfile \space found}\fi
+ \else{%
+ \hyperactivelabels
+ \not@eoftrue
+ \loop
+ \read\lab@stream to \line@in \ifx\line@in\partest\else\line@in\fi
+ \ifeof\lab@stream \not@eoffalse \fi
+ \ifnot@eof \repeat
+ }\fi
+ \else
+ % Draft mode: reserve the space for the figure and print the path name.
+ \vbox to \@p@srheight sp{%
+ \hbox to \@p@srwidth sp{%
+ \if@verbose
+ \@p@sfile
+ \fi
+ }%
+ \vss
+ }%
+ \fi
+ \fi
+ }%
+}
+
+\def\do@specials{\ps@init\ps@begin
+ \if@clip
+ %\if@verbose \typeout{(clip)} \fi
+ \ps@clip \fi
+ \if@prologfile \ps@prolog \fi \ps@include \if@postlogfile \ps@postlog \fi
+ \ps@end}
+
+\newbox\label@box
+\newdimen\x@lab \newdimen\y@lab
+\newdimen\x@aux \newdimen\y@aux
+\newdimen\hair\hair=3pt
+\def\setlabel#1#2#3#4#5{%
+ \setbox\label@box\hbox{$#1$}%
+ \x@lab.5\wd\label@box \x@lab#4\x@lab
+ \y@lab.5\ht\label@box\advance\y@lab.5\dp\label@box \y@lab#5\y@lab
+% rotate lab clockwise by 22.5 degrees to get aux
+ \x@aux.92388\x@lab \advance\x@aux.38268\y@lab
+ \y@aux-.38268\x@lab \advance\y@aux.92388\y@lab
+% choose
+ \ifdim\x@aux>0pt
+ \ifdim\y@aux>0pt
+ \ifdim\x@aux>\y@aux\advance\x@lab.7071\hair\advance\y@lab.7071\hair
+ \else\advance\y@lab\hair\fi
+ \else
+ \ifdim\x@aux>-\y@aux\advance\x@lab\hair
+ \else\advance\x@lab.7071\hair\advance\y@lab-.7071\hair\fi
+ \fi
+ \else
+ \ifdim\y@aux>0pt
+ \ifdim\x@aux>-\y@aux\advance\x@lab-.7071\hair\advance\y@lab.7071\hair
+ \else\advance\x@lab-\hair\fi
+ \else
+ \ifdim\x@aux>\y@aux\advance\y@lab-\hair
+ \else
+ \ifdim\x@aux<0pt
+ \advance\x@lab-.7071\hair\advance\y@lab-.7071\hair\fi
+ \fi
+ \fi
+ \fi
+ \advance\x@lab.5\wd\label@box
+ \advance\y@lab.5\ht\label@box\advance\y@lab.5\dp\label@box
+ \x@aux=#2bp \ifoldlabels \else \advance\x@aux by -\@p@sbbllx sp \fi
+ \y@aux=#3bp \ifoldlabels \else \advance\y@aux by -\@p@sbblly sp \fi
+ \in@hundreds{\x@aux}{\@p@swidth}{\@bbw}
+ \edef\@xpos{\@result}
+ \in@hundreds{\y@aux}{\@p@sheight}{\@bbh}
+ \edef\@ypos{\@result}
+ \vbox to 0pt{%
+ \vss\hbox to\@p@srwidth sp{\hskip \@xpos sp \hskip-\x@lab
+ \box\label@box\hss}\vskip \@ypos sp \vskip-\y@lab}}
+
+\catcode`@=\atcatcode
+
+% $Log: geompsfi.sty,v $
+%Revision 1.18 95/12/06 13:40:51 levy
+%made geompsfi.tex work (\ifx\@ifundefined was wrong!)
+%
+%Revision 1.17 1994/06/23 04:36:58 levy
+%added \ifoldlabels for compatibility with behavior before version 1.11
+%
+%Revision 1.16 1994/04/29 00:19:21 levy
+%combined with geompsfi.tex
+%
+%Revision 1.16 1994/04/29 00:03:40 levy
+%leave plenty of space so patch geompsfi.tex works
+%
+%Revision 1.15 1994/04/03 07:07:57 levy
+%removed hair correction when x@lab and y@lab are both zero
+%
+%Revision 1.14 1993/09/16 22:22:38 levy
+%\catcode`\:=12 % in case punctuation is active (e.g., under french.sty)
+%
+%Revision 1.13 1993/08/27 23:04:27 levy
+%removed "true" from PS dimensions (so it works with \magnifications)
+%
+%Revision 1.12 93/08/16 12:28:46 levy
+%\ifundefined\hyperactivelabels
+%
+%Revision 1.11 93/07/19 02:17:24 levy
+%.lab coordinates should be world coordinates
+%
+%Revision 1.10 93/03/05 10:59:38 levy
+%error message when arguments of \psfig are incorrect
+%
+%Revision 1.9 1993/01/13 15:50:36 levy
+%expressed things in bp (correctly)
+%
+%Revision 1.8 1993/01/10 20:56:04 levy
+%inhundreds -> inthousands
+%
+%Revision 1.6 92/07/13 11:12:40 levy
+%better error message when bounding box not found
+%
+%Revision 1.5 92/06/15 22:05:22 levy
+%proportional scaling
+%
+%Revision 1.4 92/06/10 13:03:45 levy
+%extend header from 10 to 15 lines
+%
+%Revision 1.3 92/06/10 12:41:14 levy
+%scan header for "Creator" line
+%
+%Revision 1.2 92/04/07 09:09:17 levy
+%*** empty log message ***
+%
+% Revision 1.1 92/03/31 14:12:38 levy
+% Initial revision
+
diff --git a/macros/latex209/contrib/geomsty/illustrator.pro b/macros/latex209/contrib/geomsty/illustrator.pro
new file mode 100644
index 0000000000..59fd05cfd7
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/illustrator.pro
@@ -0,0 +1,872 @@
+%%BeginResource: procset Adobe_packedarray 2.0 0
+%%Title: (Packed Array Operators)
+%%Version: 2.0
+%%CreationDate: (8/2/90) ()
+%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
+
+userdict /Adobe_packedarray 5 dict dup begin put
+/initialize % - initialize -
+{
+/packedarray where
+ {
+ pop
+ }
+ {
+ Adobe_packedarray begin
+ Adobe_packedarray
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ userdict 3 1 roll put
+ } forall
+ end
+ } ifelse
+} def
+/terminate % - terminate -
+{
+} def
+/packedarray % arguments count packedarray array
+{
+array astore readonly
+} def
+/setpacking % boolean setpacking -
+{
+pop
+} def
+/currentpacking % - setpacking boolean
+{
+false
+} def
+currentdict readonly pop end
+%%EndResource
+%%BeginResource: procset Adobe_cmykcolor 1.1 0
+%%Title: (CMYK Color Operators)
+%%Version: 1.1
+%%CreationDate: (1/23/89) ()
+%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
+
+currentpacking true setpacking
+userdict /Adobe_cmykcolor 4 dict dup begin put
+/initialize % - initialize -
+{
+/setcmykcolor where
+ {
+ pop
+ }
+ {
+ userdict /Adobe_cmykcolor_vars 2 dict dup begin put
+ /_setrgbcolor
+ /setrgbcolor load def
+ /_currentrgbcolor
+ /currentrgbcolor load def
+ Adobe_cmykcolor begin
+ Adobe_cmykcolor
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+ end
+ end
+ Adobe_cmykcolor begin
+ } ifelse
+} def
+/terminate % - terminate -
+{
+currentdict Adobe_cmykcolor eq
+ {
+ end
+ } if
+} def
+/setcmykcolor % cyan magenta yellow black setcmykcolor -
+{
+1 sub 4 1 roll
+3
+ {
+ 3 index add neg dup 0 lt
+ {
+ pop 0
+ } if
+ 3 1 roll
+ } repeat
+Adobe_cmykcolor_vars /_setrgbcolor get exec
+pop
+} def
+/currentcmykcolor % - currentcmykcolor cyan magenta yellow black
+{
+Adobe_cmykcolor_vars /_currentrgbcolor get exec
+3
+ {
+ 1 sub neg 3 1 roll
+ } repeat
+0
+} def
+currentdict readonly pop end
+setpacking
+
+%%EndResource
+%%BeginResource: procset Adobe_cshow 1.1 0
+%%Title: (cshow Operator)
+%%Version: 1.1
+%%CreationDate: (1/23/89) ()
+%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
+
+currentpacking true setpacking
+userdict /Adobe_cshow 3 dict dup begin put
+/initialize % - initialize -
+{
+/cshow where
+ {
+ pop
+ }
+ {
+ userdict /Adobe_cshow_vars 1 dict dup begin put
+ /_cshow % - _cshow proc
+ {} def
+ Adobe_cshow begin
+ Adobe_cshow
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ userdict 3 1 roll put
+ } forall
+ end
+ end
+ } ifelse
+} def
+/terminate % - terminate -
+{
+} def
+/cshow % proc string cshow -
+{
+exch
+Adobe_cshow_vars
+ exch /_cshow
+ exch put
+ {
+ 0 0 Adobe_cshow_vars /_cshow get exec
+ } forall
+} def
+currentdict readonly pop end
+setpacking
+
+%%EndResource
+%%BeginResource: procset Adobe_customcolor 1.0 0
+%%Title: (Custom Color Operators)
+%%Version: 1.0
+%%CreationDate: (5/9/88) ()
+%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
+
+currentpacking true setpacking
+userdict /Adobe_customcolor 5 dict dup begin put
+/initialize % - initialize -
+{
+/setcustomcolor where
+ {
+ pop
+ }
+ {
+ Adobe_customcolor begin
+ Adobe_customcolor
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+ end
+ Adobe_customcolor begin
+ } ifelse
+} def
+/terminate % - terminate -
+{
+currentdict Adobe_customcolor eq
+ {
+ end
+ } if
+} def
+/findcmykcustomcolor % cyan magenta yellow black name findcmykcustomcolor object
+{
+5 packedarray
+} def
+/setcustomcolor % object tint setcustomcolor -
+{
+exch
+aload pop pop
+4
+ {
+ 4 index mul 4 1 roll
+ } repeat
+5 -1 roll pop
+setcmykcolor
+} def
+/setoverprint % boolean setoverprint -
+{
+pop
+} def
+currentdict readonly pop end
+setpacking
+
+%%EndResource
+%%BeginResource: procset Adobe_IllustratorA_AI3 1.0 1
+%%Title: (Adobe Illustrator (R) Version 3.0 Abbreviated Prolog)
+%%Version: 1.0
+%%CreationDate: (7/22/89) ()
+%%Copyright: ((C) 1987-1990 Adobe Systems Incorporated All Rights Reserved)
+
+currentpacking true setpacking
+userdict /Adobe_IllustratorA_AI3 61 dict dup begin put
+% initialization
+/initialize % - initialize -
+{
+% 47 vars, but leave slack of 10 entries for custom Postscript fragments
+userdict /Adobe_IllustratorA_AI3_vars 57 dict dup begin put
+
+% paint operands
+/_lp /none def
+/_pf {} def
+/_ps {} def
+/_psf {} def
+/_pss {} def
+/_pjsf {} def
+/_pjss {} def
+/_pola 0 def
+/_doClip 0 def
+
+% paint operators
+/cf currentflat def % - cf flatness
+
+% typography operands
+/_tm matrix def
+/_renderStart [/e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0] def
+/_renderEnd [null null null null /i1 /i1 /i1 /i1] def
+/_render -1 def
+/_rise 0 def
+/_ax 0 def % x character spacing (_ax, _ay, _cx, _cy follows awidthshow naming convention)
+/_ay 0 def % y character spacing
+/_cx 0 def % x word spacing
+/_cy 0 def % y word spacing
+/_leading [0 0] def
+/_ctm matrix def
+/_mtx matrix def
+/_sp 16#020 def
+/_hyphen (-) def
+/_fScl 0 def
+/_cnt 0 def
+/_hs 1 def
+/_nativeEncoding 0 def
+/_useNativeEncoding 0 def
+/_tempEncode 0 def
+/_pntr 0 def
+/_tDict 2 dict def
+
+% typography operators
+/Tx {} def
+/Tj {} def
+
+% compound path operators
+/CRender {} def
+
+% printing
+/_AI3_savepage {} def
+
+% color operands
+/_gf null def
+/_cf 4 array def
+/_if null def
+/_of false def
+/_fc {} def
+/_gs null def
+/_cs 4 array def
+/_is null def
+/_os false def
+/_sc {} def
+/_i null def
+Adobe_IllustratorA_AI3 begin
+Adobe_IllustratorA_AI3
+ {
+ dup xcheck
+ {
+ bind
+ } if
+ pop pop
+ } forall
+end
+end
+Adobe_IllustratorA_AI3 begin
+Adobe_IllustratorA_AI3_vars begin
+newpath
+} def
+/terminate % - terminate -
+{
+end
+end
+} def
+% definition operators
+/_ % - _ null
+null def
+/ddef % key value ddef -
+{
+Adobe_IllustratorA_AI3_vars 3 1 roll put
+} def
+/xput % key value literal xput -
+{
+dup load dup length exch maxlength eq
+ {
+ dup dup load dup
+ length 2 mul dict copy def
+ } if
+load begin def end
+} def
+/npop % integer npop -
+{
+ {
+ pop
+ } repeat
+} def
+% marking operators
+/sw % ax ay string sw x y
+{
+dup length exch stringwidth
+exch 5 -1 roll 3 index 1 sub mul add
+4 1 roll 3 1 roll 1 sub mul add
+} def
+/swj % cx cy fillchar ax ay string swj x y
+{
+dup 4 1 roll
+dup length exch stringwidth
+exch 5 -1 roll 3 index 1 sub mul add
+4 1 roll 3 1 roll 1 sub mul add
+6 2 roll /_cnt 0 ddef
+{1 index eq {/_cnt _cnt 1 add ddef} if} forall pop
+exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop
+} def
+/ss % ax ay string matrix ss -
+{
+4 1 roll
+ { % matrix ax ay char 0 0 {proc} -
+ 2 npop
+ (0) exch 2 copy 0 exch put pop
+ gsave
+ false charpath currentpoint
+ 4 index setmatrix
+ stroke
+ grestore
+ moveto
+ 2 copy rmoveto
+ } exch cshow
+3 npop
+} def
+/jss % cx cy fillchar ax ay string matrix jss -
+{
+4 1 roll
+ { % cx cy fillchar matrix ax ay char 0 0 {proc} -
+ 2 npop
+ (0) exch 2 copy 0 exch put
+ gsave
+ _sp eq
+ {
+ exch 6 index 6 index 6 index 5 -1 roll widthshow
+ currentpoint
+ }
+ {
+ false charpath currentpoint
+ 4 index setmatrix stroke
+ }ifelse
+ grestore
+ moveto
+ 2 copy rmoveto
+ } exch cshow
+6 npop
+} def
+
+% path operators
+/sp % ax ay string sp -
+{
+ {
+ 2 npop (0) exch
+ 2 copy 0 exch put pop
+ false charpath
+ 2 copy rmoveto
+ } exch cshow
+2 npop
+} def
+/jsp % cx cy fillchar ax ay string jsp -
+{
+ { % cx cy fillchar ax ay char 0 0 {proc} -
+ 2 npop
+ (0) exch 2 copy 0 exch put
+ _sp eq
+ {
+ exch 5 index 5 index 5 index 5 -1 roll widthshow
+ }
+ {
+ false charpath
+ }ifelse
+ 2 copy rmoveto
+ } exch cshow
+5 npop
+} def
+
+% path construction operators
+/pl % x y pl x y
+{
+transform
+0.25 sub round 0.25 add exch
+0.25 sub round 0.25 add exch
+itransform
+} def
+/setstrokeadjust where
+ {
+ pop true setstrokeadjust
+ /c % x1 y1 x2 y2 x3 y3 c -
+ {
+ curveto
+ } def
+ /C
+ /c load def
+ /v % x2 y2 x3 y3 v -
+ {
+ currentpoint 6 2 roll curveto
+ } def
+ /V
+ /v load def
+ /y % x1 y1 x2 y2 y -
+ {
+ 2 copy curveto
+ } def
+ /Y
+ /y load def
+ /l % x y l -
+ {
+ lineto
+ } def
+ /L
+ /l load def
+ /m % x y m -
+ {
+ moveto
+ } def
+ }
+ {%else
+ /c
+ {
+ pl curveto
+ } def
+ /C
+ /c load def
+ /v
+ {
+ currentpoint 6 2 roll pl curveto
+ } def
+ /V
+ /v load def
+ /y
+ {
+ pl 2 copy curveto
+ } def
+ /Y
+ /y load def
+ /l
+ {
+ pl lineto
+ } def
+ /L
+ /l load def
+ /m
+ {
+ pl moveto
+ } def
+ }ifelse
+
+% graphic state operators
+/d % array phase d -
+{
+setdash
+} def
+/cf {} def % - cf flatness
+/i % flatness i -
+{
+dup 0 eq
+ {
+ pop cf
+ } if
+setflat
+} def
+/j % linejoin j -
+{
+setlinejoin
+} def
+/J % linecap J -
+{
+setlinecap
+} def
+/M % miterlimit M -
+{
+setmiterlimit
+} def
+/w % linewidth w -
+{
+setlinewidth
+} def
+
+% path painting operators
+/H % - H -
+{} def
+/h % - h -
+{
+closepath
+} def
+/N % - N -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq {clip /_doClip 0 ddef} if
+ newpath
+ }
+ {
+ /CRender {N} ddef
+ }ifelse
+} def
+/n % - n -
+{N} def
+/F % - F -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq
+ {
+ gsave _pf grestore clip newpath /_lp /none ddef _fc
+ /_doClip 0 ddef
+ }
+ {
+ _pf
+ }ifelse
+ }
+ {
+ /CRender {F} ddef
+ }ifelse
+} def
+/f % - f -
+{
+closepath
+F
+} def
+/S % - S -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq
+ {
+ gsave _ps grestore clip newpath /_lp /none ddef _sc
+ /_doClip 0 ddef
+ }
+ {
+ _ps
+ }ifelse
+ }
+ {
+ /CRender {S} ddef
+ }ifelse
+} def
+/s % - s -
+{
+closepath
+S
+} def
+/B % - B -
+{
+_pola 0 eq
+ {
+ _doClip 1 eq % F clears _doClip
+ gsave F grestore
+ {
+ gsave S grestore clip newpath /_lp /none ddef _sc
+ /_doClip 0 ddef
+ }
+ {
+ S
+ }ifelse
+ }
+ {
+ /CRender {B} ddef
+ }ifelse
+} def
+/b % - b -
+{
+closepath
+B
+} def
+/W % - W -
+{
+/_doClip 1 ddef
+} def
+/* % - [string] * -
+{
+count 0 ne
+ {
+ dup type (stringtype) eq {pop} if
+ } if
+_pola 0 eq {newpath} if
+} def
+
+% group operators
+/u % - u -
+{} def
+/U % - U -
+{} def
+/q % - q -
+{
+_pola 0 eq {gsave} if
+} def
+/Q % - Q -
+{
+_pola 0 eq {grestore} if
+} def
+/*u % - *u -
+{
+_pola 1 add /_pola exch ddef
+} def
+/*U % - *U -
+{
+_pola 1 sub /_pola exch ddef
+_pola 0 eq {CRender} if
+} def
+/D % polarized D -
+{pop} def
+/*w % - *w -
+{} def
+/*W % - *W -
+{} def
+
+% place operators
+/` % matrix llx lly urx ury string ` -
+{
+/_i save ddef
+6 1 roll 4 npop
+concat
+userdict begin
+/showpage {} def
+false setoverprint
+pop
+} def
+/~ % - ~ -
+{
+end
+_i restore
+} def
+
+% color operators
+/O % flag O -
+{
+0 ne
+/_of exch ddef
+/_lp /none ddef
+} def
+/R % flag R -
+{
+0 ne
+/_os exch ddef
+/_lp /none ddef
+} def
+/g % gray g -
+{
+/_gf exch ddef
+/_fc
+{
+_lp /fill ne
+ {
+ _of setoverprint
+ _gf setgray
+ /_lp /fill ddef
+ } if
+} ddef
+/_pf
+{
+_fc
+fill
+} ddef
+/_psf
+{
+_fc
+ashow
+} ddef
+/_pjsf
+{
+_fc
+awidthshow
+} ddef
+/_lp /none ddef
+} def
+/G % gray G -
+{
+/_gs exch ddef
+/_sc
+{
+_lp /stroke ne
+ {
+ _os setoverprint
+ _gs setgray
+ /_lp /stroke ddef
+ } if
+} ddef
+/_ps
+{
+_sc
+stroke
+} ddef
+/_pss
+{
+_sc
+ss
+} ddef
+/_pjss
+{
+_sc
+jss
+} ddef
+/_lp /none ddef
+} def
+/k % cyan magenta yellow black k -
+{
+_cf astore pop
+/_fc
+{
+_lp /fill ne
+ {
+ _of setoverprint
+ _cf aload pop setcmykcolor
+ /_lp /fill ddef
+ } if
+} ddef
+/_pf
+{
+_fc
+fill
+} ddef
+/_psf
+{
+_fc
+ashow
+} ddef
+/_pjsf
+{
+_fc
+awidthshow
+} ddef
+/_lp /none ddef
+} def
+/K % cyan magenta yellow black K -
+{
+_cs astore pop
+/_sc
+{
+_lp /stroke ne
+ {
+ _os setoverprint
+ _cs aload pop setcmykcolor
+ /_lp /stroke ddef
+ } if
+} ddef
+/_ps
+{
+_sc
+stroke
+} ddef
+/_pss
+{
+_sc
+ss
+} ddef
+/_pjss
+{
+_sc
+jss
+} ddef
+/_lp /none ddef
+} def
+/x % cyan magenta yellow black name gray x -
+{
+/_gf exch ddef
+findcmykcustomcolor
+/_if exch ddef
+/_fc
+{
+_lp /fill ne
+ {
+ _of setoverprint
+ _if _gf 1 exch sub setcustomcolor
+ /_lp /fill ddef
+ } if
+} ddef
+/_pf
+{
+_fc
+fill
+} ddef
+/_psf
+{
+_fc
+ashow
+} ddef
+/_pjsf
+{
+_fc
+awidthshow
+} ddef
+/_lp /none ddef
+} def
+/X % cyan magenta yellow black name gray X -
+{
+/_gs exch ddef
+findcmykcustomcolor
+/_is exch ddef
+/_sc
+{
+_lp /stroke ne
+ {
+ _os setoverprint
+ _is _gs 1 exch sub setcustomcolor
+ /_lp /stroke ddef
+ } if
+} ddef
+/_ps
+{
+_sc
+stroke
+} ddef
+/_pss
+{
+_sc
+ss
+} ddef
+/_pjss
+{
+_sc
+jss
+} ddef
+/_lp /none ddef
+} def
+
+% locked object operator
+/A % value A -
+{
+pop
+} def
+
+currentdict readonly pop end
+setpacking
+
+% annotate page operator
+/annotatepage
+{
+} def
+%%EndResource
+
diff --git a/macros/latex209/contrib/geomsty/manual.bib b/macros/latex209/contrib/geomsty/manual.bib
new file mode 100644
index 0000000000..21c2034ad3
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/manual.bib
@@ -0,0 +1,69 @@
+@book{Lamport,
+ author="Leslie Lamport",
+ title="\LaTeX: {A} Document Preparation System",
+ publisher="Addison-Wesley",
+ address="Reading, MA",
+ year = "1986"
+}
+
+@unpublished{amslatex,
+ author="{American Mathematical Society}",
+ title="\amslatex/ Version 1.1 User's Guide (1991)",
+ address="Providence",
+ note="Distributed with the software
+ (use anonymous ftp from {\tt e-math.ams.com})"
+}
+
+@unpublished{psfig,
+ author="Trevor Darrell",
+ title="{Psfig/\TeX} 1.8 Users Guide (1991)",
+ address="Boston",
+ note="Distributed with the software
+ (use anonymous ftp from {\tt whitechapel.media.mit.edu})"
+}
+
+@book{epstein:WordProcessing,
+ author="David B. A. Epstein and
+ Jim Cannon and Silvio Levy and Derek Holt and Mike Paterson and
+ William Thurston",
+ title="Word Processing in Groups",
+ address="Boston",
+ year="1992",
+ publisher="Jones and Bartlett"
+}
+
+@article{Mittelbach,
+ author="Frank Mittelbach",
+ title="An environment for multi-column output",
+ journal="TUGboat",
+ year="1989",
+ volume="10",
+ pages="407--415"
+}
+
+
+@unpublished{rokicki,
+ author="Tom Rokicki",
+ title="{DVIPS}: A {\TeX} driver (version 5.490, 1992)",
+ address="Stanford",
+ note="Distributed with the software
+ (use anonymous ftp from {\tt labrea.stanford.edu})"
+}
+
+
+@book{illustrator,
+ author="Mike Schuster and others",
+ title="Adobe Illustrator",
+ address="Palo Alto, CA",
+ publisher="Adobe Systems",
+ year="1988"
+}
+
+@book{wolfram,
+ author="Stephen Wolfram",
+ title="Mathematica: A System for Doing Mathematics by Computer",
+ address="Reading, MA",
+ publisher="Addison-Wesley",
+ edition="2nd",
+ year="1991"
+}
diff --git a/macros/latex209/contrib/geomsty/manual.ps b/macros/latex209/contrib/geomsty/manual.ps
new file mode 100644
index 0000000000..73b8bdaeb9
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/manual.ps
@@ -0,0 +1,5196 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.58 Copyright 1986, 1994 Radical Eye Software
+%%Title: manual.dvi
+%%CreationDate: Wed Jul 12 19:08:42 1995
+%%Pages: 19
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips manual.dvi
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1995.07.12:1908
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get
+round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{
+statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0
+0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn
+begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X
+array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo
+setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx
+FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{
+pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
+B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
+length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
+/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
+/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp
+0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
+index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
+ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{
+ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn
+/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1
+sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D
+}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0
+moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
+.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
+false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
+scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
+transform round exch round exch itransform moveto rulex 0 rlineto 0
+ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
+0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
+B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{
+3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p
+-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{
+3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+%%BeginProcSet: /u/levy/texts/geomsty/math.pro
+% This file is adapted from the PostScript code that gets
+% included by the psfix filter, provided with Mathematica.
+% The only differences are the addition of the first two lines
+% (MyDict) and of the abbreviations at the end (starting with /Ma).
+
+%$Revision: 1.3 $
+%$Date: 95/06/27 12:16:53 $
+
+/MyDict 200 dict def
+MyDict begin
+
+% The externally visible functions are:
+% MathPictureStart- start page.
+% MathPictureEnd - finish off page.
+% MathSubStart - start a sub-page.
+% MathSubEnd - finish off a sub-page.
+% Mdot - draw a dot.
+% Mtetra - draw a filled tetragon.
+% Metetra - draw a filled tetragon with black edges.
+% Mistroke - intermediate stroke of multi-stroke line/curve.
+% Mfstroke - final stroke of multi-stroke line/curve.
+% Msboxa - compute coordinates of text bounding box.
+% Mshowa - plot characters.
+% MathScale - compute scaling info to contain array of points.
+
+
+% The following are only for backwards compatibility with earlier versions
+% of Mathematica:
+% Mpstart - identical to MathPictureStart.
+% Mpend - identical to MathPictureEnd.
+% Mscale - like MathScale but without user coordinate info.
+
+/Mpstart { % - Mpstart -
+ MathPictureStart
+} bind def
+
+/Mpend { % - Mpend -
+ MathPictureEnd
+} bind def
+
+/Mscale { % [pnts] Mscale -
+ 0 1 0 1 % [pnts] xbias xscale ybias yscale
+ 5 -1 roll % xbias xscale ybias yscale [pnts]
+ MathScale % -
+} bind def
+
+%start of ISOLatin1 stuff
+
+/ISOLatin1Encoding dup where
+{ pop pop }
+{
+[
+/.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 /minus /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 /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/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
+} ifelse
+
+/MFontDict 50 dict def
+
+/MStrCat % string1 string2 MStrCat string
+{
+ exch % s2 s1
+ dup length % s2 s1 len
+ 2 index length add % s2 s1 len
+ string % s2 s1 s
+ dup 3 1 roll % s2 s s1 s
+ copy % s2 s s1
+ length % s2 s where
+ exch dup % s2 where s s
+ 4 2 roll exch % s s where s2
+ putinterval
+} def
+
+/MCreateEncoding % name encoding MCreateEncoding newname
+{
+ % get base name
+ 1 index % name encoding name
+
+ % concatenate (-) and encoding to the name
+ 255 string cvs
+ (-) MStrCat
+ 1 index MStrCat
+ cvn exch % basename newname encoding
+
+ % make encoding name
+
+ (Encoding) MStrCat
+ cvn dup where
+ {
+ exch get
+ }
+ {
+ pop
+ StandardEncoding
+ } ifelse
+ 3 1 roll % vector basename newname
+
+ % make the font if we haven't before
+ dup MFontDict exch known not
+ {
+ 1 index findfont
+ dup length dict
+ begin
+ {1 index /FID ne
+ {def}
+ {pop pop}
+ ifelse} forall
+ /Encoding 3 index
+ def
+ currentdict
+ end
+ 1 index exch definefont pop
+
+ MFontDict 1 index
+ null put
+ }
+ if
+
+ exch pop % vector newname
+ exch pop % newname
+} def
+
+/ISOLatin1 { (ISOLatin1) MCreateEncoding } def
+/ISO8859 { (ISOLatin1) MCreateEncoding } def
+
+%end of ISOLatin1 stuff
+
+%
+% Include old font names for backward compatibility
+%
+/Mcopyfont { % procedure to copy font
+ dup
+ maxlength
+ dict
+ exch
+ {
+ 1 index
+ /FID
+ eq
+ {
+ pop pop
+ }
+ {
+ 2 index
+ 3 1 roll
+ put
+ }
+ ifelse
+ }
+ forall
+} def
+
+/Plain /Courier findfont Mcopyfont definefont pop
+/Bold /Courier-Bold findfont Mcopyfont definefont pop
+/Italic /Courier-Oblique findfont Mcopyfont definefont pop
+
+% Set up for the start of a page.
+/MathPictureStart { % - MathPictureStart -
+ gsave % -
+ Mtransform % possibly rotate to landscape mode
+ Mlmarg % left_margin
+ Mbmarg % bottom_margin
+ translate % -
+ Mwidth % init_width
+ Mlmarg Mrmarg add % init_width lmarg+rmarg
+ sub % true_width
+ /Mwidth exch def %
+ Mheight % init_height
+ Mbmarg Mtmarg add % init_height tmarg+bmarg
+ sub % true_height
+ /Mheight exch def
+ /Mtmatrix % /Mtmatrix
+ matrix currentmatrix % /Mtmatrix text_matrix
+ def
+ /Mgmatrix % /Mgmatrix
+ matrix currentmatrix % /Mgmatrix graphics_matrix
+ def % -
+} bind def
+
+
+% Finish off a page.
+/MathPictureEnd {
+ grestore
+} bind def
+
+%MFill fills the drawing area with the current color.
+/MFill {
+ 0 0 moveto
+ Mwidth 0 lineto
+ Mwidth Mheight lineto
+ 0 Mheight lineto
+ fill
+} bind def
+
+% xmin xmax ymin ymax MPlotRegion alters the origin, Mwidth and Mheight
+% so that the picture fills the altered region
+/MPlotRegion { % xmin xmax ymin ymax MPlotRegion
+ 3 index % xmin xmax ymin ymax xmin
+ Mwidth mul % xmin xmax ymin ymax xmin_pos
+ 2 index % xmin xmax ymin ymax xmin_pos ymin
+ Mheight mul % xmin xmax ymin ymax xmin_pos ymin_pos
+ translate % xmin xmax ymin ymax
+ exch sub % xmin xmax ymax-ymin
+ Mheight mul % xmin xmax new_height
+ /Mheight
+ exch def % xmin xmax
+ exch sub % xmax-xmin
+ Mwidth mul % new-width
+ /Mwidth
+ exch def
+} bind def
+
+% Given a rectangle, set it up as a sub-picture.
+/MathSubStart { % xmin ymin xmax ymax MathSubStart <saved state(8)>
+ Momatrix
+ Mgmatrix Mtmatrix
+ Mwidth Mheight % xmin ymin xmax ymax <ss(8)>
+ 7 -2 roll % xmin ymin <ss(8)> xmax ymax
+ moveto % xmin ymin <ss(8)>
+ Mtmatrix setmatrix % xmin ymin <ss(8)>
+ currentpoint % xmin ymin <ss(8)> xmax(t) ymax(t)
+ Mgmatrix setmatrix % xmin ymin <ss(8)> xmax(t) ymax(t)
+ 9 -2 roll % <ss(8)> xmax(t) ymax(t) xmin ymin
+ moveto % <ss(8)> xmax(t) ymax(t)
+ Mtmatrix setmatrix % <ss(8)> xmax(t) ymax(t)
+ currentpoint % <ss(8)> xmax(t) ymax(t) xmin(t) ymin(t)
+ 2 copy translate % <ss(8)> xmax ymax xmin ymin
+ /Mtmatrix matrix currentmatrix def
+ 3 -1 roll % <ss(8)> xmax xmin ymin ymax
+ exch sub % <ss(8)> xmax xmin height
+ /Mheight exch def % <ss(8)> xmax xmin
+ sub % <ss(8)> width
+ /Mwidth exch def % <ss(8)>
+} bind def
+
+
+% Restore the saved state left by the matching MathSubStart.
+% Note, we also leave with the new Mgmatrix as the current matrix.
+/MathSubEnd { % gmat tmat lm rm bm tm w h MathSubStart -
+ /Mheight exch def % gmat tmat lm rm bm tm w
+ /Mwidth exch def % gmat tmat lm rm bm tm
+ /Mtmatrix exch def % gmat
+ dup setmatrix % gmat
+ /Mgmatrix exch def % -
+ /Momatrix exch def % -
+} bind def
+
+
+% Given a point, draw a dot.
+/Mdot { % x y Mdot -
+ moveto % -
+ 0 0 rlineto % -
+ stroke % -
+} bind def
+
+
+% Given 4 points, draw the corresponding filled tetragon.
+/Mtetra { % x0 y0 x1 y1 x2 y2 x3 y3 Mtetra -
+ moveto % x0 y0 x1 y1 x2 y2
+ lineto % x0 y0 x1 y1
+ lineto % x0 y0
+ lineto % -
+ fill % -
+} bind def
+
+
+% Given 4 points, draw the corresponding filled tetragon with black edges.
+% Note, this leaves the gray level at 0 (for compatibility with the old
+% C code.
+/Metetra { % x0 y0 x1 y1 x2 y2 x3 y3 Metetra -
+ moveto % x0 y0 x1 y1 x2 y2
+ lineto % x0 y0 x1 y1
+ lineto % x0 y0
+ lineto % -
+ closepath % -
+ gsave % -
+ fill % -
+ grestore % -
+ 0 setgray % -
+ stroke % -
+} bind def
+
+
+% Mistroke is called to stroke intermediate parts of a path. It makes
+% sure to resynchronize the dashing pattern and to leave the current point
+% as the final point of the path.
+/Mistroke { % - Mistroke -
+ flattenpath % -
+ 0 0 0 % length x y
+ { % length x y new_x new_y (for moves)
+ 4 2 roll % length new_x new_y x y
+ pop pop % length new_x new_y
+ }
+ { % length x y new_x new_y (for lines)
+ 4 -1 roll % length y new_x new_y x
+ 2 index % length y new_x new_y x new_x
+ sub dup mul % length y new_x new_y dx*dx
+ 4 -1 roll % length new_x new_y dx*dx y
+ 2 index % length new_x new_y dx*dx y new_y
+ sub dup mul % length new_x new_y dx*dx dy*dy
+ add sqrt % length new_x new_y dlen
+ 4 -1 roll % new_x new_y dlen length
+ add % new_x new_y new_length
+ 3 1 roll % new_length new_x new_y
+ }
+ { % length x y x1 y1 x2 y2 x3 y3 (for curves)
+ stop % should never be called
+ }
+ { % length x y (for closepaths)
+ stop % should never be called
+ }
+ pathforall % length x y
+ pop pop % length
+ currentpoint % length final_x final_y
+ stroke % length final_x final_y
+ moveto % length
+ currentdash % length dash_array dash_offset
+ 3 -1 roll % dash_array dash_offset length
+ add % dash_array new_offset
+ setdash % -
+} bind def
+
+
+% Mfstroke is called to stroke the final parts of a path. It resets
+% the dashing pattern to compensate for any adjustments made by Mistroke.
+/Mfstroke { % - Mfstroke -
+ stroke % -
+ currentdash % dash_array dash_offset
+ pop 0 % dash_array 0
+ setdash % -
+} bind def
+
+
+
+% Mrotsboxa is the same as Msboxa except that it takes an angle
+% form the stack and the box is calculated for text rendered at this angle.
+% It gsaves in case we are starting a MathSubStart
+% save Mrot so that Msboxa can convert bouding box back to the non-rotated
+% coordinate system
+% call Mrotcheck to alter the offsets into the rotated system
+% converts Mtmatrix to render in the rotated system
+% the calls Msboxa which does all the work
+% at the end Mtmatrix is restored and Mrot is reset to 0
+/Mrotsboxa { % [str..] gx gy sx sy ang Mrotsboxa ... Msboxa
+ gsave % in case in MathSubStart
+ dup % [str..] gx gy sx sy ang ang
+ /Mrot
+ exch def % [str..] gx gy sx sy ang
+ Mrotcheck % [str..] gx gy sx_new sy_new ang
+ Mtmatrix % [str..] gx gy sx sy ang Mtmatrix
+ dup
+ setmatrix
+ 7 1 roll % Mtmatrix [str..] gx gy sx sy ang
+ 4 index % Mtmatrix [str..] gx gy sx sy ang gx
+ 4 index % Mtmatrix [str..] gx gy sx sy ang gx gy
+ translate % Mtmatrix [str..] gx gy sx sy ang
+ rotate % Mtmatrix [str..] gx gy sx sy
+ 3 index % Mtmatrix [str..] gx gy sx sy gx
+ -1 mul % Mtmatrix [str..] gx gy sx sy -gx
+ 3 index % Mtmatrix [str..] gx gy sx sy -gx gy
+ -1 mul % Mtmatrix [str..] gx gy sx sy -gx -gy
+ translate % Mtmatrix [str..] gx gy sx sy
+ /Mtmatrix % now change Mtmatrix to be this new currentmatrix
+ matrix
+ currentmatrix
+ def
+ grestore % grestore to deal with MathSubStart
+ Msboxa % Mtmatrix [ x y x y] [ x y x y]
+ 3 -1 roll % [x y x y ] [x y x y] Mtmatrix
+ /Mtmatrix
+ exch def % restore Mtmatrix
+ /Mrot
+ 0 def % restore Mrot
+} bind def
+
+
+% Given an array of strings ([str...]), which represent consecutive lines
+% of text, a position in graphics coordinates (gx,gy) and a position in
+% the bounding box coordinates (sx,sy), compute the low and high coordinates
+% of the resulting text, in the [gx gy tx ty] form, which corresponds to
+% the point (gx,gy) (in graphics coordinates) plus the offset (tx,ty) (in
+% text coordinates).
+% Note, Msboxa assumes that the current matrix is the text matrix.
+% Mboxout is called in case we are in Mouter to make the box bigger
+% Mboxrot adjusts the box to account for a rotation to convert the box
+% into a nonrotated coordinate system
+%
+/Msboxa { % [str...] gx gy sx sy Msboxa [gx gy tlx tly] [gx gy thx thy]
+ newpath % [str...] gx gy sx sy (just in case)
+ 5 -1 roll % gx gy sx sy [str...]
+ Mvboxa % gx gy sx sy blx bly bhx bhy [off...]
+ pop % gx gy sx sy blx bly bhx bhy
+ Mboxout % adjust box for Minner
+ 6 -1 roll % gx gy sy blx bly bhx bhy sx
+ 5 -1 roll % gx gy sy bly bhx bhy sx blx
+ 4 -1 roll % gx gy sy bly bhy sx blx bhx
+ Msboxa1 % gx gy sy bly bhy tlx thx
+ 5 -3 roll % gx gy tlx thx sy bly bhy
+ Msboxa1 % gx gy tlx thx tly thy
+ Mboxrot % adjust box for rotation
+ [ % gx gy tlx thx tly thy mark
+ 7 -2 roll % tlx thx tly thy mark gx gy
+ 2 copy % tlx thx tly thy mark gx gy gx gy
+ [ % tlx thx tly thy mark gx gy gx gy mark
+ 3 1 roll % tlx thx tly thy mark gx gy mark gx gy
+ 10 -1 roll % thx tly thy mark gx gy mark gx gy tlx
+ 9 -1 roll % thx thy mark gx gy mark gx gy tlx tly
+ ] % thx thy mark gx gy [gx gy tlx tly]
+ 6 1 roll % [gx gy tlx tly] thx thy mark gx gy
+ 5 -2 roll % [gx gy tlx tly] mark gx gy thx thy
+ ] % [gx gy tlx tly] [gx gy thx thy]
+} bind def
+
+% Msboxa1 is an internal function which, given a bounding box coordinate
+% (sz), and the bounding box limits (blz and bhz), computes the actual
+% offsets (tlz = (blz-bhz)(sz+1)/2, thz = (blz-bhz)(sz-1)/2).
+/Msboxa1 { % sz blz bhz Msboxa1 tlz thz
+ sub % sz blz-bhz
+ 2 div % sz (blz-bhz)/2
+ dup % sz (blz-bhz)/2 (blz-bhz)/2
+ 2 index % sz (blz-bhz)/2 (blz-bhz)/2 sz
+ 1 add % sz (blz-bhz)/2 (blz-bhz)/2 sz+1
+ mul % sz (blz-bhz)/2 tlz
+ 3 -1 roll % (blz-bhz)/2 tlz sz
+ -1 add % (blz-bhz)/2 tlz sz-1
+ 3 -1 roll % tlz sz-1 (blz-bhz)/2
+ mul % tlz thz
+} bind def
+
+
+% Given a (non-empty) array of strings ([str...]) calculate the
+% bounding box. We do this for fixedwidth fonts or nonfixedwidth fonts
+% depending upon the setting of Mfixwid. Mvboxa1 actually does a lot
+% of the work. For nonfixedwidth fonts the length of the bounding
+% box length is made to be the summation of [(str)..] Mwidthcal
+% ie the maximum length of the strings and xlow
+%
+/Mvboxa { % [str...] Mvboxa xlow ylow xhigh yhigh [off...]
+ Mfixwid
+ {
+ Mvboxa1
+ }
+ {
+ dup % [str...] [str...]
+ Mwidthcal % [str...] [ w1 w2...]
+ 0 exch % [str...] 0 [ w1 w2...]
+ {
+ add
+ }
+ forall % [str...] length
+ exch
+ Mvboxa1 % length xlow ylow xhigh yhigh [off...]
+ 4 index % length xlow ylow xhigh yhigh [off...] xlow
+ 7 -1 roll % xlow ylow xhigh yhigh [off...] xlow length
+ add % xlow ylow xhigh yhigh [off...] new_xhigh
+ 4 -1 roll
+ pop % xlow ylow yhigh [off...] new_xhigh
+ 3 1 roll % xlow ylow new_xhigh yhigh [off...]
+ }
+ ifelse
+} bind def
+
+
+% Given a (non-empty) array of strings ([str...]) which represent consecutive
+% lines of text, compute the total bounding box assuming that we start at
+% (0,0) and the array of y offsets to place the lines correctly.
+% Note, Mvboxa assumes that the current matrix is the text matrix.
+% Note, Mvboxa does not alter the current path.
+% The vertical spacing is set so that the bounding boxes of adjacent lines
+% are .3 times the width of an `m' apart.
+/Mvboxa1 { % [str...] Mvboxa xlow ylow xhigh yhigh [off...]
+ gsave % [str...]
+ newpath % [str...] (clear path fragments)
+ [ true % [str...] mark true
+ 3 -1 roll % mark true [str...]
+ { % mark {true -or- off... Xl Yl Xh Yh false} str
+ Mbbox % mark {true -or- off... Xl Yl Xh Yh false} xl yl xh yh
+ 5 -1 roll % mark { - -or- off... Xl Yl Xh Yh} xl yl xh yh first?
+ { % mark xl yl xh yh
+ 0 % mark xl yl xh yh off1
+ 5 1 roll % mark off1 xl yl xh yh
+ } % mark off1 XL YL XH YH
+ { % mark off... Xl Yl Xh Yh xl yl xh yh
+ 7 -1 roll % mark off... Xl Xh Yh xl yl xh yh Yl
+ exch sub % mark off... Xl Xh Yh xl yl xh yh-Yl
+ (m) stringwidth pop % mark off... Xl Xh Yh xl yl xh yh-Yl pntsize
+ .3 mul % mark off... Xl Xh Yh xl yl xh yh-Yl fudge
+ sub % mark off... Xl Xh Yh xl yl xh off
+ 7 1 roll % mark off... off Xl Xh Yh xl yl xh
+ 6 -1 roll % mark off... off Xh Yh xl yl xh Xl
+ 4 -1 roll % mark off... off Xh Yh yl xh Xl xl
+ Mmin % mark off... off Xh Yh yl xh XL
+ 3 -1 roll % mark off... off Xh Yh xh XL yl
+ 5 index % mark off... off Xh Yh xh XL yl off
+ add % mark off... off Xh Yh xh XL YL
+ 5 -1 roll % mark off... off Yh xh XL YL Xh
+ 4 -1 roll % mark off... off Yh XL YL Xh xh
+ Mmax % mark off... off Yh XL YL XH
+ 4 -1 roll % mark off... off XL YL XH YH
+ } % mark off... XL YL XH YH
+ ifelse % mark off... XL YL XH YH
+ false % mark off... XL YL XH YH false
+ } % mark off... XL YL XH YH false
+ forall % mark off... xlow ylow xhigh yhigh false
+ { stop } if % mark off... xlow ylow xhigh yhigh
+ counttomark % mark off... xlow ylow xhigh yhigh (#off's+4)
+ 1 add % mark off... xlow ylow xhigh yhigh (#off's+5)
+ 4 roll % xlow ylow xhigh yhigh mark off...
+ ] % xlow ylow xhigh yhigh [off...]
+ grestore % xlow ylow xhigh yhigh [off...]
+} bind def
+
+
+% Given a string, compute the bounding box assuming that we start at (0,0).
+% Note, the path is assumed to be empty, and we are assumed to be in text
+% coordinates. Allows for long strings.
+/Mbbox { % str Mbbox xlow ylow xhigh yhigh
+ 1 dict begin
+ 0 0 moveto % str
+ /temp (T) def
+ { gsave
+ currentpoint newpath moveto
+ temp 0 3 -1 roll put temp
+ false charpath flattenpath currentpoint
+ pathbbox
+ grestore moveto lineto moveto} forall
+ pathbbox
+ newpath
+ end
+} bind def
+
+
+% Compute the minimum of two numbers.
+/Mmin { % p q Mmin min(p,q)
+ 2 copy % p q p q
+ gt % p q p>q?
+ { exch } if % min(p,q) max(p,q)
+ pop % min(p,q)
+} bind def
+
+
+% Compute the maximum of two numbers.
+/Mmax { % p q Mmax max(p,q)
+ 2 copy % p q p q
+ lt % p q p<q?
+ { exch } if % max(p,q) min(p,q)
+ pop % max(p,q)
+} bind def
+
+% Mrotshowa is the same as Mshowa except that it takes an angle
+% from the stack and the text is rendered at this angle.
+% It saves Mrot (not really needed but saved anyway)
+% calls Mrotcheck to adjust the offsets into the rotated coordinate system
+% converts Mtmatrix to render in the rotated system
+% and calls Mshowa which does all the work
+% at the end Mtmatrix is restored and Mrot is reset to zero.
+%
+/Mrotshowa { %[str..] gx gy sx sy ang Mrotshowa
+ dup
+ /Mrot
+ exch def
+ Mrotcheck
+ Mtmatrix %[str..] gx gy sx sy ang Mtmatrix
+ dup
+ setmatrix
+ 7 1 roll %Mtmatrix [str..] gx gy sx sy ang
+ 4 index %Mtmatrix [str..] gx gy sx sy ang gx
+ 4 index %Mtmatrix [str..] gx gy sx sy ang gx gy
+ translate
+ rotate %Mtmatrix [str..] gx gy sx sy
+ 3 index
+ -1 mul
+ 3 index
+ -1 mul %Mtmatrix [str..] gx gy sx sy -gx -gy
+ translate
+ /Mtmatrix
+ matrix
+ currentmatrix
+ def %Mtmatrix [str..] gx gy sx sy
+ Mgmatrix setmatrix
+ Mshowa %Mtmatrix
+ /Mtmatrix
+ exch def
+ /Mrot 0 def % restore Mrot
+} bind def
+
+%
+% Given an array of strings ([str...]), which represent consecutive lines
+% of text, a position in graphics coordinates (gx,gy) and a position in
+% the bounding box coordinates (sx,sy), display the strings.
+% Mboxout is called in case we are in Mouter
+%
+/Mshowa { % [str...] gx gy sx sy Mshowa -
+ 4 -2 roll % [str...] sx sy gx gy
+ moveto % [str...] sx sy
+ 2 index % [str...] sx sy [str...]
+ Mtmatrix setmatrix % [str...] sx sy [str...]
+ Mvboxa % [str...] sx sy tlx tly thx thy [off...]
+ 7 1 roll % [str...] [off...] sx sy tlx tly thx thy
+ Mboxout
+ 6 -1 roll % [str...] [off...] sy tlx tly thx thy sx
+ 5 -1 roll % [str...] [off...] sy tly thx thy sx tlx
+ 4 -1 roll % [str...] [off...] sy tly thy sx tlx thx
+ Mshowa1 % [str...] [off...] sy tly thy relx
+ 4 1 roll % [str...] [off...] relx sy tly thy
+ Mshowa1 % [str...] [off...] relx rely
+ rmoveto % [str...] [off...]
+ currentpoint % [str...] [off...] x y
+ Mfixwid
+ {
+ Mshowax
+ }
+ {
+ Mshoway
+ }
+ ifelse
+ pop pop pop pop
+ Mgmatrix setmatrix
+} bind def
+
+
+% This is used for fixedwidth fonts
+% It simply shows each string and advances the y direction by the offset
+%
+/Mshowax {
+ 0 1
+ 4 index length % [str...] [off...] x y 0 1 (#strings)
+ -1 add % [str...] [off...] x y 0 1 (#strings-1)
+ { % [str...] [off...] x y strnum
+ 2 index % [str...] [off...] x y strnum x
+ 4 index % [str...] [off...] x y strnum x [off...]
+ 2 index % [str...] [off...] x y strnum [off...] strnum
+ get % [str...] [off...] x y strnum x off
+ 3 index % [str...] [off...] x y strnum x off y
+ add % [str...] [off...] x y strnum x Y
+ moveto % [str...] [off...] x y strnum
+ 4 index % [str...] [off...] x y strnum [str...]
+ exch get % [str...] [off...] x y str
+ Mfixdash
+ {
+ Mfixdashp
+ }
+ if
+ show % [str...] [off...] x y
+ } for % [str...] [off...] x y
+} bind def
+
+% Fix if all dashes and length > 1
+/Mfixdashp { % str
+ dup
+ length % str n
+ 1
+ gt % str bool
+ 1 index % str bool str
+ true exch % str bool true str
+ {
+ 45
+ eq
+ and
+ } forall
+ and % str bool
+ {
+ gsave
+ (--)
+ stringwidth pop
+ (-)
+ stringwidth pop
+ sub
+ 2 div % str lenfix
+ 0 rmoveto % str
+ dup % str str
+ length
+ 1 sub % str len-1
+ {
+ (-)
+ show
+ }
+ repeat
+ grestore
+ }
+ if % x y str
+} bind def
+
+
+% This is for non-fixedwidth fonts
+% It shows each character individually advancing the x position by
+% the maximum width of any character in that position
+%
+/Mshoway {
+ 3 index % [str...] [off...] x y [str...]
+ Mwidthcal % [str...] [off...] x y [w1 w2 w3...]
+ 5 1 roll % [w1 w2 w3..] [str...] [off...] x y
+ 0 1 % [w1 w2 w3..] [str...] [off...] x y 0 1
+ 4 index length % [w1 w2 w3..] [str...] [off...] x y 0 1 (#strings)
+ -1 add % [w1 w2 w3..] [str...] [off...] x y 0 1 (#strings-1)
+ { % [w1 w2 w3..] [str...] [off...] x y strnum
+ 2 index % [w1 w2 w3..] [str...] [off...] x y strnum x
+ 4 index % [w1 w2 w3..] [str...] [off...] x y strnum x [off...]
+ 2 index % [w1 w2 w3..] [str...] [off...] x y
+ % strnum [off...] strnum
+ get % [w1 w2 w3..] [str...] [off...] x y strnum x off
+ 3 index % [w1 w2 w3..] [str...] [off...] x y strnum x off y
+ add % [w1 w2 w3..] [str...] [off...] x y strnum x Y
+ moveto % [w1 w2 w3..] [str...] [off...] x y strnum
+ 4 index % [w1 w2 w3..] [str...] [off...] x y strnum [str...]
+ exch get % [w1 w2 w3..] [str...] [off...] x y str
+ [
+ 6 index % [w1 w2 w3..] [str...] [off...] x y str [ [w1 w2..]
+ aload
+ length % [w1 w2 w3..] [str...] [off...] x y str [ w1 w2.. len
+ 2 add
+ -1 roll % [w1 w2 w3..] [str...] [off...] x y [ w1 w2.. str
+ {
+ pop % [w1 w2 w3..] [str...] [off...] x y [ w1 c2.. str am
+ Strform % [w1 w2 w3..] [str...] [off...] x y [ w1 w2.. str 1str
+ stringwidth
+ pop
+ neg
+ exch % [w1 w2 w3..] [str...] [off...] x y [ w1 w2..
+ % str -cm cn
+ add
+ 0 rmoveto % [w1 w2 w3..] [str...] [off...] x y [ w1 w2.. str
+ }
+ exch
+ kshow % [w1 w2 w3..] [str...] [off...] x y [
+ cleartomark
+ } for % [w1 w2 w3..] [str...] [off...] x y
+ pop
+} bind def
+
+%
+% This is a central mechanism for dealing with non-fixedwidth fonts.
+% Given an array of strings Mwidthcal returns an array of the lengths
+% of the longest character in the corresponding positions in the arrays.
+% Thus the 4th element of the result is the maximum character width of
+% each strin at the 4th position.
+%
+/Mwidthcal { % [(abc) (abc) ..] Mwidthcal [w1 w2 w3 ...]
+ [
+ exch % [ [(abc) (abd) ..]
+ {
+ Mwidthcal1
+ }
+ forall
+ ] % [[w w w] [w w w] ..]
+ [ % call this [chr ..] now
+ exch % [ [chr ..]
+ dup % [ [chr ..] [chr ..]
+ Maxlen % [ [chr ..] maxlen
+ -1 add
+ 0 1
+ 3 -1 roll % [chr ..] [ [chr ..] 0 1 maxlen-1
+ {
+ [ % [chr ..] [ [chr ..] n [
+ exch % [chr ..] [ [chr ..] [ n
+ 2 index % [chr ..] [ [chr ..] [ n [chr ..]
+ {
+ 1 index
+ Mget % [chr ..] [ [chr ..] [ n [w1 w2 ..] n
+ exch % [chr ..] [ [chr ..] [ wn n
+ }
+ forall
+ pop % [chr ..] [ [chr ..] [ w1 w2 w3
+ Maxget % [chr ..] [ [chr ..] wmax
+ exch % [chr ..] [ wmax [chr ..]
+ }
+ for
+ pop
+ ] % [ wmax1 wmax2 wmax3 ..]
+ Mreva
+} bind def
+
+%Reverse an array
+/Mreva { %[a b c ..] Mreva [.. c b a]
+ [
+ exch %[ [a b c ..]
+ aload
+ length %[a b c .. len
+ -1 1 %[a b c .. len -1 1
+ {1 roll}
+ for
+ ] %[.. c b a]
+} bind def
+
+% take an array and an index and return that element if index exits
+% if array not long enougth return zero
+/Mget { %[a b c d..] index
+ 1 index
+ length %[a b c d..] index len
+ -1 add
+ 1 index %[a b c d..] index (len-1) index
+ ge
+ {
+ get %if long enough return entry
+ }
+ {
+ pop pop
+ 0 %if not long enough return zero
+ }
+ ifelse
+} bind def
+
+%Take an array of arrays and return the longest length
+/Maxlen { %[ arr1 arr2 arr3 ] Maxlen maxlen
+ [ %[ arr1 arr2 arr3 ] [
+ exch %[ [ arr1 arr2 arr3 ]
+ {
+ length
+ }
+ forall %[ len1 len2 len3..
+ Maxget
+} bind def
+
+%Take a series of numbers starting with [ and return the largest member
+/Maxget { %[n1 n2 n3 .. Maxget nmax
+ counttomark %[n1 n2 n3 .. len
+ -1 add %[n1 n2 n3 .. len-1
+ 1 1 %[n1 n2 n3 .. len 1 1
+ 3 -1 roll %[n1 n2 n3 .. 1 1 (len-1)
+ {
+ pop
+ Mmax
+ }
+ for %[ nmax
+ exch % nmax [
+ pop % nmax
+} bind def
+
+%Take a string and return an array of the lengths of the characters
+/Mwidthcal1 { % str Mwidthcal1 [w1 w2 w3 ..]
+ [
+ exch %[ (str)
+ {
+ Strform
+ stringwidth
+ pop
+ }
+ forall %[w1 w2 w3 ..
+ ] %[w1 w2 w3 ..]
+} bind def
+
+%put a string onto the stack
+/Strform { % num
+ /tem (x) def
+ tem 0
+ 3 -1 roll
+ put
+ tem
+} bind def
+
+%/Mwidmax { % [str...]
+% dup % [str...] [str...]
+% [ % [str...] [str...] [
+% exch % [str...] [ [str...]
+% {
+% stringwidth
+% pop
+% }
+% forall % [str...] [ w1 w2 ... wm wn
+% 0
+% counttomark % [str...] [ w1 w2 ... wm wn 0 n
+% -2 add % [str...] [ w1 w2 ... wm wn 0 (n-1)
+% 1 exch % [str...] [ w1 w2 ... wm wn 0 1 (n-1)
+% 1 exch % [str...] [ w1 w2 ... wm wn 0 1 1 (n-1)
+% {
+% 3 index % [str...] [ w1 w2 ... wm wn num pos wm
+% 3 index % [str...] [ w1 w2 ... wm wn num pos wm wn
+% ge
+% { % wm >= wn
+% exch pop
+% exch pop % [str...] [ w1 w2 ... wm num
+% }
+% { % wm < wn
+% pop
+% 3 -1 roll
+% pop % [str...] [ w1 w2 ... wn pos < pos -> num >
+% }
+% ifelse % [str...] [ w1 w2 ... wmax nmax
+% }
+% for % [str...] [ wmax nmax
+% 4 1 roll
+% pop pop % nmax [str...]
+% length % nmax len
+% -1 add % nmax (len - 1)
+% exch
+% sub % max_pos
+%} bind def
+
+
+% Mshowa1 is an internal routine which, given a bounding box coordinate
+% (sz), and the bounding box limits if we started drawing at 0 (tlz and thz),
+% computes the offset at which to start drawing
+% (relz = (sz-1)tlz/2 - (sz+1)thz/2 = sz(tlz-thz)/2-(tlz+thz)/2).
+/Mshowa1 { % sz tlz thz Mshowa1 relz
+ 2 copy % sz tlz thz tlz thz
+ add % sz tlz thz tlz+thz
+ 4 1 roll % tlz+thz sz tlz thz
+ sub % tlz+thz sz tlz-thz
+ mul % tlz+thz sz(tlz-thz)
+ sub % tlz+thz-sz(tlz-thz)
+ -2 div % sz(tlz-thz)/2-(tlz+thz)/2
+} bind def
+
+
+% Given the x and y scaling to user coordinates and an array of points to
+% fit (xbias xscale ybias yscale [pnts]), set up the scaling. The array
+% must contain atleast two points, and the last two must be of the form
+% [gxlow gylow 0 0] and [gxhigh gyhigh 0 0].
+% Note, MathScale assumes that we are already scaled so that the active area
+% is the rectangle [0,Mwidth-Mlmarg-Mrmarg]x[0,Mheight-Mbmarg-Mtmarg].
+% also keep bias and scale info for PostScript commands
+/MathScale { % <user> [pnts] MathScale -
+ Mwidth % <user> [pnts] width
+ Mheight % <user> [pnts] width height
+ Mlp % <user> Ax Ay Bx By
+ translate % <user> Ax Ay
+ scale % <user>
+ /yscale exch def
+ /ybias exch def
+ /xscale exch def
+ /xbias exch def
+ /Momatrix % this transforms from
+ xscale yscale matrix scale % Original to Display coordinates
+ xbias ybias matrix translate
+ matrix concatmatrix def
+ /Mgmatrix % /Mgmatrix
+ matrix currentmatrix % /Mgmatrix graphics_matrix
+ def % -
+} bind def
+
+
+% Given a non-empty array of points to fit ([p]) and a maximum width (sx)
+% and height (sy) find the largest scale (Ax and Ay) and offsets (Bx and By)
+% such that the transformation
+% [gx gy tx ty] -> (Ax gx + tx + bx, Ay gy + ty + By)
+% maps the points into the rectangle [0,sx]x[0,sy]
+/Mlp { % [p] sx sy Mlp Ax Ay Bx By
+ 3 copy % [p] sx sy [p] sx sy
+ Mlpfirst % [p] sx sy Ax Ay
+ { % [p] sx sy Ax Ay
+ Mnodistort % [p] sx sy Ax Ay nodistort?
+ { % [p] sx sy Ax Ay
+ Mmin % [p] sx sy A
+ dup % [p] sx sy Ax Ay
+ } if % [p] sx sy Ax Ay
+ 4 index % [p] sx sy Ax Ay [p]
+ 2 index % [p] sx sy Ax Ay [p] Ax
+ 2 index % [p] sx sy Ax Ay [p] Ax Ay
+ Mlprun % [p] sx sy Ax Ay ctx wtx cgx wgx cty wty cgy wgy
+ 11 index % [p] sx sy Ax Ay ctx wtx cgx wgx cty wty cgy wgy sx
+ 11 -1 roll % [p] sx sy Ay ctx wtx cgx wgx cty wty cgy wgy sx Ax
+ 10 -4 roll % [p] sx sy Ay cty wty cgy wgy sx Ax ctx wtx cgx wgx
+ Mlp1 % [p] sx sy Ay cty wty cgy wgy Ax Bx xok?
+ 8 index % [p] sx sy Ay cty wty cgy wgy Ax Bx xok? sy
+ 9 -5 roll % [p] sx sy Ax Bx xok? sy Ay cty wty cgy wgy
+ Mlp1 % [p] sx sy Ax Bx xok? Ay By yok?
+ 4 -1 roll % [p] sx sy Ax Bx Ay By yok? xok?
+ and % [p] sx sy Ax Bx Ay By ok?
+ { exit } if % [p] sx sy Ax Bx Ay By
+ 3 -1 roll % [p] sx sy Ax Ay Bx By
+ pop pop % [p] sx sy Ax Ay
+ } loop % [p] sx sy Ax Bx Ay By
+ exch % [p] sx sy Ax Bx By Ay
+ 3 1 roll % [p] sx sy Ax Ay Bx By
+ 7 -3 roll % Ax Ay Bx By [p] sx sy
+ pop pop pop % Ax Ay Bx By
+} bind def
+
+
+% Given an array of points in the [gx gy tx ty] form, with the last two
+% being [gxlow gylow 0 0] and [gxhigh gyhigh 0 0], and the width and height
+% (sx and sy) in which to fit them, compute the maximum scaling (Ax and Ay).
+/Mlpfirst { % [pnts] sx sy Mlpfirst Ax Ay
+ 3 -1 roll % sx sy [pnts]
+ dup length % sx sy [pnts] #pnts
+ 2 copy % sx sy [pnts] #pnts [pnts] #pnts
+ -2 add % sx sy [pnts] #pnts [pnts] #pnts-2
+ get % sx sy [pnts] #pnts [gxl gyl 0 0]
+ aload % sx sy [pnts] #pnts gxl gyl 0 0 [gxl gyl 0 0]
+ pop pop pop % sx sy [pnts] #pnts gxl gyl
+ 4 -2 roll % sx sy gxl gyl [pnts] #pnts
+ -1 add % sx sy gxl gyl [pnts] #pnts-1
+ get % sx sy gxl gyl [gxh gyh 0 0]
+ aload % sx sy gxl gyl gxh gyh 0 0 [gxh gyh 0 0]
+ pop pop pop % sx sy gxl gyl gxh gyh
+ 6 -1 roll % sy gxl gyl gxh gyh sx
+ 3 -1 roll % sy gxl gyl gyh sx gxh
+ 5 -1 roll % sy gyl gyh sx gxh gxl
+ sub % sy gyl gyh sx delx
+ div % sy gyl gyh Ax
+ 4 1 roll % Ax sy gyl gyh
+ exch sub % Ax sy dely
+ div % Ax Ay
+} bind def
+
+
+% Given a non-empty array of points to fit ([pnts]) and scale factors
+% for graphics->text (Ax and Ay), compute the limiting points.
+/Mlprun { % [pnts] Ax Ay Mlprun ctx wtx cgx wgx cty wty cgy wgy
+ 2 copy % [pnts] Ax Ay Ax Ay
+ 4 index % [pnts] Ax Ay Ax Ay [pnts]
+ 0 get % [pnts] Ax Ay Ax Ay [first]
+ dup % [pnts] Ax Ay Ax Ay [first] [first]
+ 4 1 roll % [pnts] Ax Ay [first] Ax Ay [first]
+ Mlprun1 % [pnts] Ax Ay [first] fx fy
+ 3 copy % [pnts] Ax Ay [low] lx ly [high] hx hy
+ 8 -2 roll % [pnts] [low] lx ly [high] hx hy Ax Ay
+ 9 -1 roll % [low] lx ly [high] hx hy Ax Ay [pnts]
+ { % [low] lx ly [high] hx hy Ax Ay [pnt]
+ 3 copy % [low] lx ly [high] hx hy Ax Ay [pnt] Ax Ay [pnt]
+ Mlprun1 % [low] lx ly [high] hx hy Ax Ay [pnt] px py
+ 3 copy % [low] lx ly [high] hx hy Ax Ay [pnt] px py [pnt] px py
+ 11 -3 roll % [low] lx ly Ax Ay [pnt] px py [pnt] px py [high] hx hy
+ /gt Mlpminmax % [low] lx ly Ax Ay [pnt] px py [high] hx hy
+ 8 3 roll % [low] lx ly [high] hx hy Ax Ay [pnt] px py
+ 11 -3 roll % [high] hx hy Ax Ay [pnt] px py [low] lx ly
+ /lt Mlpminmax % [high] hx hy Ax Ay [low] lx ly
+ 8 3 roll % [low] lx ly [high] hx hy Ax Ay
+ } forall % [low] lx ly [high] hx hy Ax Ay
+ pop pop pop pop % [low] lx ly [high]
+ 3 1 roll % [low] [high] lx ly
+ pop pop % [low] [high]
+ aload pop % [low] hgx hgy htx hty
+ 5 -1 roll % hgx hgy htx hty [low]
+ aload pop % hgx hgy htx hty lgx lgy ltx lty
+ exch % hgx hgy htx hty lgx lgy lty ltx
+ 6 -1 roll % hgx hgy hty lgx lgy lty ltx htx
+ Mlprun2 % hgx hgy hty lgx lgy lty ctx wtx
+ 8 2 roll % ctx wtx hgx hgy hty lgx lgy lty
+ 4 -1 roll % ctx wtx hgx hgy lgx lgy lty hty
+ Mlprun2 % ctx wtx hgx hgy lgx lgy cty wty
+ 6 2 roll % ctx wtx cty wty hgx hgy lgx lgy
+ 3 -1 roll % ctx wtx cty wty hgx lgx lgy hgy
+ Mlprun2 % ctx wtx cty wty hgx lgx cgy wgy
+ 4 2 roll % ctx wtx cty wty cgy wgy hgx lgx
+ exch % ctx wtx cty wty cgy wgy lgx hgx
+ Mlprun2 % ctx wtx cty wty cgy wgy cgx wgx
+ 6 2 roll % ctx wtx cgx wgx cty wty cgy wgy
+} bind def
+
+
+% Given scale factors for graphics->text (Ax and Ay) and a point in the
+% [gx gy tx ty] form, return the text x and y coordinate that results.
+/Mlprun1 { % Ax Ay [gx gy tx ty] Mlprun1 rx ry
+ aload pop % Ax Ay gx gy tx ty
+ exch % Ax Ay gx gy ty tx
+ 6 -1 roll % Ay gx gy ty tx Ax
+ 5 -1 roll % Ay gy ty tx Ax gx
+ mul add % Ay gy ty rx
+ 4 -2 roll % ty rx Ay gy
+ mul % ty rx Ay*gy
+ 3 -1 roll % rx Ay*gy ty
+ add % rx ry
+} bind def
+
+
+% Given a low and high coordinate, compute the center and width.
+/Mlprun2 { % low high Mlprun2 center width
+ 2 copy % low high low high
+ add 2 div % low high (low+high)/2
+ 3 1 roll % (low+high)/2 low high
+ exch sub % (low+high)/2 high-low
+} bind def
+
+
+% Given two points stored as [gx gy tx ty] followed by the scaled
+% result (rx, ry), and a comparison function (lt or gt) leave the
+% point which is the minimum (or maximum) in each dimension.
+/Mlpminmax { % [pnt1] r1x r1y [pnt2] r2x r2y cmp Mlpminmax [pnt] x y
+ cvx % [pnt1] r1x r1y [pnt2] r2x r2y cmp
+ 2 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2x
+ 6 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2x r1x
+ 2 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2x r1x cmp
+ exec % [pnt1] r1x r1y [pnt2] r2x r2y cmp take2?
+ { % [pnt1] r1x r1y [pnt2] r2x r2y cmp
+ 7 -3 roll % [pnt2] r2x r2y cmp [pnt1] r1x r1y
+ 4 -1 roll % [pnt2] r2x r2y [pnt1] r1x r1y cmp
+ } if % [pnt1] r1x r1y [pnt2] r2x r2y cmp
+ 1 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2y
+ 5 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2y r1y
+ 3 -1 roll % [pnt1] r1x r1y [pnt2] r2x r2y r2y r1y cmp
+ exec % [pnt1] r1x r1y [pnt2] r2x r2y take2y?
+ { % [gx ? tx ?] rx ? [? gy ? ty] ? ry
+ 4 1 roll % [gx ? tx ?] rx ry ? [? gy ? ty] ?
+ pop % [gx ? tx ?] rx ry ? [? gy ? ty]
+ 5 -1 roll % rx ry ? [? gy ? ty] [gx ? tx ?]
+ aload % rx ry ? [? gy ? ty] gx ? tx ? [gx ? tx ?]
+ pop pop % rx ry ? [? gy ? ty] gx ? tx
+ 4 -1 roll % rx ry ? gx ? tx [? gy ? ty]
+ aload pop % rx ry ? gx ? tx ? gy ? ty
+ [ % rx ry ? gx ? tx ? gy ? ty mark
+ 8 -2 roll % rx ry ? tx ? gy ? ty mark gx ?
+ pop % rx ry ? tx ? gy ? ty mark gx
+ 5 -2 roll % rx ry ? tx ? ty mark gx gy ?
+ pop % rx ry ? tx ? ty mark gx gy
+ 6 -2 roll % rx ry ? ty mark gx gy tx ?
+ pop % rx ry ? ty mark gx gy tx
+ 5 -1 roll % rx ry ? mark gx gy tx ty
+ ] % rx ry ? [pnt]
+ 4 1 roll % [pnt] rx ry ?
+ pop % [pnt] rx ry
+ }
+ { % [gx gy tx ty] rx ry ? ? ?
+ pop pop pop % [pnt] rx ry
+ } ifelse % [pnt] rx ry
+} bind def
+
+
+% Given a size (s), graphics->text scale (A), text center (ct), text
+% width (wt), graphics center (cg) and graphics width (wg), compute
+% a new graphics->text scale (Anew) and offset (B) and whether or not
+% we are done.
+% Note, the mysterious .99999 is magic juju which is supposed to ward
+% off the possibility that floating point errors would cause this
+% routine to return the old A and yet claim not-done.
+/Mlp1 { % s A ct wt cg wg Mlp1 Anew B done?
+ 5 index % s A ct wt cg wg s
+ 3 index sub % s A ct wt cg wg s-wt
+ 5 index % s A ct wg cg wg s-wt A
+ 2 index mul % s A ct wg cg wg s-wt A*wg
+ 1 index % s A ct wg cg wg s-wt A*wg s-wt
+ le % s A ct wg cg wg s-wt fits?
+ 1 index % s A ct wg cg wg s-wt fits? s-wt
+ 0 le % s A ct wg cg wg s-wt fits? impossible?
+ or % s A ct wg cg wg s-wt done?
+ dup % s A ct wg cg wg s-wt done? done?
+ not % s A ct wg cg wg s-wt done? notdone?
+ { % s A ct wg cg wg s-wt done? (not done case)
+ 1 index % s A ct wg cg wg s-wt done? s-wt
+ 3 index div % s A ct wg cg wg s-wt done? (s-wt)/wg
+ .99999 mul % s A ct wg cg wg s-wt done? Anew
+ 8 -1 roll % s ct wg cg wg s-wt done? Anew A
+ pop % s ct wg cg wg s-wt done? Anew
+ 7 1 roll % s Anew ct wg cg wg s-wt done?
+ }
+ if % s Anew ct wg cg wg s-wt done?
+ 8 -1 roll % Anew ct wg cg wg s-wt done? s
+ 2 div % Anew ct wg cg wg s-wt done? s/2
+ 7 -2 roll % Anew cg wg s-wt done? s/2 ct wg
+ pop sub % Anew cg wg s-wt done? s/2-ct
+ 5 index % Anew cg wg s-wt done? s/2-ct Anew
+ 6 -3 roll % Anew done? s/2-ct Anew cg wg s-wt
+ pop pop % Anew done? s/2-ct Anew cg
+ mul sub % Anew done? s/2-ct-Anew*cg
+ exch % Anew B done?
+} bind def
+
+
+% The following are the workings of the tick, axes and plot labels.
+% NOTE a possible source of confusion is that for xticks ie tickmarks on
+% the x axis we keep y information and vice versa for yticks
+%
+% When Minner is found then
+%
+% assumes that box starts at zero on the left lower side
+%
+% 0) if outflag = 1 then intop = 0, inrht = 0 outflag = 0
+% 1) Save intop largest top of box
+% 2) Save inrht largest rht of box
+% 3) set inflag notifies that inner marks are present
+%
+% When Mouter is found then
+%
+% if inflag is set then
+% 1) get vecx and vecy off the stack (points in direcn to move)
+% 2) vecx < 1 xadrht = inrht*abs(vecx)
+% 3) vecx > 1 xadlft = inrht*abs(vecx)
+% 4) vecy < 1 yadtop = intop*abs(vecy)
+% 5) vecy > 1 yadbot = intop*abs(vecy)
+% 6) set outflag = 1
+% 7) clear inflag, inrht, intop
+% guaranteed to be zero if no inner is present??
+%
+%
+% These all have effects in Mrotsboxa and Mrotshowa
+% check inflag and if set
+%
+% 1) increase top of bbox by yadtop
+% 2) decrease bot of bbox by yadbot
+% 3) increase rht of bbox by xadrht
+% 4) increase lft of bbox by xadlft
+% 5) clear outflag, yadtop, yadbot,
+% xadrht, xadlft
+%
+%/
+
+/intop 0 def
+/inrht 0 def
+/inflag 0 def
+/outflag 0 def
+/xadrht 0 def
+/xadlft 0 def
+/yadtop 0 def
+/yadbot 0 def
+
+% This saves the top right corner of the bounding box as a side effect
+% This is to allow the adjustment of text placed with Mouter so that
+% it misses the Minner text. It is assumed that the ang is 0
+% in the same way it is assumed that the text of Mouter is 0 or 90
+%
+/Minner { % [(str)] gx gy sx sy ang Minner [(str)] gx gy sx sy ang
+ outflag % do a bit of tidying up if necessary
+ 1
+ eq
+ {
+ /outflag 0 def
+ /intop 0 def
+ /inrht 0 def
+ } if
+ 5 index % [(str)] gx gy sx sy ang [(str)]
+ gsave
+ Mtmatrix setmatrix
+ Mvboxa pop % [(str)] gx gy sx sy ang xlow ylow xhigh yhigh
+ grestore
+ 3 -1 roll % [(str)] gx gy sx sy ang xlow xhigh yhigh ylow
+ pop % [(str)] gx gy sx sy ang xlow xhigh yhigh
+ dup % [(str)] gx gy sx sy ang xlow xhigh yhigh yhigh
+ intop % is intop smaller than yhigh ?
+ gt
+ {
+ /intop % update if it is
+ exch def
+ }
+ { pop } % pop if it is not
+ ifelse % [(str)] gx gy sx sy ang xlow xhigh
+ dup % [(str)] gx gy sx sy ang xlow xhigh xhigh
+ inrht % is inrht smaller than xhigh
+ gt
+ {
+ /inrht % update if it is
+ exch def
+ }
+ { pop } % pop if it is no
+ ifelse % [(str)] gx gy sx sy ang xlow
+ pop % [(str)] gx gy sx sy ang
+ /inflag % set the inflag
+ 1 def
+} bind def
+
+% This takes two number off the stack and uses them as a vector in graphics
+% coordinates which points in the direction in which the Mouter text is to move
+% it calculates the bouding box adjustments yadtop yadbot xadrht and xadlft
+% these are in Mboxout to adjust the bounding box to compensate.
+/Mouter { % vecx vecy Mouter ..
+ /xadrht 0 def % reset everything
+ /xadlft 0 def
+ /yadtop 0 def
+ /yadbot 0 def
+ inflag % was there an inflag ?
+ 1 eq
+ {
+ dup % vecx vecy vecy
+ 0 lt
+ {
+ dup % vecx vecy vecy
+ intop % vecx vecy vecy intop
+ mul
+ neg % vecx vecy -vecy*intop
+ /yadtop % make into yadtop
+ exch def % vecx vecy
+ } if
+ dup % vecx vecy vecy
+ 0 gt
+ {
+ dup % vecx vecy vecy
+ intop % vecx vecy vecy intop
+ mul % vecx vecy vecy*intop
+ /yadbot % make into yadbot
+ exch def % vecx vecy
+ }
+ if
+ pop % vecx
+ dup % vecx vecx
+ 0 lt
+ {
+ dup % vecx vecx
+ inrht % vecx vecx inrht
+ mul
+ neg % vecx -vecx*inrht
+ /xadrht % make into xadrht
+ exch def % vecx
+ } if
+ dup % vecx vecx
+ 0 gt
+ {
+ dup % vecx vecx
+ inrht % vecx vecx inrht
+ mul % vecx vecx*inrht
+ /xadlft % make into xadlft
+ exch def
+ } if
+ pop %
+ /outflag 1 def % set outflag
+ }
+ { pop pop} %
+ ifelse
+ /inflag 0 def
+ /inrht 0 def
+ /intop 0 def
+} bind def
+
+%
+% This adjusts the bounding box to account for adjacent text
+% This allows the two text strings to avoid each other
+% current matrix is the text matrix
+/Mboxout { % tlx tly thx thy Mboxout new_tlx new_tly new_thx new_thy
+ outflag % do nothing unless Minner was found
+ 1
+ eq
+ {
+ 4 -1
+ roll % tly thx thy tlx
+ xadlft
+ leadjust
+ add % tly thx thy tlx xadlft+lead
+ sub % tly thx thy tlx_new
+ 4 1 roll % tlx_new tly thx thy
+ 3 -1
+ roll % tlx_new thx thy tly
+ yadbot % tlx_new thx thy tly yadbot
+ leadjust % tlx_new thx thy tly yadbot lead
+ add % tlx_new thx thy tly yadbot+lead
+ sub % tlx_new thx thy tly_new
+ 3 1
+ roll % tlx_new tly_new thx thy
+ exch % tlx_new tly_new thy thx
+ xadrht % tlx_new tly_new thy thx xadrht
+ leadjust % tlx_new tly_new thy thx xadrht lead
+ add % tlx_new tly_new thy thx xadrht+lead
+ add % tlx_new tly_new thy thx_new
+ exch % tlx_new tly_new thx_new thy
+ yadtop % tlx_new tly_new thx_new thy yadtop
+ leadjust % tlx_new tly_new thx_new thy yadtop lead
+ add % tlx_new tly_new thx_new thy yadtop+lead
+ add % tlx_new tly_new thx_new thy_new
+ /outflag 0 def % reset everything to 0
+ /xadlft 0 def
+ /yadbot 0 def
+ /xadrht 0 def
+ /yadtop 0 def
+ } if
+} bind def
+
+
+/leadjust {
+ (m) stringwidth pop
+ .5 mul
+} bind def
+
+
+% The offsets sx and sy refer to the graphics coordinate system
+% thus they must be altered if a rotation has taken place.
+% We must also change the bounding box computations for Minner
+%
+/Mrotcheck { % sx sy ang Mrotcheck new_sx new_sy ang
+ dup
+ 90
+ eq
+ {
+%
+% Mouter only applies to strings which are either at 0 or 90
+% sort out the box adjust factors
+%
+% xadrht -> yadbot
+% xadlft -> yadtop
+% yadtop -> xadrht
+% yadbot -> xadlft
+ yadbot
+ /yadbot
+ xadrht
+ def
+ /xadrht
+ yadtop
+ def
+ /yadtop
+ xadlft
+ def
+ /xadlft
+ exch
+ def
+ }
+ if
+ dup % sx sy ang ang
+ cos % sx sy ang Cos
+ 1 index % sx sy ang Cos ang
+ sin % sx sy ang Cos Sin
+ Checkaux % new_sx sx sy ang
+ dup % new_sx sx sy ang ang
+ cos % new_sx sx sy ang Cos
+ 1 index % new_sx sx sy ang Cos ang
+ sin neg % new_sx sx sy ang Cos -Sin
+ exch % new_sx sx sy ang -Sin Cos
+ Checkaux % new_sx new_sy sx sy ang
+ 3 1 roll % new_sx new_sy ang sx sy
+ pop pop % new_sx new_sy ang
+} bind def
+
+%
+% Checkaux is an auxilliary function for Mrotcheck it multiplies a
+% row vector by a column vector
+%
+/Checkaux { % r1 r2 dumy c1 c2 Checkaux r1 r2 dumy r1*c1+r2*c2
+ 4 index % r1 r2 dumy c1 c2 r1
+ exch % r1 r2 dumy c1 r1 c2
+ 4 index % r1 r2 dumy c1 r1 c2 r2
+ mul % r1 r2 dumy c1 r1 c2*r2
+ 3 1 roll % r1 r2 dumy c2*r2 c1 r1
+ mul add % r1 r2 dumy c2*r2+c1*r1
+ 4 1 roll % c2*r2+c1*r1 r1 r2 dumy
+} bind def
+
+%
+% Mboxrot converts the bounding box back from the rotated coordinate
+% system to the Mgmatrix system to compensate for a rotation
+% It has the opposite functionality of Mrotcheck
+% This is not the most neatest or most efficient implementation but it works
+%
+/Mboxrot { % tlx thx tly thy Mboxrot new_tlx new_thx new_tly new_thy
+ Mrot
+ 90 eq
+ {
+% old tlx thx tly thy
+% new -thy -tly tlx thx
+%
+ brotaux % tlx thx -thy -tly
+ 4 2
+ roll % -thy -tly tlx thx
+ }
+ if
+ Mrot
+ 180 eq
+ {
+% old tlx thx tly thy
+% new -thx -tlx -thx -tly
+%
+ 4 2
+ roll % tly thy tlx thx
+ brotaux % tly thy -thx -tlx
+ 4 2
+ roll % -thx -tlx tlx thy
+ brotaux % -thx -tlx -thy -tly
+ }
+ if
+ Mrot
+ 270 eq
+ {
+% old tlx thx tly thy
+% new tly thy -thx -tlx
+%
+ 4 2
+ roll % tly thy tlx thx
+ brotaux % tly thy -thx -tlx
+ }
+ if
+} bind def
+
+%
+% auxilliary function negate and reverse
+/brotaux { % x y boxrotaux -y -x
+ neg
+ exch
+ neg
+} bind def
+
+%
+% Mabsproc takes a measurement in the default user units and converts
+% it to the present units. This allows absolute thickness and dashing
+% to work. It works by using a {0, x} vector and using the RMS of the result.
+/Mabsproc { % abs thing Mabsproc
+ 0
+ matrix defaultmatrix
+ dtransform idtransform
+ dup mul exch
+ dup mul
+ add sqrt
+} bind def
+
+%
+% Mabswid allows the linewidth to be specified in absolute coordinates
+% It does this by recording the graphics transformation matrix at the
+% begining of the plot.
+% This will break if the scaling in the x and y directions is
+% different. This is the case if Mnodistort is false
+%
+/Mabswid { %abswid Mabswid
+ Mabsproc
+ setlinewidth
+} bind def
+
+% Mabsdash allows the dashing pattern to be specified in absolute coordinates
+% It does this by recording the graphics transformation matrix at the
+% begining of the plot.
+% This will break if the scaling in the x and y directions is
+% different. This is the case if Mnodistort is false
+%
+/Mabsdash { %[d1 d2 d3 .. ] off Mabsdash
+ exch % off [d1 d2 d3 ..]
+ [ % off [d1 d2 d3 ..]
+ exch % off [ [d1 d2 d3 ..]
+ {
+ Mabsproc
+ }
+ forall
+ ] % off [ fact*d1 fact*d2 fact*d3 .. ]
+ exch % [ nd1 nd2 nd3 .. ] off
+ setdash
+} bind def
+
+%MBeginOrig start coordinates in user coordinates
+/MBeginOrig { Momatrix concat} bind def
+
+%MEndOrig start coordinates in user coordinates
+/MEndOrig { Mgmatrix setmatrix} bind def
+
+/sampledsound where
+{ pop}
+{ /sampledsound { % str rate nsamp bs proc bool nchan
+ exch
+ pop % str rate nsamp bs proc nchan
+ exch % str rate nsamp bs nchan proc
+ 5 1 roll % str proc rate nsamp bs nchan
+ mul
+ 4 idiv % str proc rate nsamp bs*nchan/4
+ mul % str proc rate nsamp*bs*nchan/4
+ 2 idiv % str proc rate nbytes
+ exch pop % str proc nbytes
+ exch % str nbytes proc
+ /Mtempproc exch def
+ { Mtempproc pop}
+ repeat
+ } bind def
+} ifelse
+
+%
+% now simple conversion of cmykcolor to rgbcolor
+% subtract k and then take complements
+/setcmykcolor where
+{ pop}
+{ /setcmykcolor { % c m y k
+ 4 1
+ roll % k c m y
+ [ % k c m y [
+ 4 1
+ roll % k [ c m y
+ ] % k [ c m y ]
+ {
+ 1 index % k elem k
+ sub % k elem-k
+ 1
+ sub neg % k 1-(elem-k)
+ dup
+ 0
+ lt
+ {
+ pop
+ 0
+ }
+ if
+ dup
+ 1
+ gt
+ {
+ pop
+ 1
+ }
+ if
+ exch % 1-(elem-k) k
+ } forall % r g b k
+ pop
+ setrgbcolor
+} bind def
+} ifelse
+
+/Mcharproc % max
+{
+ currentfile
+ (x)
+ readhexstring
+ pop % max val
+ 0 get
+ exch % val max
+ div % nval
+} bind def
+
+/Mshadeproc % max ncols
+{
+ dup % max ncols ncols
+ 3 1
+ roll % ncols max ncols
+ { % ncols max
+ dup % ncols max max
+ Mcharproc % ncols max val
+ 3 1
+ roll % v1.. ncols max
+ } repeat
+ 1 eq
+ {
+ setgray
+ }
+ {
+ 3 eq
+ {
+ setrgbcolor
+ }
+ {
+ setcmykcolor
+ } ifelse
+ } ifelse
+} bind def
+
+/Mrectproc % x0 x1 y0 y1
+{
+ 3 index % x0 x1 y0 y1 x0
+ 2 index % x0 x1 y0 y1 x0 y0
+ moveto % x0 x1 y0 y1
+ 2 index % x0 x1 y0 y1 x1
+ 3 -1
+ roll % x0 x1 y1 x1 y0
+ lineto % x0 x1 y1
+ dup % x0 x1 y1 y1
+ 3 1
+ roll % x0 y1 x1 y1
+ lineto % x0 y1
+ lineto
+ fill
+} bind def
+
+/Mcolorimage % nx ny depth matrix proc bool ncols
+{
+ 7 1
+ roll % ncols nx ny depth matrix proc bool
+ pop
+ pop
+ matrix
+ invertmatrix
+ concat % ncols nx ny depth
+ 2 exch exp % ncols nx ny 2^depth
+ 1 sub % ncols nx ny max
+ 3 1 roll % ncols max nx ny
+ 1 1 % ncols max nx ny 1 1
+ 2 index % ncols max nx ny 1 1 ny
+ { % ncols max nx ny iy
+ 1 1 % ncols max nx ny iy 1 1
+ 4 index % ncols max nx ny iy 1 1 nx
+ { % ncols max nx ny iy ix
+ dup % ncols max nx ny iy ix ix
+ 1 sub % ncols max nx ny iy ix x0
+ exch % ncols max nx ny iy x0 x1
+ 2 index % ncols max nx ny iy x0 x1 iy
+ dup % ncols max nx ny iy x0 x1 iy iy
+ 1 sub % ncols max nx ny iy x0 x1 iy y0
+ exch % ncols max nx ny iy x0 x1 y0 y1
+ 7 index % ncols max nx ny iy x0 x1 y0 y1 max
+ 9 index % ncols max nx ny iy x0 x1 y0 y1 max ncols
+ Mshadeproc % ncols max nx ny iy x0 x1 y0 y1
+ Mrectproc % max nx ny iy
+ } for % x loop
+ pop % max nx ny
+ } for % y loop
+ pop pop pop pop
+} bind def
+
+/Mimage % nx ny depth matrix proc
+{
+ pop
+ matrix
+ invertmatrix
+ concat % nx ny depth
+ 2 exch exp % nx ny 2^depth
+ 1 sub % nx ny max
+ 3 1 roll % max nx ny
+ 1 1 % max nx ny 1 1
+ 2 index % max nx ny 1 1 ny
+ { % max nx ny iy
+ 1 1 % max nx ny iy 1 1
+ 4 index % max nx ny iy 1 1 nx
+ { % max nx ny iy ix
+ dup % max nx ny iy ix ix
+ 1 sub % max nx ny iy ix x0
+ exch % max nx ny iy x0 x1
+ 2 index % max nx ny iy x0 x1 iy
+ dup % max nx ny iy x0 x1 iy iy
+ 1 sub % max nx ny iy x0 x1 iy y0
+ exch % max nx ny iy x0 x1 y0 y1
+ 7 index % max nx ny iy x0 x1 y0 y1 max
+ Mcharproc % max nx ny iy x0 x1 y0 y1 val
+ setgray % max nx ny iy x0 x1 y0 y1
+ Mrectproc % max nx ny iy
+ } for % x loop
+ pop % max nx ny
+ } for % y loop
+ pop pop pop
+} bind def
+
+/Ma /Mabswid load def
+/a /arc load def
+/c /curveto load def
+/C /curveto load def
+/d /setdash load def
+/f /fill load def
+/F /fill load def
+/g /setgray load def
+/gr /grestore load def
+/gs /gsave load def
+/k /stroke load def
+/l /lineto load def
+/L /lineto load def
+/lw /setlinewidth load def
+/m /moveto load def
+/n /newpath load def
+/p /gsave load def
+/P /grestore load def
+/r /setrgbcolor load def
+/s /stroke load def
+/w /setlinewidth load def
+/beginmath /MBeginOrig load def
+/endmath /MEndOrig load def
+
+end
+%%EndProcSet
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale false def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 300 300
+(/tmp_mnt/usr8/levy/texts/geomsty/manual.dvi) @start
+/Fa 1 122 df<1818181818FFFF18181818181818181818181818181808167D900E>121
+D E /Fb 2 122 df<040E0E1C1C1C38383070706060C0C0070F7F8F0A>48
+D<0C000C000C000C000C000C00FFC0FFC00C000C000C000C000C000C000C000C000C000C
+000C000C000C000C000C000C000C000C000A1A7E9310>121 D E
+/Fc 22 122 df<E0E0E060404040C003087C820C>44 D<E0E0E003037C820C>46
+D<001C0000003E0000003E0000002E0000006700000067000000E7800000C7800000C380
+0001C3C0000183C0000181C0000381E0000381E0000700F0000700F0000600F0000E0078
+000FFFF8000FFFF8001C003C001C003C0018003C0038001E0038001E0070001F0070000F
+0070000F00E0000780191D7F9C1C>65 D<0FC03FF07FF87038401C001C001C00FC0FFC3F
+FC781CE01CE01CE01CF07C7FFC7FDC3F1C0E127E9114>97 D<E000E000E000E000E000E0
+00E000E000E000E000E000E3E0EFF0FFF8F87CF01CE01EE00EE00EE00EE00EE00EE00EE0
+1CF01CF87CFFF8EFF0E3C00F1D7D9C15>I<07E00FF81FFC3C1C70047000E000E000E000
+E000E000E000700070043C1C1FFC0FF807E00E127E9112>I<000E000E000E000E000E00
+0E000E000E000E000E000E0F8E1FEE3FFE7C3E700E700EE00EE00EE00EE00EE00EE00EF0
+0E701E7C3E3FFE1FEE0F8E0F1D7E9C15>I<07C01FE03FF078787018601CFFFCFFFCFFFC
+E000E000E000700070043C1C3FFC1FF807E00E127E9112>I<00FC01FC03FC07000E000E
+000E000E000E000E000E00FFE0FFE00E000E000E000E000E000E000E000E000E000E000E
+000E000E000E000E000E000E1D809C0D>I<03C3C00FFFC01FFFC01C3800381C00381C00
+381C00381C00381C001C38001FF8001FF0003BC0003800003800001FFC001FFF003FFF80
+700780E001C0E001C0E001C0F003C07C0F803FFF001FFE0007F800121B7F9115>I<E000
+E000E000E000E000E000E000E000E000E000E000E3E0EFF0FFF8F83CF01CE01CE01CE01C
+E01CE01CE01CE01CE01CE01CE01CE01CE01CE01C0E1D7D9C15>I<F0F0F0F00000000000
+0000707070707070707070707070707070707070041D7E9C0A>I<E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0031D7D9C0A>108
+D<E3E0EFF0FFF8F83CF01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE0
+1C0E127D9115>110 D<03F0000FFC001FFE003C0F00780780700380E001C0E001C0E001
+C0E001C0E001C0F003C07003807807803C0F001FFE000FFC0003F00012127F9115>I<E3
+E0EFF0FFF8F87CF01CE01EE00EE00EE00EE00EE00EE00EE01CF03CF87CFFF8EFF0E3C0E0
+00E000E000E000E000E000E000E0000F1A7D9115>I<078E1FEE3FFE7C3E781E700EE00E
+E00EE00EE00EE00EE00EF00E701E7C3E3FFE1FEE0F8E000E000E000E000E000E000E000E
+000E0F1A7E9115>I<E380E780EF80FC00F800F000F000E000E000E000E000E000E000E0
+00E000E000E000E00009127D910E>I<1FC03FF07FF0F030E000E000F0007F003FC01FE0
+00F0003800388038F078FFF07FE01FC00D127F9110>I<1C001C001C001C001C001C00FF
+E0FFE01C001C001C001C001C001C001C001C001C001C001C001C001C201FF00FF007C00C
+187F970F>I<E01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE01CE07C
+FFFC7FDC3F1C0E127D9115>I<E007E007700E700E780E381C381C1C181C380C380E300E
+7006700760036003C001C001C001800180030003000700FE00FC00F800101A7F9113>
+121 D E /Fd 16 118 df<F8F8F8F8F805057C840D>46 D<007000F007F07FF0FFF07BF0
+03F003F003F003F003F003F003F003F003F003F003F003F003F003F003F003F003F003F0
+03F003F003F07FFE7FFF7FFE101E7D9D17>49 D<07F0001FFC003FFE007FFF007C3F80F0
+1F80F01F80700FC0600FC0200FC0000FC0000FC0000F80001F80001F00003F00007E0000
+7C0000F80001F00003E0000780000F00001F00001E00003C00007FFFC0FFFFC0FFFFC07F
+FFC0121E7E9D17>I<7FFFC0FFFFC0FFFFC0FFFFC0FC0000FC0000FC0000FC0000FC0000
+FC0000FC0000FC0000FFFF00FFFF00FFFF00FFFF00FC0000FC0000FC0000FC0000FC0000
+FC0000FC0000FC0000FC0000FC0000FC0000FC00007C0000121D7C9C19>70
+D<7FFFFF80FFFFFF80FFFFFF80FFFFFF80003F0000003F0000003F0000003F0000003F00
+00003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00
+00003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00
+00003F0000001F0000191D7E9C1E>84 D<03FC001FFF003FFF803C0F80300FC0200FC000
+0FC0007FC00FFFC03F8FC07E0FC0FC0FC0FC0FC0FC0FC0FC0FC07E3FC07FEFC03FCFC01F
+8FC012137F9216>97 D<03F8000FFE001FFF003E0F807E07807C07C0FC07C0FC07C0FFFF
+C0FFFFC0FC0000FC0000FC00007C00007E00803F03801FFF800FFF8003FE0012137F9215
+>101 D<0FF8F03FFFF07FFF707C1F00FC1F80FC1F80FC1F80FC1F80FC1F807C1F007FFF
+003FFC002FF8006000007000007FFE007FFFC03FFFE03FFFE07FFFF0F001F0F000F0F000
+F0F000F07C03E03FFFC01FFF8007FE00141C7F9217>103 D<7C0000FC0000FC0000FC00
+00FC0000FC0000FC0000FC0000FC0000FC0000FC3E00FCFF80FDFF80FF0FC0FE0FC0FC0F
+C0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0F
+C07C0FC0121D7E9C17>I<F8FCFCFCFCF800000000007CFCFCFCFCFCFCFCFCFCFCFCFCFC
+FCFCFCFC7C061E7E9D0B>I<03FC000FFF003FFFC03F0FC07E07E07C03E0FC03F0FC03F0
+FC03F0FC03F0FC03F0FC03F0FC03F07C03E07E07E07F0FE03FFFC00FFF0003FC0014137F
+9217>111 D<07CFC01FEFC03FFFC07F1FC07E0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0
+FC0FC0FC0FC0FC0FC0FC0FC07E0FC07E1FC03FFFC01FEFC007CFC0000FC0000FC0000FC0
+000FC0000FC0000FC0000FC0000FC0121B7E9217>113 D<7C60FDE0FDE0FFE0FF00FE00
+FE00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC007C000B137E920F>I<0FF81F
+FE3FFE781E780478007E007FE03FF81FFC0FFC03FE403E401EE01EF81EFFFC7FF80FE00F
+137F9212>I<1F003F003F003F003F007FF8FFF8FFF83F003F003F003F003F003F003F00
+3F003F003F003F003F003F103FF81FF80FC00D187F9711>I<7C0FC0FC0FC0FC0FC0FC0F
+C0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC0FC1FC0FC3F
+C07FEFC07FCFC01F8FC012137E9217>I E /Fe 2 55 df<8000F000FC00FF00FFE0FFFE
+FFFEFFE0FF00FC00F00080000F0C67852A>45 D<06000600060006000F000F000F001F80
+1F803FC03FC07FE07FE07FE0FFF00C0F86A72A>54 D E /Ff 14
+118 df<7FFFFCFFFFFC7FFFFC0E001C0E001C0E001C0E001C0E00000E00000E00000E03
+800E03800E03800FFF800FFF800FFF800E03800E03800E03800E00000E00000E00000E00
+000E00000E00000E00000E00007FE000FFE0007FE000161E7F9D1A>70
+D<7FFFFEFFFFFEFFFFFEE0380EE0380EE0380EE0380E0038000038000038000038000038
+000038000038000038000038000038000038000038000038000038000038000038000038
+0000380000380000380003FF8003FF8003FF80171E7F9D1A>84 D<1FF0003FFC007FFE00
+780F00300700000380000380007F8007FF801FFF803F8380780380700380E00380E00380
+E00380700780780F803FFFFC1FFDFC07F0FC16157D941A>97 D<FE0000FE0000FE00000E
+00000E00000E00000E00000E00000E00000E3E000EFF800FFFE00FC1F00F80700F00380E
+00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F00FC1E00F
+FFC00EFF80063E00161E7F9D1A>I<01F80007FF000FFF801E07C03C01C07800E07000E0
+E00070E00070FFFFF0FFFFF0FFFFF0E000007000007000007800703C00701F01F00FFFE0
+03FFC000FE0014157D941A>101 D<0007E0001FF0003FF800787800F03000E00000E000
+00E00000E0007FFFF0FFFFF0FFFFF000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E0003FFF807FFFC03FFF80151E7F
+9D1A>I<01F87C07FFFE0FFFFE1E078C1C03803801C03801C03801C03801C03801C01C03
+801E07801FFF001FFE0039F8003800003800001C00001FFF801FFFE03FFFF878007C7000
+1CE0000EE0000EE0000EE0000E70001C78003C3E00F81FFFF007FFC001FF0017217F941A
+>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E3E000EFF800F
+FFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E
+00E00E00E00E00E00E00E0FFE3FEFFE7FEFFE3FE171E7F9D1A>I<00C00001E00001E000
+00C0000000000000000000000000000000000000007FE0007FE0007FE00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
+00E0007FFF80FFFFC07FFF80121F7C9E1A>I<FFE000FFE000FFE00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E000FFFFE0FFFFE0FFFF
+E0131E7D9D1A>108 D<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C
+1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C
+1C001C1C1C001C1C1C007F1F1F00FF9F9F807F1F1F00191580941A>I<7F83F0FF8FF87F
+BFFC03FC3C03F01803E00003C00003C00003800003800003800003800003800003800003
+80000380000380000380007FFF00FFFF007FFF0016157E941A>114
+D<00C00001C00001C00001C00001C00001C00001C0007FFFE0FFFFE0FFFFE001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C07001C07001C07001C0
+7000E0E000FFE0007FC0001F00141C7F9B1A>116 D<FE0FE0FE0FE0FE0FE00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E01
+E00F03E007FFFE03FFFE00FCFE17157F941A>I E /Fg 14 118 df<FFFFFFFF38073807
+3807380738003800387038703FF03FF0387038703800380038003800380038003800FF00
+FF0010177E9614>70 D<7FFF80FFFF80E1C380E1C380E1C380E1C38001C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+000FF8000FF80011177F9614>84 D<1FC0007FF000707800201800001C00001C0007FC00
+1FFC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14>97
+D<FC0000FC00001C00001C00001C00001C00001C00001CF8001DFE001F07001E03001C03
+801C01C01C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC000CF8001217
+809614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000380E1C1E0FFC03
+F00F107E8F14>101 D<007C00FE01CE03840380038003807FFEFFFE0380038003800380
+038003800380038003800380038003807FFC7FFC0F177F9614>I<07CF001FFF80383B80
+301800701C00701C00701C003018003838003FF00037C0007000007000003FF8001FFC00
+3FFE00700F00E00380E00380E00380E003807007003C1E001FFC0007F00011197F8F14>
+I<FC0000FC00001C00001C00001C00001C00001C00001C78001DFE001F86001E07001C07
+001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE01317
+809614>I<030007800780030000000000000000007F807F800380038003800380038003
+80038003800380038003800380FFFCFFFC0E187D9714>I<FF80FF800380038003800380
+038003800380038003800380038003800380038003800380038003800380FFFEFFFE0F17
+7E9614>108 D<FB8E00FFDF003CF3803CF38038E38038E38038E38038E38038E38038E3
+8038E38038E38038E38038E380FEFBE0FE79E01310808F14>I<FE1F00FE7F800EE3800F
+81000F00000F00000E00000E00000E00000E00000E00000E00000E00000E0000FFF000FF
+F00011107F8F14>114 D<030007000700070007007FFCFFFC0700070007000700070007
+0007000700070E070E070E070C03FC00F00F157F9414>116 D<FC3F00FC3F001C07001C
+07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F000FFFE003
+E7E01310808F14>I E /Fh 6 122 df<60F0F06004047C830C>58
+D<60F0F0701010101020204080040C7C830C>I<00010003000600060006000C000C000C
+0018001800180030003000300060006000C000C000C00180018001800300030003000600
+06000C000C000C00180018001800300030003000600060006000C000C00010297E9E15>
+61 D<01E3000717000C0F00180F00380E00300E00700E00700E00E01C00E01C00E01C00
+E01C00E03880E03880E038806078803199001E0E0011127E9116>97
+D<07878008C84010F0C020F1E020E3C040E18000E00000E00001C00001C00001C00001C0
+00638080F38080F38100E5810084C60078780013127E9118>120
+D<1C00C02701C04701C04701C08703808703800E03800E03801C07001C07001C07001C07
+00180E00180E00180E001C1E000C3C0007DC00001C00001800603800F03000F06000E0C0
+004180003E0000121A7E9114>I E /Fi 20 122 df<0001FC000703000C03001C07001C
+0300180000380000380000380000380000700007FFFC00701C00701C00701C00E03800E0
+3800E03800E03800E07001C07001C07001C07001C0E201C0E201C0E20380E40380640380
+38038000030000070000060000C60000E40000CC00007000001825819C17>12
+D<01FFFC00003C070000380380003801C0003801C0003801C0007003C0007003C0007003
+C00070038000E0078000E0070000E00E0000E0380001FFE00001C0000001C0000001C000
+0003800000038000000380000003800000070000000700000007000000070000000F0000
+00FFE000001A1C7D9B1C>80 D<03CC063C0C3C181C3838303870387038E070E070E070E0
+70E0E2C0E2C0E261E462643C380F127B9115>97 D<3F00070007000E000E000E000E001C
+001C001C001C0039C03E60383038307038703870387038E070E070E070E060E0E0C0C0C1
+C0618063003C000D1D7B9C13>I<01F007080C08181C3838300070007000E000E000E000
+E000E000E008E010602030C01F000E127B9113>I<001F80000380000380000700000700
+000700000700000E00000E00000E00000E0003DC00063C000C3C00181C00383800303800
+703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E4006264003C3800
+111D7B9C15>I<01E007100C1018083810701070607F80E000E000E000E000E000E00860
+10602030C01F000D127B9113>I<0003C0000670000C70001C60001C00001C0000380000
+380000380000380000380003FF8000700000700000700000700000700000E00000E00000
+E00000E00000E00001C00001C00001C00001C00001C00003800003800003800003000003
+0000070000C60000E60000CC00007800001425819C0D>I<018003800100000000000000
+00000000000000001C002600470047008E008E000E001C001C001C003800380071007100
+7100720072003C00091C7C9B0D>105 D<0006000E000600000000000000000000000000
+0000F00118021802180438043800380038007000700070007000E000E000E000E001C001
+C001C001C003800380C300E700CE0078000F24819B0D>I<1F8003800380070007000700
+07000E000E000E000E001C001C001C001C0038003800380038007000700070007000E400
+E400E400E40068003800091D7C9C0B>108 D<3C1E0780266318C04683A0E04703C0E08E
+0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C01C070380380E038838
+0E0388380E0708380E0710701C0320300C01C01D127C9122>I<3C3C0026460046870047
+07008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40381C4038384038
+3880701900300E0012127C9117>I<01E007180C0C180C380C300E700E700EE01CE01CE0
+1CE018E038E030E06060C031801E000F127B9115>I<07870004D98008E0C008E0C011C0
+E011C0E001C0E001C0E00381C00381C00381C00381800703800703000707000706000E8C
+000E70000E00000E00001C00001C00001C00001C00003C0000FF8000131A7F9115>I<3C
+3C26C2468747078E068E000E000E001C001C001C001C0038003800380038007000300010
+127C9112>114 D<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030
+C030806060C01F000E127D9111>I<00C001C001C001C00380038003800380FFE0070007
+0007000E000E000E000E001C001C001C001C00384038403840388019000E000B1A7D990E
+>I<1E06270E470E4706870287020E020E021C041C041C041C0818083808181018200C40
+07800F127C9113>118 D<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C38
+383838183818381C7007F00070007000E0E0C0E1C0818047003C00101A7C9114>121
+D E /Fj 1 4 df<FFFFFFF0FFFFFFF0C0000030C0000030C0000030C0000030C0000030
+C0000030C0000030C0000030C0000030C0000030C0000030C0000030C0000030C0000030
+C0000030C0000030C0000030C0000030C0000030C0000030C0000030C0000030C0000030
+C0000030C0000030FFFFFFF07FFFFFF01C1D7D9C23>3 D E /Fk
+24 128 df<000FE000007FF80000F81C0001E07C0003E07C0007C07C0007C07C0007C038
+0007C0000007C0000007C0000007C1FE00FFFFFE00FFFFFE0007C03E0007C03E0007C03E
+0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E
+0007C03E0007C03E0007C03E0007C03E003FF9FFC03FF9FFC01A20809F1D>12
+D<0018007000E001C00380038007000E000E001E001C003C003C007800780078007800F8
+00F000F000F000F000F000F000F000F000F000F80078007800780078003C003C001C001E
+000E000E0007000380038001C000E0007000180D2D7DA114>40 D<C000700038001C000E
+000E0007000380038003C001C001E001E000F000F000F000F000F8007800780078007800
+78007800780078007800F800F000F000F000F001E001E001C003C00380038007000E000E
+001C0038007000C0000D2D7DA114>I<FFF0FFF0FFF0FFF00C047F8B11>45
+D<387CFEFEFE7C3807077C860F>I<00E00001E0000FE000FFE000F3E00003E00003E000
+03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
+03E00003E00003E00003E00003E00003E00003E00003E000FFFF80FFFF80111D7C9C1A>
+49 D<3803803FFF803FFF003FFE003FFC003FF0003F8000300000300000300000300000
+33F80037FE003C1F00380F801007C00007C00007E00007E07807E0FC07E0FC07E0FC07E0
+FC07C0780FC0600F80381F001FFC0007F000131D7D9C1A>53 D<003F0001FFC007E0E00F
+81E01F03F01E03F03E03F07C03F07C01E07C0000FC1000FCFF00FDFFC0FD03E0FE01F0FE
+01F0FC01F8FC01F8FC01F8FC01F87C01F87C01F87C01F83C01F03E01F01E03E00F07C007
+FF8001FE00151D7E9C1A>I<FFFFFE0000FFFFFFC00007E007F00007E001F80007E000FC
+0007E0007E0007E0003F0007E0003F0007E0001F8007E0001F8007E0001F8007E0001FC0
+07E0001FC007E0001FC007E0001FC007E0001FC007E0001FC007E0001FC007E0001FC007
+E0001FC007E0001F8007E0001F8007E0001F8007E0003F0007E0003F0007E0007E0007E0
+00FC0007E001F80007E007F000FFFFFFC000FFFFFE0000221F7E9E28>68
+D<FFFFFFE0FFFFFFE007E007E007E001E007E000E007E0006007E0007007E0003007E000
+3007E0603007E0603007E0600007E0E00007E1E00007FFE00007FFE00007E1E00007E0E0
+0007E0600007E0600C07E0600C07E0000C07E0001807E0001807E0001807E0003807E000
+7807E000F807E003F0FFFFFFF0FFFFFFF01E1F7E9E22>I<7FFFFFFC7FFFFFFC7C07E07C
+7007E01C6007E00C6007E00CE007E00EC007E006C007E006C007E006C007E0060007E000
+0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
+0007E0000007E0000007E0000007E0000007E0000007E0000007E00003FFFFC003FFFFC0
+1F1E7E9D24>84 D<0007F80007F80000F80000F80000F80000F80000F80000F80000F800
+00F80000F80000F801F8F80FFEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC
+00F8FC00F8FC00F8FC00F87C00F87C00F87E00F83E01F81F07F80FFEFF03F8FF18207E9F
+1D>100 D<01FE0007FF800F83C01E01E03E00F07C00F07C00F8FC00F8FFFFF8FFFFF8FC
+0000FC0000FC00007C00007C00003E00181E00180F807007FFE000FF8015147F9318>I<
+FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000
+1F0FC01F3FE01F61F01FC0F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
+1F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18207D9F1D>104
+D<1C003E007F007F007F003E001C00000000000000000000000000FF00FF001F001F001F
+001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B217EA00E
+>I<FE0FE03F80FE1FF07FC01E70F9C3E01E407D01F01E807E01F01F807E01F01F007C01
+F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F0
+1F007C01F01F007C01F01F007C01F01F007C01F0FFE3FF8FFEFFE3FF8FFE27147D932C>
+109 D<FE0FC0FE3FE01E61F01EC0F81E80F81F00F81F00F81F00F81F00F81F00F81F00F8
+1F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18147D931D>I<01FF
+0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC00
+7E7C007C7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>I<FE3E00FE7F801E
+CFC01E8FC01E8FC01F8FC01F03001F00001F00001F00001F00001F00001F00001F00001F
+00001F00001F00001F0000FFF000FFF00012147E9316>114 D<0FE63FFE701E600EE006
+E006F800FFC07FF83FFC1FFE03FE001FC007C007E007F006F81EFFFCC7F010147E9315>
+I<01800180018003800380038007800F803F80FFFCFFFC0F800F800F800F800F800F800F
+800F800F800F800F860F860F860F860F8607CC03F801F00F1D7F9C14>I<FF07F8FF07F8
+1F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
+1F00F81F01F81F01F80F06F807FCFF03F8FF18147D931D>I<FFE07F80FFE07F801F001C
+000F8018000F80180007C0300007C0300003E0600003E0600001F0C00001F0C00001F9C0
+0000F9800000FF8000007F0000007F0000003E0000003E0000001C0000001C000019147F
+931C>I<3018783CFC7EFC7E783C30180F067BA01A>127 D E /Fl
+7 128 df<1E003033007061E1E0E19EC0E18180E18300E18600E18600610C003318001E
+30780061CC00C18400C3860183860303860603860C01841801CC08007817147E921C>37
+D<FFFF801E03801E01801E00C01E00C01E00001E18001E18001FF8001E18001E18001E00
+601E00601E00E01E00C01E03C0FFFFC013117F9016>69 D<007C001C001C001C001C001C
+0FDC383C701CE01CE01CE01CE01CE01C701C387C0FDF10117F9013>100
+D<0FC038707038E01CE01CE01CE01CE01C703838700FC00E0B7F8A11>111
+D<F1E0327034703820380038003800380038003800FE000C0B7F8A0E>114
+D<3FC040C0C0C0E000FF003FC007E0C060C060E0C0DF800B0B7F8A0E>I<6180F3C0F3C0
+61800A047D9111>127 D E /Fm 1 50 df<03000700FF00070007000700070007000700
+070007000700070007000700070007000700070007007FF00C157E9412>49
+D E /Fn 2 84 df<70F8F8F87005057C840E>58 D<0003F010000E0C2000180260002001
+E0004000E000C000C0008000C0018000C0018000C0038000800380008003800000038000
+0003C0000001F0000001FE000000FFE000007FF000001FF8000001FC0000003C0000001C
+0000000E0000000E0000000E0020000C0020000C0020000C002000080060001800600010
+007000200070004000C8008000C603000081FC00001C247DA21E>83
+D E /Fo 28 128 df<70F8F8F0E005057A840F>46 D<0000000800000018000000300000
+003000000060000000C0000000C000000180000001800000030000000600000006000000
+0C0000000C0000001800000030000000300000006000000060000000C000000180000001
+800000030000000300000006000000060000000C00000018000000180000003000000030
+00000060000000C0000000C0000001800000018000000300000006000000060000000C00
+00000C0000001800000030000000300000006000000060000000C0000000C00000008000
+00001D317FA419>I<07000F800F800F000E000000000000000000000000000000000000
+00000000007000F800F800F000E00009157A940F>58 D<00000300000003000000070000
+00070000000F0000000F0000001F0000002F0000002F0000004F0000004F800000878000
+008780000107800002078000020780000407800004078000080780000807800010078000
+30078000200780007FFF80004007C0008007C0008003C0010003C0030003C0020003C004
+0003C0040003C00C0003C03C0007C0FF003FFC1E237DA224>65 D<00FFFFFF80000F0007
+80000F000180000F000180001E000180001E000180001E000100001E000100003C000100
+003C000100003C010100003C01000000780200000078020000007806000000780E000000
+FFFC000000F00C000000F00C000000F00C000001E008000001E008000001E008040001E0
+00080003C000080003C000080003C000100003C000100007800020000780006000078000
+C000078001C0000F8007C000FFFFFF800021227DA121>69 D<00FFF8000F00000F00000F
+00001E00001E00001E00001E00003C00003C00003C00003C000078000078000078000078
+0000F00000F00000F00000F00001E00001E00001E00001E00003C00003C00003C00003C0
+000780000780000780000780000F8000FFF80015227DA113>73 D<00FFF807FC000F0001
+E0000F0001C0000F000100001E000200001E000400001E001000001E002000003C004000
+003C008000003C010000003C04000000780800000078180000007838000000787C000000
+F0BC000000F23C000000F41E000000F81E000001F01F000001E00F000001E00F000001E0
+0F800003C007800003C007800003C003C00003C003C000078003C000078001E000078001
+E000078001E0000F8001F000FFF80FFE0026227DA125>75 D<FFF03FF80FF81F0007C003
+C01E00078001801E00078001001E00078002001E000F8002001E000F8004001F00178004
+001F00178008000F00278008000F00278010000F00478010000F00C78020000F00878020
+000F01078040000F010780C0000F02078080000F02078100000F04078100000F0407C200
+000F0807C200000F0803C400000F1003C400000F1003C800000F2003C800000F2003D000
+000F4003D000000FC003E000000F8003E000000F0003C000000F00038000000E00038000
+000E00030000000C00030000000C00020000002D2376A131>87 D<00F8C00185C00705C0
+0E03800E03801C03803C0380380700780700780700780700F00E00F00E00F00E00F00E10
+F01C20701C20703C20305C40308C400F078014157B9419>97 D<03C03F80038003800380
+07000700070007000E000E000E000E001C001CF81D0C1E0E3C0638073807380F700F700F
+700F700FE01EE01EE01EE03CE038E038607060E031C01F0010237BA216>I<007E0001C1
+000301800703800E07801C07803C0000380000780000780000780000F00000F00000F000
+00F00000F00100700100700200300C001830000FC00011157B9416>I<00003C0003F800
+00380000380000380000700000700000700000700000E00000E00000E00000E00001C000
+F9C00185C00705C00E03800E03801C03803C0380380700780700780700780700F00E00F0
+0E00F00E00F00E10F01C20701C20703C20305C40308C400F078016237BA219>I<00F803
+840E021C023C0238027804F018FFE0F000F000E000E000E000E000E002E0026004701830
+600F800F157A9416>I<00003E0000470000CF00018F0001860003800003800003800007
+00000700000700000700000700000E0000FFF0000E00000E00000E00001C00001C00001C
+00001C00001C000038000038000038000038000038000070000070000070000070000070
+0000E00000E00000E00000E00000C00001C00001C000718000F18000F300006200003C00
+00182D82A20F>I<00F0000FE00000E00000E00000E00001C00001C00001C00001C00003
+8000038000038000038000070000071F0007218007C0C00F00E00F00E00E00E00E00E01C
+01C01C01C01C01C01C01C0380380380380380380380704700708700E08700E10700610E0
+06206003C016237DA219>104 D<00C001E001C001C00000000000000000000000000000
+00001C002300430043008700870087000E000E001C001C001C0038003800384070807080
+7080710032001C000B217BA00F>I<01E01FC001C001C001C00380038003800380070007
+00070007000E000E000E000E001C001C001C001C00380038003800380070007000700071
+00E200E200E200E200640038000B237CA20C>108 D<1C0F80F8002610C10C0047606606
+0087807807008780780700870070070087007007000E00E00E000E00E00E000E00E00E00
+0E00E00E001C01C01C001C01C01C001C01C01C001C01C038203803803840380380704038
+03807080380380308070070031003003001E0023157B9428>I<1C0F002631C04740C087
+80E08780E08700E08700E00E01C00E01C00E01C00E01C01C03801C03801C03801C070438
+0708380E08380E103806107006203003C016157B941B>I<007E0001C3000381800701C0
+0E01C01C01E03C01E03801E07801E07801E07801E0F003C0F003C0F00380F00780700700
+700E00700C0030180018700007C00013157B9419>I<01C1F002621804741C08780C0870
+0E08700E08701E00E01E00E01E00E01E00E01E01C03C01C03C01C03C01C0780380700380
+7003C0E003C1C0072380071E000700000700000E00000E00000E00000E00001C00001C00
+001C0000FFC000171F7F9419>I<1C1F002620804741C08783C08703C08701808700000E
+00000E00000E00000E00001C00001C00001C00001C000038000038000038000038000070
+000030000012157B9415>114 D<00FC000183000200800401800C03800C03000C00000F
+00000FF00007FC0003FE00003E00000F00000700700700F00600F00600E0040040080020
+30001FC00011157D9414>I<00C001C001C001C001C003800380038003800700FFF80700
+07000E000E000E000E001C001C001C001C00380038003800381070207020704070803100
+1E000D1F7C9E10>I<1E00602300E04380E04381C08381C08701C08701C00703800E0380
+0E03800E03801C07001C07001C07001C07081C0E10180E101C0E101C1E200C262007C3C0
+15157B941A>I<03C1E0046210083470103CF02038F02038602038000070000070000070
+0000700000E00000E00000E00000E02061C040F1C040F1C080E2C100446200383C001415
+7D9416>120 D<1E00302300704380704380E08380E08700E08700E00701C00E01C00E01
+C00E01C01C03801C03801C03801C03801C07001C07001C07001C0F000C3E0003CE00000E
+00000E00001C00601C00F03800F03000E0600080C0004380003E0000141F7B9418>I<30
+38787CF87CF87870700E0573A119>127 D E /Fp 1 98 df<0020000070000070000070
+0000B80000B80000B800011C00011C00011C00020E00020E0004070004070007FF000803
+800803800803801801C03803C0FE0FF815157F9419>97 D E /Fq
+2 4 df<FFFFFF80FFFFFF8019027D8A20>0 D<01800180018001804182F18F399C0FF003
+C003C00FF0399CF18F4182018001800180018010127E9215>3 D
+E /Fr 72 125 df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+0E01C0000E01C0000E01C0007F87FC001A1D809C18>11 D<007E0001C1800301800703C0
+0E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C0
+0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
+7F87F8151D809C17>I<1C1C3C3870C0800607779C15>19 D<6060F0F0F8F86868080808
+080808101010102020404080800D0C7F9C15>34 D<0F0000C0188000C030600380703807
+006027FB00E0100600E0100C00E0100C00E0101800E0101800E0103000E0106000602060
+007020C00030418000188180000F0303C00006062000060C10000C1C0800181808001838
+0400303804006038040060380400C0380400C03804018038040300180803001C0806000C
+100C000620040003C01E217E9E23>37 D<60F0F8680808081010204080050C7C9C0C>39
+D<004000800100020006000C000C0018001800300030007000600060006000E000E000E0
+00E000E000E000E000E000E000E000E000E000600060006000700030003000180018000C
+000C00060002000100008000400A2A7D9E10>I<800040002000100018000C000C000600
+060003000300038001800180018001C001C001C001C001C001C001C001C001C001C001C0
+01C0018001800180038003000300060006000C000C00180010002000400080000A2A7E9E
+10>I<60F0F0701010101020204080040C7C830C>44 D<FFE0FFE00B0280890E>I<60F0F0
+6004047C830C>I<00010003000600060006000C000C000C001800180018003000300030
+0060006000C000C000C0018001800180030003000300060006000C000C000C0018001800
+1800300030003000600060006000C000C00010297E9E15>I<03C00C301818300C300C70
+0E60066006E007E007E007E007E007E007E007E007E007E007E007E007E0076006600670
+0E300C300C18180C3007E0101D7E9B15>I<030007003F00C70007000700070007000700
+070007000700070007000700070007000700070007000700070007000700070007000F80
+FFF80D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E00
+1C001C00380070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<
+07E01830201C201C781E780E781E381E001C001C00180030006007E00030001C001C000E
+000F000F700FF80FF80FF80FF00E401C201C183007E0101D7E9B15>I<000C00000C0000
+1C00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C0010
+1C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C0000
+1C0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E02430
+2818301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D
+7E9B15>I<00F0030C06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE0
+06E007E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<03E0
+0C301008200C20066006600660067006780C3E083FB01FE007F007F818FC307E601E600F
+C007C003C003C003C00360026004300C1C1007E0101D7E9B15>56
+D<03C00C301818300C700C600EE006E006E007E007E007E007E0076007700F300F18170C
+2707C700060006000E300C780C78187010203030C00F80101D7E9B15>I<60F0F0600000
+000000000000000060F0F06004127C910C>I<60F0F0600000000000000000000060F0F0
+701010101020204080041A7C910C>I<7FFFFFC0FFFFFFE0000000000000000000000000
+0000000000000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61
+D<000600000006000000060000000F0000000F0000000F00000017800000178000001780
+000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180F8
+000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F
+001E001F00FF80FFF01C1D7F9C1F>65 D<001F808000E0618001801980070007800E0003
+801C0003801C00018038000180780000807800008070000080F0000000F0000000F00000
+00F0000000F0000000F0000000F0000000F0000000700000807800008078000080380000
+801C0001001C0001000E000200070004000180080000E03000001FC000191E7E9C1E>67
+D<FFFFC0000F00F0000F003C000F000E000F0007000F0007000F0003800F0003C00F0001
+C00F0001C00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001
+E00F0001C00F0001C00F0003C00F0003800F0007800F0007000F000E000F001C000F0070
+00FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F000C0F00040F00040F00060F00020F0002
+0F02020F02000F02000F02000F06000FFE000F06000F02000F02000F02000F02010F0001
+0F00020F00020F00020F00060F00060F000C0F003CFFFFFC181C7E9B1C>I<FFFFF80F00
+780F00180F00080F00080F000C0F00040F00040F02040F02000F02000F02000F06000FFE
+000F06000F02000F02000F02000F02000F00000F00000F00000F00000F00000F00000F00
+000F8000FFF800161C7E9B1B>I<FFF3FFC00F003C000F003C000F003C000F003C000F00
+3C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000FFFFC000F00
+3C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F00
+3C000F003C000F003C000F003C00FFF3FFC01A1C7E9B1F>72 D<FFF00F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F00FFF00C1C7F9B0F>I<FFF8000F80000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00080F00080F00080F00180F00180F00100F00300F00700F01F0FFFFF0151C7E9B1A>76
+D<FF8000FF800F8000F8000F8000F8000BC00178000BC00178000BC001780009E0027800
+09E002780008F004780008F004780008F004780008780878000878087800087808780008
+3C107800083C107800083C107800081E207800081E207800081E207800080F407800080F
+40780008078078000807807800080780780008030078001C03007800FF8307FF80211C7E
+9B26>I<FF007FC00F800E000F8004000BC0040009E0040009E0040008F0040008F80400
+08780400083C0400083C0400081E0400080F0400080F0400080784000807C4000803C400
+0801E4000801E4000800F40008007C0008007C0008003C0008003C0008001C0008000C00
+1C000C00FF8004001A1C7E9B1F>I<FFFF800F00E00F00780F003C0F001C0F001E0F001E
+0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>80
+D<FFFF00000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E
+000F001C000F003C000F0078000F01E0000FFF00000F03C0000F00E0000F00F0000F0078
+000F0078000F0078000F0078000F0078000F0078000F0078100F0078100F0038100F003C
+20FFF01C20000007C01C1D7E9B1F>82 D<07E0801C1980300580700380600180E00180E0
+0080E00080E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F8000
+07C00003C00001C08001C08001C08001C0C00180C00180E00300D00200CC0C0083F80012
+1E7E9C17>I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F
+0020800F0020000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
+0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
+0000001F800003FFFC001B1C7F9B1E>I<FFF07FC00F000E000F0004000F0004000F0004
+000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004
+000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F000400070008
+0007800800038010000180100000C020000070C000001F00001A1D7E9B1F>I<FFE0FFE0
+FF1F001F003C1E001E00180F001F00100F001F00100F001F001007801F00200780278020
+078027802003C027804003C043C04003C043C04003E043C04001E081E08001E081E08001
+E081E08000F100F10000F100F10000F100F100007900FA00007A007A00007A007A00003E
+007C00003C003C00003C003C00003C003C00001800180000180018000018001800281D7F
+9B2B>87 D<7FF0FFC00FC03E000780180003C0180003E0100001E0200001F0600000F040
+0000788000007D8000003D0000001E0000001F0000000F0000000F8000000F80000013C0
+000023E0000021E0000041F00000C0F8000080780001007C0003003C0002001E0006001F
+001F003F80FFC0FFF01C1C7F9B1F>I<FFF007FC0F8001E00780008007C0018003C00100
+03E0020001F0020000F0040000F8040000780800007C1800003C1000001E2000001F2000
+000F4000000FC00000078000000780000007800000078000000780000007800000078000
+00078000000780000007800000078000007FF8001E1C809B1F>I<FEFEC0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07297C9E
+0C>91 D<08081010202040404040808080808080B0B0F8F8787830300D0C7A9C15>I<FE
+FE0606060606060606060606060606060606060606060606060606060606060606060606
+0606FEFE0729809E0C>I<1FC000307000783800781C00301C00001C00001C0001FC000F
+1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F870012127E9115>97
+D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C
+001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00
+C01C01C01C01801E030019060010F800131D7F9C17>I<07E00C301878307870306000E0
+00E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F00000700
+00070000070000070000070000070000070000070000070000070003E7000C1700180F00
+300700700700600700E00700E00700E00700E00700E00700E00700600700700700300700
+180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000
+E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E
+000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E
+000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C
+00381C00381C001818001C38000C300013C0001000003000001800001FF8001FFF001FFF
+803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC
+00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001C
+87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C03801C03801C0380FF9FF0141D7F9C17>I<18003C003C00180000000000000000
+00000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C00FF80091D7F9C0C>I<00C001E001E000C00000000000000000000000000000
+0FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000E060E0F0C0F1C061803E000B25839C0D>I<FC00001C00001C00001C00001C
+00001C00001C00001C00001C00001C00001C00001C3FC01C0F001C0C001C08001C10001C
+20001C40001CE0001DE0001E70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF
+9FE0131D7F9C16>I<FC001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C
+>I<FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01C01C001C01C01C
+001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00
+1C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D0300
+1E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
+1C03801C0380FF9FF014127F9117>I<03F0000E1C00180600300300700380600180E001
+C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F0001212
+7F9115>I<FC7C001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C
+00E01C00E01C01C01C01C01C01801E03001D06001CF8001C00001C00001C00001C00001C
+00001C00001C0000FF8000131A7F9117>I<03C1000C3300180B00300F00700700700700
+E00700E00700E00700E00700E00700E00700600700700700300F00180F000C370007C700
+000700000700000700000700000700000700000700003FE0131A7E9116>I<FCE01D301E
+781E781C301C001C001C001C001C001C001C001C001C001C001C001C00FFC00D127F9110
+>I<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D060
+8FC00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C001C001C001C
+001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C
+03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E0200
+0E020007040007040007040003880003880003D80001D00001D00000E00000E00000E000
+00400013127F9116>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B
+82000E1182000711C4000711C4000720C40003A0E80003A0E80003C0680001C0700001C0
+700001803000008020001B127F911E>I<7F8FF00F03800F030007020003840001C80001
+D80000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF815
+12809116>I<FF07E03C03801C01001C01000E02000E0200070400070400070400038800
+03880003D80001D00001D00000E00000E00000E000004000004000008000008000F08000
+F10000F300006600003C0000131A7F9116>I<7FFC70386038407040F040E041C003C003
+8007000F040E041C043C0C380870087038FFF80E127F9112>I<FFFFFFFFFF802901808B
+2A>124 D E /Fs 76 126 df<E038F078F078F078F078F078F078F078E038E03860300D
+0B7C9816>34 D<0387000387000387000387000387000387007FFFC0FFFFE0FFFFE0070E
+00070E00070E000E1C000E1C000E1C000E1C00FFFFE0FFFFE07FFFC01C38001C38001C38
+001C38001C38001C380013197F9816>I<00C00001C00001C00001C00007F0001FFC003F
+FE007DCF0071C780E1C380E1C780E1C780F1C30079C0003FC0001FF00007FC0001FE0001
+CF0001C70061C380F1C380F1C380E1C38071C70079DF003FFE001FF80007E00001C00001
+C00000C00011207E9C16>I<3801807C03807C0380EE0700EE0700EE0E00EE0E00EE0E00
+EE1C007C1C007C380038380000700000700000700000E00000E00001C00001C00001C000
+0380000383800707C00707C00E0EE00E0EE00E0EE01C0EE01C0EE03807C03807C0180380
+13207F9C16>I<30787C3C1C1C1C1C3878F0E040060D789816>39
+D<00E001E0038007000E001C001C0038003800700070007000E000E000E000E000E000E0
+00E000E000E000700070007000380038001C001C000E000700038001E000E00B217A9C16
+>I<C000E000700038001C000E000E000700070003800380038001C001C001C001C001C0
+01C001C001C001C0038003800380070007000E000E001C0038007000E000C0000A217B9C
+16>I<01C00001C00001C00001C00071C700F9CF807FFF001FFC0007F00007F0001FFC00
+7FFF00F9CF8071C70001C00001C00001C00001C00011127E9516>I<387C7E7E3E0E1E1C
+78F060070B798416>44 D<FFFF80FFFF80FFFF8011037E8D16>I<70F8F8F87005057884
+16>I<000180000380000380000700000700000E00000E00001C00001C00003800003800
+00700000700000E00000E00001C00001C0000380000380000700000700000E00000E0000
+1C00001C0000380000380000700000700000E00000E00000C0000011207E9C16>I<03E0
+000FF8001FFC001E3C00380E00780F00700700700700E00380E00380E00380E00380E003
+80E00380E00380E00380F00780700700700700780F003C1E001E3C001FFC000FF80003E0
+0011197E9816>I<01800380038007800F807F80FF807380038003800380038003800380
+038003800380038003800380038003807FF87FFC7FF80E197C9816>I<07E0001FF8003F
+FC00783E00E00700F00780F00380600380000380000380000700000700000E00001C0000
+380000700000E00001C0000380000F00001E03803803807FFF80FFFF807FFF8011197E98
+16>I<07E0001FF8003FFC00781E00780700300700000700000700000E00003E0007FC00
+07F00007FC00001E00000700000300000380000380600380F00380E00700781E003FFC00
+1FF80007E00011197E9816>I<007C0000FC0000DC0001DC00039C00039C00071C000F1C
+000E1C001E1C003C1C00381C00781C00F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C
+00001C00001C0001FFC001FFC001FFC013197F9816>I<3FFE003FFE003FFE0038000038
+00003800003800003800003800003800003BF0003FFC003FFE003C0F0030070000038000
+0380600380F00380F00380E00700781E003FFC001FF80007E00011197E9816>I<00F800
+03FC0007FE000F07001C0F00380F00780600700000700000E3F800EFFC00FFFE00F80F00
+F00700F00380E00380E003807003807003807007803807003C1E001FFC000FF80003E000
+11197E9816>I<E00000FFFF80FFFF80FFFF80E00F00E01E00001C000038000078000070
+0000E00000E00001C00001C00001C0000380000380000380000380000700000700000700
+00070000070000070000070000111A7E9916>I<07F0001FFC003FFE007C1F00F00780E0
+0380E00380E003807007007C1F001FFC0007F0001FFC003C1E00700700F00780E00380E0
+0380E00380F007807007007C1F003FFE001FFC0007F00011197E9816>I<03E0000FF800
+1FFC003C1E00700E00700700E00700E00780E00380E00380E00780700780780F803FFF80
+1FFB800FE380000700000700300700780E00781C007078003FF0001FE0000F800011197E
+9816>I<70F8F8F870000000000000000070F8F8F8700512789116>I<7FFF00FFFF80FFFF
+80000000000000000000000000000000FFFF80FFFF807FFF00110B7E9116>61
+D<C00000F00000FC00003E00000F800007C00001F00000F800003E00001F80000780001F
+80003E0000F80001F00007C0000F80003E0000FC0000F00000C0000011157E9616>I<00
+F80003FC0007FE000F07001C3F80387F8078FF8071C3C071C3C0E381C0E381C0E381C0E3
+81C0E381C0E381C0E381C071C38071C38078FF00387E001C3C000F03C007FFC003FF0000
+FC0012197E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B8000318
+00071C00071C00071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07001C07
+001C07007F1FC0FF1FE07F1FC013197F9816>I<7FF800FFFE007FFF001C0F001C07801C
+03801C03801C03801C07801C07001FFF001FFE001FFE001C1F001C03801C03C01C01C01C
+01C01C01C01C01C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<01F18007FB80
+0FFF801F0F803C0780380380700380700380F00000E00000E00000E00000E00000E00000
+E00000E00000F000007003807003803803803C07001F0F000FFE0007FC0001F00011197E
+9816>I<7FF800FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00
+E01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF
+00FFFE007FF8001319809816>I<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C
+00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C
+00E01C00E01C00E07FFFE0FFFFE07FFFE013197F9816>I<FFFFE0FFFFE0FFFFE01C00E0
+1C00E01C00E01C00E01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C00
+1C00001C00001C00001C00001C00001C0000FF8000FFC000FF800013197F9816>I<7F1F
+C0FFBFE07F1FC01C07001C07001C07001C07001C07001C07001C07001FFF001FFF001FFF
+001C07001C07001C07001C07001C07001C07001C07001C07001C07007F1FC0FFBFE07F1F
+C013197F9816>72 D<FFFEFFFEFFFE038003800380038003800380038003800380038003
+8003800380038003800380038003800380FFFEFFFEFFFE0F197D9816>I<7F0FE0FF8FF0
+7F0FE01C07801C0F001C0E001C1C001C3C001C78001CF0001CE0001DF0001FF0001FF800
+1F38001E1C001C1C001C0E001C0E001C07001C07001C03807F07E0FF8FF07F07E0141980
+9816>75 D<7E1FC0FF3FE07F1FC01D07001D87001D87001D87001DC7001DC7001CC7001C
+C7001CE7001CE7001CE7001C67001C67001C77001C77001C37001C37001C37001C17007F
+1F00FF9F007F0F0013197F9816>78 D<7FF800FFFE007FFF001C0F801C03801C03C01C01
+C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FF8001C00001C00001C00001C00
+001C00001C00001C00007F0000FF80007F000012197F9816>80 D<7FE000FFF8007FFC00
+1C1E001C0F001C07001C07001C07001C07001C0F001C1E001FFC001FF8001FFC001C1C00
+1C0E001C0E001C0E001C0E001C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>
+82 D<07E3001FFF003FFF00781F00F00700E00700E00700E00000F000007800003F8000
+1FF00007FC0000FE00000F00000700000380000380600380E00380E00700F80F00FFFE00
+FFFC00C7F00011197E9816>I<7FFFE0FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0E0E0E000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0
+0000E00000E00007FC000FFE0007FC0013197F9816>I<FC07E0FE0FE0FC07E07001C070
+01C07001C030018038038038038038038038E38039F38039F38039B38019B30019B30019
+B30019B30019B30019B3001913001B1B000F1E000F1E000E0E0013197F9816>87
+D<7F1F807F3F807F1F800E1E000E1C00073C0007380003B80003F00001F00001E00000E0
+0001E00001F00003F00003B80007B800071C00071C000E0E000E0E001C07007F1FC0FF1F
+E07F1FC013197F9816>I<FFF0FFF0FFF0E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF0FF
+F0FFF00C20789C16>91 D<C00000E00000E000007000007000003800003800001C00001C
+00000E00000E000007000007000003800003800001C00001C00000E00000E00000700000
+7000003800003800001C00001C00000E00000E0000070000070000038000038000018011
+207E9C16>I<FFF0FFF0FFF0007000700070007000700070007000700070007000700070
+00700070007000700070007000700070007000700070007000700070FFF0FFF0FFF00C20
+7F9C16>I<03000F803FE0FDF8F07840100D067C9816>I<FFFF80FFFF80FFFF8011037E7E
+16>I<081C3C7870E0E0E0E0F0F87830060D789B16>I<1FE0003FF0007FF800783C00300E
+00000E00000E0003FE001FFE003E0E00700E00E00E00E00E00E00E00783E007FFFE03FE7
+E00F83E013127E9116>I<7E0000FE00007E00000E00000E00000E00000E00000E3E000E
+FF000FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E00F
+01E00F83C00FFF800EFF00063C001419809816>I<03F80FFC1FFE3C1E780C7000E000E0
+00E000E000E000F000700778073E0E1FFC0FF803F010127D9116>I<003F00007F00003F
+0000070000070000070000070003C7000FF7001FFF003C1F00780F00700700E00700E007
+00E00700E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E014197F9816
+>I<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC
+03F010127D9116>I<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00
+FFFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C0003FFE007FFF003FFE0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E
+00380E00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF
+807803C0E000E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116
+>I<7E0000FE00007E00000E00000E00000E00000E00000E3C000EFE000FFF000F87800F
+03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FF
+E7F87FC7F01519809816>I<018003C003C0018000000000000000007FC07FC07FC001C0
+01C001C001C001C001C001C001C001C001C001C001C07FFFFFFF7FFF101A7D9916>I<00
+3000780078003000000000000000001FF81FF81FF8003800380038003800380038003800
+38003800380038003800380038003800380038003800386070F0F0FFE07FC03F800D237E
+9916>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F
+000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87
+F0FFCFF07F87F01419809816>I<FFC000FFC000FFC00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C000FFFF80FFFF80FFFF8011197E9816>I<F9C380FFEFC0FFFFE03C78E0
+3C78E03870E03870E03870E03870E03870E03870E03870E03870E03870E03870E0FE7CF8
+FE7CF8FE3C781512809116>I<7E3C00FEFE007FFF000F87800F03800E03800E03800E03
+800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F01512809116
+>I<03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F0
+0780700700780F003C1E001FFC000FF80003E00011127E9116>I<7E3E00FEFF007FFF80
+0F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F83C0
+0FFF800EFF000E3C000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000
+141B809116>I<07C7000FE7001FF7003C1F00700F00700F00E00700E00700E00700E007
+00E00700E00700700F00700F003C3F003FF7001FE70007C7000007000007000007000007
+00000700000700003FE0007FF0003FE0141B7E9116>I<FF0FC0FF3FE0FF7FE007F04007
+C000078000078000070000070000070000070000070000070000070000070000FFFC00FF
+FC00FFFC0013127F9116>I<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600E
+E00EF00EF81EFFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007FFF
+00FFFF00FFFF000700000700000700000700000700000700000700000701000703800703
+8007038007870003FE0001FC0000F80011177F9616>I<7E1F80FE3F807E1F800E03800E
+03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E0F800FFFF007
+FBF803E3F01512809116>I<7F1FC0FF1FE07F1FC01C07001E0F000E0E000E0E000E0E00
+071C00071C00071C00071C0003B80003B80003B80001F00001F00000E00013127F9116>
+I<FF1FE0FFBFE0FF1FE038038038038038038038038038E38019F30019F30019B3001DB7
+001DB7001DB7001DB7000F1E000F1E000F1E0013127F9116>I<7F1FC07F3FC07F1FC00F
+1C00073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F
+1FC0FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00
+070E00071C00071C00039C00039C0003980001B80001B80000F00000F00000F00000E000
+00E00000E00001C00079C0007BC0007F80003F00003C0000131B7F9116>I<3FFFC07FFF
+C07FFFC0700780700F00701E00003C0000780001F00003E0000780000F00001E01C03C01
+C07801C0FFFFC0FFFFC0FFFFC012127F9116>I<001F80007F8000FF8001E00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00003C0007F8000FF0000FF00007F
+800003C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000
+FF80007F80001F8011207E9C16>I<7C0000FF0000FF800003C00001C00001C00001C000
+01C00001C00001C00001C00001C00001C00001E00000FF00007F80007F8000FF0001E000
+01C00001C00001C00001C00001C00001C00001C00001C00001C00003C000FF8000FF0000
+7C000011207E9C16>125 D E /Ft 1 35 df<07801FE03040400040003E003E00400080
+008000C0807F803E000B0D7F8C10>34 D E /Fu 1 44 df<006000006000006000006000
+006000006000006000006000006000006000FFFFF0FFFFF0006000006000006000006000
+00600000600000600000600000600000600014167E9119>43 D E
+/Fv 38 122 df<00003FE00000E010000180380003807800030078000700300007000000
+07000000070000000E0000000E0000000E000000FFFFE0000E00E0001C01C0001C01C000
+1C01C0001C01C0001C038000380380003803800038038000380700003807000070070000
+70071000700E2000700E2000700E2000E00E2000E0064000E0038000E0000000C0000001
+C0000001C000003180000079800000F3000000620000003C0000001D29829F1A>12
+D<060F0E1C386040800808709F17>19 D<7FF0FFE07FE00C037D8A10>45
+D<70F8F8F0E005057B840E>I<070F1F1F0E0000000000000000000070F8F8F0E008147B
+930E>58 D<00000200000006000000060000000E0000001E0000001E0000003F0000002F
+0000004F0000004F0000008F0000010F0000010F0000020F0000020F0000040F00000C0F
+0000080F0000100F0000100F0000200F80003FFF800040078000C0078000800780010007
+80010007800200078002000780060007801E000F80FF807FF81D207E9F22>65
+D<0000FE0200078186001C004C0038003C0060003C00C0001C01C0001803800018070000
+180F0000181E0000101E0000103C0000003C000000780000007800000078000000780000
+00F0000000F0000000F0000000F0000000F0000080700000807000008070000100380001
+0038000200180004000C001800060020000381C00000FE00001F217A9F21>67
+D<01FFFF80001E00E0001E0070001E0038001E001C003C001C003C000E003C000E003C00
+0E0078000E0078000E0078000E0078000E00F0001E00F0001E00F0001E00F0001E01E000
+3C01E0003C01E0003C01E0007803C0007003C0007003C000E003C001C0078001C0078003
+8007800E0007801C000F007000FFFFC0001F1F7D9E22>I<0000FC040007030C001C0098
+0030007800E0007801C000380380003003800030070000300E0000301E0000201E000020
+3C0000003C00000078000000780000007800000078000000F0000000F000FFF0F0000780
+F0000780F0000F0070000F0070000F0070000F0070001E0038001E0018003E001C002E00
+0E00CC000383040000FC00001E217A9F23>71 D<01FFF0001F00001E00001E00001E0000
+3C00003C00003C00003C0000780000780000780000780000F00000F00000F00000F00001
+E00001E00001E00001E00003C00003C00003C00003C0000780000780000780000780000F
+8000FFF800141F7D9E12>73 D<01FE00007FC0001E0000FC00001E0000F8000017000178
+0000170001780000270002F00000270004F00000270004F00000270008F00000470009E0
+0000470011E00000470021E00000470021E00000870043C00000838043C00000838083C0
+0000838083C0000103810780000103820780000103820780000103840780000203840F00
+000203880F00000203900F00000203900F00000401E01E00000401E01E00000401C01E00
+000C01801E00001C01803E0000FF8103FFC0002A1F7D9E29>77 D<01FFFF80001E00E000
+1E0070001E0038001E003C003C003C003C003C003C003C003C003C007800780078007800
+7800F0007800E000F003C000F00F0000FFFC0000F0000001E0000001E0000001E0000001
+E0000003C0000003C0000003C0000003C00000078000000780000007800000078000000F
+800000FFF000001E1F7D9E1F>80 D<0007E040001C18C0003005800060038000C0038001
+C00180018001000380010003800100038001000380000003C0000003C0000003F8000001
+FF800001FFE000007FF000001FF0000001F8000000780000007800000038000000380020
+003800200038002000300060007000600060006000E0007000C000E8038000C606000081
+F800001A217D9F1A>83 D<0FFFFFF01E0780E0180780201007802020078020200F002060
+0F0020400F0020400F0020801E0040001E0000001E0000001E0000003C0000003C000000
+3C0000003C00000078000000780000007800000078000000F0000000F0000000F0000000
+F0000001E0000001E0000001E0000001E0000003E00000FFFF00001C1F789E21>I<7FFC
+1FF807C003C00780010007800100078001000F0002000F0002000F0002000F0002001E00
+04001E0004001E0004001E0004003C0008003C0008003C0008003C000800780010007800
+10007800100078001000F0002000F0002000F0002000F0004000F0004000700080007001
+000030020000380400000C18000007E000001D20779E22>I<FFF1FFC0FF801F003E001C
+001F003C0018000F003C0010000F003C0010000F003C0020000F003C0020000F003E0040
+000F003E00C0000F005E0080000F005E0100000F009E0100000F009E0200000F011E0200
+000F021E0400000F021E0400000F041E0800000F041E0800000F081E1000000F081E2000
+000F101E2000000F101E4000000F201E4000000F601E8000000FC01E80000007801F0000
+0007801F00000007001E00000007001E00000006000C0000000600080000000400080000
+002920779E2D>87 D<00F1800389C00707800E03801C03803C0380380700780700780700
+780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C40308C800F070013147C
+9317>97 D<07803F8007000700070007000E000E000E000E001C001C001CF01D0C3A0E3C
+0E380F380F700F700F700F700FE01EE01EE01EE01CE03CE038607060E031C01F0010207B
+9F15>I<007E0001C1000300800E07801E07801C07003C0200780000780000780000F000
+00F00000F00000F00000F0000070010070020030040018380007C00011147C9315>I<00
+00780003F80000700000700000700000700000E00000E00000E00000E00001C00001C000
+F1C00389C00707800E03801C03803C0380380700780700780700780700F00E00F00E00F0
+0E00F00E20F01C40F01C40703C40705C40308C800F070015207C9F17>I<007C01C20701
+0E011C013C013802780C7BF07C00F000F000F000F0007000700170023804183807C01014
+7C9315>I<00007800019C00033C00033C000718000700000700000E00000E00000E0000
+0E00000E0001FFE0001C00001C00001C00001C0000380000380000380000380000380000
+700000700000700000700000700000700000E00000E00000E00000E00000C00001C00001
+C0000180003180007B0000F300006600003C00001629829F0E>I<003C6000E27001C1E0
+0380E00700E00F00E00E01C01E01C01E01C01E01C03C03803C03803C03803C03803C0700
+3C07001C0F001C17000C2E0003CE00000E00000E00001C00001C00301C00783800F07000
+60E0003F8000141D7E9315>I<01E0000FE00001C00001C00001C00001C0000380000380
+00038000038000070000070000071E000763000E81800F01C00E01C00E01C01C03801C03
+801C03801C0380380700380700380700380E10700E20700C20701C20700C40E00CC06007
+0014207D9F17>I<00C001E001E001C000000000000000000000000000000E0033002300
+43804300470087000E000E000E001C001C001C003840388030807080310033001C000B1F
+7C9E0E>I<0001800003C00003C000038000000000000000000000000000000000000000
+0000003C00004600008700008700010700010700020E00000E00000E00000E00001C0000
+1C00001C00001C0000380000380000380000380000700000700000700000700000E00000
+E00030E00079C000F180006300003C00001228829E0E>I<03C01FC00380038003800380
+07000700070007000E000E000E000E001C001C001C001C00380038003800380070007000
+70007100E200E200E200E200640038000A207C9F0C>108 D<1C0F80F0002630C3180047
+40640C004780680E004700700E004700700E008E00E01C000E00E01C000E00E01C000E00
+E01C001C01C038001C01C038001C01C038001C01C0708038038071003803806100380380
+E10038038062007007006600300300380021147C9325>I<1C0F802630C0474060478060
+4700704700708E00E00E00E00E00E00E00E01C01C01C01C01C01C01C0384380388380308
+3807083803107003303001C016147C931A>I<007C0001C3000301800E01C01E01C01C01
+E03C01E07801E07801E07801E0F003C0F003C0F003C0F00780F00700700F00700E003018
+0018700007C00013147C9317>I<01C1E002621804741C04781C04701E04701E08E01E00
+E01E00E01E00E01E01C03C01C03C01C03C01C0380380780380700380E003C1C007238007
+1E000700000700000E00000E00000E00000E00001C00001C0000FFC000171D809317>I<
+1C1E002661004783804787804707804703008E00000E00000E00000E00001C00001C0000
+1C00001C000038000038000038000038000070000030000011147C9313>114
+D<00FC030206010C030C070C060C000F800FF007F803FC003E000E700EF00CF00CE00840
+1020601F8010147D9313>I<018001C0038003800380038007000700FFF007000E000E00
+0E000E001C001C001C001C003800380038003820704070407080708031001E000C1C7C9B
+0F>I<0E00C03300E02301C04381C04301C04701C08703800E03800E03800E03801C0700
+1C07001C07001C07101C0E20180E20180E201C1E200C264007C38014147C9318>I<0E03
+803307802307C04383C04301C04700C08700800E00800E00800E00801C01001C01001C01
+001C02001C02001C04001C04001C08000E300003C00012147C9315>I<0E00C1C03300E3
+C02301C3E04381C1E04301C0E04701C060870380400E0380400E0380400E0380401C0700
+801C0700801C0700801C0701001C0701001C0602001C0F02000C0F04000E13080003E1F0
+001B147C931E>I<0E00C03300E02301C04381C04301C04701C08703800E03800E03800E
+03801C07001C07001C07001C07001C0E00180E00180E001C1E000C3C0007DC00001C0000
+1C00003800F03800F07000E06000C0C0004380003E0000131D7C9316>121
+D E /Fw 1 98 df<001800001800001800003C00003C00004E00004E00004E0000870000
+87000187800103800103800201C00201C003FFC00400E00400E00800700800701800703C
+0078FE01FF18177F961C>97 D E /Fx 21 122 df<FEFE07027E850B>45
+D<0FFF000301800300C00600600600600600200600200C00600C00600C00600C00401800
+C0180180180100180600301C00FFF00013117E9016>68 D<00F8800305800C0380180100
+300100600100600000C00000C00000C03F80C00600C00C00C00C00400C00600C00303800
+0FC80011117C9016>71 D<0FC1F80300C00301800602000604000608000620000C60000C
+B0000E30000C1000181800181800180C00180C00300600FC1F8015117E9016>75
+D<3FFF20C140C14181818181810180030003000300030006000600060006000C007F8010
+117B9015>84 D<0E801180318061806180C300C300C320C320474039800B0B7D8A0F>97
+D<01E00060006000C000C000C00EC01180318061806180C300C300C320C320474039800B
+117D900F>100 D<07001880308060807F00C000C000C000404061801E000A0B7D8A0E>I<
+07A00CE018603060306060C060C060C061C023801D80018001804300C6007C000B107E8A
+0E>103 D<3C000C000C001800180018001F8038C030C030C030C06180618061906310C3
+20C1C00C117E900F>I<080800000000705098B030606068C8D06005117D9009>I<781818
+3030303060606060C0C0D0D0D06005117D9008>108 D<71E7805A38C09C30C09830C018
+30C030618030618030619030631060C32060C1C0140B7D8A18>I<73805CC098C098C018
+C03180318031903310632061C00C0B7D8A10>I<070018C0304060606060C0C0C0C0C0C0
+418063003C000B0B7D8A0F>I<1CE017302610261806180C300C300C300C601CC01B8018
+00180030003000FC000D107F8A0F>I<77005C8099809800180030003000300030006000
+6000090B7D8A0C>114 D<1E3163607C3E0686C68C78080B7D8A0C>I<08181818FE303030
+30606064646830070F7D8E0A>I<384048C08CC098C018C0318031803190319033A01CC0
+0C0B7D8A10>I<384048C08CC098C018C0318031803180318033001F0003004600C6008C
+0070000A107D8A0E>121 D E /Fy 21 118 df<6080F180F300F300F300F60066000600
+0C000C000C00180019801BC033C033C033C063C021800A137F900D>37
+D<FFC0FFC060C060C0600066007E007E0066006000600060006000F800F8000A0F7F8E0D
+>70 D<FF00FF8061C060C060C060C061C07F807F006000600060006000F000F0000A0F7F
+8E0D>80 D<3F807F80C180C180C000E0007C001F00038000C000C040C0C180FF80FE000A
+0F7F8E0D>83 D<7FC0FFC0CCC0CCC00C000C000C000C000C000C000C000C000C003F003F
+000A0F7F8E0D>I<3C007E00030003003F007F00C300C300C3007FE03DE00B0B7F8A0D>
+97 D<F000F0003000300037003F8038C03060306030603060306038C03F8017000B0F80
+8E0D>I<1E3F60C0C0C0C0C3633E1C080B7E8A0D>I<1C003E006300C180C180FF80FF80C1
+8061803F001E00090B7F8A0D>101 D<01C003E0060006007FC0FFC00600060006000600
+0600060006003FC03FC00B0F808E0D>I<1DC03FE063006300630063007E007C0060003F
+007F8060C0C0C0C0C0C0C061803F001E000B127F8A0D>I<F000F0003000300037003F80
+38C030C030C030C030C030C030C0FCF0FCF00C0F808E0D>I<08001C000800000000007C
+007C000C000C000C000C000C000C000C00FF80FF8009107E8F0D>I<FC00FC000C000C00
+0C000C000C000C000C000C000C000C000C00FFC0FFC00A0F7F8E0D>108
+D<FDC0FFE07760666066606660666066606660F770F7700C0B808A0D>I<3C7E66C3C3C3
+C3C3667E3C080B7E8A0D>111 D<F700FF8038C03060306030603060306038C03F803700
+3000300030003000FC00FC000B11808A0D>I<F780FFC038003800300030003000300030
+00FE00FE000A0B7E8A0D>114 D<3E7EC6C0783E0743C3FEFC080B7E8A0D>I<0800180018
+007F80FF8018001800180018001980198019800F000600090E7F8D0D>I<F3C0F3C030C0
+30C030C030C030C030C030C01FF00FF00C0B808A0D>I E /Fz 50
+125 df<00FC000182000703000607000E02000E00000E00000E00000E00000E0000FFFF
+000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E07
+000E07000E07007F0FE0131A809915>12 D<FFC0FFC00A0280880D>45
+D<60F0F06004047D830B>I<078018603030303060186018E01CE01CE01CE01CE01CE01C
+E01CE01CE01CE01CE01CE01C6018601870383030186007800E187E9713>48
+D<03000700FF000700070007000700070007000700070007000700070007000700070007
+0007000700070007000700FFF00C187D9713>I<0F80106020304038803CC01CE01C401C
+003C003800380070006000C001800100020004040804100430083FF87FF8FFF80E187E97
+13>I<0F8010E02070607870382038007800700070006000C00F8000E000700038003C00
+3CE03CE03CC03C4038407030E00F800E187E9713>I<00300030007000F000F001700370
+027004700C7008701070307020704070C070FFFF00700070007000700070007007FF1018
+7F9713>I<30183FF03FE03FC02000200020002000200027C03860203000380018001C00
+1C401CE01CE01C80184038403030E00F800E187E9713>I<01E006100C18183830383000
+70006000E000E7C0E860F030F018E018E01CE01CE01C601C601C701830183030186007C0
+0E187E9713>I<40007FFE7FFC7FFC400880108010802000400040008001800180010003
+0003000300030007000700070007000700070002000F197E9813>I<0780186030302018
+60186018601870103C303E600F8007C019F030F86038401CC00CC00CC00CC00C60082010
+18600FC00E187E9713>I<07801860303070306018E018E018E01CE01CE01C601C603C30
+3C185C0F9C001C00180018003870307060604021801F000E187E9713>I<60F0F0600000
+00000000000060F0F06004107D8F0B>I<000C0000000C0000000C0000001E0000001E00
+00003F000000270000002700000043800000438000004380000081C0000081C0000081C0
+000100E0000100E00001FFE000020070000200700006007800040038000400380008001C
+0008001C001C001E00FF00FFC01A1A7F991D>65 D<003F0201C0C603002E0E001E1C000E
+1C0006380006780002700002700002F00000F00000F00000F00000F00000F00000700002
+7000027800023800041C00041C00080E000803003001C0C0003F00171A7E991C>67
+D<FFFF000E01C00E00E00E00300E00380E001C0E001C0E000E0E000E0E000F0E000F0E00
+0F0E000F0E000F0E000F0E000F0E000F0E000E0E000E0E001E0E001C0E00380E00380E00
+700E01C0FFFF00181A7E991D>I<FFFFF00E00700E00300E00100E00180E00080E00080E
+00080E04000E04000E04000E0C000FFC000E0C000E04000E04000E04000E00040E00040E
+00080E00080E00080E00180E00380E0070FFFFF0161A7E991A>I<FFFFE00E00E00E0060
+0E00200E00300E00100E00100E00100E04000E04000E04000E0C000FFC000E0C000E0400
+0E04000E04000E00000E00000E00000E00000E00000E00000E00000E0000FFF000141A7E
+9919>I<FFE00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E00FFE00B1A7F990E>73
+D<FFF0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00000E00200E00200E00200E00600E00400E00400E00
+C00E03C0FFFFC0131A7E9918>76 D<FF0003FC0F0003C00F0003C00B8005C00B8005C00B
+8005C009C009C009C009C009C009C008E011C008E011C008E011C0087021C0087021C008
+3841C0083841C0083841C0081C81C0081C81C0081C81C0080F01C0080F01C0080F01C008
+0601C01C0601C0FF861FFC1E1A7E9923>I<FE01FF0F00380F00100B80100B801009C010
+08E01008E010087010087010083810081C10081C10080E10080E10080710080390080390
+0801D00801D00800F00800700800700800301C0030FF8010181A7E991D>I<FFFF000E03
+C00E00E00E00700E00700E00780E00780E00780E00780E00700E00700E00E00E03C00FFF
+000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE0
+00151A7E991A>80 D<FFFC00000E0780000E01C0000E00E0000E00F0000E00F0000E00F0
+000E00F0000E00F0000E00E0000E01C0000E0780000FFC00000E0600000E0300000E0180
+000E01C0000E01C0000E01C0000E01E0000E01E0000E01E0000E01E0800E00F0800E0071
+00FFE03E00191A7E991C>82 D<0FC21836200E6006C006C002C002C002E00070007E003F
+E01FF807FC003E000E00070003800380038003C002C006E004D81887E0101A7E9915>I<
+7FFFFF00701C0700401C0100401C0100C01C0180801C0080801C0080801C0080001C0000
+001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000
+001C0000001C0000001C0000001C0000001C0000001C0000001C000003FFE000191A7F99
+1C>I<3F8070C070E020700070007007F01C7030707070E070E071E071E0F171FB1E3C10
+107E8F13>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00
+001CF8001F0E001E07001C03801C01801C01C01C01C01C01C01C01C01C01C01C01C01C03
+801C03001E07001B0C0010F000121A7F9915>I<07F80C1C381C30087000E000E000E000
+E000E000E0007000300438080C1807E00E107F8F11>I<007E00000E00000E00000E0000
+0E00000E00000E00000E00000E00000E0003CE000C3E00380E00300E00700E00E00E00E0
+0E00E00E00E00E00E00E00E00E00600E00700E00381E001C2E0007CFC0121A7F9915>I<
+07C01C3030187018600CE00CFFFCE000E000E000E0006000300438080C1807E00E107F8F
+11>I<01F0031807380E100E000E000E000E000E000E00FFC00E000E000E000E000E000E
+000E000E000E000E000E000E000E000E007FE00D1A80990C>I<0FCE1873303070387038
+70387038303018602FC02000600070003FF03FFC1FFE600FC003C003C003C0036006381C
+07E010187F8F13>I<FC00001C00001C00001C00001C00001C00001C00001C00001C0000
+1C00001CF8001D0C001E0E001E0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00
+1C0E001C0E001C0E001C0E00FF9FC0121A7F9915>I<18003C003C001800000000000000
+000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+FF80091A80990A>I<FC001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C00FF80091A80990A>108
+D<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701C01C0701C01C0701C01C0701
+C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D107F8F20>I<
+FCF8001D0C001E0E001E0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00
+1C0E001C0E001C0E00FF9FC012107F8F15>I<07E01C38300C700E6006E007E007E007E0
+07E007E0076006700E381C1C3807E010107F8F13>I<FCF8001F0E001E07001C03801C03
+801C01C01C01C01C01C01C01C01C01C01C01C01C03801C03001E07001F0C001CF0001C00
+001C00001C00001C00001C00001C0000FF800012177F8F15>I<03C2000C2600381E0030
+0E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00700E00381E001C2E0007
+CE00000E00000E00000E00000E00000E00000E00007FC012177F8F14>I<FCE01D701E70
+1E201C001C001C001C001C001C001C001C001C001C001C00FFC00C107F8F0F>I<1F2060
+E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F800C107F8F0F>I<
+0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C001C001C201C20
+1C201C201C200E4003800B177F960F>I<FC7E001C0E001C0E001C0E001C0E001C0E001C
+0E001C0E001C0E001C0E001C0E001C0E001C0E001C1E000C2E0007CFC012107F8F15>I<
+FF1F803C06001C04001C04001E0C000E08000E080007100007100007900003A00003A000
+01C00001C00001C00000800011107F8F14>I<FF3F803C1C001C18000E10000720000760
+0003C00001C00001E00003E000027000043800083800181C00381E00FC3FC012107F8F14
+>120 D<FF1F803C06001C04001C04001E0C000E08000E080007100007100007900003A0
+0003A00001C00001C00001C000008000008000010000010000E10000E20000E400007800
+0011177F8F14>I<FFFFFFFFF82501808926>124 D E /FA 6 84
+df<01800180018001800180C183F18F399C0FF003C003C00FF0399CF18FC18301800180
+01800180018010147D9417>3 D<0001FE00000007FF8000001E01E000007800780000E0
+001C000180000600030000030006000001800C000000C00C000000C01800000060300000
+003030000000303000000030600000001860000000186000000018C00000000CC0000000
+0CC00000000CC00000000CC00000000CC00000000CC00000000CC00000000CC00000000C
+60000000186000000018600000001830000000303000000030300000003018000000600C
+000000C00C000000C006000001800300000300018000060000E0001C000078007800001E
+01E0000007FF80000001FE0000262B7DA02D>13 D<03C00FF01FF83FFC7FFE7FFEFFFFFF
+FFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C010127D9317>15
+D<00000010000000003000000000F000000000F000000000F000000001F000000001F000
+000002F000000002F000000004F00000000CF000000008F000000018F000000010F00000
+0020F000000020F000000040F8000000C0F8000000807800000180780000030078000002
+0078000006007800000DFFF800000FFFF800001800780000300078000060007C0040E000
+7C00C0C0003C00E380003C00FF00003E00FE00003F80FE00001F00780000000021237FA0
+24>65 D<0000300000000000F00000010000F00000030000F00000070001F000000F0001
+F800000E0001F800001E00017800003E00017800007E0002780000FE0002780001DE0002
+7C00019C00027C00031C00043C00063C00043C000C3C00043E001C3C00083E00383C0008
+1E00703C00081E00603C00101E00C03800101F01803800101F03007800200F0700780020
+0F8E007800200F9C0078004007F80078004007F00078008003E00078018003C000786100
+018000787F000000007C7E000000007FFC000000003C7C000000000030227F9F37>77
+D<00007F000001FFC000060FE0000C03E0003801E0003001E0007001E000F0018000F000
+0000F0000000F8000000FC0000007E0000003F0000001FC000000FF0000003F8000000FC
+0000007E0000003F000C001F0018000F0070000F0070000F00F0000E00F0000E00F0001C
+00F8001800FC0030007E0060003F8180001FFE000007F800001B217F9F1C>83
+D E /FB 60 126 df<4010E038F078E038E038E038E038E038E038E038E038E038E03860
+300D0E7B9C18>34 D<00C00001C00001C00001C00003F0000FFC003FFE007DCF0071C700
+E1C380E1C780E1C780E1C780F1C00079C0003DC0001FE0000FF80003FC0001DE0001CF00
+01C70061C380F1C380F1C380E1C380E1C70071C70079DE003FFE001FF80007E00001C000
+01C00001C00000C00011247D9F18>36 D<3803007C07807C0780EE0F80EE0F00EE0F00EE
+1F00EE1E00EE1E00EE3E007C3C007C3C00387C0000780000780000F80000F00001F00001
+E00001E00003E00003C00003C00007C0000783800787C00F87C00F0EE00F0EE01F0EE01E
+0EE01E0EE03E0EE03C07C03C07C018038013247E9F18>I<01C00001C00001C00001C000
+C1C180F1C780F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C780C1C180
+01C00001C00001C00001C00011147D9718>42 D<7FFF00FFFF80FFFF807FFF0011047D8F
+18>45 D<3078FCFC78300606778518>I<000300000780000780000F80000F00001F0000
+1E00001E00003E00003C00007C0000780000780000F80000F00001F00001E00003E00003
+C00003C00007C0000780000F80000F00000F00001F00001E00003E00003C00003C00007C
+0000780000F80000F00000F0000060000011247D9F18>I<01F00007FC000FFE001F1F00
+1C07003803807803C07001C07001C0E000E0E000E0E000E0E000E0E000E0E000E0E000E0
+E000E0E000E0F001E07001C07001C07803C03803801C07001F1F000FFE0007FC0001F000
+131C7E9B18>I<01800380038007800F803F80FF80FB8043800380038003800380038003
+8003800380038003800380038003800380038003807FFCFFFE7FFC0F1C7B9B18>I<03F0
+000FFE003FFF007C0F807003C0E001C0F000E0F000E06000E00000E00000E00001C00001
+C00003C0000780000F00001E00003C0000780000F00001E00007C0000F80001E00E03C00
+E07FFFE0FFFFE07FFFE0131C7E9B18>I<07F8001FFE003FFF007807807803C07801C030
+01C00001C00003C0000380000F0003FF0003FE0003FF000007800003C00001C00000E000
+00E00000E0F000E0F000E0F001C0F003C07C07803FFF001FFE0003F800131C7E9B18>I<
+001F00003F0000770000770000E70001E70001C7000387000787000707000E07001E0700
+3C0700380700780700F00700FFFFF8FFFFF8FFFFF8000700000700000700000700000700
+000700007FF000FFF8007FF0151C7F9B18>I<1FFF803FFF803FFF803800003800003800
+003800003800003800003800003800003BF8003FFE003FFF003C07801803C00001C00000
+E00000E06000E0F000E0F000E0E001C07003C07C0F803FFF001FFC0003F000131C7E9B18
+>I<7FFFC0FFFFE0FFFFE0FFFFE0000000000000000000000000FFFFE0FFFFE0FFFFE07F
+FFC0130C7E9318>61 D<007C0001FE0007FF000F87801E03C03C1DC0387FC070FFE071E3
+E071C1E0E1C1E0E380E0E380E0E380E0E380E0E380E0E380E0E1C1C071C1C071E3C070FF
+80387F003C1C001E00E00F83E007FFC001FF80007E00131C7E9B18>64
+D<FFFC00FFFF00FFFF801C03C01C01C01C00E01C00E01C00E01C00E01C01E01C01C01C07
+C01FFF801FFF001FFFC01C03C01C00E01C00F01C00701C00701C00701C00701C00F01C00
+E01C03E0FFFFC0FFFF80FFFE00141C7F9B18>66 D<7FF800FFFE007FFF001C0F801C03C0
+1C03C01C01E01C00E01C00E01C00F01C00701C00701C00701C00701C00701C00701C0070
+1C00701C00F01C00E01C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F
+9B18>68 D<FFFFF0FFFFF0FFFFF01C00701C00701C00701C00701C00001C00001C0E001C
+0E001C0E001FFE001FFE001FFE001C0E001C0E001C0E001C00001C00001C00381C00381C
+00381C00381C0038FFFFF8FFFFF8FFFFF8151C7F9B18>I<FFFFE0FFFFE0FFFFE01C00E0
+1C00E01C00E01C00E01C00001C00001C1C001C1C001C1C001FFC001FFC001FFC001C1C00
+1C1C001C1C001C00001C00001C00001C00001C00001C00001C0000FFC000FFC000FFC000
+131C7E9B18>I<01F1C003FDC00FFFC01F0FC01C03C03803C03801C07001C07001C07000
+00E00000E00000E00000E00000E00000E00FF0E01FF0E00FF07001C07001C07003C03803
+C03803C01C07C01F0FC00FFFC003FDC001F1C0141C7E9B18>I<7FFF00FFFF807FFF0001
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF00FFFF807F
+FF00111C7D9B18>73 D<7F07F0FF87F87F07F01C03C01C07801C07001C0E001C1E001C3C
+001C38001C70001CF0001DF0001DF0001FB8001FB8001F1C001E1C001C0E001C0E001C07
+001C07001C03801C03801C01C07F03F0FF87F87F03F0151C7F9B18>75
+D<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B8EE03B8EE0398CE0398CE039DC
+E039DCE039DCE038D8E038D8E038F8E03870E03870E03800E03800E03800E03800E03800
+E03800E0FE03F8FE03F8FE03F8151C7F9B18>77 D<FFFE00FFFF80FFFFC01C03C01C01E0
+1C00E01C00701C00701C00701C00701C00701C00E01C01E01C03C01FFFC01FFF801FFE00
+1C00001C00001C00001C00001C00001C00001C00001C0000FF8000FF8000FF8000141C7F
+9B18>80 D<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C
+03801C0F801FFF001FFE001FFE001C0F001C07001C03801C03801C03801C03801C03801C
+039C1C039C1C039C7F01F8FF81F87F00F0161C7F9B18>82 D<03F3801FFF803FFF807C0F
+80700780E00380E00380E00380E000007000007800003F00001FF00007FE0000FF00000F
+800003C00001C00000E00000E06000E0E000E0E001E0F001C0F80780FFFF80FFFE00E7F8
+00131C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038E0703800700000700000
+700000700000700000700000700000700000700000700000700000700000700000700000
+700000700000700000700007FF0007FF0007FF00151C7F9B18>I<7F8FE07F9FE07F8FE0
+0E07000F0700070E00078E00039C0003DC0001F80001F80000F00000F00000700000F000
+00F80001F80001DC00039E00038E00070F000707000E07800E03801E03C07F07F0FF8FF8
+7F07F0151C7F9B18>88 D<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000FFF8FFF8FFF80D24779F18>91 D<600000F00000F00000F800007800007C00
+003C00003C00003E00001E00001F00000F00000F00000F800007800007C00003C00003C0
+0003E00001E00001F00000F00000F800007800007800007C00003C00003E00001E00001E
+00001F00000F00000F8000078000078000030011247D9F18>I<FFF8FFF8FFF800380038
+003800380038003800380038003800380038003800380038003800380038003800380038
+0038003800380038003800380038003800380038FFF8FFF8FFF80D247F9F18>I<018007
+C01FF07EFCF83EE00E0F067C9B18>I<1FE0003FF8007FFC00781E00300E000007000007
+0000FF0007FF001FFF007F0700780700E00700E00700E00700F00F00781F003FFFF01FFB
+F007E1F014147D9318>97 D<7E0000FE00007E00000E00000E00000E00000E00000E0000
+0E3E000EFF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E0038
+0E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF
+001FFF803E0780380300700000700000E00000E00000E00000E00000E00000E000007000
+007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80003F80001F8000
+038000038000038000038000038003E3800FFB801FFF803C1F80380F80700780700380E0
+0380E00380E00380E00380E00380E00380700780700780380F803C1F801FFFF00FFBF803
+E3F0151C7E9B18>I<01F00007FC001FFE003E0F00380780700380700380E001C0E001C0
+FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E03C01FFF8007FF0001FC0012147D
+9318>I<001F80007FC000FFE000E1E001C0C001C00001C00001C0007FFFC0FFFFC0FFFF
+C001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E301C
+0E003807003807003807003807003807001C0E001E1E001FFC001FF80039E0003800001C
+00001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E000387800F07E03F01F
+FFC00FFF8001FC00151F7F9318>I<7E0000FE00007E00000E00000E00000E00000E0000
+0E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<0380
+0007C00007C00007C0000380000000000000000000000000007FC000FFC0007FC00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C000FFFF00FFFF80FFFF00111D7C9C18>I<FE0000FE0000FE00000E00000E00000E
+00000E00000E00000E3FF00E7FF00E3FF00E07800E0F000E1E000E3C000E78000EF0000F
+F8000FFC000F9C000F0E000E0F000E07000E03800E03C0FFC7F8FFC7F8FFC7F8151C7F9B
+18>107 D<7FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7CE0E000FFFBF8007FFFF800
+1F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C00
+1C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F0019148193
+18>I<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0
+000FFE001FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0F001
+E07001C07803C03C07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF807F
+FFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F
+00700F80E00FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E00000E
+00007FC000FFE0007FC000151E809318>I<01E38007FB801FFF803E1F80380F80700780
+700780E00380E00380E00380E00380E00380E00380700780700780380F803C1F801FFF80
+0FFB8003E380000380000380000380000380000380000380000380003FF8003FF8003FF8
+151E7E9318>I<7F87E0FF9FF07FBFF803F87803F03003E00003C00003C0000380000380
+000380000380000380000380000380000380000380007FFE00FFFF007FFE0015147F9318
+>I<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC0003FE0000
+1F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<018000
+0380000380000380000380007FFFC0FFFFC0FFFFC0038000038000038000038000038000
+0380000380000380000380000380400380E00380E00380E001C1C001FFC000FF80003E00
+13197F9818>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC1714809318
+>I<7F8FF0FF8FF87F8FF01E03C00E03800E03800E0380070700070700070700038E0003
+8E00038E00038E0001DC0001DC0001DC0000F80000F80000700015147F9318>I<FF8FF8
+FF8FF8FF8FF83800E03800E03800E01C01C01C01C01C71C01CF9C01CF9C01CD9C01CD9C0
+0DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318>I<7F8FF07F9FF07F8F
+F0070700078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E00038E
+000707000F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E01C00E
+03800E0380070380070700070700038700038600038E0001CE0001CE0000CC0000CC0000
+DC0000780000780000780000700000700000700000F00000E00079E0007BC0007F80003F
+00001E0000151E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00001E00
+003C0000F80001F00003C0000780000F00701E00703C0070780070FFFFF0FFFFF0FFFFF0
+14147F9318>I<0007E0001FE0007FE000780000E00000E00000E00000E00000E00000E0
+0000E00000E00000E00000E00000E00001E0007FC000FF8000FF80007FC00001E00000E0
+0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000007800007F
+E0001FE00007E013247E9F18>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0600424769F18>I<7C0000FF0000FFC00003C00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000F000007FC0
+003FE0003FE0007FC000F00000E00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00003C000FFC000FF00007C000013247E9F18>I
+E /FC 6 122 df<70F8F8F87005057C840D>58 D<70F8FCFC7404040408081010204006
+0E7C840D>I<00F1800389C00707800E03801C03803C0380380700780700780700780700
+F00E00F00E00F00E00F00E10F01C20F01C20703C20705C40308C400F078014147E9318>
+97 D<07803F8007000700070007000E000E000E000E001C001C001CF01D0C3A0E3C0E38
+0F380F700F700F700F700FE01EE01EE01EE01CE03CE038607060E031C01F0010207E9F14
+>I<03C1C00C62201034701038F02038F020386040700000700000700000700000E00000
+E00000E00000E02061C040F1C040F1C080E2C080446300383C0014147E931A>120
+D<0F00601180702180E021C0E041C0E04380E08381C00701C00701C00701C00E03800E03
+800E03800E03800E07000C07000C07000E0F00061E0003EE00000E00000E00001C007818
+0078380070700060600021C0001F0000141D7E9316>I E /FD 81
+128 df<001F83E000F06E3001C078780380F8780300F030070070000700700007007000
+07007000070070000700700007007000FFFFFF8007007000070070000700700007007000
+070070000700700007007000070070000700700007007000070070000700700007007000
+07007000070070000700700007007000070070007FE3FF001D20809F1B>11
+D<003F0000E0C001C0C00381E00701E00701E00700000700000700000700000700000700
+00FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700
+E00700E00700E00700E00700E00700E00700E00700E07FC3FE1720809F19>I<003FE000
+E0E001C1E00381E00700E00700E00700E00700E00700E00700E00700E00700E0FFFFE007
+00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007
+00E00700E00700E00700E00700E00700E07FE7FE1720809F19>I<001F81F80000F04F04
+0001C07C06000380F80F000300F00F000700F00F00070070000007007000000700700000
+070070000007007000000700700000FFFFFFFF0007007007000700700700070070070007
+007007000700700700070070070007007007000700700700070070070007007007000700
+700700070070070007007007000700700700070070070007007007000700700700070070
+07007FE3FE3FF02420809F26>I<7038F87CFC7EFC7E743A040204020402080408041008
+1008201040200F0E7E9F17>34 D<70F8FCFC74040404080810102040060E7C9F0D>39
+D<0020004000800100020006000C000C00180018003000300030007000600060006000E0
+00E000E000E000E000E000E000E000E000E000E000E00060006000600070003000300030
+00180018000C000C000600020001000080004000200B2E7DA112>I<8000400020001000
+08000C00060006000300030001800180018001C000C000C000C000E000E000E000E000E0
+00E000E000E000E000E000E000E000C000C000C001C00180018001800300030006000600
+0C00080010002000400080000B2E7DA112>I<0006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000FFFFFFF0FFFFFFF0000600000006000000060000000600000006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+0600001C207D9A23>43 D<70F8FCFC74040404080810102040060E7C840D>I<FFC0FFC0
+0A027F8A0F>I<70F8F8F87005057C840D>I<000100030003000600060006000C000C000C
+00180018001800300030003000600060006000C000C000C0018001800180030003000300
+0600060006000C000C000C00180018001800300030003000600060006000C000C000C000
+102D7DA117>I<03F0000E1C001C0E00180600380700700380700380700380700380F003
+C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003
+C07003807003807003807807803807001806001C0E000E1C0003F000121F7E9D17>I<01
+8003800F80F3800380038003800380038003800380038003800380038003800380038003
+8003800380038003800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C1C00
+100E00200700400780800780F007C0F803C0F803C0F803C02007C00007C0000780000780
+000F00000E00001C0000380000700000600000C0000180000300000600400C0040180040
+1000803FFF807FFF80FFFF80121E7E9D17>I<03F0000C1C00100E00200F00780F807807
+80780780380F80000F80000F00000F00000E00001C0000380003F000003C00000E00000F
+000007800007800007C02007C0F807C0F807C0F807C0F00780400780400F00200E001C3C
+0003F000121F7E9D17>I<000600000600000E00000E00001E00002E00002E00004E0000
+8E00008E00010E00020E00020E00040E00080E00080E00100E00200E00200E00400E00C0
+0E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0141E7F9D17>I<
+1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011F000
+161C00180E001007001007800003800003800003C00003C00003C07003C0F003C0F003C0
+E00380400380400700200600100E000C380003E000121F7E9D17>I<007C000182000701
+000E03800C07801C0780380300380000780000700000700000F1F000F21C00F40600F807
+00F80380F80380F003C0F003C0F003C0F003C0F003C07003C07003C07003803803803807
+001807000C0E00061C0001F000121F7E9D17>I<4000007FFFC07FFF807FFF8040010080
+020080020080040000080000080000100000200000200000400000400000C00000C00001
+C00001800003800003800003800003800007800007800007800007800007800007800007
+8000030000121F7D9D17>I<03F0000C0C00100600300300200180600180600180600180
+7001807803003E03003F06001FC8000FF00003F80007FC000C7E00103F00300F80600380
+4001C0C001C0C000C0C000C0C000C0C000806001802001001002000C0C0003F000121F7E
+9D17>I<03F0000E18001C0C00380600380700700700700380F00380F00380F003C0F003
+C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C00003800003800003
+80000700300700780600780E00700C002018001070000FC000121F7E9D17>I<70F8F8F8
+700000000000000000000070F8F8F87005147C930D>I<70F8F8F8700000000000000000
+000070F0F8F878080808101010202040051D7C930D>I<00010000000380000003800000
+0380000007C0000007C0000007C0000009E0000009E0000009E0000010F0000010F00000
+10F00000207800002078000020780000403C0000403C0000403C0000801E0000801E0000
+FFFE0001000F0001000F0001000F00020007800200078002000780040003C00E0003C01F
+0007E0FFC03FFE1F207F9F22>65 D<FFFFE0000F80380007801E0007801F0007800F0007
+800F8007800F8007800F8007800F8007800F8007800F0007801F0007801E0007803C0007
+FFF00007803C0007801E0007800F0007800F8007800780078007C0078007C0078007C007
+8007C0078007C00780078007800F8007800F0007801F000F803C00FFFFF0001A1F7E9E20
+>I<000FC040007030C001C009C0038005C0070003C00E0001C01E0000C01C0000C03C00
+00C07C0000407C00004078000040F8000000F8000000F8000000F8000000F8000000F800
+0000F8000000F8000000F8000000780000007C0000407C0000403C0000401C0000401E00
+00800E000080070001000380020001C0040000703800000FC0001A217D9F21>I<FFFFE0
+000F803C0007801E000780070007800380078003C0078001E0078001E0078001F0078000
+F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8078000F8078000
+F8078000F8078000F0078000F0078000F0078001E0078001E0078003C007800380078007
+0007800E000F803C00FFFFE0001D1F7E9E23>I<FFFFFF000F800F000780030007800300
+078001000780018007800080078000800780008007808080078080000780800007808000
+0781800007FF800007818000078080000780800007808000078080000780002007800020
+07800020078000400780004007800040078000C0078000C0078001800F800F80FFFFFF80
+1B1F7E9E1F>I<FFFFFF000F800F00078003000780030007800100078001800780008007
+8000800780008007800080078080000780800007808000078080000781800007FF800007
+818000078080000780800007808000078080000780000007800000078000000780000007
+8000000780000007800000078000000FC00000FFFE0000191F7E9E1E>I<000FE0200078
+186000E004E0038002E0070001E00F0000E01E0000601E0000603C0000603C0000207C00
+002078000020F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800
+7FFCF80003E0780001E07C0001E03C0001E03C0001E01E0001E01E0001E00F0001E00700
+01E0038002E000E0046000781820000FE0001E217D9F24>I<FFF8FFF80F800F8007800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F
+0007800F0007800F0007FFFF0007800F0007800F0007800F0007800F0007800F0007800F
+0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F000F800F
+80FFF8FFF81D1F7E9E22>I<FFFC0FC00780078007800780078007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800FC0
+FFFC0E1F7F9E10>I<0FFFC0007C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00003C00203C00F83C00F83C00F83C00F0380040780040700030E0000F800012207E
+9E17>I<FFFC0FFC0FC003E0078001800780010007800200078004000780080007801000
+078020000780400007808000078100000783000007878000078F80000793C0000791E000
+07A1E00007C0F0000780F0000780780007803C0007803C0007801E0007801E0007800F00
+0780078007800780078007C00FC007E0FFFC3FFC1E1F7E9E23>I<FFFE000FC000078000
+078000078000078000078000078000078000078000078000078000078000078000078000
+078000078000078000078000078000078002078002078002078002078006078004078004
+07800C07801C0F807CFFFFFC171F7E9E1C>I<FF80001FF80F80001F800780001F0005C0
+002F0005C0002F0005C0002F0004E0004F0004E0004F000470008F000470008F00047000
+8F000438010F000438010F000438010F00041C020F00041C020F00041C020F00040E040F
+00040E040F00040E040F000407080F000407080F000407080F000403900F000403900F00
+0401E00F000401E00F000401E00F000E00C00F001F00C01F80FFE0C1FFF8251F7E9E2A>
+I<FF803FF807C007C007C0038005E0010005E0010004F001000478010004780100043C01
+00043C0100041E0100040F0100040F010004078100040781000403C1000401E1000401E1
+000400F1000400F1000400790004003D0004003D0004001F0004001F0004000F00040007
+00040007000E0003001F000300FFE001001D1F7E9E22>I<001F800000F0F00001C03800
+07801E000F000F000E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0
+F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0
+780001E07C0003E07C0003E03C0003C03C0003C01E0007800E0007000F000F0007801E00
+01C0380000F0F000001F80001C217D9F23>I<FFFFE0000F80780007801C0007801E0007
+800F0007800F8007800F8007800F8007800F8007800F8007800F8007800F0007801E0007
+801C000780780007FFE00007800000078000000780000007800000078000000780000007
+8000000780000007800000078000000780000007800000078000000FC00000FFFC000019
+1F7E9E1F>I<FFFF80000F80F0000780780007803C0007801E0007801E0007801F000780
+1F0007801F0007801F0007801E0007801E0007803C00078078000780F00007FF80000781
+C0000780E0000780F0000780700007807800078078000780780007807C0007807C000780
+7C0007807C0407807E0407803E040FC01E08FFFC0F10000003E01E207E9E21>82
+D<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F000
+007800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001
+C08001C08001C08001C0C00180C00380E00300F00600CE0C0081F80012217D9F19>I<7F
+FFFFE0780F01E0600F0060400F0020400F0020C00F0030800F0010800F0010800F001080
+0F0010000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000001F800007FFFE001C1F7E9E21>I<FFFC3FF80FC007C0078003800780
+010007800100078001000780010007800100078001000780010007800100078001000780
+010007800100078001000780010007800100078001000780010007800100078001000780
+01000780010007800100038002000380020001C0020001C0040000E00800007018000038
+2000000FC0001D207E9E22>I<FFF003FE1F8000F80F0000600F80006007800040078000
+4003C0008003C0008003C0008001E0010001E0010001F0010000F0020000F0020000F806
+000078040000780400003C0800003C0800003C0800001E1000001E1000001F3000000F20
+00000F20000007C0000007C0000007C000000380000003800000038000000100001F207F
+9E22>I<FFF07FF81FF01F800FC007C00F00078003800F00078001000F0007C001000780
+07C00200078007C00200078007C0020003C009E0040003C009E0040003C009E0040003E0
+10F00C0001E010F0080001E010F0080001F02078080000F02078100000F02078100000F0
+403C10000078403C20000078403C20000078C03E2000003C801E4000003C801E4000003C
+801E4000001F000F8000001F000F8000001F000F8000001E00078000000E00070000000E
+00070000000C000300000004000200002C207F9E2F>I<7FF83FF80FE00FC007C0070003
+C0020001E0040001F00C0000F0080000781000007C1000003C2000003E4000001E400000
+0F8000000F8000000780000003C0000007E0000005E0000009F0000018F8000010780000
+207C0000603C0000401E0000801F0001800F0001000780020007C0070003C01F8007E0FF
+E01FFE1F1F7F9E22>I<FFF003FF1F8000F80F8000600780004007C0004003E0008001E0
+008001F0010000F0030000F80200007C0400003C0400003E0800001E0800001F1000000F
+B0000007A0000007C0000003C0000003C0000003C0000003C0000003C0000003C0000003
+C0000003C0000003C0000003C0000003C0000007C000007FFE00201F7F9E22>I<FEFEC0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0FEFE072D7CA10D>91 D<080410082010201040204020804080408040B85CFC7E
+FC7E7C3E381C0F0E7B9F17>I<FEFE060606060606060606060606060606060606060606
+0606060606060606060606060606060606060606FEFE072D7FA10D>I<1FE00030300078
+1800781C00300E00000E00000E00000E0000FE00078E001E0E00380E00780E00F00E10F0
+0E10F00E10F01E10781E103867200F83C014147E9317>97 D<0E0000FE00000E00000E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E3E000EC3800F01C00F00
+E00E00E00E00700E00700E00780E00780E00780E00780E00780E00780E00700E00700E00
+E00F00E00D01C00CC300083E0015207F9F19>I<03F80E0C1C1E381E380C70007000F000
+F000F000F000F000F00070007000380138011C020E0C03F010147E9314>I<000380003F
+8000038000038000038000038000038000038000038000038000038000038003E380061B
+801C0780380380380380700380700380F00380F00380F00380F00380F00380F003807003
+807003803803803807801C07800E1B8003E3F815207E9F19>I<03F0000E1C001C0E0038
+0700380700700700700380F00380F00380FFFF80F00000F00000F0000070000070000038
+00801800800C010007060001F80011147F9314>I<007C00C6018F038F07060700070007
+000700070007000700FFF007000700070007000700070007000700070007000700070007
+00070007000700070007007FF01020809F0E>I<0000E003E3300E3C301C1C30380E0078
+0F00780F00780F00780F00780F00380E001C1C001E380033E00020000020000030000030
+00003FFE001FFF800FFFC03001E0600070C00030C00030C00030C000306000603000C01C
+038003FC00141F7F9417>I<0E0000FE00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E00000E00000E3E000E43000E81800F01C00F01C00E01C00E01C00E01C0
+0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC
+16207F9F19>I<1C001E003E001E001C000000000000000000000000000E007E000E000E
+000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FFC00A1F80
+9E0C>I<00E001F001F001F000E0000000000000000000000000007007F000F000700070
+007000700070007000700070007000700070007000700070007000700070007000700070
+00706070F060F0C061803F000C28829E0E>I<0E0000FE00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00000E00000E0FF00E03C00E03000E02000E04000E08
+000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E07000E07800E03800E03
+C00E03E0FFCFF815207F9F18>I<0E00FE000E000E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E00FFE00B20809F0C>I<0E1F01F000FE618618000E81C81C000F00F00E000F00F0
+0E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E
+000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00
+FFE7FE7FE023147F9326>I<0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C0
+0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC
+16147F9319>I<01F800070E001C03803801C03801C07000E07000E0F000F0F000F0F000
+F0F000F0F000F0F000F07000E07000E03801C03801C01C0380070E0001F80014147F9317
+>I<0E3E00FEC3800F01C00F00E00E00E00E00F00E00700E00780E00780E00780E00780E
+00780E00780E00700E00F00E00E00F01E00F01C00EC3000E3E000E00000E00000E00000E
+00000E00000E00000E00000E0000FFE000151D7F9319>I<03E0800619801C05803C0780
+380380780380700380F00380F00380F00380F00380F00380F00380700380780380380380
+3807801C0B800E138003E380000380000380000380000380000380000380000380000380
+003FF8151D7E9318>I<0E78FE8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E00FFE00F147F9312>I<1F9030704030C010C010C010E00078
+007F803FE00FF00070803880188018C018C018E030D0608F800D147E9312>I<02000200
+0200060006000E000E003E00FFF80E000E000E000E000E000E000E000E000E000E000E00
+0E080E080E080E080E080610031001E00D1C7F9B12>I<0E01C0FE1FC00E01C00E01C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
+03C00603C0030DC001F1FC16147F9319>I<FF83F81E01E01C00C00E00800E00800E0080
+07010007010003820003820003820001C40001C40001EC0000E80000E800007000007000
+00700000200015147F9318>I<FF9FE1FC3C0780701C0300601C0380200E0380400E0380
+400E03C0400707C0800704C0800704E080038861000388710003C8730001D0320001D03A
+0000F03C0000E01C0000E01C0000601800004008001E147F9321>I<7FC3FC0F01E00701
+C007018003810001C20000E40000EC00007800003800003C00007C00004E000087000107
+000303800201C00601E01E01E0FF07FE1714809318>I<FF83F81E01E01C00C00E00800E
+00800E008007010007010003820003820003820001C40001C40001EC0000E80000E80000
+7000007000007000002000002000004000004000004000F08000F08000F100006200003C
+0000151D7F9318>I<3FFF380E200E201C40384078407000E001E001C00380078007010E
+011E011C0338027006700EFFFE10147F9314>I<FFFFFC1601808C17>I<FFFFFFFFFFF02C
+01808C2D>I<30307878F87C787830300E057C9E17>127 D E /FE
+58 128 df<000FF000007FFC0001F80E0003E01F0007C03F000F803F000F803F000F801E
+000F800C000F8000000F8000000F8000000F800000FFFFFF00FFFFFF000F801F000F801F
+000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F
+000F801F000F801F000F801F000F801F000F801F000F801F000F801F007FF0FFE07FF0FF
+E01B237FA21F>12 D<00180030006000C001C00380070007000E001E001C003C003C003C
+007800780078007800F800F000F000F000F000F000F000F000F000F000F000F000F80078
+007800780078003C003C003C001C001E000E0007000700038001C000C00060003000180D
+317BA416>40 D<C0006000300018001C000E0007000700038003C001C001E001E001E000
+F000F000F000F000F80078007800780078007800780078007800780078007800F800F000
+F000F000F001E001E001E001C003C00380070007000E001C00180030006000C0000D317D
+A416>I<387CFEFFFF7F3B03030706060C1C18702008117C8610>44
+D<FFFCFFFCFFFCFFFC0E047F8C13>I<387CFEFEFE7C3807077C8610>I<00FE0007FFC00F
+83E01F01F03E00F83E00F87C007C7C007C7C007CFC007CFC007EFC007EFC007EFC007EFC
+007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C7C007C3E
+00F83E00F81F01F00F83E007FFC000FE0017207E9F1C>48 D<00180000780001F800FFF8
+00FFF80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
+0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
+0001F80001F8007FFFE07FFFE013207C9F1C>I<03FC000FFF003C1FC07007E07C07F0FE
+03F0FE03F8FE03F8FE01F87C01F83803F80003F80003F00003F00007E00007C0000F8000
+1F00003E0000380000700000E01801C0180380180700180E00380FFFF01FFFF03FFFF07F
+FFF0FFFFF0FFFFF015207D9F1C>I<00FE0007FFC00F07E01E03F03F03F03F81F83F81F8
+3F81F81F03F81F03F00003F00003E00007C0001F8001FE0001FF000007C00001F00001F8
+0000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E07F00FFFC0
+01FE0017207E9F1C>I<0000E00001E00003E00003E00007E0000FE0001FE0001FE00037
+E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E07007E0E007
+E0FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE1720
+7E9F1C>I<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC00018000018000018
+000018000019FC001FFF001E0FC01807E01803E00003F00003F00003F80003F83803F87C
+03F8FE03F8FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003F80015207D9F1C>I<
+001F8000FFE003F07007C0F00F01F81F01F83E01F83E01F87E00F07C00007C0000FC0800
+FC7FC0FCFFE0FD80F0FF00F8FE007CFE007CFC007EFC007EFC007EFC007E7C007E7C007E
+7C007E3C007C3E007C1E00F80F00F00783E003FFC000FF0017207E9F1C>I<6000007800
+007FFFFE7FFFFE7FFFFC7FFFF87FFFF87FFFF0E00060E000C0C00180C00300C003000006
+00000C00001C0000180000380000780000780000F00000F00000F00001F00001F00001F0
+0003F00003F00003F00003F00003F00003F00003F00001E00017227DA11C>I<00FE0003
+FFC00703E00E00F01C00F01C00783C00783E00783F00783F80783FE0F01FF9E01FFFC00F
+FF8007FFC003FFE007FFF01E7FF83C1FFC7807FC7801FEF000FEF0003EF0001EF0001EF0
+001CF8001C7800383C00381F01F00FFFC001FF0017207E9F1C>I<01FE0007FF800F83E0
+1E01F03E00F07C00F87C0078FC007CFC007CFC007CFC007EFC007EFC007EFC007E7C00FE
+7C00FE3E01FE1E037E0FFE7E07FC7E00207E00007C00007C1E007C3F00F83F00F83F00F0
+3F01E01E03C01C0F800FFE0003F80017207E9F1C>I<387CFEFEFE7C3800000000000000
+00387CFEFEFE7C3807167C9510>I<000070000000007000000000F800000000F8000000
+00F800000001FC00000001FC00000003FE00000003FE00000003FE00000006FF00000006
+7F0000000E7F8000000C3F8000000C3F800000183FC00000181FC00000381FE00000300F
+E00000300FE00000600FF000006007F00000E007F80000FFFFF80000FFFFF800018001FC
+00018001FC00038001FE00030000FE00030000FE000600007F000600007F00FFE00FFFF8
+FFE00FFFF825227EA12A>65 D<0003FE0080001FFF818000FF01E38001F8003F8003E000
+1F8007C0000F800F800007801F800007803F000003803F000003807F000001807E000001
+807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
+FE00000000FE000000007E000000007E000001807F000001803F000001803F000003801F
+800003000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC0000003
+FE000021227DA128>67 D<FFFFFF8000FFFFFFF00007F003FC0007F0007E0007F0003F00
+07F0001F8007F0000FC007F00007E007F00007E007F00007F007F00003F007F00003F007
+F00003F007F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F0
+0003F807F00003F807F00003F807F00003F007F00003F007F00003F007F00007E007F000
+07E007F0000FC007F0001F8007F0003F0007F0007E0007F003FC00FFFFFFF000FFFFFF80
+0025227EA12B>I<FFFFFFFCFFFFFFFC07F000FC07F0003C07F0001C07F0000C07F0000E
+07F0000E07F0000607F0180607F0180607F0180607F0180007F0380007F0780007FFF800
+07FFF80007F0780007F0380007F0180007F0180007F0180307F0180307F0000307F00006
+07F0000607F0000607F0000E07F0000E07F0001E07F0003E07F001FCFFFFFFFCFFFFFFFC
+20227EA125>I<FFFFFFF8FFFFFFF807F001F807F0007807F0003807F0001807F0001C07
+F0001C07F0000C07F0000C07F0180C07F0180C07F0180007F0180007F0380007F0780007
+FFF80007FFF80007F0780007F0380007F0180007F0180007F0180007F0180007F0000007
+F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFFE000FFFFE0001E
+227EA123>I<0003FE0040001FFFC0C0007F00F1C001F8003FC003F0000FC007C00007C0
+0FC00003C01F800003C03F000001C03F000001C07F000000C07E000000C07E000000C0FE
+00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
+0FFFFC7E000FFFFC7F00001FC07F00001FC03F00001FC03F00001FC01F80001FC00FC000
+1FC007E0001FC003F0001FC001FC003FC0007F80E7C0001FFFC3C00003FF00C026227DA1
+2C>I<FFFFE0FFFFE003F80003F80003F80003F80003F80003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800
+03F80003F80003F80003F80003F80003F80003F80003F80003F800FFFFE0FFFFE013227F
+A115>73 D<FFFFE000FFFFE00007F0000007F0000007F0000007F0000007F0000007F000
+0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000
+0007F0000007F0000007F0000007F0000007F0001807F0001807F0001807F0001807F000
+3807F0003807F0007007F0007007F000F007F001F007F007F0FFFFFFF0FFFFFFF01D227E
+A122>76 D<FFF000000FFFFFF800001FFF07F800001FE006FC000037E006FC000037E006
+FC000037E0067E000067E0067E000067E0063F0000C7E0063F0000C7E0061F800187E006
+1F800187E0060FC00307E0060FC00307E0060FC00307E00607E00607E00607E00607E006
+03F00C07E00603F00C07E00601F81807E00601F81807E00601F81807E00600FC3007E006
+00FC3007E006007E6007E006007E6007E006003FC007E006003FC007E006001F8007E006
+001F8007E006001F8007E006000F0007E0FFF00F00FFFFFFF00600FFFF30227EA135>I<
+FFF8001FFEFFFC001FFE07FC0000C007FE0000C006FF0000C0067F8000C0063FC000C006
+1FE000C0060FE000C0060FF000C00607F800C00603FC00C00601FE00C00600FE00C00600
+FF00C006007F80C006003FC0C006001FE0C006000FF0C0060007F0C0060007F8C0060003
+FCC0060001FEC0060000FFC00600007FC00600007FC00600003FC00600001FC00600000F
+C006000007C006000003C006000003C0FFF00001C0FFF00000C027227EA12C>I<0007FC
+0000003FFF800000FC07E00003F001F80007E000FC000FC0007E001F80003F001F80003F
+003F00001F803F00001F807F00001FC07E00000FC07E00000FC0FE00000FE0FE00000FE0
+FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E
+00000FC07F00001FC07F00001FC03F00001F803F80003F801F80003F000FC0007E0007E0
+00FC0003F001F80000FC07E000003FFF80000007FC000023227DA12A>I<FFFFFF00FFFF
+FFE007F007F007F001FC07F000FC07F0007E07F0007E07F0007F07F0007F07F0007F07F0
+007F07F0007F07F0007E07F0007E07F000FC07F001FC07F007F007FFFFE007FFFF0007F0
+000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0
+000007F0000007F0000007F00000FFFF8000FFFF800020227EA126>I<FFFFFE0000FFFF
+FFC00007F007F00007F001F80007F000FC0007F0007E0007F0007F0007F0007F0007F000
+7F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FC0007F001F80007F007F0
+0007FFFFC00007FFFF800007F00FE00007F007F00007F003F80007F001FC0007F001FC00
+07F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0607
+F000FE0607F000FF0CFFFF803FF8FFFF800FF027227EA12A>82 D<01FC0407FF8C1F03FC
+3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFFC0
+3FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001F
+E0001EE0001EF0003CFC003CFF00F8C7FFE080FF8018227DA11F>I<7FFFFFFF807FFFFF
+FF807E03F80F807803F807807003F803806003F80180E003F801C0E003F801C0C003F800
+C0C003F800C0C003F800C0C003F800C00003F800000003F800000003F800000003F80000
+0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800000003F800000003F800000003F800000003
+F800000003F8000003FFFFF80003FFFFF80022227EA127>I<FFFF0FFFF01FFEFFFF0FFF
+F01FFE0FF000FF0000E007F0007F0000C007F0007F0000C003F8007F80018003F8003F80
+018003FC003F80038001FC003FC0030001FC003FC0030000FE007FE0060000FE006FE006
+0000FF006FE00600007F00C7F00C00007F00C7F00C00007F80C7F81C00003F8183F81800
+003F8183F81800001FC383FC3000001FC301FC3000001FE301FC3000000FE600FE600000
+0FE600FE6000000FF600FFE0000007FC007FC0000007FC007FC0000003FC007F80000003
+F8003F80000003F8003F80000001F0001F00000001F0001F00000000F0001E00000000E0
+000E00000000E0000E000037227FA13A>87 D<07FC001FFF803F07C03F03E03F01E03F01
+F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01
+F07E02F07E0CF81FF87F07E03F18167E951B>97 D<FF000000FF0000001F0000001F0000
+001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000
+001F0FE0001F3FF8001FF07C001F801E001F001F001F000F801F000F801F000FC01F000F
+C01F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000F801F001F801F801F
+001FC03E001EE07C001C3FF800180FC0001A237EA21F>I<00FF8007FFE00F83F01F03F0
+3E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E0000
+7E00003E00301F00600FC0E007FF8000FE0014167E9519>I<0001FE000001FE0000003E
+0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E
+0000003E0001FC3E0007FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E
+00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E
+003E007E001E00FE000F83BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87
+C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00
+007C00007E00003E00181F00300FC07003FFC000FF0015167E951A>I<003F8000FFC001
+E3E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FF
+FC000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
+80000F80000F80000F80000F80000F80000F80007FF8007FF80013237FA211>I<03FC1E
+0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F80
+1FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001E
+F0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF0018217E951C>I<FF000000FF
+0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F
+0000001F0000001F0000001F07E0001F1FF8001F307C001F403C001F803E001F803E001F
+003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F
+003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A237EA21F>I<1C00
+3E007F007F007F003E001C000000000000000000000000000000FF00FF001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B24
+7EA310>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FF
+E0FFE00B237EA210>108 D<FF07F007F000FF1FFC1FFC001F303E303E001F403E403E00
+1F801F801F001F801F801F001F001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0FFE0FFE0FFE0FFE0
+2B167E9530>I<FF07E000FF1FF8001F307C001F403C001F803E001F803E001F003E001F
+003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F
+003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A167E951F>I<00FE0007FFC0
+0F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007E
+FC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE0017167E951C>I<FF0FE000FF
+3FF8001FF07C001F803E001F001F001F001F801F001F801F000FC01F000FC01F000FC01F
+000FC01F000FC01F000FC01F000FC01F000FC01F001F801F001F801F803F001FC03E001F
+E0FC001F3FF8001F0FC0001F0000001F0000001F0000001F0000001F0000001F0000001F
+0000001F000000FFE00000FFE000001A207E951F>I<00FE030007FF87000FC1C7001F00
+6F003F003F007E003F007E001F007C001F00FC001F00FC001F00FC001F00FC001F00FC00
+1F00FC001F00FC001F007E001F007E001F003E003F001F007F000FC1DF0007FF9F0001FC
+1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000
+FFE00000FFE01B207E951E>I<FE1F00FE3FC01E67E01EC7E01E87E01E87E01F83C01F00
+001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00
+00FFF000FFF00013167E9517>I<0FF3003FFF00781F00600700E00300E00300F00300FC
+00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC
+0E00EFFC00C7F00011167E9516>I<018000018000018000018000038000038000078000
+0780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F8000
+0F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003FE00
+00F80011207F9F16>I<FF01FE00FF01FE001F003E001F003E001F003E001F003E001F00
+3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F00
+3E001F003E001F007E001F00FE000F81BE0007FF3FC001FC3FC01A167E951F>I<FFE01F
+E0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E0180003E0180001F030
+0001F0300000F8600000F86000007CC000007CC000007FC000003F8000003F8000001F00
+00001F0000000E0000000E00001B167F951E>I<FFE07FC0FFE07FC00F801C0007C03800
+03E0700003F0600001F8C00000F98000007F8000003F0000001F0000001F8000003FC000
+0037C0000063E00000C1F00001C0F8000380FC0007007E000E003E00FF80FFE0FF80FFE0
+1B167F951E>120 D<FFE01FE0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C
+0003E0180003E0180001F0300001F0300000F8600000F86000007CC000007CC000007FC0
+00003F8000003F8000001F0000001F0000000E0000000E0000000C0000000C0000001800
+0078180000FC380000FC300000FC60000069C000007F8000001F0000001B207F951E>I<
+7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00C03E00C07E0000FC0000F80001F000
+03F03007E03007C0300F80701F80703F00603E00E07C03E0FFFFE0FFFFE014167E9519>
+I<FFFFFFFFFFFFFEFFFFFFFFFFFFFE3702808E38>124 D<380E007C1F00FE3F80FE3F80
+FE3F807C1F00380E0011077BA31C>127 D E /FF 1 35 df<03E01FF83818200020003F
+803F80400080008000801040207FC01F800D0E7F8D10>34 D E /FG
+1 98 df<00040000000E0000000E0000000E0000001F0000001F0000003F800000278000
+002780000043C0000043C0000043C0000081E0000081E0000101F0000100F0000100F000
+03FFF8000200780006007C0004003C0004003C000C001E000C001E003C003F00FF00FFE0
+1B1A7F991F>97 D E /FH 50 123 df<00200040008001000300060004000C000C001800
+18003000300030007000600060006000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E0006000600060007000300030003000180018000C000C00040006000300
+01000080004000200B327CA413>40 D<800040002000100018000C000400060006000300
+030001800180018001C000C000C000C000E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000C000C000C001C0018001800180030003000600060004000C001800
+10002000400080000B327DA413>I<70F8FCFC7404040404080810102040060F7C840E>
+44 D<70F8F8F87005057C840E>46 D<01F000071C000C06001803003803803803807001
+C07001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001
+E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C07803C03803803803801C07
+000C0600071C0001F00013227EA018>48 D<008003800F80F38003800380038003800380
+038003800380038003800380038003800380038003800380038003800380038003800380
+038003800380038007C0FFFE0F217CA018>I<03F0000C1C001007002007804003C04003
+C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003C0000780000700000E
+00001C0000180000300000600000C0000180000100000200200400200800201800603000
+403FFFC07FFFC0FFFFC013217EA018>I<1000801E07001FFF001FFE001FF80013E00010
+000010000010000010000010000010000010F800130E001407001803801003800001C000
+01C00001E00001E00001E00001E07001E0F001E0F001E0E001C08001C04003C040038020
+07001006000C1C0003F00013227EA018>53 D<01F000060C000C06001807003803807003
+80700380F001C0F001C0F001C0F001E0F001E0F001E0F001E0F001E07001E07003E03803
+E01805E00C05E00619E003E1E00001C00001C00001C00003800003803003007807007806
+00700C002018001030000FC00013227EA018>57 D<FFFFFFFEFFFFFFFE00000000000000
+00000000000000000000000000000000000000000000000000FFFFFFFEFFFFFFFE1F0C7D
+9126>61 D<0001800000018000000180000003C0000003C0000003C0000005E0000005E0
+00000DF0000008F0000008F0000010F800001078000010780000203C0000203C0000203C
+0000401E0000401E0000401E0000800F0000800F0000FFFF000100078001000780030007
+C0020003C0020003C0040003E0040001E0040001E00C0000F00C0000F03E0001F8FF800F
+FF20237EA225>65 D<0007E0100038183000E0063001C00170038000F0070000F00E0000
+701E0000701C0000303C0000303C0000307C0000107800001078000010F8000000F80000
+00F8000000F8000000F8000000F8000000F8000000F800000078000000780000107C0000
+103C0000103C0000101C0000201E0000200E000040070000400380008001C0010000E002
+0000381C000007E0001C247DA223>67 D<FFFFFFC00F8007C0078001C0078000C0078000
+400780004007800060078000200780002007800020078020200780200007802000078020
+00078060000780E00007FFE0000780E00007806000078020000780200007802000078020
+080780000807800008078000100780001007800010078000300780003007800070078000
+E00F8003E0FFFFFFE01D227EA121>69 D<0007F008003C0C1800E0021801C001B8038000
+F8070000780F0000381E0000381E0000183C0000183C0000187C00000878000008780000
+08F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8001FFF780000
+F8780000787C0000783C0000783C0000781E0000781E0000780F00007807000078038000
+B801C000B800E00318003C0C080007F00020247DA226>71 D<FFFC0FC007800780078007
+800780078007800780078007800780078007800780078007800780078007800780078007
+80078007800780078007800780078007800FC0FFFC0E227EA112>73
+D<03FFF0001F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00700F00F80F00F80F00F80E00F01E00401C0020380018700007C0001423
+7EA119>I<FFFE00000FC000000780000007800000078000000780000007800000078000
+000780000007800000078000000780000007800000078000000780000007800000078000
+000780000007800000078000000780000007800000078000800780008007800080078000
+80078001800780018007800100078003000780030007800F000F803F00FFFFFF0019227E
+A11E>76 D<FFC00003FF0FC00003F007C00003E005E00005E005E00005E004F00009E004
+F00009E004F00009E004780011E004780011E004780011E0043C0021E0043C0021E0043C
+0021E0041E0041E0041E0041E0040F0081E0040F0081E0040F0081E004078101E0040781
+01E004078101E00403C201E00403C201E00401E401E00401E401E00401E401E00400F801
+E00400F801E00400F801E004007001E00E007001E01F007003F0FFE0203FFF28227EA12D
+>I<FFFFE000000F803C000007800E00000780078000078007C000078003C000078003E0
+00078003E000078003E000078003E000078003E000078003C000078007C0000780078000
+07800E000007803C000007FFE000000780700000078038000007801C000007801E000007
+800E000007800F000007800F000007800F000007800F000007800F800007800F80000780
+0F800007800F808007800FC080078007C0800FC003C100FFFC01E2000000007C0021237E
+A124>82 D<03F0200C0C601802603001E07000E0600060E00060E00060E00020E00020E0
+0020F00000F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E00001E000
+00F00000F0000070800070800070800070800070C00060C00060E000C0F000C0C80180C6
+070081FC0014247DA21B>I<7FFFFFF87807807860078018400780084007800840078008
+C007800C8007800480078004800780048007800400078000000780000007800000078000
+000780000007800000078000000780000007800000078000000780000007800000078000
+0007800000078000000780000007800000078000000780000007800000078000000FC000
+03FFFF001E227EA123>I<FFFC07FF0FC000F80780007007800020078000200780002007
+800020078000200780002007800020078000200780002007800020078000200780002007
+800020078000200780002007800020078000200780002007800020078000200780002007
+800020078000200380004003C0004003C0004001C0008000E00080006001000030060000
+1C08000003F00020237EA125>I<FFF03FFC03FE1F8007E000F80F0003C000700F0003C0
+00200F0003C00020078001E00040078001E00040078001E0004003C002F0008003C002F0
+008003C002F0008001E00478010001E00478010001E00478010000F0083C020000F0083C
+020000F0083C020000F8183E06000078101E04000078101E0400007C101E0400003C200F
+0800003C200F0800003C200F0800001E40079000001E40079000001E40079000000F8003
+E000000F8003E000000F8003E00000070001C00000070001C00000070001C00000030001
+80000002000080002F237FA132>87 D<7FF807FF0007E001F80003C000E00003E000C000
+01E000800000F001000000F80300000078020000007C040000003E0C0000001E08000000
+1F100000000FB000000007A000000007C000000003E000000001E000000001F000000003
+F80000000278000000047C0000000C3E000000081E000000101F000000300F8000002007
+8000004007C00000C003E000008001E000010001F000030000F000070000F8001F8001FC
+00FFE007FFC022227FA125>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07317BA40E>91
+D<FEFE060606060606060606060606060606060606060606060606060606060606060606
+060606060606060606060606FEFE07317FA40E>93 D<0FE0001838003C0C003C0E001807
+0000070000070000070000FF0007C7001E07003C0700780700700700F00708F00708F007
+08F00F087817083C23900FC1E015157E9418>97 D<0E0000FE00001E00000E00000E0000
+0E00000E00000E00000E00000E00000E00000E00000E00000E00000E1F000E61C00E8060
+0F00300E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C
+0E003C0E00380F00700C80600C41C0083F0017237FA21B>I<01FE000703000C07801C07
+80380300780000700000F00000F00000F00000F00000F00000F00000F000007000007800
+403800401C00800C010007060001F80012157E9416>I<0000E0000FE00001E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E001F8E00704E00C
+02E01C01E03800E07800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E070
+00E07800E03800E01801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C0380
+1C01C03801C07801E07000E0F000E0FFFFE0F00000F00000F00000F00000F00000700000
+7800203800201C00400E008007030000FC0013157F9416>I<003C00C6018F038F030F07
+0007000700070007000700070007000700FFF80700070007000700070007000700070007
+0007000700070007000700070007000700070007807FF8102380A20F>I<00007001F198
+071E180E0E181C07001C07003C07803C07803C07803C07801C07001C07000E0E000F1C00
+19F0001000001000001800001800001FFE000FFFC00FFFE03800F0600030400018C00018
+C00018C000186000306000303800E00E038003FE0015217F9518>I<0E0000FE00001E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E1F
+800E60C00E80E00F00700F00700E00700E00700E00700E00700E00700E00700E00700E00
+700E00700E00700E00700E00700E00700E00700E0070FFE7FF18237FA21B>I<1C003E00
+3E003E001C00000000000000000000000000000000000E00FE001E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E000E00FFC00A227FA10E>I<0E
+0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E03FC0E01F00E01C00E01800E02000E04000E08000E10000E38000EF8000F
+1C000E1E000E0E000E07000E07800E03C00E01C00E01E00E00F00E00F8FFE3FE17237FA2
+1A>107 D<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
+00FFE00B237FA20E>I<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E
+003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E00
+3800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E0038
+00E0FFE3FF8FFE27157F942A>I<0E1F80FE60C01E80E00F00700F00700E00700E00700E
+00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E
+0070FFE7FF18157F941B>I<01FC000707000C01801800C03800E0700070700070F00078
+F00078F00078F00078F00078F00078F000787000707800F03800E01C01C00E0380070700
+01FC0015157F9418>I<0E1F00FE61C00E80600F00700E00380E003C0E001C0E001E0E00
+1E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80E00E41C00E3F
+000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000171F7F941B
+>I<0E3CFE461E8F0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E00
+0E000E000F00FFF010157F9413>114 D<0F8830786018C018C008C008E008F0007F803F
+E00FF001F8003C801C800C800CC00CC008E018D0308FC00E157E9413>I<020002000200
+02000600060006000E001E003E00FFF80E000E000E000E000E000E000E000E000E000E00
+0E000E040E040E040E040E040E040708030801F00E1F7F9E13>I<0E0070FE07F01E00F0
+0E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070
+0E00700E00F00E00F006017003827800FC7F18157F941B>I<FFC1FE1E00780E00300E00
+200E002007004007004003808003808003808001C10001C10000E20000E20000E2000074
+0000740000380000380000380000100017157F941A>I<FF8FF8FF1E01E03C1C01C0180E
+01C0180E01E0100E01E01007026020070270200702702003843040038438400384384001
+C8188001C81C8001C81C8000F00D0000F00F0000F00F0000600600006006000060060020
+157F9423>I<FF83FE1F01F00E00C007008003810003830001C20000E400007800007800
+003800003C00004E00008E000187000103800201C00401E00C00E03E01F0FF03FE17157F
+941A>I<FFC1FE1E00780E00300E00200E002007004007004003808003808003808001C1
+0001C10000E20000E20000E2000074000074000038000038000038000010000010000020
+00002000002000004000F04000F08000F180004300003C0000171F7F941A>I<3FFFC038
+0380300780200700600E00401C00403C0040380000700000E00001E00001C00003804007
+00400F00400E00C01C0080380080780180700780FFFF8012157F9416>I
+E /FI 1 98 df<00003000000000780000000078000000007800000000FC00000000FC00
+000001FE00000001BE00000001BE000000031F000000031F000000031F000000060F8000
+00060F8000000E0FC000000C07C000000C07C000001803E000001803E000003803F00000
+3001F000003001F000006000F800007FFFF800007FFFF80000C0007C0000C0007C0001C0
+007E000180003E000180003E000300001F000300001F000700001F800F80001F801FC000
+1FC0FFE000FFFCFFE000FFFC26257EA42C>97 D E /FJ 4 112 df<001FE00000FFF800
+01FFFE0003FFFF0007F07F800FC00F801F0007C03F0007E03E0003E07C0003E07C0003F0
+FC0001F0F80001F0FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFE0F8000000F8000000FC000000
+7C0000007E0000003E0000E03F0001F01F8001F00FC007F007F81FE003FFFFC001FFFF80
+007FFE00001FF8001C1F7C9E25>101 D<001F80FE00007FE3FF0001FFFFFF8003FFFFFF
+8007F0FF8F8007C03E07000F801F00000F801F00001F801F80001F000F80001F000F8000
+1F000F80001F000F80001F000F80001F801F80000F801F00000F801F000007C03E000007
+F0FE000007FFFC00000FFFF800000F7FE000000F1F8000000F000000000F000000000F00
+0000000F8000000007FFFE000007FFFFC0000FFFFFF0001FFFFFF8003F0003FC007C0000
+7E007800001E00F800001F00F000000F00F000000F00F000000F00F000000F00F800001F
+007800001E007E00007E003F8001FC001FF00FF8000FFFFFF00003FFFFC00000FFFF0000
+001FF8000021307E9E25>103 D<7E1F01F000FF7F87F800FFFFCFFC007FFFFFFE000FF1
+FF1E000FC1FC1F000FC0FC0F000F80F80F000F80F80F000F80F80F000F00F00F000F00F0
+0F000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F
+000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F000F00F00F00
+0F00F00F007FE1FE1FE0FFF3FF3FF0FFF3FF3FF07FE1FE1FE0241F809E25>109
+D<003FC00000FFF00003FFFC0007FFFE000FE07F001F801F801F000F803E0007C03E0007
+C07C0003E07C0003E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001
+F0F80001F0FC0003F07C0003E07C0003E03E0007C03F000FC01F801F801FC03F800FE07F
+0007FFFE0003FFFC0000FFF000003FC0001C1F7C9E25>111 D E
+/FK 13 122 df<FFFFFFFFE0FFFFFFFFE007E0000FE003E00001E003E00000F003E00000
+7003E000003003E000003003E000001003E000001003E000001003E000001003E0000008
+03E000000803E000000803E000800803E000800003E000800003E000800003E000800003
+E001800003E001800003E007800003FFFF800003FFFF800003E007800003E001800003E0
+01800003E000800003E000800003E000800003E000800203E000800203E000000203E000
+000403E000000403E000000403E000000403E000000C03E000000C03E000000803E00000
+1803E000001803E000003803E000007803E00001F807E0000FF0FFFFFFFFF0FFFFFFFFF0
+27317CB02D>69 D<FFFFC00000FFFFC0000007F000000003E000000003E000000003E000
+000003E000000003E000000003E000000003E000000003E000000003E000000003E00000
+0003E000000003E000000003E000000003E000000003E000000003E000000003E0000000
+03E000000003E000000003E000000003E000000003E000000003E000000003E000000003
+E000000003E000000003E000000003E000000003E000004003E000004003E000004003E0
+00004003E000008003E000008003E000008003E000008003E000018003E000018003E000
+038003E000038003E000078003E0000F0003E0003F0007E000FF00FFFFFFFF00FFFFFFFF
+0022317CB029>76 D<7FFFFFFFFFE07FFFFFFFFFE07E000F8007E078000F8001E070000F
+8000E060000F80006040000F80002040000F800020C0000F800030C0000F80003080000F
+80001080000F80001080000F80001080000F80001080000F80001080000F80001000000F
+80000000000F80000000000F80000000000F80000000000F80000000000F80000000000F
+80000000000F80000000000F80000000000F80000000000F80000000000F80000000000F
+80000000000F80000000000F80000000000F80000000000F80000000000F80000000000F
+80000000000F80000000000F80000000000F80000000000F80000000000F80000000000F
+80000000000F80000000000F80000000000F80000000000F80000000000F80000000001F
+C00000000FFFFF8000000FFFFF80002C317EB030>84 D<7FFF8000FFF87FFF8000FFF803
+FE00003F8000FC00001E0000FC00001800007E00001000003E00003000003F0000200000
+1F80004000000F80008000000FC00080000007E00100000003E00200000003F002000000
+01F80400000000F80800000000FC18000000007E10000000003E20000000003F60000000
+001FC0000000000F80000000000FC00000000007E00000000003E00000000007F0000000
+0005F80000000008F80000000010FC00000000107E00000000203E00000000403F000000
+00401F80000000800F80000001000FC00000030007E00000020003E00000040003F00000
+0C0001F80000080000F80000100000FC00003000007E00002000003E00004000003F0000
+C000001F8001E000001F800FF000003FE0FFF80000FFFFFFF80000FFFF30317FB032>88
+D<003F800000E0E0000380380007003C000E001E001E001E001C000F003C000F007C000F
+0078000F8078000780F8000780F8000780FFFFFF80F8000000F8000000F8000000F80000
+00F8000000F8000000780000007C0000003C0000003C0000801E0000800E0001000F0002
+000780020001C00C0000F03000001FC000191F7E9E1D>101 D<0007E0001C1000383800
+707C00E07C01E07C01C03803C00003C00003C00003C00003C00003C00003C00003C00003
+C00003C00003C00003C000FFFFC0FFFFC003C00003C00003C00003C00003C00003C00003
+C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003
+C00003C00003C00003C00003C00003C00003C00003C00007E0007FFF007FFF0016327FB1
+14>I<0780000000FF80000000FF800000000F8000000007800000000780000000078000
+000007800000000780000000078000000007800000000780000000078000000007800000
+00078000000007800000000780000000078000000007800000000780FE00000783078000
+078C03C000079001E00007A001E00007A000F00007C000F00007C000F000078000F00007
+8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780
+00F000078000F000078000F000078000F000078000F000078000F000078000F000078000
+F000078000F000078000F000078000F000078000F0000FC001F800FFFC1FFF80FFFC1FFF
+8021327EB125>104 D<0780FF80FF800F80078007800780078007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780
+07800780078007800780078007800780078007800780078007800780078007800FC0FFFC
+FFFC0E327EB112>108 D<001FC00000F0780001C01C00070007000F0007801E0003C01C
+0001C03C0001E03C0001E0780000F0780000F0780000F0F80000F8F80000F8F80000F8F8
+0000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001F03C0001E03C0001E01E
+0003C01E0003C00F00078007800F0001C01C0000F07800001FC0001D1F7E9E21>111
+D<0783E0FF8C18FF907C0F907C07A07C07C03807C00007C00007C0000780000780000780
+000780000780000780000780000780000780000780000780000780000780000780000780
+000780000780000780000780000FC000FFFE00FFFE00161F7E9E19>114
+D<01FC100E03301800F0300070600030E00030E00010E00010E00010F00010F800007E00
+003FF0001FFF000FFFC003FFE0003FF00001F80000F880003C80003C80001CC0001CC000
+1CE0001CE00018F00038F00030CC0060C301C080FE00161F7E9E1A>I<00400000400000
+400000400000400000C00000C00000C00001C00001C00003C00007C0000FC0001FFFE0FF
+FFE003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003
+C00003C00003C00003C00003C00003C01003C01003C01003C01003C01003C01003C01003
+C01001C02001E02000E0400078C0001F00142C7FAB19>I<FFF801FF80FFF801FF800FC0
+007C00078000380007C000300003C000200003C000200001E000400001E000400001F000
+400000F000800000F000800000780100000078010000007C010000003C020000003C0200
+00001E040000001E040000001F040000000F080000000F08000000079000000007900000
+0007D000000003E000000003E000000001C000000001C000000001C00000000080000000
+008000000001000000000100000000010000000002000000000200000000040000007004
+000000F80C000000F808000000F810000000703000000030400000001F80000000212D7F
+9E23>121 D E /FL 58 128 df<03F00E181818180018001800FFF81818181818181818
+181818181818181818187E7E0F11809012>12 D<4100E380618020802080410041008200
+09087F900F>34 D<380180640380470700C2FE00C20C00C20C00C21800C2300044300064
+600038C380018640018420030C20060C20060C200C0C2018042030064010038013147E92
+19>37 D<40E060202040408003087E8209>44 D<FCFC060280850A>I<40E04003037E82
+09>I<0080018001800300030003000600060006000C000C000C00180018001800180030
+0030003000600060006000C000C000C00009197E920F>I<40E040000000000040E04003
+0B7E8A09>58 D<3C42C3C30204081010101000000010381008117E900E>63
+D<00C00000C00000C000016000016000023000023000023000041800041800080C000FFC
+00080C00100600100600300700FC1FC012117F9016>65 D<FFF8180C1806180318031803
+1806181C1FFC180618031803180318031806180EFFF810117F9015>I<03F10C0B180730
+0360014001C000C000C000C000C00040016001300218020C0C03F010117E9016>I<FFF8
+00180C001803001801001801801800801800C01800C01800C01800C01800C01800C01801
+80180100180300180E00FFF80012117F9017>I<FFFC180C1804180618021842184018C0
+1FC018C018411841180118021802180EFFFE10117F9014>I<FFFE180618021803180118
+21182018601FE01860182018201800180018001800FF0010117F9014>I<03F1000C0B00
+180700300300600100400100C00000C00000C00000C03FC0C00300400300600300300300
+1803000C070003F90012117E9017>I<FF181818181818181818181818181818FF08117F
+900B>73 D<FF07E0180300180200180C0018100018200018400018C0001960001A30001C
+1000181800180C00180600180200180300FF0FE013117F9017>75
+D<FF0018001800180018001800180018001800180018021802180218061804181CFFFC0F
+117F9013>I<FC007E1C00701600B01600B01600B0130130130130118230118230118230
+10C43010C430106830106830106830383030FE31FE17117F901B>I<F81FC01C07001C02
+0016020013020013020011820010C20010C200106200103200101200101A00100E001006
+00380600FE020012117F9016>I<03E0000C1800100400200200600300400100C00180C0
+0180C00180C00180C001806003006003003006003006000C180003E00011117E9017>I<
+FFF0181C18041806180618061804181C1FF01800180018001800180018001800FF000F11
+7F9014>I<FFE000181800180C00180600180600180600180C001818001FE00018180018
+0C00180C00180C00180C00180C20180420FF03C013117F9016>82
+D<1F2060E0006080208020800060003E001F8000C00060002080208020C040E0C09F000B
+117E9011>I<7FFF8060C18040C080C0C0C080C04080C04000C00000C00000C00000C000
+00C00000C00000C00000C00000C00000C0000FFC0012117F9016>I<FF1FC01807001802
+001802001802001802001802001802001802001802001802001802001802000802000C04
+0006080001F00012117F9016>I<FC3F87C0300C0380300E0100380E0300180E02001813
+02000C1304000C1304000C21840006218800062188000640C8000340D00003C0D0000380
+700001806000010020001A117F901E>87 D<FE1F80180C000C08000E1800061000032000
+01C00001C00000C000016000033000023800041800080C00180600380600FC1FC012117F
+9016>I<FC07C03003001802001C06000C040006080007100003100001A00000C00000C0
+0000C00000C00000C00000C00000C00007F80012117F9016>I<20804100410082008200
+C300E380410009087D900F>92 D<3E006300018001800F8031804180C190C19063903DE0
+0C0B7F8A0F>97 D<F0003000300030003000300037C03860303030183018301830183018
+3030386027800D117F9011>I<1F8030C06000C000C000C000C000C000604030801F000A
+0B7F8A0E>I<01E0006000600060006000600F6030E06060C060C060C060C060C0606060
+30E01F780D117F9011>I<1F00318060C0C0C0FFC0C000C000C000604030801F000A0B7F
+8A0E>I<07000D801800180018001800FE00180018001800180018001800180018001800
+7E00091180900A>I<1EF0331061806180618033003E00400060003F803FC060E0C060C0
+60C06060C01F000C117F8A0F>I<F0003000300030003000300033C03C60306030603060
+30603060306030603060FCF80D117F9011>I<20702000000000F0303030303030303030
+FC0612809108>I<F0003000300030003000300031F030C03080330036003F0033003180
+31C030C0F9F00C117F9010>107 D<F0303030303030303030303030303030FC06118090
+08>I<F3C3C03C2C20383830303030303030303030303030303030303030303030FCFCFC
+160B7F8A1A>I<F3C03C6030603060306030603060306030603060FCF80D0B7F8A11>I<1F
+00318060C0C060C060C060C060C06060C031801F000B0B7F8A0F>I<F7C0386030303018
+30183018301830183030386037803000300030003000FC000D107F8A11>I<0F2030E060
+60C060C060C060C060C060606030E01F60006000600060006001F80D107F8A10>I<F700
+398030003000300030003000300030003000FC00090B7F8A0C>I<3E028280783E038181
+C2BC080B7F8A0C>I<10103030FE3030303030323232321C070F7F8E0C>I<F1E030603060
+30603060306030603060306030E00F780D0B7F8A11>I<F8F0706030403040188018800D
+000D000D00060006000C0B7F8A10>I<F9F3C060E18030E10030E1003131001932001A12
+000E1C000E1C000C0C00040800120B7F8A16>I<F9F030C018801D000E0006000F001980
+11C030C0F1F00C0B7F8A10>I<F8F0306030403040188018800D000D000F000600060004
+000400CC00C80070000C107F8A10>I<FFC0C1808380830006000C0018403040704060C0
+FFC00A0B7F8A0E>I<FFFFFFF01C0180861E>124 D<44EE4407037D910F>127
+D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop -225 116 a FL(??)14 b(\\Con)o(ten)o(ts")639 302
+y FK(The)21 b FJ(geom)g FK(st)n(yle)h(for)g(L)1213 293
+y FI(a)1247 302 y FK(T)1284 324 y(E)1321 302 y(X)886
+457 y FH(Silvio)15 b(Levy)821 515 y(Geometry)f(Cen)o(ter)749
+573 y(Univ)o(ersit)o(y)g(of)j(Minnesota)675 675 y(Revised)e(for)h(L)942
+669 y FG(a)966 675 y FH(T)993 690 y(E)1021 675 y(X2)1082
+682 y FF(")1100 675 y FH(,)g(July)g(1995)105 851 y FE(Con)n(ten)n(ts)
+105 953 y FD(1)82 b(In)o(tro)q(duction)12 b FC(:)22 b(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91
+b FD(2)105 1009 y(2)82 b(Ov)o(erall)16 b(Organization)21
+b FC(:)h(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91
+b FD(2)105 1066 y(3)82 b(Installation)35 b FC(:)22 b(:)h(:)f(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91
+b FD(3)105 1122 y(4)82 b(No)15 b(More)f(F)l(ragile)i(Commands)g
+FC(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91
+b FD(4)105 1179 y(5)82 b(Lab)q(els)16 b(and)f(Cross-References)f
+FC(:)22 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91
+b FD(5)105 1235 y(6)82 b(Theorems)15 b(and)g(Their)h(F)l(riends)47
+b FC(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91 b FD(6)105
+1292 y(7)82 b(The)15 b(Pro)q(of)f(En)o(vironmen)o(t)33
+b FC(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91
+b FD(8)105 1348 y(8)82 b(Equations)26 b FC(:)c(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91
+b FD(9)105 1405 y(9)82 b(The)15 b FB(Figure)f FD(and)i
+FB(Table)e FD(en)o(vironmen)o(ts)j FC(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)69
+b FD(10)105 1461 y(10)59 b(P)o(ostScript)15 b(Figures)33
+b FC(:)23 b(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+69 b FD(10)105 1518 y(11)59 b(F)l(on)o(ts)45 b FC(:)22
+b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f
+(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)
+h(:)f(:)g(:)h(:)f(:)69 b FD(14)105 1574 y(12)59 b(The)15
+b(Index,)h(the)f(T)l(able)h(of)f(Con)o(ten)o(ts)f(and)h(the)h(Glossary)
+k FC(:)i(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)69
+b FD(14)105 1630 y(13)59 b(Pro)q(o\014ng)14 b(Aids)23
+b FC(:)g(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)69 b FD(15)105 1687 y(App)q(endix:)22 b FB(mathfig)p
+FD(|A)15 b(System)g(for)f(Doing)i(T)o(yp)q(esetting)f(in)h(Mathematica)
+46 b FC(:)22 b(:)h(:)f(:)g(:)h(:)f(:)69 b FD(16)105 1743
+y(References)15 b FC(:)23 b(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)69 b
+FD(18)105 1800 y(Index)43 b FC(:)22 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)69
+b FD(19)201 2084 y(c)188 2085 y FA(\015)p FD(1992)14
+b(Silvio)i(Levy)l(.)21 b(The)14 b(soft)o(w)o(are)f(describ)q(ed)j(in)g
+(this)f(do)q(cumen)o(t)g(is)g(a)o(v)m(ailable)h(free)e(of)g(c)o(harge)
+105 2141 y(through)f(the)h(Geometry)f(Cen)o(ter)g(at)g(the)g(Univ)o
+(ersit)o(y)i(of)e(Minnesota.)19 b(It)14 b(is)g(distributed)h(without)e
+(an)o(y)105 2198 y(w)o(arran)o(t)o(y)l(,)g(express)i(or)g(implied.)188
+2254 y(Bug)23 b(rep)q(orts)g(and)h(commen)o(ts)f(ab)q(out)g(the)g(soft)
+o(w)o(are)f(and)h(do)q(cumen)o(tation)h(can)g(b)q(e)g(sen)o(t)f(to)105
+2310 y FB(levy@geom.umn.edu)p FD(.)31 b(I)20 b(will)h(tak)o(e)e(them)h
+(in)o(to)f(consideration)i(in)f(future)g(releases,)h(but)f(there)f(is)
+105 2367 y(no)c(guaran)o(tee)g(that)f(particular)i(bugs)f(will)i(b)q(e)
+f(\014xed.)105 2729 y(Revision:)22 b(1.12)1029 b(Date:)19
+b(95/07/03)13 b(15:57:22)p eop
+%%Page: 2 2
+2 1 bop 105 -25 a Fz(1.)17 b(In)o(tro)q(duction)1526
+b(2)-225 116 y FL(Section)12 b(\\In)o(tro)q(duc-)-183
+145 y(tion")-225 174 y Fy(geom)-225 203 y FL(P)o(ostScript)-225
+232 y(historical)h(notes)-225 261 y(ac)o(kno)o(wledgemen)o(ts)-225
+290 y(Bill)g(Th)o(urston)-225 319 y Fx(Thr)o(e)o(e-Dimensional)-183
+348 y(Ge)o(ometry)f(and)-183 377 y(T)n(op)o(olo)o(gy)-225
+406 y FL(Y)n(air)f(Minsky)-225 435 y(Da)o(vid)g(Epstein)-225
+464 y(W)n(arwic)o(k)g(Univ)o(ersit)o(y)-225 493 y(Don)f(Kn)o(uth)-225
+522 y(Leslie)h(Lamp)q(ort)-225 551 y(Rainer)g(Sc)o(h\177)-15
+b(opf)-225 580 y(F)n(rank)10 b(Mittelbac)o(h)-225 610
+y(T)n(rev)o(or)g(Darrell)-225 639 y(Section)j(\\Ov)o(erall)-183
+668 y(Organization")-225 697 y(new)e(fon)o(t)h(selection)-183
+726 y(sc)o(heme)105 120 y FE(1.)24 b(In)n(tro)r(duction)105
+222 y FD(This)19 b(do)q(cumen)o(t)g(describ)q(es)h(a)f(L)676
+216 y Fw(a)697 222 y FD(T)722 235 y(E)747 222 y(X)g(st)o(yle)g(called)h
+FB(geom)p FD(,)e(whic)o(h)i(is)f(lo)q(osely)g(based)g(on)g(Lamp)q
+(ort's)105 278 y FB(book)c FD(and)g FB(article)f FD(st)o(yles)h
+([Lam86],)f(but)h(pro)o(vides)h(a)f(n)o(um)o(b)q(er)g(of)g(additional)i
+(features,)d(suc)o(h)i(as:)143 367 y FA(\017)22 b FD(inclusion)c(of)c
+(P)o(ostScript)h(\014gures)h(in)g(the)f(do)q(cumen)o(t,)g(and)h(of)e(T)
+1314 377 y(E)1340 367 y(X)h(text)g(within)h(\014gures;)143
+442 y FA(\017)22 b FD(automatic)15 b(creation)g(of)g(index)h(en)o
+(tries)g(and)f(cross-reference)h(lab)q(els)h(where)e(appropriate;)143
+516 y FA(\017)22 b FD(no)e(restriction)h(on)f(the)g(use)g(of)g(macros)f
+(and)h(sp)q(ecial)i(c)o(haracters)d(in)i(titles,)h(cross-references,)
+188 572 y(captions,)15 b(etc.;)143 647 y FA(\017)22 b
+FD(greater)14 b(v)o(ersatilit)o(y)i(in)g(de\014ning)h(theorem-lik)o(e)f
+(en)o(vironmen)o(ts;)143 721 y FA(\017)22 b FD(uprigh)o(t)16
+b(digits)f(in)i(an)e(italics)h(en)o(vironmen)o(t)g(\(optionally\);)f
+(and)143 795 y FA(\017)22 b FD(pro)q(o\014ng)15 b(aids)h(suc)o(h)f(as)g
+(v)o(ersion)h(n)o(um)o(b)q(ers)f(and)g(a)g(running)i(index.)105
+885 y(There)e(are)g(also)g(purely)i(esthetic)f(di\013erences,)g(man)o
+(y)e(of)h(whic)o(h)h(can)g(b)q(e)f(con)o(trolled)h(b)o(y)g(the)f(user.)
+188 941 y(This)h(st)o(yle)f(had)h(its)f(inception)j(in)e(a)f(set)g(of)g
+(L)974 935 y Fw(a)995 941 y FD(T)1020 955 y(E)1045 941
+y(X)h(macros)e(written)i(for)e(the)i(formatting)e(of)h(Bill)105
+998 y(Th)o(urston's)20 b Fv(Thr)n(e)n(e-Dimensional)g(Ge)n(ometry)h
+(and)h(T)m(op)n(olo)n(gy)p FD(,)f(\014rst)f(b)o(y)h(Y)l(air)g(Minsky)g
+(and)g(subse-)105 1054 y(quen)o(tly)15 b(b)o(y)f(me.)19
+b(After)14 b(three)g(y)o(ears)g(of)g(gestation,)f(the)h(macros)g
+(started)f(b)q(eing)i(used)g(in)o(tensiv)o(ely)h(b)o(y)105
+1111 y(some)c(other)g(p)q(eople|notably)j(Th)o(urston,)d(Da)o(vid)g
+(Epstein)i(and)e(a)g(n)o(um)o(b)q(er)h(of)f(studen)o(ts)g(at)g(W)l
+(arwic)o(k)105 1167 y(Univ)o(ersit)o(y|and)20 b(more)f(mo)q
+(di\014cations,)h(includin)q(g)h(a)e(complete)h(rewrite,)f(w)o(ere)g
+(made.)31 b(The)19 b(\014rst)105 1223 y(b)q(o)q(ok)c(published)j(using)
+e(the)f FB(geom)g FD(st)o(yle)g([ECL)941 1207 y Fu(+)969
+1223 y FD(92])f(came)h(out)g(in)h(F)l(ebruary)f(1992.)188
+1280 y(The)e(App)q(endix)h(to)e(this)g(do)q(cumen)o(t)h(describ)q(es)h
+FB(mathfig)p FD(,)e(a)g(system)f(for)h(t)o(yp)q(esetting)h(T)1721
+1290 y(E)1746 1280 y(X)f(lab)q(els)105 1336 y(in)18 b(Mathematica)f
+(\014gures.)28 b(\(Mathematica)16 b(is)j(describ)q(ed)g(in)g([W)l
+(ol91]\).)25 b(This)19 b(system)e(can)h(also)f(b)q(e)105
+1393 y(used)f(indep)q(enden)o(tly)i(of)d FB(geom)p FD(.)188
+1449 y(This)i(release)g(o)o(w)o(es)e(m)o(uc)o(h)h(to)f(the)i(patience)g
+(of)f(these)g(\014rst)g(users)g(and)g(the)g(feedbac)o(k)h(they)f(pro-)
+105 1506 y(vided,)i(for)d(whic)o(h)j(I)e(am)g(v)o(ery)h(grateful.)23
+b(Naturally)l(,)17 b(m)o(y)f(debt)h(to)f(the)g(p)q(eople)i(on)e(whose)h
+(w)o(ork)e(I'v)o(e)105 1562 y(built|Don)k(Kn)o(uth,)g(Leslie)g(Lamp)q
+(ort,)f(Rainer)h(Sc)o(h\177)-23 b(opf,)18 b(F)l(rank)f(Mittelbac)o(h,)i
+(T)l(rev)o(or)e(Darrell)h(and)105 1619 y(others|is)e(imp)q(ossible)i
+(to)d(quan)o(tify)l(.)22 b(I)16 b(wish)h(to)e(tak)o(e)g(this)h(opp)q
+(ortunit)o(y)g(to)f(thank)h(them,)f(and)h(also)105 1675
+y(John)j(Ra)o(wnsley)l(,)h(who)e(pro)o(vided)i(the)e(p)q(ort)h(to)f(L)
+982 1669 y Fw(a)1003 1675 y FD(T)1028 1689 y(E)1053 1675
+y(X2)1110 1682 y Ft(")1128 1675 y FD(.)30 b(I)19 b(also)f(thank)h(Al)g
+(Marden,)g(the)f(F)l(ound-)105 1732 y(ing)h(Director)f(of)f(the)i
+(Geometry)e(Cen)o(ter,)h(for)g(creating)g(the)g(conditions)i(needed)f
+(for)f(this)g(w)o(ork)g(to)105 1788 y(happ)q(en.)105
+1914 y FE(2.)24 b(Ov)n(erall)18 b(Organization)105 2015
+y FD(In)26 b(order)e(to)g(use)i(this)f(st)o(yle,)i(y)o(ou)e(need)g(to)g
+(b)q(e)g(running)h(a)f(v)o(ersion)g(of)f(L)1495 2009
+y Fw(a)1516 2015 y FD(T)1541 2029 y(E)1567 2015 y(X)h(that)f(supp)q
+(orts)105 2072 y(the)g(so-called)i(new)f(fon)o(t)e(selection)j(sc)o
+(heme)f(\(NFSS\),)f(due)h(to)e(F)l(rank)h(Mittelbac)o(h)h(and)g(Rainer)
+105 2128 y(Sc)o(h\177)-23 b(opf.)34 b(If)19 b(y)o(our)h(v)o(ersion)g
+(of)f(L)668 2122 y Fw(a)689 2128 y FD(T)714 2142 y(E)739
+2128 y(X)h(is)g(L)855 2122 y Fw(a)876 2128 y FD(T)901
+2142 y(E)927 2128 y(X2)984 2135 y Ft(")1001 2128 y FD(,)h(y)o(ou)e(are)
+h(automatically)g(using)g(NFSS.)g(If)f(y)o(our)105 2185
+y(v)o(ersion)i(is)h(L)329 2179 y Fw(a)350 2185 y FD(T)375
+2198 y(E)401 2185 y(X2.09,)f(y)o(ou)g(m)o(ust)g(c)o(hec)o(k)g(whether)g
+(it)h(supp)q(orts)f(NFSS.)g(Start)g(L)1597 2179 y Fw(a)1618
+2185 y FD(T)1643 2198 y(E)1668 2185 y(X)g(and)h(t)o(yp)q(e)105
+2241 y FB(\\show\\selectfont)p FD(.)c(If)d(the)g(resp)q(onse)h
+(includes)147 2335 y Fs(>)21 b(\\selectfont=undefi)o(ned.)105
+2435 y FD(this)12 b(is)g(the)g(wrong)f(L)452 2429 y Fw(a)473
+2435 y FD(T)498 2448 y(E)523 2435 y(X.)g(Don't)g(despair)h(y)o(et;)g
+(the)g(righ)o(t)f(L)1138 2429 y Fw(a)1159 2435 y FD(T)1184
+2448 y(E)1210 2435 y(X)g(ma)o(y)g(b)q(e)h(a)o(v)m(ailable)i(at)d(y)o
+(our)g(site,)h(but)105 2491 y(under)19 b(a)e(di\013eren)o(t)h(name|try)
+g FB(amslatex)p FD(,)f(or)g(ask)g(y)o(our)h(lo)q(cal)h(guru.)27
+b(\(Strictly)19 b(sp)q(eaking,)g FA(A)1813 2501 y(M)1862
+2491 y(S)p FD(-)105 2548 y(L)117 2542 y Fw(a)138 2548
+y FD(T)163 2561 y(E)189 2548 y(X)e([Ame])g(is)h(a)f(set)h(of)f(L)603
+2542 y Fw(a)624 2548 y FD(T)649 2561 y(E)674 2548 y(X)h(st)o(yle)f
+(\014les)i(that)e(em)o(ulate)g FA(A)1229 2557 y(M)1279
+2548 y(S)p FD(-T)1347 2557 y(E)1372 2548 y(X.)g(Since)i(their)f(use)g
+(requires)105 2604 y(NFSS)d(and)g(the)f(necessary)h(mo)q(di\014cations)
+h(used)f(to)f(b)q(e)h(supplied)i(with)e(the)g FA(A)1486
+2614 y(M)1536 2604 y(S)p FD(-L)1591 2598 y Fw(a)1612
+2604 y FD(T)1637 2618 y(E)1662 2604 y(X)g(st)o(yle)f(\014les,)105
+2729 y(Revision:)22 b(1.12)1029 b(Date:)19 b(95/07/03)13
+b(15:57:22)p eop
+%%Page: 3 3
+3 2 bop 105 -25 a Fz(3.)17 b(Installation)1546 b(3)-225
+116 y FL(\045)10 b(Installation)-225 145 y(calling)j
+Fy(geom)-225 174 y FL(Section)d(\\Installation")-225
+203 y(\045)h(Ov)o(erall)i(Organiza-)-183 232 y(tion)105
+120 y FD(the)18 b(name)g(is)h(sometimes)f(used)g(for)g(L)773
+114 y Fw(a)794 120 y FD(T)819 134 y(E)844 120 y(X+NFSS.\))g(If)h(y)o
+(ou)e(can't)h(\014nd)h(L)1436 114 y Fw(a)1457 120 y FD(T)1482
+134 y(E)1507 120 y(X+NFSS)g(at)e(all,)j(see)105 177 y(further)15
+b(instructions)h(in)g(Section)g(3.)188 233 y(Unlik)o(e)21
+b(most)e(other)g(L)586 227 y Fw(a)607 233 y FD(T)632
+247 y(E)658 233 y(X)h(st)o(yles,)g FB(geom)g FD(comes)f(in)i(sev)o
+(eral)f(\014les,)h(dev)o(oted)f(to)f(di\013eren)o(t)h(ca-)105
+289 y(pabilities)g(suc)o(h)d(as)g(cross-referencing,)h(\014gures,)g
+(indexing)h(and)e(so)g(on.)26 b(The)17 b(\014les)h(curren)o(tly)g(in)g
+(the)105 346 y(distribution)f(are:)105 427 y Fs(dvips.chg)105
+476 y(geom.sty)105 526 y(geomar10.sty)105 576 y(geomar11.sty)105
+626 y(geomar12.sty)105 676 y(geomart.sty)105 725 y(geombk10.sty)105
+775 y(geombk11.sty)105 825 y(geombk12.sty)490 427 y Fr(driv)o(er)d(dep)
+q(endencies)490 476 y(master)g(\014le)490 526 y(c)o(hanges)h(to)e
+Fs(art10.sty)490 576 y Fr(c)o(hanges)i(to)e Fs(art11.sty)490
+626 y Fr(c)o(hanges)i(to)e Fs(art12.sty)490 676 y Fr(c)o(hanges)i(to)e
+Fs(article.sty)490 725 y Fr(c)o(hanges)i(to)e Fs(book10.sty)490
+775 y Fr(c)o(hanges)i(to)e Fs(book11.sty)490 825 y Fr(c)o(hanges)i(to)e
+Fs(book12.sty)1058 427 y(geombook.sty)1058 476 y(geomenv.sty)1058
+526 y(geomeqns.sty)1058 576 y(geomfig.sty)1058 626 y(geomfnt.sty)1058
+676 y(geomindx.sty)1058 725 y(geompsfi.sty)1058 775 y(multicol.doc)1058
+825 y(multicol.sty)1443 427 y Fr(c)o(hanges)h(to)g Fs(book.sty)1443
+476 y Fr(en)o(vironmen)o(ts)1443 526 y(option)f(\014le)1443
+576 y(high-lev)o(el)g(\014gure)h(supp)q(ort)1443 626
+y(fon)o(ts)g(and)f(sp)q(ecial)h(sym)o(b)q(ols)1443 676
+y(index)g(and)f(glossary)1443 725 y(P)o(ostScript)i(\014gure)f(supp)q
+(ort)1443 775 y(source)h(for)f Fs(multicol.sty)1443 825
+y Fr(t)o(w)o(o-column)e(formatting)188 938 y FD(The)17
+b(\014le)g FB(geom.sty)e FD(is)i(the)f(master,)g(and)g(it)h(is)f(read)h
+(in)g(when)g FB(geom)e FD(is)i(called)h(as)e(an)g(option)h(to)105
+995 y(a)i(main)h(do)q(cumen)o(t)g(st)o(yle,)g(whic)o(h)g(can)g(b)q(e)g
+(either)g FB(book)f FD(or)g FB(article)p FD(.)31 b(That)19
+b(is,)i(to)d(use)i(the)g(stu\013)105 1051 y(describ)q(ed)d(in)f(this)g
+(do)q(cumen)o(t,)f(y)o(our)g(text)f(\014le)j(should)f(start)e(with)h(a)
+g(line)i(suc)o(h)f(as)147 1146 y Fs(\\documentstyle[)o(12pt,)o(geom,)o
+(...]{)o(book)o(})105 1248 y FD(When)e FB(geom.sty)f
+FD(is)i(loaded)f(in,)h(it)f(guesses)g(what)g(y)o(our)f(main)h(st)o(yle)
+g(is,)h(and)f(reads)g(in)g(some)g(c)o(hanges)105 1304
+y(to)h(that)f(st)o(yle,)h(con)o(tained)h(in)g(the)f(\014les)h
+FB(geombook.sty)p FD(,)d FB(geombk12.sty)p FD(,)h(and)h(so)g(on.)188
+1360 y(The)h(\014le)h FB(multicol.sty)d FD(is)i(part)f(of)g(the)h(pac)o
+(k)m(age)g(\014les)g(dev)o(elop)q(ed)i(b)o(y)d(F)l(rank)g(Mittelbac)o
+(h)i(and)105 1417 y(Rainer)i(Sc)o(h\177)-23 b(opf)18
+b(at)g(the)g(Univ)o(ersit)o(y)h(of)e(Mainz.)29 b(It)18
+b(is)h(accompanied)g(b)o(y)f FB(multicol.doc)p FD(,)f(whic)o(h)h(is)105
+1473 y(a)g(\\source")g(\014le)h(with)g(do)q(cumen)o(tation.)30
+b(T)l(o)18 b(obtain)h(more)f(of)g(the)g(excellen)o(t)i(soft)o(w)o(are)d
+(written)h(b)o(y)105 1530 y(Mittelbac)o(h)e(and)f(Sc)o(h\177)-23
+b(opf,)15 b(c)o(hec)o(k)h(the)f(CT)l(AN)g(arc)o(hiv)o(es)h(\(see)f(the)
+g(Installation)h(section)g(b)q(elo)o(w\).)188 1586 y(The)k(rest)g(of)g
+(this)g(do)q(cumen)o(t)h(describ)q(es)h(the)e(installation)h(of)f
+FB(geom)g FD(\(skip)g(if)h(it's)f(already)g(in-)105 1643
+y(stalled\),)j(its)f(ma)s(jor)e(features,)i(and)g(ho)o(w)e(y)o(ou)i
+(can)f(tak)o(e)g(adv)m(an)o(tage)g(of)g(them)g(and)h(\(sometimes\))105
+1699 y(mo)q(dify)17 b(them.)25 b(Some)17 b(material)g(that)f(is)i
+(either)f(v)o(ery)g(tec)o(hnical)h(or)e(unlik)o(ely)k(to)c(b)q(e)h
+(needed)h(except)105 1756 y(under)e(un)o(usual)g(circumstances)g(is)g
+(prin)o(ter)f(in)h(smaller)g(t)o(yp)q(e)g(and)f(in)o(tro)q(duced)h(b)o
+(y)g(an)f(asterisk)g FA(\003)p FD(.)105 1882 y FE(3.)24
+b(Installation)105 1983 y FD(Y)l(ou)e(only)f(need)i(to)d(read)i(this)f
+(section)h(if)g(y)o(ou)f(are)g(in)h(c)o(harge)f(of)g(installing)j
+FB(geom)c FD(at)h(y)o(our)g(site.)105 2040 y(Installation)16
+b(is)f(v)o(ery)f(simple)i(if)f(y)o(our)f(L)787 2034 y
+Fw(a)808 2040 y FD(T)833 2053 y(E)858 2040 y(X)h(supp)q(orts)g(NFSS)f
+(and)h(y)o(our)f(T)1437 2049 y(E)1463 2040 y(X-to-P)o(ostScript)g(driv)
+o(er)105 2096 y(is)i(T)l(om)f(Rokic)o(ki's)h FB(dvips)e
+FD([Rok].)188 2152 y(T)l(o)g(c)o(hec)o(k)h(whether)g(y)o(ou)g(ha)o(v)o
+(e)f(L)752 2146 y Fw(a)773 2152 y FD(T)798 2166 y(E)824
+2152 y(X+NFSS,)h(see)g(the)f(b)q(eginning)j(of)e(Section)g(2.)20
+b(If)14 b(y)o(ou)h(don't,)105 2209 y(it's)e(time)h(to)f(switc)o(h)g(o)o
+(v)o(er)g(to)g(L)635 2203 y Fw(a)656 2209 y FD(T)681
+2223 y(E)706 2209 y(X2)763 2216 y Ft(")781 2209 y FD(.)19
+b(Get)13 b(it)h(b)o(y)f(ftp)g(from)g(one)h(of)f(the)g(w)o(orldwide)h
+(CT)l(AN)g(arc)o(hiv)o(es)105 2265 y(\(curren)o(tly)h
+FB(pip.shsu.edu)p FD(,)f FB(ftp.uni-stuttgart.de)p FD(,)e(and)j
+FB(tex.ac.uk)p FD(\).)188 2322 y(If)g(y)o(our)g(driv)o(er)g(is)g(not)g
+FB(dvips)p FD(,)e(y)o(ou)i(ha)o(v)o(e)f(t)o(w)o(o)g(c)o(hoices:)21
+b(either)15 b(install)h FB(dvips)p FD(,)e(whic)o(h)i(is)f(almost)105
+2378 y(certainly)22 b(a)f(go)q(o)q(d)g(idea)h(\(get)e(it)i(b)o(y)f(ftp)
+g(from)f(a)h(CT)l(AN)g(arc)o(hiv)o(e\);)j(or)c(mak)o(e)h(a)g(cop)o(y)g
+(of)g(the)g(\014le)105 2435 y FB(dvips.chg)12 b FD(in)i(this)f
+(distribution,)i(and)e(mo)q(dify)h(it)g(so)e(it)i(writes)f(the)g
+FB(\\special)f FD(commands)h(required)105 2491 y(b)o(y)i(y)o(our)g
+(driv)o(er.)21 b(If)15 b(y)o(ou)g(adapt)g FB(dvips.chg)f
+FD(for)h(y)o(our)g(driv)o(er,)g(giv)o(e)g(the)h(new)f(\014le)i(a)e
+(di\013eren)o(t)g(name,)105 2548 y(and)i(replace)h(with)f(this)g(name)f
+(all)i(o)q(ccurrences)g(of)e FB(dvips.chg)f FD(in)j(the)f(rest)f(of)g
+(this)h(section.)25 b(Also,)105 2604 y(please)16 b(send)g(me)f(a)g(cop)
+o(y)g(of)g(the)g(\014le,)h(so)f(I)g(can)h(include)h(it)f(in)g(future)f
+(distributions.)105 2729 y(Revision:)22 b(1.12)1029 b(Date:)19
+b(95/07/03)13 b(15:57:22)p eop
+%%Page: 4 4
+4 3 bop 105 -25 a Fz(4.)17 b(No)c(More)g(F)m(ragile)h(Commands)1261
+b(4)-225 116 y FL(Section)15 b(\\No)-183 145 y(More)e(F)n(ragile)-183
+174 y(Commands")188 120 y FD(As)18 b(I)h(w)o(as)e(sa)o(ying)h(b)q
+(efore)h(I)f(got)g(sidetrac)o(k)o(ed,)h(installation)g(is)g(simple.)30
+b(If)19 b(y)o(ou're)e(on)h(a)g(UNIX)105 177 y(system,)f(edit)g(the)h
+FB(Makefile)d FD(to)i(mak)o(e)f(sure)i(the)f(pathnames)g(are)f(correct)
+h(for)f(y)o(our)h(site,)g(and)h(run)105 233 y FB(make)23
+b(install)p FD(.)c(If)d(y)o(ou're)e(not)h(on)g(a)g(UNIX)h(system,)e
+(here)i(are)f(the)g(step-b)o(y-step)h(instructions:)188
+289 y(Place)g(the)f(\014les)h(listed)g(in)g(the)f(previous)g(section)h
+(\(all)g(the)f(distribution)h(\014les)g(that)e(end)i(in)g
+FB(.sty)p FD(,)105 346 y FB(.chg)j FD(or)h FB(.doc)p
+FD(\))f(in)i(the)f(system-wide)h(directory)f(for)f(T)1114
+356 y(E)1140 346 y(X)h(input)h(\014les.)35 b(Create)20
+b(a)f(sym)o(b)q(olic)j(link)105 402 y FB(driver.chg)c
+FD(in)j(this)f(directory)l(,)h(p)q(oin)o(ting)g(to)e
+FB(dvips.chg)p FD(.)33 b(\(If)20 b(y)o(our)f(system)g(do)q(es)h(not)g
+(supp)q(ort)105 459 y(sym)o(b)q(olic)c(links,)h(cop)o(y)e
+FB(dvips.chg)f FD(to)g FB(driver.chg)p FD(.\))188 515
+y(Cop)o(y)h(the)h(\014le)h FB(mathlabels.orig)d FD(to)h
+FB(mathlabels)g FD(and)h(edit)g(its)h(\014rst)e(line)j(to)d(b)q(e)h
+(the)g(correct)105 572 y(pathname)f(of)g(the)h(p)q(erl)g(executable)h
+(on)e(y)o(our)g(system.)20 b(\(If)15 b(y)o(ou)g(don't)g(ha)o(v)o(e)g
+FB(perl)g FD(at)f(all,)i(y)o(ou)f(don't)105 628 y(kno)o(w)10
+b(what)h(y)o(ou're)f(missing|get)i(it)f(as)g(so)q(on)f(as)h(p)q
+(ossible.\))20 b(Decide)12 b(on)f(a)f(directory)h(where)g(y)o(ou)g(w)o
+(an)o(t)105 685 y(to)j(install)i(the)f(auxiliary)h(scripts)g
+FB(mathlabels)d FD(and)i FB(geomfix)f FD(\(whic)o(h)h(are)f(used)i(b)o
+(y)f FB(mathfig)p FD(\),)e(and)105 741 y(put)i(copies)g(of)f(them)h
+(there.)20 b(Cop)o(y)14 b(the)h(\014le)g FB(mathfig.orig)e
+FD(to)h FB(mathfig)g FD(and)h(edit)g(the)g(lines)h(at)e(the)105
+798 y(top)h(to)g(sp)q(ecify)h(the)g(lo)q(cation)g(of)f(the)g
+FB(mathlabels)f FD(and)i FB(geomfix)e FD(scripts,)h(then)h(cop)o(y)f
+FB(mathlabels)105 854 y FD(to)g(a)f(system-wide)i(directory)g(for)e
+(executables.)188 910 y(Finally)l(,)20 b(cop)o(y)d FB(math.pro)g
+FD(and)h FB(illustrator.pro)d FD(in)o(to)j(the)g(directory)g(where)g(y)
+o(our)f(T)1775 920 y(E)1800 910 y(X-to-)105 967 y(P)o(ostScript)d(driv)
+o(er)h(lo)q(oks)g(for)e(prolog)i(\014les.)20 b(\(This)15
+b(assumes)f(y)o(our)g(driv)o(er)h(supp)q(orts)f(the)h(inclusion)h(of)
+105 1023 y(prolog)f(\014les;)h(switc)o(h)f(to)g FB(dvips)f
+FD(if)i(it)f(do)q(esn't.\))105 1149 y FE(4.)24 b(No)19
+b(More)f(F)-5 b(ragile)18 b(Commands)105 1251 y FD(In)13
+b(standard)e(L)357 1245 y Fw(a)378 1251 y FD(T)403 1264
+y(E)429 1251 y(X,)g(commands)h(suc)o(h)g(as)g FB(\\section)f
+FD(ha)o(v)o(e)g Fv(moving)i(ar)n(guments)p FD(,)f(that)f(is,)i(argumen)
+o(ts)105 1307 y(that)k(migrate)g(to)f(an)i(auxiliary)g(\014le)h
+Fv(jobname)p FB(.aux)d FD(to)h(b)q(e)h(used)g(later)f(in)i(t)o(yp)q
+(esetting)e(the)h(table)f(of)105 1364 y(con)o(ten)o(ts)g(and)h(so)f(on)
+h([Lam86,)f(33{34].)25 b(In)19 b(this)f(pro)q(cess,)g(macros)f(in)i
+(the)e(b)q(o)q(dy)i(of)e(the)h(argumen)o(t)105 1420 y(are)d(expanded,)h
+(so)f(that)f(when)i(y)o(ou)f(t)o(yp)q(e,)g(sa)o(y)l(,)147
+1514 y Fs(\\section{Annoyi)o(ng)k(\\TeX)i(nicalities})105
+1615 y FD(what)15 b(go)q(es)g(in)o(to)g(the)g(auxiliary)i(\014le)f(is)g
+(something)f(lik)o(e)147 1710 y Fs(\\@writefile{toc)o(}{\\st)o(ring\\)o
+(conte)o(ntsl)o(ine\\s)o(pace)j({chapter}{\\string\\n)o(umber)o(line\\)
+o(space)147 1760 y({1}Annoying)h(T\\kern)i(-.1667em\\lower)d
+(.5ex\\hbox)i({E}\\kern)h(-.125emXnicalit)o(ies}{)o(1}})105
+1861 y FD(where)15 b(the)h(second)f(line)i(con)o(tains)f(the)f
+(expansion)h(of)f(the)g(macro)g FB(\\TeX)p FD(.)188 1917
+y(There)i(are)g(sev)o(eral)g(problems)g(with)g(this.)25
+b(First,)17 b(the)g(expansion,)h(and)f(consequen)o(tly)g(the)g(line)105
+1974 y(where)12 b(it)h(o)q(ccurs)f(in)h(the)g(auxiliary)g(\014le,)h
+(can)e(b)q(e)h(v)o(ery)f(long,)h(whic)o(h)g(in)g(some)f(implemen)o
+(tations)h(means)105 2030 y(that)j(T)230 2040 y(E)255
+2030 y(X)h(cannot)f(read)g(the)h(line)h(bac)o(k)f(in.)24
+b(Secondly)l(,)18 b(the)f(expansion)g(migh)o(t)g(not)f(mak)o(e)g
+(sense,)g(or)105 2086 y(migh)o(t)f(do)f(the)h(wrong)f(thing,)h(at)g
+(the)g(time)g(when)g(it)g(is)g(read)g(in)h(again.)k(Ev)o(en)14
+b(w)o(orse,)g(the)h(expansion)105 2143 y(of)g FB(\\section{\\small)22
+b(foo})p FD(,)14 b(for)g(example,)i(actually)g(causes)f(an)h
+(in\014nite)h(lo)q(op.)105 2216 y Fq(\003)78 b Fr(Exp)q(erienced)19
+b(users)e(of)f(T)622 2225 y(E)645 2216 y(X)h(who)f(w)o(an)o(t)f(to)i
+(kno)o(w)e(wh)o(y)h(this)h(happ)q(ens)g(can)g(try)f(t)o(yping)g(the)h
+(follo)o(wing)105 2266 y(lines)d(to)g(plain)e(T)377 2275
+y(E)400 2266 y(X:)147 2360 y Fs(\\def\\foo{\\let\\b)o(ar\\fo)o(o})147
+2410 y(\\foo)435 b(\045Nothing)20 b(much)h(happens)147
+2460 y(\\immediate\\writ)o(e0{\\f)o(oo})e(\045Disaster)g(strikes)105
+2554 y Fr(The)13 b(problem)e(is)h(that)h(at)f(the)h(time)f(of)f(the)i
+Fs(\\write)f Fr(no)g(assignmen)o(t)f(is)i(taking)e(place,)i(so)f(the)h
+Fs(\\foo)f Fr(at)g(the)h(end)105 2604 y(of)g(the)i(expansion)f(is)f
+(not)h(handled)g(as)g(a)f(literal.)105 2729 y FD(Revision:)22
+b(1.12)1029 b(Date:)19 b(95/07/03)13 b(15:57:22)p eop
+%%Page: 5 5
+5 4 bop 105 -25 a Fz(5.)17 b(Lab)q(els)d(and)g(Cross-References)1257
+b(5)-225 116 y FL(\045)13 b(Theorems)d(and)-183 145 y(Their)g(F)n
+(riends)-225 174 y(\045)g(P)o(ostScript)i(Figures)-225
+203 y(Section)f(\\Lab)q(els)h(and)-183 232 y(Cross-References")-225
+261 y(\045)h(Theorems)d(and)-183 290 y(Their)g(F)n(riends)188
+120 y FD(Standard)k(L)396 114 y Fw(a)417 120 y FD(T)442
+134 y(E)468 120 y(X's)f(solution)i(to)f(these)g(problems)h(is)f(for)g
+(the)g(user)g(to)f(precede)j(\\fragile")e(macros)105
+177 y(with)19 b(the)h FB(\\protect)d FD(command)i([Lam86,)g(33{34].)30
+b(By)19 b(con)o(trast,)f(in)i(the)f FB(geom)g FD(st)o(yle,)h(y)o(ou)e
+(don't)105 233 y(ha)o(v)o(e)d(to)f(w)o(orry)g(ab)q(out)h(\\fragile")h
+(commands)f(in)h(the)f(follo)o(wing)h(situations:)143
+323 y FA(\017)22 b FD(in)16 b(the)f(argumen)o(ts)g(of)f(the)i
+(sectioning)g(commands)f FB(\\chapter)p FD(,)f FB(\\section)p
+FD(,)f(and)j(so)f(on;)143 398 y FA(\017)22 b FD(in)16
+b(the)f(optional)h(argumen)o(t)f(to)f(the)h FB(theorem)g
+FD(en)o(vironmen)o(t)g(and)g(its)h(relativ)o(es)f(\(Section)h(6\);)143
+472 y FA(\017)22 b FD(in)16 b(the)f(argumen)o(ts)g(to)f
+FB(\\caption)p FD(,)g FB(\\fig)h FD(and)g(its)g(relativ)o(es)h
+(\(Section)g(10\);)143 546 y FA(\017)22 b FD(in)16 b(the)f(argumen)o
+(ts)g(to)f FB(\\markright)g FD(and)h FB(\\markboth)p
+FD(;)143 621 y FA(\017)22 b FD(in)16 b(the)f(argumen)o(t)g(to)f
+FB(\\cite)p FD(.)105 711 y(This)g(co)o(v)o(ers)e(almost)h(all)h(imp)q
+(ortan)o(t)e(situations)i(where)f(fragile)h(commands)f(need)g(to)g(b)q
+(e)h FB(\\protect)p FD(ed)105 768 y([Lam86,)20 b(151].)35
+b(In)21 b(future)f(v)o(ersions)h(I)g(hop)q(e)g(to)f(extend)h(this)f(p)q
+(ermissiv)o(eness)j(to)c(the)i(remaining)105 824 y(situations.)188
+880 y(Notice,)g(ho)o(w)o(ev)o(er,)f(that)f(the)h FB(\\verb|...|)f
+FD(construction)h(con)o(tin)o(ues)g(to)f(b)q(e)i(forbidden)g(inside)105
+937 y(argumen)o(ts)15 b(to)g(most)h(commands.)22 b(This)16
+b(is)h(due)f(to)f(reasons)h(deeply)h(em)o(b)q(edded)h(in)f(T)1633
+947 y(E)1658 937 y(X)f(itself,)h(and)105 993 y(is)f(unlik)o(ely)h(ev)o
+(er)e(to)g(c)o(hange.)105 1067 y Fq(\003)77 b Fr(In)14
+b(some)g(circumstances)h(y)o(ou)g(migh)o(t)d(w)o(an)o(t)i(the)i(old)d
+(L)1080 1062 y Fp(a)1099 1067 y Fr(T)1122 1079 y(E)1146
+1067 y(X)i(b)q(eha)o(vior)f(of)g(macro)f(expansion)i(inside)f(the)105
+1116 y(argumen)o(t)g(of)g Fs(\\chapter)p Fr(,)f(sa)o(y)m(.)20
+b(F)m(or)14 b(instance,)i(y)o(ou)e(migh)o(t)f(ha)o(v)o(e)i(a)f(lo)q
+(cally)f(de\014ned)j(macro)e(whose)h(de\014nition)105
+1166 y(will)g(b)q(e)i(unkno)o(wn)f(at)h(the)g(time)e(the)i(table)f(of)g
+(con)o(ten)o(ts)i(is)e(read.)26 b(In)17 b(this)f(case)i(y)o(ou)e(can)g
+(use)i(the)f(follo)o(wing)105 1216 y(construction:)147
+1311 y Fs(\\edef\\mystring{)o(...})h(\045)k(where)f(...)g(stands)f(for)
+i(the)f(argument)f(to)h(be)h(expanded)147 1361 y(\\expandafter\\ch)o
+(apter)o(\\expa)o(ndaft)o(er{\\)o(mystr)o(ing})105 1486
+y FE(5.)i(Lab)r(els)18 b(and)h(Cross-References)105 1588
+y FD(In)i(standard)f(L)374 1582 y Fw(a)395 1588 y FD(T)420
+1602 y(E)445 1588 y(X,)g(the)g(argumen)o(t)g(to)f(the)i
+FB(\\label)e FD(command)h(cannot)g(con)o(tain)g(an)o(ything)h(but)105
+1644 y(c)o(haracters)10 b(\(after)g(expansion\).)19 b(In)12
+b(the)f FB(geom)g FD(st)o(yle,)g(this)h(restriction)f(is)h(lifted,)h
+(so)d(lab)q(els)j(con)o(tain)e(just)105 1701 y(ab)q(out)17
+b(an)o(ything.)25 b(F)l(or)16 b(example,)h FB(\\label{\\TeX})f
+FD(and)h FB(\\label{Isometries)k(of)j($\\bold)f(R^2$})105
+1757 y FD(are)15 b(acceptable.)21 b(Macros)14 b(are)h(no)g(longer)g
+(expanded.)188 1814 y(One)j(adv)m(an)o(tage)g(of)f(this)h(\015exibilit)
+o(y)i(is)f(that)e(sub)q(divisions)j(can)e(b)q(e)g(automatically)g(lab)q
+(eled)i(b)o(y)105 1870 y(their)e(titles.)28 b(In)18 b(the)f
+FB(geom)g FD(format,)g(b)o(y)g(default,)i(ev)o(ery)e(sectioning)i
+(command)e(suc)o(h)h(as)f FB(\\section)105 1927 y FD(generates)g(a)h
+(lab)q(el)h(with)f(its)g(title.)29 b(If)18 b(this)g(feature)f(causes)h
+(y)o(ou)g(to)f(run)h(out)f(of)h(memory)l(,)f(y)o(ou)h(can)105
+1983 y(turn)d(it)h(o\013)e(b)o(y)h(sa)o(ying)g FB(\\autolabelfalse)e
+FD(in)j(y)o(our)f(do)q(cumen)o(t's)g(pream)o(ble.)188
+2040 y(T)l(o)31 b(refer)g(to)f(the)h(place)h(where)f(a)g(lab)q(el)i(o)q
+(ccurs,)i(y)o(ou)30 b(can)i(still)g(use)f(the)h FB(\\ref)e
+FD(com-)105 2096 y(mand,)20 b(as)f(in)i(standard)e(L)573
+2090 y Fw(a)594 2096 y FD(T)619 2110 y(E)644 2096 y(X.)g(This)h(giv)o
+(es)g(a)f(bald)h(n)o(um)o(b)q(er|for)g(example,)h FB(\\ref{Isometries)
+105 2152 y(of)j($\\bold)f(R^2$})g FD(will)j(prin)o(t)e(\\8.3")f(if)i
+(Section)g(8.3)e(starts)g(with)h FB(\\section{Isometries)d(of)105
+2209 y($\\bold)i(R^2$})15 b FD(while)h(automatic)f(lab)q(eling)i(is)f
+(in)g(e\013ect.)188 2265 y(A)g(new)g(feature)f(is)i(that)e(y)o(ou)g
+(can)h(replace)h FB(\\ref)e FD(b)o(y)h FB(\\fullref)e
+FD(or)i FB(\\Fullref)p FD(,)e(to)h(get)h(\\section)105
+2322 y(8.3")j(or)h(\\Section)i(8.3",)e(resp)q(ectiv)o(ely)l(.)38
+b(The)21 b(w)o(a)o(y)e FB(\\fullref)g FD(w)o(orks)h(is)h(b)o(y)g
+(storing)f(in)h(a)g(certain)105 2378 y(register)c(the)g(t)o(yp)q(e)h
+(of)e(en)o(vironmen)o(t)i(in)g(whic)o(h)g(a)f(lab)q(el)i(w)o(as)d
+(created.)26 b(Th)o(us,)17 b(when)h(a)f(new)g(section)105
+2435 y(starts,)d(this)i(register)g(gets)f(the)h(v)m(alue)h(\\section".)
+k(When)16 b(a)f FB(\\begin)g FD(command)h(in)o(tro)q(ducing)h(one)e(of)
+105 2491 y(the)g(en)o(vironmen)o(ts)f(describ)q(ed)j(in)e(Section)g(6)f
+(is)h(encoun)o(tered)h(inside)g(this)f(section,)g(the)f(register)g
+(gets)105 2548 y(up)q(dated)j(to)e(the)h(t)o(yp)q(e)g(of)f(that)g(en)o
+(vironmen)o(t,)h(sa)o(y)f(\\theorem".)21 b(It)16 b(rev)o(erts)f(to)g
+(\\section")h(when)g(the)105 2604 y(matc)o(hing)f FB(\\end)g
+FD(command)g(is)h(read.)105 2729 y(Revision:)22 b(1.12)1029
+b(Date:)19 b(95/07/03)13 b(15:57:22)p eop
+%%Page: 6 6
+6 5 bop 105 -25 a Fz(6.)17 b(Theorems)c(and)h(Their)g(F)m(riends)1256
+b(6)-225 116 y FL(Theorem)8 b(\\Erd\177)-15 b(os")-225
+145 y Fx(Kur)o(dish)-225 174 y FL(\045)10 b(Erd\177)-15
+b(os)-225 203 y(\045)10 b(circle)-225 232 y(\045)g(Kurdish)-225
+261 y(Erd\177)-15 b(os)-225 290 y(\045)10 b(circle)-225
+319 y(\045)g(circle)-225 348 y(Section)i(\\Theorems)-183
+377 y(and)e(Their)g(F)n(riends")188 120 y FD(Ev)o(en)17
+b(if)h(y)o(ou)e(ha)o(v)o(e)h(nested)g(en)o(vironmen)o(ts,)g(lab)q(els)i
+(placed)f(in)g(eac)o(h)f(of)g(them)g(are)f(assigned)i(the)105
+177 y(correct)d(t)o(yp)q(e.)20 b(Consider)15 b(the)h(input)147
+276 y Fs(\\newtheorem[{\\p)o(ar\\la)o(rge}{)o(\\it}])o({the)o(orem})o
+({Theo)o(rem}[)o(secti)o(on])147 326 y(\\equationwith{t)o(heore)o(m})
+389 b(\045)22 b(These)f(two)g(lines)g(are)g(explained)147
+376 y(...)805 b(\045)22 b(in)f(later)g(sections)147 426
+y(\\begin{theorem})o([Erd\\)o("os])147 475 y(A)g(theorem)f(both)h(deep)
+g(and)h(profound)e(/)h(Is)h(that)f(a)g(circle)g(is)g(round:)147
+525 y(\\begin{equation)o(})147 575 y(\\mathrm{curvatu)o(re}\\,)o
+(S^1=\\)o(mathr)o(m)e({const}.)147 625 y(\\label{circle})147
+675 y(\\end{equation})147 725 y(In)i(a)g(paper)g(by)h(Erd\\"os)e(/)i
+(Written)e(in)h(Kurdish)g(/)g(A)h(counterexample)d(is)i(found.)147
+774 y(\\label{Kurdish})147 824 y(\\end{theorem})105 930
+y FD(whic)o(h)16 b(giv)o(es)105 1038 y FE(Theorem)c(5.1)h(\(Erd\177)-28
+b(os\).)22 b Fo(A)13 b(the)n(or)n(em)g(b)n(oth)g(de)n(ep)h(and)f(pr)n
+(ofound)g(/)g(Is)g(that)h(a)f(cir)n(cle)h(is)g(r)n(ound:)778
+1142 y FH(curv)m(ature)8 b Fn(S)1021 1122 y Fm(1)1055
+1142 y FH(=)14 b(const)p Fn(:)573 b FH(\(5.2\))105 1246
+y Fo(In)18 b(a)f(p)n(ap)n(er)f(by)i(Er)n(d\177)-25 b(os)16
+b(/)h(Written)h(in)g(Kur)n(dish)f(/)g(A)h(c)n(ounter)n(example)g(is)g
+(found.)105 1352 y FD(No)o(w)f FB(\\Fullref{Erd\\"os})e
+FD(giv)o(es)j(\\Theorem)f(5.1",)g FB(\\Fullref{circle})e
+FD(giv)o(es)j(\\Equation)g(5.2",)105 1409 y(and)h FB
+(\\Fullref{Kurdish})d FD(giv)o(es)i(\\Theorem)g(5.1".)29
+b(F)l(urthermore,)18 b FB(\\ref*{Erd\\"os})f FD(giv)o(es)h(\\5.1)105
+1465 y(\(Erd\177)-23 b(os\)",)19 b(that)f(is,)i(it)g(prin)o(ts)f(the)h
+(\(optional\))f(tag)f(asso)q(ciated)i(with)f(theorems)g(and)g(the)h
+(lik)o(e.)33 b(Of)105 1522 y(course)15 b(y)o(ou)g(can)g(also)h(use)f
+FB(\\fullref*)f FD(and)h FB(\\Fullref*)p FD(.)105 1596
+y Fq(\003)73 b Fr(If)11 b(y)o(ou)g(disagree)h(with)f(L)574
+1591 y Fp(a)593 1596 y Fr(T)616 1609 y(E)639 1596 y(X's)g(idea)g(of)g
+(what)g(the)h(lab)q(el)e(t)o(yp)q(e)i(should)f(b)q(e)h(at)f(a)g
+(particular)g(p)q(oin)o(t,)g(y)o(ou)g(can)105 1646 y(o)o(v)o(erride)h
+(is)f(using)g Fs(\\setlabeltype)p Fr(.)k(F)m(or)c(example,)f(if)h(w)o
+(e)h(had)f Fs(\\setlabeltype{form)o(ula})d Fr(righ)o(t)j(b)q(efore)h
+(the)105 1696 y Fs(\\label)f Fr(command)e(in)i(the)i(previous)f
+(example,)f(the)h(result)h(of)e Fs(\\Fullref{circle})e
+Fr(w)o(ould)i(b)q(e)h(\\F)m(orm)o(ula)d(5.2")105 1746
+y(instead)14 b(of)f(\\Equation)h(5.2".)188 1827 y FD(Before)25
+b FB(\\ref)f FD(actually)h(prin)o(ts)g(the)g(n)o(um)o(b)q(er)f(of)h(a)f
+(cross-reference,)j(it)e(applies)h(the)f(macro)105 1883
+y FB(\\preref)17 b FD(to)h(it.)29 b(By)18 b(default,)h(this)g(macro)e
+(do)q(es)i(nothing;)h(but)e(y)o(ou)g(can)g(rede\014ne)h(it)g(to)e(do)h
+(what-)105 1940 y(ev)o(er)i(y)o(ou)f(w)o(an)o(t)g(with)h(the)f(n)o(um)o
+(b)q(er.)34 b(If)20 b(y)o(ou)f(w)o(an)o(t)g(the)h(n)o(um)o(b)q(er)g(to)
+f(app)q(ear)h(uprigh)o(t)g(ev)o(en)g(if)g(the)105 1996
+y(surrounding)c(text)f(is)g(in)h(italics,)h(y)o(ou)e(can)g(sa)o(y)147
+2096 y Fs(\\def\\preref#1{{)o(\\norm)o(alsha)o(pe#1})o(})105
+2202 y FD(The)g(output)g(of)g FB(\\pageref)f FD(and)i(of)e
+FB(\\cite)h FD(is)h(also)f(passed)g(to)g FB(\\pageref)f
+FD(b)q(efore)h(b)q(eing)i(prin)o(ted.)105 2329 y FE(6.)24
+b(Theorems)17 b(and)i(Their)f(F)-5 b(riends)105 2430
+y FD(Standard)13 b(L)312 2424 y Fw(a)333 2430 y FD(T)358
+2444 y(E)383 2430 y(X)g(pro)o(vides)g(the)g FB(\\newtheorem)e
+FD(command)i(to)f(create)g(en)o(vironmen)o(ts)h(for)f(statemen)o(ts)105
+2487 y(lik)o(e)19 b(theorems,)e(lemmas,)h(and)g(so)f(on.)27
+b(The)18 b(basic)g(idea)h(can)f(b)q(e)g(adapted)f(for)g(other)h(t)o(yp)
+q(es)f(of)g(text)105 2543 y(that)c(should)i(stand)f(out,)f(suc)o(h)h
+(an)g(exercises,)h(con)o(v)o(en)o(tions,)f(and)g(so)f(on.)20
+b(Not)13 b(all)i(of)e(these)h(should)h(b)q(e)105 2600
+y(treated)g(t)o(yp)q(ographically)h(the)f(same:)20 b(for)14
+b(example,)i(y)o(ou)f(migh)o(t)g(w)o(an)o(t)f(exercises)i(in)g(smaller)
+g(t)o(yp)q(e.)105 2729 y(Revision:)22 b(1.12)1029 b(Date:)19
+b(95/07/03)13 b(15:57:22)p eop
+%%Page: 7 7
+7 6 bop 105 -25 a Fz(6.)17 b(Theorems)c(and)h(Their)g(F)m(riends)1256
+b(7)-225 116 y FL(\045)14 b(Lab)q(els)g(and)-183 145
+y(Cross-References)-225 174 y(\045)g(Lab)q(els)g(and)-183
+203 y(Cross-References)-225 232 y Fl(\045)e(Erd\177)-17
+b(os)188 120 y FD(The)16 b FB(geom)f FD(st)o(yle)h(extends)g(L)678
+114 y Fw(a)699 120 y FD(T)724 134 y(E)750 120 y(X's)f
+FB(\\newtheorem)g FD(command)g(to)g(allo)o(w)h(y)o(ou)g(to)f(do)h(this)
+g(easily)l(.)105 177 y(Recall)j(from)e([Lam86,)g(58])f(that)h
+FB(\\newtheorem)f FD(has)h(t)o(w)o(o)g(required)h(argumen)o(ts:)24
+b(the)17 b(name)h(of)f(the)105 233 y(new)g(en)o(vironmen)o(t)f(\(sa)o
+(y)g(\\theorem"\),)f(and)h(the)g(text)g(used)h(to)f(in)o(tro)q(duce)h
+(it)g(\(sa)o(y)e(\\Theorem"\).)22 b(In)105 289 y(standard)15
+b(L)307 283 y Fw(a)328 289 y FD(T)353 303 y(E)379 289
+y(X)h(it)g(also)g(tak)o(es)f(an)h(optional)g(argumen)o(t,)f(whose)h
+(meaning)g(dep)q(ends)i(on)e(whether)g(it)105 346 y(comes)f(b)q(efore)h
+(or)e(after)h(the)g(second)h(required)g(argumen)o(t.)188
+402 y(In)e(the)f FB(geom)g FD(st)o(yle,)h(y)o(ou)f(can)g(use)h(y)o(et)f
+(another)g(optional)h(argumen)o(t,)e(righ)o(t)h(after)g
+FB(\\newtheorem)p FD(,)105 459 y(to)k(tell)i(L)256 453
+y Fw(a)277 459 y FD(T)302 473 y(E)327 459 y(X)f(ho)o(w)f(this)h(en)o
+(vironmen)o(t)g(di\013ers)g(from)f(a)g(v)m(anilla)j(theorem-lik)o(e)f
+(en)o(vironmen)o(t.)27 b(This)105 515 y(optional)12 b(argumen)o(t)e
+(should)i(consist)g(of)f(t)o(w)o(o)e(sequences)k(of)e(commands,)g(eac)o
+(h)g(surrounded)h(b)o(y)f(braces,)105 572 y(lik)o(e)16
+b(this:)147 666 y Fs(\\newtheorem[{\\p)o(ar\\la)o(rge}{)o(\\it}])o
+({the)o(orem})o({Theo)o(rem}[)o(secti)o(on])105 766 y
+FD(\(This)f(is)h(the)f(same)g(de\014nition)i(used)f(for)f(the)g
+(example)h(in)g(Section)g(5.\))188 822 y(The)k(\014rst)f(sequence)h(of)
+f(commands)g(in)h(braces,)g FB(\\par\\large)p FD(,)f(will)i(b)q(e)f
+(executed)g(as)f(so)q(on)g(as)105 879 y(L)117 873 y Fw(a)138
+879 y FD(T)163 893 y(E)189 879 y(X)c(sees)h(a)f FB(\\begin{theorem})p
+FD(.)k(This)d(means)g(the)f(theorem)h(will)h(come)e(out)h(in)g(larger)f
+(t)o(yp)q(e)h(\(see)105 935 y(the)h(output)f(in)h(Section)h(5\).)23
+b(L)639 929 y Fw(a)660 935 y FD(T)685 949 y(E)711 935
+y(X)16 b(implicitly)k(starts)15 b(a)h(new)h(lev)o(el)h(of)e(braces)h
+(when)g(it)g(encoun)o(ters)105 992 y(a)e FB(\\begin)f
+FD(command|c)o(hanges)h(inside)i(the)f(en)o(vironmen)o(t)f(are)g(lo)q
+(cal,)g(so)g(the)g FB(\\large)g FD(will)h(cease)g(to)105
+1048 y(ha)o(v)o(e)f(e\013ect)g(at)f(the)i(end)f(of)g(the)g(en)o
+(vironmen)o(t.)188 1105 y(The)i(second)f(sequence)i(of)e(commands)g(is)
+h(inserted)g(righ)o(t)f(after)g(the)g(in)o(tro)q(ductory)h(text)34
+b Fk(The-)105 1161 y(orem)18 b(5.1)g(\(Erd\177)-26 b(os\))p
+FD(.)23 b(It)17 b(a\013ects)e(ev)o(erything)i(from)e(that)g(p)q(oin)o
+(t)i(till)h(the)e(end)h(of)f(the)g(en)o(vironmen)o(t.)105
+1218 y(Here)h(w)o(e'v)o(e)e(used)i FB(\\it)p FD(,)f(so)g(the)h
+(statemen)o(t)e(of)h(the)g(theorem)h(is)f(prin)o(ted)i(in)f(italics.)25
+b(Note)16 b(that,)f(un-)105 1274 y(lik)o(e)i(the)f(standard)f
+FB(article)g FD(and)h FB(book)g FD(st)o(yles,)f FB(geom)h
+FD(do)q(es)g(not)f(italicize)k(theorems)c(b)o(y)h(default.)23
+b(If)105 1331 y(w)o(e)18 b(didn't)g(ha)o(v)o(e)g(the)g
+FB(\\it)f FD(in)i(the)f FB(\\newtheorem)e FD(command,)i(the)g(text)g
+(of)f(the)h(theorem)g(w)o(ould)g(b)q(e)105 1387 y(uprigh)o(t.)105
+1460 y Fq(\003)76 b Fr(Y)m(ou)14 b(can)h(also)f(con)o(trol)g(the)h(app)
+q(earance)h(of)d(the)i(in)o(tro)q(ductory)g(text)g(itself)f(b)o(y)h(c)o
+(hanging)e(the)i(de\014nition)105 1510 y(of)e Fs(\\theoremintro)p
+Fr(,)e(whic)o(h)j(b)o(y)f(default)h(is)147 1604 y Fs(\\def\\theoremint)
+o(ro#1{)o(\\norm)o(alsha)o(pe\\b)o(f#1})105 1698 y Fr(The)g(argumen)o
+(t)f Fs(#1)h Fr(stands)g(for)g(the)g(in)o(tro)q(ductory)g(text.)188
+1777 y FD(Y)l(ou)f(need)h(t)o(w)o(o)d(pairs)i(of)g(braces)g(in)g(the)g
+(new)g(optional)h(argumen)o(t)e(to)g FB(\\newtheorem)p
+FD(,)f(ev)o(en)j(if)f(one)105 1834 y(is)k(empt)o(y)l(.)23
+b(If)17 b(b)q(oth)f(are)h(empt)o(y)l(,)f(the)g(b)q(eha)o(vior)h(is)g
+(the)g(same)f(as)g(if)h(the)f(optional)h(argumen)o(t)f(w)o(eren't)105
+1890 y(there.)188 1947 y(Another)c(enhancemen)o(t)i(to)e
+FB(\\newtheorem)e FD(in)k(the)e FB(geom)g FD(st)o(yle)h(is)g(automatic)
+f(lab)q(eling.)21 b(Supp)q(ose)105 2003 y(y)o(ou)15 b(sa)o(y)147
+2097 y Fs(\\newtheorem{def)o(initi)o(on}[t)o(heore)o(m]{D)o(efini)o
+(tion})105 2197 y FD(\(recall)k(from)e([Lam86,)h(59])f(that)h(the)g
+(use)h(of)e FB([theorem])g FD(causes)i(de\014nitions)h(to)d(b)q(e)i(n)o
+(um)o(b)q(ered)g(in)105 2254 y(the)g(same)g(sequence)i(as)e(theorems,)g
+(assuming)h(the)f FB(theorem)f FD(en)o(vironmen)o(t)i(has)f(b)q(een)i
+(previously)105 2310 y(de\014ned\).)g(No)o(w)14 b(sa)o(ying)147
+2404 y Fs(\\begin{definiti)o(on}[u)o(niver)o(se])147
+2454 y(The)21 b(universe)f(is)h(a)h(Hubble)e(bubble.)147
+2504 y(\\end{definition)o(})105 2604 y FD(prin)o(ts)105
+2729 y(Revision:)i(1.12)1029 b(Date:)19 b(95/07/03)13
+b(15:57:22)p eop
+%%Page: 8 8
+8 7 bop 105 -25 a Fz(7.)17 b(The)c(Pro)q(of)g(En)o(vironmen)o(t)1335
+b(8)-225 116 y FL(Def.)12 b(\\univ)o(erse")-225 145 y(\045)i(Lab)q(els)
+g(and)-183 174 y(Cross-References)-225 203 y(\045)c(univ)o(erse)-225
+232 y(\045)k(Lab)q(els)g(and)-183 261 y(Cross-References)-225
+290 y(\045)c(univ)o(erse)-225 319 y(\045)k(Lab)q(els)g(and)-183
+348 y(Cross-References)-225 377 y(Section)d(\\The)g(Pro)q(of)-183
+406 y(En)o(vironmen)o(t")105 120 y Fk(De\014nition)19
+b(6.1)e(\(univ)o(erse\).)22 b FD(The)15 b(univ)o(erse)i(is)e(a)g
+(Hubble)i(bubble.)105 214 y(and)k(implicitly)j(calls)e
+FB(\\label{universe})p FD(.)34 b(\(As)21 b(men)o(tioned)g(in)h(Section)
+g(5,)f(y)o(ou)g(can)g(turn)g(this)105 270 y(feature)16
+b(o\013)f(b)o(y)h(sa)o(ying)g FB(\\autolabelfalse)p FD(.\))21
+b(The)16 b(en)o(vironmen)o(t)h(kno)o(ws)e(its)h(t)o(yp)q(e)h(at)e(the)h
+(time)h(the)105 327 y(lab)q(el)g(is)f(made,)e(so)h(sa)o(ying)g
+FB(\\Fullref{universe})e FD(will)k(prin)o(t)e(\\De\014nition)i(6.1".)
+105 402 y Fq(\003)86 b Fr(The)24 b(t)o(yp)q(e)g(is)f(usually)g(just)h
+(the)g(en)o(vironmen)o(t)e(name,)j(but)e(it)h(can)f(b)q(e)i(o)o(v)o
+(erridden)f(b)o(y)f(including)105 451 y Fs(\\setlabeltype)10
+b Fr(\(Section)j(5\))g(in)f(the)h(\014rst)h(optional)d(argumen)o(t)g
+(to)i Fs(\\newtheorem)p Fr(.)i(Th)o(us)e(if)f(the)h Fs(definition)105
+501 y Fr(en)o(vironmen)o(t)g(had)h(b)q(een)h(created)g(with)147
+601 y Fs(\\newtheorem[{\\s)o(etlab)o(eltyp)o(e{def)o(.}}{)o(}]{de)o
+(finit)o(ion}[)o(theor)o(em]{D)o(efin)o(ition)o(})105
+700 y(\\Fullref{universe)o(})c Fr(w)o(ould)i(app)q(ear)i(as)e(\\Def.)g
+(6.1".)105 782 y FD(The)h(preferred)g(st)o(yle)g(of)f(some)g
+(publishing)k(houses)c(calls)i(for)e(digits)h(and)g(punctuation)h(to)e
+(b)q(e)h(t)o(yp)q(eset)105 838 y(uprigh)o(t)20 b(in)h(theorems)f(and)g
+(suc)o(h,)h(amidst)g(surrounding)f(text)g(in)h(italics.)36
+b(The)20 b(con)o(trol)g(sequence)105 895 y FB(\\specialdigits)11
+b FD(ac)o(hiev)o(es)j(this.)20 b(It)14 b(causes)f(eac)o(h)h(digit)g(in)
+g(text,)f(as)g(w)o(ell)h(as)g(paren)o(theses,)f(commas,)105
+951 y(colon,)19 b(semicolons)g(and)f(p)q(erio)q(ds,)i(to)d(e\013ectiv)o
+(ely)i(b)q(e)g(preceded)g(b)o(y)f FB(\\normalshape)p
+FD(.)27 b(Y)l(ou)18 b(can)h(use)105 1008 y FB(\\specialdigits)13
+b FD(after)i FB(\\it)f FD(in)i(the)g(de\014nition)h(of)e(a)f(new)i(en)o
+(vironmen)o(t)f(with)h FB(\\newtheorem)p FD(.)105 1082
+y Fq(\003)79 b Fr(The)17 b(w)o(a)o(y)f Fs(\\specialdigits)d
+Fr(w)o(orks)k(is)g(b)o(y)f(making)e(digits)i(and)h(punctuation)g(in)o
+(to)f(activ)o(e)g(c)o(haracters)105 1132 y(\(c)o(hanging)h(their)i
+Fs(\\catcode)p Fr(s)e(to)g(13\).)31 b(This)17 b(has)i(t)o(w)o(o)e
+(consequences.)34 b(First,)18 b(c)o(haracters)i(that)e(arise)h(from)105
+1182 y(macro)c(expansion)i(don't)f(get)g(the)h(sp)q(ecial)g(treatmen)o
+(t,)g(b)q(ecause)h(their)f Fs(\\catcode)p Fr(s)e(are)i(frozen)g(b)q
+(eforehand;)105 1232 y(this)d(is)g(true,)g(in)f(particular,)h(of)f(the)
+h(expansion)g(of)f Fs(\\ref)g Fr(commands)f(\(but)i(see)h(the)g(end)f
+(of)f(Section)i(5\).)188 1282 y(The)21 b(second)h(consequence)h(is)d
+(that)h(the)g(digits)f(and)h(decimal)e(p)q(oin)o(t)h(no)g(longer)h(w)o
+(ork)f(in)g(sp)q(ecifying)105 1331 y(dimensions:)g(if)15
+b(y)o(ou)g(write)h Fs(\\vskip)k(1in)15 b Fr(while)g Fs(\\specialdigits)
+e Fr(is)i(in)g(e\013ect,)j(y)o(ou)d(get)g(an)h(error)g(message)105
+1381 y(complaining)h(that)j(a)f(n)o(um)o(b)q(er)g(w)o(as)h(exp)q
+(ected.)38 b(T)m(o)19 b(get)h(around)g(this,)g(y)o(ou)g(can)g(temp)q
+(orarily)e(cancel)i(the)105 1431 y(sp)q(ecialness)d(with)e
+Fs(\\regulardigits)p Fr(.)20 b(If)c(y)o(ou)f(run)g(in)o(to)g(this)h
+(problem)e(more)h(than)g(once)h(or)g(t)o(wice,)g(it's)f(b)q(est)105
+1481 y(to)j(create)i(a)e(macro,)f(outside)i(the)g(scop)q(e)g(of)f
+Fs(\\specialdigits)p Fr(,)d(that)k(expands)g(to)f(the)g(desired)i
+(command)105 1531 y(\()p Fs(\\def\\inch{\\vskip)f(1in})p
+Fr(\).)105 1682 y FE(7.)24 b(The)19 b(Pro)r(of)f(En)n(vironmen)n(t)105
+1784 y FD(Theorems)e(and)g(pro)q(ofs)g(go)f(hand)h(in)h(hand.)23
+b(The)16 b FB(proof)g FD(en)o(vironmen)o(t)g(in)h FB(geom)p
+FD(,)e(in)i(its)f(most)f(basic)105 1840 y(form,)e(prin)o(ts)g
+Fv(Pr)n(o)n(of.)20 b FD(at)13 b(the)g(b)q(eginning)j(of)d(the)h(pro)q
+(of,)f(and)g(an)h(end-of-pro)q(of)g(sym)o(b)q(ol)f Fj(\003)h
+FD(at)f(the)h(end.)105 1897 y(With)h(an)h(optional)f(argumen)o(t)g(it)g
+(b)q(eha)o(v)o(es)h(lik)o(e)g(this:)147 1996 y Fs(\\begin{proof}[P)o
+(oinca)o(r\\'e)i(conjecture])147 2046 y(Notice)i(first)h(that)g(...)147
+2096 y(...)g(as)g(we)g(wished)g(to)g(show.)147 2146 y(\\end{proof})105
+2252 y Fv(Pr)n(o)n(of)16 b(of)g(Poinc)n(ar)o(\023)-22
+b(e)16 b(c)n(onje)n(ctur)n(e.)k FD(Notice)c(\014rst)f(that)f
+FC(:)8 b(:)g(:)21 b FD(as)15 b(w)o(e)g(wished)h(to)e(sho)o(w.)p
+1529 2271 376 2 v 1529 2325 2 54 v 1539 2308 a Fr(P)o(oincar)o(\023)-20
+b(e)14 b(conjecture)p 1903 2325 V 1529 2327 376 2 v 22
+2408 a Fq(\003)79 b Fr(The)18 b(formatting)c(of)j(the)h(pro)q(of)s('s)f
+(in)o(tro)q(ductory)g(text)h(is)f(con)o(trolled)g(b)o(y)g(the)g(macro)f
+Fs(\\proofintro)p Fr(,)f(whose)105 2458 y(single)d(argumen)o(t)e(is)i
+(the)h(optional)d(argumen)o(t)h(to)h Fs(\\begin{proof})p
+Fr(|in)c(this)13 b(case,)f(\\P)o(oincar)o(\023)-20 b(e)12
+b(conjecture".)19 b(If)105 2508 y(the)14 b(optional)f(argumen)o(t)f(is)
+i(not)g(used,)g Fs(\\proofintro)d Fr(is)j(passed)h(an)e(empt)o(y)g
+(argumen)o(t.)k(The)d(default)g(setting)105 2557 y(of)f
+Fs(\\proofintro)f Fr(is)105 2729 y FD(Revision:)22 b(1.12)1029
+b(Date:)19 b(95/07/03)13 b(15:57:22)p eop
+%%Page: 9 9
+9 8 bop 105 -25 a Fz(8.)17 b(Equations)1568 b(9)-225
+116 y FL(Section)10 b(\\Equations")-225 145 y(\045)k(Lab)q(els)g(and)
+-183 174 y(Cross-References)147 120 y Fs(\\def\\proofintro)o(#1{\\d)o
+(ef\\@t)o(empa{)o(#1}\045)190 170 y({\\it)21 b(Proof\\ifx\\@tempa\\e)o
+(mpty\\)o(else)o(\\)e(of)i(#1\\fi.)g(}\\ignorespaces})105
+270 y Fr(Y)m(ou)14 b(can)h(probably)e(\014gure)i(out)g(ho)o(w)f(it)g
+(decides)i(whether)g(to)e(write)h Fi(Pr)n(o)n(of)f Fr(or)g
+Fi(Pr)n(o)n(of)h(of)p Fh(:)7 b(:)g(:)e Fr(.)20 b(Y)m(ou)14
+b(can)h(c)o(hange)105 319 y(its)f(de\014nition)f(to)h(obtain)f(other)i
+(e\013ects.)188 369 y(Lik)o(ewise,)26 b(the)e(formatting)d(of)j(the)g
+(b)q(o)o(x)f(at)h(the)g(end)g(of)g(the)g(pro)q(of)f(is)h(con)o(trolled)
+f(b)o(y)h(the)g(macro)105 419 y Fs(\\provedboxcontent)o(s)p
+Fr(,)11 b(whic)o(h)i(is)h(en)o(tirely)g(analogous.)j(Its)d(standard)h
+(setting)f(is)147 519 y Fs(\\def\\provedboxc)o(onten)o(ts#1{)o(\\def\\)
+o(@tem)o(pa{#1)o(}\045)190 568 y(\\ifx\\@tempa\\empty$)o(\\squa)o
+(re$\\e)o(lse\\)o(fbox{)o(\\smal)o(l#1}\\)o(fi})105 675
+y FD(T)l(o)j(iden)o(tify)i(y)o(our)f(pro)q(ofs)f(with)h(the)g(n)o(um)o
+(b)q(er)g(of)f(their)h(corresp)q(onding)h(theorems,)f(lemmas,)g(corol-)
+105 731 y(laries,)g(etc.,)f(use)g FB(\\setprooftag)f
+FD(in)i(the)f(de\014nition)i(of)d(these)i(en)o(vironmen)o(ts.)25
+b(F)l(or)17 b(instance,)h(after)105 788 y(y)o(ou)d(sa)o(y)147
+887 y Fs(\\newtheorem[{\\s)o(etpro)o(oftag)o(}{\\it)o(}]{t)o(heore)o
+(m}{Th)o(eorem)o(}[sec)o(tion])147 937 y(\\newtheorem[{\\s)o(etpro)o
+(oftag)o(}{\\it)o(}]{c)o(oroll)o(ary}[)o(theor)o(em]{C)o(oroll)o(ary})
+105 1043 y FB(\\begin{proof})c FD(will)j(b)q(eha)o(v)o(e)g(as)e(if)h(y)
+o(ou)g(w)o(ere)f(passing)h(it)h(as)e(its)h(optional)g(argumen)o(t)f
+(the)h(n)o(um)o(b)q(er)g(of)105 1100 y(the)g(most)f(recen)o(t)g
+(theorem)h(or)f(corollary)l(.)19 b(Nested)13 b(pro)q(ofs)g(k)o(eep)g
+(trac)o(k)f(of)g(their)h(argumen)o(ts)f(correctly)l(,)105
+1156 y(so)j(the)g(b)q(o)o(x)g(at)g(the)g(end)h(of)f(eac)o(h)g(gets)g
+(the)g(same)g(tag)f(as)h(the)g Fv(Pr)n(o)n(of)h(of)p
+FC(:)8 b(:)g(:)21 b FD(at)15 b(the)g(b)q(eginning.)105
+1213 y(Ho)o(w)o(ev)o(er,)f(certain)i(situations)g(are)f(to)q(o)g
+(confusing)h(for)f FB(\\setprooftag)p FD(.)k(F)l(or)c(example,)h(if)g
+(y)o(ou)f(state)105 1269 y(a)i(corollary)h(b)q(et)o(w)o(een)g(a)f
+(theorem)g(and)h(its)g(pro)q(of,)f(the)h(pro)q(of)f(will)i(incorrectly)
+g(get)e(the)g(corollary's)105 1326 y(n)o(um)o(b)q(er,)e(whic)o(h)g(is)h
+(more)e(recen)o(t.)20 b(In)15 b(this)g(situation)h(y)o(ou)e(ha)o(v)o(e)
+g(to)h(use)g(the)f(optional)i(argumen)o(t.)j(Of)105 1382
+y(course,)c(it's)g(b)q(est)h(to)e(use)i FB(\\ref{...})e
+FD(as)h(the)g(argumen)o(t,)f(rather)h(than)g(an)g(explicit)j(n)o(um)o
+(b)q(er,)d(whic)o(h)105 1438 y(migh)o(t)g(c)o(hange)g(later.)188
+1495 y(If)20 b(a)f(pro)q(of)g(ends)g(with)h(a)f(displa)o(y)o(ed)i(form)
+o(ula,)e(it)h(is)g(recommen)o(ted)f(that)g(the)g(pro)o(v)o(ed)g(b)q(o)o
+(x)g(b)q(e)105 1551 y(placed)f(next)e(to)g(the)h(form)o(ula)f(\(as)g
+(if)h(it)g(w)o(ere)f(a)h(tag\).)23 b(This)17 b(is)g(done)g(b)o(y)f
+(inserting)i FB(\\proved)e FD(b)q(efore)105 1608 y(the)c(closing)g
+FB($$)p FD(.)19 b(Lik)o(ewise,)13 b(if)f(the)g(last)f(line)i(of)e(the)h
+(pro)q(of)f(is)h(part)f(of)g(an)h FB(\\item)p FD(,)f(y)o(ou)g(can)h
+(use)g FB(\\proved)105 1664 y FD(b)q(efore)i(the)g(closing)h
+FB(\\end{enumerate})c FD(\(or)i(whatev)o(er\))g(so)h(the)f(pro)o(v)o
+(ed)h(b)q(o)o(x)g(w)o(on't)e(b)q(e)j(set)e(on)h(a)f(line)105
+1721 y(b)o(y)i(itself.)22 b(In)16 b(ev)o(en)g(more)f(di\016cult)i
+(cases|for)e(instance,)h(a)f(form)o(ula)g(that)g(already)h(has)f(a)g
+(tag,)f(or)h(is)105 1777 y(part)g(of)f(a)h(m)o(ulti-line)j(displa)o
+(y|plop)g FB(\\box\\provedbox)13 b FD(where)i(y)o(ou)g(w)o(an)o(t)f
+(the)i(b)q(o)o(x)f(to)f(b)q(e.)105 1904 y FE(8.)24 b(Equations)105
+2005 y FD(The)19 b FB(geom)g FD(st)o(yle)g(reinstates)g(the)g(plain)i
+(T)861 2015 y(E)887 2005 y(X)e(macro)f FB(\\eqalign)p
+FD(,)h(whic)o(h)h(is)f(not)g(part)g(of)f(standard)105
+2062 y(L)117 2056 y Fw(a)138 2062 y FD(T)163 2075 y(E)189
+2062 y(X)d(but)h(is)g(nonetheless)h(v)o(ery)e(useful.)23
+b(Unlik)o(e)17 b(the)f FB(eqnarray)e FD(en)o(vironmen)o(t,)i
+FB(\\eqalign)e FD(creates)105 2118 y(math)j(alignmen)o(ts)i(that)e(are)
+g(not)h(treated)f(as)g(whole)i(lines,)g(and)f(so)g(can)g(b)q(e)g(com)o
+(bined)h(with)f(other)105 2175 y(elemen)o(ts.)188 2231
+y(The)11 b(example)h(in)h(Section)f(5)f(has)g FB
+(\\equationwith{theorem})d FD(after)i(the)h FB(theorem)g
+FD(en)o(vironmen)o(t)105 2288 y(is)j(created.)20 b(This)14
+b(causes)g(equations)g(made)g(with)g(the)g FB(equation)f
+FD(and)h(the)g FB(eqnarray)f FD(en)o(vironmen)o(ts)105
+2344 y(to)20 b(b)q(e)h(n)o(um)o(b)q(ered)g(in)g(the)f(same)g(sequence)i
+(as)e(theorems.)35 b(Y)l(ou)20 b(can)h(replace)g FB(theorem)f
+FD(with)g(an)o(y)105 2400 y(en)o(vironmen)o(t)14 b(that)f(w)o(as)f
+(de\014ned)j(with)f FB(\\newtheorem)e FD(and)i(that)f(has)g(a)h(coun)o
+(ter)f(with)h(its)g(name)f(\(the)105 2457 y(en)o(vironmen)o(t)18
+b(has)g(a)g(coun)o(ter)g(with)h(its)f(name)g(if)h(there)f(w)o(as)f(no)h
+(optional)h(argumen)o(t)e(b)q(et)o(w)o(een)i(the)105
+2513 y(\014rst)c(and)g(second)h(required)g(argumen)o(ts)f(to)f
+FB(\\newtheorem)p FD(\).)188 2570 y(If)h(y)o(ou)g(load)h(the)f
+(optional)h(st)o(yle)f FB(geomeqns)p FD(|that)f(is,)h(if)h(y)o(our)f
+(do)q(cumen)o(t)g(starts)f(with)105 2729 y(Revision:)22
+b(1.12)1029 b(Date:)19 b(95/07/03)13 b(15:57:22)p eop
+%%Page: 10 10
+10 9 bop 105 -25 a Fz(9.)17 b(The)c Fg(Figure)d Fz(and)k
+Fg(Table)d Fz(en)o(vironmen)o(ts)1099 b(10)-225 116 y
+FL(Section)14 b(\\The)-183 145 y Fy(Figure)f FL(and)e
+Fy(Table)-183 174 y FL(en)o(vironmen)o(ts")-225 203 y(\045)f(Pro)q
+(o\014ng)h(Aids)147 120 y Fs(\\documentstyle[)o(geom,)o(geome)o(qns,.)o
+(..)105 224 y FD(the)16 b(tags)f(in)i(the)f FB(equation)f
+FD(and)h(the)h FB(eqnarray)e FD(en)o(vironmen)o(ts)h(are)g(prin)o(ted)g
+(on)g(the)h(left,)f(in)h(b)q(old-)105 281 y(face.)i(This)12
+b(mak)o(es)g(them)g(visually)h(similar)g(to)f(the)g(tags)f(that)g(in)o
+(tro)q(duce)i(theorems,)f(so)f(it)h(is)h(generally)105
+337 y(appropriate)18 b(to)f(use)h(this)g(st)o(yle)g(if)g(y)o(ou're)g(n)
+o(um)o(b)q(ering)g(equations)g(and)g(theorems)g(in)g(the)g(same)g(se-)
+105 394 y(quence.)105 520 y FE(9.)24 b(The)19 b Ff(Figure)d
+FE(and)k Ff(Table)c FE(en)n(vironmen)n(ts)105 621 y FD(The)i
+FB(geom)f FD(st)o(yle)h(supp)q(orts)g(the)g FB(figure)f
+FD(and)i FB(table)e FD(en)o(vironmen)o(ts)h(of)f(standard)h(L)1624
+615 y Fw(a)1645 621 y FD(T)1670 635 y(E)1695 621 y(X,)g(and,)g(as)105
+678 y(men)o(tioned)d(ab)q(o)o(v)o(e,)g(if)g(y)o(ou)f(use)h(the)g
+FB(\\caption)f FD(command)g(y)o(ou)h(don't)f(ha)o(v)o(e)g(to)g(w)o
+(orry)g(ab)q(out)g(fragile)105 734 y(macros)i(inside)j(its)e(argumen)o
+(t.)25 b(Ho)o(w)o(ev)o(er,)16 b(I)h(recommend)h(that)e(y)o(ou)h(use)g
+(instead)g(the)h(new)f FB(Figure)105 791 y FD(and)e FB(Table)g
+FD(en)o(vironmen)o(ts,)g(whic)o(h)h(pro)o(vide)g(some)f(b)q(ells)i(and)
+e(whistles.)188 847 y(These)h(en)o(vironmen)o(ts)f(tak)o(e)g(three)h
+(argumen)o(ts:)j(a)c(cross-reference)h(lab)q(el,)h(a)e(title)h(and)g(a)
+f(legend)105 904 y(\(or)f(explanatory)h(caption\).)20
+b(The)c(command)147 1001 y Fs(\\begin{Figure}{)o(torus)o(}{The)i
+(square)j(torus})147 1051 y({A)g(torus)g(can)g(be)g(obtained,)f
+(topologically,)147 1101 y(by)h(gluing)f(together)h(parallel)f(sides)g
+(of)i(a)f(square.})147 1151 y($$)147 1201 y(\\begin{picture})o(\(1,1\))
+147 1250 y(...)108 b(\045)21 b(lots)g(of)h(\\put)f(commands)147
+1300 y(\\end{picture})147 1350 y($$)147 1400 y(\\end{Figure})105
+1504 y FD(prin)o(ts)p 855 1867 300 2 v 1113 1866 a Fe(-)p
+854 1866 2 300 v 855 1608 a(6)p 1154 1866 V 258 w(6)p
+855 1567 300 2 v 1113 1566 a(-)188 1941 y FL(torus)188
+1991 y Fd(Figure)g(1.)37 b(The)21 b(squa)o(re)g(to)o(rus.)36
+b Fc(A)18 b(to)o(rus)h(can)h(b)q(e)g(obtained,)h(top)q(ologically)m(,)e
+(b)o(y)g(gluing)g(together)188 2048 y(pa)o(rallel)14
+b(sides)h(of)e(a)h(squa)o(re.)105 2152 y FD(and)f(in)h(addition)g(it)g
+(creates)e(a)h(cross-reference)h(lab)q(el)g FB(torus)f
+FD(and)g(an)g(en)o(try)f(in)i(the)f(table)h(of)f(con)o(ten)o(ts)105
+2209 y(with)j(the)h(text)e(\\The)h(square)g(torus".)22
+b(As)16 b(y)o(ou)g(can)g(see,)g(the)h(\014gure)f(n)o(um)o(b)q(er)g(and)
+h(the)f(title)h(app)q(ear)105 2265 y(in)g(b)q(oldface,)g(the)f(legend)i
+(in)f(a)f(ligh)o(ter)g(face.)23 b(In)17 b(pro)q(o\014ng)f(mo)q(de)g
+(\(Section)h(13\),)e(the)i(\014le)g(name)f(also)105 2322
+y(app)q(ears)f(under)g(the)g(\014gure,)f(in)h(tin)o(y)g(letters.)20
+b(If)15 b(y)o(ou)f(don't)g(w)o(an)o(t)f(a)i(legend,)g(just)f(write)h
+FB({})f FD(after)g(the)105 2378 y(\014rst)h(t)o(w)o(o)f(argumen)o(ts.)
+20 b(\(In)c(other)f(w)o(ords,)g(the)g(legend)i(is)f Fv(not)g
+FD(an)f(optional)h(argumen)o(t|it)g(is)g(simply)105 2435
+y(an)g(argumen)o(t)f(that)g(sometimes)h(happ)q(ens)g(to)g(b)q(e)g(empt)
+o(y)l(.\))21 b(There)16 b(is)h(an)e(optional)i(argumen)o(t)e(to)g(the)
+105 2491 y FB(\\Figure)h FD(en)o(vironmen)o(t,)i(consisting)g(of)f(a)g
+(subset)h(of)f(the)g(letters)h FB(htbp)e FD(and)i(indicating)h(a)e(lo)q
+(cation)105 2548 y(where)h(the)g(\014gure)f(ma)o(y)g(b)q(e)i(placed)f
+([Lam86,)f(176];)g(it)h(should)h(come)f(b)q(efore)f(all)i(other)e
+(argumen)o(ts.)105 2604 y(All)f(of)f(this)h(applies)h(to)d(the)i
+FB(Table)e FD(en)o(vironmen)o(t)h(as)g(w)o(ell.)105 2729
+y(Revision:)22 b(1.12)1029 b(Date:)19 b(95/07/03)13 b(15:57:22)p
+eop
+%%Page: 11 11
+11 10 bop 105 -25 a Fz(10.)17 b(P)o(ostScript)e(Figures)1386
+b(11)-225 116 y FL(Section)11 b(\\P)o(ostScript)-183
+145 y(Figures")-225 174 y(Ps\014g/T)-128 179 y(E)-111
+174 y(X)-225 203 y(Ps\014g/T)-128 208 y(E)-111 203 y(X)-225
+232 y(Stephan)f(Bec)o(h)o(tolsheim)-225 261 y(\045)g(PStorus)105
+120 y FE(10.)25 b(P)n(ostScript)18 b(Figures)105 222
+y FD(Most)e(often)i(y)o(our)f(picture)h(w)o(on't)e(b)q(e)j(made)e(with)
+h(L)1035 216 y Fw(a)1056 222 y FD(T)1081 235 y(E)1107
+222 y(X)f(commands;)h(it)g(will)h(exist)f(in)g(a)f(separate)105
+278 y(P)o(ostScript)12 b(\014le.)20 b(Inclusion)14 b(of)e(P)o
+(ostScript)g(\014gures)g(is)h(still)h(a)e(bit)g(of)g(a)g(bugab)q(o)q(o)
+g(for)g(man)o(y)g(T)1722 288 y(E)1747 278 y(X)g(users,)105
+334 y(in)20 b(spite)f(of)g(the)g(existence)h(for)e(man)o(y)g(y)o(ears)g
+(no)o(w)h(of)f(T)l(rev)o(or)g(Darrell's)h(excellen)o(t)i(macro)d(pac)o
+(k)m(age)105 391 y(Ps\014g/T)250 401 y(E)275 391 y(X)d([Dar])f(and)h
+(others.)188 447 y(The)k FB(geom)f FD(st)o(yle)h(automatically)g(loads)
+g(the)g(\014le)h FB(geompsfi.sty)p FD(,)e(a)g(mo)q(di\014ed)j(v)o
+(ersion)e(of)f(Ps-)105 504 y(\014g/T)201 514 y(E)226
+504 y(X)23 b(\(incorp)q(orating)f(some)g(impro)o(v)o(emen)o(ts)g(b)o(y)
+g(Stephan)h(Bec)o(h)o(tolsheim)g(and)g(others)f(of)f(m)o(y)105
+560 y(o)o(wn\).)e(It)c(allo)o(ws)h(y)o(ou)f(to)f(include)k(P)o
+(ostScript)d(\014gures)g(v)o(ery)g(simply:)147 640 y
+Fs(\\fig{PStorus}{T)o(he)k(square)h(torus}{A)g(torus)h(can)g(be)h
+(obtained,)e(topologically,)147 690 y(by)h(gluing)f(together)h
+(parallel)f(sides)g(of)i(a)f(square.})p 803 775 25 1
+v 1183 775 V 803 798 1 25 v 1207 798 V 803 1178 a @beginspecial
+0 @llx 0 @lly 97.198639 @urx 97.198639 @ury 971.986206
+@rwi 971.986206 @rhi @setspecial
+%%BeginDocument: PStorus.ps
+MyDict begin
+/Mlmarg 0 72 mul def
+/Mrmarg 0 72 mul def
+/Mbmarg 0 72 mul def
+/Mtmarg 0 72 mul def
+/Mwidth 1.35 72 mul def
+/Mheight 1.35 72 mul def
+/Mtransform { } bind def
+/Mnodistort true def
+/Mfixwid false def
+/Mfixdash false def
+/Mrot 0 def
+MathPictureStart
+/Courier findfont 10 scalefont setfont
+.04282 .91436 .04282 .91436 [
+[ 0 0 0 0 ]
+[ 1 1 0 0 ]
+] MathScale
+1 setlinecap
+1 setlinejoin
+n
+[ ] 0 d
+0 g
+gs
+gr
+gs
+gs
+.4 Ma
+.04282 .04282 m
+.95718 .04282 l
+k
+.86774 .06183 m
+.95718 .04282 l
+.86774 .02381 l
+f
+gr
+gs
+.4 Ma
+.04282 .04282 m
+.04282 .95718 l
+k
+.02381 .86774 m
+.04282 .95718 l
+.06183 .86774 l
+f
+gr
+gs
+.4 Ma
+.04282 .95718 m
+.95718 .95718 l
+k
+.86774 .97619 m
+.95718 .95718 l
+.86774 .93817 l
+f
+gr
+gs
+.4 Ma
+.95718 .04282 m
+.95718 .95718 l
+k
+.93817 .86774 m
+.95718 .95718 l
+.97619 .86774 l
+f
+gr
+gr
+0 0 m
+1 0 l
+1 1 l
+0 1 l
+closepath
+clip
+n
+MathPictureEnd
+end
+%%EndDocument
+ @endspecial 993 1193 a FC(a)788 991 y(b)987 778 y(a)1011
+762 y Fb(0)1203 992 y FC(b)1223 975 y Fb(0)p 803 1178
+V 1207 1178 V 803 1177 25 1 v 1183 1177 V 188 1225 a
+FL(PStorus)188 1275 y Fd(Figure)g(2.)37 b(The)21 b(squa)o(re)g(to)o
+(rus.)36 b Fc(A)18 b(to)o(rus)h(can)h(b)q(e)g(obtained,)h(top)q
+(ologically)m(,)e(b)o(y)g(gluing)g(together)188 1332
+y(pa)o(rallel)14 b(sides)h(of)e(a)h(squa)o(re.)105 1431
+y FD(The)21 b FB(\\fig)g FD(macro)f(tak)o(es)g(the)h(same)g(three)g
+(argumen)o(ts)f(\(plus)i(an)f(optional)g(one\))g(as)g(the)g
+FB(Figure)105 1488 y FD(en)o(vironmen)o(t.)f(But)15 b(the)g(\014rst)f
+(argumen)o(t,)g(in)h(addition)h(to)e(b)q(eing)i(used)g(to)e(mak)o(e)g
+(a)h(lab)q(el,)h(is)f(also)g(the)105 1544 y(name)f(of)g(the)g(\014le)h
+(where)f(the)g(P)o(ostScript)g(\014gure)g(is)h(stored)f(\(min)o(us)g
+(the)g FB(.ps)g FD(su\016x\).)19 b(Th)o(us)14 b(Figure)g(2)105
+1601 y(is)i(stored)e(in)i(the)g(\014le)g FB(PStorus.ps)p
+FD(.)188 1657 y(T)l(o)k(get)f(t)o(w)o(o)g(or)h(three)g(\014gures)g
+(side)h(b)o(y)f(side,)i(sharing)f(the)f(same)g(caption,)h(use)f
+FB(\\doublefig)105 1714 y FD(or)c FB(\\triplefig)p FD(.)21
+b(The)16 b(P)o(ostScript)g(\014le)i(names)e(for)f FB
+(\\doublefig{foo}...)f FD(w)o(ould)i(b)q(e)h(in)g(this)g(case)105
+1770 y(w)o(ould)e(b)q(e)g FB(foo-1.ps)e FD(and)h FB(foo-2.ps)p
+FD(,)f(and)i(lik)o(ewise)h(for)d FB(\\triplefig)p FD(.)19
+b(There)14 b(is)h(no)f(similar)i(mec)o(h-)105 1826 y(anism)g(for)e
+(more)h(than)g(three)g(\014gures.)188 1883 y(The)j(directory)g(where)g
+(the)g(\014gures)g(are)g(to)f(b)q(e)i(found)f(is)g(go)o(v)o(erned)g(b)o
+(y)f(the)h(macro)f FB(\\picpath)p FD(.)105 1939 y(F)l(or)e(example,)g
+(if)h(the)f(directory)h(is)f(called)i FB(/u/levy/pictures)p
+FD(,)c(y)o(ou)i(should)h(sa)o(y)147 2019 y Fs(\\def\\picpath{/u)o
+(/levy)o(/pict)o(ures/)o(})105 2106 y FD(at)f(the)g(b)q(eginning)i(of)e
+(y)o(our)g(do)q(cumen)o(t.)20 b(\(Y)l(ou)15 b(need)h(the)f
+FB(/)g FD(at)g(the)g(end.\))105 2175 y Fq(\003)75 b Fr(Y)m(ou)12
+b(can)h(also)f(use)i(a)e(relativ)o(e)h(pathname,)e(suc)o(h)j(as)f
+Fs(pictures/)p Fr(,)e(or)h(ev)o(en)i(the)f(empt)o(y)f(string)h(\(or)g
+Fs(./)p Fr(\))f(for)105 2225 y(the)k(curren)o(t)g(directory)m(.)22
+b(Ho)o(w)o(ev)o(er,)16 b(the)f(program)f(that)h(sends)h(y)o(our)f
+Fs(.dvi)f Fr(\014le)h(to)g(the)h(prin)o(ter)g(ma)o(y)d(not)i(\014nd)105
+2275 y(the)f(pictures)i(since)e(it)g(is)g(lik)o(ely)e(to)i(b)q(e)g(in)o
+(v)o(ok)o(ed)f(from)g(a)g(di\013eren)o(t)i(directory)m(.)188
+2325 y(If)e(a)h(pathname)e(includes)j(c)o(haracters)g(that)f(are)g(sp)q
+(ecial)g(to)g(T)1182 2334 y(E)1205 2325 y(X,)f(y)o(ou)g(need)i(to)f
+(mak)o(e)e(then)i(unsp)q(ecial)g(in)105 2375 y(order)h(to)e(de\014ne)i
+Fs(\\picpath)p Fr(.)i(Here)e(is)e(an)h(example:)147 2455
+y Fs(\\begingroup)106 b(\045)22 b(start)f(a)g(group)g(so)g(the)g
+(change)g(in)g(_)h(is)f(local)147 2504 y(\\catcode`\\_=12)40
+b(\045)22 b(make)f(_)g(behave)g(like)g(an)g(ordinary)f(character)147
+2554 y(\\gdef\\picpath{/)o(home/)o(tampa)o(_a/fa)o(c/wp)o(t/pic)o
+(tures)o(/})f(\045)i(this)g(def)h(is)f(global)147 2604
+y(\\endgroup)150 b(\045)22 b(now)f(_)h(reverts)e(to)h(its)g(usual)g
+(meaning)105 2729 y FD(Revision:)h(1.12)1029 b(Date:)19
+b(95/07/03)13 b(15:57:22)p eop
+%%Page: 12 12
+12 11 bop 105 -25 a Fz(10.)17 b(P)o(ostScript)e(Figures)1386
+b(12)-225 116 y FL(\045)10 b(torus)-225 145 y Fy(\045)j(PostScript)j
+(Figures)-225 174 y(\045)d(PostScript)j(Figures)-225
+203 y(\045)d(PostScript)j(Figures)-225 232 y FL(\045)10
+b(PStorus)-225 261 y(\045)g(Pro)q(o\014ng)h(Aids)-225
+290 y(\045)f(PStorus)-225 319 y(\045)g(PStorus)105 120
+y FD(If)18 b(y)o(ou)g(ha)o(v)o(e)g(a)f(long)i(do)q(cumen)o(t)f(with)g
+(lots)g(of)g(pictures,)h(it)f(is)h(b)q(etter)f(to)f(organize)i(them)f
+(in)o(to)g(sec-)105 177 y(tions)k(and)g(c)o(hapters.)40
+b(In)22 b(that)f(case)h(y)o(ou)g(should)h(lea)o(v)o(e)f
+FB(\\picpath)f FD(unset,)i(and)f(set)g(the)g(macro)105
+233 y FB(\\masterpicpath)14 b FD(to)h(the)h(master)f(picture)i
+(directory)l(.)22 b(If)16 b(I)g(w)o(ere)f(using)i(this)f(sc)o(heme)g
+(in)h(this)f(do)q(cu-)105 289 y(men)o(t,)f(I)g(migh)o(t)g(sa)o(y)147
+389 y Fs(\\def\\masterpicp)o(ath{/)o(home/)o(levy/)o(pict)o(ures/)o(})
+105 495 y FD(and)21 b(put)h(Figure)f(1)g(in)h(\014le)h
+FB(/home/levy/pictures/10/)o(PStorus.)o(ps)p FD(.)35
+b(\(With)21 b(the)h FB(book)e FD(st)o(yle,)105 552 y(whic)o(h)c(has)f
+(c)o(hapters,)g(I)g(w)o(ould)h(need)g FB(chap3/10)e FD(instead)i(of)f
+(just)f FB(10)p FD(.\))188 608 y(The)20 b(w)o(a)o(y)e
+FB(\\fig)h FD(w)o(orks)g(is)h(b)o(y)g(calling)h(the)f(command)f
+FB(\\psfig)g FD([Dar],)f(whic)o(h)j(creates)e(a)g(T)1845
+618 y(E)1871 608 y(X)105 665 y FB(\\vbox)14 b FD(of)g(the)g(righ)o(t)g
+(size)h(and)g(con)o(taining)g(instructions)g(for)f(the)g(\014gure)h(to)
+f(b)q(e)h(included)h(at)e(the)h(time)105 721 y(of)g(prin)o(ting.)21
+b(Y)l(ou)15 b(normally)h(w)o(on't)e(use)h FB(\\psfig)g
+FD(directly)l(,)h(since)g FB(\\fig)f FD(calls)h(it)g(automaticaly)l(.)
+105 796 y Fq(\003)74 b Fr(Ho)o(w)o(ev)o(er,)13 b(o)q(ccasionally)f(y)o
+(ou)f(man)o(y)g(w)o(an)o(t)h(to)g(use)i Fs(\\psfig)d
+Fr(directly)i(to)f(tak)o(e)g(adv)n(an)o(tage)g(of)g(this)g(macro's)105
+846 y(man)o(y)h(options,)g(suc)o(h)j(as)e(resizing.)20
+b(See)c(the)f(Ps\014g/T)969 855 y(E)992 846 y(X)f(man)o(ual)e([Dar])i
+(for)g(details;)g(but)g(some)g(of)g(the)h(new)o(er)105
+896 y(options)f(to)f(Ps\014g/T)433 904 y(E)457 896 y(X)h(are)g(not)g
+(supp)q(orted)h(here.)188 977 y FD(In)f(order)g(for)f(the)h
+FB(\\psfig)f FD(command)g(to)g(kno)o(w)h(what)f(size)h(b)q(o)o(x)g(to)f
+(mak)o(e,)g(it)h(needs)h(to)e(\014nd)h(y)o(our)105 1033
+y(P)o(ostScript)h(\014gure)g(\014le,)h(and)g(the)f(\014le)h(m)o(ust)f
+(ha)o(v)o(e)g(near)g(the)g(top)g(a)g(line)i(lik)o(e)f(this:)147
+1133 y Fs(\045\045BoundingBox:)i(0)k(30)f(98)h(128)105
+1239 y FD(The)15 b(\014rst)f(t)o(w)o(o)f(n)o(um)o(b)q(ers)h(represen)o
+(t)h(the)f(lo)o(w)h FC(x)p FD(-)f(and)h FC(y)r FD(-co)q(ordinates)g(of)
+f(the)g(\014gure's)g(b)q(ounding)i(b)q(o)o(x,)105 1296
+y(in)j(p)q(oin)o(ts,)g(and)g(the)f(last)g(t)o(w)o(o)f(represen)o(t)h
+(the)h(high)g FC(x)p FD(-)f(and)g FC(y)r FD(-co)q(ordinates.)30
+b(In)19 b(the)f(example)h(just)105 1352 y(giv)o(en,)i(whic)o(h)g
+(corresp)q(onds)f(to)f(Figure)h(2,)h(the)f(b)q(ounding)h(b)q(o)o(x)f
+(go)q(es)f(from)h(0)f(to)g(98)h(pt)f(in)i(the)f FC(x)p
+FD(-)105 1409 y(direction)d(and)f(from)f(30)g(to)h(128)f(pt)g(in)i(the)
+f FC(y)r FD(-direction,)h(so)e(its)h(heigh)o(t)g(and)g(width)h(are)e(b)
+q(oth)h(98)f(pt,)105 1465 y(or)e(appro)o(ximately)g(1.35)f(inc)o(hes.)
+21 b(The)13 b(corners)g(of)g(the)h(b)q(ounding)h(b)q(o)o(x)e(app)q(ear)
+g(on)h(the)f(page)g(in)h(pro)q(of)105 1522 y(mo)q(de)h(\(Section)h
+(13\).)188 1578 y(Note)f(that)f FB(\\psfig)g FD(only)i(cares)f(ab)q
+(out)g(the)g(heigh)o(t)h(and)f(the)g(width)h(of)f(the)g(b)q(ounding)i
+(b)q(o)o(x,)d(not)105 1634 y(ab)q(out)k(the)h(actual)g(v)m(alues)g(of)f
+(the)h(high)g(and)g(lo)o(w)g(co)q(ordinates.)30 b(The)18
+b(latter)h(are)f(relev)m(an)o(t)h(only)g(in)105 1691
+y(reference)f(to)g(the)f(co)q(ordinates)i(of)e(the)h(ob)s(jects)f
+(inside)j(the)d(picture,)i(ab)q(out)f(whic)o(h)h FB(\\psfig)e
+FD(kno)o(ws)105 1747 y(nothing.)31 b(\(Th)o(us)19 b(the)g(b)q(ottom)f
+(left)h(corner)g(of)g(the)f(square)h(in)h(Figure)f(2)g(has)f(co)q
+(ordinates)i(\(4)p FC(;)8 b FD(34\),)105 1804 y(whic)o(h)14
+b(is)g(a)e(little)j(bit)e(ab)q(o)o(v)o(e)g(and)g(to)g(the)g(righ)o(t)g
+(of)g(the)g(b)q(ounding)i(b)q(o)o(x's)d(b)q(ottom)g(left)i(corner)f
+(\(0)p FC(;)8 b FD(30\).\))105 1860 y(If)13 b(one)g(added)h(the)f(same)
+f(n)o(um)o(b)q(er)h(to)f(the)h FC(x)p FD(-co)q(ordinates)h(of)e(the)h
+(b)q(ounding)i(b)q(o)o(x)d(and)h(of)g(ev)o(ery)g(ob)s(ject)105
+1917 y(in)j(the)f(picture,)h(the)f(result)h(w)o(ould)g(b)q(e)f(exactly)
+h(the)f(same.)188 1973 y(Normally)l(,)g(the)f FB(\045\045BoundingBox)f
+FD(line)j(should)g(ha)o(v)o(e)e(b)q(een)h(placed)h(in)f(the)g(P)o
+(ostScript)f(\014le)h(auto-)105 2030 y(matically)l(,)g(b)o(y)f(whatev)o
+(er)g(program)f(y)o(ou)h(used)h(to)e(create)h(the)g(\014gure.)20
+b(If)14 b(the)h(program)e(did)i(not)f(write)105 2086
+y(a)j(line)i(lik)o(e)f(that,)e(y)o(ou)h(ha)o(v)o(e)g(to)f(do)h(it)h(b)o
+(y)f(hand,)h(and)f(y)o(ou)g(should)h(consider)g(switc)o(hing)g(to)e
+(another)105 2143 y(program.)188 2199 y(Notice)f(that)e(the)h(lab)q
+(els)h FC(a)f FD(and)h FC(b)e FD(in)i(Figure)f(2)g(app)q(ear)g(in)h
+(the)f(same)g(fon)o(t)f(as)h(they)g(w)o(ould)g(in)h(the)105
+2255 y(text.)27 b(In)18 b(fact)f(the)h(lab)q(els)h(w)o(ere)f(t)o(yp)q
+(eset)f(b)o(y)h(T)946 2265 y(E)971 2255 y(X)g(itself,)h(and)f(do)g(not)
+f(come)g(from)g(the)h(P)o(ostScript)105 2312 y(\014le,)i(where)f(it)g
+(w)o(ould)g(b)q(e)g(hard)g(to)f(sp)q(ecify)i(them)e(satisfactorily|esp)
+q(eciall)q(y)j(details)f(suc)o(h)f(as)f(the)105 2368
+y(placemen)o(t)f(of)f(the)h(primes)g(and)g(other)f(subscripts)h(and)g
+(sup)q(erscripts.)25 b(The)16 b(information)h(for)f(these)105
+2425 y(lab)q(els)i(is)f(con)o(tained)g(in)g(a)f(\014le)h(with)f(the)h
+(su\016x)f FB(.lab)p FD(,)g(whic)o(h)h(normally)g(is)f(generated)h(b)o
+(y)f(the)g(same)105 2481 y(program)j(that)h(creates)g(the)g(P)o
+(ostScript)h(\014le,)h(or)e(b)o(y)g(a)g(p)q(ostpro)q(cessor.)35
+b(If)21 b(y)o(ou)f(w)o(an)o(t)f(to)h(include)105 2538
+y Fv(Mathematic)n(a)f FD(graphics,)h(for)e(example,)j(y)o(ou)d(should)i
+(use)f(the)g FB(mathfig)f FD(utilit)o(y)l(,)i(describ)q(ed)h(in)f(the)
+105 2594 y(App)q(endix.)105 2729 y(Revision:)i(1.12)1029
+b(Date:)19 b(95/07/03)13 b(15:57:22)p eop
+%%Page: 13 13
+13 12 bop 105 -25 a Fz(10.)17 b(P)o(ostScript)e(Figures)1386
+b(13)-225 116 y FL(\045)10 b(PStorus)105 120 y Fq(\003)77
+b Fr(The)15 b(a)o(v)o(erage)g(user)h(has)f(no)f(need)i(to)f(kno)o(w)f
+(what)h(the)g Fs(.lab)f Fr(\014le)h(lo)q(oks)f(lik)o(e,)g(but)h(if)f(y)
+o(ou)h(w)o(an)o(t)f(to)h(write)105 170 y(a)h(new)g(p)q(ostpro)q(cessor)
+j(in)d(order)g(to)g(implemen)o(t)e(this)i(lab)q(eling)f(sc)o(heme)h(in)
+g(conjunction)g(with)g(y)o(our)g(fa)o(v)o(orite)105 220
+y(dra)o(wing)j(program,)h(here)h(are)f(the)h(details.)36
+b(Eac)o(h)20 b(line)f(of)h(the)g(\014le)g(yields)g(one)g(lab)q(el,)h
+(and)e(con)o(tains)h(the)105 270 y Fs(\\setlabel)11 b
+Fr(command)f(follo)o(w)o(ed)h(b)o(y)h(\014v)o(e)h(argumen)o(ts:)k(the)c
+(text)h(of)e(the)h(lab)q(el,)f(to)g(b)q(e)i(t)o(yp)q(eset)g(in)e(math)f
+(mo)q(de;)105 319 y(the)g Fh(x)p Fr(-)f(and)g Fh(y)q
+Fr(-co)q(ordinates)i(of)e(the)h(lab)q(el's)e Fi(r)n(efer)n(enc)n(e)i(p)
+n(oint)p Fr(,)g(in)f(p)q(oin)o(ts;)h(and)f(the)h Fi(r)n(elative)e
+Fh(x)p Fr(-)h(and)h Fh(y)q Fr(-co)q(ordinates)105 369
+y(of)h(the)g(reference)j(p)q(oin)o(t.)i(A)12 b(v)n(alue)f(of)h(1)g(for)
+f(the)i(last)f(t)o(w)o(o)g(argumen)o(ts)f(means)g(the)i(reference)i(p)q
+(oin)o(t)c(of)h(the)h(lab)q(el)105 419 y(it)h(at)h(the)g(top)f(or)h
+(righ)o(t)f(of)g(the)h(lab)q(el's)f(b)q(ounding)g(b)q(o)o(x;)g(a)g(v)n
+(alue)g(of)g Fq(\000)p Fr(1)h(means)e(b)q(ottom)h(or)g(left,)g(a)g(v)n
+(alue)g(of)g(0)105 469 y(means)f(middle,)f(and)h(so)h(on.)188
+519 y(F)m(or)g(example,)e(here)j(is)e(the)i(\014le)f
+Fs(PStorus.lab)d Fr(corresp)q(onding)k(to)f(Figure)g(2:)147
+604 y Fs(\\setlabel{a}{48)o(.6000)o(00}{3)o(4.162)o(104})o({0}{1)o(})
+147 654 y(\\setlabel{b}{4.)o(16210)o(4}{78)o(.6000)o(00}{)o(1}{0})147
+704 y(\\setlabel{a'}{4)o(8.600)o(000}{)o(123.0)o(3789)o(6}{0})o({-1})
+147 753 y(\\setlabel{b'}{9)o(3.037)o(896}{)o(78.60)o(0000)o(}{-1})o
+({0})105 839 y Fr(F)m(or)i(the)h(lab)q(el)f Fh(a)p Fr(,)g(the)h
+(reference)i(p)q(oin)o(t)d(is)g(at)g(the)h(top)f(middle)f(of)h(the)g
+(lab)q(el's)g(b)q(ounding)g(b)q(o)o(x,)g(so)h(the)g(lab)q(el)105
+888 y(itself)d(will)e(b)q(e)i(cen)o(tered)i(under)f(the)g(p)q(oin)o(t)e
+(with)h(co)q(ordinates)g(\(48)p Fh(:)p Fr(6)p Fh(;)7
+b Fr(34)p Fh(:)p Fr(1\).)188 938 y(If)19 b(y)o(ou)g(w)o(an)o(t)g(to)h
+(t)o(yp)q(eset)h(a)e(lab)q(el)g(outside)h(math)e(mo)q(de,)h(use)h(L)
+1260 933 y Fp(a)1279 938 y Fr(T)1302 951 y(E)1326 938
+y(X's)f Fs(\\mbox)g Fr(command)d(\(or)k(T)1823 947 y(E)1846
+938 y(X's)105 988 y Fs(\\hbox)p Fr(\).)d(The)d(fon)o(t)e(used)j(b)o(y)e
+(default)g(in)g(this)g(case)h(is)f(the)h(same)f(as)g(for)g(captions.)18
+b(Th)o(us,)13 b(to)g(get)h(the)g(lab)q(el)f Fc(fo)q(o)105
+1038 y Fr(y)o(ou'll)f(probably)h(w)o(an)o(t)h(to)f(t)o(yp)q(e)i(the)f
+(string)g Fs(\\hbox{foo})e Fr(in)o(to)h(y)o(our)h(\014gure-making)e
+(program.)188 1088 y(Sometimes)k(the)j(fact)f(that)g(the)h(source)h
+Fs(\\hbox{foo})c Fr(has)i(man)o(y)f(more)g(c)o(haracters)j(than)e(the)h
+(output)105 1138 y(causes)14 b(problems|for)c(example,)h(the)i
+(\014gure-making)e(program)g(migh)o(t)f(lea)o(v)o(e)i(to)q(o)g(m)o(uc)o
+(h)f(space)j(for)e(the)h(lab)q(el.)105 1187 y(The)18
+b(macro)e Fs(\\hyperactivelabels)e Fr(pro)o(vides)k(a)f(w)o(a)o(y)g
+(around)h(this.)29 b(This)17 b(macro)g(is)g(called)h(ev)o(ery)g(time)e
+(a)105 1237 y(lab)q(el)f(is)g(ab)q(out)g(to)g(b)q(e)g(t)o(yp)q(eset,)i
+(and)e(y)o(ou)f(can)i(de\014ne)g(it)f(at)g(will,)e(to)i(allo)o(w)f
+(abbreviations,)g(sa)o(y)m(.)21 b(Th)o(us,)16 b(after)105
+1287 y(the)e(commands)147 1372 y Fs(\\def\\hyperactiv)o(elabe)o(ls{\\m)
+o(athco)o(de`:)o(="800)o(0})147 1422 y(\\def\\activecolo)o(n#1:{)o
+(\\hbox)o({#1}})147 1472 y({\\catcode`\\:=\\a)o(ctive)o(\\glob)o
+(al\\le)o(t:=\\)o(activ)o(ecolo)o(n})105 1557 y Fr(the)k(construction)g
+Fs(:foo:)e Fr(has)h(exactly)h(the)g(same)e(e\013ect)j(as)e
+Fs(\\hbox{foo})p Fr(|but)e(only)h(inside)i(lab)q(els.)27
+b(\(The)105 1607 y(command)11 b Fs(\\mathcode`:="80)o(00)f
+Fr(causes)15 b(the)f(colon)f(to)g(b)q(e)h(treated)h(as)e(an)g(activ)o
+(e)h(c)o(haracter)h(in)e(math)e(mo)q(de;)105 1657 y(the)j(next)h(t)o(w)
+o(o)e(lines)h(sa)o(y)m(,)f(in)g(a)h(roundab)q(out)g(w)o(a)o(y)m(,)e
+(what)i(this)g(activ)o(e)g(c)o(haracter)h(should)f(do.\))188
+1734 y FD(Utilities)j(\(programs\))12 b(that)i(generate)g(P)o
+(ostScript)h(graphics)g(\014les)g(generally)h(start)d(the)i(\014le)h
+(with)105 1791 y(a)23 b(\\signature")f(\(a)g(commen)o(t)h(line)h
+(stating)f(the)g(utilit)o(y's)h(name)e(and)i(v)o(ersion\))e(and)h(a)g
+(c)o(h)o(unk)g(of)105 1847 y(P)o(ostScript)c(co)q(de|call)i(it)f(a)f
+(header|establishing)j(abbreviations,)e(subroutines,)h(fon)o(ts)d(and)i
+(the)105 1904 y(lik)o(e.)37 b(The)21 b(header)g(is)g(alw)o(a)o(ys)f
+(the)h(same,)g(so)f(if)h(y)o(ou)g(ha)o(v)o(e)f(dozens)h(of)f(\014gures)
+h(generated)f(b)o(y)h(the)105 1960 y(same)e(utilit)o(y)i(it's)e(go)q(o)
+q(d)h(to)f(factor)g(out)g(this)h(commonalit)o(y)l(,)g(if)g(p)q
+(ossible.)35 b(With)20 b(certain)g(utilities,)105 2016
+y(y)o(ou)15 b(can)g(sa)o(v)o(e)g(y)o(our)g(\014les)h(without)f(the)h
+(header.)k(Then)c(they)g(w)o(on't)e(prin)o(t)h(on)h(their)g(o)o(wn;)e
+(but)h(when)105 2073 y FB(\\psfig)h FD(lo)q(oks)h(in)o(to)g(them,)g(if)
+h(it)f(can)g(recognize)h(the)f(utilit)o(y's)h(signature,)f(it)g(puts)g
+(in)o(to)g(the)g(dvi)h(\014le)105 2129 y(a)e(command)g(that)f(causes)i
+(the)f(inclusion)j(of)d(the)g(header)g(at)g(prin)o(ting)h(time.)23
+b(This)17 b(w)o(a)o(y)e(the)i(header)105 2186 y(is)i(included)i(only)f
+(once)f(for)f(all)h(\014gures,)g(sa)o(ving)g(memory)f(and)h(time.)30
+b(The)19 b(utilities)i(that)d FB(\\psfig)105 2242 y FD(curren)o(tly)e
+(kno)o(ws)e(ab)q(out)h(are)g(Mathematica)g([W)l(ol91])f(and)h(Adob)q(e)
+h(Illustrator)f([S)1569 2226 y Fu(+)1597 2242 y FD(88].)k(With)c
+(Illus-)105 2299 y(trator,)h(sa)o(ving)h(without)g(the)h(header)g(is)f
+(accomplished)j(b)o(y)d(clic)o(king)i(on)e(the)h(appropriate)f(en)o
+(try)g(in)105 2355 y(the)e(\\Sa)o(v)o(e)g(As")g(dialog)h(b)q(o)o(x.)j
+(F)l(or)c(Mathematica,)f(see)i(the)f(App)q(endix.)105
+2426 y Fq(\003)72 b Fr(F)m(or)9 b(the)h(signature)g(to)f(b)q(e)h(seen)h
+(b)o(y)f Fs(\\psfig)p Fr(,)e(it)h(m)o(ust)g(app)q(ear)h(near)g(the)g
+(top)g(of)f(the)h(\014le;)g(the)g(actual)g(n)o(um)o(b)q(er)105
+2476 y(of)j(lines)h(that)g Fs(\\psfig)e Fr(scans)j(is)e(con)o(trolled)h
+(b)o(y)f(the)i(coun)o(ter)f Fs(\\maxheaderlines)p Fr(.)h(The)f
+Fs(\045\045BoundingBox)d Fr(line)105 2525 y(m)o(ust)k(also)h(lie)g(in)g
+(that)h(same)e(initial)g(stretc)o(h.)27 b(The)17 b(default)f(v)n(alue)g
+(of)f Fs(\\maxheaderlines)f Fr(is)i(100,)g(whic)o(h)g(is)105
+2575 y(almost)c(alw)o(a)o(ys)h(adequate.)105 2729 y FD(Revision:)22
+b(1.12)1029 b(Date:)19 b(95/07/03)13 b(15:57:22)p eop
+%%Page: 14 14
+14 13 bop 105 -25 a Fz(11.)17 b(F)m(on)o(ts)1605 b(14)-225
+116 y FL(Section)10 b(\\F)n(on)o(ts")-225 145 y(\045)h(Ov)o(erall)i
+(Organiza-)-183 174 y(tion)-225 203 y(Section)e(\\The)g(Index,)-183
+232 y(the)h(T)n(able)h(of)-183 261 y(Con)o(ten)o(ts)d(and)i(the)-183
+290 y(Glossary")-225 319 y(\045)i(Lab)q(els)g(and)-183
+348 y(Cross-References)-225 377 y(\045)f(Theorems)d(and)-183
+406 y(Their)g(F)n(riends)-225 435 y(\045)g(Pro)q(o\014ng)h(Aids)105
+120 y FE(11.)25 b(F)-5 b(on)n(ts)105 222 y FD(As)11 b(men)o(tioned)g
+(in)h(Section)f(2,)g(the)g FB(geom)f FD(st)o(yle)h(requires)h(NFSS,)e
+(a)h(rational)f(fon)o(t)g(managemen)o(t)g(system)105
+278 y(that)k(mak)o(es)h(the)g(use)h(of)f(new)g(fon)o(ts)f(easier)i
+(than)f(under)h(old)g(L)1203 272 y Fw(a)1224 278 y FD(T)1249
+292 y(E)1274 278 y(X.)188 334 y(Under)j(this)f(sc)o(heme,)h(unlik)o(e)h
+(the)e(old,)h(if)g(y)o(ou)f(sa)o(y)f FB(\\bf...)23 b(\\small...)p
+FD(,)17 b(the)i FB(\\small)e FD(has)h(no)105 391 y(e\013ect)e(on)g(the)
+h(b)q(oldness)g(of)f(the)h(curren)o(t)f(fon)o(t|size,)h(b)q(oldness,)g
+(st)o(yle)g(and)f(so)g(on)h(are)f(indep)q(enden)o(t)105
+447 y(attributes.)41 b(This)23 b(is)g(generally)g(go)q(o)q(d,)h(but)f
+(it)f(do)q(es)h(create)f(bac)o(kw)o(ard)g(incompatibilities.)45
+b(F)l(or)105 504 y(example,)20 b(if)f(y)o(ou)f(ha)o(v)o(e)g(an)g(old)h
+(L)699 498 y Fw(a)720 504 y FD(T)745 518 y(E)771 504
+y(X)f(do)q(cumen)o(t)h(where)g(y)o(ou'v)o(e)f(relied)i(on)e
+FB(\\small)g FD(to)g(reset)g(the)105 560 y(w)o(eigh)o(t)j(of)g(the)g
+(fon)o(t,)h(y)o(ou're)f(in)h(for)e(a)h(surprise.)39 b(Also,)23
+b FB(\\rm)e FD(should)h(generally)h(b)q(e)f(replaced)g(b)o(y)105
+617 y FB(\\normalshape)p FD(.)c(F)l(or)d(a)g(list)h(of)e(all)j(suc)o(h)
+e(di\013erences,)h(see)g([Ame].)188 673 y(Another)24
+b(case)g(of)g(con\015icting)h(ideas)g(on)f(what)f(fon)o(t-c)o(hange)h
+(commands)g(should)h(do)e(is)i(in-)105 730 y(side)e(math)e(mo)q(de.)41
+b(Under)22 b(NFSS,)g FB(\\bf)g FD(has)f(no)h(e\013ect)g(inside)i(math)d
+(mo)q(de|y)o(ou)i(need)f(to)g(sa)o(y)105 786 y FB($\\mathbf{xyz}$)p
+FD(,)15 b(for)i(example.)27 b(The)17 b FB(geom)g FD(st)o(yle)g(will)i
+(prin)o(t)e(a)g(w)o(arning)g(on)g(y)o(our)g(terminal)h(if)g(it)105
+843 y(sees)d FB(\\bf)g FD(in)h(math)f(mo)q(de.)188 899
+y(In)20 b(addition)g(to)f(the)g(math-mo)q(de)h(commands)f
+FB(\\mathbf)p FD(,)g FB(\\mathrm)f FD(and)h FB(\\mathit)p
+FD(,)g(the)h FB(geom)105 955 y FD(st)o(yle)c(de\014nes)g
+FB(\\mathss)f FD(and)h FB(\\mathtt)e FD(as)h(the)h(math)f(mo)q(de)h
+(coun)o(terparts)f(of)g FB(\\sf)g FD(\(sans-serif)t(\))g(and)105
+1012 y FB(\\tt)g FD(\(t)o(yp)q(ewriter)g(t)o(yp)q(e\).)188
+1068 y(Supp)q(ort)e(for)g(F)l(raktur)f(\(\\gothic"\))g(and)h(blac)o(kb)
+q(oard-b)q(old)h(fon)o(ts)e(is)i(pro)o(vided,)g(as)e(w)o(ell)i(as)f
+(for)f(the)105 1125 y(fon)o(ts)h FB(msam)h FD(and)g FB(msbm)p
+FD(,)f(whic)o(h)i(con)o(tain)f(a)g(plethora)g(of)g(mathematical)g(sym)o
+(b)q(ols.)20 b(This)15 b(is)f(all)h(thanks)105 1181 y(to)h(the)h(AMS,)g
+(and)g(y)o(ou)f(should)i(turn)f(to)f(the)h FA(A)964 1191
+y(M)1014 1181 y(S)p FD(-L)1069 1175 y Fw(a)1090 1181
+y FD(T)1115 1195 y(E)1140 1181 y(X)g(distribution)i([Ame])d(if)h(y)o
+(our)g(site)g(lac)o(ks)105 1238 y(the)e(fon)o(ts)g(themselv)o(es)g(or)g
+(the)g(prerequisite)i(auxiliary)g(\014les)f FB(amsfonts.sty)d
+FD(and)j FB(amssymb.sty)p FD(.)105 1364 y FE(12.)25 b(The)18
+b(Index,)f(the)i(T)-5 b(able)18 b(of)h(Con)n(ten)n(ts)g(and)h(the)e
+(Glossary)105 1466 y FD(The)d(basic)h(command)f(for)g(putting)g
+(something)g(in)o(to)g(the)h(index)g(is)g FB(\\index)p
+FD(,)d(as)i(in)h(standard)f(L)1787 1460 y Fw(a)1808 1466
+y FD(T)1833 1480 y(E)1858 1466 y(X.)105 1522 y(But)f
+FB(\\index)f FD(do)q(es)h(not)g(prin)o(t)g(its)g(argumen)o(t.)19
+b(T)l(o)14 b(index)h(a)e(w)o(ord)h(that)f(actually)i(app)q(ears)f(in)g
+(the)g(text)105 1579 y(sa)o(y)c FB(\\ix{...})p FD(.)17
+b(T)l(o)11 b(index)h(mathematical)f(notation)f(sa)o(y)g
+FB(\\ixn$...$)g FD(or)g FB(\\ixninv$...$)p FD(,)g(dep)q(ending)105
+1635 y(on)17 b(whether)h(the)f(con)o(ten)o(ts)g(should)i(app)q(ear)e
+(or)g(not.)26 b(And,)19 b(just)e(for)f(symmetry)l(,)i(y)o(ou)f(can)g
+(also)h(use)105 1692 y FB(\\ixinv)p FD(,)c(whic)o(h)i(equals)g
+FB(\\index)p FD(:)799 1781 y(T)l(ext)311 b(Notation)375
+1863 y(Visible)291 b FB(\\ix)330 b(\\ixn)375 1919 y FD(In)o(visible)261
+b FB(\\ixinv)d(\\ixninv)188 2021 y FD(An)14 b(index)g(en)o(try)f(is)h
+(made)g(automatically)g(for)e(an)o(y)h FB(\\label)g FD(or)g
+FB(\\ref)g FD(command.)19 b(In)14 b(the)f(second)105
+2078 y(case)i(the)g(en)o(try)g(go)q(es)g(in)o(to)g(the)h(index)g
+(\014le)g(preceded)h(b)o(y)e(a)g FB(\045)p FD(.)188 2134
+y(Remem)o(b)q(er)g(that,)d(unless)j(y)o(ou)f(ha)o(v)o(e)f(issued)i(the)
+f(command)f FB(\\autolabelfalse)p FD(,)f(there)i(are)f(lots)105
+2191 y(of)h(situations)h(in)g(whic)o(h)g(a)f(lab)q(el,)i(and)e
+(consequen)o(tly)i(an)e(index)i(en)o(try)l(,)e(is)h(generated)f
+(automatically:)105 2247 y(in)19 b(particular,)h(this)f(happ)q(ens)g
+(for)f(eac)o(h)g(sectioning)i(command)e(\(Section)h(5\))f(and)g(for)g
+(eac)o(h)h(tagged)105 2304 y(theorem,)i(lemma,)g(and)f(so)f(on)h
+(\(Section)h(6\).)33 b(This)21 b(pro)o(vides)f(a)g(w)o(ealth)g(of)g
+(index)h(en)o(tries,)g(whic)o(h)105 2360 y(later)15 b(y)o(ou)h(can)f
+(winno)o(w)h(out)f(semi-automatically)l(,)h(if)g(necessary)l(,)g(since)
+g(en)o(tries)g(of)f(this)h(sort)f(app)q(ear)105 2416
+y(in)j(quotation)e(marks,)g(preceded)i(b)o(y)f(their)g(t)o(yp)q(e.)25
+b(Y)l(ou)17 b(can)g(see)g(all)g(the)g(en)o(tries)g(that)f(a)h(giv)o(en)
+g(page)105 2473 y(con)o(tributes)j(to)f(the)h(index)h(b)o(y)f(lo)q
+(oking)h(at)e(the)h(small)g(prin)o(t)g(on)g(the)g(top)f(left)i(of)e
+(the)h(page)f(when)105 2529 y(pro)q(o\014ng)c(mo)q(de)h(is)f(on)g
+(\(Section)h(13\).)105 2729 y(Revision:)22 b(1.12)1029
+b(Date:)19 b(95/07/03)13 b(15:57:22)p eop
+%%Page: 15 15
+15 14 bop 105 -25 a Fz(13.)17 b(Pro)q(o\014ng)d(Aids)1466
+b(15)-225 116 y FL(F)n(rank)10 b(Mittelbac)o(h)-225 145
+y Fa(y)p FL(dagger)-225 174 y(\045)i(No)g(More)g(F)n(ragile)-183
+203 y(Commands)-225 232 y(Section)g(\\Pro)q(o\014ng)-183
+261 y(Aids")105 120 y Fq(\003)76 b Fr(The)14 b Fs(geom)g
+Fr(st)o(yle)g(mo)q(di\014es)f(the)h Fs(\\theindex)e Fr(format)h(of)g
+(standard)h(L)1297 115 y Fp(a)1316 120 y Fr(T)1339 133
+y(E)1363 120 y(X)g(so)g(that)g(the)h(index)f(is)g(prin)o(ted)105
+170 y(in)20 b(smaller)g(t)o(yp)q(e.)39 b(Moreo)o(v)o(er,)22
+b(it)f(ac)o(hiev)o(es)g(a)g(double-column)e(format)g(not)h(b)o(y)h
+(using)f(standard)i(L)1781 165 y Fp(a)1800 170 y Fr(T)1823
+182 y(E)1846 170 y(X's)105 220 y Fs(\\twocolumn)11 b
+Fr(command,)f(whic)o(h)i(starts)i(a)f(new)g(page,)g(but)g(rather)h(F)m
+(rank)e(Mittelbac)o(h's)h Fs(multicols)e Fr(en)o(viron-)105
+270 y(men)o(t)h([Mit89],)e(whic)o(h)j(is)f(implemen)o(ted)e(in)i(the)h
+(\014le)g Fs(multicol.sty)p Fr(.)i(Using)d(this)h(en)o(vironmen)o(t)e
+(y)o(ou)h(can)h(ha)o(v)o(e)105 319 y(single-column)f(and)i
+(double-column)e(text)i(on)g(the)g(same)f(page.)19 b(If)13
+b(y)o(ou)h(w)o(an)o(t)f(to)h(add)g(an)f(explanation)g(b)q(efore)105
+369 y(the)h(index,)g(for)f(example,)g(y)o(ou)g(migh)o(t)f(sa)o(y)h
+(something)g(lik)o(e)g(this:)147 463 y Fs(\\begin{theindex)o(})147
+512 y(\\null)260 b(\045)22 b(this)f(avoids)f(what)h(seems)g(to)g(be)h
+(a)f(bug)g(in)h(multicol.sty)147 562 y(\\end{multicols})40
+b(\045)22 b(end)f(double)f(column)h(format)f(started)h(by)g
+(\\begin{theindex})147 662 y(Numbers)f(in)h(parentheses)f(refer)h(to)g
+(pages)g(where)f(the)i(entry)e(should)h(be)147 712 y(discussed)e(but)j
+(isn't,)e(due)h(to)h(laziness)e(on)h(the)g(author's)g(part.)147
+811 y(\\begin{multicol)o(s}2)e(\045)i(restart)g(double)f(column)h
+(format)147 861 y(\\item)f(aardvark...)147 911 y(\\end{theindex})105
+1011 y FD(Supp)q(ort)13 b(for)f(a)h(glossary)f(is)h(somewhat)f(more)h
+(extensiv)o(e)g(than)g(in)h(standard)e(L)1464 1005 y
+Fw(a)1485 1011 y FD(T)1510 1025 y(E)1536 1011 y(X.)g(Y)l(ou)h(can)g
+(mark)f(a)105 1067 y(w)o(ord)g(as)h(a)g(glossary)g(en)o(try)f(b)o(y)i
+(sa)o(ying)f FB(\\glo{...})p FD(;)f(this)i(causes)f(a)1293
+1051 y Fb(y)1310 1067 y FD(dagger)g(to)f(b)q(e)i(placed)g(b)q(efore)g
+(the)105 1124 y(w)o(ord,)j(and)g(an)g(index)h(en)o(try)f(for)g(the)g(w)
+o(ord)f(to)h(b)q(e)h(generated)f(in)h(the)f(\014le)h
+Fv(jobname)p FB(.idx)p FD(,)f(preceded)105 1180 y(b)o(y)e
+FB(\\dag)p FD(.)105 1253 y Fq(\003)75 b Fr(Note)14 b(that)g(the)g
+Fs(geom)e Fr(st)o(yle)i(do)q(es)g(not)g(use)g(a)f(separate)i
+Fi(jobname)p Fs(.glo)e Fr(\014le;)g(although)g(standard)h(L)1781
+1248 y Fp(a)1800 1253 y Fr(T)1823 1266 y(E)1846 1253
+y(X's)105 1303 y Fs(\\glossary)e Fr(command)g(is)i(still)g(a)o(v)n
+(ailable)e(if)i(y)o(ou)g(insist)g(in)g(writing)f(en)o(tries)j(to)e
+(that)h(\014le,)f(this)g(command)e(has)105 1353 y(not)i(b)q(een)h(made)
+e(robust)h(in)f(the)i(w)o(a)o(y)e(that)h Fs(\\index)f
+Fr(and)g Fs(\\label)g Fr(ha)o(v)o(e.)18 b(\(See)d(Section)f(4.\))188
+1432 y FD(The)22 b(glossary)g(itself)h(is)g(delimited)i(b)o(y)d
+FB(\\begin{theglossary})d FD(and)k FB(\\end{theglossary})p
+FD(.)105 1489 y(Glossary)15 b(en)o(tries)g(start)f(lik)o(e)i(this:)147
+1582 y Fs(\\entry{doohicke)o(y})j(...)147 1632 y(\\entry[\\cite{..)o
+(.}]{t)o(hinga)o(majig)o(})g(...)105 1732 y FD(The)d(en)o(try)g(name)h
+(is)f(prin)o(ted)h(in)g(b)q(oldface,)g(follo)o(w)o(ed)g(b)o(y)f(a)g(p)q
+(erio)q(d.)24 b(The)17 b(con)o(ten)o(ts)e(of)h(the)g(optional)105
+1788 y(argumen)o(t)e(are)h(prin)o(ted)h(immediately)h(after)d(the)i(en)
+o(try)e(name,)h(b)q(efore)h(the)f(p)q(erio)q(d.)21 b(The)16
+b(commen)o(ts)105 1845 y(made)f(ab)q(o)o(v)o(e)g(ab)q(out)g
+(double-column)j(formatting)c(apply)i(to)e(the)i(glossary)e(as)h(w)o
+(ell.)188 1901 y(The)d(table)g(of)g(con)o(ten)o(ts)f(is)h(treated)g(in)
+h(m)o(uc)o(h)e(the)h(same)g(w)o(a)o(y)f(as)g(in)i(standard)e(L)1551
+1895 y Fw(a)1572 1901 y FD(T)1597 1915 y(E)1623 1901
+y(X,)g(but)h(there)g(is)105 1958 y(one)j(imp)q(ortan)o(t)f
+(di\013erence:)21 b(starred)13 b(sectioning)j(commands,)e(lik)o(e)i
+FB(\\section*)p FD(,)d(do)i(sho)o(w)e(up)i(in)h(the)105
+2014 y(table)g(of)f(con)o(ten)o(ts,)f(unless)i(y)o(ou'v)o(e)f(said)g
+FB(\\starredcontentsfalse)p FD(.)j(Since)e(one)g(generally)g(do)q
+(esn't)105 2071 y(w)o(an)o(t)e(the)g(table)h(of)f(con)o(ten)o(ts)g(to)g
+(include)j(an)e(en)o(try)f(for)g(the)h(table)g(of)f(con)o(ten)o(ts)g
+(itself,)h(the)g(de\014nition)105 2127 y(of)g FB(\\tableofcontents)e
+FD(in)j FB(geomart.sty)d FD(starts)h(lik)o(e)j(this:)147
+2220 y Fs(\\def\\tableofcon)o(tents)o({{\\st)o(arred)o(cont)o(entsf)o
+(alse\\)o(secti)o(on*{C)o(onten)o(ts}.)o(..}})105 2320
+y FD(The)e(extra)g(pair)h(of)e(braces)i(limits)g(the)f(action)h(of)f
+FB(\\starredcontentsfalse)d FD(to)i(this)i(en)o(try)f(only)l(.)105
+2446 y FE(13.)25 b(Pro)r(o\014ng)18 b(Aids)105 2548 y
+FD(The)e FB(geom)f FD(st)o(yle)h(pro)o(vides)h(a)e(n)o(um)o(b)q(er)h
+(of)g(pro)q(o\014ng)g(aids)g(that)f(y)o(ou)h(can)g(turn)f(on)h(and)g
+(o\013)f(b)o(y)h(sa)o(ying)105 2604 y FB(\\proofingtrue)c
+FD(and)i FB(\\proofingfalse)p FD(.)k(The)c(default)h(is)f(for)f(pro)q
+(o\014ng)h(to)g(b)q(e)g(on.)20 b(These)14 b(facilities)105
+2729 y(Revision:)22 b(1.12)1029 b(Date:)19 b(95/07/03)13
+b(15:57:22)p eop
+%%Page: 16 16
+16 15 bop 105 -25 a Fz(App)q(endix:)19 b Fg(mathfig)p
+Fz(|A)10 b(System)k(for)f(Doing)h(T)o(yp)q(esetting)h(in)e(Mathematica)
+573 b(16)-225 116 y FL(\045)12 b(The)g(Index,)f(the)-183
+145 y(T)n(able)f(of)h(Con)o(ten)o(ts)-183 174 y(and)f(the)g(Glossary)
+-225 203 y(R)o(CS)-225 232 y(Section)h(\\App)q(endix:)-183
+261 y Fy(mathfig)p FL(|A)-183 290 y(System)e(for)i(Doing)-183
+319 y(T)o(yp)q(esetting)h(in)-183 348 y(Mathematica")105
+120 y FD(are)17 b(indep)q(enden)o(t)j(of)e(standard)f(L)702
+114 y Fw(a)723 120 y FD(T)748 134 y(E)774 120 y(X's)g
+FB(draft)g FD(option)h(to)f(the)g FB(book)g FD(and)h
+FB(article)f FD(st)o(yle,)h(whose)105 177 y(only)e(e\013ect)f(is)g(to)g
+(mak)o(e)g(o)o(v)o(erfull)g(b)q(o)o(x)h(mark)o(ers)e(visible.)188
+233 y(If)22 b(y)o(ou)f(use)g(L)428 227 y Fw(a)449 233
+y FD(T)474 247 y(E)500 233 y(X's)g FB(\\includeonly)e
+FD(mec)o(hanism)j([Lam86,)g(76],)f(y)o(ou)g(can)h(prin)o(t)f(y)o(our)g
+(\014nal)105 289 y(v)o(ersion)e(b)o(y)g(passing)g(the)f(macro)g
+FB(\\noproofing)f FD(as)i(the)g(argumen)o(t)e(to)h FB(\\includeonly)p
+FD(.)29 b(This)19 b(not)105 346 y(only)d(turns)g(o\013)f(all)i(pro)q
+(o\014ng)f(aids,)g(but)g(also)f(prev)o(en)o(ts)h(L)1109
+340 y Fw(a)1130 346 y FD(T)1155 360 y(E)1180 346 y(X)g(from)f(starting)
+h(a)f(new)h(page)g(for)f(eac)o(h)105 402 y(input)g(\014le.)20
+b(\(Naturally)l(,)14 b(the)g(page)g(breaks)g(will)h(lik)o(ely)h(b)q(e)e
+(di\013eren)o(t)g(b)q(ecause)h(of)e(that,)g(so)h(y)o(ou'll)g(need)105
+459 y(to)h(run)g(the)g(job)g(t)o(wice)h(to)e(get)h(cross-references)h
+(righ)o(t.\))105 532 y Fq(\003)76 b Fr(Normally)11 b(y)o(ou)j(ha)o(v)o
+(e)f(t)o(w)o(o)h(lines)f(lik)o(e)h(this)g(in)f(the)h(main)e(\014le)i
+(for)g(y)o(our)f(do)q(cumen)o(t:)147 627 y Fs(\\typein[\\sectio)o
+(nstoi)o(nclud)o(e]{En)o(ter)18 b(the)k(sections)e(that)h(should)f(be)i
+(processed:)d(})147 677 y(\\includeonly{\\s)o(ectio)o(nstoi)o(nclud)o
+(e})105 772 y Fr(so)f(y)o(ou)f(can)i(t)o(yp)q(e)f(in)f(the)i(sections)g
+(to)f(b)q(e)g(included)g(from)e(the)j(terminal,)e(without)g(ha)o(ving)g
+(to)h(mo)q(dify)d(the)105 822 y(source)g(\014le.)j(The)d(macro)d
+Fs(\\noproofing)g Fr(w)o(orks)i(in)f(this)h(mo)q(de,)e(to)q(o.)188
+902 y FD(By)j(the)h(w)o(a)o(y)l(,)e(if)h(y)o(ou)g(are)g(using)h(the)f
+FB(book)g FD(st)o(yle,)g(the)g(construction)h FB(\\chap1{345})d
+FD(expands)j(to)147 997 y Fs(chap1/1.3,chap1)o(/1.4,)o(chap1)o(/1.5)105
+1098 y FD(This)23 b(has)f(nothing)h(to)e(do)h(with)h(pro)q(o\014ng,)h
+(but)e(it)g(pro)o(vides)h(a)f(useful)h(shorthand)f(for)g(use)h(with)105
+1155 y FB(\\includeonly)p FD(.)29 b(Braces)19 b(should)h(b)q(e)g(used)f
+(around)g(a)f(section)i(or)e(c)o(hapter)h(n)o(um)o(b)q(er)g(ha)o(ving)g
+(more)105 1211 y(than)c(one)g(digit.)188 1268 y(In)20
+b(pro)q(o\014ng)g(mo)q(de)g(y)o(ou)f(get,)h(to)f(the)g(left)h(of)f(the)
+h(main)g(text,)g(a)f(column)i(in)f(tin)o(y)g(prin)o(t)g(with)105
+1324 y(all)e(the)f(index)h(en)o(tries)f(con)o(tributed)h(b)o(y)f(that)f
+(page.)25 b(This)17 b(includes)j(automatic)c(en)o(tries)h(with)g(their)
+105 1381 y(resp)q(ectiv)o(e)f(pre\014xes)g(\(see)f(Section)h(12\).)188
+1437 y(If)f(y)o(ou)f(are)g(in)h(pro)q(of)f(mo)q(de)h(and)g(the)f
+(macros)g FB(\\leftfoot)f FD(and)i FB(\\rightfoot)e FD(are)h
+(de\014ned,)i(they)105 1494 y(will)k(b)q(e)f(t)o(yp)q(eset)g(\015ush)g
+(left)g(and)g(\015ush)g(righ)o(t)f(on)h(the)f(fo)q(otline.)31
+b(These)19 b(macros)f(are)g(often)h(de\014ned)105 1550
+y(to)g(con)o(tain)g(information)h(ab)q(out)f(draft)f(v)o(ersion,)j
+(date)e(of)g(last)g(mo)q(di\014cation,)i(etc.,)f(whic)o(h)g(can)f(b)q
+(e)105 1607 y(up)q(dated)d(automatically)l(.)105 1680
+y Fq(\003)76 b Fr(Near)14 b(the)h(top)f(of)f(the)h(source)i(\014le)d
+(for)h(this)g(do)q(cumen)o(t,)f(I)h(wrote)g(the)h(lines)147
+1775 y Fs(\\def\\leftfoot{\\)o(RCSst)o(ring$)o(Revis)o(ion:)j(1.12)j
+($})147 1825 y(\\def\\rightfoot{)o(\\RCSs)o(tring)o($Date)o(:)e
+(95/07/03)h(15:57:22)g($})147 1875 y(\\def\\RCSstring$)o(#1)f(${#1})105
+1970 y Fr(The)c(\014rst)g(t)o(w)o(o)f(lines)g(are)h(automatically)d(up)
+q(dated)j(b)o(y)f(the)h(UNIX)g(utilit)o(y)e(R)o(CS)h(\(Revision)g(Con)o
+(trol)f(System\))105 2019 y(whenev)o(er)19 b(I)f(c)o(hec)o(k)h(the)g
+(\014le)f(in)f(or)h(out.)31 b(R)o(CS)17 b(requires)i(that)f(the)h(k)o
+(eyw)o(ords)f Fs(Revision)p Fr(,)f Fs(Date)g Fr(and)h(so)g(on)105
+2069 y(b)q(e)f(found)f(within)f(dollar)h(signs,)g(and)g(it)g(tac)o(ks)h
+(on)f(a)g(blank)g(b)q(efore)h(the)g(closing)e Fs($)h
+Fr(for)g(go)q(o)q(d)g(measure.)26 b(The)105 2119 y Fs(\\RCSstring)12
+b Fr(macro)g(eliminates)h(this)h(extraneous)h(stu\013.)105
+2269 y FE(App)r(endix:)24 b Ff(mathfig)p FE(|A)16 b(System)h(for)h
+(Doing)h(T)n(yp)r(esetting)e(in)h(Mathematica)105 2372
+y(W)-5 b(arning.)22 b FH(The)33 b(soft)o(w)o(are)g(describ)q(ed)g(in)f
+(this)h(App)q(endix)f(dep)q(ends)h(on)h(Mathematica)105
+2430 y([W)l(ol91].)21 b(I)15 b(mak)o(e)f(no)i(represen)o(tation)f
+(whatso)q(ev)o(er)h(concerning)f(its)g(p)q(erformance.)20
+b(Although)105 2488 y(I)d(ha)o(v)o(e)f(used)h Ff(mathfig)e
+FH(under)i(Mathematica)f(v)o(ersions)h(1.2,)g(2.0)g(and)h(2.1,)g(I)e
+(emphasize)g(that)105 2546 y Ff(mathfig)c FH(ma)o(y)i(fail)g(to)h(w)o
+(ork)g(as)h(describ)q(ed)e(here)g(and)i(that)f(I)g(tak)o(e)f(no)h(resp)
+q(onsibilit)o(y)f(for)h(suc)o(h)105 2604 y(failure.)105
+2729 y FD(Revision:)22 b(1.12)1029 b(Date:)19 b(95/07/03)13
+b(15:57:22)p eop
+%%Page: 17 17
+17 16 bop 105 -25 a Fz(App)q(endix:)19 b Fg(mathfig)p
+Fz(|A)10 b(System)k(for)f(Doing)h(T)o(yp)q(esetting)h(in)e(Mathematica)
+573 b(17)-225 116 y FL(\045)10 b(P)o(ostScript)i(Figures)-225
+145 y(\045)e(Installation)-225 174 y(\045)g(PStorus)105
+120 y FD(The)i FB(mathfig)f FD(program,)g(for)g(use)h(on)f(UNIX)i
+(systems,)e(tak)o(es)g(a)g(Mathematica)g(source)h(\014le)h
+FB(foo.m)e FD(and)105 177 y(calls)16 b(Mathematica)e(to)h(create)g(a)f
+(P)o(ostScript)h(\014le)h FB(foo.ps)p FD(.)j(Then)d FB(mathfig)e
+FD(p)q(ostpro)q(cesses)h FB(foo.ps)105 233 y FD(to)d(tak)o(e)g(out)h
+(the)g(P)o(ostScript)f(lab)q(els)j(putting)e(the)g(same)f(information)h
+(in)h(a)f(\014le)g FB(foo.lab)f FD(that)g(can)h(b)q(e)105
+289 y(read)h(later)g(b)o(y)g(L)384 283 y Fw(a)405 289
+y FD(T)430 303 y(E)455 289 y(X,)g(as)g(explained)i(in)f(Section)f(10.)
+19 b(The)14 b(usage)g(of)g(this)g(program)f(is)i(the)f(follo)o(wing:)
+147 378 y Fs(mathfig)e Fr([)h Fs(-d)h Fi(dir)n(e)n(ctory)f
+Fr(])g([)g Fs(-i)h Fi(init\014le)f Fr(])h Fi(\014les)105
+466 y FD(The)j FB(-d)f FD(option)h(mak)o(es)f(all)i(\014le)g(names)e
+(relativ)o(e)h(to)f(the)h(sp)q(eci\014ed)i(directory)l(.)25
+b(The)17 b FB(-i)f FD(option)h(tells)105 522 y(Mathematica)c(to)g(read)
+g(an)h(initialization)j(\014le.)j(An)o(y)14 b(n)o(um)o(b)q(er)f(of)h
+(\014les)g(can)g(b)q(e)g(passed)g(as)f(subsequen)o(t)105
+579 y(argumen)o(t;)f FB(\\mathfig)e FD(pro)q(cesses)j(one)f(at)f(a)g
+(time,)i(starting)e(a)h(new)g(Mathematica)f(session)h(eac)o(h)g(time.)
+188 635 y(The)17 b(steps)g(p)q(erformed)g(b)o(y)g FB(mathfig)f
+FD(when)h(pro)q(cessing)h(the)f(\014le)h FB(foo.m)e FD(are)g(the)h
+(follo)o(wing.)26 b(It)105 692 y(calls)c FB(math)e FD(and)g(giv)o(es)h
+(it)g(the)g(commands)f FB(Get[")p Fv(init\014le)p FB("])e
+FD(\(if)j(an)f(initialization)k(\014le)e(w)o(as)d(sp)q(eci-)105
+748 y(\014ed\))f(and)f FB(Get["foo.m"])p FD(.)25 b(The)18
+b(result)f(of)g FB(Get["foo.m"])f FD(should)i(b)q(e)g(an)g(expression)g
+(with)g(head)105 804 y FB(Graphics)f FD(or)h FB(Graphics3D)p
+FD(.)f(This)i(expression)g(is)g(passed)g(to)e FB(Display)p
+FD(,)h(with)h(output)f(sen)o(t)g(to)g(the)105 861 y(\014lter)h
+FB(geomfix)p FD(;)f(this)g(\014lter)h(is)f(analogous)g(to)g(the)g
+FB(psfix)f FD(program)g(supplied)k(with)d(Mathematica.)105
+917 y(The)f(output)g(of)f FB(geomfix)g FD(is)h(further)g(pro)q(cessed)h
+(to)e(create)h(the)g(\014les)g FB(foo.ps)f FD(and)h FB(foo.lab)p
+FD(.)24 b(This)105 974 y(last)12 b(step)g(is)g(p)q(erformed)h(b)o(y)f
+FB(mathlabels)p FD(,)e(a)i FB(perl)f FD(program.)18 b(\()p
+FB(perl)11 b FD(is)i(a)e(widely)j(used)e(UNIX)h(utilit)o(y)l(,)105
+1030 y(and)f(it)h(should)g(b)q(e)g(a)o(v)m(ailable)h(at)e(y)o(our)f
+(site.)20 b(If)12 b FB(mathfig)f FD(claims)j(that)d FB(mathlabels)g
+FD(cannot)h(b)q(e)h(found,)105 1087 y(it)i(ma)o(y)g(b)q(e)h(b)q(ecause)
+g FB(perl)f FD(is)g(not)g(where)h FB(mathfig)e FD(exp)q(ects)i(to)e
+(\014nd)i(it;)f(see)h(the)f(end)h(of)f(Section)h(3.\))188
+1143 y(By)f(default,)g FB(\\mathfig)e FD(creates)h(a)g(\014gure)h(t)o
+(w)o(o)e(inc)o(hes)j(high)f(and)g(\014v)o(e)g(inc)o(hes)h(wide.)k(A)15
+b(di\013eren)o(t)105 1200 y(heigh)o(t)20 b(can)f(b)q(e)h(sp)q
+(eci\014ed)i(b)o(y)d(including)j(the)d(assignmen)o(t)h
+FB($height=)p Fv(height)e FD(in)i(the)g(Mathematica)105
+1256 y(source)h(\014le,)i(where)e Fv(height)g FD(is)g(a)g(n)o(um)o(b)q
+(er)g(sp)q(ecifying)i(the)e(heigh)o(t)g(in)h(inc)o(hes.)38
+b(Y)l(ou)21 b(can)g(also)g(sa)o(y)105 1313 y FB($width=)p
+Fv(width)p FD(.)30 b(The)19 b(reason)f(to)g(put)h(these)f(n)o(um)o(b)q
+(ers)h(in)h(the)e(source)h(\014le,)h(rather)e(than)h(c)o(ho)q(osing)105
+1369 y(them)14 b(at)f(run)i(time,)f(is)g(arc)o(hiv)m(al:)21
+b(in)14 b(this)h(w)o(a)o(y)e(the)h(output)g(is)g(en)o(tirely)h
+(determined)h(b)o(y)e(the)g(con)o(ten)o(ts)105 1425 y(of)h(the)g
+(source)g(\014le.)105 1495 y Fq(\003)82 b Fr(F)m(urthermore,)21
+b(if)f(y)o(ou)g(assign)g(v)n(alues)f(to)i(the)f(v)n(ariables)g
+Fs($xlo)p Fr(,)g Fs($xhi)p Fr(,)h Fs($ylo)e Fr(and)h
+Fs($yhi)p Fr(,)h(the)f(\014gure)105 1545 y(pro)q(duced)13
+b(b)o(y)f(Mathematica)f(will)f(b)q(e)j(clipp)q(ed)f(to)g(a)f(windo)o(w)
+h(with)f(the)i(giv)o(en)e(b)q(oundaries,)i(and)f(rescaled)h(so)f(as)105
+1595 y(to)f(\014t)h(in)f(a)g(b)q(o)o(x)g(of)g(the)h(giv)o(en)f(heigh)o
+(t)h(and)f(width.)17 b(F)m(or)11 b(example,)f(setting)i
+Fs($xlo=$ylo=.1)d Fr(and)i Fs($xhi=$yhi=.9)105 1645 y
+Fr(will)i(trim)f(10\045)h(o\013)h(the)h(size)g(of)e(the)i(b)q(o)o(x)f
+(around)g(eac)o(h)g(edge,)h(and)e(the)i(remaining)d(graphics)i(will)f
+(b)q(e)i(rescaled)105 1695 y(b)o(y)h(a)f(factor)h(of)g(1)p
+Fh(=)p Fr(\()p Fh(:)p Fr(9)9 b Fq(\000)i Fh(:)p Fr(1\))k(=)g(1)p
+Fh(:)p Fr(25.)23 b(Under)17 b(Mathematica)e(1.2,)g(this)h(is)f(the)i
+(only)e(w)o(a)o(y)h(I)f(kno)o(w)h(to)g(mak)o(e)e(a)105
+1745 y(3D-graphics)i(ob)r(ject)i(o)q(ccup)o(y)g(the)f(whole)g(b)q
+(ounding)f(b)q(o)o(x.)27 b(Unfortunately)17 b(the)g(v)n(alues)g(of)f
+Fs($xlo)g Fr(and)h(so)g(on)105 1794 y(ha)o(v)o(e)d(to)f(b)q(e)i
+(determined)f(b)o(y)f(trial)h(and)f(error.)188 1844 y(The)j(sym)o(b)q
+(ols)f Fs($height)p Fr(,)f Fs($width)p Fr(,)h Fs($xlo)p
+Fr(,)g Fs($ylo)p Fr(,)g Fs($xhi)p Fr(,)g Fs($yhi)g Fr(and)h
+Fs($Def)f Fr(should)h(not)f(b)q(e)i(used)g(in)e(y)o(our)105
+1894 y(Mathematica)e(source)i(\014le)f(except)h(with)e(the)i(meanings)d
+(describ)q(ed)k(ab)q(o)o(v)o(e.)i(\()p Fs($Def)13 b Fr(is)h(used)g(in)o
+(ternally)m(.\))188 1944 y(When)j(Mathematica)f(generates)j(a)e
+(picture)h(with)f(lab)q(els,)g(the)h(scaling)f(computations)e(are)j
+(implicit)c(in)105 1994 y(the)f(resulting)f(P)o(ostScript)i(co)q(de,)f
+(and)f(they)h(tak)o(e)f(in)o(to)g(accoun)o(t)h(the)g(dimensions)e(of)g
+(the)i(lab)q(els)f(presen)o(t)i(in)e(the)105 2043 y(co)q(de.)19
+b(Th)o(us)14 b(the)h(graph)e(generated)i(b)o(y)147 2127
+y Fs(Plot[x,{x,0,1}])105 2210 y Fr(lo)q(oks)e(a)h(bit)f(smaller)g(on)g
+(the)i(screen)h(than)e(the)g(one)g(generated)i(b)o(y)147
+2293 y Fs(Plot[x,{x,0,1},)o(Ticks)o(->Fal)o(se])105 2377
+y Fr(b)q(ecause)f(the)f(\014rst)g(has)g(to)f(accomo)q(date)g(lab)q(els)
+g(along)f(the)i(axes,)f(in)g(the)h(same)f(size)h(windo)o(w.)j(Ho)o(w)o
+(ev)o(er,)c(when)105 2426 y(y)o(ou)g(run)g Fs(mathfig)p
+Fr(,)f(the)i(lab)q(els)f(are)h(tak)o(en)f(out)g(of)g(the)h(P)o
+(ostScript)g(\014le,)f(and)g(therefore)i(don't)d(ha)o(v)o(e)h(an)o(y)g
+(e\013ect)105 2476 y(on)g(the)h(scaling)f(of)f(the)i(picture.)19
+b(The)14 b Fs(mathfig)e Fr(output)h(for)g(the)h(t)o(w)o(o)f(commands)e
+(ab)q(o)o(v)o(e)i(w)o(ould)f(b)q(e)i(scaled)g(b)o(y)105
+2526 y(exactly)i(the)h(same)e(amoun)o(t,)f(and)i(the)h(T)775
+2535 y(E)798 2526 y(X)f(lab)q(els)g(generated)h(for)f(the)g(\014rst)h
+(command)c(w)o(ould)i(stic)o(k)i(out)f(of)105 2576 y(the)e(b)q(ounding)
+g(b)q(o)o(x)f(a)h(little)f(bit,)g(just)h(as)g(they)h(do)e(in)h(Figure)g
+(2.)105 2729 y FD(Revision:)22 b(1.12)1029 b(Date:)19
+b(95/07/03)13 b(15:57:22)p eop
+%%Page: 18 18
+18 17 bop 105 -25 a Fz(References)1586 b(18)-225 116
+y FL(Section)10 b(\\References")105 120 y FE(References)105
+222 y FD([Ame])95 b(American)21 b(Mathematical)f(So)q(ciet)o(y.)35
+b FA(A)1041 231 y(M)1091 222 y(S)p FD(-L)1146 216 y Fw(a)1167
+222 y FD(T)1192 235 y(E)1217 222 y(X)20 b(v)o(ersion)g(1.1)f(user's)h
+(guide)h(\(1991\).)318 278 y(Distributed)16 b(with)g(the)f(soft)o(w)o
+(are)f(\(use)h(anon)o(ymous)f(ftp)h(from)g FB(e-math.ams.com)p
+FD(\).)105 353 y([Dar])111 b(T)l(rev)o(or)14 b(Darrell.)20
+b(Ps\014g/T)779 363 y(E)804 353 y(X)15 b(1.8)f(users)h(guide)g
+(\(1991\).)j(Distributed)e(with)f(the)g(soft)o(w)o(are)318
+410 y(\(use)g(anon)o(ymous)g(ftp)g(from)f FB(whitechapel.media.mit.edu)
+p FD(\).)105 485 y([ECL)210 468 y Fu(+)237 485 y FD(92])22
+b(Da)o(vid)16 b(B.)f(A.)g(Epstein,)h(Jim)g(Cannon,)f(Silvio)j(Levy)l(,)
+e(Derek)f(Holt,)g(Mik)o(e)h(P)o(aterson,)e(and)318 541
+y(William)23 b(Th)o(urston.)35 b Fv(Wor)n(d)22 b(Pr)n(o)n(c)n(essing)d
+(in)i(Gr)n(oups)p FD(.)36 b(Jones)21 b(and)g(Bartlett,)g(Boston,)318
+598 y(1992.)105 673 y([Lam86])52 b(Leslie)13 b(Lamp)q(ort.)g(L)653
+667 y Fw(a)674 673 y FD(T)699 686 y(E)725 673 y(X)p Fv(:)f(A)g(Do)n
+(cument)h(Pr)n(ep)n(ar)n(ation)f(System)p FD(.)g(Addison-W)l(esley)l(,)
+i(Read-)318 729 y(ing,)i(MA,)e(1986.)105 804 y([Mit89])69
+b(F)l(rank)15 b(Mittelbac)o(h.)21 b(An)15 b(en)o(vironmen)o(t)h(for)f
+(m)o(ulti-column)i(output.)j Fv(TUGb)n(o)n(at)p FD(,)14
+b(10:407{)318 861 y(415,)g(1989.)105 936 y([Rok])107
+b(T)l(om)15 b(Rokic)o(ki.)21 b(D)o(VIPS:)15 b(A)g(T)846
+946 y(E)871 936 y(X)g(driv)o(er)h(\(v)o(ersion)f(5.490,)e(1992\).)18
+b(Distributed)e(with)g(the)318 992 y(soft)o(w)o(are)e(\(use)h(anon)o
+(ymous)f(ftp)h(from)g FB(labrea.stanford.edu)p FD(\).)105
+1068 y([S)143 1051 y Fu(+)170 1068 y FD(88])89 b(Mik)o(e)16
+b(Sc)o(h)o(uster)f(et)g(al.)20 b Fv(A)n(dob)n(e)c(Il)r(lustr)n(ator)p
+FD(.)j(Adob)q(e)d(Systems,)f(P)o(alo)g(Alto,)f(CA,)h(1988.)105
+1143 y([W)l(ol91])63 b(Stephen)13 b(W)l(olfram.)h Fv(Mathematic)n(a:)20
+b(A)13 b(System)f(for)i(Doing)f(Mathematics)g(by)h(Computer)p
+FD(.)318 1199 y(Addison-W)l(esley)l(,)j(Reading,)f(MA,)f(2nd)g
+(edition,)h(1991.)105 2729 y(Revision:)22 b(1.12)1029
+b(Date:)19 b(95/07/03)13 b(15:57:22)p eop
+%%Page: 19 19
+19 18 bop 105 -25 a Fz(Index)1669 b(19)-225 116 y FL(Section)10
+b(\\Index")105 120 y FE(Index)105 2729 y FD(Revision:)22
+b(1.12)1029 b(Date:)19 b(95/07/03)13 b(15:57:22)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/latex209/contrib/geomsty/manual.tex b/macros/latex209/contrib/geomsty/manual.tex
new file mode 100644
index 0000000000..ac12384efe
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/manual.tex
@@ -0,0 +1,1312 @@
+% $Header: /usr/home/levy/texts/geomsty/RCS/manual.tex,v 1.12 95/07/03 15:57:22 levy Exp Locker: levy $
+
+\documentstyle[11pt,geom]{article}
+
+\def\leftfoot{\RCSstring$Revision: 1.12 $}
+\def\rightfoot{\RCSstring$Date: 95/07/03 15:57:22 $}
+\def\RCSstring$#1 ${#1}
+
+\addtolength{\textwidth}{.5in}
+\addtolength{\oddsidemargin}{-.25in}
+\addtolength{\evensidemargin}{-.25in}
+\def\AmS{{\the\textfont2 A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}
+\def\amstex/{\AmS-\TeX}
+\def\amslatex/{\AmS-\LaTeX{}}
+\def\latex/{\LaTeX{}}
+
+\makeatletter
+\def\@verbatim{\par\small\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\advance\leftskip 1em \rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \tt \catcode``=13 \@noligs \let\do\@makeother \dospecials}
+\makeatother
+
+\newenvironment{wizard}{\medbreak\begin{small}
+ \leavevmode\llap{\hbox to \parindent{$*$\hfil}}}{\par\end{small}\medbreak}
+\def\preref#1{{\normalshape#1}}
+\newtheorem[{\par\large}{\it}]{theorem}{Theorem}[section]
+\equationwith{theorem}
+\newtheorem[{\par\large}{}]{warning}{Warning}
+\def\thewarning{\unskip}
+\def\picpath{}
+
+\makeatletter
+\ifx\fmtname\format@e
+\DeclareSymbolFont{AMSa}{U}{msa}{m}{n}
+\DeclareMathSymbol\square {\mathord}{AMSa}{"03}
+\fi
+\makeatother
+
+\makeindex
+
+\begin{document}
+
+\title{The {\tt geom} style for \latex/}
+\author{Silvio Levy\\Geometry Center\\
+University of Minnesota}
+\date{Revised for \latex/2$_\epsilon$, July 1995}
+
+\maketitle
+
+\tableofcontents
+%\listoffigures
+
+\vfil
+
+\copyright 1992 Silvio Levy. The software described in this document
+is available free of charge through the Geometry Center at the
+University of Minnesota. It is distributed without any warranty,
+express or implied.
+
+Bug reports and comments about the software and documentation
+can be sent to {\tt levy@geom.umn.edu}. I will take them into
+consideration in future releases, but there is no
+guarantee that particular bugs will be fixed.
+
+\vfil\eject
+
+\section{Introduction}
+
+This document describes a \latex/ style called \ix{{\tt geom}},
+which is loosely based on Lamport's \verb+book+
+and \verb+article+ styles \cite{Lamport},
+but provides a number of additional features, such as:
+\begin{itemize}
+\item
+inclusion of \ix{PostScript} figures in the document,
+and of \TeX\ text within figures;
+\item
+automatic creation of index entries and cross-reference
+labels where appropriate;
+\item
+no restriction on the use of macros and special characters in
+titles, cross-references, captions, etc.;
+\item
+greater versatility in defining theorem-like environments;
+\item
+upright digits in an italics environment (optionally); and
+\item
+proofing aids such as version numbers and a running index.
+\end{itemize}
+There are also purely esthetic differences,
+many of which can be controlled by the user.
+
+This style had its inception in a set of \latex/ macros
+\ixinv{historical notes}%
+\ixinv{acknowledgements}%
+written for the formatting of \ix{Bill Thurston}'s \ix{{\it
+Three-Dimensional Geometry and Topology}}, first by \ix{Yair Minsky}
+and subsequently by me. After three years of gestation, the macros
+started being used intensively by some other people---notably Thurston,
+\ix{David Epstein} and a number of students at \ix{Warwick
+University}---and more modifications, including a complete rewrite,
+were made. The first book published using the \verb+geom+ style
+\cite{Epstein:WordProcessing} came out in February 1992.
+
+The Appendix to this document describes \verb+mathfig+, a system for
+typesetting \TeX\ labels in Mathematica figures. (Mathematica is
+described in \cite{wolfram}). This system can also be used
+independently of \verb+geom+.
+
+This release owes much to the patience of these first users and the
+feedback they provided, for which I am very grateful. Naturally, my
+debt to the people on whose work I've built---\ix{Don Knuth},
+\ix{Leslie Lamport}, \ix{Rainer Sch\"opf}, \ix{Frank Mittelbach},
+\ix{Trevor Darrell} and others---is impossible to quantify. I wish to
+take this opportunity to thank them, and also John Rawnsley, who
+provided the port to \latex/2$_\epsilon$. I also thank Al Marden, the
+Founding Director of the Geometry Center, for creating the conditions
+needed for this work to happen.
+
+\section{Overall Organization}
+
+In order to use this style, you need to be running a version of
+\latex/ that supports the so-called \ix{new font selection
+scheme} (NFSS), due to Frank Mittelbach and Rainer Sch\"opf.
+If your version of \latex/ is \latex/2$_\epsilon$, you are
+automatically using NFSS. If your version is \latex/2.09, you must
+check whether it supports NFSS. Start \latex/ and type
+\verb+\show\selectfont+. If the response includes
+%
+\begin{verbatim}
+> \selectfont=undefined.
+\end{verbatim}
+%
+this is the wrong \latex/. Don't despair yet;
+the right \latex/ may be available at your
+site, but under a different name---try \verb+amslatex+,
+or ask your local guru. (Strictly speaking, \amslatex/
+\cite{amslatex} is a set of \latex/ style files that emulate \amstex/.
+Since their use requires NFSS and the
+necessary modifications used to be supplied with the \amslatex/ style files,
+the name is sometimes used for \latex/+NFSS.) If you can't find
+\latex/+NFSS at all, see further instructions in \Fullref{Installation}.
+
+Unlike most other \latex/ styles, \verb+geom+ comes in several
+files, devoted to different capabilities such as cross-referencing,
+figures, indexing and so on.
+The files currently in the distribution are:
+$$\hbox to \hsize{\small
+\valign{&\hbox{\strut #}\cr
+{\tt dvips.chg}&
+{\tt geom.sty}&
+{\tt geomar10.sty}&
+{\tt geomar11.sty}&
+{\tt geomar12.sty}&
+{\tt geomart.sty}&
+{\tt geombk10.sty}&
+{\tt geombk11.sty}&
+{\tt geombk12.sty}\cr
+\noalign{\hfil}
+%
+driver dependencies&
+master file&
+changes to \verb+art10.sty+&
+changes to \verb+art11.sty+&
+changes to \verb+art12.sty+&
+changes to \verb+article.sty+&
+changes to \verb+book10.sty+&
+changes to \verb+book11.sty+&
+changes to \verb+book12.sty+\cr
+\noalign{\hfil}
+%
+{\tt geombook.sty}&
+{\tt geomenv.sty}&
+{\tt geomeqns.sty}&
+{\tt geomfig.sty}&
+{\tt geomfnt.sty}&
+{\tt geomindx.sty}&
+{\tt geompsfi.sty}&
+{\tt multicol.doc}&
+{\tt multicol.sty}\cr
+\noalign{\hfil}
+%
+changes to \verb+book.sty+&
+environments&
+option file&
+high-level figure support&
+fonts and special symbols&
+index and glossary&
+PostScript figure support&
+source for \verb+multicol.sty+&
+two-column formatting\cr
+}}$$
+
+The file \verb+geom.sty+ is the master, and it is read in when
+\verb+geom+ is called as an option to a main document style, which can
+be either \verb+book+ or \verb+article+.
+That is, to use the stuff described in this document,
+\ixinv{calling {\tt geom}}%
+your text file should start with a line such as
+\begin{verbatim}
+\documentstyle[12pt,geom,...]{book}
+\end{verbatim}
+When \verb+geom.sty+ is loaded in, it guesses what your main style is,
+and reads in some changes to that style, contained in the files
+\verb+geombook.sty+, \verb+geombk12.sty+, and so on.
+
+%Each of the following sections is devoted to one major feature of
+%\verb+geom+. Where appropriate, I discuss the file(s) where the feature
+%is implemented, to allow you to make your own modifications.
+
+The file \verb+multicol.sty+ is part of the package files developed by
+Frank Mittelbach and Rainer Sch\"opf at the University of Mainz.
+It is accompanied by \verb+multicol.doc+, which is a ``source'' file
+with documentation. To obtain more of the excellent software written
+by Mittelbach and Sch\"opf, check the CTAN archives (see the
+Installation section below).
+
+The rest of this document describes the installation of \verb+geom+
+(skip if it's already installed), its major features,
+and how you can take advantage of them and (sometimes) modify them.
+Some material that is either very technical or unlikely to be needed
+except under unusual circumstances is printer in smaller type and
+introduced by an asterisk $*$.
+
+\section{Installation}
+
+You only need to read this section if you are in charge of installing
+\verb+geom+ at your site. Installation is very simple if your \latex/
+supports NFSS and your \TeX-to-PostScript driver is Tom Rokicki's
+\verb+dvips+ \cite{Rokicki}.
+
+To check whether you have \latex/+NFSS, see the
+beginning of \Fullref{Overall Organization}. If you don't,
+it's time to switch over to \latex/2$_\epsilon$.
+Get it by ftp from one of the worldwide CTAN archives
+(currently \verb+pip.shsu.edu+,
+\verb+ftp.uni-stuttgart.de+, and \verb+tex.ac.uk+).
+
+If your driver is not
+\verb+dvips+, you have two choices: either install \verb+dvips+, which
+is almost certainly a good idea (get it by ftp from a CTAN archive); or make a
+copy of the file \verb+dvips.chg+ in this distribution, and modify it
+so it writes the \verb+\special+ commands required by your driver. If
+you adapt \verb+dvips.chg+ for your driver, give the new file a
+different name, and replace with this name all occurrences of
+\verb+dvips.chg+ in the rest of this section. Also, please send me a
+copy of the file, so I can include it in future distributions.
+
+As I was saying before I got sidetracked, installation is simple.
+If you're on a UNIX system, edit the \verb+Makefile+ to make sure the
+pathnames are correct for your site, and run \verb+make install+. If you're
+not on a UNIX system, here are the step-by-step instructions:
+
+Place the files listed in the previous section (all the distribution
+files that end in \verb+.sty+, \verb+.chg+ or \verb+.doc+) in the
+system-wide directory for \TeX\ input files. Create a symbolic link
+\verb+driver.chg+ in this directory, pointing to \verb+dvips.chg+.
+(If your system does not support symbolic links, copy \verb+dvips.chg+
+to \verb+driver.chg+.)
+
+Copy the file \verb+mathlabels.orig+ to \verb+mathlabels+ and edit its
+first line to be the correct pathname of the perl executable on your
+system. (If you don't have \verb|perl| at all, you don't know what
+you're missing---get it as soon as possible.) Decide on a directory
+where you want to install the auxiliary scripts \verb+mathlabels+ and
+\verb+geomfix+ (which are used by \verb+mathfig+), and put copies of
+them there. Copy the file \verb+mathfig.orig+ to \verb+mathfig+ and
+edit the lines at the top to specify the location of the
+\verb+mathlabels+ and \verb+geomfix+ scripts, then copy
+\verb+mathlabels+ to a system-wide directory for executables.
+%On a
+%UNIX system, copy \verb+mathfig.1.orig+ to
+%\verb+mathfig.1+ and edit it to correctly mention the loations of the
+%\verb+mathlabels+ and \verb+geomfix+ scripts, then
+%install the manual page \verb+mathfig.1+ in the appropriate place.
+
+Finally, copy \verb+math.pro+ and \verb+illustrator.pro+ into the
+directory where your \TeX-to-PostScript driver looks for prolog files.
+(This assumes your driver supports the inclusion of prolog files;
+switch to \verb+dvips+ if it doesn't.)
+
+\section{No More Fragile Commands}
+
+In standard \latex/, commands such as \verb+\section+ have {\it moving
+arguments}, that is, arguments that migrate to an auxiliary file {\it
+jobname}\verb+.aux+ to be used later in typesetting the table of
+contents and so on \cite[33--34]{Lamport}.
+In this process, macros in the body of the argument
+are expanded, so that when you type, say,
+\begin{verbatim}
+\section{Annoying \TeX nicalities}
+\end{verbatim}
+what goes into the auxiliary file is something like
+\begin{verbatim}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space
+{1}Annoying T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emXnicalities}{1}}
+\end{verbatim}
+where the second line contains the expansion of the macro \verb+\TeX+.
+
+There are several problems with this. First, the expansion, and
+consequently the line where it occurs in the auxiliary file, can be
+very long, which in some implementations means that \TeX\ cannot
+read the line back in. Secondly, the expansion might not
+make sense, or might do the wrong thing, at the time when it is read in again.
+Even worse, the expansion
+of \verb+\section{\small foo}+, for example, actually
+causes an infinite loop.
+
+\begin{wizard}
+Experienced users of \TeX\ who
+want to know why this happens can try typing the following lines to
+plain \TeX:
+\begin{verbatim}
+\def\foo{\let\bar\foo}
+\foo %Nothing much happens
+\immediate\write0{\foo} %Disaster strikes
+\end{verbatim}
+The problem is that at the time of the \verb+\write+ no assignment is
+taking place, so the \verb+\foo+ at the end of the expansion is not
+handled as a literal.
+\end{wizard}
+
+Standard \latex/'s solution to these problems is for the user to
+precede ``fragile'' macros with the \verb+\protect+ command
+\cite[33--34]{Lamport}. By contrast, in the \verb+geom+ style,
+you don't have to worry about ``fragile'' commands
+in the following situations:
+\begin{itemize}
+\item
+in the arguments of the sectioning commands
+\verb+\chapter+, \verb+\section+, and so on;
+\item
+in the optional argument to the \verb+theorem+
+environment and its relatives (\Fullref{Theorems and Their Friends});
+\item
+in the arguments to \verb+\caption+, \verb+\fig+ and its relatives
+(\Fullref{PostScript Figures});
+\item
+in the arguments to \verb+\markright+ and \verb+\markboth+;
+\item
+in the argument to \verb+\cite+.
+\end{itemize}
+This covers almost all important situations where fragile
+commands need to be \verb+\protect+ed \cite[151]{Lamport}. In future
+versions I hope to extend this permissiveness to the remaining
+situations.
+
+Notice, however, that the \verb+\verb|...|+ construction continues to
+be forbidden inside arguments to most commands. This is due to
+reasons deeply embedded in \TeX\ itself, and is unlikely ever to
+change.
+
+\begin{wizard}
+In some circumstances you might want the old \latex/ behavior of
+macro expansion inside the argument of \verb+\chapter+, say.
+For instance, you might have a locally defined macro whose definition
+will be unknown at the time the table of contents is read.
+In this case you can use the following construction:
+\begin{verbatim}
+\edef\mystring{...} % where ... stands for the argument to be expanded
+\expandafter\chapter\expandafter{\mystring}
+\end{verbatim}
+\end{wizard}
+
+\section{Labels and Cross-References}
+
+In standard \latex/, the argument to the \verb+\label+ command cannot
+contain anything but characters (after expansion). In the \verb+geom+
+style, this restriction is lifted, so labels contain just about
+anything. For example, \verb+\label{\TeX}+ and
+\verb+\label{Isometries of $\bold R^2$}+ are acceptable. Macros are
+no longer expanded.
+
+One advantage of this flexibility is that subdivisions can be
+automatically labeled by their titles. In the \verb+geom+ format, by
+default, every sectioning command such as \verb+\section+ generates a
+label with its title. If this feature causes you to run out of
+memory, you can turn it off by saying \verb+\autolabelfalse+ in your
+document's preamble.
+
+To refer to the place where a label occurs, you can still use the
+\verb+\ref+ command, as in standard \latex/. This gives a bald
+number---for example, \verb+\ref{+{\tt Isometries of }\verb+$\bold R^2$}+ will
+print ``8.3'' if Section~8.3 starts with
+\verb+\section{+{\tt Isometries of }\verb+$\bold R^2$}+
+while automatic labeling is in effect.
+
+A new feature is that you can
+replace \verb+\ref+ by \verb+\fullref+ or \verb+\Fullref+, to get
+``section 8.3'' or ``Section 8.3'', respectively.
+The way \verb+\fullref+ works is by storing in a certain register the
+type of environment in which a label was created. Thus, when
+a new section starts, this register gets the value ``section''. When
+a \verb+\begin+ command introducing
+one of the environments described in \Fullref{Theorems and Their Friends} is encountered
+inside this section, the register gets updated to the type of that
+environment, say ``theorem''. It reverts to ``section'' when
+the matching \verb+\end+ command is read.
+
+Even if you have nested
+environments, labels placed in each of them are assigned the correct
+type. Consider the input
+%
+\begin{verbatim}
+\newtheorem[{\par\large}{\it}]{theorem}{Theorem}[section]
+\equationwith{theorem} % These two lines are explained
+... % in later sections
+\begin{theorem}[Erd\"os]
+A theorem both deep and profound / Is that a circle is round:
+\begin{equation}
+\mathrm{curvature}\,S^1=\mathrm {const}.
+\label{circle}
+\end{equation}
+In a paper by Erd\"os / Written in Kurdish / A counterexample is found.
+\label{Kurdish}
+\end{theorem}
+\end{verbatim}
+%
+which gives
+%
+\begin{theorem}[Erd\"os]
+A theorem both deep and profound / Is that a circle is round:
+\begin{equation}
+\mathrm{curvature}\,S^1=\mathrm {const}.
+\label{circle}
+\end{equation}
+In a paper by Erd\"os / Written in Kurdish / A counterexample is found.
+\label{Kurdish}
+\end{theorem}
+Now \verb+\Fullref{Erd\"os}+ gives ``\Fullref{Erd\"os}'',
+\verb+\Fullref{circle}+ gives ``\Fullref{circle}'', and
+\verb+\Fullref{Kurdish}+ gives ``\Fullref{Kurdish}''. Furthermore,
+\verb+\ref*{Erd\"os}+ gives ``\ref*{Erd\"os}'', that is, it prints the
+(optional) tag associated with theorems and the like. Of course you
+can also use \verb+\fullref*+ and \verb+\Fullref*+.
+
+\begin{wizard}
+If you disagree with \latex/'s idea of what the label type should be
+at a particular point, you can override is using \verb+\setlabeltype+.
+For example, if we had \verb+\setlabeltype{formula}+ right before the
+\verb+\label+ command in the previous example, the result of
+\verb+\Fullref{circle}+ would be ``Formula~\ref{circle}'' instead of
+``\Fullref{circle}''.
+\end{wizard}
+
+Before \verb+\ref+ actually prints the number of a cross-reference, it
+applies the macro \verb+\preref+ to it. By default, this macro does
+nothing; but you can redefine it to do whatever you want with the
+number. If you want the number to appear upright even if the
+surrounding text is in italics, you can say
+\begin{verbatim}
+\def\preref#1{{\normalshape#1}}
+\end{verbatim}
+The output of \verb+\pageref+ and of \verb+\cite+ is also passed to
+\verb+\pageref+ before being printed.
+
+\section{Theorems and Their Friends}
+
+Standard \latex/ provides the \verb+\newtheorem+ command to create
+environments for statements like theorems, lemmas, and so on.
+The basic idea can be adapted for other types of text that should
+stand out, such an exercises, conventions, and so on.
+Not all of these should be treated typographically the same: for
+example, you might want exercises in smaller type.
+
+The \verb+geom+ style extends \latex/'s \verb+\newtheorem+ command
+to allow you to do this easily. Recall from \cite[58]{Lamport} that
+\verb+\newtheorem+ has two required arguments: the name of the new
+environment (say ``theorem''), and the text used to introduce it (say
+``Theorem''). In standard \latex/ it also takes an optional argument,
+whose meaning depends on whether it comes before or after the second
+required argument.
+
+In the \verb+geom+ style, you can use yet another optional argument,
+right after \verb+\newtheorem+, to tell \latex/ how this environment
+differs from a vanilla theorem-like environment. This optional
+argument should consist of two sequences of commands, each surrounded
+by braces, like this:
+%
+\begin{verbatim}
+\newtheorem[{\par\large}{\it}]{theorem}{Theorem}[section]
+\end{verbatim}
+%
+(This is the same definition used for the
+example in \Fullref{Labels and Cross-References}.)
+
+The first sequence of commands in braces, \verb+\par\large+, will be
+executed as soon as \latex/ sees a \verb+\begin{theorem}+. This means
+the theorem will come out in larger type (see the output in
+\Fullref{Labels and Cross-References}). \latex/ implicitly starts a
+new level of braces when it encounters a \verb+\begin+
+command---changes inside the environment are local, so the
+\verb+\large+ will cease to have effect at the end of the environment.
+
+The second sequence of commands is inserted right after the
+introductory text {\bf{\def\preref#1{#1} \Fullref{Erd\"os}} (Erd\"os)}. It affects
+everything from that point till the end of the environment. Here
+we've used \verb+\it+, so the statement of the theorem is printed in
+italics. Note that, unlike the standard \verb+article+ and
+\verb+book+ styles, \verb+geom+ does not italicize theorems by
+default. If we didn't have the \verb+\it+ in the \verb+\newtheorem+
+command, the text of the theorem would be upright.
+
+\begin{wizard}
+You can also control the appearance of the introductory text itself
+by changing the definition of \verb+\theoremintro+, which by default is
+%
+\begin{verbatim}
+\def\theoremintro#1{\normalshape\bf#1}
+\end{verbatim}
+%
+The argument \verb+#1+ stands for the introductory text.
+\end{wizard}
+
+You need two pairs of braces in the new optional argument to
+\verb+\newtheorem+, even if one is empty. If both are empty,
+the behavior is the same as if the optional argument weren't there.
+
+Another enhancement to \verb+\newtheorem+ in
+the \verb+geom+ style is automatic labeling. Suppose you say
+%
+\begin{verbatim}
+\newtheorem{definition}[theorem]{Definition}
+\end{verbatim}
+\newtheorem[{\setlabeltype{def.}}{}]{definition}[theorem]{Definition}
+%
+(recall from \cite[59]{Lamport} that the use of \verb+[theorem]+ causes
+definitions to be numbered in the same sequence as theorems,
+assuming the \verb+theorem+ environment has been previously defined).
+%
+Now saying
+%
+\begin{verbatim}
+\begin{definition}[universe]
+The universe is a Hubble bubble.
+\end{definition}
+\end{verbatim}
+prints
+\begin{definition}[universe]
+The universe is a Hubble bubble.
+\end{definition}
+%
+and implicitly calls \verb+\label{universe}+. (As
+mentioned in \Fullref{Labels and Cross-References}, you can turn this
+feature off by saying \verb+\autolabelfalse+.) The environment knows
+its type at the time the label is made, so saying
+\verb+\Fullref{universe}+ will print ``Definition~\ref{universe}''.
+
+\begin{wizard}
+The type is usually just the environment name, but it can be
+overridden by including \verb+\setlabeltype+ (\Fullref{Labels and
+Cross-References}) in the first optional argument to
+\verb+\newtheorem+. Thus if the \verb+definition+ environment had
+been created with
+\begin{verbatim}
+\newtheorem[{\setlabeltype{def.}}{}]{definition}[theorem]{Definition}
+\end{verbatim}
+\verb+\Fullref{universe}+ would appear as ``\Fullref{universe}''.
+\end{wizard}
+
+The preferred style of some publishing houses calls for digits and
+punctuation to be typeset upright in theorems and such, amidst
+surrounding text in italics. The control sequence
+\verb+\specialdigits+ achieves this. It causes each digit in text, as
+well as parentheses, commas, colon, semicolons and periods, to
+effectively be preceded by \verb+\normalshape+. You can use
+\verb+\specialdigits+ after \verb+\it+ in the definition of a new
+environment with \verb+\newtheorem+.
+
+\begin{wizard}
+The way \verb+\specialdigits+ works is by making digits and
+punctuation into active characters (changing their \verb+\catcode+s to
+13). This has two consequences. First, characters that arise from
+macro expansion don't get the special treatment, because their
+\verb+\catcode+s are frozen beforehand; this is true, in particular,
+of the expansion of \verb+\ref+ commands (but see the end of
+\Fullref{Labels and Cross-References}).
+
+The second consequence is that the digits and decimal point no longer
+work in specifying dimensions: if you write \verb+\vskip 1in+ while
+\verb+\specialdigits+ is in effect, you get an error message
+complaining that a number was expected. To get around this, you can
+temporarily cancel the specialness with \verb+\regulardigits+. If you
+run into this problem more than once or twice, it's best to create a
+macro, outside the scope of \verb+\specialdigits+, that expands to the
+desired command (\verb+\def\inch{\vskip 1in}+).
+\end{wizard}
+
+\section{The Proof Environment}
+
+Theorems and proofs go hand in hand.
+The \verb+proof+ environment in \verb+geom+, in its most basic form,
+prints {\it Proof.} at the beginning of the proof, and an end-of-proof
+symbol $\square$ at the end. With an optional argument it behaves
+like this:
+%
+\begin{verbatim}
+\begin{proof}[Poincar\'e conjecture]
+Notice first that ...
+... as we wished to show.
+\end{proof}
+\end{verbatim}
+%
+\begin{proof}[Poincar\'e conjecture]
+Notice first that \dots\ as we wished to show.
+\end{proof}
+
+\begin{wizard}
+The formatting of the proof's introductory text is controlled by
+the macro \verb+\proofintro+, whose single argument is the optional
+argument to \verb+\begin{proof}+---in this case, ``Poincar\'e
+conjecture''. If the optional argument is not used,
+\verb+\proofintro+ is passed an empty argument.
+The default setting of \verb+\proofintro+ is
+%
+\begin{verbatim}
+\def\proofintro#1{\def\@tempa{#1}%
+ {\it Proof\ifx\@tempa\empty\else\ of #1\fi. }\ignorespaces}
+\end{verbatim}
+%
+You can probably figure out how it decides whether to write
+{\it Proof} or {\it Proof of\dots}. You can change its definition to
+obtain other effects.
+
+Likewise, the formatting of the box at the end of the proof is
+controlled by the macro \verb+\provedboxcontents+, which is entirely
+analogous. Its standard setting is
+\begin{verbatim}
+\def\provedboxcontents#1{\def\@tempa{#1}%
+ \ifx\@tempa\empty$\square$\else\fbox{\small#1}\fi}
+\end{verbatim}
+\end{wizard}
+
+To identify your proofs with the number of their corresponding
+theorems, lemmas, corollaries, etc., use \verb+\setprooftag+ in the
+definition of these environments. For instance, after you say
+%
+\begin{verbatim}
+\newtheorem[{\setprooftag}{\it}]{theorem}{Theorem}[section]
+\newtheorem[{\setprooftag}{\it}]{corollary}[theorem]{Corollary}
+\end{verbatim}
+%
+\verb+\begin{proof}+ will behave as if you were passing it as
+its optional argument the number of the most recent theorem or corollary.
+Nested proofs keep track of their arguments correctly, so the box at
+the end of each gets the same tag as the {\it Proof of\dots} at the
+beginning.
+
+However, certain situations are too confusing for \verb+\setprooftag+.
+For example, if you state a corollary between a theorem and its proof,
+the proof will incorrectly get the corollary's number, which is more
+recent. In this situation you have to use the optional argument. Of
+course, it's best to use \verb+\ref{...}+ as the argument, rather than
+an explicit number, which might change later.
+
+If a proof
+ends with a displayed formula, it is recommented that the proved box
+be placed next to the formula (as if it were a tag). This is done
+by inserting \verb+\proved+ before the closing \verb+$$+.
+Likewise, if the last line of the proof is part of an \verb+\item+,
+you can use \verb+\proved+ before the closing \verb+\end{enumerate}+
+(or whatever) so the proved box won't be set on a line by itself.
+In even more difficult
+cases---for instance, a formula that already has a tag, or is part of a
+multi-line display---plop \verb+\box\provedbox+ where you want the box to be.
+
+\section{Equations}
+
+The \verb+geom+ style reinstates the plain \TeX\ macro
+\verb+\eqalign+, which is not part of standard \latex/ but is
+nonetheless very useful. Unlike the \verb+eqnarray+ environment,
+\verb+\eqalign+ creates math alignments that are not treated as whole
+lines, and so can be combined with other elements.
+
+The example in \Fullref{Labels and Cross-References} has
+\verb+\equationwith{theorem}+ after the \verb+theorem+
+environment is created.
+This causes equations made with the \verb+equation+ and
+the \verb+eqnarray+ environments to be numbered in the same sequence
+as theorems. You can replace \verb+theorem+ with any environment that
+was defined with \verb+\newtheorem+ and that has a counter with its name
+(the environment has a counter with its name if
+there was no optional argument between
+the first and second required arguments to \verb+\newtheorem+).
+
+If you load the optional style \verb+geomeqns+---that is,
+if your document starts with
+\begin{verbatim}
+\documentstyle[geom,geomeqns,...
+\end{verbatim}
+the tags in the \verb+equation+ and the \verb+eqnarray+ environments
+are printed on the left, in boldface. This makes them visually
+similar to the tags that introduce theorems, so it is generally
+appropriate to use this style if you're numbering equations and
+theorems in the same sequence.
+
+\section{The {\mediumseries \tt Figure} and {\mediumseries \tt Table} environments}
+
+The \verb+geom+ style supports the \verb+figure+ and \verb+table+
+environments of standard \latex/, and, as mentioned above, if you use
+the \verb+\caption+ command you don't have to worry about fragile
+macros inside its argument. However, I recommend that you use
+instead the new \verb+Figure+ and \verb+Table+ environments, which
+provide some bells and whistles.
+
+These environments take three arguments: a cross-reference label, a title and
+a legend (or explanatory caption). The command
+%
+\begin{verbatim}
+\begin{Figure}{torus}{The square torus}
+{A torus can be obtained, topologically,
+by gluing together parallel sides of a square.}
+$$
+\begin{picture}(1,1)
+... % lots of \put commands
+\end{picture}
+$$
+\end{Figure}
+\end{verbatim}
+%
+prints
+%
+\begin{Figure}{torus}{The square torus}
+{A torus can be obtained, topologically,
+by gluing together parallel sides of a square.}
+$$
+\unitlength=1in
+\begin{picture}(1,1)
+\put(0,0){\vector(1,0){1}}
+\put(0,0){\vector(0,1){1}}
+\put(1,0){\vector(0,1){1}}
+\put(0,1){\vector(1,0){1}}
+\end{picture}
+$$
+\end{Figure}
+%
+
+\noindent
+and in addition it creates a cross-reference label \verb+torus+ and an
+entry in the table of contents with the text ``The square torus''.
+As you can see,
+the figure number and the title appear in
+boldface, the legend in a lighter face. In proofing mode
+(\Fullref{Proofing Aids}), the file
+name also appears under the figure, in tiny letters. If you don't
+want a legend, just write \verb+{}+ after the first two arguments.
+(In other words, the legend is {\it not} an optional argument---it is
+simply an argument that sometimes happens to be empty.)
+There is an optional argument to the \verb+\Figure+ environment, consisting
+of a subset of the letters \verb+htbp+ and indicating a location
+where the figure may be placed \cite[176]{Lamport}; it should come
+before all other arguments.
+All of this applies to the \verb+Table+ environment as well.
+
+\section{PostScript Figures}
+
+Most often your picture won't be made with \latex/ commands; it will
+exist in a separate PostScript file. Inclusion of PostScript figures
+is still a bit of a bugaboo for many \TeX\ users, in spite of the
+existence for many years now of Trevor Darrell's excellent macro
+package \ix{Psfig/\TeX} \cite{psfig} and others.
+
+The \verb+geom+ style automatically loads the file
+\verb+geompsfi.sty+, a modified version of \ix{Psfig/\TeX}
+(incorporating some improvements by \ix{Stephan Bechtols\-heim} and
+others of my own). It allows you to include PostScript figures very
+simply:
+%
+\begin{verbatim}
+\fig{PStorus}{The square torus}{A torus can be obtained, topologically,
+by gluing together parallel sides of a square.}
+\end{verbatim}
+%
+\fig{PStorus}{The square torus}{A torus can be obtained, topologically,
+by gluing together parallel sides of a square.}
+
+The \verb+\fig+ macro takes the same three arguments (plus an optional
+one) as the \verb+Figure+ environment. But the first argument, in
+addition to being used to make a label, is also the name of the file
+where the PostScript figure is stored (minus the \verb+.ps+ suffix).
+Thus \Fullref{PStorus} is stored in the file \verb+PStorus.ps+.
+
+To get two or three figures side by side, sharing the same caption,
+use \verb+\doublefig+ or \verb+\triplefig+. The PostScript file names
+for \verb+\doublefig{foo}...+ would be in this case would be
+\verb+foo-1.ps+ and \verb+foo-2.ps+, and likewise for
+\verb+\triplefig+. There is no similar mechanism for more than three
+figures.
+
+The directory where the figures are to be found is governed by the
+macro \verb+\picpath+. For example, if the directory is
+called \verb+/u/levy/pictures+, you should say
+\begin{verbatim}
+\def\picpath{/u/levy/pictures/}
+\end{verbatim}
+at the beginning of your document. (You need the \verb+/+ at the end.)
+
+\begin{wizard}
+You can also use a relative pathname, such as \verb+pictures/+, or even
+the empty string (or \verb+./+) for the current directory.
+However, the program that sends
+your \verb+.dvi+ file to the printer may not find the pictures since
+it is likely to be invoked from a different directory.
+
+If a pathname includes characters that are special to \TeX, you need
+to make then unspecial in order to define \verb+\picpath+. Here is an
+example:
+\begin{verbatim}
+\begingroup % start a group so the change in _ is local
+\catcode`\_=12 % make _ behave like an ordinary character
+\gdef\picpath{/home/tampa_a/fac/wpt/pictures/} % this def is global
+\endgroup % now _ reverts to its usual meaning
+\end{verbatim}
+\end{wizard}
+
+If you have a long document with lots of pictures, it is better to
+organize them into sections and chapters. In that case you should
+leave \verb+\picpath+ unset, and set the macro \verb+\masterpicpath+
+to the master picture directory. If I were using this scheme in this
+document, I might say
+%
+\begin{verbatim}
+\def\masterpicpath{/home/levy/pictures/}
+\end{verbatim}
+%
+and put \Fullref{torus} in file
+\verb+/home/levy/pictures/+{\tt\ref{PostScript Figures}}\verb+/PStorus.ps+.
+(With the \verb+book+ style, which has chapters, I would need
+\verb+chap3/+{\tt\ref{PostScript Figures}}
+instead of just {\tt\ref{PostScript Figures}}.)
+
+The way \verb+\fig+ works is by calling
+the command \verb+\psfig+ \cite{psfig}, which creates a \TeX\ \verb+\vbox+
+of the right size and containing instructions for the figure to be
+included at the time of printing. You normally won't use
+\verb+\psfig+ directly, since \verb+\fig+ calls it automaticaly.
+
+\begin{wizard}
+However, occasionally you many want to use \verb|\psfig| directly to
+take advantage of this macro's many options, such as resizing. See
+the Psfig/\TeX\ manual \cite{psfig} for details; but some of the newer
+options to Psfig/\TeX\ are not supported here.
+\end{wizard}
+
+In order for the \verb+\psfig+ command to know what size box to make,
+it needs to find your PostScript figure file, and
+the file must have near the top a line like this:
+\begin{verbatim}
+%%BoundingBox: 0 30 98 128
+\end{verbatim}
+The first two numbers represent the low $x$- and $y$-coordinates of
+the figure's bounding box, in points, and the last two represent
+the high $x$- and $y$-coordinates. In the example just given, which
+corresponds to \Fullref{PStorus}, the bounding box goes from $0$ to
+$98$~pt in the $x$-direction and from $30$ to $128$~pt in the
+$y$-direction, so its height and width are both $98$~pt, or
+approximately 1.35~inches. The corners of the bounding box appear on
+the page in proof mode (\Fullref{Proofing Aids}).
+
+Note that \verb+\psfig+ only cares about the height and the width of
+the bounding box, not about the actual values of the high and low
+coordinates. The latter are relevant only in reference to the
+coordinates of the objects inside the picture, about which
+\verb+\psfig+ knows nothing. (Thus the bottom left corner of the
+square in \Fullref{PStorus} has coordinates $(4,34)$, which is a
+little bit above and to the right of the bounding box's bottom left
+corner $(0,30)$.) If one added the same number to the $x$-coordinates
+of the bounding box and of every object in the picture, the result
+would be exactly the same.
+
+Normally, the \verb+%%BoundingBox+ line should have been placed in the
+PostScript file automatically, by whatever program you used to create
+the figure. If the program did not write a line like that, you have
+to do it by hand, and you should consider switching to another program.
+
+Notice that the labels $a$ and $b$ in \Fullref{PStorus} appear in
+the same font as they would in the text. In fact the labels were
+typeset by \TeX\ itself, and do not come from the PostScript file,
+where it would be hard to specify them satisfactorily---especially
+details such as the placement of the primes and other subscripts and
+superscripts. The information for these labels is contained in a file
+with the suffix \verb+.lab+, which normally is generated by the same
+program that creates the PostScript file, or by a postprocessor.
+If you want to include {\it Mathematica} graphics, for example, you
+should use the \verb+mathfig+ utility, described in the Appendix.
+
+\begin{wizard}
+The average user has no need to know what the \verb~.lab~ file looks
+like, but if you want to write a new postprocessor in order to
+implement this labeling scheme in conjunction with your favorite
+drawing program, here are the details. Each line of the file
+yields one label, and contains the \verb+\setlabel+ command
+followed by five arguments: the text of the label, to be typeset in
+math mode; the $x$- and $y$-coordinates of the label's {\it reference
+point}, in points; and the {\it relative} $x$- and $y$-coordinates of
+the reference point. A value of 1 for the last two arguments means
+the reference point of the label it at the top or right of the label's
+bounding box; a value of $-1$ means bottom or left, a value of $0$
+means middle, and so on.
+
+For example, here is the file \verb+PStorus.lab+ corresponding to
+\Fullref{PStorus}:
+\begin{verbatim}
+\setlabel{a}{48.600000}{34.162104}{0}{1}
+\setlabel{b}{4.162104}{78.600000}{1}{0}
+\setlabel{a'}{48.600000}{123.037896}{0}{-1}
+\setlabel{b'}{93.037896}{78.600000}{-1}{0}
+\end{verbatim}
+For the label $a$, the reference point is at the top middle of the
+label's bounding box, so the label itself will be centered under the
+point with coordinates $(48.6,34.1)$.
+
+If you want to typeset a label outside math mode, use \latex/'s
+\verb+\mbox+ command (or \TeX's \verb+\hbox+). The font used by
+default in this case is the same as for captions. Thus, to get the
+label {\sf foo} you'll probably want to type the string
+\verb+\hbox{foo}+ into your figure-making program.
+
+Sometimes the fact that the source \verb+\hbox{foo}+ has many more
+characters than the output causes problems---for example, the
+figure-making program might leave too much space for the label. The
+macro \verb+\hyperactivelabels+ provides a way around this. This
+macro is called every time a label is about to be typeset, and you can
+define it at will, to allow abbreviations, say. Thus, after the
+commands
+\begin{verbatim}
+\def\hyperactivelabels{\mathcode`:="8000}
+\def\activecolon#1:{\hbox{#1}}
+{\catcode`\:=\active\global\let:=\activecolon}
+\end{verbatim}
+the construction \verb+:foo:+ has exactly the same effect as
+\verb+\hbox{foo}+---but only inside labels. (The command
+\verb+\mathcode`:="8000+ causes the colon to be treated as an active
+character in math mode; the next two lines say, in a roundabout way,
+what this active character should do.)
+\end{wizard}
+
+Utilities (programs) that generate PostScript graphics files generally
+start the file with a ``signature'' (a comment line stating the
+utility's name and version) and a chunk of PostScript code---call it a
+header---establishing abbreviations, subroutines, fonts and the like.
+The header is always the same, so if you have dozens of figures
+generated by the same utility it's good to factor out this
+commonality, if possible. With certain utilities, you can save your
+files without the header. Then they won't print on their own; but
+when \verb+\psfig+ looks into them, if it can recognize the utility's
+signature, it puts into the dvi file a command that causes the
+inclusion of the header at printing time. This way the header is
+included only once for all figures, saving memory and time. The
+utilities that \verb+\psfig+ currently knows about are Mathematica
+\cite{wolfram} and Adobe Illustrator \cite{illustrator}. With
+Illustrator, saving without the header is accomplished by clicking on
+the appropriate entry in the ``Save As'' dialog box. For Mathematica,
+see the Appendix.
+
+\begin{wizard}
+For the signature to be seen by \verb+\psfig+, it must appear near the
+top of the file; the actual number of lines that \verb+\psfig+ scans
+is controlled by the counter \verb+\maxheaderlines+. The
+\verb+%%BoundingBox+ line must also lie in that same initial stretch.
+The default value of \verb+\maxheaderlines+ is 100, which is almost
+always adequate.
+\end{wizard}
+
+\section{Fonts}
+As mentioned in \Fullref{Overall Organization}, the \verb+geom+ style
+requires NFSS,
+a rational font management system that makes the use of new
+fonts easier than under old \latex/.
+
+Under this scheme, unlike the old, if you say \verb+\bf... \small...+,
+the \verb+\small+ has no effect on the boldness of the current
+font---size, boldness, style and so on are independent attributes.
+This is generally good, but it does create backward incompatibilities.
+For example, if you have an old \latex/ document where you've relied
+on \verb+\small+ to reset the weight of the font, you're in for a
+surprise. Also, \verb+\rm+ should generally be replaced by
+\verb+\normalshape+. For a list of all such differences, see
+\cite{amslatex}.
+
+Another case of conflicting ideas on what font-change commands should
+do is inside math mode. Under NFSS,
+\verb+\bf+ has no effect inside math mode---you need to say
+\verb+$\mathbf{xyz}$+, for example. The \verb+geom+ style will
+print a warning on your terminal if it sees \verb|\bf| in math mode.
+
+In addition to the math-mode commands \verb+\mathbf+, \verb+\mathrm+ and
+\verb+\mathit+, the \verb+geom+ style defines \verb+\mathss+ and
+\verb+\mathtt+ as the math mode counterparts of \verb+\sf+ (sans-serif)
+and \verb+\tt+ (typewriter type).
+
+Support for Fraktur (``gothic'') and blackboard-bold fonts is
+provided, as well as for the fonts \verb+msam+ and \verb+msbm+, which
+contain a plethora of mathematical symbols. This is all thanks to the
+AMS, and you should turn to the \amslatex/ distribution
+\cite{amslatex} if your site lacks the fonts themselves or the
+prerequisite auxiliary files \verb+amsfonts.sty+ and
+\verb+amssymb.sty+.
+
+\section{The Index, the Table of Contents and the Glossary}
+
+The basic command for putting something into the index is
+\verb+\index+, as in standard \latex/. But \verb+\index+ does not
+print its argument. To index a word that actually appears in the text
+say \verb+\ix{...}+. To index mathematical notation say
+\verb+\ixn$...$+ or \verb+\ixninv$...$+, depending on whether the
+contents should appear or not. And, just for symmetry, you can also
+use \verb+\ixinv+, which equals \verb+\index+:
+$$
+\vbox{\halign to .7\hsize{\tabskip=0pt plus 1fil
+#\hfil &&{\tt \char`\\ #}\hfil\cr
+&\omit Text&\omit Notation\cr
+\noalign{\medskip}
+Visible&ix&ixn\cr
+Invisible&ixinv&ixninv\cr}}
+$$
+
+An index entry is made automatically for any \verb+\label+ or
+\verb+\ref+ command. In the second case the entry goes into the index
+file preceded by a \verb+%+.
+
+Remember that, unless you have issued the
+command \verb|\autolabelfalse|, there are lots of situations in which
+a label, and consequently an index entry, is generated automatically:
+in particular, this happens for each sectioning command
+(\Fullref{Labels and Cross-References}) and for each tagged
+theorem, lemma, and so on (\Fullref{Theorems and Their Friends}).
+This provides a
+wealth of index entries, which later you can winnow out
+semi-automatically, if necessary, since entries of this sort appear in
+quotation marks, preceded by their type. You can see all the entries
+that a given page contributes to the index by looking at the small
+print on the top left of the page when proofing mode is on
+(\Fullref{Proofing Aids}).
+
+\begin{wizard}
+The \verb+geom+ style modifies the \verb+\theindex+ format of standard
+\latex/ so that the index is printed in smaller type. Moreover, it
+achieves a double-column format not by using standard \latex/'s
+\verb+\twocolumn+ command, which starts a new page, but rather
+\ix{Frank Mittelbach}'s \verb+multicols+ environment \cite{Mittelbach},
+which is implemented in the file \verb+multicol.sty+. Using this
+environment you can have single-column and double-column text on the
+same page. If you want to add an explanation before the index, for
+example, you might say something like this:
+\begin{verbatim}
+\begin{theindex}
+\null % this avoids what seems to be a bug in multicol.sty
+\end{multicols} % end double column format started by \begin{theindex}
+
+Numbers in parentheses refer to pages where the entry should be
+discussed but isn't, due to laziness on the author's part.
+
+\begin{multicols}2 % restart double column format
+\item aardvark...
+\end{theindex}
+\end{verbatim}
+\end{wizard}
+
+Support for a glossary is somewhat more extensive than in standard
+\latex/. You can mark a word as a glossary entry by saying
+\verb+\glo{...}+; this causes a \glo{dagger} to be placed before the
+word, and an index entry for the word to be generated in the file {\it
+jobname}\verb+.idx+, preceded by \verb+\dag+.
+
+\begin{wizard}
+Note that the
+\verb+geom+ style does not use a separate {\it jobname}\verb+.glo+
+file; although standard \latex/'s \verb+\glossary+ command is still
+available if you insist in writing entries to that file, this command
+has not been made robust in the way that \verb+\index+ and \verb+\label+
+have. (See \Fullref{No More Fragile Commands}.)
+\end{wizard}
+
+The glossary itself is
+delimited by \verb+\begin{theglossary}+ and \verb+\end{theglossary}+.
+Glossary entries start like this:
+%
+\begin{verbatim}
+\entry{doohickey} ...
+\entry[\cite{...}]{thingamajig} ...
+\end{verbatim}
+%
+The entry name is printed in boldface, followed by a period.
+The contents of the optional argument are printed immediately after
+the entry name, before the period. The comments made above about
+double-column formatting apply to the glossary as well.
+
+The table of contents is treated in much the same way as in standard
+\latex/, but there is one important difference: starred sectioning
+commands, like \verb+\section*+, do show up in the table of contents,
+unless you've said \verb+\starredcontentsfalse+.
+Since one generally doesn't want the table of contents
+to include an entry for the table of contents itself,
+the definition of \verb+\tableofcontents+ in
+\verb+geomart.sty+ starts like this:
+\begin{verbatim}
+\def\tableofcontents{{\starredcontentsfalse\section*{Contents}...}}
+\end{verbatim}
+The extra pair of braces limits the action of
+\verb+\starredcontentsfalse+ to this entry only.
+
+\section{Proofing Aids}
+
+The \verb+geom+ style provides a number of proofing aids that you can
+turn on and off by saying \verb+\proofingtrue+ and
+\verb+\proofingfalse+. The default is for proofing to be on. These
+facilities are independent of standard \latex/'s \verb+draft+ option
+to the \verb+book+ and \verb+article+ style, whose only effect is to
+make overfull box markers visible.
+
+If you use \latex/'s \verb+\includeonly+ mechanism \cite[76]{Lamport},
+you can print your final version by passing the macro
+\verb+\noproofing+ as the argument to \verb+\includeonly+. This not
+only turns off all proofing aids, but also prevents \latex/ from
+starting a new page for each input file. (Naturally, the page breaks
+will likely be different because of that, so you'll need to run the
+job twice to get cross-references right.)
+
+\begin{wizard}
+Normally you have two lines like this in the main file for your
+document:
+\begin{verbatim}
+\typein[\sectionstoinclude]{Enter the sections that should be processed: }
+\includeonly{\sectionstoinclude}
+\end{verbatim}
+so you can type in the sections to be included from the terminal,
+without having to modify the source file. The macro
+\verb+\noproofing+ works in this mode, too.
+\end{wizard}
+
+By the way, if you are using the \verb+book+ style, the construction
+\verb+\chap1{345}+ expands to
+\begin{verbatim}
+chap1/1.3,chap1/1.4,chap1/1.5
+\end{verbatim}
+This has nothing to do with proofing, but it provides a useful shorthand
+for use with \verb+\includeonly+.
+Braces should be used around a section or chapter number having more
+than one digit.
+
+In proofing mode you get, to the left of the main text, a column in
+tiny print with all the index entries contributed by that page. This
+includes automatic entries with their respective prefixes (see
+\Fullref{The Index, the Table of Contents and the Glossary}).
+
+If you are in proof mode and the macros \verb+\leftfoot+ and
+\verb+\rightfoot+ are defined, they will be typeset flush left and
+flush right on the footline. These macros are often defined to
+contain information about draft version, date of last modification,
+etc., which can be updated automatically.
+
+\begin{wizard}
+Near the top of the
+source file for this document, I wrote the lines
+\begin{verbatim}
+\def\leftfoot{\RCSstring$Revision: 1.12 $}
+\def\rightfoot{\RCSstring$Date: 95/07/03 15:57:22 $}
+\def\RCSstring$#1 ${#1}
+\end{verbatim}
+The first two lines are automatically updated by the UNIX utility
+\ix{RCS} (Revision Control System) whenever I check the file in or
+out. RCS requires that the keywords \verb+Revision+, \verb+Date+ and
+so on be found within dollar signs, and it tacks on a blank before the
+closing \verb+$+ for good measure. The \verb+\RCSstring+ macro
+eliminates this extraneous stuff.
+\end{wizard}
+
+\section*{Appendix: {\mediumseries \tt mathfig}---A System for Doing Typesetting in
+Mathematica}
+
+\begin{warning}
+The software described in this Appendix depends on Mathematica
+\cite{wolfram}. I make no representation whatsoever concerning its
+performance. Although I have used \verb+mathfig+ under Mathematica
+versions 1.2, 2.0 and 2.1, I emphasize that \verb+mathfig+ may fail to
+work as described here and that I take no responsibility for such
+failure.
+\end{warning}
+
+The \verb+mathfig+ program, for use on UNIX systems, takes a
+Mathematica source file \verb+foo.m+ and calls Mathematica to create
+a PostScript file \verb+foo.ps+.
+Then \verb+mathfig+ postprocesses \verb+foo.ps+ to
+take out the PostScript labels putting the same information in a file
+\verb+foo.lab+ that can be read later by \latex/, as explained in
+\Fullref{PostScript Figures}. The usage of this program is the following:
+$$
+\hbox to \hsize{\small\hskip 1em
+{\tt mathfig} [ {\tt -d} {\it directory} ] [ {\tt -i} {\it initfile} ]
+{\it files}\hfil}
+$$
+The \verb+-d+ option makes all file names relative to the specified
+directory. The \verb+-i+ option tells Mathematica to read an
+initialization file. Any number of files can be passed as subsequent
+argument; \verb+\mathfig+ processes one at a time, starting a new
+Mathematica session each time.
+
+The steps performed by \verb+mathfig+ when processing the file
+\verb+foo.m+ are the following. It calls \verb+math+ and gives it the
+commands \verb+Get["+{\it initfile}\verb+"]+ (if an initialization
+file was specified) and \verb+Get["foo.m"]+. The result of
+\verb+Get["foo.m"]+ should be an expression with head \verb+Graphics+
+or \verb+Graphics3D+. This expression is passed to \verb+Display+,
+with output sent to the filter \verb+geomfix+; this filter is
+analogous to the \verb+psfix+ program supplied with Mathematica. The
+output of \verb+geomfix+ is further processed to create the files
+\verb+foo.ps+ and \verb+foo.lab+. This last step is performed by
+\verb+mathlabels+, a \verb+perl+ program. (\verb+perl+ is a widely
+used UNIX utility, and it should be available at your site. If
+\verb+mathfig+ claims that \verb+mathlabels+ cannot be found, it may
+be because \verb+perl+ is not where \verb+mathfig+ expects to find it;
+see the end of \Fullref{Installation}.)
+
+By default, \verb+\mathfig+ creates a figure two inches high and five
+inches wide. A different height can be specified by including the
+assignment \verb+$height=+{\it height} in the Mathematica source file,
+where {\it height} is a number specifying the height in inches. You
+can also say \verb+$width=+{\it width}. The reason to put these numbers
+in the source file, rather than choosing them at run time, is
+archival: in this way the output is entirely determined by the
+contents of the source file.
+
+\begin{wizard}
+Furthermore, if you assign values to the variables \verb+$xlo+,
+\verb+$xhi+, \verb+$ylo+ and \verb+$yhi+, the figure produced by
+Mathematica will be clipped to a window with the given boundaries, and
+rescaled so as to fit in a box of the given height and width. For
+example, setting \verb+$xlo=$ylo=.1+ and \verb+$xhi=$yhi=.9+ will trim
+10\% off the size of the box around each edge, and the remaining
+graphics will be rescaled by a factor of $1/(.9-.1)=1.25$. Under
+Mathematica 1.2, this is the only way I know to make a 3D-graphics
+object occupy the whole bounding box. Unfortunately the values of
+\verb+$xlo+ and so on have to be determined by trial and error.
+
+The symbols \verb+$height+, \verb+$width+, \verb+$xlo+, \verb=$ylo=,
+\verb+$xhi+, \verb=$yhi= and \verb=$Def= should not be used in your
+Mathematica source file except with the meanings described above.
+(\verb=$Def= is used internally.)
+
+When Mathematica generates a picture with labels, the scaling
+computations are implicit in the resulting PostScript code, and they
+take into account the dimensions of the labels present in the code.
+Thus the graph generated by
+%
+\begin{verbatim}
+Plot[x,{x,0,1}]
+\end{verbatim}
+%
+looks a bit smaller on the screen than the one generated by
+%
+\begin{verbatim}
+Plot[x,{x,0,1},Ticks->False]
+\end{verbatim}
+%
+because the first has to accomodate labels along the axes, in the same
+size window. However, when you run \verb+mathfig+, the labels are
+taken out of the PostScript file, and therefore don't have any effect
+on the scaling of the picture. The \verb+mathfig+ output for the two
+commands above would be scaled by exactly the same amount, and the
+\TeX\ labels generated for the first command would stick out of the
+bounding box a little bit, just as they do in \Fullref{PStorus}.
+\end{wizard}
+
+\bibliography{manual}
+\bibliographystyle{alpha}
+\vfil\eject
+
+\begin{theindex}
+\end{theindex}
+
+\end{document}
+
+% $Log: manual.tex,v $
+%Revision 1.12 95/07/03 15:57:22 levy
+%update for latex2e
+%
+%Revision 1.11 1993/09/16 22:17:03 levy
+%\tt -> \mediumseries\tt in section heads
+%
+%Revision 1.10 92/08/25 19:55:41 levy
+%typo
+%
+%Revision 1.9 92/08/03 13:47:49 levy
+%*** empty log message ***
+%
+%Revision 1.8 92/07/22 13:32:23 levy
+%post - TUG meeting
+%
+%Revision 1.7 92/07/17 13:32:29 levy
+%typos
+%
+%Revision 1.6 92/07/17 13:27:50 levy
+%*** empty log message ***
+%
+%Revision 1.5 92/07/11 21:26:42 levy
+%*** empty log message ***
+%
+%Revision 1.4 92/04/02 22:45:56 levy
+%*** empty log message ***
+%
+%Revision 1.3 92/04/02 09:58:12 levy
+%*** empty log message ***
+%
+%Revision 1.2 92/04/01 18:57:39 levy
+%*** empty log message ***
+%
+%Revision 1.1 1992/03/19 18:08:13 levy
+%Initial revision
+%
diff --git a/macros/latex209/contrib/geomsty/math.pro b/macros/latex209/contrib/geomsty/math.pro
new file mode 100644
index 0000000000..e05e6c4bd3
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/math.pro
@@ -0,0 +1,1752 @@
+% This file is adapted from the PostScript code that gets
+% included by the psfix filter, provided with Mathematica.
+% The only differences are the addition of the first two lines
+% (MyDict) and of the abbreviations at the end (starting with /Ma).
+
+%$Revision: 1.3 $
+%$Date: 95/06/27 12:16:53 $
+
+/MyDict 200 dict def
+MyDict begin
+
+% The externally visible functions are:
+% MathPictureStart- start page.
+% MathPictureEnd - finish off page.
+% MathSubStart - start a sub-page.
+% MathSubEnd - finish off a sub-page.
+% Mdot - draw a dot.
+% Mtetra - draw a filled tetragon.
+% Metetra - draw a filled tetragon with black edges.
+% Mistroke - intermediate stroke of multi-stroke line/curve.
+% Mfstroke - final stroke of multi-stroke line/curve.
+% Msboxa - compute coordinates of text bounding box.
+% Mshowa - plot characters.
+% MathScale - compute scaling info to contain array of points.
+
+
+% The following are only for backwards compatibility with earlier versions
+% of Mathematica:
+% Mpstart - identical to MathPictureStart.
+% Mpend - identical to MathPictureEnd.
+% Mscale - like MathScale but without user coordinate info.
+
+/Mpstart { % - Mpstart -
+ MathPictureStart
+} bind def
+
+/Mpend { % - Mpend -
+ MathPictureEnd
+} bind def
+
+/Mscale { % [pnts] Mscale -
+ 0 1 0 1 % [pnts] xbias xscale ybias yscale
+ 5 -1 roll % xbias xscale ybias yscale [pnts]
+ MathScale % -
+} bind def
+
+%start of ISOLatin1 stuff
+
+/ISOLatin1Encoding dup where
+{ pop pop }
+{
+[
+/.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 /minus /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 /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/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
+} ifelse
+
+/MFontDict 50 dict def
+
+/MStrCat % string1 string2 MStrCat string
+{
+ exch % s2 s1
+ dup length % s2 s1 len
+ 2 index length add % s2 s1 len
+ string % s2 s1 s
+ dup 3 1 roll % s2 s s1 s
+ copy % s2 s s1
+ length % s2 s where
+ exch dup % s2 where s s
+ 4 2 roll exch % s s where s2
+ putinterval
+} def
+
+/MCreateEncoding % name encoding MCreateEncoding newname
+{
+ % get base name
+ 1 index % name encoding name
+
+ % concatenate (-) and encoding to the name
+ 255 string cvs
+ (-) MStrCat
+ 1 index MStrCat
+ cvn exch % basename newname encoding
+
+ % make encoding name
+
+ (Encoding) MStrCat
+ cvn dup where
+ {
+ exch get
+ }
+ {
+ pop
+ StandardEncoding
+ } ifelse
+ 3 1 roll % vector basename newname
+
+ % make the font if we haven't before
+ dup MFontDict exch known not
+ {
+ 1 index findfont
+ dup length dict
+ begin
+ {1 index /FID ne
+ {def}
+ {pop pop}
+ ifelse} forall
+ /Encoding 3 index
+ def
+ currentdict
+ end
+ 1 index exch definefont pop
+
+ MFontDict 1 index
+ null put
+ }
+ if
+
+ exch pop % vector newname
+ exch pop % newname
+} def
+
+/ISOLatin1 { (ISOLatin1) MCreateEncoding } def
+/ISO8859 { (ISOLatin1) MCreateEncoding } def
+
+%end of ISOLatin1 stuff
+
+%
+% Include old font names for backward compatibility
+%
+/Mcopyfont { % procedure to copy font
+ dup
+ maxlength
+ dict
+ exch
+ {
+ 1 index
+ /FID
+ eq
+ {
+ pop pop
+ }
+ {
+ 2 index
+ 3 1 roll
+ put
+ }
+ ifelse
+ }
+ forall
+} def
+
+/Plain /Courier findfont Mcopyfont definefont pop
+/Bold /Courier-Bold findfont Mcopyfont definefont pop
+/Italic /Courier-Oblique findfont Mcopyfont definefont pop
+
+% Set up for the start of a page.
+/MathPictureStart { % - MathPictureStart -
+ gsave % -
+ Mtransform % possibly rotate to landscape mode
+ Mlmarg % left_margin
+ Mbmarg % bottom_margin
+ translate % -
+ Mwidth % init_width
+ Mlmarg Mrmarg add % init_width lmarg+rmarg
+ sub % true_width
+ /Mwidth exch def %
+ Mheight % init_height
+ Mbmarg Mtmarg add % init_height tmarg+bmarg
+ sub % true_height
+ /Mheight exch def
+ /Mtmatrix % /Mtmatrix
+ matrix currentmatrix % /Mtmatrix text_matrix
+ def
+ /Mgmatrix % /Mgmatrix
+ matrix currentmatrix % /Mgmatrix graphics_matrix
+ def % -
+} bind def
+
+
+% Finish off a page.
+/MathPictureEnd {
+ grestore
+} bind def
+
+%MFill fills the drawing area with the current color.
+/MFill {
+ 0 0 moveto
+ Mwidth 0 lineto
+ Mwidth Mheight lineto
+ 0 Mheight lineto
+ fill
+} bind def
+
+% xmin xmax ymin ymax MPlotRegion alters the origin, Mwidth and Mheight
+% so that the picture fills the altered region
+/MPlotRegion { % xmin xmax ymin ymax MPlotRegion
+ 3 index % xmin xmax ymin ymax xmin
+ Mwidth mul % xmin xmax ymin ymax xmin_pos
+ 2 index % xmin xmax ymin ymax xmin_pos ymin
+ Mheight mul % xmin xmax ymin ymax xmin_pos ymin_pos
+ translate % xmin xmax ymin ymax
+ exch sub % xmin xmax ymax-ymin
+ Mheight mul % xmin xmax new_height
+ /Mheight
+ exch def % xmin xmax
+ exch sub % xmax-xmin
+ Mwidth mul % new-width
+ /Mwidth
+ exch def
+} bind def
+
+% Given a rectangle, set it up as a sub-picture.
+/MathSubStart { % xmin ymin xmax ymax MathSubStart <saved state(8)>
+ Momatrix
+ Mgmatrix Mtmatrix
+ Mwidth Mheight % xmin ymin xmax ymax <ss(8)>
+ 7 -2 roll % xmin ymin <ss(8)> xmax ymax
+ moveto % xmin ymin <ss(8)>
+ Mtmatrix setmatrix % xmin ymin <ss(8)>
+ currentpoint % xmin ymin <ss(8)> xmax(t) ymax(t)
+ Mgmatrix setmatrix % xmin ymin <ss(8)> xmax(t) ymax(t)
+ 9 -2 roll % <ss(8)> xmax(t) ymax(t) xmin ymin
+ moveto % <ss(8)> xmax(t) ymax(t)
+ Mtmatrix setmatrix % <ss(8)> xmax(t) ymax(t)
+ currentpoint % <ss(8)> xmax(t) ymax(t) xmin(t) ymin(t)
+ 2 copy translate % <ss(8)> xmax ymax xmin ymin
+ /Mtmatrix matrix currentmatrix def
+ 3 -1 roll % <ss(8)> xmax xmin ymin ymax
+ exch sub % <ss(8)> xmax xmin height
+ /Mheight exch def % <ss(8)> xmax xmin
+ sub % <ss(8)> width
+ /Mwidth exch def % <ss(8)>
+} bind def
+
+
+% Restore the saved state left by the matching MathSubStart.
+% Note, we also leave with the new Mgmatrix as the current matrix.
+/MathSubEnd { % gmat tmat lm rm bm tm w h MathSubStart -
+ /Mheight exch def % gmat tmat lm rm bm tm w
+ /Mwidth exch def % gmat tmat lm rm bm tm
+ /Mtmatrix exch def % gmat
+ dup setmatrix % gmat
+ /Mgmatrix exch def % -
+ /Momatrix exch def % -
+} bind def
+
+
+% Given a point, draw a dot.
+/Mdot { % x y Mdot -
+ moveto % -
+ 0 0 rlineto % -
+ stroke % -
+} bind def
+
+
+% Given 4 points, draw the corresponding filled tetragon.
+/Mtetra { % x0 y0 x1 y1 x2 y2 x3 y3 Mtetra -
+ moveto % x0 y0 x1 y1 x2 y2
+ lineto % x0 y0 x1 y1
+ lineto % x0 y0
+ lineto % -
+ fill % -
+} bind def
+
+
+% Given 4 points, draw the corresponding filled tetragon with black edges.
+% Note, this leaves the gray level at 0 (for compatibility with the old
+% C code.
+/Metetra { % x0 y0 x1 y1 x2 y2 x3 y3 Metetra -
+ moveto % x0 y0 x1 y1 x2 y2
+ lineto % x0 y0 x1 y1
+ lineto % x0 y0
+ lineto % -
+ closepath % -
+ gsave % -
+ fill % -
+ grestore % -
+ 0 setgray % -
+ stroke % -
+} bind def
+
+
+% Mistroke is called to stroke intermediate parts of a path. It makes
+% sure to resynchronize the dashing pattern and to leave the current point
+% as the final point of the path.
+/Mistroke { % - Mistroke -
+ flattenpath % -
+ 0 0 0 % length x y
+ { % length x y new_x new_y (for moves)
+ 4 2 roll % length new_x new_y x y
+ pop pop % length new_x new_y
+ }
+ { % length x y new_x new_y (for lines)
+ 4 -1 roll % length y new_x new_y x
+ 2 index % length y new_x new_y x new_x
+ sub dup mul % length y new_x new_y dx*dx
+ 4 -1 roll % length new_x new_y dx*dx y
+ 2 index % length new_x new_y dx*dx y new_y
+ sub dup mul % length new_x new_y dx*dx dy*dy
+ add sqrt % length new_x new_y dlen
+ 4 -1 roll % new_x new_y dlen length
+ add % new_x new_y new_length
+ 3 1 roll % new_length new_x new_y
+ }
+ { % length x y x1 y1 x2 y2 x3 y3 (for curves)
+ stop % should never be called
+ }
+ { % length x y (for closepaths)
+ stop % should never be called
+ }
+ pathforall % length x y
+ pop pop % length
+ currentpoint % length final_x final_y
+ stroke % length final_x final_y
+ moveto % length
+ currentdash % length dash_array dash_offset
+ 3 -1 roll % dash_array dash_offset length
+ add % dash_array new_offset
+ setdash % -
+} bind def
+
+
+% Mfstroke is called to stroke the final parts of a path. It resets
+% the dashing pattern to compensate for any adjustments made by Mistroke.
+/Mfstroke { % - Mfstroke -
+ stroke % -
+ currentdash % dash_array dash_offset
+ pop 0 % dash_array 0
+ setdash % -
+} bind def
+
+
+
+% Mrotsboxa is the same as Msboxa except that it takes an angle
+% form the stack and the box is calculated for text rendered at this angle.
+% It gsaves in case we are starting a MathSubStart
+% save Mrot so that Msboxa can convert bouding box back to the non-rotated
+% coordinate system
+% call Mrotcheck to alter the offsets into the rotated system
+% converts Mtmatrix to render in the rotated system
+% the calls Msboxa which does all the work
+% at the end Mtmatrix is restored and Mrot is reset to 0
+/Mrotsboxa { % [str..] gx gy sx sy ang Mrotsboxa ... Msboxa
+ gsave % in case in MathSubStart
+ dup % [str..] gx gy sx sy ang ang
+ /Mrot
+ exch def % [str..] gx gy sx sy ang
+ Mrotcheck % [str..] gx gy sx_new sy_new ang
+ Mtmatrix % [str..] gx gy sx sy ang Mtmatrix
+ dup
+ setmatrix
+ 7 1 roll % Mtmatrix [str..] gx gy sx sy ang
+ 4 index % Mtmatrix [str..] gx gy sx sy ang gx
+ 4 index % Mtmatrix [str..] gx gy sx sy ang gx gy
+ translate % Mtmatrix [str..] gx gy sx sy ang
+ rotate % Mtmatrix [str..] gx gy sx sy
+ 3 index % Mtmatrix [str..] gx gy sx sy gx
+ -1 mul % Mtmatrix [str..] gx gy sx sy -gx
+ 3 index % Mtmatrix [str..] gx gy sx sy -gx gy
+ -1 mul % Mtmatrix [str..] gx gy sx sy -gx -gy
+ translate % Mtmatrix [str..] gx gy sx sy
+ /Mtmatrix % now change Mtmatrix to be this new currentmatrix
+ matrix
+ currentmatrix
+ def
+ grestore % grestore to deal with MathSubStart
+ Msboxa % Mtmatrix [ x y x y] [ x y x y]
+ 3 -1 roll % [x y x y ] [x y x y] Mtmatrix
+ /Mtmatrix
+ exch def % restore Mtmatrix
+ /Mrot
+ 0 def % restore Mrot
+} bind def
+
+
+% Given an array of strings ([str...]), which represent consecutive lines
+% of text, a position in graphics coordinates (gx,gy) and a position in
+% the bounding box coordinates (sx,sy), compute the low and high coordinates
+% of the resulting text, in the [gx gy tx ty] form, which corresponds to
+% the point (gx,gy) (in graphics coordinates) plus the offset (tx,ty) (in
+% text coordinates).
+% Note, Msboxa assumes that the current matrix is the text matrix.
+% Mboxout is called in case we are in Mouter to make the box bigger
+% Mboxrot adjusts the box to account for a rotation to convert the box
+% into a nonrotated coordinate system
+%
+/Msboxa { % [str...] gx gy sx sy Msboxa [gx gy tlx tly] [gx gy thx thy]
+ newpath % [str...] gx gy sx sy (just in case)
+ 5 -1 roll % gx gy sx sy [str...]
+ Mvboxa % gx gy sx sy blx bly bhx bhy [off...]
+ pop % gx gy sx sy blx bly bhx bhy
+ Mboxout % adjust box for Minner
+ 6 -1 roll % gx gy sy blx bly bhx bhy sx
+ 5 -1 roll % gx gy sy bly bhx bhy sx blx
+ 4 -1 roll % gx gy sy bly bhy sx blx bhx
+ Msboxa1 % gx gy sy bly bhy tlx thx
+ 5 -3 roll % gx gy tlx thx sy bly bhy
+ Msboxa1 % gx gy tlx thx tly thy
+ Mboxrot % adjust box for rotation
+ [ % gx gy tlx thx tly thy mark
+ 7 -2 roll % tlx thx tly thy mark gx gy
+ 2 copy % tlx thx tly thy mark gx gy gx gy
+ [ % tlx thx tly thy mark gx gy gx gy mark
+ 3 1 roll % tlx thx tly thy mark gx gy mark gx gy
+ 10 -1 roll % thx tly thy mark gx gy mark gx gy tlx
+ 9 -1 roll % thx thy mark gx gy mark gx gy tlx tly
+ ] % thx thy mark gx gy [gx gy tlx tly]
+ 6 1 roll % [gx gy tlx tly] thx thy mark gx gy
+ 5 -2 roll % [gx gy tlx tly] mark gx gy thx thy
+ ] % [gx gy tlx tly] [gx gy thx thy]
+} bind def
+
+% Msboxa1 is an internal function which, given a bounding box coordinate
+% (sz), and the bounding box limits (blz and bhz), computes the actual
+% offsets (tlz = (blz-bhz)(sz+1)/2, thz = (blz-bhz)(sz-1)/2).
+/Msboxa1 { % sz blz bhz Msboxa1 tlz thz
+ sub % sz blz-bhz
+ 2 div % sz (blz-bhz)/2
+ dup % sz (blz-bhz)/2 (blz-bhz)/2
+ 2 index % sz (blz-bhz)/2 (blz-bhz)/2 sz
+ 1 add % sz (blz-bhz)/2 (blz-bhz)/2 sz+1
+ mul % sz (blz-bhz)/2 tlz
+ 3 -1 roll % (blz-bhz)/2 tlz sz
+ -1 add % (blz-bhz)/2 tlz sz-1
+ 3 -1 roll % tlz sz-1 (blz-bhz)/2
+ mul % tlz thz
+} bind def
+
+
+% Given a (non-empty) array of strings ([str...]) calculate the
+% bounding box. We do this for fixedwidth fonts or nonfixedwidth fonts
+% depending upon the setting of Mfixwid. Mvboxa1 actually does a lot
+% of the work. For nonfixedwidth fonts the length of the bounding
+% box length is made to be the summation of [(str)..] Mwidthcal
+% ie the maximum length of the strings and xlow
+%
+/Mvboxa { % [str...] Mvboxa xlow ylow xhigh yhigh [off...]
+ Mfixwid
+ {
+ Mvboxa1
+ }
+ {
+ dup % [str...] [str...]
+ Mwidthcal % [str...] [ w1 w2...]
+ 0 exch % [str...] 0 [ w1 w2...]
+ {
+ add
+ }
+ forall % [str...] length
+ exch
+ Mvboxa1 % length xlow ylow xhigh yhigh [off...]
+ 4 index % length xlow ylow xhigh yhigh [off...] xlow
+ 7 -1 roll % xlow ylow xhigh yhigh [off...] xlow length
+ add % xlow ylow xhigh yhigh [off...] new_xhigh
+ 4 -1 roll
+ pop % xlow ylow yhigh [off...] new_xhigh
+ 3 1 roll % xlow ylow new_xhigh yhigh [off...]
+ }
+ ifelse
+} bind def
+
+
+% Given a (non-empty) array of strings ([str...]) which represent consecutive
+% lines of text, compute the total bounding box assuming that we start at
+% (0,0) and the array of y offsets to place the lines correctly.
+% Note, Mvboxa assumes that the current matrix is the text matrix.
+% Note, Mvboxa does not alter the current path.
+% The vertical spacing is set so that the bounding boxes of adjacent lines
+% are .3 times the width of an `m' apart.
+/Mvboxa1 { % [str...] Mvboxa xlow ylow xhigh yhigh [off...]
+ gsave % [str...]
+ newpath % [str...] (clear path fragments)
+ [ true % [str...] mark true
+ 3 -1 roll % mark true [str...]
+ { % mark {true -or- off... Xl Yl Xh Yh false} str
+ Mbbox % mark {true -or- off... Xl Yl Xh Yh false} xl yl xh yh
+ 5 -1 roll % mark { - -or- off... Xl Yl Xh Yh} xl yl xh yh first?
+ { % mark xl yl xh yh
+ 0 % mark xl yl xh yh off1
+ 5 1 roll % mark off1 xl yl xh yh
+ } % mark off1 XL YL XH YH
+ { % mark off... Xl Yl Xh Yh xl yl xh yh
+ 7 -1 roll % mark off... Xl Xh Yh xl yl xh yh Yl
+ exch sub % mark off... Xl Xh Yh xl yl xh yh-Yl
+ (m) stringwidth pop % mark off... Xl Xh Yh xl yl xh yh-Yl pntsize
+ .3 mul % mark off... Xl Xh Yh xl yl xh yh-Yl fudge
+ sub % mark off... Xl Xh Yh xl yl xh off
+ 7 1 roll % mark off... off Xl Xh Yh xl yl xh
+ 6 -1 roll % mark off... off Xh Yh xl yl xh Xl
+ 4 -1 roll % mark off... off Xh Yh yl xh Xl xl
+ Mmin % mark off... off Xh Yh yl xh XL
+ 3 -1 roll % mark off... off Xh Yh xh XL yl
+ 5 index % mark off... off Xh Yh xh XL yl off
+ add % mark off... off Xh Yh xh XL YL
+ 5 -1 roll % mark off... off Yh xh XL YL Xh
+ 4 -1 roll % mark off... off Yh XL YL Xh xh
+ Mmax % mark off... off Yh XL YL XH
+ 4 -1 roll % mark off... off XL YL XH YH
+ } % mark off... XL YL XH YH
+ ifelse % mark off... XL YL XH YH
+ false % mark off... XL YL XH YH false
+ } % mark off... XL YL XH YH false
+ forall % mark off... xlow ylow xhigh yhigh false
+ { stop } if % mark off... xlow ylow xhigh yhigh
+ counttomark % mark off... xlow ylow xhigh yhigh (#off's+4)
+ 1 add % mark off... xlow ylow xhigh yhigh (#off's+5)
+ 4 roll % xlow ylow xhigh yhigh mark off...
+ ] % xlow ylow xhigh yhigh [off...]
+ grestore % xlow ylow xhigh yhigh [off...]
+} bind def
+
+
+% Given a string, compute the bounding box assuming that we start at (0,0).
+% Note, the path is assumed to be empty, and we are assumed to be in text
+% coordinates. Allows for long strings.
+/Mbbox { % str Mbbox xlow ylow xhigh yhigh
+ 1 dict begin
+ 0 0 moveto % str
+ /temp (T) def
+ { gsave
+ currentpoint newpath moveto
+ temp 0 3 -1 roll put temp
+ false charpath flattenpath currentpoint
+ pathbbox
+ grestore moveto lineto moveto} forall
+ pathbbox
+ newpath
+ end
+} bind def
+
+
+% Compute the minimum of two numbers.
+/Mmin { % p q Mmin min(p,q)
+ 2 copy % p q p q
+ gt % p q p>q?
+ { exch } if % min(p,q) max(p,q)
+ pop % min(p,q)
+} bind def
+
+
+% Compute the maximum of two numbers.
+/Mmax { % p q Mmax max(p,q)
+ 2 copy % p q p q
+ lt % p q p<q?
+ { exch } if % max(p,q) min(p,q)
+ pop % max(p,q)
+} bind def
+
+% Mrotshowa is the same as Mshowa except that it takes an angle
+% from the stack and the text is rendered at this angle.
+% It saves Mrot (not really needed but saved anyway)
+% calls Mrotcheck to adjust the offsets into the rotated coordinate system
+% converts Mtmatrix to render in the rotated system
+% and calls Mshowa which does all the work
+% at the end Mtmatrix is restored and Mrot is reset to zero.
+%
+/Mrotshowa { %[str..] gx gy sx sy ang Mrotshowa
+ dup
+ /Mrot
+ exch def
+ Mrotcheck
+ Mtmatrix %[str..] gx gy sx sy ang Mtmatrix
+ dup
+ setmatrix
+ 7 1 roll %Mtmatrix [str..] gx gy sx sy ang
+ 4 index %Mtmatrix [str..] gx gy sx sy ang gx
+ 4 index %Mtmatrix [str..] gx gy sx sy ang gx gy
+ translate
+ rotate %Mtmatrix [str..] gx gy sx sy
+ 3 index
+ -1 mul
+ 3 index
+ -1 mul %Mtmatrix [str..] gx gy sx sy -gx -gy
+ translate
+ /Mtmatrix
+ matrix
+ currentmatrix
+ def %Mtmatrix [str..] gx gy sx sy
+ Mgmatrix setmatrix
+ Mshowa %Mtmatrix
+ /Mtmatrix
+ exch def
+ /Mrot 0 def % restore Mrot
+} bind def
+
+%
+% Given an array of strings ([str...]), which represent consecutive lines
+% of text, a position in graphics coordinates (gx,gy) and a position in
+% the bounding box coordinates (sx,sy), display the strings.
+% Mboxout is called in case we are in Mouter
+%
+/Mshowa { % [str...] gx gy sx sy Mshowa -
+ 4 -2 roll % [str...] sx sy gx gy
+ moveto % [str...] sx sy
+ 2 index % [str...] sx sy [str...]
+ Mtmatrix setmatrix % [str...] sx sy [str...]
+ Mvboxa % [str...] sx sy tlx tly thx thy [off...]
+ 7 1 roll % [str...] [off...] sx sy tlx tly thx thy
+ Mboxout
+ 6 -1 roll % [str...] [off...] sy tlx tly thx thy sx
+ 5 -1 roll % [str...] [off...] sy tly thx thy sx tlx
+ 4 -1 roll % [str...] [off...] sy tly thy sx tlx thx
+ Mshowa1 % [str...] [off...] sy tly thy relx
+ 4 1 roll % [str...] [off...] relx sy tly thy
+ Mshowa1 % [str...] [off...] relx rely
+ rmoveto % [str...] [off...]
+ currentpoint % [str...] [off...] x y
+ Mfixwid
+ {
+ Mshowax
+ }
+ {
+ Mshoway
+ }
+ ifelse
+ pop pop pop pop
+ Mgmatrix setmatrix
+} bind def
+
+
+% This is used for fixedwidth fonts
+% It simply shows each string and advances the y direction by the offset
+%
+/Mshowax {
+ 0 1
+ 4 index length % [str...] [off...] x y 0 1 (#strings)
+ -1 add % [str...] [off...] x y 0 1 (#strings-1)
+ { % [str...] [off...] x y strnum
+ 2 index % [str...] [off...] x y strnum x
+ 4 index % [str...] [off...] x y strnum x [off...]
+ 2 index % [str...] [off...] x y strnum [off...] strnum
+ get % [str...] [off...] x y strnum x off
+ 3 index % [str...] [off...] x y strnum x off y
+ add % [str...] [off...] x y strnum x Y
+ moveto % [str...] [off...] x y strnum
+ 4 index % [str...] [off...] x y strnum [str...]
+ exch get % [str...] [off...] x y str
+ Mfixdash
+ {
+ Mfixdashp
+ }
+ if
+ show % [str...] [off...] x y
+ } for % [str...] [off...] x y
+} bind def
+
+% Fix if all dashes and length > 1
+/Mfixdashp { % str
+ dup
+ length % str n
+ 1
+ gt % str bool
+ 1 index % str bool str
+ true exch % str bool true str
+ {
+ 45
+ eq
+ and
+ } forall
+ and % str bool
+ {
+ gsave
+ (--)
+ stringwidth pop
+ (-)
+ stringwidth pop
+ sub
+ 2 div % str lenfix
+ 0 rmoveto % str
+ dup % str str
+ length
+ 1 sub % str len-1
+ {
+ (-)
+ show
+ }
+ repeat
+ grestore
+ }
+ if % x y str
+} bind def
+
+
+% This is for non-fixedwidth fonts
+% It shows each character individually advancing the x position by
+% the maximum width of any character in that position
+%
+/Mshoway {
+ 3 index % [str...] [off...] x y [str...]
+ Mwidthcal % [str...] [off...] x y [w1 w2 w3...]
+ 5 1 roll % [w1 w2 w3..] [str...] [off...] x y
+ 0 1 % [w1 w2 w3..] [str...] [off...] x y 0 1
+ 4 index length % [w1 w2 w3..] [str...] [off...] x y 0 1 (#strings)
+ -1 add % [w1 w2 w3..] [str...] [off...] x y 0 1 (#strings-1)
+ { % [w1 w2 w3..] [str...] [off...] x y strnum
+ 2 index % [w1 w2 w3..] [str...] [off...] x y strnum x
+ 4 index % [w1 w2 w3..] [str...] [off...] x y strnum x [off...]
+ 2 index % [w1 w2 w3..] [str...] [off...] x y
+ % strnum [off...] strnum
+ get % [w1 w2 w3..] [str...] [off...] x y strnum x off
+ 3 index % [w1 w2 w3..] [str...] [off...] x y strnum x off y
+ add % [w1 w2 w3..] [str...] [off...] x y strnum x Y
+ moveto % [w1 w2 w3..] [str...] [off...] x y strnum
+ 4 index % [w1 w2 w3..] [str...] [off...] x y strnum [str...]
+ exch get % [w1 w2 w3..] [str...] [off...] x y str
+ [
+ 6 index % [w1 w2 w3..] [str...] [off...] x y str [ [w1 w2..]
+ aload
+ length % [w1 w2 w3..] [str...] [off...] x y str [ w1 w2.. len
+ 2 add
+ -1 roll % [w1 w2 w3..] [str...] [off...] x y [ w1 w2.. str
+ {
+ pop % [w1 w2 w3..] [str...] [off...] x y [ w1 c2.. str am
+ Strform % [w1 w2 w3..] [str...] [off...] x y [ w1 w2.. str 1str
+ stringwidth
+ pop
+ neg
+ exch % [w1 w2 w3..] [str...] [off...] x y [ w1 w2..
+ % str -cm cn
+ add
+ 0 rmoveto % [w1 w2 w3..] [str...] [off...] x y [ w1 w2.. str
+ }
+ exch
+ kshow % [w1 w2 w3..] [str...] [off...] x y [
+ cleartomark
+ } for % [w1 w2 w3..] [str...] [off...] x y
+ pop
+} bind def
+
+%
+% This is a central mechanism for dealing with non-fixedwidth fonts.
+% Given an array of strings Mwidthcal returns an array of the lengths
+% of the longest character in the corresponding positions in the arrays.
+% Thus the 4th element of the result is the maximum character width of
+% each strin at the 4th position.
+%
+/Mwidthcal { % [(abc) (abc) ..] Mwidthcal [w1 w2 w3 ...]
+ [
+ exch % [ [(abc) (abd) ..]
+ {
+ Mwidthcal1
+ }
+ forall
+ ] % [[w w w] [w w w] ..]
+ [ % call this [chr ..] now
+ exch % [ [chr ..]
+ dup % [ [chr ..] [chr ..]
+ Maxlen % [ [chr ..] maxlen
+ -1 add
+ 0 1
+ 3 -1 roll % [chr ..] [ [chr ..] 0 1 maxlen-1
+ {
+ [ % [chr ..] [ [chr ..] n [
+ exch % [chr ..] [ [chr ..] [ n
+ 2 index % [chr ..] [ [chr ..] [ n [chr ..]
+ {
+ 1 index
+ Mget % [chr ..] [ [chr ..] [ n [w1 w2 ..] n
+ exch % [chr ..] [ [chr ..] [ wn n
+ }
+ forall
+ pop % [chr ..] [ [chr ..] [ w1 w2 w3
+ Maxget % [chr ..] [ [chr ..] wmax
+ exch % [chr ..] [ wmax [chr ..]
+ }
+ for
+ pop
+ ] % [ wmax1 wmax2 wmax3 ..]
+ Mreva
+} bind def
+
+%Reverse an array
+/Mreva { %[a b c ..] Mreva [.. c b a]
+ [
+ exch %[ [a b c ..]
+ aload
+ length %[a b c .. len
+ -1 1 %[a b c .. len -1 1
+ {1 roll}
+ for
+ ] %[.. c b a]
+} bind def
+
+% take an array and an index and return that element if index exits
+% if array not long enougth return zero
+/Mget { %[a b c d..] index
+ 1 index
+ length %[a b c d..] index len
+ -1 add
+ 1 index %[a b c d..] index (len-1) index
+ ge
+ {
+ get %if long enough return entry
+ }
+ {
+ pop pop
+ 0 %if not long enough return zero
+ }
+ ifelse
+} bind def
+
+%Take an array of arrays and return the longest length
+/Maxlen { %[ arr1 arr2 arr3 ] Maxlen maxlen
+ [ %[ arr1 arr2 arr3 ] [
+ exch %[ [ arr1 arr2 arr3 ]
+ {
+ length
+ }
+ forall %[ len1 len2 len3..
+ Maxget
+} bind def
+
+%Take a series of numbers starting with [ and return the largest member
+/Maxget { %[n1 n2 n3 .. Maxget nmax
+ counttomark %[n1 n2 n3 .. len
+ -1 add %[n1 n2 n3 .. len-1
+ 1 1 %[n1 n2 n3 .. len 1 1
+ 3 -1 roll %[n1 n2 n3 .. 1 1 (len-1)
+ {
+ pop
+ Mmax
+ }
+ for %[ nmax
+ exch % nmax [
+ pop % nmax
+} bind def
+
+%Take a string and return an array of the lengths of the characters
+/Mwidthcal1 { % str Mwidthcal1 [w1 w2 w3 ..]
+ [
+ exch %[ (str)
+ {
+ Strform
+ stringwidth
+ pop
+ }
+ forall %[w1 w2 w3 ..
+ ] %[w1 w2 w3 ..]
+} bind def
+
+%put a string onto the stack
+/Strform { % num
+ /tem (x) def
+ tem 0
+ 3 -1 roll
+ put
+ tem
+} bind def
+
+%/Mwidmax { % [str...]
+% dup % [str...] [str...]
+% [ % [str...] [str...] [
+% exch % [str...] [ [str...]
+% {
+% stringwidth
+% pop
+% }
+% forall % [str...] [ w1 w2 ... wm wn
+% 0
+% counttomark % [str...] [ w1 w2 ... wm wn 0 n
+% -2 add % [str...] [ w1 w2 ... wm wn 0 (n-1)
+% 1 exch % [str...] [ w1 w2 ... wm wn 0 1 (n-1)
+% 1 exch % [str...] [ w1 w2 ... wm wn 0 1 1 (n-1)
+% {
+% 3 index % [str...] [ w1 w2 ... wm wn num pos wm
+% 3 index % [str...] [ w1 w2 ... wm wn num pos wm wn
+% ge
+% { % wm >= wn
+% exch pop
+% exch pop % [str...] [ w1 w2 ... wm num
+% }
+% { % wm < wn
+% pop
+% 3 -1 roll
+% pop % [str...] [ w1 w2 ... wn pos < pos -> num >
+% }
+% ifelse % [str...] [ w1 w2 ... wmax nmax
+% }
+% for % [str...] [ wmax nmax
+% 4 1 roll
+% pop pop % nmax [str...]
+% length % nmax len
+% -1 add % nmax (len - 1)
+% exch
+% sub % max_pos
+%} bind def
+
+
+% Mshowa1 is an internal routine which, given a bounding box coordinate
+% (sz), and the bounding box limits if we started drawing at 0 (tlz and thz),
+% computes the offset at which to start drawing
+% (relz = (sz-1)tlz/2 - (sz+1)thz/2 = sz(tlz-thz)/2-(tlz+thz)/2).
+/Mshowa1 { % sz tlz thz Mshowa1 relz
+ 2 copy % sz tlz thz tlz thz
+ add % sz tlz thz tlz+thz
+ 4 1 roll % tlz+thz sz tlz thz
+ sub % tlz+thz sz tlz-thz
+ mul % tlz+thz sz(tlz-thz)
+ sub % tlz+thz-sz(tlz-thz)
+ -2 div % sz(tlz-thz)/2-(tlz+thz)/2
+} bind def
+
+
+% Given the x and y scaling to user coordinates and an array of points to
+% fit (xbias xscale ybias yscale [pnts]), set up the scaling. The array
+% must contain atleast two points, and the last two must be of the form
+% [gxlow gylow 0 0] and [gxhigh gyhigh 0 0].
+% Note, MathScale assumes that we are already scaled so that the active area
+% is the rectangle [0,Mwidth-Mlmarg-Mrmarg]x[0,Mheight-Mbmarg-Mtmarg].
+% also keep bias and scale info for PostScript commands
+/MathScale { % <user> [pnts] MathScale -
+ Mwidth % <user> [pnts] width
+ Mheight % <user> [pnts] width height
+ Mlp % <user> Ax Ay Bx By
+ translate % <user> Ax Ay
+ scale % <user>
+ /yscale exch def
+ /ybias exch def
+ /xscale exch def
+ /xbias exch def
+ /Momatrix % this transforms from
+ xscale yscale matrix scale % Original to Display coordinates
+ xbias ybias matrix translate
+ matrix concatmatrix def
+ /Mgmatrix % /Mgmatrix
+ matrix currentmatrix % /Mgmatrix graphics_matrix
+ def % -
+} bind def
+
+
+% Given a non-empty array of points to fit ([p]) and a maximum width (sx)
+% and height (sy) find the largest scale (Ax and Ay) and offsets (Bx and By)
+% such that the transformation
+% [gx gy tx ty] -> (Ax gx + tx + bx, Ay gy + ty + By)
+% maps the points into the rectangle [0,sx]x[0,sy]
+/Mlp { % [p] sx sy Mlp Ax Ay Bx By
+ 3 copy % [p] sx sy [p] sx sy
+ Mlpfirst % [p] sx sy Ax Ay
+ { % [p] sx sy Ax Ay
+ Mnodistort % [p] sx sy Ax Ay nodistort?
+ { % [p] sx sy Ax Ay
+ Mmin % [p] sx sy A
+ dup % [p] sx sy Ax Ay
+ } if % [p] sx sy Ax Ay
+ 4 index % [p] sx sy Ax Ay [p]
+ 2 index % [p] sx sy Ax Ay [p] Ax
+ 2 index % [p] sx sy Ax Ay [p] Ax Ay
+ Mlprun % [p] sx sy Ax Ay ctx wtx cgx wgx cty wty cgy wgy
+ 11 index % [p] sx sy Ax Ay ctx wtx cgx wgx cty wty cgy wgy sx
+ 11 -1 roll % [p] sx sy Ay ctx wtx cgx wgx cty wty cgy wgy sx Ax
+ 10 -4 roll % [p] sx sy Ay cty wty cgy wgy sx Ax ctx wtx cgx wgx
+ Mlp1 % [p] sx sy Ay cty wty cgy wgy Ax Bx xok?
+ 8 index % [p] sx sy Ay cty wty cgy wgy Ax Bx xok? sy
+ 9 -5 roll % [p] sx sy Ax Bx xok? sy Ay cty wty cgy wgy
+ Mlp1 % [p] sx sy Ax Bx xok? Ay By yok?
+ 4 -1 roll % [p] sx sy Ax Bx Ay By yok? xok?
+ and % [p] sx sy Ax Bx Ay By ok?
+ { exit } if % [p] sx sy Ax Bx Ay By
+ 3 -1 roll % [p] sx sy Ax Ay Bx By
+ pop pop % [p] sx sy Ax Ay
+ } loop % [p] sx sy Ax Bx Ay By
+ exch % [p] sx sy Ax Bx By Ay
+ 3 1 roll % [p] sx sy Ax Ay Bx By
+ 7 -3 roll % Ax Ay Bx By [p] sx sy
+ pop pop pop % Ax Ay Bx By
+} bind def
+
+
+% Given an array of points in the [gx gy tx ty] form, with the last two
+% being [gxlow gylow 0 0] and [gxhigh gyhigh 0 0], and the width and height
+% (sx and sy) in which to fit them, compute the maximum scaling (Ax and Ay).
+/Mlpfirst { % [pnts] sx sy Mlpfirst Ax Ay
+ 3 -1 roll % sx sy [pnts]
+ dup length % sx sy [pnts] #pnts
+ 2 copy % sx sy [pnts] #pnts [pnts] #pnts
+ -2 add % sx sy [pnts] #pnts [pnts] #pnts-2
+ get % sx sy [pnts] #pnts [gxl gyl 0 0]
+ aload % sx sy [pnts] #pnts gxl gyl 0 0 [gxl gyl 0 0]
+ pop pop pop % sx sy [pnts] #pnts gxl gyl
+ 4 -2 roll % sx sy gxl gyl [pnts] #pnts
+ -1 add % sx sy gxl gyl [pnts] #pnts-1
+ get % sx sy gxl gyl [gxh gyh 0 0]
+ aload % sx sy gxl gyl gxh gyh 0 0 [gxh gyh 0 0]
+ pop pop pop % sx sy gxl gyl gxh gyh
+ 6 -1 roll % sy gxl gyl gxh gyh sx
+ 3 -1 roll % sy gxl gyl gyh sx gxh
+ 5 -1 roll % sy gyl gyh sx gxh gxl
+ sub % sy gyl gyh sx delx
+ div % sy gyl gyh Ax
+ 4 1 roll % Ax sy gyl gyh
+ exch sub % Ax sy dely
+ div % Ax Ay
+} bind def
+
+
+% Given a non-empty array of points to fit ([pnts]) and scale factors
+% for graphics->text (Ax and Ay), compute the limiting points.
+/Mlprun { % [pnts] Ax Ay Mlprun ctx wtx cgx wgx cty wty cgy wgy
+ 2 copy % [pnts] Ax Ay Ax Ay
+ 4 index % [pnts] Ax Ay Ax Ay [pnts]
+ 0 get % [pnts] Ax Ay Ax Ay [first]
+ dup % [pnts] Ax Ay Ax Ay [first] [first]
+ 4 1 roll % [pnts] Ax Ay [first] Ax Ay [first]
+ Mlprun1 % [pnts] Ax Ay [first] fx fy
+ 3 copy % [pnts] Ax Ay [low] lx ly [high] hx hy
+ 8 -2 roll % [pnts] [low] lx ly [high] hx hy Ax Ay
+ 9 -1 roll % [low] lx ly [high] hx hy Ax Ay [pnts]
+ { % [low] lx ly [high] hx hy Ax Ay [pnt]
+ 3 copy % [low] lx ly [high] hx hy Ax Ay [pnt] Ax Ay [pnt]
+ Mlprun1 % [low] lx ly [high] hx hy Ax Ay [pnt] px py
+ 3 copy % [low] lx ly [high] hx hy Ax Ay [pnt] px py [pnt] px py
+ 11 -3 roll % [low] lx ly Ax Ay [pnt] px py [pnt] px py [high] hx hy
+ /gt Mlpminmax % [low] lx ly Ax Ay [pnt] px py [high] hx hy
+ 8 3 roll % [low] lx ly [high] hx hy Ax Ay [pnt] px py
+ 11 -3 roll % [high] hx hy Ax Ay [pnt] px py [low] lx ly
+ /lt Mlpminmax % [high] hx hy Ax Ay [low] lx ly
+ 8 3 roll % [low] lx ly [high] hx hy Ax Ay
+ } forall % [low] lx ly [high] hx hy Ax Ay
+ pop pop pop pop % [low] lx ly [high]
+ 3 1 roll % [low] [high] lx ly
+ pop pop % [low] [high]
+ aload pop % [low] hgx hgy htx hty
+ 5 -1 roll % hgx hgy htx hty [low]
+ aload pop % hgx hgy htx hty lgx lgy ltx lty
+ exch % hgx hgy htx hty lgx lgy lty ltx
+ 6 -1 roll % hgx hgy hty lgx lgy lty ltx htx
+ Mlprun2 % hgx hgy hty lgx lgy lty ctx wtx
+ 8 2 roll % ctx wtx hgx hgy hty lgx lgy lty
+ 4 -1 roll % ctx wtx hgx hgy lgx lgy lty hty
+ Mlprun2 % ctx wtx hgx hgy lgx lgy cty wty
+ 6 2 roll % ctx wtx cty wty hgx hgy lgx lgy
+ 3 -1 roll % ctx wtx cty wty hgx lgx lgy hgy
+ Mlprun2 % ctx wtx cty wty hgx lgx cgy wgy
+ 4 2 roll % ctx wtx cty wty cgy wgy hgx lgx
+ exch % ctx wtx cty wty cgy wgy lgx hgx
+ Mlprun2 % ctx wtx cty wty cgy wgy cgx wgx
+ 6 2 roll % ctx wtx cgx wgx cty wty cgy wgy
+} bind def
+
+
+% Given scale factors for graphics->text (Ax and Ay) and a point in the
+% [gx gy tx ty] form, return the text x and y coordinate that results.
+/Mlprun1 { % Ax Ay [gx gy tx ty] Mlprun1 rx ry
+ aload pop % Ax Ay gx gy tx ty
+ exch % Ax Ay gx gy ty tx
+ 6 -1 roll % Ay gx gy ty tx Ax
+ 5 -1 roll % Ay gy ty tx Ax gx
+ mul add % Ay gy ty rx
+ 4 -2 roll % ty rx Ay gy
+ mul % ty rx Ay*gy
+ 3 -1 roll % rx Ay*gy ty
+ add % rx ry
+} bind def
+
+
+% Given a low and high coordinate, compute the center and width.
+/Mlprun2 { % low high Mlprun2 center width
+ 2 copy % low high low high
+ add 2 div % low high (low+high)/2
+ 3 1 roll % (low+high)/2 low high
+ exch sub % (low+high)/2 high-low
+} bind def
+
+
+% Given two points stored as [gx gy tx ty] followed by the scaled
+% result (rx, ry), and a comparison function (lt or gt) leave the
+% point which is the minimum (or maximum) in each dimension.
+/Mlpminmax { % [pnt1] r1x r1y [pnt2] r2x r2y cmp Mlpminmax [pnt] x y
+ cvx % [pnt1] r1x r1y [pnt2] r2x r2y cmp
+ 2 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2x
+ 6 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2x r1x
+ 2 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2x r1x cmp
+ exec % [pnt1] r1x r1y [pnt2] r2x r2y cmp take2?
+ { % [pnt1] r1x r1y [pnt2] r2x r2y cmp
+ 7 -3 roll % [pnt2] r2x r2y cmp [pnt1] r1x r1y
+ 4 -1 roll % [pnt2] r2x r2y [pnt1] r1x r1y cmp
+ } if % [pnt1] r1x r1y [pnt2] r2x r2y cmp
+ 1 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2y
+ 5 index % [pnt1] r1x r1y [pnt2] r2x r2y cmp r2y r1y
+ 3 -1 roll % [pnt1] r1x r1y [pnt2] r2x r2y r2y r1y cmp
+ exec % [pnt1] r1x r1y [pnt2] r2x r2y take2y?
+ { % [gx ? tx ?] rx ? [? gy ? ty] ? ry
+ 4 1 roll % [gx ? tx ?] rx ry ? [? gy ? ty] ?
+ pop % [gx ? tx ?] rx ry ? [? gy ? ty]
+ 5 -1 roll % rx ry ? [? gy ? ty] [gx ? tx ?]
+ aload % rx ry ? [? gy ? ty] gx ? tx ? [gx ? tx ?]
+ pop pop % rx ry ? [? gy ? ty] gx ? tx
+ 4 -1 roll % rx ry ? gx ? tx [? gy ? ty]
+ aload pop % rx ry ? gx ? tx ? gy ? ty
+ [ % rx ry ? gx ? tx ? gy ? ty mark
+ 8 -2 roll % rx ry ? tx ? gy ? ty mark gx ?
+ pop % rx ry ? tx ? gy ? ty mark gx
+ 5 -2 roll % rx ry ? tx ? ty mark gx gy ?
+ pop % rx ry ? tx ? ty mark gx gy
+ 6 -2 roll % rx ry ? ty mark gx gy tx ?
+ pop % rx ry ? ty mark gx gy tx
+ 5 -1 roll % rx ry ? mark gx gy tx ty
+ ] % rx ry ? [pnt]
+ 4 1 roll % [pnt] rx ry ?
+ pop % [pnt] rx ry
+ }
+ { % [gx gy tx ty] rx ry ? ? ?
+ pop pop pop % [pnt] rx ry
+ } ifelse % [pnt] rx ry
+} bind def
+
+
+% Given a size (s), graphics->text scale (A), text center (ct), text
+% width (wt), graphics center (cg) and graphics width (wg), compute
+% a new graphics->text scale (Anew) and offset (B) and whether or not
+% we are done.
+% Note, the mysterious .99999 is magic juju which is supposed to ward
+% off the possibility that floating point errors would cause this
+% routine to return the old A and yet claim not-done.
+/Mlp1 { % s A ct wt cg wg Mlp1 Anew B done?
+ 5 index % s A ct wt cg wg s
+ 3 index sub % s A ct wt cg wg s-wt
+ 5 index % s A ct wg cg wg s-wt A
+ 2 index mul % s A ct wg cg wg s-wt A*wg
+ 1 index % s A ct wg cg wg s-wt A*wg s-wt
+ le % s A ct wg cg wg s-wt fits?
+ 1 index % s A ct wg cg wg s-wt fits? s-wt
+ 0 le % s A ct wg cg wg s-wt fits? impossible?
+ or % s A ct wg cg wg s-wt done?
+ dup % s A ct wg cg wg s-wt done? done?
+ not % s A ct wg cg wg s-wt done? notdone?
+ { % s A ct wg cg wg s-wt done? (not done case)
+ 1 index % s A ct wg cg wg s-wt done? s-wt
+ 3 index div % s A ct wg cg wg s-wt done? (s-wt)/wg
+ .99999 mul % s A ct wg cg wg s-wt done? Anew
+ 8 -1 roll % s ct wg cg wg s-wt done? Anew A
+ pop % s ct wg cg wg s-wt done? Anew
+ 7 1 roll % s Anew ct wg cg wg s-wt done?
+ }
+ if % s Anew ct wg cg wg s-wt done?
+ 8 -1 roll % Anew ct wg cg wg s-wt done? s
+ 2 div % Anew ct wg cg wg s-wt done? s/2
+ 7 -2 roll % Anew cg wg s-wt done? s/2 ct wg
+ pop sub % Anew cg wg s-wt done? s/2-ct
+ 5 index % Anew cg wg s-wt done? s/2-ct Anew
+ 6 -3 roll % Anew done? s/2-ct Anew cg wg s-wt
+ pop pop % Anew done? s/2-ct Anew cg
+ mul sub % Anew done? s/2-ct-Anew*cg
+ exch % Anew B done?
+} bind def
+
+
+% The following are the workings of the tick, axes and plot labels.
+% NOTE a possible source of confusion is that for xticks ie tickmarks on
+% the x axis we keep y information and vice versa for yticks
+%
+% When Minner is found then
+%
+% assumes that box starts at zero on the left lower side
+%
+% 0) if outflag = 1 then intop = 0, inrht = 0 outflag = 0
+% 1) Save intop largest top of box
+% 2) Save inrht largest rht of box
+% 3) set inflag notifies that inner marks are present
+%
+% When Mouter is found then
+%
+% if inflag is set then
+% 1) get vecx and vecy off the stack (points in direcn to move)
+% 2) vecx < 1 xadrht = inrht*abs(vecx)
+% 3) vecx > 1 xadlft = inrht*abs(vecx)
+% 4) vecy < 1 yadtop = intop*abs(vecy)
+% 5) vecy > 1 yadbot = intop*abs(vecy)
+% 6) set outflag = 1
+% 7) clear inflag, inrht, intop
+% guaranteed to be zero if no inner is present??
+%
+%
+% These all have effects in Mrotsboxa and Mrotshowa
+% check inflag and if set
+%
+% 1) increase top of bbox by yadtop
+% 2) decrease bot of bbox by yadbot
+% 3) increase rht of bbox by xadrht
+% 4) increase lft of bbox by xadlft
+% 5) clear outflag, yadtop, yadbot,
+% xadrht, xadlft
+%
+%/
+
+/intop 0 def
+/inrht 0 def
+/inflag 0 def
+/outflag 0 def
+/xadrht 0 def
+/xadlft 0 def
+/yadtop 0 def
+/yadbot 0 def
+
+% This saves the top right corner of the bounding box as a side effect
+% This is to allow the adjustment of text placed with Mouter so that
+% it misses the Minner text. It is assumed that the ang is 0
+% in the same way it is assumed that the text of Mouter is 0 or 90
+%
+/Minner { % [(str)] gx gy sx sy ang Minner [(str)] gx gy sx sy ang
+ outflag % do a bit of tidying up if necessary
+ 1
+ eq
+ {
+ /outflag 0 def
+ /intop 0 def
+ /inrht 0 def
+ } if
+ 5 index % [(str)] gx gy sx sy ang [(str)]
+ gsave
+ Mtmatrix setmatrix
+ Mvboxa pop % [(str)] gx gy sx sy ang xlow ylow xhigh yhigh
+ grestore
+ 3 -1 roll % [(str)] gx gy sx sy ang xlow xhigh yhigh ylow
+ pop % [(str)] gx gy sx sy ang xlow xhigh yhigh
+ dup % [(str)] gx gy sx sy ang xlow xhigh yhigh yhigh
+ intop % is intop smaller than yhigh ?
+ gt
+ {
+ /intop % update if it is
+ exch def
+ }
+ { pop } % pop if it is not
+ ifelse % [(str)] gx gy sx sy ang xlow xhigh
+ dup % [(str)] gx gy sx sy ang xlow xhigh xhigh
+ inrht % is inrht smaller than xhigh
+ gt
+ {
+ /inrht % update if it is
+ exch def
+ }
+ { pop } % pop if it is no
+ ifelse % [(str)] gx gy sx sy ang xlow
+ pop % [(str)] gx gy sx sy ang
+ /inflag % set the inflag
+ 1 def
+} bind def
+
+% This takes two number off the stack and uses them as a vector in graphics
+% coordinates which points in the direction in which the Mouter text is to move
+% it calculates the bouding box adjustments yadtop yadbot xadrht and xadlft
+% these are in Mboxout to adjust the bounding box to compensate.
+/Mouter { % vecx vecy Mouter ..
+ /xadrht 0 def % reset everything
+ /xadlft 0 def
+ /yadtop 0 def
+ /yadbot 0 def
+ inflag % was there an inflag ?
+ 1 eq
+ {
+ dup % vecx vecy vecy
+ 0 lt
+ {
+ dup % vecx vecy vecy
+ intop % vecx vecy vecy intop
+ mul
+ neg % vecx vecy -vecy*intop
+ /yadtop % make into yadtop
+ exch def % vecx vecy
+ } if
+ dup % vecx vecy vecy
+ 0 gt
+ {
+ dup % vecx vecy vecy
+ intop % vecx vecy vecy intop
+ mul % vecx vecy vecy*intop
+ /yadbot % make into yadbot
+ exch def % vecx vecy
+ }
+ if
+ pop % vecx
+ dup % vecx vecx
+ 0 lt
+ {
+ dup % vecx vecx
+ inrht % vecx vecx inrht
+ mul
+ neg % vecx -vecx*inrht
+ /xadrht % make into xadrht
+ exch def % vecx
+ } if
+ dup % vecx vecx
+ 0 gt
+ {
+ dup % vecx vecx
+ inrht % vecx vecx inrht
+ mul % vecx vecx*inrht
+ /xadlft % make into xadlft
+ exch def
+ } if
+ pop %
+ /outflag 1 def % set outflag
+ }
+ { pop pop} %
+ ifelse
+ /inflag 0 def
+ /inrht 0 def
+ /intop 0 def
+} bind def
+
+%
+% This adjusts the bounding box to account for adjacent text
+% This allows the two text strings to avoid each other
+% current matrix is the text matrix
+/Mboxout { % tlx tly thx thy Mboxout new_tlx new_tly new_thx new_thy
+ outflag % do nothing unless Minner was found
+ 1
+ eq
+ {
+ 4 -1
+ roll % tly thx thy tlx
+ xadlft
+ leadjust
+ add % tly thx thy tlx xadlft+lead
+ sub % tly thx thy tlx_new
+ 4 1 roll % tlx_new tly thx thy
+ 3 -1
+ roll % tlx_new thx thy tly
+ yadbot % tlx_new thx thy tly yadbot
+ leadjust % tlx_new thx thy tly yadbot lead
+ add % tlx_new thx thy tly yadbot+lead
+ sub % tlx_new thx thy tly_new
+ 3 1
+ roll % tlx_new tly_new thx thy
+ exch % tlx_new tly_new thy thx
+ xadrht % tlx_new tly_new thy thx xadrht
+ leadjust % tlx_new tly_new thy thx xadrht lead
+ add % tlx_new tly_new thy thx xadrht+lead
+ add % tlx_new tly_new thy thx_new
+ exch % tlx_new tly_new thx_new thy
+ yadtop % tlx_new tly_new thx_new thy yadtop
+ leadjust % tlx_new tly_new thx_new thy yadtop lead
+ add % tlx_new tly_new thx_new thy yadtop+lead
+ add % tlx_new tly_new thx_new thy_new
+ /outflag 0 def % reset everything to 0
+ /xadlft 0 def
+ /yadbot 0 def
+ /xadrht 0 def
+ /yadtop 0 def
+ } if
+} bind def
+
+
+/leadjust {
+ (m) stringwidth pop
+ .5 mul
+} bind def
+
+
+% The offsets sx and sy refer to the graphics coordinate system
+% thus they must be altered if a rotation has taken place.
+% We must also change the bounding box computations for Minner
+%
+/Mrotcheck { % sx sy ang Mrotcheck new_sx new_sy ang
+ dup
+ 90
+ eq
+ {
+%
+% Mouter only applies to strings which are either at 0 or 90
+% sort out the box adjust factors
+%
+% xadrht -> yadbot
+% xadlft -> yadtop
+% yadtop -> xadrht
+% yadbot -> xadlft
+ yadbot
+ /yadbot
+ xadrht
+ def
+ /xadrht
+ yadtop
+ def
+ /yadtop
+ xadlft
+ def
+ /xadlft
+ exch
+ def
+ }
+ if
+ dup % sx sy ang ang
+ cos % sx sy ang Cos
+ 1 index % sx sy ang Cos ang
+ sin % sx sy ang Cos Sin
+ Checkaux % new_sx sx sy ang
+ dup % new_sx sx sy ang ang
+ cos % new_sx sx sy ang Cos
+ 1 index % new_sx sx sy ang Cos ang
+ sin neg % new_sx sx sy ang Cos -Sin
+ exch % new_sx sx sy ang -Sin Cos
+ Checkaux % new_sx new_sy sx sy ang
+ 3 1 roll % new_sx new_sy ang sx sy
+ pop pop % new_sx new_sy ang
+} bind def
+
+%
+% Checkaux is an auxilliary function for Mrotcheck it multiplies a
+% row vector by a column vector
+%
+/Checkaux { % r1 r2 dumy c1 c2 Checkaux r1 r2 dumy r1*c1+r2*c2
+ 4 index % r1 r2 dumy c1 c2 r1
+ exch % r1 r2 dumy c1 r1 c2
+ 4 index % r1 r2 dumy c1 r1 c2 r2
+ mul % r1 r2 dumy c1 r1 c2*r2
+ 3 1 roll % r1 r2 dumy c2*r2 c1 r1
+ mul add % r1 r2 dumy c2*r2+c1*r1
+ 4 1 roll % c2*r2+c1*r1 r1 r2 dumy
+} bind def
+
+%
+% Mboxrot converts the bounding box back from the rotated coordinate
+% system to the Mgmatrix system to compensate for a rotation
+% It has the opposite functionality of Mrotcheck
+% This is not the most neatest or most efficient implementation but it works
+%
+/Mboxrot { % tlx thx tly thy Mboxrot new_tlx new_thx new_tly new_thy
+ Mrot
+ 90 eq
+ {
+% old tlx thx tly thy
+% new -thy -tly tlx thx
+%
+ brotaux % tlx thx -thy -tly
+ 4 2
+ roll % -thy -tly tlx thx
+ }
+ if
+ Mrot
+ 180 eq
+ {
+% old tlx thx tly thy
+% new -thx -tlx -thx -tly
+%
+ 4 2
+ roll % tly thy tlx thx
+ brotaux % tly thy -thx -tlx
+ 4 2
+ roll % -thx -tlx tlx thy
+ brotaux % -thx -tlx -thy -tly
+ }
+ if
+ Mrot
+ 270 eq
+ {
+% old tlx thx tly thy
+% new tly thy -thx -tlx
+%
+ 4 2
+ roll % tly thy tlx thx
+ brotaux % tly thy -thx -tlx
+ }
+ if
+} bind def
+
+%
+% auxilliary function negate and reverse
+/brotaux { % x y boxrotaux -y -x
+ neg
+ exch
+ neg
+} bind def
+
+%
+% Mabsproc takes a measurement in the default user units and converts
+% it to the present units. This allows absolute thickness and dashing
+% to work. It works by using a {0, x} vector and using the RMS of the result.
+/Mabsproc { % abs thing Mabsproc
+ 0
+ matrix defaultmatrix
+ dtransform idtransform
+ dup mul exch
+ dup mul
+ add sqrt
+} bind def
+
+%
+% Mabswid allows the linewidth to be specified in absolute coordinates
+% It does this by recording the graphics transformation matrix at the
+% begining of the plot.
+% This will break if the scaling in the x and y directions is
+% different. This is the case if Mnodistort is false
+%
+/Mabswid { %abswid Mabswid
+ Mabsproc
+ setlinewidth
+} bind def
+
+% Mabsdash allows the dashing pattern to be specified in absolute coordinates
+% It does this by recording the graphics transformation matrix at the
+% begining of the plot.
+% This will break if the scaling in the x and y directions is
+% different. This is the case if Mnodistort is false
+%
+/Mabsdash { %[d1 d2 d3 .. ] off Mabsdash
+ exch % off [d1 d2 d3 ..]
+ [ % off [d1 d2 d3 ..]
+ exch % off [ [d1 d2 d3 ..]
+ {
+ Mabsproc
+ }
+ forall
+ ] % off [ fact*d1 fact*d2 fact*d3 .. ]
+ exch % [ nd1 nd2 nd3 .. ] off
+ setdash
+} bind def
+
+%MBeginOrig start coordinates in user coordinates
+/MBeginOrig { Momatrix concat} bind def
+
+%MEndOrig start coordinates in user coordinates
+/MEndOrig { Mgmatrix setmatrix} bind def
+
+/sampledsound where
+{ pop}
+{ /sampledsound { % str rate nsamp bs proc bool nchan
+ exch
+ pop % str rate nsamp bs proc nchan
+ exch % str rate nsamp bs nchan proc
+ 5 1 roll % str proc rate nsamp bs nchan
+ mul
+ 4 idiv % str proc rate nsamp bs*nchan/4
+ mul % str proc rate nsamp*bs*nchan/4
+ 2 idiv % str proc rate nbytes
+ exch pop % str proc nbytes
+ exch % str nbytes proc
+ /Mtempproc exch def
+ { Mtempproc pop}
+ repeat
+ } bind def
+} ifelse
+
+%
+% now simple conversion of cmykcolor to rgbcolor
+% subtract k and then take complements
+/setcmykcolor where
+{ pop}
+{ /setcmykcolor { % c m y k
+ 4 1
+ roll % k c m y
+ [ % k c m y [
+ 4 1
+ roll % k [ c m y
+ ] % k [ c m y ]
+ {
+ 1 index % k elem k
+ sub % k elem-k
+ 1
+ sub neg % k 1-(elem-k)
+ dup
+ 0
+ lt
+ {
+ pop
+ 0
+ }
+ if
+ dup
+ 1
+ gt
+ {
+ pop
+ 1
+ }
+ if
+ exch % 1-(elem-k) k
+ } forall % r g b k
+ pop
+ setrgbcolor
+} bind def
+} ifelse
+
+/Mcharproc % max
+{
+ currentfile
+ (x)
+ readhexstring
+ pop % max val
+ 0 get
+ exch % val max
+ div % nval
+} bind def
+
+/Mshadeproc % max ncols
+{
+ dup % max ncols ncols
+ 3 1
+ roll % ncols max ncols
+ { % ncols max
+ dup % ncols max max
+ Mcharproc % ncols max val
+ 3 1
+ roll % v1.. ncols max
+ } repeat
+ 1 eq
+ {
+ setgray
+ }
+ {
+ 3 eq
+ {
+ setrgbcolor
+ }
+ {
+ setcmykcolor
+ } ifelse
+ } ifelse
+} bind def
+
+/Mrectproc % x0 x1 y0 y1
+{
+ 3 index % x0 x1 y0 y1 x0
+ 2 index % x0 x1 y0 y1 x0 y0
+ moveto % x0 x1 y0 y1
+ 2 index % x0 x1 y0 y1 x1
+ 3 -1
+ roll % x0 x1 y1 x1 y0
+ lineto % x0 x1 y1
+ dup % x0 x1 y1 y1
+ 3 1
+ roll % x0 y1 x1 y1
+ lineto % x0 y1
+ lineto
+ fill
+} bind def
+
+/Mcolorimage % nx ny depth matrix proc bool ncols
+{
+ 7 1
+ roll % ncols nx ny depth matrix proc bool
+ pop
+ pop
+ matrix
+ invertmatrix
+ concat % ncols nx ny depth
+ 2 exch exp % ncols nx ny 2^depth
+ 1 sub % ncols nx ny max
+ 3 1 roll % ncols max nx ny
+ 1 1 % ncols max nx ny 1 1
+ 2 index % ncols max nx ny 1 1 ny
+ { % ncols max nx ny iy
+ 1 1 % ncols max nx ny iy 1 1
+ 4 index % ncols max nx ny iy 1 1 nx
+ { % ncols max nx ny iy ix
+ dup % ncols max nx ny iy ix ix
+ 1 sub % ncols max nx ny iy ix x0
+ exch % ncols max nx ny iy x0 x1
+ 2 index % ncols max nx ny iy x0 x1 iy
+ dup % ncols max nx ny iy x0 x1 iy iy
+ 1 sub % ncols max nx ny iy x0 x1 iy y0
+ exch % ncols max nx ny iy x0 x1 y0 y1
+ 7 index % ncols max nx ny iy x0 x1 y0 y1 max
+ 9 index % ncols max nx ny iy x0 x1 y0 y1 max ncols
+ Mshadeproc % ncols max nx ny iy x0 x1 y0 y1
+ Mrectproc % max nx ny iy
+ } for % x loop
+ pop % max nx ny
+ } for % y loop
+ pop pop pop pop
+} bind def
+
+/Mimage % nx ny depth matrix proc
+{
+ pop
+ matrix
+ invertmatrix
+ concat % nx ny depth
+ 2 exch exp % nx ny 2^depth
+ 1 sub % nx ny max
+ 3 1 roll % max nx ny
+ 1 1 % max nx ny 1 1
+ 2 index % max nx ny 1 1 ny
+ { % max nx ny iy
+ 1 1 % max nx ny iy 1 1
+ 4 index % max nx ny iy 1 1 nx
+ { % max nx ny iy ix
+ dup % max nx ny iy ix ix
+ 1 sub % max nx ny iy ix x0
+ exch % max nx ny iy x0 x1
+ 2 index % max nx ny iy x0 x1 iy
+ dup % max nx ny iy x0 x1 iy iy
+ 1 sub % max nx ny iy x0 x1 iy y0
+ exch % max nx ny iy x0 x1 y0 y1
+ 7 index % max nx ny iy x0 x1 y0 y1 max
+ Mcharproc % max nx ny iy x0 x1 y0 y1 val
+ setgray % max nx ny iy x0 x1 y0 y1
+ Mrectproc % max nx ny iy
+ } for % x loop
+ pop % max nx ny
+ } for % y loop
+ pop pop pop
+} bind def
+
+/Ma /Mabswid load def
+/a /arc load def
+/c /curveto load def
+/C /curveto load def
+/d /setdash load def
+/f /fill load def
+/F /fill load def
+/g /setgray load def
+/gr /grestore load def
+/gs /gsave load def
+/k /stroke load def
+/l /lineto load def
+/L /lineto load def
+/lw /setlinewidth load def
+/m /moveto load def
+/n /newpath load def
+/p /gsave load def
+/P /grestore load def
+/r /setrgbcolor load def
+/s /stroke load def
+/w /setlinewidth load def
+/beginmath /MBeginOrig load def
+/endmath /MEndOrig load def
+
+end
diff --git a/macros/latex209/contrib/geomsty/mathfig.1.orig b/macros/latex209/contrib/geomsty/mathfig.1.orig
new file mode 100644
index 0000000000..6ebb691fcb
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/mathfig.1.orig
@@ -0,0 +1,46 @@
+.TH mathfig 1 "Jul 1 1992" "Geometry Center"
+.SH NAME
+mathfig \- process Mathematica files for inclusion in LaTeX documents
+.SH SYNOPSIS
+mathfig [ -d directory ] [ -i initfile ] files
+.SH DESCRIPTION
+.PP
+Mathfig reads one or more Mathematica source files, invokes
+Mathematica on them, and creates PostScript output, filtering out
+labels and putting them in a separate file.
+.PP
+Any number of files can be given. Their names are expected to end with .m,
+and the output files are given the same names with the .m replaced
+by .ps and .lab. These files can then be included in a LaTeX document
+using the style file geompsfi.sty (see below).
+.PP
+Mathfig uses the following auxiliary programs:
+.TP
+geomfix
+A shell script that compresses the .ps file produced by Mathematica
+and tacks a header on to it (similar to psfix).
+.TP
+mathlabels
+A perl script that filters out the labels.
+.SH OPTIONS
+.TP
+-d directory
+File names are interpreted relative to the specified directory.
+.TP
+-i initfile
+The specified initial file is read before each of the remaining input files.
+.SH SEE ALSO
+"Mathematica Figures in LaTeX using mathfig",
+by Silvio Levy, available from The
+Geometry Center (and distributed with mathfig in the file
+"mathfigman.tex"). This document describes this program in more detail,
+and also the style file geompsfi.sty, needed for inclusion of
+mathfig's output files in your LaTeX document.
+.SH AUTHOR
+.nf
+Silvio Levy
+The Geometry Center
+1300 South Second Street
+Minneapolis, MN 55454
+email: levy@geom.umn.edu
+.fi
diff --git a/macros/latex209/contrib/geomsty/mathfig.orig b/macros/latex209/contrib/geomsty/mathfig.orig
new file mode 100644
index 0000000000..35c2110219
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/mathfig.orig
@@ -0,0 +1,72 @@
+#!/bin/sh
+#
+# This is mathfig, Copyright 1992 Silvio Levy
+# $Header: /u/levy/texts/geombook/RCS/mathfig.orig,v 1.3 1994/11/19 05:07:24 levy Exp $
+#
+umask 002
+
+# The following lines give the locations of the auxiliary scripts
+# geomfix and mathlabels.
+geomfix=geomfix
+mathlabels=mathlabels
+
+init=""
+verbose="False"
+
+if test $# -eq 0
+then
+ echo "Usage: $0 [-v] [-d directory] [-i initfile] filenames"; exit;
+fi
+
+while test $# -gt 0
+do
+ case "$1" in
+ "-d")
+ if test $# -lt 3
+ then
+ echo "Usage: $0 [-v] [-d directory] [-i initfile] filenames"; exit;
+ fi;
+ if test -d "$2" && test -w "$2" && test -r "$2"
+ then
+ cd "$2"; shift; shift ;
+ else
+ echo "Directory $2 not found or permissions wrong"; exit;
+
+ fi;;
+ "-i")
+ if test $# -lt 3
+ then
+ echo "Usage: $0 [-v] [-d directory] [-i initfile] filenames"; exit;
+ fi;
+ init="$2"; shift; shift;;
+ "-v") verbose="True"; shift;;
+ "-"*)
+ echo "Usage: $0 [-v] [-d directory] [-i initfile] filenames"; exit;;
+ *) break;
+ esac
+done
+
+for i in "$@"
+do
+ pref=`echo $i | sed 's/\.m$//'`
+ /bin/rm -f $pref.ps $pref.lab
+
+ math -batchoutput -run 'Off[General::spell1]' << EOF
+ (\$Def[x_?NumberQ,_] := ToString[x];
+ \$Def[__,default_] := default;
+ If["$init"!="", If[$verbose, Print["Reading $init..."]]; Get["$init"]];
+ If[$verbose,Print["Reading $pref.m..."]]; picture=Get["$pref.m"];
+ Display[StringJoin[
+ "! $geomfix -width ",
+ \$Def[\$width,"5"], " -height ", \$Def[\$height,"2"],
+ " -lmarg 0 -rmarg 0 -tmarg 0 -bmarg 0 ",
+ "| $mathlabels $pref.lab ", \$Def[\$xlo,"OK"], " ",
+ \$Def[\$xhi,"OK"], " ", \$Def[\$ylo,"OK"], " ",
+ \$Def[\$yhi,"OK"], "> $pref.ps"],
+ picture];)
+EOF
+ if test `ls -l $pref.lab | awk '{print $4;}'` -eq 0
+ then
+ /bin/rm $pref.lab
+ fi
+done
diff --git a/macros/latex209/contrib/geomsty/mathlabels.orig b/macros/latex209/contrib/geomsty/mathlabels.orig
new file mode 100644
index 0000000000..abf52ad1f6
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/mathlabels.orig
@@ -0,0 +1,136 @@
+#!/usr/local/bin/perl
+#
+# This is mathlabels, Copyright 1992 Silvio Levy
+# $Header: /u/levy/RCS/mathlabels.orig,v 1.3 1994/09/19 02:08:15 levy Exp $
+#
+
+#
+# first argument: file name for labels
+# second to fifth arguments: xlo, xhi, ylo, yhi (to fix the aspect ratio)
+# use OK for these arguments if no changes need to be made
+#
+
+die "$0 file.lab xlo xhi ylo yho < file_orig.ps > file.ps\n (use OK"
+ . " for the last four args)\n"
+ if ($#ARGV != 4);
+
+$filename=$ARGV[0]; shift;
+$xlo=$ARGV[0]; shift;
+$xhi=$ARGV[0]; shift;
+$ylo=$ARGV[0]; shift;
+$yhi=$ARGV[0]; shift;
+
+die "Can't open $filename" unless open(labels,">$filename");
+
+#
+# get various parameters output by psfix
+#
+while (<>) {
+ print;
+ last if (/^MathPictureStart/);
+ ($trash,$lmarg)=split(' ') if (/\/Mlmarg/);
+ ($trash,$rmarg)=split(' ') if (/\/Mrmarg/);
+ ($trash,$bmarg)=split(' ') if (/\/Mbmarg/);
+ ($trash,$tmarg)=split(' ') if (/\/Mtmarg/);
+ ($trash,$width)=split(' '), $width*=72 if (/\/Mwidth/);
+ ($trash,$height)=split(' '), $height*=72 if (/\/Mheight/);
+ ($trash,$nodistort)=split(' ') if (/\/Mnodistort/);
+}
+
+&doit(0,0,$width,$height);
+
+sub doit {
+local($XLO,$YLO,$XHI,$YHI)=@_; # target bounding box
+local($Ax,$Bx,$Ay,$By);
+
+line:
+while (<>) {
+
+return if (/^MathSubEnd/);
+if (/ MathSubStart/) {
+ ($Xlo,$Ylo,$Xhi,$Yhi) = split(' ');
+ print;
+ &doit($Xlo*$Ax+$Bx,$Ylo*$Ay+$By,$Xhi*$Ax+$Bx,$Yhi*$Ay+$By);
+}
+
+#
+# look between the lines
+#
+# % Scaling calculations
+# ... [
+# ] MathScale
+#
+# to mimic the action of MathScale
+#
+ if (/% Scaling calculations/) {
+ $collecting=1;
+ $npts=-2;
+ }
+ if ($collecting) { #[
+ if (/] MathScale/) {
+#
+# do the calculations
+#
+ $collecting=0;
+ $i=0;
+ while ($i<$npts-2) {
+ print($point[$npts]);
+ }
+ ($trash,$gxlow,$gylow) = split(' ',$point[$npts-2]);
+ $gxlow=$xlo unless ($xlo=~/OK/);
+ $gylow=$ylo unless ($ylo=~/OK/);
+ print("[ $gxlow $gylow 0 0 ]\n");
+ ($trash,$gxhigh,$gyhigh) = split(' ',$point[$npts-1]);
+ $gxhigh=$xhi unless ($xhi=~/OK/);
+ $gyhigh=$yhi unless ($yhi=~/OK/);
+ print("[ $gxhigh $gyhigh 0 0 ]\n");
+ ($Ax,$Ay,$Bx,$By) =
+ &findpars($XLO,$YLO,$XHI,$YHI,$gxlow,$gylow,$gxhigh,$gyhigh);
+ print;
+ } else {
+#
+# put scaling lines into an array
+#
+ if ($npts>=0) {
+ if (!/Msboxa/ && !/Mrotsboxa/) {
+ $point[$npts] = $_;
+ $npts++;
+ }
+ } else {
+ print;
+ $npts++;
+ }
+ }
+ next line;
+ }
+#
+# issue labeling command
+#
+ if (/\[\((.*)\)\] *([^ ]*) *([^ ]*) *([^ ]*) *([^ ]*) *(.*Mrotshowa|Mshowa)/) {
+ $_=$1;
+ $xpos=$2*$Ax+$Bx;
+ $ypos=$3*$Ay+$By;
+ $xrelpos=$4;
+ $yrelpos=$5;
+ s/\\([\\()])/$1/g;
+ printf labels ("\\setlabel{%s}{%f}{%f}{%f}{%f}\n",
+ $_,$xpos,$ypos,$xrelpos,$yrelpos);
+ next line;
+ }
+ print;
+}
+}
+
+sub findpars {
+ local($xlow,$ylow,$xhigh,$yhigh,$gxlow,$gylow,$gxhigh,$gyhigh)=@_;
+ local ($Ax,$Ay,$Bx,$By);
+ $Ax=($xhigh-$xlow)/($gxhigh-$gxlow);
+ $Ay=($yhigh-$ylow)/($gyhigh-$gylow);
+ if ($nodistort=~/true/) {
+ $Ax=$Ay if ($Ax>$Ay);
+ $Ay=$Ax if ($Ay>$Ax);
+ }
+ $Bx=(($xlow+$xhigh)-($gxlow+$gxhigh)*$Ax)/2;
+ $By=(($ylow+$yhigh)-($gylow+$gyhigh)*$Ay)/2;
+ return($Ax,$Ay,$Bx,$By);
+}
diff --git a/macros/latex209/contrib/geomsty/multicol.sty b/macros/latex209/contrib/geomsty/multicol.sty
new file mode 100644
index 0000000000..6313e7660a
--- /dev/null
+++ b/macros/latex209/contrib/geomsty/multicol.sty
@@ -0,0 +1,525 @@
+%%
+%% This is file `multicol.sty', generated
+%% on <1993/1/31> with the docstrip utility (2.0r).
+%%
+%% The original source files were:
+%%
+%% multicol.doc (with options: `style,check,marktrace')
+%%
+%% Copyright (C) 1989-1992 by Frank Mittelbach. All rights reserved.
+%%
+%% This file is part of the multicol package.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% You are not allowed to change this file. You may however copy
+%% this file to a file with a different name and then change the copy
+%% if you obey the restrictions on file changes described in
+%% readme.mz.
+%%
+%% You are NOT ALLOWED to distribute this file alone. You are NOT
+%% ALLOWED to take money for the distribution or use of this file (or
+%% a changed version) except for a nominal charge for copying etc.
+%%
+%% You are allowed to distribute this file under the condition that
+%% it is distributed together with all files mentioned in readme.mz1.
+%%
+%% If you receive only some of these files from someone, complain!
+%%
+%% However, if these files are distributed by established suppliers
+%% as part of a complete TeX distribution, and the structure of the
+%% distribution would make it difficult to distribute the whole set
+%% of files, *those parties* are allowed to distribute only some of
+%% the files provided that it is made clear that the user will get a
+%% complete distribution-set upon request to that supplier (not me).
+%% Notice that this permission is not granted to the end user.
+%%
+%%
+%% For error reports in case of UNCHANGED versions see readme.mz
+%%
+%%
+\def\fileversion{v1.4m}
+\def\filedate{92/09/04}
+\def\docdate {92/09/04}
+
+%% \CheckSum{1101}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%% Style-option `multicol' to use with LaTeX v2.09
+%% Copyright (C) 1989-1992 Frank Mittelbach, all rights reserved.
+\@ifundefined{mult@cols}{}{\endinput}
+\typeout{Style option: `multicol'
+ \fileversion\space <\filedate> (FMi)}
+\typeout{English documentation
+ \@spaces\@spaces\space<\docdate> (FMi)}
+\def\multicols#1{\col@number#1\relax
+ \ifnum\col@number<\tw@
+ \@warning{Using `\number\col@number'
+ columns doesn't seem a good idea.^^J
+ I therefore use two columns instead}%
+ \col@number\tw@ \fi
+ \ifnum\col@number>5
+ \@warning{Current implementation doesn't
+ support more than five columns.^^J
+ I therefore use five columns instead}%
+ \col@number5 \fi
+ \@ifnextchar[\mult@cols{\mult@cols[]}}
+\def\mult@cols[#1]{\@ifnextchar[%
+ {\mult@@cols{#1}}%
+ {\mult@@cols{#1}[\premulticols]}}
+\def\mult@@cols#1[#2]{%
+ \par
+ \ifinner \@boxedmulticolstrue
+ \else
+ \ifnum \doublecol@number>\z@
+ \@boxedmulticolstrue
+ \fi
+ \fi
+ \ifnum\c@tracingmulticols>\z@
+ \typeout{^^J^^JStarting multicolumn
+ output with \the\col@number
+ \space columns%
+ \if@boxedmulticols\space
+ (boxed mode)\fi
+ \on@line:^^J}\fi
+ \enough@room{#2}%
+ {#1\par}\addvspace\multicolsep
+ \begingroup
+ \prepare@multicols
+ \if@boxedmulticols
+ \setbox\mult@box\vbox\bgroup
+ \penalty-\@M
+ \fi
+ \ignorespaces}
+\newif\if@boxedmulticols \@boxedmulticolsfalse
+\newbox\mult@box
+\def\enough@room#1{%
+ \if@boxedmulticols\else
+ \par
+ \bgroup\@nobreakfalse\addpenalty\z@\egroup
+ \page@free \pagegoal
+ \advance \page@free -\pagetotal
+ \ifnum \c@tracingmulticols>\z@
+ \typeout{Current page:}%
+ \message{\@spaces goal height=%
+ \the\pagegoal: used \the\pagetotal
+ \space -> free=\the\page@free}%
+ \typeout{\@spaces needed \the#1
+ (for \string#1)}\fi
+ \ifdim \page@free <#1\newpage \fi
+ \fi}
+\def\prepare@multicols{%
+ \multicol@leftmargin\@totalleftmargin
+ \@totalleftmargin\z@
+ \parshape\z@
+ \doublecol@number\col@number
+ \multiply\doublecol@number\tw@
+ \if@boxedmulticols
+ \let\l@kept@firstmark\kept@firstmark
+ \let\l@kept@botmark\kept@botmark
+ \global\let\kept@firstmark\@empty
+ \global\let\kept@botmark\@empty
+ \else
+ \nointerlineskip \null
+ \output{%
+ \global\setbox\partial@page\vbox
+ {%
+ \ifvoid\partial@page\else
+ \@latexerr{Error saving partial
+ page\on@line}%
+ {The part of the page before
+ the multicols environment was
+ nearly full with the result
+ that starting the environment
+ will produce an overfull
+ page. Some text may be lost!
+ Please increase \premulticols
+ either generally or for this
+ environment by specifying a
+ suitable value in the second
+ optional argument to the
+ multicols environment.}
+ \unvbox\partial@page
+ \box\last@line
+ \fi
+ \unvbox\@cclv
+ \global\setbox\last@line\lastbox
+ }%
+ \prep@keptmarks
+ \global\let\kept@topmark\firstmark
+ }\eject
+ \advance\@colroom-\ht\partial@page
+ \vsize\col@number\@colroom
+ \advance\vsize\c@collectmore\baselineskip
+ \output{\multi@column@out}%
+ \multiply\count\footins\col@number
+ \multiply\skip \footins\col@number
+ \reinsert@footnotes
+ \fi
+ \vbadness10001 \hbadness5000
+ \tolerance\multicoltolerance
+ \pretolerance\multicolpretolerance
+ \setemergencystretch\col@number\hsize
+ \set@floatcmds
+ \advance\baselineskip\multicolbaselineskip
+ \hsize\linewidth \advance\hsize\columnsep
+ \advance\hsize-\col@number\columnsep
+ \divide\hsize\col@number
+ \full@width\linewidth
+ \linewidth\hsize
+}
+\newdimen\multicol@leftmargin
+\def\endmulticols{\par
+ \if@boxedmulticols
+ \egroup
+ \setbox\@tempboxa\vsplit\mult@box to\z@
+ \balance@columns
+ \return@nonemptymark{first}\kept@firstmark
+ \return@nonemptymark{bot}\kept@botmark
+ \page@sofar
+ \global\let\kept@firstmark\l@kept@firstmark
+ \global\let\kept@botmark\l@kept@botmark
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Restore kept marks to%
+ ^^J first: \meaning\kept@firstmark%
+ ^^J bot\space\space:
+ \meaning\kept@botmark }%
+ \fi
+ \else
+ \bgroup\@nobreakfalse\addpenalty\z@\egroup
+ \output{\balance@columns@out}\eject
+ \ifvbox\partial@page\unvbox\partial@page\fi
+ \global\let\kept@firstmark\@empty
+ \global\let\kept@botmark\@empty
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Make kept marks empty}%
+ \fi
+ \fi
+ \@checkend{multicols}%
+ \endgroup
+ \if@boxedmulticols\else
+ \reinsert@footnotes
+ \fi
+ \global\c@unbalance\z@
+ \enough@room\postmulticols
+ \addvspace\multicolsep
+ \ifnum\c@tracingmulticols>\z@
+ \typeout{^^JEnding multicolumn
+ output%
+ \if@boxedmulticols
+ \space(boxed mode)\fi
+ .^^J^^J}\fi}
+\newcount\c@unbalance
+\newcount\c@collectmore
+\newcount\c@tracingmulticols
+\newcount\col@number
+\newcount\doublecol@number
+\newcount\multicoltolerance
+\newcount\multicolpretolerance
+\newdimen\full@width
+\newdimen\page@free
+\newdimen\premulticols
+\newdimen\postmulticols
+\newskip\multicolsep
+\newskip\multicolbaselineskip
+\newbox\partial@page
+\newbox\last@line
+\c@unbalance = 0
+\c@collectmore = 0
+\c@tracingmulticols = 0
+\col@number = 1
+\multicoltolerance = 9999
+\multicolpretolerance = -1
+\premulticols = 50pt
+\postmulticols= 20pt
+\multicolsep = 12pt plus 4pt minus 3pt
+\multicolbaselineskip=0pt
+\def\process@cols#1#2{\count@#1\relax
+ \loop #2%
+ \advance\count@\tw@
+ \ifnum\count@<\doublecol@number
+ \repeat}
+\def\page@sofar{%
+ \process@cols\z@{\wd\count@\hsize}%
+ \ifnum\c@tracingmulticols>\z@
+ \typeout{Column spec:
+ (\the\multicol@leftmargin\space -->
+ \the\full@width\space = \the\hsize
+ \space x \the\col@number)^^J}%
+ \fi
+\ifvmode\else\errmessage{Multicol Error}\fi
+ \moveright\multicol@leftmargin
+ \hbox to\full@width{%
+ \process@cols\tw@{\box\count@
+ \hss\vrule\@width\columnseprule\hss}%
+ \box\z@
+ \rlap{\phantom p}%
+}%
+}
+\def\reinsert@footnotes{\ifvoid\footins\else
+ \insert\footins{}\fi}
+\def\multi@column@out{%
+ \ifnum\outputpenalty <-\@Mi
+ \speci@ls \else
+ \splittopskip\topskip
+ \splitmaxdepth\maxdepth
+ \dimen@\@colroom
+ \divide\skip\footins\col@number
+ \ifvoid\footins \else
+ \advance\dimen@-\skip\footins
+ \advance\dimen@-\ht\footins \fi
+ \process@cols\tw@{\setbox\count@
+ \vsplit\@cclv to\dimen@
+ \set@keptmarks
+ \ifshr@nking
+ \setbox\count@\vbox to\dimen@
+ {\unvbox\count@\vfill}%
+ \fi
+ }%
+ \setbox\z@\vsplit\@cclv to\dimen@
+ \set@keptmarks
+ \ifshr@nking
+ \setbox\z@\vbox to\dimen@
+ {\unvbox\z@\vfill}%
+ \fi
+ \ifvoid\@cclv \else
+ \unvbox\@cclv
+ \penalty\outputpenalty
+ \ifvoid\footins\else
+ \@warning{I moved some lines to
+ the next page.^^J
+ \@spaces Footnotes on page
+ \thepage\space might be wrong}%
+ \fi
+ \ifnum \c@tracingmulticols>\thr@@
+ \hrule\allowbreak \fi
+ \fi
+ \ifx\@empty\kept@firstmark
+ \let\firstmark\kept@topmark
+ \let\botmark\kept@topmark
+ \else
+ \let\firstmark\kept@firstmark
+ \let\botmark\kept@botmark
+ \fi
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Use kept top
+ \space\space mark:
+ `\meaning\kept@topmark'%
+ ^^JUse kept first mark:
+ `\meaning\kept@firstmark'%
+ ^^JUse kept bot
+ \space\space mark:
+ `\meaning\kept@botmark'%
+ ^^JProduce first mark:
+ `\meaning\firstmark'%
+ ^^JProduce bot
+ \space\space mark:
+ `\meaning\botmark'}%
+ \fi
+ \setbox\@cclv\vbox{\unvbox\partial@page
+ \page@sofar}%
+ \@makecol\@outputpage
+ \global\let\kept@topmark\botmark
+ \global\let\kept@firstmark\@empty
+ \global\let\kept@botmark\@empty
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{(Re)Init top
+ \space\space mark:
+ `\meaning\kept@topmark'}%
+ \fi
+ \global\@colroom\@colht
+ \process@deferreds
+ \@whilesw\if@fcolmade\fi{\@outputpage
+ \global\@colroom\@colht
+ \process@deferreds}%
+ \ifnum\c@tracingmulticols>\@ne
+ \typeout{Colroom: \the\@colht\space
+ after float space removed
+ = \the\@colroom }\fi
+ \global\vsize\col@number\@colroom
+ \global\advance\vsize
+ \c@collectmore\baselineskip
+ \fi}
+\def\speci@ls{%
+ \typeout{Floats and marginpars not
+ allowed inside `multicols'
+ environment!}%
+ \unvbox\@cclv\reinsert@footnotes
+ \xdef\@freelist{\@freelist\@currlist}%
+ \gdef\@currlist{}}
+\def\process@deferreds{%
+ \@floatplacement
+ \@tryfcolumn\@deferlist
+ \if@fcolmade\else
+ \begingroup
+ \let\@tempb\@deferlist
+ \gdef\@deferlist{}%
+ \let\@elt\@scolelt
+ \@tempb \endgroup
+ \fi}
+\newif\ifshr@nking
+\def\raggedcolumns{%
+ \@bsphack\shr@nkingtrue\@esphack}
+\def\flushcolumns{%
+ \@bsphack\shr@nkingfalse\@esphack}
+\def\balance@columns@out{%
+ \setbox\mult@box\vbox{\unvbox\@cclv}%
+ \balance@columns
+ \global\vsize\@colroom
+ \global\advance\vsize\ht\partial@page
+ \unvbox\partial@page
+ \return@nonemptymark{first}\kept@firstmark
+ \return@nonemptymark{bot}\kept@botmark
+ \page@sofar}
+\def\balance@columns{%
+ \setbox\mult@box\vbox to\ht\mult@box{%
+ \unvbox\mult@box
+ \remove@discardable@items
+ }%
+ \get@keptmarks\mult@box
+ \splittopskip\topskip
+ \splitmaxdepth\maxdepth
+ \@tempdima\ht\mult@box
+ \advance\@tempdima\dp\mult@box
+ \divide\@tempdima\col@number
+ \count@\@tempdima
+ \divide\count@\baselineskip
+ \dimen@\count@\baselineskip
+ \advance\dimen@\topskip
+ \ifdim \dimen@ >\@tempdima
+ \advance\dimen@-\baselineskip
+ \fi
+ \advance\dimen@\c@unbalance\baselineskip
+ \ifnum\c@tracingmulticols>\@ne
+ \typeout{Balance columns\on@line:
+ \ifnum\c@unbalance=\z@\else
+ (off balance=\number\c@unbalance)\fi}%
+ \fi
+ \ifnum\dimen@<\topskip
+ \ifnum\c@tracingmulticols>\@ne
+ \typeout{Start value
+ \the\dimen@ \space ->
+ \the\topskip \space (corrected)}%
+ \fi
+ \dimen@\topskip
+ \fi
+ \vbadness\@M \loop
+ {\process@cols\@ne{\global\setbox\count@
+ \box\voidb@x}}%
+ \global\setbox\@ne\copy\mult@box
+ {\process@cols\thr@@{%
+ \global\setbox\count@
+ \vsplit\@ne to\dimen@
+ }}%
+ \boxmaxdepth\maxdepth
+ \global\setbox\@ne\vbox{\unvbox\@ne}%
+ \ifnum\c@tracingmulticols>\@ne
+ \message{\@spaces First column
+ = \the\ht\thr@@}\fi
+ \ifshr@nking \global\setbox\thr@@
+ \vbox{\unvbox\thr@@}%
+ \ifnum\c@tracingmulticols>\@ne
+ \message{ after shrinking
+ \the\ht\thr@@}\fi\fi
+ \ifnum\c@tracingmulticols>\@ne
+ \message{<> last column =
+ \the\ht\@ne^^J}%
+ \fi
+ \ifdim\ht\@ne >\ht\thr@@
+ \advance\dimen@\p@
+ \repeat
+ \dimen@\ht\thr@@
+ \ifdim\dimen@>\@colroom
+ \dimen@\@colroom
+ \fi
+ \process@cols\z@{\@tempcnta\count@
+ \advance\@tempcnta\@ne
+ \setbox\count@\vbox to\dimen@
+ {\unvbox\@tempcnta
+ \ifshr@nking\vfill\fi}}%
+}
+\@ifundefined{emergencystretch}
+ {\newdimen\emergencystretch}{}
+\def\setemergencystretch#1#2{%
+ \emergencystretch 4pt
+ \multiply\emergencystretch#1}
+
+\def\set@floatcmds{%
+ \let\@dblfloat\@dbflt
+ \def\end@dblfloat{\par
+ \vskip\z@\egroup
+ \ifnum\@floatpenalty<\z@
+ \@cons\@deferlist\@currbox
+ \fi
+ \ifnum\@floatpenalty=-\@Mii
+ \@esphack
+ \fi}}
+\def\kept@topmark{{}{}}
+\let\kept@firstmark\@empty
+\let\kept@botmark\@empty
+\def\return@nonemptymark#1#2{%
+ \ifx#2\@empty
+ \else
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Returned #1 mark: \meaning#2}%
+ \nobreak
+ \fi
+ \mark{#2}%
+ \nobreak
+ \fi}
+\def\get@keptmarks#1{%
+ \begingroup
+ \vbadness\@M
+ \setbox#1\copy#1%
+ \setbox#1\vsplit#1to\maxdimen
+ \set@keptmarks
+ \endgroup
+}
+\def\set@keptmarks{%
+ \ifx\kept@firstmark\@empty
+ \expandafter\gdef\expandafter
+ \kept@firstmark
+ \expandafter{\splitfirstmark}%
+ \ifnum\c@tracingmulticols>\tw@
+ \ifx\kept@firstmark\@empty\else
+ \typeout{Set kept first mark:
+ `\meaning\kept@firstmark'}%
+ \fi
+ \fi
+ \fi
+ \expandafter\def\expandafter\@tempa
+ \expandafter{\splitbotmark}%
+ \ifx\@tempa\@empty\else
+ \global\let\kept@botmark\@tempa
+ \ifnum\c@tracingmulticols>\tw@
+ \typeout{Set kept bot mark:
+ `\meaning\kept@botmark'}%
+ \fi
+ \fi}%
+\def\prep@keptmarks{%
+ \if@boxedmulticols \else
+ \get@keptmarks\partial@page
+ \fi}
+\def\remove@discardable@items{%
+ \unskip\unpenalty\unkern
+ \unskip\unpenalty\unkern
+ \unskip\unpenalty\unkern
+ \unskip\unpenalty\unkern
+}
+\endinput
+%%
+%% End of file `multicol.sty'.
diff --git a/macros/latex209/contrib/german b/macros/latex209/contrib/german
new file mode 120000
index 0000000000..e09f2a898c
--- /dev/null
+++ b/macros/latex209/contrib/german
@@ -0,0 +1 @@
+../../../language/german \ No newline at end of file
diff --git a/macros/latex209/contrib/ibmres-tex/ibmres.ltx b/macros/latex209/contrib/ibmres-tex/ibmres.ltx
new file mode 100644
index 0000000000..8f1f05096e
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/ibmres.ltx
@@ -0,0 +1,1628 @@
+% 10/08/93 %
+% IBM resume package documentation, /pub/ibmres-tex/ibmres.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Run LaTeX with the twopass option, and ignore error %
+% messages about underfull or overfull boxes. This file tells about %
+% using /pub/ibmres-tex/ibmres.sty and related sample files. %
+\documentstyle[titlepage,12pt,twoside]{article}
+%\newcommand{\newsection}[1]{\section*{#1}\markboth{\uppercase{#1}}{}}
+\newcommand{\newsection}[1]{\noindent{\large\bf #1}\par
+ \markboth{\uppercase{#1}}{}}
+\title{An Automated Approach to Applying for Employment}
+\author{George B. Leeman, Jr.\\
+IBM Thomas J. Watson Research Center\\
+P. O. Box 704\\
+Yorktown Heights, NY 10598\\
+USA\\
+\medskip
+Tel: (914) 784-7354\\
+\medskip
+EMAIL: leeman@watson.ibm.com (Internet)
+}
+\setcounter{secnumdepth}{2}\setcounter{tocdepth}{2}
+\date{October 8, 1993 -- Version 1.01}
+%\addtolength{\headsep}{5 ex}\addtolength{\textheight}{-5 ex}
+%\textheight 8.3125in\parindent 1.5 em
+\topmargin 0 pt\headheight 0 pt\headsep 0 pt\pagestyle{empty}\parindent 0 pt
+\parskip\baselineskip\oddsidemargin -0.1 in\evensidemargin 0 in
+\textheight 8.3125in\addtolength{\headsep}{5 ex}\parindent 1.5 em
+\begin{document}
+\sloppy\pagenumbering{roman}\maketitle\tableofcontents
+\newpage\pagenumbering{arabic}\pagestyle{headings}\headsep 6 ex\headheight 12 pt
+\makeatletter
+ \renewcommand{\@oddfoot}{{\rm October 8, 1993 \hfil Version 1.01}}
+ \renewcommand{\@evenfoot}{{\rm Version 1.01 \hfil October 8, 1993}}
+\makeatother
+\section{Introduction \label{intro}}
+This document describes a piece of software developed at IBM's Thomas J.
+Watson Research Center to aid in the employment submission process. The
+goals of the software and its documentation are:
+\begin{enumerate}
+\item to enable applicants to produce attractive resumes, abstracts,
+cover letters, and mailing labels with minimal effort;
+\item to provide advice on creating effective resumes, including the
+tailoring of applicant information to specific employers;
+\item to lay the foundation for automating the application process by
+making the initial phases entirely electronic.
+\end{enumerate}
+This work is based on the notion of a ``tagged file'' containing data and
+tags which identify the data; a simple example might be the string
+``\verb/George B. Leeman, Jr./'' marked with the tag ``\verb/\name/.''
+The applicant sends a tagged file to employers who accept such electronic
+input. However, the applicant may also create paper copies, if they are
+needed. One may use any formatter or word processor, but special support
+is provided for the two document preparation systems called \TeX\ and
+\LaTeX, which are extremely popular in universities, industry, and the
+publishing world. \TeX\ \cite{tex} is a sophisticated program capable of
+producing high-quality typesetting, especially for mathematical text.
+Its author, Professor Donald E. Knuth of Stanford University, is a
+remarkable individual whose brilliance, hard work, and gifted writing
+style have combined to make many long-lasting contributions to the
+technical community. Leslie Lamport, an internationally well-known
+computer scientist at Digital Equipment Corporation, has built a
+collection of \TeX\ commands called \LaTeX\ \cite{latex} which capture
+the document's structure and hence free the user from dealing with more
+primitive formatting commands.
+\subsection{Rationale \label{rat}}
+Not too long ago the technical publishing world was marked by much waste
+and duplication of effort. Researchers wrote complicated papers,
+typically by creating elaborate text files as input to sophisticated
+formatting programs. The latter produced impressive printed documents
+which were then sent to journals for publication. If accepted, the
+journal's typesetters then retyped the entire paper, essentially
+duplicating the work of the author! To make matters worse, the galley
+proofs had to be read by the authors, and errors in complicated
+mathematical text were inevitable.
+
+Today there are many journals which accept an electronic file of \LaTeX\
+commands plus text, and hence the data entry is done only once, by the
+author. The need to proofread journal galleys is almost eliminated.
+
+Unfortunately there is a procedure in which such waste and duplication
+still occurs: the application for employment. University students and
+others seeking jobs produce fancy paper resumes and send them to
+employers. The employers retype data about the applicants and forward
+them to possible hiring managers. A large portion of the data entry at
+the receiving end is duplicating the task already completed by the
+applicant. Furthermore, the applicant is likely to experience some delay
+between his request and a reply from the employer; with an electronic
+system the response could be quicker and sometimes instantaneous.
+
+The main point of this report is to discuss the first set of tools which
+will make the application process electronic. The applicant creates a
+tagged file; the form we recommend consists of \LaTeX\ commands and text,
+but in fact any formatter or word processor can be used. The interface
+for \LaTeX\ is designed so that the applicant does not have to know this
+system; he simply fills in the blanks to a template, much like
+completing a paper form. The file is shipped to employers who can use it
+for electronic processing, and the user can run \LaTeX\ on the same file
+to produce attractive paper copies for employers perferring that medium.
+We also describe other possible tagged files which do not make use of
+\LaTeX. This report gives details on the file creation process and
+provides tips for creating effective resumes, with the understanding that
+the recommendations are the opinions of the author and do not necessarily
+represent a statement of policy by the IBM Corporation.
+\subsection{The Legal Stuff \label{stuff}}
+Knuth and Lamport made a major decision to give \TeX\ and \LaTeX\ to the
+world; the source code is available to anyone free of charge. The
+systems have enjoyed wide exposure, because they are marvellously
+engineered. However, freedom to examine the code by sympathetic and
+interested users has also led to corrections and refinements of the
+systems. We are distributing this software to anyone at no cost, and we
+hope it will gain wide use in the employment submission process by {\em
+any} employer, not just IBM.
+
+This software resides on an Internet server, called
+software\-.watson\-.ibm\-.com, located at the IBM Thomas J. Watson
+Research Center in Yorktown Heights, NY. A user with access to the
+Internet may employ the File Transfer Protocol (FTP) to obtain files from
+such a server. Internet access may require a password; check with the
+systems administrator at your installation to determine the details.
+Typically the user logs onto the server remotely with a user name
+\verb/anonymous/ and requests files from the server. An annotated sample
+interaction appears in Appendix A. This process of file retrieval is
+called ``anonymous FTP.''
+
+The software described here is essentially a set of new \TeX\ commands
+(called ``macros''---see chapter 20 of \cite{tex}). It makes use of a
+modified form of a \LaTeX\ style file called resume.sty \cite{sty}
+written by Stephen Gildea, with enhancements by Jerry Leichter and this
+author. The file is available via anonymous FTP from several university
+servers.
+
+All software on the software.watson.ibm.com server is made available
+under the following terms and conditions. By downloading the software,
+you agree to abide by these terms and conditions with respect to this
+software.
+
+All FTP'able software is copyright International Business Machines
+Corporation. All rights reserved.
+
+\noindent{\bf RESEARCH SOFTWARE DISCLAIMER}
+
+AS EXPERIMENTAL, RESEARCH SOFTWARE, THIS SET OF \TeX\ MACROS AND
+DOCUMENTATION ARE PROVIDED FREE OF CHARGE ON AN ``AS IS'' BASIS WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE. IBM does not warrant that the functions contained in
+this program will meet the user's requirements or that the operation of
+these programs will be uninterrupted or error-free. Acceptance and use
+of this program constitutes the user's understanding that he will have no
+recourse to IBM for any actual or consequential damages, including, but
+not limited to, lost profits or savings, arising out of the use or
+inability to use this program, even if the user informs IBM of the
+possibility of such damages. The user of this program accepts the risk
+of any harm arising out of the use of this program, or the user shall not
+attempt to use this program for any purpose.
+
+\noindent{\bf USER AGREEMENT}
+
+BY ACCEPTANCE AND USE OF THIS SET OF \TeX\ MACROS THE USER AGREES TO THE
+FOLLOWING:
+\begin{enumerate}
+\item These macros are provided for the user's personal, non-commercial,
+experimental use, and the user is granted permission to copy these
+programs to the extent reasonably required for such use.
+\item All title, ownership and rights to these macros and any copies
+remain with IBM, irrespective of the ownership of the media on which the
+program resides.
+\item The user is permitted to create derivative works to this program.
+However, all copies of the program and its derivative works must contain
+the IBM copyright notice, the EXPERIMENTAL SOFTWARE DISCLAIMER and this
+USER AGREEMENT.
+\item By furnishing this program to the user, IBM does NOT grant either
+directly or by implication, estoppel, or otherwise any license under any
+patents, patent applications, trademarks, copyrights, or other rights
+belonging to IBM or to any third party, except as expressly provided
+herein.
+\item The user understands and agrees that this program and any
+derivative works are to be used solely for personal, non-commercial, and
+experimental uses and are not to be otherwise sold, reproduced, leased,
+transferred, or distributed, or be commercially exploited in any manner.
+\item IBM requests that the user supply to IBM a copy of any changes,
+enhancements, or derivative works which the user may create. The user
+grants IBM and its subsidiaries an irrevocable, nonexclusive, worldwide
+and royalty-free license to use, execute, reproduce, display, perform,
+prepare derivative works based upon, and distribute (INTERNALLY AND
+EXTERNALLY) copies of any and all such materials and derivative works
+thereof, and to sublicense others to do any, some, or all of the
+foregoing (including supporting documentation).
+
+Copies of these modifications should be sent to George B. Leeman Jr. at
+the electronic address watson.ibm.com.
+\end{enumerate}
+\subsection{How to Avoid Reading This Report \label{avoid}}
+In his wonderful user's guide and reference manual \cite{latex}, Lamport
+includes a section with a similar title, and for good reason. Many
+people prefer to learn a system by playing with it, rather than reading
+reports. For such individuals we provide sample files with slightly
+differing interfaces. The files all have the form
+\begin{center}
+\verb:/pub/ibmres-tex/:{\em file\_name}.{\em extension},
+\end{center}
+where the last four characters of the {\em file\_name} are
+\verb/_c_e/, \verb/_c_f/, \verb/_u_e/, or \verb/_u_f/.
+The letters \verb/c/ and \verb/u/ stand for ``commented'' and
+``uncommented,'' respectively, and the letters \verb/e/ and \verb/f/ mean
+``empty'' and ``filled in,'' respectively. The \verb/c/ files have
+comment lines, identified by a percent sign in column 1, to describe the
+commands which follow; the \verb/u/ files have few such lines. The
+\verb/e/ files have no data filled in, while the \verb/f/ files have
+filled-in examples. Thus all four are skeletons which can be modified,
+and you may choose the interface you prefer. Using a text editor you
+then enter appropriate text and give the new file a more sensible name.
+
+There are different sets of files, depending on how the user wants to
+generate his resumes and other materials.
+\begin{enumerate}
+\item {\em resume in the recommended format for \LaTeX.} This is the
+form we recommend, especially for users who have not yet created any
+resume. The files for this case are named
+\begin{center}
+\verb:/pub/ibmres-tex/res_c_e.ltx:,
+\verb:/pub/ibmres-tex/res_c_f.ltx:,\\
+\verb:/pub/ibmres-tex/res_u_e.ltx:,
+\verb:/pub/ibmres-tex/res_u_f.ltx:.
+\end{center}
+\item {\em resume not in the recommended format, to be used by \LaTeX.}
+This form is useful for people who have already created a resume and
+other materials as a source file for \LaTeX\ and who do not want to
+retype everything to conform to the format in the preceding case. The
+files for this second case are named
+\begin{center}
+\verb:/pub/ibmres-tex/nres_c_e.ltx:,
+\verb:/pub/ibmres-tex/nres_c_f.ltx:,\\
+\verb:/pub/ibmres-tex/nres_u_e.ltx:,
+\verb:/pub/ibmres-tex/nres_u_f.ltx:.
+\end{center}
+\item {\em resume not in the recommended format, with tags and ASCII
+text.} This form is useful for people who use other word processors to
+create their materials. They can fill in the tag data and use the word
+processor to produce an ASCII text version of their document. The files
+for this third case are named
+\begin{center}
+\verb:/pub/ibmres-tex/nres_c_e.txt:,
+\verb:/pub/ibmres-tex/nres_c_f.txt:,\\
+\verb:/pub/ibmres-tex/nres_u_e.txt:,
+\verb:/pub/ibmres-tex/nres_u_f.txt:.
+\end{center}
+\item {\em a file with just ASCII text.} This form is acceptable, but we
+do not recommend it. It will have to be examined by a human, whereas the
+three preceding cases are tagged files which can be processed
+automatically by software.
+\end{enumerate}
+
+If you use the first or second case, while entering text you must beware
+of ten symbols which have special meaning to \TeX\ and \LaTeX: ampersand
+(\verb/&/), backslash (\verb/\/), dollar sign (\verb/$/), hash mark
+(\verb/#/), hat (\verb/^/), left brace (\verb/{/), percent sign
+(\verb/%/), right brace (\verb/}/), tilde (\verb/~/), and underscore
+(\verb/_/). You are not likely to want an actual backslash, hat, or
+tilde in your text, and you may obtain the other seven by typing \verb/\/
+before the symbol, e.g. \verb/\&/ to get an ampersand in the output.
+Finally, you must figure out how to run \LaTeX\ on the file at your
+installation if you want paper output.
+\section{A Simple Example of a Tagged File \label{simple}}
+In this section we give a simple example which illustrates the use of the
+\verb/ibmres/ macro package. The first step is to create a text file
+which looks as follows:
+\begin{center}
+\verb/\documentstyle[12pt,ibmres]{article}/\\
+\verb/\begin{document} /\\
+\verb/ . /\\
+\verb/ . /\\
+\verb/ . /\\
+\verb/\end{document} /
+\end{center}
+The first line tells \LaTeX\ that you are creating a document in the
+style of an article, you wish the text to be set in a twelve-point font,
+and you are using the \verb/ibmres/ macro package. If you prefer a
+smaller text size, you may substitute \verb/11pt/ for \verb/12pt/; if you
+omit the string \verb/12pt,/ you will obtain a document in the default
+ten-point size. The second and final lines surround the remaining text
+which is considered the \LaTeX\ document.
+
+We shall call a {\em tag} any string which: (a) begins with a backslash
+\verb/\/; (b) is immediately followed by a sequence of letters; and (c)
+optionally ends with a zero. In the example above there are three
+tags: \verb/\documentstyle/, \verb/\begin/, and \verb/\end/. The case of
+the letters is significant, so that \verb/\end/ and \verb/\End/ represent
+different tags. Frequently a tag is followed by a pair of matching
+braces with a string of text inside; we call that string the {\em
+argument} of the tag. Thus in the preceding examples the string
+\verb/document/ is the argument of both \verb/\begin/ and \verb/\end/.
+An argument may range from the empty string (e.g.
+\verb/\miscellaneous{}/) to several lines of text.
+
+Except for lines indicating comments (ignored by \LaTeX), which are
+discussed momentarily, the remainder of the lines in the text file
+conform to the following format: {\em tag}~\{~{\em argument}~\}.
+Detailed descriptions of the tags appear in subsequent sections, but we
+give a simple example here.
+
+A text file which includes the 71 lines on pages
+\pageref{bseinput}--\pageref{eseinput} produces the resume, cover letter,
+and label on pages \pageref{bseoutput}--\pageref{eseoutput}. The four
+initial columns of numbers from 1 to 71 do not actually appear in the
+input file but are included for easy reference. Lines 1--6 are comments.
+If \LaTeX\ encounters a \%, it ignores any text which remains on that
+line. As we pointed out in Section~\ref{avoid}, if you want a \% in
+your text, you must type \verb/\%/.
+
+The example shows that the tags can be divided into three types. The
+simplest type, such as \verb/\objective/ (lines 25--26), merely causes
+specific output (in this case {\bf Objective}) accompanied by one item
+(the argument) formatted in an appropriate manner. Note that
+\verb/\name/ (line 9) and \verb/\oneaddressandphone/ (lines 16--20) are
+of the same form; the argument of the latter spans all five lines. A
+second type, such as \verb/\education/ (line 27), implies the occurrence
+of related sub-tags \verb/\when/, \verb/\place/, \verb/\location/,
+\verb/\degree/, \verb/\gpa/, and \verb/\outof/ (lines 28--33). The third
+type of tag is illustrated by the string in line 10. The \verb/0/
+following \verb/\preferredtitle/ means that the tag plus argument will
+contribute zero to the output; nevertheless, the data will be used by the
+receiving applicant system. For example, the latter could send back a
+formal letter in which the argument \verb/Mr. Leeman/ appears in the
+salutation string \verb/Dear Mr. Leeman:/. We thus avoid the
+embarrassing {\em faux pas} of using an improper form of address;
+choosing the right salutation is a task which cannot be done correctly
+one-hundred percent of the time, even by humans!
+
+\LaTeX\ encourages the user to view the document logically, not
+physically. The end of line indicator in \LaTeX\ is \verb/\\/ (double
+backslash). Accordingly, we shall use the term {\em logical lines} to
+described the lines so separated. Thus the address and phone number on
+lines 17--19 consist of three logical lines; the equivalent form
+\begin{center}
+\verb/\oneaddressandphone{/\\
+\verb/2904 Washtenaw /\\
+\verb/Avenue, /\\
+\verb/Apt. 1B\\Ypsilanti, /\\
+\verb/MI 48198\\ /\\
+\verb/(313) /\\
+\verb/434-1815 /\\
+\verb/} /
+\end{center}
+contains six physical lines for the address and phone number, but still
+only three logical lines. We shall see examples later where an address
+and phone number with four logical lines might require five physical
+lines on output. Our tags are designed so that \TeX\ determines the
+appropriate physical breaks.
+
+This example illustrates some of the techniques for typing text to be
+read by \LaTeX\ and \TeX.
+\begin{enumerate}
+\item Logical lines are separated by the \verb/\\/ command. Thus the
+\verb/\\/ command in line 18 is essential to force a line break on
+output; without it, the resume would have appeared at that point as
+\begin{center}
+\verb/Ypsilanti, MI 48198 (313) 434-1815/.
+\end{center}
+The number of physical lines is not important. We prefer a style such as
+lines 16--20 when the argument has several lines; the closing \verb/}/ is
+less likely to be omitted. On the other hand, when the argument can be
+typed on one or two lines, we use a format as in lines 25--26.
+\item A blank line such as in lines 55, 59, and 63 causes the end of a
+paragraph.
+\item One can force a blank within a line by the sequence ``\verb/\ /''
+(i.e., a backslash followed by a blank), such as in line 69.
+\end{enumerate}
+
+As this simple example illustrates, the task of creating effective
+employment application materials amounts to filling in standard skeletons
+of tags. One does not have to memorize the special sub-tags associated
+with tags of the second type above, since they already appear in the
+skeletons with appropriate comments. When the governing tag (e.g.\
+\verb/\education/) is not used, then the subordinate tags (e.g.\
+\verb/\when/$\ldots$\verb/\outof/) must be removed as well. These
+procedures are explored in more detail in the following sections.
+
+We point out that the aforementioned application materials are
+poorly constructed.
+Sending a carbon copy to one's mother is probably a bad idea, and a
+postscript is questionable in a cover letter for employment, where the
+tone is more formal. The letter also suffers from the minor defect that
+it is sent more than twenty years late! The discussion in
+Section~\ref{ibmres} points out further deficiencies.
+\section{Legal Tagged Files \label{legal}}
+In this section we discuss ten basic tags which should appear in all
+tagged files. In fact, a tagged file is {\em legal} if it contains these
+tags, plus possibly others. Intuitively the basic tags identify
+rudimentary information which an employment processing system needs to
+know about the applicant, such as name, degree, etc. We illustrate the
+tags with the sample file \verb,/pub/ibmres-tex/nres_u_f.txt,, a partial
+listing of which appears on pages
+\pageref{bnrtinput}--\pageref{enrtinput}. The tags are as follows.
+\begin{enumerate}
+\item \verb/\name/ (line 8). This tag is usually the first tag, and its
+argument is your full name.
+\item \verb/\preferredtitle0/ (line 9). As already discussed, it gives
+the desired string to be used by a responding system in a letter
+salutation. It produces no output.
+\item \verb/\school0/ (line 10). Enter the school from which you have
+received or are receiving your most advanced degree. The tag produces no
+output.
+\item \verb/\email/ (line 11). Enter the exact set of symbols which a
+system could use to respond to you. The form shown is often synonymous
+with \verb/leeman@um.cc.umich.edu/. One trap is that the underscore is
+sometimes present, so one must be careful to type \verb/\_/, not just
+\verb/_/ (an example appears in the listing of the file
+\verb:/pub/ibmres-tex/res_u_f.ltx: on pages
+\pageref{bceinput}--\pageref{eceinput}). If you do not have an
+electronic mail address, enter \verb/\email{}/.
+\item \verb/\discipline0/ (line 12). Enter the discipline in which you
+received or are receiving your most advanced degree.
+\item \verb/\highestdegree0/ (line 13). Enter the highest degree which
+you received or are receiving.
+\item \verb/\degreeyear0/ (line 14). Enter the year in which you
+received or are receiving your highest degree.
+\item \verb/\workaddressandphone/ and \verb/\homeaddressandphone/
+(examples appear in lines 13--23 on page \pageref{bceinput}) or just
+\verb/\oneaddressandphone/ (lines 15--19). Undergraduates and some
+graduate students may want to use just one home address via
+\verb/\oneaddressandphone/. However, if you have a place of employment,
+use both a work and home address with two tags
+\verb/\workaddressandphone/ and \verb/\homeaddressandphone/. A
+frequently asked question is whether a home address refers to the living
+quarters at a university or a more permanent site, such as the home of a
+student's parents. If you will be at a campus residence six weeks after
+you send out your resumes, then use the campus residence; otherwise use a
+more permanent address. Separate logical lines by \verb/\\/; the system
+will figure out proper physical line breaks.
+\item \verb/\immigrationstatus/ and \verb/\typeofpositiondesired/ (lines
+20--21). These extremely important entries are often not found at all in
+resumes! They are always key elements which a potential hiring manager
+must know and should therefore appear early.
+\begin{enumerate}
+\item \verb/\immigrationstatus/. Typical entries are US citizen, US
+permanent resident, Student Visa. Some students prefer to indicate the
+type of visa (e.g. F1, H1, J1), since they carry different implications
+for employment. This entry is also important for the hiring manager to
+know. For example, employers offering work involving US government
+contracts may be forced to consider only US citizens, because those in
+the other categories may be unable to obtain a government security
+clearance.
+\item \verb/\typeofpositiondesired/. Entries here are Permanent, Summer
+(indicate the year---an omission in the example of Section~\ref{simple}),
+and
+Temporary; an example of the latter is a co-op position for a semester.
+\end{enumerate}
+\end{enumerate}
+\section{Four Types of Applicant Files \label{four}}
+In this section we discuss four possible formats for electronic files.
+The first three are legal tagged files which include the basic tags
+presented in the preceding section. The final format is just raw,
+unstructured text made up of ASCII characters.
+\subsection{Use of the IBMRES.STY Templates \label{ibmres}}
+If you have not created a resume and associated materials, we recommend
+using the \verb/ibmres.sty/ approach. You fill in one of the templates
+listed in case 1 of Section~\ref{avoid}. If you want paper versions of
+your document, you ensure that the file \verb:/pub/ibmres-tex/ibmres.sty:
+is available, and you run \LaTeX\ on your file. We provide detailed
+descriptions of the various tags available, and we give tips on producing
+effective resumes. We illustrate the tags with a more complicated
+example of a PhD student resume. The only tags which are {\em required}
+are the basic tags mentioned in the preceding section. However, many of
+the others which are discussed here will be useful. The input is the
+file \verb:/pub/ibmres-tex/res_u_f.ltx: (pages
+\pageref{bceinput}--\pageref{eceinput}), and the output is on pages
+\pageref{bceoutput}--\pageref{eceoutput}. In this discussion two points
+will be emphasized:
+\begin{enumerate}
+\item Both the choice of items in a resume and their order on the page
+are important. You should express your qualifications in a terse but
+convincing style, and should arrange items so that the potential hiring
+manager will see key points early.
+\item You may want to create several resumes, tailored to specific
+employers. However, begin with a general version, which can then be
+slightly modified by adding or removing various tags.
+\end{enumerate}
+We now discuss one-by-one the remaining tags which have not already been
+mentioned in the preceding section.
+Although in the resume
+output the left margin is really the blank $1''$x$11''$ rectangle
+extending from the left side of the page, we shall instead call the left
+margin the rectangle which starts at the beginning of {\bf Objective} and
+ends at the beginning of ``To obtain a research $\ldots$'' in our
+example.
+\begin{enumerate}
+\item \verb/\presentstatus/ (line 28) and \verb/\availabledate/ (line
+31). These extremely important entries are often not found at all in
+resumes! They are always key elements which a potential hiring manager
+must know and should therefore appear early.
+\begin{enumerate}
+\item \verb/\presentstatus/. Your present status might be BS student, MS
+student, PhD student, Postdoc student, faculty, employed, etc. This
+category often immediately determines whether you are a candidate for an
+available position.
+\item \verb/\availabledate/. This item is a possible starting date.
+Your best strategy is to put the earliest possible date which you can
+tolerate, provided that all obligations can be fulfilled. A
+counterexample would be a date \verb/July 1/ and an education item saying
+\verb/PhD expected July 1/, where the latter date is unrealistically
+optimistic.
+\end{enumerate}
+\item \verb/\employerspecifictitle/, \verb/\employerspecificdata/ (lines
+32--33). These specialized tags are only used in a minority of resumes,
+and hence they are discussed in the next section.
+\item \verb/\objective/ (lines 34--35). The objective must be clear and
+concise. BS students tend to have more general objectives (e.g. ``a
+position in software engineering''), whereas PhDs are more specific (see
+example in lines 34--35). Keep in mind that the goal is to write a
+resume in which the items that follow illustrate that you are
+well-qualified to pursue the objective.
+\item \verb/\education/ (line 36). This tag spawns one or more sextets
+consisting of the tags \verb/\when/, \verb/\place/, \verb/\location/,
+\verb/\degree/, \verb/\gpa/, \verb/\outof/.
+\begin{enumerate}
+\item \verb/\when/ (line 37). When the degree was received or when it is
+expected.
+\item \verb/\place/ (line 38). The university.
+\item \verb/\location/ (line 39). Its location; in the US, city and
+state suffice.
+\item \verb/\degree/ (lines 40--41). Include the type (e.g. BA, MA, BS,
+MS, PhD, etc.) and the field of major study. When appropriate, include a
+thesis advisor and title. The thesis advisor may also be listed in the
+References section, which is a desirable redundancy.
+\item \verb/\gpa/ (line 42). Usually a decimal number, but there may be
+other cases (see line 54).
+\item \verb/\outof/ (line 43). The highest possible GPA. This entry is
+important and sometimes omitted. Many graduate schools use a maximum of
+9.000. If you type \verb/\gpa{7.362}\outof{}/ instead of
+\verb/\gpa{7.362}\outof{8.000}/, the reader may assume the omitted field
+was 9.000 and consider you a B student instead of an A student.
+\end{enumerate}
+\item \verb/\employment/ (line 56). If you have employment experience,
+use this tag, which implies one of more quartets of the tags
+\verb/\when/, \verb/\place/, \verb/\location/, \verb/\text/.
+\begin{enumerate}
+\item \verb/\when/ (line 57). A range of dates for the job.
+\item \verb/\place/ (line 58). Name of employer.
+\item \verb/\location/ (line 59). Location; in the US, city and state
+suffice.
+\item \verb/\text/ (lines 60--61). Text giving a brief description of
+the work. If the work is related to the Objective, choose wording which
+makes the connection clear.
+\end{enumerate}
+\item \verb/\skills/ (line 66). This is an optional tag which is a
+catch-all for capabilities which do not appear anywhere else. It is
+followed by one or more \verb/\text/ tags to describe the items.
+\begin{enumerate}
+\item \verb/\text/ (line 67). As an example, the ability to write
+programs in a specific programming language may be an important adjunct
+for carrying out the objective. For some disciplines the nature of your
+degree and education might be sufficient, and the \verb/\skills/ and
+\verb/\text/ tags could be omitted.
+\end{enumerate}
+\item \verb/\honors/ (line 68). If you have honors to report, use this
+tag followed by one or more \verb/\text/ tags.
+\begin{enumerate}
+\item \verb/\text/ (line 69). Appellations such as {\em magna cum laude}
+and {\em summa cum laude} are often listed as part of the degree in the
+Education section, but honors buried there are apt to be missed. Special
+employer-specific honors are best handled in a different manner (see next
+section).
+\end{enumerate}
+\item \verb/\publications/ (line 72). If you have publications, use this
+tag followed by one or more \verb/\text/ tags.
+\begin{enumerate}
+\item \verb/\text/ (line 73). List title, authors, and when and where
+the paper appeared or will appear. Any format seen in bibliographies is
+acceptable; the form shown here with no font changes is adequate. It is
+important to observe that the number of publications may depend not only
+on the student, but also the discipline and the advisor. A pure
+mathematics PhD writing a first-rate thesis might derive one or two
+publications from it in serious journals; an engineering student with
+results of immediate applicability might be encouraged to write up
+portions and present them at a conference, resulting in a larger number
+of publications.
+\end{enumerate}
+\item \verb/\miscellaneous/ (line 85). This is an entry which can be
+omitted, and its presence can affect the tone of the resume. In this
+writer's opinion, items such as ``enjoys tennis, classical music, and
+house building'' are less effective than entries such as significant
+volunteer work or positions of authority and/or responsibility.
+\item \verb/\references/ (line 87). This tag is obligatory and gives
+rise to one or more pairs \verb/\referencename/ and
+\verb/\referenceemail/. Writing something like ``provided upon request''
+(as was done in the example of Section \ref{simple}) is a mistake. Any
+potentially interested employer will ask for references, so such an entry
+only promotes delay. Furthermore, a list of names has two additional
+benefits. First, the list may suggest a breadth which the Objective
+requires. For instance, in the example of Section \ref{simple} the
+applicant could have listed both a physicist and a computer scientist, or
+both a mathematician and a computer scientist among the references.
+Second, the manager might recognize one of the names, especially if the
+reference is well-known.
+\begin{enumerate}
+\item \verb/\referencename/ (line 88). Include the full name, title,
+location, and phone number.
+\item \verb/\referenceemail/ (line 90). Include the exact set of
+characters in the electronic address; make the argument null if the
+reference has no such address. Note that an automated system could
+request reference letters automatically, and the reference could forward
+them in electronic form.
+\end{enumerate}
+\item \verb/\coverletter/ (lines 97--102). The impressive business letter
+is similar to, but not as sophisticated as, the sample format written by
+Knuth \cite[pp. 403--408]{tex}. As already discussed, this tag's
+argument consists of at least two logical lines separated by \verb/\\/
+commands. The first line appears at the top of the letterhead in a large
+font; the remaining lines are joined with a comma and appear underneath
+the first line. If the argument is null, the next eight tags have no
+effect, even if their arguments are not null.
+\begin{enumerate}
+\item \verb/\rightlines/ (line 103--107). The logical lines of the
+argument appear at the right-hand side of the business letter, separated
+from the preceding entries by a long rule. Typical choices here are the
+sender's name and title, electronic address, and phone number.
+\item \verb/\recipient/ (lines 108--113). Include the addressee's name
+and/or title and address.
+\item \verb/\letterbody/ (lines 114--126). Separate paragraphs with
+blank lines (lines 116, 120, 124). This writer prefers extra space
+between paragraphs, which was obtained via the \verb/\bigskip/ \TeX\
+command (lines 117, 121, 125). It is useful to include any information
+here which does not conveniently fit in the resume. In particular,
+providing a more detailed account of your availability can save the
+employer time in trying to contact you. The date of the letter is
+generated automatically.
+\item \verb/\closing/ (lines 127--130). Include a suitable closing and
+your name, separated by \verb/\\/.
+\item \verb/\cc/ (line 131). The carbon copy list has limited use in a
+cover letter. It can be omitted or equivalently used with a null
+argument. Members of a cc: list would be separated by \verb/\\/.
+\item \verb/\encl/ (line 132). It is a good idea to list as enclosures
+all materials accompanying the letter. Separate items in the list
+with \verb/\\/.
+\item \verb/\ps/ (line 133). As mentioned previously, use of the
+postscript tag can affect the tone of the letter. It may be omitted or
+equivalently used with null argument.
+\item \verb/\letterlabel/ (line 134). This tag produces a mailing label.
+The return address is generated from the letterhead, and the remainder of
+the label is the \verb/\recipient/ argument.
+\end{enumerate}
+\item \verb/\abstracts/ (line 135). If you want to include some
+abstracts, follow this tag by one or more \verb/\text/ tags. A good
+strategy is to fit them on one page. Large numbers of pages will
+inundate the employer. A second strategy is to supply no abstracts when
+the resume is first sent, but to be ready with the additional page as a
+follow-up weapon.
+\begin{enumerate}
+\item \verb/\text/ (line 136--146). It would take us too far afield to
+explain all the typed input in these examples. However, they show how
+easily mathematical formulas can be obtained via \LaTeX\ and \TeX.
+\end{enumerate}
+\end{enumerate}
+\subsection{Use of the NOIBMRES.STY Templates \label{noibmres}}
+Although the \verb/ibmres.sty/ package in the preceding section is the
+one we recommend most, there are cases in which it may not be the best
+choice. If you are already using \LaTeX\ for resumes and related
+materials, you may not want to retype everything to cater to the
+\verb/ibmres/ format. In that case make sure the file
+\verb/noibmres.sty/ (available via anonymous FTP from
+software.watson.ibm.com)
+is part of your system, and
+create a file which includes
+the basic tags plus your own \LaTeX\ source file. An example appears in
+the listing on page \pageref{bnrlinput}, where your own \LaTeX\ commands
+and text would appear after line 24. There is only one string
+attached---your \LaTeX\ source must be self-contained, i.e., not
+reference any special style or macro files. You may of course include
+any needed macro definitions between lines 8 and 9.
+The \verb/noibmres.sty/ file simply defines each tag to produce no text.
+If your text after line 24 happens to have a basic tag such as
+\verb/\name{...}/, you may omit that tag (line 10 in the example) at the
+beginning of the file. If you do not, the receiving software will warn
+you that two identical basic tags were detected, and it will use the
+data associated with the first occurrence. In other words, you may
+redefine any of the basic tags in your own \LaTeX\ source, and they may
+appear in any order. Any which do appear in your text may be omitted at
+the beginning of the file (lines 10--23 in our example).
+\subsection{Use of Tagged Files with Any Formatter or Word Processor
+\label{nolatex}}
+We strongly recommend the use of \LaTeX\ for creating resumes and
+related items, because it is ubiquitous and produces beautiful
+results. However, if you have already created your materials with some
+other formatter or word processor, you may prefer not to retype
+everything to conform to \LaTeX. If the program you used has the
+capability to produce a raw ASCII text version of your documents, you may
+fill in a template with the basic tags and
+append that version at the end. An example appears on pages
+\pageref{bnrtinput}--\pageref{enrtinput}. With this approach you avoid
+duplicate typing but still derive the benefits of submitting a
+structured file which can be quickly processed by receiving software.
+\subsection{Use of Raw Text Files \label{raw}}
+The final possibility---in our opinion the poorest choice of the four
+cases---is to submit an unstructured file with just ASCII text. We
+discourage this approach, because with minimal effort you can use the
+preceding alternative (at the beginning of your unstructured file,
+include the basic tags with appropriate data). Nevertheless, we feel
+that even this fourth choice is better than sending paper copies.
+Electronic submission of any kind is fast, and your materials can be
+forwarded in the same form to multiple locations quickly.
+\section{Tailoring Resumes to Specific Employers \label{tailor}}
+In this section we show how to use the \verb/ibmres.sty/ package to
+tailor your general
+resume to a specific employer. The most common reason is that you have
+either worked for that employer in the past or you have achievements
+which might be of greater interest to that employer. The best location
+for such material is right above the Objective, so that the reader sees
+it immediately. Two tags are provided, which we will illustrate with
+examples.
+\begin{enumerate}
+\item \verb/\employerspecifictitle/. Indicate a title for the item. Two
+examples for the IBM corporation are:
+\begin{center}
+\verb/\employerspecifictitle{IBM Fellowship Holder:}/
+\verb/\employerspecifictitle{IBM Work Experience:} /
+\end{center}
+\item \verb/\employerspecificdata/. Indicate data which explains the
+title. For the two examples above one might use
+\begin{center}
+\verb/\employerspecificdata{dates of fellowship}/
+\end{center}
+and
+\begin{center}
+\verb/\employerspecifictitle{location, date, manager name}/
+\end{center}
+\end{enumerate}
+Note there is no problem with redundancy between these items and the
+Employment section. The manager name would be of great interest to
+another IBM manager, who could then get an inside opinion about the
+applicant. It would make less sense to list that name on a general
+resume sent to other employers.
+
+Another example is any honor which is special to the employer. In the
+case of IBM, if you won a prize in an IBM-sponsored contest, the award
+would have greater weight in this early position on the resume,
+especially if accompanied by the name of someone in IBM involved with the
+contest.
+
+These two tags occur in pairs and are formatted like the
+\verb/\presentstatus/ tag and its argument. The argument to
+\verb/\employerspecifictitle/ is in bold face, and the argument of
+\verb/\employerspecificdata/ appears immediately afterward.
+\section{User Modifications \label{mod}}
+In this section we show how one can make simple changes to the
+\verb/ibmres.sty/ package.
+Occasionally users want to add a tag which might not be present. The
+easiest way is to plunge into the file /pub/ibmres-tex/ibmres.sty to see
+how the existing tags are formed. That task is made less formidable by
+including some examples here.
+
+It is important that you add your changes in the file you will be
+sending, not (for example) /pub/ibmres-tex/ibmres.sty. The right place
+to add new definitions is between the \verb/\documentstyle/ line and the
+\verb/\begin{document}/ line. The recipient can then still run \LaTeX\
+on your file with his own version of /pub/ibmres-tex/ibmres.sty.
+
+Suppose you are applying for an academic position and feel that a list of
+advanced graduate courses you have taken would enhance your resume. In
+terms of formatting this task is no different than designing the
+\verb/\skills/ and \verb/\honors/ tags, since you want a bold face entry
+in the left margin with the possibility of one or more items to the
+right. The latter piece can already be done with the \verb/\text/ tag.
+To attack the former piece, we find in the file
+/pub/ibmres-tex/ibmres.sty the lines
+\begin{center}
+\verb/\def\skills#1{\sectiontitle{Skills}#1\par}/
+\verb/\def\honors#1{\sectiontitle{Honors}#1\par}/
+\end{center}
+where \verb/\def/ is a \TeX\ command defining the control sequence
+(\verb/\skills/ and \verb/\honors/ in these cases) which immediately
+follows. The big advantage of examining two instances is that you see
+what portions change and what portions remain the same. Even if you know
+little about \TeX, you can guess that the configuration
+\begin{center}
+\verb/\def\courses#1{\sectiontitle{Graduate Courses Taken}#1\par}/
+\end{center}
+will yield {\bf Graduate Courses Taken} in the left margin, and thus the
+sequence
+\begin{center}
+\verb/\courses{} /\\
+\verb/\text{Several Complex Variables, Distribution Theory, ...}/
+\end{center}
+in our input file achieves the desired effect. You add the new
+\verb/\def/ line immediately after the \verb/\documentstyle/ line.
+
+If you want two lists---one for courses taken and one for courses
+taught---you may define two new tags \verb/\taken/ and \verb/\taught/ by
+\begin{center}
+\verb/\def\taken#1{\sectiontitle{Courses Taken}#1\par}/
+\verb/\def\taught#1{\sectiontitle{Courses Taught}#1\par}/
+\end{center}
+which you add at the top of the file after the \verb/\documentstyle/
+line.
+
+Similarly, if you want a new set of tags in which the heading appears
+horizontally above the data and part of the data falls in the left
+margin, you can mimic the \verb/\education/ and \verb/\when/ tags to get
+the desired effect.
+
+We mention one more physical characteristic which you might want to
+change: the width of the left margin. The last two lines in
+/pub/ibmres-tex/ibmres.sty
+\begin{center}
+\verb/\settowidth{\leftmarginwidth}{\bf Miscellaneous}/
+\verb/\addtolength{\leftmarginwidth}{1 em} /
+\end{center}
+set an internal dimension called \verb/\/\verb/leftmarginwidth/ to the
+precise horizontal width of the word \verb/Miscellaneous/ in boldface,
+then add a unit of 1 em to that dimension. If you are not using the
+\verb/\miscellaneous/ tag and decide that {\bf Publications} is the
+widest title in the left margin, you may insert the lines
+\begin{center}
+\verb/\settowidth{\leftmarginwidth}{\bf Publications}/
+\verb/\addtolength{\leftmarginwidth}{1 em} /
+\end{center}
+after the \verb/\documentstyle/ line.
+
+The entire listing of the /pub/ibmres-tex/ibmres.sty file is found in
+Appendix B. We exhort the reader to become more familiar with \LaTeX\
+and \TeX\ and to suggest improvements to this file.
+\section{Conclusion \label{conc}}
+This report has discussed an approach
+to simplify the initial phases of the employment application
+process and make them electronic. Several other tools and documentation
+would be useful. Examples include parsers which check the created input
+file for accuracy; systems which immediately acknowledge the applicant's
+submission and modify and distribute the incoming data appropriately; and
+further discussion about and improvements to the macros. Work on some of
+these pieces is nearing completion.
+
+The author would like to thank Alan D. Wilson, for supporting this work;
+Carol A. Johnson, Michael Sampogna, and John G. Oxton, for insightful
+discussions about recruiting operations; Lawrence A. Gallo and Ryuichi
+Sagara, for building a first-rate recruiting system which will accelerate
+the implementation of the ideas in this report; and Michael S. Mosley and
+Blaney Harper, who suggested a number of manuscript improvements.
+\newpage
+\newsection{Listing of /pub/ibmres-tex/simpres.ltx File}
+\small\label{bseinput}\begin{verbatim}
+001 % 10/08/93 %
+002 % IBM simple resume file, /pub/ibmres-tex/simpres.ltx %
+003 % George B. Leeman, Jr., leeman@watson.ibm.com. %
+004 % Please read /pub/README.FTP on software.watson.ibm.com before using %
+005 % this file. Run LaTeX on this file to produce a simple resume, cover %
+006 % letter, and mailing label. %
+007 \documentstyle[12pt,ibmres]{article}
+008 \begin{document}
+009 \name{George B. Leeman, Jr.}
+010 \preferredtitle0{Mr. Leeman}
+011 \school0{The University of Michigan}
+012 \email{leeman at um.cc.umich.edu}
+013 \discipline0{mathematics}
+014 \highestdegree0{PhD}
+015 \degreeyear0{1972}
+016 \oneaddressandphone{
+017 2904 Washtenaw Avenue, Apt. 1B\\
+018 Ypsilanti, MI 48198\\
+019 (313) 434-1815
+020 }
+021 \presentstatus{BS Student}
+022 \immigrationstatus{US citizen}
+023 \typeofpositiondesired{Summer}
+024 \availabledate{June, 1973}
+025 \objective{To obtain a position in numerical analysis and/or scientific
+026 programming.}
+027 \education{}
+028 \when{May 1973}
+029 \place{The University of Michigan}
+030 \location{Ann Arbor, MI}
+031 \degree{BA in Mathematics.}
+032 \gpa{3.603}
+033 \outof{4.000}
+034 \references{}
+035 \referencename{Provided upon request.}
+036 \referenceemail{}
+037 \coverletter{
+038 The University of Michigan\\
+039 Department of Mathematics\\
+040 Ann Arbor, MI 48109-2122
+041 }
+042 \rightlines{
+043 George B. Leeman, Jr.\\
+044 leeman at um.cc.umich.edu\\
+045 (313) 764-8504
+046 }
+047 \recipient{
+048 Manager, Mid-Hudson Valley Recruiting\\
+049 Employment Solutions Corporation\\
+050 P. O. Box 390\\
+051 Poughkeepsie, New York 12602
+052 }
+053 \letterbody{
+054 Dear Sir:
+055
+056 I would like to apply for a summer, 1973 position within the IBM
+057 development divisions in the Mid-Hudson Valley region. A resume is
+058 included.
+059
+060 I can be reached at the number shown above every afternoon from 1:00 PM
+061 to 5:00 PM. I answer electronic mail throughout each day, including
+062 weekends.
+063
+064 Thank you for your consideration.
+065 }
+066 \closing{Sincerely yours,\\George B. Leeman, Jr.}
+067 \cc{my mother}
+068 \encl{resume}
+069 \ps{P.\ S.\ Thank you for making it possible to send resumes electronically!}
+070 \letterlabel{}
+071 \end{document}
+\end{verbatim}
+\label{eseinput}
+\normalsize
+\newpage\label{bseoutput}
+\newsection{Output from /pub/ibmres-tex/simpres.ltx File}
+Replace this page with the first page resulting from running \LaTeX\ on
+/pub/ibmres-tex/simpres.ltx.
+\newpage Replace this page with the second page resulting from running
+\LaTeX\ on /pub/ibmres-tex/simpres.ltx.
+\newpage Replace this page with the third page resulting from running
+\LaTeX\ on /pub/ibmres-tex/simpres.ltx.
+\label{eseoutput}
+\newpage
+\newsection{Partial Listing of /pub/ibmres-tex/nres\_u\_f.txt File}
+\small
+\begin{center}\label{bnrtinput}\begin{verbatim}
+001 % 10/08/93 %
+002 % NON-latex RESume file, Uncommented, Filled in, %
+003 % /pub/ibmres-tex/nres_u_f.txt %
+004 % George B. Leeman, Jr., leeman@watson.ibm.com. %
+005 % Please read /pub/README.FTP on software.watson.ibm.com before using %
+006 % this file. Change the text in the arguments, then add your own text %
+007 % at the end. %
+008 \name{George B. Leeman, Jr.}
+009 \preferredtitle0{Mr. Leeman}
+010 \school0{The University of Michigan}
+011 \email{leeman at um.cc.umich.edu}
+012 \discipline0{mathematics}
+013 \highestdegree0{PhD}
+014 \degreeyear0{1972}
+015 \oneaddressandphone{
+016 2904 Washtenaw Avenue, Apt. 1B\\
+017 Ypsilanti, MI 48198\\
+018 (313) 434-1815
+019 }
+020 \immigrationstatus{US citizen}
+021 \typeofpositiondesired{Permanent}
+022 George B. Leeman, Jr.
+023
+024 Work Address Home Address
+025 The University of Michigan 2904 Washtenaw Avenue, Apt. 1B
+026 Department of Electrical Engineering Ypsilanti, MI 48198
+027 and Computer Science (313) 434-1815
+028 Ann Arbor, MI 48109-2122
+029 (313) 764--8504
+030 leeman@um.cc.umich.edu
+031
+032 Present Status: Postdoc Student Immigration Status: US citizen
+033
+034 Type of Position Desired: Permanent Available Date: June, 1973
+035
+036 Objective To obtain a research or development position in the areas of
+037 stochastic analysis or program correctness.
+ .
+ .
+ .
+100 The University of Michigan
+101 Department of Electrical Engineering and Computer Science, 1301 Beal Avenue,
+102 Ann Arbor, MI 48109-2122
+103 ------------------------------------------------------------------------------
+104 George B. Leeman, Jr.
+105 leeman at um.cc.umich.edu
+106 (313) 764-8504
+107 September 21, 1993
+108 Manager, PhD Recruiting
+109
+110 IBM Thomas J. Watson Research Center
+111 P. O. Box 218
+112 Yorktown Heights, New York 10598
+113
+114 Dear Sir:
+115
+116 I would like to apply for a position in the research and development divisions
+117 of your corporation. I have included a resume and if necessary can send a few
+118 abstracts from some of my published papers.
+119
+120 I can be reached at the number shown above every afternoon from 1:00 P.M. to
+121 5:00 P.M. I answer electronic mail throughout each day, including weekends.
+122
+123 Thank you for your consideration.
+124
+125 Sincerely yours,
+126
+127 George B. Leeman, Jr.
+128 encl: resume
+\end{verbatim}
+\label{enrtinput}\end{center}
+\normalsize
+\newpage\label{bceinput}
+\newsection{Listing of /pub/ibmres-tex/res\_u\_f.ltx File}
+\small
+\begin{verbatim}
+001 % 10/08/93 %
+002 % ibm RESume file, Uncommented, Filled in, /pub/ibmres-tex/res_u_f.ltx %
+003 % George B. Leeman, Jr., leeman@watson.ibm.com. %
+004 % Please read /pub/README.FTP on software.watson.ibm.com before using %
+005 % this file. Change the text in the arguments, then run LaTeX on this %
+006 % file to produce resume, cover letter, mailing label, and selected %
+007 % abstracts. %
+008 \documentstyle[12pt,ibmres]{article}
+009 \begin{document}
+010 \name{George B. Leeman, Jr.}
+011 \preferredtitle0{Mr. Leeman}
+012 \school0{The University of Michigan}
+013 \email{leeman@um.cc.umich.edu}
+014 \discipline0{mathematics}
+015 \highestdegree0{PhD}
+016 \degreeyear0{1972}
+017 \workaddressandphone{
+018 The University of Michigan\\
+019 Department of Electrical Engineering and Computer Science\\
+020 Ann Arbor, MI 48109-2122\\
+021 (313) 764--8504
+022 }
+023 \homeaddressandphone{
+024 2904 Washtenaw Avenue, Apt. 1B\\
+025 Ypsilanti, MI 48198\\
+026 (313) 434-1815
+027 }
+028 \presentstatus{Postdoc Student}
+029 \immigrationstatus{US citizen}
+030 \typeofpositiondesired{Permanent}
+031 \availabledate{June, 1973}
+032 \employerspecifictitle{}
+033 \employerspecificdata{}
+034 \objective{To obtain a research or development position in the areas of
+035 stochastic analysis or program correctness.}
+036 \education{}
+037 \when{Aug. 1972}
+038 \place{The University of Michigan}
+039 \location{Ann Arbor, MI}
+040 \degree{PhD in Mathematics; advisor: Peter L. Duren; thesis title:
+041 The constrained coefficient problem for typically real functions.}
+042 \gpa{8.217}
+043 \outof{9.000}
+044 \when{May 1969}
+045 \place{The University of Michigan}
+046 \location{Ann Arbor, MI}
+047 \degree{MA in Mathematics}
+048 \gpa{8.041}
+049 \outof{9.000}
+050 \when{June 1968}
+051 \place{Yale University}
+052 \location{New Haven, CT}
+053 \degree{BA in Mathematics}
+054 \gpa{abolished 11/30/67; class percentile: 97.}
+055 \outof{}
+056 \employment{}
+057 \when{summers, 1970, 1971}
+058 \place{The University of Michigan}
+059 \location{Ann Arbor, MI}
+060 \text{Instructor, teaching undergraduate introductory and intermediate
+061 calculus courses.}
+062 \when{summers, 1965--1969}
+063 \place{Perkin-Elmer Corporation}
+064 \location{Norwalk, CT}
+065 \text{Scientific programming for problems in engineering and physics.}
+066 \skills{}
+067 \text{Programming in FORTRAN, IBM 360 Assembler, SNOBOL4, LISP, C.}
+068 \honors{}
+069 \text{National Science Foundation Traineeship, September, 1968 to August, 1972.}
+070 \text{BA Magna Cum Laude, honors with exceptional distinction, 1968.}
+071 \text{Election to Phi Beta Kappa, November, 1967.}
+072 \publications{}
+073 \text{The seventh coefficient of odd symmetric univalent functions,
+074 G. B. Leeman, Jr.,
+075 to appear in Duke Mathematical Journal, vol. 43, no. 2, June,
+076 1973.}
+077 \text{A new proof for an inequality of Jenkins,
+078 G. B. Leeman, Jr.,
+079 Proceedings of the American Mathematical Society, vol. 54, Jan.
+080 1973, 114--116.}
+081 \text{The constrained coefficient problem for typically real functions,
+082 G. B. Leeman, Jr.,
+083 Transactions of the American Mathematical Society, vol. 186,
+084 Dec. 1972, 177--189.}
+085 \miscellaneous{Member of Board of Directors, Ridgefield Symphony Orchestra,
+086 Ridgefield, CT.}
+087 \references{}
+088 \referencename{Peter L. Duren, Professor, The University of Michigan,
+089 (313) 764-0202.}
+090 \referenceemail{duren@um.cc.umich.edu}
+091 \referencename{Bernard A. Galler, Professor, The University of Michigan,
+092 (313) 764-5832.}
+093 \referenceemail{bernard\_a.\_galler@um.cc.umich.edu}
+094 \referencename{Maxwell O. Reade, Professor, The University of Michigan,
+095 (313) 764-7227.}
+096 \referenceemail{}
+097 \coverletter{
+098 The University of Michigan\\
+099 Department of Electrical Engineering and Computer Science\\
+100 1301 Beal Avenue\\
+101 Ann Arbor, MI 48109-2122
+102 }
+103 \rightlines{
+104 George B. Leeman, Jr.\\
+105 leeman at um.cc.umich.edu\\
+106 (313) 764-8504
+107 }
+108 \recipient{
+109 Manager, PhD Recruiting\\
+110 IBM Thomas J. Watson Research Center\\
+111 P. O. Box 218\\
+112 Yorktown Heights, New York 10598
+113 }
+114 \letterbody{
+115 Dear Sir:
+116
+117 \bigskip I would like to apply for a position in the research and development
+118 divisions of your corporation. I have included a resume and a few abstracts
+119 from some of my published papers.
+120
+121 \bigskip I can be reached at the number shown above every afternoon from
+122 1:00 P.M. to 5:00 P.M. I answer electronic mail throughout each day, including
+123 weekends.
+124
+125 \bigskip Thank you for your consideration.
+126 }
+127 \closing{
+128 Sincerely yours,\\
+129 George B. Leeman, Jr.
+130 }
+131 \cc{}
+132 \encl{resume\\selected abstracts}
+133 \ps{}
+134 \letterlabel{}
+135 \abstracts{}
+136 \text{
+137 {\em The seventh coefficient of odd symmetric univalent functions, by
+138 G. B. Leeman, Jr.}\vskip 3ex
+139 Let $S_{odd}$ be the collection of all functions $f(z) = z +
+140 c_3z^3 + c_5z^5 + c_7z^7 + \cdots$ odd, analytic, and one-to-one in the unit
+141 disk. In 1933 Fekete and Szeg\"o showed that for all $f$ in $S_{odd}$, $|c_5|
+142 \leq 1/2 + e^{-2/3}$, but no sharp bounds have been found since that time, even
+143 for the subclass of $S_{odd}$ with real coefficients. In this paper we find the
+144 sharp bound $|c_7|\leq 1090/1083$ for this subclass, and we identify all
+145 extremal functions.\vskip 7 ex
+146 }
+147 \text{
+148 {\em A new proof for an inequality of Jenkins, by G. B. Leeman, Jr.}\vskip 3 ex
+149 A new proof of Jenkins' inequality
+150 $${\rm Re}(e^{2i\theta}a_3 - e^{2i\theta} a_2^2 - \tau e^{i\theta}a_2) \leq 1 +
+151 {3\over8} \tau^2 - {1\over4}\tau^2 \log ({\tau\over4}),\ \ 0 \leq \tau \leq 4,$$
+152 for univalent functions $f(z) = z + \sum_{n=2}^\infty a_n z^n$ is
+153 presented.\vskip 7 ex
+154 }
+155 \text{
+156 {\em The constrained coefficient problem for typically real functions, by
+157 G. B. Leeman, Jr.}\vskip 3 ex
+158 Let $-2 \leq c \leq 2$. In this paper we find the precise upper
+159 and lower bounds on the $n$th Taylor coefficient $a_n$ of functions $f(z) = z +
+160 c z^2 + \sum_{k=3}^\infty a_k z^k$ typically real in the unit disk for
+161 $n=3,4,\cdots \ .$ In addition all the extremal functions are identified.
+162 }
+163 \end{document}
+\end{verbatim}\normalsize\label{eceinput}\newpage\label{bceoutput}\
+\newsection{Output from /pub/ibmres-tex/res\_u\_f.ltx File}
+Replace this page with the first page resulting from running \LaTeX\ on
+/pub/ibmres-tex/res\_u\_f.ltx.
+\newpage Replace this page with the second page resulting from running
+\LaTeX\ on /pub/ibmres-tex/res\_u\_f.ltx.
+\newpage Replace this page with the third page resulting from running
+\LaTeX\ on /pub/ibmres-tex/res\_u\_f.ltx.
+\newpage Replace this page with the fourth page resulting from running
+\LaTeX\ on /pub/ibmres-tex/res\_u\_f.ltx.
+\newpage Replace this page with the fifth page resulting from running
+\LaTeX\ on /pub/ibmres-tex/res\_u\_f.ltx.
+\label{eceoutput}\newpage\label{bnrlinput}
+\newsection{Listing of /pub/ibmres-tex/nres\_u\_f.ltx File}
+\small
+\begin{verbatim}
+001 % 10/08/93 %
+002 % Non-ibm RESume file, Uncommented, Filled in, %
+003 % /pub/ibmres-tex/nres_u_f.ltx %
+004 % George B. Leeman, Jr., leeman@watson.ibm.com. %
+005 % Please read /pub/README.FTP on software.watson.ibm.com before using %
+006 % this file. Change the text in the arguments, then add your own self- %
+007 % contained LaTeX resume, etc. %
+008 \documentstyle[12pt,noibmres]{article}
+009 \begin{document}
+010 \name{George B. Leeman, Jr.}
+011 \preferredtitle0{Mr. Leeman}
+012 \school0{The University of Michigan}
+013 \email{leeman at um.cc.umich.edu}
+014 \discipline0{mathematics}
+015 \highestdegree0{PhD}
+016 \degreeyear0{1972}
+017 \oneaddressandphone{
+018 2904 Washtenaw Avenue, Apt. 1B\\
+019 Ypsilanti, MI 48198\\
+020 (313) 434-1815
+021 }
+022 \immigrationstatus{US citizen}
+023 \typeofpositiondesired{Permanent}
+024 % Put your own LaTeX commands and text after this line.
+ .
+ .
+ .
+ \end{document}
+\end{verbatim}\normalsize\newpage
+{\bf Appendix A. Obtaining files from software.watson.ibm.com}
+
+\markboth{\uppercase{Obtaining files from software.watson.ibm.com}}{}
+\bigskip User input lines are numbered, system responses are unnumbered.
+
+\small\noindent
+\verb?01 ftp internet-gw?\hfill{\em Access internet gateway via FTP.}
+\\\verb? VM TCP/IP FTP V2R2?
+\\\verb? Connecting to INTERNET-GW 129.34.128.85, port 21?
+\\\verb? 220-4.3 BSD UNIX (NRT) #1: Thu Nov 14 19:58:31 EST 1991?
+\\\verb? 220 internet-gw FTP GATEWAY (Version 4.24 Mon Dec 18 17:59:45 EST 1989) ready.?
+\\\verb? USER (identify yourself to the host):?
+\\\verb?02 leeman?\hfill{\em Type userid.}
+\\\verb? >>>USER leeman?
+\\\verb? 331 Password required for leeman.?
+\\\verb? Password:?
+\\\verb?03 ?\hfill{\em Type password, which is not displayed.}
+\\\verb? >>>PASS ********?
+\\\verb? 200 Specify Remote Destination with SITE command?
+\\\verb? Command:?
+\\\verb?04 site software.watson.ibm.com?\hfill{\em Specify desired server.}
+\\\verb? >>>SITE software.watson.ibm.com?
+\\\verb? 220 software.watson.ibm.com FTP server (IBM RT) ready.?
+\\\verb? Command:?
+\\\verb?05 user anonymous?\hfill{\em Log in with userid ``anonymous''}
+\\\verb? >>>USER anonymous?
+\\\verb? 331-Software on this FTP server is furnished by the terms?
+\\\verb? 331-and conditions put forth in the README.FTP file in the?
+\\\verb? 331-pub directory. By continuing, you agree to get?
+\\\verb? 331-the above mentioned file and agree to these conditions with?
+\\\verb? 331-respect to the software here. Otherwise, disconnect now.?
+\\\verb? 331 Guest login ok, send ident as password.?
+\\\verb? Password:?
+\\\verb?06 ?\hfill{\em Type email address, e.g. leeman@watson.ibm.com}
+\\\verb? >>>PASS ********?
+\\\verb? 230 Guest login ok, access restrictions apply.?
+\\\verb? Command:?
+\\\verb?07 get /pub/README.FTP?\hfill{\em First retrieve the README file.}
+\\\verb? >>>PORT 129,34,128,247,190,215?
+\\\verb? 200 PORT command successful.?
+\\\verb? >>>RETR /pub/README.FTP?
+\\\verb? 150 Opening data connection for /pub/README.FTP (129.34.139.1,1279) (3376 bytes)?
+\\\verb? 226 Transfer complete.?
+\\\verb? 3449 bytes transferred. Transfer rate 30.52 Kbytes/sec.?
+\\\verb? Command:?
+\\\verb?08 cd /pub/ibmres-tex?\hfill{\em Make /pub/ibmres-tex current directory}
+\\\verb? >>>CWD /pub/ibmres-tex?
+\\\verb? 250 CWD command successful.?
+\\\verb? Command:?
+\\\verb?09 get ibmres.sty?\hfill{\em Retrieve ibmres.sty file.}
+\\\verb? >>>PORT 129,34,128,247,190,224?
+\\\verb? 200 PORT command successful.?
+\\\verb? >>>RETR ibmres.sty?
+\\\verb? 150 Opening data connection for ibmres.sty (129.34.139.1,1280) (14851 bytes).?
+\\\verb? 226 Transfer complete.?
+\\\verb? 15164 bytes transferred. Transfer rate 57.88 Kbytes/sec.?
+\\\verb? Command:?
+\\\verb?10 get simpres.ltx?\hfill{\em Retrieve simpres.ltx file.}
+\\\verb? >>>PORT 129,34,128,247,190,228?
+\\\verb? 200 PORT command successful.?
+\\\verb? >>>RETR simpres.ltx?
+\\\verb? 150 Opening data connection for simpres.ltx (129.34.139.1,1281) (1959 bytes).?
+\\\verb? 226 Transfer complete.?
+\\\verb? 2026 bytes transferred. Transfer rate 36.84 Kbytes/sec.?
+\\\verb? Command:?
+\\\verb?11 get res_u_f.ltx?\hfill{\em Retrieve res\_u\_f.ltx file.}
+\\\verb? >>>PORT 129,34,128,247,190,233?
+\\\verb? 200 PORT command successful.?
+\\\verb? >>>RETR res_u_f.ltx?
+\\\verb? 150 Opening data connection for res\_u\_f.ltx (129.34.139.1,1282) (5646ytes).?
+\\\verb? 226 Transfer complete.?
+\\\verb? 5805 bytes transferred. Transfer rate 52.30 Kbytes/sec.?
+\\\verb? Command:?
+\\\verb?12 quit?\hfill{\em Sever connection with the server.}
+\\\verb? >>>QUIT?
+\\\verb? 221 Goodbye.?
+\normalsize
+\newpage
+{\bf Appendix B. Listing of /pub/ibmres-tex/ibmres.sty file.}
+
+\markboth{\uppercase{Listing of /pub/ibmres-tex/ibmres.sty file.}}{}
+\small
+\begin{verbatim}
+001 % 10/08/93 %
+002 % IBM resume style file, /pub/ibmres-tex/ibmres.sty %
+003 % George B. Leeman, Jr., leeman@watson.ibm.com. %
+004 % Please read /pub/README.FTP on software.watson.ibm.com before using %
+005 % this file. Documentation for using this file is in %
+006 % /pub/ibmres-tex/ibmres.ltx. %
+007 %=======================================================================%
+008 % The next 140 lines are the RESUME.STY file of Stephen Gildea, with %
+009 % enhancements by Jerry Leichter and George B. Leeman, Jr. %
+010 % This style option is designed to work with the article document
+011 % style of LaTeX version 2.09. Use
+012 % \documentstyle[resume]{article}
+013
+014 % Copyright (c) 1987 by Stephen Gildea
+015 % Permission to copy all or part of this work is granted, provided
+016 % that the copies are not made or distributed for resale, and that
+017 % the copyright notice and this notice are retained.
+018 %
+019 % THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+020 % WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+021 % INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+022 % FOR ANY PARTICULAR PURPOSE.
+023
+024 % If you make any improvements, I'd like to hear about them.
+025
+026 % Stephen Gildea
+027 % MIT Earth Resources Lab
+028 % Cambridge, Mass. 02139
+029 % mit-erl!gildea
+030 % gildea@erl.mit.edu
+031
+032 % 23 May 87 version 1
+033 % 08 Jun 88 center single \address lines
+034 % 02 Sep 88 enhancement to \employer from Jerry Leichter
+035 % LEICHTER-JERRY@cs.yale.edu or <LEICHTER@Venus.YCC.Yale.Edu>
+036 % 08 Mar 89 allow \\ in \sectiontitle to make multi-line titles
+037
+038 \topmargin 0pt
+039 \headheight 0pt
+040 \headsep 0pt
+041 \textheight 9.0in
+042 \pagestyle{empty}
+043 \parindent 0pt
+044 \parskip \baselineskip
+045 \topmargin 0in
+046 \oddsidemargin -0.1in % was 0in
+047 \evensidemargin 0in
+048 \textwidth 6.55in % was 6.5in
+049
+050 \setcounter{secnumdepth}{0}
+051
+052 % use this to print your name at the top of the page
+053 \def\name#1{{\large\bf\centering#1\\[2\baselineskip]}\ignorespaces}
+054
+055 % one address
+056 \def\address#1{{\centering #1\par}}
+057
+058 % two addresses (say, home and work). They get printed side by side
+059 \def\addresses#1#2{\hbox to \hsize{\@tablebox{#1}\hfil\@tablebox{#2}}}
+060
+061 % CC: [t] stands for align on top row; {@{}l@{}} indicates
+062 % that there is one entry that should be aligned to the left and
+063 % surrounded by two blank spaces.
+064 % Another example is in ieeeconf.sty, where we have
+065 % \def\author#1#2{\begin{tabular}[t]{c@{\extracolsep{8em}}c}#1&#2\end{tabular}}
+066 \def\@tablebox#1{\begin{tabular}[t]{@{}l@{}}#1\end{tabular}}
+067
+068 % CC: \newbox reserves a register of type box for \@title (p. 244)
+069 \newbox\@title
+070
+071 % Most of the resume goes inside a llist environment. Within it, use
+072 % the \sectiontitle{title} command to begin new sections. The title
+073 % of the section is put in the left margin. The section text begins
+074 % on the next line if the sectiontitle is too long.
+075 %
+076 % CC: (1) \begin{list}{default_label}{\labelwidth \leftmargin \labelsep
+077 % \rightmargin \topsep \parsep \parskip \itemsep \parsep} \item_list
+078 % \end{list} are latex commands (see pp.112--115 and p.165--166)
+079 % CC: (2) \newenvironment{command_name}[args]{begin_definition}{end_definition}
+080 % Modification by George B. Leeman: next line to change left margin width, then
+081 % change width accordingly in llist environment. Also add a multiple
+082 % line section title (mlsectiontitle) which allows multiple lines
+083 % inside items, formatting them to the proper width.
+084 \newlength\leftmarginwidth \setlength\leftmarginwidth{1 in}
+085 \newenvironment{llist}{%
+086 %\begin{list}{}{\setlength\labelwidth{1in}%
+087 \begin{list}{}{\setlength\labelwidth{\the\leftmarginwidth}%
+088 \setlength\leftmargin{\labelwidth}
+089 \addtolength\leftmargin{\labelsep}
+090 \itemsep 5pt plus 2pt minus 2pt
+091 \parsep 10pt plus 2pt minus 2pt
+092 %
+093 % Set the depth of the title to 0 in case more than one line.
+094 % CC: \copy<register> produces a copy of box register <register>.
+095 % This command is useful when you want to retrieve the contents of a box
+096 % but don't want to destroy the contents.
+097 \def\sectiontitle##1{\setbox\@title=\hbox{{\bf\@tablebox{##1}}}\dp\@title=0pt
+098 \item[\copy\@title]%
+099 % If the title takes more lines than the body, you lose.
+100 % \ifdim\wd\@title>\labelwidth \leavevmode \\* \else \fi}
+101 % CC: Because for sectiontitiles with \wd\@title>\labelwidth, we always
+102 % have \item following them, we do not need an extra line
+103 \ifdim\wd\@title>\labelwidth \leavevmode \else \fi} %end of sectiontitle
+104 % \def\mlsectiontitle##1{\setbox\@title=\hbox{\@tablebox{##1}}\dp\@title=0 pt
+105 % \item[\copy\@title]}
+106 \def\mlsectiontitle##1{\setbox\@title=\hbox{\@tablebox{
+107 \parbox[t]{\leftmarginwidth}{\raggedright##1}}}\dp\@title=0 pt
+108 \item[\copy\@title]}
+109 \def\makelabel##1{##1\hfill} } }{\end{list}}
+110
+111 % like itemize but bullets are at the left margin
+112 \newenvironment{items}{%
+113 \begin{list}{$\bullet$}{\setlength\labelwidth{.5em}\setlength\leftmargin{1em}
+114 % CC: new formats added by me :-)
+115 \parsep 0pt \parskip 0pt \topsep 1pt %\partopsep -2pt
+116 \def\makelabel##1{##1\hfill}}}{\end{list}}
+117
+118 % Use the \employer and \location commands to print the names and
+119 % cities of your employers.
+120 % \employer always starts a new paragraph, and should be followed by
+121 % \location, because no \par after \employer
+122 %
+123 % \employer* is like \employer but is used for additional information
+124 % about the employer. It does NOT start a new paragraph, must
+125 % NOT be followed by \location, and always forces a new line after itself.
+126 \def\employer{\@ifstar{\@semployer}{\@employer}}
+127 %\def\@employer#1{\par{\sc #1}}
+128 \def\@employer#1{{\sc #1}}
+129 \def\@semployer#1{{\sc #1}\\}
+130 % CC: used when the next environment is \begin{items} \end{items}
+131 \def\lastemployer#1{{\sc #1}}
+132
+133 % The location is always flush right. It is moved to the next
+134 % line if there is not room left on this one.
+135 % See the TeXbook Chapter 14.
+136 % CC: \penalty<number> produces a penality item. A penality of 10000
+137 % discourages (prevents) a break, while a penality of -10000 forces
+138 % a break. \finalhyphendemerits<number>: increasing <number> has
+139 % the effect of discouraging TEX from ending the nect ot the last line
+140 % with a hyphen.
+141 \def\location#1{{\unskip\nobreak\hfill\penalty50\hskip2em
+142 \hbox{}\nobreak\hfill \hbox{#1}\finalhyphendemerits=0 \\}}
+143
+144 % This prints the date flush left.
+145 % The major shortcoming of this file:
+146 % There needs to be an option to print the date in the left margin,
+147 % because many people like to do it that way.
+148 % \def\dates#1{#1\\[2pt]}
+149 % End of RESUME.STY file. %
+150 %=======================================================================%
+151 % Additions by George B. Leeman, Jr., October 22, 1992. %
+152 % %
+153 % New ifs, boxes, dimens, lengths, tokens. %
+154 \newif\if@nocoverletter
+155 \newbox\@onebox
+156 \newbox\@oneline
+157 \newdimen\@closingwidth
+158 \newdimen\@iwidth
+159 \newdimen\@longindentation
+160 \newdimen\@remainder
+161 \newlength{\@fwidth}
+162 \newlength{\@oneaddresssize}
+163 \newlength{\@twoaddresssize}
+164 \newtoks\@tempone
+165 \newtoks\@temptwo
+166 % Macro definitions, in alphabetical order. %
+167 \def\abstracts#1{\newpage\pagestyle{empty}%
+168 \centerline{{\bf Selected Abstracts}}\vskip 5 ex}
+169 \long\def\@append#1\to#2{\@tempone=\expandafter{#1}\@temptwo=\expandafter{#2}%
+170 \edef#2{\the\@temptwo\the\@tempone}}
+171 \def\availabledate#1{\hbox to \hsize{\@tablebox{{\bf Present Status: }%
+172 \@presentstatustext\\{\bf Type of Position Desired: }%
+173 \@typeofpositiondesiredtext}\hfil
+174 \@tablebox{{\bf Immigration Status: }\@immigrationstatustext\\%
+175 {\bf Available Date: }#1}}\ignorespaces}
+176 \def\cc#1{\if@nocoverletter\relax\else\@docc{#1}\fi\ignorespaces}
+177 \def\closing#1{\if@nocoverletter\relax\else\@setclosing#1\0\fi}
+178 \def\coverletter#1{\end{llist}\@ifnull{#1}\@nocoverlettertrue
+179 \else\def\@returnaddress{{\ignorespaces#1}}\@makeuniv#1\\\0\fi}
+180 \def\degree#1{\def\@degreetext{\ignorespaces#1}}
+181 \def\degreeyear0#1{\ignorespaces}
+182 \def\discipline0#1{\ignorespaces}
+183 \def\@docc#1{\@ifnull{#1}\relax\else\par\noindent\parbox[t]{\textwidth}%
+184 {\@hangfrom{\rm cc: }\ignorespaces #1\strut}\par\fi}
+185 \def\@doencl#1{\@ifnull{#1}\relax\else\par\noindent\parbox[t]{\textwidth}%
+186 {\@hangfrom{\rm encl: }\ignorespaces #1\strut}\par\fi}
+187 \def\education{\sectiontitle{Education}}
+188 \def\email#1{\def\emailtext{}\@ifnull{#1}\relax\else\def\emailtext{\\#1}\fi
+189 \ignorespaces}
+190 \def\employerspecificdata#1{\@ifnull{#1}\relax
+191 \else{\hbox to \hsize{\@tablebox{{\bf \@employerspecifictext: }#1}}}\fi
+192 \ignorespaces}
+193 \def\employerspecifictitle#1{\@ifnull{#1}\relax
+194 \else\def\@employerspecifictext{\ignorespaces#1}\fi\ignorespaces}
+195 \def\employment{\sectiontitle{Employment}}
+196 \def\encl#1{\if@nocoverletter\relax\else\@doencl{#1}\fi}
+197 \def\gpa#1{\@ifnull{#1}\def\@gpatext{ {\em no GPA.}}%
+198 \else\def\@gpatext{ {\em GPA: }\ignorespaces#1}\fi}
+199 \def\highestdegree0#1{\ignorespaces}
+200 \def\homeaddressandphone#1{\@newsize\@twoaddresssize{\bf Home Address}\\#1\\\0%
+201 \def\saveaddress{}\@setlineend\saveaddress{\bf Home Address}\\#1\\\0%
+202 \addresses{\saveworkaddress}%
+203 {\parbox[t]{\@fwidth}{\raggedright\saveaddress}}%
+204 \vskip 4 ex\ignorespaces}
+205 \def\honors#1{\sectiontitle{Honors}#1\par}
+206 \def\@ifnull#1{\def\temp{#1}\ifx\temp\empty}
+207 \def\immigrationstatus#1{\def\@immigrationstatustext{\ignorespaces#1}%
+208 \ignorespaces}
+209 \long\def\letterbody#1{\if@nocoverletter\relax\else#1\par\fi}
+210 \def\letterlabel{\if@nocoverletter\ignorespaces
+211 \else\newpage\thispagestyle{empty}\hbox{\vrule\vbox{\hrule\kern6truept
+212 \hbox{\kern6truept\vbox to 2truein{\hsize=\@longindentation
+213 {\smallheadfont\baselineskip9truept\@savename\\\@returnaddress\par}
+214 \vfill\moveright 2truein\vbox{\raggedright\hsize=\@longindentation
+215 \everypar{\hangindent 1 em}\rm\@receiveraddress}\vfill}%
+216 \kern6truept}\kern6truept\hrule}\vrule}
+217 \setcounter{page}{0}\newpage\fi}
+218 \def\@makeletterhead{\setcounter{page}{0}\newpage
+219 \setlength{\textwidth}{6.25 truein}\hsize=6.25 truein
+220 \def\ps@empty{\let\@mkboth\@gobbletwo\def\@oddhead{}\def\@oddfoot{}%
+221 \def\@evenhead{}\def\@evenfoot{}\headsep 0 pt\headheight 0 pt
+222 \textheight 9 in}%
+223 \parindent=0 pt\parskip=0 pt\headsep 6 ex\headheight 12 pt
+224 \addtolength{\textheight}{-6 ex}\addtolength{\textheight}{-12 pt}\raggedbottom
+225 \interlinepenalty=1000 \pagestyle{myheadings}%
+226 \markright{{\rm To: \@savereceiver\hfill\today\hfill Page }}%
+227 \@longindentation=4 truein\@remainder=2.25 truein\thispagestyle{empty}
+228 \font\smallheadfont=cmr8 at 8 truept\font\largeheadfont=cmr10 at 14.4 truept
+229 \hbox{\largeheadfont\@saveuniversity\hfil}\hbox{\smallheadfont\@secondline}%
+230 \vskip 2 truept\hrule\vskip 4 truept\hspace*{\@longindentation}%
+231 \parbox{\@remainder}{\baselineskip 9 truept\smallheadfont\@sendingaddress\par}
+232 \par\vspace{\bigskipamount}\vspace{\bigskipamount}\hspace*{\@longindentation}%
+233 \rm\today\par\vspace{\bigskipamount}\@receiveraddress\par
+234 \vspace{\bigskipamount}}
+235 \def\@makename#1\\#2\0{\def\@savename{{\ignorespaces#1}}}
+236 \def\@makereceiver#1\\#2\0{\def\@savereceiver{{\ignorespaces#1}}}
+237 \def\@makeuniv#1\\#2\0{\def\@saveuniversity{{\ignorespaces#1}}\@setsecond#2\\\0}
+238 \def\miscellaneous#1{\sectiontitle{Miscellaneous}#1\par}
+239 \def\@newsize#1#2\\#3\0{\@iwidth=#1\advance\@iwidth by -1 em
+240 \global\setbox\@onebox
+241 \vbox{\hsize=#1\parshape=2 0 pt #1 0 pt\the\@iwidth\raggedright#2\par}%
+242 \loop
+243 \global\setbox\@onebox
+244 \vbox{\unvbox\@onebox\global\setbox\@oneline\lastbox\unskip\unpenalty}%
+245 \global\setbox\@oneline\hbox{\unhbox\@oneline\unskip}%
+246 \global\@iwidth=\wd\@oneline
+247 \ifdim\ht\@onebox>0 pt
+248 \advance\@iwidth by 1 em
+249 \ifdim\@fwidth<\the\@iwidth\global\@fwidth=\the\@iwidth\fi
+250 \repeat
+251 \ifdim\@fwidth<\the\@iwidth\global\@fwidth=\the\@iwidth\fi
+252 \@ifnull{#3}\relax\else\@newsize\@twoaddresssize#3\0\fi}
+253 \def\objective#1{\begin{llist}\sectiontitle{Objective}#1\par}
+254 \def\oneaddressandphone#1{\@newsize\@oneaddresssize#1\emailtext\\\0%
+255 \def\saveaddress{}\@setlineend\saveaddress#1\emailtext\\\0%
+256 \def\addressbox{\raggedright\saveaddress}%
+257 \address{\parbox[t]{\@fwidth}{\addressbox}}\vskip 5 ex}
+258 \def\outof#1{\@ifnull{#1}\def\@outoftext{}
+259 \else\def\@outoftext{ out of \ignorespaces#1.}\fi\@degreetext\@gpatext
+260 \@outoftext\par}
+261 \def\place{\employer}
+262 \def\preferredtitle0#1{\ignorespaces}
+263 \def\presentstatus#1{\def\@presentstatustext{\ignorespaces#1}\ignorespaces}
+264 \def\ps#1{\if@nocoverletter\relax\else\ignorespaces#1\par\@startbreaks\fi
+265 \ignorespaces}
+266 \def\publications#1{\sectiontitle{Publications}#1\par}
+267 \def\@receiveraddress{}
+268 \def\recipient#1{\if@nocoverletter\relax
+269 \else\def\@receiveraddress{\ignorespaces#1}\@makereceiver#1\\\0\@makeletterhead
+270 \fi}
+271 \def\referenceemail#1{\@reftext\@ifnull{#1}\else{ \em Email: }#1\fi\par}
+272 \def\referencename#1{\def\@reftext{\ignorespaces#1}}
+273 \def\references{\sectiontitle{References}}
+274 \def\@returnaddress{}
+275 \def\rightlines#1{\if@nocoverletter\relax\else\def\@sendingaddress
+276 {\ignorespaces#1}\@makename#1\\\0\fi}
+277 \def\@savename{}
+278 \def\@savereceiver{}
+279 \def\@saveuniversity{}
+280 \def\school0#1{\ignorespaces}
+281 \def\@secondline{}
+282 \def\@sendingaddress{}
+283 \long\def\@setclosing#1\\#2\0{\par\nobreak\bigskip\@stopbreaks\noindent
+284 \hspace*{\@longindentation}\@closingwidth=\textwidth
+285 \advance\@closingwidth -\@longindentation
+286 \parbox{\@closingwidth}{\raggedright\ignorespaces #1\\[6\medskipamount]
+287 #2\strut}\par}
+288 \def\@setcommas#1\\#2\0{\@ifnull{#1}\relax
+289 \else\@append{, {\ignorespaces #1}}\to\@secondline\@setcommas#2\0\fi}
+290 \long\def\@setlineend#1#2\\#3\0{%
+291 \@append{{\ignorespaces#2}\hangindent=1 em \par}\to#1%
+292 \@ifnull{#3}\relax\else\@setlineend#1#3\0\fi}
+293 \def\@setsecond#1\\#2\0{\@ifnull{#1}\relax
+294 \else\def\@secondline{\ignorespaces #1}\@setcommas#2\\\0\fi}
+295 \def\skills#1{\sectiontitle{Skills}#1\par}
+296 \def\@startbreaks{\let\\=\@normalcr\interlinepenalty 200
+297 \def\par{\@@par\penalty 200 \relax}}
+298 \def\@stopbreaks{\interlinepenalty \@M \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+299 \let\vspace\@nobreakvspace}
+300 \long\def\text#1{\ignorespaces#1\par}
+301 \def\typeofpositiondesired#1{\def\@typeofpositiondesiredtext{\ignorespaces#1}%
+302 \ignorespaces}
+303 \def\when#1{\mlsectiontitle{#1}}
+304 \def\workaddressandphone#1{\def\workaddress{}%
+305 % \@setlineend\workaddress{\bf Work Address}\\#1\emailtext\\\0\noindent
+306 \@setlineend\workaddress{\bf Work Address}\\#1\emailtext\\\0%
+307 \def\saveworkaddress{{\parbox[t]{\@twoaddresssize}{\raggedright\workaddress}}}%
+308 \ignorespaces}
+309 % Initialize various dimensions.
+310 \setlength{\@oneaddresssize}{\textwidth}
+311 \addtolength{\@oneaddresssize}{-2 in}
+312 \setlength{\@twoaddresssize}{\textwidth}
+313 \addtolength{\@twoaddresssize}{-1 in}
+314 \addtolength{\@twoaddresssize}{-0.5 \@twoaddresssize}
+315 \setlength{\@fwidth}{-1 pt}
+316 \settowidth{\leftmarginwidth}{\bf Miscellaneous}
+317 \addtolength{\leftmarginwidth}{1 em}
+\end{verbatim}
+\normalsize
+\begin{thebibliography}{9}
+\bibitem{sty} Stephen Gildea, RESUME.STY, May 23, 1987, with
+improvements on: June 8, 1988; September 2, 1988 by Jerry Leichter,
+March 8, 1989; and October 23, 1992 by George B. Leeman, Jr.
+\bibitem{tex} Donald E. Knuth. {\em The \TeX{}book.} Addison-Wesley, Reading,
+Massachusetts, 1984.
+\bibitem{latex}
+Leslie Lamport. {\em A Document Preparation System \LaTeX\ User's Guide \&
+Reference Manual}
+Addison-Wesley, Reading,
+Massachusetts, 1986.
+\end{thebibliography}
+\end{document}
diff --git a/macros/latex209/contrib/ibmres-tex/ibmres.pdf b/macros/latex209/contrib/ibmres-tex/ibmres.pdf
new file mode 100644
index 0000000000..f707500b90
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/ibmres.pdf
Binary files differ
diff --git a/macros/latex209/contrib/ibmres-tex/ibmres.sty b/macros/latex209/contrib/ibmres-tex/ibmres.sty
new file mode 100644
index 0000000000..def3d62678
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/ibmres.sty
@@ -0,0 +1,317 @@
+% 10/08/93 %
+% IBM resume style file, /pub/ibmres-tex/ibmres.sty %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Documentation for using this file is in %
+% /pub/ibmres-tex/ibmres.ltx. %
+%=======================================================================%
+% The next 140 lines are the RESUME.STY file of Stephen Gildea, with %
+% enhancements by Jerry Leichter and George B. Leeman, Jr. %
+ % This style option is designed to work with the article document
+ % style of LaTeX version 2.09. Use
+ % \documentstyle[resume]{article}
+
+ % Copyright (c) 1987 by Stephen Gildea
+ % Permission to copy all or part of this work is granted, provided
+ % that the copies are not made or distributed for resale, and that
+ % the copyright notice and this notice are retained.
+ %
+ % THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+ % WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+ % INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+ % FOR ANY PARTICULAR PURPOSE.
+
+ % If you make any improvements, I'd like to hear about them.
+
+ % Stephen Gildea
+ % MIT Earth Resources Lab
+ % Cambridge, Mass. 02139
+ % mit-erl!gildea
+ % gildea@erl.mit.edu
+
+ % 23 May 87 version 1
+ % 08 Jun 88 center single \address lines
+ % 02 Sep 88 enhancement to \employer from Jerry Leichter
+ % LEICHTER-JERRY@cs.yale.edu or <LEICHTER@Venus.YCC.Yale.Edu>
+ % 08 Mar 89 allow \\ in \sectiontitle to make multi-line titles
+
+ \topmargin 0pt
+ \headheight 0pt
+ \headsep 0pt
+ \textheight 9.0in
+ \pagestyle{empty}
+ \parindent 0pt
+ \parskip \baselineskip
+ \topmargin 0in
+ \oddsidemargin -0.1in % was 0in
+ \evensidemargin 0in
+ \textwidth 6.55in % was 6.5in
+
+ \setcounter{secnumdepth}{0}
+
+ % use this to print your name at the top of the page
+ \def\name#1{{\large\bf\centering#1\\[2\baselineskip]}\ignorespaces}
+
+ % one address
+ \def\address#1{{\centering #1\par}}
+
+ % two addresses (say, home and work). They get printed side by side
+\def\addresses#1#2{\hbox to \hsize{\@tablebox{#1}\hfil\@tablebox{#2}}}
+
+ % CC: [t] stands for align on top row; {@{}l@{}} indicates
+ % that there is one entry that should be aligned to the left and
+ % surrounded by two blank spaces.
+ % Another example is in ieeeconf.sty, where we have
+ % \def\author#1#2{\begin{tabular}[t]{c@{\extracolsep{8em}}c}#1&#2\end{tabular}}
+ \def\@tablebox#1{\begin{tabular}[t]{@{}l@{}}#1\end{tabular}}
+
+ % CC: \newbox reserves a register of type box for \@title (p. 244)
+ \newbox\@title
+
+ % Most of the resume goes inside a llist environment. Within it, use
+ % the \sectiontitle{title} command to begin new sections. The title
+ % of the section is put in the left margin. The section text begins
+ % on the next line if the sectiontitle is too long.
+ %
+ % CC: (1) \begin{list}{default_label}{\labelwidth \leftmargin \labelsep
+ % \rightmargin \topsep \parsep \parskip \itemsep \parsep} \item_list
+ % \end{list} are latex commands (see pp.112--115 and p.165--166)
+ % CC: (2) \newenvironment{command_name}[args]{begin_definition}{end_definition}
+ % Modification by George B. Leeman: next line to change left margin width, then
+ % change width accordingly in llist environment. Also add a multiple
+ % line section title (mlsectiontitle) which allows multiple lines
+ % inside items, formatting them to the proper width.
+ \newlength\leftmarginwidth \setlength\leftmarginwidth{1 in}
+ \newenvironment{llist}{%
+%\begin{list}{}{\setlength\labelwidth{1in}%
+ \begin{list}{}{\setlength\labelwidth{\the\leftmarginwidth}%
+ \setlength\leftmargin{\labelwidth}
+ \addtolength\leftmargin{\labelsep}
+ \itemsep 5pt plus 2pt minus 2pt
+ \parsep 10pt plus 2pt minus 2pt
+ %
+ % Set the depth of the title to 0 in case more than one line.
+ % CC: \copy<register> produces a copy of box register <register>.
+ % This command is useful when you want to retrieve the contents of a box
+ % but don't want to destroy the contents.
+ \def\sectiontitle##1{\setbox\@title=\hbox{{\bf\@tablebox{##1}}}\dp\@title=0pt
+ \item[\copy\@title]%
+ % If the title takes more lines than the body, you lose.
+ % \ifdim\wd\@title>\labelwidth \leavevmode \\* \else \fi}
+ % CC: Because for sectiontitiles with \wd\@title>\labelwidth, we always
+ % have \item following them, we do not need an extra line
+ \ifdim\wd\@title>\labelwidth \leavevmode \else \fi} %end of sectiontitle
+% \def\mlsectiontitle##1{\setbox\@title=\hbox{\@tablebox{##1}}\dp\@title=0 pt
+% \item[\copy\@title]}
+ \def\mlsectiontitle##1{\setbox\@title=\hbox{\@tablebox{
+ \parbox[t]{\leftmarginwidth}{\raggedright##1}}}\dp\@title=0 pt
+ \item[\copy\@title]}
+ \def\makelabel##1{##1\hfill} } }{\end{list}}
+
+ % like itemize but bullets are at the left margin
+ \newenvironment{items}{%
+ \begin{list}{$\bullet$}{\setlength\labelwidth{.5em}\setlength\leftmargin{1em}
+ % CC: new formats added by me :-)
+ \parsep 0pt \parskip 0pt \topsep 1pt %\partopsep -2pt
+ \def\makelabel##1{##1\hfill}}}{\end{list}}
+
+ % Use the \employer and \location commands to print the names and
+ % cities of your employers.
+ % \employer always starts a new paragraph, and should be followed by
+ % \location, because no \par after \employer
+ %
+ % \employer* is like \employer but is used for additional information
+ % about the employer. It does NOT start a new paragraph, must
+ % NOT be followed by \location, and always forces a new line after itself.
+ \def\employer{\@ifstar{\@semployer}{\@employer}}
+ %\def\@employer#1{\par{\sc #1}}
+ \def\@employer#1{{\sc #1}}
+ \def\@semployer#1{{\sc #1}\\}
+ % CC: used when the next environment is \begin{items} \end{items}
+ \def\lastemployer#1{{\sc #1}}
+
+ % The location is always flush right. It is moved to the next
+ % line if there is not room left on this one.
+ % See the TeXbook Chapter 14.
+ % CC: \penalty<number> produces a penality item. A penality of 10000
+ % discourages (prevents) a break, while a penality of -10000 forces
+ % a break. \finalhyphendemerits<number>: increasing <number> has
+ % the effect of discouraging TEX from ending the nect ot the last line
+ % with a hyphen.
+ \def\location#1{{\unskip\nobreak\hfill\penalty50\hskip2em
+ \hbox{}\nobreak\hfill \hbox{#1}\finalhyphendemerits=0 \\}}
+
+ % This prints the date flush left.
+ % The major shortcoming of this file:
+ % There needs to be an option to print the date in the left margin,
+ % because many people like to do it that way.
+% \def\dates#1{#1\\[2pt]}
+% End of RESUME.STY file. %
+%=======================================================================%
+% Additions by George B. Leeman, Jr., October 22, 1992. %
+% %
+% New ifs, boxes, dimens, lengths, tokens. %
+\newif\if@nocoverletter
+\newbox\@onebox
+\newbox\@oneline
+\newdimen\@closingwidth
+\newdimen\@iwidth
+\newdimen\@longindentation
+\newdimen\@remainder
+\newlength{\@fwidth}
+\newlength{\@oneaddresssize}
+\newlength{\@twoaddresssize}
+\newtoks\@tempone
+\newtoks\@temptwo
+% Macro definitions, in alphabetical order. %
+\def\abstracts#1{\newpage\pagestyle{empty}%
+ \centerline{{\bf Selected Abstracts}}\vskip 5 ex}
+\long\def\@append#1\to#2{\@tempone=\expandafter{#1}\@temptwo=\expandafter{#2}%
+ \edef#2{\the\@temptwo\the\@tempone}}
+\def\availabledate#1{\hbox to \hsize{\@tablebox{{\bf Present Status: }%
+ \@presentstatustext\\{\bf Type of Position Desired: }%
+ \@typeofpositiondesiredtext}\hfil
+ \@tablebox{{\bf Immigration Status: }\@immigrationstatustext\\%
+ {\bf Available Date: }#1}}\ignorespaces}
+\def\cc#1{\if@nocoverletter\relax\else\@docc{#1}\fi\ignorespaces}
+\def\closing#1{\if@nocoverletter\relax\else\@setclosing#1\0\fi}
+\def\coverletter#1{\end{llist}\@ifnull{#1}\@nocoverlettertrue
+ \else\def\@returnaddress{{\ignorespaces#1}}\@makeuniv#1\\\0\fi}
+\def\degree#1{\def\@degreetext{\ignorespaces#1}}
+\def\degreeyear0#1{\ignorespaces}
+\def\discipline0#1{\ignorespaces}
+\def\@docc#1{\@ifnull{#1}\relax\else\par\noindent\parbox[t]{\textwidth}%
+ {\@hangfrom{\rm cc: }\ignorespaces #1\strut}\par\fi}
+\def\@doencl#1{\@ifnull{#1}\relax\else\par\noindent\parbox[t]{\textwidth}%
+ {\@hangfrom{\rm encl: }\ignorespaces #1\strut}\par\fi}
+\def\education{\sectiontitle{Education}}
+\def\email#1{\def\emailtext{}\@ifnull{#1}\relax\else\def\emailtext{\\#1}\fi
+ \ignorespaces}
+\def\employerspecificdata#1{\@ifnull{#1}\relax
+ \else{\hbox to \hsize{\@tablebox{{\bf \@employerspecifictext: }#1}}}\fi
+ \ignorespaces}
+\def\employerspecifictitle#1{\@ifnull{#1}\relax
+ \else\def\@employerspecifictext{\ignorespaces#1}\fi\ignorespaces}
+\def\employment{\sectiontitle{Employment}}
+\def\encl#1{\if@nocoverletter\relax\else\@doencl{#1}\fi}
+\def\gpa#1{\@ifnull{#1}\def\@gpatext{ {\em no GPA.}}%
+ \else\def\@gpatext{ {\em GPA: }\ignorespaces#1}\fi}
+\def\highestdegree0#1{\ignorespaces}
+\def\homeaddressandphone#1{\@newsize\@twoaddresssize{\bf Home Address}\\#1\\\0%
+ \def\saveaddress{}\@setlineend\saveaddress{\bf Home Address}\\#1\\\0%
+ \addresses{\saveworkaddress}%
+ {\parbox[t]{\@fwidth}{\raggedright\saveaddress}}%
+ \vskip 4 ex\ignorespaces}
+\def\honors#1{\sectiontitle{Honors}#1\par}
+\def\@ifnull#1{\def\temp{#1}\ifx\temp\empty}
+\def\immigrationstatus#1{\def\@immigrationstatustext{\ignorespaces#1}%
+ \ignorespaces}
+\long\def\letterbody#1{\if@nocoverletter\relax\else#1\par\fi}
+\def\letterlabel{\if@nocoverletter\ignorespaces
+ \else\newpage\thispagestyle{empty}\hbox{\vrule\vbox{\hrule\kern6truept
+ \hbox{\kern6truept\vbox to 2truein{\hsize=\@longindentation
+ {\smallheadfont\baselineskip9truept\@savename\\\@returnaddress\par}
+ \vfill\moveright 2truein\vbox{\raggedright\hsize=\@longindentation
+ \everypar{\hangindent 1 em}\rm\@receiveraddress}\vfill}%
+ \kern6truept}\kern6truept\hrule}\vrule}
+ \setcounter{page}{0}\newpage\fi}
+\def\@makeletterhead{\setcounter{page}{0}\newpage
+ \setlength{\textwidth}{6.25 truein}\hsize=6.25 truein
+ \def\ps@empty{\let\@mkboth\@gobbletwo\def\@oddhead{}\def\@oddfoot{}%
+ \def\@evenhead{}\def\@evenfoot{}\headsep 0 pt\headheight 0 pt
+ \textheight 9 in}%
+ \parindent=0 pt\parskip=0 pt\headsep 6 ex\headheight 12 pt
+ \addtolength{\textheight}{-6 ex}\addtolength{\textheight}{-12 pt}\raggedbottom
+ \interlinepenalty=1000 \pagestyle{myheadings}%
+ \markright{{\rm To: \@savereceiver\hfill\today\hfill Page }}%
+ \@longindentation=4 truein\@remainder=2.25 truein\thispagestyle{empty}
+ \font\smallheadfont=cmr8 at 8 truept\font\largeheadfont=cmr10 at 14.4 truept
+ \hbox{\largeheadfont\@saveuniversity\hfil}\hbox{\smallheadfont\@secondline}%
+ \vskip 2 truept\hrule\vskip 4 truept\hspace*{\@longindentation}%
+ \parbox{\@remainder}{\baselineskip 9 truept\smallheadfont\@sendingaddress\par}
+ \par\vspace{\bigskipamount}\vspace{\bigskipamount}\hspace*{\@longindentation}%
+ \rm\today\par\vspace{\bigskipamount}\@receiveraddress\par
+ \vspace{\bigskipamount}}
+\def\@makename#1\\#2\0{\def\@savename{{\ignorespaces#1}}}
+\def\@makereceiver#1\\#2\0{\def\@savereceiver{{\ignorespaces#1}}}
+\def\@makeuniv#1\\#2\0{\def\@saveuniversity{{\ignorespaces#1}}\@setsecond#2\\\0}
+\def\miscellaneous#1{\sectiontitle{Miscellaneous}#1\par}
+\def\@newsize#1#2\\#3\0{\@iwidth=#1\advance\@iwidth by -1 em
+ \global\setbox\@onebox
+ \vbox{\hsize=#1\parshape=2 0 pt #1 0 pt\the\@iwidth\raggedright#2\par}%
+ \loop
+ \global\setbox\@onebox
+ \vbox{\unvbox\@onebox\global\setbox\@oneline\lastbox\unskip\unpenalty}%
+ \global\setbox\@oneline\hbox{\unhbox\@oneline\unskip}%
+ \global\@iwidth=\wd\@oneline
+ \ifdim\ht\@onebox>0 pt
+ \advance\@iwidth by 1 em
+ \ifdim\@fwidth<\the\@iwidth\global\@fwidth=\the\@iwidth\fi
+ \repeat
+ \ifdim\@fwidth<\the\@iwidth\global\@fwidth=\the\@iwidth\fi
+ \@ifnull{#3}\relax\else\@newsize\@twoaddresssize#3\0\fi}
+\def\objective#1{\begin{llist}\sectiontitle{Objective}#1\par}
+\def\oneaddressandphone#1{\@newsize\@oneaddresssize#1\emailtext\\\0%
+ \def\saveaddress{}\@setlineend\saveaddress#1\emailtext\\\0%
+ \def\addressbox{\raggedright\saveaddress}%
+ \address{\parbox[t]{\@fwidth}{\addressbox}}\vskip 5 ex}
+\def\outof#1{\@ifnull{#1}\def\@outoftext{}
+ \else\def\@outoftext{ out of \ignorespaces#1.}\fi\@degreetext\@gpatext
+ \@outoftext\par}
+\def\place{\employer}
+\def\preferredtitle0#1{\ignorespaces}
+\def\presentstatus#1{\def\@presentstatustext{\ignorespaces#1}\ignorespaces}
+\def\ps#1{\if@nocoverletter\relax\else\ignorespaces#1\par\@startbreaks\fi
+ \ignorespaces}
+\def\publications#1{\sectiontitle{Publications}#1\par}
+\def\@receiveraddress{}
+\def\recipient#1{\if@nocoverletter\relax
+ \else\def\@receiveraddress{\ignorespaces#1}\@makereceiver#1\\\0\@makeletterhead
+ \fi}
+\def\referenceemail#1{\@reftext\@ifnull{#1}\else{ \em Email: }#1\fi\par}
+\def\referencename#1{\def\@reftext{\ignorespaces#1}}
+\def\references{\sectiontitle{References}}
+\def\@returnaddress{}
+\def\rightlines#1{\if@nocoverletter\relax\else\def\@sendingaddress
+ {\ignorespaces#1}\@makename#1\\\0\fi}
+\def\@savename{}
+\def\@savereceiver{}
+\def\@saveuniversity{}
+\def\school0#1{\ignorespaces}
+\def\@secondline{}
+\def\@sendingaddress{}
+\long\def\@setclosing#1\\#2\0{\par\nobreak\bigskip\@stopbreaks\noindent
+ \hspace*{\@longindentation}\@closingwidth=\textwidth
+ \advance\@closingwidth -\@longindentation
+ \parbox{\@closingwidth}{\raggedright\ignorespaces #1\\[6\medskipamount]
+ #2\strut}\par}
+\def\@setcommas#1\\#2\0{\@ifnull{#1}\relax
+ \else\@append{, {\ignorespaces #1}}\to\@secondline\@setcommas#2\0\fi}
+\long\def\@setlineend#1#2\\#3\0{%
+ \@append{{\ignorespaces#2}\hangindent=1 em \par}\to#1%
+ \@ifnull{#3}\relax\else\@setlineend#1#3\0\fi}
+\def\@setsecond#1\\#2\0{\@ifnull{#1}\relax
+ \else\def\@secondline{\ignorespaces #1}\@setcommas#2\\\0\fi}
+\def\skills#1{\sectiontitle{Skills}#1\par}
+\def\@startbreaks{\let\\=\@normalcr\interlinepenalty 200
+ \def\par{\@@par\penalty 200 \relax}}
+\def\@stopbreaks{\interlinepenalty \@M \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+\long\def\text#1{\ignorespaces#1\par}
+\def\typeofpositiondesired#1{\def\@typeofpositiondesiredtext{\ignorespaces#1}%
+ \ignorespaces}
+\def\when#1{\mlsectiontitle{#1}}
+\def\workaddressandphone#1{\def\workaddress{}%
+% \@setlineend\workaddress{\bf Work Address}\\#1\emailtext\\\0\noindent
+ \@setlineend\workaddress{\bf Work Address}\\#1\emailtext\\\0%
+ \def\saveworkaddress{{\parbox[t]{\@twoaddresssize}{\raggedright\workaddress}}}%
+ \ignorespaces}
+% Initialize various dimensions.
+\setlength{\@oneaddresssize}{\textwidth}
+\addtolength{\@oneaddresssize}{-2 in}
+\setlength{\@twoaddresssize}{\textwidth}
+\addtolength{\@twoaddresssize}{-1 in}
+\addtolength{\@twoaddresssize}{-0.5 \@twoaddresssize}
+\setlength{\@fwidth}{-1 pt}
+\settowidth{\leftmarginwidth}{\bf Miscellaneous}
+\addtolength{\leftmarginwidth}{1 em}
diff --git a/macros/latex209/contrib/ibmres-tex/noibmres.sty b/macros/latex209/contrib/ibmres-tex/noibmres.sty
new file mode 100644
index 0000000000..0f59fcff9e
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/noibmres.sty
@@ -0,0 +1,19 @@
+% 10/08/93 %
+% Style file for LaTeX resumes which are not in the IBM resume style, %
+% /pub/ibmres-tex/noibmres.sty %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Documentation for using this file is in %
+% /pub/ibmres-tex/ibmres.ltx. %
+\def\degreeyear0#1{\ignorespaces}
+\def\discipline0#1{\ignorespaces}
+\def\email#1{\ignorespaces}
+\def\highestdegree0#1{\ignorespaces}
+\def\homeaddressandphone#1{\ignorespaces}
+\def\immigrationstatus#1{\ignorespaces}
+\def\name#1{\ignorespaces}
+\def\oneaddressandphone#1{\ignorespaces}
+\def\preferredtitle0#1{\ignorespaces}
+\def\school0#1{\ignorespaces}
+\def\typeofpositiondesired#1{\ignorespaces}
+\def\workaddressandphone#1{\ignorespaces}
diff --git a/macros/latex209/contrib/ibmres-tex/nres_c_e.ltx b/macros/latex209/contrib/ibmres-tex/nres_c_e.ltx
new file mode 100644
index 0000000000..7664bddce8
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/nres_c_e.ltx
@@ -0,0 +1,43 @@
+% 10/08/93 %
+% Non-ibm RESume file, Commented, Empty, %
+% /pub/ibmres-tex/nres_c_e.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then add your own self- %
+% contained LaTeX resume, etc. %
+% First command must be as shown. 12pt may be changed to 11pt to get output in
+% eleven point fonts. If [12pt,noibmres] is changed to [noibmres], the output
+% will be in ten point fonts.
+\documentstyle[12pt,noibmres]{article}
+% Any of your own macro definitions should follow this comment line.
+% Next line required by LaTeX.
+\begin{document}
+% Name.
+\name{}
+% Preferred title of address, e.g. Mr., Miss, Mrs., Ms., Dr., first name, etc.,
+% followed by last name. Could be used after "Dear" and before ":" by an
+% automated applicant system to send you a letter.
+\preferredtitle0{}
+% School. Name of current school you are attending.
+\school0{}
+% Electronic mail address; use \email{} if you have no such address.
+\email{}
+% Discipline. Technical area in which you are earning your degree.
+\discipline0{}
+% Highest degree you will have when you leave current program.
+\highestdegree0{}
+% Degree year. Year in which you obtain(ed) highest degree.
+\degreeyear0{}
+% Work address and phone. Either use \oneaddressandphone for just one (home)
+% address, or use both \workaddressandphone and \homeaddressandphone for two
+% addresses. Separate logical lines of address and phone with \\.
+\oneaddressandphone{
+}
+% Immigration status, e.g. U.S. citizen, Permanent Resident, Student Visa.
+\immigrationstatus{}
+% Type of employment position desired: Permanent, Summer, Temporary (e.g.
+% co-op), etc.
+\typeofpositiondesired{}
+% Put your own LaTeX commands and text after this line.
+% Next line required by LaTeX. This should be the final tag.
+\end{document}
diff --git a/macros/latex209/contrib/ibmres-tex/nres_c_e.txt b/macros/latex209/contrib/ibmres-tex/nres_c_e.txt
new file mode 100644
index 0000000000..c31a4e8f78
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/nres_c_e.txt
@@ -0,0 +1,34 @@
+% 10/08/93 %
+% NON-latex RESume file, Commented, Empty, /pub/ibmres-tex/nres_c_e.txt %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then add your own text %
+% at the end. %
+% Name.
+\name{}
+% Preferred title of address, e.g. Mr., Miss, Mrs., Ms., Dr., first name, etc.,
+% followed by last name. Could be used after "Dear" and before ":" by an
+% automated applicant system to send you a letter.
+\preferredtitle0{}
+% School. Name of current school you are attending.
+\school0{}
+% Electronic mail address; use \email{} if you have no such address.
+\email{}
+% Discipline. Technical area in which you are earning your degree.
+\discipline0{}
+% Highest degree you will have when you leave current program.
+\highestdegree0{}
+% Degree year. Year in which you obtain(ed) highest degree.
+\degreeyear0{}
+% Address and phone. You can have both an office address and a home
+% address (use both \workaddressandphone and \homeaddressandphone), or
+% just one address, either work or home (use \oneaddressandphone).
+% Separate logical lines of address and phone with \\.
+\oneaddressandphone{
+}
+% Immigration status, e.g. U.S. citizen, Permanent Resident, Student Visa.
+\immigrationstatus{}
+% Type of employment position desired: Permanent, Summer, Temporary (e.g.
+% co-op), etc.
+\typeofpositiondesired{}
+% Put your own ASCII character text after this line.
diff --git a/macros/latex209/contrib/ibmres-tex/nres_c_f.ltx b/macros/latex209/contrib/ibmres-tex/nres_c_f.ltx
new file mode 100644
index 0000000000..3f847122ce
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/nres_c_f.ltx
@@ -0,0 +1,46 @@
+% 10/08/93 %
+% Non-ibm RESume file, Commented, Filled in, %
+% /pub/ibmres-tex/nres_c_f.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then add your own self- %
+% contained LaTeX resume, etc. %
+% First command must be as shown. 12pt may be changed to 11pt to get output in
+% eleven point fonts. If [12pt,noibmres] is changed to [noibmres], the output
+% will be in ten point fonts.
+\documentstyle[12pt,noibmres]{article}
+% Any of your own macro definitions should follow this comment line.
+% Next line required by LaTeX.
+\begin{document}
+% Name.
+\name{George B. Leeman, Jr.}
+% Preferred title of address, e.g. Mr., Miss, Mrs., Ms., Dr., first name, etc.,
+% followed by last name. Could be used after "Dear" and before ":" by an
+% automated applicant system to send you a letter.
+\preferredtitle0{Mr. Leeman}
+% School. Name of current school you are attending.
+\school0{The University of Michigan}
+% Electronic mail address; use \email{} if you have no such address.
+\email{leeman at um.cc.umich.edu}
+% Discipline. Technical area in which you are earning your degree.
+\discipline0{mathematics}
+% Highest degree you will have when you leave current program.
+\highestdegree0{PhD}
+% Degree year. Year in which you obtain(ed) highest degree.
+\degreeyear0{1972}
+% Work address and phone. Either use \oneaddressandphone for just one (home)
+% address, or use both \workaddressandphone and \homeaddressandphone for two
+% addresses. Separate logical lines of address and phone with \\.
+\oneaddressandphone{
+2904 Washtenaw Avenue, Apt. 1B\\
+Ypsilanti, MI 48198\\
+(313) 434-1815
+}
+% Immigration status, e.g. U.S. citizen, Permanent Resident, Student Visa.
+\immigrationstatus{US citizen}
+% Type of employment position desired: Permanent, Summer, Temporary (e.g.
+% co-op), etc.
+\typeofpositiondesired{Permanent}
+% Put your own LaTeX commands and text after this line.
+% Next line required by LaTeX. This should be the final tag.
+\end{document}
diff --git a/macros/latex209/contrib/ibmres-tex/nres_c_f.txt b/macros/latex209/contrib/ibmres-tex/nres_c_f.txt
new file mode 100644
index 0000000000..ff8512612e
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/nres_c_f.txt
@@ -0,0 +1,147 @@
+% 10/08/93 %
+% NON-latex RESume file, Commented, Filled in, %
+% /pub/ibmres-tex/nres_c_f.txt %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then add your own text %
+% at the end. %
+% Name.
+\name{George B. Leeman, Jr.}
+% Preferred title of address, e.g. Mr., Miss, Mrs., Ms., Dr., first name, etc.,
+% followed by last name. Could be used after "Dear" and before ":" by an
+% automated applicant system to send you a letter.
+\preferredtitle0{Mr. Leeman}
+% School. Name of current school you are attending.
+\school0{The University of Michigan}
+% Electronic mail address; use \email{} if you have no such address.
+\email{leeman at um.cc.umich.edu}
+% Discipline. Technical area in which you are earning your degree.
+\discipline0{mathematics}
+% Highest degree you will have when you leave current program.
+\highestdegree0{PhD}
+% Degree year. Year in which you obtain(ed) highest degree.
+\degreeyear0{1972}
+% Address and phone. You can have both an office address and a home
+% address (use both \workaddressandphone and \homeaddressandphone), or
+% just one address, either work or home (use \oneaddressandphone).
+% Separate logical lines of address and phone with \\.
+\oneaddressandphone{
+2904 Washtenaw Avenue, Apt. 1B\\
+Ypsilanti, MI 48198\\
+(313) 434-1815
+}
+% Immigration status, e.g. U.S. citizen, Permanent Resident, Student Visa.
+\immigrationstatus{US citizen}
+% Type of employment position desired: Permanent, Summer, Temporary (e.g.
+% co-op), etc.
+\typeofpositiondesired{Permanent}
+% Put your own ASCII character text after this line.
+%
+%
+ George B. Leeman, Jr.
+
+Work Address Home Address
+The University of Michigan 2904 Washtenaw Avenue, Apt. 1B
+Department of Electrical Engineering Ypsilanti, MI 48198
+ and Computer Science (313) 434-1815
+Ann Arbor, MI 48109-2122
+(313) 764--8504
+leeman@um.cc.umich.edu
+
+Present Status: Postdoc Student Immigration Status: US citizen
+
+Type of Position Desired: Permanent Available Date: June, 1973
+
+Objective To obtain a research or development position in the areas of
+ stochastic analysis or program correctness.
+
+Education
+
+Aug. 1972 The University of Michigan Ann Arbor, MI
+ PhD in Mathematics; advisor: Peter L. Duren; thesis title: The
+ constrained coefficient problem for typically real functions.
+
+ GPA: 8.217 out of 9.000.
+
+May 1969 The University of Michigan Ann Arbor, MI
+ MA in Mathematics GPA: 8.041 out of 9.000.
+
+June 1968 Yale University New Haven, CT
+ BA in Mathematics GPA: abolished 11/30/67; class percentile:
+ 97.
+
+Employment
+
+summers, 1970, The University of Michigan Ann Arbor, MI
+1971 Instructor, teaching undergraduate introductory and
+
+ intermediate calculus courses.
+
+summers, Perkin-Elmer Corporation Norwalk, CT
+1965--1969 Scientific programming for problems in engineering and
+ physics.
+
+Skills Programming in FORTRAN, IBM 360 Assembler, SNOBOL4, LISP, C.
+
+Honors National Science Foundation Traineeship, September, 1968 to
+
+ August, 1972.
+
+ BA Magna Cum Laude, honors with exceptional distinction, 1968.
+
+ Election to Phi Beta Kappa, November, 1967.
+
+Publications The seventh coefficient of odd symmetric univalent functions,
+ G. B. Leeman, Jr., to appear in Duke Mathematical Journal,
+
+ vol. 43, no. 2, June, 1973.
+
+ A new proof for an inequality of Jenkins, G. B. Leeman, Jr.,
+ Proceedings of the American Mathematical Society, vol. 54,
+ Jan. 1973, 114--116.
+
+ The constrained coefficient problem for typically real
+ functions, G. B. Leeman, Jr., Transactions of the American
+ Mathematical Society, vol. 186, Dec. 1972, 177--189.
+
+Miscellaneous Member of Board of Directors, Ridgefield Symphony Orchestra,
+ Ridgefield, CT.
+
+References Peter L. Duren, Professor, The University of Michigan, (313)
+ 764-0202. Email: duren@um.cc.umich.edu
+
+ Bernard A. Galler, Professor, The University of Michigan,
+ (313) 764-5832. Email: bernard_a._galler@um.cc.umich.edu
+
+ Maxwell O. Reade, Professor, The University of Michigan, (313)
+ 764-7227.
+==============================================================================
+The University of Michigan
+Department of Electrical Engineering and Computer Science, 1301 Beal Avenue,
+Ann Arbor, MI 48109-2122
+------------------------------------------------------------------------------
+George B. Leeman, Jr.
+leeman at um.cc.umich.edu
+(313) 764-8504
+ September 21, 1993
+Manager, PhD Recruiting
+
+IBM Thomas J. Watson Research Center
+P. O. Box 218
+Yorktown Heights, New York 10598
+
+Dear Sir:
+
+I would like to apply for a position in the research and development divisions
+of your corporation. I have included a resume and if necessary can send a few
+abstracts from some of my published papers.
+
+I can be reached at the number shown above every afternoon from 1:00 P.M. to
+5:00 P.M. I answer electronic mail throughout each day, including weekends.
+
+Thank you for your consideration.
+
+Sincerely yours,
+
+George B. Leeman, Jr.
+encl: resume
diff --git a/macros/latex209/contrib/ibmres-tex/nres_u_e.ltx b/macros/latex209/contrib/ibmres-tex/nres_u_e.ltx
new file mode 100644
index 0000000000..2ce6c8ed45
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/nres_u_e.ltx
@@ -0,0 +1,22 @@
+% 10/08/93 %
+% Non-ibm RESume file, Uncommented, Empty, %
+% /pub/ibmres-tex/nres_u_e.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then add your own self- %
+% contained LaTeX resume, etc. %
+\documentstyle[12pt,noibmres]{article}
+\begin{document}
+\name{}
+\preferredtitle0{}
+\school0{}
+\email{}
+\discipline0{}
+\highestdegree0{}
+\degreeyear0{}
+\oneaddressandphone{
+}
+\immigrationstatus{}
+\typeofpositiondesired{}
+% Put your own LaTeX commands and text after this line.
+\end{document}
diff --git a/macros/latex209/contrib/ibmres-tex/nres_u_e.txt b/macros/latex209/contrib/ibmres-tex/nres_u_e.txt
new file mode 100644
index 0000000000..fe8ecce474
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/nres_u_e.txt
@@ -0,0 +1,18 @@
+% 10/08/93 %
+% NON-latex RESume file, Uncommented, Empty, %
+% /pub/ibmres-tex/nres_u_e.txt %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then add your own text %
+% at the end. %
+\name{}
+\preferredtitle0{}
+\school0{}
+\email{}
+\discipline0{}
+\highestdegree0{}
+\degreeyear0{}
+\oneaddressandphone{
+}
+\immigrationstatus{}
+\typeofpositiondesired{Permanent}
diff --git a/macros/latex209/contrib/ibmres-tex/nres_u_f.ltx b/macros/latex209/contrib/ibmres-tex/nres_u_f.ltx
new file mode 100644
index 0000000000..b913388c41
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/nres_u_f.ltx
@@ -0,0 +1,25 @@
+% 10/08/93 %
+% Non-ibm RESume file, Uncommented, Filled in, %
+% /pub/ibmres-tex/nres_u_f.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then add your own self- %
+% contained LaTeX resume, etc. %
+\documentstyle[12pt,noibmres]{article}
+\begin{document}
+\name{George B. Leeman, Jr.}
+\preferredtitle0{Mr. Leeman}
+\school0{The University of Michigan}
+\email{leeman at um.cc.umich.edu}
+\discipline0{mathematics}
+\highestdegree0{PhD}
+\degreeyear0{1972}
+\oneaddressandphone{
+2904 Washtenaw Avenue, Apt. 1B\\
+Ypsilanti, MI 48198\\
+(313) 434-1815
+}
+\immigrationstatus{US citizen}
+\typeofpositiondesired{Permanent}
+% Put your own LaTeX commands and text after this line.
+\end{document}
diff --git a/macros/latex209/contrib/ibmres-tex/nres_u_f.txt b/macros/latex209/contrib/ibmres-tex/nres_u_f.txt
new file mode 100644
index 0000000000..005345e8e4
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/nres_u_f.txt
@@ -0,0 +1,128 @@
+% 10/08/93 %
+% NON-latex RESume file, Uncommented, Filled in, %
+% /pub/ibmres-tex/nres_u_f.txt %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then add your own text %
+% at the end. %
+\name{George B. Leeman, Jr.}
+\preferredtitle0{Mr. Leeman}
+\school0{The University of Michigan}
+\email{leeman at um.cc.umich.edu}
+\discipline0{mathematics}
+\highestdegree0{PhD}
+\degreeyear0{1972}
+\oneaddressandphone{
+2904 Washtenaw Avenue, Apt. 1B\\
+Ypsilanti, MI 48198\\
+(313) 434-1815
+}
+\immigrationstatus{US citizen}
+\typeofpositiondesired{Permanent}
+ George B. Leeman, Jr.
+
+Work Address Home Address
+The University of Michigan 2904 Washtenaw Avenue, Apt. 1B
+Department of Electrical Engineering Ypsilanti, MI 48198
+ and Computer Science (313) 434-1815
+Ann Arbor, MI 48109-2122
+(313) 764--8504
+leeman@um.cc.umich.edu
+
+Present Status: Postdoc Student Immigration Status: US citizen
+
+Type of Position Desired: Permanent Available Date: June, 1973
+
+Objective To obtain a research or development position in the areas of
+ stochastic analysis or program correctness.
+
+Education
+
+Aug. 1972 The University of Michigan Ann Arbor, MI
+ PhD in Mathematics; advisor: Peter L. Duren; thesis title: The
+ constrained coefficient problem for typically real functions.
+
+ GPA: 8.217 out of 9.000.
+
+May 1969 The University of Michigan Ann Arbor, MI
+ MA in Mathematics GPA: 8.041 out of 9.000.
+
+June 1968 Yale University New Haven, CT
+ BA in Mathematics GPA: abolished 11/30/67; class percentile:
+ 97.
+
+Employment
+
+summers, 1970, The University of Michigan Ann Arbor, MI
+1971 Instructor, teaching undergraduate introductory and
+
+ intermediate calculus courses.
+
+summers, Perkin-Elmer Corporation Norwalk, CT
+1965--1969 Scientific programming for problems in engineering and
+ physics.
+
+Skills Programming in FORTRAN, IBM 360 Assembler, SNOBOL4, LISP, C.
+
+Honors National Science Foundation Traineeship, September, 1968 to
+
+ August, 1972.
+
+ BA Magna Cum Laude, honors with exceptional distinction, 1968.
+
+ Election to Phi Beta Kappa, November, 1967.
+
+Publications The seventh coefficient of odd symmetric univalent functions,
+ G. B. Leeman, Jr., to appear in Duke Mathematical Journal,
+
+ vol. 43, no. 2, June, 1973.
+
+ A new proof for an inequality of Jenkins, G. B. Leeman, Jr.,
+ Proceedings of the American Mathematical Society, vol. 54,
+ Jan. 1973, 114--116.
+
+ The constrained coefficient problem for typically real
+ functions, G. B. Leeman, Jr., Transactions of the American
+ Mathematical Society, vol. 186, Dec. 1972, 177--189.
+
+Miscellaneous Member of Board of Directors, Ridgefield Symphony Orchestra,
+ Ridgefield, CT.
+
+References Peter L. Duren, Professor, The University of Michigan, (313)
+ 764-0202. Email: duren@um.cc.umich.edu
+
+ Bernard A. Galler, Professor, The University of Michigan,
+ (313) 764-5832. Email: bernard_a._galler@um.cc.umich.edu
+
+ Maxwell O. Reade, Professor, The University of Michigan, (313)
+ 764-7227.
+==============================================================================
+The University of Michigan
+Department of Electrical Engineering and Computer Science, 1301 Beal Avenue,
+Ann Arbor, MI 48109-2122
+------------------------------------------------------------------------------
+George B. Leeman, Jr.
+leeman at um.cc.umich.edu
+(313) 764-8504
+ September 21, 1993
+Manager, PhD Recruiting
+
+IBM Thomas J. Watson Research Center
+P. O. Box 218
+Yorktown Heights, New York 10598
+
+Dear Sir:
+
+I would like to apply for a position in the research and development divisions
+of your corporation. I have included a resume and if necessary can send a few
+abstracts from some of my published papers.
+
+I can be reached at the number shown above every afternoon from 1:00 P.M. to
+5:00 P.M. I answer electronic mail throughout each day, including weekends.
+
+Thank you for your consideration.
+
+Sincerely yours,
+
+George B. Leeman, Jr.
+encl: resume
diff --git a/macros/latex209/contrib/ibmres-tex/res_c_e.ltx b/macros/latex209/contrib/ibmres-tex/res_c_e.ltx
new file mode 100644
index 0000000000..c9b6b46c2d
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/res_c_e.ltx
@@ -0,0 +1,151 @@
+% 10/08/93 %
+% ibm RESume file, Commented, Empty, /pub/ibmres-tex/res_c_e.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Fill in arguments, then run LaTeX on this file to produce %
+% resume, cover letter, mailing label, and selected abstracts. % %
+% First command must be as shown. 12pt may be changed to 11pt to get output in
+% eleven point fonts. If [12pt,ibmres] is changed to [ibmres], the output will
+% be in ten point fonts.
+\documentstyle[12pt,ibmres]{article}
+% Any of your own macro definitions should follow this comment line.
+% Next line required by LaTeX.
+\begin{document}
+% Name.
+\name{}
+% Preferred title of address, e.g. Mr., Miss, Mrs., Ms., Dr., first name, etc.,
+% followed by last name. Could be used after "Dear" and before ":" by an
+% automated applicant system to send you a letter.
+\preferredtitle0{}
+% School. Name of current school you are attending.
+\school0{}
+% Electronic mail address; use \email{} if you have no such address.
+\email{}
+% Discipline. Technical area in which you are earning your degree.
+\discipline0{}
+% Highest degree you will have when you leave current program.
+\highestdegree0{}
+% Degree year. Year in which you obtain(ed) highest degree.
+\degreeyear0{}
+% Work address and phone. Either use \oneaddressandphone for just one (home)
+% address, or use both \workaddressandphone and \homeaddressandphone for two
+% addresses. Separate logical lines of address and phone with \\.
+\workaddressandphone{
+}
+% Home address and phone; see preceding comment.
+\homeaddressandphone{
+}
+% Present status, e.g. Postdoc, PhD, MS, BS Student, etc.
+\presentstatus{}
+% Immigration status, e.g. U.S. citizen, Permanent Resident, Student Visa.
+\immigrationstatus{}
+% Type of employment position desired: Permanent, Summer, Temporary (e.g.
+% co-op), etc.
+\typeofpositiondesired{}
+% Available date when you could start work.
+\availabledate{}
+% Employer specific items: typically these tags are omitted (or retained with
+% null arguments) for general resumes. Samples:
+% \employerspecifictitle{IBM Fellowship Holder}
+% \employerspecificdata{dates, 9/88-6/90}
+% and
+% \employerspecifictitle{IBM Work Experience}
+% \employerspecificdata{(give location, date, manager name)}
+\employerspecifictitle{}
+\employerspecificdata{}
+% Objective, a brief description of position desired.
+\objective{}
+% Education: this tag should be followed by >= 1 occurrences of the next six
+% tags: \when, \place, \location, \degree, \gpa, and \outof.
+\education{}
+% Degree date.
+\when{}
+% Place where degree was or will be earned.
+\place{}
+% Location of place.
+\location{}
+% Degree and subject. Could also include thesis title and advisor, if relevant.
+\degree{}
+% Grade point average for the degree.
+\gpa{}
+\outof{}
+% Employment: if this tag is present, it should be followed by >= 1 occurrences
+% of the next four tags: \when, \place, \location, and \text.
+\employment{}
+% Employment dates.
+\when{}
+% Place of employment.
+\place{}
+% Location of employer.
+\location{}
+% Text describing work you did for employer.
+\text{
+}
+% Skills: if this tag is present, it should be followed by >=1 occurrences of
+% the \text tag. This tag is often not needed for general resumes.
+\skills{}
+% Text for skills section.
+\text{
+}
+% Honors: if this tag is present, it should be followed by >=1 occurrences of
+% the \text tag.
+\honors{}
+% Text for honors section.
+\text{
+}
+% Publications: if this tag is present, it should be followed by >=1 occurrences
+% of the \text tag.
+\publications{}
+% Text for publications section.
+\text{
+}
+% Miscellaneous: if this tag is present, it should be followed by >=1
+% occurrences of the \text tag. This tag is often not needed for general
+% resumes.
+\miscellaneous{}
+% References: this tag should be followed by >= 1 occurrences of the tags
+% \referencename and \referenceemail.
+\references{}
+% Reference name, typically with title, location, and phone number.
+\referencename{}
+% Reference electronic mail address; use \referenceemail{} if no email address.
+\referenceemail{}
+% Cover letter. Include at least two logical lines separated by \\ for the top
+% portion of the letterhead. The first line is set in a large font, and the
+% remaining lines are joined by commas and appear in a small font under the
+% first line. If you use \coverletter{} then the related tags \rightlines,
+% \recipient, \letterbody, \closing, \cc, \encl, \ps, and \letterlabel will be
+% ignored.
+\coverletter{
+}
+% Lines to be placed at the right of the letterhead, in a small font. They
+% should be separated by \\.
+\rightlines{
+}
+% Recipient of cover letter and address; use \\ to separate lines.
+\recipient{
+}
+% Letter body, with a blank line separating each paragraph.
+\letterbody{
+}
+% Closing of cover letter, with \\ separating lines. Extra space will be placed
+% between the first and second lines.
+\closing{
+}
+% Carbon copy list. This tag is optional. Separate members of list by \\.
+% \cc{} will be ignored.
+\cc{}
+% Enclosures of cover letter, with \\ separating lines. This tag is optional.
+\encl{resume\\selected abstracts}
+% Postscript. This tag is optional. \ps{} will be ignored.
+\ps{}
+% Letter label with addressee and return address for an envelope.
+\letterlabel{}
+% Abstracts: if this tag is present, it should be followed by >=1 occurrences
+% of the \text tag.
+\abstracts{}
+% Text for abstract section.
+\text{
+}
+% Next line required by LaTeX. This should be the final tag.
+\end{document}
diff --git a/macros/latex209/contrib/ibmres-tex/res_c_f.ltx b/macros/latex209/contrib/ibmres-tex/res_c_f.ltx
new file mode 100644
index 0000000000..c528a8c94d
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/res_c_f.ltx
@@ -0,0 +1,268 @@
+% 10/08/93 %
+% ibm RESume file, Commented, Filled in, /pub/ibmres-tex/res_c_f.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then run LaTeX on this %
+% file to produce resume, cover letter, mailing label, and selected %
+% abstracts. %
+% First command must be as shown. 12pt may be changed to 11pt to get output in
+% eleven point fonts. If [12pt,ibmres] is changed to [ibmres], the output will
+% be in ten point fonts.
+\documentstyle[12pt,ibmres]{article}
+% Any of your own macro definitions should follow this comment line.
+% Next line required by LaTeX.
+\begin{document}
+% Name.
+\name{George B. Leeman, Jr.}
+% Preferred title of address, e.g. Mr., Miss, Mrs., Ms., Dr., first name, etc.,
+% followed by last name. Could be used after "Dear" and before ":" by an
+% automated applicant system to send you a letter.
+\preferredtitle0{Mr. Leeman}
+% School. Name of current school you are attending.
+\school0{The University of Michigan}
+% Electronic mail address; use \email{} if you have no such address.
+\email{leeman at um.cc.umich.edu}
+% Discipline. Technical area in which you are earning your degree.
+\discipline0{mathematics}
+% Highest degree you will have when you leave current program.
+\highestdegree0{PhD}
+% Degree year. Year in which you obtain(ed) highest degree.
+\degreeyear0{1972}
+% Work address and phone. Either use \oneaddressandphone for just one (home)
+% address, or use both \workaddressandphone and \homeaddressandphone for two
+% addresses. Separate logical lines of address and phone with \\.
+\workaddressandphone{
+The University of Michigan\\
+Department of Electrical Engineering and Computer Science\\
+Ann Arbor, MI 48109-2122\\
+(313) 764--8504
+}
+% Home address and phone; see preceding comment.
+\homeaddressandphone{
+2904 Washtenaw Avenue, Apt. 1B\\
+Ypsilanti, MI 48198\\
+(313) 434-1815
+}
+% Present status, e.g. Postdoc, PhD, MS, BS Student, etc.
+\presentstatus{Postdoc Student}
+% Immigration status, e.g. U.S. citizen, Permanent Resident, Student Visa.
+\immigrationstatus{US citizen}
+% Type of employment position desired: Permanent, Summer, Temporary (e.g.
+% co-op), etc.
+\typeofpositiondesired{Permanent}
+% Available date when you could start work.
+\availabledate{June, 1973}
+% Employer specific items: typically these tags are omitted (or retained with
+% null arguments) for general resumes. Samples:
+% \employerspecifictitle{IBM Fellowship Holder}
+% \employerspecificdata{dates, 9/88-6/90}
+% and
+% \employerspecifictitle{IBM Work Experience}
+% \employerspecificdata{(give location, date, manager name)}
+\employerspecifictitle{}
+\employerspecificdata{}
+% Objective, a brief description of position desired.
+\objective{To obtain a research or development position in the areas of
+stochastic analysis or program correctness.}
+% Education: this tag should be followed by >= 1 occurrences of the next six
+% tags: \when, \place, \location, \degree, \gpa, and \outof.
+\education{}
+% Degree date.
+\when{Aug. 1972}
+% Place where degree was or will be earned.
+\place{The University of Michigan}
+% Location of place.
+\location{Ann Arbor, MI}
+% Degree and subject. Could also include thesis title and advisor, if relevant.
+\degree{PhD in Mathematics; advisor: Peter L. Duren; thesis title:
+The constrained coefficient problem for typically real functions.}
+% Grade point average for the degree.
+\gpa{8.217}
+\outof{9.000}
+% Degree date.
+\when{May 1969}
+% Place where degree was or will be earned.
+\place{The University of Michigan}
+% Location of place.
+\location{Ann Arbor, MI}
+% Degree and subject. Could also include thesis title and advisor, if relevant.
+\degree{MA in Mathematics}
+% Grade point average for the degree.
+\gpa{8.041}
+\outof{9.000}
+% Degree date.
+\when{June 1968}
+% Place where degree was or will be earned.
+\place{Yale University}
+% Location of place.
+\location{New Haven, CT}
+% Degree and subject. Could also include thesis title and advisor, if relevant.
+\degree{BA in Mathematics}
+% Grade point average for the degree.
+\gpa{abolished 11/30/67; class percentile: 97.}
+\outof{}
+% Employment: if this tag is present, it should be followed by >= 1 occurrences
+% of the next four tags: \when, \place, \location, and \text.
+\employment{}
+% Employment dates.
+\when{summers, 1970, 1971}
+% Place of employment.
+\place{The University of Michigan}
+% Location of employer.
+\location{Ann Arbor, MI}
+% Text describing work you did for employer.
+\text{Instructor, teaching undergraduate introductory and intermediate
+calculus courses.}
+% Employment dates.
+\when{summers, 1965--1969}
+% Place of employment.
+\place{Perkin-Elmer Corporation}
+% Location of employer.
+\location{Norwalk, CT}
+% Text describing work you did for employer.
+\text{Scientific programming for problems in engineering and physics.}
+% Skills: if this tag is present, it should be followed by >=1 occurrences of
+% the \text tag. This tag is often not needed for general resumes.
+\skills{}
+% Text for skills section.
+\text{Programming in FORTRAN, IBM 360 Assembler, SNOBOL4, LISP, C.}
+% Honors: if this tag is present, it should be followed by >=1 occurrences of
+% the \text tag.
+\honors{}
+% Text for honors section.
+\text{National Science Foundation Traineeship, September, 1968 to August, 1972.}
+% Text for honors section.
+\text{BA Magna Cum Laude, honors with exceptional distinction, 1968.}
+% Text for honors section.
+\text{Election to Phi Beta Kappa, November, 1967.}
+% Publications: if this tag is present, it should be followed by >=1 occurrences
+% of the \text tag.
+\publications{}
+% Text for publications section.
+\text{The seventh coefficient of odd symmetric univalent functions,
+G. B. Leeman, Jr.,
+to appear in Duke Mathematical Journal, vol. 43, no. 2, June,
+1973.}
+% Text for publications section.
+\text{A new proof for an inequality of Jenkins,
+G. B. Leeman, Jr.,
+Proceedings of the American Mathematical Society, vol. 54, Jan.
+1973, 114--116.}
+% Text for publications section.
+\text{The constrained coefficient problem for typically real functions,
+G. B. Leeman, Jr.,
+Transactions of the American Mathematical Society, vol. 186,
+Dec. 1972, 177--189.}
+% Miscellaneous: if this tag is present, it should be followed by >=1
+% occurrences of the \text tag. This tag is often not needed for general
+% resumes.
+\miscellaneous{Member of Board of Directors, Ridgefield Symphony Orchestra,
+Ridgefield, CT.}
+% References: this tag should be followed by >= 1 occurrences of the tags
+% \referencename and \referenceemail.
+\references{}
+% Reference name, typically with title, location, and phone number.
+\referencename{Peter L. Duren, Professor, The University of Michigan,
+(313) 764-0202.}
+% Reference electronic mail address; use \referenceemail{} if no email address.
+\referenceemail{duren at um.cc.umich.edu}
+% Reference name, typically with title, location, and phone number.
+\referencename{Bernard A. Galler, Professor, The University of Michigan,
+(313) 764-5832.}
+% Reference electronic mail address; use \referenceemail{} if no email address.
+\referenceemail{bernard\_a.\_galler at um.cc.umich.edu}
+% Reference name, typically with title, location, and phone number.
+\referencename{Maxwell O. Reade, Professor, The University of Michigan,
+(313) 764-7227.}
+% Reference electronic mail address; use \referenceemail{} if no email address.
+\referenceemail{}
+% Cover letter. Include at least two logical lines separated by \\ for the top
+% portion of the letterhead. The first line is set in a large font, and the
+% remaining lines are joined by commas and appear in a small font under the
+% first line. If you use \coverletter{} then the related tags \rightlines,
+% \recipient, \letterbody, \closing, \cc, \encl, \ps, and \letterlabel will be
+% ignored.
+\coverletter{
+The University of Michigan\\
+Department of Electrical Engineering and Computer Science\\
+1301 Beal Avenue\\
+Ann Arbor, MI 48109-2122
+}
+% Lines to be placed at the right of the letterhead, in a small font. They
+% should be separated by \\.
+\rightlines{
+George B. Leeman, Jr.\\
+leeman at um.cc.umich.edu\\
+(313) 764-8504
+}
+% Recipient of cover letter and address; use \\ to separate lines.
+\recipient{
+Manager, PhD Recruiting\\
+IBM Thomas J. Watson Research Center\\
+P. O. Box 218\\
+Yorktown Heights, New York 10598
+}
+% Letter body, with a blank line separating each paragraph.
+\letterbody{
+Dear Sir:
+
+\bigskip I would like to apply for a position in the research and development
+divisions of your corporation. I have included a resume and a few abstracts
+from some of my published papers.
+
+\bigskip I can be reached at the number shown above every afternoon from
+1:00 P.M. to 5:00 P.M. I answer electronic mail throughout each day, including
+weekends.
+
+\bigskip Thank you for your consideration.
+}
+% Closing of cover letter, with \\ separating lines. Extra space will be placed
+% between the first and second lines.
+\closing{
+Sincerely yours,\\
+George B. Leeman, Jr.
+}
+% Carbon copy list. This tag is optional. Separate members of list by \\.
+% \cc{} will be ignored.
+\cc{}
+% Enclosures of cover letter, with \\ separating lines. This tag is optional.
+\encl{resume\\selected abstracts}
+% Postscript. This tag is optional. \ps{} will be ignored.
+\ps{}
+% Letter label with addressee and return address for an envelope.
+\letterlabel{}
+% Abstracts: if this tag is present, it should be followed by >=1 occurrences
+% of the \text tag.
+\abstracts{}
+% Text for abstract section.
+\text{
+{\em The seventh coefficient of odd symmetric univalent functions, by
+G. B. Leeman, Jr.}\vskip 3ex
+Let $S_{odd}$ be the collection of all functions $f(z) = z +
+c_3z^3 + c_5z^5 + c_7z^7 + \cdots$ odd, analytic, and one-to-one in the unit
+disk. In 1933 Fekete and Szeg\"o showed that for all $f$ in $S_{odd}$, $|c_5|
+\leq 1/2 + e^{-2/3}$, but no sharp bounds have been found since that time, even
+for the subclass of $S_{odd}$ with real coefficients. In this paper we find the
+sharp bound $|c_7|\leq 1090/1083$ for this subclass, and we identify all
+extremal functions.\vskip 7 ex
+}
+% Text for abstract section.
+\text{
+{\em A new proof for an inequality of Jenkins, by G. B. Leeman, Jr.}\vskip 3 ex
+A new proof of Jenkins' inequality
+$${\rm Re}(e^{2i\theta}a_3 - e^{2i\theta} a_2^2 - \tau e^{i\theta}a_2) \leq 1 +
+{3\over8} \tau^2 - {1\over4}\tau^2 \log ({\tau\over4}),\ \ 0 \leq \tau \leq 4,$$
+for univalent functions $f(z) = z + \sum_{n=2}^\infty a_n z^n$ is
+presented.\vskip 7 ex
+}
+% Text for abstract section.
+\text{
+{\em The constrained coefficient problem for typically real functions, by
+G. B. Leeman, Jr.}\vskip 3 ex
+Let $-2 \leq c \leq 2$. In this paper we find the precise upper
+and lower bounds on the $n$th Taylor coefficient $a_n$ of functions $f(z) = z +
+c z^2 + \sum_{k=3}^\infty a_k z^k$ typically real in the unit disk for
+$n=3,4,\cdots \ .$ In addition all the extremal functions are identified.
+}
+% Next line required by LaTeX. This should be the final tag.
+\end{document}
diff --git a/macros/latex209/contrib/ibmres-tex/res_u_e.ltx b/macros/latex209/contrib/ibmres-tex/res_u_e.ltx
new file mode 100644
index 0000000000..80a464717a
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/res_u_e.ltx
@@ -0,0 +1,70 @@
+% 10/08/93 %
+% ibm RESume file, Uncommented, Empty, /pub/ibmres-tex/res_u_e.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Fill in arguments, then run LaTeX on this file to produce %
+% resume, cover letter, mailing label, and selected abstracts. %
+\documentstyle[12pt,ibmres]{article}
+\begin{document}
+\name{}
+\preferredtitle0{}
+\school0{}
+\email{}
+\discipline0{}
+\highestdegree0{}
+\degreeyear0{}
+\workaddressandphone{
+}
+\homeaddressandphone{
+}
+\presentstatus{}
+\immigrationstatus{}
+\typeofpositiondesired{}
+\availabledate{}
+\employerspecifictitle{}
+\employerspecificdata{}
+\objective{}
+\education{}
+\when{}
+\place{}
+\location{}
+\degree{}
+\gpa{}
+\outof{}
+\employment{}
+\when{}
+\place{}
+\location{}
+\text{
+}
+\skills{}
+\text{
+}
+\honors{}
+\text{
+}
+\publications{}
+\text{
+}
+\miscellaneous{}
+\references{}
+\referencename{}
+\referenceemail{}
+\coverletter{
+}
+\rightlines{
+}
+\recipient{
+}
+\letterbody{
+}
+\closing{
+}
+\cc{}
+\encl{resume\\selected abstracts}
+\ps{}
+\letterlabel{}
+\abstracts{}
+\text{
+}
+\end{document}
diff --git a/macros/latex209/contrib/ibmres-tex/res_u_f.ltx b/macros/latex209/contrib/ibmres-tex/res_u_f.ltx
new file mode 100644
index 0000000000..178ac31fc3
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/res_u_f.ltx
@@ -0,0 +1,163 @@
+% 10/08/93 %
+% ibm RESume file, Uncommented, Filled in, /pub/ibmres-tex/res_u_f.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Change the text in the arguments, then run LaTeX on this %
+% file to produce resume, cover letter, mailing label, and selected %
+% abstracts. %
+\documentstyle[12pt,ibmres]{article}
+\begin{document}
+\name{George B. Leeman, Jr.}
+\preferredtitle0{Mr. Leeman}
+\school0{The University of Michigan}
+\email{leeman@um.cc.umich.edu}
+\discipline0{mathematics}
+\highestdegree0{PhD}
+\degreeyear0{1972}
+\workaddressandphone{
+The University of Michigan\\
+Department of Electrical Engineering and Computer Science\\
+Ann Arbor, MI 48109-2122\\
+(313) 764--8504
+}
+\homeaddressandphone{
+2904 Washtenaw Avenue, Apt. 1B\\
+Ypsilanti, MI 48198\\
+(313) 434-1815
+}
+\presentstatus{Postdoc Student}
+\immigrationstatus{US citizen}
+\typeofpositiondesired{Permanent}
+\availabledate{June, 1973}
+\employerspecifictitle{}
+\employerspecificdata{}
+\objective{To obtain a research or development position in the areas of
+stochastic analysis or program correctness.}
+\education{}
+\when{Aug. 1972}
+\place{The University of Michigan}
+\location{Ann Arbor, MI}
+\degree{PhD in Mathematics; advisor: Peter L. Duren; thesis title:
+The constrained coefficient problem for typically real functions.}
+\gpa{8.217}
+\outof{9.000}
+\when{May 1969}
+\place{The University of Michigan}
+\location{Ann Arbor, MI}
+\degree{MA in Mathematics}
+\gpa{8.041}
+\outof{9.000}
+\when{June 1968}
+\place{Yale University}
+\location{New Haven, CT}
+\degree{BA in Mathematics}
+\gpa{abolished 11/30/67; class percentile: 97.}
+\outof{}
+\employment{}
+\when{summers, 1970, 1971}
+\place{The University of Michigan}
+\location{Ann Arbor, MI}
+\text{Instructor, teaching undergraduate introductory and intermediate
+calculus courses.}
+\when{summers, 1965--1969}
+\place{Perkin-Elmer Corporation}
+\location{Norwalk, CT}
+\text{Scientific programming for problems in engineering and physics.}
+\skills{}
+\text{Programming in FORTRAN, IBM 360 Assembler, SNOBOL4, LISP, C.}
+\honors{}
+\text{National Science Foundation Traineeship, September, 1968 to August, 1972.}
+\text{BA Magna Cum Laude, honors with exceptional distinction, 1968.}
+\text{Election to Phi Beta Kappa, November, 1967.}
+\publications{}
+\text{The seventh coefficient of odd symmetric univalent functions,
+G. B. Leeman, Jr.,
+to appear in Duke Mathematical Journal, vol. 43, no. 2, June,
+1973.}
+\text{A new proof for an inequality of Jenkins,
+G. B. Leeman, Jr.,
+Proceedings of the American Mathematical Society, vol. 54, Jan.
+1973, 114--116.}
+\text{The constrained coefficient problem for typically real functions,
+G. B. Leeman, Jr.,
+Transactions of the American Mathematical Society, vol. 186,
+Dec. 1972, 177--189.}
+\miscellaneous{Member of Board of Directors, Ridgefield Symphony Orchestra,
+Ridgefield, CT.}
+\references{}
+\referencename{Peter L. Duren, Professor, The University of Michigan,
+(313) 764-0202.}
+\referenceemail{duren@um.cc.umich.edu}
+\referencename{Bernard A. Galler, Professor, The University of Michigan,
+(313) 764-5832.}
+\referenceemail{bernard\_a.\_galler@um.cc.umich.edu}
+\referencename{Maxwell O. Reade, Professor, The University of Michigan,
+(313) 764-7227.}
+\referenceemail{}
+\coverletter{
+The University of Michigan\\
+Department of Electrical Engineering and Computer Science\\
+1301 Beal Avenue\\
+Ann Arbor, MI 48109-2122
+}
+\rightlines{
+George B. Leeman, Jr.\\
+leeman at um.cc.umich.edu\\
+(313) 764-8504
+}
+\recipient{
+Manager, PhD Recruiting\\
+IBM Thomas J. Watson Research Center\\
+P. O. Box 218\\
+Yorktown Heights, New York 10598
+}
+\letterbody{
+Dear Sir:
+
+\bigskip I would like to apply for a position in the research and development
+divisions of your corporation. I have included a resume and a few abstracts
+from some of my published papers.
+
+\bigskip I can be reached at the number shown above every afternoon from
+1:00 P.M. to 5:00 P.M. I answer electronic mail throughout each day, including
+weekends.
+
+\bigskip Thank you for your consideration.
+}
+\closing{
+Sincerely yours,\\
+George B. Leeman, Jr.
+}
+\cc{}
+\encl{resume\\selected abstracts}
+\ps{}
+\letterlabel{}
+\abstracts{}
+\text{
+{\em The seventh coefficient of odd symmetric univalent functions, by
+G. B. Leeman, Jr.}\vskip 3ex
+Let $S_{odd}$ be the collection of all functions $f(z) = z +
+c_3z^3 + c_5z^5 + c_7z^7 + \cdots$ odd, analytic, and one-to-one in the unit
+disk. In 1933 Fekete and Szeg\"o showed that for all $f$ in $S_{odd}$, $|c_5|
+\leq 1/2 + e^{-2/3}$, but no sharp bounds have been found since that time, even
+for the subclass of $S_{odd}$ with real coefficients. In this paper we find the
+sharp bound $|c_7|\leq 1090/1083$ for this subclass, and we identify all
+extremal functions.\vskip 7 ex
+}
+\text{
+{\em A new proof for an inequality of Jenkins, by G. B. Leeman, Jr.}\vskip 3 ex
+A new proof of Jenkins' inequality
+$${\rm Re}(e^{2i\theta}a_3 - e^{2i\theta} a_2^2 - \tau e^{i\theta}a_2) \leq 1 +
+{3\over8} \tau^2 - {1\over4}\tau^2 \log ({\tau\over4}),\ \ 0 \leq \tau \leq 4,$$
+for univalent functions $f(z) = z + \sum_{n=2}^\infty a_n z^n$ is
+presented.\vskip 7 ex
+}
+\text{
+{\em The constrained coefficient problem for typically real functions, by
+G. B. Leeman, Jr.}\vskip 3 ex
+Let $-2 \leq c \leq 2$. In this paper we find the precise upper
+and lower bounds on the $n$th Taylor coefficient $a_n$ of functions $f(z) = z +
+c z^2 + \sum_{k=3}^\infty a_k z^k$ typically real in the unit disk for
+$n=3,4,\cdots \ .$ In addition all the extremal functions are identified.
+}
+\end{document}
diff --git a/macros/latex209/contrib/ibmres-tex/simpres.ltx b/macros/latex209/contrib/ibmres-tex/simpres.ltx
new file mode 100644
index 0000000000..3e145f776c
--- /dev/null
+++ b/macros/latex209/contrib/ibmres-tex/simpres.ltx
@@ -0,0 +1,71 @@
+% 10/08/93 %
+% IBM simple resume file, /pub/ibmres-tex/simpres.ltx %
+% George B. Leeman, Jr., leeman@watson.ibm.com. %
+% Please read /pub/README.FTP on software.watson.ibm.com before using %
+% this file. Run LaTeX on this file to produce a simple resume, cover %
+% letter, and mailing label. %
+\documentstyle[12pt,ibmres]{article}
+\begin{document}
+\name{George B. Leeman, Jr.}
+\preferredtitle0{Mr. Leeman}
+\school0{The University of Michigan}
+\email{leeman at um.cc.umich.edu}
+\discipline0{mathematics}
+\highestdegree0{PhD}
+\degreeyear0{1972}
+\oneaddressandphone{
+2904 Washtenaw Avenue, Apt. 1B\\
+Ypsilanti, MI 48198\\
+(313) 434-1815
+}
+\presentstatus{BS Student}
+\immigrationstatus{US citizen}
+\typeofpositiondesired{Summer}
+\availabledate{June, 1973}
+\objective{To obtain a position in numerical analysis and/or scientific
+programming.}
+\education{}
+\when{May 1973}
+\place{The University of Michigan}
+\location{Ann Arbor, MI}
+\degree{BA in Mathematics.}
+\gpa{3.603}
+\outof{4.000}
+\references{}
+\referencename{Provided upon request.}
+\referenceemail{}
+\coverletter{
+The University of Michigan\\
+Department of Mathematics\\
+Ann Arbor, MI 48109-2122
+}
+\rightlines{
+George B. Leeman, Jr.\\
+leeman at um.cc.umich.edu\\
+(313) 764-8504
+}
+\recipient{
+Manager, Mid-Hudson Valley Recruiting\\
+Employment Solutions Corporation\\
+P. O. Box 390\\
+Poughkeepsie, New York 12602
+}
+\letterbody{
+Dear Sir:
+
+I would like to apply for a summer, 1973 position within the IBM
+development divisions in the Mid-Hudson Valley region. A resume is
+included.
+
+I can be reached at the number shown above every afternoon from 1:00 PM
+to 5:00 PM. I answer electronic mail throughout each day, including
+weekends.
+
+Thank you for your consideration.
+}
+\closing{Sincerely yours,\\George B. Leeman, Jr.}
+\cc{my mother}
+\encl{resume}
+\ps{P.\ S.\ Thank you for making it possible to send resumes electronically!}
+\letterlabel{}
+\end{document}
diff --git a/macros/latex209/contrib/ifac/IFAC.bst b/macros/latex209/contrib/ifac/IFAC.bst
new file mode 100644
index 0000000000..861adda749
--- /dev/null
+++ b/macros/latex209/contrib/ifac/IFAC.bst
@@ -0,0 +1,1294 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%% End of IFAC.bst %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% ===========================================================================
+%%% @LaTeX-style-file{
+%%% author = "Silvano Balemi",
+%%% version = "1.4",
+%%% date = "12-MAR-1993",
+%%% filename = "IFAC.bst",
+%%% address = "Automatic Control Laboratory
+%%% Swiss Federal Institute of Technology (ETH)
+%%% 8092 Zurich, Switzerland",
+%%% telephone = "+41 (1) 632.55.34",
+%%% FAX = "+41 (1) 262.43.62",
+%%% email = "balemi@aut.ee.ethz.ch (Internet)",
+%%% keywords = "BibTeX, IFAC proceedings, Camera ready,
+%%% publisher style",
+%%% supported = "yes",
+%%% docstring = "BibTeX style file for reference according to
+%%% the instruction of the International Federation
+%%% of Automatic Control (IFAC) (modified from
+%%% alpha.bst)
+%%% To be used with the style files
+%%% IFACarticle.sty, automatica.sty or the substyle file
+%%% harvard.sty .
+%%% It is based on modified version of
+%%% agsm.bst by Peter Williams
+%%% peterw@archsci.arch.su.oz.au",
+%%% }
+%%% ===========================================================================
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ { field.used }
+ { extra.label sort.label list.year }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t f }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ". " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output.yearnull}
+{ 's :=
+ output.state mid.sentence =
+ { ". " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {item.check}
+{ 't :=
+ empty$
+ { "empty " t * " in " * cite$ * warning$ }
+ { skip$ }
+ if$
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {embolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\bf " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {quote}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+% { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ { ", " * t * }
+ { numnames #2 >
+ { "" * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+
+FUNCTION {format.editor.names}
+{ 's :=
+ 'f :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr f format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "(" }
+ { "{vv~}{ll}{, jj}{, ff}" editor format.editor.names
+ editor num.names$ #1 >
+ { ", Eds.)" * }
+ { ", Ed.)" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.editors.reverse}
+{ editor empty$
+ { "(" }
+ { "{ff~}{vv~}{ll}{, jj}" editor format.editor.names
+ editor num.names$ #1 >
+ { ", Eds.)" * }
+ { ", Ed.)" * }
+ if$
+ }
+ if$
+}
+
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "Vol." volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " In: " * series quote * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " ed." * }
+ { edition "t" change.case$ " ed." * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pp.~" pages n.dashify * }
+ { "p.~" pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume embolden field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ",~" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "Chap." }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In: " booktitle quote * }
+ { "In: " booktitle quote * " (" * format.editors.reverse * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "in {\em " journal * "\/} \cite{" * crossref * "}" *}
+ if$
+ }
+ { "In: \citeasnoun{" crossref * "}" * }
+ if$
+
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "in "
+ }
+ { "Vol." volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/} \cite{" * crossref * "}" *}
+ if$
+ }
+ { " \citeasnoun{" * crossref * "}" * }
+ if$
+ }
+ { " \citeasnoun{" * crossref * "}" * }
+ if$
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "in {\em " booktitle * "\/}" * " \cite{" * crossref * "}" *}
+ if$
+ }
+ { "In: \citeasnoun{" crossref * "}" * }
+ if$
+ }
+ { "In: \citeasnoun{" crossref * "}" * }
+ if$
+
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {format.lab.names.abbr}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #2 >
+ { s #1 "{vv~}{ll}" format.name$ " {\em et al.}" * }
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { s #1 "{vv~}{ll}" format.name$ " {\em et al.}" * }
+ { s #1 "{vv~}{ll}" format.name$ " and " *
+ s #2 "{vv~}{ll}" format.name$ *
+ }
+ if$
+ }
+ if$
+ }
+ { s #1 "{vv~}{ll}" format.name$ }
+ if$
+}
+
+FUNCTION {format.lab.names.full}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{vv~}{ll}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+INTEGERS { author.field editor.field organization.field title.field key.field }
+
+FUNCTION {init.field.constants}
+{ #0 'author.field :=
+ #1 'editor.field :=
+ #2 'organization.field :=
+ #3 'title.field :=
+ #4 'key.field :=
+}
+
+FUNCTION {make.list.label}
+{ author.field field.used =
+ { format.authors }
+ { editor.field field.used =
+ { format.editors }
+ { organization.field field.used =
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ { title.field field.used =
+ { format.btitle }
+ { key.field field.used =
+ { key #3 text.prefix$ }
+ { "Internal error :001 on " cite$ * " label" * warning$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {make.full.label}
+{ author.field field.used =
+ { author format.lab.names.full }
+ { editor.field field.used =
+ { editor format.lab.names.full }
+ { organization.field field.used =
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ { title.field field.used =
+ { format.btitle }
+ { key.field field.used =
+ { key #3 text.prefix$ }
+ { "Internal error :001 on " cite$ * " label" * warning$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {make.abbr.label}
+{ author.field field.used =
+ { author format.lab.names.abbr }
+ { editor.field field.used =
+ { editor format.lab.names.abbr }
+ { organization.field field.used =
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ { title.field field.used =
+ { format.btitle }
+ { key.field field.used =
+ { key #3 text.prefix$ }
+ { "Internal error :001 on " cite$ * " label" * warning$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\harvarditem[" write$
+ make.abbr.label write$
+ "]{" write$
+ make.abbr.label write$
+ "}{" write$
+ list.year write$
+ "}{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {list.label.output}
+{ make.list.label " " * write$
+}
+
+FUNCTION {article}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ crossref missing$
+ { journal emphasize "journal" duplicate$ item.check
+ pages empty$
+ {
+ output
+ }
+ {
+ " " *
+ format.vol.num.pages * output
+ }
+ if$
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ author empty$
+ { editor "author and editor" item.check }
+ { crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ title.field field.used =
+ { skip$ }
+ { format.btitle "title" output.check }
+ if$
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ format.edition output
+ publisher "publisher" output.check
+ address output
+ }
+ { format.book.crossref output.nonnull
+ format.edition output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ howpublished output
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ author empty$
+ { editor "author and editor" item.check }
+ { crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ title.field field.used =
+ { skip$ }
+ { format.btitle "title" output.check }
+ if$
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ format.edition output
+ publisher "publisher" output.check
+ address output
+ }
+ { format.book.crossref output.nonnull
+ format.edition output
+ }
+ if$
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ author "author" item.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.edition output
+ format.bvolume output
+ format.chapter.pages output
+ new.block
+ format.number.series output
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages output
+ new.block
+ format.incoll.inproc.crossref output.nonnull
+ }
+ if$
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ author "author" item.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { organization output
+ publisher output
+ }
+ { organization output
+ publisher output
+ address output.nonnull
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ }
+ if$
+ format.pages output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ title.field field.used =
+ { skip$ }
+ { format.btitle "title" output.check }
+ if$
+ format.edition output
+ author empty$
+ { organization empty$
+ { address output }
+ 'skip$
+ if$
+ }
+ { organization output
+ address output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ title.field field.used =
+ { skip$ }
+ { format.title output }
+ if$
+ howpublished output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { title "title" output.check }
+ if$
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ title.field field.used =
+ { skip$ }
+ { format.btitle "title" output.check }
+ if$
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { skip$ }
+ { organization output
+ }
+ if$
+ publisher output
+ }
+ { editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ address output.nonnull
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ list.label.output
+ " (" list.year * ")" * output.yearnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+EXECUTE {init.field.constants}
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { title.field 'field.used := }
+ { key.field 'field.used := }
+ if$
+ }
+ { author.field 'field.used := }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { title.field 'field.used := }
+ { key.field 'field.used := }
+ if$
+ }
+ { editor.field 'field.used := }
+ if$
+ }
+ { author.field 'field.used := }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { title.field 'field.used := }
+ { organization.field 'field.used := }
+ if$
+ }
+ { key.field 'field.used := }
+ if$
+ }
+ { author.field 'field.used := }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { title.field 'field.used := }
+ { organization.field 'field.used := }
+ if$
+ }
+ { key.field 'field.used := }
+ if$
+ }
+ { editor.field 'field.used := }
+ if$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ make.abbr.label
+ title.field field.used =
+ { sort.format.title }
+ { sortify }
+ if$
+ year field.or.null purify$ #-1 #4 substring$ sortify
+ *
+ 'sort.label :=
+}
+
+FUNCTION {first.presort}
+{ calc.label
+ sort.label
+ title.field field.used =
+ { skip$ }
+ { " "
+ *
+ make.list.label sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {first.presort}
+
+SORT
+
+STRINGS { last.sort.label next.extra }
+
+INTEGERS { last.extra.num }
+
+FUNCTION {initialize.last.extra.num}
+{ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ year empty$
+ { "n.d." extra.label emphasize * 'list.year := }
+ { year extra.label emphasize * 'list.year := }
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.last.extra.num}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {second.presort}
+{ make.list.label
+ title.field field.used =
+ { sort.format.title }
+ { sortify }
+ if$
+ " "
+ *
+ list.year field.or.null sortify
+ *
+ " "
+ *
+ title.field field.used =
+ { skip$ }
+ { title field.or.null
+ sort.format.title
+ *
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {second.presort}
+
+SORT
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{xx}" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IFAC.bst %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/ifac/IFACarticle.sty b/macros/latex209/contrib/ifac/IFACarticle.sty
new file mode 100644
index 0000000000..851f63cabc
--- /dev/null
+++ b/macros/latex209/contrib/ifac/IFACarticle.sty
@@ -0,0 +1,705 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% IFACarticle.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% ===========================================================================
+%%% @LaTeX-style-file{
+%%% author = "Silvano Balemi",
+%%% version = "1.8",
+%%% date = "1-SEPT-1993",
+%%% filename = "IFACarticle.sty",
+%%% address = "Automatic Control Laboratory
+%%% Swiss Federal Institute of Technology (ETH)
+%%% 8092 Zurich, Switzerland",
+%%% telephone = "+41 (1) 632.55.34",
+%%% FAX = "+41 (1) 262.43.62",
+%%% email = "balemi@aut.ee.ethz.ch",
+%%% keywords = "LaTeX, IFAC proceedings, Camera ready,
+%%% publisher style",
+%%% supported = "yes. Please send comments via E-mail",
+%%% mainserver = "ifa.ethz.ch"
+%%% docstring = "This is a LaTeX style file for camera ready
+%%% articles according to instructions of the
+%%% International Federation of Automatic
+%%% Control (IFAC).
+%%% The default font size is 10 points, but can be
+%%% used with 9pt, 11pt or 12pt points too.
+%%%
+%%% Usage:
+%%% \documentstyle{IFACarticle}
+%%% \author{...}
+%%% \title{...}
+%%% \abstract{...}
+%%% \keywords{...}
+%%% \maketitle
+%%% ...
+%%% \end{document}
+%%%
+%%% The command "\footernote{TEXT}" puts the
+%%% text TEXT at the bottom of the page
+%%% together with the page number. In order to
+%%% remove footnote and page number, insert
+%%% \thispagestyle{empty}\pagestyle{empty}
+%%% right after the \maketitle command!!
+%%%
+%%% You may want to adjust the position of the
+%%% text on the page (for your specific
+%%% printer) with the commands
+%%% \addtolength{\oddsidemargin}{Xmm} % right Xmm
+%%% \addtolength{\topmargin}{Ymm} % down Ymm
+%%% "
+%%% }
+%%% ===========================================================================
+
+\typeout{Document Style `IFACarticle' <1-SEPT-1993>.}
+
+\def\title#1{\gdef\@title{#1}}
+\def\abstract#1{\gdef\@abstract{#1}}
+\def\keywords#1{\gdef\@keywords{#1}}
+
+\newif\if@mytwocolumn \@mytwocolumntrue
+
+\def\@ptsize{10}
+\@namedef{ds@9pt}{\def\@ptsize{9}}
+\@namedef{ds@10pt}{\def\@ptsize{10}}
+\@namedef{ds@11pt}{\def\@ptsize{11}}
+\@namedef{ds@12pt}{\def\@ptsize{12}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\def\ds@draft{\overfullrule 5pt}
+\@namedef{ds@onecolumn}{\global\@mytwocolumnfalse }
+\@options
+
+\textheight 253mm
+\textwidth 160mm
+\columnsep 8.5mm
+\topmargin -17mm
+\parindent 0mm
+\parskip 1em
+\headsep 2ex
+\headheight 12pt
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+\oddsidemargin 0mm
+\evensidemargin 0mm
+%%%%%%%%% For MATS use following even- and oddsidemargins (printer-dependent)
+% \oddsidemargin 11.1mm
+% \evensidemargin11.1mm
+
+%% This determines space around formulas and indentation
+\newdimen\mathskip
+\newdimen\mathindent
+\newdimen\theoremskip
+\mathskip 1em
+\mathindent 5mm
+\theoremskip 1em
+
+\partopsep \z@
+\topsep 1.3ex
+\parsep \z@
+\itemsep \z@
+%% see further below for lists
+
+
+%% FONT DEFINITION: avoids having to read in font files.
+%%
+%% Check if we have selected 9 points
+\def\@tempa{9}\ifx\@ptsize\@tempa
+\typeout{-- This is a 9 point document}
+\def\@normalsize{\@setsize\normalsize{11pt}\ixpt\@ixpt
+\abovedisplayskip 9pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 7.5pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini \topsep 3pt plus 2pt minus 2pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{8pt}\viipt\@viipt}
+\def\scriptsize{\@setsize\scriptsize{7pt}\vipt\@vipt}
+\def\tiny{\@setsize\tiny{5pt}\ivpt\@ivpt}
+\def\large{\@setsize\large{13.6pt}\xipt\@xipt}
+\def\Large{\@setsize\Large{17pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{20pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{22pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{28pt}\xxpt\@xxpt}
+\fi
+%%
+%% Check if we have selected 10 points
+\def\@tempa{10}\ifx\@ptsize\@tempa
+\typeout{-- This is a 10 point document}
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.0pt}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 11 points
+\def\@tempa{11}\ifx\@ptsize\@tempa
+\typeout{-- This is an 11 point document}
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 12 points
+\def\@tempa{12}\ifx\@ptsize\@tempa
+\typeout{-- This is a 12 point document}
+\def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt
+\abovedisplayskip 1em plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus4pt minus4pt}
+\def\small{\@setsize\small{11.4pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{8pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+
+%% Definitions for PARAGRAPHS
+%%
+\abovedisplayskip 1em plus.3em minus.6em
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus.3em
+\belowdisplayshortskip .6em plus.4em minus.4em
+
+%% Definitions for LISTS
+%%
+\leftmargini 2em
+\leftmarginii 1em
+\leftmarginiii 1em
+\leftmarginiv .5em
+\leftmarginv .5em
+\leftmarginvi .5em
+\marginparwidth 48pt
+\marginparsep 10pt
+\labelsep 5pt
+\leftmargin\leftmargini
+%\labelwidth \z@
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep -\parskip \addtolength{\topsep}{0.5em}}
+\@listI
+\def\@listi{\leftmargin\leftmargini
+ \topsep -\parskip \addtolength{\topsep}{0.5em}}
+\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep \topsep \z@}
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\center{\ifdim \parskip < .5em \theoremskip-\parskip
+\addtolength{\theoremskip}{.5em}\else \theoremskip 0em\fi
+\setlength{\topsep}{\theoremskip}\trivlist \centering\item[]}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+% Modified eqnarray from fleqn.sty to create left-indentation for formulas
+% equation and \[ enironment defined using eqnarray and eqnarray*
+\def\eqnarray{\stepcounter{equation}
+ \let\@currentlabel=\theequation
+ \global\@eqnswtrue
+ \global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+ \abovedisplayskip\mathskip\ifvmode\advance\abovedisplayskip\partopsep\fi
+ \belowdisplayskip\abovedisplayskip
+ \belowdisplayshortskip\abovedisplayskip
+ \abovedisplayshortskip\abovedisplayskip
+ $$\halign to
+ \linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+ {##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue }
+%
+\def\equation{\eqnarray}
+\def\endequation{\endeqnarray}
+%
+\def\[{\begin{eqnarray*}}
+\def\]{\end{eqnarray*}}
+
+\def\theequation{\arabic{equation}}
+
+
+%% ENVIRONMENTS
+\newenvironment{proof}{{\em Proof:\/}}{\hfill~\rule[-0pt]{5pt}{5pt}
+\par\ifdim \parskip < 1em \theoremskip-\parskip
+ \addtolength{\theoremskip}{1em}\else \theoremskip 0em\fi
+ \vskip\theoremskip}
+
+\def\@begintheorem#1#2{\ifdim \parskip < 1em \theoremskip-\parskip
+ \addtolength{\theoremskip}{1em}\else \theoremskip 0em\fi
+ \setlength{\topsep}{\theoremskip}
+ \rm \trivlist \item[\hskip \labelsep{\it #1\ #2}]}
+\def\@opargbegintheorem#1#2#3{\ifdim \parskip < 1em \theoremskip-\parskip
+ \addtolength{\theoremskip}{1em}\else \theoremskip 0em\fi
+ \setlength{\topsep}{\theoremskip}
+ \rm \trivlist \item[\hskip \labelsep{\indent\it #1\ #2\ \rm(#3)}]}
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\setcounter{secnumdepth}{3}
+
+\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \addtolength{\@tempskipa}{-\parskip}
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi \@ifstar
+ {\@ssect{#2}{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+\gdef\@punct{.~~ } % Punctuation after run-in section heading
+
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec{}
+ \else
+ \refstepcounter{#1}
+ \edef\@svsec{{\rm\csname the#1\endcsname}.\hskip .5em }
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax}{\@svsec\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\@punct\csname#1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}}%
+ \fi%
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5#6{\@tempskipa #4\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #5\@hangfrom{\hskip #2}{\interlinepenalty \@M
+ #6\par}\endgroup
+ \else \def\@svsechd{#5\hskip #2\relax #6\@punct}\fi
+ \@xsect{#4}}
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \addtolength{\@tempskipa}{-\parskip}
+ \vskip \@tempskipa
+ \@afterheading
+ \else \global\@nobreakfalse \global\@noskipsectrue
+ \everypar{\if@noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd \endgroup \unskip
+ \hskip -#1
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}\fi\ignorespaces}
+
+% definition for headings
+\def\section{\@startsection{section}{1}{\z@}
+ {5.3ex plus 1.0ex minus .5ex}{1.8ex plus .2ex}{\centering\rm}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{5.3ex plus .3ex minus
+ .5ex}{1.8ex plus .2ex}{\em}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.9ex plus
+ .3ex minus .1ex}{0ex plus .0ex}{\normalsize\em}}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{CONTENTS}
+ \@starttoc{toc}}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{LIST OF FIGURES}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{LIST OF TABLES}\@starttoc{lot}}
+\let\l@table\l@figure
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+ \columnseprule \z@ \columnsep 35pt\twocolumn[\section*{Index}]
+ \parindent\z@ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+
+%% FOOTNOTES
+%
+\skip\footins 10pt plus 4pt minus 2pt
+\footnotesep 12pt
+\footskip 3.5em
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .7\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ $^{\@thefnmark}$ #1}
+
+
+
+%% Definitions for FLOATS
+%%
+%% Normal floats %% Floats on double columns
+\floatsep 12pt plus 2pt minus 2pt \dblfloatsep 12pt plus 2pt minus 2pt
+\textfloatsep 12pt plus 2pt minus 4pt \dbltextfloatsep 12pt plus 2pt minus 4pt
+\@maxsep 20pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@dblfptop 0pt plus 1fil
+\@fpsep 18pt plus 2fil \@dblfpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil \@dblfpbot 0pt plus 1fil
+\def\topfraction{1.0} \def\dbltopfraction{1.0}
+\def\floatpagefraction{0.8} \def\dblfloatpagefraction{0.8}
+\setcounter{topnumber}{2} \setcounter{dbltopnumber}{4}
+%
+\intextsep 12pt plus 2pt minus 2pt
+\setcounter{bottomnumber}{2}
+\def\bottomfraction{.4}
+\setcounter{totalnumber}{4}
+\def\textfraction{.2}
+
+% redefine CAPTION
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}{#1}\par
+ \endgroup}
+
+\def\tablestring{table}
+\def\figurestring{figure}
+
+\long\def\@makecaption#1#2#3{%
+\ifx\figurestring#3
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{\small #1.~}
+ \parbox[t]{\hsize}{\small \hangindent\wd\@tempboxa \hangafter=1%
+ \unhbox\@tempboxa#2}
+\else%
+ \vskip 4pt
+ \setbox\@tempboxa\hbox{\underline{#1~~ #2}}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{\underline{#1}~~ }
+ \parbox{\hsize}{\raggedright\hangindent\wd\@tempboxa \hangafter=1
+ \unhbox\@tempboxa#2}
+ \else\hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi%
+ \vskip 10pt
+\fi%
+}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.~\thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table~\thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+%% TITLE
+
+%% new definition for \thanks{}
+\def\thanks#1{\footnotemark\begingroup\def\protect{\noexpand\protect\noexpand}
+\xdef\@thanks{\mbox{}\@thanks\protect\\[.5em] $^{\@thefnmark}\!$#1}\endgroup}
+
+\def\IFACsymbol#1{\@IFACsymbol{\@nameuse{c@#1}}}
+
+\def\@IFACsymbol#1{\ifcase#1\or *\or **\or ***\or \dagger\or
+\dagger\dagger\or \ddagger\or \ddagger\ddagger\or
+ \mathchar "278\or \mathchar "27B\or \| \else\@ctrerr\fi\relax}
+
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\IFACsymbol{footnote}}
+ \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage \global\@topnum\z@ \@maketitle \fi%
+ \thispagestyle{myheadings}%\@thanks %standard thanks command
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@abstract{}\gdef\@keywords{}
+ \gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{{\parskip 0pt \newpage \null \vskip 6.5em
+ \advance \rightskip by 15mm
+ \advance \leftskip by 15mm
+ {\large\bf \@title \par}
+ \vskip 1.6em {\lineskip .5em
+ \bf\@author\par}
+ \noindent{\footnotesize\vskip .2em \it\@thanks\par}
+ \noindent{\footnotesize\vskip 2.7em {\bf {Abstract}. }\@abstract\par}
+ \noindent{\footnotesize\vskip 1em {\bf {Key Words}. }\@keywords\par}
+ \vskip 3.0em}}
+
+
+\mark{{}{}}
+
+\def\ps@headings{%
+\def\@oddhead{}
+\def\@oddfoot{\hfil \@footernote\ \qquad \thepage}
+\def\@evenhead{}
+\def\@evenfoot{\thepage\qquad \@footernote\ \hfil}
+}
+
+\def\footernote#1{\def\@footernote{#1}}
+\footernote{}
+
+\ps@headings
+\pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
+\if@mytwocolumn \twocolumn \sloppy \flushbottom \fi
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+
+\def\thebibliography#1{\section{REFERENCES}\list
+ {[\arabic{enumi}]}{\labelsep 0pt
+ \labelwidth 0mm \leftmargin\labelwidth
+ \itemindent -4mm \advance\leftmargin 4mm
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+\def\@biblabel#1{\hfill}
+\def\@mynamedef#1{\expandafter\def\csname #1\endcsname}
+\def\bibcite#1#2{\global\@mynamedef{b@#1}{#2}}
+
+
+%% This is mostly taken from: HARVARD.STY Source: FILESERV@SHSU.BITNET
+%% written by Peter Williams' <peterw@archsci.arch.su.OZ.AU>
+
+\def\@hiteml[#1]#2#3#4{\item[]\if@filesw%
+ { \def\protect##1{\string ##1\space}\immediate%
+\write\@auxout{\string\harvardcite{#4}{#2}{#1}{#3}}}\fi%
+\protect\hspace*{-\labelwidth}\protect\hspace*{-\labelsep}\ignorespaces}
+
+\def\@hitem#1#2#3{\item[]\if@filesw%
+ { \def\protect##1{\string ##1\space}\immediate%
+\write\@auxout{\string\harvardcite{#3}{#1}{#1}{#2}}}\fi%
+\protect\hspace*{-\labelwidth}\protect\hspace*{-\labelsep}\ignorespaces}
+
+\def\harvarditem{\@ifnextchar [{\@hiteml}{\@hitem}}
+
+\def\harvardcite#1#2#3#4{%
+ \global\@namedef{bhf@#1}{#2}%
+ \global\@namedef{bha@#1}{#3}%
+ \global\@namedef{bhy@#1}{#4}%
+ \global\@namedef{b@#1}{\csname bhf@#1\endcsname}
+}
+
+\def\cite{\@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+\def\citeasnoun{\@ifnextchar [{\@tempswatrue\@citexasnoun}
+ {\@tempswafalse\@citexasnoun[]}}
+\def\citeyear{\@ifnextchar [{\@tempswatrue\@citexyear}
+ {\@tempswafalse\@citexyear[]}}
+
+\def\@enamedef#1{\expandafter\edef\csname #1\endcsname}
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{\@hisep\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{{\csname b@\@citeb\endcsname\@hysep\csname bhy@\@citeb\endcsname}%
+\global\@enamedef{b@\@citeb}{\csname bha@\@citeb\endcsname}}%
+}}{#1}}
+
+\def\@citexasnoun[#1]#2{%
+\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+\@citeasnoun{{\@ifundefined%
+{b@#2}%
+{{\bf ?}\@warning{Citation `#2' on page \thepage \space undefined}}%
+{{\csname b@#2\endcsname\ (\csname bhy@#2\endcsname}%
+\global\@namedef{b@#2}{\csname bha@#2\endcsname}}%
+}}{#1}}
+
+\def\@citexyear[#1]#2{%
+\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+\@citeyear{{\@ifundefined%
+{b@#2}%
+{{\bf ?}\@warning{Citation `#2' on page \thepage \space undefined}}%
+{{(\csname bhy@#2\endcsname}%
+\global\@namedef{b@#2}{\csname bha@#2\endcsname}}%
+}}{#1}}
+
+\gdef\hysep@agsm{, }\gdef\hisep@agsm{;}%
+\gdef\hysep@dcu{, }\gdef\hisep@dcu{;}%
+\let\@hysep\hysep@agsm \let\@hisep\hisep@agsm
+\def\citationstyle#1{%
+\global\@namedef{@hysep}{\csname hysep@#1\endcsname}%
+\global\@namedef{@hisep}{\csname hisep@#1\endcsname}}
+
+% CHANGE \end{document} - to handle double definitions
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}%
+\def\harvardcite{\@testbibh}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\def\@testbibh #1#2#3{
+ \def\@tempa{#2}\expandafter
+ \ifx \csname bhf@#1\endcsname \@tempa
+ \def\@tempa{#3}\expandafter
+ \ifx \csname bha@#1\endcsname \@tempa
+ \else \@tempswatrue
+ \fi
+ \else
+ \@tempswatrue
+ \fi
+}
+
+
+%DEFAULT DEFINITIONS
+\def\@cite#1#2{({#1\if@tempswa ; #2\fi})}
+\def\@citeasnoun#1#2{{#1\if@tempswa ; #2\fi)}}
+\def\@citeyear#1#2{{#1\if@tempswa ; #2\fi)}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% End of IFACarticle.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/ifac/IFACdoc.tex b/macros/latex209/contrib/ifac/IFACdoc.tex
new file mode 100644
index 0000000000..74cbca608f
--- /dev/null
+++ b/macros/latex209/contrib/ifac/IFACdoc.tex
@@ -0,0 +1,260 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% IFACdoc.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%% More information: see the header of IFACarticle.sty %%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentstyle[twoside]{IFACarticle}
+
+%% For those desperately looking for space, uncomment the next line
+%\parskip 0pt
+
+\newtheorem{theorem}{Theorem}
+\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+\begin{document}
+
+%% useful definition when preparing own reprints
+\setcounter{page}{9}
+\footernote{Presented at the last IFAC World Congress}
+
+\title{SAMPLE LATEX ARTICLE WITH STYLE FILES FOR IFAC PROCEEDINGS}
+
+\author{S. BALEMI\thanks{Automatic Control Laboratory,
+Swiss Federal Institute of Technology (ETH),
+8092 Z\"urich, Switzerland. E-mail: balemi@aut.ee.ethz.ch}}
+
+\abstract{Sample \LaTeX\ article using Latex Style file created for
+proceedings according to formatting directions of the International
+Federation of Automatic Control.}
+
+\keywords{\LaTeX\ style files, Bibliography style files, IFAC proceedings.}
+
+\maketitle
+%% When uncommented, the next line removes page numbers and footernote
+%\thispagestyle{empty}\pagestyle{empty}
+
+\section{INTRODUCTION}
+This paper uses the style file {\tt IFACarticle.sty},
+ created for \LaTeX\ in order to
+format an article according to the ``STYLE NOTES FOR AUTHORS for the
+Preparation of Camera-Ready Copy'' by Pergamon press.
+
+The set of files provided with {\tt IFAC\-article.sty} includes the
+bibliography style file {\tt IFAC.bst}, and the present file, called
+{\tt IFAC\-doc.tex}.
+
+\section{HOW TO USE THE LATEX STYLE FILE}
+
+This style file has been written so to allow, with very few changes,
+the formatting of input that is suitable for the \LaTeX\ {\tt article}
+style.
+First, the \verb+IFACarticle+ style file has to be
+selected with a command of the form
+
+\hspace{\mathindent}\verb+\documentstyle[]{IFACarticle}+
+
+The main differences with the usual {\tt article.sty} pertain to some
+definitions in the titlepage.
+\begin{itemize}
+\item After the name of the author, go to the next line with
+ \verb+\\[2mm]+ for the address.
+\item the syntax for abstract is \verb+\abstract{...}+, not
+ \verb+\begin{abstract}...\end{abstract}+
+\item the syntax for keywords follows the same syntax as that of the
+ abstract: \verb+\keywords{...}+
+\item \verb+\maketitle+ comes after title, abstract
+ and keywords.
+\end{itemize}
+
+In Fig.~\ref{fig-example} we can see an example for the definition of
+the title page and of the main commands needed to compile a \LaTeX\
+file with IFACarticle.sty.
+Note that the title and the section headings must be typed in
+capital letters. Note also that the subsubsection should have no
+number.
+
+\subsection{Options}
+The default font size is 10 points; however, the 9, 11 and 12 point
+font sizes can be selected with the options \verb+9pt+,
+\verb+11pt+ and \verb+12pt+.
+The default format is two-column, and the one-column format is
+obtained only by explicitly selecting the {\tt onecolumn} option.
+
+The default page style has been redefined and is
+``\verb+headings+''. The foot of the page can
+be set with the command \verb+\footernote{TEXT}+, which causes
+\verb+TEXT+ and the page number to appear at the bottom of the page.
+Giving the commands \verb+\thispagestyle{empty}+ and \verb+\pagestyle{empty}+
+just after the \verb+\maketitle+ command removes any text from the
+bottom of the page.
+
+The article can then be printed directly on the mats provided by
+the publisher. However, you may have to
+adjust the position on the page coming from your printer using the commands
+
+\mbox{}\hspace{\mathindent}\verb+\addtolength{\oddsidemargin}{Xmm}+\\
+\mbox{}\hspace{\mathindent}\verb+\addtolength{\topmargin}{Ymm}+.
+
+You can use this style file also when submitting a paper: in this case,
+you should choose the option {\tt 12pt} and {\tt onecolumn}.
+
+\subsection{Other Definitions}
+
+Most changes resulting from the use of IFACarticle.sty should be
+transparent. For instance,
+captions for figures and tables have been modified. Caption of
+tables, however, should be defined before the table item (see for
+instance Table~\ref{table}).
+
+\begin{figure}[bht]
+\begin{center}
+\setlength{\unitlength}{0.0105in}%
+\begin{picture}(242,150)(73,660)
+\put( 75,660){\framebox(240,150){}}
+\put(105,741){\vector( 0, 1){ 66}}
+\put(105,675){\vector( 0, 1){ 57}}
+\put( 96,759){\vector( 1, 0){204}}
+\put(105,789){\line( 1, 0){ 90}}
+\put(195,789){\line( 2,-1){ 90}}
+\put(105,711){\line( 1, 0){ 60}}
+\put(165,711){\line( 5,-3){ 60}}
+\put(225,675){\line( 1, 0){ 72}}
+\put( 96,714){\vector( 1, 0){204}}
+\put( 99,724){\makebox(0,0)[rb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\varphi$}}}
+\put(291,747){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\omega$}}}
+\put(291,702){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\omega$}}}
+\put( 99,795){\makebox(0,0)[rb]{\raisebox{0pt}[0pt][0pt]{\tenrm $M$}}}
+\end{picture}
+\end{center}
+\caption{This is a sample figure. The caption comes after the figure.}
+\end{figure}
+\nocite{TeX}
+
+\begin{table}[hbt]
+\caption{The caption comes before the table.}
+\label{table}
+\begin{center}
+\begin{tabular}{lcccccc}\hline
+&Jan&Mar&May&Jul&Sep&Nov\\\hline
+Day\\
+1& 4& 22\\
+2\\
+3& & &31 &86\\
+4&&&&&107\\
+5&&&&&&189\\\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+\subsubsection*{Environments}
+The environments for theorems, lemmas, {\em etc}\ldots{} can be
+defined with the usual \LaTeX\ command
+\verb+\newtheorem{..}{..}+ \cite{LaTeX,LaTeXD}.
+The proof environment is already defined.
+
+\begin{theorem}[Theorem name]
+Consider the system
+\begin{equation}
+\begin{array}{rrr}
+\dot x&=&A.x+B.u\\[2mm]
+y&=& C.x+D.u
+\end{array}
+\end{equation}
+If $A$ is stable, then the pair $\{A,B\}$ is stabilizable. Moreover,
+this holds for any $B$.
+\end{theorem}
+\begin{proof}
+The proof is trivial.
+\end{proof}
+
+
+\begin{figure}
+\mbox{}\hrulefill
+\begin{verbatim}
+\documentstyle{IFACarticle}
+\begin{document}
+
+\title{SAMPLE LATEX ARTICLE ..}
+\author{S. BALEMI\thanks{Automatic ...}
+\footernote{Presented at ...}
+
+\abstract{Sample \LaTeX\ article ...}
+\keywords{\LaTeX\ style files, ...}
+
+\maketitle
+
+\section{INTRODUCTION}
+
+This paper ...
+
+\bibliographystyle{IFAC}
+\bibliography{bib-file}
+\end{document}
+\end{verbatim}
+\mbox{}\hrulefill
+\caption{Input used to produce this paper.}
+\label{fig-example}
+\end{figure}
+
+\subsection{Citing References}
+You can use \BibTeX\ together with the bibliography style file {\tt IFAC\-.bst}
+to format the references according to IFAC instructions. The
+bibliography style file takes advantage of definitions introduced by
+Peter Williams for the family of harvard bibliography style files.
+The references can be cited with the usual syntax ({\em e.g.\
+\/}\verb+\cite{LaTeX,TeX}+, yielding the citation ``\cite{LaTeX,TeX}'') or
+with the two new commands \verb+\citeasnoun{LaTeX}+ (yielding the
+citation ``\citeasnoun{LaTeX}''), and \verb+\citeyear{LaTeX}+,
+(yielding the citation ``\citeyear{LaTeX}'': useful when the author's name
+is already in the text before the citation). The three commands
+support most options of the original command.
+
+When you have the final version of your article, you can reduce the
+number of final files in the following way. Run
+\BibTeX\ on the \verb+*.aux+ file. This creates a \verb+*.bbl+ file: include this
+into your \LaTeX\ source file at the place where you defined the
+\verb+\bibliography{..}+ command and comment this command out.
+Remove the \verb+*.bbl+ file. Then, your \LaTeX\ file will include
+all the necessary information about your bibliography and no
+\verb+*.bbl+ or \verb+*.bib+ file will be needed.\footnote{Thus you
+can distribute your \LaTeX\ file just by sending the latex source file
+and the style file.}
+
+
+\section{CONCLUSION}
+A sample article for publication in the IFAC Proceedings has been
+presented. It uses the \LaTeX\ style files {\tt
+IFAC\-article.sty}, which formats the article automatically according
+to IFAC instructions.
+
+\nocite{TeX}
+
+\bibliographystyle{IFAC}
+
+%\bibliography{bib-file} % commented if *.bbl file included, as seen below
+
+%%%%%%%%%%%%%%%%% BIBLIOGRAPHY IN THE LaTeX file !!!!! %%%%%%%%%%%%%%%%%%%%%%%%
+%% This is nothing else than the IFACdoc.bbl file that you would %%
+%% obtain with BibTeX: this way, you do not need a separate *.bbl file %%
+%%---------------------------------------------------------------------------%%
+%
+\begin{thebibliography}{xx}
+
+\harvarditem[Knuth]{Knuth}{1989}{TeX}
+Knuth, D. (1989). {\em The {\rm
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}book}. Addison-Wesley.
+
+\harvarditem[Kopka]{Kopka}{1989}{LaTeXD}
+Kopka, H. (1989). {\em \LaTeX, eine Einf\"uhrung}. Addison-Wesley.
+
+\harvarditem[Lamport]{Lamport}{1986}{LaTeX}
+Lamport, L. (1986). {\em A Document Preparation System: \LaTeX, User's Guide
+ and Reference Manual}. Addison Wesley Publishing Company.
+
+\end{thebibliography}
+%%---------------------------------------------------------------------------%%
+
+\end{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% End of IFACdoc.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/ifac/IFACsample.bib b/macros/latex209/contrib/ifac/IFACsample.bib
new file mode 100644
index 0000000000..559c0b6492
--- /dev/null
+++ b/macros/latex209/contrib/ifac/IFACsample.bib
@@ -0,0 +1,96 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%% IFACsample.bib %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+@article{Abl:45,
+ author={B.C. Able},
+ title={The examination of cell nuclei},
+ journal={Birches. J.},
+ year={1945},
+ volume={35},
+ pages={123--126},
+}
+
+@article{Abl:56,
+ author={B.C. Able},
+ title={Nucleic acid content of microscope},
+ journal={Nature},
+ year={1956},
+ volume={135},
+ pages={7--9},
+}
+
+@incollection{AbTaRu:54,
+ author={B.C. Able and R.A. Tagg and M. Rush},
+ title={Enzyme-catalyzed cellular transanimations},
+ pages={125--247},
+ editor={A.F. Round},
+ publisher={Academic Press},
+ year={1954},
+ volume={2},
+ booktitle={Advances in Enzymology},
+ address={New York},
+ edition={3rd},
+}
+
+@book{Bak:63a,
+ author={R.C. Baker},
+ title={Microscopic Staining Techniques},
+ publisher={Butterworths},
+ year={1963},
+ address={London},
+}
+
+@article{Bak:63b,
+ author={R.C. Baker},
+ title={Methods of preparing thin-section slides},
+ journal={J. Brit. Med. Assoc.},
+ year={1963},
+ volume={34},
+ pages={184--186},
+}
+
+@article{ChaRou:66,
+ author={F.H. Charlie and M.B. Routh},
+ title={The Chemical Destination of Toxins},
+ journal={J. Am. Chem. Soc.},
+ year={1966},
+ volume={66},
+ pages={267--269},
+}
+
+@incollection{Dog:58,
+ author={P.R. Dog},
+ title={},
+ booktitle={Chemical Carcinogenesis},
+ publisher={Chapman \& Hall},
+ year={1958},
+ editor={R.W. Brown},
+ chapter={7},
+ volume={II},
+ pages={56--98},
+ address={London},
+}
+
+@book{Keo:58,
+ author={R. Keohane},
+ title={Power and Interdependence: World Politics in Transitions},
+ publisher={Little, Brown \& Co.},
+ year={1958},
+ address={Boston},
+}
+
+@article{Pow:85,
+ author={T. Powers},
+ title={Is there a way out?},
+ journal={Harpers},
+ year={1985},
+ pages={35--47},
+ month=jun,
+}
+
+
+@misc{Sol:89,
+ author={Solo},
+ year={1989},
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%% End of IFACsample.bib %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/macros/latex209/contrib/ifac/IFACsample.tex b/macros/latex209/contrib/ifac/IFACsample.tex
new file mode 100644
index 0000000000..b0a3252f21
--- /dev/null
+++ b/macros/latex209/contrib/ifac/IFACsample.tex
@@ -0,0 +1,249 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%% IFACsample.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentstyle[twoside]{IFACarticle}
+
+\begin{document}
+
+\title{OPEN CHANNEL TRANSIENT FLOW CONTROL BY\\ DISCRETE TIME LQR METHODS}
+
+\author{A. GARCIA\thanks{University of North Carolina at Chapel Hill,
+Department of Computer Science, Chapel Hill, North Carolina, USA}, M.
+HUBBARD\addtocounter{footnote}{-1}\footnotemark
+~~and J.J. DE VRIES\thanks{University of Rochester, Computer
+Science Department, Rochester, NY 14627, USA}
+}
+
+\abstract{A real-time compensation scheme for multipool canals is
+developed using linear quadratic methods. A special response of the
+simple wave equation is used as a basis for developing the performance
+index which is minimized for a linear method of characteristic flow
+model (discrete time). State estimation, using only depths adjacent to
+underflow gates, is shown always to be possible. Fixed compensation
+for a large flow transition is demonstrated in an example where the
+controlled objet is a realistic, nonlinear numerical flow model.}
+
+\keywords{Distributed parameter systems; hydraulic systems; water
+supply; flow control; partial differential equations; civil
+engineering}
+
+\maketitle
+\thispagestyle{empty}\pagestyle{empty}
+
+\section{INTRODUCTION}
+
+The operation of modern canals is quite complex - a hierarchical
+control system is typically employed to minimize operational expenses
+and schedule and regulate the actual flow of water. The main concern
+here is with the lowest level control measure - regulation (see Fig.
+\ref{f:canal}).
+
+Disturbances caused by wind, rain, inaccurately predicted usageat
+turnouts, etc. and imperfect knowledge of the system parameters (e.g.
+gate discharge and Manning coefficients) are reasons why
+actual flows may deviate from scheduled flows and hence provide the
+motivation for employing feedback control in canal operations.
+Accurate feedback controllers can reduce the waste in delivering
+water. Canal regulation is revised.
+
+
+\begin{figure}[h]
+\begin{center}
+\setlength{\unitlength}{0.0100in}%
+\begin{picture}(294,165)(45,626)
+\thicklines
+\put(240,672){\oval(13,14)[t]}
+\put( 81,750){\circle{12}}
+\put( 81,690){\circle{12}}
+\put(120,735){\framebox(45,30){}}
+\put(120,627){\framebox(45,18){}}
+\put(165,750){\vector( 1, 0){ 99}}
+\put(213,636){\vector(-1, 0){ 48}}
+\put(240,708){\vector(-1, 0){ 84}}
+\put(264,735){\framebox(45,30){}}
+\put(240,750){\vector( 0,-1){ 98}}
+\put(309,750){\line( 1, 0){ 30}}
+\put(339,750){\line( 0,-1){114}}
+\put(339,636){\line(-1, 0){ 72}}
+\put(234,672){\vector(-1, 0){ 78}}
+\put(339,672){\line(-1, 0){ 93}}
+\put( 87,750){\vector( 1, 0){ 33}}
+\put(120,636){\line(-1, 0){ 39}}
+\put( 81,636){\vector( 0, 1){ 48}}
+\put( 45,750){\vector( 1, 0){ 30}}
+\put( 81,696){\vector( 0, 1){ 48}}
+\put(213,621){\framebox(54,30){}}
+\put(156,723){\line(-5,-3){ 24.265}}
+\put(132,708){\line( 5,-3){ 24.265}}
+\put(156,693){\line( 0, 1){ 30}}
+\put(156,723){\line( 0, 1){ 0}}
+\put(156,687){\line(-5,-3){ 24.265}}
+\put(132,672){\line( 5,-3){ 24.265}}
+\put(156,657){\line( 0, 1){ 30}}
+\put(156,687){\line( 0, 1){ 0}}
+\put(132,708){\vector(-3,-1){ 45}}
+\put(132,672){\vector(-3, 1){ 45}}
+\put(141,747){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\tenrm $\int$}}}
+\put(285,747){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\tenrm $\int$}}}
+\put(234,756){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\dot X_1$}}}
+\put(312,756){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $X_1$}}}
+\put(168,756){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $X_2$}}}
+\put( 45,756){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $w(t)$}}}
+\put( 99,756){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\tenrm $\dot X_2$}}}
+\put( 81.5,688){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\tenrm $\scriptstyle +$}}}
+\put( 81.5,748){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\tenrm $\scriptstyle +$}}}
+\put(240,633){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\tenrm $-\epsilon X^2_1X_2$}}}
+\put(153,705){\makebox(0,0)[rb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\epsilon$}}}
+\put(154,669){\makebox(0,0)[rb]{\raisebox{0pt}[0pt][0pt]{\tenrm $-\!9$}}}
+\end{picture}
+\end{center}
+\caption{Canal terms and parameters}
+\label{f:canal}
+\end{figure}
+
+Canal regulation is receiving renewed interest; a variety of methods
+have been proposed for approaching the problem. Early work on the
+design of feedback controllers for check gates was done by \citeasnoun{Abl:45}
+using classical control theory. \citeasnoun{AbTaRu:54}, also using
+classical frequency response methods, investigated the stability of
+closed-loop level controllers. \citeasnoun{AbTaRu:54} and
+\citeasnoun{ChaRou:66} applied the linear quadratic regulator (LQR)
+technique to open channel flow control using a linearized, spatially
+discretized version of the St Venant equations. Predictive control
+strategies based on simplified flow models have also been investigated
+\cite{Abl:45,Bak:63a,Dog:58,Keo:58,Pow:85,Sol:89}.\nocite{Bak:63b}
+The latter works do not address the problem of transient wave
+magnitude control.
+
+In this paper, three major issues are addressed in the application of
+the LQR theory to the regulation of large flow transitions in
+multipool canal systems. These are: the development of an accurate and
+simple linear model of the flow dynamics, a physically meaningful
+method of performance index selection, and the generation of reference
+inputs which allow control over transient wave magnitude.
+The models used to develop the regulation algorithm is a time and
+space discretized approximation of the St Venant equations. The
+dynamic response of the wave equation, which is easily developed
+analytically, is used as a guideline for developing the penalty
+function coefficients. The wave equation is also used to develop
+reference inputs for large flow transitions so that transient wave
+magnitudes can be controlled. This affects the dynamic response of the
+wave.
+
+\section{OPEN CHANNEL TRANSIENT MODELS}
+
+
+The one-dimensional equations for gradually varied, unsteady flow in
+a prismatic channel are:
+\begin{equation}
+X_{k+1}=jx_k + Gu_{k+1}
+\label{eq:1}
+\end{equation}
+The nonstandard form of (\ref{eq:1}) is a consequence of the fact that
+the boundary condition can immediately affect states adjacent to the
+boundary. The nonstandard form is a consequence of the fact that the
+boundary condition can affect the model.\footnote{Intersystem linkages
+do occur on return.}
+
+\begin{figure}[h]
+\begin{center}
+\setlength{\unitlength}{0.0100in}%
+\begin{picture}(240,147)(60,594)
+\thicklines
+\put( 75,729){\line( 1, 0){ 45}}
+\put( 75,690){\line( 1, 0){ 45}}
+\put( 75,669){\line( 1, 0){ 45}}
+\put( 75,645){\line( 1, 0){ 45}}
+\put( 75,624){\line( 1, 0){ 45}}
+\put( 75,711){\line( 1, 0){ 45}}
+\put(240,729){\line( 1, 0){ 45}}
+\put(240,690){\line( 1, 0){ 45}}
+\put(240,669){\line( 1, 0){ 45}}
+\put(240,645){\line( 1, 0){ 45}}
+\put(240,624){\line( 1, 0){ 45}}
+\put(240,711){\line( 1, 0){ 45}}
+\put(123,627){\vector(-1, 0){ 0}}
+\put(123,627){\vector( 1, 0){114}}
+\put(132,636){\line( 1, 0){ 42}}
+\put(174,636){\vector( 0, 1){ 51}}
+\put(186,636){\vector( 0, 1){ 51}}
+\put(186,636){\line( 1, 0){ 42}}
+\put(150,699){\vector(-1, 0){ 27}}
+\put(210,699){\vector( 1, 0){ 27}}
+\put(180,726){\vector( 0,-1){ 21}}
+\put(234,732){\vector(-1, 0){ 33}}
+\put( 60,615){\dashbox{4}(75,126){}}
+\put(225,615){\dashbox{4}(75,126){}}
+\put(126,732){\vector( 1, 0){ 33}}
+\put(180,729){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\sixrm Society}}}
+\put(261,603){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\sixrm Environemt}}}
+\put(261,594){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\sixrm system}}}
+\put( 96,603){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\sixrm Development}}}
+\put( 96,594){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\sixrm system}}}
+\put(180,699){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\sixrm Development}}}
+\put(180,690){\makebox(0,0)[b]{\raisebox{0pt}[0pt][0pt]{\sixrm activities}}}
+\end{picture}
+\end{center}
+\caption{Basic structure of the development-environ\-ment interface}
+\label{f:impact}
+\end{figure}
+
+Together these policy variables comprise a policy system that is
+capable of responding to a set of impacts that affect that system.
+One of the reasons the development system has grown so large is the
+set of positive development impacts that have created an propelled
+that system over time.
+
+\section{ENVIRONMENTAL IMPACT}
+
+One of the reasons the environment system has evolved is the set of
+negative environmental impacts from development activities that have
+given rise to the creation of a system to offset development
+pressures (see Fig. \ref{f:impact}).
+
+\subsection{Core Actors}
+This group has continuous and intensive involvment in the
+technological program. It is usually the core actors who initiate a
+program via one or more fundamental decisions.
+
+\subsubsection*{Allied supporting actors}
+Independent Central Actors: Actors of this type have a degree of
+independence of autonomy from both the proponents and adversaries of a
+given development program because of research and the resulting effect
+of the degree of autonomy. More research is needed on this point.
+
+\begin{table}[hbt]
+\caption{Results of systems analysis}
+\label{table}
+\begin{center}
+\begin{tabular}{lcccccc}\hline\\[-2mm]
+&Jan&Mar&May&Jul&Sep&Nov\\[2mm]\hline\\[-2mm]
+Day\\
+1& 4& 22\\
+2\\
+3& & &31 &86\\
+4&&&&&107\\
+5&&&&&&189\\[2mm]\hline\\
+\end{tabular}
+\end{center}
+\end{table}
+
+\section{CONCLUSION}
+Environmental adequacy then is the joint outcome of a truly
+comprhensive and integrated environmental system. By adequacy is meant
+the matching if the environment and development responses to the
+challenges posed by the development process. These challenges are in
+the form of environmental problems emanating fom the development. The
+concern hereis for a set of satisfactory or adequate solutions for all
+actors and impactees for resolving the conflicts associated with the
+development program. An environmental management system that is
+comprehensive in its approach and integratedinto the development
+decision makeing process should be adequate in meeting the
+environmental problems stemming from the development program.
+
+\bibliographystyle{IFAC}
+
+\bibliography{IFACsample} % commented if *.bbl file included, as seen below
+
+\end{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% End of IFACsample.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/ifac/README b/macros/latex209/contrib/ifac/README
new file mode 100644
index 0000000000..789dfd093d
--- /dev/null
+++ b/macros/latex209/contrib/ifac/README
@@ -0,0 +1,10 @@
+To obtain the following style files, please put the keyword in the "Subject:"
+of your mail:
+
+ Keyword File(s)
+---------- -------------------------------------------------------------
+help README (this file)
+ifac-styles IFACarticle.sty, IFACdoc.tex, IFACsample.bib, IFACsample.tex,
+ IFAC.bst, README
+ifac same as ifac-styles
+automatica IFAC.bst, automatica.sty, automatica.tex
diff --git a/macros/latex209/contrib/ifac/automatica.sty b/macros/latex209/contrib/ifac/automatica.sty
new file mode 100644
index 0000000000..1f59b08b1e
--- /dev/null
+++ b/macros/latex209/contrib/ifac/automatica.sty
@@ -0,0 +1,662 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%% automatica.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% ================================================================-==========
+%%% @LaTeX-style-file{
+%%% author = "Silvano Balemi",
+%%% version = "1.6",
+%%% date = "7 JUNE 1994",
+%%% filename = "automatica.sty",
+%%% address = "Automatic Control Laboratory
+%%% Swiss Federal Institute of Technology (ETH)
+%%% 8092 Zurich, Switzerland",
+%%% telephone = "+41 (1) 632.55.34",
+%%% FAX = "+41 (1) 262.43.62",
+%%% email = "balemi@aut.ee.ethz.ch (Internet)",
+%%% keywords = "LaTeX, publisher style",
+%%% supported = "yes, but with delay",
+%%% mainserver = "ifa.ethz.ch"
+%%% docstring = "document-style for automatica, the journal
+%%% of the International Federation of Automatic
+%%% Control (IFAC).
+%%% The default font size is 10 points (IFAC10.sty)
+%%% but 9pt, 11pt and 12pt are available too.
+%%%
+%%% Usage:
+%%% \documentstyle[twocolumn,Xpt,twoside]{automatica}
+%%% \author{}
+%%% \title{}
+%%% \shortabstract{}
+%%% \keywords{}
+%%% \maketitle
+%%% \begin{abstract} ... \end{abstract}
+%%%
+%%% The command "\markboth{leftTEXT}{rightTEXT}"
+%%% puts the text "leftTEXT" and "rightTEXT"
+%%% with the page number on the even resp. odd
+%%% headers when the "twoside" option is selected.
+%%% The head on the title page is defined by
+%%% "\head{firstHEAD}".
+%%% In order to remove headers, insert
+%%% \thispagestyle{empty}\pagestyle{empty} or
+%%% \thispagestyle{plain}\pagestyle{plain}
+%%% right after the \maketitle command!!
+%%%
+%%% See also IFACarticle.sty, IFAC.bst",
+%%% }
+%%% ===========================================================================
+\typeout{Document Style `automatica' <3-AUG-93>.}
+\def\shortabstract#1{\gdef\@shortabstract{#1}}
+\def\keywords#1{\gdef\@keywords{#1}}
+\newif\if@tmptwocolumn \@tmptwocolumnfalse
+\newif\if@draftversion \@draftversionfalse
+
+\def\@ptsize{10}
+\@namedef{ds@9pt}{\def\@ptsize{9}}
+\@namedef{ds@10pt}{\def\@ptsize{10}}
+\@namedef{ds@11pt}{\def\@ptsize{11}}
+\@namedef{ds@12pt}{\def\@ptsize{12}}
+% the file twocolumn.sty is not read as it changes \textwidth.
+% Next line sets @tmptwocolumn to true which lets later execute \twocolumn
+\@namedef{ds@twocolumn}{\global\@tmptwocolumntrue }
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\@namedef{ds@draft}{\global\@draftversiontrue \overfullrule 5pt }
+\@options
+
+
+
+\textheight 245mm
+\textwidth 160mm
+\columnsep 8.5mm
+\topmargin -15mm
+\parindent 1em
+\parskip 0em
+\headsep 3ex
+\headheight 12pt
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+\oddsidemargin 4mm
+\evensidemargin 4mm
+
+
+
+%%
+%% Check if we have selected 10 points
+\def\@tempa{10}\ifx\@ptsize\@tempa
+\typeout{-- This is a 10 point document}
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 11 points
+\def\@tempa{11}\ifx\@ptsize\@tempa
+\typeout{-- This is an 11 point document}
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 1em plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus3pt minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+%%
+%% Check if we have selected 12 points
+\def\@tempa{12}\ifx\@ptsize\@tempa
+\typeout{-- This is a 12 point document}
+\def\@normalsize{\@setsize\normalsize{14pt}\xiipt\@xiipt
+\abovedisplayskip 1em plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip .6em plus4pt minus4pt}
+\def\small{\@setsize\small{11.4pt}\xpt\@xpt}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{9pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{8pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+%% Definitions for PARAGRAPHS
+%%
+\abovedisplayskip 1em plus.3em minus.6em
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus.3em
+\belowdisplayshortskip .6em plus.4em minus.4em
+
+%% Definitions for LISTS
+%%
+\leftmargini 2em
+\leftmarginii 1em
+\leftmarginiii 1em
+\leftmarginiv .5em
+\leftmarginv .5em
+\leftmarginvi .5em
+\marginparwidth 48pt
+\marginparsep 10pt
+\labelsep 5pt
+\leftmargin\leftmargini
+%\labelwidth \z@
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep -\parskip \addtolength{\topsep}{0.5em}}
+\@listI
+\def\@listi{\leftmargin\leftmargini
+ \topsep -\parskip \addtolength{\topsep}{0.5em}}
+\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep \topsep \z@}
+\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep \topsep \z@}
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+%%% Defines footnotes to bear symbols instead of numbers.
+%%% Reset with each new page
+\def\automaticafn#1{\@automaticafn{\@nameuse{c@#1}}}
+\def\@automaticafn#1{\ifcase#1\or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi\relax}
+\@addtoreset{footnote}{page}
+\def\thefootnote{\automaticafn{footnote}}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+% equation numbering starts with section.
+\def\theequation{\thesection.\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+\def\paragraph{\subsubsection*}
+\setcounter{secnumdepth}{3}
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {{\rm \arabic{section}.\arabic{subsection}}}
+\def\thesubsubsection {\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+
+%% FOOTNOTES
+%
+\skip\footins 10pt plus 4pt minus 2pt
+\footnotesep 7pt
+\footskip 3.5em
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .33\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+
+%% Definitions for FLOATS
+%%
+%% Normal floats %% Floats on double columns
+\floatsep 12pt plus 2pt minus 2pt \dblfloatsep 12pt plus 2pt minus 2pt
+\textfloatsep 12pt plus 2pt minus 4pt \dbltextfloatsep 12pt plus 2pt minus 4pt
+\@maxsep 20pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@dblfptop 0pt plus 1fil
+\@fpsep 18pt plus 2fil \@dblfpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil \@dblfpbot 0pt plus 1fil
+\def\topfraction{1.0} \def\dbltopfraction{1.0}
+\def\floatpagefraction{0.8} \def\dblfloatpagefraction{0.8}
+\setcounter{topnumber}{2} \setcounter{dbltopnumber}{4}
+%
+\intextsep 12pt plus 2pt minus 2pt
+\setcounter{bottomnumber}{2}
+\def\bottomfraction{.4}
+\setcounter{totalnumber}{4}
+\def\textfraction{.2}
+
+% redefine CAPTION
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}{#1}\par
+ \endgroup}
+
+% redefine caption
+
+\def\tablestring{table}
+\def\figurestring{figure}
+
+\long\def\@makecaption#1#2#3{
+\ifx\figurestring#3
+ \vskip 3pt
+ \setbox\@tempboxa\hbox{\small #1.~ #2}
+ \ifdim\wd\@tempboxa>\hsize \centering{\small #1. #2}\par
+ \else \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+ \vskip -3pt \vskip -\topsep
+\else
+ \vskip -3pt
+ \setbox\@tempboxa\hbox{\small #1.~ {\sc #2}}
+ \ifdim\wd\@tempboxa>\hsize \centering{\small #1. {\sc #2}}\par
+ \else \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+ \vskip 10pt
+\fi
+}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{{\sc Fig.} \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{{\sc Table } \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\em #1\ #2:}]}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\hbox{}\hfil\rightmark \hfil \thepage}
+ \def\@oddfoot{}
+ \def\@evenhead{\thepage \hfil{\sc \leftmark}\hfil\hbox{}}
+ \def\@evenfoot{}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}
+}
+\def\head#1{\def\@head{#1}}
+\head{\parbox{\textwidth}{\scriptsize{\em Automatica},
+Vol. XX, No. Y, pp. xx--yy, 1999\hfill
+0001-0001/99 \$6.00+0.00\protect\\
+Printed in Great Britain\hfill\copyright 1999 Pergamon Press Ltd}}
+
+\def\ps@titlepagestyle{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\hfil\@head\hfil}
+ \def\@oddfoot{\rm\hfil\thepage\hfil}
+ \def\@evenhead{\hfil\@head\hfil}
+ \let\@evenfoot\@oddfoot
+}
+
+%% defines the command for putting the header
+%% footernote{TEXT} is the same as markboth{TEXT}{TEXT}. Here for
+%% compatibility with other style files.
+\def\markboth#1#2{\def\leftmark{#1}\def\rightmark{#2}}
+\def\footernote#1{\markboth{#1}{#1}\head{#1}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@myheadings
+
+\pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
+
+\def\maketitle{
+\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{titlepagestyle}\@thanks
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@keywords{}\gdef\@shortabstract{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 15mm
+\begin{center}
+\advance \rightskip by 15mm
+\advance \leftskip by 15mm
+ {\huge \@title \par} \vskip 2.5em { \lineskip .5em
+\rm\@author
+}
+\end{center}
+\par
+\advance \rightskip by 15mm
+\advance \leftskip by 15mm
+ \vskip 0.7em {\noindent\large\it\@shortabstract\par} \normalsize\rm
+ \par
+ \vskip 0.7em
+ \vskip 1em \noindent {\footnotesize\bf{Key Words}--- }\footnotesize\@keywords
+ \par
+ \vskip 2.5em
+}
+
+\def\abstract{\footnotesize\noindent{\bf Abstract}---}
+\def\endabstract{\par}
+
+\mark{{}{}}
+
+\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \addtolength{\@tempskipa}{-\parskip}
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi \@ifstar
+ {\@ssect{#2}{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+\gdef\@punct{.~~ } % Punctuation after run-in section heading
+
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec{}
+ \else
+ \refstepcounter{#1}
+ \edef\@svsec{{\rm\csname the#1\endcsname}.\hskip .5em }
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax}{\@svsec\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\@punct\csname#1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}}%
+ \fi%
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5#6{\@tempskipa #4\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #5\@hangfrom{\hskip #2}{\interlinepenalty \@M
+ #6\par}\endgroup
+ \else \def\@svsechd{#5\hskip #2\relax #6\@punct}\fi
+ \@xsect{#4}}
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \addtolength{\@tempskipa}{-\parskip}
+ \vskip \@tempskipa
+ \@afterheading
+ \else \global\@nobreakfalse \global\@noskipsectrue
+ \everypar{\if@noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd \endgroup \unskip
+ \hskip -#1
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}\fi\ignorespaces}
+
+
+\def\section{\@startsection{section}{1}{\z@}
+{3.3ex plus 1ex minus 1ex}{0.1ex plus 0.1ex}{\centering\small}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{2.9ex plus
+.5ex minus .1ex}{.2ex plus .0ex}{\it}}
+%.5ex minus .1ex}{0ex plus .0ex}{\advance \leftskip by 3mm\ \ \it}{.\mbox{~}}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.9ex plus
+.5ex minus .1ex}{0ex plus .0ex}{\indent\it}}
+
+\if@tmptwocolumn \twocolumn \sloppy \flushbottom\fi
+\if@draftversion \def\baselinestretch{1.5} \fi
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+
+
+
+\def\thebibliography#1{\section*{REFERENCES\@mkboth
+ {REFERENCES}{REFERENCES}}\vskip 0.5ex\list
+ {[\arabic{enumi}]}{\labelwidth 0mm \leftmargin\labelwidth
+ \itemindent -3mm
+\advance\leftmargin 3mm
+ \usecounter{enumi}}
+\footnotesize
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{;\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
+
+\def\@biblabel#1{\hfill}
+\def\@mynamedef#1{\expandafter\def\csname #1\endcsname}
+\def\bibcite#1#2{\global\@mynamedef{b@#1}{#2}}
+
+
+%% This is mostly taken from: HARVARD.STY Source: FILESERV@SHSU.BITNET
+%% written by Peter Williams' <peterw@archsci.arch.su.OZ.AU>
+
+%DEFAULT DEFINITIONS
+\def\@cite#1#2{({#1\if@tempswa ; #2\fi})}
+\def\@citeasnoun#1#2{{#1\if@tempswa ; #2\fi)}}
+
+\def\@hiteml[#1]#2#3#4{\item[]\if@filesw%
+ { \def\protect##1{\string ##1\space}\immediate%
+\write\@auxout{\string\harvardcite{#4}{#2}{#1}{#3}}}\fi%
+\protect\hspace*{-\labelwidth}\protect\hspace*{-\labelsep}\ignorespaces}
+
+\def\@hitem#1#2#3{\item[]\if@filesw%
+ { \def\protect##1{\string ##1\space}\immediate%
+\write\@auxout{\string\harvardcite{#3}{#1}{#1}{#2}}}\fi%
+\protect\hspace*{-\labelwidth}\protect\hspace*{-\labelsep}\ignorespaces}
+
+\def\harvarditem{\@ifnextchar [{\@hiteml}{\@hitem}}
+
+\def\harvardcite#1#2#3#4{
+ \global\@namedef{bhf@#1}{#2}
+ \global\@namedef{bha@#1}{#3}
+ \global\@namedef{bhy@#1}{#4}\global\@namedef{b@#1}{\csname bhf@#1\endcsname}
+}
+
+\def\cite{\@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+\def\citeasnoun{\@ifnextchar [{\@tempswatrue\@citexasnoun}
+ {\@tempswafalse\@citexasnoun[]}
+}
+
+\def\@enamedef#1{\expandafter\edef\csname #1\endcsname}
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{\@hisep\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{{\csname b@\@citeb\endcsname\@hysep\csname bhy@\@citeb\endcsname}%
+\global\@enamedef{b@\@citeb}{\csname bha@\@citeb\endcsname}}%
+}}{#1}}
+
+\def\@citexasnoun[#1]#2{%
+\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+\@citeasnoun{{\@ifundefined%
+{b@#2}%
+{{\bf ?}\@warning{Citation `#2' on page \thepage \space undefined}}%
+{{\csname b@#2\endcsname\ (\csname bhy@#2\endcsname}%
+\global\@namedef{b@#2}{\csname bha@#2\endcsname}}%
+}}{#1}}
+
+\gdef\hysep@agsm{\ }\gdef\hisep@agsm{,}%
+\gdef\hysep@dcu{, }\gdef\hisep@dcu{;}%
+\let\@hysep\hysep@agsm \let\@hisep\hisep@agsm
+\def\citationstyle#1{%
+\global\@namedef{@hysep}{\csname hysep@#1\endcsname}%
+\global\@namedef{@hisep}{\csname hisep@#1\endcsname}}
+
+% CHANGE \end{document} - to handle double definitions
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}%
+\def\harvardcite{\@testbibh}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\def\@testbibh #1#2#3{
+ \def\@tempa{#2}\expandafter
+ \ifx \csname bhf@#1\endcsname \@tempa
+ \def\@tempa{#3}\expandafter
+ \ifx \csname bha@#1\endcsname \@tempa
+ \else \@tempswatrue
+ \fi
+ \else
+ \@tempswatrue
+ \fi
+}
+
+%DEFAULT DEFINITIONS
+\def\@cite#1#2{({#1\if@tempswa ; #2\fi})}
+\def\@citeasnoun#1#2{{#1\if@tempswa ; #2\fi)}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% End of automatica.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/ifac/automatica.tex b/macros/latex209/contrib/ifac/automatica.tex
new file mode 100644
index 0000000000..35c6735d70
--- /dev/null
+++ b/macros/latex209/contrib/ifac/automatica.tex
@@ -0,0 +1,208 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%% automatica.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%% More information: see the header of automatica.sty %%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentstyle[twocolumn]{automatica}
+\begin{document}
+\title{Sample LaTeX Article with Style Files for
+Automatica\thanks{This sample article has been created in 1992}}
+
+\markboth{S. Balemi}{Sample \LaTeX\ article with style files for Automatica}
+
+\head{\scriptsize{\em Automatica}\hfill
+Sample file. \copyright 1993 Silvano Balemi}
+
+\author{SILVANO BALEMI\thanks{
+Automatic Control Laboratory, ETH-Zentrum,
+8092 Z\"urich, Switzerland. E-mail: balemi@aut.ee.ethz.ch}}
+
+\shortabstract{This paper shows how to use the LaTeX style file
+created for Automatica, the journal of the International Federation of
+Automatic Control.}
+
+\keywords{\LaTeX\ style files, bibliography style files, Automatica,
+journal of the International Federation of Automatic Control (IFAC).}
+
+\maketitle
+
+\begin{abstract}
+This article explains how to use a \LaTeX\ style that produces a good
+approximation to the style used in the Automatica.
+The article is itself an example of the {\tt automatica.sty} style in action.
+\end{abstract}
+
+\section{INTRODUCTION}
+\noindent{\footnotesize\sc This paper }uses two style files created
+for \LaTeX\ in order to format
+an article as in Automatica, the journal of the
+International Federation of Automatic Control.
+
+The style file {\tt automatica.sty} is to be used in combination with
+the substyles
+{\tt IFAC\-art9.sty}, {\tt IFAC\-art10.sty}, {\tt IFAC\-art12.sty}
+and {\tt IFAC.bst}. All these
+files should be in a path known by \LaTeX.
+
+\subsection{Main Changes}
+Input that is suitable for the \LaTeX\ {\tt article} style needs only
+a couple of modifications besides changing the document style to {\tt
+automatica}. The \verb+IEEEtran.sty+ style file first has to be
+selected with a command of the form
+\begin{center}
+\verb+\documentstyle[...]{automatica}+
+\end{center}
+
+The main differences with the usual article style file pertain to some
+definitions in the title page.
+\begin{itemize}
+\item After the name of the author, go to the next line with
+ \verb+\\[2mm]+ for the address.
+\item the syntax for keywords is \verb+\keywords{...}+
+\item the syntax for for the newly defined item
+shortabstract is \verb+\shortabstract{...}+
+\item \verb+\maketitle+ comes after title, keywords and shortabstract.
+\end{itemize}
+
+Automatica papers do not include author affiliations below or beside
+the name(s) of the author(s); use \verb+\thanks{...}+ to list
+addresses.
+
+The default font size is 10 points, and {\tt IFACart10.sty} will be
+used; the only other fonts available are 9 and 12 points, which are
+defined by {\tt IFACart9.sty} and {\tt IFACart12.sty} respectively.
+The default page style has been redefined and is now set by {\tt
+automatica.sty} to ``\verb+myheadings+''.
+
+\subsection*{Running headers}
+The running heads can be set with the command
+\verb+\markboth{leftTEXT}{rightTEXT}+. If the option {\tt twoside} is not
+selected, both even and odd headers will display {\tt rightTEXT}
+together with the page number.
+The command \verb+\head{headTEXT}+ will put the string \verb+headTEXT+
+on the header of the title page.
+
+
+\begin{figure}
+\begin{center}
+\setlength{\unitlength}{0.0105in}%
+\begin{picture}(242,150)(73,660)
+\put( 75,660){\framebox(240,150){}}
+\put(105,741){\vector( 0, 1){ 66}}
+\put(105,675){\vector( 0, 1){ 57}}
+\put( 96,759){\vector( 1, 0){204}}
+\put(105,789){\line( 1, 0){ 90}}
+\put(195,789){\line( 2,-1){ 90}}
+\put(105,711){\line( 1, 0){ 60}}
+\put(165,711){\line( 5,-3){ 60}}
+\put(225,675){\line( 1, 0){ 72}}
+\put( 96,714){\vector( 1, 0){204}}
+\put( 99,720){\makebox(0,0)[rb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\varphi$}}}
+\put(291,747){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\omega$}}}
+\put(291,702){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\omega$}}}
+\put( 99,795){\makebox(0,0)[rb]{\raisebox{0pt}[0pt][0pt]{\tenrm $M$}}}
+\end{picture}
+\end{center}
+\caption{This is a sample figure. The caption comes after the figure.}
+\end{figure}
+\nocite{TeX}
+
+The captions for figures and tables have been modified; the caption of
+the tables must come before the table.
+
+\begin{table}[hb]
+\caption{The caption comes before the table.}
+\begin{center}
+\begin{tabular}{|c||c|c|}\hline
+$\otimes$&0&1\\\hline\hline
+0&0&1\\\hline
+1&1&0\\\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+
+The bibliography style file {\tt IFAC\-.bst} formats with BibTeX the
+references from the bibliography file according to IFAC instructions.
+It takes advantage of the definitions introduced by Peter Williams for
+the family of harvard bibliography style files. The references can be
+cited with the usual syntax ({\em e.g.\ \/}\verb+\cite{LaTeX}+,
+yielding the citation ``\cite{LaTeX}'') or with with a new command
+({\em e.g.\ \/}\verb+\citeasnoun{LaTeX}+, yielding the citation
+``\citeasnoun{LaTeX}''). The two commands support all original options
+in the book of \citeasnoun{LaTeX}.
+
+In figure \ref{figure2} we can see an example for the definition of
+the title page and of the main commands needed.
+
+\begin{figure}[htb]
+\mbox{}\hrulefill
+\vspace{-.3em}
+\begin{verbatim}
+\documentstyle[twocolumn]{automatica}
+\begin{document}
+
+\title{Sample LaTeX Article...}
+
+\markboth{S. Balemi}{Sample ..}
+
+\head{\scriptsize{\em Automatica}\hfill
+Sample file. c 1993 Silvano Balemi}
+
+\author{SILVANO BALEMI\thanks{
+Automatic Control Laboratory,...}
+
+\shortabstract{This paper ..}
+
+\keywords{\LaTeX\ style files...}
+
+\maketitle
+
+\begin{abstract}
+This article explains how to use ..
+\end{abstract}
+
+\section{INTRODUCTION}
+\noindent
+{\footnotesize\sc This paper }uses..
+
+\bibliographystyle{IFAC}
+\bibliography{bib-file}
+\end{document}
+\end{verbatim}
+\vspace{-.6em}
+\mbox{}\hrulefill
+\caption{Input used to produce this paper.}
+\label{figure2}
+\end{figure}
+
+\section{CONCLUSIONS}
+A sample article for publication in the IFAC Proceedings has been
+presented. It uses some \LaTeX\ style files which format
+the article automatically according to IFAC instructions.
+
+\nocite{*}
+\bibliographystyle{IFAC}
+
+%\bibliography{bib-file} % commented if *.bbl file included, as seen below
+
+%%%%%%%%%%%%%%%%% BIBLIOGRAPHY IN THE LaTeX file !!!!! %%%%%%%%%%%%%%%%%%%%%%%%
+%% This is nothing else than the automatica.bbl file that you would %%
+%% obtain with BibTeX: this way, you do not need a separate *.bbl file %%
+%%---------------------------------------------------------------------------%%
+\begin{thebibliography}{xx}
+\harvarditem[Knuth]{Knuth}{1989}{TeX}
+Knuth, D. (1989). {\em The {\rm
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}book}. Addison-Wesley.
+\harvarditem[Kopka]{Kopka}{1989}{LaTeXD}
+Kopka, H. (1989). {\em \LaTeX, eine Einf\"uhrung}. Addison-Wesley.
+\harvarditem[Lamport]{Lamport}{1986}{LaTeX}
+Lamport, L. (1986). {\em A Document Preparation System: \LaTeX, User's Guide
+ and Reference Manual}. Addison Wesley Publishing Company.
+\end{thebibliography}
+%
+%%---------------------------------------------------------------------------%%
+
+\end{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% End of automatica.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/ijc/ijc.bst b/macros/latex209/contrib/ijc/ijc.bst
new file mode 100644
index 0000000000..99a009afa2
--- /dev/null
+++ b/macros/latex209/contrib/ijc/ijc.bst
@@ -0,0 +1,977 @@
+% BibTeX bibliography style `ICJ'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % Modified from unsrt.bib by Silvano Balemi balemi@aut.ee.ethz.ch for
+ % articles in International Journal of Control 5.June.91
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+% next line commented out by rhr and changed to write comma
+% { add.period$ write$
+ { ", " * write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+
+FUNCTION {output.bibitem}
+{
+ newline$
+ "\bibitem[" write$
+ year write$
+ "]{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+% 5/24/89 rhr
+% modified fin.entry function - prints note field after body of entry
+%FUNCTION {fin.entry}
+%{ add.period$
+% note empty$
+% 'write$
+% { "\par\bgroup\parindent=0em " * annote * "\par\egroup " * write$
+% }
+% if$
+% newline$
+%}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {boldface}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\bf " swap$ * "}" * }
+ if$
+}
+
+%FUNCTION {boldface}
+%{ 's swap$ :=
+% s "" =
+% { "" }
+% { "{\bf " s * "}" * }
+% if$
+%}
+%
+INTEGERS { nameptr namesleft numnames }
+
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "" * }
+ 'skip$
+ if$
+ t "others" =
+ { " {\rm et~al.}" * }
+ { " {\rm and} " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ 'year
+ {" " year *}
+ if$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { "{\sc " * author format.names "}" * }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+%boldface added 3/17/87 rhr and removed for chem sty 9/9/89
+%{ volume field.or.null boldface
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ", " * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ }
+ { address output.nonnull
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ format.date "year" output
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ format.date "year" output.check
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ format.date "year" output.check
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ }
+ { address output.nonnull
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ format.date "year" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" longest.label * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/macros/latex209/contrib/ijc/ijc10.sty b/macros/latex209/contrib/ijc/ijc10.sty
new file mode 100644
index 0000000000..e6d89dde0c
--- /dev/null
+++ b/macros/latex209/contrib/ijc/ijc10.sty
@@ -0,0 +1,150 @@
+% art10.sty 22-Dec-87
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+\def\@listi{\leftmargin\leftmargini \topsep 3pt plus 1pt minus 1pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+\if@twoside \oddsidemargin 44pt \evensidemargin 82pt \marginparwidth 107pt
+\else \oddsidemargin 63pt \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt
+ \topmargin 27pt \headheight 12pt \headsep 25pt \footskip 30pt
+
+\textheight = 43\baselineskip
+\advance\textheight by \topskip
+\textwidth 345pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 6.65pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 15pt \partopsep 2pt plus 1pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf Part \thepart \par \nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{4.0ex plus 1ex minus
+ .2ex}{0.1ex plus .2ex}{\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{3.0ex plus 1ex minus
+ .2ex}{0.5ex plus .2ex}{\it}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1.5ex plus
+1ex minus .2ex}{0ex plus .2ex}{}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+\def\@startuppercasesection#1#2#3#4#5#6{
+\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi \@ifstar
+ {\@susect{#3}{#4}{#5}{#6}}{\@dblarg{\@usect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+\def\@usect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M
+ \uppercase{#8}\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec \uppercase{#8}\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+
+\def\@susect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M \uppercase{#5}\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax \uppercase{#5}}\fi
+ \@xsect{#3}}
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini 25pt
+\leftmarginii 22pt \leftmarginiii 18.7pt \leftmarginiv 17pt \leftmarginv 10pt
+\leftmarginvi 10pt
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 4pt plus 2pt minus 1pt\topsep 8pt
+plus 2pt minus 4pt\itemsep 4pt plus 2pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/macros/latex209/contrib/ijc/ijcarticle.sty b/macros/latex209/contrib/ijc/ijcarticle.sty
new file mode 100644
index 0000000000..b9262734f6
--- /dev/null
+++ b/macros/latex209/contrib/ijc/ijcarticle.sty
@@ -0,0 +1,338 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Silvano Balemi",
+%%% version = "1.0",
+%%% date = "6-JUN-91",
+%%% filename = "IJCarticle.sty",
+%%% address = "Automatic Control Laboratory
+%%% Swiss Federal Institute of Technology (ETH)
+%%% 8092 Zurich, Switzerland",
+%%% telephone = "+41 (1) 256.55.35",
+%%% FAX = "+41 (1) 262.43.62",
+%%% email = "balemi@aut.ee.ethz.ch (Internet)",
+%%% keywords = "LaTeX, International Journal of Control,
+%%% publisher style",
+%%% supported = "yes",
+%%% mainserver = "ifa.ethz.ch"
+%%% docstring = "This is a LaTeX style file for camera ready
+%%% articles according to instructions of the
+%%% International Journal of Control",
+%%% The default font size is 10 points (IJC10.sty)
+%%%
+%%% Usage:
+%%% \documentstyle{IJCarticle}
+%%% \author{}
+%%% \title{}
+%%% \abstract{}
+%%% \maketitle
+%%% See also IJC10.sty, IJC.bst",
+%%% }
+%%% ====================================================================
+\typeout{Document Style `IJCarticle' <6-JUN-91>.}
+
+\def\title#1{\gdef\@title{#1}}
+\def\abstract#1{\gdef\@abstract{#1}}
+
+\def\@ptsize{10}
+\@namedef{ds@11pt}{\def\@ptsize{11}}
+\@namedef{ds@12pt}{\def\@ptsize{12}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+
+
+\input IJC\@ptsize.sty\relax
+
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}.}
+\def\thesubsection {\rm \thesection\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width \columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}{#1}\par
+ \endgroup}
+
+% redefine caption
+
+\def\tablestring{table}
+\def\figurestring{figure}
+
+\long\def\@makecaption#1#2#3{
+\ifx\figurestring#3
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1. #2}
+ \ifdim \wd\@tempboxa >\hsize #1. #2 \par \else \hbox
+ to\hsize{\box\@tempboxa\hfil}
+ \fi
+\else
+ \setbox\@tempboxa\hbox{\underline{#1~ #2}}
+ \ifdim \wd\@tempboxa >\hsize \underline{#1 ~#2}\par \else \hbox
+ to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+ \vskip 10pt
+\fi
+}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure~\thefigure.}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{TABLE~\thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{
+\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@abstract{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \null
+ \vskip 3em
+ \noindent
+{\large \bf \@title \par}
+\advance \leftskip by 15mm
+ \vskip 1.2em { \lineskip .5em
+ \noindent
+\large \@author
+\par}
+ \vskip 1em \noindent \@abstract
+ \par
+ \vskip 0mm}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
+\sloppy
+\flushbottom
+\parindent 1em
+\leftmargini 2em
+\leftmarginv .5em
+\leftmarginvi .5em
+\oddsidemargin 30pt
+\evensidemargin 30pt
+\marginparwidth 48pt
+\marginparsep 10pt
+\textwidth 410pt
+\setlength\topmargin{-15mm}
+\setlength\oddsidemargin{4mm}
+\setlength\evensidemargin{4mm}
+\setlength\textheight{205mm}
+\setlength\textwidth{125mm}
+\setlength\columnsep{9mm}
+\parindent 5mm
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+
+
+\def\thebibliography#1{\begin{center}
+\sc References\end{center}
+\vspace{-2em}
+\list
+ {[\arabic{enumi}]}{\labelwidth 0mm \leftmargin\labelwidth
+ \itemindent -10mm
+\advance\leftmargin 10mm
+\itemsep -1mm
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{;\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
+
+\def\@cite#1#2{({#1\if@tempswa ;#2\fi})}
+\def\@biblabel#1{\hfill}
+\def\@mynamedef#1{\expandafter\def\csname #1\endcsname}
+\def\bibcite#1#2{\global\@mynamedef{b@#1}{#2}}
+\@addtoreset{equation}{section}
+\def\theequation{\thesection\arabic{equation}}
+
+
+
+
+
diff --git a/macros/latex209/contrib/ijcai89/ijcai89.sty b/macros/latex209/contrib/ijcai89/ijcai89.sty
new file mode 100644
index 0000000000..f53f45c3e4
--- /dev/null
+++ b/macros/latex209/contrib/ijcai89/ijcai89.sty
@@ -0,0 +1,162 @@
+% This is the LaTeX style file for IJCAI'89. Place it in a file called
+% ijcai89.sty in the TeX search path. (Placing it in the same directory
+% as the paper should also work.)
+
+% Prepared by Peter F. Patel-Schneider, liberally using the ideas of
+% other style hackers, including Barbara Beeton.
+% This style is NOT guaranteed to work. It is provided in the hope
+% that it will make the preparation of papers easier.
+%
+% There are undoubtably bugs in this style. If you make bug fixes,
+% improvements, etc. please let me know. My e-mail address is:
+% pfps@research.att.com
+
+% Papers are to be prepared using the ``named'' bibliography style,
+% as follows:
+% \documentstyle[ijcai89,named]{article}
+% \title{Title}
+% \author{Author 1 \and Author 2 \\ Address line \\ Address line \And
+% Author 3 \\ Address line \\ Address line}
+% \begin{document}
+% ...
+% \bibliography{bibliography-file}
+% \bibliographystyle{named}
+% \end{document}
+% The ``named'' style implements long and short citations for the ``named''
+% bibliography style.
+
+% Author information can be set in various styles:
+% For several authors from the same institution:
+% \author{Author 1 \and ... \and Author n \\
+% Address line \\ ... \\ Address line}
+% if the names do not fit well on one line use
+% Author 1 \\ {\bf Author 2} \\ ... \\ {\bf Author n} \\
+% For authors from different institutions:
+% \author{Author 1 \\ Address line \\ ... \\ Address line
+% \And ... \And
+% Author n \\ Address line \\ ... \\ Address line}
+% To start a seperate ``row'' of authors use \AND, as in
+% \author{Author 1 \\ Address line \\ ... \\ Address line
+% \AND
+% Author 2 \\ Address line \\ ... \\ Address line \And
+% Author 3 \\ Address line \\ ... \\ Address line}
+
+% If the title and author information does not fit in the area allocated,
+% place \setlength\titlebox{<new height>} after
+% \documentstyle[named,ijcai89]{article},
+% where <new height> is something like 2.25in
+
+\typeout{Conference Style for IJCAI-89 -- released 22 February 1988}
+
+% NOTE: Some laser printers have a serious problem printing TeX output.
+% These printing devices, commonly known as ``write-white'' laser
+% printers, tend to make characters too light. To get around this
+% problem, a darker set of fonts must be created for these devices.
+%
+
+% Physical page layout
+\setlength\topmargin{-0.375in} \setlength\oddsidemargin{-0.25in}
+\setlength\textheight{9.375in} \setlength\textwidth{7.0in}
+\setlength\columnsep{0.25in} \newlength\titlebox \setlength\titlebox{2.25in}
+\setlength\headheight{0pt} \setlength\headsep{0pt}
+\setlength\footheight{0pt} \setlength\footskip{0pt}
+\thispagestyle{empty} \pagestyle{empty}
+\flushbottom \twocolumn \sloppy
+
+% We're never going to need a table of contents, so just flush it to
+% save space --- suggested by drstrip@sandia-2
+\def\addcontentsline#1#2#3{}
+
+% Title stuff, taken from deproc.
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \twocolumn[\@maketitle] \@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\vbox to \titlebox{\hsize\textwidth
+ \linewidth\hsize \vskip 0.625in minus 0.125in \centering
+ {\Large\bf \@title \par} \vskip 0.2in plus 1fil minus 0.1in
+ {\def\and{\unskip\enspace{\rm and}\enspace}%
+ \def\And{\end{tabular}\hss \egroup \hskip 1in plus 2fil
+ \hbox to 0pt\bgroup\hss \begin{tabular}[t]{c}\bf}%
+ \def\AND{\end{tabular}\hss\egroup \hfil\hfil\egroup
+ \vskip 0.25in plus 1fil minus 0.125in
+ \hbox to \linewidth\bgroup\large \hfil\hfil
+ \hbox to 0pt\bgroup\hss \begin{tabular}[t]{c}\bf}
+ \hbox to \linewidth\bgroup\large \hfil\hfil
+ \hbox to 0pt\bgroup\hss \begin{tabular}[t]{c}\bf\@author
+ \end{tabular}\hss\egroup
+ \hfil\hfil\egroup}
+ \vskip 0.3in plus 2fil minus 0.1in
+}}
+\renewenvironment{abstract}{\centerline{\large\bf
+ Abstract}\vspace{0.5ex}\begin{quote}}{\par\end{quote}\vskip 1ex}
+
+% sections with less space
+\def\section{\@startsection {section}{1}{\z@}{-2.0ex plus
+ -0.5ex minus -.2ex}{1.5ex plus 0.3ex minus .2ex}{\large\bf\raggedright}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-1.8ex plus
+ -0.5ex minus -.2ex}{0.8ex plus .2ex}{\normalsize\bf\raggedright}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1.5ex plus
+ 0.5ex minus .2ex}{0.5ex plus .2ex}{\normalsize\bf\raggedright}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}{1.5ex plus
+ 0.5ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection{subparagraph}{5}{\parindent}{1.5ex plus
+ 0.5ex minus .2ex}{-1em}{\normalsize\bf}}
+
+% Footnotes
+\footnotesep 6.65pt %
+\skip\footins 9pt plus 4pt minus 2pt
+\def\footnoterule{\kern-3pt \hrule width 5pc \kern 2.6pt }
+\setcounter{footnote}{0}
+
+% Lists and paragraphs
+\parindent 1em
+\topsep 4pt plus 1pt minus 2pt
+\partopsep 1pt plus 0.5pt minus 0.5pt
+\itemsep 2pt plus 1pt minus 0.5pt
+\parsep 2pt plus 1pt minus 0.5pt
+
+\leftmargin 2em \leftmargini\leftmargin \leftmarginii 2em
+\leftmarginiii 1.5em \leftmarginiv 1.0em \leftmarginv .5em \leftmarginvi .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep \labelsep 5pt
+
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 0.5pt
+ \parsep 1pt plus 0.5pt minus 0.5pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 1pt plus 0.5pt minus 0.5pt
+ \parsep \z@ \partopsep 0.5pt plus 0pt minus 0.5pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\abovedisplayskip 7pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip 0pt plus3pt%
+\belowdisplayshortskip 4pt plus3pt minus3pt%
+
+% Less leading in most fonts (due to the narrow columns)
+% The choices were between 1-pt and 1.5-pt leading
+\def\@normalsize{\@setsize\normalsize{11pt}\xpt\@xpt}
+\def\small{\@setsize\small{10pt}\ixpt\@ixpt}
+\def\footnotesize{\@setsize\footnotesize{10pt}\ixpt\@ixpt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{16pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{20pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{23pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{28pt}\xxvpt\@xxvpt}
diff --git a/macros/latex209/contrib/ijcai89/ijcai89.tex b/macros/latex209/contrib/ijcai89/ijcai89.tex
new file mode 100644
index 0000000000..abc9ded12d
--- /dev/null
+++ b/macros/latex209/contrib/ijcai89/ijcai89.tex
@@ -0,0 +1,62 @@
+% This is the instructions for authors for IJCAI'89.
+\documentstyle[ijcai89,named]{article}
+% The file ijcai89.sty is the style file for IJCAI'89.
+% The file named.sty contains macros for named citations as produced
+% by named.bst.
+
+\title{IJCAI'89 Format Instructions for Authors \\ (Computer-Typeset Papers)}
+\author{Shirley Jowell\thanks{Acknowledgments to sponsoring agencies
+ appear here as a footnote.}\\
+ Morgan Kaufmann Publishers \\
+ 2929 Campus Drive, Suite 260 \\
+ San Mateo, California \hspace{1em} 94403
+ \And
+ Peter F. Patel-Schneider \\
+ AT\&T Bell Laboratories \\
+ 600 Mountain Avenue \\
+ Murray Hill, New Jersey \hspace{1em} 07974
+ }
+
+\newcommand{\usa}[2]{#1}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+The {\it IJCAI'89 Proceedings} will be printed using the photo-offset print
+process directly from camera-ready copy furnished by the authors. To
+ensure that all papers in the {\it Proceedings} have a uniform appearance,
+authors are asked to adhere to the following instructions.
+\end{abstract}
+
+\section{Introduction}
+
+Papers produced for IJCAI'89 using computer typesetting systems (such as
+\LaTeX{} or Scribe) will be printed directly from {\bf $8$-$1/2 \times
+11''$} masters.
+
+Print your paper using a laser or other letter-quality printer in good
+condition. (If you have a ``write-white'' laser printer you must use fonts
+specifically designed for it---not fonts for ``write-black'' printers.)
+{\em Do not use line printers or dot matrix printers.} Papers with poor
+quality output, e.g., light or gray type, and papers that significantly
+deviate from these instructions, e.g., by using 8-point fonts, will not be
+included in the proceedings.
+
+Print your paper on heavy bond white paper. Do not fold or crease your paper.
+
+\subsection{Typewritten Papers}
+
+If you do not have access to a typesetting system, you can type your paper
+on special, oversize forms (``large mats'') that will be reduced before
+printing by Morgan Kaufmann Publishers.
+
+\usa{If you must type your paper, please contact
+Shirley Jowell at Morgan Kaufmann for a supply of mats and a
+separate set of instructions for typing your paper. {\em Discard these
+instructions\/ {\em (which are for computer-typeset papers only)} if you
+are typing your paper on large mats.}}{Included in this mailing is a set of
+large mats that should be adequate to handle your paper; also included is a
+separate set of instructions for using the mats. If you type your paper,
+{\em please discard these instructio \ No newline at end of file
diff --git a/macros/latex209/contrib/insertplot/insertplot.readme b/macros/latex209/contrib/insertplot/insertplot.readme
new file mode 100644
index 0000000000..205e11ddfe
--- /dev/null
+++ b/macros/latex209/contrib/insertplot/insertplot.readme
@@ -0,0 +1,37 @@
+For users of Arbortext's DVIPS PostScript driver, heres a macro to enable
+ (1) the inclusion of straight PostScript files or
+ (2) graphics output from the DI-3000/PICSURE PostScript driver
+directly into TeX/LaTeX files. It may be nested within LaTeX floating
+bodies, or used directly.
+Our DI-3000/PICSURE runs on VMS VAXs. Our lasers are QMS800/PS.
+
+\documentstyle [...,insertplot,....] {any style}
+ ..
+\begin{figure}
+\insertplot{8mm}{fig1.pst}{50mm}{0.25}{0.25}{0}
+\insertplot{8mm}{fig2.pst}{50mm}{0.25}{0.25}{0}
+\vspace*{-100mm}
+\insertplot{8mm}{fig3.pst}{50mm}{0.25}{0.25}{0}
+\insertplot{8mm}{fig4.pst}{50mm}{0.25}{0.25}{0}
+\caption{\label{land}Four landscapes}
+\end{figure}
+
+produces:
+
+ +---------------------+ +---------------------+
+ | | | |
+ | | | |
+ | fig1.pst | | fig3.pst |
+ | | | |
+ | | | |
+ +---------------------+ +---------------------+
+
+ +---------------------+ +---------------------+
+ | | | |
+ | | | |
+ | fig2.pst | | fig4.pst |
+ | | | |
+ | | | |
+ +---------------------+ +---------------------+
+
+ Figure 1: Four landscapes
diff --git a/macros/latex209/contrib/insertplot/insertplot.sty b/macros/latex209/contrib/insertplot/insertplot.sty
new file mode 100644
index 0000000000..eb8dd9b3d6
--- /dev/null
+++ b/macros/latex209/contrib/insertplot/insertplot.sty
@@ -0,0 +1,113 @@
+%
+\typeout{insertplot.sty version 1.08 08 May 1992.}
+%
+% Use this macro in conjunction with the Arbortext DVILASER/PS driver.
+% It may be used with user-written PostScript code, DI-3000/PICSURE,
+% PVI-WAVE, GEM ARTLINE, DESIGNER, AUTOSKETCH and ......
+%
+% Please feel free to redistribute this file to other interested users.
+% I would like to hear about any improvements for eventual inclusion
+% in future versions.
+%
+% Change History.
+% (1) 25/10/89. V1.01. Added driver option 6, PS for PVI-WAVE.
+% Added driver option 7, EPS for PVI-WAVE.
+% (2) 27/10/89. V1.02. PICSURE driver changed. Added `flip' to
+% ensure correct orientation.
+% (3) 08/02/90. V1.03. Added driver option 8, AutoSketch.
+% (4) 10/04/91 V1.04. Added '\letter {} def' to the PICSURE option.
+% (5) 22/10/91 V1.05. Added driver option 9, Erlangen Graphics System
+% (6) 14/11/91 V1.06. Added driver option 10, IslandDraw.
+% (7) 24/03/92 V1.07. Added driver option 11, MATLAB.
+% (8) 08/05/92 V1.08. Added driver option 12, GNU Plot
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% C. E. Higgs
+% Computational Physics Group
+% Paul Scherrer Institute
+% CH-5232 Villigen PSI
+% Switzerland
+% tel: + (056) 99 20 62
+% Email: HIGGS@CAGEIR5A (Bitnet)
+% higgs@csun.psi.ch (X.400)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% WARNING: For correct inclusion, user-written PostScript code in the
+% LANDSCAPE mode must include the following before any other
+% commands.
+%
+% 90 rotate 0 -600 translate
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% parameter #1: Offset from left margin.
+% #2: PostScript file name for inclusion.
+% #3: Vertical space to leave for the figure.
+% #4: Scaling factor on X-axis.
+% #5: Scaling factor on Y-axis.
+% #6: Orientation of original figure.
+% Options are:-
+% landscape = original drawing was A4-quer.
+% portrait = original drawing was A4-hoch.
+% #7: Originating graphics package.
+% Options are:-
+% 1 = user-written PostScript.
+% 2 = DI-3000/PICSURE.
+% 3 = GEM Artline.
+% 4 = Designer.
+% 5 = Buerokomm.
+% 6 = PVI-WAVE (PS driver).
+% 7 = PVI-WAVE (EPS driver).
+% 8 = AUTOSKETCH
+% 9 = ERLANGEN GRAPHICS SYSTEM
+% 10 = ISLAND_DRAW
+% 11 = MATLAB
+% 12 = GNU Plot
+%
+% Description of insertplot internal parameters.
+%
+% angl rotation angle for landscape figs.
+% a4 DI-3000/PICSURE. Deactivate this.
+% erasepage DI-3000/PICSURE. Deactivate this.
+% letter DI-3000/PICSURE. Deactivate this.
+% figsave save
+% flip ensure same orientation for all driver options.
+% 180 degree rotation upon itself.
+% initgraphics DI-3000/PICSURE. Deactivate this.
+% showpage PostScript. Deactivate this
+% slide rotate and shift landscape figs.
+% xxx horiz. shift (in pt) for repositioning.
+% yyy vert. shift (in pt) for repositioning.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\insertplot#1#2#3#4#5#6#7{\par\nointerlineskip %
+ \hbox{\hskip #1 \vbox to #3{\vfil %
+ \special{ps::[asis,begin] 0 SPB /figsave save def %
+ /showpage {} def /slide {} def /flip {} def %
+ #7 1 eq {/xxx -100 def /yyy 600 def /angl -90 def }if % user written PS
+ #7 2 eq {/xxx -100 def /yyy 600 def /angl -90 def % DI-3000/PICSURE
+ /initgraphics {} def /erasepage {} def /a4 {} def % DI-3000/PICSURE
+ /letter {} def % DI-3000/PICSURE
+% /flip{(#6) (portrait) eq { 590 #4 mul % DI-3000/PICSURE
+% 840 #5 mul translate 180 rotate}if}def
+ }if % DI-3000/PICSURE
+ #7 3 eq {/xxx 750 def /yyy 0 def /angl +90 def }if % GEM ARTLINE
+ #7 4 eq {/xxx 750 def /yyy 0 def /angl -90 def }if % DESIGNER
+ #7 5 eq {/xxx 0 def /yyy 592 def /angl -90 def }if % Buerokomm
+ #7 6 eq {/xxx 640 def /yyy -55 def /angl +90 def }if % PVI-WAVE (PS)
+ #7 7 eq {/xxx -100 def /yyy 0 def /angl +90 def }if % PVI-WAVE (EPS)
+ #7 8 eq {/xxx 0 def /yyy 600 def /angl -90 def }if % AUTOSKETCH
+ #7 9 eq {/xxx -25 def /yyy 550 def /angl -90 def }if % EGS
+ #7 10 eq {/xxx -100 def /yyy 600 def /angl -90 def }if % ISLAND_DRAW
+ #7 11 eq {/xxx 750 def /yyy 0 def /angl +90 def }if % MATLAB
+ #7 12 eq {/xxx -100 def /yyy 600 def /angl -90 def }if % GNU Plot
+ /slide{(#6) (landscape) eq %
+ {xxx #4 mul yyy #5 mul translate angl rotate}if} def %
+ gsave Xpos Ypos translate slide flip #4 #5 scale} %
+ \special{ps: plotfile #2 asis} \special{ps::[asis,end] %
+ grestore figsave restore 0 SPE}}}} %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% That's it.
diff --git a/macros/latex209/contrib/iso/iso-doc.tex b/macros/latex209/contrib/iso/iso-doc.tex
new file mode 100644
index 0000000000..34d535d945
--- /dev/null
+++ b/macros/latex209/contrib/iso/iso-doc.tex
@@ -0,0 +1,1163 @@
+% @(#)iso.tex 2.6 dated 91/05/02 at 09:57:15
+
+\documentstyle{iso}
+% If you prefer not straining your eyes, try:
+% \documentstyle[10pt,onecolumn]{iso}
+
+\standard{LaTeX style}
+\title{Information processing --- The \iso\ LaTeX style --- Documentation}
+
+\documenttype{}
+\runninghead{ISO LaTeX style, version 2.6
+}
+
+% A command for referring to the ISO style
+\newcommand{\iso}{{\tt iso\/}}
+
+% \leftoffset might be needed if your printer is mis-aligned.
+% \leftoffset{1in}
+
+\newverbatim{example}
+
+% Give the right page numbering for camera-ready copy
+% \cameraready
+
+\begin{document}
+
+\tableofcontents
+\listoffigures
+\listoftables
+
+% \foreword
+% An experimental foreword.
+% Shouldn't be necessary since ISO central secretariat set it.
+
+% \introduction
+% This document describes the \iso\ style for typesetting ISO standards using
+% LaTeX.
+% It is written using the \iso\ style to give an example of its use.
+
+\maketitle
+
+\section{Scope and field of application}
+This document
+\begin{itemize}
+\item describes how to use the \iso\ style;
+\item provides an example of the style's use.
+\end{itemize}
+
+It is intended for use by those writing ISO standards.
+
+\section{References}
+\label{references}
+\begin{references}
+\bibitem[ISO 8879]{sgml} Information processing ---
+ Text and office systems --- Standard
+ Generalised Markup Language (SGML).
+\bibitem[ISO 646]{charset} The 7-bit coded character set for information
+ processing interchange.
+\bibitem[BS 0]{bs0} A standard for standards.
+\end{references}
+
+\section{Definitions}
+\label{definitions}
+\definition{definition}
+\label{def.def}
+A definition is numbered in the same way as a clause but has a run-in
+header and does not appear in the table of contents; see
+\ref{div.special.def} for further details.
+
+\section{Document structure}
+\clause{General}
+A standard written using the \iso\ style must obey certain rules, as
+follows:
+\begin{enumerate}
+\item\label{structure.general.documentstyle}
+ The first non-comment line must be
+ \begin{verbatim}
+ \documentstyle{iso}
+ \end{verbatim}
+\begin{note}
+ The \iso\ style also allows optional arguments which specify
+ point size and number of columns: see~\ref{columns} for details.
+ Other style options may also be used: see~\ref{compat.style} for
+ a discussion.
+\end{note}
+
+\item\label{structure.general.title}
+ This must be followed by two lines giving the number and title of
+ the standard, as follows:
+ \begin{verbatim}
+ \standard{1234}
+ \title{A standard for egg-sucking}
+ \end{verbatim}
+
+\begin{note}
+ An optional version number may also be given thus:
+ \begin{verbatim}
+ \version{1.6.4}
+ \end{verbatim}
+ This version number is then available in the body of the document with
+ the \verb|\theversion| command; for example, with the \verb|\version|
+ command above, \verb|\theversion| gives \version{1.6.4}\theversion.
+\end{note}
+
+\item Any user-defined LaTeX macros should follow the standard number
+ and title. There should then follow the begin document command:
+ \begin{verbatim}
+ \begin{document}
+ \end{verbatim}
+
+\item \label{structure.general.maketitle}
+ Then come the tables of contents (optional, see \ref{contents}),
+ foreword (optional, see \ref{special.foreword}), introduction
+ (optional, see \ref{special.intro}) and title commands.
+ The title command is written thus:
+ \begin{verbatim}
+ \maketitle
+ \end{verbatim}
+
+\item The structure of the rest of the document is described in \ref{divns}.
+ The document must finish with
+ \begin{verbatim}
+ \end{document}
+ \end{verbatim}
+ \end{enumerate}
+
+See annex \ref{annex.example} for an example standard.
+
+\clause{Divisions and subdivisions}
+\label{divns}
+
+\subclause{Names of divisions and subdivisions}
+The \iso\ style permits a document to be made up of the following divisions:
+part, section, clause, subclause, subsubclause, subsubsubclause.
+
+Each type of division is introduced in the normal LaTeX manner by a command,
+whose name is that of the division type, and a parameter which is the title of
+the division. For example:
+\begin{verbatim}
+\section{A typical section}
+\clause{This is a clause}
+\subclause{Winds light to variable}
+\subsubclause{The famous Eccles}
+\subsubsubclause{The Greenslade story}
+\end{verbatim}
+
+Each division generates a corresponding entry in the table of contents
+(see \ref{contents}).
+Starting a new division causes all subsidiary division
+numbers to start again from zero (e.g. starting a clause resets the
+subclause, subsubclause and subsubsubclause numbers to zero).
+\begin{note}
+This is a change from ordinary \LaTeX\ in which starting a division only
+resets the counter one level below, and not those at lower levels --- I
+regard this as a bug in \LaTeX.
+\end{note}
+
+There are also untitled versions of subsubclause and subsubsubclause
+introduced by \verb|\namelesssubsubclause| and \verb|\namelesssubsubsubclause|
+respectively.
+These have run-in headers and do not produce entries in the table of
+contents.
+
+Finally there is the lowest level of division: the paragraph.
+This is unnumbered and untitled and introduced by either \verb|\par|
+or a blank line.
+
+\subclause{Special divisions}
+\subsubclause{Tables of contents}
+\label{contents}
+Tables of contents are produced in the usual LaTeX manner, using
+\verb|\tableofcontents|, \verb|\listoffigures| and
+\verb|\listoftables|.
+These should come before the \verb|\maketitle|, see
+\ref{structure.general.maketitle}.
+\begin{note}
+If you find the table of contents too detailed, you can reduce the depth
+of division entered in the table by changing the \verb|tocdepth| counter.
+For instance
+\begin{verbatim}
+\setcounter{tocdepth}{2}
+\end{verbatim}
+gives a table of contents with entries only down to the clause level.
+\end{note}
+
+\subsubclause{Foreword}
+\label{special.foreword}
+The foreword to a standard appears after the tables of contents and is
+unnumbered.
+For this reason, it uses a special macro as follows:
+\begin{verbatim}
+\foreword
+\end{verbatim}
+In fact, the foreword to a standard is set by ISO central secretariat so
+it should not usually be necessary to include one in your documents.
+
+\subsubclause{Introduction}
+\label{special.intro}
+The introduction to a standard appears after the tables of contents and the
+foreword and is unnumbered.
+Like the foreword, it uses a special macro:
+\begin{verbatim}
+\introduction
+\end{verbatim}
+
+\subsubclause{References}
+The references section contains titles of normative documents to which
+reference is made in the body of the standard.
+The references section is constructed as follows:
+\begin{verbatim}
+\section{References}
+\begin{references}
+\bibitem[ISO 8879]{sgml} Information processing ---
+ Text and office systems --- Standard
+ Generalised Markup Language (SGML).
+\end{references}
+\end{verbatim}
+The output from this is shown in section \ref{references}.
+
+The second argument of the \verb|\bibitem| command is a label which is used
+in citing the document.
+For instance, \verb|\cite{sgml}| gives the output \cite{sgml}.
+\begin{note}
+If the first text in a paragraph is \verb|\cite|, then the paragraph
+will start in the wrong place.
+This is a LaTeX bug.
+\end{note}
+
+\subsubclause{Definitions}
+\label{div.special.def}
+A definition is numbered in the same way as a clause but has a run-in
+header and does not appear in the table of contents; see section
+\ref{definitions} for examples.
+A definition is entered as follows:
+\begin{verbatim}
+\definition{term} Text of definition...
+\end{verbatim}
+
+\begin{note}
+Definitions and clauses should not appear in the same section
+since they are numbered independently of each other.
+\end{note}
+
+\subsubclause{Annexes}
+The main body of a standard may be followed by annexes, each of which is
+either normative or informative.
+The first annex should be preceded by the \verb|\annex| command.
+Normative annexes are then introduced by the command:
+\begin{verbatim}
+\normative{Annex title}
+\end{verbatim}
+while informative annexes are introduced by the command:
+\begin{verbatim}
+\informative{Annex title}
+\end{verbatim}
+
+Annexes may be divided into clauses, subclauses etc in the same way as
+sections; the only difference is that annexes are numbered using upper-case
+letters rather than Roman numerals.
+\begin{notes}
+\item Users who are using the \iso\ style for documents other than standards may
+wish to continue using the \verb|\section| command to introduce annexes ---
+this produces a less obtrusive heading than the ISO recommended one and
+makes no mention of normative/informative.
+\item The ISO directives state that there should be no annexes numbered
+{\bf I} or {\bf O}.
+The \iso\ style does not implement this automatically, but you can achieve the
+same effect by placing, immediately before the {\bf I}'th and {\bf O}'th
+annexes, the command:
+\begin{verbatim}
+\addtocounter{section}{1}
+\end{verbatim}
+\end{notes}
+
+\section{Notes}
+\clause{General}
+ISO directives allow three types of note: an isolated note, a series of
+isolated notes at separate places within the same division, and a group of
+numbered notes.
+
+The \iso\ style allows another type of note, which is tied to a particular
+document version number.
+
+\clause{Note types}
+\subclause{Isolated}
+An isolated note is written as follows:
+\begin{verbatim}
+\begin{note}
+Text of note.
+\end{note}
+\end{verbatim}
+and appears in the text thus:
+\begin{note}
+Text of note.
+\end{note}
+
+\subclause{Series}
+Isolated notes in a series should be numbered sequentially.
+The number is given as an optional argument to the \verb|note|
+environment thus:
+\begin{verbatim}
+\begin{note}[17]
+Text of note.
+\end{note}
+\end{verbatim}
+The note appears in the text as follows:
+\begin{note}[17]
+Text of note.
+\end{note}
+
+\subclause{Grouped}
+A group of notes is written as follows:
+\begin{verbatim}
+\begin{notes}
+\item The first note.
+\item Another note.
+\item And so on.
+\end{notes}
+\end{verbatim}
+and appears thus:
+\begin{notes}
+\item The first note.
+\item Another note.
+\item And so on.
+\end{notes}
+
+\subclause{Version}
+A version note takes an argument which gives the document version number to
+which the note applies.
+The note is printed only if this argument is the same as the version number
+given in the
+\verb|\version| command (see \ref{structure.general.title}).
+For example, the text:
+\begin{verbatim}
+\version{1.6.4}
+
+\begin{versionnote}{1.3.2}
+A version note for version 1.3.2.
+\end{versionnote}
+
+\begin{versionnote}{1.6.4}
+A version note for version 1.6.4.
+\end{versionnote}
+\end{verbatim}
+gives the output:
+\version{1.6.4}
+\begin{versionnote}{1.3.2}
+A version note for version 1.3.2.
+\end{versionnote}
+
+\begin{versionnote}{1.6.4}
+A version note for version 1.6.4.
+\end{versionnote}
+
+\section{Lists}
+\clause{General}
+There are three types of list provided by the \iso\ style: itemized,
+enumerated and description.
+They are described in \ref{lists.types}.
+
+Lists may be nested up to four deep.
+If you exceed this limit, you have probably designed your standard badly.
+
+\clause{List types}
+\label{lists.types}
+\subclause{Itemized}
+Itemized lists are used when there is no need to identify the separate
+elements of the list.
+They are written as follows:
+\begin{verbatim}
+\begin{itemize}
+\item The first item.
+\item The next item. Entries may continue
+ over several lines if necessary.
+\end{itemize}
+\end{verbatim}
+The resulting output appears as follows:
+\begin{itemize}
+\item The first item.
+\item The next item. Entries may continue
+ over several lines if necessary.
+\end{itemize}
+
+\subclause{Enumerated}
+Enumerated lists are used when it is necessary to identify the separate
+list elements.
+They are written as follows:
+\begin{verbatim}
+\begin{enumerate}
+\item The first enumerated item.
+\item Another enumerated item.
+\end{enumerate}
+\end{verbatim}
+and the output appears as follows:
+\begin{enumerate}
+\item The first enumerated item.
+\item Another enumerated item.
+\end{enumerate}
+
+\subclause{Description}
+Description lists are used when each element of the list has a label.
+They are written as follows:
+\begin{verbatim}
+\begin{description}
+\item[Figure 1] An everyday object, seen from an
+ unusual angle.
+\item[Figure 2] An everyday angle, seen from an
+ unusual object.
+\end{description}
+\end{verbatim}
+and the output appears as follows:
+\begin{description}
+\item[Figure 1] An everyday object, seen from an
+ unusual angle.
+\item[Figure 2] An everyday angle, seen from an
+ unusual object.
+\end{description}
+
+\section{Special characters}
+\label{specialchars}
+\clause{General}
+The \iso\ style defines a few commands to access unusual elements of the
+LaTeX character set.
+These are given in the rest of this section.
+
+Some of the predefined LaTeX commands to do such things are given in
+\ref{guide.unusual}.
+There are many more in the LaTeX book.
+
+\clause{Reserved characters}
+\label{specialchars.reserved}
+LaTeX has ten reserved characters:
+\begin{verbatim}
+# $ % & ~ _ ^ \ { }
+\end{verbatim}
+
+These are available in the \iso\ style as
+\begin{verbatim}
+\# \$ \% \& \tilde \_ \caret \bslash \{ \}
+\end{verbatim}
+respectively.
+
+The `\bslash' character only exists in the TeX maths and typewriter fonts.
+The \verb|\bslash| command gives a maths backslash, except inside a
+\verb|\prog| command (see \ref{prog}), where it gives a typewriter
+backslash.
+\begin{note}
+\verb|\bslash| differs from TeX's \verb|\backslash| in two ways:
+\begin{itemize}
+\item It is defined as an ordinary character, rather than a delimiter.
+\item In PS-LaTeX, where the backslash character is available in all fonts,
+ \verb|\bslash| gives that character.
+\end{itemize}
+\end{note}
+
+\clause{Quotes}
+When you types quotes, \prog{\rquote} or \prog{\lquote}, in LaTeX, they
+appear as ' and ` respectively.
+You may prefer \rquote\ and \lquote\ in which case you can type
+\verb|\rquote| or \verb|\lquote| repectively (these stand for right and
+left quote --- I don't like these names but all the good ones have been
+taken by TeX).
+
+\section{Program text}
+\clause{Short text}
+\label{prog}
+It is usually convenient to set program text in a fixed-width font.
+The \verb|\prog| command allows you to do this: its argument is set in
+typewriter font.
+For example
+\begin{verbatim}
+the call of the \prog{wild}
+is answered in \prog{kind}.
+\end{verbatim}
+appears as:
+the call of the \prog{wild}
+is answered in \prog{kind}.
+
+This command behaves exactly like a \verb|\tt| declaration (see
+\ref{guide.fonts}) except that:
+\begin{itemize}
+\item It redefines the \verb|\bslash|
+command (see \ref{specialchars.reserved} for details).
+\item It allows interword spacing to stretch or shrink a little;
+this allows LaTeX to pick better line breaks in two-column format.
+\end{itemize}
+
+\clause{Long text}
+\label{newverb}
+For longer pieces of program text, the \verb|verbatim| environment
+is used, see \ref{guide.verbatim} for details.
+The \iso\ style provides for the creation of multiple \verb|verbatim|
+environments with the \verb|\newverbatim| command; this allows different
+types of program text to be enclosed in different environments.
+Thus:
+\begin{verbatim}
+\newverbatim{example}
+\newverbatim{definition}
+\end{verbatim}
+creates two new environments, \verb|example| and \verb|definition|,
+each of whose contents is displayed in the same way; an automatic
+tool could now be written to, say, extract all example text and ensure
+that it is syntactically valid.
+
+\section{Index}
+The \iso\ style provides two types of index entry: by page number and
+by division number.
+The commands to produce these types of index are \verb|\pageindex| and
+\verb|\clauseindex| respectively; there should be at most one of these in
+a document and it should only appear in the preamble (i.e. between the
+\verb|\documentstyle| and the \verb|\begin{document}|), otherwise you are
+likely to get mixed page/clause indexing.
+
+The default indexing type is by page number; this is because indexing
+programs seem to be happier with it.
+Clause indexing is aesthetically preferable, if your indexing program
+can cope.
+
+\section{Headers and footers}
+By default, the \iso\ style gives page headers and footers according
+to ISO guidelines.
+These are:
+\begin{itemize}
+\item a header on page one, saying ``INTERNATIONAL STANDARD''.
+\item a running header at the top of every page, giving
+ the standard number, year and language.
+\item a running footer at the bottom of every page, giving the page
+ number.
+\end{itemize}
+
+The headers may be changed as follows:
+\begin{itemize}
+\item the header on page one is the argument to the
+ \verb|\documenttype| command.
+ Thus
+ \begin{verbatim}
+ \documenttype{NORME FRANCAISE}
+ \end{verbatim}
+ gives ``NORME FRANCAISE'' as the page one header.
+\item the running header consists of the argument to the
+ \verb|\runninghead| command.
+ Thus
+ \begin{verbatim}
+ \runninghead{Antipasto}
+ \end{verbatim}
+ gives ``Antipasto'' as the running header.
+\item the running footer consists of the argument to the
+ \verb|\runningfoot| command and the page number.
+ Thus
+ \begin{verbatim}
+ \runningfoot{Formaggio}
+ \end{verbatim}
+ gives ``Formaggio'' and the current page number as the running footer.
+\end{itemize}
+
+\begin{notes}
+\item Both headers appear on page one.
+\item The default definitions of the header commands are:
+ \begin{verbatim}
+ \runninghead{{\thestandard -\theyear(E)}}
+ \documenttype{{INTERNATIONAL STANDARD}}
+ \end{verbatim}
+\item The default definition of the footer command is:
+ \begin{verbatim}
+ \runningfoot{}
+ \end{verbatim}
+\item The document version number may be included in the running header
+ or footer by use of the \verb|\theversion| command (provided that a
+ version number has been given with the \verb|\version| command, see
+ \ref{structure.general.title}).
+\item In extremity, users may redefine
+ \verb|\@evenhead|, \verb|\@oddhead|, \verb|\@evenfoot| and
+ \verb|\@oddfoot| or use the \verb|\pagestyle|
+ command in the normal LaTeX manner.
+\item These headers do not use TeX marks and therefore changes to
+ \verb|\runninghead| or \verb|\runningfoot| in the body of a
+ document may take effect on the wrong page if you are unlucky.
+\end{notes}
+
+\section{Columns and text size}
+\label{columns}
+\clause{General}
+ISO guidelines say that standards should be set in two columns in nine
+point text; this is
+not suitable for some standards, such as \cite{sgml}, so the \iso\ style
+allows such standards to be set with one column and/or in ten point text
+by giving optional
+arguments to \verb|\documentstyle| (see \ref{structure.general.documentstyle}).
+
+The optional arguments are independent, so that any combination of one/two
+columns and nine/ten point text can be used.
+However, one column text in nine point is highly unreadable and two
+column text in ten point can give bad line breaks, so these combinations
+are not recommended.
+
+\clause{Columns}
+A standard may be set in one column using the \verb|onecolumn| optional
+argument, thus:
+\begin{verbatim}
+\documentstyle[onecolumn]{iso}
+\end{verbatim}
+If it is only necessary to set some parts of a document with one column, then
+the usual LaTeX commands \verb|\onecolumn| and \verb|\twocolumn| may be used.
+
+Two column text is the default, but you can explicitly demand it with:
+\begin{verbatim}
+\documentstyle[twocolumn]{iso}
+\end{verbatim}
+
+\clause{Text size}
+If a standard is to be set in one column, it is better to use ten point
+text for readability thus:
+\begin{verbatim}
+\documentstyle[onecolumn,10pt]{iso}
+\end{verbatim}
+
+Nine point text is the default, but you can explicitly demand it with:
+\begin{verbatim}
+\documentstyle[9pt]{iso}
+\end{verbatim}
+
+\section{Miscellaneous}
+
+\clause{Camera-ready copy}
+If a standard is to be sent to ISO Central Secretariat in camera-ready form,
+page numbering must start at page ii (leaving the front cover as page i),
+a copyright notice must appear at the foot of the first page of the tables
+of contents and,
+if the foreword is to be set by the Secretariat, a blank page must be left
+between the tables of contents and the introduction.
+The macro \verb|\cameraready| alters the pagenumbers in this fashion and sets
+the copyright notice.
+If used, it should only appear in the preamble, otherwise page numbering and
+size is likely to be unpredictable.
+Any document containing a \verb|\cameraready| command should also contain a
+\verb|\tableofcontents| command (see section~\ref{contents}), as the two
+interact.
+
+\clause{Compatibility}
+\subclause{PS-LaTeX}
+\subsubclause{General}
+PS-LaTeX is a PostScript-based version of LaTeX, which uses PostScript
+fonts rather than Computer Modern ones wherever possible.
+This is particularly useful to users of the \iso\ style as ISO's preferred
+fonts are Univers, Helvetica and Times Roman (see ``Notes to TC 97 Project
+Editors on presentation of draft International Standards (DIS)'', probably
+available from ISO/TC 97 Secretariat).
+
+PS-LaTeX was written by Mario Wolczko of the University of Manchester
+and copies are available from
+the Clarkson archive (\prog{archive-server@sun.soe.clarkson.edu}),
+the Aston archive (\prog{texserver@spock.aston.ac.uk}),
+me (\prog{ndn@seg.npl.co.uk}) or
+Mario himself (\prog{mario@ux.cs.man.ac.uk}).
+Pre-requisites for running PS-LaTeX are: LaTeX, a PostScript output
+device and a DVI$\rightarrow$PostScript driver which recognises PostScript fonts
+(available from the above addresses).
+
+\subsubclause{Compatibility}
+The \iso\ style detects when it is running under PS-LaTeX and redefines
+the commands necessary to ensure unchanged output.
+As a result, an \iso\ style file can be run under LaTeX or PS-LaTeX
+with no alteration.
+
+\subsubclause{Line breaking}
+\label{misc.pslatex.lines}
+There can be some problems with line breaking under PS-LaTeX: some
+PostScript font metric files do not allow enough stretching of interword
+space for TeX's line breaking algorithm to do a good job.
+The \iso\ style therefore detects when it is running under PS-LaTeX and
+adjusts the interword spacing to what it considers to be a better value.
+If you do not like the result, you can put the following command before the
+\verb|\begin{document}|:
+\begin{verbatim}
+\defaultspacing
+\end{verbatim}
+When running under ordinary LaTeX, this command has no effect.
+
+\subclause{Style options}
+\label{compat.style}
+Style options fall into two classes:
+\begin{enumerate}
+\item Those which add facilities to LaTeX such as \prog{vdm} and
+ \prog{zed}.
+\item Those which change spacings (\verb|\textwidth| etc) such as
+ \prog{a4} and \prog{a4wide}.
+\end{enumerate}
+
+The \iso\ style can be used with style options of the first variety
+with only one proviso: some of these styles assume that the document is
+set in one of 10, 11 or 12 point; the default for \iso\ documents is
+9 point so the \iso\ style masquerades as 10 point for the benefit of
+these other styles.
+\begin{note}
+For LaTeX hackers: this is implemented by setting \verb|\@ptsize| to
+zero.
+\end{note}
+
+A little more caution should be used with the second variety of style
+option: since both they and the \iso\ style change layout parameters,
+the end result is unlikely to look like either an ISO standard or the
+type of document promised by the style option.
+However, there should not be any catastrophic results.
+
+\clause{Page alignment}
+ISO standards set text across most of the page width: if your printer is
+just slightly misaligned, this can result in text being lost off the edge
+of the page.
+If you have this problem, use the \verb|\leftoffset| command in the preamble.
+This command moves the left margin inwards by the amount of its
+argument (a negative argument moves the margin outwards).
+Thus \verb|\leftoffset{.5in}| moves the left margin in by $0.5$ inches.
+
+\clause{Line breaking}
+ISO standards are usually set in two-column format.
+LaTeX can have difficulty finding what it considers to be good line breaks
+in these circumstances, so the \iso\ style helps out by executing the
+\verb|\sloppy| and
+\verb|\verysloppy| commands which allow LaTeX to lower its high standards
+somewhat.
+There are corresponding \verb|\fussy| and \verb|\unverysloppy| commands
+respectively which restore LaTeX's default behaviour.
+
+See also section \ref{misc.pslatex.lines} for more on line breaking under
+PS-LaTeX.
+
+\clause{Sources}
+The \iso\ style is based on ``Notes to TC97 Project Editors on presentation
+draft International Standards (DIS)'' and ``Rules for drafting and presentation
+of International Standards''.
+It was produced by extensive modification of Leslie Lamport's ``article''
+style for LaTeX.
+
+\clause{Latest version}
+Your version of the \iso\ style is given in the running header of this
+document.
+You can find out the latest version number by sending an email message to
+\prog{info-server@seg.npl.co.uk} with the following body:
+\begin{verbatim}
+request: latex
+topic: version iso
+\end{verbatim}
+You will receive a message back of the form
+\begin{verbatim}
+% @(#)iso.sty 2.6 dated 91/05/02 at 09:57:15
+\end{verbatim}
+showing that the current version is 2.6.
+
+If you have an out of date version and would like the latest one, then send
+another email message to \prog{info-server@seg.npl.co.uk} with the following
+body:
+\begin{verbatim}
+request: latex
+topic: iso.tex
+topic: iso.sty
+topic: iso9.sty
+topic: iso10.sty
+\end{verbatim}
+This will cause the latest version of the \iso\ style files to be sent to you.
+
+\clause{Acknowledgements}
+The author would like to thank Tony Mansfield, Roger Scowen and Cath Baker
+for their patience during development of the \iso\ style and their
+sterling work in testing it.
+
+\clause{Author}
+The \iso\ style was written by:\\
+Nicolas North,\\
+Division of Information Technology and Computing,\\
+National Physical Laboratory,\\
+Teddington,\\
+Middlesex, TW11 0LW,\\
+U.K.\\
+\prog{ndn@seg.npl.co.uk}
+
+\annex
+
+\informative{An example standard}
+\label{annex.example}
+This annex shows the ASCII form of a typical standard.
+
+\begin{verbatim}
+\documentstyle{iso}
+
+\standard{1234}
+\title{An example standard}
+
+\begin{document}
+
+\tableofcontents
+
+\foreword
+The foreword goes here.
+
+\introduction
+The introduction goes here.
+
+\maketitle
+
+\section{The first section}
+\clause{The first clause}
+Text of the first clause.
+\subclause{The only subclause}
+
+\clause{Another clause}
+Text of the second clause.
+
+\section{Another section}
+Text of this section.
+
+\annex
+
+\informative{The first annex}
+Text of the annex.
+
+\end{document}
+\end{verbatim}
+
+This example describes a standard, number 1234, called ``An example
+standard''.
+It has a table of contents, a foreword and an introduction.
+These are followed by two sections and an informative annex.
+The first section has two clauses and one subclause.
+
+\informative{Some LaTeX guidance}
+\clause{General}
+LaTeX (pronounced lay-tek or lah-tek) is a document preparation system
+consisting of a set of macros for Donald Knuth's typesetting system, TeX.
+The \iso\ style is, in its turn, a set of LaTeX macros.
+This has two implications: firstly that the facilities of LaTeX (and TeX) are
+available to users of the \iso\ style, and secondly that \iso\ style users
+should really have some knowledge of LaTeX before embarking on production of
+a standard.
+
+This annex gives a very brief summary of some of the more pertinent features
+of LaTeX.
+For more information, and examples, users should read, ``LaTeX: A Document
+Preparation System'' by Leslie Lamport (Addison-Wesley), the source text of
+this document and the \verb|iso.sty| file, probably in that order.
+Typesetting enthusiasts should also read, ``The TeXbook'' by Donald Knuth
+(Addison-Wesley).
+
+\clause{Document layout}
+LaTeX input is essentially free-format, with spaces, tabs and newlines used
+as separators.
+The important exception to this is that a blank line is regarded as a
+separator between paragraphs, so blank lines must be used with some care.
+
+{\em Commands\/} are introduced by the \verb|\| character, e.g.
+\verb|\annex| is a command to start on the annexes part of a standard.
+Command parameters are enclosed in braces (\verb|{}|), e.g.
+\verb|\label{foo}| creates a label called \verb|foo|.
+
+{\em Comments\/} are introduced by the \verb|%| character.
+This comments out everything to the next newline.
+There are no ``bracketed comments'' as in Pascal or C.
+
+{\em Braces\/} (\verb|{}|) are used for scoping: any change of style
+introduced after a \verb|{| is reversed by the matching \verb|}|.
+
+\clause{Fonts}
+\label{guide.fonts}
+LaTeX provides a number of fonts, the most useful of which are:
+{\rm roman}, {\em emphatic}, {\bf bold}, {\it italic} and {\tt typewriter
+(fixed width)}.
+These are introduced by \verb|\rm|, \verb|\em|, \verb|\bf|, \verb|\it| and
+\verb|\tt| respectively.
+The scope of these commands lasts until the next \verb|}| so, to set a
+phrase in bold, you enter \verb|{\bf bold phrase}|, to give
+{\bf bold phrase}.
+
+\clause{Labels and references}
+Any point in a standard may be labelled, using the command
+\verb|\label{labelname}|.
+This gives \verb|labelname| the value of its division number in the document.
+For instance, \verb|\label{latex.ref}| at this point in this document
+\label{latex.ref}
+gives \verb|latex.ref| the value of \ref{latex.ref}.
+
+A label may be referred to at any time by use of the command
+\verb|\ref{labelname}|.
+Thus the label \verb|latex.ref| is referred to by \verb|\ref{latex.ref}|,
+giving the value \ref{latex.ref}.
+
+\clause{Tables and figures}
+\subclause{General}
+It is impossible to give more than an inkling of the variety of tables and
+figures available in LaTeX in this document.
+Suffice it to say that almost any collection of material that you want
+tabulated can be set in LaTeX with the \verb|tabular| environment and that
+many line drawings can be produced with the \verb|picture| environment.
+As always, the LaTeX book has the details.
+
+\subclause{Tables}
+Tables are set using the \verb|table| environment.
+Anything can be put in a table, but usually it will be something set
+using the \verb|tabular| environment.
+The \verb|table| environment then decides where the table should go on the
+page, captions it and puts an entry in the list of tables.
+Table \ref{table.example} was produced with the following input:
+\begin{verbatim}
+\begin{table}[hb]
+\caption{Translations}
+\label{table.example}
+\begin{center}
+\begin{tabular}{|l||l|}
+\hline
+English & American \\
+\hline
+pavement & sidewalk \\
+colour & color \\
+prologue & prolog \\
+yes & affirmative
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+\end{verbatim}
+
+The \verb|[hb]| indicates that the table should be set either here
+(\verb|h|) or at the bottom of the page (\verb|b|).
+
+The caption will be set where you put it in the table environment: at the
+bottom in this case.
+The label declaration must either be inside the argument to \verb|\caption|
+or after it in the table environment.
+
+\begin{table}[hb]
+\caption{Translations}
+\label{table.example}
+\begin{center}
+\begin{tabular}{|l||l|}
+\hline
+English & American \\
+\hline
+pavement & sidewalk \\
+colour & color \\
+prologue & prolog \\
+yes & affirmative \\
+\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+A list of all tables in your document may be obtained by including a
+\verb|\listoftables| command (see \ref{contents}).
+
+\subclause{Figures}
+Figures are set using the \verb|figure| environment.
+Anything can be put in a figure, but usually it will be something set
+using the \verb|picture| environment.
+The \verb|figure| environment then decides where the figure should go on the
+page, captions it and puts an entry in the list of figures.
+Figure \ref{figure.example} was produced with the following input:
+\begin{verbatim}
+\begin{figure}[hb]
+\caption{Stands the clock at ten to three}
+\label{figure.example}
+\begin{center}
+\setlength{\unitlength}{1mm}
+\begin{picture}(50,50)(-25,-25)
+\put(0,0){\circle{40}}
+\put(0,0){\vector(-4,3){5}}
+\put(0,0){\vector(1,0){5}}
+\end{picture}
+\end{center}
+\end{figure}
+\end{verbatim}
+A list of all figures in your document may be obtained by including a
+\verb|\listoffigures| command (see \ref{contents}).
+
+\begin{figure}[hb]
+\caption{Stands the clock at ten to three}
+\label{figure.example}
+\begin{center}
+\setlength{\unitlength}{1mm}
+\begin{picture}(50,50)(-25,-25)
+\put(0,0){\circle{40}}
+\put(0,0){\vector(-4,3){5}}
+\put(0,0){\vector(1,0){5}}
+\end{picture}
+\end{center}
+\end{figure}
+
+\clause{Unusual characters}
+\label{guide.unusual}
+Most \cite{charset} characters are easy to obtain by just typing them.
+Others have a special meaning to LaTeX and are therefore less easy to enter.
+A list of these and some other useful characters is shown in table
+\ref{table.chars}
+\begin{table}[ht]
+\caption{Useful characters}
+\label{table.chars}
+\begin{center}
+\begin{tabular}{ll}
+LaTeX input & Output \\
+\prog{\rquote} & ' \\
+\prog{\rquote\rquote} & '' \\
+\prog{\lquote\lquote} & `` \\
+\verb|\#| & \# \\
+\verb|\$| & \$ \\
+\verb|\%| & \% \\
+\verb|\&| & \& \\
+\verb|\tilde| & \tilde \\
+\verb|\_| & \_ \\
+\verb|\caret| & \caret \\
+\verb|\bslash| & \bslash \\
+\verb|\{| & \{ \\
+\verb|\}| & \} \\
+\verb|\copyright| & \copyright \\
+\verb|\pounds| & \pounds
+\end{tabular}
+\end{center}
+\end{table}
+
+See section \ref{specialchars} for some more useful characters provided by
+the \iso\ style.
+
+\clause{Columns}
+The ISO guidelines ask for standards to be set in two columns.
+However, it is sometimes necessary to use single column text.
+This may be effected by using the \verb|\onecolumn| command.
+Return to two column text with the \verb|\twocolumn| command.
+See annex \ref{run} for an example of single column typesetting.
+
+Both of these commands start a new page and should therefore be used with
+discretion: the best place is prior to starting a new section.
+
+\clause{Verbatim text}
+\label{guide.verbatim}
+It is sometimes necessary to display text in a fixed width font.
+LaTeX provides the verbatim environment for this purpose.
+Text enclosed between \verb|\begin{verbatim}| and
+\verb|\end{verbatim}| is set exactly as in the input file, in the fixed
+width font.
+For example:
+\begin{example}
+\begin{verbatim}
+Some text
+ with odd spacing
+ and line
+ breaks
+\end{verbatim}
+\end{example}
+%\verb|\end{verbatim}| \\
+is set as:
+\begin{verbatim}
+Some text
+ with odd spacing
+ and line
+ breaks
+\end{verbatim}
+
+The maximum number of characters that can be fitted into a single column
+is about 45.
+
+The \iso\ style allows for the creation of multiple, differently
+named, \verb|verbatim| environments.
+See \ref{newverb} for details.
+
+\onecolumn
+\informative{Running LaTeX}
+\label{run}
+The method for running LaTeX will vary from site to site.
+This annex shows a typical run of LaTeX on this document at the National
+Physical Laboratory; the procedure at your site should not differ by much.
+User input follows the \verb|crumble%| prompt.
+
+\begin{verbatim}
+crumble% latex iso
+This is TeX, C Version 3.0
+(iso.tex
+LaTeX Version 2.09 <7 Dec 1989>
+(iso.sty
+Document Style `iso' <18 Jun 90>.
+(iso9.sty))
+No file iso.aux.
+No file iso.toc.
+No file iso.lof.
+No file iso.lot.
+[1]
+LaTeX Warning: Reference `div.special.def' on page 1 undefined.
+LaTeX Warning: Reference `contents' on page 1 undefined.
+LaTeX Warning: Reference `special.foreword' on page 1 undefined.
+LaTeX Warning: Reference `special.intro' on page 1 undefined.
+LaTeX Warning: Reference `divns' on page 1 undefined.
+LaTeX Warning: Reference `annex.example' on page 1 undefined.
+LaTeX Warning: Reference `contents' on page 1 undefined.
+LaTeX Warning: Reference `structure.general.maketitle' on page 1 undefined.
+[1]
+LaTeX Warning: Reference `references' on page 2 undefined.
+LaTeX Warning: Citation `sgml' on page 2 undefined.
+LaTeX Warning: Reference `definitions' on page 2 undefined.
+LaTeX Warning: Citation `bs0' on page 2 undefined.
+LaTeX Warning: Reference `lists.types' on page 2 undefined.
+[2]
+LaTeX Warning: Reference `guide.unusual' on page 3 undefined.
+LaTeX Warning: Reference `prog' on page 3 undefined.
+LaTeX Warning: Reference `guide.fonts' on page 3 undefined.
+LaTeX Warning: Reference `specialchars.reserved' on page 3 undefined.
+LaTeX Warning: Reference `guide.verbatim' on page 3 undefined.
+[3]
+LaTeX Warning: Citation `sgml' on page 4 undefined.
+LaTeX Warning: Reference `structure.general.documentstyle' on page 4 undefined.
+
+
+Underfull \hbox (badness 5274) in paragraph at lines 519--528
+\ninrm me (\nintt ndn@seg.npl.co.uk\ninrm ) or Mario him-self
+[4]
+LaTeX Warning: Reference `misc.pslatex.lines' on page 5 undefined.
+
+Underfull \vbox (badness 2538) has occurred while \output is active [5]
+[6]
+LaTeX Warning: Reference `latex.ref' on page 7 undefined.
+LaTeX Warning: Reference `latex.ref' on page 7 undefined.
+LaTeX Warning: Reference `table.example' on page 7 undefined.
+LaTeX Warning: Reference `contents' on page 7 undefined.
+LaTeX Warning: Reference `figure.example' on page 7 undefined.
+
+Underfull \vbox (badness 4899) has occurred while \output is active [7]
+LaTeX Warning: Reference `contents' on page 8 undefined.
+LaTeX Warning: Citation `charset' on page 8 undefined.
+LaTeX Warning: Reference `table.chars' on page 8 undefined.
+LaTeX Warning: Reference `specialchars' on page 8 undefined.
+LaTeX Warning: Reference `run' on page 8 undefined.
+LaTeX Warning: Reference `newverb' on page 8 undefined.
+[8] [9] (iso.aux)
+LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
+ )
+(see the transcript file for additional information)
+Output written on iso.dvi (10 pages, 38956 bytes).
+Transcript written on iso.log.
+crumble% latex iso
+latex iso
+This is TeX, C Version 3.0
+(iso.tex
+LaTeX Version 2.09 <7 Dec 1989>
+(iso.sty
+Document Style `iso' <18 Jun 90>.
+(iso9.sty)) (iso.aux) (iso.toc [1]) (iso.lof) (iso.lot) [2] [1] [2] [3]
+Underfull \hbox (badness 5274) in paragraph at lines 519--528
+\ninrm me (\nintt ndn@seg.npl.co.uk\ninrm ) or Mario him-self
+[4]
+Underfull \vbox (badness 2538) has occurred while \output is active [5]
+[6]
+Underfull \vbox (badness 4899) has occurred while \output is active [7]
+[8] [9] (iso.aux) )
+(see the transcript file for additional information)
+Output written on iso.dvi (11 pages, 62512 bytes).
+Transcript written on iso.log.
+\end{verbatim}
+
+Note that LaTeX has to be run twice: the first run stores information on
+cross-referencing and the table of contents in the files {\tt iso.aux}
+and {\tt iso.toc} which is then used in the second run.
+LaTeX will inform you if it needs to be run more than once.
+
+You may get complaints about underfull or overfull boxes; these occur when
+LaTeX feels that it has made a bad line or page break.
+Often these breaks are not as bad as LaTeX feels and they can safely be
+ignored.
+\twocolumn
+\end{document}
diff --git a/macros/latex209/contrib/iso/iso.sty b/macros/latex209/contrib/iso/iso.sty
new file mode 100644
index 0000000000..747d22bbcd
--- /dev/null
+++ b/macros/latex209/contrib/iso/iso.sty
@@ -0,0 +1,1151 @@
+% ISO DOCUMENT STYLE <91/05/02>
+% for LaTeX version 2.09
+
+% @(#)iso.sty 2.6 dated 91/05/02 at 09:57:23
+
+% File: iso.sty
+% Author: Nicolas North
+% Email: ndn@seg.npl.co.uk
+% Date: 91/05/02
+%
+% A rewrite of article.doc to typeset in ISO central secretariat-approved
+% style.
+
+ \typeout{Document Style `iso' <91/05/02>.}
+
+
+% CHOOSING THE TYPE SIZE:
+%
+% The iso style only copes with 9pt and 10pt at present, so gives error
+% messages for larger sizes and reads iso10.sty.
+%
+% Unfortunately, many style files expect \@ptsize to be 0, 1 or 2 so it is
+% set to 0 as the closest approximation to 9pt.
+% But setting \@ptsize to 0 means we need another flag to say whether 10pt
+% has been specified - we use \@tenpoint.
+
+\def\@ptsize{0} % To keep other style files happy
+
+\newif\if@tenpoint \@tenpointfalse
+\@namedef{ds@9pt}{}
+\@namedef{ds@10pt}{\@tenpointtrue}
+\@namedef{ds@11pt}{\typeout{11pt not available. Using 10pt.}\@tenpointtrue}
+\@namedef{ds@12pt}{\typeout{12pt not available. Using 10pt.}\@tenpointtrue}
+
+% Two-side printing.
+\@twosidetrue % Defines twoside option.
+\@mparswitchtrue % Marginpars go on outside of page.
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+% One-column printing
+% NDN: default ISO style is to print in two columns; the following allows
+% the user to do \documentstyle[onecolumn]{iso} and get the document printed
+% in one column.
+% Note that this cannot be implemented using the \@twocolumn conditional
+% because the first part (contents etc) of an ISO document is printed
+% in onecolumn mode, so we need a new conditional to carry the user's choice
+% through to the \maketitle.
+\newif\if@isoonecolumn \@isoonecolumnfalse
+\def\ds@onecolumn{\@isoonecolumntrue}
+
+% NDN: we also define \ds@twocolumn to prevent twocolumn.sty being read.
+\def\ds@twocolumn{}
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+\input\if@tenpoint iso10.sty\else iso9.sty\fi\relax
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% LABELS
+% In the iso style, list labels are aligned with the list contents
+% i.e. the label is indented by \leftmargin. To achieve this we redefine
+% \makelabel in \enumerate and \itemize (see latex.tex).
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{##1}}\fi}
+
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne
+\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+\list{\csname\@itemitem\endcsname}{\def\makelabel##1{##1}}\fi}
+
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+%
+% NDN: define \p@enumi to be the current label when the list environment
+% began (listi etc do \let\isoclauseref\@currentlabel (see iso9.sty)).
+% Thus list item d) in section 4.1 gives a \label of 4.1d.
+
+\def\labelenumi{\theenumi)}
+\def\theenumi{\alph{enumi}}
+\def\p@enumi{\isoclauseref}
+
+\def\labelenumii{\theenumii)}
+\def\theenumii{\arabic{enumii}}
+\def\p@enumii{\p@enumi}
+
+% No ISO guidelines for deeper nesting of lists
+\def\labelenumiii{\theenumiii)}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\p@enumii}
+
+\def\labelenumiv{\theenumiv)}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+\def\labelitemi{---}
+% No ISO guidelines for deeper nesting so use the same symbol
+\def\labelitemii{---}
+\def\labelitemiii{---}
+\def\labelitemiv{---}
+
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{{#1} ---}
+\def\description{\list{}{
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+%\newdimen\descriptionmargin
+%\descriptionmargin=3em
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+% The macro \@eqnnum defines how equation numbers are to appear in equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero.
+% I don't know if this should be in the iso style, but I'll leave it
+% until someone complains.
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% NOTES
+% There are three notes environments: `note' for producing a single note,
+% `notes' for producing multiple notes and `versionnotes' for producing
+% a note which only prints for a particular version number.
+% Each is printed in typesize small.
+% Single notes have an optional argument which is the number of the note
+% for a series of isolated notes in a section.
+
+\newenvironment{note}{\@ifnextchar[{\@isonote}{\@isonote[]}}{\par\normalsize}
+\def\@isonote[#1]{\small\par NOTE #1 --- }
+
+\newcounter{notes}
+\newenvironment{notes}{\par\small NOTES
+ \begin{list}{\arabic{notes}}{
+ \usecounter{notes}\setlength{\leftmargin}{0pt}
+ \setlength{\labelwidth}{0pt}
+ \setlength{\listparindent}{0pt}}}{
+ \end{list}\normalsize}
+
+% The `versionnote' environment takes an argument which is a version number.
+% This is compared with the current version number (as set by \version).
+% If they are identical, the note is typeset, with an indication of the
+% version number.
+% Otherwise the contents are placed in a convenient sized minipage which is
+% placed in an hbox and discarded. (Use of the minipage prevents overfull/
+% underfull hbox messages).
+
+\newbox\iso@box
+\newenvironment{versionnote}[1]{\def\@tmp{#1}%
+\ifx\theversion\@tmp\@vnotea{#1}\else\@vnoteb\fi}{\@endvnote}
+
+% \@vnotea sets the version note as a note.
+\def\@vnotea#1{\gdef\@endvnote{\end{note}}\begin{note}[(version #1)]}
+
+% \@vnoteb puts the version note into \iso@box and discards it.
+\def\@vnoteb{\gdef\@endvnote{\end{minipage}\hfil\egroup}%
+\setbox\iso@box=\hbox to\textwidth\bgroup\begin{minipage}{\textwidth}}
+
+% ARRAY AND TABULAR
+%
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+\tabcolsep 6pt % Half the space between columns in a tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+% Note that the LaTeX section names have been changed to comply with
+% ISO naming conventions.
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is stepped.
+% Counter OLDCTR must already be defined.
+
+% Redefine \@stpelt so that stepping a counter recursively resets all
+% lower level counters, not just the level one below.
+\def\@stpelt#1{\global\csname c@#1\endcsname \z@ \csname cl@#1\endcsname}
+
+\newcounter{part}
+\newcounter {section}[part]
+\newcounter {clause}[section]
+\newcounter {definition}[section]
+\newcounter {subclause}[clause]
+\newcounter {subsubclause}[subclause]
+\newcounter {namelesssubsubclause}[subclause]
+\newcounter {subsubsubclause}[subsubclause]
+\newcounter {namelesssubsubsubclause}[subsubclause]
+
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+
+\def\thepart{\arabic{part}} % Roman numeral part numbers.
+\def\thesection {\arabic{section}}
+\def\theclause {\thesection.\arabic{clause}}
+\def\thedefinition{\thesection.\arabic{definition}}
+\def\thesubclause {\theclause .\arabic{subclause}}
+\def\thesubsubclause {\thesubclause.\arabic{subsubclause}}
+\def\thenamelesssubsubclause {\thesubclause.\arabic{namelesssubsubclause}}
+\def\thesubsubsubclause {\thesubsubclause.\arabic{subsubsubclause}}
+\def\thenamelesssubsubsubclause{
+ \thesubsubclause.\arabic{namelesssubsubsubclause}}
+
+% ANNEX
+%
+% The \annex command must do the following:
+% -- add an `Annexes' heading to the table of contents
+% -- reset the section counter to zero
+% -- redefine the section counter to produce appendix numbers
+% -- add the section number to figure and table captions
+% -- ensure that figure and table numbers start anew for each annex
+% -- redefine the \section command if appendix titles and headings are
+% to look different from section titles and headings.
+% All ISO annexes should be introduced with \normative or \informative, but
+% \section is retained for those who don't like the ISO annex headings.
+
+\def\annex{\par
+ \addtocontents{toc}{\protect{\section*{Annexes}}}
+ \setcounter{section}{0}
+ \def\thesection{\Alph{section}}
+ \def\thefigure{\thesection.\arabic{figure}}
+ \def\thetable{\thesection.\arabic{table}}
+ \@addtoreset{table}{section} \@addtoreset{figure}{section}
+ \def\section{\clearpage\@startsection {section}{1}{\z@}{3ex plus 1ex minus
+ .2ex}{.1ex plus .1ex}{\Large\bf}}}
+
+% \normative and \informative start normative and informative annexes
+% respectively.
+\def\normative#1{\@startannex{#1}{normative}}
+\def\informative#1{\@startannex{#1}{informative}}
+
+% \@startannex{TITLE}{TYPE} starts the annex called TITLE. TYPE is either
+% "normative" or "informative".
+% This is a sort of very cut down \@startsection.
+\def\@startannex#1#2{
+ \clearpage
+ \refstepcounter{section}
+ \if@twocolumn\twocolumn[\@annextitle{#1}{#2}]
+ \else\@annextitle{#1}{#2}
+ \fi
+ \addcontentsline{toc}{section}{\ifnum1>\c@secnumdepth \else
+ \protect\numberline{\thesection}\fi #1}
+}
+
+% \@annextitle{TITLE}{TYPE} centres the title in LArge font.
+\def\@annextitle#1#2{%
+\begin{center}\LArge%
+{\bf Annex \thesection}\\(#2)\\{\bf #1}\vspace*{2ex}\end{center}}
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \clause command writes a
+% \contentsline{clause}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If clauses are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \theclause. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table' environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@section,
+% \l@clause, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note that \section is level 1,
+% \clause is level 2, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+
+% \numberline{NUMBER} : For use in a \contentsline command.
+% It puts NUMBER flushleft in a box of width \@tempdima
+% (Before 25 Jan 88 change, it also added \@tempdima to the hanging
+% indentation.)
+% In the ISO style, sets the number in bold.
+
+\def\numberline#1{\hbox to\@tempdima{\bf#1\hfil}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{2.8}
+\setcounter{tocdepth}{5}
+
+
+% TABLEOFCONTENTS
+%
+% \cameraready is in force, sets the copyright notice at the foot of the
+% first contents page.
+\def\tableofcontents{
+ \if@cameraready\thispagestyle{copyrightheadings}\fi
+ \vspace*{49mm}
+ \hbox to \textwidth{{\LArge\bf Contents}\hfil\small Page}
+ \begingroup
+ \parskip\z@
+ \@starttoc{toc}
+ \endgroup}
+
+% \l@part is as in latex.tex - I haven't considered parts yet
+%
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} % space above part line
+ \begingroup
+ \@tempdima 3em % width of box holding part number, used by
+ \parindent \z@ \rightskip \@pnumwidth %% \numberline
+ \parfillskip -\@pnumwidth
+ {\large \bf % set line in \large boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak % Never break after part entry
+ \endgroup}
+
+\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break
+ \addvspace{1.0em plus 1pt} % space above toc entry
+ \@tempdima 1.5em % width of box holding section number
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\bf % Boldface for section title.
+ \leavevmode % TeX command to enter horizontal mode.
+ #1}\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep
+ mu$}\hfill \nobreak \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+% Some of these parameters may have to be increased if a document division
+% has more than 9 sub-parts (a two-digit subpart may encroach upon the
+% following text).
+\def\l@clause{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subclause{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@subsubclause{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@namelesssubsubclause{\@gobbletwo}
+\def\l@subsubsubclause{\@dottedtocline{5}{10em}{5em}}
+\def\l@namelesssubsubsubclause{\@gobbletwo}
+
+% Definitions produce no table of contents entry, so \l@definition just drops
+% its arguments
+\def\l@definition{\@gobbletwo}
+
+% Special table of contents command used by Introduction and Foreword.
+\def\l@iso@intro{
+ \addvspace{1.0em plus 1pt} % space above toc entry
+ \@dottedtocline{1}{\z@}{\z@}}
+
+% LIST OF FIGURES
+%
+\def\listoffigures{\section*{Figures}\@starttoc{lof}}
+
+\def\l@figure{\@dottedtocline{1}{0em}{2.3em}}
+
+% LIST OF TABLES
+%
+\def\listoftables{\section*{Tables}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment is left over from article.sty; the iso
+% style uses the references environment but I've left thebibiliography
+% in for old times' sake.
+% Note that the \@cite command is changed later on, so citations look
+% different to those of article.sty.
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus -.07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+
+\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+% \def\@biblabel#1{[#1]\hfill} % Produces the label for a \bibitem[...]
+ % command.
+% \def\@cite#1{[#1]} % Produces the output of the \cite command.
+
+
+% ****************************************
+% * REFERENCES *
+% ****************************************
+%
+% The references environment is the iso style equivalent of the
+% thebibliography environment.
+%
+% The references environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus -.07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not to produce an end-of-sentence space.
+
+\def\references{\list
+ {}{\labelwidth\z@\leftmargin\z@\labelsep\z@\itemindent\z@
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \def\@biblabel##1{
+ {\rm##1,\hskip .5em\relax}}} % Produces the label for \bibitem[...]
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax
+ \it}
+
+\let\endreferences=\endlist
+
+% Produces the output of the \cite command.
+% NDN: If a \cite is the first item in a paragraph, it is called in vmode
+% and its argument is set in an hbox and appended to the vertical list.
+% This doesn't happen in article.sty etc because the first character of
+% a citation is '[', which starts a new paragraph. However, iso.sty has
+% to put in a \leavevmode to fix things.
+\def\@cite#1#2{\leavevmode{#1\if@tempswa , #2\fi}}
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+% NDN: ISO guidelines say nothing about indices so I've left this alone.
+
+\newif\if@restonecol
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+\def\@idxitem{\par\hangindent 40pt}
+
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+% A standard should be indexed by clause number so we redefine \index
+% to give the option of indexing by page or by clause number.
+% This is accomplished by redefining \@wrindex and adding commands to
+% change the indexing style.
+% Unfortunately, makeindex doesn't work with clause numbers, so the default
+% is to index by page.
+%
+\def\@wrindex#1{\let\thepage\relax
+ \xdef\@gtempa{\write\@indexfile{\string
+ \indexentry{#1}{\@indexlabel}}}\endgroup\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+\def\pageindex{\def\@indexlabel{\thepage}}
+\def\clauseindex{\def\@indexlabel{\@currentlabel}}
+\pageindex
+
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@} % The \hrule has default height of .4pt .
+
+% ISO have the footnote counter reset after every page.
+% \newcounter{footnote}
+\@addtoreset{footnote}{page}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+\def\thefootnote{\arabic{footnote})}
+\def\thempfootnote{\arabic{mpfootnote})}
+
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth).
+%
+% The following macro indents all lines of the footnote by 10pt, and
+% indents the first line of a new paragraph by 1em. To change these
+% dimensions, just substitute the desired value for '10pt' [in both
+% places] or '1em'. The mark is flushright against the footnote.
+% \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+% \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+%
+% A simpler macro is used, in which the footnote text is
+% set like an ordinary text paragraph, with no indentation.
+% I am not sure whether \hss is useful or not.
+
+\long\def\@makefntext#1{\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+% changed 25 Jun 86 to fix according to Howard Trickey:
+% instead of \unhbox\@tempboxa\par we do #1: #2\par
+% ISO wants the number separated from the text by a long dash so we put that
+% rather than a colon.
+% We also put the \vskip after the caption rather than before, as ISO titles
+% go above their tables/figures rather than below.
+
+\long\def\@makecaption#1#2{
+ \setbox\@tempboxa\hbox{\bf#1 --- #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ {\bf#1 --- #2}\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+ \vskip 10pt}
+
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+
+% FIGURE
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+
+% \maketitle ==
+% BEGIN
+% \newpage
+% \iso@setmargins % Set margins for body of standard
+% \begingroup
+% redefine \@makefnmark so footnote marks take zero space (this makes
+% centering look better)
+% \thefootnote == \fnsymbol{footnote} % to number by *, dagger, etc.
+% \if@isoonecolumn % If user has given onecolumn style option
+% \onecolumn % set in single column.
+% \global\@topnum\z@ % Prevents figures from going at top of page.
+% \@maketitle
+% \else \twocolumn[\@maketitle] \fi
+% \thispagestyle{firstpage}
+% \@thanks % \thanks defines \@thanks to have \footnotetext commands for
+% % producing footnotes.
+% \endgroup
+% \pagenumbering{arabic} % Earlier pages use Roman
+% END
+
+\def\maketitle{
+ \newpage
+ \iso@setmargins
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@isoonecolumn
+ \onecolumn
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle
+ \else \twocolumn[\@maketitle] \fi
+ \thispagestyle{firstpage}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \pagenumbering{arabic}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{
+ \null
+ \vskip 2em % Vertical space above title.
+ \begin{flushleft}
+ {\LARGE\bf \@title \par} % Title set in \LARGE size and bold font.
+ \vskip 1.5em % Vertical space after title.
+\end{flushleft}}
+
+% Camera-ready copy.
+% The \cameraready macro alters page numbers so that the table of contents
+% starts on page ii, a page is skipped before the introduction if there
+% is no foreword and the copyright notice is printed.
+% This macro should only be used in the preamble as it will mess up page
+% numbering and page sizes if used elsewhere.
+% If \cameraready is used, \tableofcontents should also be used as it resets
+% the page size.
+\newif\if@cameraready \@camerareadyfalse
+\def\cameraready{\@camerareadytrue\stepcounter{page}%
+ \global\advance\textheight by -\@copyrightheight%
+ \global\advance\footskip by \@copyrightheight}
+
+% Copyright text
+% This gets set at the foot of the first page of tables of contents, if
+% \cameraready is in force.
+\def\@copyrighttext{
+\copyright\quad ISO/IEC\quad \theyear\newline
+All rights reserved.
+Unless otherwise specified, no part of this publication may be reproduced
+or utilized in any form or by any means, electronic or mechanical,
+including photocopying and microfilm, without permission in writing from
+the publisher.\newline
+\makebox[\textwidth][r]{%
+ISO/IEC Copyright Office $\bullet$ Case Postale 56 $\bullet$
+CH-1211 Gen{\`e}ve 20 $\bullet$ Switzerland}\newline
+Printed in Switzerland}
+% Height of box in which to place copyright text
+\def\@copyrightheight{1.5in}
+
+% \abstract removed as inappropriate to the iso style
+%\def\abstract{\if@twocolumn
+%\section*{Abstract}
+%\else \small
+%\begin{center}
+%{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+%\end{center}
+%\quotation
+%\fi}
+%
+%\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \sectionmark, ... , where
+% \sectionmark{TEXT} is called by \section to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'left' mark. Works like TeX's
+% \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'right' mark. Works like TeX's
+% \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \section command and
+% the right mark is changed by a \clause command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+% Commands like \tableofcontents that should set the marks in some page styles
+% use a \@mkboth command, which is \let by the pagestyle command (\ps@...)
+% to \markboth for setting the heading or \@gobbletwo to do nothing.
+
+\mark{{}{}} % Initializes TeX's marks
+
+% \ps@empty and \ps@plain defined in LATEX.TEX
+
+% Definition of 'headings' page style
+% Note the use of ##1 for parameter of \def\sectionmark inside the
+% \def\ps@headings.
+% NDN: another one that's left in for old times' sake.
+%
+
+\if@twoside % If two-sided printing.
+\def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@evenhead{\rm \thepage\hfil \sl \leftmark}% Left heading.
+\def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage}% Right heading.
+\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}%
+\def\clausemark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \theclause\hskip 1em\relax \fi ##1}}}
+\else % If one-sided printing.
+\def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage}% Heading.
+\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+% Definition of 'myheadings' page style.
+% NDN: another one that's left in for old times' sake.
+%
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil \rm\thepage}%
+\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox {}}%
+\def\@evenfoot{}\def\sectionmark##1{}\def\clausemark##1{}}
+
+% Definition of the 'isoheadings' page style.
+% We allow the user to redefine the running header and running footer,
+% should they wish.
+\def\runninghead#1{\def\@runninghead{{#1}}}
+\runninghead{{\thestandard\ : \theyear(E)}} % default running header
+\def\runningfoot#1{\def\@runningfoot{{#1}}}
+\runningfoot{} % empty default running footer
+\def\ps@isoheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hfil{\Large\bf\@runninghead}}
+\def\@evenhead{{\Large\bf\@runninghead}\hfil}
+\def\@oddfoot{{\Large\bf\@runningfoot\hfil\thepage}}
+\def\@evenfoot{{\Large\bf\thepage\hfil\@runningfoot}}
+\def\sectionmark##1{}\def\clausemark##1{}}
+
+% Definition of the 'firstpage' style. Used for the titlepage.
+% Allow the user to redefine the banner thingy.
+\def\documenttype#1{\def\@documenttype{{#1}}}
+\documenttype{{INTERNATIONAL STANDARD}} % default document type
+\def\ps@firstpage{\let\@mkboth\@gobbletwo
+\def\@oddhead{\vbox{\hrule height.3mm\vskip7pt\vfil
+{\hbox to \textwidth{\Large\bf\@documenttype\hfil
+\@runninghead}
+}\vskip5pt\vfil\hrule height.3mm}}
+\def\@evenhead{\vbox{\hrule height.3mm\vskip5pt\vfil
+{\hbox to \textwidth{\Large\bf\@documenttype\hfil
+\@runninghead}
+}\vfil\hrule height.3mm}}
+\def\@oddfoot{{\Large\bf\@runningfoot\hfil\thepage}}
+\def\@evenfoot{{\Large\bf\thepage\hfil\@runningfoot}}
+\def\sectionmark##1{}\def\clausemark##1{}}
+
+% Definition of the 'copyrightheadings' style. Used for the copyright notice.
+% Puts the copyright notice in the footer and then resets the page size.
+% The \makebox[0pt] prevents an overfull \hbox warning from LaTeX.
+\def\ps@copyrightheadings{\let\@mkboth\gobbletwo
+\def\@oddhead{\hfil{\Large\bf\@runninghead}}
+\def\@evenhead{{\Large\bf\@runninghead}\hfil}
+\def\@oddfoot{\hfil\makebox[0pt][r]{\begin{minipage}[b]{\textwidth}%
+ {\@copyrightsize\@copyrighttext}\\[0.3in]%
+ {\Large\bf\@runningfoot\hfil\thepage}%
+ \end{minipage}}%
+ \global\advance\footskip by -\@copyrightheight%
+ \global\advance\textheight by \@copyrightheight%
+ \pagestyle{isoheadings}}
+\def\@evenfoot{\makebox[0pt][l]{\begin{minipage}[b]{\textwidth}%
+ {\@copyrightsize\@copyrighttext}\\[0.3in]%
+ {\Large\bf\thepage\hfil\@runningfoot}%
+ \end{minipage}}\hfil%
+ \global\advance\footskip by -\@copyrightheight%
+ \global\advance\textheight by \@copyrightheight%
+ \pagestyle{isoheadings}}
+\def\sectionmark##1{}\def\clausemark##1{}}
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\def\theyear{\number\year}
+
+%
+% STANDARD NUMBER
+%
+\def\standard#1{\def\@standard{{#1}}
+ \def\thestandard{ISO/IEC \@standard}}
+\standard{XXXX} % default standard number
+
+%
+% VERSION NUMBER
+%
+\def\version#1{\def\theversion{#1}}
+\version{XXXX} % default version number
+
+%
+% PS-LaTeX COMPATIBILITY
+%
+% If running under PS-LaTeX, we change a few character codes and reset the
+% spaceskip to reduce hyphenation.
+% The former is done below; the latter at the end of this file.
+%
+% So that we can detect whether we are running PS-LaTeX, define the
+% following:
+\def\@pslfmtname{pslplain}
+
+% Some useful characters
+\ifx\fmtname\@pslfmtname
+ \chardef\bslash="5C % gives \
+ \chardef\lquote="C1 % gives `
+ \chardef\rquote="C2 % gives '
+\else
+ % We protect \bslash so that it can be redefined by \prog and still appear
+ % in section headings and the like, without being expanded too early.
+ \def\bslash{\protect\pbslash}
+ \def\pbslash{\mbox{$\mathchar"026E$}}
+ \chardef\lquote="12 % gives `
+ \chardef\rquote="13 % gives '
+\fi
+
+%
+% USEFUL CHARACTERS
+%
+\chardef\caret=`\^
+\chardef\tilde="7E
+
+%
+% PROG
+%
+% The prog environment sets its contents in typewriter font, redefines
+% \bslash to give a typewriter backslash and allows interword spaces to
+% flex a little if in two-column mode (this is because setting typewriter
+% font with fixed spaces in two-column mode gives awful line breaks).
+% We protect \prog so that it can be used in section headings and the like; in
+% particular, the definitions of \prog and \bslash are designed so that
+% \section{\prog{Here is a \bslash}} produces a typewriter font backslash in
+% the table of contents.
+% This definition also works in PS-LaTeX since it does not use \pbslash, but
+% gives the character code directly.
+% The \relax prevents errors such as \prog{\bslash 70} which produces an
+% invalid character code error.
+\def\prog{\protect\pprog}
+\def\pprog#1{{%
+ \def\pbslash{\char"5C\relax}%
+ \tt #1}}
+
+%
+% NEWVERBATIM
+%
+% \newverbatim{foo} creates a new environment, foo, which behaves exactly
+% like the verbatim environment except that it is delimited by
+% \begin{foo} ... \end{foo}.
+% See the VERBATIM section of latex.tex for the inspiration behind this.
+%
+
+% Redefine \@verbatim so that \spaceskip manipulations can be undone.
+\let\iso@verb\@verbatim
+\def\@verbatim{\iso@verb\@verbspace}
+
+\def\newverbatim#1{\expandafter\def\csname #1\endcsname{%
+\@verbatim \frenchspacing\@vobeyspaces%
+\csname @x#1verbatim\endcsname}
+\expandafter\let\csname end#1\endcsname=\endtrivlist
+\new@xverbatim{#1}}
+
+\begingroup \catcode `|=0 \catcode `[= 1
+\catcode`]=2 \catcode `\{=12 \catcode `\}=12
+\catcode`\\=12
+|gdef|new@xverbatim#1[
+|expandafter|def|csname @x#1verbatim|endcsname##1\end{#1}[##1|end[#1]]]
+|endgroup
+
+%
+% IDENTIFICATION
+%
+% Documents may need to know what style they are using so we provide
+% \stylename to tell them (by analogy with \fmtname).
+% Other styles like article, report, ucthesis etc should also define
+% this macro for it to be useful. Perhaps, one day, who knows...
+%
+\def\stylename{iso}
+
+%
+% LINE BREAKING
+%
+% Typesetting in two-column mode can give terrible line breaks so define
+% a macro to let TeX be more lax about things.
+% \verysloppy relaxes things considerably.
+% \unverysloppy reverts to default values.
+\def\verysloppy{%
+ \exhyphenpenalty=0%
+ \adjdemerits=100%
+ \finalhyphendemerits=0}
+\def\unverysloppy{%
+ \exhyphenpenalty=50%
+ \adjdemerits=10000%
+ \finalhyphendemerits=5000}
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\ps@isoheadings % 'isoheadings' page style
+\pagenumbering{roman} % Roman page numbers (changed to Arabic by
+ % \maketitle)
+\onecolumn % Single column (for table of contents etc.)
+ % changed to twocolumn by \maketitle)
+
+% If running PS-LaTeX, then improve spacing somewhat.
+\ifx\fmtname\@pslfmtname%
+ \xdef\@defaultspaceskip{\the\spaceskip}
+ \def\defaultspacing{\spaceskip=\@defaultspaceskip}
+ {\tt \xdef\@verbskip{\the\spaceskip}}% Find out the typewriter \spaceskip
+ \def\@verbspace{\spaceskip=\@verbskip}% Use it in verbatim mode
+ \spaceskip=4pt plus 4pt minus 1.6pt% Increase default spacing
+\else
+ \def\defaultspacing{}
+ \def\@verbspace{}
+\fi
+
+\sloppy
+%\verysloppy
+\flushbottom
+\if@twoside\else\raggedbottom\fi % Ragged bottom unless twoside option.
diff --git a/macros/latex209/contrib/iso/iso10.sty b/macros/latex209/contrib/iso/iso10.sty
new file mode 100644
index 0000000000..84d333bb77
--- /dev/null
+++ b/macros/latex209/contrib/iso/iso10.sty
@@ -0,0 +1,441 @@
+% ISO DOCUMENT STYLE <91/05/02>
+% for LaTeX version 2.09
+
+% @(#)iso10.sty 2.6 dated 91/05/02 at 09:57:33
+
+% File: iso10.sty
+% Author: Nicolas North
+% Email: ndn@seg.npl.co.uk
+% Date: 91/05/02
+%
+% A rewrite of art10.doc to typeset in ISO central secretariat-approved
+% style.
+
+% This file is based on Leslie Lamport's art10.doc.
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{10pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini%
+\let\isoclauseref\@currentlabel
+\itemindent\leftmargini}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\leftmargin\leftmargini%
+\let\isoclauseref\@currentlabel
+\itemindent\leftmargini}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{13pt}\xipt\@xipt}
+\def\Large{\@setsize\Large{15pt}\xiipt\@xiipt}
+\def\LArge{\@setsize\LArge{18pt}\xivpt\@xivpt} % used for annex headings
+\def\LARGE{\@setsize\LARGE{20pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+% The size font in which the copyright notice is set.
+% This should be 9pt.
+\def\@copyrightsize{\small}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+% SIDE MARGINS:
+% These are the margins used for setting stuff before the title.
+% \maketitle calls \iso@setmargins to set margins for the body of the
+% standard.
+\if@twoside % Values for two-sided printing (the default):
+ \oddsidemargin 59mm % Left margin on odd-numbered pages.
+ \evensidemargin -14mm % Left margin on even-numbered pages.
+ \marginparwidth 8mm % Width of marginal notes (none in ISO standards).
+\else % Values for one-sided printing:
+ % (can't happen in ISO style)
+ \oddsidemargin -23pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin -23pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 1mm % Horizontal space between outer margin and
+ % marginal note
+
+% Allow the user to shift the page across if their laser printer is
+% mis-aligned. There should really be a vertical version of this as well.
+\newdimen\@leftoffset \@leftoffset=\z@
+\def\leftoffset#1{
+ \setlength{\@leftoffset}{#1}
+ \advance\oddsidemargin by\@leftoffset
+ \advance\evensidemargin by \@leftoffset}
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -54pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 25pt % Height of box containing running head.
+\headsep 39pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 27pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 240mm
+\textwidth 117mm % Width of text line.
+ % For two-column mode:
+\columnsep 10mm % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% Page layout for the body of the standard
+\def\iso@setmargins{
+ \global\oddsidemargin -4mm
+ \global\advance\oddsidemargin by\@leftoffset
+ \global\evensidemargin -14mm
+ \global\advance\evensidemargin by\@leftoffset
+ \global\textwidth 180mm}
+
+% FOOTNOTES:
+
+\footnotesep 6.65pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 9pt plus 4pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% NDN: I haven't changed the float parameters for the iso style
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip \baselineskip % Extra vertical space between paragraphs.
+\parindent 0pt % Width of paragraph indentation.
+%\topsep 0pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 0pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+%\itemsep 2pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+% NDN: unchanged from art10.doc
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% NDN: note that section names have changed from the usual LaTeX ones.
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+% NDN: I haven't considered parts for the iso style yet, so this is just
+% as in art10.doc.
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par \nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'clause'
+% LEVEL : a number, denoting depth of section -- i.e., section=1,
+% clause = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+% A definition needs to set its number and title in
+% different sizes so it manipulates its argument before passing it on
+% to \@startsection.
+
+% These spacings are provisional only.
+
+\def\section{\@startsection {section}{1}{\z@}{3ex plus 1ex minus
+ .2ex}{.1ex plus .1ex}{\Large\bf}}
+\def\clause{\@startsection{clause}{2}{\z@}{2ex plus .5ex minus
+ .2ex}{.1ex plus .1ex}{\large\bf}}
+\def\definition#1{\@startsection{definition}{2}{\z@}{2ex plus .5ex minus
+ .2ex}{-.5em plus -.1em minus -.1em}{\large\bf}%
+ {\protect{\normalsize\bf#1:\thinspace}}}
+\def\subclause{\@startsection{subclause}{3}{\z@}{2ex plus 1ex minus
+ .2ex}{.1ex plus .1ex}{\normalsize\bf}}
+\def\subsubclause{\@startsection
+ {subsubclause}{4}{\z@}{2ex plus 1ex minus .2ex}{.1ex plus .1ex}
+ {\normalsize\bf}}
+\def\namelesssubsubclause{\@startsection{namelesssubsubclause}{4}{\z@}{
+ 2ex plus 1ex minus .2ex}{-.5em plus -.1em minus -.1em}{\normalsize\bf}{}}
+\def\subsubsubclause{\@startsection
+ {subsubsubclause}{5}{\parindent}{2ex plus 1ex minus
+ .2ex}{.1ex plus .1ex}{\normalsize\bf}}
+\def\namelesssubsubsubclause{\@startsection{namelesssubsubsubclause}{5}{\z@}{
+ 2ex plus 1ex minus .2ex}{-.5em plus -.1em minus -.1em}{\normalsize\bf}{}}
+
+% Header for introductory sections which are set in \LArge.
+% The spacing is provisional.
+\def\@introsection{\@startsection{section}{1}{\z@}{3ex plus 1ex minus
+ .2ex}{.1ex plus .1ex}{\LArge\bf}*}
+
+% A special command for the foreword. This ensures that
+% a new page is started and the title is in \LArge,
+% starting 84mm from the top of the page.
+% If there is no foreword, we should skip a page number before the
+% introduction (if there is one). \if@foreword allows us to test whether
+% a foreword has appeared.
+\newif\if@foreword \@forewordfalse
+\def\foreword{
+\@forewordtrue\newpage\vspace*{39mm}\@introsection{Foreword}
+\addcontentsline{toc}{iso@intro}{\bf Foreword}}
+
+
+% A special command for introductory sections. Ensures that
+% a new page is started, skipping a page number
+% if there was no foreword and camera-ready copy is being produced and the
+% title is in \LArge, starting 84mm from the top of the page.
+% The spacing around the header is currently that for sections.
+\def\introduction{
+\newpage\vspace*{39mm}\@introsection{Introduction}
+\addcontentsline{toc}{iso@intro}{\bf Introduction}
+\if@cameraready\if@foreword\else\stepcounter{page}\fi\fi}
+
+
+% Default initializations of \...mark commands. (See below for their
+% use in defining page styles.
+%
+
+\def\sectionmark#1{} % Preloaded definitions
+\def\clausemark#1{}
+\def\definitionmark#1{}
+\def\subclausemark#1{}
+\def\subsubclausemark#1{}
+\def\namelesssubsubclausemark#1{}
+\def\subsubsubclausemark#1{}
+\def\namelesssubsubsubclausemark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{5}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin
+% NDN: list spacing is simple for ISO standards: everything is one line
+% apart, so listii, listiii etc are very simple.
+% ISO set all lists with a separation of 1em between label and text,
+% regardless of the label width - looks awful but there you are.
+
+\leftmargini 1em
+\leftmarginii 1em
+\leftmarginiii 1em
+\leftmarginiv 1em
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep 1em
+\labelwidth 0pt
+% \parsep 4pt plus 2pt minus 1pt (Removed 9 Jun 87)
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \itemindent, \topsep, \parsep, and \itemsep
+% Sets up \isoclauseref so that enumerated lists can refer to it for labeling
+\def\@listI{\leftmargin\leftmargini \parsep\baselineskip%
+\itemindent\leftmargini
+\let\isoclauseref\@currentlabel
+\topsep 0pt plus 1pt minus 1pt%
+\itemsep 0pt plus 1pt minus 1pt}
+
+\let\@listi\@listI
+\@listi
+
+
+\def\@listii{\leftmargin\leftmarginii
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginii}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginiii}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginiv}
+
+\def\@listv{\leftmargin\leftmarginv
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginv}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginvi}
+
+
+
diff --git a/macros/latex209/contrib/iso/iso9.sty b/macros/latex209/contrib/iso/iso9.sty
new file mode 100644
index 0000000000..b1cfa0d42a
--- /dev/null
+++ b/macros/latex209/contrib/iso/iso9.sty
@@ -0,0 +1,442 @@
+% ISO DOCUMENT STYLE <91/05/02>
+% for LaTeX version 2.09
+
+% @(#)iso9.sty 2.6 dated 91/05/02 at 09:57:07
+
+% File: iso9.sty
+% Author: Nicolas North
+% Email: ndn@seg.npl.co.uk
+% Date: 91/05/02
+%
+% A rewrite of art10.doc to typeset in ISO central secretariat-approved
+% style.
+
+% This file is based on Leslie Lamport's art10.doc.
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{10pt}\ixpt\@ixpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{9pt}\viiipt\@viiipt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini%
+\let\isoclauseref\@currentlabel
+\itemindent\leftmargini}}
+
+\def\footnotesize{\@setsize\footnotesize{9pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\leftmargin\leftmargini%
+\let\isoclauseref\@currentlabel
+\itemindent\leftmargini}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{11pt}\xpt\@xpt}
+\def\Large{\@setsize\Large{12pt}\xipt\@xipt}
+\def\LArge{\@setsize\LArge{18pt}\xivpt\@xivpt} % used for annex headings
+\def\LARGE{\@setsize\LARGE{20pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+% The size font in which the copyright notice is set.
+% This should be 9pt.
+\def\@copyrightsize{\normalsize}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+% SIDE MARGINS:
+% These are the margins used for setting stuff before the title.
+% \maketitle calls \iso@setmargins to set margins for the body of the
+% standard.
+\if@twoside % Values for two-sided printing (the default):
+ \oddsidemargin 59mm % Left margin on odd-numbered pages.
+ \evensidemargin -14mm % Left margin on even-numbered pages.
+ \marginparwidth 8mm % Width of marginal notes (none in ISO standards).
+\else % Values for one-sided printing:
+ % (can't happen in ISO style)
+ \oddsidemargin -23pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin -23pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 1mm % Horizontal space between outer margin and
+ % marginal note
+
+% Allow the user to shift the page across if their laser printer is
+% mis-aligned. There should really be a vertical version of this as well.
+\newdimen\@leftoffset \@leftoffset=\z@
+\def\leftoffset#1{
+ \setlength{\@leftoffset}{#1}
+ \advance\oddsidemargin by\@leftoffset
+ \advance\evensidemargin by \@leftoffset}
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -54pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 25pt % Height of box containing running head.
+\headsep 39pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 27pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 240mm
+\textwidth 117mm % Width of text line.
+ % For two-column mode:
+\columnsep 10mm % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% Page layout for the body of the standard
+\def\iso@setmargins{
+ \global\oddsidemargin -4mm
+ \global\advance\oddsidemargin by\@leftoffset
+ \global\evensidemargin -14mm
+ \global\advance\evensidemargin by\@leftoffset
+ \global\textwidth 180mm}
+
+% FOOTNOTES:
+
+\footnotesep 6.65pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 9pt plus 4pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% NDN: I haven't changed the float parameters for the iso style
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip \baselineskip % Extra vertical space between paragraphs.
+\parindent 0pt % Width of paragraph indentation.
+%\topsep 0pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 0pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+%\itemsep 2pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+% NDN: unchanged from art10.doc
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% NDN: note that section names have changed from the usual LaTeX ones.
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+% NDN: I haven't considered parts for the iso style yet, so this is just
+% as in art10.doc.
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par \nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'clause'
+% LEVEL : a number, denoting depth of section -- i.e., section=1,
+% clause = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+% A definition needs to set its number and title in
+% different sizes so it manipulates its argument before passing it on
+% to \@startsection.
+
+% These spacings are provisional only.
+
+\def\section{\@startsection {section}{1}{\z@}{3ex plus 1ex minus
+ .2ex}{.1ex plus .1ex}{\Large\bf}}
+\def\clause{\@startsection{clause}{2}{\z@}{2ex plus .5ex minus
+ .2ex}{.1ex plus .1ex}{\large\bf}}
+\def\definition#1{\@startsection{definition}{2}{\z@}{2ex plus .5ex minus
+ .2ex}{-.5em plus -.1em minus -.1em}{\large\bf}%
+ {\protect{\normalsize\bf#1:\thinspace}}}
+\def\subclause{\@startsection{subclause}{3}{\z@}{2ex plus 1ex minus
+ .2ex}{.1ex plus .1ex}{\normalsize\bf}}
+\def\subsubclause{\@startsection
+ {subsubclause}{4}{\z@}{2ex plus 1ex minus .2ex}{.1ex plus .1ex}
+ {\normalsize\bf}}
+\def\namelesssubsubclause{\@startsection{namelesssubsubclause}{4}{\z@}{
+ 2ex plus 1ex minus .2ex}{-.5em plus -.1em minus -.1em}{\normalsize\bf}{}}
+\def\subsubsubclause{\@startsection
+ {subsubsubclause}{5}{\parindent}{2ex plus 1ex minus
+ .2ex}{.1ex plus .1ex}{\normalsize\bf}}
+\def\namelesssubsubsubclause{\@startsection{namelesssubsubsubclause}{5}{\z@}{
+ 2ex plus 1ex minus .2ex}{-.5em plus -.1em minus -.1em}{\normalsize\bf}{}}
+
+% Header for introductory sections which are set in \LArge.
+% The spacing is provisional.
+\def\@introsection{\@startsection{section}{1}{\z@}{3ex plus 1ex minus
+ .2ex}{.1ex plus .1ex}{\LArge\bf}*}
+
+
+% A special command for the foreword. This ensures that
+% a new page is started and the title is in \LArge,
+% starting 84mm from the top of the page.
+% If there is no foreword, we should skip a page number before the
+% introduction (if there is one). \if@foreword allows us to test whether
+% a foreword has appeared.
+\newif\if@foreword \@forewordfalse
+\def\foreword{
+\@forewordtrue\newpage\vspace*{39mm}\@introsection{Foreword}
+\addcontentsline{toc}{iso@intro}{\bf Foreword}}
+
+
+% A special command for introductory sections. Ensures that
+% a new page is started, skipping a page number
+% if there was no foreword and camera-ready copy is being produced and the
+% title is in \LArge, starting 84mm from the top of the page.
+% The spacing around the header is currently that for sections.
+\def\introduction{
+\newpage\vspace*{39mm}\@introsection{Introduction}
+\addcontentsline{toc}{iso@intro}{\bf Introduction}
+\if@cameraready\if@foreword\else\stepcounter{page}\fi\fi}
+
+
+% Default initializations of \...mark commands. (See below for their
+% use in defining page styles.
+%
+
+\def\sectionmark#1{} % Preloaded definitions
+\def\clausemark#1{}
+\def\definitionmark#1{}
+\def\subclausemark#1{}
+\def\subsubclausemark#1{}
+\def\namelesssubsubclausemark#1{}
+\def\subsubsubclausemark#1{}
+\def\namelesssubsubsubclausemark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{5}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin
+% NDN: list spacing is simple for ISO standards: everything is one line
+% apart, so listii, listiii etc are very simple.
+% ISO set all lists with a separation of 1em between label and text,
+% regardless of the label width - looks awful but there you are.
+
+\leftmargini 1em
+\leftmarginii 1em
+\leftmarginiii 1em
+\leftmarginiv 1em
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep 1em
+\labelwidth 0pt
+% \parsep 4pt plus 2pt minus 1pt (Removed 9 Jun 87)
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \itemindent, \topsep, \parsep, and \itemsep
+% Sets up \isoclauseref so that enumerated lists can refer to it for labeling
+\def\@listI{\leftmargin\leftmargini \parsep\baselineskip%
+\itemindent\leftmargini
+\let\isoclauseref\@currentlabel
+\topsep 0pt plus 1pt minus 1pt%
+\itemsep 0pt plus 1pt minus 1pt}
+
+\let\@listi\@listI
+\@listi
+
+
+\def\@listii{\leftmargin\leftmarginii
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginii}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginiii}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginiv}
+
+\def\@listv{\leftmargin\leftmarginv
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginv}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \let\isoclauseref\@currentlabel
+ \itemindent\leftmarginvi}
+
+
+
diff --git a/macros/latex209/contrib/jeep/jeep.sty b/macros/latex209/contrib/jeep/jeep.sty
new file mode 100644
index 0000000000..79a1d5f44c
--- /dev/null
+++ b/macros/latex209/contrib/jeep/jeep.sty
@@ -0,0 +1,394 @@
+% jeep.sty, December 20, 1991
+% G. W. Stewart
+% Department of Computer Science
+% University of Maryland
+% College Park, MD 20784
+%
+% stewart@thales.umd.edu
+
+% This is a personal customization of the LaTeX style files
+% article (4/16/88) and report (5/26/88). The changes are
+% described more fully in the document jeep.tex. Briefly
+% the style
+%
+% 1. Changes the default page sizes to reflect the fact
+% that most output will be on 8.5 x 11 inch paper.
+%
+% 2. Adds commands that allow the casual LaTeX to change
+% the formats of chapter, section, and theorem heads.
+%
+% 3. Adds commands to number equations and theorems within
+% sections or subsections.
+%
+% 4. Makes Lance Berc's three part headers and footers the
+% default page style. Adds a macro to underline the
+% header.
+%
+% 5. Changes the default numbering of enumerate to arabic.
+% Adds a new enumeration environment in which the items
+% are close together.
+%
+% 6. Adds a command to produce a compact table of contents.
+%
+% 7. Adds commands to produce symbolic footnote marks and
+% equation labels.
+%
+% 8. Adds commands by John hobby that make \bigl, \bigr, etc.
+% work properly.
+%
+% 9. Adds Lamport's alltt environment--a quasi-verbatim
+% environment that recognizes TeX and LaTeX commands.
+
+% Change the default page sizes.
+
+\setlength{\topmargin}{.25in}
+\setlength{\textheight}{7.5in}
+\setlength{\oddsidemargin}{.375in}
+\setlength{\evensidemargin}{.375in}
+\setlength{\textwidth}{5.75in}
+
+% Define the command \mychapter{<head1>}{<head2>}. <head1>
+% is the text to put in the chapter head if there is a
+% chapter number; <head2>, if not.
+
+\def\@chapapp{Chapter}
+\def\chapapp{\@chapapp}
+
+\def\mychapter#1#2{
+ \def\@chaphead##1{#1}
+ \def\@schaphead##1{#2}
+}
+
+\def\@makechapterhead#1{ \vspace*{\chaptopsep} { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \@chaphead{#1} \else \@schaphead{#1} \fi
+ \par \nobreak \vskip \chapaftersep } }
+
+\def\@makeschapterhead#1{ \vspace*{\chaptopsep} { \parindent 0pt \raggedright
+ \@schaphead{#1}\par
+ \nobreak \vskip \chapaftersep } }
+
+% \chaptopsep is the space between the top of the text page and the
+% chapter head. \chapaftersep is the space between the chapter
+% head and the text.
+
+\newlength{\chaptopsep}
+\setlength{\chaptopsep}{.5in}
+\newlength{\chapaftersep}
+\setlength{\chapaftersep}{.5in}
+
+% Default chapter headings.
+
+\mychapter{\LARGE \sc \thechapter. #1}{\LARGE \sc #1}
+
+
+% Define the command \mysection{<sec>}{<style>}{<prefix>}.
+% <sec> is the section level--section, subsection, etc. <style>
+% is the style in which the section head is to be set; e.g.,
+% \large\bf. <prefix> is what proceeds the head text, usually
+% \the<sec> followed by some putctuation.
+
+
+\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi \@ifstar
+ {\@ssect{#3}{#4}{#5}{#1}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}
+ \edef\@svsec{\expandafter\relax\csname @pre#1\endcsname}\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup \expandafter\relax\csname @#1style\endcsname\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{%
+ \expandafter\relax\csname @#1style\endcsname\relax
+ \hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup \expandafter\relax\csname @#4style\endcsname\relax
+ \@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #5}\fi
+ \@xsect{#3}}
+
+\def\mysection#1#2#3{
+ \expandafter\def\csname @#1style\endcsname{#2}
+ \expandafter\def\csname @pre#1\endcsname{#3}
+}
+
+% Default section heads.
+
+\mysection{section}{\large\bf}{\thesection.~}
+\mysection{subsection}{\normalsize\bf}{\thesubsection.~}
+\mysection{subsubsection}{\normalsize\bf}{\thesubsubsection.~}
+\mysection{paragraph}{\normalsize\bf}{\theparagraph.}
+\mysection{subparagraph}{\normalsize\bf}{\thesubparagraph.}
+
+% Redefine theorem environment macros to put \theoremcounterend
+% (default ".") after the "theorem" head.
+
+\def\@begintheorem#1#2{\sl \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\thmcounterend}]}
+\def\@opargbegintheorem#1#2#3{\sl \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3)\thmcounterend}]}
+\def\thmcounterend{.}
+
+
+% Define \numberbysection to number figures, table, equations, and
+% theorems within sections. Similarly for \numberbysubsection. Any
+% theorem-like environment numbered with theorem inherits this
+% numbering (however, be sure to define the. theorem environment
+% before invoking \numberbysection or \numberbysubsection).
+
+\def\numberbysection{\renewcommand{\thesection}{\arabic{section}}
+ \renewcommand{\theequation}{\thesection.\arabic{equation}}
+ \@addtoreset{equation}{section}
+ \renewcommand{\thetheorem}{\thesection.\arabic{theorem}}
+ \@addtoreset{theorem}{section}
+ \renewcommand{\thefigure}{\thesection.\arabic{figure}}
+ \@addtoreset{figure}{section}
+ \renewcommand{\thetable}{\thesection.\arabic{table}}
+ \@addtoreset{table}{section}}
+
+\def\numberbysubsection{\renewcommand{\thesection}{\arabic{section}}
+ \renewcommand{\thesubsection}{\arabic{subsection}}
+ \renewcommand{\theequation}{\thesubsection.\arabic{equation}}
+ \@addtoreset{equation}{subsection}
+ \renewcommand{\thetheorem}{\thesubsection.\arabic{theorem}}
+ \@addtoreset{theorem}{subsection}
+ \renewcommand{\thefigure}{\thesubsection.\arabic{figure}}
+ \@addtoreset{figure}{subsection}
+ \renewcommand{\thetable}{\thesubsection.\arabic{table}}
+ \@addtoreset{table}{subsection}}
+
+\@definecounter{theorem}
+
+
+% Change the labels of enumerate and outline to arabic numbers.
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{\arabic{enumii}.}
+\def\theenumii{\arabic{enumii}}
+\def\p@enumii{\theenumi.}
+\def\labelenumiii{\arabic{enumiii}.}
+\def\theenumiii{\arabic{enumiii}}
+\def\p@enumiii{\theenumi.\theenumii.}
+\def\labelenumiv{\arabic{enumiv}.}
+\def\theenumiv{\arabic{enumiv}}
+\def\p@enumiv{\p@enumiii.\theenumiii}
+
+% Outline is a new list style--the same as enumerate with
+% less space between the items.
+
+\def\outline{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{\hss\llap{##1}}
+ \parsep \z@ \itemsep \z@
+ \ifnum \@enumdepth > 1 \topsep \z@ \fi}\fi}
+
+\let\endoutline =\endlist
+
+% Three part head and foot macros by
+% Lance Berc
+% Olivetti Research Center
+% 2882 Sand Hill Road
+% Menlo Park, California 94025
+% (415) 496-6200
+% lance@orc.olivetti.com
+%
+% Modified 4/91 by G. W. Stewart to provide additional
+% even headings for books and the like.
+
+\def\lhead#1{\gdef\@lhead{#1}\gdef\@erhead{#1}}
+\def\lfoot#1{\gdef\@lfoot{#1}\gdef\@erfoot{#1}}
+\def\chead#1{\gdef\@chead{#1}\gdef\@echead{#1}}
+\def\cfoot#1{\gdef\@cfoot{#1}\gdef\@ecfoot{#1}}
+\def\rhead#1{\gdef\@rhead{#1}\gdef\@elhead{#1}}
+\def\rfoot#1{\gdef\@rfoot{#1}\gdef\@elfoot{#1}}
+
+\def\@lhead{} \def\@lfoot{}
+\def\@chead{} \def\@cfoot{}
+\def\@rhead{} \def\@rfoot{}
+
+\def\elhead#1{\gdef\@elhead{#1}} \def\elfoot#1{\gdef\@elfoot{#1}}
+\def\echead#1{\gdef\@echead{#1}} \def\ecfoot#1{\gdef\@ecfoot{#1}}
+\def\erhead#1{\gdef\@erhead{#1}} \def\erfoot#1{\gdef\@erfoot{#1}}
+
+\def\@elhead{} \def\@elfoot{}
+\def\@echead{} \def\@ecfoot{}
+\def\@erhead{} \def\@erfoot{}
+
+\def\@threepart#1#2#3{\rlap{#1} \hfil {#2} \hfil \llap{#3}}
+
+\def\ps@threepartheadings
+ {
+ \def\@oddhead{\@threepart{\@lhead}{\@chead}{\@rhead}}
+ \def\@oddfoot{\@threepart{\@lfoot}{\@cfoot}{\@rfoot}}
+
+ \if@twoside
+ \def\@evenhead{\@threepart{\@elhead}{\@echead}{\@erhead}}
+ \def\@evenfoot{\@threepart{\@elfoot}{\@ecfoot}{\@erfoot}}
+ \else
+ \def\@evenhead{\@threepart{\@lhead}{\@chead}{\@rhead}}
+ \def\@evenfoot{\@threepart{\@lfoot}{\@cfoot}{\@rfoot}}
+ \fi
+ }
+
+\ps@threepartheadings
+
+
+
+% Define \underhead to put a rule under the headers. \nounderhead
+% suppresses \underhead on the current page. The space between
+% the text and the rule is \underheadsep.
+
+\def\underhead{
+ \addtolength{\headheight}{\underheadsep}
+ \def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}
+ \vskip \underheadsep
+ \if@nounderhead\global\@nounderheadfalse
+ \hbox to\textwidth{}
+ \else \hbox to\textwidth{\hrulefill}\fi}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+
+}
+\def\ps@empty{\@nounderheadtrue
+ \let\@mkboth\@gobbletwo\def\@oddhead{}\def\@oddfoot{}%
+\def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@plain{\@nounderheadtrue
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{}\def\@oddfoot{\rm\hfil\thepage
+ \hfil}\def\@evenhead{}\let\@evenfoot\@oddfoot}
+
+
+\newif\if@nounderhead \@nounderheadfalse
+\def\nounderhead{\@nounderheadtrue}
+
+\newlength{\underheadsep}
+\setlength{\underheadsep}{.5ex}
+
+% Define \tighttoc to alter table of contents entry so that
+% sections are treated like subsections, subsubsections, etc.
+
+\def\tighttoc{\def\l@section{\@dottedtocline{1}{0em}{1.4em}}}
+
+% Define \symbolnote{<num>}{<text>} to produce a note with footnote
+% mark <num> (less than 10). The commands \symbolmark{<num>}
+% and \symboltext{<num>}{<text>} are analogues of
+% \footnotemark[<num>] and \footnotetext[<num>]{<text>}.
+
+\def\symbolnote#1#2{\let\@thefootn=\thefootnote%
+\let\@thempfootn=\thempfootnote%
+\renewcommand{\thefootnote}{\fnsymbol{footnote}}%
+\renewcommand{\thempfootnote}{\fnsymbol{mpfootnote}}%
+\footnotemark[#1]%
+\footnotetext[#1]{#2}%
+\let\thefootnote=\@thefootn\let\thempfootnote=\@thempfootn
+}
+
+\def\symbolmark#1{\let\@thefootn=\thefootnote%
+\let\@thempfootn=\thempfootnote%
+\renewcommand{\thefootnote}{\fnsymbol{footnote}}%
+\renewcommand{\thempfootnote}{\fnsymbol{mpfootnote}}%
+\footnotemark[#1]%
+\let\thefootnote=\@thefootn\let\thempfootnote=\@thempfootn
+}
+
+\def\symboltext#1#2{\let\@thefootn=\thefootnote%
+\let\@thempfootn=\thempfootnote%
+\renewcommand{\thefootnote}{\fnsymbol{footnote}}%
+\renewcommand{\thempfootnote}{\fnsymbol{mpfootnote}}%
+\footnotetext[#1]{#2}%
+\let\thefootnote=\@thefootn\let\thempfootnote=\@thempfootn
+}
+
+
+% Define symboleqn environment to make a displayed equation with
+% a symbolic equation label.
+
+\newenvironment{symboleqn}[1]{
+ \def\@savesymbol{#1}$$}{\eqno \@savesymbol $$\global\@ignoretrue}
+
+% Fix Plain's \bigl, \Bigl, etc. macros so that they try to scale with
+% LaTeX size changes. This uses the fact that \@setsize sets \ht\strutbox
+% to be 70% of the normal unstretched baselineskip. This is
+% the work of John Hobby.
+
+\def\big#1{{\hbox{$\left#1\vcenter to1.428\ht\strutbox{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vcenter to2.142\ht\strutbox{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vcenter to2.857\ht\strutbox{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vcenter to3.571\ht\strutbox{}\right.\n@space$}}}
+
+% Add a new environment literatim which is like the verbatim
+% environment except that \, {, and } have their usual meanings.
+% Thus, other commands and environments can appear within an `literatim'
+% environment. This is essentially Lamport's alltt environment
+% (the two sentences above were lifted from his description)
+% with the following additions. The old special commands $, &, ^,
+% and _, are \$, \&, \^, and \_. The command \@ will produce
+% a verbatim backslash. A nonoptional argument to the the
+% environment specifies the comment character (preceeded by
+% a backslash). The character thus taken can be produced by \`.
+% If the argument is null, there is no comment character.
+% (Nb., space remains an active character in equations, which
+% can have some unusual side effects).
+
+\def\docspecials{\do\ \do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+{\catcode`\/=0\catcode`\\=12/xdef/@bsl{\}}
+\def\literatim#1{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\def\@nll{}\def\@arg{#1}
+\ifx\@nll\@arg\def\@newcc{}\else\def\@newcc{\catcode`#1=14}\fi
+\let\@=\@bsl
+\let\@dollar=$
+\let\@amper=&
+\let\circumflex=\^
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \tt \catcode``=13 \@noligs \let\do\@makeother \docspecials
+\let\$=\@dollar
+\let\&=\@amper
+\let\_=\sb
+\let\^=\sp
+\frenchspacing\@vobeyspaces\@newcc}
+
+\let\endliteratim=\endtrivlist
diff --git a/macros/latex209/contrib/jeep/jeep.tex b/macros/latex209/contrib/jeep/jeep.tex
new file mode 100644
index 0000000000..c3026d36fe
--- /dev/null
+++ b/macros/latex209/contrib/jeep/jeep.tex
@@ -0,0 +1,477 @@
+\documentstyle[11pt,/thales/stewart/tex/sty/jeep]{article}
+%\headheight 14pt
+\lhead{\large\tt jeep.sty}\rhead{April 29, 1991}
+\cfoot{\thepage}
+\underhead
+\tighttoc
+\thispagestyle{plain}
+\numberbysection
+\begin{document}
+\begin{center}
+\large\sc {\tt JEEP}\smallskip\\
+A Customization of the \LaTeX\\
+Article and Report Styles
+\smallskip\\
+G. W. Stewart\symbolnote{1}{Department of Computer Science and
+Institute for Advanced Computer Studies, University of Maryland,
+College Park, MD 20742 (stewart@cs.umd.edu).}
+\bigskip
+\end{center}
+
+\tableofcontents
+
+\section{Introduction}
+
+This note describes a style file to accompany the \LaTeX\ document
+styles article and report. It is not a systematic revision of these
+styles; rather it consists of modifications I found necessary or
+desirable in the course of my work. Although I have used the
+modifications for some time in a variety of applications, they no
+doubt still contain some bugs. Please send any comments to the
+address below.
+
+The name \verb|jeep| is a continuation of Leslie Lamport's analogy,
+in which he compares \TeX\ to a racing car and \LaTeX\ to a family
+sedan. The modifications here convert the sedan to a general purpose
+vehicle\,---\,a jeep. The modifications, like a jeep, are not
+pretty, but the casual \LaTeX er can cover a lot of territory with
+them.
+
+\section{Page Size}
+
+The default page size is changed to take full advantage of the
+default North American paper size of $8\frac{1}{2}\times 11$ in. It
+looks OK in eleven or twelve point type. I find no virtues in ten
+point type on pages of this size.
+
+\section{Chapter, Section, and Theorem Heads}
+
+Even among well printed books, there is great variation in the format
+of section heads. The font may be bold, sans serif, or small caps,
+in sizes ranging from normal to rather large. If a section number is
+present, it may be followed by a period or by a long space. The
+changes here give the casual \LaTeX er more control over the style of
+his headings.
+
+\subsection{Chapter heads}
+
+The format of chapter heads may be controlled by the command
+\begin{quote}
+\begin{verbatim}
+\mychapter{<head1>}{<head2>}
+\end{verbatim}
+\end{quote}
+Here \verb|<head1>| is the chapter heading to use when the chapter is
+numbered and \verb|<head2>| is the heading to use with the
+\verb|\chapter*| command. The text of the \verb|\chapter| command is
+referenced in \verb|<head1>| and \verb|<head2>| by writing \verb|#1|.
+For example, the default chapter head is defined by
+\begin{quote}
+\begin{verbatim}
+\mychapter{\LARGE \sc \thechapter. #1}{\LARGE \sc #1}
+\end{verbatim}
+\end{quote}
+
+Chapters always begin on a new page. The style parameter
+\verb|\chaptopsep| is the amount of blank space placed at the top of
+the page before the chapter head, and \verb|\chapaftersep| is
+the amount of blank space placed between the chapter head and
+the text. They are initially \verb|.5in|. They may be changed
+by the \verb|\setlength| command.
+
+The default head does not have the word ``Chapter'' preceding
+the chapter number, which is fine with me, but may not please you.
+To get back something approximating the original \LaTeX\ heads
+try
+\begin{quote}
+\begin{verbatim}
+\mychapter{\huge \bf \chapapp\ \thechapter\\[20pt]\Huge\bf #1}
+{\Huge \bf #1}
+\end{verbatim}
+\end{quote}
+The command \verb|\chapapp| is ordinarily defined to be
+``Chapter'' but the \LaTeX\ command \verb|\appendix| changes it
+to ``Appendix''. If you want more flexibility in your appendix
+heads, use \verb|\mychapter| to define them anew.
+
+
+\subsection{Section heads}
+The format of section heads may be controlled by the command
+\begin{quote}
+\begin{verbatim}
+\mysection{<sec>}{<style>}{<preface>}
+\end{verbatim}
+\end{quote}
+Here {\tt <sec>} is the section level\,---\,{\tt section}, {\tt
+subsection}, etc. The style in which the section is to be set is
+specified by \verb|<style>|; e.g., \verb|\large\sf|. The argument
+{\tt <preface>} is the text to be set before the text of the section
+head\,---\,usually \verb|\thesection| and some punctuation. For example
+the section heads in this document were produced by the commands.
+\begin{quote}
+\begin{verbatim}
+\mysection{section}{\large\bf}{\thesection.~}
+\mysection{subsection}{\normalsize\bf}{\thesubsection.~}
+\mysection{subsubsection}{\normalsize\bf}{\thesubsubsection.~}
+\mysection{paragraph}{\normalsize\bf}{\theparagraph.}
+\mysection{subparagraph}{\normalsize\bf}{\thesubparagraph.}
+\end{verbatim}
+\end{quote}
+These are the default for {\tt jeep.sty}.
+
+
+\subsection{Theorem heads}
+One already has considerable flexibility in controlling the
+theorem environment. For example, the definition
+\begin{quote}
+\begin{verbatim}
+\newtheorem{theorem}{\sf Theorem}
+\end{verbatim}
+\end{quote}
+will cause theorem headings to be printed in sans serif type.
+However, it is not easy to slip a punctuation mark after
+the theorem number. This can now be done by the statement
+\begin{quote}
+\begin{verbatim}
+\renewcommand{\thmcounterend}{<punctuation>}
+\end{verbatim}
+\end{quote}
+where {\tt <punctuation>} is the desired punctuation. The
+default is a period. This command affects all user defined
+theorem environments.
+
+The default typestyle within the theorem environment has been
+changed to \verb|\sl|. This can easily be overridden.
+
+\section{Numbering}
+
+A new command, \verb|\numberbysection|, which should appear only in
+the preamble, places the equation, figure, table, and theorem counters
+within the section counter and redefines \verb|\the<counter>| to be
+\verb|\thesection.\arabic{<counter>}|. The change is inherited by all
+theorem environments that are defined to be numbered with
+\verb|theorem| (however, be sure to create the \verb|theorem|
+environments {\it before} invoking \verb|\numberbysection|).
+
+In the article style, \verb|\numberbysection| is the natural way to
+write a paper. In the report style, the user of
+\verb|\numberbysection| must provide explicit chapter numbers
+when referencing equations, theorems, etc, outside the
+current chapter.
+
+An analogous command, \verb|\numberbysubsection|, causes the
+counters to be reset when subsections change. This option is
+especially useful for a style of writing in which the work is
+broken up into short subsections of one or two paragraphs, each
+with its own heading. Try writing this way if you have
+temporary writer's block. At its best the technique produces a
+lively work that moves quickly from topic to topic. At its
+worst it produces a rambling, ill-organized mish-mash.
+
+\section{Headers}
+
+\subsection{Three part headers and footers}
+
+A finished article or report should have a limited number of simple,
+informative headers and footers\,---\,perhaps a title or section head
+and a page number. Work in progress requires additional information;
+e.g., the author's name or initials, the date, and a statement that
+this is a draft. To help with this, I have made Lance
+Berc's\footnote{Ollivetti Research Center, 2882 Sand Hill Road,
+Menlo Park, CA 94025} three part headers and footers the default page
+style. The commands
+\begin{quote}
+\begin{verbatim}
+\lhead{<item>}
+\chead{<item>}
+\rhead{<item>}
+\end{verbatim}
+\end{quote}
+sets the left, center, and right parts of the headers. The
+corresponding commands for footers are
+\begin{quote}
+\begin{verbatim}
+\lfoot{<item>}
+\cfoot{<item>}
+\rfoot{<item>}
+\end{verbatim}
+\end{quote}
+The \verb|\pagestyle| command
+overrides the three part option.
+
+If the \verb|twoside| style option is invoked before jeep, the macros
+switch the right and left items on even numbered pages. If you
+require different headers and footers for even numbered pages, as
+often with books, use the commands
+\begin{quote}
+\begin{verbatim}
+\elhead{<item>}
+\echead{<item>}
+\erhead{<item>}
+\elfoot{<item>}
+\ecfoot{<item>}
+\erfoot{<item>}
+\end{verbatim}
+\end{quote}
+to define them. They should follow the commands, \verb|\lhead|,
+\verb|chead|, etc.
+
+\subsection{Underlined headers}
+
+The preamble command \verb|\underhead| places a
+rule of length \verb|\textwidth| a distance of
+\verb|\underheadsep| under the header text. The value
+of \verb|\underheadsep| can be changed in the preamble by
+\verb|\settolength|. This length is added
+to the style parameter \verb|\headhight|, so that the top of the text
+is moved down by \verb|\underheadsep|. To keep the top of the text
+in the original position execute the command
+\begin{quote}
+\begin{verbatim}
+\addtolength{\headsep}{-\underheadsep}
+\end{verbatim}
+\end{quote}
+
+
+In preparing assignments and classroom notes, I find it convenient to
+use the header line as a title, in which case I do not want it
+underlined on the first page. Underlining on the current page can be
+suppressed by the command \verb|\nounderhead|.
+
+\section{Enumerated Lists}
+
+\subsection{The {\tt enumerate} environment}
+
+As a matter of personal taste, I prefer my lists enumerated by simple
+arabic numbers. Consequently, I have changed the numbering
+conventions on the {\tt enumerate} environment to use arabic numbers
+at all levels.
+
+\subsection{The {\tt outline} environment}
+
+Many people who use the {\tt enumerate} environment to produce a
+syllabus or other long nested lists of short items are dismayed
+by the amount of space between the items. The {\tt outline}
+environment, which is essentially the same as {\tt enumerate},
+suppresses some of this space. It leaves space, however, at the
+beginning and end of a list, but not a sublist. For example
+\begin{outline}
+\item Rome and Carthage
+ \begin{outline}
+ \item The first Punic war
+ \item The second Punic war
+ \begin{outline}
+ \item Hannibal in Spain
+ \item Hannibal in Italy
+ \item Hannibal in flight
+ \end{outline}
+ \item {\it Carthago delenda est}
+ \end{outline}
+\item Rome in the Adriatic
+\end{outline}
+You should use the {\tt outline} environment sparingly. For
+most purposes, even for a list of a few short items, the {\tt
+enumerate} environment produces more pleasing results.
+
+\section{The {\tt literatim} environment}
+One of the frustrations of the verbatim environment is that it does
+not permit commands to be executed. This means that you cannot
+change fonts or insert equations. For example, the verbatim
+environment cannot be used to produce an annotated program like the
+following.
+\begin{quote}
+\begin{literatim}{}
+x = exp(y); {\rm: Initialize \$x\$.}
+
+p = a[n]; {\rm: Evaluate the polynomial}
+for (i=n-1; i>=0; i--) {\rm: \$a\_nx\^n+\cdots+a\_0\$.}
+ p = x*p + a[i];
+\end{literatim}
+\end{quote}
+
+To circumvent this difficulty, \verb|jeep| provides a
+\verb|literatim| environment\,---\,an extension of Lamport's
+\verb|alltt| environment\,---\,in which \verb|\|, \verb|{|, and
+\verb|}| retain their original functions, so that we can
+invoke commands and delimit their arguments. For example,
+the above program listing was produced by the statements
+\begin{quote}
+\small
+\begin{verbatim}
+\begin{literatim}{}
+x = exp(y); {\rm: Initialize \$x\$.}
+
+p = a[n]; {\rm: Evaluate the polynomial}
+for (i=n-1; i>=0; i--) {\rm: \$a\_nx\^n+\cdots+a\_0\$.}
+ p = x*p + a[i];
+\end{literatim}
+\end{verbatim}
+\end{quote}
+
+
+One difficulty with the \verb|literatim| environment is that you loose
+the special commands that are not preceded by a backslash. For
+example, we cannot delimit an equation by dollar signs, since they
+are now interpreted literally. One solution would be to use the
+\TeX\ delimiters \verb|\(| and \verb|\)|
+(as well as the commands \verb|\sp{}|
+and \verb|\sb{}| for \verb|^{}| and \verb|_{}|). But this is a
+bother, especially for people who do not have a powerful editor.
+Instead \verb|literatim| defines the commands \verb|\$|, \verb|\^|,
+\verb|\_|, and \verb|\&| to be the equivalent of the special
+commands \verb|$|, \verb|^|, \verb|_|, and \verb|&|. (Unfortunately, the
+definition of \verb|\^| redefines the command that produces a
+circumflex over a letter. To get a circumflex in the
+\verb|literatim| environment use the command \verb|\circumflex{<letter>}|.)
+In addition \verb|\@|, which is not needed in the literatim environment,
+produces a backslash.
+
+Even a short equation can have a long definition, so that it is
+necessary to break it across lines. Unfortunately, we cannot use a
+line break (\verb|^M|) for this purpose in the \verb|literatim|
+environment, and the character \verb|%| is no longer available as an
+escape. To handle this difficulty, \verb|literatim| has a
+(nonoptional) argument to specify the comment character, which must
+be preceeded by a backslash in the argument. If the argument is
+empty, there will be no comment characters. Thus if we wish to name
+our polynomial and include another term, we might enter
+\begin{quote}
+\small
+\begin{verbatim}
+\begin{literatim}{\`}
+x = exp(y); {\rm: Initialize \$x\$.}
+
+p = a[n]; {\rm: Evaluate the polynomial}
+for (i=n-1; i>=0; i--)`
+ {\rm: \$p(x)=a\_nx\^n+a\_{n-1}x\^{n-1}+\cdots+a\_0\$.}
+ p = x*p + a[i];
+\end{literatim}
+\end{verbatim}
+\end{quote}
+which will give
+\begin{quote}
+\begin{literatim}{\`}
+x = exp(y); {\rm: Initialize \$x\$.}
+
+p = a[n]; {\rm: Evaluate the polynomial}
+for (i=n-1; i>=0; i--)`
+ {\rm: \$p(x)=a\_nx\^n+a\_{n-1}x\^{n-1}+\cdots+a\_0\$.}
+ p = x*p + a[i];
+\end{literatim}
+\end{quote}
+
+In using the \verb|literatim| environment, you should keep in
+mind that the space character is active. This means, among
+other things, that spaces following a command are not removed
+and that spaces in equations will actually appear in the text.
+For example the statements
+\begin{quote}
+\begin{verbatim}
+\begin{literatim}{}
+{\rm Let \$c = (a + b)/2\$ be the {\it mean value}\ldots.}
+\end{literatim}
+\end{verbatim}
+\end{quote}
+produce
+\begin{quote}
+\begin{literatim}{}
+{\rm Let \$c = (a + b)/2\$ be the {\it mean value}\ldots.}
+\end{literatim}
+\end{quote}
+What we really want is
+\begin{quote}
+\begin{literatim}{}
+{\rm{}Let \$c=(a+b)/2\$ be the {\it{}mean value}\ldots.}
+\end{literatim}
+\end{quote}
+which is produced by
+\begin{quote}
+\begin{verbatim}
+\begin{literatim}{}
+{\rm{}Let \$c=(a+b)/2\$ be the {\it{}mean value}\ldots.}
+\end{literatim}
+\end{verbatim}
+\end{quote}
+
+\section{Table of Contents}
+
+In technical articles it is sometimes convenient to place a
+table of contents on the first page, right after the title and
+abstract. I find the section entries in the default table of
+contents for the article style to be too assertive and too
+widely spaced for this purpose. The command
+\begin{quote}
+\begin{verbatim}
+\tighttoc
+\end{verbatim}
+\end{quote}
+produces a tighter table of contents. It was used to generate
+the table of contents on the first page.
+
+\section{Miscellaneous}
+
+\subsection{Symbolic footnote marks}
+Since there is no standard place to cut windows in technical
+report covers, most people are reduced to hacking their own
+title pages. This creates the problem of producing footnotes
+using the symbols $*$, \dag, \ddag, etc. The command
+\begin{quote}
+\begin{verbatim}
+\symbolnote{<num>}{<text>}
+\end{verbatim}
+\end{quote}
+produces a footnote with footnote symbol \verb|<num>|, where
+\verb|<num>| is a number between 1 and 9 (for a list of the
+symbols see \S C.7.4 in the \LaTeX\ manual). This command does
+not alter the usual sequencing of numbered footnotes, so that it
+can be used to produce auxiliary footnotes anywhere in the
+manuscript. The following sequence generated the footnote at
+the beginning of this note.
+\begin{quote}
+\begin{verbatim}
+G. W. Stewart\symbolnote{1}{Department of ... }
+\end{verbatim}
+\end{quote}
+
+The commands \verb|\symbolmark{<num>}| and
+\verb|\symboltext{<num>}{<text>}| are analogues of
+\verb|\footnotemark[<num>]| and \verb|\footnotetext[<num>]{<text>}|.
+Observe that the argument \verb|<num>|, which is optional in the
+\LaTeX\ commands, is mandatory in the \verb|jeep| commands.
+
+\subsection{Symbolic equation labels} In short notes, classroom
+assignment, and tests it is often convenient to label an
+equation by a symbol; e.g.
+\begin{symboleqn}{(*)}
+x^n + y^n = z^n.
+\end{symboleqn}
+This can be accomplished by the sequence
+\begin{quote}
+\begin{verbatim}
+\begin{symboleqn}{(*)}
+x^n + y^n = z^n.
+\end{symboleqn}
+\end{verbatim}
+\end{quote}
+Any text can replace the $(*)$, but keep in mind that it will be set in
+math mode. Equations generated by \verb|symboleqn| cannot be labeled;
+any references must be constructed explicitly.
+
+Since asterisks are a favorite symbol in this connection, let me note
+some of the pitfalls. Always set $(*)$ in math mode thus:
+\verb|$(*)$|. If you enter \verb|(*)|, you will get (*), with the
+asterisk too high. To get $(*{*}*)$ enter \verb|$(*{*}*)$|. The
+braces keep \TeX\ from treating the inner asterisk as an operator.
+
+\subsection{The \TeX\ delimiters {\tt bigl}, {\tt bigr}, etc.}
+\TeX\ has a series of delimiters of increasing size. For example
+\begin{quote}
+\begin{verbatim}
+$x\bigl(x(xa+b)+c\bigr)+e$
+\end{verbatim}
+\end{quote}
+should produce $x\bigl(x(xa+b)+c\bigr)+e$. As they were originally
+defined, these delimiters do not do not scale along with the type
+size commands of \LaTeX. I have included definitions by John Hobby
+that cure this problem.
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/abi.sty b/macros/latex209/contrib/klassenarbeiten/abi.sty
new file mode 100644
index 0000000000..6b8d2ae6f7
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/abi.sty
@@ -0,0 +1,94 @@
+%Stylefile zum Erstellen von Abituraufgaben
+% Copyright Joachim Lammarsch
+% Pr„sident von DANTE e.v.
+% Postfach 101840
+% 6900 Heidelberg 1
+% und Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+\typeout {erstellt von J.Lammarsch und W.Burkhardt}
+
+\newlength{\perheight}
+\newlength{\texthoehe}
+\newlength{\perheightI}
+\setlength{\tabcolsep}{0cm}
+\setlength{\textwidth}{18.5cm}
+\setlength{\headheight}{15ex}
+\setlength{\textheight}{22cm}
+\setlength{\perheight}{\textheight}
+\setlength{\perheightI}{\textheight}
+\addtolength{\oddsidemargin}{-3cm}
+\addtolength{\evensidemargin}{-3cm}
+\addtolength{\topmargin}{-3cm}
+\addtolength{\perheight}{26pt}
+\addtolength{\perheightI}{25.211111pt}
+\newcommand{\Sm}[1]{\tiny\hfil#1\hfil}
+\newcommand{\bln}{ }
+\newcommand{\aufgabe}[3]{%
+ \parbox[t]{1cm}{#1}
+ \parbox[t]{15cm}{#2}
+ \setbox0=\hbox{\parbox[t]{15cm}{#2}}
+ \setlength{\texthoehe}{\ht0}
+ \addtolength{\texthoehe}{\dp0}
+ \addtolength{\texthoehe}{-0.8\baselineskip}
+ \raisebox{-\texthoehe}{\parbox[t]{0.85cm}{\hfill \raggedleft #3 \hfill}}
+ \par \bigskip}
+\newcommand{\kopf}[1]{\parbox[t]{16cm}{#1}\par \medskip}
+\newcommand{\punktesumme}[1]{%
+ \vfill
+ \parbox[t]{16.39cm}{\rule{16.39cm}{0pt}}
+ \parbox{1.4cm}{\rule{1.38cm}{0.4pt}\par}\par
+ \parbox[t]{1cm}{\rule{1cm}{0pt}}
+ \parbox[t]{15cm}{\rule{15cm}{0pt}}
+ \parbox[t]{1.4cm}{\vrule height 12pt width0pt depth8pt%
+ \raggedleft #1}\par}
+
+\def\LK#1{\gdef\@LK{#1}}
+\def\GK#1{\gdef\@GK{#1}}
+\def\Gruppe#1{\gdef\@Gruppe{#1}}
+\def\Aufgabennummer#1{\gdef\@Aufgabennummer{#1}}
+\def\Gruppennummer#1{\gdef\@Gruppennummer{#1}}
+\def\Fach#1{\gdef\@Fach{#1}}
+\def\Hauptpruefungstermin#1{\gdef\@Hauptpruefungstermin{#1}}
+\def\Nachpruefungstermin#1{\gdef\@Nachpruefungstermin{#1}}
+
+\def\@thehead{{\renewcommand{\arraystretch}{1.7}%
+\begin{tabular}{@{}|p{2.595cm}|p{3.2cm}p{3.7cm}|*{9}{p{1cm}|}@{}}
+\hline
+\hfil\@Gruppennummer\hfill & \rule{1pt}{0pt} & \rule{1pt}{0pt} &
+ \Sm{LK} & \Sm{GK} &
+ \Sm{AG} & \Sm{HG} & \Sm{NTG} & \Sm{SG} & \Sm{TG} & \Sm{TGE} & \Sm{WG}\\
+\cline{1-1}\cline{6-12}
+\multicolumn{3}{|c|}{\hfil\@Fach\hfill} &
+ \hfil \@LK\hfil & \hfil \@GK\hfil &
+ \multicolumn{7}{l|}{\ Gruppe: \quad\@Gruppe}\\
+\hline
+\multicolumn{2}{|l}{\ Hauptpr"ufung \@Hauptpruefungstermin}&
+ \multicolumn{3}{|l}{\ Nachpr"ufung \@Nachpruefungstermin}&
+ \multicolumn{7}{|l|}{\ Aufgabe:\ \@Aufgabennummer \quad Seite:\ \thepage} \\
+\hline
+\end{tabular}}}%
+
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox {\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \vbox {\hrule\hbox{\vrule%
+ \box\@outputbox
+ \hskip-1.4cm\vrule\vbox to \perheightI{%
+ \hbox to 1.36cm{\vrule height 12pt width0pt depth8pt\hfill %
+ {\Sm Punkte}\hfill}\hrule\vfill}%
+ \vrule}%
+ \hrule}%
+ \baselineskip\footskip
+ \hbox to\textwidth{\hfill}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
diff --git a/macros/latex209/contrib/klassenarbeiten/abiauf.tex b/macros/latex209/contrib/klassenarbeiten/abiauf.tex
new file mode 100644
index 0000000000..cc26236282
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/abiauf.tex
@@ -0,0 +1,61 @@
+\documentstyle[12pt,german,abi]{report}
+\pagestyle{abikopf}
+
+%Beispiel f\"ur die Benutzung der Datei abi.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den nachfolgenden Zeilen eine \"Anderung vorzunehmen mu\ss{} nur der
+%Inhalte der geschweiften Klammern ver\"andert werden.
+
+
+\LK{\Huge$\times$} % LK oder
+\GK{} % GK ankreuzen
+\Gruppe{II} % Gruppennummer eingegen
+\Aufgabennummer{1} % Augabennummer eingeben
+\Gruppennummer{3.12.1} % Gruppenummer eingeben
+\Fach{Mathematik} % Fach eingeben
+\Hauptpruefungstermin{1991/92} % Pr\"ufungstermin eingeben
+\Nachpruefungstermin{} % Pr\"ufungstermin eingegen
+
+
+\begin{document}
+
+\kopf{Hier kann ein ein- oder mehrzeiliger Text stehen, der i.a. f\"ur die ganze
+ Aufgabe gilt}
+
+\aufgabe{\bf 1. }
+ { Im $ \mbox{I}\! \mbox{R}^3 $ sind die folgenden Punkte gegeben:\\
+ $ A(3|6|0) \, , \, B(-4|1|4) \, , \, C(-1|0|8) \, , \, D(6|5|4)$}{}
+\aufgabe{\bf 1.1. }{ Untersuchen Sie, ob sich die Geraden $AC$ und $BD$ schneiden.
+ Bestimmen Sie gegebenenfalls den Schnittpunkt! }{\large 6}
+\aufgabe{\bf 1.2. }{ Bestimmen Sie die Spurpunkte der Geraden $AC$.\\
+ Zeigen Sie, $AC$ die $x_2$-Achse nicht schneidet. }{\large 6}
+
+\aufgabe{\bf 2. }{ Im $ \mbox{I}\! \mbox{R}^3$ sind die Punkte
+ $ A(1|2|3) \, , \, B(4|2|0) \, , \, C(5|3|4) $ und die
+ Gerade $g$ mit der folgenden Gleichung gegeben.
+ \[ g: \vec{x}=\left( \begin{array}{r} 4 \\ 2 \\ 0 \\ \end{array}
+ \right) +
+ t \left( \begin{array}{r} 1 \\ 0 \\ -1 \\ \end{array}
+ \right) \] }{}
+
+\aufgabe{\bf2.1. }{ Geben Sie die Gleichung der Ebene $E$ durch die Punkte
+ $A\, , \, B\, , \, C$ in Parameter- und Koordinatenform an.\\
+ Bestimmen Sie die Spurgeraden sowie die Achsenschnittpunkte
+ von $E$.}{\large 9}
+\aufgabe{\bf 2.2.}{ F\"ur jedes $k \in \mbox{I}\! \mbox{R}$ ist die Ebene
+ $F_k$ durch $F_k: kx_1-(2k+1)x_2+kx_3=3(k-1)$ gegeben.\\
+ Zeigen Sie, da\ss{} es ein $k$ mit $E=F_k$ gibt.\\
+ Bestimmen Sie die gemeinsamen Punkte aller $F_k$ bei
+ ver\"anderlichem k.}{\large 6}
+\aufgabe{\bf 2.3.}{ Bestimmen Sie die Gleichung der Geraden $h_t$ , die durch
+ den Punkt $C$ und einen beliebigen Punkt $S_t$ der Geraden
+ $g$ geht.}{ \large 3}
+
+\punktesumme {\large 30}
+
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/abiloe.sty b/macros/latex209/contrib/klassenarbeiten/abiloe.sty
new file mode 100644
index 0000000000..f23f898d2f
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/abiloe.sty
@@ -0,0 +1,94 @@
+%Stylefile zum Erstellen von L”sungen zu Abituraufgaben
+% Copyright Joachim Lammarsch
+% Pr„sident von DANTE e.v.
+% Postfach 101840
+% 6900 Heidelberg 1
+% und Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+\typeout {erstellt von J.Lammarsch und W.Burkhardt}
+\newlength{\perheight}
+\newlength{\texthoehe}
+\newlength{\perheightI}
+\setlength{\tabcolsep}{0cm}
+\setlength{\textwidth}{18.5cm}
+\setlength{\headheight}{15ex}
+\setlength{\textheight}{22cm}
+\setlength{\perheight}{\textheight}
+\setlength{\perheightI}{\textheight}
+\addtolength{\oddsidemargin}{-3cm}
+\addtolength{\evensidemargin}{-3cm}
+\addtolength{\topmargin}{-3cm}
+\addtolength{\perheight}{26pt}
+\addtolength{\perheightI}{25.211111pt}
+\newcommand{\Sm}[1]{\tiny\hfil#1\hfil}
+\newcommand{\bln}{ }
+\newcommand{\aufgabe}[3]{%
+ \parbox[t]{1cm}{#1}
+ \parbox[t]{15cm}{#2}
+ \setbox0=\hbox{\parbox[t]{15cm}{#2}}
+ \setlength{\texthoehe}{\ht0}
+ \addtolength{\texthoehe}{\dp0}
+ \addtolength{\texthoehe}{-0.8\baselineskip}
+ \raisebox{-\texthoehe}{\parbox[t]{0.85cm}{\hfill \raggedleft #3 \hfill}}
+ \par \bigskip}
+\newcommand{\kopf}[1]{\parbox[t]{16cm}{#1}\par \medskip}
+\newcommand{\punktesumme}[1]{%
+ \vfill
+ \parbox[t]{16.39cm}{\rule{16.39cm}{0pt}}
+ \parbox{1.4cm}{\rule{1.38cm}{0.4pt}\par}\par
+ \parbox[t]{1cm}{\rule{1cm}{0pt}}
+ \parbox[t]{15cm}{\rule{15cm}{0pt}}
+ \parbox[t]{1.4cm}{\vrule height 12pt width0pt depth8pt%
+ \raggedleft #1}\par}
+
+\def\LK#1{\gdef\@LK{#1}}
+\def\GK#1{\gdef\@GK{#1}}
+\def\Gruppe#1{\gdef\@Gruppe{#1}}
+\def\Aufgabennummer#1{\gdef\@Aufgabennummer{#1}}
+\def\Gruppennummer#1{\gdef\@Gruppennummer{#1}}
+\def\Fach#1{\gdef\@Fach{#1}}
+\def\Hauptpruefungstermin#1{\gdef\@Hauptpruefungstermin{#1}}
+\def\Nachpruefungstermin#1{\gdef\@Nachpruefungstermin{#1}}
+
+\def\@thehead{{\renewcommand{\arraystretch}{1.7}%
+\begin{tabular}{@{}|p{2.595cm}|p{3.2cm}p{3.7cm}|*{9}{p{1cm}|}@{}}
+\hline
+\hfil\@Gruppennummer\hfill & \rule{1pt}{0pt} & \rule{1pt}{0pt} &
+ \Sm{LK} & \Sm{GK} &
+ \Sm{AG} & \Sm{HG} & \Sm{NTG} & \Sm{SG} & \Sm{TG} & \Sm{TGE} & \Sm{WG}\\
+\cline{1-1}\cline{6-12}
+\multicolumn{3}{|c|}{\hfil\@Fach\hfill} &
+ \hfil \@LK\hfil & \hfil \@GK\hfil &
+ \multicolumn{7}{l|}{\ Gruppe: \quad\@Gruppe}\\
+\hline
+\multicolumn{2}{|l}{\ Hauptpr"ufung \@Hauptpruefungstermin}&
+ \multicolumn{3}{|l}{\ Nachpr"ufung \@Nachpruefungstermin}&
+ \multicolumn{7}{|l|}{\ Aufgabe:\ \@Aufgabennummer \quad Seite:\ \thepage} \\
+\hline
+\multicolumn{12}{l}{\centerline{ L"osung}}\\
+\end{tabular}}}%
+
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox {\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip0.3\headsep
+ \vbox {\hrule\hbox{\vrule%
+ \box\@outputbox
+ \hskip-1.4cm\vrule\vbox to \perheightI{%
+ \hbox to 1.36cm{\vrule height 12pt width0pt depth8pt\hfill %
+ {\Sm Punkte}\hfill}\hrule\vfill}%
+ \vrule}%
+ \hrule}%
+ \baselineskip\footskip
+ \hbox to\textwidth{\hfill}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
diff --git a/macros/latex209/contrib/klassenarbeiten/abiloe.tex b/macros/latex209/contrib/klassenarbeiten/abiloe.tex
new file mode 100644
index 0000000000..6734b0f024
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/abiloe.tex
@@ -0,0 +1,63 @@
+\documentstyle[12pt,german,abiloe]{report}
+\pagestyle{abikopf}
+
+%Beispiel f\"ur die Benutzung der Datei abiloe.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den nachfolgenden Zeilen eine \"Anderung vorzunehmen mu\ss{} nur der
+%Inhalte der geschweiften Klammern ver\"andert werden.
+
+
+\LK{\Huge$\times$} % LK oder
+\GK{} % GK ankreuzen
+\Gruppe{II} % Gruppennummer eingegen
+\Aufgabennummer{1} % Augabennummer eingeben
+\Gruppennummer{3.12.1} % Gruppenummer eingeben
+\Fach{Mathematik} % Fach eingeben
+\Hauptpruefungstermin{1991/92} % Pr\"ufungstermin eingeben
+\Nachpruefungstermin{} % Pr\"ufungstermin eingegen
+
+
+\begin{document}
+
+\kopf{Hier kann ein ein- oder mehrzeiliger Text stehen, der i.a. f\"ur die ganze
+ Aufgabe gilt.\\
+ In den folgenden Zeilen sollten L\"osungen stehen! Aus Zeitgr\"unden habe ich
+ Aufgabentext genommen }
+
+\aufgabe{\bf 1. }
+ { Im $ \mbox{I}\! \mbox{R}^3 $ sind die folgenden Punkte gegeben:\\
+ $ A(3|6|0) \, , \, B(-4|1|4) \, , \, C(-1|0|8) \, , \, D(6|5|4)$}{}
+\aufgabe{\bf 1.1. }{ Untersuchen Sie, ob sich die Geraden $AC$ und $BD$ schneiden.
+ Bestimmen Sie gegebenenfalls den Schnittpunkt! }{\large 6}
+\aufgabe{\bf 1.2. }{ Bestimmen Sie die Spurpunkte der Geraden $AC$.\\
+ Zeigen Sie, $AC$ die $x_2$-Achse nicht schneidet. }{\large 6}
+
+\aufgabe{\bf 2. }{ Im $ \mbox{I}\! \mbox{R}^3$ sind die Punkte
+ $ A(1|2|3) \, , \, B(4|2|0) \, , \, C(5|3|4) $ und die
+ Gerade $g$ mit der folgenden Gleichung gegeben.
+ \[ g: \vec{x}=\left( \begin{array}{r} 4 \\ 2 \\ 0 \\ \end{array}
+ \right) +
+ t \left( \begin{array}{r} 1 \\ 0 \\ -1 \\ \end{array}
+ \right) \] }{}
+
+\aufgabe{\bf2.1. }{ Geben Sie die Gleichung der Ebene $E$ durch die Punkte
+ $A\, , \, B\, , \, C$ in Parameter- und Koordinatenform an.\\
+ Bestimmen Sie die Spurgeraden sowie die Achsenschnittpunkte
+ von $E$.}{\large 9}
+\aufgabe{\bf 2.2.}{ F\"ur jedes $k \in \mbox{I}\! \mbox{R}$ ist die Ebene
+ $F_k$ durch $F_k: kx_1-(2k+1)x_2+kx_3=3(k-1)$ gegeben.\\
+ Zeigen Sie, da\ss{} es ein $k$ mit $E=F_k$ gibt.\\
+ Bestimmen Sie die gemeinsamen Punkte aller $F_k$ bei
+ ver\"anderlichem k.}{\large 6}
+\aufgabe{\bf 2.3.}{ Bestimmen Sie die Gleichung der Geraden $h_t$ , die durch
+ den Punkt $C$ und einen beliebigen Punkt $S_t$ der Geraden
+ $g$ geht.}{ \large 3}
+
+\punktesumme {\large 30}
+
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/arbeit.sty b/macros/latex209/contrib/klassenarbeiten/arbeit.sty
new file mode 100644
index 0000000000..0ecfac04ae
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/arbeit.sty
@@ -0,0 +1,90 @@
+%Stylefile zum Erstellen von Klassenarbeiten
+% Copyright (1992) Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+% und Joachim Lammarsch, Luzia Dietsche
+% DANTE e.V.
+% Postfach 101840
+% 6900 Heidelberg 1
+
+\typeout {Stylefile zum Erstellen von Klassenarbeiten (Version 1.0)}
+\typeout {(c) 1992 Werner Burkhardt)}
+\newlength{\perheight}
+\newlength{\texthoehe}
+\newlength{\perheightI}
+\setlength{\tabcolsep}{0cm}
+\setlength{\textwidth}{18.5cm}
+\setlength{\headheight}{15ex}
+\setlength{\textheight}{20cm}
+\setlength{\perheight}{\textheight}
+\setlength{\perheightI}{\textheight}
+\addtolength{\oddsidemargin}{-3cm}
+\addtolength{\evensidemargin}{-3cm}
+\addtolength{\topmargin}{-3cm}
+\addtolength{\perheight}{26pt}
+\addtolength{\perheightI}{25.211111pt}
+
+\font\gross=cmr10 scaled \magstep4
+\newcommand{\Sm}[1]{\tiny\hfil#1\hfil}
+\newcommand{\bln}{ }
+\newcommand{\aufgabe}[3]{%
+ \parbox[t]{1cm}{#1}
+ \parbox[t]{15cm}{#2}
+ \setbox0=\hbox{\parbox[t]{15cm}{#2}}
+ \setlength{\texthoehe}{\ht0}
+ \addtolength{\texthoehe}{\dp0}
+ \addtolength{\texthoehe}{-0.8\baselineskip}
+ \raisebox{-\texthoehe}{\parbox[t]{0.85cm}{\hfill \raggedleft #3 \hfill}}
+ \par \bigskip}
+\newcommand{\kopf}[1]{\parbox[t]{16cm}{#1}\par \medskip}
+\newcommand{\punktesumme}[1]{%
+ \vfill
+ \parbox[t]{16.39cm}{\rule{16.39cm}{0pt}}
+ \parbox{1.4cm}{\rule{1.38cm}{0.4pt}\par}\par
+ \parbox[t]{1cm}{\rule{1cm}{0pt}}
+ \parbox[t]{15cm}{\rule{15cm}{0pt}}
+ \parbox[t]{1.4cm}{\vrule height 12pt width0pt depth8pt%
+ \raggedleft #1}\par}
+
+\def\Klasse#1{\gdef\@Klasse{#1}}
+\def\Nummer#1{\gdef\@Nummer{#1}}
+\def\Fach#1{\gdef\@Fach{#1}}
+\def\Datum#1{\gdef\@Datum{#1}}
+
+\def\@thehead{\vbox{\hrule width\textwidth height0pt
+ \gross
+ \noindent
+ \@Klasse
+ \hfill\@Nummer Klassenarbeit \@Fach\hfill\@Datum
+ \par
+ \bigskip
+ \noindent
+ Name:\par}}%
+
+\def\@thefoot{\vbox{\hrule width\textwidth height0pt
+ \gross
+ \noindent
+ Punkte: \hfil Note: \hrule width3cm height0pt\par}}
+
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox {\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \vbox {\hrule\hbox{\vrule%
+ \box\@outputbox
+ \hskip-1.4cm\vrule\vbox to \perheightI{%
+ \hbox to 1.36cm{\vrule height 12pt width0pt depth8pt\hfill %
+ {\Sm Punkte}\hfill}\hrule\vfill}%
+ \vrule}%
+ \hrule}%
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
diff --git a/macros/latex209/contrib/klassenarbeiten/arbeito.sty b/macros/latex209/contrib/klassenarbeiten/arbeito.sty
new file mode 100644
index 0000000000..a935e4b8f1
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/arbeito.sty
@@ -0,0 +1,90 @@
+%Stylefile zum Erstellen von Klassenarbeiten
+% Copyright (1992) Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+% und Joachim Lammarsch, Luzia Dietsche
+% DANTE e.V.
+% Postfach 101840
+% 6900 Heidelberg 1
+
+\typeout {Stylefile zum Erstellen von Klassenarbeiten (Version 1.0)}
+\typeout {(c) 1992 Werner Burkhardt)}
+\newlength{\perheight}
+\newlength{\texthoehe}
+\newlength{\perheightI}
+\setlength{\tabcolsep}{0cm}
+\setlength{\textwidth}{18.5cm}
+\setlength{\headheight}{15ex}
+\setlength{\textheight}{21cm}
+\setlength{\perheight}{\textheight}
+\setlength{\perheightI}{\textheight}
+\addtolength{\oddsidemargin}{-3cm}
+\addtolength{\evensidemargin}{-3cm}
+\addtolength{\topmargin}{-3cm}
+\addtolength{\perheight}{26pt}
+\addtolength{\perheightI}{25.211111pt}
+
+\font\gross=cmr10 scaled \magstep4
+\newcommand{\Sm}[1]{\tiny\hfil#1\hfil}
+\newcommand{\bln}{ }
+\newcommand{\aufgabe}[3]{%
+ \parbox[t]{1cm}{#1}
+ \parbox[t]{15cm}{#2}
+ \setbox0=\hbox{\parbox[t]{15cm}{#2}}
+ \setlength{\texthoehe}{\ht0}
+ \addtolength{\texthoehe}{\dp0}
+ \addtolength{\texthoehe}{-0.8\baselineskip}
+ \raisebox{-\texthoehe}{\parbox[t]{0.85cm}{\hfill \raggedleft #3 \hfill}}
+ \par \bigskip}
+\newcommand{\kopf}[1]{\parbox[t]{16cm}{#1}\par \medskip}
+\newcommand{\punktesumme}[1]{%
+ \vfill
+ \parbox[t]{16.39cm}{\rule{16.39cm}{0pt}}
+ \parbox{1.4cm}{\rule{1.38cm}{0.4pt}\par}\par
+ \parbox[t]{1cm}{\rule{1cm}{0pt}}
+ \parbox[t]{15cm}{\rule{15cm}{0pt}}
+ \parbox[t]{1.4cm}{\vrule height 12pt width0pt depth8pt%
+ \raggedleft #1}\par}
+
+\def\Klasse#1{\gdef\@Klasse{#1}}
+\def\Nummer#1{\gdef\@Nummer{#1}}
+\def\Fach#1{\gdef\@Fach{#1}}
+\def\Datum#1{\gdef\@Datum{#1}}
+
+\def\@thehead{\vbox{\hrule width\textwidth height0pt
+ \gross
+ \noindent
+ \@Klasse
+ \hfill\@Nummer Klassenarbeit \@Fach\hfill\@Datum
+ \par
+ \bigskip
+ \noindent
+ Name:\par}}%
+
+\def\@thefoot{\vbox{\hrule width\textwidth height0pt
+ \gross
+ \noindent
+ Punkte: \hfil KMK-Punkte: \hfil Note: \hrule width1.5cm height0pt\par}}
+
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox {\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \vbox {\hrule\hbox{\vrule%
+ \box\@outputbox
+ \hskip-1.4cm\vrule\vbox to \perheightI{%
+ \hbox to 1.36cm{\vrule height 12pt width0pt depth8pt\hfill %
+ {\Sm Punkte}\hfill}\hrule\vfill}%
+ \vrule}%
+ \hrule}%
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp1.dvi b/macros/latex209/contrib/klassenarbeiten/bsp1.dvi
new file mode 100644
index 0000000000..629ef09eab
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp1.dvi
Binary files differ
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp1.tex b/macros/latex209/contrib/klassenarbeiten/bsp1.tex
new file mode 100644
index 0000000000..3f31903329
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp1.tex
@@ -0,0 +1,38 @@
+\documentstyle[12pt,german,arbeit]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel f"ur die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine "Anderung vorzunehmen mu"s nur der
+%Inhalte der geschweiften Klammern ver"andert werden.
+
+\Klasse{TEST}
+\Nummer{XX.}
+\Fach{CT}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1. }
+ {Beschreiben Sie aus welchen Teilen eine Zentraleinheit eines
+ Rechners bestehen mu"s und welche Aufgabe sie haben.}{6}
+
+
+\aufgabe{\bf 2. }
+ {Erk"aren Sie die Begriffe Compiler und Interpreter mit ihren
+ Vor- und Nachteilen.}{6}
+
+\aufgabe{\bf 3. }
+ { Schreiben Sie ein Programm mit Nassi-Shneiderman-Diagramm, das nach
+ der Eingabe der Kantenl"angen die Fl"ache des zugeh"origen Rechtecks
+ bestimmt.}{8}
+
+\punktesumme {20}
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp2.dvi b/macros/latex209/contrib/klassenarbeiten/bsp2.dvi
new file mode 100644
index 0000000000..1ba6e846ae
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp2.dvi
Binary files differ
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp2.tex b/macros/latex209/contrib/klassenarbeiten/bsp2.tex
new file mode 100644
index 0000000000..015732e239
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp2.tex
@@ -0,0 +1,65 @@
+\documentstyle[12pt,german,arbeit]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel f"ur die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine "Anderung vorzunehmen mu"s nur der
+%Inhalte der geschweiften Klammern ver"andert werden.
+
+\Klasse{TEST}
+\Nummer{XX.}
+\Fach{Computertechnik}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1. }
+ { Eine Schule verwaltet ihre Sch"ulerdaten mit Hilfe eines
+ Pascalprogramms. Dabei werden die Namen der Sch"uler
+ klassenweise unter dem Klassennamen auf einer Diskette
+ gespeichert. Im weiteren steht folgende Variablendeklaration
+ global zur Verf"ugung:
+
+ \smallskip
+ {\tt var schuelerliste:array[1..40] of string}
+
+ \smallskip
+ Schreiben Sie eine Prozedur, die nach der Eingabe des Klassen-
+ und des Sch"ulernamens die angegebene Datei auf der Diskette
+ durchsucht und die Nummer des Sch"ulers in der Liste ausgibt.
+ Falls der Sch"uler oder die angegebene Datei nicht vorhanden
+ ist, mu"s eine Fehlermeldung erfolgen!!
+ }{8}
+\aufgabe{\bf 2. }
+ {Um Br"uche mit Z"ahler und Nenner zu verarbeiten wird ein Verbund
+ mit dem Namen Bruch deklariert:
+
+ \smallskip
+%\begin{verbatim}
+ {\tt bruch = Record\\
+ \rule{4em}{0em} zaehler, nenner:integer\\
+ \rule{3.5em}{0em} end;\\}
+%\end{verbatim}
+ \smallskip
+
+ Schreiben Sie je eine Prozedur, die Br"uche
+ \begin{itemize}
+ \item einliest
+ \item addiert
+ \item multiplizert
+ \end{itemize}
+
+ F"ur jede Prozedur m"ussen die ben"otigten Variablen deklariert
+ werden!}{24}
+\kopf{\Large \bf Zu jeder Prozedur mu"s ein Nassi-Shneiderman-Diagramm
+erstellt werden!}
+
+\punktesumme { 32}
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp3.dvi b/macros/latex209/contrib/klassenarbeiten/bsp3.dvi
new file mode 100644
index 0000000000..f9d64f259c
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp3.dvi
Binary files differ
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp3.tex b/macros/latex209/contrib/klassenarbeiten/bsp3.tex
new file mode 100644
index 0000000000..7972ed26bb
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp3.tex
@@ -0,0 +1,64 @@
+\documentstyle[12pt,german,arbeit]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel f"ur die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine "Anderung vorzunehmen mu"s nur der
+%Inhalte der geschweiften Klammern ver"andert werden.
+
+\Klasse{TEST}
+\Nummer{XX.}
+\Fach{Computertechnik}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1.}
+ { Schreiben Sie ein Programm zu
+ folgender Problemstellung:
+
+ Nach der Eingabe zweier reeller Zahlen, soll die kleinere der
+ beiden ausgegeben werden. Die kleinere wird als Minimum
+ bezeichnet.}{4}
+
+\aufgabe{\bf 2.}
+ { Schreiben Sie ein Programm zu folgender Problemstellung:
+
+ Ein Gaswerk berechnet einen monatlichen Grundpreis von 30 DM. Die
+ ersten 50 Kubikmeter Gas kosten 0,80 DM je Kubikmeter. F"ur die n"achsten
+ 40 Kubikmeter ist der Preis 0,60 DM je Kubikmeter zu entrichten. F"ur
+ jeden weiteren Kubikmeter m"ussen 0,55 DM bezahlt werden. Wie kann man
+ die monatlichen Gaskosten berechnen, wenn man die verbrauchten
+ Kubikmeter im Monat eingibt?}{10}
+
+
+\aufgabe{\bf 3. }
+ { Im Jahr 1987 hatte Indien 700 Millionen Einwohner, China
+ dagegen 990 Millionen. Die j"ahrliche Wachstumsrate Indiens
+ betr"agt 2,4\%, die Chinas dagegen 1,4\%. Wann hat Indiens
+ Einwohnerzahl die Chinas "uberholt ( unter der Annahme, da"s
+ sich die Wachstumsraten nicht "andern)? Schreiben Sie ein
+ Programm.}{8}
+
+\aufgabe{\bf 4. }
+ { In einem Teich leben x=50 Forellen, doch ist Platz f"ur K=350
+ vorhanden. Die Fo\-rel\-len vermehren sich mit einer Jahresrate von
+ 6\% der Differenz zwischen H"ochstbestand K und dem aktuellen
+ Bestand x. Schreiben Sie ein Programm, das die Ent\-wicklung
+ der Population "uber 20 Jahre beschreibt:
+
+ \begin{tabular}{ll}
+ \bf 1. & ohne "au"sere Einwirkungen,\\
+ \bf 2. & wenn am Ende jedes Jahres 15\% entnommen werden.\\
+ \end{tabular} }{16}
+\kopf{\Large \bf Zu jedem Programm mu"s ein Nassi-Shneiderman-Diagramm
+ erstellt werden!}
+\punktesumme { 38}
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp4.dvi b/macros/latex209/contrib/klassenarbeiten/bsp4.dvi
new file mode 100644
index 0000000000..8f48e8159d
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp4.dvi
Binary files differ
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp4.tex b/macros/latex209/contrib/klassenarbeiten/bsp4.tex
new file mode 100644
index 0000000000..6074284139
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp4.tex
@@ -0,0 +1,70 @@
+\documentstyle[12pt,german,arbeit]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel f"ur die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine "Anderung vorzunehmen mu"s nur der
+%Inhalte der geschweiften Klammern ver"andert werden.
+
+\Klasse{TEST}
+\Nummer{XX.}
+\Fach{Physik}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1. }
+ {Im Feld eines Plattenkondensators (kreisf"ormige Platten vom
+ Radius $r=30cm$, Abstand $d=10cm$) wird ein Probek"orper
+ ($m=1,2g$,
+ Fadenl"ange $l=150cm$ , $q=1,2\cdot10^{-9}C$) um $2$cm
+ ausgelenkt. Die Plattenladung betr"agt $8,5\cdot 10^{-8}C$.
+ }{}
+
+\aufgabe{\bf 1.1}{Erstellen Sie eine Versuchsskizze!}{}
+\aufgabe{\bf 1.2}{Berechnen Sie die Kraft, die durch das elektrische Feld
+ auf die Probeladung ausge"ubt wird.}{}
+\aufgabe{\bf 1.3}{In das Feld werden zwei Aluminiumplatten, die sich
+ ber"uhren, mit der Plattenfl"ache von je $15 cm^2$
+ gebracht.
+
+ Beschreiben Sie, welche physikalischen
+ Vorg"ange ablaufen, mit Hilfe einer Skizze.
+
+ Wie gro"s
+ ist die Fl"achenladungsdichte der Platten.
+
+ Welche Ladung kann man einer Platte entnehmen, wenn
+ man sie aus dem Feld entfernt?}{9}
+\aufgabe{\bf 2.}{ Das Wasserstoffatom besteht aus dem Kern
+ ($Q_p=1,6\cdot10^{-19}C$) und einem Elektron
+ ($Q_e=1,6\cdot10^{-19}C$) im mittleren Abstand von
+ $5,3\cdot10^{-11}m$. Wie gro"s ist die elektrische Kraft
+ zwischen Kern und Elektron?}{2}
+
+\aufgabe{\bf 3.}{Ein Demonstrationskondensator besteht aus zwei kreisf"ormigen
+ Platten mit \\$r=10 cm$.}{}
+\aufgabe{\bf 3.1}{Wie gro"s ist die Kapazit"at bei einem Plattenabstand von $3 mm$?
+ Wie gro"s ist die Ladung auf den Platten und die Feldst"arke zwischen
+ den Platten, wenn die Spannung $U=200 V$ angelegt wird?}{}
+\aufgabe{\bf 3.2}{Wie "andert sich die Kapazit"at, die Ladung und die Feldst"arke,
+ wenn der Plattenabstand verdreifacht wird, ohne den Kondensator
+ von der Spannungsquelle zu trennen?}{}
+\aufgabe{\bf 3.3}{Wie "andert sich die Kapazit"at, die Ladung und die Feldst"arke,
+ wenn der Kondensator mit $200V$ aufgeladen und dann von der
+ Spannungsquelle getrennt wird, wenn man anschlie"send den
+ Plattenabstand verdreifacht? Wie ver"andert sich die Spannung?}
+ {6}
+
+\kopf{\bigskip
+
+$\epsilon_0=8,85 \cdot 10^{-12}\frac{F}{m}$}
+\punktesumme {17}
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp5.dvi b/macros/latex209/contrib/klassenarbeiten/bsp5.dvi
new file mode 100644
index 0000000000..914c791afc
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp5.dvi
Binary files differ
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp5.tex b/macros/latex209/contrib/klassenarbeiten/bsp5.tex
new file mode 100644
index 0000000000..d011f77b78
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp5.tex
@@ -0,0 +1,58 @@
+\documentstyle[12pt,german,arbeit]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel f"ur die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine "Anderung vorzunehmen mu"s nur der
+%Inhalte der geschweiften Klammern ver"andert werden.
+
+\Klasse{TEST}
+\Nummer{XX.}
+\Fach{Physik}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1.}{ Welche Kapazit"at $C$ mu"s man zu einem Kondensator
+ $C_1$ parallel schalten, damit die Ersatzkapazit"at auf
+ das $1,5$-fache steigt?}{3}
+\aufgabe{\bf 2.}{Ein Kondensator mit der Kapazit"at $C=10 \mu F$ wird mit Hilfe
+ einer Gleichstromquelle von $U= 4000 V$ aufgeladen.}{}
+\aufgabe{\bf 2.1}{Wie gro"s ist die im Kondensator gespeicherte Energie?}{}
+\aufgabe{\bf 2.2}{Wie gro"s sind die mittlere Stromst"arke und die mittlere Leistung
+ bei einer Funkenentladung, die den Kondensator in $t= 10^{-5}s$
+ entl"adt?}{4}
+
+
+\aufgabe{\bf 3.1}{Beschreiben Sie den Aufbau einer Braunschen R"ohre mit
+ Hilfe einer Skizze!}{}
+
+\aufgabe{\bf 3.2}{In einer Braunschen R"ohre tritt ein Elektron mit der
+ Anfangsgeschwindigkeit $v=10^7 \frac{m}{s}$ in den
+ Ablenkkondensator ein, an dem eine Spannung von
+ $U=60V$ liegt. Berechnen Sie:
+
+ \begin{enumerate}
+ \item die Kraft auf das Elektron und seine
+ Beschleunigung,
+ \item die Ablenkung nach Durchlaufen des
+ Plattenpaares, wenn der Kondensator $3cm$ lang ist,
+ \item die Komponente der Geschwindigkeit senkrecht zu
+ den Platten beim Verlassen des Feldes,
+ \item die Gesamtablenkung auf dem Schirm, wenn
+ der Kondensator $20cm$ vom Schirm entfernt ist.
+ \end{enumerate}}{17}
+
+
+
+\kopf{$\epsilon_0=8,85 \cdot 10^{-12}\frac{F}{m}\, ; \, e=1,6\cdot
+10^{-19}C\, ; \, m_e=9,1\cdot 10^{-31}kg$}
+\punktesumme {24}
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp6.dvi b/macros/latex209/contrib/klassenarbeiten/bsp6.dvi
new file mode 100644
index 0000000000..401f69f7da
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp6.dvi
Binary files differ
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp6.tex b/macros/latex209/contrib/klassenarbeiten/bsp6.tex
new file mode 100644
index 0000000000..66d14c6892
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp6.tex
@@ -0,0 +1,48 @@
+\documentstyle[12pt,german,arbeit]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel f"ur die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine "Anderung vorzunehmen mu"s nur der
+%Inhalte der geschweiften Klammern ver"andert werden.
+
+\Klasse{TEST}
+\Nummer{XX.}
+\Fach{Mathematik}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1.1 }{ Definieren Sie $f'(x)$! }{}
+\aufgabe{\bf 1.2}{Leiten Sie mit Hilfe dieser Definition folgende Funktionen ab:\\
+ \bigskip
+
+ 1. $f(x)=x^3+3$ \hspace{3cm}
+ 2. $f(x)=\frac{\displaystyle1}{\displaystyle x^2}$\\
+ 3. $f(x)=2 \sqrt{x}$}{ 7}
+\aufgabe{\bf 2.}{ Gegeben ist die Funktion $f$ mit
+ \[f(x)=\frac{\displaystyle1}{\displaystyle8}x^4-x^3+2x^2\qquad \qquad (x\in R).\]}{}
+\aufgabe{\bf 2.1.}{ Untersuchen Sie das Schaubild von $f$ auf Symmetrie,
+ Achsenschnittpunkte, Hoch-, Tief- und Wendepunkte.\\
+ Zeichnen Sie das Schaubild von $f$ f"ur $-1\, \leq \, x \, \leq \, 6$
+ mit $1LE\widehat{=}1cm$.} { 10}
+\aufgabe{\bf 2.2.}{ Die Tangente an das Schaubild von $f$ in $P(3|f(3))$ schlie"st
+ mit den Koordinatenachsen eine Fl"ache ein. Berechnen Sie diese Fl"ache!}
+ { 4}
+
+\aufgabe{\bf 3.}{ Gegeben ist die Funktion $f$ mit
+ \[f(x)=\frac{1}{8}x^5-x^4+3x^3-4x^2+2x \qquad \qquad (x\in R). \]}{}
+\aufgabe{\bf 3.1.}{ Untersuchen Sie das Schaubild von $f$ auf Symmetrie,
+ Achsenschnittpunkte, Hoch-, Tief- und Wendepunkte.\\
+ Zeichnen Sie das Schaubild von $f$ f"ur $-1\, \leq \, x \, \leq \, 4$
+ mit $1LE\widehat{=}1cm$.} { 12}
+
+\punktesumme {33}
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp7.dvi b/macros/latex209/contrib/klassenarbeiten/bsp7.dvi
new file mode 100644
index 0000000000..4e58451696
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp7.dvi
Binary files differ
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp7.tex b/macros/latex209/contrib/klassenarbeiten/bsp7.tex
new file mode 100644
index 0000000000..8c47873b55
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp7.tex
@@ -0,0 +1,107 @@
+\documentstyle[12pt,german,arbeito,fleqn]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel f"ur die Benutzung
+%der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine "Anderung vorzunehmen mu"s nur der
+%Inhalte der geschweiften Klammern ver"andert werden.
+
+\setlength{\mathindent}{0pt}
+
+\Klasse{TEST}
+\Nummer{XX.}
+\Fach{M}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1. }
+ { Gegeben sind die komplexen Zahlen $z_1=3-2i\, , \,z_2=-3+5i
+ \, , \ , z_3=e^{\displaystyle -1 +\pi i}$ und
+ $z_4=e^{\displaystyle 1 +\frac{\pi}{4} i}$ }{}
+\aufgabe{\bf 1.1.}
+ {Geben Sie die Eulersche Darstellung von $z_1$ und $ z_2$ , sowie
+ die kartesische Darstellung von $z_3$ und $z_4$ an.}{\large 4}
+\aufgabe{\bf 1.2.}
+ {Berechnen Sie:
+ \raisebox{1mm}{
+ \parbox{5.8cm}{\[z_3^4 \quad , \quad \frac{z_1 \cdot z_2}{z_3^2} \quad , \quad
+ \left( z_4 \frac{z_1^3}{z_3 \cdot z_2} \right) ^5 \]}}.
+
+ Die Ergebnisse sind in der Eulerschen Darstellung
+ anzugeben.}{\raisebox{0.5cm}{\large 8}}
+
+\aufgabe{\bf 2.}
+ {Zur Kopplung zweier aufeinanderfolgender Stufen eines
+ NF-Verst"arkers verwendet man h"aufig eine Serienschaltung eines
+ Kondensators und eines ohmschen Widerstandes. Von der
+ vorhergehenden Verst"arkerstufe wird die Wechselspannung $U(t)$
+ geliefert. Die Teilspannung $U_\Omega (t)$ wird an die
+ nachfolgende Stufe weitergegeben.}{}
+
+\aufgabe{\bf 2.1}
+ {Fertigen Sie ein Zeigerdiagramm an, das die Zeiger $I(t) \, ,
+ \, U_C(t) \, ,\, U_\Omega(t) $ und $U(t)$ enth"alt! Beginnen Sie
+ dabei mit $I(t)$. Tragen Sie dann die Zeiger f"ur $U_\Omega(t)$
+ und $U_C(t)$ unter Ber"ucksichtigung der Phasenverschiebung ein
+ und konstruieren Sie zuletzt $U(t)$!}
+ {\large 3}
+
+\aufgabe{\bf 2.2}
+ { Berechnen Sie den komplexen Gesamtwiderstand der
+ Serienschaltung von $R_\Omega$ und $R_C$, wenn $\omega$ die
+ Kreisfrequenz ist!}
+ {\large 2}
+
+\aufgabe{\bf 2.3}
+ { Berechnen Sie $|R|$. }{\large 2}
+
+\aufgabe{\bf 2.4}
+ {Dr"ucken Sie $\tan \delta$ durch $R_\Omega \, , \, C$ und
+ $\omega$ aus. }{\large 2}
+
+\aufgabe{\bf 2.5}
+ {Es sei
+ \raisebox{-6mm}{
+ \parbox[b]{6.8cm}{\[ R_\Omega=10^3\Omega \, ,\, C=10^{-5} \frac{As}{V} \mbox{ und }
+ \omega=10^2s^{-1}.\]}}
+ Die Scheitelspannung der Wechselspannung $U(t)$ sei $1V$.
+ Berechnen Sie die Scheitelspannung von $U_\Omega(t)$! Geben Sie
+ au"serdem $\delta $ an!}{\raisebox{0.5cm}{\large 4}}
+
+\aufgabe{\bf 3.}
+ {Stellen Sie die Schwingung mit $f(t)=\cos t + 2 \sin \left( t +
+ \frac{\pi}{6} \right )$ durch eine reine Sinusschwingung dar! Fertigen
+ Sie zun"achst ein geeignetes Zeigerdiagramm an, und bestimmen Sie
+ dann die Amplitude und die Phasenverschiebung der reinen
+ Sinusschwingung!}{\large 6}
+
+\aufgabe{\bf 4.}
+ {In der Physik zeigt man, da"s man einen idealen Schwingkreis
+ durch die Differentialgleichung
+ \raisebox{-6mm}{
+ \parbox[b]{2.8cm}{ \[ L\ddot{Q}(t) + \frac{Q(t)}{C}= 0\]}}
+ und durch die Differentialgleichung
+ \raisebox{-6mm}{
+ \parbox[b]{4.4cm}{
+ \[ L\ddot{Q}(t) + R\dot{Q}(t) + \frac{Q(t)}{C}= 0\]}}
+ einen realen Schwingkreis beschreiben kann.}{}
+
+\aufgabe{\bf 4.1}
+ {Bestimmen Sie mit Hilfe des L"osungsansatzes $Q(t)=Q_0
+ e^{i\omega t}$ die Kreisfrequenz $\omega_0$ des idealen und die
+ Kreisfrequenz $\omega_1$ des realen Schwingkreises. }{\large 8}
+
+\aufgabe{\bf 4.2}
+ {Vergleichen Sie die Kreisfrequenzen $\omega_0$ und $\omega_1$
+ der beiden Schwingkreise! }{\large 2}
+\punktesumme {\large 41}
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp8.dvi b/macros/latex209/contrib/klassenarbeiten/bsp8.dvi
new file mode 100644
index 0000000000..820a3d703e
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp8.dvi
Binary files differ
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp8.tex b/macros/latex209/contrib/klassenarbeiten/bsp8.tex
new file mode 100644
index 0000000000..04107934d5
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp8.tex
@@ -0,0 +1,75 @@
+\documentstyle[12pt,german,arbeit]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel f"ur die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine "Anderung vorzunehmen mu"s nur der
+%Inhalte der geschweiften Klammern ver"andert werden.
+
+\Klasse{TEST }
+\Nummer{XX.}
+\Fach{Mathematik}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1.1.}
+ { Definieren Sie die folgenden Begriffe:
+
+ Lineare H"ulle, Erzeugendensystem, Basis, Koordinate,
+ Dimension.}{5}
+
+
+\aufgabe{\bf 2. }
+ {Im $R^3$ sind die folgenden Vektoren gegeben:
+ \[\vec{a}=\left( \begin{array}{r} 2 \\ 4 \\ 3 \\ \end{array}\right),
+ \vec{b}=\left( \begin{array}{r} 4 \\ 2 \\ 1 \\ \end{array}\right),
+ \vec{c}= \left( \begin{array}{r} 8 \\ -2 \\ -3 \\
+ \end{array}\right) \]}{}
+\aufgabe{\bf 2.1}
+ {Untersuchen Sie, ob die Vektoren linear abh"angig sind.}{ }
+\aufgabe{\bf 2.2 }
+ {Bestimmen Sie die Dimension und eine Basis des von
+ $\vec{a},\vec{b},\vec{c}$ erzeugten Untervektorraumes U. }{ }
+\aufgabe{\bf 2.3 }
+ {Untersuchen Sie, ob der Vektor
+ \parbox{15mm}{\[\left( \begin{array}{r} 4 \\ 0 \\ 2 \\
+ \end{array}\right)\]} in U liegt. }{ }
+\aufgabe{\vskip-15mm\bf 2.4 }
+ {\vskip-15mm Bestimmen Sie die Koordinaten von $\vec{c}$ bez"uglich der in
+ {\bf 2.2} bestimmten Basis. }{\vskip-15mm 10 }
+
+\aufgabe{\bf 3. }
+ {Im $R^3$ sind die folgenden Punkte gegeben:
+
+ $P_1(3/1/4),\qquad P_2(2/2/0), \qquad P_3(1/1/0),\qquad
+ P_4(2/0/2)$. }{ }
+
+\aufgabe{\bf 3.1 }
+ {Zeigen Sie, da"s die Geraden $P_1P_2$ und $P_3P_4$ windschief
+ sind. }{ }
+
+\aufgabe{\bf 3.2 }
+ { Bestimmen Sie die Gleichung der Ebene $E_0$ durch den Ursprung,
+ die zu den Geraden $P_1P_2$ und $P_3P_4$ parallel ist.}{7}
+
+\aufgabe{\bf 4. }
+ {Im $R^3$ sind die folgenden Punkte gegeben:
+
+ $A(1/2/-1),\qquad B(1/5/-1), \qquad C(-9/2/-1),\qquad
+ D(1/-4/3)$. }{ }
+\aufgabe{\bf 4.1 }
+ {Bestimmen Sie die Gleichung der Ebene $E$ durch die Punkte
+ $A,B,C$.}{}
+\aufgabe{\bf 4.2 }
+ {Untersuchen Sie, ob der Punkt $D$ in $E$ liegt und bestimmen
+ Sie gegebenenfalls seine affinen Koordinaten bez"uglich $E$.}{6}
+\punktesumme {28}
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/bsp9.tex b/macros/latex209/contrib/klassenarbeiten/bsp9.tex
new file mode 100644
index 0000000000..162fc4c212
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/bsp9.tex
@@ -0,0 +1,52 @@
+\documentstyle[12pt,german,arbeit]{report}
+\nofiles
+\pagestyle{abikopf}
+
+%Beispiel fr die Benutzung der Datei arbeit.sty
+%Erstellt von Werner Burkhardt
+% Carl-Benz-Schule Mannheim
+% Neckarpromenade 23
+% 6800 Mannheim 1
+
+%Um in den vier nachfolgenden Zeilen eine Žnderung vorzunehmen muá nur der
+%Inhalte der geschweiften Klammern ver„ndert werden.
+
+\Klasse{TO13/2}
+\Nummer{1.}
+\Fach{Mathematik}
+\Datum{11.11.1111}
+
+
+\begin{document}
+
+\aufgabe{\bf 1. }
+ { Im $ \mbox{I}\! \mbox{R}^3 $ sind die folgenden Punkte gegeben:\\
+ $ A(3|6|0) \, , \, B(-4|1|4) \, , \, C(-1|0|8) \, , \, D(6|5|4)$}{}
+\aufgabe{\bf 1.1. }{ Untersuchen Sie, ob sich die Geraden $AC$ und $BD$ schneiden.
+ Bestimmen Sie gegebenenfalls den Schnittpunkt! }{\large 6}
+\aufgabe{\bf 1.2. }{ Bestimmen Sie die Spurpunkte der Geraden $AC$.\\
+ Zeigen Sie, $AC$ die $x_2$-Achse nicht schneidet. }{\large 6}
+
+\aufgabe{\bf 2. }{ Im $ \mbox{I}\! \mbox{R}^3$ sind die Punkte
+ $ A(1|2|3) \, , \, B(4|2|0) \, , \, C(5|3|4) $ und die
+ Gerade $g$ mit der folgenden Gleichung gegeben.
+ \[ g: \vec{x}=\left( \begin{array}{r} 4 \\ 2 \\ 0 \\ \end{array}
+ \right) +
+ t \left( \begin{array}{r} 1 \\ 0 \\ -1 \\ \end{array}
+ \right) \] }{}
+
+\aufgabe{\bf2.1. }{ Geben Sie die Gleichung der Ebene $E$ durch die Punkte
+ $A\, , \, B\, , \, C$ in Parameter- und Koordinatenform an.\\
+ Bestimmen Sie die Spurgeraden sowie die Achsenschnittpunkte
+ von $E$.}{\large 9}
+\aufgabe{\bf 2.2.}{ F"ur jedes $k \in \mbox{I}\! \mbox{R}$ ist die Ebene
+ $F_k$ durch $F_k: kx_1-(2k+1)x_2+kx_3=3(k-1)$ gegeben.\\
+ Zeigen Sie, da"s es ein $k$ mit $E=F_k$ gibt.\\
+ Bestimmen Sie die gemeinsamen Punkte aller $F_k$ bei
+ ver"anderlichem k.}{\large 6}
+\aufgabe{\bf 2.3.}{ Bestimmen Sie die Gleichung der Geraden $h_t$ , die durch
+ den Punkt $C$ und einen beliebigen Punkt $S_t$ der Geraden
+ $g$ geht.}{ \large 3}
+\punktesumme {\large 30}
+
+\end{document}
diff --git a/macros/latex209/contrib/klassenarbeiten/info.doc b/macros/latex209/contrib/klassenarbeiten/info.doc
new file mode 100644
index 0000000000..c37a56feb4
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/info.doc
@@ -0,0 +1,36 @@
+Klassenarbeiten mit LaTeX
+
+1.Kurzinformation
+
+Die Stylefiles arbeit.sty und arbeito.sty (o sthet hier fr Oberstufe)
+dienen zum Erstellen von Klassenarbeiten. Hierzu stehen folgende Befehle
+zur Verfgung:
+
+\aufgabe Der Inhalt der ersten Klammer beinhaltet
+ die Aufgabennummer, der der zweiten den
+ Aufgabentext und der der dritten die
+ zugeh”rigen Punkte.
+\kopf Hiermit kann man einen Text schreiben, der ber
+ die Nummernspalte und Textspalte einer Aufgabe
+ geht (s.o.). Der Text ist zwischen den
+ geschweiften Klammern einzufgen.
+ Diesen Befehl kann man z.B. benutzen, um
+ den Kopf einer Aufgabe zu schreiben.\\
+
+
+ \punktesumme In den geschweiften Klammern wird die
+ Punktesumme einer Klassenarbeit, etc. angegeben.
+
+Um weitere Informationen zu erhalten, kann man sich die Dateien
+bsp1.tex bis bsp9.tex als Musterbeispiele anschauen.
+
+2.Žnderungswnsche
+
+Sollten Sie Žnderungs- oder Erg„nzungswnsche haben, oder wenn Ihnen ein
+Fehler auff„llt, wenden Sie sich bitte an:
+
+
+ Werner Burkhardt
+ Carl-Benz-Schule Mannheim
+ Neckarpromenade 23
+ 6800 Mannheim 1
diff --git a/macros/latex209/contrib/klassenarbeiten/info.dvi b/macros/latex209/contrib/klassenarbeiten/info.dvi
new file mode 100644
index 0000000000..9ea6e0049e
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/info.dvi
Binary files differ
diff --git a/macros/latex209/contrib/klassenarbeiten/info.log b/macros/latex209/contrib/klassenarbeiten/info.log
new file mode 100644
index 0000000000..5e0978d274
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/info.log
@@ -0,0 +1,37 @@
+This is PubliC TeX--XeT, Version 3.141--1.1/DOS-TP 1.4 (preloaded format=LPLAIN 93.10.12) 20 JAN 1994 18:13
+**info
+(info.tex
+LaTeX Version 2.09 <25 March 1992>
+(C:\TEX\LATEX\article.sty
+Standard Document Style `article' <14 Jan 92>.
+(C:\TEX\LATEX\art10.sty)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+) (C:\TEX\INPUTS\german.sty
+Document Style Option `german' Version 2.4a of 12 Apr 1992
+\U@D=\dimen99
+)
+No auxiliary output files.
+
+No file info.aux.
+[1
+
+] )
+Here is how much of TeX's memory you used:
+ 300 strings out of 1963
+ 2803 string characters out of 17982
+ 31215 words of memory out of 65535
+ 2268 multiletter control sequences out of 3000
+ 19297 words of font info for 73 fonts, out of 32767 for 200
+ 14 hyphenation exceptions out of 307
+ 12i,9n,15p,138b,189s stack positions out of 200i,40n,60p,4096b,1000s
+
+Output written on info.dvi (1 page, 2100 bytes).
+There were 90 swappings between 200 real and 90 external pages for
+ 89625 acesses to 121 mem, 76 font, and 55 hyph pages
diff --git a/macros/latex209/contrib/klassenarbeiten/info.tex b/macros/latex209/contrib/klassenarbeiten/info.tex
new file mode 100644
index 0000000000..ddca39ee63
--- /dev/null
+++ b/macros/latex209/contrib/klassenarbeiten/info.tex
@@ -0,0 +1,58 @@
+\documentstyle[german]{article}
+
+\nofiles
+\pagestyle{empty}
+\addtolength{\textwidth}{10pt}
+
+\begin{document}
+\noindent
+{\huge Klassenarbeiten mit \LaTeX}
+
+\section{Kurzinformation}
+
+Die Stylefiles {\bf arbeit.sty} und {\bf arbeito.sty} (o steht hier f"ur Oberstufe)
+dienen zum Erstellen von Klassenarbeiten. Hierzu stehen folgende Befehle zur
+Verf"ugung:
+
+\sloppy
+\begin{flushleft}
+\begin{tabular}{p{3.3cm}p{7.8cm}}
+\bf $\backslash$ aufgabe \{\}\{\}\{\}
+ & Der Inhalt der ersten Klammer beinhaltet
+ die Auf\-gaben\-nummer, der der zweiten den
+ Auf\-gaben\-text und der der dritten die
+ zu\-geh"origen Punkte. \\
+\bf $\backslash$ kopf\{\} & Hiermit kann man einen Text schreiben, der "uber die
+ Nummern\-spalte und Text\-spalte einer Aufgabe
+ geht (s.o.). Der Text ist zwischen den
+ ge\-schweiften Klammern einzuf"ugen.
+
+ Diesen Befehl kann man z.B. benutzen, um
+ den Kopf einer Aufgabe zu schreiben.\\
+
+
+\bf $\backslash$ punktesumme\{\}
+ & In den geschweiften Klammern wird die
+ Punkte\-summe einer Klassenarbeit, etc. an\-gegeben.\\
+\end{tabular}
+\end{flushleft}
+
+\fussy
+Um weitere Informationen zu erhalten, kann man sich die Dateien {\bf
+bsp1.tex } bis {\bf bsp9.tex } als Musterbeispiel anschauen.
+
+\section{"Anderungsw"unsche}
+
+Sollten Sie "Anderungs- oder Erg"anzungsw"unsche haben, oder wenn Ihnen ein
+Fehler auff"allt, wenden Sie sich bitte an:
+
+\bigskip
+
+\bf
+\begin{quote}
+ Werner Burkhardt\\
+ Carl-Benz-Schule Mannheim\\
+ Neckarpromenade 23\\
+ 68167 Mannheim
+\end{quote}
+\end{document}
diff --git a/macros/latex209/contrib/kluwer/kluwer.bst b/macros/latex209/contrib/kluwer/kluwer.bst
new file mode 100644
index 0000000000..fbbfa13b46
--- /dev/null
+++ b/macros/latex209/contrib/kluwer/kluwer.bst
@@ -0,0 +1,1227 @@
+% BibTeX standard bibliography style `kluwer' (one of the harvard family)
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1991, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, abbrv.bst, agsm.bst,
+ % dcu.bst or kluwer.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file harvard.tex has the documentation for this style.
+
+% ACKNOWLEDGEMENT:
+% This document is a modified version of alpha.bst to which it owes much of
+% its functionality.
+
+% AUTHOR
+% Peter Williams, Key Centre for Design Quality, Sydney University
+% e-mail: peterw@archsci.arch.su.oz.au
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ { field.used }
+ { extra.label sort.label list.year }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t f }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ". " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {item.check}
+{ 't :=
+ empty$
+ { "empty " t * " in " * cite$ * warning$ }
+ { skip$ }
+ if$
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {embolden}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\bf " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {quote}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "`" swap$ * "'" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ 'f :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr f format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { "{vv~}{ll}{, jj}{, f.}" author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { "{vv~}{ll}{, jj}{, f.}" editor format.names
+ editor num.names$ #1 >
+ { " (eds)" * }
+ { " (ed.)" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.editors.reverse}
+{ editor empty$
+ { "" }
+ { "{f.~}{vv~}{ll}{, jj}" editor format.names
+ editor num.names$ #1 >
+ { " (eds)" * }
+ { " (ed.)" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "Vol." volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series emphasize * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edn" * }
+ { edition "t" change.case$ " edn" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pp.~" pages n.dashify * }
+ { "p.~" pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume embolden field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ",~" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { booktitle emphasize }
+ { "{\em in} " format.editors.reverse * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "in {\em " journal * "\/}" * " \cite{" * crossref * "}" *
+ }
+ if$
+ }
+ { " {\em in} \citeasnoun{" crossref * "}" * }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "in "
+ }
+ { "Vol." volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * " \cite{" * crossref * "}" *}
+ if$
+ }
+ { " \citeasnoun{" * crossref * "}" * }
+ if$
+ }
+ { " \citeasnoun{" * crossref * "}" * }
+ if$
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ {
+ key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "in {\em " booktitle * "\/}" * " \cite{" * crossref * "}" *}
+ if$
+ }
+ { " {\em in} \citeasnoun{" crossref * "}" * }
+ if$
+ }
+ { " {\em in} \citeasnoun{" crossref * "}" * }
+ if$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {format.lab.names.abbr}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #2 >
+ { s #1 "{vv~}{ll}" format.name$ " et al." * }
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { s #1 "{vv~}{ll}" format.name$ " et al." * }
+ { s #1 "{vv~}{ll}" format.name$ " and " *
+ s #2 "{vv~}{ll}" format.name$ *
+ }
+ if$
+ }
+ if$
+ }
+ { s #1 "{vv~}{ll}" format.name$ }
+ if$
+}
+
+FUNCTION {format.lab.names.full}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{vv~}{ll}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+INTEGERS { author.field editor.field organization.field title.field key.field }
+
+FUNCTION {init.field.constants}
+{ #0 'author.field :=
+ #1 'editor.field :=
+ #2 'organization.field :=
+ #3 'title.field :=
+ #4 'key.field :=
+}
+
+FUNCTION {make.list.label}
+{ author.field field.used =
+ { format.authors }
+ { editor.field field.used =
+ { format.editors }
+ { organization.field field.used =
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ { title.field field.used =
+ { format.btitle }
+ { key.field field.used =
+ { key #3 text.prefix$ }
+ { "Internal error :001 on " cite$ * " label" * warning$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {make.full.label}
+{ author.field field.used =
+ { author format.lab.names.full }
+ { editor.field field.used =
+ { editor format.lab.names.full }
+ { organization.field field.used =
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ { title.field field.used =
+ { format.btitle }
+ { key.field field.used =
+ { key #3 text.prefix$ }
+ { "Internal error :001 on " cite$ * " label" * warning$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {make.abbr.label}
+{ author.field field.used =
+ { author format.lab.names.abbr }
+ { editor.field field.used =
+ { editor format.lab.names.abbr }
+ { organization.field field.used =
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ { title.field field.used =
+ { format.btitle }
+ { key.field field.used =
+ { key #3 text.prefix$ }
+ { "Internal error :001 on " cite$ * " label" * warning$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\harvarditem[" write$
+ make.abbr.label write$
+ "]{" write$
+ make.full.label write$
+ "}{" write$
+ list.year write$
+ "}{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {list.label.output}
+{ make.list.label write$
+}
+
+FUNCTION {article}
+{ output.bibitem
+ list.label.output
+ " " list.year * output.nonnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ crossref missing$
+ { journal emphasize "journal" duplicate$ item.check
+ pages empty$
+ {
+ output
+ }
+ {
+ " " *
+ format.vol.num.pages * output
+ }
+ if$
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ author empty$
+ { editor "author and editor" item.check }
+ { crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ title.field field.used =
+ { skip$ }
+ { format.btitle "title" output.check }
+ if$
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ format.edition output
+ publisher "publisher" output.check
+ address output
+ }
+ { format.book.crossref output.nonnull
+ format.edition output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ howpublished output
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ author empty$
+ { editor "author and editor" item.check }
+ { crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ title.field field.used =
+ { skip$ }
+ { format.btitle "title" output.check }
+ if$
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ format.edition output
+ publisher "publisher" output.check
+ address output
+ }
+ { format.book.crossref output.nonnull
+ format.edition output
+ }
+ if$
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ author "author" item.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.edition output
+ format.bvolume output
+ format.number.series output
+ publisher "publisher" output.check
+ address output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ }
+ if$
+ format.chapter.pages output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ author "author" item.check
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { organization output
+ publisher output
+ }
+ { organization output
+ publisher output
+ address output.nonnull
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ }
+ if$
+ format.pages output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ title.field field.used =
+ { skip$ }
+ { format.btitle "title" output.check }
+ if$
+ format.edition output
+ author empty$
+ { organization empty$
+ { address output
+ }
+ 'skip$
+ if$
+ }
+ { organization output
+ address output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { format.title emphasize "title" output.check }
+ if$
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ title.field field.used =
+ { skip$ }
+ { format.title output }
+ if$
+ howpublished output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { format.btitle "title" output.check }
+ if$
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ title.field field.used =
+ { skip$ }
+ { format.btitle "title" output.check }
+ if$
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { skip$ }
+ { organization output
+ }
+ if$
+ publisher output
+ }
+ { editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ address output.nonnull
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ format.tr.number emphasize output.nonnull
+ institution "institution" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ list.label.output
+ ": " list.year * output.nonnull
+ author "author" item.check
+ title.field field.used =
+ { skip$ }
+ { format.title "title" output.check }
+ if$
+ note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+EXECUTE {init.field.constants}
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { title.field 'field.used := }
+ { key.field 'field.used := }
+ if$
+ }
+ { author.field 'field.used := }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { title.field 'field.used := }
+ { key.field 'field.used := }
+ if$
+ }
+ { editor.field 'field.used := }
+ if$
+ }
+ { author.field 'field.used := }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { title.field 'field.used := }
+ { organization.field 'field.used := }
+ if$
+ }
+ { key.field 'field.used := }
+ if$
+ }
+ { author.field 'field.used := }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { title.field 'field.used := }
+ { organization.field 'field.used := }
+ if$
+ }
+ { key.field 'field.used := }
+ if$
+ }
+ { editor.field 'field.used := }
+ if$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ make.abbr.label
+ title.field field.used =
+ { sort.format.title }
+ { sortify }
+ if$
+ year field.or.null purify$ #-1 #4 substring$ sortify
+ *
+ 'sort.label :=
+}
+
+FUNCTION {first.presort}
+{ calc.label
+ sort.label
+ title.field field.used =
+ { skip$ }
+ { " "
+ *
+ make.list.label sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {first.presort}
+
+SORT
+
+STRINGS { last.sort.label next.extra }
+
+INTEGERS { last.extra.num }
+
+FUNCTION {initialize.last.extra.num}
+{ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ year empty$
+ { "n.d." extra.label * 'list.year := }
+ { year extra.label * 'list.year := }
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.last.extra.num}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {second.presort}
+{ make.list.label
+ title.field field.used =
+ { sort.format.title }
+ { sortify }
+ if$
+ " "
+ *
+ list.year field.or.null sortify
+ *
+ " "
+ *
+ title.field field.used =
+ { skip$ }
+ { title field.or.null
+ sort.format.title
+ *
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {second.presort}
+
+SORT
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{xx}" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/macros/latex209/contrib/kluwer/kluwer.sty b/macros/latex209/contrib/kluwer/kluwer.sty
new file mode 100644
index 0000000000..c837e5056f
--- /dev/null
+++ b/macros/latex209/contrib/kluwer/kluwer.sty
@@ -0,0 +1,500 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Silvano Balemi",
+%%% version = "1.1",
+%%% date = "13-MAY-1993",
+%%% filename = "kluwer.sty",
+%%% address = "Automatic Control Laboratory
+%%% Swiss Federal Institute of Technology (ETH)
+%%% 8092 Zurich, Switzerland",
+%%% telephone = "+41 (1) 256.55.35",
+%%% FAX = "+41 (1) 262.43.62",
+%%% email = "balemi@aut.ee.ethz.ch",
+%%% keywords = "LaTeX, kluwer proceedings, Camera ready,
+%%% publisher style",
+%%% supported = "yes. Please send comments via E-mail",
+%%% mainserver = "ifa.ethz.ch"
+%%% docstring = "This is a LaTeX style file for camera ready
+%%% articles according to instructions of the
+%%% Journal of Discrete Event Dynamic Systems
+%%% (kluwer).
+%%% The default font size is 10 points (kluwer10.sty)
+%%% Usage:
+%%% \documentstyle{kluwer}
+%%% \author{}
+%%% \title{}
+%%% \abstract{}
+%%% \keywords{}
+%%% \maketitle
+%%% See also kluwer.bst, harvard.sty, kluwer10.sty",
+%%% }
+%%% ====================================================================
+\typeout{Document Style `kluwer' <13-MAY-1993>.}
+
+
+\def\title#1{\gdef\@title{#1}}
+\def\abstract#1{\gdef\@abstract{#1}}
+\def\keywords#1{\gdef\@keywords{#1}}
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+\input kluwer1\@ptsize.sty\relax
+
+
+\ds@twoside % Left- and right heads different
+
+\parindent 3mm
+\textheight 190mm
+\textwidth 126mm
+\oddsidemargin 15mm
+\evensidemargin 15mm
+\newdimen\headwidth
+\newdimen\headrulewidth
+\headrulewidth 0.4pt
+\headwidth \textwidth
+
+\def\head#1{\def\@head{#1}}
+\head{\hfill Discrete Event Dynamic Systems: Theory and Applications}
+
+\def\ps@DEDS{
+ \def\@evenhead{}
+ \def\@oddhead{\hfil\@head\hfil}
+ \def\@evenfoot{\thepage\hfill}
+ \def\@oddfoot{}
+}
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\normalsize\bf}{ }}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\normalsize\it}{}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{0ex plus 0ex}{\normalsize\it}{.\mbox{~~}}}
+
+% Redefinition of startsection to allow an additional argument to
+% allow for instance ". " after the subsubsection name.
+\def\@startsection#1#2#3#4#5#6#7{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi
+ \vskip -\parskip\@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}{#7}}
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}{}{#7}}}}
+
+\def\@sect#1#2#3#4#5#6#7[#8]#9{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef
+ \@svsec{\csname the#1\endcsname\ifnum #2<3.\fi\hskip 1em }\fi
+% \ifnum #2<3.\fi puts "." at end of the section and subsection number
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #9#7\par}%
+ \endgroup
+ \csname #1mark\endcsname{#8}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #8}\else
+ \def\@svsechd{#6\hskip #3\@svsec #9#7\csname #1mark\endcsname
+ {#8}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #8}}\fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5#6{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4 \@hangfrom{\hskip #1}{\interlinepenalty \@M
+ #6 #5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #6 #5}\fi
+ \@xsect{#3}}
+
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{Contents}{Contents}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{{\small
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\it #1.} #2}
+ \ifdim \wd\@tempboxa >\hsize {\it #1.} #2\par \else \hbox
+to\hsize{\box\@tempboxa\hfil}
+ \fi}}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{
+\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi
+ \thispagestyle{DEDS}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}
+%\gdef\@author{}
+%\gdef\@title{}
+\gdef\@abstract{}
+\gdef\@keywords{}
+\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em
+\noindent
+ {\LARGE \@title \par} \vskip 2.5em { \lineskip .5em
+\noindent
+{\small \@author }
+\par}
+ \vskip 1em \noindent {\small {\bf {Abstract}. }\@abstract\par}
+ \vskip 1em \noindent {\small {\bf {Key Words}: }\@keywords\par}
+ \par
+ \vskip 2.5em}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+\def\footnoterule{\kern-3\p@ \hrule width .0\columnwidth \kern 2.6\p@}
+
+% Definition for the running heads. The standard command
+% \markboth{author's name}{title of the paper}
+% can be used to manually set the headers
+\def\rightmark{{\small\uppercase{\@title}}}
+\def\leftmark{{\small\uppercase{\@author}}}
+\def\@evenhead{\leftmark}
+\def\@oddhead{\rightmark}
+\def\markboth#1#2{
+\def\leftmark{{\small\uppercase{#1}}}\def\rightmark{{\small\uppercase{#2}}}}
+\ps@myheadings
+%\ps@plain
+\pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
+
+% defines the command for putting the header
+% footernote{TEXT} is the same as markboth{TEXT}{TEXT}. Here for
+% compatibility with other style files.
+\def\footernote#1{\markboth{#1}{#1}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+
+\def\thebibliography#1{\section*{References\@mkboth
+ {References}{References}}
+\small
+\list
+ {[\arabic{enumi}]}{\labelwidth 0mm \leftmargin\labelwidth
+ \advance\leftmargin 3mm
+ \itemindent -1mm
+ \itemsep 0pt
+ \parsep 0pt
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\input{fleqn.sty}
+%left term of eqnarray is flushed left
+\let\@eqnsel = \hfil
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+$$\halign to \displaywidth\bgroup\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$\hfil&\global\@eqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$\halign to
+\linewidth\bgroup\hskip\@centering$\displaystyle\tabskip\z@
+ {##}$\hfill&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue }
+
+\mathindent = 8mm
+
+% labels flushed left
+\def\@mklab#1{#1\hfil}
+
+
+\def\QED{~\rule[-1pt]{6pt}{6pt}\par\medskip}
+\newenvironment{proof}{\noindent{\it Proof.\ }}{ \hspace*{\fill} \QED}
+\def\@begintheorem#1#2{\rm \trivlist
+ \item[\hskip \labelsep{\sc #1\ #2.}]}
+\def\@opargbegintheorem#1#2#3{\rm \trivlist
+ \item[\hskip \labelsep{\sc #1\ #2}] {\rm(#3). }}
+
+\newtheorem{theorem}{Theorem}
+\newtheorem{corollary}{Corollary}
+\newtheorem{lemma}{Lemma}
+\newtheorem{proposition}{Proposition}
+\newtheorem{conjecture}{Conjecture}
+\newtheorem{remark}{Remark}
+\newtheorem{definition}{Definition}
+
+
+% Definitions for acepting bibliography with bibliography style file
+% kluwer.bst
+% These lines are a mofidied version of harvard.sty,
+% a file from Peter Williams' <peterw@archsci.arch.su.OZ.AU>
+%% Harvard family of bibliographic styles
+
+\def\@hiteml[#1]#2#3#4{\item[]\if@filesw%
+ { \def\protect##1{\string ##1\space}\immediate%
+\write\@auxout{\string\harvardcite{#4}{#1}{#1}{#3}}}\fi%
+\protect\hspace*{-\labelwidth}\protect\hspace*{-\labelsep}\ignorespaces}
+
+\def\@hitem#1#2#3{\item[]\if@filesw%
+ { \def\protect##1{\string ##1\space}\immediate%
+\write\@auxout{\string\harvardcite{#3}{#1}{#1}{#2}}}\fi%
+\protect\hspace*{-\labelwidth}\protect\hspace*{-\labelsep}\ignorespaces}
+
+\def\harvarditem{\@ifnextchar [{\@hiteml}{\@hitem}}
+
+\def\harvardcite#1#2#3#4{
+ \global\@namedef{bhf@#1}{#2}
+ \global\@namedef{bha@#1}{#3}
+ \global\@namedef{bhy@#1}{#4}
+ \global\@namedef{b@#1}{\csname bhf@#1\endcsname}
+}
+
+\def\cite{\@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+\def\citeasnoun{\@ifnextchar [{\@tempswatrue\@citexasnoun}
+ {\@tempswafalse\@citexasnoun[]}
+}
+
+\def\@enamedef#1{\expandafter\edef\csname #1\endcsname}
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{\@hisep\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{{\csname b@\@citeb\endcsname\@hysep\csname bhy@\@citeb\endcsname}%
+\global\@enamedef{b@\@citeb}{\csname bha@\@citeb\endcsname}}%
+}}{#1}}
+
+\def\@citexasnoun[#1]#2{%
+\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+\@citeasnoun{{\@ifundefined%
+{b@#2}%
+{{\bf ?}\@warning{Citation `#2' on page \thepage \space undefined}}%
+{{\csname b@#2\endcsname\ [\csname bhy@#2\endcsname}%
+\global\@namedef{b@#2}{\csname bha@#2\endcsname}}%
+}}{#1}}
+
+\gdef\hysep@agsm{\ }\gdef\hisep@agsm{,}%
+\gdef\hysep@kluwer{, }\gdef\hisep@kluwer{;}%
+\let\@hysep\hysep@agsm \let\@hisep\hisep@agsm
+\def\citationstyle#1{%
+\global\@namedef{@hysep}{\csname hysep@#1\endcsname}%
+\global\@namedef{@hisep}{\csname hisep@#1\endcsname}}
+
+%DEFAULT DEFINITIONS
+\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
+\def\@citeasnoun#1#2{{#1\if@tempswa , #2\fi]}}
+
+% CHANGE \end{document} - to handle double definitions
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}%
+\def\harvardcite{\@testbibh}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\def\@testbibh #1#2#3{
+ \def\@tempa{#2}\expandafter
+ \ifx \csname bhf@#1\endcsname \@tempa
+ \def\@tempa{#3}\expandafter
+ \ifx \csname bha@#1\endcsname \@tempa
+ \else \@tempswatrue
+ \fi
+ \else
+ \@tempswatrue
+ \fi
+}
+
diff --git a/macros/latex209/contrib/kluwer/kluwer10.sty b/macros/latex209/contrib/kluwer/kluwer10.sty
new file mode 100644
index 0000000000..4a4c691abf
--- /dev/null
+++ b/macros/latex209/contrib/kluwer/kluwer10.sty
@@ -0,0 +1,108 @@
+% sb mods to IEEE10.sty - created 2/9/88
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+\def\@listi{\leftmargin\leftmargini \topsep 3pt plus 1pt minus 1pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\footnotesep 6.65pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+\partopsep 2pt plus 1pt minus 1pt
+
+
+
+\marginparsep 11pt
+ \topmargin 27pt \headheight 12pt \headsep 25pt \footskip 30pt
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}
+\@addtoreset{equation}{section}
+\def\theequation{\thesection.\arabic{equation}}
+}
+
+
+\leftmargini 25pt
+\leftmarginii 22pt
+\leftmarginiii 18.7pt
+\leftmarginiv 17pt
+\leftmarginv 10pt
+\leftmarginvi 10pt
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini
+ \topsep 5.5pt plus 1pt minus 1pt
+ \parsep 1pt plus 0pt minus 0pt
+ \itemsep 1pt plus 0pt minus 0pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep 1pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 1pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+
+
+%\def\@normalsize{\@setsize\normalsize{11.4pt}\xpt\@xpt
+% changed 4/28/89 rhr to 11.9 pts for IEEE ASSP article spacing
+% also change sectioning fonts from \Large\bf etc. to \normalsize\sc
+\def\@normalsize{\@setsize\normalsize{11.9pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 5pt plus3pt
+minus3pt}
+\def\small{\@setsize\small{10.2pt}\viiipt\@viiipt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
diff --git a/macros/latex209/contrib/konstruk/konstdoc.tex b/macros/latex209/contrib/konstruk/konstdoc.tex
new file mode 100644
index 0000000000..13176ef68f
--- /dev/null
+++ b/macros/latex209/contrib/konstruk/konstdoc.tex
@@ -0,0 +1,14 @@
+\documentstyle[german,doc,konstruk,stamm]{article}
+
+\Thema{Seitenlayout mit KONSTRUK.STY}
+\Nr{6}
+\Datum{14.1.93}
+
+\def\PrintMacroName#1{}
+
+\begin{document}
+
+\DocInput{konstruk.sty}
+
+\end{document}
+
diff --git a/macros/latex209/contrib/konstruk/konstruk.sty b/macros/latex209/contrib/konstruk/konstruk.sty
new file mode 100644
index 0000000000..c3996b0fc1
--- /dev/null
+++ b/macros/latex209/contrib/konstruk/konstruk.sty
@@ -0,0 +1,1366 @@
+\def\fileversion{v1.4}
+\def\filedate{94/01/04}
+\def\docdate {93/08/14}
+
+%% \CheckSum{0}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+% \iffalse This is a METACOMMENT
+% Everything up to the next `\ fi' (without a blank) will
+% be ignored. This is necessary because `%' may no longer
+% be a comment mark when this file is read in.
+%
+% Style-option `zsb' to use with LaTeX v2.09
+% Copyright (C) 1992 Andreas Schrell, all rights reserved.
+%
+% IMPORTANT NOTICE:
+%
+% You are not allowed to change this file. You may however copy
+% this file to a different name and then change this copy.
+%
+% You are allowed to distribute this file under the condition that
+% it is distributed together with all files mentioned in readme.txt.
+% If you receive only some of these files from someone, complain!
+%
+% You are NOT ALLOWED to distribute this file alone.
+% You are NOT ALLOWED to take money for the distribution or use of
+% this file (or a changed version) except for some nominal charge
+% for copying etc.
+%
+%
+% Error reports for UNCHANGED versions please to:
+%
+% Andreas Schrell
+% Windh"ovel 2
+% D-42279 Wuppertal
+% Federal Republic of Germany
+% Internet: <Andreas.Schrell@FernUni-Hagen.de>
+%
+% \fi
+%
+% \DoNotIndex{\@M,\@Mi,\@bsphack,\@cclv,\@colht,\@currlist,\@deferlist}
+% \DoNotIndex{\@elt,\@esphack,\@floatplacement}
+% \DoNotIndex{\@ifundefined,\@ifnextchar,\@makecol}
+% \DoNotIndex{\@ne,\@outputpage,\@scolelt,\@spaces,\@tempb,\@tempcnta}
+% \DoNotIndex{\@warning,\@width}
+% \DoNotIndex{\addvspace,\advance,\allowbreak}
+% \DoNotIndex{\baselineskip,\begingroup,\box,\columnsep,\copy,\count}
+% \DoNotIndex{\count@,\def,\dimen@,\divide,\docdate}
+% \DoNotIndex{\edef,\eject,\egroup,\else,\endgroup,\endinput}
+% \DoNotIndex{\fi,\fileversion,\filedate}
+% \DoNotIndex{\gdef,\global}
+% \DoNotIndex{\hbox,\hfil,\hrule,\ht,\hss}
+% \DoNotIndex{\ifdim,\ifnum,\ifvoid,\ignorespaces,\insert,\immediate}
+% \DoNotIndex{\let,\loop}
+% \DoNotIndex{\maxdepth,\message,\multiply}
+% \DoNotIndex{\newbox,\newcount,\newdimen,\newskip,\number,\newpage}
+% \DoNotIndex{\outputpenalty,\p@,\penalty}
+% \DoNotIndex{\relax,\repeat,\setbox,\skip,\space,\splitmaxdepth}
+% \DoNotIndex{\splittopskip,\string,\sixt@@n}
+% \DoNotIndex{\the,\thepage,\thr@@,\topskip,\tw@,\typeout}
+% \DoNotIndex{\unvbox,\vbox,\vfill,\vsplit,\voidb@x,\vrule}
+% \DoNotIndex{\write,\wd}
+% \DoNotIndex{\z@}
+%
+% \changes{v1.0b}{93/02/24}{{\tt`FreeEinfachseite} schaltete nicht
+% auf Einfachseiten.}
+% \changes{v1.0b}{93/02/24}{{\tt`KorEinfachseite} fehlte ganz.}
+% \changes{v1.0h}{93/06/21}{{\tt`MaximalSeite} aufgenommen.}
+% \changes{v1.1}{93/08/14}{{\tt`QuerFormat} hinzugef"ugt.}
+% \changes{v1.1}{93/08/14}{Automatische Berechnung von Satzbreite und
+% Satzh"ohe bei FreeStyle, falls nicht angegeben.}
+% \changes{v1.1}{93/08/14}{Testversion von {\tt`SchnittMarken}}
+% \changes{v1.2}{93/08/14}{Dimensionsregister sparen.}
+% \changes{v1.3}{93/10/03}{{\tt`Zentriert auf} hinzugef"ugt.
+% Schnittmarken mit Mittelmarkierungen.}
+%
+% \title{\vfil \thispagestyle{empty}
+% Dokumentation zum KONSTRUK.STY\\[4mm]
+% F"ur \LaTeX-Seitenlayout Festlegung
+% \thanks{Diese Datei
+% hat die Versionsnummer \fileversion, letzte "Anderung vom
+% \filedate, Dokumentation vom \docdate.}}
+%
+% \author{%
+% Andreas Schrell\\
+% Windh"ovel 2\\
+% D-42279 Wuppertal\\
+% Federal Republic of Germany\\
+% {\rm E-Mail:} {\tt Andreas.Schrell@FernUni-Hagen.de}}
+%
+% \date{Ausdruck vom \today}
+%
+%
+% \maketitle
+% \vfil
+% \begin{abstract}
+% \noindent
+% Diese Stil-Option f"ur \LaTeX\ dient zum komfortablen Festlegen des
+% Seitenlayouts f"ur \TeX-Dokumente. Neben vordefinierten Formaten werden
+% auch Befehle zum freien Einstellen des Layouts und Makros zum Testen
+% zur Verf"ugung gestellt.
+% \end{abstract}
+%
+% \vfil\vfil
+%
+% \pagebreak
+% \MakeShortVerb{\|}
+%
+% \section{Beschreibung der Befehle}
+%
+% \subsection{Papierformat festlegen}
+%
+% Nach dem Laden des Style-Files sollte das Papierformat des sp"ateren
+% Druckerzeugnisses angegeben werden. Hierzu dient der Befehl
+%\begin{verbatim}
+%\PapierFormat
+%\end{verbatim}
+% Als Parameter bekommt er entweder die genauen Ma"se des Papiers, z.\,B.
+%\begin{verbatim}
+%\PapierFormat <200mm,280mm>
+%\end{verbatim}
+% oder eines der folgenden Formatk"urzel:
+%\begin{verbatim}
+%A0 A1 A2 A3 A4 A5 A6 A7 A8 A9
+%B0 B1 B2 B3 B4 B5 B6 B7 B8 B9
+%C0 C1 C2 C3 C4 C5 C6 C7 C8 C9
+%\end{verbatim}
+% Daraus wird dann die Papiergr"o"se des zugeh"origen DIN-Formats
+% ermittelt. In diesem Falle werden die ermittelten Werte auch auf
+% dem Bildschirm ausgegeben.
+%
+% Das so erzeugte Format kann mit dem Befehl
+%\begin{verbatim}
+%\QuerFormat
+%\end{verbatim}
+% in das entsprechende Querformat (landscape) umgewandelt werden. Hierbei
+% wird nat"urlich nicht automatisch die \TeX-Ausgabe gedreht sondern nur
+% die Seitenausma"se bestimmt.
+%
+% \subsection{Freies Layout}
+%
+% \def\dim{{\it dimen\/}}
+% Der umfangreichste Befehl des Makropakets ist der |\FreeStyle|. Hier
+% die vollst"andige Syntax:
+% \begin{tabbing}
+% |\FreeStyle| \= [|Doppelseite|] [|Einfachseite|] \\
+% \> |Satzbreite <|\dim|>| \\
+% \> |Satzhoehe <|\dim|>| \\
+% \> |Bund <|\dim|>| \\
+% \> |Oben <|\dim|>| \\
+% \> |Aussen <|\dim|>| \\
+% \> |Unten <|\dim|>| \\
+% \> |Kopfzeile| \= \\
+% \>\> [|lebend|] [|tot|] \\
+% \>\> |Hoehe <|\dim|>| \\
+% \>\> |Abstand <|\dim|>| \\
+% \>\> |Text {...} |\hskip 3cm (bei Einfachseite) \\
+% \>\> |Text {...} {...}|\hskip 3cm (bei Doppelseite) \\
+% \> |/| \\
+% \> |Fusszeile| \= \\
+% \>\> |Abstand <|\dim|>| \\
+% \>\> |Text {...} |\hskip 3cm (bei Einfachseite) \\
+% \>\> |Text {...} {...}|\hskip 3cm (bei Doppelseite) \\
+% \> |/| \\
+% |/|
+% \end{tabbing}
+% Die Schl"usselworte k"onnen innerhalb einer Wertigkeit in beliebiger
+% Reihenfolge aufgef"uhrt werden. Nat"urlich k"onnen sie auch weggelassen
+% werden. Alle L"angenangaben stehen in spitzen Klammern (also Kleiner-
+% und Gr"o"serzeichen). Der Schr"agstrich dient zum Beenden der
+% Teildefinitionen und des Gesamtmakros. Er darf nicht weggelassen
+% werden. Ebenso m"ussen auch alle Leerzeichen eingehalten werden.
+% Wichtig ist, da"s der |Abstand| der Kopfzeile der wirkliche Abstand
+% ist, in der Fu"szeile jedoch den Abstand Basislinie -- Basislinie
+% bedeutet.
+%
+% \subsubsection{Konstruktionsmethoden}
+%
+% Es werden die folgenden Konstruktionen angeboten:\\*
+% |\Aehnlichkeitskonstruktion <|\dim|>| \\*
+% |\Renaissancekonstruktion <|\dim|>| \\*
+% |\Diagonalkonstruktion <|\dim|>| \\*
+% |\GoldenerSchnitt| \\*
+% |\SilbernerSchnitt| \\*
+% |\Rasterkonstruktion {|{\it Teilung\/}|}| \\*
+% |\FertigLayout 12A 12B 12C 10A 10B 10C 8A 7A| (wahlweise) \\*
+% |\MaximalSeite| \\*
+% Dimensionsangaben bezeichnen immer die Satzbreite. Standardm"a"sig
+% werden Doppelseiten vorgesehen. Die Kopf- und Fu"szeilen werden
+% nicht ver"andert. Mit einem nachfolgenden |\FreeStyle|-Befehl k"onnen
+% einzelne Parameter ver"andert werden.
+%
+% \subsubsection{Korrekturen am Format}
+% Zus"atzlich zum |\FreeStyle| gibt es auch den Befehl |\KorrStyle|. Er
+% besitzt dieselbe Syntax, Ma"se werden jedoch nicht auf den angegebenen
+% Betrag gesetzt, sondern entsprechend ver"andert. Zum Beispiel w"urde der
+% Befehl
+%\begin{verbatim}
+%\KorrStyle
+% Satzbreite <-1cm>
+% /
+%\end{verbatim}
+% die Satzbreite um 1\,cm verringern.
+%
+% \subsubsection{Schnittmarken}
+%
+% Schnittmarken am Papierrand k"onnen mit dem Befehl
+%\begin{verbatim}
+%\SchnittMarken
+%\end{verbatim}
+% am Beginn einer Seite erzeugt werden. Dies ist allerdings nur dann
+% sinnvoll, wenn man z.\,B. mit DVIDVI mehrere Seiten auf ein Blatt
+% drucken m"ochte und dies sp"ater beschneidet. Wird \verb+\SchnittMarken+
+% nicht am Seitenanfang aufgerufen, wird ein \verb+\clearpage+
+% eingef"ugt.
+%
+% \subsubsection{Layout-Zeichnungen}
+%
+% Der Befehl
+%\begin{verbatim}
+%\Layout
+%\end{verbatim}
+% erzeugt eine Layoutzeichnung in Originalgr"o"se. Die Beschriftung kann
+% mit
+% \begin{tabbing}
+% |\Layoutbeschriftung| \= \\
+% \> |Token| \\
+% \> |TeX-Namen| \\
+% \> |Werte| \\
+% \> |Einheit <|\dim|>| \\
+% \> |Konstruktion| \\
+% |/|
+% \end{tabbing}
+% eingestellt werden. Kleine Skizzen k"onnen mit
+%\begin{verbatim}
+%\begin{Layoutskizze} <5cm>
+%\GoldenerSchnitt
+%\end{Layoutskizze}
+%\end{verbatim}
+% erzeugt werden. Man kann den |<..>|-Parameter auch weglassen. Dann
+% geht die Skizze "uber die gesamte Zeilenbreite. Hier das Beispiel:
+% \[ \begin{Layoutskizze} <5cm>
+% \GoldenerSchnitt
+% \end{Layoutskizze} \]
+%
+%
+%
+% \end{document}
+%
+% \StopEventually{\PrintIndex \PrintChanges}
+%
+% \typein[\MitBesch]{^^JWollen Sie auch eine ausf\string"uhrliche
+% Beschreibung der Makros? (j/n)}
+%
+% \if n\MitBesch \let\next\end \else \def\next#1{} \fi
+% \next{document}
+%
+% \pagebreak
+%
+% \section{Die Makros}
+%
+% Zuerst die Lade-Meldung:
+% \begin{macrocode}
+\message{^^JLaTeX Konstruktion-Stil-Option Version \fileversion.^^J}%
+% \end{macrocode}
+%
+% Im folgenden werden die Makros vorgestellt. Bis auf das Verfahren der
+% Token-Parameter ist die Programmierung recht einfach. Es mu"s im
+% wesentlichen gerechnet werden. Als allererstes sorgen wir daf"ur, da"s
+% \TeX\ keine Schusterjungen und Hurenkinder setzt:
+% \begin{macrocode}
+\widowpenalty10000 \clubpenalty10000
+% \end{macrocode}
+%
+% \subsection{Die Schl"usselwort-Programmierung}
+%
+% Die Makros sind im Wesentlichen aus \PiCTeX\ "ubernommen. Ich danke
+% an dieser Stelle M.\,J.\,Wichura f"ur seine vorbildliche Arbeit.
+% Als erstes ben"otigen wir eine Hilfsmeldung und ein paar zus"atzliche
+% Makros, damit ein potentieller Benutzer auch
+% interaktiv falsche Schl"usselworte korrigieren kann.
+% \begin{macrocode}
+\newhelp\Schluesselhilfe{Das angegebene Schluesselwort ist nicht
+ definiert. Ersetze NEUES WORT in der vorgeschlagenen Antwort
+ durch das richtige!}
+
+\def\fixSchluessel#1{%
+ \errhelp=\Schluesselhilfe
+ \errmessage{Unbekanntes Schluesselwort `#1':^^J%
+ \the\Schluesseltoks{NEUES WORT}'}}
+
+\newtoks\Schluesseltoks
+\Schluesseltoks={Eingabe `i\Schluessel}
+
+\def\Schluessel#1{\nextSchluessel#1 }
+% \end{macrocode}
+% Nun kommt das Makro, das eine Schl"usselwortliste durchwandert und
+% daraus \TeX-Makronamen erzeugt. Damit unterschiedliche Oberbegriffe
+% mit gleichen Schl"usseln zu unterschiedlichen Befehlen expandiert
+% werden, wird der Oberbegriff mit in den Namen aufgenommen.
+% \begin{macrocode}
+\def\nextSchluessel#1 {%
+ \expandafter\ifx\csname\Ober#1\endcsname \relax
+ \def\Snext{\fixSchluessel{#1}}%
+ \else
+ \def\Snext{\csname\Ober#1\endcsname}%
+ \fi
+ \Snext}
+% \end{macrocode}
+% Die Makros der Schl"usselworte sind abh"angig vom Befehl, daher mu"s
+% jeweils ein Oberbegriff definiert bzw. restauriert werden.
+% \begin{macrocode}
+\def\NewOber#1{%
+ \expandafter\edef\csname OOBER#1\endcsname{\Ober}%
+ \edef\Ober{#1}}
+\def\OldOber#1{%
+ \edef\Ober{\csname OOBER#1\endcsname}}
+\def\Ober{}
+% \end{macrocode}
+%
+% \subsection{Ausgabe einer Testseite}
+%
+% \begin{macro}{\Layoutbeschriftung}
+% Zu Beginn soll ein Makro vorgestellt werden, mit dem das Seitenlayout
+% gezeichnet werden kann. Unterschiedliche Versionen sorgen daf"ur,
+% da"s sowohl mit als auch ohne Beschriftung ausgegeben werden kann. Die
+% folgenden Beschriftungsmethoden sind implementiert:
+% \begin{description}
+% \item[TeX-Namen] Es werden die \TeX-Bezeichnungen eingetragen.
+% \item[Token] Es werden die Token f"ur den |\FreeStyle|-Befehl
+% eingetragen.
+% \item[Werte] Es werden die Werte eingetragen.
+% \item[Einheit] Die Einheit f"ur die Werte wird festgelegt.
+% \end{description}
+% \begin{macrocode}
+\def\Layoutbeschriftung {\NewOber{LB}%
+ \Tokenfalse \TeXNamenfalse \Wertefalse
+ \Pfeilefalse
+ \def\Einheit{1mm}\def\EFaktor{1}\def\EMass{mm}%
+ \nextSchluessel}
+\newif\ifTeXNamen \newif\ifToken
+\newif\ifWerte \newif\ifPfeile
+\def\Einheit{1mm}
+\def\EFaktor{1}\def\EMass{mm}
+% \end{macrocode}
+% F"ur jedes der erlaubten Token folgt nun dessen Definition. Wir
+% beginnen am Ende:
+% \begin{macrocode}
+\@namedef{LB/}{\OldOber{LB}}
+% \end{macrocode}
+% Einfacher geht es nicht, oder? Als n"achstes werden dann einfach die
+% |\if|s entsprechend den Token gesetzt.
+% \begin{macrocode}
+\@namedef{LBTeX-Namen}{%
+ \Tokenfalse \TeXNamentrue
+ \Pfeiletrue
+ \nextSchluessel}
+\def\LBToken{%
+ \Tokentrue \TeXNamenfalse
+ \Pfeiletrue
+ \nextSchluessel}
+\def\LBWerte{%
+ \Wertetrue \Pfeiletrue
+ \nextSchluessel}
+\def\getEinheit#1#2. {%
+ \def\EFaktor{#1}\def\EMass{#2}}
+\def\LBEinheit <#1> {\def\He{#1}%
+ \def\Einheit{#1}\relax
+ \expandafter\getEinheit\He.
+ \Wertetrue \Pfeiletrue
+ \nextSchluessel}
+\def\LBKonstruktion{%
+ \ifx\setcoordinatesystem\undefined
+ \message{Warnung: Die Konstruktionsskizze kann nur mit
+ \string\PiCTeX\space gezeichnet werden.}%
+ \else
+ \Konstruktiontrue
+ \fi
+ \nextSchluessel}
+\newif\ifKonstruktion \Konstruktionfalse
+% \end{macrocode}
+% \end{macro}
+%
+% Im folgenden wird ein Hilfsmakro ben"otigt, da"s die Einheit pt von
+% einer Zahl entfernt. Es stammt auch aus \PiCTeX.
+% \begin{macrocode}
+\newdimen\removeDIM
+\def\removept#1#2{\removeDIM=#1\relax
+ \edef#2{\expandafter\removePT\the\removeDIM}}
+{\catcode`p=12 \catcode`t=12 \gdef\removePT#1pt{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\KonKasten}
+% Der wichtige Befehl, der jetzt programmiert werden soll, wird eine
+% ganze Reihe von K"asten zu zeichnen haben. Hiermit beginnen wir.
+% \begin{macrocode}
+\def\KonKasten #1 #2 [#3] at #4 #5 {%
+ \removept{#1}\Hw \removept{#2}\Hh
+ \removept{#4}\Hx \removept{#5}\Hy
+ \put(\Hx,\Hy){\makebox(0,0)[#3]{\framebox(\Hw,\Hh){}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KonPfeil}
+% \begin{macro}{\KonText}
+% Ein Pfeil zum Beschriften wird auch ben"otigt. Hier wird auch
+% entschieden, was als Ma"swert stehen soll. Wir brauchen (wieder
+% aus \PiCTeX\ ein Makro, mit dem man Dimensionsregister dividieren
+% kann:
+% \begin{macrocode}
+\newdimen\dimenA \newdimen\dimenB
+\newdimen\dimenC \newdimen\dimenD
+\def\@Divide#1#2#3{%
+ \dimenB=#1%
+ \dimenC=#2%
+ \dimenD=\dimenB
+ \divide \dimenD \dimenC
+ \dimenA=\dimenD
+ \multiply\dimenD \dimenC
+ \advance\dimenB -\dimenD
+ \dimenD=\dimenC
+ \ifdim\dimenD<0pt\dimenD=-\dimenD
+ \fi
+ \ifdim\dimenD<64pt
+ \Divstep[256]\Divstep[256]%
+ \else
+ \DIvide
+ \fi
+ #3=\dimenA\ignorespaces}
+\def\DIvide{%
+ \ifdim\dimenD<256pt
+ \Divstep[64]\Divstep[32]\Divstep[32]%
+ \else
+ \Divstep[8]\Divstep[8]\Divstep[8]\Divstep[8]\Divstep[8]%
+ \dimenA=2\dimenA
+ \fi}
+\def\Divstep[#1]{%
+ \dimenB=#1\dimenB
+ \dimenD=\dimenB
+ \divide \dimenD by \dimenC
+ \dimenA=#1\dimenA
+ \advance\dimenA by \dimenD
+ \multiply\dimenD by \dimenC
+ \advance\dimenB by -\dimenD}
+% \end{macrocode}
+% Um die vielen Berechnungen etwas "ubersichtlicher zu gestalten,
+% benutzen wir die Token-Makros zum Parsen von einfachen Formeln.
+% Es sind Ausdr"ucke der Form
+%\begin{verbatim}
+%\Rechne {...} + {...} - ... + {...} -> {...} [...]
+%\end{verbatim}
+% erlaubt. Es sind als "`Zahlen"' nur Dimensionen (pt) erlaubt.
+% Sie k"onne allerdings optionale Faktoren haben. Beispiel:
+%\begin{verbatim}
+%\Rechne {0.5\textwidth} + {\textwidth} - {2pt} -> {\Ergebnis}
+%\end{verbatim}
+% Die Makros sind eigentlich recht linear. Mit dem optionalen Argument
+% (in eckigen Klammern) kann das Ergebnis gleich ohne "`pt"' in ein
+% Makro "ubernommen werden.
+% \changes{v1.0b}{93/02/24}{$/$ und $*$ beim Rechnen erg"anzt.}
+% \begin{macrocode}
+\newdimen\HW
+\def\Rechne #1 {\NewOber{Rechne}%
+ \dimenA = #1%
+ \nextSchluessel}
+\@namedef{Rechne->}#1 {\OldOber{Rechne}%
+ #1=\dimenA\relax
+ \@ifnextchar[{\Rechneopt}{\ignorespaces}}
+\def\Rechneopt[#1] {\removept{\dimenA}{#1}\ignorespaces}
+\@namedef{Rechne+}#1 {%
+ \advance\dimenA by #1%
+ \nextSchluessel}
+\@namedef{Rechne-}#1 {%
+ \advance\dimenA by -#1%
+ \nextSchluessel}
+\@namedef{Rechne/}#1 {%
+ \divide\dimenA by #1%
+ \nextSchluessel}
+\@namedef{Rechne*}#1 {%
+ \multiply\dimenA by #1%
+ \nextSchluessel}
+\def\ABS#1{\ifdim#1<0pt-#1\else#1\fi}
+% \end{macrocode}
+% Jetzt kommt das Makro, mit dem die Bema"sung ausgegeben wird. Die
+% Einstellungen aus |\Layoutbeschriftung| werden beachtet.
+% \begin{macrocode}
+\def\CUT#1{\edef\TMP{#1}%
+ \edef#1{\expandafter\MakeCUT\TMP.000*}}
+\def\MakeCUT#1.#2#3#4*{#1.#2#3}
+\def\Wert#1#2{\@Divide{#1}{\Einheit}{\dimenA}%
+ \removept{\dimenA}{#2}%
+ \CUT#2}
+\def\KonText#1{%
+ \def\Name{%
+ \ifToken\hbox{\footnotesize#1\vphantom{)}}%
+ \else
+ \ifTeXNamen\hbox{\footnotesize\char92#1\vphantom{)}}\fi
+ \fi}%
+ \ifWerte
+ \ifToken
+ \expandafter\HW\csname DIM#1\endcsname
+ \else
+ \expandafter\HW\csname #1\endcsname
+ \fi
+ \ifdim\HW>12pt\vbox\fi{\footnotesize
+ \Wert{\HW}{\Hw}%
+ \Name
+ \hbox{\ifToken~=~\else\ifTeXNamen~=~\fi\fi
+ \Hw
+ \if\EFaktor1\else\cdot\EFaktor\fi
+ \,\EMass\vphantom{(}}}%
+ \else
+ \Name
+ \fi}
+\def\KonPfeil #1 from #2 #3 to #4 #5 {{%
+ \ifdim#2=#4% vertikaler Pfeil
+ \ifdim#3=#5\else
+ \Rechne {#3} - {#5} -> {\dimen0}
+ \Rechne {\ABS{\dimen0}} -> {\dimen1} [\Hl]
+ \Rechne {0.5\dimen0} + {#5} -> {\dimen0} [\Hm]
+ \ifdim#5<#3%
+ \removept{#5}\Ha
+ \else
+ \removept{#3}\Ha
+ \fi
+ \removept{#2}\Hx
+ \put(\Hx,\Ha){\vector(0,1){\Hl}}
+ \put(\Hx,\Ha){\vector(0,-1){0}}
+ \put(\Hx,\Hm){\makebox(0,0)[l]{\fbox{\KonText{#1}}}}
+ \fi
+ \else % horizontaler Pfeil
+ \Rechne {#2} - {#4} -> {\dimen0}
+ \Rechne {\ABS{\dimen0}} -> {\dimen1} [\Hl]
+ \Rechne {0.5\dimen0} + {#4} -> {\dimen0} [\Hm]
+ \ifdim#4<#2%
+ \removept{#4}\Ha
+ \else
+ \removept{#2}\Ha
+ \fi
+ \removept{#3}\Hy
+ \put(\Ha,\Hy){\vector(1,0){\Hl}}
+ \put(\Ha,\Hy){\vector(-1,0){0}}
+ \put(\Hm,\Hy){\makebox(0,0)[t]{\fbox{\KonText{#1}}}}
+ \fi
+}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Nun zeichnen wir einfach eine \LaTeX-picture-Umgebung mit K"asten,
+% die die Layoutteile umranden. Hier k"onnen wir auch noch einige
+% Register allozieren.
+% \begin{macrocode}
+\newif\ifKopfinnen
+\newdimen\Skizze
+% \end{macrocode}
+% \begin{macro}{\Layoutskizze}
+% Das Layout soll sowohl formatf"ullend als auch klein in Abbildungen
+% dargestellt werden k"onnen. Die kleine Darstellung ruft man mit dem
+% Environment |Layoutskizze| auf. Der Verkleinerungsfaktor wird der
+% aktuellen Satzbreite angepa"st. Hier die Makros:
+% \begin{macrocode}
+\def\Layoutskizze{\@ifnextchar<{\Layoutmitmass}{\Layoutohne}}
+\def\Layoutohne{\leavevmode\hbox\bgroup
+ \Skizze=\linewidth\ignorespaces}
+\def\Layoutmitmass <#1> {\leavevmode\hbox\bgroup
+ \Skizze=#1\ignorespaces}
+\def\endLayoutskizze{%
+ \@Divide{\Skizze}{2\Papierbreite}{\Skizze}%
+ \removept{\Skizze}\MinFak
+ \mbox{\fboxrule=0.1pt\fboxsep=-\fboxrule
+ \topskip=0pt
+ \unitlength=\Skizze
+ \ifKopfinnen
+ \Rechne {\DIMOben} + {\DIMKAbstand} + {\DIMKHoehe}
+ -> {\dimen0}
+ \else
+ \dimen0=\DIMOben
+ \fi
+ \Pfeilefalse
+ \fbox{\c@page=2\Konstruktionsbild
+ \vbox to \MinFak\Papierhoehe
+ {\kern\MinFak\dimen0
+ \hbox to \MinFak\Papierbreite{%
+ \kern\MinFak\DIMAussen
+ \LayoutXX
+ \hss}\vss}}%
+ \fbox{\c@page=1\Konstruktionsbild
+ \vbox to \MinFak\Papierhoehe
+ {\kern\MinFak\dimen0
+ \hbox to \MinFak\Papierbreite{%
+ \kern\MinFak\DIMBund
+ \LayoutXX
+ \hss}\vss}}}%
+ \egroup}
+% \end{macrocode}
+% \end{macro}
+% Das Konstruktionsbild wird mit \PiCTeX\ realisiert. Das Bild darf
+% keine Ausma"se haben:
+% \begin{macrocode}
+\def\Konstruktionsbild{%
+ \ifKonstruktion
+ \beginpicture
+ \accountingoff
+ \setcoordinatesystem units <\unitlength,\unitlength>
+ \setplotarea x from 0 to 0, y from 0 to 0
+ \the\PiCKonstruktion
+ \endpicture
+ \fi}
+\newtoks\PiCKonstruktion \PiCKonstruktion={}
+% \end{macrocode}
+% Das gro"se Layout ist ganz einfach:
+% \begin{macrocode}
+\def\Layout{{\unitlength=1pt\LayoutXX}%
+ \thispagestyle{empty}}
+% \end{macrocode}
+% Jetzt kommt das eigentliche Makro, das die Zeichnung realisiert.
+% \begin{macrocode}
+\def\LayoutXX{\hbox{%
+ \removept{\topskip}\TOPSKIP
+ \begin{picture}(0,0)(0,-\TOPSKIP)
+ \ifKopfinnen
+ \KonKasten {\textwidth} {\headsep} [bl] at 0pt 0pt
+ \thicklines
+ \KonKasten {\textwidth} {\DIMSatzhoehe} [bl]
+ at {0pt} {-\textheight}
+ \else
+ \KonKasten {\textwidth} {\headheight} [bl] at 0pt {\headsep}
+ \thicklines
+ \KonKasten {\textwidth} {\textheight} [tl] at 0pt 0pt
+ \fi
+ \thinlines
+ \Rechne {-\textheight} - {\footskip} -> {\dimen2}
+ \KonKasten {\textwidth} {\headheight} [bl] at 0pt {\dimen2}
+ \ifPfeile
+ \fboxsep=1pt \fboxrule=0.1pt
+ \ifToken
+ \Rechne {\dimen2} + {\footskip} -> {\dimen2}
+ \KonPfeil {Satzbreite}
+ from {0pt} {-0.1\textheight}
+ to {\textwidth} {-0.1\textheight}
+ \ifKopfinnen
+ \Rechne {\headsep} + {\headheight} -> {\dimen2} [\Zpt]
+ \KonPfeil {Satzhoehe}
+ from {0.1\textwidth} {\dimen2}
+ to {0.1\textwidth} {-\textheight}
+ \else
+ \def\Zpt{0}%
+ \KonPfeil {Satzhoehe}
+ from {0.1\textwidth} {0pt}
+ to {0.1\textwidth} {-\textheight}
+ \fi
+ \KonPfeil {KAbstand}
+ from {0.2\textwidth} {0pt}
+ to {0.2\textwidth} {\headsep}
+ \Rechne {\headsep} + {\headheight} -> {\dimen2}
+ \KonPfeil {KHoehe}
+ from {0.3\textwidth} {\headsep}
+ to {0.3\textwidth} {\dimen2}
+ \Rechne {-\textheight} - {\footskip} -> {\dimen2}
+ \KonPfeil {FAbstand}
+ from {0.2\textwidth} {-\textheight}
+ to {0.2\textwidth} {\dimen2}
+ \Rechne {-\textheight} - {\DIMUnten} -> {\dimen3}
+ \KonPfeil {Unten}
+ from {0pt} {-\textheight} to {0pt} {\dimen3}
+ \ifKopfinnen
+ \Rechne {\topmargin} + {\voffset} + {1in}
+ + {\headheight} + {\headsep} -> {\dimen2}
+ \Rechne {\headheight} + {\headsep} -> {\dimen3}
+ \else
+ \dimen2 = \DIMOben
+ \dimen3 = 0pt
+ \fi
+ \KonPfeil {Oben}
+ from {0pt} {\dimen2} to {0pt} {\dimen3}
+ \ifodd\value{page}
+ \Rechne {-\oddsidemargin} - {\hoffset} - {1in} -> {\dimen2}
+ \KonPfeil {Bund}
+ from {\dimen2} {\Zpt pt} to {0pt} {\Zpt pt}
+ \Rechne {\textwidth} + {\DIMAussen} -> \dimen2
+ \KonPfeil {Aussen}
+ from {\textwidth} {\Zpt pt} to {\dimen2} {\Zpt pt}
+ \else
+ \Rechne {-\evensidemargin} - {\hoffset} - {1in} -> {\dimen2}
+ \KonPfeil {Aussen}
+ from {\dimen2} {\Zpt pt} to {0pt} {\Zpt pt}
+ \Rechne {\textwidth} + {\DIMBund} -> \dimen2
+ \KonPfeil {Bund}
+ from {\textwidth} {\Zpt pt} to {\dimen2} {\Zpt pt}
+ \fi
+ \fi
+ \fi
+ \end{picture}}}
+% \end{macrocode}
+%
+% \subsubsection{Papierformat}
+%
+% \begin{macro}{\PapierFormat}
+% F"ur die Konstruktionen mu"s das Papierformat bekannt sein. Man kann
+% DIN-Formate angeben, aber auch explizite L"angenangaben sind erlaubt.
+% \begin{macrocode}
+\let\EndPapierFormat\relax
+\let\EndPapierFormatEX\relax
+\def\PapierFormat{%
+ \@ifnextchar<{\let\EndPapierFormatEX\EndPapierFormat
+ \PapierFormatEX}{\PapierFormatDIN}}
+\let\Papierformat\PapierFormat
+\newdimen\Papierbreite \newdimen\Papierhoehe
+\def\PapierFormatEX<#1,#2> {%
+ \Papierbreite=#1\relax
+ \Papierhoehe=#2\relax
+ \EndPapierFormatEX}
+\def\WZwei{1.4142pt}
+\newcount\loopcount
+\def\PapierFormatDIN#1#2 {%
+ \if#1A\PapierFormatEX <841mm,1189mm>
+ \else
+ \if#1B\PapierFormatEX <1000mm,1414mm>
+ \else
+ \if#1C\PapierFormatEX <917mm,1297mm>
+ \else
+ \message{Warnung: Formatreihe #1 nicht definiert.}
+ \message{Benutze DIN-A-Reihe.}
+ \PapierFormatEX <841mm,1189mm>
+ \fi
+ \fi
+ \fi
+ \loopcount=#2\relax
+ \loop
+ \ifnum\loopcount>0
+ \@Divide{\Papierbreite}{\WZwei}{\Papierbreite}
+ \@Divide{\Papierhoehe}{\WZwei}{\Papierhoehe}
+ \advance\loopcount by -1
+ \repeat
+ \RoundmmInt\Papierbreite
+ \RoundmmInt\Papierhoehe
+ \Wert{\Papierbreite}\Ha \Wert{\Papierhoehe}\Hb
+ \message{DIN #1#2 berechnet zu <\Ha\EMass,\Hb\EMass>.}%
+ \EndPapierFormat}
+\PapierFormat <210mm,297mm>
+% \end{macrocode}
+% Nach der DIN-Norm wird nach der Berechnung das Format auf Millimeter
+% gerundet. Das geschieht durch das Makro |\RoundmmInt|. Der Summand
+% 0.5001 ist der Wert 0.5, der jedoch wegen der Integer-Rechnung von
+% \TeX\ etwas korrigiert werden mu"s. |\CUTG| schneidet auf ganze
+% Zahlen ab.
+% \begin{macrocode}
+\def\RoundmmInt#1{%
+ \@Divide{#1}{1mm}{\HW}%
+ \Rechne {\HW} + {0.0pt} -> {\HW}
+ \removept{\HW}\Hw
+ \CUTG\Hw
+ #1=\Hw mm}
+\def\CUTG#1{\edef\TMP{#1}%
+ \edef#1{\expandafter\MakeCUTG\TMP.000*}}
+\def\MakeCUTG#1.#2#3#4*{#1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\QuerFormat}
+% Das Umschalten auf Querformat ist ganz einfach, es wird nur die
+% Papierh"ohe mit der Papierbreite vertauscht:
+% \begin{macrocode}
+\def\QuerFormat{%
+ \dimen0=\Papierbreite
+ \Papierbreite=\Papierhoehe
+ \Papierhoehe=\dimen0}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Freie Einstellung der Parameter}
+%
+% \begin{macro}{\FreeStyle}
+% Die Konstruktionsmethoden bauen alle auf dem folgenden Befehl
+% auf. Mit |\FreeStyle| werden beliebige Werte gesetzt und
+% globale Einstellungen vorgenommen.
+%
+% Zuerst ben"otigen wir einige Register:
+% \begin{macrocode}
+\newdimen\DIMSatzbreite \newdimen\DIMSatzhoehe
+\newdimen\DIMBund \newdimen\DIMAussen
+\newdimen\DIMOben \newdimen\DIMUnten
+\newdimen\DIMKAbstand \newdimen\DIMKHoehe
+\newdimen\DIMFAbstand
+\newif\ifDoppelseite \Doppelseitefalse
+\newif\ifnoSB \newif\ifnoSH
+% \end{macrocode}
+% Jetzt folgen die Makros f"ur die Schl"usselworte.
+% \begin{macrocode}
+\def\FreeStyle{\NewOber{Free}%
+ \noSBtrue\noSHtrue
+ \DIMSatzbreite = \textwidth
+ \DIMSatzhoehe = \textheight
+ \ifKopfinnen
+ \Rechne {\DIMSatzhoehe} + {\headsep} + {\headheight}
+ -> {\DIMSatzhoehe}
+ \Rechne {1in} + {\topmargin} + {\voffset} -> {\DIMOben}
+ \else
+ \Rechne {1in} + {\topmargin} + {\voffset}
+ + {\headheight} + {\headsep} -> {\DIMOben}
+ \fi
+ \Rechne {1in} + {\hoffset} + {\oddsidemargin} -> {\DIMBund}
+ \Rechne {\Papierbreite} - {\DIMBund} - {\DIMSatzbreite}
+ -> {\DIMAussen}
+ \Rechne {\Papierhoehe} - {\DIMOben} - {\DIMSatzhoehe}
+ -> {\DIMUnten}
+ \DIMKAbstand = \headsep
+ \DIMKHoehe = \headheight
+ \DIMFAbstand = \footskip
+ \if@twoside\Doppelseitetrue\fi
+ \nextSchluessel}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\@namedef{Free/}{\OldOber{Free}%
+ \ifnoSB
+ \Rechne {\Papierbreite} - {\DIMBund} - {\DIMAussen}
+ -> {\DIMSatzbreite}
+ \fi
+ \textwidth = \DIMSatzbreite
+ \ifnoSH
+ \Rechne {\Papierhoehe} - {\DIMOben} - {\DIMUnten}
+ -> {\DIMSatzhoehe}
+ \fi
+ \textheight = \DIMSatzhoehe
+ \headheight\DIMKHoehe
+ \headsep\DIMKAbstand
+ \footskip\DIMFAbstand
+ \voffset=0pt\hoffset=0pt
+ \Rechne {\DIMBund} - {1in} -> {\oddsidemargin}
+ \Rechne {\DIMAussen} - {1in} -> {\evensidemargin}
+ \ifKopfinnen
+ \Rechne {\DIMSatzhoehe} - {\headsep} - {\headheight}
+ -> {\textheight}
+ \Rechne {\DIMOben} - {1in} -> {\topmargin}
+ \else
+ \textheight = \DIMSatzhoehe
+ \Rechne {\DIMOben} - {\headsep} - {\headheight} - {1in}
+ -> {\topmargin}
+ \fi
+ \ifDoppelseite
+ \@twosidetrue\@mparswitchtrue
+ \ifx\KopfTextlinks\Pempty\else
+ \def\@evenhead{\KopfTextlinks}%
+ \fi
+ \ifx\FussTextlinks\Pempty\else
+ \def\@evenfoot{\FussTextlinks}%
+ \fi
+ \else
+ \@twosidefalse\@mparswitchfalse
+ \fi
+ \ifx\KopfTextrechts\Pempty\else
+ \def\@oddhead{\KopfTextrechts}%
+ \fi
+ \ifx\FussTextrechts\Pempty\else
+ \def\@oddfoot{\FussTextrechts}%
+ \fi
+}
+\def\Pempty{.}
+\def\KopfTextlinks{.}
+\def\KopfTextrechts{.}
+\def\FussTextlinks{.}
+\def\FussTextrechts{.}
+\def\FreeDoppelseite{\Doppelseitetrue
+ \nextSchluessel}
+\def\FreeEinfachseite{\Doppelseitefalse
+ \nextSchluessel}
+\def\FreeSatzbreite <#1> {\DIMSatzbreite=#1%
+ \noSBfalse
+ \nextSchluessel}
+\def\FreeSatzhoehe <#1> {\DIMSatzhoehe=#1%
+ \noSHfalse
+ \nextSchluessel}
+\def\FreeBund <#1> {\DIMBund=#1%
+ \nextSchluessel}
+\def\FreeAussen <#1> {\DIMAussen=#1%
+ \nextSchluessel}
+\def\FreeOben <#1> {\DIMOben=#1%
+ \nextSchluessel}
+\def\FreeUnten <#1> {\DIMUnten=#1%
+ \nextSchluessel}
+\def\FreeKopfzeile{\NewOber{FreeKopf}%
+ \nextSchluessel}
+\@namedef{FreeKopf/}{\OldOber{FreeKopf}%
+ \nextSchluessel}
+\def\FreeKopflebend{\Kopfinnentrue
+ \nextSchluessel}
+\def\FreeKopftot{\Kopfinnenfalse
+ \nextSchluessel}
+\def\FreeKopfHoehe <#1> {\DIMKHoehe#1
+ \nextSchluessel}
+\def\FreeKopfAbstand <#1> {\DIMKAbstand#1
+ \nextSchluessel}
+\def\FreeKopfText{%
+ \ifDoppelseite
+ \let\next\KTextzwei
+ \else
+ \let\next\KTexteins
+ \fi\next}
+\def\KTexteins #1 {\def\KopfTextrechts{{#1}}%
+ \nextSchluessel}
+\def\KTextzwei #1 #2 {\def\KopfTextlinks{{#1}}%
+ \def\KopfTextrechts{{#2}}%
+ \nextSchluessel}
+\def\FreeFusszeile{\NewOber{FreeFuss}%
+ \nextSchluessel}
+\@namedef{FreeFuss/}{\OldOber{FreeFuss}%
+ \nextSchluessel}
+\def\FreeFussAbstand <#1> {\DIMFAbstand#1
+ \nextSchluessel}
+\def\FreeFussText{%
+ \ifDoppelseite
+ \let\next\FTextzwei
+ \else
+ \let\next\FTexteins
+ \fi\next}
+\def\FTexteins #1 {\def\FussTextrechts{{#1}}%
+ \nextSchluessel}
+\def\FTextzwei #1 #2 {\def\FussTextlinks{{#1}}%
+ \def\FussTextrechts{{#2}}%
+ \nextSchluessel}
+% \end{macrocode}
+%
+% \subsection{Korrektur voreingestellter Werte}
+%
+% An dieser Stelle wiederholen sich in etwa die Makros aus dem
+% vorangegangenen Abschnitt. Die Zuweiseungen sind jedoch Additionen.
+% Die Kopf- und Fu"szeilen-Textfestlegung ist in |\KorrStyle| nicht
+% vorgesehen. Man kann ja |\FreeStyle| dazu benutzen.
+% \begin{macrocode}
+\def\KorrStyle{\NewOber{Korr}%
+ \DIMSatzbreite = \textwidth
+ \DIMSatzhoehe = \textheight
+ \ifKopfinnen
+ \Rechne {\DIMSatzhoehe} + {\headsep} + {\headheight}
+ -> {\DIMSatzhoehe}
+ \Rechne {1in} + {\topmargin} + {\voffset} -> {\DIMOben}
+ \else
+ \Rechne {1in} + {\topmargin} + {\voffset}
+ + {\headheight} + {\headsep} -> {\DIMOben}
+ \fi
+ \Rechne {1in} + {\hoffset} + {\oddsidemargin} -> {\DIMBund}
+ \Rechne {\Papierbreite} - {\DIMBund} - {\DIMSatzbreite}
+ -> {\DIMAussen}
+ \Rechne {\Papierhoehe} - {\DIMOben} - {\DIMSatzhoehe}
+ -> {\DIMUnten}
+ \DIMKAbstand\headsep
+ \DIMKHoehe\headheight
+ \DIMFAbstand\footskip
+ \if@twoside\Doppelseitetrue\fi
+ \nextSchluessel}
+\@namedef{Korr/}{\OldOber{Korr}%
+ \textwidth\DIMSatzbreite
+ \headheight\DIMKHoehe
+ \headsep\DIMKAbstand
+ \footskip\DIMFAbstand
+ \voffset=0pt \hoffset=0pt
+ \Rechne {\DIMBund} - {1in} -> {\oddsidemargin}
+ \Rechne {\DIMAussen} - {1in} -> {\evensidemargin}
+ \ifKopfinnen
+ \Rechne {\DIMSatzhoehe} - {\headsep} - {\headheight}
+ -> {\textheight}
+ \Rechne {\DIMOben} - {1in} -> {\topmargin}
+ \else
+ \textheight = \DIMSatzhoehe
+ \Rechne {\DIMOben} - {\headsep} - {\headheight} - {1in}
+ -> {\topmargin}
+ \fi
+ \ifDoppelseite
+ \@twosidetrue\@mparswitchtrue
+ \fi
+}
+\def\KorrDoppelseite{\Doppelseitetrue
+ \nextSchluessel}
+\def\KorrEinfachseite{\Doppelseitefalse
+ \nextSchluessel}
+\def\KorrSatzbreite <#1> {\advance \DIMSatzbreite by #1%
+ \nextSchluessel}
+\def\KorrSatzhoehe <#1> {\advance \DIMSatzhoehe by #1%
+ \nextSchluessel}
+\def\KorrBund <#1> {\advance \DIMBund by #1%
+ \nextSchluessel}
+\def\KorrAussen <#1> {\advance \DIMAussen by #1%
+ \nextSchluessel}
+\def\KorrOben <#1> {\advance \DIMOben by #1%
+ \nextSchluessel}
+\def\KorrUnten <#1> {\advance \DIMUnten by #1%
+ \nextSchluessel}
+\def\KorrKopfzeile{\NewOber{KorrKopf}%
+ \nextSchluessel}
+\@namedef{KorrKopf/}{\OldOber{KorrKopf}%
+ \nextSchluessel}
+\def\KorrKopflebend{\Kopfinnentrue
+ \nextSchluessel}
+\def\KorrKopftot{\Kopfinnenfalse
+ \nextSchluessel}
+\def\KorrKopfHoehe <#1> {\advance \DIMKHoehe by #1
+ \nextSchluessel}
+\def\KorrKopfAbstand <#1> {\advance \DIMKAbstand by #1
+ \nextSchluessel}
+\def\KorrFusszeile{\NewOber{KorrFuss}%
+ \nextSchluessel}
+\@namedef{KorrFuss/}{\OldOber{KorrFuss}%
+ \nextSchluessel}
+\def\KorrFussAbstand <#1> {\advance \DIMFAbstand by #1
+ \nextSchluessel}
+% \end{macrocode}
+%
+% \subsection{Konstruktionsmethoden}
+%
+% Um dem Anwender nun aber wirklich das Leben zu erleichtern, werden
+% einige Konstruktionsmethoden hier schon implementiert. Ihre Ergebnisse
+% k"onnen dan immer noch mit |\KorrStyle| korrigiert bzw. angepa"st
+% werden. Wichtig ist, da"s dem Benutzer verschiedene Layouts an die
+% Hand gegeben werden, die ohne Aufwand mit \TeX\ realisiert werden
+% k"onnen. Bevor diese Konstruktionsmethoden aufgerufen werden k"onnen,
+% mu"s das Papierformat definiert worden sein.
+%
+% \subsubsection{"Ahnlichkeitskonstruktion}
+%
+% Die Basis ist eine vom Benutzer zu w"ahlende Satzbreite. Davon
+% ausgehend wird dann ein zum Papierformat "ahnliches Rechteck als
+% Satzspiegel konstruiert. Die R"ander werden im Verh"altnis des
+% goldenen Schnitts ($1:1.618$) verteilt.
+% \begin{macrocode}
+\def\Aehnlichkeitskonstruktion <#1> {%
+ \@Divide{\Papierhoehe}{\Papierbreite}{\HW}%
+ \removept{\HW}\Hf
+ \DIMSatzbreite=#1\relax
+ \DIMSatzhoehe=\Hf\DIMSatzbreite
+ \Rechne {\Papierbreite} - {\DIMSatzbreite} -> {\HW}
+ \DIMAussen = 0.618\HW \DIMBund = 0.382\HW
+ \Rechne {\Papierhoehe} - {\DIMSatzhoehe} -> {\HW}
+ \DIMUnten = 0.618\HW \DIMOben = 0.382\HW
+ \WerteRealisieren}
+% \end{macrocode}
+% Die Festlegung der \TeX-Werte kann man sich nun aus dem |\FreeStyle|
+% borgen, genauer aus dem Makro |\Free/|. Zum Ende der Konstruktion
+% wird dann noch eine Plausibilit"atspr"ufung durchgef"uhrt, um den
+% Benutzer vor merkw"urdigen Werten zu warnen.
+% \begin{macrocode}
+\def\WW#1{\Wert{\csname DIM#1\endcsname}{\HH}%
+ \message{(#1:\HH)}}
+\def\WerteRealisieren{%
+ \Plausibilitaet%
+ \DIMKAbstand=1\baselineskip
+ \DIMKHoehe=1\baselineskip
+ \DIMFAbstand=2\baselineskip
+ \Kopfinnentrue
+ \NewOber{Korr}%
+ \csname Korr/\endcsname}
+% \end{macrocode}
+%
+% Die Plausibilit"atspr"ufung wird gleich anschlie"send programmiert. Sie
+% ist recht einfach nachzuvollziehen.
+% \begin{macrocode}
+\def\Plausibilitaet{%
+ \ifdim\DIMSatzbreite<0.6\Papierbreite
+ \KonWarn{Die Satzbreite ist ziemlich klein.}%
+ \fi
+ \ifdim\DIMSatzbreite>0.8\Papierbreite
+ \KonWarn{Die Satzbreite ist ziemlich gross.}%
+ \fi
+ \ifdim\DIMBund<15mm
+ \KonWarn{Der Bundsteg ist sehr klein ausgefallen.}%
+ \fi
+ \ifdim\Rcount=1234pt\else
+ \ifdim\Rcount<5pt
+ \removept{\Rcount}\RCount
+ \KonWarn{Rasterteilung zu grob (\RCount).}%
+ \fi
+ \ifdim\Rcount>12pt
+ \removept{\Rcount}\RCount
+ \KonWarn{Rasterteilung zu fein (\RCount).}%
+ \fi
+ \fi}
+\def\KonWarn#1{\message{Layout Warnung: #1}}
+% \end{macrocode}
+%
+% \subsubsection{Renaissance-Verteilung}
+%
+% Bei der Renaissance-Verteilun werden die R"ander im Verh"altnis
+% $2:3:4:5$ aufgeteilt. Die Satzbreite wird vorgegeben.
+%
+% \begin{macrocode}
+\def\Renaissancekonstruktion <#1> {%
+ \DIMSatzbreite=#1\relax
+ \Rechne {\Papierbreite} - {\DIMSatzbreite} -> {\HW}
+ \divide\HW by 6
+ \DIMBund=2\HW \DIMAussen=4\HW \DIMOben=3\HW \DIMUnten=5\HW
+ \Rechne {\Papierhoehe} - {\DIMOben} - {\DIMUnten}
+ -> {\DIMSatzhoehe}
+ \WerteRealisieren}
+% \end{macrocode}
+%
+% \subsubsection{Rasterkonstruktion}
+%
+% Die allgemeine Rasterkonstruktion geht von einer rasterartigen
+% Aufteilung der Seite auf. Die R"ander werden dann im Verh"altnis
+% $1:2$ besetzt.
+% \begin{macrocode}
+\newdimen\Rcount \Rcount=1234pt
+\def\Rasterkonstruktion #1 {\Rcount=#1pt%
+ \advance\Rcount by -3pt%
+ \removept{\Rcount}\RCount
+ \@Divide{\Papierbreite}{#1pt}{\HW}%
+ \DIMSatzbreite=\RCount\HW
+ \@Divide{\Papierhoehe}{\Papierbreite}{\HW}%
+ \removept{\HW}\Hw
+ \DIMSatzhoehe=\Hw\DIMSatzbreite
+ \@Divide{\Papierbreite}{#1pt}{\HW}%
+ \DIMBund=1\HW
+ \DIMAussen=2\HW
+ \edef\RasterWeiteB{\the\HW}%
+ \@Divide{\Papierhoehe}{#1pt}{\HW}%
+ \DIMOben=1\HW
+ \DIMUnten=2\HW
+ \edef\RasterWeiteH{\the\HW}%
+ \Rcount=#1pt%
+ \WerteRealisieren
+% \end{macrocode}
+% Nun wird noch die Konstruktionsmethode als \PiCTeX-Eingabe festgelegt,
+% damit sie bei der Satzspiegelzeichnung mit eingebaut werden kann:
+% \begin{macrocode}
+ \PiCKonstruktion={%
+ \removept{\Papierbreite}\Pb
+ \removept{\Papierhoehe}\Ph
+ \dimen0\Rcount\removept{\Rcount}\RC
+ \edef\RC{\expandafter\MakeCUTG\RC.000*}%
+ \expandafter\HW\RC pt
+ \ifdim\Rcount=\HW
+ \accountingoff
+ \put {\beginpicture
+ \setplotarea x from 0 to {\Pb}, y from 0 to {\Ph}
+ \accountingoff
+ \linethickness=0.1pt
+ \grid {\RC} {\RC}
+ \endpicture} [Bl] at 0 0
+ \fi}}
+% \end{macrocode}
+%
+% \subsubsection{Diagonalkonstruktion}
+%
+% Das Diagonalverfahren ist ein Rasterverfahren mit ggf.
+% nichtganzzahliger Rasterzahl. Die Berechnung erfolgt nach
+% der gew"unschten Satzbreite
+% \begin{macrocode}
+\def\Diagonalkonstruktion <#1> {\DIMSatzbreite=#1
+ \Rechne {0.33333\Papierbreite} - {0.33333\DIMSatzbreite} -> {\HW}
+ \@Divide{\Papierbreite}{\HW}{\Rcount}%
+ \removept{\Rcount}\RCOunt
+ \Rasterkonstruktion {\RCOunt}
+% \end{macrocode}
+% Auch hier kommt noch die Konstruktionsmethode:
+% \begin{macrocode}
+ \PiCKonstruktion={%
+ \removept{\Papierbreite}{\Pb}%
+ \removept{\Papierhoehe}{\Ph}%
+ \removept{0.5\Papierhoehe}{\Phh}%
+ \ifodd\value{page}%
+ \plot {\Pb} 0 0 {\Ph} /
+ \plot {\Pb} 0 0 {\Phh} {\Pb} {\Ph} /
+ \else
+ \plot 0 {\Ph} {\Pb} {\Phh} 0 0 /
+ \plot 0 0 {\Pb} {\Ph} /
+ \fi}}
+% \end{macrocode}
+%
+% \subsubsection{Goldener Schnitt}
+%
+% Der Konstruktion zum Goldenen Schnitt ist noch einfacher zu
+% programmieren. Sie hat den Vorteil, da"s zus"atzlich zu den R"andern
+% auch der Satzspiegel zum Papierformat im Goldenen Schnitt steht.
+% Es handelt sich einfach um die Rasterkonstruktion mit Rasterwert~9.
+% \begin{macrocode}
+\def\GoldenerSchnitt{%
+ \Rasterkonstruktion 9
+% \end{macrocode}
+% Die Konstruktionsmethode wird jedoch wie bei der Diagonalkonstruktion
+% mit einer Zusatzkonstruktion gezeichnet.
+% \begin{macrocode}
+ \PiCKonstruktion={%
+ \removept{\Papierbreite}{\Pb}%
+ \removept{\Papierhoehe}{\Ph}%
+ \removept{0.5\Papierhoehe}{\Phh}%
+ \removept{0.3333\Papierbreite}{\Pbd}%
+ \removept{0.6667\Papierbreite}{\Pbdd}%
+ \removept{0.6667\Papierhoehe}{\Phs}%
+ \removept{0.8333\Papierhoehe}{\Phss}%
+ \ifodd\value{page}%
+ \plot {\Pb} 0 0 {\Ph} /
+ \plot {\Pb} 0 0 {\Phh} {\Pb} {\Ph} /
+ \plot {\Pbd} {\Phs} {\Pbd} {\Ph} /
+ \plot {\Pbd} {\Ph} 0 {\Phss} /
+ \else
+ \plot 0 {\Ph} {\Pb} {\Phh} 0 0 /
+ \plot 0 0 {\Pb} {\Ph} /
+ \plot {\Pbdd} {\Phs} {\Pb} {\Phss} /
+ \fi}}
+% \end{macrocode}
+%
+% \subsubsection{Silberner Schnitt}
+%
+% Da wir bei der Konstruktion des Goldenen Schnitts eigentlich gar nicht
+% so recht wissen, was hier eigentlich im Verh"altnis des Goldenen
+% Schnitts stehen soll, kommt hier ein etwas abgewandeltes Verfahren.
+% Damit steht die Satzbreite (Satzh"ohe) zur Papierbreite (Papierh"ohe)
+% etwa im richtigen Verh"altnis ($3:5$).
+% \begin{macrocode}
+\def\SilbernerSchnitt{%
+ \Rasterkonstruktion 8
+% \end{macrocode}
+% Die Konstruktionsmethode ist fast die des Goldenen Schnitts:
+% \begin{macrocode}
+ \PiCKonstruktion={%
+ \removept{\Papierbreite}{\Pb}%
+ \removept{\Papierhoehe}{\Ph}%
+ \removept{0.5\Papierhoehe}{\Phh}%
+ \removept{0.3333\Papierbreite}{\Pbd}%
+ \removept{0.5\Papierbreite}{\Pbh}%
+ \removept{0.6667\Papierhoehe}{\Phs}%
+ \ifodd\value{page}%
+ \plot {\Pb} 0 0 {\Ph} /
+ \plot {\Pb} 0 0 {\Phh} {\Pb} {\Ph} /
+ \plot {\Pbd} {\Phs} {\Pbd} {\Ph} /
+ \plot {\Pbd} {\Ph} {-\Pbh} {\Phh} /
+ \else
+ \plot 0 {\Ph} {\Pb} {\Phh} 0 0 /
+ \plot 0 0 {\Pb} {\Ph} /
+ \plot 0 {\Ph} {\Pb} 0 /
+ \fi}}
+% \end{macrocode}
+%
+% \subsection{Fertige Layouts}
+%
+% Die fertigen Layouts werden auf den Originalkonstruktionen aufgebaut.
+% Dann werden die Werte entsprechend ge"andert.
+% \changes{v1.0f}{93/05/13}{{\tt`FertigLayout} {\tt`fi} erg"anzt.}
+% \begin{macrocode}
+\def\FertigLayout #1 {%
+ \expandafter\ifx\csname Fertig#1\endcsname\undefined
+ \message{Layout Warnung: Das fertige Layout #1 existiert nicht.}%
+ \else
+ \csname Fertig#1\endcsname
+ \fi}
+\@namedef{Fertig12A}{\Rasterkonstruktion 12 }
+\@namedef{Fertig12B}{\Rasterkonstruktion 12
+ \dimen0=\RasterWeiteB \dimen1=\RasterWeiteH
+ \Rechne {\DIMSatzbreite} - {\dimen0} -> {\DIMSatzbreite}
+ \Rechne {\DIMSatzhoehe} - {\dimen1} -> {\DIMSatzhoehe}
+ \DIMBund=1.5\dimen0 \DIMAussen=2.5\dimen0
+ \DIMOben=1.5\dimen1 \DIMUnten=2.5\dimen1
+ \WerteRealisieren}
+\@namedef{Fertig12C}{\Rasterkonstruktion 12
+ \dimen0=\RasterWeiteB \dimen1=\RasterWeiteH
+ \DIMOben=\dimen1 \DIMUnten=2\dimen1
+ \DIMBund=2\dimen0 \DIMAussen=2\dimen0
+ \DIMSatzbreite=8\dimen0 \DIMSatzhoehe=9\dimen1
+ \WerteRealisieren}
+\@namedef{Fertig10A}{\Rasterkonstruktion 10 }
+\@namedef{Fertig10B}{\Rasterkonstruktion 10
+ \Rechne {\DIMBund} + {\RasterWeiteB} -> {\DIMBund}
+ \Rechne {\DIMSatzbreite} - {\RasterWeiteB} -> {\DIMSatzbreite}
+ \WerteRealisieren}
+\@namedef{Fertig10C}{\Rasterkonstruktion 10
+ \dimen0=\RasterWeiteB
+ \Rechne {\DIMBund} + {0.5\dimen0} -> {\DIMBund}
+ \Rechne {\DIMSatzbreite} - {0.5\dimen0} -> {\DIMSatzbreite}
+ \WerteRealisieren}
+\@namedef{Fertig8A}{\Rasterkonstruktion 8 }
+\@namedef{Fertig7A}{\Rasterkonstruktion 7 }
+% \end{macrocode}
+%
+% \subsection{Wenn man fast alles auf eine Seite bekommen will\ldots}
+% F"ur Seiten, die einen m"oglichst gro"sen Satzspiegel erhalten sollen,
+% gibt es den folgenden Befehl:
+% \begin{macrocode}
+\def\MaximalSeite{%
+ \FreeStyle Einfachseite
+ Oben <15mm>
+ Unten <20mm>
+ Bund <20mm>
+ Aussen <10mm>
+ Fusszeile Abstand <8mm>
+ Text {\hfil--\,\thepage\,--\hfil} /
+ Kopfzeile tot
+ Hoehe <0mm>
+ Abstand <0mm>
+ Text {\hfil} /
+ /
+}
+% \end{macrocode}
+%
+% Die Schnittmarken bestehen aus $+$-Zeichen, die mittels Kerning und
+% leeren Boxen an die richtigen Stellen positioniert werden. Mittels
+% \verb+\clearpage+ wird ggf. am Anfang eine neue Seite erzeugt. Hierdurch
+% ist garantiert, da"s das Makro nur am Seitenanfang aufgerufen wird.
+% \begin{macrocode}
+\def\@SPunkt{\vbox to 0pt{\vss\hbox to 0pt{\hss+\hss}\vss}}
+\def\@SDot{\vbox to 0pt{\vss\hbox to 0pt{\hss.\hss}\vss}}
+\def\SchnittMarken{\clearpage{\offinterlineskip%
+ \vbox to 0pt{\kern-\DIMOben
+ \ifKopfinnen\else
+ \kern-\headsep\kern-\headheight
+ \fi
+ \hbox to 0pt{\kern-\DIMBund\@SPunkt
+ \kern0.5\Papierbreite
+ \@SDot
+ \kern0.5\Papierbreite
+ \@SPunkt\hss}%
+ \kern0.5\Papierhoehe
+ \hbox to 0pt{\kern-\DIMBund\@SDot
+ \kern\Papierbreite\@SDot\hss}%
+ \kern0.5\Papierhoehe
+ \hbox to 0pt{\kern-\DIMBund\@SPunkt
+ \kern0.5\Papierbreite
+ \@SDot
+ \kern0.5\Papierbreite
+ \@SPunkt\hss}%
+ \vss}}}
+% \end{macrocode}
+%
+% \subsection{Zentrieren auf dem Druckformat}
+%
+% \begin{macro}{\Zentriert}
+% Mittels \verb+\Zentriert auf+ kann das erstellte Layout auf das
+% angegebene Druckformat zentriert werden. Normalerweise steht es
+% ja in der linken oberen Ecke. Es werden die Differenzen zwischen
+% dem bestehenden und dem angegebenen Format berechnet. Entsprechend
+% werden dann \verb+\hoffset+ und \verb+\voffset+ erh"oht.
+% \begin{macrocode}
+\def\Zentriert auf {\bgroup\let\EndPapierFormat\EndZentriert
+ \edef\PB@{\the\Papierbreite}%
+ \edef\PH@{\the\Papierhoehe}%
+ \def\message##1{}%
+ \PapierFormat}
+\def\EndZentriert{%
+ \advance\Papierbreite by -\PB@
+ \advance\Papierhoehe by -\PH@
+ \Papierhoehe=0.5\Papierhoehe
+ \Papierbreite=0.5\Papierbreite
+ \typeout{Verschoben um (\the\Papierbreite,\the\Papierhoehe).}%
+ \global\advance\hoffset by \Papierbreite
+ \global\advance\voffset by \Papierhoehe
+ \egroup}
+% \end{macrocode}
+% \end{macro}
+%
+%
+\endinput
diff --git a/macros/latex209/contrib/konstruk/layout.tex b/macros/latex209/contrib/konstruk/layout.tex
new file mode 100644
index 0000000000..95a2575b9b
--- /dev/null
+++ b/macros/latex209/contrib/konstruk/layout.tex
@@ -0,0 +1,401 @@
+\documentstyle[german,pictex,stamm,floats,konstruk]{article}
+
+\Thema{Seitenlayout mit \TeX}
+\Nr{6}
+\Datum{14.1.93}
+
+\Papierformat A4
+\Layoutbeschriftung Werte Konstruktion /
+
+\long\def\@makecaption#1#2{%
+ \vskip -10pt
+ \setbox\@tempboxa\hbox{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ #1: #2\par
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi}
+
+\def\It#1{{\it #1\/}}
+\def\Bruch#1#2{\vphantom{/}^{#1}\!/\!_{#2}}
+
+\begin{document}
+{\bf Einleitung}
+\begin{itemize}
+\item Aufgaben der Typografie: Typografie unterst"utzt die beabsichtigte
+Kommunikationswirkung des Druckprodukts durch "asthetische Gestaltung.
+Typografie ist \It{kreative} Informationsaufbereitung, wobei wir im
+Hinterkopf immer den Inhalt behalten m"ussen. Fachtexte unterliegen
+anderen Regeln als z.\,B. Werbetexte, weil ihre Inhalte "`schwer
+verdaulich"' sind. Sie sollen deshalb "ubersichtlich und optimal lesbar
+gestaltet sein. Die oben angesprochenen Werbetexte haben appellativen
+Charakter und m"ussen den Leser auf sich aufmerksam machen, in das
+Bewu"stsein des Lesers eindringen.
+\item Typografie ist:
+ \begin{itemize}
+ \item optimale Auswahl und Anwendung der Schrift (hierunter fallen
+ typografische Regeln und die korrekte Handhabung von Sonderzeichen
+ etc.),
+ \item die Anordnung der Schrift zu einer Satzseite,
+ \item die Fl"acheneinteilung zu einer Druckseite.
+ \end{itemize}
+\item Wesentliche Grundparameter, die kaum beeinflu"sbar sind, weil es
+me"s- und z"ahlbare Gr"o"sen sind, die im Rechner bzw. bei \TeX\
+voreingestellt sind:
+ \begin{itemize}
+ \item Grundschrift, "Uberschrift, Abst"ande,
+ \item Trennungen,
+ \item kritischen Zeichenkombinationen (z.\,B. Ta, Te, We etc.),
+ \item Laufweite,
+ \item Schriftgr"o"sen,
+ \item Schriftwahl (wird von \TeX\ vorgeschlagen: Times-"ahnlich gut,
+ Sans-Serif schlecht, wenig Auswahlm"oglichkeiten),
+ \item Wortabstand
+ \end{itemize}
+\item Wesentliche Grundparameter, die weitestgehend frei w"ahlbar sind
+(Kreativit"at):
+ \begin{itemize}
+ \item Papierformat (vom Verfasser meist auf DIN\,A\,4 festgelegt),
+ \item Fl"achenaufteilung (Satzspiegel),
+ \item optischer Zeilenabstand, Durchschu"s,
+ \item Bedruckstoff (Grammatur, Farbigkeit),
+ \item Grafiken,
+ \item Farbe,
+ \item Schmuckelemente (bei Fachtexten nur bedingt einzusetzen),
+ \item Falzungen
+ \end{itemize}
+\end{itemize}
+
+{\bf Fl"achenaufteilung}
+
+Hierzu z"ahlen die ersten beiden Punkte der obigen Aufz"ahlung, n"amlich die
+Wahl des Papierformates und die Wahl des Satzspiegels.
+\begin{itemize}
+\item Wahl des Papierformates: meistgebr"auchliches Format ist DIN\,A\,4
+($210\times297$\,mm). Die g"angigen Formate werden aus der DIN\,A-Reihe
+abgeleitet, die sich jeweils durch halbieren der l"angeren Seite ergeben:
+\[\begin{tabular}{lr@{${}\times{}$}r@{\,mm}}
+DIN\,A\,0&841&1189\\
+DIN\,A\,1&594&841\\
+DIN\,A\,2&420&594\\
+DIN\,A\,3&297&420\\
+DIN\,A\,4&210&297\\
+DIN\,A\,5&148&210\\
+DIN\,A\,6&105&148\\
+DIN\,A\,7&74&105
+\end{tabular}\]
+Die Papierbreite steht bei allen DIN\,A-Formaten zur Papierh"ohe im
+Verh"altnis $1:\sqrt2$.
+
+\item Es gibt mehrere M"oglichkeiten, den Satzspiegel zu ermitteln:
+Die folgenden Methoden arbeiten alle mit "ahnlichen Rechtecken, d.\,h.,
+da"s die Satzbreite zur -h"ohe im gleichen Verh"altnis steht wie die
+Papierbreite zur -h"ohe.
+ \begin{figure}
+ \[ \beginpicture
+ \small
+ \setcoordinatesystem units <0.35mm,0.35mm>
+ \setplotarea x from 0 to 210, y from 0 to 297
+ \grid 1 1
+ \plot 0 0 210 297 /
+ \putrule from 0 178 to 126 178
+ \putrule from 126 178 to 126 0
+ \putrule from 0 238 to 168 238
+ \putrule from 168 238 to 168 0
+ \betweenarrows {min 126\,mm} <0mm,3mm> from 0 178 to 126 178
+ \betweenarrows {\lines{min\cr 178\,mm}} <6mm,0mm>
+ from 126 178 to 126 0
+ \betweenarrows {max 168\,mm} <0mm,3mm> from 0 238 to 168 238
+ \betweenarrows {\lines{max\cr 238\,mm}} <6mm,0mm>
+ from 168 238 to 168 0
+ \endpicture
+\]
+ \caption{Grafische Ermittlung der Satzh"ohe\label{Aehn}}
+ \end{figure}
+ \begin{enumerate}
+ \item Bei der ersten Methode (\verb|\Aehnlichkeitskonstruktion|) mu"s
+ eine Satzbreite festgelegt werden, die mindestens ca. $\Bruch35$ und
+ h"ochstens ca. $\Bruch45$ der Papierbreite betr"agt. Die Satzh"ohe kann
+ dann grafisch (Abbildung~\ref{Aehn}) oder rechnerisch ermittelt werden
+ (Multiplikation mit $\sqrt2$). Das ergibt f"ur DIN\,A\,4 folgende Werte:
+
+ Bei einer Papierbreite von 210\,mm betr"agt die Satzbreite mindestens
+ 126\,mm. Die Satzh"ohe errechnet sich dann zu 178\,mm.
+
+ Die maximale Satzbreite ist 168\,mm, die maximale Satzh"ohe ist 238\,mm.
+
+ Die Differenz zwischen Satzbreite und Papierbreite und Satzh"ohe und
+ Papierh"ohe kann dann als R"ander im Aufteilungsverh"altnis $3:5$ oder
+ $1:1{,}618$ (genau) nach folgendem Schema verteilt werden:
+
+ 3 Teile im Bund (also links vom Satzspiegel) und am Kopf (oben)
+
+ 5 Teile au"sen (rechts vom Satzspiegel) und am Fu"s (unten).
+
+ Welche Satzformate sich dann ergeben, zeigt die
+ Abbildung~\ref{Aehnminmax}.
+ \begin{figure}
+ \begin{center}
+\mbox{\begin{Layoutskizze} <0.5\linewidth>
+ \Aehnlichkeitskonstruktion <126mm>
+ \end{Layoutskizze}%
+ \begin{Layoutskizze} <0.5\linewidth>
+ \Aehnlichkeitskonstruktion <168mm>
+ \end{Layoutskizze}}
+ \end{center}
+ \caption{Minimal- und Maximalformat\label{Aehnminmax}}
+ \end{figure}
+
+ \item Die \verb|\Diagonalkonstruktion| arbeitet auch mit "ahnlichen
+ Rechtecken. Dazu tr"agt man auf der DIN\,A\,4-Diagonalen und der
+ DIN\,A\,3-Diagonalen die gew"unschte Satzbreite ab und erh"alt grafisch
+ die Satzh"ohe mit allen Papierr"andern. Bei dieser Methode mu"s allerdings
+ vorher eine Satzbreite feststehen. Diese Art der Satzspiegelfestlegung
+ eignet sich gut f"ur die Gestaltung von Doppelseiten (Abb.~\ref{Diag}).
+ \begin{figure}
+ \begin{Layoutskizze}
+ \Diagonalkonstruktion <90mm>
+ \end{Layoutskizze}
+ \caption{Diagonalkonstruktion mit 90\,mm Satzbreite\label{Diag}}
+ \end{figure}
+
+ \item Das dritte Verfahren wird in der Fachliteratur als Methode nach
+ den Proportionen des Goldenen Schnitts gef"uhrt. Der Goldene Schnitt ist
+ eine Teilung, durch die eine Strecke in 2 ungleiche Abschnitte
+ gegliedert wird, deren Gr"o"senverh"altnis harmonisch wirkt.
+
+ Minor : Major = Major : Gesamtstrecke = 1 : 1,618.
+
+ Zugrundegelegt wird die Lam\'esche Zahlenreihe (jede Zahl ist die Summe
+ der beiden vorangehenden Zahlen: $1, 1, 2, 3, 5, 8, 13,\dots$).
+
+ Das Layout basiert auf der oben aufgef"uhrten Diagonalkonstruktion,
+ erweitert um eine Zusatzkonstruktion, die nur eine bestimmte Satzbreite
+ zul"a"st (Abbildung~\ref{Golden}).
+ \begin{figure}
+ \begin{Layoutskizze}
+ \GoldenerSchnitt
+ \end{Layoutskizze}
+ \caption{Konstruktion nach den Proportionen des Goldenen Schnitts%
+ \label{Golden}}
+ \end{figure}
+
+ Die R"ander gliedern sich in Verh"altnis $1:2$ auf: also 1 Teil im Bund,
+ 1 Teil im Kopf und 2 Teile au"sen, 2 Teile im Fu"s.
+ Wie ein Satzspiegel f"ur eine DIN\,A\,4 Doppelseite aussieht, zeigt
+ Abbildung~\ref{Golden}. Dieser Satzspiegel ist identisch mit der
+ konventionellen 9er-Raster-Methode (kommt sp"ater).
+
+ Was an dieser Konstruktion Goldener Schnitt ist, bleibt sowohl mir als
+ auch Andreas ein R"atsel! Wir haben lange dran get"uftelt und sind zu dem
+ Schlu"s gekommen, eine weitere Methode, die Methode nach dem "`Silbernen
+ Schnitt"', aufzunehmen.
+
+ \begin{figure}
+ \begin{Layoutskizze}
+ \SilbernerSchnitt
+ \end{Layoutskizze}
+ \caption{Konstruktion zum "`Silbernen Schnitt"'\label{silbern}}
+ \end{figure}
+ \item In Anlehnung an die Konstruktion \verb|\GoldenerSchnitt| haben
+ wir eine Methode \verb|\SilbernerSchnitt| entwickelt. Dieser ist im
+ wesentlichen mit der obigen Konstruktion identisch, einzige Ver"anderung
+ ist der Ausgangspunkt der Hilfsdiagonalen. Siehe dazu
+ Abbildung~\ref{silbern}. Der Satzspiegel ist gleich dem, der mit der
+ konventionellen 8er-Raster-Methode erzeugt wurde.
+
+ \item Die letzte Methode, die mit der "Ahnlichkeit der Rechtecke
+ arbeitet, ist die \verb|\Rasterkonstruktion|. Man teilt die Papierh"ohe
+ und -breite in gleichviele Teile auf. Sowohl in horizontaler als auch
+ in vertikaler Richtung m"ussen mindestens 6 und d"urfen h"ochstens 12
+ Rechtecke entstehen. Die R"ander verteilen sich wieder im Verh"altnis
+ $1:2$. Jeweils 1 Teil (Rasterrechteck) f"ur Bund und Kopf und 2 Teile
+ f"ur au"sen und Fu"s.
+ \begin{figure}
+ \begin{Layoutskizze}
+ \Rasterkonstruktion 10
+ \end{Layoutskizze}
+ \caption{Rasterkonstruktion am Beispiel des 10er-Rasters}
+ \end{figure}
+ \end{enumerate}
+\end{itemize}
+
+Im folgenden habe ich einige M"oglichkeiten der Rastermethode
+durchprobiert und bin zu folgenden Ergebnissen gekommen.\\
+Bezeichnungen:\\*
+$1:2$ = Bund${}:{}$Au"sen = Kopf${}:{}$Fu"s oder\\*
+Bund${}:{}$Kopf${}:{}$Au"sen${}:{}$Fu"s.
+\begin{itemize}
+ \item 12er-Raster konventionell (\verb|\FertigLayout 12A|)
+ \begin{itemize}
+ \item zu kleiner Abstand vom Bund zum Satzspiegelbeginn (17,5\,mm),
+ f"ur Lochung zu wenig.
+ \item Paginierung am Kopf ist nicht m"oglich
+ \item gro"ser Satzspiegel, in dem viel Text unterzubringen ist, die
+ Wahl der Schriftgr"o"se mu"s darauf abgestimmt sein.
+ \item kleine Abst"ande bei Gestaltung von "Uberschriften, Grafiken etc.,
+ weil die Rasterteile sehr klein sind.
+ \end{itemize}
+ \item 12er-Raster abgewandelt, Verh"altnis $1{,}5:2{,}5$
+ (\verb|\FertigLayout 12B|)
+ \begin{itemize}
+ \item gr"o"sere R"ander, insbesondere der Heftrand
+ \item gro"sz"ugigere Anlage,
+ \item f"ur toten Kolumnentitel geeignet
+ \end{itemize}
+ \item 12er-Raster im Verh"altnis $2:1:2:2$ (\verb|\FertigLayout 12C|)
+ \begin{itemize}
+ \item geeignet f"ur Lochung, abgeheftet erscheint wieder der Bund
+ schmaler.
+ \item gen"ugend gro"ser Satzspiegel
+ \item gut geeignet f"ur Arbeit mit Kopfzeile (lebender Kolumnentitel)
+ \item erfordert kleine, unauf"|f"allige Pagina
+ \end{itemize}
+ \item 10er-Raster konventionell $1:2$ (\verb|\FertigLayout 10A|)
+ \begin{itemize}
+ \item Heftrand zu klein
+ \item Satzspiegel sch"on lang, gr"o"sere Textmenge
+ \item gut geeignet f"ur Arbeit mit totem Kolumnentitel oder
+ aufwendigere Pagina
+ \end{itemize}
+ \item 10er-Raster abgewandelt $2:1:2:2$ (\verb|\FertigLayout 10B|)
+ \begin{itemize}
+ \item Satzspiegel etwas zu schmal
+ \item kleine Marginalien k"onnen am Rand untergebracht werden
+ \item toter Kolumnentitel kann gro"sz"ugig gestaltet werden.
+ \item Heftrand zu gro"s
+ \end{itemize}
+ \item 10er-Raster abgewandelt $1{,}5:1:2:2$ (\verb|\FertigLayout 10C|)
+ \begin{itemize}
+ \item gut proportioniert
+ \end{itemize}
+ \item 8er-Raster konventionell (\verb|\FertigLayout 8A|)
+ \begin{itemize}
+ \item sehr gro"sz"ugiger Satzspiegel
+ \item gut geeignet f"ur toten Kolumnentitel und kleine Marginalien
+ \item verlangt nach kleiner Schrift mit gro"sem Durchschu"s
+ \item Heftrand bedingt geeignet, weil etwas zu knapp
+ \end{itemize}
+ \item 7er-Raster konventionell (\verb|\FertigLayout 7A|)
+ \begin{itemize}
+ \item bedingt geeigneter Heftrand, besser w"aren 33\,mm
+ \item Au"senrand gut geeignet f"ur Marginalien
+ \item geeignet f"ur Fu"s-Pagina (aufwendig)
+ \end{itemize}
+ \end{itemize}
+Aus der obigen Betrachtung lassen sich folgende Richtwerte f"ur die
+Verteilung von R"andern aufstellen, die allerdings nicht allgemeing"ultig
+sind. Ob eine Seite harmonisch aussieht, h"angt nicht nur vom
+Satzspiegel, sondern u.\,a. auch von der Wahl der Schriftgr"o"se, des
+Zeilenabstandes, der Schriftart, der Bindung, Pr"asentation etc. ab.
+\begin{itemize}
+\item Bund
+ \begin{itemize}
+ \item bei Lochung und Heftung in Schnellhefter mind. 30\,mm, optimal
+ 33\,mm, max. 35\,mm.
+ \item bei Doppelseiten gehen die Standardkonstruktionsmethoden
+ (Klebebindung oder doppelseitige Ordnerabheftung).
+ \end{itemize}
+\item Kopf
+ \begin{itemize}
+ \item mit lebendem Kolumnentitel mind. 25\,mm, max. 35\,mm
+ \item mit Kopf-Paginierung mind. 35\,mm, max. 40\,mm
+ \end{itemize}
+\item Au"sen:
+ \begin{itemize}
+ \item ohne Marginalie mind. 25\,mm,
+ \item mit Marginalie mind. 42\,mm, optimal 55--60\,mm
+ \end{itemize}
+\item Fu"s:
+ \begin{itemize}
+ \item mit einfacher Paginierung mind. 50\,mm, max. 60\,mm
+ \item mit totem Kolumnentitel mind.55\,mm. optimal 63\,mm
+ \end{itemize}
+\end{itemize}
+
+\newpage
+{\bf Erkl"arung einiger Fachbegriffe }
+\begin{itemize}
+\item {\bf Toter Kolumnentitel:} Als toten Kolumnentitel bezeichnet man
+die Seitenziffer (Pagina, Paginierung). Er kann am Fu"s mit 1 oder 2
+Leerzeilen Abstand stehen. (Abstand richtet sich nach der
+Satzspiegelh"ohe und dem Rand am Fu"s.) Ausgerichtet wird die Seitenziffer
+entweder mittig (Mitte des Satzspiegels!) oder au"sen. Ihr rechter Rand
+kann mit der rechten Satzkante abschlie"sen (rechtsb"undig), m"oglich ist
+aber auch ein Einzug von einem Geviert.
+
+Bei der Gestaltung von Doppelseiten steht die Seitenziffer auf der
+rechten Seite rechts au"sen, auf der linken Seite links au"sen b"undig.
+
+Rechte Seiten sind immer!!! ungerade Seiten, linke immer gerade Seiten.
+Bei der Bezifferung ist darauf unbedingt zu achten.
+
+Die Pagina kann auch am Kopf stehen. Dann wird sie genauso behandelt wie
+am Fu"s.
+
+Der tote Kolumnentitel z"ahlt nicht zum Satzspiegel. Er steht au"serhalb
+der "`Umrandung"' und wird bei der Gestaltung gesondert betrachtet.
+
+\item {\bf Lebender Kolumnentitel:} Der lebende Kolumnentitel steht "uber
+der Kolumne (dem Satz). Bei \TeX\ wird dies als Kopfzeile bezeichnet. Er
+kann eine Kurzbezeichnung des Kapitels enthalten, Inhalt der
+betreffenden Seite, und die Pagina. H"aufig wird er mit einer feinen
+Linie und 1 oder 2 Leerzeilen Abstand vom "ubrigen Text getrennt. Die
+Ausrichtung kann mittig, rechts- oder linksb"undig sein. Bei einer
+Kopfpaginierung steht die Seitenziffer immer au"sen.
+
+Der lebende Kolumnentitel z"ahlt zum Satzspiegel dazu, d.\,h. er steht
+innerhalb der Umrandung. Er mu"s bei der Gestaltung des Satzspiegels als
+lichtes Textobjekt ber"ucksichtigt werden.
+
+\item {\bf Marginalie:} Dies sind Randbemerkungen, die neben dem
+Satzspiegel stehen und die zum raschen Auf"|finden bestimmter Textstellen
+dienen. Die erste Zeile steht mit der Textbezugszeile auf einer Linie.
+Der Abstand richtet sich nach der Schriftgr"o"se und dem Zeilenabstand.
+
+Marginalien werden zum Text hin b"undig ausgeschlossen, d.\,h. auf rechten
+Seiten stehen sie linksb"undig, auf linken Seiten rechtsb"undig.
+\end{itemize}
+
+\newdimen\WW \WW=0.5\textwidth \advance\WW by -3mm
+\def\tab{\hskip3mm}
+\Layoutbeschriftung /
+
+\hbox to \textwidth{12A\hfill \tab12B\hfill\tab}\par\nobreak
+\mbox{%
+\begin{Layoutskizze} <\WW>
+\FertigLayout 12A
+\end{Layoutskizze}\tab
+\begin{Layoutskizze} <\WW>
+\FertigLayout 12B
+\end{Layoutskizze}}
+
+\hbox to \textwidth{12C\hfill \tab10A\hfill\tab}\par\nobreak
+\mbox{%
+\begin{Layoutskizze} <\WW>
+\FertigLayout 12C
+\end{Layoutskizze}\tab
+\begin{Layoutskizze} <\WW>
+\FertigLayout 10A
+\end{Layoutskizze}}
+
+\hbox to \textwidth{10B\hfill \tab10C\hfill\tab}\par\nobreak
+\mbox{%
+\begin{Layoutskizze} <\WW>
+\FertigLayout 10B
+\end{Layoutskizze}\tab
+\begin{Layoutskizze} <\WW>
+\FertigLayout 10C
+\end{Layoutskizze}}
+
+\hbox to \textwidth{8A\hfill \tab7A\hfill\tab}\par\nobreak
+\mbox{%
+\begin{Layoutskizze} <\WW>
+\FertigLayout 8A
+\end{Layoutskizze}\tab
+\begin{Layoutskizze} <\WW>
+\FertigLayout 7A
+\end{Layoutskizze}}
+
+\end{document}
+
diff --git a/macros/latex209/contrib/konstruk/piccorr.sty b/macros/latex209/contrib/konstruk/piccorr.sty
new file mode 100644
index 0000000000..af943d12fc
--- /dev/null
+++ b/macros/latex209/contrib/konstruk/piccorr.sty
@@ -0,0 +1,43 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Correction to PiCTeX 1.1 9/21/87 %
+% by Andreas Schrell, Wuppertal, FRG, 9/30/91 %
+% %
+% The bug forces wrong height and position of the %
+% vertical \betweenarrows - structure if the %
+% coordinate difference is negative. %
+% You can search for ERROR in this file. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+{\catcode`!=11
+
+\global
+\def\betweenarrows #1#2 from #3 #4 to #5 #6 {%
+ \!xloc=\!M{#3}\!xunit \!xxloc=\!M{#5}\!xunit%
+ \!yloc=\!M{#4}\!yunit \!yyloc=\!M{#6}\!yunit%
+ \!dxpos=\!xxloc \advance\!dxpos by -\!xloc
+ \!dypos=\!yyloc \advance\!dypos by -\!yloc
+ \advance\!xloc .5\!dxpos
+ \advance\!yloc .5\!dypos
+%
+ \let\!MBA=\!M% ** save current coord\dimen mode
+ \!setdimenmode% ** express locations in dimens
+ \ifdim\!dypos=\!zpt
+ \ifdim\!dxpos<\!zpt \!dxpos=-\!dxpos \fi
+ \put {\!lrarrows{\!dxpos}{#1}}#2{} at {\!xloc} {\!yloc}
+ \else
+ \ifdim\!dxpos=\!zpt
+% \ifdim\!dypos<\!zpt \!dypos=-\!zpt \fi
+% ^^^^^ ERROR!
+ \ifdim\!dypos<\!zpt \!dypos=-\!dypos \fi
+% ^^^^^^^ CORRECTION!
+ \put {\!udarrows{\!dypos}{#1}}#2{} at {\!xloc} {\!yloc}
+ \fi
+ \fi
+ \let\!M=\!MBA% ** restore previous c/d mode
+ \ignorespaces}
+}
+
+\endinput
+
diff --git a/macros/latex209/contrib/konstruk/picmore.tex b/macros/latex209/contrib/konstruk/picmore.tex
new file mode 100644
index 0000000000..1bda81e6ae
--- /dev/null
+++ b/macros/latex209/contrib/konstruk/picmore.tex
@@ -0,0 +1,76 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% PiCTeX Erweiterungen von Andreas Schrell %
+% Windhoevel 2 %
+% 5600 Wuppertal 2 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Version 1.0 29.10.1989 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Befehle fr die Benutzer:
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \setsignal zur Benutzung wie \setlinear %
+% \plot erzeugt danach Signalverlaeufe%
+% fuer Impulsdiagramme. Es werden TeX-%
+% Linien benutzt, daher schneller als %
+% \plot mit \setlinear %
+% Bsp: %
+% \setsignal \plot 0 1 1 0 2 1 4 0 7 1 8 0 / %
+% erzeugt %
+% 0 1 2 3 4 5 6 7 8 %
+% __ ___ _ %
+% ! ! ! ! ! %
+% !_! !_____! ! %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \setmsignal zur Benutzung wie \setlinear %
+% \plot erzeugt danach Signalverlaeufe%
+% fuer Impulsdiagramme. Es werden TeX-%
+% Linien benutzt, daher schneller als %
+% \plot mit \setlinear %
+% Bsp: %
+% \setmsignal \plot 0 1 1 2 2 4 3 6 0 7 1 1 %
+% erzeugt %
+% 0 1 2 3 4 5 6 7 8 %
+% --- %
+% ! ! %
+% - ! %
+% --! ! - %
+% !___! %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`!=11
+
+\def\setsignal{%
+ \let\!drawcurve=\!scurve}
+
+\def\!scurve #1 #2 {%
+ \edef\!hxS{#1}%
+ \edef\!hyS{#2}%
+ \!sjoin}
+
+\def\!sjoin#1 #2 {%
+ \putrule from {\!hxS} {\!hyS} to {#1} {\!hyS}
+ \putrule from {#1} {\!hyS} to {#1} {#2}
+ \edef\!hxS{#1}%
+ \edef\!hyS{#2}%
+ \!ifnextchar/{\!finish}{\!sjoin}}
+
+
+\def\setmsignal{%
+ \let\!drawcurve=\!smcurve}
+
+\def\!smcurve #1 #2 #3 {%
+ \edef\!hxS{#2}%
+ \edef\!hyS{#3}%
+ \putrule from {#1} {\!hyS} to {\!hxS} {\!hyS}
+ \!smjoin}
+
+\def\!smjoin#1 #2 {%
+ \putrule from {\!hxS} {\!hyS} to {\!hxS} {#2}
+ \putrule from {\!hxS} {#2} to {#1} {#2}
+ \edef\!hxS{#1}%
+ \edef\!hyS{#2}%
+ \!ifnextchar/{\!finish}{\!smjoin}}
+
+\catcode`!=12
+
diff --git a/macros/latex209/contrib/konstruk/pictex.sty b/macros/latex209/contrib/konstruk/pictex.sty
new file mode 100644
index 0000000000..c6bb831048
--- /dev/null
+++ b/macros/latex209/contrib/konstruk/pictex.sty
@@ -0,0 +1,10 @@
+\ifx\fiverm\undefined
+ \newfont\fiverm{cmr5}
+\fi
+\input prepicte
+\input pictex
+\input postpict
+\catcode`\@=11
+\@input{picmore.tex}
+\@input{piccorr.sty}
+\endinput
diff --git a/macros/latex209/contrib/konstruk/readme b/macros/latex209/contrib/konstruk/readme
new file mode 100644
index 0000000000..a5bfdc4074
--- /dev/null
+++ b/macros/latex209/contrib/konstruk/readme
@@ -0,0 +1,18 @@
+========================================================
+KONSTRUK.STY Ein Style zum Seitenlayout mit LaTeX
+========================================================
+
+KONSTRUK.STY Der eigentliche Style
+LAYOUT.TEX LaTeX-Dokument mit Layoutbeschreibung (BigTeX)
+KONSTRUK.DOC Treiberdatei fr die Dokumentation
+STAMM.STY Hilfsstyle fr Dokumentation
+FLOATS.STY dito
+
+Aužerdem ben”tigt man fr die Dokus DOC.STY, GERMAN.STY, PiCTeX.
+
+Wuppertaler DANTE-TeX-Stammtisch
+Andreas Schrell
+Windh”vel 2
+D-42279 Wuppertal
+Andreas.Schrell@FernUni-Hagen.de
+
diff --git a/macros/latex209/contrib/konstruk/stamm.sty b/macros/latex209/contrib/konstruk/stamm.sty
new file mode 100644
index 0000000000..0853a72839
--- /dev/null
+++ b/macros/latex209/contrib/konstruk/stamm.sty
@@ -0,0 +1,102 @@
+%%%
+% Style fr Verteilungen auf dem \TeX-Stammtisch V. 2.2
+%%%
+% stellt Kopfzeile und Seitenformat zur Verfgung und die Befehle
+% \Thema{} % frs Thema
+% \Nr{} % fr die Stammtisch-Nummer
+% \Datum{} % na was wohl?
+%%%
+
+\input a4wide.sty
+
+\parindent=0pt \parskip=4pt
+\pagestyle{myheadings}
+\tolerance=9000 %\pretolerance=9000
+\clubpenalty=10000 \widowpenalty=10000
+
+\def\Nr#1{\def\NR{#1}}
+\def\Thema#1{\def\THEMA{#1}}
+\def\Datum#1{\def\DATUM{#1}}
+\Nr{} \Thema{???????}
+
+\newcount\TestCount
+\def\AmSTeX{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
+ {\the\textfont2 M}\kern-.125em{\the\textfont2 S}-\TeX}
+\def\AmS{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
+ {\the\textfont2 M}\kern-.125em{\the\textfont2 S}}
+\def\AmSLaTeX{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox
+ {\the\textfont2 M}\kern-.125em{\the\textfont2 S}-\LaTeX}
+\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025emb}\kern-.08em\TeX}}
+\def\JTeX{\leavevmode\hbox{\lower.5ex\hbox{J}\kern-.18em\TeX}}
+\ifx\undefined\selectfont
+ \message{LaTeX-Logo will not be well supported
+ (\string\bf,\string\it,...).^^J}
+\else
+ \@input{amstext.sty}
+ \ifx\text\undefined
+ \message{LaTeX-Logo will not be well supported
+ (\string\bf,\string\it,...).^^J}
+ \else
+ \def\La{\leavevmode{\rm L\raise.42ex
+ \hbox{$\m@th\scriptstyle\text{\kern-.3em A}$}}}
+ \def\LaTeX{{\rm\La\kern-.15em\TeX}}
+ \fi
+\fi
+\font\manual=logo10 % font used for the METAFONT logo, etc.
+\def\MF{{\manual META}\-{\manual FONT}}
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
+\def\PiCTeX{\PiC\kern-.11em\TeX}
+
+\def\HEADLINKS{\TeX-Stammtisch in Wuppertal (\DATUM) }
+\def\@oddhead{{\bf \ifx\NR\empty\else \NR. \fi
+\HEADLINKS \hfill \THEMA
+ \quad \thepage}}
+
+\advance\voffset by -10mm
+\advance\textheight by 20mm
+
+\def\@listI{\leftmargin\leftmargini \parsep 2\p@ plus2\p@ minus\p@
+\topsep 4\p@ plus2\p@ minus2\p@
+\itemsep 2\p@ plus1\p@ minus\p@}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4\p@ plus1\p@ minus2\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep 1\p@ plus\p@}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\<#1>{"<{\it#1\/}">}
+
+\def\section{\@startsection {section}{1}{\z@}{-2.7ex plus-.5ex minus
+ -.2ex}{1ex plus.2ex}{\reset@font\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-2.0ex plus-.3ex
+ minus-.2ex}{0.8ex plus.2ex}{\reset@font\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-1.3ex plus
+ -.3ex minus-.2ex}{.5ex plus.2ex}{\reset@font\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{.5ex plus.2ex minus.2ex}{-1em}{\reset@font
+ \normalsize\it}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{.5ex plus.1ex minus
+ .2ex}{-1em}{\reset@font\normalsize}}
+
+\endinput
+
diff --git a/macros/latex209/contrib/labelfig/labelfig.doc b/macros/latex209/contrib/labelfig/labelfig.doc
new file mode 100644
index 0000000000..3915a20643
--- /dev/null
+++ b/macros/latex209/contrib/labelfig/labelfig.doc
@@ -0,0 +1,268 @@
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% LabelFig.doc
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%
+ %%%%% LabelFig.tex FOR LABELLING TEX FIGURE INSERTS %%%%%
+ %%
+ %% DOCUMENTATION
+ %%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+ by Laurent Siebenmann
+ lcs@matups.matups.fr
+
+ VERSIONS: July 1991
+
+
+INTRODUCTION
+
+ This small labelling package is intended for TeX users who
+rely on non-TeX sources for for their graphics inserts. It
+provides means for adding TeX labels to such inserts with a
+minimum of fuss. For most labels I find it most convenient to
+rely on non-TeX sources, and I only occasionally use these
+macros. Typical occasions when the need seems to arise:
+ (a) the graphics program lacks certain exotic or complex
+mathematical symbols
+ (b) the very highest typographical quality is wanted for the
+labels.
+
+ Given a fast preview you may find that this package
+provides an agreeable paste-up environment; see extra
+applications at end.
+
+
+BASIC INSTRUCTIONS
+
+ After reading in the macro file using
+
+ \input LabelFig.tex
+
+preview or proof your figure with a coordinate grid printed on
+top, by typing the following:
+
+ \ShowGrid % without this the grid is absent
+ \AffixLabels{<the graphics insertion>}
+
+Here <the graphics insertion> is what you would type to insert
+the graphics object alone without the grid. This must provide
+for the space around it. For example <the graphics insertion>
+might well be \BoxedEPSF{MyFigure scaled 700} using the
+BoxedEPS.tex package (from same source); this provides a TeX box
+containing the encapsulated PostScript insert specified by the
+file MyFigure. \AffixLabels{...} provides the grid (supposing
+\ShowGrid is present) and later, once you have specified labels
+using the grid, it will "stick on" the labels.
+
+ The grid is a sort of (usually elongated) checkerboard of
+ten rows and ten columns and its (internal) partitions are
+numbered .1, ... ,.9 both horizontally (X-coordinate running
+left to right) and vertically (Y-coordinate running bottom to
+top). Thus the points enclosed by the grid correspond to the
+points of the unit square in the cartesian "X-Y" plane, the lower
+left corner corresponding to the origin (0,0). By extrapolation,
+the full page corresponds to a larger rectangle in the plane.
+
+ These coordinates serve to position labels as follows.
+Before the \AffixLabels{...} command type label specifications:
+
+ \SetLabels
+ (<X-coordinate>*<X-coordinate>) <first label> \\
+ .
+ .
+ .
+ (<X-coordinate>*<X-coordinate>) <last label> \\
+ \endSetLabels
+
+Each row specifies one label and is terminated by \\. In each
+row the position indicator comes first; it is written as a
+standard cartesian point except that the X- and Y- coordinates
+are separated by * rather than a comma. There are no dimension
+units to specify (the unit is the grid itself).
+
+ Normally, this point specifies where the middle of the
+baseline of the label will be located. However if you precede
+the point by \L [or \R] the left [or right] edge of the baseline
+will be located there. Similarly you may also precede the point
+by \T or \B to vertically align the top or bottom of the label box
+at the specified point. Thus, in all there are nine standard
+positions of the label with respect to the insertion point ---
+corresponding to the eight principal points of the compas plus
+its center.
+
+ \L\T \T \R\T
+
+ \L 0 \R
+
+ \L\B \B \R\B
+
+
+ Remember that you are responsible for preventing labels
+from overlapping.
+
+ You are also responsible for the label typography
+including size and style; a label is just about anything that can
+be put in a TeX box. For example, it is quite possible to treat
+multiline captions as labels (see below). Note that spaces at the
+beginning and end of labels will normally be suppressed; if you
+want them you must protect them with TeX braces.
+
+ Beware of changing the grid inadvertently after the labels
+have been positioned. For example, correcting the bounding box
+of a PostScript graphics object can foul up the labels by
+changing the coordinate grid to which the labels are attached.
+Even a change of scaling can be disruptive, although modest
+changes are often well tolerated. Make it a rule to carefully
+size and position and the graphics object before using
+LabelFig.tex to attach labels.
+
+ Here is an artificial but self-contained test which uses
+TeX rules to make a graphics object.
+
+
+TEST
+
+ Do not skip this!
+
+ %%%%%%%%%%%%%%%%%% --- cut
+
+ %%%%%% useful ad hoc macros
+
+ %%% \FrameIt#1 frames what it finds in #1
+ \def\FrameIt#1{\hbox{\vrule$\vcenter {\hrule\kern3pt%
+ \hbox {\kern3pt #1\kern3pt}%
+ \kern3pt\hrule}$\vrule}}
+
+ %%% \Caption#1#2 gives framed caption width #1
+ %% containing #2
+ \def\Caption#1#2{\FrameIt{%
+ \vtop {\hsize=#1\relax \parindent=0pt
+ \leftskip=0pt plus10pt\rightskip=0pt plus10pt
+ \parfillskip=0pt
+ \lineskip=1pt\baselineskip=0pt
+ #2}}}
+
+ %%% the test proper begins
+
+ \SetLabels
+ (.5*.2) $\cdot\,\zeta$\\
+ (.9*-.10) $\xi$\\
+ \R(-.03*.9) $\eta$\\
+ \T(.5*.9) \Caption{70pt}{%
+ \it The norm of
+ $g(\xi+i\eta)$ is indicated on
+ contours of this invisible surface.}\\
+ \endSetLabels
+
+ \ShowGrid % this makes the grid visible
+ \AffixLabels{\hbox{\vrule\vbox to 100pt{\vfil
+ \hbox to100pt{\hfil}\hrule}}}
+
+ \end
+
+ %%%%%%%%%%%%%%%%%% --- cut
+
+
+MORE EXOTIC APPLICATIONS
+
+ The grid of LabelFig.tex is analogous to a light-table in
+classical page makeup with wax or latex glue. In principle you
+can use it compose any page from its indivisible parts. This
+even has some of the artisanal charm of classical paste-up
+provided you have a fast screen preview to make the process
+"interactive".
+
+ In practice LabelFig.tex is a tool for nonstandard jobs.
+Here are a few going beyond the labelling already discussed.
+
+
+(I) GRAPHICS INTEGRATION.
+
+ This is accomplished by treating the imported graphics
+objects as labels. The underlying graphics object is then
+typically an empty \vbox to <dimension>{\vfill} in a TeX
+\midinsert...\endinsert construction. A label line
+might be of the form
+
+ (.1*.1) \special{... MyFigure ...}\\
+
+The exact form of the special command varies from driver to
+driver. However, in the case of encapsulated PostScript graphics
+(EPSF norn), by relying on \BoxedEPS.tex one can have the
+following standard syntax (independant of driver (see
+\BoxedEPS.tex for details.
+
+ (.1.1) \EPSFSpecial{MyFigure}{<scale in mils>}\\
+
+One could of course use standard syntax for \BoxedEPS.tex, namely
+
+ (.1.1) \BoxedEPSF{MyFigure scaled <scale in mils>}\\
+
+but that would be slow since it requires TeX to read the
+PostScript file and use many complex macros.
+
+ Similarly for graphics of the Macintosh PICT norm ---
+using \BoxedArt.tex (same sources) in place of \BoxedEPS.tex.
+
+ This approach to integration is to be recommended when one
+is making up a composite graphics object.
+
+
+ (II) COMMUTATIVE DIAGRAM ENHANCEMENT
+
+ Commutative diagrams or arrays of mathematical objects
+connected by arrows of various sorts are common in mathematics.
+The mathematical objects require the use of TeX. Recently
+TeX acquired a good collection of arrows of all slopes --- that
+of LamSTeX --- plus pwerful macros to build the diagrams.
+
+ However, even the LamSTeX collection is often inadequate;
+it lacks for example double shafted arrows, dotted arrows and
+curved arrows. Fortunately it is possible to produce such arrows
+on an individual basis using sophisticated graphics programs such
+as Illustrator and AldusFreehand (both serving the EPSF norm).
+(Since the creation of each new arrow is a work of love, you
+probably want to limit the number of arrows by using LamSTeX for
+most arrows. Incidentally any texpert can quickly adapt the the
+modest sized commutative diagram module of LamSTeX to work with
+AmSTeX.)
+
+ LabelFig.tex can then be given the role of inserting the
+hand-made arrows into the commutative diagram much as it inserts
+a "label" into a graphics inclusion. The grid is normally laid
+down on the TeX part of the commutative diagram, or some
+convenient subobject therein (remember that one can use
+coordinate values outside the grid). The latter choice may offer
+greater stability if the diagram is altered.
+
+ (III) ...
+
+
+CONCLUDING REMARKS.
+
+ Ingenuity pays off in exploiting LabelFig.tex. One can
+mix graphics and typography quite freely. LabelFig.tex is good
+for freeform or overlapping arrangements, while BoxedEPS.tex (or
+BoxedArt.tex) is best for regimented non-overlapping
+arrangements --- and the two can be combined.
+
+ There are however potential pitfalls. Neither
+LabelFig.tex nor BoxedEPS.tex has been tested under extreme
+conditions. I expect problems will quickly occur if their
+procedures are indiscriminately nested. For BoxedEPSF.tex (not
+LabelFig.tex) there is a precise cause for worry, namely many of
+its variables are "global", which means that TeX braces will not
+provide the protection one might expect.
+
+Address for bugs and other feedback:
+
+ Laurent Siebenmann
+ lcs@matups.matups.fr
+
+
+
+
+
diff --git a/macros/latex209/contrib/labelfig/labelfig.tex b/macros/latex209/contrib/labelfig/labelfig.tex
new file mode 100644
index 0000000000..6ad3bf1356
--- /dev/null
+++ b/macros/latex209/contrib/labelfig/labelfig.tex
@@ -0,0 +1,246 @@
+ %%%%%%%%%%%%%%%%%%%--------------- CUT
+
+ %%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%
+ %%%%% LabelFig.tex FOR LABELLING FIGURE INSERTS %%%%%
+ %%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%
+ %%% AUTHOR: Laurent Siebenmann
+ %% lcs@matups.matups.fr
+ %%
+ %%% VERSION: July 1991
+ %%
+ %%% PURPOSE:
+ %% Occasionally, figures imported into TeX lack some labels.
+ %% It may then be most convenient to use TeX to provide
+ %% the labels. Several macro sets, notably the
+ %% LaTeX picture environment, provide means to insert
+ %% labels. LabelFig.tex is a small (4Ko) and fast macro file
+ %% offering labelling capability for other TeX formats such
+ %% as Plain and AmSTeX. Hopefully it will work in essentially
+ %% all TeX environments.
+ %%
+ %%% THE IDEA:
+ %% Nothing distinctly new here.
+ %% Each label is located with respect
+ %% to a grid laid down on the figure --- as in LaTeX.
+ %% The device of using TeX to print the grid in proof versions
+ %% is apparently not in LaTeX but has been since used by
+ %% others. Many thanks to to Raymond Seroul (Strassbourg) for
+ %% pointing it out to me back in 1989.
+ %% (It was used in a Plain TeX hack of the picture
+ %% environment by Desarmenien, Ostromoukhov, and Seroule
+ %% that seems not to have been released.)
+ %%
+ %%% POSTINGS (soon!!): anonymous ftp
+ %% --- ftp 28.146.7.200 (alias shape.mps.ohio-state.edu);
+ %% login: anonymous; password: <anything>;
+ %% directory pub/osutex
+ %% --- ftp 130.84.128.100 (alias rsovax.circe.fr);
+ %% login: anonymous; password: <anything>; directory
+ %% [anonymous.siebenmann]
+ %%
+ %%%% DOCUMENTATION:
+ %% --- see Labelfig.doc
+ %% (may be included at end, after \endinput)
+ %%
+ %%%% EXAMPLE OF USAGE:
+ %% \input LabelFig.tex
+ %% \SetLabels
+ %% (.3*.7) first label\\
+ %% % label will go to position .3 from left
+ %% % and .7 from bottom
+ %% \L(.61*.333) $\Lambda_1\leq\Gamma$\\
+ %% % \L places left edge of label
+ %% % (rather than the center)
+ %% % similarly use \R for right edge;
+ %% % and \B for bottom or \T for top
+ %% \T\R(.3*.7) last label \\
+ %% \endSetLabels
+ %% \ShowGrid
+ %% % lays grid on figure to label;
+ %% % delete for final printing
+ %% \AffixLabels{\BoxedEPSF{MyFigure}}
+ %% % argument of \AffixLabels#1 should be a TeX box
+ %% % covering the inserted figure to be labelled.
+ %% % (Here \BoxedEPSF is the figure insertion macro
+ %% % of my package \BoxedEPS.tex (same sources)
+ %% % for inserting encapsulated PostScript graphics.
+ %% % But any other means of inserting
+ %% % the figure can be used.)
+
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%%%% FORBID REREADING %%%%%
+ %
+ \ifx \LabelFigloaded\MYundefined
+ \else
+ \immediate\write16{ !!! LabelFig.tex ALREADY loaded.}
+ \endinput\fi
+
+ \def\LabelFigloaded{\relax}% now loaded
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%% Beyond this point we use some control sequences
+ %%% that are 'padlocked' with @ of category 11
+
+ \chardef\LabelFigCatAt\the\catcode`\@
+ \catcode`\@=11
+
+ %%temporarily suppress Plain's logging of allocations
+ \let\LabelFigwlog@ld\wlog
+ \def\wlog#1{\relax}
+
+
+ \ifx\\\MYundefined@
+ \let\\\relax
+ \fi
+
+ \def\N@wif{\csname newif\endcsname }
+ \def\Temp@ {\N@wif\ifIN@}
+ \ifx\INN@\MYundefined@
+ \else \let\Temp@\relax
+ \fi
+ \Temp@
+
+ %%% \IN@0#1@#2@ : Is 1st exp of #1 in 1st exp of #2 ??
+ %% Answer in \ifIN@
+ %\newif\ifIN@
+ \def\IN@{\expandafter\INN@\expandafter}
+ \long\def\INN@0#1@#2@{\long\def\NI@##1#1##2##3\ENDNI@
+ {\ifx\m@rker##2\IN@false\else\IN@true\fi}%
+ \expandafter\NI@#2@@#1\m@rker\ENDNI@}
+ \def\m@rker{\m@@rker}
+
+ %%% \Shifted@@#1#2#3 puts #3 in \hbox
+ %% leaves basepoint as is
+ %% then translates ink only by dims #1,#2
+ %% with Postscript convention
+ %% For simplicity use only on scrunched boxes
+ \def\Shifted@@#1#2#3{\setbox0=\hbox{#3}%
+ \raise -\dp0\vbox {\kern-#2%
+ \hbox {\kern#1\box0\kern-#1}%
+ \kern#2}}
+
+
+
+ \newcount\gridcount
+ \newbox\auxGridbox@ \newbox\hGridbox@ \newbox\vGridbox@
+ \newbox\Labelbox@ \newbox\auxLabelbox@
+ \newbox\Coordinatebox@
+ \newtoks\Labeltoks@
+ \newdimen\Wdd@ \newdimen\Htt@
+
+ \def\hRule@{\advance\gridcount -2%
+ \vskip-.2pt\hrule\vskip-.2pt\vfil
+ \llap{\smash{\raise -2.5pt
+ \hbox{.\number\gridcount\kern2pt}}}%
+ \vskip-.2pt\hrule\vskip-.2pt\vfil}
+
+ \def\vRule@{\advance\gridcount 2%
+ \hskip-.2pt\vrule\hskip-.2pt\hfil
+ \setbox\auxGridbox@=\vbox to 0pt
+ {\vskip \Htt@\vskip 2pt
+ \hbox{\kern-3.5pt.\number\gridcount}\vss}%
+ \wd\auxGridbox@=0pt \box\auxGridbox@
+ \hskip-.2pt\vrule\hskip-.2pt\hfil}
+
+ \def\PlaceGrid@@{\gridcount=10%
+ \setbox\hGridbox@=%
+ \hbox{\hbox{\GridSpider@{\hskip-.4pt\vrule}%
+ \vbox to \Htt@{\offinterlineskip\parindent=\z@%
+ \GridSpider@{\vskip-.4pt\hrule}\vfil
+ \hRule@\hRule@\hRule@\hRule@
+ \vskip-.2pt\hrule\vskip-.2pt\vfil
+ \hbox to \Wdd@{\hfil}%
+ \GridSpider@{\hrule\vskip-.4pt}}%
+ \GridSpider@{\vrule\hskip-.4pt}}}%
+ \gridcount=0%
+ \setbox\vGridbox@=
+ \hbox{\vbox{\offinterlineskip\parindent=0pt\hsize=0pt
+ \GridSpider@{\vskip-.4pt\hrule}%
+ \hbox to \Wdd@{%
+ \GridSpider@{\hskip-.4pt\vrule}\hfil
+ \vtop to \Htt@{\vfil}%
+ \vRule@\vRule@\vRule@\vRule@
+ \hskip-.2pt\vrule\hskip-.2pt\hfil
+ \GridSpider@{\vrule\hskip-.4pt}}%
+ \GridSpider@{\hrule\vskip-.4pt}}}%
+ %
+ \wd\hGridbox@=0pt\ht\hGridbox@=0pt
+ \wd\vGridbox@=0pt\ht\vGridbox@=0pt
+ %
+ \hbox{\box\hGridbox@\box\vGridbox@}%
+ }
+
+ \def\SetLabels#1\endSetLabels{%
+ \Labeltoks@={#1}}
+
+ \def\GridSpider@#1{#1}
+ \let\PlaceGrid@\relax
+ \def\ShowGrid{\let\PlaceGrid@\PlaceGrid@@}
+
+ \def\bAdjust@@{%
+ \setbox\auxLabelbox@=\hbox{\raise \dp\auxLabelbox@
+ \box\auxLabelbox@}}
+ \def\bAdjust@{\let\vAdjust@\bAdjust@@}
+
+ \def\tAdjust@@{%
+ \setbox\auxLabelbox@=\hbox{\raise-\ht\auxLabelbox@
+ \box\auxLabelbox@}}
+ \def\tAdjust@{\let\vAdjust@\tAdjust@@}
+
+ \let\vAdjust@\relax
+
+ \def\lAdjust@{\let\hAdjust@\rlap}
+ \def\rAdjust@{\let\hAdjust@\llap}
+
+ \let\hAdjust@\relax\let\vAdjust@\relax
+
+ \def\FetchLabel@#1(#2*#3)#4\\#5\endFetchLabel@{%
+ %\globaldefs=1\setbox0=\hbox{#1}\globaldefs=0%
+ \ignorespaces#1\unskip
+ \Labeltoks@={#5}%
+ \setbox\auxLabelbox@=%
+ \hbox to 0pt{\hss\ignorespaces\hAdjust@
+ {\ignorespaces#4\unskip}\hss}%
+ \vAdjust@
+ \let\hAdjust@\relax\let\vAdjust@\relax
+ \setbox\Labelbox@=\hbox to 0pt{%
+ \box\Labelbox@
+ \Shifted@@{#2\Wdd@}{#3\Htt@}{\box\auxLabelbox@}}%
+ \ht\Labelbox@=0pt\dp\Labelbox@=0pt
+ }
+
+ \def\PlaceLabels@@{\bgroup\def\Cr@{\\}%
+ \let\L\lAdjust@\let\R\rAdjust@
+ \let\B\bAdjust@\let\T\tAdjust@
+ \loop
+ \IN@0\Cr@ @\the\Labeltoks@ @\relax
+ \ifIN@ \expandafter
+ \FetchLabel@\the\Labeltoks@\endFetchLabel@
+ \repeat
+ \box\Labelbox@\egroup}%
+
+ \let \PlaceLabels@\PlaceLabels@@
+
+ \def\AffixLabels#1{\setbox\Coordinatebox@=\hbox{#1}%
+ \Wdd@=\wd\Coordinatebox@ \Htt@=\ht\Coordinatebox@
+ \advance\Htt@ \dp \Coordinatebox@
+ \hbox{\copy\Coordinatebox@\kern-\Wdd@%
+ \Shifted@@{0pt}{-\dp\Coordinatebox@}%
+ {\PlaceGrid@\PlaceLabels@}%
+ \kern\Wdd@}}
+
+ %%% Restoring
+ \let\wlog\LabelFigwlog@ld %%restore logging
+ \catcode`\@=\LabelFigCatAt %%12 or 13
+
+ \endinput
+
+ %% end of LabelFig.tex
diff --git a/macros/latex209/contrib/labelfig/labelfig.txt b/macros/latex209/contrib/labelfig/labelfig.txt
new file mode 120000
index 0000000000..9d4b39bf4b
--- /dev/null
+++ b/macros/latex209/contrib/labelfig/labelfig.txt
@@ -0,0 +1 @@
+labelfig.doc \ No newline at end of file
diff --git a/macros/latex209/contrib/laletter/README b/macros/latex209/contrib/laletter/README
new file mode 100644
index 0000000000..400bd81124
--- /dev/null
+++ b/macros/latex209/contrib/laletter/README
@@ -0,0 +1,144 @@
+LALETTER.STY
+
+This is a LaTeX style that is used at the Los Alamos National
+Laboratory to format letters in accordance with rules established
+in the Laboratory's "Office Procedures Manual." There is a choice
+of Computer Modern fonts or PostScript fonts. Letters can be
+printed in Roman or typewriter typefaces. Multiple addresses can
+be printed on a letter. A letter can be sent to a mailing list;
+mailing labels and return addresses can be printed for each letter
+on the mailing list. The following features can be included in a
+letter: a salutation, a subject line, a reference line, a
+complimentary close, a signature line, an enclosures list, an
+attachments list, a copy list, or a distribution list.
+
+For more information read the "1989 Conference Proceedings" issue
+of "TUGBOAT." Or read the accompanying "LaTeX Letter Reference"
+in the file laletter.ref.
+
+
+THE FILES
+
+There are four files that have to do with the LaTeX letter style
+at Los Alamos National Laboratory.
+
+laletter.doc is the commented style file.
+laletter.sty is the uncommented style file.
+laletter.ref is an ASCII version of the laletter manual.
+lettest.tex is a test file for laletter.sty that can also be used
+ as a template for users' own letters.
+
+
+ALTERING THE STYLE FILE
+
+If you need to adapt the style file to your own institution's
+letters, you should first run lettest.tex through latex and print
+the dvi file. Then read laletter.ref to get a feel for the
+variety of output that can be expected.
+
+The easiest way to change the header is to design a letter header
+for your organization that will fit in place of
+
+ Los Alamos
+ Los Alamos National Laboratory
+ Los Alamos, New Mexico 87545
+
+You can then alter the commands that change the fonts (search for
+\@latwentyeight and \@spectwelve), and alter the \put commands in
+\@printmemopaper that print out the header. Also get rid of the
+"University of California" \put statement.
+
+Your company's style may demand that you alter the part of the
+header that prints the date, mail stop, telephone, and so forth.
+In that case you will have to change the relevant \put statements
+in \@printletterpaper, as well as those in
+\@printfirstpagerightheader.
+
+The numbers in the parentheses in the \put statements are in
+points to the right from the left edge of the paper and down from
+the top edge of the paper.
+
+You may need to mess around with the value of \@countbotheader.
+This variable is used for three purposes. It is the distance to
+the bottom of the left side of our header (Los Alamos, NM 87545),
+as well as the distance to the bottom of the right side of our
+header (TELEPHONE:). It is also used by \def\@printto to figure
+out where to begin printing the address. If your header is all in
+one column, or if your header's right and left sides have
+different vertical placement, make appropriate alterations.
+
+Hopefully, you can live with most of our letter's style, such as
+the way addresses, signatures, and distribution lists are done.
+I tried to make the code as modular as possible for the sake of my
+own sanity, but I'm sure that I missed a lot of opportunities to
+make it easy to alter the style for new stylistic requirements.
+
+To use PostScript fonts with laletter.sty, you must be using
+ArborText's DVIPS. If you are using another PostScript device
+driver, you will have to alter the appropriate \font commands in
+\@chooseheaderfonts and \@choosebodyfonts. You will have to make
+fancier changes if you are using classification labels.
+
+At the end of laletter.doc, there is a list of all the variables
+and macros used in laletter.sty that are not defined in LaTeX.
+Search for "END OF LALETTER.DOC". There are also two lists of the
+more important macros defined in laletter.doc. One is sorted
+alphabetically, and the other is sorted by line number.
+
+
+CHANGING THE .DOC FILE INTO A .STY FILE
+
+I use sed (a UNIX utility) to turn my laletter.doc file into a
+laletter.sty file. If you put the commands below into a file
+named sedfile, run
+
+ sed -f sedfile laletter.doc > laletter.sty
+
+s/%.*/%/g
+s/[ ][ ]*/ /g
+s/^ //
+/^[ ]*%/d
+/^[ ]*$/d
+/ /d
+
+The parts of the lines that read [ ] are actually square
+brackets enclosing a blank and a tab character.
+
+Line 1 removes everything that follows %s.
+Line 2 converts multiple blanks into single spaces.
+Line 3 gets rid of blanks at the beginning of lines.
+Line 4 gets rid of lines containing only blanks and comments.
+Line 5 gets rid of lines containing only blanks.
+Line 6 gets rid of lines containing Control-L characters.
+
+This script only works because I follow certain conventions when I
+write TeX code. For example, if you use a blank line instead of
+an explicit \par token, the sed script will fail.
+
+\def\x{abc
+
+def}
+
+ is NOT the same as
+
+\def\x{abc
+def}
+
+There may be other constructions that don't work with this sed
+script, so be careful. It IS really nice to have a commented doc
+file as well as its quicker running sty file, so it may be worth
+the extra care that it takes.
+
+
+WHERE I AM
+
+Feel free to write e-mail (sxs@lanl.gov) or phone (505-667-5460)
+or write a letter:
+
+ Steve Sydoriak
+ Los Alamos National Laboratory
+ Group C-2, MS B253
+ Los Alamos, New Mexico 87545
+
+I might be able to help you stumble through some awkward piece of
+code.
diff --git a/macros/latex209/contrib/laletter/laletter.doc b/macros/latex209/contrib/laletter/laletter.doc
new file mode 100644
index 0000000000..8137ac1a67
--- /dev/null
+++ b/macros/latex209/contrib/laletter/laletter.doc
@@ -0,0 +1,3755 @@
+\typeout{Document Style laletter. September 18, 1989}
+
+% Steve Sydoriak wrote this software.
+
+% Copyright, 1990, The Regents of the University of California.
+% This software was produced under a U.S. Government contract
+% (W-7405-ENG-36) by the Los Alamos National Laboratory, which is
+% operated by the University of California for the U.S. Department
+% of Energy. The U.S. Government is licensed to use, reproduce,
+% and distribute this software. Permission is granted to the public
+% to copy and use this software without charge, provided that this
+% notice and any statement of authorship are reproduced on all
+% copies. Neither the Government nor the University makes any
+% warranty, express or implied, or assumes any liability or
+% responsibility for the use of this software.
+
+% *****************************************
+% **** BEGINNING OF ARTICLE.DOC MACROS ****
+% *****************************************
+
+% The following portion of this file was copied from article.doc,
+% with some of the lines commented out or added with % LETTER CHANGES
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus -.07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+%
+% LETTER CHANGES\def\thebibliography#1{\section*{References\@mkboth
+% LETTER CHANGES {REFERENCES}{REFERENCES}}\list
+\def\thebibliography#1{%% LETTER CHANGES
+ \par% LETTER CHANGES
+ \vspace{\baselineskip}% LETTER CHANGES
+ REFERENCES% LETTER CHANGES
+ \list% LETTER CHANGES
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}%
+% The following line reflects the change between 16 Mar 88 and 4 Sep 86
+% versions of article.sty.
+ \def\newblock{\hskip .11em plus .33em minus .07em}%
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}%
+
+\let\endthebibliography=\endlist
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+% changed 25 Jun 86 to fix according to Howard Trickey:
+% instead of \unhbox\@tempboxa\par we do #1: #2\par
+
+\long\def\@makecaption#1#2{%
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ #1: #2\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+}%
+%
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+% FIGURE
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+%
+% END OF ARTICLE.DOC MACROS
+
+% ***************************
+% **** LETTER.STY MACROS ****
+% ***************************
+% The following portion of this file was copied from letter.doc,
+% with many of the lines commented out with % LETTER CHANGES
+
+% LETTER DOCUMENT STYLE -- Released 21 July 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+
+% LETTER CHANGES \typeout{Document Style 'letter'. Released 21 July 1985}
+
+% The type size option is handled by \def'ing \@ptsize to the following
+% values:
+% 10pt : 0, 11pt : 1, 12pt : 2
+% Then loading the different fonts accordingly.
+%
+
+\def\@ptsize{0} % Default is 10pt.
+\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt option.
+\@namedef{ds@12pt}{\def\@ptsize{2}} % 12pt option.
+
+
+% no twoside option
+%
+\@twosidefalse
+
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\ifcase \@ptsize\relax % 10pt option
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 11pt option
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 4pt plus 2pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 12pt option
+
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+% LETTER CHANGES \oddsidemargin 53pt % Left margin on odd-numbered pages.
+% LETTER CHANGES \evensidemargin 53pt % Left margin on even-numbered pages.
+\marginparwidth 90pt % Width of marginal notes.
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+\marginparpush 5pt % Minimum vertical space between marginal notes.
+
+% VERTICAL SPACING:
+ % Top of page:
+% LETTER CHANGES \topmargin 27pt% Nominal distance from top of page to top of
+ % box containing running head.
+% LETTER CHANGES \headheight 12pt % Height of box containing running head.
+% LETTER CHANGES \headsep 45pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 25pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+% DIMENSION OF TEXT:
+
+% LETTER CHANGES \textheight 505pt% Height of text (including footnotes
+ % and figures,
+ % excluding running head and foot).
+% LETTER CHANGES \textwidth 365pt % Width of text line.
+ % For two-column mode:
+% LETTER CHANGES \columnsep 10pt % Space between columns
+% LETTER CHANGES \columnseprule 0pt % Width of rule between columns.
+
+% LETTER CHANGES \raggedbottom % 'ragged bottom' (all pages set to natural
+ % height, with no stretch or shrinkage)
+
+% FOOTNOTES:
+
+\footnotesep 12pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 10pt plus 2pt minus 4pt % Space between last line of text and
+ % top of first footnote.
+
+
+% FLOATS:
+% The following items must be defined, even though there are no
+% floats in this style.
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+% LETTER CHANGES \dblfloatsep 12pt plus 2pt minus 2pt
+% LETTER CHANGES \dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+% LETTER CHANGES \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+% LETTER CHANGES \@dblfptop 0pt plus 1fil
+% LETTER CHANGES \@dblfpsep 8pt plus 2fil
+% LETTER CHANGES \@dblfpbot 0pt plus 1fil
+
+
+
+% ****************************************
+% * LETTER COMMANDS *
+% ****************************************
+
+% LETTER CHANGES ** This whole section of letter.doc was discarded.
+
+% ****************************************
+% * THE SRI LETTER FORMAT *
+% ****************************************
+
+% LETTER CHANGES ** This whole section of letter.doc was discarded.
+
+% ****************************************
+% * THE GENERIC LETTER COMMANDS *
+% ****************************************
+
+% LETTER CHANGES ** This whole section of letter.doc was discarded.
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+
+% LETTER CHANGES ** This whole section of letter.doc was discarded.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+% LETTER CHANGES \parskip .7em % Extra vertical space between paragraphs.
+\parindent 0pt % Width of paragraph indentation.
+% LETTER CHANGES \topsep .4em % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 0pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+% LETTER CHANGES \itemsep .4em % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % SET BY THE LETTER COMMANDS
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+
+% LETTER CHANGES ** This whole section of letter.doc has been redefined
+% in \opening, after \@typeface has been defined.
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+% LETTER CHANGES \tabcolsep 6pt% Half the space between columns in a
+ % tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+% LETTER CHANGES \tabbingsep \labelsep% Space used by the \' command.
+ % (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+%
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@} % The \hrule has default height of .4pt .
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox, with \hsize = \columnwidth.
+%
+
+\long\def\@makefntext#1{\noindent % Macro to make the text of a footnote
+ \hangindent 5pt\hbox
+ to 5pt{\hss $^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+% LETTER CHANGES \smallskipamount=.5\parskip % These values are used by
+ % the letter macros.
+% LETTER CHANGES \medskipamount=\parskip
+% LETTER CHANGES \bigskipamount=2\parskip
+
+% LETTER CHANGES \ps@plain % 'plain' page style
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column
+% LETTER CHANGES Since users want bibliographies, tables of figures,
+% LETTER CHANGES tables of contents, let them have the .AUX, etc files.
+%
+% LETTER CHANGES \@fileswfalse % \@fileswfalse inhibits writing of .AUX file.
+
+% END OF LETTER.STY -- THE LETTER DOCUMENT STYLE
+
+%
+% ***************************************************************
+% **** BEGINNING OF LOCALLY WRITTEN MACROS FOR LANL LETTERS. ****
+% ***************************************************************
+%
+% *****************************************
+% **** DEFINE AND INITIALIZE REGISTERS ****
+% *****************************************
+
+% \NEWLENGTH, \NEWCOUNTER, \NEWCOUNT, \NEWTOKS, \NEWSAVEBOX, \NEWDIMEN,
+% \NEWSKIP, \NEWIF
+
+\newwrite\@mainmlb
+
+\newlength{\@lengthlabel}
+\newlength{\@lengthrule}
+\newlength{\@lengthdate}
+\newlength{\@lengthname}
+
+\newcounter{@countlist}
+
+\newcount\@countverticalposition
+\newcount\@countbotheader
+\newcount\@countclassseptop
+\newcount\@countclasssepbot
+\newcount\@counttemp
+\newcount\@countto
+\newcount\@countattn
+\newcount\@countattnsave
+\newcount\@countthru
+\newcount\@counttelephone
+\newcount\@countcy
+\newcount\@countvia
+\newcount\@countattachments
+\newcount\@countreference
+\newcount\@countenc
+\newcount\@countdistribution
+\newcount\@countrightcolon
+\newcount\@countleftheader
+\newcount\@countrightheader
+\newcount\@countpictorig
+\newcount\@countletterlist
+\newcount\@countleftto
+\newcount\@countrightto
+\newcount\@counttemptwo
+\newcount\@countcoltemp
+\newcount\@countreturnaddress
+\newcount\@countskiplabels
+
+\newtoks\@toksto
+\newtoks\@toksattn
+\newtoks\@toksattnsave
+\newtoks\@toksthru
+\newtoks\@tokscy
+\newtoks\@tokstelephone
+\newtoks\@toksvia
+\newtoks\@toksattachments
+\newtoks\@toksenc
+\newtoks\@toksreference
+\newtoks\@toksdistribution
+\newtoks\@tokspagetwoheader
+\newtoks\@toksbeforenewline
+\newtoks\@toksafternewline
+\newtoks\@toksaftersave
+\newtoks\@toksempty
+\newtoks\@toksblank
+\newtoks\@toksnewline
+\newtoks\@toksremaining
+\newtoks\@toksitem
+\newtoks\@toksbeforeendto
+\newtoks\@toksafterendto
+\newtoks\@toksbeforecomma
+\newtoks\@toksleftto
+\newtoks\@toksrightto
+\newtoks\@tokstemp
+\newtoks\@tokscoltemp
+\newtoks\@toksreturnaddress
+
+\newsavebox{\@boxtemp}
+\newsavebox{\@boxclasspage}
+\newsavebox{\@boxpagetwoheader}
+
+\newdimen\@dimentoppagetwo
+\newdimen\@dimenpagetwoheader
+\newdimen\@dimenfirstpageleftheader
+\newdimen\@dimenwdtt
+\newdimen\@dimenletterpaperhcorr
+\newdimen\@dimenletterpapervcorr
+\newdimen\@dimenspaceaftercolon
+\newdimen\descriptionmargin
+\newdimen\@dimenversemargin
+\newdimen\@dimentocolsep
+\newdimen\@dimenhspacesig
+\newdimen\@dimenexpandside
+\newdimen\@dimenexpandtopmargin
+\newdimen\@dimentemp
+\newdimen\@headsepfirst
+\newdimen\@textheightfirst
+\newdimen\@dimenmaillabelheight
+\newdimen\@dimenmaillabeltopmargin
+\newdimen\@bodysep
+
+\newskip\@baselineskipsave
+\newskip\@parskipsave
+\newskip\@topskipfirst
+
+\newif\if@newline
+\newif\if@comma
+\newif\if@notvoidtoks
+\newif\if@toksnotequal
+\newif\if@beenhere
+\newif\if@somethingbefore
+\newif\if@continueloop
+\newif\if@cmfonts
+\newif\if@closing
+\newif\if@everyindent
+\newif\if@printingto
+\newif\if@neveropened
+\newif\if@newtemp
+\newif\if@newattn
+\newif\if@newtelephone
+\newif\if@newcy
+\newif\if@newattachments
+\newif\if@newreference
+\newif\if@newdistribution
+\newif\if@newenc
+\newif\if@newthru
+\newif\if@newvia
+\newif\if@newrightto
+\newif\if@newleftto
+\newif\if@newto
+\newif\if@makemaillabels
+\newif\if@outputfirstpage% Set in \@printfirstpageheader and \@outputpage
+\newif\if@outputlastpage% Set in \@printfirstpageheader and \@outputpage
+\newif\if@newreturnaddress
+
+% Initialize defs and registers.
+
+\let\@mlbout=\@mainmlb
+\clubpenalty=10000
+\widowpenalty=10000
+\topmargin -72pt% Gets rid of default 1 inch margin at top of page.
+\textheight=724pt
+\@textheightfirst=\textheight
+\topskip=0pt
+\@topskipfirst=\topskip
+\headsep=0pt
+\@headsepfirst=\headsep
+\headheight 0pt
+\footskip 43pt
+\textwidth 438pt
+\@countverticalposition 0
+\@toksempty={}
+\@toksblank={ }
+\@toksnewline={\\}
+\@dimenpagetwoheader 180pt
+\@dimenfirstpageleftheader 220pt
+\@dimenexpandside=0pt
+\@dimenexpandtopmargin=0pt
+\@countleftheader=87
+\@countrightcolon=404
+\@countbotheader 104
+\@dimenletterpaperhcorr 0pt
+\@dimenletterpapervcorr 0pt
+\@dimenspaceaftercolon 12pt
+\@everyindentfalse
+\@printingtofalse
+\@neveropenedtrue
+\@newtemptrue
+\@newattntrue
+\@newtelephonetrue
+\@newcytrue
+\@newattachmentstrue
+\@newreferencetrue
+\@newdistributiontrue
+\@newenctrue
+\@newthrutrue
+\@newviatrue
+\@newrighttotrue
+\@newlefttotrue
+\@newtotrue
+\@newreturnaddresstrue
+\@makemaillabelsfalse
+\@dimentocolsep=24pt
+
+\def\@blank{ }%
+\def\@tt{tt}\def\@rm{rm}%
+\def\@texfonts{texfonts}%
+\def\@lafonts{lafonts}\def\@postscript{postscript}%
+\def\@letterpaper{letterpaper}%
+\def\@useto{to}\def\@usesubject{subject}\def\@useattn{attn}%
+
+% ********************
+% **** USER INPUT ****
+% ********************
+
+%
+% \DEF \TO, \THRU, \CY, \ATTACHMENTS, \REFERENCE, \ENCLOSURES,
+% \DISTRIBUTION
+% \defs that call \@toksinput or \@tokstoinput.
+%
+\def\to#1{%
+ \if@newto\@resettovars\fi
+ \ifnum\@countleftto>0 \@errortoleftrightto\@tokstoinput{leftto}{#1}%
+ \else\ifnum\@countrightto>0 \@errortoleftrightto\@tokstoinput{leftto}{#1}%
+ \else \@tokstoinput{to}{#1}%
+ \fi\fi}%
+\def\leftto#1{%
+ \if@newleftto\@resettovars\fi
+ \ifnum\@countto>0 \@totoleftto\fi \@tokstoinput{leftto}{#1}}%
+\def\rightto#1{%
+ \if@newrightto\@resettovars\fi
+ \ifnum\@countto>0 \@totoleftto\fi \@tokstoinput{rightto}{#1}}%
+\def\attn#1{\if@printingto Attn: #1\@toksinput{attn}{#1}\else\@errorattn\fi
+ % This \global kludge is necessary because @countattn is incremented
+ % within the \list environment.
+ \global\@countattn=\@countattn}%
+\def\telephone#1{\@toksinput{telephone}{#1}}%
+\def\cy#1{\@toksinput{cy}{#1}}%
+\def\via#1{\@tokstoinput{via}{#1}}%
+\def\thru#1{\@tokstoinput{thru}{#1}}%
+\def\attachments#1{\@toksinput{attachments}{#1}}%
+\def\reference#1{\@toksinput{reference}{#1}}%
+\def\distribution#1{\@toksinput{distribution}{#1}}%
+\def\enc#1{\@toksinput{enc}{#1}}%
+% Allow only the last \returnaddress to be used.
+\def\returnaddress#1{\@toksreturnaddress={}\@countreturnaddress=0
+ \@toksinput{returnaddress}{#1}}%
+%
+% \DEF \HEADERFONTS, \BODYFONTS, \SUBJECT, \SYMBOL, \SERIALNUMBER,
+% \MAILSTOP, \TELEPHONE, etc
+% Other defs (that don't call \@toksinput or \@tokstoinput).
+% Remove leading and trailing blanks from \typeface, \headerfonts, \bodyfonts.
+%
+\def\typeface#1{\def\@typeface{#1}%
+ \@unspaceleft\@typeface \@unspaceright\@typeface}%
+\def\headerfonts#1{\def\@headerfonts{#1}%
+ \@unspaceleft\@headerfonts \@unspaceright\@headerfonts}%
+\def\bodyfonts#1{\def\@bodyfonts{#1}%
+ \@unspaceleft\@bodyfonts \@unspaceright\@bodyfonts
+ \ifx\@bodyfonts\@postscript \@psdefclasslabel\fi}%
+\def\nocallouts{\def\@nocallouts{}}%
+\def\usetoasheader{\def\@useasheader{to}}%
+\def\useattnasheader{\def\@useasheader{attn}}%
+\def\usesubjectasheader{\def\@useasheader{subject}}%
+\def\useotherasheader#1{\def\@useasheader{#1}}%
+\def\subject#1{%
+ \def\@subjectorig{#1}%
+ \def\@subject{\uppercase{#1}}%
+ \ifx\@subjectorig\@blank\def\@subject{}\fi
+ \ifx\@subjectorig\@empty\def\@subject{}\fi}%
+\def\salutation#1{\def\@salutation{#1}}%
+\def\symbol#1{\def\@symbol{#1}\@unspaceright\@symbol
+ \@unspaceleft\@symbol}%
+\def\serialnumber#1{\def\@serialnumber{#1}\@unspaceleft\@serialnumber
+ \@unspaceright\@serialnumber}%
+\def\mailstop#1{\def\@mailstop{#1}\@unspaceright\@mailstop
+ \@unspaceleft\@mailstop}%
+\def\date#1{\def\@date{#1}\@unspaceleft\@date}%
+\def\expandwidth#1{\@ifnoinfo{#1}{\@dimenexpandside=0pt}{%
+ \@dimenexpandside=#1 \divide\@dimenexpandside by 2
+ \advance \textwidth by #1}}%
+\def\expandtopmargin#1{%
+ \@ifnoinfo{#1}{\@dimenexpandtopmargin=0pt}{\@dimenexpandtopmargin=#1}}%
+\def\shortletterstyle{\def\@shortletterstyle{}}%
+\def\noclearpage{\def\@noclearpage{}}%
+\def\signer#1{\def\@signer{#1}%
+ \@unspaceright\@signer\@upperunspaceleft\@signer}%
+\def\originator#1{%
+ \def\@originator{#1}%
+ \@unspaceright\@originator
+ \@upperunspaceleft\@originator}%
+\def\typist#1{%
+ \def\@typist{#1}%
+ \ifx\@typist\@empty
+ \else
+ \ifx\@typist\@blank
+ \def\@typist{}%
+ \else
+ \def\@typist{\lowercase{\ignorespaces#1}}%
+ \fi\fi}%
+\def\letterpaperhcorr#1{\@ifnoinfo{#1}%
+ {\@dimenletterpaperhcorr=0pt}{\@dimenletterpaperhcorr=#1}}%
+\def\letterpapervcorr#1{\@ifnoinfo{#1}%
+ {\@dimenletterpapervcorr=0pt}{\@dimenletterpapervcorr=#1}}%
+\def\complimentaryclose#1{\def\@complimentaryclose{#1}}%
+\def\signature#1{\def\@signature{#1}}%
+\def\cypagebreak{\def\@cypagebreak{}}%
+\def\attachmentspagebreak{\def\@attachmentspagebreak{}}%
+\def\encpagebreak{\def\@encpagebreak{}}%
+\def\distributionpagebreak{\def\@distributionpagebreak{}}%
+\def\encas{\def\@encas{}}%
+\def\attachmentas{\def\@attachmentas{}}%
+\def\attachmentsas{\def\@attachmentsas{}}%
+\def\encpagebreak{\def\@encpagebreak{}}%
+\def\makemaillabels{\@makemaillabelstrue}
+\def\maillabelheight#1{\@ifnoinfo{#1}%
+ {\maillabelheight{1.5in}}{\@dimenmaillabelheight=#1}}%
+\def\maillabeltopmargin#1{\@ifnoinfo{#1}%
+ {\maillabeltopmargin{.25in}}{\@dimenmaillabeltopmargin=#1}}%
+\def\skiplabels#1{\@ifnoinfo{#1}%
+ {\@countskiplabels=0}{\@countskiplabels=#1}}%
+
+% \DEF \CLASSLABEL
+% Read in argument from \classlabel and create \@classlabel
+% If argument is not {s} or {c} or {u}, stop the job.
+
+\def\classlabel#1{%
+ \def\@unspacedclasslabel{#1}%
+ \@unspaceleft{\@unspacedclasslabel}%
+ \@unspaceright{\@unspacedclasslabel}%
+ \@ifundefined{@classlabel}%
+ {}{\def\@todieornottodie{\@errortwoclasses\@exit}}%
+ % \@secret, \@confidential, and \@unclassified need different \defs
+ % so that they dont compare equal
+ \def\@secret{s}\def\@confidential{c}\def\@unclassified{u}%
+ \ifx\@unspacedclasslabel\@secret% If #1 is s
+ \def\@classlabel{SECRET}%
+ \typeout{^^JThis letter will be marked SECRET.^^J}%
+ \else\ifx\@unspacedclasslabel\@confidential% If #1 is c
+ \def\@classlabel{CONFIDENTIAL}%
+ \typeout{^^JThis letter will be marked CONFIDENTIAL.^^J}%
+ \else\ifx\@unspacedclasslabel\@unclassified% If #1 is u
+ \def\@classlabel{UNCLASSIFIED}%
+ \typeout{^^JThis letter will be marked UNCLASSIFIED.^^J}%
+ \else\ifx\@unspacedclasslabel\@empty% If #1 is empty
+ \def\@classlabel{}%
+ \else
+ % #1 was not a c, s, or u so it's time to die
+ \def\@todieornottodie{%
+ \def\@classlabel{#1}%
+ \@errorclassargument
+ \@exit}%
+ \fi\fi\fi\fi
+ \@todieornottodie
+}%
+% \DEF \@TOKSINPUT
+% Called by something like \@toksinput{cy}{Steve Sydoriak\\Bill Ebanks}
+% \@toksinput collects input from \cy, \attachments, etc: any
+% input that can have mutiple lines of input of the form \xx{a\\b\\c,etc}
+% or \xx{a}\xx{b}, etc. \@toksinput leaves \@toksxx={a\\b\\c}, for example,
+% and \@countxx=3. Some user errors, such as \xx{\\a} or \xx{a\\}\xx{b}
+% are corrected.
+\def\@toksinput#1#2{%
+ \def\@toksname{\csname @toks#1\endcsname}%
+ \def\@countname{\csname @count#1\endcsname}%
+ \def\@ifnewname{\csname if@new#1\endcsname}%
+ \def\@newnamefalse{\csname @new#1false\endcsname}%
+ \def\@newnametrue{\csname @new#1true\endcsname}%
+ \@ifnewname
+ % @newnametrue, ie, @toksinput has not been called with #1 since
+ % \documentstyle or \closing, so initialize.
+ % Note however, if #1={temp}, that \@newtemptrue every time.
+ % (See \@tokstoinput.)
+ \@newnamefalse
+ \@countname=0
+ \@toksname={}%
+ % @newnamefalse, ie, @toksinput has been called before, so add a \\
+ \else
+ \@addtotoks\@toksname\\
+ \fi
+ \@beenherefalse
+ \@toksremaining={#2}%
+ \loop
+ % Pull off @toksbeforenewline, the tokens before @toksremaining's first \\
+ \@tonewlinepull\@toksremaining
+ \@somethingbeforefalse
+ \@toksnotequal\@toksbeforenewline\@toksempty
+ \if@toksnotequal
+ \@toksnotequal\@toksbeforenewline\@toksblank
+ \if@toksnotequal
+ % There is something non-blank before the \\ in @toksbeforenewline.
+ \@somethingbeforetrue
+ \fi\fi
+ \if@somethingbefore
+ \if@beenhere
+ % Been thru the loop before, so add a \\ to @toksname.
+ \@addtotoks\@toksname\\
+ \else
+ % This is the first time thru the loop.
+ \@beenheretrue
+ \fi
+ % When \@toksbeforenewline is not empty and not blank, add it to \@toksname.
+ \@addtokstotoks\@toksname\@toksbeforenewline
+ \@continuelooptrue
+ \advance\@countname by 1
+ \else
+ \@toksnotequal\@toksafternewline\@toksempty% Blank or empty before \\
+ \if@toksnotequal
+ \@toksnotequal\@toksafternewline\@toksnewline% Something after the \\
+ \if@toksnotequal
+ \@continuelooptrue% \@toksafter.ne.{}and.ne.{\\}
+ \else
+ \@continueloopfalse% \@toksafter={\\}
+ \fi
+ \else
+ \@continueloopfalse% \@toksafter={ }
+ \fi\fi
+ \if@continueloop
+ % Set @toksremaining to @toksafternewline, and repeat the loop.
+ \@toksremaining=\@toksafternewline
+ \repeat
+}%
+% \DEF \@RESETTOVARS
+%
+% Comes here when a \if@newleftto, \if@newrightto, or \if@newto is true,
+% as detected by \leftto, \rightto, or \to.
+% Reinitializes for the addresses on the next letter.
+%
+\def\@resettovars{%
+ \@newtofalse\@countto=0\@toksto={}%
+ \@newlefttofalse\@countleftto=0\@toksleftto={}%
+ \@newrighttofalse\@countrightto=0\@toksrightto={}%
+}
+% \DEF \@TOKSTOINPUT
+% Called by something like
+% \@tokstoinput{to}{Roy Nielson \\ Library Department \\
+% Lawrence Berkeley Laboratory \\ University of California \\
+% Library, Bldg. 50, Room 134 \\ Berkeley, CA 94720}
+%
+% \@tokstoinput collects input from \to, \leftto, and \rightto and
+% concatenates them into \@toksto, \@toksleftto, and \@toksrightto
+% The number of addresses is counted in \@countto, etc.
+% If there are multiple occurrences of \to, \leftto, or \rightto,
+% addresses are terminated with \@endto, for example,
+%
+% \leftto{a\\b\\c}
+% \leftto{d\\e\\f}
+%
+% produces
+%
+% \@toksleftto={a\\b\\c\@endto d\\e\\f\@endto}
+% and \@countleftto=2
+%
+\def\@tokstoinput#1#2{%
+ \edef\@tokstoname{\csname @toks#1\endcsname}%
+ \edef\@counttoname{\csname @count#1\endcsname}%
+ %
+ % Setting \@newtemptrue causes \@toksinput to initialize \@tokstemp
+ % and prevents a \\ from being put at the beginning of \@tokstemp.
+ \@newtemptrue
+ \@toksinput{temp}{#2}%
+ \@toksnotequal\@tokstemp\@toksempty
+ \if@toksnotequal
+ \@addtokstotoks\@tokstoname\@tokstemp
+ \@addtotoks\@tokstoname\@endto
+ \advance\@counttoname by 1
+ \fi
+}%
+% \DEF \@TOTOLEFTTO
+% Comes here the first time that a call to \leftto or \rightto
+% follows a call to \to.
+% An warning message is printed, and 'to' info is moved to 'leftto'.
+%
+\def\@totoleftto{%
+ \@errortoleftrightto
+ \@toksleftto=\@toksto
+ \@toksto={}%
+ \@countleftto=\@countto
+ \@countto=0}%
+
+% *****************************
+% **** OPENING AND CLOSING ****
+% *****************************
+
+% \DEF \OPENING
+% \opening prints the preprinted header info and/or the people*s names, etc.,
+% down to but not including the SUBJECT: line.
+%
+\def\opening{%
+ \@checkinput
+ \if@neveropened
+ \@neveropenedfalse
+ % \font commands don't work twice in a row
+ \@choosefonts
+ \fi
+ \@initializefontvariables
+ \@initializeothervariables
+ \@baselineskipsave=\baselineskip
+ \@parskipsave=\parskip
+ \@closingfalse
+ % \lineskip is temporarily set to 0pt because the addresses are
+ % printed in a \vbox.
+ \lineskip=0pt
+ \@printfirstpageheader
+ \@checkuseasinput
+ \@makepagetwoheader
+ \@beginletter
+ \lineskip=\normallineskip
+}%
+% \DEF \CLOSING
+% The closing prints all the info after the body of the letter
+%
+\def\closing{%
+ \normalsize
+ \@closingtrue
+ \@endletter
+ \@clearclosing
+ \leftskip=\@dimenhspacesig
+ \@printcompclose
+ \@printsignature
+ \par
+ \leftskip=0pt
+ \@printoriginatorline
+ \@printenc
+ \@printattachments
+ \@printdistribution
+ \@printcy
+ \@settrue
+ \@restorevariables
+ \@multipleletters
+}%
+% \DEF \@RESTOREVARIABLES
+\def\@restorevariables{%
+ \@countattn=0
+ \@toksattn={}%
+}%
+% \DEF \@MULTIPLELETTERS
+% When multiple letters are being printed, all the macros that
+% write to the .aux file, such as \cite, \label, \begin{figure},
+% etc, should only write to .aux the first time through the body
+% of the letter.
+%
+\def\@multipleletters{%
+ \def\@citex[##1]##2{%
+ \def\@citea{}\@cite{\@for\@citeb:=##2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ \hbox{\csname b@\@citeb\endcsname}}}{##1}}%
+ \def\addcontentsline##1##2##3{}%
+ \def\label##1{\@bsphack\@esphack}%
+ \def\@lbibitem[##1]##2{\item[\@biblabel{##1}]\ignorespaces}%
+ \def\@bibitem##1{\item\ignorespaces}%
+ \setcounter{figure}{0}%
+ \setcounter{table}{0}%
+ \setcounter{footnote}{0}%
+ \setcounter{equation}{0}%
+}%
+
+% **************************
+% **** CHECK USER INPUT ****
+% **************************
+
+% \DEF \@CHECKINPUT
+% Check for missing input items and set default input values.
+%
+\def\@checkinput{%
+ \ifnum\@countvia>0 %
+ \ifnum\@countthru>0 %
+ \@errorthruandvia
+ \fi\fi
+ \@ifemptyorundefined{@salutation}%
+ {\@errorundeclaredsalutation}{}%
+ \@ifemptyorundefined{@complimentaryclose}%
+ {\def\@complimentaryclose{Sincerely yours,}\@errorundeclaredcompclose}{}%
+ \@ifemptyorundefined{@signature}{\@errorundeclared{\signature}%
+ \@errorshowexample{\signature}{Betty J. Donaldson}}{}%
+ \@ifemptyorundefined{@signer}{\@errorundeclared{\signer}%
+ \@errorshowexample{\signer}{BJD}}{}%
+ \ifnum\@countto=0\ifnum\@countleftto=0\ifnum\@countrightto=0 %
+ \@errorundeclaredto\fi\fi\fi
+ \@ifundefined{@symbol}{\def\@symbol{}}{}%
+ \@ifundefined{@nocallouts}{%
+ \ifx\@symbol\@empty
+ \@errorundeclaredcallout{\symbol}\@errorshowexample{\symbol}{C-2}%
+ \fi
+ \@ifemptyorundefined{@mailstop}%
+ {\def\@mailstop{}\@errorundeclaredcallout{\mailstop}%
+ \@errorshowexample{\mailstop}{B253}}{}%
+ \ifnum\@counttelephone=0 %
+ \@tokstelephone={}%
+ \@errorundeclaredcallout{\telephone}%
+ \@errorshowexample{\telephone}{(505) 665-0859}%
+ \fi
+ }{}%
+ \@ifundefined{@subject}{\def\@subject{}}{}%
+ \@ifundefined{@originator}%
+ {\def\@originator{}}{}%
+ \@ifemptyorundefined{@signer}%
+ {\def\@signer{}}{}%
+ \@ifundefined{@typist}%
+ {\def\@typist{}}{}%
+ \@ifemptyorundefined{@date}{\def\@date{\today}}%
+ {\ifx\@date\@empty\def\@date{\today}\fi}%
+ \@ifemptyorundefined{@serialnumber}%
+ {\def\@serialnumber{}}{\ifx\@symbol\@empty \@errorserialnosymbol\fi}%
+ \def\@symbolserialnumber{%
+ \@symbol
+ \ifx\@symbol\@empty
+ \else
+ \ifx\@serialnumber\@empty
+ \else
+ -\relax
+ \fi\fi
+ \@serialnumber\ }%
+ \@ifundefined{@typeface}{\def\@typeface{tt}}{}%
+ \ifx\@typeface\@empty\def\@typeface{tt}\fi%
+ \@ifundefined{@headerfonts}{\def\@headerfonts{texfonts}}{}%
+ \ifx\@headerfonts\@empty\def\@headerfonts{texfonts}\fi%
+ \@ifundefined{@bodyfonts}{\def\@bodyfonts{texfonts}}{}%
+ \ifx\@bodyfonts\@empty\def\@bodyfonts{texfonts}\fi
+}%
+% \DEF \@CHECKUSEASINPUT
+% Check that the type of data to be used on the second page headers
+% has been defined. This \def is separate from \@checkinput because
+% \attn is not executed until 1st page headers are printed.
+%
+%
+\def\@checkuseasinput{%
+ \@ifundefined{@useasheader}{\def\@useasheader{to}}{%
+ \ifx\@useasheader\@useattn
+ \ifnum\@countattn=0 %
+ \@erroruseas{attn}{\attn}\def\@useasheader{to}%
+ \fi
+ \else\ifx\@useasheader\@usesubject
+ \ifx\@subject\@empty
+ \@erroruseas{subject}{\subject}\def\@useasheader{to}%
+ \fi
+ \fi\fi
+}}%
+
+% **********************
+% **** CHOOSE FONTS ****
+% **********************
+
+% \DEF \@CHOOSEFONTS
+% This \def chooses the fonts for the letter
+%
+\def\@choosefonts{%
+ \@amorcm
+ \@getpostscriptnames
+ \@chooseheaderfonts
+ \@choosebodyfonts
+ \@setnormalsize
+}%
+% \DEF \@AMORCM figures out whether am or cm fonts have been loaded.
+% If the amfonts (amr10,etc) were defined by lfonts.tex, an error message
+% is printed. Only systems that have upgraded to the cm fonts can
+% use texfonts.
+%
+\def\@amorcm{%
+ \edef\@cmr{\csname cmr10\endcsname}%
+ \edef\@tenrm{\csname\fontname\tenrm\endcsname}%
+ \ifx\@cmr\@tenrm \@cmfontstrue\else\@cmfontsfalse\fi
+ \if@cmfonts
+ \else\ifx\@bodyfonts\@texfonts
+ \@erroramfonts
+ \else\ifx\@headerfonts\@texfonts
+ \@erroramfonts
+ \fi\fi\fi
+}%
+% \DEF \@GETPOSTSCRIPTNAMES
+% This \def defines PostScript font names.
+%
+\def\@getpostscriptnames{%
+ \def\@cmhelv{psmhlv }%
+ \def\@cmhelvb{psmhlvb }%
+ \def\@cmtimer{psmtimr }%
+ \def\@cmtimei{psmtimi }%
+ \def\@cmtimeb{psmtimb }%
+ \def\@cmcour{psmcou }%
+ \def\@cmcouro{psmcouo }%
+ \def\@cmcourb{psmcoub }%
+}%
+% \DEF \@CHOOSEHEADERFONTS
+% This \def chooses the header fonts
+%
+\def\@chooseheaderfonts{%
+ % If letterpaper, don't need to load any fonts.
+ \ifx\@headerfonts\@letterpaper
+ \else\ifx\@headerfonts\@lafonts
+ \font\@booksix=book6%
+ \font\@bookseven=book7%
+ \font\@lettertwentyeight=memo28%
+ \font\@latwentyeight=la28%
+ \font\@spectwelve=spec12%
+ \else\ifx\@headerfonts\@texfonts
+ \if@cmfonts
+ \font\@booksix=cmr6%
+ \font\@bookseven=cmr7%
+ \font\@latwentyeight=cmbx10 scaled\magstep5%
+ \font\@memotwentyeight=cmbx10 scaled\magstep5%
+ \font\@spectwelve=cmss10 scaled\magstep1%
+ \else
+ \font\@booksix=amr6%
+ \font\@bookseven=amr7%
+ \font\@latwentyeight=ambx10 scaled\magstep5%
+ \font\@memotwentyeight=ambx10 scaled \magstep5%
+ \font\@spectwelve=amss10 scaled\magstep1%
+ \fi
+ \else\ifx\@headerfonts\@postscript
+ \font\@booksix=\@cmhelv at 6pt%
+ \font\@bookseven=\@cmhelv at 7pt%
+ \font\@lettertwentyeight=\@cmhelvb at 28pt%
+ \font\@spectwelve=\@cmhelv at 10.5pt%
+ \else% illegal header
+ \def\@todieornottodie{\@errorillegalheaderfont\@exitfi}%
+ \fi\fi\fi\fi
+ \@todieornottodie
+}%
+% \DEF \@CHOOSEBODYFONTS
+% This \def chooses the fonts for the body of the letter
+%
+\def\@choosebodyfonts{%
+ \ifx\@typeface\@tt
+ \else\ifx\@typeface\@rm
+ \else
+ \def\@todieornottodie{\@errorillegaltypeface\@exitfi}%
+ \fi\fi
+ \@todieornottodie
+ \ifx\@bodyfonts\@texfonts
+ \if@cmfonts
+ \font\@classfont=cmss10 scaled \magstep5%
+ \else
+ \font\@classfont=amssmc40
+ \fi
+ \else\ifx\@bodyfonts\@postscript
+ \ifcase\@ptsize\relax % 10pt option
+ \font\tenrm = \@cmtimer at 10pt % roman
+ \font\tentt = \@cmcour at 10pt % typewriter
+ \ifx\@typeface\@tt
+ \font\tenit = \@cmcouro at 10pt % tt italic
+ \font\tenbf = \@cmcourb at 10pt % tt bold
+ \else\ifx\@typeface\@rm
+ \font\tenit = \@cmtimei at 10pt % roman italic
+ \font\tenbf = \@cmtimeb at 10pt % roman bold
+ \fi\fi
+ \or % 11pt option
+ \font\elvrm = \@cmtimer at 11pt % roman
+ \font\elvtt = \@cmcour at 11pt % typewriter
+ \ifx\@typeface\@tt
+ \font\elvit = \@cmcouro at 11pt % tt italic
+ \font\elvbf = \@cmcourb at 11pt % tt bold
+ \else\ifx\@typeface\@rm
+ \font\elvit = \@cmtimei at 11pt % roman italic
+ \font\elvbf = \@cmtimeb at 11pt % roman bold
+ \fi\fi
+ \or % 12pt option
+ \font\twlrm = \@cmtimer at 12pt % roman
+ \font\twltt = \@cmcour at 12pt % typewriter
+ \ifx\@typeface\@tt
+ \font\twlit = \@cmcouro at 12pt % tt italic
+ \font\twlbf = \@cmcourb at 12pt % tt bold
+ \else\ifx\@typeface\@rm
+ \font\twlit = \@cmtimei at 12pt % roman italic
+ \font\twlbf = \@cmtimeb at 12pt % roman bold
+ \fi\fi
+ \fi
+ \else
+ \def\@todieornottodie{\@errorillegalbodyfont\@exitfi}%
+ \fi\fi
+ \@todieornottodie
+}%
+% \DEF \@SETNORMALSIZE
+% Define \normalsize. See lfonts.tex. The difference here is that
+% we must plug tt or rm into the def.
+\def\@setnormalsize{%
+ \edef\normalsize{%
+ \ifx\@currsize\normalsize
+ \ifx\@typeface\@tt
+ \tt
+ \else\ifx\@typeface\@rm
+ \rm
+ \fi\fi
+ \else
+ \@normalsize
+ \fi}}%
+
+% **********************************************************
+% **** INITIALIZE FONT AND TYPEFACE DEPENDENT VARIABLES ****
+% **********************************************************
+
+% \DEF \@INITIALIZEFONTVARIABLES
+% This def will initialize fonts dependent variables such as parskip and
+% will put kerns in the variable that need it, such as the header words
+% and special symbols such as bullets
+%
+\def\@initializefontvariables{%
+ \raggedbottom
+ \@kernheaderwords
+ \@initializetypefacedependencies
+ % \pem is redefined so that \em will return to \tt or \rm depending
+ % on @typeface
+ \def\pem{%
+ \ifdim\fontdimen\@ne\font>\z@
+ \csname\@typeface\endcsname
+ \else\it
+ \fi
+}}%
+% \DEF \@KERNHEADERWORDS
+%
+% Define and kern @losalamos @lanl @lanm for tex fonts.
+
+\def\@kernheaderwords{%
+ \ifx\@headerfonts\@texfonts
+ \def\@lanl{%
+ \raise 1pt\hbox{%
+ \def\@kern{\kern -.5pt}%
+ L\@kern o\@kern s\ \kern -2.5pt A\@kern l\@kern a\@kern m\@kern
+ o\@kern s\ \kern -2pt N\@kern a\@kern t\@kern i\@kern o\@kern
+ n\@kern a\@kern l\ \kern -3pt L\@kern a\@kern b\@kern o\@kern
+ r\@kern a\@kern t\@kern o\@kern r\@kern y}}%
+ \def\@lanm{%
+ \def\@kern{\kern -.5pt}%
+ L\@kern o\@kern s\kern -2.5pt\ A\@kern l\@kern a\@kern m\@kern
+ o\@kern s\kern -1pt ,\kern -4.5pt\ New\kern -3pt\ Mexico\kern -3pt
+ \ 87545}%
+ \def\@losalamos{Los Alamos}%
+ \else\ifx\@headerfonts\@lafonts
+%
+% Are the old or new Metafoundry fonts being used?
+% If the width of the L in spec12 is 5.3368, then the new fonts are in use.
+% If the width of the L in spec12 is 5.5407, then the old fonts are in use.
+% Test for width == 5.3368pt +/- .001pt in case rounding is a problem.
+ \@spectwelve\setbox\@boxtemp=\hbox{L}\@dimentemp=\wd\@boxtemp
+ \advance\@dimentemp by -5.3368pt
+ \ifdim\@dimentemp<0pt \@dimentemp=-\@dimentemp\fi
+ \ifdim\@dimentemp<.001pt
+% Define and kern @losalamos @lanl @lanm for new la fonts.
+ \def\@lanl{%
+ L\kern -.4pt o\kern .35pt s\ \kern -.8pt
+ A\kern .6pt l\kern .1pt a\kern .6pt m\kern .1pt o\kern .35pt s%
+ \def\@kern{\kern .22pt}%
+ \ N\@kern a\@kern t\@kern i\@kern o\@kern n\@kern a\kern .47pt
+ l\ \kern -.2pt
+ \def\@kern{\kern .03pt}%
+ L\@kern a\kern .43pt b\@kern o\@kern r\@kern a\@kern
+ t\kern -.22pt o\@kern r\@kern y}%
+ \def\@lanm{%
+ L\kern -.4pt o\kern .35pt s\ \kern -.8pt
+ \def\@kern{\kern .35pt}%
+ A\kern .6pt l\kern .1pt a\kern .6pt m\kern .1pt o\kern .35pt s,%
+ \ \kern -1.5pt
+ N\kern -.2pt ew\ \kern -.1pt
+ \def\@kern{\kern .15pt}%
+ M\kern -.05pt e\@kern x\@kern i\@kern c\@kern o\ \kern -.1pt
+ 8\kern -.65pt 7\kern -.9pt 54\kern -.7pt 5}%
+ \def\@losalamos{%
+ \kern -1.2pt L\kern 0pt o\kern -.75pt s\ \kern -6.7pt
+ A\kern .25pt l\kern 1.25pt a\kern -.85pt m\kern -.65pt
+ o\kern -.75pt s}%
+% Define and kern @losalamos @lanl @lanm for old la fonts.
+ \else
+ \def\@todieornottodie{\@erroroldlafonts\@exit}%
+ \fi
+ \else\ifx\@headerfonts\@postscript
+% Define and kern @losalamos @lanl @lanm for postscript fonts.
+ \def\@lanl{%
+ \raise .5pt\hbox{%
+ Los\kern -2pt\ Alamos\kern -1.5pt\ National\kern -2pt
+ \ Laboratory}}%
+ \def\@lanm{%
+ \def\@kern{\kern .57pt}%
+ Los\kern -2pt\ Alamos\kern -1pt,\kern -3.5pt\ N\@kern e\@kern
+ w\kern -2pt\ M\@kern e\@kern x\@kern i\@kern c\@kern
+ o\kern -2pt\ 87545}%
+%
+% @LOSALAMOS is a PostScript macro that prints Los Alamos in hollow letters.
+% ##1 and ##2 are \@dimenletterpaperhcorr and \@dimenletterpapervcorr
+%
+ \def\@PSlosalamos##1##2{%
+ \@psdeflosalamos
+ \special{ps:: ##1 ##2 @LOSALAMOS1 @LOSALAMOS2 @LOSALAMOS3}}%
+ \fi\fi\fi
+ \@todieornottodie
+}%
+% \DEF \@INITIALIZETYPEFACEDEPENDENCIES
+%
+% Variables that are dependent on typeface are initialized here.
+
+\def\@initializetypefacedependencies{%
+
+% For typewriter typeface.
+
+ \ifx\@typeface\@tt
+
+% Hyphenation.
+
+ \rightskip=0pt plus 3.6em% As this increases, there will be less hyphens.
+ \@rightskip=\rightskip
+ \hyphenchar\nintt=\defaulthyphenchar
+ \hyphenchar\tentt=\defaulthyphenchar
+ \hyphenchar\elvtt=\defaulthyphenchar
+ \hyphenchar\twltt=\defaulthyphenchar
+
+% Bullets.
+
+ \ifx\@bodyfonts\@texfonts
+ \def\@bullet{\leavevmode\raise-.22ex\hbox to 0pt{+\hss}o}%
+ \else\ifx\@bodyfonts\@postscript
+ \def\@bullet{\leavevmode\raise-.19ex\hbox to 0pt{+\hss}o}%
+ \fi\fi
+ \fi
+ \@initializelists
+}%
+% \DEF \@INITIALIZELISTS
+%
+% Initialize \list variables.
+% Most of the initialization for Roman typeface and some initialization
+% for typewriter typeface comes directly from Lamport's letter.doc
+
+\def\@initializelists{%
+ % \@dimenwdtt is the width of a character in the typewriter font.
+\setbox\@boxtemp=\hbox{\tt n}\@dimenwdtt=\wd\@boxtemp
+ \ifx\@typeface\@tt
+
+ \parskip=\baselineskip
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to be a no-op.
+
+ \leftmargini 4\@dimenwdtt
+ \leftmarginii 4\@dimenwdtt
+ \leftmarginiii 4\@dimenwdtt
+ \leftmarginiv 4\@dimenwdtt
+ \leftmarginv 4\@dimenwdtt
+ \leftmarginvi 4\@dimenwdtt
+
+ \leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth-\labelsep
+ \labelsep=\@dimenwdtt
+ \parsep=\baselineskip
+
+ \topsep 0pt
+ \itemsep 0pt
+ \@bodysep 0pt
+
+ \descriptionmargin=5\@dimenwdtt
+
+ \@dimentemp=\@dimenwdtt
+
+% For Roman typeface
+
+ \else\ifx\@typeface\@rm
+
+ \parskip=.7em
+ \@parskipsave=\parskip
+
+% Bullets.
+
+ \def\@bullet{$\bullet$}%
+
+% See comments for *** LISTS *** above under \ifx\@typeface\@tt
+
+ \leftmargini 2.5em
+ \leftmarginii 2.2em % > \labelsep + width of '(m)'
+ \leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+ \leftmarginiv 1.7em % > \labelsep + width of 'M.'
+ \leftmarginv 1em
+ \leftmarginvi 1em
+
+ \leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth-\labelsep
+ \labelsep 5pt
+
+ \topsep .4em
+ \@bodysep .8em
+
+ \parsep .4em
+ \itemsep .2em
+
+ \descriptionmargin=3em
+
+ \@dimentemp=5pt
+
+ \fi\fi
+
+ \listparindent=0pt
+ \let\@listi\relax
+
+ \def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}%
+
+ \def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \ifx\@typeface\@rm
+ \topsep .2em
+ \itemsep \topsep
+ \fi}%
+
+ \def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}%
+
+ \def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}%
+
+ \def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}%
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\@dimenversemargin=3\@dimentemp
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -\@dimenversemargin \listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin \@dimenversemargin}\item[]}%
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+ \def\quotation{\list{}{%
+ \rightmargin\leftmargin}\item[]}%
+ \let\endquotation=\endlist
+
+% The following is from letter.doc's OTHER ENVIRONMENTS.
+ \tabcolsep \@dimentemp % Half the space between columns in a
+ % tabular environment.
+
+ \tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv.
+
+ \def\labelenumi{\arabic{enumi}.}%
+ \def\theenumi{\arabic{enumi}}%
+
+ \def\labelenumii{\alph{enumii}.}%
+ \def\theenumii{\alph{enumii}}%
+ \def\p@enumii{\theenumi}%
+
+ \def\labelenumiii{(\arabic{enumiii})}%
+ \def\theenumiii{\roman{enumiii}}%
+ \def\p@enumiii{\theenumi(\theenumii)}%
+
+ \def\labelenumiv{(\alph{enumiv})}%
+ \def\theenumiv{\Alph{enumiv}}%
+ \def\p@enumiv{\p@enumiii\theenumiii}%
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+ \def\labelitemi{\@bullet}% From OPM manual
+ \def\labelitemii{-}%
+ \def\labelitemiii{*}%
+ \def\labelitemiv{+}%
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+ \def\quote{\list{}{\rightmargin\leftmargin}\item[]}%
+ \let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+ \def\descriptionlabel##1{\hspace\labelsep \it ##1}%
+ \def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}%
+
+ \let\enddescription\endlist
+}%
+% \DEF \@INITIALIZEOTHERVARIABLES
+% Variables that define the positioning and style of headers are set here,
+% among others.
+%
+\def\@initializeothervariables{%
+ \let\@texttop=\relax
+ \@ifundefined{@classlabel}{\def\@classlabel{}}{}%
+ % Defines the headers on page one.
+ \def\ps@firstpage{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\@makeclassheader\@printclasspage}%
+ \def\@oddfoot{}}%
+ % Defines the headers on page two and on.
+ \def\ps@pagetwo{\let\@mkboth\@gobbletwo
+ \def\@oddhead{%
+ \@printpagetwoheader\@printpagenum\@printclasspage}%
+ \def\@oddfoot{}}%
+ %
+ \pagestyle{pagetwo}%
+ %
+ % Initialize first page variables.
+ %
+ \@advcountbydimen\@countverticalposition\@dimenletterpapervcorr
+
+ \@advcountbydimen\@countleftheader\@dimenletterpaperhcorr
+ \@advcountbydimen\@countrightcolon\@dimenletterpaperhcorr
+
+ \@countrightheader=\@countrightcolon
+ \@advcountbydimen\@countrightheader\@dimenspaceaftercolon
+
+ \@countpictorig=\@countleftheader
+ \@advcountbydimen\@countpictorig{-\@dimenexpandside}%
+
+ \oddsidemargin=\@countleftheader pt
+ \advance \oddsidemargin by -1in
+ \advance \oddsidemargin by -\@dimenexpandside
+ \evensidemargin=\oddsidemargin
+}%
+% \DEF \@SETTRUE
+% Sets all the \@new....true.
+% These variables are used to check if such and so a variable has
+% been used by \@toksinput since the current memo began.
+\def\@settrue{%
+ \@newtemptrue
+ \@newattntrue
+ \@newtelephonetrue
+ \@newtelephonetrue
+ \@newcytrue
+ \@newattachmentstrue
+ \@newreferencetrue
+ \@newdistributiontrue
+ \@newenctrue
+ \@newthrutrue
+ \@newviatrue
+ \@newrighttotrue
+ \@newlefttotrue
+ \@newtotrue
+}
+
+% *********************************************
+% **** CLASSIFICATION AND PAGE TWO HEADERS ****
+% *********************************************
+
+% \DEF \@MAKECLASSHEADER
+% Make the box that contains the classification header and footer.
+%
+\def\@makeclassheader{%
+ \@countclassseptop 24 % This is the vertical distance in POINTS from
+ % the top border to SECRET or CONFIDENTIAL.
+ \@countclasssepbot 40 % This is the vertical distance in POINTS from
+ % the bottom border to SECRET or CONFIDENTIAL.
+ % It is bigger than the top sep to make room
+ % for the Equal Opportunity line at the bottom.
+% \global is necessary here because \@makeclassheader is called from
+% \@oddhead which is within a \begin-\endgroup inside of \output
+ \@globaladvcountbydimen\@countclasssepbot{-\@dimenletterpapervcorr}%
+ \@globaladvcountbydimen\@countclassseptop\@dimenletterpapervcorr
+% PostScript
+ \ifx\@bodyfonts\@postscript
+ \@makePSclassheader
+% Not PostScript
+ \else
+ \ifx\@classlabel\@empty
+ \global\setbox\@boxclasspage=\hbox{\hbox to 0pt{\hss\hss}}%
+ \else
+ \global\setbox\@boxclasspage=\hbox{\hbox to 0pt{\hss
+ \begin{picture}(0,0)(\@countpictorig,0)%
+ {%
+ \@classfont
+ \put (0,-\@countclassseptop)%
+ {\makebox(0,0)[tl]{\hbox to 8.5in{\hfil\@classlabel\hfil}}}%
+ \@counttemp=-\@countclasssepbot
+ \advance\@counttemp by 795 % 795pt is 11in
+ \put (0,-\@counttemp)%
+ {\makebox(0,0)[bl]{\hbox to 8.5in{\hfil\@classlabel\hfil}}}%
+% \put (0,0){\line(1,-2){20}}% debug corner
+% \put (0,0){\line(1,-1){20}}% debug corner
+% \put (0,0){\line(1,-3){20}}% debug corner
+ }%
+ \end{picture}%
+ \hss}}%
+ \fi\fi
+}%
+% \DEF \@PSDEFLOSALAMOS
+% This is the PostScript definition for @LOSALAMOS, which prints
+% 'Los Alamos' when \headerfonts{postscript} is used.
+% The PostScript code is read in little chunks to avoid the problem
+% of preview crashing on the Suns with bigger chunks. Arbortext has
+% fixed the problem, but many older version of preview are still
+% being used and distributed.
+%
+\gdef\@psdeflosalamos{%
+ \special{ps::[local]%
+ /@LOSALAMOS1 {
+ % Print a hollow Los Alamos
+ %
+ /VirginState save def
+ /Helvetica-Bold findfont [ 27.7 0 0 29 0 0 ] makefont setfont
+ %
+ /YC exch neg def % y correction for label placement.
+ /XC exch def % x correction
+ } def
+ }%
+ \special{ps::[local]%
+ /@LOSALAMOS2 {
+ /MV {moveto} def
+ /SO {false charpath stroke} def
+ .5 setlinewidth
+ XC 87 add YC 716 add translate
+ %
+ } def
+ }%
+ \special{ps::[local]%
+ /@LOSALAMOS3 {
+ 0 0 MV (L) SO
+ 15.9 0 MV (o) SO
+ 31.8 0 MV (s) SO
+ 51.3 0 MV (A) SO
+ 70.2 0 MV (l) SO
+ 77 0 MV (a) SO
+ 91.4 0 MV (m) SO
+ 115 0 MV (o) SO
+ 130.9 0 MV (s) SO
+ %
+ VirginState restore
+ } def
+ }%
+}%
+% \DEF \@PSDEFCLASSLABEL
+% This is the PostScript definition for @CLASSOVERLAY, which prints
+% the classification label when \bodyfonts{postscript} is used.
+% The PostScript code is read in little chunks to avoid the problem
+% of preview crashing on the Suns with bigger chunks. Arbortext has
+% fixed the problem, but many older version of preview are still
+% being used and distributed.
+%
+\def\@psdefclasslabel{%
+ \specialbop{ps::[global]%
+ /@CLASSOVERLAY1 {
+ %
+ % Print the classification label at the top and bottom of the page.
+ %
+ /VirginState save def
+ /Topdist exch def
+ /Botdist exch def
+ dup (SECRET) eq
+ {/Space 3.5 def /X 272 def } % Dist is vert distance
+ % between the edge of the paper and the classification label.
+ {/Space 3 def /X 244 def } % Space is the space added
+ % between letters in the label. X is the distance to the left
+ % side of the label.
+ ifelse
+ /Label exch def
+ } def
+ }%
+ \specialbop{ps::[global]%
+ /@CLASSOVERLAY2 {
+ /Print { gsave Space 0 Label ashow grestore } def
+ /DoubPrint { Print StrikeWidth 0 rmoveto Print } def
+ %
+ /Scale .415888 def % The letters are scaled by this amount.
+ /StrikeWidth 1.4 def % The letters are each printed twice
+ % with this distance between the letters. Double
+ % striking is used to make the vertical portions of
+ % the letters wider.
+ } def
+ }%
+ \specialbop{ps::[global]%
+ /@CLASSOVERLAY3 {
+ /Helvetica-Bold findfont [29 Scale mul 0 0 29 0 0] makefont setfont
+ %
+ X 770 Topdist sub moveto
+ DoubPrint
+ %
+ X Botdist moveto
+ DoubPrint
+ VirginState restore
+ } def
+ }%
+}%
+% \DEF \@MAKEPSCLASSHEADER
+% Define the PostScript macro that prints the classification header
+% and footer.
+%
+\def\@makePSclassheader{%
+%
+% \@PSclasslabel invokes the PostScript command @CLASSOVERLAY
+% @CLASSOVERLAY prints the classification label in PostScript
+% in such a way as to simulate the labels on preprinted SECRET
+% or CONFIDENTIAL paper.
+%
+ \gdef\@PSclasslabel##1##2##3{%
+ \special{ps:: ##1 ##2 ##3 @CLASSOVERLAY1 @CLASSOVERLAY2 @CLASSOVERLAY3}}%
+}%
+% \DEF \@MAKEPAGETWOHEADER
+% The header for pages 2-N are put in a box because the height of
+% \@boxpagetwoheader is used to calulate \@dimentoppagetwo
+% which is used to calculate \topskip and \headsep and \textheight
+%
+\def\@makepagetwoheader{%
+ \@tokspagetwoheader={}%
+ \ifx\@useasheader\@useto
+ \@pullpagetwotoheader
+ \else\ifx\@useasheader\@useattn
+ \@tokspagetwoheader=\@toksattn
+ \else\ifx\@useasheader\@usesubject
+ \ifx\@subject\@empty\else\@tokspagetwoheader=\expandafter{\@subjectorig}\fi
+ \else
+ \@tokspagetwoheader=\expandafter{\@useasheader}%
+ \fi\fi\fi
+ \savebox{\@boxpagetwoheader}{%
+ \begin{minipage}[b]{\textwidth}%
+ % The 72pt puts the page number line at one inch down the page.
+ % The -\ht\strutbox compensates for the distance between the top
+ % of the minipage and the bottom of the top line.
+ \normalsize
+ \rule{0pt}{72pt}\rule{0pt}{-\ht\strutbox}% \rule keeps it in horiz mode
+ \parbox[t]{\@dimenpagetwoheader}{%
+ \parskip=\@parskipsave
+ \the\@tokspagetwoheader\copy\strutbox
+ \ifx\@serialnumber\@empty
+ \else
+ \ifhmode\newline\fi \@symbolserialnumber\copy\strutbox
+ \fi
+ }%
+ \copy\strutbox\hfill
+ \makebox[\@dimenpagetwoheader][r]{\hfil\@date}%
+ \end{minipage}%
+ }%
+ % Now make the distance from the bottom of the page two
+ % header to the first line of the page equal to four lines.
+ \@dimentoppagetwo=\ht\@boxpagetwoheader
+ \advance\@dimentoppagetwo by 4\baselineskip
+ \advance\@dimentoppagetwo by -\dp\strutbox
+}%
+% \DEF \@PRINTCLASSPAGE
+% The \def prints the classification label at the top and bottom of a page.
+%
+\def\@printclasspage{%
+ \ifx\@bodyfonts\@postscript
+ \ifx\@classlabel\@empty
+ \else
+ \@PSclasslabel{(\@classlabel)}{\the\@countclasssepbot }%
+ {\the\@countclassseptop }%
+ \fi
+ \vbox to 0in{}\hss
+ \else
+ \vbox to 0in{\hbox to 0pt{\usebox{\@boxclasspage}\hss}\vss}\hss
+ \fi
+}%
+% \DEF \@PRINTPAGETWOHEADER
+% The \def prints the header on page two and following pages.
+%
+\def\@printpagetwoheader{%
+ \vbox to 0in{\hbox to 0pt{\usebox{\@boxpagetwoheader}\hss}\vss}%
+}%
+% \DEF \@PRINTPAGENUM
+% The \def prints the page number on page two and following pages.
+%
+\def\@printpagenum{%
+ \vbox to 0pt{\hbox to 0pt{%
+ \begin{minipage}[b]{\textwidth}%
+ \normalsize
+ \rule{0pt}{72pt}\rule{0pt}{-\ht\strutbox}% \rule keeps it in horiz mode
+ \hfil{- \thepage\ -}\hfil
+ \end{minipage}%
+ \hss}\vss}%
+}%
+% \DEF \@PULLPAGETWOTOHEADER
+% This \def pulls the page two header from \leftto and \rightto input.
+% The first line of each address in \@toksleftto and \@toksrightto is
+% put into \@tokspagetwoheader. A \\ is put into \@tokspagetwoheader
+% after each address except for the last one.
+%
+\def\@pullpagetwotoheader{%
+ \@pullloop{leftto}%
+ \ifnum\@countrightto=0\else
+ \@addtotoks\@tokspagetwoheader\\
+ \@pullloop{rightto}%
+ \fi
+}%
+\def\@pullloop#1{%
+ \@tokstemp=\csname @toks#1\endcsname
+ \@counttemp=\csname @count#1\endcsname
+ % Pull off \@counttemp first lines from \@tokstemp
+ \loop
+ \ifnum\@counttemp>0 %
+ \@toendtopull\@tokstemp
+ \@tonewlinepull\@toksbeforeendto
+ \@tocommapull\@toksbeforenewline
+ \@addtokstotoks\@tokspagetwoheader\@toksbeforecomma
+ \ifnum\@counttemp=1\else
+ \@addtotoks\@tokspagetwoheader\\
+ \fi
+ \@tokstemp=\@toksafterendto
+ \advance\@counttemp by -1
+ \repeat
+}%
+
+
+% *************************************************************
+% **** BEGIN AND END LETTER, SHORT OR NORMAL LETTER STYLE. ****
+% *************************************************************
+
+% \DEF \@BEGINLETTER
+% If the short letter style was used, the variables are set for it.
+%
+\def\@beginletter{%
+ \@ifundefined{@shortletterstyle}{\par}%
+ {% Shortletterstyle.
+ \ifx\@typeface\@tt
+ \topsep=\baselineskip
+ \baselineskip=2\baselineskip
+ \parindent=5\@dimenwdtt
+ \leftmargini=7\@dimenwdtt
+ \else\ifx\@typeface\@rm
+ \advance\baselineskip by \parskip
+ \parindent=2.5em
+ \leftmargini=3.5em
+ \topsep=1.2em
+ \parsep=.6em
+ \itemsep=.6em
+ \fi\fi
+ \parskip=0pt
+ \leftmargin=\leftmargini
+ \par
+ }%
+}%
+% \DEF \@CLEARCLOSING
+% If there are any unprinted floats, call \clearpage.
+% This has the unfortunate effect of putting the closing information
+% on a page by itself.
+%
+\def\@clearclosing{%
+ \edef\@tempa{\@toplist\@botlist\@deferlist}%
+ \ifx\@tempa\@empty\else
+ \@ifundefined{@noclearpage}{\clearpage}{}%
+ \fi
+}%
+% \DEF \@ENDLETTER
+% If the short letter style is wanted, the variables for it are un-set.
+%
+\def\@endletter{%
+ \@ifundefined{@shortletterstyle}{\@dimenhspacesig=0pt}%
+ {%
+ \par
+ \ifnum\thepage>1 %
+ \@errorshortletter
+ \fi
+ \parindent=0em
+ \baselineskip=\@baselineskipsave
+ \parskip=\@parskipsave
+ % In shortletterstyle, put closing 3 spaces to right of center
+ \@dimenhspacesig=\textwidth
+ \divide\@dimenhspacesig by \@dimenwdtt
+ \divide\@dimenhspacesig by 2
+ \multiply\@dimenhspacesig by \@dimenwdtt
+ \advance\@dimenhspacesig by 3\@dimenwdtt
+ }%
+}%
+
+% ***********************
+% **** PRINT OPENING ****
+% ***********************
+
+% \DEF \@PRINTFIRSTPAGEHEADER
+% Prints TO: DATE: etc. headers, (but not the info from the colon on).
+%
+\def\@printfirstpageheader{%
+ \@outputlastpagetrue
+ \newpage
+ \@outputfirstpagetrue
+ \@outputlastpagefalse
+ \thispagestyle{firstpage}%
+ \normalsize
+ \begin{picture}(0,0)(\@countpictorig,\@countverticalposition)%
+ \ifx\@headerfonts\@letterpaper
+ \else
+ \@printletterpaper
+ \fi
+ \@printfirstpagerightheader
+ \end{picture}%
+ \@splitto
+ \@printingtotrue\@printto\@printingtofalse
+ \@printthruorvia{thru}%
+ \@printthruorvia{via}%
+ \@printsalutation
+ \@printsubject
+ \@printreference
+}%
+% \DEF \@PRINTLETTERPAPER
+% The preprinted part is printed.
+%
+\def\@printletterpaper{%
+% \put (0,0){\line(1,-2){40}}% debug corner
+% \put (0,0){\line(1,-1){40}}% debug corner
+% \put (0,0){\line(2,-1){40}}% debug corner
+ \ifx\@headerfonts\@postscript
+ \@dimentemp=\@dimenletterpaperhcorr
+ \@counttemp=\@dimentemp
+ \divide\@counttemp by 65536
+ \@counttemptwo=\@dimenletterpapervcorr
+ \divide\@counttemptwo by 65536
+ \@PSlosalamos{\the\@counttemp }{\the\@counttemptwo }%
+ \else
+ \@latwentyeight
+ \put (\@countleftheader,-77){\@losalamos}%
+ \fi
+ \@spectwelve
+ \put (\@countleftheader,-93){\@lanl}%
+ \put (\@countleftheader,-\@countbotheader){\@lanm}%
+ \@bookseven
+% But what about @#$% am fonts!
+% The Equal Opportunity line should stay with the classification label.
+ \@counttemptwo=767
+% Note that the Equal Op has been moved by the \@dimenletterpapervcorr
+% in the \begin{picture}.
+ \put (0,-\@counttemptwo){\makebox(0,0)[bl]{\hbox to 8.5in{%
+ \hfil An Equal Opportunity Employer/Operated
+ by the University of California\hfil}}}%
+%
+% Now print the TO, DATE, etc.
+% First print the part of the heading that is the same for thru or thruless
+%
+ \@ifundefined{@nocallouts}{%
+ \@booksix
+ \put (\@countrightcolon,-68){\makebox(0,0)[br]{DATE:}}%
+ \put (\@countrightcolon,-80){\makebox(0,0)[br]{IN REPLY REFER TO:}}%
+ \put (\@countrightcolon,-92){\makebox(0,0)[br]{MAIL STOP:}}%
+ \put (\@countrightcolon,-\@countbotheader){\makebox(0,0)[br]{TELEPHONE:}}%
+ }{}%
+}%
+% \DEF \@PRINTFIRSTPAGERIGHTHEADER
+% Print the user input for the right hand side of the first page header.
+% This will either be the callouts or the date and reference.
+%
+\def\@printfirstpagerightheader{%
+ \normalsize
+ \@ifundefined{@nocallouts}{%
+ \put (\@countrightheader,-68){\@date}%
+ \put (\@countrightheader,-80){\@symbolserialnumber}%
+ \put (\@countrightheader,-92){\@mailstop}%
+ \put (\@countrightheader,-\@countbotheader)%
+ {\parbox[t]{2.5in}{\parskip=\@parskipsave\the\@tokstelephone}}%
+ }{%
+ \put (\@countrightheader,-\@countbotheader){\parbox[b]{2.5in}{%
+ \parskip=\@parskipsave\ignorespaces\@date
+ \\Ref\@: \ignorespaces\@symbolserialnumber
+}}}}%
+% \DEF \@SPLITTO
+% This macro figures out how to split \@toksto into \@toksleftto and
+% \@toksrightto. If \@countto=0, \@toksleftto and \@toksrightto are
+% used as is. If 1 <= \@countto <= 2 \@toksto is put into \@toksleftto.
+% If \@countto > 2 \@toksto is divided between \@toksleftto and
+% \@toksrightto, with the extra address put into \@toksleftto if
+% \@countto is an odd number.
+% On exit, \@toksto is left empty, and \@countto=0.
+%
+\def\@splitto{%
+ \ifnum\@countto=0 %
+ \else\ifnum\@countto<3 %
+ \@toksleftto=\@toksto
+ \@countleftto=\@countto
+ \@toksrightto={}%
+ \@countrightto=0
+ \else
+ \@countrightto=\@countto \divide\@countrightto by 2
+ \@countleftto=\@countto \advance\@countleftto by -\@countrightto
+ % Pull off \@countleftto addresses from \@toksto
+ \@toksleftto={}%
+ \@counttemp=\@countleftto
+ \@tokstemp=\@toksto
+ \loop
+ \@toendtopull\@tokstemp
+ \@addtokstotoks\@toksleftto\@toksbeforeendto
+ \@addtotoks\@toksleftto\@endto
+ \@tokstemp=\@toksafterendto
+ \advance\@counttemp by -1
+ \ifnum\@counttemp>0 %
+ \repeat
+ \@toksrightto=\@tokstemp
+ \fi\fi
+ \@toksto={}\@countto=0
+}%
+% \DEF \@PRINTTO
+\def\@printto{%
+ \newline
+ \@dimentemp=\@countbotheader pt
+ \advance\@dimentemp by \@dimenletterpapervcorr
+ \advance\@dimentemp by 3\baselineskip
+ \advance\@dimentemp by -\ht\strutbox
+ \advance\@dimentemp by \@dimenexpandtopmargin
+ \vrule height \the\@dimentemp width0pt
+ % \@everyindenttrue causes the \@item macro to indent every paragraph in
+ % an \item, including the first paragraph. The indent here will make
+ % wrap-around addresses indent on subsequent lines.
+ \@everyindenttrue
+ \vbox to 0pt{%
+ \hbox{%
+ \@dimentemp=\textwidth
+ \ifnum\@countrightto=0 %
+ \parbox[t]{\@dimentemp}%
+ {\parskip=\@parskipsave
+ \ifnum\@countleftto>0 \@maketocol{leftto}\fi \mbox{}}%
+ \else
+ \advance\@dimentemp by -\@dimentocolsep
+ \divide\@dimentemp by 2
+ \parbox[t]{\@dimentemp}%
+ {\parskip=\@parskipsave
+ \ifnum\@countleftto>0 \@maketocol{leftto}\fi \mbox{}}%
+ \hskip\@dimentocolsep
+ \parbox[t]{\@dimentemp}%
+ {\parskip=\@parskipsave\@maketocol{rightto}\mbox{}}%
+ \fi
+ }%
+ }%
+ \@everyindentfalse
+ \newline
+ % Make distance to comp close \parskip + \@bodysep
+ \vspace{-\baselineskip}%
+ \vspace{-\parskip}%
+ \vspace{\@bodysep}%
+ \mbox{}%
+}%
+% \DEF \@MAKETOCOL
+%
+% Makes a column of to (addresses).
+% It's called with {leftto} or {rightto}
+% This is done in the list environment so that long lines will be
+% reverse indented (first line sticks out to the left).
+%
+\def\@maketocol#1{%
+ \@tokscoltemp=\csname @toks#1\endcsname
+ \@countcoltemp=\csname @count#1\endcsname
+ % Save \@countcoltemp to reset on exit from \@maketocol.
+ \@counttemptwo=\@countcoltemp
+ \begin{list}{}{\parsep=0pt\itemsep=\parskip\listparindent=-2\@dimenwdtt
+ \topsep=0pt\leftmargin=-\listparindent}%
+ % Goes thru longloop once per address.
+ \longloop
+ \ifnum\@countcoltemp>0 %
+ \advance\@countcoltemp by -1
+ \@toendtopull\@tokscoltemp
+ \@tokscoltemp=\@toksafterendto
+ % Write this address to the .mlb file, to be used later for printing
+ % mailing labels.
+ \@writeonelabel{\the\@toksbeforeendto}%
+ \item
+ \leavevmode\copy\strutbox
+ % Goes thru innerloop once per printed line.
+ \innerloop
+ \@tonewlinepull\@toksbeforeendto
+ % Save \@toksafternewline into \@toksaftersave; \the\@toksbeforenewline
+ % can send execution off to \def\attn and then to \def\@toksinput.
+ % \@toksinput resets \@toksafternewline.
+ \@toksaftersave=\@toksafternewline
+ % Print the next line of the address.
+ \ignorespaces\the\@toksbeforenewline
+ \copy\strutbox
+ \@toksnotequal\@toksaftersave\@toksempty
+ \if@toksnotequal
+ \par
+ \@toksbeforeendto=\@toksaftersave
+ \innerrepeat
+ \longrepeat
+ \end{list}%
+ \@countcoltemp=\@counttemptwo
+}%
+% \DEF \LONGLOOP, \LONGINNERLOOP, \INNERITERATE
+%
+% These defs are used by \@maketocol instead of plain.tex's normal loops.
+% \longloop makes it possible to output \par tokens while in the loop.
+% \innerloop and \inneriterate are used as inner loops.
+%
+\long\def\longloop#1\longrepeat{\def\longbody{#1}\longiterate}%
+\def\longiterate{\longbody \let\next\longiterate \else\let\next\relax\fi \next}%
+\let\longrepeat=\fi% this makes \longloop...\if...\longrepeat skippable
+%
+\long\def\innerloop#1\innerrepeat{\def\innerbody{#1}\inneriterate}%
+\def\inneriterate{\innerbody \let\next\inneriterate
+ \else\let\next\relax\fi \next}%
+\let\innerrepeat=\fi% this makes \innerloop...\if...\innerrepeat skippable
+%
+% \DEF \@PRINTSALUTATION
+% Print the salutation
+%
+\def\@printsalutation{%
+ \@ifemptyorundefined{@salutation}{}{%
+ \par
+ \@salutation
+}}%
+% \DEF \@PRINTTHRUORVIA
+% Print the THRU or VIA list if \@countthru or \@countvia > 0
+%
+\def\@printthruorvia#1{%
+ \@tokstemp=\csname @toks#1\endcsname
+ \@counttemp=\csname @count#1\endcsname
+ \ifnum\@counttemp=0 %
+ \else
+ \longloop
+ \@toendtopull\@tokstemp
+ \par
+ \begin{list}{\copy\strutbox \uppercase{#1}:\hfill}{%
+ \settowidth\labelwidth{\uppercase{#1}: }%
+ \leftmargin=\labelwidth
+ \topsep=0pt
+ \labelsep=0pt}%
+ \item\the\@toksbeforeendto
+ \end{list}%
+ \@toksnotequal\@toksafterendto\@toksempty
+ \if@toksnotequal
+ \@tokstemp=\@toksafterendto
+ \longrepeat
+ \fi}%
+%
+% \DEF \@PRINTSUBJECT
+% Print the SUBJECT list if \@subject is not empty.
+%
+\def\@printsubject{%
+ \par
+ \ifx\@subject\@empty\else
+ \begin{list}{\copy\strutbox SUBJECT:\hfill}{%
+ \settowidth\labelwidth{SUBJECT\@: }%
+ \leftmargin=\labelwidth
+ \topsep=0pt
+ \labelsep=0pt}%
+ \item\@subject
+ \end{list}%
+ \fi
+}%
+% \DEF \@PRINTREFERENCE
+% This prints the reference.
+%
+\def\@printreference{%
+ \par
+ \ifnum\@countreference=0 %
+ \else
+ \ifnum\@countreference=1 %
+ REFERENCE:\relax
+ \else
+ REFERENCES:\relax
+ \fi
+ \par\vspace{-\baselineskip}% Begin list on same line as REFERENCE:
+%
+% No number for one item lists
+%
+ \begin{list}{\ifnum\@countreference=1\else\arabic{@countlist}.\fi}{%
+ \topsep=0pt\itemsep=0pt\parsep=0pt
+ \ifnum\@countreference=1 %
+ \settowidth\leftmargin{REFERENCE\@: }%
+ \else
+ \settowidth\leftmargin{REFERENCES\@: }%
+ \fi
+ \@setnumdefaults\@countreference
+ }%
+ \@printnumberedlist{\@toksreference}%
+ \end{list}%
+ \fi
+}%
+
+% ************************
+% **** PRINT CLOSING. ****
+% ************************
+
+% \DEF \@PRINTCOMPCLOSE
+% Print complimentary close.
+%
+\def\@printcompclose{%
+ \par
+ % Make distance to comp close \parskip + \@bodysep
+ \vspace{\@bodysep}%
+ \@complimentaryclose
+}%
+% \DEF \@PRINTSIGNATURE
+% Leave space for the signature and print the signature line.
+%
+\def\@printsignature{%
+ \par
+ \@ifemptyorundefined{@signature}{}{{%
+ \samepage
+ \vspace*{2\baselineskip}%
+ \@signature
+}}}%
+% \DEF \@PRINTORIGINATORLINE
+% Print the signer, originator, and typist.
+%
+\def\@printoriginatorline{%
+ \@ifemptyorundefined{@signature}{\nopagebreak}{}%
+ \par
+ \ifx\@signer\@empty
+ \else
+ \@signer
+ \ifx\@originator\@empty
+ \ifx\@typist\@empty \else :\relax \fi
+ \else
+ -\relax
+ \fi
+ \fi
+ \ifx\@originator\@empty
+ \else
+ \@originator
+ \ifx\@typist\@empty \else :\relax \fi
+ \fi
+ \ifx\@typist\@empty
+ \else
+ \@typist
+ \fi
+}%
+% \DEF \@PRINTENCLOSURES
+% Now print the enclosures
+%
+\def\@printenc{%
+ \@ifundefined{@encas}{}{%
+ \ifnum\@countenc=0 %
+ \par Enc.\ a/s%
+ \else \@erroras\enc\encas{Enc. a/s}%
+ \fi}%
+ \ifnum\@countenc=0 %
+ \else
+ \par
+ \@ifundefined{@encpagebreak}{}{\pagebreak}%
+ \ifnum\@countenc=1 %
+ Enclosure:\relax
+ \else
+ Enc.\relax
+ \fi
+ \nopagebreak
+ \par\vspace{-\baselineskip}%
+%
+% No number for one item lists
+%
+ \@countletterlist=\@countenc
+ \begin{list}{\ifnum\@countenc=1\else\arabic{@countlist}.\fi}{%
+ \ifnum\@countenc=1 %
+ \settowidth\leftmargin{Enclosure: }%
+ \else
+ \settowidth\leftmargin{Enc.\ }%
+ \fi
+ \@setnumdefaults\@countenc
+ \topsep=0pt\itemsep=0pt\parsep=0pt
+ }%
+ \@printnumberedlist{\@toksenc}%
+ \end{list}%
+ \fi
+}%
+% \DEF \@PRINTATTACHMENTS
+% Now print the attachments
+%
+\def\@printattachments{%
+ \@ifundefined{@attachmentas}%
+ % No \attachmentas
+ {\@ifundefined{@attachmentsas}{}%
+ % \@attachmentsas and not \@attachmentas
+ {\ifnum\@countattachments=0 %
+ \par Attachments a/s%
+ \else \@erroras\attachments\attachmentsas{Attachments a/s}\fi}}%
+ % Yes, \attachmentas
+ {\@ifundefined{@attachmentsas}%
+ % \@attachmentas and not \@attachmentsas
+ {\ifnum\@countattachments=0 %
+ \par Attachment a/s%
+ \else\@erroras\attachments\attachmentas{Attachment a/s}\fi}%
+ % \@attachmentas and \@attachmentsas
+ {\par Attachments a/s%
+ \@erroras\attachmentas\attachmentsas{Attachment a/s}}}%
+ \ifnum\@countattachments=0 %
+ \else
+ \par
+ \@ifundefined{@attachmentspagebreak}{}{\pagebreak}%
+ \ifnum\@countattachments=1 %
+ Attachment:\relax
+ \else
+ Attachments:\relax
+ \fi
+%
+% No number for one item lists
+%
+ \@countletterlist=\@countattachments
+ \begin{list}{\ifnum\@countattachments=1\else\arabic{@countlist}.\fi}{%
+ \leftmargin=0pt
+ \@setnumdefaults\@countattachments
+ }%
+ \@printnumberedlist{\@toksattachments}%
+ \end{list}%
+ \fi
+}%
+% \DEF \@PRINTDISTRIBUTION
+% Now the distribution list
+%
+\def\@printdistribution{%
+ \ifnum\@countdistribution=0 %
+ \else
+ \par
+ \@ifundefined{@distributionpagebreak}{}{\pagebreak}%
+ {\offinterlineskip Distribution:\copy\strutbox}%
+ \@countletterlist=\@countdistribution
+ \begin{list}{}{%
+ \topsep=0pt\itemsep=0pt\parsep=0pt
+ \parskip=0pt\labelsep=0pt\labelwidth=0pt\leftmargin=0pt
+ }%
+ \item\the\@toksdistribution
+ \end{list}%
+ \fi
+}%
+% \DEF \@PRINTCY
+% Print the Cy list if \@countcy > 0
+%
+\def\@printcy{%
+ \ifnum\@countcy=0 %
+ \else
+ \pagebreak[0]%
+ \par
+ \@ifundefined{@cypagebreak}{}{\pagebreak}%
+ \begin{list}{Cy:\hfill}{%
+ \settowidth\labelwidth{Cy: }%
+ \leftmargin=\labelwidth
+ \topsep=0pt\itemsep=0pt\parsep=0pt
+ \labelsep=0pt
+ }%
+ \item\the\@tokscy
+ \end{list}%
+ \fi
+}%
+
+% ************************************
+% **** NUMBERED LISTS FOR CLOSING ****
+% ************************************
+
+% \DEF \@SETNUMDEFAULTS
+% Set defaults for numbered lists. #1 is the number of
+% items in the list.
+%
+\def\@setnumdefaults#1{%
+ \ifnum #1=1 %
+ \labelwidth=0pt% No number for one item list
+ \labelsep=0pt
+ \else
+ \usecounter{@countlist}%
+ \ifnum #1<10 %
+ \settowidth\labelwidth{8.}% Between 2 and 9 items.
+ \else
+ \settowidth\labelwidth{88.}% 10 or more.
+ \fi\fi
+ \addtolength\leftmargin\labelwidth
+ \addtolength\leftmargin\labelsep
+ \topsep=0pt\itemsep=0pt\parsep=0pt
+ \setlength\parskip{0pt}%
+}%
+% \DEF \@PRINTNUMBEREDLIST
+% This prints a numbered list as is used to print reference,
+% attachments, and enclosures.
+%
+\def\@printnumberedlist#1{%
+ \@toksremaining=#1%
+ \loop
+ \@tonewlinepull{\@toksremaining}%
+ \@toksnotequal\@toksbeforenewline\@toksempty
+ \if@toksnotequal
+ \@toksitem=\@toksbeforenewline
+ \@toksremaining=\@toksafternewline
+ \ifx #1\@toksreference% Make reference list uppercase
+ \item\uppercase\expandafter{\the\@toksitem}%
+ \else
+ \item\the\@toksitem
+ \fi
+ \repeat
+}%
+
+% *****************
+% **** PARSING ****
+% *****************
+
+% \DEF \@TONEWLINEPULL \DEF \@TONEWLINEPULLSUBONE, etc.
+% Put the tokens in #1 before the first \\ into \@toksbeforenewline.
+% Put the tokens in #1 after the firrst \\ into \@toksafternewline.
+% \@newlinetrue if there was a \\ in the token #1.
+%
+\def\@tonewlinepull#1{\let\@nlsave=\\\let\\=\relax
+ \expandafter\@tonewlinepullone\the#1\\\@empty
+ \if@newline\expandafter\@tonewlinepullthree\the#1\@empty
+ \else\fi\let\\=\@nlsave}%
+\def\@tonewlinepullone#1\\{\@toksbeforenewline={#1}%
+ \futurelet\next\@tonewlinepulltwo}%
+\def\@tonewlinepulltwo#1\@empty{\@toksafternewline={#1}%
+ \ifx\@empty\next\@newlinefalse
+ \else\@newlinetrue\fi}%
+\def\@tonewlinepullthree#1\\{\@toksbeforenewline={#1}%
+ \futurelet\next\@tonewlinepullfour}%
+\def\@tonewlinepullfour#1\@empty{\@toksafternewline={#1}%
+ \ifx\@empty\next\@newlinefalse
+ \else\@newlinetrue\fi}%
+
+% \DEF \@TOCOMMAPULL \DEF \@TOCOMMAPULLSUB, etc.
+% Put the tokens in #1 before the first "," into \@toksbeforecomma.
+% \@commatrue if there was a "," in the token #1.
+%
+\def\@tocommapull#1{\expandafter\@tocommapullone\the#1,\@empty}%
+\def\@tocommapullone#1,{\@toksbeforecomma={#1}%
+ \futurelet\next\@tocommapulltwo}%
+\def\@tocommapulltwo#1\@empty{\ifx\@empty\next \@commafalse
+ \else \@commatrue \fi}%
+
+% \DEF \@TOENDTOPULL \DEF \@TOENDTOPULLSUBONE, etc.
+% Put the tokens in #1 before the first \@endto into \@toksbeforeendto.
+% Put the tokens in #1 after the first \@endto into \@toksafterendto.
+% We are counting on finding a \@endto in \the#1.
+%
+\def\@toendtopull#1{\expandafter\@toendtopullone\the#1\@empty}%
+\def\@toendtopullone#1\@endto#2\@empty{\@toksbeforeendto={#1}%
+ \@toksafterendto={#2}}%
+
+% \DEF \@UNSPACELEFT
+% Gets rid of a space at the beginning of a macro definition.
+% \def\word{ xx }
+% \@unspaceleft\word
+% results in \def\word{xx }
+%
+\def\@unspaceleft#1{%
+ \def\@macroname{#1}%
+ \ifx #1\@empty
+ \else
+ \ifx #1\@blank
+ \global\expandafter\def\@macroname{}%
+ \else
+ % If #1 is not blank or empty, call \@unspaceleftone
+ \expandafter\@unspaceleftone#1\relax\relax\@empty
+ \fi\fi
+}%
+ % The use of #1 as a parameter in @unspaceleftone ignores a leading blank.
+\def\@unspaceleftone#1#2\relax{%
+ \global\expandafter\def\@macroname{#1#2}%
+ \@unspacelefttwo}%
+\def\@unspacelefttwo#1\@empty{}%
+
+% \DEF \@UPPERUNSPACELEFT
+% Gets rid of a space at the beginning of a macro definition and returns
+% uppercase.
+% \def\word{ xx }
+% \@upperunspaceleft\word
+% results in \def\word{\uppercase{xx }}
+%
+\def\@upperunspaceleft#1{%
+ \def\@macroname{#1}%
+ \ifx #1\@empty
+ \else
+ \ifx #1\@blank
+ \global\expandafter\def\@macroname{}%
+ \else
+ % If #1 is not blank or empty, call \@upperunspaceleftone
+ \expandafter\@upperunspaceleftone#1\relax\relax\@empty
+ \fi\fi
+}%
+ % #1 as a parameter in @upperunspaceleftone ignores a leading blank.
+\def\@upperunspaceleftone#1#2\relax{%
+ \global\expandafter\def\@macroname{\uppercase{#1#2}}%
+ \@unspacelefttwo}%
+%\def\@unspacelefttwo#1\@empty{}%
+
+% \DEF \@UNSPACERIGHT
+% Gets rid of a space at the end of a macro definition.
+% \def\word{ xx }
+% \@unspaceright\word
+% results in \def\word{ xx}
+%
+\def\@unspaceright#1{%
+ \def\@macroname{#1}%
+ % Save the original definition of #1.
+ \edef\@temp{#1}%
+ % \@unspacerightone will find the first \relax if #1 ends in a blank.
+ % Otherwise it will find the second \relax and set \next to \@empty.
+ \expandafter\@unspacerightone#1\relax{} \relax\@empty
+}%
+\def\@unspacerightone#1 \relax{%
+ \global\expandafter\edef\@macroname{#1}%
+ \futurelet\next\@unspacerighttwo}%
+\def\@unspacerighttwo#1\@empty{%
+ \ifx\@empty\next
+ \global\expandafter\edef\@macroname{\@temp}%
+ \fi
+}%
+
+% ****************************************************************
+% **** UTILITIES FOR MASSAGING TOKEN AND DIMENSION VARIABLES. ****
+% ****************************************************************
+% \DEF \@ADDTOTOKS
+% addtotoks takes the current token variable #1 and appends the
+% tokens in #2. #1 must be a token variable defined by \newtoks
+% For example, if \toks={abc}
+% \@addtotoks{\toks}{DEF\xx} will result in \toks={abcDEF\xx}
+%
+\def\@addtotoks#1#2{#1=\expandafter{\the#1#2}}%
+%
+% \DEF \@ADDTOKSTOTOKS
+% addtokstotoks takes the current token variable #1 and appends the
+% token variable #2 to it, putting the result into token variable #1.
+% For example, if \toksone={abc} and \tokstwo={xyz},
+% \@addtokstotoks\toksone\tokstwo will result in \toksone={abcxyz}
+\def\@addtokstotoks#1#2{\edef\@deftemp{\the#1\the#2}%
+ \global#1=\expandafter{\@deftemp}}%
+%
+% \DEF \@IFEMPTYORUNDEFINED
+% Like LaTeX's \@ifundefined, except that #2 will also be
+% executed if \#1 is empty or blank.
+%
+\long\def\@ifemptyorundefined#1#2#3{%
+ \expandafter\ifx\csname#1\endcsname\relax#2
+ \else\expandafter\ifx\csname#1\endcsname\@empty#2
+ \else\expandafter\ifx\csname#1\endcsname\@blank#2
+ \else#3\fi\fi\fi}
+%
+% \DEF \@IFNOINFO
+% \@ifnoinfo{#1}{\actionone}{\actiontwo}
+% performs \actionone if #1 is empty or blank,
+% otherwise performs \actiontwo
+\def\@ifnoinfo#1#2#3{\def\@deftemp{#1}%
+ \ifx\@deftemp\@empty#2\else\ifx\@deftemp\@blank#2\else#3\fi\fi}
+%
+% \DEF \@TOKSNOTEQUAL \DEF \@TOKSEQUAL
+% \@toksnotequal compares two token variables and returns \@toksnotequaltrue
+% if they are the different. Eg, \toks1={a\b c}\toks2={a\b}
+% \@toksnotequal{\toks1}{\toks2} returns \@toksnotequaltrue
+% \@toksequal works in a similar manner.
+%
+\def\@toksnotequal#1#2{\begingroup\edef\one{\the#1}\edef\two{\the#2}%
+ \ifx\one\two\global\@toksnotequalfalse\else\global\@toksnotequaltrue\fi
+ \endgroup}%
+% \def\@toksequal#1#2{\begingroup\edef\one{\the#1}\edef\two{\the#2}%
+% \ifx\one\two\global\@toksequaltrue\else\global\@toksequalfalse\fi\endgroup}%
+%
+% \DEF \@ADVCOUNTBYDIMEN
+% A count variable is advanced by a dimension variable expressed in points.
+% For example, if \countx=10 and \dimenx=2pt, then
+% \@advcountbydimen\countx\dimenx
+% leaves \countx=12 and \dimenx=2pt
+%
+\def\@advcountbydimen#1#2{\@counttemp=#2%
+ \divide\@counttemp by 65536 \advance#1by \@counttemp}%
+% \divide\@counttemp by 65536 \global\advance#1by \@counttemp}%
+%
+% \DEF \@GLOBALADVCOUNTBYDIMEN
+% A count variable is globally advanced by a dimension variable
+% expressed in points.
+%
+\def\@globaladvcountbydimen#1#2{\@counttemp=#2%
+ \divide\@counttemp by 65536 \global\advance#1by \@counttemp}%
+%
+% \DEF \@NOTVOIDTOKS
+% \@notvoidtokstrue if there is at least one token in the variable #1.
+%
+\def\@notvoidtoks#1{\@addtotoks{#1}{\@empty}%
+ \expandafter\@notvoidtoksone\the#1}%
+\def\@notvoidtoksone{\futurelet\next\@notvoidtokstwo}%
+\def\@notvoidtokstwo#1\@empty{\ifx\@empty\next \@notvoidtoksfalse
+ \else \@notvoidtokstrue \fi}%
+
+% ****************
+% **** LABELS ****
+% ****************
+
+% The \makemaillabels declaration causes mailing labels to be made. It must
+% go before the \begin{document} command.
+%
+% Commands for generating the labels are put on the .MLB file, which is
+% read in and processed by the \end{document} command.
+%
+% Much of the following code is taken from Lamport's letter macros.
+
+% The following default values set things up for producing
+% labels in two columns of seven 1-1/2" X 4" labels each,
+% suitable for reproducing onto Avery brand number 5362 address
+% labels.
+
+% For 1" labels, use
+%\maillabelheight{1in}
+%\maillabeltopmargin{.5in}
+
+% For 1 1/2" labels, use
+%\maillabelheight{1.5in}
+%\maillabeltopmargin{.25in}
+
+% For 2" labels,use
+%\maillabelheight{2in}
+%\maillabeltopmargin{.5in}
+
+\maillabelheight{}
+\maillabeltopmargin{}
+
+% \DEF \@STARTLABELS
+%
+% Resets page layout variables for printing labels.
+%
+\def\@startlabels{%
+ \baselineskip=0pt
+ \lineskip=0pt
+ \pagestyle{empty}
+ \let\@texttop=\relax
+ \topmargin=-72pt
+ \advance\topmargin by\@dimenmaillabeltopmargin
+ \headsep 0pt
+ \oddsidemargin -35pt
+ \evensidemargin -35pt
+ \textheight 11in
+ \advance\textheight by-\@dimenmaillabeltopmargin
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \textwidth 550pt
+ \columnsep 25pt
+ \xpt
+ \raggedbottom
+ \boxmaxdepth=0pt
+ \parindent=0pt %% corrected 3/5/86
+ \twocolumn\relax
+ % Write \@countskiplabels blank labels
+ \loop
+ \ifnum\@countskiplabels>0
+ \@mlabel{}%
+ \advance\@countskiplabels by -1
+ \repeat
+}
+% \DEF \@MLABEL
+% Prints one label.
+%
+\def\@mlabel#1{%
+ \setbox0\vbox{\parbox[b]{3.6in}%
+ {\strut\@printingtotrue\ignorespaces #1}}%
+ \vbox to \the\@dimenmaillabelheight{\vss \box0 \vss}}%
+
+% \DEF \@WRITEONELABEL
+%
+% One label is written to the .MLB file.
+%
+\def\@writeonelabel#1{%
+ \if@makemaillabels
+ \begingroup
+ \def\protect{\string}
+ \let\\=\relax
+ \def\protect##1{\string##1\space}
+ \immediate\write\@mlbout{\string\@mlabel{#1}}%
+ \ifnum\@countreturnaddress=0\else
+ \immediate\write\@mlbout{\string\@mlabel{\the\@toksreturnaddress}}%
+ \fi
+ \endgroup
+ \fi}
+
+% ************************
+% **** ERROR MESSAGES ****
+% ************************
+
+\def\@eightspaces{\space\space\space\space\space\space\space\space}%
+\def\@errorundeclared#1{\typeout{^^JWarning: you have not called \protect #1
+ before calling \protect\opening.^^J}}%
+\def\@errorundeclaredcallout#1{\typeout{^^JWarning: you have not specified
+ the callout \protect #1^^J
+ \@eightspaces before calling \protect\opening.^^J}}%
+\def\@errorundeclaredto{\typeout{^^JWarning: you have not specified
+ an address
+ before calling \protect\opening.^^J^^J
+ \@eightspaces Use \protect\to\space to specify an address,
+ for example^^J^^J
+ \@eightspaces \protect\to{Vieno Severi Alanne \protect\\^^J
+ \@eightspaces 414 Rio Seco \protect\\^^J
+ \@eightspaces Santa Fe, NM 87501}^^J}}%
+\def\@errorshowexample#1#2{\typeout{\@eightspaces\space For example, use^^J^^J
+ \@eightspaces\protect #1{#2}^^J}}%
+\def\@errorundeclaredsalutation{\typeout{^^JWarning: you have not called
+ \protect\salutation\space before calling \protect\opening.^^J}%
+ \@errorshowexample{\salutation}{Dear Henry,}}%
+\def\@errorundeclaredcompclose{\typeout{^^JWarning: you have not called
+ \protect\complimentaryclose\space before calling \protect\opening.^^J
+ \@eightspaces\protect\complimentaryclose{Sincerely Yours,}
+ will be used by default.^^J}}%
+\def\@errorserialnosymbol{\typeout{^^JWarning: you have called
+ \protect\serialnumber, but you have not called \protect\symbol.^^J}%
+ \@errorshowexample{\symbol}{C-2}}%
+\def\@errortoleftrightto{\typeout{%
+ ^^JWarning: you have called \protect\leftto\space
+ and/or \protect\rightto\space as well as \protect\to.^^J
+ \@eightspaces All addresses called by \protect\to\space will be printed in
+ the left column.^^J}}%
+\def\@erroruseas#1#2{\typeout{^^JWarning: you specified
+ \protect\use#1asheader,^^J
+ \@eightspaces yet you have not specified \protect#2.^^J^^J
+ \@eightspaces The first line of the addressee will be used ^^J
+ \@eightspaces on headers after page one.^^J}}%
+\def\@errorattn{\typeout{^^JWarning: \protect\attn\space must be used only
+ within the argument of \protect\to, for example,^^J^^J
+ \@eightspaces \protect\to{Genie Electronics \protect\\ ^^J
+ \@eightspaces \protect\attn{Mr. Robert Mercer, Sales Manager} \protect\\ ^^J
+ \@eightspaces P.O. Box 8501 \protect\\ ^^J
+ \@eightspaces Midwest City, OK 73110}^^J}}%
+\def\@errorthruandvia{\typeout{^^JWarning: you have used both
+ \protect\thru\space and \protect\via\space in this letter.^^J
+ \@eightspaces Use one or the other, but not both.}}%
+\def\@errorclassargument{%
+ \typeout{^^JFatal error: \protect\classlabel{\@classlabel}
+ calls for an invalid classification label.^^J}%
+ \@errorclassmessage}%
+\def\@errortwoclasses{%
+ \typeout{^^JFatal error: you have called \protect\classlabel \space
+ more than once, or you have^^J
+ \@eightspaces\space\space\space\space called
+ \protect\classlabel \space after having called
+ \protect\begin{document}.^^J^^J
+ \space You are allowed to declare only one classification label
+ per letter.^^J
+ \space You must call \protect\classlabel\space before using
+ \protect\begin{document}.^^J}%
+ \@errorclassmessage}%
+\def\@errorclassmessage{%
+ \typeout{%
+ \space\space To print CONFIDENTIAL on the top and bottom
+ of your letter,^^J
+ \space use \protect\classlabel{c}^^J^^J
+ \space To print SECRET on the top and bottom
+ of your letter,^^J
+ \space use \protect\classlabel{s}^^J^^J
+ \space To print UNCLASSIFIED on the top and bottom
+ of your letter,^^J
+ \space use \protect\classlabel{u}^^J^^J
+ \space If you do not want a classification label on your letter,^^J
+ \space use \protect\classlabel{}^^J
+ \space or do not use the \protect\classlabel\space command.^^J^^J
+ \space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegaltypeface{%
+ \typeout{^^JFatal error: \protect\typeface{\@typeface} calls for an invalid
+ typeface.^^J^^J
+ \space Use \protect\typeface{tt} or \protect\typeface{rm}^^J^^J
+ \space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegalheaderfont{\def\@fontcommand{\protect\headerfonts}%
+ \def\@fontarg{\@headerfonts}%
+ \typeout{^^JFatal error: \@fontcommand{\@fontarg} calls for
+ an invalid font.^^J^^J
+ \space Use \@fontcommand{lafonts}, \@fontcommand{texfonts},^^J
+ \space or \@fontcommand{postscript}\space
+ depending on what fonts^^J \space are available on your machine.^^J^^J
+ \space Using \@fontcommand{} will give you the default fonts.^^J^^J
+ \space Use \@fontcommand{letterpaper} if you wish to print your letter^^J
+ \space on pre-printed letter paper.^^J^^J
+ \space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegalbodyfont{\def\@fontcommand{\protect\bodyfonts}%
+ \def\@fontarg{\@bodyfonts}%
+ \typeout{^^JFatal error: \@fontcommand{\@fontarg} calls
+ for an invalid font.^^J^^J
+ \space Use \@fontcommand{texfonts} or \@fontcommand{postscript}^^J
+ \space depending on what fonts are available on your machine.^^J^^J
+ \space Using \@fontcommand{} will give you the default fonts.^^J^^J
+ \space Change your file, and rerun LaTeX.^^J}}%
+\def\@erroramfonts{%
+ \typeout{^^JWarning: You are using the obsolete Almost Modern (AM)
+ fonts.^^J^^J
+ \@eightspaces Only cursory debugging has been attempted using AM fonts.^^J
+ \@eightspaces The Computer Modern (CM) fonts are fully supported
+ by laletter.^^J}}%
+\def\@erroroldlafonts{%
+ \typeout{^^JFatal error: Your system is using an obsolete version
+ of lafonts.^^J^^J
+ \@eightspaces Get the manual called "TeX Fonts for Los Alamos
+ Memos and Letters^^J
+ \@eightspaces Installation Reference," CIC \protect##1128,
+ from the Computer^^J
+ \@eightspaces Information Center, 667-6992.^^J}}%
+\def\@errorshortletter{%
+ \typeout{^^JWarning: Use of the \protect\shortletterstyle\space macro
+ is intended^^J
+ \@eightspaces for use with letters of ten lines or less.^^J^^J}}%
+\def\@erroras#1#2#3{%
+ \typeout{^^JWarning: You have used both \protect#1\space and
+ \protect#2.^^J
+ \@eightspaces Use one or the other but not both.^^J
+ \@eightspaces "#3" will not be printed on this letter.^^J^^J}}%
+
+% ***********************
+% **** DEATH UTILITY ****
+% ***********************
+
+% \DEF \@TODIEORNOTTODIE
+% The \@todieornottodie macro is initialized here.
+% If a fatal error occurs, it will be equipped with a suitable
+% error message and an \@exit call. \@todieornottodie will then be called
+% once the \fi and \endgroups have all been passed. This prevents the
+% printing of confusing error messages.
+%
+\def\@todieornottodie{\relax}%
+
+% \DEF \@EXIT
+% @exit terminates the job prematurely.
+\def\@exit{\@fileswfalse\@makemaillabelsfalse\end{document}}%
+% \DEF \@EXITFI
+% @exitfi finishes an \if and terminates the job prematurely.
+\def\@exitfi{\@fileswfalse\@makemaillabelsfalse\fi\end{document}}%
+
+% ***********************************************************************
+% **** ARBORTEXT'S SPECIALBOP (BEGINNING OF PAGE) FOR USE WITH DVIPS ****
+% ***********************************************************************
+
+\def\@specialbopempty{}%
+\let\@specialboptext=\@specialbopempty
+%
+% \DEF \SPECIALBOP
+% Stands for \SPECIAL-Beginning-Of-Page, supplied by Arbortext.
+%
+\def\specialbop#1{%
+ \xdef\@specialboptext{%
+ \@specialboptext
+ \special{#1}%
+}}%
+\def\@specialbopemit{% (used by the \output routine)
+ \ifx\@specialboptext\@specialbopempty
+ \else
+ \@specialboptext
+ \global\let\@specialboptext=\@specialbopempty
+ \fi
+}%
+
+% ***************************************************************************
+% **** REDEFINE LATEX.TEX'S \@ITEM FOR NICE PAGEBREAKS IN \CLOSING LISTS ****
+% ***************************************************************************
+
+% \DEF \@ITEM
+%
+% This is mostly copied from latex.tex.
+% The penalties have been altered so that lists in the \closing of
+% a letter will not leave clubs and widows.
+% The first 3 lines and the last 2 lines are kept on the same page.
+%
+\def\@item[#1]{%
+ \if@noparitem \@donoparitem
+ \else \if@inlabel \indent \par \fi
+ \ifhmode \unskip\unskip \par \fi
+ \if@newlist \if@nobreak \@nbitem \else
+ {% LETTER CHANGES begin here
+ \if@closing
+ \@beginparpenalty=10000
+ \fi
+ \addpenalty\@beginparpenalty
+ }% LETTER CHANGES end here
+ \addvspace\@topsep \addvspace{-\parskip}\fi
+ \else
+ {% LETTER CHANGES begin here
+ \if@closing
+ \ifnum\c@@countlist=1 %
+ \@itempenalty=10000
+ \fi
+ \advance \@countletterlist by -1
+ \ifnum\c@@countlist=\@countletterlist
+ \@itempenalty=10000
+ \fi
+ \fi
+ \addpenalty\@itempenalty
+ }% LETTER CHANGES end here
+ \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+ \fi
+ \everypar{\global\@minipagefalse\global\@newlistfalse
+ \if@inlabel\global\@inlabelfalse
+ \if@everyindent\else% LETTER CHANGES
+ \hskip -\parindent
+ \fi% LETTER CHANGES
+ \box\@labels
+ \penalty\z@ \fi
+ \everypar{}}\global\@nobreakfalse
+ \if@noitemarg\@noitemargfalse \if@nmbrlist\refstepcounter{\@listctr}\fi\fi
+ \setbox\@tempboxa\hbox{\makelabel{#1}}%
+ \global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+ \hskip -\labelwidth \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else \hbox to\labelwidth {\makelabel{#1}}\fi
+ \hskip \labelsep}\ignorespaces
+}%
+
+% **************************************************************************
+% **** REDEFINE LATEX.TEX'S @OUTPUTPAGE TO ALLOW ARBORTEXT'S SPECIALBOP ****
+% **************************************************************************
+
+% \DEF \@OUTPUTPAGE
+% This redefinition of LaTeX's @outputpage is necessary to allow
+% \special commands to be executed before anything else on the page.
+% For example, the PostScript macros need to be defined before
+% any of the page making begins.
+%
+% These alterations were supplied by ArborText.
+%
+% Changes were also made to change the values of topskip, headsep,
+% and textheight after outputting page 1.
+%
+\def\@outputpage{\begingroup\catcode`\ =10
+% The following line was added to bring this def up to date with
+% latex.tex, <4 Aug 1988>
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+% The following line was added to bring this def up to date with
+% latex.tex, <4 Aug 1988>
+ \let\par\@@par %% 15 Sep 87
+ \@specialbopemit% LETTER CHANGES
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}}%
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+ \endgroup
+ \if@outputfirstpage% LETTER CHANGES
+ % Reset \topskip for page two.
+ % The topskip keeps the baseline of the first line of text in
+ % the right place. If the top vbox on the page is taller than
+ % \ht\strutbox, it will go no higher than the top of the strutbox.
+ %
+ \global\topskip=\ht\strutbox% LETTER CHANGES
+ \global\headsep=\@dimentoppagetwo% LETTER CHANGES
+ \global\advance\headsep by -\topskip% LETTER CHANGES
+ \global\advance\textheight by -\headsep% LETTER CHANGES
+ %
+ \global\@outputfirstpagefalse% LETTER CHANGES
+ \fi% LETTER CHANGES
+ \stepcounter{page}%
+ \if@outputlastpage% LETTER CHANGES
+ \ifnum\outputpenalty=-\@M
+ \global\c@page=1
+ \global\topskip=\@topskipfirst
+ \global\headsep=\@headsepfirst
+ \global\textheight=\@textheightfirst
+ \fi\fi
+ \let\firstmark\botmark
+}%
+
+% *********************************************************
+% **** REDEFINE LATEX.TEX'S \DOCUMENT AND \ENDDOCUMENT ****
+% *********************************************************
+
+% \DEF \DOCUMENT
+%
+% \document redefined so it writes '\@startlabels' on the
+% MLB file if it's making one. The AUX file is also opened.
+%
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement
+ \makeatletter\let\@writefile\@gobbletwo
+ \@input{\jobname.aux}\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\relax}\fi
+ \if@makemaillabels \immediate\openout\@mainmlb=\jobname.mlb
+ \immediate\write\@mainmlb{\string\@startlabels}\fi
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+%
+% \DEF \ENDDOCUMENT
+%
+% Redefine \enddocument so it outputs the labels, if necessary.
+%
+\def\enddocument{%
+ % Call \@printto if \opening has never been called.
+ % This can happen if mailing labels only are printed
+ % with no letter desired.
+ % Output is put into \@boxtemp and discarded.
+ \if@neveropened
+ \@splitto
+ \setbox\@boxtemp=\hbox{\@printingtotrue\@printto\@printingtofalse}%
+ \fi
+ \@checkend{document}\newpage\begingroup
+ \if@makemaillabels \immediate\closeout\@mainmlb
+ \makeatletter\input \jobname.mlb\clearpage\fi
+ \if@filesw \immediate\closeout\@mainaux
+ \def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+ \def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+ \if@tempswa \@warning{Label(s) may have changed. Rerun to get
+ cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+% ***************************
+% *** END OF LALETTER.DOC ***
+% ***************************
+
+% These are the commands starting with '\' that appear in laletter.sty
+% that are not defined in LaTeX or TeX.
+%
+% \@PSclasslabel
+% \@PSlosalamos
+% \@addtokstotoks
+% \@addtotoks
+% \@advcountbydimen
+% \@amorcm
+% \@attachmentas
+% \@attachmentsas
+% \@attachmentspagebreak
+% \@baselineskipsave
+% \@beginletter
+% \@blank
+% \@bodyfonts
+% \@bodysep
+% \@bookseven
+% \@booksix
+% \@boxclasspage
+% \@boxpagetwoheader
+% \@boxtemp
+% \@bullet
+% \@checkinput
+% \@checkuseasinput
+% \@choosebodyfonts
+% \@choosefonts
+% \@chooseheaderfonts
+% \@classfont
+% \@classlabel
+% \@clearclosing
+% \@cmcour
+% \@cmcourb
+% \@cmcouro
+% \@cmhelv
+% \@cmhelvb
+% \@cmr
+% \@cmtimeb
+% \@cmtimei
+% \@cmtimer
+% \@complimentaryclose
+% \@confidential
+% \@countattachments
+% \@countattn
+% \@countattnsave
+% \@countbotheader
+% \@countclasssepbot
+% \@countclassseptop
+% \@countcoltemp
+% \@countcy
+% \@countdistribution
+% \@countenc
+% \@countleftheader
+% \@countleftto
+% \@countletterlist
+% \@countname
+% \@countpictorig
+% \@countreference
+% \@countreturnaddress
+% \@countrightcolon
+% \@countrightheader
+% \@countrightto
+% \@countskiplabels
+% \@counttelephone
+% \@counttemp
+% \@counttemptwo
+% \@countthru
+% \@countto
+% \@counttoname
+% \@countverticalposition
+% \@countvia
+% \@cypagebreak
+% \@deftemp
+% \@dimenexpandside
+% \@dimenexpandtopmargin
+% \@dimenfirstpageleftheader
+% \@dimenhspacesig
+% \@dimenletterpaperhcorr
+% \@dimenletterpapervcorr
+% \@dimenmaillabelheight
+% \@dimenmaillabeltopmargin
+% \@dimenpagetwoheader
+% \@dimenspaceaftercolon
+% \@dimentemp
+% \@dimentocolsep
+% \@dimentoppagetwo
+% \@dimenversemargin
+% \@dimenwdtt
+% \@distributionpagebreak
+% \@eightspaces
+% \@encas
+% \@encpagebreak
+% \@endletter
+% \@endto
+% \@erroramfonts
+% \@erroras
+% \@errorattn
+% \@errorclassargument
+% \@errorclassmessage
+% \@errorillegalbodyfont
+% \@errorillegalheaderfont
+% \@errorillegaltypeface
+% \@erroroldlafonts
+% \@errorserialnosymbol
+% \@errorshortletter
+% \@errorshowexample
+% \@errorthruandvia
+% \@errortoleftrightto
+% \@errortwoclasses
+% \@errorundeclared
+% \@errorundeclaredcallout
+% \@errorundeclaredcompclose
+% \@errorundeclaredsalutation
+% \@errorundeclaredto
+% \@erroruseas
+% \@exit
+% \@exitfi
+% \@fontarg
+% \@fontcommand
+% \@getpostscriptnames
+% \@globaladvcountbydimen
+% \@headerfonts
+% \@headsepfirst
+% \@ifemptyorundefined
+% \@ifnewname
+% \@ifnoinfo
+% \@initializefontvariables
+% \@initializelists
+% \@initializeothervariables
+% \@initializetypefacedependencies
+% \@kern
+% \@kernheaderwords
+% \@lafonts
+% \@lanl
+% \@lanm
+% \@latwentyeight
+% \@lengthdate
+% \@lengthlabel
+% \@lengthname
+% \@lengthrule
+% \@letterpaper
+% \@lettertwentyeight
+% \@losalamos
+% \@macroname
+% \@mailstop
+% \@mainmlb
+% \@makePSclassheader
+% \@makeclassheader
+% \@makepagetwoheader
+% \@maketocol
+% \@memotwentyeight
+% \@mlabel
+% \@mlbout
+% \@multipleletters
+% \@newnamefalse
+% \@newnametrue
+% \@nlsave
+% \@nocallouts
+% \@noclearpage
+% \@notvoidtoks
+% \@notvoidtoksone
+% \@notvoidtokstwo
+% \@originator
+% \@parskipsave
+% \@postscript
+% \@printattachments
+% \@printclasspage
+% \@printcompclose
+% \@printcy
+% \@printdistribution
+% \@printenc
+% \@printfirstpageheader
+% \@printfirstpagerightheader
+% \@printletterpaper
+% \@printnumberedlist
+% \@printoriginatorline
+% \@printpagenum
+% \@printpagetwoheader
+% \@printreference
+% \@printsalutation
+% \@printsignature
+% \@printsubject
+% \@printthruorvia
+% \@printto
+% \@psdefclasslabel
+% \@psdeflosalamos
+% \@pullloop
+% \@pullpagetwotoheader
+% \@resettovars
+% \@restorevariables
+% \@rm
+% \@salutation
+% \@secret
+% \@serialnumber
+% \@setnormalsize
+% \@setnumdefaults
+% \@settrue
+% \@shortletterstyle
+% \@signature
+% \@signer
+% \@specialbopemit
+% \@specialbopempty
+% \@specialboptext
+% \@spectwelve
+% \@splitto
+% \@startlabels
+% \@subject
+% \@subjectorig
+% \@symbol
+% \@symbolserialnumber
+% \@tenrm
+% \@texfonts
+% \@textheightfirst
+% \@tocommapull
+% \@tocommapullone
+% \@tocommapulltwo
+% \@todieornottodie
+% \@toendtopull
+% \@toendtopullone
+% \@toksafterendto
+% \@toksafternewline
+% \@toksaftersave
+% \@toksattachments
+% \@toksattn
+% \@toksattnsave
+% \@toksbeforecomma
+% \@toksbeforeendto
+% \@toksbeforenewline
+% \@toksblank
+% \@tokscoltemp
+% \@tokscy
+% \@toksdistribution
+% \@toksempty
+% \@toksenc
+% \@toksinput
+% \@toksitem
+% \@toksleftto
+% \@toksname
+% \@toksnewline
+% \@toksnotequal
+% \@tokspagetwoheader
+% \@toksreference
+% \@toksremaining
+% \@toksreturnaddress
+% \@toksrightto
+% \@tokstelephone
+% \@tokstemp
+% \@toksthru
+% \@toksto
+% \@tokstoinput
+% \@tokstoname
+% \@toksvia
+% \@tonewlinepull
+% \@tonewlinepullfour
+% \@tonewlinepullone
+% \@tonewlinepullthree
+% \@tonewlinepulltwo
+% \@topskipfirst
+% \@totoleftto
+% \@tt
+% \@typeface
+% \@typist
+% \@unclassified
+% \@unspacedclasslabel
+% \@unspaceleft
+% \@unspaceleftone
+% \@unspacelefttwo
+% \@unspaceright
+% \@unspacerightone
+% \@unspacerighttwo
+% \@upperunspaceleft
+% \@upperunspaceleftone
+% \@useasheader
+% \@useattn
+% \@usesubject
+% \@useto
+% \@writeonelabel
+% \attachmentas
+% \attachments
+% \attachmentsas
+% \attachmentspagebreak
+% \attn
+% \bodyfonts
+% \c@@countlist
+% \classlabel
+% \closing
+% \complimentaryclose
+% \cy
+% \cypagebreak
+% \descriptionmargin
+% \distribution
+% \distributionpagebreak
+% \enc
+% \encas
+% \encpagebreak
+% \expandtopmargin
+% \expandwidth
+% \headerfonts
+% \if@beenhere
+% \if@closing
+% \if@cmfonts
+% \if@comma
+% \if@continueloop
+% \if@everyindent
+% \if@makemaillabels
+% \if@neveropened
+% \if@newattachments
+% \if@newattn
+% \if@newcy
+% \if@newdistribution
+% \if@newenc
+% \if@newleftto
+% \if@newline
+% \if@newreference
+% \if@newreturnaddress
+% \if@newrightto
+% \if@newtelephone
+% \if@newtemp
+% \if@newthru
+% \if@newto
+% \if@newvia
+% \if@notvoidtoks
+% \if@outputfirstpage
+% \if@outputlastpage
+% \if@printingto
+% \if@somethingbefore
+% \if@toksnotequal
+% \innerbody
+% \inneriterate
+% \innerloop
+% \innerrepeat
+% \leftto
+% \letterpaperhcorr
+% \letterpapervcorr
+% \longbody
+% \longiterate
+% \longloop
+% \longrepeat
+% \maillabelheight
+% \maillabeltopmargin
+% \mailstop
+% \makemaillabels
+% \newblock
+% \next
+% \nocallouts
+% \noclearpage
+% \one
+% \opening
+% \originator
+% \ps@firstpage
+% \ps@pagetwo
+% \reference
+% \returnaddress
+% \rightto
+% \salutation
+% \serialnumber
+% \shortletterstyle
+% \signature
+% \signer
+% \skiplabels
+% \specialbop
+% \subject
+% \telephone
+% \thru
+% \two
+% \typeface
+% \typist
+% \use
+% \useattnasheader
+% \useotherasheader
+% \usesubjectasheader
+% \usetoasheader
+% \via
+
+% Here is a list of most of the locally defined macros and their line
+% numbers in this file.
+
+% 2666 % \DEF \@ADDTOKSTOTOKS
+% 2658 % \DEF \@ADDTOTOKS
+% 2703 % \DEF \@ADVCOUNTBYDIMEN
+% 1215 % \DEF \@AMORCM figures out whether am or cm fonts have been loaded.
+% 1978 % \DEF \@BEGINLETTER
+% 1123 % \DEF \@CHECKINPUT
+% 1182 % \DEF \@CHECKUSEASINPUT
+% 1280 % \DEF \@CHOOSEBODYFONTS
+% 1205 % \DEF \@CHOOSEFONTS
+% 1244 % \DEF \@CHOOSEHEADERFONTS
+% 2002 % \DEF \@CLEARCLOSING
+% 2013 % \DEF \@ENDLETTER
+% 2955 % \DEF \@EXIT
+% 2958 % \DEF \@EXITFI
+% 1231 % \DEF \@GETPOSTSCRIPTNAMES
+% 2713 % \DEF \@GLOBALADVCOUNTBYDIMEN
+% 2674 % \DEF \@IFEMPTYORUNDEFINED
+% 2684 % \DEF \@IFNOINFO
+% 1352 % \DEF \@INITIALIZEFONTVARIABLES
+% 1475 % \DEF \@INITIALIZELISTS
+% 1655 % \DEF \@INITIALIZEOTHERVARIABLES
+% 1446 % \DEF \@INITIALIZETYPEFACEDEPENDENCIES
+% 2989 % \DEF \@ITEM
+% 1369 % \DEF \@KERNHEADERWORDS
+% 1717 % \DEF \@MAKECLASSHEADER
+% 1868 % \DEF \@MAKEPAGETWOHEADER
+% 1854 % \DEF \@MAKEPSCLASSHEADER
+% 2198 % \DEF \@MAKETOCOL
+% 2792 % \DEF \@MLABEL
+% 1096 % \DEF \@MULTIPLELETTERS
+% 2720 % \DEF \@NOTVOIDTOKS
+% 3048 % \DEF \@OUTPUTPAGE
+% 2419 % \DEF \@PRINTATTACHMENTS
+% 1909 % \DEF \@PRINTCLASSPAGE
+% 2338 % \DEF \@PRINTCOMPCLOSE
+% 2478 % \DEF \@PRINTCY
+% 2460 % \DEF \@PRINTDISTRIBUTION
+% 2382 % \DEF \@PRINTENCLOSURES
+% 2039 % \DEF \@PRINTFIRSTPAGEHEADER
+% 2106 % \DEF \@PRINTFIRSTPAGERIGHTHEADER
+% 2064 % \DEF \@PRINTLETTERPAPER
+% 2522 % \DEF \@PRINTNUMBEREDLIST
+% 2357 % \DEF \@PRINTORIGINATORLINE
+% 1930 % \DEF \@PRINTPAGENUM
+% 1924 % \DEF \@PRINTPAGETWOHEADER
+% 2304 % \DEF \@PRINTREFERENCE
+% 2257 % \DEF \@PRINTSALUTATION
+% 2347 % \DEF \@PRINTSIGNATURE
+% 2289 % \DEF \@PRINTSUBJECT
+% 2265 % \DEF \@PRINTTHRUORVIA
+% 2158 % \DEF \@PRINTTO
+% 1802 % \DEF \@PSDEFCLASSLABEL
+% 1757 % \DEF \@PSDEFLOSALAMOS
+% 1942 % \DEF \@PULLPAGETWOTOHEADER
+% 982 % \DEF \@RESETTOVARS
+% 1091 % \DEF \@RESTOREVARIABLES
+% 1333 % \DEF \@SETNORMALSIZE
+% 2502 % \DEF \@SETNUMDEFAULTS
+% 1692 % \DEF \@SETTRUE
+% 2123 % \DEF \@SPLITTO
+% 2761 % \DEF \@STARTLABELS
+% 2566 % \DEF \@TOCOMMAPULL \DEF \@TOCOMMAPULLSUB, etc.
+% 2946 % \DEF \@TODIEORNOTTODIE
+% 2576 % \DEF \@TOENDTOPULL \DEF \@TOENDTOPULLSUBONE, etc.
+% 915 % \DEF \@TOKSINPUT
+% 2691 % \DEF \@TOKSNOTEQUAL \DEF \@TOKSEQUAL
+% 993 % \DEF \@TOKSTOINPUT
+% 2546 % \DEF \@TONEWLINEPULL \DEF \@TONEWLINEPULLSUBONE, etc.
+% 1028 % \DEF \@TOTOLEFTTO
+% 2585 % \DEF \@UNSPACELEFT
+% 2632 % \DEF \@UNSPACERIGHT
+% 2608 % \DEF \@UPPERUNSPACELEFT
+% 2800 % \DEF \@WRITEONELABEL
+% 882 % \DEF \CLASSLABEL
+% 1069 % \DEF \CLOSING
+% 3115 % \DEF \DOCUMENT
+% 3139 % \DEF \ENDDOCUMENT
+% 808 % \DEF \HEADERFONTS, \BODYFONTS, \SUBJECT, \SYMBOL, \SERIALNUMBER,
+% 2242 % \DEF \LONGLOOP, \LONGINNERLOOP, \INNERITERATE
+% 1044 % \DEF \OPENING
+% 2969 % \DEF \SPECIALBOP
+% 776 % \DEF \TO, \THRU, \CY, \ATTACHMENTS, \REFERENCE, \ENCLOSURES,
+
+% The following list will give you a view of this file as a whole.
+% Included are banners from major sections of code and locally
+% defined macros. Line numbers are given on the left.
+
+% 18 % **** BEGINNING OF ARTICLE.DOC MACROS ****
+% 25 % * BIBLIOGRAPHY *
+% 59 % * FIGURES AND TABLES *
+% 150 % **** LETTER.STY MACROS ****
+% 190 % * FONTS *
+% 327 % * PAGE LAYOUT *
+% 393 % * LETTER COMMANDS *
+% 399 % * THE SRI LETTER FORMAT *
+% 405 % * THE GENERIC LETTER COMMANDS *
+% 411 % * PAGE STYLES *
+% 418 % * PARAGRAPHING *
+% 453 % * LISTS *
+% 461 % * OTHER ENVIRONMENTS *
+% 515 % * FOOTNOTES *
+% 547 % * MISCELLANEOUS *
+% 560 % * INITIALIZATION *
+% 581 % **** BEGINNING OF LOCALLY WRITTEN MACROS FOR LANL LETTERS. ****
+% 585 % **** DEFINE AND INITIALIZE REGISTERS ****
+% 772 % **** USER INPUT ****
+% 776 % \DEF \TO, \THRU, \CY, \ATTACHMENTS, \REFERENCE, \ENCLOSURES,
+% 808 % \DEF \HEADERFONTS, \BODYFONTS, \SUBJECT, \SYMBOL, \SERIALNUMBER,
+% 882 % \DEF \CLASSLABEL
+% 915 % \DEF \@TOKSINPUT
+% 982 % \DEF \@RESETTOVARS
+% 993 % \DEF \@TOKSTOINPUT
+% 1028 % \DEF \@TOTOLEFTTO
+% 1041 % **** OPENING AND CLOSING ****
+% 1044 % \DEF \OPENING
+% 1069 % \DEF \CLOSING
+% 1091 % \DEF \@RESTOREVARIABLES
+% 1096 % \DEF \@MULTIPLELETTERS
+% 1120 % **** CHECK USER INPUT ****
+% 1123 % \DEF \@CHECKINPUT
+% 1182 % \DEF \@CHECKUSEASINPUT
+% 1202 % **** CHOOSE FONTS ****
+% 1205 % \DEF \@CHOOSEFONTS
+% 1215 % \DEF \@AMORCM figures out whether am or cm fonts have been loaded.
+% 1231 % \DEF \@GETPOSTSCRIPTNAMES
+% 1244 % \DEF \@CHOOSEHEADERFONTS
+% 1280 % \DEF \@CHOOSEBODYFONTS
+% 1333 % \DEF \@SETNORMALSIZE
+% 1349 % **** INITIALIZE FONT AND TYPEFACE DEPENDENT VARIABLES ****
+% 1352 % \DEF \@INITIALIZEFONTVARIABLES
+% 1369 % \DEF \@KERNHEADERWORDS
+% 1446 % \DEF \@INITIALIZETYPEFACEDEPENDENCIES
+% 1475 % \DEF \@INITIALIZELISTS
+% 1489 % * LISTS *
+% 1536 % See comments for *** LISTS *** above under \ifx\@typeface\@tt
+% 1655 % \DEF \@INITIALIZEOTHERVARIABLES
+% 1692 % \DEF \@SETTRUE
+% 1714 % **** CLASSIFICATION AND PAGE TWO HEADERS ****
+% 1717 % \DEF \@MAKECLASSHEADER
+% 1757 % \DEF \@PSDEFLOSALAMOS
+% 1802 % \DEF \@PSDEFCLASSLABEL
+% 1854 % \DEF \@MAKEPSCLASSHEADER
+% 1868 % \DEF \@MAKEPAGETWOHEADER
+% 1909 % \DEF \@PRINTCLASSPAGE
+% 1924 % \DEF \@PRINTPAGETWOHEADER
+% 1930 % \DEF \@PRINTPAGENUM
+% 1942 % \DEF \@PULLPAGETWOTOHEADER
+% 1975 % **** BEGIN AND END LETTER, SHORT OR NORMAL LETTER STYLE. ****
+% 1978 % \DEF \@BEGINLETTER
+% 2002 % \DEF \@CLEARCLOSING
+% 2013 % \DEF \@ENDLETTER
+% 2036 % **** PRINT OPENING ****
+% 2039 % \DEF \@PRINTFIRSTPAGEHEADER
+% 2064 % \DEF \@PRINTLETTERPAPER
+% 2106 % \DEF \@PRINTFIRSTPAGERIGHTHEADER
+% 2123 % \DEF \@SPLITTO
+% 2158 % \DEF \@PRINTTO
+% 2198 % \DEF \@MAKETOCOL
+% 2242 % \DEF \LONGLOOP, \LONGINNERLOOP, \INNERITERATE
+% 2257 % \DEF \@PRINTSALUTATION
+% 2265 % \DEF \@PRINTTHRUORVIA
+% 2289 % \DEF \@PRINTSUBJECT
+% 2304 % \DEF \@PRINTREFERENCE
+% 2335 % **** PRINT CLOSING. ****
+% 2338 % \DEF \@PRINTCOMPCLOSE
+% 2347 % \DEF \@PRINTSIGNATURE
+% 2357 % \DEF \@PRINTORIGINATORLINE
+% 2382 % \DEF \@PRINTENCLOSURES
+% 2419 % \DEF \@PRINTATTACHMENTS
+% 2460 % \DEF \@PRINTDISTRIBUTION
+% 2478 % \DEF \@PRINTCY
+% 2499 % **** NUMBERED LISTS FOR CLOSING ****
+% 2502 % \DEF \@SETNUMDEFAULTS
+% 2522 % \DEF \@PRINTNUMBEREDLIST
+% 2543 % **** PARSING ****
+% 2546 % \DEF \@TONEWLINEPULL \DEF \@TONEWLINEPULLSUBONE, etc.
+% 2566 % \DEF \@TOCOMMAPULL \DEF \@TOCOMMAPULLSUB, etc.
+% 2576 % \DEF \@TOENDTOPULL \DEF \@TOENDTOPULLSUBONE, etc.
+% 2585 % \DEF \@UNSPACELEFT
+% 2608 % \DEF \@UPPERUNSPACELEFT
+% 2632 % \DEF \@UNSPACERIGHT
+% 2656 % **** UTILITIES FOR MASSAGING TOKEN AND DIMENSION VARIABLES. ****
+% 2658 % \DEF \@ADDTOTOKS
+% 2666 % \DEF \@ADDTOKSTOTOKS
+% 2674 % \DEF \@IFEMPTYORUNDEFINED
+% 2684 % \DEF \@IFNOINFO
+% 2691 % \DEF \@TOKSNOTEQUAL \DEF \@TOKSEQUAL
+% 2703 % \DEF \@ADVCOUNTBYDIMEN
+% 2713 % \DEF \@GLOBALADVCOUNTBYDIMEN
+% 2720 % \DEF \@NOTVOIDTOKS
+% 2730 % **** LABELS ****
+% 2761 % \DEF \@STARTLABELS
+% 2792 % \DEF \@MLABEL
+% 2800 % \DEF \@WRITEONELABEL
+% 2818 % **** ERROR MESSAGES ****
+% 2943 % **** DEATH UTILITY ****
+% 2946 % \DEF \@TODIEORNOTTODIE
+% 2955 % \DEF \@EXIT
+% 2958 % \DEF \@EXITFI
+% 2963 % **** ARBORTEXT'S SPECIALBOP (BEGINNING OF PAGE) FOR USE WITH DVIPS ***
+% 2969 % \DEF \SPECIALBOP
+% 2986 % **** REDEFINE LATEX.TEX'S \@ITEM FOR NICE PAGEBREAKS IN \CLOSING LISTS
+% 2989 % \DEF \@ITEM
+% 3045 % **** REDEFINE LATEX.TEX'S @OUTPUTPAGE TO ALLOW ARBORTEXT'S SPECIALBOP
+% 3048 % \DEF \@OUTPUTPAGE
+% 3112 % **** REDEFINE LATEX.TEX'S \DOCUMENT AND \ENDDOCUMENT ****
+% 3115 % \DEF \DOCUMENT
+% 3139 % \DEF \ENDDOCUMENT
+% 3161 % *** END OF LALETTER.DOC ***
diff --git a/macros/latex209/contrib/laletter/laletter.ref b/macros/latex209/contrib/laletter/laletter.ref
new file mode 100644
index 0000000000..16bc27cea9
--- /dev/null
+++ b/macros/latex209/contrib/laletter/laletter.ref
@@ -0,0 +1,4810 @@
+
+
+
+
+
+
+
+
+ |
+ | Computing and Communications Division
+ CIC#1505 |
+ October 1989 |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ | LaTeX Letter Reference
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ | ---------------------------------------------
+ | NOTICE TO USERS OF ONLINE DOCUMENTATION:
+ |
+ | This document may not include some tables,
+ | graphics, and other features that you will
+ | find in the printed version. To order the
+ | hardcopy, contact the CIC at (505) 667-6992.
+ | ---------------------------------------------
+ |
+ |
+ Los Alamos | Los Alamos National Laboratory
+ | Los Alamos, New Mexico 87545
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who to Contact - ii - October 1989
+
+
+
+ WHO TO CONTACT
+ ______________________________________________________________________
+
+ =================================================================
+ CONTACT PHONE FTS
+ -----------------------------------------------------------------
+ CONSULTING
+ ICN Consulting Office (C-10)............(505)667-5745 843-5745
+ Closed from 1 p.m. to 2 p.m. MT on Mondays
+ electronic mail address: consult@lanl.gov
+ CCF Dispatcher/CFS/PAGES (C-1)..........(505)667-4584 843-4584
+
+ COMMUNICATIONS PROBLEMS
+ ICN Communications Problems.............(505)667-7423 843-7423
+ (C-4 Trouble Desk)
+
+ EDUCATION and DOCUMENTATION
+ Computing Information Center - CIC .....(505)667-6992 843-6992
+ (C-2 publication distribution)
+ electronic mail address: cic@lanl.gov
+
+ STATUS MESSAGES
+ CCF Status Recording....................(505)667-5588 843-5588
+ FOCUS - Machine Status..................(505)667-2852 843-2852
+
+ SECURITY
+ Computer and Information Security.......(505)665-1805 855-1805
+ (OS-4 passwords and blacklisting)
+ =================================================================
+ Revision History
+
+ Written by Marilyn Foster with technical input from Steve Sydoriak,
+ Computer Documentation Group (C-2).
+
+ Originally published October 1989
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - iii - Contents
+
+
+
+ CONTENTS
+ ______________________________________________________________________
+
+
+ 1. INTRODUCTION ................................................ 1
+ 2. PREREQUISITES FOR USING LATEX LETTER COMMANDS ............... 3
+ 2.1. What You Need Before You Can Use the Letter Commands
+ ...................................................... 3
+ 2.2. Additional Information ............................... 3
+ 2.3. LaTeX Video Courses .................................. 4
+ 3. GETTING STARTED ............................................. 5
+ 4. PREPARING THE PREAMBLE SECTION .............................. 6
+ 4.1. Defaults ............................................. 6
+ 4.2. Document Style ....................................... 7
+ 4.3. Letterhead Labels .................................... 8
+ 4.3.1. Nocallouts ........................................ 8
+ 4.3.2. Date .............................................. 9
+ 4.3.3. In Reply Refer To ................................. 9
+ 4.3.4. Mail Stop ......................................... 10
+ 4.3.5. Telephone Number .................................. 10
+ 4.4. Address .............................................. 11
+ 4.5. Attention Line ....................................... 12
+ 4.6. Thru or Via .......................................... 13
+ 4.7. Salutation ........................................... 14
+ 4.8. Subject Line ......................................... 14
+ 4.9. Reference Line ....................................... 15
+ 4.10. Continuation Pages .................................. 15
+ 4.11. Complimentary Close ................................. 17
+ 4.12. Signature ........................................... 17
+ 4.13. Initial Line-Signer, Originator, and Typist ......... 18
+ 4.14. Enclosures .......................................... 18
+ 4.15. Attachments ......................................... 19
+ 4.16. Copy or Distribution List ........................... 20
+ 5. PREPARING THE DOCUMENT SECTION .............................. 22
+ 6. PRINTING YOUR LETTER ........................................ 23
+ 7. CUSTOMIZING YOUR LETTER ..................................... 25
+ 7.1. Header Style ......................................... 25
+ 7.2. Body Style ........................................... 26
+ 7.2.1. Type Style ........................................ 26
+ 7.2.2. Fonts ............................................. 27
+ 7.2.3. Margin Space ...................................... 27
+ 7.3. Classification Labels ................................ 28
+ 7.4. Page Breaks .......................................... 29
+ 7.4.1. General Page Breaks ............................... 29
+ 7.4.2. Page Break Before a List .......................... 29
+ 7.5. Short Letters ........................................ 30
+ 7.6. Preprinted Stationery ................................ 30
+ 7.7. Multiple Letters to a Mailing List ................... 32
+ 7.8. Mailing Labels ....................................... 32
+ 7.8.1. Return Address Labels ............................. 33
+ 7.8.2. Label Size ........................................ 33
+ 7.8.3. Skipping Labels ................................... 34
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Contents - iv - October 1989
+
+
+
+ 7.8.4. The .MLB File ..................................... 34
+ 7.9. Floats in LaTeX Letters .............................. 34
+ APPENDIX A. SUMMARY OF LATEX LETTER COMMANDS ................... 36
+ APPENDIX B. SYNTAX RULES AND DOCUMENTATION CONVENTIONS ......... 40
+ B.1. Syntax Rules ......................................... 40
+ B.2. Documentation Conventions ............................ 40
+ APPENDIX C. EXAMPLE LETTERS .................................... 41
+ Example 1. Typical Letter ................................. 42
+ Example 2. Short Letter Style ............................. 43
+ Example 3. Letter on Preprinted Stationery ................ 44
+ Example 4. Letter with Multiple Addressees ................ 45
+ Example 5. Multiple Letters with Mailing Labels ........... 46
+ APPENDIX D. INSTALLING THE LATEX LETTER STYLE FILE ............. 49
+ D.1. On the IBM PC ........................................ 50
+ D.2. On the Sun Workstation ............................... 51
+ D.3. On the Apollo Workstation ............................ 51
+ D.4. On VAX/VMS ........................................... 51
+ D.5. On VAX/UNIX .......................................... 52
+ APPENDIX E. WARNING AND ERROR MESSAGES ......................... 53
+ E.1. Warning Messages ..................................... 53
+ E.1.1. Leaving Out Information ........................... 53
+ E.1.2. Letter Too Long for \shortletterstyle ............. 55
+ E.1.3. Using the Almost Modern (AM) Fonts ................ 55
+ E.1.4. Contradictory Information ......................... 55
+ E.1.5. Using \attn Outside of \to ........................ 56
+ E.2. Fatal Errors ......................................... 56
+ E.2.1. Invalid Classification Label ...................... 56
+ E.2.2. Duplicating \classlabel Commands .................. 57
+ E.2.3. Specifying an Invalid Typeface .................... 57
+ E.2.4. Specifying an Invalid Font for Letter Body ........ 57
+ E.2.5. Specifying an Invalid Font for Letter Header ...... 58
+ E.2.6. Using an Obsolete Version of Lafonts .............. 58
+ APPENDIX F. GLOSSARY OF TERMS AND ACRONYMS ..................... 59
+ READER COMMENTS FORM ............................................ 63
+ DOCUMENTATION REQUEST FORM ...................................... 65
+ INDEX ........................................................... 68
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 1 - Introduction
+
+
+
+ 1. INTRODUCTION
+ ______________________________________________________________________
+
+ LaTeX Letter Reference explains how to use LaTeX letter commands to
+ produce letters that conform to the Los Alamos National Laboratory
+ standards for correspondence. LaTeX is a macro package that
+ supplements the TeX document preparation system to streamline the
+ production of many types of documents. The LaTeX commands are put
+ into a LaTeX input file and are executed when you run the file through
+ LaTeX.
+
+ Although it is not necessary to read each section in order, the later
+ sections assume that you have read this introduction and, if you are
+ not familiar with the local documentation, Appendix B.
+
+ This document is divided into the following sections:
+
+ o Section 1: Introduction. This section is a road map of the
+ document.
+
+ o Section 2: Prerequisites for Using LaTeX Letter Commands. This
+ section tells on what systems you can use the letter commands and
+ lists what you need on your system so you can implement the
+ commands. It also gives you sources for more information about
+ LaTeX.
+
+ o Section 3: Getting Started. This section shows the general
+ format for a LaTeX letter file and explains the major parts of
+ the file.
+
+ o Section 4: Preparing the Preamble Section. This section explains
+ commands that you will need in the preamble part of the LaTeX
+ letter file where the opening and closing of the letter is
+ defined. This section only covers the basic letter commands
+ needed for a typical letter. See Section 7 for information about
+ changing fonts and commands that give special instructions.
+
+ o Section 5: Preparing the Document Section. This section
+ describes the part of the LaTeX letter file containing the body
+ of the document.
+
+ o Section 6: Printing Your Letter. This section explains how to
+ print a letter. The instructions in this chapter are very
+ general and are the same as the instructions for printing any
+ LaTeX file.
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Introduction - 2 - October 1989
+
+
+
+ o Section 7: Customizing Your Letter. This section gives details
+ about the special letter commands that can be put into the
+ preamble section of your file to control the fonts for the
+ letterhead, the fonts and typeface for the body of a letter,
+ pagebreaks, classification labeling, formatting for short
+ letters, producing letters for a mailing list, and printing
+ mailing labels.
+
+ o Appendix A: Summarizing the LaTeX Letter Commands. This appendix
+ is a summary table for the letter commands. It gives a brief
+ description of each command and a list of options and defaults
+ where applicable.
+
+ o Appendix B: Syntax Rules and Documentation Standards. This
+ appendix explains the rules governing the LaTeX letter commands
+ and the various standards used in locally produced documentation.
+
+ o Appendix C: Example Letters. This appendix gives examples of
+ letter files and their resulting letters.
+
+ o Appendix D: Installing the LaTeX Style File. This appendix
+ explains how to install the letter style file on your system.
+
+ o Appendix E: Warning and Error Messages. This appendix contains a
+ listing of all the error messages that are possible when using
+ the letter commands.
+
+ o Appendix F: Glossary of Terms and Acronyms. Terms and acronyms
+ not commonly defined elsewhere, or whose meaning are specific to
+ the Los Alamos environment, are defined in this appendix.
+
+
+ Several forms follow the last appendix. If you have any comments
+ about or suggestions for this document, please return them on the
+ Reader Comments Form. If you would like to order documentation
+ referred to in this document, complete and return the Documentation
+ Request Form to the Computing Information Center (CIC).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 3 - Prerequisites
+
+
+
+ 2. PREREQUISITES FOR USING LATEX LETTER COMMANDS
+ ______________________________________________________________________
+
+ This section lists the systems on which you can use LaTeX letter
+ commands, the features you must have on your system, and sources for
+ general information about LaTeX.
+
+
+ 2.1. What You Need Before You Can Use the Letter Commands
+
+ You can use the LaTeX letter commands when working in the following
+ environments:
+
+ o UNIX distributed processors
+
+ o Sun and Apollo workstations
+
+ o IBM PCs
+
+ o VAX/VMS distributed processors
+
+
+ With each of these environments, you need the following:
+
+ o TeX and LaTeX installed
+
+ o The LaTeX letter style file installed
+
+ o Access to a printer that has the necessary software to print TeX
+ output
+
+
+
+ _____________________________________________________
+
+ See Appendix D for information about installing
+ the letter style file.
+ _____________________________________________________
+
+
+
+
+
+ 2.2. Additional Information
+
+ This document assumes that you know how to use LaTeX. If you are not
+ already familiar with LaTeX, you can refer to the following
+ publications:
+
+ o An Introduction to LaTeX, by Michael Urban. An introductory
+ document that will help you start working with LaTeX quickly.
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Prerequisites - 4 - October 1989
+
+
+
+ o LaTeX: A Document Preparation System, by Leslie Lamport. A
+ complete reference manual written by the designer of LaTeX.
+
+ For information about using LaTeX at the Los Alamos National
+ Laboratory, see the following documents:
+
+ o Local Guide to LaTeX on VAX/UNIX at the Los Alamos National
+ Laboratory. This document describes how to use LaTeX on the
+ VAX/VMS CCVAX distributed processor.
+
+ o Local Guide to LaTeX on VAX/VMS at the Los Alamos National
+ Laboratory. This document tells you how to use LaTeX on the
+ VAX/Ultrix distributed processor Beta and on the VAX/UNIX
+ distributed processor Alpha.
+
+ o LaTeX Memo Reference. This document explains how to use LaTeX to
+ produce memos that conform to the Los Alamos National Laboratory
+ standards.
+
+ You can order these publications from the Computing Information Center
+ (CIC) by filling out the Documentation Request Form in the back of
+ this document. Please note, there is no charge for local
+ documentation, but you will be charged for the general LaTeX
+ publications.
+
+ If you would like more information about the Laboratory's letter
+ standards, see the Office Procedures Manual, OPM-1-2 for unclassified
+ letters and OPM-2-4 and OPM-2-11 for classified letters. To order a
+ copy of the Office Procedures Manual, call the IS-11 Distribution
+ Center at (505) 667-3872. Most group offices have one of these
+ manuals available for reference.
+
+
+
+
+ 2.3. LaTeX Video Courses
+
+ The Computing Learning Center (CLC) offers a two-hour introductory
+ video course entitled "Introduction to LaTeX" presented by Cris
+ Barnes, CTR-5 and a one-hour video course Preparing Laboratory Memos
+ with LaTeX presented by Margot Casey, C-2. These courses are
+ available for viewing in the CLC, or you may check out the 1/2-inch
+ VHS tapes for viewing at home. The courses are also broadcast on
+ LABNET.
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 5 - Getting Started
+
+
+
+ 3. GETTING STARTED
+ ______________________________________________________________________
+
+ To prepare a letter with LaTeX, you first create a file with a ".tex"
+ extension at the end of its name (e.g., test.tex). This file is
+ called your LaTeX letter file. LaTeX commands are case sensitive and
+ should be entered in upper- or lowercase characters as shown in this
+ document or other documentation. Note that each command begins with a
+ backslash (\).
+
+ Each LaTeX letter file has two sections: the preamble section and the
+ document section. The preamble section contains the commands that set
+ up the information for the opening and closing of the letter and
+ describe the style of the letter. It starts with a \documentstyle
+ command and ends with a \begin{document} command. The document
+ section contains the text of the letter. It starts with a
+ \begin{document} command and ends with an \end{document} command.
+
+ The general format of the preamble section of a LaTeX letter file is
+
+ \documentstyle{laletter}
+
+ Letter commands, such as
+ \to
+ \salutation
+ \complimentaryclose
+ .
+ .
+ .
+
+ The general format of the document section of a LaTeX letter file is
+
+ \begin{document}
+ \opening
+
+ Body of letter
+
+ \closing
+ \end{document}
+
+
+ The spacing and indentation of the commands, as shown in the above
+ format, make the file easier to read; the outcome of the file is not
+ affected. The details of the commands for the preamble section are
+ found in Section 4, and the details for the document section are found
+ in Section 5.
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 6 - October 1989
+
+
+
+ 4. PREPARING THE PREAMBLE SECTION
+ ______________________________________________________________________
+
+ The preamble section of your LaTeX letter file contains the commands
+ that set the opening and closing of the letter. The preamble is
+ described in two sections: this section and Section 7. This section
+ describes the letter commands that determine the opening and closing
+ of a typical letter. Section 7 describes the letter commands that you
+ can use to customize your letter.
+
+ You can print a letter using only the preamble commands covered in
+ this chapter. Notice, however, that if you use only the preamble
+ commands listed in this section, your letter will be printed with a
+ nonstandard Los Alamos logo. See Section 7 for directions for
+ printing a letter with the standard outline type of logo.
+
+ The \documentstyle command is the only command required in the
+ preamble section and must be the first line in your LaTeX letter file.
+ The other commands can be arranged in any order within the preamble
+ section. LaTeX will print them in the proper place in the letter.
+
+
+ 4.1. Defaults
+
+ Default values are the values that LaTeX puts in when you leave a
+ command out of the file. With the default values, one of the
+ following will happen:
+
+ o The label in the header will be left blank. This happens with the
+ commands that have labels printed with the letterhead - \symbol,
+ \mailstop, and \telephone commands.
+
+ o Default information will be printed. This information is
+ described with the appropriate commands.
+
+ o Nothing will be printed. This happens with the commands that
+ have no preprinted labels on the stationery; for example, if you
+ leave out the enclosure command (\enc), LaTeX will not print an
+ enclosure list or the label "Enc."
+
+ o A font or register is set to the default value.
+
+ You may also receive a warning message if the omitted command is
+ needed to conform to Laboratory correspondence standards.
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 7 - Preparing the Preamble Section
+
+
+
+ _____________________________________________________
+
+ The backslashes (\) and the braces ({ }) in the
+ following commands are a part of these commands
+ and must be included with the command. They do
+ not denote optional parameters.
+ _____________________________________________________
+
+
+
+ Commands that print specific information in your letter are listed in
+ this section. Essential LaTeX commands are listed where they must be
+ inserted into the preamble section. The general commands are listed
+ in the order in which the Office Procedures Manual describes them.
+
+
+ 4.2. Document Style
+
+ \documentstyle{laletter}
+
+ This command tells LaTeX that your document is a letter. It must be
+ the first line in your file because LaTeX sets up margins and other
+ values based on the style you specify inside the braces (in this case,
+ a Los Alamos letter style).
+
+ This command also sets the point size for the body of your letter.
+ LaTeX uses a point size of 10, 11, or 12, with a point size of 10 as
+ the default for all LaTeX documents. The \documentstyle command, as
+ it is shown above, gives your letter a point size of 10, which is
+ small and may be difficult to read. See Example 3 in Appendix C for
+ an example of text with a point size of 10. You can increase the
+ point size by putting an [11pt] or [12pt] option (including the square
+ brackets[]) before the {laletter} parameter. The following example
+ shows the command that gives a point size of 12 for the body of your
+ letter. (This document is printed with a point size of 12.)
+
+
+ ==============================================================
+
+ \documentstyle[12pt]{laletter}
+
+ ==============================================================
+
+
+ The \documentstyle command is a LaTeX command, and it follows the
+ syntax rules for standard LaTeX commands. See one of the LaTeX
+ reference books listed in Section 2 for these syntax rules.
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 8 - October 1989
+
+
+
+ _____________________________________________________
+
+ Warning: You can not use
+ \documentstyle[10pt]{laletter} to specify a
+ point size of 10. You must leave out the point
+ size if you want the default point size of 10.
+ _____________________________________________________
+
+
+
+
+
+ 4.3. Letterhead Labels
+
+ The Laboratory has two standard styles of letterheads: one with
+ callout labels printed in the upper right corner and the other with no
+ printed callout labels. To supply information for the printed callout
+ labels, use the \date, \symbol, \serialnumber, \mailstop, and
+ \telephone commands, which are individually described in this section.
+
+
+
+ 4.3.1. Nocallouts
+
+ \nocallouts
+
+ If you do not want callout labels printed, you can use the command
+ \nocallouts and then use the \date, \symbol, or \serialnumber commands
+ to specify what information you want in the upper right corner. The
+ following example shows that the date will be printed without a label,
+ and the symbol and serial number will be combined on the line labeled
+ Ref: and printed beneath the date.
+
+
+ ==============================================================
+
+ \nocallouts
+ \date { }
+ \symbol {DD}
+ \serialnumber {89-098}
+
+ prints
+
+ January 25, 1989
+ Ref: DD-89-98
+
+ ==============================================================
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 9 - Preparing the Preamble Section
+
+
+
+ 4.3.2. Date
+
+ \date{text}
+
+ This command inserts the date into your letter. The {text} is the
+ date you want to appear on your letter. If you omit the text within
+ the braces or omit the entire command, the default will give you the
+ date at the time you run LaTeX. This default date will appear in the
+ following form: January 25, 1989. You should include the text with
+ the \date command only if you have a specific date that you want to
+ appear on your letter. The following example shows how to have a
+ specific date printed on a letter.
+
+
+ ==============================================================
+
+ \date{January 25, 1989}
+
+ prints
+
+ DATE: January 25, 1989
+
+ ==============================================================
+
+
+
+
+ 4.3.3. In Reply Refer To
+
+ \symbol{group}
+ \serialnumber{id}
+
+ These commands fill in the portion of the letterhead marked "IN REPLY
+ REFER TO:". The {group} is usually your group name. The
+ \serialnumber command is needed only if your office uses a serial
+ number to identify and record its correspondence. When used, the {id}
+ should be the serial number that identifies the letter. It will be
+ appended to the symbol with a hyphen (-), as the following example
+ shows. If you leave out the \serialnumber command, the serial number
+ will not be appended, and the group name will be the only information
+ on the In Reply... line.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 10 - October 1989
+
+
+
+
+ ==============================================================
+
+ \symbol{C-2}
+ \serialnumber{89-025}
+
+ prints
+
+ IN REPLY REFER TO: C-2-89-025
+
+ ==============================================================
+
+
+
+
+ 4.3.4. Mail Stop
+
+ \mailstop{text}
+
+ This command will produce the MAIL STOP line. The {text} should be
+ your mail stop.
+
+
+ ==============================================================
+
+ \mailstop{M995}
+
+ prints
+
+ MAIL STOP: M995
+
+ ==============================================================
+
+
+
+
+ 4.3.5. Telephone Number
+
+ \telephone{number}
+
+ This command will produce the TELEPHONE line. The number should be
+ your complete telephone number including the area code. The example
+ shows how to place an FTS number on a line below your regular number.
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 11 - Preparing the Preamble Section
+
+
+
+
+ ==============================================================
+
+ \telephone{(505) 667-5993\\(FTS) 843-4355}
+
+ prints
+
+ TELEPHONE: (505) 667-5993
+ (FTS) 843-4355
+
+ ==============================================================
+
+
+
+
+ 4.4. Address
+
+ \to{addressee}
+
+ This command gives the name and address of the person to whom you are
+ sending the letter. The double backslash (\\) in {addressee}
+ separates the information and starts a new line for each part of the
+ address. When you have more than one addressee, use a \to command for
+ each addressee as the following example shows. If you do not use a
+ \to command, you will get a warning message when you run the file
+ through LaTeX.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 12 - October 1989
+
+
+
+
+ ==============================================================
+
+ \to{John Binnington, Manager\\Technical Information Division\\
+ Brookhaven National Laboratory\\Associated Universities, Inc.\\
+ Upton, Long Island, NY 11973}
+
+ \to{R. R. Dickison, Manager\\Library Systems\\Oak Ridge National
+ Laboratory\\Oak Ridge, TN 37830}
+
+ prints
+
+ John Binnington, Manager
+ Technical Information Division
+ Brookhaven National Laboratory
+ Associated Universities, Inc.
+ Upton, Long Island, NY 11973
+
+ R. R. Dickison, Manager
+ Library Systems
+ Oak Ridge National Laboratory
+ Oak Ridge, TN 37830
+
+ ==============================================================
+
+
+ When you have more than two addressees, the list will be divided into
+ two columns. If you want to specify in which column an address is
+ printed, you can use the command \leftto{addressee} or
+ \rightto{addressee}.
+
+
+ 4.5. Attention Line
+
+ \attn{name}
+
+ You can add an attention line within the address by using the \attn
+ command on any line above the street or box number. The following
+ example shows how the \attn command is inserted within the \to
+ command.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 13 - Preparing the Preamble Section
+
+
+
+
+ ==============================================================
+
+ \to {Genie Electronics\\
+ \attn{Mr. Robert Mercer, Sales Manager}\\
+ P.O. Box 8501\\
+ Midwest City, OK 73110}
+
+ prints
+
+ Genie Electronics
+ Attn: Mr. Robert Mercer, Sales Manager
+ P.O. Box 8501
+ Midwest City, OK 73110
+
+ ==============================================================
+
+
+
+
+ 4.6. Thru or Via
+
+ \thru{namelist}
+ \via{namelist}
+
+ Either of these commands supplies a name or list of names of the
+ people to whom your letter will be routed before it is sent to the
+ addressee. The \via command prints VIA:, and the \thru command prints
+ THRU:. The following example shows the \thru command.
+
+
+ ==============================================================
+
+ \thru{L. S. Steele, X-5, MS B567}
+
+ prints
+
+ THRU: L. S. Steele, X-5, MS B567
+
+ ==============================================================
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 14 - October 1989
+
+
+
+
+ 4.7. Salutation
+
+ \salutation{text}
+
+ To have a salutation in your letter, you must use the \salutation
+ command and specify the text you want. In the following example,
+ notice that you must include the appropriate punctuation within the
+ {text}.
+
+
+ ==============================================================
+
+ \salutation{Dear Dr. Jones:}
+
+ prints
+
+ Dear Dr. Jones:
+
+ ==============================================================
+
+
+
+
+ 4.8. Subject Line
+
+ \subject{text}
+
+ This command gives you a subject line. The {text} should be the
+ subject of your letter. As the example shows, the subject line will
+ be printed in uppercase regardless of how you type it inside the
+ braces.
+
+
+ ==============================================================
+
+ \subject{Interruption of Building Schedule}
+
+ prints
+
+ SUBJECT: INTERRUPTION OF BUILDING SCHEDULE
+
+ ==============================================================
+
+
+ Note that you can use LaTeX commands such as \bf (for boldface) inside
+ the braces { }.
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 15 - Preparing the Preamble Section
+
+
+
+
+ 4.9. Reference Line
+
+ \reference{text}
+
+ This command prints a reference line for your letter. The {text}
+ should be your reference; it will be printed in uppercase in the
+ opening of the letter, directly below the subject line. If you
+ include more than one reference, the references will automatically be
+ numbered.
+
+ Notice in the example that when you have several references, you can
+ separate them with double backslashes (\\) inside the braces, or you
+ can place each reference on a separate command line.
+
+
+ ==============================================================
+
+ \reference{Office Procedures Manual \\ LaTeX Letter Reference}
+
+ or
+
+ \reference{Office Procedures Manual}
+ \reference{LaTeX Letter Reference}
+
+ prints
+
+ REFERENCES: 1. OFFICE PROCEDURES MANUAL
+ 2. LATEX LETTER REFERENCE
+
+ ==============================================================
+
+
+
+
+ 4.10. Continuation Pages
+
+ \usetoasheader
+
+ The heading on each page after the first page usually contains the
+ name of the addressee, the page number, the date, and the group serial
+ number. This information will appear on the continuation pages by
+ default, or it will be supplied by the \usetoasheader command.
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 16 - October 1989
+
+
+
+ You may use the following commands to specify information for the
+ heading on the continuation pages.
+
+
+ Command Results
+
+ _______________________ ___________________________________________
+
+ \usetoasheader The default. The header includes the name
+ of the addressee, the page number, the
+ date, and the group serial number.
+
+ \useattnasheader The name from the Attn: line is used in
+ place of the addressee's name.
+
+ \usesubjectasheader The subject line is printed in upper- and
+ lowercase letters instead of the
+ addressee's name. You may want to use this
+ header if there are many addressees.
+
+ \useotherasheader{text} The {text}, such as Distribution, is used
+ as the header instead of the addressee's
+ name.
+
+
+ The following example shows a standard second page heading using the
+ \usetoasheader command.
+
+
+ ==============================================================
+
+ \usetoasheader
+
+ prints
+
+ Genie Electronics -2- March 13, 1989
+ C-2-89-025
+
+ ==============================================================
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 17 - Preparing the Preamble Section
+
+
+
+
+ 4.11. Complimentary Close
+
+ \complimentaryclose{text}
+
+ This command prints the text that you specify for the complimentary
+ close after the body of the letter. You must include the proper
+ punctuation within the brackets. If you do not include the
+ \complimentaryclose command in the preamble section, the default
+ close, Sincerely yours, will be printed on the letter.
+
+
+ ==============================================================
+
+ \complimentaryclose{Cordially,}
+
+ prints
+
+ Cordially,
+
+ ==============================================================
+
+
+
+
+ 4.12. Signature
+
+ \signature{name}
+
+ The \signature command leaves room for a signature (four blank lines)
+ and prints the signer's name under this area flush with the left
+ margin. The printed name may be followed with a title on the next
+ line. In the \signature command, the title is separated from the name
+ with a double backslash (\\), as shown in the following example.
+
+
+ ==============================================================
+
+ \signature{T. F. Wise \\ Special Projects Group Leader}
+
+ prints
+
+ T. F. Wise
+ Special Projects Group Leader
+
+ ==============================================================
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 18 - October 1989
+
+
+
+
+ 4.13. Initial Line-Signer, Originator, and Typist
+
+ \signer{initials}
+ \originator{initials}
+ \typist{initials}
+
+ These commands produce the identification initials, but you may omit
+ the initials that do not apply to your situation. The \signer command
+ is for the initials of the signer, the \originator command is used if
+ a person other than the signer drafted the letter, and the \typist
+ command is for the typist of the letter. If you leave out the \signer
+ command, you will get a warning message, but this does not affect the
+ printing of your letter. The letter will print without the signer's
+ initials.
+ If you include all three sets of initials, they will be arranged on
+ the initial line as the following example shows.
+
+
+ ==============================================================
+
+ \signer{jm}
+ \originator{bf}
+ \typist{ar}
+
+ prints
+
+ JM-BF:ar
+
+ ==============================================================
+
+
+
+
+ 4.14. Enclosures
+
+ \enc{list}
+ \encas
+
+ You can use either the \enc or the \encas command to print the
+ enclosure line. The \enc{list} command is used when you have several
+ enclosures with your letter that have not been specifically referred
+ to in the body of the letter. The {list} is the list of your
+ enclosures with a double backslash (\\) separating the items. The
+ enclosure list is automatically numbered as shown in the following
+ example
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 19 - Preparing the Preamble Section
+
+
+
+
+ ==============================================================
+
+ \enc{Photograph, Neg. No. 72-4304 \\
+ Slide and Vu-graph Nos. 8755 and 3908 \\
+ Drawing No. 3988-R}
+
+ prints
+
+ Enc. 1. Photograph, Neg. No. 72-4304
+ 2. Slide and Vu-graph Nos. 8755 and 3908
+ 3. Drawing No. 3988-R
+
+ ==============================================================
+
+
+ The \encas (enclosed as stated) command is used only if each
+ individual enclosure is completely identified within the body of the
+ letter. The following example shows the \encas command and the
+ enclosure line as it will appear on your letter.
+
+
+ ==============================================================
+
+ \encas
+
+ prints
+
+ Enc. a/s
+
+ ==============================================================
+
+
+
+
+ 4.15. Attachments
+
+ \attachments{list}
+
+ This command prints a numbered list of attachments for your letter.
+ The {list} is the list of attachments, and, as the example shows, the
+ items should be separated with a double backslash (\\) inside the
+ braces.
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 20 - October 1989
+
+
+
+
+ ==============================================================
+
+ \attachments{Memo, Gredin to Platz, March 12, 1982 \\
+ Memo, Rivera to Tines, January 14, 1983}
+
+ prints
+
+ Attachments:
+ 1. Memo, Gredin to Platz, March 12, 1982
+ 2. Memo, Rivera to Tines, January 14, 1983
+
+ ==============================================================
+
+
+ \attachmentas
+ \attachmentsas
+
+ Use the command \attachmentas to specify the singular attachment as
+ stated for an item completely identified in the text of the letter.
+ The command \attachmentsas is used for a number of specified
+ attachments. The following example shows the singular \attachmentas
+ command.
+
+
+ ==============================================================
+
+ \attachmentas
+
+ prints
+
+ Attachment a/s
+
+ ==============================================================
+
+
+
+
+ 4.16. Copy or Distribution List
+
+ \cy{list}
+ \distribution{list}
+
+ Either of these commands gives a list of the people to whom
+ informational copies of your letter will be sent. The \cy{list}
+ command prints the list with the first line beside a Cy:, and the
+ \distribution{list} command prints the list beneath a Distribution:
+ line. The {list} is the list of people to whom copies should be sent.
+ The names are separated with a double backslash (\\), as shown in the
+ following example.
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 21 - Preparing the Preamble Section
+
+
+
+
+ ==============================================================
+
+ \cy{R. T. Smith, C-2, MS B263 \\ M. K. Terry, C-10, MS B296 \\ File}
+
+ prints
+
+ Cy: R. T. Smith, C-2, MS B263
+ M. K. Terry, C-10, MS B296
+ File
+
+
+ \distribution{T. S. Solomon, TP-1, MS B233 \\
+ A. J. Gomez, TP-2, MS B234}
+
+ prints
+
+ Distribution:
+ T. S. Solomon, TP-1, MS B233
+ A. J. Gomez, TP-2, MS B234
+
+ ==============================================================
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Preparing the Document Section - 22 - October 1989
+
+
+
+ 5. PREPARING THE DOCUMENT SECTION
+ ______________________________________________________________________
+
+ This chapter describes the commands that go into the document section
+ of your letter. The document section is the second main section in
+ your LaTeX letter file and follows immediately after the preamble
+ section. It starts with a \begin{document} command, ends with an
+ \end{document} command, and contains the commands and text that
+ produce the body of the letter.
+
+
+ _____________________________________________________
+
+ The following letter commands must be in every
+ letter file in the order in which they are
+ presented.
+ _____________________________________________________
+
+
+
+ \begin{document}
+
+ This command signals the beginning of your document. All of the
+ preamble commands should be placed before this command in your file.
+
+ \opening
+
+ This command uses the information from the preamble commands to print
+ the opening of your letter. All of the preamble commands that supply
+ information for the opening of your letter must appear before this
+ command. LaTeX will ignore or give an error message for any opening
+ preamble commands that are encountered after the \opening command.
+
+ Body of Letter
+
+ The body of your letter comes after the \opening command. You can use
+ any of the standard LaTeX commands inside the body to control the
+ appearance of the text.
+
+ \closing
+
+ The \closing command comes after the body of your letter and tells
+ LaTeX to print out the closing information for your letter. It uses
+ commands and information entered in the preamble section of your file.
+ All preamble commands must be placed before the \begin{document}
+ command.
+
+ \end{document}
+
+ The last line of your file must be the \end{document} command. This
+ line tells LaTeX that you are finished with your document, and LaTeX
+ will ignore anything after this command.
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 23 - Printing Your Letter
+
+
+
+ 6. PRINTING YOUR LETTER
+ ______________________________________________________________________
+
+ Once you have finished creating your letter file with the letter
+ commands in it, follow these steps to print your letter.
+
+
+ _____________________________________________________
+
+ These steps are the same steps you use to print
+ any LaTeX file.
+ _____________________________________________________
+
+
+
+
+ (1) Run your file through LaTeX by typing
+
+ latex filename.tex
+
+ where filename.tex is the name of your letter file.
+
+ If you have any error messages, they will appear on the screen
+ during execution. These error messages are interactive and will
+ wait for you to respond to the
+ ? (question mark) prompt. You can type another question mark (?)
+ at the prompt to display a list of your options at that point.
+ You will also get a file called filename.log that contains the
+ error messages that were produced. See
+ Appendix E for more information about error messages.
+
+ When LaTeX ends execution successfully, you will receive a
+ message that the filename.dvi file is created, and you can
+ proceed to the next step in printing your letter. (Occasionally,
+ however, you may receive a message that a .dvi file has been
+ created when only a partial file has been created. If this
+ happens, you probably have an error at the point where the
+ partial .dvi file ends.) When an error occurs, you must correct
+ your error and run your file through LaTeX again before you can
+ print the letter.
+
+ If you have trouble running LaTeX, call the Consulting Office or
+ see one of the LaTeX publications mentioned in Additional
+ Information in Section 2.
+
+
+ (2) If your computer has a program that will allow you to preview
+ .dvi files, you should preview your filename.dvi file now and
+ make any necessary corrections. If your computer cannot preview
+ .dvi files, go on to the next step.
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Printing Your Letter - 24 - October 1989
+
+
+
+ (3) Print out your filename.dvi file by using the correct procedures
+ for your computer. If you need help with the printing, you
+ should contact your local system manager if you are using a
+ workstation or distributed processor, or you can call the
+ Consulting Office if you are using a C-Division computer.
+
+ If you want to send your output to one of the PAGES raster
+ printer-plotter devices, you can use a utility called DVIPAGES.
+ This utility can be used for unclassified output from the UNIX
+ distributed processors Alpha and Beta or from the VAX/VMS
+ distributed processors. For more information about this utility,
+ see DVIPAGES: TEX DVI to PAGES Quick Steps. You can order this
+ document from the CIC by using the Documentation Request Form in
+ the back of this document.
+
+
+ _____________________________________________________
+
+ At the present time, DVIPAGES cannot handle
+ secret or confidential letters.
+ _____________________________________________________
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 25 - Customizing Your Letter
+
+
+
+ 7. CUSTOMIZING YOUR LETTER
+ ______________________________________________________________________
+
+ This chapter describes special letter commands that you can put into
+ the preamble section of your file to customize your letter. These
+ commands must be placed before the \begin{document} command in your
+ file.
+
+
+ 7.1. Header Style
+
+ The header for a letter includes the Los Alamos logo and address, plus
+ the optional callout labels. You can choose from four header styles.
+ Three of these header styles use fonts that print a header on plain
+ paper, and the other header style allows you to use the preprinted
+ stationery provided by the Laboratory. The following table lists the
+ commands for the different header styles.
+
+
+ Command Results
+
+ _________________________ __________________________________________
+
+ \headerfonts{texfonts} This is the default header style because
+ these fonts (Computer Modern) are
+ available on all computers with LaTeX and
+ TeX. It gives a header similar to the
+ standard letterhead but with a solid Los
+ Alamos logo.
+
+ \headerfonts{lafonts} This command gives the Laboratory's
+ standard letterhead with an outline style
+ logo, but these fonts are not installed on
+ all computers.
+
+ \headerfonts{postscript} This command gives a header similar to the
+ standard letterhead with an outline style
+ logo. These fonts can be used with
+ PostScript printers only.
+
+ \headerfonts{letterpaper} This command allows you to use preprinted
+ stationery. It suppresses the printing of
+ the header. (See Section 7.6 for more
+ information.)
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Customizing Your Letter - 26 - October 1989
+
+
+
+ _____________________________________________________
+
+ The examples in Appendix C show what each of
+ these header styles produces.
+ _____________________________________________________
+
+
+
+ To use the lafonts for letters, you need four special fonts named
+ book6, book7, la28, and spec12. These fonts are part of the PCTeX
+ distribution for IBM PCs. For the VMS and UNIX systems, you can get
+ the fonts from the following files on the Common File System (CFS):
+
+ o /TEX/FONTS/MEMO_LETTER.BCK for VMS systems
+
+ o /TEX/FONTS/MEMO_LETTER.TAR for UNIX systems
+
+ For more information, see TeX Fonts for Los Alamos Memos and Letters
+ Installation Reference, which can be ordered from the CIC by using the
+ Documentation Request Form in the back of this document. If you have
+ questions about the lafonts, call the Consulting Office.
+
+ The PostScript fonts are available for PostScript printers in a
+ program called DVIPS. DVIPS is available on the distributed
+ processors Alpha and Beta. The VAX/VMS version is available on CFS as
+ /TEX/DEVICE_DRIVERS/DVIPS8901.BCK. For Sun and Apollo workstations,
+ you can purchase the DVIPS program from the CIC. DVIPS for an IBM PC
+ can be purchased from MEC-9.
+
+
+ 7.2. Body Style
+
+ This section describes the commands that affect the body of your
+ letter.
+
+
+ 7.2.1. Type Style
+
+ The body of your letter can be printed in typewriter type or
+ proportionally spaced Roman type. You can specify the type style by
+ putting one of the following commands in your preamble section:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 27 - Customizing Your Letter
+
+
+
+ Command Results
+
+ _______________ _____________________________________________
+
+ \typeface{tt} Gives typewriter type. (This is the
+ default.)
+
+ \typeface{rm} Gives proportionally spaced Roman type.
+
+
+ The typeface default is typewriter type because letters are
+ traditionally typed with typewriters. See Appendix C for examples of
+ the typewriter and Roman typefaces.
+
+
+ 7.2.2. Fonts
+
+ You can also pick different fonts for the body of your letter. The
+ following table lists your choices for the body fonts.
+
+
+ Command Results
+ ______________________ ________________________________________
+
+ \bodyfonts{texfonts} This is the default body font because
+ these fonts are available on all
+ computers with LaTeX and TeX.
+
+ \bodyfonts{postscript} These fonts can be used only with
+ PostScript printers.
+
+
+ The Computer Modern fonts come with TeX and are on all systems that
+ have TeX and LaTeX installed. The PostScript fonts, for use with a
+ PostScript printer, require the DVIPS program mentioned in Section
+ 7.1. See Appendix C for examples of these body fonts.
+
+
+ 7.2.3. Margin Space
+
+ You can adjust both the top and side margins of your letter. The
+ default side margin of a letter is defined by the edges of the
+ letterhead. The top margin space (the space between the letterhead
+ and the address) is usually four vertical spaces. The {amount} for
+ the margin space commands can be expressed in inches (in), centimeters
+ (cm), points (pt), picas (pc), or millimeters (mm). A positive value
+ increases the {amount}, and a negative value decreases it. You can
+ change the top and side margins of your letter with the following
+ commands where {amount} is the total change:
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Customizing Your Letter - 28 - October 1989
+
+
+
+ Command Results
+ ________________________ _____________________________________
+
+ \expandwidth{amount} Increases or decreases the width of
+ the text to change the side margin.
+ The {amount} is split between the
+ left and right sides.
+
+ \expandtopmargin{amount} Increases or decreases the distance
+ between the letterhead and the
+ address.
+
+
+
+ 7.3. Classification Labels
+
+ The following commands can be used to print a secret, confidential, or
+ unclassified label on your letter.
+
+
+ Command Results
+ _______________ _____________________________________________
+
+ \classlabel{ } The default. It does not print a label on
+ the letter.
+
+ \classlabel{u} Prints a label that says UNCLASSIFIED.
+
+ \classlabel{c} Prints a label that says CONFIDENTIAL.
+
+ \classlabel{s} Prints the SECRET label.
+
+
+ These commands print the appropriate label at the top and bottom of
+ the letter in heavy black print. You can use them for labeling a
+ classified letter, but we suggest that you use the more visible red-
+ stamped classification labeling on the front and back of the paper
+ instead of using these commands.
+
+
+ _____________________________________________________
+
+ The LaTeX letter commands will not print a red
+ label and will not print any label on the back
+ of the paper.
+ _____________________________________________________
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 29 - Customizing Your Letter
+
+
+
+
+ 7.4. Page Breaks
+
+ This section describes the commands that you can use to control the
+ page breaks in your letter.
+
+
+ 7.4.1. General Page Breaks
+
+ \newpage
+
+ The LaTeX command \newpage breaks for a new page at the place where
+ you use this command. You can put the command anywhere in the body of
+ your letter or inside the brackets of a letter command.
+
+ The following example shows the \newpage command within the brackets
+ of another command. It divides the list between the second and third
+ name, with the first two names appearing on the current page of the
+ letter and the third name appearing on the next page.
+
+
+ ==============================================================
+
+ \cy{A. B. Cog \\ C. D. Man
+ \newpage \\ E. F. Barr}
+
+ prints on separate pages
+
+ A. B. Cog E. F. Barr
+ C. D. Man
+
+ ==============================================================
+
+
+
+
+ 7.4.2. Page Break Before a List
+
+ If, after printing your letter, you find that some of the lists in the
+ closing section are broken between pages, you can use the following
+ commands to start the list at the top of the next page. You can put
+ these commands anywhere in the preamble section of your file.
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Customizing Your Letter - 30 - October 1989
+
+
+
+ Command Results
+ ______________________ __________________________________________
+
+ \cypagebreak Starts the copy list at the top of the
+ next page.
+ \attachmentspagebreak Starts the list of attachments at the top
+ of the next page.
+ \distributionpagebreak Starts the distribution list at the top of
+ the next page.
+ \encpagebreak Starts the list of enclosures at the top
+ of the next page.
+
+
+
+ 7.5. Short Letters
+
+ \shortletterstyle
+
+ For short letters of ten or fewer lines, the Office Procedures Manual
+ recommends a modified block style. The short letter style has double
+ spaced lines and indented paragraphs.
+
+ To produce this type of letter, add the \shortletterstyle command to
+ the preamble section of your file. If you use this short letter style
+ and the body of your letter is over one page long, you will get a
+ warning message when you run LaTeX. See Appendix C for an example of
+ a short letter style.
+
+
+ 7.6. Preprinted Stationery
+
+ You can use Laboratory stationery with the preprinted header on it by
+ including the following command in the preamble section of your file:
+
+ \headerfonts{letterpaper}
+
+ This command prints your header information next to the preprinted
+ labels. However, the information may not line up correctly with the
+ labels on the stationery because of the different types of printers.
+ If your printer is not lining up the information correctly, put the
+ following commands in the preamble section of your file to shift the
+ printed information and correct the problem.
+
+ \letterpaperhcorr{distance}
+ \letterpapervcorr{distance}
+
+ The \letterpaperhcorr command corrects the horizontal positioning, and
+ the \letterpapervcorr command corrects the vertical positioning. The
+ {distance} parameter is the amount the text must be moved and can be
+ an integer or decimal number. The {distance} can be expressed in
+ inches (in), centimeters (cm), points (pt), picas (pc), or millimeters
+ (mm), and it can be a positive or negative value.
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 31 - Customizing Your Letter
+
+
+
+ When you want to adjust the printing horizontally (using
+ \letterpaperhcorr), a positive distance moves the printed material to
+ the right, and a negative distance moves the print to the left. When
+ you want to adjust the printing vertically (using \letterpapervcorr),
+ a positive distance moves the printed material down on the page, and a
+ negative distance moves the print up on the page.
+
+ The following table shows the effect of each command in adjusting the
+ printing. The n's indicate a number, and the u's indicate the
+ abbreviation for the unit of measure (e.g., in for inches).
+
+
+ Command Results
+ ______________________ ________________________________________
+
+ \letterpaperhcorr{+nu} Moves text to the right
+ \letterpaperhcorr{- Moves text to the left
+ nu}
+ \letterpapervcorr{+nu} Moves text down on the paper
+ \letterpapervcorr{- Moves text up on the paper
+ nu}
+
+
+ The following example will move the printed material of the letter to
+ the right 1 inch and up 2 inches.
+
+
+ ==============================================================
+
+ \letterpaperhcorr{1in}
+ \letterpapervcorr{-2in}
+
+ ==============================================================
+
+
+
+
+ _____________________________________________________
+
+ If you routinely use the same printer to print
+ letters on preprinted stationery, you can figure
+ out what distances line up the text properly for
+ your printer and use those distances for each
+ letter. You must include these commands in each
+ letter file.
+ _____________________________________________________
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Customizing Your Letter - 32 - October 1989
+
+
+
+ 7.7. Multiple Letters to a Mailing List
+
+ With LaTeX letter commands, you can send a personalized letter to each
+ person on a mailing list. The file for multiple letters is set up
+ differently from the file for single letters. The \to command is
+ placed in the document section of the letter rather than in the
+ preamble section. The body of the letter is put into a file by itself
+ and called by the letter file for each individual address. Following
+ is a general format for a multiple-letter file, in which BODYFILE.TEX
+ is the name of the file that contains the body of the letter.
+ \documentstyle{laletter}
+
+ Letter commands, such as
+ \mailstop
+ \complimentaryclose
+ .
+ .
+
+ \begin{document}
+
+ \to{Address for first letter}
+ \opening
+ \input{bodyfile.tex}
+ \closing
+
+ \to{Address for second letter}
+ \opening
+ \input{bodyfile.tex}
+ \closing
+
+ \end{document}
+
+ It is also possible to change the salutation for each letter by
+ putting a \salutation command after each \to command.
+
+
+ 7.8. Mailing Labels
+
+ You can print mailing labels with the LaTeX letter commands by putting
+ the following command into the preamble section.
+
+ \makemaillabels
+
+ When you use this command, sheets of mailing labels will be printed
+ after the letters have been printed. The default will produce labels
+ in two columns, each with seven
+ 1 1/2- by 4-inch labels, suitable for reproducing onto Avery brand
+ number 5362 address labels.
+
+ An easy way to print mailing labels is to print them onto ordinary
+ paper and use a copy machine to transfer the addresses onto the sheets
+ of mailing labels. If you are running mailing-label paper through a
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 33 - Customizing Your Letter
+
+
+
+ laser printer or a copy machine, be sure to use paper suitable for a
+ laser printer.
+
+
+ 7.8.1. Return Address Labels
+
+ You can have labels printed with a return address by putting the
+ following line into the preamble section.
+
+ \returnaddress{text}
+
+ Your address is the {text} for the \returnaddress command. The format
+ for the {text} is the same as used for the \to command.
+
+
+ 7.8.2. Label Size
+
+ You can print labels on different sizes of mailing labels, as long as
+ they are arranged in two columns on an 8 1/2- by 11-inch piece of
+ paper. To indicate a specific size of mailing label, use these
+ commands:
+
+ \maillabelheight{amount}
+ \maillabeltopmargin{amount}
+
+ The {amount} for \maillabelheight indicates the height of each mailing
+ label. The default is 1.5 inches.
+
+ At the top of a sheet of mailing labels, you will usually find a
+ narrow strip of paper that is not used for printing. The {amount} for
+ \maillabeltopmargin indicates the distance from the top of the sheet
+ of labels down to the top of the first label. The default is 0.25
+ inch.
+
+ The following example shows you how to print 1-inch labels that begin
+ 1/2 inch down from the top of the sheet.
+
+
+ ==============================================================
+
+ \maillabelheight{1in}
+ \maillabeltopmargin{.5in}
+
+ ==============================================================
+
+
+ You may find that some printers do not accurately measure an inch. If
+ the printing is not centered properly, try adjusting the values of
+ \maillabelheight and \maillabeltopmargin. A very small adjustment
+ will often fix the problem.
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Customizing Your Letter - 34 - October 1989
+
+
+
+
+ 7.8.3. Skipping Labels
+
+ When you have a sheet of mailing labels with some labels peeled off,
+ you can use the command \skiplabels{number} in the preamble section to
+ specify the number of missing labels and start the printing at the
+ correct spot. In the following example, four labels will be skipped
+ in column one, and the printing will start on the fifth label in that
+ column.
+
+
+ ==============================================================
+
+ \skiplabels{4}
+
+ ==============================================================
+
+
+
+
+ 7.8.4. The .MLB File
+
+ As part of the process of printing mailing labels, a temporary file
+ with the suffix .mlb is created. You can remove filename.mlb after
+ LaTeX has finished running.
+
+
+ 7.9. Floats in LaTeX Letters
+
+ The LaTeX figure and table environments can be used in LaTeX letters.
+ (See LaTeX: a Document Preparation System, by Leslie Lamport, for more
+ information about the special environments.) To avoid splitting a
+ table or figure, LaTeX floats these environments to a convenient place
+ in the document.
+
+ In the figure and table environments, optional placement arguments can
+ be included within square brackets. The arguments place the
+ environment at a specified place on the page, if possible.
+
+
+ Argument Results
+
+ __________ __________________________________________________
+ [h] Places the environment at the current line (here).
+
+ [b] Places the environment at the bottom of the page.
+
+ [t] Places the environment at the top of the page.
+
+ [p] Places the environment on a separate page.
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 35 - Customizing Your Letter
+
+
+
+ Some of the placement options can cause problems, so you should be
+ aware of how they can interact with the opening and the closing of the
+ letter. The [t] option places the float at the top of a page, so if
+ it is used on page one, the float will be placed above the letterhead.
+ If no square brackets ([ ]) are used, the placement default is [tbp]
+ and can place the environment above the letterhead if it is used on
+ the first page.
+
+ Figure and table environments on the last page of text can also lead
+ to undesirable results. The last figure or table can end up on a
+ separate page followed by the closing and signature on an additional
+ page. Be sure to use the [h] option for any floating environments on
+ the last page and check that none of the tables and figures printed on
+ the last page have floated in from a previous page. The use of the
+ [h] will usually make it possible for the end of the letter body and
+ the closing to be printed on the same page.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Summary of Commands - 36 - October 1989
+
+
+
+ APPENDIX A. SUMMARY OF LATEX LETTER COMMANDS
+ ______________________________________________________________________
+
+
+
+ Command Description
+ ______________________________ ________________________________________
+ ______________________________ ________________________________________
+
+ Described in Preparing the Preamble section
+
+ \documentstyle{laletter} sets up letter style for 10 point
+
+ \documentstyle[11pt]{laletter} sets up letter style for 11 point
+
+ \documentstyle[12pt]{laletter} sets up letter style for 12 point
+
+ \date{text} date on letter (default is the date you
+ run LaTeX)
+
+ \symbol{group} group identification
+
+ \serialnumber{id} correspondence identification number
+
+ \mailstop{text} Laboratory mail stop
+
+ \telephone{text} complete telephone number
+
+ \to{name} letter recipient
+
+ \attn{name} attention line
+
+ \thru{namelist} person(s) to send letter through
+
+ \via{namelist} person(s) to send letter via
+
+ \salutation{name} salutation line
+
+ \subject{text} subject line
+
+ \reference{text} supplies a reference line under the
+ subject line
+
+ \usetoasheader uses name of addressee as header on
+ continuation pages
+
+ \useattnasheader uses attention line as header on
+ continuation pages
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 37 - Summary of Commands
+
+
+
+ \usesubjectasheader uses subject as header on continuation
+ pages
+
+ \useotherasheader{text} uses {text} as header on continuation
+ pages
+
+ \complimentaryclose{text} complimentary close line (default is
+ Sincerely yours,)
+
+ \signature{name} leaves room for signature and prints
+ signer's name and title
+
+ \signer{initials} initials of signer for initial line
+
+ \originator{initials} initials of originator (if different
+ from signer) for initial line
+
+ \typist{initials} initials of typist for initial line
+
+ \enc{list} list of enclosures
+
+ \encas gives the line: Enc. a/s (enclosure as
+ stated)
+
+ \attachments{list} list of attachments
+
+ \attachmentas gives the line: Attachment a/s (as
+ stated)
+
+ \attachmentsas gives the line: Attachments a/s (as
+ stated)
+
+ \cy{list} copy list
+
+ \distribution{list} distribution list
+
+ Described in Preparing the Document section
+
+ \begin{document} begins letter
+
+ \opening prints opening of letter
+
+ \closing prints closing of letter
+
+ \end{document} ends letter
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Summary of Commands - 38 - October 1989
+
+
+
+ Described in Customizing Your Letter section
+
+ \headerfonts{font_type} determines font for header of letter
+ texfonts (default)
+ lafonts
+ postscript
+ letterpaper
+
+ \bodyfonts{font_type} determines font for body of letter
+ texfonts (default)
+ postscript
+
+ \typeface{type} sets typeface for body of letter
+ tt (default)
+ rm
+
+ \expandwidth{amount} increases or decreases side margins
+
+ \expandtopmargin{amount} increases or decreases space between the
+ letterhead and address
+
+ \classlabel{label} prints classification labels (No label
+ is the default.)
+ u unclassified
+ c confidential
+ s secret
+
+ \cypagebreak breaks page before copy list
+
+ \attachmentspagebreak breaks page before list of attachments
+
+ \distributionpagebreak breaks page before distribution list
+
+ \encpagebreak breaks page before list of enclosures
+
+ \shortletterstyle format for short letters (double-spacing
+ and indented paragraphs)
+
+ \letterpaperhcorr{distance} corrects horizontal alignment of letter
+ paper
+
+ \letterpapervcorr{distance} corrects vertical alignment of letter
+ paper
+
+ \makemaillabels prints mailing labels for letters
+
+ \returnaddress{text} prints return address for labels
+
+ \maillabelheight{amount} specifies height of mailing label
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 39 - Summary of Commands
+
+
+
+ \maillabeltopmargin{amount} specifies distance from the top of a
+ sheet of labels to top of first label
+
+ \skiplabels{number} starts printing at first usable label
+ after number of labels
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Syntax and Conventions - 40 - October 1989
+
+
+
+ APPENDIX B. SYNTAX RULES AND DOCUMENTATION CONVENTIONS
+ ______________________________________________________________________
+
+
+ B.1. Syntax Rules
+
+ The following syntax rules apply to the LaTeX letter commands:
+
+ o Commands in the preamble section are not order dependent. That
+ is, you can specify them in any order.
+
+ o Spaces before and after braces ({ }) are ignored.
+
+ o You can continue a command over multiple lines. However, you
+ should split the line at a space.
+
+ o You can specify only one preamble command per line.
+
+ o You can separate fields inside the braces ({ }) by a double
+ backslash (\\), or you can repeat the command with new
+ information inside the braces.
+
+
+ Note that these rules do not apply to the standard LaTeX commands (for
+ example, \documentstyle, \begin{document}, and \end{document}).
+
+
+ B.2. Documentation Conventions
+
+ The following standards and conventions are used in C-Division
+ publications.
+
+ o The italicized characters are symbolic names that you must
+ replace with a name or value.
+
+ o Filenames are written in uppercase characters.
+
+ o Square brackets ([]) denote optional input.
+
+ o To enter a command at a terminal, you must end the line with a
+ return (or end-of-line keystroke) to send the command to the
+ computer. In most cases, the return is not shown in the command
+ line or example; in others it is shown as <RETURN>, which
+ indicates pressing the key marked return or its equivalent.
+
+ o Examples show exactly what you type and are always shown enclosed
+ with double lines.
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 41 - Example Letters
+
+
+
+ APPENDIX C. EXAMPLE LETTERS
+ ______________________________________________________________________
+
+ This appendix contains examples of letters that have been created with
+ the LaTeX letter commands. The examples show the four types of
+ headers that are available for letters, as well as some of the various
+ combinations of body fonts and typefaces. The body of each letter
+ explains what features to notice about that particular letter. In
+ each example, you will see the LaTeX source file that produced the
+ letter, followed by the resulting letter.
+
+ The size of the actual example letters is reduced for display
+ purposes.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Example Letters - 42 - October 1989
+
+
+
+
+ Example 1. Typical Letter
+
+ \documentstyle[12pt]{laletter}
+ \nocallouts
+ \symbol{ST-5}
+ \serialnumber{89-213}
+ \to{Genie Electronics\\
+ \attn{Mr.\ Robert Mercer, Sales Manager}\\
+ P.O. Box 8501\\
+ Midwest City, OK 73110}
+ \salutation {Dear Mr.\ Mercer:}
+ \subject{typical letter}
+ \complimentaryclose {Sincerely yours,}
+ \signature {Gregory L. Stevenson\\
+ Engineering and Development Group Leader}
+ \signer {GLS}
+ \typist {sd}
+ \cy {CRMO (2), MS A150\\
+ File}
+ \headerfonts{lafonts}
+ \bodyfonts{texfonts}
+ \typeface{tt}
+
+ \begin{document}
+ \opening
+ This example shows what a typical letter might look like. It uses
+ the lafonts option for the header and the texfonts option for the
+ body of the letter. The body has the typewriter typeface with a
+ point size of 12. This letter has no printed callout labels in the
+ upper right corner.
+
+ Remember that LaTeX interprets a blank line as the start of a new
+ paragraph, and that any of the special characters \#,\$,\%,
+ \&, \{, and \} must be preceded by a backslash. To produce double
+ quotes in typewriter typeface, use the " key on your keyboard.
+
+ The spacing and indentation of the preamble commands make the
+ file easier to read; the outcome of your file is not affected.
+ The preamble section begins with the $\backslash$documentstyle
+ command and continues to the $\backslash$begin\{document\}
+ command where the document section starts.
+
+ I hope this sample letter will help you produce letters with LaTeX.
+ \closing
+ \end{document}
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 43 - Example Letters
+
+
+
+ ______________________________________________________________________
+
+ The hardcopy version of this document contains a figure in this space.
+ ______________________________________________________________________
+
+
+ Example 2. Short Letter Style
+
+ \documentstyle{laletter}
+ \date{January 25, 1989}
+ \symbol{C-12}
+ \serialnumber{89-567}
+ \mailstop{B296}
+ \telephone{(505) 667-7877}
+ \subject{PostScript Printing of Letters}
+ \to{S. D. Thompson\\Department of Business Practice\\
+ ABC Business College\\4501 Sycamore Street\\Oakmont, OK}
+ \salutation{Dear Professor Thompson:}
+ \complimentaryclose{Sincerely yours,}
+ \signer{mbt}
+ \typist{tyj}
+ \signature{Michael B. Tole\\Computer User Services}
+ \cy{CRMO (2), MS A150\\C-10 File}
+ \shortletterstyle
+ \headerfonts{postscript}
+ \bodyfonts{postscript}
+ \classlabel{u}
+
+ \begin{document}
+ \opening
+
+ This letter is in the short-letter format. It was printed with a
+ PostScript printer using PostScript fonts for both the header and
+ the body. The print defaulted to a point size of 10. The
+ classification label is printed in black on only the front of the page.
+
+ Notice how to input a sentence that ends in an uppercase letter, such
+ as a sentence about CFS\@. This TeX procedure gives the correct
+ space when a period follows an uppercase letter. Also notice the
+ $\backslash$date command is included so that the date will appear
+ as January 25, 1989, even though that date is not the date at the time
+ of printing.
+
+ \closing
+ \end{document}
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Example Letters - 44 - October 1989
+
+
+
+ ______________________________________________________________________
+
+ The hardcopy version of this document contains a figure in this space.
+ ______________________________________________________________________
+
+
+ Example 3. Letter on Preprinted Stationery
+
+ \documentstyle{laletter}
+ \symbol{A-DO}
+ \serialnumber{89-14}
+ \mailstop{J356}
+ \telephone{(505) 665-9321}
+ \to{R. K. Thome\\L. L. Smith and Company\\P. O. Box 421\\
+ Cleveland, Ohio 45690}
+ \salutation{Dear Ms.\ Thome:}
+ \subject{Letter Printed on Preprinted Stationery}
+ \complimentaryclose{Very truly yours,}
+ \signature{L. G. Gordon, Section Leader\\
+ Analysis and Assessment Division}
+ \signer{lgg}
+ \typist{ker}
+ \headerfonts{letterpaper}
+ \letterpaperhcorr{+.05in}
+ \letterpapervcorr{+.05in}
+ \bodyfonts{postscript}
+ \typeface{rm}
+ \attachmentas
+ \begin{document}
+ \opening
+
+ This letter was printed on preprinted stationery. Notice that the
+ $\backslash$letterpaperhcorr and $\backslash$letterpapervcorr commands
+ are used to line up the information with the labels. The body font
+ is the PostScript font, and the typeface is in Roman type.
+ Emphasized text (like {\em this}) is printed in italics.
+
+ Notice that you can use the equation formatting that TeX and LaTeX
+ are known for. This feature is useful if your letters contain
+ equations like \[ x = \frac{-b \pm \sqrt{b^{2}-4ac} } {2a} \]
+
+ You can also use tables like the following:
+
+ \begin{tabular} {c c c c c}
+ \sl Year & \sl Simple Interest & \sl Annual Comp. &
+ \sl Daily Comp. & \sl Continuous\\
+ 0 & 5000.00 & 5000.00 & 5000.00 & 5000.00\\
+ 1 & 5400.00 & 5400.00 & 5416.37 & 5416.44\\
+ 2 & 5800.00 & 5832.00 & 5867.42 & 5867.55
+ \end{tabular}
+ \closing
+ \end{document}
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 45 - Example Letters
+
+
+
+ ______________________________________________________________________
+
+ The hardcopy version of this document contains a figure in this space.
+ ______________________________________________________________________
+
+
+ Example 4. Letter with Multiple Addressees
+
+ \documentstyle[12pt]{laletter}
+ \typeface{rm}
+ \date { }
+ \symbol {IS-DO}
+ \serialnumber {89-144}
+ \mailstop {P360}
+ \telephone {(505) 667-4355\\(FTS) 843-4355}
+ \to{John Binnington, Manager\\Technical Information Division\\
+ Brookhaven National Laboratory\\Upton, Long Island, NY 11973}
+ \to{R. R. Dickison, Manager\\Library System\\
+ Oak Ridge National Laboratory\\ Oak Ridge, TN 37830}
+ \to{Juanita L. Garcia\\Library Science Specialist\\
+ Sandia National Laboratories\\Albuquerque, NM 87115}
+ \to{Robert Lormand\\Solar Energy Research Institute\\
+ 1536 Cole Boulevard\\ Golden, CO 80401}
+ \salutation {Ladies and Gentlemen:}
+ \subject {Letter with Multiple Addressees}
+ \reference{Your letter of January 8, 1989}
+ \complimentaryclose{Sincerely yours,}
+ \signature{Agnes J. Luise, Librarian\\Information Services Division}
+ \signer{ajl}
+ \originator {rsg}
+ \typist{gh}
+ \enc{Letter, Smith to Jones, June 25, 1986\\
+ Letter, Landau to Gresham, March 1, 1987}
+ \cy {CRMO (2), w/enc., MS A150\\File, w/enc.}
+
+ \begin {document}
+ \opening
+
+ This letter has a header that was created by the default texfonts
+ and a body using texfonts with Roman typeface. The list of addresses
+ is printed in two columns. When there is an uneven number in the
+ list, the left column will contain the extra address.
+
+ Notice that both the subject line and the reference line are printed
+ in uppercase characters. The enclosure list is automatically
+ numbered.
+
+ These commands can help you prepare your next LaTeX letter.
+ \closing
+ \end {document}
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Example Letters - 46 - October 1989
+
+
+
+ ______________________________________________________________________
+
+ The hardcopy version of this document contains a figure in this space.
+ ______________________________________________________________________
+
+
+ Example 5. Multiple Letters with Mailing Labels
+
+ \documentstyle[11pt]{laletter}
+ \date{August 1, 1989}
+ \symbol{A-DO}
+ \serialnumber{89-14}
+ \mailstop{J356}
+ \telephone{(505) 665-9321}
+ \subject{Multiple Letters to a Mailing List}
+ \usesubjectasheader
+ \complimentaryclose{Very truly yours,}
+ \signature{L. G. Gordon, Section Leader\\
+ Analysis and Assessment Division}
+ \signer{lgg}
+ \typist{ker}
+ \headerfonts{postscript}
+ \bodyfonts{texfonts}
+ \typeface{rm}
+ \enc{Letter, Smith to Jones, June 25, 1986\\
+ Letter, Landau to Gresham, March 1, 1987\\
+ Letter Egon to Poulan, August 13, 1988\\
+ Memo, Martinite to Distribution, September 30, 1988}
+ \cy{CRMO (2), MS A150\\C-12 File}
+ \makemaillabels
+ \returnaddress{L. G. Gordon, MS J356\\
+ Analysis and Assessment Division\\
+ Los Alamos National Laboratory\\Los Alamos, NM 87545}
+
+ \begin{document}
+ \to{John Binnington, Manager\\L. L. Smith and Company\\
+ P. O. Box 9871\\ Cleveland, Ohio 45690}
+ \salutation{Dear Mr.\ Binnington:}
+ \opening
+ \input{bodyfile.tex}
+ \closing
+
+ \to{Roy Nielson\\Lawrence Berkeley Laboratory\\
+ University of California\\Berkeley, CA 94720}
+ \salutation{Dear Dr.\ Nielson:}
+ \opening
+ \input{bodyfile.tex}
+ \closing
+
+ \to{Ramon J. Martinez\\Technical Library\\
+ Sandia National Laboratories\\ Albuquerque, NM 87115}
+ \salutation{Dear Mr.\ Martinez:}
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 47 - Example Letters
+
+
+
+ \opening
+ \input{bodyfile.tex}
+ \closing
+
+ \to{James R. Jones\\Brown and Co.\\3685 North 13th St.\\
+ Chicago, IL 67834}
+ \salutation{Dear Mr.\ Brown:}
+ \opening
+ \input{bodyfile.tex}
+ \closing
+
+ \end{document}
+
+
+
+ Input Text File (BODYFILE.TEX)
+
+ This is an example of a letter that can be sent to individuals on a
+ mailing list. Each letter has a unique address and greeting, but the
+ text is identical for all the letters.
+ The individual addresses are entered in your LaTeX letter file, and
+ the body of the letter is placed in a separate file that is called for
+ each letter by the $\backslash$input command. A mailing label and a
+ return address label are printed for each letter.
+
+ Other features in this letter are
+ \begin{itemize}
+ \item The date is specified so all letters will have the same date
+ no matter when they are run through LaTeX.
+ \item The header is done with PostScript fonts, and the body is
+ done with the Computer Modern fonts in a point size of 11.
+ \item The enclosures appear in a numbered list.
+ \end{itemize}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Example Letters - 48 - October 1989
+
+
+
+ ______________________________________________________________________
+
+ The hardcopy version of this document contains a figure in this space.
+ ______________________________________________________________________
+
+ ______________________________________________________________________
+
+ The hardcopy version of this document contains a figure in this space.
+ ______________________________________________________________________
+
+ Mailing Labels and Return Address Labels
+ ______________________________________________________________________
+
+ The hardcopy version of this document contains a figure in this space.
+ ______________________________________________________________________
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 49 - Installing the Style File
+
+
+
+ APPENDIX D. INSTALLING THE LATEX LETTER STYLE FILE
+ ______________________________________________________________________
+
+ The LaTeX letter style file must be installed on your computer before
+ you can use the LaTeX letter commands. If you are not sure if the
+ style file has been installed, check with your system manager. If you
+ are responsible for installing the style file, this appendix gives you
+ the information you need.
+
+
+ _____________________________________________________
+
+ This appendix assumes you already have TeX and
+ LaTeX running on your system.
+ _____________________________________________________
+
+
+
+ This appendix describes the procedures for finding the instructions
+ for installing the LaTeX letter style file on these computers:
+
+ o IBM PC
+
+ o Sun workstation
+
+ o Apollo workstation
+
+ o VAX/VMS
+
+ o VAX/UNIX
+
+ To install the letter style file on all of the above systems except
+ the IBM PC, you need to be a validated user of the Los Alamos
+ Integrated Computing Network (ICN). You must also be familiar with
+ the GET command of the CFS utility and with the NTEXT utility.
+
+
+ _____________________________________________________
+
+ For more information about the CFS utility, see
+ the Common File System CFS Interface Reference
+ manual. For more information about the STEXT
+ and NTEXT utilities, see the STEXT and NTEXT
+ Reference. You can order these documents with
+ the Documentation Request Form in the back of
+ this document.
+ _____________________________________________________
+
+
+
+ You will be using the following files in the installation procedures;
+ they are stored on CFS and are in standard text format.
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Installing the Style File - 50 - October 1989
+
+
+
+ o README.STD-tells you where to find the letter style file and
+ includes installation instructions. For VMS, this file is named
+ LATEXLETTER.STD.
+
+ o LALETTER.STY-the style file that is used when you run LaTeX on
+ your letter input file.
+
+ o LETTEST.TEX-a test letter that you can use to see if you have
+ installed the letter style file correctly.
+
+ A commented version of the LALETTER.STY file, LALETTER.DOC, is
+ available on CFS. If you want to make your own changes to the
+ LALETTER.STY file, you will find this commented version useful. Check
+ the README.STD file for the CFS pathname for LALETTER.DOC.
+
+ D.1. On the IBM PC
+
+ You can purchase a diskette from MEC-9 that has the LANL letter style
+ file on it. The diskette is called TeX Files for LANL. It contains
+ the LaTeX memo and letter style files, as well as LANL's memo and
+ letter fonts. The file LALETTER.DOC is not included on the MEC-9
+ diskette, but it can be found on CFS. The file named README.LA will
+ show you how to use the installation script that is also on the
+ diskette.
+
+ If you prefer to get the letter style file from CFS, you can find out
+ about the installation procedure for your IBM PC with the following
+ steps:
+
+ 1. >From your PC, sign on to the ICN computer of your choice by
+ using VTERM or some other communications software.
+
+ 2. While on the ICN computer,
+
+ Use the CFS utility GET command to retrieve the following
+ file from CFS:
+
+ /tex/macros/c-2/latexletter/ibmpc/readme.std
+
+ Use the NTEXT utility to convert README.STD to native text
+ format.
+
+ Look in the NTEXTed README.STD file to find the complete
+ installation instructions.
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 51 - Installing the Style File
+
+
+
+ D.2. On the Sun Workstation
+
+ The following steps tell you how to get information about installing
+ the LaTeX letter style file on the Sun workstation:
+
+ 1. Use the CFS utility GET command to retrieve the following file
+ from CFS:
+
+ /tex/macros/c-2/latexletter/sununix/readme.std
+
+ 2. Use the NTEXT utility to convert the file from standard text
+ format to native text format.
+
+ 3. Look in the NTEXTed README.STD for the complete installation
+ instructions.
+
+
+ D.3. On the Apollo Workstation
+
+ The following steps tell you how to get information about installing
+ the LaTeX letter style file on the Apollo workstation:
+
+ 1. Use the CFS utility GET command to retrieve the following file
+ from CFS:
+
+ /tex/macros/c-2/latexletter/apollo/readme.std
+
+ 2. Use the NTEXT utility to convert the file from standard text
+ format to native text format.
+
+ 3. Look in the NTEXTed README.STD file for the complete
+ installation instructions.
+
+
+
+ D.4. On VAX/VMS
+
+ The following steps tell you how to get information about installing
+ the LaTeX letter style file on VAX/VMS:
+
+ 1. Use the CFS utility GET command to retrieve the following file
+ from CFS:
+
+ /tex/macros/c-2/latexletter/vaxvms/readme.std
+
+
+ 2. Use the NTEXT utility to convert the file from standard text
+ format to native text format.
+
+ 3. Look in the NTEXTed README.STD for the complete installation
+ instructions.
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Installing the Style File - 52 - October 1989
+
+
+
+
+
+ D.5. On VAX/UNIX
+
+ The following steps tell you how to get information about installing
+ the LaTeX letter style file on VAX/UNIX:
+
+ 1. Use the CFS utility GET command to retrieve the following file
+ from CFS:
+
+ /tex/macros/c-2/latexletter/vaxunix/readme.std
+
+ 2. Use the NTEXT utility to convert the file from standard text
+ format to native text format.
+
+ 3. Look in the NTEXTed README.STD file for the complete
+ installation instructions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 53 - Warning and Error Messages
+
+
+
+ APPENDIX E. WARNING AND ERROR MESSAGES
+ ______________________________________________________________________
+
+ You can receive two types of error messages when running your letter
+ file through LaTeX-error messages from doing something wrong with the
+ letter commands and error messages from doing something wrong with the
+ standard LaTeX commands. The error messages that come from standard
+ LaTeX commands are interactive and are explained in the chapter titled
+ "LaTeX Errors" in An Introduction to LaTeX by Michael Urban. The
+ error messages that come from the letter commands are not interactive,
+ and the fatal error messages will cause LaTeX to abort. The letter-
+ command error messages are listed below.
+
+ E.1. Warning Messages
+
+ The following are warning messages that you might receive when using
+ the LaTeX letter commands. These messages remind you that you might
+ be leaving something important out of your letter; they do not affect
+ the printing of your letter.
+
+
+ E.1.1. Leaving Out Information
+
+ These warning messages occur if you leave out one of the letter
+ commands. Omitting the \signer command leaves the signer's initials
+ out of the initial line. When the \complimentaryclose command is not
+ used, the default \complimentaryclose{Sincerely yours,} will be used.
+ Leaving out the other commands mentioned in these warning messages
+ causes one of the letterhead labels at the top of the letter to be
+ left blank.
+
+
+ Warning: you have not called \salutation before calling \opening.
+
+ For example, use
+
+ \salutation{Dear Henry,}
+
+ Warning: you have not called \complimentaryclose before calling
+ \opening. \complimentaryclose{Sincerely Yours,} will be used
+ by default.
+
+
+ Warning: you have not called \signature before calling \opening.
+
+ For example, use
+
+ \signature{Betty J. Donaldson}
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Warning and Error Messages - 54 - October 1989
+
+
+
+ Warning: you have not called \signer before calling \opening.
+
+ For example, use
+
+ \signer{BJD}
+
+
+ Warning: you have not specified an address before calling \opening.
+
+ Use \to to specify an address, for example
+
+ \to{Vieno Severi Alanne \\
+ 414 Rio Seco \\
+ Santa Fe, NM 87501}
+
+ Warning: you have not specified the callout \symbol
+ before calling \opening.
+
+ For example, use
+
+ \symbol{C-2}
+
+
+ Warning: you have not specified the callout \mailstop
+ before calling \opening.
+
+ For example, use
+
+ \mailstop{B253}
+
+ Warning: you have not specified the callout \telephone
+ before calling \opening.
+
+ For example, use
+
+ \telephone{(505) 665-0859}
+
+
+ Warning: you have called \serialnumber, but you have not called
+ \symbol.
+
+ For example, use
+
+ \symbol{C-2}
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 55 - Warning and Error Messages
+
+
+
+
+
+ E.1.2. Letter Too Long for \shortletterstyle
+
+ Warning: Use of the \shortletterstyle macro is intended
+ for use with letters of ten lines or less.
+
+
+ E.1.3. Using the Almost Modern (AM) Fonts
+
+ Warning: You are using the obsolete Almost Modern (AM) fonts.
+
+ Only cursory debugging has been attempted using AM fonts.
+ The Computer Modern (CM) fonts are fully supported by
+ laletter.
+
+
+ E.1.4. Contradictory Information
+
+ There are pairs of commands that cannot both be specified within the
+ same letter.
+
+ Warning: You have used both \enc and \encas.
+ Use one or the other but not both.
+ "Enc. a/s" will not be printed on this letter.
+
+ Warning: You have used both \attachments and \attachmentas.
+ Use one or the other but not both.
+ "Attachment a/s" will not be printed on this letter.
+
+ Warning: You have used both \attachments and \attachmentsas.
+ Use one or the other but not both.
+ "Attachments a/s" will not be printed on this letter.
+
+ Warning: You have used both \attachmentas and \attachmentsas.
+ Use one or the other but not both.
+ "Attachment a/s" will not be printed on this letter.
+
+ Warning: you have used both \thru: and \via: in this letter.
+ Use one or the other, but not both.
+
+ Warning: you have called \leftto and/or \rightto as well as \to.
+ All addresses called by \to will be printed in the left
+ column.
+
+
+ Some commands can only be used if another command is also being used.
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Warning and Error Messages - 56 - October 1989
+
+
+
+ Warning: you specified \useattnasheader,
+ yet you have not called \attn.
+
+ The first line of the addressee will be used
+ on headers after page one.
+
+
+ Warning: you specified \usesubjectasheader,
+ yet you have not called \subject.
+
+ The first line of the addressee will be used
+ on headers after page one.
+
+
+ E.1.5. Using \attn Outside of \to
+
+ Warning: \attn must be used only within the argument of \to,
+ for example,
+
+ \to{Genie Electronics \\
+ \attn{Mr. Robert Mercer, Sales Manager} \\
+ P.O. Box 8501 \\
+ Midwest City, OK 73110}
+
+
+ E.2. Fatal Errors
+
+ The following errors will cause your letter to not be printed. If you
+ receive one of these error messages, you must go back to your
+ filename.tex file to correct the error and then rerun the file through
+ LaTeX.
+
+
+ E.2.1. Invalid Classification Label
+
+ Note that x in the following error message is replaced with the actual
+ invalid classification label you specified in your letter file.
+
+ Fatal error: \classlabel{x} calls for an invalid classification label.
+
+ To print CONFIDENTIAL on the top and bottom of your letter,
+ use \classlabel{c}
+
+ To print SECRET on the top and bottom of your letter,
+ use \classlabel{s}
+
+ To print UNCLASSIFIED on the top and bottom of your letter,
+ use \classlabel{u}
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 57 - Warning and Error Messages
+
+
+
+ If you do not want a classification label on your letter,
+ use \classlabel{}
+ or do not use the \classlabel command.
+
+ Change your file, and rerun LaTeX.
+
+
+ E.2.2. Duplicating \classlabel Commands
+
+ Fatal error: you have called \classlabel more than once, or you have
+ called \classlabel after having called \begin{document}.
+
+ You are allowed to declare only one classification label per letter.
+ You must call \classlabel before using \begin{document}.
+
+ To print CONFIDENTIAL on the top and bottom of your letter,
+ use \classlabel{c}
+
+ To print SECRET on the top and bottom of your letter,
+ use \classlabel{s}
+
+ To print UNCLASSIFIED on the top and bottom of your letter,
+ use \classlabel{u}
+
+ If you do not want a classification label on your letter,
+ use \classlabel{}
+ or do not use the \classlabel command.
+
+ Change your file, and rerun LaTeX.
+
+
+ E.2.3. Specifying an Invalid Typeface
+
+ Note that typename in the following error message is replaced with the
+ actual invalid typeface you specified in your letter file.
+
+
+ Fatal error: \typeface{typename} calls for an invalid typeface.
+
+ Use \typeface{tt} or \typeface{rm}
+
+ Change your file, and rerun LaTeX.
+
+
+ E.2.4. Specifying an Invalid Font for Letter Body
+
+ Note that fontname in the following error message is replaced with the
+ actual invalid font you specified in your letter file.
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Warning and Error Messages - 58 - October 1989
+
+
+
+ Fatal error: \bodyfonts{fontname} calls for an invalid font.
+
+ Use \bodyfonts{texfonts} or \bodyfonts{postscript}
+ depending on what fonts are available on your machine.
+
+ Using \bodyfonts{} will give you the default fonts.
+
+ Change your file, and rerun LaTeX.
+
+
+ E.2.5. Specifying an Invalid Font for Letter Header
+
+ Note that fontname in the following error message is replaced with the
+ actual invalid font you specified in your letter file.
+
+
+ Fatal error: \headerfonts{fontname} calls for an invalid font.
+
+ Use \headerfonts{lafonts}, \headerfonts{texfonts},
+ or \headerfonts{postscript} depending on what fonts
+ are available on your machine.
+
+ Using \headerfonts{} will give you the default fonts.
+
+ Use \headerfonts{letterpaper} if you wish to print your letter
+ on pre-printed letter paper.
+
+ Change your file, and rerun LaTeX.
+
+
+
+ E.2.6. Using an Obsolete Version of Lafonts
+
+ Fatal error: Your system is using an obsolete version of lafonts.
+
+ See the manual TeX Fonts for Los Alamos Memos and Letters
+ Installation Reference. To order, use the Documentation Request
+ Form at the back of this document.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 59 - Glossary
+
+
+
+ APPENDIX F. GLOSSARY OF TERMS AND ACRONYMS
+ ______________________________________________________________________
+
+
+ AM (Almost Modern) fonts
+ The fonts that were originally used with TeX. LaTeX letter does
+ not support these fonts.
+
+ callout labels
+ Preprinted labels that identify information printed in the letter
+ head. Labeled information includes the date and the originating
+ group's name, correspondence identification number, mailstop, and
+ telephone number.
+
+ CFS (Common File System)
+ The Los Alamos centralized filing system that has virtually
+ unlimited storage space.
+
+ CIC (Computing Information Center)
+ The CIC is the distribution center for software and for
+ documentation describing the computers, operating systems, and
+ software available at Los Alamos.
+
+ CM (Computer Modern) fonts
+ The fonts that are included with the current version of TeX.
+ These fonts have replaced the Almost Modern (AM) fonts.
+
+ default
+ The value or option that is used when no value or option is
+ explicitly given.
+
+ document section
+ The second section of a LaTeX letter file. It contains the
+ commands and text the produce the body of the letter.
+
+ distributed processor (DP)
+ A minicomputer owned by a user organization and connected to the
+ ICN through the XNET gateway. The distributed processor supports
+ interactive terminal access to the ICN.
+
+ DVI file
+ The device-independent output file that TeX produces. This file
+ cannot be printed directly on any printer but must be converted
+ into a format that your printer can understand. A device driver
+ that is compatible with your printer performs this conversion.
+
+ font
+ A collection of characters of a given size and appearance.
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Glossary - 60 - October 1989
+
+
+
+ header
+ The printed letterhead on stationery. It features the Los Alamos
+ logo and may or may not have printed callout labels.
+
+ macro package
+ A group of macro definitions (defined TeX commands) that are
+ usually in one file and that define an integrated series of
+ commands.
+
+ PAGES (Print and Graphics Express Station)
+ The ICN node that is used to produce both print output and
+ graphics output. You can pick up your output by the CCF
+ Dispatchers Desk at TA-3; the output is sorted by the last two
+ digits of your Z-number.
+
+ parameter
+ A quantity that may be given different values.
+
+ preamble section
+ The first section of a LaTeX letter file. It contains the
+ commands that define the opening and closing of a letter.
+
+ special environments
+ A type of LaTeX construction for producing a display such as an
+ equation, table, or figure.
+
+ style file
+ A file that tells LaTeX how to format a document that uses this
+ style file. There are four style files that come with LaTeX
+ (BOOK.STY, REPORT.STY, ARTICLE.STY, and LETTER.STY). Style files
+ have a .STY extension after the filename and are accessed by the
+ \documentstyle command in LaTeX.
+
+ syntax rules
+ The rules that govern the structure of program commands.
+
+ TeX
+ A document formatting language that is used to prepare high-
+ quality technical manuscripts. It is particularly suitable for
+ mathematical and tabular work.
+
+ typeface
+ A style of character with given dimensions and line thickness.
+
+ utility
+ A system program that exists as a public file on a system and can
+ be accessed directly with an execute line.
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 61 - Glossary
+
+
+
+ workstation
+ Usually a desktop computer containing its own operating system and
+ computing resources, possibly sharing resources with other
+ workstations in a local area network (LAN).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ October 1989 - 63 - Reader Comments Form
+
+
+
+ READER COMMENTS FORM
+ ______________________________________________________________________
+
+
+ Date_______________ Name________________________________________
+
+ Group_________________ Mail Stop____________ Phone_______________
+
+ Organization* _______________________________________________________
+
+ Street* _____________________________________________________________
+
+ City/State/Zip* ____________________________________________________
+ *PLEASE COMPLETE IF YOU ARE NOT AT LOS ALAMOS.
+
+ PLEASE ANSWER THE FOLLOWING QUESTIONS. Your comments help us improve
+ the quality and usefulness of this documentation.
+
+ Are you an experienced computer user? yes _____ no _____
+
+ Is the information in this document easy to find? yes _____ no _____
+
+ Are the purpose and function of each chapter clear? yes _____ no _____
+
+ Does this document provide correct information? yes _____ no _____
+
+ Does this document fully explain the subject? yes _____ no _____
+
+ Are there enough examples in this document? yes _____ no _____
+
+ Did this document meet your expectations? yes _____ no _____
+
+ Do you think you will use this document again
+ when your needs change? yes _____ no _____
+
+ Please use the space below (and additional pages if needed) for
+ questions not addressed above or for expansion of responses. In
+ particular, please explain responses marked "no." When possible,
+ please give specific page references.
+ ______________________________________________________________________
+
+ ______________________________________________________________________
+
+ ______________________________________________________________________
+
+ Thank you for your help.
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ fold
+
+ ______________________________________________________________________
+
+
+
+
+
+
+
+
+ LOS ALAMOS NATIONAL LABORATORY
+ COMPUTER DOCUMENTATION
+ MAIL STOP B253
+ LOS ALAMOS, NEW MEXICO 87545
+
+
+
+
+
+
+
+ ______________________________________________________________________
+
+ fold and staple
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ October 1989 - 65 - Documentation Request Form
+
+
+
+ DOCUMENTATION REQUEST FORM
+ ______________________________________________________________________
+
+
+ Z-Number__________ Name_______________________ Date_____________
+
+ Group_________________ Mail Stop____________ Phone_____________
+
+ Cost Code__________________________ Program Code____________________
+
+ Organization* ________________________________________________________
+
+ Street* ______________________________________________________________
+
+ City/State/Zip* ______________________________________________________
+ *PLEASE COMPLETE IF YOU ARE NOT AT LOS ALAMOS.
+
+ DOCUMENT ORDER**
+
+ Send me the following documents:
+
+ [ ] An Introduction to LaTeX, by Michael Urban (Charge) (CIC#913)
+
+ [ ] LaTeX: A Document Preparation System, by Leslie Lamport (Charge)
+ (CIC#560)
+
+ [ ] Common File System CFS Interface Reference (CIC#895)
+
+ [ ] DVIPAGES: TEX DVI to PAGES Quick Steps (CIC#939)
+
+ [ ] LaTeX Memo Reference (CIC#1025)
+
+ [ ] STEXT and NTEXT Reference (CIC#1002)
+
+ [ ] TeX Fonts for Los Alamos Memos and Letters Installation Reference
+ (CIC#1128)
+
+ [ ] _________________________________________________________________
+ **Documents can also be ordered by using ECCOS, the Electronic Card
+ Catalog and Ordering System. Access ECCOS by following these
+ directions.
+ - Choose CCVAX from the port selector menu or from the menu
+ on Machine G.
+ - When CCVAX prompts for Username, type CICUSR.
+ - At the prompts, type your Z-number and ICN password.
+ - Wait for the menu to appear on the screen and follow its
+ directions.
+
+ Monthly Computing Publications Subcription Requests
+
+ o Computing and Communications Division News [] Start [] Cancel
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ Documentation Request Form - 66 - October 1989
+
+
+
+ o ICN Change Bulletin [] Start [] Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ fold
+
+ ______________________________________________________________________
+
+
+
+
+
+
+
+
+ LOS ALAMOS NATIONAL LABORATORY
+ COMPUTING INFORMATION CENTER
+ MAIL STOP M996
+ LOS ALAMOS, NEW MEXICO 87545
+
+
+
+
+
+
+
+ ______________________________________________________________________
+
+ fold and staple
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Index - 68 - October 1989
+
+
+
+ INDEX
+ ______________________________________________________________________
+
+ Address, 11 \originator, 17-18
+ Attachments, 19 \reference, 15
+ Attention line, 13 \returnaddress, 33
+ \rightto, 11
+ Backslash (), 6 \salutation, 14
+ Body of letter, 22, 26 \serialnumber, 9-10
+ Braces ({ }), 6 \shortletterstyle, 30
+ \signature, 17
+ Callout labels, 8 \signer, 17-18
+ Classification labeling, 28 \skiplabels, 34
+ Commands \subject, 13-14
+ \attachments, 19-20 \symbol, 9-10
+ \attachmentsas, 20 \telephone, 11
+ \attachmentspagebreak, 29-30 \thru, 12-13
+ \attn, 12 \to, 8, 11-12
+ \begin{document}, 22 \typeface, 26-27
+ \bodyfonts, 27 \typist, 17-18
+ \classlabel, 28 \useattnasheader, 15
+ \closing, 22 \useotherasheader, 16
+ \complimentaryclose, 17 \usesubjectasheader, 15
+ \cy, 20-21 \usetoasheader, 15
+ \cypagebreak, 29-30 \via, 13
+ \date, 9 \}attachmentas, 20
+ \distribution, 20-21 Complimentary close, 17
+ \distributionpagebreak, 29-30 Continuation pages, 15
+ \documentstyle Copy list, 20
+ explanation of, 7-8 Customizing a letter, 25
+ point sizes, selecting, 7-8
+ \enc, 18-19 Date, 9
+ \encas, 18-19 Defaults, 6
+ \enclosurespagebreak, 29-30 Distribution list, 20
+ \encpagebreak, 30 Document section, 5, 22
+ \end{document}, 22 Documentation conventions, 40
+ \expandtopmargin, 28 Double backslash, 11
+ \expandwidth, 28
+ \headerfonts, 25-26, 30 Enclosures, 18
+ \input, 46 Error messages, 58
+ \leftto, 11-12 fatal errors, 58
+ \letterpaperhcorr, 30-31 duplicating classification, 57
+ \letterpapervcorr, 30-31 invalid classification, 56-57
+ \maillabelheight, 33 invalid font, 57-58
+ \maillabeltopmargin, 33 invalid typeface, 57
+ \mailstop, 10 obsolete lafonts, 58
+ \makemaillabels, 32 warnings, 53
+ \newpage, 29-30 Almost Modern fonts, 55
+ \nocallouts, 8 attn error, 56
+ \opening, 22 contradictory information, 55
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+ October 1989 - 69 - Index
+
+
+
+ leaving out information, 53-54 LaTeX video course, 4
+ letter too long, 55 LaTeX video courses, 4
+ using letters too big, 55 Letter paper
+ Error Messages, 52 lining up, 30
+ Example
+ \date command, 43 Mail stop, 10
+ classification, 43 Mailing labels, 33
+ PostScript fonts, 43 Mailing Labels, 32
+ short letter style, 43 Mailing list, 32
+ Example letters, 41 Multiple letters, 32
+ Examples
+ equations, 44 No callouts, 8
+ lafonts, 42, 45
+ mailing labels, 46 Office Procedures Manual, 4
+ multiple addresses, 45
+ no printed callouts, 42 Page breaks, controlling, 29
+ PostScript fonts, 46 PAGES, 24
+ preprinted stationery, 44 Point sizes, changing, 7-8
+ return address labels, 46 Preamble, 5, 7-8, 10-15, 17-18,
+ Roman typeface, 44, 46 20-21
+ tables, 44 Preamble section, 5
+ TeXfonts, 42, 45 Preprinted stationery, 30
+ to a mailing list, 46 Prerequisites, 3
+ Typewriter typeface, 42 Printing a letter, 22-24
+
+ Figures, 34 Reference line, 15
+ Floats, 34 Return address labels, 33
+ Fonts
+ body of letter, 27 Salutation, 14
+ header of letter, 25-26 Short letter form, 30
+ lafonts, 25-26 Signature, 17
+ postscript fonts, 25-27 Skipping labels, 34
+ texfonts, 25-27 Subject line, 14
+ Summary of commands, 36-38
+ General format of a letter, 5 Syntax rules, 40
+ Systems that can use letter
+ Header style, 25 commands, 3
+
+ In Reply Refer To, 9 Tables, 34
+ Initial line, 18 Telephone number, 10
+ Installing the letter style file, Thru, 13
+ 49-52 Typefaces
+ Apollo workstation, 51 Roman, 26-27
+ IBM PC, 50 typewriter, 26-27
+ Sun workstation, 51
+ VAX/UNIX, 52 Via, 13
+ VAX/VMS, 51-52
+ Warning Messages, 52
+ LaTeX letter file, 5
+
+
+
+
+
+ LaTeX Letter Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ______________________________________________________________________
+
+ Copyright, 1990, The Regents of the University of California. This
+ document was produced under a U.S. Government contract (W-7405-ENG-36)
+ by the Los Alamos National Laboratory, which is operated by the
+ University of California for the U.S. Department of Energy. The U.S.
+ Government is licensed to use, reproduce, and distribute this
+ document. Permission is granted to the public to copy and use this
+ document without charge, provided that this notice and any statement
+ of authorship are reproduced on all copies. Neither the Government
+ nor the University makes any warranty, express or implied, or assumes
+ any liability or responsibility for the use of this document.
+
+ All Los Alamos computers, computing systems, and their associated
+ communications systems are to be used only for official business. The
+ Computing and Communications Division and the Operational
+ Security/Safeguards Division have the responsibility and the authority
+ to periodically audit users' files.
+
+
+
+
+
+
+
+
+
diff --git a/macros/latex209/contrib/laletter/laletter.sty b/macros/latex209/contrib/laletter/laletter.sty
new file mode 100644
index 0000000000..432962600c
--- /dev/null
+++ b/macros/latex209/contrib/laletter/laletter.sty
@@ -0,0 +1,2003 @@
+\typeout{Document Style laletter. September 18, 1989}
+%
+% Steve Sydoriak wrote this software.
+%
+% Copyright, 1990, The Regents of the University of California.
+% This software was produced under a U.S. Government contract
+% (W-7405-ENG-36) by the Los Alamos National Laboratory, which is
+% operated by the University of California for the U.S. Department
+% of Energy. The U.S. Government is licensed to use, reproduce,
+% and distribute this software. Permission is granted to the public
+% to copy and use this software without charge, provided that this
+% notice and any statement of authorship are reproduced on all
+% copies. Neither the Government nor the University makes any
+% warranty, express or implied, or assumes any liability or
+% responsibility for the use of this software.
+%
+\def\thebibliography#1{%
+\par%
+\vspace{\baselineskip}%
+REFERENCES%
+\list%
+{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+\advance\leftmargin\labelsep
+\usecounter{enumi}}%
+\def\newblock{\hskip .11em plus .33em minus .07em}%
+\sloppy\clubpenalty4000\widowpenalty4000
+\sfcode`\.=1000\relax}%
+\let\endthebibliography=\endlist
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+\long\def\@makecaption#1#2{%
+\vskip 10pt
+\setbox\@tempboxa\hbox{#1: #2}%
+\ifdim \wd\@tempboxa >\hsize %
+#1: #2\par %
+\else %
+\hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+\fi
+}%
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+\def\@ptsize{0} %
+\@namedef{ds@11pt}{\def\@ptsize{1}} %
+\@namedef{ds@12pt}{\def\@ptsize{2}} %
+\@twosidefalse
+\def\ds@draft{\overfullrule 5pt} %
+\@options
+\lineskip 1pt %
+\normallineskip 1pt
+\def\baselinestretch{1}
+\ifcase \@ptsize\relax %
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\let\@listi\@listI} %
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or %
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} %
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 4pt plus 2pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or %
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} %
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %
+\parsep 4.5pt plus 2pt minus 1pt
+\itemsep \parsep
+\topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+\normalsize %
+\marginparwidth 90pt %
+\marginparsep 11pt %
+\marginparpush 5pt %
+\footheight 12pt %
+\footskip 25pt %
+\footnotesep 12pt %
+\skip\footins 10pt plus 2pt minus 4pt %
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\@maxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\parindent 0pt %
+\partopsep 0pt %
+\@lowpenalty 51 %
+\@medpenalty 151 %
+\@highpenalty 301 %
+\@beginparpenalty -\@lowpenalty %
+\@endparpenalty -\@lowpenalty %
+\@itempenalty -\@lowpenalty %
+\def\theequation{\arabic{equation}}
+\arraycolsep 5pt %
+\arrayrulewidth .4pt %
+\doublerulesep 2pt %
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt %
+\fboxrule = .4pt %
+\def\footnoterule{\kern-1\p@
+\hrule width .4\columnwidth
+\kern .6\p@} %
+\long\def\@makefntext#1{\noindent %
+\hangindent 5pt\hbox
+to 5pt{\hss $^{\@thefnmark}$}#1}
+\def\today{\ifcase\month\or
+January\or February\or March\or April\or May\or June\or
+July\or August\or September\or October\or November\or December\fi
+\space\number\day, \number\year}
+\pagenumbering{arabic} %
+\onecolumn %
+\newwrite\@mainmlb
+\newlength{\@lengthlabel}
+\newlength{\@lengthrule}
+\newlength{\@lengthdate}
+\newlength{\@lengthname}
+\newcounter{@countlist}
+\newcount\@countverticalposition
+\newcount\@countbotheader
+\newcount\@countclassseptop
+\newcount\@countclasssepbot
+\newcount\@counttemp
+\newcount\@countto
+\newcount\@countattn
+\newcount\@countattnsave
+\newcount\@countthru
+\newcount\@counttelephone
+\newcount\@countcy
+\newcount\@countvia
+\newcount\@countattachments
+\newcount\@countreference
+\newcount\@countenc
+\newcount\@countdistribution
+\newcount\@countrightcolon
+\newcount\@countleftheader
+\newcount\@countrightheader
+\newcount\@countpictorig
+\newcount\@countletterlist
+\newcount\@countleftto
+\newcount\@countrightto
+\newcount\@counttemptwo
+\newcount\@countcoltemp
+\newcount\@countreturnaddress
+\newcount\@countskiplabels
+\newtoks\@toksto
+\newtoks\@toksattn
+\newtoks\@toksattnsave
+\newtoks\@toksthru
+\newtoks\@tokscy
+\newtoks\@tokstelephone
+\newtoks\@toksvia
+\newtoks\@toksattachments
+\newtoks\@toksenc
+\newtoks\@toksreference
+\newtoks\@toksdistribution
+\newtoks\@tokspagetwoheader
+\newtoks\@toksbeforenewline
+\newtoks\@toksafternewline
+\newtoks\@toksaftersave
+\newtoks\@toksempty
+\newtoks\@toksblank
+\newtoks\@toksnewline
+\newtoks\@toksremaining
+\newtoks\@toksitem
+\newtoks\@toksbeforeendto
+\newtoks\@toksafterendto
+\newtoks\@toksbeforecomma
+\newtoks\@toksleftto
+\newtoks\@toksrightto
+\newtoks\@tokstemp
+\newtoks\@tokscoltemp
+\newtoks\@toksreturnaddress
+\newsavebox{\@boxtemp}
+\newsavebox{\@boxclasspage}
+\newsavebox{\@boxpagetwoheader}
+\newdimen\@dimentoppagetwo
+\newdimen\@dimenpagetwoheader
+\newdimen\@dimenfirstpageleftheader
+\newdimen\@dimenwdtt
+\newdimen\@dimenletterpaperhcorr
+\newdimen\@dimenletterpapervcorr
+\newdimen\@dimenspaceaftercolon
+\newdimen\descriptionmargin
+\newdimen\@dimenversemargin
+\newdimen\@dimentocolsep
+\newdimen\@dimenhspacesig
+\newdimen\@dimenexpandside
+\newdimen\@dimenexpandtopmargin
+\newdimen\@dimentemp
+\newdimen\@headsepfirst
+\newdimen\@textheightfirst
+\newdimen\@dimenmaillabelheight
+\newdimen\@dimenmaillabeltopmargin
+\newdimen\@bodysep
+\newskip\@baselineskipsave
+\newskip\@parskipsave
+\newskip\@topskipfirst
+\newif\if@newline
+\newif\if@comma
+\newif\if@notvoidtoks
+\newif\if@toksnotequal
+\newif\if@beenhere
+\newif\if@somethingbefore
+\newif\if@continueloop
+\newif\if@cmfonts
+\newif\if@closing
+\newif\if@everyindent
+\newif\if@printingto
+\newif\if@neveropened
+\newif\if@newtemp
+\newif\if@newattn
+\newif\if@newtelephone
+\newif\if@newcy
+\newif\if@newattachments
+\newif\if@newreference
+\newif\if@newdistribution
+\newif\if@newenc
+\newif\if@newthru
+\newif\if@newvia
+\newif\if@newrightto
+\newif\if@newleftto
+\newif\if@newto
+\newif\if@makemaillabels
+\newif\if@outputfirstpage%
+\newif\if@outputlastpage%
+\newif\if@newreturnaddress
+\let\@mlbout=\@mainmlb
+\clubpenalty=10000
+\widowpenalty=10000
+\topmargin -72pt%
+\textheight=724pt
+\@textheightfirst=\textheight
+\topskip=0pt
+\@topskipfirst=\topskip
+\headsep=0pt
+\@headsepfirst=\headsep
+\headheight 0pt
+\footskip 43pt
+\textwidth 438pt
+\@countverticalposition 0
+\@toksempty={}
+\@toksblank={ }
+\@toksnewline={\\}
+\@dimenpagetwoheader 180pt
+\@dimenfirstpageleftheader 220pt
+\@dimenexpandside=0pt
+\@dimenexpandtopmargin=0pt
+\@countleftheader=87
+\@countrightcolon=404
+\@countbotheader 104
+\@dimenletterpaperhcorr 0pt
+\@dimenletterpapervcorr 0pt
+\@dimenspaceaftercolon 12pt
+\@everyindentfalse
+\@printingtofalse
+\@neveropenedtrue
+\@newtemptrue
+\@newattntrue
+\@newtelephonetrue
+\@newcytrue
+\@newattachmentstrue
+\@newreferencetrue
+\@newdistributiontrue
+\@newenctrue
+\@newthrutrue
+\@newviatrue
+\@newrighttotrue
+\@newlefttotrue
+\@newtotrue
+\@newreturnaddresstrue
+\@makemaillabelsfalse
+\@dimentocolsep=24pt
+\def\@blank{ }%
+\def\@tt{tt}\def\@rm{rm}%
+\def\@texfonts{texfonts}%
+\def\@lafonts{lafonts}\def\@postscript{postscript}%
+\def\@letterpaper{letterpaper}%
+\def\@useto{to}\def\@usesubject{subject}\def\@useattn{attn}%
+\def\to#1{%
+\if@newto\@resettovars\fi
+\ifnum\@countleftto>0 \@errortoleftrightto\@tokstoinput{leftto}{#1}%
+\else\ifnum\@countrightto>0 \@errortoleftrightto\@tokstoinput{leftto}{#1}%
+\else \@tokstoinput{to}{#1}%
+\fi\fi}%
+\def\leftto#1{%
+\if@newleftto\@resettovars\fi
+\ifnum\@countto>0 \@totoleftto\fi \@tokstoinput{leftto}{#1}}%
+\def\rightto#1{%
+\if@newrightto\@resettovars\fi
+\ifnum\@countto>0 \@totoleftto\fi \@tokstoinput{rightto}{#1}}%
+\def\attn#1{\if@printingto Attn: #1\@toksinput{attn}{#1}\else\@errorattn\fi
+\global\@countattn=\@countattn}%
+\def\telephone#1{\@toksinput{telephone}{#1}}%
+\def\cy#1{\@toksinput{cy}{#1}}%
+\def\via#1{\@tokstoinput{via}{#1}}%
+\def\thru#1{\@tokstoinput{thru}{#1}}%
+\def\attachments#1{\@toksinput{attachments}{#1}}%
+\def\reference#1{\@toksinput{reference}{#1}}%
+\def\distribution#1{\@toksinput{distribution}{#1}}%
+\def\enc#1{\@toksinput{enc}{#1}}%
+\def\returnaddress#1{\@toksreturnaddress={}\@countreturnaddress=0
+\@toksinput{returnaddress}{#1}}%
+\def\typeface#1{\def\@typeface{#1}%
+\@unspaceleft\@typeface \@unspaceright\@typeface}%
+\def\headerfonts#1{\def\@headerfonts{#1}%
+\@unspaceleft\@headerfonts \@unspaceright\@headerfonts}%
+\def\bodyfonts#1{\def\@bodyfonts{#1}%
+\@unspaceleft\@bodyfonts \@unspaceright\@bodyfonts
+\ifx\@bodyfonts\@postscript \@psdefclasslabel\fi}%
+\def\nocallouts{\def\@nocallouts{}}%
+\def\usetoasheader{\def\@useasheader{to}}%
+\def\useattnasheader{\def\@useasheader{attn}}%
+\def\usesubjectasheader{\def\@useasheader{subject}}%
+\def\useotherasheader#1{\def\@useasheader{#1}}%
+\def\subject#1{%
+\def\@subjectorig{#1}%
+\def\@subject{\uppercase{#1}}%
+\ifx\@subjectorig\@blank\def\@subject{}\fi
+\ifx\@subjectorig\@empty\def\@subject{}\fi}%
+\def\salutation#1{\def\@salutation{#1}}%
+\def\symbol#1{\def\@symbol{#1}\@unspaceright\@symbol
+\@unspaceleft\@symbol}%
+\def\serialnumber#1{\def\@serialnumber{#1}\@unspaceleft\@serialnumber
+\@unspaceright\@serialnumber}%
+\def\mailstop#1{\def\@mailstop{#1}\@unspaceright\@mailstop
+\@unspaceleft\@mailstop}%
+\def\date#1{\def\@date{#1}\@unspaceleft\@date}%
+\def\expandwidth#1{\@ifnoinfo{#1}{\@dimenexpandside=0pt}{%
+\@dimenexpandside=#1 \divide\@dimenexpandside by 2
+\advance \textwidth by #1}}%
+\def\expandtopmargin#1{%
+\@ifnoinfo{#1}{\@dimenexpandtopmargin=0pt}{\@dimenexpandtopmargin=#1}}%
+\def\shortletterstyle{\def\@shortletterstyle{}}%
+\def\noclearpage{\def\@noclearpage{}}%
+\def\signer#1{\def\@signer{#1}%
+\@unspaceright\@signer\@upperunspaceleft\@signer}%
+\def\originator#1{%
+\def\@originator{#1}%
+\@unspaceright\@originator
+\@upperunspaceleft\@originator}%
+\def\typist#1{%
+\def\@typist{#1}%
+\ifx\@typist\@empty
+\else
+\ifx\@typist\@blank
+\def\@typist{}%
+\else
+\def\@typist{\lowercase{\ignorespaces#1}}%
+\fi\fi}%
+\def\letterpaperhcorr#1{\@ifnoinfo{#1}%
+{\@dimenletterpaperhcorr=0pt}{\@dimenletterpaperhcorr=#1}}%
+\def\letterpapervcorr#1{\@ifnoinfo{#1}%
+{\@dimenletterpapervcorr=0pt}{\@dimenletterpapervcorr=#1}}%
+\def\complimentaryclose#1{\def\@complimentaryclose{#1}}%
+\def\signature#1{\def\@signature{#1}}%
+\def\cypagebreak{\def\@cypagebreak{}}%
+\def\attachmentspagebreak{\def\@attachmentspagebreak{}}%
+\def\encpagebreak{\def\@encpagebreak{}}%
+\def\distributionpagebreak{\def\@distributionpagebreak{}}%
+\def\encas{\def\@encas{}}%
+\def\attachmentas{\def\@attachmentas{}}%
+\def\attachmentsas{\def\@attachmentsas{}}%
+\def\encpagebreak{\def\@encpagebreak{}}%
+\def\makemaillabels{\@makemaillabelstrue}
+\def\maillabelheight#1{\@ifnoinfo{#1}%
+{\maillabelheight{1.5in}}{\@dimenmaillabelheight=#1}}%
+\def\maillabeltopmargin#1{\@ifnoinfo{#1}%
+{\maillabeltopmargin{.25in}}{\@dimenmaillabeltopmargin=#1}}%
+\def\skiplabels#1{\@ifnoinfo{#1}%
+{\@countskiplabels=0}{\@countskiplabels=#1}}%
+\def\classlabel#1{%
+\def\@unspacedclasslabel{#1}%
+\@unspaceleft{\@unspacedclasslabel}%
+\@unspaceright{\@unspacedclasslabel}%
+\@ifundefined{@classlabel}%
+{}{\def\@todieornottodie{\@errortwoclasses\@exit}}%
+\def\@secret{s}\def\@confidential{c}\def\@unclassified{u}%
+\ifx\@unspacedclasslabel\@secret%
+\def\@classlabel{SECRET}%
+\typeout{^^JThis letter will be marked SECRET.^^J}%
+\else\ifx\@unspacedclasslabel\@confidential%
+\def\@classlabel{CONFIDENTIAL}%
+\typeout{^^JThis letter will be marked CONFIDENTIAL.^^J}%
+\else\ifx\@unspacedclasslabel\@unclassified%
+\def\@classlabel{UNCLASSIFIED}%
+\typeout{^^JThis letter will be marked UNCLASSIFIED.^^J}%
+\else\ifx\@unspacedclasslabel\@empty%
+\def\@classlabel{}%
+\else
+\def\@todieornottodie{%
+\def\@classlabel{#1}%
+\@errorclassargument
+\@exit}%
+\fi\fi\fi\fi
+\@todieornottodie
+}%
+\def\@toksinput#1#2{%
+\def\@toksname{\csname @toks#1\endcsname}%
+\def\@countname{\csname @count#1\endcsname}%
+\def\@ifnewname{\csname if@new#1\endcsname}%
+\def\@newnamefalse{\csname @new#1false\endcsname}%
+\def\@newnametrue{\csname @new#1true\endcsname}%
+\@ifnewname
+\@newnamefalse
+\@countname=0
+\@toksname={}%
+\else
+\@addtotoks\@toksname\\
+\fi
+\@beenherefalse
+\@toksremaining={#2}%
+\loop
+\@tonewlinepull\@toksremaining
+\@somethingbeforefalse
+\@toksnotequal\@toksbeforenewline\@toksempty
+\if@toksnotequal
+\@toksnotequal\@toksbeforenewline\@toksblank
+\if@toksnotequal
+\@somethingbeforetrue
+\fi\fi
+\if@somethingbefore
+\if@beenhere
+\@addtotoks\@toksname\\
+\else
+\@beenheretrue
+\fi
+\@addtokstotoks\@toksname\@toksbeforenewline
+\@continuelooptrue
+\advance\@countname by 1
+\else
+\@toksnotequal\@toksafternewline\@toksempty%
+\if@toksnotequal
+\@toksnotequal\@toksafternewline\@toksnewline%
+\if@toksnotequal
+\@continuelooptrue%
+\else
+\@continueloopfalse%
+\fi
+\else
+\@continueloopfalse%
+\fi\fi
+\if@continueloop
+\@toksremaining=\@toksafternewline
+\repeat
+}%
+\def\@resettovars{%
+\@newtofalse\@countto=0\@toksto={}%
+\@newlefttofalse\@countleftto=0\@toksleftto={}%
+\@newrighttofalse\@countrightto=0\@toksrightto={}%
+}
+\def\@tokstoinput#1#2{%
+\edef\@tokstoname{\csname @toks#1\endcsname}%
+\edef\@counttoname{\csname @count#1\endcsname}%
+\@newtemptrue
+\@toksinput{temp}{#2}%
+\@toksnotequal\@tokstemp\@toksempty
+\if@toksnotequal
+\@addtokstotoks\@tokstoname\@tokstemp
+\@addtotoks\@tokstoname\@endto
+\advance\@counttoname by 1
+\fi
+}%
+\def\@totoleftto{%
+\@errortoleftrightto
+\@toksleftto=\@toksto
+\@toksto={}%
+\@countleftto=\@countto
+\@countto=0}%
+\def\opening{%
+\@checkinput
+\if@neveropened
+\@neveropenedfalse
+\@choosefonts
+\fi
+\@initializefontvariables
+\@initializeothervariables
+\@baselineskipsave=\baselineskip
+\@parskipsave=\parskip
+\@closingfalse
+\lineskip=0pt
+\@printfirstpageheader
+\@checkuseasinput
+\@makepagetwoheader
+\@beginletter
+\lineskip=\normallineskip
+}%
+\def\closing{%
+\normalsize
+\@closingtrue
+\@endletter
+\@clearclosing
+\leftskip=\@dimenhspacesig
+\@printcompclose
+\@printsignature
+\par
+\leftskip=0pt
+\@printoriginatorline
+\@printenc
+\@printattachments
+\@printdistribution
+\@printcy
+\@settrue
+\@restorevariables
+\@multipleletters
+}%
+\def\@restorevariables{%
+\@countattn=0
+\@toksattn={}%
+}%
+\def\@multipleletters{%
+\def\@citex[##1]##2{%
+\def\@citea{}\@cite{\@for\@citeb:=##2\do
+{\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+{b@\@citeb}{{\bf ?}\@warning
+{Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{##1}}%
+\def\addcontentsline##1##2##3{}%
+\def\label##1{\@bsphack\@esphack}%
+\def\@lbibitem[##1]##2{\item[\@biblabel{##1}]\ignorespaces}%
+\def\@bibitem##1{\item\ignorespaces}%
+\setcounter{figure}{0}%
+\setcounter{table}{0}%
+\setcounter{footnote}{0}%
+\setcounter{equation}{0}%
+}%
+\def\@checkinput{%
+\ifnum\@countvia>0 %
+\ifnum\@countthru>0 %
+\@errorthruandvia
+\fi\fi
+\@ifemptyorundefined{@salutation}%
+{\@errorundeclaredsalutation}{}%
+\@ifemptyorundefined{@complimentaryclose}%
+{\def\@complimentaryclose{Sincerely yours,}\@errorundeclaredcompclose}{}%
+\@ifemptyorundefined{@signature}{\@errorundeclared{\signature}%
+\@errorshowexample{\signature}{Betty J. Donaldson}}{}%
+\@ifemptyorundefined{@signer}{\@errorundeclared{\signer}%
+\@errorshowexample{\signer}{BJD}}{}%
+\ifnum\@countto=0\ifnum\@countleftto=0\ifnum\@countrightto=0 %
+\@errorundeclaredto\fi\fi\fi
+\@ifundefined{@symbol}{\def\@symbol{}}{}%
+\@ifundefined{@nocallouts}{%
+\ifx\@symbol\@empty
+\@errorundeclaredcallout{\symbol}\@errorshowexample{\symbol}{C-2}%
+\fi
+\@ifemptyorundefined{@mailstop}%
+{\def\@mailstop{}\@errorundeclaredcallout{\mailstop}%
+\@errorshowexample{\mailstop}{B253}}{}%
+\ifnum\@counttelephone=0 %
+\@tokstelephone={}%
+\@errorundeclaredcallout{\telephone}%
+\@errorshowexample{\telephone}{(505) 665-0859}%
+\fi
+}{}%
+\@ifundefined{@subject}{\def\@subject{}}{}%
+\@ifundefined{@originator}%
+{\def\@originator{}}{}%
+\@ifemptyorundefined{@signer}%
+{\def\@signer{}}{}%
+\@ifundefined{@typist}%
+{\def\@typist{}}{}%
+\@ifemptyorundefined{@date}{\def\@date{\today}}%
+{\ifx\@date\@empty\def\@date{\today}\fi}%
+\@ifemptyorundefined{@serialnumber}%
+{\def\@serialnumber{}}{\ifx\@symbol\@empty \@errorserialnosymbol\fi}%
+\def\@symbolserialnumber{%
+\@symbol
+\ifx\@symbol\@empty
+\else
+\ifx\@serialnumber\@empty
+\else
+-\relax
+\fi\fi
+\@serialnumber\ }%
+\@ifundefined{@typeface}{\def\@typeface{tt}}{}%
+\ifx\@typeface\@empty\def\@typeface{tt}\fi%
+\@ifundefined{@headerfonts}{\def\@headerfonts{texfonts}}{}%
+\ifx\@headerfonts\@empty\def\@headerfonts{texfonts}\fi%
+\@ifundefined{@bodyfonts}{\def\@bodyfonts{texfonts}}{}%
+\ifx\@bodyfonts\@empty\def\@bodyfonts{texfonts}\fi
+}%
+\def\@checkuseasinput{%
+\@ifundefined{@useasheader}{\def\@useasheader{to}}{%
+\ifx\@useasheader\@useattn
+\ifnum\@countattn=0 %
+\@erroruseas{attn}{\attn}\def\@useasheader{to}%
+\fi
+\else\ifx\@useasheader\@usesubject
+\ifx\@subject\@empty
+\@erroruseas{subject}{\subject}\def\@useasheader{to}%
+\fi
+\fi\fi
+}}%
+\def\@choosefonts{%
+\@amorcm
+\@getpostscriptnames
+\@chooseheaderfonts
+\@choosebodyfonts
+\@setnormalsize
+}%
+\def\@amorcm{%
+\edef\@cmr{\csname cmr10\endcsname}%
+\edef\@tenrm{\csname\fontname\tenrm\endcsname}%
+\ifx\@cmr\@tenrm \@cmfontstrue\else\@cmfontsfalse\fi
+\if@cmfonts
+\else\ifx\@bodyfonts\@texfonts
+\@erroramfonts
+\else\ifx\@headerfonts\@texfonts
+\@erroramfonts
+\fi\fi\fi
+}%
+\def\@getpostscriptnames{%
+\def\@cmhelv{psmhlv }%
+\def\@cmhelvb{psmhlvb }%
+\def\@cmtimer{psmtimr }%
+\def\@cmtimei{psmtimi }%
+\def\@cmtimeb{psmtimb }%
+\def\@cmcour{psmcou }%
+\def\@cmcouro{psmcouo }%
+\def\@cmcourb{psmcoub }%
+}%
+\def\@chooseheaderfonts{%
+\ifx\@headerfonts\@letterpaper
+\else\ifx\@headerfonts\@lafonts
+\font\@booksix=book6%
+\font\@bookseven=book7%
+\font\@lettertwentyeight=memo28%
+\font\@latwentyeight=la28%
+\font\@spectwelve=spec12%
+\else\ifx\@headerfonts\@texfonts
+\if@cmfonts
+\font\@booksix=cmr6%
+\font\@bookseven=cmr7%
+\font\@latwentyeight=cmbx10 scaled\magstep5%
+\font\@memotwentyeight=cmbx10 scaled\magstep5%
+\font\@spectwelve=cmss10 scaled\magstep1%
+\else
+\font\@booksix=amr6%
+\font\@bookseven=amr7%
+\font\@latwentyeight=ambx10 scaled\magstep5%
+\font\@memotwentyeight=ambx10 scaled \magstep5%
+\font\@spectwelve=amss10 scaled\magstep1%
+\fi
+\else\ifx\@headerfonts\@postscript
+\font\@booksix=\@cmhelv at 6pt%
+\font\@bookseven=\@cmhelv at 7pt%
+\font\@lettertwentyeight=\@cmhelvb at 28pt%
+\font\@spectwelve=\@cmhelv at 10.5pt%
+\else%
+\def\@todieornottodie{\@errorillegalheaderfont\@exitfi}%
+\fi\fi\fi\fi
+\@todieornottodie
+}%
+\def\@choosebodyfonts{%
+\ifx\@typeface\@tt
+\else\ifx\@typeface\@rm
+\else
+\def\@todieornottodie{\@errorillegaltypeface\@exitfi}%
+\fi\fi
+\@todieornottodie
+\ifx\@bodyfonts\@texfonts
+\if@cmfonts
+\font\@classfont=cmss10 scaled \magstep5%
+\else
+\font\@classfont=amssmc40
+\fi
+\else\ifx\@bodyfonts\@postscript
+\ifcase\@ptsize\relax %
+\font\tenrm = \@cmtimer at 10pt %
+\font\tentt = \@cmcour at 10pt %
+\ifx\@typeface\@tt
+\font\tenit = \@cmcouro at 10pt %
+\font\tenbf = \@cmcourb at 10pt %
+\else\ifx\@typeface\@rm
+\font\tenit = \@cmtimei at 10pt %
+\font\tenbf = \@cmtimeb at 10pt %
+\fi\fi
+\or %
+\font\elvrm = \@cmtimer at 11pt %
+\font\elvtt = \@cmcour at 11pt %
+\ifx\@typeface\@tt
+\font\elvit = \@cmcouro at 11pt %
+\font\elvbf = \@cmcourb at 11pt %
+\else\ifx\@typeface\@rm
+\font\elvit = \@cmtimei at 11pt %
+\font\elvbf = \@cmtimeb at 11pt %
+\fi\fi
+\or %
+\font\twlrm = \@cmtimer at 12pt %
+\font\twltt = \@cmcour at 12pt %
+\ifx\@typeface\@tt
+\font\twlit = \@cmcouro at 12pt %
+\font\twlbf = \@cmcourb at 12pt %
+\else\ifx\@typeface\@rm
+\font\twlit = \@cmtimei at 12pt %
+\font\twlbf = \@cmtimeb at 12pt %
+\fi\fi
+\fi
+\else
+\def\@todieornottodie{\@errorillegalbodyfont\@exitfi}%
+\fi\fi
+\@todieornottodie
+}%
+\def\@setnormalsize{%
+\edef\normalsize{%
+\ifx\@currsize\normalsize
+\ifx\@typeface\@tt
+\tt
+\else\ifx\@typeface\@rm
+\rm
+\fi\fi
+\else
+\@normalsize
+\fi}}%
+\def\@initializefontvariables{%
+\raggedbottom
+\@kernheaderwords
+\@initializetypefacedependencies
+\def\pem{%
+\ifdim\fontdimen\@ne\font>\z@
+\csname\@typeface\endcsname
+\else\it
+\fi
+}}%
+\def\@kernheaderwords{%
+\ifx\@headerfonts\@texfonts
+\def\@lanl{%
+\raise 1pt\hbox{%
+\def\@kern{\kern -.5pt}%
+L\@kern o\@kern s\ \kern -2.5pt A\@kern l\@kern a\@kern m\@kern
+o\@kern s\ \kern -2pt N\@kern a\@kern t\@kern i\@kern o\@kern
+n\@kern a\@kern l\ \kern -3pt L\@kern a\@kern b\@kern o\@kern
+r\@kern a\@kern t\@kern o\@kern r\@kern y}}%
+\def\@lanm{%
+\def\@kern{\kern -.5pt}%
+L\@kern o\@kern s\kern -2.5pt\ A\@kern l\@kern a\@kern m\@kern
+o\@kern s\kern -1pt ,\kern -4.5pt\ New\kern -3pt\ Mexico\kern -3pt
+\ 87545}%
+\def\@losalamos{Los Alamos}%
+\else\ifx\@headerfonts\@lafonts
+\@spectwelve\setbox\@boxtemp=\hbox{L}\@dimentemp=\wd\@boxtemp
+\advance\@dimentemp by -5.3368pt
+\ifdim\@dimentemp<0pt \@dimentemp=-\@dimentemp\fi
+\ifdim\@dimentemp<.001pt
+\def\@lanl{%
+L\kern -.4pt o\kern .35pt s\ \kern -.8pt
+A\kern .6pt l\kern .1pt a\kern .6pt m\kern .1pt o\kern .35pt s%
+\def\@kern{\kern .22pt}%
+\ N\@kern a\@kern t\@kern i\@kern o\@kern n\@kern a\kern .47pt
+l\ \kern -.2pt
+\def\@kern{\kern .03pt}%
+L\@kern a\kern .43pt b\@kern o\@kern r\@kern a\@kern
+t\kern -.22pt o\@kern r\@kern y}%
+\def\@lanm{%
+L\kern -.4pt o\kern .35pt s\ \kern -.8pt
+\def\@kern{\kern .35pt}%
+A\kern .6pt l\kern .1pt a\kern .6pt m\kern .1pt o\kern .35pt s,%
+\ \kern -1.5pt
+N\kern -.2pt ew\ \kern -.1pt
+\def\@kern{\kern .15pt}%
+M\kern -.05pt e\@kern x\@kern i\@kern c\@kern o\ \kern -.1pt
+8\kern -.65pt 7\kern -.9pt 54\kern -.7pt 5}%
+\def\@losalamos{%
+\kern -1.2pt L\kern 0pt o\kern -.75pt s\ \kern -6.7pt
+A\kern .25pt l\kern 1.25pt a\kern -.85pt m\kern -.65pt
+o\kern -.75pt s}%
+\else
+\def\@todieornottodie{\@erroroldlafonts\@exit}%
+\fi
+\else\ifx\@headerfonts\@postscript
+\def\@lanl{%
+\raise .5pt\hbox{%
+Los\kern -2pt\ Alamos\kern -1.5pt\ National\kern -2pt
+\ Laboratory}}%
+\def\@lanm{%
+\def\@kern{\kern .57pt}%
+Los\kern -2pt\ Alamos\kern -1pt,\kern -3.5pt\ N\@kern e\@kern
+w\kern -2pt\ M\@kern e\@kern x\@kern i\@kern c\@kern
+o\kern -2pt\ 87545}%
+\def\@PSlosalamos##1##2{%
+\@psdeflosalamos
+\special{ps:: ##1 ##2 @LOSALAMOS1 @LOSALAMOS2 @LOSALAMOS3}}%
+\fi\fi\fi
+\@todieornottodie
+}%
+\def\@initializetypefacedependencies{%
+\ifx\@typeface\@tt
+\rightskip=0pt plus 3.6em%
+\@rightskip=\rightskip
+\hyphenchar\nintt=\defaulthyphenchar
+\hyphenchar\tentt=\defaulthyphenchar
+\hyphenchar\elvtt=\defaulthyphenchar
+\hyphenchar\twltt=\defaulthyphenchar
+\ifx\@bodyfonts\@texfonts
+\def\@bullet{\leavevmode\raise-.22ex\hbox to 0pt{+\hss}o}%
+\else\ifx\@bodyfonts\@postscript
+\def\@bullet{\leavevmode\raise-.19ex\hbox to 0pt{+\hss}o}%
+\fi\fi
+\fi
+\@initializelists
+}%
+\def\@initializelists{%
+\setbox\@boxtemp=\hbox{\tt n}\@dimenwdtt=\wd\@boxtemp
+\ifx\@typeface\@tt
+\parskip=\baselineskip
+\leftmargini 4\@dimenwdtt
+\leftmarginii 4\@dimenwdtt
+\leftmarginiii 4\@dimenwdtt
+\leftmarginiv 4\@dimenwdtt
+\leftmarginv 4\@dimenwdtt
+\leftmarginvi 4\@dimenwdtt
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep=\@dimenwdtt
+\parsep=\baselineskip
+\topsep 0pt
+\itemsep 0pt
+\@bodysep 0pt
+\descriptionmargin=5\@dimenwdtt
+\@dimentemp=\@dimenwdtt
+\else\ifx\@typeface\@rm
+\parskip=.7em
+\@parskipsave=\parskip
+\def\@bullet{$\bullet$}%
+\leftmargini 2.5em
+\leftmarginii 2.2em %
+\leftmarginiii 1.87em %
+\leftmarginiv 1.7em %
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\topsep .4em
+\@bodysep .8em
+\parsep .4em
+\itemsep .2em
+\descriptionmargin=3em
+\@dimentemp=5pt
+\fi\fi
+\listparindent=0pt
+\let\@listi\relax
+\def\@listii{\leftmargin\leftmarginii
+\labelwidth\leftmarginii\advance\labelwidth-\labelsep}%
+\def\@listiii{\leftmargin\leftmarginiii
+\labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+\ifx\@typeface\@rm
+\topsep .2em
+\itemsep \topsep
+\fi}%
+\def\@listiv{\leftmargin\leftmarginiv
+\labelwidth\leftmarginiv\advance\labelwidth-\labelsep}%
+\def\@listv{\leftmargin\leftmarginv
+\labelwidth\leftmarginv\advance\labelwidth-\labelsep}%
+\def\@listvi{\leftmargin\leftmarginvi
+\labelwidth\leftmarginvi\advance\labelwidth-\labelsep}%
+\@dimenversemargin=3\@dimentemp
+\def\verse{\let\\=\@centercr
+\list{}{\itemsep\z@ \itemindent -\@dimenversemargin \listparindent \itemindent
+\rightmargin\leftmargin\advance\leftmargin \@dimenversemargin}\item[]}%
+\let\endverse\endlist
+\def\quotation{\list{}{%
+\rightmargin\leftmargin}\item[]}%
+\let\endquotation=\endlist
+\tabcolsep \@dimentemp %
+\tabbingsep \labelsep %
+\def\labelenumi{\arabic{enumi}.}%
+\def\theenumi{\arabic{enumi}}%
+\def\labelenumii{\alph{enumii}.}%
+\def\theenumii{\alph{enumii}}%
+\def\p@enumii{\theenumi}%
+\def\labelenumiii{(\arabic{enumiii})}%
+\def\theenumiii{\roman{enumiii}}%
+\def\p@enumiii{\theenumi(\theenumii)}%
+\def\labelenumiv{(\alph{enumiv})}%
+\def\theenumiv{\Alph{enumiv}}%
+\def\p@enumiv{\p@enumiii\theenumiii}%
+\def\labelitemi{\@bullet}%
+\def\labelitemii{-}%
+\def\labelitemiii{*}%
+\def\labelitemiv{+}%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}%
+\let\endquote=\endlist
+\def\descriptionlabel##1{\hspace\labelsep \it ##1}%
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+\let\makelabel\descriptionlabel}}%
+\let\enddescription\endlist
+}%
+\def\@initializeothervariables{%
+\let\@texttop=\relax
+\@ifundefined{@classlabel}{\def\@classlabel{}}{}%
+\def\ps@firstpage{\let\@mkboth\@gobbletwo
+\def\@oddhead{\@makeclassheader\@printclasspage}%
+\def\@oddfoot{}}%
+\def\ps@pagetwo{\let\@mkboth\@gobbletwo
+\def\@oddhead{%
+\@printpagetwoheader\@printpagenum\@printclasspage}%
+\def\@oddfoot{}}%
+\pagestyle{pagetwo}%
+\@advcountbydimen\@countverticalposition\@dimenletterpapervcorr
+\@advcountbydimen\@countleftheader\@dimenletterpaperhcorr
+\@advcountbydimen\@countrightcolon\@dimenletterpaperhcorr
+\@countrightheader=\@countrightcolon
+\@advcountbydimen\@countrightheader\@dimenspaceaftercolon
+\@countpictorig=\@countleftheader
+\@advcountbydimen\@countpictorig{-\@dimenexpandside}%
+\oddsidemargin=\@countleftheader pt
+\advance \oddsidemargin by -1in
+\advance \oddsidemargin by -\@dimenexpandside
+\evensidemargin=\oddsidemargin
+}%
+\def\@settrue{%
+\@newtemptrue
+\@newattntrue
+\@newtelephonetrue
+\@newtelephonetrue
+\@newcytrue
+\@newattachmentstrue
+\@newreferencetrue
+\@newdistributiontrue
+\@newenctrue
+\@newthrutrue
+\@newviatrue
+\@newrighttotrue
+\@newlefttotrue
+\@newtotrue
+}
+\def\@makeclassheader{%
+\@countclassseptop 24 %
+\@countclasssepbot 40 %
+\@globaladvcountbydimen\@countclasssepbot{-\@dimenletterpapervcorr}%
+\@globaladvcountbydimen\@countclassseptop\@dimenletterpapervcorr
+\ifx\@bodyfonts\@postscript
+\@makePSclassheader
+\else
+\ifx\@classlabel\@empty
+\global\setbox\@boxclasspage=\hbox{\hbox to 0pt{\hss\hss}}%
+\else
+\global\setbox\@boxclasspage=\hbox{\hbox to 0pt{\hss
+\begin{picture}(0,0)(\@countpictorig,0)%
+{%
+\@classfont
+\put (0,-\@countclassseptop)%
+{\makebox(0,0)[tl]{\hbox to 8.5in{\hfil\@classlabel\hfil}}}%
+\@counttemp=-\@countclasssepbot
+\advance\@counttemp by 795 %
+\put (0,-\@counttemp)%
+{\makebox(0,0)[bl]{\hbox to 8.5in{\hfil\@classlabel\hfil}}}%
+}%
+\end{picture}%
+\hss}}%
+\fi\fi
+}%
+\gdef\@psdeflosalamos{%
+\special{ps::[local]%
+/@LOSALAMOS1 {
+/VirginState save def
+/Helvetica-Bold findfont [ 27.7 0 0 29 0 0 ] makefont setfont
+/YC exch neg def %
+/XC exch def %
+} def
+}%
+\special{ps::[local]%
+/@LOSALAMOS2 {
+/MV {moveto} def
+/SO {false charpath stroke} def
+.5 setlinewidth
+XC 87 add YC 716 add translate
+} def
+}%
+\special{ps::[local]%
+/@LOSALAMOS3 {
+0 0 MV (L) SO
+15.9 0 MV (o) SO
+31.8 0 MV (s) SO
+51.3 0 MV (A) SO
+70.2 0 MV (l) SO
+77 0 MV (a) SO
+91.4 0 MV (m) SO
+115 0 MV (o) SO
+130.9 0 MV (s) SO
+VirginState restore
+} def
+}%
+}%
+\def\@psdefclasslabel{%
+\specialbop{ps::[global]%
+/@CLASSOVERLAY1 {
+/VirginState save def
+/Topdist exch def
+/Botdist exch def
+dup (SECRET) eq
+{/Space 3.5 def /X 272 def } %
+{/Space 3 def /X 244 def } %
+ifelse
+/Label exch def
+} def
+}%
+\specialbop{ps::[global]%
+/@CLASSOVERLAY2 {
+/Print { gsave Space 0 Label ashow grestore } def
+/DoubPrint { Print StrikeWidth 0 rmoveto Print } def
+/Scale .415888 def %
+/StrikeWidth 1.4 def %
+} def
+}%
+\specialbop{ps::[global]%
+/@CLASSOVERLAY3 {
+/Helvetica-Bold findfont [29 Scale mul 0 0 29 0 0] makefont setfont
+X 770 Topdist sub moveto
+DoubPrint
+X Botdist moveto
+DoubPrint
+VirginState restore
+} def
+}%
+}%
+\def\@makePSclassheader{%
+\gdef\@PSclasslabel##1##2##3{%
+\special{ps:: ##1 ##2 ##3 @CLASSOVERLAY1 @CLASSOVERLAY2 @CLASSOVERLAY3}}%
+}%
+\def\@makepagetwoheader{%
+\@tokspagetwoheader={}%
+\ifx\@useasheader\@useto
+\@pullpagetwotoheader
+\else\ifx\@useasheader\@useattn
+\@tokspagetwoheader=\@toksattn
+\else\ifx\@useasheader\@usesubject
+\ifx\@subject\@empty\else\@tokspagetwoheader=\expandafter{\@subjectorig}\fi
+\else
+\@tokspagetwoheader=\expandafter{\@useasheader}%
+\fi\fi\fi
+\savebox{\@boxpagetwoheader}{%
+\begin{minipage}[b]{\textwidth}%
+\normalsize
+\rule{0pt}{72pt}\rule{0pt}{-\ht\strutbox}%
+\parbox[t]{\@dimenpagetwoheader}{%
+\parskip=\@parskipsave
+\the\@tokspagetwoheader\copy\strutbox
+\ifx\@serialnumber\@empty
+\else
+\ifhmode\newline\fi \@symbolserialnumber\copy\strutbox
+\fi
+}%
+\copy\strutbox\hfill
+\makebox[\@dimenpagetwoheader][r]{\hfil\@date}%
+\end{minipage}%
+}%
+\@dimentoppagetwo=\ht\@boxpagetwoheader
+\advance\@dimentoppagetwo by 4\baselineskip
+\advance\@dimentoppagetwo by -\dp\strutbox
+}%
+\def\@printclasspage{%
+\ifx\@bodyfonts\@postscript
+\ifx\@classlabel\@empty
+\else
+\@PSclasslabel{(\@classlabel)}{\the\@countclasssepbot }%
+{\the\@countclassseptop }%
+\fi
+\vbox to 0in{}\hss
+\else
+\vbox to 0in{\hbox to 0pt{\usebox{\@boxclasspage}\hss}\vss}\hss
+\fi
+}%
+\def\@printpagetwoheader{%
+\vbox to 0in{\hbox to 0pt{\usebox{\@boxpagetwoheader}\hss}\vss}%
+}%
+\def\@printpagenum{%
+\vbox to 0pt{\hbox to 0pt{%
+\begin{minipage}[b]{\textwidth}%
+\normalsize
+\rule{0pt}{72pt}\rule{0pt}{-\ht\strutbox}%
+\hfil{- \thepage\ -}\hfil
+\end{minipage}%
+\hss}\vss}%
+}%
+\def\@pullpagetwotoheader{%
+\@pullloop{leftto}%
+\ifnum\@countrightto=0\else
+\@addtotoks\@tokspagetwoheader\\
+\@pullloop{rightto}%
+\fi
+}%
+\def\@pullloop#1{%
+\@tokstemp=\csname @toks#1\endcsname
+\@counttemp=\csname @count#1\endcsname
+\loop
+\ifnum\@counttemp>0 %
+\@toendtopull\@tokstemp
+\@tonewlinepull\@toksbeforeendto
+\@tocommapull\@toksbeforenewline
+\@addtokstotoks\@tokspagetwoheader\@toksbeforecomma
+\ifnum\@counttemp=1\else
+\@addtotoks\@tokspagetwoheader\\
+\fi
+\@tokstemp=\@toksafterendto
+\advance\@counttemp by -1
+\repeat
+}%
+\def\@beginletter{%
+\@ifundefined{@shortletterstyle}{\par}%
+{%
+\ifx\@typeface\@tt
+\topsep=\baselineskip
+\baselineskip=2\baselineskip
+\parindent=5\@dimenwdtt
+\leftmargini=7\@dimenwdtt
+\else\ifx\@typeface\@rm
+\advance\baselineskip by \parskip
+\parindent=2.5em
+\leftmargini=3.5em
+\topsep=1.2em
+\parsep=.6em
+\itemsep=.6em
+\fi\fi
+\parskip=0pt
+\leftmargin=\leftmargini
+\par
+}%
+}%
+\def\@clearclosing{%
+\edef\@tempa{\@toplist\@botlist\@deferlist}%
+\ifx\@tempa\@empty\else
+\@ifundefined{@noclearpage}{\clearpage}{}%
+\fi
+}%
+\def\@endletter{%
+\@ifundefined{@shortletterstyle}{\@dimenhspacesig=0pt}%
+{%
+\par
+\ifnum\thepage>1 %
+\@errorshortletter
+\fi
+\parindent=0em
+\baselineskip=\@baselineskipsave
+\parskip=\@parskipsave
+\@dimenhspacesig=\textwidth
+\divide\@dimenhspacesig by \@dimenwdtt
+\divide\@dimenhspacesig by 2
+\multiply\@dimenhspacesig by \@dimenwdtt
+\advance\@dimenhspacesig by 3\@dimenwdtt
+}%
+}%
+\def\@printfirstpageheader{%
+\@outputlastpagetrue
+\newpage
+\@outputfirstpagetrue
+\@outputlastpagefalse
+\thispagestyle{firstpage}%
+\normalsize
+\begin{picture}(0,0)(\@countpictorig,\@countverticalposition)%
+\ifx\@headerfonts\@letterpaper
+\else
+\@printletterpaper
+\fi
+\@printfirstpagerightheader
+\end{picture}%
+\@splitto
+\@printingtotrue\@printto\@printingtofalse
+\@printthruorvia{thru}%
+\@printthruorvia{via}%
+\@printsalutation
+\@printsubject
+\@printreference
+}%
+\def\@printletterpaper{%
+\ifx\@headerfonts\@postscript
+\@dimentemp=\@dimenletterpaperhcorr
+\@counttemp=\@dimentemp
+\divide\@counttemp by 65536
+\@counttemptwo=\@dimenletterpapervcorr
+\divide\@counttemptwo by 65536
+\@PSlosalamos{\the\@counttemp }{\the\@counttemptwo }%
+\else
+\@latwentyeight
+\put (\@countleftheader,-77){\@losalamos}%
+\fi
+\@spectwelve
+\put (\@countleftheader,-93){\@lanl}%
+\put (\@countleftheader,-\@countbotheader){\@lanm}%
+\@bookseven
+\@counttemptwo=767
+\put (0,-\@counttemptwo){\makebox(0,0)[bl]{\hbox to 8.5in{%
+\hfil An Equal Opportunity Employer/Operated
+by the University of California\hfil}}}%
+\@ifundefined{@nocallouts}{%
+\@booksix
+\put (\@countrightcolon,-68){\makebox(0,0)[br]{DATE:}}%
+\put (\@countrightcolon,-80){\makebox(0,0)[br]{IN REPLY REFER TO:}}%
+\put (\@countrightcolon,-92){\makebox(0,0)[br]{MAIL STOP:}}%
+\put (\@countrightcolon,-\@countbotheader){\makebox(0,0)[br]{TELEPHONE:}}%
+}{}%
+}%
+\def\@printfirstpagerightheader{%
+\normalsize
+\@ifundefined{@nocallouts}{%
+\put (\@countrightheader,-68){\@date}%
+\put (\@countrightheader,-80){\@symbolserialnumber}%
+\put (\@countrightheader,-92){\@mailstop}%
+\put (\@countrightheader,-\@countbotheader)%
+{\parbox[t]{2.5in}{\parskip=\@parskipsave\the\@tokstelephone}}%
+}{%
+\put (\@countrightheader,-\@countbotheader){\parbox[b]{2.5in}{%
+\parskip=\@parskipsave\ignorespaces\@date
+\\Ref\@: \ignorespaces\@symbolserialnumber
+}}}}%
+\def\@splitto{%
+\ifnum\@countto=0 %
+\else\ifnum\@countto<3 %
+\@toksleftto=\@toksto
+\@countleftto=\@countto
+\@toksrightto={}%
+\@countrightto=0
+\else
+\@countrightto=\@countto \divide\@countrightto by 2
+\@countleftto=\@countto \advance\@countleftto by -\@countrightto
+\@toksleftto={}%
+\@counttemp=\@countleftto
+\@tokstemp=\@toksto
+\loop
+\@toendtopull\@tokstemp
+\@addtokstotoks\@toksleftto\@toksbeforeendto
+\@addtotoks\@toksleftto\@endto
+\@tokstemp=\@toksafterendto
+\advance\@counttemp by -1
+\ifnum\@counttemp>0 %
+\repeat
+\@toksrightto=\@tokstemp
+\fi\fi
+\@toksto={}\@countto=0
+}%
+\def\@printto{%
+\newline
+\@dimentemp=\@countbotheader pt
+\advance\@dimentemp by \@dimenletterpapervcorr
+\advance\@dimentemp by 3\baselineskip
+\advance\@dimentemp by -\ht\strutbox
+\advance\@dimentemp by \@dimenexpandtopmargin
+\vrule height \the\@dimentemp width0pt
+\@everyindenttrue
+\vbox to 0pt{%
+\hbox{%
+\@dimentemp=\textwidth
+\ifnum\@countrightto=0 %
+\parbox[t]{\@dimentemp}%
+{\parskip=\@parskipsave
+\ifnum\@countleftto>0 \@maketocol{leftto}\fi \mbox{}}%
+\else
+\advance\@dimentemp by -\@dimentocolsep
+\divide\@dimentemp by 2
+\parbox[t]{\@dimentemp}%
+{\parskip=\@parskipsave
+\ifnum\@countleftto>0 \@maketocol{leftto}\fi \mbox{}}%
+\hskip\@dimentocolsep
+\parbox[t]{\@dimentemp}%
+{\parskip=\@parskipsave\@maketocol{rightto}\mbox{}}%
+\fi
+}%
+}%
+\@everyindentfalse
+\newline
+\vspace{-\baselineskip}%
+\vspace{-\parskip}%
+\vspace{\@bodysep}%
+\mbox{}%
+}%
+\def\@maketocol#1{%
+\@tokscoltemp=\csname @toks#1\endcsname
+\@countcoltemp=\csname @count#1\endcsname
+\@counttemptwo=\@countcoltemp
+\begin{list}{}{\parsep=0pt\itemsep=\parskip\listparindent=-2\@dimenwdtt
+\topsep=0pt\leftmargin=-\listparindent}%
+\longloop
+\ifnum\@countcoltemp>0 %
+\advance\@countcoltemp by -1
+\@toendtopull\@tokscoltemp
+\@tokscoltemp=\@toksafterendto
+\@writeonelabel{\the\@toksbeforeendto}%
+\item
+\leavevmode\copy\strutbox
+\innerloop
+\@tonewlinepull\@toksbeforeendto
+\@toksaftersave=\@toksafternewline
+\ignorespaces\the\@toksbeforenewline
+\copy\strutbox
+\@toksnotequal\@toksaftersave\@toksempty
+\if@toksnotequal
+\par
+\@toksbeforeendto=\@toksaftersave
+\innerrepeat
+\longrepeat
+\end{list}%
+\@countcoltemp=\@counttemptwo
+}%
+\long\def\longloop#1\longrepeat{\def\longbody{#1}\longiterate}%
+\def\longiterate{\longbody \let\next\longiterate \else\let\next\relax\fi \next}%
+\let\longrepeat=\fi%
+\long\def\innerloop#1\innerrepeat{\def\innerbody{#1}\inneriterate}%
+\def\inneriterate{\innerbody \let\next\inneriterate
+\else\let\next\relax\fi \next}%
+\let\innerrepeat=\fi%
+\def\@printsalutation{%
+\@ifemptyorundefined{@salutation}{}{%
+\par
+\@salutation
+}}%
+\def\@printthruorvia#1{%
+\@tokstemp=\csname @toks#1\endcsname
+\@counttemp=\csname @count#1\endcsname
+\ifnum\@counttemp=0 %
+\else
+\longloop
+\@toendtopull\@tokstemp
+\par
+\begin{list}{\copy\strutbox \uppercase{#1}:\hfill}{%
+\settowidth\labelwidth{\uppercase{#1}: }%
+\leftmargin=\labelwidth
+\topsep=0pt
+\labelsep=0pt}%
+\item\the\@toksbeforeendto
+\end{list}%
+\@toksnotequal\@toksafterendto\@toksempty
+\if@toksnotequal
+\@tokstemp=\@toksafterendto
+\longrepeat
+\fi}%
+\def\@printsubject{%
+\par
+\ifx\@subject\@empty\else
+\begin{list}{\copy\strutbox SUBJECT:\hfill}{%
+\settowidth\labelwidth{SUBJECT\@: }%
+\leftmargin=\labelwidth
+\topsep=0pt
+\labelsep=0pt}%
+\item\@subject
+\end{list}%
+\fi
+}%
+\def\@printreference{%
+\par
+\ifnum\@countreference=0 %
+\else
+\ifnum\@countreference=1 %
+REFERENCE:\relax
+\else
+REFERENCES:\relax
+\fi
+\par\vspace{-\baselineskip}%
+\begin{list}{\ifnum\@countreference=1\else\arabic{@countlist}.\fi}{%
+\topsep=0pt\itemsep=0pt\parsep=0pt
+\ifnum\@countreference=1 %
+\settowidth\leftmargin{REFERENCE\@: }%
+\else
+\settowidth\leftmargin{REFERENCES\@: }%
+\fi
+\@setnumdefaults\@countreference
+}%
+\@printnumberedlist{\@toksreference}%
+\end{list}%
+\fi
+}%
+\def\@printcompclose{%
+\par
+\vspace{\@bodysep}%
+\@complimentaryclose
+}%
+\def\@printsignature{%
+\par
+\@ifemptyorundefined{@signature}{}{{%
+\samepage
+\vspace*{2\baselineskip}%
+\@signature
+}}}%
+\def\@printoriginatorline{%
+\@ifemptyorundefined{@signature}{\nopagebreak}{}%
+\par
+\ifx\@signer\@empty
+\else
+\@signer
+\ifx\@originator\@empty
+\ifx\@typist\@empty \else :\relax \fi
+\else
+-\relax
+\fi
+\fi
+\ifx\@originator\@empty
+\else
+\@originator
+\ifx\@typist\@empty \else :\relax \fi
+\fi
+\ifx\@typist\@empty
+\else
+\@typist
+\fi
+}%
+\def\@printenc{%
+\@ifundefined{@encas}{}{%
+\ifnum\@countenc=0 %
+\par Enc.\ a/s%
+\else \@erroras\enc\encas{Enc. a/s}%
+\fi}%
+\ifnum\@countenc=0 %
+\else
+\par
+\@ifundefined{@encpagebreak}{}{\pagebreak}%
+\ifnum\@countenc=1 %
+Enclosure:\relax
+\else
+Enc.\relax
+\fi
+\nopagebreak
+\par\vspace{-\baselineskip}%
+\@countletterlist=\@countenc
+\begin{list}{\ifnum\@countenc=1\else\arabic{@countlist}.\fi}{%
+\ifnum\@countenc=1 %
+\settowidth\leftmargin{Enclosure: }%
+\else
+\settowidth\leftmargin{Enc.\ }%
+\fi
+\@setnumdefaults\@countenc
+\topsep=0pt\itemsep=0pt\parsep=0pt
+}%
+\@printnumberedlist{\@toksenc}%
+\end{list}%
+\fi
+}%
+\def\@printattachments{%
+\@ifundefined{@attachmentas}%
+{\@ifundefined{@attachmentsas}{}%
+{\ifnum\@countattachments=0 %
+\par Attachments a/s%
+\else \@erroras\attachments\attachmentsas{Attachments a/s}\fi}}%
+{\@ifundefined{@attachmentsas}%
+{\ifnum\@countattachments=0 %
+\par Attachment a/s%
+\else\@erroras\attachments\attachmentas{Attachment a/s}\fi}%
+{\par Attachments a/s%
+\@erroras\attachmentas\attachmentsas{Attachment a/s}}}%
+\ifnum\@countattachments=0 %
+\else
+\par
+\@ifundefined{@attachmentspagebreak}{}{\pagebreak}%
+\ifnum\@countattachments=1 %
+Attachment:\relax
+\else
+Attachments:\relax
+\fi
+\@countletterlist=\@countattachments
+\begin{list}{\ifnum\@countattachments=1\else\arabic{@countlist}.\fi}{%
+\leftmargin=0pt
+\@setnumdefaults\@countattachments
+}%
+\@printnumberedlist{\@toksattachments}%
+\end{list}%
+\fi
+}%
+\def\@printdistribution{%
+\ifnum\@countdistribution=0 %
+\else
+\par
+\@ifundefined{@distributionpagebreak}{}{\pagebreak}%
+{\offinterlineskip Distribution:\copy\strutbox}%
+\@countletterlist=\@countdistribution
+\begin{list}{}{%
+\topsep=0pt\itemsep=0pt\parsep=0pt
+\parskip=0pt\labelsep=0pt\labelwidth=0pt\leftmargin=0pt
+}%
+\item\the\@toksdistribution
+\end{list}%
+\fi
+}%
+\def\@printcy{%
+\ifnum\@countcy=0 %
+\else
+\pagebreak[0]%
+\par
+\@ifundefined{@cypagebreak}{}{\pagebreak}%
+\begin{list}{Cy:\hfill}{%
+\settowidth\labelwidth{Cy: }%
+\leftmargin=\labelwidth
+\topsep=0pt\itemsep=0pt\parsep=0pt
+\labelsep=0pt
+}%
+\item\the\@tokscy
+\end{list}%
+\fi
+}%
+\def\@setnumdefaults#1{%
+\ifnum #1=1 %
+\labelwidth=0pt%
+\labelsep=0pt
+\else
+\usecounter{@countlist}%
+\ifnum #1<10 %
+\settowidth\labelwidth{8.}%
+\else
+\settowidth\labelwidth{88.}%
+\fi\fi
+\addtolength\leftmargin\labelwidth
+\addtolength\leftmargin\labelsep
+\topsep=0pt\itemsep=0pt\parsep=0pt
+\setlength\parskip{0pt}%
+}%
+\def\@printnumberedlist#1{%
+\@toksremaining=#1%
+\loop
+\@tonewlinepull{\@toksremaining}%
+\@toksnotequal\@toksbeforenewline\@toksempty
+\if@toksnotequal
+\@toksitem=\@toksbeforenewline
+\@toksremaining=\@toksafternewline
+\ifx #1\@toksreference%
+\item\uppercase\expandafter{\the\@toksitem}%
+\else
+\item\the\@toksitem
+\fi
+\repeat
+}%
+\def\@tonewlinepull#1{\let\@nlsave=\\\let\\=\relax
+\expandafter\@tonewlinepullone\the#1\\\@empty
+\if@newline\expandafter\@tonewlinepullthree\the#1\@empty
+\else\fi\let\\=\@nlsave}%
+\def\@tonewlinepullone#1\\{\@toksbeforenewline={#1}%
+\futurelet\next\@tonewlinepulltwo}%
+\def\@tonewlinepulltwo#1\@empty{\@toksafternewline={#1}%
+\ifx\@empty\next\@newlinefalse
+\else\@newlinetrue\fi}%
+\def\@tonewlinepullthree#1\\{\@toksbeforenewline={#1}%
+\futurelet\next\@tonewlinepullfour}%
+\def\@tonewlinepullfour#1\@empty{\@toksafternewline={#1}%
+\ifx\@empty\next\@newlinefalse
+\else\@newlinetrue\fi}%
+\def\@tocommapull#1{\expandafter\@tocommapullone\the#1,\@empty}%
+\def\@tocommapullone#1,{\@toksbeforecomma={#1}%
+\futurelet\next\@tocommapulltwo}%
+\def\@tocommapulltwo#1\@empty{\ifx\@empty\next \@commafalse
+\else \@commatrue \fi}%
+\def\@toendtopull#1{\expandafter\@toendtopullone\the#1\@empty}%
+\def\@toendtopullone#1\@endto#2\@empty{\@toksbeforeendto={#1}%
+\@toksafterendto={#2}}%
+\def\@unspaceleft#1{%
+\def\@macroname{#1}%
+\ifx #1\@empty
+\else
+\ifx #1\@blank
+\global\expandafter\def\@macroname{}%
+\else
+\expandafter\@unspaceleftone#1\relax\relax\@empty
+\fi\fi
+}%
+\def\@unspaceleftone#1#2\relax{%
+\global\expandafter\def\@macroname{#1#2}%
+\@unspacelefttwo}%
+\def\@unspacelefttwo#1\@empty{}%
+\def\@upperunspaceleft#1{%
+\def\@macroname{#1}%
+\ifx #1\@empty
+\else
+\ifx #1\@blank
+\global\expandafter\def\@macroname{}%
+\else
+\expandafter\@upperunspaceleftone#1\relax\relax\@empty
+\fi\fi
+}%
+\def\@upperunspaceleftone#1#2\relax{%
+\global\expandafter\def\@macroname{\uppercase{#1#2}}%
+\@unspacelefttwo}%
+\def\@unspaceright#1{%
+\def\@macroname{#1}%
+\edef\@temp{#1}%
+\expandafter\@unspacerightone#1\relax{} \relax\@empty
+}%
+\def\@unspacerightone#1 \relax{%
+\global\expandafter\edef\@macroname{#1}%
+\futurelet\next\@unspacerighttwo}%
+\def\@unspacerighttwo#1\@empty{%
+\ifx\@empty\next
+\global\expandafter\edef\@macroname{\@temp}%
+\fi
+}%
+\def\@addtotoks#1#2{#1=\expandafter{\the#1#2}}%
+\def\@addtokstotoks#1#2{\edef\@deftemp{\the#1\the#2}%
+\global#1=\expandafter{\@deftemp}}%
+\long\def\@ifemptyorundefined#1#2#3{%
+\expandafter\ifx\csname#1\endcsname\relax#2
+\else\expandafter\ifx\csname#1\endcsname\@empty#2
+\else\expandafter\ifx\csname#1\endcsname\@blank#2
+\else#3\fi\fi\fi}
+\def\@ifnoinfo#1#2#3{\def\@deftemp{#1}%
+\ifx\@deftemp\@empty#2\else\ifx\@deftemp\@blank#2\else#3\fi\fi}
+\def\@toksnotequal#1#2{\begingroup\edef\one{\the#1}\edef\two{\the#2}%
+\ifx\one\two\global\@toksnotequalfalse\else\global\@toksnotequaltrue\fi
+\endgroup}%
+\def\@advcountbydimen#1#2{\@counttemp=#2%
+\divide\@counttemp by 65536 \advance#1by \@counttemp}%
+\def\@globaladvcountbydimen#1#2{\@counttemp=#2%
+\divide\@counttemp by 65536 \global\advance#1by \@counttemp}%
+\def\@notvoidtoks#1{\@addtotoks{#1}{\@empty}%
+\expandafter\@notvoidtoksone\the#1}%
+\def\@notvoidtoksone{\futurelet\next\@notvoidtokstwo}%
+\def\@notvoidtokstwo#1\@empty{\ifx\@empty\next \@notvoidtoksfalse
+\else \@notvoidtokstrue \fi}%
+\maillabelheight{}
+\maillabeltopmargin{}
+\def\@startlabels{%
+\baselineskip=0pt
+\lineskip=0pt
+\pagestyle{empty}
+\let\@texttop=\relax
+\topmargin=-72pt
+\advance\topmargin by\@dimenmaillabeltopmargin
+\headsep 0pt
+\oddsidemargin -35pt
+\evensidemargin -35pt
+\textheight 11in
+\advance\textheight by-\@dimenmaillabeltopmargin
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 550pt
+\columnsep 25pt
+\xpt
+\raggedbottom
+\boxmaxdepth=0pt
+\parindent=0pt %
+\twocolumn\relax
+\loop
+\ifnum\@countskiplabels>0
+\@mlabel{}%
+\advance\@countskiplabels by -1
+\repeat
+}
+\def\@mlabel#1{%
+\setbox0\vbox{\parbox[b]{3.6in}%
+{\strut\@printingtotrue\ignorespaces #1}}%
+\vbox to \the\@dimenmaillabelheight{\vss \box0 \vss}}%
+\def\@writeonelabel#1{%
+\if@makemaillabels
+\begingroup
+\def\protect{\string}
+\let\\=\relax
+\def\protect##1{\string##1\space}
+\immediate\write\@mlbout{\string\@mlabel{#1}}%
+\ifnum\@countreturnaddress=0\else
+\immediate\write\@mlbout{\string\@mlabel{\the\@toksreturnaddress}}%
+\fi
+\endgroup
+\fi}
+\def\@eightspaces{\space\space\space\space\space\space\space\space}%
+\def\@errorundeclared#1{\typeout{^^JWarning: you have not called \protect #1
+before calling \protect\opening.^^J}}%
+\def\@errorundeclaredcallout#1{\typeout{^^JWarning: you have not specified
+the callout \protect #1^^J
+\@eightspaces before calling \protect\opening.^^J}}%
+\def\@errorundeclaredto{\typeout{^^JWarning: you have not specified
+an address
+before calling \protect\opening.^^J^^J
+\@eightspaces Use \protect\to\space to specify an address,
+for example^^J^^J
+\@eightspaces \protect\to{Vieno Severi Alanne \protect\\^^J
+\@eightspaces 414 Rio Seco \protect\\^^J
+\@eightspaces Santa Fe, NM 87501}^^J}}%
+\def\@errorshowexample#1#2{\typeout{\@eightspaces\space For example, use^^J^^J
+\@eightspaces\protect #1{#2}^^J}}%
+\def\@errorundeclaredsalutation{\typeout{^^JWarning: you have not called
+\protect\salutation\space before calling \protect\opening.^^J}%
+\@errorshowexample{\salutation}{Dear Henry,}}%
+\def\@errorundeclaredcompclose{\typeout{^^JWarning: you have not called
+\protect\complimentaryclose\space before calling \protect\opening.^^J
+\@eightspaces\protect\complimentaryclose{Sincerely Yours,}
+will be used by default.^^J}}%
+\def\@errorserialnosymbol{\typeout{^^JWarning: you have called
+\protect\serialnumber, but you have not called \protect\symbol.^^J}%
+\@errorshowexample{\symbol}{C-2}}%
+\def\@errortoleftrightto{\typeout{%
+^^JWarning: you have called \protect\leftto\space
+and/or \protect\rightto\space as well as \protect\to.^^J
+\@eightspaces All addresses called by \protect\to\space will be printed in
+the left column.^^J}}%
+\def\@erroruseas#1#2{\typeout{^^JWarning: you specified
+\protect\use#1asheader,^^J
+\@eightspaces yet you have not specified \protect#2.^^J^^J
+\@eightspaces The first line of the addressee will be used ^^J
+\@eightspaces on headers after page one.^^J}}%
+\def\@errorattn{\typeout{^^JWarning: \protect\attn\space must be used only
+within the argument of \protect\to, for example,^^J^^J
+\@eightspaces \protect\to{Genie Electronics \protect\\ ^^J
+\@eightspaces \protect\attn{Mr. Robert Mercer, Sales Manager} \protect\\ ^^J
+\@eightspaces P.O. Box 8501 \protect\\ ^^J
+\@eightspaces Midwest City, OK 73110}^^J}}%
+\def\@errorthruandvia{\typeout{^^JWarning: you have used both
+\protect\thru\space and \protect\via\space in this letter.^^J
+\@eightspaces Use one or the other, but not both.}}%
+\def\@errorclassargument{%
+\typeout{^^JFatal error: \protect\classlabel{\@classlabel}
+calls for an invalid classification label.^^J}%
+\@errorclassmessage}%
+\def\@errortwoclasses{%
+\typeout{^^JFatal error: you have called \protect\classlabel \space
+more than once, or you have^^J
+\@eightspaces\space\space\space\space called
+\protect\classlabel \space after having called
+\protect\begin{document}.^^J^^J
+\space You are allowed to declare only one classification label
+per letter.^^J
+\space You must call \protect\classlabel\space before using
+\protect\begin{document}.^^J}%
+\@errorclassmessage}%
+\def\@errorclassmessage{%
+\typeout{%
+\space\space To print CONFIDENTIAL on the top and bottom
+of your letter,^^J
+\space use \protect\classlabel{c}^^J^^J
+\space To print SECRET on the top and bottom
+of your letter,^^J
+\space use \protect\classlabel{s}^^J^^J
+\space To print UNCLASSIFIED on the top and bottom
+of your letter,^^J
+\space use \protect\classlabel{u}^^J^^J
+\space If you do not want a classification label on your letter,^^J
+\space use \protect\classlabel{}^^J
+\space or do not use the \protect\classlabel\space command.^^J^^J
+\space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegaltypeface{%
+\typeout{^^JFatal error: \protect\typeface{\@typeface} calls for an invalid
+typeface.^^J^^J
+\space Use \protect\typeface{tt} or \protect\typeface{rm}^^J^^J
+\space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegalheaderfont{\def\@fontcommand{\protect\headerfonts}%
+\def\@fontarg{\@headerfonts}%
+\typeout{^^JFatal error: \@fontcommand{\@fontarg} calls for
+an invalid font.^^J^^J
+\space Use \@fontcommand{lafonts}, \@fontcommand{texfonts},^^J
+\space or \@fontcommand{postscript}\space
+depending on what fonts^^J \space are available on your machine.^^J^^J
+\space Using \@fontcommand{} will give you the default fonts.^^J^^J
+\space Use \@fontcommand{letterpaper} if you wish to print your letter^^J
+\space on pre-printed letter paper.^^J^^J
+\space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegalbodyfont{\def\@fontcommand{\protect\bodyfonts}%
+\def\@fontarg{\@bodyfonts}%
+\typeout{^^JFatal error: \@fontcommand{\@fontarg} calls
+for an invalid font.^^J^^J
+\space Use \@fontcommand{texfonts} or \@fontcommand{postscript}^^J
+\space depending on what fonts are available on your machine.^^J^^J
+\space Using \@fontcommand{} will give you the default fonts.^^J^^J
+\space Change your file, and rerun LaTeX.^^J}}%
+\def\@erroramfonts{%
+\typeout{^^JWarning: You are using the obsolete Almost Modern (AM)
+fonts.^^J^^J
+\@eightspaces Only cursory debugging has been attempted using AM fonts.^^J
+\@eightspaces The Computer Modern (CM) fonts are fully supported
+by laletter.^^J}}%
+\def\@erroroldlafonts{%
+\typeout{^^JFatal error: Your system is using an obsolete version
+of lafonts.^^J^^J
+\@eightspaces Get the manual called "TeX Fonts for Los Alamos
+Memos and Letters^^J
+\@eightspaces Installation Reference," CIC \protect##1128,
+from the Computer^^J
+\@eightspaces Information Center, 667-6992.^^J}}%
+\def\@errorshortletter{%
+\typeout{^^JWarning: Use of the \protect\shortletterstyle\space macro
+is intended^^J
+\@eightspaces for use with letters of ten lines or less.^^J^^J}}%
+\def\@erroras#1#2#3{%
+\typeout{^^JWarning: You have used both \protect#1\space and
+\protect#2.^^J
+\@eightspaces Use one or the other but not both.^^J
+\@eightspaces "#3" will not be printed on this letter.^^J^^J}}%
+\def\@todieornottodie{\relax}%
+\def\@exit{\@fileswfalse\@makemaillabelsfalse\end{document}}%
+\def\@exitfi{\@fileswfalse\@makemaillabelsfalse\fi\end{document}}%
+\def\@specialbopempty{}%
+\let\@specialboptext=\@specialbopempty
+\def\specialbop#1{%
+\xdef\@specialboptext{%
+\@specialboptext
+\special{#1}%
+}}%
+\def\@specialbopemit{%
+\ifx\@specialboptext\@specialbopempty
+\else
+\@specialboptext
+\global\let\@specialboptext=\@specialbopempty
+\fi
+}%
+\def\@item[#1]{%
+\if@noparitem \@donoparitem
+\else \if@inlabel \indent \par \fi
+\ifhmode \unskip\unskip \par \fi
+\if@newlist \if@nobreak \@nbitem \else
+{%
+\if@closing
+\@beginparpenalty=10000
+\fi
+\addpenalty\@beginparpenalty
+}%
+\addvspace\@topsep \addvspace{-\parskip}\fi
+\else
+{%
+\if@closing
+\ifnum\c@@countlist=1 %
+\@itempenalty=10000
+\fi
+\advance \@countletterlist by -1
+\ifnum\c@@countlist=\@countletterlist
+\@itempenalty=10000
+\fi
+\fi
+\addpenalty\@itempenalty
+}%
+\addvspace\itemsep
+\fi
+\global\@inlabeltrue
+\fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+\if@inlabel\global\@inlabelfalse
+\if@everyindent\else%
+\hskip -\parindent
+\fi%
+\box\@labels
+\penalty\z@ \fi
+\everypar{}}\global\@nobreakfalse
+\if@noitemarg\@noitemargfalse \if@nmbrlist\refstepcounter{\@listctr}\fi\fi
+\setbox\@tempboxa\hbox{\makelabel{#1}}%
+\global\setbox\@labels
+\hbox{\unhbox\@labels \hskip \itemindent
+\hskip -\labelwidth \hskip -\labelsep
+\ifdim \wd\@tempboxa >\labelwidth
+\box\@tempboxa
+\else \hbox to\labelwidth {\makelabel{#1}}\fi
+\hskip \labelsep}\ignorespaces
+}%
+\def\@outputpage{\begingroup\catcode`\ =10
+\let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+\if@specialpage
+\global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+\if@twoside
+\ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+\let\@themargin\oddsidemargin
+\else \let\@thehead\@evenhead
+\let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+\fi\fi
+\shipout
+\vbox{\normalsize \baselineskip\z@ \lineskip\z@
+\let\par\@@par %
+\@specialbopemit%
+\vskip \topmargin \moveright\@themargin
+\vbox{\setbox\@tempboxa
+\vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}}%
+\dp\@tempboxa\z@
+\box\@tempboxa
+\vskip \headsep
+\box\@outputbox
+\baselineskip\footskip
+\hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+\endgroup
+\if@outputfirstpage%
+\global\topskip=\ht\strutbox%
+\global\headsep=\@dimentoppagetwo%
+\global\advance\headsep by -\topskip%
+\global\advance\textheight by -\headsep%
+\global\@outputfirstpagefalse%
+\fi%
+\stepcounter{page}%
+\if@outputlastpage%
+\ifnum\outputpenalty=-\@M
+\global\c@page=1
+\global\topskip=\@topskipfirst
+\global\headsep=\@headsepfirst
+\global\textheight=\@textheightfirst
+\fi\fi
+\let\firstmark\botmark
+}%
+\def\document{\endgroup
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\columnwidth\textwidth \@clubpenalty\clubpenalty
+\if@twocolumn \advance\columnwidth -\columnsep
+\divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+\fi
+\hsize\columnwidth \linewidth\hsize
+\begingroup\@floatplacement\@dblfloatplacement
+\makeatletter\let\@writefile\@gobbletwo
+\@input{\jobname.aux}\endgroup
+\if@filesw \immediate\openout\@mainaux=\jobname.aux
+\immediate\write\@mainaux{\relax}\fi
+\if@makemaillabels \immediate\openout\@mainmlb=\jobname.mlb
+\immediate\write\@mainmlb{\string\@startlabels}\fi
+\def\do##1{\let ##1\@notprerr}
+\@preamblecmds
+\let\do\noexpand
+\@normalsize\everypar{}}
+\def\enddocument{%
+\if@neveropened
+\@splitto
+\setbox\@boxtemp=\hbox{\@printingtotrue\@printto\@printingtofalse}%
+\fi
+\@checkend{document}\newpage\begingroup
+\if@makemaillabels \immediate\closeout\@mainmlb
+\makeatletter\input \jobname.mlb\clearpage\fi
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
diff --git a/macros/latex209/contrib/laletter/lettest.tex b/macros/latex209/contrib/laletter/lettest.tex
new file mode 100644
index 0000000000..2708b3ddf7
--- /dev/null
+++ b/macros/latex209/contrib/laletter/lettest.tex
@@ -0,0 +1,176 @@
+\documentstyle[12pt]{laletter} % type size of 12 points
+
+%\documentstyle[11pt]{laletter} % type size of 11 points
+%\documentstyle{laletter} % type size of 10 points
+%
+% This is a sample file to show you typical input for printing a
+% letter at the Los Alamos National Laboratory using LaTeX.
+%
+% Notice that the '%' is the comment character. The '%' and the
+% rest of the line are ignored by LaTeX. All of the LaTeX letter
+% commands will appear in this file. The ones not used by this
+% file will be commented out. To look at the body of the letter,
+% skip down to the \begin{document} command.
+
+% When you print out the DVI file that is generated from this
+% source file, you will notice that the header doesn't look like
+% pre-printed letter paper. That is because \headerfonts{texfonts}
+% is used here.
+%
+% If you are printing on a PostScript printer, use
+% \headerfonts{postscript} to get a good looking header. The
+% \headerfonts{lafonts} command will also produce a nice header,
+% but you will need to have installed the LANL header fonts. If
+% you use \headerfont{letterpaper}, put pre-printed letter paper
+% in your printer or copying machine.
+%
+ \headerfonts{texfonts}
+% \headerfonts{postscript}
+% \headerfonts{lafonts}
+% \headerfonts{letterpaper}
+
+ \bodyfonts{texfonts}
+% \bodyfonts{postscript}
+ \typeface{tt}
+% \typeface{rm}
+
+% With no date command, today's date will be printed.
+%
+ \date{July 19, 1989}
+
+ \symbol{C-2}
+% \serialnumber{5-213}
+ \mailstop{B253}
+ \telephone{(505) 665-0859\\(FTS) 843-0859}
+ \to{LaTeX Users \\
+ Los Alamos National Laboratory \\
+ Los Alamos, New Mexico 87545}
+ \salutation {Dear LaTeX users:}
+ \subject{typical letter}
+% \reference{Office Procedures Manual}
+% \nocallouts
+% \thru{Alicia J. Lujan, Division Leader\\Life Physics Division}
+% \via{Alicia J. Lujan, Division Leader\\Life Physics Division}
+
+ \complimentaryclose {Sincerely yours,}
+% \complimentaryclose {Very truly yours,}
+ \signature {Steve Sydoriak}
+ \originator{SS}
+ \signer {SS}
+ \typist {SS}
+ \encas
+ \cy {CRMO (2), MS A111\\
+ File}
+
+% \attachments{Graph, Gravitational Pull vs. Image Time, TP-3, MS B888}
+% \attachmentas
+% \attachmentsas
+% \distribution{K. C. Jordan, C-5, MS B777\\
+% T. S. Solomon, TP-1, MS B233}
+% \enc{Letter, Smith to Jones, June 25, 1986\\
+% Letter, Landau to Gresham, March 1, 1987}
+% \attachmentspagebreak
+% \cypagebreak
+% \distributionpagebreak
+% \encpagebreak
+
+% \shortletterstyle % For letters of ten lines or less.
+% \useattnasheader
+% \usesubjectasheader
+% \usetoasheader
+% \useotherasheader{Library Management Meeting}
+
+% \classlabel{u} % UNCLASSIFIED
+% \classlabel{c} % CONFIDENTIAL
+% \classlabel{s} % SECRET
+
+% \expandtopmargin{.5in}
+% \expandwidth{-.25in}
+
+%
+% If you use three or more \to commands, the addresses will be
+% split into two columns. Use \leftto and \rightto if you want to
+% override this.
+%
+% \leftto{Genie Electronics\\
+% \attn{Mr. Robert Mercer, Sales Manager}\\
+% P.O. Box 8501\\
+% Midwest City, OK 73110}
+% \leftto{John Binnington, Manager\\Technical Information Division\\
+% Brookhaven National Laboratory\\Associated Universities, Inc.\\
+% Upton, Long Island, NY 11973}
+% \rightto{Juanita L. Garcia\\Library Science Specialist\\Technical
+% Library\\Sandia National Laboratories\\Albuquerque, NM 87115}
+
+% \letterpaperhcorr{4pt}
+% \letterpapervcorr{-6pt}
+
+% \makemaillabels
+% \returnaddress{Ben Boyd \\ Los Alamos National Laboratory \\
+% Group AB-11, MS D444 \\
+% Los Alamos, NM 87545}
+% \skiplabels{4}
+
+% The following default values set things up for producing
+% labels in two columns of seven 1-1/2" X 4" labels each,
+% suitable for reproducing onto Avery brand number 5362 address
+% labels.
+
+% \maillabelheight{1.5in}
+% \maillabeltopmargin{.25in}
+
+% For 1" labels, use
+% \maillabelheight{1in}
+% \maillabeltopmargin{.5in}
+
+% For 2" labels,use
+% \maillabelheight{2in}
+% \maillabeltopmargin{.5in}
+
+\begin{document}
+\opening
+
+This example shows what a typical letter might look like. It uses
+the texfonts option for the header and the body of the letter.
+The texfonts option calls for use of TeX's Computer Modern fonts.
+The body has the typewriter typeface with a point size of 12.
+
+Remember that LaTeX interprets a blank line as the start of a new
+paragraph, and that any of the special characters \#,\$,\%, \&,
+\{, and \} must be preceded by a backslash. To produce double
+quotes in typewriter typeface, use the " key on your keyboard. To
+produce double quotes in Roman typeface, use `` and '' instead.
+
+The file named lettest.tex that was used to print this letter can
+be used as a template to write your own letters. All of the
+preamble commands that can be used by LaTeX letters are shown in
+lettest.tex. Many of the commands are commented out. They can be
+activated by removing the \% at the beginning of the line.
+
+The spacing and indentation of the preamble commands make the file
+easier to read; the outcome of your file is not affected. The
+preamble begins with the $\backslash$documentstyle command and
+continues to the $\backslash$begin\{document\} command where the
+document section starts. Your file must have a
+$\backslash$end\{document\} command to indicate the end of the
+letter.
+
+The texfonts option was chosen for the header of this letter
+because the Computer Modern fonts are available on any
+installation of TeX\@. Use the postscript, lafonts, or
+letterpaper options in the $\backslash$headerfonts command to
+obtain a good looking header.
+
+There is a draft version of the {\em LaTeX Letter Reference} on CFS
+in any subdirectory of /latexletter. It is an stexted, ASCII file
+that can be viewed on any screen or printed on any printer.
+The final version of the {\em LaTeX Letter Reference} will be
+available from the Computer Information Center in September or
+October.
+
+See {\em LaTeX, A Document Preparation System} by Leslie
+Lamport to learn all about the LaTeX commands that you can put
+in the body of your letter.
+
+\closing
+\end{document}
diff --git a/macros/latex209/contrib/lamemo/memo.README b/macros/latex209/contrib/lamemo/memo.README
new file mode 100644
index 0000000000..4ee9db8d3b
--- /dev/null
+++ b/macros/latex209/contrib/lamemo/memo.README
@@ -0,0 +1,136 @@
+MEMO.STY
+
+This is a LaTeX style that is used at the Los Alamos National
+Laboratory to format memos in accordance with rules established in
+the Laboratory's "Office Procedures Manual." There is a choice of
+Computer Modern fonts or PostScript fonts. Memos can be printed
+in Roman or typewriter typefaces. A "THRU" or a "THRULESS" header
+can be called for. The following features can be included in a
+memo: a subject line, a reference line, a signature line, an
+approval line, an enclosures list, an attachments list, a copy
+list, or a distribution list.
+
+For more information read the "1989 Conference Proceedings" issue
+of "TUGBOAT." Or read the accompanying "LaTeX Memo Reference"
+in the file memo.ref.
+
+
+THE FILES
+
+There are four files that have to do with the LaTeX memo style
+at Los Alamos National Laboratory.
+
+memo.doc is the commented style file.
+memo.sty is the uncommented style file.
+memo.ref is an ASCII version of the memo manual.
+memotest.tex is a test file for memo.sty that can also be used
+ as a template for users' own memos.
+
+
+ALTERING THE STYLE FILE
+
+If you need to adapt the style file to your own institution's
+memos, you should first run memotest.tex through latex and print
+the dvi file. Then read memo.ref to get a feel for the variety of
+output that can be expected.
+
+The easiest way to change the header is to design a memo header
+for your organization that will fit in place of
+
+ Los Alamos
+ Los Alamos National Laboratory
+ Los Alamos, New Mexico 87545
+
+You can then alter the commands that change the fonts (search for
+\@latwentyeight and \@spectwelve), and alter the \put commands in
+\@printletterpaper that print out the header.
+
+Your company's style may demand that you alter the part of the
+header that prints the date, mail stop, telephone, and so forth.
+In that case you will have to change the relevant \put statements
+in \@printmemopaper, as well as those in
+\@printfirstpageheaderinfo.
+
+The numbers in the parentheses in the \put statements are in
+points to the right from the left edge of the paper and down from
+the top edge of the paper.
+
+You may need to mess around with the value of
+\@dimenspacetosubject. This is the distance between the top of
+the page and the bottom of the SUBJECT line.
+
+Hopefully, you can live with most of our memo's style, such as the
+way initials and distribution lists are done. I tried to make the
+code as modular as possible for the sake of my own sanity, but I'm
+sure that I missed a lot of opportunities to make it easy to alter
+the style for new stylistic requirements.
+
+To use PostScript fonts with memo.sty, you must be using
+ArborText's DVIPS. If you are using another PostScript device
+driver, you will have to alter the appropriate \font commands in
+\@chooseheaderfonts and \@choosebodyfonts. You will have to make
+fancier changes if you are using classification labels.
+
+At the end of memo.doc, there is a list of all the variables and
+macros used in memo.sty that are not defined in LaTeX. Search for
+"END OF MEMO.DOC". There are also two lists of the more important
+macros defined in memo.doc. One is sorted alphabetically, and the
+other is sorted by line number.
+
+
+CHANGING THE .DOC FILE INTO A .STY FILE
+
+I use sed (a UNIX utility) to turn my memo.doc file into a
+memo.sty file. If you put the commands below into a file
+named sedfile, run
+
+ sed -f sedfile memo.doc > memo.sty
+
+s/%.*/%/g
+s/[ ][ ]*/ /g
+s/^ //
+/^[ ]*%/d
+/^[ ]*$/d
+/ /d
+
+The parts of the lines that read [ ] are actually square
+brackets enclosing a blank and a tab character.
+
+Line 1 removes everything that follows %s.
+Line 2 converts multiple blanks into single spaces.
+Line 3 gets rid of blanks at the beginning of lines.
+Line 4 gets rid of lines containing only blanks and comments.
+Line 5 gets rid of lines containing only blanks.
+Line 6 gets rid of lines containing Control-L characters.
+
+This script only works because I follow certain conventions when I
+write TeX code. For example, if you use a blank line instead of
+an explicit \par token, the sed script will fail.
+
+\def\x{abc
+
+def}
+
+ is NOT the same as
+
+\def\x{abc
+def}
+
+There may be other constructions that don't work with this sed
+script, so be careful. It IS really nice to have a commented doc
+file as well as its quicker running sty file, so it may be worth
+the extra care that it takes.
+
+
+WHERE I AM
+
+Feel free to write e-mail (sxs@lanl.gov) or phone (505-667-5460)
+or write a letter:
+
+ Steve Sydoriak
+ Los Alamos National Laboratory
+ Group C-2, MS B253
+ Los Alamos, New Mexico 87545
+
+I might be able to help you stumble through some awkward piece of
+code.
diff --git a/macros/latex209/contrib/lamemo/memo.doc b/macros/latex209/contrib/lamemo/memo.doc
new file mode 100644
index 0000000000..d3e440a184
--- /dev/null
+++ b/macros/latex209/contrib/lamemo/memo.doc
@@ -0,0 +1,3049 @@
+\typeout{Document Style 'memo'. Released March 28, 1990}
+
+% Steve Sydoriak wrote this software.
+
+% Copyright, 1990, The Regents of the University of California.
+% This software was produced under a U.S. Government contract
+% (W-7405-ENG-36) by the Los Alamos National Laboratory, which is
+% operated by the University of California for the U.S. Department
+% of Energy. The U.S. Government is licensed to use, reproduce,
+% and distribute this software. Permission is granted to the public
+% to copy and use this software without charge, provided that this
+% notice and any statement of authorship are reproduced on all
+% copies. Neither the Government nor the University makes any
+% warranty, express or implied, or assumes any liability or
+% responsibility for the use of this software.
+
+% ***************************************
+% *** BEGINNING OF ARTICLE.DOC MACROS ***
+% ***************************************
+
+% The following portion of this file was copied from article.doc,
+% with some of the lines commented out or added with % MEMO CHANGES
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus -.07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+%
+% MEMO CHANGES\def\thebibliography#1{\section*{References\@mkboth
+% MEMO CHANGES {REFERENCES}{REFERENCES}}\list
+\def\thebibliography#1{%% MEMO CHANGES
+ \par% MEMO CHANGES
+ \vspace{\baselineskip}% MEMO CHANGES
+ REFERENCES% MEMO CHANGES
+ \list% MEMO CHANGES
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}%
+% The following line reflects the change between 16 Mar 88 and 4 Sep 86
+% versions of article.sty.
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}%
+
+\let\endthebibliography=\endlist
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+% changed 25 Jun 86 to fix according to Howard Trickey:
+% instead of \unhbox\@tempboxa\par we do #1: #2\par
+
+\long\def\@makecaption#1#2{%
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ #1: #2\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+}%
+%
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+% FIGURE
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+%
+% END OF ARTICLE.DOC MACROS
+
+% *************************
+% *** LETTER.STY MACROS ***
+% *************************
+% The following portion of this file was copied from letter.doc,
+% with many of the lines commented out with % MEMO CHANGES
+
+% LETTER DOCUMENT STYLE -- Released 21 July 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+
+% MEMO CHANGES \typeout{Document Style 'letter'. Released 21 July 1985}
+
+% The type size option is handled by \def'ing \@ptsize to the following
+% values:
+% 10pt : 0, 11pt : 1, 12pt : 2
+% Then loading the different fonts accordingly.
+%
+
+\def\@ptsize{0} % Default is 10pt.
+\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt option.
+\@namedef{ds@12pt}{\def\@ptsize{2}} % 12pt option.
+
+
+% no twoside option
+%
+\@twosidefalse
+
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\ifcase \@ptsize\relax % 10pt option
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 11pt option
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 4pt plus 2pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 12pt option
+
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+% MEMO CHANGES \oddsidemargin 53pt % Left margin on odd-numbered pages.
+% MEMO CHANGES \evensidemargin 53pt % Left margin on even-numbered pages.
+\marginparwidth 90pt % Width of marginal notes.
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+\marginparpush 5pt % Minimum vertical space between marginal notes.
+
+% VERTICAL SPACING:
+ % Top of page:
+% MEMO CHANGES \topmargin 27pt % Nominal distance from top of page to top of
+ % box containing running head.
+% MEMO CHANGES \headheight 12pt % Height of box containing running head.
+% MEMO CHANGES \headsep 45pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 25pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+% DIMENSION OF TEXT:
+
+% MEMO CHANGES \textheight 505pt%Height of text (including footnotes and figures
+ % excluding running head and foot).
+% MEMO CHANGES \textwidth 365pt % Width of text line.
+ % For two-column mode:
+% MEMO CHANGES \columnsep 10pt % Space between columns
+% MEMO CHANGES \columnseprule 0pt % Width of rule between columns.
+
+% MEMO CHANGES \raggedbottom % 'ragged bottom' (all pages set to natural
+ % height, with no stretch or shrinkage)
+
+% FOOTNOTES:
+
+\footnotesep 12pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 10pt plus 2pt minus 4pt % Space between last line of text and
+ % top of first footnote.
+
+
+% FLOATS:
+% The following items must be defined, even though there are no
+% floats in this style.
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+% MEMO CHANGES \dblfloatsep 12pt plus 2pt minus 2pt
+% MEMO CHANGES \dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+% MEMO CHANGES \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+% MEMO CHANGES \@dblfptop 0pt plus 1fil
+% MEMO CHANGES \@dblfpsep 8pt plus 2fil
+% MEMO CHANGES \@dblfpbot 0pt plus 1fil
+
+
+
+% ****************************************
+% * LETTER COMMANDS *
+% ****************************************
+
+% MEMO CHANGES ** This whole section of letter.doc was discarded.
+
+% ****************************************
+% * THE SRI LETTER FORMAT *
+% ****************************************
+
+% MEMO CHANGES ** This whole section of letter.doc was discarded.
+
+% ****************************************
+% * THE GENERIC LETTER COMMANDS *
+% ****************************************
+
+% MEMO CHANGES ** This whole section of letter.doc was discarded.
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+
+% MEMO CHANGES ** This whole section of letter.doc was discarded.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+% MEMO CHANGES \parskip .7em % Extra vertical space between paragraphs.
+\parindent 0pt % Width of paragraph indentation.
+% MEMO CHANGES \topsep .4em % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 0pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+% MEMO CHANGES \itemsep .4em % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % SET BY THE LETTER COMMANDS
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+
+% MEMO CHANGES ** This whole section of letter.doc has been redefined
+% in \opening, after \@typeface has been defined.
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+% MEMO CHANGES \tabcolsep 6pt% Half the space between columns in a
+ % tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+% MEMO CHANGES \tabbingsep \labelsep % Space used by the \' command.
+ % (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+%
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@} % The \hrule has default height of .4pt .
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox, with \hsize = \columnwidth.
+%
+
+\long\def\@makefntext#1{\noindent % Macro to make the text of a footnote
+ \hangindent 5pt\hbox
+ to 5pt{\hss $^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+% Fixed sxs 89/06/23
+% MEMO CHANGES \smallskipamount=.5\parskip % These values are used by the
+ % letter macros.
+% MEMO CHANGES \medskipamount=\parskip
+% MEMO CHANGES \bigskipamount=2\parskip
+
+% MEMO CHANGES \ps@plain % 'plain' page style
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column
+% MEMO CHANGES \@fileswfalse % \@fileswfalse inhibits writing of .AUX file.
+\@fileswtrue
+
+% END OF LETTER.STY -- THE LETTER DOCUMENT STYLE
+
+%
+% ***********************************************************
+% *** BEGINNING OF LOCALLY WRITTEN MACROS FOR LANL MEMOS. ***
+% ***********************************************************
+%
+% ***************************************
+% *** DEFINE AND INITIALIZE REGISTERS ***
+% ***************************************
+
+% \NEWLENGTH, \NEWCOUNTER, \NEWCOUNT, \NEWTOKS, \NEWSAVEBOX, \NEWDIMEN,
+% \NEWSKIP, \NEWIF
+
+\newlength{\@lengthlabel}
+\newlength{\@lengthrule}
+\newlength{\@lengthdate}
+\newlength{\@lengthname}
+
+\newcounter{@countlist}
+
+\newcount\@countverticalposition
+\newcount\@countclasssep
+\newcount\@counttemp
+\newcount\@counttemptwo
+\newcount\@countto
+\newcount\@countfrom
+\newcount\@countthru
+\newcount\@countcy
+\newcount\@countattachments
+\newcount\@countreference
+\newcount\@countenc
+\newcount\@countdistribution
+\newcount\@countleftcolon
+\newcount\@countrightcolon
+\newcount\@countleftheader
+\newcount\@countrightheader
+\newcount\@countmemolist
+
+\newtoks\@toksto
+\newtoks\@toksfrom
+\newtoks\@toksthru
+\newtoks\@tokscy
+\newtoks\@toksattachments
+\newtoks\@toksenc
+\newtoks\@toksreference
+\newtoks\@toksdistribution
+\newtoks\@toksheaderone
+\newtoks\@toksheadertwo
+\newtoks\@toksbeforenewline
+\newtoks\@toksafternewline
+\newtoks\@toksbeforecomma
+\newtoks\@toksempty
+\newtoks\@toksblank
+\newtoks\@toksnewline
+\newtoks\@toksremaining
+\newtoks\@toksmultipleto
+\newtoks\@toksitem
+
+\newsavebox{\@boxtemp}
+\newsavebox{\@boxclasspage}
+\newsavebox{\@boxpagetwoheader}
+
+\newdimen\@dimentoppagetwo
+\newdimen\@dimenspacetosubject
+\newdimen\@dimenpagetwoheader
+\newdimen\@dimenfirstpageleftheader
+\newdimen\@dimenwdtt
+\newdimen\@dimenmemopaperhcorr
+\newdimen\@dimenmemopapervcorr
+\newdimen\@dimenspaceaftercolon
+\newdimen\descriptionmargin
+\newdimen\@dimenversemargin
+\newdimen\@dimentemp
+
+\newskip\@parskipsave
+
+\newif\if@comma
+\newif\if@newline
+\newif\if@notvoidtoks
+% \newif\if@toksequal
+\newif\if@toksnotequal
+\newif\if@beenhere
+\newif\if@somethingbefore
+\newif\if@continueloop
+\newif\if@cmfonts
+\newif\if@closing
+
+% Initialize defs and registers.
+
+\clubpenalty=10000
+\widowpenalty=10000
+\textheight 724pt
+\topmargin -72pt% Gets rid of default 1 inch margin at top of page.
+\topskip 0pt
+\headheight 0pt
+\headsep 0pt
+\footskip 43pt
+\textwidth 432pt
+\@countverticalposition 0
+\@countclasssep 24 % This is the vertical distance in POINTS from
+ % the border to SECRET or CONFIDENTIAL.
+ % @countclassep is not used on postscript
+ % headers. Postscript headers are able to
+ % mimic preprinted SECRET and CONFIDENTIAL paper.
+\@toksempty={}
+\@toksblank={ }
+\@toksnewline={\\}
+\@dimenpagetwoheader 180pt
+\@dimenfirstpageleftheader 220pt
+\@dimenmemopaperhcorr 0pt
+\@dimenmemopapervcorr 0pt
+\@dimenspaceaftercolon 12pt
+
+\def\@blank{ }%
+\def\@tt{tt}\def\@rm{rm}%
+\def\@texfonts{texfonts}%
+\def\@lafonts{lafonts}\def\@postscript{postscript}%
+\def\@memopaper{memopaper}%
+\def\@standard{standard}%
+\def\@short{short}\def\@long{long}\def\@underscore{underscore}%
+\def\@ibmpc{ibmpc}\def\@vaxvms{vaxvms}\def\@vaxunix{vaxunix}%
+\def\@sununix{sununix}\def\@apollo{apollo}%
+
+% ******************
+% *** USER INPUT ***
+% ******************
+
+%
+% \DEF \TO, \FROM, \THRU, \CY, \ATTACHMENTS, \REFERENCE, \ENCLOSURES,
+% \DISTRIBUTION
+%
+\def\to#1{\@toksinput{to}{#1}}%
+\def\from#1{\@toksinput{from}{#1}}%
+\def\cy#1{\@toksinput{cy}{#1}}%
+\def\thru#1{\@toksinput{thru}{#1}}%
+\def\attachments#1{\@toksinput{attachments}{#1}}%
+\def\reference#1{\@toksinput{reference}{#1}}%
+\def\distribution#1{\@toksinput{distribution}{#1}}%
+\def\enc#1{\@toksinput{enc}{#1}}%
+%
+% DEF \HEADERFONTS, \BODYFONTS, \SUBJECT, \SYMBOL, \SERIALNUMBER,
+% \MAILSTOP, \TELEPHONE, etc
+% Remove leading and trailing blanks from \typeface, \headerfonts, \bodyfonts.
+%
+\def\typeface#1{\def\@typeface{#1}%
+ \@unspaceleft\@typeface \@unspaceright\@typeface}%
+\def\headerfonts#1{\def\@headerfonts{#1}%
+ \@unspaceleft\@headerfonts \@unspaceright\@headerfonts}%
+\def\bodyfonts#1{\def\@bodyfonts{#1}%
+ \@unspaceleft\@bodyfonts \@unspaceright\@bodyfonts
+ \ifx\@bodyfonts\@postscript \@psdefclasslabel\fi}%
+\def\subject#1{%
+ \def\@subject{#1}%
+ \@upperunspaceleft\@subject}%
+\def\symbol#1{\def\@symbol{#1}\@unspaceright\@symbol}%
+\def\serialnumber#1{\def\@serialnumber{#1}\@unspaceleft\@serialnumber
+ \@unspaceright\@serialnumber}%
+\def\mailstop#1{\def\@mailstop{#1}\@unspaceright\@mailstop}%
+\def\telephone#1{\def\@telephone{#1}\@unspaceleft\@telephone}%
+\def\date#1{\def\@date{#1}\@unspaceright\@date}%
+\def\shortmemostyle{\def\@shortmemostyle{}}%
+\def\signer#1{%
+ \def\@signer{#1}%
+ \@unspaceright\@signer
+ \@upperunspaceleft\@signer}%
+\def\originator#1{%
+ \def\@originator{#1}%
+ \@unspaceright\@originator
+ \@upperunspaceleft\@originator}%
+\def\typist#1{%
+ \def\@typist{#1}%
+ \ifx\@typist\@empty
+ \else
+ \ifx\@typist\@blank
+ \def\@typist{}%
+ \else
+ \def\@typist{\lowercase{\ignorespaces#1}}%
+ \fi \fi
+}%
+\def\memopaperhcorr#1{\@ifnoinfo{#1}%
+ {\@dimenmemopaperhcorr=0pt}{\@dimenmemopaperhcorr=#1}}%
+\def\memopapervcorr#1{\@ifnoinfo{#1}%
+ {\@dimenmemopapervcorr=0pt}{\@dimenmemopapervcorr=#1}}%
+\def\signature#1{\def\@signature{#1}}%
+\def\approval#1{\def\@approval{#1}}%
+\def\cypagebreak{\def\@cypagebreak{}}%
+\def\attachmentspagebreak{\def\@attachmentspagebreak{}}%
+\def\encpagebreak{\def\@encpagebreak{}}%
+\def\distributionpagebreak{\def\@distributionpagebreak{}}%
+\def\encas{\def\@encas{}}%
+\def\attachmentas{\def\@attachmentas{}}%
+\def\attachmentsas{\def\@attachmentsas{}}%
+\def\encpagebreak{\def\@encpagebreak{}}%
+
+% \DEF \CLASS
+% Read in argument from \classlabel and create \@classlabel
+% If argument is not {s} or {c} or {u}, stop the job.
+
+\def\classlabel#1{%
+ \begingroup
+ \def\@unspacedclasslabel{#1}%
+ \@unspaceleft{\@unspacedclasslabel}%
+ \@unspaceright{\@unspacedclasslabel}%
+ \@ifundefined{@classlabel}%
+ {}{\gdef\@todieornottodie{\@errortwoclasses\@exit}}%
+ % \@secret, \@confidential, and \@unclassified need different \defs
+ % so that they dont compare equal
+ \def\@secret{s}\def\@confidential{c}\def\@unclassified{u}%
+ \ifx \@unspacedclasslabel \@secret% If #1 is s
+ \gdef\@classlabel{SECRET}%
+ \typeout{^^JThis memo will be marked SECRET.^^J}%
+ \else \ifx \@unspacedclasslabel \@confidential% If #1 is c
+ \gdef\@classlabel{CONFIDENTIAL}%
+ \typeout{^^JThis memo will be marked CONFIDENTIAL.^^J}%
+ \else \ifx \@unspacedclasslabel \@unclassified% If #1 is u
+ \gdef\@classlabel{UNCLASSIFIED}%
+ \typeout{^^JThis memo will be marked UNCLASSIFIED.^^J}%
+ \else \ifx \@unspacedclasslabel \@empty% If #1 is empty
+ \gdef\@classlabel{}%
+ \else
+ % #1 was not a c, s, or u so it's time to die
+ \gdef\@todieornottodie{%
+ \gdef\@classlabel{#1}%
+ \@errorclassargument
+ \@exit
+ }%
+ \fi \fi \fi \fi
+ \endgroup
+ \@todieornottodie
+}%
+% \DEF \@TOKSINPUT
+% Called by something like \@toksinput{from}{Steve Sydoriak}
+% \@toksinput collects input from \to, \from, \attachments, etc: any
+% input that can have mutiple lines of input of the form \xx{a\\b\\c,etc}
+% or \xx{a}\xx{b}, etc. \@toksinput leaves \@toksxx={a\\b\\c}, for example,
+% and \@countxx=3. Some user errors, such as \xx{\\a} or \xx{a\\}\xx{b}
+% are corrected.
+\def\@toksinput#1#2{%
+ \def\@toksname{\csname @toks#1\endcsname}%
+ \def\@countname{\csname @count#1\endcsname}%
+ \@toksnotequal\@toksname\@toksempty
+ \if@toksnotequal
+ % @toksname isn't empty, ie, @toksinput has been called before, so add a \\
+ \@addtotoks\@toksname\\
+ \fi
+ \@beenherefalse
+ \@toksremaining={#2}%
+ \loop
+ % Pull off @toksbeforenewline, the tokens before @toksremaining's first \\
+ \@tonewlinepull\@toksremaining
+ \@somethingbeforefalse
+ \@toksnotequal\@toksbeforenewline\@toksempty
+ \if@toksnotequal
+ \@toksnotequal\@toksbeforenewline\@toksblank
+ \if@toksnotequal
+ % There is something non-blank before the \\ in @toksbeforenewline.
+ \@somethingbeforetrue
+ \fi
+ \fi
+ \if@somethingbefore
+ \if@beenhere
+ % Been thru the loop before, so add a \\ to @toksname.
+ \@addtotoks\@toksname\\
+ \else
+ % This is the first time thru the loop.
+ \@beenheretrue
+ \fi
+ % When \@toksbeforenewline is not empty and not blank, add it to \@toksname.
+ \@addtokstotoks\@toksname\@toksbeforenewline
+ \@continuelooptrue
+ \advance\@countname by 1
+ \else
+ \@toksnotequal\@toksafternewline\@toksempty% Blank or empty before \\
+ \if@toksnotequal
+ \@toksnotequal\@toksafternewline\@toksnewline% Something after the \\
+ \if@toksnotequal
+ \@continuelooptrue% \@toksafter.ne.{}and.ne.{\\}
+ \else
+ \@continueloopfalse% \@toksafter={\\}
+ \fi
+ \else
+ \@continueloopfalse% \@toksafter={ }
+ \fi
+ \fi
+ \if@continueloop
+ % Set @toksremaining to @toksafternewline, and repeat the loop.
+ \@toksremaining=\@toksafternewline
+ \repeat
+}%
+
+% ***************************
+% *** OPENING AND CLOSING ***
+% ***************************
+
+% \DEF \OPENING
+% \opening prints the preprinted header info and/or the people*s names, etc.,
+% down to but not including the SUBJECT: line.
+\def\opening
+{%
+ \@checkinput
+ \@choosefonts
+ \@initializefontvariables
+ \@initializeheadervariables
+ \@makepagetwoheader
+ \@printfirstpageheader
+ \@beginmemo
+}%
+% \DEF \CLOSING
+% The closing prints all the info after the body of the memo
+%
+\def\closing
+{%
+ \normalsize
+ \@closingtrue
+ \@endmemo
+ \@clearclosing
+ \@printsignature
+ \@printoriginatorline
+ \@printapproval
+ \@printenc
+ \@printattachments
+ \@printdistribution
+ \@printcy
+}%
+
+% ************************
+% *** CHECK USER INPUT ***
+% ************************
+
+% DEF \@CHECKINPUT
+% Check for missing input items and set default input values.
+%
+\def\@checkinput{%
+ \ifnum\@countto=0\@errorundeclared{\to}%
+ \@errorshowexample{\to}{George Benford, EX-4, MS M775}\fi
+ \ifnum\@countfrom=0\@errorundeclared{\from}%
+ \@errorshowexample{\from}{Ann Turner, AB-DO, MS D405}\fi
+ \@ifemptyorundefined{@symbol}%
+ {\def\@symbol{}\@errorundeclared{\symbol}%
+ \@errorshowexample{\symbol}{C-2}}{}%
+ \@ifemptyorundefined{@subject}%
+ {\def\@subject{}\@errorundeclared{\subject}%
+ \@errorshowexample{\subject}{Building Schedule}}{}%
+ \@ifemptyorundefined{@originator}%
+ {\def\@originator{}\@errorundeclared{\originator}%
+ \@errorshowexample{\originator}{BJD}}{}%
+ \@ifundefined{@signer}%
+ {\def\@signer{}}{}%
+ \@ifundefined{@typist}%
+ {\def\@typist{}}{}%
+ \@ifemptyorundefined{@mailstop}%
+ {\def\@mailstop{}\@errorundeclared{\mailstop}%
+ \@errorshowexample{\mailstop}{B233}}{}%
+ \@ifemptyorundefined{@telephone}%
+ {\def\@telephone{}\@errorundeclared{\telephone}%
+ \@errorshowexample{\telephone}{7-1102}}{}%
+ \@ifemptyorundefined{@date}{\def\@date{\today}}{}%
+ \@ifundefined{@serialnumber}%
+ {\def\@serialnumber{}}{}%
+ \def\@symbolserialnumber{%
+ \@symbol
+ \ifx\@symbol\@empty
+ \else
+ \ifx\@serialnumber\@empty
+ \else
+ -\relax
+ \fi\fi
+ \@serialnumber\ }%
+ \@ifemptyorundefined{@typeface}{\def\@typeface{tt}}{}%
+ \@ifemptyorundefined{@headerfonts}{\def\@headerfonts{texfonts}}{}%
+ \@ifemptyorundefined{@bodyfonts}{\def\@bodyfonts{texfonts}}{}%
+}%
+
+% ********************
+% *** CHOOSE FONTS ***
+% ********************
+
+% \DEF \@CHOOSEFONTS
+% This \def chooses the fonts for the memo
+%
+\def\@choosefonts
+{%
+ \@amorcm
+ \@getpostscriptnames
+ \@chooseheaderfonts
+ \@choosebodyfonts
+}%
+% DEF \@AMORCM figures out whether am or cm fonts have been loaded.
+% If the amfonts (amr10,etc) were defined by lfonts.tex, \@cmfontsfalse.
+% If the cmfonts (cmr10,etc) were defined by lfonts.tex, \@cmfontstrue.
+%
+\def\@amorcm{{%
+ \edef\a{\csname cmr10\endcsname}%
+ \edef\b{\csname\fontname\tenrm\endcsname}%
+ \ifx\a\b \global\@cmfontstrue \else \global\@cmfontsfalse \fi
+}}%
+% \DEF \@GETPOSTSCRIPTNAMES
+% This \def defines PostScript font names.
+%
+\def\@getpostscriptnames{%
+ \def\@cmhelv{psmhlv }%
+ \def\@cmhelvb{psmhlvb }%
+ \def\@cmtimer{psmtimr }%
+ \def\@cmtimei{psmtimi }%
+ \def\@cmtimeb{psmtimb }%
+ \def\@cmcour{psmcou }%
+ \def\@cmcouro{psmcouo }%
+ \def\@cmcourb{psmcoub }%
+}%
+% \DEF \@CHOOSEHEADERFONTS
+% This \def chooses the header fonts
+%
+\def\@chooseheaderfonts
+{%
+ \ifx\@headerfonts\@memopaper% Memopaper, so don't need to load any fonts.
+ \else\ifx\@headerfonts\@lafonts
+ \font\@booksix=book6%
+ \font\@memotwentyeight=memo28%
+ \font\@latwentyeight=la28%
+ \font\@spectwelve=spec12%
+ \else\ifx\@headerfonts\@texfonts
+ \if@cmfonts
+ \font\@booksix=cmr6%
+ \font\@latwentyeight=cmbx10 scaled\magstep5%
+ \font\@memotwentyeight=cmbx10 scaled\magstep5%
+ \font\@spectwelve=cmss10 scaled\magstep1%
+ \else
+ \font\@booksix=amr6%
+ \font\@latwentyeight=ambx10 scaled\magstep5%
+ \font\@memotwentyeight=ambx10 scaled \magstep5%
+ \font\@spectwelve=amss10 scaled\magstep1%
+ \fi
+ \else\ifx\@headerfonts\@postscript
+ \font\@booksix=\@cmhelv at 6pt%
+ \font\@latwentyeight=\@cmhelvb at 29pt%
+ \font\@memotwentyeight=\@cmhelvb at 28pt%
+ \font\@spectwelve=\@cmhelv at 10.5pt%
+ \else% illegal header
+ \def\@todieornottodie{\@errorillegalheaderfont\@exit}%
+ \fi\fi\fi\fi
+ \@todieornottodie
+}%
+% \DEF \@CHOOSEBODYFONTS
+% This \def chooses the fonts for the body of the memo
+%
+\def\@choosebodyfonts
+{%
+ \ifx\@typeface\@tt
+ \else\ifx\@typeface\@rm
+ \else
+ \def\@todieornottodie{\@errorillegaltypeface\@exit}%
+ \fi\fi
+ \@todieornottodie
+ \ifx\@bodyfonts\@texfonts
+ \if@cmfonts
+ \font\@classfont=cmss10 scaled \magstep5%
+ \else
+ \font\@classfont=amssmc40
+ \fi
+ \else\ifx\@bodyfonts\@postscript
+ \ifcase \@ptsize\relax % 10pt option
+ \font\tenrm = \@cmtimer at 10pt % roman
+ \font\tentt = \@cmcour at 10pt % typewriter
+ \ifx\@typeface\@tt
+ \font\tenit = \@cmcouro at 10pt % tt italic
+ \font\tenbf = \@cmcourb at 10pt % tt bold
+ \else\ifx\@typeface\@rm
+ \font\tenit = \@cmtimei at 10pt % roman italic
+ \font\tenbf = \@cmtimeb at 10pt % roman bold
+ \fi \fi
+ \or % 11pt option
+ \font\elvrm = \@cmtimer at 11pt % roman
+ \font\elvtt = \@cmcour at 11pt % typewriter
+ \ifx\@typeface\@tt
+ \font\elvit = \@cmcouro at 11pt % tt italic
+ \font\elvbf = \@cmcourb at 11pt % tt bold
+ \else\ifx\@typeface\@rm
+ \font\elvit = \@cmtimei at 11pt % roman italic
+ \font\elvbf = \@cmtimeb at 11pt % roman bold
+ \fi \fi
+ \or % 12pt option
+ \font\twlrm = \@cmtimer at 12pt % roman
+ \font\twltt = \@cmcour at 12pt % typewriter
+ \ifx\@typeface\@tt
+ \font\twlit = \@cmcouro at 12pt % tt italic
+ \font\twlbf = \@cmcourb at 12pt % tt bold
+ \else\ifx\@typeface\@rm
+ \font\twlit = \@cmtimei at 12pt % roman italic
+ \font\twlbf = \@cmtimeb at 12pt % roman bold
+ \fi \fi
+ \fi
+ \else
+ \def\@todieornottodie{\@errorillegalbodyfont\@exit}%
+ \fi\fi
+ \@todieornottodie
+}%
+
+% ********************************************************
+% *** INITIALIZE FONT AND TYPEFACE DEPENDENT VARIABLES ***
+% ********************************************************
+
+% \DEF \@INITIALIZEFONTVARIABLES
+% This def will initialize fonts dependent variables such as parskip and
+% will put kerns in the variable that need it, such as the header words
+% and special symbols such as bullets
+%
+\def\@initializefontvariables
+{%
+ \raggedbottom
+ \@kernheaderwords
+ \@initializetypefacedependencies
+ \edef\normalsize
+ {%
+ \ifx \@currsize \normalsize
+ \ifx \@typeface \@tt
+ \tt
+ \else \ifx \@typeface \@rm
+ \rm
+ \fi \fi
+ \else
+ \@normalsize
+ \fi
+ }%
+% \pem is redefined so that \em will return to \tt or \rm depending
+% on @typeface
+ \def\pem{%
+ \ifdim \fontdimen \@ne \font >\z@
+ \csname\@typeface\endcsname
+ \else
+ \it
+ \fi
+ }%
+}%
+% \DEF \@KERNHEADERWORDS
+%
+% Define and kern @losalamos @lanl @memorandum @lanm for tex fonts.
+
+\def\@kernheaderwords{%
+ \ifx \@headerfonts \@texfonts
+ \def\@lanl{%
+ \raise 1pt\hbox{%
+ \def\@kern{\kern -.5pt}%
+ L\@kern o\@kern s\ \kern -2.5pt A\@kern l\@kern a\@kern m\@kern
+ o\@kern s\ \kern -2pt N\@kern a\@kern t\@kern i\@kern o\@kern
+ n\@kern a\@kern l\ \kern -3pt L\@kern a\@kern b\@kern o\@kern
+ r\@kern a\@kern t\@kern o\@kern r\@kern y%
+ }%
+ }%
+ \def\@lanm{%
+ \def\@kern{\kern -.5pt}%
+ L\@kern o\@kern s\kern -2.5pt\ A\@kern l\@kern a\@kern m\@kern
+ o\@kern s\kern -1pt ,\kern -4.5pt\ New\kern -3pt\ Mexico\kern -3pt
+ \ 87545%
+ }%
+ \def\@losalamos{%
+ Los Alamos%
+ }%
+ \def\@memorandum{%
+ memorandum%
+ }%
+ \else \ifx \@headerfonts \@lafonts
+%
+% Are the old or new Metafoundry fonts being used?
+% If the width of the L in spec12 is 5.5407, then the new fonts are in use.
+ \@spectwelve {\setbox0=\hbox{L}\global\@dimentemp=\wd0}%
+ \ifdim \@dimentemp=5.33684pt
+% Define and kern @losalamos @lanl @memorandum @lanm for new la fonts.
+ \def\@lanl{%
+ L\kern -.4pt o\kern .35pt s\ \kern -.8pt
+ A\kern .6pt l\kern .1pt a\kern .6pt m\kern .1pt o\kern .35pt s%
+ \def\@kern{\kern .22pt}%
+ \ N\@kern a\@kern t\@kern i\@kern o\@kern n\@kern a\kern .47pt
+ l\ \kern -.2pt
+ \def\@kern{\kern .03pt}%
+ L\@kern a\kern .43pt b\@kern o\@kern r\@kern a\@kern
+ t\kern -.22pt o\@kern r\@kern y}%
+ \def\@lanm{%
+ L\kern -.4pt o\kern .35pt s\ \kern -.8pt
+ \def\@kern{\kern .35pt}%
+ A\kern .6pt l\kern .1pt a\kern .6pt m\kern .1pt o\kern .35pt s,%
+ \ \kern -1.5pt
+ N\kern -.2pt ew\ \kern -.1pt
+ \def\@kern{\kern .15pt}%
+ M\kern -.05pt e\@kern x\@kern i\@kern c\@kern o\ \kern -.1pt
+ 8\kern -.65pt 7\kern -.9pt 54\kern -.7pt 5}%
+ \def\@losalamos{%
+ \kern -1.2pt L\kern 0pt o\kern -.75pt s\ \kern -6.7pt
+ A\kern .25pt l\kern 1.25pt a\kern -.85pt m\kern -.65pt
+ o\kern -.75pt s}%
+ \def\@memorandum{memorandum}%
+% Define and kern @losalamos @lanl @memorandum @lanm for old la fonts.
+ \else
+ \def\@lanl{%
+ \raise .3pt\hbox{%
+ L\kern -.6pt os\ \kern -1.3pt
+ \def\@kern{\kern .11pt}%
+ A\@kern l\@kern a\@kern m\@kern o\@kern s\ National\ %
+ \def\@kern{\kern -.2pt}%
+ L\@kern a\@kern b\@kern o\@kern
+ r\@kern a\@kern t\@kern o\@kern r\@kern y%
+ }%
+ }%
+ \def\@lanm{%
+ L\kern -.6pt os\ \kern -1.3pt
+ \def\@kern{\kern .11pt}%
+ A\@kern l\@kern a\@kern m\@kern o\@kern s%
+ \kern -.5pt,\ \kern -1.44pt New \kern -.5pt
+ \def\@kern{\kern -.2pt}%
+ M\@kern e\@kern x\@kern i\@kern c\@kern o\ \kern -.5pt 8\@kern
+ 7\@kern 5\@kern 4\@kern 5%
+ }%
+ \def\@losalamos{%
+ \def\@kern{\kern -.9pt}%
+ \kern -1.2pt L\kern -.65pt o\@kern s\kern 5pt
+ A\kern -.4pt l\kern .3pt a\@kern m\@kern o\@kern s%
+ }%
+ \def\@memorandum{%
+ \def\@kern{\kern -.25pt}%
+ m\@kern e\@kern m\@kern o\@kern r\kern -.5pt a\@kern n\@kern
+ d\@kern u\@kern m%
+ }%
+ \fi
+ \else \ifx \@headerfonts \@postscript
+% Define and kern @losalamos @lanl @memorandum @lanm for postscript fonts.
+ \def\@lanl{%
+ \raise .5pt\hbox{%
+ Los\kern -2pt\ Alamos\kern -1.5pt\ National\kern -2pt
+ \ Laboratory%
+ }%
+ }%
+ \def\@lanm{%
+ \def\@kern{\kern .57pt}%
+ Los\kern -2pt\ Alamos\kern -1pt,\kern -3.5pt\ N\@kern e\@kern
+ w\kern -2pt\ M\@kern e\@kern x\@kern i\@kern c\@kern
+ o\kern -2pt\ 87545%
+ }%
+%
+% @LOSALAMOS is a PostScript macro that prints Los Alamos in hollow letters.
+% ##1 and ##2 are \@dimenmemopaperhcorr and \@dimenmemopapervcorr
+%
+ \def\@PSlosalamos##1##2{%
+ \@psdeflosalamos
+ \special{ps:: ##1 ##2 @LOSALAMOS1 @LOSALAMOS2 @LOSALAMOS3}}%
+ \def\@memorandum{%
+ \def\@kern{\kern -2pt}%
+ m\@kern e\@kern m\@kern o\@kern r\kern 1pt \@kern
+ a\@kern n\@kern d\@kern u\@kern m%
+ }%
+ \fi \fi \fi
+}%
+% \DEF \@INITIALIZETYPEFACEDEPENDENCIES
+%
+% Variables that are dependent on typeface are initialized here.
+
+\def\@initializetypefacedependencies{%
+
+% For typewriter typeface.
+
+ \ifx \@typeface \@tt
+
+% Hyphenation.
+
+ \rightskip=0pt plus 3.6em% As this increases, there will be less hyphens.
+ \@rightskip=\rightskip
+ \hyphenchar\nintt=\defaulthyphenchar
+ \hyphenchar\tentt=\defaulthyphenchar
+ \hyphenchar\elvtt=\defaulthyphenchar
+ \hyphenchar\twltt=\defaulthyphenchar
+
+% Bullets.
+
+ \ifx \@bodyfonts \@texfonts
+ \def\@bullet{\leavevmode\raise-.22ex\hbox to 0pt{+\hss}o}%
+ \else \ifx \@bodyfonts \@postscript
+ \def\@bullet{\leavevmode\raise-.19ex\hbox to 0pt{+\hss}o}%
+ \fi \fi
+ \fi
+ \@initializelists
+}%
+% \DEF \@INITIALIZELISTS
+%
+% Initialize \list variables.
+% Most of the initialization for Roman typeface and some initialization
+% for typewriter typeface comes directly from letter.doc
+
+\def\@initializelists{%
+ \ifx \@typeface \@tt
+
+ \parskip=\baselineskip
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to be a no-op.
+
+ % \@dimenwdtt is the width of a character in the typewriter font.
+ % \@dimenwdtt=5.25pt for 1em=10pt
+ % \@dimenwdtt=6.3pt for 1em=12pt
+ {\setbox0=\hbox{\tt x}\global\@dimenwdtt=\wd0}%
+ \leftmargini 4\@dimenwdtt
+ \leftmarginii 4\@dimenwdtt
+ \leftmarginiii 4\@dimenwdtt
+ \leftmarginiv 4\@dimenwdtt
+ \leftmarginv 4\@dimenwdtt
+ \leftmarginvi 4\@dimenwdtt
+
+ \leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth-\labelsep
+ \labelsep=\@dimenwdtt
+ \parsep=\baselineskip
+
+ \topsep 0pt
+ \itemsep 0pt
+
+ \descriptionmargin=5\@dimenwdtt
+
+ \@dimentemp=\@dimenwdtt
+
+% For Roman typeface
+
+ \else\ifx \@typeface \@rm
+
+ \parskip=.7em
+
+% Bullets.
+
+ \def\@bullet{$\bullet$}%
+
+% See comments for *** LISTS *** above under \ifx \@typeface \@tt
+
+ \leftmargini 2.5em
+ \leftmarginii 2.2em % > \labelsep + width of '(m)'
+ \leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+ \leftmarginiv 1.7em % > \labelsep + width of 'M.'
+ \leftmarginv 1em
+ \leftmarginvi 1em
+
+ \leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth-\labelsep
+ \labelsep 5pt
+
+ \topsep .4em
+
+ \parsep .4em
+ \itemsep .2em
+
+ \descriptionmargin=3em
+
+ \@dimentemp=5pt
+
+ \fi \fi
+
+ \listparindent=0pt
+ \let\@listi\relax
+
+ \def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}%
+
+ \def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \ifx \@typeface \@rm
+ \topsep .2em
+ \itemsep \topsep
+ \fi}%
+
+ \def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}%
+
+ \def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}%
+
+ \def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}%
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\@dimenversemargin=3\@dimentemp
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -\@dimenversemargin \listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin \@dimenversemargin}\item[]}%
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+ \def\quotation{\list{}{%
+ \rightmargin\leftmargin}\item[]}%
+ \let\endquotation=\endlist
+
+% The following is from letter.doc's OTHER ENVIRONMENTS.
+ \tabcolsep \@dimentemp % Half the space between columns in a
+ % tabular environment.
+
+ \tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv.
+
+ \def\labelenumi{\arabic{enumi}.}%
+ \def\theenumi{\arabic{enumi}}%
+
+ \def\labelenumii{\alph{enumii}.}%
+ \def\theenumii{\alph{enumii}}%
+ \def\p@enumii{\theenumi}%
+
+ \def\labelenumiii{(\arabic{enumiii})}%
+ \def\theenumiii{\roman{enumiii}}%
+ \def\p@enumiii{\theenumi(\theenumii)}%
+
+ \def\labelenumiv{(\alph{enumiv})}%
+ \def\theenumiv{\Alph{enumiv}}%
+ \def\p@enumiv{\p@enumiii\theenumiii}%
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+ \def\labelitemi{\@bullet}% From OPM manual
+ \def\labelitemii{-}%
+ \def\labelitemiii{*}%
+ \def\labelitemiv{+}%
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+ \def\quote{\list{}{\rightmargin\leftmargin}\item[]}%
+ \let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+ \def\descriptionlabel##1{\hspace\labelsep \it ##1}%
+ \def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}%
+
+ \let\enddescription\endlist
+}%
+% \DEF \@INITIALIZEHEADERVARIABLES
+% Variables that define the positioning and style of headers are set here.
+%
+\def\@initializeheadervariables{%
+ \let\@texttop=\relax
+ % Defines the headers on page one.
+ \def\ps@firstpage{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\@makeclassheader\@printclasspage}%
+ \def\@oddfoot{}}%
+ % Defines the headers on page two and on.
+ \def\ps@pagetwo{\let\@mkboth\@gobbletwo
+ \def\@oddhead{%
+ \@printpagetwoheader\@printpagenum\@printclasspage}%
+ \def\@oddfoot{}}%
+ %
+ \thispagestyle{firstpage}%
+ \pagestyle{pagetwo}%
+ %
+ % Initialize first page variables.
+ \ifnum\@countthru=0
+ \@countleftcolon=77
+ \@countrightcolon=406
+ \else
+ \@countleftcolon=80
+ \@countrightcolon=404
+ \fi
+ \ifnum\@countthru=0 \@dimenspacetosubject=209pt
+ \else \@dimenspacetosubject=233pt
+ \fi
+ \@advcountbydimen\@countverticalposition\@dimenmemopapervcorr
+ \advance\@dimenspacetosubject by \@dimenmemopapervcorr
+ \@advcountbydimen\@countleftcolon\@dimenmemopaperhcorr
+ \@advcountbydimen\@countrightcolon\@dimenmemopaperhcorr
+ \@countleftheader=\@countleftcolon
+ \@countrightheader=\@countrightcolon
+ \@advcountbydimen\@countleftheader\@dimenspaceaftercolon
+ \@advcountbydimen\@countrightheader\@dimenspaceaftercolon
+ \oddsidemargin=\@countleftcolon pt
+ \advance \oddsidemargin by -1in
+ \advance \oddsidemargin by \@dimenspaceaftercolon
+ \evensidemargin=\oddsidemargin
+}%
+
+% *******************************************
+% *** CLASSIFICATION AND PAGE TWO HEADERS ***
+% *******************************************
+
+% \DEF \@MAKECLASSHEADER
+% Make the box that contains the classification header and footer.
+%
+\def\@makeclassheader
+{%
+ \@ifundefined{@classlabel}{\gdef\@classlabel{}}{}%
+ \ifx\@bodyfonts\@postscript
+ \@makePSclassheader
+ \else
+ \ifx \@classlabel \@empty
+ \global\setbox\@boxclasspage=\hbox{\hbox to 0pt{\hss\hss}}%
+ \else
+ \global\setbox\@boxclasspage=\hbox{\hbox to 0pt{\hss
+ \begin{picture}(0,0)(\@countleftheader,0)%
+ {%
+ \@classfont
+ \@counttemp=-\@countclasssep
+ \put (0,\@counttemp)%
+ {\makebox(0,0)[tl]{\hbox to 8.5in{\hfil\@classlabel\hfil}}}%
+ \advance\@counttemp by 795 % 795pt is 11in
+ \put (0,-\@counttemp)%
+ {\makebox(0,0)[bl]{\hbox to 8.5in{\hfil\@classlabel\hfil}}}%
+% \put (0,0){\line(1,-2){40}}% debug corner
+% \put (0,0){\line(1,-1){40}}% debug corner
+% \put (0,0){\line(1,-3){40}}% debug corner
+ }%
+ \end{picture}%
+ \hss}}%
+ \fi \fi
+}%
+% \DEF \@PSDEFLOSALAMOS
+% This is the PostScript definition for @LOSALAMOS, which prints
+% 'Los Alamos' when \headerfonts{postscript} is used.
+% The PostScript code is read in little chunks to avoid the problem
+% of preview crashing on the Suns with bigger chunks. Arbortext has
+% fixed the problem, but many older version of preview are still
+% being used and distributed.
+%
+\gdef\@psdeflosalamos{%
+ \special{ps::[local]%
+ /@LOSALAMOS1 {
+ % Print a hollow Los Alamos
+ %
+ /VirginState save def
+ /Helvetica-Bold findfont [ 27.7 0 0 29 0 0 ] makefont setfont
+ %
+ /YC exch neg def % y correction for label placement.
+ /XC exch def % x correction
+ } def
+ }%
+ \special{ps::[local]%
+ /@LOSALAMOS2 {
+ /MV {moveto} def
+ /SO {false charpath stroke} def
+ .5 setlinewidth
+ XC 87.8 add YC 721 add translate
+ %
+ } def
+ }%
+ \special{ps::[local]%
+ /@LOSALAMOS3 {
+ 0 0 MV (L) SO
+ 15.9 0 MV (o) SO
+ 31.8 0 MV (s) SO
+ 51.3 0 MV (A) SO
+ 70.2 0 MV (l) SO
+ 77 0 MV (a) SO
+ 91.4 0 MV (m) SO
+ 115 0 MV (o) SO
+ 130.9 0 MV (s) SO
+ %
+ VirginState restore
+ } def
+ }%
+}%
+% \DEF \@PSDEFCLASSLABEL
+% This is the PostScript definition for @CLASSOVERLAY, which prints
+% the classification label when \bodyfonts{postscript} is used.
+% The PostScript code is read in little chunks to avoid the problem
+% of preview crashing on the Suns with bigger chunks. Arbortext has
+% fixed the problem, but many older version of preview are still
+% being used and distributed.
+%
+\def\@psdefclasslabel{%
+ \specialbop{ps::[global]%
+ /@CLASSOVERLAY1 {
+ %
+ % Print the classification label at the top and bottom of the page.
+ %
+ /VirginState save def
+ dup (SECRET) eq
+ {/Dist 36 def /Space 3.5 def /X 272 def } % Dist is the distance
+ % between the edge of the paper and the classification label.
+ {/Dist 24 def /Space 3 def /X 242 def } % Space is the space added
+ % between letters in the label. X is the distance to the left
+ % side of the label.
+ ifelse
+ /Label exch def
+ } def
+ }%
+ \specialbop{ps::[global]%
+ /@CLASSOVERLAY2 {
+ /Print { gsave Space 0 Label ashow grestore } def
+ /DoubPrint { Print StrikeWidth 0 rmoveto Print } def
+ %
+ /Scale .415888 def % The letters are scaled by this amount.
+ /StrikeWidth 1.5 def % The letters are each printed twice
+ % with this distance between the letters. Double
+ % striking is used to make the vertical portions of
+ % the letters wider.
+ } def
+ }%
+ \specialbop{ps::[global]%
+ /@CLASSOVERLAY3 {
+ /Helvetica-Bold findfont [29 Scale mul 0 0 29 0 0] makefont setfont
+ %
+ X 770 Dist sub moveto
+ DoubPrint
+ %
+ X Dist moveto
+ DoubPrint
+ VirginState restore
+ } def
+ }%
+}%
+% \DEF \@MAKEPSCLASSHEADER
+% Define the PostScript macro that prints the classification header
+% and footer.
+%
+\def\@makePSclassheader{%
+%
+% \@PSclasslabel invokes the PostScript command @CLASSOVERLAY
+% @CLASSOVERLAY prints the classification label in PostScript
+% in such a way as to simulate the labels on preprinted SECRET
+% or CONFIDENTIAL paper.
+%
+ \gdef\@PSclasslabel##1{%
+ \special{ps:: ##1 @CLASSOVERLAY1 @CLASSOVERLAY2 @CLASSOVERLAY3}}%
+}%
+% \DEF \@MAKEPAGETWOHEADER
+% The header for pages 2-N are put in a box because the height of
+% \@boxpagetwoheader is used to calulate \@dimentoppagetwo
+% which is used to calculate \topskip and \headsep and \textheight
+%
+\def\@makepagetwoheader
+{%
+ \@pullpagetwoheader{\@toksto}%
+ \savebox{\@boxpagetwoheader}%
+ {%
+ \begin{minipage}[b]{\textwidth}%
+ % The 72pt puts the page number line at one inch down the page.
+ % The -\ht\strutbox compensates for the distance between the top
+ % of the minipage and the bottom of the top line.
+ \normalsize
+ \rule{0pt}{72pt}\rule{0pt}{-\ht\strutbox}% \rule keeps it in horiz mode
+ \parbox[t]{\@dimenpagetwoheader}%
+ {%
+ \the\@toksheaderone\copy\strutbox
+ \@notvoidtoks\@toksheadertwo
+ \if@notvoidtoks \newline \the\@toksheadertwo\copy\strutbox \fi
+ \ifx \@serialnumber \@empty
+ \else
+ \ifhmode \newline \fi \@symbolserialnumber\copy\strutbox
+ \fi
+ }%
+ \copy\strutbox\hfill
+ \makebox[\@dimenpagetwoheader][r]{\hfil\@date}%
+ \end{minipage}%
+ }%
+ % Now make the distance from the bottom of the page two
+ % header to the first line of the page equal to four lines.
+ \@dimentoppagetwo=\ht\@boxpagetwoheader
+ \advance\@dimentoppagetwo by 4\baselineskip
+ \advance\@dimentoppagetwo by -\dp\strutbox
+}%
+% \DEF \@PRINTCLASSPAGE
+% The \def prints the classification label at the top and bottom of a page.
+%
+\def\@printclasspage{%
+ \ifx\@bodyfonts\@postscript
+ \ifx \@classlabel \@empty
+ \else
+ \@PSclasslabel{(\@classlabel)}%
+ \fi
+ \vbox to 0in{}\hss
+ \else
+ \vbox to 0in{\hbox to 0pt{\usebox{\@boxclasspage}\hss}\vss}\hss
+ \fi
+}%
+% \DEF \@PRINTPAGETWOHEADER
+% The \def prints the header on page two and following pages.
+%
+\def\@printpagetwoheader{%
+ \vbox to 0in{\hbox to 0pt{\usebox{\@boxpagetwoheader}\hss}\vss}%
+}%
+% \DEF \@PRINTPAGENUM
+% The \def prints the page number on page two and following pages.
+%
+\def\@printpagenum{%
+ \vbox to 0pt{\hbox to 0pt{%
+ \begin{minipage}[b]{\textwidth}%
+ \normalsize
+ \rule{0pt}{72pt}\rule{0pt}{-\ht\strutbox}% \rule keeps it in horiz mode
+ \hfil{- \thepage\ -}\hfil
+ \end{minipage}%
+ \hss}\vss}%
+}%
+% \DEF \@PULLPAGETWOHEADER
+% This \def pulls the page two header from \to input.
+% Only the information before the first comma on each line is used.
+%
+\def\@pullpagetwoheader#1{\begingroup
+ \@gettoksheader{#1}%
+ \global\@toksheaderone=\expandafter{\the\@toksbeforecomma}%
+ \if@newline
+ \@toksremaining=\@toksafternewline
+ \@gettoksheader{\@toksremaining}%
+ \global\@toksheadertwo=\expandafter{\the\@toksbeforecomma}%
+ \fi
+\endgroup
+}%
+
+% \DEF \@GETTOKSHEADER
+% Get the header toks
+%
+\def\@gettoksheader#1{\@tonewlinepull{#1}%
+ \if@newline\@tocommapull{\@toksbeforenewline}%
+ \else \@tocommapull{#1}\fi}%
+
+
+% *******************************************************
+% *** BEGIN AND END MEMO, SHORT OR NORMAL MEMO STYLE. ***
+% *******************************************************
+
+% \DEF \@BEGINMEMO
+% If the short memo style was used, the variables are set for it.
+%
+\def\@beginmemo{%
+ \@ifundefined{@shortmemostyle}%
+ {%
+ \ifnum \@countreference = 0
+ \@dimentemp=2\baselineskip
+ \advance\@dimentemp by -\parskip
+ {\parskip=\@dimentemp \leavevmode \par \leavevmode}%
+ \fi
+ \par
+ }%
+ {% Shortmemostyle.
+ \ifx \@typeface \@tt
+ \topsep=\baselineskip
+ \baselineskip=2\baselineskip
+ \parindent=5\@dimenwdtt
+ \leftmargini=7\@dimenwdtt
+ \else \ifx \@typeface \@rm
+ \@parskipsave=\parskip
+ \advance\baselineskip by \parskip
+ \parindent=2.5em
+ \leftmargini=3.5em
+ \topsep=1.2em
+ \parsep=.6em
+ \itemsep=.6em
+ \fi \fi
+ \parskip=0pt
+ \leftmargin=\leftmargini
+ \par\leavevmode
+ \par
+ }%
+}%
+% \DEF \@CLEARCLOSING
+% If there are any unprinted floats, call \clearpage.
+% This has the unfortunate effect of putting the closing information
+% on a page by itself.
+%
+\def\@clearclosing{%
+ \edef\@tempa{\@toplist\@botlist\@deferlist}%
+ \ifx\@tempa\@empty\else\clearpage\fi
+}%
+% \DEF \@ENDMEMO
+% If the short memo style is wanted, the variables for it are un-set.
+%
+\def\@endmemo{%
+ \@ifundefined{@shortmemostyle}%
+ {}%
+ {%
+ \par
+ \ifnum \thepage > 1
+ \@errorshortmemo
+ \fi
+ \parindent=0em
+ \ifx \@typeface \@tt
+ \baselineskip=.5\baselineskip
+ \parskip=\baselineskip
+ \else \ifx \@typeface \@rm
+ \parskip=\@parskipsave
+ \advance\baselineskip by -\parskip
+ \fi \fi
+ \leavevmode \par
+ }%
+ \topsep=0pt
+ \itemsep=0pt
+ \parsep=0pt
+}%
+
+% *********************
+% *** PRINT OPENING ***
+% *********************
+
+% \DEF \@PRINTFIRSTPAGEHEADER
+% Prints TO: FROM: etc. headers, (but not the info from the colon on).
+%
+\def\@printfirstpageheader
+{%
+ \normalsize
+ \begin {picture}(0,0)(\@countleftheader,\@countverticalposition)%
+ \ifx\@headerfonts\@memopaper
+ \else
+ \@printmemopaper
+ \fi
+ \@printfirstpageheaderinfo
+ \end{picture}%
+ \normalsize
+ \@printsubject
+ \@printreference
+}%
+% \DEF \@PRINTMEMOPAPER
+% The preprinted part is printed.
+%
+\def\@printmemopaper
+{%
+% \put (0,0){\line(1,-2){40}}% debug corner
+% \put (0,0){\line(1,-1){40}}% debug corner
+% \put (0,0){\line(2,-1){40}}% debug corner
+ \ifx\@headerfonts\@postscript
+ \@dimentemp=\@dimenmemopaperhcorr
+ \ifnum\@countthru=0\else\advance\@dimentemp by 3pt\fi
+ \@counttemp=\@dimentemp
+ \divide\@counttemp by 65536
+ \@counttemptwo=\@dimenmemopapervcorr
+ \divide\@counttemptwo by 65536
+ \@PSlosalamos{\the\@counttemp }{\the\@counttemptwo }%
+ \else
+ \@latwentyeight
+ \put (\@countleftheader,-71){\@losalamos}%
+ \fi
+ \@spectwelve
+ \put (\@countleftheader,-88){\@lanl}%
+ \put (\@countleftheader,-98){\@lanm}%
+ \@memotwentyeight
+ \put (524,-98){\makebox(0,0)[br]{\@memorandum}}%
+ \put (0,-105){\line(1,0){614}}%
+%
+% Now print the TO, FROM, THRU, etc.
+% First print the part of the heading that is the same for thru or thruless
+%
+ \@booksix
+ \put (\@countleftcolon,-138){\makebox(0,0)[br]{TO:}}%
+ \put (\@countrightcolon,-138){\makebox(0,0)[br]{DATE:}}%
+ \put (\@countrightcolon,-162){\makebox(0,0)[br]{MAIL STOP/TELEPHONE:}}%
+%
+% If there is no \thru, print the thruless-style header info,
+% else print thru header.
+%
+ \ifnum\@countthru=0
+ {%
+% \put (0,0){\line(1,-3){60}}% debug corner
+% \put (0,0){\line(1,-1){40}}% debug corner
+% \put (0,0){\line(3,-1){60}}% debug corner
+ \put (\@countleftcolon,-162){\makebox(0,0)[br]{FROM:}}%
+ \put (\@countleftcolon,-186){\makebox(0,0)[br]{SYMBOL:}}%
+ \put (\@countleftcolon,-210){\makebox(0,0)[br]{SUBJECT:}}%
+ }%
+ \else
+ {%
+% \put (0,0){\line(1,-4){60}}% debug corner
+% \put (0,0){\line(1,-1){40}}% debug corner
+% \put (0,0){\line(4,-1){60}}% debug corner
+ \put (\@countleftcolon,-162){\makebox(0,0)[br]{THRU:}}%
+ \put (\@countleftcolon,-210){\makebox(0,0)[br]{FROM:}}%
+ \put (\@countleftcolon,-234){\makebox(0,0)[br]{SUBJECT:}}%
+ \put (\@countrightcolon,-210){\makebox(0,0)[br]{SYMBOL:}}%
+ }%
+ \fi
+}%
+% \DEF \@PRINTFIRSTPAGEHEADERINFO
+% Print the user input for the heading, first for what is the
+% same for thru or thruless
+%
+\def\@printfirstpageheaderinfo
+{%
+ \normalsize
+ \sbox{\@boxtemp}%
+ {\begin{minipage}[t]{\@dimenfirstpageleftheader}%
+ \raggedright \baselineskip=12pt \the\@toksto \end{minipage}}%
+ \put(\@countleftheader,-138){\usebox{\@boxtemp}}%
+ \ifdim\dp\@boxtemp > 18pt
+ \@erroroverfull{TO}{2}%
+ \fi
+ \put (\@countrightheader,-138){\@date{}}%
+ \put (\@countrightheader,-162){%
+ \@mailstop
+ \ifx\@mailstop\@empty
+ \else
+ \ifx\@telephone\@empty
+ \else
+ /\relax
+ \fi \fi
+ \@telephone}%
+%
+% If there is no \thru, print the thruless user input.
+%
+ \ifnum\@countthru=0
+ \sbox{\@boxtemp}%
+ {\begin{minipage}[t]{\@dimenfirstpageleftheader}%
+ \raggedright \baselineskip=12pt \the\@toksfrom
+ \end{minipage}}%
+ \put (\@countleftheader,-162){\usebox{\@boxtemp}}%
+ \ifdim\dp\@boxtemp > 18pt
+ \@erroroverfull{FROM}{2}%
+ \fi
+ \put (\@countleftheader,-186){\@symbolserialnumber}%
+%
+% Else print thru style input.
+%
+ \else
+ \sbox{\@boxtemp}%
+ {\begin{minipage}[t]{\@dimenfirstpageleftheader}%
+ \raggedright \baselineskip=12pt\the\@toksthru
+ \end{minipage}}%
+ \put (\@countleftheader,-162){\usebox{\@boxtemp}}%
+ \ifdim\dp\@boxtemp > 42pt
+ \@erroroverfull{THRU}{4}%
+ \fi
+ \sbox{\@boxtemp}%
+ {\begin{minipage}[t]{\@dimenfirstpageleftheader}%
+ \raggedright \baselineskip=12pt\the\@toksfrom
+ \end{minipage}}%
+ \put (\@countleftheader,-210){\usebox{\@boxtemp}}%
+ \ifdim\dp\@boxtemp > 18pt
+ \@erroroverfull{FROM}{2}%
+ \fi
+ \put (\@countrightheader,-210){\@symbolserialnumber}%
+ \fi
+}%
+% \DEF \@PRINTSUBJECT
+% Print the subject line
+%
+\def\@printsubject{%
+ \newline
+ \vrule height\the\@dimenspacetosubject width0pt
+ \@subject
+ \ifnum\@countreference=0
+ \else
+ \leavevmode \par
+ \fi
+}%
+% \DEF \@PRINTREFERENCE
+% This prints the reference.
+%
+\def\@printreference
+{%
+ \ifnum\@countreference=0
+ \else
+ \ifnum \@countreference=1
+ REFERENCE:\relax
+ \else
+ REFERENCES:\relax
+ \fi
+ \par\vspace{-\baselineskip}% Begin list on same line as REFERENCE:
+%
+% No number for one item lists
+%
+ \begin{list}{\ifnum \@countreference=1\else\arabic{@countlist}.\fi}%
+ {%
+ \topsep=0pt
+ \itemsep=0pt
+ \parsep=0pt
+ \ifnum \@countreference=1
+ \settowidth\leftmargin{REFERENCE\@: }%
+ \else
+ \settowidth\leftmargin{REFERENCES\@: }%
+ \fi
+ \@setnumdefaults\@countreference
+ }%
+ \@printnumberedlist{\@toksreference}%
+ \end{list}%
+ \fi
+}%
+
+% **********************
+% *** PRINT CLOSING. ***
+% **********************
+
+% \DEF \@PRINTSIGNATURE
+% Leave space for the signature and print the signature line.
+%
+\def\@printsignature
+{%
+ \par
+ \@ifemptyorundefined{@signature}{}%
+ {%
+ {\parskip=0pt\par\ }% The \ makes the vspace* be in paragraph mode
+ \vspace*{2\baselineskip}\newline
+ \@signature
+ }%
+}%
+% \DEF \@PRINTORIGINATORLINE
+% Print the signer, originator, and typist.
+%
+\def\@printoriginatorline
+{%
+ \@ifemptyorundefined{@signature}{\nopagebreak}{}%
+ \par
+ \ifx\@signer\@empty
+ \else
+ \@signer
+ \ifx\@originator\@empty
+ \ifx\@typist\@empty \else :\relax \fi
+ \else
+ -\relax
+ \fi
+ \fi
+ \ifx\@originator\@empty
+ \else
+ \@originator
+ \ifx\@typist\@empty \else :\relax \fi
+ \fi
+ \ifx\@typist\@empty
+ \else
+ \@typist
+ \fi
+}%
+% \DEF \@PRINTAPPROVAL
+% Print the approval line.
+%
+\def\@printapproval
+{%
+ \@ifemptyorundefined{@approval}{}%
+ {%
+ {%
+ \samepage
+ \settowidth\@lengthlabel{APPROVED BY:}% Length from left side of
+ \addtolength\@lengthlabel\labelsep% APPROVED to left end of rule.
+%
+ \@lengthrule=\textwidth
+ \addtolength\@lengthrule{-\@lengthlabel}% The rule stops 30pt inside
+ \addtolength\@lengthrule{-30pt}% the right margin.
+%
+ \settowidth\@lengthdate{date}% Add space to the left
+ \addtolength\@lengthdate{60pt}% and right of "date".
+%
+ \@lengthname=\@lengthrule% Length of the parbox which
+ \addtolength\@lengthname{-\@lengthdate}% holds approvers name.
+%
+ {\parskip=0pt\par\ }% The \ makes the vspace* be in paragraph mode
+ \vspace*{2\baselineskip}\newline
+ \relax APPROVED BY:\hskip\labelsep
+ \rule{\@lengthrule}{0.4pt}%
+ \copy\strutbox
+ {\offinterlineskip\newline}%
+ \hspace*{\@lengthlabel}\parbox[t]{\@lengthname}%
+ {\@approval\ \copy\strutbox}%
+ \makebox[\@lengthdate][c]{date}%
+ % debug: In \tt extra 1pt between here and the
+ % next line when @approval is multiple line
+ \par
+ }%
+ }%
+}%
+% \DEF \@PRINTENCLOSURES
+% Now print the enclosures
+%
+\def\@printenc
+{%
+ \@ifundefined{@encas}{}{%
+ \ifnum\@countenc=0
+ \par Enc.\ a/s%
+ \else \@erroras\enc\encas{Enc. a/s}%
+ \fi}%
+ \ifnum\@countenc=0
+ \else
+ \par
+ \@ifundefined{@encpagebreak}{}{\pagebreak}%
+ \ifnum\@countenc=1
+ Enclosure:\relax
+ \else
+ Enc.\relax
+ \fi
+ \nopagebreak
+ \par\vspace{-\baselineskip}%
+%
+% No number for one item lists
+%
+ \@countmemolist=\@countenc
+ \begin{list}{\ifnum \@countenc=1\else\arabic{@countlist}.\fi}%
+ {%
+ \ifnum\@countenc=1
+ \settowidth\leftmargin{Enclosure: }%
+ \else
+ \settowidth\leftmargin{Enc.\ }%
+ \fi
+ \@setnumdefaults\@countenc
+ }%
+ \@printnumberedlist{\@toksenc}%
+ \end{list}%
+ \fi
+}%
+% \DEF \@PRINTATTACHMENTS
+% Now print the attachments
+%
+\def\@printattachments
+{%
+ \@ifundefined{@attachmentas}%
+ % No \attachmentas
+ {\@ifundefined{@attachmentsas}{}%
+ % \@attachmentsas and not \@attachmentas
+ {\ifnum\@countattachments=0
+ \par Attachments a/s%
+ \else \@erroras\attachments\attachmentsas{Attachments a/s}\fi}}%
+ % Yes, \attachmentas
+ {\@ifundefined{@attachmentsas}%
+ % \@attachmentas and not \@attachmentsas
+ {\ifnum\@countattachments=0
+ \par Attachment a/s%
+ \else\@erroras\attachments\attachmentas{Attachment a/s}\fi}%
+ % \@attachmentas and \@attachmentsas
+ {\par Attachments a/s%
+ \@erroras\attachmentas\attachmentsas{Attachment a/s}}}%
+ \ifnum\@countattachments=0
+ \else
+ \par
+ \@ifundefined{@attachmentspagebreak}{}{\pagebreak}%
+ \ifnum\@countattachments=1
+ Attachment:\relax
+ \else
+ Attachments:\relax
+ \fi
+%
+% No number for one item lists
+%
+ \@countmemolist=\@countattachments
+ \begin{list}{\ifnum \@countattachments=1\else\arabic{@countlist}.\fi}%
+ {%
+ \leftmargin=0pt
+ \@setnumdefaults\@countattachments
+ }%
+ \@printnumberedlist{\@toksattachments}%
+ \end{list}%
+ \fi
+}%
+% \DEF \@PRINTDISTRIBUTION
+% Now the distribution list
+%
+\def\@printdistribution
+{%
+ \ifnum\@countdistribution=0
+ \else
+ \par
+ \@ifundefined{@distributionpagebreak}{}{\pagebreak}%
+ {\offinterlineskip Distribution:\copy\strutbox}%
+ \@countmemolist=\@countdistribution
+ \begin{list}{}%
+ {%
+ \parskip=0pt
+ \labelwidth=0pt
+ \labelsep=0pt
+ \leftmargin=0pt
+ }%
+ \item\the\@toksdistribution
+ \end{list}%
+ \fi
+}%
+% \DEF \@PRINTCY
+% Print the Cy list if \@countcy > 0
+%
+\def\@printcy
+{%
+ \ifnum\@countcy=0
+ \else
+ \pagebreak[0]%
+ \par
+ \@ifundefined{@cypagebreak}{}{\pagebreak}%
+ \begin{list}{Cy:\hfill}%
+ {%
+ \settowidth\labelwidth{Cy: }%
+ \leftmargin=\labelwidth
+ \labelsep=0pt
+ }%
+ \item\the\@tokscy
+ \end{list}%
+ \fi
+}%
+
+% **********************************
+% *** NUMBERED LISTS FOR CLOSING ***
+% **********************************
+
+% \DEF \@SETNUMDEFAULTS
+% Set defaults for numbered lists. #1 is the number of
+% items in the list.
+%
+\def\@setnumdefaults#1{%
+ \ifnum #1=1
+ \labelwidth=0pt% No number for one item list
+ \labelsep=0pt
+ \else
+ \usecounter{@countlist}%
+ \ifnum #1<10
+ \settowidth\labelwidth{8.}% Between 2 and 9 items.
+ \else
+ \settowidth\labelwidth{88.}% 10 or more.
+ \fi\fi
+ \addtolength\leftmargin\labelwidth
+ \addtolength\leftmargin\labelsep
+ \parskip=0pt
+}%
+% \DEF \@PRINTNUMBEREDLIST
+% This prints a numbered list as is used to print reference,
+% attachments, and enclosures.
+%
+\def\@printnumberedlist#1%
+{%
+ \@toksremaining=#1%
+ \loop
+ \@tonewlinepull{\@toksremaining}%
+ \@toksnotequal\@toksbeforenewline\@toksempty
+ \if@toksnotequal
+ \@toksitem=\@toksbeforenewline
+ \@toksremaining=\@toksafternewline
+ \ifx #1\@toksreference% Make reference list uppercase
+ \item\uppercase\expandafter{\the\@toksitem}%
+ \else
+ \item\the\@toksitem
+ \fi
+ \repeat
+}%
+
+% ***************
+% *** PARSING ***
+% ***************
+
+% \DEF \@TONEWLINEPULL \DEF \@TONEWLINEPULLSUBONE, etc.
+% Put the tokens in #1 before the first \\ into \@toksbeforenewline.
+% Put the tokens in #1 after the firrst \\ into \@toksafternewline.
+% \@newlinetrue if there was a \\ in the token #1.
+%
+\def\@tonewlinepull#1{\begingroup\let\\=\relax
+ \expandafter\@tonewlinepullone\the#1\\\@empty
+ \if@newline\expandafter\@tonewlinepullthree\the#1\@empty
+ \else\fi\endgroup}%
+\def\@tonewlinepullone#1\\{\global\@toksbeforenewline={#1}%
+ \futurelet\next\@tonewlinepulltwo}%
+\def\@tonewlinepulltwo#1\@empty{\global\@toksafternewline={#1}%
+ \ifx\@empty\next\global\@newlinefalse
+ \else\global\@newlinetrue\fi}%
+\def\@tonewlinepullthree#1\\{\global\@toksbeforenewline={#1}%
+ \futurelet\next\@tonewlinepullfour}%
+\def\@tonewlinepullfour#1\@empty{\global\@toksafternewline={#1}%
+ \ifx\@empty\next\global\@newlinefalse
+ \else\global\@newlinetrue\fi}%
+
+% \DEF \@TOCOMMAPULL \DEF \@TOCOMMAPULLSUB, etc.
+% Put the tokens in #1 before the first "," into \@toksbeforecomma.
+% \@commatrue if there was a "," in the token #1.
+%
+\def\@tocommapull#1{\expandafter\@tocommapullone\the#1,\@empty}%
+\def\@tocommapullone#1,{\@toksbeforecomma={#1}%
+ \futurelet\next\@tocommapulltwo}%
+\def\@tocommapulltwo#1\@empty{\ifx\@empty\next \@commafalse
+ \else \@commatrue \fi}%
+
+% \DEF \@UNSPACELEFT
+% Gets rid of a space at the beginning of a macro definition.
+% \def\word{ xx }
+% \@unspaceleft\word
+% results in \def\word{xx }
+%
+\def\@unspaceleft#1{{%
+ \def\@macroname{#1}%
+ \ifx #1\@empty
+ \else
+ \ifx #1\@blank
+ \global\expandafter\def\@macroname{}%
+ \else
+ % If #1 is not blank or empty, call \@unspaceleftone
+ \expandafter\@unspaceleftone#1\relax\relax\@empty
+ \fi \fi
+}}%
+ % The use of #1 as a parameter in @unspaceleftone ignores a leading blank.
+\def\@unspaceleftone#1#2\relax{%
+ \global\expandafter\def\@macroname{#1#2}%
+ \@unspacelefttwo}%
+\def\@unspacelefttwo#1\@empty{}%
+
+% \DEF \@UPPERUNSPACELEFT
+% Gets rid of a space at the beginning of a macro definition and returns
+% uppercase.
+% \def\word{ xx }
+% \@upperunspaceleft\word
+% results in \def\word{\uppercase{xx }}
+%
+\def\@upperunspaceleft#1{{%
+ \def\@macroname{#1}%
+ \ifx #1\@empty
+ \else
+ \ifx #1\@blank
+ \global\expandafter\def\@macroname{}%
+ \else
+ % If #1 is not blank or empty, call \@upperunspaceleftone
+ \expandafter\@upperunspaceleftone#1\relax\relax\@empty
+ \fi \fi
+}}%
+ % #1 as a parameter in @upperunspaceleftone ignores a leading blank.
+\def\@upperunspaceleftone#1#2\relax{%
+ \global\expandafter\def\@macroname{\uppercase{#1#2}}%
+ \@unspacelefttwo}%
+%\def\@unspacelefttwo#1\@empty{}%
+
+% \DEF \@UNSPACERIGHT
+% Gets rid of a space at the end of a macro definition.
+% \def\word{ xx }
+% \@unspaceright\word
+% results in \def\word{ xx}
+%
+\def\@unspaceright#1{{%
+ \def\@macroname{#1}%
+ % Save the original definition of #1.
+ \edef\@temp{#1}%
+ % \@unspacerightone will find the first \relax if #1 ends in a blank.
+ % Otherwise it will find the second \relax and set \next to \@empty.
+ \expandafter\@unspacerightone#1\relax{} \relax\@empty
+}}%
+\def\@unspacerightone#1 \relax{%
+ \global\expandafter\edef\@macroname{#1}%
+ \futurelet\next\@unspacerighttwo}%
+\def\@unspacerighttwo#1\@empty{%
+ \ifx \@empty\next
+ \global\expandafter\edef\@macroname{\@temp}%
+ \fi
+}%
+
+% **************************************************************
+% *** UTILITIES FOR MASSAGING TOKEN AND DIMENSION VARIABLES. ***
+% **************************************************************
+% \DEF \@ADDTOTOKS
+% addtotoks takes the current token variable #1 and appends the
+% tokens in #2. #1 must be a token variable defined by \newtoks
+% For example, if \toks={abc}
+% \@addtotoks{\toks}{DEF\xx} will result in \toks={abcDEF\xx}
+%
+\def\@addtotoks#1#2{#1=\expandafter{\the#1#2}}%
+%
+% \DEF \@ADDTOKSTOTOKS
+% addtokstotoks takes the current token variable #1 and appends the
+% token variable #2 to it, putting the result into token variable #1.
+% For example, if \toksone={abc} and \tokstwo={xyz},
+% \@addtokstotoks\toksone\tokstwo will result in \toksone={abcxyz}
+\def\@addtokstotoks#1#2{{\edef\deftemp{\the#1\the#2}%
+ \global#1=\expandafter{\deftemp}}}%
+%
+% \DEF \@IFEMPTYORUNDEFINED
+% Like LaTeX's \@ifundefined, except that #2 will also be
+% executed if \#1 is empty or blank.
+%
+\long\def\@ifemptyorundefined#1#2#3{%
+ \expandafter\ifx\csname#1\endcsname\relax#2
+ \else\expandafter\ifx\csname#1\endcsname\@empty#2
+ \else\expandafter\ifx\csname#1\endcsname\@blank#2
+ \else#3\fi\fi\fi}
+%
+% \DEF \@IFNOINFO
+% \@ifnoinfo{#1}{\actionone}{\actiontwo}
+% performs \actionone if #1 is empty or blank,
+% otherwise performs \actiontwo
+\def\@ifnoinfo#1#2#3{\def\@deftemp{#1}%
+ \ifx\@deftemp\@empty#2\else\ifx\@deftemp\@blank#2\else#3\fi\fi}
+%
+% \DEF \@TOKSNOTEQUAL \DEF \@TOKSEQUAL
+% \@toksnotequal compares two token variables and returns \@toksnotequaltrue
+% if they are the different. Eg, \toks1={a\b c}\toks2={a\b}
+% \@toksnotequal{\toks1}{\toks2} returns \@toksnotequaltrue
+% \@toksequal works in a similar manner.
+%
+\def\@toksnotequal#1#2{\begingroup \edef\one{\the#1} \edef\two{\the#2}%
+ \ifx\one\two\global\@toksnotequalfalse\else\global\@toksnotequaltrue\fi
+ \endgroup}%
+% \def\@toksequal#1#2{\begingroup \edef\one{\the#1} \edef\two{\the#2}%
+% \ifx\one\two\global\@toksequaltrue\else\global\@toksequalfalse\fi\endgroup}%
+%
+% \DEF \@ADVCOUNTBYDIMEN
+% A count variable is advanced by a dimension variable expressed in points.
+% For example, if \countx=10 and \dimenx=2pt, then
+% \@advcountbydimen\countx\dimenx
+% leaves \countx=12 and \dimenx=2pt
+%
+\def\@advcountbydimen#1#2{\@counttemp=#2%
+ \divide\@counttemp by 65536 \advance#1by \@counttemp}%
+%
+% \DEF \@NOTVOIDTOKS
+% \@notvoidtokstrue if there is at least one token in the variable #1.
+%
+\def\@notvoidtoks#1{\@addtotoks{#1}{\@empty}%
+ \expandafter\@notvoidtoksone\the#1}%
+\def\@notvoidtoksone{\futurelet\next\@notvoidtokstwo}%
+\def\@notvoidtokstwo#1\@empty{\ifx \@empty\next \@notvoidtoksfalse
+ \else \@notvoidtokstrue \fi}%
+
+% **********************
+% *** ERROR MESSAGES ***
+% **********************
+
+\def\@eightspaces{\space\space\space\space\space\space\space\space}%
+\def\@errorundeclared#1{\typeout{^^JWarning: you have not called \protect #1
+ before calling \protect\opening.^^J}%
+}%
+\def\@errorserialnosymbol{\typeout{^^JWarning: you have called
+ \protect\serialnumber, but you have not called \protect\symbol.^^J}%
+ \@errorshowexample{\symbol}{C-2}}%
+\def\@erroroverfull#1#2{\typeout{^^JWarning: You have printed more than #2
+ lines in the #1 portion ^^J
+ \@eightspaces of the memo header.^^J}}%
+\def\@errorshowexample#1#2{\typeout{\@eightspaces\space For example, use^^J^^J
+ \@eightspaces\protect #1{#2}^^J}}%
+\def\@errorclassargument{%
+ \typeout{^^JFatal error: \protect\classlabel{\@classlabel}
+ calls for an invalid classification label.^^J}%
+ \@errorclassmessage
+}%
+\def\@errortwoclasses{%
+ \typeout{^^JFatal error: you have called \protect\classlabel \space
+ more than once.^^J^^J
+ \space You are only allowed to declare one classification label
+ per memo.^^J}%
+ \@errorclassmessage
+}%
+\def\@errorclassmessage{%
+ \typeout{%
+ \space\space To print CONFIDENTIAL on the top and bottom
+ of your memo,^^J
+ \space use \protect\classlabel{c}^^J^^J
+ \space To print SECRET on the top and bottom
+ of your memo,^^J
+ \space use \protect\classlabel{s}^^J^^J
+ \space To print UNCLASSIFIED on the top and bottom
+ of your memo,^^J
+ \space use \protect\classlabel{u}^^J^^J
+ \space If you do not want a classification label on your memo,^^J
+ \space use \protect\classlabel{}^^J
+ \space or do not use the \protect\classlabel\space command.^^J^^J
+ \space Change your file, and rerun LaTeX.^^J}%
+}%
+\def\@errorillegaltypeface{%
+ \typeout{^^JFatal error: \protect\typeface{\@typeface} calls for an invalid
+ typeface.^^J^^J
+ \space Use \protect\typeface{tt} or \protect\typeface{rm}^^J^^J
+ \space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegalheaderfont{\def\@fontcommand{\protect\headerfonts}%
+ \def\@fontarg{\@headerfonts}%
+ \typeout{^^JFatal error: \@fontcommand{\@fontarg} calls for
+ an invalid font.^^J^^J
+ \space Use \@fontcommand{lafonts}, \@fontcommand{texfonts},^^J
+ \space or \@fontcommand{postscript}\space
+ depending on what fonts^^J \space are available on your machine.^^J^^J
+ \space Using \@fontcommand{} will give you the default fonts.^^J^^J
+ \space Use \@fontcommand{memopaper} if you wish to print your memo^^J
+ \space on pre-printed memo paper.^^J^^J
+ \space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegalbodyfont{\def\@fontcommand{\protect\bodyfonts}%
+ \def\@fontarg{\@bodyfonts}%
+ \typeout{^^JFatal error: \@fontcommand{\@fontarg} calls
+ for an invalid font.^^J^^J
+ \space Use \@fontcommand{texfonts} or \@fontcommand{postscript}^^J
+ \space depending on what fonts are available on your machine.^^J^^J
+ \space Using \@fontcommand{} will give you the default fonts.^^J^^J
+ \space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorshortmemo{%
+ \typeout{^^JWarning: Use of the \protect\shortmemostyle\space macro
+ is intended^^J
+ \@eightspaces for use with memos of ten lines or less.^^J^^J}%
+}%
+\def\@erroras#1#2#3{%
+ \typeout{^^JWarning: You have used both \protect#1\space and
+ \protect#2.^^J
+ \@eightspaces Use one or the other but not both.^^J
+ \@eightspaces "#3" will not be printed on this memo.^^J^^J}%
+}%
+
+% *********************
+% *** DEATH UTILITY ***
+% *********************
+
+% \DEF \@TODIEORNOTTODIE
+% The \@todieornottodie macro is initialized here.
+% If a fatal error occurs, it will be equipped with a suitable
+% error message and an \@exit call. \@todieornottodie will then be called
+% once the \fi and \endgroups have all been passed. This prevents the
+% printing of confusing error messages.
+%
+\def\@todieornottodie{\relax}%
+
+% \DEF \@EXIT
+% @exit terminates the job prematurely.
+\def\@exit{\@fileswfalse\end{document}}%
+
+% ******************************************************************
+% *** REDEFINE @ITEM TO MAKE NICE PAGEBREAKS WITH \CLOSING LISTS ***
+% ******************************************************************
+
+% \DEF \@ITEM
+%
+% This is mostly copied from latex.tex.
+% The penalties have been altered so that lists in the \closing of
+% a memo will not leave clubs and widows.
+% The first 3 lines and the last 2 lines are kept on the same page.
+%
+\def\@item[#1]{%
+ \if@noparitem \@donoparitem
+ \else \if@inlabel \indent \par \fi
+ \ifhmode \unskip\unskip \par \fi
+ \if@newlist \if@nobreak \@nbitem \else
+ {%
+ \if@closing
+ \@beginparpenalty=10000
+ \fi
+ \addpenalty\@beginparpenalty
+ }%
+ \addvspace\@topsep \addvspace{-\parskip}\fi
+ \else
+ {%
+ \if@closing
+ \ifnum \c@@countlist = 1
+ \@itempenalty=10000
+ \fi
+ \advance \@countmemolist by -1
+ \ifnum \c@@countlist = \@countmemolist
+ \@itempenalty=10000
+ \fi
+ \fi
+ \addpenalty\@itempenalty
+ }%
+ \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+ \fi
+ \everypar{\global\@minipagefalse\global\@newlistfalse
+ \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+ \penalty\z@ \fi
+ \everypar{}}\global\@nobreakfalse
+ \if@noitemarg\@noitemargfalse \if@nmbrlist\refstepcounter{\@listctr}\fi\fi
+ \setbox\@tempboxa\hbox{\makelabel{#1}}%
+ \global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+ \hskip -\labelwidth \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else \hbox to\labelwidth {\makelabel{#1}}\fi
+ \hskip \labelsep}\ignorespaces
+}%
+
+% ************************************************************************
+% *** REDEFINE LATEX.TEX'S @OUTPUTPAGE TO ALLOW ARBORTEXT'S SPECIALBOP ***
+% ************************************************************************
+
+% \DEF \@OUTPUTPAGE
+% This redefinition of LaTeX's @outputpage is necessary to allow
+% \special commands to be executed before anything else on the page.
+% For example, the PostScript macros need to be defined before
+% any of the page making begins.
+%
+% These alterations were supplied by ArborText.
+%
+% Changes were also made to change the values of topskip, headsep,
+% and textheight after outputting page 1.
+%
+% debug Changes needed here for latex.tex <4 Aug 1988>, See laletter.sty
+\def\@outputpage{\begingroup\catcode`\ =10
+% The following line was added to bring this def up to date with
+% latex.tex, <4 Aug 1988>
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+% The following line was added to bring this def up to date with
+% latex.tex, <4 Aug 1988>
+ \let\par\@@par %% 15 Sep 87
+ \@specialbopemit% MEMO CHANGES
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}}%
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+ \endgroup
+ \ifnum\c@page=1% MEMO CHANGES
+ % Reset \topskip for page two.
+ % The topskip keeps the baseline of the first line of text in
+ % the right place. If the top vbox on the page is taller than
+ % \ht\strutbox, it will go no higher than the top of the strutbox.
+ \global\topskip=\ht\strutbox% MEMO CHANGES
+ \global\headsep=\@dimentoppagetwo% MEMO CHANGES
+ \global\advance\headsep by -\topskip% MEMO CHANGES
+ \global\advance\textheight by -\headsep% MEMO CHANGES
+ \fi% MEMO CHANGES
+ \stepcounter{page}%
+\let\firstmark\botmark}%
+\def\@specialbopempty{}%
+\let\@specialboptext=\@specialbopempty
+%
+% \DEF \SPECIALBOP
+% Stands for \SPECIAL-Beginning-Of-Page, supplied by Arbortext.
+%
+\def\specialbop#1{%
+ \xdef\@specialboptext{%
+ \@specialboptext
+ \special{#1}%
+ }%
+}%
+\def\@specialbopemit{% (used by the \output routine)
+ \ifx\@specialboptext\@specialbopempty
+ \else
+ \@specialboptext
+ \global\let\@specialboptext=\@specialbopempty
+ \fi
+}%
+% ***********************
+% *** END OF MEMO.DOC ***
+% ***********************
+
+% These are the commands starting with '\' that appear in memo.sty
+% that are not defined in LaTeX or TeX.
+%
+% \@PSclasslabel
+% \@PSlosalamos
+% \@addtokstotoks
+% \@addtotoks
+% \@advcountbydimen
+% \@amorcm
+% \@apollo
+% \@approval
+% \@attachmentas
+% \@attachmentsas
+% \@attachmentspagebreak
+% \@beginmemo
+% \@blank
+% \@bodyfonts
+% \@booksix
+% \@boxclasspage
+% \@boxpagetwoheader
+% \@boxtemp
+% \@bullet
+% \@checkinput
+% \@choosebodyfonts
+% \@choosefonts
+% \@chooseheaderfonts
+% \@classfont
+% \@classlabel
+% \@clearclosing
+% \@cmcour
+% \@cmcourb
+% \@cmcouro
+% \@cmhelv
+% \@cmhelvb
+% \@cmtimeb
+% \@cmtimei
+% \@cmtimer
+% \@confidential
+% \@countattachments
+% \@countclasssep
+% \@countcy
+% \@countdistribution
+% \@countenc
+% \@countfrom
+% \@countleftcolon
+% \@countleftheader
+% \@countmemolist
+% \@countname
+% \@countreference
+% \@countrightcolon
+% \@countrightheader
+% \@counttemp
+% \@counttemptwo
+% \@countthru
+% \@countto
+% \@countverticalposition
+% \@cypagebreak
+% \@deftemp
+% \@dimenfirstpageleftheader
+% \@dimenmemopaperhcorr
+% \@dimenmemopapervcorr
+% \@dimenpagetwoheader
+% \@dimenspaceaftercolon
+% \@dimenspacetosubject
+% \@dimentemp
+% \@dimentoppagetwo
+% \@dimenversemargin
+% \@dimenwdtt
+% \@distributionpagebreak
+% \@eightspaces
+% \@encas
+% \@encpagebreak
+% \@endmemo
+% \@erroras
+% \@errorclassargument
+% \@errorclassmessage
+% \@errorillegalbodyfont
+% \@errorillegalheaderfont
+% \@errorillegaltypeface
+% \@erroroverfull
+% \@errorserialnosymbol
+% \@errorshortmemo
+% \@errorshowexample
+% \@errortwoclasses
+% \@errorundeclared
+% \@exit
+% \@fontarg
+% \@fontcommand
+% \@getpostscriptnames
+% \@gettoksheader
+% \@headerfonts
+% \@ibmpc
+% \@ifemptyorundefined
+% \@ifnoinfo
+% \@initializefontvariables
+% \@initializeheadervariables
+% \@initializelists
+% \@initializetypefacedependencies
+% \@kern
+% \@kernheaderwords
+% \@lafonts
+% \@lanl
+% \@lanm
+% \@latwentyeight
+% \@lengthdate
+% \@lengthlabel
+% \@lengthname
+% \@lengthrule
+% \@long
+% \@losalamos
+% \@macroname
+% \@mailstop
+% \@makePSclassheader
+% \@makeclassheader
+% \@makepagetwoheader
+% \@memopaper
+% \@memorandum
+% \@memotwentyeight
+% \@notvoidtoks
+% \@notvoidtoksone
+% \@notvoidtokstwo
+% \@originator
+% \@parskipsave
+% \@postscript
+% \@printapproval
+% \@printattachments
+% \@printclasspage
+% \@printcy
+% \@printdistribution
+% \@printenc
+% \@printfirstpageheader
+% \@printfirstpageheaderinfo
+% \@printmemopaper
+% \@printnumberedlist
+% \@printoriginatorline
+% \@printpagenum
+% \@printpagetwoheader
+% \@printreference
+% \@printsignature
+% \@printsubject
+% \@psdefclasslabel
+% \@psdeflosalamos
+% \@pullpagetwoheader
+% \@rm
+% \@secret
+% \@serialnumber
+% \@setnumdefaults
+% \@short
+% \@shortmemostyle
+% \@signature
+% \@signer
+% \@specialbopemit
+% \@specialbopempty
+% \@specialboptext
+% \@spectwelve
+% \@standard
+% \@subject
+% \@sununix
+% \@symbol
+% \@symbolserialnumber
+% \@telephone
+% \@texfonts
+% \@tocommapull
+% \@tocommapullone
+% \@tocommapulltwo
+% \@todieornottodie
+% \@toksafternewline
+% \@toksattachments
+% \@toksbeforecomma
+% \@toksbeforenewline
+% \@toksblank
+% \@tokscy
+% \@toksdistribution
+% \@toksempty
+% \@toksenc
+% \@toksfrom
+% \@toksheaderone
+% \@toksheadertwo
+% \@toksinput
+% \@toksitem
+% \@toksmultipleto
+% \@toksname
+% \@toksnewline
+% \@toksnotequal
+% \@toksreference
+% \@toksremaining
+% \@toksthru
+% \@toksto
+% \@tonewlinepull
+% \@tonewlinepullfour
+% \@tonewlinepullone
+% \@tonewlinepullthree
+% \@tonewlinepulltwo
+% \@tt
+% \@typeface
+% \@typist
+% \@unclassified
+% \@underscore
+% \@unspacedclasslabel
+% \@unspaceleft
+% \@unspaceleftone
+% \@unspacelefttwo
+% \@unspaceright
+% \@unspacerightone
+% \@unspacerighttwo
+% \@upperunspaceleft
+% \@upperunspaceleftone
+% \@vaxunix
+% \@vaxvms
+% \approval
+% \attachmentas
+% \attachments
+% \attachmentsas
+% \attachmentspagebreak
+% \bodyfonts
+% \c@@countlist
+% \classlabel
+% \closing
+% \cy
+% \cypagebreak
+% \deftemp
+% \descriptionmargin
+% \distribution
+% \distributionpagebreak
+% \enc
+% \encas
+% \encpagebreak
+% \from
+% \headerfonts
+% \if@beenhere
+% \if@closing
+% \if@cmfonts
+% \if@comma
+% \if@continueloop
+% \if@newline
+% \if@notvoidtoks
+% \if@somethingbefore
+% \if@toksnotequal
+% \mailstop
+% \memopaperhcorr
+% \memopapervcorr
+% \newblock
+% \next
+% \one
+% \opening
+% \originator
+% \ps@firstpage
+% \ps@pagetwo
+% \reference
+% \serialnumber
+% \shortmemostyle
+% \signature
+% \signer
+% \specialbop
+% \subject
+% \telephone
+% \thru
+% \two
+% \typeface
+% \typist
+
+% Here is a list of most of the locally defined macros and their line
+% numbers in this file.
+
+% 964 % DEF \@AMORCM figures out whether am or cm fonts have been loaded.
+% 906 % DEF \@CHECKINPUT
+% 717 % DEF \HEADERFONTS, \BODYFONTS, \SUBJECT, \SYMBOL, \SERIALNUMBER,
+% 2333 % \DEF \@ADDTOKSTOTOKS
+% 2325 % \DEF \@ADDTOTOKS
+% 2370 % \DEF \@ADVCOUNTBYDIMEN
+% 1716 % \DEF \@BEGINMEMO
+% 1019 % \DEF \@CHOOSEBODYFONTS
+% 954 % \DEF \@CHOOSEFONTS
+% 986 % \DEF \@CHOOSEHEADERFONTS
+% 1750 % \DEF \@CLEARCLOSING
+% 1759 % \DEF \@ENDMEMO
+% 2481 % \DEF \@EXIT
+% 973 % \DEF \@GETPOSTSCRIPTNAMES
+% 1704 % \DEF \@GETTOKSHEADER
+% 2341 % \DEF \@IFEMPTYORUNDEFINED
+% 2351 % \DEF \@IFNOINFO
+% 1078 % \DEF \@INITIALIZEFONTVARIABLES
+% 1435 % \DEF \@INITIALIZEHEADERVARIABLES
+% 1256 % \DEF \@INITIALIZELISTS
+% 1227 % \DEF \@INITIALIZETYPEFACEDEPENDENCIES
+% 2489 % \DEF \@ITEM
+% 1110 % \DEF \@KERNHEADERWORDS
+% 1482 % \DEF \@MAKECLASSHEADER
+% 1621 % \DEF \@MAKEPAGETWOHEADER
+% 1607 % \DEF \@MAKEPSCLASSHEADER
+% 2379 % \DEF \@NOTVOIDTOKS
+% 2544 % \DEF \@OUTPUTPAGE
+% 2013 % \DEF \@PRINTAPPROVAL
+% 2088 % \DEF \@PRINTATTACHMENTS
+% 1657 % \DEF \@PRINTCLASSPAGE
+% 2153 % \DEF \@PRINTCY
+% 2131 % \DEF \@PRINTDISTRIBUTION
+% 2050 % \DEF \@PRINTENCLOSURES
+% 1789 % \DEF \@PRINTFIRSTPAGEHEADER
+% 1865 % \DEF \@PRINTFIRSTPAGEHEADERINFO
+% 1806 % \DEF \@PRINTMEMOPAPER
+% 2197 % \DEF \@PRINTNUMBEREDLIST
+% 1987 % \DEF \@PRINTORIGINATORLINE
+% 1677 % \DEF \@PRINTPAGENUM
+% 1671 % \DEF \@PRINTPAGETWOHEADER
+% 1937 % \DEF \@PRINTREFERENCE
+% 1974 % \DEF \@PRINTSIGNATURE
+% 1925 % \DEF \@PRINTSUBJECT
+% 1557 % \DEF \@PSDEFCLASSLABEL
+% 1512 % \DEF \@PSDEFLOSALAMOS
+% 1689 % \DEF \@PULLPAGETWOHEADER
+% 2178 % \DEF \@SETNUMDEFAULTS
+% 2242 % \DEF \@TOCOMMAPULL \DEF \@TOCOMMAPULLSUB, etc.
+% 2472 % \DEF \@TODIEORNOTTODIE
+% 807 % \DEF \@TOKSINPUT
+% 2358 % \DEF \@TOKSNOTEQUAL \DEF \@TOKSEQUAL
+% 2222 % \DEF \@TONEWLINEPULL \DEF \@TONEWLINEPULLSUBONE, etc.
+% 2252 % \DEF \@UNSPACELEFT
+% 2299 % \DEF \@UNSPACERIGHT
+% 2275 % \DEF \@UPPERUNSPACELEFT
+% 771 % \DEF \CLASS
+% 884 % \DEF \CLOSING
+% 871 % \DEF \OPENING
+% 2599 % \DEF \SPECIALBOP
+% 705 % \DEF \TO, \FROM, \THRU, \CY, \ATTACHMENTS, \REFERENCE, \ENCLOSURES,
+
+% The following list will give you a view of this file as a whole.
+% Included are banners from major sections of code and locally
+% defined macros. Line numbers are given on the left.
+
+% 18 % *** BEGINNING OF ARTICLE.DOC MACROS ***
+% 25 % * BIBLIOGRAPHY *
+% 59 % * FIGURES AND TABLES *
+% 150 % *** LETTER.STY MACROS ***
+% 190 % * FONTS *
+% 327 % * PAGE LAYOUT *
+% 393 % * LETTER COMMANDS *
+% 399 % * THE SRI LETTER FORMAT *
+% 405 % * THE GENERIC LETTER COMMANDS *
+% 411 % * PAGE STYLES *
+% 418 % * PARAGRAPHING *
+% 453 % * LISTS *
+% 461 % * OTHER ENVIRONMENTS *
+% 515 % * FOOTNOTES *
+% 547 % * MISCELLANEOUS *
+% 560 % * INITIALIZATION *
+% 580 % *** BEGINNING OF LOCALLY WRITTEN MACROS FOR LANL MEMOS. ***
+% 584 % *** DEFINE AND INITIALIZE REGISTERS ***
+% 701 % *** USER INPUT ***
+% 705 % \DEF \TO, \FROM, \THRU, \CY, \ATTACHMENTS, \REFERENCE, \ENCLOSURES,
+% 717 % DEF \HEADERFONTS, \BODYFONTS, \SUBJECT, \SYMBOL, \SERIALNUMBER,
+% 771 % \DEF \CLASS
+% 807 % \DEF \@TOKSINPUT
+% 868 % *** OPENING AND CLOSING ***
+% 871 % \DEF \OPENING
+% 884 % \DEF \CLOSING
+% 903 % *** CHECK USER INPUT ***
+% 906 % DEF \@CHECKINPUT
+% 951 % *** CHOOSE FONTS ***
+% 954 % \DEF \@CHOOSEFONTS
+% 964 % DEF \@AMORCM figures out whether am or cm fonts have been loaded.
+% 973 % \DEF \@GETPOSTSCRIPTNAMES
+% 986 % \DEF \@CHOOSEHEADERFONTS
+% 1019 % \DEF \@CHOOSEBODYFONTS
+% 1075 % *** INITIALIZE FONT AND TYPEFACE DEPENDENT VARIABLES ***
+% 1078 % \DEF \@INITIALIZEFONTVARIABLES
+% 1110 % \DEF \@KERNHEADERWORDS
+% 1227 % \DEF \@INITIALIZETYPEFACEDEPENDENCIES
+% 1256 % \DEF \@INITIALIZELISTS
+% 1268 % * LISTS *
+% 1317 % See comments for *** LISTS *** above under \ifx \@typeface \@tt
+% 1435 % \DEF \@INITIALIZEHEADERVARIABLES
+% 1479 % *** CLASSIFICATION AND PAGE TWO HEADERS ***
+% 1482 % \DEF \@MAKECLASSHEADER
+% 1512 % \DEF \@PSDEFLOSALAMOS
+% 1557 % \DEF \@PSDEFCLASSLABEL
+% 1607 % \DEF \@MAKEPSCLASSHEADER
+% 1621 % \DEF \@MAKEPAGETWOHEADER
+% 1657 % \DEF \@PRINTCLASSPAGE
+% 1671 % \DEF \@PRINTPAGETWOHEADER
+% 1677 % \DEF \@PRINTPAGENUM
+% 1689 % \DEF \@PULLPAGETWOHEADER
+% 1704 % \DEF \@GETTOKSHEADER
+% 1713 % *** BEGIN AND END MEMO, SHORT OR NORMAL MEMO STYLE. ***
+% 1716 % \DEF \@BEGINMEMO
+% 1750 % \DEF \@CLEARCLOSING
+% 1759 % \DEF \@ENDMEMO
+% 1786 % *** PRINT OPENING ***
+% 1789 % \DEF \@PRINTFIRSTPAGEHEADER
+% 1806 % \DEF \@PRINTMEMOPAPER
+% 1865 % \DEF \@PRINTFIRSTPAGEHEADERINFO
+% 1925 % \DEF \@PRINTSUBJECT
+% 1937 % \DEF \@PRINTREFERENCE
+% 1971 % *** PRINT CLOSING. ***
+% 1974 % \DEF \@PRINTSIGNATURE
+% 1987 % \DEF \@PRINTORIGINATORLINE
+% 2013 % \DEF \@PRINTAPPROVAL
+% 2050 % \DEF \@PRINTENCLOSURES
+% 2088 % \DEF \@PRINTATTACHMENTS
+% 2131 % \DEF \@PRINTDISTRIBUTION
+% 2153 % \DEF \@PRINTCY
+% 2175 % *** NUMBERED LISTS FOR CLOSING ***
+% 2178 % \DEF \@SETNUMDEFAULTS
+% 2197 % \DEF \@PRINTNUMBEREDLIST
+% 2219 % *** PARSING ***
+% 2222 % \DEF \@TONEWLINEPULL \DEF \@TONEWLINEPULLSUBONE, etc.
+% 2242 % \DEF \@TOCOMMAPULL \DEF \@TOCOMMAPULLSUB, etc.
+% 2252 % \DEF \@UNSPACELEFT
+% 2275 % \DEF \@UPPERUNSPACELEFT
+% 2299 % \DEF \@UNSPACERIGHT
+% 2323 % *** UTILITIES FOR MASSAGING TOKEN AND DIMENSION VARIABLES. ***
+% 2325 % \DEF \@ADDTOTOKS
+% 2333 % \DEF \@ADDTOKSTOTOKS
+% 2341 % \DEF \@IFEMPTYORUNDEFINED
+% 2351 % \DEF \@IFNOINFO
+% 2358 % \DEF \@TOKSNOTEQUAL \DEF \@TOKSEQUAL
+% 2370 % \DEF \@ADVCOUNTBYDIMEN
+% 2379 % \DEF \@NOTVOIDTOKS
+% 2389 % *** ERROR MESSAGES ***
+% 2469 % *** DEATH UTILITY ***
+% 2472 % \DEF \@TODIEORNOTTODIE
+% 2481 % \DEF \@EXIT
+% 2486 % *** REDEFINE @ITEM TO MAKE NICE PAGEBREAKS WITH \CLOSING LISTS ***
+% 2489 % \DEF \@ITEM
+% 2541 % *** REDEFINE LATEX.TEX'S @OUTPUTPAGE FOR ARBORTEXT'S SPECIALBOP ***
+% 2544 % \DEF \@OUTPUTPAGE
+% 2599 % \DEF \SPECIALBOP
+% 2616 % *** END OF MEMO.DOC ***
diff --git a/macros/latex209/contrib/lamemo/memo.ref b/macros/latex209/contrib/lamemo/memo.ref
new file mode 100644
index 0000000000..5c5a81dbc0
--- /dev/null
+++ b/macros/latex209/contrib/lamemo/memo.ref
@@ -0,0 +1,3965 @@
+
+
+
+
+
+
+
+
+ |
+ | Computing and Communications Division
+ CIC#919 |
+ March 1990 |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ | LaTeX Memo
+ | Reference
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ | ---------------------------------------------
+ | NOTICE TO USERS OF ONLINE DOCUMENTATION:
+ |
+ | This document may not include some tables,
+ | graphics, and other features that you will
+ | find in the printed version. To order the
+ | hardcopy, contact the CIC at (505) 667-6992.
+ | ---------------------------------------------
+ |
+ |
+ Los Alamos | Los Alamos National Laboratory
+ | Los Alamos, New Mexico 87545
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who to Contact - ii - March 1990
+
+
+
+ WHO TO CONTACT
+ ______________________________________________________________________
+
+ =================================================================
+ CONTACT PHONE FTS
+ -----------------------------------------------------------------
+ CONSULTING
+ ICN Consulting Office (C-10)............(505)667-5745 843-5745
+ Closed from 1 p.m. to 2 p.m. MT on Mondays
+ electronic mail address: consult@lanl.gov
+ CCF Dispatcher/CFS/PAGES (C-1)..........(505)667-4584 843-4584
+
+ COMMUNICATIONS PROBLEMS
+ ICN Communications Problems.............(505)667-7423 843-7423
+ (C-4 Trouble Desk)
+
+ EDUCATION and DOCUMENTATION
+ Computing Information Center - CIC .....(505)667-6992 843-6992
+ (C-2 publication distribution)
+ electronic mail address: cic@lanl.gov
+
+ STATUS MESSAGES
+ CCF Status Recording....................(505)667-5588 843-5588
+ FOCUS - Machine Status..................(505)667-2852 843-2852
+
+ SECURITY
+ Computer and Information Security.......(505)665-1805 855-1805
+ (OS-4 passwords and blacklisting)
+ =================================================================
+ Revision History
+
+ Document written by Margot Casey, C-2,
+ with technical input from Steve Sydoriak, C-2.
+ Writing assistance provided by Cheryl Ramsey, C-2.
+
+ January 1987
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - iii - Contents
+
+
+
+ CONTENTS
+ ______________________________________________________________________
+
+
+ 1. INTRODUCING THE LATEX MEMO COMMANDS ......................... 3
+ 1.1. What You Need Before You Can Use the Memo Commands
+ ....................................................... 3
+ 1.2. Finding More Information ............................. 3
+ 1.3. Taking a LaTeX Video Course .......................... 4
+ 2. GETTING STARTED ............................................. 5
+ 3. PREPARING THE PREAMBLE SECTION FOR OPENING AND CLOSING OF
+ MEMO ........................................................ 6
+ 3.1. Document Style ....................................... 7
+ 3.2. To and From .......................................... 8
+ 3.3. Thru ................................................. 8
+ 3.4. Symbol and Serial Number ............................. 9
+ 3.5. Subject Line ......................................... 10
+ 3.6. Date ................................................. 10
+ 3.7. Mail Stop and Telephone Number ....................... 11
+ 3.8. Reference Line ....................................... 11
+ 3.9. Signature ............................................ 12
+ 3.10. Initial Line-Signer, Originator, and Typist ......... 12
+ 3.11. Approval Line ....................................... 13
+ 3.12. Enclosures .......................................... 14
+ 3.13. Attachments ......................................... 15
+ 3.14. Copy List ........................................... 16
+ 3.15. Distribution List ................................... 16
+ 4. PREPARING THE DOCUMENT SECTION .............................. 18
+ 5. PRINTING YOUR MEMO .......................................... 20
+ 6. CONTROLLING THE STYLE OF YOUR MEMO .......................... 22
+ 6.1. Choosing a Header Style .............................. 22
+ 6.2. Choosing a Body Style ................................ 23
+ 6.2.1. Selecting a Type Style ............................ 23
+ 6.2.2. Selecting Fonts ................................... 23
+ 6.3. Marking Your Memos for Classification ................ 24
+ 6.4. Controlling Page Breaks .............................. 25
+ 6.4.1. Breaking Pages Before a List ...................... 25
+ 6.4.2. Breaking Pages at Other Places in Your Memo ....... 25
+ 6.5. Printing Short Memos ................................. 26
+ 6.6. Using Preprinted Memo Paper .......................... 26
+ APPENDIX A: SUMMARIZING THE LATEX MEMO COMMANDS ................. 28
+ APPENDIX B: SYNTAX RULES ........................................ 30
+ APPENDIX C: EXAMPLE MEMOS ....................................... 32
+ APPENDIX D: INSTALLING THE LATEX MEMO STYLE FILE ................ 41
+ D.1. On the IBM PC ............................................ 42
+ D.2. On the Sun Workstation ................................... 42
+ D.3. On the Apollo Workstation ................................ 43
+ D.4. On VAX/VMS ............................................... 43
+ D.5. On VAX/UNIX .............................................. 43
+ APPENDIX E. WARNING AND ERROR MESSAGES ......................... 45
+ E.1. Warning Messages ......................................... 45
+ E.1.1. Leaving Out Information ............................... 45
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Contents - iv - March 1990
+
+
+
+ E.1.2. Memo Too Long for \shortmemostyle ..................... 46
+ E.1.3. Printing Too Many Lines in Headers .................... 46
+ E.1.4. Contradictory Information ............................. 47
+ E.2. Fatal Errors ............................................. 47
+ E.2.1. Invalid Classification Label .......................... 47
+ E.2.2. Duplicating \classlabel Commands ...................... 48
+ E.2.3. Specifying an Invalid Typeface ........................ 48
+ E.2.4. Specifying an Invalid Font for Memo Body .............. 48
+ E.2.5. Specifying an Invalid Font for Memo Header ............ 49
+ READER COMMENTS FORM ............................................ 51
+ DOCUMENTATION REQUEST FORM ...................................... 53
+ INDEX ........................................................... 55
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - i - Using This Document
+
+
+
+ USING THIS DOCUMENT
+ ______________________________________________________________________
+
+ LaTeX Memo Reference explains how to use LaTeX to produce memos that
+ conform to the Los Alamos National Laboratory standards.
+
+ This document is divided into the following chapters:
+
+ o Chapter 1 explains what the LaTeX memo commands do, what systems
+ these commands are available for, what you need before you can
+ use these commands, and where to find more information.
+
+ o Chapter 2 gives the general format for a LaTeX memo file and
+ explains the major sections of the file.
+
+ o Chapter 3 explains commands that you will need in the preamble
+ section of the file. This chapter only covers the basic memo
+ commands needed for a typical memo; it does not explain about the
+ commands for changing fonts or about the commands that give other
+ special instructions. See Chapter 6 for these special memo
+ commands.
+
+ o Chapter 4 describes the section of the file containing the body
+ of the document.
+
+ o Chapter 5 explains how to print a memo. The instructions in this
+ chapter are very general and are the same as the instructions for
+ printing any LaTeX file.
+
+ o Chapter 6 gives details about the special memo commands that go
+ into the preamble section of your file to control the fonts for
+ the header of a memo, the fonts and typeface for the body of a
+ memo, pagebreaks, classification labeling, and special formatting
+ for short memos.
+
+ o Appendix A is a summary table for the memo commands. It gives a
+ brief description of each command and a list of its options and
+ defaults where applicable.
+
+ o Appendix B contains a list of syntax rules for the memo commands.
+
+ o Appendix C gives examples of memo files and their resulting
+ memos.
+
+ o Appendix D explains how to install the memo style file on your
+ system.
+
+ o Appendix E contains a listing of all the error messages that are
+ possible from using the memo commands.
+
+
+ In this document, double lines delimit the examples. These examples
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Using This Document - ii - March 1990
+
+
+
+ show what you put into your file and, in most cases, what the result
+ would be from that part of the file.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 3 - Introduction
+
+
+
+ 1. INTRODUCING THE LATEX MEMO COMMANDS
+ ______________________________________________________________________
+
+ The LaTeX memo commands are commands you can use with LaTeX to produce
+ a standard Los Alamos National Laboratory memo. These commands go
+ into a LaTeX file and are executed when you run LaTeX. LaTeX is a
+ macro package that supplements the TeX document preparation system and
+ streamlines the production of many types of documents. The memo
+ commands work with LaTeX to streamline the production of Laboratory
+ memos.
+
+
+ 1.1. What You Need Before You Can Use the Memo Commands
+
+ You can use the LaTeX memo commands in the following environments:
+
+ o On UNIX worker computers;
+
+ o On Sun and Apollo workstations;
+
+ o On IBM PCs; and
+
+ o On VAX/VMS distributed processors.
+
+
+ With each of these environments, you also need to have the following:
+
+ o TeX and LaTeX installed;
+
+ o The LaTeX memo style file installed; and
+
+ o Access to a printer that has the necessary software to print TeX
+ output.
+
+
+
+ _____________________________________________________
+
+ See Appendix D for information about installing
+ the memo style file.
+ _____________________________________________________
+
+
+
+
+
+ 1.2. Finding More Information
+
+ This document assumes that you know how to use LaTeX. If you are not
+ already familiar with LaTeX, you can refer to the following
+ publications:
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Introduction - 4 - March 1990
+
+
+
+ o An Introduction to LaTeX, by Michael Urban. An introductory
+ document that will help you start working with LaTeX quickly.
+
+ o LaTeX: A Document Preparation System, by Leslie Lamport. A
+ complete reference manual written by LaTeX's designer.
+
+
+ You can order these publications from the Computing Information Center
+ (CIC) by filling out the Documentation Request Form in the back of
+ this document. Please note that you will be charged for these
+ publications.
+
+
+ If you would like more information about the Laboratory's memo
+ standards, see the Office Procedures Manual, OPM-1-3 for unclassified
+ memos, and OPM-2-4, OPM-2-5, and OPM-2-6 for classified memos. To
+ order a copy of the Office Procedures Manual, call the IS-11
+ Distribution Center at (505) 667-3872, FTS 843-3872. Most group
+ offices have one of these manuals available for reference.
+
+
+
+ 1.3. Taking a LaTeX Video Course
+
+ The Computing Learning Center (CLC) offers an introductory video
+ course entitled "Introduction to LaTeX" presented by Cris Barnes,
+ CTR-5. This course takes approximately two hours to complete and is
+ available for viewing in the CLC at Pueblo Complex or for short-term
+ loan on 1/2-inch VHS tapes. LABNET also broadcasts this course.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 5 - Getting Started
+
+
+
+ 2. GETTING STARTED
+ ______________________________________________________________________
+
+ To prepare a memo with LaTeX, you first create a file with a ".tex"
+ extension at the end of its name (e.g., test.tex). We will call this
+ file your LaTeX memo file.
+
+ Each LaTeX memo file has two sections: the preamble section and the
+ document section. The preamble section contains the memo commands
+ that set up the information for the opening and closing of the memo
+ and that describe the style of the memo. The document section
+ contains the text of the memo and starts with a \begin{document}
+ command and ends with an \end{document} command.
+
+ The general format of a LaTeX memo file is
+
+ \documentstyle{memo}
+
+ Memo commands, such as
+ \to
+ \from Preamble Section
+ .
+ .
+ .
+
+ \begin{document}
+ \opening
+
+ Body of memo Document Section
+
+ \closing
+ \end{document}
+
+
+ The preamble section is described in detail in Chapters 3 and 6, and
+ the document section is described in Chapter 4.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 6 - March 1990
+
+
+
+ 3. PREPARING THE PREAMBLE SECTION FOR OPENING AND CLOSING OF MEMO
+ ______________________________________________________________________
+
+ The preamble section is described in two chapters: this chapter and
+ Chapter 6. This chapter describes the memo commands that affect the
+ opening and closing of your memo. These commands are the ones you
+ will need for a typical memo. Chapter 6 describes the special memo
+ commands that affect the style of your memo. These special commands
+ control the header and body fonts, the typeface of the body, and page
+ breaks.
+
+ You can print a memo using just the preamble commands covered in this
+ chapter. In this case, the defaults for the commands described in
+ Chapter 6 will determine the style of your memo. If you dislike the
+ results, use some of the special commands described in Chapter 6 to
+ change the defaults.
+
+ The following commands can be arranged in any order within the
+ preamble section of your LaTeX memo file. The only exception to this
+ rule is the \documentstyle command; it must be the first line in your
+ file.
+
+ The \documentstyle command is also the only command that is required
+ in the preamble. The other commands are optional, and if you leave
+ them out of your file, one of two things will happen.
+
+ o The label in the header will be left blank. This happens with the
+ commands that have labels printed with the header of the memo-
+ \to, \from, \symbol, \subject, \mailstop, and \telephone
+ commands. The \thru and \date commands are special cases and
+ will be described in the following sections.
+
+ o Nothing will be printed. This happens with the commands that
+ were not mentioned above; for example, if you leave out the
+ \attachments command, LaTeX will not print an attachments list or
+ the label "Attachments:" because this label is not printed with
+ the header of the memo.
+
+
+
+ _____________________________________________________
+
+ The backslashes () and the braces ({ }) in the
+ following commands are a part of these commands
+ and must be included with the command. They do
+ not denote optional parameters.
+ _____________________________________________________
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 7 - Preparing the Preamble Section
+
+
+
+ The commands are listed here in the order in which the Office
+ Procedures Manual describes them, and they are grouped by their
+ related functions.
+
+
+ 3.1. Document Style
+
+ \documentstyle{memo}
+
+ This command tells LaTeX that your document is a memo. It must be the
+ first line in your file because LaTeX sets up the margins and other
+ values based on the style you specify inside the braces (in this case,
+ a memo style).
+
+ This command also sets the point size for the body of your memo. The
+ default is a point size of 10. You can get a point size of 10 if you
+ use the command as it is shown above (but the text of your memo will
+ be small). See Example #3 in
+ Appendix C for an example of text with a point size of 10.
+
+ You can get a point size of 11 or 12 by putting an [11pt] or [12pt]
+ option (including the square brackets [ ] ) before the {memo}
+ parameter. The following example shows what the command looks like
+ for getting a point size of 12 for the body of your memo. This is the
+ point size that we recommend.
+
+
+ ==============================================================
+
+ \documentstyle[12pt]{memo}
+
+ ==============================================================
+
+
+ LaTeX will only use a point size of 10, 11, or 12, and a point size of
+ 10 is the default for all LaTeX documents.
+
+ The \documentstyle command is a LaTeX command, and it follows the
+ syntax rules for standard LaTeX commands. See one of the LaTeX
+ reference books listed in Chapter 1 for these syntax rules.
+
+
+ _____________________________________________________
+
+ Warning: LaTeX will NOT allow you to use
+ \documentstyle[10pt]{memo} to specify a point
+ size of 10. You must leave out the point size
+ completely if you want the default point size of
+ 10.
+ _____________________________________________________
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 8 - March 1990
+
+
+
+
+
+ 3.2. To and From
+
+ \to{namelist}
+ \from{namelist}
+
+ These commands give the name or names of the recipient and originator
+ of the memo, filling in the "TO:" and "FROM:" sections of the memo
+ header. The {namelist} should be one or two names, and each name
+ should include name, group, and mailstop, with commas separating these
+ parts. The {namelist} can include more than two names, but the memo
+ header leaves room for only two names.
+
+ If you use two names, you can either repeat the command twice, with
+ different names in the braces, or you can separate the names with \\
+ inside the braces, as the following example indicates.
+
+
+ ==============================================================
+
+ \to{A. B. Carroway, Z-1, MS B234 \\ D. E. Fritz, Y-2, MS B345}
+
+ or
+
+ \to{A. B. Carroway, Z-1, MS B234}
+ \to{D. E. Fritz, Y-2, MS B345}
+
+ prints
+
+ TO: A. B. Carroway, Z-1, MS B234
+ D. E. Fritz, Y-2, MS B345
+
+ ==============================================================
+
+
+
+
+ 3.3. Thru
+
+ \thru{namelist}
+
+ This command supplies the name or list of names of the people that
+ your memo will go through. It also causes the header of your memo to
+ include the "THRU:" label-even if you do not put a name inside the
+ braces. The "THRU:" label that is generated by this command leaves
+ room for a maximum of four names.
+
+ If you leave the command out of your file, you will get the memopaper
+ header without the "THRU:" label.
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 9 - Preparing the Preamble Section
+
+
+
+
+ ==============================================================
+
+ \thru{L. S. Steele, X-5, MS B567}
+
+ prints
+
+ THRU: L. S. Steele, X-5, MS B567
+
+ ==============================================================
+
+
+
+
+ 3.4. Symbol and Serial Number
+
+ \symbol{group}
+ \serialnumber{id}
+
+ These commands fill in the portion of the header marked "SYMBOL:".
+ The {group} is usually your group name. The \serialnumber command is
+ not usually needed, but some group and division offices use a serial
+ number to number all of their correspondence. When needed, the {id}
+ should be the serial number that identifies the memo. It will be
+ appended to the symbol with a hyphen (-), as the following example
+ shows.
+
+
+ ==============================================================
+
+ \symbol{C-2}
+ \serialnumber{25}
+
+ prints
+
+ SYMBOL: C-2-25
+
+ ==============================================================
+
+
+ If you use a serial number as the above example does, you will also
+ get this symbol-serial number on the headings of each page after the
+ first page.
+
+ If you leave out the \serialnumber command, the serial number will not
+ be appended. The group name will be the only information on the
+ symbol line.
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 10 - March 1990
+
+
+
+ 3.5. Subject Line
+
+ \subject{text}
+
+ This command prints out your subject. The {text} should be the
+ subject line of your memo. It will print in uppercase regardless of
+ how you type it inside the braces.
+
+
+ ==============================================================
+
+ \subject{Interruption of Building Schedule}
+
+ prints
+
+ SUBJECT: INTERRUPTION OF BUILDING SCHEDULE
+
+ ==============================================================
+
+
+ Note that you can use LaTeX commands such as \bf (for boldface) inside
+ the
+ braces { }.
+
+
+ 3.6. Date
+
+ \date{text}
+
+ This command inserts the date into your memo. The {text} is the date
+ you want to appear on your memo. If you omit this command, the
+ default will give you the date at the time you run LaTeX. This
+ default date will appear in the following form: December 1, 1986.
+
+ Include this command only if you have a specific date that needs to
+ appear on your memo.
+
+
+ ==============================================================
+
+ \date{October 15, 1986}
+
+ prints
+
+ DATE: October 15, 1986
+
+ ==============================================================
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 11 - Preparing the Preamble Section
+
+
+
+ 3.7. Mail Stop and Telephone Number
+
+ \mailstop{text}
+ \telephone{number}
+
+ These commands work together to produce the "MAIL STOP/TELEPHONE:"
+ line. The {text} should be your mail stop, and {number} should be
+ your telephone number in the form n-nnnn (the third number in the
+ prefix and the last four digits of the number). The commands put
+ these two numbers together as they should appear on the memo.
+
+
+ ==============================================================
+
+ \mailstop{M995}
+ \telephone{5-0817}
+
+ prints
+
+ MAIL STOP/TELEPHONE: M995/5-0817
+
+ ==============================================================
+
+
+
+
+ 3.8. Reference Line
+
+ \reference{text}
+
+ This command prints the reference line of your memo. The {text}
+ should be your reference; it will be printed in uppercase in the
+ opening of the memo, directly below the subject line. If you include
+ more than one reference, the references will automatically be
+ numbered.
+
+ Note that when you have several references, you may separate them with
+ \\ inside the braces, or you may use each reference in a separate
+ command line.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 12 - March 1990
+
+
+
+
+ ==============================================================
+
+ \reference{Office Procedures Manual \\ LaTeX Memo Reference}
+
+ prints
+
+ REFERENCE: 1. OFFICE PROCEDURES MANUAL
+ 2. LATEX MEMO REFERENCE
+
+ ==============================================================
+
+
+
+
+ 3.9. Signature
+
+ \signature{name}
+
+ The \signature command leaves room for a signature (four blank lines)
+ and prints the signer's name under this area flush with the left
+ margin. This is the area that the author signs to certify the memo as
+ you would do with a letter; most writers, however, omit this part and
+ prefer to certify the memo by initialing next to their typed names on
+ the From line on the first page of the memo. The {name} may include a
+ title by separating it from the name with \\ as the following example
+ illustrates.
+
+
+ ==============================================================
+
+ \signature{T. F. Wise \\ Special Projects Group Leader}
+
+ prints
+
+ T. F. Wise
+ Special Projects Group Leader
+
+ ==============================================================
+
+
+
+
+
+ 3.10. Initial Line-Signer, Originator, and Typist
+
+ \signer{initials}
+ \originator{initials}
+ \typist{initials}
+
+ These commands produce the identification initials. You may leave out
+ any of them that do not apply to your situation. The \signer command
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 13 - Preparing the Preamble Section
+
+
+
+ is for the initials of the signer and is used only if you use the
+ \signature command. The \originator command is for the author's
+ initials, and the \typist command is for the typist of the memo.
+
+ If you leave out the \originator command, you will get a warning
+ message, but this does not affect the printing of your memo. The memo
+ will print without the originator's initials.
+
+
+ ==============================================================
+
+ \originator{ak}
+ \typist{cd}
+
+ prints
+
+ AK:cd
+
+ ==============================================================
+
+
+ If you include all three sets of initials, they will be arranged on
+ the initial line as the following example indicates.
+
+
+ ==============================================================
+
+ \signer{jm}
+ \originator{bf}
+ \typist{ar}
+
+ prints
+
+ JM-BF:ar
+
+ ==============================================================
+
+
+
+
+ 3.11. Approval Line
+
+ \approval{name}
+
+ This command prints the approval lines. The {name} should be the name
+ and title of the person approving the memo. The title of the person
+ is optional, and if it is included, it must be separated from the name
+ with \\ .
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 14 - March 1990
+
+
+
+
+ ==============================================================
+
+ \approval{Charles S. Smith \\ ST Division Leader}
+
+ prints
+
+ APPROVED BY: _______________________________________
+ Charles S. Smith date
+ ST Division Leader
+
+ ==============================================================
+
+
+
+
+ 3.12. Enclosures
+
+ \enc{list}
+ \encas
+
+ Either one of these commands prints the enclosure line. The first
+ command is used when you have several enclosures with your memo that
+ you have not specifically referred to in the body of the memo. The
+ {list} is the list of your enclosures, and a \\ separates the
+ enclosures.
+
+
+ ==============================================================
+
+ \enc{Photograph, Neg. No. 72-4304 \\
+ Slide and Vu-graph Nos. 8755 and 3908 \\
+ Drawing No. 3988-R}
+
+ prints
+
+ Enc. 1. Photograph, Neg. No. 72-4304
+ 2. Slide and Vu-graph Nos. 8755 and 3908
+ 3. Drawing No. 3988-R
+
+ ==============================================================
+
+
+ Use the \encas command if each individual enclosure is completely
+ identified within the body of the memo. This line says that the
+ enclosures have been enclosed as stated in the text. Use the \enc
+ command if you have only vaguely referred to the enclosed material.
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 15 - Preparing the Preamble Section
+
+
+
+
+ ==============================================================
+
+ \encas
+
+ prints
+
+ Enc. a/s
+
+ ==============================================================
+
+
+
+
+ 3.13. Attachments
+
+ \attachments{list}
+
+ This command prints the list of attachments for your memo. The {list}
+ is the list of attachments. The attachments will automatically be
+ numbered and should be separated with \\ inside the braces.
+
+
+ ==============================================================
+
+ \attachments{Memo, Gredin to Platz, March 12, 1982 \\
+ Memo, Rivera to Tines, January 14, 1983}
+
+ prints
+
+ Attachments:
+ 1. Memo, Gredin to Platz, March 12, 1982
+ 2. Memo, Rivera to Tines, January 14, 1983
+
+ ==============================================================
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Preparing the Preamble Section - 16 - March 1990
+
+
+
+ \attachmentas
+ \attachmentsas
+
+ Use the command \attachmentas to specify the singular attachment as
+ stated for an item completely identified in the text of the memo. The
+ command \attachmentsas is used for a number of specified attachments.
+ The following example shows the singular \attachmentas command.
+
+
+ ==============================================================
+
+ \attachmentas
+
+ prints
+
+ Attachment a/s
+
+ ==============================================================
+
+
+
+
+ 3.14. Copy List
+
+ \cy{list}
+
+ This command gives a copy list. The {list} is the list of people to
+ whom copies should be sent. The names are separated with \\ .
+
+
+ ==============================================================
+
+ \cy{R. T. Smith, C-2, MS B263 \\ M. K. Terry, C-10, MS B296 \\ File}
+
+ prints
+
+ Cy: R. T. Smith, C-2, MS B263
+ M. K. Terry, C-10, MS B296
+ File
+
+ ==============================================================
+
+
+
+
+
+ 3.15. Distribution List
+
+ \distribution{list}
+
+ This command prints the distribution list for your memo. If your memo
+ is addressed as "TO: Distribution," use this command to specify the
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 17 - Preparing the Preamble Section
+
+
+
+ distribution list. The {list} is the list of people for your
+ distribution. The names are to be separated with \\ .
+
+
+ ==============================================================
+
+ \distribution{T. S. Solomon, TP-1, MS B233 \\
+ A. J. Gomez, TP-2, MS B234}
+
+ prints
+
+ Distribution:
+ T. S. Solomon, TP-1, MS B233
+ A. J. Gomez, TP-2, MS B234
+
+ ==============================================================
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Preparing the Document Section - 18 - March 1990
+
+
+
+ 4. PREPARING THE DOCUMENT SECTION
+ ______________________________________________________________________
+
+ This chapter describes the commands that go into the document section
+ of your memo. The document section is the second main section in your
+ LaTeX memo file. It starts with a \begin{document} command, ends with
+ an \end{document} command, and contains the commands and text that
+ produce the actual memo.
+
+
+ _____________________________________________________
+
+ The following memo commands must be in every
+ memo file.
+ _____________________________________________________
+
+
+
+ \begin{document}
+
+ This command signals the beginning of your document. All of the
+ preamble commands should be placed before this command in your file.
+
+ \opening
+
+ This command uses the information from the preamble commands to print
+ the opening of your memo. All of the preamble commands that supply
+ information for the opening of your memo must appear before this
+ command. LaTeX will ignore or give an error message for those opening
+ preamble commands that are encountered after the \opening command.
+
+ Body of Memo
+
+ The body of your memo comes after the \opening command. You can use
+ any of the standard LaTeX commands inside the body to describe the
+ contents of your memo.
+
+ \closing
+
+ The \closing command comes after the body of your memo and tells LaTeX
+ to print out the closing information for your memo. It uses the
+ information in the preamble section of your file; therefore, all of
+ the preamble commands that supply information for the closing of your
+ memo must be placed before the \closing command. You do not have to
+ include this command if your preamble does not contain any commands
+ that affect the closing of your memo, but it will not create problems
+ if it is included in this situation.
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 19 - Preparing the Document Section
+
+
+
+ \end{document}
+
+ The last line of your file must be the \end{document} command. This
+ line tells LaTeX that you are finished with your document, and LaTeX
+ will ignore anything after this command.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Printing Your Memo - 20 - March 1990
+
+
+
+ 5. PRINTING YOUR MEMO
+ ______________________________________________________________________
+
+ Once you have finished creating your memo file with the memo commands
+ in it, follow these steps to print your memo.
+
+
+ _____________________________________________________
+
+ These steps are the same steps you use to print
+ any LaTeX file.
+ _____________________________________________________
+
+
+
+
+ (1) Run your file through LaTeX by typing
+
+ latex filename.tex
+
+ where filename.tex is the name of your memo file. If you do not
+ include the .tex filename extension, LaTeX will append it for
+ you.
+
+ If you have any error messages, they will appear on the screen
+ during execution. These error messages are interactive and will
+ wait for you to respond to the ? prompt. You can type a question
+ mark (?) at this prompt to display a list of your options at that
+ point. You will also get a file called filename.log that
+ contains the error messages that were produced.
+
+ When LaTeX ends execution successfully, you will receive a
+ message that the filename.dvi file was created. If LaTeX does
+ not execute successfully, you will not receive this message, and
+ a filename.dvi file will not be created. If this happens, you
+ must correct your errors and run LaTeX again before you can print
+ your memo. If you do get a filename.dvi file, you can proceed to
+ the next step in printing your memo.
+
+ If you have trouble running LaTeX, call the consulting office or
+ see one of the LaTeX publications mentioned in Chapter 1.
+
+
+ (2) If your computer has a program that will allow it to preview .dvi
+ files, you should preview your filename.dvi file now and make any
+ necessary corrections. If your computer cannot preview .dvi
+ files, go on to the next step.
+
+
+ (3) Print out your filename.dvi file by using a device driver that
+ your computer uses. There are too many types of device drivers
+ to mention them all. If you do not know how to use a device
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 21 - Printing Your Memo
+
+
+
+ driver for your computer, you should contact your local system
+ manager if you are using a workstation or distributed processor
+ or the consulting office if you are using a worker computer.
+
+ If you want to send your output to one of the PAGES raster
+ printer-plotter devices, you can use a utility called DVIPAGES.
+ This utility is currently available only on the UNIX worker
+ computers, but it is being developed for the VAX/VMS distributed
+ processors. For more information about this utility, refer to
+ DVIPAGES: TEX DVI to PAGES Quick Steps. You can order this
+ document from the CIC by using the Documentation Request Form in
+ the back of this manual.
+
+
+ _____________________________________________________
+
+ At the present time, DVIPAGES cannot handle
+ secret or confidential memos.
+ _____________________________________________________
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Controlling the Style of Memo - 22 - March 1990
+
+
+
+ 6. CONTROLLING THE STYLE OF YOUR MEMO
+ ______________________________________________________________________
+
+ This chapter describes special memo commands that you can put into the
+ preamble section of your file to control the style of your memo.
+ These commands must be placed BEFORE the \begin{document} command in
+ your file.
+
+
+ 6.1. Choosing a Header Style
+
+ You can choose from four header styles. Three of these header styles
+ use fonts that will print a header on plain typing paper, and the
+ other header style allows you to use the preprinted memo paper
+ provided by the Laboratory. The following table lists the commands
+ you need to get these header styles.
+
+
+ COMMAND RESULTS
+ ________________________ ______________________________________
+
+ \headerfonts{texfonts} This is the DEFAULT header style
+ because these fonts are available on
+ all computers with LaTeX and TeX.
+ It gives a header similar to the
+ standard memo header.
+
+ \headerfonts{lafonts} This command gives the Laboratory's
+ standard memo header, but these fonts
+ are not installed on all computers.
+
+ \headerfonts{postscript} This command gives a header similar to
+ the standard memo header. These can
+ only be used with PostScript printers.
+
+ \headerfonts{memopaper} This command allows you to use
+ preprinted memo paper. It suppresses
+ the printing of the header.
+
+
+
+ _____________________________________________________
+
+ The examples in Appendix C show what each of
+ these header styles produces.
+ _____________________________________________________
+
+
+
+ If you want to use the lafonts, you need four special fonts named
+ book6, la28, memo28, and spec12. You can purchase these fonts through
+ Materials Management Division (MAT-6) from Metafoundry. The current
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 23 - Controlling the Style of Memo
+
+
+
+ price for them is $300. The Laboratory is in the process of
+ purchasing a site license for these fonts. If you have other
+ questions about the lafonts, call the consulting office.
+
+ The texfonts use the fonts that come with TeX; therefore, they are on
+ all systems that have TeX and LaTeX installed.
+
+ The postscript fonts are available for PostScript printers. If you
+ plan to use a PostScript printer, you need to purchase a program
+ called DVIPS. It is available through the CIC for all systems except
+ VAX/VMS. The VAX/VMS version is available on CFS as
+ /TEX/DEVICE_DRIVERS/DVIPSCM.BCK
+
+
+ 6.2. Choosing a Body Style
+
+
+
+ 6.2.1. Selecting a Type Style
+
+ The body of your memo can be printed in typewriter type or
+ proportionally-spaced Roman type. You can specify which one to use by
+ putting one of the following commands in your preamble section:
+
+
+ COMMAND RESULTS
+ _____________ ____________________________________________
+
+ \typeface{tt} gives typewriter type (This is the DEFAULT.)
+
+ \typeface{rm} gives proportionally-spaced Roman type.
+
+
+ The typeface defaults to typewriter type because most memos are typed
+ with typewriters. See Appendix C for examples of these typefaces.
+
+
+ 6.2.2. Selecting Fonts
+
+ You can also pick different fonts for the body of your memo. The
+ following table contains the choices for the body fonts.
+
+
+ COMMAND RESULTS
+ ______________________ __________________________________________
+
+ \bodyfonts{texfonts} This is the DEFAULT body font because
+ these fonts are available on all computers
+ with LaTeX and TeX.
+
+ \bodyfonts{postscript} These fonts can be used only with
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Controlling the Style of Memo - 24 - March 1990
+
+
+
+ PostScript printers.
+
+
+
+ The texfonts are the fonts that come with TeX; therefore, they are on
+ all systems that have TeX and LaTeX installed.
+
+ The postscript fonts are available for PostScript printers. If you
+ plan to use a PostScript printer, you need to purchase a program
+ called DVIPS. It is available through the CIC for all systems except
+ VAX/VMS. The VAX/VMS version is available on CFS as
+ /TEX/DEVICE_DRIVERS/DVIPSCM.BCK
+
+ See Appendix C for examples of these body fonts.
+
+
+ 6.3. Marking Your Memos for Classification
+
+ If you need to include a secret, confidential, or unclassified label
+ with the header of your memo, you can use one of the following
+ commands:
+
+
+ COMMAND RESULTS
+ ______________ ___________________________________________
+
+ \classlabel{ } This is the DEFAULT. It does NOT
+ print a label on the memo.
+
+ \classlabel{u} This prints a label that says UNCLASSIFIED.
+
+ \classlabel{c} This prints a label that says CONFIDENTIAL.
+
+ \classlabel{s} This prints the SECRET label.
+
+
+ These commands print the appropriate label at the top and bottom of
+ the memo in heavy black print. You can use them for labeling a
+ classified memo, but we suggest that you use the red-stamped
+ classification labeling on the front and back of the paper instead of
+ using these commands.
+
+
+ _____________________________________________________
+
+ The LaTeX memo commands will not print a red
+ label and will not print any label on the back
+ of the paper.
+ _____________________________________________________
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 25 - Controlling the Style of Memo
+
+
+
+
+
+
+ 6.4. Controlling Page Breaks
+
+
+
+ 6.4.1. Breaking Pages Before a List
+
+ If, after printing your memo, you find that some of the lists in the
+ closing section are broken between pages, you can use the following
+ commands to start the list at the top of the next page. You can put
+ these commands anywhere in the preamble section of your file.
+
+ COMMAND RESULTS
+ ______________________ ________________________________________________
+
+ \cypagebreak starts the copy list at the top of the next page
+
+ \attachmentspagebreak starts the list of attachments at the top of
+ the next page
+
+ \distributionpagebreak starts the distribution list at the top of the
+ next page
+
+ \encpagebreak starts the list of enclosures at the top of
+ the next page
+
+
+
+ 6.4.2. Breaking Pages at Other Places in Your Memo
+
+ You may also need to break a page at places other than at the first of
+ a list. The LaTeX command \newpage will break for a new page at the
+ place where you use this command. You can put this command in the
+ body of your memo or inside the braces of a memo command.
+
+ The following example divides the list between the second and third
+ name, with the first two names appearing on the current page of the
+ memo and the third name appearing on the next page.
+
+
+ ==============================================================
+
+ \cy{A. B. Cog \\ C. D. Man
+ \newpage \\ E. F. Barr}
+
+ ==============================================================
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Controlling the Style of Memo - 26 - March 1990
+
+
+
+
+ 6.5. Printing Short Memos
+
+ If the body of your memo is ten lines or less, you may wish to use the
+ standard short form memo that is described in the Office Procedures
+ Manual. The standard short form memo is double spaced, and the
+ paragraphs are indented.
+
+ To produce this type of memo, add the following command to the
+ preamble section of your file.
+
+ \shortmemostyle
+
+ If you use this short memo style and the body of your memo is over one
+ page long, you will get a warning message when you run LaTeX.
+
+
+ 6.6. Using Preprinted Memo Paper
+
+ You can use Laboratory memo paper with the preprinted header on it by
+ including the following command in the preamble section of your file:
+
+ \headerfonts{memopaper}
+
+ This command prints your header information next to the preprinted
+ labels, but the information may not line up with the memo paper's
+ labels correctly. This happens because of the different types of
+ printers. If your printer is not lining up the memo paper correctly,
+ put the following commands in the preamble section of your file to
+ shift your printed information and correct this problem.
+
+ \memopaperhcorr{distance}
+ \memopapervcorr{distance}
+
+ The \memopaperhcorr command corrects the horizontal positioning, and
+ the \memopapervcorr command corrects the vertical positioning. The
+ {distance} parameter is the vertical or horizontal distance to move
+ the text and can be an integer or decimal number. This distance can
+ be expressed in inches (in), centimeters (cm), points (pt), picas
+ (pc), or millimeters (mm) and can be positive or negative. When you
+ need to adjust the paper horizontally (using \memopaperhcorr), a
+ positive distance moves the printed material to the right, and a
+ negative distance moves the print to the left. When you want to
+ adjust the paper vertically (using \memopapervcorr), a positive
+ distance moves the printed material down on the paper, and a negative
+ distance moves the print up the page.
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 27 - Controlling the Style of Memo
+
+
+
+ The following table shows the effect of each command on the movement
+ of the memo paper. The n's indicate a number, and the u's indicate
+ the abbreviation for the unit of measure (e.g., in for inches).
+
+
+ COMMAND RESULTS
+ ____________________ _________________________
+
+ \memopaperhcorr{+nu} moves text to the right
+ \memopaperhcorr{-nu} moves text to the left
+
+ \memopapervcorr{+nu} moves text down the paper
+ \memopapervcorr{-nu} moves text up the paper
+
+
+ The following example will move the printed material of the memo to
+ the right 1 inch and up 2 inches.
+
+
+ ==============================================================
+
+ memopaperhcorr{1in}
+ memopapervcorr{-2in}
+
+ ==============================================================
+
+
+
+
+ _____________________________________________________
+
+ If you use the same printer to print memos
+ routinely, you can figure out which distances
+ line up the text properly for your printer and
+ use those distances for each memo. You must
+ include these commands in each memo file if the
+ text of your memo needs some adjustment.
+ _____________________________________________________
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Summarizing the Memo Commands - 28 - March 1990
+
+
+
+ APPENDIX A: SUMMARIZING THE LATEX MEMO COMMANDS
+ ______________________________________________________________________
+
+
+ Summary of Memo Commands
+
+ Command Description
+ ___________________________ _____________________________________________
+ ___________________________ _____________________________________________
+
+ Described in Chapter 3
+ 11pt
+ \documentstyle| |{memo} sets up memo style (The DEFAULT is 10pt if the
+ |12pt | point size and [ ] are left out.)
+
+ \to{namelist} memo recipient(s)
+
+ \thru{namelist} person(s) to send memo through
+
+ \from{namelist} memo originator(s)
+
+ \symbol{group} group identification
+
+ \serialnumber{id} correspondence identification number
+
+ \subject{text} subject line
+
+ \date{text} date on memo (DEFAULT is the date you run LaTeX.)
+
+ \mailstop{text} originator's laboratory mail stop
+
+ \telephone{text} last five digits of originator's telephone number
+
+ \reference{text} supplies the reference lines under the subject line
+
+ \signature{name} leaves room for originator's signature
+
+ \signer{initials} initials of signer (Use with \signature.)
+
+ \originator{initials} initials of originator for initial line
+
+ \typist{initials} initials of typist for initial line
+
+ \approval{name} prints a line for approval signature
+
+ \enc{list} list of enclosures
+
+ \encas gives the line: Enc. a/s (enclosed as stated)
+
+ \attachments{list} list of attachments
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 29 - Summarizing the Memo Commands
+
+
+
+ \cy{list} copy list
+
+ \distribution{list} distribution list (Use with \to{Distribution}.)
+
+ Described in Chapter 6
+
+ \cypagebreak breaks page before copy list
+
+ \attachmentspagebreak breaks page before list of attachments
+
+ \distributionpagebreak breaks page before distribution list
+
+ \encpagebreak breaks page before list of enclosures
+
+ \shortmemostyle format for short memos (double-spacing and
+ indented paragraphs)
+
+ \headerfonts{font_type} determines font for header of memo
+ texfonts (DEFAULT)
+ lafonts
+ postscript
+ memopaper
+
+ \bodyfonts{font_type} determines font for body of memo
+ texfonts (DEFAULT)
+ postscript
+
+ \typeface{type} sets typeface for body of memo
+ tt (DEFAULT)
+ rm
+
+ \classlabel{label} prints classification labels
+ u (No label is the DEFAULT.)
+ s
+ c
+
+ \memopaperhcorr{distance} corrects horizontal alignment of memo paper
+
+ \memopapervcorr{distance} corrects vertical alignment of memo paper
+
+ Described in Chapter 4
+
+ \begin{document} begins memo
+
+ \opening prints opening of memo
+
+ \closing prints closing of memo
+
+ \end{document} ends memo
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Syntax Rules - 30 - March 1990
+
+
+
+ APPENDIX B: SYNTAX RULES
+ ______________________________________________________________________
+
+ The following syntax rules apply to the LaTeX memo commands:
+
+ o Commands in the preamble are not order dependent. That is, you
+ can specify them in any order.
+
+ o Spaces before and after { } are ignored.
+
+ o You can continue a command over multiple lines. However, you
+ should split the line at a space.
+
+ o You can specify only one preamble command per line.
+
+ o You can separate fields inside { } by \\ , or you can repeat the
+ command with new information inside { }.
+
+
+ Note that these rules do not apply to the standard LaTeX commands (for
+ example, \documentstyle, \begin{document}, and \end{document}).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 31 - Syntax Rules
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Syntax Rules - 32 - March 1990
+
+
+
+ APPENDIX C: EXAMPLE MEMOS
+ ______________________________________________________________________
+
+ This appendix contains examples of memos that have been created with
+ the LaTeX memo commands. These four examples show the four types of
+ headers that are available for memos. They also show some of the
+ various combinations of body fonts and typefaces. The body of each
+ memo explains what features to notice about that particular memo. For
+ each example, we have given the LaTeX source file that produced the
+ memo, followed by the resulting memo.
+
+ We have reduced the size of the actual example memos for display
+ purposes.
+
+ Example #1
+
+ \documentstyle[12pt]{memo}
+ \to{A. S. Harris, X-7, MS B257}
+ \from{S. R. Groves, X-7, MS B257}
+ \symbol{X-7}
+ \subject{This Is a Test Memo}
+ \mailstop{B257}
+ \telephone{7-4555}
+ \originator{srg}
+ \typist{jak}
+ \cy{T. J. Benton, WX-5, MS G780 \\ A. L. Salazar, X-7, MS B257}
+ \headerfonts{texfonts}
+ \typeface{tt}
+ \bodyfonts{texfonts}
+
+ \begin{document}
+ \opening
+
+ This memo shows what a typical memo might look like. It uses the
+ texfonts option for the header and the body of the memo. Most
+ computers are already set up to use these fonts. It also has the
+ typewriter typeface for the body of the memo with a point size of 12.
+
+ Remember that \LaTeX\ interprets a blank line as the start of a new
+ paragraph. Also remember that any of the special characters \#,
+ \$, \%, \&, \{, and \} must be preceded by a backslash. To
+ produce double quotes in typewriter typeface, use the " key on your
+ keyboard.
+
+ Notice that since no \verb"\thru" command is included in the
+ preamble section, the header does not contain that category line.
+ The \verb"\date" command is also left out of the preamble, so the
+ date of the memo defaults to the date at the time that \LaTeX\ was
+ run.
+
+ Also notice the order of the memo commands in this memo. The
+ \verb"\documentstyle" command begins the preamble section, and the
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 33 - Example Memos
+
+
+
+ \verb"\bodyfonts" command ends the preamble section. After the
+ preamble section, you start the document section with
+ \verb"\begin{document}" and \verb"\opening" commands. The
+ \verb"\opening" command causes \LaTeX\ to print the opening of
+ your memo.
+
+ \closing
+ \end{document}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Example Memos - 34 - March 1990
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 35 - Example Memos
+
+
+
+ Example #2
+
+ \documentstyle[12pt]{memo}
+ \to{Distribution}
+ \thru{G. P. Tucker}
+ \from{E. R. Randolph}
+ \symbol{C--3}
+ \subject{Using Lists in Memos}
+ \mailstop{B265}
+ \telephone{7--7028}
+ \originator{err}
+ \distribution{H. P. Phillips, C--2, MS B263 \\ R. J. Bales,
+ C--3, MS B265}
+ \headerfonts{lafonts}
+ \typeface{rm}
+
+ \begin{document}
+ \opening
+
+ This memo has a header that was created by lafonts. As you can see,
+ these fonts produce a header that is almost identical to the
+ preprinted memo paper header. The header includes the THRU category
+ because the \verb"\thru" command is in the preamble section.
+
+ This memo uses the following defaults:
+ \begin{itemize}
+ \item texfonts for the body
+ \item the date that the memo was run through \LaTeX
+ \end{itemize}
+
+ Hopefully this sample memo helps you remember how to use bulleted
+ lists with \LaTeX.
+
+ Also notice the use of two hyphens between the numbers in the
+ opening of the memo. You can use this feature of \LaTeX\ with
+ Roman type to produce a longer dash between numbers.
+
+ \closing
+ \end{document}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Example Memos - 36 - March 1990
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 37 - Example Memos
+
+
+
+ Example #3
+
+ \documentstyle{memo}
+ \to{S. D. Thompson}
+ \from{M. B. Thomas}
+ \symbol{C-10}
+ \serialnumber{344}
+ \subject{PostScript Printing of Memos}
+ \date{January 1, 1987}
+ \mailstop{B296}
+ \telephone{7-7877}
+ \reference{Your Memo No.\ 298}
+ \originator{mbt}
+ \typist{hjt}
+ \approval{T. J. Dawkins \\ Team Leader}
+ \shortmemostyle
+ \headerfonts{postscript}
+ \bodyfonts{postscript}
+
+ \begin{document}
+ \opening
+
+ This memo is in the short memo format. It was printed with a
+ PostScript printer using PostScript fonts. The header fonts are
+ also printed with the PostScript fonts. The print defaulted to a
+ point size of 10.
+
+ Notice how to input a sentence that ends in an uppercase letter,
+ such as a sentence about CFS\@. This makes the space after the
+ period the correct amount of space. Also notice the date is
+ included so that the date will appear as January 1, 1987, even
+ though that date is not the date at the time of printing.
+
+ \closing
+ \end{document}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Example Memos - 38 - March 1990
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 39 - Example Memos
+
+
+
+ Examples #4
+
+ \documentstyle[11pt]{memo}
+ \to{R. K. Thome, IS-11, MS D418}
+ \from{L. G. Gordon, M-4, MS P940}
+ \symbol{M-4}
+ \subject{Memo Printed on Memo Paper}
+ \mailstop{P940}
+ \telephone{7-0923}
+ \signature{L. G. Gordon \\ Section Leader}
+ \signer{lgg}
+ \typist{lbm}
+ \headerfonts{memopaper}
+ \bodyfonts{postscript}
+ \typeface{rm}
+ \memopaperhcorr{.1in}
+ \memopapervcorr{.05in}
+
+ \begin{document}
+ \opening
+
+ This memo was printed on preprinted memo paper. Notice how the TO
+ and FROM headers line up with the names. The body fonts are the
+ postscript fonts, and the typeface is in Roman type.
+
+ Emphasized text (like {\em this}) is printed as italics.
+
+ Notice that you can use the equation formatting that TeX and LaTeX
+ are known for inside your memo. This feature is useful if your
+ memos contain equations like
+ \[ x = \frac{-b \pm \sqrt{b^{2}-4ac} } {2a} \]
+
+ You can also use tables like the following:
+
+ \begin{tabular}{c c c c c}
+ \sl Year & \sl Simple Interest & \sl Annual Comp. & \sl Daily Comp. &
+ \sl Continuous\\
+ 0 & 5000.00 & 5000.00 & 5000.00 & 5000.00\\
+ 1 & 5400.00 & 5400.00 & 5416.37 & 5416.44\\
+ 2 & 5800.00 & 5832.00 & 5867.42 & 5867.55
+ \end{tabular}
+
+ \closing
+ \end{document}
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Installing the Style File - 40 - March 1990
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 41 - Installing the Style File
+
+
+
+ APPENDIX D: INSTALLING THE LATEX MEMO STYLE FILE
+ ______________________________________________________________________
+
+ The LaTeX memo style file must be installed on your computer before
+ you can use the LaTeX memo commands. If you are not sure if the style
+ file has been installed, check with your system manager. If you are
+ responsible for installing the style file, then this appendix is for
+ you.
+
+
+ _____________________________________________________
+
+ This appendix assumes you already have TeX and
+ LaTeX running on your system.
+ _____________________________________________________
+
+
+
+ This appendix describes the procedures for finding the instructions
+ for installing the LaTeX memo style file on these computers:
+
+ o IBM PC
+
+ o Sun workstation
+
+ o Apollo workstation
+
+ o VAX/VMS
+
+ o VAX/UNIX
+
+
+ To install the memo style file, you need to be a validated user of the
+ Los Alamos Integrated Computing Network (ICN). You must also be
+ familiar with the GET command of the MASS utility and with the NTEXT
+ utility.
+
+
+ _____________________________________________________
+
+ For more information about the MASS utility, see
+ the MASS Interface to the Common File System
+ reference manual. For more information about
+ the NTEXT utility, see the NTEXT Reference
+ (VMS-7).
+ _____________________________________________________
+
+
+
+ You will be using the following files in the installation procedures;
+ they are stored on the Common File System (CFS) and are in standard
+ text format.
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Installing the Style File - 42 - March 1990
+
+
+
+ o readme.std-tells you where to find the memo style file and
+ includes installation instructions. For VMS, this file is named
+ latexmemo.std.
+
+ o memo.sty-the style file that is used when you run LaTeX on your
+ memo input file.
+
+ o memotest.tex-a test memo that you can use to see if you've
+ installed the memo style file correctly.
+
+ A commented version of the memo.sty file, memo.doc, is available. If
+ you want to make your own changes to the memo.sty file, you will find
+ this commented version useful. Check the readme.std file for the CFS
+ pathname for memo.doc.
+
+
+ D.1. ON THE IBM PC
+
+
+ Following are the steps you need to follow to find out how to install
+ the memo style file on your IBM PC:
+
+ 1. From your PC, sign on to the ICN computer of your choice by
+ using VTERM or some other communications software.
+
+ 2. While on the ICN computer,
+
+ Use the MASS utility GET command to retrieve the following
+ file from CFS:
+
+ /tex/macros/c-2/latexmemo/ibmpc/readme.std
+
+ Use the NTEXT utility to convert readme.std to native text
+ format.
+
+ Look in the NTEXTed readme.std file to find the complete
+ installation instructions.
+
+
+
+ D.2. ON THE SUN WORKSTATION
+
+
+ Following are the steps you need to follow to find out how to install
+ the LaTeX memo style file on the Sun workstation:
+
+ 1. Use the MASS utility GET command to retrieve the following file
+ from CFS:
+
+ /tex/macros/c-2/latexmemo/sununix/readme.std
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 43 - Installing the Style File
+
+
+
+ 2. Use the NTEXT utility to convert the file from standard text
+ format to native text format.
+
+ 3. Look in the NTEXTed readme.std for the complete installation
+ instructions.
+
+
+
+ D.3. ON THE APOLLO WORKSTATION
+
+
+ Following are the steps you need to follow to find out how to install
+ the LaTeX memo style file on the Apollo workstation:
+
+ 1. Use the MASS utility GET command to retrieve the following file
+ from CFS:
+
+ /tex/macros/c-2/latexmemo/apollo/readme.std
+
+ 2. Use the NTEXT utility to convert the file from standard text
+ format to native text format.
+
+ 3. Look in the NTEXTed readme.std file for the complete
+ installation instructions.
+
+
+
+ D.4. ON VAX/VMS
+
+
+ Following are the steps you need to follow to find out how to install
+ the LaTeX memo style file on VAX/VMS:
+
+ 1. Use the MASS utility GET command to retrieve the following file
+ from CFS:
+
+ /utility/vax/latexmemo.std
+
+ 2. Use the NTEXT utility to convert the file from standard text
+ format to native text format.
+
+ 3. Look in the NTEXTed latexmemo.sty for the complete installation
+ instructions.
+
+
+
+ D.5. ON VAX/UNIX
+
+
+ Following are the steps you need to follow to find out how to install
+ the LaTeX memo style file on VAX/UNIX:
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Installing the Style File - 44 - March 1990
+
+
+
+ 1. Use the MASS utility GET command to retrieve the following file
+ from CFS:
+
+ /tex/macros/c-2/latexmemo/unix/readme.std
+
+ 2. Use the NTEXT utility to convert the file from standard text
+ format to native text format.
+
+ 3. Look in the NTEXTed readme.std file for the complete
+ installation instructions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 45 - Warning and Error Messages
+
+
+
+ APPENDIX E. WARNING AND ERROR MESSAGES
+ ______________________________________________________________________
+
+ You can receive two types of error messages when running your memo
+ file through LaTeX-error messages from doing something wrong with the
+ memo commands and error messages from doing something wrong with the
+ standard LaTeX commands. The error messages that come from standard
+ LaTeX commands are interactive and are explained in the chapter titled
+ "LaTeX Errors" in An Introduction to LaTeX by Michael Urban. The
+ error messages that come from the memo commands are not interactive,
+ and the fatal error messages will cause LaTeX to abort. The memo
+ command error messages are listed below.
+
+
+ E.1. WARNING MESSAGES
+
+
+ The following are warning messages that you might receive when using
+ the LaTeX memo commands. These messages remind you that you might be
+ leaving something important out of your memo; they do not affect the
+ printing of your memo.
+
+
+ E.1.1. Leaving Out Information
+
+
+ These messages occur if you have left out one of these necessary memo
+ commands. Omitting the \originator command just leaves the
+ originator's initials out of the initial line; leaving out the other
+ commands mentioned in these warning messages causes one of the
+ categories at the top of the memo to be left unfilled.
+
+
+ Warning: you have not called \to before calling \opening.
+
+ For example, use
+
+ \to{George Benford, EX-4, MS M775}
+
+ Warning: you have not called \from before calling \opening.
+
+ For example, use
+
+ \from{Ann Turner, AB-DO, MS D405}
+
+
+ Warning: you have not called \symbol before calling \opening.
+
+ For example, use
+
+ \symbol{C-2}
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Warning and Error Messages - 46 - March 1990
+
+
+
+ Warning: you have not called \subject before calling \opening.
+
+ For example, use
+
+ \subject{Building Schedule}
+
+
+ Warning: you have not called \originator before calling \opening.
+
+ For example, use
+
+ \originator{BJD}
+
+ Warning: you have not called \mailstop before calling \opening.
+
+ For example, use
+
+ \mailstop{B233}
+
+
+ Warning: you have not called \telephone before calling \opening.
+
+ For example, use
+
+ \telephone{7-1102}
+
+
+ E.1.2. Memo Too Long for \shortmemostyle
+
+
+ Warning: Use of the \shortmemostyle macro is intended
+ for use with memos of ten lines or less.
+
+
+ E.1.3. Printing Too Many Lines in Headers
+
+
+
+ Warning: You have printed more than 2 lines in the TO portion
+ of the memo header.
+
+ Warning: You have printed more than 4 lines in the THRU portion
+ of the memo header.
+
+ Warning: You have printed more than 2 lines in the FROM portion
+ of the memo header.
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 47 - Warning and Error Messages
+
+
+
+ E.1.4. Contradictory Information
+
+
+ There are pairs of commands that cannot both be specified within the
+ same memo.
+
+ Warning: You have used both \enc and \encas.
+ Use one or the other but not both.
+ "Enc. a/s" will not be printed on this memo.
+
+ Warning: You have used both \attachments and \attachmentas.
+ Use one or the other but not both.
+ "Attachment a/s" will not be printed on this memo.
+
+ Warning: You have used both \attachments and \attachmentsas.
+ Use one or the other but not both.
+ "Attachments a/s" will not be printed on this memo.
+
+ Warning: You have used both \attachmentas and \attachmentsas.
+ Use one or the other but not both.
+ "Attachment a/s" will not be printed on this memo.
+
+
+
+ E.2. FATAL ERRORS
+
+
+ The following errors will cause your memo to not be printed. If you
+ receive one of these error messages, you must go back to your
+ filename.tex file to correct the error and then rerun the file through
+ LaTeX.
+
+
+ E.2.1. Invalid Classification Label
+
+
+ Note that x in the following error message is replaced with the actual
+ invalid classification label you specified in your memo file.
+
+
+ Fatal error: \classlabel{x} calls for an invalid classification label.
+
+ To print CONFIDENTIAL on the top and bottom of your memo,
+ use \classlabel{c}
+
+ To print SECRET on the top and bottom of your memo,
+ use \classlabel{s}
+
+ To print UNCLASSIFIED on the top and bottom of your memo,
+ use \classlabel{u}
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Warning and Error Messages - 48 - March 1990
+
+
+
+ If you do not want a classification label on your memo,
+ use \classlabel{}
+ or do not use the \classlabel command.
+
+ Change your file, and rerun LaTeX.
+
+
+ E.2.2. Duplicating \classlabel Commands
+
+
+ Fatal error: you have called \classlabel more than once.
+
+ You are only allowed to declare one classification label per memo.
+
+ To print CONFIDENTIAL on the top and bottom of your memo,
+ use \classlabel{c}
+
+ To print SECRET on the top and bottom of your memo,
+ use \classlabel{s}
+
+ To print UNCLASSIFIED on the top and bottom of your memo,
+ use \classlabel{u}
+
+ If you do not want a classification label on your memo,
+ use \classlabel{}
+ or do not use the \classlabel command.
+
+ Change your file, and rerun LaTeX.
+
+
+ E.2.3. Specifying an Invalid Typeface
+
+
+ Note that typename in the following error message is replaced with the
+ actual invalid typeface you specified in your memo file.
+
+
+ Fatal error: \typeface{typename} calls for an invalid typeface.
+
+ Use \typeface{tt} or \typeface{rm}
+
+ Change your file, and rerun LaTeX.
+
+
+ E.2.4. Specifying an Invalid Font for Memo Body
+
+
+ Note that fontname in the following error message is replaced with the
+ actual invalid font you specified in your memo file.
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ March 1990 - 49 - Warning and Error Messages
+
+
+
+ Fatal error: \bodyfonts{fontname} calls for an invalid font.
+
+ Use \bodyfonts{texfonts} or \bodyfonts{postscript}
+ depending on what fonts are available on your machine.
+
+ Using \bodyfonts{} will give you the default fonts.
+
+ Change your file, and rerun LaTeX.
+
+
+ E.2.5. Specifying an Invalid Font for Memo Header
+
+
+ Note that fontname in the following error message is replaced with the
+ actual invalid font you specified in your memo file.
+
+
+ Fatal error: \headerfonts{fontname} calls for an invalid font.
+
+ Use \headerfonts{lafonts}, \headerfonts{texfonts},
+ or \headerfonts{postscript} depending on what fonts
+ are available on your machine.
+
+ Using \headerfonts{} will give you the default fonts.
+
+ Use \headerfonts{memopaper} if you wish to print your memo
+ on pre-printed memo paper.
+
+ Change your file, and rerun LaTeX.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ March 1990 - 51 - Reader Comments Form
+
+
+
+ READER COMMENTS FORM
+ ______________________________________________________________________
+
+
+ Date_______________ Name________________________________________
+
+ Group_________________ Mail Stop____________ Phone_______________
+
+ Organization* _______________________________________________________
+
+ Street* _____________________________________________________________
+
+ City/State/Zip* ____________________________________________________
+ *PLEASE COMPLETE IF YOU ARE NOT AT LOS ALAMOS.
+
+ PLEASE ANSWER THE FOLLOWING QUESTIONS. Your comments help us improve
+ the quality and usefulness of this documentation.
+
+ Are you an experienced computer user? yes _____ no _____
+
+ Is the information in this document easy to find? yes _____ no _____
+
+ Are the purpose and function of each chapter clear? yes _____ no _____
+
+ Does this document provide correct information? yes _____ no _____
+
+ Does this document fully explain the subject? yes _____ no _____
+
+ Are there enough examples in this document? yes _____ no _____
+
+ Did this document meet your expectations? yes _____ no _____
+
+ Do you think you will use this document again
+ when your needs change? yes _____ no _____
+
+ Please use the space below (and additional pages if needed) for
+ questions not addressed above or for expansion of responses. In
+ particular, please explain responses marked "no." When possible,
+ please give specific page references.
+ ______________________________________________________________________
+
+ ______________________________________________________________________
+
+ ______________________________________________________________________
+
+ Thank you for your help.
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ fold
+
+ ______________________________________________________________________
+
+
+
+
+
+
+
+
+ LOS ALAMOS NATIONAL LABORATORY
+ COMPUTER DOCUMENTATION
+ MAIL STOP B253
+ LOS ALAMOS, NEW MEXICO 87545
+
+
+
+
+
+
+
+ ______________________________________________________________________
+
+ fold and staple
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ March 1990 - 53 - Documentation Request Form
+
+
+
+ DOCUMENTATION REQUEST FORM
+ ______________________________________________________________________
+
+
+ Z-Number__________ Name_______________________ Date_____________
+
+ Group_________________ Mail Stop____________ Phone_____________
+
+ Cost Code__________________________ Program Code____________________
+
+ Organization* ________________________________________________________
+
+ Street* ______________________________________________________________
+
+ City/State/Zip* ______________________________________________________
+ *PLEASE COMPLETE IF YOU ARE NOT AT LOS ALAMOS.
+
+ DOCUMENT ORDER**
+
+ Send me the following documents:
+
+ [ ] An Introduction to LaTeX, by Michael Urban. (cic#913)
+
+ [ ] LaTeX: A Document Preparation System, by Leslie Lamport.
+ (cic#560)
+
+ [ ] The MASS Interface to the Common File System. (cic#388)
+
+ [ ] NTEXT (VMS-7). (cic#418)
+
+ [ ] DVIPAGES: TEX DVI to PAGES Quick Steps. (cic#939)
+
+ [ ] _________________________________________________________________
+ **Documents can also be ordered by using ECCOS, the Electronic Card
+ Catalog and Ordering System. Access ECCOS by following these
+ directions.
+ - Choose CCVAX from the port selector menu or from the menu
+ on Machine G.
+ - When CCVAX prompts for Username, type CICUSR.
+ - At the prompts, type your Z-number and ICN password.
+ - Wait for the menu to appear on the screen and follow its
+ directions.
+
+ Monthly Computing Publications Subcription Requests
+
+ o Computing and Communications Division News [] Start [] Cancel
+
+ o ICN Change Bulletin [] Start [] Cancel
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ fold
+
+ ______________________________________________________________________
+
+
+
+
+
+
+
+
+ LOS ALAMOS NATIONAL LABORATORY
+ COMPUTING INFORMATION CENTER
+ MAIL STOP M996
+ LOS ALAMOS, NEW MEXICO 87545
+
+
+
+
+
+
+
+ ______________________________________________________________________
+
+ fold and staple
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ March 1990 - 55 - Index
+
+
+
+ INDEX
+ ______________________________________________________________________
+
+ Body of memo, 18 fatal errors, 49
+ duplicating classification, 48
+ Classification labeling, 24-25 invalid classification, 47-48
+ Commands invalid font, 48-49
+ \approval, 13-14 invalid typeface, 48
+ \attachments, 15-16 warnings, 45-47
+ \attachmentsas, 16 contradictory information, 47
+ \attachmentspagebreak, 25 leaving out information, 45-46
+ \begin{document}, 18 memo too long, 46
+ \bodyfonts, 23-24 printing too many lines, 46
+ \classlabel, 24-25 Error Messages, 44
+ \closing, 18 Examples, 32-41
+ \cy, 16 lafonts header, 35-37
+ \cypagebreak, 25 memo paper, 39-41
+ \date, 10 postscript fonts header, 37-39
+ \distribution, 16-17 short memo format, 37-39
+ \distributionpagebreak, 25 texfonts header, 32-35
+ \documentstyle typical memo, 32-35
+ explanation of, 7-8
+ point sizes, selecting, 7-8 Fonts
+ \enc, 14-15 body of memo, 23-24
+ \encas, 14-15 header of memo, 22-23
+ \enclosurespagebreak, 25 lafonts, 22-23
+ \end{document}, 18-19 postscript fonts, 22-24
+ \from, 8 texfonts, 22-24
+ \headerfonts, 22-23
+ \mailstop, 10-11 General format of a memo, 5
+ \memopaperhcorr, 26-27
+ \memopapervcorr, 26-27 Installing the memo style file,
+ \newpage, 25 41-44
+ \opening, 18 Apollo workstation, 43
+ \originator, 12-13 IBM PC, 42
+ \reference, 11-12 Sun workstation, 42-43
+ \serialnumber, 9 VAX/UNIX, 43-44
+ \shortmemostyle, 25-26 VAX/VMS, 43
+ \signature, 12
+ \signer, 12-13 LaTeX video course, 4
+ \subject, 9-10
+ \symbol, 9 Memo paper, 22-23
+ \telephone, 10-11 lining up, 26-27
+ \thru, 8-9
+ \to, 8 Office Procedures Manual, 4
+ \typeface, 23
+ \typist, 12-13 Page breaks, controlling, 25
+ \}attachmentas, 16 Point sizes, changing, 7-8
+ Preamble, 5-17
+ Error messages, 49 Printing your memo, 19-21
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+ Index - 56 - March 1990
+
+
+
+ Short memo form, 25-26
+ Syntax rules, 30
+ Systems that can use memo
+ commands, 3
+
+ Typefaces
+ Roman, 23
+ typewriter, 23
+
+ Warning Messages, 44
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LaTeX Memo Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ______________________________________________________________________
+
+ Copyright, 1990, The Regents of the University of California. This
+ document was produced under a U.S. Government contract (W-7405-ENG-36)
+ by the Los Alamos National Laboratory, which is operated by the
+ University of California for the U.S. Department of Energy. The U.S.
+ Government is licensed to use, reproduce, and distribute this
+ document. Permission is granted to the public to copy and use this
+ document without charge, provided that this notice and any statement
+ of authorship are reproduced on all copies. Neither the Government
+ nor the University makes any warranty, express or implied, or assumes
+ any liability or responsibility for the use of this document.
+
+ All Los Alamos computers, computing systems, and their associated
+ communications systems are to be used only for official business. The
+ Computing and Communications Division and the Operational
+ Security/Safeguards Division have the responsibility and the authority
+ to periodically audit users' files.
+
+
+
+
+
+
+
+
+
diff --git a/macros/latex209/contrib/lamemo/memo.sty b/macros/latex209/contrib/lamemo/memo.sty
new file mode 100644
index 0000000000..b6d3efef55
--- /dev/null
+++ b/macros/latex209/contrib/lamemo/memo.sty
@@ -0,0 +1,1634 @@
+\typeout{Document Style 'memo'. Released March 28, 1990}
+\def\thebibliography#1{%
+\par%
+\vspace{\baselineskip}%
+REFERENCES%
+\list%
+{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+\advance\leftmargin\labelsep
+\usecounter{enumi}}%
+\def\newblock{\hskip .11em plus .33em minus -.07em}%
+\sloppy\clubpenalty4000\widowpenalty4000
+\sfcode`\.=1000\relax}%
+\let\endthebibliography=\endlist
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+\long\def\@makecaption#1#2{%
+\vskip 10pt
+\setbox\@tempboxa\hbox{#1: #2}%
+\ifdim \wd\@tempboxa >\hsize %
+#1: #2\par %
+\else %
+\hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+\fi
+}%
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+\def\@ptsize{0} %
+\@namedef{ds@11pt}{\def\@ptsize{1}} %
+\@namedef{ds@12pt}{\def\@ptsize{2}} %
+\@twosidefalse
+\def\ds@draft{\overfullrule 5pt} %
+\@options
+\lineskip 1pt %
+\normallineskip 1pt
+\def\baselinestretch{1}
+\ifcase \@ptsize\relax %
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\let\@listi\@listI} %
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or %
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} %
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 4pt plus 2pt minus 2pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or %
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} %
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %
+\parsep 4.5pt plus 2pt minus 1pt
+\itemsep \parsep
+\topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt%
+\def\@listi{\leftmargin\leftmargini %
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+\normalsize %
+\marginparwidth 90pt %
+\marginparsep 11pt %
+\marginparpush 5pt %
+\footheight 12pt %
+\footskip 25pt %
+\footnotesep 12pt %
+\skip\footins 10pt plus 2pt minus 4pt %
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\@maxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\parindent 0pt %
+\partopsep 0pt %
+\@lowpenalty 51 %
+\@medpenalty 151 %
+\@highpenalty 301 %
+\@beginparpenalty -\@lowpenalty %
+\@endparpenalty -\@lowpenalty %
+\@itempenalty -\@lowpenalty %
+\def\theequation{\arabic{equation}}
+\arraycolsep 5pt %
+\arrayrulewidth .4pt %
+\doublerulesep 2pt %
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt %
+\fboxrule = .4pt %
+\def\footnoterule{\kern-1\p@
+\hrule width .4\columnwidth
+\kern .6\p@} %
+\long\def\@makefntext#1{\noindent %
+\hangindent 5pt\hbox
+to 5pt{\hss $^{\@thefnmark}$}#1}
+\def\today{\ifcase\month\or
+January\or February\or March\or April\or May\or June\or
+July\or August\or September\or October\or November\or December\fi
+\space\number\day, \number\year}
+\pagenumbering{arabic} %
+\onecolumn %
+\@fileswtrue
+\newlength{\@lengthlabel}
+\newlength{\@lengthrule}
+\newlength{\@lengthdate}
+\newlength{\@lengthname}
+\newcounter{@countlist}
+\newcount\@countverticalposition
+\newcount\@countclasssep
+\newcount\@counttemp
+\newcount\@counttemptwo
+\newcount\@countto
+\newcount\@countfrom
+\newcount\@countthru
+\newcount\@countcy
+\newcount\@countattachments
+\newcount\@countreference
+\newcount\@countenc
+\newcount\@countdistribution
+\newcount\@countleftcolon
+\newcount\@countrightcolon
+\newcount\@countleftheader
+\newcount\@countrightheader
+\newcount\@countmemolist
+\newtoks\@toksto
+\newtoks\@toksfrom
+\newtoks\@toksthru
+\newtoks\@tokscy
+\newtoks\@toksattachments
+\newtoks\@toksenc
+\newtoks\@toksreference
+\newtoks\@toksdistribution
+\newtoks\@toksheaderone
+\newtoks\@toksheadertwo
+\newtoks\@toksbeforenewline
+\newtoks\@toksafternewline
+\newtoks\@toksbeforecomma
+\newtoks\@toksempty
+\newtoks\@toksblank
+\newtoks\@toksnewline
+\newtoks\@toksremaining
+\newtoks\@toksmultipleto
+\newtoks\@toksitem
+\newsavebox{\@boxtemp}
+\newsavebox{\@boxclasspage}
+\newsavebox{\@boxpagetwoheader}
+\newdimen\@dimentoppagetwo
+\newdimen\@dimenspacetosubject
+\newdimen\@dimenpagetwoheader
+\newdimen\@dimenfirstpageleftheader
+\newdimen\@dimenwdtt
+\newdimen\@dimenmemopaperhcorr
+\newdimen\@dimenmemopapervcorr
+\newdimen\@dimenspaceaftercolon
+\newdimen\descriptionmargin
+\newdimen\@dimenversemargin
+\newdimen\@dimentemp
+\newskip\@parskipsave
+\newif\if@comma
+\newif\if@newline
+\newif\if@notvoidtoks
+\newif\if@toksnotequal
+\newif\if@beenhere
+\newif\if@somethingbefore
+\newif\if@continueloop
+\newif\if@cmfonts
+\newif\if@closing
+\clubpenalty=10000
+\widowpenalty=10000
+\textheight 724pt
+\topmargin -72pt%
+\topskip 0pt
+\headheight 0pt
+\headsep 0pt
+\footskip 43pt
+\textwidth 432pt
+\@countverticalposition 0
+\@countclasssep 24 %
+\@toksempty={}
+\@toksblank={ }
+\@toksnewline={\\}
+\@dimenpagetwoheader 180pt
+\@dimenfirstpageleftheader 220pt
+\@dimenmemopaperhcorr 0pt
+\@dimenmemopapervcorr 0pt
+\@dimenspaceaftercolon 12pt
+\def\@blank{ }%
+\def\@tt{tt}\def\@rm{rm}%
+\def\@texfonts{texfonts}%
+\def\@lafonts{lafonts}\def\@postscript{postscript}%
+\def\@memopaper{memopaper}%
+\def\@standard{standard}%
+\def\@short{short}\def\@long{long}\def\@underscore{underscore}%
+\def\@ibmpc{ibmpc}\def\@vaxvms{vaxvms}\def\@vaxunix{vaxunix}%
+\def\@sununix{sununix}\def\@apollo{apollo}%
+\def\to#1{\@toksinput{to}{#1}}%
+\def\from#1{\@toksinput{from}{#1}}%
+\def\cy#1{\@toksinput{cy}{#1}}%
+\def\thru#1{\@toksinput{thru}{#1}}%
+\def\attachments#1{\@toksinput{attachments}{#1}}%
+\def\reference#1{\@toksinput{reference}{#1}}%
+\def\distribution#1{\@toksinput{distribution}{#1}}%
+\def\enc#1{\@toksinput{enc}{#1}}%
+\def\typeface#1{\def\@typeface{#1}%
+\@unspaceleft\@typeface \@unspaceright\@typeface}%
+\def\headerfonts#1{\def\@headerfonts{#1}%
+\@unspaceleft\@headerfonts \@unspaceright\@headerfonts}%
+\def\bodyfonts#1{\def\@bodyfonts{#1}%
+\@unspaceleft\@bodyfonts \@unspaceright\@bodyfonts
+\ifx\@bodyfonts\@postscript \@psdefclasslabel\fi}%
+\def\subject#1{%
+\def\@subject{#1}%
+\@upperunspaceleft\@subject}%
+\def\symbol#1{\def\@symbol{#1}\@unspaceright\@symbol}%
+\def\serialnumber#1{\def\@serialnumber{#1}\@unspaceleft\@serialnumber
+\@unspaceright\@serialnumber}%
+\def\mailstop#1{\def\@mailstop{#1}\@unspaceright\@mailstop}%
+\def\telephone#1{\def\@telephone{#1}\@unspaceleft\@telephone}%
+\def\date#1{\def\@date{#1}\@unspaceright\@date}%
+\def\shortmemostyle{\def\@shortmemostyle{}}%
+\def\signer#1{%
+\def\@signer{#1}%
+\@unspaceright\@signer
+\@upperunspaceleft\@signer}%
+\def\originator#1{%
+\def\@originator{#1}%
+\@unspaceright\@originator
+\@upperunspaceleft\@originator}%
+\def\typist#1{%
+\def\@typist{#1}%
+\ifx\@typist\@empty
+\else
+\ifx\@typist\@blank
+\def\@typist{}%
+\else
+\def\@typist{\lowercase{\ignorespaces#1}}%
+\fi \fi
+}%
+\def\memopaperhcorr#1{\@ifnoinfo{#1}%
+{\@dimenmemopaperhcorr=0pt}{\@dimenmemopaperhcorr=#1}}%
+\def\memopapervcorr#1{\@ifnoinfo{#1}%
+{\@dimenmemopapervcorr=0pt}{\@dimenmemopapervcorr=#1}}%
+\def\signature#1{\def\@signature{#1}}%
+\def\approval#1{\def\@approval{#1}}%
+\def\cypagebreak{\def\@cypagebreak{}}%
+\def\attachmentspagebreak{\def\@attachmentspagebreak{}}%
+\def\encpagebreak{\def\@encpagebreak{}}%
+\def\distributionpagebreak{\def\@distributionpagebreak{}}%
+\def\encas{\def\@encas{}}%
+\def\attachmentas{\def\@attachmentas{}}%
+\def\attachmentsas{\def\@attachmentsas{}}%
+\def\encpagebreak{\def\@encpagebreak{}}%
+\def\classlabel#1{%
+\begingroup
+\def\@unspacedclasslabel{#1}%
+\@unspaceleft{\@unspacedclasslabel}%
+\@unspaceright{\@unspacedclasslabel}%
+\@ifundefined{@classlabel}%
+{}{\gdef\@todieornottodie{\@errortwoclasses\@exit}}%
+\def\@secret{s}\def\@confidential{c}\def\@unclassified{u}%
+\ifx \@unspacedclasslabel \@secret%
+\gdef\@classlabel{SECRET}%
+\typeout{^^JThis memo will be marked SECRET.^^J}%
+\else \ifx \@unspacedclasslabel \@confidential%
+\gdef\@classlabel{CONFIDENTIAL}%
+\typeout{^^JThis memo will be marked CONFIDENTIAL.^^J}%
+\else \ifx \@unspacedclasslabel \@unclassified%
+\gdef\@classlabel{UNCLASSIFIED}%
+\typeout{^^JThis memo will be marked UNCLASSIFIED.^^J}%
+\else \ifx \@unspacedclasslabel \@empty%
+\gdef\@classlabel{}%
+\else
+\gdef\@todieornottodie{%
+\gdef\@classlabel{#1}%
+\@errorclassargument
+\@exit
+}%
+\fi \fi \fi \fi
+\endgroup
+\@todieornottodie
+}%
+\def\@toksinput#1#2{%
+\def\@toksname{\csname @toks#1\endcsname}%
+\def\@countname{\csname @count#1\endcsname}%
+\@toksnotequal\@toksname\@toksempty
+\if@toksnotequal
+\@addtotoks\@toksname\\
+\fi
+\@beenherefalse
+\@toksremaining={#2}%
+\loop
+\@tonewlinepull\@toksremaining
+\@somethingbeforefalse
+\@toksnotequal\@toksbeforenewline\@toksempty
+\if@toksnotequal
+\@toksnotequal\@toksbeforenewline\@toksblank
+\if@toksnotequal
+\@somethingbeforetrue
+\fi
+\fi
+\if@somethingbefore
+\if@beenhere
+\@addtotoks\@toksname\\
+\else
+\@beenheretrue
+\fi
+\@addtokstotoks\@toksname\@toksbeforenewline
+\@continuelooptrue
+\advance\@countname by 1
+\else
+\@toksnotequal\@toksafternewline\@toksempty%
+\if@toksnotequal
+\@toksnotequal\@toksafternewline\@toksnewline%
+\if@toksnotequal
+\@continuelooptrue%
+\else
+\@continueloopfalse%
+\fi
+\else
+\@continueloopfalse%
+\fi
+\fi
+\if@continueloop
+\@toksremaining=\@toksafternewline
+\repeat
+}%
+\def\opening
+{%
+\@checkinput
+\@choosefonts
+\@initializefontvariables
+\@initializeheadervariables
+\@makepagetwoheader
+\@printfirstpageheader
+\@beginmemo
+}%
+\def\closing
+{%
+\normalsize
+\@closingtrue
+\@endmemo
+\@clearclosing
+\@printsignature
+\@printoriginatorline
+\@printapproval
+\@printenc
+\@printattachments
+\@printdistribution
+\@printcy
+}%
+\def\@checkinput{%
+\ifnum\@countto=0\@errorundeclared{\to}%
+\@errorshowexample{\to}{George Benford, EX-4, MS M775}\fi
+\ifnum\@countfrom=0\@errorundeclared{\from}%
+\@errorshowexample{\from}{Ann Turner, AB-DO, MS D405}\fi
+\@ifemptyorundefined{@symbol}%
+{\def\@symbol{}\@errorundeclared{\symbol}%
+\@errorshowexample{\symbol}{C-2}}{}%
+\@ifemptyorundefined{@subject}%
+{\def\@subject{}\@errorundeclared{\subject}%
+\@errorshowexample{\subject}{Building Schedule}}{}%
+\@ifemptyorundefined{@originator}%
+{\def\@originator{}\@errorundeclared{\originator}%
+\@errorshowexample{\originator}{BJD}}{}%
+\@ifundefined{@signer}%
+{\def\@signer{}}{}%
+\@ifundefined{@typist}%
+{\def\@typist{}}{}%
+\@ifemptyorundefined{@mailstop}%
+{\def\@mailstop{}\@errorundeclared{\mailstop}%
+\@errorshowexample{\mailstop}{B233}}{}%
+\@ifemptyorundefined{@telephone}%
+{\def\@telephone{}\@errorundeclared{\telephone}%
+\@errorshowexample{\telephone}{7-1102}}{}%
+\@ifemptyorundefined{@date}{\def\@date{\today}}{}%
+\@ifundefined{@serialnumber}%
+{\def\@serialnumber{}}{}%
+\def\@symbolserialnumber{%
+\@symbol
+\ifx\@symbol\@empty
+\else
+\ifx\@serialnumber\@empty
+\else
+-\relax
+\fi\fi
+\@serialnumber\ }%
+\@ifemptyorundefined{@typeface}{\def\@typeface{tt}}{}%
+\@ifemptyorundefined{@headerfonts}{\def\@headerfonts{texfonts}}{}%
+\@ifemptyorundefined{@bodyfonts}{\def\@bodyfonts{texfonts}}{}%
+}%
+\def\@choosefonts
+{%
+\@amorcm
+\@getpostscriptnames
+\@chooseheaderfonts
+\@choosebodyfonts
+}%
+\def\@amorcm{{%
+\edef\a{\csname cmr10\endcsname}%
+\edef\b{\csname\fontname\tenrm\endcsname}%
+\ifx\a\b \global\@cmfontstrue \else \global\@cmfontsfalse \fi
+}}%
+\def\@getpostscriptnames{%
+\def\@cmhelv{psmhlv }%
+\def\@cmhelvb{psmhlvb }%
+\def\@cmtimer{psmtimr }%
+\def\@cmtimei{psmtimi }%
+\def\@cmtimeb{psmtimb }%
+\def\@cmcour{psmcou }%
+\def\@cmcouro{psmcouo }%
+\def\@cmcourb{psmcoub }%
+}%
+\def\@chooseheaderfonts
+{%
+\ifx\@headerfonts\@memopaper%
+\else\ifx\@headerfonts\@lafonts
+\font\@booksix=book6%
+\font\@memotwentyeight=memo28%
+\font\@latwentyeight=la28%
+\font\@spectwelve=spec12%
+\else\ifx\@headerfonts\@texfonts
+\if@cmfonts
+\font\@booksix=cmr6%
+\font\@latwentyeight=cmbx10 scaled\magstep5%
+\font\@memotwentyeight=cmbx10 scaled\magstep5%
+\font\@spectwelve=cmss10 scaled\magstep1%
+\else
+\font\@booksix=amr6%
+\font\@latwentyeight=ambx10 scaled\magstep5%
+\font\@memotwentyeight=ambx10 scaled \magstep5%
+\font\@spectwelve=amss10 scaled\magstep1%
+\fi
+\else\ifx\@headerfonts\@postscript
+\font\@booksix=\@cmhelv at 6pt%
+\font\@latwentyeight=\@cmhelvb at 29pt%
+\font\@memotwentyeight=\@cmhelvb at 28pt%
+\font\@spectwelve=\@cmhelv at 10.5pt%
+\else%
+\def\@todieornottodie{\@errorillegalheaderfont\@exit}%
+\fi\fi\fi\fi
+\@todieornottodie
+}%
+\def\@choosebodyfonts
+{%
+\ifx\@typeface\@tt
+\else\ifx\@typeface\@rm
+\else
+\def\@todieornottodie{\@errorillegaltypeface\@exit}%
+\fi\fi
+\@todieornottodie
+\ifx\@bodyfonts\@texfonts
+\if@cmfonts
+\font\@classfont=cmss10 scaled \magstep5%
+\else
+\font\@classfont=amssmc40
+\fi
+\else\ifx\@bodyfonts\@postscript
+\ifcase \@ptsize\relax %
+\font\tenrm = \@cmtimer at 10pt %
+\font\tentt = \@cmcour at 10pt %
+\ifx\@typeface\@tt
+\font\tenit = \@cmcouro at 10pt %
+\font\tenbf = \@cmcourb at 10pt %
+\else\ifx\@typeface\@rm
+\font\tenit = \@cmtimei at 10pt %
+\font\tenbf = \@cmtimeb at 10pt %
+\fi \fi
+\or %
+\font\elvrm = \@cmtimer at 11pt %
+\font\elvtt = \@cmcour at 11pt %
+\ifx\@typeface\@tt
+\font\elvit = \@cmcouro at 11pt %
+\font\elvbf = \@cmcourb at 11pt %
+\else\ifx\@typeface\@rm
+\font\elvit = \@cmtimei at 11pt %
+\font\elvbf = \@cmtimeb at 11pt %
+\fi \fi
+\or %
+\font\twlrm = \@cmtimer at 12pt %
+\font\twltt = \@cmcour at 12pt %
+\ifx\@typeface\@tt
+\font\twlit = \@cmcouro at 12pt %
+\font\twlbf = \@cmcourb at 12pt %
+\else\ifx\@typeface\@rm
+\font\twlit = \@cmtimei at 12pt %
+\font\twlbf = \@cmtimeb at 12pt %
+\fi \fi
+\fi
+\else
+\def\@todieornottodie{\@errorillegalbodyfont\@exit}%
+\fi\fi
+\@todieornottodie
+}%
+\def\@initializefontvariables
+{%
+\raggedbottom
+\@kernheaderwords
+\@initializetypefacedependencies
+\edef\normalsize
+{%
+\ifx \@currsize \normalsize
+\ifx \@typeface \@tt
+\tt
+\else \ifx \@typeface \@rm
+\rm
+\fi \fi
+\else
+\@normalsize
+\fi
+}%
+\def\pem{%
+\ifdim \fontdimen \@ne \font >\z@
+\csname\@typeface\endcsname
+\else
+\it
+\fi
+}%
+}%
+\def\@kernheaderwords{%
+\ifx \@headerfonts \@texfonts
+\def\@lanl{%
+\raise 1pt\hbox{%
+\def\@kern{\kern -.5pt}%
+L\@kern o\@kern s\ \kern -2.5pt A\@kern l\@kern a\@kern m\@kern
+o\@kern s\ \kern -2pt N\@kern a\@kern t\@kern i\@kern o\@kern
+n\@kern a\@kern l\ \kern -3pt L\@kern a\@kern b\@kern o\@kern
+r\@kern a\@kern t\@kern o\@kern r\@kern y%
+}%
+}%
+\def\@lanm{%
+\def\@kern{\kern -.5pt}%
+L\@kern o\@kern s\kern -2.5pt\ A\@kern l\@kern a\@kern m\@kern
+o\@kern s\kern -1pt ,\kern -4.5pt\ New\kern -3pt\ Mexico\kern -3pt
+\ 87545%
+}%
+\def\@losalamos{%
+Los Alamos%
+}%
+\def\@memorandum{%
+memorandum%
+}%
+\else \ifx \@headerfonts \@lafonts
+\@spectwelve {\setbox0=\hbox{L}\global\@dimentemp=\wd0}%
+\ifdim \@dimentemp=5.33684pt
+\def\@lanl{%
+L\kern -.4pt o\kern .35pt s\ \kern -.8pt
+A\kern .6pt l\kern .1pt a\kern .6pt m\kern .1pt o\kern .35pt s%
+\def\@kern{\kern .22pt}%
+\ N\@kern a\@kern t\@kern i\@kern o\@kern n\@kern a\kern .47pt
+l\ \kern -.2pt
+\def\@kern{\kern .03pt}%
+L\@kern a\kern .43pt b\@kern o\@kern r\@kern a\@kern
+t\kern -.22pt o\@kern r\@kern y}%
+\def\@lanm{%
+L\kern -.4pt o\kern .35pt s\ \kern -.8pt
+\def\@kern{\kern .35pt}%
+A\kern .6pt l\kern .1pt a\kern .6pt m\kern .1pt o\kern .35pt s,%
+\ \kern -1.5pt
+N\kern -.2pt ew\ \kern -.1pt
+\def\@kern{\kern .15pt}%
+M\kern -.05pt e\@kern x\@kern i\@kern c\@kern o\ \kern -.1pt
+8\kern -.65pt 7\kern -.9pt 54\kern -.7pt 5}%
+\def\@losalamos{%
+\kern -1.2pt L\kern 0pt o\kern -.75pt s\ \kern -6.7pt
+A\kern .25pt l\kern 1.25pt a\kern -.85pt m\kern -.65pt
+o\kern -.75pt s}%
+\def\@memorandum{memorandum}%
+\else
+\def\@lanl{%
+\raise .3pt\hbox{%
+L\kern -.6pt os\ \kern -1.3pt
+\def\@kern{\kern .11pt}%
+A\@kern l\@kern a\@kern m\@kern o\@kern s\ National\ %
+\def\@kern{\kern -.2pt}%
+L\@kern a\@kern b\@kern o\@kern
+r\@kern a\@kern t\@kern o\@kern r\@kern y%
+}%
+}%
+\def\@lanm{%
+L\kern -.6pt os\ \kern -1.3pt
+\def\@kern{\kern .11pt}%
+A\@kern l\@kern a\@kern m\@kern o\@kern s%
+\kern -.5pt,\ \kern -1.44pt New \kern -.5pt
+\def\@kern{\kern -.2pt}%
+M\@kern e\@kern x\@kern i\@kern c\@kern o\ \kern -.5pt 8\@kern
+7\@kern 5\@kern 4\@kern 5%
+}%
+\def\@losalamos{%
+\def\@kern{\kern -.9pt}%
+\kern -1.2pt L\kern -.65pt o\@kern s\kern 5pt
+A\kern -.4pt l\kern .3pt a\@kern m\@kern o\@kern s%
+}%
+\def\@memorandum{%
+\def\@kern{\kern -.25pt}%
+m\@kern e\@kern m\@kern o\@kern r\kern -.5pt a\@kern n\@kern
+d\@kern u\@kern m%
+}%
+\fi
+\else \ifx \@headerfonts \@postscript
+\def\@lanl{%
+\raise .5pt\hbox{%
+Los\kern -2pt\ Alamos\kern -1.5pt\ National\kern -2pt
+\ Laboratory%
+}%
+}%
+\def\@lanm{%
+\def\@kern{\kern .57pt}%
+Los\kern -2pt\ Alamos\kern -1pt,\kern -3.5pt\ N\@kern e\@kern
+w\kern -2pt\ M\@kern e\@kern x\@kern i\@kern c\@kern
+o\kern -2pt\ 87545%
+}%
+\def\@PSlosalamos##1##2{%
+\@psdeflosalamos
+\special{ps:: ##1 ##2 @LOSALAMOS1 @LOSALAMOS2 @LOSALAMOS3}}%
+\def\@memorandum{%
+\def\@kern{\kern -2pt}%
+m\@kern e\@kern m\@kern o\@kern r\kern 1pt \@kern
+a\@kern n\@kern d\@kern u\@kern m%
+}%
+\fi \fi \fi
+}%
+\def\@initializetypefacedependencies{%
+\ifx \@typeface \@tt
+\rightskip=0pt plus 3.6em%
+\@rightskip=\rightskip
+\hyphenchar\nintt=\defaulthyphenchar
+\hyphenchar\tentt=\defaulthyphenchar
+\hyphenchar\elvtt=\defaulthyphenchar
+\hyphenchar\twltt=\defaulthyphenchar
+\ifx \@bodyfonts \@texfonts
+\def\@bullet{\leavevmode\raise-.22ex\hbox to 0pt{+\hss}o}%
+\else \ifx \@bodyfonts \@postscript
+\def\@bullet{\leavevmode\raise-.19ex\hbox to 0pt{+\hss}o}%
+\fi \fi
+\fi
+\@initializelists
+}%
+\def\@initializelists{%
+\ifx \@typeface \@tt
+\parskip=\baselineskip
+{\setbox0=\hbox{\tt x}\global\@dimenwdtt=\wd0}%
+\leftmargini 4\@dimenwdtt
+\leftmarginii 4\@dimenwdtt
+\leftmarginiii 4\@dimenwdtt
+\leftmarginiv 4\@dimenwdtt
+\leftmarginv 4\@dimenwdtt
+\leftmarginvi 4\@dimenwdtt
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep=\@dimenwdtt
+\parsep=\baselineskip
+\topsep 0pt
+\itemsep 0pt
+\descriptionmargin=5\@dimenwdtt
+\@dimentemp=\@dimenwdtt
+\else\ifx \@typeface \@rm
+\parskip=.7em
+\def\@bullet{$\bullet$}%
+\leftmargini 2.5em
+\leftmarginii 2.2em %
+\leftmarginiii 1.87em %
+\leftmarginiv 1.7em %
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\topsep .4em
+\parsep .4em
+\itemsep .2em
+\descriptionmargin=3em
+\@dimentemp=5pt
+\fi \fi
+\listparindent=0pt
+\let\@listi\relax
+\def\@listii{\leftmargin\leftmarginii
+\labelwidth\leftmarginii\advance\labelwidth-\labelsep}%
+\def\@listiii{\leftmargin\leftmarginiii
+\labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+\ifx \@typeface \@rm
+\topsep .2em
+\itemsep \topsep
+\fi}%
+\def\@listiv{\leftmargin\leftmarginiv
+\labelwidth\leftmarginiv\advance\labelwidth-\labelsep}%
+\def\@listv{\leftmargin\leftmarginv
+\labelwidth\leftmarginv\advance\labelwidth-\labelsep}%
+\def\@listvi{\leftmargin\leftmarginvi
+\labelwidth\leftmarginvi\advance\labelwidth-\labelsep}%
+\@dimenversemargin=3\@dimentemp
+\def\verse{\let\\=\@centercr
+\list{}{\itemsep\z@ \itemindent -\@dimenversemargin \listparindent \itemindent
+\rightmargin\leftmargin\advance\leftmargin \@dimenversemargin}\item[]}%
+\let\endverse\endlist
+\def\quotation{\list{}{%
+\rightmargin\leftmargin}\item[]}%
+\let\endquotation=\endlist
+\tabcolsep \@dimentemp %
+\tabbingsep \labelsep %
+\def\labelenumi{\arabic{enumi}.}%
+\def\theenumi{\arabic{enumi}}%
+\def\labelenumii{\alph{enumii}.}%
+\def\theenumii{\alph{enumii}}%
+\def\p@enumii{\theenumi}%
+\def\labelenumiii{(\arabic{enumiii})}%
+\def\theenumiii{\roman{enumiii}}%
+\def\p@enumiii{\theenumi(\theenumii)}%
+\def\labelenumiv{(\alph{enumiv})}%
+\def\theenumiv{\Alph{enumiv}}%
+\def\p@enumiv{\p@enumiii\theenumiii}%
+\def\labelitemi{\@bullet}%
+\def\labelitemii{-}%
+\def\labelitemiii{*}%
+\def\labelitemiv{+}%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}%
+\let\endquote=\endlist
+\def\descriptionlabel##1{\hspace\labelsep \it ##1}%
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+\let\makelabel\descriptionlabel}}%
+\let\enddescription\endlist
+}%
+\def\@initializeheadervariables{%
+\let\@texttop=\relax
+\def\ps@firstpage{\let\@mkboth\@gobbletwo
+\def\@oddhead{\@makeclassheader\@printclasspage}%
+\def\@oddfoot{}}%
+\def\ps@pagetwo{\let\@mkboth\@gobbletwo
+\def\@oddhead{%
+\@printpagetwoheader\@printpagenum\@printclasspage}%
+\def\@oddfoot{}}%
+\thispagestyle{firstpage}%
+\pagestyle{pagetwo}%
+\ifnum\@countthru=0
+\@countleftcolon=77
+\@countrightcolon=406
+\else
+\@countleftcolon=80
+\@countrightcolon=404
+\fi
+\ifnum\@countthru=0 \@dimenspacetosubject=209pt
+\else \@dimenspacetosubject=233pt
+\fi
+\@advcountbydimen\@countverticalposition\@dimenmemopapervcorr
+\advance\@dimenspacetosubject by \@dimenmemopapervcorr
+\@advcountbydimen\@countleftcolon\@dimenmemopaperhcorr
+\@advcountbydimen\@countrightcolon\@dimenmemopaperhcorr
+\@countleftheader=\@countleftcolon
+\@countrightheader=\@countrightcolon
+\@advcountbydimen\@countleftheader\@dimenspaceaftercolon
+\@advcountbydimen\@countrightheader\@dimenspaceaftercolon
+\oddsidemargin=\@countleftcolon pt
+\advance \oddsidemargin by -1in
+\advance \oddsidemargin by \@dimenspaceaftercolon
+\evensidemargin=\oddsidemargin
+}%
+\def\@makeclassheader
+{%
+\@ifundefined{@classlabel}{\gdef\@classlabel{}}{}%
+\ifx\@bodyfonts\@postscript
+\@makePSclassheader
+\else
+\ifx \@classlabel \@empty
+\global\setbox\@boxclasspage=\hbox{\hbox to 0pt{\hss\hss}}%
+\else
+\global\setbox\@boxclasspage=\hbox{\hbox to 0pt{\hss
+\begin{picture}(0,0)(\@countleftheader,0)%
+{%
+\@classfont
+\@counttemp=-\@countclasssep
+\put (0,\@counttemp)%
+{\makebox(0,0)[tl]{\hbox to 8.5in{\hfil\@classlabel\hfil}}}%
+\advance\@counttemp by 795 %
+\put (0,-\@counttemp)%
+{\makebox(0,0)[bl]{\hbox to 8.5in{\hfil\@classlabel\hfil}}}%
+}%
+\end{picture}%
+\hss}}%
+\fi \fi
+}%
+\gdef\@psdeflosalamos{%
+\special{ps::[local]%
+/@LOSALAMOS1 {
+/VirginState save def
+/Helvetica-Bold findfont [ 27.7 0 0 29 0 0 ] makefont setfont
+/YC exch neg def %
+/XC exch def %
+} def
+}%
+\special{ps::[local]%
+/@LOSALAMOS2 {
+/MV {moveto} def
+/SO {false charpath stroke} def
+.5 setlinewidth
+XC 87.8 add YC 721 add translate
+} def
+}%
+\special{ps::[local]%
+/@LOSALAMOS3 {
+0 0 MV (L) SO
+15.9 0 MV (o) SO
+31.8 0 MV (s) SO
+51.3 0 MV (A) SO
+70.2 0 MV (l) SO
+77 0 MV (a) SO
+91.4 0 MV (m) SO
+115 0 MV (o) SO
+130.9 0 MV (s) SO
+VirginState restore
+} def
+}%
+}%
+\def\@psdefclasslabel{%
+\specialbop{ps::[global]%
+/@CLASSOVERLAY1 {
+/VirginState save def
+dup (SECRET) eq
+{/Dist 36 def /Space 3.5 def /X 272 def } %
+{/Dist 24 def /Space 3 def /X 242 def } %
+ifelse
+/Label exch def
+} def
+}%
+\specialbop{ps::[global]%
+/@CLASSOVERLAY2 {
+/Print { gsave Space 0 Label ashow grestore } def
+/DoubPrint { Print StrikeWidth 0 rmoveto Print } def
+/Scale .415888 def %
+/StrikeWidth 1.5 def %
+} def
+}%
+\specialbop{ps::[global]%
+/@CLASSOVERLAY3 {
+/Helvetica-Bold findfont [29 Scale mul 0 0 29 0 0] makefont setfont
+X 770 Dist sub moveto
+DoubPrint
+X Dist moveto
+DoubPrint
+VirginState restore
+} def
+}%
+}%
+\def\@makePSclassheader{%
+\gdef\@PSclasslabel##1{%
+\special{ps:: ##1 @CLASSOVERLAY1 @CLASSOVERLAY2 @CLASSOVERLAY3}}%
+}%
+\def\@makepagetwoheader
+{%
+\@pullpagetwoheader{\@toksto}%
+\savebox{\@boxpagetwoheader}%
+{%
+\begin{minipage}[b]{\textwidth}%
+\normalsize
+\rule{0pt}{72pt}\rule{0pt}{-\ht\strutbox}%
+\parbox[t]{\@dimenpagetwoheader}%
+{%
+\the\@toksheaderone\copy\strutbox
+\@notvoidtoks\@toksheadertwo
+\if@notvoidtoks \newline \the\@toksheadertwo\copy\strutbox \fi
+\ifx \@serialnumber \@empty
+\else
+\ifhmode \newline \fi \@symbolserialnumber\copy\strutbox
+\fi
+}%
+\copy\strutbox\hfill
+\makebox[\@dimenpagetwoheader][r]{\hfil\@date}%
+\end{minipage}%
+}%
+\@dimentoppagetwo=\ht\@boxpagetwoheader
+\advance\@dimentoppagetwo by 4\baselineskip
+\advance\@dimentoppagetwo by -\dp\strutbox
+}%
+\def\@printclasspage{%
+\ifx\@bodyfonts\@postscript
+\ifx \@classlabel \@empty
+\else
+\@PSclasslabel{(\@classlabel)}%
+\fi
+\vbox to 0in{}\hss
+\else
+\vbox to 0in{\hbox to 0pt{\usebox{\@boxclasspage}\hss}\vss}\hss
+\fi
+}%
+\def\@printpagetwoheader{%
+\vbox to 0in{\hbox to 0pt{\usebox{\@boxpagetwoheader}\hss}\vss}%
+}%
+\def\@printpagenum{%
+\vbox to 0pt{\hbox to 0pt{%
+\begin{minipage}[b]{\textwidth}%
+\normalsize
+\rule{0pt}{72pt}\rule{0pt}{-\ht\strutbox}%
+\hfil{- \thepage\ -}\hfil
+\end{minipage}%
+\hss}\vss}%
+}%
+\def\@pullpagetwoheader#1{\begingroup
+\@gettoksheader{#1}%
+\global\@toksheaderone=\expandafter{\the\@toksbeforecomma}%
+\if@newline
+\@toksremaining=\@toksafternewline
+\@gettoksheader{\@toksremaining}%
+\global\@toksheadertwo=\expandafter{\the\@toksbeforecomma}%
+\fi
+\endgroup
+}%
+\def\@gettoksheader#1{\@tonewlinepull{#1}%
+\if@newline\@tocommapull{\@toksbeforenewline}%
+\else \@tocommapull{#1}\fi}%
+\def\@beginmemo{%
+\@ifundefined{@shortmemostyle}%
+{%
+\ifnum \@countreference = 0
+\@dimentemp=2\baselineskip
+\advance\@dimentemp by -\parskip
+{\parskip=\@dimentemp \leavevmode \par \leavevmode}%
+\fi
+\par
+}%
+{%
+\ifx \@typeface \@tt
+\topsep=\baselineskip
+\baselineskip=2\baselineskip
+\parindent=5\@dimenwdtt
+\leftmargini=7\@dimenwdtt
+\else \ifx \@typeface \@rm
+\@parskipsave=\parskip
+\advance\baselineskip by \parskip
+\parindent=2.5em
+\leftmargini=3.5em
+\topsep=1.2em
+\parsep=.6em
+\itemsep=.6em
+\fi \fi
+\parskip=0pt
+\leftmargin=\leftmargini
+\par\leavevmode
+\par
+}%
+}%
+\def\@clearclosing{%
+\edef\@tempa{\@toplist\@botlist\@deferlist}%
+\ifx\@tempa\@empty\else\clearpage\fi
+}%
+\def\@endmemo{%
+\@ifundefined{@shortmemostyle}%
+{}%
+{%
+\par
+\ifnum \thepage > 1
+\@errorshortmemo
+\fi
+\parindent=0em
+\ifx \@typeface \@tt
+\baselineskip=.5\baselineskip
+\parskip=\baselineskip
+\else \ifx \@typeface \@rm
+\parskip=\@parskipsave
+\advance\baselineskip by -\parskip
+\fi \fi
+\leavevmode \par
+}%
+\topsep=0pt
+\itemsep=0pt
+\parsep=0pt
+}%
+\def\@printfirstpageheader
+{%
+\normalsize
+\begin {picture}(0,0)(\@countleftheader,\@countverticalposition)%
+\ifx\@headerfonts\@memopaper
+\else
+\@printmemopaper
+\fi
+\@printfirstpageheaderinfo
+\end{picture}%
+\normalsize
+\@printsubject
+\@printreference
+}%
+\def\@printmemopaper
+{%
+\ifx\@headerfonts\@postscript
+\@dimentemp=\@dimenmemopaperhcorr
+\ifnum\@countthru=0\else\advance\@dimentemp by 3pt\fi
+\@counttemp=\@dimentemp
+\divide\@counttemp by 65536
+\@counttemptwo=\@dimenmemopapervcorr
+\divide\@counttemptwo by 65536
+\@PSlosalamos{\the\@counttemp }{\the\@counttemptwo }%
+\else
+\@latwentyeight
+\put (\@countleftheader,-71){\@losalamos}%
+\fi
+\@spectwelve
+\put (\@countleftheader,-88){\@lanl}%
+\put (\@countleftheader,-98){\@lanm}%
+\@memotwentyeight
+\put (524,-98){\makebox(0,0)[br]{\@memorandum}}%
+\put (0,-105){\line(1,0){614}}%
+\@booksix
+\put (\@countleftcolon,-138){\makebox(0,0)[br]{TO:}}%
+\put (\@countrightcolon,-138){\makebox(0,0)[br]{DATE:}}%
+\put (\@countrightcolon,-162){\makebox(0,0)[br]{MAIL STOP/TELEPHONE:}}%
+\ifnum\@countthru=0
+{%
+\put (\@countleftcolon,-162){\makebox(0,0)[br]{FROM:}}%
+\put (\@countleftcolon,-186){\makebox(0,0)[br]{SYMBOL:}}%
+\put (\@countleftcolon,-210){\makebox(0,0)[br]{SUBJECT:}}%
+}%
+\else
+{%
+\put (\@countleftcolon,-162){\makebox(0,0)[br]{THRU:}}%
+\put (\@countleftcolon,-210){\makebox(0,0)[br]{FROM:}}%
+\put (\@countleftcolon,-234){\makebox(0,0)[br]{SUBJECT:}}%
+\put (\@countrightcolon,-210){\makebox(0,0)[br]{SYMBOL:}}%
+}%
+\fi
+}%
+\def\@printfirstpageheaderinfo
+{%
+\normalsize
+\sbox{\@boxtemp}%
+{\begin{minipage}[t]{\@dimenfirstpageleftheader}%
+\raggedright \baselineskip=12pt \the\@toksto \end{minipage}}%
+\put(\@countleftheader,-138){\usebox{\@boxtemp}}%
+\ifdim\dp\@boxtemp > 18pt
+\@erroroverfull{TO}{2}%
+\fi
+\put (\@countrightheader,-138){\@date{}}%
+\put (\@countrightheader,-162){%
+\@mailstop
+\ifx\@mailstop\@empty
+\else
+\ifx\@telephone\@empty
+\else
+/\relax
+\fi \fi
+\@telephone}%
+\ifnum\@countthru=0
+\sbox{\@boxtemp}%
+{\begin{minipage}[t]{\@dimenfirstpageleftheader}%
+\raggedright \baselineskip=12pt \the\@toksfrom
+\end{minipage}}%
+\put (\@countleftheader,-162){\usebox{\@boxtemp}}%
+\ifdim\dp\@boxtemp > 18pt
+\@erroroverfull{FROM}{2}%
+\fi
+\put (\@countleftheader,-186){\@symbolserialnumber}%
+\else
+\sbox{\@boxtemp}%
+{\begin{minipage}[t]{\@dimenfirstpageleftheader}%
+\raggedright \baselineskip=12pt\the\@toksthru
+\end{minipage}}%
+\put (\@countleftheader,-162){\usebox{\@boxtemp}}%
+\ifdim\dp\@boxtemp > 42pt
+\@erroroverfull{THRU}{4}%
+\fi
+\sbox{\@boxtemp}%
+{\begin{minipage}[t]{\@dimenfirstpageleftheader}%
+\raggedright \baselineskip=12pt\the\@toksfrom
+\end{minipage}}%
+\put (\@countleftheader,-210){\usebox{\@boxtemp}}%
+\ifdim\dp\@boxtemp > 18pt
+\@erroroverfull{FROM}{2}%
+\fi
+\put (\@countrightheader,-210){\@symbolserialnumber}%
+\fi
+}%
+\def\@printsubject{%
+\newline
+\vrule height\the\@dimenspacetosubject width0pt
+\@subject
+\ifnum\@countreference=0
+\else
+\leavevmode \par
+\fi
+}%
+\def\@printreference
+{%
+\ifnum\@countreference=0
+\else
+\ifnum \@countreference=1
+REFERENCE:\relax
+\else
+REFERENCES:\relax
+\fi
+\par\vspace{-\baselineskip}%
+\begin{list}{\ifnum \@countreference=1\else\arabic{@countlist}.\fi}%
+{%
+\topsep=0pt
+\itemsep=0pt
+\parsep=0pt
+\ifnum \@countreference=1
+\settowidth\leftmargin{REFERENCE\@: }%
+\else
+\settowidth\leftmargin{REFERENCES\@: }%
+\fi
+\@setnumdefaults\@countreference
+}%
+\@printnumberedlist{\@toksreference}%
+\end{list}%
+\fi
+}%
+\def\@printsignature
+{%
+\par
+\@ifemptyorundefined{@signature}{}%
+{%
+{\parskip=0pt\par\ }%
+\vspace*{2\baselineskip}\newline
+\@signature
+}%
+}%
+\def\@printoriginatorline
+{%
+\@ifemptyorundefined{@signature}{\nopagebreak}{}%
+\par
+\ifx\@signer\@empty
+\else
+\@signer
+\ifx\@originator\@empty
+\ifx\@typist\@empty \else :\relax \fi
+\else
+-\relax
+\fi
+\fi
+\ifx\@originator\@empty
+\else
+\@originator
+\ifx\@typist\@empty \else :\relax \fi
+\fi
+\ifx\@typist\@empty
+\else
+\@typist
+\fi
+}%
+\def\@printapproval
+{%
+\@ifemptyorundefined{@approval}{}%
+{%
+{%
+\samepage
+\settowidth\@lengthlabel{APPROVED BY:}%
+\addtolength\@lengthlabel\labelsep%
+\@lengthrule=\textwidth
+\addtolength\@lengthrule{-\@lengthlabel}%
+\addtolength\@lengthrule{-30pt}%
+\settowidth\@lengthdate{date}%
+\addtolength\@lengthdate{60pt}%
+\@lengthname=\@lengthrule%
+\addtolength\@lengthname{-\@lengthdate}%
+{\parskip=0pt\par\ }%
+\vspace*{2\baselineskip}\newline
+\relax APPROVED BY:\hskip\labelsep
+\rule{\@lengthrule}{0.4pt}%
+\copy\strutbox
+{\offinterlineskip\newline}%
+\hspace*{\@lengthlabel}\parbox[t]{\@lengthname}%
+{\@approval\ \copy\strutbox}%
+\makebox[\@lengthdate][c]{date}%
+\par
+}%
+}%
+}%
+\def\@printenc
+{%
+\@ifundefined{@encas}{}{%
+\ifnum\@countenc=0
+\par Enc.\ a/s%
+\else \@erroras\enc\encas{Enc. a/s}%
+\fi}%
+\ifnum\@countenc=0
+\else
+\par
+\@ifundefined{@encpagebreak}{}{\pagebreak}%
+\ifnum\@countenc=1
+Enclosure:\relax
+\else
+Enc.\relax
+\fi
+\nopagebreak
+\par\vspace{-\baselineskip}%
+\@countmemolist=\@countenc
+\begin{list}{\ifnum \@countenc=1\else\arabic{@countlist}.\fi}%
+{%
+\ifnum\@countenc=1
+\settowidth\leftmargin{Enclosure: }%
+\else
+\settowidth\leftmargin{Enc.\ }%
+\fi
+\@setnumdefaults\@countenc
+}%
+\@printnumberedlist{\@toksenc}%
+\end{list}%
+\fi
+}%
+\def\@printattachments
+{%
+\@ifundefined{@attachmentas}%
+{\@ifundefined{@attachmentsas}{}%
+{\ifnum\@countattachments=0
+\par Attachments a/s%
+\else \@erroras\attachments\attachmentsas{Attachments a/s}\fi}}%
+{\@ifundefined{@attachmentsas}%
+{\ifnum\@countattachments=0
+\par Attachment a/s%
+\else\@erroras\attachments\attachmentas{Attachment a/s}\fi}%
+{\par Attachments a/s%
+\@erroras\attachmentas\attachmentsas{Attachment a/s}}}%
+\ifnum\@countattachments=0
+\else
+\par
+\@ifundefined{@attachmentspagebreak}{}{\pagebreak}%
+\ifnum\@countattachments=1
+Attachment:\relax
+\else
+Attachments:\relax
+\fi
+\@countmemolist=\@countattachments
+\begin{list}{\ifnum \@countattachments=1\else\arabic{@countlist}.\fi}%
+{%
+\leftmargin=0pt
+\@setnumdefaults\@countattachments
+}%
+\@printnumberedlist{\@toksattachments}%
+\end{list}%
+\fi
+}%
+\def\@printdistribution
+{%
+\ifnum\@countdistribution=0
+\else
+\par
+\@ifundefined{@distributionpagebreak}{}{\pagebreak}%
+{\offinterlineskip Distribution:\copy\strutbox}%
+\@countmemolist=\@countdistribution
+\begin{list}{}%
+{%
+\parskip=0pt
+\labelwidth=0pt
+\labelsep=0pt
+\leftmargin=0pt
+}%
+\item\the\@toksdistribution
+\end{list}%
+\fi
+}%
+\def\@printcy
+{%
+\ifnum\@countcy=0
+\else
+\pagebreak[0]%
+\par
+\@ifundefined{@cypagebreak}{}{\pagebreak}%
+\begin{list}{Cy:\hfill}%
+{%
+\settowidth\labelwidth{Cy: }%
+\leftmargin=\labelwidth
+\labelsep=0pt
+}%
+\item\the\@tokscy
+\end{list}%
+\fi
+}%
+\def\@setnumdefaults#1{%
+\ifnum #1=1
+\labelwidth=0pt%
+\labelsep=0pt
+\else
+\usecounter{@countlist}%
+\ifnum #1<10
+\settowidth\labelwidth{8.}%
+\else
+\settowidth\labelwidth{88.}%
+\fi\fi
+\addtolength\leftmargin\labelwidth
+\addtolength\leftmargin\labelsep
+\parskip=0pt
+}%
+\def\@printnumberedlist#1%
+{%
+\@toksremaining=#1%
+\loop
+\@tonewlinepull{\@toksremaining}%
+\@toksnotequal\@toksbeforenewline\@toksempty
+\if@toksnotequal
+\@toksitem=\@toksbeforenewline
+\@toksremaining=\@toksafternewline
+\ifx #1\@toksreference%
+\item\uppercase\expandafter{\the\@toksitem}%
+\else
+\item\the\@toksitem
+\fi
+\repeat
+}%
+\def\@tonewlinepull#1{\begingroup\let\\=\relax
+\expandafter\@tonewlinepullone\the#1\\\@empty
+\if@newline\expandafter\@tonewlinepullthree\the#1\@empty
+\else\fi\endgroup}%
+\def\@tonewlinepullone#1\\{\global\@toksbeforenewline={#1}%
+\futurelet\next\@tonewlinepulltwo}%
+\def\@tonewlinepulltwo#1\@empty{\global\@toksafternewline={#1}%
+\ifx\@empty\next\global\@newlinefalse
+\else\global\@newlinetrue\fi}%
+\def\@tonewlinepullthree#1\\{\global\@toksbeforenewline={#1}%
+\futurelet\next\@tonewlinepullfour}%
+\def\@tonewlinepullfour#1\@empty{\global\@toksafternewline={#1}%
+\ifx\@empty\next\global\@newlinefalse
+\else\global\@newlinetrue\fi}%
+\def\@tocommapull#1{\expandafter\@tocommapullone\the#1,\@empty}%
+\def\@tocommapullone#1,{\@toksbeforecomma={#1}%
+\futurelet\next\@tocommapulltwo}%
+\def\@tocommapulltwo#1\@empty{\ifx\@empty\next \@commafalse
+\else \@commatrue \fi}%
+\def\@unspaceleft#1{{%
+\def\@macroname{#1}%
+\ifx #1\@empty
+\else
+\ifx #1\@blank
+\global\expandafter\def\@macroname{}%
+\else
+\expandafter\@unspaceleftone#1\relax\relax\@empty
+\fi \fi
+}}%
+\def\@unspaceleftone#1#2\relax{%
+\global\expandafter\def\@macroname{#1#2}%
+\@unspacelefttwo}%
+\def\@unspacelefttwo#1\@empty{}%
+\def\@upperunspaceleft#1{{%
+\def\@macroname{#1}%
+\ifx #1\@empty
+\else
+\ifx #1\@blank
+\global\expandafter\def\@macroname{}%
+\else
+\expandafter\@upperunspaceleftone#1\relax\relax\@empty
+\fi \fi
+}}%
+\def\@upperunspaceleftone#1#2\relax{%
+\global\expandafter\def\@macroname{\uppercase{#1#2}}%
+\@unspacelefttwo}%
+\def\@unspaceright#1{{%
+\def\@macroname{#1}%
+\edef\@temp{#1}%
+\expandafter\@unspacerightone#1\relax{} \relax\@empty
+}}%
+\def\@unspacerightone#1 \relax{%
+\global\expandafter\edef\@macroname{#1}%
+\futurelet\next\@unspacerighttwo}%
+\def\@unspacerighttwo#1\@empty{%
+\ifx \@empty\next
+\global\expandafter\edef\@macroname{\@temp}%
+\fi
+}%
+\def\@addtotoks#1#2{#1=\expandafter{\the#1#2}}%
+\def\@addtokstotoks#1#2{{\edef\deftemp{\the#1\the#2}%
+\global#1=\expandafter{\deftemp}}}%
+\long\def\@ifemptyorundefined#1#2#3{%
+\expandafter\ifx\csname#1\endcsname\relax#2
+\else\expandafter\ifx\csname#1\endcsname\@empty#2
+\else\expandafter\ifx\csname#1\endcsname\@blank#2
+\else#3\fi\fi\fi}
+\def\@ifnoinfo#1#2#3{\def\@deftemp{#1}%
+\ifx\@deftemp\@empty#2\else\ifx\@deftemp\@blank#2\else#3\fi\fi}
+\def\@toksnotequal#1#2{\begingroup \edef\one{\the#1} \edef\two{\the#2}%
+\ifx\one\two\global\@toksnotequalfalse\else\global\@toksnotequaltrue\fi
+\endgroup}%
+\def\@advcountbydimen#1#2{\@counttemp=#2%
+\divide\@counttemp by 65536 \advance#1by \@counttemp}%
+\def\@notvoidtoks#1{\@addtotoks{#1}{\@empty}%
+\expandafter\@notvoidtoksone\the#1}%
+\def\@notvoidtoksone{\futurelet\next\@notvoidtokstwo}%
+\def\@notvoidtokstwo#1\@empty{\ifx \@empty\next \@notvoidtoksfalse
+\else \@notvoidtokstrue \fi}%
+\def\@eightspaces{\space\space\space\space\space\space\space\space}%
+\def\@errorundeclared#1{\typeout{^^JWarning: you have not called \protect #1
+before calling \protect\opening.^^J}%
+}%
+\def\@errorserialnosymbol{\typeout{^^JWarning: you have called
+\protect\serialnumber, but you have not called \protect\symbol.^^J}%
+\@errorshowexample{\symbol}{C-2}}%
+\def\@erroroverfull#1#2{\typeout{^^JWarning: You have printed more than #2
+lines in the #1 portion ^^J
+\@eightspaces of the memo header.^^J}}%
+\def\@errorshowexample#1#2{\typeout{\@eightspaces\space For example, use^^J^^J
+\@eightspaces\protect #1{#2}^^J}}%
+\def\@errorclassargument{%
+\typeout{^^JFatal error: \protect\classlabel{\@classlabel}
+calls for an invalid classification label.^^J}%
+\@errorclassmessage
+}%
+\def\@errortwoclasses{%
+\typeout{^^JFatal error: you have called \protect\classlabel \space
+more than once.^^J^^J
+\space You are only allowed to declare one classification label
+per memo.^^J}%
+\@errorclassmessage
+}%
+\def\@errorclassmessage{%
+\typeout{%
+\space\space To print CONFIDENTIAL on the top and bottom
+of your memo,^^J
+\space use \protect\classlabel{c}^^J^^J
+\space To print SECRET on the top and bottom
+of your memo,^^J
+\space use \protect\classlabel{s}^^J^^J
+\space To print UNCLASSIFIED on the top and bottom
+of your memo,^^J
+\space use \protect\classlabel{u}^^J^^J
+\space If you do not want a classification label on your memo,^^J
+\space use \protect\classlabel{}^^J
+\space or do not use the \protect\classlabel\space command.^^J^^J
+\space Change your file, and rerun LaTeX.^^J}%
+}%
+\def\@errorillegaltypeface{%
+\typeout{^^JFatal error: \protect\typeface{\@typeface} calls for an invalid
+typeface.^^J^^J
+\space Use \protect\typeface{tt} or \protect\typeface{rm}^^J^^J
+\space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegalheaderfont{\def\@fontcommand{\protect\headerfonts}%
+\def\@fontarg{\@headerfonts}%
+\typeout{^^JFatal error: \@fontcommand{\@fontarg} calls for
+an invalid font.^^J^^J
+\space Use \@fontcommand{lafonts}, \@fontcommand{texfonts},^^J
+\space or \@fontcommand{postscript}\space
+depending on what fonts^^J \space are available on your machine.^^J^^J
+\space Using \@fontcommand{} will give you the default fonts.^^J^^J
+\space Use \@fontcommand{memopaper} if you wish to print your memo^^J
+\space on pre-printed memo paper.^^J^^J
+\space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorillegalbodyfont{\def\@fontcommand{\protect\bodyfonts}%
+\def\@fontarg{\@bodyfonts}%
+\typeout{^^JFatal error: \@fontcommand{\@fontarg} calls
+for an invalid font.^^J^^J
+\space Use \@fontcommand{texfonts} or \@fontcommand{postscript}^^J
+\space depending on what fonts are available on your machine.^^J^^J
+\space Using \@fontcommand{} will give you the default fonts.^^J^^J
+\space Change your file, and rerun LaTeX.^^J}}%
+\def\@errorshortmemo{%
+\typeout{^^JWarning: Use of the \protect\shortmemostyle\space macro
+is intended^^J
+\@eightspaces for use with memos of ten lines or less.^^J^^J}%
+}%
+\def\@erroras#1#2#3{%
+\typeout{^^JWarning: You have used both \protect#1\space and
+\protect#2.^^J
+\@eightspaces Use one or the other but not both.^^J
+\@eightspaces "#3" will not be printed on this memo.^^J^^J}%
+}%
+\def\@todieornottodie{\relax}%
+\def\@exit{\@fileswfalse\end{document}}%
+\def\@item[#1]{%
+\if@noparitem \@donoparitem
+\else \if@inlabel \indent \par \fi
+\ifhmode \unskip\unskip \par \fi
+\if@newlist \if@nobreak \@nbitem \else
+{%
+\if@closing
+\@beginparpenalty=10000
+\fi
+\addpenalty\@beginparpenalty
+}%
+\addvspace\@topsep \addvspace{-\parskip}\fi
+\else
+{%
+\if@closing
+\ifnum \c@@countlist = 1
+\@itempenalty=10000
+\fi
+\advance \@countmemolist by -1
+\ifnum \c@@countlist = \@countmemolist
+\@itempenalty=10000
+\fi
+\fi
+\addpenalty\@itempenalty
+}%
+\addvspace\itemsep
+\fi
+\global\@inlabeltrue
+\fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+\if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+\penalty\z@ \fi
+\everypar{}}\global\@nobreakfalse
+\if@noitemarg\@noitemargfalse \if@nmbrlist\refstepcounter{\@listctr}\fi\fi
+\setbox\@tempboxa\hbox{\makelabel{#1}}%
+\global\setbox\@labels
+\hbox{\unhbox\@labels \hskip \itemindent
+\hskip -\labelwidth \hskip -\labelsep
+\ifdim \wd\@tempboxa >\labelwidth
+\box\@tempboxa
+\else \hbox to\labelwidth {\makelabel{#1}}\fi
+\hskip \labelsep}\ignorespaces
+}%
+\def\@outputpage{\begingroup\catcode`\ =10
+\let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+\if@specialpage
+\global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+\if@twoside
+\ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+\let\@themargin\oddsidemargin
+\else \let\@thehead\@evenhead
+\let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+\fi\fi
+\shipout
+\vbox{\normalsize \baselineskip\z@ \lineskip\z@
+\let\par\@@par %
+\@specialbopemit%
+\vskip \topmargin \moveright\@themargin
+\vbox{\setbox\@tempboxa
+\vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}}%
+\dp\@tempboxa\z@
+\box\@tempboxa
+\vskip \headsep
+\box\@outputbox
+\baselineskip\footskip
+\hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+\endgroup
+\ifnum\c@page=1%
+\global\topskip=\ht\strutbox%
+\global\headsep=\@dimentoppagetwo%
+\global\advance\headsep by -\topskip%
+\global\advance\textheight by -\headsep%
+\fi%
+\stepcounter{page}%
+\let\firstmark\botmark}%
+\def\@specialbopempty{}%
+\let\@specialboptext=\@specialbopempty
+\def\specialbop#1{%
+\xdef\@specialboptext{%
+\@specialboptext
+\special{#1}%
+}%
+}%
+\def\@specialbopemit{%
+\ifx\@specialboptext\@specialbopempty
+\else
+\@specialboptext
+\global\let\@specialboptext=\@specialbopempty
+\fi
+}%
diff --git a/macros/latex209/contrib/lamemo/memotest.tex b/macros/latex209/contrib/lamemo/memotest.tex
new file mode 100644
index 0000000000..63978c7f7f
--- /dev/null
+++ b/macros/latex209/contrib/lamemo/memotest.tex
@@ -0,0 +1,128 @@
+\documentstyle[12pt]{memo} % type size of 12 points
+
+%\documentstyle[11pt]{memo} % type size of 11 points
+%\documentstyle{memo} % type size of 10 points
+%
+% This is a sample file to show you typical input for printing a
+% memo at the Los Alamos National Laboratory using LaTeX.
+%
+% Notice that the '%' is the comment character. The '%' and the
+% rest of the line are ignored by LaTeX. All of the LaTeX memo
+% commands will appear in this file. The ones not used by this
+% file will be commented out. To look at the body of the memo,
+% skip down to the \begin{document} command.
+
+% When you print out the DVI file that is generated from this
+% source file, you will notice that the header doesn't look like
+% pre-printed memo paper. That is because \headerfonts{texfonts}
+% is used here.
+%
+% If you are printing on a PostScript printer, use
+% \headerfonts{postscript} to get a good looking header. The
+% \headerfonts{lafonts} command will also produce a nice header,
+% but you will need to have installed the LANL header fonts. If
+% you use \headerfonts{memopaper}, put pre-printed memo paper
+% in your printer or copying machine.
+%
+ \headerfonts{texfonts}
+% \headerfonts{postscript}
+% \headerfonts{lafonts}
+% \headerfonts{memopaper}
+
+ \bodyfonts{texfonts}
+% \bodyfonts{postscript}
+ \typeface{tt}
+% \typeface{rm}
+
+% With no date command, today's date will be printed.
+%
+ \date{March 28, 1990}
+
+ \symbol{C-2}
+% \serialnumber{5-213}
+ \mailstop{B253}
+ \telephone{5-0859}
+ \to{LaTeX Users}
+ \from{Steve Sydoriak, C-2, MS B253}
+ \subject{typical memo}
+% \reference{Office Procedures Manual}
+% \thru{Alicia J. Lujan, ABC-3, MS Q123 \\
+% L. S. Steele, AB-5, MS R456}
+
+ \originator{SS}
+ \typist {SS}
+ \encas
+ \cy{T.J. Benton, BB-5, MS G999 \\ A.L. Salazar, XX-7, MS B888}
+
+% \signature {Steve Sydoriak}
+% \signer {SS}
+% \approval{R. J. O'Conner}
+% \attachments{Graph, Gravitational Pull vs. Image Time, TP-3, MS B881}
+% \attachmentas
+% \attachmentsas
+% \distribution{K. C. Jordan, C-5, MS B111\\
+% T. S. Solomon, TP-1, MS B222}
+% \enc{Memo, Smith to Jones, June 25, 1986\\
+% Letter, Landau to Gresham, March 1, 1987}
+% \attachmentspagebreak
+% \cypagebreak
+% \distributionpagebreak
+% \encpagebreak
+
+% \shortmemostyle % For memos of ten lines or less.
+
+% \classlabel{u} % UNCLASSIFIED
+% \classlabel{c} % CONFIDENTIAL
+% \classlabel{s} % SECRET
+
+% \memopaperhcorr{4pt}
+% \memopapervcorr{-6pt}
+
+\begin{document}
+\opening
+
+This example shows what a typical memo might look like. It uses
+the texfonts option for the header and the body of the memo.
+The texfonts option calls for use of TeX's Computer Modern fonts.
+The body has the typewriter typeface with a point size of 12.
+
+Remember that LaTeX interprets a blank line as the start of a new
+paragraph, and that any of the special characters \#,\$,\%, \&,
+\{, and \} must be preceded by a backslash. To produce double
+quotes in typewriter typeface, use the " key on your keyboard. To
+produce double quotes in Roman typeface, use `` and '' instead.
+
+The file named memotest.tex that was used to print this memo can
+be used as a template to write your own memos. All of the
+preamble commands that can be used by LaTeX memos are shown in
+memotest.tex. Many of the commands are commented out. They can be
+activated by removing the \% at the beginning of the line.
+
+The spacing and indentation of the preamble commands make the file
+easier to read; the outcome of your file is not affected. The
+preamble begins with the $\backslash$documentstyle command and
+continues to the $\backslash$begin\{document\} command where the
+document section starts. Your file must have a
+$\backslash$end\{document\} command to indicate the end of the
+memo.
+
+The texfonts option was chosen for the header of this memo
+because the Computer Modern fonts are available on any
+installation of TeX\@. Use the postscript, lafonts, or
+memopaper options in the $\backslash$headerfonts command to
+obtain a good looking header.
+
+Get a copy of {\em LaTeX Memo Reference}, CIC \#919, from the
+Computing Information Center to learn more about the LaTeX memo
+commands. The document is also available online as an stexted CFS
+file in two places: /c2doc/unix/slatexmemo and
+/c2doc/vms/slatexmemo. See {\em LaTeX, A Document Preparation
+System} by Leslie Lamport to learn all about the LaTeX commands
+that you can put in the body of your memo.
+
+See {\em LaTeX, A Document Preparation System} by Leslie
+Lamport to learn all about the LaTeX commands that you can put
+in the body of your memo.
+
+\closing
+\end{document}
diff --git a/macros/latex209/contrib/latexinfo/C/Makefile.in b/macros/latex209/contrib/latexinfo/C/Makefile.in
new file mode 100644
index 0000000000..e538dfda13
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/C/Makefile.in
@@ -0,0 +1,109 @@
+# Makefile for the info sources... -*- text -*-
+# Copyright (C) 1990-1991 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+SHELL = /bin/sh
+
+#### Start of system configuration section. ####
+
+srcdir = @srcdir@
+@VPATH@
+
+CC = @CC@
+INSTALL = @INSTALL@
+INSTALLDATA = @INSTALLDATA@
+
+# Things you might add to DEFS:
+# -DSTDC_HEADERS If you have ANSI C headers and libraries.
+# -DUSG If you have System V/ANSI C string and
+# memory functions and headers.
+DEFS = @DEFS@
+
+CDEBUG = -O
+CFLAGS = $(CDEBUG) $(DEFS)
+LDFLAGS = -O
+
+LIBS = @LIBS@
+
+# Colon-separated list of directories in which to look for info files.
+DEFAULT_INFOPATH = .:$(INFODIR):/usr/gnu/info:/usr/local/emacs/info:/usr/local/lib/emacs/info
+
+# Command used to print out a text file. The filename follows this command.
+INFO_PRINT_COMMAND = lpr
+
+prefix = /usr/local
+
+# Where installed binaries go.
+BINDIR = @BINDIR@
+
+# Where info files go.
+INFODIR = @INFODIR@
+
+# Where manual pages go, and their extension (not including `.').
+mandir = @MANDIR@
+manext = 1
+
+#### End of system configuration section. ####
+
+PATHSPEC = -DDEFAULT_INFOPATH='"$(DEFAULT_INFOPATH)"'
+PRINTSPEC = -DINFO_PRINT_COMMAND='"$(INFO_PRINT_COMMAND)"'
+INFO_FLAGS = $(PATHSPEC) $(PRINTSPEC)
+
+SOURCES = info.c latexindex.c getopt.c getopt1.c
+OBJECTS = info.o latexindex.o getopt.o getopt1.o
+HEADERS = getopt.h
+SUPPORT = Makefile.in configure
+
+THINGS_TO_TAR = $(SOURCES) $(HEADERS) $(SUPPORT)
+
+PROGS = info latexindex
+
+all: $(PROGS)
+
+info: info.o getopt.o getopt1.o
+ $(CC) $(LDFLAGS) -o info info.o getopt.o getopt1.o -ltermcap $(LIBS)
+
+info.o: info.c
+ $(CC) -c $(CFLAGS) $(INFO_FLAGS) $info.c<
+
+latexindex: latexindex.o getopt.o getopt1.o
+ $(CC) $(LDFLAGS) -o latexindex latexindex.o getopt.o getopt1.o $(LIBS)
+
+latexindex.o: latexindex.c
+ $(CC) -c $(CFLAGS) $latexindex.c<
+
+info.o latexindex.o getopt1.o: getopt.h
+
+install: all
+ $(INSTALL) $(PROGS) $(BINDIR)
+
+TAGS: $(SOURCES)
+ etags $(SOURCES)
+
+clean:
+ rm -f $(PROGS) $(OBJECTS)
+
+distclean: realclean
+ -rm -f TAGS Makefile config.status
+
+realclean: distclean
+
+dist: $(THINGS_TO_TAR)
+ rm -rf info-dist
+ mkdir info-dist
+ (cd info-dist; for i in $(THINGS_TO_TAR); do ln -s ../$$i .; done)
+ tar chzf info.tar.Z info-dist
+ rm -rf info-dist
diff --git a/macros/latex209/contrib/latexinfo/C/getopt.c b/macros/latex209/contrib/latexinfo/C/getopt.c
new file mode 100644
index 0000000000..bfae486db5
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/C/getopt.c
@@ -0,0 +1,594 @@
+/* Getopt for GNU.
+ Copyright (C) 1987, 88, 89, 90, 91 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* AIX requires this to be the first thing in the file. */
+#ifdef __GNUC__
+#define alloca __builtin_alloca
+#else /* not __GNUC__ */
+#ifdef sparc
+#include <alloca.h>
+#else
+#ifdef _AIX
+ #pragma alloca
+#else
+char *alloca ();
+#endif
+#endif /* sparc */
+#endif /* not __GNUC__ */
+
+#ifndef __STDC__
+#define const
+#endif
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+ but it behaves differently for the user, since it allows the user
+ to intersperse the options with the other arguments.
+
+ As `getopt' works, it permutes the elements of `argv' so that,
+ when it is done, all the options precede everything else. Thus
+ all application programs are extended to handle flexible argument order.
+
+ Setting the environment variable _POSIX_OPTION_ORDER disables permutation.
+ Then the behavior is completely standard.
+
+ GNU application programs can use a third alternative mode in which
+ they can distinguish the relative order of options and other arguments. */
+
+#include <stdio.h>
+
+#if defined(STDC_HEADERS) || defined(__GNU_LIBRARY__)
+#include <stdlib.h>
+#else /* STDC_HEADERS or __GNU_LIBRARY__ */
+char *getenv ();
+char *malloc ();
+#endif /* STDC_HEADERS or __GNU_LIBRARY__ */
+
+#if defined(USG) || defined(NeXT) || defined(hpux) || defined(STDC_HEADERS) || defined(__GNU_LIBRARY__)
+#include <string.h>
+#define bcopy(s, d, n) memcpy ((d), (s), (n))
+#define index strchr
+#else /* USG or NeXT or hpux or STDC_HEADERS or __GNU_LIBRARY__ */
+#ifdef VMS
+#include <string.h>
+#else /* VMS */
+#include <strings.h>
+#endif /* VMS */
+/* Declaring bcopy causes errors on systems whose declarations are different.
+ If the declaration is omitted, everything works fine. */
+#endif /* USG or NeXT or hpux or STDC_HEADERS or __GNU_LIBRARY__ */
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+char *optarg = 0;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns EOF, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+int optind = 0;
+
+/* The next char to be scanned in the option-element
+ in which the last option character we returned was found.
+ This allows us to pick up the scan where we left off.
+
+ If this is zero, or a null string, it means resume the scan
+ by advancing to the next ARGV-element. */
+
+static char *nextchar;
+
+/* Callers store zero here to inhibit the error message
+ for unrecognized options. */
+
+int opterr = 1;
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+ If the caller did not specify anything,
+ the default is REQUIRE_ORDER if the environment variable
+ _POSIX_OPTION_ORDER is defined, PERMUTE otherwise.
+
+ REQUIRE_ORDER means don't recognize them as options;
+ stop option processing when the first non-option is seen.
+ This is what Unix does.
+ This mode of operation is selected by either setting the environment
+ variable POSIX_ME_HARDER, or using `+' as the first character
+ of the list of option characters.
+
+ PERMUTE is the default. We permute the contents of ARGV as we scan,
+ so that eventually all the non-options are at the end. This allows options
+ to be given in any order, even with programs that were not written to
+ expect this.
+
+ RETURN_IN_ORDER is an option available to programs that were written
+ to expect options and other ARGV-elements in any order and that care about
+ the ordering of the two. We describe each non-option ARGV-element
+ as if it were the argument of an option with character code 1.
+ Using `-' as the first character of the list of option characters
+ selects this mode of operation.
+
+ The special argument `--' forces an end of option-scanning regardless
+ of the value of `ordering'. In the case of RETURN_IN_ORDER, only
+ `--' can cause `getopt' to return EOF with `optind' != ARGC. */
+
+static enum
+{
+ REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+} ordering;
+
+/* Describe the long-named options requested by the application.
+ _GETOPT_LONG_OPTIONS is a vector of `struct option' terminated by an
+ element containing a name which is zero.
+ The field `has_arg' is 1 if the option takes an argument,
+ 2 if it takes an optional argument. */
+
+struct option
+{
+ char *name;
+ int has_arg;
+ int *flag;
+ int val;
+};
+
+const struct option *_getopt_long_options;
+
+int _getopt_long_only = 0;
+
+/* Index in _GETOPT_LONG_OPTIONS of the long-named option actually found.
+ Only valid when a long-named option was found. */
+
+int option_index;
+
+/* Handle permutation of arguments. */
+
+/* Describe the part of ARGV that contains non-options that have
+ been skipped. `first_nonopt' is the index in ARGV of the first of them;
+ `last_nonopt' is the index after the last of them. */
+
+static int first_nonopt;
+static int last_nonopt;
+
+/* Exchange two adjacent subsequences of ARGV.
+ One subsequence is elements [first_nonopt,last_nonopt)
+ which contains all the non-options that have been skipped so far.
+ The other is elements [last_nonopt,optind), which contains all
+ the options processed since those non-options were skipped.
+
+ `first_nonopt' and `last_nonopt' are relocated so that they describe
+ the new indices of the non-options in ARGV after they are moved. */
+
+static void
+exchange (argv)
+ char **argv;
+{
+ int nonopts_size = (last_nonopt - first_nonopt) * sizeof (char *);
+ char **temp = (char **) alloca (nonopts_size);
+
+ /* Interchange the two blocks of data in ARGV. */
+
+ bcopy (&argv[first_nonopt], temp, nonopts_size);
+ bcopy (&argv[last_nonopt], &argv[first_nonopt],
+ (optind - last_nonopt) * sizeof (char *));
+ bcopy (temp, &argv[first_nonopt + optind - last_nonopt], nonopts_size);
+
+ /* Update records for the slots the non-options now occupy. */
+
+ first_nonopt += (optind - last_nonopt);
+ last_nonopt = optind;
+}
+
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+ given in OPTSTRING.
+
+ If an element of ARGV starts with '-', and is not exactly "-" or "--",
+ then it is an option element. The characters of this element
+ (aside from the initial '-') are option characters. If `getopt'
+ is called repeatedly, it returns successively each of the option characters
+ from each of the option elements.
+
+ If `getopt' finds another option character, it returns that character,
+ updating `optind' and `nextchar' so that the next call to `getopt' can
+ resume the scan with the following option character or ARGV-element.
+
+ If there are no more option characters, `getopt' returns `EOF'.
+ Then `optind' is the index in ARGV of the first ARGV-element
+ that is not an option. (The ARGV-elements have been permuted
+ so that those that are not options now come last.)
+
+ OPTSTRING is a string containing the legitimate option characters.
+ If an option character is seen that is not listed in OPTSTRING,
+ return '?' after printing an error message. If you set `opterr' to
+ zero, the error message is suppressed but we still return '?'.
+
+ If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+ so the following text in the same ARGV-element, or the text of the following
+ ARGV-element, is returned in `optarg'. Two colons mean an option that
+ wants an optional arg; if there is text in the current ARGV-element,
+ it is returned in `optarg', otherwise `optarg' is set to zero.
+
+ If OPTSTRING starts with `-' or `+', it requests different methods of
+ handling the non-option ARGV-elements.
+ See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+ Long-named options begin with `+' instead of `-'.
+ Their names may be abbreviated as long as the abbreviation is unique
+ or is an exact match for some defined option. If they have an
+ argument, it follows the option name in the same ARGV-element, separated
+ from the option name by a `=', or else the in next ARGV-element.
+ When `getopt' finds a long-named option, it returns 0 if that option's
+ `flag' field is nonzero, the value of the option's `val' field
+ otherwise. */
+
+int
+getopt (argc, argv, optstring)
+ int argc;
+ char **argv;
+ const char *optstring;
+{
+ optarg = 0;
+
+ /* Initialize the internal data when the first call is made.
+ Start processing options with ARGV-element 1 (since ARGV-element 0
+ is the program name); the sequence of previously skipped
+ non-option ARGV-elements is empty. */
+
+ if (optind == 0)
+ {
+ first_nonopt = last_nonopt = optind = 1;
+
+ nextchar = 0;
+
+ /* Determine how to handle the ordering of options and nonoptions. */
+
+ if (optstring[0] == '-')
+ {
+ ordering = RETURN_IN_ORDER;
+ ++optstring;
+ }
+ else if (optstring[0] == '+')
+ {
+ ordering = REQUIRE_ORDER;
+ ++optstring;
+ }
+ else if (getenv ("POSIX_ME_HARDER") != 0)
+ ordering = REQUIRE_ORDER;
+ else
+ ordering = PERMUTE;
+ }
+
+ if (nextchar == 0 || *nextchar == 0)
+ {
+ if (ordering == PERMUTE)
+ {
+ /* If we have just processed some options following some non-options,
+ exchange them so that the options come first. */
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange (argv);
+ else if (last_nonopt != optind)
+ first_nonopt = optind;
+
+ /* Now skip any additional non-options
+ and extend the range of non-options previously skipped. */
+
+ while (optind < argc
+ && (argv[optind][0] != '-'
+ || argv[optind][1] == 0)
+ && (_getopt_long_options == 0
+ || argv[optind][0] != '+'
+ || argv[optind][1] == 0))
+ optind++;
+ last_nonopt = optind;
+ }
+
+ /* Special ARGV-element `--' means premature end of options.
+ Skip it like a null option,
+ then exchange with previous non-options as if it were an option,
+ then skip everything else like a non-option. */
+
+ if (optind != argc && !strcmp (argv[optind], "--"))
+ {
+ optind++;
+
+ if (first_nonopt != last_nonopt && last_nonopt != optind)
+ exchange (argv);
+ else if (first_nonopt == last_nonopt)
+ first_nonopt = optind;
+ last_nonopt = argc;
+
+ optind = argc;
+ }
+
+ /* If we have done all the ARGV-elements, stop the scan
+ and back over any non-options that we skipped and permuted. */
+
+ if (optind == argc)
+ {
+ /* Set the next-arg-index to point at the non-options
+ that we previously skipped, so the caller will digest them. */
+ if (first_nonopt != last_nonopt)
+ optind = first_nonopt;
+ return EOF;
+ }
+
+ /* If we have come to a non-option and did not permute it,
+ either stop the scan or describe it to the caller and pass it by. */
+
+ if ((argv[optind][0] != '-' || argv[optind][1] == 0)
+ && (_getopt_long_options == 0
+ || argv[optind][0] != '+' || argv[optind][1] == 0))
+ {
+ if (ordering == REQUIRE_ORDER)
+ return EOF;
+ optarg = argv[optind++];
+ return 1;
+ }
+
+ /* We have found another option-ARGV-element.
+ Start decoding its characters. */
+
+ nextchar = argv[optind] + 1;
+ }
+
+ if (_getopt_long_options != 0
+ && (argv[optind][0] == '+'
+ || (_getopt_long_only && argv[optind][0] == '-'))
+ )
+ {
+ const struct option *p;
+ char *s = nextchar;
+ int exact = 0;
+ int ambig = 0;
+ const struct option *pfound = 0;
+ int indfound;
+
+ while (*s && *s != '=')
+ s++;
+
+ /* Test all options for either exact match or abbreviated matches. */
+ for (p = _getopt_long_options, option_index = 0; p->name;
+ p++, option_index++)
+ if (!strncmp (p->name, nextchar, s - nextchar))
+ {
+ if (s - nextchar == strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ indfound = option_index;
+ exact = 1;
+ break;
+ }
+ else if (pfound == 0)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else
+ /* Second nonexact match found. */
+ ambig = 1;
+ }
+
+ if (ambig && !exact)
+ {
+ fprintf (stderr, "%s: option `%s' is ambiguous\n",
+ argv[0], argv[optind]);
+ nextchar += strlen (nextchar);
+ optind++;
+ return '?';
+ }
+
+ if (pfound != 0)
+ {
+ option_index = indfound;
+ optind++;
+ if (*s)
+ {
+ if (pfound->has_arg > 0)
+ optarg = s + 1;
+ else
+ {
+ fprintf (stderr,
+ "%s: option `%c%s' doesn't allow an argument\n",
+ argv[0], argv[optind - 1][0], pfound->name);
+ nextchar += strlen (nextchar);
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (optind < argc)
+ optarg = argv[optind++];
+ else
+ {
+ fprintf (stderr, "%s: option `%s' requires an argument\n",
+ argv[0], argv[optind - 1]);
+ nextchar += strlen (nextchar);
+ return '?';
+ }
+ }
+ nextchar += strlen (nextchar);
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+ }
+ /* Can't find it as a long option. If this is getopt_long_only,
+ and the option starts with '-' and is a valid short
+ option, then interpret it as a short option. Otherwise it's
+ an error. */
+ if (_getopt_long_only == 0 || argv[optind][0] == '+' ||
+ index (optstring, *nextchar) == 0)
+ {
+ if (opterr != 0)
+ fprintf (stderr, "%s: unrecognized option `%c%s'\n",
+ argv[0], argv[optind][0], nextchar);
+ nextchar += strlen (nextchar);
+ optind++;
+ return '?';
+ }
+ }
+
+ /* Look at and handle the next option-character. */
+
+ {
+ char c = *nextchar++;
+ char *temp = index (optstring, c);
+
+ /* Increment `optind' when we start to process its last character. */
+ if (*nextchar == 0)
+ optind++;
+
+ if (temp == 0 || c == ':')
+ {
+ if (opterr != 0)
+ {
+ if (c < 040 || c >= 0177)
+ fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
+ argv[0], c);
+ else
+ fprintf (stderr, "%s: unrecognized option `-%c'\n",
+ argv[0], c);
+ }
+ return '?';
+ }
+ if (temp[1] == ':')
+ {
+ if (temp[2] == ':')
+ {
+ /* This is an option that accepts an argument optionally. */
+ if (*nextchar != 0)
+ {
+ optarg = nextchar;
+ optind++;
+ }
+ else
+ optarg = 0;
+ nextchar = 0;
+ }
+ else
+ {
+ /* This is an option that requires an argument. */
+ if (*nextchar != 0)
+ {
+ optarg = nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ optind++;
+ }
+ else if (optind == argc)
+ {
+ if (opterr != 0)
+ fprintf (stderr, "%s: option `-%c' requires an argument\n",
+ argv[0], c);
+ c = '?';
+ }
+ else
+ /* We already incremented `optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ optarg = argv[optind++];
+ nextchar = 0;
+ }
+ }
+ return c;
+ }
+}
+
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+ the above definition of `getopt'. */
+
+int
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+
+ c = getopt (argc, argv, "abc:d:0123456789");
+ if (c == EOF)
+ break;
+
+ switch (c)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/macros/latex209/contrib/latexinfo/C/getopt.h b/macros/latex209/contrib/latexinfo/C/getopt.h
new file mode 100644
index 0000000000..151379fc69
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/C/getopt.h
@@ -0,0 +1,102 @@
+/* declarations for getopt
+ Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* For communication from `getopt' to the caller.
+ When `getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when `ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to `getopt'.
+
+ On entry to `getopt', zero means this is the first call; initialize.
+
+ When `getopt' returns EOF, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, `optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+ for unrecognized options. */
+
+extern int opterr;
+
+/* Describe the long-named options requested by the application.
+ _GETOPT_LONG_OPTIONS is a vector of `struct option' terminated by an
+ element containing a name which is zero.
+
+ The field `has_arg' is:
+ 0 if the option does not take an argument,
+ 1 if the option requires an argument,
+ 2 if the option takes an optional argument.
+
+ If the field `flag' is nonzero, it points to a variable that is set
+ to the value given in the field `val' when the option is found, but
+ left unchanged if the option is not found.
+
+ To have a long-named option do something other than set an `int' to
+ a compiled-in constant, such as set a value from `optarg', set the
+ option's `flag' field to zero and its `val' field to a nonzero
+ value (the equivalent single-letter option character, if there is
+ one). For long options that have a zero `flag' field, `getopt'
+ returns the contents of the `val' field. */
+
+struct option
+{
+ char *name;
+ int has_arg;
+ int *flag;
+ int val;
+};
+
+#ifdef __STDC__
+extern const struct option *_getopt_long_options;
+#else
+extern struct option *_getopt_long_options;
+#endif
+
+/* If nonzero, '-' can introduce long-named options.
+ Set by getopt_long_only. */
+
+extern int _getopt_long_only;
+
+/* The index in GETOPT_LONG_OPTIONS of the long-named option found.
+ Only valid when a long-named option has been found by the most
+ recent call to `getopt'. */
+
+extern int option_index;
+
+#ifdef __STDC__
+int getopt (int argc, char **argv, const char *shortopts);
+int getopt_long (int argc, char **argv, const char *shortopts,
+ const struct option *longopts, int *longind);
+int getopt_long_only (int argc, char **argv, const char *shortopts,
+ const struct option *longopts, int *longind);
+void envopt(int *pargc, char ***pargv, char *optstr);
+#else
+int getopt ();
+int getopt_long ();
+int getopt_long_only ();
+void envopt();
+#endif
diff --git a/macros/latex209/contrib/latexinfo/C/getopt1.c b/macros/latex209/contrib/latexinfo/C/getopt1.c
new file mode 100644
index 0000000000..d1552febab
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/C/getopt1.c
@@ -0,0 +1,166 @@
+/* Getopt for GNU.
+ Copyright (C) 1987, 88, 89, 90, 91 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#include "getopt.h"
+
+#ifndef __STDC__
+#define const
+#endif
+
+#if defined(STDC_HEADERS) || defined(__GNU_LIBRARY__)
+#include <stdlib.h>
+#else /* STDC_HEADERS or __GNU_LIBRARY__ */
+char *getenv ();
+#endif /* STDC_HEADERS or __GNU_LIBRARY__ */
+
+#if !defined (NULL)
+#define NULL 0
+#endif
+
+int
+getopt_long (argc, argv, options, long_options, opt_index)
+ int argc;
+ char **argv;
+ const char *options;
+ const struct option *long_options;
+ int *opt_index;
+{
+ int val;
+
+ /* For strict POSIX compatibility, we must turn off long options. */
+ if (getenv ("POSIX_ME_HARDER") == 0)
+ _getopt_long_options = long_options;
+ val = getopt (argc, argv, options);
+ if (val == 0 && opt_index != NULL)
+ *opt_index = option_index;
+ return val;
+}
+
+/* Like getopt_long, but '-' as well as '+' can indicate a long option.
+ If an option that starts with '-' doesn't match a long option,
+ but does match a short option, it is parsed as a short option
+ instead. */
+
+int
+getopt_long_only (argc, argv, options, long_options, opt_index)
+ int argc;
+ char **argv;
+ const char *options;
+ const struct option *long_options;
+ int *opt_index;
+{
+ int val;
+
+ _getopt_long_options = long_options;
+ _getopt_long_only = 1;
+ val = getopt (argc, argv, options);
+ if (val == 0 && opt_index != NULL)
+ *opt_index = option_index;
+ return val;
+}
+
+
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+ char *name = '\0';
+ int option_index = 0;
+ static struct option long_options[] =
+ {
+ {"add", 1, 0, 0},
+ {"append", 0, 0, 0},
+ {"delete", 1, 0, 0},
+ {"verbose", 0, 0, 0},
+ {"create", 0, 0, 0},
+ {"file", 1, 0, 0},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long (argc, argv, "abc:d:0123456789",
+ long_options, &option_index);
+ if (c == EOF)
+ break;
+
+ switch (c)
+ {
+ case 0:
+ printf ("option %s", (long_options[option_index]).name);
+ if (optarg)
+ printf (" with arg %s", optarg);
+ printf ("\n");
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value `%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/macros/latex209/contrib/latexinfo/C/info.c b/macros/latex209/contrib/latexinfo/C/info.c
new file mode 100644
index 0000000000..96504a0db6
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/C/info.c
@@ -0,0 +1,4501 @@
+/* info -- a stand-alone Info program.
+
+ Version 1.40
+ 24 October 1991
+
+ Copyright (C) 1987, 1991 Free Software Foundation, Inc.
+
+ This file is part of GNU Info.
+
+ GNU Info is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY. No author or distributor accepts
+ responsibility to anyone for the consequences of using it or for
+ whether it serves any particular purpose or works at all, unless he
+ says so in writing. Refer to the GNU Emacs General Public License
+ for full details.
+
+ Everyone is granted permission to copy, modify and redistribute
+ GNU Info, but only under the conditions described in the GNU Emacs
+ General Public License. A copy of this license is supposed to
+ have been given to you along with GNU Emacs so you can know your
+ rights and responsibilities. It should be in a file named COPYING.
+ Among other things, the copyright notice and this notice must be
+ preserved on all copies. */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <pwd.h>
+#include <errno.h>
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
+#include <ctype.h>
+
+#include "getopt.h"
+
+#if defined (USG)
+struct passwd *getpwnam ();
+#include <fcntl.h>
+#include <termio.h>
+#include <string.h>
+
+# if defined (USGr3)
+# include <sys/stream.h>
+# include <sys/ptem.h>
+# undef TIOCGETC
+# endif /* USGr3 */
+#define bcopy(source, dest, count) memcpy(dest, source, count)
+char *index(s,c) char *s; { char *strchr(); return strchr(s,c); }
+char *rindex(s,c) char *s; { char *strrchr(); return strrchr(s,c); }
+#else /* !USG */
+#include <sys/file.h>
+#include <sgtty.h>
+#include <strings.h>
+#endif /* USG */
+
+#if !defined (DEFAULT_INFOPATH)
+#define DEFAULT_INFOPATH ".:/usr/gnu/info:/usr/local/emacs/info:/usr/local/lib/emacs/info"
+#endif /* DEFAULT_INFOPATH */
+
+typedef int boolean;
+#define true 1
+#define false 0
+#define UNIX
+
+typedef struct nodeinfo {
+ char *filename;
+ char *nodename;
+ int pagetop;
+ int nodetop;
+ struct nodeinfo *next;
+} NODEINFO;
+
+typedef struct indirectinfo {
+ char *filename;
+ int first_byte;
+} INDIRECT_INFO;
+
+typedef int Function ();
+
+#define PROJECT_NAME "GNU Info"
+
+#define barf(msg) fprintf(stderr, "%s\n", msg)
+
+/* Some character stuff. */
+#define control_character_threshold 0x020 /* smaller than this is control */
+#define meta_character_threshold 0x07f /* larger than this is Meta. */
+#define control_character_bit 0x40 /* 0x000000, must be off. */
+#define meta_character_bit 0x080/* x0000000, must be on. */
+
+#define info_separator_char '\037'
+#define start_of_node_string "\037"
+
+#ifdef CTRL
+#undef CTRL
+#endif
+
+#define CTRL(c) ((c) & (~control_character_bit))
+#define META(c) ((c) | meta_character_bit)
+
+#define UNMETA(c) ((c) & (~meta_character_bit))
+#define UNCTRL(c) to_upper(((c)|control_character_bit))
+
+#ifndef to_upper
+#define to_upper(c) (((c) < 'a' || (c) > 'z') ? c : c-32)
+#define to_lower(c) (((c) < 'A' || (c) > 'Z') ? c : c+32)
+#endif
+
+#define CTRL_P(c) ((unsigned char) (c) < control_character_threshold)
+#define META_P(c) ((unsigned char) (c) > meta_character_threshold)
+
+#define NEWLINE '\n'
+#define RETURN CTRL('M')
+#define DELETE 0x07f
+#define TAB '\t'
+#define ABORT_CHAR CTRL('G')
+#define PAGE CTRL('L')
+#define SPACE 0x020
+#define ESC CTRL('[')
+#define control_display_prefix '^'
+
+#define TAG_TABLE_END_STRING "\037\nEND TAG TABLE"
+#define TAG_TABLE_BEG_STRING "\nTAG TABLE:\n"
+#define NODE_ID "Node:"
+#define NNODENAME 4 /* Default amount to grow nodename list by. */
+#define FILENAME_LEN 256
+#define NODENAME_LEN 256
+#define STRING_SIZE 256
+#define nodeend_sequence "\n\037"
+
+/* All right, some windows stuff. */
+
+typedef struct {
+ /* Absolute x and y coordinates for usable portion of this window. */
+ int left, top, right, bottom;
+ /* Absolute cursor position in this window. */
+ int ch, cv;
+} WINDOW;
+
+typedef struct _wind_list {
+ int left, top, right, bottom;
+ int ch, cv;
+ struct _wind_list *next_window;
+} WINDOW_LIST;
+
+WINDOW the_window = {0, 0, 80, 24, 0, 0};
+WINDOW_LIST *window_stack = (WINDOW_LIST *)NULL;
+WINDOW terminal_window = {0, 0, 80, 24, 0, 0};
+
+/* Not really extern, but defined later in this file. */
+extern WINDOW echo_area;
+char *xmalloc (), *xrealloc (), *getenv ();
+char *next_info_file (), *opsys_filename ();
+boolean build_menu (), find_menu_node ();
+void swap_filestack (), pop_filestack ();
+
+/* A crock, this should be done in a different way. */
+#define MAX_INDIRECT_FILES 100
+
+/* The info history list. */
+NODEINFO *Info_History = NULL;
+
+/* ?Can't have more than xx files in the indirect list? */
+INDIRECT_INFO indirect_list[MAX_INDIRECT_FILES];
+
+/* The filename of the currently loaded info file. */
+char current_info_file[FILENAME_LEN];
+
+/* The nodename of the node the user is looking at. */
+char current_info_node[NODENAME_LEN];
+
+/* The last file actually loaded. Not the same as current info file. */
+char last_loaded_info_file[FILENAME_LEN];
+
+/* Offsets in info_file of top and bottom of current_info_node. */
+int nodetop, nodebot;
+
+/* Number of lines in this node. */
+int nodelines;
+
+/* Buffer for the info file. */
+char *info_file = NULL;
+
+/* Length of the above buffer. */
+int info_buffer_len;
+
+/* Pointer to the start of a tag table, or NULL to show none. */
+char *tag_table = NULL;
+
+/* Length of the above buffer. */
+int tag_buffer_len;
+
+/* If true, the tag table is indirect. */
+boolean indirect = false;
+int indirect_top;
+
+/* Offset in the buffer of the current pagetop. */
+int pagetop;
+
+/* Offset in the buffer of the last displayed character. */
+int pagebot = 0;
+
+/* If non-NULL, this is a colon separated list of directories to search
+ for a specific info file. The user places this variable into his or
+ her environment. */
+char *infopath = NULL;
+
+/* If filled, the name of a file to write to. */
+char dumpfile[FILENAME_LEN];
+
+/* This is the command to print a node. A default value is compiled in,
+ or it can be found from the environment as $INFO_PRINT_COMMAND. */
+char *print_command;
+
+/* **************************************************************** */
+/* */
+/* Getting Started. */
+/* */
+/* **************************************************************** */
+
+/* Begin the Info session. */
+
+/* Global is on until we are out of trouble. */
+int totally_inhibit_errors = 1;
+
+struct option long_options[] = {
+ {"directory", 1, 0, 'd'},
+ {"node", 1, 0, 'n'},
+ {"file", 1, 0, 'f'},
+ {"output", 1, 0, 'o'},
+ {NULL, 0, NULL, 0}
+};
+
+#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
+
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int c, ind;
+ char filename[FILENAME_LEN];
+ char *nodename;
+ char **nodenames;
+ int nodenames_size, nodenames_index;
+ char *ptr, *env_infopath, *env_print_command;
+
+ nodenames_index = 0;
+ nodenames = (char **)xmalloc ((nodenames_size = 1) * sizeof (char *));
+ nodenames[0] = (char *)NULL;
+
+ env_infopath = getenv ("INFOPATH");
+ env_print_command = getenv ("INFO_PRINT_COMMAND");
+
+ filename[0] = '\0';
+
+ if (env_infopath && *env_infopath)
+ infopath = savestring (env_infopath);
+ else
+ infopath = savestring (DEFAULT_INFOPATH);
+
+ if (env_print_command && *env_print_command)
+ print_command = savestring (env_print_command);
+ else
+ print_command = savestring (INFO_PRINT_COMMAND);
+
+ while ((c = getopt_long (argc, argv, "d:n:f:o:", long_options, &ind)) != EOF)
+ {
+ if (c == 0 && long_options[ind].flag == 0)
+ c = long_options[ind].val;
+ switch (c)
+ {
+ case 0:
+ break;
+
+ case 'd':
+ free (infopath);
+ infopath = savestring (optarg);
+ break;
+
+ case 'n':
+
+ if (nodenames_index + 2 > nodenames_size)
+ nodenames = (char **)
+ xrealloc (nodenames, (nodenames_size += 10) * sizeof (char *));
+
+ nodenames[nodenames_index++] = optarg;
+ nodenames[nodenames_index] = (char *)NULL;
+ break;
+
+ case 'f':
+ strncpy (filename, optarg, FILENAME_LEN);
+ break;
+
+ case 'o':
+ strncpy (dumpfile, optarg, FILENAME_LEN);
+ break;
+
+ default:
+ usage ();
+ }
+ }
+
+ /* Okay, flags are parsed. Get possible Info menuname. */
+
+ if (*filename && (ptr = rindex (filename,'/')) != NULL )
+ {
+ /* Add filename's directory to path. */
+ char *temp;
+
+ temp = (char *)xmalloc (2 + strlen (filename) + strlen (infopath));
+ strncpy (temp, filename, ptr - filename);
+ sprintf (temp + (ptr - filename), ":%s", infopath);
+ free (infopath);
+ infopath = temp;
+ }
+
+ /* Start with DIR or whatever was specified. */
+ if (!get_node (filename, (nodenames[0] == NULL) ? "" : nodenames[0], false)
+ && !get_node ((char *)NULL, (char *)NULL, true))
+ {
+ if (!*filename)
+ strcpy (filename, "dir");
+
+ fprintf (stderr, "%s: Cannot find \"%s\", anywhere along the\n",
+ argv[0], filename);
+ fprintf (stderr, "search path of \"%s\".\n", infopath);
+
+ exit (1);
+ }
+
+ totally_inhibit_errors = 0;
+
+ for (ind = 1 ; ind < nodenames_index ; ind++)
+ get_node (filename, nodenames[ind], false);
+
+ nodename = nodenames[nodenames_index > 0 ? nodenames_index - 1 : 0];
+ if (!nodename)
+ {
+ nodename = (char *)xmalloc (NODENAME_LEN);
+ *nodename = '\0';
+ }
+
+ if (optind != argc)
+ {
+ putchar ('\n');
+
+ while (optind != argc)
+ {
+ if (!build_menu ())
+ {
+ display_error ("There is no menu in node \"%s\"",
+ current_info_node );
+ break;
+ }
+ else if (!find_menu_node (argv[optind], nodename))
+ {
+ display_error
+ ("There is no menu entry for \"%s\" in node \"%s\"",
+ argv[optind], nodename );
+ break;
+ }
+ else if (!get_node ((char *)NULL, nodename, false))
+ {
+ break;
+ }
+ else
+ {
+#if defined (NOTDEF)
+ /* RMS says not to type this stuff out because he expects
+ programs to call Info instead of interactive users. */
+ printf ("%s.. ",argv[optind]);
+ fflush (stdout);
+#endif
+ optind++;
+ }
+ }
+ }
+ begin_info_session ();
+ exit (0);
+}
+
+usage ()
+{
+ fprintf (stderr,"%s\n%s\n%s\n%s\n",
+"Usage: info [-d dir-path] [-f info-file] [-n node-name -n node-name ...]",
+" [-o output-file] [+directory dir-path] [+file info-file]",
+" [+node node-name +node node-name ...]",
+" [+output output-file] [menu-selection...]");
+ exit (1);
+}
+
+#if defined (SIGTSTP)
+Function *old_tstp;
+Function *old_ttou, *old_ttin;
+#endif /* SIGTSTP */
+
+#if defined (SIGWINCH)
+Function *old_winch;
+#endif /* SIGWINCH */
+
+/* Start using Info. */
+begin_info_session ()
+{
+ int info_signal_handler ();
+
+ /* If the user just wants to dump the node, then do that. */
+ if (dumpfile[0])
+ {
+ dump_current_node (dumpfile);
+ exit (0);
+ }
+
+ init_terminal_io ();
+
+ /* Install handlers for restoring/breaking the screen. */
+
+ install_signals ();
+ new_echo_area ();
+
+ print_string ("Welcome to Info! Type \"?\" for help. ");
+ close_echo_area ();
+ toploop ();
+ goto_xy (the_window.left, the_window.bottom + 1);
+ restore_io ();
+}
+
+/* What to do before processing a stop signal. */
+before_stop_signal ()
+{
+ restore_io ();
+}
+
+/* What to do after processing a stop signal. */
+after_stop_signal ()
+{
+ clear_screen ();
+ display_page ();
+ goto_xy (the_window.ch, the_window.cv);
+ opsys_init_terminal ();
+}
+
+/* Do the right thing with this signal. */
+info_signal_handler (sig)
+ int sig;
+{
+ switch (sig)
+ {
+#if defined (SIGTSTP)
+ case SIGTSTP:
+ case SIGTTOU:
+ case SIGTTIN:
+ before_stop_signal ();
+ signal (sig, SIG_DFL);
+ kill (getpid (), sig);
+ after_stop_signal ();
+ signal (sig, info_signal_handler);
+ break;
+#endif /* SIGTSTP */
+
+#if defined (SIGWINCH)
+ case SIGWINCH:
+ /* Window has changed. Get the size of the new window, and rebuild our
+ window chain. */
+ {
+ int display_page ();
+ extern char *widest_line;
+ extern WINDOW terminal_window;
+ extern WINDOW_LIST *window_stack;
+ extern int terminal_rows, terminal_columns;
+ int delta_width, delta_height, right, bottom;
+
+ right = get_terminal_columns ();
+ bottom = get_terminal_rows ();
+
+ delta_width = right - terminal_columns;
+ delta_height = bottom - terminal_rows;
+
+ terminal_columns = right;
+ terminal_rows = bottom;
+
+ /* Save current window, whatever it is. */
+ push_window ();
+
+ /* Change the value of the widest_line. */
+ free (widest_line);
+ widest_line = (char *) xmalloc (right);
+
+ /* Make the new window. Map over all windows in window list. */
+ {
+ WINDOW_LIST *wind = window_stack;
+ extern WINDOW modeline_window;
+
+ while (wind != (WINDOW_LIST *)NULL)
+ {
+ adjust_wind ((WINDOW *)wind, delta_width, delta_height);
+ wind = wind->next_window;
+ }
+
+ /* Adjust the other windows that we know about. */
+ adjust_wind (&terminal_window, delta_width, delta_height);
+ adjust_wind (&echo_area, delta_width, delta_height);
+ adjust_wind (&modeline_window, delta_width, delta_height);
+ }
+
+ /* Clear and redisplay the entire terminal window. */
+ set_window (&terminal_window);
+ clear_screen ();
+
+ /* Redisplay the contents of the screen. */
+ with_output_to_window (&terminal_window, display_page);
+
+ /* Get back the current window. */
+ pop_window ();
+ }
+ break;
+#endif /* SIGWINCH */
+
+ case SIGINT:
+ restore_io ();
+ exit (1);
+ break;
+ }
+}
+
+install_signals ()
+{
+#if defined (SIGTSTP)
+ old_tstp = (Function *) signal (SIGTSTP, info_signal_handler);
+ old_ttou = (Function *) signal (SIGTTOU, info_signal_handler);
+ old_ttin = (Function *) signal (SIGTTIN, info_signal_handler);
+#endif /* SIGTSTP */
+
+#if defined (SIGWINCH)
+ old_winch = (Function *) signal (SIGWINCH, info_signal_handler);
+#endif /* SIGWINCH */
+
+ signal (SIGINT, info_signal_handler);
+}
+
+adjust_wind (wind, delta_width, delta_height)
+ WINDOW *wind;
+ int delta_width, delta_height;
+{
+ wind->right += delta_width;
+ wind->bottom += delta_height;
+ wind->ch += delta_width;
+ wind->cv += delta_height;
+
+ /* Ugly hack to fix busted windows code. If the window we are adjusting
+ already has a TOP offset, then adjust that also. */
+ if (wind->top)
+ wind->top += delta_height;
+}
+
+/* **************************************************************** */
+/* */
+/* Completing Things */
+/* */
+/* **************************************************************** */
+
+typedef struct completion_entry
+{
+ char *identifier;
+ char *data;
+ struct completion_entry *next;
+} COMP_ENTRY;
+
+/* The linked list of COMP_ENTRY structures that you create. */
+COMP_ENTRY *completion_list = (COMP_ENTRY *) NULL;
+
+/* The vector of COMP_ENTRY pointers that COMPLETE returns. */
+COMP_ENTRY **completions = NULL;
+
+/* The number of elements in the above vector. */
+int completion_count;
+
+/* Initial size of COMPLETIONS array. */
+#define INITIAL_COMPLETIONS_CORE_SIZE 200
+
+/* Current size of the completion array in core. */
+int completions_core_size = 0;
+
+/* Ease the typing task. Another name for the I'th
+ IDENTIFIER of COMPLETIONS. */
+#define completion_id(i) ((completions[(i)])->identifier)
+
+/* The number of completions that can be present before the help
+ function starts asking you about whether it should print them
+ all or not. */
+int completion_query_threshold = 100;
+
+free_completion_list ()
+{
+ COMP_ENTRY *temp;
+ while (completion_list)
+ {
+ temp = completion_list;
+
+ if (completion_list->identifier)
+ free (completion_list->identifier);
+
+ if (completion_list->data)
+ free (completion_list->data);
+
+ completion_list = completion_list->next;
+ free (temp);
+ }
+}
+
+/* Add a single completion to COMPLETION_LIST.
+ IDENTIFIER is the string that the user should type.
+ DATA should just be a pointer to some random data that you wish to
+ have associated with the identifier, but I'm too stupid for that, so
+ it must be a string as well. This allocates the space for the strings
+ so you don't necessarily have to. */
+add_completion (identifier, data)
+ char *identifier, *data;
+{
+ COMP_ENTRY *temp = (COMP_ENTRY *) xmalloc (sizeof (COMP_ENTRY));
+
+ temp->identifier = (char *) xmalloc (strlen (identifier) + 1);
+ strcpy (temp->identifier, identifier);
+
+ temp->data = (char *) xmalloc (strlen (data) + 1);
+ strcpy (temp->data, data);
+
+ temp->next = completion_list;
+ completion_list = temp;
+}
+
+/* Function for reading a line. Supports completion on COMPLETION_LIST
+ if you pass COMPLETING as true. Prompt is either a prompt or NULL,
+ LINE is the place to store the characters that are read. LINE may start
+ out already containing some characters; if so, they are printed. MAXCHARS
+ tells how many characters can fit in the buffer at LINE. READLINE returns
+ FALSE if the user types the abort character. LINE is returned with a '\0'
+ at the end, not a '\n'. */
+boolean
+readline (prompt, line, maxchars, completing)
+ char *prompt, *line;
+ int maxchars;
+ boolean completing;
+{
+ int character;
+ int readline_ch, readline_cv;
+ int current_len = strlen (line);
+ int just_completed = 0; /* Have we just done a completion? */
+ int meta_flag = 0;
+
+ new_echo_area ();
+
+ if (prompt)
+ print_string (prompt);
+
+ readline_ch = the_window.ch;
+ readline_cv = the_window.cv;
+
+ print_string (line);
+
+ while (true)
+ {
+ line[current_len] = '\0';
+ goto_xy (readline_ch, readline_cv);
+ print_string (line);
+ clear_eol ();
+
+ if (just_completed)
+ just_completed--;
+
+ character = blink_cursor ();
+ if (meta_flag)
+ {
+ character = META (character);
+ meta_flag = 0;
+ }
+
+ if (META_P (character))
+ character = META (to_upper (UNMETA (character)));
+
+ switch (character)
+ {
+ case EOF:
+ character = '\n';
+
+ case ESC:
+ meta_flag++;
+ break;
+
+ case META (DELETE):
+ case CTRL ('W'):
+ while (current_len && line[current_len] == SPACE)
+ current_len--;
+
+ if (!current_len)
+ break;
+
+ while (current_len && line[current_len] != SPACE)
+ current_len--;
+
+ break;
+
+ case CTRL ('U'):
+ current_len = 0;
+ break;
+
+ case '\b':
+ case 0x07f:
+ if (current_len)
+ current_len--;
+ else
+ ding ();
+ break;
+
+ case '\n':
+ case '\r':
+ if (completing)
+ {
+ extern int completion_count;
+
+ try_complete (line);
+
+ if (completion_count >= 1)
+ {
+ close_echo_area ();
+ return (true);
+ }
+ else
+ {
+ current_len = strlen (line);
+ break;
+ }
+ }
+ else
+ {
+ close_echo_area ();
+ return (true);
+ }
+
+ case ABORT_CHAR:
+ ding ();
+
+ if (current_len)
+ {
+ current_len = 0;
+ }
+ else
+ {
+ close_echo_area ();
+ clear_echo_area ();
+ return (false);
+ }
+ break;
+
+ case ' ':
+ case '\t':
+ case '?':
+ if (completing)
+ {
+ extern int completion_count;
+
+ if (character == '?' || just_completed)
+ {
+ help_possible_completions (line);
+ break;
+ }
+ else
+ {
+ char temp_line[NODENAME_LEN];
+ strcpy (temp_line, line);
+ try_complete (line); just_completed = 2;
+ if (completion_count != 1 && character == SPACE)
+ {
+ if (strcmp (temp_line, line) == 0)
+ {
+ line[current_len] = SPACE;
+ line[current_len + 1] = '\0';
+ strcpy (temp_line, line);
+ try_complete (line);
+ if (completion_count == 0)
+ {
+ line[current_len] = '\0';
+ ding ();
+ }
+ }
+ }
+ current_len = strlen (line);
+ if (completion_count == 0)
+ ding ();
+ break;
+ }
+ }
+ /* Do *NOT* put anything in-between the completing cases and
+ the default: case. No. Because the SPC, TAB and `?' get
+ treated as normal characters by falling through the
+ "if (completing)" test above. */
+ default:
+ if (!CTRL_P (character) &&
+ !META_P (character) &&
+ current_len < maxchars)
+ line[current_len++] = character;
+ else
+ ding ();
+ }
+ }
+}
+
+/* Initialize whatever the completer is using. */
+init_completer ()
+{
+ if (completions_core_size != INITIAL_COMPLETIONS_CORE_SIZE)
+ {
+ if (completions)
+ free (completions);
+
+ completions = (COMP_ENTRY **)
+ xmalloc ((sizeof (COMP_ENTRY *))
+ * (completions_core_size = INITIAL_COMPLETIONS_CORE_SIZE));
+ }
+ completion_count = 0;
+}
+
+/* Reverse the completion list passed in LIST, and
+ return a pointer to the new head. */
+COMP_ENTRY *
+reverse_list (list)
+ COMP_ENTRY *list;
+{
+ COMP_ENTRY *next;
+ COMP_ENTRY *prev = (COMP_ENTRY *) NULL;
+
+ while (list)
+ {
+ next = list->next;
+ list->next = prev;
+ prev = list;
+ list = next;
+ }
+ return (prev);
+}
+
+/* Remember the possible completion passed in POINTER on the
+ completions list. */
+remember_completion (pointer)
+ COMP_ENTRY *pointer;
+{
+ if (completion_count == completions_core_size)
+ {
+ COMP_ENTRY **temp = (COMP_ENTRY **)
+ realloc (completions, ((sizeof (COMP_ENTRY *))
+ * (completions_core_size +=
+ INITIAL_COMPLETIONS_CORE_SIZE)));
+ if (!temp)
+ {
+ display_error ("Too many completions (~d)! Out of core!",
+ completion_count);
+ return;
+ }
+ else
+ completions = temp;
+ }
+ completions[completion_count++] = pointer;
+}
+
+/* Complete TEXT from identifiers in LIST. Place the resultant
+ completions in COMPLETIONS, and the number of completions in
+ COMPLETION_COUNT. Modify TEXT to contain the least common
+ denominator of all the completions found. */
+boolean
+complete (text, list)
+ char *text;
+ COMP_ENTRY *list;
+{
+ int low_match, i, idx;
+ int string_length = strlen (text);
+
+ init_completer ();
+ low_match = 100000; /* Some large number. */
+
+ while (list)
+ {
+ if (strnicmp (text, list->identifier, string_length) == 0)
+ remember_completion (list);
+ list = list->next;
+ }
+
+ if (completion_count == 0)
+ return (false);
+
+ if (completion_count == 1)
+ { /* One completion */
+ strcpy (text, completion_id (0));
+ return (true);
+ }
+
+ /* Else find the least common denominator */
+
+ idx = 1;
+
+ while (idx < completion_count)
+ {
+ int c1, c2;
+ for (i = 0;
+ (c1 = to_lower (completion_id (idx - 1)[i])) &&
+ (c2 = to_lower (completion_id (idx)[i]));
+ i++)
+ if (c1 != c2)
+ break;
+
+ if (low_match > i)
+ low_match = i;
+ idx++;
+ }
+
+ strncpy (text, completion_id (0), low_match);
+ text[low_match] = '\0';
+ return (true);
+}
+
+/* Complete TEXT from the completion structures in COMPLETION_LIST. */
+boolean
+try_complete (text)
+ char *text;
+{
+ return (complete (text, completion_list));
+}
+
+/* The function that prints out the possible completions. */
+help_possible_completions (text)
+ char *text;
+{
+ char temp_string[2000];
+
+ goto_xy (the_window.left, the_window.top);
+ strcpy (temp_string, text);
+ try_complete (temp_string);
+
+ open_typeout ();
+
+ if (completion_count == 0)
+ {
+ print_string ("There are no possible completions.\n");
+ goto print_done;
+ }
+
+ if (completion_count == 1)
+ {
+ print_string
+ ("The only possible completion of what you have typed is:\n\n");
+ print_string (completion_id(0));
+ goto print_done;
+ }
+
+ if (completion_count >= completion_query_threshold)
+ {
+ print_string
+ ("\nThere are %d completions. Do you really want to see them all",
+ completion_count);
+
+ if (!get_y_or_n_p ())
+ return;
+ }
+
+ print_string ("\nThe %d completions of what you have typed are:\n\n",
+ completion_count);
+
+ {
+ int idx = 0;
+ int counter = 0;
+ int columns = (the_window.right - the_window.left) / 30;
+
+ while (idx < completion_count)
+ {
+ if (counter == columns)
+ {
+ charout ('\n');
+ counter = 0;
+ }
+ indent_to (counter * 30);
+ print_string (completion_id (idx));
+ counter++;
+ idx++;
+ }
+ }
+
+print_done:
+ print_string ("\n\n-----------------\n");
+ close_typeout ();
+}
+
+/* Return the next file that should be searched, or NULL if we are at the end
+ of the info file. If the FILE argument is provided, begin the search there,
+ if REWIND is true start the search at the beginning of the list.
+
+ The list is the one built by an indirect tag table, on the supposition
+ that those files form a logical set to search if we are in one of them.
+ If no such list is current (either it doesn't exist, or FILE isn't on
+ it) the search list is set to be last_loaded_info_file */
+char *
+next_info_file (file, rewind)
+ char *file; /* file to set `next' to. May be NULL. */
+ boolean rewind; /* should I rewind the file list? */
+{
+ static int index = -1;
+
+ if (file != NULL)
+ {
+ char *ptr = rindex (file,'/');
+
+ if (ptr != NULL)
+ file = ptr + 1;
+
+ for (index = 0;
+ index < MAX_INDIRECT_FILES &&
+ indirect_list[index].filename != (char *)NULL;
+ index++)
+ {
+ if (strcmp (file, indirect_list[index].filename) == 0)
+ return (file);
+ }
+
+ /* OK, we are not on the current indirect_list. This means that
+ we have switched to another node that has no indirect list,
+ so forget the old one. */
+ for (index = 0;
+ index < MAX_INDIRECT_FILES &&
+ indirect_list[index].filename != (char *)NULL;
+ index++)
+ {
+ free (indirect_list[index].filename);
+ indirect_list[index].filename = (char *)NULL;
+ }
+ return (indirect_list[0].filename = savestring (file));
+ }
+ else if (rewind)
+ {
+ index = 0;
+
+ if (indirect_list[0].filename == (char *)NULL)
+ indirect_list[0].filename = savestring (last_loaded_info_file);
+ }
+ else
+ index++;
+
+ if (index < MAX_INDIRECT_FILES &&
+ indirect_list[index].filename != (char *)NULL)
+ return (indirect_list[index].filename);
+
+ index = -1;
+ return (NULL);
+}
+
+/* **************************************************************** */
+/* */
+/* Getting Nodes */
+/* */
+/* **************************************************************** */
+
+/* A node name looks like:
+ Node: nodename with spaces but not a comma,
+or Node: (filename-containing-node)node-within-file
+or Node: (filename)
+
+ The latter case implies a nodename of "Top". All files are
+ supposed to have one.
+
+ Lastly, the nodename specified could be "*", which specifies the
+ entire file. */
+
+/* Return the directory portion of FILENAME, i.e., everything before the
+ last slash. */
+static char *
+file_directory (filename)
+ char *filename;
+{
+ register char *scan;
+ register int length;
+ char *result;
+
+ scan = filename;
+
+ while (*scan++ != '\0');
+
+ while (1)
+ {
+ if (scan == filename)
+ break;
+
+ if ((*--scan) == '/')
+ {
+ scan++;
+ break;
+ }
+ }
+
+ length = (scan - filename);
+ result = (xmalloc (length + 1));
+ strncpy (result, filename, length);
+ result[length] = '\0';
+
+ return (result);
+}
+
+/* Given FILENAME and DIRECTORY return a newly allocated string which
+ is either the two concatenated, or simply FILENAME if it is absolute
+ already. */
+static char *
+file_absolutize (filename, directory)
+ char *filename, *directory;
+{
+ register int filename_len, directory_len;
+ char *result;
+
+ if (filename[0] == '/')
+ return (savestring (filename));
+
+ filename_len = strlen (filename);
+ directory_len = strlen (directory);
+ result = xmalloc (directory_len + filename_len + 1);
+
+ strcpy (result, directory);
+ strcat (result, filename);
+
+ return (result);
+}
+
+/* Load FILENAME. If REMEMBER_NAME is true, then remember the
+ loaded filename in CURRENT_INFO_FILE. In either case, remember
+ the name of this file in LAST_LOADED_INFO_FILE. */
+boolean
+get_info_file (filename, remember_name)
+ char *filename;
+ boolean remember_name;
+{
+ FILE *input_stream;
+ struct stat file_info;
+ int pointer, result;
+ char tempname[FILENAME_LEN];
+
+ /* Get real filename. */
+ strcpy (tempname, opsys_filename (filename));
+
+ /* See if the file exists. */
+ if ((result = stat (tempname, &file_info)) != 0)
+ {
+ /* Try again, this time with the name in lower-case. */
+ char temp_tempname[FILENAME_LEN];
+ int i;
+
+ for (i = 0; temp_tempname[i] = to_lower (tempname[i]); i++);
+ strcpy (temp_tempname, opsys_filename (temp_tempname));
+
+ result = stat (temp_tempname, &file_info);
+ if (!result)
+ strcpy (tempname, temp_tempname);
+ }
+
+ /* See if this file is the last loaded one. */
+ if (!result && (strcmp (last_loaded_info_file, tempname) == 0))
+ return (true);
+
+ /* Now try to open the file. */
+ if (result || (input_stream = fopen (tempname, "r")) == NULL)
+ {
+ file_error (tempname);
+ return (false);
+ }
+
+ /* If we already have a file loaded, then free it first. */
+ if (info_file)
+ {
+ free (info_file);
+
+ if (!indirect)
+ {
+ /* Then the tag table is also no longer valid. */
+ tag_table = (char *) NULL;
+ }
+ }
+
+ /* Read the contents of the file into a new buffer. */
+
+ info_file = (char *) xmalloc (info_buffer_len = file_info.st_size);
+ fread (info_file, 1, info_buffer_len, input_stream);
+ fclose (input_stream);
+ strcpy (last_loaded_info_file, tempname);
+ if (remember_name)
+ {
+ strcpy (current_info_file, tempname);
+ if (indirect)
+ {
+ int idx;
+ indirect = false;
+ free (tag_table);
+ }
+ }
+ else
+ return (true);
+
+ /* The file has been read, and we don't know anything about it.
+ Find out if it contains a tag table. */
+
+ tag_table = NULL; /* assume none. */
+ indirect = false;
+ tag_buffer_len = 0;
+
+ set_search_constraints (info_file, info_buffer_len);
+
+ /* Go to the last few lines in the file. */
+ pointer = back_lines (8, info_buffer_len);
+ pointer = search_forward (TAG_TABLE_END_STRING, pointer);
+
+ if (pointer > -1)
+ {
+ /* Then there is a tag table. Find the start of it,
+ and remember that. */
+ pointer = search_backward (TAG_TABLE_BEG_STRING, pointer);
+
+ /* Handle error for malformed info file. */
+ if (pointer < 0)
+ display_error ("Start of tag table not found!");
+ else
+ {
+ /* No problem. If this file is an indirect file, then the contents
+ of the tag table must remain in RAM the entire time. Otherwise,
+ we can flush the tag table with the file when the file is flushed.
+ So, if indirect, remember that, and copy the table to another
+ place.*/
+
+ int indirect_check = forward_lines (2, pointer);
+
+ tag_table = info_file + pointer;
+ tag_buffer_len = info_buffer_len - pointer;
+
+ /* Shorten the search constraints. */
+ info_buffer_len = pointer;
+
+ if (looking_at ("(Indirect)\n", indirect_check))
+ {
+ /* We have to find the start of the indirect file's
+ information. */
+ tag_table = (char *) xmalloc (tag_buffer_len);
+
+ bcopy (&info_file[indirect_check], tag_table, tag_buffer_len);
+
+ /* Find the list of filenames. */
+ indirect_top = search_backward ("Indirect:\n", indirect_check);
+ if (indirect_top < 0)
+ {
+ free (tag_table);
+ tag_table = (char *) NULL;
+ display_error ("Start of INDIRECT tag table not found!");
+ return (false);
+ }
+
+ /* Remember the filenames, and their byte offsets. */
+ {
+ /* Index into the filename/offsets array. */
+ int idx, temp_first_byte;
+ char temp_filename[FILENAME_LEN];
+ char *directory = file_directory (tempname);
+
+ info_buffer_len = indirect_top;
+
+ /* For each line, scan the info into globals. Then save
+ the information in the INDIRECT_INFO structure. */
+
+ for (idx = 0; idx < MAX_INDIRECT_FILES &&
+ indirect_list[idx].filename != (char *) NULL;
+ idx++)
+ {
+ free (indirect_list[idx].filename);
+ indirect_list[idx].filename = (char *) NULL;
+ }
+
+ for (idx = 0;info_file[indirect_top] != info_separator_char &&
+ idx < MAX_INDIRECT_FILES;)
+ {
+ indirect_top = forward_lines (1, indirect_top);
+ if (info_file[indirect_top] == info_separator_char)
+ break;
+
+ /* Ignore blank lines. */
+ if (info_file[indirect_top] == '\n')
+ continue;
+
+ sscanf (&info_file[indirect_top], "%s%d",
+ temp_filename, &temp_first_byte);
+
+ if (strlen (temp_filename))
+ {
+ temp_filename[strlen (temp_filename) - 1] = '\0';
+ indirect_list[idx].filename =
+ file_absolutize (temp_filename, directory);
+ indirect_list[idx].first_byte = temp_first_byte;
+ idx++;
+ }
+ }
+
+ free (directory);
+
+ /* Terminate the table. */
+ if (idx == MAX_INDIRECT_FILES)
+ {
+ display_error
+ ("Sorry, the INDIRECT file array isn't large enough.");
+ idx--;
+ }
+ indirect_list[idx].filename = (char *) NULL;
+ }
+ indirect = true;
+ } else {
+ ;
+ }
+ }
+ }
+ return (true);
+}
+
+/* Make current_info_node be NODENAME. This could involve loading
+ a file, etc. POPPING is true if we got here because we are popping
+ one level. */
+boolean
+get_node (filename, nodename, popping)
+ char *nodename, *filename;
+ boolean popping;
+{
+ int pointer;
+ char internal_filename[FILENAME_LEN];
+ char internal_nodename[NODENAME_LEN];
+
+ if (nodename && *nodename)
+ {
+ /* Maybe nodename looks like: (filename)nodename, or worse: (filename).
+ If so, extract the stuff out. */
+ if (*nodename == '(')
+ {
+ int temp = 1, temp1 = 0;
+ char character;
+
+ filename = internal_filename;
+
+ while ((character = nodename[temp]) && character != ')')
+ {
+ filename[temp - 1] = character;
+ temp++;
+ }
+ filename[temp - 1] = '\0';
+ temp++; /* skip the closing ')' */
+
+ /* We have the filename now. The nodename follows. */
+ internal_nodename[0] = '\0';
+
+ while (nodename[temp] == ' ' ||
+ nodename[temp] == '\t' ||
+ nodename[temp] == '\n')
+ temp++;
+
+ if (nodename[temp])
+ while (internal_nodename[temp1++] = nodename[temp++])
+ ;
+ else if (*filename != '\0')
+ strcpy (internal_nodename,"Top");
+
+ nodename = internal_nodename;
+ }
+ }
+
+ if (!popping)
+ push_node (current_info_file, current_info_node, pagetop, nodetop);
+
+ if (!nodename || !*nodename)
+ {
+ nodename = internal_nodename;
+ strcpy (nodename, "Top");
+ }
+
+ if (!filename || !*filename)
+ {
+ filename = internal_filename;
+ strcpy (filename, current_info_file);
+ }
+
+ if (!*filename)
+ strcpy (filename, "dir");
+
+ if (!get_info_file (filename, true))
+ goto node_not_found;
+
+ if (strcmp (nodename, "*") == 0)
+ {
+ /* The "node" that we want is the entire file. */
+ pointer = 0;
+ goto found_node;
+ }
+
+ /* If we are using a tag table, see if we can find the nodename in it. */
+ if (tag_table)
+ {
+ pointer = find_node_in_tag_table (nodename, 0);
+ if (pointer < 1)
+ {
+ boolean pop_node ();
+
+ /* The search through the tag table failed. Maybe we
+ should try searching the buffer? Nahh, just barf. */
+ node_not_found:
+ if (popping)
+ return (false); /* Second time through. */
+
+ {
+ int save_inhibit = totally_inhibit_errors;
+
+ totally_inhibit_errors = 0;
+ display_error
+ ("Sorry, unable to find the node \"%s\" in the file \"%s\".",
+ nodename, filename);
+ totally_inhibit_errors = save_inhibit;
+ }
+
+ current_info_file[0] = '\0';
+ current_info_node[0] = '\0';
+ last_loaded_info_file[0] = '\0';
+ pop_node (internal_filename, internal_nodename, &nodetop, &pagetop);
+ get_node (internal_filename, internal_nodename, true);
+ return (false);
+ }
+
+ /* Otherwise, the desired location is right here.
+ Scarf the position byte. */
+ while (tag_table[pointer] != '\177')
+ pointer++;
+
+ sscanf (&tag_table[pointer + 1], "%d", &pointer);
+
+ /* Okay, we have a position pointer. If this is an indirect file,
+ then we should look through the indirect_list for the first
+ element.first_byte which is larger than this. Then we can load
+ the specified file, and win. */
+ if (indirect)
+ {
+ /* Find the filename for this node. */
+ int idx;
+ for (idx = 0; idx < MAX_INDIRECT_FILES &&
+ indirect_list[idx].filename != (char *) NULL; idx++)
+ {
+ if (indirect_list[idx].first_byte > pointer)
+ {
+ /* We found it. */
+ break;
+ }
+ }
+ if (!get_info_file (indirect_list[idx - 1].filename, true))
+ goto node_not_found;
+ pointer -= indirect_list[idx - 1].first_byte;
+
+ /* Here is code to compensate for the header of an indirect file. */
+ {
+ int tt = find_node_start (0);
+ if (tt > -1)
+ pointer += tt;
+ }
+ }
+ else
+ {
+ /* This tag table is *not* indirect. The filename of the file
+ containing this node is the same as the current file. The
+ line probably looks like:
+ File: info, Node: Checking25796 */
+ }
+ }
+ else
+ {
+ /* We don't have a tag table. The node can only be found by
+ searching this file in its entirety. */
+ get_info_file (filename, true);
+ pointer = 0;
+ }
+
+ /* Search this file, using pointer as a good guess where to start. */
+ /* This is the same number that RMS used. It might be right or wrong. */
+ pointer -= 1000;
+ if (pointer < 0)
+ pointer = 0;
+
+ pointer = find_node_in_file (nodename, pointer);
+ if (pointer < 0)
+ goto node_not_found;
+
+ /* We found the node in it's file. Remember exciting information. */
+
+found_node:
+ back_lines (0, pointer);
+ nodetop = pagetop = pointer;
+ strcpy (current_info_node, nodename);
+ strcpy (current_info_file, filename);
+ get_node_extent ();
+ return (true);
+}
+
+/* Get the bounds for this node. NODETOP points to the start of the
+ node. Scan forward looking for info_separator_char, and remember
+ that in NODEBOT. */
+get_node_extent ()
+{
+ int idx = nodetop;
+ int character;
+ boolean do_it_till_end = (strcmp (current_info_node, "*") == 0);
+
+ nodelines = 0;
+
+again:
+ while ((idx < info_buffer_len) &&
+ ((character = info_file[idx]) != info_separator_char))
+ {
+ if (character == '\n')
+ nodelines++;
+ idx++;
+ }
+ if (do_it_till_end && idx != info_buffer_len)
+ {
+ idx++;
+ goto again;
+ }
+ nodebot = idx;
+}
+
+/* Locate the start of a node in the current search_buffer. Return
+ the offset to the node start, or minus one. START is the place in
+ the file at where to begin the search. */
+find_node_start (start)
+ int start;
+{
+ return (search_forward (start_of_node_string, start));
+}
+
+/* Find NODENAME in TAG_TABLE. */
+find_node_in_tag_table (nodename, offset)
+ char *nodename;
+ int offset;
+{
+ int temp;
+
+ set_search_constraints (tag_table, tag_buffer_len);
+
+ temp = offset;
+ while (true)
+ {
+ offset = search_forward (NODE_ID, temp);
+
+ if (offset < 0)
+ return (offset);
+
+ temp = skip_whitespace (offset + strlen (NODE_ID));
+
+ if (strnicmp (tag_table + temp, nodename, strlen (nodename)) == 0)
+ if (*(tag_table + temp + strlen (nodename)) == '\177')
+ return (temp);
+ }
+}
+
+/* Find NODENAME in INFO_FILE. */
+find_node_in_file (nodename, offset)
+ char *nodename;
+ int offset;
+{
+ int temp, last_offset = -1;
+
+ set_search_constraints (info_file, info_buffer_len);
+
+ while (true)
+ {
+ offset = find_node_start (offset);
+
+ if (offset == last_offset)
+ offset = -1;
+ else
+ last_offset = offset;
+
+ if (offset < 0)
+ return (offset);
+ else
+ temp = forward_lines (1, offset);
+
+ if (temp == offset)
+ return (-1); /* At last line now, just a node start. */
+ else
+ offset = temp;
+
+ temp = string_in_line (NODE_ID, offset);
+
+ if (temp > -1)
+ {
+ temp = skip_whitespace (temp + strlen (NODE_ID));
+ if (strnicmp (info_file + temp, nodename, strlen (nodename)) == 0)
+ {
+ int check_exact = *(info_file + temp + strlen (nodename));
+
+ if (check_exact == '\t' ||
+ check_exact == ',' ||
+ check_exact == '.' ||
+ check_exact == '\n')
+ return (offset);
+ }
+ }
+ }
+}
+
+
+/* **************************************************************** */
+/* */
+/* Dumping and Printing Nodes */
+/* */
+/* **************************************************************** */
+
+/* Make a temporary filename based on STARTER and the PID of this Info. */
+char *
+make_temp_filename (starter)
+ char *starter;
+{
+ register int i;
+ char *temp;
+
+ temp = (char *)xmalloc (strlen (starter) + 10);
+ sprintf (temp, "%s-%d", starter, getpid ());
+
+ for (i = 0; temp[i]; i++)
+ if (!isalnum (temp[i]))
+ temp[i] == '-';
+
+ return (temp);
+}
+
+/* Delete a file. Print errors if necessary. */
+deletefile (filename)
+ char *filename;
+{
+ if (unlink (filename) != 0)
+ {
+ file_error (filename);
+ return (1);
+ }
+ return (0);
+}
+
+printfile (filename)
+ char *filename;
+{
+ int length = strlen (print_command) + strlen (filename) + strlen ("\n") + 1;
+ char *command = (char *) xmalloc (length);
+ int error;
+
+ display_error ("Printing file `%s'...\n", filename);
+ sprintf (command, "%s %s", print_command, filename);
+ error = system (command);
+ if (error)
+ display_error ("Can't invoke `%s'", command);
+ free (command);
+ return (error);
+}
+
+/* Dump the current node into a file named FILENAME.
+ Return 0 if the dump was successful, otherwise,
+ print error and exit. */
+dump_current_node (filename)
+ char *filename;
+{
+ int i = nodetop;
+ int c;
+ FILE *output_stream = fopen (filename, "w");
+ if (output_stream == (FILE *) NULL)
+ {
+ file_error (filename);
+ return (1);
+ }
+
+ while (i < nodebot && i < info_buffer_len)
+ {
+ c = info_file[i];
+ if (c < 0x020 && !(index ("\n\t\f", c)))
+ {
+ putc ('^', output_stream);
+ }
+ if (putc (info_file[i++], output_stream) == EOF)
+ {
+ fclose (output_stream);
+ file_error (filename);
+ return (1);
+ }
+ }
+ fclose (output_stream);
+ return (0);
+}
+
+/* **************************************************************** */
+/* */
+/* Toplevel eval loop. */
+/* */
+/* **************************************************************** */
+
+#define MENU_HEADER "\n* Menu:"
+#define MENU_ID "\n* "
+#define FOOTNOTE_HEADER "*Note"
+
+/* Number of items that the current menu has. */
+int the_menu_size = 0;
+
+/* The node that last made a menus completion list. */
+char menus_nodename[NODENAME_LEN];
+char menus_filename[NODENAME_LEN];
+
+boolean window_bashed = false;
+static int search_start = 0;
+
+/* The default prompt string for the Follow Reference command. */
+char *visible_footnote = (char *)NULL;
+toploop ()
+{
+ boolean done = false;
+ boolean inhibit_display = false;
+ int command = '\0', last_command = '\0';
+ int last_pointer, count, new_ypos, last_pagetop;
+ char nodename[NODENAME_LEN];
+
+ new_ypos = last_pagetop = -1;
+
+ while (!done)
+ {
+ if (!inhibit_display &&
+ (window_bashed || (pagetop != last_pagetop)))
+ display_page ();
+
+ inhibit_display = window_bashed = false;
+ last_pagetop = pagetop;
+
+ nodename[0] = '\0'; /* Don't display old text in input line. */
+
+ last_command = command;
+
+ if (last_command == 'S')
+ cursor_to (search_start);
+ else
+ goto_xy (echo_area.left, echo_area.top);
+
+ command = blink_cursor ();
+ clear_echo_area ();
+
+ if (command == EOF)
+ {
+ done = true;
+ continue;
+ }
+ command = to_upper (command);
+
+ switch (command)
+ {
+ case 'D':
+ get_node ((char *) NULL, "(dir)Top", false);
+ break;
+
+ case 'H':
+ if ((the_window.bottom - the_window.top) < 24)
+ get_node ((char *) NULL, "(info)Help-Small-Screen", false);
+ else
+ get_node ((char *) NULL, "(info)Help", false);
+ break;
+
+ case 'N':
+ if (!next_node ())
+ {
+ display_error ("No NEXT for this node!");
+ inhibit_display = true;
+ }
+ break;
+
+ case 'P':
+ if (!prev_node ())
+ {
+ display_error ("No PREV for this node!");
+ inhibit_display = true;
+ }
+ break;
+
+ case 'U':
+ {
+ int savetop = pagetop;
+
+ if (!up_node ())
+ {
+ display_error ("No UP for this node!");
+ inhibit_display = true;
+ pagetop = savetop;
+ }
+ break;
+ }
+
+ case 'M':
+ if (!build_menu ())
+ {
+ display_error ("No menu in this node!");
+ inhibit_display = true;
+ break;
+ }
+
+ if (!readline ("Menu item: ", nodename, NODENAME_LEN, true))
+ {
+ clear_echo_area ();
+ inhibit_display = true;
+ break;
+ }
+
+ I_goto_xy (echo_area.left, echo_area.top);
+ if (!find_menu_node (nodename, nodename))
+ {
+ display_error ("\"%s\" is not a menu item!", nodename);
+ inhibit_display = true;
+ break;
+ }
+
+ if (get_node ((char *) NULL, nodename, false))
+ clear_echo_area ();
+ break;
+
+ case 'F':
+ {
+ char footnote[NODENAME_LEN];
+ if (!build_notes ())
+ {
+ display_error ("No cross-references in this node!");
+ inhibit_display = true;
+ break;
+ }
+ strcpy (footnote, visible_footnote);
+ if (!readline ("Follow reference: ", footnote, NODENAME_LEN, true))
+ {
+ inhibit_display = true;
+ break;
+ }
+
+ I_goto_xy (echo_area.left, echo_area.top);
+ if (!find_note_node (footnote, nodename))
+ {
+ display_error ("\"%s\" is not a cross-reference in this node!",
+ footnote);
+ inhibit_display = true;
+ break;
+ }
+
+ if (get_node ((char *)NULL, nodename, false))
+ clear_echo_area ();
+ break;
+ }
+
+ case 'L':
+ {
+ char filename[FILENAME_LEN], nodename[NODENAME_LEN];
+ int ptop, ntop;
+ if (pop_node (filename, nodename, &ntop, &ptop) &&
+ get_node (filename, nodename, true))
+ {
+ pagetop = ptop;
+ }
+ else
+ inhibit_display = true;
+ break;
+ }
+
+ case SPACE:
+ case CTRL ('V'):
+ if (!next_page ())
+ {
+ display_error ("At last page of this node now!");
+ inhibit_display = true;
+ }
+ break;
+
+ case DELETE:
+ if (!prev_page ())
+ {
+ display_error ("At first page of this node now!");
+ inhibit_display = true;
+ }
+ break;
+
+ case 'B':
+ if (pagetop == nodetop)
+ {
+ display_error ("Already at beginning of this node!");
+ inhibit_display = true;
+ }
+ else
+ pagetop = nodetop;
+ break;
+
+ /* I don't want to do this this way, but the documentation
+ clearly states that '6' doesn't work. It states this for a
+ reason, and ours is not to wonder why... */
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ {
+ int item = command - '0';
+
+ if (!build_menu ())
+ {
+ display_error ("No menu in this node!");
+ inhibit_display = true;
+ break;
+ }
+
+ if (item > the_menu_size)
+ {
+ display_error ("There are only %d items in the menu!",
+ the_menu_size);
+ inhibit_display = true;
+ break;
+ }
+
+ if (!get_menu (item))
+ inhibit_display = true;
+ }
+ break;
+
+ case 'G':
+ if (!readline ("Goto node: ", nodename, NODENAME_LEN, false))
+ {
+ inhibit_display = true;
+ break;
+ }
+
+ if (get_node ((char *) NULL, nodename, false))
+ clear_echo_area ();
+ break;
+
+ /* Search from the starting position forward for a string.
+ Select the node containing the desired string. Put the
+ top of the page screen_lines / 2 lines behind it, but not
+ before nodetop. */
+ case 'S':
+ {
+ extern int info_buffer_len;
+ int pointer, temp;
+ char prompt[21 + NODENAME_LEN + 1];
+ static char search_string[NODENAME_LEN] = "";
+ static char *starting_filename = NULL,
+ *starting_nodename = NULL;
+ static int starting_pagetop = 0;
+ static boolean wrap_search = false;
+
+ sprintf (prompt, "Search for string [%s]: ", search_string);
+
+ if (!readline (prompt , nodename, NODENAME_LEN, false))
+ {
+ inhibit_display = true;
+ break;
+ }
+
+ /* If the user defaulted the search string, and the previous
+ command was search, then this is a continuation of the
+ previous search. */
+ if (((strcmp (nodename, search_string) == 0) ||
+ (!*nodename && *search_string)) &&
+ (last_command == 'S'))
+ {
+ search_start++;
+ }
+ else
+ {
+ /* Initialize the start of a new search. */
+ if (starting_filename)
+ free (starting_filename);
+
+ starting_filename = savestring (last_loaded_info_file);
+
+ if (starting_nodename)
+ free (starting_nodename);
+
+ starting_nodename = savestring (nodename ? nodename : "");
+
+ starting_pagetop = pagetop;
+ search_start = pagetop;
+ wrap_search = false;
+
+ if (*nodename != '\0')
+ strcpy (search_string, nodename);
+ }
+
+ I_goto_xy (echo_area.left, echo_area.top);
+
+ {
+ static int pushed = 0; /* how many files are pushed? */
+ boolean found_string = false; /* did we find our string? */
+
+ if (wrap_search)
+ {
+ push_filestack (next_info_file ((char *)NULL, true), false);
+ pushed++;
+ search_start = 0;
+ }
+
+ for (;;)
+ {
+ set_search_constraints (info_file, info_buffer_len);
+ pointer = search_forward (search_string, search_start);
+
+ if (pointer != -1)
+ {
+ found_string = true;
+ break;
+ }
+ else
+ {
+ char *next_file;
+
+ next_file = next_info_file ((char *)NULL, false);
+
+ if (next_file != NULL)
+ {
+ if (pushed)
+ {
+ pop_filestack ();
+ pushed--;
+ }
+
+ push_filestack (next_file, false);
+ pushed++;
+ search_start = 0;
+#if 1
+ I_goto_xy (echo_area.left, echo_area.top);
+ print_string ("Searching file %s...\n", next_file);
+#endif
+ continue;
+ }
+
+ if (wrap_search)
+ {
+ display_error
+ ("\"%s\" not found!",
+ search_string);
+
+ inhibit_display = true;
+ wrap_search = false;
+
+ if (pushed)
+ {
+ pop_filestack ();
+ pushed--;
+ }
+ break;
+ }
+ else
+ {
+ display_error ("Search: End of file");
+ inhibit_display = true;
+ wrap_search = true;
+
+ if (pushed)
+ {
+ pop_filestack ();
+ pushed--;
+ }
+ break;
+ }
+ }
+ }
+
+ if (pushed)
+ {
+ swap_filestack ();
+ pop_filestack ();
+ pushed--;
+ }
+
+ if (!found_string)
+ break;
+
+ wrap_search = false;
+ temp = search_backward (start_of_node_string, pointer);
+
+ if (temp == -1)
+ temp = search_forward (start_of_node_string, pointer);
+
+ if (temp == -1)
+ {
+ brians_error ();
+ break;
+ }
+
+ search_start = pointer;
+ pointer = forward_lines (1, temp);
+
+ if (!extract_field ("Node:", nodename, pointer))
+ {
+ display_error
+ ("There doesn't appear to be a nodename for this node.");
+ get_node ((char *)NULL, "*", false);
+ pagetop = pointer;
+ break;
+ }
+
+ /* Get the node if it is different than the one already
+ loaded. */
+ if (strcmp (nodename, starting_nodename) != 0)
+ {
+ free (starting_nodename);
+ starting_nodename = savestring (nodename);
+
+ if (get_node ((char *) NULL, nodename, false))
+ clear_echo_area ();
+ }
+
+ /* Reset the top of page if necessary. */
+ {
+ if ((strcmp (last_loaded_info_file, starting_filename) != 0) ||
+ (starting_pagetop != pagetop) ||
+ (search_start > pagebot))
+ {
+ pointer =
+ back_lines ((the_window.bottom - the_window.top) / 2,
+ forward_lines (1, search_start));
+
+ if (pointer < nodetop)
+ pointer = nodetop;
+
+ pagetop = pointer;
+ window_bashed = true;
+ }
+ else
+ inhibit_display = true;
+ }
+ break;
+ }
+ }
+
+ case CTRL ('H'):
+ case '?':
+ help_use_info ();
+ last_pagetop = -1;
+ break;
+
+ case 'Q':
+ done = true;
+ break;
+
+ case CTRL ('L'): /* Control-l is redisplay. */
+ window_bashed = true;
+ if (last_command == 'S')
+ command = 'S';
+ break;
+
+ case '(': /* You *must* be trying to type a complete nodename. */
+ strcpy (nodename, "(");
+ if (!readline ("Goto node: ", nodename, NODENAME_LEN, false))
+ {
+ inhibit_display = true;
+ clear_echo_area ();
+ break;
+ }
+ I_goto_xy (echo_area.left, echo_area.top);
+ if (get_node ((char *) NULL, nodename, false))
+ clear_echo_area ();
+ break;
+
+ case CTRL ('P'):
+ /* Print the contents of this node on the default printer. We
+ would like to let the user specify the printer, but we don't
+ want to ask her each time which printer to use. Besides, he
+ might not know, which is why it (the user) is in the need of
+ Info. */
+ {
+ char *tempname = make_temp_filename (current_info_node);
+ if (dump_current_node (tempname) == 0 &&
+ printfile (tempname) == 0 &&
+ deletefile (tempname) == 0)
+ {
+ display_error ("Printed node. Go pick up your output.\n");
+ }
+ inhibit_display = true;
+ free (tempname);
+ }
+ break;
+
+ default:
+ inhibit_display = true;
+ display_error ("Unknown command! Press '?' for help.");
+
+ }
+ }
+}
+
+/* Return the screen column width that the line from START to END
+ requires to display. */
+line_length (start, end)
+ int start, end;
+{
+ int count = 0;
+
+ while (start < end)
+ {
+ if (info_file[start] == '\t')
+ count += 7 - (count % 8);
+ else if (CTRL_P (info_file[start]))
+ count += 2;
+ else
+ count++;
+
+ start++;
+ }
+
+ return (count);
+}
+
+/* Tell this person how to use Info. */
+help_use_info ()
+{
+ open_typeout ();
+ clear_screen ();
+ print_string ("\n\
+ Commands in Info\n\
+\n\
+h Invoke the Info tutorial.\n\
+\n\
+Selecting other nodes:\n\
+n Move to the \"next\" node of this node.\n\
+p Move to the \"previous\" node of this node.\n\
+u Move \"up\" from this node.\n\
+m Pick menu item specified by name.\n\
+ Picking a menu item causes another node to be selected.\n\
+f Follow a cross reference. Reads name of reference.\n\
+l Move to the last node you were at.\n\
+\n\
+Moving within a node:\n\
+Space Scroll forward a page.\n\
+DEL Scroll backward a page.\n\
+b Go to the beginning of this node.\n\
+\n\
+Advanced commands:\n\
+q Quit Info.\n\
+1 Pick first item in node's menu.\n\
+2 - 5 Pick second ... fifth item in node's menu.\n\
+g Move to node specified by name.\n\
+ You may include a filename as well, as (FILENAME)NODENAME.\n\
+s Search through this Info file for a specified string,\n\
+ and select the node in which the next occurrence is found.\n\
+Ctl-p Print the contents of this node using `%s'.\n\
+\n\
+Done.\n\n",print_command);
+ close_typeout ();
+}
+
+/* Move to the node specified in the NEXT field. */
+boolean
+next_node ()
+{
+ char nodename[NODENAME_LEN];
+
+ if (!extract_field ("Next:", nodename, nodetop))
+ return (false);
+ return (get_node ((char *) NULL, nodename, false));
+}
+
+/* Move to the node specified in the PREVIOUS field. */
+boolean
+prev_node ()
+{
+ char nodename[NODENAME_LEN];
+
+ if (!extract_field ("Previous:", nodename, nodetop)
+ && !extract_field ("Prev:", nodename, nodetop))
+ return (false);
+ return (get_node ((char *) NULL, nodename, false));
+}
+
+/* Move to the node specified in the UP field. */
+boolean
+up_node ()
+{
+ char nodename[NODENAME_LEN];
+
+ if (!extract_field ("Up:", nodename, nodetop))
+ return (false);
+ return (get_node ((char *) NULL, nodename, false));
+}
+
+/* Build a completion list of menuname/nodename for each
+ line in this node that is a menu item. */
+boolean
+build_menu ()
+{
+ int pointer = nodetop;
+ char menuname[NODENAME_LEN];
+ char nodename[NODENAME_LEN];
+
+ if (strcmp (menus_nodename, current_info_node) == 0 &&
+ strcmp (menus_filename, current_info_file) == 0)
+ return (the_menu_size != 0);
+
+ strcpy (menus_nodename, current_info_node);
+ strcpy (menus_filename, current_info_file);
+ free_completion_list ();
+ the_menu_size = 0;
+
+ set_search_constraints (info_file, nodebot);
+ if ((pointer = search_forward (MENU_HEADER, nodetop)) < 0)
+ return (false);
+
+ /* There is a menu here. Look for members of it. */
+ pointer += strlen (MENU_HEADER);
+
+ while (true)
+ {
+ int idx;
+
+ pointer = search_forward (MENU_ID, pointer);
+ if (pointer < 0)
+ break; /* No more menus in this node. */
+
+ pointer = (skip_whitespace (pointer + strlen (MENU_ID)));
+
+ idx = 0;
+ while ((menuname[idx] = info_file[pointer]) && menuname[idx] != ':')
+ idx++, pointer++;
+
+ menuname[idx] = '\0';
+ pointer++;
+
+ if (info_file[pointer] == ':')
+ {
+ strcpy (nodename, menuname);
+ }
+ else
+ {
+ pointer = skip_whitespace (pointer);
+ idx = 0;
+ while ((nodename[idx] = info_file[pointer]) &&
+ nodename[idx] != '\t' &&
+ nodename[idx] != '.' &&
+ nodename[idx] != ',')
+ {
+ idx++, pointer++;
+ }
+ nodename[idx] = '\0';
+ }
+ add_completion (menuname, nodename);
+ the_menu_size++;
+ }
+ if (the_menu_size)
+ completion_list = reverse_list (completion_list);
+ return (the_menu_size != 0);
+}
+
+/* Select ITEMth item from a list built by build_menu (). */
+boolean
+get_menu (item)
+ int item;
+{
+ if (!build_menu ())
+ return (false);
+
+ if (item > the_menu_size)
+ return (false);
+ else
+ {
+ COMP_ENTRY *temp = completion_list;
+
+ while (--item && temp)
+ temp = temp->next;
+
+ return (get_node ((char *) NULL, temp->data, false));
+ }
+}
+
+/* Scan through the ?already? built menu list looking
+ for STRING. If you find it, put the corresponding nodes
+ name in NODENAME. */
+boolean
+find_menu_node (string, nodename)
+ char *string, *nodename;
+{
+ return (scan_list (string, nodename));
+}
+
+/* The work part of find_menu_node and find_note_node. */
+boolean
+scan_list (string, nodename)
+ char *string, *nodename;
+{
+ COMP_ENTRY *temp = completion_list;
+
+ while (temp)
+ {
+ if (stricmp (string, temp->identifier, strlen (string)) == 0)
+ {
+ strcpy (nodename, temp->data);
+ return (true);
+ }
+ temp = temp->next;
+ }
+ return (false);
+}
+
+/* Remove <CR> and whitespace from string, replacing them with
+ only one space. Exception: <CR> at end of string disappears. */
+clean_up (string)
+ char *string;
+{
+ char *to = string;
+
+ while (*to = *string++)
+ {
+ if (*to == '\n' || *to == ' ')
+ {
+ *to = ' ';
+
+ while (*string == ' ' || *string == '\t')
+ string++;
+ }
+ to++;
+ }
+}
+
+/* Find a reference to "*Note". Return the offset of the start
+ of that reference, or -1. */
+find_footnote_ref (from)
+ int from;
+{
+ while (true)
+ {
+ from = search_forward (FOOTNOTE_HEADER, from);
+ if (from < 0)
+ return (from);
+ else
+ from += strlen (FOOTNOTE_HEADER);
+ if (info_file[from] == ' ' ||
+ info_file[from] == '\n' ||
+ info_file[from] == '\t')
+ return (from);
+ }
+}
+
+/* Build an array of (footnote.nodename) for each footnote in this node. */
+boolean
+build_notes ()
+{
+ int pointer;
+ char notename[NODENAME_LEN];
+ char nodename[NODENAME_LEN];
+
+ set_search_constraints (info_file, nodebot);
+
+ if ((find_footnote_ref (nodetop)) < 0)
+ return (false);
+ pointer = nodetop;
+
+ menus_filename[0] = menus_nodename[0] = '\0';
+ visible_footnote = "";
+ free_completion_list ();
+
+ while (true)
+ {
+ int idx;
+
+ pointer = find_footnote_ref (pointer);
+ if (pointer < 0)
+ break; /* no more footnotes in this node. */
+
+ pointer = skip_whitespace_and_cr (pointer);
+ idx = 0;
+
+ while ((notename[idx] = info_file[pointer]) && notename[idx] != ':')
+ {
+ idx++, pointer++;
+ }
+
+ notename[idx] = '\0';
+ clean_up (notename);
+ pointer++;
+ if (info_file[pointer] == ':')
+ {
+ strcpy (nodename, notename);
+ }
+ else
+ {
+ int in_parens = 0;
+
+ pointer = skip_whitespace (pointer);
+ idx = 0;
+
+ while ((nodename[idx] = info_file[pointer]) &&
+ (in_parens ||
+ (nodename[idx] != '\t' &&
+ nodename[idx] != '.' &&
+ nodename[idx] != ',')))
+ {
+ if (nodename[idx] == '(')
+ in_parens++;
+ else if (nodename[idx] == ')')
+ in_parens--;
+
+ idx++, pointer++;
+ }
+ nodename[idx] = '\0';
+ clean_up (nodename);
+ }
+ /* Add the notename/nodename to the list. */
+ add_completion (notename, nodename);
+ the_menu_size++;
+
+ /* Remember this identifier as the default if it is the first one in the
+ page. */
+ if (!(*visible_footnote) &&
+ pointer > pagetop &&
+ pointer < forward_lines (the_window.bottom - the_window.top, pointer))
+ visible_footnote = completion_list->identifier;
+ }
+ if (the_menu_size)
+ completion_list = reverse_list (completion_list);
+ return (the_menu_size != 0);
+}
+
+/* Scan through the ?already? built footnote list looking
+ for STRING. If found, place the corresponding node name
+ in NODENAME. */
+boolean
+find_note_node (string, nodename)
+ char *string, *nodename;
+{
+ return (scan_list (string, nodename));
+}
+
+/* **************************************************************** */
+/* */
+/* Page Display */
+/* */
+/* **************************************************************** */
+
+
+/* The display functions for GNU Info. */
+int display_ch, display_cv;
+int display_point;
+
+/* Display the current page from pagetop down to the bottom of the
+ page or the bottom of the node, whichever comes first. */
+display_page ()
+{
+ display_point = pagetop;
+ display_ch = the_window.left;
+ display_cv = the_window.top;
+ generic_page_display ();
+}
+
+/* Print the page from display_point to bottom of node, or window,
+ whichever comes first. Start printing at display_ch, display_cv. */
+generic_page_display ()
+{
+ int done_with_display = 0;
+ int character;
+
+ goto_xy (display_ch, display_cv);
+
+ while (!done_with_display)
+ {
+ if (display_point == nodebot)
+ {
+ clear_eop ();
+ goto display_finish;
+ }
+
+ character = info_file[display_point];
+
+ if ((display_width (character, the_window.ch) + the_window.ch)
+ >= the_window.right)
+ display_carefully (character);
+ else
+ charout (character);
+
+ if ((the_window.cv >= the_window.bottom)
+ || (the_window.cv == the_window.top
+ && the_window.ch == the_window.left))
+ {
+ display_finish:
+ pagebot = display_point;
+ make_modeline ();
+ done_with_display++;
+ continue;
+ }
+ else
+ display_point++;
+ }
+ fflush (stdout);
+}
+
+/* Display character carefully, ensuring that no scrolling takes
+ place, even in the case of funky control characters. */
+display_carefully (character)
+ int character;
+{
+ if (CTRL_P (character))
+ {
+ switch (character)
+ {
+ case RETURN:
+ case NEWLINE:
+ case TAB:
+ clear_eol ();
+ advance (the_window.right - the_window.ch);
+ break;
+ default:
+ charout ('^');
+ if (the_window.cv == the_window.bottom)
+ break;
+ else
+ charout (UNCTRL (character));
+ }
+ }
+ else
+ charout (character);
+}
+
+/* Move the cursor to POSITION in page. Return non-zero if successful. */
+cursor_to (position)
+ int position;
+{
+ int ch, cv, character;
+ int point;
+
+ if (position > pagebot || position < pagetop)
+ return (0);
+
+ point = pagetop;
+ ch = the_window.left;
+ cv = the_window.top;
+
+ while (point < position)
+ {
+ character = info_file[point++];
+
+ ch += display_width (character, ch);
+
+ if (ch >= the_window.right)
+ {
+ ch = ch - the_window.right;
+ cv++;
+
+ if (cv >= the_window.bottom)
+ return (0);
+ }
+ }
+ goto_xy (ch, cv);
+ return (1);
+}
+
+/* Move to the next page in this node. Return FALSE if
+ we can't get to the next page. */
+boolean
+next_page ()
+{
+ int pointer;
+
+ pointer =
+ forward_lines ((the_window.bottom - the_window.top) - 2, pagetop);
+
+ if (pointer >= nodebot)
+ return (false);
+
+ /* Hack for screens smaller than displayed line width. */
+ if (pointer > display_point)
+ {
+ pointer = display_point;
+ back_lines (1);
+ }
+ pagetop = pointer;
+ return (true);
+}
+
+/* Move to the previous page in this node. Return FALSE if
+ there is no previous page. */
+boolean
+prev_page ()
+{
+ int pointer =
+ back_lines ((the_window.bottom - the_window.top) - 2, pagetop);
+
+ if (pagetop == nodetop)
+ return (false);
+
+ if (pointer < nodetop)
+ pointer = nodetop;
+
+ pagetop = pointer;
+ return (true);
+}
+
+
+/* **************************************************************** */
+/* */
+/* Utility Functions */
+/* */
+/* **************************************************************** */
+
+char *search_buffer; /* area in ram to scan through. */
+int buffer_bottom; /* Length of this area. */
+
+/* Set the global variables that all of these routines use. */
+set_search_constraints (buffer, extent)
+ char *buffer;
+ int extent;
+{
+ search_buffer = buffer;
+ buffer_bottom = extent;
+}
+
+/* Move back to the start of this line. */
+to_beg_line (from)
+ int from;
+{
+ while (from && search_buffer[from - 1] != '\n')
+ from--;
+ return (from);
+}
+
+/* Move forward to the end of this line. */
+to_end_line (from)
+{
+ while (from < buffer_bottom && search_buffer[from] != '\n')
+ from++;
+ return (from);
+}
+
+/* Move back count lines in search_buffer starting at starting_pos.
+ Returns the start of that line. */
+back_lines (count, starting_pos)
+ int count, starting_pos;
+{
+ starting_pos = to_beg_line (starting_pos);
+ while (starting_pos && count)
+ {
+ starting_pos = to_beg_line (starting_pos - 1);
+ count--;
+ }
+ return (starting_pos);
+}
+
+/* Move forward count lines starting at starting_pos.
+ Returns the start of that line. */
+forward_lines (count, starting_pos)
+ int count, starting_pos;
+{
+ starting_pos = to_end_line (starting_pos);
+ while (starting_pos < buffer_bottom && count)
+ {
+ starting_pos = to_end_line (starting_pos + 1);
+ count--;
+ }
+ return (to_beg_line (starting_pos));
+}
+
+/* Search for STRING in SEARCH_BUFFER starting at STARTING_POS.
+ Return the location of the string, or -1 if not found. */
+search_forward (string, starting_pos)
+ char *string;
+ int starting_pos;
+{
+ register int c, i, len;
+ register char *buff, *end;
+ char *alternate;
+
+
+ /* We match characters in SEARCH_BUFFER against STRING and ALTERNATE.
+ ALTERNATE is a case reversed version of STRING; this is cheaper than
+ case folding each character before comparison. */
+
+ /* Build the alternate string. */
+ alternate = savestring (string);
+ len = strlen (string);
+
+ for (i = 0; i < len; i++)
+ {
+ c = alternate[i];
+
+ if (c >= 'a' && c <= 'z')
+ alternate[i] = c - 32;
+ else if (c >= 'A' && c <= 'Z')
+ alternate[i] = c + 32;
+ }
+
+ buff = search_buffer + starting_pos;
+ end = search_buffer + buffer_bottom + 1;
+
+ while (buff < end)
+ {
+ for (i = 0; i < len; i++)
+ {
+ c = buff[i];
+
+ if (c != string[i] && c != alternate[i])
+ break;
+ }
+
+ if (!string[i])
+ {
+ free (alternate);
+ return (buff - search_buffer);
+ }
+
+ buff++;
+ }
+
+ free (alternate);
+ return (-1);
+}
+
+/* Search for STRING in SEARCH_BUFFER starting at STARTING_POS.
+ Return the location of the string, or -1 if not found. */
+search_backward (string, starting_pos)
+ char *string;
+ int starting_pos;
+{
+ int len = strlen (string);
+ while (starting_pos - len > -1)
+ {
+ if (strnicmp (search_buffer + (starting_pos - len), string, len) == 0)
+ return (starting_pos - len);
+ else
+ starting_pos--;
+ }
+ return (-1);
+}
+
+/* Only search for STRING from POINTER to end of line. Return offset
+ of string, or -1 if not found. */
+string_in_line (string, pointer)
+ char *string;
+ int pointer;
+{
+ int old_buffer_bottom = buffer_bottom;
+
+ set_search_constraints (search_buffer, to_end_line (pointer));
+ pointer = search_forward (string, pointer);
+ buffer_bottom = old_buffer_bottom;
+ return (pointer);
+}
+
+/* Skip whitespace characters at OFFSET in SEARCH_BUFFER.
+ Return the next non-whitespace character or -1 if BUFFER_BOTTOM
+ is reached. */
+skip_whitespace (offset)
+ int offset;
+{
+ int character;
+
+ while (offset < buffer_bottom)
+ {
+ character = search_buffer[offset];
+ if (character == ' ' || character == '\t')
+ offset++;
+ else
+ return (offset);
+ }
+ return (-1);
+}
+
+/* Skip whitespace characters including <CR> at OFFSET in
+ SEARCH_BUFFER. Return the position of the next non-whitespace
+ character, or -1 if BUFFER_BOTTOM is reached. */
+skip_whitespace_and_cr (offset)
+ int offset;
+{
+ while (true)
+ {
+ offset = skip_whitespace (offset);
+ if (offset > 0 && search_buffer[offset] != '\n')
+ return (offset);
+ else
+ offset++;
+ }
+}
+
+/* Extract the node name part of the of the text after the FIELD.
+ Place the node name into NODENAME. Assume the line starts at
+ OFFSET in SEARCH_BUFFER. */
+boolean
+extract_field (field_name, nodename, offset)
+ char *field_name, *nodename;
+ int offset;
+{
+ int temp, character;
+
+ temp = string_in_line (field_name, offset);
+ if (temp < 0)
+ return (false);
+
+ temp += strlen (field_name);
+ temp = skip_whitespace (temp);
+
+ /* Okay, place the following text into NODENAME. */
+
+ while ((character = search_buffer[temp]) != ','
+ && character != '\n'
+ && character != '\t')
+ {
+ *nodename = character;
+ nodename++;
+ temp++;
+ }
+ *nodename = '\0';
+ return (true);
+}
+
+/* Return true if pointer is exactly at string, else false. */
+boolean
+looking_at (string, pointer)
+ char *string;
+ int pointer;
+{
+ if (strnicmp (search_buffer + pointer, string, strlen (string)) == 0)
+ return (true);
+ else
+ return (false);
+}
+
+/* File stack stuff. This is currently only used to push one file while
+ searching indirect files, but we may as well write it in full
+ generality. */
+typedef struct filestack
+{
+ struct filestack *next;
+ char filename[FILENAME_LEN];
+ char current_filename[FILENAME_LEN];
+ char *tag_table;
+ char *info_file;
+ int info_buffer_len;
+} FILESTACK;
+
+FILESTACK *filestack = NULL;
+
+boolean
+push_filestack (filename, remember_name)
+ char *filename;
+ int remember_name;
+{
+ FILESTACK *element = (FILESTACK *)xmalloc (sizeof (FILESTACK));
+
+ element->next = filestack;
+ filestack = element;
+
+ strcpy (filestack->filename, last_loaded_info_file);
+ strcpy (filestack->current_filename, current_info_file);
+ filestack->tag_table = tag_table;
+ filestack->info_file = info_file;
+ filestack->info_buffer_len = info_buffer_len;
+
+ *last_loaded_info_file = '\0'; /* force the file to be read */
+ if (get_info_file (filename, remember_name))
+ {
+ return (true);
+ }
+ else
+ {
+ pop_filestack ();
+ return (false);
+ }
+}
+
+void
+pop_filestack ()
+{
+ FILESTACK *temp;
+
+ if (filestack == NULL)
+ {
+ fprintf (stderr , "File stack is empty and can't be popped\n");
+ brians_error ();
+ return;
+ }
+
+ free (info_file);
+
+ strcpy (last_loaded_info_file, filestack->filename);
+ strcpy (current_info_file, filestack->current_filename);
+ tag_table = filestack->tag_table;
+ info_file = filestack->info_file;
+ info_buffer_len = filestack->info_buffer_len;
+
+ temp = filestack;
+ filestack = filestack->next;
+ free ((char *)temp);
+}
+
+/* Swap the current info file with the bottom of the filestack */
+void
+swap_filestack ()
+{
+ char t_last_loaded_info_file[FILENAME_LEN];
+ char t_current_info_file[FILENAME_LEN];
+ char *t_tag_table;
+ char *t_info_file;
+ int t_info_buffer_len;
+
+ if (filestack == NULL)
+ {
+ fprintf (stderr , "File stack is empty and can't be swapped\n");
+ brians_error ();
+ return;
+ }
+
+ strcpy (t_last_loaded_info_file, filestack->filename);
+ strcpy (t_current_info_file, filestack->current_filename);
+ t_tag_table = filestack->tag_table;
+ t_info_file = info_file;
+ t_info_buffer_len = info_buffer_len;
+
+ strcpy (filestack->filename, last_loaded_info_file);
+ strcpy (filestack->current_filename, current_info_file);
+ filestack->tag_table = tag_table;
+ filestack->info_file = info_file;
+ filestack->info_buffer_len = info_buffer_len;
+
+ strcpy (last_loaded_info_file, t_last_loaded_info_file);
+ strcpy (current_info_file, t_current_info_file);
+ tag_table = t_tag_table;
+ info_file = t_info_file;
+ info_buffer_len = t_info_buffer_len;
+}
+
+/* Now the node history stack */
+
+extern NODEINFO *Info_History;
+
+/* Save the current filename, nodename, and position on the history list.
+ We prepend. */
+boolean
+push_node (filename, nodename, page_position, node_position)
+ char *filename, *nodename;
+ int page_position, node_position;
+{
+ NODEINFO *newnode = (NODEINFO *) xmalloc (sizeof (NODEINFO));
+
+ newnode->next = Info_History;
+
+ newnode->filename = (char *) xmalloc (strlen (filename) + 1);
+ strcpy (newnode->filename, filename);
+
+ newnode->nodename = (char *) xmalloc (strlen (nodename) + 1);
+ strcpy (newnode->nodename, nodename);
+
+ newnode->pagetop = page_position;
+ newnode->nodetop = node_position;
+
+ Info_History = newnode;
+ return (true);
+}
+
+/* Pop one node from the node list, leaving the values in
+ passed variables. */
+boolean
+pop_node (filename, nodename, nodetop, pagetop)
+ char *filename, *nodename;
+ int *nodetop, *pagetop;
+{
+ if (Info_History->next == (NODEINFO *) NULL)
+ {
+ display_error ("At beginning of history now!");
+ return (false);
+ }
+ else
+ {
+ NODEINFO *releaser = Info_History;
+
+ /* If the popped file is not the current file, then force
+ the popped file to be loaded. */
+ if (strcmp (Info_History->filename, last_loaded_info_file) != 0)
+ last_loaded_info_file[0] = '\0';
+
+ strcpy (filename, Info_History->filename);
+ strcpy (nodename, Info_History->nodename);
+ *pagetop = Info_History->pagetop;
+ *nodetop = Info_History->nodetop;
+ free (Info_History->nodename);
+ free (Info_History->filename);
+ Info_History = Info_History->next;
+ free (releaser);
+ return (true);
+ }
+}
+
+/* Whoops, Unix doesn't have strnicmp. */
+
+/* Compare at most COUNT characters from string1 to string2. Case
+ doesn't matter. */
+int
+strnicmp (string1, string2, count)
+ char *string1, *string2;
+{
+ char ch1, ch2;
+
+ while (count)
+ {
+ ch1 = *string1++;
+ ch2 = *string2++;
+ if (to_upper (ch1) == to_upper (ch2))
+ count--;
+ else
+ break;
+ }
+ return (count);
+}
+
+/* Compare string1 to string2. Case doesn't matter. */
+int
+stricmp (string1, string2)
+ char *string1, *string2;
+{
+ char ch1, ch2;
+
+ while (1)
+ {
+ ch1 = *string1++;
+ ch2 = *string2++;
+
+ if (ch1 == '\0')
+ return (ch2 != '\0');
+
+ if ((ch2 == '\0') ||
+ (to_upper (ch1) != to_upper (ch2)))
+ return (1);
+ }
+}
+
+/* Make the user type "Y" or "N". */
+boolean
+get_y_or_n_p ()
+{
+ int character;
+ print_string (" (Y or N)?");
+ clear_eol ();
+
+until_we_like_it:
+
+ character = blink_cursor ();
+ if (character == EOF)
+ return (false);
+ if (to_upper (character) == 'Y')
+ {
+ charout (character);
+ return (true);
+ }
+
+ if (to_upper (character) == 'N')
+ {
+ charout (character);
+ return (false);
+ }
+
+ if (character == ABORT_CHAR)
+ {
+ ding ();
+ return (false);
+ }
+
+ goto until_we_like_it;
+}
+
+/* Move the cursor to the desired column in the window. */
+indent_to (screen_column)
+ int screen_column;
+{
+ int counter = screen_column - the_window.ch;
+ if (counter > 0)
+ {
+ while (counter--)
+ charout (' ');
+ }
+ else if (screen_column != 0)
+ charout (' ');
+}
+
+
+/* **************************************************************** */
+/* */
+/* Error output/handling. */
+/* */
+/* **************************************************************** */
+
+/* Display specific error from known file error table. */
+file_error (file)
+ char *file;
+{
+ extern int errno;
+ extern int sys_nerr;
+ extern char *sys_errlist[];
+
+ if (errno < sys_nerr)
+ display_error ("%s: %s", file, sys_errlist[errno]);
+ else
+ display_error ("%s: Unknown error %d", file, errno);
+}
+
+/* Display the error in the echo-area using format_string and args.
+ This is a specialized interface to printf. */
+display_error (format_string, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
+ char *format_string;
+{
+ extern boolean terminal_inited_p;
+ char output_buffer[1024];
+
+ if (totally_inhibit_errors)
+ return;
+
+ sprintf (output_buffer, format_string, arg1, arg2, arg3, arg4,
+ arg5, arg6, arg7, arg8);
+ if (terminal_inited_p)
+ {
+ new_echo_area ();
+ ding ();
+ print_string (output_buffer);
+ close_echo_area ();
+ }
+ else
+ {
+ fprintf (stderr, "%s\n", output_buffer);
+ sleep(1);
+ }
+}
+
+
+/* Tell everybody what a loser I am. If you see this error,
+ send me a bug report. */
+brians_error ()
+{
+ display_error ("You are never supposed to see this error.\n");
+ display_error ("Tell bfox@ai.mit.edu to fix this someday.\n");
+ return (-1);
+}
+
+/* **************************************************************** */
+/* */
+/* Terminal IO, and Driver */
+/* */
+/* **************************************************************** */
+
+/* The Unix termcap interface code. */
+
+#define NO_ERROR 0
+#define GENERIC_ERROR 1
+#define NO_TERMINAL_DESCRIPTOR 2
+#define OUT_OF_MEMORY 3
+#define BAD_TERMINAL 4
+
+#define FERROR(msg) fprintf (stderr, msg); exit (GENERIC_ERROR)
+
+extern int tgetnum (), tgetflag ();
+extern char *tgetstr ();
+extern char *tgoto ();
+
+#define Certainly_enough_space 2048 /* page 3, Section 1.1, para 4 */
+
+#ifdef UNIX
+char termcap_buffer[Certainly_enough_space];
+#else
+#define termcap_buffer NULL
+#endif
+
+/* You CANNOT remove these next four vars. TERMCAP needs them to operate. */
+char PC;
+char *BC;
+char *UP;
+
+/* A huge array of stuff to get from termcap initialization. */
+
+#define tc_int 0
+#define tc_char tc_int+1
+#define tc_flag tc_char+1
+#define tc_last tc_flag+1
+
+typedef int flag;
+
+/* First, the variables which this array refers to */
+
+/* Capabilities */
+
+int terminal_columns; /* {tc_int, "co" */
+int terminal_rows; /* {tc_int, "li" */
+flag terminal_is_generic; /* {tc_flag,"gn" */
+
+ /* Cursor Motion */
+
+char *terminal_goto; /* {tc_char,"cm" */
+char *terminal_home; /* {tc_char,"ho" */
+
+char *terminal_cursor_left; /* {tc_char,"le" */
+char *terminal_cursor_right; /* {tc_char,"nd" */
+char *terminal_cursor_up; /* {tc_char,"up" */
+char *terminal_cursor_down; /* {tc_char,"do" */
+
+/* Screen Clearing */
+
+char *terminal_clearpage; /* {tc_char,"cl" */
+char *terminal_clearEOP; /* {tc_char,"cd" */
+char *terminal_clearEOL; /* {tc_char,"ce" */
+
+/* "Standout" */
+char *terminal_standout_begin; /* {tc_char,"so" */
+char *terminal_standout_end; /* {tc_char,"se" */
+
+/* Reverse Video */
+char *terminal_inverse_begin; /* {tc_char,"mr" */
+char *terminal_end_attributes; /* {tc_char,"me" */
+
+/* Ding! */
+
+char *terminal_ear_bell; /* {tc_char,"bl" */
+
+/* Terminal Initialization */
+
+char *terminal_use_begin; /* {tc_char,"ti" */
+char *terminal_use_end; /* {tc_char,"te" */
+
+/* Padding Stuff */
+
+char *terminal_padding; /* {tc_char,"pc" */
+
+/* Now the whopping big array */
+
+typedef struct {
+ char type;
+ char *name;
+ char *value;
+} termcap_capability_struct;
+
+termcap_capability_struct capabilities[] = {
+
+/* Capabilities */
+
+ {tc_int, "co", (char *) &terminal_columns},
+ {tc_int, "li", (char *) &terminal_rows},
+ {tc_flag, "gn", (char *) &terminal_is_generic},
+
+/* Cursor Motion */
+
+ {tc_char, "cm", (char *) &terminal_goto},
+ {tc_char, "ho", (char *) &terminal_home},
+
+ {tc_char, "le", (char *) &terminal_cursor_left},
+ {tc_char, "nd", (char *) &terminal_cursor_right},
+ {tc_char, "up", (char *) &terminal_cursor_up},
+ {tc_char, "do", (char *) &terminal_cursor_down},
+
+/* Screen Clearing */
+
+ {tc_char, "cl", (char *) &terminal_clearpage},
+ {tc_char, "cd", (char *) &terminal_clearEOP},
+ {tc_char, "ce", (char *) &terminal_clearEOL},
+
+/* "Standout" */
+ {tc_char, "so", (char *) &terminal_standout_begin},
+ {tc_char, "se", (char *) &terminal_standout_end},
+
+/* Reverse Video */
+ {tc_char, "mr", (char *) &terminal_inverse_begin},
+ {tc_char, "me", (char *) &terminal_end_attributes},
+
+/* Ding! */
+
+ {tc_char, "bl", (char *) &terminal_ear_bell},
+
+/* Terminal Initialization */
+
+ {tc_char, "ti", (char *) &terminal_use_begin},
+ {tc_char, "te", (char *) &terminal_use_end},
+
+/* Padding Stuff */
+
+ {tc_char, "pc", (char *) &terminal_padding},
+
+/* Terminate this array with a var of type tc_last */
+ {tc_last, NULL, NULL}
+
+};
+
+int terminal_opened_p = 0;
+
+open_terminal_io ()
+{
+ int error;
+
+ if (terminal_opened_p)
+ return (NO_ERROR);
+
+ if ((error = get_terminal_info ()) != NO_ERROR)
+ return (error);
+
+ if ((error = get_terminal_vars (capabilities)) != NO_ERROR)
+ return (error);
+
+ /* Now, make sure we have the capabilites that we need. */
+ if (terminal_is_generic)
+ return (BAD_TERMINAL);
+
+ terminal_opened_p++;
+ return (NO_ERROR);
+}
+
+get_terminal_info ()
+{
+ char temp_string_buffer[256];
+ int result;
+
+ char *terminal_name = getenv ("TERM");
+
+ if (terminal_name == NULL || *terminal_name == 0
+ || (strcmp (terminal_name, "dialup") == 0))
+ {
+ terminal_name = temp_string_buffer;
+ printf ("\nTerminal Type:");
+ fflush (stdout);
+ fgets (terminal_name, 256, stdin);
+ if (!(*terminal_name))
+ return (NO_TERMINAL_DESCRIPTOR);
+ }
+
+/* #define VERBOSE_GET_TERMINAL 1 */
+#ifdef VERBOSE_GET_TERMINAL
+
+#define buffer_limit 256
+#define opsys_termcap_filename "/etc/termcap"
+
+ /* We hack question mark if that is what the user typed. All this means
+ is we read /etc/termcap, and prettily print out the names of terminals
+ that we find. */
+
+ if (terminal_name[0] == '?' && !terminal_name[1])
+ {
+ FILE *termcap_file;
+ if ((termcap_file = fopen (opsys_termcap_filename, "r")) != NULL)
+ {
+ int result;
+ char line_buffer[buffer_limit];
+ int terminal_count = 0;
+
+ while ((readline_termcap (termcap_file, line_buffer)) != EOF)
+ {
+ char first_char = *line_buffer;
+ if (first_char == '#' || first_char == ' '
+ || first_char == '\t' || first_char == '\n')
+ ;
+ else
+ {
+ /* Print the names the pretty way. */
+ printf ("\n%s", line_buffer); /* liar */
+ terminal_count++;
+ }
+ }
+ fclose (termcap_file);
+
+ if (terminal_count)
+ printf ("\n%d terminals listed.\n", terminal_count);
+ else
+ printf ("\nNo terminals were listed. Brian's mistake.\n");
+ }
+ else
+ {
+ fprintf (stderr,
+ "\nNo such system file as %s!\nWe lose badly.\n",
+ opsys_termcap_filename);
+ return (NO_TERMINAL_DESCRIPTOR);
+ }
+ return (get_terminal_info ());
+ }
+#endif /* VERBOSE_GET_TERMINAL */
+
+ result = tgetent (termcap_buffer, terminal_name);
+
+ if (!result)
+ return (NO_TERMINAL_DESCRIPTOR);
+ else
+ return (NO_ERROR);
+}
+
+#ifdef VERBOSE_GET_TERMINAL
+readline_termcap (stream, buffer)
+ FILE *stream;
+ char *buffer;
+{
+ int c;
+ int buffer_index = 0;
+
+ while ((c = getc (stream)) != EOF && c != '\n')
+ {
+ if (buffer_index != buffer_limit - 1)
+ buffer[buffer_index++] = c;
+ }
+
+ buffer[buffer_index] = 0;
+
+ if (c == EOF)
+ return ((buffer_index) ? 0 : EOF);
+ else
+ return (0);
+}
+#endif /* VERBOSE_GET_TERMINAL */
+
+/* For each element of "from_array", read the corresponding variable's
+ value into the right place. */
+get_terminal_vars (from_array)
+ termcap_capability_struct from_array[];
+{
+ int i;
+ register termcap_capability_struct *item;
+ char *buffer;
+
+#if !defined (GNU_TERMCAP)
+ buffer = (char *) xmalloc (sizeof (termcap_buffer) + 1);
+# define buffer_space &buffer
+#else
+# define buffer_space 0
+#endif
+
+ for (i = 0; (item = &from_array[i]) && (item->type != tc_last); i++)
+ {
+ switch (item->type)
+ {
+ case tc_int:
+ *((int *) (item->value)) = tgetnum (item->name);
+ break;
+
+ case tc_flag:
+ *((int *) item->value) = tgetflag (item->name);
+ break;
+
+ case tc_char:
+ *((char **) item->value) = tgetstr (item->name, buffer_space);
+ break;
+
+ default:
+ FERROR ("Bad entry scanned in tc_struct[].\n \
+ Ask bfox@ai.mit.edu to fix this someday.\n");
+ }
+ }
+
+ PC = terminal_padding ? terminal_padding[0] : 0;
+ BC = terminal_cursor_left;
+ UP = terminal_cursor_up;
+ return (NO_ERROR);
+}
+
+/* Return the number of rows this terminal has. */
+int
+get_terminal_rows ()
+{
+ int rows = 0;
+
+#if defined (TIOCGWINSZ)
+ {
+ int tty;
+ struct winsize size;
+
+ tty = fileno (stdin);
+
+ if (ioctl (tty, TIOCGWINSZ, &size) != -1)
+ rows = size.ws_row;
+ }
+#endif /* TIOCGWINSZ */
+
+ if (!rows)
+ rows = tgetnum ("li");
+
+ if (rows <= 0)
+ rows = 24;
+
+ return (rows);
+}
+
+/* Return the number of columns this terminal has. */
+get_terminal_columns ()
+{
+ int columns = 0;
+
+#if defined (TIOCGWINSZ)
+ {
+ int tty;
+ struct winsize size;
+
+ tty = fileno (stdin);
+
+ if (ioctl (tty, TIOCGWINSZ, &size) != -1)
+ columns = size.ws_col;
+ }
+#endif /* TIOCGWINSZ */
+
+ if (!columns)
+ columns = tgetnum ("co");
+
+ if (columns <= 0)
+ columns = 80;
+
+ return (columns);
+}
+
+/* #define TERMINAL_INFO_PRINTING */
+#ifdef TERMINAL_INFO_PRINTING
+
+/* Scan this (already "get_terminal_vars"ed) array, printing out the
+ capability name, and value for each entry. Pretty print the value
+ so that the terminal doesn't actually do anything, shitbrain. */
+show_terminal_info (from_array)
+ termcap_capability_struct from_array[];
+{
+ register int i;
+ register termcap_capability_struct *item;
+
+ for (i = 0; ((item = &from_array[i]) && ((item->type) != tc_last)); i++)
+ {
+
+ char *type_name;
+ switch (item->type)
+ {
+ case tc_int:
+ type_name = "int ";
+ break;
+ case tc_flag:
+ type_name = "flag";
+ break;
+ case tc_char:
+ type_name = "char";
+ break;
+ default:
+ type_name = "Broken";
+ }
+
+ printf ("\t%s\t%s = ", type_name, item->name);
+
+ switch (item->type)
+ {
+ case tc_int:
+ case tc_flag:
+ printf ("%d", *((int *) item->value));
+ break;
+ case tc_char:
+ tc_pretty_print (*((char **) item->value));
+ break;
+ }
+ printf ("\n");
+ }
+}
+
+/* Print the contents of string without sending anything that isn't
+ a normal printing ASCII character. */
+tc_pretty_print (string)
+ register char *string;
+{
+ register char c;
+
+ while (c = *string++)
+ {
+ if (CTRLP (c))
+ {
+ putchar ('^');
+ c += 64;
+ }
+ putchar (c);
+ }
+}
+#endif TERMINAL_INFO_PRINTING
+
+
+/* **************************************************************** */
+/* */
+/* Character IO, and driver */
+/* */
+/* **************************************************************** */
+
+char *widest_line;
+boolean terminal_inited_p = false;
+
+/* Start up the character io stuff. */
+init_terminal_io ()
+{
+ if (!terminal_inited_p)
+ {
+ opsys_init_terminal ();
+ terminal_rows = get_terminal_rows ();
+ terminal_columns = get_terminal_columns ();
+
+ widest_line = (char *) xmalloc (terminal_columns);
+
+ terminal_inited_p = true;
+ }
+
+ terminal_window.left = 0;
+ terminal_window.top = 0;
+ terminal_window.right = terminal_columns;
+ terminal_window.bottom = terminal_rows;
+
+ set_window (&terminal_window);
+
+ terminal_window.bottom -= 2;
+
+ set_window (&terminal_window);
+
+ init_echo_area (the_window.left, the_window.bottom + 1,
+ the_window.right, terminal_rows);
+
+ /* Here is a list of things that the terminal has to be able to do. Do
+ you think that this is too harsh? */
+ if (!terminal_goto || /* We can't move the cursor. */
+ !terminal_rows) /* We don't how many lines it has. */
+ {
+ fprintf (stderr,
+ "Your terminal is not clever enough to run info. Sorry.\n");
+ exit (1);
+ }
+}
+
+/* Ring the terminal bell. */
+ding ()
+{
+ extern char *terminal_ear_bell;
+
+ if (terminal_ear_bell)
+ do_term (terminal_ear_bell);
+ else
+ putchar (CTRL ('G'));
+
+ fflush (stdout);
+}
+
+int untyi_char = 0;
+boolean inhibit_output = false;
+
+/* Return a character from stdin, or the last unread character
+ if there is one available. */
+blink_cursor ()
+{
+ int character;
+
+ fflush (stdout);
+ if (untyi_char)
+ {
+ character = untyi_char;
+ untyi_char = 0;
+ }
+ else
+ do { character = getc (stdin); } while (character == -1 && errno == EINTR);
+
+ return (character);
+}
+
+/* Display single character on the terminal screen. If the
+ character would run off the right hand edge of the screen,
+ advance the cursor to the next line. */
+charout (character)
+ int character;
+{
+ if (inhibit_output)
+ return;
+
+ /* This character may need special treatment if it is
+ a control character. */
+ if (CTRL_P (character))
+ {
+ switch (character)
+ {
+ case NEWLINE:
+ case RETURN:
+ print_cr ();
+ break;
+
+ case TAB:
+ print_tab ();
+ break;
+
+ default:
+ charout ('^');
+ charout (UNCTRL (character));
+ }
+ }
+ else
+ {
+ putchar (character);
+ advance (1);
+ }
+}
+
+/* Move the cursor AMOUNT character positions. */
+advance (amount)
+ int amount;
+{
+ int old_window_cv = the_window.cv;
+
+ while (amount-- > 0)
+ {
+ the_window.ch++;
+ if (the_window.ch >= the_window.right)
+ {
+ the_window.ch = (the_window.ch - the_window.right) + the_window.left;
+ the_window.cv++;
+
+ if (the_window.cv >= the_window.bottom)
+ the_window.cv = the_window.top;
+ }
+ }
+
+ if (the_window.cv != old_window_cv)
+ goto_xy (the_window.ch, the_window.cv);
+}
+
+/* Print STRING and args using charout */
+print_string (string, a1, a2, a3, a4, a5)
+ char *string;
+{
+ int character;
+ char buffer[2048];
+ int idx = 0;
+
+ sprintf (buffer, string, a1, a2, a3, a4, a5);
+
+ while (character = buffer[idx++])
+ charout (character);
+
+ fflush (stdout);
+}
+
+/* Display a carriage return.
+ Clears to the end of the line first. */
+print_cr ()
+{
+ extern boolean typing_out;
+ clear_eol ();
+
+ if (typing_out)
+ { /* Do the "MORE" stuff. */
+ int response;
+
+ if (the_window.cv + 2 == the_window.bottom)
+ {
+ goto_xy (the_window.left, the_window.cv + 1);
+ clear_eol ();
+ print_string ("[More]");
+ response = blink_cursor ();
+ if (response != SPACE)
+ {
+ untyi_char = response;
+ inhibit_output = true;
+ return;
+ }
+ else
+ {
+ goto_xy (the_window.left, the_window.cv);
+ clear_eol ();
+ goto_xy (the_window.left, the_window.top);
+ return;
+ }
+ }
+ }
+ advance (the_window.right - the_window.ch);
+}
+
+/* Move the cursor to the next tab stop, blanking the intervening
+ spaces along the way. */
+print_tab ()
+{
+ int hpos, width, destination;
+
+ hpos = the_window.ch - the_window.left;
+ width = ((hpos + 8) & 0xf8) - hpos;
+
+ destination = hpos + width + the_window.left;
+
+ if (destination >= the_window.right)
+ destination -= the_window.right;
+
+ while (the_window.ch != destination)
+ charout (SPACE);
+}
+
+display_width (character, hpos)
+ int character, hpos;
+{
+ int width = 1;
+
+ if (CTRL_P (character))
+ {
+ switch (character)
+ {
+ case RETURN:
+ case NEWLINE:
+ width = the_window.right - hpos;
+ break;
+ case TAB:
+ width = ((hpos + 8) & 0xf8) - hpos;
+ break;
+ default:
+ width = 2;
+ }
+ }
+ return (width);
+}
+
+/* Like GOTO_XY, but do it right away. */
+I_goto_xy (xpos, ypos)
+ int xpos, ypos;
+{
+ goto_xy (xpos, ypos);
+ fflush (stdout);
+}
+
+/* Move the cursor, (and cursor variables) to xpos, ypos. */
+goto_xy (xpos, ypos)
+ int xpos, ypos;
+{
+ the_window.ch = xpos;
+ the_window.cv = ypos;
+ opsys_goto_pos (xpos, ypos);
+}
+
+/* Clear the screen, leaving ch and cv at the top of the window. */
+clear_screen ()
+{
+ goto_xy (the_window.left, the_window.top);
+ clear_eop_slowly ();
+}
+
+clear_eop_slowly ()
+{
+ int temp_ch = the_window.ch;
+ int temp_cv = the_window.cv;
+
+ clear_eol ();
+
+ while (++the_window.cv < the_window.bottom)
+ {
+ goto_xy (the_window.left, the_window.cv);
+ clear_eol ();
+ }
+ goto_xy (temp_ch, temp_cv);
+}
+
+/* Clear from current cursor position to end of page. */
+clear_eop ()
+{
+ if (terminal_clearEOP)
+ do_term (terminal_clearEOP);
+ else
+ clear_eop_slowly ();
+}
+
+/* Clear from current cursor position to end of screen line */
+clear_eol ()
+{
+ int temp_ch = the_window.ch;
+
+ if (terminal_clearEOL)
+ do_term (terminal_clearEOL);
+ else
+ {
+ char *line = widest_line;
+ int i;
+
+ for (i = 0; i < the_window.right - the_window.ch; i++)
+ line[i] = ' ';
+ line[i] = '\0';
+
+ printf ("%s", line);
+ }
+ goto_xy (temp_ch, the_window.cv);
+}
+
+/* Call FUNCTION with WINDOW active. You can pass upto 5 args to the
+ function. This returns whatever FUNCTION returns. */
+int
+with_output_to_window (window, function, arg1, arg2, arg3, arg4, arg5)
+ WINDOW *window;
+ Function *function;
+{
+ int result;
+
+ push_window ();
+ set_window (window);
+ result = (*function) (arg1, arg2, arg3, arg4, arg5);
+ pop_window ();
+ return (result);
+}
+
+/* Given a pointer to a window data structure, make that
+ the current window. */
+set_window (window)
+ WINDOW *window;
+{
+ bcopy (window, &the_window, sizeof (WINDOW));
+}
+
+/* Save the current window on the window stack. */
+push_window ()
+{
+ WINDOW_LIST *new_window = (WINDOW_LIST *) xmalloc (sizeof (WINDOW_LIST));
+
+ new_window->next_window = window_stack;
+ window_stack = new_window;
+ new_window->ch = the_window.ch;
+ new_window->cv = the_window.cv;
+ new_window->top = the_window.top;
+ new_window->bottom = the_window.bottom;
+ new_window->left = the_window.left;
+ new_window->right = the_window.right;
+}
+
+/* Pop the top of the window_stack into the_window. */
+pop_window ()
+{
+ set_window ((WINDOW *)window_stack);
+
+ if (window_stack->next_window)
+ {
+ WINDOW_LIST *thing_to_free = window_stack;
+ window_stack = window_stack->next_window;
+ free (thing_to_free);
+ }
+
+ goto_xy (the_window.ch, the_window.cv);
+}
+
+/* **************************************************************** */
+/* */
+/* "Opsys" functions. */
+/* */
+/* **************************************************************** */
+
+/* The lowlevel terminal/file interface. Nothing ever really gets
+ low level when you're writing in C, though.
+
+ This file contains all of the "opsys" labels. You have to make
+ a different one if you want GNU Info to run on machines that don't
+ have Unix. */
+
+extern char *terminal_use_begin, *terminal_use_end, *terminal_goto;
+
+#if defined (TIOCGETC)
+struct tchars original_tchars;
+#endif
+
+#if defined (TIOCGLTC)
+struct ltchars original_ltchars;
+#endif
+
+#if defined (USG)
+struct termio original_termio, ttybuff;
+#else
+int original_tty_flags = 0;
+int original_lmode;
+struct sgttyb ttybuff;
+#endif /* !USG */
+
+/* Yes, that's right, do things that the machine needs to get
+ the terminal into a usable mode. */
+opsys_init_terminal ()
+{
+ int tty = fileno (stdin);
+
+#if defined (USG)
+ ioctl (tty, TCGETA, &original_termio);
+ ioctl (tty, TCGETA, &ttybuff);
+ ttybuff.c_iflag &= (~ISTRIP & ~INLCR & ~IGNCR & ~ICRNL &~IXON);
+ ttybuff.c_oflag &= (~ONLCR & ~OCRNL);
+ ttybuff.c_lflag &= (~ICANON & ~ECHO);
+
+ ttybuff.c_cc[VMIN] = 1;
+ ttybuff.c_cc[VTIME] = 0;
+
+ if (ttybuff.c_cc[VINTR] = DELETE)
+ ttybuff.c_cc[VINTR] = -1;
+
+ if (ttybuff.c_cc[VQUIT] = DELETE)
+ ttybuff.c_cc[VQUIT] = -1;
+
+ ioctl (tty, TCSETA, &ttybuff);
+#else /* !USG */
+
+ ioctl (tty, TIOCGETP, &ttybuff);
+
+ if (!original_tty_flags)
+ original_tty_flags = ttybuff.sg_flags;
+
+ /* Make this terminal pass 8 bits around while we are using it. */
+#ifdef PASS8
+ ttybuff.sg_flags |= PASS8;
+#endif
+
+#if defined (TIOCLGET) && defined (LPASS8)
+ {
+ int flags;
+ ioctl (tty, TIOCLGET, &flags);
+ original_lmode = flags;
+ flags |= LPASS8;
+ ioctl (tty, TIOCLSET, &flags);
+ }
+#endif
+
+#ifdef TIOCGETC
+ {
+ struct tchars temp;
+
+ ioctl (tty, TIOCGETC, &original_tchars);
+ bcopy (&original_tchars, &temp, sizeof (struct tchars));
+
+ temp.t_startc = temp.t_stopc = -1;
+
+ /* If the quit character conflicts with one of our commands, then
+ make it go away. */
+ if (temp.t_intrc == DELETE)
+ temp.t_intrc == -1;
+
+ if (temp.t_quitc == DELETE)
+ temp.t_quitc == -1;
+
+ ioctl (tty, TIOCSETC, &temp);
+ }
+#endif /* TIOCGETC */
+
+#ifdef TIOCGLTC
+ {
+ struct ltchars temp;
+
+ ioctl (tty, TIOCGLTC, &original_ltchars);
+ bcopy (&original_ltchars, &temp, sizeof (struct ltchars));
+
+ /* Make the interrupt keys go away. Just enough to make people happy. */
+ temp.t_lnextc = -1; /* C-v */
+
+ ioctl (tty, TIOCSLTC, &temp);
+ }
+#endif /* TIOCGLTC */
+
+ ttybuff.sg_flags &= ~ECHO;
+ ttybuff.sg_flags |= CBREAK;
+ ioctl (tty, TIOCSETN, &ttybuff);
+#endif /* !USG */
+
+ open_terminal_io ();
+ do_term (terminal_use_begin);
+}
+
+/* Fix the terminal that I broke. */
+restore_io ()
+{
+ int tty = fileno (stdin);
+
+#if defined (USG)
+ ioctl (tty, TCSETA, &original_termio);
+#else
+ ioctl (tty, TIOCGETP, &ttybuff);
+ ttybuff.sg_flags = original_tty_flags;
+ ioctl (tty, TIOCSETN, &ttybuff);
+
+#ifdef TIOCGETC
+ ioctl (tty, TIOCSETC, &original_tchars);
+#endif /* TIOCGETC */
+
+#ifdef TIOCGLTC
+ ioctl (tty, TIOCSLTC, &original_ltchars);
+#endif /* TIOCGLTC */
+
+#if defined (TIOCLGET) && defined (LPASS8)
+ ioctl (tty, TIOCLSET, &original_lmode);
+#endif
+
+#endif /* !USG */
+ do_term (terminal_use_end);
+}
+
+opsys_goto_pos (xpos, ypos)
+ int xpos, ypos;
+{
+ do_term (tgoto (terminal_goto, xpos, ypos));
+}
+
+character_output_function (character)
+ char character;
+{
+ putchar (character);
+}
+
+/* Generic interface to tputs. */
+do_term (command)
+ char *command;
+{
+ /* Send command to the terminal, with appropriate padding. */
+ tputs (command, 1, character_output_function);
+}
+
+/* Filename manipulators, and the like. */
+char local_temp_filename[FILENAME_LEN];
+
+char *info_suffixes[] = {
+ "",
+ ".info",
+ "-info",
+ (char *)NULL
+};
+
+/* Expand the filename in partial to make a real name for
+ this operating system. This looks in INFO_PATHS in order to
+ find the correct file. If it can't find the file, it just
+ returns the path as you gave it. */
+char *
+opsys_filename (partial)
+ char *partial;
+{
+ int initial_character;
+
+ if (partial && (initial_character = *partial))
+ {
+
+ if (initial_character == '/')
+ return (partial);
+
+ if (initial_character == '~')
+ {
+ if (partial[1] == '/')
+ {
+ /* Return the concatenation of HOME and the rest
+ of the string. */
+ strcpy (local_temp_filename, getenv ("HOME"));
+ strcat (local_temp_filename, &partial[2]);
+ return (local_temp_filename);
+ }
+ else
+ {
+ struct passwd *user_entry;
+ int i, c;
+ char username[257];
+
+ for (i = 1; c = partial[i]; i++)
+ {
+ if (c == '/')
+ break;
+ else
+ username[i - 1] = c;
+ }
+ username[i - 1] = '\0';
+
+ if (!(user_entry = getpwnam (username)))
+ {
+ display_error ("Not a registered user!");
+ return (partial);
+ }
+ strcpy (local_temp_filename, user_entry->pw_dir);
+ strcat (local_temp_filename, &partial[i]);
+ return (local_temp_filename);
+ }
+ }
+
+ if (initial_character == '.')
+ {
+#if defined (USG)
+ if (!getcwd (local_temp_filename, FILENAME_LEN))
+#else
+ if (!getwd (local_temp_filename))
+#endif
+ {
+ display_error (local_temp_filename);
+ return (partial);
+ }
+
+ strcat (local_temp_filename, "/");
+ strcat (local_temp_filename, partial);
+ return (local_temp_filename);
+ }
+
+ /* Scan the list of directories in INFOPATH. */
+ {
+ struct stat finfo;
+ char *temp_dirname, *extract_colon_unit ();
+ int statable, dirname_index = 0;
+
+ while (temp_dirname = extract_colon_unit (infopath, &dirname_index))
+ {
+ register int i;
+
+ for (i = 0; info_suffixes[i]; i++)
+ {
+ strcpy (local_temp_filename, temp_dirname);
+
+ if (temp_dirname[(strlen (temp_dirname)) - 1] != '/')
+ strcat (local_temp_filename, "/");
+
+ strcat (local_temp_filename, partial);
+ strcat (local_temp_filename, info_suffixes[i]);
+
+ statable = (stat (local_temp_filename, &finfo) == 0);
+
+ if (statable && (finfo.st_mode & S_IFMT) == S_IFREG)
+ {
+ free (temp_dirname);
+ return (local_temp_filename);
+ }
+ }
+ free (temp_dirname);
+ }
+ }
+ }
+ return (partial);
+}
+
+/* Given a string containing units of information separated by colons,
+ return the next one pointed to by IDX, or NULL if there are no more.
+ Advance IDX to the character after the colon. */
+char *
+extract_colon_unit (string, idx)
+ char *string;
+ int *idx;
+{
+ register int i, start;
+
+ i = start = *idx;
+ if ((i >= strlen (string)) || !string)
+ return ((char *) NULL);
+
+ while (string[i] && string[i] != ':')
+ i++;
+ if (i == start)
+ {
+ return ((char *) NULL);
+ }
+ else
+ {
+ char *value = xmalloc (1 + (i - start));
+ strncpy (value, &string[start], (i - start));
+ value[i - start] = '\0';
+ if (string[i])
+ ++i;
+ *idx = i;
+ return (value);
+ }
+}
+
+/* **************************************************************** */
+/* */
+/* The echo area. */
+/* */
+/* **************************************************************** */
+
+/* echoarea.c -- some functions to aid in user interaction. */
+
+WINDOW echo_area = {0, 0, 0, 0, 0, 0};
+boolean echo_area_open_p = false;
+char modeline[256];
+WINDOW modeline_window = {0, 0, 0, 0, 0, 0};
+
+/* Define the location of the echo area. Also inits the
+ modeline as well. */
+init_echo_area (left, top, right, bottom)
+ int left, top, right, bottom;
+{
+ echo_area.left = modeline_window.left = left;
+ echo_area.top = top;
+ modeline_window.top = top - 1;
+ echo_area.right = modeline_window.right = right;
+ echo_area.bottom = bottom;
+ modeline_window.bottom = modeline_window.top;
+}
+
+/* Make the echo_area_window be the current window, and only allow
+ output in there. Clear the window to start. */
+new_echo_area ()
+{
+ if (!echo_area_open_p)
+ {
+ push_window ();
+ set_window (&echo_area);
+ echo_area_open_p = true;
+ }
+ goto_xy (the_window.left, the_window.top);
+ clear_eop ();
+}
+
+/* Return output to the previous window. */
+close_echo_area ()
+{
+ if (!echo_area_open_p)
+ return;
+
+ pop_window ();
+ echo_area_open_p = false;
+}
+
+/* Clear the contents of the echo area. */
+clear_echo_area ()
+{
+ new_echo_area ();
+ close_echo_area ();
+}
+
+/* Create and display the modeline. */
+make_modeline ()
+{
+ extern int info_buffer_len;
+ int width = modeline_window.right - modeline_window.left;
+
+ sprintf (modeline, "Info: (%s)%s, %d lines",
+ current_info_file, current_info_node, nodelines);
+ if (strnicmp
+ (opsys_filename (current_info_file), last_loaded_info_file,
+ strlen (last_loaded_info_file)) != 0)
+ {
+ sprintf (&modeline[strlen (modeline)], ", Subfile: %s",
+ last_loaded_info_file);
+ }
+
+ if (strlen (modeline) < width)
+ {
+ int idx = strlen (modeline);
+ while (idx != width)
+ modeline[idx++] = '-';
+ modeline[idx] = '\0';
+ }
+
+ if (strlen (modeline) > width)
+ modeline[width] = '\0';
+ push_window ();
+ set_window (&modeline_window);
+ goto_xy (the_window.left, the_window.top);
+
+ if (terminal_inverse_begin)
+ do_term (terminal_inverse_begin);
+ print_string (modeline);
+ if (terminal_inverse_begin)
+ do_term (terminal_end_attributes);
+
+ pop_window ();
+}
+
+boolean typing_out = false;
+
+/* Prepare to do output to the typeout window. If the
+ typeout window is already open, ignore this clown. */
+open_typeout ()
+{
+ if (typing_out)
+ return;
+
+ push_window ();
+ set_window (&terminal_window);
+ goto_xy (the_window.ch, the_window.cv);
+ typing_out = window_bashed = true;
+}
+
+/* Close the currently open typeout window. */
+close_typeout ()
+{
+ if (inhibit_output)
+ inhibit_output = false;
+ else
+ {
+ do { untyi_char = getc (stdin); }
+ while (untyi_char == -1 && errno == EINTR);
+
+ if (untyi_char == SPACE)
+ untyi_char = 0;
+ }
+ pop_window ();
+ typing_out = false;
+}
+
+char *
+xrealloc (pointer, bytes)
+ char *pointer;
+ int bytes;
+{
+ char *temp;
+
+ if (!pointer)
+ temp = (char *)xmalloc (bytes);
+ else
+ temp = (char *)realloc (pointer, bytes);
+
+ if (!temp)
+ {
+ fprintf (stderr, "Virtual memory exhausted\n");
+ restore_io ();
+ exit (2);
+ }
+ return (temp);
+}
+
+char *
+xmalloc (bytes)
+ int bytes;
+{
+ char *temp = (char *) malloc (bytes);
+
+ if (!temp)
+ {
+ fprintf (stderr, "Virtual memory exhausted\n");
+ restore_io ();
+ exit (2);
+ }
+ return (temp);
+}
diff --git a/macros/latex209/contrib/latexinfo/C/latexindex.c b/macros/latex209/contrib/latexinfo/C/latexindex.c
new file mode 100644
index 0000000000..d69d32e522
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/C/latexindex.c
@@ -0,0 +1,1679 @@
+/* Prepare TeX index dribble output into an actual index.
+
+ Version 1.40
+ 25 October 1991
+
+ Copyright (C) 1987, 1991 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#include <stdio.h>
+#include <ctype.h>
+#include "getopt.h"
+
+#ifdef STDC_HEADERS
+#include <string.h>
+#include <stdlib.h>
+#define bzero(p, n) memset((p), '\0', (n))
+#else
+char *getenv ();
+char *malloc ();
+char *realloc ();
+#endif
+
+#ifdef POSIX
+#include <unistd.h>
+#else
+long lseek ();
+#endif
+
+char *mktemp ();
+
+#ifdef VMS
+#include <file.h>
+
+#define EXIT_SUCCESS ((1 << 28) | 1)
+#define EXIT_FATAL ((1 << 28) | 4)
+#define unlink delete
+#else /* !VMS */
+#include <sys/file.h>
+
+#define EXIT_SUCCESS 0
+#define EXIT_FATAL 1
+#endif /* VMS */
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+#endif
+
+/* When sorting in core, this structure describes one line
+ and the position and length of its first keyfield. */
+
+struct lineinfo
+{
+ char *text; /* The actual text of the line. */
+ union
+ {
+ /* The start of the key (for textual comparison), */
+ char *text;
+ /* or the numeric value (for numeric comparison). */
+ long number;
+ } key;
+ long keylen; /* Length of key field. */
+};
+
+/* This structure describes a field to use as a sort key. */
+
+struct keyfield
+{
+ /* Number of words to skip. */
+ int startwords;
+
+ /* Number of additional chars to skip, to start of field. */
+ int startchars;
+
+ /* Similar, from beg (or end) of line, to find end of field. */
+ int endwords;
+
+ int endchars;
+
+ /* If nonzero, ignore spaces and tabs within the field. */
+ char ignore_blanks;
+
+ /* If nonzero, convert upper case to lower before comparing. */
+ char fold_case;
+
+ /* If nonzero, compare in reverse order. */
+ char reverse;
+
+ /* If nonzero, parse text as an integer and compare the integers. */
+ char numeric;
+
+ /* If nonzero, sort according to position within the file. */
+ char positional;
+
+ /* If nonzero, count balanced-braced groupings as fields. */
+ char braced;
+};
+
+/* Vector of keyfields to use. */
+struct keyfield keyfields[3];
+
+/* Number of keyfields stored in that vector. */
+int num_keyfields = 3;
+
+/* Vector of input file names, terminated with a null pointer. */
+char **infiles;
+
+/* Vector of corresponding output file names, or NULL, meaning default it
+ (add an `s' to the end). */
+char **outfiles;
+
+/* Length of `infiles'. */
+int num_infiles;
+
+/* Pointer to the array of pointers to lines being sorted. */
+char **linearray;
+
+/* The allocated length of `linearray'. */
+long lines;
+
+/* Directory to use for temporary files. On Unix, it ends with a slash. */
+char *tempdir;
+
+/* Start of filename to use for temporary files. */
+char *tempbase;
+
+/* Number of last temporary file. */
+int tempcount;
+
+/* Number of last temporary file already deleted.
+ Temporary files are deleted by `flush_tempfiles' in order of creation. */
+int last_deleted_tempcount;
+
+/* During in-core sort, this points to the base of the data block
+ which contains all the lines of data. */
+char *text_base;
+
+/* Additional command switches .*/
+
+/* Nonzero means do not delete tempfiles -- for debugging. */
+int keep_tempfiles;
+
+/* Forward declarations of functions in this file. */
+
+void decode_command ();
+void sort_in_core ();
+void sort_offline ();
+char **parsefile ();
+char *find_field ();
+char *find_pos ();
+long find_value ();
+char *find_braced_pos ();
+char *find_braced_end ();
+void writelines ();
+int compare_field ();
+int compare_full ();
+long readline ();
+int merge_files ();
+int merge_direct ();
+void pfatal_with_name ();
+void fatal ();
+void error ();
+char *xmalloc ();
+char *xrealloc ();
+char *concat ();
+char *maketempname ();
+void flush_tempfiles ();
+char *tempcopy ();
+
+#define MAX_IN_CORE_SORT 500000
+
+void
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ int i;
+
+ tempcount = 0;
+ last_deleted_tempcount = 0;
+
+ /* Describe the kind of sorting to do. */
+ /* The first keyfield uses the first braced field and folds case. */
+ keyfields[0].braced = 1;
+ keyfields[0].fold_case = 1;
+ keyfields[0].endwords = -1;
+ keyfields[0].endchars = -1;
+
+ /* The second keyfield uses the second braced field, numerically. */
+ keyfields[1].braced = 1;
+ keyfields[1].numeric = 1;
+ keyfields[1].startwords = 1;
+ keyfields[1].endwords = -1;
+ keyfields[1].endchars = -1;
+
+ /* The third keyfield (which is ignored while discarding duplicates)
+ compares the whole line. */
+ keyfields[2].endwords = -1;
+ keyfields[2].endchars = -1;
+
+ decode_command (argc, argv);
+
+ tempbase = mktemp (concat ("txiXXXXXX", "", ""));
+
+ /* Process input files completely, one by one. */
+
+ for (i = 0; i < num_infiles; i++)
+ {
+ int desc;
+ long ptr;
+ char *outfile;
+
+ desc = open (infiles[i], O_RDONLY, 0);
+ if (desc < 0)
+ pfatal_with_name (infiles[i]);
+ lseek (desc, 0L, SEEK_END);
+ ptr = lseek (desc, 0L, SEEK_CUR);
+
+ close (desc);
+
+ outfile = outfiles[i];
+ if (!outfile)
+ {
+ outfile = concat (infiles[i], "s", "");
+ }
+
+ if (ptr < MAX_IN_CORE_SORT)
+ /* Sort a small amount of data. */
+ sort_in_core (infiles[i], ptr, outfile);
+ else
+ sort_offline (infiles[i], ptr, outfile);
+ }
+
+ flush_tempfiles (tempcount);
+ exit (EXIT_SUCCESS);
+}
+
+/* Decode the command line arguments to set the parameter variables
+ and set up the vector of keyfields and the vector of input files. */
+
+void
+decode_command (argc, argv)
+ int argc;
+ char **argv;
+{
+ int optc;
+ char **ip;
+ char **op;
+
+ /* Store default values into parameter variables. */
+
+ tempdir = getenv ("TMPDIR");
+#ifdef VMS
+ if (tempdir == NULL)
+ tempdir = "sys$scratch:";
+#else
+ if (tempdir == NULL)
+ tempdir = "/tmp/";
+ else
+ tempdir = concat (tempdir, "/", "");
+#endif
+
+ keep_tempfiles = 0;
+
+ /* Allocate ARGC input files, which must be enough. */
+
+ infiles = (char **) xmalloc (argc * sizeof (char *));
+ outfiles = (char **) xmalloc (argc * sizeof (char *));
+ ip = infiles;
+ op = outfiles;
+
+ while ((optc = getopt (argc, argv, "-ko:")) != EOF)
+ {
+ switch (optc)
+ {
+ case 1: /* Non-option filename. */
+ *ip++ = optarg;
+ *op++ = NULL;
+ break;
+
+ case 'k':
+ keep_tempfiles = 1;
+ break;
+
+ case 'o':
+ if (op > outfiles)
+ *(op - 1) = optarg;
+ break;
+
+ default:
+ fprintf (stderr, "\
+Usage: %s [-k] infile [-o outfile] ...\n", argv[0]);
+ exit (1);
+ }
+ }
+
+ /* Record number of keyfields and terminate list of filenames. */
+ num_infiles = ip - infiles;
+ *ip = 0;
+}
+
+/* Return a name for a temporary file. */
+
+char *
+maketempname (count)
+ int count;
+{
+ char tempsuffix[10];
+ sprintf (tempsuffix, "%d", count);
+ return concat (tempdir, tempbase, tempsuffix);
+}
+
+/* Delete all temporary files up to TO_COUNT. */
+
+void
+flush_tempfiles (to_count)
+ int to_count;
+{
+ if (keep_tempfiles)
+ return;
+ while (last_deleted_tempcount < to_count)
+ unlink (maketempname (++last_deleted_tempcount));
+}
+
+/* Copy the input file open on IDESC into a temporary file
+ and return the temporary file name. */
+
+#define BUFSIZE 1024
+
+char *
+tempcopy (idesc)
+ int idesc;
+{
+ char *outfile = maketempname (++tempcount);
+ int odesc;
+ char buffer[BUFSIZE];
+
+ odesc = open (outfile, O_WRONLY | O_CREAT, 0666);
+
+ if (odesc < 0)
+ pfatal_with_name (outfile);
+
+ while (1)
+ {
+ int nread = read (idesc, buffer, BUFSIZE);
+ write (odesc, buffer, nread);
+ if (!nread)
+ break;
+ }
+
+ close (odesc);
+
+ return outfile;
+}
+
+/* Compare LINE1 and LINE2 according to the specified set of keyfields. */
+
+int
+compare_full (line1, line2)
+ char **line1, **line2;
+{
+ int i;
+
+ /* Compare using the first keyfield;
+ if that does not distinguish the lines, try the second keyfield;
+ and so on. */
+
+ for (i = 0; i < num_keyfields; i++)
+ {
+ long length1, length2;
+ char *start1 = find_field (&keyfields[i], *line1, &length1);
+ char *start2 = find_field (&keyfields[i], *line2, &length2);
+ int tem = compare_field (&keyfields[i], start1, length1, *line1 - text_base,
+ start2, length2, *line2 - text_base);
+ if (tem)
+ {
+ if (keyfields[i].reverse)
+ return -tem;
+ return tem;
+ }
+ }
+
+ return 0; /* Lines match exactly. */
+}
+
+/* Compare LINE1 and LINE2, described by structures
+ in which the first keyfield is identified in advance.
+ For positional sorting, assumes that the order of the lines in core
+ reflects their nominal order. */
+
+int
+compare_prepared (line1, line2)
+ struct lineinfo *line1, *line2;
+{
+ int i;
+ int tem;
+ char *text1, *text2;
+
+ /* Compare using the first keyfield, which has been found for us already. */
+ if (keyfields->positional)
+ {
+ if (line1->text - text_base > line2->text - text_base)
+ tem = 1;
+ else
+ tem = -1;
+ }
+ else if (keyfields->numeric)
+ tem = line1->key.number - line2->key.number;
+ else
+ tem = compare_field (keyfields, line1->key.text, line1->keylen, 0,
+ line2->key.text, line2->keylen, 0);
+ if (tem)
+ {
+ if (keyfields->reverse)
+ return -tem;
+ return tem;
+ }
+
+ text1 = line1->text;
+ text2 = line2->text;
+
+ /* Compare using the second keyfield;
+ if that does not distinguish the lines, try the third keyfield;
+ and so on. */
+
+ for (i = 1; i < num_keyfields; i++)
+ {
+ long length1, length2;
+ char *start1 = find_field (&keyfields[i], text1, &length1);
+ char *start2 = find_field (&keyfields[i], text2, &length2);
+ int tem = compare_field (&keyfields[i], start1, length1, text1 - text_base,
+ start2, length2, text2 - text_base);
+ if (tem)
+ {
+ if (keyfields[i].reverse)
+ return -tem;
+ return tem;
+ }
+ }
+
+ return 0; /* Lines match exactly. */
+}
+
+/* Like compare_full but more general.
+ You can pass any strings, and you can say how many keyfields to use.
+ POS1 and POS2 should indicate the nominal positional ordering of
+ the two lines in the input. */
+
+int
+compare_general (str1, str2, pos1, pos2, use_keyfields)
+ char *str1, *str2;
+ long pos1, pos2;
+ int use_keyfields;
+{
+ int i;
+
+ /* Compare using the first keyfield;
+ if that does not distinguish the lines, try the second keyfield;
+ and so on. */
+
+ for (i = 0; i < use_keyfields; i++)
+ {
+ long length1, length2;
+ char *start1 = find_field (&keyfields[i], str1, &length1);
+ char *start2 = find_field (&keyfields[i], str2, &length2);
+ int tem = compare_field (&keyfields[i], start1, length1, pos1,
+ start2, length2, pos2);
+ if (tem)
+ {
+ if (keyfields[i].reverse)
+ return -tem;
+ return tem;
+ }
+ }
+
+ return 0; /* Lines match exactly. */
+}
+
+/* Find the start and length of a field in STR according to KEYFIELD.
+ A pointer to the starting character is returned, and the length
+ is stored into the int that LENGTHPTR points to. */
+
+char *
+find_field (keyfield, str, lengthptr)
+ struct keyfield *keyfield;
+ char *str;
+ long *lengthptr;
+{
+ char *start;
+ char *end;
+ char *(*fun) ();
+
+ if (keyfield->braced)
+ fun = find_braced_pos;
+ else
+ fun = find_pos;
+
+ start = (*fun) (str, keyfield->startwords, keyfield->startchars,
+ keyfield->ignore_blanks);
+ if (keyfield->endwords < 0)
+ {
+ if (keyfield->braced)
+ end = find_braced_end (start);
+ else
+ {
+ end = start;
+ while (*end && *end != '\n')
+ end++;
+ }
+ }
+ else
+ {
+ end = (*fun) (str, keyfield->endwords, keyfield->endchars, 0);
+ if (end - str < start - str)
+ end = start;
+ }
+ *lengthptr = end - start;
+ return start;
+}
+
+/* Return a pointer to a specified place within STR,
+ skipping (from the beginning) WORDS words and then CHARS chars.
+ If IGNORE_BLANKS is nonzero, we skip all blanks
+ after finding the specified word. */
+
+char *
+find_pos (str, words, chars, ignore_blanks)
+ char *str;
+ int words, chars;
+ int ignore_blanks;
+{
+ int i;
+ char *p = str;
+
+ for (i = 0; i < words; i++)
+ {
+ char c;
+ /* Find next bunch of nonblanks and skip them. */
+ while ((c = *p) == ' ' || c == '\t')
+ p++;
+ while ((c = *p) && c != '\n' && !(c == ' ' || c == '\t'))
+ p++;
+ if (!*p || *p == '\n')
+ return p;
+ }
+
+ while (*p == ' ' || *p == '\t')
+ p++;
+
+ for (i = 0; i < chars; i++)
+ {
+ if (!*p || *p == '\n')
+ break;
+ p++;
+ }
+ return p;
+}
+
+/* Like find_pos but assumes that each field is surrounded by braces
+ and that braces within fields are balanced. */
+
+char *
+find_braced_pos (str, words, chars, ignore_blanks)
+ char *str;
+ int words, chars;
+ int ignore_blanks;
+{
+ int i;
+ int bracelevel;
+ char *p = str;
+ char c;
+
+ for (i = 0; i < words; i++)
+ {
+ bracelevel = 1;
+ while ((c = *p++) != '{' && c != '\n' && c)
+ /* Do nothing. */ ;
+ if (c != '{')
+ return p - 1;
+ while (bracelevel)
+ {
+ c = *p++;
+ if (c == '{')
+ bracelevel++;
+ if (c == '}')
+ bracelevel--;
+ if (c == '\\')
+ c = *p++; /* \ quotes braces and \. */
+ if (c == 0 || c == '\n')
+ return p - 1;
+ }
+ }
+
+ while ((c = *p++) != '{' && c != '\n' && c)
+ /* Do nothing. */ ;
+
+ if (c != '{')
+ return p - 1;
+
+ if (ignore_blanks)
+ while ((c = *p) == ' ' || c == '\t')
+ p++;
+
+ for (i = 0; i < chars; i++)
+ {
+ if (!*p || *p == '\n')
+ break;
+ p++;
+ }
+ return p;
+}
+
+/* Find the end of the balanced-brace field which starts at STR.
+ The position returned is just before the closing brace. */
+
+char *
+find_braced_end (str)
+ char *str;
+{
+ int bracelevel;
+ char *p = str;
+ char c;
+
+ bracelevel = 1;
+ while (bracelevel)
+ {
+ c = *p++;
+ if (c == '{')
+ bracelevel++;
+ if (c == '}')
+ bracelevel--;
+ if (c == '\\')
+ c = *p++;
+ if (c == 0 || c == '\n')
+ return p - 1;
+ }
+ return p - 1;
+}
+
+long
+find_value (start, length)
+ char *start;
+ long length;
+{
+ while (length != 0L)
+ {
+ if (isdigit (*start))
+ return atol (start);
+ length--;
+ start++;
+ }
+ return 0l;
+}
+
+/* Vector used to translate characters for comparison.
+ This is how we make all alphanumerics follow all else,
+ and ignore case in the first sorting. */
+int char_order[256];
+
+void
+init_char_order ()
+{
+ int i;
+ for (i = 1; i < 256; i++)
+ char_order[i] = i;
+
+ for (i = '0'; i <= '9'; i++)
+ char_order[i] += 512;
+
+ for (i = 'a'; i <= 'z'; i++)
+ {
+ char_order[i] = 512 + i;
+ char_order[i + 'A' - 'a'] = 512 + i;
+ }
+}
+
+/* Compare two fields (each specified as a start pointer and a character count)
+ according to KEYFIELD.
+ The sign of the value reports the relation between the fields. */
+
+int
+compare_field (keyfield, start1, length1, pos1, start2, length2, pos2)
+ struct keyfield *keyfield;
+ char *start1;
+ long length1;
+ long pos1;
+ char *start2;
+ long length2;
+ long pos2;
+{
+ if (keyfields->positional)
+ {
+ if (pos1 > pos2)
+ return 1;
+ else
+ return -1;
+ }
+ if (keyfield->numeric)
+ {
+ long value = find_value (start1, length1) - find_value (start2, length2);
+ if (value > 0)
+ return 1;
+ if (value < 0)
+ return -1;
+ return 0;
+ }
+ else
+ {
+ char *p1 = start1;
+ char *p2 = start2;
+ char *e1 = start1 + length1;
+ char *e2 = start2 + length2;
+
+ while (1)
+ {
+ int c1, c2;
+
+ if (p1 == e1)
+ c1 = 0;
+ else
+ c1 = *p1++;
+ if (p2 == e2)
+ c2 = 0;
+ else
+ c2 = *p2++;
+
+ if (char_order[c1] != char_order[c2])
+ return char_order[c1] - char_order[c2];
+ if (!c1)
+ break;
+ }
+
+ /* Strings are equal except possibly for case. */
+ p1 = start1;
+ p2 = start2;
+ while (1)
+ {
+ int c1, c2;
+
+ if (p1 == e1)
+ c1 = 0;
+ else
+ c1 = *p1++;
+ if (p2 == e2)
+ c2 = 0;
+ else
+ c2 = *p2++;
+
+ if (c1 != c2)
+ /* Reverse sign here so upper case comes out last. */
+ return c2 - c1;
+ if (!c1)
+ break;
+ }
+
+ return 0;
+ }
+}
+
+/* A `struct linebuffer' is a structure which holds a line of text.
+ `readline' reads a line from a stream into a linebuffer
+ and works regardless of the length of the line. */
+
+struct linebuffer
+{
+ long size;
+ char *buffer;
+};
+
+/* Initialize LINEBUFFER for use. */
+
+void
+initbuffer (linebuffer)
+ struct linebuffer *linebuffer;
+{
+ linebuffer->size = 200;
+ linebuffer->buffer = (char *) xmalloc (200);
+}
+
+/* Read a line of text from STREAM into LINEBUFFER.
+ Return the length of the line. */
+
+long
+readline (linebuffer, stream)
+ struct linebuffer *linebuffer;
+ FILE *stream;
+{
+ char *buffer = linebuffer->buffer;
+ char *p = linebuffer->buffer;
+ char *end = p + linebuffer->size;
+
+ while (1)
+ {
+ int c = getc (stream);
+ if (p == end)
+ {
+ buffer = (char *) xrealloc (buffer, linebuffer->size *= 2);
+ p += buffer - linebuffer->buffer;
+ end += buffer - linebuffer->buffer;
+ linebuffer->buffer = buffer;
+ }
+ if (c < 0 || c == '\n')
+ {
+ *p = 0;
+ break;
+ }
+ *p++ = c;
+ }
+
+ return p - buffer;
+}
+
+/* Sort an input file too big to sort in core. */
+
+void
+sort_offline (infile, nfiles, total, outfile)
+ char *infile;
+ int nfiles;
+ long total;
+ char *outfile;
+{
+ /* More than enough. */
+ int ntemps = 2 * (total + MAX_IN_CORE_SORT - 1) / MAX_IN_CORE_SORT;
+ char **tempfiles = (char **) xmalloc (ntemps * sizeof (char *));
+ FILE *istream = fopen (infile, "r");
+ int i;
+ struct linebuffer lb;
+ long linelength;
+ int failure = 0;
+
+ initbuffer (&lb);
+
+ /* Read in one line of input data. */
+
+ linelength = readline (&lb, istream);
+
+ if (lb.buffer[0] != '\\')
+ {
+ error ("%s: not a texinfo index file", infile);
+ return;
+ }
+
+ /* Split up the input into `ntemps' temporary files, or maybe fewer,
+ and put the new files' names into `tempfiles' */
+
+ for (i = 0; i < ntemps; i++)
+ {
+ char *outname = maketempname (++tempcount);
+ FILE *ostream = fopen (outname, "w");
+ long tempsize = 0;
+
+ if (!ostream)
+ pfatal_with_name (outname);
+ tempfiles[i] = outname;
+
+ /* Copy lines into this temp file as long as it does not make file
+ "too big" or until there are no more lines. */
+
+ while (tempsize + linelength + 1 <= MAX_IN_CORE_SORT)
+ {
+ tempsize += linelength + 1;
+ fputs (lb.buffer, ostream);
+ putc ('\n', ostream);
+
+ /* Read another line of input data. */
+
+ linelength = readline (&lb, istream);
+ if (!linelength && feof (istream))
+ break;
+
+ if (lb.buffer[0] != '\\')
+ {
+ error ("%s: not a texinfo index file", infile);
+ failure = 1;
+ goto fail;
+ }
+ }
+ fclose (ostream);
+ if (feof (istream))
+ break;
+ }
+
+ free (lb.buffer);
+
+fail:
+ /* Record number of temp files we actually needed. */
+
+ ntemps = i;
+
+ /* Sort each tempfile into another tempfile.
+ Delete the first set of tempfiles and put the names of the second
+ into `tempfiles'. */
+
+ for (i = 0; i < ntemps; i++)
+ {
+ char *newtemp = maketempname (++tempcount);
+ sort_in_core (&tempfiles[i], MAX_IN_CORE_SORT, newtemp);
+ if (!keep_tempfiles)
+ unlink (tempfiles[i]);
+ tempfiles[i] = newtemp;
+ }
+
+ if (failure)
+ return;
+
+ /* Merge the tempfiles together and indexify. */
+
+ merge_files (tempfiles, ntemps, outfile);
+}
+
+/* Sort INFILE, whose size is TOTAL,
+ assuming that is small enough to be done in-core,
+ then indexify it and send the output to OUTFILE (or to stdout). */
+
+void
+sort_in_core (infile, total, outfile)
+ char *infile;
+ long total;
+ char *outfile;
+{
+ char **nextline;
+ char *data = (char *) xmalloc (total + 1);
+ char *file_data;
+ long file_size;
+ int i;
+ FILE *ostream = stdout;
+ struct lineinfo *lineinfo;
+
+ /* Read the contents of the file into the moby array `data'. */
+
+ int desc = open (infile, O_RDONLY, 0);
+
+ if (desc < 0)
+ fatal ("failure reopening %s", infile);
+ for (file_size = 0;;)
+ {
+ i = read (desc, data + file_size, total - file_size);
+ if (i <= 0)
+ break;
+ file_size += i;
+ }
+ file_data = data;
+ data[file_size] = 0;
+
+ close (desc);
+
+ if (file_size > 0 && data[0] != '\\')
+ {
+ error ("%s: not a texinfo index file", infile);
+ return;
+ }
+
+ init_char_order ();
+
+ /* Sort routines want to know this address. */
+
+ text_base = data;
+
+ /* Create the array of pointers to lines, with a default size
+ frequently enough. */
+
+ lines = total / 50;
+ if (!lines)
+ lines = 2;
+ linearray = (char **) xmalloc (lines * sizeof (char *));
+
+ /* `nextline' points to the next free slot in this array.
+ `lines' is the allocated size. */
+
+ nextline = linearray;
+
+ /* Parse the input file's data, and make entries for the lines. */
+
+ nextline = parsefile (infile, nextline, file_data, file_size);
+ if (nextline == 0)
+ {
+ error ("%s: not a texinfo index file", infile);
+ return;
+ }
+
+ /* Sort the lines. */
+
+ /* If we have enough space, find the first keyfield of each line in advance.
+ Make a `struct lineinfo' for each line, which records the keyfield
+ as well as the line, and sort them. */
+
+ lineinfo = (struct lineinfo *) malloc ((nextline - linearray) * sizeof (struct lineinfo));
+
+ if (lineinfo)
+ {
+ struct lineinfo *lp;
+ char **p;
+
+ for (lp = lineinfo, p = linearray; p != nextline; lp++, p++)
+ {
+ lp->text = *p;
+ lp->key.text = find_field (keyfields, *p, &lp->keylen);
+ if (keyfields->numeric)
+ lp->key.number = find_value (lp->key.text, lp->keylen);
+ }
+
+ qsort (lineinfo, nextline - linearray, sizeof (struct lineinfo), compare_prepared);
+
+ for (lp = lineinfo, p = linearray; p != nextline; lp++, p++)
+ *p = lp->text;
+
+ free (lineinfo);
+ }
+ else
+ qsort (linearray, nextline - linearray, sizeof (char *), compare_full);
+
+ /* Open the output file. */
+
+ if (outfile)
+ {
+ ostream = fopen (outfile, "w");
+ if (!ostream)
+ pfatal_with_name (outfile);
+ }
+
+ writelines (linearray, nextline - linearray, ostream);
+ if (outfile)
+ fclose (ostream);
+
+ free (linearray);
+ free (data);
+}
+
+/* Parse an input string in core into lines.
+ DATA is the input string, and SIZE is its length.
+ Data goes in LINEARRAY starting at NEXTLINE.
+ The value returned is the first entry in LINEARRAY still unused.
+ Value 0 means input file contents are invalid. */
+
+char **
+parsefile (filename, nextline, data, size)
+ char *filename;
+ char **nextline;
+ char *data;
+ long size;
+{
+ char *p, *end;
+ char **line = nextline;
+
+ p = data;
+ end = p + size;
+ *end = 0;
+
+ while (p != end)
+ {
+ if (p[0] != '\\')
+ return 0;
+
+ *line = p;
+ while (*p && *p != '\n')
+ p++;
+ if (p != end)
+ p++;
+
+ line++;
+ if (line == linearray + lines)
+ {
+ char **old = linearray;
+ linearray = (char **) xrealloc (linearray, sizeof (char *) * (lines *= 4));
+ line += linearray - old;
+ }
+ }
+
+ return line;
+}
+
+/* Indexification is a filter applied to the sorted lines
+ as they are being written to the output file.
+ Multiple entries for the same name, with different page numbers,
+ get combined into a single entry with multiple page numbers.
+ The first braced field, which is used for sorting, is discarded.
+ However, its first character is examined, folded to lower case,
+ and if it is different from that in the previous line fed to us
+ a \initial line is written with one argument, the new initial.
+
+ If an entry has four braced fields, then the second and third
+ constitute primary and secondary names.
+ In this case, each change of primary name
+ generates a \primary line which contains only the primary name,
+ and in between these are \secondary lines which contain
+ just a secondary name and page numbers. */
+
+/* The last primary name we wrote a \primary entry for.
+ If only one level of indexing is being done, this is the last name seen. */
+char *lastprimary;
+/* Length of storage allocated for lastprimary. */
+int lastprimarylength;
+
+/* Similar, for the secondary name. */
+char *lastsecondary;
+int lastsecondarylength;
+
+/* Zero if we are not in the middle of writing an entry.
+ One if we have written the beginning of an entry but have not
+ yet written any page numbers into it.
+ Greater than one if we have written the beginning of an entry
+ plus at least one page number. */
+int pending;
+
+/* The initial (for sorting purposes) of the last primary entry written.
+ When this changes, a \initial {c} line is written */
+
+char *lastinitial;
+
+int lastinitiallength;
+
+/* When we need a string of length 1 for the value of lastinitial,
+ store it here. */
+
+char lastinitial1[2];
+
+/* Initialize static storage for writing an index. */
+
+void
+init_index ()
+{
+ pending = 0;
+ lastinitial = lastinitial1;
+ lastinitial1[0] = 0;
+ lastinitial1[1] = 0;
+ lastinitiallength = 0;
+ lastprimarylength = 100;
+ lastprimary = (char *) xmalloc (lastprimarylength + 1);
+ bzero (lastprimary, lastprimarylength + 1);
+ lastsecondarylength = 100;
+ lastsecondary = (char *) xmalloc (lastsecondarylength + 1);
+ bzero (lastsecondary, lastsecondarylength + 1);
+}
+
+/* Indexify. Merge entries for the same name,
+ insert headers for each initial character, etc. */
+
+void
+indexify (line, ostream)
+ char *line;
+ FILE *ostream;
+{
+ char *primary, *secondary, *pagenumber;
+ int primarylength, secondarylength = 0, pagelength;
+ int nosecondary;
+ int initiallength;
+ char *initial;
+ char initial1[2];
+ register char *p;
+
+ /* First, analyze the parts of the entry fed to us this time. */
+
+ p = find_braced_pos (line, 0, 0, 0);
+ if (*p == '{')
+ {
+ initial = p;
+ /* Get length of inner pair of braces starting at `p',
+ including that inner pair of braces. */
+ initiallength = find_braced_end (p + 1) + 1 - p;
+ }
+ else
+ {
+ initial = initial1;
+ initial1[0] = *p;
+ initial1[1] = 0;
+ initiallength = 1;
+
+ if (initial1[0] >= 'a' && initial1[0] <= 'z')
+ initial1[0] -= 040;
+ }
+
+ pagenumber = find_braced_pos (line, 1, 0, 0);
+ pagelength = find_braced_end (pagenumber) - pagenumber;
+ if (pagelength == 0)
+ abort ();
+
+ primary = find_braced_pos (line, 2, 0, 0);
+ primarylength = find_braced_end (primary) - primary;
+
+ secondary = find_braced_pos (line, 3, 0, 0);
+ nosecondary = !*secondary;
+ if (!nosecondary)
+ secondarylength = find_braced_end (secondary) - secondary;
+
+ /* If the primary is different from before, make a new primary entry. */
+ if (strncmp (primary, lastprimary, primarylength))
+ {
+ /* Close off current secondary entry first, if one is open. */
+ if (pending)
+ {
+ fputs ("}\n", ostream);
+ pending = 0;
+ }
+
+ /* If this primary has a different initial, include an entry for
+ the initial. */
+ if (initiallength != lastinitiallength ||
+ strncmp (initial, lastinitial, initiallength))
+ {
+ if ( strncmp (initial, "\\", 1) == 0)
+ { fprintf (ostream, "\\initial {\\back}\n"); }
+ else
+ {
+ fprintf (ostream, "\\initial {");
+ fwrite (initial, 1, initiallength, ostream);
+ fprintf (ostream, "}\n", initial);
+ }
+
+ if (initial == initial1)
+ {
+ lastinitial = lastinitial1;
+ *lastinitial1 = *initial1;
+ }
+ else
+ {
+ lastinitial = initial;
+ }
+ lastinitiallength = initiallength;
+ }
+
+ /* Make the entry for the primary. */
+ if (nosecondary)
+ fputs ("\\entry {", ostream);
+ else
+ fputs ("\\primary {", ostream);
+ fwrite (primary, primarylength, 1, ostream);
+ if (nosecondary)
+ {
+ fputs ("}{", ostream);
+ pending = 1;
+ }
+ else
+ fputs ("}\n", ostream);
+
+ /* Record name of most recent primary. */
+ if (lastprimarylength < primarylength)
+ {
+ lastprimarylength = primarylength + 100;
+ lastprimary = (char *) xrealloc (lastprimary,
+ 1 + lastprimarylength);
+ }
+ strncpy (lastprimary, primary, primarylength);
+ lastprimary[primarylength] = 0;
+
+ /* There is no current secondary within this primary, now. */
+ lastsecondary[0] = 0;
+ }
+
+ /* Should not have an entry with no subtopic following one with a subtopic. */
+
+ if (nosecondary && *lastsecondary)
+ error ("entry %s follows an entry with a secondary name", line);
+
+ /* Start a new secondary entry if necessary. */
+ if (!nosecondary && strncmp (secondary, lastsecondary, secondarylength))
+ {
+ if (pending)
+ {
+ fputs ("}\n", ostream);
+ pending = 0;
+ }
+
+ /* Write the entry for the secondary. */
+ fputs ("\\secondary {", ostream);
+ fwrite (secondary, secondarylength, 1, ostream);
+ fputs ("}{", ostream);
+ pending = 1;
+
+ /* Record name of most recent secondary. */
+ if (lastsecondarylength < secondarylength)
+ {
+ lastsecondarylength = secondarylength + 100;
+ lastsecondary = (char *) xrealloc (lastsecondary,
+ 1 + lastsecondarylength);
+ }
+ strncpy (lastsecondary, secondary, secondarylength);
+ lastsecondary[secondarylength] = 0;
+ }
+
+ /* Here to add one more page number to the current entry. */
+ if (pending++ != 1)
+ fputs (", ", ostream); /* Punctuate first, if this is not the first. */
+ fwrite (pagenumber, pagelength, 1, ostream);
+}
+
+/* Close out any unfinished output entry. */
+
+void
+finish_index (ostream)
+ FILE *ostream;
+{
+ if (pending)
+ fputs ("}\n", ostream);
+ free (lastprimary);
+ free (lastsecondary);
+}
+
+/* Copy the lines in the sorted order.
+ Each line is copied out of the input file it was found in. */
+
+void
+writelines (linearray, nlines, ostream)
+ char **linearray;
+ int nlines;
+ FILE *ostream;
+{
+ char **stop_line = linearray + nlines;
+ char **next_line;
+
+ init_index ();
+
+ /* Output the text of the lines, and free the buffer space. */
+
+ for (next_line = linearray; next_line != stop_line; next_line++)
+ {
+ /* If -u was specified, output the line only if distinct from previous one. */
+ if (next_line == linearray
+ /* Compare previous line with this one, using only the
+ explicitly specd keyfields. */
+ || compare_general (*(next_line - 1), *next_line, 0L, 0L, num_keyfields - 1))
+ {
+ char *p = *next_line;
+ char c;
+
+ while ((c = *p++) && c != '\n')
+ /* Do nothing. */ ;
+ *(p - 1) = 0;
+ indexify (*next_line, ostream);
+ }
+ }
+
+ finish_index (ostream);
+}
+
+/* Assume (and optionally verify) that each input file is sorted;
+ merge them and output the result.
+ Returns nonzero if any input file fails to be sorted.
+
+ This is the high-level interface that can handle an unlimited
+ number of files. */
+
+#define MAX_DIRECT_MERGE 10
+
+int
+merge_files (infiles, nfiles, outfile)
+ char **infiles;
+ int nfiles;
+ char *outfile;
+{
+ char **tempfiles;
+ int ntemps;
+ int i;
+ int value = 0;
+ int start_tempcount = tempcount;
+
+ if (nfiles <= MAX_DIRECT_MERGE)
+ return merge_direct (infiles, nfiles, outfile);
+
+ /* Merge groups of MAX_DIRECT_MERGE input files at a time,
+ making a temporary file to hold each group's result. */
+
+ ntemps = (nfiles + MAX_DIRECT_MERGE - 1) / MAX_DIRECT_MERGE;
+ tempfiles = (char **) xmalloc (ntemps * sizeof (char *));
+ for (i = 0; i < ntemps; i++)
+ {
+ int nf = MAX_DIRECT_MERGE;
+ if (i + 1 == ntemps)
+ nf = nfiles - i * MAX_DIRECT_MERGE;
+ tempfiles[i] = maketempname (++tempcount);
+ value |= merge_direct (&infiles[i * MAX_DIRECT_MERGE], nf, tempfiles[i]);
+ }
+
+ /* All temporary files that existed before are no longer needed
+ since their contents have been merged into our new tempfiles.
+ So delete them. */
+ flush_tempfiles (start_tempcount);
+
+ /* Now merge the temporary files we created. */
+
+ merge_files (tempfiles, ntemps, outfile);
+
+ free (tempfiles);
+
+ return value;
+}
+
+/* Assume (and optionally verify) that each input file is sorted;
+ merge them and output the result.
+ Returns nonzero if any input file fails to be sorted.
+
+ This version of merging will not work if the number of
+ input files gets too high. Higher level functions
+ use it only with a bounded number of input files. */
+
+int
+merge_direct (infiles, nfiles, outfile)
+ char **infiles;
+ int nfiles;
+ char *outfile;
+{
+ struct linebuffer *lb1, *lb2;
+ struct linebuffer **thisline, **prevline;
+ FILE **streams;
+ int i;
+ int nleft;
+ int lossage = 0;
+ int *file_lossage;
+ struct linebuffer *prev_out = 0;
+ FILE *ostream = stdout;
+
+ if (outfile)
+ {
+ ostream = fopen (outfile, "w");
+ }
+ if (!ostream)
+ pfatal_with_name (outfile);
+
+ init_index ();
+
+ if (nfiles == 0)
+ {
+ if (outfile)
+ fclose (ostream);
+ return 0;
+ }
+
+ /* For each file, make two line buffers.
+ Also, for each file, there is an element of `thisline'
+ which points at any time to one of the file's two buffers,
+ and an element of `prevline' which points to the other buffer.
+ `thisline' is supposed to point to the next available line from the file,
+ while `prevline' holds the last file line used,
+ which is remembered so that we can verify that the file is properly sorted. */
+
+ /* lb1 and lb2 contain one buffer each per file. */
+ lb1 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer));
+ lb2 = (struct linebuffer *) xmalloc (nfiles * sizeof (struct linebuffer));
+
+ /* thisline[i] points to the linebuffer holding the next available line in file i,
+ or is zero if there are no lines left in that file. */
+ thisline = (struct linebuffer **) xmalloc (nfiles * sizeof (struct linebuffer *));
+ /* prevline[i] points to the linebuffer holding the last used line from file i.
+ This is just for verifying that file i is properly sorted. */
+ prevline = (struct linebuffer **) xmalloc (nfiles * sizeof (struct linebuffer *));
+ /* streams[i] holds the input stream for file i. */
+ streams = (FILE **) xmalloc (nfiles * sizeof (FILE *));
+ /* file_lossage[i] is nonzero if we already know file i is not properly sorted. */
+ file_lossage = (int *) xmalloc (nfiles * sizeof (int));
+
+ /* Allocate and initialize all that storage. */
+
+ for (i = 0; i < nfiles; i++)
+ {
+ initbuffer (&lb1[i]);
+ initbuffer (&lb2[i]);
+ thisline[i] = &lb1[i];
+ prevline[i] = &lb2[i];
+ file_lossage[i] = 0;
+ streams[i] = fopen (infiles[i], "r");
+ if (!streams[i])
+ pfatal_with_name (infiles[i]);
+
+ readline (thisline[i], streams[i]);
+ }
+
+ /* Keep count of number of files not at eof. */
+ nleft = nfiles;
+
+ while (nleft)
+ {
+ struct linebuffer *best = 0;
+ struct linebuffer *exch;
+ int bestfile = -1;
+ int i;
+
+ /* Look at the next avail line of each file; choose the least one. */
+
+ for (i = 0; i < nfiles; i++)
+ {
+ if (thisline[i] &&
+ (!best ||
+ 0 < compare_general (best->buffer, thisline[i]->buffer,
+ (long) bestfile, (long) i, num_keyfields)))
+ {
+ best = thisline[i];
+ bestfile = i;
+ }
+ }
+
+ /* Output that line, unless it matches the previous one and we
+ don't want duplicates. */
+
+ if (!(prev_out &&
+ !compare_general (prev_out->buffer, best->buffer, 0L, 1L, num_keyfields - 1)))
+ indexify (best->buffer, ostream);
+ prev_out = best;
+
+ /* Now make the line the previous of its file, and fetch a new
+ line from that file. */
+
+ exch = prevline[bestfile];
+ prevline[bestfile] = thisline[bestfile];
+ thisline[bestfile] = exch;
+
+ while (1)
+ {
+ /* If the file has no more, mark it empty. */
+
+ if (feof (streams[bestfile]))
+ {
+ thisline[bestfile] = 0;
+ nleft--; /* Update the number of files still not empty. */
+ break;
+ }
+ readline (thisline[bestfile], streams[bestfile]);
+ if (thisline[bestfile]->buffer[0] || !feof (streams[bestfile]))
+ break;
+ }
+ }
+
+ finish_index (ostream);
+
+ /* Free all storage and close all input streams. */
+
+ for (i = 0; i < nfiles; i++)
+ {
+ fclose (streams[i]);
+ free (lb1[i].buffer);
+ free (lb2[i].buffer);
+ }
+ free (file_lossage);
+ free (lb1);
+ free (lb2);
+ free (thisline);
+ free (prevline);
+ free (streams);
+
+ if (outfile)
+ fclose (ostream);
+
+ return lossage;
+}
+
+/* Print error message and exit. */
+
+void
+fatal (s1, s2)
+ char *s1, *s2;
+{
+ error (s1, s2);
+ exit (EXIT_FATAL);
+}
+
+/* Print error message. S1 is printf control string, S2 is arg for it. */
+
+void
+error (s1, s2)
+ char *s1, *s2;
+{
+ printf ("texindex: ");
+ printf (s1, s2);
+ printf ("\n");
+}
+
+void
+perror_with_name (name)
+ char *name;
+{
+#ifdef VMS
+#include <errno.h>
+ extern noshare int sys_nerr;
+ extern noshare char *sys_errlist[];
+#else
+ extern int errno, sys_nerr;
+ extern char *sys_errlist[];
+#endif
+ char *s;
+
+ if (errno < sys_nerr)
+ s = concat ("", sys_errlist[errno], " for %s");
+ else
+ s = "cannot open %s";
+ error (s, name);
+}
+
+void
+pfatal_with_name (name)
+ char *name;
+{
+ extern int errno, sys_nerr;
+ extern char *sys_errlist[];
+ char *s;
+
+ if (errno < sys_nerr)
+ s = concat ("", sys_errlist[errno], " for %s");
+ else
+ s = "cannot open %s";
+ fatal (s, name);
+}
+
+/* Return a newly-allocated string whose contents concatenate those of
+ S1, S2, S3. */
+
+char *
+concat (s1, s2, s3)
+ char *s1, *s2, *s3;
+{
+ int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
+ char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
+
+ strcpy (result, s1);
+ strcpy (result + len1, s2);
+ strcpy (result + len1 + len2, s3);
+ *(result + len1 + len2 + len3) = 0;
+
+ return result;
+}
+
+/* Like malloc but get fatal error if memory is exhausted. */
+
+char *
+xmalloc (size)
+ unsigned size;
+{
+ char *result = malloc (size);
+ if (!result)
+ fatal ("virtual memory exhausted", 0);
+ return result;
+}
+
+
+char *
+xrealloc (ptr, size)
+ char *ptr;
+ unsigned size;
+{
+ char *result = realloc (ptr, size);
+ if (!result)
+ fatal ("virtual memory exhausted");
+ return result;
+}
+
+#if defined(USG) || defined(VMS)
+void
+bzero (b, length)
+ register char *b;
+ register int length;
+{
+#ifdef VMS
+ short zero = 0;
+ long max_str = 65535;
+
+ while (length > max_str)
+ {
+ (void) LIB$MOVC5 (&zero, &zero, &zero, &max_str, b);
+ length -= max_str;
+ b += max_str;
+ }
+ (void) LIB$MOVC5 (&zero, &zero, &zero, &length, b);
+#else
+ while (length-- > 0)
+ *b++ = 0;
+#endif /* not VMS */
+}
+#endif /* defined(USG) || defined(VMS) */
diff --git a/macros/latex209/contrib/latexinfo/CHANGES b/macros/latex209/contrib/latexinfo/CHANGES
new file mode 100644
index 0000000000..09485033bc
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/CHANGES
@@ -0,0 +1,144 @@
+1.2 First public release - June 2, 1990
+
+1.3 First Patch - June 19, 1990
+
+ Added this CHANGES file.
+ Updated the README file in the manual directory.
+ Deleted nodify-new.el and removed it from the Makefile.
+ Improved the Makefiles.
+ Made some modifications to macsyma.sty to cut down on string usage.
+ Introduced support for the tabular environment and \hline.
+ Introduced support for the table environment with \caption.
+ Figures are now ignored.
+ \input *must* occur at the beginning of a line.
+ Updated scheme-fmt so it won't conflict with texinfo.
+ Renamed the long files to < 14 chars for SysV
+ Made the manual a {book} so it starts chapters on the odd page.
+ Added support for \unnumbered \unnumberedsec etc.
+ Changed the indexes to \unnumbered.
+
+
+1.3.1 Second Patch - June 24, 1990
+ Fixed a blunder that broke the description environment.
+ Changed the manual to tell people to use .login instead .cshrc.
+
+1.3.2 Third Patch - August 25, 1990
+ Fixed bug in synindex
+ Fixed the description environment.
+ Changed the manual to incorporate the proofreading from Nelson Beebe.
+ Made \\ replace \*, although \* is still supported.
+
+1.3.3 Fourth Patch - August 30, 1990
+ Made \\ active even at other places than the end of line.
+
+1.3.4 Fifth Patch
+ Documented nodify.el for converting LaTeX files to LaTeXinfo.
+ Added support for Frenc and German in europe.sty and europe-fmt.el
+ (thanks to schwarze@isa.de).
+
+1.3.5 Sixth Patch
+ If the \?index command and its argument are the only thing on a line,
+ then that line will be deleted in the Info file.
+ Fixed comment-start-skip bug in latexinfomd.el
+ (Thanks to simon@opal.cs.tu-berlin.de).
+ Undeleted the tail end of the manual, which mysteriously
+ disappeared in the last patch. (darrylo@hpnmxx.hp.com)
+
+1.4 Seventh Patch - not released.
+ Added support for the sp command in info files.
+ Deleted some doubled words in the manual. (beebe@math.utah.edu)
+ Corrected the manual description of \code's font.
+ Fixed a bug in latexinfo-format-emph (petri@ibr.cs.tu-bs.de).
+ Looks for latexinfo files in current directory if $LATEXINFO
+ is not set (petri@ibr.cs.tu-bs.de).
+ Made latexinfo.el listen to the environment-variable $TEXINPUTS - for
+ the \input macro - useful if you want to \include files that are not in
+ the directory where your main tex-source-file resides.
+ Added {lisp} environment for Scribe compatibility.
+ Made tabular environment change the non-special status of & and |
+ only within the tabular environment. In other words, & and |
+ print as themselves everywhere except within a tabular environment,
+ where they are used for tabular formatting (geske@ibr.cs.tu-bs.de).
+ Now you can use " > < _ | in nodenames.
+ It is no longer an error to not begin an environment (\begin)
+ at the start of a line. It is still an error to have extraneous
+ text at the end of the line that will be discarded (such as \end).
+ Added \n{} equivalent to the latex \normalsize command.
+ Made \vspace and \vspace* discard the line.
+ Fixed an insidous bug in latexinfo-parse-noarg. It eat all white
+ space after the newline that follows an argumentless tex-command,
+ instead of eating either the newline or the whitespace.
+ Fixed a bug in \rawbackslash that made everything come out \tt.
+ Made Info understand unnumbered, unnumberedsec, unnumberedsubsec etc.
+ Made Info interpret \back <TAB> as \back <SPACE>
+ Added support for \onecolumn and \twocolumn in Info (just ignored).
+ Added support for author/title/date, though it is not documented yet.
+ Added support for \bibliography, though it is not documented yet.
+ Added support for \verb, though it is not documented yet.
+ Added support for \/, though it is not documented yet.
+ Added a TODO file, so that people can see what I am planning,
+ and make suggestions or ask for priorities.
+
+1.5
+ Added support for the following TeXinfo 2 commands:
+ @chapheading @heading @majorheading @subheading @subsubheading
+ @exdent @minus @finalout @result @equiv @error @expansion @point
+ @print @date @author @title @subtitle @flushright @flushleft
+ @footnote @sc @need though it might not be not documented yet.
+ Added support for the @def... commands though it's not documented yet.
+ Moved the @def... commands to an elisp style, in preparation for GLS.
+ Made latexinfo.el give a message when it found a LaTeX command it
+ doesn't understand.
+ Redefined the replace functions to turn off the Mark Set noise.
+ Made the commands that print in italic font do the correction.
+ Changed the syntax table entries of [ and ] to . during forward-sexp.
+ Made tolatexinfo.el up to date with the next TeXinfo2 commands
+ Made tolatexinfo.el insert \protect in the section headings if
+ there are any \ commands to protect.
+ Hacked Emacs 18.57 texindex to understand not to put a \initial{\}
+ if the entry begins with a \. It inserts \back instead.
+ Added latex2dvi to the distribution, to automatically run
+ latexindex and bibtex and latex as required.
+
+
+
+1.6 Added smallverbatim.
+ Made verbatim and smallverbatim imbeddable in list environments.
+ Made the info reader eat the whitespace following a command.
+ Documented the definition commands.
+ Incorporated tabular.sty into latexinfo.tex; no tabular option
+ to the \documentstyle is needed now.
+ Renamed tolatexinfo.el to t2latexinfo.el.
+ Made s2latexinfo.el to convert Scribe files.
+ Made l2latexinfo.el to help convert Latex files.
+ Delete nodify.el from the distribution because of l2latexinfo.el.
+ Created the always refill command. At the moment it only looks
+ for ".\n\n", but I chaang it to search based on the syntax-table.
+ Began translating latexinfo-mde.el latexinfo-upd.el latexinfo-tex.el.
+ Made \begin{verbatim} \begin{smallverbatim} and \input legal
+ other than at beginning of line, iff only whitespace exists between
+ the (bolp) and the command.
+ Fixed \verb so the global substitutions (''->") don't affect it.
+ Added support for paragraphindent and footnotestyle.
+ Updated the doucmentation, based on the TeXinfo 2 manual.
+ Added the verbatimfile and smallverbatimfile commands.
+ Protected the indexers agains null arguments.
+ Edited the manual.
+ Added syncodeindex, documented markboth.
+
+1.7 Fixed LaTeX on region.
+ FIxed smallverbatim.
+ Rewrote elisp.sty to be more like the TeXinfo 2.14 version.
+ Made s2latexinfo not change @ref to \xref. That only works
+ if the labels and section names correspond.
+ Changes the \begin{defxx} format to \defxx, and
+ \end{defxx} format to \enddefxx.
+ Added support for \label and \ref though they are not documented yet.
+ Added \funref \varref and cousins into funref.sty.
+ Renamed elisp/europe-fmt.el to elisp/german-fmt.el, and changed
+ the manual to show that it was really greman.sty that is supported.
+ French really needs a different approach.
+ Isolated always-refill algoritmn in latexinfo-do-refill.
+
+
+
diff --git a/macros/latex209/contrib/latexinfo/COPYING b/macros/latex209/contrib/latexinfo/COPYING
new file mode 100644
index 0000000000..9a17037581
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/COPYING
@@ -0,0 +1,249 @@
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/macros/latex209/contrib/latexinfo/INSTALL b/macros/latex209/contrib/latexinfo/INSTALL
new file mode 100644
index 0000000000..5d8fab69d8
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/INSTALL
@@ -0,0 +1,165 @@
+File: latexinfo2.info Node: Installing LaTeXinfo, Prev: Extending LaTeXinfo, Up: Top, Next: Converting Files to LaTeXinfo
+
+Installing LaTeXinfo
+********************
+
+
+* Menu:
+
+* Compiling LaTeXinfo::
+* Installing the LaTeXinfo Distribution::
+
+
+
+File: latexinfo2.info Node: Compiling LaTeXinfo, Prev: Installing LaTeXinfo, Up: Installing LaTeXinfo, Next: Installing the LaTeXinfo Distribution
+
+Compiling LaTeXinfo
+===================
+
+
+To compile LaTeXinfo:
+
+ 1. Run the shell script `configure'. You will be
+ asked to provide the following:
+
+ BINDIR
+
+ Where to install the executables.
+
+ INFODIR
+
+ Where to install the info files.
+
+ EMACS
+
+ the name of your GNU Emacs.
+
+
+ These must exists, and you must be able to write to these directories.
+ For example,
+
+ Where would you like to install the binaries?
+
+ Please type the full path to your binaries directory:
+ >/usr5/gnu/bin-sparc
+
+ The binaries path was verfied to be [/usr5/gnu/bin-sparc]
+
+ Where are the Gnu Info files located?
+
+ Please type the full path to your info directory:
+ >/usr5/gnu/info
+
+ The Info directory was verfied to be [/usr5/gnu/info]
+
+ Where is your GNU Emacs command:
+
+ Please type the name of your GNU Emacs command:
+ >xemacs
+
+
+ 2. Then you will be asked:
+
+ Would you like to install the elisp and LaTeX files elsewhere,
+ or leave them here, and set an environment variable to point to here?
+
+ Set an environment variable to point to here [y/n]?
+
+
+ If you choose
+ y
+ `configure' will set the environment variable
+ `LATEXINFO' in the `.login' to point to this directory,
+ and you won't need to `make install'.
+
+ n
+ You will be asked about:
+
+ ELISPDIR
+
+ Where to install the compiled Elisp code.
+
+ TEXDIR
+
+ Where to install the style files.
+
+
+ For example,
+
+ Set an environment variable to point to here [y/n]? n
+
+ Where would you like to install GNU Emacs code (elisp)?
+
+ Please type the full path to your elisp directory:
+ >/usr5/gnu/lib/emacs/latexinfo
+
+ The elisp path was verfied to be [/usr5/gnu/lib/emacs/latexinfo]
+
+ Where would you like to install the LaTeX style files?
+
+ Please type the full path to your LaTeX style directory:
+ >/usr5/gnu/lib/tex
+
+ The LaTeX style path was verfied to be [/usr5/gnu/lib/tex]
+
+
+
+ 3. Type `make'.
+ This will make the executables `latexindex', `info',
+ make the manual, and compile the `.el' files. It will also make
+ the files `.emacs' and `.login'.
+
+
+
+You may also have to change the definitions of your LaTeX commands in the
+shell script `manual/latex2dvi' is you are unusual.
+
+
+File: latexinfo2.info Node: Installing the LaTeXinfo Distribution, Prev: Compiling LaTeXinfo, Next: Installing the Style Files
+
+Installing the LaTeXinfo Distribution
+=====================================
+
+
+ 1.
+ If you chose to install the elisp and LaTeX files elsewhere,
+ type `make install' to make the executables,
+ the manual and compile the `.el' files. This will
+
+ `make install.C'
+
+ which will move the executables to `BINDIR'.
+
+ `make install.manual'
+
+ which will move a copy of the files `manual/latexinfo.info*' to the
+ info directory of the GNU Emacs distribution specified by
+ `INFODIR', and a copy of the sample file to the LaTeX styles
+ directory specified by `TEXDIR'.
+
+ `make install.elisp'
+
+ which will move a copy of the files `styles/*.elc' to the
+ the GNU Emacs lisp directory specified by `ELISPDIR'.
+
+ `make install.styles'
+
+ which will move a copy of the files `styles/*.sty' to the
+ the LaTeX styles directory specified by `TEXDIR'.
+
+
+ 2. Edit the `dir' file in `INFO' directory to include lines like
+
+ * LaTeXinfo: (latexinfo2.info). With one source file, make either a
+ printed manual using LaTeX or an Info file.
+
+ 3.
+ Include a copy of the `.emacs' file in your `~/.emacs'.
+
+ 4.
+ Include a copy of the `.login' file in your `~/.login'.
+
+ 5. Print a copy of the `manual/latexinfo.dvi' file and
+ enjoy.
+
+
diff --git a/macros/latex209/contrib/latexinfo/Makefile b/macros/latex209/contrib/latexinfo/Makefile
new file mode 100644
index 0000000000..e975256e2b
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/Makefile
@@ -0,0 +1,112 @@
+########## These are overridden by the contents of config.status
+# Where to install the executables
+BINDIR=${GNUBINDIR}
+
+# Where to install the info files
+INFODIR=${GNUINFODIR}
+
+# Where to install the Elisp code
+ELISPDIR=${GNUSHAREDIR}/emacs/latexinfo
+
+# Where to install the style files and example.
+TEXDIR=${GNUSHAREDIR}/tex
+
+# The name of your DVI to PS filter
+DVIPS=dvips
+
+# The name of your GNU Emacs
+EMACS=xemacs
+
+INSTALL = install -c -m 755
+INSTALLDATA = install -c -m 644
+TAR = tar cvfh
+
+########## End of user configurable options ################
+
+VERSION=`grep latexinfoversion{ styles/latexinfo.sty | sed -e 's/.*{//' -e 's/}.*//'`
+PROGRAM=latexinfo
+MANUAL=latexinfo2
+ELISP=${LATEXINFO}/elisp
+DOC=${LATEXINFO}/manual
+
+########## The above are overridden by the contents of config.status
+
+include config.status
+
+BINS = manual/latex2dvi
+
+UTILS = .login .latexinfo Makefile README COPYING CHANGES TODO INSTALL
+
+STYS = styles/latexinfo.sty \
+ styles/clisp.sty \
+ styles/elisp.sty \
+ styles/german.sty \
+ styles/format.sty \
+ styles/fvpindex.sty \
+ styles/funref.sty \
+ styles/Makefile
+
+ELS = elisp/Makefile \
+ elisp/$(PROGRAM).el \
+ elisp/latexnfo-mde.el \
+ elisp/latexnfo-tex.el \
+ elisp/latexnfo-upd.el \
+ elisp/clisp-fmt.el \
+ elisp/elisp-fmt.el \
+ elisp/fvpindex-fmt.el \
+ elisp/funref-fmt.el \
+ elisp/german-fmt.el \
+ elisp/t2latexinfo.el \
+ elisp/s2latexinfo.el \
+ elisp/l2latexinfo.el \
+ elisp/makeinfo.el
+
+MANS= manual/Makefile \
+ manual/$(MANUAL).bib \
+ manual/$(MANUAL).bbl \
+ manual/$(MANUAL).tex \
+ manual/lnfo-sample.tex
+
+SOURCES = C/info.c C/latexindex.c C/getopt.c C/getopt1.c
+HEADERS = C/getopt.h
+SUPPORT = C/Makefile.in configure
+
+
+FLAGS = LATEXINFO=$(LATEXINFO) BINDIR=$(BINDIR) ELISPDIR=$(ELISPDIR) \
+ MANUAL=$(MANUAL) ELISP=$(ELISP) DOC=$(DOC) PROGRAM=$(PROGRAM) \
+ INFODIR=$(INFODIR) TEXDIR=$(TEXDIR) EMACS=$(EMACS) DVIPS=$(DVIPS) \
+ INSTALL="$(INSTALL)" INSTALLDATA="$(INSTALLDATA)"
+
+
+all: C elisp manual
+
+C::
+ (cd C; $(MAKE) $(FLAGS))
+
+elisp::
+ (cd elisp; $(MAKE) $(FLAGS))
+
+manual::
+ (cd manual; $(MAKE) $(FLAGS))
+
+install: install.C install.manual install.elisp install.styles
+
+install.C::
+ (cd C; $(MAKE) install $(FLAGS) bindir=$(BINDIR) infodir=$(INFODIR) )
+
+install.manual::
+ (cd manual; $(MAKE) install $(FLAGS))
+
+install.elisp::
+ (cd elisp; $(MAKE) install $(FLAGS))
+
+install.styles::
+ (cd styles; $(MAKE) install $(FLAGS))
+
+clean:
+
+THINGS_TO_TAR = $(SOURCES) $(HEADERS) $(SUPPORT) \
+ $(MANS) $(STYS) $(ELS) $(UTILS) $(BINS)
+
+tar::
+ $(TAR) $(PROGRAM)-$(VERSION).tar $(THINGS_TO_TAR)
diff --git a/macros/latex209/contrib/latexinfo/README b/macros/latex209/contrib/latexinfo/README
new file mode 100644
index 0000000000..80bd38cc2f
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/README
@@ -0,0 +1,41 @@
+This is version 1.7 of the LaTeXinfo program, and is for Version 18
+of GNU Emacs.
+
+Documentation for GNU utilities and libraries is usually written in a
+format called "TeXinfo". This document describes an enhancement
+of this format which can be used with LaTeX instead of TeX.
+
+LaTeXinfo offers a number of advantages over TeXinfo:
+
+ 1. The point size or layout style of a document can be changed easily,
+ using the `documentstyle' (article, report, book, twoside, ...).
+
+ 2. LaTeX has better error checking than TeX files, especially in
+ begin/end environments. In addition, the LaTeX error messages are more
+ informative. This makes it considerably easier to make extensions and
+ enhancements (read hacks).
+
+ 3. LaTeX delimits its arguments with braces, so it's easier to tell where
+ a LaTeXinfo command starts, and where it ends. TeXinfo has to stand on
+ its head to avoid using TeX's braces.
+
+ 4. Any LaTeX commands not understood by the on-line manual generator
+ (`latexinfo.el') are simply ignored. This means that you are free to add
+ a considerable number of LaTeX commands to make you manual look pretty,
+ as long as you don't care that there will be no action taken by the
+ Info formatting program.
+
+ 5. It is easy to add your own extensions to the on-line manual generator
+ by making GNU Emacs handlers for your LaTeX extensions. This is
+ the Emacs counterpart to the `documentstyle' options. LaTeXinfo looks
+ in a specified directory for GNU Elisp code that corresponds to each
+ style file. This makes it easy to modularize your style files.
+
+ 6. LaTeX has many advantages over TeX, such as being able to easily
+ incorporate the BibTeX bibliography formatting program.
+
+See the file INSTALL for installing LaTeXinfo.
+
+Please report any errors or suggestions to mike@apl.ists.ca
+
+Mike Clarkson
diff --git a/macros/latex209/contrib/latexinfo/TODO b/macros/latex209/contrib/latexinfo/TODO
new file mode 100644
index 0000000000..32fda30463
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/TODO
@@ -0,0 +1,16 @@
+List of features to be added for LaTeXinfo 2.0:
+ (send suggestions to mike@apl.ists.ca)
+
+Add psfig support under X windows for ghostscript.
+
+Add support for path.sty.
+
+Document the following TeXinfo 2 commands:
+"@chapheading" "@heading" "@majorheading" "@subheading" "@subsubheading"
+"@minus" "@need" "@ref"
+
+Implement and document the following TeXinfo 2 commands: "@top"
+"@syncodeindex" "@set" "clear" "ifset" "ifclear"
+
+Change the elisp definitions of \* and \\ to be active in info.
+
diff --git a/macros/latex209/contrib/latexinfo/configure b/macros/latex209/contrib/latexinfo/configure
new file mode 100644
index 0000000000..234745362f
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/configure
@@ -0,0 +1,357 @@
+:
+# Guess values for system-dependant variables and create `Makefile'.
+# Copyright (C) 1991 Free Software Foundation, Inc.
+# Viscously hacked my mike@apl.ists.ca
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Usage: configure [+srcdir=DIR] [+host=HOST] [+gas] [+nfp] [TARGET]
+# All args except +srcdir=DIR are ignored.
+
+trap 'rm -f conftest conftest.c; exit 1' 1 3 15
+
+set +u # Make sure unset variables are ok.
+
+# Make sure we don't find the System V /etc/install.
+PATH=`echo $PATH|sed '
+s,^/etc:,,
+s,:/etc$,,
+s,:/etc:,:,g'`
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+unique_file=.latexinfo
+
+for arg in $*; do
+ # Handle +srcdir with a space before the argument.
+ if [ x$next_srcdir = xyes ]; then srcdir=$arg; next_srcdir=
+ # Handle +host with a space before the argument.
+ elif [ x$next_host = xyes ]; then next_host=
+ else
+ case $arg in
+ -srcdir=* | +srcdir=* | +srcdi=* | +srcd=* | +src=* | +sr=* | +s=*)
+ srcdir=`echo $arg | sed 's/[+-]s[a-z]*=//'` ;;
+ -srcdir | +srcdir | +srcdi | +srcd | +src | +sr | +s)
+ next_srcdir=yes ;;
+ -host=* | +host=* | +hos=* | +ho=* | +h=*) ;;
+ -host | +host | +hos | +ho | +h)
+ next_host=yes ;;
+ -gas | +gas | +ga | +g) ;;
+ -nfp | +nfp | +nf | +n) ;;
+ *) ;;
+ esac
+ fi
+done
+
+vpsub='s@\$\([-./a-zA-Z0-9]*\)<@\1@g'
+# Find the source files, if location was not specified.
+if [ x$srcdir = x ]; then
+ srcdirdefaulted=yes; srcdir=.
+ if [ ! -r $unique_file ]; then srcdir=..; fi
+fi
+if [ $srcdir != . ]; then
+ VPATH='VPATH = $(srcdir)'
+ vpsub='s@\$\([-./a-zA-Z0-9]*\)<@\$<@g'
+fi
+
+if [ ! -r $srcdir/$unique_file ]; then
+ if [ x$srcdirdefaulted = xyes ]; then
+ echo "$0: Can not find sources in \`.' or \`..'." 1>&2
+ else
+ echo "$0: Can not find sources in \`${srcdir}'." 1>&2
+ fi
+ exit 1
+fi
+
+if test "$RANDOM" = "$RANDOM"; then
+ # Plain old Bourne shell.
+ echo checking for gcc
+ test -z "$CC" -a -n "`gcc 2>&1`" && CC="gcc -O"
+
+ echo checking for install
+ if test -z "$INSTALL" -a -n "`install 2>&1`"; then
+ INSTALL="install -c -m 755"
+ INSTALLDATA="install -c -m 644"
+ fi
+else
+ # ksh, bash or zsh. ksh and zsh write "command not found" to stderr.
+ echo checking for gcc
+ test -z "$CC" && type gcc && CC="gcc -O"
+
+ echo checking for install
+ if test -z "$INSTALL" && type install; then
+ INSTALL="install -c -m 755"
+ INSTALLDATA="install -c -m 644"
+ fi
+fi
+
+echo "Where would you like to install the binaries?"
+echo ""
+peachy="n"
+while [ "$peachy" = n ]; do
+echo " Please type the full path to your binaries directory:"
+echo -n " >"
+read FOUNDPATH
+ if [ -d $FOUNDPATH ]; then
+ echo ""
+ echo " The binaries path was verfied to be [$FOUNDPATH]"
+ echo ""
+ peachy="y"
+ else
+ echo ""
+ echo " Verification of [$FOUNDPATH] failed. Please try again."
+ echo ""
+ fi
+ done #peachy
+BINDIR=${FOUNDPATH-/usr/local/bin}
+
+echo "Where are the Gnu Info files located?"
+echo ""
+peachy="n"
+while [ "$peachy" = n ]; do
+echo " Please type the full path to your info directory:"
+echo -n " >"
+read FOUNDPATH
+ if [ -d $FOUNDPATH ]; then
+ echo ""
+ echo " The Info directory was verfied to be [$FOUNDPATH]"
+ echo ""
+ peachy="y"
+ else
+ echo ""
+ echo " Verification of [$FOUNDPATH] failed. Please try again."
+ echo ""
+ fi
+ done #peachy
+INFODIR=${FOUNDPATH-/usr/local/info}
+
+echo "Where is your GNU Emacs command:"
+echo ""
+echo " Please type the name of your GNU Emacs command:"
+echo -n " >"
+read FOUND
+EMACS="$FOUND"
+EMACS=${EMACS-/usr/local/man/man1}
+
+CC=${CC-cc}
+INSTALL=${INSTALL-cp}
+INSTALLDATA=${INSTALLDATA-cp}
+INCLUDEDIR=${INCLUDEDIR-/usr/include}
+
+if test -z "$PWD" ; then
+ PWD=`pwd`
+fi
+rm -f .login .emacs
+cat << 'EOF'
+
+Would you like to install the elisp and LaTeX files elsewhere,
+or leave them here, and set an environment variable to point to here?
+
+EOF
+echo -n 'Set an environment variable to point to here [y/n]? '
+read HERE
+if [ "$HERE" = "y" ] ; then
+ cat >.emacs << 'EOF'
+;; Modify the following line to be the name of this file, and
+;; put it in your ~/.emacs (without the semi-colons).
+;; (load-file "/usr2/ai/nesc/.emacs")
+
+;;; LaTeXinfo
+
+(setq load-path
+ (cons (setq latexinfo-formats-directory
+ (expand-file-name (concat (getenv "LATEXINFO") "/elisp")))
+ load-path))
+
+EOF
+ cat .latexinfo >> .emacs
+ cat >.login << EOF
+#!/bin/csh
+
+# LaTeXinfo
+setenv LATEXINFO $PWD
+EOF
+ cat >>.login << 'EOF'
+
+# Add the format files to the list of directories that LaTeX searches.
+if ( $?TEXINPUTS ) then
+ setenv TEXINPUTS "$TEXINPUTS"':'"$LATEXINFO/styles"
+else
+ setenv TEXINPUTS ".:$LATEXINFO/styles"
+endif
+EOF
+
+else
+ echo ""
+ echo "Where would you like to install GNU Emacs code (elisp)?"
+ echo ""
+ peachy="n"
+ while [ "$peachy" = n ]; do
+ echo " Please type the full path to your elisp directory:"
+ echo -n " >"
+ read FOUNDPATH
+ if [ -d $FOUNDPATH ]; then
+ echo ""
+ echo " The elisp path was verfied to be [$FOUNDPATH]"
+ echo ""
+ peachy="y"
+ else
+ echo ""
+ echo " Verification of [$FOUNDPATH] failed. Please try again."
+ echo ""
+ fi
+ done #peachy
+ ELISPDIR=${FOUNDPATH-/usr/local/emacs/lisp}
+
+ echo "Where would you like to install the LaTeX style files?"
+ echo ""
+ peachy="n"
+ while [ "$peachy" = n ]; do
+ echo " Please type the full path to your LaTeX style directory:"
+ echo -n " >"
+ read FOUNDPATH
+ if [ -d $FOUNDPATH ]; then
+ echo ""
+ echo " The LaTeX style path was verfied to be [$FOUNDPATH]"
+ echo ""
+ peachy="y"
+ else
+ echo ""
+ echo " Verification of [$FOUNDPATH] failed. Please try again."
+ echo ""
+ fi
+ done #peachy
+ TEXDIR=${FOUNDPATH-/usr/local/tex/inputs}
+
+ cat >.emacs << EOF
+;; Modify the following line to be the name of this file, and
+;; put it in your ~/.emacs (without the semi-colons).
+;; (load-file "/usr2/ai/nesc/.emacs")
+
+;;; LaTeXinfo
+(setq load-path
+ (cons (setq latexinfo-formats-directory
+ (expand-file-name "$ELISPDIR"))
+ load-path))
+
+EOF
+ cat .latexinfo >> .emacs
+ cat >>.login << EOF
+
+# Add the format files to the list of directories that LaTeX searches.
+if ( \$?TEXINPUTS ) then
+ setenv TEXINPUTS "\$TEXINPUTS"':'"$TEXDIR"
+else
+ setenv TEXINPUTS ".:$TEXDIR"
+endif
+EOF
+
+fi
+
+# Set LATEXINFO for the install
+LATEXINFO=$PWD
+
+rm -f conftest conftest.c
+compile="$CC $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1"
+
+# Check for various header files.
+
+echo checking for ANSI C header files
+echo "#include <stdlib.h>
+#include <string.h>
+main () { exit(0); strerror(0); }" > conftest.c
+eval $compile
+if test -s conftest && ./conftest 2>/dev/null; then
+ DEFS="$DEFS -DSTDC_HEADERS"
+fi
+rm -f conftest conftest.c
+
+echo checking for BSD string and memory functions
+echo "#include <strings.h>
+main () { exit(0); rindex(0, 0); bzero(0, 0); }" > conftest.c
+eval $compile
+if test -s conftest && ./conftest 2>/dev/null; then :
+ else DEFS="$DEFS -DUSG"
+fi
+rm -f conftest conftest.c
+
+# Check other misc. things.
+
+echo checking how to get alloca
+echo '
+#ifdef __GNUC__
+#define alloca __builtin_alloca
+#else
+#ifdef sparc
+#include <alloca.h>
+#else
+#ifdef _AIX
+ #pragma alloca
+#else
+char *alloca ();
+#endif
+#endif
+#endif
+main() { char *p = (char *) alloca(1); exit(0); }' > conftest.c
+eval $compile
+if test -s conftest && ./conftest 2>/dev/null; then :
+else
+ rm -f conftest conftest.c
+ echo 'char *alloca();
+main() { char *p = alloca(1); exit(0); }' > conftest.c
+ eval $compile -lPW
+ if test -s conftest && ./conftest 2>/dev/null; then LIBS="$LIBS -lPW"
+ elif test -d /usr/ucblib; then LIBS="$LIBS -L/usr/ucblib -lucb"
+ else ALLOCA=alloca.o
+ fi
+fi
+rm -f conftest conftest.c
+
+trap "rm -f config.status $srcdir/C/Makefile; exit 1" 1 3 15
+
+echo "CC=$CC
+INSTALL=$INSTALL
+INSTALLDATA=$INSTALLDATA
+DEFS=$DEFS
+LIBS=$LIBS
+BINDIR=$BINDIR
+INFODIR=$INFODIR
+ELISPDIR=$ELISPDIR
+TEXDIR=$TEXDIR
+EMACS=$EMACS
+LATEXINFO=$PWD
+ALLOCA=$ALLOCA" > config.status
+echo '# Generated automatically from Makefile.in by configure.' > $srcdir/C/Makefile
+sed -e "
+$vpsub
+s,@srcdir@,$srcdir,
+s,@VPATH@,$VPATH,
+s,@CC@,$CC,
+s,@INSTALL@,$INSTALL,
+s,@INSTALLDATA@,$INSTALLDATA,
+s,@DEFS@,$DEFS,
+s,@LIBS@,$LIBS,
+s,@BINDIR@,$BINDIR,
+s,@MANDIR@,$MANDIR,
+s,@INFODIR@,$INFODIR,
+s,@ALLOCA@,$ALLOCA,
+" $srcdir/C/Makefile.in >> $srcdir/C/Makefile
+
+if [ "$HERE" = "y" ] ; then
+ echo "Now type make"
+else
+ echo "Now type make, then"
+ echo " make install"
+fi
diff --git a/macros/latex209/contrib/latexinfo/dot.latexinfo b/macros/latex209/contrib/latexinfo/dot.latexinfo
new file mode 100644
index 0000000000..183ebb8c85
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/dot.latexinfo
@@ -0,0 +1,105 @@
+(autoload 'latexinfo-format-region
+ "latexinfo"
+ "Convert the current region of the Latexinfo file to Info format.
+This lets you see what that part of the file will look like in Info.
+The command is bound to \\[latexinfo-format-region]. The text that is
+converted to Info is stored in a temporary buffer."
+ t nil)
+
+(autoload 'latexinfo-format-buffer
+ "latexinfo"
+ "Process the current buffer as latexinfo code, into an Info file.
+The Info file output is generated in a buffer visiting the Info file
+names specified in the \\setfilename command.
+
+Non-nil argument (prefix, if interactive) means don't make tag table
+and don't split the file if large. You can use Info-tagify and
+Info-split to do these manually."
+ t nil)
+
+(autoload 'latexinfo-latex-buffer
+ "latexnfo-tex"
+ "Run LaTeX on current buffer.
+After running LaTeX the first time, you may have to run \\[latexinfo-latexindex]
+and then \\[latexinfo-latex-buffer] again."
+ t nil)
+
+(autoload 'latexinfo-latexindex
+ "latexnfo-tex"
+ "Run latexindex on unsorted index files.
+The index files are made by \\[latexinfo-latex-region] or \\[latexinfo-latex-buffer].
+Runs the shell command defined by latexinfo-latexindex-command."
+ t nil)
+
+(autoload 'latexinfo-make-menu
+ "latexnfo-upd"
+ "Without any prefix argument, make or update a menu.
+Make the menu for the section enclosing the node found following point.
+
+Non-nil argument (prefix, if interactive) means make or update menus
+for nodes within or part of the marked region.
+
+Whenever a menu exists, and is being updated, the descriptions that
+are associated with node names in the pre-existing menu are
+incorporated into the new menu. Otherwise, the nodes' section titles
+are inserted as descriptions."
+ t nil)
+
+(autoload 'latexinfo-update-node
+ "latexnfo-upd"
+ "Without any prefix argument, update the node in which point is located.
+Non-nil argument (prefix, if interactive) means update the nodes in the
+marked region.
+
+The functions for creating or updating nodes and menus, and their
+keybindings, are:
+
+ latexinfo-update-node (&optional region-p) \\[latexinfo-update-node]
+ latexinfo-every-node-update () \\[latexinfo-every-node-update]
+ latexinfo-sequential-node-update (&optional region-p)
+
+ latexinfo-make-menu (&optional region-p) \\[latexinfo-make-menu]
+ latexinfo-all-menus-update () \\[latexinfo-all-menus-update]
+ latexinfo-master-menu ()
+
+ latexinfo-indent-menu-description (column &optional region-p)
+
+The `latexinfo-column-for-description' variable specifies the column to
+which menu descriptions are indented. Its default value is 24."
+ t nil)
+
+(autoload 'latexinfo-every-node-update
+ "latexnfo-upd"
+ "Update every node in a Latexinfo file."
+ t nil)
+
+(autoload 'latexinfo-all-menus-update
+ "latexnfo-upd"
+ "Update every regular menu in a Latexinfo file.
+Remove pre-existing master menu, if there is one.
+
+If called with a non-nil argument, this function first updates all the
+nodes in the buffer before updating the menus."
+ t nil)
+
+(autoload 'latexinfo-mode "latexnfo-mde"
+ "An editing for LaTeXinfo files" t)
+
+(autoload 'tex-to-latexinfo "t2latexinfo"
+ "Convert a buffer from TeXinfo to LaTeXinfo" t)
+
+(autoload 'scribe-to-latexinfo "s2latexinfo"
+ "Convert a buffer from Scribe to LaTeXinfo" t)
+
+(autoload 'latex-to-latexinfo "l2latexinfo"
+ "Convert a buffer from LaTeX to LaTeXinfo" t)
+
+(defvar latexinfo-section-types-regexp
+ "^\\\\\\(chapter\\|section\\|sub\\|unnum\\)"
+ "Regexp matching chapter, section, other headings (but not the top node).")
+
+;;(autoload 'get-latexinfo-node "get-node"
+;; "Get help on a LaTeXinfo topic" t)
+
+;;(define-key help-map "g" 'get-latexinfo-node)
+
diff --git a/macros/latex209/contrib/latexinfo/elisp/Makefile b/macros/latex209/contrib/latexinfo/elisp/Makefile
new file mode 100644
index 0000000000..672d8de703
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/Makefile
@@ -0,0 +1,45 @@
+# This file depends on the environment variable LATEXINFO
+# being already set.
+
+# The name of your GNU Emacs
+EMACS=xemacs
+
+# The name of your directory to install the compiled elisp files
+# We have an environment variable set which points to the Gnu binary direct.
+ELISPDIR=${GNUSHAREDIR}/emacs/latexinfo
+
+# Where to install the info files
+INFODIR=${GNUINFODIR}
+
+INSTALL = install -c -m 755
+INSTALLDATA = install -c -m 644
+
+########## End of user configurable options ################
+# The name of the file
+MANUAL=latexinfo2
+
+PROGRAM=latexinfo2
+ELISP=${LATEXINFO}/elisp
+DOC=${LATEXINFO}/manual
+
+########## The above are overridden by the contents of ../config.status
+
+include ../config.status
+
+all: $(DOC)/$(MANUAL).info
+
+$(DOC)/$(MANUAL).info: $(DOC)/$(MANUAL).tex $(ELISP)/$(PROGRAM).el
+ rm -f make.el
+ sed -e "s+MANUAL+$(DOC)/$(MANUAL)+" \
+ -e "s+LATEXINFO+$(LATEXINFO)+" \
+ -e "s+ELISP+$(ELISP)+" \
+ -e "s+PROGRAM+$(ELISP)/$(PROGRAM)+" makeinfo.el > make.el
+ $(EMACS) -batch -q -l $(ELISP)/make.el
+
+install:: all
+ -mkdir $(ELISPDIR)
+ $(INSTALLDATA) *.elc $(ELISPDIR)
+
+clean:
+ rm -f *.elc *~ #~
+
diff --git a/macros/latex209/contrib/latexinfo/elisp/clisp-fmt.el b/macros/latex209/contrib/latexinfo/elisp/clisp-fmt.el
new file mode 100644
index 0000000000..3323cfd73e
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/clisp-fmt.el
@@ -0,0 +1,141 @@
+(load "elisp-fmt")
+
+(put 'nil 'latexinfo-format 'latexinfo-format-nil)
+(defun latexinfo-format-nil ()
+ (latexinfo-parse-noarg)
+ (insert "nil"))
+
+(put 'T 'latexinfo-format 'latexinfo-format-true)
+(put 'TRUE 'latexinfo-format 'latexinfo-format-true)
+(put 'true 'latexinfo-format 'latexinfo-format-true)
+(defun latexinfo-format-true ()
+ (latexinfo-parse-noarg)
+ (insert "true"))
+
+(put 'FALSE 'latexinfo-format 'latexinfo-format-false)
+(put 'F 'latexinfo-format 'latexinfo-format-false)
+(put 'false 'latexinfo-format 'latexinfo-format-false)
+(defun latexinfo-format-false ()
+ (latexinfo-parse-noarg)
+ (insert "false"))
+
+(put 'empty 'latexinfo-format 'latexinfo-format-empty)
+(defun latexinfo-format-empty ()
+ (latexinfo-parse-noarg)
+ (insert "()"))
+
+(put '&key 'latexinfo-format 'latexinfo-format-&key)
+(defun latexinfo-format-&key ()
+ (latexinfo-parse-noarg)
+ (insert "&key"))
+
+(put '&optional 'latexinfo-format 'latexinfo-format-optional)
+(defun latexinfo-format-optional ()
+ (latexinfo-parse-noarg)
+ (insert "&optional"))
+
+(put '&rest 'latexinfo-format 'latexinfo-format-&rest)
+(defun latexinfo-format-&rest ()
+ (latexinfo-parse-noarg)
+ (insert "&rest"))
+
+(put 'defconst 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defconstx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+
+(put 'defconst 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(put 'defconstx 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+
+(put 'defconst 'latexinfo-format 'latexinfo-format-defun)
+(put 'defconstx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'enddefconst 'latexinfo-format 'latexinfo-end-defun)
+(put 'defconst 'latexinfo-defun-type '('defun-type "Constant"))
+(put 'defconstx 'latexinfo-defun-type '('defun-type "Constant"))
+(put 'defconst 'latexinfo-defun-index 'latexinfo-vindex)
+(put 'defconstx 'latexinfo-defun-index 'latexinfo-vindex)
+
+
+(defun latexinfo-format-deffn (parsed-args)
+ ;; Generalized function-like, variable-like, or generic data-type entity:
+ ;; \deffn category name args...
+ ;; In Info, `Category: name ARGS'
+ ;; \deftp category name attributes...
+ ;; `category name attributes...' Note: \deftp args in lower case.
+ (let ((category (car parsed-args))
+ (name (car (cdr parsed-args)))
+ (args (cdr (cdr parsed-args))))
+ (insert " -- " category ": " name)
+ (while args
+ (insert " "
+ (car args)) ; dont upcase arguments - mike
+ (setq args (cdr args)))))
+
+(defun latexinfo-format-specialized-defun (parsed-args)
+ ;; Specialized function-like or variable-like entity:
+ ;; \defun name args In Info, `Function: Name ARGS'
+ ;; \defmac name args In Info, `Macro: Name ARGS'
+ ;; \defvar name In Info, `Variable: Name'
+ ;; Use cdr of command-type to determine category:
+ (let ((category (car (cdr command-type)))
+ (name (car parsed-args))
+ (args (cdr parsed-args)))
+ (insert " -- " category ": " name)
+ (while args
+ (insert " "
+ (car args)
+ "\n")
+ (setq args (cdr args)))))
+
+(put 'mopt 'latexinfo-format 'latexinfo-format-mopt)
+(defun latexinfo-format-mopt ()
+ (insert "[" (latexinfo-parse-arg-discard) "]")
+ (goto-char latexinfo-command-start))
+
+(put 'mchoice 'latexinfo-format 'latexinfo-format-mchoice)
+(defun latexinfo-format-mchoice ()
+ (insert "[[" (latexinfo-parse-arg-discard) "]]")
+ (goto-char latexinfo-command-start))
+
+(put 'mstar 'latexinfo-format 'latexinfo-format-mstar)
+(defun latexinfo-format-mstar ()
+ (insert "{" (latexinfo-parse-arg-discard) "}*")
+ (goto-char latexinfo-command-start))
+
+(put 'mplus 'latexinfo-format 'latexinfo-format-mplus)
+(defun latexinfo-format-mplus ()
+ (insert "{" (latexinfo-parse-arg-discard) "}+")
+ (goto-char latexinfo-command-start))
+
+(put 'mgroup 'latexinfo-format 'latexinfo-format-mgroup)
+(defun latexinfo-format-mgroup ()
+ (insert "{" (latexinfo-parse-arg-discard) "}")
+ (goto-char latexinfo-command-start))
+
+(put 'mor 'latexinfo-format 'latexinfo-format-mor)
+(defun latexinfo-format-mor ()
+ (latexinfo-parse-noarg)
+ (insert "|"))
+
+(put 'mind 'latexinfo-format 'latexinfo-format-mind)
+(defun latexinfo-format-mind ()
+ (insert "v " (latexinfo-parse-arg-discard) )
+ (goto-char latexinfo-command-start))
+
+;; Number of arguments
+(put 'deffn 'latexinfo-numargs 3)
+(put 'deffnx 'latexinfo-numargs 3)
+(put 'defun 'latexinfo-numargs 2)
+(put 'defunx 'latexinfo-numargs 2)
+(put 'defmac 'latexinfo-numargs 2)
+(put 'defmacx 'latexinfo-numargs 2)
+(put 'defspec 'latexinfo-numargs 2)
+(put 'defspecx 'latexinfo-numargs 2)
+(put 'defvr 'latexinfo-numargs 2)
+(put 'defvrx 'latexinfo-numargs 2)
+(put 'defvar 'latexinfo-numargs 1)
+(put 'defvarx 'latexinfo-numargs 1)
+(put 'defconst 'latexinfo-numargs 1)
+(put 'defconstx 'latexinfo-numargs 1)
+
+(provide 'clisp-fmt)
diff --git a/macros/latex209/contrib/latexinfo/elisp/elisp-fmt.el b/macros/latex209/contrib/latexinfo/elisp/elisp-fmt.el
new file mode 100644
index 0000000000..53cc4f7477
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/elisp-fmt.el
@@ -0,0 +1,712 @@
+;;; Definition formatting: \deffn, \defun, etc
+
+;; What definition formatting produces:
+;;
+;; \deffn category name args...
+;; In Info, `Category: name ARGS'
+;; In index: name: node. line#.
+;;
+;; \defvr category name
+;; In Info, `Category: name'
+;; In index: name: node. line#.
+;;
+;; \deftp category name attributes...
+;; `category name attributes...' Note: \deftp args in lower case.
+;; In index: name: node. line#.
+;;
+;; Specialized function-like or variable-like entity:
+;;
+;; \defun, \defmac, \defspec, \defvar, \defopt
+;;
+;; \defun name args In Info, `Function: name ARGS'
+;; \defmac name args In Info, `Macro: name ARGS'
+;; \defvar name In Info, `Variable: name'
+;; etc.
+;; In index: name: node. line#.
+;;
+;; Generalized typed-function-like or typed-variable-like entity:
+;; \deftypefn category data-type name args...
+;; In Info, `Category: data-type name args...'
+;; \deftypevr category data-type name
+;; In Info, `Category: data-type name'
+;; In index: name: node. line#.
+;;
+;; Specialized typed-function-like or typed-variable-like entity:
+;; \deftypefun data-type name args...
+;; In Info, `Function: data-type name ARGS'
+;; In index: name: node. line#.
+;;
+;; \deftypevar data-type name
+;; In Info, `Variable: data-type name'
+;; In index: name: node. line#. but include args after name!?
+;;
+;; Generalized object oriented entity:
+;; \defop category class name args...
+;; In Info, `Category on class: name ARG'
+;; In index: name on class: node. line#.
+;;
+;; \defcv category class name
+;; In Info, `Category of class: name'
+;; In index: name of class: node. line#.
+;;
+;; Specialized object oriented entity:
+;; \defmethod class name args...
+;; In Info, `Method on class: name ARGS'
+;; In index: name on class: node. line#.
+;;
+;; \defivar class name
+;; In Info, `Instance variable of class: name'
+;; In index: name of class: node. line#.
+
+
+;;; The definition formatting functions
+
+(defun latexinfo-format-defun ()
+ (latexinfo-push-stack 'defun nil)
+ (setq fill-column (- fill-column 5))
+ (latexinfo-format-defun-1 t))
+
+(defun latexinfo-end-defun ()
+ (setq fill-column (+ fill-column 5))
+ (latexinfo-discard-command)
+ (let ((start (nth 1 (latexinfo-pop-stack 'defun))))
+ (latexinfo-do-itemize start)
+ ;; Delete extra newline inserted after header.
+ (save-excursion
+ (goto-char start)
+ (delete-char -1))))
+
+(defun latexinfo-format-defunx ()
+ (latexinfo-format-defun-1 nil))
+
+(defun latexinfo-format-defun-1 (first-p)
+ (let ((parse-args (latexinfo-format-parse-defun-args))
+ (command-type (get latexinfo-command-name 'latexinfo-defun-type)))
+ (latexinfo-discard-command)
+ ;; Delete extra newline inserted after previous header line.
+ (if (not first-p)
+ (delete-char -2))
+ (funcall
+ (get latexinfo-command-name 'latexinfo-deffn-formatting-property) parse-args)
+ ;; Insert extra newline so that paragraph filling does not mess
+ ;; with header line.
+ (insert "\n\n")
+ (rplaca (cdr (cdr (car latexinfo-stack))) (point))
+ (funcall
+ (get latexinfo-command-name 'latexinfo-defun-indexing-property) parse-args)))
+
+
+;;; Formatting the first line of a definition
+
+(defun latexinfo-format-parse-defun-args ()
+ (goto-char latexinfo-command-end)
+ (let ((start (point))
+ (nargs
+ (get latexinfo-command-name 'latexinfo-numargs)))
+ (if (not (integerp nargs))
+ (error "Unknown number of arguments to %s: %s"
+ latexinfo-command-name nargs))
+ (forward-list 1) ; required arg
+ (if (looking-at "[\\[]") ; optional arg
+ (delete-region (point)
+ (save-excursion
+ (forward-sexp 1) (point))))
+ (setq nargs (1- nargs))
+ (while (> nargs 0)
+ (skip-chars-forward " \t\n")
+ (if (looking-at "{") ; required arg
+ (forward-list 1)
+ (error "Argument %s missing from function" nargs))
+ (setq nargs (1- nargs)))
+ (setq latexinfo-command-end (point))
+ (let ((marker (move-marker (make-marker) latexinfo-command-end)))
+ (latexinfo-format-expand-region start (point))
+ (setq latexinfo-command-end (marker-position marker))
+ (move-marker marker nil))
+ (goto-char start)
+ (let ((args '())
+ beg end)
+ (skip-chars-forward " \t\n")
+ (while (< (point) latexinfo-command-end)
+ (cond ((looking-at "[{[]")
+ (setq beg (1+ (point)))
+ (forward-list 1)
+ (setq end (1- (point))))
+ (t
+ (setq beg (point))
+ (re-search-forward "[\n ]")
+ (forward-char -1)
+ (setq end (point))))
+ (if (> end (1+ beg))
+ (setq args
+ (cons (buffer-substring beg end) args)))
+ (skip-chars-forward " \t\n"))
+ (nreverse args))))
+
+
+;; \deffn, \defvr, \deftp
+(put 'deffn 'latexinfo-deffn-formatting-property 'latexinfo-format-deffn)
+(put 'defvr 'latexinfo-deffn-formatting-property 'latexinfo-format-deffn)
+(put 'deftp 'latexinfo-deffn-formatting-property 'latexinfo-format-deffn)
+(defun latexinfo-format-deffn (parsed-args)
+ ;; Generalized function-like, variable-like, or generic data-type entity:
+ ;; \deffn category name args...
+ ;; In Info, `Category: name ARGS'
+ ;; \deftp category name attributes...
+ ;; `category name attributes...' Note: \deftp args in lower case.
+ (let ((category (car parsed-args))
+ (name (car (cdr parsed-args)))
+ (args (cdr (cdr parsed-args))))
+ (if (not (looking-at "\n")) (insert "\n"))
+ (insert " -- " category ": " name)
+ (while args
+ (insert " "
+ (if (or (= ?& (aref (car args) 0))
+ (eq (eval (car command-type)) 'deftp-type))
+ (car args)
+ (upcase (car args))))
+ (setq args (cdr args)))))
+
+;; \defun, \defmac, \defspec, \defvar, \defopt: Specialized, simple
+(put 'defun 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(put 'defmac 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(put 'defspec 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(put 'defvar 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(put 'defopt 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(defun latexinfo-format-specialized-defun (parsed-args)
+ ;; Specialized function-like or variable-like entity:
+ ;; \defun{name}{args} In Info, `Function: Name ARGS'
+ ;; \defmac{name}{args} In Info, `Macro: Name ARGS'
+ ;; \defvar{name} In Info, `Variable: Name'
+ ;; Use cdr of command-type to determine category:
+ (let ((category (car (cdr command-type)))
+ (name (car parsed-args))
+ (args (cdr parsed-args)))
+ (if (not (looking-at "\n")) (insert "\n"))
+ (insert " -- " category ": " name)
+ (while args
+ (insert " "
+ (if (= ?& (aref (car args) 0))
+ (car args)
+ (upcase (car args)))
+ "\n")
+ (setq args (cdr args)))))
+
+;; \deftypefn, \deftypevr: Generalized typed
+(put 'deftypefn 'latexinfo-deffn-formatting-property 'latexinfo-format-deftypefn)
+(put 'deftypevr 'latexinfo-deffn-formatting-property 'latexinfo-format-deftypefn)
+(defun latexinfo-format-deftypefn (parsed-args)
+ ;; Generalized typed-function-like or typed-variable-like entity:
+ ;; \deftypefn category data-type name args...
+ ;; In Info, `Category: data-type name args...'
+ ;; \deftypevr category data-type name
+ ;; In Info, `Category: data-type name'
+ ;; Note: args in lower case, unless modified in command line.
+ (let ((category (car parsed-args))
+ (data-type (car (cdr parsed-args)))
+ (name (car (cdr (cdr parsed-args))))
+ (args (cdr (cdr (cdr parsed-args)))))
+ (if (not (looking-at "\n")) (insert "\n"))
+ (if (null (and category data-type name))
+ (error "Null arg: %s %s %s" category data-type name)
+ (insert " -- " category ": " data-type " " name))
+ (while args
+ (insert " " (car args))
+ (setq args (cdr args)))))
+
+;; \deftypefun, \deftypevar: Specialized typed
+(put 'deftypefun 'latexinfo-deffn-formatting-property 'latexinfo-format-deftypefun)
+(put 'deftypevar 'latexinfo-deffn-formatting-property 'latexinfo-format-deftypefun)
+(defun latexinfo-format-deftypefun (parsed-args)
+ ;; Specialized typed-function-like or typed-variable-like entity:
+ ;; \deftypefun data-type name args...
+ ;; In Info, `Function: data-type name ARGS'
+ ;; \deftypevar data-type name
+ ;; In Info, `Variable: data-type name'
+ ;; Note: args in lower case, unless modified in command line.
+ ;; Use cdr of command-type to determine category:
+ (let ((category (car (cdr command-type)))
+ (data-type (car parsed-args))
+ (name (car (cdr parsed-args)))
+ (args (cdr (cdr parsed-args))))
+ (if (not (looking-at "\n")) (insert "\n"))
+ (if (null (and category data-type name))
+ (error "Null arg: %s %s %s" category data-type name)
+ (insert " -- " category ": " data-type " " name))
+ (while args
+ (insert " " (car args))
+ (setq args (cdr args)))))
+
+;; \defop: Generalized object-oriented
+(put 'defop 'latexinfo-deffn-formatting-property 'latexinfo-format-defop)
+(defun latexinfo-format-defop (parsed-args)
+ ;; Generalized object oriented entity:
+ ;; \defop category class name args...
+ ;; In Info, `Category on class: name ARG'
+ ;; Note: args in upper case; use of `on'
+ (let ((category (car parsed-args))
+ (class (car (cdr parsed-args)))
+ (name (car (cdr (cdr parsed-args))))
+ (args (cdr (cdr (cdr parsed-args)))))
+ (if (not (looking-at "\n")) (insert "\n"))
+ (if (null (and category data-type name))
+ (error "Null arg: %s %s %s" category class name)
+ (insert " -- " category " on " class ": " name))
+ (while args
+ (insert " " (upcase (car args)))
+ (setq args (cdr args)))))
+
+;; \defcv: Generalized object-oriented
+(put 'defcv 'latexinfo-deffn-formatting-property 'latexinfo-format-defcv)
+(defun latexinfo-format-defcv (parsed-args)
+ ;; Generalized object oriented entity:
+ ;; \defcv category class name
+ ;; In Info, `Category of class: name'
+ ;; Note: args in upper case; use of `of'
+ (let ((category (car parsed-args))
+ (class (car (cdr parsed-args)))
+ (name (car (cdr (cdr parsed-args))))
+ (args (cdr (cdr (cdr parsed-args)))))
+ (if (not (looking-at "\n")) (insert "\n"))
+ (if (null (and category data-type name))
+ (error "Null arg: %s %s %s" category class name)
+ (insert " -- " category " of " class ": " name))
+ (while args
+ (insert " " (upcase (car args)))
+ (setq args (cdr args)))))
+
+;; \defmethod: Specialized object-oriented
+(put 'defmethod 'latexinfo-deffn-formatting-property 'latexinfo-format-defmethod)
+(defun latexinfo-format-defmethod (parsed-args)
+ ;; Specialized object oriented entity:
+ ;; \defmethod class name args...
+ ;; In Info, `Method on class: name ARGS'
+ ;; Note: args in upper case; use of `on'
+ ;; Use cdr of command-type to determine category:
+ (let ((category (car (cdr command-type)))
+ (class (car parsed-args))
+ (name (car (cdr parsed-args)))
+ (args (cdr (cdr parsed-args))))
+ (if (not (looking-at "\n")) (insert "\n"))
+ (if (null (and category data-type name))
+ (error "Null arg: %s %s %s" category class name)
+ (insert " -- " category " on " class ": " name))
+ (while args
+ (insert " " (upcase (car args)))
+ (setq args (cdr args)))))
+
+;; \defivar: Specialized object-oriented
+(put 'defivar 'latexinfo-deffn-formatting-property 'latexinfo-format-defivar)
+(defun latexinfo-format-defivar (parsed-args)
+ ;; Specialized object oriented entity:
+ ;; \defivar class name
+ ;; In Info, `Instance variable of class: name'
+ ;; Note: args in upper case; use of `of'
+ ;; Use cdr of command-type to determine category:
+ (let ((category (car (cdr command-type)))
+ (class (car parsed-args))
+ (name (car (cdr parsed-args)))
+ (args (cdr (cdr parsed-args))))
+ (if (not (looking-at "\n")) (insert "\n"))
+ (if (null (and category data-type name))
+ (error "Null arg: %s %s %s" category class name)
+ (insert " -- " category " of " class ": " name))
+ (while args
+ (insert " " (upcase (car args)))
+ (setq args (cdr args)))))
+
+
+;;; Indexing for definitions
+
+;; An index entry has three parts: the `entry proper', the node name, and the
+;; line number. Depending on the which command is used, the entry is
+;; formatted differently:
+;;
+;; \defun,
+;; \defmac,
+;; \defspec,
+;; \defvar,
+;; \defopt all use their 1st argument as the entry-proper
+;;
+;; \deffn,
+;; \defvr,
+;; \deftp
+;; \deftypefun
+;; \deftypevar all use their 2nd argument as the entry-proper
+;;
+;; \deftypefn,
+;; \deftypevr both use their 3rd argument as the entry-proper
+;;
+;; \defmethod uses its 2nd and 1st arguments as an entry-proper
+;; formatted: NAME on CLASS
+
+;; \defop uses its 3rd and 2nd arguments as an entry-proper
+;; formatted: NAME on CLASS
+;;
+;; \defivar uses its 2nd and 1st arguments as an entry-proper
+;; formatted: NAME of CLASS
+;;
+;; \defcv uses its 3rd and 2nd argument as an entry-proper
+;; formatted: NAME of CLASS
+
+(put 'defun 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defun 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defmac 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defspec 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defvar 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defopt 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+
+(defun latexinfo-index-defun (parsed-args)
+ ;; use 1st parsed-arg as entry-proper
+ ;; `index-list' will be latexinfo-findex or the like
+ (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
+ (set index-list
+ (cons
+ ;; Three elements: entry-proper, node-name, line-number
+ (list
+ (car parsed-args)
+ latexinfo-last-node
+ ;; Region formatting may not provide last node position.
+ (if latexinfo-last-node-pos
+ (1+ (count-lines latexinfo-last-node-pos (point)))
+ 1))
+ (symbol-value index-list)))))
+
+(put 'deffn 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
+(put 'defvr 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
+(put 'deftp 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
+(put 'deftypefun 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
+(put 'deftypevar 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
+(defun latexinfo-index-deffn (parsed-args)
+ ;; use 2nd parsed-arg as entry-proper
+ ;; `index-list' will be latexinfo-findex or the like
+ (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
+ (set index-list
+ (cons
+ ;; Three elements: entry-proper, node-name, line-number
+ (list
+ (car (cdr parsed-args))
+ latexinfo-last-node
+ ;; Region formatting may not provide last node position.
+ (if latexinfo-last-node-pos
+ (1+ (count-lines latexinfo-last-node-pos (point)))
+ 1))
+ (symbol-value index-list)))))
+
+(put 'deftypefn 'latexinfo-defun-indexing-property 'latexinfo-index-deftypefn)
+(put 'deftypevr 'latexinfo-defun-indexing-property 'latexinfo-index-deftypefn)
+(defun latexinfo-index-deftypefn (parsed-args)
+ ;; use 3rd parsed-arg as entry-proper
+ ;; `index-list' will be latexinfo-findex or the like
+ (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
+ (set index-list
+ (cons
+ ;; Three elements: entry-proper, node-name, line-number
+ (list
+ (car (cdr (cdr parsed-args)))
+ latexinfo-last-node
+ ;; Region formatting may not provide last node position.
+ (if latexinfo-last-node-pos
+ (1+ (count-lines latexinfo-last-node-pos (point)))
+ 1))
+ (symbol-value index-list)))))
+
+(put 'defmethod 'latexinfo-defun-indexing-property 'latexinfo-index-defmethod)
+(defun latexinfo-index-defmethod (parsed-args)
+ ;; use 2nd on 1st parsed-arg as entry-proper
+ ;; `index-list' will be latexinfo-findex or the like
+ (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
+ (set index-list
+ (cons
+ ;; Three elements: entry-proper, node-name, line-number
+ (list
+ (format "%s on %s"
+ (car (cdr parsed-args))
+ (car parsed-args))
+ latexinfo-last-node
+ ;; Region formatting may not provide last node position.
+ (if latexinfo-last-node-pos
+ (1+ (count-lines latexinfo-last-node-pos (point)))
+ 1))
+ (symbol-value index-list)))))
+
+(put 'defop 'latexinfo-defun-indexing-property 'latexinfo-index-defop)
+(defun latexinfo-index-defop (parsed-args)
+ ;; use 3rd on 2nd parsed-arg as entry-proper
+ ;; `index-list' will be latexinfo-findex or the like
+ (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
+ (set index-list
+ (cons
+ ;; Three elements: entry-proper, node-name, line-number
+ (list
+ (format "%s on %s"
+ (car (cdr (cdr parsed-args)))
+ (car (cdr parsed-args)))
+ latexinfo-last-node
+ ;; Region formatting may not provide last node position.
+ (if latexinfo-last-node-pos
+ (1+ (count-lines latexinfo-last-node-pos (point)))
+ 1))
+ (symbol-value index-list)))))
+
+(put 'defivar 'latexinfo-defun-indexing-property 'latexinfo-index-defivar)
+(defun latexinfo-index-defivar (parsed-args)
+ ;; use 2nd of 1st parsed-arg as entry-proper
+ ;; `index-list' will be latexinfo-findex or the like
+ (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
+ (set index-list
+ (cons
+ ;; Three elements: entry-proper, node-name, line-number
+ (list
+ (format "%s of %s"
+ (car (cdr parsed-args))
+ (car parsed-args))
+ latexinfo-last-node
+ ;; Region formatting may not provide last node position.
+ (if latexinfo-last-node-pos
+ (1+ (count-lines latexinfo-last-node-pos (point)))
+ 1))
+ (symbol-value index-list)))))
+
+(put 'defcv 'latexinfo-defun-indexing-property 'latexinfo-index-defcv)
+(defun latexinfo-index-defcv (parsed-args)
+ ;; use 3rd of 2nd parsed-arg as entry-proper
+ ;; `index-list' will be latexinfo-findex or the like
+ (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
+ (set index-list
+ (cons
+ ;; Three elements: entry-proper, node-name, line-number
+ (list
+ (format "%s of %s"
+ (car (cdr (cdr parsed-args)))
+ (car (cdr parsed-args)))
+ latexinfo-last-node
+ ;; Region formatting may not provide last node position.
+ (if latexinfo-last-node-pos
+ (1+ (count-lines latexinfo-last-node-pos (point)))
+ 1))
+ (symbol-value index-list)))))
+
+
+;;; Properties for definitions
+
+;; Each primary definition command has six properties:
+;;
+;; 1. latexinfo-deffn-formatting-property to format definition line
+;; 2. latexinfo-defun-indexing-property to create index entry
+;; 3. latexinfo-format formatting command
+;; 4. latexinfo-end end formatting command
+;; 5. latexinfo-defun-type type of deffn to format
+;; 6. latexinfo-defun-index type of index to use
+;;
+;; In addition, the `x' forms of each definition command have three
+;; properties.
+
+;; The latexinfo-deffn-formatting-property and latexinfo-defun-indexing-property
+;; are listed just before the appropriate formatting and indexing commands.
+
+(put 'deffn 'latexinfo-format 'latexinfo-format-defun)
+(put 'deffnx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'deffn 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddeffn 'latexinfo-format 'latexinfo-end-defun)
+(put 'deffn 'latexinfo-defun-type '('deffn-type nil))
+(put 'deffnx 'latexinfo-defun-type '('deffn-type nil))
+(put 'deffn 'latexinfo-defun-index 'latexinfo-findex)
+(put 'deffnx 'latexinfo-defun-index 'latexinfo-findex)
+
+(put 'defun 'latexinfo-format 'latexinfo-format-defun)
+(put 'defunx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'enddefun 'latexinfo-format 'latexinfo-end-defun)
+(put 'defun 'latexinfo-end 'latexinfo-end-defun)
+(put 'defun 'latexinfo-defun-type '('defun-type "Function"))
+(put 'defunx 'latexinfo-defun-type '('defun-type "Function"))
+(put 'defun 'latexinfo-defun-index 'latexinfo-findex)
+(put 'defunx 'latexinfo-defun-index 'latexinfo-findex)
+
+(put 'defmac 'latexinfo-format 'latexinfo-format-defun)
+(put 'defmacx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'defmac 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddefmac 'latexinfo-format 'latexinfo-end-defun)
+(put 'defmac 'latexinfo-defun-type '('defun-type "Macro"))
+(put 'defmacx 'latexinfo-defun-type '('defun-type "Macro"))
+(put 'defmac 'latexinfo-defun-index 'latexinfo-findex)
+(put 'defmacx 'latexinfo-defun-index 'latexinfo-findex)
+
+(put 'defspec 'latexinfo-format 'latexinfo-format-defun)
+(put 'defspecx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'defspec 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddefspec 'latexinfo-format 'latexinfo-end-defun)
+(put 'defspec 'latexinfo-defun-type '('defun-type "Special form"))
+(put 'defspecx 'latexinfo-defun-type '('defun-type "Special form"))
+(put 'defspec 'latexinfo-defun-index 'latexinfo-findex)
+(put 'defspecx 'latexinfo-defun-index 'latexinfo-findex)
+
+(put 'defvr 'latexinfo-format 'latexinfo-format-defun)
+(put 'defvrx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'defvr 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddefvr 'latexinfo-format 'latexinfo-end-defun)
+(put 'defvr 'latexinfo-defun-type '('deffn-type nil))
+(put 'defvrx 'latexinfo-defun-type '('deffn-type nil))
+(put 'defvr 'latexinfo-defun-index 'latexinfo-vindex)
+(put 'defvrx 'latexinfo-defun-index 'latexinfo-vindex)
+
+(put 'defvar 'latexinfo-format 'latexinfo-format-defun)
+(put 'defvarx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'defvar 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddefvar 'latexinfo-format 'latexinfo-end-defun)
+(put 'defvar 'latexinfo-defun-type '('defun-type "Variable"))
+(put 'defvarx 'latexinfo-defun-type '('defun-type "Variable"))
+(put 'defvar 'latexinfo-defun-index 'latexinfo-vindex)
+(put 'defvarx 'latexinfo-defun-index 'latexinfo-vindex)
+
+(put 'defopt 'latexinfo-format 'latexinfo-format-defun)
+(put 'defoptx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'defopt 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddefopt 'latexinfo-format 'latexinfo-end-defun)
+(put 'defopt 'latexinfo-defun-type '('defun-type "User Option"))
+(put 'defoptx 'latexinfo-defun-type '('defun-type "User Option"))
+(put 'defopt 'latexinfo-defun-index 'latexinfo-vindex)
+(put 'defoptx 'latexinfo-defun-index 'latexinfo-vindex)
+
+(put 'deftp 'latexinfo-format 'latexinfo-format-defun)
+(put 'deftpx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'deftp 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddeftp 'latexinfo-format 'latexinfo-end-defun)
+(put 'deftp 'latexinfo-defun-type '('deftp-type nil))
+(put 'deftpx 'latexinfo-defun-type '('deftp-type nil))
+(put 'deftp 'latexinfo-defun-index 'latexinfo-tindex)
+(put 'deftpx 'latexinfo-defun-index 'latexinfo-tindex)
+
+;;; Object-oriented stuff is a little hairier.
+
+(put 'defop 'latexinfo-format 'latexinfo-format-defun)
+(put 'defopx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'defop 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddefop 'latexinfo-format 'latexinfo-end-defun)
+(put 'defop 'latexinfo-defun-type '('defop-type nil))
+(put 'defopx 'latexinfo-defun-type '('defop-type nil))
+(put 'defop 'latexinfo-defun-index 'latexinfo-findex)
+(put 'defopx 'latexinfo-defun-index 'latexinfo-findex)
+
+(put 'defmethod 'latexinfo-format 'latexinfo-format-defun)
+(put 'defmethodx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'defmethod 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddefmethod 'latexinfo-format 'latexinfo-end-defun)
+(put 'defmethod 'latexinfo-defun-type '('defmethod-type "Method"))
+(put 'defmethodx 'latexinfo-defun-type '('defmethod-type "Method"))
+(put 'defmethod 'latexinfo-defun-index 'latexinfo-findex)
+(put 'defmethodx 'latexinfo-defun-index 'latexinfo-findex)
+
+(put 'defcv 'latexinfo-format 'latexinfo-format-defun)
+(put 'defcvx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'defcv 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddefcv 'latexinfo-format 'latexinfo-end-defun)
+(put 'defcv 'latexinfo-defun-type '('defop-type nil))
+(put 'defcvx 'latexinfo-defun-type '('defop-type nil))
+(put 'defcv 'latexinfo-defun-index 'latexinfo-vindex)
+(put 'defcvx 'latexinfo-defun-index 'latexinfo-vindex)
+
+(put 'defivar 'latexinfo-format 'latexinfo-format-defun)
+(put 'defivarx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'defivar 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddefivar 'latexinfo-format 'latexinfo-end-defun)
+(put 'defivar 'latexinfo-defun-type '('defmethod-type "Instance variable"))
+(put 'defivarx 'latexinfo-defun-type '('defmethod-type "Instance variable"))
+(put 'defivar 'latexinfo-defun-index 'latexinfo-vindex)
+(put 'defivarx 'latexinfo-defun-index 'latexinfo-vindex)
+
+;;; Typed functions and variables
+
+(put 'deftypefn 'latexinfo-format 'latexinfo-format-defun)
+(put 'deftypefnx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'deftypefn 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddeftypefn 'latexinfo-format 'latexinfo-end-defun)
+(put 'deftypefn 'latexinfo-defun-type '('deftypefn-type nil))
+(put 'deftypefnx 'latexinfo-defun-type '('deftypefn-type nil))
+(put 'deftypefn 'latexinfo-defun-index 'latexinfo-findex)
+(put 'deftypefnx 'latexinfo-defun-index 'latexinfo-findex)
+
+(put 'deftypefun 'latexinfo-format 'latexinfo-format-defun)
+(put 'deftypefunx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'deftypefun 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddeftypefun 'latexinfo-format 'latexinfo-end-defun)
+(put 'deftypefun 'latexinfo-defun-type '('deftypefun-type "Function"))
+(put 'deftypefunx 'latexinfo-defun-type '('deftypefun-type "Function"))
+(put 'deftypefun 'latexinfo-defun-index 'latexinfo-findex)
+(put 'deftypefunx 'latexinfo-defun-index 'latexinfo-findex)
+
+(put 'deftypevr 'latexinfo-format 'latexinfo-format-defun)
+(put 'deftypevrx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'deftypevr 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddeftypevr 'latexinfo-format 'latexinfo-end-defun)
+(put 'deftypevr 'latexinfo-defun-type '('deftypefn-type nil))
+(put 'deftypevrx 'latexinfo-defun-type '('deftypefn-type nil))
+(put 'deftypevr 'latexinfo-defun-index 'latexinfo-vindex)
+(put 'deftypevrx 'latexinfo-defun-index 'latexinfo-vindex)
+
+(put 'deftypevar 'latexinfo-format 'latexinfo-format-defun)
+(put 'deftypevarx 'latexinfo-format 'latexinfo-format-defunx)
+(put 'deftypevar 'latexinfo-end 'latexinfo-end-defun)
+(put 'enddeftypevar 'latexinfo-format 'latexinfo-end-defun)
+(put 'deftypevar 'latexinfo-defun-type '('deftypevar-type "Variable"))
+(put 'deftypevarx 'latexinfo-defun-type '('deftypevar-type "Variable"))
+(put 'deftypevar 'latexinfo-defun-index 'latexinfo-vindex)
+(put 'deftypevarx 'latexinfo-defun-index 'latexinfo-vindex)
+
+(put 'defunx 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(put 'defmacx 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(put 'defspecx 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(put 'defvarx 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+(put 'defoptx 'latexinfo-deffn-formatting-property
+ 'latexinfo-format-specialized-defun)
+
+(put 'defunx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defmacx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defspecx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defvarx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+(put 'defoptx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
+
+;; Number of arguments
+(put 'deffn 'latexinfo-numargs 3)
+(put 'deffnx 'latexinfo-numargs 3)
+(put 'defun 'latexinfo-numargs 2)
+(put 'defunx 'latexinfo-numargs 2)
+(put 'defmac 'latexinfo-numargs 2)
+(put 'defmacx 'latexinfo-numargs 2)
+(put 'defspec 'latexinfo-numargs 2)
+(put 'defspecx 'latexinfo-numargs 2)
+(put 'defvr 'latexinfo-numargs 2)
+(put 'defvrx 'latexinfo-numargs 2)
+(put 'defvar 'latexinfo-numargs 1)
+(put 'defvarx 'latexinfo-numargs 1)
+(put 'defopt 'latexinfo-numargs 1)
+(put 'defoptx 'latexinfo-numargs 1)
+(put 'deftp 'latexinfo-numargs 3)
+(put 'deftpx 'latexinfo-numargs 3)
+(put 'defop 'latexinfo-numargs 4)
+(put 'defopx 'latexinfo-numargs 4)
+(put 'defmethod 'latexinfo-numargs 3)
+(put 'defmethodx 'latexinfo-numargs 3)
+(put 'defcv 'latexinfo-numargs 3)
+(put 'defcvx 'latexinfo-numargs 3)
+(put 'defivar 'latexinfo-numargs 2)
+(put 'defivarx 'latexinfo-numargs 2)
+(put 'deftypefn 'latexinfo-numargs 4)
+(put 'deftypefnx 'latexinfo-numargs 4)
+(put 'deftypefun 'latexinfo-numargs 3)
+(put 'deftypefunx 'latexinfo-numargs 3)
+(put 'deftypevr 'latexinfo-numargs 3)
+(put 'deftypevrx 'latexinfo-numargs 3)
+(put 'deftypevar 'latexinfo-numargs 2)
+(put 'deftypevarx 'latexinfo-numargs 2)
+
+(provide 'elisp-fmt)
diff --git a/macros/latex209/contrib/latexinfo/elisp/funref-fmt.el b/macros/latex209/contrib/latexinfo/elisp/funref-fmt.el
new file mode 100644
index 0000000000..df312846d9
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/funref-fmt.el
@@ -0,0 +1,25 @@
+(put 'funref 'latexinfo-format 'latexinfo-format-funref)
+(put 'macref 'latexinfo-format 'latexinfo-format-funref)
+(put 'specref 'latexinfo-format 'latexinfo-format-funref)
+(defun latexinfo-format-funref ()
+ (let ((arg (latexinfo-parse-arg-discard)))
+ (insert arg " ")
+ (latexinfo-format-fref arg)))
+
+(defun latexinfo-format-fref (arg)
+ (latexinfo-format-do-ref arg 'latexinfo-findex))
+
+(put 'varref 'latexinfo-format 'latexinfo-format-varref)
+(put 'conref 'latexinfo-format 'latexinfo-format-varref)
+(defun latexinfo-format-varref ()
+ (let ((arg (latexinfo-parse-arg-discard)))
+ (insert arg " ")
+ (latexinfo-format-vref arg)))
+
+(defun latexinfo-format-vref (arg)
+ (latexinfo-format-do-ref arg 'latexinfo-vindex))
+
+(put 'pxlref 'latexinfo-format 'latexinfo-format-ref)
+(put 'xlref 'latexinfo-format 'latexinfo-format-ref)
+
+(provide 'funref-fmt)
diff --git a/macros/latex209/contrib/latexinfo/elisp/fvpindex-fmt.el b/macros/latex209/contrib/latexinfo/elisp/fvpindex-fmt.el
new file mode 100644
index 0000000000..18b852b21e
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/fvpindex-fmt.el
@@ -0,0 +1,38 @@
+(put 'f 'latexinfo-format 'latexinfo-format-noop)
+(put 'fb 'latexinfo-format 'latexinfo-format-findex-plus)
+(defun latexinfo-format-findex-plus ()
+ (latexinfo-index-plus 'latexinfo-findex))
+
+(put 'v 'latexinfo-format 'latexinfo-format-noop)
+(put 'vb 'latexinfo-format 'latexinfo-format-vindex-plus)
+(defun latexinfo-format-vindex-plus ()
+ (latexinfo-index-plus 'latexinfo-vindex))
+
+(put 'p 'latexinfo-format 'latexinfo-format-noop)
+(put 'pb 'latexinfo-format 'latexinfo-format-pindex-plus)
+(defun latexinfo-format-pindex-plus ()
+ (latexinfo-index-plus 'latexinfo-pindex))
+
+(defun latexinfo-index-plus (indexvar)
+ (let ((arg (latexinfo-parse-expanded-arg)))
+ (latexinfo-discard-command)
+ (set indexvar
+ (cons (list arg
+ latexinfo-last-node
+ ;; Region formatting may not provide last node position.
+ (if latexinfo-last-node-pos
+ (1+ (count-lines latexinfo-last-node-pos (point)))
+ 1))
+ (symbol-value indexvar)))
+ (insert arg)
+ (goto-char latexinfo-command-start)
+ ))
+
+;; Allow access to internal LaTeX index macros as noops.
+(put 'vrindex 'latexinfo-format 'latexinfo-format-noop)
+(put 'cpindex 'latexinfo-format 'latexinfo-format-noop)
+(put 'fnindex 'latexinfo-format 'latexinfo-format-noop)
+(put 'pgindex 'latexinfo-format 'latexinfo-format-noop)
+(put 'tpindex 'latexinfo-format 'latexinfo-format-noop)
+(put 'kyindex 'latexinfo-format 'latexinfo-format-noop)
+
diff --git a/macros/latex209/contrib/latexinfo/elisp/german-fmt.el b/macros/latex209/contrib/latexinfo/elisp/german-fmt.el
new file mode 100644
index 0000000000..4ec9dd1f6d
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/german-fmt.el
@@ -0,0 +1,186 @@
+;; LaTeXinfo support for European languages.
+
+(defun latexinfo-format-scan ()
+ ;; LaTeX sometimes uses \\ to force a new-line
+ (goto-char (point-min))
+ (replace-regexp "\\\\\\\\$" "")
+ ;; This is the same as latexinfo-format-scan, except for
+ (goto-char (point-min))
+ (latexinfo-europe-doublequotes)
+ ;; And don't convert left and right quotes to typewriter font quotes.
+ ;; (goto-char (point-min))
+ ;; (while (search-forward "``" nil t)
+ ;; (replace-match "\""))
+ ;; (goto-char (point-min))
+ ;; (while (search-forward "''" nil t)
+ ;; (replace-match "\""))
+ ;; Scan for \-commands.
+ (goto-char (point-min))
+ (while (search-forward "\\" nil t)
+ (if (looking-at "[@{}'` *%]")
+ ;; Handle a few special \-followed-by-one-char commands.
+ (if (= (following-char) ?*)
+ ;; \* has no effect, since we are not filling.
+ (delete-region (1- (point)) (1+ (point)))
+ ;; The other characters are simply quoted. Delete the \.
+ (delete-char -1)
+ (forward-char 1))
+ ;; \ is followed by a command-word; find the end of the word.
+ (setq latexinfo-command-start (1- (point)))
+ (if (= (char-syntax (following-char)) ?w)
+ (forward-word 1)
+ (forward-char 1))
+ (setq latexinfo-command-end (point))
+ ;; Call the handler for this command.
+ (setq latexinfo-command-name
+ (intern (buffer-substring (1+ latexinfo-command-start)
+ latexinfo-command-end)))
+ (let ((cmd (get latexinfo-command-name 'latexinfo-format)))
+ (if cmd (funcall cmd)
+ (latexinfo-unsupported)))))
+ (cond (latexinfo-stack
+ (goto-char (nth 2 (car latexinfo-stack)))
+ (error "Unterminated \begin{%s}" (car (car latexinfo-stack))))))
+
+(defun latexinfo-europe-doublequotes ()
+ (while (search-forward "\"" nil t)
+ (forward-char -2)
+ (if (eq (following-char) ?\\)
+ ;; Ignore \"
+ (forward-char 2)
+ (progn
+ (forward-char 2)
+ (let ((next-char (following-char))
+ (here (point)))
+ (cond
+ ;; Just junk these cases:
+ ;; "| to separate ligatures.
+ ;; "- like \-, but allowing hyphenation in the rest of
+ ;; the word.
+ ;; "" like "-, but producing no hyphen sign.
+ ((memq next-char '(?\| ?\- ?\"))
+ (delete-region (- here 1) (+ here 1)))
+ ;; Just ignore these cases:
+ ;; "ck for ck to be hyphenated as k-k.
+ ;; "ff for ff to be hyphenated as ff-f, also for certain
+ ;; other consonants.
+ ((memq next-char '(?c ?f ?l ?m ?n ?p ?t ?C ?F ?L ?M ?N ?P ?T))
+ ;; There should be better testing here.
+ (delete-char -1))
+ ;; "a for Umlaut-a (like \"a), also for all other vowels.
+ ;; For these two, add an e.
+ ((memq next-char '(?a ?o ?u))
+ (delete-char -1)
+ (forward-char 1)
+ (insert "e"))
+ ((memq next-char '(?A ?O ?U))
+ (delete-char -1)
+ (forward-char 1)
+ (insert "E"))
+ ((memq next-char '(?e ?i ?E ?I))
+ (delete-char -1))
+ ;; s for sharp s (like \ss{})
+ ((eq next-char ?s)
+ (delete-region (- here 1) (+ here 1))
+ (insert "ss"))
+ ;; ` or \glqq for german left double quotes (similar to ,,)
+ ((eq next-char ?\`)
+ (delete-region (- here 1) (+ here 1))
+ (insert "\\glqq "))
+ ;; ' or \grqq for german right double quotes (similar to ``)
+ ((eq next-char ?\')
+ (delete-region (- here 1) (+ here 1))
+ (insert "\\grqq "))
+ ;; < or \flqq for french left double quotes (similar to <<)
+ ((eq next-char ?\<)
+ (delete-region (- here 1) (+ here 1))
+ (insert "\\flqq "))
+ ;; > or \frqq for french right double quotes (similar to >>)
+ ((eq next-char ?\>)
+ (delete-region (- here 1) (+ here 1))
+ (insert "\\frqq "))
+ ;; Ignore all other cases
+ ))))
+ ))
+
+
+;;; "` or \glqq for german left double quotes (similar to ,,)
+(put 'glqq 'latexinfo-format 'latexinfo-format-glqq)
+(defun latexinfo-format-glqq ()
+ (latexinfo-parse-noarg)
+ (insert ",,"))
+
+;;; "' or \grqq for german right double quotes (similar to ``)
+(put 'grqq 'latexinfo-format 'latexinfo-format-grqq)
+(defun latexinfo-format-grqq ()
+ (latexinfo-parse-noarg)
+ (insert "``"))
+
+;;; \glq for german left single quotes (similar to , )
+(put 'glq 'latexinfo-format 'latexinfo-format-glq)
+(defun latexinfo-format-glq ()
+ (latexinfo-parse-noarg)
+ (insert ","))
+
+;;; \grq for german right single quotes (similar to ` )
+(put 'grq 'latexinfo-format 'latexinfo-format-grq)
+(defun latexinfo-format-grq ()
+ (latexinfo-parse-noarg)
+ (insert "`"))
+
+;;; "< or \flqq for french left double quotes (similar to <<)
+(put 'flqq 'latexinfo-format 'latexinfo-format-flqq)
+(defun latexinfo-format-flqq ()
+ (latexinfo-parse-noarg)
+ (insert "<<"))
+
+;;; "> or \frqq for french right double quotes (similar to >>)
+(put 'frqq 'latexinfo-format 'latexinfo-format-frqq)
+(defun latexinfo-format-frqq ()
+ (latexinfo-parse-noarg)
+ (insert ">>"))
+
+;;; \flq for french left single quotes (similar to < )
+(put 'flq 'latexinfo-format 'latexinfo-format-flq)
+(defun latexinfo-format-flq ()
+ (latexinfo-parse-noarg)
+ (insert "<"))
+
+;;; \frq for french right single quotes (similar to > )
+(put 'frq 'latexinfo-format 'latexinfo-format-frq)
+(defun latexinfo-format-frq ()
+ (latexinfo-parse-noarg)
+ (insert ">"))
+
+;;; \ss
+(put 'ss 'latexinfo-format 'latexinfo-format-ss)
+(defun latexinfo-format-ss ()
+ (latexinfo-parse-noarg)
+ (insert "ss"))
+
+;;; \dq for the original quotes character (")
+(put 'dq 'latexinfo-format 'latexinfo-format-dq)
+(defun latexinfo-format-dq ()
+ (latexinfo-parse-noarg)
+ (insert "\""))
+
+
+;;; \setlanguage{n} to switch to the language specified by n
+(put 'setlanguage 'latexinfo-format 'latexinfo-format-noop)
+
+;;; \originalTeX to restore everything to the original settings
+(put 'originalTeX 'latexinfo-format 'latexinfo-format-originalTeX)
+;; Unfortunately, this will not work yet in the info file.
+(defun latexinfo-format-originalTeX ()
+ (latexinfo-format-noop)
+ (setq latexinfo-germanTeX nil))
+
+
+;;; \germanTeX to re-activate the german settings.
+(put 'germanTeX 'latexinfo-format 'latexinfo-format-germanTeX)
+;; Unfortunately, this is assumed throughout the info file.
+(defun latexinfo-format-germanTeX ()
+ (latexinfo-format-noop)
+ (setq latexinfo-germanTeX t))
+
+(setq latexinfo-germanTeX t)
diff --git a/macros/latex209/contrib/latexinfo/elisp/l2latexinfo.el b/macros/latex209/contrib/latexinfo/elisp/l2latexinfo.el
new file mode 100644
index 0000000000..23ca684ea0
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/l2latexinfo.el
@@ -0,0 +1,144 @@
+;;; l2latexinfo.el
+
+;;; Latexinfo mode utilities to convert LaTeX files to latexinfo.
+
+;;; Written for Latexinfo by Mike Clarkson
+;;; Please send bug reports to: mike@apl.ists.ca
+
+;;; Copyleft (C) 1991 Michael E. Clarkson
+;; It's not perfect, but there's not much to do.
+
+(require 'latexinfo)
+(require 'latexnfo-upd)
+
+(defun latex-to-latexinfo (arg)
+ (interactive "FNew File Name: ")
+ (let ((case-fold-search nil)
+ (input-buffer (current-buffer)))
+ (find-file arg)
+ (erase-buffer)
+ (insert-buffer-substring input-buffer)
+ (set-syntax-table latexinfo-format-syntax-table)
+ (goto-char (point-min))
+ ;; Input the \input files
+ (l2l-input-files)
+ (goto-char (point-min))
+ (re-search-forward "^\\\\documentstyle" nil nil)
+ (if (looking-at "\\[")
+ (progn (search-forward "]" nil nil)
+ (forward-char -1)
+ (insert ",latexinfo"))
+ (insert "[latexinfo]"))
+ (re-search-forward "^\\\\begin{document}" nil nil)
+ (forward-line 1)
+ (insert "\\alwaysrefill\n"
+ "\\setfilename{" arg ".info}\n"
+ "\\node top, ,(dir), (dir)\n")
+ (l2l-format-scan-noverbatim)
+ (goto-char (point-min))
+ (set-mark-command)
+ (goto-char (point-max))
+ (latexinfo-sequential-node-update t)
+ )
+ )
+
+(defun l2l-input-files ()
+ (if (and (save-excursion (re-search-forward "^\\\\input" nil t))
+ (yes-or-no-p
+ "Would you like to do the \\\\input files now, to do it all at once?"))
+ (while (re-search-forward "^\\\\input" nil t)
+ (save-excursion
+ (skip-chars-forward " {")
+ (let ((file-name
+ (buffer-substring
+ (point)
+ (progn
+ (skip-chars-forward "^ \n")
+ (point)))))
+ (setq file-name
+ (expand-file-name
+ (if (file-readable-p (expand-file-name file-name))
+ file-name
+ (concat file-name ".tex"))))
+ (beginning-of-line 1)
+ (if (file-readable-p file-name)
+ (progn
+ (delete-region (point) (progn (forward-line 1) (point)))
+ (message "Inserting file %s..." file-name) (sit-for 1)
+ (insert-file file-name)
+ (message "Inserting file %s...done" file-name))
+ (error "I can't find the file %s" file-name))
+ )))))
+
+(defun l2l-format-scan-noverbatim ()
+ (if (re-search-forward latexinfo-special-regexp nil t)
+ (let ((start (point-min))
+ (end nil)
+ str)
+ (goto-char start)
+ (while (re-search-forward l2l-special-regexp nil t)
+ (setq str (buffer-substring (match-beginning 0) (match-end 0)))
+ ;; Handle LaTeX \input{filename} commands by inserting them now.
+ ;; Only look at the beginning of the line to avoid \c \input{foo}
+ (cond
+ ((string-equal str "\\input{")
+ (latexinfo-insert-input-files)
+ )
+ ((string-equal str "\\begin{verbatim}")
+ (setq end (point))
+ (l2l-do-global-substitutions start end)
+ (re-search-forward "\\\\end{verbatim}" nil nil)
+ (setq start (point))
+ )
+ ((string-equal str "\\verb")
+ (setq end (point))
+ (l2l-do-global-substitutions start end)
+ (setq str (buffer-substring (point) (1+ (point))))
+ (forward-char 1)
+ (search-forward str nil nil)
+ (forward-char 1)
+ (setq start (point))
+ )
+ )
+ )
+ (if end (l2l-do-global-substitutions start (point-max)))
+ )
+ (l2l-do-global-substitutions (point-min) (point-max))
+ )
+ (l2l-format-scan))
+
+(defun l2l-format-scan ()
+ (goto-char (point-min))
+ (latexinfo-insert-node-lines (point-min) (point-max) t)
+ (latexinfo-master-menu 8)
+ )
+
+(defun l2l-do-global-substitutions (min max)
+ (save-excursion
+ (narrow-to-region min max)
+ ;; LaTeX sometimes uses \\ to force a new-line
+ (let ((case-fold-search nil)
+ (alist l2l-global-alist))
+ (while alist
+ (goto-char (point-min))
+ (quietly-replace-regexp (car (car alist)) (cdr (car alist)) nil)
+ (message "%s" (car (car alist)))
+ (setq alist (cdr alist)))
+ )))
+
+(defvar l2l-global-alist '(
+ ;; Fonts
+ ("{\\\\tt " . "\\\\t{")
+ ("{\\\\bf " . "\\\\r{")
+ ("{\\\\it " . "\\\\t{")
+ ("{\\\\sl " . "\\\\i{")
+ ("{\\\\em " . "\\\\emph{")
+ ("^[%]+" . "\\c")
+ ;; this breaks on \~
+ ("~" . "\\\\tie")
+ ("$\\\\ldots\\$" . "\\\\dots{}")
+ ;; This is a wild guess
+ ("$\\([a-zA-Z]+\\)\\$" . "\\\\var{\\1}")
+ ))
+
+
diff --git a/macros/latex209/contrib/latexinfo/elisp/latexinfo.el b/macros/latex209/contrib/latexinfo/elisp/latexinfo.el
new file mode 100644
index 0000000000..970ae2c8bb
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/latexinfo.el
@@ -0,0 +1,2406 @@
+;; Convert latexinfo files to info files.
+;; Copyright (C) 1985, 1986, 1988 Free Software Foundation, Inc.
+;; Copyleft (C) 1988, 1989, 1990, 1991 Michael E. Clarkson
+
+;; This file is not yet a part of GNU Emacs.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY. No author or distributor
+;; accepts responsibility to anyone for the consequences of using it
+;; or for whether it serves any particular purpose or works at all,
+;; unless he says so in writing. Refer to the GNU Emacs General Public
+;; License for full details.
+
+;; Everyone is granted permission to copy, modify and redistribute
+;; GNU Emacs, but only under the conditions described in the
+;; GNU Emacs General Public License. A copy of this license is
+;; supposed to have been given to you along with GNU Emacs so you
+;; can know your rights and responsibilities. It should be in a
+;; file named COPYING. Among other things, the copyright notice
+;; and this notice must be preserved on all copies.
+
+(defvar latexinfo-formats-directory
+ (file-name-as-directory (or (getenv "LATEXINFO") ".")))
+
+(defvar latexinfo-texinputs
+ (let ((texinputs (or (getenv "TEXINPUTS")
+ (concat ".:" latexinfo-formats-directory
+ ":/usr/local/lib/tex/inputs")))
+ (dirlist) (i 0) (l) (s) (sepchar ?:))
+ (if (eq system-type 'vax-vms) (setq sepchar ?,)) ; emacs.c
+ (setq l (length texinputs))
+ (while (< i l)
+ (setq s i)
+ (while (and (< i l) (not (char-equal (aref texinputs i) sepchar)))
+ (setq i (1+ i)))
+ (if (> i s)
+ (setq dirlist (append dirlist (list (substring texinputs s i)))))
+ (setq i (1+ i)))
+ dirlist))
+
+(defvar latexinfo-always-refill nil)
+
+(if (not (memq latexinfo-formats-directory
+ load-path))
+ (setq load-path (cons
+ latexinfo-formats-directory
+ load-path)))
+
+(if (not (memq "." load-path)) ; add the current directory to load-path
+ (setq load-path (cons "." load-path)))
+
+(defvar latexinfo-known-document-styles
+ '(latexinfo 11pt 12pt twoside titlepage A4 a4 dina4 psfonts format))
+
+(autoload 'latexinfo-mode "latexnfo-mde"
+ "Major mode for editing latexinfo files." t)
+
+(autoload 'Info-tagify "informat" "Info Tagify" t)
+(autoload 'Info-split "informat" "Info Split" t)
+
+(put 'latexinfoversion 'latexinfo-format 'latexinfo-format-latexinfoversion)
+(defun latexinfo-format-latexinfoversion ()
+ (latexinfo-parse-noarg)
+ (insert "1.7"))
+
+(defvar latexinfo-vindex-old nil)
+(defvar latexinfo-findex-old nil)
+(defvar latexinfo-cindex-old nil)
+(defvar latexinfo-cpsubindex-old nil)
+(defvar latexinfo-pindex-old nil)
+(defvar latexinfo-tindex-old nil)
+(defvar latexinfo-kindex-old nil)
+(defvar latexinfo-refindex-old nil)
+
+(defvar latexinfo-format-syntax-table nil)
+
+(progn
+ (setq latexinfo-format-syntax-table (make-syntax-table))
+ (modify-syntax-entry ?* "w" latexinfo-format-syntax-table)
+ (modify-syntax-entry ?& "w" latexinfo-format-syntax-table)
+
+ (modify-syntax-entry ?\\ "\\" latexinfo-format-syntax-table)
+ (modify-syntax-entry ?\^q "\\" latexinfo-format-syntax-table)
+
+ (modify-syntax-entry ?{ "(}" latexinfo-format-syntax-table)
+ (modify-syntax-entry ?} "){" latexinfo-format-syntax-table)
+ (modify-syntax-entry ?\[ "(]" latexinfo-format-syntax-table) ; changed
+ (modify-syntax-entry ?\] ")[" latexinfo-format-syntax-table) ; changed
+
+ (modify-syntax-entry ?\" " " latexinfo-format-syntax-table)
+ (modify-syntax-entry ?\( " " latexinfo-format-syntax-table)
+ (modify-syntax-entry ?\) " " latexinfo-format-syntax-table)
+
+ ;; punctuation characters are important to \alwaysrefill
+ (modify-syntax-entry ?! "." latexinfo-format-syntax-table)
+ (modify-syntax-entry ?. "." latexinfo-format-syntax-table)
+ (modify-syntax-entry ?: "." latexinfo-format-syntax-table)
+ (modify-syntax-entry ?\' "." latexinfo-format-syntax-table)
+)
+
+(defun latexinfo-format-buffer (&optional notagify)
+ "Process the current buffer as latexinfo code, into an Info file.
+The Info file output is generated in a buffer visiting the Info file
+names specified in the \\setfilename command.
+
+Non-nil argument (prefix, if interactive) means don't make tag table
+and don't split the file if large. You can use Info-tagify and
+Info-split to do these manually.
+
+Returns a list:
+
+ (list outfile
+ latexinfo-cindex latexinfo-vindex latexinfo-findex
+ latexinfo-pindex latexinfo-tindex latexinfo-kindex
+ latexinfo-refindex)"
+ (interactive "P")
+ (let ((lastmessage "Formatting Info file..."))
+ (message lastmessage)
+ (let ((retval (latexinfo-format-buffer-1)))
+ (setq latexinfo-cindex-old (nth 1 retval))
+ (setq latexinfo-vindex-old (nth 2 retval))
+ (setq latexinfo-findex-old (nth 3 retval))
+ (setq latexinfo-pindex-old (nth 4 retval))
+ (setq latexinfo-tindex-old (nth 5 retval))
+ (setq latexinfo-kindex-old (nth 6 retval))
+ (setq latexinfo-refindex-old (nth 7 retval)))
+ (if notagify nil (latexinfo-split))
+ (if (interactive-p) (message (concat lastmessage
+ "done. Now save it." "done.")))))
+
+(defun latexinfo-split ()
+ (if (> (buffer-size) 30000)
+ (progn
+ (message (setq lastmessage "Making tags table for Info file..."))
+ (Info-tagify)))
+ (if (> (buffer-size) 100000)
+ (progn
+ (message (setq lastmessage "Splitting Info file..."))
+ (Info-split))))
+
+(defun latexinfo-format-buffer-1 ()
+ (let (latexinfo-format-filename
+ latexinfo-example-start
+ latexinfo-command-start
+ latexinfo-command-end
+ latexinfo-command-name
+ latexinfo-last-node
+ latexinfo-last-node-pos
+ latexinfo-vindex
+ latexinfo-findex
+ latexinfo-cindex
+ latexinfo-cpsubindex
+ latexinfo-pindex
+ latexinfo-tindex
+ latexinfo-kindex
+ latexinfo-refindex
+ latexinfo-stack
+ latexinfo-node-names
+ (latexinfo-table-number 0)
+ (latexinfo-footnote-number 0)
+ outfile
+ (fill-column (1- fill-column))
+ (input-buffer (current-buffer))
+ (input-directory default-directory))
+ (save-excursion
+ (goto-char (point-min))
+ (re-search-forward "^\\\\setfilename")
+ (setq latexinfo-command-end (point))
+ (setq outfile (latexinfo-parse-line-arg)))
+ (find-file outfile)
+ (latexinfo-mode)
+ (set-syntax-table latexinfo-format-syntax-table)
+ (erase-buffer)
+ (insert-buffer-substring input-buffer)
+ (goto-char (point-min))
+ (latexinfo-run-documentstyle-hooks)
+ ;; Run this after latexinfo-run-documentstyle-hooks
+ (goto-char (point-min))
+ (re-search-forward "^\\\\setfilename")
+ (beginning-of-line)
+ (let ((end (point)))
+ (goto-char (point-min))
+ (if (re-search-forward "^\\\\alwaysrefill" end t)
+ (setq latexinfo-always-refill t)
+ (setq latexinfo-always-refill nil))
+ (delete-region (point-min) end))
+ ;; Remove \end{document} at end of file, if it is there.
+ (goto-char (point-max))
+ (if (search-backward "\\end{document}" nil t)
+ (delete-region (point) (point-max))
+ (error "Missing \\end{document}"))
+ ;; Make sure buffer ends in a newline.
+ (or (= (preceding-char) ?\n)
+ (insert "\n"))
+ ;; Scan the whole buffer, converting to Info format.
+ (goto-char (point-min))
+ (latexinfo-format-scan-noverbatim)
+ ;; Return data for indices.
+ (goto-char (point-min))
+ (list outfile
+ latexinfo-cindex latexinfo-vindex latexinfo-findex
+ latexinfo-pindex latexinfo-tindex latexinfo-kindex
+ latexinfo-refindex)
+ ))
+
+(defvar latexinfo-region-buffer-name "*Info Region*"
+ "*Name of the temporary buffer used by \\[latexinfo-format-region].")
+
+(defun latexinfo-format-region (region-beginning region-ending)
+ "Convert the the current region of the Latexinfo file to Info format.
+This lets you see what that part of the file will look like in Info.
+The command is bound to \\[latexinfo-format-region]. The text that is
+converted to Info is stored in a temporary buffer."
+ (interactive "r")
+ (message "Converting region to Info format...")
+ (let (latexinfo-command-start
+ latexinfo-command-end
+ latexinfo-command-name
+ latexinfo-vindex
+ latexinfo-findex
+ latexinfo-cindex
+ latexinfo-pindex
+ latexinfo-tindex
+ latexinfo-kindex
+ latexinfo-refindex
+ latexinfo-stack
+ latexinfo-format-filename
+ latexinfo-example-start
+ latexinfo-last-node-pos
+ latexinfo-last-node
+ latexinfo-node-names
+ (latexinfo-table-number 0)
+ (latexinfo-footnote-number 0)
+ (fill-column (1- fill-column))
+ (input-buffer (current-buffer))
+ (input-directory default-directory)
+ filename-beginning
+ filename-ending)
+
+ ;; Find a buffer to use.
+ (switch-to-buffer (get-buffer-create latexinfo-region-buffer-name))
+ ;; Insert the region into the buffer.
+ (erase-buffer)
+
+ (save-excursion
+ (set-buffer input-buffer)
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ ;; Initialize the buffer with the filename
+ ;; or else explain that a filename is needed.
+ (or (re-search-forward "^\\\\setfilename"
+ (save-excursion (forward-line 100) (point)) t)
+ (error "The latexinfo file needs a line saying: \\setfilename <name>"))
+ (beginning-of-line)
+ (setq filename-beginning (point))
+ (forward-line 1)
+ (setq filename-ending (point)))))
+
+ ;; Insert the \\setfilename line into the buffer.
+ (insert-buffer-substring input-buffer
+ (min filename-beginning region-beginning)
+ filename-ending)
+
+ ;; Insert the region into the buffer.
+ (insert-buffer-substring input-buffer
+ (max region-beginning filename-ending)
+ region-ending)
+
+ (latexinfo-mode)
+
+ ;; Install a syntax table useful for scanning command operands.
+ (set-syntax-table latexinfo-format-syntax-table)
+
+ ;; If the region includes the effective end of the data,
+ ;; discard everything after that.
+ (goto-char (point-max))
+ (if (search-backward "\\end{document}" nil t)
+ (delete-region (point) (point-max)))
+ ;; Make sure buffer ends in a newline.
+ (or (= (preceding-char) ?\n)
+ (insert "\n"))
+ (goto-char (point-max))
+ ;; Now convert for real.
+ (goto-char (point-min))
+ (latexinfo-format-scan-noverbatim)
+ (goto-char (point-min)))
+ )
+
+;; Only look at the beginning of the line to avoid \c \input{foo}
+(defvar latexinfo-special-regexp
+ "^[ \t]*\\\\\\(begin{verbatim}\\|begin{smallverbatim}\\|verb\\|input{\\)")
+
+(defun latexinfo-format-scan-noverbatim ()
+ (if (re-search-forward latexinfo-special-regexp nil t)
+ (let ((start (point-min))
+ (end nil)
+ str)
+ (goto-char start)
+ (while (re-search-forward latexinfo-special-regexp nil t)
+ (setq str (buffer-substring (match-beginning 0) (match-end 0)))
+ ;; Handle LaTeX \input{filename} commands by inserting them now.
+ ;; Only look at the beginning of the line to avoid \c \input{foo}
+ ;; Protect the verbatim areas from global substitutions.
+ (cond
+ ((string-equal str "\\input{")
+ (latexinfo-insert-input-files)
+ )
+ ((string-equal str "\\begin{verbatim}")
+ (setq end (point))
+ (latexinfo-do-global-substitutions start end)
+ (re-search-forward "\\\\end{verbatim}" nil nil)
+ (setq start (point))
+ )
+ ((string-equal str "\\begin{smallverbatim}")
+ (setq end (point))
+ (latexinfo-do-global-substitutions start end)
+ (re-search-forward "\\\\end{smallverbatim}" nil nil)
+ (setq start (point))
+ )
+ ((string-equal str "\\verb")
+ (setq end (point))
+ (latexinfo-do-global-substitutions start end)
+ (setq str (buffer-substring (point) (1+ (point))))
+ (forward-char 1)
+ (search-forward str nil nil)
+ (forward-char 1)
+ (setq start (point))
+ )
+ )
+ )
+ (if end (latexinfo-do-global-substitutions start (point-max)))
+ )
+ (latexinfo-do-global-substitutions (point-min) (point-max))
+ )
+ (latexinfo-format-scan))
+
+(defun latexinfo-insert-input-files ()
+ (save-excursion
+ ;; (skip-chars-forward " \t{")
+ (let ((file-name
+ (buffer-substring
+ (point)
+ (progn (skip-chars-forward "^ }\n")
+ (point))))
+ (dirlist latexinfo-texinputs)
+ (the-file nil))
+ (while (and (not the-file) dirlist)
+ (let ((dir (car dirlist)))
+ (setq the-file
+ (cond ((file-readable-p (expand-file-name
+ file-name dir))
+ (expand-file-name file-name dir))
+ ((file-readable-p (expand-file-name
+ (concat file-name ".tex") dir))
+ (expand-file-name
+ (concat file-name ".tex") dir))
+ (t nil)
+ ))
+ (setq dirlist (cdr dirlist))))
+ (setq file-name the-file)
+ (beginning-of-line 1)
+ (if (file-readable-p file-name)
+ (progn
+ (delete-region (point) (progn (forward-line 1) (point)))
+ (message "Inserting file %s..." file-name) (sit-for 1)
+ (insert-file file-name)
+ (message "Inserting file %s...done" file-name))
+ (error "I can't find the file %s" file-name))
+ )
+ )
+ )
+
+(defun latexinfo-do-global-substitutions (min max)
+ (save-excursion
+ (narrow-to-region min max)
+ (goto-char (point-min))
+ (let ((start nil))
+ (while (re-search-forward "^\\\\begin{ignore}" nil t)
+ (beginning-of-line 1)
+ (setq start (point))
+ (re-search-forward "^\\\\end{ignore}" nil)
+ (forward-line 1)
+ (delete-region start (point))))
+ ;; LaTeX sometimes uses \\ to force a new-line
+ (goto-char (point-min))
+ (quietly-replace-regexp "\\\\\\\\$" "")
+ ;; Convert left and right quotes to typewriter font quotes.
+ (goto-char (point-min))
+ (while (search-forward "``" nil t)
+ (replace-match "\""))
+ (goto-char (point-min))
+ (while (search-forward "''" nil t)
+ (replace-match "\""))
+ (if latexinfo-always-refill
+ (latexinfo-do-refill)
+ )
+ (widen)
+ )
+ )
+
+(defun latexinfo-do-refill ()
+ (let ((start (point-min))
+ (end nil))
+ (goto-char start)
+ (while (re-search-forward "^\\\\begin{menu}" nil t)
+ (narrow-to-region start (point))
+ ;; Would a regexp be too slow?
+ (goto-char (point-min))
+ (quietly-replace-string ".\n\n" ".\\refill\n\n" nil)
+ (goto-char (point-min))
+ (quietly-replace-string ":\n\n" ":\\refill\n\n" nil)
+ (goto-char (point-min))
+ (quietly-replace-string ".\n\\end" ".\\refill\n\\end" nil)
+ (narrow-to-region min max)
+ (re-search-forward "\\\\end{menu}" nil nil)
+ (setq start (point))
+ )
+ )
+ )
+
+(defun latexinfo-format-scan ()
+ ;; Scan for \\-commands.
+ (set-syntax-table latexinfo-format-syntax-table)
+ (goto-char (point-min))
+ (let ((foochar nil))
+ (while (search-forward "\\" nil t)
+ ;;; EMACS BUG (looking-at "[*{}^'` \t---.:%\"\\\\]") TRUE for &
+ ;; Handle a few special \-followed-by-one-char commands.
+ (setq foochar (following-char))
+ (cond ((memq foochar '(?* ?\\ ?- ?:))
+ ;; \* has no effect, since we are not filling.
+ ;; \" can't be reproduced on ascii terminals
+ (delete-region (1- (point)) (1+ (point))))
+ ((memq foochar '(?^ ?' ?` ?\"))
+ (latexinfo-parse-accent))
+ ((memq foochar '(?* ?\{ ?} ?^ ?\ ?\t ?\. ?: ?% ?\\))
+ ;; The other characters are simply quoted. Delete the \.
+ (delete-char -1)
+ (forward-char 1))
+ (t
+ ;; \ is followed by a command-word; find the end of the word.
+ (setq latexinfo-command-start (1- (point)))
+ ;; (if (= (char-syntax (following-char)) ?w) . (forward-char 1))
+ (forward-word 1)
+ (setq latexinfo-command-end (point))
+ ;; Call the handler for this command.
+ (setq latexinfo-command-name
+ (intern (buffer-substring (1+ latexinfo-command-start)
+ latexinfo-command-end)))
+ (let ((cmd (get latexinfo-command-name 'latexinfo-format)))
+ (if cmd (funcall cmd)
+ (latexinfo-unsupported))))
+ )
+ )
+ (cond (latexinfo-stack
+ (goto-char (nth 2 (car latexinfo-stack)))
+ (error "Unterminated \\begin{%s}" (car (car latexinfo-stack)))))
+ )
+)
+
+(defun latexinfo-parse-accent ()
+ (latexinfo-delete-whitespace)
+ (cond ((looking-at ".{")
+ (delete-region (1- (point)) (+ 2 (point)))
+ (skip-chars-forward "^}")
+ (delete-char 1) ; }
+ )
+ (t ; this should not happen
+ (delete-region (1- (point)) (1+ (point))) ; \c
+ )
+ )
+ )
+
+(put 'begin 'latexinfo-format 'latexinfo-format-begin)
+(defun latexinfo-format-begin ()
+ (latexinfo-format-begin-end 'latexinfo-format))
+
+(put 'end 'latexinfo-format 'latexinfo-format-end)
+(defun latexinfo-format-end ()
+ (latexinfo-format-begin-end 'latexinfo-end))
+
+(defun latexinfo-format-begin-end (prop)
+ (setq latexinfo-command-name (intern (latexinfo-parse-line-arg)))
+ (setq cmd (get latexinfo-command-name prop))
+ (if cmd (funcall cmd)
+ (latexinfo-unsupported)))
+
+(defvar latexinfo-format-syntax-table-a nil)
+
+(progn
+ (setq latexinfo-format-syntax-table-a
+ (copy-syntax-table latexinfo-format-syntax-table))
+ (modify-syntax-entry ?\[ "." latexinfo-format-syntax-table-a)
+ (modify-syntax-entry ?\] "." latexinfo-format-syntax-table-a)
+ )
+
+;;Fundamental change
+(defun safe-forward-list (arg)
+ (cond ((string-equal "}" arg)
+ (set-syntax-table latexinfo-format-syntax-table-a)
+ (forward-sexp 1)
+ (set-syntax-table latexinfo-format-syntax-table)
+ )
+ ((string-equal "]" arg)
+ (forward-list 1))
+ (t (forward-list 1))
+ )
+ )
+
+(defun latexinfo-parse-line-arg ()
+ "Returns the command that takes up the rest of the line."
+ (goto-char latexinfo-command-end)
+ (let ((start (point)))
+ (cond ((looking-at " ")
+ (skip-chars-forward " ")
+ (setq start (point))
+ (end-of-line)
+ (skip-chars-backward " ")
+ (delete-region (point) (progn (end-of-line) (point)))
+ (setq latexinfo-command-end (1+ (point))))
+ ((looking-at "{")
+ (setq start (1+ (point)))
+ (safe-forward-list "}")
+ (setq latexinfo-command-end (point))
+ (forward-char -1))
+ ((looking-at "\\[")
+ (setq start (1+ (point)))
+ (safe-forward-list "]")
+ (setq latexinfo-command-end (point))
+ (forward-char -1))
+ (t
+ (error "Invalid latexinfo command arg format")))
+ (prog1 (buffer-substring start (point))
+ (if (eolp) (forward-char 1)))))
+
+(defun latexinfo-parse-expanded-arg ()
+ (goto-char latexinfo-command-end)
+ (let ((start (point))
+ marker)
+ (cond ((looking-at " ")
+ (skip-chars-forward " ")
+ (setq start (point))
+ (end-of-line)
+ (setq latexinfo-command-end (1+ (point))))
+ ((or (looking-at "{") (looking-at "\\["))
+ (setq start (1+ (point)))
+ (forward-list 1)
+ (setq latexinfo-command-end (point))
+ (forward-char -1))
+ (t
+ (error "Invalid latexinfo command arg format")))
+ (setq marker (move-marker (make-marker) latexinfo-command-end))
+ (latexinfo-format-expand-region start (point))
+ (setq latexinfo-command-end (marker-position marker))
+ (move-marker marker nil)
+ (prog1 (buffer-substring start (point))
+ (if (eolp) (forward-char 1)))))
+
+(defun latexinfo-parse-arg-discard ()
+ (prog1 (latexinfo-parse-line-arg)
+ (latexinfo-discard-command)))
+
+(defun latexinfo-discard-command ()
+ ;;LaTeX gobbles the next whitespace. Should Info?
+ (delete-region latexinfo-command-start latexinfo-command-end))
+
+(defun latexinfo-parse-noarg ()
+ (goto-char latexinfo-command-end)
+ (cond ((looking-at "{}") (delete-char 2))
+ ;; TeX gobbles the next whitespace.
+ ((eolp) (delete-char 1))
+ ((looking-at "[ \t]")
+ (setq latexinfo-command-end
+ (save-excursion
+ (skip-chars-forward " \t") (point))))
+ )
+ (delete-region latexinfo-command-start latexinfo-command-end)
+ )
+
+;; New parsing functions
+(defun latexinfo-parse-required-argument ()
+ ;; TeX gobbles the next whitespace.
+ (goto-char latexinfo-command-end)
+ (latexinfo-delete-whitespace)
+ (cond ((looking-at "{")
+ (setq latexinfo-command-end
+ (save-excursion
+ (forward-sexp 1) (point))))
+ (t (error "latexinfo-parse-required-argument: no argument provided"))
+ )
+ (prog1 (buffer-substring (1+ (point)) (1- latexinfo-command-end))
+ (latexinfo-delete-command ))
+ )
+
+(defun latexinfo-delete-whitespace ()
+ (if (looking-at "[ \t\n]")
+ (delete-region (point) (save-excursion
+ (skip-chars-forward " \t\n")
+ (point)))))
+
+(defun latexinfo-insert-required-argument ()
+ (save-excursion (insert (latexinfo-parse-required-argument))))
+
+(defun latexinfo-delete-command ()
+ (delete-region latexinfo-command-start latexinfo-command-end))
+
+(defun latexinfo-format-expand-region (start end)
+ (save-restriction
+ (narrow-to-region start end)
+ (let (latexinfo-command-start
+ latexinfo-command-end
+ latexinfo-command-name
+ latexinfo-stack)
+ (latexinfo-format-scan))
+ (goto-char (point-max))))
+
+(defun latexinfo-format-parse-line-args ()
+ (let ((start (1- (point)))
+ next beg end
+ args)
+ (skip-chars-forward " ")
+ (while (not (eolp))
+ (setq beg (point))
+ (re-search-forward "[\n,]")
+ (setq next (point))
+ (if (bolp) (setq next (1- next)))
+ (forward-char -1)
+ (skip-chars-backward " ")
+ (setq end (point))
+ (setq args (cons (if (> end beg) (buffer-substring beg end))
+ args))
+ (goto-char next)
+ (skip-chars-forward " "))
+ (if (eolp) (forward-char 1))
+ (setq latexinfo-command-end (point))
+ (nreverse args)))
+
+(defun latexinfo-format-parse-args ()
+ (let ((start (1- (point)))
+ next beg end
+ args)
+ (search-forward "{")
+ (while (/= (preceding-char) ?\})
+ (skip-chars-forward " \t\n")
+ (setq beg (point))
+ (re-search-forward "[},]")
+ (setq next (point))
+ (forward-char -1)
+ (skip-chars-backward " \t\n")
+ (setq end (point))
+ (cond ((< beg end)
+ (goto-char beg)
+ (while (search-forward "\n" end t)
+ (replace-match " "))))
+ (setq args (cons (if (> end beg) (buffer-substring beg end))
+ args))
+ (goto-char next))
+ (if (eolp) (forward-char 1))
+ (setq latexinfo-command-end (point))
+ (nreverse args)))
+
+
+
+(put 'document 'latexinfo-format 'latexinfo-discard-line)
+(put 'document 'latexinfo-end 'latexinfo-discard-line)
+
+(put 'setfilename 'latexinfo-format 'latexinfo-format-setfilename)
+(defun latexinfo-format-setfilename ()
+ (let ((arg (latexinfo-parse-arg-discard)))
+ (setq latexinfo-format-filename
+ (file-name-nondirectory (expand-file-name arg)))
+ (insert "Info file: "
+ latexinfo-format-filename ", -*-Text-*-\n"
+ "produced by latexinfo-format-buffer\nfrom "
+ (if (buffer-file-name input-buffer)
+ (concat "file: "
+ (file-name-sans-versions
+ (file-name-nondirectory
+ (buffer-file-name input-buffer))))
+ (concat "buffer " (buffer-name input-buffer)))
+ "\n\n")))
+
+(put 'node 'latexinfo-format 'latexinfo-format-node)
+(defun latexinfo-format-node ()
+ (let* ((args (latexinfo-format-parse-line-args))
+ (name (nth 0 args))
+ (next (nth 1 args))
+ (prev (nth 2 args))
+ (up (nth 3 args)))
+ (latexinfo-discard-command)
+ (setq latexinfo-last-node name)
+ (let ((tem (downcase name)))
+ (if (assoc tem latexinfo-node-names)
+ (error "Duplicate node name: %s" name)
+ (setq latexinfo-node-names (cons tem latexinfo-node-names))))
+ (or (bolp)
+ (insert ?\n))
+ (insert "\^_\nFile: " latexinfo-format-filename
+ " Node: " name)
+ (if prev
+ (insert ", Prev: " prev))
+ (if up
+ (insert ", Up: " up))
+ (if next
+ (insert ", Next: " next))
+ (insert ?\n)
+ (setq latexinfo-last-node-pos (point))
+ ))
+
+(put 'menu 'latexinfo-format 'latexinfo-format-menu)
+(defun latexinfo-format-menu ()
+ (latexinfo-discard-line)
+ (insert "* Menu:\n\n"))
+
+(put 'menu 'latexinfo-end 'latexinfo-discard-command)
+
+(defun latexinfo-discard-line ()
+ (goto-char latexinfo-command-end)
+ (skip-chars-forward " \t")
+ (or (eolp)
+ (error "Extraneous text at end of command line."))
+ (delete-region latexinfo-command-start (progn (forward-line 1) (point))))
+
+(defun latexinfo-discard-to-eoline ()
+ (goto-char latexinfo-command-end)
+ (skip-chars-forward " \t")
+ (or (eolp)
+ (error "Extraneous text at end of command line."))
+ (delete-region latexinfo-command-start (point)))
+
+; \xref {NODE, FNAME, NAME, FILE, DOCUMENT}
+; -> *Note FNAME: (FILE)NODE
+; If FILE is missing,
+; *Note FNAME: NODE
+; If FNAME is empty and NAME is present
+; *Note NAME: Node
+; If both NAME and FNAME are missing
+; *Note NODE::
+; latexinfo ignores the DOCUMENT argument.
+; -> See section <xref to NODE> [NAME, else NODE], page <xref to NODE>
+; If FILE is specified, (FILE)NODE is used for xrefs.
+; If fifth argument DOCUMENT is specified, produces
+; See section <xref to NODE> [NAME, else NODE], page <xref to NODE>
+; of DOCUMENT
+; \nxref is a reference that does not put `See' or `see' in
+; the hardcopy and is the same as \xref in Info
+
+(put 'nxref 'latexinfo-format 'latexinfo-format-xref)
+(put 'xref 'latexinfo-format 'latexinfo-format-xref)
+(defun latexinfo-format-xref ()
+ (let ((args (latexinfo-format-parse-args)))
+ (latexinfo-discard-command)
+ (insert "*Note ")
+ (let ((fname (or (nth 1 args) (nth 2 args))))
+ (if (null (or fname (nth 3 args)))
+ (insert (car args) "::")
+ (insert (or fname (car args)) ": ")
+ (if (nth 3 args)
+ (insert "(" (nth 3 args) ")"))
+ (insert (car args))))))
+
+(put 'pxref 'latexinfo-format 'latexinfo-format-pxref)
+(defun latexinfo-format-pxref ()
+ (latexinfo-format-xref)
+ (or (save-excursion
+ (forward-char -2)
+ (looking-at "::"))
+ (insert ".")))
+
+;\inforef{NODE, FNAME, FILE}
+;Like \xref{NODE, FNAME,,FILE} in latexinfo.
+;In LaTeX, generates "See Info file FILE, node NODE"
+(put 'inforef 'latexinfo-format 'latexinfo-format-inforef)
+(defun latexinfo-format-inforef ()
+ (let ((args (latexinfo-format-parse-args)))
+ (latexinfo-discard-command)
+ (if (nth 1 args)
+ (insert "*Note " (nth 1 args) ": (" (nth 2 args) ")" (car args))
+ (insert "*Note " "(" (nth 2 args) ")" (car args) "::"))))
+
+(put 'appendix 'latexinfo-format 'latexinfo-parse-noarg)
+(put 'onecolumn 'latexinfo-format 'latexinfo-parse-noarg)
+(put 'twocolumn 'latexinfo-format 'latexinfo-parse-noarg)
+;;(put 'threecolumn 'latexinfo-format 'latexinfo-parse-noarg)
+
+(put 'chapter 'latexinfo-format 'latexinfo-format-chapter)
+(put 'chapter* 'latexinfo-format 'latexinfo-format-chapter)
+(put 'unnumbered 'latexinfo-format 'latexinfo-format-chapter)
+(defun latexinfo-format-chapter ()
+ (latexinfo-format-chapter-1 ?*))
+
+(put 'section 'latexinfo-format 'latexinfo-format-section)
+(put 'section* 'latexinfo-format 'latexinfo-format-section)
+(put 'unnumberedsec 'latexinfo-format 'latexinfo-format-section)
+(defun latexinfo-format-section ()
+ (latexinfo-format-chapter-1 ?=))
+
+(put 'subsection 'latexinfo-format 'latexinfo-format-subsection)
+(put 'subsection* 'latexinfo-format 'latexinfo-format-subsection)
+(put 'unnumberedsubsec 'latexinfo-format 'latexinfo-format-subsection)
+(defun latexinfo-format-subsection ()
+ (latexinfo-format-chapter-1 ?-))
+
+(put 'subsubsection 'latexinfo-format 'latexinfo-format-subsubsection)
+(put 'subsubsection* 'latexinfo-format 'latexinfo-format-subsubsection)
+(put 'unnumberedsubsubsec 'latexinfo-format 'latexinfo-format-subsubsection)
+(defun latexinfo-format-subsubsection ()
+ (latexinfo-format-chapter-1 ?.))
+
+(defun latexinfo-format-chapter-1 (belowchar)
+ (let ((arg (latexinfo-parse-arg-discard)))
+ (message "Formatting: %s ... " arg) ; So we can see where we are.
+ (insert ?\n arg ?\n "\\SectionPAD " belowchar ?\n)
+ (if (not (looking-at "\n")) (insert "\n"))
+ (goto-char latexinfo-command-start)))
+
+(put 'SectionPAD 'latexinfo-format 'latexinfo-format-sectionpad)
+(defun latexinfo-format-sectionpad ()
+ (let ((str (latexinfo-parse-arg-discard)))
+ (forward-char -1)
+ (let ((column (current-column)))
+ (forward-char 1)
+ (while (> column 0)
+ (insert str)
+ (setq column (1- column))))
+ (insert ?\n)
+ (if (not (looking-at "\n")) (insert "\n"))
+))
+
+(put 'paragraph 'latexinfo-format 'latexinfo-format-var)
+(put 'subparagraph 'latexinfo-format 'latexinfo-format-noop)
+(put 'paragraph* 'latexinfo-format 'latexinfo-format-var)
+(put 'subparagraph* 'latexinfo-format 'latexinfo-format-noop)
+
+(put '\. 'latexinfo-format 'latexinfo-format-\.)
+(defun latexinfo-format-\. ()
+ (latexinfo-discard-command)
+ (insert "."))
+
+(put '\\ 'latexinfo-format 'latexinfo-format-\\)
+(defun latexinfo-format-\\ ()
+ (latexinfo-discard-command)
+ (insert "\n"))
+
+(put '\: 'latexinfo-format 'latexinfo-format-\:)
+(defun latexinfo-format-\: ()
+ (latexinfo-discard-command))
+
+(put '_ 'latexinfo-format 'latexinfo-format-_)
+(defun latexinfo-format-_ ()
+ (latexinfo-parse-noarg)
+ (insert "_"))
+
+(put '$ 'latexinfo-format 'latexinfo-format-$)
+(defun latexinfo-format-$ ()
+ (latexinfo-parse-noarg)
+ (insert "$"))
+
+(put '@ 'latexinfo-format 'latexinfo-format-@)
+(defun latexinfo-format-@ ()
+ (latexinfo-parse-noarg)
+ (insert "@"))
+
+(put '~ 'latexinfo-format 'latexinfo-format-~)
+(defun latexinfo-format-~ ()
+ (latexinfo-parse-noarg)
+ (insert "~"))
+
+(put '^ 'latexinfo-format 'latexinfo-format-^)
+(defun latexinfo-format-^ ()
+ (latexinfo-parse-noarg)
+ (insert "^"))
+
+(put '/ 'latexinfo-format 'latexinfo-format-/)
+(defun latexinfo-format-/ ()
+ (latexinfo-parse-noarg))
+
+(put '\ 'latexinfo-format 'latexinfo-format-space)
+(defun latexinfo-format-space ()
+ (latexinfo-parse-noarg)
+ (insert " "))
+
+;; Use \tie when you need one.
+(put 'tie 'latexinfo-format 'latexinfo-format-tie)
+(defun latexinfo-format-tie ()
+ (latexinfo-parse-noarg)
+ (insert " "))
+
+(put 'sp 'latexinfo-format 'latexinfo-format-sp)
+(defun latexinfo-format-sp ()
+ (let ((arg (read (latexinfo-parse-expanded-arg))))
+ (latexinfo-discard-command)
+ ;; Delete eol if the space command is the only thing on a line
+ (if (and (eolp) (bolp) (not (eobp))) (delete-char 1))
+ (while (> arg 0)
+ (insert "\n")
+ (setq arg (1- arg)))))
+
+;;; \footnote and \footnotestyle
+
+; In Latexinfo, footnotes are created with the `\footnote' command.
+; This command is followed immediately by a left brace, then by the text of
+; the footnote, and then by a terminating right brace. The
+; template for a footnote is:
+;
+; \footnote{TEXT}
+;
+; Info has two footnote styles:
+;
+; * In the End of node style, all the footnotes for a single node
+; are placed at the end of that node. The footnotes are
+; separated from the rest of the node by a line of dashes with
+; the word `Footnotes' within it.
+;
+; * In the Separate node style, all the footnotes for a single node
+; are placed in an automatically constructed node of their own.
+
+; Footnote style is specified by the \footnotestyle command, either
+; \footnotestyle{separate}
+; or
+; \footnotestyle{end}
+;
+; The default is separate
+
+(defvar latexinfo-footnote-style "separate"
+ "Footnote style, either separate or end.")
+
+(put 'footnotestyle 'latexinfo-format 'latexinfo-footnotestyle)
+(defun latexinfo-footnotestyle ()
+ "Specify whether footnotes are at end of node or in separate nodes.
+Argument is either end or separate."
+ (setq latexinfo-footnote-style (latexinfo-parse-arg-discard)))
+
+(defvar latexinfo-footnote-number)
+
+(put 'footnote 'latexinfo-format 'latexinfo-format-footnote)
+(defun latexinfo-format-footnote ()
+ "Format a footnote in either end of node or separate node style.
+The latexinfo-footnote-style variable controls which style is used."
+ (setq latexinfo-footnote-number (1+ latexinfo-footnote-number))
+ (cond ((string= latexinfo-footnote-style "end")
+ (latexinfo-format-end-node))
+ ((string= latexinfo-footnote-style "separate")
+ (latexinfo-format-separate-node))))
+
+(defun latexinfo-format-separate-node ()
+ "Format footnote in Separate node style, with notes in own node.
+The node is constructed automatically."
+ (let* (start
+ (arg (latexinfo-parse-line-arg))
+ (node-name-beginning
+ (save-excursion
+ (re-search-backward
+ "^File: \\w+\\(\\w\\|\\s_\\|\\.\\|,\\)*[ \t]+Node:")
+ (match-end 0)))
+ (node-name
+ (save-excursion
+ (buffer-substring
+ (progn (goto-char node-name-beginning) ; skip over node command
+ (skip-chars-forward " \t") ; and over spaces
+ (point))
+ (if (search-forward
+ ","
+ (save-excursion (end-of-line) (point)) t) ; bound search
+ (1- (point))
+ (end-of-line) (point))))))
+ (latexinfo-discard-command) ; remove or insert whitespace, as needed
+ (delete-region (save-excursion (skip-chars-backward " \t\n") (point))
+ (point))
+ (insert (format " (%d) (*Note %s-Footnotes::)"
+ latexinfo-footnote-number node-name))
+ (fill-paragraph nil)
+ (save-excursion
+ (if (re-search-forward "^\\\\node" nil 'move)
+ (forward-line -1))
+
+ ;; two cases: for the first footnote, we must insert a node header;
+ ;; for the second and subsequent footnotes, we need only insert
+ ;; the text of the footnote.
+
+ (if (save-excursion
+ (re-search-backward
+ (concat node-name "-Footnotes, Up: ")
+ node-name-beginning
+ t))
+ (progn ; already at least one footnote
+ (setq start (point))
+ (insert (format "\n(%d) %s\n" latexinfo-footnote-number arg))
+ (fill-region start (point)))
+ ;; else not yet a footnote
+ (insert "\n\^_\nFile: " latexinfo-format-filename
+ " Node: " node-name "-Footnotes, Up: " node-name "\n")
+ (setq start (point))
+ (insert (format "\n(%d) %s\n" latexinfo-footnote-number arg))
+ (fill-region start (point))))))
+
+(defun latexinfo-format-end-node ()
+ "Format footnote in the End of node style, with notes at end of node."
+ (let (start
+ (arg (latexinfo-parse-line-arg)))
+ (latexinfo-discard-command) ; remove or insert whitespace, as needed
+ (delete-region (save-excursion (skip-chars-backward " \t\n") (point))
+ (point))
+ (insert (format " (%d) " latexinfo-footnote-number))
+ (fill-paragraph nil)
+ (save-excursion
+ (if (search-forward "\n--------- Footnotes ---------\n" nil t)
+ (progn ; already have footnote, put new one before end of node
+ (if (re-search-forward "^\\\\node" nil 'move)
+ (forward-line -1))
+ (setq start (point))
+ (insert (format "\n(%d) %s\n" latexinfo-footnote-number arg))
+ (fill-region start (point)))
+ ;; else no prior footnote
+ (if (re-search-forward "^\\\\node" nil 'move)
+ (forward-line -1))
+ (insert "\n--------- Footnotes ---------\n")
+ (setq start (point))
+ (insert (format "\n(%d) %s\n" latexinfo-footnote-number arg))))))
+
+
+;; \begin{itemize} pushes (itemize "COMMANDS" STARTPOS) on latexinfo-stack.
+;; \begin{enumerate} pushes (enumerate 0 STARTPOS).
+;; \item dispatches to the latexinfo-item prop of the first elt of the list.
+;; For itemize, this puts in and rescans the COMMANDS.
+;; For enumerate, this increments the number and puts it in.
+;; In either case, it puts a Backspace at the front of the line
+;; which marks it not to be indented later.
+;; All other lines get indented by 5 when the \end is reached.
+
+(defvar latexinfo-stack-depth 0
+ "Count of number of unpopped latexinfo-push-stack calls.
+Used by \\refill indenting command to avoid indenting within lists, etc.")
+
+(defun latexinfo-push-stack (check arg)
+ (setq latexinfo-stack-depth (1+ latexinfo-stack-depth))
+ (setq latexinfo-stack
+ (cons (list check arg latexinfo-command-start)
+ latexinfo-stack)))
+
+(defun latexinfo-pop-stack (check)
+ (setq latexinfo-stack-depth (1- latexinfo-stack-depth))
+ (if (null latexinfo-stack)
+ (error "Unmatched \\end{%s}" check))
+ (if (not (eq (car (car latexinfo-stack)) check))
+ (error "\\end{%s} matches \\begin{%s}"
+ check (car (car latexinfo-stack))))
+ (prog1 (cdr (car latexinfo-stack))
+ (setq latexinfo-stack (cdr latexinfo-stack))))
+
+(put 'itemize 'latexinfo-format 'latexinfo-itemize)
+(defun latexinfo-itemize ()
+ (latexinfo-push-stack 'itemize "*")
+ (setq fill-column (- fill-column 5))
+ (latexinfo-discard-line))
+
+(put 'itemize 'latexinfo-end 'latexinfo-end-itemize)
+(defun latexinfo-end-itemize ()
+ (setq fill-column (+ fill-column 5))
+ (latexinfo-discard-command)
+ (let ((stacktop
+ (latexinfo-pop-stack 'itemize)))
+ (latexinfo-do-itemize (nth 1 stacktop))))
+
+(put 'enumerate 'latexinfo-format 'latexinfo-enumerate)
+(defun latexinfo-enumerate ()
+ (latexinfo-push-stack 'enumerate 0)
+ (setq fill-column (- fill-column 5))
+ (latexinfo-discard-line))
+
+(put 'enumerate 'latexinfo-end 'latexinfo-end-enumerate)
+(defun latexinfo-end-enumerate ()
+ (setq fill-column (+ fill-column 5))
+ (latexinfo-discard-command)
+ (let ((stacktop
+ (latexinfo-pop-stack 'enumerate)))
+ (latexinfo-do-itemize (nth 1 stacktop))))
+
+(put 'center 'latexinfo-format 'latexinfo-format-center)
+(defun latexinfo-format-center ()
+ (latexinfo-push-stack 'center 0)
+ (latexinfo-discard-line))
+
+(put 'center 'latexinfo-end 'latexinfo-end-center)
+(defun latexinfo-end-center ()
+ (latexinfo-discard-command)
+ (let ((stacktop
+ (latexinfo-pop-stack 'center)))
+ (latexinfo-do-center (nth 1 stacktop))))
+
+(defun latexinfo-do-center (from)
+ (let ((indent-tabs-mode nil))
+ (if (not (or (eobp) (bolp))) (forward-line 1))
+ (while (progn (forward-line -1)
+ (>= (point) from))
+ (let ((indent-tabs-mode nil))
+ (center-line)))))
+
+(put 'caption 'latexinfo-format 'latexinfo-caption)
+(defun latexinfo-caption ()
+ (insert
+ (format "Table %d : %s" latexinfo-table-number
+ (latexinfo-parse-arg-discard)))
+ (center-line)
+ (goto-char latexinfo-command-start))
+
+;;; Tables and figures
+;;; & is a special character for the tabular environment.
+;;; Use \& if you want to insert an & in a table.
+(put '& 'latexinfo-format 'latexinfo-format-&)
+(defun latexinfo-format-& ()
+ (if (not (assoc 'tabular latexinfo-stack)) ; if we're not inside tabular
+ (progn
+ (latexinfo-parse-noarg)
+ (insert "&"))))
+
+
+;; Math tabular environments are ignored.
+(put 'displaymath 'latexinfo-format 'latexinfo-format-displaymath)
+(put 'displaymath 'latexinfo-end 'latexinfo-discard-command)
+(defun latexinfo-format-displaymath ()
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\\\end[ {]displaymath[ }\n]")
+ (point))))
+
+(put 'equation 'latexinfo-format 'latexinfo-format-equation)
+(put 'equation 'latexinfo-end 'latexinfo-discard-command)
+(defun latexinfo-format-equation ()
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\\\end[ {]equation[ }\n]")
+ (point))))
+
+(put 'eqnarray 'latexinfo-format 'latexinfo-format-eqnarray)
+(put 'eqnarray 'latexinfo-end 'latexinfo-discard-command)
+(defun latexinfo-format-eqnarray ()
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\\\end[ {]eqnarray[ }\n]")
+ (point))))
+
+
+(put 'array 'latexinfo-format 'latexinfo-format-array)
+(put 'array 'latexinfo-end 'latexinfo-discard-command)
+(defun latexinfo-format-array ()
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\\\end[ {]array[ }\n]")
+ (point))))
+
+
+
+;;; The tabular environment
+(put 'tabular 'latexinfo-format 'latexinfo-format-tabular)
+(put 'tabular 'latexinfo-end 'latexinfo-end-tabular)
+(defun latexinfo-format-tabular ()
+ (latexinfo-push-stack 'tabular nil)
+ (latexinfo-discard-line-with-args))
+
+(defun latexinfo-end-tabular ()
+ (latexinfo-discard-command)
+ (let ((stacktop
+ (latexinfo-pop-stack 'tabular)))
+ (latexinfo-do-tabular (nth 1 stacktop))))
+
+(put 'hline 'latexinfo-format 'latexinfo-format-hline)
+(put 'rule 'latexinfo-format 'latexinfo-format-hline)
+(defun latexinfo-format-hline ()
+ (let ((dashes (make-string fill-column ?-)))
+ (latexinfo-discard-line-with-args)
+ (if (not (bolp)) (insert "\n"))
+ (insert dashes "\n")))
+
+(defun latexinfo-do-tabular (from)
+ (let ((end (point)))
+ (save-excursion
+ (narrow-to-region from end)
+ (goto-char from)
+ (while (search-forward "&" end t)
+ (if (save-excursion
+ (forward-char -2)
+ (not (looking-at "\\\\")))
+ (progn
+ (delete-char -1)
+ (insert " "))
+ (progn
+ (delete-char -2)
+ (insert "&"))))
+ (goto-char from)
+ (quietly-replace-regexp "\\\\\\\\$" "")
+ (untabify from end)
+ ;; Give it some boundaries to protect from centering
+;; (goto-char from)
+;; (replace-regexp "^" "| ")
+ (widen)
+ )))
+
+(put 'table 'latexinfo-format 'latexinfo-format-table)
+(put 'table* 'latexinfo-format 'latexinfo-format-table)
+(put 'table 'latexinfo-end 'latexinfo-discard-command)
+(defun latexinfo-format-table ()
+ (latexinfo-discard-line-with-args)
+ (setq latexinfo-table-number (1+ latexinfo-table-number)))
+
+;; Figures are ignored for now
+(put 'figure 'latexinfo-format 'latexinfo-format-figure)
+(put 'figure* 'latexinfo-format 'latexinfo-format-figure)
+(put 'figure 'latexinfo-end 'latexinfo-discard-command)
+(defun latexinfo-format-figure ()
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\\\end[ {]figure[ }]*\n")
+ (point))))
+
+(put 'description 'latexinfo-format 'latexinfo-description)
+(defun latexinfo-description ()
+ (latexinfo-push-stack 'description "")
+ (setq fill-column (- fill-column 5))
+ (latexinfo-discard-line))
+
+(put 'description 'latexinfo-end 'latexinfo-end-description)
+(defun latexinfo-end-description ()
+ (setq fill-column (+ fill-column 5))
+ (latexinfo-discard-command)
+ (let ((stacktop
+ (latexinfo-pop-stack 'description)))
+ (latexinfo-do-itemize (nth 1 stacktop))))
+
+(put 'description 'latexinfo-item 'latexinfo-description-item)
+(defun latexinfo-description-item ()
+ (let ((arg (latexinfo-parse-arg-discard)))
+ (insert ?\b arg "\n \n"))
+ (forward-line -2))
+
+;; At the \end, indent all the lines within the construct
+;; except those marked with backspace. FROM says where
+;; construct started.
+(defun latexinfo-do-itemize (from)
+ (save-excursion
+ (while (progn (forward-line -1)
+ (>= (point) from))
+ (if (= (following-char) ?\b)
+ (save-excursion
+ (delete-char 1)
+ (end-of-line)
+ (delete-char 6))
+ (save-excursion
+ ;; not delete trailing whitespace
+ (and nil (if (looking-at "[ \t]")
+ (delete-region (point)
+ (progn (skip-chars-forward " \t")
+ (point)))))
+ (insert " "))))))
+
+(put 'item 'latexinfo-format 'latexinfo-item)
+(defun latexinfo-item ()
+ (funcall (get (car (car latexinfo-stack)) 'latexinfo-item)))
+
+(put 'itemize 'latexinfo-item 'latexinfo-itemize-item)
+(defun latexinfo-itemize-item ()
+ (latexinfo-parse-noarg)
+ (insert "\b " (nth 1 (car latexinfo-stack)) " \n")
+ (forward-line -1))
+
+(put 'enumerate 'latexinfo-item 'latexinfo-enumerate-item)
+(defun latexinfo-enumerate-item ()
+ (latexinfo-parse-noarg)
+ (let ((next (1+ (car (cdr (car latexinfo-stack))))))
+ (setcar (cdr (car latexinfo-stack)) next)
+ (insert ?\b (format "%3d. " next) ?\n))
+ (forward-line -1))
+
+
+(put 'ifinfo 'latexinfo-format 'latexinfo-discard-line)
+(put 'ifinfo 'latexinfo-end 'latexinfo-discard-command)
+
+(put 'iftex 'latexinfo-format 'latexinfo-format-iftex)
+(defun latexinfo-format-iftex ()
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\\\end[ {]iftex[ }\n]")
+ (point))))
+
+(put 'tex 'latexinfo-format 'latexinfo-format-tex)
+(defun latexinfo-format-tex ()
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\end[ {]tex[ }\n]")
+ (point))))
+
+(put 'ignore 'latexinfo-format 'latexinfo-format-ignore)
+(defun latexinfo-format-ignore ()
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\\\end[ {]ignore[ }\n]")
+ (point))))
+
+(put 'endignore 'latexinfo-format 'latexinfo-discard-line)
+
+(put 'VAR 'latexinfo-format 'latexinfo-format-var)
+(put 'var 'latexinfo-format 'latexinfo-format-var)
+(defun latexinfo-format-var ()
+ (insert (upcase (latexinfo-parse-arg-discard)))
+ (goto-char latexinfo-command-start))
+
+(put 'b 'latexinfo-format 'latexinfo-format-noop)
+(put 'r 'latexinfo-format 'latexinfo-format-noop)
+(put 'scap 'latexinfo-format 'latexinfo-format-noop)
+(put 'n 'latexinfo-format 'latexinfo-format-noop)
+(put 't 'latexinfo-format 'latexinfo-format-noop)
+(put 'i 'latexinfo-format 'latexinfo-format-noop)
+(put 'key 'latexinfo-format 'latexinfo-format-noop)
+(put 'dmn 'latexinfo-format 'latexinfo-format-noop)
+(put 'w 'latexinfo-format 'latexinfo-format-noop)
+
+(defun latexinfo-format-noop ()
+ (insert (latexinfo-parse-arg-discard))
+ (goto-char latexinfo-command-start))
+
+(put 'CODE 'latexinfo-format 'latexinfo-format-code)
+(put 'code 'latexinfo-format 'latexinfo-format-code)
+(put 'samp 'latexinfo-format 'latexinfo-format-code)
+(put 'file 'latexinfo-format 'latexinfo-format-code)
+(put 'kbd 'latexinfo-format 'latexinfo-format-code)
+(defun latexinfo-format-code ()
+ (insert "`" (latexinfo-parse-arg-discard) "'")
+ (goto-char latexinfo-command-start))
+
+(put 'emph 'latexinfo-format 'latexinfo-format-emph)
+(put 'strong 'latexinfo-format 'latexinfo-format-emph)
+(defun latexinfo-format-emph ()
+ (insert "*" (latexinfo-parse-arg-discard) "*")
+ (goto-char latexinfo-command-start))
+
+(put 'defn 'latexinfo-format 'latexinfo-format-defn)
+(put 'dfn 'latexinfo-format 'latexinfo-format-defn)
+(defun latexinfo-format-defn ()
+ (insert "\"" (latexinfo-parse-arg-discard) "\"")
+ (goto-char latexinfo-command-start))
+
+(put 'bullet 'latexinfo-format 'latexinfo-format-bullet)
+(defun latexinfo-format-bullet ()
+ (latexinfo-parse-noarg)
+ (insert "*"))
+
+(put 'smallexample 'latexinfo-format 'latexinfo-format-example)
+(put 'example 'latexinfo-format 'latexinfo-format-example)
+(put 'quotation 'latexinfo-format 'latexinfo-format-example)
+(put 'quote 'latexinfo-format 'latexinfo-format-example)
+(put 'abstract 'latexinfo-format 'latexinfo-format-example)
+(put 'display 'latexinfo-format 'latexinfo-format-example)
+(defun latexinfo-format-example ()
+ (latexinfo-push-stack 'example nil)
+ (setq fill-column (- fill-column 5))
+ (latexinfo-discard-to-eoline))
+
+(put 'smallexample 'latexinfo-end 'latexinfo-end-example)
+(put 'example 'latexinfo-end 'latexinfo-end-example)
+(put 'quotation 'latexinfo-end 'latexinfo-end-example)
+(put 'quote 'latexinfo-end 'latexinfo-end-example)
+(put 'abstract 'latexinfo-end 'latexinfo-end-example)
+(put 'display 'latexinfo-end 'latexinfo-end-example)
+(defun latexinfo-end-example ()
+ (setq fill-column (+ fill-column 5))
+ (latexinfo-discard-command)
+ (let ((stacktop
+ (latexinfo-pop-stack 'example)))
+ (latexinfo-do-itemize (nth 1 stacktop))))
+
+
+(put 'smalllisp 'latexinfo-format 'latexinfo-format-lisp)
+(put 'lisp 'latexinfo-format 'latexinfo-format-lisp)
+(defun latexinfo-format-lisp ()
+ (latexinfo-push-stack 'lisp nil)
+ (setq fill-column (- fill-column 5))
+ (latexinfo-discard-to-eoline))
+
+(put 'smalllisp 'latexinfo-end 'latexinfo-end-lisp)
+(put 'lisp 'latexinfo-end 'latexinfo-end-lisp)
+(defun latexinfo-end-lisp ()
+ (setq fill-column (+ fill-column 5))
+ (latexinfo-discard-command)
+ (let ((stacktop
+ (latexinfo-pop-stack 'lisp)))
+ (untabify (nth 1 stacktop) (point))
+ (latexinfo-do-itemize (nth 1 stacktop))))
+
+(put 'exdent 'latexinfo-format 'latexinfo-format-exdent)
+(defun latexinfo-format-exdent ()
+ (latexinfo-discard-command)
+ (delete-region (point)
+ (progn
+ (skip-chars-forward " ")
+ (point)))
+ (insert ?\b)
+ ;; Cancel out the deletion that latexinfo-do-itemize
+ ;; is going to do at the end of this line.
+ (save-excursion
+ (end-of-line)
+ (insert "\n ")))
+
+(put 'smallverbatim 'latexinfo-format 'latexinfo-format-smallverbatim)
+(put 'smallverbatim 'latexinfo-end 'latexinfo-end-smallverbatim)
+(defun latexinfo-end-smallverbatim ()
+ (error "Nested verbatim environments are not supported"))
+
+(put 'verbatim 'latexinfo-format 'latexinfo-format-verbatim)
+(defun latexinfo-format-verbatim ()
+ (latexinfo-discard-line)
+ (untabify (point)
+ (progn (re-search-forward "\\\\end{verbatim}" nil nil)
+ (point)))
+ (beginning-of-line 1)
+ (delete-region (point) (save-excursion (forward-line 1) (point))))
+
+(put 'smallverbatim 'latexinfo-format 'latexinfo-format-smallverbatim)
+(defun latexinfo-format-smallverbatim ()
+ (latexinfo-discard-line)
+ (untabify (point)
+ (progn (re-search-forward "\\\\end{smallverbatim}" nil nil)
+ (point)))
+ (beginning-of-line 1)
+ (delete-region (point) (save-excursion (forward-line 1) (point))))
+
+
+(put 'verbatimfile 'latexinfo-format 'latexinfo-format-verbatimfile)
+(defun latexinfo-format-verbatimfile ()
+ (let ((from (point)))
+ (forward-char 1)
+ (latexinfo-insert-input-files)
+ (untabify (point)
+ (progn (re-search-forward "\\\\end{verbatim}" nil nil)
+ (point)))
+ (beginning-of-line 1)
+ (delete-region (point) (save-excursion (forward-line 1) (point)))))
+
+(put 'smallverbatimfile 'latexinfo-format 'latexinfo-format-smallverbatimfile)
+(defun latexinfo-format-smallverbatimfile ()
+ (let ((from (point)))
+ (forward-char 1)
+ (latexinfo-insert-input-files)
+ (untabify (point)
+ (progn (re-search-forward "\\\\end{smallverbatim}" nil nil)
+ (point)))
+ (beginning-of-line 1)
+ (delete-region (point) (save-excursion (forward-line 1) (point)))))
+
+(put 'verbatim 'latexinfo-end 'latexinfo-end-verbatim)
+(defun latexinfo-end-verbatim ()
+ (error "Nested verbatim environments are not supported"))
+
+(put 'verb 'latexinfo-format 'latexinfo-format-verb)
+(defun latexinfo-format-verb ()
+ "Handle the LaTeX \\verb command."
+ (delete-region latexinfo-command-start latexinfo-command-end)
+ (let ((the-char (buffer-substring (point) (+ 1 (point)))))
+ (delete-char 1)
+ (skip-chars-forward (concat "^" the-char))
+ (delete-char 1)
+ )
+ )
+
+
+; The \cartouche command is a noop in Info; in a printed manual,
+; it makes a box with rounded corners.
+(put 'cartouche 'latexinfo-format 'latexinfo-discard-line)
+(put 'cartouche 'latexinfo-end 'latexinfo-discard-command)
+
+;;; flushleft and format environments
+; The flushleft environment command left justifies every line but leaves the
+; right end ragged. As far as Info is concerned, \flushleft is a
+; `do-nothing' command.
+; The \begin{format} command is similar to \begin{example} except that
+; it does not indent; this means that in Info, format is similar to flushleft.
+
+(put 'format 'latexinfo-format 'latexinfo-format-flushleft)
+(put 'flushleft 'latexinfo-format 'latexinfo-format-flushleft)
+(defun latexinfo-format-flushleft ()
+ (latexinfo-discard-line))
+
+(put 'format 'latexinfo-end 'latexinfo-end-flushleft)
+(put 'flushleft 'latexinfo-end 'latexinfo-end-flushleft)
+(defun latexinfo-end-flushleft ()
+ (latexinfo-discard-command))
+
+
+;;; \begin{flushright}
+; The \begin{flushright} command right justifies every line but leaves the
+; left end ragged. Spaces and tabs at the right ends of lines are
+; removed so that visible text lines up on the right side.
+
+(put 'flushright 'latexinfo-format 'latexinfo-format-flushright)
+(defun latexinfo-format-flushright ()
+ (latexinfo-push-stack 'flushright nil)
+ (latexinfo-discard-line))
+
+(put 'flushright 'latexinfo-end 'latexinfo-end-flushright)
+(defun latexinfo-end-flushright ()
+ (latexinfo-discard-command)
+ (let ((stacktop
+ (latexinfo-pop-stack 'flushright)))
+ (latexinfo-do-flushright (nth 1 stacktop))))
+
+(defun latexinfo-do-flushright (from)
+ (save-excursion
+ (while (progn (forward-line -1)
+ (>= (point) from))
+ (beginning-of-line)
+ (insert
+ (make-string
+ (- fill-column
+ (save-excursion
+ (end-of-line)
+ (skip-chars-backward " \t")
+ (delete-region (point) (progn (end-of-line) (point)))
+ (current-column)))
+ ? )))))
+
+(put 'beforenoterule 'latexinfo-format 'latexinfo-format-hline)
+(put 'afternoterule 'latexinfo-format 'latexinfo-format-hline)
+(put 'betweennoterule 'latexinfo-format 'latexinfo-format-hline)
+
+(put 'implementation 'latexinfo-format 'latexinfo-format-note)
+(put 'rationale 'latexinfo-format 'latexinfo-format-note)
+(put 'sideremark 'latexinfo-format 'latexinfo-format-note)
+(put 'note 'latexinfo-format 'latexinfo-format-note)
+(defun latexinfo-format-note ()
+ (latexinfo-push-stack 'example nil)
+ (setq fill-column (- fill-column 5))
+ (latexinfo-discard-line)
+)
+
+(put 'implementation 'latexinfo-end 'latexinfo-end-note)
+(put 'rationale 'latexinfo-end 'latexinfo-end-note)
+(put 'sideremark 'latexinfo-end 'latexinfo-end-note)
+(put 'note 'latexinfo-end 'latexinfo-end-note)
+(defun latexinfo-end-note ()
+ (setq fill-column (+ fill-column 5))
+ (latexinfo-discard-command)
+ (let ((stacktop
+ (latexinfo-pop-stack 'example)))
+ (latexinfo-do-itemize (nth 1 stacktop)))
+)
+
+;;; \ctrl, \TeX, \copyright, \minus, \dots
+(put 'ctrl 'latexinfo-format 'latexinfo-format-ctrl)
+(defun latexinfo-format-ctrl ()
+ (let ((str (latexinfo-parse-arg-discard)))
+ (insert "^" str)))
+ ;; (insert (logand 31 (aref str 0)))))
+
+(put 'TeX 'latexinfo-format 'latexinfo-format-TeX)
+(defun latexinfo-format-TeX ()
+ (latexinfo-parse-noarg)
+ (insert "TeX"))
+
+(put 'copyright 'latexinfo-format 'latexinfo-format-copyright)
+(defun latexinfo-format-copyright ()
+ (latexinfo-parse-noarg)
+ (insert "(C)"))
+
+(put 'minus 'latexinfo-format 'latexinfo-format-minus)
+(defun latexinfo-format-minus ()
+ (latexinfo-parse-noarg)
+ (insert "-"))
+
+(put 'DOTS 'latexinfo-format 'latexinfo-format-dots)
+(put 'dots 'latexinfo-format 'latexinfo-format-dots)
+(defun latexinfo-format-dots ()
+ (latexinfo-parse-noarg)
+ (insert "..."))
+
+;;; Refilling and indenting: \refill, \paragraphindent, \noindent
+;;; Indent only those paragraphs that are refilled as a result of an
+;;; \refill command.
+
+; * If the value is `asis', do not change the existing indentation at
+; the starts of paragraphs.
+
+; * If the value zero, delete any existing indentation.
+
+; * If the value is greater than zero, indent each paragraph by that
+; number of spaces.
+
+;;; But do not refill paragraphs with an \refill command that are
+;;; preceded by \noindent or are part of a table, list, or deffn.
+
+(defvar latexinfo-paragraph-indent "asis"
+ "Number of spaces for \\refill to indent a paragraph; else to leave as is.")
+
+(put 'paragraphindent 'latexinfo-format 'latexinfo-paragraphindent)
+(defun latexinfo-paragraphindent ()
+ "Specify the number of spaces for \refill to indent a paragraph.
+Default is to leave the number of spaces as is."
+ (let ((arg (latexinfo-parse-arg-discard)))
+ (if (string= "asis" arg)
+ (setq latexinfo-paragraph-indent "asis")
+ (setq latexinfo-paragraph-indent (string-to-int arg)))))
+
+(put 'refill 'latexinfo-format 'latexinfo-format-refill)
+(defun latexinfo-format-refill ()
+ "Refill paragraph. Also, indent first line as set by \\paragraphindent.
+Default is to leave paragraph indentation as is."
+ (latexinfo-discard-command)
+ (forward-paragraph -1)
+ (if (looking-at "[ \t\n]*$") (forward-line 1))
+ ;; Do not indent if an entry in a list, table, or deffn,
+ ;; or if paragraph is preceded by \noindent.
+ ;; Otherwise, indent
+ (cond
+ ;; delete a \\noindent line and do not indent paragraph
+ ((save-excursion (forward-line -1)
+ (looking-at "^\\\\noindent"))
+ (forward-line -1)
+ (delete-region (point) (progn (forward-line 1) (point))))
+ ;; do nothing if "asis"
+ ((equal latexinfo-paragraph-indent "asis"))
+ ;; do no indenting in list, etc.
+ ((> latexinfo-stack-depth 0))
+ ;; otherwise delete existing whitespace and indent
+ (t
+ (delete-region (point) (progn (skip-chars-forward " \t") (point)))
+ (insert (make-string latexinfo-paragraph-indent ? ))))
+ (forward-paragraph 1)
+ (forward-line -1)
+ (end-of-line)
+ (fill-paragraph nil))
+
+(put 'noindent 'latexinfo-format 'latexinfo-noindent)
+(defun latexinfo-noindent ()
+ (save-excursion
+ (forward-paragraph 1)
+ (if (search-backward "\\refill"
+ (save-excursion (forward-line -1) (point)) t)
+ () ; leave \noindent command so \refill command knows not to indent
+ ;; else
+ (latexinfo-discard-line))))
+
+
+;; Index generation
+
+(put 'vindex 'latexinfo-format 'latexinfo-format-vindex)
+(defun latexinfo-format-vindex ()
+ (latexinfo-index 'latexinfo-vindex))
+
+(put 'cindex 'latexinfo-format 'latexinfo-format-cindex)
+(defun latexinfo-format-cindex ()
+ (latexinfo-index 'latexinfo-cindex))
+
+(put 'findex 'latexinfo-format 'latexinfo-format-findex)
+(defun latexinfo-format-findex ()
+ (latexinfo-index 'latexinfo-findex))
+
+(put 'pindex 'latexinfo-format 'latexinfo-format-pindex)
+(defun latexinfo-format-pindex ()
+ (latexinfo-index 'latexinfo-pindex))
+
+(put 'tindex 'latexinfo-format 'latexinfo-format-tindex)
+(defun latexinfo-format-tindex ()
+ (latexinfo-index 'latexinfo-tindex))
+
+(put 'kindex 'latexinfo-format 'latexinfo-format-kindex)
+(defun latexinfo-format-kindex ()
+ (latexinfo-index 'latexinfo-kindex))
+
+(put 'label 'latexinfo-format 'latexinfo-format-refindex)
+(defun latexinfo-format-refindex ()
+ (latexinfo-index 'latexinfo-refindex))
+
+(defun latexinfo-index (indexvar)
+ (let ((arg (latexinfo-parse-expanded-arg)))
+ (latexinfo-discard-command)
+ ;; Delete eol if the index command is the only thing on a line
+ (if (and (eolp) (bolp) (not (eobp))) (delete-char 1))
+ (set indexvar
+ (cons (list arg
+ latexinfo-last-node
+ ;; Region formatting may not provide last node position.
+ (if latexinfo-last-node-pos
+ (1+ (count-lines latexinfo-last-node-pos (point)))
+ 1))
+ (symbol-value indexvar)))))
+
+(put 'pageref 'latexinfo-format 'latexinfo-format-ref)
+(put 'ref 'latexinfo-format 'latexinfo-format-ref)
+(defun latexinfo-format-ref ()
+ (latexinfo-format-do-ref
+ (latexinfo-parse-arg-discard) 'latexinfo-refindex))
+
+(defun latexinfo-format-do-ref (arg index)
+ (let ((entry (assoc arg (symbol-value index))))
+ (if (and entry (cdr entry) (car (cdr entry)))
+ (insert "*Note " (car (cdr entry)) "::")
+ (let ((entry (assoc arg (symbol-value
+ (intern (concat (symbol-name index) "-old"))))))
+ (if (and entry (cdr entry) (car (cdr entry)))
+ (insert "*Note " (car (cdr entry)) "::")
+ (insert "?"))))))
+
+(defconst latexinfo-indexvar-alist
+ '(("cp" . latexinfo-cindex)
+ ("fn" . latexinfo-findex)
+ ("vr" . latexinfo-vindex)
+ ("tp" . latexinfo-tindex)
+ ("pg" . latexinfo-pindex)
+ ("ky" . latexinfo-kindex)))
+
+(put 'printindex 'latexinfo-format 'latexinfo-format-printindex)
+(defun latexinfo-format-printindex ()
+ (let ((indexelts (symbol-value
+ (cdr (assoc (latexinfo-parse-arg-discard)
+ latexinfo-indexvar-alist))))
+ opoint)
+ (insert "\n* Menu:\n\n")
+ (setq opoint (point))
+ (latexinfo-print-index nil indexelts)
+ (if (eq system-type 'vax-vms)
+ (latexinfo-sort-region opoint (point))
+ (shell-command-on-region opoint (point) "sort -fd" 1))))
+
+(defun latexinfo-print-index (file indexelts)
+ (while indexelts
+ (if (stringp (car (car indexelts)))
+ (insert "* " (car (car indexelts))
+ ": " (if file (concat "(" file ")") "")
+ (nth 1 (car indexelts)) ".\n")
+ ;; index entries from \include'd file
+ (latexinfo-print-index (nth 1 (car indexelts))
+ (nth 2 (car indexelts))))
+ (setq indexelts (cdr indexelts))))
+
+
+;;;; Lisp Definitions have been moved out into the elisp style.
+
+;;; \set, \clear, \ifset, \ifclear
+
+;; If a flag is set with \set FLAG, then text between \ifset and \end
+;; ifset is formatted normally, but if the flag is is cleared with
+;; \clear FLAG, then the text is not formatted; it is ignored.
+
+;; If a flag is cleared with \clear FLAG, then text between \ifclear
+;; and \end ifclear is formatted normally, but if the flag is is set with
+;; \set FLAG, then the text is not formatted; it is ignored. \ifclear
+;; is the opposite of \ifset.
+
+(put 'clear 'latexinfo-format 'latexinfo-clear)
+(defun latexinfo-clear ()
+ "Clear the value of the flag."
+ (let ((arg (latexinfo-parse-line-arg)))
+ (if (not (boundp (intern arg)))
+ (error "\\clear flag `%s' is not defined by a \\set command." arg))
+ (latexinfo-discard-command)
+ (set (intern arg) nil)))
+
+(put 'set 'latexinfo-format 'latexinfo-set)
+(defun latexinfo-set ()
+ "Set the value of the flag."
+ (let ((arg (latexinfo-parse-arg-discard)))
+ (make-local-variable (intern arg))
+ (set (intern arg) t)))
+
+(put 'ifset 'latexinfo-end 'latexinfo-discard-command)
+(put 'ifset 'latexinfo-format 'latexinfo-if-set)
+(defun latexinfo-if-set ()
+ "If set, continue formatting; else do not format region up to \\end{ifset}"
+ (let ((arg (latexinfo-parse-line-arg)))
+ (if (not (boundp (intern arg)))
+ (error "\\ifset flag `%s' is not defined by a \\set command." arg))
+ (latexinfo-discard-command)
+ (if (symbol-value (intern arg))
+ ;; (message "%s is true." arg)
+ ()
+ ;; (message "%s is false." arg)
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\\\end[ {]ifset[ }\t]*\n")
+ (point))))))
+
+(put 'ifclear 'latexinfo-end 'latexinfo-discard-command)
+(put 'ifclear 'latexinfo-format 'latexinfo-if-clear)
+(defun latexinfo-if-clear ()
+ "If clear, do not format up to \\end{ifclear}; else continue formatting."
+ (let ((arg (latexinfo-parse-line-arg)))
+ (if (not (boundp (intern arg)))
+ (error "\\ifclear flag `%s' is not defined by a \\set command." arg))
+ (latexinfo-discard-command)
+ (if (symbol-value (intern arg))
+ (delete-region latexinfo-command-start
+ (progn (re-search-forward "\\\\end[ {]ifset[ }\t]*\n")
+ (point))))))
+
+;; process included files
+(put 'include 'latexinfo-format 'latexinfo-format-include)
+(defun latexinfo-format-include ()
+ (let ((filename (latexinfo-parse-arg-discard))
+ (default-directory input-directory)
+ subindex)
+ (setq subindex
+ (save-excursion
+ (progn (find-file
+ (cond ((file-readable-p filename)
+ filename)
+ ((file-readable-p (concat filename ".latexinfo"))
+ (concat filename ".latexinfo"))
+ ((file-readable-p (concat filename ".tex"))
+ (concat filename ".tex"))
+ ((file-readable-p filename)
+ filename)
+ (t (error "\\include'd file %s not found"
+ filename))))
+ (latexinfo-format-buffer-1))))
+ (latexinfo-subindex 'latexinfo-vindex (car subindex) (nth 1 subindex))
+ (latexinfo-subindex 'latexinfo-findex (car subindex) (nth 2 subindex))
+ (latexinfo-subindex 'latexinfo-cindex (car subindex) (nth 3 subindex))
+ (latexinfo-subindex 'latexinfo-pindex (car subindex) (nth 4 subindex))
+ (latexinfo-subindex 'latexinfo-tindex (car subindex) (nth 5 subindex))
+ (latexinfo-subindex 'latexinfo-kindex (car subindex) (nth 6 subindex))))
+
+(defun latexinfo-subindex (indexvar file content)
+ (set indexvar (cons (list 'recurse file content)
+ (symbol-value indexvar))))
+
+;; Sort an index which is in the current buffer between START and END.
+;; Used on VMS, where the `sort' utility is not available.
+(defun latexinfo-sort-region (start end)
+ (require 'sort)
+ (save-restriction
+ (narrow-to-region start end)
+ (sort-subr nil 'forward-line 'end-of-line 'latexinfo-sort-startkeyfun)))
+
+;; Subroutine for sorting an index.
+;; At start of a line, return a string to sort the line under.
+(defun latexinfo-sort-startkeyfun ()
+ (let ((line
+ (buffer-substring (point) (save-excursion (end-of-line) (point)))))
+ ;; Canonicalize whitespace and eliminate funny chars.
+ (while (string-match "[ \t][ \t]+\\|[^a-z0-9 ]+" line)
+ (setq line (concat (substring line 0 (match-beginning 0))
+ " "
+ (substring line (match-end 0) (length line)))))
+ line))
+
+;; Some cannot be handled - just ignore them and junk the line
+
+(defun latexinfo-unsupported ()
+ (message "Unsupported LaTeXinfo command: %s"
+ (buffer-substring latexinfo-command-start latexinfo-command-end))
+ (latexinfo-parse-noarg)
+ )
+
+(defun batch-latexinfo-format ()
+ "Runs latexinfo-format-buffer on the files remaining on the command line.
+Must be used only with -batch, and kills emacs on completion.
+Each file will be processed even if an error occurred previously.
+For example, invoke
+ \"emacs -batch -funcall batch-latexinfo-format $docs/ ~/*.tex\"."
+ (if (not noninteractive)
+ (error "batch-latexinfo-format may only be used -batch."))
+ (let ((version-control t)
+ (auto-save-default nil)
+ (find-file-run-dired nil)
+ (kept-old-versions 259259)
+ (kept-new-versions 259259))
+ (let ((error 0)
+ file
+ (files ()))
+ (while command-line-args-left
+ (setq file (expand-file-name (car command-line-args-left)))
+ (cond ((not (file-exists-p file))
+ (message ">> %s does not exist!" file)
+ (setq error 1
+ command-line-args-left (cdr command-line-args-left)))
+ ((file-directory-p file)
+ (setq command-line-args-left
+ (nconc (directory-files file)
+ (cdr command-line-args-left))))
+ (t
+ (setq files (cons file files)
+ command-line-args-left (cdr command-line-args-left)))))
+ (while files
+ (setq file (car files)
+ files (cdr files))
+ (condition-case err
+ (progn
+ (if buffer-file-name (kill-buffer (current-buffer)))
+ (find-file file)
+ (buffer-flush-undo (current-buffer))
+ (set-buffer-modified-p nil)
+ (latexinfo-mode)
+ (message "Latexinfo formatting %s..." file)
+ (latexinfo-format-buffer nil)
+ (if (buffer-modified-p)
+ (progn (message "Saving modified %s" (buffer-file-name))
+ (save-buffer))))
+ (error
+ (message ">> Error: %s" (prin1-to-string err))
+ (message ">> point at")
+ (let ((s (buffer-substring (point)
+ (min (+ (point) 100)
+ (point-max))))
+ (tem 0))
+ (while (setq tem (string-match "\n+" s tem))
+ (setq s (concat (substring s 0 (match-beginning 0))
+ "\n>> "
+ (substring s (match-end 0)))
+ tem (1+ tem)))
+ (message ">> %s" s)))
+ (setq error 1)))
+ (kill-emacs error))))
+
+;;; LaTeX additions
+
+(defun latexinfo-run-documentstyle-hooks ()
+ "Foreach \\documentstyle-argument DOCSTYLE, look for DOCSTYLE-fmt.[el,elc]
+in the current directory or load-path. If DOCSTYLE-fmt-hook is bound, run it."
+ (goto-char (point-min))
+ (search-forward "\\documentstyle")
+ (if (looking-at "\\[")
+ (let ((begin (1+ (point)))
+ (end (save-excursion (search-forward "]") (point)))
+ (options-list nil))
+ (if (null latexinfo-formats-directory)
+ (setq latexinfo-formats-directory default-directory))
+ (while (re-search-forward ",\\|]" end t)
+ (setq options-list (cons (buffer-substring begin (1- (point)))
+ options-list))
+ (setq begin (point)))
+ (setq options-list (nreverse options-list))
+ (while options-list
+ (let ((option (car options-list))
+ (filename nil))
+ (if (not (memq (intern option) latexinfo-known-document-styles))
+ (progn
+ (message "Checking formatting option %s" option) ;(sit-for 2)
+ (if (load (concat option "-fmt") t) ; dont report errors
+ (let ((option-symbol
+ (intern (concat option "-fmt-hook"))))
+ (if (fboundp option-symbol)
+ (progn
+ (message "Running %s formatting hooks" option)
+ (sit-for 1)
+ (funcall option-symbol)))
+ (message (concat "Done loading file %s" option))
+ ; (sit-for 1) ; we want it fast
+ )
+ (message (concat option "-fmt not found"))
+ )
+ )
+ )
+ (setq options-list (cdr options-list)))))))
+
+(put 'BACK 'latexinfo-format 'latexinfo-format-backslash)
+(put 'back 'latexinfo-format 'latexinfo-format-backslash)
+(defun latexinfo-format-backslash ()
+ "replace \\back by \\"
+ (latexinfo-parse-noarg)
+ (insert "\\"))
+
+(put 'same 'latexinfo-format 'latexinfo-discard-command)
+(put 'same 'latexinfo-end 'latexinfo-discard-command)
+
+(put 'cite 'latexinfo-format 'latexinfo-format-cite)
+(defun latexinfo-format-cite ()
+ (if (looking-at "[\\[]")
+ (save-excursion
+ (let ((here (point)) (str nil))
+ (forward-sexp 1)
+ (setq str (buffer-substring (1+ here) (- (point) 1)))
+ (delete-region here (point))
+ (if (eolp) (delete-char 1))
+ (insert "[" (latexinfo-parse-arg-discard) ", " str "]")))
+ (insert "[" (latexinfo-parse-arg-discard) "]"))
+ (goto-char latexinfo-command-start))
+
+(put 'hfill 'latexinfo-format 'latexinfo-format-hfill)
+(defun latexinfo-format-hfill ()
+ (latexinfo-parse-arg-discard)
+ (insert-char ?\ (- fill-column
+ (save-excursion
+ (end-of-line 1)
+ (current-column)))))
+
+(put 'S 'latexinfo-format 'latexinfo-format-S)
+(defun latexinfo-format-S ()
+ (latexinfo-parse-noarg)
+ (insert "Section"))
+
+;;; Some European support
+
+;;; \ss
+(put 'ss 'latexinfo-format 'latexinfo-format-ss)
+(defun latexinfo-format-ss ()
+ (latexinfo-parse-noarg)
+ (insert "ss"))
+
+(put 'LaTeX 'latexinfo-format 'latexinfo-format-LaTeX)
+(defun latexinfo-format-LaTeX ()
+ (latexinfo-parse-noarg)
+ (insert "LaTeX"))
+
+(put 'BibTeX 'latexinfo-format 'latexinfo-format-BibTeX)
+(defun latexinfo-format-BibTeX ()
+ (latexinfo-parse-noarg)
+ (insert "BibTeX"))
+
+(put 'arrow 'latexinfo-format 'latexinfo-format-arrow)
+(put 'result 'latexinfo-format 'latexinfo-format-arrow)
+(defun latexinfo-format-arrow ()
+ (latexinfo-parse-noarg)
+ (insert "=> "))
+
+(put 'leq 'latexinfo-format 'latexinfo-format-leq)
+(defun latexinfo-format-leq ()
+ (latexinfo-parse-noarg)
+ (insert "<="))
+
+(put 'geq 'latexinfo-format 'latexinfo-format-geq)
+(defun latexinfo-format-geq ()
+ (latexinfo-parse-noarg)
+ (insert ">="))
+
+(put 'pi 'latexinfo-format 'latexinfo-format-pi)
+(defun latexinfo-format-pi ()
+ (latexinfo-parse-noarg)
+ (insert "pi"))
+
+(put 'quad 'latexinfo-format 'latexinfo-format-quad)
+(defun latexinfo-format-quad ()
+ (latexinfo-parse-noarg)
+ (insert " "))
+
+(put 'qquad 'latexinfo-format 'latexinfo-format-qquad)
+(defun latexinfo-format-qquad ()
+ (latexinfo-parse-noarg)
+ (insert " "))
+
+(put 'pm 'latexinfo-format 'latexinfo-format-pm)
+(defun latexinfo-format-pm ()
+ (latexinfo-parse-noarg)
+ (insert "+/-"))
+
+;;; Glyphs: \equiv, \error, etc
+
+;; \equiv to show that two expressions are equivalent
+;; \error to show an error message
+;; \expansion to show what a macro expands to
+;; \point to show the location of point in an example
+;; \print to show what an evaluated expression prints
+;; \result to indicate the value returned by an expression
+
+(put 'equiv 'latexinfo-format 'latexinfo-format-equiv)
+(defun latexinfo-format-equiv ()
+ "Indicate the exact equivalence of two forms; special glyph: =="
+ (latexinfo-parse-noarg)
+ (insert "=="))
+
+(put 'error 'latexinfo-format 'latexinfo-format-error)
+(defun latexinfo-format-error ()
+ "Indicate that the following text is an error message: error-->"
+ (latexinfo-parse-noarg)
+ (insert "error-->"))
+
+(put 'expansion 'latexinfo-format 'latexinfo-format-expansion)
+(defun latexinfo-format-expansion ()
+ "Indicate the result of a macro expansion; special glyph: ==>"
+ (latexinfo-parse-noarg)
+ (insert "==>"))
+
+(put 'point 'latexinfo-format 'latexinfo-format-point)
+(defun latexinfo-format-point ()
+ "Indicate the position of point; special glyph: -!-"
+ (latexinfo-parse-noarg)
+ (insert "-!-"))
+
+(put 'print 'latexinfo-format 'latexinfo-format-print)
+(defun latexinfo-format-print ()
+ "Indicate printed output; special glyph: -|"
+ (latexinfo-parse-noarg)
+ (insert "-|"))
+
+
+(put 'c 'latexinfo-format 'latexinfo-discard-commment-line)
+(put 'comment 'latexinfo-format 'latexinfo-discard-commment-line)
+(defun latexinfo-discard-commment-line ()
+ "Discards commment lines, but tries to be more TeX like by deleting
+the following whitespace."
+ (latexinfo-discard-line-with-args)
+ (latexinfo-delete-whitespace)
+ )
+
+;; Lots of bolio constructs do nothing in latexinfo.
+(defun latexinfo-discard-line-with-args ()
+ (goto-char latexinfo-command-start)
+ (delete-region (point) (progn (forward-line 1) (point))))
+
+(put 'need 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'newindex 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'synindex 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'syncodeindex 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'parindent 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'lispnarrowing 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'itemindent 'latexinfo-format 'latexinfo-discard-line-with-args)
+
+(put 'PROTECT 'latexinfo-format 'latexinfo-parse-protected-argument)
+(put 'protect 'latexinfo-format 'latexinfo-parse-protected-argument)
+(defun latexinfo-parse-protected-argument ()
+ ;; TeX gobbles the next whitespace.
+ (goto-char latexinfo-command-end)
+ (latexinfo-delete-whitespace)
+ (cond ((looking-at "{")
+ (setq latexinfo-command-end
+ (save-excursion
+ (forward-sexp 1) (point))))
+ )
+ (insert (prog1 (buffer-substring (1+ (point)) (1- latexinfo-command-end))
+ (latexinfo-delete-command)))
+ )
+
+(put 'protect 'latexinfo-format 'latexinfo-parse-noarg)
+(put 'PROTECT 'latexinfo-format 'latexinfo-parse-noarg)
+
+;; LaTeX noops
+(put 'hsize 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'clearpage 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'newpage 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'includeonly 'latexinfo-format 'latexinfo-discard-line-with-args)
+
+(put 'cleardoublepage 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'tableofcontents 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'listoftables 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'listoffigures 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'vspace 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'vspace* 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'markboth 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'markright 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'index 'latexinfo-format 'latexinfo-parse-arg-discard)
+(put 'bibliographystyle 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'pagestyle 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'pagenumbering 'latexinfo-format 'latexinfo-discard-line-with-args)
+(put 'part 'latexinfo-format 'latexinfo-discard-line-with-args)
+
+(put 'cpsubindex 'latexinfo-format 'latexinfo-discard-line-with-args)
+
+;;; Catchall for latexinfo-format-region
+(put 'documentstyle 'latexinfo-format 'latexinfo-discard-line-with-args)
+
+;;; Titlepage commands
+
+;; Author
+(put 'author 'latexinfo-format 'latexinfo-format-author)
+(defun latexinfo-format-author ()
+ (latexinfo-format-atd "author"))
+
+(put 'and 'latexinfo-format 'latexinfo-format-and)
+;; This should really only be valid in titles.
+(defun latexinfo-format-and ()
+ (latexinfo-parse-noarg)
+ (insert ?\n))
+
+;; title
+(put 'title 'latexinfo-format 'latexinfo-format-title)
+(defun latexinfo-format-title ()
+ (latexinfo-format-atd "title"))
+
+(put 'date 'latexinfo-format 'latexinfo-format-date)
+(defun latexinfo-format-date ()
+ (latexinfo-format-atd "date"))
+
+(defun latexinfo-format-atd (atd)
+ (delete-region latexinfo-command-start latexinfo-command-end)
+ (latexinfo-push-stack 'center 0)
+ (if (looking-at "{")
+ (save-excursion
+ (let ((here (point)) (str nil))
+ (forward-sexp 1)
+ (delete-char -1)
+ (insert ?\n "\\end{center}")
+ (goto-char here)
+ (delete-char 1))
+ (goto-char latexinfo-command-start))
+ (error "No argument specified to the %s command" atd))
+ )
+
+;;\today
+(put 'today 'latexinfo-format 'latexinfo-format-today)
+(defun latexinfo-format-today ()
+ (delete-region latexinfo-command-start latexinfo-command-end)
+ (let* ((date-string (current-time-string))
+ (month-alist '(("Jan" . "January") ("Feb" . "February")
+ ("Mar" . "March") ("Apr" . "April")
+ ("May" . "May") ("Jun" . "June")
+ ("Jul" . "July") ("Aug" . "August")
+ ("Sep" . "September") ("Oct" . "October")
+ ("Nov" . "November") ("Dec" . "December")))
+ )
+ (string-match "\\(...\\) \\(...\\) \\(..\\).*\\(19..\\)"
+ (current-time-string) nil)
+ (insert
+ (concat (cdr (assoc (substring date-string
+ (match-beginning 2) (match-end 2))
+ month-alist))
+ " " (substring date-string (match-beginning 3) (match-end 3))
+ ", " (substring date-string (match-beginning 4) (match-end 4))
+ ))
+ )
+ )
+
+(put 'maketitle 'latexinfo-format 'latexinfo-format-maketitle)
+(defun latexinfo-format-maketitle ()
+ (latexinfo-parse-noarg))
+
+(put 'finalout 'latexinfo-format 'latexinfo-format-finalout)
+(defun latexinfo-format-finalout ()
+ (latexinfo-parse-noarg))
+
+(put 'sloppy 'latexinfo-format 'latexinfo-format-sloppy)
+(defun latexinfo-format-sloppy ()
+ (latexinfo-parse-noarg))
+
+;;; Bibliography
+(put 'bibliography 'latexinfo-format 'latexinfo-format-bibliography)
+(defun latexinfo-format-bibliography ()
+ (let* ((arg (latexinfo-parse-arg-discard))
+ (latexinfo-bbl-filename (expand-file-name (concat arg ".bbl")))
+ (here (point)))
+ (eat-sexp)
+ ;; This should be a chapter or a section.
+ (insert "\\chapter*{References}" ?\n ?\n)
+ (if (file-exists-p latexinfo-bbl-filename)
+ (progn
+ (insert-file latexinfo-bbl-filename)
+ (exchange-point-and-mark)
+ (narrow-to-region here (point))
+ (goto-char (point-min))
+ (quietly-replace-string "{\\em " "\\var{")
+ (goto-char (point-min))
+ (quietly-replace-string "{\\it " "\\emph{")
+ (goto-char (point-min))
+ (quietly-replace-string "{ " "\\r{")
+ (widen)
+ (goto-char latexinfo-command-start)
+ )
+ (message "Formatted bibliography file not found: %s" latexinfo-bbl-filename))
+ )
+ )
+
+(put 'thebibliography 'latexinfo-format 'latexinfo-thebibliography)
+(defun latexinfo-thebibliography ()
+ (if (looking-at "}") (forward-char 1))
+ (eat-sexp)
+ (latexinfo-push-stack 'description "")
+ (setq fill-column (- fill-column 5))
+ (latexinfo-discard-line))
+
+(put 'thebibliography 'latexinfo-end 'latexinfo-end-description)
+(put 'bibitem 'latexinfo-format 'latexinfo-description-bibitem)
+(defun latexinfo-description-bibitem ()
+ (if (looking-at "}") (forward-char 1))
+ (eat-sexp)
+ (let ((arg (latexinfo-parse-arg-discard)))
+ (insert ?\b arg "\n \n"))
+ (forward-line -2))
+
+(put 'newblock 'latexinfo-format 'latexinfo-parse-noarg)
+
+(defun eat-sexp ()
+ (delete-region (point) (save-excursion (forward-sexp 1) (point))))
+
+(provide 'latexinfo)
+
+;;; Shut Emacs up about setting the mark.
+(defun quietly-replace-string (from-string to-string &optional delimited)
+ "\
+Replace occurrences of FROM-STRING with TO-STRING.
+Preserve case in each match if case-replace and case-fold-search
+are non-nil and FROM-STRING has no uppercase letters.
+Third arg DELIMITED (prefix arg if interactive) non-nil means replace
+only matches surrounded by word boundaries."
+ (quietly-perform-replace from-string to-string nil nil delimited)
+ )
+
+(defun quietly-replace-regexp (regexp to-string &optional delimited)
+ "\
+Replace things after point matching REGEXP with TO-STRING.
+Preserve case in each match if case-replace and case-fold-search
+are non-nil and REGEXP has no uppercase letters.
+Third arg DELIMITED (prefix arg if interactive) non-nil means replace
+only matches surrounded by word boundaries.
+In TO-STRING, \\& means insert what matched REGEXP,
+and \\=\\<n> means insert what matched <n>th \\(...\\) in REGEXP."
+ (quietly-perform-replace regexp to-string nil t delimited)
+ )
+
+
+(defun quietly-push-mark (&optional location nomsg)
+ "Set mark at LOCATION (point, by default) and push old mark on mark ring.
+Displays \"Mark set\" unless the optional second arg NOMSG is non-nil."
+ (if (null (mark))
+ nil
+ (setq mark-ring (cons (copy-marker (mark-marker)) mark-ring))
+ (if (> (length mark-ring) mark-ring-max)
+ (progn
+ (move-marker (car (nthcdr mark-ring-max mark-ring)) nil)
+ (setcdr (nthcdr (1- mark-ring-max) mark-ring) nil))))
+ (set-mark (or location (point)))
+ )
+
+
+(defun quietly-perform-replace (from-string to-string
+ query-flag regexp-flag delimited-flag)
+ (let ((nocasify (not (and case-fold-search case-replace
+ (string-equal from-string
+ (downcase from-string)))))
+ (literal (not regexp-flag))
+ (search-function (if regexp-flag 're-search-forward 'search-forward))
+ (search-string from-string)
+ (keep-going t)
+ (lastrepl nil)) ;Position after last match considered.
+ (if delimited-flag
+ (setq search-function 're-search-forward
+ search-string (concat "\\b"
+ (if regexp-flag from-string
+ (regexp-quote from-string))
+ "\\b")))
+ (quietly-push-mark (point) t)
+ (quietly-push-mark (point) t)
+ (while (and keep-going
+ (not (eobp))
+ (progn
+ (set-mark (point))
+ (funcall search-function search-string nil t)))
+ ;; Don't replace the null string
+ ;; right after end of previous replacement.
+ (if (eq lastrepl (point))
+ (forward-char 1)
+ (undo-boundary)
+ (if (not query-flag)
+ (replace-match to-string nocasify literal)
+ (let (done replaced)
+ (while (not done)
+ ;; Preserve the match data. Process filters and sentinels
+ ;; could run inside read-char..
+ (let ((data (match-data))
+ (help-form
+ '(concat "Query replacing "
+ (if regexp-flag "regexp " "")
+ from-string " with " to-string ".\n\n"
+ (substitute-command-keys query-replace-help))))
+ (setq char help-char)
+ (while (= char help-char)
+ (message "Query replacing %s with %s: " from-string to-string)
+ (setq char (read-char))
+ (if (= char ??)
+ (setq unread-command-char help-char char help-char)))
+ (store-match-data data))
+ (cond ((or (= char ?\e)
+ (= char ?q))
+ (setq keep-going nil)
+ (setq done t))
+ ((= char ?^)
+ (goto-char (mark))
+ (setq replaced t))
+ ((or (= char ?\ )
+ (= char ?y))
+ (or replaced
+ (replace-match to-string nocasify literal))
+ (setq done t))
+ ((= char ?\.)
+ (or replaced
+ (replace-match to-string nocasify literal))
+ (setq keep-going nil)
+ (setq done t))
+ ((= char ?\,)
+ (if (not replaced)
+ (progn
+ (replace-match to-string nocasify literal)
+ (setq replaced t))))
+ ((= char ?!)
+ (or replaced
+ (replace-match to-string nocasify literal))
+ (setq done t query-flag nil))
+ ((or (= char ?\177)
+ (= char ?n))
+ (setq done t))
+ ((= char ?\C-l)
+ (recenter nil))
+ ((= char ?\C-r)
+ (store-match-data
+ (prog1 (match-data)
+ (save-excursion (recursive-edit)))))
+ ((= char ?\C-w)
+ (delete-region (match-beginning 0) (match-end 0))
+ (store-match-data
+ (prog1 (match-data)
+ (save-excursion (recursive-edit))))
+ (setq replaced t))
+ (t
+ (setq keep-going nil)
+ (setq unread-command-char char)
+ (setq done t))))))
+ (setq lastrepl (point))))
+ (pop-mark)
+ keep-going))
+
+
+;; The overall process is one of:
+;; (latexinfo-insert-node-lines (point-min) (point-max) t)
+;; (mark-whole-buffer)
+;; (latexinfo-sequential-node-update t)
+;; (latexinfo-all-menus-update)
+;; (latexinfo-master-menu nil)
+;; (latexinfo-format-buffer t) \ No newline at end of file
diff --git a/macros/latex209/contrib/latexinfo/elisp/latexnfo-mde.el b/macros/latex209/contrib/latexinfo/elisp/latexnfo-mde.el
new file mode 100644
index 0000000000..a96a5ea7be
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/latexnfo-mde.el
@@ -0,0 +1,583 @@
+;;;; latexnfo-mode.el
+
+;;; Major mode for editing Latexinfo files.
+
+;;; Robert J. Chassell
+;;; Converted to LaTeXinfo by Mike Clarkson
+;;; Please send bug reports to: mike@apl.ists.ca
+
+;; Copyright (C) 1985, 1988, 1989, 1990, 1991 Free Software Foundation, Inc.
+;; Copyleft (C) 1988, 1989, 1990, 1991 Michael E. Clarkson
+
+
+;;; This file is not a part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 1, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+;;; Autoloads
+
+(autoload 'latexinfo-format-region
+ "latexinfo"
+ "Convert the current region of the Latexinfo file to Info format.
+This lets you see what that part of the file will look like in Info.
+The command is bound to \\[latexinfo-format-region]. The text that is
+converted to Info is stored in a temporary buffer."
+ t nil)
+
+(autoload 'latexinfo-format-buffer
+ "latexinfo"
+ "Process the current buffer as latexinfo code, into an Info file.
+The Info file output is generated in a buffer visiting the Info file
+names specified in the \\setfilename command.
+
+Non-nil argument (prefix, if interactive) means don't make tag table
+and don't split the file if large. You can use Info-tagify and
+Info-split to do these manually."
+ t nil)
+
+(autoload 'kill-compilation
+ "compile"
+ "Kill the process made by the \\[compile] command."
+ t nil)
+
+(autoload 'latexinfo-latex-region
+ "latexnfo-tex"
+ "Run latex on the current region.
+
+A temporary file is written in the default directory, and LaTeX is run
+in that directory. The first line of the file is copied to the
+temporary file; and if the buffer has a header, it is written to the
+temporary file before the region itself. The buffer's header is all
+lines between the strings defined by latexinfo-start-of-header and
+latexinfo-end-of-header inclusive. The header must start in the first 100
+lines. The value of latexinfo-latex-trailer is appended to the temporary file
+after the region."
+ t nil)
+
+(autoload 'latexinfo-latex-buffer
+ "latexnfo-tex"
+ "Run LaTeX on current buffer.
+After running LaTeX the first time, you may have to run \\[latexinfo-latexindex]
+and then \\[latexinfo-latex-buffer] again."
+ t nil)
+
+(autoload 'latexinfo-kill-latex-job
+ "latexnfo-tex"
+ "Kill the currently running LaTeX job."
+ t nil)
+
+(autoload 'latexinfo-recenter-latex-output-buffer
+ "latexnfo-tex"
+ "Redisplay buffer of LaTeX job output so that most recent output can be seen.
+The last line of the buffer is displayed on
+line LINE of the window, or centered if LINE is nil."
+ t nil)
+
+(autoload 'latexinfo-delete-from-latex-print-queue
+ "latexnfo-tex"
+ "Delete job from the line printer spooling queue.
+You are prompted for the job number (shown by a previous
+\\[latexinfo-show-latex-print-queue] command."
+ t nil)
+
+(autoload 'latexinfo-show-latex-print-queue
+ "latexnfo-tex"
+ "Show the print queue that \\[latexinfo-latex-print] put your job on.
+Runs the shell command defined by latexinfo-show-latex-queue-command."
+ t nil)
+
+(autoload 'latexinfo-latex-print
+ "latexnfo-tex"
+ "Print .dvi file made by \\[latexinfo-latex-region] or \\[latexinfo-latex-buffer].
+Runs the shell command defined by latexinfo-latex-dvi-print-command."
+ t nil)
+
+(autoload 'latexinfo-latexindex
+ "latexnfo-tex"
+ "Run latexindex on unsorted index files.
+The index files are made by \\[latexinfo-latex-region] or \\[latexinfo-latex-buffer].
+Runs the shell command defined by latexinfo-latexindex-command."
+ t nil)
+
+(autoload 'latexinfo-make-menu
+ "latexnfo-upd"
+ "Without any prefix argument, make or update a menu.
+Make the menu for the section enclosing the node found following point.
+
+Non-nil argument (prefix, if interactive) means make or update menus
+for nodes within or part of the marked region.
+
+Whenever a menu exists, and is being updated, the descriptions that
+are associated with node names in the pre-existing menu are
+incorporated into the new menu. Otherwise, the nodes' section titles
+are inserted as descriptions."
+ t nil)
+
+(autoload 'latexinfo-update-node
+ "latexnfo-upd"
+ "Without any prefix argument, update the node in which point is located.
+Non-nil argument (prefix, if interactive) means update the nodes in the
+marked region.
+
+The functions for creating or updating nodes and menus, and their
+keybindings, are:
+
+ latexinfo-update-node (&optional region-p) \\[latexinfo-update-node]
+ latexinfo-every-node-update () \\[latexinfo-every-node-update]
+ latexinfo-sequential-node-update (&optional region-p)
+
+ latexinfo-make-menu (&optional region-p) \\[latexinfo-make-menu]
+ latexinfo-all-menus-update () \\[latexinfo-all-menus-update]
+ latexinfo-master-menu ()
+
+ latexinfo-indent-menu-description (column &optional region-p)
+
+The `latexinfo-column-for-description' variable specifies the column to
+which menu descriptions are indented. Its default value is 24."
+ t nil)
+
+(autoload 'latexinfo-every-node-update
+ "latexnfo-upd"
+ "Update every node in a Latexinfo file."
+ t nil)
+
+(autoload 'latexinfo-all-menus-update
+ "latexnfo-upd"
+ "Update every regular menu in a Latexinfo file.
+Remove pre-existing master menu, if there is one.
+
+If called with a non-nil argument, this function first updates all the
+nodes in the buffer before updating the menus."
+ t nil)
+
+(autoload 'latexinfo-master-menu
+ "latexnfo-upd"
+ "Make a master menu for a whole Latexinfo file.
+Non-nil argument (prefix, if interactive) means first update all
+existing nodes and menus. Remove pre-existing master menu, if there is one.
+
+This function creates a master menu that follows the top node. The
+master menu includes every entry from all the other menus. It
+replaces any existing ordinary menu that follows the top node.
+
+If called with a non-nil argument, this function first updates all the
+menus in the buffer (incorporating descriptions from pre-existing
+menus) before it constructs the master menu.
+
+The function removes the detailed part of an already existing master
+menu. This action depends on the pre-exisitng master menu using the
+standard `latexinfo-master-menu-header'.
+
+The master menu has the following format, which is adapted from the
+recommendation in the Latexinfo Manual:
+
+ * The first part contains the major nodes in the Latexinfo file: the
+ nodes for the chapters, chapter-like sections, and the major
+ appendices. This includes the indices, so long as they are in
+ chapter-like sections, such as chapter* sections.
+
+ * The second and subsequent parts contain a listing of the other,
+ lower level menus, in order. This way, an inquirer can go
+ directly to a particular node if he or she is searching for
+ specific information.
+
+Each of the menus in the detailed node listing is introduced by the
+title of the section containing the menu."
+ t nil)
+
+(autoload 'latexinfo-indent-menu-description
+ "latexnfo-upd"
+ "Indent every description in menu following point to COLUMN.
+Non-nil argument (prefix, if interactive) means indent every
+description in every menu in the region. Does not indent second and
+subsequent lines of a multi-line description."
+ t nil)
+
+(autoload 'latexinfo-sequential-node-update
+ "latexnfo-upd"
+ "Update one node (or many) in a Latexinfo file with sequential pointers.
+
+This function causes the `Next' or `Previous' pointer to point to the
+immediately preceding or following node, even if it is at a higher or
+lower hierarchical level in the document. Continually pressing `n' or
+`p' takes you straight through the file.
+
+Without any prefix argument, update the node in which point is located.
+Non-nil argument (prefix, if interactive) means update the nodes in the
+marked region.
+
+This command makes it awkward to navigate among sections and
+subsections; it should be used only for those documents that are meant
+to be read like a novel rather than a reference, and for which the
+Info `g*' command is inadequate."
+ t nil)
+
+(autoload 'latexinfo-insert-node-lines
+ "latexnfo-upd"
+ "Insert missing `\\node' lines in region of Latexinfo file.
+Non-nil argument (prefix, if interactive) means also to insert the
+section titles as node names; and also to insert the section titles as
+node names in pre-existing \\node lines that lack names."
+ t nil)
+
+(autoload 'latexinfo-multiple-files-update
+ "latexnfo-upd"
+ "Update first node pointers in each file included in OUTER-FILE;
+create or update main menu in the outer file that refers to such nodes.
+This does not create or update menus or pointers within the included files.
+
+With optional MAKE-MASTER-MENU argument (prefix arg, if interactive),
+insert a master menu in OUTER-FILE. This does not create or update
+menus or pointers within the included files.
+
+With optional UPDATE-EVERYTHING argument (numeric prefix arg, if
+interactive), update all the menus and all the `Next', `Previous', and
+`Up' pointers of all the files included in OUTER-FILE before inserting
+a master menu in OUTER-FILE.
+
+The command also updates the `Top' level node pointers of OUTER-FILE.
+
+Notes:
+
+ * this command does NOT save any files--you must save the
+ outer file and any modified, included files.
+
+ * except for the `Top' node, this command does NOT handle any
+ pre-existing nodes in the outer file; hence, indices must be
+ enclosed in an included file.
+
+Requirements:
+
+ * each of the included files must contain exactly one highest
+ hierarchical level node,
+ * this highest node must be the first node in the included file,
+ * each highest hierarchical level node must be of the same type.
+
+Thus, normally, each included file contains one, and only one,
+chapter."
+ t nil)
+
+
+;;; Syntax table
+
+(defvar latexinfo-mode-syntax-table nil)
+
+(if latexinfo-mode-syntax-table
+ nil
+ (setq latexinfo-mode-syntax-table (make-syntax-table))
+ (modify-syntax-entry ?\" " " latexinfo-mode-syntax-table)
+ (modify-syntax-entry ?@ "w" latexinfo-mode-syntax-table)
+ (modify-syntax-entry ?\\ "\\" latexinfo-mode-syntax-table)
+ (modify-syntax-entry ?\^q "\\" latexinfo-mode-syntax-table)
+ (modify-syntax-entry ?\[ "(]" latexinfo-mode-syntax-table)
+ (modify-syntax-entry ?\] ")[" latexinfo-mode-syntax-table)
+ (modify-syntax-entry ?{ "(}" latexinfo-mode-syntax-table)
+ (modify-syntax-entry ?} "){" latexinfo-mode-syntax-table)
+ (modify-syntax-entry ?$ "w" latexinfo-mode-syntax-table)
+ (modify-syntax-entry ?\' "w" latexinfo-mode-syntax-table))
+
+
+;;; Keybindings
+(defvar latexinfo-mode-map nil)
+
+;;; Keys common both to Latexinfo mode and to LaTeX shell.
+
+(defun latexinfo-define-common-keys (keymap)
+ "Define the keys both in Latexinfo mode and in the latexinfo-latex-shell."
+ (define-key keymap "\C-c\C-t\C-k" 'latexinfo-kill-latex-job)
+ (define-key keymap "\C-c\C-t\C-x" 'latexinfo-quit-latex-job)
+ (define-key keymap "\C-c\C-t\C-l" 'latexinfo-recenter-latex-output-buffer)
+ (define-key keymap "\C-c\C-t\C-d" 'latexinfo-delete-from-latex-print-queue)
+ (define-key keymap "\C-c\C-t\C-q" 'latexinfo-show-latex-print-queue)
+ (define-key keymap "\C-c\C-t\C-p" 'latexinfo-latex-print)
+ (define-key keymap "\C-c\C-t\C-i" 'latexinfo-latexindex)
+
+ (define-key keymap "\C-c\C-t\C-r" 'latexinfo-latex-region)
+ (define-key keymap "\C-c\C-t\C-b" 'latexinfo-latex-buffer))
+
+;; Mode documentation displays commands in reverse order
+;; from how they are listed in the latexinfo-mode-map.
+
+(if latexinfo-mode-map
+ nil
+ (setq latexinfo-mode-map (make-sparse-keymap))
+
+ ;; bindings for `latexnfo-tex.el'
+ (latexinfo-define-common-keys latexinfo-mode-map)
+
+ ;; bindings for `latexinfmt.el'
+ (define-key latexinfo-mode-map "\C-c\C-e\C-r" 'latexinfo-format-region)
+ (define-key latexinfo-mode-map "\C-c\C-e\C-b" 'latexinfo-format-buffer)
+
+ ;; bindings for updating nodes and menus
+
+ (define-key latexinfo-mode-map "\C-c\C-um" 'latexinfo-master-menu)
+
+ (define-key latexinfo-mode-map "\C-c\C-u\C-m" 'latexinfo-make-menu)
+ (define-key latexinfo-mode-map "\C-c\C-u\C-n" 'latexinfo-update-node)
+ (define-key latexinfo-mode-map "\C-c\C-u\C-e" 'latexinfo-every-node-update)
+ (define-key latexinfo-mode-map "\C-c\C-u\C-a" 'latexinfo-all-menus-update)
+ (define-key latexinfo-mode-map "\C-c\C-u\C-i" 'latexinfo-insert-node-lines)
+ (define-key latexinfo-mode-map "\C-c\C-u\C-f" 'latexinfo-multiple-files-update)
+ (define-key latexinfo-mode-map "\C-c\C-u\C-d" 'latexinfo-indent-menu-description)
+ (define-key latexinfo-mode-map "\C-c\C-u\C-s" 'latexinfo-sequential-node-update)
+ (define-key latexinfo-mode-map "\C-c\C-s" 'latexinfo-show-structure)
+
+ (define-key latexinfo-mode-map "\C-c\C-c}" 'up-list)
+ (define-key latexinfo-mode-map "\C-c\C-c{" 'latexinfo-insert-braces)
+
+ ;; bindings for inserting strings
+
+ (define-key latexinfo-mode-map "\C-c\C-cv" 'latexinfo-insert-var)
+ (define-key latexinfo-mode-map "\C-c\C-cs" 'latexinfo-insert-samp)
+ (define-key latexinfo-mode-map "\C-c\C-co" 'latexinfo-insert-noindent)
+ (define-key latexinfo-mode-map "\C-c\C-cn" 'latexinfo-insert-node)
+ (define-key latexinfo-mode-map "\C-c\C-ck" 'latexinfo-insert-kbd)
+ (define-key latexinfo-mode-map "\C-c\C-ci" 'latexinfo-insert-item)
+ (define-key latexinfo-mode-map "\C-c\C-cx" 'latexinfo-insert-example)
+ (define-key latexinfo-mode-map "\C-c\C-ce" 'latexinfo-insert-end)
+ (define-key latexinfo-mode-map "\C-c\C-cd" 'latexinfo-insert-dfn)
+ (define-key latexinfo-mode-map "\C-c\C-cc" 'latexinfo-insert-code))
+
+
+;;; Latexinfo mode
+
+;; also defined in latexnfo-upd.el
+(defvar latexinfo-chapter-level-regexp
+ "chapter\\|chapter\\*\\|unnumbered"
+ "*Regexp matching chapter-level headings (but not the top node).")
+
+(defun latexinfo-mode ()
+ "Major mode for editing Latexinfo files.
+
+ It has these extra commands:
+\\{latexinfo-mode-map}
+
+ These are files that are used as input for LaTeX to make printed manuals
+and also to be turned into Info files by \\[latexinfo-format-buffer].
+These files are written in a version of LaTeX input format.
+
+ Editing commands are like text-mode except that the syntax table is
+set up so expression commands skip Latexinfo bracket groups. To see
+what the Info version of a region of the Latexinfo file will look like,
+use \\[latexinfo-format-region]. This command runs Info on the current region
+of the Latexinfo file and formats it properly.
+
+ You can show the structure of a Latexinfo file with \\[latexinfo-show-structure].
+This command shows the structure of a Latexinfo file by listing the
+lines with the commands for \\chapter, \\section, and the like.
+These lines are displayed in another window called the *Occur* window.
+In that window, you can position the cursor over one of the lines and
+use \\[occur-mode-goto-occurrence], to jump to the corresponding spot
+in the Latexinfo file.
+
+ In addition, Latexinfo mode provides commands that insert various
+frequently used commands into the buffer. You can use these
+commands to save keystrokes. And you can insert balanced braces with
+\\[latexinfo-insert-braces] and later use the command \\[up-list] to
+move forward past the closing brace.
+
+Also, Latexinfo mode provides functions for automatically creating or
+updating menus and node pointers. These functions
+
+ * insert the `Next', `Previous' and `Up' pointers of a node,
+ * insert or update the menu for a section, and
+ * create a master menu for a Latexinfo source file.
+
+Here are the functions:
+
+ latexinfo-update-node \\[latexinfo-update-node]
+ latexinfo-every-node-update \\[latexinfo-every-node-update]
+ latexinfo-sequential-node-update
+
+ latexinfo-make-menu \\[latexinfo-make-menu]
+ latexinfo-all-menus-update \\[latexinfo-all-menus-update]
+ latexinfo-master-menu
+
+ latexinfo-indent-menu-description (column &optional region-p)
+
+The `latexinfo-column-for-description' variable specifies the column to
+which menu descriptions are indented.
+
+Passed an argument (a prefix argument, if interactive), the
+`latexinfo-update-node' and `latexinfo-make-menu' functions do their jobs
+in the region.
+
+To use the updating commands, you must structure your Latexinfo file
+hierarchically, such that each `\\node' line, with the exception of the
+Top node, is accompanied by some kind of section line, such as an
+`\\chapter' or `\\section' line.
+
+If the file has a `top' node, it must be called `top' or `Top' and
+be the first node in the file.
+
+Entering Latexinfo mode calls the value of text-mode-hook, and then the
+value of latexinfo-mode-hook."
+ (interactive)
+ (text-mode)
+ (setq mode-name "Latexinfo")
+ (setq major-mode 'latexinfo-mode)
+ (use-local-map latexinfo-mode-map)
+ (set-syntax-table latexinfo-mode-syntax-table)
+ (make-local-variable 'page-delimiter)
+ (setq page-delimiter
+ (concat
+ "^\\\\node [ \t]*[Tt]op\\\\|^\\\\\\("
+ latexinfo-chapter-level-regexp
+ "\\)"))
+ (make-local-variable 'require-final-newline)
+ (setq require-final-newline t)
+ (make-local-variable 'indent-tabs-mode)
+ (setq indent-tabs-mode nil)
+ (make-local-variable 'paragraph-separate)
+ (setq paragraph-separate (concat "^\b\\|^\\\\[a-zA-Z{}]*[ \n]\\|" paragraph-separate))
+ (make-local-variable 'paragraph-start)
+ (setq paragraph-start (concat "^\b\\|^\\\\[a-zA-Z{}]*[ \n]\\|" paragraph-start))
+ (make-local-variable 'fill-column)
+ (setq fill-column 72)
+ (make-local-variable 'comment-start)
+ (setq comment-start "\\c ")
+ (make-local-variable 'comment-start-skip)
+ (setq comment-start-skip "\\\\c +")
+ (make-local-variable 'words-include-escapes)
+ (setq words-include-escapes t)
+ (make-local-variable 'latexinfo-start-of-header)
+ (setq latexinfo-start-of-header "\\documentstyle")
+ (make-local-variable 'latexinfo-end-of-header)
+ (setq latexinfo-end-of-header "\\setfilename")
+ (run-hooks 'text-mode-hook 'latexinfo-mode-hook))
+
+
+;;; Define start and end of header expressions
+
+;; The start-of-header and end-of-header expressions are defined here
+;; since they used by both by `latexinfmt.el' and by `latexnfo-tex.el',
+;; only one of which is likely to be loaded at one time.
+
+(defvar latexinfo-start-of-header "\\documentstyle"
+ "String to mark start of header for latexinfo-latex-region.")
+
+(defvar latexinfo-end-of-header "\\begin{document}"
+ "String to mark end of header for latexinfo-latex-region.")
+
+
+;;; Insert string commands
+
+(defun latexinfo-insert-var ()
+ "Insert the string \\var{} in a latexinfo buffer."
+ (interactive)
+ (insert "\\var{}")
+ (backward-char))
+
+(defun latexinfo-insert-samp ()
+ "Insert the string \\samp{} in a latexinfo buffer."
+ (interactive)
+ (insert "\\samp{}")
+ (backward-char))
+
+(defun latexinfo-insert-noindent ()
+ "Insert the string \\noindent in a latexinfo buffer."
+ (interactive)
+ (insert "\\noindent\n"))
+
+(defun latexinfo-insert-node ()
+ "Insert the string \\node in a latexinfo buffer,
+along with a comment indicating the arguments to \\node."
+ (interactive)
+ (insert "\\node \n\\comment node-name, next, previous, up")
+ (forward-line -1)
+ (forward-char 6))
+
+(defun latexinfo-insert-kbd ()
+ "Insert the string \\kbd in a latexinfo buffer."
+ (interactive)
+ (insert "\\kbd{}")
+ (backward-char))
+
+(defun latexinfo-insert-item ()
+ "Insert the string \\item in a latexinfo buffer."
+ (interactive)
+ (insert "\\item")
+ (newline))
+
+(defun latexinfo-insert-example ()
+ "Insert the string \\begin{example} in a latexinfo buffer."
+ (interactive)
+ (insert "\\begin{example}\n\\begin{example}\n")
+ (forward-line -2))
+
+(defun latexinfo-insert-end ()
+ "Insert the string `\\end{}' in a latexinfo buffer."
+ (interactive)
+ (insert "\\end{}"))
+
+(defun latexinfo-insert-dfn ()
+ "Insert the string \\dfn{} in a latexinfo buffer."
+ (interactive)
+ (insert "\\dfn{}")
+ (backward-char))
+
+(defun latexinfo-insert-code ()
+ "Insert the string \\code{} in a latexinfo buffer."
+ (interactive)
+ (insert "\\code{}")
+ (backward-char))
+
+(defun latexinfo-insert-braces ()
+ "Make a pair of braces and be poised to type inside of them.
+Use \\[up-list] to move forward out of the braces."
+ (interactive)
+ (insert "{}")
+ (backward-char))
+
+
+;;; Latexinfo file structure
+
+; The following is defined in `latexnfo-upd.el'
+; (defvar latexinfo-section-types-regexp
+; "^\\\\\\(chapter\\|sect\\|sub\\|unnum\\)"
+; "Regexp matching chapter, section, other headings (but not the top node).")
+
+(defun latexinfo-show-structure (&optional nodes-too)
+ "Show the structure of a Latexinfo file.
+List the lines in the file that begin with the commands for
+\\chapter, \\section, and the like.
+
+With optional argument (prefix if interactive), list both the lines
+with commands for \\chapter, \\section, and the like, and list
+\\node lines.
+
+Lines with structuring commands beginning in them are displayed in
+another window called the *Occur* window. In that window, you can
+position the cursor over one of the lines and use
+\\[occur-mode-goto-occurrence],
+to jump to the corresponding spot in the Latexinfo file."
+
+ (interactive "P")
+ (if (not (fboundp 'latexinfo-make-menu)) (load "latexnfo-upd"))
+ (save-excursion
+ (goto-char (point-min))
+ (if nodes-too
+ (occur (concat "\\(^\\\\node\\)\\|" latexinfo-section-types-regexp))
+ (occur latexinfo-section-types-regexp)))
+ (pop-to-buffer "*Occur*")
+ (goto-char (point-min))
+ (flush-lines "-----"))
+
+
+;;; Place provide at end of file.
+(provide 'latexnfo-mde)
+;;;;;;;;;;;;;;;; end latexinfo.el ;;;;;;;;;;;;;;;;
diff --git a/macros/latex209/contrib/latexinfo/elisp/latexnfo-tex.el b/macros/latex209/contrib/latexinfo/elisp/latexnfo-tex.el
new file mode 100644
index 0000000000..e11e126364
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/latexnfo-tex.el
@@ -0,0 +1,348 @@
+;;;; latexnfo-tex.el
+
+;;; Latexinfo mode LaTeX and hardcopy printing commands.
+
+;; These commands are for running LaTeX on a region of a Latexinfo file in
+;; GNU Emacs, or on the whole buffer, and for printing the resulting
+;; DVI file.
+
+;;; Version 2.07 22 October 1991
+;;; Robert J. Chassell
+;;; Converted to LaTeXinfo by Mike Clarkson
+;;; Please send bug reports to: mike@apl.ists.ca
+
+;;; Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc.
+;;; Copyleft (C) 1988, 1989, 1990, 1991 Michael E. Clarkson
+
+
+;;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 1, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+;;; The Latexinfo mode LaTeX related commands are:
+
+; latexinfo-latex-region to run LaTeX on the current region.
+; latexinfo-latex-buffer to run LaTeX on the current buffer.
+; latexinfo-latexindex to sort unsorted index files.
+; latexinfo-latex-print to print the .dvi file made by LaTeX.
+; latexinfo-kill-latex-job to kill the currently running LaTeX job.
+; latexinfo-recenter-latex-output-buffer to redisplay LaTeX output buffer.
+; latexinfo-show-latex-print-queue to show the print queue.
+
+
+;;; Keys common both to Latexinfo mode and to LaTeX shell.
+
+;; Defined in `latexinfo-mde.el'
+; (defun latexinfo-define-common-keys (keymap)
+; "Define the keys both in Latexinfo mode and in the latexinfo-latex-shell."
+; (define-key keymap "\C-c\C-t\C-k" 'latexinfo-kill-latex-job)
+; (define-key keymap "\C-c\C-t\C-x" 'latexinfo-quit-latex-job)
+; (define-key keymap "\C-c\C-t\C-l" 'latexinfo-recenter-latex-output-buffer)
+; (define-key keymap "\C-c\C-t\C-d" 'latexinfo-delete-from-latex-print-queue)
+; (define-key keymap "\C-c\C-t\C-q" 'latexinfo-show-latex-print-queue)
+; (define-key keymap "\C-c\C-t\C-p" 'latexinfo-latex-print)
+; (define-key keymap "\C-c\C-t\C-i" 'latexinfo-latexindex)
+; (define-key keymap "\C-c\C-t\C-r" 'latexinfo-latex-region)
+; (define-key keymap "\C-c\C-t\C-b" 'latexinfo-latex-buffer))
+
+;; See also latexinfo-latex-start-shell.
+;; The following is executed in the `latexinfo.el' file
+;(latexinfo-define-common-keys latexinfo-mode-map)
+
+
+;;; Variable definitions:
+
+(require 'shell)
+
+(defvar latexinfo-latex-shell-cd-command "cd"
+ "Command to give to shell running LaTeX to change directory.")
+
+(defvar latexinfo-latex-command "latex"
+ "*Command used by latexinfo-latex-region to run LaTeX on a region.")
+
+(defvar latexinfo-latexindex-command "latexindex"
+ "*Command used by latexinfo-latexindex to sort unsorted index files.")
+
+(defvar latexinfo-latex-dvi-print-command "lpr -d"
+ "*Command string used by \\[tex-print] to print a .dvi file.")
+
+(defvar latexinfo-show-latex-queue-command "lpq"
+ "*Command string used to show the Latexinfo LaTeX print queue.
+Command is used by \\[latexinfo-show-latex-print-queue] and it
+should show the queue that \\[latexinfo-latex-print] puts jobs on.")
+
+(defvar latexinfo-delete-from-print-queue-command "lprm"
+ "*Command string used to delete a job from the line printer queue.
+Command is used by \\[latexinfo-delete-from-latex-print-queue] based on
+number provided by a previous \\[latexinfo-show-latex-print-queue]
+command.")
+
+(defvar latexinfo-latex-trailer "\\end{document}"
+ "String appended after a region sent to LaTeX by latexinfo-latex-region.")
+
+(defvar latexinfo-latex-original-file ""
+ "Original name of file on which to run LaTeX.")
+
+(defvar latexinfo-latex-temp-file nil
+ "Temporary file name used for text being sent as input to LaTeX.")
+
+(defvar latexinfo-latex-root-temp-file nil
+ "Temporary file name used for text being sent as input to LaTeX.")
+
+
+;;; Latexinfo LaTeX main functions
+
+(defun latexinfo-latex-region (beginning end)
+ "Run LaTeX on the current region.
+
+A temporary file is written in the default directory, and LaTeX is run
+in that directory. The first line of the file is copied to the
+temporary file; and if the buffer has a header, it is written to the
+temporary file before the region itself. The buffer's header is all
+lines between the strings defined by latexinfo-start-of-header and
+latexinfo-end-of-header inclusive. The header must start in the first 100
+lines. The value of latexinfo-latex-trailer is appended to the temporary file
+after the region."
+
+ (interactive "r")
+ (if (get-buffer "*latexinfo-latex-shell*")
+ (quit-process (get-process "latexinfo-latex-shell") t)
+ (latexinfo-latex-start-shell))
+
+ (setq latexinfo-latex-root-temp-file
+ (expand-file-name
+ (make-temp-name
+ (prin1-to-string (read (buffer-name))))))
+
+ (let ((latexinfo-latex-temp-file (concat latexinfo-latex-root-temp-file ".tex")))
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (forward-line 100)
+ (let ((search-end (point))
+ (header-beginning (point-min)) (header-end (point-min)))
+ (goto-char (point-min))
+ ;; Copy first line, the `\input latexinfo' line, to temp file
+ (write-region (point)
+ (save-excursion (forward-line 1) (point))
+ latexinfo-latex-temp-file nil nil)
+ ;; Don't copy first line twice if region includes it.
+ (forward-line 1)
+ (if (< beginning (point)) (setq beginning (point)))
+ ;; Initialize the temp file with either the header or nothing
+ (if (search-forward latexinfo-start-of-header search-end t)
+ (progn
+ (beginning-of-line)
+ (setq header-beginning (point)) ; Mark beginning of header.
+ (if (search-forward latexinfo-end-of-header nil t)
+ (progn (forward-line 1)
+ (setq header-end (point))) ; Mark end of header.
+ (setq header-beginning (point-min))))) ; Else no header.
+ ;; Copy header to temp file.
+ (write-region
+ (min header-beginning beginning )
+ header-end
+ latexinfo-latex-temp-file t nil)
+ ;; Copy region to temp file.
+ (write-region
+ (max beginning header-end)
+ end
+ latexinfo-latex-temp-file t nil)
+ ;; This is a kludge to insert the latexinfo-latex-trailer into the
+ ;; latexinfo-latex-temp-file. We have to create a special buffer
+ ;; in which to insert the latexinfo-latex-trailer first because there is
+ ;; no function with which to append a literal string directly
+ ;; to a file.
+ (let ((local-latex-trailer latexinfo-latex-trailer)
+ (temp-buffer (get-buffer-create " latexinfo-trailer-buffer")))
+ (set-buffer temp-buffer)
+ (erase-buffer)
+ ;; make sure trailer isn't hidden by a comment
+ (insert-string "\n")
+ (if local-latex-trailer (insert local-latex-trailer))
+ (write-region (point-min) (point-max)
+ latexinfo-latex-temp-file t nil)))
+ (set-process-sentinel (get-process "latexinfo-latex-shell")
+ 'latexinfo-latex-shell-sentinel)
+ (send-string "latexinfo-latex-shell"
+ (concat latexinfo-latex-shell-cd-command " "
+ default-directory "\n"))
+ (send-string "latexinfo-latex-shell"
+ (concat latexinfo-latex-command " "
+ latexinfo-latex-temp-file "\n"))
+ (latexinfo-recenter-latex-output-buffer 0)))))
+
+(defun latexinfo-latex-buffer (buffer)
+ "Run LaTeX on current buffer.
+After running LaTeX the first time, you may have to run \\[latexinfo-latexindex]
+and then \\[latexinfo-latex-buffer] again."
+ (interactive
+ (list
+ ;; Sometimes you put point into *latexinfo-latex-shell*; this prompts
+ ;; you for the correct file regardless.
+ (if (and
+ (string= (buffer-name (current-buffer)) "*latexinfo-latex-shell*")
+ latexinfo-latex-root-temp-file)
+ (read-string (format "Run LaTeX on: ")
+ latexinfo-latex-original-file)
+ (read-string (format "Run LaTeX on: ") (buffer-name (current-buffer))))))
+
+ ;; Set to original buffer if in *latexinfo-texj-shell*; otherwise,
+ ;; record name of current buffer.
+ (if (string= (buffer-name (current-buffer)) "*latexinfo-latex-shell*")
+ (set-buffer buffer)
+ (setq latexinfo-latex-original-file
+ (buffer-name (current-buffer))))
+
+ (if (get-buffer "*latexinfo-latex-shell*")
+ (quit-process (get-process "latexinfo-latex-shell") t)
+ (latexinfo-latex-start-shell))
+ (cond ((null buffer-file-name)
+ (error "Buffer not visiting any file!"))
+ ((buffer-modified-p)
+ (error "Buffer has been modified since last saved!"))
+ (t (set-process-sentinel (get-process "latexinfo-latex-shell")
+ 'latexinfo-latex-shell-sentinel)
+ (send-string "latexinfo-latex-shell"
+ (concat latexinfo-latex-shell-cd-command
+ " "
+ (file-name-directory
+ (buffer-file-name
+ (get-buffer buffer)))
+ "\n"))
+ (send-string "latexinfo-latex-shell"
+ (concat latexinfo-latex-command " " buffer "\n"))
+
+ ;; so the latexinfo-latex-print command works
+ (setq latexinfo-latex-root-temp-file
+ (substring buffer 0
+ (or (string-match "\\.tex" buffer)
+ (length buffer))))
+
+ (latexinfo-recenter-latex-output-buffer 0))))
+
+(defun latexinfo-latexindex ()
+ "Run latexindex on unsorted index files.
+The index files are made by \\[latexinfo-latex-region] or \\[latexinfo-latex-buffer].
+Runs the shell command defined by latexinfo-latexindex-command."
+ (interactive)
+ (send-string "latexinfo-latex-shell"
+ (concat latexinfo-latexindex-command
+ " " latexinfo-latex-root-temp-file ".??" "\n"))
+ (latexinfo-recenter-latex-output-buffer nil))
+
+(defun latexinfo-latex-print ()
+ "Print .dvi file made by \\[latexinfo-latex-region] or \\[latexinfo-latex-buffer].
+Runs the shell command defined by latexinfo-latex-dvi-print-command."
+ (interactive)
+ (send-string "latexinfo-latex-shell"
+ (concat latexinfo-latex-dvi-print-command
+ " " latexinfo-latex-root-temp-file ".dvi" "\n"))
+ (latexinfo-recenter-latex-output-buffer nil))
+
+
+;;; Latexinfo LaTeX utility functions
+
+(defun latexinfo-latex-start-shell ()
+ (save-excursion
+ (if (not (fboundp 'latexinfo-mode)) (load "latexnfo-mde"))
+ (set-buffer (make-shell "latexinfo-latex-shell" "/bin/sh" nil "-v"))
+ (setq latexinfo-latex-shell-map (copy-keymap shell-mode-map))
+ (latexinfo-define-common-keys latexinfo-latex-shell-map)
+ (use-local-map latexinfo-latex-shell-map)
+ (run-hooks 'latexinfo-latex-shell-hook)
+ (if (zerop (buffer-size))
+ (sleep-for 1))))
+
+(defun latexinfo-quit-latex-job ()
+ "Quit currently running LaTeX job, by sending an `x' to it."
+ (interactive)
+ (if (not (get-process "latexinfo-latex-shell"))
+ (error "No LaTeX shell running."))
+ (save-excursion
+ (set-buffer (get-buffer "*latexinfo-latex-shell*"))
+ (goto-char (point-max))
+ (insert "x")
+ (shell-send-input)))
+
+(defun latexinfo-kill-latex-job ()
+ "Kill the currently running LaTeX job."
+ (interactive)
+ (if (get-process "latexinfo-latex-shell")
+ ;; Use `latexinfo-latex-shell-sentinel' to restart
+ ;; latexinfo-latex-shell after it is killed.
+ (kill-process (get-process "latexinfo-latex-shell"))))
+
+(defun latexinfo-latex-shell-sentinel (process event)
+ "Restart latexinfo-latex-shell after it is killed."
+ (if (equal event "killed\n")
+ (save-excursion
+ (set-buffer "*latexinfo-latex-shell*")
+ (insert "\n")
+ (latexinfo-latex-start-shell))))
+
+(defun latexinfo-recenter-latex-output-buffer (linenum)
+ "Redisplay buffer of LaTeX job output so that most recent output can be seen.
+The last line of the buffer is displayed on
+line LINE of the window, or centered if LINE is nil."
+ (interactive "P")
+ (let ((latexinfo-latex-shell (get-buffer "*latexinfo-latex-shell*"))
+ (old-buffer (current-buffer)))
+ (if (null latexinfo-latex-shell)
+ (message "No LaTeX output buffer")
+ (pop-to-buffer latexinfo-latex-shell)
+ (bury-buffer latexinfo-latex-shell)
+ (goto-char (point-max))
+ (recenter (if linenum
+ (prefix-numeric-value linenum)
+ (/ (window-height) 2)))
+ (pop-to-buffer old-buffer)
+ )))
+
+(defun latexinfo-show-latex-print-queue ()
+ "Show the print queue that \\[latexinfo-latex-print] put your job on.
+Runs the shell command defined by latexinfo-show-latex-queue-command."
+ (interactive)
+ (if (not (latexinfo-latex-shell-running-p))
+ (latexinfo-latex-start-shell))
+ (send-string "latexinfo-latex-shell"
+ (concat latexinfo-show-latex-queue-command "\n"))
+ (latexinfo-recenter-latex-output-buffer nil))
+
+(defun latexinfo-delete-from-latex-print-queue (job-number)
+ "Delete job from the line printer spooling queue.
+You are prompted for the job number (shown by a previous
+\\[latexinfo-show-latex-print-queue] command."
+ (interactive "nPrinter job number for deletion: ")
+ (if (latexinfo-latex-shell-running-p)
+ (latexinfo-kill-latex-job)
+ (latexinfo-latex-start-shell))
+ (send-string "latexinfo-latex-shell"
+ (concat
+ latexinfo-delete-from-print-queue-command
+ " "
+ job-number"\n"))
+ (latexinfo-recenter-latex-output-buffer nil))
+
+(defun latexinfo-latex-shell-running-p ()
+ (and (get-process "latexinfo-latex-shell")
+ (eq (process-status (get-process "latexinfo-latex-shell")) 'run)))
+
+
+;;; Place `provide' at end of file.
+(provide 'latexnfo-tex)
+;;;;;;;;;;;;;;;; end latexnfo-tex.el ;;;;;;;;;;;;;;;;
diff --git a/macros/latex209/contrib/latexinfo/elisp/latexnfo-upd.el b/macros/latex209/contrib/latexinfo/elisp/latexnfo-upd.el
new file mode 100644
index 0000000000..a07caf68e3
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/latexnfo-upd.el
@@ -0,0 +1,1800 @@
+;;;; latexnfo-upd.el
+
+;;; Latexinfo mode utilities for updating nodes and menus in Latexinfo files.
+
+;;; Version 2.07 10 September 1991
+;;; Robert J. Chassell
+;;; Converted to Latexinfo by Mike Clarkson
+;;; Please send bug reports to: mike@apl.ists.ca
+
+;;; Copyright 1989, 1990, 1991 Free Software Foundation
+;;; Copyleft (C) 1988, 1989, 1990, 1991 Michael E. Clarkson
+
+;;; Known bug: update commands fail to ignore \begin{ignore}.
+
+
+;;; This file is not part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 1, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+;;; Summary: how to use the updating commands
+
+; The node and menu updating functions automatically
+
+; * insert missing `\node' lines,
+; * insert the `Next', `Previous' and `Up' pointers of a node,
+; * insert or update the menu for a section,
+; * create a master menu for a Latexinfo source file.
+;
+; Passed an argument, the `latexinfo-update-node' and
+; `latexinfo-make-menu' functions do their jobs in the region.
+;
+; In brief, the functions for creating or updating nodes and menus, are:
+;
+; latexinfo-update-node (&optional region-p)
+; latexinfo-every-node-update ()
+; latexinfo-sequential-node-update (&optional region-p)
+;
+; latexinfo-make-menu (&optional region-p)
+; latexinfo-all-menus-update ()
+; latexinfo-master-menu ()
+;
+; latexinfo-insert-node-lines (&optional title-p)
+;
+; latexinfo-indent-menu-description (column &optional region-p)
+
+; The `latexinfo-column-for-description' variable specifies the column to
+; which menu descriptions are indented.
+
+; Latexinfo file structure
+; ----------------------
+
+; To use the updating commands, you must structure your Latexinfo file
+; hierarchically. Each `\node' line, with the exception of the top
+; node, must be accompanied by some kind of section line, such as an
+; `\chapter' or `\section' line. Each node-line/section-line
+; combination must look like this:
+
+; \node Lists and Tables, Cross References, Structuring, Top
+; \comment node-name, next, previous, up
+; \chapter{Making Lists and Tables}
+
+; or like this (without the `\comment' line):
+
+; \node Lists and Tables, Cross References, Structuring, Top
+; \chapter{Making Lists and Tables}
+
+; If the file has a `top' node, it must be called `top' or `Top' and
+; be the first node in the file.
+
+
+;;; The update node functions described in detail
+
+; The `latexinfo-update-node' function without an argument inserts
+; the correct next, previous and up pointers for the node in which
+; point is located (i.e., for the node preceding point).
+
+; With an argument, the `latexinfo-update-node' function inserts the
+; correct next, previous and up pointers for the nodes inside the
+; region.
+
+; It does not matter whether the `\node' line has pre-existing
+; `Next', `Previous', or `Up' pointers in it. They are removed.
+
+; The `latexinfo-every-node-update' function runs `latexinfo-update-node'
+; on the whole buffer.
+
+; The `latexinfo-update-node' function inserts the immediately following
+; and preceding node into the `Next' or `Previous' pointers regardless
+; of their hierarchical level. This is only useful for certain kinds
+; of text, like a novel, which you go through sequentially.
+
+
+;;; The menu making functions described in detail
+
+; The `latexinfo-make-menu' function without an argument creates or
+; updates a menu for the section encompassing the node that follows
+; point. With an argument, it makes or updates menus for the nodes
+; within or part of the marked region.
+
+; Whenever an existing menu is updated, the descriptions from
+; that menu are incorporated into the new menu. This is done by copying
+; descriptions from the existing menu to the entries in the new menu
+; that have the same node names. If the node names are different, the
+; descriptions are not copied to the new menu.
+
+; Menu entries that refer to other Info files are removed since they
+; are not a node within current buffer. This is a deficiency.
+
+; The `latexinfo-all-menus-update' function runs `latexinfo-make-menu'
+; on the whole buffer.
+
+; The `latexinfo-master-menu' function creates an extended menu located
+; after the top node. (The file must have a top node.) The function
+; first updates all the regular menus in the buffer (incorporating the
+; descriptions from pre-existing menus), and then constructs a master
+; menu that includes every entry from every other menu. (However, the
+; function cannot update an already existing master menu; if one
+; exists, it must be removed before calling the function.)
+
+; The `latexinfo-indent-menu-description' function indents every
+; description in the menu following point, to the specified column.
+; Non-nil argument (prefix, if interactive) means indent every
+; description in every menu in the region. This function does not
+; indent second and subsequent lines of a multi-line description.
+
+; The `latexinfo-insert-node-lines' function inserts `\node' before the
+; `\chapter', `\section', and such like lines of a region in a Latexinfo
+; file where the `\node' lines are missing.
+;
+; With a non-nil argument (prefix, if interactive), the function not
+; only inserts `\node' lines but also inserts the chapter or section
+; titles as the names of the corresponding nodes; and inserts titles
+; as node names in pre-existing `\node' lines that lack names.
+;
+; Since node names should be more concise than section or chapter
+; titles, node names so inserted will need to be edited manually.
+
+
+;;; The menu making functions
+
+(defun latexinfo-make-menu (&optional region-p)
+ "Without any prefix argument, make or update a menu.
+Make the menu for the section enclosing the node found following point.
+
+Non-nil argument (prefix, if interactive) means make or update menus
+for nodes within or part of the marked region.
+
+Whenever a menu exists, and is being updated, the descriptions that
+are associated with node names in the pre-existing menu are
+incorporated into the new menu. Otherwise, the nodes' section titles
+are inserted as descriptions."
+
+ (interactive "P")
+ (if (not region-p)
+ (let ((level (latexinfo-hierarchic-level)))
+ (latexinfo-make-one-menu level)
+ (message "Done...updated the menu. You may save the buffer."))
+ ;; else
+ (message "Making or updating menus in %s... " (buffer-name))
+ (let ((beginning (region-beginning))
+ (region-end (region-end))
+ (level (progn ; find section type following point
+ (goto-char (region-beginning))
+ (latexinfo-hierarchic-level))))
+ (if (= region-end beginning)
+ (error "Please mark a region!"))
+ (save-excursion
+ (save-restriction
+ (widen)
+
+ (while (latexinfo-find-lower-level-node level region-end)
+ (setq level (latexinfo-hierarchic-level)) ; new, lower level
+ (latexinfo-make-one-menu level))
+
+ (while (and (< (point) region-end)
+ (latexinfo-find-higher-level-node level region-end))
+ (setq level (latexinfo-hierarchic-level))
+ (while (latexinfo-find-lower-level-node level region-end)
+ (setq level (latexinfo-hierarchic-level)) ; new, lower level
+ (latexinfo-make-one-menu level))))))
+ (message "Done...updated menus. You may save the buffer.")))
+
+(defun latexinfo-make-one-menu (level)
+ "Make a menu of all the appropriate nodes in this section.
+`Appropriate nodes' are those associated with sections that are
+at the level specified by LEVEL. Point is left at the end of menu."
+ (let*
+ ((case-fold-search t)
+ (beginning
+ (save-excursion
+ (goto-char (latexinfo-update-menu-region-beginning level))
+ (end-of-line)
+ (point)))
+ (end (latexinfo-update-menu-region-end level))
+ (first (latexinfo-menu-first-node beginning end))
+ (node-name (progn
+ (goto-char beginning)
+ (beginning-of-line)
+ (latexinfo-copy-node-name)))
+ (new-menu-list (latexinfo-make-menu-list beginning end level)))
+ (if (latexinfo-old-menu-p beginning first)
+ (progn
+ (latexinfo-incorporate-descriptions new-menu-list)
+ (latexinfo-delete-old-menu beginning first)))
+ (latexinfo-insert-menu new-menu-list node-name)))
+
+(defun latexinfo-all-menus-update (&optional update-all-nodes-p)
+ "Update every regular menu in a Latexinfo file.
+Update pre-existing master menu, if there is one.
+
+If called with a non-nil argument, this function first updates all the
+nodes in the buffer before updating the menus.
+
+If called with a non-nil argument of 'sequential, this function first
+sequentially updates all the nodes in the buffer before updating the menus.
+"
+ (interactive "P")
+ (let (master-menu-p)
+ (save-excursion
+ (mark-whole-buffer)
+ (message "Checking for a master menu in %s ... "(buffer-name))
+ (save-excursion
+ (if (re-search-forward latexinfo-master-menu-header nil t)
+ ;; Remove detailed master menu listing
+ (progn
+ (setq master-menu-p t)
+ (goto-char (match-beginning 0))
+ (let ((end-of-detailed-menu-descriptions
+ (save-excursion ; beginning of end menu line
+ (goto-char (latexinfo-menu-end))
+ (beginning-of-line) (forward-char -1)
+ (point))))
+ (delete-region (point) end-of-detailed-menu-descriptions)))))
+
+ (if update-all-nodes-p
+ (progn
+ (message "Updating all nodes in %s ... " (buffer-name))
+ (sleep-for 2)
+ (mark-whole-buffer)
+ (if (equal update-all-nodes-p 'sequential)
+ (latexinfo-sequential-node-update t)
+ (latexinfo-update-node t))))
+
+ (message "Updating all menus in %s ... " (buffer-name))
+ (sleep-for 2)
+ (mark-whole-buffer)
+ (latexinfo-make-menu t)
+
+ (if master-menu-p
+ (progn
+ (message "Updating the master menu in %s... " (buffer-name))
+ (sleep-for 2)
+ (latexinfo-master-menu nil))))
+
+ (message "Done...updated all the menus. You may save the buffer.")))
+
+(defun latexinfo-find-lower-level-node (level region-end)
+ "Search forward from point for node at any level lower than LEVEL.
+Search is limited to the end of the marked region, REGION-END,
+and to the end of the menu region for the level.
+
+Return t if the node is found, else nil. Leave point at the beginning
+of the node if one is found; else do not move point."
+
+ (if (and (< (point) region-end)
+ (re-search-forward
+ (concat
+ "\\(^\\\\node\\).*\n" ; match node line
+ "\\(\\(\\(^\\\\c\\).*\n\\)" ; match comment line, if any
+ "\\|" ; or
+ "\\(^\\\\begin{ifinfo}[ ]*\n\\)\\)?" ; ifinfo line, if any
+ (eval (cdr (assoc level latexinfo-update-menu-lower-regexps))))
+ ;; the next higher level node marks the end of this
+ ;; section, and no lower level node will be found beyond
+ ;; this position even if region-end is farther off
+ (latexinfo-update-menu-region-end level)
+ t))
+ (goto-char (match-beginning 1))))
+
+(defun latexinfo-find-higher-level-node (level region-end)
+ "Search forward from point for node at any higher level than argument LEVEL.
+Search is limited to the end of the marked region, REGION-END.
+
+Return t if the node is found, else nil. Leave point at the beginning
+of the node if one is found; else do not move point."
+ (cond
+ ((or (string-equal "top" level) (string-equal "chapter" level))
+ (if (re-search-forward "^\\\\node [ \t]*top[ \t]*\\(,\\|$\\)" region-end t)
+ (progn (beginning-of-line) t)))
+ (t
+ (if (re-search-forward
+ (concat
+ "\\(^\\\\node\\).*\n" ; match node line
+ "\\(\\(\\(^\\\\c\\).*\n\\)" ; match comment line, if any
+ "\\|" ; or
+ "\\(^\\\\begin{ifinfo}[ ]*\n\\)\\)?" ; ifinfo line, if any
+ (eval (cdr (assoc level latexinfo-update-menu-higher-regexps))))
+ region-end t)
+ (progn (beginning-of-line) t)))))
+
+
+;;; Making the list of new menu entries
+
+(defun latexinfo-make-menu-list (beginning end level)
+ "Make a list of node names and their descriptions.
+Point is left at the end of the menu region, but the menu is not inserted.
+
+First argument is position from which to start making menu list;
+second argument is end of region in which to try to locate entries;
+third argument is the level of the nodes that are the entries.
+
+Node names and descriptions are dotted pairs of strings. Each pair is
+an element of the list. If the description does not exist, the
+element consists only of the node name."
+ (goto-char beginning)
+ (let (new-menu-list)
+ (while (latexinfo-menu-locate-entry-p level end)
+ (setq new-menu-list
+ (cons (cons
+ (latexinfo-copy-node-name)
+ (latexinfo-copy-section-title))
+ new-menu-list)))
+ (reverse new-menu-list)))
+
+(defun latexinfo-menu-locate-entry-p (level search-end)
+ "Find a node that will be part of menu for this section.
+First argument is a string such as \"section\" specifying the general
+hierarchical level of the menu; second argument is a postion
+specifying the end of the search.
+
+The function returns t if the node is found, else nil. It searches
+forward from point, and leaves point at the beginning of the node.
+
+The function finds entries of the same type. Thus `subsections' and
+`unnumberedsubsecs' will appear in the same menu."
+ (if (re-search-forward
+ (concat
+ "\\(^\\\\node\\).*\n" ; match node line
+ "\\(\\(\\(^\\\\c\\).*\n\\)" ; match comment line, if any
+ "\\|" ; or
+ "\\(^\\\\begin{ifinfo}[ ]*\n\\)\\)?" ; ifinfo line, if any
+ (eval
+ (cdr (assoc level latexinfo-update-menu-same-level-regexps))))
+ search-end
+ t)
+ (goto-char (match-beginning 1))))
+
+(defun latexinfo-copy-node-name ()
+ "Return the node name as a string.
+
+Start with point at the beginning of the node line; copy the text
+after the node command up to the first comma on the line, if any, and
+return the text as a string. Leaves point at the beginning of the
+line. If there is no node name, returns an empty string."
+ (save-excursion
+ (buffer-substring
+ (progn (forward-word 1)
+ (skip-chars-forward " \t")
+ (point))
+ (if (search-forward ; mike
+ ","
+ (save-excursion (end-of-line) (point)) t) ; bound search
+ (1- (point))
+ (end-of-line) (point)))
+ ))
+
+(defun latexinfo-copy-section-title ()
+ "Return the title of the section as a string.
+The title is used as a description line in the menu when one does not
+already exist.
+
+Move point to the beginning of the appropriate section line by going
+to the start of the text matched by last regexp searched for, which
+must have been done by `latexinfo-menu-locate-entry-p'."
+
+ ;; could use the same re-search as in `latexinfo-menu-locate-entry-p'
+ ;; instead of using `match-beginning'; such a variation would be
+ ;; more general, but would waste information already collected
+
+ (goto-char (match-beginning 7)) ; match section name
+ (forward-word 1)
+ (skip-chars-forward " \t")
+ (buffer-substring ; look for braces - mike
+ (1+ (point))
+ (progn
+ (forward-sexp 1) (1- (point)))))
+
+
+;;; Handling the old menu
+
+(defun latexinfo-old-menu-p (beginning first)
+ "Move point to the beginning of the menu for this section, if any.
+Otherwise move point to the end of the first node of this section.
+Return t if a menu is found, nil otherwise.
+
+First argument is the position of the beginning of the section in which
+the menu will be located; second argument is the position of the first
+node within the section.
+
+If no menu is found, the function inserts two newlines just before the
+end of the section, and leaves point there where a menu ought to be."
+ (goto-char beginning)
+ (if (not (re-search-forward "^\\\\begin{menu}" first 'goto-end))
+ (progn (insert "\n\n") (forward-line -2) nil)
+ t))
+
+(defun latexinfo-incorporate-descriptions (new-menu-list)
+ "Copy the old menu line descriptions that exist to the new menu.
+
+Point must be at beginning of old menu.
+
+If the node-name of the new menu entry cannot be found in the old
+menu, use the new section title for the description, but if the
+node-name of the new menu is found in the old menu, replace the
+section title with the old description, whatever it may be.
+
+For this function, the new menu is a list made up of lists of dotted
+pairs in which the first element of the pair is the node name and the
+second element the description. The new menu is changed destructively.
+The old menu is the menu as it appears in the latexinfo file."
+
+ (let ((new-menu-list-pointer new-menu-list)
+ (end-of-menu (latexinfo-menu-end)))
+ (while new-menu-list
+ (save-excursion ; keep point at beginning of menu
+ (if (search-forward
+ (concat "\* " ; so only menu entries are found
+ (car (car new-menu-list))
+ ":") ; so only complete entries are found
+ end-of-menu
+ t)
+ (setcdr (car new-menu-list)
+ (latexinfo-menu-copy-old-description end-of-menu))))
+ (setq new-menu-list (cdr new-menu-list)))
+ (setq new-menu-list new-menu-list-pointer)))
+
+(defun latexinfo-menu-copy-old-description (end-of-menu)
+ "Return description field of old menu line as string.
+Point must be located just after the node name. Point left before description.
+Single argument, END-OF-MENU, is position limiting search."
+ (skip-chars-forward "[:.,\t\n ]+")
+ ;; don't copy a carriage return at line beginning with asterisk!
+ ;; do copy a description that begins with an `\'!
+ (if (and (looking-at "\\(\\w+\\|\\\\\\)")
+ (not (looking-at "\\(^\\* \\|^\\\\end{menu}\\)")))
+ (buffer-substring
+ (point)
+ (save-excursion
+ (re-search-forward "\\(^\\* \\|^\\\\end{menu}\\)" end-of-menu t)
+ (forward-line -1)
+ (end-of-line) ; go to end of last description line
+ (point)))
+ ""))
+
+(defun latexinfo-menu-end ()
+ "Return position of end of menu. Does not change location of point.
+Signal an error if not end of menu."
+ (save-excursion
+ (if (re-search-forward "^\\\\end{menu}" nil t)
+ (point)
+ (error "Menu does not have an end."))))
+
+(defun latexinfo-delete-old-menu (beginning first)
+ "Delete the old menu. Point must be in or after menu.
+First argument is position of the beginning of the section in which
+the menu will be located; second argument is the position of the first
+node within the section."
+ ;; No third arg to search, so error if search fails.
+ (re-search-backward "^\\\\begin{menu}" beginning)
+ (delete-region (point)
+ (save-excursion
+ (re-search-forward "^\\\\end{menu}" first)
+ (point))))
+
+
+;;; Inserting new menu
+
+;; try 32, but perhaps 24 is better
+(defvar latexinfo-column-for-description 32
+ "*Column at which descriptions start in a Latexinfo menu.")
+
+(defun latexinfo-insert-menu (menu-list node-name)
+ "Insert formatted menu at point.
+Indents the first line of the description, if any, to the value of
+latexinfo-column-for-description.
+
+MENU-LIST has form:
+
+ \(\(\"node-name1\" . \"description\"\)
+ \(\"node-name\" . \"description\"\) ... \)
+
+However, there does not need to be a description field."
+
+ (insert "\\begin{menu}\n")
+ (while menu-list
+ (if (and (cdr (car menu-list)) ; menu-list has description entry
+ (not (string-equal (cdr (car menu-list)) (car (car menu-list)))))
+ (progn ; if its not a duplicate - mike
+ (insert
+ (format "* %s::" (car (car menu-list)))) ; node-name entry
+ (indent-to latexinfo-column-for-description 2)
+ (insert
+ (format "%s\n" (cdr (car menu-list))))) ; description entry
+ ;; else menu-list lacks description entry
+ (insert
+ (format "* %s::\n" (car (car menu-list))))) ; node-name entry
+ (setq menu-list (cdr menu-list)))
+ (insert "\\end{menu}")
+ (message
+ "Updated \"%s\" level menu following node: %s ... "
+ level node-name))
+
+
+;;; Handling description indentation
+
+; Since the make-menu functions indent descriptions, these functions
+; are useful primarily for indenting a single menu specially.
+
+(defun latexinfo-indent-menu-description (column &optional region-p)
+ "Indent every description in menu following point to COLUMN.
+Non-nil argument (prefix, if interactive) means indent every
+description in every menu in the region. Does not indent second and
+subsequent lines of a multi-line description."
+
+ (interactive
+ "nIndent menu descriptions to (column number): \nP")
+ (save-excursion
+ (save-restriction
+ (widen)
+ (if (not region-p)
+ (progn
+ (re-search-forward "^\\\\begin{menu}")
+ (latexinfo-menu-indent-description column)
+ (message
+ "Indented descriptions in menu. You may save the buffer."))
+ ;;else
+ (message "Indenting every menu description in region... ")
+ (goto-char (region-beginning))
+ (while (and (< (point) (region-end))
+ (latexinfo-locate-menu-p))
+ (forward-line 1)
+ (latexinfo-menu-indent-description column))
+ (message "Indenting done. You may save the buffer.")))))
+
+(defun latexinfo-menu-indent-description (to-column-number)
+ "Indent the Latexinfo file menu description to TO-COLUMN-NUMBER.
+Start with point just after the word `menu' in the `\\menu' line and
+leave point on the line before the `\\end{menu}' line. Does not indent
+second and subsequent lines of a multi-line description."
+ (let* ((beginning-of-next-line (point)))
+ (while (< beginning-of-next-line
+ (save-excursion ; beginning of end menu line
+ (goto-char (latexinfo-menu-end))
+ (beginning-of-line)
+ (point)))
+ (if (search-forward "::" (latexinfo-menu-end) t)
+ (progn
+ (let ((beginning-white-space (point)))
+ (skip-chars-forward " \t") ; skip over spaces
+ (if (looking-at "\\(\\\\\\|\\w\\)+") ; if there is text
+ (progn
+ ;; remove pre-existing indentation
+ (delete-region beginning-white-space (point))
+ (indent-to-column to-column-number))))))
+ ;; position point at beginning of next line
+ (forward-line 1)
+ (setq beginning-of-next-line (point)))))
+
+
+;;; Making the master menu
+
+(defun latexinfo-master-menu (update-all-nodes-menus-p)
+ "Make a master menu for a whole Latexinfo file.
+Non-nil argument (prefix, if interactive) means first update all
+existing nodes and menus. Remove pre-existing master menu, if there is one.
+
+This function creates a master menu that follows the top node. The
+master menu includes every entry from all the other menus. It
+replaces any existing ordinary menu that follows the top node.
+
+If called with a non-nil argument, this function first updates all the
+menus in the buffer (incorporating descriptions from pre-existing
+menus) before it constructs the master menu.
+
+The function removes the detailed part of an already existing master
+menu. This action depends on the pre-exisitng master menu using the
+standard `latexinfo-master-menu-header'.
+
+The master menu has the following format, which is adapted from the
+recommendation in the Latexinfo Manual:
+
+ * The first part contains the major nodes in the Latexinfo file: the
+ nodes for the chapters, chapter-like sections, and the major
+ appendices. This includes the indices, so long as they are in
+ chapter-like sections, such as unnumbered sections.
+
+ * The second and subsequent parts contain a listing of the other,
+ lower level menus, in order. This way, an inquirer can go
+ directly to a particular node if he or she is searching for
+ specific information.
+
+Each of the menus in the detailed node listing is introduced by the
+title of the section containing the menu."
+
+ (interactive "P")
+ (widen)
+ (goto-char (point-min))
+
+ ;; Move point to location after `top'.
+ (if (not (re-search-forward "^\\\\node [ \t]*top[ \t]*\\(,\\|$\\)" nil t))
+ (error "This buffer needs a Top node!"))
+
+ (let ((first-chapter
+ (save-excursion (re-search-forward "^\\\\node") (point))))
+ (if (re-search-forward latexinfo-master-menu-header first-chapter t)
+ ;; Remove detailed master menu listing
+ (progn
+ (goto-char (match-beginning 0))
+ (let ((end-of-detailed-menu-descriptions
+ (save-excursion ; beginning of end menu line
+ (goto-char (latexinfo-menu-end))
+ (beginning-of-line) (forward-char -1)
+ (point))))
+ (delete-region (point) end-of-detailed-menu-descriptions)))))
+
+ (if update-all-nodes-menus-p
+ (progn
+ (message "Making a master menu in %s ...first updating all nodes... "
+ (buffer-name))
+ (sleep-for 2)
+ (mark-whole-buffer)
+ (latexinfo-update-node t)
+
+ (message "Updating all menus in %s ... " (buffer-name))
+ (sleep-for 2)
+ (mark-whole-buffer)
+ (latexinfo-make-menu t)))
+
+ (message "Now making the master menu in %s... " (buffer-name))
+ (sleep-for 2)
+ (goto-char (point-min))
+ (latexinfo-insert-master-menu-list
+ (latexinfo-master-menu-list))
+
+ ;; Remove extra newlines that latexinfo-insert-master-menu-list
+ ;; may have inserted.
+
+ (save-excursion
+ (goto-char (point-min))
+
+ (re-search-forward latexinfo-master-menu-header)
+ (goto-char (match-beginning 0))
+ (insert "\n")
+ (delete-blank-lines)
+
+ (re-search-backward "^\\\\begin{menu}")
+ (forward-line -1)
+ (delete-blank-lines)
+
+ (re-search-forward "^\\\\end{menu}")
+ (forward-line 1)
+ (delete-blank-lines))
+
+ (message "Done...completed making master menu. You may save the buffer."))
+
+(defun latexinfo-master-menu-list ()
+ "Return a list of menu entries and header lines for the master menu.
+
+Start with the menu for chapters and indices and then find each
+following menu and the title of the node preceding that menu.
+
+The master menu list has this form:
+
+ \(\(\(... \"entry-1-2\" \"entry-1\"\) \"title-1\"\)
+ \(\(... \"entry-2-2\" \"entry-2-1\"\) \"title-2\"\)
+ ...\)
+
+However, there does not need to be a title field."
+
+ (let (master-menu-list)
+ (while (latexinfo-locate-menu-p)
+ (setq master-menu-list
+ (cons (list
+ (latexinfo-copy-menu)
+ (latexinfo-copy-menu-title))
+ master-menu-list)))
+ (reverse master-menu-list)))
+
+(defun latexinfo-insert-master-menu-list (master-menu-list)
+ "Format and insert the master menu in the current buffer."
+ (goto-char (point-min))
+ (re-search-forward "^\\\\begin{menu}")
+ (beginning-of-line)
+ (delete-region (point) ; buffer must have ordinary top menu
+ (save-excursion
+ (re-search-forward "^\\\\end{menu}")
+ (point)))
+
+ (save-excursion ; leave point at beginning of menu
+ ;; Handle top of menu
+ (insert "\n\\begin{menu}\n")
+ ;; Insert chapter menu entries
+ (setq this-very-menu-list (reverse (car (car master-menu-list))))
+ ;;; Tell user what is going on.
+ (message "Inserting chapter menu entry: %s ... " this-very-menu-list)
+ (while this-very-menu-list
+ (insert "* " (car this-very-menu-list) "\n")
+ (setq this-very-menu-list (cdr this-very-menu-list)))
+
+ (setq master-menu-list (cdr master-menu-list))
+
+ (insert latexinfo-master-menu-header)
+
+ ;; Now, insert all the other menus
+
+ ;; The menu master-menu-list has a form like this:
+ ;; ((("beta" "alpha") "title-A")
+ ;; (("delta" "gamma") "title-B"))
+
+ (while master-menu-list
+
+ (message
+ "Inserting menu for %s .... " (car (cdr (car master-menu-list))))
+ ;; insert title of menu section
+ (insert "\n" (car (cdr (car master-menu-list))) "\n\n")
+
+ ;; insert each menu entry
+ (setq this-very-menu-list (reverse (car (car master-menu-list))))
+ (while this-very-menu-list
+ (insert "* " (car this-very-menu-list) "\n")
+ (setq this-very-menu-list (cdr this-very-menu-list)))
+
+ (setq master-menu-list (cdr master-menu-list)))
+
+ ;; Finish menu
+ (insert "\\end{menu}\n\n")))
+
+(defvar latexinfo-master-menu-header
+ "\n --- The Detailed Node Listing ---\n"
+ "String inserted before lower level entries in Latexinfo master menu.
+It comes after the chapter-level menu entries.")
+
+(defun latexinfo-locate-menu-p ()
+ "Find the next menu in the latexinfo file.
+If found, leave point after word `menu' on the `\\begin{menu}' line, and
+return t. If a menu is not found, do not move point and return nil."
+ (re-search-forward "\\(^\\\\begin{menu}\\)" nil t))
+
+(defun latexinfo-copy-menu-title ()
+ "Return the title of the section preceding the menu as a string.
+If such a title cannot be found, return an empty string. Do not move
+point."
+ (save-excursion
+ (if (re-search-backward
+ (concat
+ "\\(^\\\\top"
+ "\\|" ; or
+ latexinfo-section-types-regexp ; all other section types
+ "\\)")
+ nil
+ t)
+ (progn
+ (beginning-of-line)
+ (forward-word 1) ; skip over section type
+ (skip-chars-forward " \t") ; and over spaces
+ (buffer-substring ; look for braces - mike
+ (1+ (point))
+ (progn
+ (forward-sexp 1) (1- (point)))))
+ "")))
+
+(defun latexinfo-copy-menu ()
+ "Return the entries of an existing menu as a list.
+Start with point just after the word `menu' in the `\\menu' line
+and leave point on the line before the `\\end{menu}' line."
+ (let* (this-menu-list
+ (end-of-menu (latexinfo-menu-end)) ; position of end of `\\end{menu}'
+ (last-entry (save-excursion ; position of beginning of
+ ; last `* ' entry
+ (goto-char end-of-menu)
+ (re-search-backward "^\* ") ; handle multi-line desc.
+ (point))))
+ (while (< (point) last-entry)
+ (if (re-search-forward "^\* " end-of-menu t)
+ (progn
+ (setq this-menu-list
+ (cons
+ (buffer-substring
+ (point)
+ ;; copy multi-line descriptions
+ (save-excursion
+ (re-search-forward "\\(^\* \\|^\\\\e\\)" nil t)
+ (- (point) 3)))
+ this-menu-list)))))
+ this-menu-list))
+
+
+;;; Determining the hierarchical level in the latexinfo file
+
+(defun latexinfo-specific-section-type ()
+ "Return the specific type of next section, as a string.
+For example, \"unnumberedsubsec\". Return \"top\" for top node.
+
+Searches forward for a section. Hence, point must be before the
+section whose type will be found. Does not move point. Signal an
+error if the node is not the top node and a section is not found."
+ (save-excursion
+ (cond
+ ((re-search-forward "^\\\\node [ \t]*top[ \t]*\\(,\\|$\\)"
+;;; Following search limit by cph but causes a bug
+;;; (save-excursion
+;;; (end-of-line)
+;;; (point))
+ nil
+ t)
+ "top")
+ ((re-search-forward latexinfo-section-types-regexp nil t)
+ (buffer-substring (progn (beginning-of-line) ; copy its name
+ (1+ (point)))
+ (progn (forward-word 1)
+ (point))))
+ (t
+ (error
+ "latexinfo-specific-section-type: Chapter or section not found.")))))
+
+(defun latexinfo-hierarchic-level ()
+ "Return the general hierarchal level of the next node in a latexinfo file.
+Thus, a subsection* is of type subsection."
+ (or
+ (cdr (assoc
+ (latexinfo-specific-section-type)
+ latexinfo-section-to-generic-alist))
+ (error "Unknown section type!"))
+ )
+
+
+;;; Locating the major positions
+
+(defun latexinfo-update-menu-region-beginning (level)
+ "Locate beginning of higher level section this section is within.
+Return position of the beginning of the node line; do not move point.
+Thus, if this level is subsection, searches backwards for section node.
+Only argument is a string of the general type of section."
+
+ (cond
+ ((or (string-equal "top" level)
+ (string-equal "chapter" level))
+ (save-excursion
+ (goto-char (point-min))
+ (re-search-forward "^\\\\node [ \t]*top[ \t]*\\(,\\|$\\)" nil t)
+ (beginning-of-line)
+ (point)))
+ (t
+ (save-excursion
+ (re-search-backward
+ (concat
+ "\\(^\\\\node\\).*\n" ; match node line
+ "\\(\\(\\(^\\\\c\\).*\n\\)" ; match comment line, if any
+ "\\|" ; or
+ "\\(^\\\\begin{ifinfo}[ ]*\n\\)\\)?" ; ifinfo line, if any
+ (eval
+ (cdr (assoc level latexinfo-update-menu-higher-regexps))))
+ nil
+ 'goto-beginning)
+ (point)))))
+
+(defun latexinfo-update-menu-region-end (level)
+ "Locate end of higher level section this section is within.
+Return position; do not move point. Thus, if this level is a
+subsection, find the node for the section this subsection is within.
+If level is top or chapter, returns end of file. Only argument is a
+string of the general type of section."
+
+ (save-excursion
+ (if (re-search-forward
+ (concat
+ "\\(^\\\\node\\).*\n" ; match node line
+ "\\(\\(\\(^\\\\c\\).*\n\\)" ; match comment line, if any
+ "\\|" ; or
+ "\\(^\\\\begin{ifinfo}[ ]*\n\\)\\)?" ; ifinfo line, if any
+ (eval
+ ;; Never finds end of level above chapter so goes to end.
+ (cdr (assoc level latexinfo-update-menu-higher-regexps))))
+ nil
+ 'goto-end)
+ (match-beginning 1)
+ (point-max))))
+
+(defun latexinfo-menu-first-node (beginning end)
+ "Locate first node of the section the menu will be placed in.
+Return position; do not move point.
+The menu will be located just before this position.
+
+First argument is the position of the beginning of the section in
+which the menu will be located; second argument is the position of the
+end of that region; it limits the search."
+
+ (save-excursion
+ (goto-char beginning)
+ (forward-line 1)
+ (re-search-forward "^\\\\node" end t)
+ (beginning-of-line)
+ (point)))
+
+
+;;; Alists and regular expressions for defining hierarchical levels
+
+(defvar latexinfo-section-to-generic-alist
+ '(("top" . "top")
+
+ ("chapter" . "chapter")
+ ("chapter*" . "chapter")
+ ("unnumbered" . "chapter")
+
+ ("section" . "section")
+ ("section*" . "section")
+ ("unnumberedsec" . "section")
+
+ ("subsection" . "subsection")
+ ("subsection*" . "subsection")
+ ("unnumberedsubsec" . "subsection")
+
+ ("subsubsection" . "subsubsection")
+ ("subsubsection*" . "subsubsection")
+ ("unnumberedsubsubsec" . "subsubsection"))
+
+ "*An alist of specific and corresponding generic Latexinfo section types.
+The keys are strings specifying specific types of section; the values
+are strings of their corresponding general types.")
+
+(defvar latexinfo-section-types-regexp
+ "^\\\\\\(chapter\\|section\\|subsection\\|subsubsection\\|unnumbered\\|unnumberedsec\\|unnumberedsubsec\\|unnumberedsubsubsec\\)"
+ "Regexp matching chapter, section, other headings (but not the top node).")
+
+(defvar latexinfo-chapter-level-regexp
+ "chapter\\|chapter\\*\\|unnumbered"
+ "Regular expression matching just the Latexinfo chapter level headings.")
+
+(defvar latexinfo-section-level-regexp
+ "section\\|section\\*\\|unnumberedsec"
+ "Regular expression matching just the Latexinfo section level headings.")
+
+(defvar latexinfo-subsection-level-regexp
+ "subsection\\|subsection\\*\\|unnumberedsubsec"
+ "Regular expression matching just the Latexinfo subsection level headings.")
+
+(defvar latexinfo-subsubsection-level-regexp
+ "subsubsection\\|subsubsection\\*\\|unnumberedsubsubsec"
+ "Regular expression matching just the Latexinfo subsubsection level headings.")
+
+(defvar latexinfo-update-menu-same-level-regexps
+ '(("top" . "top[ \t{]+")
+ ("chapter" .
+ (concat "\\(^\\\\\\)\\(" latexinfo-chapter-level-regexp "\\)[ \t{]*"))
+ ("section" .
+ (concat "\\(^\\\\\\)\\(" latexinfo-section-level-regexp "\\)[ \t{]*"))
+ ("subsection" .
+ (concat "\\(^\\\\\\)\\(" latexinfo-subsection-level-regexp "\\)[ \t{]*"))
+ ("subsubsection" .
+ (concat "\\(^\\\\\\)\\(" latexinfo-subsubsection-level-regexp "\\)[ \t{]*")))
+ "*Regexps for searching for same level sections in a Latexinfo file.
+The keys are strings specifying the general hierarchical level in the
+document; the values are regular expressions.")
+
+(defvar latexinfo-update-menu-higher-regexps
+ '(("top" . "^\\\\node [ \t]*DIR")
+ ("chapter" . "^\\\\node [ \t]*top[ \t]*\\(,\\|$\\)")
+ ("section" .
+ (concat
+ "\\(^\\\\\\("
+ latexinfo-chapter-level-regexp
+ "\\)[ \t{]*\\)"))
+ ("subsection" .
+ (concat
+ "\\(^\\\\\\("
+ latexinfo-section-level-regexp
+ "\\|"
+ latexinfo-chapter-level-regexp
+ "\\)[ \t{]*\\)"))
+ ("subsubsection" .
+ (concat
+ "\\(^\\\\\\("
+ latexinfo-subsection-level-regexp
+ "\\|"
+ latexinfo-section-level-regexp
+ "\\|"
+ latexinfo-chapter-level-regexp
+ "\\)[ \t{]*\\)")))
+ "*Regexps for searching for higher level sections in a Latexinfo file.
+The keys are strings specifying the general hierarchical level in the
+document; the values are regular expressions.")
+
+(defvar latexinfo-update-menu-lower-regexps
+ '(("top" .
+ (concat
+ "\\(^\\\\\\("
+ latexinfo-chapter-level-regexp
+ "\\|"
+ latexinfo-section-level-regexp
+ "\\|"
+ latexinfo-subsection-level-regexp
+ "\\|"
+ latexinfo-subsubsection-level-regexp
+ "\\)[ \t{]*\\)"))
+ ("chapter" .
+ (concat
+ "\\(^\\\\\\("
+ latexinfo-section-level-regexp
+ "\\|"
+ latexinfo-subsection-level-regexp
+ "\\|"
+ latexinfo-subsubsection-level-regexp
+ "\\)[ \t{]*\\)"))
+ ("section" .
+ (concat
+ "\\(^\\\\\\("
+ latexinfo-subsection-level-regexp
+ "\\|"
+ latexinfo-subsubsection-level-regexp
+ "\\)[ \t{]*\\)"))
+ ("subsection" .
+ (concat
+ "\\(^\\\\\\("
+ latexinfo-subsubsection-level-regexp
+ "\\)[ \t{]*\\)"))
+ ("subsubsection" . "nothing lower"))
+ "*Regexps for searching for lower level sections in a Latexinfo file.
+The keys are strings specifying the general hierarchical level in the
+document; the values are regular expressions.")
+
+
+;;; Updating a node
+
+(defun latexinfo-update-node (&optional region-p)
+ "Without any prefix argument, update the node in which point is located.
+Non-nil argument (prefix, if interactive) means update the nodes in the
+marked region.
+
+The functions for creating or updating nodes and menus, and their
+keybindings, are:
+
+ latexinfo-update-node (&optional region-p) \\[latexinfo-update-node]
+ latexinfo-every-node-update () \\[latexinfo-every-node-update]
+ latexinfo-sequential-node-update (&optional region-p)
+
+ latexinfo-make-menu (&optional region-p) \\[latexinfo-make-menu]
+ latexinfo-all-menus-update () \\[latexinfo-all-menus-update]
+ latexinfo-master-menu ()
+
+ latexinfo-indent-menu-description (column &optional region-p)
+
+The `latexinfo-column-for-description' variable specifies the column to
+which menu descriptions are indented. Its default value is 32."
+
+ (interactive "P")
+ (if (not region-p)
+ (let ((auto-fill-hook nil)) ; update a single node
+ (if (not (re-search-backward "^\\\\node" (point-min) t))
+ (error "Node line not found before this position."))
+ (latexinfo-update-the-node)
+ (message "Done...updated the node. You may save the buffer."))
+ ;; else
+ (let ((auto-fill-hook nil)
+ (beginning (region-beginning))
+ (end (region-end)))
+ (if (= end beginning)
+ (error "Please mark a region!"))
+ (save-restriction
+ (narrow-to-region beginning end)
+ (goto-char beginning)
+ (push-mark)
+ (while (re-search-forward "^\\\\node" (point-max) t)
+ (beginning-of-line)
+ (latexinfo-update-the-node))
+ (message "Done...updated nodes in region. You may save the buffer.")))))
+
+(defun latexinfo-every-node-update ()
+ "Update every node in a Latexinfo file."
+ (interactive)
+ (save-excursion
+ (mark-whole-buffer)
+ (latexinfo-update-node t)
+ (message "Done...updated every node. You may save the buffer.")))
+
+(defun latexinfo-update-the-node ()
+ "Update one node. Point must be at the beginning of node line.
+Leave point at the end of the node line."
+ (latexinfo-check-for-node-name)
+ (latexinfo-delete-existing-pointers)
+ (message "Updating node: %s ... " (latexinfo-copy-node-name))
+ (save-restriction
+ (widen)
+ (let*
+ ((case-fold-search t)
+ (level (latexinfo-hierarchic-level))
+ (beginning (latexinfo-update-menu-region-beginning level))
+ (end (latexinfo-update-menu-region-end level)))
+ (if (string-equal level "top")
+ (latexinfo-top-pointer-case)
+ ;; else
+ (latexinfo-insert-pointer beginning end level 'next)
+ (latexinfo-insert-pointer beginning end level 'previous)
+ (latexinfo-insert-pointer beginning end level 'up)
+ (latexinfo-clean-up-node-line)))))
+
+(defun latexinfo-top-pointer-case ()
+ "Insert pointers in the Top node. This is a special case.
+
+The `Next' pointer is a pointer to a chapter or section at a lower
+hierarchical level in the file. The `Previous' and `Up' pointers are
+to `(dir)'. Point must be at the beginning of the node line, and is
+left at the end of the node line."
+
+ (latexinfo-clean-up-node-line)
+ (insert ", "
+ (save-excursion
+ ;; There may be an \chapter or other such command between
+ ;; the top node line and the next node line, as a title
+ ;; for an `ifinfo' section. This \chapter command must
+ ;; must be skipped. So the procedure is to search for
+ ;; the next `\node' line, and then copy its name.
+ (if (re-search-forward "^\\\\node" nil t)
+ (progn
+ (beginning-of-line)
+ (latexinfo-copy-node-name))
+ " "))
+ ", (dir), (dir)"))
+
+(defun latexinfo-check-for-node-name ()
+ "Determine whether the node has a node name. Prompt for one if not.
+Point must be at beginning of node line. Does not move point."
+ (save-excursion
+ (forward-word 1) ; skip over node command
+ (skip-chars-forward " \t") ; and over spaces
+ (if (not (looking-at "[^,\t\n ]+")) ; regexp based on what info looks for
+ ; alternatively, use "[a-zA-Z]+"
+ (let ((node-name (read-from-minibuffer "Node name: ")))
+ (insert " " node-name)))))
+
+(defun latexinfo-delete-existing-pointers ()
+ "Delete `Next', `Previous', and `Up' pointers.
+Starts from the current position of the cursor, and searches forward
+on the line for a comma and if one is found, deletes the rest of the
+line, including the comma. Leaves point at beginning of line."
+ (if (search-forward "," (save-excursion (end-of-line) (point)) t)
+ (progn
+ (goto-char (1- (point)))
+ (kill-line nil)))
+ (beginning-of-line))
+
+(defun latexinfo-find-pointer (beginning end level direction)
+ "Move point to section associated with next, previous, or up pointer.
+Return type of pointer (either 'normal or 'no-pointer).
+
+The first and second arguments bound the search for a pointer to the
+beginning and end, respectively, of the enclosing higher level
+section. The third argument is a string specifying the general kind
+of section such as \"chapter\ or \"section\". When looking for the
+`Next' pointer, the section found will be at the same hierarchical
+level in the Latexinfo file; when looking for the `Previous' pointer,
+the section found will be at the same or higher hierarchical level in
+the Latexinfo file; when looking for the `Up' pointer, the section found
+will be at some level higher in the Latexinfo file. The fourth argument
+\(one of 'next, 'previous, or 'up\) specifies whether to find the
+`Next', `Previous', or `Up' pointer."
+
+ (cond ((eq direction 'next)
+ (forward-line 3) ; skip over current node
+ (if (re-search-forward
+ (eval
+ (cdr (assoc level latexinfo-update-menu-same-level-regexps)))
+ end
+ t)
+ 'normal
+ 'no-pointer))
+ ((eq direction 'previous)
+ (if (re-search-backward
+ (concat
+ "\\("
+ (eval
+ (cdr (assoc level latexinfo-update-menu-same-level-regexps)))
+ "\\|"
+ (eval
+ (cdr (assoc level latexinfo-update-menu-higher-regexps)))
+ "\\)")
+ beginning
+ t)
+ 'normal
+ 'no-pointer))
+ ((eq direction 'up)
+ (if (re-search-backward
+ (eval (cdr (assoc level latexinfo-update-menu-higher-regexps)))
+ (save-excursion
+ (goto-char beginning)
+ (beginning-of-line)
+ (point))
+ t)
+ 'normal
+ 'no-pointer))
+ (t
+ (error "latexinfo-find-pointer: lack proper arguments"))))
+
+(defun latexinfo-pointer-name (kind)
+ "Return the node name preceding the section command.
+The argument is the kind of section, either normal or no-pointer."
+ (let (name)
+ (cond ((eq kind 'normal)
+ (end-of-line) ; this handles prev node top case
+ (re-search-backward ; when point is already
+ "^\\\\node" ; at the beginning of \node line
+ (save-excursion (forward-line -3))
+ t)
+ (setq name (latexinfo-copy-node-name)))
+ ((eq kind 'no-pointer)
+ (setq name " "))) ; put a blank in the pointer slot
+ name))
+
+(defun latexinfo-insert-pointer (beginning end level direction)
+ "Insert the `Next', `Previous' or `Up' node name at point.
+Move point forward.
+
+The first and second arguments bound the search for a pointer to the
+beginning and end, respectively, of the enclosing higher level
+section. The third argument is the hierarchical level of the Latexinfo
+file, a string such as \"section\". The fourth argument is direction
+towards which the pointer is directed, one of `next, `previous, or
+'up."
+
+ (end-of-line)
+ (insert
+ ", "
+ (save-excursion
+ (latexinfo-pointer-name
+ (latexinfo-find-pointer beginning end level direction)))))
+
+(defun latexinfo-clean-up-node-line ()
+ "Remove extra commas, if any, at end of node line."
+ (end-of-line)
+ (skip-chars-backward ", ")
+ (delete-region (point) (save-excursion (end-of-line) (point))))
+
+
+;;; Updating nodes sequentially
+; These sequential update functions insert `Next' or `Previous'
+; pointers that point to the following or preceding nodes even if they
+; are at higher or lower hierarchical levels. This means that if a
+; section contains one or more subsections, the section's `Next'
+; pointer will point to the subsection and not the following section.
+; (The subsection to which `Next' points will most likely be the first
+; item on the section's menu.)
+
+(defun latexinfo-sequential-node-update (&optional region-p)
+ "Update one node (or many) in a Latexinfo file with sequential pointers.
+
+This function causes the `Next' or `Previous' pointer to point to the
+immediately preceding or following node, even if it is at a higher or
+lower hierarchical level in the document. Continually pressing `n' or
+`p' takes you straight through the file.
+
+Without any prefix argument, update the node in which point is located.
+Non-nil argument (prefix, if interactive) means update the nodes in the
+marked region.
+
+This command makes it awkward to navigate among sections and
+subsections; it should be used only for those documents that are meant
+to be read like a novel rather than a reference, and for which the
+Info `g*' command is inadequate."
+
+ (interactive "P")
+ (if (not region-p)
+ (let ((auto-fill-hook nil)) ; update a single node
+ (if (not (re-search-backward "^\\\\node" (point-min) t))
+ (error "Node line not found before this position."))
+ (latexinfo-sequentially-update-the-node)
+ (message
+ "Done...sequentially updated the node . You may save the buffer."))
+ ;; else
+ (let ((auto-fill-hook nil)
+ (beginning (region-beginning))
+ (end (region-end)))
+ (if (= end beginning)
+ (error "Please mark a region!"))
+ (save-restriction
+ (narrow-to-region beginning end)
+ (goto-char beginning)
+ (push-mark)
+ (while (re-search-forward "^\\\\node" (point-max) t)
+ (beginning-of-line)
+ (latexinfo-sequentially-update-the-node))
+ (message
+ "Done...updated the nodes in sequence. You may save the buffer.")))))
+
+(defun latexinfo-sequentially-update-the-node ()
+ "Update one node such that the pointers are sequential.
+A `Next' or `Previous' pointer points to any preceding or following node,
+regardless of its hierarchical level."
+
+ (latexinfo-check-for-node-name)
+ (latexinfo-delete-existing-pointers)
+ (message
+ "Sequentially updating node: %s ... " (latexinfo-copy-node-name))
+ (save-restriction
+ (widen)
+ (let*
+ ((case-fold-search t)
+ (level (latexinfo-hierarchic-level)))
+ (if (string-equal level "top")
+ (latexinfo-top-pointer-case)
+ ;; else
+ (latexinfo-sequentially-insert-pointer level 'next)
+ (latexinfo-sequentially-insert-pointer level 'previous)
+ (latexinfo-sequentially-insert-pointer level 'up)
+ (latexinfo-clean-up-node-line)))))
+
+(defun latexinfo-sequentially-find-pointer (level direction)
+ "Find next or previous pointer sequentially in Latexinfo file, or up pointer.
+Move point to section associated with the pointer. Find point even if
+it is in a different section.
+
+Return type of pointer (either 'normal or 'no-pointer).
+
+The first argument is a string specifying the general kind of section
+such as \"chapter\ or \"section\". The section found will be at the
+same hierarchical level in the Latexinfo file, or, in the case of the up
+pointer, some level higher. The second argument (one of 'next,
+'previous, or 'up) specifies whether to find the `Next', `Previous',
+or `Up' pointer."
+ (cond ((eq direction 'next)
+ (forward-line 3) ; skip over current node
+ (if (re-search-forward
+ latexinfo-section-types-regexp
+ (point-max)
+ t)
+ 'normal
+ 'no-pointer))
+ ((eq direction 'previous)
+ (if (re-search-backward
+ latexinfo-section-types-regexp
+ (point-min)
+ t)
+ 'normal
+ 'no-pointer))
+ ((eq direction 'up)
+ (let ((up-level
+ (eval (cdr (assoc level latexinfo-update-menu-higher-regexps)))))
+ (if (null up-level)
+ (message "latexinfo-sequential-find-pointer: null up-level" ))
+ (if (and (stringp up-level) (re-search-backward
+ up-level
+ nil ;; beginning ;; -mike
+ t))
+ 'normal
+ 'no-pointer)))
+ (t
+ (error "latexinfo-sequential-find-pointer: lack proper arguments"))))
+
+(defun latexinfo-sequentially-insert-pointer (level direction)
+ "Insert the `Next', `Previous' or `Up' node name at point.
+Move point forward.
+
+The first argument is the hierarchical level of the Latexinfo file, a
+string such as \"section\". The second argument is direction, one of
+`next, `previous, or 'up."
+
+ (end-of-line)
+ (insert
+ ", "
+ (save-excursion
+ (latexinfo-pointer-name
+ (latexinfo-sequentially-find-pointer level direction)))))
+
+
+;;; Inserting `\node' lines
+; The `latexinfo-insert-node-lines' function inserts `\node' lines as needed
+; before the `\chapter', `\section', and such like lines of a region
+; in a Latexinfo file.
+
+(defun latexinfo-insert-node-lines (beginning end &optional title-p)
+ "Insert missing `\\node' lines in region of Latexinfo file.
+Non-nil argument (prefix, if interactive) means also to insert the
+section titles as node names; and also to insert the section titles as
+node names in pre-existing \\node lines that lack names."
+ (interactive "r\nP")
+
+ ;; Use marker; after inserting node lines, leave point at end of
+ ;; region and mark at beginning.
+
+ (let (beginning-marker end-marker title last-section-position)
+
+ ;; Save current position on mark ring and set mark to end.
+ (push-mark end t)
+ (setq end-marker (mark-marker))
+
+ (goto-char beginning)
+ (while (re-search-forward
+ latexinfo-section-types-regexp
+ end-marker
+ 'end)
+ ;; Copy title if desired.
+ (if title-p
+ (setq title
+ (progn
+ (beginning-of-line)
+ (forward-word 1)
+ (skip-chars-forward " \t")
+ (buffer-substring
+ (1+ (point))
+ (save-excursion
+ (search-forward "," (save-excursion
+ (forward-sexp 1)
+ (1- (point)))
+ 'yes)
+ (point))))
+ )
+ )
+ ;; Insert node line if necessary.
+ (if (re-search-backward
+ "^\\\\node"
+ ;; Avoid finding previous node line if node lines are close.
+ (or last-section-position
+ (save-excursion (forward-line -2) (point))) t)
+ ;; \node is present, and point at beginning of that line
+ (forward-word 1) ; Leave point just after \node.
+ ;; Else \node missing; insert one.
+ (beginning-of-line) ; Beginning of `\section' line.
+ (insert "\\node\n")
+ (backward-char 1)) ; Leave point just after `\node'.
+ ;; Insert title if desired.
+ (if title-p
+ (progn
+ (skip-chars-forward " \t")
+ ;; Use regexp based on what info looks for
+ ;; (alternatively, use "[a-zA-Z]+");
+ ;; this means we only insert a title if none exists.
+ (if (not (looking-at "[^,\t\n ]+"))
+ (progn
+ (beginning-of-line)
+ (forward-word 1)
+ (insert " " title)
+ (message "Inserted title %s ... " title)))))
+ ;; Go forward beyond current section title.
+ (re-search-forward latexinfo-section-types-regexp
+ (save-excursion (forward-line 3) (point)) t)
+ (setq last-section-position (point))
+ (forward-line 1))
+
+ ;; Leave point at end of region, mark at beginning.
+ (set-mark beginning)
+
+ (if title-p
+ (message
+ "Done inserting node lines and titles. You may save the buffer.")
+ (message "Done inserting node lines. You may save the buffer."))))
+
+
+;;; Update and create menus for multi-file Latexinfo sources
+
+;; 1. M-x latexinfo-multiple-files-update
+;;
+;; Read the include file list of an outer Latexinfo file and
+;; update all highest level nodes in the files listed and insert a
+;; main menu in the outer file after its top node.
+
+;; 2. C-u M-x latexinfo-multiple-files-update
+;;
+;; Same as 1, but insert a master menu. (Saves reupdating lower
+;; level menus and nodes.) This command simply reads every menu,
+;; so if the menus are wrong, the master menu will be wrong.
+;; Similarly, if the lower level node pointers are wrong, they
+;; will stay wrong.
+
+;; 3. C-u 2 M-x latexinfo-multiple-files-update
+;;
+;; Read the include file list of an outer Latexinfo file and
+;; update all nodes and menus in the files listed and insert a
+;; master menu in the outer file after its top node.
+
+;;; Note: these functions:
+;;;
+;;; * Do not save or delete any buffers. You may fill up your memory.
+;;; * Do not handle any pre-existing nodes in outer file.
+;;; Hence, you may need a file for indices.
+
+
+;;; Auxiliary functions for multiple file updating
+
+(defun latexinfo-multi-file-included-list (outer-file)
+ "Return a list of the included files in OUTER-FILE."
+ (let ((included-file-list (list outer-file))
+ start)
+ (save-excursion
+ (switch-to-buffer (find-file-noselect outer-file))
+ (widen)
+ (goto-char (point-min))
+ (while (re-search-forward "^\\\\include" nil t)
+ (skip-chars-forward " \t")
+ (setq start (point))
+ (end-of-line)
+ (skip-chars-backward " \t")
+ (setq included-file-list
+ (cons (buffer-substring start (point))
+ included-file-list)))
+ (nreverse included-file-list))))
+
+(defun latexinfo-copy-next-section-title ()
+ "Return the name of the immediately following section as a string.
+
+Start with point at the beginning of the node line. Leave point at the
+same place. If there is no title, returns an empty string."
+
+ (save-excursion
+ (end-of-line)
+ (let ((section-end (or
+ (save-excursion
+ (if (re-search-forward "\\(^\\\\node\\)" nil t)
+ (match-beginning 0)))
+ (point-max))))
+ (if (re-search-forward latexinfo-section-types-regexp section-end t)
+ (beginning-of-line)
+ ;; copy title
+ (let ((title
+ (buffer-substring
+ (progn (forward-word 1) ; skip over section type
+ (skip-chars-forward " \t") ; and over spaces
+ (point))
+ (progn (end-of-line) (point)))))
+ title)
+ ""))))
+
+(defun latexinfo-multi-file-update (files &optional update-everything)
+ "Update first node pointers in each file in FILES.
+Return a list of the node names and the title immediate following them.
+
+The first file in the list is an outer file; the remaining are
+files included in the outer file with `\\include' commands.
+
+If optional arg UPDATE-EVERYTHING non-nil, update every menu and
+pointer in each of the included files.
+
+Also update the `Top' level node pointers of the outer file.
+
+Requirements:
+
+ * the first file in the FILES list must be the outer file,
+ * each of the included files must contain exactly one highest
+ hierarchical level node,
+ * this node must be the first node in the included file,
+ * each highest hierarchical level node must be of the same type.
+
+Thus, normally, each included file contains one, and only one,
+chapter.
+
+The menu-list has the form:
+
+ \(\(\"node-name1\" . \"title1\"\)
+ \(\"node-name2\" . \"title2\"\) ... \)
+
+However, there does not need to be a title field."
+
+ (let (menu-list)
+
+ ;; Find the name of the first node of the first included file.
+ (switch-to-buffer (find-file-noselect (car (cdr files))))
+ (widen)
+ (goto-char (point-min))
+ (if (not (re-search-forward "^\\\\node" nil t))
+ (error "No `\\node' line found in %s !" (buffer-name)))
+ (beginning-of-line)
+ (latexinfo-check-for-node-name)
+ (setq next-node-name (latexinfo-copy-node-name))
+
+ (setq menu-list
+ (cons (cons
+ next-node-name
+ (latexinfo-copy-next-section-title))
+ menu-list))
+
+ ;; Go to outer file
+ (switch-to-buffer (find-file-noselect (car files)))
+ (goto-char (point-min))
+ (if (not (re-search-forward "^\\\\node [ \t]*top[ \t]*\\(,\\|$\\)" nil t))
+ (error "This buffer needs a Top node!"))
+ (beginning-of-line)
+ (latexinfo-delete-existing-pointers)
+ (end-of-line)
+ (insert ", " next-node-name ", (dir), (dir)")
+ (beginning-of-line)
+ (setq previous-node-name "Top")
+ (setq files (cdr files))
+
+ (while files
+
+ (if (not (cdr files))
+ ;; No next file
+ (setq next-node-name "")
+ ;; Else,
+ ;; find the name of the first node in the next file.
+ (switch-to-buffer (find-file-noselect (car (cdr files))))
+ (widen)
+ (goto-char (point-min))
+ (if (not (re-search-forward "^\\\\node" nil t))
+ (error "No `\\node' line found in %s !" (buffer-name)))
+ (beginning-of-line)
+ (latexinfo-check-for-node-name)
+ (setq next-node-name (latexinfo-copy-node-name))
+ (setq menu-list
+ (cons (cons
+ next-node-name
+ (latexinfo-copy-next-section-title))
+ menu-list)))
+
+ ;; Go to node to be updated.
+ (switch-to-buffer (find-file-noselect (car files)))
+ (goto-char (point-min))
+ (if (not (re-search-forward "^\\\\node" nil t))
+ (error "No `\\node' line found in %s !" (buffer-name)))
+ (beginning-of-line)
+
+ ;; Update other menus and nodes if requested.
+ (if update-everything (latexinfo-all-menus-update t))
+
+ (beginning-of-line)
+ (latexinfo-delete-existing-pointers)
+ (end-of-line)
+ (insert ", " next-node-name ", " previous-node-name ", " up-node-name)
+
+ (beginning-of-line)
+ (setq previous-node-name (latexinfo-copy-node-name))
+
+ (setq files (cdr files)))
+ (nreverse menu-list)))
+
+(defun latexinfo-multi-files-insert-main-menu (menu-list)
+ "Insert formatted main menu at point.
+Indents the first line of the description, if any, to the value of
+latexinfo-column-for-description."
+
+ (insert "\\begin{menu}\n")
+ (while menu-list
+ (if (cdr (car menu-list)) ; menu-list has description entry
+ (progn
+ (insert
+ (format "* %s::" (car (car menu-list)))) ; node-name entry
+ (indent-to latexinfo-column-for-description 2)
+ (insert
+ (format "%s\n" (cdr (car menu-list))))) ; description entry
+ ;; else menu-list lacks description entry
+ (insert
+ (format "* %s::\n" (car (car menu-list))))) ; node-name entry
+ (setq menu-list (cdr menu-list)))
+ (insert "\\end{menu}"))
+
+
+(defun latexinfo-multi-file-master-menu-list (files-list)
+ "Return master menu list from files in FILES-LIST.
+Menu entries in each file collected using `latexinfo-master-menu-list'.
+
+The first file in FILES-LIST must be the outer file; the others must
+be the files included within it. A main menu must already exist."
+ (save-excursion
+ (let (master-menu-list)
+ (while files-list
+ (switch-to-buffer (find-file-noselect (car files-list)))
+ (message "Working on: %s " (current-buffer))
+ (goto-char (point-min))
+ (setq master-menu-list
+ (append master-menu-list (latexinfo-master-menu-list)))
+ (setq files-list (cdr files-list)))
+ master-menu-list)))
+
+
+;;; The multiple-file update function
+
+(defun latexinfo-multiple-files-update
+ (outer-file &optional update-everything make-master-menu)
+ "Update first node pointers in each file included in OUTER-FILE;
+create or update the `Top' level node pointers and the main menu in
+the outer file that refers to such nodes. This does not create or
+update menus or pointers within the included files.
+
+With optional MAKE-MASTER-MENU argument (prefix arg, if interactive),
+insert a master menu in OUTER-FILE in addition to creating or updating
+pointers in the first \\node line in each included file and creating or
+updating the `Top' level node pointers of the outer file. This does
+not create or update other menus and pointers within the included
+files.
+
+With optional UPDATE-EVERYTHING argument (numeric prefix arg, if
+interactive), update all the menus and all the `Next', `Previous', and
+`Up' pointers of all the files included in OUTER-FILE before inserting
+a master menu in OUTER-FILE. Also, update the `Top' level node
+pointers of OUTER-FILE.
+
+Notes:
+
+ * this command does NOT save any files--you must save the
+ outer file and any modified, included files.
+
+ * except for the `Top' node, this command does NOT handle any
+ pre-existing nodes in the outer file; hence, indices must be
+ enclosed in an included file.
+
+Requirements:
+
+ * each of the included files must contain exactly one highest
+ hierarchical level node,
+ * this highest node must be the first node in the included file,
+ * each highest hierarchical level node must be of the same type.
+
+Thus, normally, each included file contains one, and only one,
+chapter."
+
+ (interactive (cons
+ (read-string
+ "Name of outer `include' file: "
+ (buffer-file-name))
+ (cond ((not current-prefix-arg)
+ '(nil nil))
+ ((listp current-prefix-arg)
+ '(t nil)) ; make-master-menu
+ ((numberp current-prefix-arg)
+ '(t t)) ; update-everything
+ )))
+
+ (let* ((included-file-list (latexinfo-multi-file-included-list outer-file))
+ (files included-file-list)
+ main-menu-list
+ next-node-name
+ previous-node-name
+ (up-node-name "Top"))
+
+;;; Update the pointers
+;;; and collect the names of the nodes and titles
+ (setq main-menu-list (latexinfo-multi-file-update files update-everything))
+
+;;; Insert main menu
+
+ ;; Go to outer file
+ (switch-to-buffer (find-file-noselect (car included-file-list)))
+ (if (latexinfo-old-menu-p
+ (point-min)
+ (save-excursion
+ (re-search-forward "^\\include")
+ (beginning-of-line)
+ (point)))
+
+ ;; If found, leave point after word `menu' on the `\\menu' line.
+ (progn
+ (latexinfo-incorporate-descriptions main-menu-list)
+ ;; Delete existing menu.
+ (beginning-of-line)
+ (delete-region
+ (point)
+ (save-excursion (re-search-forward "^\\\\end{menu}") (point)))
+ ;; Insert main menu
+ (latexinfo-multi-files-insert-main-menu main-menu-list))
+
+ ;; Else no current menu; insert it before `\include'
+ (latexinfo-multi-files-insert-main-menu main-menu-list))
+
+;;; Insert master menu
+
+ (if make-master-menu
+ (progn
+ ;; First, removing detailed part of any pre-existing master menu
+ (goto-char (point-min))
+ (if (re-search-forward latexinfo-master-menu-header nil t)
+ ;; Remove detailed master menu listing
+ (progn
+ (goto-char (match-beginning 0))
+ (let ((end-of-detailed-menu-descriptions
+ (save-excursion ; beginning of end menu line
+ (goto-char (latexinfo-menu-end))
+ (beginning-of-line) (forward-char -1)
+ (point))))
+ (delete-region (point) end-of-detailed-menu-descriptions))))
+
+ ;; Create a master menu and insert it
+ (latexinfo-insert-master-menu-list
+ (latexinfo-multi-file-master-menu-list
+ included-file-list)))))
+ (message "Multiple files updated."))
+
+
+;;; Place `provide' at end of file.
+(provide 'latexnfo-upd)
+;;;;;;;;;;;;;;;; end texnfo-upd.el ;;;;;;;;;;;;;;;;
diff --git a/macros/latex209/contrib/latexinfo/elisp/makeinfo.el b/macros/latex209/contrib/latexinfo/elisp/makeinfo.el
new file mode 100644
index 0000000000..b32b5566cd
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/makeinfo.el
@@ -0,0 +1,30 @@
+;;(if (null (getenv "LATEXINFO"))
+;; (error "You must define the environment variable LATEXINFO first."))
+
+(defun compile-if-necessary (file)
+ (let ((filename (expand-file-name file)))
+ (cond ((not (file-exists-p filename))
+ (error "File not found: %s" filename))
+ ((not (file-exists-p (concat filename "c")))
+ (byte-compile-file filename))
+ ((file-newer-than-file-p filename (concat filename "c"))
+ (byte-compile-file filename))
+ (t
+ (message "%s is up to date." filename)))
+ )
+ )
+
+;;; LaTeXinfo
+(setq load-path
+ (cons (setq latexinfo-formats-directory
+ (file-name-as-directory "ELISP"))
+ load-path))
+
+(load-file "LATEXINFO/.latexinfo")
+(compile-if-necessary "PROGRAM.el")
+(load-file "PROGRAM.elc")
+(mapcar 'compile-if-necessary (directory-files "ELISP" t ".*.el$"))
+(find-file "MANUAL.tex")
+(latexinfo-format-buffer t)
+(save-some-buffers t)
+(kill-emacs 0)
diff --git a/macros/latex209/contrib/latexinfo/elisp/s2latexinfo.el b/macros/latex209/contrib/latexinfo/elisp/s2latexinfo.el
new file mode 100644
index 0000000000..b2533e4a62
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/s2latexinfo.el
@@ -0,0 +1,710 @@
+;; Convert scribe files to latexinfo.
+;; This is an absolutely shameful and indecypherable hack, but it works.
+;; Please pretend you never looked in this file.
+;; If you have any questions, I'll deny all knowledge of it.
+
+(require 'latexinfo)
+(require 'latexnfo-upd)
+
+(defvar scribe-format-syntax-table nil)
+
+(defvar scribe-to-latex-head
+"\\documentstyle[latexinfo,fvpindex,cmulisp,format]{book} % -*-latexinfo-*-
+\\pagestyle{headings}
+
+\\begin{document}
+\\alwaysrefill
+
+\\comment Delete any of these if you don't want that particular index.
+\\newindex{cp}
+\\newindex{ky}
+
+")
+
+(defvar scribe-to-latex-tail "\\twocolumn
+\\node Function Index, Variable Index, , top
+\\unnumbered{Function Index}
+\\cindex{Function Index}
+
+\\printindex{fn}
+
+\\twocolumn
+\\node Variable Index, Package Index, Function Index, top
+\\unnumbered{Variable Index}
+\\cindex{Variable Index}
+
+\\printindex{vr}
+
+\\twocolumn
+\\node Package Index, Condition Index, Variable Index, top
+\\unnumbered{Package Index}
+\\cindex{Package Index}
+
+\\printindex{pg}
+
+\\twocolumn
+\\node Condition Index, Concept Index, Package Index, top
+\\unnumbered{Condition Index}
+\\cindex{Condition Index}
+
+\\printindex{ky}
+
+\\onecolumn
+\\node Concept Index, , Variable Index, top
+\\unnumbered{Concept Index}
+\\cindex{Concept Index}
+
+\\printindex{cp}
+\\end{document}
+")
+
+(defun scribe-to-latexinfo (arg)
+ (interactive "FNew File Name: ")
+ (let ((case-fold-search nil)
+ (input-buffer (current-buffer)))
+ (find-file arg)
+ (auto-save-mode -1)
+ (erase-buffer)
+ (insert-buffer-substring input-buffer)
+ (goto-char (point-min))
+ (let ((alist scribe-alist))
+ (set-syntax-table scribe-format-syntax-table)
+ ;; Input the @input files
+ (s2l-input-files)
+ (s2l-do-alist '(
+ ;; will trash backslashes in verbatim environments
+ ("\\\\" . "\\\\back ")
+ ("\n\n@\\\\back " . "\n@\\\\")
+ ("@\\\\back " . "@\\\\")))
+ ;; Fix the header for LaTeX
+ (goto-char (point-min))
+ (insert scribe-to-latex-head)
+ (insert "\\setfilename{" (file-name-nondirectory arg) ".info}\n")
+ ;; Delete commands you don't want to handle.
+ (setq alist scribe-delete-list)
+ (while alist
+ (goto-char (point-min))
+ (delete-matching-lines (car alist))
+ (setq alist (cdr alist)))
+ ;; get rid of the f cking spaces
+ (s2l-do-alist '(
+ ("^@\\([a-zA-Z0-9]+\\) +\\[" . "@\\1[")
+ ("^@\\([a-zA-Z0-9]+\\) +<" . "@\\1<")
+ ("^@\\([a-zA-Z0-9]+\\) +(" . "@\\1(")
+ ))
+ (goto-char (point-min))
+ (s2l-handle-comments)
+ (s2l-handle-environments)
+ (s2l-handle-defuns)
+ (s2l-do-titlepage)
+ (s2l-do-environments)
+ (s2l-do-defuns)
+ (s2l-do-alist scribe-alist)
+ (s2l-do-constants)
+ ;; Convert package to LaTeX optional argument format
+ (s2l-do-alist '(
+ ("{[ \t\n]*\\\\[pP]ackage{\\([^}]+\\)}[ \t,]*" .
+ "[\\1]{")
+ ;; Junk the extra argument to defvar .
+ ;; Had thought of using it for default.
+ ("^\\\\defconst\\(.+\\){}" . "\\\\defconst\\1")
+ ("^\\\\defconstx\\(.+\\){}" . "\\\\defconstx\\1")
+ ("^\\\\defvar\\(.+\\){}" . "\\\\defvar\\1")
+ ("^\\\\defvarx\\(.+\\){}" . "\\\\defvarx\\1")))
+ ;; Ask about @@ -> @
+ (goto-char (point-min))
+ (if (yes-or-no-p
+ "Would you like all occurences of `@@' replaced by `@'? ")
+ (query-replace "@@" "@" nil))
+ (goto-char (point-max))
+ (insert scribe-to-latex-tail)
+ (s2l-format-scan)
+ )
+ )
+ )
+
+(defun s2l-format-scan ()
+ (goto-char (point-min))
+ (latexinfo-insert-node-lines (point-min) (point-max) t)
+ (mark-whole-buffer)
+ (latexinfo-sequential-node-update t)
+ (latexinfo-all-menus-update)
+;; (latexinfo-master-menu nil)
+ )
+
+(setq scribe-alist
+ '(
+ ;;
+ ("@kwd\\s(:\\([a-z---]+\\)\\s)" . "\\\\kwd{\\1}")
+ ("@kwd\\s(\\([A-Za-z---]+\\)\\s)" . "\\\\kwd{\\1}")
+ ("@ux\\s(\\([@a-z--- ]+\\)\\s)" . "\\\\ux{\\1}")
+ ("@var\\s(\\([*a-z---]+\\)\\s)" . "\\\\v{\\1}")
+ ("@blankspace\\s(\\([0-9]+\\)[ \t]*lines\\s)" . "\\\\sp{\\1}")
+ ("@blankspace\\s(\\([0-9.]+\\)[ \t]*inches\\s)" . "\\\\vspace{\\1in}")
+ ("@blankspace\\s(\\([a-z\t 0-9.]+\\)\\s)" . "\\\\vspace{\\1}")
+ ("@newpage\\s(\\([0-9]+\\)\\s)" . "\\\\clearpage")
+
+ ;; \var
+ ("@i\\s(\\([a-z---]+\\)\\s)" . "\\\\var{\\1}")
+ ("@i\"\\([a-z---]+\\)\"" . "\\\\var{\\1}")
+ ("@i\\s(\\([A-Z][a-z---]+\\)\\s)" . "\\\\var{\\1}")
+ ("@i\"\\([A-Z][a-z---]+\\)\"" . "\\\\var{\\1}")
+ ("@I\\s(\\([A-Z---]+\\)\\s)" . "\\\\var{\\1}")
+ ("@i\\s(:\\([a-z---]+\\)\\s)" . "\\\\kwd{\\1}")
+ ("@I\\s(:\\([A-Z---]+\\)\\s)" . "\\\\kwd{\\1}")
+ ("@i\\s(\\([a-z---]+ *[---a-z ]+\\)\\s)" . "\\\\i{\\1}")
+
+ ("@f( )" . "\\\\ ")
+ ;; search list
+ ("\"@f\\s(\\([a-z][a-z---:.]+\\)\\s)\"" . "\\\\code{\\1}")
+ ;; Package
+ ("@f\\s(\"\\([A-Z]+\\)\"\\s)" . "\\\\p{\\1}")
+ ;; Maybe Internet address
+ ("@f\\s(\"\\([A-Z.]+\\)\"\\s)" . "\\\\code{\\1}")
+ ;; Hemlock Command
+ ("@f\\s(\"\\([A-Za-z--- ]+\\)\"\\s)" . "\\\\F{\\1}")
+ ("@F\\s(\\([A-Za-z--- ]+\\)\\s)" . "\\\\F{\\1}")
+ ;; files
+ ("@f\\s(\"\\(/[a-z---./]+\\)\"\\s)" . "\\\\file{\\1}")
+ ("\"@f\\s(\\(/[a-z---./]+\\)\\s)\"" . "\\\\file{\\1}")
+ ("@f\\s(\\(/[a-z---./]+\\)\\s)" . "\\\\file{\\1}")
+ ("@f\\s(\\(*[*A-Za-z---]+*\\)\\s)" . "\\\\v{\\1}")
+
+ ("@f\\s(\\([a-z][a-z---]+\\)\\s)" . "\\\\f{\\1}")
+ ("@f\\s(\\([A-Z][a-z---]+\\)\\s)" . "\\\\f{\\1}")
+ ("@f\\s(\\([A-Z][a-z---0-9]+\\)\\s)" . "\\\\f{\\1}")
+
+ ("@f\\s(\\([a-z][a-z---:]+\\)\\s)" . "\\\\code{\\1}")
+ ("@f\\s(\\([A-Za-z][A-Za-z---:]+\\)\\s)" . "\\\\code{\\1}")
+ ("@f\\s(\\([a-z][a-z---.]+\\)\\s)" . "\\\\file{\\1}")
+
+ ;;catch all
+ ("@f\\[\\([^]]+\\)]" . "\\\\code{\\1}")
+ ("@f(\\([^)]+\\))" . "\\\\code{\\1}")
+ ("@f<\\([^>]+\\)>" . "\\\\code{\\1}")
+ ("@f{\\([^}]+\\)}" . "\\\\code{\\1}")
+
+ ;;catch all
+ ("@i\\[\\([^]]+\\)]" . "\\\\i{\\1}")
+ ("@I\\[\\([^]]+\\)]" . "\\\\i{\\1}")
+ ("@i(\\([^)]+\\))" . "\\\\i{\\1}")
+ ("@i<\\([^>]+\\)>" . "\\\\i{\\1}")
+ ("@i{\\([^}]+\\)}" . "\\\\i{\\1}")
+ ("@i\"\\([^\"]+\\)\"" . "\\\\i{\\1}")
+
+ ("@b\\s(\\([a-zA-Z?]\\)\\s)" . "\\\\key{\\1}")
+ ("@b\\s(\\([a-z---]+\\)\\s)" . "\\\\f{\\1}") ; or \v
+ ("@b\\s(\\([a-z]+\\):\\([a-z---]+\\)\\s)" . "\\\\f{\\1:\\2}")
+ ("@b\\s(\\([a-zA-Z_. ]+\\)\\s)" . "\\\\b{\\1}")
+
+ ("@b\\[\\([^]]+\\)]" . "\\\\b{\\1}")
+ ("@b(\\([^)]+\\))" . "\\\\b{\\1}")
+ ("@b<\\([^>]+\\)>" . "\\\\b{\\1}")
+ ("@b{\\([^}]+\\)}" . "\\\\b{\\1}")
+
+ ("@w\\[\\([^]]+\\)]" . "\\\\w{\\1}")
+ ("@w(\\([^)]+\\))" . "\\\\w{\\1}")
+ ("@w<\\([^>]+\\)>" . "\\\\w{\\1}")
+ ("@w{\\([^}]+\\)}" . "\\\\w{\\1}")
+
+ ;; BNF syntax for arguments
+ ("@mopt(\\([^)]+\\))" . "\\\\mopt{\\1}")
+ ("@mopt<\\([^>]+\\)>" . "\\\\mopt{\\1}")
+ ("@mplus(\\([^)]+\\))" . "\\\\mplus{\\1}")
+ ("@mplus<\\([^>]+\\)>" . "\\\\mplus{\\1}")
+ ("@mstar(\\([^)]+\\))" . "\\\\mstar{\\1}")
+ ("@mstar<\\([^>]+\\)>" . "\\\\mstar{\\1}")
+ ("@mor" . "\\\\mor")
+
+ ("@multiple\\[\\([^]]+\\)]" . "\\\\multiple{\\1}")
+ ("@multiple(\\([^)]+\\))" . "\\\\multiple{\\1}")
+ ("@multiple<\\([^>]+\\)>" . "\\\\multiple{\\1}")
+ ("@multiple{\\([^}]+\\)}" . "\\\\multiple{\\1}")
+
+ ;; section commands
+ ("^@[mM]y[cC]hapter\\s(\\([':_a-zA-Z 0-9---]+\\)\\s)" . "\\\\chapter{\\1}")
+ ("^@[cC]hapter\\s(\\([:'_a-zA-Z 0-9---]+\\)\\s)" . "\\\\chapter{\\1}")
+ ("^@[Ss]ection\\s(\\(.+\\)\\s)[ \t]*$" . "\\\\section{\\1}")
+ ("^@[sS]ubsection\\s(\\(.+\\)\\s)[ \t]*$" . "\\\\subsection{\\1}")
+ ("^@[sS]ubsubsection\\s(\\(.+\\)\\s)[ \t]*$" . "\\\\subsubsection{\\1}")
+ ("^@[hH]eading\\s(\\(.+\\)\\s)[ \t]*$" . "\\\\paragraph{\\1}")
+
+ ;; Indexes
+ ("@[iI]ndex\\s(\\([A-Za-z--- ]+\\)\\s)" . "\\\\cindex{\\1}")
+ ("@[iI]ndex\\[\\([\\\\A-Za-z--- (){}]+\\)]" . "\\\\cindex{\\1}")
+ ("@[iI]ndex\\s(\\([A-Za-z--- ]+\\),[ \t]\\([\\\\{}()A-Za-z--- ]+\\)\\s)" . "\\\\cpsubindex{\\1}{\\2}")
+ ("@[iI]ndex\\s(\\([A-Za-z0-9(),--- ]+\\)\\s)" . "\\\\cindex{\\1}")
+ ("@findex\\s(\\([a-z---]+\\)\\s)" . "\\\\findex{\\1}")
+
+ ("^@indexentry\\s(key=\\s(\\([a-z---]+\\).*,\n.*\n.*\\s)[ \t]*\n"
+ . "\\\\kindex{\\1}\n")
+ ("@label\\s(\\([A-Za-z---]+\\)\\s)" . "\\\\label{\\1}")
+
+ ("See[ \t\n]+section[ \t\n]@ref\\s(\\([a-z---]+\\)\\s)" . "\\\\xlref{\\1}")
+ ("see[ \t\n]+section[ \t\n]@ref\\s(\\([a-z---]+\\)\\s)" . "\\\\pxlref{\\1}")
+ ("(section[ \t\n]@ref\\s(\\([a-z---]+\\)\\s))" . "(\\\\pxlref{\\1})")
+ ("See[ \t\n]+also[ \t\n]+section[ \t\n]@ref\\s(\\([a-z---]+\\)\\s)" . "\\\\xlref{\\1}")
+ ("see[ \t\n]+also[ \t\n]+section[ \t\n]@ref\\s(\\([a-z---]+\\)\\s)" . "\\\\pxlref{\\1}")
+;; ("See[ \t\n]+sections[ \t\n]@ref\\s(\\([a-z---]+\\)\\s)" . "\\\\xlref{\\1},")
+;; ("see[ \t\n]+sections[ \t\n]@ref\\s(\\([a-z---]+\\)\\s)" . "\\\\pxlref{\\1},")
+
+ ("@ref\\s(\\([A-Za-z---]+\\)\\s)" . "\\\\ref{\\1}")
+ ;; The pageref phrase will be wrong.
+ ("@pageref\\s(\\([A-Za-z---]+\\)\\s)" . "\\\\pageref{\\1}")
+
+ ("@funref\\s(\\([A-Za-z---]+\\)\\s)" . "\\\\funref{\\1}")
+ ("@macref\\s(\\([A-Za-z---]+\\)\\s)" . "\\\\macref{\\1}")
+ ("@specref\\s(\\([A-Za-z---]+\\)\\s)" . "\\\\specref{\\1}")
+ ("@varref\\s(\\([A-Za-z---]+\\)\\s)" . "\\\\varref{\\1}")
+
+ ("@-" . "\\\\-")
+ ("@appendix" . "\\\\appendix")
+ ("{@ }" . "{\\\\ }")
+ ))
+
+(setq scribe-delete-list '(
+ "^@Make"
+ "^@commandstring"
+ "^@Pageheading"
+ "^@Pagefooting"
+ "^@Device"
+ "^@Use"
+ "^@Style"
+ "^@Libraryfile"
+ "^@Tabclear"
+ "^@Textform"
+ "^@tabdivide"))
+
+(if scribe-format-syntax-table nil
+ (progn
+ (setq scribe-format-syntax-table (make-syntax-table))
+ (modify-syntax-entry ?\" "\"" scribe-format-syntax-table)
+ (modify-syntax-entry ?* "w" scribe-format-syntax-table)
+ (modify-syntax-entry ?@ "w" scribe-format-syntax-table)
+ (modify-syntax-entry ?\\ "\\" scribe-format-syntax-table)
+ (modify-syntax-entry ?\^q "\\" scribe-format-syntax-table)
+ (modify-syntax-entry ?\[ "(]" scribe-format-syntax-table)
+ (modify-syntax-entry ?\] ")[" scribe-format-syntax-table)
+ (modify-syntax-entry ?\( "()" scribe-format-syntax-table)
+ (modify-syntax-entry ?\) ")(" scribe-format-syntax-table)
+ (modify-syntax-entry ?{ "(}" scribe-format-syntax-table)
+ (modify-syntax-entry ?} "){" scribe-format-syntax-table)
+ (modify-syntax-entry ?< "(>" scribe-format-syntax-table)
+ (modify-syntax-entry ?> ")<" scribe-format-syntax-table)
+ (modify-syntax-entry ?\' "." scribe-format-syntax-table)))
+
+(defun s2l-do-alist (alist)
+ (let ((case-fold-search nil))
+ (set-syntax-table scribe-format-syntax-table)
+ (while alist
+ (goto-char (point-min))
+ (quietly-replace-regexp (car (car alist)) (cdr (car alist)) nil)
+ (message "%s" (car (car alist)))
+ (setq alist (cdr alist)))
+ )
+ )
+
+(defun s2l-do-titlepage ()
+ (s2l-do-alist
+ '(
+ ;; They will probably have to fix the location of the \maketitle
+ ("\\\\setfilename{\\(.+\\)}" . "\\\\setfilename{\\1}
+\\\\pagestyle{empty}
+\\\\date{\\\\today}
+\\\\maketitle
+
+\\\\clearpage
+\\\\pagestyle{headings}
+\\\\pagenumbering{roman}
+\\\\tableofcontents
+
+\\\\clearpage
+\\\\pagenumbering{arabic}
+\\\\node top, ,(dir), (dir)
+")
+ ("@begin\\[Text,[ \t]*indent[ \t\n]*0\\][ \t\n]*" . "\\\\noindent\n")
+ ("@end\\[Text\\][\n]" . "")
+ ))
+ )
+
+(defun s2l-do-environments ()
+ (s2l-do-alist
+ '(
+ ;; Standard environments
+ ("^@[lL]isp" . "\\\\begin{lisp}")
+ ("^@[eE]nd[lL]isp" . "\\\\end{lisp}")
+ ("^@[bB]egin\\s([eE]xample\\s)" . "\\\\begin{example}")
+ ("^@[eE]nd\\s([eE]xample\\s)" . "\\\\end{example}")
+ ("^@[bB]egin\\s([iI]\\s)" . "\\\\i{")
+ ("^@[eE]nd\\s([iI]\\s)" . "}")
+ ("^@[bB]egin\\s([vV]erbatim\\s)" . "\\\\begin{verbatim}")
+ ("^@[eE]nd\\s([vV]erbatim\\s)" . "\\\\end{verbatim}")
+ ("^@[bB]egin\\s([qQ]uotation\\s)" . "\\\\begin{quote}")
+ ("^@[eE]nd\\s([qQ]uotation\\s)" . "\\\\end{quote}")
+ ("^@[bB]egin\\s([cC]enter\\s)" . "\\\\begin{center}")
+ ("^@[eE]nd\\s([cC]enter\\s)" . "\\\\end{center}")
+ ("^@[bB]egin\\s([dD]isplay\\s)" . "\\\\begin{display}")
+ ("^@[eE]nd\\s([dD]isplay\\s)" . "\\\\end{display}")
+ ("^\\([^\\\\]+\\)@\\\\" . "\\\\item[\\1]\t")
+ ("^\\([^\\\\]+\\)\n@\\\\" . "\\\\item[\\1]\t")
+ ("^@[bB]egin\\s([pP]rogram[eE]xample\\s)" . "\\\\begin{verbatim}")
+ ("^@[eE]nd\\s([pP]rogram[eE]xample\\s)" . "\\\\end{verbatim}")
+
+ ;; Lower-case end catch all
+ ("^@[eE]nd\\s(\\([a-z]+\\)\\s)" . "\\\\end{\\1}")
+ ("@[eE]nd[dD]effun" "\\\\end{defun}")
+ ))
+ )
+
+(defun s2l-do-defuns ()
+ "Must come after (s2l-handle-defuns)"
+ (s2l-do-alist
+ '(
+ ;; @def environments
+ ;; Name is required.
+ ("^@defun{fun \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defun{\\1}{")
+ ("^@defun1{fun \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defunx{\\1}{")
+
+ ("^@defmac{fun \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defmac{\\1}{")
+ ("^@defmac1{fun \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defmacx{\\1}{")
+
+ ("^@defspec{fun \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defspec{\\1}{")
+ ("^@defspec1{fun \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defspecx{\\1}{")
+
+ ("^@defvar{var \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defvar{\\1}{")
+ ("^@defvar1{var \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defvarx{\\1}{")
+
+ ("^@defcon{var \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defconst{\\1}{")
+ ("^@defcon1{var \\s(\\([*a-z0-9+---]+\\)\\s)" . "\\\\defconstx{\\1}{")
+ ("@enddefcon" . "\\\\enddefconst")
+
+ ("@enddef\\([a-z]+\\)" . "\\\\enddef\\1")
+
+ ;; keys
+ (",\\([ \t\n]+\\)morekeys[ \t]*" . "\\1\\\\morekeys")
+ (",\\([ \t\n]+\\)yetmorekeys[ \t]*" . "\\1\\\\morekeys")
+
+ ))
+ )
+
+
+(defun s2l-do-constants ()
+ (s2l-do-alist
+ '(
+ ("@value\\s([dD]ate\\s)" . "\\\\today")
+ ;; constants
+ ;; These are totally CMU Lisp specific
+ ("@hinge\\." . "\\\\hinge.")
+ ("@true\\." . "\\\\true.")
+ ("@false\\." . "\\\\false.")
+ ("@FALSE\\." . "\\\\FALSE.")
+ ("@hemlock\\." . "\\\\hemlock.")
+ ("@Hemlock\\." . "\\\\Hemlock.")
+ ("@cmucl\\." . "\\\\cmucl.")
+ ("@cltl\\." . "\\\\cltl.")
+ ("@Python\\." . "\\\\Python.")
+ ("@python\\." . "\\\\python.")
+ ("@llisp\\." . "\\\\llisp.")
+ ("@Llisp\\." . "\\\\Llisp.")
+ ("@clisp\\." . "\\\\clisp.")
+ ("@rest\\." . "\\\\&rest.")
+ ("@key\\." . "\\\\&key.")
+ ("@dash\\." . "\\\\dash.")
+ ("@optional\\." . "\\\\&optional.")
+ ("@nil\\." . "\\\\nil.")
+ ("@Aliens\\." . "\\\\Aliens.")
+ ("@Alien\\." . "\\\\Alien.")
+ ("@alien\\." . "\\\\alien.")
+ ("@hinge," . "\\\\hinge,")
+ ("@true," . "\\\\true,")
+ ("@false," . "\\\\false,")
+ ("@FALSE," . "\\\\FALSE,")
+ ("@hemlock," . "\\\\hemlock,")
+ ("@Hemlock," . "\\\\Hemlock,")
+ ("@cmucl," . "\\\\cmucl,")
+ ("@cltl," . "\\\\cltl,")
+ ("@Python," . "\\\\Python,")
+ ("@python," . "\\\\python,")
+ ("@llisp," . "\\\\llisp,")
+ ("@Llisp," . "\\\\Llisp,")
+ ("@clisp," . "\\\\clisp,")
+ ("@rest," . "\\\\&rest,")
+ ("@key," . "\\\\&key,")
+ ("@dash," . "\\\\dash,")
+ ("@optional," . "\\\\&optional,")
+ ("@nil," . "\\\\nil,")
+ ("@Aliens," . "\\\\Aliens,")
+ ("@Alien," . "\\\\Alien,")
+ ("@alien," . "\\\\alien,")
+ ("@hinge" . "\\\\hinge{}")
+ ("@true" . "\\\\true{}")
+ ("@false" . "\\\\false{}")
+ ("@FALSE" . "\\\\FALSE{}")
+ ("@hemlock" . "\\\\hemlock{}")
+ ("@Hemlock" . "\\\\Hemlock{}")
+ ("@cmucl" . "\\\\cmucl{}")
+ ("@cltl" . "\\\\cltl{}")
+ ("@Python" . "\\\\Python{}")
+ ("@python" . "\\\\python{}")
+ ("@llisp" . "\\\\llisp{}")
+ ("@Llisp" . "\\\\Llisp{}")
+ ("@clisp" . "\\\\clisp{}")
+ ("@rest" . "\\\\&rest{}")
+ ("@key" . "\\\\&key{}")
+ ("@dash" . "\\\\dash{}")
+ ("@optional" . "\\\\&optional{}")
+ ("@nil" . "\\\\nil{}")
+ ("@Aliens" . "\\\\Aliens{}")
+ ("@Alien" . "\\\\Alien{}")
+ ("@alien" . "\\\\alien{}")
+ )))
+
+
+(defun s2l-input-files ()
+ (if (and (save-excursion (re-search-forward "^@include" nil t))
+ (yes-or-no-p
+ "Would you like to do the @include files now, to do it all at once?"))
+ (while (re-search-forward "^@include" nil t)
+ (save-excursion
+ (skip-chars-forward " {(")
+ (let ((file-name
+ (buffer-substring
+ (point)
+ (progn
+ (skip-chars-forward "^ )}\n")
+ (point)))))
+ (setq file-name
+ (expand-file-name
+ (if (file-readable-p (expand-file-name file-name))
+ file-name
+ (concat file-name ".ms"))))
+ (beginning-of-line 1)
+ (if (file-readable-p file-name)
+ (progn
+ (delete-region (point) (progn (forward-line 1) (point)))
+ (message "Inserting file %s..." file-name) (sit-for 1)
+ (insert "\n@comment{File:" file-name "}\n\n")
+ (insert-file file-name)
+ (insert "\n\n") ; important for always refill
+ (message "Inserting file %s...done" file-name))
+ (error "I can't find the file %s" file-name))
+ )))))
+
+(defun s2l-handle-comments ()
+ (let ((case-fold-search nil))
+ (set-syntax-table scribe-format-syntax-table)
+ (goto-char (point-min))
+ (replace-regexp "@[bB]egin\\s([cC]omment\\s)" "\\\\begin{ignore}" nil)
+ (goto-char (point-min))
+ (replace-regexp "@[eE]nd\\s([cC]omment\\s)" "\\\\end{ignore}" nil)
+ (goto-char (point-min))
+ (while (re-search-forward "@comment" nil t)
+ (replace-match "\\hide" t t)
+ (let ((here (point)))
+ (forward-list 1)
+ (delete-char -1)
+ (insert "}")
+ ;; sometimes after a comment is something usually found at bolp.
+ (if (looking-at "@") (insert "\n"))
+ (goto-char here)
+ (delete-char 1)
+ (insert "{")))
+ (goto-char (point-min))
+ (while (re-search-forward "@foot" nil t)
+ (replace-match "\\footnote" t t)
+ (let ((here (point)))
+ (forward-list 1)
+ (delete-char -1)
+ (insert "}")
+ (goto-char here)
+ (delete-char 1)
+ (insert "{")))
+ ))
+
+(defun s2l-handle-defuns ()
+ (let ((case-fold-search nil))
+ (set-syntax-table scribe-format-syntax-table)
+ (goto-char (point-min))
+ (while (re-search-forward "^@def[0-9a-z]+[ \t]*[[(<]" nil t)
+ (forward-char -1)
+ (let ((here (point))
+ (end (save-excursion (forward-list 1) (point))))
+ (goto-char end) (delete-char -1) (insert "}")
+ (goto-char here) (delete-char 1)(insert "{")
+ (narrow-to-region here end)
+ (goto-char (point-min))
+ (if (re-search-forward "fun[ \t]+\"\\([a-z---]+\\)\"" nil t)
+ (replace-match "fun {\\1}"))
+ (goto-char (point-min))
+ (while (re-search-forward ",\\([ \t\n]*\\)\\([pP]ackage\\|args\\|keys\\|morekeys\\|yetmorekeys\\)[ \t]*" nil t)
+ (replace-match "\\1\\\\\\2")
+ (skip-chars-forward " \t\n")
+ (let ((here (point))
+ (end (save-excursion
+ (forward-sexp 1) (point))))
+ (goto-char end) (delete-char -1) (insert "}")
+ (goto-char here) (delete-char 1)(insert "{"))
+ )
+ (goto-char (point-min))
+ (quietly-replace-string "keys{[" "keys{:" nil)
+ (goto-char (point-min))
+ (quietly-replace-string "][" " :" nil)
+ (goto-char (point-min))
+ (replace-regexp "keys{:\\([^]]+\\)]}" "keys{:\\1}" nil)
+ (goto-char (point-min))
+ (quietly-replace-string "keys{<" "keys{:" nil)
+ (goto-char (point-min))
+ (quietly-replace-string "><" " :" nil)
+ (goto-char (point-min))
+ (replace-regexp "keys{:\\([^>]+\\)>}" "keys{:\\1}" nil)
+ (widen)
+ ))
+ (goto-char (point-min))
+ ))
+
+(defun s2l-handle-environments ()
+ (let ((case-fold-search nil))
+ (set-syntax-table scribe-format-syntax-table)
+ (goto-char (point-min))
+ (while (re-search-forward "^@[cC]enter" nil t)
+ (replace-match "\\begin{center}\n" t t)
+ (let ((here (point)))
+ (forward-list 1)
+ (delete-char -1)
+ (insert "\n\\end{center}")
+ (goto-char here)
+ (delete-char 1)
+ ))
+ (s2l-do-alist
+ '(
+ ("^@[bB]egin\\s([dD]escription\\s)" . "\\\\begin{description}")
+ ("^@[eE]nd\\s([dD]escription\\s)" . "\\\\end{description}")
+ ("\n\n\\(.+\\)@\\\\" . "\n\n\\\\item[\\1]\n")
+ ("\n\\(.+\\)@\\\\" . "\n\n\\\\item[\\1]\n")
+ ("^\\\\begin{description}[ \t]*\n\\(.+\\)\n@\\\\" .
+ "\\\\begin{description}\n\n\\\\item[\\1]\n")
+ ("\n\n@\\\\" . "\n\n\\\\item\n")
+ ("\n\n\\(.+\\)\n@\\\\" . "\n\n\\\\item[\\1]\n")
+ ("\n@\\\\" . "\n\n\\\\item\n")
+ ))
+ (goto-char (point-min))
+ (while (re-search-forward "^@[bB]egin\\s([iI]temize[^]})]*\\s)" nil t)
+ (replace-match "\\begin{itemize}\n" t t)
+ (forward-char -1)
+ (let* ((beg (point))
+ (end (save-excursion
+ (re-search-forward "^@[eE]nd\\s([iI]temize\\s)" nil nil)
+ (point)))
+ (mid (save-excursion
+ (if (re-search-forward "^@[bB]egin\\s(\\(itemize\\|enumerate\\|description\\)\\s)" end t)
+ (point)))))
+ (if (and mid (< mid end))
+ (progn
+ (narrow-to-region beg mid)
+ (goto-char (point-min))
+ ;; If the item is just before an ignore, place it in the ignore
+ (while (re-search-forward "\n[ \t]*\n." nil t)
+ (forward-char -1)
+ (if (looking-at "\\\\begin{ignore}") (forward-line 1))
+ (insert "\\item\n"))
+ (widen)
+ (narrow-to-region beg (save-excursion
+ (re-search-forward "^@[eE]nd\\s([iI]temize\\s)" nil nil)
+ (point)))
+ (s2l-handle-environments)
+ (widen)
+ (goto-char beg)
+ (setq end (save-excursion
+ (re-search-forward "^@[eE]nd\\s([iI]temize\\s)" nil nil)
+ (point)))
+ )
+ (goto-char beg)
+ (narrow-to-region beg (save-excursion
+ (re-search-forward "^@[eE]nd\\s([iI]temize\\s)" nil nil)
+ (point)))
+ (goto-char (point-max))
+ (beginning-of-line 1)
+ (delete-region (point) (point-max))
+ (insert "\\end{itemize}\n" )
+ (goto-char (point-min))
+ ;; If the item is just before an ignore, place it in the ignore
+ (while (re-search-forward "\n[ \t]*\n." nil t)
+ (forward-char -1)
+ (if (looking-at "\\\\begin{ignore}") (forward-line 1))
+ (insert "\\item\n"))
+ (widen))
+ ))
+ (goto-char (point-min))
+ (while (re-search-forward "^@[bB]egin\\s([eE]numerate[^]})]*\\s)" nil t)
+ (replace-match "\\begin{itemize}\n" t t)
+ (forward-char -1)
+ (let* ((beg (point))
+ (end (save-excursion
+ (re-search-forward "^@[eE]nd\\s([eE]numerate\\s)" nil nil)
+ (point)))
+ (mid (save-excursion
+ (if (re-search-forward "^@[bB]egin\\s(\\(itemize\\|enumerate\\)\\s)" end t)
+ (point)))))
+ (if (and mid (< mid end))
+ (progn
+ (narrow-to-region beg mid)
+ (goto-char (point-min))
+ ;; If the item is just before an ignore, place it in the ignore
+ (while (re-search-forward "\n[ \t]*\n." nil t)
+ (forward-char -1)
+ (if (looking-at "\\\\begin{ignore}") (forward-line 1))
+ (insert "\\item\n"))
+ (widen)
+ (narrow-to-region beg (save-excursion
+ (re-search-forward "^@[eE]nd\\s([eE]numerate\\s)" nil nil)
+ (point)))
+ (s2l-handle-environments)
+ (widen)
+ (goto-char beg)
+ (setq end (save-excursion
+ (re-search-forward "^@[eE]nd\\s([eE]numerate\\s)" nil nil)
+ (point)))
+ )
+ (goto-char beg)
+ (narrow-to-region beg (save-excursion
+ (re-search-forward "^@[eE]nd\\s([eE]numerate\\s)" nil nil)
+ (point)))
+ (goto-char (point-max))
+ (beginning-of-line 1)
+ (delete-region (point) (point-max))
+ (insert "\\end{itemize}\n" )
+ (goto-char (point-min))
+ ;; If the item is just before an ignore, place it in the ignore
+ (while (re-search-forward "\n[ \t]*\n." nil t)
+ (forward-char -1)
+ (if (looking-at "\\\\begin{ignore}") (forward-line 1))
+ (insert "\\item\n"))
+ (widen))
+ ))
+ (goto-char (point-min))
+ (while (re-search-forward "^@[bB]egin\\s([fF]ormat\\s)" nil t)
+ ;; Assume 2 column
+ (replace-match "\\begin{table}{||l|l||}\n" t t)
+ (forward-line 1)
+ (narrow-to-region (point)
+ (save-excursion
+ (re-search-forward "^@[eE]nd\\s([fF]ormat\\s)" nil t)
+ (beginning-of-line 1)
+ (replace-match "\\end{table}" t t)
+ (beginning-of-line 1)
+ (point)))
+ ;; If the item is just before an ignore, place it in the ignore
+ (goto-char (point-min))
+ (while (re-search-forward "@\\\\" nil t)
+ (replace-match "\t& "))
+ (goto-char (point-min))
+ (quietly-replace-regexp "$" "\t\\\\\\\\")
+ (goto-char (point-min))
+ (while (re-search-forward "^[ \t]*\\\\\\\\$" nil t)
+ (replace-match "\\\\hline"))
+ (widen))
+ (goto-char (point-min))
+ )
+ )
+
+
diff --git a/macros/latex209/contrib/latexinfo/elisp/t2latexinfo.el b/macros/latex209/contrib/latexinfo/elisp/t2latexinfo.el
new file mode 100644
index 0000000000..e53666ab48
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/elisp/t2latexinfo.el
@@ -0,0 +1,500 @@
+;;; t2latexinfo.el
+
+;;; Latexinfo mode utilities to convert texinfo files to latexinfo.
+
+;;; Written for Latexinfo by Mike Clarkson
+;;; Please send bug reports to: mike@apl.ists.ca
+
+;;; Copyleft (C) 1991 Michael E. Clarkson
+;; It's not perfect, but it does 98%
+
+(require 'latexinfo)
+(require 'latexnfo-upd)
+
+(defun tex-to-latexinfo (arg)
+ (interactive "FNew File Name: ")
+ (let ((case-fold-search nil)
+ (alist latex-alist)
+ (input-buffer (current-buffer)))
+ (find-file arg)
+ (erase-buffer)
+ (insert-buffer-substring input-buffer)
+ (goto-char (point-min))
+ ;; Input the @input files
+ (t2l-input-files)
+ ;; Fix the header for LaTeX
+ (goto-char (point-min))
+ (if (re-search-forward "^\\\\input texinfo\\(.*\\)" nil t)
+ (replace-match "\\\\documentstyle[twoside,latexinfo,elisp]{report}
+\\\\pagestyle{headings}
+
+\\\\begin{document}
+
+\\\\comment Delete any of these if you don't want that particular index.
+\\\\newindex{cp}
+\\\\newindex{vr}
+\\\\newindex{fn}
+\\\\newindex{tp}
+\\\\newindex{pg}
+\\\\newindex{ky}
+
+" t nil))
+ ;; Assume that any \ from here on in the file are to print out as \
+ (quietly-replace-string "\\" "\\back " nil)
+ (goto-char (point-min))
+ (if (yes-or-no-p
+ "Would you like all occurences of `@@' replaced by `@'? ")
+ (quietly-replace-string "@@" "@" nil)
+ (if (yes-or-no-p
+ "Would you like all occurences of `@@' replaced by `\\back'? ")
+ ;; Assume that your working on the
+ ;; TeXinfo manual.
+ (let ((case-fold-search nil)
+ (alist texinfo-alist))
+ (while alist
+ (goto-char (point-min))
+ (quietly-replace-regexp (car (car alist)) (cdr (car alist)) nil)
+ (message "%s" (car (car alist)))
+ (setq alist (cdr alist)))
+ (message "Quietly Replacing @@ by \\back ")
+ (goto-char (point-min))
+ (quietly-replace-string "@@" "\\back " nil)
+ )
+ (error
+ "You'd better make up your mind between one of these two options.")))
+ (setq alist latex-delete-list)
+ (while alist
+ (goto-char (point-min))
+ (delete-matching-lines (car alist))
+ (setq alist (cdr alist)))
+ (if (re-search-forward "^@appendix" nil t nil)
+ (progn
+ (beginning-of-line 1)
+ (insert "\\appendix\n")))
+ (setq alist latex-alist)
+ (while alist
+ (goto-char (point-min))
+ (quietly-replace-regexp (car (car alist)) (cdr (car alist)) nil)
+ (message "%s" (car (car alist)))
+ (setq alist (cdr alist)))
+ )
+ ;; protect commands in section headings.
+ (goto-char (point-min))
+ (while (and nil (re-search-forward
+ "^\\\\chapter\\|\\\\section\\|\\\\subsection\\|\\\\subsubsection"
+ nil t))
+ (narrow-to-region (point) (save-excursion (forward-line 1) (point)))
+ (quietly-replace-string "\\" "\\protect\\")
+ (widen)
+ (forward-line 1)
+ )
+ )
+
+(defun t2l-input-files ()
+ (if (and (save-excursion (re-search-forward "^@input" nil t))
+ (yes-or-no-p
+ "Would you like to do the @input files now, to do it all at once?"))
+ (while (re-search-forward "^@input" nil t)
+ (save-excursion
+ (skip-chars-forward " {")
+ (let ((file-name
+ (buffer-substring
+ (point)
+ (progn
+ (skip-chars-forward "^ \n")
+ (point)))))
+ (setq file-name
+ (expand-file-name
+ (if (file-readable-p (expand-file-name file-name))
+ file-name
+ (concat file-name ".texinfo"))))
+ (beginning-of-line 1)
+ (if (file-readable-p file-name)
+ (progn
+ (delete-region (point) (progn (forward-line 1) (point)))
+ (message "Inserting file %s..." file-name) (sit-for 1)
+ (insert-file file-name)
+ (message "Inserting file %s...done" file-name))
+ (error "I can't find the file %s" file-name))
+ )))))
+
+(setq texinfo-alist
+ '(
+ ("@@@@" . "\\\\back back")
+ ;; begin end environments
+ ;; change the name of the group command
+ ("@@end[ \t]+group" . "\\\\back end\\\\{same\\\\}")
+ ("@@group" . "\\\\back begin\\\\{same\\\\}")
+ ("@@end[ \t]+quotation" . "\\\\back end\\\\{quote\\\\}")
+ ("@@quotation" . "\\\\back begin\\\\{quote\\\\}")
+ ;; We turn the @table into a description environment
+ ;; There may be a lost of information here.
+ ("@@table[ \t]+.*" . "\\\\back begin\\\\{description\\\\}")
+ ("@@end[ \t]table" . "\\\\back end\\\\{description\\\\}")
+
+ ("@@end[ \t]+\\([a-z]+\\)" . "\\\\back end\\\\{\\1\\\\}")
+
+ ("@@itemize[ \t]+\\([@a-z]+\\)" . "\\\\back begin\\\\{itemize\\\\}")
+
+ ("{@@bye}" . "{\\\\back end\\\\{document\\\\}}")
+ ("{@@sc}" . "{\\\\back s}")
+ ("{@@page}" . "{\\\\back clearpage}")
+ ("{@@itemize}" . "{\\\\back begin\\\\{itemize\\\\}}")
+
+ ;; This is broken:
+ ("@@def\\([a-z]+\\)[ \t]+\\([a-z---@{}]+\\)[ \t]+\\([a-z---@{}]+\\)[ \t]+\\([a-z---@{}]+\\)" . "\\\\back def\\1\\\\{\\2\\\\}\\\\{\\3\\\\}\\\\{\\4\\\\}")
+
+ ("@@display" . "\\\\back begin\\\\{display\\\\}")
+ ("@@enumerate" . "\\\\back begin\\\\{enumerate\\\\}")
+ ("@@example" . "\\\\back begin\\\\{example\\\\}")
+ ("@@smallexample" . "\\\\back begin\\\\{smallexample\\\\}")
+ ("@@flushleft" . "\\\\back begin\\\\{flushleft\\\\}")
+ ("@@flushright" . "\\\\back begin\\\\{flushright\\\\}")
+ ("@@format" . "\\\\back begin\\\\{format\\\\}")
+ ("@@ignore" . "\\\\back begin\\\\{ignore\\\\}")
+ ("@@ifinfo" . "\\\\back begin\\\\{ifinfo\\\\}")
+ ("@@iftex" . "\\\\back begin\\\\{iftex\\\\}")
+ ("@@lisp" . "\\\\back begin\\\\{lisp\\\\}")
+ ("@@menu" . "\\\\back begin\\\\{menu\\\\}")
+ ("@@tex" . "\\\\back begin\\\\{tex\\\\}")
+
+ ;; Do the following manually because of differences with LaTeXinfo
+ ;; @@table
+ ;; @@titlepage
+ ;; @@subtitle
+ ;; @@itemx
+ ;; @@settitle
+
+ ;; commands with arguments already in braces will be picked up
+ ;; automatically by the global substitution of @@ -> \back
+
+ ;; The arguments themselves, assumed to be inside of something like @code{}
+ ("{@@printindex}" . "{\\\\back printindex}")
+
+ ("{@@author}" . "{\\\\back author}")
+ ("{@@date}" . "{\\\\back date}")
+ ("{@@title}" . "{\\\\back title}")
+
+ ;; Sections and chapters are done LaTeX style
+ ("{@@chapter}" . "{\\\\back chapter}")
+ ("{@@top}" . "{\\\\back top}")
+ ("{@@section}" . "{\\\\back section}")
+ ("{@@subsection}" . "{\\\\back subsection}")
+ ("{@@subsubsection}" . "{\\\\back subsubsection}")
+
+ ("^@@top[ \t]+\\([^ \t]\\)$" . "\\\\back top\\\\{\\1\\\\}")
+ ("^@@chapter[ \t]+\\([^ \t]\\)$" . "\\\\back chapter\\\\{\\1\\\\}")
+ ("^@@section[ \t]+\\([^ \t]+\\)$" . "\\\\back section\\\\{\\1\\\\}")
+ ("^@@subsection[ \t]+\\([^ \t]+\\)$" . "\\\\back subsection\\\\{\\1\\\\}")
+ ("^@@subsubsection[ \t]+\\([^ \t]+\\)$" . "\\\\back subsubsection\\\\{\\1\\\\}")
+
+ ("{@@appendix}" . "{\\\\back chapter}")
+ ("{@@appendixsec}" . "{\\\\back section}")
+ ("{@@appendixsection}" . "{\\\\back section}")
+ ("{@@appendixsubsec}" . "{\\\\back subsection}")
+ ("{@@appendixsubsubsec}" . "{\\\\back subsubsection}")
+
+ ("^@@appendix[ \t]+\\(.+\\)$" . "\\\\back chapter\\\\{\\1\\\\}")
+ ("^@@appendixsec[ \t]+\\(.+\\)$" . "\\\\back section\\\\{\\1\\\\}")
+ ("^@@appendixsection[ \t]+\\(.+\\)$" . "\\\\back section\\\\{\\1\\\\}")
+ ("^@@appendixsubsec[ \t]+\\(.+\\)$" . "\\\\back subsection\\\\{\\1\\\\}")
+ ("^@@appendixsubsubsec[ \t]+\\(.+\\)$" . "\\\\back subsubsection\\\\{\\1\\\\}")
+
+ ("{@@unnumbered}" . "{\\\\back unnumbered}")
+ ("{@@unnumberedsec}" . "{\\\\back unnumberedsec}")
+ ("{@@unnumberedsubsec}" . "{\\\\back unnumberedsubsec}")
+ ("{@@unnumberedsubsubsec}" . "{\\\\back unnumberedsubsubsec}")
+
+ ("^@@unnumbered[ \t]+\\(.+\\)$" . "\\\\back unnumbered\\\\{\\1\\\\}")
+ ("^@@unnumberedsec[ \t]+\\(.+\\)$" . "\\\\back unnumberedsec\\\\{\\1\\\\}")
+ ("^@@unnumberedsubsec[ \t]+\\(.+\\)$" . "\\\\back unnumberedsubsec\\\\{\\1\\\\}")
+ ("^@@unnumberedsubsubsec[ \t]+\\(.+\\)$" . "\\\\back unnumberedsubsubsec\\\\{\\1\\\\}")
+
+ ("{@@chapheading}" . "{\\\\back chapter*}")
+ ("{@@majorheading}" . "{\\\\back chapter*}")
+ ("{@@heading}" . "{\\\\back section*}")
+ ("{@@subheading}" . "{\\\\back subsection*}")
+ ("{@@subsubheading}" . "{\\\\back subsubsection*}")
+
+ ("^@@chapheading[ \t]+\\(.+\\)$" . "\\\\back chapter*\\\\{\\1\\\\}")
+ ("^@@majorheading[ \t]+\\(.+\\)$" . "\\\\back chapter*\\\\{\\1\\\\}")
+ ("^@@heading[ \t]+\\(.+\\)$" . "\\\\back section*\\\\{\\1\\\\}")
+ ("^@@subheading[ \t]+\\(.+\\)$" . "\\\\back subsection*\\\\{\\1\\\\}")
+ ("^@@subsubheading[ \t]+\\(.+\\)$" . "\\\\back subsubsection*\\\\{\\1\\\\}")
+
+ ("{@@cindex}" . "{\\\\back cindex}")
+ ("{@@vindex}" . "{\\\\back vindex}")
+ ("{@@findex}" . "{\\\\back findex}")
+ ("{@@tindex}" . "{\\\\back tindex}")
+ ("{@@pindex}" . "{\\\\back pindex}")
+ ("{@@kindex}" . "{\\\\back kindex}")
+ ("{@@center}" . "{\\\\back begin\\\\{center\\\\}}")
+ ("{@@setfilename}" . "{\\\\back setfilename}")
+
+ ;; Examples of arguments on their own lines.
+ ("^@@printindex[ \t]+\\(.+\\)$" . "\\\\back printindex\\\\{\\1\\\\}")
+
+ ("^@@author[ \t]+\\(.+\\)$" . "\\\\back author\\\\{\\1\\\\}")
+ ("^@@date[ \t]+\\(.+\\)$" . "\\\\back date\\\\{\\1\\\\}")
+ ("^@@title[ \t]+\\(.+\\)$" . "\\\\back title\\\\{\\1\\\\}")
+
+ ("^@@itemize[ \t]+\\([^ ]+\\)$" . "\\\\back begin\\\\{itemize\\\\}")
+ ("^@@bye$" . "\\\\back end\\\\{document\\\\}")
+ ("^@@page$" . "\\\\back clearpage")
+ ("{@@page}" . "{\\\\back clearpage}")
+
+ ("{@@sp}" . "{\\\\back sp}")
+ ("{@@need}" . "{\\\\back need}")
+ ("{@@vskip}" . "{\\\\back vspace}")
+
+ ("^@@sp[ \t]+\\([^ \t]+\\)$" . "\\\\back sp\\\\{\\1\\\\}")
+ ("^@@need[ \t]+\\([^ \t]+\\)$" . "\\\\back need\\\\{\\1\\\\}")
+ ("^@@vskip[ \t]+\\([^ \t]\\)$" . "\\\\back vspace\\\\{\\1\\\\}")
+
+ ("{@@synindex}" . "{\\\\back synindex}")
+ ("{@@syncodeindex}" . "{\\\\back syncodeindex}")
+
+ ("^@@synindex[ \t]+\\([^ \t]\\)[ \t]+\\([^ \t]\\)$"
+ . "\\\\back synindex\\\\{\\1\\\\}\\\\{\\2\\\\}")
+ ("^@@syncodeindex[ \t]+\\([^ \t]\\)[ \t]+\\([^ \t]\\)$"
+ . "\\\\back syncodeindex\\\\{\\1\\\\}\\\\{\\2\\\\}")
+
+ ("@@footnotestyle[ \t]+\\([a-z]+\\)" . "\\\\back footnotestyle\\\\{\\1\\\\}")
+
+ ("^@@cindex[ \t]+\\(.+\\)$" . "\\\\back cindex\\\\{\\1\\\\}")
+ ("^@@vindex[ \t]+\\(.+\\)$" . "\\\\back vindex\\\\{\\1\\\\}")
+ ("^@@findex[ \t]+\\(.+\\)$" . "\\\\back findex\\\\{\\1\\\\}")
+ ("^@@tindex[ \t]+\\(.+\\)$" . "\\\\back tindex\\\\{\\1\\\\}")
+ ("^@@pindex[ \t]+\\(.+\\)$" . "\\\\back pindex\\\\{\\1\\\\}")
+ ("^@@kindex[ \t]+\\(.+\\)$" . "\\\\back kindex\\\\{\\1\\\\}")
+
+ ("^@@center[ \t]+\\(.+\\)$" . "\\\\back begin\\\\{center\\\\}\n\\1\n\\\\back end\\\\{center\\\\}")
+ ("^@@setfilename[ \t]+\\(.+\\)$" . "\\\\back setfilename\\\\{\\1\\\\}")
+ ))
+
+(setq latex-alist
+ '(
+ ;; begin end environments
+
+ ("^@def\\([a-z]+\\)[ \t]+\\([a-z---@{}]+\\)[ \t]+\\([a-z---@{}]+\\)[ \t]+\\([a-z---@{}]+\\)" . "\\\\def\\1{\\2}{\\3}{\\4}")
+
+ ("^@def\\([a-z]+\\)" . "\\\\def\\1")
+
+ ("^@enumerate" . "\\\\begin{enumerate}")
+ ("^@example" . "\\\\begin{example}")
+ ("^@smallexample" . "\\\\begin{smallexample}")
+ ("^@flushleft" . "\\\\begin{flushleft}")
+ ("^@flushright" . "\\\\begin{flushright}")
+ ("^@format" . "\\\\begin{format}")
+ ("^@group" . "\\\\begin{same}")
+ ("^@ignore" . "\\\\begin{ignore}")
+ ("^@ifinfo" . "\\\\begin{ifinfo}")
+ ("^@iftex" . "\\\\begin{iftex}")
+ ("^@lisp" . "\\\\begin{lisp}")
+ ("^@menu" . "\\\\begin{menu}")
+ ("^@quotation" . "\\\\begin{quote}")
+ ("@TeX{}" . "\\\\TeX{}")
+ ("^@tex" . "\\\\begin{tex}")
+
+ ;; change the name of the group command
+ ("^@end[ \t]+group" . "\\\\end{same}")
+ ("^@end[ \t]+quotation" . "\\\\end{quote}")
+
+ ;; We turn the @table into a description environment
+ ;; There may be a lost of information here.
+ ("^@table[ \t]+.*" . "\\\\begin{description}")
+ ("^@end[ \t]table" . "\\\\end{description}")
+
+ ;; Take care of the titlepage before we remove the @end commands.
+ ("^@titlepage" . "\\\\pagestyle{empty}
+\\\\date{\\\\today}
+
+")
+ ;; They will probably have to fix the location of the \maketitle
+ ("^@end[ \t]titlepage" . "\\\\maketitle
+
+\\\\clearpage
+\\\\pagestyle{headings}
+\\\\pagenumbering{roman}
+\\\\tableofcontents
+
+\\\\clearpage
+\\\\pagenumbering{arabic}
+")
+
+ ;; commands with arguments on the rest of the line
+ ("^@end[ \t]+\\(.+\\)" . "\\\\end{\\1}")
+ ;; The elisp manual has some @ifinfo 2**24 - 1@end ifinfo
+ ;; and @tex $2^{24}-1$@end tex with the @end on the smae line
+ ("@end[ \t]+ifinfo" . "\\\\end{ifinfo}")
+ ("@end[ \t]+tex" . "\\\\end{tex}")
+ ("@end[ \t]+iftex" . "\\\\end{iftex}")
+ ("@end[ \t]+defvar" . "\\\\end{defvar}")
+ ("^@printindex[ \t]+\\(.+\\)" . "\\\\printindex{\\1}")
+
+ ("^@author[ \t]+\\(.+\\)" . "\\\\author{\\1}")
+ ("^@date[ \t]+\\(.+\\)" . "\\\\date{\\1}")
+ ("^@title[ \t]+\\(.+\\)" . "\\\\title{\\1}")
+ ;; This is a little different from texinfo
+ ("}[ \t]*\n+@subtitle[ \t]+\\(.+\\)" . "\\\\\\\\\n\t\\\\n{\\1} }")
+ ("}[ \t]*\n+@subtitle[ \t]+\\(.+\\)" . "\\\\\\\\\n\t\\\\n{\\1} }")
+ ("}[ \t]*\n+@subtitle[ \t]+\\(.+\\)" . "\\\\\\\\\n\t\\\\n{\\1} }")
+ ("}[ \t]*\n+@subtitle[ \t]+\\(.+\\)" . "\\\\\\\\\n\t\\\\n{\\1} }")
+
+ ;; Sections and chapters are done LaTeX style
+ ("^@top[ \t]+\\(.+\\)" . "\\\\top{\\1}")
+ ("^@chapter[ \t]+\\(.+\\)" . "\\\\chapter{\\1}")
+ ("^@section[ \t]+\\(.+\\)" . "\\\\section{\\1}")
+ ("^@subsection[ \t]+\\(.+\\)" . "\\\\subsection{\\1}")
+ ("^@subsubsection[ \t]+\\(.+\\)" . "\\\\subsubsection{\\1}")
+
+ ("^@unnumbered[ \t]+\\(.+\\)" . "\\\\unnumbered{\\1}")
+ ("^@unnumberedsec[ \t]+\\(.+\\)" . "\\\\unnumberedsec{\\1}")
+ ("^@unnumberedsubsec[ \t]+\\(.+\\)" . "\\\\unnumberedsubsec{\\1}")
+ ("^@unnumberedsubsubsec[ \t]+\\(.+\\)" . "\\\\unnumberedsubsubsec{\\1}")
+
+ ("^@chapheading[ \t]+\\(.+\\)" . "\\\\chapter*{\\1}")
+ ("^@majorheading[ \t]+\\(.+\\)" . "\\\\chapter*{\\1}")
+ ("^@heading[ \t]+\\(.+\\)" . "\\\\section*{\\1}")
+ ("^@subheading[ \t]+\\(.+\\)" . "\\\\subsection*{\\1}")
+ ("^@subsubheading[ \t]+\\(.+\\)" . "\\\\subsubsection*{\\1}")
+
+ ("^@appendix[ \t]+\\(.+\\)" . "\\\\chapter{\\1}")
+ ("^@appendixsec[ \t]+\\(.+\\)" . "\\\\section{\\1}")
+ ("^@appendixsection[ \t]+\\(.+\\)" . "\\\\section{\\1}")
+ ("^@appendixsubsec[ \t]+\\(.+\\)" . "\\\\subsection{\\1}")
+ ("^@appendixsubsubsec[ \t]+\\(.+\\)" . "\\\\subsubsection{\\1}")
+
+ ;; The order is important here
+ ;; We turn the @itemize into an itemize environment
+ ;; There may be a lost of information here.
+ ("^@itemize[ \t]+.*" . "\\\\begin{itemize}")
+ ("^@item[ \t]+\\(.+\\)[ \t]*" . "\\\\item[\\1]")
+ ;; This is a little different from texinfo
+ ("\\]\n+@itemx[ \t]+\\(.+\\)" . ", \\1]")
+ ("\\]\n+@itemx[ \t]+\\(.+\\)" . ",\n \\1]")
+ ("\\]\n+@itemx[ \t]+\\(.+\\)" . ", \\1]")
+ ("\\]\n+@itemx[ \t]+\\(.+\\)" . ",\n \\1]")
+ ("\\]\n+@itemx[ \t]+\\(.+\\)" . ", \\1]")
+ ("\\]\n+@itemx[ \t]+\\(.+\\)" . ",\n \\1]")
+ ("^@item" . "\\\\item")
+ ("^@sp[ \t]+\\(.+\\)" . "\\\\sp{\\1}")
+ ("^@need[ \t]+\\(.+\\)" . "\\\\need{\\1}")
+ ("@vskip[ \t]+\\(.+\\)" . "\\\\vspace{\\1}")
+
+ ("^@cindex[ \t]+\\(.+\\)" . "\\\\cindex{\\1}")
+ ("^@vindex[ \t]+\\(.+\\)" . "\\\\vindex{\\1}")
+ ("^@findex[ \t]+\\(.+\\)" . "\\\\findex{\\1}")
+ ("^@tindex[ \t]+\\(.+\\)" . "\\\\tindex{\\1}")
+ ("^@pindex[ \t]+\\(.+\\)" . "\\\\pindex{\\1}")
+ ("^@kindex[ \t]+\\(.+\\)" . "\\\\kindex{\\1}")
+ ("^@center[ \t]+\\(.+\\)" . "\\\\begin{center}\n\\1\n\\\\end{center}")
+ ("^@setfilename[ \t]+\\(.+\\)" . "\\\\setfilename{\\1}")
+ ("^@settitle[ \t]+\\(.+\\)" . "\\\\markboth{\\1}{\\1}")
+
+ ;; commands with arguments already in braces
+ ("@b{" . "\\\\b{")
+ ("@t{" . "\\\\t{")
+ ("@i{" . "\\\\i{")
+ ("@r{" . "\\\\r{")
+ ("@key{" . "\\\\key{")
+ ("@w{" . "\\\\w{")
+ ("@sc{" . "\\\\s{")
+ ("@dmn{" . "\\\\dmn{")
+
+ ("@titlefont{" . "{\\\\Large ")
+ ("@code{" . "\\\\code{")
+ ("@samp{" . "\\\\samp{")
+ ("@file{" . "\\\\file{")
+ ("@kbd{" . "\\\\kbd{")
+
+ ("@today{" . "\\\\today{")
+ ("@footnote{" . "\\\\footnote{")
+ ("@footnotestyle{" . "\\\\footnotestyle{")
+
+ ("@strong{" . "\\\\strong{")
+ ("@emph{" . "\\\\emph{")
+
+ ("@defn{" . "\\\\defn{")
+ ("@dfn[ \t]*{" . "\\\\dfn{")
+ ("@ctrl{" . "\\\\ctrl{")
+ ("@var{" . "\\\\var{")
+ ("@cite{" . "\\\\cite{")
+ ("@pxref{" . "\\\\pxref{")
+ ("@ref{" . "\\\\sxref{")
+ ("@xref{" . "\\\\xref{")
+ ("@inforef{" . "\\\\inforef{")
+ ("@synindex{" . "\\\\synindex{")
+ ("@syncodeindex{" . "\\\\syncodeindex{")
+ ("@copyright{}" . "\\\\copyright\\\\ ")
+ ("@copyright" . "\\\\copyright")
+
+ ;; commands without arguments
+ ("@\\." . "\\\\.")
+ ("^@node" . "\\\\node")
+ ("@noindent" . "\\\\noindent")
+ ("@comment" . "\\\\comment")
+ ("@bullet" . "\\\\bullet")
+ ("@smallbook" . "\\\\smallbook")
+
+ ("@arrow" . "\\\\arrow")
+ ("@Arrow" . "\\\\arrow")
+ ("@equiv" . "\\\\equiv")
+ ("@result" . "\\\\result")
+ ("@equiv" . "\\\\equiv")
+ ("@error" . "\\\\error")
+ ("@expansion" . "\\\\expansion")
+ ("@point" . "\\\\point")
+ ("@print" . "\\\\print")
+
+ ("@page" . "\\\\clearpage")
+ ("^@bye" . "\\\\end{document}")
+ ("@TeX" . "\\\\TeX")
+
+ ("@exdent" . "\\\\exdent")
+ ("@minus" . "\\\\minus")
+ ("@finalout" . "\\\\finalout")
+ ("@cartouche" . "\\\\cartouche")
+
+ ("@dots" . "\\\\dots")
+ ("@refill" . "\\\\refill")
+
+ ("@:" . "\\\\:")
+ ("@{" . "\\\\{")
+ ("@}" . "\\\\}")
+ ("@\\*" . "\\\\*")
+
+ ("@c[ \t]-*-texinfo-*-" . "\\\\c -*-latexinfo-*-")
+ ("@c[ \t]+" . "\\\\c ")
+ ))
+
+ (setq latex-delete-list
+ '(
+ ;;; Still to do
+ "@syncodeindex"
+ ;;; Texinfo 2 commands to be ignored because they have been replaced.
+ ;; This is in the chapter command.
+ "@setchapternewpage[ \t]"
+ ;; Haven't made a \summarycontents yet.
+ "@summarycontents"
+ ))
+
+
+(defun tex-to-latexinfo-optionals ()
+ (goto-char (point-min))
+ (replace-regexp "{\\([a-zA-Z ]+\\) Texinfo \\([a-zA-Z ]+\\)}" "{\\1 LaTeXinfo \\2}" nil)
+ (goto-char (point-min))
+ (replace-regexp "{texinfo\\([a-z---]+\\)}" "{latexinfo\\1}" nil)
+ (goto-char (point-min))
+ (query-replace " Texinfo " " \\LaTeX info " nil)
+ (goto-char (point-min))
+ (query-replace " Texinfo " " LaTeXinfo " nil)
+ (goto-char (point-min))
+ (query-replace " Texinfo" " \\LaTeX info" nil)
+ (goto-char (point-min))
+ (replace-regexp "^Texinfo " "\\\\LaTeX info " nil)
+ (goto-char (point-min))
+ (query-replace-regexp "Texinfo$" "\\\\LaTeX info" nil)
+ (goto-char (point-min))
+ (query-replace-regexp "Texinfo$" "LaTeXinfo" nil)
+ )
diff --git a/macros/latex209/contrib/latexinfo/manual/Makefile b/macros/latex209/contrib/latexinfo/manual/Makefile
new file mode 100644
index 0000000000..a7bb5247e8
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/manual/Makefile
@@ -0,0 +1,55 @@
+# This file depends on the environment variable LATEXINFO
+# being already set.
+LATEXINFO=..
+
+# The name of your DVI to PS filter
+DVIPS=dvips
+
+# The name of your GNU Emacs
+EMACS=xemacs
+
+# The name of your directory to install the binaries
+# We have an environment variable set which points to the Gnu binary direct.
+BINDIR=${GNUBINDIR}
+
+# Where to install the info files
+INFODIR=${GNUINFODIR}
+
+# Where to install the LaTeXinfo example
+TEXDIR=${GNUSHAREDIR}/tex
+
+INSTALL = install -c -m 755
+INSTALLDATA = install -c -m 644
+
+########## End of user configurable options ################
+# The name of the file
+
+PROGRAM=latexinfo2
+MANUAL=latexinfo2
+
+ELISP=${LATEXINFO}/elisp
+DOC=${LATEXINFO}/manual
+
+
+all: $(MANUAL).dvi
+
+$(MANUAL).dvi: ${LATEXINFO}/C/latexindex $(MANUAL).tex $(MANUAL).bib
+ latex2dvi $(MANUAL).tex
+
+$(MANUAL).ps: $(MANUAL).dvi
+ $(DVIPS) $(MANUAL)
+
+install::
+ -mkdir $(BINDIR)
+ $(INSTALL) latex2dvi $(BINDIR)
+ -mkdir $(INFODIR)
+ $(INSTALLDATA) $(MANUAL).info* $(INFODIR)
+ -mkdir $(TEXDIR)
+ $(INSTALLDATA) lnfo-sample.tex $(TEXDIR)
+
+clean:
+ rm -f $(MANUAL).log $(MANUAL).blg make.el *~ #~
+
+veryclean:
+ rm -f $(MANUAL).ps $(MANUAL).dvi
+
diff --git a/macros/latex209/contrib/latexinfo/manual/latex2dvi b/macros/latex209/contrib/latexinfo/manual/latex2dvi
new file mode 100644
index 0000000000..6e688815d7
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/manual/latex2dvi
@@ -0,0 +1,204 @@
+#!/bin/sh
+#
+# latex2dvi - prepare LaTeXinfo files for printing.
+#
+# Copyright (C) 1990, 1991 Free Software Foundation.
+#
+# Roland McGrath <roland@gnu.ai.mit.edu>
+# Converted To LaTeXinfo by Mike Clarkson <mike@apl.ists.ca>
+# Version 0.10
+# 24 Sep 91
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 1, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# A copy of the GNU General Public License can be obtained from this
+# program's author (send electronic mail to roland@ai.mit.edu) or from
+# the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
+# 02139, USA.
+
+if [ $# -eq 0 ]; then
+ echo "Usage: `basename $0` FILE ..." >&2
+ exit 1
+fi
+
+# The names of your LaTeX commands.
+LATEXINDEX=latexindex
+BIBTEX=bibtex
+LATEX=latex
+
+for file in $*; do
+ if [ ! -f $file ] ; then
+ if [ ! -f $file.tex ] ; then
+ echo `basename $0`: File not found - $file
+ echo Please give the full file name.
+ exit 1
+ else
+ file=$file.tex
+ fi
+ fi
+ base="`basename $file .latexinfo | sed -e 's/\.texi$//' -e 's/\.tex$//'`"
+
+ # Find all existing index files corresponding to FILE.
+ idx_files="`echo ${base}.??`"
+ if [ "$idx_files" = "${base}.??" ] ; then
+ # Maybe it's new!
+ if grep '^\\newindex{' $file > /dev/null ; then
+ changed=yes
+ else
+ idx_files=''
+ fi
+ else
+ # Ignore files with two-letter extensions that don't look like index files.
+ oidx_files="$idx_files"
+ idx_files=''
+ for idx_file in $oidx_files; do
+ if [ "`sed -n '1s/^\(.\).*$/\1/p' $idx_file`" = \\ ]; then
+ # It starts with a backslash, so it's probably an index file.
+ idx_files="$idx_files $idx_file"
+ fi
+ done
+ fi
+
+ if grep '^\\bibliography{' $file > /dev/null ; then
+ bibtex=yes
+ bib_file=$base.bbl
+ if [ -f $bib_file ] ; then
+ # Save a copy of the old bbl file.
+ cp ${bib_file} ${bib_file}O
+ else
+ # There wasn't a bbl before so run it again anyway.
+ changed=yes
+ fi
+ fi
+
+ for idx_file in $idx_files; do
+ # Save a copy of the old index file.
+ cp ${idx_file} ${idx_file}O
+ done
+
+ if [ "$idx_files" != "" ]; then
+ # Run LATEXINDEX on the index files.
+ echo ${LATEXINDEX} $idx_files
+ ${LATEXINDEX} $idx_files
+ fi
+
+ aux_file=$base.aux
+ if [ -f $aux_file ] ; then
+ # Save a copy of the old aux file.
+ cp ${aux_file} ${aux_file}O
+ else
+ # There wasn't a aux before so run it again anyway.
+ changed=yes
+ fi
+
+ # Run LaTeX on FILE.
+ echo ${LATEX} $file
+ if ${LATEX} $file; then
+
+ # Find all the index files that exist now,
+ # so we can see if there are any new ones.
+ new_idx_files="`echo ${base}.??`"
+ if [ "$new_idx_files" = "${base}.??" ]; then
+ new_idx_files=''
+ else
+ oidx_files="$idx_files"
+ new_idx_files=''
+ for idx_file in $oidx_files; do
+ if [ "`sed -n '1s/^\(.\).*$/\1/p' $idx_file`" = \\ ]; then
+ # It starts with a backslash, so it's probably an index file.
+ new_idx_files="$new_idx_files $idx_file"
+ fi
+ done
+ fi
+
+ if [ "$new_idx_files" != "$idx_files" ]; then
+ # There are some new index files.
+ changed=yes
+ idx_files="$new_idx_files"
+ else
+ # Run through all the index files, comparing them to the old ones.
+# changed=no
+ for idx_file in $idx_files; do
+ # Compare the old and new index files.
+ cmp -s ${idx_file}O ${idx_file}
+ status=$?
+
+ # Remove the old index file.
+ rm -f ${idx_file}O
+
+ if [ $status -ne 0 ]; then
+ # The index file has changed.
+ changed=yes
+ fi
+ done # for idx_file
+ fi
+
+ if [ "$bibtex" = "yes" ] ; then
+ echo ${BIBTEX} $base
+ if ${BIBTEX} $base ; then
+ if [ -f $bib_file ] ; then
+ # Compare the old and new index files.
+ cmp -s ${bib_file} ${bib_file}O
+ status=$?
+
+ # Remove the old index file.
+ rm -f ${bib_file}O
+
+ if [ $status -ne 0 ]; then
+ # The index file has changed.
+ changed=yes
+ fi
+ fi
+ else
+ # BibTeX failed. Remove the copies of the backup bbl file.
+ if [ -f ${bib_file}O ] ; then
+ rm -f ${bib_file}O
+ fi
+ fi
+ fi
+
+ # Compare the old and new aux files.
+ if [ -f ${aux_file}O ] ; then
+ cmp -s ${aux_file}O ${aux_file}
+ status=$?
+
+ # Remove the old aux file.
+ rm -f ${aux_file}O
+
+ if [ $status -ne 0 ]; then
+ # The aux file has changed.
+ changed=yes
+ fi
+ else
+ # The aux file has changed.
+ changed=yes
+ fi
+
+ if [ "$changed" = "yes" ]; then
+ # Some index file changed. Run LATEXINDEX and LaTeX again.
+
+ # Run LATEXINDEX on the index files.
+ echo ${LATEXINDEX} $idx_files
+ if ${LATEXINDEX} $idx_files; then
+ # Run LaTeX2dvi on FILE.
+ echo $0 $file
+ $0 $file
+ fi
+ fi
+ else
+ # LaTeX failed. Remove the copies of the index files.
+ for idx_file in $idx_files; do
+ rm -f ${idx_file}O
+ done
+ fi
+
+done # for file
+
diff --git a/macros/latex209/contrib/latexinfo/manual/latexinfo2.bbl b/macros/latex209/contrib/latexinfo/manual/latexinfo2.bbl
new file mode 100644
index 0000000000..88a93824d7
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/manual/latexinfo2.bbl
@@ -0,0 +1,19 @@
+\begin{thebibliography}{Lam86}
+
+\bibitem[Lam86]{Lamport1986}
+Leslie Lamport.
+\newblock {\em LaTeX: A Document Preparation System}.
+\newblock Addison-Wesley, Reading, MA, 1986.
+
+\bibitem[Sta86]{GNUEmacsManual}
+Richard Stallman.
+\newblock {\em The GNU Emacs Manual}.
+\newblock The Free Software Foundation, 675 Massachusetts Ave., Cambridge MA,
+ 02139, 1986.
+
+\bibitem[Ste90]{Steele1990}
+Guy~L. Steele.
+\newblock {\em {Common Lisp - the Language II}}.
+\newblock Addison--Wesley, Reading, MA, 1990.
+
+\end{thebibliography}
diff --git a/macros/latex209/contrib/latexinfo/manual/latexinfo2.bib b/macros/latex209/contrib/latexinfo/manual/latexinfo2.bib
new file mode 100644
index 0000000000..f3715405ca
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/manual/latexinfo2.bib
@@ -0,0 +1,64 @@
+@BOOK{Lamport1986,
+ author = {Leslie Lamport},
+ title = {LaTeX: A Document Preparation System},
+ publisher = {Addison-Wesley},
+ year = {1986},
+ address = {Reading, MA}
+ }
+
+@MANUAL{Stallman1986,
+ author = {R. M. Stallman},
+ year = {1986},
+ title = {The GNU Emacs Manual},
+ organization = {The Free Software Foundation},
+ address = {675 Massachusetts Ave., Cambridge MA, 02139}
+ }
+
+@MANUAL{GNUEmacsManual,
+ author = {Richard Stallman},
+ year = {1986},
+ title = {The GNU Emacs Manual},
+ organization = {The Free Software Foundation},
+ address = {675 Massachusetts Ave., Cambridge MA, 02139}
+ }
+
+@MANUAL{GDBManual,
+ author = {Richard Stallman},
+ year = {1988},
+ title = {The GDB Manual},
+ organization = {The Free Software Foundation},
+ address = {675 Massachusetts Ave., Cambridge MA, 02139}
+ }
+
+@MANUAL{BisonReferenceManual,
+ author = {Charles Donnelly and Richard Stallman},
+ year = {1988},
+ title = {The Bison Reference Manual},
+ organization = {The Free Software Foundation},
+ address = {675 Massachusetts Ave., Cambridge MA, 02139}
+ }
+
+@BOOK{Urban,
+ title = {{First Steps in \LaTeX}},
+ author = {Michael Urban},
+ publisher = {Tugboat},
+ address = {},
+ year = {}
+ }
+
+@BOOK{Kopka,
+ AUTHOR = {Helmut Kopka},
+ TITLE = {{\LaTeX{} - Eine Einf\"uhrung}},
+ address = {Reading, MA},
+ PUBLISHER = {Addison--Wesley},
+ YEAR = {1991}
+ }
+
+@BOOK{Steele1990,
+ AUTHOR = {Guy L. Steele},
+ TITLE = {{Common Lisp - the Language II}},
+ address = {Reading, MA},
+ PUBLISHER = {Addison--Wesley},
+ YEAR = {1990}
+ }
+
diff --git a/macros/latex209/contrib/latexinfo/manual/latexinfo2.tex b/macros/latex209/contrib/latexinfo/manual/latexinfo2.tex
new file mode 100644
index 0000000000..68e3bc0f2e
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/manual/latexinfo2.tex
@@ -0,0 +1,11460 @@
+\documentstyle[11pt,latexinfo,elisp,format]{book} % -*-latexinfo-*-
+\pagestyle{empty}
+\setcounter{tocdepth}{1}
+
+% clisp.sty commands we'll need later.
+
+\def\empty{\t{()}}
+\def\false{\t{nil}}
+\def\true{\t{t}}
+\def\nil{\t{nil}}
+\def\FALSE{\t{nil}}
+\def\TRUE{\t{t}}
+\def\NIL{\t{nil}}
+
+\def\dlbrack{\lbrack\mskip-\thinmuskip\lbrack\mskip\thinmuskip}
+\def\drbrack{\mskip\thinmuskip\rbrack\mskip-\thinmuskip\rbrack}
+
+\def\mopt#1{{$\,\lbrack$}{\it #1\/}{$\rbrack\,$}}%
+\def\mchoice#1{{$\,\dlbrack$}{\it #1\/}{$\drbrack\,$}}%
+\def\mstar#1{{$\,\lbrace$}{\it #1\/}{$\rbrace^*\,$}}%
+\def\mplus#1{{$\,\lbrace$}{\it #1\/}{$\rbrace^+\,$}}%
+\def\mgroup#1{{$\,\lbrace$}{\it #1\/}{$\rbrace\,$}}%
+\def\mor{{$|$}}%
+\def\mind#1{$\downarrow${\it #1\/}}%
+
+%% FUNCTIONS
+
+{\catcode`&=11
+ \def\&optional{\t{\& optional}}
+ \def\&rest{\t{\& rest}}
+ \def\&key{\t{\& key}}
+}
+\begin{document}
+\bibliographystyle{alpha}
+
+\newindex{cp}
+\newindex{fn}
+
+\sloppy
+\finalout
+\setfilename{latexinfo2.info}
+\node Top, Copying, (dir), (dir)
+
+\title{The \LaTeX info Documentation Format\\
+\n{Version \latexinfoversion}}
+
+\author{Richard M. Stallman
+ and Robert J. Chassell\\
+ The Free Software Foundation,\\
+ 675 Massachusetts Ave., Cambridge MA,\\
+ \and Michael Clarkson\\
+ Centre for Earth and Space Science,\\
+ York University,\\
+ North York, Ontario, M3J 1P3}
+
+
+\date{\today}
+
+\maketitle
+
+\clearpage
+\vspace*{0pt plus 1filll}
+\noindent
+Copyright \copyright\ 1988, 1990, 1991 Free Software Foundation, Inc.\\
+Copyleft \copyright{} 1988, 1989, 1990, 1991 Michael E. Clarkson.
+
+\sp{2}
+This is version \latexinfoversion\ of the \LaTeX info documentation, and is
+for Version 18 of GNU Emacs. This is the second edition of the \LaTeX info
+documentation, and is also consistent with version 2 of Texinfo
+documentation \file{texinfo.tex}.
+\sp{2}
+
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+
+\clearpage
+\pagestyle{headings}
+\footnotestyle{separate}
+\pagenumbering{roman}
+\tableofcontents
+
+\clearpage
+\listoftables
+
+\clearpage
+\pagenumbering{arabic}
+
+\begin{menu}
+* Copying:: \LaTeX info Copying Conditions
+* Overview:: Overview of \LaTeX info
+* Beginning a File:: Beginning a \LaTeX info File
+* Structuring:: Chapter Structuring
+* Marking Text:: Marking Words and Phrases
+* Displaying Material::
+* Lists and Tables:: Making Lists Tables and Descriptions
+* Formatting Paragraphs::
+* Citations and Footnotes::
+* Input and Include Files::
+* Definition Commands:: Definition Commands: \code{\back deffn}, etc.
+* Nodes and Menus::
+* Cross References:: Making Cross References
+* Creating Indices::
+* Creating and Installing an Info File::
+* LaTeXinfo Mode:: Using \LaTeX info Mode
+* Printing Hardcopy::
+* Catching Formatting Mistakes::
+* Extending LaTeXinfo::
+* Installing LaTeXinfo::
+* Converting Files to LaTeXinfo::
+* Obtaining TeX:: Obtaining \LaTeX{}
+* Command List::
+* Command Index::
+* Concept Index:: Concept Index
+
+ --- The Detailed Node Listing ---
+
+Overview of LaTeXinfo
+
+* Using Latexinfo:: Create an normal printed book
+ or an Info file.
+* Advantages of LaTeXinfo over TeXinfo::
+* Info Files:: What is an Info file?
+* Printed Manuals:: Characteristics of a printed manual
+* Formatting Commands:: \back -commands are used for formatting.
+* A Short Sample LaTeXinfo File::
+
+Beginning a LaTeXinfo File
+
+* Conventions:: General Syntactic Conventions
+* Minimum:: What a LaTeXinfo File Must Have
+* Six Parts:: Six Parts of a LaTeXinfo File
+* The LaTeXinfo File Header::
+* The Title and Copyright Pages::
+* Generating a Table of Contents::
+* The Top Node:: Creating the top node and master menu.
+* Software Copying Conditions::
+* Ending a File:: Ending a LaTeXinfo File
+
+General Syntactic Conventions
+
+* Comments::
+
+The LaTeXinfo File Header
+
+* The Documentstyle::
+* setfilename:: \protect\code{\protect\back setfilename}
+* New Indexes::
+* Custom Headings:: Customizing Your Layout
+
+Customizing Your Layout
+
+* paragraphindent:: Paragraph Indenting
+
+The Title and Copyright Pages
+
+* Titlepage::
+* The Copyright Page and Printed Permissions::
+
+The Top Node and Master Menu
+
+* Title of Top Node:: A Top node needs a title.
+* Master Menu Parts:: A master menu has three or more parts.
+
+Software Copying Conditions
+
+* Sample Permissions::
+* Titlepage Permissions:: Titlepage Copying Permissions
+
+Sample Permissions
+
+* Inserting Permissions:: How to put permissions in your document.
+* ifinfo Permissions:: Sample \samp{ifinfo} copying permissions.
+* Titlepage Permissions:: Sample Titlepage copying permissions.
+
+Ending a LaTeXinfo File
+
+* Making a Bibliography::
+* Printing an Index and Generating Menus:: Printing an index and generating index menus.
+* File End:: Ending a file with \code{\back end\{document\}}.
+
+Chapter Structuring
+
+* Tree Structuring:: A manual is like an upside down tree \dots{}
+* Structuring Command Types:: How to divide a manual into parts.
+* Chapter::
+* Appendix::
+* Section::
+* Subsection::
+* Subsubsection:: Commands for the lowest level sections.
+
+Types of Structuring Command
+
+* Chapter::
+* Appendix::
+* Section::
+* Subsection::
+* Subsubsection::
+* Node::
+* Menu Environment::
+
+Marking Words and Phrases
+
+* Indicating:: Indicating Definitions, Commands, etc.
+* Emphasis:: Emphasizing Text
+* Insertions:: Special Insertions
+
+Indicating Definitions, Commands, etc.
+
+* code:: How to indicate code.
+* kbd:: How to show keyboard input.
+* key:: How to specify keys.
+* Ctrl::
+* samp:: How to show a literal sequence of characters.
+* var:: How to indicate a metasyntactic variable.
+* file:: How to indicate the name of a file.
+* dfn:: How to specify a definition.
+
+Emphasizing Text
+
+* emph & strong:: How to emphasize text in LaTeXinfo.
+* Smallcaps:: How to use the small caps font.
+* Fonts:: Various font commands for printed output.
+
+Special Insertions
+
+* Braces Atsigns Periods:: How to insert braces, \samp{\back } and periods.
+* dmn:: How to format a dimension.
+* Dots Bullets:: How to insert dots and bullets.
+* LaTeX and copyright:: How to insert the \LaTeX{} logo
+ and the copyright symbol.
+* minus:: How to insert a minus sign.
+* Inserting Characters Verbatim::
+
+Inserting \protect\code{\protect\back }, Braces, and Periods
+
+* Inserting An Atsign::
+* Inserting Braces:: Inserting \samp{\{} and \samp{\}}---\back \{ and \back \}
+* Controlling Spacing::
+
+Inserting Ellipsis, Dots, and Bullets
+
+* dots:: Inserting dots \dots{}
+* bullet:: Inserting a bullet.
+
+Inserting \protect\LaTeX{} and the Copyright Symbol
+
+* LaTeX:: Insert the \LaTeX{} logo.
+* copyright symbol:: \code{\back copyright}\{\}
+
+Displaying Material
+
+* Quotations::
+* Justifying Text::
+* Display Environments::
+* Examples and Verbatim::
+* Controlling Indentation::
+* cartouche:: Drawing Cartouches Around Examples
+* Special Glyphs:: Special Glyphs for Examples
+* Conditionals:: Conditionally Visible Text
+
+Quotations
+
+* quotation:: \protect\code{\protect\back begin\protect\{quote\protect\}}
+
+Justifying Text
+
+* flushleft & flushright:: Left Justification and Right Justification
+
+Left Justification and Right Justification
+
+* Center Environment::
+
+Display Environments
+
+* display:: \protect\code{\protect\back begin\protect\{display\protect\}}
+* format:: \protect\code{\protect\back begin\protect\{format\protect\}}
+
+Examples and Verbatim
+
+* example:: \protect\code{\protect\back begin\protect\{example\protect\}}
+* noindent:: \protect\code{\protect\back noindent}
+* Lisp Example:: \protect\code{\protect\back begin\protect\{lisp\protect\}}
+* Verbatim Environment::
+
+Controlling Indentation
+
+* exdent:: \protect\code{\protect\back exdent}: Undoing a Line's Indentation
+
+Special Glyphs for Examples
+
+* result:: How to show the result of expression.
+* expansion:: How to indicate an expansion.
+* Print Special Glyph:: How to indicate printed output.
+* Error Special Glyph:: How to indicate an error message.
+* Equivalence:: How to indicate equivalence.
+* Point Special Glyph:: How to indicate the location of point.
+
+Conditionally Visible Text
+
+* Conditional Commands:: Specifying text for Info or \LaTeX.
+* Using Ordinary LaTeX Commands::
+
+Making Lists Tables and Descriptions
+
+* Introducing Lists:: Formatting is done for you.
+* Itemize Environment::
+* enumerate:: How to construct a numbered list.
+* Description Environment::
+* Tabular Environment::
+* Figures and Tables::
+
+Formatting Paragraphs
+
+* Breaks:: Making and Preventing Breaks
+* Break Commands:: The Line Breaking Commands
+* Page Breaking Commands:: The Page Breaking Commands
+* Refilling Paragraphs::
+* Always Refilling Paragraphs::
+
+Making and Preventing Breaks
+
+* Break Commands:: Introducing the break commands.
+* Line Breaks:: How to force lines breaks.
+* w:: How to prevent unwanted line breaks.
+* sp:: How to insert blank lines.
+* clearpage:: How to force the start of a new page.
+* same:: How to prevent unwanted page breaks.
+* need:: Another way to prevent unwanted page breaks.
+
+The Line Breaking Commands
+
+* Line Breaks:: \protect\code{\protect\back *}: Generate Line Breaks
+* w:: \protect\code{\protect\back w}\protect\{\protect\var{text}\protect\}: Prevent Line Breaks
+* sp:: \protect\code{\protect\back sp} \protect\var{n}: Insert Blank Lines
+
+The Page Breaking Commands
+
+* page:: Start a New Page
+* group:: Putting things on the Same Page
+* need:: Prevent Page Breaks
+
+Citations and Footnotes
+
+* Footnotes::
+* Citations::
+
+Input and Include Files
+
+* Input Files::
+* Include Files::
+
+Include Files
+
+* Using Include Files:: How to use the \code{\back include} command.
+* Sample Include File:: A sample outer file with included files
+ within it; and a sample included file.
+
+Definition Commands
+
+* Untyped Languages Definition Commands::
+* C Functions::
+* Abstract Objects:: Object-Oriented Programming
+* Sample Function Definition:: A Sample Function Definition
+
+Untyped Languages Definition Commands
+
+* Def Cmd Template:: How to structure a description using a
+ definition command.
+* Optional Parameters:: How to handle optional and repeated parameters.
+* Def Cmds in Detail:: All the definition commands.
+* Functions Commands:: Functions and Similar Entities
+* Variables Commands:: Variables and Similar Entities
+
+The Definition Commands
+
+* Functions Commands:: Commands for functions.
+* Variables Commands:: Commands for variables.
+* Typed Functions:: Commands for functions in typed languages.
+* Typed Variables:: Commands for variables in typed languages.
+* Abstract Objects:: Commands for object-oriented programming.
+* Data Types:: The definition command for data types.
+
+C Functions
+
+* Typed Functions:: Functions in Typed Languages
+* Typed Variables:: Variables in Typed Languages
+
+Object-Oriented Programming
+
+* Data Types::
+
+Nodes and Menus
+
+* Node Menu Illustration:: A diagram and sample nodes and menus.
+* node:: The \code{\back node} command in detail.
+* Node Names:: Choosing Node and Pointer Names
+* Menu Environment::
+* Other Info Files:: Referring to nodes in other Info files.
+
+\protect\code{\protect\back node}
+
+* Node Names:: Choosing node and pointer names.
+* Writing a Node:: How to write a node line.
+
+Choosing Node and Pointer Names
+
+* Writing a Node:: Writing a Node Line
+
+Menu Environment
+
+* Menu Location:: Put a menu in a short node.
+* Menu Item:: How to write a menu item.
+* Menu Example:: A menu example.
+
+Making Cross References
+
+* References:: What cross references are for.
+* Cross Reference Commands:: A summary of the different commands.
+* Cross Reference Parts:: A cross reference has several parts.
+* xref:: Begin a reference with `See' \dots{}
+* Top Node Naming:: Naming a `Top' Node
+* ref:: A reference for the last part of a sentence.
+* pxref:: How to write a parenthetical cross reference.
+* inforef:: How to refer to an Info-only file.
+
+\protect\code{\protect\back xref}
+
+* Reference Syntax:: What a reference looks like and requires.
+* One Argument:: \code{\back xref} with one argument.
+* Two Arguments:: \code{\back xref} with two arguments.
+* Three Arguments:: \code{\back xref} with three arguments.
+* Four and Five Arguments:: \code{\back xref} with Four and Five Arguments
+
+Creating Indices
+
+* Index Entries:: Choose different words for index entries.
+* Indexing Commands:: How to make an index entry.
+* Combining Indices:: How to combine indices.
+
+Defining the Entries of an Index
+
+* Declaring indices:: Declaring Indices
+* Special Index Entries::
+
+Declaring Indices
+
+* Special Index Entries::
+
+Creating and Installing an Info File
+
+* Creating an Info file::
+* Installing an Info File::
+
+Creating an Info file
+
+* latexinfo-format commands:: The \protect\code{latexinfo-format\protect\dots{}} Commands
+* Tag and Split Files:: Tag Files and Split Files
+
+Tag Files and Split Files
+
+* Installing an Info file::
+* Extending LaTeXinfo::
+
+Installing an Info File
+
+* Directory file:: The top level menu for all Info files.
+* New Info File:: Listing a new info file.
+* Other Info Directories:: How to specify Info files that are
+ located in other directories.
+
+Using LaTeXinfo Mode
+
+* Emacs Editing:: \LaTeX info mode adds to the usual
+ editing commands.
+* Inserting:: How to insert frequently used commands.
+* Showing the Structure:: How to show the structure of a file.
+* Updating Nodes and Menus:: How to update or create new nodes and menus.
+* Info Formatting:: Formatting for Info.
+* Printing:: How to format and print part or all of a file.
+* LaTeXinfo Mode Summary:: Summary of all the \LaTeX info mode commands.
+
+Updating Nodes and Menus
+
+* Updating Commands:: Five major updating commands.
+* Updating Requirements:: How to structure a \LaTeX info file for
+ using the updating command.
+* Other Updating Commands:: Indenting descriptions, inserting
+ missing nodes lines, and updating
+ nodes in sequence.
+* latexinfo-multiple-files-update:: \protect\code{latexinfo-multiple-files-update}
+
+Printing Hardcopy
+
+* How to Print:: How to print a hardcopy manual with
+ shell commands.
+* Printing from Emacs:: How to print from an Emacs shell.
+* LaTeXinfo Mode Printing:: How to format and print in \LaTeX info mode.
+* Compile-Command:: How to print using Emacs's compile command.
+* Preparing for LaTeX:: Preparing for Use of \LaTeX{}
+* Overfull Hboxes:: What are and what to do with overfull hboxes.
+
+Catching Formatting Mistakes
+
+* Debugging with Info:: How to catch errors with Info formatting.
+* Debugging with LaTeX:: How to catch errors with \LaTeX{} formatting.
+* Using latexinfo-show-structure:: How to use \code{latexinfo-show-structure}.
+* Using occur:: How to list all lines containing a pattern.
+* Running Info-Validate:: How to find badly referenced nodes.
+
+Finding Badly Referenced Nodes
+
+* Using Info-validate:: How to run \code{Info-validate}.
+* Unsplit:: How to create an unsplit file.
+* Tagifying:: How to tagify a file.
+* Splitting:: How to split a file manually.
+
+Extending LaTeXinfo
+
+* Optional Style Files::
+* LaTeXinfo support for European languages::
+* Writing Your Own Style Files::
+
+Optional Style Files
+
+* The fvpindex Style::
+* Clisp Style::
+
+Commands to be used by the end users
+
+* Obsolete Commands::
+* Lower Level Commands and Features::
+
+Installing LaTeXinfo
+
+* Compiling LaTeXinfo::
+* Installing the LaTeXinfo Distribution::
+
+Installing the LaTeXinfo Distribution
+
+* Installing the Style Files::
+
+Converting Files to LaTeXinfo
+
+* Converting LaTeX Files to LaTeXinfo::
+* Converting TeXinfo Files into LaTeXinfo Files::
+* Converting Scribe Files to LaTeXinfo::
+
+Converting LaTeX Files to LaTeXinfo
+
+* l2latexinfo.el::
+
+Converting TeXinfo Files into LaTeXinfo Files
+
+* Differences from TeXinfo::
+\end{menu}
+
+\node Copying, Overview, , Top
+\chapter*{LaTeXinfo Copying Conditions}
+\markboth{LaTeXinfo Copying Conditions}{LaTeXinfo Copying Conditions}
+\cindex{Copying conditions}
+\cindex{Conditions for copying LaTeXinfo}
+
+The programs currently being distributed that relate to \LaTeX info
+include portions of GNU Emacs, plus other separate programs (including
+\code{latexinfo.sty}, \code{latexindex}, and \code{info}). These
+programs are \dfn{free}; this means that everyone is free to use them
+and free to redistribute them on a free basis. The Latexinfo-related
+programs are not in the public domain; they are copyrighted and there
+are restrictions on their distribution, but these restrictions are
+designed to permit everything that a good cooperating citizen would want
+to do. What is not allowed is to try to prevent others from further
+sharing any version of these programs that they might get from
+you.\refill
+
+ Specifically, we want to make sure that you have the right to give
+away copies of the programs that relate to \LaTeX info, that you receive
+source code or else can get it if you want it, that you can change these
+programs or use pieces of them in new free programs, and that you know
+you can do these things.\refill
+
+ To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute
+copies of the \LaTeX info related programs, you must give the recipients all
+the rights that you have. You must make sure that they, too, receive or
+can get the source code. And you must tell them their rights.\refill
+
+ Also, for our own protection, we must make certain that everyone finds
+out that there is no warranty for the programs that relate to LaTeXinfo.
+If these programs are modified by someone else and passed on, we want
+their recipients to know that what they have is not what we distributed,
+so that any problems introduced by others will not reflect on our
+reputation.\refill
+
+ The precise conditions of the licenses for the programs currently
+being distributed that relate to \LaTeX info are found in the General Public
+Licenses that accompany them.\refill
+
+\node Overview, Using Latexinfo, Copying, Top
+\chapter{Overview of LaTeXinfo}
+\cindex{Overview of LaTeXinfo}
+\cindex{LaTeXinfo overview}
+
+\LaTeX info\footnote{Note that the first syllable of ``texinfo'' is
+pronounced like ``speck'', not ``hex''. This odd pronunciation is
+derived from \LaTeX, in which the \samp{X} is actually the Greek
+letter ``chi'' rather than the English letter ``ex'' (the \samp{T} and
+\samp{E} are Greek letters also, but they happen to be pronounced the
+same way in Greek as in English).} is a documentation system that uses a
+single source file to produce both on-line help (and other information)
+and a printed manual. This means that instead of writing two different
+documents, one providing on-line information and the other for a printed
+manual, you need write only one document. When the system is revised,
+you need revise only one document. You can print the manual with most
+laser printers, and you can read the on-line help, known as an \dfn{Info
+file}, with the Info documentation-reading programs. These
+documentation-reading programs are available for use under GNU Emacs,
+under X-windows, or for \code{termcap} based ordinary terminals.\refill
+
+
+\begin{menu}
+* Using Latexinfo:: Create an normal printed book
+ or an Info file.
+* Advantages of LaTeXinfo over TeXinfo::
+* Info Files:: What is an Info file?
+* Printed Manuals:: Characteristics of a printed manual
+* Formatting Commands:: \back -commands are used for formatting.
+* A Short Sample LaTeXinfo File::
+\end{menu}
+
+\begin{ifinfo}
+\node Using Latexinfo, Advantages of LaTeXinfo over TeXinfo, Overview, Overview
+\section{Using Latexinfo}
+\end{ifinfo}
+
+Using \LaTeX info, you can create a printed document with the normal
+features of a book, including chapters, sections, cross references, and
+indices. From the same \LaTeX info source file, you can create a
+menu-driven, on-line Info file with nodes, menus, cross references, and
+indices. You can, if you wish, make the chapters and sections of the
+printed document correspond to the nodes of the on-line information, and
+ use the same cross references and indices for both the Info file and
+the printed document.\refill
+
+To make a printed manual, process a \LaTeX info source file with the
+\LaTeX{} typesetting program. This creates a \scap{dvi} file that you can
+typeset and print as a book. To create an Info file, you process a \LaTeX
+info source file with Emacs's \code{latexinfo-format-buffer} command;
+this creates an Info file that you can install on-line.\refill
+
+Info works with almost every type of computer terminal; similarly,
+\LaTeX{} works with many types of printer. This power makes \LaTeX info
+a general purpose system, but brings with it a constraint, which is that
+a \LaTeX info file may contain only the customary ``typewriter''
+characters (letters, numbers, spaces, and punctuation marks) but no
+special graphics.\refill
+
+A \LaTeX info file is a plain \scap{ascii} file containing text and
+\dfn{\back -commands} (words preceded by an \samp{\back }) that tell the
+typesetting and formatting programs what to do. You may edit a
+\LaTeX info file with any text editor; but it is especially convenient to
+use GNU Emacs since that editor has a special mode, called \LaTeX info
+mode, that provides various \LaTeX info-related features.
+(\xref{LaTeXinfo Mode}.)\refill
+
+Before writing a \LaTeX info source file, you should become familiar
+with the Info documentation reading program and learn about nodes,
+menus, cross references, and the rest. On Unix systems, these programs
+are called \code{info} for terminals, and \code{xinfo} for systems with
+X-Windows. (\inforef{Top, info, info}, for more information.)\refill
+
+\LaTeX info creates both on-line help and a printed manual; moreover, it
+is freely redistributable.
+
+\node Advantages of LaTeXinfo over TeXinfo, Info Files, Using Latexinfo, Overview
+\section{Advantages of LaTeXinfo over TeXinfo}
+\cindex{Advantages of LaTeXinfo over TeXinfo}
+
+Documentation for GNU utilities and libraries is usually written in a
+format called \dfn{\TeX info}. This document describes an enhancement
+of this format which can be used with \LaTeX\ instead of \TeX.
+
+\LaTeX info offers a number of advantages over \TeX info:
+
+\begin{enumerate}
+\item
+The point size or layout style of a document can be changed easily,
+using the \code{documentstyle} (\t{article, report, book, twoside, \dots}).
+
+\item
+\LaTeX\ has better error checking than \TeX\ files, especially in
+begin/end environments. In addition, the \LaTeX\ error messages are more
+informative. This makes it considerably easier to make extensions and
+enhancements (read \i{hacks}).
+
+\item
+\LaTeX\ delimits its arguments with braces, so it's easier to tell where
+a \LaTeX info command starts, and where it ends. TeXinfo has to stand on
+its head to avoid using TeX's braces.
+
+\item
+Any \LaTeX\ commands not understood by the on-line manual generator\\
+(\file{latexinfo.el}) are simply ignored. This means that you are free to add
+a considerable number of \LaTeX\ commands to make you manual look pretty,
+as long as you don't care that there will be no action taken by the
+Info formatting program.
+
+\item
+It is easy to add your own extensions to the on-line manual generator
+by making GNU Emacs handlers for your \LaTeX\ extensions. This is
+the Emacs counterpart to the \code{documentstyle} options. \LaTeX info looks
+in a specified directory for GNU Elisp code that corresponds to each
+style file. This makes it easy to modularize your style files.
+
+\item \LaTeX\ has many advantages over \TeX, such as being able to easily
+incorporate the Bib\TeX\ bibliography formatting program.
+\end{enumerate}
+
+\clearpage
+\node Info Files, Printed Manuals, Advantages of LaTeXinfo over TeXinfo, Overview
+\section{Info files}
+\cindex{Info files}
+
+A \LaTeX info file can be transformed into a printed manual and an on-line Info
+file.
+
+An on-line Info file is a file formatted so that the Info documentation
+reading program can operate on it. Info files are divided into pieces
+called \dfn{nodes}, each of which contains the discussion of one topic.
+Each node has a name, and contains both text for the user to read and
+pointers to other nodes, which are identified by their names. The Info
+program displays one node at a time, and provides commands with which the
+user can move to the other related nodes.
+\inforef{Top, info, info}, for more information about using Info.\refill
+
+Each node of an Info file may have any number of child nodes that
+describe subtopics of the node's topic. The names of these child
+nodes, if any, are listed in a \dfn{menu} within the parent node; this
+allows you to use certain Info commands to move to one of the child
+nodes. Generally, a \LaTeX info file is organized like a book. If a node
+is at the logical level of a chapter, its child nodes are at the level
+of sections; likewise, the child nodes of sections are at the level
+of subsections.\refill
+
+All the children of any one parent are linked together in a
+bidirectional chain of `Next' and `Previous' pointers. This means
+that all the nodes that are at the level of sections within a chapter
+are linked together. Normally the order in this chain is the same as
+the order of the children in the parent's menu. Each child node
+records the parent node name, as its `Up' pointer. The last child has
+no `Next' pointer, and the first child has the parent both as its
+`Previous' and as its `Up' pointer.\footnote{In some documents, the
+first child has no `Previous' pointer. Occasionally, the last child
+has the node name of the next following higher level node as its
+`Next' pointer.}\refill
+
+The book-like structuring of an Info file into nodes that correspond
+to chapters, sections, and the like is a matter of convention, not a
+requirement. The `Up', `Previous', and `Next' pointers of a node can
+point to any other nodes, and a menu can contain any other nodes.
+Thus, the node structure can be any directed graph. But it is usually
+more comprehensible to follow a structure that corresponds to the
+structure of chapters and sections in a printed manual.\refill
+
+In addition to `Next', `Previous', and `Up' pointers and menus, Info
+provides cross--references, that can be sprinkled throughout the text.
+This is usually the best way to represent links that do not fit a
+hierarchical structure. Usually, you will design a document so that its
+nodes match the structure of chapters and sections in the printed
+manual. But there are times when this is not right for the material
+being discussed. Therefore, \LaTeX info uses separate commands to
+specify the node structure of the Info file and the section structure of
+the printed manual.\refill
+
+Generally, you enter an Info file through a node that by convention is
+called \samp{Top}. This node normally contains just a brief summary
+of the file's purpose, and a large menu through which the rest of the
+file is reached. From this node, you can either traverse the file
+systematically by going from node to node, or you can go to a specific
+node listed in the main menu, or you can search the index menus and
+then go directly to the node that has the information you want.\refill
+
+\clearpage
+\node Printed Manuals, Formatting Commands, Info Files, Overview
+\section{Printed Manuals}
+\cindex{Printed manual characteristics}
+\cindex{Manual characteristics, printed}
+\cindex{Characteristics of printed manual}
+
+A \LaTeX info file can be formatted and typeset as a printed manual. To
+do this, you need to use \LaTeX, a powerful, sophisticated typesetting
+program written by Leslie Lamport, based on the \TeX{} typesetting
+system written by by Donald Knuth. A \LaTeX info-based printed manual
+will be similar to any other book; it will have a title page, copyright
+page, table of contents, and preface, as well as chapters, numbered or
+unnumbered sections and subsections, page headers, cross references,
+footnotes, and indices.\refill
+
+You can use \LaTeX info to write a book without ever having the intention
+of converting it into on-line information. You can use \LaTeX info for
+writing a printed novel, and even to write a printed memo.\refill
+
+\LaTeX{} is a general purpose typesetting program. \LaTeX info provides a
+file called \file{latexinfo.sty} that contains information (definitions
+or \dfn{macros}) that \LaTeX{} uses when it typesets a \LaTeX info file.
+(The macros tell \LaTeX{} how to convert the \LaTeX info \back -commands to
+\LaTeX{} commands, which \LaTeX{} can then process to create the typeset
+document.) \LaTeX\ allows you to customize the
+design of your document by selecting different document styles and
+options. You can readily change the style in which the printed document
+is formatted; for example, you can change the sizes and fonts used, the
+amount of indentation for each paragraph, the degree to which words are
+hyphenated, and the like. By changing the specifications, you can make
+a book look dignified, old and serious, or light-hearted, young and
+cheery. See the \LaTeX\ Manual for more details \cite{Lamport1986}.\refill
+
+\LaTeX{} is freely distributable. It is written in a dialect of Pascal
+called WEB and can be compiled either in Pascal or (by using a
+conversion program that comes with the \LaTeX{} distribution) in C.
+(\inforef{TeX Mode, TeX Mode, emacs}, for information about
+\LaTeX.)\refill
+
+\LaTeX{} is very powerful and has a great many features. Because a
+\LaTeX info file must be able to present information both on a
+character-only terminal in Info form and in a typeset book, the
+formatting commands that \LaTeX info supports are necessarily limited.
+However, you are free to use any \LaTeX\ extensions as long as you don't
+mind them being ignored by the Info formatting program. Or you can
+write your own extensions to the Info formatting program.
+\xref{Extending LaTeXinfo}.\refill
+
+\node Formatting Commands, A Short Sample LaTeXinfo File, Printed Manuals, Overview
+\section{\protect\back -commands}
+\cindex{\back -commands}
+\cindex{Formatting commands}
+
+In a \LaTeX info file, the commands that tell \LaTeX{} how to typeset
+the printed manual and tell \code{latexinfo-format-buffer} how to create
+an Info file are preceded by \samp{\back }; they are called \dfn{\back
+-commands}. For example, \code{\back node} is the command to indicate a
+node and \code{\back chapter} is the command to indicate the start of a
+chapter.\refill
+
+\beforenoterule
+\begin{sideremark}
+Most of the \back -commands, with a few exceptions such as \code{\back
+LaTeX\{\}}, must be written entirely in lower case.\refill
+\end{sideremark}
+\afternoterule
+
+The \LaTeX info \back -commands are a limited subset of \LaTeX\
+commands. The limits make it possible for \LaTeX info files to be
+understood both by \LaTeX{} and by the code that converts them into Info
+files. This is because you have to be able to display Info files on any
+terminal that displays alphabetic and numeric characters.\refill
+
+Because \LaTeX info is an extension of \LaTeX, it is assumed in this
+manual that you are familiar with \LaTeX. There is a good reference
+manual available by the author \cite{Lamport1986}, and there are several
+beginner's introduction manuals alos available. You should read these
+first before trying to use \LaTeX info.
+
+Unlike \LaTeX, all ASCII printing characters except \samp{\back },
+\samp{\{} and \samp{\}} can appear in body text in a \LaTeX info file
+and stand for themselves. This means that the characters \code{# $ % ^
+& _ |} all print as normal characters. This is for several reasons.
+Firstly, \LaTeX info is designed for documenting computer programs,
+where these characters are used quite often. Secondly, the special uses
+in \LaTeX\ of some of these characters, such as math mode, are not used
+in \LaTeX info, so there is little point in making then special. And
+finally, because there is only one character in
+\LaTeX info that starts a command (\code{\back }), it is easier to
+implement the Info formating program, without making a complete
+implementation of \LaTeX.
+
+\xref{Using Ordinary LaTeX Commands}, for how to make
+\LaTeX info treat these characters as \LaTeX\ does.
+
+\clearpage
+\node A Short Sample LaTeXinfo File, A Short Sample LaTeXinfo File, Formatting Commands, Overview
+\section{A Short Sample LaTeXinfo File}
+\cindex{A Short Sample LaTeXinfo File}
+\cindex{Sample LaTeXinfo file}
+
+A \LaTeX info file looks like the following, which is a complete but very
+short \LaTeX info file. The \code{\back comment} or \code{\back c} command
+introduces comments that will not appear in either the Info file or the
+printed manual; they are for the person who reads the \LaTeX info file.
+
+The first part of the file, from \samp{\back documentstyle} through to
+\samp{\back setfilename}, looks more intimidating than it is. Most of the
+material is standard boilerplate; when you write a manual, you just put in
+the name of your own manual in this section.\refill
+
+All the commands that tell \LaTeX\ how to typeset the printed manual and tell\\
+\code{latexinfo-format-buffer} how to create an Info file are preceded
+by \samp{\back }; thus, \code{\back node} indicates a node and
+\code{\back chapter} indicates the start of a chapter.\refill
+
+\smallverbatimfile{lnfo-sample.tex}
+\end{smallverbatim}
+
+\clearpage
+Here is what the contents of the first chapter of the sample look like:
+
+\begin{quotation}
+
+This is the contents of the first chapter.
+
+Here is a numbered list.
+
+\begin{enumerate}
+\item
+This is the first item.
+
+\item
+This is the second item.
+\end{enumerate}
+
+The \kbd{M-x latexinfo-format-buffer} command in Emacs transforms a \LaTeX info
+file like this into an Info file; and \LaTeX\ typesets it for a printed manual.
+\end{quotation}
+
+\section{The Structure of this Manual}
+
+This manual is structured in four parts:
+
+\begin{description}
+\item[LaTeX] This introduces the \LaTeX\ commands that are supported by
+\LaTeX info. This includes topic such as chapter structuring, marking
+words and phrases, displayed material, making lists tables and
+descriptions, formatting paragraphs, citations and footnotes.
+
+\item[Info] This introduces the concept of the \code{\back node}, and
+the specific requirements of the Info formatting program. This includes
+nodes and menus, making cross references, creating indices, and creating
+and installing an info file.
+
+\item[Emacs]
+This part show how to run \LaTeX\ and Info to generate the printed and
+on--line versions of the manual. It also describes how Emacs can make
+your life easier when writing \LaTeX info programs.
+
+\item[Appendices]
+The appendices describe how to install \LaTeX info, how to convert files
+from other formats to \LaTeX info, and gives a summary of all of the
+commands.
+
+\end{description}
+\part{LaTeX}
+
+\node Beginning a File, Conventions, A Short Sample LaTeXinfo File, Top
+\chapter{Beginning a LaTeXinfo File}
+\cindex{Beginning a LaTeXinfo file}
+\cindex{LaTeXinfo file beginning}
+\cindex{File beginning}
+
+\begin{menu}
+* Conventions:: General Syntactic Conventions
+* Minimum:: What a LaTeXinfo File Must Have
+* Six Parts:: Six Parts of a LaTeXinfo File
+* The LaTeXinfo File Header::
+* The Title and Copyright Pages::
+* Generating a Table of Contents::
+* The Top Node:: Creating the top node and master menu.
+* Software Copying Conditions::
+* Ending a File:: Ending a LaTeXinfo File
+\end{menu}
+
+\node Conventions, Comments, Beginning a File, Beginning a File
+\comment node-name, next, previous, up
+\section{General Syntactic Conventions}
+\cindex{General syntactic conventions}
+\cindex{Syntactic conventions}
+\cindex{Conventions, syntactic}
+
+All \scap{ascii} printing characters except \samp{\back }, \samp{\{} and
+\samp{\}} can appear in a \LaTeX info file and stand for themselves.
+\samp{\back } is the escape character which introduces commands.
+\samp{\{} and \samp{\}} should be used only to surround arguments to
+certain commands. To put one of these special characters into the
+document, put an \samp{\back } character in front of it, like this:
+\samp{\back back}, \samp{\back \{}, and \samp{\back \}}.\refill
+
+It is customary in \LaTeX{} to use doubled single-quote characters to
+begin and end quotations:
+\verb+``+ and
+\verb+'+. This
+convention should be followed in \LaTeX info files. \LaTeX{} converts
+doubled single-quote characters to left- and right-hand doubled
+quotation marks, ``like this,'' and Info converts doubled single-quote
+characters to \scap{ascii} double-quotes:
+\verb+``+ and
+\verb+''+
+to \samp{"}. \xref{Inserting Characters Verbatim} for how to protect
+sections of documentation from these global substitutions.\refill
+
+Use three hyphens in a row, \samp{---}, for a dash---like this. In
+\LaTeX, a single or even a double hyphen produces a printed dash that
+is shorter than you want. Info reduces three hyphens to two for
+display on the screen.\refill
+
+\LaTeX\ ignores the line-breaks in the input text, except for blank
+lines, which separate paragraphs. Info generally preserves the line
+breaks that are present in the input file. Therefore, break the lines
+in the \LaTeX info file the way you want them to appear in the output
+Info file, and let \LaTeX\ take care of itself. Since Info does not
+normally refill paragraphs when it processes them, a line with commands
+in it will sometimes look bad after Info has run on it. To cause Info
+to refill the paragraph after finishing with the other processing, you
+need to put the command \code{\back refill} at the end of the paragraph.
+(\xref{Refilling Paragraphs}.)\refill
+
+If you mark off a region of the \LaTeX info file with the \code{\back
+begin\{iftex\}} and \w{\code{\back end\{iftex\}}} commands, that region
+will appear only in the printed copy; in that region, you can use
+ commands borrowed from \LaTeX{} that you cannot use in Info. Likewise,
+if you mark off a region with the \code{\back begin\{ifinfo\}} and
+\code{\back end\{ifinfo\}} commands, that region will appear only in the
+Info file; in that region, you can use Info commands that you cannot use
+in \LaTeX. (\xref{Conditionals}.)
+
+\cindex{Tabs; don't use!}
+\begin{quote}
+\strong{Caution:} Do not use tabs in examples in a \LaTeX info file!
+\LaTeX{} treats them like single spaces.\footnote{To avoid putting tabs into your file,
+you can set the \code{indent-tabs-mode} variable in Emacs to \code{nil}
+so that Emacs inserts multiple spaces when you press the \key{TAB} key.
+Also, you can run \code{untabify} to convert tabs in a region to
+multiple spaces.\refill}
+\end{quote}
+
+\begin{menu}
+* Comments::
+\end{menu}
+
+\node Comments, Minimum, Conventions, Conventions
+\subsection{Comments}
+\findex{c}
+\findex{comment}
+
+You can write comments in a \LaTeX info file that will not appear in
+either the Info file or the printed manual by using the
+\code{\back comment} command (which may be abbreviated to \code{\back c}).
+Such comments are for the person who reads the \LaTeX info file. All the
+text on a line that follows either \code{\back comment} or \code{\back c} is a
+comment; the rest of the line does not appear in either the Info file
+or the printed manual. (The \code{\back comment} or \code{\back c} does not
+have to be at the beginning of the line; only the text on the line
+that follows after the \code{\back comment} or \code{\back c} command does not
+appear.)\refill
+\cindex{Comments}
+\findex{comment}
+\findex{c \r{(comment)}}
+
+You can write long stretches of text that will not appear in either the
+Info file or the printed manual by using the \code{\back
+begin\{ignore\}} and \code{\back end\{ignore\}} commands. Write each of
+these commands on a line of its own, starting each command at the
+beginning of the line. Text between these two commands does not appear
+in the processed output. You can use \code{\back begin\{ignore\}} and
+\code{\back end\{ignore\}} for writing comments or for holding text you
+may wish to use in another version of your document. Often, \code{\back
+begin\{ignore\}} and \code{\back end\{ignore\}} is used to enclose a
+part of the copying permissions that applies to the
+\LaTeX info source file of a document, but not to the Info or printed
+version of the document.\refill
+\cindex{Ignored text}
+\cindex{Unprocessed text}
+\findex{ignore}
+
+\node Minimum, Six Parts, Comments, Beginning a File
+\section{What a LaTeXinfo File Must Have}
+\cindex{Minimal LaTeXinfo file}
+\cindex{Must have in LaTeXinfo file}
+\cindex{LaTeXinfo file minimum}
+
+In order to be made into a printed manual, a \LaTeX info file \strong{must}
+begin with lines that looks like
+
+\begin{verbatim}
+\documentstyle[12pt,latexinfo]{book}
+\pagestyle{headings}
+
+\begin{document}
+
+\setfilename{latexinfo.info}
+\end{verbatim}
+
+\noindent
+The \samp{\back documentstyle[12pt,latexinfo]\{book\}} line tells
+\LaTeX\ to use the\\
+\file{latexinfo.sty} style and \file{book.sty} documentstyle
+files. The \code{\back pagestyle\{headings\}} command is the \LaTeX\
+command to put the chapter and section headings and page numbers at the
+top of each page. The \code{\back begin\{document\}} command starts the
+document, and makes the characters \code{# $ % ^ & _ |} all begin to
+print as normal characters. (These characters retain their normal
+\LaTeX\ meanings in the preamble between the \code{\back documentstyle}
+and \code{\back begin\{document\}} commands.) This line must be followed
+(sooner or later) by the \samp{\back
+setfilename\{\var{info-file-name}\}}. It is needed to provide a name for
+the Info file to output to. The \code{\back setfilename} command
+\emph{must} occur at the beginning of a line. The
+\begin{example}
+\code{\back end\{document\}}
+\end{example}
+ line at the end of the file on a line
+of its own tells \LaTeX{} that the file is ended and to stop
+typesetting.\refill
+
+Usually, you won't use quite such a spare format, but will include
+mode setting and index declarations at the
+beginning of a \LaTeX info file, like this:\refill
+
+\begin{verbatim}
+\documentstyle[12pt,latexinfo]{book}
+\pagestyle{headings}
+
+\begin{document}
+
+\newindex{cp}
+\bibliographystyle{alpha}
+
+\finalout
+\alwaysrefill
+\setfilename{latexinfo.info}
+\end{verbatim}
+
+Furthermore, you will usually provide a \LaTeX info file with a title
+page, master menu, and the like. But the minimum, which can be useful
+for short documents, is just the three lines at the beginning and the
+one line at the end.\refill
+
+\node Six Parts, The LaTeXinfo File Header, Minimum, Beginning a File
+\section{Six Parts of a LaTeXinfo File}
+\cindex{LaTeXinfo file beginning}
+\cindex{File beginning}
+
+Various pieces of information have to be provided to \LaTeX info at the
+beginning of a \LaTeX info file, such as the name of the file, the title
+of the document and the like. If you want to get elaborate, the
+beginning of a \LaTeX info file has six parts:
+
+\begin{enumerate}
+\item
+The preamble, which includes the command to tell \LaTeX\ what style files to
+use when processing the file. This starts with the \code{\back documentstyle},
+and is terminated by the \code{\back begin\{document\}} command.
+
+\item
+The header, which is terminated by the \code{\back setfilename} command
+that contains the \LaTeX info options needed to tailor your output to
+your needs.
+
+\item
+The title page and the copyright page, which usually are set without
+any page numbers (\code{\back pagestyle\{empty}). This is terminated by the
+\code{\back maketitle} command.
+
+\item
+Then the table of contents, list of figures and tables, and possibly a
+preface, which are usually set with roman page numbers (\code{\back
+pagestyle\{headings\}} and \code{\back pagenumbering\{roman}).
+
+\item
+The \samp{Top} node that contains an extensive menu for the whole Info file.
+This is written with the \code{\back node} command, with a nodename of
+\code{Top}. The contents of this node should only appear in the Info file.
+
+\item
+The beginning of the text, which is set with
+\code{\back pagenumbering\{arabic}), and a chapter or section command.
+\end{enumerate}
+
+\cindex{Sample LaTeXinfo file}
+For a a short sample latexinfo file, see the file \file{lnfo-sample.tex}
+which is supplied with the \LaTeX info distribution.
+
+\node The LaTeXinfo File Header, The Documentstyle, Six Parts, Beginning a File
+\section{The LaTeXinfo File Header}
+\cindex{File Header}
+\cindex{Header for LaTeXinfo files}
+\cindex{LaTeXinfo file header}
+
+\LaTeX info files start with at least three lines that provide Info and
+\LaTeX\ with necessary information.
+
+\begin{verbatim}
+\documentstyle[12pt,latexinfo]{book}
+\begin{document}
+\setfilename{foo.info}
+\end{verbatim}
+
+
+\begin{menu}
+* The Documentstyle::
+* setfilename:: \protect\code{\protect\back setfilename}
+* New Indexes::
+* Custom Headings:: Customizing Your Layout
+\end{menu}
+
+\node The Documentstyle, setfilename, The LaTeXinfo File Header, The LaTeXinfo File Header
+\subsection{The Documentstyle}
+\cindex{First line of a LaTeXinfo file}
+\cindex{Beginning line of a LaTeXinfo file}
+
+Every \LaTeX info file that is to be the top-level input to \LaTeX\ must
+begin with a line that looks like this:
+
+\begin{verbatim}
+\documentstyle[12pt,latexinfo]{book}
+\end{verbatim}
+
+When the file is processed by \LaTeX, it loads the macros listed as
+options to the \code{documentstyle} command. The option
+\code{latexinfo} is needed for processing a \LaTeX info file, and
+\LaTeX\ will then input the file \file{latexinfo.sty};
+\pxref{Preparing for LaTeX}.
+
+Unlike \TeX info, you can also include other options that may also include
+style files. These \LaTeX info style files may have an Emacs counterpart, so
+that you can extend \LaTeX info by writing your own styles.
+\xref{Extending LaTeXinfo}, for more information on writing your own
+styles. Also look in the inputs directory of your \TeX\ distribution for
+other \LaTeX\ styles that are provided with \TeX.
+
+\beforenoterule
+\begin{sideremark}
+The region of the file between the \code{\back documentstyle} and the
+\code{\back begin\{document\}} commands is know in \LaTeX\ as the
+\dfn{preamble}. Only certain \LaTeX\ commands are allowed there,
+and you'll need to consult the \LaTeX\ manual for the list of
+allowed commands. It is best to put your commands that modify your
+\LaTeX\ commands in the region between the \code{\back begin\{document\}}
+and the \code{\back setfilename}; they will be ignored by Info, and
+\LaTeX\ will not object.
+\end{sideremark}
+\afternoterule
+
+\node setfilename, New Indexes, The Documentstyle, The LaTeXinfo File Header
+\subsection{\protect\code{\protect\back setfilename}}
+\cindex{Info file requires \code{\back setfilename}}
+\findex{setfilename}
+
+It is important to note that the \code{\back setfilename} command is
+required for Info. In order to be made into an Info file, a \LaTeX info
+file must contain a line that looks like this:\refill
+
+\begin{example}
+\back setfilename\{\var{info-file-name}\}
+\end{example}
+
+\noindent
+Write the \code{\back setfilename} command at the beginning of a line
+followed by the Info file name.\refill
+
+The \code{\back setfilename} line specifies the name of the Info file to
+be generated. Specify the name with an \samp{.info} extension, to
+produce an Info file name such as \file{latexinfo.info}.\refill
+
+Any text that appears before the \code{\back setfilename} command is not
+included in the Info file. So if you want to include the \code{title}
+and \code{author} material, place the \code{\back setfilename} command
+before them; if not, after them.
+
+This region, between the \code{\back begin\{document\}} command and the
+\code{\back setfilename} command is known as the header, and should
+contain any of the commands that alter the overall style of your document.
+
+\node New Indexes, Custom Headings, setfilename, The LaTeXinfo File Header
+\subsection{New Indexes}
+\findex{newindex}
+
+In order to generate any of the indices, you must declare them with the
+\code{\back newindex} command, before it is first used by one of the index
+commands. This is usually done after the \code{\back begin\{document\}}
+but before the \code{\back setfilename}.
+
+\code{newindex} takes one argument, which is the two letter index type.
+For example, to declare a concept and function index, you would
+use\refill
+
+\begin{verbatim}
+\documentstyle[12pt,latexinfo]{book}
+
+\begin{document}
+\newindex{cp}
+\newindex{fn}
+\setfilename{plisp.info}
+\end{verbatim}
+
+\xref{Declaring indices}, for the declaring indices and the definitions of the index types.
+
+\node Custom Headings, paragraphindent, New Indexes, The LaTeXinfo File Header
+\subsection{Customizing Your Layout}
+\findex{pagestyle}
+\findex{pagenumbering}
+\findex{footnotestyle}
+\findex{markboth}
+\findex{markright}
+\findex{oddfoot}
+\findex{evenfoot}
+
+You may, if you wish, create your own, customized headings and footings.
+The \code{\back markboth} and \code{\back markright} commands are both
+supported in \LaTeX info. These should occur on a line by themselves.
+See \cite[\S\tie 5.1]{Lamport1986}, for a detailed discussion of this
+process.\refill
+
+The \code{\back oddfoot} and \code{\back evenfoot} commands specifiy the
+odd and even page footings respectively. These should occur on a line
+by themselves.
+
+At the beginning of a manual or book, pages are not numbered---for
+example, the title and copyright pages of a book are not numbered.
+To accomplish this, use the command\refill
+\begin{verbatim}
+\pagestyle{empty}
+\end{verbatim}
+as shown in the sample file, \file{lnfo-sample.tex}.
+
+By convention, table of contents pages are numbered with roman
+numerals and not in sequence with the rest of the document.
+To accomplish this, use the commands\refill
+\begin{verbatim}
+\pagestyle{headings}
+\pagenumbering{roman}
+\end{verbatim}
+as shown in the sample file, \file{lnfo-sample.tex}.
+
+Since an Info file does not have pages, the \code{\back markboth},
+\code{\back markright}, \code{pagestyle} and
+\code{pagenumbering} commands have no effect on it. The lines
+containing these commands will be deleted from the Info file.\refill
+
+The \code{\back footnotestyle} command to specify an Info file's
+footnote style. \xref{Footnotes} for how to use this command.
+
+\begin{menu}
+* paragraphindent:: Paragraph Indenting
+\end{menu}
+
+\node paragraphindent, The Title and Copyright Pages, Custom Headings, Custom Headings
+\subsubsection{Paragraph Indenting}
+\cindex{Indenting paragraphs}
+\cindex{Paragraph indentation}
+\findex{paragraphindent}
+
+The Info formatting commands may insert spaces at the beginning of the
+first line of each paragraph, thereby indenting that paragraph. The
+\code{\back paragraphindent} command specifies the indentation. Write
+\code{\back paragraphindent} at the beginning of a line followed by either
+\samp{asis} or a number in braces. The template is:\refill
+
+\begin{example}
+\back paragraphindent\{\var{indent}\}
+\end{example}
+
+The Info formatting commands indent according to the value of
+\var{indent}:\refill
+
+\begin{itemize}
+\item
+If the value of \var{indent} is \samp{asis}, the Info formatting
+commands do not change the existing indentation.\refill
+
+\item
+If the value of \var{indent} is 0, the Info formatting commands delete
+existing indentation.\refill
+
+\item
+If the value of \var{indent} is greater than 0, the Info formatting
+commands indent the paragraph by that number of spaces.\refill
+\end{itemize}
+
+The default value of \var{indent} is \samp{asis}.\refill
+
+Write the \code{\back paragraphindent} command before the
+\code{setfilename} command at the beginning of a \LaTeX info file.\refill
+
+The \code{latexinfo-format-buffer} and \code{latexinfo-format-region}
+commands do \emph{not} automatically indent paragraphs. These commands
+only indent paragraphs that are ended by an \code{\back refill} command.
+(\xref{Always Refilling Paragraphs}, for how to avoid this.)
+\xref{Refilling Paragraphs}, for more information about \code{\back refill}.\refill
+
+
+\node The Title and Copyright Pages, Titlepage, paragraphindent, Beginning a File
+\section{The Title and Copyright Pages}
+\cindex{Copyright page}
+
+\begin{menu}
+* Titlepage::
+* The Copyright Page and Printed Permissions::
+\end{menu}
+
+\node Titlepage, The Copyright Page and Printed Permissions, The Title and Copyright Pages, The Title and Copyright Pages
+\subsection{Titlepage}
+\cindex{Titlepage}
+\findex{author}
+\findex{title}
+\findex{date}
+\findex{maketitle}
+
+The first printed material after the \code{\back begin\{document\}} will
+make up the titlepage. The \LaTeX\ commands \code{\back title},
+\code{\back author} and \code{\back date} are used the same way as in
+any \LaTeX\ report or book. The title page is terminated by
+\code{\back maketitle}. Following the material for the title page
+should be the copyright page.\refill
+
+\begin{verbatim}
+\title{The PLisp Manual}
+
+\author{Fred Foobar,\\
+ Clarke Institute}
+
+\date{\today}
+\maketitle
+\end{verbatim}
+
+The \code{\back title} command produces a line in which the title is set
+centered on the page in a larger than normal font. You can have many
+lines in the title by using \code{\back \back} to force a newline.\refill
+
+The \code{\back author} command sets the names of the author or authors in
+a middle-sized font, centered on the page.\refill
+
+The \code{\back date} command sets the date in a middle-sized font,
+centered on the page. You can put the date in yourself, or use the
+\code{\back today} command, which will put in the date that the document
+is processed on.\refill
+
+The \code{\back maketitle} command sets the author, title and date, and in
+the \code{book} documentstyle, emitts a new page. The should be no other
+printing text between the \code{documentstyle} command and the
+\code{maketitle} command.
+
+In a \code{book} style, text is printed on both sides of the paper,
+chapters start on right-hand pages, and right-hand pages have odd
+numbers. But in a \code{report} style, text is printed only on one side
+of the paper unless the \code{twoside} \LaTeX\ option is provided to the
+\code{documentstyle} command.\refill
+
+
+
+\node The Copyright Page and Printed Permissions, Generating a Table of Contents, Titlepage, The Title and Copyright Pages
+\subsection{The Copyright Page and Printed Permissions}
+\cindex{Copyright}
+\cindex{Printed permissions}
+\cindex{Permissions, printed}
+\findex{pagestyle}
+\findex{thispagestyle}
+
+This part of the beginning of a \LaTeX info file contains the text of
+the copying permissions that will appear in the manual. This is usually
+followed by the \code{\back tableofcontents} command. If you put title
+and copyright pages before the \code{\back setfilename} command, then
+this material will only appear only in the printed manual, not in the
+Info file.
+
+By international treaty, the copyright notice for a book should be
+either on the title page or on the back of the title page. The
+copyright notice should include the year followed by the name of the
+organization or person who owns the copyright.\refill
+
+The following commands start the copyright page for the printed manual.
+
+\begin{verbatim}
+\maketitle
+\clearpage
+\vspace*{0pt plus 1filll}
+Copyright \copyright{} year copyright-owner
+
+Permission is granted to copy and distribute modified versions of this
+document under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+\pagestyle{empty}
+\clearpage
+\end{verbatim}
+
+When the copyright notice is on the back of the title page, the page
+is not numbered. Therefore, this is usually done while a \code{\back
+pagestyle\{empty\}} is in effect. See the \LaTeX\ Manual for more
+details on the \code{pagestyle} command \cite{Lamport1986}.\refill
+
+\findex{filll}
+\findex{vspace}
+\findex{vspace*}
+\findex{clearpage}
+To cause a page break, the \code{\back clearpage} command is used. In
+the sample, the \code{\back clearpage} that ends the titlepage is
+followed by the somewhat mysterious line that reads:
+\samp{\back vspace*\{0pt plus 1filll\}}. This is a line that uses
+\LaTeX\ commands to push the copyright notice and the other text
+on the copyright page towards the bottom of the page. The \code{\back
+vspace*} command means to put in white space. The \samp{0pt plus 1filll}
+means to put in zero points of mandatory white space, and as much optional
+white space as needed. Note the use of three \samp{l}s in the word
+\samp{filll}; this is the correct use in \LaTeX.\refill
+
+\findex{copyright}
+The \code{\back copyright} command generates a \samp{c} inside a circle.
+The copyright notice itself has the following legally defined sequence:
+
+\begin{example}
+Copyright \copyright{} \var{year} \var{copyright-owner}
+\end{example}
+
+It is customary to put information on how to get a manual after the
+copyright notice (the address of the Free Software Foundation, for
+example) and the permissions.
+
+When you write a manual about a computer program, you should write the
+version of the program to which the manual applies on the title page.
+If the manual changes more frequently than the program or is independent
+of it, you should also include an edition number\footnote{We have found
+that it is helpful to refer to versions of manuals as `editions' and
+versions of programs as `versions'; otherwise, we find we are liable to
+confuse each other in conversation by referring to both the
+documentation and the software with the same words.} for the manual.
+This helps readers keep track of which manual is for which version of
+the program.\refill
+
+\xref{Sample Permissions}, for recommended permission text.\refill
+
+\node Generating a Table of Contents, The Top Node, The Copyright Page and Printed Permissions, Beginning a File
+\section{Generating a Table of Contents}
+\cindex{Generating a Table of Contents}
+\cindex{Table of contents}
+\cindex{Contents, Table of}
+
+The commands \code{\back chapter}, \code{\back section}, etc., supply the
+information to make up a table of contents, but they do not cause an actual
+table to be generated. To do this, you must use the
+\code{\back tableofcontents} command.
+
+The table of contents command outputs (into a printed manual) a complete
+table of contents, based on the \code{\back chapter}, \code{\back
+section} and other sectioning commands. This command should be used on
+a line by itself. This command automatically generates a Table of
+Contents heading at the top of the page. Tables of contents should be
+generated at the beginning of the manual, usually just after the
+\code{\back maketitle} command or copyright pages.\refill
+
+You can also use the \code{\back listoftables} command to make a listing
+of all of the tables in the document. \xref{Figures and Tables}, for how
+to define tables.
+
+\begin{verbatim}
+\pagestyle{empty}
+\clearpage
+\pagestyle{headings}
+\pagenumbering{roman}
+\tableofcontents
+\clearpage
+
+\c Make a list of tables if you have any
+\listoftables
+\clearpage
+\end{verbatim}
+
+Since an Info file uses menus instead of tables of contents, the Info
+formatting commands ignore the \code{\back tableofcontents} and
+\code{\back listoftables} commands.\refill
+
+
+\node The Top Node, Title of Top Node, Generating a Table of Contents, Beginning a File
+\section{The Top Node and Master Menu}
+\cindex{Top node}
+\cindex{Master menu}
+\cindex{Node, Top}
+
+The `Top' node is the node at which you enter the file when browing the
+Info file with one of the Info browsing programs.
+
+A `Top' node should contain a brief description of the file and an
+extensive, master menu for the whole Info file. The contents of
+anything other than the master menu should appear only in the Info file;
+none of it should appear in printed output, so enclose it between
+\code{\back begin\{ifinfo\}} and \code{\back end\{ifinfo\}} commands.
+\LaTeX{} does not print either an \code{\back node} line or a menu; they
+appear only in Info, so you do not have to enclose these parts between
+\code{\back begin\{ifinfo\}} and \code{\back end\{ifinfo\}}.
+\xref{Conditionals, , Conditionally Visible Text}.)\refill
+
+\begin{menu}
+* Title of Top Node:: A Top node needs a title.
+* Master Menu Parts:: A master menu has three or more parts.
+\end{menu}
+
+\node Title of Top Node, Master Menu Parts, The Top Node, The Top Node
+\begin{ifinfo}
+\subsection*{Top Node Title}
+\end{ifinfo}
+
+For example, the beginning of the Top node of a manual might like
+this:\refill
+
+\begin{example}
+\begin{same}
+\dots{}
+\back tableofcontents
+\back clearpage
+
+\back begin\{ifinfo\}
+\back node Top, Copying, (dir), (dir)
+
+\LaTeX info is a documentation system\dots{}
+
+This is edition\dots{}
+\back end\{ifinfo\}
+
+\back begin\{menu\}
+* Copying:: \LaTeX info is freely redistributable.
+* Overview:: What is LaTeXinfo?\dots{}
+\back end\{menu\}
+\end{same}
+\end{example}
+
+In a `Top' node, the `Previous', and `Up' nodes usually refer to the top
+level directory of the whole Info system, which is called \samp{(dir)}.
+\xref{Installing an Info File}, for more information about the
+\code{dir} Info file in the \file{info} directory.\refill
+
+
+\node Master Menu Parts, Software Copying Conditions, Title of Top Node, The Top Node
+\subsection{Parts of a Master Menu}
+\cindex{Master menu parts}
+\cindex{Parts of a master menu}
+
+A \dfn{master menu} is a detailed main menu listing all the nodes in a
+file. A master menu is enclosed in \code{\back begin\{menu\}} and
+\code{\back end\{menu\}} commands and does not appear in the printed
+document. Generally, a master menu is divided into parts.\refill
+
+\begin{itemize}
+\item
+The first part contains the major nodes in the \LaTeX info file: the nodes
+for the chapters, chapter-like sections, and the appendices.\refill
+
+\item
+The second part contains nodes for the indices.\refill
+
+\item
+The third and subsequent parts contain a listing of the other, lower
+level nodes, often ordered by chapter. This way, rather than go through
+an intermediary menu, an inquirer can go directly to a particular node
+when searching for specific information. These menu items are not
+required; add them if you think they are a convenience.\refill
+\end{itemize}
+
+Each section in the menu can be introduced by a descriptive line. So
+long as the line does not begin with an asterisk, it will not be treated
+as a menu item. (\xref{Menu Environment}, for more information.)\refill
+
+For example, the master menu for a manual might look like the following:
+\refill
+
+\begin{example}
+\begin{same}
+\back begin\{menu\}
+* Copying:: \LaTeX info is freely
+ redistributable.
+* Overview:: What is LaTeXinfo?
+* LaTeXinfo Mode:: Special features in GNU Emacs.
+\dots{}
+\dots{}
+* Command and Variable Index::
+ An item for each \back -command.
+* Concept Index:: An item for each concept.
+
+ --- The Detailed Node Listing ---
+
+Overview of LaTeXinfo
+
+* Info Files:: What is an Info file?
+* Printed Manuals:: Characteristics of
+ a printed manual.
+\dots{}
+\dots{}
+
+Using \LaTeX info Mode
+
+* Info on a Region:: Formatting part of a file
+ for Info.
+\dots{}
+\dots{}
+\back end\{menu\}
+\end{same}
+\end{example}
+
+\node Software Copying Conditions, Sample Permissions, Master Menu Parts, Beginning a File
+\section{Software Copying Conditions}
+\cindex{Software copying conditions}
+\cindex{Copying software}
+\cindex{Distribution}
+\cindex{License agreement}
+
+If the \LaTeX info file has a section containing the distribution
+information and a warranty disclaimer for the software that is being
+documented, this section usually follows the `Top' node. The General
+Public License is very important to Project GNU software. It ensures
+that you and others will continue to have a right to use and share the
+software.\refill
+
+The copying and distribution information and the disclaimer are usually
+followed by a preface, or else by the first chapter of the
+manual.\refill
+
+\cindex{Preface}
+Although a preface is not a required part of a \LaTeX info file, it is
+very helpful. Ideally, it should state clearly and concisely what the
+file is about and who would be interested in reading it. In general,
+the preface would follow the licensing and distribution information,
+although sometimes people put it earlier in the document. Usually, a
+preface is put in an \code{\back chapter*} type of section.
+(\xref{Chapter}.)\refill
+
+\begin{menu}
+* Sample Permissions::
+* Titlepage Permissions:: Titlepage Copying Permissions
+\end{menu}
+
+\node Sample Permissions, Titlepage Permissions, Software Copying Conditions, Software Copying Conditions
+\subsection{Sample Permissions}
+\cindex{Permissions}
+\cindex{Copying permissions}
+
+\LaTeX info files should contain sections that tell the readers that they
+have the right to copy and distribute the Info file, the printed
+manual, and any accompanying software. Here are samples containing
+the standard text of the Free Software Foundation copying permission
+notice for an Info file and printed manual.
+
+\inforef{Distrib, Distribution, emacs}, for an
+example of the text that could be used in the software Distribution,
+General Public License, and NO WARRANTY sections of a document.\refill
+
+\begin{menu}
+* Inserting Permissions:: How to put permissions in your document.
+* ifinfo Permissions:: Sample \samp{ifinfo} copying permissions.
+* Titlepage Permissions:: Sample Titlepage copying permissions.
+\end{menu}
+
+\node Titlepage Permissions, Ending a File, Sample Permissions, Software Copying Conditions
+\subsection{Titlepage Copying Permissions}
+\cindex{Titlepage permissions}
+
+In the copyright section of the \LaTeX info file, the standard Free
+Software Foundation copying permission notice follows the copyright
+notice and publishing information. The standard phrasing is:
+
+\begin{smallexample}
+Permission is granted to make and distribute verbatim
+copies of this manual provided the copyright notice and
+this permission notice are preserved on all copies.
+
+Permission is granted to copy and distribute modified
+versions of this manual under the conditions for
+verbatim copying, provided also that the sections
+entitled ``Distribution'' and ``General Public License''
+are included exactly as in the original, and provided
+that the entire resulting derived work is distributed
+under the terms of a permission notice identical to this
+one.
+
+Permission is granted to copy and distribute
+translations of this manual into another language, under
+the above conditions for modified versions, except that
+the sections entitled ``Distribution'' and ``General
+Public License'' may be included in a translation
+approved by the author instead of in the original
+English.
+\end{smallexample}
+
+\node Ending a File, Making a Bibliography, Titlepage Permissions, Beginning a File
+\section{Ending a LaTeXinfo File}
+\cindex{Ending a LaTeXinfo file}
+\cindex{LaTeXinfo file ending}
+\cindex{File ending}
+
+The end of a \LaTeX info file should include the commands that create
+the bibliography, and the indices. It must include the \code{\back
+end\{document\}} command that marks the last line that \LaTeX{}
+processes. For example, a \LaTeX info file might be ended as follows:\refill
+
+For example,\refill
+
+\begin{verbatim}
+ \bibliography{latexinfo}
+
+ \twocolumn
+ \node Concept Index, , Previous Node, Top
+ \unnumbered{Concept Index}
+ \cindex{Concept Index}
+
+ \printindex{cp}
+
+ \end{document}
+\end{verbatim}
+
+The \code{\back end\{document\}} command should be on a line by itself and
+every \LaTeX info file must end with such a line. This command terminates
+\LaTeX\ processing and forces out unfinished pages.\refill
+
+\begin{menu}
+* Making a Bibliography::
+* Printing an Index and Generating Menus:: Printing an index and generating index menus.
+* File End:: Ending a file with \code{\back end\{document\}}.
+\end{menu}
+
+\node Making a Bibliography, Printing an Index and Generating Menus, Ending a File, Ending a File
+\subsection{Making a Bibliography}
+\cindex{Making a Bibliography}
+\findex{bibliographystyle}
+
+You may also choose to include a bibliography of citations in the
+document, using the \code{\back cite} command . Citations are prepared
+using the program \BibTeX, which formats the citations for use with
+\LaTeX. See the \LaTeX\ Manual for more details in \BibTeX\
+\cite[Appendix B]{Lamport1986}.\refill
+
+Before you use the \code{\back cite} command, you must declare the
+bibliography style that you are going to use. This is usually done at
+the beginning of the document, for example
+
+\begin{verbatim}
+\begin{document}
+\bibliographystyle{alpha}
+\end{verbatim}
+
+At the end of the document comes the bibliography itself.
+The \code{\back bibliography} takes as an argument a comma separated list
+of filenames that contain the bibliography entries.
+
+\begin{verbatim}
+\bibliography{latexinfo}
+\end{verbatim}
+
+With these two sections in your document, you can use the \code{\back cite}
+command to refer to the bibliography. For example
+
+\begin{verbatim}
+a citation of the GNU Emacs Manual \cite{GNUEmacsManual}\dots
+\end{verbatim}
+
+\noindent
+would produce
+
+\begin{example}
+a citation of the GNU Emacs Manual \cite{GNUEmacsManual}\dots
+\end{example}
+
+\noindent
+and would cause an entry to be put in the Bibliography section something
+like
+
+\begin{description}
+\item[Sta86]
+Richard Stallman. \i{The GNU Emacs Manual},
+The Free Software Foundation, 675 Massachusetts Ave., Cambridge MA,
+02139, 1986.
+\end{description}
+
+\xref{Citations}, for how to use citations in the document.
+
+\node Printing an Index and Generating Menus, File End, Making a Bibliography, Ending a File
+\subsection{Index Menus and Printing an Index}
+\findex{printindex}
+\cindex{Printing an index}
+\cindex{Indices, printing and menus}
+\cindex{Generating menus with indices}
+\cindex{Menus generated with indices}
+
+Using \LaTeX info, you can generate printed indices and Info file menus without
+having to sort and collate entries manually. \LaTeX info will do this for you
+automatically. Each index covers a certain kind of entry (functions, or
+variables, or concepts, etc.)\: and lists all of those entries in
+alphabetical order, together with information on how to find the discussion
+of each entry. In a printed manual, this information consists of page
+numbers. In an Info file, it consists of a menu item leading to the first
+node where the entry is defined.
+
+To print an index means to include it as part of a manual or Info file.
+This does not happen automatically just because you use \code{\back
+cindex} or other index-entry generating commands in the
+\LaTeX info file; those just cause the raw data for the index to be
+accumulated. To generate an index, you must include the \code{\back
+printindex} command at the place in the document where you want the
+index to appear, and declare the index at the beginning of the document
+with the \code{\back newindex} command. Also, as part of the process of
+creating a printed manual, you must run a program called
+\code{latexindex} (\pxref{Printing Hardcopy}) to sort the raw data to
+produce a sorted index file. The sorted index file is what will
+actually be used to print the index.\refill
+
+Like typesetting, the construction of an index is a highly skilled,
+professional art, the subtleties of which are not appreciated until you
+have to do it yourself. \LaTeX info offers six different types of
+predefined index: the concept index, the function index, etc.
+(\xref{Creating Indices}.) Each index type has a two-letter name.
+You may merge indices, or put them into separate sections
+(\xref{Combining Indices}.).\refill
+
+\findex{twocolumn}
+\findex{onecolumn}
+The \code{\back printindex} command does not generate a chapter heading
+for the index. Consequently, you should precede the \code{\back
+printindex} command with a suitable section or chapter command (usually
+\code{\back unnumbered}) to supply the chapter heading and put the index
+into the table of contents. Precede the \code{\back unnumbered} command
+with an \code{\back node} line. Also, if you want the index to be set
+in two-column mode, then you should precede the index with the \LaTeX\
+\code{\back twocolumn} command. You can switch back to one-column mode
+with the \LaTeX\ \code{\back onecolumn} command. For example,\refill
+
+\begin{verbatim}
+ \twocolumn
+ \node Command Index, Concept Index, The Last Section, Top
+ \unnumbederd{Command Index}
+ \cindex{Command Index}
+
+ \printindex{fn}
+
+ \onecolumn
+ \node Concept Index,Top, Command Index, Top
+ \unnumbered{Concept Index}
+ \cindex{Concept Index}
+
+ \printindex{cp}
+
+ \end{document}
+\end{verbatim}
+
+\noindent
+(Readers often prefer that the concept index come last in a book,
+since that makes it easiest to find.)\refill
+
+\begin{ignore}
+In \LaTeX, the \code{\back printindex} command needs a sorted index file
+to work from. \LaTeX{} does not know how to do sorting; this is a
+deficiency. \LaTeX{} writes output files of raw index data; use the
+\code{latexindex} program to convert these files to sorted index files.
+(\xref{Printing Hardcopy}, for more information.)\refill
+\end{ignore}
+
+\node File End, Structuring, Printing an Index and Generating Menus, Ending a File
+\subsection{\protect\code{\protect\back end\protect\{document\protect\}} File Ending}
+\findex{bye}
+
+An \code{\back end\{document\}} command terminates \LaTeX{} or Info
+formatting. None of the formatting commands see any of the file
+following \code{\back end\{document\}}. The \code{\back
+end\{document\}} command should be on a line by itself.\refill
+
+Optionally, you may follow an \code{\back end\{document\}} line with a
+local variables list. \xref{Compile-Command, , Using Local Variables
+and the Compile Command}, for more information.\refill
+
+\node Structuring, Tree Structuring, File End, Top
+\chapter{Chapter Structuring}
+\cindex{Chapter structuring}
+\cindex{Structuring of chapters}
+
+The chapter structuring commands divide a document into a hierarchy of
+chapters, sections, subsections, and subsubsections. These commands
+generate large headings; they also provide information for the table
+of contents of a printed manual.\refill
+
+The chapter structuring commands do not create an Info node structure,
+so normally you should put an \code{\back node} command immediately before
+each chapter structuring command (\pxref{Nodes and Menus, , Nodes and
+Menus}). The only time you are likely to use the chapter structuring
+commands without using the node structuring commands is if you are
+writing a document that contains no cross references and will never be
+transformed into Info format.\refill
+
+\begin{menu}
+* Tree Structuring:: A manual is like an upside down tree \dots{}
+* Structuring Command Types:: How to divide a manual into parts.
+* Chapter::
+* Appendix::
+* Section::
+* Subsection::
+* Subsubsection:: Commands for the lowest level sections.
+\end{menu}
+
+\node Tree Structuring, Structuring Command Types, Structuring, Structuring
+\section{Tree Structure of Sections}
+\cindex{Tree structuring}
+
+A \LaTeX info file is usually structured like a book with chapters,
+sections, subsections, and the like. This structure can be visualized
+as a tree (or rather as an upside-down tree) with the root at the top
+and the levels corresponding to chapters, sections, subsection, and
+subsubsections. In Info format, `Next' and `Previous' pointers of a
+node usually lead to other nodes at the same level; an `Up' pointer
+usually leads to a node at the level above; and a `Menu' leads to
+nodes at a level below. Cross references can point to nodes at any
+level. \xref{Cross References}.\refill
+
+Here is a diagram that shows a \LaTeX info file with three chapters,
+each of which has two sections.\refill
+
+\begin{example}
+\begin{same}
+ top
+ |
+ -------------------------------------
+ | | |
+ Chapter 1 Chapter 2 Chapter 3
+ | | |
+ -------- -------- --------
+ | | | | | |
+ Section Section Section Section Section Section
+ 1.1 1.2 2.1 2.2 3.1 3.2
+\end{same}
+\end{example}
+
+In a \LaTeX info file that has this structure, the beginning of Chapter 2
+might look like this:\refill
+
+\begin{example}
+ \begin{same}
+ \back node Chapter 2, Chapter 3, Chapter 1, top
+ \back chapter\{Chapter 2\}
+\end{same}
+\end{example}
+
+To get to Sections 2.1 and 2.2, you need a menu inside of Chapter 2 that
+says:
+
+\begin{verbatim}
+ \begin{menu}
+ * Sect. 2.1:: Description of this section.
+ * Sect. 2.2::
+ \end{menu}
+\end{verbatim}
+
+\noindent
+This menu is located inside Chapter 2, after the beginning of the chapter,
+just before Section 2.1.
+
+Usually, a \code{\back node} command and a chapter structuring command are
+used in sequence, along with indexing commands. For example, the node for
+the chapter on Ending a LaTeXinfo File looks like this:
+
+\begin{verbatim}
+ \node Ending a LaTeXinfo File, Structuring, Beginning a LaTeXinfo File, Top
+ \chapter{Ending a LaTeXinfo File}
+ \cindex{Ending a LaTeXinfo File}
+ \cindex{LaTeXinfo file ending}
+ \cindex{File ending}
+\end{verbatim}
+
+The \code{\back node} command is the only one in \LaTeX info where the
+arguments are not delineated by braces. The arguments are separated by
+commas, and are terminated at the end of the line. This is because
+the Info format itself requires the \code{node} arguments to be like
+this. Note that it also means that you cannot use a comma within any
+of the four arguments to the node command.
+
+The chapter structuring commands are described in the sections that
+follow; the \code{\back node} and \code{\back begin\{menu\}} commands
+are described in a following chapter (\pxref{Nodes and Menus}).\refill
+
+\node Structuring Command Types, Chapter, Tree Structuring, Structuring
+\section{Types of Structuring Command}
+
+There are four chapter-structuring commands for chapters, sections,
+subsections and subsubsections. The optional heading argument of
+\LaTeX\ to these commands is not supported. You should avoid the use of
+any \LaTeX\ commands in the headings: any such commands should be
+preceded by a \code{\back protect}. See the \LaTeX\ Manual for more
+details \cite{Lamport1986}.\refill
+
+\begin{menu}
+* Chapter::
+* Appendix::
+* Section::
+* Subsection::
+* Subsubsection::
+* Node::
+* Menu Environment::
+\end{menu}
+
+\c !!! spaces after a title underlined by asterisk: bug to fix
+\node Chapter, Appendix, Structuring Command Types, Structuring
+\section{Chapter}
+\cindex{Chapter}
+\findex{chapter}
+\findex{unnumbered}
+\findex{chapter*}
+
+\code{\back chapter} identifies a chapter in the document. It is
+followed by a single argument:
+
+\begin{verbatim}
+ \chapter{Node and Chapter Structuring}
+\end{verbatim}
+
+In \LaTeX, it creates a chapter in the document, specifying the chapter
+title. The chapter will be numbered automatically in the printed manual.
+In the Info file, \code{\back chapter} causes its argument to appear on a
+line by itself, with a line of asterisks inserted underneath. For
+example:\refill
+
+\begin{example}
+This is a Chapter
+*****************
+\end{example}
+
+\c !!! spaces after a title underlined by asterisk: bug to fix
+
+\noindent
+To start a chapter without it being numbered, use the \code{\back
+unnumbered} command. To start a chapter without it being numbered
+or appearing in the table of contents, use the \code{\back chapter*} command.
+
+In the printed manual, the chapters will begin on a new page. If you want
+the chapters to appear on the odd--sided pages, use the \code{book}
+documentstyle.
+
+\node Appendix, Section, Chapter, Structuring
+\section{Appendix}
+\cindex{Appendix}
+\findex{appendix}
+
+\code{\back appendix} is the same as the \LaTeX\ command of the same name.
+In a printed manual, all chapters that follow this command are numbered
+differently in the table of contents: they are given a letter instead of a
+number, and the letters restart from \code{A}.
+
+\node Section, Subsection, Appendix, Structuring
+\section{Section}
+\cindex{Section}
+\findex{section}
+\findex{unnumberedsec}
+\findex{section*}
+
+\code{\back section} is like \code{\back chapter} except that in
+\LaTeX\ it makes a section rather than a chapter. (\xref{Chapter}.)
+Sections go within chapters. In the Info file, \code{\back chapter} and
+\code{\back section} differ only in that \code{\back section} underlines
+with \samp{=}. For example,\refill
+
+\begin{example}
+This is a section
+=================
+\end{example}
+
+To start a section without it being numbered, use the \code{\back
+unnumberedsec} command. To start a section without it being numbered or
+appearing in the table of contents, use the \code{\back section*}
+command.
+
+\node Subsection, Subsubsection, Section, Structuring
+\section{Subsection}
+\cindex{Subsection}
+\findex{subsection}
+\findex{unnumberedsubsec}
+\findex{subsection*}
+
+Subsections are to sections as sections are to chapters. (\xref{Section}.)
+They are underlined with \samp{-}. For example,\refill
+
+\begin{example}
+This is a subsection
+--------------------
+\end{example}
+
+To start a subsection without it being numbered, use the \code{\back
+unnumberedsubsec} command. To start a subsection without it being numbered
+or appearing in the table of contents, use the
+\code{\back subsection*} command.\refill
+
+\node Subsubsection, Marking Text, Subsection, Structuring
+\section{Subsubsection}
+\cindex{Subsubsection}
+\findex{subsubsection}
+\findex{unnumberedsubsubsec}
+\findex{subsubsection*}
+
+Subsubsections are to subsections as subsections are to sections.
+(\xref{Subsection}.) They are underlined with periods. For
+example,\refill
+
+\begin{example}
+This is a subsubsection
+.......................
+\end{example}
+
+To start a subsubsection without it being numbered, use the \code{\back
+unnumberedsubsubsec} command. To start a subsubsection without it being
+numbered or appearing in the table of contents, use the
+\code{\back subsubsection*} command.\refill
+
+\node Marking Text, Indicating, Subsubsection, Top
+\chapter{Marking Words and Phrases}
+\cindex{Paragraph, marking text within}
+\cindex{Marking words and phrases}
+\cindex{Words and phrases, marking them}
+\cindex{Marking text within a paragraph}
+
+In \LaTeX info, you can mark words and phrases in a variety of ways.
+These ways specify, for example, whether a word or phrase is a
+defining occurrence, a metasyntactic variable, or a symbol used in a
+program. Also, you can use fonts to emphasize text.\refill
+
+In addition, there are special commands for inserting single characters
+that have special meaning in \LaTeX info, such as braces, and for inserting
+symbols with special handling, such as dots and bullets. Finally, there
+are ways to emphasize words.
+
+
+\begin{menu}
+* Indicating:: Indicating Definitions, Commands, etc.
+* Emphasis:: Emphasizing Text
+* Insertions:: Special Insertions
+\end{menu}
+
+\node Indicating, code, Marking Text, Marking Text
+\section{Indicating Definitions, Commands, etc.}
+\cindex{Highlighting}
+\cindex{Indicating commands, definitions, etc.}
+
+\LaTeX info has commands for indicating just what kind of object a piece
+of text refers to. Metasyntactic variables, for example, are marked
+by \code{\back var} and code by \code{\back code}. \LaTeX info uses this
+information to determine how to highlight the text. Since the pieces
+of text are labelled by commands that tell what kind of object they
+are, it is easy to change the way \LaTeX info formats such text.\refill
+
+For example, code is usually illustrated in a typewriter font, but it
+would be easy to change the way \LaTeX info highlights code to use another
+font. This change would not effect how keystroke examples are
+highlighted. If straight typesetting commands were used in the body
+of the file and you wanted to make a change, you would have to check
+every single occurrence to make sure that you were changing code and
+not something else that should not be changed.\refill
+
+\begin{menu}
+* code:: How to indicate code.
+* kbd:: How to show keyboard input.
+* key:: How to specify keys.
+* Ctrl::
+* samp:: How to show a literal sequence of characters.
+* var:: How to indicate a metasyntactic variable.
+* file:: How to indicate the name of a file.
+* dfn:: How to specify a definition.
+\end{menu}
+
+The highlighting commands can be used to generate useful information
+from the file, such as lists of functions or file names. It is
+possible, for example, to write a \LaTeX info style to insert an index
+entry after every paragraph that contains words or phrases marked by a
+specified command. You could do this to construct an index of functions
+automatically; \pxref{The fvpindex Style} for an example.\refill
+
+\clearpage
+
+The font changing commands commands serve a variety of purposes:\refill
+
+\begin{description}
+\item[\back code\{\var{sample-code}\}]
+Indicate text that is a literal example of a piece of a program.\refill
+
+\item[\back kbd\{\var{keyboard-characters}\}]
+Indicate keyboard input.\refill
+
+\item[\back key\{\var{key-name}\}]
+Use for the conventional name for a key on a keyboard.\refill
+
+\item[\back samp\{\var{text}\}]
+Indicate text that is a literal example of a sequence of characters.\refill
+
+\item[\back var\{\var{metasyntactic-variable}\}]
+Indicate a metasyntactic variable.\refill
+
+\item[\back file\{\var{file-name}\}]
+Indicate the name of a file.\refill
+
+\item[\back dfn\{\var{term}\}]
+Use for the introductory or defining use of a term.\refill
+
+\item[\back ctrl\{\var{ctrl-char}\}]
+Use for an \scap{ascii} control character.\refill
+\end{description}
+
+\node code, kbd, Indicating, Indicating
+\subsection{\protect\code{\protect\back code}\protect\{\protect\var{sample-code}\protect\}}
+\findex{code}
+
+Use the \code{\back code} command to indicate text that is a piece of a
+program and which consists of entire syntactic tokens. Enclose the
+text in braces.\refill
+
+Thus, you should use \code{\back code} for an expression in a program, for
+the name of a variable or function used in a program, or for a
+keyword. Also, you should use \code{\back code} for the name of a
+program, such as \code{diff}, that is a name used in the machine. (You
+should write the name of a program in the ordinary text font if you
+regard it as a new English word, such as `Emacs' or `Bison'.)\refill
+
+Use \code{\back code} for the \code{TEXINPUTS} environment variable and
+other such variables.
+
+Do not use the \code{\back code} command for a string of characters
+shorter than a syntactic token. In particular, you should not use the
+\code{\back code} command when writing about the characters used in a
+token; do not, for example, use \code{\back code} when you are explaining
+what letters or printable symbols can be used in the names of
+functions. (Use \code{\back samp}.) Also, you should not use
+\code{\back code} to mark text that is considered input to programs unless
+the input is written in a language that is like a programming
+language. For example, you should not use \code{\back code} for the
+single character commands of GNU Emacs (use \code{\back kbd} instead)
+although you may use \code{\back code} for the names of the Emacs Lisp
+functions that the keyboard commands invoke.\refill
+
+In the printed manual, \code{\back code} causes \LaTeX{} to typeset the
+argument in a typewriter face. In the Info file, it causes the Info
+formatting commands to use `\dots{}' quotation. For example:\refill
+
+\begin{example}
+Use \back code\{diff\} to compare two files.
+\end{example}
+
+\noindent
+produces this in the printed manual:\refill
+
+\begin{quote}
+Use \code{diff} to compare two files.
+\end{quote}
+
+\begin{iftex}
+\noindent
+and this in Info file:\refill
+
+\begin{example}
+Use `diff' to compare two files.
+\end{example}
+\end{iftex}
+
+\node kbd, key, code, Indicating
+\subsection{\protect\code{\protect\back kbd}\protect\{\protect\var{keyboard-characters}\protect\}}
+\findex{kbd}
+
+Use the \code{\back kbd} command for characters of input to be typed by
+users. For example, to refer to the characters \kbd{M-a},
+write\refill
+
+\begin{example}
+\back kbd\{M-a\}
+\end{example}
+
+\noindent
+and to refer to the characters \kbd{M-x shell}, write\refill
+
+\begin{example}
+\back kbd\{M-x shell\}
+\end{example}
+
+The \code{\back kbd} command has the same effect as \code{\back code} in Info,
+but may produce a different font in a printed manual.\refill
+
+You can embed another \back -command inside the braces of an \code{\back kbd}
+command. Here, for example, is the way to describe a command that
+would be described more verbosely as ``press an \samp{r} and then
+press the \key{RET} key'':\refill
+
+\begin{example}
+\back kbd\{r \back key\{RET\}\}
+\end{example}
+
+\noindent
+This produces: \kbd{r \key{RET}}
+
+You also use the \code{\back kbd} command if you are spelling out the letters
+you type; for example:\refill
+
+\begin{example}
+To give the \back code\{logout\} command,
+type the characters \back kbd\{l o g o u t \back key\{RET\}\}.
+\end{example}
+
+\noindent
+This produces
+
+\begin{quote}
+To give the \code{logout} command,
+type the characters \kbd{l o g o u t \key{RET}}.
+\end{quote}
+
+(Also, this example shows that you can add spaces for clarity. If you
+really want to mention a space character as one of the characters of
+input, write \kbd{\back key\{SPC\}} for it.)\refill
+
+\node key, Ctrl, kbd, Indicating
+\subsection{\protect\code{\protect\back key}\protect\{\protect\var{key-name}\protect\}}
+\findex{key}
+
+Use the \code{\back key} command for the conventional name for a key on a
+keyboard, as in\refill
+
+\begin{example}
+\back key\{RET\}
+\end{example}
+
+You can use the \code{\back key} command within the argument of an
+\code{\back kbd} command when the sequence of characters to be typed
+includes one or more keys that are described by name.\refill
+
+For example, to produce \kbd{C-x \key{ESC}} you would type:\refill
+
+\begin{example}
+\back kbd\{C-x \back key\{ESC\}\}
+\end{example}
+
+The recommended names to use for keys are in upper case and are\refill
+\cindex{Recommended names for keys}
+\cindex{Keys, recommended names}
+\cindex{Names recommended for keys}
+\cindex{Abbreviations for keys}
+
+\begin{description}
+\item[SPC]
+Space
+\item[RET]
+Return
+\item[LFD]
+Linefeed
+\item[TAB]
+Tab
+\item[BS]
+Backspace
+\item[ESC]
+Escape
+\item[DEL]
+Delete
+\item[SFT]
+Shift
+\item[CTL]
+Control
+\item[META]
+Meta
+\end{description}
+
+There are subtleties to handling words like `meta' or `ctl' that are
+names of shift keys. When mentioning a character in which the shift
+key is used, such as \kbd{Meta-a}, use the \code{\back kbd} command alone
+without the \code{\back key} command, but when you are referring to the
+shift key in isolation, use the \code{\back key} command. For example,
+write \samp{\back kbd\{Meta-a\}} to produce \kbd{Meta-a} and
+\samp{\back key\{META\}} to produce \key{META}. This is because
+\kbd{Meta-a} refers to keys that you press on a keyboard, but
+\key{META} refers to a key without implying that you press it.\refill
+\cindex{META key}
+
+\node Ctrl, samp, key, Indicating
+\subsection{Ctrl}
+\cindex{Ctrl}
+\findex{ctrl}
+
+\code{\back ctrl} is used to describe an ASCII control character. The pattern
+of usage is \code{\back ctrl\{\var{ch}\}}, where \var{ch} is an ASCII
+character whose control-equivalent is wanted. Thus you put in an \samp{f}
+when you want to indicate a \samp{control-f}. For example, to specify
+\samp{control-f}, you would enter
+
+\begin{example}
+\back ctrl\{f\}
+\end{example}
+
+\noindent
+which produces
+
+\begin{quotation}
+\ctrl{f}
+\end{quotation}
+
+\noindent
+In the Info file, this generates the specified control character, output
+literally into the file. This is done so a user can copy the specified
+control character (along with whatever else he or she wants) into another
+Emacs buffer and use it. Since the `control-h',`control-i', and
+`control-j' characters are formatting characters, they should not be
+indicated this way.\refill
+
+In a printed manual, this generates text to describe or identify that
+control character: an uparrow followed by the character \var{ch}.
+
+\node samp, var, Ctrl, Indicating
+\subsection{\protect\code{\protect\back samp}\protect\{\protect\var{text}\protect\}}
+\findex{samp}
+
+Use the \code{\back samp} command to indicate text that is a literal
+example of a sequence of characters in a file, string, pattern, etc.
+Enclose the text in braces. The argument appears within `\dots{}'
+quotation in both the Info file and the printed manual; in addition,
+it is printed in a fixed-width font.\refill
+
+\begin{example}
+To match \back samp\{foo\} at the end of the line,
+use the regexp \back samp\{foo$\}.
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+To match \samp{foo} at the end of the line, use the regexp
+\samp{foo$}.\refill
+\end{quote}
+
+\code{\back samp} is used for entire statements in C, for entire shell
+commands, and for names of command-line options. Use it for buffer
+names in Emacs and for node names in Info or LaTeXinfo. Often
+\code{\back samp} is a catchall for whatever is not covered by
+\code{\back code}, \code{\back kbd}, or \code{\back key}.\refill
+
+Only include punctuation marks within braces if they are part of the
+string you are specifying. Write punctuation marks outside the braces
+if those punctuation marks are part of the English text that surrounds
+the string. In the following sentence, for example, the commas and
+period are outside of the braces:\refill
+
+\begin{example}
+\begin{same}
+In English, the vowels are \back samp\{a\}, \back samp\{e\},
+\back samp\{i\}, \back samp\{o\}, \back samp\{u\}, and sometimes
+\back samp\{y\}.
+\end{same}
+\end{example}
+
+\noindent
+This produces:
+
+\begin{quote}
+In English, the vowels are \samp{a}, \samp{e},
+\samp{i}, \samp{o}, \samp{u}, and sometimes
+\samp{y}.
+\end{quote}
+
+\node var, file, samp, Indicating
+\subsection{\protect\code{\protect\back var}\protect\{\protect\var{metasyntactic-variable}\protect\}}
+\findex{var}
+
+Use the \code{\back var} command to indicate metasyntactic variables. A
+metasyntactic variable is something that stands for another piece of
+text. For example, you should use a metasyntactic variable in the
+documentation of a function to describe the arguments that are passed
+to that function.\refill
+
+Do not use \code{\back var} for the names of particular variables in
+programming languages. These are specific names from a program, so
+\code{\back code} is correct for them. For example, the Lisp variable
+\code{latexinfo-latex-command} is not a metasyntactic variable; it is
+properly formatted using \code{\back code}.\refill
+
+The effect of \code{\back var} in the Info file is to upcase the argument;
+in the printed manual, to italicize it. For example:\refill
+
+\begin{example}
+To delete file \back var\{filename\},
+type \back code\{rm \back var\{filename\}\}.
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+To delete file \var{filename}, type \code{rm \var{filename}}.
+\end{quote}
+
+\noindent
+(Note that \code{\back var} may appear inside of \code{\back code},
+\code{\back samp}, \code{\back file}, etc.)\refill
+
+Write a metasyntactic variable all in lower case without spaces, and use
+hyphens to make it more readable. In some documentation styles,
+metasyntactic variables are shown with angle brackets, for
+example:\refill
+
+\begin{example}
+\dots{}, type rm <filename>
+\end{example}
+
+\noindent
+Although this is not the style we use in \LaTeX info, you can, of
+course, write your own \LaTeX info formatting commands to output the
+\code{<\dots{}>} format if you wish. \xref{Extending LaTeXinfo}.\refill
+
+\node file, dfn, var, Indicating
+\subsection{\protect\code{\protect\back file}\protect\{\protect\var{file-name}\protect\}}
+\findex{file}
+
+Use the \code{\back file} command to indicate text that is the name of a
+file, buffer, or directory, or is the name of a node in Info. You can
+also use the command for filename suffixes. Don't use \code{\back file}
+for symbols in a programming language; thus, a node name is a name in
+an Info file but not an identifier in a programming language.
+
+Currently, \code{\back file} is equivalent to \code{\back samp} in its effects
+on the output. For example,\refill
+
+\begin{example}
+The \back file\{.el\} files are in
+the \back file\{/usr/local/emacs/lisp\} directory.
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+The \file{.el} files are in
+the \file{/usr/local/emacs/lisp} directory.
+\end{quote}
+
+\node dfn, Emphasis, file, Indicating
+\subsection{\protect\code{\protect\back dfn}\protect\{\protect\var{term}\protect\}}
+\findex{dfn}
+
+Use the \code{\back dfn} command to identify the introductory or defining
+use of a technical term. Use the command only in passages whose
+purpose is to introduce a term which will be used again or which the
+reader ought to know. Mere passing mention of a term for the first
+time doesn't deserve \code{\back dfn}. The command generates italics in
+the printed manual, and double quotation marks in the Info file. For
+example:\refill
+
+\begin{example}
+Getting rid of a file is called \back dfn\{deleting\} it.
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+Getting rid of a file is called \dfn{deleting} it.
+\end{quote}
+
+As a general rule, a sentence containing the defining occurrence of a
+term should be a definition of the term. The sentence does not have
+to say explicitly that it is a definition, but it should contain the
+information of a definition---it should make the meaning clear.
+
+\node Emphasis, emph & strong, dfn, Marking Text
+\section{Emphasizing Text}
+\cindex{Emphasizing text}
+
+Usually, \LaTeX info changes the font to mark words in the text according
+to what category the words belong to. The \code{\back code} command, for
+example, does this. Most often, this is the best way to mark words.
+However, sometimes you will want to emphasize text without indicating
+a category. \LaTeX info has two ways to do this: commands that tell
+\LaTeX info to emphasize the text but leave the method to the program, and
+commands that specify the method to use. The first way is
+generally the best because it makes it possible to change the style of
+a document without needing to re-edit it line by line.\refill
+
+\begin{menu}
+* emph & strong:: How to emphasize text in LaTeXinfo.
+* Smallcaps:: How to use the small caps font.
+* Fonts:: Various font commands for printed output.
+\end{menu}
+
+\node emph & strong, Smallcaps, Emphasis, Emphasis
+\subsection{\protect\code{\protect\back emph}\protect\{\protect\var{text}\protect\} and \protect\code{\protect\back strong}\protect\{\protect\var{text}\protect\}}
+\cindex{Emphasizing text, font for}
+\findex{emph}
+\findex{strong}
+
+The \code{\back emph} and \code{\back strong} commands are for emphasis;
+\code{\back strong} is stronger. In printed output, \code{\back emph}
+produces \emph{italics} and \code{\back strong} produces
+\strong{bold}.\refill
+
+For example,
+
+\begin{example}
+\back begin\{quote\}
+\back strong\{Caution:\} \back code\{rm * .[^.]*\} removes \back emph\{all\}
+files in the directory.
+\back end\{quote\}
+\end{example}
+
+\begin{iftex}
+\noindent
+produces the following in printed output:
+
+\begin{quote}
+\strong{Caution}: \code{rm * .[^.]*} removes \emph{all}
+files in the directory.
+\end{quote}
+
+\noindent
+and the following in Info:
+\end{iftex}
+\begin{ifinfo}
+\noindent
+produces:
+\end{ifinfo}
+
+\begin{example}
+ *Caution*: `rm * .[^.]*' removes *all*
+ files in the directory.
+\end{example}
+
+The \code{\back strong} command is seldom used except to mark what is, in
+effect, a typographical element, such as the word `Caution' in the
+preceding example.\footnote{Don't try to use \code{\back emph} or
+\code{\back strong} with the word \samp{Note}; Info will mistake the
+combination for a cross reference. Use a phrase such as \emph{Please
+note} or \emph{Caution} instead.}\refill
+
+In the Info file, both \code{\back emph} and \code{\back strong} put asterisks
+around the text.\refill
+
+\node Smallcaps, Fonts, emph & strong, Emphasis
+\subsection{The Small Caps Font}
+\cindex{Small caps font}
+\findex{scap \r{(small caps font)}}
+
+\begin{iftex}
+Use the \samp{\back scap} command to set text in the printed output in \scap{a
+small caps font} and set text in the Info file in upper case letters.\refill
+\end{iftex}
+\begin{ifinfo}
+Use the \samp{\back scap} command to set text in the printed output in a
+small caps font and set text in the Info file in upper case letters.\refill
+\end{ifinfo}
+
+Write the text between braces in lower case, like this:\refill
+
+\begin{example}
+The \back sc\{acm\} and \back sc\{ieee\} are technical societies.
+\end{example}
+
+\noindent
+This produces:
+
+\begin{display}
+The \scap{acm} and \scap{ieee} are technical societies.
+\end{display}
+
+\LaTeX{} typesets the small caps font in a manner that prevents the
+letters from `jumping out at you on the page'. This makes small caps
+text easier to read than text in all upper case.\refill
+\begin{ifinfo}
+\LaTeX{} typesets any upper case letters in the small caps fonts in
+full-size capitals. Use them sparingly.\refill
+\end{ifinfo}
+\begin{iftex}
+\LaTeX{} typesets any upper case letters in the small caps fonts in
+\scap{FULL-SIZE CAPITALS}. Use them sparingly.\refill
+\end{iftex}
+The Info formatting commands set all small caps text in upper
+case.\refill
+
+You may also use the small caps font for acronyms such as
+\scap{ato} (a \scap{nasa} word meaning `abort to orbit').\refill
+
+There are subtleties to using the small caps font with a jargon word
+such as \scap{cdr}, a word used in Lisp programming. In this case, you
+should use the small caps font when the word refers to the second and
+subsequent elements of a list (the \scap{cdr} of the list), but you
+should use \samp{\back code} when the word refers to the Lisp function of
+the same spelling.\refill
+
+\node Fonts, Insertions, Smallcaps, Emphasis
+\subsection{Fonts for Printing, Not Info}
+\cindex{Fonts for printing, not Info}
+\findex{i \r{(italic font)}}
+\findex{b \r{(bold font)}}
+\findex{t \r{(typewriter font)}}
+\findex{r \r{(Roman font)}}
+\findex{n (normalsize font)}
+
+\LaTeX info provides four font commands that specify font changes in the
+printed manual but have no effect in the Info file. \code{\back i}
+requests \i{italic} font (in some versions of \LaTeX, a slanted font
+is used), \code{\back b} requests \b{bold} face, \code{\back t} requests
+the \t{fixed-width} font used by \code{\back code}, and \code{\back r}
+requests a \r{roman} font, which is the usual font in which text is
+printed. In addition \code{\back n} requests the fontsize be set in the
+normal size of the typeface, All the commands apply to an argument that
+follows, surrounded by braces. All four commands apply to an argument
+that follows, surrounded by braces.\refill
+
+Only the \code{\back r} command has much use: in example programs, you
+can use the \code{\back r} command to convert code comments from the
+fixed-width font to a roman font. This looks better in printed
+output.\refill
+
+For example,
+
+\begin{example}
+\begin{same}
+\back begin\{lisp\}
+(+ 2 2) ; \back r\{Add two plus two.\}
+\back end\{lisp\}
+\end{same}
+\end{example}
+
+\noindent
+produces
+
+\begin{lisp}
+(+ 2 2) ; \r{Add two plus two.}
+\end{lisp}
+
+If possible, you should avoid using the other three font commands. If
+you need to use one, it probably indicates a gap in the \LaTeX info
+language.\refill
+
+\node Insertions, Braces Atsigns Periods, Fonts, Marking Text
+\section{Special Insertions}
+\cindex{Inserting special characters and symbols}
+\cindex{Special insertions}
+
+\LaTeX info provides several commands for formatting dimensions, for
+inserting single characters that have special meaning in \LaTeX info, such
+as braces, and for inserting special graphic symbols that do not
+correspond to characters, such as dots and bullets.\refill
+
+\begin{iftex}
+These are:
+
+\begin{itemize}
+\item
+Braces, \samp{\back } and periods.
+
+\item
+Format a dimension, such as \samp{12\dmn{pt}}.
+
+\item
+Dots and bullets.
+
+\item
+The \LaTeX{} logo and the copyright symbol.
+
+\item
+A minus sign.
+
+\item
+The \code{\back verb} command, for inserting characters verbatim.
+\end{itemize}
+\end{iftex}
+
+\begin{menu}
+* Braces Atsigns Periods:: How to insert braces, \samp{\back } and periods.
+* dmn:: How to format a dimension.
+* Dots Bullets:: How to insert dots and bullets.
+* LaTeX and copyright:: How to insert the \LaTeX{} logo
+ and the copyright symbol.
+* minus:: How to insert a minus sign.
+* Inserting Characters Verbatim::
+\end{menu}
+
+\node Braces Atsigns Periods, Inserting An Atsign, Insertions, Insertions
+\subsection{Inserting \protect\code{\protect\back }, Braces, and Periods}
+\cindex{Inserting \back , braces, and periods}
+\cindex{Braces, inserting}
+\cindex{Periods, inserting}
+\cindex{Single characters, commands to insert}
+\cindex{Commands to insert single characters}
+
+\samp{\back } and curly braces are special characters in LaTeXinfo.
+Periods are also special. Depending on whether the period is inside
+of or at the end of a sentence, less or more space is inserted after a
+period in a typeset manual. Since it is not always possible for
+\LaTeX info to determine when a period ends a sentence and when it is used
+in an abbreviation, special commands are needed in some circumstances.
+(Usually, \LaTeX info can guess how to handle periods, so you don't have
+to use the special commands; you just enter a period as you would if you
+were using a typewriter, which means you put two spaces after the
+period, question mark, or exclamation mark that ends a sentence.) Do not
+put braces after any of these commands; they are not necessary.\refill
+
+\begin{menu}
+* Inserting An Atsign::
+* Inserting Braces:: Inserting \samp{\{} and \samp{\}}---\back \{ and \back \}
+* Controlling Spacing::
+\end{menu}
+
+\node Inserting An Atsign, Inserting Braces, Braces Atsigns Periods, Braces Atsigns Periods
+\subsubsection{Inserting \protect\code{\protect\back }---\protect\back back}
+\findex{\back \r{(single \samp{\back })}}
+
+\code{\back back} stands for a single \samp{\back } in either printed or Info
+output.\refill
+
+Do not put braces after an \code{\back back} command.\refill
+
+\node Inserting Braces, Controlling Spacing, Inserting An Atsign, Braces Atsigns Periods
+\subsubsection{Inserting \protect\samp{\protect\{} and \protect\samp{\protect\}}---\protect\back \protect\{ and \protect\back \protect\}}
+\findex{\{ \r{(single \samp{\{})}}
+\findex{\} \r{(single \samp{\}})}}
+
+\code{\back \{} stands for a single \samp{\{} in either printed or Info
+output.\refill
+
+\code{\back \}} stands for a single \samp{\}} in either printed or Info
+output.\refill
+
+Do not put braces after either an \code{\back \{} or an \code{\back \}}
+command.\refill
+
+\node Controlling Spacing, dmn, Inserting Braces, Braces Atsigns Periods
+\subsubsection{Spacing After Colons and Periods}
+\findex{: \r{(suppress widening)}}
+
+Use the \code{\back :}\: command after a period, question mark,
+exclamation mark, or colon that should not be followed by extra space.
+For example, use \code{\back :}\: after periods that end abbreviations
+which are not at the ends of sentences. \code{\back :}\: has no effect on
+the Info file output.\refill
+
+For example:\refill
+
+\begin{example}
+The U.S.A.\back : is a continental nation.
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+The U.S.A.\: is a continental nation.
+\end{quote}
+
+\findex{. \r{(true end of sentence)}}
+Use \code{\back .}\: instead of a period at the end of a sentence that
+ends with a single capital letter. Otherwise, \LaTeX{} will think the
+letter is an abbreviation and will not insert the correct
+end-of-sentence spacing. Here is an example:\refill
+
+\begin{example}
+Give it to X. and to Y\back . Give it to Z\back .
+Give it to X. and to Y. Give it to Z.
+\end{example}
+
+\noindent
+\begin{ifinfo}
+produces
+\end{ifinfo}
+\begin{iftex}
+If you look carefully at this printed output, you will see a little
+more whitespace after the Y in the first line than the Y in the second
+line.\refill
+\end{iftex}
+
+\begin{quote}
+Give it to X. and to Y\. Give it to Z\.\*
+Give it to X. and to Y. Give it to Z.
+\end{quote}
+
+In the Info file output, \code{\back .}\: is equivalent to a simple
+\samp{.}. Do not put braces after either an \code{\back :} or an
+\code{\back .} command.\refill
+
+\node dmn, Dots Bullets, Controlling Spacing, Insertions
+\subsection{\protect\code{\protect\back dmn}\protect\{\protect\var{dimension}\protect\}: Format a Dimension}
+\cindex{Thin space between number and dimension}
+\cindex{Dimension formatting}
+\cindex{Format a dimension}
+\findex{dmn}
+
+At times, you may want to write \samp{12\dmn{pt}} or \samp{8.5\dmn{in}}
+with little or no space between the number and the abbreviation for the
+dimension. You can use the \code{\back dmn} command to do this. On
+seeing the command, \LaTeX{} inserts just enough space for proper
+typesetting; the Info formatting commands insert no space at all, since
+the Info file does not require it. To use the \code{\back dmn} command,
+write the number and then follow it immediately, with no intervening
+space, by \code{\back dmn}, and then by the dimension within
+braces.\refill
+
+For example,\refill
+
+\begin{example}
+A4 paper is 8.27\back dmn\{in\} wide.
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+A4 paper is 8.27\dmn{in} wide.
+\end{example}
+
+Not everyone uses this style. Instead of \samp{8.27\dmn{in}}, you may
+write \samp{8.27 in.} or \samp{8.27 inches}.\refill
+
+\node Dots Bullets, LaTeX and copyright, dmn, Insertions
+\subsection{Inserting Ellipsis, Dots, and Bullets}
+\cindex{Dots, inserting}
+\cindex{Bullets, inserting}
+\cindex{Ellipsis, inserting}
+\cindex{Inserting ellipsis}
+\cindex{Inserting dots}
+\cindex{Special typesetting commands}
+\cindex{Typesetting commands for dots, etc.}
+
+An \dfn{ellipsis} (a line of dots) is typeset unlike a string of
+periods, so a special command is used for ellipsis in LaTeXinfo. The
+\code{\back bullet} command is special, too. Each of these commands is
+followed by a pair of braces, \samp{\{\}}, without any whitespace
+between the name of the command and the braces.\refill
+
+\begin{menu}
+* dots:: Inserting dots \dots{}
+* bullet:: Inserting a bullet.
+\end{menu}
+
+\node dots, LaTeX and copyright, Dots Bullets, Insertions
+\paragraph*{\protect\code{\protect\back dots}\protect\{\protect\}}
+\findex{dots}
+\cindex{Inserting dots}
+\cindex{Dots, inserting}
+
+Use the \code{\back dots\{\}} command to generate an ellipsis, which is
+three dots in a row, appropriately spaced, like this: `\dots{}'. Do
+not simply write three periods in the input file; that would work for
+the Info file output, but would produce the wrong amount of space
+between the periods in the printed manual.\refill
+
+\begin{iftex}
+Here is an ellipsis: \dots{}
+
+Here are three periods in a row: ...
+
+In printed output, the three periods in a row are closer together than
+the dots in the ellipsis.
+\end{iftex}
+
+\node bullet, LaTeX and copyright, Dots Bullets, Insertions
+\paragraph*{\protect\code{\protect\back bullet}\protect\{\protect\}}
+\findex{bullet}
+
+Use the \code{\back bullet\{\}} command to generate a large round dot, or
+the closest possible thing to one. In Info, an asterisk is used.\refill
+
+Here is a bullet: \bullet{}
+
+\node LaTeX and copyright, minus, Dots Bullets, Insertions
+\subsection{Inserting \protect\LaTeX{} and the Copyright Symbol}
+
+The logo \LaTeX{} is typeset in a special fashion and it needs an
+\back -command, as does the command for inserting the copyright symbol.
+Each of these commands is followed by a pair of braces, \samp{\{\}},
+without any whitespace between the name of the command and the
+braces.\refill
+
+\begin{menu}
+* LaTeX:: Insert the \LaTeX{} logo.
+* copyright symbol:: \code{\back copyright}\{\}
+\end{menu}
+
+\node LaTeX, minus, LaTeX and copyright, Insertions
+\paragraph*{\protect\code{\protect\back LaTeX}\protect\{\protect\}}
+\findex{LaTeX}
+
+Use the \code{\back LaTeX\{\}} command to generate `\LaTeX{}'. In a
+printed manual, this is a special logo that is different from three
+ordinary letters. In Info, it just looks like \samp{LaTeX}. The
+\code{\back LaTeX\{\}} command is amongst the few \LaTeX info commands
+in that the \key{L}, \key{T} and the \key{X} are in upper case.\refill
+
+\node copyright symbol, minus, LaTeX and copyright, Insertions
+\paragraph*{\protect\code{\protect\back copyright}\protect\{\protect\}}
+\findex{copyright}
+
+Use the \code{\back copyright\{\}} command to generate `\copyright\ '. In
+a printed manual, this is a \samp{c} inside a circle, and in Info,
+this is \samp{(C)}.\refill
+
+\node minus, Inserting Characters Verbatim, LaTeX and copyright, Insertions
+\subsection{Inserting a Minus Sign}
+\findex{minus}
+
+Use the \code{\back minus\{\}} command to generate a minus sign. In a
+fixed-width font, this is a single hyphen, but in a proportional font,
+the symbol is the customary length for a minus sign---a little longer
+than a hyphen.\refill
+
+You can compare the two forms:
+
+\begin{display}
+\samp{\minus{}} is a minus sign generated with \samp{\back minus\{\}},
+
+\samp{-} is a hyphen generated with the character \samp{-}.
+\end{display}
+
+\noindent
+In the fixed-width font used by Info, \code{\back minus\{\}} is the same
+as a hyphen.\refill
+
+You should not use \code{\back minus\{\}} inside of \code{\back code} or
+\code{\back begin\{example\}} because the width distinction is not made in the
+fixed-width font they use.\refill
+
+\node Inserting Characters Verbatim, Displaying Material, minus, Insertions
+\subsection{Inserting Characters Verbatim}
+\findex{verb}
+
+You can use the \LaTeX\ \code{\back verb} command to inserting
+characters verbatim. The next character after the command must be a
+non-alphabetic or numeric character, such as \samp{+}. Any characters
+between this marker character, and the next occurence of this marker
+character, will be protected from any operations in \LaTeX\ or Info.
+The contents will be displayed in a fixed-width font. Unlike \LaTeX,
+\LaTeX info has a restriction on the use of the \code{\back verb}
+command: it must occur at the beginning of a line ( or preceded only by
+whitespace). Hence you will usually use it something like:
+
+\begin{verbatim}
+characters to \scap{ascii} double-quotes:
+\verb+``+ and
+\verb+''+
+to \samp{"}.\refill
+\end{verbatim}
+
+\node Displaying Material, Quotations, Inserting Characters Verbatim, Top
+\chapter{Displaying Material}
+
+Displayed Material are blocks of text consisting of one or more whole
+paragraphs that are set off from the bulk of the text and treated
+differently. They are usually indented.\refill
+
+In \LaTeX info, you always begin a quotation or example by writing an
+\code{\back begin}-command at the beginning of a line by itself, and end
+it by writing an \code{\back end} command that is also at the beginning
+of a line by itself. For instance, you begin an example by writing
+\code{\back begin\{example\}} by itself at the beginning of a line and
+end the example by writing \code{\back end\{example\}} on a line by at
+itself, at the beginning of that line.\refill
+\findex{end}
+
+Since the lines containing \code{\back begin\{example\}} and \code{\back
+end\{example\}} will be turned into blank lines, you won't need to put a
+blank line before the \code{\back begin\{example\}}, and another blank
+line after the \code{\back end\{example\}}. (Remember that blank lines
+between the beginning \code{\back begin\{example\}} and the ending
+\code{\back end\{example\}} will also appear in the Info output.)\refill
+
+There are a variety of commands for Displaying Material:\refill
+
+\begin{description}
+\item[\back begin\{quote\}]
+Used to indicate text that is quoted. The text is filled, and
+printed in a roman font by default.\refill
+
+\item[\back begin\{quotation\}]
+Used to indicate text that is quoted. The text is filled, indented, and
+printed in a roman font by default.\refill
+
+\item[\back begin\{display\}]
+Used for illustrative text. The text is indented but not filled, and
+no font is specified (so, by default, the font is roman).\refill
+
+\item[\back begin\{format\}]
+Used for illustrative text. The text is not indented and not filled
+and no font is specified (so, by default, the font is roman).\refill
+
+\item[\back begin\{center\}]
+Used to center a body of text.
+
+\item[\back begin\{flushleft\}]
+Used to line up the left margin of unfilled text.
+
+\item[\code{\back begin\{flushright\}}]
+Used to line up the right margin of unfilled text.
+
+\item[\back begin\{lisp\}]
+Used to illustrate Lisp code. The text is printed in a fixed-width font without
+filling.\refill
+
+\item[\back begin\{smalllisp\}]
+Used to illustrate Lisp code. The text is printed in a smaller fixed-width
+font.\refill
+
+\item[\back begin\{example\}]
+Used to illustrate code, and commands. The text is printed
+in a fixed-width font without filling.\refill
+
+\item[\back begin\{smallexample\}]
+Used to illustrate code, commands, and the like, in a smaller font.\refill
+
+\item[\back begin\{verbatim\}]
+Used to illustrate code and commands, but the text is protected from
+processing by \LaTeX{} and Info, and is printed in a fixed-width font
+without filling.\refill
+
+\item[\back begin\{smallverbatim\}]
+Used to illustrate code, commands, and the like. The content is protected
+from processing by \LaTeX{} and Info, and is set in a smaller font.\refill
+\end{description}
+
+The \code{\back exdent} command is used within the above constructs
+(except of course for the \code{verbatim} ones) to undo the indentation
+of a line.\refill
+
+The \code{\back noindent} command may be used after one of the above
+constructs to prevent the following text from being indented as a new
+paragraph.\refill
+
+
+\begin{menu}
+* Quotations::
+* Justifying Text::
+* Display Environments::
+* Examples and Verbatim::
+* Controlling Indentation::
+* cartouche:: Drawing Cartouches Around Examples
+* Special Glyphs:: Special Glyphs for Examples
+* Conditionals:: Conditionally Visible Text
+\end{menu}
+
+\node Quotations, quotation, Displaying Material, Displaying Material
+\section{Quotations}
+
+\begin{menu}
+* quotation:: \protect\code{\protect\back begin\protect\{quote\protect\}}
+\end{menu}
+
+\node quotation, Justifying Text, Quotations, Quotations
+\subsection{Quotations}
+\cindex{Quotations}
+\findex{quote}
+\findex{quotation}
+
+The text of a quote is processed normally except that\refill
+
+\begin{itemize}
+\item
+The margins are closer to the center of the page, so the whole of the
+quotation is offset.\refill
+
+\item
+The first lines of paragraphs are indented no more than the other
+lines.\refill
+
+\item
+In the printed output, interline spacing and interparagraph spacing
+are reduced.\refill
+\end{itemize}
+
+\begin{quote}
+This is an example of text written between an \code{\back
+begin\{quote\}} command and an \code{\back end\{quote\}} command. A
+\code{\back begin\{quote\}} command is most often used to indicate text
+that is excerpted from another (real or hypothetical) printed work.
+\end{quote}
+
+Write an \code{\back begin\{quote\}} command as text of a line by
+itself. This line will disappear from the output. Mark the end of the
+quotation with a line beginning with and containing only \code{\back
+end\{quote\}}. The \code{\back end\{quote\}} line will likewise
+disappear from the output. Thus, the input\refill
+
+\begin{example}
+\back begin\{quote\}
+This is
+a foo.
+\back end\{quote\}
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+\begin{quote}
+This is a foo.
+\end{quote}
+\end{quote}
+
+\findex{quotation}
+The text of a \code{\back begin\{quotation\}} environment is processed
+the same way, except that the first line of the text is indented.\refill
+
+\node Justifying Text, flushleft & flushright, quotation, Displaying Material
+\section{Justifying Text}
+
+\begin{menu}
+* flushleft & flushright:: Left Justification and Right Justification
+\end{menu}
+
+\node flushleft & flushright, Center Environment, Justifying Text, Justifying Text
+\subsection{Left Justification and Right Justification}
+\findex{flushleft}
+\findex{flushright}
+
+The \code{\back begin\{flushleft\}} and \code{\back begin\{flushright\}}
+commands line up the left or right ends of lines on the left and right
+margins of a page, but do not fill the text. The commands are written
+on lines of their own, without braces. The \code{\back
+begin\{flushleft\}} and \code{\back begin\{flushright\}} commands are
+ended by \code{\back end\{flushleft\}} and \code{\back end flushright}
+commands on lines of their own.\refill
+
+For example,
+
+\begin{example}
+\begin{same}
+\back begin\{flushleft\}
+This text is
+written flushleft.
+\back end\{flushleft\}
+\end{same}
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+\begin{flushleft}
+This text is written flushleft. The \back code\{\back begin\{flushleft\}\}\\
+command left justifies every line but leaves the\\
+right end ragged.
+\end{flushleft}
+\end{quote}
+
+\noindent
+Flushright produces the type of indentation often used in the return
+address of letters.\refill
+
+\begin{example}
+\begin{same}
+\back begin\{flushright\}
+Here is an example of text written
+flushright. The \back code\{\back begin\{flushright\}\} command
+right justifies every line but leaves the
+left end ragged.
+\back end\{flushright\}
+\end{same}
+\end{example}
+
+\noindent
+produces
+
+\begin{flushright}
+Here is an example of text written
+flushright. The \code{\back begin\{flushright\}} command
+right justifies every line but leaves the
+left end ragged.
+\end{flushright}
+
+\begin{menu}
+* Center Environment::
+\end{menu}
+
+\node Center Environment, Display Environments, flushleft & flushright, flushleft & flushright
+\subsubsection{Center Environment}
+\cindex{Center Environment}
+\cindex{Centering a line}
+\findex{center}
+
+Text enclosed in a \code{center} environment produces lines of output
+containing text centered between the margins. This is the same
+as the \code{center} environment of \LaTeX, and different from the
+\TeX info command of the same name.
+
+\node Display Environments, display, Center Environment, Displaying Material
+\section{Display Environments}
+
+\begin{menu}
+* display:: \protect\code{\protect\back begin\protect\{display\protect\}}
+* format:: \protect\code{\protect\back begin\protect\{format\protect\}}
+\end{menu}
+
+\node display, format, Display Environments, Display Environments
+\subsection{\protect\code{\protect\back begin\protect\{display\protect\}}}
+\cindex{Display formatting}
+\findex{display}
+
+The \code{\back begin\{display\}} command begins a kind of example. It
+is like the \code{\back begin\{example\}} command except that, in a
+printed manual, \code{\back begin\{display\}} does not select the
+fixed-width font. In fact, it does not specify the font at all, so that
+the text appears in the same font it would have appeared in without the
+\code{\back begin\{display\}} command.\refill
+
+\begin{display}
+This is an example of text written between an
+\code{\back begin\{display\}} command and an \code{\back end\{display\}}
+command. The \code{\back begin\{display\}} command indents the text,
+but does not fill it.
+\end{display}
+
+\node format, Examples and Verbatim, display, Display Environments
+\subsection{\protect\code{\protect\back begin\protect\{format\protect\}}}
+\findex{format}
+
+The \code{\back begin\{format\}} command is similar to \code{\back begin\{example\}} except
+that, in the printed manual, \code{\back begin\{format\}} does not select the
+fixed-width font and does not narrow the margins.\refill
+
+\begin{format}
+This is an example of text written between an \code{\back
+begin\{format\}} command and an \code{\back end\{format\}} command. The
+\code{\back begin\{format\}} command does not fill the text.
+\end{format}
+
+\node Examples and Verbatim, example, format, Displaying Material
+\section{Examples and Verbatim}
+
+\begin{menu}
+* example:: \protect\code{\protect\back begin\protect\{example\protect\}}
+* noindent:: \protect\code{\protect\back noindent}
+* Lisp Example:: \protect\code{\protect\back begin\protect\{lisp\protect\}}
+* Verbatim Environment::
+\end{menu}
+
+\node example, noindent, Examples and Verbatim, Examples and Verbatim
+\subsection{\protect\code{\protect\back begin\protect\{example\protect\}}}
+\cindex{Examples}
+\cindex{Formatting examples}
+\findex{example}
+
+The \code{\back begin\{example\}} command is used to indicate an example that is
+not part of the running text, such as computer input or output.\refill
+
+\begin{example}
+This is an example of text written between an \code{\back begin\{example\}}
+command and an \code{\back end\{example\}} command. The text is
+indented but not filled.
+
+In the printed manual, the text is typeset in a fixed-width font, and
+extra spaces and blank lines are significant. In the Info file, an
+analogous result is obtained by indenting each line with five extra
+spaces.
+\end{example}
+
+Write an \code{\back begin\{example\}} command at the beginning of a
+line (or possibly preceded by whitespace) as the only text on a line by
+itself. This line will turn into a blank line in the Info output. Mark
+the end of the example with a line beginning containing only \code{\back
+end\{example\}} (or possibly preceded by whitespace). The \code{\back
+end\{example\}} will likewise turn into a blank line in the Info output.
+For example:\refill
+
+\begin{example}
+\back begin\{example\}
+mv foo bar
+\back end\{example\}
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+mv foo bar
+\end{example}
+
+\begin{quote}
+\strong{Caution:} Do not use tabs in lines of an example (or anywhere
+else in \LaTeX info, for that matter)! \LaTeX{} treats tabs like single
+spaces, and that is not what they look like. This is a problem with
+\LaTeX. (If necessary, in Emacs, you can use \kbd{M-x untabify} to
+convert tabs in a region to multiple spaces.)\refill
+\end{quote}
+
+Examples are often, logically speaking, ``in the middle'' of a
+paragraph, and the text continues after an example should not be
+indented. The \code{\back noindent} command prevents a piece of text from
+being indented as if it were a new paragraph.\refill
+
+(The \code{\back code} command is used for examples of code that is
+embedded within sentences, not set off from preceding and following
+text. \xref{code, , \code{\back code}}.)
+
+\node noindent, Lisp Example, example, Examples and Verbatim
+\subsection{\protect\code{\protect\back noindent}}
+\findex{noindent}
+
+If you have text following an \code{\back begin\{example\}} or other
+similar inclusion that reads as a continuation of the text before the
+\code{\back begin\{example\}}, it is good to prevent this text from
+being indented as a new paragraph. To accomplish this, write
+\code{\back noindent} at the beginning of a line by itself preceding the
+continuation text. For example,\refill
+
+\begin{example}
+\back begin\{example\}
+This is an example
+\back end\{example\}
+
+\back noindent
+This line will not be indented. As you can see, the
+beginning of the line is fully flush left with the line
+that follows after it. (This whole example is between
+\code{\back begin\{display\}} and \code{\back end\{display\}}.)
+\end{example}
+
+\noindent
+produces
+
+\begin{display}
+\begin{example}
+This is an example
+\end{example}
+
+\noindent
+This line will not be indented. As you can see, the beginning of the
+line is fully flush left with the line that follows after it. (This
+whole example is between \code{\back begin\{display\}} and
+\code{\back end\{display\}}.)
+\end{display}
+
+To adjust the number of blank lines properly in the Info file output,
+remember that the line containing \code{\back noindent} does not
+generate a blank line, and neither does the \code{\back end\{example\}}
+line.\refill
+
+In the \LaTeX info source file for this documentation, each of the lines that
+says `produces' is preceded by a line containing \code{\back noindent}.
+Do not put braces after an \code{\back noindent} command.\refill
+
+The \code{smallexample} environment sets its contents in a smaller font.
+
+\node Lisp Example, Verbatim Environment, noindent, Examples and Verbatim
+\subsection{\protect\code{\protect\back begin\protect\{lisp\protect\}}}
+\cindex{Lisp example}
+\findex{lisp}
+
+The \code{\back begin\{lisp\}} command is used for Lisp code. It is synonymous
+with the \code{\back begin\{example\}} command.
+
+\begin{lisp}
+This is an example of text written between an
+\code{\back begin\{lisp\}} command and an \code{\back end\{lisp\}} command.
+\end{lisp}
+
+Use \code{\back begin\{lisp\}} instead of \code{\back begin\{example\}}
+so as to preserve information regarding the nature of the example. This
+is useful, for example, if you write a function that evaluates only and
+all the Lisp code in a \LaTeX info file. Then you can use the \LaTeX
+info file as a Lisp library.\footnote{It would be straightforward to
+extend \LaTeX info to work in a similar fashion for C, Fortran, or other
+languages.}\refill
+
+Mark the end of \code{\back begin\{lisp\}} with \code{\back end\{lisp\}}
+on a line by itself.\refill
+
+The \code{smalllisp} environment sets its contents in a smaller font.
+
+\node Verbatim Environment, Controlling Indentation, Lisp Example, Examples and Verbatim
+\subsection{Verbatim Environment}
+\cindex{Verbatim Environment}
+\cindex{Including text verbatim}
+\findex{verbatim}
+\findex{verbatimfile}
+\findex{smallverbatim}
+
+The \code{verbatim} environment is very similar to the \code{example}
+environment except that no parsing of the contents is carried out, and the
+text is not indented. In the Info file things will appear exactly as they
+have been typed in. In the printed manual, this is the same as the
+\LaTeX\ command of the same name. Verbatim environments cannot be nested,
+nor can they appear inside another environment such as \code{example}. The
+\code{\back begin\{verbatim\}} and \code{\back end\{verbatim\}}
+\emph{must} occur at the beginning of a line.\refill
+
+The \code{smallverbatim} environment sets its contents in a smaller font.
+
+The \code{verbatimfile} command includes the contents of a file with a
+\code{verbatim} environment. The command is followed by an
+\code{\back end\{verbatim\}} command, such as\refill
+
+\begin{smallverbatim}
+\verbatimfile{foo.bar}
+\end{verbatim}
+\end{smallverbatim}
+
+The \code{smallverbatimfile} command sets its argument in a smaller font,
+and is terminated by an \code{\back end\{smallverbatim\}} command.
+
+\node Controlling Indentation, exdent, Verbatim Environment, Displaying Material
+\section{Controlling Indentation}
+
+\begin{menu}
+* exdent:: \protect\code{\protect\back exdent}: Undoing a Line's Indentation
+\end{menu}
+
+\node exdent, cartouche, Controlling Indentation, Controlling Indentation
+\subsection{exdent: Undoing a Line's Indentation}
+\cindex{Indentation undoing}
+\findex{exdent}
+
+The \code{\back exdent} command removes any indentation a line might have.
+The command is written at the beginning of a line and applies only to
+the text that follows the command that is on the same line. Don't use
+braces around the text. In the printed manual, the text on the
+\code{\back exdent} line is printed in the roman font.\refill
+
+\code{\back exdent} is usually used within examples. Thus,\refill
+
+\begin{example}
+\begin{same}
+\back begin\{example\}
+This line follows an \back begin\{example\} command.
+\back exdent\{This line is exdented.\}
+This line follows the exdented line.
+The \back end\{example\} comes on the next line.
+\back end\{example\}
+\end{same}
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+\begin{same}
+This line follows an \back begin\{example\} command.
+\exdent{This line is exdented.}
+This line follows the exdented line.
+The \back end\{example\} comes on the next line.
+\end{same}
+\end{example}
+
+In practice, the \code{\back exdent} command is rarely used.
+Usually, you un-indent text by ending the example and
+returning the page to its normal width.\refill
+
+\node cartouche, Special Glyphs, exdent, Displaying Material
+\section{Drawing Cartouches Around Examples}
+\findex{cartouche}
+\cindex{Box with rounded corners}
+
+In a printed manual, the \code{cartouche} environment draws a box with
+rounded corners around its contents. Pair with \code{\back
+end\{cartouche\}}. You can use this command to further highlight an
+example or quotation. For instance, you could write a manual in which
+one type of example is surrounded in a cartouche to emphasize
+them.\refill
+
+The \code{\back cartouche} command affects only the printed manual; it has
+no effect in the Info file.\refill
+
+For example,
+
+\begin{example}
+\begin{same}
+\back begin\{example\}
+\back cartouche
+% pwd
+/usr/local/lib/emacs/info
+\back end\{cartouche\}
+\back end\{example\}
+\end{same}
+\end{example}
+
+\begin{iftex}
+\noindent
+produces
+\begin{example}
+\begin{cartouche}
+% pwd
+/usr/local/lib/emacs/info
+\end{cartouche}
+\end{example}
+\end{iftex}
+
+\noindent
+surrounds the two-line example with a box with rounded corners, in the
+printed manual.
+
+\node Special Glyphs, result, cartouche, Displaying Material
+\section{Special Glyphs for Examples}
+\cindex{Special glyphs}
+\cindex{Glyphs for examples }
+
+In \LaTeX info, code is often illustrated in examples that are delimited
+by \code{\back begin\{example\}} and \code{\back end\{example\}}, or by
+\code{\back begin\{lisp\}} and \code{\back end\{lisp\}}. In such
+examples, you can indicate the results of evaluation or an expansion
+using \samp{\result{}} or \samp{\expansion{}}. Likewise, there are
+special symbols to indicate printed output, an error message,
+equivalence of expressions, and the location of point. The special glyph
+commands do not have to be used within an example. Every special glyph
+command is followed by a pair of left- and right-hand braces.\refill
+
+\begin{menu}
+* result:: How to show the result of expression.
+* expansion:: How to indicate an expansion.
+* Print Special Glyph:: How to indicate printed output.
+* Error Special Glyph:: How to indicate an error message.
+* Equivalence:: How to indicate equivalence.
+* Point Special Glyph:: How to indicate the location of point.
+\end{menu}
+
+Here are the different special glyph commands:\refill
+
+\begin{description}
+\item[\result{}]
+\code{\back result\{\}} points to the result of an expression.\refill
+
+\item[\expansion{}]
+\code{\back expansion\{\}} shows the results of a macro expansion.\refill
+
+\item[\print{}]
+\code{\back print\{\}} indicates printed output.\refill
+
+\item[\error{}]
+\code{\back error\{\}} indicates that the following text is an error
+message.\refill
+
+\item[\equiv{}]
+\code{\back equiv\{\}} indicates the exact equivalence of two forms.\refill
+
+\item[\point{}]
+\code{\back point\{\}} shows the location of point.\refill
+\end{description}
+
+\node result, expansion, Special Glyphs, Special Glyphs
+\subsection{\protect\result{}: Indicating Evaluation}
+\cindex{Result of an expression}
+\cindex{Indicating evaluation}
+\cindex{Evaluation special glyph}
+\cindex{Value of an expression, indicating}
+
+Use the \code{\back result\{\}} command to indicate the result of
+evaluating an expression.\refill
+\begin{iftex}
+The \code{\back result\{\}} command is displayed as \samp{=>} in Info and
+as \samp{\result{}} in the printed output.
+\end{iftex}
+\begin{ifinfo}
+The \code{\back result\{\}} command is displayed as \samp{\result{}} in Info
+and as a double stemmed arrow in the printed output.\refill
+\end{ifinfo}
+Thus, the following,
+
+\begin{lisp}
+(cdr '(1 2 3))
+ \result{} (2 3)
+\end{lisp}
+
+\noindent
+may be read as ``\code{(cdr '(1 2 3))} evaluates to (2 3)''.
+
+\node expansion, Print Special Glyph, result, Special Glyphs
+\subsection{\protect\expansion{}: Indicating an Expansion}
+\cindex{Expansion, indicating it}
+
+When an expression is a macro call, it expands into a new expression.
+You can indicate the result of the expansion with the
+\code{\back expansion\{\}} command.\refill
+\begin{iftex}
+The \code{\back expansion\{\}} command is displayed as \samp{==>} in Info and
+as \samp{\expansion{}} in the printed output.
+\end{iftex}
+\begin{ifinfo}
+The \code{\back expansion\{\}} command is displayed as \samp{\expansion{}}
+in Info and as a long arrow with a flat base in the printed output.\refill
+\end{ifinfo}
+For example, the following
+
+\begin{example}
+\begin{same}
+\back begin\{lisp\}
+(third '(a b c))
+ \back expansion\{\} (car (cdr (cdr '(a b c))))
+ \back result\{\} c
+\back end\{lisp\}
+\end{same}
+\end{example}
+
+\noindent
+produces
+
+\begin{lisp}
+\begin{same}
+(third '(a b c))
+ \expansion{} (car (cdr (cdr '(a b c))))
+ \result{} c
+\end{same}
+\end{lisp}
+
+\noindent
+which may be read as:
+\begin{quote}
+\code{(third '(a b c))} expands to \code{(car (cdr (cdr '(a b c))))};
+the result of evaluating the expression is \code{c}.
+\end{quote}
+
+(Often, as in this case, an example looks better if the \code{\back
+expansion\{\}} and \code{\back result\{\}} commands are indented five
+spaces.)\refill
+
+\node Print Special Glyph, Error Special Glyph, expansion, Special Glyphs
+\subsection{\protect\print{}: Indicating Printed Output}
+\cindex{Printed output, indicating it}
+
+Sometimes an expression will print output during its execution. You
+can indicate the printed output with the \code{\back print\{\}} command.\refill
+\begin{iftex}
+The \code{\back print\{\}} command is displayed as \samp{-|} in Info and
+as \samp{\print{}} in the printed output.
+\end{iftex}
+\begin{ifinfo}
+The \code{\back print\{\}} command is displayed as \samp{\print{}} in Info
+and similarly, as a horizontal dash butting against a vertical bar, in
+the printed output.\refill
+\end{ifinfo}
+
+In the following example, the printed text is indicated with
+\samp{\print{}}, and the value of the expression follows on the
+last line.\refill
+
+\begin{lisp}
+\begin{same}
+(progn (print 'foo) (print 'bar))
+ \print{} foo
+ \print{} bar
+ \result{} bar
+\end{same}
+\end{lisp}
+
+\noindent
+In a \LaTeX info source file, this example is written as follows:
+
+\begin{lisp}
+\begin{same}
+\back begin\{lisp\}
+(progn (print 'foo) (print 'bar))
+ \back print\{\} foo
+ \back print\{\} bar
+ \back result\{\} bar
+\back end\{lisp\}
+\end{same}
+\end{lisp}
+
+\node Error Special Glyph, Equivalence, Print Special Glyph, Special Glyphs
+\subsection{\protect\error{}: Indicating an Error Message}
+\cindex{Error message, indicating it}
+
+A section of code may cause an error when you evaluate it. You can
+designate the error message with the \code{\back error\{\}} command.\refill
+\begin{iftex}
+The \code{\back error\{\}} command is displayed as \samp{error-->} in Info
+and as \samp{\error{}} in the printed output.
+\end{iftex}
+\begin{ifinfo}
+The \code{\back error\{\}} command is displayed as \samp{\error{}} in Info
+and as the word `error' in a box in the printed output.\refill
+\end{ifinfo}
+Thus,
+
+\begin{example}
+\back begin\{lisp\}
+(+ 23 'x)
+\back error\{\} Wrong type argument: integer-or-marker-p, x
+\back end\{lisp\}
+\end{example}
+
+\noindent
+produces
+
+\begin{lisp}
+(+ 23 'x)
+\error{} Wrong type argument: integer-or-marker-p, x
+\end{lisp}
+
+\noindent
+This indicates that the following error message is printed
+when you evaluate the expression:
+
+\begin{lisp}
+Wrong type argument: integer-or-marker-p, x
+\end{lisp}
+
+Note that \samp{\error{}} itself is not part of the error
+message.
+
+\node Equivalence, Point Special Glyph, Error Special Glyph, Special Glyphs
+\subsection{\protect\equiv{}: Indicating Equivalence}
+\cindex{Equivalence, indicating it}
+
+Sometimes two expressions produce identical results. You can indicate the
+exact equivalence of two forms with the \code{\back equiv\{\}} command.\refill
+\begin{iftex}
+The \code{\back equiv\{\}} command is displayed as \samp{==} in Info and
+as \samp{\equiv{}} in the printed output.
+\end{iftex}
+\begin{ifinfo}
+The \code{\back equiv\{\}} command is displayed as \samp{\equiv{}} in Info
+and as a three parallel horizontal lines in the printed output.\refill
+\end{ifinfo}
+
+Thus,
+\begin{example}
+\back begin\{lisp\}
+(make-sparse-keymap) \back equiv\{\} (list 'keymap)
+\back end\{lisp\}
+\end{example}
+
+\noindent
+produces
+\begin{lisp}
+(make-sparse-keymap) \equiv{} (list 'keymap)
+\end{lisp}
+
+\noindent
+This indicates that evaluating \code{(make-sparse-keymap)} produces
+identical results to evaluating \code{(list 'keymap)}.
+
+\node Point Special Glyph, Conditionals, Equivalence, Special Glyphs
+\subsection{Indicating Point in a Buffer}
+\cindex{Point, indicating it in a buffer}
+
+Sometimes you need to show an example of text in an Emacs buffer. In
+such examples, the convention is to include the entire contents of the
+buffer in question between two lines of dashes containing the buffer
+name.\refill
+
+You can use the \samp{\back point\{\}} command to show the location of point
+in the text in the buffer. (The symbol for point, of course, is not
+part of the text in the buffer; it indicates the place \emph{between}
+two characters where point is located.)\refill
+\begin{iftex}
+The \code{\back point\{\}} command is displayed as \samp{-!-} in Info and
+as \samp{\point{}} in the printed output.
+\end{iftex}
+\begin{ifinfo}
+The \code{\back point\{\}} command is displayed as \samp{\point{}} in Info
+and as a small five pointed star in the printed output.\refill
+\end{ifinfo}
+
+The following example shows the contents of buffer \file{foo} before
+and after evaluating a Lisp command to insert the word \code{changed}.\refill
+
+\begin{example}
+\begin{same}
+---------- Buffer: foo ----------
+This is the \point{}contents of foo.
+---------- Buffer: foo ----------
+\end{same}
+\end{example}
+
+\begin{example}
+\begin{same}
+(insert "changed ")
+ \result{} nil
+---------- Buffer: foo ----------
+This is the changed \point{}contents of foo.
+---------- Buffer: foo ----------
+\end{same}
+\end{example}
+
+In a \LaTeX info source file, the example is written like this:
+\begin{example}
+\back begin\{example\}
+---------- Buffer: foo ----------
+This is the \back point\{\}contents of foo.
+---------- Buffer: foo ----------
+
+(insert "changed ")
+ \back result\{\} nil
+---------- Buffer: foo ----------
+This is the changed \back point\{\}contents of foo.
+---------- Buffer: foo ----------
+\back end\{example\}
+\end{example}
+
+\node Conditionals, Conditional Commands, Point Special Glyph, Displaying Material
+\section{Conditionally Visible Text}
+\cindex{Conditionally visible text}
+\cindex{Text conditionally visible}
+\cindex{Visibility of conditional text}
+\cindex{If text conditionally visible}
+\findex{ifinfo}
+\findex{iftex}
+
+Sometimes it is good to use different text for a printed manual and
+its corresponding Info file. In this case, you can use the
+conditional commands to specify which text is for the printed manual
+and which is for the Info file.\refill
+
+\begin{menu}
+* Conditional Commands:: Specifying text for Info or \LaTeX.
+* Using Ordinary LaTeX Commands::
+\end{menu}
+
+\node Conditional Commands, Using Ordinary LaTeX Commands, Conditionals, Conditionals
+\begin{ifinfo}
+\subsection*{Using \protect\code{\protect\back begin\protect\{ifinfo\protect\}} and \protect\code{\protect\back begin\protect\{iftex\protect\}}}
+\end{ifinfo}
+
+\code{\back begin\{ifinfo\}} begins text that should be ignored by
+\LaTeX{} when it typesets the printed manual. The text appears only in
+the Info file. The \code{\back begin\{ifinfo\}} command should appear
+on a line by itself. End the Info-only text with a line containing
+\code{\back end\{ifinfo\}} by itself. The \code{\back begin\{iftex\}}
+and \code{\back end\{iftex\}} commands are used similarly but to delimit
+text that will appear in the printed manual but not in the Info
+file.\refill
+
+For example,
+
+\begin{example}
+\back begin\{iftex\}
+This text will appear only in the printed manual.
+\back end\{iftex\}
+
+\back begin\{ifinfo\}
+However, this text will appear only in Info.
+\back end\{ifinfo\}
+\end{example}
+
+\noindent
+The preceding example produces the following. Note how you only see one of
+the two lines, depending on whether you are reading the Info version
+or the printed version of this manual.\refill
+
+\begin{iftex}
+This text will appear only in the printed manual.
+\end{iftex}
+
+\begin{ifinfo}
+However, this text will appear only in Info.
+\end{ifinfo}
+
+\node Using Ordinary LaTeX Commands, Lists and Tables, Conditional Commands, Conditionals
+\subsection{Using Ordinary \LaTeX{} Commands}
+\cindex{TeX commands, using ordinary}
+\cindex{Ordinary \LaTeX{} commands, using}
+\cindex{Commands using ordinary \LaTeX{}}
+\findex{tex}
+\findex{iftex}
+
+Inside a region delineated by \code{\back begin\{iftex\}} and
+\code{\back end\{iftex\}}, you can embed some \LaTeX{} commands.
+Info will ignore these commands since they are only in that part of the
+file that is seen by \LaTeX.
+
+You can enter \LaTeX{} completely by delineating a region with the
+\code{\back begin\{tex\}} and \code{\back end\{tex\}} commands. The
+characters \code{# $ % ^ & _ |} all revert to their normal \LaTeX\
+meanings. The \code{\back begin\{tex\}} command also causes Info to
+ignore the region, like the \code{\back begin\{iftex\}} command.\refill
+
+For example, here is some mathematics:\refill
+
+\begin{example}
+\back begin\{tex\}
+$\back bigl(x\back in A(n)\back bigm|x\back in B(n)\back bigr)$
+\back end\{tex\}
+\end{example}
+
+\begin{ifinfo}
+The output of this example will appear only in the printed manual. If
+you are reading this in Info, you will not see anything after this
+paragraph.\refill
+\end{ifinfo}
+
+\begin{iftex}
+The output of this example will appear only in the printed manual. If
+you are reading this in Info, you will not see anything after this
+paragraph. In the printed manual, the above mathematics looks like
+this:\refill
+
+\begin{tex}
+$\bigl(x\in A(n)\bigm|x\in B(n)\bigr)$
+\end{tex}
+\end{iftex}
+
+\node Lists and Tables, Introducing Lists, Using Ordinary LaTeX Commands, Top
+\chapter{Making Lists Tables and Descriptions}
+\cindex{Making Lists Tables and Descriptions}
+\cindex{Lists and tables, making them}
+\cindex{Tables and lists, making them}
+
+\LaTeX info has several ways of making lists and tables. Lists can
+be bulleted or numbered, while descriptions can highlight the items in
+the first column.\refill
+
+\begin{menu}
+* Introducing Lists:: Formatting is done for you.
+* Itemize Environment::
+* enumerate:: How to construct a numbered list.
+* Description Environment::
+* Tabular Environment::
+* Figures and Tables::
+\end{menu}
+
+\begin{ifinfo}
+\node Introducing Lists, Itemize Environment, Lists and Tables, Lists and Tables
+\section*{Introducing Lists}
+\end{ifinfo}
+
+\LaTeX info automatically indents the text in lists or descriptions, and
+numbers an enumerated list. This last feature is useful if you modify
+the list, since you do not have to renumber it yourself.\refill
+
+\findex{end}
+Numbered lists and tables begin with the appropriate \code{\back begin}
+command at the beginning of a line, and end with the corresponding
+\code{\back end} command on a line by itself. Begin an enumerated
+list, for example, with an \code{\back begin\{enumerate\}} command and
+end the list with an \code{\back end\{enumerate\}} command. Begin an
+itemized list with an \code{\back begin\{itemize\}} command, and end
+the list with an \code{\back end\{itemize\}} command. You precede each
+element of a list with an \code{\back item} command.\refill
+
+Here is an itemized list of the different kinds of table and lists:\refill
+
+\begin{itemize}
+\item
+Itemized lists with and without bullets.
+
+\item
+Numbered lists.
+
+\item
+Descriptions with highlighting.
+\end{itemize}
+
+Here is an enumerated list with the same items:\refill
+
+\begin{enumerate}
+\item
+Itemized lists with and without bullets.
+
+\item
+Numbered lists.
+
+\item
+Descriptions with highlighting.
+\end{enumerate}
+
+And here is a description with the same items and their
+\back -commands:\refill
+
+\begin{description}
+\item[\back begin\{itemize\}]
+Itemized lists with and without bullets.
+
+\item[\back begin\{enumerate\}]
+Numbered lists.
+
+\item[\back begin\{description\}]
+two-column descriptions with highlighting.
+
+\item[\back begin\{tabular\}]
+Multio--column tables.
+\end{description}
+
+\node Itemize Environment, enumerate, Introducing Lists, Lists and Tables
+\section{Itemize Environment}
+\cindex{Itemization}
+\findex{itemize}
+
+The \code{\back begin\{itemize\}} is used to produce sequences of indented
+paragraphs, with a mark inside the left margin at the beginning of each
+paragraph. The text of the indented paragraphs themselves come after
+the \code{\back begin\{itemize\}}, up to another line that says
+\code{\back end\{itemize\}}. Before each paragraph for which a mark in
+the margin is desired, place a line that says just \code{\back item}.
+It's best not to put any other text on this line.
+
+Before each paragraph for which a mark in the margin is desired, place a
+line that says just \code{\back item}. Don't put any other text on this
+line.\refill
+\findex{item}
+
+Usually, you should put a blank line before an \code{\back item}. This
+puts a blank line in the Info file. (\LaTeX{} inserts the proper
+interline whitespace in either case.) Except when the entries are
+very brief, these blank lines make the list look better.\refill
+
+Here is an example of the use of \code{\back begin\{itemize\}}, followed by the
+output it produces.\refill
+
+\begin{example}
+\begin{same}
+\back begin\{itemize\}
+\back item
+Some text for foo.
+
+\back item
+Some text
+for bar.
+\back end\{itemize\}
+\end{same}
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+\begin{itemize}
+\item
+Some text for foo.
+
+\item
+Some text
+for bar.
+\end{itemize}
+\end{quote}
+
+\noindent
+Itemized lists may be embedded within other itemized lists.
+
+\node enumerate, Description Environment, Itemize Environment, Lists and Tables
+\section{Enumerate Environment}
+\cindex{Enumeration}
+\findex{enumerate}
+
+\code{\back begin\{enumerate\}} is like \code{\back begin\{itemize\}}
+except that the marks in the left margin contain successive integers
+starting with 1. (See the preceeding section.) Do not put any argument
+on the same line as \code{\back begin\{enumerate\}}.\refill
+
+Normally, you should put a blank line between the entries in the list.
+This generally makes it easier to read the Info file.\refill
+
+\begin{example}
+\begin{same}
+\back begin\{enumerate\}
+\back item
+Some text for foo.
+
+\back item
+Some text for bar.
+\back end\{enumerate\}
+\end{same}
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+\begin{enumerate}
+\item
+Some text for foo.
+
+\item
+Some text
+for bar.
+\end{enumerate}
+\end{quote}
+
+\node Description Environment, Tabular Environment, enumerate, Lists and Tables
+\section{Description Environment}
+\cindex{Descriptions, making two-column}
+\findex{description}
+\findex{item}
+
+The \code{description} environment is similar to \code{\back
+begin\{itemize\}}, but allows you to specify a name or heading line for
+each item. (\xref{Itemize Environment}.) The command is used to
+produce two-column descriptions, and is especially useful for glossaries
+and explanatory exhibits. You must follow each use of \code{\back item}
+inside of the description environment with text to serve as the heading
+line for that item. This text is put inside square brackets on the same
+line as the \code{\back item} command. Each heading line is put into
+the first column of the table and the supporting text, which you put on
+the line following the line beginning with \code{\back item}, goes into
+the second column.\refill
+
+Usually, you should put a blank line before a \code{\back item}. This
+puts a blank like in the Info file. Except when the entries are very
+brief, a blank line looks better. The following description highlights
+the text in the first column:
+
+\begin{verbatim}
+\begin{description}
+\item[foo]
+This is the text for \samp{foo}.
+\item[bar]
+This is the text for \samp{bar}.
+\end{description}
+\end{verbatim}
+
+\noindent
+produces
+
+\begin{quotation}
+\noindent
+\begin{description}
+\item[foo]
+This is the text for \samp{foo}.
+\item[bar]
+This is the text for \samp{bar}.
+\end{description}
+\end{quotation}
+
+Info indents the lines of text in the second column, but does not
+automatically fill them. As a result, the lines in the Info file may
+be too wide. To prevent this, cause Info to refill the paragraphs
+after processing by adding the command \code{\back refill} to the end
+of the paragraph. (\xref{Refilling Paragraphs}, for more information
+about the use of the \code{\back refill} command.)
+
+\node Tabular Environment, Figures and Tables, Description Environment, Lists and Tables
+\section{Tabular Environment}
+\findex{tabular}
+\cindex{Tabular environment}
+\findex{tabular}
+\findex{hline}
+
+The \LaTeX\ \code{tabular} environment is weakly supported by \LaTeX
+info. This environment makes it easy to set small multi--column tables.
+The ampersand character has its special \LaTeX\ meaning of a separator
+in tables. To insert a \code{&}, type \code{\back \&}.
+
+In the \code{tabular} environment, you must line the columns up the way you
+want them to appear in the Info file, and you must use \key{\&} as a
+separator. In the Info file, the separator will become a \key{SPC}
+character thus preserving the alignment. The trailing \code{\back \back }
+will be stripped; these \emph{must} occur at the end of the line.
+
+\findex{hline}
+The \code{hline} command is supported by the Info program. It will insert
+a line of hyphens all the way to the current \code{fill-column}. Neither
+the \code{cline} or \code{multicolumn} commands are supported. For example:
+
+\begin{smallverbatim}
+\begin{table}[hbtp]
+\caption{The First Table's Caption}
+\begin{tabular}{||l|l|l|l||}
+\hline
+Column A & Column B & Column C & Column D \\
+\hline
+A 1 & B 1 & C 1 & D 1 \\
+A 2 & B 2 & C 2 & D 2 \\
+A 3 & B 3 & C 3 & D 3 \\
+\hline
+\end{tabular}
+\end{table}
+\end{smallverbatim}
+
+\begin{same}
+\noindent
+produces in the Info file
+\begin{smallverbatim}
+ Table 1 : The First Table's Caption
+------------------------------------------------------------------------
+Column A Column B Column C Column D
+------------------------------------------------------------------------
+A 1 B 1 C 1 D 1
+A 2 B 2 C 2 D 2
+A 3 B 3 C 3 D 3
+------------------------------------------------------------------------
+\end{smallverbatim}
+\end{same}
+
+\begin{iftex}
+\clearpage
+\noindent
+and in the \LaTeX\ file this produces:
+
+\begin{table}[hbtp]
+\caption{The First Table's Caption}
+\begin{tabular}{||l|l|l|l||}
+\hline
+Column A & Column B & Column C & Column D \\
+\hline
+A 1 & B 1 & C 1 & D 1 \\
+A 2 & B 2 & C 2 & D 2 \\
+A 3 & B 3 & C 3 & D 3 \\
+\hline
+\end{tabular}
+\end{table}
+\end{iftex}
+
+The \LaTeX\ math environments \code{displaymath}, \code{equation},
+\code{eqnarray} and \code{array} are completely ignored in the Info
+file, but will have their \LaTeX\ definitions in the printed manual.
+
+\node Figures and Tables, Formatting Paragraphs, Tabular Environment, Lists and Tables
+\section{Figures and Tables}
+\findex{table}
+\findex{caption}
+\findex{figure}
+
+Tables and Figures are only weakly supported by \LaTeX info. Anything
+within a \code{figure} environment is completely ignored in the Info file:
+\code{\back begin\{figure\}} is equivalent to \code{\back begin\{tex\}}
+
+\code{\back begin\{table\}} is supported by \LaTeX info, as is the
+\code{caption} command. The lines containing the \code{\back
+begin\{table\}} and \code{\back end\{table\}} are deleted from the Info
+file. The \code{caption} command causes its argument to be centered on a
+line, preceded by the word Table and the table number. \code{caption}s are
+assumed to be within tables because figures are not supported.
+
+\node Formatting Paragraphs, Breaks, Figures and Tables, Top
+\chapter{Formatting Paragraphs}
+
+\begin{menu}
+* Breaks:: Making and Preventing Breaks
+* Break Commands:: The Line Breaking Commands
+* Page Breaking Commands:: The Page Breaking Commands
+* Refilling Paragraphs::
+* Always Refilling Paragraphs::
+\end{menu}
+
+\node Breaks, Break Commands, Formatting Paragraphs, Formatting Paragraphs
+\section{Making and Preventing Breaks}
+\cindex{Making breaks}
+\cindex{Preventing breaks}
+
+Usually, a \LaTeX info file is processed both by \LaTeX{} and by one of the
+Info formatting commands. Sometimes line, paragraph, or page breaks
+occur in the `wrong' place in one or other form of output. You must
+ensure that text looks right both in the printed manual and in the
+Info file.\refill
+
+For example, in a printed manual, page breaks may occur awkwardly in
+the middle of an example; to prevent this, you can hold text together
+using a grouping command that keeps the text from being split across
+two pages. Conversely, you may want to force a page break where none
+would occur normally. Fortunately, problems like these do not often
+arise. When they do, use the following commands.\refill
+
+\begin{menu}
+* Break Commands:: Introducing the break commands.
+* Line Breaks:: How to force lines breaks.
+* w:: How to prevent unwanted line breaks.
+* sp:: How to insert blank lines.
+* clearpage:: How to force the start of a new page.
+* same:: How to prevent unwanted page breaks.
+* need:: Another way to prevent unwanted page breaks.
+\end{menu}
+
+\node Break Commands, Line Breaks, Breaks, Formatting Paragraphs
+\section{The Line Breaking Commands}
+
+The line break commands create line breaks:\refill
+
+\begin{description}
+\item[\back *]
+Force a line break in the printed manual and in the Info file.
+
+\item[\back \back]
+Force a line break in the Info file.
+
+\item[\back sp\{\var{n}\}]
+Skip \var{n} blank lines.\refill
+\end{description}
+
+The line-break-prevention command holds text together all on one
+line.\refill
+
+\begin{description}
+\item[\back w\{\var{text}\}]
+Prevent \var{text} from being split across two lines.\refill
+\end{description}
+
+\begin{menu}
+* Line Breaks:: \protect\code{\protect\back *}: Generate Line Breaks
+* w:: \protect\code{\protect\back w}\protect\{\protect\var{text}\protect\}: Prevent Line Breaks
+* sp:: \protect\code{\protect\back sp} \protect\var{n}: Insert Blank Lines
+\end{menu}
+
+\node Line Breaks, w, Break Commands, Break Commands
+\subsection{\protect\code{\protect\back *}: Generate Line Breaks}
+\findex{* \r{(force line break)}}
+\cindex{Line breaks}
+\cindex{Breaks in a line}
+
+The \code{\back *} command forces a line break in both the printed
+manual and in Info. The \code{\back \back} command forces a line break
+in the printed manual. The optional argument to the \LaTeX\ \code{\back
+\back} command is not supported in \LaTeX info.\refill
+
+For example,
+
+\begin{example}
+This line \back * is broken \back *in two places.
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+\begin{same}
+This line \* is broken \* in two places.
+\end{same}
+\end{example}
+
+\noindent
+(Note that the space after the first \code{\back *} command is faithfully
+carried down to the next line.)\refill
+
+\begin{example}
+\begin{same}
+This is version 2.0 of the \LaTeX info documentation,\back *
+and is for \dots{}
+\end{same}
+\end{example}
+
+\noindent
+In this case, the \code{\back *} command keeps \LaTeX{} from stretching the
+line across the whole page in an ugly manner.\refill
+
+Do not write braces after an \code{\back *} command; they are not
+needed. Do not write an \code{\back refill} command at the end of a
+paragraph containing an \code{\back *} command; it will cause the
+paragraph to be refilled after the line break occurs, negating the
+effect of the line break.\refill
+
+\node w, sp, Line Breaks, Break Commands
+\subsection{Preventing Line Breaks}
+\findex{w \r{(prevent line break)}}
+\cindex{Line breaks, preventing}
+
+\code{\back w\{\var{text}\}} outputs \var{text} and prohibits line breaks
+within \var{text}.\refill
+
+You can use the \code{\back w} command to prevent \LaTeX{} from automatically
+hyphenating a long name or phrase that accidentally falls near the end
+of a line.\refill
+
+\begin{example}
+You can copy GNU software from \back w\{\back file\{prep.ai.mit.edu\}\}.
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+You can copy GNU software from \w{\file{prep.ai.mit.edu}}.
+\end{quote}
+
+In the \LaTeX info file, you must write the \code{\back w} command and its
+argument (all the affected text) all on one line.\refill
+
+Do not write an \code{\back refill} command at the end of a paragraph
+containing an \code{\back w} command; it will cause the paragraph to be
+refilled and may thereby negate the effect of the \code{\back w}
+command.\refill
+
+\node sp, Page Breaking Commands, w, Break Commands
+\subsection{Inserting Blank Lines}
+\findex{sp \r{(line spacing)}}
+\cindex{Spaces from line to line}
+\cindex{Line spacing}
+
+A line beginning with and containing only \code{\back sp \var{n}}
+generates \var{n} blank lines of space in both the printed manual and
+the Info file. \code{\back sp} also forces a paragraph break. For
+example,\refill
+
+\begin{example}
+\back sp\{2\}
+\end{example}
+
+\noindent
+generates two blank lines.
+
+
+\begin{ignore}
+\c node br, page, sp, Breaks
+\c section \code{\back br}: Generate Paragraph Breaks
+\findex{br \r{(paragraph breaks)}}
+\cindex{Paragraph breaks}
+\cindex{Breaks in a paragraph}
+
+The \code{\back br} command forces a paragraph break. It inserts a blank
+line. You can use the command within or at the end of a line. If
+used within a line, the \code{\back br\{\}} command must be followed by
+left and right braces (as shown here) to mark the end of the
+command.\refill
+
+For example,
+
+\c !!! if line overfull try `A line containing... and ended by..'
+\begin{example}
+\begin{same}
+This line \back br\{\}contains and is ended by paragraph breaks\back br
+and is followed by another line.
+\end{same}
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+\begin{same}
+This line
+
+contains and is ended by paragraph breaks
+
+and is followed by another line.
+\end{same}
+\end{example}
+
+The \code{\back br} command is seldom used.
+\end{ignore}
+
+\node Page Breaking Commands, page, sp, Formatting Paragraphs
+\section{The Page Breaking Commands}
+
+The pagination commands apply only to printed output, since Info
+files do not have pages.\refill
+
+\begin{description}
+\item[\back clearpage]
+Start a new page in the printed manual.\refill
+
+\item[\back begin\{same\}]
+Hold text together that must appear on one printed page.\refill
+End the text to be held together with \code{\back begin\{same\}}
+
+\item[\back need\{\var{mils}\}]
+Start a new printed page if not enough space on this one.\refill
+\end{description}
+
+\begin{menu}
+* page:: Start a New Page
+* group:: Putting things on the Same Page
+* need:: Prevent Page Breaks
+\end{menu}
+
+\node page, group, Page Breaking Commands, Page Breaking Commands
+\subsection{Start a New Page}
+\cindex{Page breaks}
+\findex{page}
+
+A line containing only \code{\back clearpage} starts a new page in a printed
+manual. The command has no effect on Info files since they are not
+paginated. An \code{\back clearpage} command is often used in the title
+section of a \LaTeX info file to start the copyright page.\refill
+
+\node group, need, page, Page Breaking Commands
+\subsection{Putting things on the Same Page}
+\cindex{Same}
+\cindex{Holding text together vertically}
+\cindex{Vertically holding text together}
+\findex{same}
+
+The \code{\back begin\{same\}} command (on a line by itself) is used
+inside of an \code{\back begin\{example\}} or similar construct to begin
+an unsplittable vertical group, which will appear entirely on one page
+in the printed output. The group is terminated by a line containing
+only \code{\back end\{same\}}. These two lines produce no output of
+their own, and in the Info file output they have no effect at
+all.\refill
+
+Although \code{\back begin\{same\}} would make sense conceptually in a
+wide variety of contexts, its current implementation works reliably only
+within \code{\back begin\{example\}} and variants, and within
+\code{\back begin\{quote\}}, \code{\back begin\{display\}}, \code{\back
+begin\{format\}}, \code{\back begin\{flushleft\}} and \code{\back
+begin\{flushright\}}. (What all these commands have in common is that
+they turn off vertical spacing between ``paragraphs''.) In other
+contexts, \code{\back begin\{same\}} can cause anomalous vertical
+spacing. \xref{Displaying Material}.\refill
+
+\begin{ignore}
+This formatting requirement means that you should write:
+
+\begin{example}
+\begin{same}
+\back begin\{example\}
+\back begin\{same\}
+
+\dots{}
+
+\back end\{same\}
+\back end\{example\}
+\end{same}
+\end{example}
+\end{ignore}
+
+\noindent
+with the \code{\back begin\{same\}} and \code{\back end\{same\}} command
+insides of the \code{\back begin\{example\}} and \code{\back
+end\{example\}} commands.
+
+The \code{\back begin\{same\}} command is most often used to hold an
+example together on one page. In this \LaTeX info manual, about 100
+examples contain text that is enclosed between \code{\back
+begin\{same\}} and \code{\back end group}.
+
+\node need, Refilling Paragraphs, group, Page Breaking Commands
+\subsection{Prevent Page Breaks}
+\cindex{Need space at page bottom}
+\findex{need}
+
+A line containing only \code{\back need \var{n}} starts
+a new page in a printed manual if fewer than \var{n} mils (thousandths
+of an inch) remain on the current page. The \code{\back need} command has no
+effect on Info files since they are not paginated.\refill
+
+\need{300}
+This paragraph is preceded by an \code{\back need} command that tells
+\LaTeX{} to start a new page if fewer than 300 mils (nearly one-third
+inch) remain on the page. It looks like this:\refill
+
+\begin{example}
+\begin{same}
+\back need\{300\}
+This paragraph is preceded by \dots{}
+\end{same}
+\end{example}
+
+The \code{\back need} command is useful for preventing orphans (single
+lines at the bottoms of printed pages).\refill
+
+\node Refilling Paragraphs, Always Refilling Paragraphs, need, Formatting Paragraphs
+\section{Refilling Paragraphs}
+\cindex{Refilling paragraphs}
+\cindex{Filling paragraphs}
+\findex{refill}
+
+The \code{\back refill} command refills and, optionally, indents the first
+line of a paragraph.\footnote{Perhaps the command should have been
+called the \code{\back refillandindent} command, but \code{\back refill} is
+shorter and the name was chosen before indenting was
+available.}\refill
+
+If a paragraph contains long \back -constructs, the paragraph may look
+badly filled after being formatted by \code{latexinfo-format-region} or
+\code{latexinfo-format-buffer}. This is because both of thes commands
+remove \back -commands from formatted text but do not refill paragraphs
+automatically although \LaTeX{} does. Consequently, some lines become
+shorter than they were. To cause these commands to refill a paragraph,
+write \code{\back refill} at the end of the paragraph. This command
+refills a paragraph in the Info file after all the other processing has
+been done. \code{\back refill} has no effect on \LaTeX, which always
+fills every paragraph that ought to be filled.\refill
+
+For example, without any indenting, the following\refill
+
+\begin{example}
+To use \back code\{foo\}, pass \back samp\{xx%$\} and
+\back var\{flag\} and type \back kbd\{x\} after running
+\back code\{make-foo\}.\back refill
+\end{example}
+
+\noindent
+produces (in the Info file)
+
+\begin{example}
+To use `foo', pass `xx%$' and FLAG and type `x' after
+running `make-foo'.
+\end{example}
+
+\noindent
+whereas without the \code{\back refill} it would produce
+
+\begin{example}
+To use `foo', pass `xx%$' and
+FLAG and type `x' after running
+`make-foo'.
+\end{example}
+
+\noindent
+with the line broken at the same place as in the \LaTeX info input file.\refill
+
+Write the \code{\back refill} command at the end of the paragraph. Do
+not put a space before \code{\back refill}; otherwise the command might
+be put at the beginning of the line when you refill the paragraph in the
+\LaTeX info file with Emacs command \kbd{M-q} (\code{fill-paragraph}).
+If this were to happen, the \code{\back refill} command might fail to
+work. Do not put braces after \code{\back refill}. Because an
+\code{\back refill} command is placed at the end of a paragraph and
+never at the beginning of a line, the braces are not necessary.\refill
+
+You can write an \code{\back refill} command at the end of a footnote
+before the footnote's closing brace, even if the footnote text is
+embedded in a the middle of a paragraph in the \LaTeX info file. This
+is because the footnote text is extracted from the surrounding text and
+formatted on its own.\refill
+
+Also, do not end a paragraph that uses either \code{\back *} or \code{\back w}
+with an \code{\back refill} command; otherwise,
+\code{latexinfo-format-buffer} or \code{latexinfo-format-buffer} will
+refill the paragraph in spite of those commands.\refill
+
+In addition to refilling, the \code{\back refill} command may insert
+spaces at the beginning of the first line of the paragraph, thereby
+indenting that line. The argument to the \code{\back paragraphindent}
+command specifies the amount of indentation: if the value of the
+argument is 0, an \code{\back refill} command deletes existing
+indentation. If the value of the argument is greater than 0, an
+\code{\back refill} command indents the paragraph by that number of
+spaces. And if the value of the argument is \samp{asis}, an
+\code{\back refill} command does not change existing indentation. For
+more information about the \code{\back paragraphindent} command,
+\nxref{paragraphindent, , Paragraph Indenting}.\refill
+
+The \code{\back refill} command does not indent entries in a list, table,
+or definition, nor does \code{\back refill} indent paragraphs preceded by
+\code{\back noindent}.\refill
+
+
+\node Always Refilling Paragraphs, Citations and Footnotes, Refilling Paragraphs, Formatting Paragraphs
+\section{Always Refilling Paragraphs}
+\cindex{Always Refilling Paragraphs}
+\cindex{Filling paragraphs}
+\findex{alwaysrefill}
+
+In practice, one finds that many paragraphs in a \LaTeX info document need
+refilling, and one's document is littered with \code{\back refill} commands.
+One solution is to write a 6000 line \samp{C} program to do the
+refilling automatically. This would have the advantage of great speed,
+but would mean maintaining a two versions of the Info formating program,
+one in \samp{C} and one in Emacs lisp.\refill
+
+Another solution is to implement a heuristic\footnote{The \samp{H} in
+Heuristic is pronounced, as in Hack.} that searches for likely
+candidates for refilling, and inserts a \code{\back refill} command
+there. At the moment, the replacement takes place at any period
+followed by two newlines, or a period followed by a newline, followed by
+\code{\back end\{}. Of course, no replacements are made within
+\code{verbatim} or
+\code{smallverbatim} environments.
+
+\begin{implementation}
+This is implemented as a search and replace of all occurences matching
+the string \code{".\back n\back n"} or \code{".\back n\back end\{"}.
+This feature is likely to slow things down on a large document.
+This matching string should probably be changed to the regular expression
+\verb+\\s.\n\n+ or \verb+\\s.\n\end{+
+\end{implementation}
+
+\node Citations and Footnotes, Footnotes, Always Refilling Paragraphs, Top
+\chapter{Citations and Footnotes}
+
+\begin{menu}
+* Footnotes::
+* Citations::
+\end{menu}
+
+\node Footnotes, Citations, Citations and Footnotes, Citations and Footnotes
+\section{Footnotes}
+\cindex{Footnotes}
+\findex{footnote}
+
+A \dfn{footnote} is for a reference that documents or elucidates the
+primary text.\footnote{A footnote should complement or expand upon the
+primary text, but a reader should not need to read a footnote to
+understand the primary text. For a thorough discussion of footnotes,
+see \i{The Chicago Manual of Style}, which is published by the
+University of Chicago Press.} In \LaTeX info, footnotes are created with
+the \code{\back footnote} command. This command is followed immediately
+by a left brace, then by the text of the footnote, and then by a
+terminating right brace. The template is: \code{\back
+footnote}\{\var{text}\}.\refill
+
+For example, this clause is followed by a sample
+footnote;\footnote{Here is the sample footnote.} in the \LaTeX info
+source, it looks like this:\refill
+
+\begin{example}
+\dots{}a sample footnote \back footnote;\{Here is the sample
+footnote.\} in the \LaTeX info source\dots{}
+\end{example}
+
+In a printed manual or book, the reference mark for a footnote is a
+small, superscripted number; the text of the footnote is written at
+the bottom of the page, below a horizontal line.\refill
+
+In Info, the reference mark for a footnote is a pair of parentheses
+with the footnote number between them, like this: \samp{(1)}.
+Info has two footnote styles, which determine where the text of the
+footnote is located:\refill
+
+\begin{itemize}
+\cindex{End of node footnote style}
+\item
+In the \dfn{end} of node style, all the footnotes for a single node
+are placed at the end of that node. The footnotes are separated from
+the rest of the node by a line of dashes with the word
+\samp{Footnotes} within it. Each footnote begins with an
+\samp{(\var{n})} reference mark.\refill
+
+\noindent
+Here is an example of a single footnote in the end of node style:\refill
+
+\begin{example}
+\begin{same}
+ --------- Footnotes ---------
+
+(1) Here is a sample footnote.
+\end{same}
+\end{example}
+
+\cindex{Separate footnote style}
+\item
+In the \dfn{separate} style, all the footnotes for a single node are
+placed in an automatically constructed node of their own. In this
+style, a ``footnote reference'' follows each \samp{(\var{n})}
+reference mark in the body of the node. The footnote reference is
+actually a cross reference and you use it to reach the footnote
+node.\refill
+
+The name of the footnotes' node is constructed by appending
+\w{\samp{-Footnotes}} to the name of the node that contains the
+footnotes. (Consequently, the footnotes' node for the \file{Footnotes}
+node is \w{\file{Footnotes-Footnotes}}!) The footnotes' node has an
+`Up' node pointer that leads back to its parent node.\refill
+\end{itemize}
+
+\noindent
+Here is how the first footnote in this manual looks after being
+formatted for Info in the separate node style:\refill
+
+\begin{example}
+File: latexinfo.info Node: Overview-Footnotes, Up: Overview
+
+(1) Note that the first syllable of "texinfo" is pronounced like
+"speck", not "hex". \dots{}
+\end{example}
+
+A \LaTeX info file may be formatted into an Info file with either footnote
+style.\refill
+
+\findex{footnotestyle}
+Use the \code{\back footnotestyle} command to specify an Info file's
+footnote style. Write this command at the beginning of a line followed
+by an argument, either \samp{end} for the end node style or
+\samp{separate} for the separate node style. For example:\refill
+
+\begin{example}
+\back footnotestyle\{end\}
+\end{example}
+\noindent
+or
+\begin{example}
+\back footnotestyle\{separate\}
+\end{example}
+
+The \code{\back footnotestyle} command should be written in the
+header, before the \code{\back setfilename} and shortly after the
+\code{\back begin\{document\}} at the beginning of a \LaTeX info
+file. \xref{Custom Headings}. (If you include the \code{\back
+footnotestyle} command between the start of header and end of header
+lines, the region formatting commands will format footnotes as
+specified.) If you do not specify a footnote style, the formatting
+commands will chose a default style.\refill
+
+\node Citations, Input and Include Files, Footnotes, Citations and Footnotes
+\section{Citations}
+\cindex{Citations}
+\cindex{Cite}
+\findex{cite}
+
+\code{\back cite} is the \LaTeX\ command for a bibliographic citations.
+Citations are usually prepared using the program \BibTeX, which formats
+the citations for use with \LaTeX. The argument to the \code{\back cite}
+command is the citation key, which appears in the printed manual as the
+citation key surrounded by square brackets. How it appears in the printed
+manual is dependent on the bibliographic style chosen. See the \LaTeX\
+Manual for more details \cite{Lamport1986}.\refill
+
+Before you use the \code{\back cite} command, you must declare the
+bibliography style that you are going to use.
+\xref{Making a Bibliography}.
+
+\node Input and Include Files, Input Files, Citations, Top
+\chapter{Input and Include Files}
+\cindex{Input and Include Files}
+
+\LaTeX\ has two ways of including files: with the \code{\back input}
+command, and with the \code{\back include} command. \LaTeX\ makes some
+important distinctions between the two. See
+\cite[\S\tie 4.4]{Lamport1986} for the exact nature of the differences.
+In \LaTeX. Input files are simply inserted at the place where the
+\code{input} command occurs, both in the Info file and the \LaTeX\ file.
+\code{include} files have seperate auxilliarly files (\file{.aux}), and you can
+control which files are processed with the \code{includeonly} command.
+
+In \LaTeX info, the Info program ignores the \code{includeonly} command.
+Both \code{include} and \code{input} files are always processed.
+\code{input} files are always ignored by the
+\code{latexinfo-multiple-files-update} command, which creates or updates
+or updates the \code{\back node} entries in a file, whereas, under
+certain conditions, this command will recognize the structure of
+\code{include} files. \xref{latexinfo-multiple-files-update} for
+details
+
+\begin{menu}
+* Input Files::
+* Include Files::
+\end{menu}
+
+\node Input Files, Include Files, Input and Include Files, Input and Include Files
+\section{Input Files}
+\cindex{Input Files}
+\findex{input}
+
+A line of the form \code{\back input\{\var{filename}\}} will include the
+contents of the file \var{filename} at that point. A standard technique
+is to have a top--level file, used only for making a comprehensive
+manual, containing nothing but the beginning, the end, and a series of
+\code{\back input} commands. The \code{\back input} \emph{must} occur
+at the beginning of a line.\refill
+
+A file that is intended to be processed with \code{\back input} should not
+end with \code{\back end\{document\}}, since that would terminate \LaTeX\
+processing immediately.
+
+
+\node Include Files, Using Include Files, Input Files, Input and Include Files
+\section{Include Files}
+\cindex{Include files}
+
+When \LaTeX{} or an Info formatting command sees an \code{\back include}
+command in a \LaTeX info file, it processes the contents of the file named
+by the command and incorporates them into the \scap{dvi} or Info file being
+created. Index entries from the included file are incorporated into
+the indices of the output file.\refill
+
+An included file should simply be a segment of text that you expect to
+be included as-is into the overall or \dfn{outer} \LaTeX info file; it
+should not contain the standard beginning and end parts of a \LaTeX info
+file. In particular, you should not start an included file with a
+\samp{\back documentstyle} command. Likewise, you should not end an
+included file with an \code{\back end\{document\}} command; that command
+will stop \LaTeX{} processing immediately.\refill
+
+\begin{menu}
+* Using Include Files:: How to use the \code{\back include} command.
+* Sample Include File:: A sample outer file with included files
+ within it; and a sample included file.
+\end{menu}
+
+\node Using Include Files, Sample Include File, Include Files, Include Files
+\subsection{How to Use Include Files }
+\findex{include}
+
+To include another file within a \LaTeX info file, write the
+\code{\back include} command at the beginning of a line and follow it on
+the same line by the name of a file to be included. For
+example:\refill
+
+\begin{example}
+\back include\{chap47.tex\}
+\end{example}
+
+
+Conventionally, an included file begins with an \code{\back node} line
+that is followed by an \code{\back chapter} line. Each included file is
+one chapter. This makes it easy to use the regular node and menu
+creating and updating commands to create the node pointers and menus
+within the included file. However, the simple Emacs node and menu
+creating and updating commands do not work with multiple \LaTeX info
+files. Thus you cannot use these commands to fill in the `Next',
+`Previous', and `Up' pointers of the \code{\back node} line that begins
+the included file. Also, you cannot use the regular commands to create
+a master menu for the whole file. Either you must insert the menus and
+the first and last `Next', `Previous', and `Up' pointers by hand, or you
+must use the \code{latexinfo-multiple-files-update} command that is
+designed for \code{\back include} files.
+\xref{latexinfo-multiple-files-update}\refill
+
+\node Sample Include File, Definition Commands, Using Include Files, Include Files
+\subsection{Sample File with \protect\code{\protect\back include}}
+
+If you plan to use the \code{latexinfo-multiple-files-update} command,
+the outer \LaTeX info file that lists included files within it should
+contain nothing but the beginning and end parts of a \LaTeX info file, and
+a number of \code{\back include} commands listing the included files. It
+should not even include indices, which should be listed in an included
+file of their own.\refill
+
+Moreover, each of the included files must contain exactly one highest
+level node (conventionally, an \code{\back chapter} node or equivalent),
+and this node must be the first node in the included file.
+Furthermore, each of these highest level nodes in each included file
+must be at the same hierarchical level in the file structure.
+Usually, each is an \code{\back chapter}, an \code{\back chapter}, or an
+\code{\back unnumbered} node. Thus, normally, each included file contains
+one, and only one, chapter or equivalent-level node.\refill
+
+The outer file should \emph{not} contain any nodes besides the single
+`Top' node. The \code{latexinfo-multiple-files-update} command will
+not process them.\refill
+
+Here is an example of an outer \LaTeX info file with \code{\back include} files
+within it before running \code{latexinfo-multiple-files-update}, which
+would insert a main or master menu:\refill
+
+\clearpage
+\begin{smallverbatim}
+ \documentstyle[12pt,latexinfo]{book}
+ \pagestyle{headings}
+ \begin{document}
+ \bibliographystyle{alpha}
+
+ \newindex{fn}
+
+ \title{The Manual}
+
+ \author{Fred Foobar,\\
+ Clarke Institute,\\
+ 999 Queen Street,\\
+ Toronto, Ontario}
+
+ \date{\today}
+
+ \maketitle
+ \tableofcontents
+ \clearpage
+
+ \setfilename{themanual.info}
+
+ \include{foo.tex}
+ \include{bar.tex}
+
+ \bibliography{references}
+
+ \twocolumn
+ \unnumbered{Function Index}
+ \printindex{fn}
+
+\end{document}
+\end{smallverbatim}
+
+
+An included file, such as \file{foo.tex}, might look like
+this:\refill
+
+\begin{example}
+\begin{same}
+\back node First, Second, , Top
+\back chapter\{First Chapter\}
+
+Contents of first chapter \dots{}
+\end{same}
+\end{example}
+
+The full contents of \file{index.tex} might be as simple as this:
+
+\begin{example}
+\begin{same}
+\back unnumbered\{Concept Index, , Second, Top\}
+\back printindex\{cp\}
+\end{same}
+\end{example}
+
+
+\node Definition Commands, Untyped Languages Definition Commands, Sample Include File, Top
+\chapter{Definition Commands}
+\cindex{Definition commands}
+\cindex{Elisp Style}
+\cpsubindex{styles}{elisp}
+
+The \code{\back deffn} command and the other \dfn{definition
+commands} enable you to describe functions, variables, macros, commands,
+user options, special forms and other such constructs in a uniform
+format.\refill
+
+These constructs are most often used for documenting Lisp and C programs,
+and the table below summarizes the different constucts, their language on
+usual usage, and their class. We will order these functions by their
+usage: untyped languages such as Lisp, typed languages such as C,
+or object--oriented langauges such as CLOS.
+
+\begin{table}[hbtp]
+\begin{tabular}{||l|l|l||}
+\hline
+Command Name & Language & Class \\
+\hline
+deffn & Lisp & general functions \\
+deffun & Lisp & functions \\
+defspec & Lisp & special forms \\
+defmac & Lisp & macros \\
+defvr & Lisp & general variables \\
+defvar & Lisp & variables \\
+\hline
+deftypefn & C & general typed functions \\
+deftypefun & C & typed functions \\
+deftypevr & C & general typed variables \\
+deftypevar & C & typed variables \\
+\hline
+defcv & CLOS & general classes \\
+defvar & CLOS & classes \\
+defivar & CLOS & instances \\
+defop & CLOS & generic functions \\
+defmethod & CLOS & methods \\
+\hline
+deftp & All & data types \\
+defopt & All & User Options \\
+\hline
+\end{tabular}
+\caption{The Definition Commands}
+\end{table}
+
+In the Info file, a definition causes the category entity---`Function',
+`Variable', or whatever---to appear at the beginning of the first line of
+the definition, followed by the entity's name and arguments. In the
+printed manual, the command causes \LaTeX{} to print the entity's name and
+its arguments on the left margin and print the category next to the right
+margin. In both output formats, the body of the definition is indented.
+
+The name of the entity is entered into the appropriate index:
+\code{\back deffn} enters the name into the index of functions,
+\code{\back defvr} enters it into the index of variables, and so
+on.\refill
+
+As these functions are not always wanted, their definitions are contained
+in the \LaTeX info style \code{elisp}. To make these commands available to
+\LaTeX info, include the \code{elisp} option in the list of
+\code{documentstyle} options, such as
+
+\begin{verbatim}
+\documentstyle[latexinfo,elisp]{book}
+\end{verbatim}
+
+\begin{note}
+The Lisp documentation functions in the \code{elisp} style are
+compatible with the Emacs \TeX info fuunctions, and are intended to
+document the GNU Emacs \code{elisp}. As such, they are oriented to the
+older \t{Maclisp} style of programming. \xref{Clisp Style}, for a more
+modern approach to a Lisp documentation style, as would be used for
+Common Lisp.
+\end{note}
+
+
+
+\begin{menu}
+* Untyped Languages Definition Commands::
+* C Functions::
+* Abstract Objects:: Object-Oriented Programming
+* Sample Function Definition:: A Sample Function Definition
+\end{menu}
+
+\node Untyped Languages Definition Commands, Def Cmd Template, Definition Commands, Definition Commands
+\section{Untyped Languages Definition Commands}
+
+\begin{menu}
+* Def Cmd Template:: How to structure a description using a
+ definition command.
+* Optional Parameters:: How to handle optional and repeated parameters.
+* Def Cmds in Detail:: All the definition commands.
+* Functions Commands:: Functions and Similar Entities
+* Variables Commands:: Variables and Similar Entities
+\end{menu}
+
+\node Def Cmd Template, Optional Parameters, Untyped Languages Definition Commands, Untyped Languages Definition Commands
+\subsection{The Template for a Definition}
+\cindex{Definition template}
+\cindex{Template for a definition}
+
+The \code{\back deffn} command is used for definitions of entities that
+resemble functions. To write a definition using the \code{\back deffn}
+command, write the \code{\back deffn} command at the beginning of a line
+and follow it by the category of the entity, the name of the entity itself,
+and its arguments in braces. Then write the body of the definition on
+succeeding lines. (You may embed examples in the body.) Finally, end the
+definition with an \code{\back enddeffn} command written on a line of its
+own. The other definition commands follow the same format. The template
+for a definition looks like this:\refill
+
+\begin{example}
+\back deffn\{\var{category}\}\{\var{name}\}\{\var{arguments}\dots{}\}
+\var{body-of-definition}
+\back enddeffn
+\end{example}
+
+\noindent
+For example,
+\begin{example}
+\back deffn\{Command\}\{forward-word\}\{count\}
+This command moves point forward \back var\{count\} words
+(or backward if \back var\{count\} is negative). \dots{}
+\back enddeffn
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+\deffn{Command}{forward-word}{count}
+This function moves point forward \var{count} words
+(or backward if \var{count} is negative). \dots{}
+\enddeffn
+\end{quote}
+
+Some of the definition commands are more general than others. The
+\code{\back deffn} command, for example, is the general definition command
+for functions and the like---for entities that may take arguments. When
+you use this command, you specify the category to which the entity belongs.
+The \code{\back deffn} command possesses three predefined, specialized
+variations, \code{\back defun}, \code{\back defmac}, and \code{\back
+defspec}, that specify the category for you: ``Function'', ``Macro'', and
+``Special Form'' respectively. The \code{\back defvr} command also is
+accompanied by several predefined, specialized variations for describing
+particular kinds of variables.\refill
+
+The template for a specialized definition, such as \code{\back
+defun}, is similar to the template for a generalized
+definition, except that you don't have to specify the category:\refill
+\begin{example}
+\back defun\{\var{name}\}\{\var{arguments}\dots{}\}
+\var{body-of-definition}
+\back enddefun
+\end{example}
+
+\noindent
+Thus,
+\begin{example}
+\back defun\{buffer-end\}\{flag\}
+This function returns \back code\{(point-min)\} if \back var\{flag\}
+is less than 1, \back code\{(point-max)\} otherwise.
+\dots{}
+\back enddefun
+\end{example}
+
+\noindent
+produces
+
+\defun{buffer-end}{flag}
+This function returns \code{(point-min)} if \var{flag} is less than 1,
+\code{(point-max)} otherwise. \dots{}
+\enddefun
+
+\noindent
+\xref{Sample Function Definition, Sample Function Definition, A Sample
+Function Definition}, for a more detailed example of a function
+definition, including the use of \code{\back begin\{example\}} inside of the
+definition.\refill
+
+The other specialized commands work like \code{\back defun}.\refill
+
+\node Optional Parameters, Def Cmds in Detail, Def Cmd Template, Untyped Languages Definition Commands
+\subsection{Optional and Repeated Parameters}
+\cindex{Optional and repeated parameters}
+\cindex{Repeated and optional parameters}
+\cindex{Parameters, optional and repeated}
+\cindex{Syntax of optional and repeated parameters}
+\cindex{Meta-syntactic chars for optional parameters}
+
+Some entities take optional or repeated parameters, which may be
+specified by a distinctive special glyph that uses square brackets and
+ellipses. For example, a special form often breaks its argument list
+into separate arguments in more complicated ways than a
+straightforward function.\refill
+
+\begin{iftex}
+An argument enclosed within square brackets is optional.
+Thus, the phrase
+\samp{\code{\r{[}\var{optional-arg}\r{]}}} means that
+\var{optional-arg} is optional. An argument followed by
+an ellipsis is optional and may be repeated more than
+once. Thus, \samp{\var{repeated-args}\dots{}} stands
+for zero or more arguments. Parentheses are used when
+several arguments are grouped into additional levels of
+list structure in Lisp.
+\end{iftex}
+\c The following looks better in Info (no `r', `samp' and `code'):
+\begin{ifinfo}
+An argument enclosed within square brackets is optional. Thus,
+[\var{optional-arg}] means that \var{optional-arg} is optional. An
+argument followed by an ellipsis is optional and may be repeated more
+than once. Thus, \var{repeated-args}\dots{} stands for zero or more
+arguments. Parentheses are used when several arguments are grouped
+into additional levels of list structure in Lisp.\refill
+\end{ifinfo}
+Here is the \code{\back defspec} line of an example of an imaginary
+special form:\refill
+
+\begin{quote}
+\defspec{foobar}{\var{var} [\var{from} \var{to} [\var{inc}]]}
+\var{body}\dots{}
+\enddefspec
+\end{quote}
+
+\noindent
+In this example, the arguments \var{from} and \var{to} are optional,
+but must both be present or both absent. If they are present,
+\var{inc} may optionally be specified as well.
+In a \LaTeX info source file, this \code{\back defspec} line is
+written like this:\refill
+
+\begin{example}
+\back defspec\{foobar\}\{\back var\{var\} [\back var\{from\} \back var\{to\}
+ [\back var\{inc\}]]\}
+\back var\{body\}\back dots\{\}
+\back enddefspec
+\end{example}
+
+\noindent
+The function is listed in the Command and Variable Index under
+\samp{foobar}.\refill
+
+\node Def Cmds in Detail, Functions Commands, Optional Parameters, Untyped Languages Definition Commands
+\subsection{The Definition Commands}
+
+The definition commands automatically enter the name of the entity in
+the appropriate index: for example, \code{\back deffn},
+\code{\back defun}, and \code{\back defmac} enter
+function names in the index of functions; \code{\back defvr}
+and \code{\back defvar} enter variable names in the index of
+variables. Remember to declare the necessary indices with
+the \code{\back newindex} commands (\pxref{New Indexes}).\refill
+
+Although the examples that follow mostly illustrate Lisp, the commands
+can be used for other programming languages.\refill
+
+\begin{menu}
+* Functions Commands:: Commands for functions.
+* Variables Commands:: Commands for variables.
+* Typed Functions:: Commands for functions in typed languages.
+* Typed Variables:: Commands for variables in typed languages.
+* Abstract Objects:: Commands for object-oriented programming.
+* Data Types:: The definition command for data types.
+\end{menu}
+
+\node Functions Commands, Variables Commands, Def Cmds in Detail, Untyped Languages Definition Commands
+\subsection{Functions}
+
+This section describes the commands for describing functions and similar
+entities.
+
+\findex{deffn}
+\paragraph*{\back deffn\{\var{category}\}\{\var{name}\}\{\var{arguments}\dots{}\}}
+The \code{\back deffn} command is the general definition command for
+functions, interactive commands, that may take
+arguments. You must choose a term to describe the category of entity
+being defined; for example, ``Function'' could be used if the entity is
+a function. The \code{\back deffn} command is written at the beginning of a
+line and is followed by the category of entity being
+described, the name of this particular entity, and its arguments, if
+any. Terminate the definition with \code{\back enddeffn} on a line of its
+own.\refill
+
+For example,
+\begin{example}
+\back deffn\{Command\}\{forward-char\}\{nchars\}
+Move point forward \back var\{nchars\} characters.
+\back enddeffn
+\end{example}
+
+\noindent
+shows a rather terse definition for a ``command'' named
+\code{forward-char} with one argument, \var{nchars}.
+
+\code{\back deffn} prints argument names such as \var{nchars} in italics or
+upper case, as if \code{\back var} had been used, because we think of these
+names as metasyntactic variables---they stand for the actual argument
+values. Within the text of the description, write an argument name
+explicitly with \code{\back var} to refer to the value of the argument. In
+the example above, we used \samp{\back var\{nchars\}} in this way.
+The template for \code{\back deffn} is:\refill
+\begin{example}
+\back deffn\{\var{category}\}\{\var{name}\}\{\var{arguments}\dots{}\}
+\var{body-of-definition}
+\back enddeffn
+\end{example}
+
+\findex{defun}
+\paragraph*{\back defun\{\var{name}\}\{\var{arguments}\dots{}\}}
+The \code{\back defun} command is the definition command for functions.
+\code{\back defun} is equivalent to \samp{\back deffn\{Function\}
+\dots{}}.\refill
+
+For example,
+\begin{example}
+\back defun\{set\}\{symbol new-value\}
+Change the value of the symbol \var{symbol} to \var{new-value}.
+\back enddefun
+\end{example}
+
+\noindent
+shows a rather terse definition for a function \code{set} whose
+arguments are \var{symbol} and \var{new-value}. The argument names on
+the \code{\back defun} line automatically appear in italics or upper case as
+if they were enclosed in \code{\back var}. Terminate the definition with
+\code{\back enddefun} on a line of its own. The template is:\refill
+\begin{example}
+\back defun\{\var{function-name}\}\{\var{arguments}\dots{}\}
+\var{body-of-definition}
+\back enddefun
+\end{example}
+
+\code{\back defun} creates an entry in the index of functions.
+
+\findex{defmac}
+\paragraph*{\back defmac\{\var{name}\}\{\var{arguments}\dots{}\}}
+The \code{\back defmac} command is the definition command for macros.
+\code{\back defmac} is equivalent to \samp{\back deffn\{Macro\}\dots{}} and
+works like \code{\back defun}.\refill
+
+\findex{defspec}
+\paragraph*{\back defspec\{\var{name}\}\{\var{arguments}\dots{}\}}
+The \code{\back defspec} command is the definition command for special
+forms. \code{\back defspec} is equivalent to \samp{\back deffn\{Special Form\}
+\dots{}} and works like \code{\back defun}.\refill
+
+\node Variables Commands, C Functions, Functions Commands, Untyped Languages Definition Commands
+\subsection{Variables}
+
+Here are the commands for defining variables and similar
+entities:\refill
+
+\findex{defvr}
+\paragraph*{\back defvr\{\var{category}\}\{\var{name}\}} The
+\code{\back defvr} command is a general definition command for
+something like a variable---an entity that records a value. You must
+choose a term to describe the category of entity being defined; for
+example, ``Variable'' could be used if the entity is a variable. Write
+the \code{\back defvr} command at the beginning of a line and
+follow it by the category of the entity and the name
+of the entity. Terminate the definition with \code{\back enddefvr}
+on a line of its own. For example:\refill
+
+\begin{example}
+\back defvr\{User Option\}\{fill-column\}
+This buffer-local variable specifies
+the maximum width of filled lines.
+\dots{}
+\back enddefvr
+\end{example}
+
+
+The template is:
+\begin{example}
+\back defvr\{\var{category}\}\{\var{name}\}
+\var{body-of-definition}
+\back enddefvr
+\end{example}
+
+\code{\back defvr} creates an entry in the index of variables for \var{name}.
+
+\findex{defvar}
+\paragraph*{\back defvar\{\var{name}\}}
+The \code{\back defvar} command is the definition command for
+variables. \code{\back defvar} is equivalent to \samp{\back
+defvr\{Variable\}\dots{}}. For example,
+\begin{example}
+\back defvar\{kill-ring\}
+\dots{}
+\back enddefvar
+\end{example}
+
+The template is:
+\begin{example}
+\back defvar\{\var{name}\}
+\var{body-of-definition}
+\back enddefvar
+\end{example}
+
+\code{\back defvar} creates an entry in the index of variables for
+\var{name}.\refill
+
+\node C Functions, Typed Functions, Variables Commands, Definition Commands
+\section{C Functions}
+
+\begin{menu}
+* Typed Functions:: Functions in Typed Languages
+* Typed Variables:: Variables in Typed Languages
+\end{menu}
+
+\node Typed Functions, Typed Variables, C Functions, C Functions
+\subsection{Functions in Typed Languages}
+
+The \code{\back deftypefn} command and its variations are for
+describing functions in C or any other language in which you must
+declare types of variables and functions.\refill
+
+\findex{deftypefn}
+\paragraph*{\back deftypefn\{\var{category}\}\{\var{data-type}\}\{\var{name}\}\{\var{arguments}\dots{}\}}
+The \code{\back deftypefn} command is the general definition command for
+functions that may take arguments and that are typed. The \code{\back
+deftypefn} command is written at the beginning of a line and is followed
+the category of entity being described, the type of the returned value, the
+name of this particular entity, and its arguments, if any.\refill
+
+For example,
+\begin{example}
+\back deftypefn\{Library Function\}\{int\}\{foobar\}\{(int \back var\{foo\}, float \back var\{bar\})\}
+\dots{}
+\back enddeftypefn
+\end{example}
+
+\noindent
+produces the following in Info:
+
+\begin{smallexample}
+-- Library Function: int foobar (int FOO, float BAR)
+\dots{}
+\end{smallexample}
+
+
+In a printed manual, it produces:
+
+\begin{quote}
+\deftypefn{Library Function}{int}{foobar}{(int \var{foo}, float \var{bar})}
+a ``library function'' that returns an \code{int}
+\enddeftypefn
+\end{quote}
+
+This means that \code{foobar} is a ``library function'' that returns an
+\code{int}, and its arguments are \var{foo} (an \code{int}) and
+\var{bar} (a \code{float}).\refill
+
+The argument names that you write in \code{\back deftypefn} are not subject
+to an implicit \code{\back var}---since the actual names of the arguments in
+\code{\back deftypefn} are typically scattered among data type names and
+keywords, \LaTeX info can't find them without help. Instead, you must write
+\code{\back var} explicitly around the argument names. In the example
+above, the argument names are \samp{foo} and \samp{bar}.\refill
+
+The template for \code{\back deftypefn} is:\refill
+
+\begin{smallexample}
+\back deftypefn\{\var{category}\}\{\var{data-type}\}\{\var{name}\}\{\var{arguments}\} \dots{}
+\var{body-of-description}
+\back enddeftypefn
+\end{smallexample}
+
+\noindent
+Note that if the \var{category} or \var{data type} is more than one
+word then it must be enclosed in braces to make it a single argument.\refill
+
+If you are describing a procedure in a language that has packages, such
+as Ada, you might consider using \code{\back deftypefn} in a
+manner somewhat contrary to the convention described in the preceding
+paragraphs. For example:\refill
+\begin{example}
+\back deftypefn\{stacks\}\{private\}\{push\}
+\{(\back var\{s\}:in out stack; \back var\{n\}:in integer)\}
+\dots{}
+\back enddeftypefn
+\end{example}
+
+\noindent
+In this instance, the procedure is classified as belonging to the
+package \code{stacks} rather than classified as a `procedure' and its
+data type is described as \code{private}. (The name of the procedure
+is \code{push}, and its arguments are \var{s} and \var{n}.)\refill
+
+\code{\back deftypefn} creates an entry in the index of functions for
+\var{name}.\refill
+
+\findex{deftypefun}
+\paragraph*{\back deftypefun\{\var{data-type}\}\{\var{name}\}\{\var{arguments}\dots{}\}}
+The \code{\back deftypefun} command is the specialized
+definition command for functions in typed languages. The command is
+equivalent to \samp{\back deftypefn\{Function\}\dots{}}.\refill
+
+\begin{example}
+\back deftypefun\{int\}\{foobar\}
+\{(int \back var\{foo\}, float \back var\{bar\})\}
+\dots{}
+\back enddeftypefun
+\end{example}
+
+\noindent
+produces the following in Info:
+\begin{example}
+-- Function: int foobar (int FOO, float BAR)
+\dots{}
+\end{example}
+
+\begin{iftex}
+\noindent
+and the following in a printed manual:
+
+\begin{quote}
+\deftypefun{int}{foobar}{(int \var{foo}, float \var{bar})}
+\dots{}
+\enddeftypefun
+\end{quote}
+\end{iftex}
+
+The template is:
+\begin{example}
+\back deftypefun\{\var{type}\}\{\var{name}\}\{\var{arguments}\dots{}\}
+\var{body-of-description}
+\back enddeftypefun
+\end{example}
+
+\code{\back deftypefun} creates an entry in the index of functions for
+\var{name}.\refill
+
+\node Typed Variables, Abstract Objects, Typed Functions, C Functions
+\subsection{Variables in Typed Languages}
+
+Variables in typed languages are handled in a manner similar to
+functions in typed languages. (\xref{Typed Functions}.) The general
+definition command \code{\back deftypevr} corresponds to
+\code{\back deftypefn} and the specialized definition command
+\code{\back deftypevar} corresponds to \code{\back deftypefun}.\refill
+
+\findex{deftypevr}
+\paragraph*{\back deftypevr\{\var{category}\}\{\var{data-type}\}\{\var{name}\}}
+The \code{\back deftypevr} command is the general definition command for
+something like a variable in a typed language---an entity that records
+a value. You must choose a term to describe the category of the
+entity being defined; for example, ``Variable'' could be used if the
+entity is a variable.\refill
+
+The \code{\back deftypevr} command is written at the beginning
+of a line and is followed by the category of the entity being described,
+the data type, and the name of this particular entity.
+For example:\refill
+\begin{example}
+\back deftypevr\{Global Flag\}\{int\}\{enable\}
+\dots{}
+\back enddeftypevr
+\end{example}
+
+\noindent
+produces the following in Info:
+\begin{example}
+-- Global Flag: int enable
+\dots{}
+\end{example}
+
+\begin{iftex}
+\noindent
+and the following in a printed manual:
+
+\begin{quote}
+\deftypevr{Global Flag}{int}{enable}
+\dots{}
+\enddeftypevr
+\end{quote}
+\end{iftex}
+
+\noindent
+The template is:
+\begin{example}
+\back deftypevr\{\var{category}\}\{\var{data-type}\}\{\var{name}\}
+\var{body-of-description}
+\back enddeftypevr
+\end{example}
+
+\code{\back deftypevr} creates an entry in the index of variables for
+\var{name}.\refill
+
+\findex{deftypevar}
+\paragraph*{\back deftypevar\{\var{data-type}\}\{\var{name}\}}
+The \code{\back deftypevar} command is the specialized definition command
+for variables in typed languages. \code{\back deftypevar} is equivalent
+to \samp{\back deftypevr\{Variable\}\dots{}}.\refill
+
+For example,
+\begin{example}
+\back deftypevar\{int\}\{foobar\}
+\dots{}
+\back enddeftypevar
+\end{example}
+
+\noindent
+produces the following in Info:
+\begin{example}
+-- Variable: int foobar
+\dots{}
+\end{example}
+\begin{iftex}
+\noindent
+and the following in a printed manual:
+
+\begin{quote}
+\deftypevar{int}{foobar}
+\dots{}
+\enddeftypevar
+\end{quote}
+\end{iftex}
+
+\noindent
+The template is:
+\begin{example}
+\back deftypevar\{\var{data-type}\}\{\var{name}\}
+\var{body-of-description}
+\back enddeftypevar
+\end{example}
+
+\code{\back deftypevar} creates an entry in the index of variables for
+\var{name}.\refill
+
+\node Abstract Objects, Data Types, Typed Variables, Definition Commands
+\section{Object-Oriented Programming}
+
+\LaTeX info has commands for formatting descriptions about abstract
+objects, such as are used in object-oriented programming. A class is a
+defined type of abstact object. An instance of a class is a particular
+object that has the type of the class. An instance variable is a
+variable that belongs to the class but for which each instance has its
+own value.\refill
+
+In a definition, if the name of a class is truly a name defined in the
+programming system for a class, then you should write an \code{\back code}
+around it. Otherwise, it is printed in the usual text font.\refill
+
+\findex{defcv}
+\paragraph*{\back defcv\{\var{category}\}\{\var{class}\}\{\var{name}\}}
+The \code{\back defcv} command is the general definition command for
+variables associated with classes in object-oriented programming. The
+\code{\back defcv} command is followed by three arguments: the category of
+thing being defined, the class to which it belongs, and its
+name. Thus,\refill
+\begin{example}
+\back defcv\{Class Option\}\{Window\}\{border-pattern\}
+\dots{}
+\back enddefcv
+\end{example}
+
+\noindent
+illustrates how you would write the first line of a definition of the
+\code{border-pattern} class option of the class \code{Window}. The
+template is:\refill
+\begin{example}
+\back defcv\{\var{category}\}\{\var{class}\}\{\var{name}\}
+\dots{}
+\back enddefcv
+\end{example}
+
+\code{\back defcv} creates an entry in the index of variables.
+
+\findex{defivar}
+\paragraph*{\back defivar\{\var{class}\}\{\var{name}\}}
+The \code{\back defivar} command is the definition command for
+instance variables in object-oriented programming. \code{\back
+defivar} is equivalent to \samp{\back defcv\{Instance
+Variable\} \dots{}}\refill
+
+The template is:
+\begin{example}
+\back defivar\{\var{class}\}\{\var{instance-variable-name}\}
+\var{body-of-definition}
+\back enddefivar
+\end{example}
+
+\noindent
+\code{\back defivar} creates an entry in the index of variables.
+
+\findex{defop}
+\paragraph*{\back defop\{\var{category}\}\{\var{class}\}\{\var{name}\}\{\var{arguments}\dots{}\}}
+The \code{\back defop} command is the general definition
+command for entities that may resemble methods in object-oriented
+programming. These entities take arguments, as functions do, but are
+associated with particular classes of objects. For example, some
+systems have constructs called \dfn{wrappers} that are associated with
+classes as methods are, but that act more like macros than like
+functions. You could use \code{\back defop\{Wrapper\}} to
+describe one of these.\refill
+
+Sometimes it is useful to distinguish methods and \dfn{operations}.
+You can think of an operation as the specification for a method.
+Thus, a window system might specify that all window classes have a
+method named \code{expose}; we would say that this window system
+defines an \code{expose} operation on windows in general. Typically,
+the operation has a name and also specifies the pattern of arguments;
+all methods that implement the operation must accept the same
+arguments, since applications that use the operation do so without
+knowing which method will implement it.\refill
+
+Often it makes more sense to document operations than methods. For
+example, window application developers need to know about the
+\code{expose} operation, but need not be concerned with whether a
+given class of windows has its own method to implement this operation.
+To describe this operation, you would write:\refill
+\begin{example}
+\back defop\{Operation\}\{windows\}\{expose\}\{\}
+\end{example}
+
+The \code{\back defop} command is written at the beginning of
+a line and is followed by the overall name of the category of operation,
+the name of the class of the operation, the name of the operation, and
+its arguments.\refill
+
+The template is:
+\begin{example}
+\back defop\{\var{category}\}\{\var{class}\}\{\var{name}\}\{\var{arguments}\dots{}\}
+\var{body-of-definition}
+\back enddefop
+\end{example}
+
+\code{\back defop} creates an entry, such as `\code{expose} on
+\code{windows}', in the index of functions.\refill
+
+\findex{defmethod}
+\paragraph*{\back defmethod\{\var{class}\}\{\var{name}\}\{\var{arguments}\dots{}\}}
+The \code{\back defmethod} command is the definition command
+for methods in object-oriented programming. A method is a kind of
+function that implements an operation for a particular class of objects
+and its subclasses.\refill
+
+\code{\back defmethod} is equivalent to \samp{\back defop\{Method \dots{}}\}.
+The command is written at the beginning of a line and is followed by
+the name of the class of the method, the name of the method, and its
+arguments, if any. For example,\refill
+\begin{example}
+\back defmethod\{\code{bar-class}\}\{bar-method\}\{argument\}
+\dots{}
+\back enddefmethod
+\end{example}
+
+\noindent
+illustrates the definition for a method called \code{bar-method} of
+the class \code{bar-class}. The method takes an argument.\refill
+
+The template is:
+\begin{example}
+\back defmethod\{\var{class}\}\{\var{method-name}\}\{\var{arguments}\dots{}\}
+\var{body-of-definition}
+\back enddefmethod
+\end{example}
+
+\code{\back defmethod} creates an entry, such as `\code{bar-method} on
+\code{bar-class}', in the index of functions.\refill
+
+\begin{menu}
+* Data Types::
+\end{menu}
+
+\node Data Types, Sample Function Definition, Abstract Objects, Abstract Objects
+\subsection{Data Types}
+
+Here is the command for data types:\refill
+
+\findex{deftp}
+\paragraph*{\back deftp\{\var{category}\}\{\var{name}\}\{\var{attributes}\dots{}\}}
+The \code{\back deftp} command is the generic definition
+command for data types. The command is written at the beginning of a
+line and is followed by the category, by the name of the type (which is
+a word like \code{int} or \code{float}, and then by names of attributes
+of objects of that type. Thus, you could use this command for
+describing \code{int} or \code{float}, in which case you could use
+\code{data type} as the category. (A data type is a category of
+certain objects for purposes of deciding which operations can be
+performed on them.)\refill
+
+In Lisp, for example, \dfn{pair} names a particular data
+type, and an object of that type has two slots called the
+\scap{car} and the \scap{cdr}. Here is how you would write the first line
+of a definition of \code{pair}.\refill
+\begin{example}
+\back deftp\{Data type\}\{pair\}\{car cdr\}
+\dots{}
+\back enddeftp
+\end{example}
+
+The template is:
+\begin{example}
+\back deftp\{\var{category}\}\{\var{name-of-type}\}\{\var{attributes}\dots{}\}
+\var{body-of-definition}
+\back enddeftp
+\end{example}
+
+\code{\back deftp} creates an entry in the index of data types.
+
+\findex{defopt}
+\paragraph*{\back defopt\{\var{name}\}}
+The \code{\back defopt} command is the definition command for
+user options. \code{\back defopt} is equivalent to \samp{\back
+defvr \{User Option\} \dots{}} and works like \code{\back
+defvar}.\refill
+
+\node Sample Function Definition, Nodes and Menus, Data Types, Definition Commands
+\section{A Sample Function Definition}
+\cindex{Function definitions}
+\cindex{Command definitions}
+\cindex{Macro definitions}
+\cindex{Sample function definition}
+
+A function definition uses the \code{\back defun} and
+\code{\back enddefun} commands. The name of the function follows
+immediately after the \code{\back defun} command and it is
+followed by the parameter list.\refill
+
+\begin{quote}
+\defun{apply}{function &rest arguments}
+\code{apply} calls \var{function} with \var{arguments}, just like
+\code{funcall} but with one difference: the last of \var{arguments} is a
+list of arguments to give to \var{function}, rather than a single
+argument. We also say that this list is \dfn{appended} to the other
+arguments.
+
+\code{apply} returns the result of calling \var{function}. As with
+\code{funcall}, \var{function} must either be a Lisp function or a
+primitive function; special forms and macros do not make sense in
+\code{apply}.
+\begin{example}
+(setq f 'list)
+ \result{} list
+(apply f 'x 'y 'z)
+\error{} Wrong type argument: listp, z
+(apply '+ 1 2 '(3 4))
+ \result{} 10
+(apply '+ '(1 2 3 4))
+ \result{} 10
+
+(apply 'append '((a b c) nil (x y z) nil))
+ \result{} (a b c x y z)
+\end{example}
+
+An interesting example of using \code{apply} is found in the description
+of \code{mapcar}.\refill
+\enddefun
+\end{quote}
+
+In the \LaTeX info source file, this example looks like this:
+
+\begin{smallverbatim}
+\defun{apply}{function &rest arguments}
+\code{apply} calls \var{function} with \var{arguments}, just like
+\code{funcall} but with one difference: the last of \var{arguments} is a
+list of arguments to give to \var{function}, rather than a single
+argument. We also say that this list is \dfn{appended} to the other
+arguments.
+
+\code{apply} returns the result of calling \var{function}. As with
+\code{funcall}, \var{function} must either be a Lisp function or a
+primitive function; special forms and macros do not make sense in
+\code{apply}.
+\begin{example}
+(setq f 'list)
+ \result{} list
+(apply f 'x 'y 'z)
+\error{} Wrong type argument: listp, z
+(apply '+ 1 2 '(3 4))
+ \result{} 10
+(apply '+ '(1 2 3 4))
+ \result{} 10
+
+(apply 'append '((a b c) nil (x y z) nil))
+ \result{} (a b c x y z)
+\end{smallverbatim}
+
+\noindent
+In this manual, this function is listed in the Command and Variable
+Index under \code{apply}.\refill
+
+Ordinary variables and user options are described using a format like
+that for functions except that variables do not take arguments.
+
+\c \section{Common Lisp Definitions}
+
+\part{Info}
+
+\node Nodes and Menus, Node Menu Illustration, Sample Function Definition, Top
+\chapter{Nodes and Menus}
+
+Most \LaTeX info files are organized hierarchically like books, with
+chapters, sections, subsections, and subsubsections. Such a hierarchy
+is tree-like; the chapters are the major limbs from which the sections
+branch out. In a conventional diagram, however, such a hierarchy is
+drawn with the ``root'' at the top and the ``leaves'' at the
+bottom---as an upside-down tree. The root node is called the `Top'
+node, and `Up' pointers carry you closer to the root.\refill
+
+\begin{menu}
+* Node Menu Illustration:: A diagram and sample nodes and menus.
+* node:: The \code{\back node} command in detail.
+* Node Names:: Choosing Node and Pointer Names
+* Menu Environment::
+* Other Info Files:: Referring to nodes in other Info files.
+\end{menu}
+
+\node Node Menu Illustration, node, Nodes and Menus, Nodes and Menus
+\section{Node and Menu Illustration}
+
+Here is a copy of the diagram shown earlier that illustrates a \LaTeX info
+file with three chapters, each of which contains two sections.\refill
+
+\begin{example}
+\begin{same}
+ top
+ |
+ -------------------------------------
+ | | |
+ Chapter 1 Chapter 2 Chapter 3
+ | | |
+ -------- -------- --------
+ | | | | | |
+ Section Section Section Section Section Section
+ 1.1 1.2 2.1 2.2 3.1 3.2
+\end{same}
+\end{example}
+
+In a \LaTeX info file that has this organization, you would write the
+beginning of the node for Chapter 2 like this:\refill
+
+\begin{example}
+\back node Chapter 2, Chapter 3, Chapter 1, top
+\back comment node-name, next, previous, up
+\end{example}
+
+\clearpage
+To go to Sections 2.1 and 2.2 using Info, you need a menu inside of
+Chapter 2 that says:\refill
+
+\begin{example}
+ \back begin\{menu\}
+ * Sect. 2.1:: Description of this section.
+ * Sect. 2.2::
+ \back end\{menu\}
+\end{example}
+
+\noindent
+You would locate this menu inside Chapter 2, after the beginning of
+the chapter and before Section 2.1.\refill
+
+The node for Sect. 2.1 will look like this:\refill
+
+\begin{example}
+ \back node Sect. 2.1, Sect. 2.2, Chapter 2, Chapter 2
+ \back comment node-name, next, previous, up
+\end{example}
+
+Usually, an \code{\back node} command and a chapter structuring command
+are used in sequence, along with indexing commands. (The updating
+commands require this sequence. \xref{Updating Requirements}.) Also,
+you may want to follow the \code{\back node} line with a comment line that
+reminds you which pointer is which. For example, the beginning of the
+node for the chapter on ending a file looks like this:\refill
+
+\begin{smallexample}
+\begin{same}
+\back node Ending a File, Structuring, Beginning a File, Top
+\back comment node-name, next, previous, up
+\back chapter\{Ending a LaTeXinfo File\}
+\back cindex\{Ending a LaTeXinfo file\}
+\back cindex\{LaTeXinfo file ending\}
+\back cindex\{File ending\}
+\end{same}
+\end{smallexample}
+
+The following two sections describe the \code{\back node} and
+\code{\back begin\{menu\}} commands in detail.\refill
+
+\node node, Node Names, Node Menu Illustration, Nodes and Menus
+\section{\protect\code{\protect\back node}}
+
+\code{\back node} defines the beginning of a new node in the Info output
+file. (\inforef{Top, info, info}.) Write the command at the beginning
+of a line, followed by four arguments, separated by commas, that make
+up the rest of the line. These arguments are the name of the node,
+and the names of the `Next', `Previous', and `Up' pointers, in that
+order. You may insert spaces before each pointer if you wish. The
+spaces are ignored.\refill
+
+In \LaTeX, \code{\back node} is nearly ignored. It generates nothing
+visible. Its only function is to identify the name to use for cross
+references to the chapter or section which follows the \code{\back node}
+command and which makes up the body of the node. (Cross references,
+such as the one following this sentence, are made with \code{\back xref}
+and its related commands. \xref{Cross References}.)\refill
+
+In general, an \code{\back node} line is followed immediately by a
+chapter-structuring command such as \code{\back chapter}, \code{\back
+section}, \code{\back subsection}, or \code{\back subsubsection}.
+(\xref{Structuring Command Types, , Types of Structuring
+Command}.)\refill
+
+\begin{menu}
+* Node Names:: Choosing node and pointer names.
+* Writing a Node:: How to write a node line.
+\end{menu}
+
+\node Node Names, Writing a Node, node, Nodes and Menus
+\begin{ifinfo}
+\section*{Choosing Node and Pointer Names}
+\end{ifinfo}
+
+The name of the node identifies the node. The pointers, which enable
+you to reach other nodes, consist of the names of those nodes.\refill
+
+All the node names for a single Info file must be unique.
+Duplications confuse the Info movement commands. This means, for
+example, that if you end each chapter with a summary, you must name
+every summary node differently. You may, however, duplicate section
+titles (although this practice may confuse a reader).\refill
+
+Try to pick node names that are informative but short. In the Info
+file, the file name, node name, and pointer names are all inserted on
+one line, which may run into the right edge of the window. (This does
+not cause a problem with Info, but is ugly.)\refill
+
+By convention, node names are capitalized just as they would be for
+section or chapter titles.\refill
+
+\begin{quote}
+\strong{Caution:} Do not use any of the \LaTeX info \back -commands in a node
+name; these commands confuse Info.\refill
+
+Do not use commas within a node name; a comma terminates the node
+name.\refill
+\end{quote}
+
+Pointer names must be the names of nodes defined elsewhere. It does
+not matter whether pointers are before or after the node that refers
+to them.\refill
+
+Normally, a node's `Up' pointer should contain the name of the node
+whose menu mentions that node. The node's `Next' pointer should
+contain the name of the node that follows that node and its `Previous'
+pointer should contain the name of the node that precedes it in that
+menu. When a node's `Up' node is the same as its `Previous' node,
+both node pointers should name the same node.
+
+\begin{menu}
+* Writing a Node:: Writing a Node Line
+\end{menu}
+
+\node Writing a Node, Menu Environment, Node Names, Node Names
+\subsection{Writing a Node Line}
+\cindex{Writing a node Line}
+\cindex{Node line writing}
+
+The easiest way to write a node line is to write \code{\back node} at the
+beginning of a line and then the name of the node. You can use update
+node commands provided by \LaTeX info mode to insert the names of the
+pointers; \pxref{LaTeXinfo Mode}.\refill
+
+Alternatively, you may insert the `Next', `Previous', and `Up'
+pointers yourself. If you do this, you may find it helpful to use the
+\LaTeX info mode keyboard command \kbd{C-c C-c n}. This command inserts
+\samp{\back node} and a comment line listing the names of the pointers in
+their proper order. The comment line helps you keep track of which
+arguments are for which pointers. This template is especially useful
+if you are not familiar with \LaTeX info.\refill
+
+If you wish, you can ignore node lines altogether in your first draft
+and then use the \code{latexinfo-insert-node-lines} command to create
+node lines for you. However, this practice is not recommended. It is
+better to name the node itself at the same time you write a section so
+you can easily make cross references. A large number of cross
+references are an especially important feature of a good Info
+file.\refill
+
+After you have inserted a node line, you should immediately write an
+\back -command for the chapter or section and insert its name. Next (and
+this is important!), put in several index entries. Usually, you will
+find at least two and often as many as four or five ways of referring
+to the node in the index. Use them all. This will make it much
+easier for people to find the node.\refill
+
+The top node of the file (which must be named \samp{top} or \samp{Top})
+should have as its `Up' and `Previous' nodes the name of a node in
+another file, where there is a menu that leads to this file. Specify
+the file name in parentheses. If the file is to be installed directly
+in the Info directory file, use \samp{(dir)} as the parent of the `Top'
+node; this is short for \samp{(dir)top}, and specifies the `Top' node in
+the \file{dir} file, which contains the main menu for Info. For
+example, the `Top' node line of this manual looks like this:\refill
+
+\begin{example}
+\back node Top, Overview, (dir), (dir)
+\end{example}
+
+\noindent
+(You may use the \LaTeX info updating commands to insert these `Next'
+and \samp{(dir)} pointers automatically.)\refill
+
+\xref{Installing an Info File}, for more information about installing
+an Info file in the \file{info} directory.\refill
+
+\node Menu Environment, Menu Location, Writing a Node, Nodes and Menus
+\section{Menu Environment}
+\cindex{Menus}
+\findex{menu}
+
+The \code{\back begin\{menu\}} command is used to create \dfn{menus},
+which contain pointers to subordinate nodes. In Info, you use menus to
+go to such nodes. Menus have no effect in printed manuals and do not
+appear in them.\refill
+
+By convention, a menu is put at the end of a node. This way, it is
+easy for someone using Info to find the menu, using the \kbd{M->}
+(\code{end-of-buffer}) command.\refill
+
+\begin{ifinfo}
+\emph{A node that has a menu should not contain much text.} If you
+have a lot of text and a menu, move most of the text into a new
+subnode---all but a few lines.\refill
+\end{ifinfo}
+
+\begin{iftex}
+\emph{A node that has a menu should not contain much text.} If you
+have a lot of text and a menu, move most of the text into a new
+subnode---all but a few lines. Otherwise, a reader with a terminal
+that displays only a few lines may miss the menu and its associated
+text. As a practical matter, you should locate a menu within 20 lines
+of the beginning of the node.\refill
+\end{iftex}
+
+\begin{menu}
+* Menu Location:: Put a menu in a short node.
+* Menu Item:: How to write a menu item.
+* Menu Example:: A menu example.
+\end{menu}
+
+\node Menu Location, Menu Item, Menu Environment, Menu Environment
+\begin{ifinfo}
+\subsection*{Menus Need Short Nodes}
+\end{ifinfo}
+\cindex{Menu location}
+\cindex{Location of menus}
+\cindex{Nodes for menus are short}
+\cindex{Short nodes for menus}
+
+\begin{ifinfo}
+A reader can easily see a menu that is close to the beginning of the
+node. The node should be short. As a practical matter, you should
+locate a menu within 20 lines of the beginning of the node.
+Otherwise, a reader with a terminal that displays only a few lines may
+miss the menu and its associated text.\refill
+\end{ifinfo}
+
+The short text before a menu may look awkward in a printed manual. To
+avoid this, you can write a menu near the beginning of its node and
+follow the menu by an \code{\back node} line and an \code{\back
+section*} line within \code{\back begin\{ifinfo\}} and \code{\back
+end\{ifinfo\}}. This way, the menu, node line, and title appear only in
+the Info file, not the printed document.\refill
+
+The preceding two paragraphs follow an Info-only menu, node line, and
+heading, and look like this:\refill
+
+\begin{example}
+\begin{same}
+\back begin\{menu\}
+* Menu Location:: Put a menu in a short node.
+* Menu Item:: How to write a menu item.
+* Menu Example:: A menu example.
+\back end\{menu\}
+
+\back node Menu Location
+\back begin\{ifinfo\}
+\back subsection*\{Menus Need Short Nodes\}
+\back end\{ifinfo\}
+\end{same}
+\end{example}
+
+See the beginning of the ``Cross References'' chapter in the
+\LaTeX info source for this document for another example this
+procedure.\refill
+
+\node Menu Item, Menu Example, Menu Location, Menu Environment
+\subsection{Writing a Menu Item}
+\cindex{Writing a menu item}
+\cindex{Menu item writing}
+
+In a menu, every line that begins with a \samp{* } is a menu item.
+(Note the space after the asterisk.) A line that does not start with
+a \samp{* } can appear in the menu but is not a menu item, just a
+comment.\refill
+
+A menu item has three parts, only the second of which is
+required:\refill
+
+\begin{enumerate}
+\item
+The menu item name.
+
+\item
+The name of the node.
+
+\item
+A description of the item.
+\end{enumerate}
+
+A menu item looks like this:
+
+\begin{example}
+* Item name: Node name. Description.
+\end{example}
+
+Follow the menu item name with a single colon and follow the node name
+with tab, comma, period, or newline.\refill
+
+In Info, a user can select a node with the \kbd{m} (\code{Info-menu})
+command. The menu item name is what the user types after the \kbd{m}
+command.\refill
+
+If the menu item name and the node name are the same, you can write
+the name immediately after the asterisk and space at the beginning of
+the line and follow the name with two colons.\refill
+
+For example, write
+
+\begin{example}
+* Name::
+\end{example}
+
+\noindent
+instead of
+
+\begin{example}
+* Name: Name.
+\end{example}
+
+\noindent
+You should use the node name for the menu item name whenever possible,
+since it reduces visual clutter in the menu.\refill
+
+The third part of a menu entry is a short descriptive phrase or
+sentence. Menu item names and node names are often short; the
+description explains to the reader what the node is about. The
+description, which is optional, can spread over two or more lines. A
+useful description complements the node name rather than repeating
+it.\refill
+
+\node Menu Example, Other Info Files, Menu Item, Menu Environment
+\subsection{A Menu Example}
+\cindex{Menu example}
+\cindex{Example menu}
+
+A menu looks like this in \LaTeX info:\refill
+
+\begin{example}
+\begin{same}
+\back begin\{menu\}
+* Menu item name: Node name. A short description.
+* Node name:: This form is preferred.
+\back end\{menu\}
+\end{same}
+\end{example}
+
+\noindent
+This produces:
+
+\begin{example}
+\begin{same}
+* menu:
+
+* Menu item name: Node name. A short description.
+* Node name:: This form is preferred.
+\end{same}
+\end{example}
+
+Here is an example as you might see it in a \LaTeX info file:\refill
+
+\begin{example}
+\begin{same}
+\back begin\{menu\}
+Larger Units of Text
+
+* Files:: All about handling files.
+* Multiples: Buffers. Multiple buffers; editing
+ several files at once.
+\back end\{menu\}
+\end{same}
+\end{example}
+
+\noindent
+This produces:
+
+\begin{example}
+\begin{same}
+* menu:
+Larger Units of Text
+
+* Files:: All about handling files.
+* Multiples: Buffers. Multiple buffers; editing
+ several files at once.
+\end{same}
+\end{example}
+
+In this example, the menu has two entries. \samp{Files} is both a
+menu item name and the name of the node referred to by that item. In
+the other entry, \samp{Multiples} is the item name, and it refers to
+the node named \samp{Buffers}.\refill
+
+Since no file name is specified with either \samp{Files} or
+\samp{Buffers}, they must be the names of nodes in the same Info file.
+(\xref{Other Info Files, , Referring to Other Info Files}.)\refill
+
+The line \samp{Larger Units of Text} is a comment.\refill
+
+\node Other Info Files, Cross References, Menu Example, Nodes and Menus
+\section{Referring to Other Info Files}
+\cindex{Referring to other Info files}
+\cindex{Nodes in other Info files}
+\cindex{Other Info files' nodes}
+
+You can refer to nodes in other Info files by writing the file name in
+parentheses just before the node name. In this case, you should use
+the three-part menu item format, which saves the reader from having to
+type the file name.\refill
+
+If you do not list the node name, but only name the file, then Info
+presumes that you are referring to the \samp{Top} node.\refill
+
+The format looks like this:\refill
+
+\begin{example}
+\begin{same}
+\back begin\{menu\}
+* \var{first-item}:(\var{filename})\var{nodename}. \var{description}
+* \var{second-item}:(\var{filename})\var{second-node}. \var{description}
+\back end\{menu\}
+\end{same}
+\end{example}
+
+The \file{dir} top level directory for the Info system has menu
+entries that take you directly to the \samp{Top} nodes of each Info
+document. (\xref{Creating and Installing an Info File}.)\refill
+
+For example,
+
+\begin{example}
+\begin{same}
+\dots{}
+* Info: (info). Documentation browsing system.
+* Emacs: (emacs). The extensible, self-documenting
+ text editor.
+\dots{}
+\end{same}
+\end{example}
+
+To refer directly to the \samp{Outlining} and \samp{Rebinding} nodes
+in the \i{Emacs Manual}, you would write a menu similar to the
+following:\refill
+
+\begin{example}
+\begin{same}
+\back begin\{menu\}
+* Outlining: (emacs)Outline Mode. The major mode for
+ editing outlines.
+* Rebinding: (emacs)Rebinding. How to redefine the
+ meaning of a key.
+\back end\{menu\}
+\end{same}
+\end{example}
+
+\node Invocation, References, Other Info Files, Top
+\node Cross References, References, Other Info Files, Top
+\chapter{Making Cross References}
+\cindex{Making cross references}
+\cindex{Cross references}
+\cindex{References}
+
+Cross references are used to refer the reader to other parts of the
+same or different \LaTeX info files. In \LaTeX info, nodes are the
+points to which cross references can refer.\refill
+
+\begin{menu}
+* References:: What cross references are for.
+* Cross Reference Commands:: A summary of the different commands.
+* Cross Reference Parts:: A cross reference has several parts.
+* xref:: Begin a reference with `See' \dots{}
+* Top Node Naming:: Naming a `Top' Node
+* ref:: A reference for the last part of a sentence.
+* pxref:: How to write a parenthetical cross reference.
+* inforef:: How to refer to an Info-only file.
+\end{menu}
+
+\node References, Cross Reference Commands, Cross References, Cross References
+\begin{ifinfo}
+\section*{What References Are For}
+\end{ifinfo}
+
+Often, but not always, a printed document should be designed so that
+it can be read sequentially. People tire of flipping back and forth
+to find information that should be presented to them as they need
+it.\refill
+
+However, in any document, some information will be too detailed for
+the current context, or incidental to it; use cross references to
+provide access to such information. Also, an on-line help system or a
+reference manual is not like a novel; few read such documents in
+sequence from beginning to end. Instead, people look up what they
+need. For this reason, such creations should contain many cross
+references to help readers find other information that they may not
+have read.\refill
+
+In a printed manual, a cross reference creates a page reference,
+unless it is to another manual altogether, in which case it names that
+manual.\refill
+
+In Info, a cross reference creates an entry that you can follow using
+the Info \samp{f} command. (\inforef{Help-Adv, Some advanced Info
+commands, info}.)\refill
+
+The various cross reference commands use nodes to define cross
+reference locations. This is evident in Info, in which a cross
+reference takes you to the specified node. \LaTeX{} also uses nodes to
+define cross reference locations, but the action is less obvious. When
+\LaTeX{} generates a \scap{dvi} file, it records nodes' page numbers and
+uses the page numbers in making references. Thus, if you are writing
+a manual that will only be printed, and will not be used on-line, you
+must nonetheless write \code{\back node} lines to name the places to which
+you make cross references.\refill
+
+\need{800}
+\node Cross Reference Commands, Cross Reference Parts, References, Cross References
+\section{Different Cross Reference Commands}
+\cindex{Different cross reference commands}
+
+There are several different cross reference commands:\refill
+
+\begin{description}
+\item[\back xref]
+Used to start a sentence in the printed manual saying
+\w{`See \dots{}'} or an entry in the Info file saying
+\samp{*Note \dots{}}.
+
+\item[\back nxref]
+Used within or, more often, at the end of a sentence; produces just
+the reference in the printed manual without a preceding `See'.
+(\samp{n} is for `node'.)\refill
+
+\item[\back pxref]
+Used within parentheses to make a reference that starts with a lower
+case `see' within the printed manual. (\samp{p} is for
+`parenthesis'.)\refill
+
+\item[\back inforef]
+Used to make a reference to an Info file.
+manual.\refill
+\end{description}
+
+\node Cross Reference Parts, xref, Cross Reference Commands, Cross References
+\section{Parts of a Cross Reference}
+\cindex{Cross reference parts}
+\cindex{Parts of a cross reference}
+
+A cross reference command requires only one argument, which is the
+name of the node to which it refers. But a cross reference command
+may contain up to four additional arguments. By using these
+arguments, you can provide a menu item name for Info, a descriptive
+phrase for the printed output, the name of a different Info file, and
+the name of a different printed manual.\refill
+
+Here is a simple cross reference example:\refill
+
+\begin{example}
+\back xref\{Node name\}.
+\end{example}
+
+\noindent
+which produces
+
+\begin{example}
+*Note Node name::.
+\end{example}
+
+\noindent
+and in \LaTeX, it turns into a sentence of the form
+
+\begin{quote}
+See section \var{nnn} [Node name], page \var{ppp}.
+\end{quote}
+
+Here, however, is an example of a full five-part cross reference:\refill
+
+\begin{example}
+\back xref\{Node name, Item name, Topic, info-file-name,
+A Printed Manual\}, for details.
+\end{example}
+
+\noindent
+which produces
+
+\begin{example}
+*Note Item name: (info-file-name)Node name, for details.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See section Topic of \i{A Printed Manual}, for details.
+\end{quote}
+
+The five arguments for a cross reference are:\refill
+
+\begin{enumerate}
+\item
+The node name (required). This is the node to which the
+cross reference takes you. In a printed document, the location of the
+node provides the page reference (for references within the same
+document).\refill
+
+\item
+The item name for the Info reference, if it is to be different from
+the node name. It is usually omitted.\refill
+
+\item
+A topic description or section name. Often, this is the title of the
+section. This is used as the name of the reference in the printed
+manual. If omitted, the node name is used.\refill
+
+\item
+The name of the Info file in which the reference is located, if it is
+different from the current file.\refill
+
+\item
+The name of another printed manual.\refill
+\end{enumerate}
+
+Cross references with one, two, three, four, and five arguments are
+described separately following the description of \code{\back xref}.\refill
+
+You can write cross reference commands within a paragraph, but note
+how Info and \LaTeX{} format the output of each of the various commands:
+write \code{\back xref} at the beginning of a sentence; write
+\code{\back pxref} only within parentheses, and so on.\refill
+
+\node xref, Reference Syntax, Cross Reference Parts, Cross References
+\section{\protect\code{\protect\back xref}}
+\findex{xref}
+\cindex{Cross references using \code{\back xref}}
+\cindex{References using \code{\back xref}}
+
+The \code{\back xref} command generates a cross reference for the
+beginning of a sentence. The Info formatting commands convert it into
+an Info cross reference, which the Info \samp{f} command can use to
+bring you directly to another node. The \LaTeX{} typesetting commands
+convert it into a page reference, or a reference to another book or
+manual.\refill
+
+\begin{menu}
+* Reference Syntax:: What a reference looks like and requires.
+* One Argument:: \code{\back xref} with one argument.
+* Two Arguments:: \code{\back xref} with two arguments.
+* Three Arguments:: \code{\back xref} with three arguments.
+* Four and Five Arguments:: \code{\back xref} with Four and Five Arguments
+\end{menu}
+
+\node Reference Syntax, One Argument, xref, xref
+\begin{ifinfo}
+\subsection*{What a Reference Looks Like and Requires}
+\end{ifinfo}
+
+Most often, an Info cross reference looks like this:\refill
+
+\begin{example}
+*Note \var{node-name}::.
+\end{example}
+
+\noindent
+or like this
+
+\begin{example}
+*Note \var{item-name}: \var{node-name}.
+\end{example}
+
+\noindent
+In \LaTeX, a cross reference looks like this:
+
+\begin{example}
+See section \var{section} [\var{node-name}], page \var{page}
+\end{example}
+
+\noindent
+or like this
+
+\begin{example}
+See section \var{section} [\var{topic}], page \var{page}
+\end{example}
+
+The \code{\back xref} command does not generate a period or comma to end
+the cross reference in either the Info file or the printed output.
+You must write that period or comma yourself; otherwise, Info will not
+recognize the end of the reference. (The \code{\back pxref} command works
+differently. \xref{pxref, , \code{\back pxref}}.)\refill
+
+\begin{quote}
+\emph{Please note:} A period or comma \strong{must} follow the closing
+brace of an \code{\back xref}. It is required to terminate the cross
+reference. This period or comma will appear in the output, both in
+the Info file and in the printed manual.\refill
+\end{quote}
+
+\code{\back xref} must refer to an Info node by name. Use \code{\back node}
+to define the node (\pxref{Writing a Node}).\refill
+
+\code{\back xref} is followed by several arguments inside braces, separated by
+commas. Whitespace before and after these commas is ignored.\refill
+
+A cross reference requires only the name of a node; but it may contain
+up to four additional arguments. Each of these variations produces a
+cross reference that looks somewhat different.\refill
+
+\node One Argument, Two Arguments, Reference Syntax, xref
+\subsection{\protect\code{\protect\back xref} with One Argument}
+
+The simplest form of \code{\back xref} takes one argument, the name of
+another node in the same Info file.\refill
+
+\noindent
+For example,
+
+\begin{example}
+\back xref\{Tropical Storms\}.
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+*Note Tropical Storms::.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See section \var{nnn} [Tropical Storms], page \var{ppp}.
+\end{quote}
+
+\noindent
+(Note that in the preceding example the closing brace is followed by a
+period.)\refill
+
+You can write a clause after the cross reference, like this:\refill
+
+\begin{example}
+\back xref\{Tropical Storms\}, for more info.
+\end{example}
+
+\noindent
+which produces:
+
+\begin{example}
+*Note Tropical Storms::, for more info.
+\end{example}
+
+\begin{quote}
+See section \var{nnn} [Tropical Storms], page \var{ppp}, for more info.
+\end{quote}
+
+\noindent
+(Note that in the preceding example the closing brace is followed by a
+comma, and then by the clause.)\refill
+
+\node Two Arguments, Three Arguments, One Argument, xref
+\subsection{\protect\code{\protect\back xref} with Two Arguments}
+
+With two arguments, the second one is used as the name of the Info
+cross reference, while the first argument is still the node that the
+cross reference points to:\refill
+
+\noindent
+The template is like this:
+
+\begin{example}
+\back xref \var{node-name}, \var{item-name}.
+\end{example}
+
+\noindent
+For example:
+
+\begin{example}
+\back xref\{Electrical Effects, Lightning\}.
+\end{example}
+
+\noindent
+which produces:
+\begin{example}
+*Note Lightning: Electrical Effects.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See section \var{nnn} [Electrical Effects], page \var{ppp}.
+\end{quote}
+
+\noindent
+(Note that in the preceding example the closing brace is followed by a
+period; and that the node name is printed, not the item name.)\refill
+
+You can write a clause after the cross reference, like this:\refill
+
+\begin{example}
+\back xref\{Electrical Effects, Lightning\}, for more info.
+\end{example}
+
+\noindent
+produces
+\begin{example}
+*Note Lightning: Electrical Effects, for more info.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See section \var{nnn} [Electrical Effects], page \var{ppp}, for more info.
+\end{quote}
+
+\noindent
+(Note that in the preceding example the closing brace is followed by a
+comma, and then by the clause.)\refill
+
+\node Three Arguments, Four and Five Arguments, Two Arguments, xref
+\subsection{\protect\code{\protect\back xref} with Three Arguments}
+
+A third argument replaces the node name in the \LaTeX{} output. The
+third argument should state the topic discussed by the section being
+referenced, or be the name of the section. Often, you will want to
+use initial upper case letters so it will be easier to read when the
+reference is printed. Use a third argument when the node name is
+unsuitable because of syntax or meaning.\refill
+
+Remember that a comma or period must follow the closing brace of an
+\code{\back xref} command to terminate the cross reference. In the
+following examples, a clause follows a terminating comma.\refill
+
+
+\noindent
+The template is like this:
+
+\begin{example}
+\back xref \var{node-name}, \var{item-name}, \var{topic}.
+\end{example}
+
+\noindent
+For example,
+
+\begin{example}
+\back xref\{Electrical Effects, Lightning, Thunder and Lightning\}, for details.
+\end{example}
+
+\noindent
+which produces
+
+\begin{example}
+*Note Lightning: Electrical Effects, for details.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See section \var{nnn} [Thunder and Lightning], page \var{ppp}, for details.
+\end{quote}
+
+If a third argument is given and the second one is empty, then the
+third argument serves both. (Note how two commas, side by side, mark
+the empty second argument.)\refill
+
+\begin{example}
+\back xref\{Electrical Effects, , Thunder and Lightning\}, for details.
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+*Note Thunder and Lightning: Electrical Effects, for details.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See section \var{nnn} [Thunder and Lightning], page \var{ppp}, for details.
+\end{quote}
+
+\node Four and Five Arguments, Top Node Naming, Three Arguments, xref
+\subsection{\protect\code{\protect\back xref} with Four and Five Arguments}
+
+In a cross reference, a fourth argument specifies the name of another
+Info file, different from the file in which the reference appears, and
+a fifth argument specifies its title as a printed manual.\refill
+
+Remember that a comma or period must follow the closing brace of an
+\code{\back xref} command to terminate the cross reference. In the
+following examples, a clause follows a terminating comma.\refill
+
+\noindent
+The template is:
+
+\begin{example}
+\back xref\{\var{node-name}, \var{item-name}, \var{topic}, \var{info-file-name}, \var{printed-title}\}.
+\end{example}
+
+\noindent
+For example,
+
+\begin{example}
+\back xref\{Electrical Effects, Lightning, Thunder and Lightning,
+weather, An Introduction to Meteorology\}, for details.
+\end{example}
+
+\noindent
+which produces
+
+\begin{example}
+*Note Lightning: (weather)Electrical Effects, for details.
+\end{example}
+
+\noindent
+The name of the Info file is enclosed in parentheses and precedes
+the name of the node.
+
+\noindent
+In a printed manual, the reference looks like this:\refill
+
+\begin{quote}
+See section Thunder and Lightning of \i{An Introduction to
+Meteorology}, for details.
+\end{quote}
+
+\noindent
+The name of the printed manual is typeset in italics; and the
+reference lacks a page number since \LaTeX{} cannot know to which page a
+refer refers when the reference is to another manual.\refill
+
+Often, you will leave out the second argument when you use the long
+version of \code{\back xref}. In this case, the third argument, the topic
+description, will be used as the item name in Info.\refill
+
+\noindent
+The template looks like this:
+
+\begin{example}
+\back xref\{\var{node-name}, , \var{topic}, \var{info-file-name}, \var{printed-title}\}, for details.
+\end{example}
+
+\noindent
+which produces
+
+\begin{example}
+*Note \var{topic}: (\var{info-file-name})\var{node-name}, for details.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See section \var{topic} of \var{printed-manual-title}, for details.
+\end{quote}
+
+\noindent
+For example:
+
+\begin{example}
+\back xref\{Electrical Effects, , Thunder and Lightning,
+weather, An Introduction to Meteorology\}, for details.
+\end{example}
+
+\noindent
+which produces
+
+\begin{example}
+*Note Thunder and Lightning: (weather)Electrical Effects, for details.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See section Thunder and Lightning of \i{An Introduction to
+Meteorology}, for details.
+\end{quote}
+
+On rare occasions, you may want to refer to another Info file that is
+is within a single printed manual---when multiple \LaTeX info files are
+incorporated into the same \LaTeX{} run but make separate Info files.
+In this case, you need to specify only the fourth argument, and not
+the fifth.\refill
+
+\node Top Node Naming, ref, Four and Five Arguments, Cross References
+\section{Naming a `Top' Node}
+\cindex{Naming a `Top' Node in references}
+\cindex{Top node naming for references}
+
+In a cross reference, you must always name a node. This means that in
+order to refer to a whole manual, you must identify the `Top' node by
+writing it as the first argument to the \code{\back xref} command. (This
+is different from the way you write a menu entry. \xref{Other Info
+Files, , Referring to Other Info Files}.) At the same time, to
+provide a meaningful section topic or title in the printed cross
+reference (instead of the word `Top'), you must write an appropriate
+entry for the third argument to the \code{\back xref} command.
+\refill
+
+Thus, to make a cross reference to \i{The GNU Make Manual},
+write:\refill
+
+\begin{example}
+\back xref\{Top, , Overview, make, The GNU Make Manual\}.
+\end{example}
+
+\noindent
+which produces
+
+\begin{example}
+*Note Overview: (make)Top.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See section Overview of \i{The GNU Make Manual}.
+\end{quote}
+
+\noindent
+In this example, \samp{Top} is the name of the node, and \samp{Overview} is the
+name of the first section of the manual.
+
+\node ref, pxref, Top Node Naming, Cross References
+\section{\protect\code{\protect\back nxref}}
+\cindex{Cross references using \code{\back nxref}}
+\cindex{References using \code{\back nxref}}
+\findex{ref}
+
+\code{\back nxref} is nearly the same as \code{\back xref} except that it does
+not generate a `See' in the printed output, just the reference itself.
+This makes it useful as the last part of a sentence.\refill
+
+\noindent
+For example:
+
+\begin{example}
+\begin{same}
+For more information, see \back nxref\{Orogenesis, ,
+Mountaing Building\}.
+\end{same}
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+\begin{same}
+For more information, see *Note Mountain
+Building: Orogenesis.
+\end{same}
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+For more information, see section \var{nnn} [Mountain Building].
+page \var{ppp}.
+\end{quote}
+
+The \code{\back nxref} command sometimes leads writers to express themselves
+in a manner that is suitable for a printed manual but looks awkward
+in the Info format. Bear in mind that your audience will be using
+both the printed and the Info format.\refill
+
+\noindent
+For example,
+
+\begin{example}
+Sea surges are described in \back nxref\{Hurricanes\}.
+\end{example}
+
+\noindent
+produces
+
+\begin{quote}
+Sea surges are described in section \var{nnn} [Hurricanes].
+\end{quote}
+
+\noindent
+in a printed document, but
+
+\begin{example}
+Sea surges are described in *Note Hurricanes::.
+\end{example}
+
+\noindent
+in Info.
+
+\begin{quote}
+\strong{Caution:} You \emph{must} write a period or comma immediately
+after an \code{\back nxref} command with two or more arguments. Otherwise,
+Info will not find the end of the cross reference entry and
+attempts to follow the cross reference will fail. As a general rule,
+you should write a period or comma after every \code{\back nxref} command.
+This looks best in both the printed and the Info output.\refill
+\end{quote}
+
+\node pxref, inforef, ref, Cross References
+\section{\protect\code{\protect\back pxref}}
+\cindex{Cross references using \code{\back pxref}}
+\cindex{References using \code{\back pxref}}
+\findex{pxref}
+
+The parenthetical reference command, \code{\back pxref}, is nearly the
+same as \code{\back xref}, but you use it \emph{only} inside parentheses
+and you do \emph{not} type a comma or period after the command's
+closing brace. The command differs from \code{\back xref} in two
+ways:\refill
+
+\begin{enumerate}
+\item
+\LaTeX{} typesets the reference for the printed manual with a lower case
+`see' rather than an upper case `See'.\refill
+
+\item
+The Info formatting commands automatically end the reference with a
+closing colon or period.\refill
+\end{enumerate}
+
+Because one type of formatting automatically inserts closing
+punctuation and the other does not, you should use \code{\back pxref}
+\emph{only} inside parentheses as part of another sentence. Also, you
+yourself should not insert punctuation after the reference, as you do
+with \code{\back xref}.\refill
+
+\code{\back pxref} is designed so that the output looks right and works
+right between parentheses both in printed output and in an Info file.
+In a printed manual, a closing comma or period should not follow a
+cross reference within parentheses; such punctuation is wrong. But in
+an Info file, suitable closing punctuation must follow the cross
+reference so Info can recognize its end. \code{\back pxref} spares you
+the need to use complicated methods to put a terminator into one form
+of the output and not the other.\refill
+
+Don't try to use \code{\back pxref} as a clause in a sentence. It will
+look bad in either the Info file, the printed output, or both. Use it
+only as a parenthetical reference.\refill
+
+With one argument, a parenthetical cross reference looks like
+this:\refill
+
+\begin{example}
+\dots{} large storms (\back pxref\{Hurricanes\}) may cause flooding
+\dots{}
+\end{example}
+
+\noindent
+which produces
+
+\begin{example}
+\dots{} large storms (*Note Hurricanes::) may cause flooding \dots{}
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+\dots{} large storms (see section \var{nnn} [Hurricanes], page
+\var{ppp}) may cause flooding \dots{}
+\end{quote}
+
+With two arguments, a parenthetical cross reference has this
+template:\refill
+
+\begin{example}
+\dots{} (\back pxref\{\var{node-name}, \var{item-name}\}) \dots{}
+\end{example}
+
+\noindent
+which produces
+
+\begin{example}
+\dots{} (*Note \var{item-name}: \var{node-name}.) \dots{}
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+\dots{} (see section \var{nnn} [\var{node-name}], page \var{ppp}) \dots{}
+\end{quote}
+
+\code{\back pxref} can be used with up to five arguments just like
+\code{\back xref} (\pxref{xref, , \code{\back xref}}).\refill
+
+\node inforef, Creating Indices, pxref, Cross References
+\section{\protect\code{\protect\back inforef}}
+\cindex{Cross references using \code{\back inforef}}
+\cindex{References using \code{\back inforef}}
+\findex{inforef}
+
+\code{\back inforef} is used for cross references to Info files for which
+there are no printed manuals. Even in a printed manual,
+\code{\back inforef} generates a reference directing the user to look in
+an Info file.\refill
+
+The command takes either two or three arguments, in the following
+order:\refill
+
+\begin{enumerate}
+\item
+The node name.
+
+\item
+The item name (optional).
+
+\item
+The Info file name.
+\end{enumerate}
+
+\noindent
+Separate the arguments with commas, as with \code{\back xref}. Also, you
+must terminate the reference with a comma or period after the
+\samp{\}}, as you do with \code{\back xref}.\refill
+
+\noindent
+The template is:
+
+\begin{example}
+\back inforef\{\var{node-name}, \var{item-name}, \var{info-file-name}\},
+\end{example}
+
+Thus,
+
+\begin{example}
+\back inforef\{Expert, Advanced Info commands, info\},
+for more information.
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+*Note Advanced Info commands: (info)Expert,
+for more information.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See Info file \file{info}, node \samp{Expert}, for more information.
+\end{quote}
+
+\noindent
+Similarly,
+
+\begin{example}
+\back inforef\{Expert, , info\}, for more information.
+\end{example}
+
+\noindent
+produces
+
+\begin{example}
+*Note (info)Expert::, for more information.
+\end{example}
+
+\noindent
+and
+
+\begin{quote}
+See Info file \file{info}, node \samp{Expert}, for more information.
+\end{quote}
+
+The converse of \code{\back inforef} is \code{\back cite}, which is used
+to refer to printed works for which no Info form exists.
+\xref{Citations}.\refill
+
+\node Creating Indices, Index Entries, inforef, Top
+\chapter{Creating Indices}
+\cindex{Indices}
+\cindex{Creating indices}
+
+Using \LaTeX info, you can generate indices without having to sort and
+collate entries manually. In an index, the entries are listed in
+alphabetical order, together with information on how to find the
+discussion of each entry. In a printed manual, this information
+consists of page numbers. In an Info file, this information is a menu
+item leading to the first node referenced.\refill
+
+\LaTeX info provides several predefined kinds of index: an index
+for functions, an index for variables, an index for concepts, and so
+on. You can combine indices or use them for other than their
+canonical purpose. If you wish, you can define your own indices.\refill
+
+\begin{menu}
+* Index Entries:: Choose different words for index entries.
+* Indexing Commands:: How to make an index entry.
+* Combining Indices:: How to combine indices.
+\end{menu}
+
+\node Index Entries, Indexing Commands, Creating Indices, Creating Indices
+\section{Making Index Entries}
+\cindex{Index entries, making}
+\cindex{Entries, making index}
+
+When you are making index entries, it is good practice to think of the
+different ways people may look for something. Different people
+\emph{do not} think of the same words when they look something up. A
+helpful index will have items indexed under all the different words
+that people may use. For example, someone might think it obvious that
+the two-letter names for indices should be listed under ``Indices,
+two-letter names'', since the word ``Index'' is the general concept.
+But another reader may remember the specific concept of two-letter
+names and search for the entry listed as ``Two letter names for
+indices''. A good index will have both entries and will help both
+kinds of user.\refill
+
+Like typesetting, the construction of an index is a highly skilled,
+professional art, the subtleties of which are not appreciated until you
+have to do it yourself.\refill
+
+\xref{Printing an Index and Generating Menus}, for information about the
+commands to put at the beginning and end of the file, for printing an
+index, or creating an index menu in an Info file.\refill
+
+\clearpage
+\LaTeX info provides six predefined indices:\refill
+
+\begin{itemize}
+\item
+A \dfn{concept index} listing concepts that are discussed.\refill
+
+\item
+A \dfn{function index} listing functions (such as, entry points of
+libraries).\refill
+
+\item
+A \dfn{variables index} listing variables (such as, global variables
+of libraries).\refill
+
+\item
+A \dfn{keystroke index} listing keyboard commands.\refill
+
+\item
+A \dfn{program index} listing names of programs.\refill
+
+\item
+A \dfn{data type index} listing data types (such as, structures defined in
+header files).\refill
+\end{itemize}
+
+\noindent
+Not every manual needs all of these. This manual has two indices: a
+concept index and an \back -command index (that is actually the function
+index but is called a command index in the chapter heading). Two or
+more indices can be combined into one using the \code{\back synindex} or
+\code{\back syncodeindex} commands. \xref{Combining Indices}.\refill
+
+\node Indexing Commands, Declaring indices, Index Entries, Creating Indices
+\section{Defining the Entries of an Index}
+\cindex{Defining indexing entries}
+\cindex{Index entries}
+\cindex{Entries for an index}
+\cindex{Specifying index entries}
+\cindex{Creating index entries}
+
+The data to make an index comes from many individual indexing commands
+scattered throughout the \LaTeX info source file. Each command says to
+add one entry to a particular index; after processing, it will give the
+current page number or node name as the reference.\refill An index entry
+consists of an indexing command at the beginning of a line followed by
+the entry in braces. For example, this section begins with the
+following five entries for the concept index:\refill
+
+\begin{example}
+\back cindex\{Defining indexing entries\}
+\back cindex\{Index entries\}
+\back cindex\{Entries for an index\}
+\back cindex\{Specifying index entries\}
+\back cindex\{Creating index entries\}
+\end{example}
+
+Each declared index has its own indexing command---\code{\back cindex}
+for the concept index, \code{\back findex} for the function index, and
+so on. An index must be declared at the beginning of the document with
+the \code{\back newindex} command, before the first use of the
+corresponding index command.
+\xref{Declaring indices} for how to use this command.\refill
+
+The usual convention is to capitalize the first word of each index
+entry, unless that word is the name of a function, variable, or other
+such entitity that should not be capitalized. Thus, if you are
+documenting Emacs Lisp, your concept index entries are usually
+capitalized, but not your function index entries. However, if your
+concept index entries are consistently short (one or two words each) it
+may look better for each regular entry to start with a lower case
+letter. Which ever convention you adapt, please be consistent!
+\cindex{Capitalizing index entries}
+\cindex{Index entry capitalization }
+
+By default, entries for a concept index are printed in a small roman
+font and entries for the other indices are printed in a small
+\code{\back code} font. You may change the way part of an entry is
+printed with the usual \LaTeX info commands, such as \code{\back file} for
+file names and \code{\back emph} for emphasis (\pxref{Marking
+Text}).\refill
+\cindex{Index font types}
+
+The six indexing commands for predefined indices are:
+
+\begin{description}
+\item[\back cindex\{\var{concept}]
+\findex{cindex}
+Make an entry in the concept index for \var{concept}.\refill
+
+\item[\back findex\{\var{function}]
+\findex{findex}
+Make an entry in the function index for \var{function}.\refill
+
+\item[\back vindex\{\var{variable}]
+\findex{vindex}
+Make an entry in the variable index for \var{variable}.\refill
+
+\item[\back kindex\{\var{key}]
+\findex{kindex}
+Make an entry in the key index for \var{key}.\refill
+
+\item[\back pindex\{\var{program}]
+\findex{pindex}
+Make an entry in the program index for \var{program}.\refill
+
+\item[\back tindex\{\var{data\} type}]
+\findex{tindex}
+Make an entry in the data type index for \var{data type}.\refill
+\end{description}
+
+\begin{quote}
+\strong{Caution:} Do not use a colon in an index entry. In Info, a
+colon separates the menu item name from the node name. An extra colon
+confuses Info. \xref{Menu Item, , Writing a Menu Item}, for more
+information about the structure of a menu entry.\refill
+\end{quote}
+
+If the same name is indexed on several pages, all the pages are listed
+in the printed manual's index. However, \strong{only} the
+\strong{first} node referenced will appear in the index of an Info
+file. This means that it is best to write indices in which each entry
+will refer to only one place in the \LaTeX info file.\refill
+
+\begin{menu}
+* Declaring indices:: Declaring Indices
+* Special Index Entries::
+\end{menu}
+
+\node Declaring indices, Special Index Entries, Indexing Commands, Indexing Commands
+\subsection{Declaring Indices}
+\cindex{Indices, declaring}
+\cindex{Declaring indices}
+
+The \code{\back newindex} command takes a two-letter index name, and
+makes the index commands for that index available for use. The
+\code{\back printindex} command takes a two-letter index name, reads the
+corresponding sorted index file and formats it appropriately into an
+index. Normally, six indices are provided for, and are referred to by their
+two-letter abbreviations:\refill
+
+\begin{description}
+\item[cp]
+A \dfn{concept index} listing concepts that are discussed.
+
+\item[pg]
+A \dfn{program index} listing names of programs and leading to the places
+where those programs are documented.
+
+\item[fn]
+A \dfn{function index} listing functions (such as, entry points of
+libraries).
+
+\item[vr]
+A \dfn{variables index} listing variables (such as, external variables of
+libraries).
+
+\item[tp]
+A \dfn{data type index} listing data types (such as, structures defined in
+header files).
+
+\item[ky]
+A \dfn{keystroke index} listing keyboard commands.
+\end{description}
+
+\noindent
+Not every manual needs all of these. This manual has two indices: a
+concept index and a command index (that uses the function index but is
+called a command index in the chapter heading). Two or more indices can be
+combined into one using the \code{\back synindex} command. \xref{Combining
+Indices}.
+
+You are not actually required to use the predefined indices for their
+canonical purposes. For example, suppose you wish to index some C
+preprocessor macros. You could put them in the function index along
+with actual functions, just by writing \code{\back findex} commands for
+them; then, when you print the ``function index'' as an unnumbered
+chapter, you could give it the title `Function and Macro Index' and
+all will be consistent for the reader. Or you could put the macros in
+with the data types by writing \code{\back tindex} commands for them, and
+give that index a suitable title so the reader will understand.
+(\xref{Printing an Index and Generating Menus}.)\refill
+
+\begin{menu}
+* Special Index Entries::
+\end{menu}
+
+\node Special Index Entries, Combining Indices, Declaring indices, Indexing Commands
+\subsection{Special Index Entries}
+\findex{cpsubindex}
+\findex{cpindexbold}
+
+The concept index has two special index entries to help you make more elaborate
+concept indices.
+
+\code{\back cpsubindex\{topic\}\{subtopic\}} defines an entry in the
+concept index, which has a subtopic. In the Info manual, this line and
+anything on it is deleted.
+
+\code{\back cpindexbold\{topic\}} defines an entry in the concept index,
+which is set in bold type. In the Info manual, this line and anything
+on it is deleted.
+
+\findex{pgindexbold}
+\findex{vrindexbold}
+\findex{tpindexbold}
+\findex{kyindexbold}
+\findex{fnindexbold}
+All other indices have just one special index, the \code{\back ??indexbold}
+command, which sets its entry in bold type.
+
+\node Combining Indices, Creating and Installing an Info File, Special Index Entries, Creating Indices
+\section{Combining Indices}
+\cindex{Combining indices}
+\cindex{Indices, combining them}
+
+Sometimes you will want to combine two disparate indices such as functions
+and variables, perhaps because you have few enough of one of them that
+a separate index for them would look silly.\refill
+
+You could put functions into the concept index by writing \code{\back
+cindex} commands for them instead of \code{\back findex} commands, and
+produce a consistent manual by printing the concept index with the title
+`Function and Concept Index' and not printing the `Function Index' at
+all; but this is not a robust procedure. It works only if your document
+is never included in part of or together with another document that is
+designed to have a separate function index; if your document were to be
+included with such a document, the functions from your document and
+those from the other would not end up together. Also, to make your
+function names appear in the right font in the concept index, you would
+have to enclose every one of them between \code{\back code} and
+\code{\back end\{code\}}.\refill
+
+What you should do instead when you want functions and concepts in one
+index is to index the functions with \code{\back findex} as they should
+be, but use the \code{\back syncodeindex} command to redirect these
+\code{\back findex} commands to the concept index.\refill
+\findex{syncodeindex}
+
+The \code{\back syncodeindex} command takes two arguments: the name of an
+index to redirect, and the name of an index to redirect it to:\refill
+
+\begin{example}
+\back syncodeindex\{\var{from}\}\{\var{to}\}
+\end{example}
+
+For this purpose, the indices are given two-letter names:\refill
+\cindex{Two letter names for indices}
+\cindex{Indices, two letter names}
+\cindex{Names for indices}
+
+\begin{description}
+\item[cp]
+the concept index
+\item[vr]
+the variable index
+\item[fn]
+the function index
+\item[ky]
+the key index
+\item[pg]
+the program index
+\item[tp]
+the data type index
+\end{description}
+
+Write an \code{\back syncodeindex} command before or shortly after the
+end of header line at the beginning of a \LaTeX info file. For example,
+to merge a function index with a concept index, write the
+following:\refill
+
+\begin{example}
+\back syncodeindex\{fn\}\{cp\}
+\end{example}
+
+\noindent
+This will cause all entries designated for the function index to go to
+the concept index instead.\refill
+
+The \code{\back syncodeindex} command puts all the entries from the
+redirected index into the \code{\back code} font, overriding whatever
+default font is used by the index to which the entries are redirected.
+This way, if you redirect function names from a function index into a
+concept index, all the function names are printed the \code{\back code}
+font as you would expect.\refill
+\cindex{Fonts for indices}
+
+The \code{\back synindex} command is nearly the same as the \code{\back
+syncodeindex} command, except that it does not put the redirected index
+into the \code{\back code} font, but puts it in the roman font.\refill
+\findex{synindex}
+
+\xref{Printing an Index and Generating Menus}, for information about
+printing an index at the end of a book or creating an index menu in an
+Info file.\refill
+
+\node Creating and Installing an Info File, Creating an Info file, Combining Indices, Top
+\chapter{Creating and Installing an Info File}
+
+\begin{menu}
+* Creating an Info file::
+* Installing an Info File::
+\end{menu}
+
+\node Creating an Info file, latexinfo-format commands, Creating and Installing an Info File, Creating and Installing an Info File
+\section{Creating an Info file}
+\cindex{Creating an Info file}
+\cindex{Info, creating an on-line file}
+\cindex{Formatting a file for Info}
+\cindex{Indirect subfiles}
+
+
+In GNU Emacs, the way to create an Info file is to visit the file and
+invoke
+
+\begin{example}
+\kbd{M-x latexinfo-format-buffer}
+\end{example}
+
+\noindent
+A new buffer is created and the Info file text is generated there.
+\ctrl{x} \ctrl{s} (\code{save-buffer}) will save it under the name
+specified in the \code{\back setfilename} command.
+\code{latexinfo-format-region} and \code{latexinfo-format-buffer} are
+the two Emacs commands that you can also use for formatting. A \LaTeX
+info file must possess an \code{\back setfilename} line near its
+beginning, otherwise the formatting commands will fail.\refill
+
+For information on installing the Info file in the Info system, see
+\nxref{Installing an Info File}.\refill
+
+\begin{menu}
+* latexinfo-format commands:: The \protect\code{latexinfo-format\protect\dots{}} Commands
+* Tag and Split Files:: Tag Files and Split Files
+\end{menu}
+
+\node latexinfo-format commands, Tag and Split Files, Creating an Info file, Creating an Info file
+\subsection{The latexinfo-format Commands}
+\findex{latexinfo-format-region}
+\findex{latexinfo-format-buffer}
+
+In GNU Emacs in \LaTeX info mode, you can format part or all of a \LaTeX info
+file with the \code{latexinfo-format-region} command. This formats the
+current region and displays the formatted text in a temporary buffer
+called \samp{*Info Region*}.\refill
+
+Similarly, you can format the whole file with the
+\code{latexinfo-format-buffer} command. This command creates a new
+buffer and generates the Info file in it. Typing \kbd{C-x C-s} will
+save the Info file under the name specified by the \code{\back
+setfilename} line which must be near the beginning of the
+\LaTeX info file. \xref{Info Formatting}, for how to use
+the commands:\refill
+
+\begin{description}
+\item[C-c C-e C-r (\code{latexinfo-format-region})]
+Format the current region for Info.
+\findex{latexinfo-format-region}
+
+\item[C-c C-e C-b (\code{latexinfo-format-buffer})]
+Format the current buffer for Info.
+\findex{latexinfo-format-buffer}
+\end{description}
+
+The \code{latexinfo-format-region} and \code{latexinfo-format-buffer}
+commands provide you with some error checking; and other functions
+provide you with further help in finding formatting errors. These
+procedures are described elsewhere, \pxref{Catching Formatting
+Mistakes}.\refill
+
+\node Tag and Split Files, Installing an Info File, latexinfo-format commands, Creating an Info file
+\subsection{Tag Files and Split Files}
+
+If a \LaTeX info file has more than 30,000 bytes,
+\code{latexinfo-format-buffer} automatically creates a \dfn{tag table}
+for its Info file. With a tag table, Info can jump to new nodes more
+quickly than it can otherwise.\refill
+
+In addition, if the \LaTeX info file contains more than about 70,000
+bytes, \code{latexinfo-format-buffer} splits the large Info file into
+shorter \dfn{indirect} subfiles of about 50,000 bytes each. Big files
+are split into smaller files so that Emacs does not have to make a large
+buffer to hold the whole of a large Info file; instead, Emacs allocates
+just enough memory for the small, split off file that is needed at the
+time. This way, Emacs avoids wasting memory when you run Info. (Before
+splitting was implemented, Info files were always kept short and
+\dfn{include} files were designed as a way to create a single, large
+printed manual out of the smaller Info files. \xref{Include Files}, for
+more information. Include files are still used for very large
+documents, such as \i{The Emacs Lisp Reference Manual}, in which each
+chapter is a separate file.)\refill
+
+When a file is split, Info itself makes use of a shortened version of
+the original file that contains just the tag table and references to
+the files that were split off. The split off files are called
+\dfn{indirect} files.\refill
+
+The split off files have names that are created by appending \samp{-1},
+\samp{-2}, \samp{-3} and so on to the file names specified by the
+\code{\back setfilename} command. The shortened version of the original file
+continues to have the name specified by \code{\back setfilename}.\refill
+
+At one stage in writing a document, for example, the Info file called
+\file{test-latexinfo} might have looked like this:\refill
+
+\begin{example}
+\begin{same}
+Info file: test-latexinfo, -*-Text-*-
+produced by latexinfo-format-buffer
+from file: new-manual.tex
+
+^_
+Indirect:
+test-latexinfo-1: 102
+test-latexinfo-2: 50422
+test-latexinfo-3: 101300
+^_^L
+Tag table:
+(Indirect)
+Node: overview^?104
+Node: info file^?1271
+Node: printed manual^?4853
+Node: conventions^?6855
+\dots{}
+\end{same}
+\end{example}
+
+\noindent
+Each of the split off, indirect files, \file{test-latexinfo-1},
+\file{test-latexinfo-2}, and \file{test-latexinfo-3}, is listed in this
+file after the line that says \samp{Indirect:}. The tag table is listed
+after the line that says \samp{Tag table:}. \refill
+
+If you are using \code{latexinfo-format-buffer} to create Info files,
+you may want to run the \code{Info-validate} command. However, you
+cannot run the \kbd{M-x Info-validate} node-checking command on indirect
+files. For information on how to prevent files from being split and how
+to validate the structure of the nodes, \pxref{Using Info-validate}.\refill
+
+\begin{menu}
+* Installing an Info file::
+* Extending LaTeXinfo::
+\end{menu}
+
+
+\node Installing an Info File, Directory file, Tag and Split Files, Creating and Installing an Info File
+\section{Installing an Info File}
+\cindex{Installing an Info file}
+\cindex{Info file installation}
+\cindex{\file{dir} directory for Info installation}
+
+Info files are usually kept in the \file{\dots{}/emacs/info}
+directory. This directory is the values of the Emacs variable
+\code{Info-directory}.
+
+\begin{menu}
+* Directory file:: The top level menu for all Info files.
+* New Info File:: Listing a new info file.
+* Other Info Directories:: How to specify Info files that are
+ located in other directories.
+\end{menu}
+
+\node Directory file, New Info File, Installing an Info File, Installing an Info File
+\subsection{The \protect\file{dir} File}
+
+For Info to work, the \file{info} directory must contain a file that
+serves as a top level directory for the Info system. By convention,
+this file is called \file{dir}. The \file{dir} file is itself an Info
+file. It contains the top level menu for all the Info files in the
+system. The menu looks like this:\refill
+
+\begin{example}
+* Menu:
+
+* Info: (info). Documentation browsing system.
+* Emacs: (emacs). The extensible, self-documenting
+ text editor.
+* LaTeXinfo: (latexinfo). With one source file, make
+ either a printed manual using
+ LaTeX or an Info file.
+\dots{}
+\end{example}
+
+\noindent
+Each of these menu entries points to the `Top' node of the Info file
+that is named in parentheses. \footnote{The menu entry does not have to
+specify the `Top' node, since Info goes to the `Top' node if no node
+name is mentioned. \xref{Other Info Files, , Nodes in Other Info
+Files}.} Thus, the \samp{Info} entry points to the `Top' node of the
+\file{info} file and the \samp{Emacs} entry points to the `Top' node
+of the \file{emacs} file.\refill
+
+In each of the Info files, the `Up' pointer of the `Top' node refers
+back to the \code{dir} file. For example, the node line for the `Top'
+node of the Emacs manual looks like this:\refill
+
+\begin{example}
+File: emacs Node: Top, Up: (DIR), Next: Distrib
+\end{example}
+
+\noindent
+(Note that in this case, the file name is written in upper case
+letters---it can be written in either upper or lower case. Info has a
+feature that it will change the case of the file name to lower case if
+it cannot find the name as written.)\refill
+
+\c !!! Can any file name be written in upper or lower case,
+\c !!! or is dir a special case?
+
+\node New Info File, Other Info Directories, Directory file, Installing an Info File
+\subsection{Listing a New Info File}
+\cindex{Adding a new info file}
+\cindex{Listing a new info file}
+\cindex{New info file, listing it}
+\cindex{Info file, listing new one}
+\cindex{\file{dir} file listing}
+
+To add a new Info file to your system, add the name to the menu in the
+\file{dir} file by editing the \file{dir} file by hand. Also, put the
+new Info file in the \file{\dots{}/emacs/info} directory. For
+example, if you were adding documentation for GDB, you would make the
+following new entry:\refill
+
+\begin{example}
+* GDB: (gdb). The source-level C debugger.
+\end{example}
+
+\noindent
+The first item is the menu item name; it is followed by a colon. The
+second item is the name of the Info file, in parentheses; it is followed by
+a period. The third part of the entry is the description of the item.\refill
+
+Conventionally, the name of an Info file has a \file{.info} extension.
+Thus, you might list the name of the file like this:
+
+\begin{example}
+* GDB: (gdb.info). The source-level C debugger.
+\end{example}
+
+\noindent
+However, Info will look for a file with a \file{.info} extension if it
+does not find the file under the name given in the menu. This means
+that you can write to \file{gdb.info} in a menu as \file{gdb}, as
+shown in the first example. This looks better.
+
+\node Other Info Directories, LaTeXinfo Mode, New Info File, Installing an Info File
+\subsection{Info Files in Other Directories}
+\cindex{Installing Info in another directory}
+\cindex{Info installed in another directory}
+\cindex{Another Info directory}
+\cindex{\b{.login} initialization file}
+
+If an Info file is not in the \file{info} directory, there are two
+ways to specify its location:\refill
+
+\begin{itemize}
+\item
+Write the menu's second part as a pathname, or;\refill
+
+\item
+Specify an environment variable in your \file{.profile} or
+\file{.login} initialization file.\refill
+\end{itemize}
+
+For example, to reach a test file in the \file{~bob/manuals}
+directory, you could add an entry like this to the menu in the
+\file{dir} file:\refill
+
+\begin{example}
+* Test: (~bob/manuals/info-test). Bob's own test file.
+\end{example}
+
+\noindent
+In this case, the absolute file name of the \file{info-test} file is
+written as the second item of the menu entry.\refill
+
+\vindex{INFOPATH}
+Alternatively, you may set the \code{INFOPATH} environment
+variable in your \file{.login} or \file{.profile} file. The
+\code{INFOPATH} environment variable will tell Info where to
+look.\refill
+
+If you use \code{sh} or \code{bash} for your shell command
+interpreter, you must set the \code{INFOPATH} environment
+variable in the \file{.profile} initialization file; but if you use
+\code{csh} or \code{tcsh}, you must set the variable in the \file{.login}
+initialization file. The two files require slightly different command
+formats.\refill
+
+\begin{itemize}
+\item
+In a \file{.login} file, you could set the \code{INFOPATH}
+variable as follows:\refill
+
+\begin{smallexample}
+setenv INFOPATH .:~bob/manuals:/usr/local/emacs/info
+\end{smallexample}
+
+\item
+In a \file{.profile} file, you would achieve the same effect by
+writing:\refill
+
+\begin{smallexample}
+INFOPATH=.:~bob/manuals:/usr/local/emacs/info
+export INFOPATH
+\end{smallexample}
+\end{itemize}
+
+\noindent
+Either form would cause Info to look first in the current directory,
+indicated by the \samp{.}, then in the \file{~bob/manuals} directory,
+and finally in the \file{/usr/local/emacs/info} directory (which is
+the usual location for the standard Info directory).\refill
+
+\part{Emacs}
+
+\node LaTeXinfo Mode, Emacs Editing, Other Info Directories, Top
+\chapter{Using LaTeXinfo Mode}
+\cindex{LaTeXinfo mode}
+\cindex{Mode, using Latexinfo}
+\cindex{GNU Emacs}
+\cindex{Emacs}
+
+In GNU Emacs, \LaTeX info mode provides commands and features especially
+designed for working with \LaTeX info files. The special \LaTeX info
+commands are in addition to the usual editing commands, which are
+generally the same as the commands of Text mode. There are special
+commands to:\refill
+
+\begin{itemize}
+\item
+Insert commonly used strings of text.\refill
+
+\item
+Automatically create node lines.
+
+\item
+Show the structure of a \LaTeX info source file.\refill
+
+\item
+Automatically create or update the `Next',\*
+`Previous', and `Up' pointers of a node.
+
+\item
+Automatically create or update menus.\refill
+
+\item
+Automatically create a master menu.\refill
+
+\item
+Format a part or all of a file for Info.\refill
+
+\item
+Typeset and print part or all of a file.\refill
+\end{itemize}
+
+\begin{menu}
+* Emacs Editing:: \LaTeX info mode adds to the usual
+ editing commands.
+* Inserting:: How to insert frequently used commands.
+* Showing the Structure:: How to show the structure of a file.
+* Updating Nodes and Menus:: How to update or create new nodes and menus.
+* Info Formatting:: Formatting for Info.
+* Printing:: How to format and print part or all of a file.
+* LaTeXinfo Mode Summary:: Summary of all the \LaTeX info mode commands.
+\end{menu}
+
+\node Emacs Editing, Inserting, LaTeXinfo Mode, LaTeXinfo Mode
+\begin{ifinfo}
+\section*{The Usual Editing Commands }
+\end{ifinfo}
+
+
+\beforenoterule
+\begin{implementation}
+In \LaTeX info mode the paragraph separation variable and syntax
+table are redefined so that \LaTeX info commands that should be on lines
+of their own are not inadvertently included in paragraphs. Thus, the
+\kbd{M-q} (\code{fill-paragraph}) command will refill a paragraph but
+not mix an indexing command on a line adjacent to it into the
+paragraph.\refill
+
+In addition, \LaTeX info mode sets the \code{page-delimiter} variable to
+the value of \code{latexinfo-chapter-level-regexp}; by default, this is
+a regular expression matching the commands for chapters and sections.
+With this value for the page delimiter, you can jump from chapter title
+to chapter title with the \kbd{C-x ]} (\code{forward-page}) and \kbd{C-x
+[} (\code{backward-page}) commands and narrow to a chapter with the
+\kbd{C-x p} (\code{narrow-to-page}) command. (\inforef{Pages, Pages,
+emacs}, for details about the page commands.)\refill
+\end{implementation}
+\afternoterule
+
+You may name a \LaTeX info file however you wish, but the convention is to
+end a \LaTeX info file name with \file{.tex}. Emacs switches to \LaTeX
+info mode for a file that has \samp{-*-latexinfo-*-} in its first line. If
+ever you are in another mode and wish to switch to \LaTeX info mode, type
+\code{M-x latexinfo-mode}.\refill
+
+Like all other Emacs features, you can customize or enhance \LaTeX info
+mode as you wish. In particular, the keybindings are very easy to
+change. The keybindings described here are the default or standard
+ones.\refill
+
+\node Inserting, Showing the Structure, Emacs Editing, LaTeXinfo Mode
+\section{Inserting Frequently Used Commands}
+\cindex{Inserting frequently used commands}
+\cindex{Frequently used commands, inserting}
+\cindex{Commands, inserting them}
+
+\LaTeX info mode provides commands to insert various frequently used
+\back -commands into the buffer. You can use these commands to save
+keystrokes.\refill
+
+The insert commands are invoked by typing \kbd{C-c} twice and then the
+first letter of the \back -command. In the following description, we
+will list the key sequence, and then the name of the \LaTeX info function
+that is invoked.\refill
+
+\begin{description}
+\item[C-c C-c c (latexinfo-insert-code)]
+\findex{latexinfo-insert-code}
+Insert \code{\back code\{\}} and put the
+cursor between the braces.\refill
+
+\item[C-c C-c d (latexinfo-insert-dfn)]
+\findex{latexinfo-insert-dfn}
+Insert \code{\back dfn\{\}} and put the
+cursor between the braces.\refill
+
+\item[C-c C-c e (latexinfo-insert-end)]
+\findex{latexinfo-insert-end}
+Insert \code{\back end}.\refill
+
+\item[C-c C-c i (latexinfo-insert-item)]
+\findex{latexinfo-insert-item}
+Insert \code{\back item} and put the
+cursor at the beginning of the next line.\refill
+
+\item[C-c C-c k (latexinfo-insert-kbd)]
+\findex{latexinfo-insert-kbd}
+Insert \code{\back kbd\{\}} and put the
+cursor between the braces.\refill
+
+\item[C-c C-c n (latexinfo-insert-node)]
+\findex{latexinfo-insert-node}
+Insert \code{\back node} and a comment line
+listing the sequence for the `Next',
+`Previous', and `Up' nodes.
+Leave cursor after the \code{\back node}.\refill
+
+\item[C-c C-c o (latexinfo-insert-noindent)]
+\findex{latexinfo-insert-noindent}
+Insert \code{\back noindent} and put the cursor in between.\refill
+
+\item[C-c C-c s (latexinfo-insert-samp)]
+\findex{latexinfo-insert-samp}
+Insert \code{\back samp\{\}} and put the
+cursor between the braces.\refill
+
+\item[C-c C-c v (latexinfo-insert-var)]
+\findex{latexinfo-insert-var}
+Insert \code{\back var\{\}} and put the
+cursor between the braces.\refill
+
+\item[C-c C-c x (latexinfo-insert-example)]
+\findex{latexinfo-insert-example}
+Insert \code{\back begin\{example\}} \code{\back end\{example\}}
+and put the cursor at the beginning of the next line.\refill
+
+\c M-\{ was the binding for latexinfo-insert-braces;
+\c in Emacs 19, backward-paragraph will take this binding.
+\item[C-c C-c \{ (latexinfo-insert-braces)]
+\findex{latexinfo-insert-braces}
+Insert \code{\{\}} and put the cursor between the braces.\refill
+
+\item[C-c C-c \} (up-list)]
+\findex{up-list}
+Move from between a set of braces forward past the closing brace.\refill
+\end{description}
+
+\beforenoterule
+\begin{sideremark}
+\c !!! Enhancement: use C-c C-c C-] for up-list (easier typing)
+\c !!! Perhaps mention use of C-f instead of up-list?
+This set of insert commands was created after analyzing the frequency
+with which different \back -commands are used in the \i{GNU Emacs
+Manual} and the \i{GDB Manual}. If you wish to add your own insert
+commands, you can bind a keyboard macro to a key, use abbreviations,
+or extend the code in \file{latexinfo-mde.el}.\refill
+\end{sideremark}
+\afternoterule
+
+\node Showing the Structure, Updating Nodes and Menus, Inserting, LaTeXinfo Mode
+\section{Showing the Section Structure of a File}
+\cindex{Showing the section structure of a file}
+\cindex{Section structure of a file, showing it}
+\cindex{Structure of a file, showing it}
+\cindex{Outline of file structure, showing it}
+\cindex{Contents-like outline of file structure}
+\cindex{File section structure, showing it}
+\cindex{LaTeXinfo file section structure, showing it}
+
+You can show the section structure of a \LaTeX info file by using the
+\kbd{C-c C-s} command (\code{latexinfo-show-structure}). This command
+shows the section structure of a \LaTeX info file by listing the lines
+that begin with the \back -commands for \code{\back chapter},
+\code{\back section}, and the like. The command constructs what amounts
+to a table of contents. These lines are displayed in another buffer
+called the \samp{*Occur*} buffer. In that buffer, you can position
+the cursor over one of the lines and use the \kbd{C-c C-c} command
+(\code{occur-mode-goto-occurrence}), to jump to the corresponding spot
+in the \LaTeX info file.\refill
+
+\begin{description}
+\item[C-c C-s (latexinfo-show-structure)]
+\findex{latexinfo-show-structure}
+Show the \code{\back chapter}, \code{\back section}, and such lines of a
+\LaTeX info file.\refill
+
+\item[C-c C-c (occur-mode-goto-occurrence)]
+\findex{occur-mode-goto-occurrence}
+Go to the line in the \LaTeX info file corresponding to the line under the
+cursor in the \file{*Occur*} buffer.\refill
+\end{description}
+
+If you call \code{latexinfo-show-structure} with a prefix argument by
+typing \kbd{C-u C-c C-s}, it will list not only those lines with the
+\back -commands for \code{\back chapter}, \code{\back section}, and the like,
+but also the \code{\back node} lines. You can use
+\code{latexinfo-show-structure} with a prefix argument to inspect
+whether the `Next', `Previous', and `Up' pointers of a node line are
+correct.\refill
+
+Often, when you are working on a manual, you will be interested only
+in the structure of the current chapter. In this case, you can mark
+off the region of the buffer that you are interested in with the
+\kbd{C-x n} (\code{narrow-to-region}) command and
+\code{latexinfo-show-structure} will work on only that region. To see
+the whole buffer again, use \kbd{C-x w} (\code{widen}).
+(\inforef{Narrowing, Narrowing, emacs}, for more
+information about the narrowing commands.)\refill
+
+\vindex{page-delimiter}
+\cindex{Page delimiter in LaTeXinfo mode}
+In addition to providing the \code{latexinfo-show-structure} command,
+\LaTeX info mode sets the value of the page delimiter variable to match
+the chapter-level \back -commands. This enables you to use the \kbd{C-x
+]} (\code{forward-page}) and \kbd{C-x [} (\code{backward-page}) commands
+to move forward and backward by chapter, and to use the \kbd{C-x p}
+(\code{narrow-to-page}) command to narrow to a chapter. \inforef{Pages,
+Pages, emacs}, for more information about the page commands.\refill
+
+\xref{Using latexinfo-show-structure}, for how to detect formatting errors
+using this command.
+
+\node Updating Nodes and Menus, Updating Commands, Showing the Structure, LaTeXinfo Mode
+\section{Updating Nodes and Menus}
+\cindex{Updating nodes and menus}
+\cindex{Create nodes, menus automatically}
+\cindex{Insert nodes, menus automatically}
+\cindex{Automatically insert nodes, menus }
+
+\LaTeX info mode provides commands for automatically creating or updating
+menus and node pointers. The commands are called ``update'' commands
+because their most frequent use is for updating a \LaTeX info file after
+you have worked on it.\refill
+
+\begin{menu}
+* Updating Commands:: Five major updating commands.
+* Updating Requirements:: How to structure a \LaTeX info file for
+ using the updating command.
+* Other Updating Commands:: Indenting descriptions, inserting
+ missing nodes lines, and updating
+ nodes in sequence.
+* latexinfo-multiple-files-update:: \protect\code{latexinfo-multiple-files-update}
+\end{menu}
+
+\node Updating Commands, Updating Requirements, Updating Nodes and Menus, Updating Nodes and Menus
+\begin{ifinfo}
+\subsection*{The Updating Commands}
+\end{ifinfo}
+
+You can use the updating commands
+
+\begin{itemize}
+\item
+to insert or update the `Next', `Previous', and `Up' pointers of a
+node,\refill
+
+\item
+to insert or update the menu for a section, and\refill
+
+\item
+to create a master menu for a \LaTeX info source file.\refill
+\end{itemize}
+
+\noindent
+You can also use the commands to update all the nodes and menus in a
+region or in a whole \LaTeX info file.\refill
+
+\LaTeX info mode has five updating commands that are used most often: two
+are for updating the node pointers or menu of a single node (or a
+region), two are for updating every node pointer and menu in a file,
+and one, the \code{latexinfo-master-menu} command, is for creating a
+master menu for a complete file, and optionally, for updating every
+node and menu in the whole \LaTeX info file.\refill
+
+The \code{latexinfo-master-menu} command is the primary command:\refill
+
+\begin{description}
+\item[C-c C-u m (latexinfo-master-menu)]
+\findex{latexinfo-master-menu}
+Create or update a master menu that includes all the other menus
+(incorporating the descriptions from pre-existing menus, if
+any).\refill
+
+With an argument (prefix argument, if interactive), first create or
+update all the nodes and all the regular menus in the buffer before
+constructing the master menu. (\xref{The Top Node, , The Top Node and
+Master Menu}, for more about a master menu.)
+For \code{latexinfo-master-menu} to work, the \LaTeX info file must have a
+node called `Top'.\refill
+\end{description}
+
+\begin{quote}
+After extensively editing a \LaTeX info file, it is common to type
+\kbd{C-u C-c C-u m} or \kbd{C-u M-x latexinfo-master-menu} to update all
+the nodes and menus completely and all at once.\refill
+\end{quote}
+
+The other major updating commands do smaller jobs and are designed for
+the person who updates nodes and menus as he or she writes a \LaTeX info
+file. These commands are:\refill
+
+\begin{description}
+\item[C-c C-u C-n (latexinfo-update-node)]
+\findex{latexinfo-update-node}
+Insert the `Next', `Previous', and `Up' pointers for the node point is
+within (i.e., for the \code{\back node} line preceding point). If the
+\code{\back node} line has pre-existing `Next', `Previous', or `Up'
+pointers in it, the old pointers are removed and new ones inserted.
+With an argument (prefix argument, if interactive), this command
+updates all \code{\back node} lines in the region (which is the text
+between point and mark).\refill
+
+\item[C-c C-u C-m (latexinfo-make-menu)]
+\findex{latexinfo-make-menu}
+Create or update the menu in the node that point is within. With an
+argument (prefix argument, if interactive), the command makes or
+updates menus for the nodes within or part of the region.\refill
+
+Whenever \code{latexinfo-make-menu} updates an existing menu, the
+descriptions from that menu are incorporated into the new menu. This
+is done by copying descriptions from the existing menu to the entries
+in the new menu that have the same node names. If the node names are
+different, the descriptions are not copied to the new menu.\refill
+
+\c !!! latexinfo-make-menu should offer user a buffer with descriptions
+\c !!! in it so the user can edit them.
+Menu entries that refer to other Info files are removed since they do
+not refer to nodes within the current buffer. This is a
+deficiency.\refill
+
+\item[C-c C-u C-e (latexinfo-every-node-update)]
+\findex{latexinfo-every-node-update}
+Insert or update the `Next', `Previous', and `Up' pointers for every
+node in the buffer .\refill
+
+\item[C-c C-u C-a (latexinfo-all-menus-update)]
+\findex{latexinfo-all-menus-update}
+Create or update all the menus in the buffer. With an argument
+(prefix argument, if interactive), first insert or update all the node
+pointers before working on the menus.\refill
+
+If a master menu exists, the \code{latexinfo-all-menus-update} command
+updates it; but the command does not create a new master menu if none
+already exists. (Use the \code{latexinfo-master-menu} command for
+that.)\refill
+\end{description}
+
+\beforenoterule
+\begin{implementation}
+The \code{latexinfo-column-for-description} variable specifies
+the column to which menu descriptions are indented. By
+default, the value is 32 although it is often useful to reduce
+it to as low as 24. You can set the variable with the
+\kbd{M-x edit-options} command (\inforef{Edit Options, Editing
+Variable Values, emacs}), or with the \kbd{M-x set-variable} command
+(\inforef{Examining, Examining and Setting Variables, emacs}).\refill
+\end{implementation}
+\afternoterule
+
+Also, the \code{latexinfo-indent-menu-description} command may
+be used to indent existing menus to a specified
+column.Finally, if you wish, you can use the
+\code{latexinfo-insert-node-lines} command to insert missing
+\code{\back node} lines into a file. (\xref{Other Updating
+Commands}, for more information.)\refill
+
+\clearpage
+\node Updating Requirements, Other Updating Commands, Updating Commands, Updating Nodes and Menus
+\subsection{Updating Requirements}
+\cindex{Updating requirements}
+\cindex{Requirements for updating commands}
+
+To use the updating commands, you must organize the \LaTeX info file
+hierarchically with chapters, sections, subsections, and the like. Each
+\code{\back node} line, with the exception of the line for the `Top' node,
+must be followed by a line with a structuring command such as \code{\back
+chapter}, \code{\back section}, or \code{\back unnumberedsubsec}. Each
+\code{\back node} line/structuring-command line combination must look
+either like this:\refill
+
+\begin{example}
+\begin{same}
+\back node Comments, Minimum, Conventions, Overview
+\back comment node-name, next, previous, up
+\back section\{Comments\}
+\end{same}
+\end{example}
+
+or like this (without the \code{\back comment} line):
+
+\begin{example}
+\begin{same}
+\back node Comments, Minimum, Conventions, Overview
+\back section\{Comments\}
+\end{same}
+\end{example}
+
+\noindent
+(In this example, `Comments' is the name of both the node and the
+section. The next node is called `Minimum' and the previous node is
+called `Conventions'. The `Comments' section is within the `Overview'
+node, which is specified by the `Up' pointer.)
+
+If a file has a `Top' node, it must be called \samp{top} or \samp{Top}
+and be the first node in the file.\refill
+
+\node Other Updating Commands, latexinfo-multiple-files-update, Updating Requirements, Updating Nodes and Menus
+\subsection{Other Updating Commands}
+
+In addition to the five major updating commands, \LaTeX info mode
+possesses several less frequently used updating commands.\refill
+
+\begin{description}
+\item[C-c C-u C-i (latexinfo-insert-node-lines)]
+\findex{latexinfo-insert-node-lines}
+Insert \code{\back node} before the \code{\back chapter}, \code{\back
+section}, and other sectioning commands wherever it is missing
+throughout a region in a \LaTeX info file. With an argument (prefix
+argument, if interactive), the \code{latexinfo-insert-node-lines}
+command not only inserts \code{\back node} lines but also inserts the
+chapter or section titles as the names of the corresponding nodes; and
+it inserts their titles for node names in pre-existing \code{\back node}
+lines that lack names. Since node names should be more concise than
+section or chapter titles, node names so inserted should be edited
+manually. Also, section titles cannot contain commas if this command
+is used, or else only the title yp to the first comma will be used.\refill
+
+\item[C-c C-u C-f (latexinfo-multiple-files-update)]
+\findex{latexinfo-multiple-files-update}
+Update nodes and menus in a document built from several separate
+files. With a prefix argument if called interactively (a
+non-\code{nil} `make-master-menu' argument, if called
+non-interactively), create and insert a master menu in the outer file.
+With a numeric prefix argument if called interactively (a
+non-\code{nil} `update-everything' argument if called
+non-interactively), first update all the menus and all the `Next',
+`Previous', and `Up' pointers of all the included files before
+creating and inserting a master menu in the outer file. The
+\code{latexinfo-multiple-files-update} command is described in the
+section on \code{\back include} files. \xref{Include Files}.\refill
+
+\item[C-c C-u C-d (latexinfo-indent-menu-description)]
+\findex{latexinfo-indent-menu-description}
+Indent every description in the menu following point to the specified
+column. You can use this command to give yourself more space for
+descriptions. With an argument (prefix argument, if interactive), the
+\code{latexinfo-indent-menu-description} command indents every
+description in every menu in the region. However, this command does
+not indent the second and subsequent lines of a multi-line
+description.\refill
+
+\item[C-c C-u C-s (latexinfo-sequential-node-update)]
+\findex{latexinfo-sequential-node-update}
+Insert the names of the nodes immediately following and preceding the
+current node as the `Next' or `Previous' pointers regardless of those
+nodes' hierarchical level. This means that the `Next' node of a subsection
+may well be the next chapter. Sequentially ordered nodes are useful for
+documents that you read through sequentially. (However, in Info, the
+\code{g* \key{RET}} command lets you look through the file sequentially, so
+sequentially ordered nodes are not strictly necessary.) With an argument
+(prefix argument, if interactive), the
+\code{latexinfo-sequential-node-update} command sequentially updates all
+the nodes in the region.\refill
+\end{description}
+
+\node latexinfo-multiple-files-update, Info Formatting, Other Updating Commands, Updating Nodes and Menus
+\subsection{\protect\code{latexinfo-multiple-files-update}}
+\findex{latexinfo-multiple-files-update}
+
+The \code{latexinfo-multiple-files-update} command creates or updates
+`Next', `Previous', and `Up' pointers of included files as well as those
+in the outer or over all \LaTeX info file, and it creates or updates a
+main menu in the outer file. \xref{Include Files}. Depending whether
+you call it with optional arguments, it updates only the pointers in the
+first \code{\back node} line of the included files or all of
+them.\refill
+
+
+\begin{description}
+\item[C-u C-c C-u C-f (latexinfo-multiple-files-update)]
+Called without any arguments, will:\refill
+
+\begin{itemize}
+\item
+Create or update the `Next', `Previous', and `Up' pointers of the
+first \code{\back node} line in each file included in an outer or overall
+\LaTeX info file.\refill
+
+\item
+Create or update the `Top' level node pointers of the outer or
+overall file.\refill
+
+\item
+Create or update a main menu in the outer file.\refill
+\end{itemize}
+
+\item[C-u C-c C-u C-f (latexinfo-multiple-files-update)]
+Called with a prefix argument (a non-\code{nil} \var{make-master-menu}
+argument, if called from a program), create and insert a master menu
+in the outer file in addition to creating or updating pointers in the
+first \code{\back node} line in each included file and creating or
+updating the `Top' level node pointers of the outer file. The master
+menu is made from all the menus in all the included files.\refill
+
+\item[C-u 8 C-c C-u C-f (latexinfo-multiple-files-update)]
+Called with a numeric prefix argument (a non-\code{nil}
+\var{update-everything} argument, if called from a program):\refill
+
+\begin{itemize}
+\item
+Create or update the `Top' level node pointers of the outer or
+overall file.\refill
+
+\item
+Create or update \emph{all} the `Next', `Previous', and `Up' pointers
+of all the included files.\refill
+
+\item
+Create or update \emph{all} the menus of all the included
+files.\refill
+
+\item
+And then create a master menu in the outer file. This is similar to
+invoking \code{latexinfo-master-menu} with an argument when you are
+working with just one file.\refill
+\end{itemize}
+\end{description}
+
+\noindent
+Note the use of the prefix argument in interactive use: with a regular
+prefix argument, just \kbd{C-u}, the
+\code{latexinfo-multiple-files-update} command inserts a master menu;
+with a numeric prefix argument, such as \kbd{C-u 8}, the command
+updates every pointer and menu in all the files and then inserts a
+master menu.\refill
+
+\node Info Formatting, Printing, latexinfo-multiple-files-update, LaTeXinfo Mode
+\section{Formatting for Info}
+\cindex{Formatting for Info}
+\cindex{Running an Info formatter}
+\cindex{Info formatting}
+
+\LaTeX info mode provides several commands for formatting part or all of a
+\LaTeX info file for Info. Often, when you are writing a document, you
+want to format only part of a file---that is, a region. You can use the
+\code{latexinfo-format-region} command to format a region.\refill
+
+\begin{description}
+\findex{latexinfo-format-region}
+\item[C-c C-e C-r (latexinfo-format-region)]
+Format the current region for Info.\refill
+\end{description}
+
+You can use the \code{latexinfo-format-buffer} command to format a whole
+buffer:\refill
+
+\begin{description}
+\findex{latexinfo-format-buffer}
+\item[C-c C-e C-b (latexinfo-format-buffer)]
+Format the current buffer for Info.\refill
+\end{description}
+
+\begin{quote}
+After writing a \LaTeX info file, you can type \kbd{C-u C-c C-u m} or
+\kbd{C-u M-x latexinfo-master-menu} to update all the nodes and menus
+and then type \kbd{C-c C-u b} or \kbd{M-x latexinfo-format-buffer} to
+create an Info file.
+\end{quote}
+
+For the Info formatting commands to work, the file \emph{must} include a
+line that has \code{\back setfilename} in its header. \xref{Creating
+and Installing an Info File}, for details about Info formatting.\refill
+
+\clearpage
+\node Printing, LaTeXinfo Mode Summary, Info Formatting, LaTeXinfo Mode
+\section{Formatting and Printing}
+\cindex{Formatting for printing}
+\cindex{Printing a region or buffer}
+\cindex{Region formatting and printing}
+\cindex{Buffer formatting and printing}
+\cindex{Part of file formatting and printing}
+
+Typesetting and printing a \LaTeX info file is a multi-step process in
+which you first create a file for printing (called a \scap{dvi} file), and
+then you print the file. Optionally, also, you may create
+indices.\refill
+
+Often, when you are writing a document, you want to typeset and print
+only part of a file, to see what it will look like. You can use the
+\code{latexinfo-latex-region} and related commands for this purpose. Use
+the \code{latexinfo-latex-buffer} command to format all of a
+buffer.\refill
+
+\begin{description}
+\item[C-c C-t C-r (latexinfo-latex-region)]
+\findex{latexinfo-latex-region}
+Run \LaTeX{} on the region.\refill
+
+\item[C-c C-t C-b (latexinfo-latex-buffer)]
+\findex{latexinfo-latex-buffer}
+Run \LaTeX{} on the buffer.\refill
+
+\item[C-c C-t C-i (latexinfo-latexindex)]
+Sort the indices of a \LaTeX info file formatted with
+\code{latexinfo-latex-region} or \code{latexinfo-latex-buffer}. You must run
+the \code{latex} command a second time after sorting the raw index
+files.\refill
+
+\item[C-c C-t C-p (latexinfo-latex-print)]
+\findex{latexinfo-latex-print}
+Print the file (or the part of the file) previously formatted with
+\code{latexinfo-latex-buffer} or \code{latexinfo-latex-region}.\refill
+\end{description}
+
+\noindent
+For \code{latexinfo-latex-region} or \code{latexinfo-latex-buffer} to
+work, the file \emph{must} start with a \samp{\back documentstyle} line
+and must include an \code{\back setfilename} command as an end of header
+line. The file must end with \code{\back end\{document\}} on a line by
+itself.\refill
+
+\xref{Printing Hardcopy}, for a description of the other \LaTeX{} related
+commands, such as \code{latexinfo-latexindex} and
+\code{latex-show-print-queue}.\refill
+
+\clearpage
+\node LaTeXinfo Mode Summary, Printing Hardcopy, Printing, LaTeXinfo Mode
+\section{LaTeXinfo Mode Summary}
+\cpsubindex{LaTeXinfo Mode}{Summary}
+
+In \LaTeX info mode, each set of commands has default keybindings that
+begin with the same keys. All the commands that are custom-created
+for \LaTeX info mode begin with \kbd{C-c}. The keys that follow are
+arranged mnemonically.\refill
+
+\begin{description}
+\item[Insert Commands]
+The insert commands begin with \kbd{C-c} twice and then the
+first letter of the \back -command to be inserted.\refill
+
+\begin{example}
+C-c C-c c \r{Insert} \samp{\back code}.
+C-c C-c d \r{Insert} \samp{\back dfn}.
+C-c C-c e \r{Insert} \samp{\back end\{\}}.
+C-c C-c i \r{Insert} \samp{\back item}.
+C-c C-c n \r{Insert} \samp{\back node}.
+C-c C-c s \r{Insert} \samp{\back samp}.
+C-c C-c v \r{Insert} \samp{\back var}.
+C-c C-c \{ \r{Insert braces.}
+C-c C-c \} \r{Move out of enclosing braces.}
+\end{example}
+
+\item[Show Structure]
+\code{latexinfo-show-structure} is often used within a narrowed region.
+
+\begin{example}
+C-c C-s \r{List all the headings.}
+\end{example}
+
+\item[The Master Update Command]
+The \code{latexinfo-master-menu} command creates a master menu; and can
+be used to update every node and menu in a file as well.\refill
+
+\begin{example}
+C-c C-u m \r{Create or update a master menu.}
+C-u C-c C-u m \r{First create or update all nodes and regular menus.}
+\end{example}
+
+\item[Update Pointers]
+
+The update pointer commands begin with \kbd{C-c C-u}:
+
+\begin{example}
+C-c C-u C-n \r{Update a node.}
+C-c C-u C-e \r{Update every node in the buffer.}
+\end{example}
+
+\item[Update Menus]
+
+The update menu commands begin with \kbd{C-c C-u}. You may precede a
+\kbd{C-c C-u C-a} so as to update both nodes and menus.\refill
+
+\begin{example}
+C-c C-u C-m \r{Make or update a menu.}
+
+C-c C-u C-a \r{Make or update all the menus in a buffer;}
+C-u C-c C-u C-a \r{first update all the nodes.}
+\end{example}
+
+\item[Format for Info]
+The Info formatting commands begin with \kbd{C-c C-e}:
+
+\begin{example}
+C-c C-e C-r \r{Format the region.}
+C-c C-e C-b \r{Format the buffer.}
+\end{example}
+
+\item[Typeset and Print]
+The typesetting and printing commands begin with \kbd{C-c C-t}:\refill
+
+\begin{example}
+C-c C-t C-r \r{Run \LaTeX{} on the region.}
+C-c C-t C-b \r{Run \LaTeX{} on the buffer.}
+C-c C-t C-i \r{Run} \code{latexindex}.
+C-c C-t C-p \r{Print the \scap{dvi} file.}
+C-c C-t C-q \r{Show the print queue.}
+C-c C-t C-d \r{Delete a job from the print queue.}
+C-c C-t C-k \r{Kill the current \LaTeX{} formatting job.}
+C-c C-t C-x \r{Quit a currently stopped \LaTeX{} formatting job.}
+C-c C-t C-l \r{Recenter the output buffer.}
+\end{example}
+
+\item[Other Updating Commands]
+The `other updating commands' begin with \kbd{C-c C-u}
+
+\begin{example}
+C-c C-u C-i \r{Insert missing node lines using}
+ \r{section titles as node names.}
+C-c C-u C-f \r{Update a multi-file document.}
+C-c C-u C-d \r{Indent descriptions.}
+C-c C-u C-s \r{Insert node pointers in strict sequence.}
+\end{example}
+\end{description}
+
+
+\node Printing Hardcopy, How to Print, LaTeXinfo Mode Summary, Top
+\chapter{Printing Hardcopy}
+\cindex{Printing hardcopy}
+\cindex{Hardcopy, printing it}
+\cindex{Making a printed manual}
+\cindex{Sorting indices}
+\cindex{Indices, sorting}
+\cindex{LaTeX index sorting}
+\findex{latexindex}
+
+
+The typesetting program \LaTeX{} is used for formatting a \LaTeX info
+file. \LaTeX{} is a very powerful typesetting program and, if used
+correctly, does an exceptionally good job.\refill
+
+There are three major stages for printing hardcopy of a
+\LaTeX info file. One is for formatting the file, the second is for
+sorting the index, and the third is for printing the formatted
+document. When you use the shell commands, you can either work
+directly in the operating system shell or work within a shell inside
+of GNU Emacs.\refill
+
+Instead of shell commands, you can use commands provided by \LaTeX info
+mode. In addition to three commands to format a file, sort the
+indices, and print the result, \LaTeX info mode offers key bindings for
+commands to recenter the output buffer, show the print queue, and
+delete a job from the print queue.\refill
+
+\begin{menu}
+* How to Print:: How to print a hardcopy manual with
+ shell commands.
+* Printing from Emacs:: How to print from an Emacs shell.
+* LaTeXinfo Mode Printing:: How to format and print in \LaTeX info mode.
+* Compile-Command:: How to print using Emacs's compile command.
+* Preparing for LaTeX:: Preparing for Use of \LaTeX{}
+* Overfull Hboxes:: What are and what to do with overfull hboxes.
+\end{menu}
+
+
+\node How to Print, Printing from Emacs, Printing Hardcopy, Printing Hardcopy
+\section{How to Print Using Shell Commands}
+
+\cindex{\scap{dvi} file}
+Format the \LaTeX info file with the shell command \code{latex} followed by
+the name of the \LaTeX info file. This produces a formatted \scap{dvi} file
+as well as several auxiliary files containing indices, cross
+references, etc. The \scap{dvi} file (for \dfn{DeVice Independent}
+file) can be printed on a wide variety of printers.\refill
+
+The \code{latex} formatting command itself does not sort the indices; it
+writes an output file of unsorted index data. Hence, to generate a
+printed index, you first need a sorted index to work from. The
+\code{latexindex} command sorts indices.\footnote{The source file
+\file{latexindex.c} comes as part of the standard \LaTeX info
+distribution and is usually installed when \LaTeX info is
+installed.}\refill
+\findex{latexindex}
+\begin{ignore}
+Usage: latexindex [-k] [-T tempdir] infile [-o outfile] ...
+
+Each infile arg can optionally be followed by a `-o outfile' arg;
+for each infile that isn't followed by a -o arg, the infile name with
+`s' (for `sorted') appended is used for the outfile.
+
+-T dir is the directory to put temp files in, instead of /tmp.
+-k means `keep tempfiles', for debugging.
+\end{ignore}
+
+The \code{latex} formatting command outputs unsorted index files under
+names that obey a standard convention. These names are the name of your
+main input file to the \code{latex} formatting command, with everything
+after the first period thrown away, and the two letter names of indices
+added at the end. For example, the raw index output files for the input
+file \file{foo.tex} would be \file{foo.cp}, \file{foo.vr},
+\file{foo.fn}, \file{foo.tp}, \file{foo.pg} and \file{foo.ky}. Those
+are exactly the arguments to give to \code{latexindex}. Or else, under
+Unix you can use \samp{??} as ``wild-cards'' and give the command in
+this form:\refill
+
+\begin{example}
+latexindex foo.??
+\end{example}
+
+\noindent
+This command will run \code{latexindex} on all the unsorted index files.
+(You may execute \samp{latexindex foo.??} even if there are similarly
+named files with two letter extensions that are not index files, such as
+\samp{foo.el}. The \code{latexindex} command reports but otherwise
+ignores such files.) For each file specified, \code{latexindex}
+generates a sorted index file whose name is made by appending \samp{s}
+to the input file name. The \code{\back printindex} command knows to
+look for a file of that name. \code{latexindex} does not alter the raw
+index output file.\refill
+
+If you have a bibliography, you must also run the \BibTeX\ program
+on the \samp{aux} file generated by \LaTeX. For example,
+\begin{example}
+bibtex foo.aux
+\end{example}
+
+After you have sorted the indices or formatted the bibliography, you
+need to rerun the \code{latex} formatting command on the \LaTeX info
+file. This regenerates a formatted
+\scap{dvi} file with up-to-date index entries.\footnote{If you use more
+than one index and have cross references to an index other than the
+first, you must run \code{latex} \emph{three times} to get correct
+output: once to generate raw index data; again (after \code{latexindex})
+to output the text of the indices and determine their true page numbers;
+and a third time to output correct page numbers in cross references to
+them. This may also be necessary to update the table of contents if the
+number of pages used by the indices or bibliography changed.}\refill
+
+To summarize, this is a three step process:
+
+\begin{enumerate}
+\item
+Run the \code{latex} formatting command on the \LaTeX info file. This
+generates the formatted \scap{dvi} file as well as the raw index files
+with two letter extensions.\refill
+
+\item
+Run the shell command \code{latexindex} on the raw index files to sort
+them. This creates the corresponding sorted index files.\refill
+
+\item
+Run the shell command \code{bibtex} on the raw index files to
+format the bibliography. This creates the corresponding \samp{.bbl}
+file.\refill
+
+
+\item
+Rerun the \code{latex} formatting command on the \LaTeX info file. This
+regenerates a formatted \scap{dvi} file with the index entries in the
+correct order. This second run also makes all the cross references
+correct as well.\refill
+\end{enumerate}
+
+You need not run \code{latexindex} each time after you run the
+\code{latex} formatting. If you don't, on the next run, the \code{latex}
+formatting command will use whatever sorted index files happen to
+exist from the previous use of \code{latexindex}. This is usually
+\scap{ok} while you are in the early stages of writing a document.\refill
+
+Rather than type the \code{latex, bibtex} and \code{latexindex}
+commands yourself, you can use the shell script \code{latex2dvi}. This
+shell script is designed to simplify the \code{latex},
+\code{latexindex}, \code{bibtex}, \code{latex} sequence by figuring out
+whether index files and \scap{dvi} files are up-to-date. It runs
+\code{latexindex} and \code{latex} only when necessary.
+The syntax for \code{latex2dvi} is like this (where \samp{%} is the
+shell prompt):\refill
+\findex{latex2dvi \r{(shell script)}}
+
+\begin{example}
+% latex2dvi \var{filenames}\dots{}
+\end{example}
+
+\findex{lpr \r{(\scap{dvi} print command)}}
+Finally, you can print a \scap{dvi} file with the \scap{dvi} print command.
+The precise command to use depends on the system; \samp{lpr -d} is
+common. The \scap{dvi} print command may require a file name without any
+extension or with a \samp{.dvi} extension.\refill
+
+The following commands, for example, sort the indices, format, and
+print the \i{Foo Lisp Manual} (where \samp{%} is the shell
+prompt):\refill
+
+\begin{example}
+% latex foo.tex
+% latexindex foo.??
+% bibtex foo.aux
+% latex foo.tex
+% lpr -d foo.dvi
+\end{example}
+
+\noindent
+(Remember that the shell commands may be different at your site; but
+these are commonly used versions.)\refill
+
+\node Printing from Emacs, LaTeXinfo Mode Printing, How to Print, Printing Hardcopy
+\section{Printing from an Emacs Shell}
+\cindex{Printing from an Emacs shell}
+\cindex{Shell, printing from}
+\cindex{Emacs shell, printing from}
+\cindex{GNU Emacs shell, printing from}
+
+You can give formatting and printing commands from a shell within GNU
+Emacs. To create a shell within Emacs, type \kbd{M-x shell}. In this
+shell, you can format and print the document. \xref{How to Print, ,
+How to Print Using Shell Commands}, for details.\refill
+
+You can switch to and from the shell buffer while \code{latex} is
+running and do other editing. If you are formatting a long document on
+a slow machine, this can be very convenient. You can also use
+\code{latex2dvi} from an Emacs shell. (\xref{How to Print, , How to
+Print Using Shell Commands}.)
+
+\begin{ifinfo}
+\xref{LaTeXinfo Mode Printing}, for more information about formatting
+and printing in \LaTeX info mode.\refill
+\end{ifinfo}
+
+\node LaTeXinfo Mode Printing, Compile-Command, Printing from Emacs, Printing Hardcopy
+\section{Formatting and Printing in LaTeXinfo Mode}
+\cindex{Region printing in LaTeXinfo mode}
+\cindex{Format and print in LaTeXinfo mode}
+\cindex{Print and format in LaTeXinfo mode}
+
+\LaTeX info mode provides several predefined key commands for \LaTeX{}
+formatting and printing. These include commands for sorting indices,
+looking at the printer queue, killing the formatting job, and
+recentering display of the buffer in which the operations
+occur.\refill
+
+\begin{description}
+\item[C-c C-t C-r (latexinfo-latex-region)]
+Run \LaTeX{} on the current region.\refill
+
+\item[C-c C-t C-b (latexinfo-latex-buffer)]
+Run \LaTeX{} on the current buffer.\refill
+
+\item[C-c C-t C-i (latexinfo-latexindex)]
+Sort the indices of a \LaTeX info file formatted with
+\code{latexinfo-latex-region} or \code{latexinfo-latex-buffer}.\refill
+
+\item[C-c C-t C-p (latexinfo-latex-print)]
+Print a \scap{dvi} file that was made with \code{latexinfo-latex-region} or
+\code{latexinfo-latex-buffer}.\refill
+
+\item[C-c C-t C-q (latexinfo-show-latex-print-queue)]
+Show the print queue.\refill
+
+\item[C-c C-t C-d (latexinfo-delete-from-latex-print-queue)]
+Delete a job from the print queue; you will be prompted for the job
+number shown by a preceding \kbd{C-c C-t C-q} command
+(\code{latexinfo-show-latex-print-queue}).\refill
+
+\item[C-c C-t C-k (latexinfo-kill-latex-job)]
+Kill the currently running \LaTeX{} job started by
+\code{latexinfo-latex-region} or \code{latexinfo-latex-buffer}, or any other
+process running in the \LaTeX info shell buffer.\refill
+
+\item[C-c C-t C-x (latexinfo-quit-latex-job)]
+Quit a \LaTeX{} formatting job that has stopped because of an error by
+sending an \key{x} to it. When you do this, \LaTeX{} preserves a record
+of what it did in a \file{.log} file.\refill
+
+\item[C-c C-t C-l (latexinfo-recenter-latex-output-buffer)]
+Redisplay the shell buffer in which the \LaTeX{} printing and formatting
+commands are run to show its most recent output.\refill
+\end{description}
+
+Thus, the usual sequence of commands for formatting a buffer is as
+follows (with comments to the right):\refill
+
+\begin{table}
+\begin{tabular}{||l|l||}
+\hline
+\kbd{C-c C-t C-b} & Run \LaTeX{} on the buffer. \\
+\kbd{C-c C-t C-i} & Sort the indices. \\
+\kbd{C-c C-t C-b} & Rerun \LaTeX{} to regenerate indices. \\
+\kbd{C-c C-t C-p} & Print the \scap{dvi} file. \\
+\kbd{C-c C-t C-q} & Display the printer queue. \\
+\hline
+\end{tabular}
+\caption{Formatting a Buffer Commands}
+\end{table}
+
+The \LaTeX info mode \LaTeX{} formatting commands start a subshell in
+Emacs called the \file{*latexinfo-latex-shell*}. The
+\code{latexinfo-latex-command}, \code{latexinfo-latexindex-command},
+and \code{latex-dvi-print-command} commands are all run in this shell.
+You can watch the commands operate in the \samp{*latexinfo-latex-shell*}
+buffer, and you can switch to and from and use the
+\samp{*latexinfo-latex-shell*} buffer as you would any other shell
+buffer.\refill
+
+The formatting and print commands depend on the values of several
+variables. The default values are:\refill
+
+\need{700}
+\begin{table}
+\begin{tabular}{||l|l||}
+\hline
+Variable & Default value \\
+\hline
+latexinfo-latex-command & "latex" \\
+latexinfo-latexindex-command & "latexindex" \\
+latexinfo-latex-shell-cd-command & "cd" \\
+latexinfo-latex-dvi-print-command & "lpr -d" \\
+latexinfo-show-latex-queue-command & "lpq" \\
+latexinfo-delete-from-print-queue-command & "lprm" \\
+latexinfo-start-of-header & "\back begin\{document\}" \\
+latexinfo-end-of-header & "\back setfilename" \\
+latexinfo-latex-trailer & "\back end\{document\}" \\
+\hline
+\end{tabular}
+\caption{Formatting a Document Commands}
+\end{table}
+
+The default values of \code{latexinfo-latex-command} and
+\code{latexinfo-latexindex-command} are set in the \file{latexnfo-tex.el}
+file.\refill
+
+You can change the values of these variables with the \kbd{M-x
+edit-options} command (\inforef{Edit Options, Editing Variable Values,
+emacs}), with the \kbd{M-x set-variable} command (\inforef{Examining,
+Examining and Setting Variables, emacs}), or with your \file{.emacs}
+initialization file (\inforef{Init File, Init File, emacs}).\refill
+
+\node Compile-Command, Preparing for LaTeX, LaTeXinfo Mode Printing, Printing Hardcopy
+\section{Using the Local Variables List}
+\cindex{Local variables}
+\cindex{Compile command for formatting}
+\cindex{Format with the compile command}
+
+Yet another way to apply the \LaTeX{} formatting command to a \LaTeX info
+file is to put that command in a \dfn{local variables list} at the end
+of the \LaTeX info file. You can then specify the \LaTeX{} formatting
+command as a \code{compile-command} and have Emacs run the \LaTeX{}
+formatting command by typing \kbd{M-x compile}. This creates a
+special shell called the \samp{*compilation buffer*} in which Emacs
+runs the compile command. For example, at the end of the
+\file{gdb.texinfo} file, after the \code{\back end\{document\}}, you would put the
+following:\refill
+
+\begin{example}
+\back c Local Variables:
+\back c compile-command: "latex2dvi foo.tex"
+\back c End:
+\end{example}
+
+\noindent
+This technique is most often used by programmers who also compile
+\samp{C} programs this way. (\inforef{Compilation, Compilation, emacs}.)\refill
+
+Usually, the file's first line contains an \samp{\back c
+-*-latexinfo-*-} comment that causes Emacs to switch to \LaTeX info mode
+when you edit the file. In addition, the beginning must include a
+\code{\back begin\{document\}}. After this follows the title page, a
+copyright page, and permissions, and a table of contents. Besides an
+\code{\back end\{document\}}, the end of a file usually includes indices
+and the bibliography.\refill
+
+\node Preparing for LaTeX, Overfull Hboxes, Compile-Command, Printing Hardcopy
+\section{Preparing for Use of \protect\LaTeX{}}
+\cindex{Preparing for use of \LaTeX{}}
+\cindex{LaTeX input initialization}
+\cindex{\code{TEXINPUTS} environment variable}
+\vindex{TEXINPUTS}
+\cindex{\b{.profile} initialization file}
+\cindex{\b{.login} initialization file}
+\cindex{Initialization file for \LaTeX{} input}
+
+You must put \code{latexinfo} as an option to the \code{documentstyle}
+of every \LaTeX info file to tell \LaTeX\ to use the
+\file{latexinfo.sty} file when it is processing the \LaTeX info source
+file. Otherwise \LaTeX\ will not know what to do with the commands.
+\xref{The Documentstyle}. If \LaTeX info has been installed
+properly, \LaTeX\ should find the file automatically. \xref{Installing
+LaTeXinfo}, if you have troubles.
+
+\node Overfull Hboxes, Catching Formatting Mistakes, Preparing for LaTeX, Printing Hardcopy
+\section{Overfull ``Hboxes''}
+\cindex{Overfull ``Hboxes''}
+\cindex{Hboxes, overfull}
+\cindex{Final output}
+
+\LaTeX{} is sometimes unable to typeset a line without extending it into
+the right margin. This can occur when \LaTeX{} comes upon what it
+interprets as a long word that it cannot hyphenate, such as an
+electronic mail network address or a very long title. When this
+happens, \LaTeX{} prints an error message like this:\refill
+
+\begin{example}
+Overfull \back hbox (20.76302pt too wide)
+\end{example}
+
+\noindent
+(In \LaTeX, lines are in ``horizontal boxes'', hence the term,
+``hbox''.)\refill
+
+\LaTeX{} also provides the line number in the \LaTeX info source file and
+the text of the offending line, which is marked at all the places that
+\LaTeX{} knows how to hyphenate words.\refill
+
+If the \LaTeX info file has an overfull hbox, you can rewrite the sentence
+so the overfull hbox does not occur, or you can decide to leave it. A
+small excursion into the right margin often does not matter and may not
+even be noticeable.\refill
+
+\cindex{Black rectangle in hardcopy}
+\cindex{Rectangle, ugly, black in hardcopy}
+\findex{finalout}
+However, if you do leave an overfull hbox, unless told otherwise,
+\LaTeX{} will print a large, ugly, black rectangle beside the line.
+This is so you will notice the location of the problem if you are
+correcting a draft. To prevent such a mark from marring your final
+printout, put the following in the beginning of the \LaTeX info file on
+a line of its own, before the \code{\back maketitle} command:\refill
+
+\begin{example}
+\back finalout
+\end{example}
+
+\node Catching Formatting Mistakes, Debugging with Info, Overfull Hboxes, Top
+\chapter{Catching Formatting Mistakes}
+\cindex{Structure, Catching Formatting Mistakes in}
+\cindex{Nodes, Catching Formatting Mistakes}
+\cindex{Catching Formatting Mistakes}
+\cindex{Correcting mistakes}
+\cindex{Mistakes, catching}
+\cindex{Problems, catching}
+\cindex{Debugging the LaTeXinfo structure}
+
+Besides mistakes with the content of what ever you are describing, there
+are two kinds of mistake you can make with \LaTeX info: you can make
+mistakes with commands, and you can make mistakes with the structure of
+the nodes and chapters. There are two tools for catching the first kind
+of mistake and two for catching the second.\refill
+
+For finding problems with commands, your best action is to run\\
+\kbd{M-x latexinfo-format-region} on regions of your file as you write
+it. In \LaTeX info mode, the \code{latexinfo-format-region} command is
+bound to \ctrl{c} \ctrl{f}. In addition, you can run \LaTeX\ on the
+whole file.\refill
+
+For finding problems with the structure of nodes and chapters, you can
+use \ctrl{c} \ctrl{s} (\code{latexinfo-show-structure}) (\pxref{Using
+latexinfo-show-structure},) the related \code{occur} command
+(pxref{Using occur},) and you can use the \kbd{M-x Info-validate}
+command (\pxref{Running Info-Validate}.)
+
+\begin{menu}
+* Debugging with Info:: How to catch errors with Info formatting.
+* Debugging with LaTeX:: How to catch errors with \LaTeX{} formatting.
+* Using latexinfo-show-structure:: How to use \code{latexinfo-show-structure}.
+* Using occur:: How to list all lines containing a pattern.
+* Running Info-Validate:: How to find badly referenced nodes.
+\end{menu}
+
+\node Debugging with Info, Debugging with LaTeX, Catching Formatting Mistakes, Catching Formatting Mistakes
+\section{Catching Errors with Info Formatting}
+\cindex{Catching errors with Info formatting}
+\cindex{Debugging with Info formatting}
+
+After you have written part of a \LaTeX info file, you can use the\\
+\kbd{M-x latexinfo-format-region} command to see whether the region
+formats properly. In LaTeXinfo Mode, this command is bound to the
+keyboard command \ctrl{c} \ctrl{f}. If you have made a mistake with a
+command, \kbd{M-x latexinfo-format-region} will stop processing at or
+after the error and give an error message. To see where in the file the
+error occurred, switch to the \samp{*Info Region*} buffer; the cursor
+will be in a position that is after the location of the error. Also,
+the text will not be formatted after the place the error occurred (or
+more precisely, where it was detected).\refill
+
+The \code{latexinfo-format-region} command sometimes provides slightly
+odd error messages. For example, if you forget a closing brace,\refill
+
+\begin{example}
+(\back xref\{Catching Formatting Mistakes, for more info.)
+\end{example}
+
+\noindent
+In this case, \code{latexinfo-format-region} detects the missing closing
+brace but displays a message that says \samp{Unbalanced parentheses}
+rather than \samp{Unbalanced braces}. This is because the formatting
+command looks for mismatches between braces as if they were
+parentheses.\refill
+
+Sometimes \code{latexinfo-format-region} fails to detect mistakes. For
+example, in the following, the closing brace is swapped with the
+closing parenthesis:\refill
+
+\begin{example}
+(\back xref\{Catching Formatting Mistakes), for more info.\}
+\end{example}
+
+\noindent
+Formatting produces:
+\begin{example}
+(*Note for more info.: Catching Formatting Mistakes)
+\end{example}
+
+The only way for you to detect this error is to realize that the
+reference should have looked like this:\refill
+
+\begin{example}
+(*Note Catching Formatting Mistakes::, for more info.)
+\end{example}
+
+\begin{ifinfo}
+\beforenoterule
+\begin{sideremark}
+Incidently, if you are reading this node in Info and type \kbd{f
+\key{RET}} (\code{Info-follow-reference}), you will generate an error
+message that says:
+
+\begin{example}
+No such node: "Catching Formatting Mistakes) The only way \dots{}
+\end{example}
+
+\noindent
+This is because Info perceives the example of the error as the first
+cross reference in this node and if you type a \key{RET} immediately
+after typing the Info \kbd{f} command, Info will attempt to go to the
+referenced node. If you type \kbd{f catch \key{TAB} \key{RET}}, Info
+will complete the node name of the correctly written example and take
+you to the `Catching Formatting Mistakes' node. (If you try this, you
+can return from the `Catching Formatting Mistakes' node by typing
+\kbd{l} (\code{Info-last}).)
+\end{sideremark}
+\afternoterule
+\end{ifinfo}
+
+\c !!! section on using Elisp debugger ignored.
+\begin{ignore}
+Sometimes \code{latexinfo-format-region} will stop long after the
+original error; this is because it does not discover the problem until
+then. In this case, you will have to backtrack.\refill
+
+\c menu
+\c * Using the Emacs Lisp Debugger:: How to use the Emacs Lisp debugger.
+\c end menu
+
+\c node Using the Emacs Lisp Debugger
+\c subsection\{Using the Emacs Lisp Debugger\}
+\c index\{Using the Emacs Lisp debugger\}
+\c index\{Emacs Lisp debugger\}
+\c index\{Debugger, using the Emacs Lisp\}
+
+If an error is especially elusive, you can turn on the Emacs Lisp
+debugger and look at the backtrace; this tells you where in the
+\code{latexinfo-format-region} function the problem occurred. You can
+turn on the debugger with the command:\refill
+
+\begin{example}
+M-x set-variable \key{RET} debug-on-error \key{RET} t \key{RET}
+\end{example}
+
+\noindent
+and turn it off with
+
+\begin{example}
+M-x set-variable \key{RET} debug-on-error \key{RET} nil \key{RET}
+\end{example}
+
+Often, when you are using the debugger, it is easier to follow what is
+going on if you use the Emacs Lisp files that are not byte-compiled.
+The byte-compiled sources send octal numbers to the debugger that may
+look mysterious. To use the uncompiled source files, load
+\file{latexinfo.el} and \file{latexinfo-mde.el} with the \kbd{M-x
+load-file} command.\refill
+
+The debugger will not catch an error if \code{latexinfo-format-region}
+does not detect one. In the example shown above,
+\code{latexinfo-format-region} did not find the error when the whole
+list was formatted, but only when part of the list was formatted.
+When \code{latexinfo-format-region} did not find an error, the debugger
+did not find one either. \refill
+
+However, when \code{latexinfo-format-region} did report an error, it
+invoked the debugger. This is the backtrace it produced:\refill
+
+\begin{example}
+---------- Buffer: *Backtrace* ----------
+Signalling: (search-failed "[\},]")
+ re-search-forward("[\},]")
+ (while ...)
+ (let ...)
+ latexinfo-format-parse-args()
+ (let ...)
+ latexinfo-format-xref()
+ funcall(latexinfo-format-xref)
+ (if ...)
+ (let ...)
+ (if ...)
+ (while ...)
+ latexinfo-format-scan()
+ (save-excursion ...)
+ (let ...)
+ latexinfo-format-region(103370 103631)
+* call-interactively(latexinfo-format-region)
+---------- Buffer: *Backtrace* ----------
+\end{example}
+
+The backtrace is read from the bottom up.
+\code{latexinfo-format-region} was called interactively; and it, in
+turn, called various functions, including \code{latexinfo-format-scan},
+\code{latexinfo-format-xref} and \code{latexinfo-format-parse-args}.
+Inside the function \code{latexinfo-format-parse-args}, the function
+\code{re-search-forward} was called; it was this function that could
+not find the missing right-hand brace.\refill
+
+\xref{Lisp Debug, , Debugging Emacs Lisp, emacs, The GNU Emacs
+Manual}, for more information.\refill
+\end{ignore}
+
+\node Debugging with LaTeX, Using latexinfo-show-structure, Debugging with Info, Catching Formatting Mistakes
+\section{Catching Errors with \protect\LaTeX{} Formatting}
+\cindex{Catching errors with \LaTeX{} formatting}
+\cindex{Debugging with \LaTeX{} formatting}
+
+You can also catch mistakes when you format a file with \LaTeX.
+Usually, you will want to do this after you have run
+\code{latexinfo-format-buffer} on the same file, because
+\code{latexinfo-format-buffer} sometimes displays error messages that
+make more sense than \LaTeX. (\xref{Debugging with Info}, for more
+information.)\refill
+
+For example, \LaTeX{} was run on a \LaTeX info file, part of which is shown
+here:\refill
+
+\begin{example}
+---------- Buffer: latexinfo.tex ----------
+name of the latexinfo file as an extension. The
+\back samp\{??\} are `wildcards' that cause the shell to
+substitute all the raw index files. (\back xref\{sorting
+indices, for more information about sorting
+indices.)\back refill
+---------- Buffer: latexinfo.tex ----------
+\end{example}
+
+\noindent
+(The cross reference lacks a closing brace.)
+\LaTeX{} produced the following output, after which it stopped:\refill
+
+\begin{example}
+---------- Buffer: *latexinfo-latex-shell* ----------
+Runaway argument?
+\{sorting indices, for more information about sorting
+indices.) \back refill \back ETC.
+! Paragraph ended before \back xref was complete.
+<to be read again>
+ \back par
+l.27
+
+?
+---------- Buffer: *latexinfo-latex-shell* ----------
+\end{example}
+
+In this case, \LaTeX{} produced an accurate and understandable error message:
+
+\begin{example}
+Paragraph ended before \back xref was complete.
+\end{example}
+
+\noindent
+(\samp{\back par} is an internal \LaTeX{} command, which is how it
+represents a new paragraph marker.) Because the \code{\}} was forgotten
+from the \code{\back xref} command, \LaTeX noticed that the paragraph
+ended before the command was complete.\refill
+
+Unfortunately, \LaTeX{} is not always so helpful, and sometimes you have
+to be truly a Sherlock Holmes to discover what went wrong. In any case,
+if you run into a problem like this, you can do one of two
+things.\refill
+
+\begin{enumerate}
+\item
+You can tell \LaTeX{} to continue running and to ignore errors
+as best it can by typing \kbd{r \key{RET}} at the
+\samp{?} prompt.\refill
+
+This is often the best thing to do. However, beware: the one error
+may produce a cascade of additional error messages as its consequences
+are felt through the rest of the file. (To stop \LaTeX{} when it is
+producing such an avalanche of error messages, type \kbd{C-c} (or
+\kbd{C-c C-c}, if you running a shell inside of Emacs.))\refill
+
+\item
+You can tell \LaTeX{} to stop this run by typing \kbd{x \key{RET}}
+at the \samp{?} prompt.\refill
+\end{enumerate}
+
+Sometimes \LaTeX{} will format a file without producing error messages
+even though there is a problem. This usually occurs if a command is not
+ended but \LaTeX{} is able to continue processing anyhow. For example,
+if you fail to end an itemized list with the \code{\back end\{itemize\}}
+command, \LaTeX{} will write a \scap{dvi} file that you can print out. The
+only error message that \LaTeX{} will give you is the somewhat
+mysterious comment that\refill
+
+\begin{example}
+(\back end occurred inside a group at level 1)
+\end{example}
+
+\noindent
+However, if you print the \scap{dvi} file, you will find that the text of
+the file that follows the itemized list is entirely indented as if it
+were part of the last item in the itemized list. The error message is
+the way \LaTeX{} says that it expected to find an \code{\back end}
+command somewhere in the file; but that it could not determine where it
+was needed.\refill
+
+\node Using latexinfo-show-structure, Using occur, Debugging with LaTeX, Catching Formatting Mistakes
+\section{Using \protect\code{latexinfo-show-structure}}
+\cindex{Showing the structure of a file}
+\findex{latexinfo-show-structure}
+
+It is not always easy to keep track of the nodes, chapters, sections, and
+subsections of a \LaTeX info file. This is especially true if you are revising
+or adding to a \LaTeX info file that someone else has written.\refill
+
+In GNU Emacs, in \LaTeX info mode, the \code{latexinfo-show-structure}
+command lists all the lines that begin with the \back -commands that
+specify the structure: \code{\back chapter}, \code{\back section},
+\code{\back chapter}, and so on. With an argument (prefix, if
+interactive), the command also shows the \code{\back node} lines. The
+\code{latexinfo-show-structure} command is bound to \kbd{C-c C-s} in
+\LaTeX info mode, by default.\refill
+
+The lines are displayed in a buffer called the \samp{*Occur*} buffer.
+For example, when \code{latexinfo-show-structure} was run on an earlier
+version of this appendix, it produced the following:\refill
+
+\begin{smallexample}
+Lines matching "^\back \back \back (chapter\back \back |sect\back \back |sub\back \back |unnum\back \back )" in buffer latexinfo.tex.
+ 4:\back chapter\{Catching Formatting Mistakes\}
+ 52:\back section\{Catching Errors with Info Formatting\}
+222:\back section\{Catching Errors with \back LaTeX\{\} Formatting\}
+338:\back section\{Using \back code\{latexinfo-show-structure\}\}
+407:\back subsection\{Using \back code\{occur\}\}
+444:\back section\{Finding Badly Referenced Nodes\}
+513:\back subsection\{Running \back code\{Info-validate\}\}
+573:\back subsection\{Splitting a File Manually\}
+\end{smallexample}
+
+This says that lines 4, 52, and 222 of \file{latexinfo.tex} begin with
+the \code{\back chapter}, \code{\back section}, and \code{\back section}
+commands respectively. If you move your cursor into the \samp{*Occur*}
+window, you can position the cursor over one of the lines and use the
+\kbd{C-c C-c} command (\code{occur-mode-goto-occurrence}), to jump to
+the corresponding spot in the \LaTeX info file. \inforef{Other
+Repeating Search, Using Occur, emacs}, for more information about
+\code{occur-mode-goto-occurrence}.\refill
+
+\beforenoterule
+\begin{sideremark}
+The first line in the \samp{*Occur*} window describes the \dfn{regular
+expression} specified by \var{latexinfo-heading-pattern}. This regular
+expression is the pattern that \code{latexinfo-show-structure} looks
+for. \inforef{Regexps, Using Regular Expressions, emacs}, for more
+information.\refill
+
+When you invoke the \code{latexinfo-show-structure} command, Emacs will
+display the structure of the whole buffer. If you want to see the
+structure of just a part of the buffer, of one chapter, for example, use
+the \kbd{C-x n} (\code{narrow-to-region}) command to mark the region.
+(\inforef{Narrowing, Narrowing, emacs}.) This is how the example used
+above was generated. To see the whole buffer again, use the command
+\kbd{C-x w} (\code{widen}).\refill
+\end{sideremark}
+\afternoterule
+
+If you call \code{latexinfo-show-structure} with a prefix argument by
+typing \kbd{C-u C-c C-s}, it will list lines beginning with
+\code{\back node} as well as the lines beginning with the \back -commands
+for \code{\back chapter}, \code{\back section}, and the like.\refill
+
+You can remind yourself of the structure of a \LaTeX info file by
+looking at the list in the \samp{*Occur*} window; and if you have
+mis-named a node or left out a section, you can correct the
+mistake.\refill
+
+\node Using occur, Running Info-Validate, Using latexinfo-show-structure, Catching Formatting Mistakes
+\section{Using \protect\code{occur}}
+\cindex{Occurrences, listing with \code{\back occur} }
+\findex{occur}
+
+Sometimes the \code{latexinfo-show-structure} command produces too much
+information. Perhaps you want to remind yourself of the overall structure
+of a \LaTeX info file, and are overwhelmed by the detailed list produced by
+\code{latexinfo-show-structure}. In this case, you can use the \code{occur}
+command directly. To do this, type\refill
+
+\begin{example}
+\kbd{M-x occur}
+\end{example}
+
+\noindent
+and then, when prompted, type a \dfn{regexp}, a regular expression for
+the pattern you want to match. (\inforef{Regexps, Regular Expressions,
+emacs}.) The \code{occur} command works from
+the current location of the cursor in the buffer to the end of the
+buffer. If you want to run \code{occur} on the whole buffer, place
+the cursor at the beginning of the buffer.\refill
+
+For example, to see all the lines that contain the word \samp{\back
+chapter} in them, just type \samp{\back \back chapter}. This will
+produce a list of the chapters. It will also list all the sentences
+with \samp{\back chapter} in the middle of the line. If you want to see
+only those lines that start with the word \samp{\back chapter}, type
+\samp{^\back \back chapter} when prompted by \code{occur}. If you want
+to see all the lines that end with a word or phrase, end the last word
+with a \samp{$}; for example, \samp{Catching Formatting Mistakes$}. This can be helpful when you want to see
+all the nodes that are part of the same chapter or section and therefore
+have the same `Up' pointer.\inforef{Other Repeating Search, Using Occur,
+emacs}, for more information.\refill
+
+\node Running Info-Validate, Using Info-validate, Using occur, Catching Formatting Mistakes
+\section{Finding Badly Referenced Nodes}
+\findex{Info-validate}
+\cindex{Nodes, checking for badly referenced}
+\cindex{Checking for badly referenced nodes}
+\cindex{Looking for badly referenced nodes}
+\cindex{Finding badly referenced nodes}
+\cindex{Badly referenced nodes }
+
+You can use the \code{Info-validate} command to check whether any of
+the `Next', `Previous', `Up' or other node pointers fail to point to a
+node. This command checks that every node pointer points to an
+existing node. The \code{Info-validate} command works only on Info
+files, not on \LaTeX info files.\refill
+
+
+\begin{menu}
+* Using Info-validate:: How to run \code{Info-validate}.
+* Unsplit:: How to create an unsplit file.
+* Tagifying:: How to tagify a file.
+* Splitting:: How to split a file manually.
+\end{menu}
+
+\node Using Info-validate, Unsplit, Running Info-Validate, Running Info-Validate
+\subsection{Running \protect\code{Info-validate}}
+\cindex{Running \code{Info-validate}}
+\cindex{Info validating a large file}
+\cindex{Validating a large file}
+
+To use \code{Info-validate}, visit the Info file you wish to check and
+type:\refill
+
+\begin{example}
+M-x Info-validate
+\end{example}
+
+\noindent
+(Note that the \code{Info-validate} command requires an upper case
+`I'. You may also need to create a tag table before running
+\code{Info-validate}. \xref{Tagifying}.)\refill
+
+If your file is valid, you will receive a message that says ``File appears
+valid''. However, if you have a pointer that does not point to a node,
+error messages will be displayed in a buffer called \samp{*problems in
+info file*}.\refill
+
+For example, \code{Info-validate} was run on a test file that contained
+only the first node of this manual. One of the messages said:\refill
+
+\begin{example}
+In node "Overview", invalid Next: LaTeXinfo Mode
+\end{example}
+
+\noindent
+This meant that the node called \samp{Overview} had a `Next' pointer that
+did not point to anything (which was true in this case, since the test file
+had only one node in it).\refill
+
+Now suppose we add a node named \samp{LaTeXinfo Mode} to our test case
+but we don't specify a `Previous' for this node. Then we will get
+the following error message:\refill
+
+\begin{example}
+In node "LaTexinfo Mode", should have Previous: Overview
+\end{example}
+
+\noindent
+This is because every `Next' pointer should be matched by a
+`Previous' (in the node where the `Next' points) which points back.
+\code{Info-validate} also checks that all menu items and cross references
+point to actual nodes.\refill
+
+Note that \code{Info-validate} requires a tag table and does not work
+with files that have been split. (The \code{latexinfo-format-buffer}
+command automatically splits files larger than 100,000 bytes.) In
+order to use \code{Info-validate} on a large file, you must run
+\code{latexinfo-format-buffer} with an argument so that it does not
+split the Info file; and you must create a tag table for the unsplit
+file.\refill
+
+\node Unsplit, Tagifying, Using Info-validate, Running Info-Validate
+\subsection{Creating an Unsplit File}
+\cindex{Creating an unsplit file}
+\cindex{Unsplit file creation}
+
+You can run \code{Info-validate} only on a single Info file that has a
+tag table. The command will not work on the indirect subfiles that are
+generated when a master file is split. If you have a large file (longer
+than 70,000 bytes or so), you need to run the
+\code{latexinfo-format-buffer} command in such a way that it does not
+create indirect subfiles. You will also need to create a tag table for
+the Info file. After you have done this, you can run
+\code{Info-validate} and look for badly referenced nodes.\refill
+
+The first step is to create an unsplit Info file. To prevent
+\code{latexinfo-format-buffer} from splitting a \LaTeX info file into
+smaller Info files, give a prefix to the \kbd{M-x
+latexinfo-format-buffer} command:\refill
+
+\begin{example}
+C-u M-x latexinfo-format-buffer
+\end{example}
+
+\noindent
+When you do this, \LaTeX info will not split the file and will not create
+a tag table for it. \refill
+\cindex{Making a tag table manually}
+\cindex{Tag table, making manually}
+
+\node Tagifying, Splitting, Unsplit, Running Info-Validate
+\subsection{Tagifying a File}
+
+After creating an unsplit Info file, you must create a tag table for
+it. Visit the Info file you wish to tagify and type:\refill
+
+\begin{example}
+M-x Info-tagify
+\end{example}
+
+\noindent
+(Note the upper case \key{I} in \code{Info-tagify}.) This creates an
+Info file with a tag table that you can validate.\refill
+
+The third step is to validate the Info file:\refill
+
+\begin{example}
+M-x Info-validate
+\end{example}
+
+\noindent
+(Note the upper case \key{I} in \code{Info-validate}.)
+In brief, the steps are:\refill
+
+\begin{example}
+\begin{same}
+C-u M-x latexinfo-format-buffer
+M-x Info-tagify
+M-x Info-validate
+\end{same}
+\end{example}
+
+After you have validated the node structure, you can rerun
+\code{latexinfo-format-buffer} in the normal way so it will construct a
+tag table and split the file automatically, or you can make the tag
+table and split the file manually.\refill
+
+\node Splitting, Extending LaTeXinfo, Tagifying, Running Info-Validate
+\subsection{Splitting a File Manually}
+\cindex{Splitting an Info file manually}
+\cindex{Info file, splitting manually}
+
+You should split a large file or else let the
+\code{latexinfo-format-buffer} command do it for you automatically.
+(Generally you will let one of the formatting commands do this job for
+you. \xref{Creating and Installing an Info File}.)\refill
+
+The split off files are called the indirect subfiles. Info files are
+split to save memory. With smaller files, Emacs does not have make such
+a large buffer to hold the information. If an Info file has more than
+30 nodes, you should also make a tag table for it. \xref{Using
+Info-validate}, for information about creating a tag table. (Again, tag
+tables are usually created automatically by the formatting command; you
+only need to create a tag table yourself if you are doing the job
+manually. Most likely, you will do this for a large, unsplit file on
+which you have run \code{Info-validate}.)\refill
+
+\c Info-split is autoloaded in `loaddefs.el' in Emacs 18.51
+\begin{ignore}
+Before running \code{Info-split}, you need to load the \code{info} library
+into Emacs by giving the command \kbd{M-x load-library \key{RET} info
+\key{RET}}.
+\end{ignore}
+
+Visit the file you wish to tagify and split and type the two
+commands:\refill
+
+\begin{example}
+M-x Info-tagify
+M-x Info-split
+\end{example}
+
+\noindent
+(Note that the \samp{I} in \samp{Info} is upper case.)\refill
+
+When you use the \code{Info-split} command, the buffer is modified into a
+(small) Info file which lists the indirect subfiles. This file should be
+saved in place of the original visited file. The indirect subfiles are
+written in the same directory the original file is in, with names generated
+by appending \samp{-} and a number to the original file name.\refill
+
+The primary file still functions as an Info file, but it contains just
+the tag table and a directory of subfiles.\refill
+
+
+\node Extending LaTeXinfo, Optional Style Files, Splitting, Top
+\chapter{Extending LaTeXinfo}
+\cindex{Extending LaTeXinfo}
+
+One of the advantages of \LaTeX info is that it is easy to add your own
+extensions. Adding new styles in a standard feature of \LaTeX,
+and this makes it easy to modularize your additions by plcing them in
+style files. There are a large number of publically available style
+files that can be found on the \t{Internet} by \t{anonymous ftp}, for
+example on \code{soe.clarkson.edu}.
+
+In \LaTeX info, you can similarly make additions to the on-line manual
+generator by making GNU Emacs handlers for your \LaTeX\ extensions.
+This is the Emacs counterpart to the \code{documentstyle} options.
+\LaTeX info looks in a specified directory for GNU Elisp code that
+corresponds to each style file, by looking for the file named
+\code{\var{style}-fmt.el}. If this file is found, then it is loaded
+into the Emacs session when \code{latexinfo-format-buffer} is called
+(\pxref{Creating an Info file}). Look in the \code{styles} and
+\code{elisp} directories of the \LaTeX info distribution for examples of
+this, and in the next section we will show a simple example of how this works.
+
+\begin{menu}
+* Optional Style Files::
+* LaTeXinfo support for European languages::
+* Writing Your Own Style Files::
+\end{menu}
+
+\node Optional Style Files, The fvpindex Style, Extending LaTeXinfo, Extending LaTeXinfo
+\section{Optional Style Files}
+
+\LaTeX\ provides a number of optional style files by default. These
+include \code{latexinfo, 11pt, 12pt, twoside} and \code{titlepage}. If
+any of the optional styles is a member of the Emacs variable
+\code{latexinfo-known-document-styles}, then \LaTeX info does not bother
+to look for the associated \code{-fmt} file. By default this list is:
+\begin{example}
+'(latexinfo 11pt 12pt twoside titlepage A4 a4 dina4 psfonts format))
+\end{example}
+
+\begin{menu}
+* The fvpindex Style::
+* Clisp Style::
+\end{menu}
+
+
+\node The fvpindex Style, Clisp Style, Optional Style Files, Optional Style Files
+\subsection{The fvpindex Style}
+\subsection{fvpindex Style}
+\cpsubindex{styles}{fvpindex}
+
+
+Let's say that you wanted to develop a special style for a program,
+which defined the command \code{\back f} to be used for specifying
+functions. This command would put its argument in the function index,
+and set the function in the printed manual in a special font. The
+\LaTeX\ commands to do this are quite simple. Firstly, define the
+\code{\back f} command, to put its argument in the \code{fn} index, and
+set its argument in \code{sf} font.
+
+\begin{verbatim}
+\def\f#1{\findex{#1}{\sf #1}}
+\end{verbatim}
+
+\noindent
+But what about the Info file? As it stands, the command \code{\back f}
+is not defined in \LaTeX info, so when you formatted the buffer it would
+ignore all the \code{\back f} commands, and their arguments. You need
+to introduce the appropriate Emacs lisp code to provide the definition
+of the command that you have added. For each option in the
+\code{documentstyle} command, \LaTeX info looks to see if the file name
+\var{option}\code{-fmt.el} exists in the directory defined by the Emacs
+variable \code{latexinfo-formats-directory}. (This variable defaults to
+the value of the environment variable \code{LATEXINFO}, or if that has not
+been defined, then the current directory). If it does exist, then it loads
+this file. So continuing with our example, if the file
+\file{fvpindex-fmt.el} contained the code
+
+\begin{example}
+(put 'f 'latexinfo-format 'latexinfo-format-code)
+\end{example}
+
+\noindent
+then it would define the \code{\back f} command to treat its argument
+the same way that the \code{\back code} command does.
+
+After the \var{option}\code{-fmt.el} has been loaded, \LaTeX info checks
+to see if a function (of no arguments) called \var{option}\code{-fmt-hook}
+has been defined. If so, this function is called. This allows you to
+define functions in the \var{option}\code{-fmt.el} file that operate
+on the whole \LaTeX info file.
+
+You can use the \code{\back documentstyle} optional called
+\code{fvpindex} that loaded the style \file{fvpindex.sty}, which contains
+these definitions, and similar definitions for \code{\back v} and
+\code{\back p}. Include \code{fvpindex} in the list of options to the
+\code{documentstyle} command, \emph{after} the \code{latexinfo} option.
+Your \LaTeX info file would begin with something like:
+
+\begin{verbatim}
+\documentstyle[12pt,latexinfo,fvpindex]{book}
+\end{verbatim}
+
+This provides a convenient way of documenting all functions, variables
+ans packages of a program, and having their names automatically entered
+in the appropriate index, and set in the font of your choice.
+Additionally, if you are using \code{fvpindex} in conjunction with the
+\code{elisp} or \code{clisp} styles, you will find that the \code{\back
+defun} commands put their index entries in in index in bold type,
+whereas the definitions for \code{\back f}, \code{\back v} and
+\code{\back p} set their entries in normal type. This allows you to
+distinguish where the function was defined, and where it was simply
+referenced.
+
+\node Clisp Style, LaTeXinfo support for European languages, The fvpindex Style, Optional Style Files
+\subsection{Clisp Style}
+\cindex{Clisp Style}
+\cpsubindex{styles}{clisp}
+\findex{clisp}
+
+A more modern approach to the Lisp \code{back defun} commands can be
+found in the style \code{clisp}. The format of the commands is similar
+to that found in the earlier chapter on Definition Commands
+(\pxref{Definition Commands}). This style is still evolving, and may have
+new features of changes in the next release of \LaTeX info. The
+commands of this style are summarized below.
+
+\begin{table}[hbtp]
+\begin{tabular}{||l|l|l||}
+\hline
+Command Name & Language & Class \\
+\hline
+deffn & Lisp & general functions \\
+deffun & Lisp & functions \\
+defspec & Lisp & special forms \\
+defmac & Lisp & macros \\
+defvr & Lisp & general variables \\
+defvar & Lisp & variables \\
+defconst & Lisp & constants \\
+\hline
+\end{tabular}
+\caption{The Clisp Definition Commands}
+\end{table}
+
+The principal differences between this style and the \code{elisp}
+style are the following:
+\begin{itemize}
+\item An optional parameter can be defined after the name of the command,
+that is used to indicate the package to which the entity belongs. Insert
+this optional argument in the traditional \LaTeX\ style of using square
+brackets.
+\item The function arguments can contain the keywords
+\code{\back &optional}, \code{\back &rest}, and \code{\back &key}.
+\item The function arguments can contain the functions
+\code{\back keys\{\dots\}} and \code{\back morekeys\{\dots\}} to properly
+align the keyword arguments of a function.
+\item The variable and function index entries are coerced to lower case.
+\item The commands \code{\back true}, \code{\back false}, \code{\back empty}
+and \code{\back nil} are defined to print as \true, \false, \empty
+and \nil\ respectively.
+\end{itemize}
+
+\paragraph*{\back defun\{\var{name}\}[\var{package}]\{\var{arguments}\dots{}\}}
+
+The \code{\back defun} command is the definition command for functions.
+\code{\back defun} is equivalent to \samp{\back deffn\{Function\}
+\dots{}}. The package argument is optional, and the square brackets are
+omitted if no package is provided. Within the argument list, the
+following keywords are recognized: \code{\back &optional}, \code{\back
+&rest}, and \code{\back &key}. They print as themselves in the
+\code{\back code} font.
+
+The argument names on the \code{\back defun} line do not automatically
+appear in italics in the printed manual; they should be enclosed in
+\code{\back var}. Terminate the definition with \code{\back enddefun}
+on a line of its own.
+
+Within the argument list, the following commands are recognized:
+\begin{description}
+\item[\code{\back args\{\}}] which does nothing.
+\item[\code{\back keys\{\dots{}\}}] prints the word \code{\& key},
+and sets the tab stop to be align subsequent keys.
+\item[\code{\back morekeys\{\dots\}}]
+starts a new line and
+moves to the tab stop set by \code{\back keys}.
+
+\item[\code{\back yetmorekeys\{\dots\}}]
+
+the same as
+\code{\back morekeys}.
+\end{description}
+
+\begin{implementation}
+The arguments to these functions are set with a \LaTeX\ minpage environment.
+This means that new lines within the argument list will start new lines
+in the region between the function name and the function type. Furthermore,
+the arguments are contained within a \code{tabbing} environment, that allows
+the use of the \code{\back =} and \code{\back >} tab--set and tab commands.
+This allows one to line up parts of the argument list, such as keys, and
+the \code{\back *keys} commands are implemented in terms of these.
+\end{implementation}
+
+\paragraph*{\back defmac\{\var{name}\}[\var{package}]\{\var{arguments}\dots{}\}}
+
+The \code{\back defmac} command is the definition command for macros.
+\code{\back defmac} is equivalent to \samp{\back deffn\{Macro\}
+\dots{}}. The package argument is optional, and the square brackets are
+omitted if no package is provided. Within the argument list, the
+following commands are recognized: \code{\back &optional}, \code{\back
+&rest}, and \code{\back &key}. They print as themselves in the
+\code{\back code} font. \code{\back defspec} is similarly defined
+for special forms.
+
+Within the \code{\back defun} and \code{\back defmac} argument lists, the
+following special functions are recognized:
+\begin{description}
+\item[mopt] To indicate \mopt{optional forms}.
+\item[mchoice] To indicate \mchoice{a choice of forms}.
+\item[mstar] To indicate 0 or more \mstar{optional forms}.
+\item[mplus] To indicate 1 or more \mplus{forms}.
+\item[mgroup] To indicate a group of \mplus{forms}.
+\item[mor] To indicate an or between \mor\ forms.
+\item[mind] To indicate an \mind{form}.
+\end{description}
+
+\noindent
+For more information on this syntax, see \cite{Steele1990}.
+
+\paragraph*{\back defvar\{\var{name}\}[\var{package}]}
+The \code{\back defvar} command is the definition command for variables.
+\code{\back defvar} is equivalent to \samp{\back deffn\{Variable\}}.
+\code{\back defconst} is similarly defined for constants.
+
+\findex{deffnx}
+\findex{deffunx}
+\findex{defspecx}
+\findex{defmacx}
+\findex{defvrx}
+\findex{defvarx}
+\findex{defconstx}
+
+In addition to these commands, there are the corresponding ``head-less''
+commands: \code{\back deffnx}, \code{\back deffunx}, \code{\back
+defspecx}, \code{\back defmacx}, \code{\back defvrx}, \code{\back
+defvarx}, \code{\back defconstx}, which are defined identically to
+the corresponding commands expect that no extra space is put before
+the command heading. You can use these on the second or more of a
+section that describes a number of definitions.
+
+\clearpage
+\node LaTeXinfo support for European languages, LaTeXinfo support for European languages, Clisp Style, Extending LaTeXinfo
+\section{LaTeXinfo support for European languages}
+\cindex{diacritical marks}
+\findex{c}
+
+\LaTeX info tries to support European languages, but it is an area
+that is in great flux right now. \file{german.sty} is supported as
+an optional file, and this will also provide some support for French.
+
+The following diacrtical marks are supported by default in \LaTeX info,
+either in the form \code{\back \var{letter}} or \code{\back \{\var{letter}\}}
+\findex{c}
+\findex{^}
+\findex{`}
+\findex{'}
+
+\begin{description}
+\item[\code{\back ^}] Circumflex accent: \^c.
+\item[\code{\back `}] Accute accent: \`e.
+\item[\code{\back '}] Grave accent: \'e.
+\item[\code{\back "}] Tr\'emat: \"o.
+\end{description}
+\noindent
+In the Info file, these marks are removed.
+
+\findex{i}
+\findex{b}
+\findex{c}
+But note that by default, the commands \code{\back c}, \code{\back b}
+\code{\back i} are used for other purposes than their \LaTeX\ usage
+as diacritical marks.
+
+The hyphenation character \code{\back -} is also supported.
+
+To support Multi-lingual \TeX, \code{latexinfo.sty} looks for the presence
+of the \LaTeX\ number \code{\back language}, which are assumed to be defined
+as follows:
+
+\begin{verbatim}
+\newcount\USenglish \global\USenglish=0
+\newcount\german \global\german=1
+\newcount\austrian \global\austrian=2
+\newcount\french \global\french=3
+\newcount\english \global\english=4
+\end{verbatim}
+
+The presence of \code{\back language} set to any of \code{\back english}
+\code{\back english}, \code{\back french} or \code{\back german} changes
+the way the cross-references are printed in \LaTeX.
+The default is \code{\back english}.
+
+\subsection{german.sty}
+
+\LaTeX info has support for the file \file{german.sty}, as of
+Vers. 2.3, 7 Aug 1990, collected by H. Partl (TU Wien), using ideas
+
+by W. Appelt, F. Hommes et al. (GMD St.Augustin), T. Hofmann
+(CIBA-GEIGY Basel), N. Schwarz (Uni Bochum), J. Schrod (TH Darmstadt),
+D. Armbruster (Uni Stuttgart), R. Schoepf (Uni Mainz), and others. It
+is a document style option for writing german texts with \TeX\ or
+\LaTeX. It can be called via adding the \code{german} option to the
+\code{\back documentstyle} command.
+
+\begin{note}
+User's should resort to their already-installed version of \file{german.sty}
+(if any) before using the one from \LaTeX info, so the existing \LaTeX\
+site documentation won't break. Various copies of this file exist from
+different eras; you may wish to inquire if one is already installed at
+your site, and look to see if it is more or less recent than the one
+distributed with \LaTeX info.
+\end{note}
+
+To support Multi-lingual \TeX, \code{latexinfo.sty} looks for the presence
+of the \LaTeX\ number \code{\back language}, and if it is set to
+\code{\back german}, it sets the cross-references in German, and
+looks to see if \code{\back mdqon} is defined. If so, it lets double quotes
+have their special meaning, and otherwise sets them as double quotes in
+typewriter font.
+
+\begin{implementation}
+This file conforms to the standard for \i{Einheitliche deutsche TeX-Befehle}
+as proposed at the 6th Meeting of German TeX Users in Muenster, October 1987.
+\end{implementation}
+
+\subsubsection{Commands to be used by the end users}
+
+\begin{description}
+
+\item["a]
+ for Umlaut-a (like \"a), also for all other vowels.
+
+\item["s]
+ for sharp s (like \code{\back ss}{}).
+
+\item["ck]
+ for ck to be hyphenated as k-k.
+
+\item["ff]
+ for ff to be hyphenated as ff-f, also for certain
+ other consonants.
+
+\item["|]
+ to separate ligatures.
+
+\item["-]
+ like \-, but allowing hyphenation in the rest of
+ the word.
+
+\item[""]
+ like "-, but producing no hyphen sign.
+
+\item["` or \code{\back glqq}]
+ for german left double quotes (similar to ,,)
+
+\item["' or \code{\back grqq}]
+ for german right double quotes (similar to ``)
+
+\item[\code{\back glq}]
+ for german left single quotes (similar to , )
+
+\item[\code{\back grq}]
+ for german right single quotes (similar to ` )
+
+\item["< or \code{\back flqq}]
+ for french left double quotes (similar to <<)
+
+\item["> or \code{\back frqq}]
+ for french right double quotes (similar to >>)
+
+\item[\code{\back flq}]
+ for french left single quotes (similar to < )
+
+\item[\code{\back frq}]
+ for french right single quotes (similar to > )
+
+\item[\code{\back dq}]
+ for the original quotes character (")
+
+\item[\code{\back setlanguage}{n}]
+ to switch to the language specified by n, which should be one of the
+following command names:
+
+\item[\code{\back austrian} \code{\back french} \code{\back english}
+\code{\back german} \code{\back USenglish}] this changes the date
+format, captions and (if ``multilingual TeX''is installed) hyphenation.
+
+\item[\code{\back originalTeX}] to restore everything to the original
+settings of \TeX{} and \LaTeX{} (well, almost everything).
+
+\item[\code{\back germanTeX}] to re-activate the german settings.
+\end{description}
+
+\begin{menu}
+* Obsolete Commands::
+* Lower Level Commands and Features::
+\end{menu}
+
+\node Obsolete Commands, Lower Level Commands and Features, LaTeXinfo support for European languages, LaTeXinfo support for European languages
+\subsubsection{Obsolete Commands}
+
+Obsolete commands, provided for compatibility with existing applications:
+
+\begin{description}
+
+\item[\back 3]
+ for sharp s (like "s).
+\item[\code{\back ck}]
+ for ck to be hyphenated as k-k (like "ck).
+\end{description}
+
+\node Lower Level Commands and Features, Writing Your Own Style Files, Obsolete Commands, LaTeXinfo support for European languages
+\subsubsection{Lower Level Commands and Features}
+
+\begin{description}
+\item[\code{\back umlautlow}]
+ redefines the Umlaut accent such that the dots come nearer to the
+letter and that hyphenation is enabled in the rest of the word.
+
+\item[\code{\back umlauthigh}]
+ restores \" to its original meaning.
+
+\item[\code{\back ss}]
+ is \code{\back lccode}'d to enable hyphenation.
+
+\item[\code{\back mdqon}]
+ makes " an active (meta-) character that does the pretty things
+described above.
+
+\item[\code{\back mdqoff}]
+ restores " to its original meaning.
+
+\item[\code{\back dospecials}, \@sanitize]
+ are redefined to include ".
+
+\item[\code{\back dateaustrian}, \code{\back dategerman}, \code{\back dateenglish}, \code{\back dateUSenglish}, \code{\back datefrench}]
+ redefine \code{\back today} to use the respective date
+format.
+
+\item[\code{\back captionsgerman}, \code{\back captionsenglish},
+\code{\back captionsfrench}]
+switch to german, english or french chapter captions and the like, resp.
+This will have an effect only if the document style files use the
+symbolic names \code{\back chaptername} etc. instead of the original
+english words.
+
+\item[\code{\back language}]
+ a count that is set by \code{\back setlanguage} and can be used
+ by document style declarations like
+\begin{verbatim}
+\ifnum\language=\english .textengl.\else
+\ifnum\language=\german .textgerm.\fi\fi
+\end{verbatim}
+and/or by M.Ferguson's ``Multilingual T\^eX''.
+\end{description}
+
+Finally, \code{\back germanTeX} is switched on.
+
+This file can be used both with Plain \TeX{} and with \LaTeX{} and other macro
+packages, and with the original \TeX{} and \LaTeX{} fonts. Usage of german
+hyphenation patterns is recommended to accompany this style file when
+writing german texts.
+
+The file should be read in vertical mode only (usually at the
+beginning of the document) to avoid spurious spaces.
+\code{\back undefined} must be an undefined control sequence.
+
+Multiple calls of this file (e.g. at the beginning of each subfile) will do
+no harm. Only the first call (i.e., if \code{\back mdqon} is undefined)
+performs all the definitions and settings.
+
+The catcode of \key{@} remains unchanged after processing of this file.
+All definitions are global, the switching on of the german options
+is local.
+
+The commands \code{\back mdqon}, \code{\back mdqoff}, \code{\back
+originalTeX}, \code{\back germanTeX}, and \code{\back setlanguage} are
+``fragile'' with \LaTeX{} and should not be used within arguments of macro
+calls.
+
+In Plain TeX, `\code{\back protect}' should be \code{\back let} to
+`\code{\back relax}' normally and to something like `\code{\back string}'
+inside the arguments of `\code{\back write}' or `\code{\back message}' (see
+LaTeX.TEX for all the details).
+
+The command \code{\back umlautlow} may need adaption to font parameters (see
+comments there for details).
+
+The commands \code{\back flqq}, \code{\back frqq}, \code{\back flq},
+\code{\back frq}, and \code{\back datefrench} in their present forms do not
+work properly with all font sizes and styles, they still require a better
+solution.
+
+\node Writing Your Own Style Files, Installing LaTeXinfo, Lower Level Commands and Features, Extending LaTeXinfo
+\section{Writing Your Own Style Files}
+\cindex{LATEXINFO environment variable}
+\cindex{environment variable, LATEXINFO}
+
+<to be written>
+
+\part{Appendices}
+\appendix
+
+\node Installing LaTeXinfo, Compiling LaTeXinfo, Writing Your Own Style Files, Top
+\chapter{Installing LaTeXinfo}
+
+\begin{menu}
+* Compiling LaTeXinfo::
+* Installing the LaTeXinfo Distribution::
+\end{menu}
+
+\node Compiling LaTeXinfo, Installing the LaTeXinfo Distribution, Installing LaTeXinfo, Installing LaTeXinfo
+\section{Compiling LaTeXinfo}
+
+To compile \LaTeX info:
+\begin{enumerate}
+
+\item Run the shell script \file{configure}. You will be
+asked to provide the following:
+
+\begin{description}
+\item[BINDIR]
+Where to install the executables.
+
+\item[INFODIR]
+Where to install the info files.
+
+\item[EMACS]
+the name of your GNU Emacs.
+\end{description}
+
+\noindent
+These must exists, and you must be able to write to these directories.
+For example,
+
+\begin{example}
+Where would you like to install the binaries?
+
+ Please type the full path to your binaries directory:
+ >/usr5/gnu/bin-sparc
+
+ The binaries path was verfied to be [/usr5/gnu/bin-sparc]
+
+Where are the Gnu Info files located?
+
+ Please type the full path to your info directory:
+ >/usr5/gnu/info
+
+ The Info directory was verfied to be [/usr5/gnu/info]
+
+Where is your GNU Emacs command:
+
+ Please type the name of your GNU Emacs command:
+ >xemacs
+\end{example}
+
+\item Then you will be asked:
+
+\begin{example}
+Would you like to install the elisp and LaTeX files elsewhere,
+or leave them here, and set an environment variable to point to here?
+
+Set an environment variable to point to here [y/n]?
+\end{example}
+
+If you choose
+\begin{description}
+\item[y] \file{configure} will set the environment variable
+\code{LATEXINFO} in the \file{.login} to point to this directory,
+and you won't need to \code{make install}.
+
+\item[n] You will be asked about:
+
+\begin{description}
+\item[ELISPDIR]
+Where to install the compiled Elisp code.
+
+\item[TEXDIR]
+Where to install the style files.
+\end{description}
+
+For example,
+
+\begin{example}
+Set an environment variable to point to here [y/n]? n
+
+Where would you like to install GNU Emacs code (elisp)?
+
+ Please type the full path to your elisp directory:
+ >/usr5/gnu/lib/emacs/latexinfo
+
+ The elisp path was verfied to be [/usr5/gnu/lib/emacs/latexinfo]
+
+Where would you like to install the LaTeX style files?
+
+ Please type the full path to your LaTeX style directory:
+ >/usr5/gnu/lib/tex
+
+ The LaTeX style path was verfied to be [/usr5/gnu/lib/tex]
+\end{example}
+\end{description}
+
+\item Type \code{make}.
+This will make the executables \code{latexindex}, \code{info},
+make the manual, and compile the \file{.el} files. It will also make
+the files \code{.emacs} and \code{.login}.
+
+\end{enumerate}
+
+You may also have to change the definitions of your LaTeX commands in the
+shell script \file{manual/latex2dvi} is you are unusual.
+
+\clearpage
+\node Installing the LaTeXinfo Distribution, Installing the Style Files, Compiling LaTeXinfo, Installing LaTeXinfo
+\section{Installing the LaTeXinfo Distribution}
+
+\begin{enumerate}
+\item
+If you chose to install the elisp and LaTeX files elsewhere,
+type \code{make install} to make the executables,
+the manual and compile the \file{.el} files. This will
+
+\begin{description}
+\item[\code{make install.C}]
+which will move the executables to \code{BINDIR}.
+
+\item[\code{make install.manual}]
+which will move a copy of the files \file{manual/latexinfo.info*} to the
+info directory of the GNU Emacs distribution specified by
+\code{INFODIR}, and a copy of the sample file to the \LaTeX\ styles
+directory specified by \code{TEXDIR}.
+
+\item[\code{make install.elisp}]
+which will move a copy of the files \file{styles/*.elc} to the
+the GNU Emacs lisp directory specified by \code{ELISPDIR}.
+
+\item[\code{make install.styles}]
+which will move a copy of the files \file{styles/*.sty} to the
+the \LaTeX\ styles directory specified by \code{TEXDIR}.
+\end{description}
+
+\item
+Edit the \file{dir} file in \code{INFO} directory to include lines like
+
+\begin{verbatim}
+* LaTeXinfo: (latexinfo2.info). With one source file, make either a
+ manual using LaTeX or an Info file.
+\end{verbatim}
+
+\item
+Include a copy of the \file{.emacs} file in your \code{~/.emacs}.
+
+\item
+Include a copy of the \file{.login} file in your \code{~/.login}.
+
+\item Print a copy of the \file{manual/latexinfo.dvi} file and
+enjoy.
+\end{enumerate}
+
+\xref{Installing an Info File}, for more information on installing an info
+file. \xref{Installing the Style Files}, for more information on
+installing style files.\refill
+
+
+\begin{menu}
+* Installing the Style Files::
+\end{menu}
+
+\node Installing the Style Files, Converting Files to LaTeXinfo, Installing the LaTeXinfo Distribution, Installing the LaTeXinfo Distribution
+\subsection{Installing the Style Files}
+\cindex{\code{TEXINPUTS} environment variable}
+\cindex{\b{.login} initialization file}
+
+Usually, the \file{latexinfo.sty} file is put in the default directory
+that contains \LaTeX{} macros, something like the directory
+\file{/usr/local/lib/tex/inputs}, which is created when \LaTeX\ is
+installed. In this case, \LaTeX{} will find the file and you don't have
+to do anything special. Alternatively, you can put \file{latexinfo.sty}
+in the directory in which each \LaTeX info source file is located, and
+\LaTeX{} will find it there.\refill
+
+However, you may want to specify the location of the \code{\back input}
+file yourself. One way is to set the \code{TEXINPUTS} environment
+variable in your \file{.login} or \file{.profile} file. The
+\code{TEXINPUTS} environment variable will tell
+\LaTeX{} where to find the \file{latexinfo.sty} file and any other file that
+you might want \LaTeX{} to use. This is done by the \code{.login} file
+supplied with the \LaTeX info distribution.\refill
+
+Whether you use a \file{.login} or \file{.profile} file depends on
+whether you use \code{csh}, \code{sh}, or \code{bash} for your shell
+command interpreter. When you use \code{csh}, it looks to the
+\file{.login} file for initialization information, and when you use
+\code{sh} or \code{bash}, it looks to the \file{.profile} file.\refill
+
+In a \file{.login} file, you could use the following \code{csh} command
+sequence:\refill
+
+\begin{verbatim}
+setenv LATEXINFO /usr/me/mylib
+# Add the format files to the list of directories that LaTeX searches.
+if ( $?TEXINPUTS ) then
+ setenv TEXINPUTS "$TEXINPUTS"':'"$LATEXINFO"
+ else
+ setenv TEXINPUTS "$LATEXINFO"
+endif
+\end{verbatim}
+
+In a \file{.profile} file, you could use the following \code{sh} command
+sequence:
+
+\begin{example}
+TEXINPUTS=.:/usr/me/mylib:/usr/lib/tex/macros
+export TEXINPUTS
+\end{example}
+
+\noindent
+This would cause \LaTeX{} to look for the style file first in the
+current directory, indicated by the \samp{.}, then in a hypothetical
+user's \file{me/mylib} directory, and finally in the system
+library.\refill
+
+\node Converting Files to LaTeXinfo, Converting LaTeX Files to LaTeXinfo, Installing the Style Files, Top
+\chapter{Converting Files to LaTeXinfo}
+
+\begin{menu}
+* Converting LaTeX Files to LaTeXinfo::
+* Converting TeXinfo Files into LaTeXinfo Files::
+* Converting Scribe Files to LaTeXinfo::
+\end{menu}
+
+\node Converting LaTeX Files to LaTeXinfo, l2latexinfo.el, Converting Files to LaTeXinfo, Converting Files to LaTeXinfo
+\section{Converting LaTeX Files to LaTeXinfo}
+
+\LaTeX info files are essentially a special style of standard \LaTeX\ files.
+To make a standard \LaTeX\ file into a \LaTeX info file, you must begin it with
+the lines
+
+\begin{verbatim}
+\documentstyle[12pt,latexinfo]{book}
+\pagestyle{headings}
+
+\begin{document}
+
+\setfilename{latexinfo.info}
+\end{verbatim}
+
+\noindent
+\xref{A Short Sample LaTeXinfo File}, for details of how a \LaTeX info file
+begins. Once you have added these lines, you will have a document that will
+pass both \LaTeX, and Info formating program, but it will be a document
+with any node structure, so it will be in essence one large node.
+(\xref{Nodes and Menus} for more information on nodes.)\refill
+
+This is not very useful for the people who read the document under the
+info program. To add nodes and menus to the document, you can do it by
+hand, or you can use the function \code{latexinfo-insert-node-lines}
+(\pxref{Other Updating Commands}.) Alternatively, use the
+\code{l2latexinfo.el} file provided with \LaTeX info, which does this,
+and makes a number of other conversions as well. \xref{l2latexinfo.el}.\refill
+
+If you want to use \LaTeX\ commands for which there is no \LaTeX info
+support of any kind, you can always wrap them in a \code{tex}
+environment:\refill
+
+\begin{verbatim}
+\begin{tex}
+...
+\end{tex}
+\end{verbatim}
+
+\noindent
+This ensures that this part will be ignored by the Info processor, and
+that all special characters will be processed according to the normal
+\LaTeX\ definitions.
+
+The following \LaTeX\ commands are also supported by the Info formatter,
+although they might not do everything in Info that they do in \LaTeX.
+
+\begin{verbatim}
+\LaTeX
+\S
+\arrow
+\geq
+\hfill
+\label
+\leq
+\newblock
+\newpage
+\onecolumn
+\pi
+\pm
+\protect
+\qquad
+\quad
+\ss
+\thebibliography
+\thispagestyle
+\tie
+\twocolumn
+\vspace
+\vspace*
+\end{verbatim}
+
+\begin{menu}
+* l2latexinfo.el::
+\end{menu}
+
+\node l2latexinfo.el, Converting TeXinfo Files into LaTeXinfo Files, Converting LaTeX Files to LaTeXinfo, Converting LaTeX Files to LaTeXinfo
+\subsection{l2latexinfo.el}
+
+With the \LaTeX info distribution is a file called \file{l2latexinfo.el},
+which helps convert a \LaTeX\ file to a \LaTeX info file. Although it is
+not a perfectly automatic conversion, it will convert most of a file to
+\LaTeX info. To convert a \LaTeX\ File into an \LaTeX Info file, just
+visit a \LaTeX file in GNU Emacs and invoke
+
+\begin{example}
+\kbd{Meta-x latex-to-latexinfo}
+\end{example}
+
+\noindent
+to convert it to a \LaTeX Info file. Then search through the buffer to
+see if there are any command that were not converted.
+
+When you run \code{latex-to-latexinfo}, you will be asked
+\begin{example}
+Would you like to do the \back input files now, to do it all at once?
+\end{example}
+If you say \code{yes}, all the \code{\back input} files will be included, so
+you can do all of the subfiles at the same time.
+
+Remember that the characters \code{& ^ % $ #} are not special in
+\LaTeX info. There is no support for any of the mathematics commands.
+Braces that are not required for \LaTeX info commands will appear in
+the Info file.
+
+\node Converting TeXinfo Files into LaTeXinfo Files, Differences from TeXinfo, l2latexinfo.el, Converting Files to LaTeXinfo
+\section{Converting TeXinfo Files into LaTeXinfo Files}
+\cindex{Converting TeXinfo Files into LaTeXinfo Files}
+
+Documentation for GNU utilities and libraries is usually written in a
+format called \dfn{\TeX info}. Perhaps the most significant difference
+of \LaTeX info from \TeX info is that if a \LaTeX\ command is found that
+the Info formatter does not know about, an error is not signalled, and
+processing simply continues. This means that as long as you don't mind
+having the commands ignored in the Info file, you can use any \LaTeX\ command.
+
+\begin{menu}
+* Differences from TeXinfo::
+\end{menu}
+
+\node Differences from TeXinfo, Differences from TeXinfo, Converting TeXinfo Files into LaTeXinfo Files, Converting TeXinfo Files into LaTeXinfo Files
+\subsection{Differences from TeXinfo}
+\cindex{Differences from TeXinfo}
+
+The following \TeX info commands have been deleted:
+
+\begin{verbatim}
+@asis Not needed.
+@defindex Not needed (how many more indexes do you want??)
+@dmn Not needed.
+@ftable Not needed.
+@itemx Not needed.
+@setchapternewpage Use documentstyle type and options instead.
+@subtitle You are free to use fonts in \title command.
+@summarycontents Controlled by LaTeX parameter \setcounter{tocdepth}
+@titlefont Not needed.
+\end{verbatim}
+
+The following commands have been replaced by their \LaTeX\ equivalents:
+
+\begin{verbatim}
+\appendixsec replaced by \section
+\appendixsubsec replaced by \subsection
+\appendixsubsubsec replaced by \subsubsection
+\bye replaced by \end{document}
+\center replaced by \begin{center} .. \end{center}
+\chapheading replaced by \chapter*
+\contents replaced by \tableofcontents
+\group replaced by \begin{same}
+\heading replaced by \section*
+\headings replaced by \pagestyle
+\majorheading replaced by \chapter*
+\page replaced by \clearpage
+\sc replaced by \scap
+\settitle replaced by \title
+\heading replaced by \section*
+\subheading replaced by \subsection*
+\subsubheading replaced by \subsubsection*
+\table replaced by \begin{description}
+\titlepage replaced by \maketitle
+\vskip replaced by \vspace
+\end{verbatim}
+
+
+The following commands have been changed to their \LaTeX\ definitions:
+
+\begin{verbatim}
+ \appendix
+ \author
+ \center
+ \chapter
+ \date
+ \section
+ \subsection
+ \subsubsection
+ \begin{enumerate}
+ \begin{flushleft}
+ \begin{flushright}
+ \title
+ \today
+\end{verbatim}
+
+The \TeX info custom headings are supplanted by the \LaTeX\ commands.
+
+\subsection{t2latexinfo.el}
+
+With the \LaTeX info distribution is a file called \file{t2latexinfo.el},
+which helps convert a \TeX info file to a \LaTeX info file. Although it is
+not a perfectly automatic conversion, it will convert most of a file to
+\LaTeX info. To convert a \TeX info File into an \LaTeX Info file, just
+visit a \TeX info file in GNU Emacs and invoke
+
+\begin{example}
+\kbd{Meta-x tex-to-latexinfo}
+\end{example}
+
+\noindent
+to convert it to a \LaTeX Info file. Then search through the buffer to
+see if there are any command that were not converted. These start with
+the symbol \samp{@}. You may have to fix up the titlepage to use
+\code{\back author} and \code{\back title} etc, and may choose
+to move the \code{setfilename} command down to somewhere after the title
+and copyright pages. You will also have to fix up any places where you
+have embedded \TeX\ code such as
+
+\begin{verbatim}
+@tex
+\overfullrule=0pt
+@end tex
+\end{verbatim}
+
+\noindent
+which will be converted into
+
+\begin{verbatim}
+\begin{tex}
+\back overfullrule=0pt
+\end{tex}
+\end{verbatim}
+
+\noindent
+When you run \code{tex-to-latexinfo}, you will be asked
+\begin{example}
+Would you like to do the @input files now, to do it all at once?
+\end{example}
+If you say \code{yes}, all the \code{@input} files will be included, so
+you can do all of the subfiles at the same time. You will also be asked:
+
+\begin{example}
+Would you like all occurences of `@@' replaced by `@'?
+\end{example}
+
+This is normally the case, but if you say no, you will be asked
+
+\begin{example}
+Would you like all occurences of `@@' replaced by `\back \back '?
+\end{example}
+
+\noindent
+You must choose one of these two options. The first option is normal
+for most \TeX info files; the second option is only normally used for
+converting the \TeX info manual itself.
+
+
+\node Converting Scribe Files to LaTeXinfo, Obtaining TeX, Differences from TeXinfo, Converting Files to LaTeXinfo
+\section{Converting Scribe Files to LaTeXinfo}
+
+With the \LaTeX info distribution is a file called \file{s2latexinfo.el},
+which helps convert a Scribe file to a \LaTeX info file. Although it is
+not a perfectly automatic conversion, it will convert most of a file to
+\LaTeX info. To convert a Scribe file into a \LaTeX Info file, just
+visit the Scribe file in GNU Emacs and invoke
+
+\begin{example}
+\kbd{Meta-x scribe-to-latexinfo}
+\end{example}
+
+\noindent
+to convert it to a \LaTeX Info file. Then search through the buffer to
+see if there are any commands that were not converted. These start with
+the symbol \samp{@}. When you run \code{scribe-to-latexinfo}, you will
+be asked:
+\begin{example}
+Would you like to do the @include files now, to do it all at once?
+\end{example}
+If you say \code{yes}, all the \code{@include} files will be included, so
+you can do all of the subfiles at the same time. You will also be asked:
+
+\begin{implementation}
+This program was written to convert the CMU Lisp manuals. It is very
+heavily tailored to CMU and Common Lisp. Expect to have to alter this
+file to tailor it to your needs.
+\end{implementation}
+
+\node Obtaining TeX, Command List, Converting Scribe Files to LaTeXinfo, Top
+\chapter{Obtaining \protect\LaTeX{}}
+
+\c !!! Suggest moving info on getting TeX to appendix.
+\c !!! Here is information about obtaining TeX. Update it whenever.
+\c Last updated by RJC on 12 Feb 1991,
+\c based on message from elisabet@max.u.washington.edu
+\TeX{} is freely redistributable. You can obtain \TeX{} for Unix
+systems from the University of Washington for a distribution
+fee. \LaTeX{} is included with \TeX{}\refill
+
+To order a full distribution, send $140.00 for a 1/2-inch 9-track
+1600 bpi (tar or cpio) tape reel, or $165.00 for a 1/4-inch 4-track
+QIC-24 (tar or cpio) cartridge, to:\refill
+
+\begin{display}
+Northwest Computing Support Center
+DR-10, Thomson Hall 35
+University of Washington
+Seattle, Washington 98195
+\end{display}
+
+\noindent
+Please make checks payable to the University of Washington.\refill
+
+Prepaid orders are preferred but purchase orders are acceptable;
+however, purchase orders carry an extra charge of $10.00, to pay for
+processing.\refill
+
+Overseas sites: please add to the base cost $20.00 for shipment via
+air parcel post, or $30.00 for shipment via courier.\refill
+
+Please check with the Northwest Computing Support Center at the
+University of Washington for current prices and formats:\refill
+
+\begin{display}
+telephone: (206) 543-6259
+email: elisabet@max.u.washington.edu
+\end{display}
+
+\node Command List, Command Index, Obtaining TeX, Top
+\chapter{Command List}
+\cindex{Alphabetical \back -command list}
+\cindex{List of \back -Commands}
+\cindex{Command list}
+
+Here is an alphabetical list of the \back -commands in \LaTeX info.
+The alphabetical order ignores the
+\verb+\begin{}+ and
+\verb+\end{}+
+of environment commands.
+
+\begin{description}
+\item[\back *]
+Force a line break. Do not end a paragraph that uses \code{\back *} with
+an \code{\back refill} command. \xref{Line Breaks}.\refill
+
+\item[\back \back]
+Force a line break in the \LaTeX\ file. \xref{Line Breaks}.\refill
+
+\item[\back .]
+Stands for a period that really does end a sentence.
+\xref{Controlling Spacing}.\refill
+
+\item[\back :]
+Indicate to \LaTeX{} that an immediately preceding period, question
+mark, exclamation mark, or colon does not end a sentence. Prevent
+\LaTeX{} from inserting extra whitespace as it does at the end of a
+sentence. The command has no effect on the Info file output.
+\xref{Controlling Spacing}.\refill
+
+\item[\back \{]
+Stands for a left-hand brace, \samp{\{}.
+\xref{Braces Atsigns Periods, , Inserting \back braces and periods}.\refill
+
+\item[\back \}]
+Stands for a right-hand brace, \samp{\}}.
+\xref{Braces Atsigns Periods, , Inserting \back braces and periods}.\refill
+
+\item[\back appendix]
+Begin the appendices. All chapters and sections after this command
+will be treated as appendices, and marked with alphabetical chapter
+numbers.\refill
+
+\item[\back author\{\var{author}\}]
+Typeset \var{author} according to the current \code{documentstyles}.
+\xref{Titlepage}.\refill
+
+\item[\back b\{\var{text}\}]
+Print \var{text} in \b{bold} font. No effect in Info. \xref{Fonts}.\refill
+
+\item[\back back]
+Stands for \samp{\back }. \xref{Braces Atsigns Periods, , Inserting
+\samp{\back }}.\refill
+
+\item[\back BibTeX\{\}]
+Insert the logo \BibTeX.
+
+\begin{ignore}
+\item[\back br]
+Force a paragraph break. If used within a line, follow \code{\back br}
+with braces. \xref{br, , \code{\back br}}.\refill
+\end{ignore}
+
+\item[\back bullet\{\}]
+Generate a large round dot, or the closest possible
+thing to one. \xref{Dots Bullets}.\refill
+
+\item[\back c \var{comment}]
+Begin a comment in Texinfo. The rest of the line does not appear in
+either the Info file or the printed manual. A synonym for
+\code{\back comment}. \xref{Conventions, , General Syntactic
+Conventions}.\refill
+
+\item[\back cartouche]
+Highlight an example or quotation by drawing a box with rounded
+corners around it. Pair with \code{\back end\{cartouche\}}. No effect in
+Info. \xref{cartouche, , Drawing Cartouches Around Examples}.)\refill
+
+\item[\back begin\{center\}]
+Center the text following.
+\xref{Center Environment}.\refill
+
+\item[\back chapter\{\var{title}\}]
+Begin a chapter. The chapter title appears in the table of
+contents of a printed manual. In Info, the title is underlined with
+asterisks. \xref{Chapter}.\refill
+
+\item[\back cindex\{\var{entry}\}]
+Add \var{entry} to the index of concepts. \xref{Index Entries, ,
+Defining the Entries of an Index}.\refill
+
+\item[\back cite\{\var{reference}\}]
+Refer to a \BibTeX\ bibliography item. \xref{Citations}.\refill
+
+\item[\back clearpage]
+Start a new page in a printed manual. No effect in Info.
+\xref{page, , Start a New Page}.\refill
+
+\item[\back code\{\var{sample-code}\}]
+Highlight text that is an expression, a syntactically complete token
+of a program, or a program name. \xref{code, , \code{\back code}}.\refill
+
+\item[\back comment \var{comment}]
+Begin a comment in \LaTeX info. The rest of the line does not appear
+in either the Info file or the printed manual, nor does following whitespace.
+\xref{Conventions, , General Syntactic Conventions}.\refill
+
+\item[\back copyright\{\}]
+Generate a copyright symbol. \xref{LaTeX and copyright}.\refill
+
+\begin{ignore}
+\item[\back ctrl\{\var{ctrl-char}\}]
+Describe an \scap{ascii} control character. Insert actual control character
+into Info file. \xref{ctrl, , \code{\back ctrl}}.\refill
+\end{ignore}
+
+\item[\back defcv\{\var{category}\}\{\var{class}\}\{\var{name}\}]
+Format a description for a variable associated with a class in
+object-oriented programming. Takes three arguments: the category of
+thing being defined, the class to which it belongs, and its name.
+\xref{Definition Commands}.\refill
+
+\item[\back deffn\{\var{category}\}\{\var{name}\}\{\var{arguments}\dots{}\}]
+Format a description for a function, interactive command, or similar
+entity that may take arguments. \code{\back deffn} takes as
+arguments the category of entity being described, the name of this
+particular entity, and its arguments, if any. \xref{Definition
+Commands}.\refill
+
+\item[\back
+defivar\{\var{class}\}\{\var{instance-variable-name}\}] Format
+a description for an instance variable in object-oriented programming.
+The command is equivalent to \samp{\back defcv\{Instance
+Variable\} \dots{}}. \xref{Definition Commands}.\refill
+
+\item[\back defmac\{\var{macro-name}\}\{\var{arguments}\dots{}\}]
+Format a description for a macro. The command is equivalent to
+\samp{\back deffn\{Macro\}\dots{}}. \xref{Definition Commands}.\refill
+
+\item[\back defmethod\{\var{class}\}\{\var{method-name}\}\{\var{arguments}\dots{}\}]
+Format a description for a method in object-oriented programming. The
+command is equivalent to \samp{\back defop\{Method\} \dots{}}. Takes as
+arguments the name of the class of the method, the name of the
+method, and its arguments, if any. \xref{Definition Commands}.\refill
+
+\item[\back defop\{\var{category}\}\{\var{class}\}\{\var{name}\}\{\var{arguments}\dots{}\}]
+Format a description for an operation in object-oriented programming.
+\code{\back defop} takes as arguments the overall name of the
+category of operation, the name of the class of the operation, the name
+of the operation, and its arguments, if any. \xref{Definition
+Commands}.\refill
+
+\need{100}
+\item[\back defopt\{\var{option-name}\}]
+Format a description for a user option. The command is equivalent to
+\samp{\back defvr\{User Option\} \dots{}}. \xref{Definition Commands}.\refill
+
+\need{100}
+\item[\back defspec\{\var{special-form-name}\}\{\var{arguments}\}\dots{}]
+Format a description for a special form. The command is equivalent to
+\samp{\back deffn\{Special Form\}\dots{}}. \xref{Definition Commands}.\refill
+
+\need{200}
+\item[\back deftp\{\var{category}\}\{\var{name-of-type}\}\{\var{attributes}\dots{}\}]
+Format a description for a data type. \code{\back deftp} takes as
+arguments the category, the name of the type (which is a word like
+`int' or `float'), and then the names of attributes of objects of that
+type. \xref{Definition Commands}.\refill
+
+\item[\back deftypefn\{\var{classification}\}\{\var{data-type}\}\{\var{name}\}\{\var{arguments}\dots{}\}]
+Format a description for a function or similar entity that may
+take arguments and that is typed. \code{\back deftypefn} takes
+as arguments the classification of entity being described, the
+type, the name of the entity, and its arguments \xref{Definition
+Commands}.\refill
+
+\item[\back deftypefun\{\var{data-type}\}\{\var{function-name}\}\{\var{arguments}\dots{}\}]
+Format a description for a function in a typed language.
+The command is equivalent to \samp{\back deftypefn\{Function\}\dots{}}.
+\xref{Definition Commands}.\refill
+
+\item[\back deftypevr\{\var{classification}\}\{\var{data-type}\}\{\var{name}\}]
+Format a description for something like a variable in a typed
+language---an entity that records a value. Takes as arguments the
+classification of entity being described, the type, and the name of
+the entity. \xref{Definition Commands}.\refill
+
+\item[\back deftypevar\{\var{data-type}\}\{\var{variable-name}\}]
+Format a description for a variable in a typed language. The command is
+equivalent to \samp{\back deftypevr\{Variable\}\dots{}}. \xref{Definition
+Commands}.\refill
+
+\item[\back defun\{\var{function-name}\}\{\var{arguments}\dots{}\}]
+Format a description for functions. The command is equivalent to
+\samp{\back deffn\{Function\}\dots{}}. \xref{Definition Commands}.\refill
+
+\item[\back defvar\{\var{variable-name}\}]
+Format a description for variables. The command is equivalent to
+\samp{\back defvr\{Variable\}\dots{}}. \xref{Definition Commands}.\refill
+
+\item[\back defvr\{\var{category}\}\{\var{name}\}]
+Format a description for any kind of variable.\\
+\code{\back defvr} takes as arguments the category of the
+entity and the name of the entity. \xref{Definition Commands}.
+
+\need{400}
+\item[\back begin\{description\}]
+Begin a description, using \code{\back item} for each entry. Write
+each first column entry as \code{\back item[\var{entry}]}.
+\xref{Description Environment}.\refill
+
+\item[\back dfn\{\var{term}\}]
+Highlight the introductory or defining use of a term.
+\xref{dfn, , \code{\back dfn}}.\refill
+
+\need{100}
+\item[\back begin\{display\}]
+Begin a kind of example. Indent text, do not fill, do not select a
+new font. Pair with \code{\back end\{display\}}. \xref{display, ,
+\code{\back begin\{display\}}}.\refill
+
+\need{100}
+\item[\back dmn\{\var{dimension}\}]
+Format a dimension. Causes \LaTeX{} to insert a narrow space before
+\var{dimension}. Has no effect in Info. Used for writing a number
+followed by an abbreviation of a dimension name, such as
+\samp{12\dmn{pt}}, written as \samp{12\back dmn\{pt\}}, with no space
+between the number and the \code{\back dmn} command. \xref{dmn, ,
+\code{\back dmn}}.\refill
+
+\item[\back end\{document\}]
+Terminate \LaTeX{} processing on the file. \LaTeX{} does not see any of
+the contents of the file following the \code{\back end\{document\}} command.
+\xref{Ending a File}.\refill
+
+\need{100}
+\item[\back dots\{\}]
+Insert an ellipsis: \samp{\dots{}}.
+\xref{Dots Bullets}.\refill
+
+\need{100}
+\item[\back emph\{\var{text}\}]
+Highlight \var{text}. \xref{Emphasis, , Emphasizing Text}.\refill
+
+\need{100}
+\item[\back begin\{enumerate\}]
+Begin a numbered list, using \code{\back item} for each entry. Pair with
+\code{\back end\{enumerate\}}. \xref{enumerate, ,
+\code{\back begin\{enumerate\}}}.\refill
+
+\need{100}
+\item[\back equiv\{\}]
+Indicate the exact equivalence of two forms to the reader with a
+special glyph: \samp{\equiv{}}. \xref{Equivalence}.\refill
+
+\item[\back error\{\}]
+Indicate to the reader with a special glyph that the following text is
+an error message: \samp{\error{}}. \xref{Error Special Glyph}.\refill
+
+\item[\back begin\{example\}]
+Begin an example. Indent text, do not fill, select fixed-width font.
+Pair with \code{\back end\{example\}}. \xref{example, ,
+\code{\back begin\{example\}}}.\refill
+
+\item[\back exdent \var{line-of-text}]
+Remove any indentation a line might have. \xref{exdent, ,
+Undoing the Indentation of a Line}.\refill
+
+\item[\back expansion\{\}]
+Indicate the result of a macro expansion to the reader with a special
+glyph: \samp{\expansion{}}. \xref{expansion}.\refill
+
+\item[\back file\{\var{filename}\}]
+Highlight the name of a file or directory. \xref{file, ,
+\code{\back file}}.\refill
+
+\item[\back finalout]
+Prevent \LaTeX{} from printing large black warning rectangles beside
+over-wide lines. \xref{Overfull Hboxes}.\refill
+
+\need{100}
+\item[\back findex\{\var{entry}\}]
+Add \var{entry} to the index of functions. \xref{Index Entries, ,
+Defining the Entries of an Index}.\refill
+
+\need{200}
+\item[\back begin\{flushleft\}]
+Left justify every line but leave the right end ragged.
+Leave font as is. Pair with \code{\back end\{flushleft\}}.
+\xref{flushleft & flushright, , \code{\back begin\{flushleft\}} and
+\code{\back begin\{flushright\}}}.\refill
+
+\need{200}
+\item[\back begin\{flushright\}]
+Right justify every line but leave the left end ragged.
+Leave font as is. Pair with \code{\back end\{flushright\}}.
+\xref{flushleft & flushright, , \code{\back begin\{flushleft\}} and
+\code{\back begin\{flushright\}}}.\refill
+
+\need{200}
+\item[\back footnote\{\var{text-of-footnote}\}]
+Enter a footnote. Footnote text is printed at the bottom of the page
+by \LaTeX{}; Info may format in either `End Node' or `Make Node' style.
+\xref{Footnotes}.\refill
+
+\item[\back footnotestyle\{\var{style}\}]
+Specify an Info file's footnote style, either \samp{end} for the end
+node style or \samp{separate} for the separate node style.
+\xref{Footnotes}.\refill
+
+\item[\back begin\{format\}]
+Begin a kind of example. Like \code{\back begin\{example\}} or \code{\back begin\{display\}},
+but do not narrow the margins and do not select the fixed-width font.
+Pair with \code{\back end\{format\}}. \xref{example, ,
+\code{\back begin\{example\}}}.\refill
+
+\item[\back i\{\var{text}\}]
+Print \var{text} in \i{italic} font. No effect in Info.
+\xref{Fonts}.\refill
+
+\item[\back begin\{ifinfo\}]
+Begin a stretch of text that will be ignored by \LaTeX{} when it
+typesets the printed manual. The text appears only in the Info file.
+Pair with \code{\back end\{ifinfo\}}. \xref{Conditionals, , Conditionally
+Visible Text}.\refill
+
+\item[\back begin\{iftex\}]
+Begin a stretch of text that will not appear in the Info file, but
+will be processed only by \LaTeX. Pair with \code{\back end\{iftex\}}.
+\xref{Conditionals, , Conditionally Visible Text}.\refill
+
+\item[\back begin\{ignore\}]
+Begin a stretch of text that will not appear in either the Info file
+or the printed output. Pair with \code{\back end\{ignore\}}.
+\xref{Comments, , Comments and Ignored Text}.\refill
+
+\item[\back include\{\var{filename}\}]
+Incorporate the contents of the file \var{filename} into the Info file
+or printed document. \xref{Include Files}.\refill
+
+\item[\back inforef\{\var{node-name}, [\var{entry-name}], \var{info-file-name}\}]
+Make a cross reference to an Info file for which there is no printed
+manual. \xref{inforef, , Cross references using
+\code{\back inforef}}.\refill
+
+\item[\back input\{\var{filename}\}]
+Input the contents of the file \var{filename} into the Info file
+or printed document. \xref{Input Files}.\refill
+
+\item[\back item]
+Indicate the beginning of a marked paragraph for \code{\back begin\{itemize\}} and
+\code{\back begin\{enumerate\}} and \code{\back begin\{description\}}
+environments.\refill
+
+\item[\back begin\{itemize\}]
+Produce a sequence of indented paragraphs, with a mark inside the left
+margin at the beginning of each paragraph. Pair with \code{\back end\{itemize\}}. \xref{Itemize Environment}.\refill
+
+\item[\back kbd\{\var{keyboard-characters}\}]
+Indicate text that consists of characters of input to be typed by
+users. \xref{kbd, , \code{\back kbd}}.\refill
+
+\item[\back key\{\var{key-name}\}]
+Highlight \var{key-name}, a conventional name for a key on a keyboard.
+\xref{key, , \code{\back key}}.\refill
+
+\item[\back kindex\{\var{entry}\}]
+Add \var{entry} to the index of keys. \xref{Index Entries, , Defining the
+Entries of an Index}.\refill
+
+\item[\back LaTeX\{\}]
+Insert the logo \LaTeX.
+
+\item[\back begin\{lisp\}]
+Begin an example of Lisp code. Indent text, do not fill, select
+fixed-width font. Pair with \code{\back end\{lisp\}}. \xref{Lisp Example, ,
+\code{\back begin\{lisp\}}}.\refill
+
+\item[\back begin\{menu\}]
+Mark the beginning of a menu of nodes in Info. No effect in a printed
+manual. Pair with \code{\back end\{menu\}}. \xref{Menu Environment}.\refill
+
+\item[\back minus\{\}]
+Generate a minus sign. \xref{minus, , \code{\back minus}}.\refill
+
+\item[\back need\{\var{n}\}]
+Start a new page in a printed manual if fewer than \var{n} mils
+(thousandths of an inch) remain on the current page. \xref{need, ,
+\code{\back need}}.\refill
+
+\item[\back node \var{name, next, previous, up}]
+Define the beginning of a new node in Info, and serve as a locator for
+references for \LaTeX. \xref{node, , \code{\back node}}.\refill
+
+\need{200}
+\item[\back noindent]
+Prevent text from being indented as if it were a new paragraph.
+\xref{noindent, , \code{\back noindent}}.\refill
+
+\need{300}
+\item[\back nxref\{\var{node-name}, \r{[}\var{entry}\r{]}, \r{[}\var{topic}\r{]}, \r{[}\var{info-file}\r{]}, \r{[}\var{manual}\r{]}\}]
+Make a reference. In a printed manual, the reference does not start
+with a `See'. Follow command with a punctuation mark. Only the first
+argument is mandatory. \xref{ref, , \code{\back nxref}}.\refill
+
+\item[\back paragraphindent\{\var{indent}\}]
+Indent paragraphs by \var{indent} number of spaces; delete indentation
+if the value of \var{indent} is 0; and do not change indentation if
+\var{indent} is \code{asis}. \xref{paragraphindent, , Paragraph
+Indenting}.\refill
+
+\item[\back pindex\{\var{entry}\}]
+Add \var{entry} to the index of programs. \xref{Index Entries, , Defining
+the Entries of an Index}.\refill
+
+\item[\back point\{\}]
+Indicate the position of point in a buffer to the reader with a
+special glyph: \samp{\point{}}. \xref{Point Special Glyph, , Indicating
+Point in a Buffer}.\refill
+
+\item[\back print\{\}]
+Indicate printed output to the reader with a special glyph:
+\samp{\print{}}. \xref{Print Special Glyph}.\refill
+
+\item[\back printindex\{\var{index-name}\}]
+Print an alphabetized two-column index in a printed manual or generate
+an alphabetized menu of index entries for Info. \xref{Printing an Index
+and Generating Menus}.\refill
+
+\item[\back pxref\{\var{node-name}, \r{[}\var{entry}\r{]}, \r{[}\var{topic}\r{]}, \r{[}\var{info-file}\r{]}, \r{[}\var{manual}\r{]}\}]
+Make a reference that starts with a lower case `see' in a printed
+manual. Use within parentheses only. Do not follow command with a
+punctuation mark. The Info formatting commands automatically insert
+terminating punctuation as needed, which is why you do not need to
+insert punctuation. Only the first argument is mandatory.
+\xref{pxref, , \code{\back pxref}}.\refill
+
+\item[\back begin\{quotation\}] Narrow the margins to indicate text that
+is quoted from another real or imaginary work, and indent following
+text. Write command on a line of its own. Pair with \code{\back
+end\{quotation\}}. \xref{Quotations}.\refill
+
+\item[\back begin\{quote\}]
+Narrow the margins to indicate text that is quoted from another real
+or imaginary work. Write command on a line of its own. Pair with
+\code{\back end\{quote\}}. \xref{Quotations}.\refill
+
+\need{100}
+\item[\back r\{\var{text}\}]
+Print \var{text} in \r{roman} font. No effect in Info.
+\xref{Fonts}.\refill
+
+\need{300}
+\item[\back refill]
+In Info, refill and indent the paragraph after all the other
+processing has been done. No effect on \LaTeX, which always refills.
+\xref{Refilling Paragraphs}.\refill
+
+\need{300}
+\item[\back result\{\}]
+Indicate the result of an expression to the reader with a special
+glyph: \samp{\result{}}. \xref{result, , \code{\back result}}.\refill
+
+\item[\back samp\{\var{text}\}]
+Highlight \var{text} that is a literal example of a sequence of
+characters. Used for single characters, for statements and often for
+entire shell commands. \xref{samp, , \code{\back code}}.\refill
+
+\item[\back scap\{\var{text}\}]
+Set \var{text} in a printed output in \scap{the small caps font} and
+set text in the Info file in uppercase letters.
+\xref{Smallcaps}.\refill
+
+\item[\back setfilename\{\var{info-file-name}\}]
+Provide a name for the Info file. \xref{Conventions, , General
+Syntactic Conventions}.\refill
+
+\item[\back begin\{smalllisp\}]
+Begin an example of Lisp code. Indent text, do not fill, select a small
+fixed-width font. Pair with \code{\back end\{lisp\}}. \xref{Lisp Example, ,
+\code{\back begin\{lisp\}}}.\refill
+
+\item[\back title\{\var{title}\}]
+Provide a title for page headers in a printed manual, and for the titlepage.
+\xref{Conventions, , General Syntactic Conventions}.\refill
+
+\item[\back begin\{same\}]
+Hold text together that must appear on one printed page. Pair with
+\code{\back end\{same\}}. Not relevant to Info. \xref{group, ,
+\code{\back begin\{same\}}}.\refill
+
+\need{400}
+\item[\back begin\{smallexample\}]
+Indent text to indicate an example. Do not fill, select fixed-width
+font. In \code{\back smallbook} format, print text in a smaller font than
+with \code{\back begin\{example\}}. Pair with \code{\back end\{smallexample\}}.
+\xref{Examples and Verbatim}.\refill
+
+\need{400}
+\item[\back smalllisp]
+Begin an example of Lisp code. Indent text, do not fill, select
+fixed-width font. In \code{\back smallbook} format, print text in a
+smaller font. Pair with \code{\back end\{smalllisp\}}. \xref{Examples and Verbatim}.\refill
+
+\need{500}
+\item[\back sp\{\var{n}\}]
+Skip \var{n} blank lines. \xref{sp, , \code{\back sp}}.\refill
+
+\need{500}
+\item[\back strong\{\var{text}\}]
+Emphasize \var{text} by typesetting it in a \strong{bold} font for the
+printed manual and by surrounding it with asterisks for Info.
+\xref{emph & strong, , Emphasizing Text}.\refill
+
+\item[\back subsection\{\var{title}\}]
+Begin a subsection within a section. In a printed manual, the
+subsection title is numbered and appears in the table of contents. In
+Info, the title is underlined with hyphens. \xref{Subsection}.\refill
+
+\item[\back subsubsection\{\var{title}\}]
+Begin a subsubsection within a subsection. In a printed manual,
+the subsubsection title is numbered and appears in the table of
+contents. In Info, the title is underlined with periods.
+\xref{Subsubsection}.\refill
+
+\need{300}
+\item[\back syncodeindex\{\var{from-index}\}\{\var{into-index}\}]
+Merge the index named in the first argument into the index named in
+the second argument, printing the entries from the first index in
+\code{\back code} font. \xref{Combining Indices}.\refill
+
+\need{300}
+\item[\back synindex\{\var{from-index}\}\{\var{into-index}\}]
+Merge the index named in the first argument into the index named in
+the second argument. Do not change the font of \var{from-index}
+entries. \xref{Combining Indices}.\refill
+
+\need{100}
+\item[\back t\{\var{text}\}]
+Print \var{text} in a \t{fixed-width} font. No effect in Info.
+\xref{Fonts}.\refill
+
+\item[\back tableofcontents]
+Print a complete table of contents. Has no effect in Info, which uses
+menus instead. \xref{Generating a Table of Contents}.\refill
+
+\item[\back TeX\{\}]
+Insert the logo \TeX{}.
+
+\item[\back begin\{tex\}]
+Enter \LaTeX{} completely. Pair with \code{\back end\{tex\}}.
+\xref{Using Ordinary LaTeX Commands}.\refill
+
+\item[\back tindex\{\var{entry}\}]
+Add \var{entry} to the index of data types. \xref{Index Entries, ,
+Defining the Entries of an Index}.\refill
+
+\item[\back title\{\var{title}\}]
+In a printed manual, set a title in a larger than normal font and
+underline it with a black rule. \xref{Titlepage}.\refill
+
+\need{150}
+\item[\back today\{\}]
+Insert the current date. \xref{Custom Headings}.\refill
+
+\item[\back unnumbered\{\var{title}\}]
+In a printed manual, begin a chapter that appears without chapter
+numbers of any kind. The title appears in the table of contents of a
+printed manual. In Info, the title is underlined with asterisks.
+\xref{Chapter}.\refill
+
+\item[\back unnumberedsec\{\var{title}\}]
+In a printed manual, begin a section that appears without section
+numbers of any kind. The title appears in the table of contents of a
+printed manual. In Info, the title is underlined with equal signs.
+\xref{Section}.\refill
+
+\item[\back unnumberedsubsec\{\var{title}\}]
+In a printed manual, begin an unnumbered subsection within a
+chapter. The title appears in the table of contents of a printed
+manual. In Info, the title is underlined with hyphens.
+\xref{Subsection}.\refill
+
+\item[\back unnumberedsubsubsec\{\var{title}\}]
+In a printed manual, begin an unnumbered subsubsection within a
+chapter. The title appears in the table of contents of a printed
+manual. In Info, the title is underlined with periods.
+\xref{Subsubsection}.\refill
+
+\item[\back var\{\var{metasyntactic-variable}\}]
+Highlight a metasyntactic variable, which is something that stands for
+another piece of text. Thus, in this entry, the word
+\var{metasyntactic-variable} is highlighted with \code{\back var}.
+\xref{var, , Indicating Metasyntactic Variables}.\refill
+
+\need{400}
+\item[\back vindex\{\var{entry}\}]
+Add \var{entry} to the index of variables. \xref{Index Entries, ,
+Defining the Entries of an Index}.\refill
+
+\need{400}
+\item[\back vspace\{\var{amount}\}]
+In a printed manual, insert whitespace so as to push text on the
+remainder of the page towards the bottom of the page. Used in
+formatting the copyright page with the argument \samp{0pt plus 1filll}.
+(Note spelling of \samp{filll}.) \code{\back vspace} is ignored for
+Info. \xref{The Copyright Page and Printed Permissions}.\refill
+
+\need{400}
+\item[\back w\{\var{text}\}]
+Prevent \var{text} from being split across two lines. Do not end a
+paragraph that uses \code{\back w} with an \code{\back refill} command.
+In the \LaTeX info file, keep \var{text} on one line.
+\xref{w, , \code{\back w}}.\refill
+
+\need{400} \item[\back xref\{\var{node-name}, \r{[}\var{entry}\r{]},
+\r{[}\var{topic}\r{]}, \r{[}\var{info-file}\r{]},
+\r{[}\var{manual}\r{]}\}] Make a reference that starts with `See' in a
+printed manual. Follow command with a punctuation mark. Only the first
+argument is mandatory. \xref{xref, , \code{\back xref}}.\refill
+\end{description}
+
+
+
+\bibliography{latexinfo2}
+
+\twocolumn
+\node Command Index, Concept Index, Command List, Top
+\unnumbered{Command Index}
+\cindex{Command Index}
+
+This is an alphabetical list of all the \back -commands and several
+variables. To make the list easier to use, the commands are listed
+without their preceding \samp{\back }.\refill
+
+\printindex{fn}
+
+\onecolumn
+\node Concept Index, , Command Index, Top
+\unnumbered{Concept Index}
+\cindex{Concept Index}
+
+\printindex{cp}
+
+\end{document}
diff --git a/macros/latex209/contrib/latexinfo/manual/lnfo-sample.tex b/macros/latex209/contrib/latexinfo/manual/lnfo-sample.tex
new file mode 100644
index 0000000000..f6cd5dce97
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/manual/lnfo-sample.tex
@@ -0,0 +1,97 @@
+\documentstyle[11pt,latexinfo]{book}
+
+\begin{document}
+
+\c Declare which indices you want to make use of.
+\newindex{cp}
+\c Declare the bibliography style you want for BibTeX.
+\bibliographystyle{alpha}
+\c No ugly overfull black boxes.
+\finalout
+\c \refill automatically.
+\alwaysrefill
+
+\c Anything before the \setfilename will not appear in the Info file.
+\setfilename{plisp.info}
+
+\c Start the stuff for the titlepage.
+
+\title{The PLisp Manual}
+
+\author{Fred Foobar,\\
+ Clarke Institute,\\
+ 999 Queen Street,\\
+ Toronto, Ontario}
+
+\date{\today}
+\maketitle
+
+\c The following commands start the copyright page for the printed manual.
+\clearpage
+\vspace*{0pt plus 1filll}
+Copyright \copyright{} year copyright-owner
+
+Permission is granted to copy and distribute modified versions of this
+document under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+\c End the Copyleft page and don't use headings on this page.
+\pagestyle{empty}
+\clearpage
+\pagestyle{headings}
+
+\c Use roman numerals for the page numbers and Insert the Table of Contents.
+\pagenumbering{roman}
+\tableofcontents
+
+\c End the Table of Contents
+\clearpage
+
+\c Make a list of tables if you have any
+\listoftables
+\clearpage
+
+\c The Top node contains the master menu for the Info file.
+\c This appears only in the Info file, not the printed manual.
+\node Top, First Chapter, (dir), (dir)
+
+\c A preface or overview to give the structure of the document.
+\chapter*{Preface}
+
+\clearpage
+\c Start numbering from 1 with Arabic numbers
+\pagenumbering{arabic}
+
+\begin{menu}
+* First Chapter:: The first chapter is the
+ only chapter in this sample.
+\end{menu}
+
+\node First Chapter, Concept Index, Top, Top
+\chapter{First Chapter}
+\cindex{Reference to First Chapter}
+
+This is the contents of the first chapter.
+Here is a numbered list.
+
+\begin{enumerate}
+\item
+This is the first item.
+
+\item
+This is the second item.
+\end{enumerate}
+
+The \kbd{M-x latexinfo-format-buffer} command transforms a LaTeXinfo file
+like this into an Info file; and \LaTeX\ typesets it for a printed manual.
+
+\bibliography{plisp.bib}
+
+\twocolumn
+\node Concept Index, Top, First Chapter, Top
+\unnumbered{Concept Index}
+
+\printindex{cp}
+
+\end{document}
diff --git a/macros/latex209/contrib/latexinfo/styles/Makefile b/macros/latex209/contrib/latexinfo/styles/Makefile
new file mode 100644
index 0000000000..44d3de08bc
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/styles/Makefile
@@ -0,0 +1,24 @@
+########## These are overridden by the contents of config.status
+# Where to install the LaTeXinfo style files.
+TEXDIR=${GNUSHAREDIR}/tex
+
+INSTALL = install -c -m 755
+INSTALLDATA = install -c -m 644
+
+########## End of user configurable options ################
+
+# The name of the file
+PROGRAM=latexinfo2
+
+########## The above are overridden by the contents of config.status
+
+include ../config.status
+
+install:
+ -mkdir $(TEXDIR)
+ $(INSTALLDATA) *.sty $(TEXDIR)
+
+
+clean:
+ echo Nothing to do in styles.
+
diff --git a/macros/latex209/contrib/latexinfo/styles/clisp.sty b/macros/latex209/contrib/latexinfo/styles/clisp.sty
new file mode 100644
index 0000000000..a0b806197e
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/styles/clisp.sty
@@ -0,0 +1,191 @@
+\edef\defun{\the\catcode`@}%
+\catcode`@ = 11
+\let\@oldatcatcode = \defun
+
+\edef\defun{\the\catcode`&}%
+\catcode`& = 11
+\let\@oldandcatcode = \defun
+
+\def\empty{\t{()}}
+\def\false{\t{nil}}
+\def\true{\t{t}}
+\def\nil{\t{nil}}
+\def\FALSE{\t{nil}}
+\def\TRUE{\t{t}}
+\def\NIL{\t{nil}}
+
+\def\dlbrack{\lbrack\mskip-\thinmuskip\lbrack\mskip\thinmuskip}
+\def\drbrack{\mskip\thinmuskip\rbrack\mskip-\thinmuskip\rbrack}
+
+\def\mopt#1{{$\,\lbrack$}{\it #1\/}{$\rbrack\,$}}%
+\def\mchoice#1{{$\,\dlbrack$}{\it #1\/}{$\drbrack\,$}}%
+\def\mstar#1{{$\,\lbrace$}{\it #1\/}{$\rbrace^*\,$}}%
+\def\mplus#1{{$\,\lbrace$}{\it #1\/}{$\rbrace^+\,$}}%
+\def\mgroup#1{{$\,\lbrace$}{\it #1\/}{$\rbrace\,$}}%
+\def\mor{{$|$}}%
+\def\mind#1{$\downarrow${\it #1\/}}%
+
+%% FUNCTIONS
+
+{\catcode`&=11
+ \def\&optional{\t{\& optional}}
+ \def\&rest{\t{\& rest}}
+ \def\&key{\t{\& key}}
+}
+
+\def\defun@vspace{\ifhmode\unskip \par\fi\addvspace{18pt plus 12pt minus 6pt}}
+\def\defun@hspace{\ifhmode\unskip \par\fi\hskip1.5em}
+
+% name and arguments are required
+% In between can be an optional package
+\def\defun{\defun@vspace\defunx}
+\def\defunx{\@defn{Function}}
+\def\defn{\defun@vspace\@defn}
+\def\defnx{\@defn}
+\def\enddefun{\enddfn}
+\def\enddefn{\enddfn}
+\def\enddfn{\relax}
+
+\def\@defunstart{\noindent\leavevmode % Need this to trigger the \everypar for margin rules.
+ \begingroup \samepage \raggedright
+ \hyphenpenalty=-5 \exhyphenpenalty=\@M \brokenpenalty=\@M}
+
+\def\@defunend{\par\endgroup}
+
+\def\above@defun{\@defunstart}
+\def\below@defun{\@defunend\nobreak\addvspace{2pt plus 2pt minus 2pt}}
+
+\def\@defn#1#2{\outer\def\defun@type{#1}\outer\def\defun@name{#2}%
+\fnindexbold{#2}%
+\@ifnextchar[{\@defunpackage}{\@defunnopackage}
+}
+
+\def\@defunpackage[#1]{%
+\setbox0\hbox{\defun@hspace$\lbrack$\it\defun@type\/$\rbrack$}\relax
+\setbox1\hbox{\tt#1:\defun@name\defun@hspace}\relax
+\@defun
+}
+
+\def\@defunnopackage{%
+\setbox0\hbox{\defun@hspace$\lbrack$\it\defun@type\/$\rbrack$}\relax
+\setbox1\hbox{\tt\defun@name\defun@hspace}\relax
+\@defun
+}
+
+\def\@defun#1{
+\above@defun
+\setbox2\hbox{\hskip\textwidth\hskip-1\wd0\hskip-1\wd1}\relax
+\def\args##1{##1}%
+\def\keys##1{{\tt \& key} \@settab {\tt ##1}}%
+\def\morekeys##1{\@stopline\@startline\>{\tt\ignorespaces ##1}}%
+\def\yetmorekeys##1{\@stopline\@startline\>{\tt\ignorespaces ##1}}%
+\leavevmode\hbox to 0pt{\hbox
+ to \textwidth{\hss\box0}\hss}{\box1\begin{minipage}[t]{1\wd2}
+ \begin{tabbing}
+#1\end{tabbing}\end{minipage}}
+\below@defun
+}
+
+
+%% MACROS
+
+\def\defmac{\defun@vspace\defmacx}
+\def\defmacx{\@defmc{Macro}}
+\def\defspec{\defun@vspace\defspecx}
+\def\defspecx{\@defmc{Special Form}}
+\def\enddefspec{\enddfn}
+\def\enddefmac{\enddfn}
+
+\def\@defmc#1#2{\outer\def\defun@type{#1}\outer\def\defun@name{#2}%
+\fnindexbold{#2}%
+\@ifnextchar[{\@defmacpackage}{\@defmacnopackage}
+}
+
+\def\@defmacpackage[#1]{
+\setbox0\hbox{\defun@hspace$\lbrack$\it\defun@type\/$\rbrack$}\relax
+\setbox1\hbox{\tt#1:\defun@name\defun@hspace}\relax
+\@defmac
+}
+
+\def\@defmacnopackage{
+\setbox0\hbox{\defun@hspace$\lbrack$\it\defun@type\/$\rbrack$}\relax
+\setbox1\hbox{\tt\defun@name\defun@hspace}\relax
+\@defmac
+}
+
+\def\@defmac#1{
+\above@defun
+\setbox2\hbox{\hskip\textwidth\hskip-1\wd0\hskip-1\wd1}\relax
+\def\args##1{##1}%
+\leavevmode\hbox to 0pt{\hbox
+ to \textwidth{\hss\box0}\hss}{\box1\begin{minipage}[t]{1\wd2}
+ \begin{tabbing}
+#1\end{tabbing}\end{minipage}}
+\below@defun
+}
+
+%% Variables
+\def\defvar{\defun@vspace\defvarx}
+\def\defvarx{\@defvr{Variable}}
+\def\defconst{\defun@vspace\defconstx}
+\def\defconstx{\@defvr{Constant}}
+\def\defvr{\defun@vspace\@defvr}
+\def\defvrx{\@defvr}
+\def\enddefvar{\enddfn}
+\def\enddefvr{\enddfn}
+\def\enddefconst{\enddfn}
+
+\def\@defvr#1#2{\outer\def\defun@type{#1}\outer\def\defun@name{#2}%
+\vrindexbold{#2}%
+\@ifnextchar[{\@defvarpackage}{\@defvarnopackage}
+}
+
+\def\@defvarpackage[#1]{
+\setbox0\hbox{\defun@hspace$\lbrack$\it\defun@type\/$\rbrack$}\relax
+\setbox1\hbox{\tt#1:\defun@name\defun@hspace}\relax
+\@defvar
+}
+
+\def\@defvarnopackage{
+\setbox0\hbox{\defun@hspace$\lbrack$\it\defun@type\/$\rbrack$}\relax
+\setbox1\hbox{\tt\defun@name\defun@hspace}\relax
+\@defvar
+}
+
+\def\@defvar{
+\above@defun
+\setbox2\hbox{\hskip\textwidth\hskip-1\wd0\hskip-1\wd1}\relax
+\leavevmode\hbox to 0pt{\hbox
+ to \textwidth{\hss\box0}\hss}{\box1}
+\below@defun
+}
+
+% The following is taken from /usr/local/lib/tex/macros/latex.tex
+% but corrects a scoping bug.
+
+\newdimen\@curtabmardimen
+\def\@startline{\global\@curtabmar\@nxttabmar\relax
+ \global\@curtabmardimen\dimen\@curtabmar
+ \global\@curtab\@curtabmar\global\setbox\@curline\hbox
+ {}\@startfield\strut}
+
+\def\@stopline{\unskip\@stopfield\if@rjfield \global\@rjfieldfalse
+ \@tempdima\@totalleftmargin \advance\@tempdima\linewidth
+ \hbox to\@tempdima{\@itemfudge\hskip\@curtabmardimen
+ \box\@curline\hfil\box\@curfield}\else\@addfield
+ \hbox{\@itemfudge\hskip\@curtabmardimen\box\@curline}\fi}
+
+% End of material from /usr/local/lib/tex/macros/latex.tex .
+
+% Assume Lisp is case insensitive and force to lower case.
+%\def\vindex#1{\vrindex{\lowercase{#1}}}
+%\def\findex#1{\fnindex{\lowercase{#1}}}
+
+% and restore @'s old catcode.
+%
+\catcode`@ = \@oldatcatcode
+
+% and restore &'s old catcode.
+%
+\catcode`& = \@oldandcatcode
+
diff --git a/macros/latex209/contrib/latexinfo/styles/elisp.sty b/macros/latex209/contrib/latexinfo/styles/elisp.sty
new file mode 100644
index 0000000000..3f76e2ec03
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/styles/elisp.sty
@@ -0,0 +1,410 @@
+\def\doind#1#2{}
+\def\obeylinez{}
+\def\inENV{\relax}
+
+\message{defuns,}
+% Define formatter for defuns
+% First, allow user to change definition object font (\df) internally
+\def\setdeffont#1{\csname DEF#1\endcsname}
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deftypemargin \deftypemargin=12pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+
+\newcount\parencount
+% define \functionparens, which makes ( and ) and & do special things.
+% \functionparens affects the group it is contained in.
+\def\activeparens{%
+\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active
+\catcode`\[=\active \catcode`\]=\active}
+{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+
+% Definitions of (, ) and & used in args for functions.
+% This is the definition of ( outside of all parentheses.
+\gdef\oprm#1{{\rm\char`\(}#1 \bf \let(=\opnested %
+\global\advance\parencount by 1 }
+%
+% This is the definition of ( when already inside a level of parens.
+\gdef\opnested{\char`\(\global\advance\parencount by 1 }
+%
+\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+% also in that case restore the outer-level definition of (.
+\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+\global\advance \parencount by -1 }
+% If we encounter &foo, then turn on ()-hacking afterwards
+\gdef\amprm#1{{\rm\&#1}\let(=\oprm \let)=\clrm\ }
+%
+\gdef\normalparens{\boldbrax\let&=\ampnr}
+} % End of definition inside \activeparens
+%% These parens (in \boldbrax) actually are a little bolder than the
+%% contained text. This is especially needed for [ and ]
+\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&}
+\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}}
+
+% First, defname, which formats the header line itself.
+%#1 should be the function name.
+% #2 should be the type of definition, such as "Function".
+
+\def\defname#1#2{%
+% Get the values of \leftskip and \rightskip as they were
+% outside the @def...
+\dimen2=\leftskip
+\advance\dimen2 by -\defbodyindent
+\dimen3=\rightskip
+\advance\dimen3 by -\defbodyindent
+\noindent %
+\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}%
+\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
+\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations
+\parshape 2 0in \dimen0 \defargsindent \dimen1 %
+% Now output arg 2 ("Function" or some such)
+% ending at \deftypemargin from the right margin,
+% but stuck inside a box of width 0 so it does not interfere with linebreaking
+{% Adjust \hsize to exclude the ambient margins,
+% so that \rightline will obey them.
+\advance \hsize by -\dimen2 \advance \hsize by -\dimen3
+\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}%
+% Make all lines underfull and no complaints:
+\tolerance=10000 \hbadness=10000
+\advance\leftskip by -\defbodyindent
+{\df#1}\enskip % Generate function name
+}
+
+% Actually process the body of a definition
+%#1 should be the terminating control sequence, such as \Edefun.
+% #2 should be the "another name" control sequence, such as \defunx.
+% #3 should be the control sequence that actually processes the header,
+% such as \defunheader.
+
+\def\defparsebody#1#2#3{\begingroup\inENV% Environment for definitionbody
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2{\begingroup\obeylinez\activeparens\spacesplit#3}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\begingroup %
+\catcode 61=\active %
+\obeylinez\activeparens\spacesplit#3}
+
+\def\defmethparsebody#1#2#3#4{\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1{\begingroup\obeylinez\activeparens\spacesplit{#3{##1}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\begingroup\obeylinez\activeparens\spacesplit{#3{#4}}}
+
+\def\defopparsebody#1#2#3#4#5{\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 ##2 {\def#4{##1}%
+\begingroup\obeylinez\activeparens\spacesplit{#3{##2}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\begingroup\obeylinez\activeparens\spacesplit{#3{#5}}}
+
+% These parsing functions are similar to the preceding ones
+% except that they do not make parens into active characters.
+% These are used for "variables" since they have no arguments.
+
+\def\defvarparsebody#1#2#3{\begingroup\inENV% Environment for definitionbody
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2{\begingroup\obeylinez\spacesplit#3}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\begingroup %
+\catcode 61=\active %
+\obeylinez\spacesplit#3}
+
+\def\defvrparsebody#1#2#3#4{\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1{\begingroup\obeylinez\spacesplit{#3{##1}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\begingroup\obeylinez\spacesplit{#3{#4}}}
+
+\def\defopvarparsebody#1#2#3#4#5{\begingroup\inENV %
+\medbreak %
+% Define the end token that this defining construct specifies
+% so that it will exit this group.
+\def#1{\endgraf\endgroup\medbreak}%
+\def#2##1 ##2 {\def#4{##1}%
+\begingroup\obeylinez\spacesplit{#3{##2}}}%
+\parindent=0in
+\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent
+\begingroup\obeylinez\spacesplit{#3{#5}}}
+
+% Split up #2 at the first space token.
+% call#1 with two arguments:
+% the first is all of #2 before the space token,
+% the second is all of #2 after that space token.
+% If #2 contains no space token, all of it is passed as the first arg
+% and the second is passed as empty.
+
+{\obeylinez
+\gdef\spacesplit#1#2{\endgroup\spacesplitfoo{#1}{#2}\relax\spacesplitfoo}%
+\long\gdef\spacesplitfoo#1#2#3#4\spacesplitfoo{%
+\ifx\relax #3%
+#1{#2}{}\else#1{#2}{#3#4}\fi}}
+
+\def\spacesplit#1#2{\endgroup\spacesplitbar{#1}{#2}}
+\def\spacesplitbar#1#2#3{#1{#2}{#3}}
+
+% So much for the things common to all kinds of definitions.
+
+% Define @defun.
+
+% First, define the processing that is wanted for arguments of \defun
+% Use this to expand the args and terminate the paragraph they make up
+
+\def\defunargs#1{\functionparens \sl
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+\hyphenchar\tensl=0
+#1%
+\hyphenchar\tensl=45
+\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi%
+\interlinepenalty=10000
+\advance\rightskip by 0pt plus 1fil
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+}
+
+\def\deftypefunargs#1{%
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+\functionparens
+\code{#1}%
+\interlinepenalty=10000
+\advance\rightskip by 0pt plus 1fil
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000%
+}
+
+% Do complete processing of one @defun or @defunx line already parsed.
+
+% @deffn Command forward-char nchars
+
+\def\deffn{\defmethparsebody\enddeffn\deffnx\deffnheader}
+
+\def\deffnheader#1#2#3{\fnindexbold{#2}%
+\begingroup\defname{#2}{#1}\defunargs{#3}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defun == @deffn Function
+
+\def\defun{\defparsebody\enddefun\defunx\defunheader}
+
+\def\defunheader#1#2{\fnindexbold{#1}% Make entry in function index
+\begingroup\defname{#1}{Function}%
+\defunargs{#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefun int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefun{\defparsebody\enddeftypefun\deftypefunx\deftypefunheader}
+
+%#1 is the data type. #2 is the name and args.
+\def\deftypefunheader#1#2{\deftypefunheaderx{#1}{#2}}
+%#1 is the data type, #2 the name, #3 the args.
+\def\deftypefunheaderx#1#2#3{%
+\fnindexbold{#2}% Make entry in function index
+\begingroup\defname{\code{#1} #2}{Function}%
+\deftypefunargs{#3}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefn{\defmethparsebody\enddeftypefn\deftypefnx\deftypefnheader}
+
+%#1 is the classification. #2 is the data type. #3 is the name and args.
+\def\deftypefnheader#1#2#3{\deftypefnheaderx{#1}{#2}{#3}}
+%#1 is the classification, #2 the data type, #3 the name, #4 the args.
+\def\deftypefnheaderx#1#2#3#4{%
+\fnindexbold{#3}% Make entry in function index
+\begingroup\defname{\code{#2} #3}{#1}%
+\deftypefunargs{#4}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defmac == @deffn Macro
+
+\def\defmac{\defparsebody\enddefmac\defmacx\defmacheader}
+
+\def\defmacheader#1#2{\fnindexbold{#1}% Make entry in function index
+\begingroup\defname{#1}{Macro}%
+\defunargs{#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% @defspec == @deffn Special Form
+
+\def\defspec{\defparsebody\enddefspec\defspecx\defspecheader}
+
+\def\defspecheader#1#2{\fnindexbold{#1}% Make entry in function index
+\begingroup\defname{#1}{Special Form}%
+\defunargs{#2}\endgroup %
+\catcode 61=\other % Turn off change made in \defparsebody
+}
+
+% This definition is run if you use @defunx
+% anywhere other than immediately after a @defun or @defunx.
+
+\def\deffnx#1{\errmessage{@deffnx in invalid context}}
+\def\defunx#1{\errmessage{@defunx in invalid context}}
+\def\defmacx#1{\errmessage{@defmacx in invalid context}}
+\def\defspecx#1{\errmessage{@defspecx in invalid context}}
+\def\deftypefnx#1{\errmessage{@deftypefnx in invalid context}}
+\def\deftypeunx#1{\errmessage{@deftypeunx in invalid context}}
+
+% @defmethod, and so on
+
+% @defop {Funny Method} foo-class frobnicate argument
+
+\def\defop#1{\def\defoptype{#1}%
+\defopparsebody\enddefop\defopx\defopheader\defoptype}
+
+\def\defopheader#1#2#3{%
+\dosubind {fn}{\code{#2}}{on#1}% Make entry in function index
+\begingroup\defname{#2}{\defoptype{} on#1}%
+\defunargs{#3}\endgroup %
+}
+
+% @defmethod == @defop Method
+
+\def\defmethod{\defmethparsebody\enddefmethod\defmethodx\defmethodheader}
+
+\def\defmethodheader#1#2#3{%
+\dosubind {fn}{\code{#2}}{on#1}% entry in function index
+\begingroup\defname{#2}{Method on#1}%
+\defunargs{#3}\endgroup %
+}
+
+% @defcv {Class Option} foo-class foo-flag
+
+\def\defcv#1{\def\defcvtype{#1}%
+\defopvarparsebody\enddefcv\defcvx\defcvarheader\defcvtype}
+
+\def\defcvarheader#1#2#3{%
+\dosubind {vr}{\code{#2}}{of#1}% Make entry in var index
+\begingroup\defname{#2}{\defcvtype{} of#1}%
+\defvarargs {#3}\endgroup %
+}
+
+% @defivar == @defcv {Instance Variable}
+
+\def\defivar{\defvrparsebody\enddefivar\defivarx\defivarheader}
+
+\def\defivarheader#1#2#3{%
+\dosubind {vr}{\code{#2}}{of#1}% Make entry in var index
+\begingroup\defname{#2}{Instance Variable of#1}%
+\defvarargs {#3}\endgroup %
+}
+
+% These definitions are run if you use @defmethodx, etc.,
+% anywhere other than immediately after a @defmethod, etc.
+
+\def\defopx#1{\errmessage{@defopx in invalid context}}
+\def\defmethodx#1{\errmessage{@defmethodx in invalid context}}
+\def\defcvx#1{\errmessage{@defcvx in invalid context}}
+\def\defivarx#1{\errmessage{@defivarx in invalid context}}
+
+% Now @defvar
+
+% First, define the processing that is wanted for arguments of @defvar.
+% This is actually simple: just print them in roman.
+% This must expand the args and terminate the paragraph they make up
+\def\defvarargs#1{\normalparens#1%
+\interlinepenalty=10000
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000}
+
+% @defvr Counter foo-count
+
+\def\defvr{\defvrparsebody\enddefvr\defvrx\defvrheader}
+
+\def\defvrheader#1#2#3{\vrindexbold{#2}%
+\begingroup\defname{#2}{#1}\defvarargs{#3}\endgroup}
+
+% @defvar == @defvr Variable
+
+\def\defvar{\defvarparsebody\enddefvar\defvarx\defvarheader}
+
+\def\defvarheader#1#2{\vrindexbold{#1}% Make entry in var index
+\begingroup\defname{#1}{Variable}%
+\defvarargs {#2}\endgroup %
+}
+
+% @defopt == @defvr {User Option}
+
+\def\defopt{\defvarparsebody\enddefopt\defoptx\defoptheader}
+
+\def\defoptheader#1#2{\vrindexbold{#1}% Make entry in var index
+\begingroup\defname{#1}{User Option}%
+\defvarargs {#2}\endgroup %
+}
+
+% @deftypevar int foobar
+
+\def\deftypevar{\defvarparsebody\enddeftypevar\deftypevarx\deftypevarheader}
+
+%#1 is the data type. #2 is the name.
+\def\deftypevarheader#1#2{%
+\vrindexbold{#2}% Make entry in variables index
+\begingroup\defname{\code{#1} #2}{Variable}%
+\interlinepenalty=10000
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgroup}
+
+% @deftypevr {Global Flag} int enable
+
+\def\deftypevr{\defvrparsebody\enddeftypevr\deftypevrx\deftypevrheader}
+
+\def\deftypevrheader#1#2#3{\vrindexbold{#3}%
+\begingroup\defname{\code{#2} #3}{#1}
+\interlinepenalty=10000
+\endgraf\penalty 10000\vskip -\parskip\penalty 10000
+\endgroup}
+
+% This definition is run if you use @defvarx
+% anywhere other than immediately after a @defvar or @defvarx.
+
+\def\defvrx#1{\errmessage{@defvrx in invalid context}}
+\def\defvarx#1{\errmessage{@defvarx in invalid context}}
+\def\defoptx#1{\errmessage{@defoptx in invalid context}}
+\def\deftypevarx#1{\errmessage{@deftypevarx in invalid context}}
+\def\deftypevrx#1{\errmessage{@deftypevrx in invalid context}}
+
+% Now define @deftp
+% Args are printed in bold, a slight difference from @defvar.
+
+\def\deftpargs#1{\bf \defvarargs{#1}}
+
+% @deftp Class window height width ...
+
+\def\deftp{\defvrparsebody\enddeftp\deftpx\deftpheader}
+
+\def\deftpheader#1#2#3{\tpindexbold{#2}%
+\begingroup\defname{#2}{#1}\deftpargs{#3}\endgroup}
+
+% This definition is run if you use @deftpx, etc
+% anywhere other than immediately after a @deftp, etc.
+
+\def\deftpx#1{\errmessage{@deftpx in invalid context}}
+
+
diff --git a/macros/latex209/contrib/latexinfo/styles/format.sty b/macros/latex209/contrib/latexinfo/styles/format.sty
new file mode 100644
index 0000000000..f3995b1f64
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/styles/format.sty
@@ -0,0 +1,44 @@
+\ifcase \@ptsize\relax
+
+\voffset= -30pt
+\textheight 580pt % increase from 536pt
+\textwidth 450pt % increase from 360pt
+\hoffset= -45pt % compensate to keep centered
+\if@twoside
+ \reversemarginpar % I assume the binding side is the
+ \oddsidemargin 70pt % bigger margin, so reverse the
+ \evensidemargin 38pt % placement of marginpars
+ \marginparwidth 40pt % less of a margin to work with
+ \else \oddsidemargin 54pt \evensidemargin 54pt \marginparwidth 83pt
+ \fi
+
+\or % 11pt
+
+\voffset= -30pt
+\textheight 580pt % increase from 536pt
+\textwidth 450pt % increase from 360pt
+\hoffset= -45pt % compensate to keep centered
+\if@twoside
+ \reversemarginpar % I assume the binding side is the
+ \oddsidemargin 70pt % bigger margin, so reverse the
+ \evensidemargin 38pt % placement of marginpars
+ \marginparwidth 40pt % less of a margin to work with
+ \else \oddsidemargin 54pt \evensidemargin 54pt \marginparwidth 83pt
+ \fi
+
+\or % 12pt
+
+\voffset= -30pt
+\textheight 580pt % increase from 536pt
+\textwidth 450pt % increase from 360pt
+\hoffset= -45pt % compensate to keep centered
+\if@twoside
+ \reversemarginpar % I assume the binding side is the
+ \oddsidemargin 70pt % bigger margin, so reverse the
+ \evensidemargin 38pt % placement of marginpars
+ \marginparwidth 40pt % less of a margin to work with
+ \else \oddsidemargin 54pt \evensidemargin 54pt \marginparwidth 83pt
+ \fi
+
+\fi
+
diff --git a/macros/latex209/contrib/latexinfo/styles/funref.sty b/macros/latex209/contrib/latexinfo/styles/funref.sty
new file mode 100644
index 0000000000..0fdbb8b32d
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/styles/funref.sty
@@ -0,0 +1,26 @@
+% Add support for referencing functions. This assumes clisp.sty
+% and fvpindex.sty and must be loaded after clisp.sty
+\def\@defn#1#2{\outer\def\defun@type{#1}\outer\def\defun@name{#2}%
+\fnindexbold{#2}\label{FN:#2}%
+\@ifnextchar[{\@defunpackage}{\@defunnopackage}
+}
+
+\def\@defvr#1#2{\outer\def\defun@type{#1}\outer\def\defun@name{#2}%
+\vrindexbold{#2}\label{VR:#2}%
+\@ifnextchar[{\@defvarpackage}{\@defvarnopackage}
+}
+
+\def\@defmc#1#2{\outer\def\defun@type{#1}\outer\def\defun@name{#2}%
+\fnindexbold{#2}\label{FN:#2}%
+\@ifnextchar[{\@defmacpackage}{\@defmacnopackage}
+}
+
+\let\xlref=\xref % the same indexes in LaTeX, but not in info
+\let\pxlref=\pxref % the same indexes in LaTeX, but not in info
+% These are now supported.
+\def\funref#1{\f{#1} (page\tie\pageref{FN:#1})}
+\def\specref#1{\f{#1} (page\tie\pageref{FN:#1})}
+\def\macref#1{\f{#1} (page\tie\pageref{FN:#1})}
+\def\varref#1{\v{#1} (page\tie\pageref{VR:#1})}
+\def\conref#1{\v{#1} (page\tie\pageref{VR:#1})}
+
diff --git a/macros/latex209/contrib/latexinfo/styles/fvpindex.sty b/macros/latex209/contrib/latexinfo/styles/fvpindex.sty
new file mode 100644
index 0000000000..f187e44032
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/styles/fvpindex.sty
@@ -0,0 +1,13 @@
+\let\fvpfont=\tt
+
+\def\f#1{\findex{#1}{\fvpfont #1}}
+\def\v#1{\vindex{#1}{\fvpfont #1}}
+\def\p#1{\pindex{#1}{\fvpfont #1}}
+
+\def\fb#1{\fnindexbold{#1}{\fvpfont\bf #1}}
+\def\vb#1{\vrindexbold{#1}{\fvpfont\bf #1}}
+\def\pb#1{\pgindexbold{#1}{\fvpfont\bf #1}}
+
+\newindex{vr}
+\newindex{fn}
+\newindex{pg}
diff --git a/macros/latex209/contrib/latexinfo/styles/german.MISSING b/macros/latex209/contrib/latexinfo/styles/german.MISSING
new file mode 120000
index 0000000000..5341c94c12
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/styles/german.MISSING
@@ -0,0 +1 @@
+../../../../../language/german/german.MISSING \ No newline at end of file
diff --git a/macros/latex209/contrib/latexinfo/styles/latexinfo.sty b/macros/latex209/contrib/latexinfo/styles/latexinfo.sty
new file mode 100644
index 0000000000..a8d5f2c97e
--- /dev/null
+++ b/macros/latex209/contrib/latexinfo/styles/latexinfo.sty
@@ -0,0 +1,1292 @@
+%% TeX macros to handle latexinfo files
+%% \include{ 5 page GNU copyleft here }
+% Copyright (C) 1985, 1986 Richard M. Stallman
+% Copyleft (C) 1988, 1989, 1990, 1991 Michael E. Clarkson
+
+\def\latexinfoversion{1.7}
+\message{Loading Latexinfo package [Version \latexinfoversion]:}
+\message{}
+
+\setcounter{tocdepth}{2}
+\setcounter{secnumdepth}{3}
+\def\textfraction{.1}
+\def\bottomfraction{.9} % was .3
+\def\topfraction{.9}
+
+\newcommand{\BibTeX}{{\sc Bib}\TeX}
+
+\def\oddfoot#1{\def\@oddfoot{#1}}
+\def\evenfoot#1{\def\@evenfoot{#1}}
+
+% Save some parts of plain latex whose names we will redefine.
+
+\let\ptexlbrace=\{
+\let\ptexrbrace=\}
+\let\ptexdot=\.
+\let\ptexstar=\*
+\let\ptexend=\end
+\let\ptexbullet=\bullet
+\let\ptexb=\b
+\let\ptexc=\c
+\let\ptexi=\i
+\let\ptext=\t
+\let\ptexl=\l
+\let\ptexL=\L
+\let\ptexdq=\"
+\def\pline{\hbox to\hsize}
+\def\pleftline#1{\pline{#1\hss}}
+\def\prightline#1{\pline{\hss#1}}
+\def\centerline#1{\pline{\hss#1\hss}}
+
+\def\tie{\penalty 10000\ } % Save plain tex definition of ~.
+
+\let\normal=\normalsize
+
+\message{Basics,}
+\chardef\other=12
+
+\hyphenation{ap-pen-dix}
+\hyphenation{mini-buf-fer mini-buf-fers}
+
+% Parse an argument, then pass it to #1.
+% The argument can be delimited with [...] or with "..." or braces
+% or it can be a whole line.
+% #1 should be a macro which expects
+% an ordinary undelimited TeX argument.
+
+\def\parsearg #1{\let\next=#1\begingroup\obeylines\futurelet\temp\parseargx}
+
+\def\parseargx{%
+\ifx \obeyedspace\temp \aftergroup\parseargdiscardspace \else%
+\aftergroup \parseargline %
+\fi \endgroup}
+
+{\obeyspaces %
+\gdef\parseargdiscardspace {\begingroup\obeylines\futurelet\temp\parseargx}}
+
+\gdef\obeyedspace{\ }
+
+\def\parseargline{\begingroup \obeylines \parsearglinex}
+{\obeylines %
+\gdef\parsearglinex #1^^M{\endgroup \next {#1}}}
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Single-spacing is done by various environments.
+
+\newskip\singlespaceskip
+\singlespaceskip = \baselineskip
+\def\singlespace{%
+{\advance \baselineskip by -\singlespaceskip
+\kern \baselineskip}%
+\baselineskip=\singlespaceskip
+}
+
+\def\arrow{$\rightarrow$}
+
+% Used to generate quoted braces.
+
+\def\mylbrace {{\tt \char '173}}
+\def\myrbrace {{\tt \char '175}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+
+% \: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% \* forces a line break.
+\def\*{\hfil\break}
+
+% \. is an end-of-sentence period.
+\def\.{.\spacefactor=3000 }
+
+% \w prevents a word break
+\def\w#1{\hbox{#1}}
+
+% \need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+\newdimen\mil \mil=0.001in
+
+\def\need#1{\par %
+% This method tries to make TeX break the page naturally
+% if the depth of the box does not fit.
+{\baselineskip=0pt%
+\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000
+\prevdepth=-1000pt
+}}
+
+% \br forces paragraph break
+
+\let\br = \par
+
+% \dots{} output some dots
+
+\def\dots{$\ldots$}
+
+% \page forces the start of a new page
+%\def\page{\clearpage}
+
+% \exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+\def\exdent{\errmessage{\back exdent in filled text}}
+ % \lisp, etc, define \exdent locally from \internalexdent
+
+{\obeyspaces
+\gdef\internalexdent{\exdentzzz}}
+
+\def\exdentzzz#1{{\advance \leftskip by -\lispnarrowing
+\advance \hsize by -\leftskip
+\advance \hsize by -\rightskip
+\leftline{{\rm#1}}}}
+
+% \sp n outputs n lines of vertical space
+\def\sp#1{\par\vskip #1\baselineskip\relax}
+
+% \comment ...line which is ignored...
+% \c is the same as @comment
+% \begin{ignore} ... \end{ignore} is another way to write a comment
+\def\comment{\parsearg \commentxxx}
+
+\def\commentxxx #1{}
+
+\let\c=\comment
+
+% Some texinfo constructs that are trivial in tex
+% \newenvironment{iftex}{\relax}{\relax}
+% \newcommand{\iflatex}{}
+% \newcommand{\endiflatex}{}
+\def\iftex{\relax}
+\let\endiftex=\relax
+
+\catcode`@=11
+
+\message{menus,}
+{\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar
+{\@gobble}{\ignorespaces}}}
+
+\chardef\active=13
+
+{\catcode`\ =\active\gdef\@vobeyspaces{\catcode`\ \active \let \@xobeysp}}
+
+\begingroup \catcode `|=0 \catcode `[= 1
+\catcode`]=2 \catcode `\{=12 \catcode `\}=12
+\catcode`\\=12
+|gdef|@xmenu#1\end{menu}[|end[menu]]
+|gdef|@xifinfo#1\end{ifinfo}[|end[ifinfo]]
+|gdef|@xignore#1\end{ignore}[|end[ignore]]
+|endgroup
+
+\def\@menu{\begingroup
+\@tempswafalse
+\def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \let\do\@makeother \dospecials}
+
+\def\menu{\@menu\@xmenu }
+\let\endmenu=\endgroup
+\def\ifinfo{\@menu\@xifinfo }
+\let\endifinfo=\endgroup
+\def\ignore{\@menu\@xignore }
+\let\endignore=\endgroup
+
+% 18-Mar-91 by Niels :
+%
+% Now you can use ",>,<,_,| in nodenames.
+% The macros
+% \node, \nodezzz, \pxref, \xref, \xrefX
+% were changed,
+% \label, \newlabel, \@testdef,
+% were copied from latex.sty and slightly modified,
+% new introduced are
+% \@label, \@newlabel, \@@testdef, \@pxref, \@xref,
+% \@ascii@doublequote, \@ascii@gtr, \@ascii@less,
+% \@ascii@underscore, \@ascii@pipe,
+% \@normal@doublequote, \@normal@gtr, \@normal@less,
+% \@normal@underscore, \@normal@pipe,
+% \doxrefnormalise, \doxrefspecials.
+%
+% To achieve this the above listed chars were catcoded to active
+% chars. For labelnames (written on the aux-file) the CHAR's
+% macro is set to \@ascii@CHAR
+% (i.e. self-insert-command respectively \catcode`\CHAR=12)
+% using \@doxrefspecials.
+% For Topics printed on paper the CHAR's macro is set to the
+% \@normal@CHAR
+% (i.e. the current macrodefinition of CHAR)
+% using \@doxrefnormalise.
+%
+\def\node{%
+ \begingroup % 18-Mar-91, Niels
+ \doxrefspecials % 18-Mar-91, Niels
+ \parsearg\nodezzz}
+\def\nodezzz#1{\nodexxx [#1,]\endgroup} % \endgroup added 18-Mar-91, Niels
+\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+%\def\node#1#2#3#4{\gdef\lastnode{#1}}
+\let\lastnode=\relax
+
+\def\label{\begingroup\doxrefspecials\@label} % 18-Mar-91, Niels
+\def\@label#1{% this is mostly \label of latex.sty 18-Mar-91, Niels
+ \@bsphack\if@filesw {\let\thepage\relax
+ \def\protect{\noexpand\noexpand\noexpand}%
+ \xdef\@gtempa{\write\@auxout{\string
+ \newlabel{#1}{{\@currentlabel}{\thepage}}}}}\@gtempa
+ \if@nobreak\ifvmode\nobreak\fi\fi\fi\@esphack
+ \endgroup}% \endgroup added, 18-Mar-91, Niels
+
+\def\newlabel{\begingroup\doxrefspecials\@newlabel} % 18-Mar-91, Niels
+\def\@newlabel#1#2{% this is mostly \newlabel of latex.sty 18-Mar-91, Niels
+ \@ifundefined{r@#1}{}{\@warning{Label `#1' multiply
+ defined}}\global\@namedef{r@#1}{#2}%
+ \endgroup} % \endgroup added, 18-Mar-91, Niels
+
+\def\@testdef{\begingroup\doxrefspecials\@@testdef} % 18-Mar-91, Niels
+\def\@@testdef #1#2#3{% this is mostly \@testdef of latex.sty 18-Mar-91, Niels
+ \def\@tempa{#3}%
+ \expandafter \ifx \csname #1@#2\endcsname
+ \@tempa \else \@tempswatrue \fi
+ \endgroup} % \endgroup added, 18-Mar-91, Niels
+
+\let\refill=\relax
+\let\alwaysrefill=\relax
+\def\setfilename#1{}
+\def\paragraphindent#1{}
+\def\footnotestyle#1{}
+
+%\def\do{\noexpand\do\noexpand}
+%\edef\@preamblecmds{\@preamblecmds \do \setfilename footnotestyle}
+
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{\@@See{} Info file
+ \file{\losespace#3{}}, node `\losespace#1{}'}
+\def\losespace #1{#1}
+
+\message{fonts,}
+
+\font\egttt = cmtt8 % typewriter
+ \hyphenchar\egttt = -1 % suppress hyphenation in \tt font
+\font\nintt = cmtt9 % typewriter
+ \hyphenchar\nintt = -1 % suppress hyphenation in \tt font
+\font\tentt = cmtt10 % typewriter
+ \hyphenchar\tentt = -1 % suppress hyphenation in \tt font
+\font\elvtt = cmtt10 scaled \magstephalf % typewriter
+ \hyphenchar\elvtt = -1 % suppress hyphenation in \tt font
+\font\twltt = cmtt12 % typewriter
+ \hyphenchar\twltt = -1 % suppress hyphenation in \tt font
+\global\hyphenchar\egttt = `\-
+\global\hyphenchar\nintt = `\-
+\global\hyphenchar\tentt = `\-
+\global\hyphenchar\elvtt = `\-
+\global\hyphenchar\twltt = `\-
+
+% Font-change commands.
+% Should depend on optional point size.
+%\font\defbf=cmbx10 scaled \magstep1 %was 1314
+%\font\deftt=cmtt10 scaled \magstep1
+\def\df{\bf\tt}
+
+\def\li{\sf}
+
+%% Add scribe-like font environments, plus \l for inline lisp (usually sans
+%% serif) and \ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
+\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\var=\smartitalic
+\let\dfn=\smartitalic
+\let\emph=\smartitalic
+
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+\def\t#1{{\tt \exhyphenpenalty=10000\rawbackslash \frenchspacing #1}\null}
+
+\def\key#1{{\tt \exhyphenpenalty=10000\uppercase{#1}}\null}
+\def\ctrl#1{$\uparrow${\tt #1}}
+%\def\ctrl#1{{\tt \rawbackslash \hat}#1}
+
+\def\samp #1{`\tclose{#1}'\null}
+\let\file=\samp
+% \code is a modification of \t,
+% which makes spaces the same size as normal in the surrounding text.
+\newdimen\tclosesave
+\newdimen\tcloserm
+\def\tclose#1{{\rm \tcloserm=\fontdimen2\font \tt \tclosesave=\fontdimen2\font
+\fontdimen2\font=\tcloserm
+% prevent breaking lines at hyphens.
+\exhyphenpenalty=10000
+\def\ {{\fontdimen2\font=\tclosesave{} }}%
+ \rawbackslash \frenchspacing #1\fontdimen2\font=\tclosesave}\null}
+\let\code=\tclose
+
+% \kbd is like \code, except that if the argument is just one \key command,
+% then \kbd has no effect.
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else\tclose{\look}\fi
+\else\tclose{\look}\fi}
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: \dmn{pt} instead of
+% \dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+\def\l#1{{\li #1}\null}
+\def\r#1{{\rm #1}}
+\def\scap#1{{\sc #1}}
+\def\ii#1{{\it #1}}
+\def\n#1{{\normalsize #1}}
+
+\def\bullet{$\ptexbullet$}
+\def\labelitemi{$\ptexbullet$}
+
+\def\minus{$-$}
+
+% Make altmode in file print out right
+\catcode `\^^[=\active \def^^[{$\diamondsuit$}
+
+%%% Fancy boxes from texinfo-2.11.tex
+% Since these characters are used in examples, it should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+% Furthermore, these definitions must come after we define our fonts.
+\newbox\dblarrowbox \newbox\longdblarrowbox
+\newbox\pushcharbox \newbox\bullbox
+\newbox\equivbox \newbox\errorbox
+
+\let\ptexequiv = \equiv
+
+{\tentt
+\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil}
+\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil}
+\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil}
+\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil}
+% Adapted from the manmac format (p.420 of TeXbook)
+\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex
+ depth .1ex\hfil}
+}
+
+\def\point{$\star$}
+\def\result{\leavevmode\raise.15ex\copy\dblarrowbox}
+\def\expansion{\leavevmode\raise.1ex\copy\longdblarrowbox}
+\def\print{\leavevmode\lower.1ex\copy\pushcharbox}
+\def\equiv{\leavevmode\lower.1ex\copy\equivbox}
+
+% Does anyone really want this?
+% \def\bull{\leavevmode\copy\bullbox}
+
+% Adapted from the TeXbook's \boxit.
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
+
+\global\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+
+% The \error{} command.
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define the texinfo user-accessible indexing commands for backwrds
+% compatability.
+
+\def\cindex{\cpindex}
+\def\pindex{\pgindex}
+\def\vindex{\vrindex}
+\def\tindex{\tpindex}
+\def\kindex{\kyindex}
+\def\findex{\fnindex}
+
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+
+\def\newindex#1{\csname newindex#1\endcsname}
+
+% Yes I know this could be done shorter, but safer??
+
+\def\newindexcp{\if@filesw \newwrite\@cpindexfile
+ \immediate\openout\@cpindexfile=\jobname.cp
+ \def\cpindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@cpindexfile}%
+ \def\cpsubindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrsubindex\@cpindexfile}%
+ \def\cpindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@cpindexfile}
+ \typeout{Writing concepts index file \jobname.cp }%
+ \fi}
+
+\def\cpindex{\@bsphack\begingroup \@sanitize\@index}
+\def\cpsubindex{\@bsphack\begingroup \@sanitize\@index}
+\def\cpindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\@wrindex#1#2{\let\thepage\relax
+ \xdef\@gtempa{\write#1{\string \entry{#2}{\thepage}{#2}}}\endgroup
+ \def\@tempa{}\def\thing{#2}\ifx\thing\@tempa\relax\else\@gtempa\fi
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\@wrindexbold#1#2{\let\thepage\relax \let\bf\relax
+ \xdef\@gtempa{\write#1{\string \entry{#2}{\b{\thepage}}{#2}}}\endgroup
+ \def\@tempa{}\def\thing{#2}\ifx\thing\@tempa\relax\else\@gtempa\fi
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\@wrsubindex#1#2#3{\let\thepage\relax
+ \xdef\@gtempa{\write#1{\string \entry{#2 #3}{\thepage}{#2}{#3}}}\endgroup%
+ \@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\@index#1{\endgroup\@esphack}
+
+\def\pgindex{\@bsphack\begingroup \@sanitize\@index}
+\def\newindexpg{\if@filesw \newwrite\@pgindexfile
+ \immediate\openout\@pgindexfile=\jobname.pg
+ \def\pgindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@pgindexfile}
+ \def\pgindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@pgindexfile}
+ \typeout{Writing index file \jobname.pg }\fi}
+
+\def\pgindex{\@bsphack\begingroup \@sanitize\@index}
+\def\pgindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindexvr{\if@filesw \newwrite\@vrindexfile
+ \immediate\openout\@vrindexfile=\jobname.vr
+ \def\vrindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@vrindexfile}
+ \def\vrindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@vrindexfile}
+ \typeout{Writing variable index file \jobname.vr }\fi}
+
+\def\vrindex{\@bsphack\begingroup \@sanitize\@index}
+\def\vrindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindextp{\if@filesw \newwrite\@tpindexfile
+ \immediate\openout\@tpindexfile=\jobname.tp
+ \def\tpindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@tpindexfile}
+ \def\tpindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@tpindexfile}
+ \typeout{Writing datatype index file \jobname.tp }\fi}
+
+\def\tpindex{\@bsphack\begingroup \@sanitize\@index}
+\def\tpindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindexky{\if@filesw \newwrite\@kyindexfile
+ \immediate\openout\@kyindexfile=\jobname.ky
+ \def\kyindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@kyindexfile}\typeout{Writing key index file \jobname.ky }\fi}
+
+\def\kyindex{\@bsphack\begingroup \@sanitize\@index}
+\def\kyindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindexfn{\if@filesw \newwrite\@fnindexfile
+ \immediate\openout\@fnindexfile=\jobname.fn
+ \def\fnindex{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindex\@fnindexfile}
+ \def\fnindexbold{\@bsphack\begingroup
+ \def\protect####1{\string####1\space}\@sanitize
+ \@wrindexbold\@fnindexfile}
+ \typeout{Writing function index file \jobname.fn }\fi}
+
+\def\fnindex{\@bsphack\begingroup \@sanitize\@index}
+\def\fnindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+% \synindex{foo}{bar} makes index foo feed into index bar.
+\def\synindex#1#2{\expandafter\xdef \csname @#1index\endcsname{%
+ \noexpand\csname @#2index\endcsname}%
+\expandafter \chardef \csname @#1indexfile\endcsname=\csname @#2indexfile\endcsname}
+
+% \syncodeindex{foo}{bar} similar, but put all entries made for index foo
+% inside bold.
+\def\syncodeindex#1#2{%
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo
+\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex
+\csname#1boldindex\endcsname{#2}}%
+}
+
+% Define the macros used in formatting output of the sorted index material.
+% This is what you call to cause a particular index to get printed.
+% Write
+% \section*{Function Index}
+% \printindex{fn}
+
+\newskip\secondaryindent
+\secondaryindent=0.5cm
+
+\def\printindex#1{
+\def\indexbackslash{\rawbackslashxx}
+\tolerance=9500 \advance\baselineskip -1pt
+\openin 1 \jobname.#1s
+\ifeof 1 \else \closein 1 \input \jobname.#1s
+\fi
+}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\Dotsbox{\hbox to 1em{\hss.\hss}} % Used by index macros
+
+\def\initial#1{%
+{\bigbreak\pline{\large\bf#1\hfill}\kern 2pt\penalty3000}}
+
+\def\entry #1#2{
+{\parfillskip=0in \parskip=0in \parindent=0in \small
+\hangindent=1in \hangafter=1%
+\noindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll\relax #2\par
+}}
+
+\def\primary #1{\pline{\small#1\hfil}}
+
+\def\secondary #1#2{
+{\parfillskip=0in \parskip=0in \small
+\hangindent =1in \hangafter=1
+\noindent\hskip\secondaryindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll#2\par
+}}
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+\message{environments,}
+
+% \begin{tex} ... \end{tex} escapes into raw Tex temporarily.
+
+\def\tex{\begingroup
+\catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+\catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie
+\catcode `\%=14
+\catcode`\"=12
+\catcode`\|=12
+\catcode`\<=12
+\catcode`\>=12
+
+\let\{=\ptexlbrace
+\let\}=\ptexrbrace
+\let\.=\ptexdot
+\let\*=\ptexstar
+\let\bullet=\ptexbullet
+\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl
+\let\L=\ptexL
+
+\let\endtex=\endgroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \cartouche: draw rectangle w/rounded corners around argument
+\font\circfont=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circfont
+%
+\def\ctl{{\circfont\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circfont\char'010}}
+\def\cbl{{\circfont\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circfont\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\long\def\cartouche{%
+\begingroup
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt %we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18pt % allow for 3pt kerns on either
+% side, and for 6pt waste from
+% each corner char
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ \vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \hsize=\cartinner
+ \kern3pt
+ \begingroup
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+\def\endcartouche{%
+ \endgroup
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+\endgroup
+}}
+
+% Define \lisp ... \endlisp.
+% Like example, but uses a smaller fixed-width font.
+% Wraps things in a \samepage.
+
+
+% Amount to narrow the margins by for \lisp.
+\newskip\lispnarrowing \lispnarrowing=\parindent
+
+% This is the definition that ^M gets inside \lisp
+% phr: changed space to \null, to avoid overfull hbox problems.
+{\obeyspaces%
+\gdef\lisppar{\null\endgraf}}
+
+% Cause \obeyspaces to make each Space cause a word-separation
+% rather than the default which is that it acts punctuation.
+% This is because space in tt font looks funny.
+{\obeyspaces %
+\gdef\sepspaces{\def {\ }}}
+
+\newskip\aboveenvskipamount \aboveenvskipamount= 0pt
+\def\aboveenvbreak{{\advance\aboveenvskipamount by \parskip
+\endgraf \ifdim\lastskip<\aboveenvskipamount
+\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}}
+
+\def\afterenvbreak{\endgraf \ifdim\lastskip<\aboveenvskipamount
+\removelastskip \penalty-50 \vskip\aboveenvskipamount \fi}
+
+%-----File: example.sty----------------------------------------------
+
+% Copyright Denys Duchier, Yale University, 1988.
+%
+% \begin{example}...\end{example} is very much like verbatim, except
+% that it doesn't change the meaning of \, { or }. This makes it
+% possible to include commands (such as font changes) in otherwise
+% verbatim text.
+%
+% \begin{example*}{OFFSET}...\end{example*} is the same except that
+% everything is indented by OFFSET. This works even inside other list
+% environments.
+%
+% inside example, you can use \begin{comment}...\end{comment} to
+% include normal TeX text. \begin{comment}[OFFSET] will offset the
+% comment by the specified offset.
+
+\newdimen\exampleleftmargin \exampleleftmargin\z@
+\def\examplesavespecials{\let\xmpl@space\ \let\xmpl@dollar\$
+\let\xmpl@amper\&\let\xmpl@hash\#\let\xmpl@caret\^\let\xmpl@cntlK\^^K
+\let\xmpl@dq\"
+\let\xmpl@underscore\_\let\xmpl@cntlA\^^A\let\xmpl@percent\%
+\let\xmpl@tilde\%}
+\def\examplerestorespecials{\let\ \xmpl@space\let\$\xmpl@dollar
+\let\&\xmpl@amper\let\#\xmpl@hash\let\^\xmpl@caret\let\^^K\xmpl@cntlK
+\let\"\xmpl@dq
+\let\_\xmpl@underscore\let\^^A\xmpl@cntlA\let\%\xmpl@percent
+\let\%\xmpl@tilde}
+\def\example@dospecials{\do\ \do\$\do\&\do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\%}
+\def\example@verbatim{\let\comment\xmpl@comment\let\endcomment\xmpl@@endcomment
+ \let\back\xmpl@back
+ \list{}{\parsep\parskip
+ \leftmargin\exampleleftmargin
+ \labelwidth\z@
+ \itemindent\z@
+ \def\makelabel##1{##1}}\item[]\if@minipage\else\vskip\parskip\fi
+ \leftskip\@totalleftmargin
+ \rightskip\z@
+ \parindent\z@
+ \parfillskip\@flushglue
+ \parskip\z@
+ \@tempswafalse
+ \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+ \obeylines
+\ifcase \@ptsize\relax\tentt\or\elvtt\or\twltt\fi
+\hyphenpenalty=\@M \exhyphenpenalty=\@M \brokenpenalty=\@M
+ \@noligs
+ \examplesavespecials
+ \let\do\@makeother\dospecials}
+%
+{\catcode`\ =\active
+\@vobeyspaces
+\gdef\xmpl@back{
+\let\@tempe \def\@tempa{\rawbackslashxx\@gobble}\def\@tempb{\rawbackslashxx}\futurelet\@tempc\@ifnch}
+}
+\def\xmpl@comment{\@ifnextchar [{\xmpl@@comment}{\xmpl@@comment[0pt]}}
+\def\xmpl@@comment[#1]{\begingroup
+ \examplerestorespecials
+ \catcode`\ =10 \catcode`\^^M=5
+ \list{}{\leftmargin\exampleleftmargin
+ \advance\leftmargin #1}\item[]\rm\ignorespaces}
+\def\xmpl@@endcomment{\endlist\endgroup\vskip-\baselineskip}
+
+\def\@example{%
+\ifcase \@ptsize\relax\tentt\or\elvtt\or\twltt\fi
+\let\dospecials\example@dospecials
+ \example@verbatim\frenchspacing\@vobeyspaces}
+\def\example{\exampleleftmargin\lispnarrowing\@example}
+\let\endexample\endlist
+\@namedef{example*}#1{\exampleleftmargin#1\@example}
+\expandafter\let\csname endexample*\endcsname\endexample
+
+\def\@smallexample{%
+\ifcase \@ptsize\relax\nintt\or\tentt\or\elvtt\fi
+\let\dospecials\example@dospecials
+ \example@verbatim\frenchspacing\@vobeyspaces}
+\def\smallexample{\exampleleftmargin\lispnarrowing\@smallexample}
+\let\endsmallexample\endlist
+\@namedef{smallexample*}#1{\exampleleftmargin#1\@smallexample}
+\expandafter\let\csname endsmallexample*\endcsname\endsmallexample
+
+\def\lisp{\example}
+\def\endlisp{\endexample}
+
+\def\smalllisp{\smallexample}
+\def\endsmalllisp{\endsmallexample}
+
+\def\@display{%
+\let\dospecials\example@dospecials
+ \example@verbatim\frenchspacing\@vobeyspaces}
+\def\display{\exampleleftmargin\lispnarrowing\@display}
+\let\enddisplay\endlist
+
+\def\@format{%
+\let\dospecials\example@dospecials
+ \example@verbatim\frenchspacing\@vobeyspaces}
+\def\format{\exampleleftmargin\z@\@format}
+\let\endformat\endlist
+
+\def\exdent#1{\hskip -\leftmargin \hbox{#1\hss}}
+%end -----File: example.sty----------------------------------------------
+
+\newbox\@onepagebox
+\def\same{\global\setbox\@onepagebox\vbox\bgroup
+% \boxmaxdepth\z@ % commented out 15 Dec 87
+% \hsize\columnwidth \@parboxrestore}
+\begin{minipage}[c]{\linewidth}}
+
+\def\endsame{\end{minipage}\par\vskip\z@\egroup %
+\ifdim \ht\@onepagebox >\textheight
+\ht\@onepagebox\textheight \fi
+\unvbox\@onepagebox}
+
+\newskip\ruletonoteskip \ruletonoteskip=6pt plus 3pt minus 1pt
+\newskip\ruletotextskip \ruletotextskip=10pt plus 12pt minus 2pt
+\newdimen\thinrule \thinrule=0.4pt
+
+\def\beforenoterule{\par\@tempskipb\lastskip \@tempdima\prevdepth
+ \ifdim 0pt>\@tempdima \@tempdima=0pt\fi
+ \ifdim 14pt>\@tempskipb \vskip-\@tempskipb \vskip 14pt \fi
+ \kern-\@tempdima\nointerlineskip
+ \hrule height \thinrule width 12pc
+ \nobreak\vskip 16pt\vskip-\baselineskip\hbox{}\nobreak}
+
+\def\betweennoterule{\par\@tempskipb\lastskip \@tempdima\prevdepth
+ \ifdim 0pt>\@tempdima \@tempdima=0pt\fi
+ \nobreak
+ \vskip-\@tempskipb \vskip 11pt
+ \kern-\@tempdima\nointerlineskip
+ \hrule height \thinrule width 12pc\penalty-500\vskip -\thinrule
+ % The game here is to have *two* rules that normally coincide exactly,
+ % but if a page break occurs between them then you get one at the
+ % bottom of the first page and one at the top of the second page.
+ \hrule height \thinrule width 12pc
+ \nobreak\vskip 16pt\vskip-\baselineskip\hbox{}\nobreak}
+
+\def\afternoterule{\par\@tempskipb\lastskip \@tempdima\prevdepth
+ \ifdim 0pt>\@tempdima \@tempdima=0pt\fi
+ \nobreak
+ \vskip-\@tempskipb \vskip 11pt
+ \nobreak\kern-\@tempdima\nointerlineskip
+ \hrule height \thinrule width 12pc
+ \vskip 16pt}
+
+\def\afternoterule{\par\nobreak\vskip\ruletonoteskip
+ \hrule height \thinrule width 12pc
+ \vskip\ruletotextskip}
+
+
+\def\implementation{\par\small\noindent{\bf Implementation note:}}
+\def\endimplementation{\par}
+\def\rationale{\par\small\noindent{\bf Rationale:}}
+\def\endrationale{\par}
+\def\sideremark{\par\small\noindent{\bf Remark:}}
+\def\endsideremark{\par}
+\def\note{\par\small\noindent{\bf Note:}}
+\def\endnote{\par}
+
+\message{cross reference,}
+% Define cross-reference macros
+
+% \xref and \pxref generate cross references to specified points.
+\def\pxref{\begingroup\doxrefspecials\@pxref}% 18-Mar-91, Niels
+\def\@pxref #1{\@@see{} \xrefX [#1,,,,,,,]\endgroup}% 18-Mar-91, Niels
+\def\nxref{\begingroup\doxrefspecials\@nxref}% 18-Mar-91, Niels
+\def\@nxref #1{\xrefX [#1,,,,,,,]\endgroup}% 18-Mar-91, Niels
+\def\xref{\begingroup\doxrefspecials\@xref}% 18-Mar-91, Niels
+\def\@xref #1{\@@See{} \xrefX [#1,,,,,,,]\endgroup}% 18-Mar-91, Niels
+
+\def\MikesxrefX [#1,#2,#3,#4,#5,#6]{section \ref{#1} [%
+{\setbox0=\hbox{\losespace#3{}}%
+\ifdim \wd0 =0pt \losespace#1{}\else\unhbox0\fi}],
+page\tie \pageref{#1}}
+
+% In the following macro the sceleton isnt changed.
+% Instead of \setbox0 and \setbox1 the new boxes \@Topic and
+% \@APrintedManual are used. 18-Mar-91, Niels
+% Redefined out because it costs too many boxes 10-Nov-91 Mike.
+\newbox\@Topic
+\newbox\@APrintedManual
+\def\xrefX [#1,#2,#3,#4,#5,#6]{%
+ \setbox\@Topic=\hbox{\i{\losespace#5{}}}%
+ \setbox\@APrintedManual=\hbox{\losespace#3{}}%
+ \ifdim \wd\@Topic =0pt
+ \setbox\@Topic=\hbox{{\doxrefnormalise % some what tricky
+ \losespace#1{}}}%
+ \fi
+ \@@section{} % print section in all cases just as the manual says.
+ % 18-Mar-91, Niels
+ \ifdim \wd\@APrintedManual >0pt%
+ \unhbox\@Topic{} in \unhbox\@APrintedManual%
+ \else \ref{#1} [\unhbox\@Topic], \@@page\tie \pageref{#1}%
+ \fi}
+
+\message{sectioning,}
+% Define chapters, sections, etc.
+
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#1}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}
+\ifx\lastnode\relax\else\label{\lastnode}\fi
+\let\lastnode=\relax
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+\addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
+\@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{#2}
+ \@afterheading \fi}
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}
+ \@afterheading\fi}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}
+ \edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+\ifx\lastnode\relax\else\label{\lastnode}\fi
+\let\lastnode=\relax
+ \@xsect{#5}}
+
+% Unnumbered
+\def\unnumbered#1{\chapter*{#1}\@mkboth{\uppercase{#1}}{\uppercase{#1}}
+\addcontentsline{toc}{chapter}{#1}}
+
+% This is bogus if you use it in a book or report style
+\def\unnumberedsec#1{\section*{#1}\@mkboth{\uppercase{#1}}{\uppercase{#1}}
+\addcontentsline{toc}{section}{#1}}
+
+\def\unnumberedsubsec#1{\subsection*{#1}\addcontentsline
+ {toc}{subsection}{#1}}
+
+\def\unnumberedsubsubsec#1{\subsubsection*{#1}\addcontentsline
+ {toc}{subsubsection}{#1}}
+
+
+\message{verbatim,}
+% ****************************************
+% * VERBATIM *
+% ****************************************
+%
+% The verbatim environment uses the fixed-width \tt font, turns blanks into
+% spaces, starts a new line for each carrige return (or sequence of
+% consecutive carriage returns), and interprets EVERY character literally.
+% I.e., all special characters \, {, $, etc. are \catcode'd to 'other'.
+%
+% The command \verb produces in-line verbatim text, where the argument
+% is delimited by any pair of characters. E.g., \verb #...# takes
+% '...' as its argument, and sets it verbatim in \tt font.
+%
+% The *-variants of these commands is the same, except that spaces
+% print as the TeXbook's space character instead of as blank spaces.
+
+{\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar
+{\@gobble}{\ignorespaces}}}
+
+{\catcode`\ =\active\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}}
+
+% Definition of \@xobeysp chaned on 19 Nov 86 from
+% \def\@xobeysp{\leavevmode{} }
+% to prevent line breaks at spaces. Change suggested by
+% Nelson Beebe
+%
+\def\@xobeysp{\leavevmode\penalty10000\ }
+
+\begingroup \catcode `|=0 \catcode `[= 1
+\catcode`]=2 \catcode `\{=12 \catcode `\}=12
+\catcode`\\=12 |gdef|@smallxverbatim#1\end{smallverbatim}[#1|end[smallverbatim]]
+|gdef|@smallsxverbatim#1\end{smallverbatim*}[#1|end[smallverbatim*]]
+|endgroup
+
+\def\@gobble#1{}
+
+\def\@smallverbatim{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \ifcase \@ptsize\relax\nintt\or\tentt\or\elvtt\fi
+\catcode``=13 \@noligs \let\do\@makeother \dospecials}
+
+\def\smallverbatim{\@smallverbatim \frenchspacing\@vobeyspaces \@smallxverbatim}
+\def\endsmallverbatim{\endtrivlist%\def\baselinestretch{1.0}
+}
+
+\@namedef{smallverbatim*}{\@smallverbatim\@smallsxverbatim}
+\expandafter\let\csname endsmallverbatim*\endcsname =\endtrivlist
+
+% Wizardly incantation of the net to include files verbatim
+% Usage \verbatimfile{filename}
+% \end{verbatim}
+\newcommand{\beginverb}{\begin{verbatim}}
+\newcommand{\inputfile}[1]{\input{#1}}
+\newcommand{\verbatimfile}[1]{\expandafter\beginverb\inputfile{#1}}
+
+\newcommand{\beginsmallverb}{\begin{smallverbatim}}
+\newcommand{\smallverbatimfile}[1]{\expandafter\beginsmallverb\inputfile{#1}}
+
+% Now make all imbedded control L's <Form Feed> act like \newpage
+\catcode`^^L = \active
+\def^^L{\newpage}
+
+%% For a final copy, take out the rectangles
+%% that mark overfull boxes (in case you have decided
+%% that the text looks ok even though it passes the margin).
+\def\finalout{\overfullrule=0pt}
+
+\message{and turning on latexinfo input format.}
+
+{\catcode`\@=0
+
+% \rawbackslashxx output one backslash character in current font
+\global\chardef\rawbackslashxx=`\\
+%{\catcode`\\=\other
+%@gdef@rawbackslashxx{\}}
+
+% \rawbackslash redefines \ as input to do \rawbackslashxx.
+{\catcode`\\=\active
+@gdef@rawbackslash{@let\=@rawbackslashxx }}
+}
+
+% \back outputs one backslash in fixed width font.
+\def\back{{\tt\rawbackslashxx}}% inner {} forgotten,
+ % added at 18-Mar-91, Stefan&Eric
+ % \ignorespaces removed Feb 1992, mike
+
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement
+ \makeatletter\let\@writefile\@gobbletwo
+ \@input{\jobname.aux}\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\relax}\fi
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+\@normalsize\everypar{}\nospecials}
+
+% LaTeXinfo support for \cite
+%
+% CITE.STY -- compress numerical citations.
+% See also OVERCITE.STY.
+%
+% Copyright (C) 1989 by Donald Arseneau
+% These macros may be freely transmitted, reproduced, or modified for
+% non-commercial purposes provided that this notice is left intact.
+%
+\def\citen#1{%
+\if@filesw \immediate \write \@auxout {\string \citation {#1}}\fi
+\@tempcntb\m@ne \let\@h@ld\relax \def\@citea{}%
+\@for \@citeb:=#1\do {%
+ \@ifundefined {b@\@citeb}%
+ {\@h@ld\@citea\@tempcntb\m@ne{\bf ?}%
+ \@warning {Citation `\@citeb ' on page \thepage \space undefined}}%
+% else
+ {\@tempcnta\@tempcntb \advance\@tempcnta\@ne
+ \setbox\z@\hbox\bgroup\ifcat0\csname b@\@citeb \endcsname \relax
+ \egroup \@tempcntb\number\csname b@\@citeb \endcsname \relax
+ \else \egroup \@tempcntb\m@ne \fi
+ \ifnum\@tempcnta=\@tempcntb % Number follows previous--hold on to it
+ \ifx\@h@ld\relax
+% % first pair of successives
+ \edef \@h@ld{\@citea\csname b@\@citeb\endcsname}%
+ \else
+% % compressible list of successives
+% % use \hbox to avoid easy \exhyphenpenalty breaks on-line
+ \edef\@h@ld{\hbox{--}\penalty\@highpenalty
+ \csname b@\@citeb\endcsname}%
+ \fi
+ \else % non-successor--dump what's held and do this one
+ \@h@ld\@citea\csname b@\@citeb \endcsname
+ \let\@h@ld\relax
+ \fi}%
+%% To put space after the comma, use:
+ \def\@citea{,\penalty\@highpenalty\hskip.13em plus.13em minus.13em}%
+%% For no space after comma, use:
+%% \def\@citea{,\penalty\@highpenalty}% penalty is for on-line with note.
+%%
+}\@h@ld}
+%
+% Replacement for \@citex:
+%
+\def\@citex[#1]#2{\@cite{\citen{#2}}{#1}}%
+%
+% Replacement for \@cite
+%
+\def\@cite#1#2{\leavevmode\unskip
+ \ifnum\lastpenalty=\z@\penalty\@highpenalty\fi% highpenalty before
+ \ [{\multiply\@highpenalty 3 #1% % triple-highpenalties within.
+ \if@tempswa,\penalty\@highpenalty\ #2\fi}]} % and before note.
+%
+
+%
+% LaTeXinfo support for the \tabular-environment
+%
+%% Some people want to use & and | as a normal char but tabulars too.
+%% So we define | to be electrical only within the preamble of the
+%% tabular-environment, and & in the body.
+%% To achieve this I use the \begingroup and \endgroup of the
+%% \begin{tabular} and \end{tabular} resp.
+%% "|" is catcoded to \other (12) before the preamble in \@tabular
+%% (see below) and after it to \active, yielding a vertbar within the
+%% body of the tabular-environment.
+%% The "&" is catcoded to 4 (tab char) after the preamble. So you can
+%% use "&" in the preamble as "self-insert-char".
+%%
+%% \@tabular is copied from latex.tex, 9-Apr-91,
+%% \@array is copied from latex.tex, 4-Sep-91,
+%% Niels-Holger Geske.
+%%
+
+\def\@tabular{% this macro is copied from latex.tex and slightly
+ % changed.
+ \catcode`\|=\other% for use in preamble, 4-Sep-91 Niels
+ \leavevmode
+ \hbox \bgroup
+ $\let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\@tabularcr
+ \@tabarray}
+
+\def\@array[#1]#2{% this macro is copied from latex.tex and slightly
+ % changed.
+ \setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}%
+ \@mkpream{#2}%
+ \edef\@preamble{%
+ \halign
+ \noexpand\@halignto
+ \bgroup
+ \tabskip\z@
+ \@arstrut
+ \@preamble
+ \tabskip\z@
+ \cr}%
+ \let\@startpbox\@@startpbox
+ \let\@endpbox\@@endpbox
+ \catcode`\&=4% for seperating columns, 4-Sep-91 Niels
+ \catcode`\|=\active% for getting vertbar, 4-Sep-91 Niels
+ \if #1t\vtop
+ \else \if#1b\vbox
+ \else \vcenter
+ \fi \fi
+ \bgroup \let\par\relax
+ \let\@sharp##%
+ \let\protect\relax
+ \lineskip\z@
+ \baselineskip\z@
+ \@preamble}
+
+% Here is a list of the characters that have been specially catcoded:
+\def\dosomespecials{\do\$\do\&\do\#\do\%\do\~\do\^}
+
+\newcount\l@nguage
+% This will be re-declared as \language if the latter has not yet been
+% declared neither by Ferguson's ``Multilingual T^eX'' nor by TeX 3:
+% \ifundefined{language}
+\expandafter\ifx\csname language\endcsname\relax
+\global\let\language=\l@nguage
+\fi
+\newcount\USenglish \global\USenglish=0
+\newcount\german \global\german=1
+\newcount\austrian \global\austrian=2
+\newcount\french \global\french=3
+\newcount\english \global\english=4
+
+% We want all these funny characters CHARs to appear in the printed
+% manual as themselves. So we catcode them to \active and \let them to
+% produce the character CHAR from the \tt font (see \nospecials
+% below). But when writing to the .aux-file, we must write the
+% ascii-code of the character, stored in \@ascii@CHAR, not the
+% activated macro, whose definition is saved in \@normal@CHAR (see
+% \doxrefspecials below). The macro \doxrefnormalise restores these
+% @normal@ definitions. 4-Sep-91 Niels-Holger Geske
+
+{\begingroup % the following lines inserted at 18-Mar-91, Niels
+ \catcode`\"=\other
+ \gdef\@ascii@doublequote{"}
+ \catcode`\>=\other
+ \gdef\@ascii@gtr{>}
+ \catcode`\<=\other
+ \gdef\@ascii@less{<}
+ \catcode`\_=\other
+ \gdef\@ascii@underscore{_}
+ \catcode`\|=\other
+ \gdef\@ascii@pipe{|}% Fixed, was "
+\endgroup
+
+\catcode`\"=\active
+\catcode`\>=\active
+\catcode`\<=\active
+\catcode`\_=\active
+\catcode`\|=\active
+\gdef\doxrefnormalise{% the following lines inserted at 18-Mar-91, Niels
+ \catcode`\"=\active
+ \let"=\@normal@doublequote
+ \catcode`\>=\active
+ \let>=\@normal@gtr
+ \catcode`\<=\active
+ \let<=\@normal@less
+ \catcode`\_=\active
+ \let_=\@normal@underscore
+ \catcode`\|=\active
+ \let|=\@normal@pipe}
+\gdef\doxrefspecials{% the following lines inserted at 18-Mar-91, Niels
+ \let\@normal@doublequote="%
+ \let\@normal@gtr=>%
+ \let\@normal@less=<%
+ \let\@normal@underscore=_%
+ \let\@normal@pipe=|%
+ \catcode`\"=\active
+ \let"=\@ascii@doublequote
+ \catcode`\>=\active
+ \let>=\@ascii@gtr
+ \catcode`\<=\active
+ \let<=\@ascii@less
+ \catcode`\_=\active
+ \let_=\@ascii@underscore
+ \catcode`\|=\active
+ \let|=\@ascii@pipe}
+\gdef\@englishtext{%
+ \def\@@See{See}%
+ \def\@@see{see}%
+ \def\@@section{section}%
+ \def\@@page{page}%
+}
+\gdef\@germantext{%
+ \def\@@See{Siehe}%
+ \def\@@see{siehe}%
+ \def\@@section{Abschnitt}%
+ \def\@@page{Seite}%
+}
+\gdef\@frenchtext{%
+ \def\@@See{Voir}%
+ \def\@@see{voir}%
+ \def\@@section{section}%
+ \def\@@page{Page}%
+}
+\gdef\nospecials{%
+ \ifnum\language=\USenglish
+ \@englishtext
+ \catcode`\"=\active
+ \gdef\activedoublequote{{\tt \char '042}}%
+ \let"=\activedoublequote
+ \else
+ \ifnum\language=\english
+ \@englishtext
+ \catcode`\"=\active
+ \gdef\activedoublequote{{\tt \char '042}}%
+ \let"=\activedoublequote
+ \else
+ \ifnum\language=\german
+ \@germantext
+ % \ifundefined{mdqon} or \mdqon=\relax
+ \expandafter\ifx\csname mdqon\endcsname\relax
+ % \then make " a "
+ \catcode`\"=\active
+ \gdef\activedoublequote{{\tt \char '042}}%
+ \let"=\activedoublequote
+ \fi
+ \else
+ \ifnum\language=\french
+ \@frenchtext
+ \fi\fi\fi\fi
+ \catcode`\>=\active
+ \gdef\activegtr{{\tt \char '076}}
+ \let>=\activegtr
+ \catcode`\<=\active
+ \gdef\activeless{{\tt \char '074}}
+ \let<=\activeless
+ \catcode`\_=\active
+ \gdef\activeunderscore{{\tt \char '137}}
+ \let_=\activeunderscore
+ \catcode`\|=\active
+ \gdef\activevertbar{{\tt \char '174}}
+ \let|=\activevertbar
+ \@noligs\let\do\@makeother \dosomespecials}
+}
diff --git a/macros/latex209/contrib/latin2/latin2.sty b/macros/latex209/contrib/latin2/latin2.sty
new file mode 100644
index 0000000000..8091fc1e6c
--- /dev/null
+++ b/macros/latex209/contrib/latin2/latin2.sty
@@ -0,0 +1,420 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Definitions of ISO 8859 Latin-2 standard characters with set
+% 8th bit.
+%
+% Copyright September 1993, Andrej Brodnik (Andy),
+% ABrodnik@UWaterloo.CA
+% use or misuse this file as you like...
+%
+% Adapted from:
+% o the file for Latin-1 by Olaf `Olsen' Barthel, 7.April
+% 1991
+% o ``The TeXbook'' page 356 for letters U and u with a circle
+% on the top
+% o typesetting of crossed D and d from Nenad Antoni\'{c}'s
+% temporary Croatian style 23.05.93
+% o ogonek typesetting taken from ``plhbm.sty -- 93-01-24''
+% by ``Michal Jaegermann <NTOMCZAK@vm.ucs.UAlberta.CA>''.
+% Macros really originated with Leszek Holenderski (based on
+% work of Jerzy Ryll), were later modified by Janusz S.
+% Bie{\'n} and used by Michal.
+%
+% NOTE: Most of letters defined here do not work for math.mode.
+% If one wants to define them for math mode as well, please, go
+% ahead!
+% The definition for a currency symbol is only an approximation.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% See the new `lplain.tex' for TeX 3.0 (>= Version 2.09 Feb 8, 1990)
+%
+% if not(TeX >= 3.0) do_nothing else ...
+\ifx\undefined\inputlineno \else
+\ifnum\inputlineno=-1 \else
+
+\message{ISO 8859-2 (Latin-2)}
+
+%%%%
+% typeset `ogonek' box
+%---
+\dimendef\ogonek@left=0 \dimendef\ogonek@down=1
+\dimendef\ogonek@right=2 \dimendef\ogonek@temp=3
+
+\def\@sob#1#2#3#4#5{\leavevmode%
+% parameters: letter and fractions hl,ho,vl,vo
+% `ogonek' boxes (first horizontal then vertical; first letter then `ogonek')
+\setbox0\hbox{#1}\setbox1\hbox{$_\mathchar'454$}\setbox2\hbox{p}%
+\ogonek@right=#2\wd0 \advance\ogonek@right by-#3\wd1
+\ogonek@down=#5\ht1 \advance\ogonek@down by-#4\ht0
+\ogonek@left=\ogonek@right \advance\ogonek@left by\wd1
+\ogonek@temp=-\ogonek@down \advance\ogonek@temp by\dp2 \dp1=\ogonek@temp
+\kern\ogonek@right\lower\ogonek@down\box1\kern-\ogonek@left #1}
+
+\lccode`±=`±
+\uccode`±=`¡
+\catcode`±=\active \def ±{\@sob a{.66}{.20}{0}{.90}}
+\lccode`¡=`±
+\uccode`¡=`¡
+\catcode`¡=\active \def ¡{\@sob A{.80}{.50}{0}{.90}}
+
+\lccode`¢=`¢
+\uccode`¢=`0
+\catcode`¢=\active \def ¢{\u{}}
+
+\lccode`³=`³
+\uccode`³=`£
+\catcode`³=\active \def ³{\l}
+\lccode`£=`³
+\uccode`£=`£
+\catcode`£=\active \def £{\L}
+
+% the following char is only an approximation of what it should be
+\uccode`¤=`¤
+\lccode`¤=`¤
+\catcode`¤=\active\def ¤{\leavevmode
+ \setbox0\hbox{$\times$}\hbox to\wd0{\hss\hbox to 0pt
+ {\hss$\circ$\hss}\hbox to 0pt{\hss$\times$\hss}\hss}}
+
+\lccode`µ=`µ
+\uccode`µ=`¥
+\catcode`µ=\active \def µ{\v{l}}
+\lccode`¥=`µ
+\uccode`¥=`¥
+\catcode`¥=\active \def ¥{\v{L}}
+
+\lccode`¶=`¶
+\uccode`¶=`¦
+\catcode`¶=\active \def ¶{\'{s}}
+\lccode`¦=`¶
+\uccode`¦=`¦
+\catcode`¦=\active \def ¦{\'{S}}
+
+\lccode`§=`§
+\uccode`§=`0
+\catcode`§=\active \def §{\S}
+
+\lccode`¨=`¨
+\uccode`¨=`0
+\catcode`¨=\active \def ¨{\"{}}
+
+\lccode`¹=`¹
+\uccode`¹=`©
+\catcode`¹=\active \def ¹{\v{s}}
+\lccode`©=`¹
+\uccode`©=`©
+\catcode`©=\active \def ©{\v{S}}
+
+\lccode`º=`º
+\uccode`º=`ª
+\catcode`º=\active \def º{\c{s}}
+\lccode`ª=`º
+\uccode`ª=`ª
+\catcode`ª=\active \def ª{\c{S}}
+
+\lccode`»=`»
+\uccode`»=`«
+\catcode`»=\active \def »{\v{t}}
+\lccode`«=`»
+\uccode`«=`«
+\catcode`«=\active \def «{\v{T}}
+
+\lccode`¼=`¼
+\uccode`¼=`¬
+\catcode`¼=\active \def ¼{\'{z}}
+\lccode`¬=`¼
+\uccode`¬=`¬
+\catcode`¬=\active \def ¬{\'{Z}}
+
+\lccode`­=`­
+\uccode`­=`0
+\catcode`­=\active \def ­{\-}
+
+\lccode`¾=`¾
+\uccode`¾=`®
+\catcode`¾=\active \def ¾{\v{z}}
+\lccode`®=`¾
+\uccode`®=`®
+\catcode`®=\active \def ®{\v{Z}}
+
+\lccode`¿=`¿
+\uccode`¿=`¯
+\catcode`¿=\active \def ¿{\.{z}}
+\lccode`¯=`¿
+\uccode`¯=`¯
+\catcode`¯=\active \def ¯{\.{Z}}
+
+\lccode`°=`°
+\uccode`°=`0
+\catcode`°=\active \def °{\ifmmode^\circ\else$^\circ$\fi}
+
+\lccode`²=`²
+\uccode`²=`0
+\catcode`²=\active \def ²{\@sob \ {.50}{.35}{0}{.90}}
+
+\lccode`´=`´
+\uccode`´=`0
+\catcode`´=\active \def ´{\'{}}
+
+\lccode`·=`·
+\uccode`·=`0
+\catcode`·=\active \def ·{\v{}}
+
+\lccode`¸=`¸
+\uccode`¸=`0
+\catcode`¸=\active \def ¸{\c{\ }}
+
+\lccode`½=`½
+\uccode`½=`0
+\catcode`½=\active \def ½{\H{}}
+
+\lccode`à=`à
+\uccode`à=`À
+\catcode`à=\active \def à{\'{r}}
+\lccode`À=`à
+\uccode`À=`À
+\catcode`À=\active \def À{\'{R}}
+
+\lccode`á=`á
+\uccode`á=`Á
+\catcode`á=\active \def á{\'{a}}
+\lccode`Á=`á
+\uccode`Á=`Á
+\catcode`Á=\active \def Á{\'{A}}
+
+\lccode`â=`â
+\uccode`â=`Â
+\catcode`â=\active \def â{\^{a}}
+\lccode`Â=`â
+\uccode`Â=`Â
+\catcode`Â=\active \def Â{\^{A}}
+
+\lccode`ã=`ã
+\uccode`ã=`Ã
+\catcode`ã=\active \def ã{\u{a}}
+\lccode`Ã=`ã
+\uccode`Ã=`Ã
+\catcode`Ã=\active \def Ã{\u{A}}
+
+\lccode`ä=`ä
+\uccode`ä=`Ä
+\catcode`ä=\active \def ä{\"{a}}
+\lccode`Ä=`ä
+\uccode`Ä=`Ä
+\catcode`Ä=\active \def Ä{\"{A}}
+
+\lccode`å=`å
+\uccode`å=`Å
+\catcode`å=\active \def å{\'{l}}
+\lccode`Å=`å
+\uccode`Å=`Å
+\catcode`Å=\active \def Å{\'{L}}
+
+\lccode`æ=`æ
+\uccode`æ=`Æ
+\catcode`æ=\active \def æ{\'{c}}
+\lccode`Æ=`æ
+\uccode`Æ=`Æ
+\catcode`Æ=\active \def Æ{\'{C}}
+
+\lccode`ç=`ç
+\uccode`ç=`Ç
+\catcode`ç=\active \def ç{\c{c}}
+\lccode`Ç=`ç
+\uccode`Ç=`Ç
+\catcode`Ç=\active \def Ç{\c{C}}
+
+\lccode`è=`è
+\uccode`è=`È
+\catcode`è=\active \def è{\v{c}}
+\lccode`È=`è
+\uccode`È=`È
+\catcode`È=\active \def È{\v{C}}
+
+\lccode`é=`é
+\uccode`é=`É
+\catcode`é=\active \def é{\'{e}}
+\lccode`É=`é
+\uccode`É=`É
+\catcode`É=\active \def É{\'{E}}
+
+\lccode`ê=`ê
+\uccode`ê=`Ê
+\catcode`ê=\active \def ê{\@sob e{.50}{.35}{0}{.93}}
+\lccode`Ê=`ê
+\uccode`Ê=`Ê
+\catcode`Ê=\active \def Ê{\@sob E{.60}{.35}{0}{.90}}
+
+\lccode`ë=`ë
+\uccode`ë=`Ë
+\catcode`ë=\active \def ë{\"{e}}
+\lccode`Ë=`ë
+\uccode`Ë=`Ë
+\catcode`Ë=\active \def Ë{\"{E}}
+
+\lccode`ì=`ì
+\uccode`ì=`Ì
+\catcode`ì=\active \def ì{\v{e}}
+\lccode`Ì=`ì
+\uccode`Ì=`Ì
+\catcode`Ì=\active \def Ì{\v{E}}
+
+\lccode`í=`í
+\uccode`í=`Í
+\catcode`í=\active \def í{\'{\i}}
+\lccode`Í=`í
+\uccode`Í=`Í
+\catcode`Í=\active \def Í{\'{I}}
+
+\lccode`î=`î
+\uccode`î=`Î
+\catcode`î=\active \def î{\^{\i}}
+\lccode`Î=`î
+\uccode`Î=`Î
+\catcode`Î=\active \def Î{\^{I}}
+
+\lccode`ï=`ï
+\uccode`ï=`Ï
+\catcode`ï=\active \def ï{\v{d}}
+\lccode`Ï=`ï
+\uccode`Ï=`Ï
+\catcode`Ï=\active \def Ï{\v{D}}
+
+\lccode`ð=`ð
+\uccode`ð=`Ð
+\catcode`ð=\active
+\def ð{\hbox{%
+d\kern-0,347em%
+\vrule width0,3em height1,252ex depth-1,21ex%
+\kern0,051em}}
+\lccode`Ð=`ð
+\uccode`Ð=`Ð
+\catcode`Ð=\active
+\def Ð{\hbox{%
+D\kern-0,735em%
+\vrule width0,3em height0,86ex depth-0,81ex%
+\kern0,40em}}
+
+\lccode`ñ=`ñ
+\uccode`ñ=`Ñ
+\catcode`ñ=\active \def ñ{\'{n}}
+\lccode`Ñ=`ñ
+\uccode`Ñ=`Ñ
+\catcode`Ñ=\active \def Ñ{\'{N}}
+
+\lccode`ò=`ò
+\uccode`ò=`Ò
+\catcode`ò=\active \def ò{\v{n}}
+\lccode`Ò=`ò
+\uccode`Ò=`Ò
+\catcode`Ò=\active \def Ò{\v{N}}
+
+\lccode`ó=`ó
+\uccode`ó=`Ó
+\catcode`ó=\active \def ó{\'{o}}
+\lccode`Ó=`ó
+\uccode`Ó=`Ó
+\catcode`Ó=\active \def Ó{\'{O}}
+
+\lccode`ô=`ô
+\uccode`ô=`Ô
+\catcode`ô=\active \def ô{\^{o}}
+\lccode`Ô=`ô
+\uccode`Ô=`Ô
+\catcode`Ô=\active \def Ô{\^{O}}
+
+\lccode`õ=`õ
+\uccode`õ=`Õ
+\catcode`õ=\active \def õ{\H{o}}
+\lccode`Õ=`õ
+\uccode`Õ=`Õ
+\catcode`Õ=\active \def Õ{\H{O}}
+
+\lccode`ö=`ö
+\uccode`ö=`Ö
+\catcode`ö=\active \def ö{\"{o}}
+\lccode`Ö=`ö
+\uccode`Ö=`Ö
+\catcode`Ö=\active \def Ö{\"{O}}
+
+\lccode`×=`×
+\uccode`×=`0
+\catcode`×=\active \def ×{\ifmmode\times\else$\times$\fi}
+
+\lccode`ø=`ø
+\uccode`ø=`Ø
+\catcode`ø=\active \def ø{\v{r}}
+\lccode`Ø=`ø
+\uccode`Ø=`Ø
+\catcode`Ø=\active \def Ø{\v{R}}
+
+\lccode`ù=`ù
+\uccode`ù=`Ù
+\catcode`ù=\active \def ù{\accent'27u}
+\lccode`Ù=`ù
+\uccode`Ù=`Ù
+\catcode`Ù=\active \def Ù{\leavevmode%
+\setbox0=\hbox{h}\dimen@=\ht0 \advance\dimen@ by-1ex%
+\rlap{\raise.67\dimen@\hbox{\char'27}}U}
+
+\lccode`ú=`ú
+\uccode`ú=`Ú
+\catcode`ú=\active \def ú{\'{u}}
+\lccode`Ú=`ú
+\uccode`Ú=`Ú
+\catcode`Ú=\active \def Ú{\'{U}}
+
+\lccode`û=`û
+\uccode`û=`Û
+\catcode`û=\active \def û{\H{u}}
+\lccode`Û=`û
+\uccode`Û=`Û
+\catcode`Û=\active \def Û{\H{U}}
+
+\lccode`ü=`ü
+\uccode`ü=`Ü
+\catcode`ü=\active \def ü{\"{u}}
+\lccode`Ü=`ü
+\uccode`Ü=`Ü
+\catcode`Ü=\active \def Ü{\"{U}}
+
+\lccode`ý=`ý
+\uccode`ý=`Ý
+\catcode`ý=\active \def ý{\'{y}}
+\lccode`Ý=`ý
+\uccode`Ý=`Ý
+\catcode`Ý=\active \def Ý{\'{Y}}
+
+\lccode`þ=`þ
+\uccode`þ=`Þ
+\catcode`þ=\active \def þ{\c{t}}
+\lccode`Þ=`þ
+\uccode`Þ=`Þ
+\catcode`Þ=\active \def Þ{\c{T}}
+
+\lccode`ß=`ß
+\uccode`ß=`0
+\catcode`ß=\active \def ß{\ss}
+
+\lccode`÷=`÷
+\uccode`÷=`0
+\catcode`÷=\active \def ÷{\ifmmode\div\else$\div$\fi}
+
+\lccode`ÿ=`ÿ
+\uccode`ÿ=`0
+\catcode`ÿ=\active \def ÿ{\.{}}
+
+% After transferring files there's sometimes an Ctrl-Z at the end.
+% (This could also handled in the CodePage with a line ^^Z>^^@)
+\catcode`^^Z=9 % ignore it or ...
+%\catcode`^^Z=\active \def^^Z{\endinput}% ... make it active
+
+\fi\fi
+
+
+\endinput
+% Local Variables:
+% mode: tex
+% TeX-master: t
+% End:
diff --git a/macros/latex209/contrib/letters/brief/180dpi/letbilda.pk b/macros/latex209/contrib/letters/brief/180dpi/letbilda.pk
new file mode 100644
index 0000000000..ad3a0c3cf7
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/180dpi/letbilda.pk
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/180dpi/untersca.pk b/macros/latex209/contrib/letters/brief/180dpi/untersca.pk
new file mode 100644
index 0000000000..91d3a61a8a
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/180dpi/untersca.pk
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/204dpi/letbilda.pk b/macros/latex209/contrib/letters/brief/204dpi/letbilda.pk
new file mode 100644
index 0000000000..e525c16a18
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/204dpi/letbilda.pk
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/204dpi/untersca.pk b/macros/latex209/contrib/letters/brief/204dpi/untersca.pk
new file mode 100644
index 0000000000..c705c8e95e
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/204dpi/untersca.pk
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/300dpi/letbilda.pk b/macros/latex209/contrib/letters/brief/300dpi/letbilda.pk
new file mode 100644
index 0000000000..95009caf6d
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/300dpi/letbilda.pk
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/300dpi/untersca.pk b/macros/latex209/contrib/letters/brief/300dpi/untersca.pk
new file mode 100644
index 0000000000..eecb050387
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/300dpi/untersca.pk
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/360dpi/letbilda.pk b/macros/latex209/contrib/letters/brief/360dpi/letbilda.pk
new file mode 100644
index 0000000000..b5b8649dac
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/360dpi/letbilda.pk
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/360dpi/untersca.pk b/macros/latex209/contrib/letters/brief/360dpi/untersca.pk
new file mode 100644
index 0000000000..660289031b
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/360dpi/untersca.pk
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/beispiel.dvi b/macros/latex209/contrib/letters/brief/beispiel.dvi
new file mode 100644
index 0000000000..59db0caf47
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/beispiel.dvi
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/beispiel.tex b/macros/latex209/contrib/letters/brief/beispiel.tex
new file mode 100644
index 0000000000..600034aadd
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/beispiel.tex
@@ -0,0 +1,36 @@
+\documentstyle[12pt,din,german,fax,adresse,bank]{brief}
+\subject{Fehlermeldung vom \sdate}
+\begin{document}
+\begin{letter}{Frank}
+ \opening[]{}
+ ich habe in dem Style Brief.STY folgende Fehler gefunden:
+ \begin{itemize}
+ \item
+ \item
+ \item
+ \item
+ \end{itemize}
+ ich habe in dem Style Brief.STY folgende Verbesserungsvorschl„ge zu machen:
+ \begin{itemize}
+ \item
+ \item
+ \item
+ \item
+ \end{itemize}
+ ich habe in dem Style Serienbrief.STY folgende Fehler gefunden:
+ \begin{itemize}
+ \item
+ \item
+ \item
+ \item
+ \end{itemize}
+ ich habe in dem Style Serienbrief.STY folgende Verbesserungsvorschl„ge zu machen:
+ \begin{itemize}
+ \item
+ \item
+ \item
+ \item
+ \end{itemize}
+ \closing{}
+ \end{letter}
+\end{document}
diff --git a/macros/latex209/contrib/letters/brief/brief.adr b/macros/latex209/contrib/letters/brief/brief.adr
new file mode 100644
index 0000000000..bdd5f019bc
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/brief.adr
@@ -0,0 +1,49 @@
+Hinter jeder Zeile muá ein stehen.
+Neue Adressen fangen immer mit --- an.
+---
+Nachname
+Vorname
+Firma
+Abteilung
+Strasse
+Ort
+Tel
+Fax
+E-Mail
+Cosename
+Geburtsdatum
+Zusatz1
+Zusatz2
+Geschlecht
+Kontakt
+---
+
+
+Deutschsprachige Anwendervereinigung \TeX e.V.
+
+Postfach 101840
+6900 Heidelberg 1
+06221/56\,55\,81
+
+
+
+
+
+A
+formal
+---
+Frank
+Gundolf
+
+
+Steinkaulstr.31
+52070 Aachen
+0241/53\,25\,20
+0241/53\,25\,20 (nur bei Bedarf)
+Gundolf_Frank@AC.maus.de
+
+15.7.67
+
+
+m
+herzlich
diff --git a/macros/latex209/contrib/letters/brief/brief.bib b/macros/latex209/contrib/letters/brief/brief.bib
new file mode 100644
index 0000000000..39f52e87d9
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/brief.bib
@@ -0,0 +1,16 @@
+@book{LexikonderInformatik,
+ AUTHOR={Prof.Dr.Hans-Jochen Schneider},
+ TITLE={Lexikon der Informatik und Datenverarbeitung},
+ EDITION={2.},
+ PUBLISHER={R. Oldenbourg Verlag GmbH},
+ ADRESS={Mnchen},
+ YEAR={1986}
+ }
+@book{Kopka,
+ AUTHOR={Helmut Kopka},
+ TITLE={\LaTeX - Eine Einf\"uhrung},
+ EDITION={4.},
+ PUBLISHER={Addison-Wesly GmbH},
+ ADRESS={Deutschland},
+ YEAR={1992}
+ }
diff --git a/macros/latex209/contrib/letters/brief/brief.dvi b/macros/latex209/contrib/letters/brief/brief.dvi
new file mode 100644
index 0000000000..8d810cb86e
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/brief.dvi
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/brief.sty b/macros/latex209/contrib/letters/brief/brief.sty
new file mode 100644
index 0000000000..8da91fb7d4
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/brief.sty
@@ -0,0 +1,1446 @@
+% brief.sty 8-Mar-94
+
+\input{briefini}
+
+\catcode`\@=11
+\typeout{}
+\typeout{User Document Style `brief' V0.53$\beta$ <8. M„rz 94> von Gundolf Frank}
+\typeout{entstanden aus dem orignal Letter-Style von Leslie Lamport}
+\typeout{}
+
+\def\@ptsize{0}
+ \@namedef{ds@10pt}{\def\@ptsize{0}}
+ \@namedef{ds@11pt}{\def\@ptsize{1}}
+ \@namedef{ds@12pt}{\def\@ptsize{2}}
+\newif\ifdinformat
+\dinformattrue
+\def\ds@din{\dinformattrue}
+\def\ds@us{\dinformatfalse}
+\newif\ifbankverbindung
+\bankverbindungfalse
+\def\ds@bank{\bankverbindungtrue}
+\newif\ifvolleadresse
+\volleadressefalse
+\def\ds@adresse{\volleadressetrue}
+\newif\ifkopf
+\kopftrue
+\def\ds@keinkopf{\kopffalse}
+\newif\iffax
+\faxfalse
+\def\ds@fax{\faxtrue}
+\newif\ifadresseleer
+\adresseleertrue
+\newif\ifserienbrief
+\serienbrieffalse
+
+\@twosidefalse
+
+\def\ds@draft{\overfullrule 5\p@}
+
+\@options
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\ifcase \@ptsize\relax
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5\p@ plus3\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 3\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or
+
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12\p@ plus3\p@ minus7\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini
+\parsep 4.5\p@ plus2\p@ minus\p@
+ \itemsep \parsep
+ \topsep 9\p@ plus3\p@ minus5\p@}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+
+\normalsize
+
+\def\ccname{cc}
+\def\enclname{encl}
+\def\pagename{Page}
+\def\headtoname{To}
+
+\def\nachname{}
+\def\vorname{}
+\def\firma{}
+\def\abteilung{}
+\def\strasse{}
+\def\ort{}
+\def\tel{}
+\def\fax{}
+\def\email{}
+\def\cosename{}
+\def\geburtsdatum{}
+\def\paraer{}
+\def\parazw{}
+\def\geschlecht{}
+\def\kontakt{}
+
+\def\pagenum{??}
+
+\def\signature#1{\def\fromsig{#1}}
+\def\unterschrift#1{\def\fromsig{#1}}
+
+\def\name#1{\def\fromname{#1}}
+
+\def\address#1{\def\fromaddress{#1}}
+\def\absender#1{\def\fromaddress{#1}}
+
+\def\telephone#1{\def\telephonenum{#1}}
+
+\def\ihrzeichen#1{\def\@yref{#1}}
+\def\yref#1{\def\@yref{#1}}
+\def\@yref{}
+
+\def\ihrenachrichtvom#1{\def\@ymail{#1}}
+\def\@ymail{}
+
+\def\meinzeichen#1{\def\@myref{#1}}
+\def\myref#1{\def\@myref{#1}}
+
+\def\betrifft#1{\def\@subject{#1}}
+\def\subject#1{\def\@subject{#1}}
+\def\@subject{}
+
+\def\datum#1{\def\@date{#1}}
+\def\date#1{\def\@date{#1}}
+
+\def\sdate{\number\day.\number\month.\number\year}
+
+% expands to the actual time (hours:minutes)
+% written by Dimitris Dranidis
+% (modified by Michael Mehlich to avoid temporary counter)
+\newcount\hours
+\newcount\minutes
+%calculate hours and minutes
+%hours = time/60 = ((time/60)*60)/60
+%minutes = time-(time/60)*60
+\minutes\time
+\hours\minutes\divide\hours60\multiply\hours60
+\advance\minutes-\hours
+\divide\hours60
+%macro to output calculated time
+\def\@time{\the\hours :\ifnum\minutes<10 0\else\fi\the\minutes}
+
+\def\uhrzeit{\@time}
+
+\xdef\greetings{}
+
+\def\optional#1#2[#3]{%
+ \escapechar=-1
+ \if\def#1%
+ \edef#2{\futurelet\noexpand\next
+ \csname\string#2@@body\endcsname}
+ \expandafter\edef\csname\string#2@@body\endcsname{%
+ \noexpand\if[\noexpand\next
+ \def\noexpand\next{\csname\string#2@@do\endcsname}%
+ \noexpand
+ \else
+ \def\noexpand\next
+ {\csname\string#2@@do\endcsname
+ [\expandafter
+ \noexpand\csname\string#2@@default\endcsname]}%
+ \noexpand
+ \fi
+ \noexpand\next}%
+ \expandafter\noexpand\expandafter
+ \def\csname\string#2@@default\endcsname{#3}%
+ \edef\optional@continue{
+ \expandafter\noexpand\expandafter
+ \def\csname\string#2@@do\endcsname[####1]}%
+ \escapechar="5C\relax
+ \let\next=\optional@continue
+ \else
+ \escape="5C
+ \errmessage{\string\def fehlt nach \string\optional}
+ \let\next=\relax
+ \fi
+ \next}
+
+\voffset -1.4in
+\topmargin 1cm
+\headheight 0.5cm
+\headsep 1.6cm
+\topskip 0.5cm
+\ifdinformat
+ \ifvolleadresse
+ \textheight 23.7cm
+ \else
+ \textheight 24.2cm
+ \fi
+ \typeout{Papierformat DIN eingestellt}
+ \typeout{Bitte bei Ausgabe die Option "/h29.7cm" angeben}
+ \else
+ \ifvolleadresse
+ \textheight 24.48cm
+ \else
+ \textheight 24.98cm
+ \fi
+ \typeout{Papierformat Endlos/US-Papier eingestellt}
+ \typeout{Bitte bei Ausgabe die Option "/h12in" angeben}
+\fi
+\ifvolleadresse
+ \footskip 1.5cm
+ \footheight 1cm
+\else
+ \footskip 1cm
+ \footheight 0.5cm
+\fi
+\hoffset -1in
+\oddsidemargin 2.5cm \marginparsep 0.4cm
+\evensidemargin 2.5cm \marginparwidth 3cm
+ \marginparpush 0.2cm
+\textwidth 16cm
+\columnseprule 0cm
+\columnsep 0,5cm
+
+\raggedbottom
+
+\footnotesep 0.4cm
+
+\skip\footins 10pt plus 2pt minus 4pt
+
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+\unitlength1cm
+
+\newlength {\leftfield}
+\leftfield110mm
+\newlength {\rightfield}
+\rightfield50mm
+
+\newsavebox {\firm}
+\newsavebox {\firmadress}
+\newsavebox {\firmreturn}
+\newbox {\firmhead}
+\newbox {\firmfoot}
+
+\savebox{\firm}[\leftfield][l]{ \ifcase \@ptsize\relax
+ \LARGE
+ \or
+ \Large
+ \or
+ \large
+ \fi
+ \sf \fromname}
+
+\sbox{\firmreturn}{\ifcase \@ptsize\relax
+ \normalsize
+ \or
+ \small
+ \or
+ \footnotesize
+ \fi
+ \underline{\sf \fromadress}}
+
+\savebox{\firmadress}[\rightfield][l]{\ifx\bilddateiname\empty
+ \else
+ \input{\bilddateiname}
+ \setletbild
+ \fi}
+
+\sbox{\firmhead}{\parbox{\textwidth}{
+ \begin{picture}(0,0)
+ \put(-1.5,-8.0){\line(1,0){0.2}}
+ \put(17,-8.0){\line(1,0){0.2}}
+ \ifdinformat
+ \put(-1.5,-12.25){\line(1,0){0.2}}
+ \put(17,-12.25){\line(1,0){0.2}}
+ \else
+ \put(-1.5,-12.44){\line(1,0){0.2}}
+ \put(17,-12.44){\line(1,0){0.2}}
+ \fi
+ \end{picture}
+ \usebox{\firm}%\raisebox{6pt}
+ {\usebox{\firmadress}}\\[1mm]
+ \rule{\textwidth}{0.1mm}}}
+
+% Fu\ss{}teil setzen
+\sbox{\firmfoot}{\parbox{\textwidth}{
+ \ifcase \@ptsize\relax
+ \small
+ \or
+ \footnotesize
+ \or
+ \scriptsize
+ \fi
+ \ifvolleadresse
+ \sf\rule{\textwidth}{1pt}
+ \begin{tabular}{l}
+ \fromname\\
+ \fromstreet\\
+ \fromlocation
+ \end{tabular}
+ \hfill
+ \begin{tabular}{ll}
+ Telefon: &\precode/\telephonenum\\
+ Fax: &\precode/\myfax\\
+ E-Mail: &\myemail
+ \end{tabular}
+ \ifbankverbindung
+ \hfill
+ \begin{tabular}{ll}
+ Bank: & \bankname\\
+ Bankleitzahl: & \blz\\
+ Kontonummer: & \ktonr
+ \end{tabular}
+ \fi
+ \else
+ \ifbankverbindung
+ \sf\rule{\textwidth}{1pt}
+ \underline{Bankverbindung:} \bankname \hfill
+ Bankleitzahl: \blz \hfill Kontonummer: \ktonr
+ \fi
+ \fi
+ }}
+
+\newdimen\longindentation
+\longindentation=.5\textwidth
+\newdimen\indentedwidth
+\indentedwidth=\textwidth
+\advance\indentedwidth -\longindentation
+
+\newif\iftestnegativ
+
+\optional\def\anrede[{}]#2{
+ \batchmode
+ \thispagestyle{firstpage}
+ \parbox[t]{\leftfield}{\usebox{\firmreturn}\\
+ \to@label{\toname}{\toaddress}}
+ \parbox[t]{\rightfield}{}
+ \par
+ \rule{\textwidth}{0.1mm}
+ \tabcolsep0em
+ \begin{tabular}{l}
+ \ifcase \@ptsize\relax
+ \small
+ \or
+ \footnotesize
+ \or
+ \scriptsize
+ \fi
+ Datum\\
+ \normalsize
+ \sdate
+ \end{tabular}
+ \iffax
+ \hfill
+ \begin{tabular}{l}
+ \ifcase \@ptsize\relax
+ \small
+ \or
+ \footnotesize
+ \or
+ \scriptsize
+ \fi
+ Uhrzeit\\
+ \normalsize
+ \@time
+ \end{tabular}
+ \hfill
+ \begin{tabular}{c}
+ \ifcase \@ptsize\relax
+ \small
+ \or
+ \footnotesize
+ \or
+ \scriptsize
+ \fi
+ Gesamtseitenanzahl\\
+ \normalsize
+ \pagenum
+ \end{tabular}
+ \fi
+ \hfill
+ \begin{tabular}{l}
+ \ifcase\@ptsize\relax
+ \small
+ \or
+ \footnotesize
+ \or
+ \scriptsize
+ \fi
+ \myrefname\\
+ \normalsize
+ \@myref
+ \end{tabular}\hfill
+ \ifx\@empty\@yref\else
+ \begin{tabular}{l}
+ \ifcase\@ptsize\relax
+ \small
+ \or
+ \footnotesize
+ \or
+ \scriptsize
+ \fi\yrefname\\
+ \normalsize\@yref
+ \end{tabular}\hfill\fi
+ \ifx\@empty\@ymail\else
+ \begin{tabular}{l}
+ \ifcase\@ptsize\relax
+ \small
+ \or
+ \footnotesize
+ \or
+ \scriptsize
+ \fi\ymailname\\
+ \normalsize\@ymail
+ \end{tabular}\hfill\fi
+ \par
+ \tabcolsep1em
+ \vspace{3\parskip}
+ \ifx\@empty\@subject
+ \else
+ \ifx\subjectname\empty
+ {\bf \@subject}
+ \else
+ {\bf\subjectname}\space\@subject
+ \fi
+ \par
+ \vspace{2\parskip}
+ \fi
+ \def\uebergabe{#1}
+ \def\zwparameter{#2}
+ \ifx\zwparameter\empty
+ \ifx\uebergabe\empty
+ \xdef\uebergabe{\anredekurzoa}
+ \def\test{herzlich}
+ \ifx\test\kontakt%
+ \def\test{w}
+ \ifx\test\geschlecht%
+ \xdef\uebergabe{\anredekurzd}
+ \fi
+ \def\test{m}
+ \ifx\test\geschlecht%
+ \xdef\uebergabe{\anredekurze}
+ \fi
+ \def\zwparameter{\cosename}
+ \fi
+ \def\test{formal}
+ \ifx\test\kontakt%
+ \def\test{w}
+ \ifx\test\geschlecht
+ \ifx\nachname\empty
+ \xdef\uebergabe{\anredekurzob}
+ \else
+ \xdef\uebergabe{\anredekurza}
+ \fi
+ \fi
+ \def\test{m}
+ \ifx\test\geschlecht
+ \ifx\nachname\empty
+ \xdef\uebergabe{\anredekurzoc}
+ \else
+ \xdef\uebergabe{\anredekurzb}
+ \fi
+ \fi
+ \def\test{n}
+ \ifx\test\geschlecht
+ \xdef\uebergabe{\anredekurzoa}
+ \fi
+ \def\zwparameter{\nachname}
+ \fi
+ \else
+ \ifx\anredekurzd\uebergabe
+ \def\zwparameter{\cosename}
+ \fi
+ \ifx\anredekurze\uebergabe
+ \def\zwparameter{\cosename}
+ \fi
+ \ifx\anredekurzb\uebergabe
+ \def\zwparameter{\nachname}
+ \fi
+ \ifx\anredekurza\uebergabe
+ \def\zwparameter{\nachname}
+ \fi
+ \fi
+ \fi
+ \testnegativtrue
+ \ignorespaces
+ \ifx\anredekurzoa\uebergabe
+ \anredeoa,\\
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurza}
+ \fi
+ \testnegativfalse
+ \fi
+ \ifx\anredekurzd\uebergabe
+ \anreded\space\zwparameter,\\
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurzd}
+ \fi
+ \testnegativfalse
+ \fi
+ \ifx\anredekurze\uebergabe
+ \anredee\space\zwparameter,\\
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurzd}
+ \fi
+ \testnegativfalse
+ \fi
+ \ifx\anredekurzf\uebergabe
+ \anredef\space\zwparameter,\\
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurza}
+ \fi
+ \testnegativfalse
+ \fi
+ \ifx\anredekurzb\uebergabe
+ \anredeb\space\zwparameter,\\
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurza}
+ \fi
+ \testnegativfalse
+ \fi
+ \ifx\anredekurza\uebergabe
+ \anredea\space\zwparameter,\\
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurza}
+ \fi
+ \testnegativfalse
+ \fi
+ \ifx\anredekurzoc\uebergabe
+ \anredeoc,\\
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurza}
+ \fi
+ \testnegativfalse
+ \fi
+ \def\test{sgF}
+ \ifx\anredekurzob\uebergabe
+ \anredeob,\\
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurza}
+ \fi
+ \testnegativfalse
+ \fi
+ \ifx\anredekurzc\uebergabe
+ \anredec\space\zwparameter,\\
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurza}
+ \fi
+ \testnegativfalse
+ \fi
+ \iftestnegativ
+ \zwparameter\\
+ \fi
+ \par\nobreak
+ \errorstopmode
+ }
+
+\optional\def\opening[{}]#2{\anrede[#1]{#2}}
+
+\def\gruss#1{
+ \batchmode
+ \par\nobreak\vspace{\parskip}%
+ \stopbreaks
+ \noindent
+ \hspace*{\longindentation}
+ \parbox{\indentedwidth}{\raggedright
+ \ifx\greetings\empty
+ \xdef\greetings{\grusskurza}
+ \fi
+ \def\uebergabe{#1}
+ \ifx\uebergabe\empty
+ \else
+ \def\greetings{#1}
+ \fi
+ \testnegativtrue
+ \ignorespaces
+ \ifx\grusskurza\greetings
+ \grussa\\
+ \def\kontakt{formal}
+ \testnegativfalse
+ \fi
+ \ifx\grusskurzc\greetings
+ \grussc\\
+ \def\kontakt{herzlich}
+ \testnegativfalse
+ \fi
+ \ifx\grusskurzd\greetings
+ \grussd\\
+ \def\kontakt{herzlich}
+ \testnegativfalse
+ \fi
+ \ifx\grusskurzb\greetings
+ \grussb\\
+ \def\kontakt{herzlich}
+ \testnegativfalse
+ \fi
+ \ifx\grusskurze\greetings
+ \grusse
+ \def\kontakt{formal}
+ \testnegativfalse
+ \fi
+ \iftestnegativ
+ \def\kontakt{formal}
+ \greetings\\
+ \fi
+ \def\test{herzlich}
+ \ifx\kontakt\test
+ Dein
+ \iffax
+ \ifx\unterschriftdateiname\empty
+ \vspace{6\medskipamount}
+ \else
+ \par
+ \vspace{3 \medskipamount}
+ \hspace{1em}
+ \input{\unterschriftdateiname}
+ \setuntersc
+ \par
+ \fi
+ \else
+ \vspace{6\medskipamount}
+ \fi
+ \else
+ \iffax
+ \ifx\unterschriftdateiname\empty
+ \vspace{6\medskipamount}
+ \else
+ \par
+ \vspace{3 \medskipamount}
+ \hspace{1em}
+ \input{\unterschriftdateiname}
+ \setuntersc
+ \par
+ \fi
+ \else
+ \vspace{6\medskipamount}
+ \fi
+ \vspace{1\medskipamount}
+ (\fromsig)
+ \fi\strut}%
+ \par
+ \errorstopmode}
+
+\def\closing#1{\gruss{#1}}
+
+\def\PS{\par\startbreaks}
+
+\def\anlagen#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\reset@font
+ \rm \enclname: }%
+ \ignorespaces #1\strut}\par}
+\def\encl#1{\anlagen{#1}}
+
+\def\kopiean#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\reset@font
+ \rm \ccname: }%
+ \ignorespaces #1\strut}\par}
+\def\cc#1{\kopiean{#1}}
+
+\def\stopletter{}
+
+\def\to@label#1#2{\setbox0\vbox{\parbox{\leftfield}
+ {#1\\#2}}\vbox to 3.5cm{\vss\box0\vss}}
+
+\def\returnaddress{}
+\newcount\labelcount
+
+\def\startlabels{\labelcount\z@
+\pagestyle{empty}%
+\let\@texttop\relax
+\topmargin -50\p@
+\headsep \z@
+\oddsidemargin -35\p@
+\evensidemargin -35\p@
+\textheight 25.4cm
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 550\p@
+\columnsep 25\p@
+\ifcase \@ptsize\relax
+ \normalsize
+ \or
+ \small
+ \or
+ \footnotesize
+ \fi
+\baselineskip \z@
+\lineskip \z@
+\boxmaxdepth \z@
+\parindent \z@
+\twocolumn\relax}
+
+\def\mlabel#1#2{\setbox0\vbox{\parbox[b]{3.6in}%
+ {\strut\ignorespaces #2}}%
+ \vbox to 2in{\vss \box0 \vss}}
+
+
+\optional\def\letter[{}]#2{
+ \batchmode
+ \newpage
+ \c@page\@ne
+ \interlinepenalty=200
+ \def\uebergabe{#1}
+ \def\zwparameter{#2}
+ \ifserienbrief
+ \loop
+ \def\ende{gleich}
+ \else
+ \ifx\zwparameter\empty
+ \errhelp{Bei \begin{letter}[Optionen]{adresse} sollte eine Adresse angegeben werden.
+ Wenn Sie jetzt <RETURN> drucken wird der Brief weiter "ubersetzt,
+ aber das Adressfeld bleibt frei.}
+ \errmessage{Es wurde keine Adresse angegeben!}
+ \fi
+ \openin7=\dateinameadresse
+ \def\test{---}
+ \def\ende{}
+ \def\zeile{}
+ \loop
+ \endlinechar=-1
+ \read7to\zeile
+ \endlinechar=13
+ \ifx\zeile\test
+ \endlinechar=-1
+ \read7to\nachname
+ \read7to\vorname
+ \read7to\firma
+ \read7to\abteilung
+ \read7to\strasse
+ \read7to\ort
+ \read7to\tel
+ \read7to\fax
+ \read7to\email
+ \read7to\cosename
+ \read7to\geburtsdatum
+ \read7to\paraer
+ \read7to\parazw
+ \read7to\geschlecht
+ \read7to\kontakt
+ \endlinechar=13
+ \ifx\cosename\empty
+ \def\cosename{\vorname}
+ \fi
+ \ifx#1\empty
+ \ifx\zwparameter\nachname
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Nachname}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\nachname
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Vorname}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\vorname
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Firma}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\firma
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Abteilung}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\abteilung
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Strasse}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\strasse
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Ort}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\ort
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Telefonnummer}
+ \ifx\uebergabe\bedingung%
+ \ifx\zwparameter\tel
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Faxnummer}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\fax
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{E-Mail}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\email
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Geburtsdatum}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\Geburtsdatum
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Cosename}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\cosename
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Zusatz 1}
+ \ifx\uebergabe\bedingung%
+ \ifx\zwparameter\paraer%
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Zusatz 2}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\parazw
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Geschlecht}
+ \ifx\uebergabe\bedingung
+ \ifx\zwparameter\geschlecht
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Kontakt}
+ \ifx\uebergabe\bedingung%
+ \ifx\zwparameter\kontakt%
+ \def\ende{gleich}
+ \fi
+ \fi
+ \fi
+ \ifeof7
+ \def\ende{eof}
+ \fi
+ \ifx\ende\empty
+ \repeat
+ \closein7
+ \fi
+ \def\test{gleich}
+ \ifx\ende\test
+ \def\test{n}%
+ \ifx\geschlecht\test%
+ \def\zwparameter{%
+ \firma\\
+ \ifx\abteilung\empty
+ \ \\
+ \else
+ Abteilung \abteilung\\
+ \fi
+ \strasse\\
+ \ort
+ }
+ \fi
+ \def\test{w}
+ \ifx\geschlecht\test%
+ \ifx\firma\empty%
+ \def\zwparameter{%
+ Frau\\
+ \vorname\space\nachname\\
+ \strasse\\
+ \ort
+ }
+ \else
+ \def\zwparameter{%
+ \firma\\
+ \ifx\abteilung\empty%
+ \else
+ Abteilung \abteilung\\
+ \fi
+ \ifx\nachname\empty
+ \ \\
+ \else
+ z.H. Frau \nachname\\
+ \fi
+ \strasse\\
+ \ort
+ }
+ \fi
+ \fi
+ \def\test{m}%
+ \ifx\geschlecht\test%
+ \ifx\firma\empty
+ \def\zwparameter{%
+ Herr\\
+ \vorname\space\nachname\\
+ \strasse\\
+ \ort
+ }
+ \else
+ \def\zwparameter{%
+ \firma\\
+ \ifx\abteilung\empty%
+ \else
+ Abteilung \abteilung\\
+ \fi
+ \ifx\nachname\empty
+ \ \\
+ \else
+ z.H. Herr \nachname\\
+ \fi
+ \strasse\\
+ \ort
+ }
+ \fi
+ \fi
+ \errorstopmode
+ \typeout{}
+ \typeout{Anschrift gefunden:}
+ \if\firma\empty
+ \else
+ \typeout{\firma}
+ \fi
+ \if\abteilung\empty
+ \else
+ \typeout{Abteilung\space\abteilung}
+ \fi
+ \typeout{\vorname\space\nachname}
+ \typeout{\strasse}
+ \typeout{\ort}
+ \typeout{}
+ \else
+ \def\nachname{}
+ \fi
+ \@processto{\leavevmode\zwparameter}
+ }
+
+\def\endletter{
+ \batchmode
+ \stopletter\@@par\pagebreak\@@par
+ \if@filesw
+ \begingroup
+ \let\\=\relax
+ \def\protect##1{\string##1\space}%
+ \immediate\write\@auxout{\string\mlabel{\returnaddress}{\toname
+ \\\toaddress}}%
+ \endgroup
+ \fi
+ \errorstopmode}
+
+\long\def\@processto#1{\@xproc#1\\@@@\ifx\toaddress\@empty
+ \else \@yproc#1@@@\fi}
+\long\def\@xproc#1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\@yproc#1\\#2@@@{\def\toaddress{#2}}
+
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200\relax}}
+
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \iffax
+ \immediate\openin\@mainaux=\jobname.aux
+ \ifeof\@mainaux
+ \else
+ \immediate\closein\@mainaux
+ \input \jobname.aux
+ \fi
+ \fi
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux
+ {\string\startlabels\string\@startlabels}
+ \else
+ \iffax
+ \immediate\openout\@mainaux=\jobname.aux
+ \fi
+ \fi
+ \csname process@table\endcsname
+ \let\glb@currsize\@empty
+ \def\do##1{\let ##1\@notprerr}%
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+
+\def\enddocument{
+\iffax
+ \addtocounter{page}{-1}
+ \immediate\write\@mainaux{\string\def\string\pagenum{\thepage}}
+ \addtocounter{page}{1}
+\fi
+\@checkend{document}
+\newpage\begingroup
+\if@filesw
+ \immediate\closeout\@mainaux
+ \makeatletter\input \jobname.aux\clearpage
+\else
+ \iffax
+ \immediate\closeout\@mainaux
+ \fi
+\fi
+\endgroup\deadcycles\z@\@@end}
+
+\def\makelabels{\@fileswtrue}
+
+\def\@startlabels{}
+
+\def\ps@headings{
+ \ifkopf
+ \headheight1.27cm
+ \def\@oddhead{\usebox{\firmhead}}
+ \else
+ \def\@oddhead{}
+ \fi
+ \def\@oddfoot{}
+ \let\@evenhead\@oddhead}
+%end \def\ps@headings
+
+
+\def\ps@empty{\def\@oddhead{}
+ \def\@oddfoot{}
+ \def\@evenhead{}
+ \def\@evenfoot{}}
+
+\def\ps@firstpage{
+ \ifkopf
+ \headheight1.27cm
+ \def\@oddhead{\usebox{\firmhead}}
+ \else
+ \def\@oddhead{}
+ \fi
+ \def\@oddfoot{\raisebox{0pt}[0pt]{\usebox{\firmfoot}}}
+ \let\@evenhead\@oddhead
+ \let\@evenfoot\@oddfoot}
+%end \def\ps@firstpage
+
+\def\ps@plain{
+ \ifkopf
+ \headheight1.27cm
+ \def\@oddhead{\usebox{\firmhead}}
+ \else
+ \def\@oddhead{}
+ \fi
+ \def\@oddfoot{
+ \rm
+ \hfil
+ \thepage
+ \iffax
+ /\pagenum
+ \fi
+ \hfil}
+ \let\@evenhead\@oddhead
+ \let\@evenfoot\@oddfoot}
+
+\parskip .7em
+\parindent 0pt
+
+\partopsep 0pt
+
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+
+\@beginparpenalty -\@lowpenalty
+
+\@endparpenalty -\@lowpenalty
+
+\@itempenalty -\@lowpenalty
+
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep .4em\relax
+ \itemsep .4em\relax}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep .2em
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\m@th\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\m@th\triangleright$}
+\def\labelitemiv{$\m@th\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -15\p@\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15\p@}\item[]}
+\let\endverse\endlist
+
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt
+
+\tabcolsep 6pt
+
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+
+\fboxsep = 3pt
+
+\fboxrule = .4pt
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@}
+
+\long\def\@makefntext#1{\noindent
+ \hangindent 5\p@\hbox
+ to5\p@{\hss $\m@th^{\@thefnmark}$}#1}
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\smallskipamount=.5\parskip
+
+\medskipamount=\parskip
+\bigskipamount=2\parskip
+
+% Spezielle Funktionen f\"ur Serienbrief
+
+\long\def\text#1{\def\serientext{#1}}
+\optional\def\briefan[{}]#2{\begin{letter}[#1]{#2}
+ \anrede[]{}
+ \serientext
+ \gruss{mhg}
+ \end{letter}
+ }
+\optional\def\serienbrief[{}]#2{
+ \batchmode
+ \def\serienbriefuebergabe{#1}
+ \def\zwparameter{#2}
+ \ifx\zwparameter\empty
+ \errhelp{Bei \serienbrief[Optionen]{suchkriterium} mu\ss{} ein Suchkriterium angegeben werden.}
+ \errmessage{Es wurde kein Suchkriterium angegeben!}
+ \fi
+ \openin7=\dateinameadresse
+ \loop
+ \def\ende{}
+ \def\zeile{}
+ \def\test{---}
+ \endlinechar=-1
+ \read7to\zeile
+ \endlinechar=13
+ \ifx\zeile\test
+ \endlinechar=-1
+ \read7to\nachname
+ \read7to\vorname
+ \read7to\firma
+ \read7to\abteilung
+ \read7to\strasse
+ \read7to\ort
+ \read7to\tel
+ \read7to\fax
+ \read7to\email
+ \read7to\cosename
+ \read7to\geburtsdatum
+ \read7to\paraer
+ \read7to\parazw
+ \read7to\geschlecht
+ \read7to\kontakt
+ \endlinechar=13
+ \ifx\cosename\empty
+ \def\cosename{\vorname}
+ \fi
+ \ifx#1\empty
+ \ifx\zwparameter\nachname
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Nachname}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\nachname
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Vorname}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\vorname
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Firma}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\firma
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Abteilung}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\abteilung
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Strasse}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\strasse
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Ort}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\ort
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Telefonnummer}
+ \ifx\serienbriefuebergabe\bedingung%
+ \ifx\zwparameter\tel
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Faxnummer}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\fax
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{E-Mail}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\email
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Geburtsdatum}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\Geburtsdatum
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Cosename}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\cosename
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Zusatz 1}
+ \ifx\serienbriefuebergabe\bedingung%
+ \ifx\zwparameter\paraer%
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Zusatz 2}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\parazw
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Geschlecht}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\geschlecht
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Kontakt}
+ \ifx\serienbriefuebergabe\bedingung%
+ \ifx\zwparameter\kontakt%
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\test{gleich}
+ \ifx\ende\test
+ \serienbrieftrue
+ \begin{letter}[]{}
+ \anrede[]{}
+ \serientext
+ \gruss{}
+ \end{letter}
+ \def\ende{}
+ \fi
+ \fi
+ \ifeof7
+ \def\ende{eof}
+ \fi
+ \ifx\ende\empty
+ \repeat
+ \closein7
+ \serienbrieffalse
+ \errorstopmode
+}
+
+\ps@plain
+\pagenumbering{arabic}
+\onecolumn
+\@fileswfalse
+\catcode`\@=12
+\endinput
diff --git a/macros/latex209/contrib/letters/brief/brief.tex b/macros/latex209/contrib/letters/brief/brief.tex
new file mode 100644
index 0000000000..0bf9a76a55
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/brief.tex
@@ -0,0 +1,515 @@
+\documentstyle[german,12pt,makeidx]{script}
+\input{briefini.tex}
+\makeindex
+\parindent0em
+\parskip2ex
+\begin{document}
+
+% \batchmode
+ \title{Dokumentation zu Brief.STY}
+ \author{Gundolf Frank\footnotemark}
+ \footnotetext[1]{\begin{tabular}[t]{ll}
+ Tel.: &++49 (0)241/532520\\
+ E-Mail:&Gundolf\_Frank@AC.maus.de
+ \end{tabular}}
+ \maketitle
+
+ \tableofcontents
+
+ \chapter{Einfhrung}
+
+ Der Brief-Style ist eine Mischung aus dem orginal Letter-Style von Leslie
+ Lamport, den Erweiterungen von Helmut Kopka aus \cite{Kopka}. Da ich immer
+ noch einige Sachen vermiáte, habe ich diese erweitert. Am meisten st”rte
+ mich, daá der "`Luxus"' einer Adressverwaltung mit Serienbrieffunktion unter
+ \TeX\ noch nicht verwirklicht worden ist. Dies konnte doch jedes andere
+ popelige Textverarbeitungsprogramm\footnote{Ich weiá, daá \TeX\ keine
+ Textverarbeitung ist, sondern ein Textsatzsystem; trotzdem wird es von
+ vielen -auch von mir- als Ersatztextverarbeitung benutzt.}, also hatte ich
+ mir eingebildet, daá \TeX dies auch k”nnen muáte. Und so ist dann dieser
+ Style entstanden.\par
+
+ Da es viele geben wird, die zwar die Serienbrief- und Adressbuchfunktion
+ m”gen, aber die ganzen anderen Funktionen nicht m”gen, habe ich die
+ Serienbrieffunktion noch in einen eigenen Style eingepackt. Dieser heiát
+ "`Serienbr.STY"'.\par
+
+ Nun viel Spaá beim Briefeschreiben -mit oder ohne meinen Brief-Style!\par
+
+ Gundolf Frank
+
+ \chapter{Allgemeine {\em Variablen} und {\bf Befehle}}
+
+ \section{{\bf $\backslash$begin\{letter\}}}
+ {\bf Syntax:} $\backslash$begin\{letter\}[Suchkriterum]\{Adressat\}\par
+
+ Markiert den Beginn eines Briefes an {\em Adressat\/} und beginnt eine
+ neue Seite
+
+ \section{{\bf $\backslash$end\{letter\}}}
+ {\bf Syntax:} $\backslash$end\{letter\}\par
+
+ Markiert das Ende eines Briefes
+
+ \section{{\bf $\backslash$opening} oder {\bf $\backslash$anrede}}
+
+ {\bf Syntax:} $\backslash$opening[Abkrzungen]\{Name\}\\
+ {\bf Syntax:} $\backslash$anrede[Abkrzungen]\{Name\}\par
+ Die beiden Befehle "`$\backslash$anrede"` oder "`$\backslash$opening"' haben
+ die selbe Funktion. Sie setzen die Anrede ber dem Brief.\\
+ Im Namen kann entweder der ganze Text stehen, wenn keine Abkrzung
+ angegeben ist, oder nur der Vor- oder Nachname.\\
+ Wenn keine Abkrzung angegeben ist, k”nnen die eckigen Klammern wegfallen.\par
+ Folgende Abkrzungen stehen zur Auswahl:\\
+ \begin{tabular}{lll}
+ &Anrede &und dazugeh”rige Gruáformel\\
+ sgdh &Sehr geehrte Damen und Herren, &Mit freundlichen Gráen\\
+ l &Liebe {\em "`Name"'}, &Mit $\heartsuit$-lichen Gráen\\
+ lr &Lieber {\em "`Name"'}, &Mit $\heartsuit$-lichen Gráen\\
+ ls &Liebes {\em "`Name"'}, &Mit $\heartsuit$-lichen Gráen\\
+ sgh &Sehr geehrter Herr {\em "`Name"'},&Mit freundlichen Gráen\\
+ sgf &Sehr geehrte Frau {\em "`Name"'}, &Mit freundlichen Gráen\\
+ sgH &Sehr geehrte Herren, &Mit freundlichen Gráen\\
+ sgF &Sehr geehrte Damen, &Mit freundlichen Gráen\\
+ sgs &Sehr geehrtes {\em "`Name"'}, &Mit freundlichen Gráen\\
+ {\em leer} &{\em "`Name"'} &Mit freundlichen Gráen
+ \end{tabular}\par
+ In Zusammenarbeit mit dem Adressbuch werden die Anrede entsprechend dem
+ Geschlecht und dem Kontakt gesetzt:\\
+ \begin{tabular}{cll}
+ Geschlecht & Kontakt & Anrede \\
+ w & herzlich & Liebe {\em "`Name"'},\\
+ & formal & Sehr geehrte Frau {\em "`Name"'},\\
+ m & herzlich & Lieber {\em "`Name"'},\\
+ & formal & Sehr geehrte Frau {\em "`Name"'},\\
+ n & & Sehr geehrte Damen und Herren,\\
+ \end{tabular}
+
+ \section{{\bf $\backslash$closing} oder {\bf $\backslash$gruss}}
+
+ \label{Gruss}
+
+ {\bf Syntax:} $\backslash$closing\{Text\}\\
+ {\bf Syntax:} $\backslash$gruss\{Text\}\par
+
+ Die beiden Befehle "`$\backslash$gruss"` oder "`$\backslash$closing"' haben
+ die selbe Funktion. Sie setzen den Abschluágruá unter den Brief. Wie schon
+ bei "`$\backslash$anrede"' oder "`$\backslash$opening"' k”nnen auch hier wieder
+ Abkrzungen eingegeben werden. Sie werden anstatt des Textes plaziert.\par
+ \begin{tabular}{ll}
+ mfg& Mit freundlichen Gráen\\
+ mHg& Mit $\heartsuit$-lichen Gráen\\
+ mhg& Mit herzlichen Gráen\\
+ al& Alles Liebe\\
+ mvdiv& Mit vielem Dank im voraus
+ \end{tabular}
+
+ \section{{\bf $\backslash$ps}}
+ {\bf Syntax:$\backslash$ps}\par
+ Setzt ein {\em Postskriptum}
+
+ \section{{\bf $\backslash$cc} oder {\bf $\backslash$kopiean}}
+ {\bf Syntax:$\backslash$cc\{Text\}}\\
+ {\bf Syntax:$\backslash$kopiean\{Text\}}\par
+
+ Setzt eine Verteilerliste (Eintr„ge durch $\backslash\backslash$ abgetrennt)
+
+ \section{{\bf $\backslash$encl} oder {\bf $\backslash$anlagen}}
+ {\bf Syntax:$\backslash$encl\{Text\}}\\
+ {\bf Syntax:$\backslash$anlagen\{Text\}}\par
+
+ Setzt eine Anlagenliste (Eintr„ge durch $\backslash\backslash$ abgetrennt)
+
+ \section{{\em $\backslash$greetings}}
+ \label{greetings}
+ {\bf Syntax:} $\backslash$def $\backslash$greetings\{Text\}\par
+
+ In dieser Variable steht entweder die unter Punkt \ref{Gruss} auf Seite
+ \pageref{Gruss} genannten Abkrzungen oder eine ausgeschriebene eigene
+ Grussformel. Diese Variable dient eigentlich fr die Bestimmung der
+ Grussformel bei Serienbriefen.
+
+ \chapter{Pers”nliche einmalige Einstellungen}
+
+ Die hier beschriebenen Einstellungen werden einmalig in "`Briefini.\TeX"'
+ eingestellt.
+
+ \section{{\em $\backslash$@myref} und {\bf $\backslash$myref} oder {\bf $\backslash$meinzeichen}}
+ {\bf Syntax:} $\backslash$def $\backslash$@myref\{Text\}\\
+ {\bf Syntax:} $\backslash$myref\{Text\}\\
+ {\bf Syntax:} $\backslash$meinzeichen\{Text\}\par
+
+ Hier wird das Krzel des Absenders geschrieben.
+
+ \section{{\em $\backslash$bilddateiname}}
+ {\bf Syntax:} $\backslash$def $\backslash$bilddateiname\{Text\}\par
+ \label{Bild}
+
+ Wenn ein Bild fr die rechte obere Ecke vorhanden ist, wird er in diese
+ Variable gespeichert. Ist hier keiner eingetragen, bleibt auch die obere
+ Ecke weiá. Das Bild muá mit BM2Font\footnote{siehe auch die Anleitung zu
+ BM2Font} umgewandelt worden sein.\\
+ Z.B. existiert das Bild Logo.PCX als PCX-Datei. Dann wird dies mit BM2Font
+ mit\\
+ \verb+ BM2Font -fBilddateiname.pcx+\\
+ \verb+ -hAufl”sungX+\\
+ \verb+ -vAufl”sungY+\\
+ \verb+ -mSollbreite+\\
+ \verb+ -nSollh”he+\\
+ und auf das Beispiel bezogen:\\
+ \verb+ BM2Font -fLogo.pcx -h360 -v360 -m15mm+\\
+ Dies erzeugt die Dateien Logo.\TeX, LogoA.TFM, LogoA.PK. Es k”nnen jedoch
+ auch weitere *.TFM und *.PK, wenn das Bild zu groá ist, um in einen
+ Zeichensatz zu passen. Dies werden dann mit LogoB.TFM bzw LogoB.PK usw.
+ benannt.
+
+ \section{{\em $\backslash$unterschriftdateiname}}
+ {\bf Syntax:} $\backslash$def $\backslash$unterschriftdateiname\{Text\}\par
+
+ Wenn eine eingescannte und wie bei Kapitel \ref{Bild} umgewandelete
+ Unterschrift vorhanden ist, wird dies hier eingetragen. Sobald die Variable
+ leer ist, wird keine Unterschrift gedruckt.
+
+ \section{{\em $\backslash$dateinameadresse}}
+ {\bf Syntax:} $\backslash$def $\backslash$dateinameadresse\{Text\}\par
+
+ Dateiname, aus der die Adressen genommen werden sollen.
+
+ \section{{\em $\backslash$fromsig}}
+ {\bf Syntax:} $\backslash$def $\backslash$fromsig\{Text\}\par
+
+ Der Inhalt der Variable wird unter die Unterschrift bzw. den Platz der
+ dafr vorgesehen ist, gesetzt.
+
+ \section{{\em $\backslash$fromname}}
+ {\bf Syntax:} $\backslash$def $\backslash$fromname\{Text\}\par
+
+ Text der rechts oben auf dem Briefkopf erscheint.
+
+ \section{{\em $\backslash$fromstreet}}
+ {\bf Syntax:} $\backslash$def $\backslash$fromstreet\{Text\}\par
+
+ In Text steht die Straáe der Absenderadresse.
+
+ \section{{\em $\backslash$fromlocation}}
+ {\bf Syntax:} $\backslash$def $\backslash$fromlocation\{Text\}\par
+
+ $\ldots$ und der Ort.
+
+ \section{{\em $\backslash$fromaddress}}
+ {\bf Syntax:} $\backslash$def $\backslash$fromaddress\{Text\}\par
+
+ $\ldots$ und nochmal die komplette Adresse.
+ Sie besteht meistens aus $\backslash$fromname, $\backslash$fromstreet,
+ $\backslash$fromlocation.
+
+ \section{{\em $\backslash$telephonnum}}
+ {\bf Syntax:} $\backslash$def $\backslash$telephonnum\{Text\}\par
+
+ $\ldots$ und Absendertelefonnummer.
+
+ \section{{\em $\backslash$fax}}
+ {\bf Syntax:} $\backslash$def $\backslash$fax\{Text\}\par
+
+ $\ldots$ und die Faxnummer.
+
+ \section{{\em $\backslash$email}}
+ {\bf Syntax:} $\backslash$def $\backslash$email\{Text\}\par
+
+ $\ldots$ und die E-Mail-Adresse.
+
+ \section{{\em $\backslash$precode}}
+ {\bf Syntax:} $\backslash$def $\backslash$precode\{Text\}\par
+
+ $\ldots$ Vorwahl fr Absendertelefon- und Faxnummer.
+
+ \section{{\em $\backslash$bankname}}
+ {\bf Syntax:} $\backslash$def $\backslash$bankname\{Text\}\par
+
+ Name der Bank, bei der der Absender sein Konto hat.
+
+ \section{{\em $\backslash$blz}}
+ {\bf Syntax:} $\backslash$def $\backslash$blz\{Text\}\par
+
+ $\ldots$ und deren Bamkleitzahl.
+
+ \section{{\em $\backslash$ktonr}}
+ {\bf Syntax:} $\backslash$def $\backslash$ktonr\{Text\}\par
+
+ $\ldots$ und zuletzt die Kontonummer.
+
+ \chapter[Im Brief zu definierende {\em Variablen} und {\bf Befehle}]{Benutzerdefinierte {\em Variablen} und {\bf Befehle}, die
+ im Brief gesetzt werden}
+
+ \section{{\em $\backslash$@yref} und {\bf $\backslash$yref} oder {\bf $\backslash$ihrzeichen}}
+ {\bf Syntax:} $\backslash$def $\backslash$@yref\{Text\}\\
+ {\bf Syntax:} $\backslash$yref\{Text\}\par
+ {\bf Syntax:} $\backslash$ihrzeichen\{Text\}\par
+
+ \section{{\em $\backslash$@ymail} und {\bf $\backslash$ymail} oder {\bf $\backslash$ihrnachrichtvom}}
+ {\bf Syntax:} $\backslash$def $\backslash$@ymail\{Text\}\\
+ {\bf Syntax:} $\backslash$ymail\{Text\}\\
+ {\bf Syntax:} $\backslash$ihrnachrichtvom\{Text\}\par
+
+
+ \chapter[Sprachabh„ngige Variablen]{Sprachabh„ngige Variablen in Briefini.\TeX}
+ An diesen Variablen braucht normalerweise nichts eingestellt zu werden.
+
+ \section{$\backslash$myrefname}
+ \section{$\backslash$yrefname}
+ \section{$\backslash$ymailname}
+ \section{$\backslash$subjectname}
+ \section{$\backslash$myrefname}
+ \section{$\backslash$anredekurzo$\ast$}
+ \section{$\backslash$anredeo$\ast$}
+ \section{$\backslash$anredekurz$\ast$}
+ \section{$\backslash$anredea$\ast$}
+ \section{$\backslash$grusskurz$\ast$}
+ \section{$\backslash$gruss$\ast$}
+
+ \chapter{Serienbrief\/\/funktion}
+ \index{Serienbrief}
+
+ \begin{quote}
+ {\bf Serienbrief} \cite{LexikonderInformatik}\\
+ Teilgebiet: Textverarbeitung und Broautomation\\
+ Synonym: Massenpost\\
+ \\
+ Serienbriefe werden erstellt, wenn an unterschiedliche Personen „hnliche
+ Informatioenen bermittelt werden sollen. Dabei sind von Brief zu Brief
+ nur geringe Unterschiede (z.B. die Anrede und Adresse) vorhanden. Der
+ Vorgang des Einlesens der Werte in die Briefe wird Mischen genannt.
+ \begin{flushright}
+ Richter
+ \end{flushright}
+ \end{quote}
+
+ \newpage
+ \section{Adressbuch}
+ Fr eine Serienbrieffunktion sollte ein Adressbuch vorhanden sein, aus
+ dem die Adressen herausgesucht werden. Diese sehen beim Style
+ "`Serienbrief"' und beim Style "`Brief"' gleich aus.\\
+ Hier ein Beispiel:
+ \begin{verbatim}
+--- Mustermann Marcus Karl \& Sohn GmbH Buchhaltung Teststr.1 04711 Duftstadt 0815/47\,11
+0815/47\/12
+Marcus_Mustermann@K.maus.de Marco 10.06.57 m herzlich ---
+Mustermann
+Brigitte
+
+
+Teststr.2
+0815 Duftstadt
+0815/12\,15
+
+
+Biggi
+10.11.23
+
+
+w
+herzlich
+\end{verbatim}
+usw.\par
+
+ Neue Adressen fangen immer mit "`--\,--\,--"' an.\par
+
+ Jede Adresse hat folgende Eintr„ge:
+ \begin{verbatim}
+---
+Nachname
+Vorname
+Firmenname
+Abteilung
+Strasse
+Ort
+Telefonnummer
+Faxnummer
+E-Mailadresse
+Cosename
+Geburtsdatum
+Zusatz 1
+Zusatz 2
+Geschlecht
+Kontakt
+ \end{verbatim}
+
+ Die meisten Begriffe erkl„ren sich von selbst. Hier noch einige Erg„nzungen:
+ \begin{itemize}
+ \item
+ {\em Nachname:}\\
+ Wenn unter "`Firma"' etwas eingetragen ist, kommt in der Anschrift
+ "`z.H."' hinzu.
+ \item
+ {\em Abteilung:}\\
+ Wenn dieser Eintrag ausgefllt wird, wird in der Anschrift dieser unter
+ der Firma mit dem Zusatz "`Abteilung "' ausgegeben.
+ \item
+ {\em Cosenamen:}\\
+ Wenn unter "`Kontakt"' "`herzlich"' eingetragen ist, wird bei der Anrede
+ nicht der Vorname, sondern der Cosename eingetragen. Ist dieser leer,
+ wird der Vorname genommen.
+ \item
+ {\em Zusatz 1:}\\
+ Hat bisher keine Funktion. Kann daher fr eigene Zwecke benutzt werden,
+ z.B. Faxnummer.
+ \item
+ {\em Zusatz 2:}\\
+ Hat bisher keine Funktion. Kann daher fr eigene Zwecke benutzt werden.
+ \item
+ {\em Geschlecht}\\
+ Wie der Name schon sagt, ist dieser Eintrag fr die Unterscheidung des
+ Geschlechtes:\\
+ "`w"' weiblich\\
+ "`m"' m„nnlich\\
+ "`n"' neutral\\
+ \item
+ {\em Kontakt}\\
+ Hiermit wird das Verh„ltnis zwischen Briefschreiber und Empf„nger
+ angegeben:
+ \begin{itemize}
+ \item
+ "`herzlich"'\\
+ Es wird eine pers”nliche Anrede und Grussformel angegeben, z.B.
+ "`Liebe Biggi"' und "`Mit $\heartsuit$-lichen Gráen"'.
+ \item
+ "`formal"'\\
+ Es wird eine unpers”nlichere Anrede und Grussformel angegeben, z.B.
+ "`Sehr geehrte Frau Mustermann"' und "`Mit freundlichen Gráen"'.
+ \end{itemize}
+ \end{itemize}
+ Zwischen dem letzten Eintrag einer Adresse (Kontakt) kann noch beliebiger
+ Text folgen. Wichtig ist nur, daá die n„chste Adresse mit "`--\,--\,--"'
+ anf„ngt.\par
+
+ Die verschiedenen Felder stehen im Text auch zur Verfgung. Sie werden ber folgende Variablen
+ aufgerufen:
+ \begin{verbatim}
+ \nachname
+ \vorname
+ \firma
+ \abteilung
+ \strasse
+ \ort
+ \tel
+ \fax
+ \email
+ \cosename
+ \geburtsdatum
+ \paraer
+ \parazw
+ \geschlecht
+ \kontakt
+ \end{verbatim}
+\pagebreak
+ {\em Beispiel 1:} Im Feld $\backslash$paraer soll die 2.Telefonnummer stehen.
+ Wenn nun eine 2. Nummer vorhanden ist, soll dies im Text stehen.
+ \begin{verbatim}
+\ifx\paraer\empty
+ Ein 2. Telefonanschlu\3 ist nicht vorhanden.
+\else
+ Ein 2. Telefonanschluá ist unter der Nummer \paraer zu erreichen.
+\fi
+ \end{verbatim}
+ {\em Beispiel 2:} Bei den Briefen soll unterschieden werden, ob die
+ angesprochene Person ge"`sie"'st wird.
+ \begin{verbatim}
+\def\test{herzlich}
+Wenn
+\ifx\kontakt\test
+ Du
+\else
+ Sie
+\fi
+morgen kommen
+\ifx\kontakt\test
+ k"onntest,
+\else
+ k"onnen,
+\fi
+w"urde ich mich sehr freuen.
+ \end{verbatim}
+Durch diese Abfragen sind natrlich sehr indviduelle Briefe m”glich.
+Es sieht zwar sehr kompliziert aus, ist aber ein sehr m„chtiges Werkzeug fr
+Serienbriefe. Weiteres aber unter Kapitel \ref{Aufruf und Funktion} auf Seite
+\pageref{Aufruf und Funktion}.
+
+\section{Aufruf und Funktion}
+\label{Aufruf und Funktion}
+{\bf Syntax:} $\backslash$serienbrief[Suchkriterium]\{Suchtext\}\par
+Folgende {\em Suchkriterien} stehen zur Verfgung:\par
+\begin{tabular}{l@{ fr die Suche in }l}
+{\em Nachname} & \verb+\nachname+\\
+{\em Vorname} & \verb+\vorname+\\
+{\em Firma} & \verb+\firma+\\
+{\em Abteilung} & \verb+\abteilung+\\
+{\em Straáe} & \verb+\strasse+\\
+{\em Ort} & \verb+\ort+\\
+{\em Telefonnummer} & \verb+\tel+\\
+{\em Faxnummer} & \verb+\fax+\\
+{\em E-Mail} & \verb+\email+\\
+{\em Cosename} & \verb+\cosename+\\
+{\em Geburtsdatum} & \verb+\geburtsdatum+\\
+{\em Zusatz 1} & \verb+\paraer+\\
+{\em Zusatz 2} & \verb+\parazw+\\
+{\em Geschlecht} & \verb+\geschlecht+\\
+{\em Kontakt} & \verb+\kontakt+
+\end{tabular}\par
+{\em Suchtext} kann jede beliebige Zeichenfolge sein, die in dem Suchkriterium
+vorkommen soll.\\
+Mit der Variable \verb+\greetings+ kann die Abschluágruáformel gesetzt werden.
+Siehe dazu auch unter Kapitel \ref{Gruss} auf Seite \pageref{Gruss} und Kapitel
+\ref{greetings} auf Seite \pageref{greetings}.\par
+
+\subsection{Beispiele:}
+
+\verb+\serienbrief[Geschlecht]{w}+ schreibt einen Brief mit dem Text $\backslash$text an
+alle Frauen, die in der Adressdatei stehen.\\
+\verb+\serienbrief{Frank}+ schreibt einen Brief mit dem Text $\backslash$text an alle die den
+Nachnamen "`Frank"' haben.
+
+\chapter{Geschichte}
+\begin{itemize}
+ \item
+ \underline{2.3.94} 0.53$\beta$\\
+ Kleinere Žnderungen:\\
+ Schriftgr”áe 10pt jetzt auch m”glich.\\
+ Bei Serienbriefen kann jetzt auch ein eigene Gruáformel gesetzt werden.\\
+ Faxnummer und E-Mailadresse ist jetzt in der Adressenliste hinzugekommen.\\
+ In der Adressendatei brauchen nicht mehr die \% hinter jeder Zeile erscheinen.
+ \item
+ \underline{28.2.94} 0.52$\beta$\\
+ Kleinere Žnderungen:\\
+ Bei Kontakt kann jetzt nur noch "`m"', "`w"', "`n"' angegeben werden.\\
+ Ungewollte Kontrollausgabe bei Serienbrief ist weggefallen.\\
+ Fehler bei nicht angegebenen Nachnamen behoben.\par
+ Erste Version der Anleitung.\par
+ Die Serienbrief\/funktion gibt es nun auch einzeln, um sie auch mit anderen
+ Letter-Styles zu benutzen.
+ \item
+ \underline{26.2.94} 0.51$\beta$\\
+ Kleinere Žnderungen:\\
+ Seitenl„nge wird bei der Angabe der vollen Adresse in der Fuázeile
+ angepaát.\\
+ Neu:\\
+ Bei der Faxoption wird jetzt in der Statuszeile die Gesamtseitenzahl
+ angegeben.
+ \item
+ \underline{24.2.94} 0.50$\beta$\\
+ Erste offizelle Betaversion\\
+ Neu: Serienbrief\/funktion
+ \item
+ \underline{15.1.94} 0.4$\beta$\\
+ Interne Version
+ Neu: Adressbuchfunktion
+ \item
+ \underline{20.10.92} 0.1$\beta$\\
+ Interne erste Version\\
+\end{itemize}
+\begin{appendix}
+ \bibliographystyle{plain}
+ \bibliography{brief}
+ \printindex
+\end{appendix}
+
+\end{document}
diff --git a/macros/latex209/contrib/letters/brief/briefini.tex b/macros/latex209/contrib/letters/brief/briefini.tex
new file mode 100644
index 0000000000..abf6c2a830
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/briefini.tex
@@ -0,0 +1,69 @@
+% gibt es ein Bild, was mit BM2Font umgewandelt wurde, was rechtsoben in die Ecke soll?
+\def\bildvorhanden{Ja}
+\def\bilddateiname{letbild}
+
+% gibt es eine eingescannte Unterschrift, die mittels BM2FONT umgewandelt wurde?
+\def\unterschriftvorhanden{Ja}
+\def\unterschriftdateiname{untersc}
+
+% Adressenliste
+\def\dateinameadresse{letter.adr}
+% mein zeichen
+\def\@myref{gdf}
+% Name unter der Unterschrift
+\def\fromsig{Gundolf Frank}
+% Name
+\def\fromname{Gundolf FRANK}
+% Straáe
+\def\fromstreet{Steinkaulstr.31}
+% Ort
+\def\fromlocation{52070 Aachen}
+% komplette Adresse
+\def\fromadress{\fromname, \fromstreet, \fromlocation}
+% Telefonnummer
+\def\telephonenum{53\,20\,25}
+% Fax
+\def\fax{53\,25\,20 (nur bei Bedarf an)}
+% E-Mail
+\def\email{Gundolf\_Frank@AC.maus.de}
+% Vorwahl
+\def\precode{0241}
+\def\bankname{}
+\def\blz{}
+\def\ktonr{}
+
+% Hier noch einige allgemeine Einstellungen:
+\def\yrefname{Ihr Zeichen}
+\def\ymailname{Ihre Nachricht vom}
+\def\myrefname{Mein Zeichen}
+\def\subjectname{} % oder \def\subjectname{Betr.:}
+
+\def\anredekurzoa{sgDH}
+\def\anredeoa{Sehr geehrte Damen und Herren}
+\def\anredekurzob{sgD}
+\def\anredeob{Sehr geehrte Damen}
+\def\anredekurzoc{sgH}
+\def\anredeoc{Sehr geehrte Herren}
+\def\anredekurza{sgf}
+\def\anredea{Sehr geehrte Frau}
+\def\anredekurzb{sgh}
+\def\anredeb{Sehr geehrter Herr}
+\def\anredekurzc{sgs}
+\def\anredec{Sehr geehrtes}
+\def\anredekurzd{l}
+\def\anreded{Liebe}
+\def\anredekurze{lr}
+\def\anredee{Lieber}
+\def\anredekurzf{ls}
+\def\anredef{Liebes}
+
+\def\grusskurza{mfg}
+\def\grussa{Mit freundlichen Gr\"u\3en}
+\def\grusskurzb{al}
+\def\grussb{Alles Liebe}
+\def\grusskurzc{mhg}
+\def\grussc{Mit herzlichen Gr\"u\3en}
+\def\grusskurzd{mHg}
+\def\grussd{Mit $\heartsuit$-lichen Gr\"u\3en}
+\def\grusskurze{mvdiv}
+\def\grusse{Mit vielem Dank im voraus} \ No newline at end of file
diff --git a/macros/latex209/contrib/letters/brief/letbild.pcx b/macros/latex209/contrib/letters/brief/letbild.pcx
new file mode 100644
index 0000000000..7565ab8434
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/letbild.pcx
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/letbild.tex b/macros/latex209/contrib/letters/brief/letbild.tex
new file mode 100644
index 0000000000..6f9d4d93b6
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/letbild.tex
@@ -0,0 +1,14 @@
+\newbox\letbildbox
+\newdimen\letbildw
+\font\letbilda=letbilda at 72.27truept
+\setbox\letbildbox=\vbox{\hbox{%
+\letbilda\char0\char1}}
+\letbildw=\wd\letbildbox
+\setbox\letbildbox=\hbox{\vbox{\hsize=\letbildw
+\parskip=0pt\offinterlineskip\parindent0pt
+\hbox{\letbilda\char0\char1}}}
+\ifx\parbox\undefined
+ \def\setletbild{\box\letbildbox}
+\else
+ \def\setletbild{\parbox{\wd\letbildbox}{\box\letbildbox}}
+\fi
diff --git a/macros/latex209/contrib/letters/brief/letbilda.tfm b/macros/latex209/contrib/letters/brief/letbilda.tfm
new file mode 100644
index 0000000000..16a199bced
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/letbilda.tfm
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/untersc.tex b/macros/latex209/contrib/letters/brief/untersc.tex
new file mode 100644
index 0000000000..9dcfeecc8b
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/untersc.tex
@@ -0,0 +1,14 @@
+\newbox\unterscbox
+\newdimen\unterscw
+\font\untersca=untersca at 72.27truept
+\setbox\unterscbox=\vbox{\hbox{%
+\untersca\char0\char1\char2}}
+\unterscw=\wd\unterscbox
+\setbox\unterscbox=\hbox{\vbox{\hsize=\unterscw
+\parskip=0pt\offinterlineskip\parindent0pt
+\hbox{\untersca\char0\char1\char2}}}
+\ifx\parbox\undefined
+ \def\setuntersc{\box\unterscbox}
+\else
+ \def\setuntersc{\parbox{\wd\unterscbox}{\box\unterscbox}}
+\fi
diff --git a/macros/latex209/contrib/letters/brief/untersca.tfm b/macros/latex209/contrib/letters/brief/untersca.tfm
new file mode 100644
index 0000000000..f9f33da6ce
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/untersca.tfm
Binary files differ
diff --git a/macros/latex209/contrib/letters/brief/untersch.pcx b/macros/latex209/contrib/letters/brief/untersch.pcx
new file mode 100644
index 0000000000..0e964f0598
--- /dev/null
+++ b/macros/latex209/contrib/letters/brief/untersch.pcx
Binary files differ
diff --git a/macros/latex209/contrib/letters/finder/adressen.tex b/macros/latex209/contrib/letters/finder/adressen.tex
new file mode 100644
index 0000000000..ce302ab081
--- /dev/null
+++ b/macros/latex209/contrib/letters/finder/adressen.tex
@@ -0,0 +1,10 @@
+Steffen Steinh\"auser
+Landwehstra\ss{}e 47
+6100 Darmstadt
+06151/294630
+
+Otto Normal
+Beethovenstr. 13
+6100 Darmstadt
+01234/56789
+
diff --git a/macros/latex209/contrib/letters/finder/finder.sty b/macros/latex209/contrib/letters/finder/finder.sty
new file mode 100644
index 0000000000..9cce011abe
--- /dev/null
+++ b/macros/latex209/contrib/letters/finder/finder.sty
@@ -0,0 +1,225 @@
+% DOCUMENT OPTION STYLE
+%
+% This style has to be used as an optional style.
+%
+% Copyright (c) 1991,1992 by Steffen Steinhaeuser
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+%
+% If you make any improvements, I'd like to hear about them.
+%
+% Steffen Steinh\"auser
+% Landwehrstr. 47
+% 6100 Darmstadt
+% Federal Republic of Germany
+% steinhaeuser@ddagsi5.bitnet
+% steffen_steinhaeuser@mz.maus.de
+%
+\def~{ }
+\typeout{-------------------------------------------------------}
+\typeout{| FINDER.STY V2.1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|}
+\typeout{| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c'91 stone |}
+\typeout{-------------------------------------------------------}
+
+\newif\ifstillmore
+\newif\iffoundname
+\newif\iffoundfirstname
+\newif\iffoundsecondname
+
+\newif\iffindnameokay
+\findnameokayfalse
+
+\newif\ifserienbrief
+\serienbrieffalse
+
+\newread\datafile
+
+\gdef\firstname{???\message{Kein 1.Suchwort definiert!}}
+\gdef\secondname{???\message{Kein 2. Suchwort definiert!}}
+
+\def\meldung#1{
+\typeout{}
+\typeout{#1}
+\typeout{}}
+
+\def\serienbrief#1{\long\def\serientext{#1}
+\meldung{Der Text des Serienbriefes wurde abgespeichert.}
+\serienbrieftrue
+\findnameokayfalse
+\foundnamefalse}
+
+\def\findname{\DblArg{\findn@me}}
+\def\DblArg #1{\def\DAtemp{#1}\futurelet\DALook\Decide }
+\def\Decide{\ifx \DALook [ \let\DAdo=\DAtemp
+ \else \let\DAdo=\DBarg \fi \DAdo }
+\def\DBarg #1{\DAtemp[#1]{#1}}
+
+\long\def\findn@me[#1]#2{ %
+\gdef\firstname{#1}
+\gdef\secondname{#2}
+\serienbrieffalse
+\ifx\firstname\@empty
+ \ifx\firstname\secondname
+ \meldung{Es wurden keine Suchdaten uebergeben !!!}
+ \findnameokayfalse
+ \else
+ \findnameokaytrue
+ \foundnamefalse
+ \global\edef\firstname{\secondname}
+ \fi
+\else
+ \ifx\secondname\@empty
+ \global\edef\secondname{\firstname}
+ \findnameokaytrue
+ \else
+ \findnameokaytrue
+ \foundnamefalse
+ \fi
+\fi}
+
+\def\lookat#1 #2@@@{\gdef\found{#1}\gdef\rest{#2}
+\iffoundfirstname\else
+ \ifx\found\firstname
+ \foundfirstnametrue
+ \else
+ \foundfirstnamefalse
+ \fi
+\fi
+\iffoundsecondname\else
+ \ifx\found\secondname
+ \foundsecondnametrue
+ \else
+ \foundsecondnamefalse
+ \fi
+\fi
+\iffoundfirstname
+ \iffoundsecondname
+ \foundnametrue
+ \else
+ \ifx\rest\@empty\else
+ \expandafter\lookat\rest @@@
+ \fi
+ \fi
+\else
+ \ifx\rest\@empty\else
+ \expandafter\lookat\rest @@@
+ \fi
+\fi}
+
+\def\addressfile#1{\gdef\filename{#1}
+\iffoundname
+ \meldung{Datei \filename~ wird nicht durchsucht !!!}
+\else
+ \foundnamefalse
+ \analysefile
+ \ifserienbrief
+ \foundnamefalse
+ \fi
+\fi}
+
+\long\def\analysefile{ %
+\immediate\openin\datafile = \filename
+\iffindnameokay
+ \stillmoretrue
+\else
+ \ifserienbrief
+ \stillmoretrue
+ \foundnametrue
+ \else
+ \meldung{\string\findname{...}~ vor \string\addressfile~ aufrufen !!!}
+ \stillmorefalse
+ \fi
+\fi
+\message{finder.sty is searching in \filename}
+\loop
+\message{.}
+\foundfirstnamefalse
+\foundsecondnamefalse
+\ifeof\datafile\relax\else
+ \immediate\read\datafile to \lineone
+\fi
+\ifeof\datafile\stillmorefalse\else
+ \gdef\name{\lineone}
+ \iffoundname\else
+ \if\endgraf\lineone
+ \gdef\name{\message{\string\name~ nicht definiert !!!}}
+ \else
+ \expandafter\lookat\lineone @@@
+ \fi
+ \fi
+\fi
+\ifeof\datafile\relax\else\immediate\read\datafile to \linetwo \fi
+\ifeof\datafile\stillmorefalse\else
+ \gdef\street{\linetwo}
+ \iffoundname\else
+ \if\endgraf\linetwo
+ \gdef\street{\message{\string\street~ nicht definiert !!!}}
+ \else
+ \expandafter\lookat\linetwo @@@
+ \fi
+ \fi
+\fi
+\ifeof\datafile\relax\else\immediate\read\datafile to \linethree \fi
+\ifeof\datafile\stillmorefalse\else
+ \gdef\city{\linethree}
+ \iffoundname\else
+ \if\endgraf\linethree
+ \gdef\city{\message{\string\city~ nicht definiert !!!}}
+ \else
+ \expandafter\lookat\linethree @@@
+ \fi
+ \fi
+\fi
+\ifeof\datafile\relax\else\immediate\read\datafile to \linefour \fi
+\ifeof\datafile\stillmorefalse\else
+ \gdef\telephone{\linefour}
+ \iffoundname\else
+ \if\endgraf\linefour
+ \gdef\telephone{\message{\string\telephone~ nicht definiert !!!}}
+ \else
+ \expandafter\lookat\linefour @@@
+ \fi
+ \fi
+\fi
+\ifeof\datafile\relax\else\immediate\read\datafile to \linefive \fi
+\ifserienbrief
+ \ifstillmore
+ \typeout{Adresse -> Serienbrief : \name}
+ \typeout{~~~~~~~~~~~~~~~~~~~~~~~~ \street}
+ \typeout{~~~~~~~~~~~~~~~~~~~~~~~~ \city}
+ \typeout{~~~~~~~~~~~~~~~~~~~~~~~~ \telephone}
+ \serientext
+ \else
+ \gdef\name{}
+ \gdef\street{}
+ \gdef\city{}
+ \gdef\telephone{}
+ \fi
+\else
+ \iffoundname
+ \stillmorefalse
+ \typeout{Adresse gefunden: ~~~~~~ \name}
+ \typeout{~~~~~~~~~~~~~~~~~~~~~~~~ \street}
+ \typeout{~~~~~~~~~~~~~~~~~~~~~~~~ \city}
+ \typeout{~~~~~~~~~~~~~~~~~~~~~~~~ \telephone}
+ \fi
+\fi
+\ifstillmore\else
+ \iffoundname\else
+ \foundnamefalse
+ \meldung{Datensatz nicht gefunden!!!}
+ \gdef\name{}
+ \gdef\street{}
+ \gdef\city{}
+ \gdef\telephone{}
+ \fi
+\fi
+\ifstillmore
+\repeat
+\closein\datafile}
diff --git a/macros/latex209/contrib/letters/finder/finder.tex b/macros/latex209/contrib/letters/finder/finder.tex
new file mode 100644
index 0000000000..2dd890a526
--- /dev/null
+++ b/macros/latex209/contrib/letters/finder/finder.tex
@@ -0,0 +1,18 @@
+\documentstyle[finder]{letter}
+
+\begin{document}
+
+\findname[finder]{Normal}
+\addressfile{adressen}
+
+\begin{letter}{\name \\ \street \\ \underline{\city}}
+
+\opening{Hallo \firstname !}
+
+Text
+
+\closing{MfG}
+
+\end{letter}
+
+\end{document}
diff --git a/macros/latex209/contrib/letters/finder/finder.txt b/macros/latex209/contrib/letters/finder/finder.txt
new file mode 100644
index 0000000000..ec8e15eda6
--- /dev/null
+++ b/macros/latex209/contrib/letters/finder/finder.txt
@@ -0,0 +1,238 @@
+TeX mit Anschluß
+
+Adressensuche und -einbindung in TeX
+
+Ein nicht unbekannte Situation: Man beginnt einen Brief aufzusetzen, doch von
+der Anschrift haften nur Bruchstücke im Gedächtnis. TeX-Anwender können jetzt
+beruhigt aufatmen, schließlich ist ihr Favorit erweiterbar. Was also lag näher,
+als dem Satzsystem ein 'Datenbankfeature' zu liefern, genauer, LaTeX um eine
+Funktion zu erweitern, die es möglich macht, allein durch die Angabe der Fragmente,
+die von der Adresse noch bekannt sind, den Rest selbständig zusammenzusuchen.
+
+Die erste Überlegung galt den zu verwaltenden Daten, den Adressen und dem
+Format, in dem diese vorliegen sollen. Ich habe ein einfaches Format
+gewählt, somit läßt sich eine Exportsdatei aus Adimens bzw. dBase leicht einbinden.
+Die Adressen, also Name, Strasse, Ort und Telefon müssen zeilenweise in einer
+ASCII-Datei vorliegen, wobei jeder Adressenblock vom folgenden durch eine Leerzeile
+getrennt wird:
+
+Otto Normal
+Beethovenstr. 13
+6100 Darmstadt
+01234/56789
+
+Karl Mustermann
+...
+
+Jede Adresse muß exakt so in der Datei, wie sie später im Adressenkopf
+des Briefes erscheinen soll. Daher dürfen in der Datendatei keine
+Zeichen vorkommen, die nicht zu einer Adresse gehören. Genauso muß
+die Zeilenanzahl jeder Adresse konstant gehalten sein. Nicht ausgefüllte Daten
+sind durch Leerzeilen zu ersetzen, wie dies bei den Exportdateien üblich ist.
+
+Was Umlaute in den Adressen betrifft, so hängt dies ganz davon ab, wie solche
+in der vorliegenden LaTeX-Version behandelt werden. Allgemein gilt
+jedoch, daß man alle weiteren Sonderzeichen in bekannter LaTeX-Schreibweise
+einzugeben hat.
+
+Einbinden
+
+Das LaTeX-Dokument muß lediglich um den Optionsstyle 'finder' und zwei
+Befehle erweitert werden, um die Möglichkeiten des finder.sty nutzen zu
+können:
+
+\documentstyle[finder]{letter}
+\begin{document}
+
+\findname[]{}
+
+\addressfile{}
+
+\begin{letter}{\name \\
+ \street \\
+ \city }
+...
+\end{letter}
+\end{document}
+
+Man erkennt, daß durch die Angabe eines (in geschweiften Klammern) bzw. zweier
+Suchworte im Makro \findname und dem anschließenden Aufruf des \addressfile-Makros mit dem
+zugehörigen Adreßdateinamen danach die Makros \name, \street und \city (und
+\telephone) zur Verfügung stehen. Bei erfolgreicher Suche enthalten diese die
+vollständige Adresse.
+
+In Serie
+
+Wenn das Makropaket eine Adresse finden kann, sollte es sich auch auf die Bearbeitung
+von Serienbriefen ausdehnen lassen. Dazu muß man lediglich einen Standardbrief,
+der die Variablen \name, \street und \city enthält, an das Makro \serienbrief{...} übergeben.
+Damit entfäält bei dieser Anwendung entfällt die Angabe von Suchwörtern. Die Datendatei
+wird vollständig abgearbeitet.
+
+\documentstyle[finder]{letter}
+\begin{document}
+
+\serienbrief{ %
+\begin{letter}{\name \\
+ \street \\
+ \city }
+...
+\end{letter} }
+
+\addressfile{}
+
+\end{document}
+
+Aufspalten
+
+Nachdem der Benutzer in seinem Brief ein bzw. zwei Worte angegeben hat, kann die Suche
+in einer Adressendatei beginnen. Dabei wird die Datei zeilenweise von dem Makrokomplex
+eingelesen und Wort für Wort nach zu findenen Daten durchsucht. Im Aufspalten der
+Zeile in einzelne, nur durch Leerzeichen getrennte Wörter liegt
+das größte Problem, dessen Lösung kennzeichnet zugleich das Herzstück des finder.sty.
+Verlief die Suche nach den vorgegebenen Wörtern erfolgreich, wird die gefundene
+Adresse in Variablen verpackt und kann von dem Anwender in dessen
+LaTeX-Dokument weiterverarbeitet werden.
+
+Der Anfangsbereich des Styles beinhaltet neben einer Meldung alle vor dem ersten Durchlauf
+des Makropaketes notwendigen Grunddefinitionen. Viele der Einstellungen müssen in den Makros
+wiederholt werden, da es auch möglich sein soll, das Makropaket mehrmals in einem LaTeX-Dokument
+aufzurufen.
+
+Einmal odert immer?
+
+Der finder.sty setzt sich aus drei Makros zusammen, deren
+Beschreibung gemäß des Programmdurchlaufs erfolgt.
+
+Soll nach einer Adresse gesucht werden, so müssen an \findname[...]{...} ein
+oder (optional) zwei Suchwörter übergeben werden. \findname ist so
+programmiert, daß es, falls nur ein Suchwort (in geschweiften Klammern)
+angegeben wurde, dieses zweimal an \findn@me weiterliefert. Dort werden
+die Suchwörter in den Variablen \firstname und \secondname abgelegt. Beiden
+Makros lassen sich damit auch nach dem \findname-Aufruf im LaTeX-Dokument
+verwenden.
+
+Eine Kontrolle stellt sicher, daß keine Leerzeichen übergeben wurden. Danach sind alle Flags
+so gestellt, daß die Suche zum ersten Mal oder ggf. wieder neu beginnen kann, falls dies
+die zweite Adresse ist, nach der gesucht werden soll.
+
+Will man einen Serienbrief starten, so speichert das \serienbrief-Makro den übergebenen
+Text des Serienbriefes ab und setzt die zugehörigen Flags dementsprechend.
+
+Suche...
+
+Der erste Schritt besthet im Aufruf von \addressfile und der Angabe der zu
+durchsuchenden Datei. Aber auch dieses Makro ist nicht das eigentliche
+Ausführende, sondern es trifft nur eine Vorentscheidung. Sollen beispielsweise mehrere
+Dateien durch mehrmaliges Aufrufen des \addressfile-Befehls nach einer
+Adresse durchsucht werden und ist die Suche schon in einer der ersten
+Dateien erfolgreich, so hat sich das Weitersuchen in allen nachfolgenden Dateien erübrigt.
+Das Makro bricht in diesem Fall mit einer Bildschirmmeldung ab.
+
+Die Suche startet mit dem \analysefile-Makro, das vom
+\addressfile-Makro aufgerufen wird. Hier wird zuerst die Datendatei geöffnet,
+danach geklärt, ob eine Suche überhaupt stattfindet oder ob ein
+Serienbrief an alle Adressen geschrieben werden soll. Nach der
+Startmeldung beginnt eine Schleife. Jeder Durchlauf entspricht
+dem Einlesen eines Adressenblocks. Somit existieren im vorliegenden Falle vier
+nahezu gleiche Blöcke für \name, \street, \city und \telephone. Als fünftes
+schließt sich eine Zeile an, die die Leerzeile zwischen den Adressenblöcken
+einliest.
+
+Jeder der vier Blöcke hat drei Aufgaben. Die erste besteht im Einlesen
+der nächsten Datenzeile und der Übergabe an das entsprechende Makro. Darauf
+findet, falls keine Leerzeile eingelesen wurde, ein Weitergabe der Zeile zum
+Durchsuchen an das \lookat-Makro statt. Sollte jedoch eine Leerzeile eingelesen
+worden sein, so wird das zugehörige Makro gelöscht und mit einer
+entsprechenden Bildschirmmeldung versehen. Das Löschen ist unbedingt nötig,
+da ansonsten TeX das zugehörige Makro nicht mit einer Leerzeile, sondern
+mit einem \par füllt. Dies könnte beim Verwenden des Makros im
+LateX-Dokument unangenehme Folgen haben.
+
+Bevor ich auf die Analyse der gelesenen Zeile durch das \lookat-Makro eingehe,
+möchte ich die Beschreibung des Endes des \analysefile-Makros vorziehen. Die
+Situation am Ende der vier Blöcke unterscheidet sich durch drei Fälle:
+
+Das schlechteste Ergebnis der Suche wäre ein Mißerfolg. In diesem Fall
+werden zusammen mit einer entsprechenden Bildschirmmeldung die vier
+Adreßvariablen gelöscht. Einer erneuten Suche in einer anderen Datei steht
+dennoch nichts im Wege. Es muß nur ein \addressfile-Aufruf mit
+einer anderen Adressendatei folgen.
+
+Bei einer erfolgreichen Suche wird \stillmore auf
+'false' gesetzt und damit die Suche vorzeitig abgebrochen. Das Ergebnis
+der Suche kommt auf dem Bildschirm zur Angezeige.
+
+Im dritten Fall, der Serienbriefanwendung, wird die gerade gelesenen Adresse
+auf dem Bildschirm ausgegeben und der Text des Serienbriefes an TeX
+weitergereicht. Die darin enthaltenen Adressenvariablen haben dabei den Inhalt
+der aktuellen Adresse.
+
+Am Ende des \analysefile-Makros wird dann entweder eine neue Schleife gestartet
+oder die Adressendatei geschlossen und das Makro beendet.
+
+... und finden
+
+Die eigentliche Suche findet im \lookat-Makro statt. Von größter Wichtigkeit
+ist hierbei, daß die eingelesenen Zeile expandiert an dieses Makro übergeben
+wird. Daß heißt, die Zeile darf nicht in einem \line-Makro verpackt, sondern muß, wie
+in der Datei, explizit hinter dem \lookat-Aufruf stehen.
+
+Nun kommt es darauf an, die Zeile Wort für Wort zu zerhacken und dabei in
+einer bestimmten Variable immer nur ein Wort der Zeile zur Verfügung zu haben.
+Dieses läßt sich dann sehr einfach mit den Suchwörtern vergleichen. Eine Suche kann nur
+erfolgreich sein bei exakter Übereinstimmung zwischen dem in der Datedatei extrahierten
+und dem zu suchendem wort: Groß- und Kleinschreibung haben also durchaus Bedeutung.
+
+Die Aufgabe des Zerhackens einer Zeile und des Vergleichens mit den
+Suchwörtern übernimmt das rekursiv definierte \lookat-Makro.
+\lookat ist mit einem Leerzeichen zwischen den beiden Übergabeparametern und
+den drei Klammeraffen (@) danach so definiert, daß es ein bestimmtes Format von
+den folgenden Zeichen erwartet. #1 bekommt alle dem \lookat-Makro nachfolgenden
+Buchstaben bis zum ersten Leerzeichen zugewiesen; #2 erhält den Rest der Dateizeile bis zu den
+drei Klammeraffen, die somit als Zeilenendekennung dienen.
+
+In \lookat liegt in der \found-Variable immer ein Wort der Zeile vor.
+Dieses und auch alle anderen Wörter der Zeile werden Stück für Stück mit den
+Suchwörtern verglichen. Bei erfolgreicher Suche erhält jedes gefundene
+Suchwort einzeln ein Flag zugeordnet. Stehen beide Suchwörter in einem Adressenblock auf
+'true' schaltet auch \foundname auf 'true'. Beim wortweisen
+Durchsuchen der Zeile enthält demnach \rest immer den Restbestandteil der
+Zeile. Dieser wird analog zur gelesenen Zeile expandiert und wieder
+an \lookat unter Beachtung des Formats übergeben. \found erhält nun
+das erste Wort vom \rest-Inhalt übergeben und der \rest-Inhalt und der Inhalt von \rest
+wird um dieses Wort verringert. Man erkennt, daß \lookat-Makros ruft sich selbst aufruft.
+
+Noch etwas zu der Sonderstellung der Leerzeichen in den Adressenblöcken:
+Da immer nur wortweise Vergleich mit den Suchwörtern erfolgt,
+erklärt sich von selbst, daß diese niemals ein Leerzeichen
+enthalten dürfen. Ansonsten wäre die Suche 100%ig erfolglos, da \found
+immer nur ein Wort enthält.
+
+Die Rekursion des \lookat-Makros wird entweder abgebrochen, wenn beide
+Suchwörter im aktuellen Adressenblock gefunden wurden oder \rest leer ist,
+daß heißt, die momentane Zeile ganz durchsucht wurde.
+
+Erweitern
+
+Wie ich schon erwähnt habe, wächst die anwendungsbreite des finder.sty durch Einbezug
+Eportdateien. Eine derartige Verknüpfung macht hat aber eine Anpassung
+der Ausgabevariablen \name, \street und so weiter notwendig. Selbstverständlich lassen sich
+die vier Makros beliebig umbenennen, gleichwohl muß bei der Einfühung weiterer
+Ausgabevariablen folgendes beachtet werden.
+
+Gesetzt den Fall, die Anrede der Person soll noch in die Adressenblöcke
+aufgenommen werden. Dazu verdoppelt man zuerst den vierten,
+\telephone-Block. Danach muß \linefour beispielsweise in \linefive und demzufolge
+\linefive in \linesix umbenannt werden. Das die Numerierung dabei stimmt, ist
+nicht das Wichtige, sondern, daß \line??? nur an einer Stelle im
+\analysefile-Makro eine Dateizeile übergeben bekommt. Abschließend nennt man
+noch \telephone etwa in \title um und sorgt dafür, daß am Ende des Makros
+sowohl die Ausgabe, als auch gegebenenfalls das Löschen des Makros \title stattfindet.
+
+Ich bin sicher, durch finder.sty gestaltet sich das Briefschreiben unter LaTeX
+um einiges komfortabler. UNd mit etwas Phantasie steht der Einbindung in LaTeX-dokumente
+aller Art keine (fast) nichts im Wege.
+
+[Quelle: c't, magazin für computer technik, 3/92, Seite 214ff.
+ Autor : Steffen Steinhäuser]
diff --git a/macros/latex209/contrib/letters/german-letter/letter.sty b/macros/latex209/contrib/letters/german-letter/letter.sty
new file mode 100644
index 0000000000..5e612aa451
--- /dev/null
+++ b/macros/latex209/contrib/letters/german-letter/letter.sty
@@ -0,0 +1,457 @@
+% This is LETTER.STY in text format, as of April, 14, 1988,
+% by D. Heinrich (TH Karlsruhe).
+%
+% Last modified May, 04, 1988.
+%
+% According to the german DIN.
+% It gives the possibility to add a backaddress to the information
+% given in the window and to include a huge address (sender).
+% \windowrules and \nowindowrules are possible.
+% It's also possible to adapt captions to other languages.
+%
+% It is based on A4LETTER.STY in text format, as of June 16, 1987.
+% letter.sty 17-Jan-86 with modifications
+% for DIN-A4 paper + window envelopes, by H.Partl (Wien)
+%
+
+\typeout{}
+\typeout{Document Style `letter'.}
+\typeout{Modified at University of Karlsruhe - 04. May 1988.}
+\typeout{}
+\typeout{If you really want to use Lamport's original letter format,}
+\typeout{please use the style `aletter'.}
+\typeout{}
+
+{\catcode`\_=12 \gdef\jobname@aux{\jobname.aux}} % .aux or _aux or ...
+
+\def\@ptsize{0}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@twosidefalse
+\def\ds@draft{\overfullrule 5pt}
+
+\@options
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\ifcase \@ptsize\relax
+ \def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt}
+ \def\small{\@setsize\small{11pt}\ixpt\@ixpt
+ \abovedisplayskip 8.5pt plus 3pt minus 4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus2pt
+ \belowdisplayshortskip 4pt plus2pt minus 2pt}
+ \def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+ \abovedisplayskip 6pt plus 2pt minus 4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt
+ \belowdisplayshortskip 3pt plus 1pt minus 2pt}
+ \def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+ \def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+ \def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+ \def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+ \def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+ \def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+ \def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+ \def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+ \abovedisplayskip 11pt plus3pt minus6pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+ \def\small{\@setsize\small{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt}
+ \def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+ \abovedisplayskip 8pt plus 2pt minus 4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt
+ \belowdisplayshortskip 4pt plus 2pt minus 2pt}
+ \def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+ \def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+ \def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+ \def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+ \def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+ \def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+ \def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+ \def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+ \abovedisplayskip 12pt plus3pt minus7pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+ \def\small{\@setsize\small{13.6pt}\xipt\@xipt
+ \abovedisplayskip 11pt plus3pt minus6pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+ \def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt}
+ \def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+ \def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+ \def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+ \def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+ \def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+ \def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+ \let\Huge=\huge
+\fi
+
+\normalsize
+
+% \oddsidemargin 53pt \evensidemargin 53pt
+% \marginparwidth 90pt \marginparsep 11pt
+% \marginparpush 5pt \topmargin 27pt
+% \headheight 12pt \headsep 45pt
+% \footheight 12pt \footskip 25pt
+% \textheight 505pt \textwidth 365pt
+% \columnsep 10pt \columnseprule 0pt
+% The above values (letter.sty) are replaced by the following values:
+
+\oddsidemargin 0in
+\evensidemargin 0in
+\marginparwidth .08in
+\marginparsep .01in
+\marginparpush 5pt
+\topmargin -35pt
+\headheight 12pt
+\headsep 25pt
+\footheight 12pt
+\footskip 25pt
+\textheight 8.9in
+\textwidth 6.5in
+\columnsep 10pt
+\columnseprule 0pt
+% (Note that these new values use all of the paper, like in Plain TeX,
+% but disable the writing of marginpar's.
+
+\raggedbottom
+
+\footnotesep 12pt
+\skip\footins 10pt plus 2pt minus 4pt
+
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+% window for toaddress
+\def\@windowrules#1{\gdef\@@windowrules{#1}}
+\def\windowrules{\@windowrules{yes}}
+\def\nowindowrules{\@windowrules{}}
+\windowrules
+
+\def\backaddress#1{\gdef\@backaddress{#1}}
+\backaddress{}
+
+% \opening is quite different from the original one:
+\def\opening#1{\thispagestyle{empty}
+ \vspace*{-2cm} % upper edge of window <----
+ \ifx\@empty\fromaddress \else
+ \setbox0=\vbox{\raggedright \fromaddress \par \bigskip}
+ \vbox{\raggedright \fromaddress \par \bigskip}
+ \vspace{-\ht0}
+ \vspace{-\dp0}
+ \vspace{2.25cm}
+ \ifx\@empty\@@windowrules \hrule width 0pt
+ \else \hrule width 8cm
+ \fi
+ \ifx\@empty\@backaddress \else
+ \vspace{.75cm}
+ \setbox1=\vbox{
+ \hbox to 8cm{\hss{\scriptsize \@backaddress}\hss}}
+ \vbox{
+ \hbox to 8cm{\hss{\scriptsize \@backaddress}\hss}
+ \hrule width 8cm}
+ \vspace{-\ht1}
+ \vspace{-\dp1}
+ \hrule width 0pt
+ \fi
+ \fi
+ \ifx\@empty\@backaddress \vspace{5cm} \else % height of window <----
+ \vspace{4.25cm} % height of window <----
+ \fi
+ \vbox to 0pt{\vss \raggedright \toname \\ \toaddress \par
+ \vspace{.75cm}} % vorher .25cm + \bigskip
+ \ifx\@empty\fromaddress \else
+ \ifx\@empty\@@windowrules \hrule width 0pt
+ \else \hrule width 8cm
+ \fi
+ \vspace{0.85cm}% vorher 1.4cm
+ \hspace*{-2cm}\vbox{\hrule width .3cm}\par
+ \fi
+ \vspace{1cm}
+ {\raggedleft \@place\space\@date \par}
+ \medskip
+ \vspace{0pt plus 1cm} % to help with page break
+ #1\par\nobreak}
+
+\long\def\closing#1{\par\nobreak\vspace{\parskip}
+ \stopbreaks
+ {\raggedright
+ \ignorespaces #1\\[6\parskip]
+ \ifx\@empty\fromsig
+ \fromname
+ \else \fromsig \fi\strut}
+ \par\bigskip}
+
+%\def\ps{\par\startbreaks}
+\def\ps#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm P.S.: }%
+ \ignorespaces #1\strut}\par}
+\def\cc#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm \ccname: }% <-----
+ \ignorespaces #1\strut}\par}
+\def\ccname{cc} % <-----
+\def\encl#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm \enclname: }% <-----
+ \ignorespaces #1\strut}\par}
+\def\enclname{encl} % <-----
+\def\stopletter{}
+
+\def\returnaddress{}
+\newcount\labelcount
+\def\place#1{\gdef\@place{#1,}}
+\def\@place{}
+\def\date#1{\gdef\@date{#1}}
+\def\@date{\today}
+
+\def\startlabels{
+ \labelcount=0 \baselineskip=0pt \lineskip=0pt
+ \pagestyle{empty}
+ \let\@texttop=\relax
+ \topmargin -50pt
+ \headsep 0pt
+ \oddsidemargin -35pt
+ \evensidemargin -35pt
+ \textheight 10in
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \textwidth 550pt
+ \columnsep 25pt
+ \xpt
+ \baselineskip=0pt
+ \lineskip=0pt
+ \boxmaxdepth=0pt
+ \twocolumn\relax}
+\def\mlabel#1#2{\setbox0\vbox{\parbox[b]{3.6in}{%
+ \strut\ignorespaces #2}}
+ \vbox to 2in{\vss \box0 \vss}}
+
+
+
+\long\def\letter#1{\clearpage
+ \c@page\@ne
+ \interlinepenalty=200 \@processto{#1}}
+\def\endletter{\stopletter\@@par\pagebreak\@@par
+ \if@filesw
+ \begingroup
+ \def\protect{\string}
+ \let\\=\relax
+ \def\protect##1{\string##1\space}
+ \immediate\write\@auxout{\string\mlabel{\returnaddress}{\toname
+ \\\toaddress}}
+ \endgroup
+ \fi}
+\long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
+ \else \@yproc #1@@@\fi}
+\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200}}
+
+\def\name#1{\def\fromname{#1}}
+\def\fromname{}
+\def\signature#1{\def\fromsig{#1}}
+\def\fromsig{}
+\long\def\address#1{\def\fromaddress{#1}}
+\def\fromaddress{}
+\def\location#1{\def\fromlocation{#1}}
+\def\fromlocation{}
+\def\telephone#1{\def\telephonenum{#1}}
+\def\telephonenum{}
+
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname@aux
+ \immediate\write\@mainaux{\string\startlabels\string\@startlabels}\fi
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+\def\enddocument{\@checkend{document}\newpage\begingroup
+ \if@filesw \immediate\closeout\@mainaux
+ \makeatletter\input \jobname@aux\clearpage
+ \fi\endgroup\deadcycles\z@\@@end}
+
+\def\makelabels{\@fileswtrue}
+\def\@startlabels{}
+
+
+
+% \def\@texttop{\ifnum\c@page=1\vskip 0pt plus .00006fil\relax\fi}
+\let\@texttop=\relax
+
+\def\ps@headings{
+ \def\@oddhead{\sl \headtoname\ \ignorespaces\toname \hfil \today % <--
+ \hfil Seite \thepage}\def\@oddfoot{}}
+\def\headtoname{To} % <-----
+\def\ps@empty{
+ \def\@oddhead{}\def\@oddfoot{}\def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@firstpage{\def\@oddhead{}\def\@oddfoot{\raisebox
+ {-45pt}[0pt]{\hbox to \textwidth
+ {\hspace*{100pt}\xpt\fromlocation \hfill
+ \telephonenum}}\hss}\def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@plain{
+ \def\@oddhead{}\def\@oddfoot{\rm\hfil\thepage
+ \hfil}\def\@evenhead{}\let\@evenfoot\@oddfoot}
+
+\parskip .7em
+\parindent 0pt
+\topsep .4em
+\partopsep 0pt
+\itemsep .4em
+
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+
+\let\@listi\relax
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep .2em
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -15pt\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15pt}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@}
+
+\long\def\@makefntext#1{\noindent \hangindent 5pt\hbox
+ to 5pt{\hss $^{\@thefnmark}$}#1}
+
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+
+\smallskipamount=.5\parskip
+\medskipamount=\parskip
+\bigskipamount=2\parskip
+
+\ps@plain
+\pagenumbering{arabic}
+\onecolumn
+\@fileswfalse
+
diff --git a/macros/latex209/contrib/letters/german-letter/letter.tex b/macros/latex209/contrib/letters/german-letter/letter.tex
new file mode 100644
index 0000000000..e5ecec310e
--- /dev/null
+++ b/macros/latex209/contrib/letters/german-letter/letter.tex
@@ -0,0 +1,285 @@
+\documentstyle[11pt,german]{article}
+
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{5pt plus 2pt minus 2pt}
+
+\def\tex{\TeX}
+\def\latex{\LaTeX}
+
+\sloppy
+
+\begin{document}
+
+\begin{center}
+\vspace{2cm}
+{\LARGE\bf Briefe mit \latex}
+
+\vspace{2cm}
+Dietmar Heinrich\\
+Rechenzentrum\\
+Universit"at Karslruhe\\
+\vspace{1cm}
+\today
+\vspace{2cm}
+\end{center}
+
+\hrule height 2pt
+
+\tableofcontents
+
+\newpage
+\section{Einleitung}
+
+Der Textformatierer \tex\ erlaubt neben der
+mathe"-ma"-tisch-wissen"-schaft"-lichen
+Textverarbeitung auch das Erstellen
+von z.B. Briefen. Dazu existiert in der Makrosammlung \latex\ ein
+eigenes Style-File. Wie man nun mit \latex\ einen sch"onen
+Brief schreiben kann soll auf den folgenden Seiten
+demonstriert werden.
+
+Um zu sehen, wie ein \latex-Brief aussieht, kann man
+das Member BRIEF der Datei RZ.LATEX.BSP formatieren und
+anschlie\3end ausdrucken.
+
+\section{Aufbau eines Briefes}
+
+Wenn man als Document Style {\tt letter}
+(oder eine Variante davon)
+angibt,
+kann man zwischen \verb+\begin{document}+ und \verb+\end{document}+
+einen oder mehrere Briefe schreiben.
+
+Mit \verb+\signature{...}+ und \verb+\address{...}+
+definiert man Name und Adresse
+des Absenders.
+Zus"atzlich kann man mit \verb+\backaddress{...}+ die Adresse des
+Absenders im Fenster des Briefkuverts einblenden.
+\verb+\place{...}+ erlaubt
+es den Brief au\3er mit dem Datum auch mit dem Ort des Schreibens
+zu versehen.
+
+\verb+\begin{letter}{...}+
+beginnt einen Brief an den im Parameter mit Name und Adresse angegebenen
+Empf"anger. In \verb+{...}+ f"ugt man hierbei die Adresse des
+Adressaten ein.
+Durch \verb+\encl{...}+ k"onnen Anlagen eingef"ugt werden,
+\verb+\cc{...}+ steht f"ur den Verteiler zur Verf"ugung und
+\verb+\ps{...}+ ist f"ur das "ubliche P.S. da.
+
+\verb+\opening{...}+ und \verb+\closing{...}+
+schreiben die Anrede und den abschlie\3enden Gru\3, an den automatisch
+die mit \verb+\signature{...}+
+vereinbarte Unterschrift angef"ugt wird.
+Falls man ein ``Betreff'' einf"ugen will, geschieht dies ebenfalls
+im \verb+\opening{...}+ und die Anrede schreibt man dann ganz normal
+im Text.
+
+Die Gliederung in Abs"atze geschieht wie immer in \latex\ durch
+Einf"ugen einer Leerzeile, dadurch l"a\3t der Formatierer dann
+im Dokument ebenfalls etwa eine Leerzeile Platz.
+\verb+\end{letter}+ beendet den jeweiligen Brief.
+
+Wenn man vor \verb+\begin{document}+ den Befehl
+\verb+\makelabels+ angibt,
+werden au\3erdem Adre\3-Etiketten erzeugt.
+
+Abb.~\ref{brief} enth"alt ein
+Beispiel f"ur einen Brief.
+\begin{figure}
+{\small
+\begin{verbatim}
+\documentstyle[12pt,german]{letter}
+
+\address{R"udiger Kurz\\
+ Am See 1\\
+ 7500 Karlsruhe }
+\backaddress{R. Kurz, Am See 1, 7500 Karslruhe}
+
+\signature{R"udiger Kurz}
+\place{7500 Karlsruhe}
+
+\begin{document}
+\begin{letter}{Deutsche Bundespost \\
+ Fernmeldeamt Karlsruhe \\
+ Postfach 7300\\
+ \medskip
+ 7500 KARLSRUHE 1}
+
+\opening{Betrieb eines Mikrowellensenders}
+
+Sehr geehrte Damen und Herren!
+
+Anbei sende ich Ihnen eine Kopie der bisherigen Genehmigung f"ur
+unseren Mikrowellenherd...
+
+... Ihre Bem"uhungen im voraus vielen Dank.
+
+\closing{Mit freundlichen Gr"u\3en,}
+
+\ps{Wir bitten um schnelle Erledigung.}
+\cc{Deutsche Bundespost\\
+ Karlsruher Privatfunk \\
+ S"uddeutscher Rundfunk}
+
+\encl{Abschrift der Urkunde}
+
+\end{letter}
+\end{document}
+\end{verbatim}}
+
+\caption{Brief mit \latex.} \label{brief}
+\end{figure}
+
+\section{Besonderheiten}
+
+\subsection{Fenster}
+
+F"ur alle denen das ``Fenster'' um die Adresse nicht gef"allt
+besteht die M"oglichkeit durch Angabe von
+\verb+\nowindowrules+ vor \verb+\begin{letter}+ dieses
+abzuschalten. Wieder anschalten kann man es durch
+den Befehl \verb+\windowrules+.
+
+\subsection{Briefkopf}
+
+Wenn man nun "ofters Briefe schreibt kommt sicher bald der
+Wunsch nach einem eigenen Briefkopf auf, auch dies kann
+mit \tex\ bzw. \latex\ sehr sch"on gemacht werden.
+Am besten er"offnet man sich in seiner Briefdatei (die man
+sicher fr"uher oder sp"ater anlegen wird) ein Member mit dem
+Namen BRFKOPF. In dieses kann man z.B. den folgenden
+Briefkopf aufnehmen:
+
+\begin{verbatim}
+\font\bxtigro=cmbxti10 scaled \magstep3
+\font\bxtikle=cmbxti10 scaled \magstep1
+
+\def\myaddr{
+ \begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}}l}
+ \bxtigro R"udiger Kurz & \bxtikle Am See 1\\
+ & \bxtikle 7500 Karlsruhe\\
+ & \bxtikle Tel.: 0721 / 5 33 24\\
+ \end{tabular*}}
+\end{verbatim}
+
+Am Anfang seines Briefes wird man nun den Befehl
+\verb+\input{brfkopf}+
+aufnehmen und schreibt dann \verb+\address{\myaddr}+.
+Jetzt erscheint wundersch"on am Beginn des
+Briefes der Briefkopf. Nat"urlich kann man auch andere
+als die hier verwendeten Schriftarten ben"utzen.
+
+\subsection{Kopfzeilen}
+
+Es stehen verschiedene Kopfzeilen zur Verf"ugung die "uber die
+Option \verb+\pagestyle{...}+ ausgew"ahlt werden k"onnen.
+Bei \verb+plain+ wird eine Seitennummerierung bei mehrseitigen
+Briefen in der Fu\3zeile eingeblendet, die Kopfzeile bleibt leer.
+Durch \verb+headings+ wird die Kopfzeile mit einer
+Anrede und der Seitenzahl bei mehrseitigen Briefen gef"ullt.
+
+\subsection{Briefe in englischer oder franz"osischer Sprache}
+
+Wenn man Briefe in anderen Sprachen schreibt m"ochte man nat"urlich
+auch, da\3 die anderssprachigen Bezeichnungen f"ur Anlage, etc.
+stehen. Umschalten auf diese andere Sprachen kann man bei
+Ben"utzung des Style-Files \verb+german+ durch die Befehle
+\verb+\englishTeX+ und \verb+\frenchTeX+. Auf deutsche
+Sprache kann man wieder durch \verb+\germanTeX+
+zur"uckschalten. Diese Befehle sollten jeweils vor
+\verb+\begin{letter}+ stehen.
+
+\section{Serienbriefe}
+
+Auch Serienbriefe kann man mit \tex\ bzw. \latex\ schreiben,
+man braucht dazu nur ein kleines Makro wie z.B. das
+folgende:
+
+\begin{verbatim}
+\def\mailto#1{
+ \clearpage
+ \begin{letter}{#1}
+ \input{brftext}
+ \end{letter}}
+\end{verbatim}
+
+Mit dem Befehl \verb+\input{brftext}+ laden wir die Datei, die
+den Text f"ur den Serienbrief enth"alt.
+In einer weiteren Datei stehen unsere Adressaten im folgenden Format:
+
+\begin{verbatim}
+\mailto{Karle Huber\\
+ Lichtensteinstr. 45\\
+ \medskip
+ 7153 Hintertupfingen}
+\mailto{Anna H"aberle\\
+ Wallstra\3e\\
+ \medskip
+ 7023 L"andle}
+\end{verbatim}
+
+Die Briefe ausdrucken kann man mit einer Umgebung wie der
+in Abbildung \ref{serie}.
+
+\begin{figure}
+\begin{verbatim}
+\documentstyle[12pt,german]{letter}
+
+\input{brfkopf}
+\address{\myaddr}
+\backaddress{R. Kurz, Am See 1, 7500 Karlsruhe}
+
+\signature{R. Kurz}
+\place{7500 Karlsruhe}
+
+\def\mailto#1{ % zum ausdrucken von
+ \clearpage % Serienbriefen
+ \begin{letter}{#1}
+ \input{brftext} % Datei, die den Text enthaelt
+ \end{letter}}
+
+\begin{document}
+
+\input{#address} % Adress-Datei
+
+\end{document}
+\end{verbatim}
+\caption{Erstellen von Serienbriefen}
+\label{serie}
+\end{figure}
+
+Beachten sollte man, da\3 dann der Text in der Datei BRFTEXT
+direkt mit \verb+\opening{...}+ beginnt (also kein
+\verb+\begin{letter}+ und \verb+\end{letter}+ enthalten soll)
+und mit \verb+\closing{...}+ bzw. \verb+\ps{...}+
+abschlie\3t.
+
+Ein Beispiel f"ur die Datei BRFTEXT sieht man in
+Abbildung \ref{brftext}.
+
+\begin{figure}
+\begin{verbatim}
+\opening{Betrieb eines Mikrowellensenders}
+
+Sehr geehrte Damen und Herren!
+
+Anbei sende ich Ihnen eine Kopie der bisherigen Genehmigung f"ur
+unseren Mikrowellenherd...
+
+... Ihre Bem"uhungen im voraus vielen Dank.
+
+\closing{Mit freundlichen Gr"u\3en,}
+
+\ps{Wir bitten um schnelle Erledigung.}
+\cc{Deutsche Bundespost\\
+ Karlsruher Privatfunk \\
+ S"uddeutscher Rundfunk}
+
+\encl{Abschrift der Urkunde}
+\end{verbatim}
+\caption{Rumpf eines Serienbriefes}
+\label{brftext}
+\end{figure}
+
+\end{document}
diff --git a/macros/latex209/contrib/letters/geschbrf/dinbrief/beispiel.tex b/macros/latex209/contrib/letters/geschbrf/dinbrief/beispiel.tex
new file mode 100644
index 0000000000..858115ab24
--- /dev/null
+++ b/macros/latex209/contrib/letters/geschbrf/dinbrief/beispiel.tex
@@ -0,0 +1,385 @@
+% dinbrief_beispiel.tex (Kurzname: db_beisp.tex)
+%
+% Musterbrief, Auszuege aus DIN 5008, Adressenbeispiele
+%
+% Das unmittelbar Folgende enthaelt alle Befehle des dinbrief.sty,
+% kann daher als Vorlage dienen.
+%
+\documentstyle[german]{dinbrief}
+%\Etihoehe{41mm}
+%\Etirand{46.3mm}
+%\Etizahl{6}
+\makelabels
+\spare{1}
+%\pagestyle{empty}
+\begin{document}
+%
+% Musterbrief -- Anfang
+% In der vorliegenden Version (beachte Auskommentierungen mit %)
+% liefert er das Anwendungsbeispiel 4 von DIN 5008
+%
+\begin{letter}{Stadt G"ottingen\\Stadtbauamt\\Postfach 28 17\par
+3400 G"ottingen}
+\Postvermerk{Einschreiben}
+\Behandlungsvermerk{E\ i\ l\ t}
+\Datum{G"ottingen, 29.04.86}
+\Absender{Klaus Waldmann\\B"urgerstra"se 135\\3400 G"ottingen\\::Tel.\
+(05 51) 9 34 56}
+\Retourlabel
+%Fenster
+%\Retouradresse{K. Waldmann $\cdot$ B"urgerstr.\ 135 $\cdot$
+% 3400 G"ottingen}
+\Betreff{Mein Bauvorhaben Waldrebenweg 9}
+%\signature{K. Waldmann}
+\opening{Sehr geehrte Damen und Herren,}
+den Antrag zur Genehmigung f"ur den Neubau eines Einfamilienhauses auf
+meinem Grund\-st"uck G"ottingen, Waldrebenweg 9, hat der Architekt,
+Herr Dipl.-Ing.\ G. Schwarz, mit allen erforderlichen Unterlagen am
+03.01.86 eingereicht. Die Baugenehmigung habe ich bis heute nicht
+erhaltern.
+
+%\Einrueckung{%Der folgende Text wird eingerueckt
+Da ich die Finanzierung des Bauvorhabens ohne die Baugenehmigung nicht
+endg"ultig kl"aren kann und der Beginn der Bauarbeiten nicht verz"ogert
+werden soll, bitte ich dringend, das Genehmigungsverfahren zu
+beschleunigen.
+%} % Ende der Einrueckung
+
+Gleichzeitig bitte ich um Auskunft, ob damit zu rechnen ist, da"s der
+nur geschotterte Waldrebenweg in absehbarer Zeit zu einer "`Stra"se im
+vorl"aufigen Ausbau"' umgestaltet wird.
+
+%\anlagenrechts
+%\Anlagen{2 Anlagen}
+%\Verteiler{Verteiler:\\Landratsamt}
+
+\closing{Mit freundlichen Gr"u"sen}
+%\ps{Also bis bald!}
+\end{letter}
+% Musterbrief -- Ende
+
+
+% Auszuege aus Normblatt DIN 5008
+
+\begin{letter}{An alle\\Benutzer des dinbrief.sty}
+\Absender{Rainer Sengerling\\Institut f"ur Theoret.\ und Angew.\
+Physik\\Universit"at Stuttgart\\Pfaffenwaldring 57\\7000 Stuttgart 80}
+\Retouradresse{R. Sengerling $\cdot$ ITAP, Pfaffenwaldring 57 $\cdot$
+7000 Stuttgart 80}
+\Datum{Stuttgart, den 10.\ 8.\ 1992}
+\Betreff{Ausz"uge aus dem Normblatt DIN 5008}
+\opening{}
+{\parskip=0.3em
+Im folgenden wird eine Auswahl der Vorschriften von DIN 5008 gebracht.
+Vorschriften, die bereits durch den dinbrief.sty erf"ullt werden, sind
+nicht ber"ucksichtigt. Kommentare von mir sind {\it kursiv}
+geschrieben. Die Musteranschriften aus 12.5.6 sind als Adre"setiketten
+am Schlu"s des Dokuments realisiert. Das Anwendungsbeispiel 4
+(vordruckloser Brief von Klaus Waldmann) ist der obige Musterbrief.
+
+
+\vspace{1.5cm}
+
+{\large\bf 12\quad Beschriften von Briefbl"attern}\\[1mm]
+Die Verwendung genormter Vordrucke wird vorausgesetzt {\sl (s.
+\ldots)\/} F"ur andere Formate, anderen Aufdruck und f"ur Bl"atter
+ohne Aufdruck sind die folgenden Abschnitte sinngem"a"s anzuwenden
+{\sl (siehe auch \ldots\ und Anwendungsbeispiel 4)}.
+
+\vspace{3mm}
+
+{\bf 12.4\quad Zeilenabstand}\\[1mm]
+Es wird mit einfachem Grundzeilenabstand (Zeilenabstand 1 bzw.\
+einzeilig) geschrieben.
+
+In Schriftst"ucken mit hoch- oder tiefgestellten Schriftzeichen oder in
+Schreiben besonderer Art darf mit gr"o"serem Zeilenabstand geschrieben
+werden \ldots
+
+
+\vspace{3mm}
+
+{\bf 12.5\quad Anschriftfeld}\\[1mm]
+Anschriften werden im Anschriftfeld aller Schriftst"ucke und auf
+Briefh"ullen in gleicher Anordnung geschrieben. Satzzeichen innerhalb
+einer Anschriftzeile werden geschrieben; am Zeilenende fallen sie weg.
+Ortsnamen sind nicht gesperrt zu schreiben und nicht zu unterstreichen.
+
+Im Anschriftfeld sind au"ser der Anschrift des Empf"angers auch die
+postalischen Bestandteile zu vermerken (siehe Abschnitt 12.5.2\,a).
+
+F"ur die Verteilung der Zeilen im Anschriftfeld gelten die Muster im
+Abschnitt 12.5.6 und \ldots
+
+
+\newpage
+
+{\bf 12.5.2\quad Gliederung}\\[1mm]
+Die Angaben im Anschriftfeld werden auf folgende Weise gegliedert
+(Punkt bedeutet Leerzeile):
+\renewcommand{\labelenumi}{\alph{enumi})}
+\begin{enumerate}
+\item Sendungsart, Versendungsform, Vorausverf"ugung\\
+$\bullet$
+\item Empf"angerbezeichnung
+\item Postfach (bei Briefsendungen an Abholer, Postfachinhaber) oder
+Stra"se und Hausnummer (bei zuzustellenden Sendungen)\\
+$\bullet$
+\item Postleitzahl und Bestimmungsort mit der Nummer des Postamtes\\
+$\bullet$
+\item Bestimmungsland
+\end{enumerate}
+
+Bei Auslandsanschriften ist die Leerzeile zwischen c) und d)
+entbehrlich, wenn das Bestimmungsland unter e) angegeben werden mu"s.
+
+{\sl Siehe Abschnitte 12.5.5 und 12.5.6}
+
+\vspace{2mm}
+
+{\bf 12.5.3\quad Unterstreichungen}\\[1mm]
+Die Angaben f"ur Sendungsart, Versendungsform und Vorausverf"ugung
+werden unterstrichen, wenn sie wegen Platzmangels nicht durch eine
+Leerzeile abgesetzt werden k"onnen.
+
+\vspace{2mm}
+
+{\bf 12.5.4\quad Empf"angerbezeichnungen}\\[1mm]
+Empf"angerbezeichnungen sollen sinngem"a"s in Zeilen aufgeteilt werden.
+
+Berufs- oder Amtsbezeichnungen werden in der Regel neben "`Herrn"'
+bzw.\ "`Frau"', l"angere unter den Namen geschrieben.
+
+Akademische Grade (z.\,B.\ Dr., Dipl.-Ing.) stehen vor dem Namen
+
+{\sl Siehe Muster im Abschnitt 12.5.6}
+
+Bei Untermietern mu"s der Name des Wohnungsinhabers unter den Namen des
+Empf"angers geschrieben werden.
+
+{\sl Siehe Muster im Abschnitt 12.5.6}
+
+In Firmenanschriften wird das Wort "`Firma"' weggelassen, wenn aus der
+Emf"angerbezeichnung erkennbar ist, da"s es sich nicht um eine
+nat"urliche Person handelt.
+
+{\sl Siehe Muster im Abschnitt 12.5.6}
+
+\vspace{2mm}
+
+{\bf 12.5.5\quad Auslandsanschriften}\\[1mm]
+Auslandsanschriften m"ussen in lateinischer Schrift und in arabischen
+Ziffern gefa"st sein; Bestimmungsort und Bestimmungsland sind in
+Gro"sbuchstaben zu schreiben. Die Anordnung der Bestandteile der
+Anschrift sowie deren Schreibweise sind -- wenn m"oglich -- der
+Absenderangabe des Partners zu entnehmen. Der Bestimmungsort ist nach
+M"oglichkeit in der Sprache des Bestimmungslandes anzugeben (z.\,B.\
+LIEGE statt L"uttich, FIRENZE statt Florenz, BUCURESTI statt Bukarest,
+THESSALONIKI statt Saloniki); die Angabe des Bestimmungslandes steht
+in der letzten Zeile der Anschrift. Im Verkehr mit bestimmten L"andern
+kann auf die Angabe des Bestimmungslandes verzichtet werden, wenn das
+Unterscheidungskennzeichen f"ur den grenz"uberschreitenden
+Kraftfahrzeugverkehr der Postleitzahl -- durch einen Bindestrich von
+dieser getrennt -- vorangesetzt wird\footnote{Die "Ubersicht der in
+Betracht kommenden L"ander ist beim Postamt erh"altlich.}
+
+{\sl Siehe Anschriften im Abschnitt 12.5.6}
+
+\newpage
+
+{\bf 12.5.6\quad Musteranschriften}\\[1mm]
+{\it s.\ Ende des Dokuments}
+
+\vspace{2mm}
+
+{\bf 12.7\quad Betreff und Teilbetreff}\\[1mm]
+Betreff und Teilbetreff sind stichwortartige Inhaltsangaben. Der
+Betreff bezieht sich auf den ganzen Brief, Teilbetreffe beziehen sich
+auf Briefteile.
+
+\vspace{2mm}
+{\bf 12.7.1\quad Der Wortlaut des Betreffs} \ldots Er wird ohne
+Schlu"spunkt geschrieben, beginnt an der Fluchtlinie und wird bei
+l"angerem Text sinngem"a"s auf mehrere Zeilen verteilt. \ldots
+
+\vspace{2mm}
+
+{\bf 12.7.2\quad Der Teilbetreff} beginnt an der Fluchtlinie, schlie"st
+mit einem Punkt und wird unterstrichen. Der Text wird unmittelbar
+angef"ugt.
+
+\vspace{2mm}
+
+{\bf 12.8\quad Behandlungsvermerke}\\[1mm]
+Behandlungsvermerke (z.\,B.\ Eilt) werden neben das Anschriftfeld,
+beginnend auf Grad 50, {\it (mit Befehl
+\verb$\Behandlungsvermerk{}$)\/} oder im Anschlu"s an die
+Betreffangabe geschrieben; sie k"onnen hervorgehoben werden.
+
+{\sl Siehe Anwendungsbeispiel 4} {\it (Waldmann-Brief)}
+
+\vspace{3mm}
+
+{\bf 12.16\quad Briefh"ullen}\\[1mm]
+\ldots
+Die erste Zeile der Anschrift soll in der Mitte der Briefh"ullenh"ohe
+geschrieben werden.
+
+Die Absenderangabe beginnt in der 5.\ Zeile und wird ohne Leerzeilen
+und ohne Unterstreichung geschrieben.
+
+Zeilenanfang und -ende siehe Tabelle 2 und Anwendungsbeispiel 5}
+
+{\it aufbereitete} Tabelle 2
+
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{|l|c|c|}
+\hline
+&{\small Abstand zum linken} &{\small Zeilenl"ange}\\
+&{\small Rand, in cm}&{\small in cm}\\
+\hline
+{\bf Empf"angeranschrift}&&\\
+Vordrucke A4&2,54&7,62\\
+Briefh"ulle C6&7,62&6,35\\
+Briefh"ullen DL, C6/C5, C5&10,16&8,89\\
+Briefh"ulle C4&12,70&7,62\\
+\hline
+{\bf Absenderangabe}&&\\
+Briefh"ulle C6&1,27&3,81\\
+Briefh"ullen DL, C6/C5, C5&1,27&6,35\\
+Briefh"ulle C4&2,54&7,62\\
+\hline
+\end{tabular}
+\end{letter}
+
+
+
+
+
+% normgerecht geschriebene Adressen
+
+\begin{letter}{Frau\\Erika Werner\\bei M"uller\\Bahnhofstr.\ 4 -- 6
+
+8580 Bayreuth}
+\end{letter}
+
+
+\begin{letter}{Frau\\ Annemarie Hartmann\\Vogelsangstr.\ 17 II\par
+2870 Delmenhorst}
+\Postvermerk{Briefdrucksache}
+\end{letter}
+
+
+\begin{letter}{02694/73\\Herrn Gutsverwalter\\Dipl.-Ldw.\ Otto Winter\\
+Hauptstr.\ 3
+
+8221 Alm Post Neukirchen}
+\Postvermerk{Nicht nachsenden}
+\end{letter}
+
+
+\begin{letter}{Eheleute\\Erika und Hans M"uller\\Hochstr.\ 4
+
+4709 Bergkamen}
+\Postvermerk{Warensendung}
+\end{letter}
+
+
+\begin{letter}{Herrn Staatsanwalt\\Dr.\ Ernst Meyer und Frau\\
+Talblick 2
+
+8200 Rosenheim}
+\Postvermerk{Eilzustellung -- auch nachts}
+\end{letter}
+
+
+\begin{letter}{Herrn Rechtsanwalt\\Dr.\ Otto Freiherr von Bergheim\\
+Leonhard-Eck-Str.\ 7 W 36
+
+8000 M"unchen 19}
+\Postvermerk{Einschreiben -- R"uckschein}
+\end{letter}
+
+
+\begin{letter}{Herrn Direktor\\Dipl.-Kfm.\ Kurt Gr"aser\\Massivbau AG\\
+Postfach 21 03 14
+
+5600 Wuppertal 21}
+\end{letter}
+
+
+\begin{letter}{Frau Luise Weber\\Herrn Max Weber\\Rosenstra"se 35
+
+7030 B"oblingen}
+\end{letter}
+
+
+\begin{letter}{Lack- und Farbwerke\\Dr.\ Hans Sendler \& Co.\\
+Abt.\ FDM 412/10\\Postfach 80 19 36\par
+6230 Frankfurt 80}
+\end{letter}
+
+
+\begin{letter}{Lehmann \& Krause KG\\z.\ H. Herrn E. Winkelmann\\
+Gartenhaus III r.\\Johannisberger Str.\ 5 a\par 1000 Berlin 31}
+\end{letter}
+
+
+\begin{letter}{W"aschegro"shandel\\Robert Bergmann\\Venloer
+Stra"se 80 -- 82\par 5000 K"oln 30}
+\end{letter}
+
+
+\begin{letter}{Firma\\Otto Pfleiderer\\Braunenweiler\\Hauptstr.\ 5\par
+7968 Saulgau 1}
+\Postvermerk{Drucksache}
+\end{letter}
+
+
+\begin{letter}{Amtsgericht Leer\\Grundbuchamt\\Postfach 11 24\par
+2950 Leer}
+\end{letter}
+
+
+\begin{letter}{Regierungspr"asident\\Dezernat 44.II.2\\
+Postfach 59 07\par 4400 M"unster}
+\end{letter}
+
+
+\begin{letter}{Nassauische Heimst"atte GmbH\\
+Abt.\ Landestreuhandstelle\\Postfach 10 29 17\par 6000 Frankfurt 1}
+\end{letter}
+
+
+\begin{letter}{Volksbank Friedberg\\Hauptzweigstelle Bad Nauheim\\
+Aliceplatz 4\par 6350 Bad Nauheim}
+\end{letter}
+
+
+\begin{letter}{VEB Ph"onix-Apparatewerk\\
+Absatzabteilung\\Inselstr.\ 14/20
+
+DDR-7021 Leipzig}
+\Postvermerk{Einschreiben}
+\end{letter}
+
+
+\begin{letter}{Mevrouv J. de Vries\\ Poste restante A. Cuypstraat\\
+Postbus 99730\\1000 NA AMSTERDAM
+
+NIEDERLANDE}
+\end{letter}
+
+
+\begin{letter}{Monsieur P. Dubois\\Expert en assurances\\
+Escalier 3, b\^atiment C\\4, rue Jean Jaur\`es
+
+F-58500 CLAMECY}
+\end{letter}
+
+
+\begin{letter}{Mr.\ W. Smith\\514 Kingsbridge Road\\PURLEY, SURREY\\DE
+1\\GROSSBRITANNIEN CRZ 4TH}
+\end{letter}
+
+\end{document}
diff --git a/macros/latex209/contrib/letters/geschbrf/dinbrief/dinbrief.sty b/macros/latex209/contrib/letters/geschbrf/dinbrief/dinbrief.sty
new file mode 100644
index 0000000000..57f80647a5
--- /dev/null
+++ b/macros/latex209/contrib/letters/geschbrf/dinbrief/dinbrief.sty
@@ -0,0 +1,1133 @@
+% dinbrief.sty -- Version vom 9. Oktober 1992
+% fuer LaTeX Version 2.09
+% fuer vordrucklose Briefe im A4-Format, entsprechend den deutschen
+% DIN-Normen 5008 (von 1986), 2107, 2142, 676 und 16507
+% von Rainer Sengerling
+% (Inst. f. Theor. u. Angew. Physik, Uni Stuttgart)
+%
+% aus letter.doc (Lamport, 25 Mar 92) entwickelt
+% unter Beruecksichtigung von Beitraegen von B. Raichle
+%
+% Kontaktadressen:
+% Rainer Sengerling: rainer@itap.physik.uni-stuttgart.de
+% Rainer Sengerling, Josenhansstr. 13, 7000 Stuttgart 31
+%
+\typeout{Document Style `dinbrief' von R. Sengerling <9. Oktober 1992>.}
+
+
+% CHOOSING THE TYPE SIZE:
+%
+% The type size option is handled by \def'ing \@ptsizem to the
+% following values:
+% 10pt : 0, 11pt : 1, 12pt : 2, norm : 3
+% Zum Laden von externen Zeichensaetzen (z.B. AMS-Fonts) wurde die alte
+% Groessenvariable \@ptsize beibehalten und folgenermassen zugeordnet
+% 10pt : 0, 11pt : 1, 12pt : 2, norm : 1
+% Then loading the different fonts accordingly.
+%
+\def\@ptsize{1} \def\@ptsizem{3} % Default is norm
+\@namedef{ds@10pt}{\def\@ptsize{0}\def\@ptsizem{0}} % 10pt option.
+\@namedef{ds@11pt}{\def\@ptsize{1}\def\@ptsizem{1}} % 11pt option.
+\@namedef{ds@12pt}{\def\@ptsize{2}\def\@ptsizem{2}} % 12pt option.
+\@namedef{ds@norm}{\def\@ptsize{1}\def\@ptsizem{3}} % norm option.
+
+
+% no twoside option
+%
+\@twosidefalse
+
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull
+% % hboxes.
+\def\ds@draft{\overfullrule 5\p@}% Causes overfull hboxes to be marked.
+
+% german option
+%
+% defines \date to use \heute (german form) instead of \today
+% loads `german.sty' at the end of this file.
+%
+\newif\if@german\@germanfalse
+\def\ds@german{\@germantrue}
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the
+% present (main) .STY file is executed.
+
+\@options
+
+% **************************************************************
+% * Feld fuer benutzerspezifische Anpassungen *
+% **************************************************************
+%
+%Schrift f"ur R"uckadresse (DIN 676 u. 16507) -- Alternativen
+%\font\Retschrift=cmssq8 scaled 875
+\font\Retschrift=cmr7
+
+% Parameter fuer Feineinstellung des Druckers
+% fuer Benutzer, die die Druckereinstellung nicht veraendern duerfen,
+% wollen oder koennen
+% Solleinstellung des Druckers s. PAGE LAYOUT (unten)
+%
+\newdimen\feinx \feinx=0pt
+\newdimen\feiny \feiny=0pt
+%
+%\feinx=0.55mm % f"ur HP-Laserjet am ITAP
+%\feiny=-1.3mm % " " " " "
+%
+%\feinx=-1.10mm % f"ur PostScript-Drucker am ITAP
+%\feiny=2.25mm % " " " " "
+
+% Etiketten
+\newdimen\Etiketthoehe % Hoehe eines Etikettes
+\newdimen\Etikettrand % oberer Rand beim Etikettensatz
+\newcount\Etikettzahl % Zahl der Etiketten in einer Kolonne
+
+% Etikettenformate -- Alternativen
+ % 105 x 42,3 [mm] Zweckform (No 3653) u. Herma (Laserprint No 4625)
+ % Rand = obere Etikettenreihe
+ % \Etiketthoehe=42.3mm
+ % \Etikettrand=42.3mm
+ % \Etikettzahl=6
+%****************** Voreinstellung ****************
+ % 105 x 42 [mm] Herma (copy-print No 4452)
+ % Streifen oben, Rand = Streifen
+ \Etiketthoehe=41.15mm
+ \Etikettrand=8.85mm
+ \Etikettzahl=7
+%*****************************************************
+ % 105 x 41 [mm] Zweckform (No 3477)
+ % Pfeile markieren oben, obere Etikettenreihe zum Rand gezaehlt
+ % \Etiketthoehe=41mm
+ % \Etikettrand=46.3mm
+ % \Etikettzahl=6
+ % 105 x 48 [mm] Herma (copy-print No 4457)
+ % Streifen unten, obere Etikettenreihe = Rand
+ % \Etiketthoehe=47.6mm
+ % \Etikettrand=47.9mm
+ % \Etikettzahl=5
+
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% norm-Grundzeilenabstand 1/6in = 4,23mm (DIN 2107,2142)
+\newdimen\GZA
+\GZA=1in \divide\GZA by 6
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size.
+% (Actual value will be
+% \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize.
+% This is done only for \normalsize, not for any other size-changing
+% commands.
+
+\ifcase \@ptsizem\relax % 10pt option
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5\p@ plus3\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 3\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 11pt option
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 12pt option
+
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12\p@ plus3\p@ minus7\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\parsep 4.5\p@ plus2\p@ minus\p@
+ \itemsep \parsep
+ \topsep 9\p@ plus3\p@ minus5\p@}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\or % norm-Option (DIN 2107, 2142)
+
+\def\@normalsize{\@setsize\normalsize{1\GZA}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{1\GZA}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+
+\normalsize % Choose the normalsize font.
+
+% von Groessenoption unabhaengige Schrift fuer Beschriftung
+% der Etiketten
+%
+\def\Adgroesse{\@setsize\Adgroesse{1\GZA}\xipt\@xipt}
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and
+% side of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+\oddsidemargin 0pt % Left margin on odd-numbered pages.
+\evensidemargin 0pt % Left margin on even-numbered pages.
+\marginparwidth 90pt % Width of marginal notes.
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+\marginparpush 5pt % Minimum vertical space between marginal notes.
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -2\GZA % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 1\GZA % Height of box containing running head.
+\headsep 2\GZA % Space between running head and text.
+\topskip 1\GZA % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 25pt % Distance from baseline of box containing
+ % foot to baseline of last line of text.
+
+% DIMENSION OF TEXT:
+
+\textheight 55\GZA % Height of text (including footnotes and
+ % figures, excluding running head and foot).
+\textwidth 6in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% Anpassung an Druckereinstellung
+\advance\topmargin by \feiny
+\advance\oddsidemargin by \feinx
+\advance\evensidemargin by \feinx
+
+
+\raggedbottom % 'ragged bottom' (all pages set to natural
+ % height, with no stretch or shrinkage)
+
+% FOOTNOTES:
+
+\footnotesep 12pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 10pt plus 2pt minus 4pt % Space between last line of
+ % text and top of first footnote.
+
+
+% FLOATS:
+% The following items must be defined, even though there are no
+% floats in this style.
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+
+
+
+% ****************************************
+% * dinbrief COMMANDS *
+% ****************************************
+%
+% The following declarations, shown with examples, give information
+% about the sender:
+%
+% \signature{Larry User} : goes after the closing.
+% \Absender{Dr.\ L. User\\3245 Foo St.\par Gnu York::(415)123-4567} :
+% Absenderangaben im Briefkopf und auf dem Absenderetikett
+% (\Retourlabel); der nach :: stehende Teil (z.B. Telefonnummer)
+% erscheint nur im Brief, :: impliziert keinen Zeilenumbruch
+% \Retouradresse{L. User --3245 Foo St. -- Gnu York} : vereinbart
+% einzeilige \returnaddress, die oberhalb der Empfaengeradresse
+% ausgegeben wird.
+% \Fenster : setzt die \returnaddress im Brief, produziert Faltmarken,
+% Etikettenausgabe wird unterdrueckt
+%
+% The \makelabels declaration causes mailing labels to be made. It
+% must go before the \begin{document} command.
+% Bei zusaetzlichem Aufruf von \Retourlabel werden auch Etiketten
+% mit der Absenderadresse erzeugt, die \returnaddress wird dann auf
+% dem Empfaengeretikett nicht ausgegeben.
+% Mit \spare{3} werden die ersten 3 Felder des Etikettensatzes
+% ausgelassen.
+%
+% Es koennen verschiedene Etikettensaetze benutzt werden. Oben im "Feld
+% fuer benutzerspezifische Anpassungen" finden Sie eine Auswahl im
+% Handel erhaeltlicher Etikettensaetze. Treffen Sie eine Standardwahl!
+% In Ausnahmefaellen koennen Sie die Kenndaten eines Etikettensatzes
+% mit Befehlen wie \Etihoehe{41mm}, \Etirand{46.3mm} u. \Etizahl{6}
+% im tex-File angeben.
+%
+%
+% Weitere Deklarationen:
+%
+% \Datum{Stuttgart, den 4.\ 8.\ 1992}
+% zur freien Gestaltung der Datumsangabe
+% \Postvermerk{Einschreiben}
+% fuer postalische Vermerke, die oberhalb
+% der Empfaengeradresse stehen.
+% \Behandlungsvermerk{E\ i\ l\ t}
+% Behandlungsvermerk neben Anschriftfeld
+% \Betreff{Ihr Schreiben v. ..}
+% ein- oder mehrzeilige Betreffangabe
+%
+% The letter environment: creates a new letter, starting from page 1.
+% (The first page is unnumbered.) Sein Argument ist die Empfaenger-
+% adresse; Leerzeilen mit \par oder Leerzeile im tex-File wie in
+% \begin{letter}{Herrn\\ Dr.\ R. Sengerling\\Josenhansstr.\13 \par
+% 7000 Stuttgart 31}
+%
+% Local declarations, such as \Absender, can follow the \begin{letter}.
+%
+% Text is begun with the \opening command, whose argument generates the
+% salutation, as in
+% \opening{Dear Henry,}
+% Eingerueckte und durch Leerzeilen abgesetzte Textteile sind mit
+% \Einrueckung{text} zu realisieren, wobei text aus mehreren Absaetzen
+% bestehen darf.
+% The body of the letter follows, ended by a \closing command, as in
+% \closing{Yours truly,}
+% The 'signature' is provided automatically; sofern vereinbart
+% \Anlagen, \Verteiler ersetzen \encl bzw. \cc im letter.sty, erzeugen
+% aber selbst keinen Text; Aufruf vor \closing!
+% \Verteiler{Verteiler:\\Tinker\\Evers} -- which produces:
+% Verteiler:
+% Tinker
+% Evers
+%
+% \Anlagen{Anlage:\\Prosspektmaterial} -- which produces:
+% Anlage:
+% Prospektmaterial
+%
+% \anlagenrechts bringt die Anlagen- und Verteilervermerke neben
+% die Grussformel (bei Platzmangel); Aufruf vor \closing!
+%
+% After the \closing you can put arbitrary stuff, which is typeset
+% with \parindent = 0 and no page breaking. Commands designed
+% for use after the closing are \ps.
+%
+% Beschreibung der letter-Makros
+%
+% \opening{Dear Mr. Foo:}-
+% Should produce everything up to and including the 'Dear Mr. Foo:'
+% and a \par command that follows. Es benuetzt folgende Befehle:
+%
+% \fromaddress : Das Argument des aktuellen \Absender-Befehls wird
+% mit Hilfe der modif. processto-Routine gemaess
+% \fromaddressI::\fromaddressII aufgespalten.
+% \fromaddressII erscheint nur im Briefkopf
+% \date : Datum
+% \fenst : Makro fuer Faltmarken u. durch Strich abgesetzte
+% kleingedruckte \returnaddress
+% \Vermerk : Argument von \Postvermerk
+% \toaddress : Argument des letter-Environments
+% \Adhoehe : zur Ausmessung der Adressbox
+% \Behver : Argument von \Behandlungsvermerk
+% \betreff : Argument von \Betreff
+%
+% \closing{TXT} : Generates the closing matter, Anlagen- und
+% Verteilervermerk and the signature.
+% An obvious thing to do is to use a t-\parbox for the closing
+% and the signature. \An steht normalerweise unterhalb, bei
+% \anlagenrechts jedoch rechts davon. Benutzt:
+%
+% \fromsig : argument of current \signature declaration
+% \stopbreaks : a macro that inhibits page breaking.
+% \An : Anlagen- und Verteilertext
+%
+% \ps : The only thing that this needs to do is call \startbreaks,
+% which allows page breaking again.
+%
+%
+% CUSTOMIZING THE LABELS
+%
+% Commands for generating the labels are put on the .AUX file, which is
+% read in and processed by the \end{document} command. You have to
+% define the following two commands:
+%
+% \startlabels : Should reset the page layout parameters if
+% necessary.
+%
+% \mlabel{RETURN ADDRESS}{Postvermerk}{TO ADRESS} : Command to
+% generate a single label.
+% \retourlabel{fromaddressI} : Befehl fuer ein Absender-Etikett
+
+
+
+% ************************************************
+% * spez. Befehle des dinbrief.sty *
+% ************************************************
+%
+\def\Datum#1{\def\date{#1}}
+\def\date{\if@german\heute\else\today\fi}
+
+\newif\iffenster\fensterfalse
+\def\Fenster{\fenstertrue}
+
+\def\Retouradresse#1{\def\returnaddress{#1}}
+\def\returnaddress{}
+
+\def\Postvermerk#1{\def\Vermerk{#1}}
+\def\Vermerk{}
+
+\newdimen\Adhoehe
+\def\Behandlungsvermerk#1{\def\Behver{#1}}
+\def\Behver{}
+
+\def\Betreff#1{\def\betreff{\ignorespaces #1}}
+\def\betreff{}
+
+\long\def\Einrueckung#1{\par
+ \vspace*{-\baselineskip}\vspace*{-\parskip}\strut \par
+ \hfill \vbox{\hsize 5in\strut #1}\par}
+% Durch struts wird die Einhaltung des Zeilenrhythmus garantiert. Um
+% dem Anwender das Einsetzen von \strut am Ende des vorausgehenden
+% Textes zu ersparen und ihm offenzuhalten, im Eingabefile den
+% einzurueckenden Text durch Leerzeilen abzusetzen, wird eine
+% strut-Zeile zwischengeschaltet und der ueberschuessige vertikale
+% Leerraum entfernt.
+% Bemerk. zu \strut:
+% \strut ist in LaTeX ein strut mit einer Ober-/Unterlaenge von
+% 0.7/0.3 \baselineskip (s. Def. von \strutbox in LFONTS.tex) --
+% dies ist eine Verallgemeinerung des 8.5pt/3.5pt-strut von plain-TeX
+% (s. TeXbook S. 353)
+
+\newif\ifanlagenr\anlagenrfalse
+\def\anlagenrechts{\anlagenrtrue}
+\def\Anlagen#1{\def\Anlagentext{#1}}
+\def\Anlagentext{}
+\def\Verteiler#1{\def\Verteilertext{#1}}
+\def\Verteilertext{}
+
+\newcount\sparzahl \sparzahl=0
+\def\spare#1{\sparzahl=#1\relax}
+
+\newif\ifretour\retourfalse
+\def\Retourlabel{\retourtrue}
+
+
+
+% **************************************************
+% * letter-Makros, weitgehend neu definiert *
+% **************************************************
+%
+
+% Neudefinition des opening-Befehls
+\def\opening#1{\thispagestyle{empty}%
+ \unitlength 1mm%
+ \begin{picture}(0,0)%
+% % Absenderadresse und Datum
+ \put(0,12.69){%
+ \parbox[t]{\textwidth}{\parbox[t]{3in}{\fromaddressI\fromaddressII}%
+ \hfill \date }}%
+% % Fenster
+ \iffenster\fenst\fi
+% % Empfaengeradresse u. Behandlungsvermerk
+ \setbox\z@\vtop{\hsize 3in\strut \Vermerk\par \toaddress \strut}%
+ \Adhoehe\ht\z@
+ \advance\Adhoehe \dp\z@
+ \advance\Adhoehe -\dp\strutbox % = Unterlaenge eines LATEX-strut --
+% % s. Def. von \strutbox in LFONTS.tex
+% % beachte: die Dimensionsangabe in \vtop- u. \vbox-Befehlen bezieht
+% % sich nicht auf deren Gesamthoehe (s. TeXbook S. 80--81)
+ \put(0,-21.15){\box\z@ \hspace{1in}\vtop to\Adhoehe{\strut
+ \par \vfill \Behver \strut}}%
+ \end{picture}%
+% % Anpassung fuer Betreff
+ \strut\par
+ \vspace{-\parskip}%
+ \vspace{15\GZA}%
+% % Anpassung wegen der verschiedenen Grundzeilenabstaende
+ \ifcase\@ptsizem\vspace{.045pt}\or\vspace{-1.555pt}\or
+ \vspace{-2.955pt}\fi
+ \betreff \strut \par
+ \vspace{-\parskip}%
+ \vspace{2\GZA}%
+% % Anpassung wegen der verschiedenen Grundzeilenabstaende
+ \ifcase\@ptsizem\vspace{.045pt}\or\vspace{-1.555pt}\or
+ \vspace{-2.955pt}\fi
+ \def\Anrede{#1}%
+ \ifx\Anrede\@empty \else #1\par\fi\nobreak}
+
+\def\fenst{%
+% % Faltmarken
+ \put(-19,-71.16){\line(1,0){3}}%
+ \put(-19,-176.16){\line(1,0){3}}%
+% % Strich unter Returnadresse
+ \put(-5.4,-16.16){\line(1,0){85}}%
+% % Setzen der Returnadresse
+ \put(-5.4,-16.16){\makebox(85,4){\Retschrift\returnaddress}}}
+
+% Neudefinition des closing-Befehls
+\long\def\closing#1{\par\nobreak
+ \stopbreaks
+ \noindent
+ \parbox[t]{3.5in}{\raggedright
+ \ignorespaces #1\strut \\[4\GZA]%
+ \ifx\@empty\fromsig \relax \else \fromsig \fi
+ \strut}%
+ \ifanlagenr\hfill \parbox[t]{2in}{\An}%
+ \else \par\An \fi}
+
+\def\An{\ifx\Anlagentext\@empty\else\Anlagentext \strut
+ \par \fi \ifx\Verteilertext\@empty\else\Verteilertext \strut\fi}
+
+\def\ps{\par\startbreaks\strut}
+
+\def\stopletter{}
+
+% Labels
+
+\newcount\labelcount
+
+
+% The following \startlabels command sets things up for producing
+% labels in two columns
+%
+\def\Etihoehe#1{\Etiketthoehe=#1\relax}
+\def\Etirand#1{\Etikettrand=#1\relax}
+\def\Etizahl#1{\Etikettzahl=#1\relax}
+
+
+% Neudefinition des startlabel-Befehls
+\def\startlabels{\labelcount\z@
+\setcounter{page}{91}%
+\pagestyle{empty}%
+\topmargin -24mm%
+\advance\topmargin \Etikettrand
+\topskip \z@skip
+\headheight \z@
+\headsep \z@
+\oddsidemargin -19.4mm%
+\evensidemargin \oddsidemargin
+% Druckeranpassung
+\advance\topmargin \feiny
+\advance\oddsidemargin \feinx
+\advance\evensidemargin \feinx
+\textheight=\Etikettzahl\Etiketthoehe
+\advance\textheight .05cm%
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 19.8cm%
+\columnsep 1.2cm%
+\Adgroesse
+\baselineskip \z@skip \lineskip \z@skip
+\boxmaxdepth \z@
+\parindent \z@
+\twocolumn
+\relax
+\ifnum\sparzahl>\z@
+ \ifnum\sparzahl<\Etikettzahl\else
+ \mbox{}\newpage \advance\sparzahl -\Etikettzahl\fi
+ \vspace*{\sparzahl\Etiketthoehe}\par\fi}
+
+% Neudefinition des mlabel-Befehls
+\long\def\mlabel#1#2#3{\def\test{#1}%
+ \baselineskip\GZA
+ \parskip\GZA
+ \ifx\test\@empty
+ \setbox\z@\vbox to40mm{\hspace*{9.4mm}\vbox{\hsize 3in\ignorespaces
+ #2\rule{\z@}{5mm}\par #3}\vss}%
+ \vbox to\Etiketthoehe{\vss \box\z@ \vss}%
+ \else
+ \ifdim\Etiketthoehe<45mm
+ \parskip2mm%
+ \setbox\z@\vbox{%
+ \underline{\rule[-.9mm]{\z@}{3.2mm}\makebox[93mm]{\Retschrift #1}}\\
+ \hspace*{9.4mm}\vbox{\hsize 3in\ignorespaces
+ #2\rule{\z@}{10\p@}\par #3}}%
+ \vbox to\Etiketthoehe{\box\z@ \vss}%
+ \else
+ \setbox\z@\vbox to45mm{%
+ \underline{\rule[-.9mm]{\z@}{5mm}\makebox[93mm]{\Retschrift #1}}\\
+ \hspace*{9.4mm}\vbox{\hsize 3in\ignorespaces
+ #2\rule{\z@}{5mm}\par #3}\vss}%
+ \vbox to\Etiketthoehe{\vss \box\z@ \vss}%
+ \fi
+ \fi}
+
+\long\def\retourlabel#1{\setbox\z@\vbox{\baselineskip\GZA\parskip\GZA
+ \hspace*{.2cm}%
+ \vbox{\hsize 8.7cm\rule{\z@}{18\p@}\ignorespaces #1\strut}}%
+ \vbox to \Etiketthoehe{\box\z@\vss}}
+
+
+
+
+% ****************************************
+% * THE GENERIC LETTER COMMANDS *
+% ****************************************
+%
+
+
+%% FMi & RmS: added \leavevmode to catch empty argument, 16 Aug 91
+%% RmS ...and added \ignorespaces, 21 Feb 92
+
+% Neudefinition des letter-Befehls
+\long\def\letter#1{\newpage
+ \c@page\@ne
+ \interlinepenalty 200 % smaller than the TeXbook value
+ \def\toaddress{\leavevmode\ignorespaces #1}}
+
+% Neudefinition des endletter-Befehls
+\def\endletter{\stopletter\@@par\pagebreak\@@par
+ % Unterdrueckung der Adressetikettenausgabe bei Fenster-Option
+ \iffenster\@fileswfalse\fi
+ \if@filesw
+ \begingroup
+ \let\\\relax
+ \def\protect##1{\string##1\space}%
+ \ifretour
+ \immediate\write\@auxout{\string\mlabel
+ {\empty}{\Vermerk}{\toaddress}}%
+ \immediate\write\@auxout{\string\retourlabel
+ {\fromaddressI}}%
+ \else
+ \immediate\write\@auxout{\string\mlabel
+ {\returnaddress}{\Vermerk}{\toaddress}}%
+ \fi
+ \endgroup
+ \fi}
+
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\\@nobreakcr
+ \let\vspace\@nobreakvspace}
+
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+
+\def\startbreaks{\let\\\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200\relax}}
+%% \relax added 20 Sep 88
+
+% Neudefinition des Absender-Befehls
+\long\def\Absender#1{\@processto{#1}}
+\def\fromaddressI{}\def\fromaddressII{}
+% Aufspaltung der Absenderadresse gemaess fromaddressI::fromaddress II
+% mit Hilfe der modifizierten Routinen \@processto, \@xproc und \@yproc
+%
+\long\def\@processto#1{\@xproc #1::@@@\ifx\fromaddressII\@empty
+\else \@yproc #1@@@\fi}
+\long\def\@xproc #1::#2@@@{\def\fromaddressI{#1}\def\fromaddressII{#2}}
+\long\def\@yproc #1::#2@@@{\def\fromaddressII{#2}}
+
+\def\signature#1{\def\fromsig{#1}}
+\def\fromsig{}
+
+% \document redefined so it writes '\startlabels\@startlabels' on the
+% AUX file if it's making one.
+%
+%
+% 91/03/26 FMi: |\process@table| added to support NFSS.
+% This will also work with old lfonts if no other style defines
+% |\process@table|.
+%
+% 92/02/21 RmS: added \@noskipsecfalse setting in conformance with
+% change in latex.tex.
+%
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux
+ {\string\startlabels\string\@startlabels}\fi
+ \csname process@table\endcsname
+ \let\glb@currsize\@empty %% Force \baselineskip initialisation.
+ \def\do##1{\let ##1\@notprerr}%
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}\@noskipsecfalse}
+
+% Redefine \enddocument so it outputs the last page of labels,
+% if necessary.
+%
+\def\enddocument{\@checkend{document}\newpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\makeatletter\input \jobname.aux\clearpage
+\fi\endgroup\deadcycles\z@\@@end}
+
+
+\def\makelabels{\@fileswtrue}
+
+\def\@startlabels{}
+
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+\def\ps@empty{\let\@oddhead\@empty\let\@oddfoot\@empty
+ \let\@evenhead\@oddhead\let\@evenfoot\@oddfoot}
+
+% Neudefinition des plain-Stiles
+\def\ps@plain{\let\@oddfoot\@empty\def\@oddhead{\hspace{3in}\rm
+ -- \thepage\ --\hfil}
+ \let\@evenfoot\@oddfoot\let\@evenhead\@oddhead}
+
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\ifnum\@ptsizem=3 \parskip=\baselineskip\else \parskip .7em\fi
+ % Extra vertical space between paragraphs.
+\parindent 0pt % Width of paragraph indentation.
+%\topsep .4em % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 0pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+%\itemsep .4em % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% See \@listI for values of \topsep and \itemsep
+% (Change made 17 Oct 91)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph
+ % environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph
+ % environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % SET BY THE LETTER COMMANDS
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the
+% list environment's parameters. See the LaTeX manual for an
+% explanation of the meanings of the parameters. Defaults for the list
+% environment are set as follows. First, \rightmargin, \listparindent
+% and \itemindent are set to 0pt. Then, for a Kth level list, the
+% command \@listK is called, where 'K' denotes 'i', 'ii', ... , 'vi'.
+% (I.e., \@listiii is called for a third-level list.) By convention,
+% \@listK should set \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 17 Oct 91)
+\def\@listI{\leftmargin\leftmargini
+ \topsep .4em%
+ \itemsep .4em\relax}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep .2em%
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+
+%% RmS 92/02/26 corrected definitions of \labelenum.. to use \theenum..
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi,
+% \labelitemii, \labelitemiii, and \labelitemiv, which define the
+% labels of the various itemization levels.
+
+\def\labelitemi{$\m@th\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\m@th\ast$}
+\def\labelitemiv{$\m@th\cdot$}
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\\@centercr
+ \list{}{\itemsep\z@ \itemindent -15\p@\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15\p@}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em%
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray
+% % environment
+
+\arraycolsep 5pt % Half the space between columns in an array
+ % environment.
+\tabcolsep 6pt % Half the space between columns in a tabular
+ % environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular
+ % environment.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command.
+ % (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+%
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and
+ % \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes
+% from the text. It should take zero vertical space, so it needs a
+% negative skip to compensate for any positive space taken by the rule.
+% (See PLAIN.TEX.)
+
+\def\footnoterule{\kern-\p@
+ \hrule \@width .4\columnwidth
+ \kern .6\p@} % The \hrule has default height of .4pt.
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the
+% mark of the footnote and NOTE as the text. It is called when
+% effectively inside a \parbox, with \hsize = \columnwidth.
+%
+
+\long\def\@makefntext#1{\noindent %Macro to make the text of a footnote
+ \hangindent 5\p@\hbox to5\p@{\hss $\m@th^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters set by some commands. Easier to define
+% them than change the commands.
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\number\day.\ \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \ \number\year}
+\def\heute{\number\day.\ \ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi
+ \ \number\year}
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\smallskipamount=.5\parskip % These values are used by the
+ % letter macros.
+\medskipamount=\parskip
+\bigskipamount=2\parskip
+
+\ps@plain % 'plain' page style
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column
+\@fileswfalse % Inhibits writing of .AUX file.
+
+\if@german % german option
+ \input german.sty\relax
+\fi
+
+\endinput
diff --git a/macros/latex209/contrib/letters/geschbrf/dinbrief/info.tex b/macros/latex209/contrib/letters/geschbrf/dinbrief/info.tex
new file mode 100644
index 0000000000..63798ede51
--- /dev/null
+++ b/macros/latex209/contrib/letters/geschbrf/dinbrief/info.tex
@@ -0,0 +1,494 @@
+% dinbrief_info.tex (Kurzname: db_info.tex)
+%
+% Beschreibung des dinbrief.sty (9. Oktober 1992)
+%
+\documentstyle[11pt,german]{article}
+% Anpassung an A4-Format
+% ******* aus gart11.sty *******************************
+\oddsidemargin 14pt \evensidemargin 14pt
+\marginparwidth 0pt \marginparsep 0pt
+\topmargin -28pt \headheight 25pt
+\textheight 640pt \textwidth 425pt
+\parskip 9pt plus 1pt minus 1pt \parindent 0pt
+\topsep 0pt \partopsep 0pt \itemsep 0pt
+%***********************************************
+
+\begin{document}
+{\huge\bf Briefe mit \LaTeX\ -- der dinbrief.sty}
+\section{Kurzinformation}
+Der \verb/dinbrief.sty/ dient zur Formatierung vordruckloser Briefe im
+A4-Format und in beliebiger Sprache. Es gelten die im \LaTeX-Manual
+von Lamport beschriebenen Regeln und Befehle, sofern sie durch das
+Folgende nicht ber"uhrt werden.
+
+\vspace{2\baselineskip}
+
+\begin{tabbing}
+AAAAAAAAAAAAAAAAA\=\kill
+Aufruf\>\verb/\documentstyle[...]{dinbrief}/\\[2\parskip]
+{\bf documentstyle options}\\[1\parskip]
+\verb/10pt/, \verb/11pt/, \verb/12pt/, \verb/norm/
+\>\verb/norm/ entspricht einer Schreibmaschinenschrift mit Zeilen-\\
+\>schaltung 1; voreingestellt\\[1\parskip]
+\verb/german/ \>f"ur deutsches Datum (voreingestellt ist engl.\
+Datum);\\ \>\verb/german.sty/ wird geladen \\[2\parskip]
+{\bf Befehle}\\[1\parskip]
+\verb/\makelabels/\>macht Empf"angeradre"s-Etiketten (in Pr"aambel);\\
+\>eine \verb/\Retouradresse/ wird "uber die Empf"angeradresse \\
+\>gesetzt; Ausgabe von Absenderadre"s-Etiketten bei \\
+\>zus"atzlichem Aufruf von \verb/\Retourlabel/\\[1\parskip]
+\verb/\pagestyle{ }/ \>\verb/plain/ und \verb/empty/, aber nicht
+\verb/headings/ (in Pr"aambel) \\[1\parskip]
+\verb/\spare{/$n$\verb/}/ \>f"ur Mehrfachgebrauch eines
+Etikettenblattes -- r"uckt um\\\>$n$ Positionen
+vorw"arts (in Pr"aambel) \\[1\parskip]
+\verb/\begin{letter}{ }/\>enth"alt die Anschrift des
+Empf"angers; \\
+\>Leerzeilen sind durch \verb/\par/ oder eine Leerzeile in der
+\\\>Textdatei zu erzeugen\\[1\parskip]
+\verb/\Retouradresse{ }/\>{\em einzeilige} Absenderadresse f"ur
+Adre"setikett und Fensterbrief\\[1\parskip]
+\verb/\Retourlabel/\>erzeugt Absenderadre"s-Etiketten
+(bei vorangehendem\\
+\>\verb/\makelabels/-Aufruf), \\
+\>die Ausgabe einer \verb/\Retouradresse/ wird unterdr"uckt\\[1\parskip]
+\verb/\Fenster/\>bei Verwendung von Fensterbriefh"ullen; \\
+\>setzt die \verb/\Retouradresse/ "uber die Empf"angeradresse und
+\\\>produziert die linken Faltmarken; keine Etiketten \\[1\parskip]
+\verb/\Postvermerk{ }/\>f"ur postalische Vermerke wie Einschreiben,
+Drucksache, \ldots \\[2\parskip]
+\verb/\Behandlungsvermerk{}/\>f"ur Behandlungsvermerke,
+z.\,B. E\ i\ l\ t \\[1\parskip]
+\verb/\Absender{ }/,\>Adresse des Absenders -- tritt an die Stelle von
+\verb/\address/ \\
+\verb/\Absender{I::II}/\>im \verb/letter.sty/.\\
+\>Der durch \verb/::/ abgetrennte Teil II erscheint zwar im Brief-\\
+\>kopf, aber nicht im Absenderetikett (s.\ \verb/\Retourlabel/).\\
+\>\verb/::/ ersetzt nicht den Zeilenumbruch \\[1\parskip]
+\verb/\Datum{ }/\>zur freien Gestaltung der Datumsangabe\\[1\parskip]
+\verb/\today/\>englisches Datum\\[1\parskip]
+\verb/\heute/\>deutsches Datum\\[1\parskip]
+\verb/\Betreff{ }/\>f"ur ein- oder mehrzeilige Betreffangabe
+\end{tabbing}
+
+Die Befehle von \verb/\Retouradresse/ bis \verb/\Betreff/ haben {\em
+globale} Bedeutung, wenn sie in der Pr"aambel erscheinen. Stehen sie
+in einer \verb/letter/-Umgebung (aber vor \verb/\opening/!), gelten
+sie nur f"ur diesen Brief -- entsprechende globale Vereinbarungen sind
+dann aufgehoben.
+
+
+\begin{tabbing}
+AAAAAAAAAAAAAAAAA\=\kill
+\verb/\opening{/{\it Anrede}\verb/}/\>dient nicht nur zur Eingabe der
+Anrede, sondern veranla"st \\\>das System, den oberen Teil des
+Briefes auszugeben;\\
+\>Briefe ohne Anrede sind mit \verb/\opening{}/ zu realisieren
+\\[1\parskip]
+\verb/\Einrueckung{ }/\>f"ur einger"uckten Text; dieser darf Abs"atze
+enthalten\\[1\parskip]
+\verb/\anlagenrechts/\>Anlagen- und Verteilervermerke beginnen {\em
+rechts} neben der \\\>Gru"sformel;
+n"utzlich bei Platzmangel, Aufruf vor \verb/\closing/\\[1\parskip]
+\verb/\Anlagen{ }/\>ersetzt \verb/\encl/ im \verb/letter.sty/; erzeugt
+selbst keinen Text, \\\>Aufruf vor \verb/\closing/\\[1\parskip]
+\verb/\Verteiler{ }/\>ersetzt \verb/\cc/; sonst wie \verb/\Anlagen/
+\end{tabbing}
+
+Folgende Optionen und Befehle des \verb/letter.sty/ sind bei Verwendung
+des \verb/dinbrief.sty/ unzul"assig
+\begin{center}
+\verb/headings/, \quad \verb/\cc/, \quad \verb/\encl/,
+\quad \verb/\name/, \quad \verb/\address/, \quad
+\verb/\location/, \quad\verb/\telephone/
+\end{center}
+
+Zur individuellen Anpassung an Etikettens"atze (2-spaltig):
+\begin{tabbing}
+AAAAAAAAAAAAAAAAA\=\kill
+\verb+\Etihoehe{ }+\>H"ohe eines Etiketts, mind.\ 40\,mm \\[1\parskip]
+\verb+\Etirand{ }+\>Breite des oberen Randes des
+ Etikettenblattes\\[1\parskip]
+\verb+\Etizahl{ }+\>Zahl der Etiketten in einer Spalte des
+ Etikettenblattes\\[1\parskip]
+\end{tabbing}
+
+Zum korrekten Abfassen des Briefes, insbesondere der Adressenangaben,
+wird das Studium der Norm DIN 5008 (s.\ \verb/dinbrief_beispiel.tex/)
+empfohlen.
+
+
+
+\newpage
+\section{Bemerkungen zum dinbrief.sty}
+
+Der von Lamport entwi"ckelte \verb/letter.sty/ orientiert sich an den
+amerikanischen Gepflogenheiten (Papierformat, Anordnung der Textteile)
+und gebraucht die englische Sprache (Monatsnamen, encl:, cc:). Der
+\verb/dinbrief.sty/ wurde aus jenem unter Beachtung der Normen DIN
+5008, 676, 2107, 2142 und 16\,507 entwi"ckelt.
+
+Um normgerechte {\em
+Gesch"aftsbriefe}\footnote{Zeilenabstand 1 ($\approx 4,23$\,mm),
+Leerr"aume sind {\em ganzzahlige} Vielfache davon}
+schreiben zu k"onnen, wurde neben den von
+\LaTeX\ angebotenen size-Optionen noch eine sog.\
+\verb/norm/-Option eingef"uhrt. Der Benutzer hat die Wahl unter
+\begin{center}
+\begin{tabular}{l|l|c@{ bzw.\ }c|c}
+Option&\multicolumn{1}{c|}{Vergleich mit Pica-Maschinenschrift}
+&\multicolumn{2}{c|}{Zeilenabstand}
+&parskip\\ \hline
+10pt&Buchstaben viel zu klein&12pt&$\approx 1$&0.7em\\
+11pt&Kleinbuchstaben zu klein&13,6pt&$\approx 1,13$&0.7em\\
+12pt&Gro"sbuchstaben zu gro"s&15pt&$\approx 1,25$&0.7em\\
+norm&Buchstaben wie 11pt-Option&1/6in&1&1 baselineskip
+\end{tabular}
+\end{center}
+Auch wenn nicht die \verb/norm/-Option gew"ahlt wird, gehorchen die
+Briefe den Anordnungsregeln von DIN 5008 f"ur die Gestaltung von
+Gesch"aftsbriefen. So beginnt die Absenderanschrift auf "`Zeile 5"',
+der Betreff auf "`Zeile 24"', und der Postvermerk in der Anschrift
+steht auf "`Zeile 13"', was die Verwendung von Fensterbriefh"ullen
+gestattet. Im allgemeinen stehen f"ur die Empf"angeradresse 7 Zeilen
+zur Verf"ugung (wie von der Norm vorgesehen) -- bei der Gr"o"senoption
+\verb/12pt/ darf die Adresse h"ochstens 6zeilig sein, was jedoch meist
+ausreicht (s.\ Musteranschriften im Normblatt).
+
+Um die Datumsangabe frei gestalten zu k"onnen, wurde der Befehl
+\verb/\Datum/ eingerichtet. Er erlaubt Vor- und R"uckdatieren,
+Monatsangaben in beliebiger Sprache oder in Ziffern, Aufnahme des
+Ortes in das Datum (dabei kann auf das automatische Datum
+zur"uckgegriffen werden -- z.\,B.\ Stuttgart, den \verb/\heute/).
+
+
+Zum vordrucklosen Brief geh"oren eigentlich weder eine kleingedruckte
+Absenderadresse noch Faltmarken. Die \verb/\Fenster/-Option f"uhrt
+Elemente des Vordrucks f"ur Gesch"aftsbriefe (DIN 676, Form B) in die
+Gestaltung ein.
+
+\verb/\Anlagen/ und \verb/\Verteiler/ erzeugen im Gegensatz zu ihren
+Entsprechungen \verb/\encl/ und \verb/\cc/ im \verb/letter.sty/
+{\em selbst\/} keinen Text.
+Daf"ur ist man unabh"angig von der Sprache und kann auf einfache Weise
+die ganze F"ulle der M"oglichkeiten
+\begin{center}
+1 Anlage \quad 5 Anlagen \quad
+\newlength{\Breite}
+\settowidth{\Breite}{Reifezeugnis}
+\parbox[t]{\Breite}{Anlage:\\Reifezeugnis} \quad
+\settowidth{\Breite}{Diplomzeugnis}
+\parbox[t]{\Breite}{Anlage:\\Reifezeugnis\\Diplomzeugnis} \quad
+usw.
+\end{center}
+aussch"opfen. Da das Ausdru"cken des Anlagen- und des Verteilervermerks
+in die closing-Prozedur aufgenommen wurde, sind \verb/\Anlagen/,
+\verb/\Verteiler/ wie \verb/\anlagenrechts/ {\em vor}
+\verb/\closing/ zu gebrauchen.
+
+
+\verb/\makelabels/ in der Pr"aambel f"uhrt zur Ausgabe von Etiketten
+mit der Empf"angeradresse. Ist eine \verb/\Retouradresse/
+spezifiziert, wird sie wie bei einem \verb/\Fenster/-Brief "uber die
+Empf"angeranschrift gesetzt. Dies entspricht jedoch nicht der
+Normvorschrift und ist oft auch nicht m"oglich, weil die Adresse des
+Absenders zu lang ist. Deshalb wurde der Befehl \verb/\Retourlabel/
+eingerichtet -- er veranla"st das System, auch Etiketten mit der
+Absenderadresse zu dru"cken. Diese wird dem Argument des
+\verb/\Absender/-Befehls entnommen. H"aufig stehen im Briefkopf nach
+unserer Postanschrift auch Angaben (z.\,B.\ Telefonnummer), die nicht
+auf das Etikett geh"oren. Solche Angaben sind im
+\verb/\Absender/-Argument von der Postanschrift durch \verb/::/
+abzutrennen. Um dem Anwender gestalterische Freiheit zu lassen
+(\verb/\\/, \verb/\\[]/, \verb/\par/), wurde mit dem Separator kein
+Zeilenumbruch verbunden.\\
+Bsp.: \verb/\Absender{R. Sengerling ...Stuttgart 31\\[2mm]::Tel.
+83\,45\,10}/
+
+Bei \verb/\Retourlabel/ unterbleibt die Ausgabe der
+\verb/\Retouradresse/ auf dem Empf"anger-Etikett.
+
+
+Noch einige Bemerkungen zur {\em Ausgabe} von Adre"setiketten
+\begin{itemize}
+\item
+Das Programm ist abgestimmt auf die
+\begin{center}
+$105\times 42$\,[mm]-Etikettens"atze von Herma (copy-print, No.\ 4452)
+\end{center}
+Diese sind so einzulegen, da"s die Beschriftung {\em unterhalb} des
+schmalen Streifens erfolgt.
+
+\item
+Im Style-File sind noch die Daten der folgenden Etikettens"atze
+\begin{itemize}
+\item $105\times42,3$\,[mm] Zweckform (No.\ 3653)
+\item $105\times42,3$\,[mm] Herma (Laserprint, No.\ 4625)
+\item $105\times42,3$\,[mm] Zweckform (No.\ 3653)
+\item $105\times41$\,[mm] Zweckform (No.\ 3477)
+\item $105\times48$\,[mm] Herma (copy-print, No.\ 4457)
+\end{itemize}
+aufgenommen. Dabei wurde jeweils die erste Zeile zum Rand erkl"art oder
+gez"ahlt, um ein einwandfreies Bedrucken sicherzustellen.
+Sie brauchen bei Bedarf nur die Voreinstellung zu l"oschen und die
+gew"unschten Zuweisungen zu aktivieren.
+
+\item Eine individuelle Anpassung (f"ur Ausnahmef"alle) kann mit den
+Befehlen \verb$\Etihoehe$, \verb$\Etirand$ und \verb$\Etizahl$
+vorgenommen werden.
+
+\item Damit nicht {\em jedesmal\/} ein {\em neues} Etikettenblatt
+eingelegt werden mu"s, wurde die
+\verb/\spare/-Option eingef"uhrt. \verb/\spare{/$n$\verb/}/ r"uckt den
+Druckbeginn um $n$ Positionen vor. Da die Ausgabe der Etiketten im
+twocolumn-Stil erfolgt, ist spaltenweise von oben nach unten
+(ggf.\ unter Auslassung der obersten Zeile) zu z"ahlen.
+
+Die Etikettenbl"atter bleiben meist im Dru"cker h"angen, wenn die
+glatte Tr"agerfolie in {\em beiden} Spalten freiliegt.
+\end{itemize}
+
+\vspace{2\parskip}
+Zur Druckereinstellung:
+Beginnt der Strich unter der Retouradresse im Fensterbrief nicht
+2\,cm/5\,cm vom linken/oberen Blattrand entfernt, so sollte die
+Nullpunkteinstellung des Druckers bzw.\ des DVI-Treibers mit Hilfe des
+Files "`{\tt testa4.tex}"' (oder "`{\tt testpage.tex}"') "uberpr"uft
+und justiert werden. Die beiden Files sind in jeder neueren
+\LaTeX-Distribution enthalten.
+
+Wem dieser Weg nicht offensteht, sollte im style-file den Parametern
+\verb/\feinx/ und \verb/\feiny/ geeignete Werte zuweisen:
+\verb/\feinx=/$a$, \verb/\feiny=/$b$ verschiebt den Ausdruck um $a$
+nach rechts und $b$ nach unten.
+
+
+\newpage
+\section{Dokumentation}
+Der \verb/dinbrief.sty/ wurde aus dem originalen \verb/letter.sty/
+bzw.\ \verb/letter.doc/ (released 25 March 1992) entwi"ckelt. Dabei
+wurde dessen Grundstruktur erhalten, und "Anderungen wurden so
+behutsam wie m"oglich durchgef"uhrt.
+
+Die Umarbeitung besteht im wesentlichen aus
+\begin{itemize}
+\item der Einf"uhrung einer \verb/norm/-size-Option und einer
+\verb/german/-Option
+\item der Anpassung an das A4-Papierformat ($297\times 210$\,mm)
+\item der "Anderung der \verb/\opening/-, \verb/\closing/-,
+\verb/\startlabels/-, \verb/\mlabel/- und \\
+\verb/\endletter/-Prozedur
+\item Definition neuer Makros, Streichung unn"utz gewordener
+Definitionen
+\end{itemize}
+\subsection{Zu Optionen}
+\begin{tabbing}
+germanAAAA\=AA\=\kill
+\verb/norm/\>default; sie entspricht der 11pt-Option, aber \+\\
+\>Grundlinienabstand f"ur normalsize- und small-Schrift \\
+\>1/6\,in statt 13,6 bzw.\ 12\,pt \\
+\>\verb/\parskip=1\baselineskip/ statt 0.7\,em \-\\[1\parskip]
+german\>belegt \verb/\date/ mit \verb/\heute/
+\end{tabbing}
+\subsection{Zur Anpassung an das A4-Format}
+Nach DIN 5008 beginnt eine Textzeile bei Grad\footnote{$1\,
+\mbox{Grad}=0.1\,\mbox{in}\approx 2,54$\,mm (Pica-Teilung;
+DIN 5008, 2107)} 10 und endet bei Grad 70;
+die Seitennummer (z.\,B. -- 3 --) steht auf der 5.\ Zeile,
+beginnt bei Grad 40 und
+ist vom Text durch mindestens eine Leerzeile getrennt.
+
+\begin{sloppypar}
+Bei der Festlegung der Layoutparameter wurden ein linker und ein
+oberer Druckerrand von jeweils 1\,in angenommen. F"ur Benutzer, die
+die Druckereinstellung nicht ver"-"andern d"urfen, wollen oder
+k"on"-nen, sieht der \verb/dinbrief.sty/ eine {\em Feinabstimmung}
+durch \verb/\advance/-Befehle auf \verb/\odd/- und
+\verb/\evensidemargin/ sowie \verb/\topmargin/ vor.
+\end{sloppypar}
+
+Der Norm wird gen"ugt durch
+\begin{center}
+\verb/\oddsidemargin 0pt/, \verb/\evensidemargin 0pt/,
+\verb/\textwidth 6in/, \\ \verb/\topmargin -2\GZA/,
+\verb/\headheight 1\GZA/, \verb/\hspace{3cm}/ (in \verb/plain/-Def.)
+\end{center}
+wobei GZA den Grundzeilenabstand 1/6\,in $\approx 4,23$\,mm
+(DIN 2142, 2107) $\approx 12,045$\,pt bezeichnet.
+
+Mit \verb/\headsep 2\GZA/ und \verb/\topskip 1\GZA/ beginnt eine
+normale Seite bei "`Zeile~8"'.
+
+Der Text geht bei einer \verb/\textheight/ von 55\,\verb/\GZA/ bis zur
+Zeile~62.
+
+\subsection{Zur opening-Prozedur}
+Gem"a"s der Norm 5008 steht die Absenderadresse links oben, beginnend
+auf Zeile 5; rechts davon steht das Datum. F"ur die Anschrift (von
+Grad 10 bis 40) sind die Zeilen 13 bis 21 reserviert.
+Behandlungsvermerke sind in der Zeile der letzten Adressenangabe bei
+Grad 50 anzuf"ugen. Der Betreff beginnt auf Zeile 24, das Schreiben
+folgt mit 2 Leerzeilen Abstand.
+
+DIN 676 (Vordruck Form B) schreibt f"ur den Strich, der die
+\verb/\Retouradresse/ von der Empf"angeradresse trennt, vor:
+\begin{itemize}
+\item Abstand vom oberen Blattrand 50\,mm
+\item Beginn 20\,mm vom linken Rand, L"ange 85\,mm
+\end{itemize}
+Die linken Faltmarken haben zum oberen Rand einen Abstand von 105\,mm
+bzw.\ 210\,mm.
+
+Um diese Grundpositionen f"ur beliebige Schriftgr"o"sen und
+Zeilenabst"ande zu gew"ahrleisten, wird der obere Teil des Briefes mit
+Hilfe des \verb/\picture/-Environments gestaltet. Bezugspunkt ist der
+Anfang (der Grundlinie) der ersten Textzeile einer Normalseite -- er
+hat vom linken (oberen) Blattrand den Abstand 25,4\,mm (33,84\,mm).
+Bei Texten und Boxen sind die Koordinaten des Beginns der Grundlinie
+im \verb$\put$-Befehl anzugeben. Die Positionierung von
+Absenderadresse und Datum ist offenbar. F"ur die Empf"angeradresse
+w"are eine Box mit {\em zwei} Referenzlinien, den Grundlinien der
+ersten und der letzten Zeile, n"utzlich: Die obere diente zur
+Anordnung der Adresse, die untere zur Ausrichtung des
+Behandlungsvermerks. Das Programm benutzt f"ur Empf"angeradresse und
+Behandlungsvermerk zwei vtop-Boxen mit derselben {\it Gesamt}\/h"ohe
+und gleichen Lagen des Referenzpunkts und der letzten Zeile (zum
+Verst"andnis beachte \TeX{}book S.~80--82).
+
+Die \verb/\fenst/-Routine setzt den Trennstrich, die
+\verb/\Retouradresse/ sowie die Faltmarken. Die Absenderadresse wurde
+zur horizontalen Zentrierung in eine Makebox gepackt; deren H"ohe
+wurde so gew"ahlt, da"s die vertikale Zentrierung ein ansprechendes
+Ergebnis liefert.
+
+Da die Zeilenzahl des Betreffs nicht, sein Abstand zur Anrede aber
+vorgeschrieben sind, kann hier nicht analog verfahren werden. Vielmehr
+erreicht man den Sprung zur "`Zeile 24"' durch \verb/\par/- und
+\verb/\vspace/-Befehle (\verb/\par/, \verb/\vspace{-1\parskip}/ und
+von der gew"ahlten Gr"o"senoption abh"angige \verb/\vspace/-Befehle
+bewirken eine Zeilenschaltung mit 1\,GZA).
+
+Dem Betreff folgt der vorschriftsgem"a"se Leerraum von 2 GZA.
+Enth"alt der \verb/\opening/-Befehl keine Anrede, wird sofort mit dem
+Text begonnen.
+
+DIN 676 empfiehlt f"ur die Retouradresse eine Mindestschriftgr"o"se
+von 3\,mm. Die 7pt-Schriften von \TeX\ sind etwas kleiner (gem"a"s der
+Me"slehre von DIN 16\,507). Im style-file wird f"ur die
+\verb+\Retschrift+ als Alternative zur Normalschrift (cmr) eine
+Sans-serif-Schrift (cmssq) angeboten.
+
+
+
+
+\subsection{Zur closing-Prozedur}
+Nach DIN 5008 folgt dem Text nach einer Leerzeile linksb"undig die
+Gru"sformel (bis Grad~45), dann gegenbenenfalls die
+maschinenschriftliche Angabe der Unterzeichner, der Anlagen- und
+Verteilervermerk. F"ur die Zwischenr"aume werden Empfehlungen
+gegeben. Bei Platzmangel darf der Anlagen- bzw.\ Verteilervermerk auf
+derselben Zeile wie die Gru"sformel bei Grad~50 beginnen.
+
+Um diese M"oglichkeit dem Anwender zu er"offnen, mu"ste das Dru"cken
+des Anlagen- und des Verteilervermerks in die closing-Prozedur
+aufgenommen werden.
+
+Die Breiten der Gru"sparbox von 3,5\,in bzw.\ der
+Anlagen/Verteilerparbox von 2\,in (rechts"-b"undig) entsprechen gerade
+diesen Vorschriften. Durch Ein"-f"ugen von struts (in \LaTeX:
+\mbox{Ober-}\slash Unterl"ange von 0,7/0,3 baselineskip) wird die
+Einhaltung des Zeilenrhythmus ge"-w"ahrleistet.
+
+
+
+\subsection{Zur startlabels- u.\ mlabel-Prozedur}
+Die Beschriftung des Etiketts sollte nach DIN 5008 der des
+Anschriftenfeldes im Brief gleichen.
+
+Da die Etiketten breiter als ein Adressenfenster sind, darf die
+\verb+\Retouradresse+ bis zu 9,3\,cm lang sein statt 8,5\,cm (DIN
+676). Ansonsten entspricht die Gestaltung des Etiketts v"ollig der des
+Adressenfeldes im Brief bei norm-Option, wenn keine
+\verb/\Retouradresse/ auf dem Etikett untergebracht werden mu"s oder
+die Etiketten mindestens 45\,mm hoch sind. Der Adre"s"-kasten von 40
+bzw.\ 45\,cm H"ohe (s.\ DIN 676) wird dann vertikal zentriert.
+Andernfalls sind die Leerzeilen etwas schmaler.
+
+\verb/\odd/- und
+\verb/\evensidemargin-19.4mm/, \verb/\textwidth19.8cm/ und
+\verb/\columnsep1.2cm/ plazieren die Etiketten in beiden Spalten gleich.
+
+Zu Beginn jedes Briefes wird der Seitenz"ahler auf~1 gestellt. Deshalb
+gibt es zu einer Seitennummer oft mehrere Seiten, von denen evtl.\ nur
+die erste auf dem Dru"cker gesondert ausgegeben werden kann. Damit die
+Etiketten {\em immer} "`angew"ahlt"' werden k"onnen, beginnen diese
+auf S.\ 91 (diese Zahl wird wohl von keinem Brief errreicht).
+
+\begin{sloppypar}
+Um in der Empf"angeradresse \verb/\par/ bzw.\ Leerzeilen ben"utzen
+zu k"onnen, wurde das \verb/\mlabel/-Makro als \verb/\long/-Definition
+deklariert.
+\end{sloppypar}
+
+Es wurde das \verb/\retourlabel/-Macro aufgenommen.
+
+\subsection{Zur endletter-Prozedur}
+Bei Gebrauch einer Fensterbriefh"ulle sind Etiketten
+"uberfl"ussig -- \verb/@fileswfalse/ unterbindet ihre Ausgabe
+auch bei \verb/\makelabels/-Aufruf in der Pr"aambel.
+
+Weil die Empf"angeradresse nicht mehr in \verb/\toname/ und
+\verb/\toaddress/ aufgespalten wird, da"-f"ur aber der Postvermerk
+dazukam, wurde die \verb/\write/-Ausgabe auf den \verb/aux/-File
+ge"-"andert.
+
+Bei \verb/\Retourlabel/ werden ein \verb/\mlabel/-Aufruf mit leerem
+ersten Argument sowie ein \verb/\retourlabel/-Aufruf mit Teil I
+der Absenderangabe auf den \verb/aux/-File geschrieben.
+
+\subsection{Zu neuen Definitionen}
+\begin{tabbing}
+AAAAAAAAAAA\= \kill
+\verb/\Einrueckung/\>
+\begin{minipage}[t]{11.8cm}
+Nach der Norm gehen Einr"uckungen von Grad 20 bis Zeilenende.\\
+Eine St"orung des Zeilenrhythmus beim "Ubergang vom Normaltext zur
+vbox l"a"st sich durch Einf"ugen von struts am Ende des Normaltextes
+und am Anfang der vbox vermeiden. Um dem Anwender die Eingabe von
+\verb/\strut/ zu ersparen und ihm zu erlauben, im Eingabefile den
+einzur"uckenden Text vom Rest durch Leerzeilen abzusetzen, wurde zu
+dem Trick mit der "`strut-Extra-Zeile"' gegriffen.
+\end{minipage}\\[1\parskip]
+\verb/\Datum/\>\verb/\date/ ist normalerweise mit \verb/\today/ belegt,
+bei Option \verb/german/ mit \\\>\verb/\heute/ und bei Aufruf von
+\verb/\Datum/ mit dessen Argument \\[1\parskip]
+\end{tabbing}
+\subsection{Streichungen}
+\begin{tabbing}
+AAAAAAAAAAA\= \kill
+\verb/\cc/\>ersetzt durch \verb/\Verteiler/ \\[1\parskip]
+\verb/\encl/\>ersetzt durch \verb/\Anlagen/\\[1\parskip]
+\verb/\headings/\>bei Briefen ohne Normvordruck ist Text in der
+ Kopfzeile un"ublich\\[1\parskip]
+\verb/\processto/, \>
+bei Verzicht auf \verb/headings/-Option ist die Aufteilung der
+Empf"anger-\\\verb/\@xproc/, \>adresse in
+\verb/\toname/ und \verb/\toaddress/ "uberfl"ussig.\\
+\verb/\@yproc/\>Da im Deutschen die erste Zeile der Anschrift meist
+nur eine Anrede\\\>wie {\em
+Herrn} enth"alt, w"are \verb/\processto/ ohnehin unbrauchbar.\\
+\>Modifizierte Versionen dieser Macros werden jedoch zur Aufteilung\\
+\>der Absenderangabe herangezogen. \\[1\parskip]
+\verb/\ps@firstpage/\>die Gestaltung der ersten Seite wird von
+\verb/\opening/ "ubernommen, \\\>\verb/\location/ und \verb/\telephone/
+ entfallen \\[1\parskip]
+\verb/\texttop/\>l"a"st kurze Briefe nicht ganz oben beginnen, im
+Deutschen nicht er- \\\>w"unscht
+\end{tabbing}
+
+\vspace{2cm}
+Rainer Sengerling\\
+Institut f"ur Theoret.\ und Angew.\ Physik\\Universit"at Stuttgart\\
+Pfaffenwaldring 57\\7000 Stuttgart 80
+
+\end{document}
diff --git a/macros/latex209/contrib/letters/geschbrf/gb_bsp.dvi b/macros/latex209/contrib/letters/geschbrf/gb_bsp.dvi
new file mode 100644
index 0000000000..cc6e31756c
--- /dev/null
+++ b/macros/latex209/contrib/letters/geschbrf/gb_bsp.dvi
Binary files differ
diff --git a/macros/latex209/contrib/letters/geschbrf/gb_bsp.sty b/macros/latex209/contrib/letters/geschbrf/gb_bsp.sty
new file mode 100644
index 0000000000..827de24c08
--- /dev/null
+++ b/macros/latex209/contrib/letters/geschbrf/gb_bsp.sty
@@ -0,0 +1,1280 @@
+% geschbrf.sty -- Version 2.0, 1. M"arz 1995.
+% (c) Holm Sieber, Heinrich-Heine-Str. 7, 09577 Niederwiesa,
+% E-Mail: h.sieber@mathematik.tu-chemnitz.de
+% anhand dinbrief.sty von Rainer Sengerling.
+%
+% Die Einstellungen f"ur den Briefkopf und den Brieffu"s auf dem
+% Briefblatt m"ussen hier im Stylefile vom Nutzer vorgenommen
+% werden! (siehe weiter unten)
+%
+%% dinbrief.sty -- Version vom 9. Oktober 1992
+%% fuer LaTeX Version 2.09
+%% fuer vordrucklose Briefe im A4-Format, entsprechend den deutschen
+%% DIN-Normen 5008 (von 1986), 2107, 2142, 676 und 16507
+%% von Rainer Sengerling
+%% (Inst. f. Theor. u. Angew. Physik, Uni Stuttgart)
+%%
+%% aus letter.doc (Lamport, 25 Mar 92) entwickelt
+%% unter Beruecksichtigung von Beitraegen von B. Raichle
+%%
+%% Kontaktadressen:
+%% Rainer Sengerling: rainer@itap.physik.uni-stuttgart.de
+%% Rainer Sengerling, Josenhansstr. 13, 7000 Stuttgart 31
+%%
+%\typeout{Document Style `dinbrief' von R. Sengerling <9. Oktober 1992>.}
+\typeout{Document Style `Geschaeftsbrief' (geschbrf.sty) <1. Maerz 1995>.}
+
+% CHOOSING THE TYPE SIZE:
+%
+% The type size option is handled by \def'ing \@ptsizem to the
+% following values:
+% 10pt : 0, 11pt : 1, 12pt : 2, norm : 3
+% Zum Laden von externen Zeichensaetzen (z.B. AMS-Fonts) wurde die alte
+% Groessenvariable \@ptsize beibehalten und folgenermassen zugeordnet
+% 10pt : 0, 11pt : 1, 12pt : 2, norm : 1
+% Then loading the different fonts accordingly.
+%
+\def\@ptsize{1} \def\@ptsizem{3} % Default is norm
+\@namedef{ds@10pt}{\def\@ptsize{0}\def\@ptsizem{0}} % 10pt option.
+\@namedef{ds@11pt}{\def\@ptsize{1}\def\@ptsizem{1}} % 11pt option.
+\@namedef{ds@12pt}{\def\@ptsize{2}\def\@ptsizem{2}} % 12pt option.
+\@namedef{ds@norm}{\def\@ptsize{1}\def\@ptsizem{3}} % norm option.
+
+
+% no twoside option
+%
+\@twosidefalse
+
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull
+% % hboxes.
+\def\ds@draft{\overfullrule 5\p@}% Causes overfull hboxes to be marked.
+
+% german option
+%
+% defines \date to use \heute (german form) instead of \today
+% loads `german.sty' at the end of this file.
+%
+\newif\if@german\@germanfalse
+\def\ds@german{\@germantrue}
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the
+% present (main) .STY file is executed.
+
+\@options
+
+% **************************************************************
+% * Feld fuer benutzerspezifische Anpassungen *
+% **************************************************************
+%
+%Schrift f"ur R"uckadresse (DIN 676 u. 16507) -- Alternativen
+%\font\Retschrift=cmssq8 scaled 875
+\font\Retschrift=cmr7
+
+% Festlegung des Briefkopfes
+%
+% Hier wird das Aussehen des Briefkopfes f"ur Briefe auf Vordrucke der
+% Form A (27 mm H"ohe am Blattanfang f"ur den Firmenkopf) und auf Vordrucke
+% der Form B (45 mm H"ohe am Blattanfang) definiert.
+%
+% Der Text wird als Parameter eines \makebox Kommandos zentriert
+% am Blattanfang ausgegeben.
+%
+% Beispiel:
+%
+\def\KopfFormA{\begin{tabular}{c}{\Huge Hagemann \& Co. Export/Import
+GmbH}\\\rule{170mm}{1pt}\end{tabular}}
+
+\def\KopfFormB{\begin{tabular}{c}{\Huge Hagemann \& Co. Export/Import
+GmbH}\\[3.5ex]\makebox[170mm][l]{\small gegr\"undet 1871, Export und
+Import aller G\"uter}\\[-1ex]%
+\rule{170mm}{1pt}\end{tabular}}
+
+%\def\KopfFormA{}
+%\def\KopfFormB{}
+
+% Festlegung des Brieffu"ses
+%
+% Mit ``\def\Fuss{}'' wird das Aussehen des Brieffu"ses festgelegt.
+% Nach DIN 676 stehen hier Angaben zu den Gesch"aftsr"aumen, die Nummern
+% der Hauptanschl"usse aller Kommunikationsm"oglichkeiten und die
+% Kontoverbindungen. Bei Kapitalgesellschaften sind hier auch Angaben
+% zur Rechtsform und zum Sitz der Gesellschaft, das Registergericht
+% des Sitzes der Gesellschaft und die Nummer, unter der die Gesellschaft
+% in das Handelsregister eingetragen ist, bei einem Aufsichtsrat der Name
+% seines Vorsitzenden und die Namen des Vorsitzenden und aller Mitglieder
+% des Vorstandes bzw. die Namen der Gesellschafter anzugeben.
+%
+% Der Text wird als Parameter eines \makebox Kommandos zentriert
+% am Blattende ausgegeben. Daf"ur stehen in der H"ohe ca. 30 mm
+% zur Verf"ugung. Wenn mehr Platz ben"otigt wird, mu"s die Texth"ohe
+% auf dem ersten Blatt reduziert werden.
+%
+% Beispiel:
+%
+\def\Fuss{\begin{tabular}{c}\rule{170mm}{1pt}\\\Retschrift%
+\makebox[170mm]{%
+\parbox[t]{30mm}{Gesch\"aftsr\"aume\\Hans-Meier-Weg 15\\[-1ex]%
+47282 Gro{\ss}dorf}\hfill%
+\parbox[t]{20mm}{Telefon\\(0 72 34) 57 83}\hfill%
+\parbox[t]{20mm}{Telefax\\(0 72 34) 57 29}\hfill%
+\parbox[t]{30mm}{Kontoverbindungen\\Sparkasse Kleinstadt\\[-1ex]%
+BLZ 623 990 23\\[-1ex]Konto Nr.\ 823 392 992}\hfill%
+\parbox[t]{30mm}{Gesch\"aftsf\"uhrer\\Hugo Hagemann\\[-1ex]%
+Robert Hagemann\\[-1ex]Hans Meister}}\\%
+\rule{0mm}{12mm}\end{tabular}}
+
+%\def\Fuss{}
+
+% Parameter fuer Feineinstellung des Druckers
+% fuer Benutzer, die die Druckereinstellung nicht veraendern duerfen,
+% wollen oder koennen
+% Solleinstellung des Druckers s. PAGE LAYOUT (unten)
+%
+\newdimen\feinx \feinx=0pt
+\newdimen\feiny \feiny=0pt
+%
+%\feinx=0.55mm % f"ur HP-Laserjet am ITAP
+%\feiny=-1.3mm % " " " " "
+%
+%\feinx=-1.10mm % f"ur PostScript-Drucker am ITAP
+%\feiny=2.25mm % " " " " "
+
+% Etiketten
+\newdimen\Etiketthoehe % Hoehe eines Etikettes
+\newdimen\Etikettrand % oberer Rand beim Etikettensatz
+\newcount\Etikettzahl % Zahl der Etiketten in einer Kolonne
+
+% Etikettenformate -- Alternativen
+ % 105 x 42,3 [mm] Zweckform (No 3653) u. Herma (Laserprint No 4625)
+ % Rand = obere Etikettenreihe
+ % \Etiketthoehe=42.3mm
+ % \Etikettrand=42.3mm
+ % \Etikettzahl=6
+%****************** Voreinstellung ****************
+ % 105 x 42 [mm] Herma (copy-print No 4452)
+ % Streifen oben, Rand = Streifen
+ \Etiketthoehe=41.15mm
+ \Etikettrand=8.85mm
+ \Etikettzahl=7
+%*****************************************************
+ % 105 x 41 [mm] Zweckform (No 3477)
+ % Pfeile markieren oben, obere Etikettenreihe zum Rand gezaehlt
+ % \Etiketthoehe=41mm
+ % \Etikettrand=46.3mm
+ % \Etikettzahl=6
+ % 105 x 48 [mm] Herma (copy-print No 4457)
+ % Streifen unten, obere Etikettenreihe = Rand
+ % \Etiketthoehe=47.6mm
+ % \Etikettrand=47.9mm
+ % \Etikettzahl=5
+
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% norm-Grundzeilenabstand 1/6in = 4,23mm (DIN 2107,2142)
+\newdimen\GZA
+\GZA=1in \divide\GZA by 6
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size.
+% (Actual value will be
+% \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize.
+% This is done only for \normalsize, not for any other size-changing
+% commands.
+
+\ifcase \@ptsizem\relax % 10pt option
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5\p@ plus3\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 3\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 11pt option
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 12pt option
+
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12\p@ plus3\p@ minus7\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\parsep 4.5\p@ plus2\p@ minus\p@
+ \itemsep \parsep
+ \topsep 9\p@ plus3\p@ minus5\p@}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\or % norm-Option (DIN 2107, 2142)
+
+\def\@normalsize{\@setsize\normalsize{1\GZA}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{1\GZA}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+
+\normalsize % Choose the normalsize font.
+
+% von Groessenoption unabhaengige Schrift fuer Beschriftung
+% der Etiketten
+%
+\def\Adgroesse{\@setsize\Adgroesse{1\GZA}\xipt\@xipt}
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and
+% side of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+\oddsidemargin 0pt % Left margin on odd-numbered pages.
+\evensidemargin 0pt % Left margin on even-numbered pages.
+\marginparwidth 90pt % Width of marginal notes.
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+\marginparpush 5pt % Minimum vertical space between marginal notes.
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -2\GZA % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 1\GZA % Height of box containing running head.
+\headsep 2\GZA % Space between running head and text.
+\topskip 1\GZA % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 25pt % Distance from baseline of box containing
+ % foot to baseline of last line of text.
+
+% DIMENSION OF TEXT:
+
+\textheight 55\GZA % Height of text (including footnotes and
+ % figures, excluding running head and foot).
+\textwidth 6in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% Anpassung an Druckereinstellung
+\advance\topmargin by \feiny
+\advance\oddsidemargin by \feinx
+\advance\evensidemargin by \feinx
+
+
+\raggedbottom % 'ragged bottom' (all pages set to natural
+ % height, with no stretch or shrinkage)
+
+% FOOTNOTES:
+
+\footnotesep 12pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 10pt plus 2pt minus 4pt % Space between last line of
+ % text and top of first footnote.
+
+
+% FLOATS:
+% The following items must be defined, even though there are no
+% floats in this style.
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+
+
+
+% ****************************************
+% * dinbrief COMMANDS *
+% ****************************************
+%
+% The following declarations, shown with examples, give information
+% about the sender:
+%
+% \signature{Larry User} : goes after the closing.
+% \Absender{Dr.\ L. User\\3245 Foo St.\par Gnu York::(415)123-4567} :
+% Absenderangaben im Briefkopf und auf dem Absenderetikett
+% (\Retourlabel); der nach :: stehende Teil (z.B. Telefonnummer)
+% erscheint nur im Brief, :: impliziert keinen Zeilenumbruch
+% \Retouradresse{L. User --3245 Foo St. -- Gnu York} : vereinbart
+% einzeilige \returnaddress, die oberhalb der Empfaengeradresse
+% ausgegeben wird.
+%
+% Die Form der Ausgabe wird durch folgende Definitionen gesteuert.
+%
+% \Fenster : setzt die \returnaddress im Brief, produziert Faltmarken,
+% Briefkopf und Bezugszeile
+% \Vordruck : unterdr"uckt Ausgabe von Briefkopf und Zeile ``Ihr ...'',
+% wenn ``\Fenster'' definiert ist
+% \FormA : erzeugt Ausgabe des Briefes auf Vordruck Form A, wenn
+% ``\Fenster'' definiert ist
+%
+% The \makelabels declaration causes mailing labels to be made. It
+% must go before the \begin{document} command.
+% Bei zusaetzlichem Aufruf von \Retourlabel werden auch Etiketten
+% mit der Absenderadresse erzeugt, die \returnaddress wird dann auf
+% dem Empfaengeretikett nicht ausgegeben.
+% Mit \spare{3} werden die ersten 3 Felder des Etikettensatzes
+% ausgelassen.
+%
+% Es koennen verschiedene Etikettensaetze benutzt werden. Oben im "Feld
+% fuer benutzerspezifische Anpassungen" finden Sie eine Auswahl im
+% Handel erhaeltlicher Etikettensaetze. Treffen Sie eine Standardwahl!
+% In Ausnahmefaellen koennen Sie die Kenndaten eines Etikettensatzes
+% mit Befehlen wie \Etihoehe{41mm}, \Etirand{46.3mm} u. \Etizahl{6}
+% im tex-File angeben.
+%
+%
+% Weitere Deklarationen:
+%
+% \Datum{Stuttgart, den 4.\ 8.\ 1992}
+% zur freien Gestaltung der Datumsangabe
+% \Postvermerk{Einschreiben}
+% fuer postalische Vermerke, die oberhalb
+% der Empfaengeradresse stehen.
+% \Behandlungsvermerk{E\ i\ l\ t}
+% Behandlungsvermerk neben Anschriftfeld
+% \Betreff{Ihr Schreiben v. ..}
+% ein- oder mehrzeilige Betreffangabe
+% \IhrZeichen{Meier}
+% Bezugstext zu `Ihr Zeichen, Ihre Nachricht vom'
+% \UnserZeichen{HS}
+% Bezugstext zu `Unser Zeichen, unsere Nachricht vom'
+% \Telefon{(03893) 5923-472}
+% Bezugstext zu `Telefon, Name'
+%
+% The letter environment: creates a new letter, starting from page 1.
+% (The first page is unnumbered.) Sein Argument ist die Empfaenger-
+% adresse; Leerzeilen mit \par oder Leerzeile im tex-File wie in
+% \begin{letter}{Herrn\\ Dr.\ R. Sengerling\\Josenhansstr.\13 \par
+% 7000 Stuttgart 31}
+%
+% Local declarations, such as \Absender, can follow the \begin{letter}.
+%
+% Text is begun with the \opening command, whose argument generates the
+% salutation, as in
+% \opening{Dear Henry,}
+% Eingerueckte und durch Leerzeilen abgesetzte Textteile sind mit
+% \Einrueckung{text} zu realisieren, wobei text aus mehreren Absaetzen
+% bestehen darf.
+% The body of the letter follows, ended by a \closing command, as in
+% \closing{Yours truly,}
+% The 'signature' is provided automatically; sofern vereinbart
+% \Anlagen, \Verteiler ersetzen \encl bzw. \cc im letter.sty, erzeugen
+% aber selbst keinen Text; Aufruf vor \closing!
+% \Verteiler{Verteiler:\\Tinker\\Evers} -- which produces:
+% Verteiler:
+% Tinker
+% Evers
+%
+% \Anlagen{Anlage:\\Prosspektmaterial} -- which produces:
+% Anlage:
+% Prospektmaterial
+%
+% \anlagenrechts bringt die Anlagen- und Verteilervermerke neben
+% die Grussformel (bei Platzmangel); Aufruf vor \closing!
+%
+% After the \closing you can put arbitrary stuff, which is typeset
+% with \parindent = 0 and no page breaking. Commands designed
+% for use after the closing are \ps.
+%
+% Beschreibung der letter-Makros
+%
+% \opening{Dear Mr. Foo:}-
+% Should produce everything up to and including the 'Dear Mr. Foo:'
+% and a \par command that follows. Es benuetzt folgende Befehle:
+%
+% \fromaddress : Das Argument des aktuellen \Absender-Befehls wird
+% mit Hilfe der modif. processto-Routine gemaess
+% \fromaddressI::\fromaddressII aufgespalten.
+% \fromaddressII erscheint nur im Briefkopf
+% \date : Datum, Form ist abh"angig von ``\Fenster''
+% \fenst : Makro fuer Faltmarken u. durch Strich abgesetzte
+% kleingedruckte \returnaddress
+% \Vermerk : Argument von \Postvermerk
+% \toaddress : Argument des letter-Environments
+% \Adhoehe : zur Ausmessung der Adressbox
+% \Behver : Argument von \Behandlungsvermerk
+% \betreff : Argument von \Betreff
+% \ihr : Argument von \IhrZeichen
+% \unser : Argument von \UnserZeichen
+% \telefon : Argument von \Telefon
+%
+% \closing{TXT} : Generates the closing matter, Anlagen- und
+% Verteilervermerk and the signature.
+% An obvious thing to do is to use a t-\parbox for the closing
+% and the signature. \An steht normalerweise unterhalb, bei
+% \anlagenrechts jedoch rechts davon. Benutzt:
+%
+% \fromsig : argument of current \signature declaration
+% \stopbreaks : a macro that inhibits page breaking.
+% \An : Anlagen- und Verteilertext
+%
+% \ps : The only thing that this needs to do is call \startbreaks,
+% which allows page breaking again.
+%
+%
+% CUSTOMIZING THE LABELS
+%
+% Commands for generating the labels are put on the .AUX file, which is
+% read in and processed by the \end{document} command. You have to
+% define the following two commands:
+%
+% \startlabels : Should reset the page layout parameters if
+% necessary.
+%
+% \mlabel{RETURN ADDRESS}{Postvermerk}{TO ADRESS} : Command to
+% generate a single label.
+% \retourlabel{fromaddressI} : Befehl fuer ein Absender-Etikett
+
+
+
+% ************************************************
+% * spez. Befehle des dinbrief.sty *
+% ************************************************
+%
+\def\Datum#1{\def\date{#1}}
+\def\date{\if@german\iffenster\heutekurz\else\heute\fi%
+\else\iffenster\todayshort\else\today\fi\fi}
+
+\newif\iffenster\fensterfalse
+\def\Fenster{\fenstertrue}
+
+\newif\ifvordruck\vordruckfalse
+\def\Vordruck{\iffenster\vordrucktrue\fi}
+
+\newif\ifforma\formafalse
+\def\FormA{\iffenster\formatrue\fi}
+
+\def\Retouradresse#1{\def\returnaddress{#1}}
+\def\returnaddress{}
+
+\def\Postvermerk#1{\def\Vermerk{#1}}
+\def\Vermerk{}
+
+\newdimen\Adhoehe
+\def\Behandlungsvermerk#1{\def\Behver{#1}}
+\def\Behver{}
+
+\def\Betreff#1{\def\betreff{\ignorespaces #1}}
+\def\betreff{}
+
+\def\IhrZeichen#1{\def\ihr{\ignorespaces #1}}
+\def\ihr{}
+
+\def\UnserZeichen#1{\def\unser{\ignorespaces #1}}
+\def\unser{}
+
+\def\Telefon#1{\def\telefon{\ignorespaces #1}}
+\def\telefon{}
+
+\long\def\Einrueckung#1{\par
+ \vspace*{-\baselineskip}\vspace*{-\parskip}\strut \par
+ \hfill \vbox{\hsize 5in\strut #1}\par}
+% Durch struts wird die Einhaltung des Zeilenrhythmus garantiert. Um
+% dem Anwender das Einsetzen von \strut am Ende des vorausgehenden
+% Textes zu ersparen und ihm offenzuhalten, im Eingabefile den
+% einzurueckenden Text durch Leerzeilen abzusetzen, wird eine
+% strut-Zeile zwischengeschaltet und der ueberschuessige vertikale
+% Leerraum entfernt.
+% Bemerk. zu \strut:
+% \strut ist in LaTeX ein strut mit einer Ober-/Unterlaenge von
+% 0.7/0.3 \baselineskip (s. Def. von \strutbox in LFONTS.tex) --
+% dies ist eine Verallgemeinerung des 8.5pt/3.5pt-strut von plain-TeX
+% (s. TeXbook S. 353)
+
+\newif\ifanlagenr\anlagenrfalse
+\def\anlagenrechts{\anlagenrtrue}
+\def\Anlagen#1{\def\Anlagentext{#1}}
+\def\Anlagentext{}
+\def\Verteiler#1{\def\Verteilertext{#1}}
+\def\Verteilertext{}
+
+\newcount\sparzahl \sparzahl=0
+\def\spare#1{\sparzahl=#1\relax}
+
+\newif\ifretour\retourfalse
+\def\Retourlabel{\retourtrue}
+
+
+
+% **************************************************
+% * letter-Makros, weitgehend neu definiert *
+% **************************************************
+%
+
+% Neudefinition des opening-Befehls
+\def\opening#1{\thispagestyle{empty}%
+ \unitlength 1mm%
+ \begin{picture}(0,0)%
+% % Fenster
+ \iffenster\fenst\else%
+% % Absenderadresse und Datum - nur wenn nicht `\Fenster'
+ \put(0,12.69){%
+ \parbox[t]{\textwidth}{\parbox[t]{3in}{\fromaddressI\fromaddressII}%
+ \hfill \date }}\fi%
+% % Empfaengeradresse u. Behandlungsvermerk
+ \setbox\z@\vtop{\hsize 3in\strut \Vermerk\par \toaddress \strut}%
+ \Adhoehe\ht\z@
+ \advance\Adhoehe \dp\z@
+ \advance\Adhoehe -\dp\strutbox % = Unterlaenge eines LATEX-strut --
+% % s. Def. von \strutbox in LFONTS.tex
+% % beachte: die Dimensionsangabe in \vtop- u. \vbox-Befehlen bezieht
+% % sich nicht auf deren Gesamthoehe (s. TeXbook S. 80--81)
+%
+% % Die Position der Empf"angeradresse richtet sich nach der Verwendung
+% % von Vordrucken der Form A oder Form B.
+ \ifforma%
+ \put(0,-3.15){\box\z@ \hspace{1in}\vtop to\Adhoehe{\strut
+ \par \vfill \Behver \strut}}%
+ \else%
+ \put(0,-21.15){\box\z@ \hspace{1in}\vtop to\Adhoehe{\strut
+ \par \vfill \Behver \strut}}%
+ \fi%
+ \end{picture}%
+% % Anpassung fuer Betreff
+ \strut\par
+ \vspace{-\parskip}%
+% % Bei Form B erscheint alles 4 Zeilen tiefer als bei Form A.
+% % Bei `\Fenster' r"uckt der Betreff 3 Zeilen weiter nach unten.
+ \iffenster\ifforma\vspace{14\GZA}\else\vspace{18\GZA}\fi%
+ \else\vspace{15\GZA}\fi%
+% % Anpassung wegen der verschiedenen Grundzeilenabstaende
+ \ifcase\@ptsizem\vspace{.045pt}\or\vspace{-1.555pt}\or
+ \vspace{-2.955pt}\fi
+ \betreff \strut \par
+ \vspace{-\parskip}%
+ \vspace{2\GZA}%
+% % Anpassung wegen der verschiedenen Grundzeilenabstaende
+ \ifcase\@ptsizem\vspace{.045pt}\or\vspace{-1.555pt}\or
+ \vspace{-2.955pt}\fi
+ \def\Anrede{#1}%
+ \ifx\Anrede\@empty \else #1\par\fi\nobreak}
+
+% Die Positionen der Striche und Texte unterscheidet sich zwischen
+% Form A und Form B des Briefes (DIN 676). Der relative Koordinatenursprung
+% liegt 33.84 mm unterhalb der oberen Blattkante.
+
+\def\rowa{\ifforma-53.16\else-71.16\fi}
+\def\rowb{\ifforma-158.16\else-176.16\fi}
+\def\rowc{\ifforma-96.66\else-114.66\fi}
+\def\rowd{\ifforma1.84\else-16.16\fi}
+\def\rowe{\ifforma-46.66\else-64.66\fi}
+\def\rowf{\ifforma-49.68\else-67.68\fi}
+
+\def\fenst{%
+ \ifvordruck\else%
+% % Briefkopf
+ \ifforma\put(-25.4,6.84){\makebox(210,27){\KopfFormA}}%
+ \else\put(-25.4,-11.84){\makebox(210,45){\KopfFormB}}\fi%
+% % Brieffu"s
+ \put(-25.4,-263.16){\makebox(210,30){\Fuss}}%
+% % Faltmarken
+ \put(-21,\rowa){\line(1,0){3}}%
+ \put(-21,\rowb){\line(1,0){3}}%
+% % Lochmarke
+ \put(-18,\rowc){\line(1,0){3}}%
+% % Strich unter Returnadresse
+ \put(-5.4,\rowd){\line(1,0){85}}%
+% % Setzen der Returnadresse
+ \put(-5.4,\rowd){\makebox(85,4){\Retschrift\returnaddress}}%
+% % Zeile `Ihr Zeichen ... Datum'
+ \put(0,\rowe){\makebox(50,4)[l]{\Retschrift
+ Ihr Zeichen, Ihre Nachricht vom}}%
+ \put(50.8,\rowe){\makebox(50,4)[l]{\Retschrift
+ Unser Zeichen, unsere Nachricht vom}}%
+ \put(101.6,\rowe){\makebox(50,4)[l]{\Retschrift Telefon, Name}}%
+ \put(152.4,\rowe){\makebox(20,4)[l]{\Retschrift Datum}}%
+%
+ \fi%
+% % Bezugszeichenzeile
+ \put(0,\rowf){\makebox(50,4)[lb]{\ihr}}%
+ \put(50.8,\rowf){\makebox(50,4)[lb]{\unser}}%
+ \put(101.6,\rowf){\makebox(50,4)[lb]{\telefon}}%
+ \put(152.4,\rowf){\makebox(20,4)[lb]{\date}}}
+
+% Neudefinition des closing-Befehls
+\long\def\closing#1{\par\nobreak
+ \stopbreaks
+ \noindent
+ \parbox[t]{3.5in}{\raggedright
+ \ignorespaces #1\strut \\[4\GZA]%
+ \ifx\@empty\fromsig \relax \else \fromsig \fi
+ \strut}%
+ \ifanlagenr\hfill \parbox[t]{2in}{\An}%
+ \else \par\An \fi}
+
+\def\An{\ifx\Anlagentext\@empty\else\Anlagentext \strut
+ \par \fi \ifx\Verteilertext\@empty\else\Verteilertext \strut\fi}
+
+\def\ps{\par\startbreaks\strut}
+
+\def\stopletter{}
+
+% Labels
+
+\newcount\labelcount
+
+
+% The following \startlabels command sets things up for producing
+% labels in two columns
+%
+\def\Etihoehe#1{\Etiketthoehe=#1\relax}
+\def\Etirand#1{\Etikettrand=#1\relax}
+\def\Etizahl#1{\Etikettzahl=#1\relax}
+
+
+% Neudefinition des startlabel-Befehls
+\def\startlabels{\labelcount\z@
+\setcounter{page}{91}%
+\pagestyle{empty}%
+\topmargin -24mm%
+\advance\topmargin \Etikettrand
+\topskip \z@skip
+\headheight \z@
+\headsep \z@
+\oddsidemargin -19.4mm%
+\evensidemargin \oddsidemargin
+% Druckeranpassung
+\advance\topmargin \feiny
+\advance\oddsidemargin \feinx
+\advance\evensidemargin \feinx
+\textheight=\Etikettzahl\Etiketthoehe
+\advance\textheight .05cm%
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 19.8cm%
+\columnsep 1.2cm%
+\Adgroesse
+\baselineskip \z@skip \lineskip \z@skip
+\boxmaxdepth \z@
+\parindent \z@
+\twocolumn
+\relax
+\ifnum\sparzahl>\z@
+ \ifnum\sparzahl<\Etikettzahl\else
+ \mbox{}\newpage \advance\sparzahl -\Etikettzahl\fi
+ \vspace*{\sparzahl\Etiketthoehe}\par\fi}
+
+% Neudefinition des mlabel-Befehls
+\long\def\mlabel#1#2#3{\def\test{#1}%
+ \baselineskip\GZA
+ \parskip\GZA
+ \ifx\test\@empty
+ \setbox\z@\vbox to40mm{\hspace*{9.4mm}\vbox{\hsize 3in\ignorespaces
+ #2\rule{\z@}{5mm}\par #3}\vss}%
+ \vbox to\Etiketthoehe{\vss \box\z@ \vss}%
+ \else
+ \ifdim\Etiketthoehe<45mm
+ \parskip2mm%
+ \setbox\z@\vbox{%
+ \underline{\rule[-.9mm]{\z@}{3.2mm}\makebox[93mm]{\Retschrift #1}}\\
+ \hspace*{9.4mm}\vbox{\hsize 3in\ignorespaces
+ #2\rule{\z@}{10\p@}\par #3}}%
+ \vbox to\Etiketthoehe{\box\z@ \vss}%
+ \else
+ \setbox\z@\vbox to45mm{%
+ \underline{\rule[-.9mm]{\z@}{5mm}\makebox[93mm]{\Retschrift #1}}\\
+ \hspace*{9.4mm}\vbox{\hsize 3in\ignorespaces
+ #2\rule{\z@}{5mm}\par #3}\vss}%
+ \vbox to\Etiketthoehe{\vss \box\z@ \vss}%
+ \fi
+ \fi}
+
+\long\def\retourlabel#1{\setbox\z@\vbox{\baselineskip\GZA\parskip\GZA
+ \hspace*{.2cm}%
+ \vbox{\hsize 8.7cm\rule{\z@}{18\p@}\ignorespaces #1\strut}}%
+ \vbox to \Etiketthoehe{\box\z@\vss}}
+
+
+
+
+% ****************************************
+% * THE GENERIC LETTER COMMANDS *
+% ****************************************
+%
+
+
+%% FMi & RmS: added \leavevmode to catch empty argument, 16 Aug 91
+%% RmS ...and added \ignorespaces, 21 Feb 92
+
+% Neudefinition des letter-Befehls
+\long\def\letter#1{\newpage
+ \c@page\@ne
+ \interlinepenalty 200 % smaller than the TeXbook value
+ \def\toaddress{\leavevmode\ignorespaces #1}}
+
+% Neudefinition des endletter-Befehls
+\def\endletter{\stopletter\@@par\pagebreak\@@par
+ %%% Unterdrueckung der Adressetikettenausgabe bei Fenster-Option
+ %%\iffenster\@fileswfalse\fi
+ \if@filesw
+ \begingroup
+ \let\\\relax
+ \def\protect##1{\string##1\space}%
+ \ifretour
+ \immediate\write\@auxout{\string\mlabel
+ {\empty}{\Vermerk}{\toaddress}}%
+ \immediate\write\@auxout{\string\retourlabel
+ {\fromaddressI}}%
+ \else
+ \immediate\write\@auxout{\string\mlabel
+ {\returnaddress}{\Vermerk}{\toaddress}}%
+ \fi
+ \endgroup
+ \fi}
+
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\\@nobreakcr
+ \let\vspace\@nobreakvspace}
+
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+
+\def\startbreaks{\let\\\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200\relax}}
+%% \relax added 20 Sep 88
+
+% Neudefinition des Absender-Befehls
+\long\def\Absender#1{\@processto{#1}}
+\def\fromaddressI{}\def\fromaddressII{}
+% Aufspaltung der Absenderadresse gemaess fromaddressI::fromaddress II
+% mit Hilfe der modifizierten Routinen \@processto, \@xproc und \@yproc
+%
+\long\def\@processto#1{\@xproc #1::@@@\ifx\fromaddressII\@empty
+\else \@yproc #1@@@\fi}
+\long\def\@xproc #1::#2@@@{\def\fromaddressI{#1}\def\fromaddressII{#2}}
+\long\def\@yproc #1::#2@@@{\def\fromaddressII{#2}}
+
+\def\signature#1{\def\fromsig{#1}}
+\def\fromsig{}
+
+% \document redefined so it writes '\startlabels\@startlabels' on the
+% AUX file if it's making one.
+%
+%
+% 91/03/26 FMi: |\process@table| added to support NFSS.
+% This will also work with old lfonts if no other style defines
+% |\process@table|.
+%
+% 92/02/21 RmS: added \@noskipsecfalse setting in conformance with
+% change in latex.tex.
+%
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux
+ {\string\startlabels\string\@startlabels}\fi
+ \csname process@table\endcsname
+ \let\glb@currsize\@empty %% Force \baselineskip initialisation.
+ \def\do##1{\let ##1\@notprerr}%
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}\@noskipsecfalse}
+
+% Redefine \enddocument so it outputs the last page of labels,
+% if necessary.
+%
+\def\enddocument{\@checkend{document}\newpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\makeatletter\input \jobname.aux\clearpage
+\fi\endgroup\deadcycles\z@\@@end}
+
+
+\def\makelabels{\@fileswtrue}
+
+\def\@startlabels{}
+
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+\def\ps@empty{\let\@oddhead\@empty\let\@oddfoot\@empty
+ \let\@evenhead\@oddhead\let\@evenfoot\@oddfoot}
+
+% Neudefinition des plain-Stiles
+\def\ps@plain{\let\@oddfoot\@empty\def\@oddhead{\hspace{3in}\rm
+ -- \thepage\ --\hfil}
+ \let\@evenfoot\@oddfoot\let\@evenhead\@oddhead}
+
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\ifnum\@ptsizem=3 \parskip=\baselineskip\else \parskip .7em\fi
+ % Extra vertical space between paragraphs.
+\parindent 0pt % Width of paragraph indentation.
+%\topsep .4em % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 0pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+%\itemsep .4em % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% See \@listI for values of \topsep and \itemsep
+% (Change made 17 Oct 91)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph
+ % environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph
+ % environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % SET BY THE LETTER COMMANDS
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the
+% list environment's parameters. See the LaTeX manual for an
+% explanation of the meanings of the parameters. Defaults for the list
+% environment are set as follows. First, \rightmargin, \listparindent
+% and \itemindent are set to 0pt. Then, for a Kth level list, the
+% command \@listK is called, where 'K' denotes 'i', 'ii', ... , 'vi'.
+% (I.e., \@listiii is called for a third-level list.) By convention,
+% \@listK should set \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 17 Oct 91)
+\def\@listI{\leftmargin\leftmargini
+ \topsep .4em%
+ \itemsep .4em\relax}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep .2em%
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+
+%% RmS 92/02/26 corrected definitions of \labelenum.. to use \theenum..
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi,
+% \labelitemii, \labelitemiii, and \labelitemiv, which define the
+% labels of the various itemization levels.
+
+\def\labelitemi{$\m@th\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\m@th\ast$}
+\def\labelitemiv{$\m@th\cdot$}
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\\@centercr
+ \list{}{\itemsep\z@ \itemindent -15\p@\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15\p@}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em%
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray
+% % environment
+
+\arraycolsep 5pt % Half the space between columns in an array
+ % environment.
+\tabcolsep 6pt % Half the space between columns in a tabular
+ % environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular
+ % environment.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command.
+ % (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+%
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and
+ % \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes
+% from the text. It should take zero vertical space, so it needs a
+% negative skip to compensate for any positive space taken by the rule.
+% (See PLAIN.TEX.)
+
+\def\footnoterule{\kern-\p@
+ \hrule \@width 1in % HS: ge"andert von .4\columnwidth
+ \kern .6\p@} % The \hrule has default height of .4pt.
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the
+% mark of the footnote and NOTE as the text. It is called when
+% effectively inside a \parbox, with \hsize = \columnwidth.
+%
+
+\long\def\@makefntext#1{\noindent %Macro to make the text of a footnote
+ \hangindent 5\p@\hbox to5\p@{\hss $\m@th^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters set by some commands. Easier to define
+% them than change the commands.
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+% \calnumber#1 gibt von einem Z"ahlerwert die Zehner und Einer aus
+% und erg"anzt eventuell eine f"uhrende Null
+% (Beispiele: 1994 -> '94', 14 -> '14', 3 -> '03')
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \ \number\day, \number\year}
+\def\heute{\number\day.\ \ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi
+ \ \number\year}
+\def\todayshort{\calnumber\year-\calnumber\month-\calnumber\day}
+\def\heutekurz{\calnumber\day.\calnumber\month.\calnumber\year}
+\def\calnumber#1{\count1=#1\divide\count1 by 100\multiply\count1 by 100%
+ \count2=#1\advance\count2 by-\count1 \ifnum10>\count2 0\fi\number\count2}
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\smallskipamount=.5\parskip % These values are used by the
+ % letter macros.
+\medskipamount=\parskip
+\bigskipamount=2\parskip
+
+\ps@plain % 'plain' page style
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column
+\@fileswfalse % Inhibits writing of .AUX file.
+
+\if@german % german option
+ \input german.sty\relax
+\fi
+
+\endinput
diff --git a/macros/latex209/contrib/letters/geschbrf/gb_bsp.tex b/macros/latex209/contrib/letters/geschbrf/gb_bsp.tex
new file mode 100644
index 0000000000..b1b5b80729
--- /dev/null
+++ b/macros/latex209/contrib/letters/geschbrf/gb_bsp.tex
@@ -0,0 +1,626 @@
+% gb_bsp.tex
+%
+% Musterbriefe, Auszuege aus DIN 5008, Adressenbeispiele
+%
+% Das unmittelbar Folgende enthaelt alle Befehle des geschbrf.sty,
+% kann daher als Vorlage dienen.
+%
+\documentstyle[german]{gb_bsp}
+%
+% Etiketten:
+%
+%\Etihoehe{41mm} % Zweckform (No 3477) Etiketten
+%\Etirand{46.3mm}
+%\Etizahl{6} % Anzahl Etiketten in einer Spalte
+\makelabels % erzeugt Etiketten
+\spare{0} % Einr"uckung der Etiketten um n Positionen
+%
+%\pagestyle{empty} % Voreinstellung plain
+\begin{document}
+%
+% Musterbrief 1 -- Anfang
+%
+% In der vorliegenden Version (beachte Auskommentierungen mit %)
+% liefert er das Anwendungsbeispiel 1 von DIN 5008 (Brief auf
+% Vordruck Form B nach DIN 676).
+%
+\begin{letter}{Norddeutsche Farbwerke AG\\z.H.\ Herrn Dr.~Grauert\\
+Gro"se Elbstra"se 64\par 2000 Hamburg 50}
+\Postvermerk{Eilzustellung}
+%\Behandlungsvermerk{E\ i\ l\ t}
+\Datum{02.05.86}
+% Angaben f"ur Fensterumschl"age
+\IhrZeichen{Org.\ II 17.04.86}
+\UnserZeichen{b-a}
+\Telefon{(0621) 6 18-4 34}
+% Absender
+%\Absender{Klaus Waldmann\\B"urgerstra"se 135\\3400 G"ottingen\\::Tel.\
+%(05 51) 9 34 56}
+\Absender{Druckerei und Verlagshaus NORAG\\7500 G"ottingen}
+%
+\Retourlabel % erzeugt Absender-Etikette,
+ % unterdr"uckt \Retouradresse
+\Fenster % erzeugt Brief auf einem ``Briefvordruck''
+ % (mit Briefkopf, Bezugszeile, Falzmarken und einzeiliger
+ % Absenderangabe im Fenster)
+\Vordruck % Ausgabe auf Briefblatt nach DIN 676 (Ausgabe ohne
+ % Briefkopf und Zeile ``Ihr Zeichen ...'')
+%\FormA % Brief auf Vordruck Form A (Briefkopf mit 27 mm H"ohe
+ % statt 45 mm bei Form B)
+%\Retouradresse{K. Waldmann $\cdot$ B"urgerstr.\ 135 $\cdot$
+% 3400 G"ottingen}
+\Betreff{Vordrucke f"ur den allgemeinen Schriftverkehr}
+\signature{Klaus Bergmann}
+\opening{Sehr geehrter Herr Dr.~Grauert,}
+Sie k"onnen das Schreiben Ihrer Gesch"aftsbriefe und das Bearbeiten
+des Schriftguts rationalisieren, indem Sie die Vordrucke und Briefh"ullen
+Ihres Unternehmens u.~a.\ folgenden Normen anpassen:
+
+\begin{tabbing}
+AAAAAAAAAAAAAAAAAAAA\=\kill
+DIN 676 \> Gesch"aftsbrief; Vordrucke A4\\
+DIN 5012 \> Gesch"aftsvordrucke; Kurzmitteilungen\\
+DIN 5013 \> Gesch"aftsvordrucke; Pendelbrief\\
+DIN 678 Teil 1 \> Briefh"ullen; Formate\\
+DIN 680 \> Fensterbriefh"ullen
+\end{tabbing}
+
+Diese Normen enthalten alle Einzelheiten f"ur den sinnvollen und
+zweckm"a"sigen Aufdruck. Wenn dazu bei der Beschriftung genormter
+Vordrucke DIN 5008 "`Regeln f"ur das Maschineschreiben"' beachtet wird,
+entstehen "ubersichtliche und werbewirksame Schriftst"ucke.
+
+Der Leiter unserer Filiale in Hamburg ber"at Sie gern bei der Gestaltung
+Ihrer Vordrucke.
+%\anlagenrechts
+%\Anlagen{2 Anlagen}
+\Verteiler{Verteiler\\Filiale Hamburg}
+
+\closing{Mit bester Empfehlung\\\mbox{}\\ Druckerei und Verlagshaus NORAG}
+%\ps{Also bis bald!}
+\end{letter}
+% Musterbrief 1 -- Ende
+
+% Musterbrief 2 -- Anfang
+%
+% Dieses Beispiel zeigt die Erzeugung der Vordruck Angaben mit dem
+% geschbrf.sty anhand Anwendungsbeispiel 1.
+%
+\begin{letter}{Norddeutsche Farbwerke AG\\z.H.\ Herrn Dr.~Grauert\\
+Gro"se Elbstra"se 64\par 2000 Hamburg 50}
+\Postvermerk{Eilzustellung}
+%\Behandlungsvermerk{E\ i\ l\ t}
+\Datum{02.05.86}
+% Angaben f"ur Fensterumschl"age
+\IhrZeichen{Org.\ II 17.04.86}
+\UnserZeichen{b-a}
+\Telefon{(0621) 6 18-4 34}
+% Absender
+%\Absender{Klaus Waldmann\\B"urgerstra"se 135\\3400 G"ottingen\\::Tel.\
+%(05 51) 9 34 56}
+%
+%\Retourlabel % erzeugt Absender-Etikette,
+ % unterdr"uckt \Retouradresse
+\Fenster % erzeugt Brief auf einem ``Briefvordruck''
+ % (mit Briefkopf, Bezugszeile, Falzmarken und einzeiliger
+ % Absenderangabe im Fenster)
+%\Vordruck % Ausgabe auf Briefblatt nach DIN 676 (Ausgabe ohne
+ % Briefkopf und Zeile ``Ihr Zeichen ...'')
+%\FormA % Brief auf Vordruck Form A (Briefkopf mit 27 mm H"ohe
+ % statt 45 mm bei Form B)
+\Retouradresse{Druckerei und Verlagshaus NORAG $\cdot$ G"ottingen}
+\Betreff{Vordrucke f"ur den allgemeinen Schriftverkehr}
+\signature{Klaus Bergmann}
+\opening{Sehr geehrter Herr Dr.~Grauert,}
+Sie k"onnen das Schreiben Ihrer Gesch"aftsbriefe und das Bearbeiten
+des Schriftguts rationalisieren, indem Sie die Vordrucke und Briefh"ullen
+Ihres Unternehmens u.~a.\ folgenden Normen anpassen:
+
+\begin{tabbing}
+AAAAAAAAAAAAAAAAAAAA\=\kill
+DIN 676 \> Gesch"aftsbrief; Vordrucke A4\\
+DIN 5012 \> Gesch"aftsvordrucke; Kurzmitteilungen\\
+DIN 5013 \> Gesch"aftsvordrucke; Pendelbrief\\
+DIN 678 Teil 1 \> Briefh"ullen; Formate\\
+DIN 680 \> Fensterbriefh"ullen
+\end{tabbing}
+
+Diese Normen enthalten alle Einzelheiten f"ur den sinnvollen und
+zweckm"a"sigen Aufdruck. Wenn dazu bei der Beschriftung genormter
+Vordrucke DIN 5008 "`Regeln f"ur das Maschineschreiben"' beachtet wird,
+entstehen "ubersichtliche und werbewirksame Schriftst"ucke.
+
+Der Leiter unserer Filiale in Hamburg ber"at Sie gern bei der Gestaltung
+Ihrer Vordrucke.
+%\anlagenrechts
+%\Anlagen{2 Anlagen}
+\Verteiler{Verteiler\\Filiale Hamburg}
+
+\closing{Mit bester Empfehlung\\\mbox{}\\ Druckerei und Verlagshaus NORAG}
+%\ps{Also bis bald!}
+\end{letter}
+% Musterbrief 2 -- Ende
+
+% Musterbrief 3 -- Anfang
+%
+% Anwendungsbeispiel 2 von DIN 5008 (Brief auf Vordruck Form A nach DIN 676).
+%
+\begin{letter}{Herrn Wirtschaftspr"ufer\\Dipl.-Kfm.\ Otto Soltau\\
+Postfach 11 31\par 2124 Amelinghausen}
+%\Postvermerk{Eilzustellung}
+%\Behandlungsvermerk{E\ i\ l\ t}
+\Datum{08.02.86}
+% Angaben f"ur Fensterumschl"age
+\IhrZeichen{OS/Pa 04.02.86}
+\UnserZeichen{117 B 2122}
+\Telefon{(0 40) 23 95-46}
+% Absender
+\Absender{Deutsche Bundespost\\Postamt 3\\2000 Hamburg 20}
+%
+\Retourlabel % erzeugt Absender-Etikette,
+ % unterdr"uckt \Retouradresse
+\Fenster % erzeugt Brief auf einem ``Briefvordruck''
+ % (mit Briefkopf, Bezugszeile, Falzmarken und einzeiliger
+ % Absenderangabe im Fenster)
+\Vordruck % Ausgabe auf Briefblatt nach DIN 676 (Ausgabe ohne
+ % Briefkopf und Zeile ``Ihr Zeichen ...'')
+\FormA % Brief auf Vordruck Form A (Briefkopf mit 27 mm H"ohe
+ % statt 45 mm bei Form B)
+%\Retouradresse{K. Waldmann $\cdot$ B"urgerstr.\ 135 $\cdot$
+% 3400 G"ottingen}
+\Betreff{Aufschrift der Postsendungen}
+\signature{}
+\opening{Sehr geehrter Herr Soltau!}
+Hiermit erhalten Sie die gew"unschten Unterlagen, aus denen Sie Einzelheiten
+"uber die postordnungsgem"a"se Beschaffenheit der Aufschrift einer
+Postsendung ersehen k"onnen:
+
+\Einrueckung{Merkblatt "uber Formen und Ma"se, Aufschrift und Au"senseite
+der Briefsendungen,}
+
+\Einrueckung{Faltblatt "`Die Post informiert "uber Aufschrift und
+Absenderangabe der Postsendungen"'.}
+
+Ich hoffe sehr, da"s Sie darin auch Ihre speziellen Fragen beantwortet
+finden. F"ur weitere Ausk"unfte steht Ihnen Ihr Postamt, insbesondere
+die Kundenberatung, gern zur Verf"ugung.
+\anlagenrechts
+\Anlagen{2 Anlagen}
+%\Verteiler{Verteiler\\Filiale Hamburg}
+\closing{Mit freundlichen Gr"u"sen\\\mbox{}\\Im Auftrag}
+%\ps{Also bis bald!}
+\end{letter}
+% Musterbrief 3 -- Ende
+
+% Musterbrief 4 -- Anfang
+%
+% Dieses Beispiel zeigt die Erzeugung der Vordruck Angaben mit dem
+% geschbrf.sty anhand Anwendungsbeispiel 2.
+%
+\begin{letter}{Herrn Wirtschaftspr"ufer\\Dipl.-Kfm.\ Otto Soltau\\
+Postfach 11 31\par 2124 Amelinghausen}
+%\Postvermerk{Eilzustellung}
+%\Behandlungsvermerk{E\ i\ l\ t}
+\Datum{08.02.86}
+% Angaben f"ur Fensterumschl"age
+\IhrZeichen{OS/Pa 04.02.86}
+\UnserZeichen{117 B 2122}
+\Telefon{(0 40) 23 95-46}
+% Absender
+%\Absender{Klaus Waldmann\\B"urgerstra"se 135\\3400 G"ottingen\\::Tel.\
+%(05 51) 9 34 56}
+%
+%\Retourlabel % erzeugt Absender-Etikette,
+ % unterdr"uckt \Retouradresse
+\Fenster % erzeugt Brief auf einem ``Briefvordruck''
+ % (mit Briefkopf, Bezugszeile, Falzmarken und einzeiliger
+ % Absenderangabe im Fenster)
+%\Vordruck % Ausgabe auf Briefblatt nach DIN 676 (Ausgabe ohne
+ % Briefkopf und Zeile ``Ihr Zeichen ...'')
+\FormA % Brief auf Vordruck Form A (Briefkopf mit 27 mm H"ohe
+ % statt 45 mm bei Form B)
+\Retouradresse{Deutsche Bundespost $\cdot$ Postamt 3 $\cdot$
+ 2000 Hamburg 20}
+\Betreff{Aufschrift der Postsendungen}
+\signature{}
+\opening{Sehr geehrter Herr Soltau!}
+Hiermit erhalten Sie die gew"unschten Unterlagen, aus denen Sie Einzelheiten
+"uber die postordnungsgem"a"se Beschaffenheit der Aufschrift einer
+Postsendung ersehen k"onnen:
+
+\Einrueckung{Merkblatt "uber Formen und Ma"se, Aufschrift und Au"senseite
+der Briefsendungen,}
+
+\Einrueckung{Faltblatt "`Die Post informiert "uber Aufschrift und
+Absenderangabe der Postsendungen"'.}
+
+Ich hoffe sehr, da"s Sie darin auch Ihre speziellen Fragen beantwortet
+finden. F"ur weitere Ausk"unfte steht Ihnen Ihr Postamt, insbesondere
+die Kundenberatung, gern zur Verf"ugung.
+\anlagenrechts
+\Anlagen{2 Anlagen}
+%\Verteiler{Verteiler\\Filiale Hamburg}
+\closing{Mit freundlichen Gr"u"sen\\\mbox{}\\Im Auftrag}
+%\ps{Also bis bald!}
+\end{letter}
+% Musterbrief 4 -- Ende
+
+% Musterbrief 5 -- Anwendungsbeispiel 4 von DIN 5008.
+%
+\begin{letter}{Stadt G"ottingen\\Stadtbauamt\\Postfach 28 17\par
+3400 G"ottingen}
+\Postvermerk{Einschreiben}
+\Behandlungsvermerk{E\ i\ l\ t}
+\Datum{G"ottingen, 29.04.86}
+% Angaben f"ur Fensterumschl"age
+%\IhrZeichen{Org.\ II 17.04.86}
+%\UnserZeichen{b-a}
+%\Telefon{(0621) 6 18-4 34}
+% Absender
+\Absender{Klaus Waldmann\\B"urgerstra"se 135\\3400 G"ottingen\\::Tel.\
+(05 51) 9 34 56}
+%
+\Retourlabel % erzeugt Absender-Etikette,
+ % unterdr"uckt \Retouradresse
+%\Fenster % erzeugt Brief auf einem ``Briefvordruck''
+ % (mit Briefkopf, Bezugszeile, Falzmarken und einzeiliger
+ % Absenderangabe im Fenster)
+%\Vordruck % Ausgabe auf Briefblatt nach DIN 676 (Ausgabe ohne
+ % Briefkopf und Zeile ``Ihr Zeichen ...'')
+%\FormA % Brief auf Vordruck Form A (Briefkopf mit 27 mm H"ohe
+ % statt 45 mm bei Form B)
+%\Retouradresse{K. Waldmann $\cdot$ B"urgerstr.\ 135 $\cdot$
+% 3400 G"ottingen}
+\Betreff{Mein Bauvorhaben Waldrebenweg 9}
+%\signature{K. Waldmann}
+\opening{Sehr geehrte Damen und Herren,}
+den Antrag zur Genehmigung f"ur den Neubau eines Einfamilienhauses auf
+meinem Grund\-st"uck G"ottingen, Waldrebenweg 9, hat der Architekt,
+Herr Dipl.-Ing.\ G. Schwarz, mit allen erforderlichen Unterlagen am
+03.01.86 eingereicht. Die Baugenehmigung habe ich bis heute nicht
+erhaltern.
+
+%\Einrueckung{%Der folgende Text wird eingerueckt
+Da ich die Finanzierung des Bauvorhabens ohne die Baugenehmigung nicht
+endg"ultig kl"aren kann und der Beginn der Bauarbeiten nicht verz"ogert
+werden soll, bitte ich dringend, das Genehmigungsverfahren zu
+beschleunigen.
+%} % Ende der Einrueckung
+
+Gleichzeitig bitte ich um Auskunft, ob damit zu rechnen ist, da"s der
+nur geschotterte Waldrebenweg in absehbarer Zeit zu einer "`Stra"se im
+vorl"aufigen Ausbau"' umgestaltet wird.
+
+%\anlagenrechts
+%\Anlagen{2 Anlagen}
+%\Verteiler{Verteiler:\\Landratsamt}
+
+\closing{Mit freundlichen Gr"u"sen}
+%\ps{Also bis bald!}
+\end{letter}
+% Musterbrief 5 -- Ende
+
+% Auszuege aus Normblatt DIN 5008
+%
+\begin{letter}{An alle\\Benutzer des dinbrief.sty}
+\Absender{Rainer Sengerling\\Institut f"ur Theoret.\ und Angew.\
+Physik\\Universit"at Stuttgart\\Pfaffenwaldring 57\\7000 Stuttgart 80}
+\Retouradresse{R. Sengerling $\cdot$ ITAP, Pfaffenwaldring 57 $\cdot$
+7000 Stuttgart 80}
+\Datum{Stuttgart, den 10.\ 8.\ 1992}
+\Betreff{Ausz"uge aus dem Normblatt DIN 5008}
+\opening{}
+{\parskip=0.3em
+Im folgenden wird eine Auswahl der Vorschriften von DIN 5008 gebracht.
+Vorschriften, die bereits durch den dinbrief.sty erf"ullt werden, sind
+nicht ber"ucksichtigt. Kommentare von mir sind {\it kursiv}
+geschrieben. Die Musteranschriften aus 12.5.6 sind als Adre"setiketten
+am Schlu"s des Dokuments realisiert. Das Anwendungsbeispiel 4
+(vordruckloser Brief von Klaus Waldmann) ist der obige Musterbrief.
+
+
+\vspace{1.5cm}
+
+{\large\bf 12\quad Beschriften von Briefbl"attern}\\[1mm]
+Die Verwendung genormter Vordrucke wird vorausgesetzt {\sl (s.
+\ldots)\/} F"ur andere Formate, anderen Aufdruck und f"ur Bl"atter
+ohne Aufdruck sind die folgenden Abschnitte sinngem"a"s anzuwenden
+{\sl (siehe auch \ldots\ und Anwendungsbeispiel 4)}.
+
+\vspace{3mm}
+
+{\bf 12.4\quad Zeilenabstand}\\[1mm]
+Es wird mit einfachem Grundzeilenabstand (Zeilenabstand 1 bzw.\
+einzeilig) geschrieben.
+
+In Schriftst"ucken mit hoch- oder tiefgestellten Schriftzeichen oder in
+Schreiben besonderer Art darf mit gr"o"serem Zeilenabstand geschrieben
+werden \ldots
+
+
+\vspace{3mm}
+
+{\bf 12.5\quad Anschriftfeld}\\[1mm]
+Anschriften werden im Anschriftfeld aller Schriftst"ucke und auf
+Briefh"ullen in gleicher Anordnung geschrieben. Satzzeichen innerhalb
+einer Anschriftzeile werden geschrieben; am Zeilenende fallen sie weg.
+Ortsnamen sind nicht gesperrt zu schreiben und nicht zu unterstreichen.
+
+Im Anschriftfeld sind au"ser der Anschrift des Empf"angers auch die
+postalischen Bestandteile zu vermerken (siehe Abschnitt 12.5.2\,a).
+
+F"ur die Verteilung der Zeilen im Anschriftfeld gelten die Muster im
+Abschnitt 12.5.6 und \ldots
+
+
+\newpage
+
+{\bf 12.5.2\quad Gliederung}\\[1mm]
+Die Angaben im Anschriftfeld werden auf folgende Weise gegliedert
+(Punkt bedeutet Leerzeile):
+\renewcommand{\labelenumi}{\alph{enumi})}
+\begin{enumerate}
+\item Sendungsart, Versendungsform, Vorausverf"ugung\\
+$\bullet$
+\item Empf"angerbezeichnung
+\item Postfach (bei Briefsendungen an Abholer, Postfachinhaber) oder
+Stra"se und Hausnummer (bei zuzustellenden Sendungen)\\
+$\bullet$
+\item Postleitzahl und Bestimmungsort mit der Nummer des Postamtes\\
+$\bullet$
+\item Bestimmungsland
+\end{enumerate}
+
+Bei Auslandsanschriften ist die Leerzeile zwischen c) und d)
+entbehrlich, wenn das Bestimmungsland unter e) angegeben werden mu"s.
+
+{\sl Siehe Abschnitte 12.5.5 und 12.5.6}
+
+\vspace{2mm}
+
+{\bf 12.5.3\quad Unterstreichungen}\\[1mm]
+Die Angaben f"ur Sendungsart, Versendungsform und Vorausverf"ugung
+werden unterstrichen, wenn sie wegen Platzmangels nicht durch eine
+Leerzeile abgesetzt werden k"onnen.
+
+\vspace{2mm}
+
+{\bf 12.5.4\quad Empf"angerbezeichnungen}\\[1mm]
+Empf"angerbezeichnungen sollen sinngem"a"s in Zeilen aufgeteilt werden.
+
+Berufs- oder Amtsbezeichnungen werden in der Regel neben "`Herrn"'
+bzw.\ "`Frau"', l"angere unter den Namen geschrieben.
+
+Akademische Grade (z.\,B.\ Dr., Dipl.-Ing.) stehen vor dem Namen
+
+{\sl Siehe Muster im Abschnitt 12.5.6}
+
+Bei Untermietern mu"s der Name des Wohnungsinhabers unter den Namen des
+Empf"angers geschrieben werden.
+
+{\sl Siehe Muster im Abschnitt 12.5.6}
+
+In Firmenanschriften wird das Wort "`Firma"' weggelassen, wenn aus der
+Emf"angerbezeichnung erkennbar ist, da"s es sich nicht um eine
+nat"urliche Person handelt.
+
+{\sl Siehe Muster im Abschnitt 12.5.6}
+
+\vspace{2mm}
+
+{\bf 12.5.5\quad Auslandsanschriften}\\[1mm]
+Auslandsanschriften m"ussen in lateinischer Schrift und in arabischen
+Ziffern gefa"st sein; Bestimmungsort und Bestimmungsland sind in
+Gro"sbuchstaben zu schreiben. Die Anordnung der Bestandteile der
+Anschrift sowie deren Schreibweise sind -- wenn m"oglich -- der
+Absenderangabe des Partners zu entnehmen. Der Bestimmungsort ist nach
+M"oglichkeit in der Sprache des Bestimmungslandes anzugeben (z.\,B.\
+LIEGE statt L"uttich, FIRENZE statt Florenz, BUCURESTI statt Bukarest,
+THESSALONIKI statt Saloniki); die Angabe des Bestimmungslandes steht
+in der letzten Zeile der Anschrift. Im Verkehr mit bestimmten L"andern
+kann auf die Angabe des Bestimmungslandes verzichtet werden, wenn das
+Unterscheidungskennzeichen f"ur den grenz"uberschreitenden
+Kraftfahrzeugverkehr der Postleitzahl -- durch einen Bindestrich von
+dieser getrennt -- vorangesetzt wird\footnote{Die "Ubersicht der in
+Betracht kommenden L"ander ist beim Postamt erh"altlich.}
+
+{\sl Siehe Anschriften im Abschnitt 12.5.6}
+
+\newpage
+
+{\bf 12.5.6\quad Musteranschriften}\\[1mm]
+{\it s.\ Ende des Dokuments}
+
+\vspace{2mm}
+
+{\bf 12.7\quad Betreff und Teilbetreff}\\[1mm]
+Betreff und Teilbetreff sind stichwortartige Inhaltsangaben. Der
+Betreff bezieht sich auf den ganzen Brief, Teilbetreffe beziehen sich
+auf Briefteile.
+
+\vspace{2mm}
+{\bf 12.7.1\quad Der Wortlaut des Betreffs} \ldots Er wird ohne
+Schlu"spunkt geschrieben, beginnt an der Fluchtlinie und wird bei
+l"angerem Text sinngem"a"s auf mehrere Zeilen verteilt. \ldots
+
+\vspace{2mm}
+
+{\bf 12.7.2\quad Der Teilbetreff} beginnt an der Fluchtlinie, schlie"st
+mit einem Punkt und wird unterstrichen. Der Text wird unmittelbar
+angef"ugt.
+
+\vspace{2mm}
+
+{\bf 12.8\quad Behandlungsvermerke}\\[1mm]
+Behandlungsvermerke (z.\,B.\ Eilt) werden neben das Anschriftfeld,
+beginnend auf Grad 50, {\it (mit Befehl
+\verb$\Behandlungsvermerk{}$)\/} oder im Anschlu"s an die
+Betreffangabe geschrieben; sie k"onnen hervorgehoben werden.
+
+{\sl Siehe Anwendungsbeispiel 4} {\it (Waldmann-Brief)}
+
+\vspace{3mm}
+
+{\bf 12.16\quad Briefh"ullen}\\[1mm]
+\ldots
+Die erste Zeile der Anschrift soll in der Mitte der Briefh"ullenh"ohe
+geschrieben werden.
+
+Die Absenderangabe beginnt in der 5.\ Zeile und wird ohne Leerzeilen
+und ohne Unterstreichung geschrieben.
+
+Zeilenanfang und -ende siehe Tabelle 2 und Anwendungsbeispiel 5}
+
+{\it aufbereitete} Tabelle 2
+
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{|l|c|c|}
+\hline
+&{\small Abstand zum linken} &{\small Zeilenl"ange}\\
+&{\small Rand, in cm}&{\small in cm}\\
+\hline
+{\bf Empf"angeranschrift}&&\\
+Vordrucke A4&2,54&7,62\\
+Briefh"ulle C6&7,62&6,35\\
+Briefh"ullen DL, C6/C5, C5&10,16&8,89\\
+Briefh"ulle C4&12,70&7,62\\
+\hline
+{\bf Absenderangabe}&&\\
+Briefh"ulle C6&1,27&3,81\\
+Briefh"ullen DL, C6/C5, C5&1,27&6,35\\
+Briefh"ulle C4&2,54&7,62\\
+\hline
+\end{tabular}
+\end{letter}
+
+
+
+
+
+% normgerecht geschriebene Adressen
+
+\begin{letter}{Frau\\Erika Werner\\bei M"uller\\Bahnhofstr.\ 4 -- 6
+
+8580 Bayreuth}
+\end{letter}
+
+
+\begin{letter}{Frau\\ Annemarie Hartmann\\Vogelsangstr.\ 17 II\par
+2870 Delmenhorst}
+\Postvermerk{Briefdrucksache}
+\end{letter}
+
+
+\begin{letter}{02694/73\\Herrn Gutsverwalter\\Dipl.-Ldw.\ Otto Winter\\
+Hauptstr.\ 3
+
+8221 Alm Post Neukirchen}
+\Postvermerk{Nicht nachsenden}
+\end{letter}
+
+
+\begin{letter}{Eheleute\\Erika und Hans M"uller\\Hochstr.\ 4
+
+4709 Bergkamen}
+\Postvermerk{Warensendung}
+\end{letter}
+
+
+\begin{letter}{Herrn Staatsanwalt\\Dr.\ Ernst Meyer und Frau\\
+Talblick 2
+
+8200 Rosenheim}
+\Postvermerk{Eilzustellung -- auch nachts}
+\end{letter}
+
+
+\begin{letter}{Herrn Rechtsanwalt\\Dr.\ Otto Freiherr von Bergheim\\
+Leonhard-Eck-Str.\ 7 W 36
+
+8000 M"unchen 19}
+\Postvermerk{Einschreiben -- R"uckschein}
+\end{letter}
+
+
+\begin{letter}{Herrn Direktor\\Dipl.-Kfm.\ Kurt Gr"aser\\Massivbau AG\\
+Postfach 21 03 14
+
+5600 Wuppertal 21}
+\end{letter}
+
+
+\begin{letter}{Frau Luise Weber\\Herrn Max Weber\\Rosenstra"se 35
+
+7030 B"oblingen}
+\end{letter}
+
+
+\begin{letter}{Lack- und Farbwerke\\Dr.\ Hans Sendler \& Co.\\
+Abt.\ FDM 412/10\\Postfach 80 19 36\par
+6230 Frankfurt 80}
+\end{letter}
+
+
+\begin{letter}{Lehmann \& Krause KG\\z.\ H. Herrn E. Winkelmann\\
+Gartenhaus III r.\\Johannisberger Str.\ 5 a\par 1000 Berlin 31}
+\end{letter}
+
+
+\begin{letter}{W"aschegro"shandel\\Robert Bergmann\\Venloer
+Stra"se 80 -- 82\par 5000 K"oln 30}
+\end{letter}
+
+
+\begin{letter}{Firma\\Otto Pfleiderer\\Braunenweiler\\Hauptstr.\ 5\par
+7968 Saulgau 1}
+\Postvermerk{Drucksache}
+\end{letter}
+
+
+\begin{letter}{Amtsgericht Leer\\Grundbuchamt\\Postfach 11 24\par
+2950 Leer}
+\end{letter}
+
+
+\begin{letter}{Regierungspr"asident\\Dezernat 44.II.2\\
+Postfach 59 07\par 4400 M"unster}
+\end{letter}
+
+
+\begin{letter}{Nassauische Heimst"atte GmbH\\
+Abt.\ Landestreuhandstelle\\Postfach 10 29 17\par 6000 Frankfurt 1}
+\end{letter}
+
+
+\begin{letter}{Volksbank Friedberg\\Hauptzweigstelle Bad Nauheim\\
+Aliceplatz 4\par 6350 Bad Nauheim}
+\end{letter}
+
+
+\begin{letter}{VEB Ph"onix-Apparatewerk\\
+Absatzabteilung\\Inselstr.\ 14/20
+
+DDR-7021 Leipzig}
+\Postvermerk{Einschreiben}
+\end{letter}
+
+
+\begin{letter}{Mevrouv J. de Vries\\ Poste restante A. Cuypstraat\\
+Postbus 99730\\1000 NA AMSTERDAM
+
+NIEDERLANDE}
+\end{letter}
+
+
+\begin{letter}{Monsieur P. Dubois\\Expert en assurances\\
+Escalier 3, b\^atiment C\\4, rue Jean Jaur\`es
+
+F-58500 CLAMECY}
+\end{letter}
+
+
+\begin{letter}{Mr.\ W. Smith\\514 Kingsbridge Road\\PURLEY, SURREY\\DE
+1\\GROSSBRITANNIEN CRZ 4TH}
+\end{letter}
+
+\end{document}
diff --git a/macros/latex209/contrib/letters/geschbrf/gb_doc.tex b/macros/latex209/contrib/letters/geschbrf/gb_doc.tex
new file mode 100644
index 0000000000..502a5503d4
--- /dev/null
+++ b/macros/latex209/contrib/letters/geschbrf/gb_doc.tex
@@ -0,0 +1,585 @@
+% gb_doc.tex -- Dokumentation des Gesch"aftsbriefe Stylefiles
+%
+% Basis des Dokumentes ist die Datei ,,dinbrief_info.tex'' von Rainer
+% Sengerling zur Dokumentation des DIN Brief Styles (siehe unten).
+%
+% Holm Sieber, 1. M"arz 1995
+%
+%% dinbrief_info.tex (Kurzname: db_info.tex)
+%%
+%% Beschreibung des dinbrief.sty (9. Oktober 1992)
+%%
+\documentstyle[11pt,german]{article}
+% Anpassung an A4-Format
+% ******* aus gart11.sty *******************************
+\oddsidemargin 14pt \evensidemargin 14pt
+\marginparwidth 0pt \marginparsep 0pt
+\topmargin -28pt \headheight 25pt
+\textheight 640pt \textwidth 425pt
+\parskip 9pt plus 1pt minus 1pt \parindent 0pt
+\topsep 0pt \partopsep 0pt \itemsep 0pt
+%***********************************************
+
+\begin{document}
+{\huge\bf Briefe mit \LaTeX\ -- der geschbrf.sty}
+\section{Kurzinformation}
+Der Style \verb/geschbrf.sty/ ist eine direkte Erweiterung des
+Styles \verb/dinbrief.sty/ von Rainer Sengerling. Die wesentliche Arbeit ist
+bereits im DIN Brief Style geleistet worden. Der Style ist f"ur
+die Benutzung mit \LaTeX\ Version 2.09 vorgesehen. Mit ihm k"onnen
+Briefe im A4-Format in beliebiger Sprache gesetzt werden. Dabei gelten
+die im \LaTeX-Manual von Lamport beschriebenen Regeln und Befehle, sofern
+sie durch das Folgende nicht ber"uhrt werden.
+
+Speziell k"onnen mit diesem Style
+\begin{itemize}
+\item
+ Briefe nach der DIN 5008 auf vordruckloses A4 Papier geschrieben
+ werden,
+\item
+ Briefe auf Formbl"atter f"ur Gesch"aftsbriefe nach der DIN 676
+ der Form A oder Form B geschrieben werden,
+\item
+ oder es k"onnen Briefe auf einfaches A4 Papier einschlie"slich
+ der Vordruckangaben erzeugt werden.
+\end{itemize}
+Damit k"onnen also professionelle Briefe nach den DIN auf "`vorgedrucktem
+Briefpapier"' erzeugt werden, ohne da"s entsprechende Vordrucke von einer
+Druckerei angefertigt werden m"ussen. Beispiele f"ur alle drei Varianten
+finden sich in der Datei {\tt GB\_BSP.DVI}.
+
+\vspace{2\baselineskip}
+
+\begin{tabbing}
+AAAAAAAAAAAAAAAAA\=\kill
+Aufruf\>\verb/\documentstyle[...]{geschbrf}/\\[2\parskip]
+{\bf documentstyle options}\\[1\parskip]
+\verb/10pt/, \verb/11pt/, \verb/12pt/, \verb/norm/
+\>\verb/norm/ entspricht einer Schreibmaschinenschrift mit Zeilen-\\
+\>schaltung 1; voreingestellt\\[1\parskip]
+\verb/german/ \>f"ur deutsches Datum (voreingestellt ist engl.\
+Datum);\\ \>\verb/german.sty/ wird geladen \\[2\parskip]
+{\bf Befehle}\\[1\parskip]
+\verb/\makelabels/\>macht Empf"angeradre"s-Etiketten (in Pr"aambel);\\
+\>eine \verb/\Retouradresse/ wird "uber die Empf"angeradresse \\
+\>gesetzt; Ausgabe von Absenderadre"s-Etiketten bei \\
+\>zus"atzlichem Aufruf von \verb/\Retourlabel/\\[1\parskip]
+\verb/\pagestyle{ }/ \>\verb/plain/ und \verb/empty/, aber nicht
+\verb/headings/ (in Pr"aambel) \\[1\parskip]
+\verb/\spare{/$n$\verb/}/ \>f"ur Mehrfachgebrauch eines
+Etikettenblattes -- r"uckt um\\\>$n$ Positionen
+vorw"arts (in Pr"aambel) \\[1\parskip]
+\verb/\begin{letter}{ }/\>enth"alt die Anschrift des
+Empf"angers; \\
+\>Leerzeilen sind durch \verb/\par/ oder eine Leerzeile in der
+\\\>Textdatei zu erzeugen\\[1\parskip]
+\verb/\Retouradresse{ }/\>{\em einzeilige} Absenderadresse f"ur
+Adre"setikett und Fensterbrief\\[1\parskip]
+\verb/\Retourlabel/\>erzeugt Absenderadre"s-Etiketten
+(bei vorangehendem\\
+\>\verb/\makelabels/-Aufruf)\\[1\parskip]
+\verb/\Fenster/\>bei Verwendung von Fensterbriefh"ullen; \\
+\>setzt die \verb/\Retouradresse/ "uber die Empf"angeradresse und
+\\\>produziert Faltmarken, Briefkopf, Bezugszeile und Brieffu"s; \\
+\>auf weisem Papier wird ein Brief mit Vordruckangaben\\\>nach DIN 676
+erzeugt\\[1\parskip]
+\verb/\Vordruck/\>nur bei vorangehendem \verb/\Fenster/-Aufruf;\\
+\>Ausgabe des Briefes auf einen Vordruck nach DIN 676;\\\>wenn nicht
+\verb/\FormA/ gesetzt ist, wird ein Vordruck\\\>Form B (45 mm Kopf)
+erwartet;\\\>die Ausgabe der Absenderadresse, der Faltmarken,
+von\\\>Briefkopf, Brieffu"s und Bezugszeile wird unterdr"uckt\\[1\parskip]
+\verb/\FormA/\>nur bei vorangehendem \verb/\Fenster/-Aufruf;\\
+\>Ausgabe auf Vordruck Form A (27mm H"ohe des Feldes\\\>f"ur den Briefkopf)
+nach DIN 676\\[1\parskip]
+\verb/\Postvermerk{ }/\>f"ur postalische Vermerke wie Einschreiben,
+Drucksache, \ldots \\[2\parskip]
+\verb/\Behandlungsvermerk{}/\>f"ur Behandlungsvermerke,
+z.\,B. E\ i\ l\ t \\[1\parskip]
+\verb/\Absender{ }/,\>Adresse des Absenders -- tritt an die Stelle von
+\verb/\address/ \\
+\verb/\Absender{I::II}/\>im \verb/letter.sty/.\\
+\>Der durch \verb/::/ abgetrennte Teil II erscheint zwar im Brief-\\
+\>kopf, aber nicht im Absenderetikett (s.\ \verb/\Retourlabel/).\\
+\>\verb/::/ ersetzt nicht den Zeilenumbruch \\[1\parskip]
+\verb/\Datum{ }/\>zur freien Gestaltung der Datumsangabe\\[1\parskip]
+\verb/\today/\>englisches Datum\\[1\parskip]
+\verb/\todayshort/\>englisches Datum in der Form YY-MM-DD\\[1\parskip]
+\verb/\heute/\>deutsches Datum\\[1\parskip]
+\verb/\heutekurz/\>deutsches Datum in der Form TT.MM.JJ\\[1\parskip]
+\verb/\Betreff{ }/\>f"ur ein- oder mehrzeilige Betreffangabe\\[1\parskip]
+\verb/\IhrZeichen{ }/\>Text zu "`Ihr Zeichen, Ihre Nachricht
+vom"'\\[1\parskip]
+\verb/\UnserZeichen{ }/\>Text zu "`Unser Zeichen, unsere Nachricht
+vom"'\\[1\parskip]
+\verb/\Telefon{ }/\>Text zu "`Telefon, Name"'
+\end{tabbing}
+
+Die Befehle von \verb/\Retouradresse/ bis \verb/\Telefon/ haben {\em
+globale} Bedeutung, wenn sie in der Pr"aambel erscheinen. Stehen sie
+in einer \verb/letter/-Umgebung (aber vor \verb/\opening/!), gelten
+sie nur f"ur diesen Brief -- entsprechende globale Vereinbarungen sind
+dann aufgehoben.
+
+
+\begin{tabbing}
+AAAAAAAAAAAAAAAAA\=\kill
+\verb/\opening{/{\it Anrede}\verb/}/\>dient nicht nur zur Eingabe der
+Anrede, sondern veranla"st \\\>das System, den oberen Teil des
+Briefes auszugeben;\\
+\>Briefe ohne Anrede sind mit \verb/\opening{}/ zu realisieren
+\\[1\parskip]
+\verb/\Einrueckung{ }/\>f"ur einger"uckten Text; dieser darf Abs"atze
+enthalten\\[1\parskip]
+\verb/\anlagenrechts/\>Anlagen- und Verteilervermerke beginnen {\em
+rechts} neben der \\\>Gru"sformel;
+n"utzlich bei Platzmangel, Aufruf vor \verb/\closing/\\[1\parskip]
+\verb/\Anlagen{ }/\>ersetzt \verb/\encl/ im \verb/letter.sty/; erzeugt
+selbst keinen Text, \\\>Aufruf vor \verb/\closing/\\[1\parskip]
+\verb/\Verteiler{ }/\>ersetzt \verb/\cc/; sonst wie \verb/\Anlagen/
+\end{tabbing}
+
+Folgende Optionen und Befehle des \verb/letter.sty/ sind bei Verwendung
+des \verb/dinbrief.sty/ unzul"assig
+\begin{center}
+\verb/headings/, \quad \verb/\cc/, \quad \verb/\encl/,
+\quad \verb/\name/, \quad \verb/\address/, \quad
+\verb/\location/, \quad\verb/\telephone/
+\end{center}
+
+Zur individuellen Anpassung an Etikettens"atze (2-spaltig):
+\begin{tabbing}
+AAAAAAAAAAAAAAAAA\=\kill
+\verb+\Etihoehe{ }+\>H"ohe eines Etiketts, mind.\ 40\,mm \\[1\parskip]
+\verb+\Etirand{ }+\>Breite des oberen Randes des
+ Etikettenblattes\\[1\parskip]
+\verb+\Etizahl{ }+\>Zahl der Etiketten in einer Spalte des
+ Etikettenblattes\\[1\parskip]
+\end{tabbing}
+
+Zum korrekten Abfassen des Briefes, insbesondere der Adressenangaben,
+wird das Studium der Norm DIN 5008 (s.\ \verb/dinbrief_beispiel.tex/)
+empfohlen. Die Ma"se von Vordrucken f"ur Gesch"aftsbriefe ist der
+DIN 676 zu entnehmen.
+
+
+
+\newpage
+\section{Bemerkungen zum dinbrief.sty}
+
+Der von Lamport entwi"ckelte \verb/letter.sty/ orientiert sich an den
+amerikanischen Gepflogenheiten (Papierformat, Anordnung der Textteile)
+und gebraucht die englische Sprache (Monatsnamen, encl:, cc:). Der
+\verb/dinbrief.sty/ wurde aus jenem unter Beachtung der Normen DIN
+5008, 676, 2107, 2142 und 16\,507 entwi"ckelt.
+
+Um normgerechte {\em
+Gesch"aftsbriefe}\footnote{Zeilenabstand 1 ($\approx 4,23$\,mm),
+Leerr"aume sind {\em ganzzahlige} Vielfache davon}
+schreiben zu k"onnen, wurde neben den von
+\LaTeX\ angebotenen size-Optionen noch eine sog.\
+\verb/norm/-Option eingef"uhrt. Der Benutzer hat die Wahl unter
+\begin{center}
+\begin{tabular}{l|l|c@{ bzw.\ }c|c}
+Option&\multicolumn{1}{c|}{Vergleich mit Pica-Maschinenschrift}
+&\multicolumn{2}{c|}{Zeilenabstand}
+&parskip\\ \hline
+10pt&Buchstaben viel zu klein&12pt&$\approx 1$&0.7em\\
+11pt&Kleinbuchstaben zu klein&13,6pt&$\approx 1,13$&0.7em\\
+12pt&Gro"sbuchstaben zu gro"s&15pt&$\approx 1,25$&0.7em\\
+norm&Buchstaben wie 11pt-Option&1/6in&1&1 baselineskip
+\end{tabular}
+\end{center}
+Auch wenn nicht die \verb/norm/-Option gew"ahlt wird, gehorchen die
+Briefe den Anordnungsregeln von DIN 5008 f"ur die Gestaltung von
+Gesch"aftsbriefen. So beginnt die Absenderanschrift auf "`Zeile 5"',
+der Betreff auf "`Zeile 24"', und der Postvermerk in der Anschrift
+steht auf "`Zeile 13"', was die Verwendung von Fensterbriefh"ullen
+gestattet. Im allgemeinen stehen f"ur die Empf"angeradresse 7 Zeilen
+zur Verf"ugung (wie von der Norm vorgesehen) -- bei der Gr"o"senoption
+\verb/12pt/ darf die Adresse h"ochstens 6zeilig sein, was jedoch meist
+ausreicht (s.\ Musteranschriften im Normblatt).
+
+Um die Datumsangabe frei gestalten zu k"onnen, wurde der Befehl
+\verb/\Datum/ eingerichtet. Er erlaubt Vor- und R"uckdatieren,
+Monatsangaben in beliebiger Sprache oder in Ziffern, Aufnahme des
+Ortes in das Datum (dabei kann auf das automatische Datum
+zur"uckgegriffen werden -- z.\,B.\ Stuttgart, den \verb/\heute/).
+
+
+Zum vordrucklosen Brief geh"oren eigentlich weder eine kleingedruckte
+Absenderadresse noch Faltmarken. Die \verb/\Fenster/-Option f"uhrt
+Elemente des Vordrucks f"ur Gesch"aftsbriefe (DIN 676, Form B) in die
+Gestaltung ein.
+
+\verb/\Anlagen/ und \verb/\Verteiler/ erzeugen im Gegensatz zu ihren
+Entsprechungen \verb/\encl/ und \verb/\cc/ im \verb/letter.sty/
+{\em selbst\/} keinen Text.
+Daf"ur ist man unabh"angig von der Sprache und kann auf einfache Weise
+die ganze F"ulle der M"oglichkeiten
+\begin{center}
+1 Anlage \quad 5 Anlagen \quad
+\newlength{\Breite}
+\settowidth{\Breite}{Reifezeugnis}
+\parbox[t]{\Breite}{Anlage:\\Reifezeugnis} \quad
+\settowidth{\Breite}{Diplomzeugnis}
+\parbox[t]{\Breite}{Anlage:\\Reifezeugnis\\Diplomzeugnis} \quad
+usw.
+\end{center}
+aussch"opfen. Da das Ausdru"cken des Anlagen- und des Verteilervermerks
+in die closing-Prozedur aufgenommen wurde, sind \verb/\Anlagen/,
+\verb/\Verteiler/ wie \verb/\anlagenrechts/ {\em vor}
+\verb/\closing/ zu gebrauchen.
+
+
+\verb/\makelabels/ in der Pr"aambel f"uhrt zur Ausgabe von Etiketten
+mit der Empf"angeradresse. Ist eine \verb/\Retouradresse/
+spezifiziert, wird sie wie bei einem \verb/\Fenster/-Brief "uber die
+Empf"angeranschrift gesetzt. Dies entspricht jedoch nicht der
+Normvorschrift und ist oft auch nicht m"oglich, weil die Adresse des
+Absenders zu lang ist. Deshalb wurde der Befehl \verb/\Retourlabel/
+eingerichtet -- er veranla"st das System, auch Etiketten mit der
+Absenderadresse zu dru"cken. Diese wird dem Argument des
+\verb/\Absender/-Befehls entnommen. H"aufig stehen im Briefkopf nach
+unserer Postanschrift auch Angaben (z.\,B.\ Telefonnummer), die nicht
+auf das Etikett geh"oren. Solche Angaben sind im
+\verb/\Absender/-Argument von der Postanschrift durch \verb/::/
+abzutrennen. Um dem Anwender gestalterische Freiheit zu lassen
+(\verb/\\/, \verb/\\[]/, \verb/\par/), wurde mit dem Separator kein
+Zeilenumbruch verbunden.\\
+Bsp.: \verb/\Absender{R. Sengerling ...Stuttgart 31\\[2mm]::Tel.
+83\,45\,10}/
+
+Bei \verb/\Retourlabel/ unterbleibt die Ausgabe der
+\verb/\Retouradresse/ auf dem Empf"anger-Etikett.
+
+
+Noch einige Bemerkungen zur {\em Ausgabe} von Adre"setiketten
+\begin{itemize}
+\item
+Das Programm ist abgestimmt auf die
+\begin{center}
+$105\times 42$\,[mm]-Etikettens"atze von Herma (copy-print, No.\ 4452)
+\end{center}
+Diese sind so einzulegen, da"s die Beschriftung {\em unterhalb} des
+schmalen Streifens erfolgt.
+
+\item
+Im Style-File sind noch die Daten der folgenden Etikettens"atze
+\begin{itemize}
+\item $105\times42,3$\,[mm] Zweckform (No.\ 3653)
+\item $105\times42,3$\,[mm] Herma (Laserprint, No.\ 4625)
+\item $105\times42,3$\,[mm] Zweckform (No.\ 3653)
+\item $105\times41$\,[mm] Zweckform (No.\ 3477)
+\item $105\times48$\,[mm] Herma (copy-print, No.\ 4457)
+\end{itemize}
+aufgenommen. Dabei wurde jeweils die erste Zeile zum Rand erkl"art oder
+gez"ahlt, um ein einwandfreies Bedrucken sicherzustellen.
+Sie brauchen bei Bedarf nur die Voreinstellung zu l"oschen und die
+gew"unschten Zuweisungen zu aktivieren.
+
+\item Eine individuelle Anpassung (f"ur Ausnahmef"alle) kann mit den
+Befehlen \verb$\Etihoehe$, \verb$\Etirand$ und \verb$\Etizahl$
+vorgenommen werden.
+
+\item Damit nicht {\em jedesmal\/} ein {\em neues} Etikettenblatt
+eingelegt werden mu"s, wurde die
+\verb/\spare/-Option eingef"uhrt. \verb/\spare{/$n$\verb/}/ r"uckt den
+Druckbeginn um $n$ Positionen vor. Da die Ausgabe der Etiketten im
+twocolumn-Stil erfolgt, ist spaltenweise von oben nach unten
+(ggf.\ unter Auslassung der obersten Zeile) zu z"ahlen.
+
+Die Etikettenbl"atter bleiben meist im Dru"cker h"angen, wenn die
+glatte Tr"agerfolie in {\em beiden} Spalten freiliegt.
+\end{itemize}
+
+\vspace{2\parskip}
+Zur Druckereinstellung:
+Beginnt der Strich unter der Retouradresse im Fensterbrief nicht
+2\,cm/5\,cm vom linken/oberen Blattrand entfernt, so sollte die
+Nullpunkteinstellung des Druckers bzw.\ des DVI-Treibers mit Hilfe des
+Files "`{\tt testa4.tex}"' (oder "`{\tt testpage.tex}"') "uberpr"uft
+und justiert werden. Die beiden Files sind in jeder neueren
+\LaTeX-Distribution enthalten.
+
+Wem dieser Weg nicht offensteht, sollte im style-file den Parametern
+\verb/\feinx/ und \verb/\feiny/ geeignete Werte zuweisen:
+\verb/\feinx=/$a$, \verb/\feiny=/$b$ verschiebt den Ausdruck um $a$
+nach rechts und $b$ nach unten.
+
+
+\newpage
+\section{Bemerkungen zum geschbrf.sty}
+Der \verb/geschbrf.sty/ ist eine direkte Weiterentwicklung des
+\verb/dinbrief.sty/ von Rainer Sengerling. Er erm"oglicht die
+Erstellung von Briefen auf Briefvordrucke nach der DIN 676.
+Der Style \verb/dinbrief.sty/ erlaubt nur die Erzeugung von
+vordrucklosen Briefen.
+
+Eine Besonderheit ist die Erstellung von Briefen einschlie"slich
+der Elemente eines Briefvordrucks. Dazu mu"s im Stylefile
+\verb/geschbrf.sty/ ein Briefkopf und ein Brieffu"s definiert werden.
+Dann ist es m"oglich, mit \LaTeX\ einen Gesch"aftsbrief zu schreiben,
+der auf einem Blatt zusammen mit den Elementen eines Briefvordrucks
+ausgegeben wird. Beispiele daf"ur sind in der Datei \verb/gb_bsp.dvi/
+zu sehen.
+
+Die Steuerung des Briefformats erfolgt mit den Befehlen \sloppy
+\verb/\Fenster/, \verb/\Vordruck/ und \verb/\FormA/.
+Der Befehl \verb/\Fenster/ bewirkt die Erzeugung
+eines Briefes auf einen Vordruck nach DIN 676. Ohne dieses Kommando
+wird {\em immer\/} ein vordruckloser Brief erzeugt. Die Angabe von
+\verb/\Fenster/ ist damit auch die Voraussetzung f"ur die Wirkung
+der Befehle \verb/\Vordruck/ und \verb/\FormA/.
+
+Die DIN 676 unterscheidet Vordrucke der Form A und B. Form A definiert
+ein 27 mm hohes Feld f"ur den Briefkopf am Blattbeginn, Form B dagegen
+ein 45 mm hohes Feld. Die Lage der Anschrift, der Bezugszeile und der
+Faltmarken verschiebt sich entsprechend. Da im allgemeinen h"aufiger
+f"ur Briefvordrucke die Form B Verwendung findet, wird diese ohne Angabe
+des Befehls \verb/\FormA/ benutzt. Ist der Befehl \verb/\FormA/ angegeben
+wird der Brief f"ur einen Vordruck der Form A erstellt.
+
+Ist der Befehl \verb/\Vordruck/ angegeben, wird der Brief von \LaTeX\
+so gesetzt, da"s er auf einen Briefvordruck nach der DIN
+gedruckt werden kann. Ist der Befehl nicht angegeben, so werden die
+Elemente eines Vordrucks von \verb/geschbrf.sty/ erzeugt. Speziell
+erfolgt die Ausgabe der einzeiligen Absenderadresse, der Falt- und
+Lochmarken, der Beschriftung der Bezugszeile und von Briefkopf und
+Brieffu"s. Dabei ist der Text f"ur Briefkopf und Brieffu"s vom Anwender
+in der Datei \verb/geschbrf.sty/ vorzunehmen. Mit den Befehlen
+\verb/\def\KopfFormA{...}/ und \verb/\def\KopfFormB{...}/ wird der
+Briefkopf f"ur Briefbl"atter der Form A und B definiert, und
+der Befehl \verb/\def\Fuss{...}/ definiert den Brieffu"s. Beispiele
+f"ur diese Definitionen sind im Stylefile angegeben.
+
+
+\newpage
+\section{Dokumentation}
+Der \verb/geschbrf.sty/ ist durch wenige "Anderungen aus dem
+\verb/dinbrief.sty/ entstanden, der wiederum vom originalen \verb/letter.sty/
+bzw.\ \verb/letter.doc/ (released 25 March 1992) entwi"ckelt wurde. Dabei
+wurde dessen Grundstruktur erhalten, und "Anderungen wurden so
+behutsam wie m"oglich durchgef"uhrt.
+
+Die Umarbeitung besteht im wesentlichen aus
+\begin{itemize}
+\item der Einf"uhrung einer \verb/norm/-size-Option und einer
+\verb/german/-Option
+\item der Anpassung an das A4-Papierformat ($297\times 210$\,mm)
+\item der "Anderung der \verb/\opening/-, \verb/\closing/-,
+\verb/\startlabels/-, \verb/\mlabel/- und \\
+\verb/\endletter/-Prozedur
+\item Definition neuer Makros, Streichung unn"utz gewordener
+Definitionen
+\end{itemize}
+\subsection{Zu Optionen}
+\begin{tabbing}
+germanAAAA\=AA\=\kill
+\verb/norm/\>default; sie entspricht der 11pt-Option, aber \+\\
+\>Grundlinienabstand f"ur normalsize- und small-Schrift \\
+\>1/6\,in statt 13,6 bzw.\ 12\,pt \\
+\>\verb/\parskip=1\baselineskip/ statt 0.7\,em \-\\[1\parskip]
+german\>belegt \verb/\date/ mit \verb/\heute/
+\end{tabbing}
+\subsection{Zur Anpassung an das A4-Format}
+Nach DIN 5008 beginnt eine Textzeile bei Grad\footnote{$1\,
+\mbox{Grad}=0.1\,\mbox{in}\approx 2,54$\,mm (Pica-Teilung;
+DIN 5008, 2107)} 10 und endet bei Grad 70;
+die Seitennummer (z.\,B. -- 3 --) steht auf der 5.\ Zeile,
+beginnt bei Grad 40 und
+ist vom Text durch mindestens eine Leerzeile getrennt.
+
+\begin{sloppypar}
+Bei der Festlegung der Layoutparameter wurden ein linker und ein
+oberer Druckerrand von jeweils 1\,in angenommen. F"ur Benutzer, die
+die Druckereinstellung nicht ver"-"andern d"urfen, wollen oder
+k"on"-nen, sieht der \verb/dinbrief.sty/ eine {\em Feinabstimmung}
+durch \verb/\advance/-Befehle auf \verb/\odd/- und
+\verb/\evensidemargin/ sowie \verb/\topmargin/ vor.
+\end{sloppypar}
+
+Der Norm wird gen"ugt durch
+\begin{center}
+\verb/\oddsidemargin 0pt/, \verb/\evensidemargin 0pt/,
+\verb/\textwidth 6in/, \\ \verb/\topmargin -2\GZA/,
+\verb/\headheight 1\GZA/, \verb/\hspace{3cm}/ (in \verb/plain/-Def.)
+\end{center}
+wobei GZA den Grundzeilenabstand 1/6\,in $\approx 4,23$\,mm
+(DIN 2142, 2107) $\approx 12,045$\,pt bezeichnet.
+
+Mit \verb/\headsep 2\GZA/ und \verb/\topskip 1\GZA/ beginnt eine
+normale Seite bei "`Zeile~8"'.
+
+Der Text geht bei einer \verb/\textheight/ von 55\,\verb/\GZA/ bis zur
+Zeile~62.
+
+\subsection{Zur opening-Prozedur}
+Gem"a"s der Norm 5008 steht die Absenderadresse links oben, beginnend
+auf Zeile 5; rechts davon steht das Datum. F"ur die Anschrift (von
+Grad 10 bis 40) sind die Zeilen 13 bis 21 reserviert.
+Behandlungsvermerke sind in der Zeile der letzten Adressenangabe bei
+Grad 50 anzuf"ugen. Der Betreff beginnt auf Zeile 24, das Schreiben
+folgt mit 2 Leerzeilen Abstand.
+
+DIN 676 (Vordruck Form B) schreibt f"ur den Strich, der die
+\verb/\Retouradresse/ von der Empf"angeradresse trennt, vor:
+\begin{itemize}
+\item Abstand vom oberen Blattrand 50\,mm
+\item Beginn 20\,mm vom linken Rand, L"ange 85\,mm
+\end{itemize}
+Die linken Faltmarken haben zum oberen Rand einen Abstand von 105\,mm
+bzw.\ 210\,mm.
+
+Um diese Grundpositionen f"ur beliebige Schriftgr"o"sen und
+Zeilenabst"ande zu gew"ahrleisten, wird der obere Teil des Briefes mit
+Hilfe des \verb/\picture/-Environments gestaltet. Bezugspunkt ist der
+Anfang (der Grundlinie) der ersten Textzeile einer Normalseite -- er
+hat vom linken (oberen) Blattrand den Abstand 25,4\,mm (33,84\,mm).
+Bei Texten und Boxen sind die Koordinaten des Beginns der Grundlinie
+im \verb$\put$-Befehl anzugeben. Die Positionierung von
+Absenderadresse und Datum ist offenbar. F"ur die Empf"angeradresse
+w"are eine Box mit {\em zwei} Referenzlinien, den Grundlinien der
+ersten und der letzten Zeile, n"utzlich: Die obere diente zur
+Anordnung der Adresse, die untere zur Ausrichtung des
+Behandlungsvermerks. Das Programm benutzt f"ur Empf"angeradresse und
+Behandlungsvermerk zwei vtop-Boxen mit derselben {\it Gesamt}\/h"ohe
+und gleichen Lagen des Referenzpunkts und der letzten Zeile (zum
+Verst"andnis beachte \TeX{}book S.~80--82).
+
+Die \verb/\fenst/-Routine setzt den Trennstrich, die
+\verb/\Retouradresse/ sowie die Faltmarken. Die Absenderadresse wurde
+zur horizontalen Zentrierung in eine Makebox gepackt; deren H"ohe
+wurde so gew"ahlt, da"s die vertikale Zentrierung ein ansprechendes
+Ergebnis liefert.
+
+Da die Zeilenzahl des Betreffs nicht, sein Abstand zur Anrede aber
+vorgeschrieben sind, kann hier nicht analog verfahren werden. Vielmehr
+erreicht man den Sprung zur "`Zeile 24"' durch \verb/\par/- und
+\verb/\vspace/-Befehle (\verb/\par/, \verb/\vspace{-1\parskip}/ und
+von der gew"ahlten Gr"o"senoption abh"angige \verb/\vspace/-Befehle
+bewirken eine Zeilenschaltung mit 1\,GZA).
+
+Dem Betreff folgt der vorschriftsgem"a"se Leerraum von 2 GZA.
+Enth"alt der \verb/\opening/-Befehl keine Anrede, wird sofort mit dem
+Text begonnen.
+
+DIN 676 empfiehlt f"ur die Retouradresse eine Mindestschriftgr"o"se
+von 3\,mm. Die 7pt-Schriften von \TeX\ sind etwas kleiner (gem"a"s der
+Me"slehre von DIN 16\,507). Im style-file wird f"ur die
+\verb+\Retschrift+ als Alternative zur Normalschrift (cmr) eine
+Sans-serif-Schrift (cmssq) angeboten.
+
+
+
+
+\subsection{Zur closing-Prozedur}
+Nach DIN 5008 folgt dem Text nach einer Leerzeile linksb"undig die
+Gru"sformel (bis Grad~45), dann gegenbenenfalls die
+maschinenschriftliche Angabe der Unterzeichner, der Anlagen- und
+Verteilervermerk. F"ur die Zwischenr"aume werden Empfehlungen
+gegeben. Bei Platzmangel darf der Anlagen- bzw.\ Verteilervermerk auf
+derselben Zeile wie die Gru"sformel bei Grad~50 beginnen.
+
+Um diese M"oglichkeit dem Anwender zu er"offnen, mu"ste das Dru"cken
+des Anlagen- und des Verteilervermerks in die closing-Prozedur
+aufgenommen werden.
+
+Die Breiten der Gru"sparbox von 3,5\,in bzw.\ der
+Anlagen/Verteilerparbox von 2\,in (rechts"-b"undig) entsprechen gerade
+diesen Vorschriften. Durch Ein"-f"ugen von struts (in \LaTeX:
+\mbox{Ober-}\slash Unterl"ange von 0,7/0,3 baselineskip) wird die
+Einhaltung des Zeilenrhythmus ge"-w"ahrleistet.
+
+
+
+\subsection{Zur startlabels- u.\ mlabel-Prozedur}
+Die Beschriftung des Etiketts sollte nach DIN 5008 der des
+Anschriftenfeldes im Brief gleichen.
+
+Da die Etiketten breiter als ein Adressenfenster sind, darf die
+\verb+\Retouradresse+ bis zu 9,3\,cm lang sein statt 8,5\,cm (DIN
+676). Ansonsten entspricht die Gestaltung des Etiketts v"ollig der des
+Adressenfeldes im Brief bei norm-Option, wenn keine
+\verb/\Retouradresse/ auf dem Etikett untergebracht werden mu"s oder
+die Etiketten mindestens 45\,mm hoch sind. Der Adre"s"-kasten von 40
+bzw.\ 45\,cm H"ohe (s.\ DIN 676) wird dann vertikal zentriert.
+Andernfalls sind die Leerzeilen etwas schmaler.
+
+\verb/\odd/- und
+\verb/\evensidemargin-19.4mm/, \verb/\textwidth19.8cm/ und
+\verb/\columnsep1.2cm/ plazieren die Etiketten in beiden Spalten gleich.
+
+Zu Beginn jedes Briefes wird der Seitenz"ahler auf~1 gestellt. Deshalb
+gibt es zu einer Seitennummer oft mehrere Seiten, von denen evtl.\ nur
+die erste auf dem Dru"cker gesondert ausgegeben werden kann. Damit die
+Etiketten {\em immer} "`angew"ahlt"' werden k"onnen, beginnen diese
+auf S.\ 91 (diese Zahl wird wohl von keinem Brief errreicht).
+
+\begin{sloppypar}
+Um in der Empf"angeradresse \verb/\par/ bzw.\ Leerzeilen ben"utzen
+zu k"onnen, wurde das \verb/\mlabel/-Makro als \verb/\long/-Definition
+deklariert.
+\end{sloppypar}
+
+Es wurde das \verb/\retourlabel/-Macro aufgenommen.
+
+\subsection{Zur endletter-Prozedur}
+Bei Gebrauch einer Fensterbriefh"ulle sind Etiketten
+"uberfl"ussig -- \verb/@fileswfalse/ unterbindet ihre Ausgabe
+auch bei \verb/\makelabels/-Aufruf in der Pr"aambel.
+
+Weil die Empf"angeradresse nicht mehr in \verb/\toname/ und
+\verb/\toaddress/ aufgespalten wird, da"-f"ur aber der Postvermerk
+dazukam, wurde die \verb/\write/-Ausgabe auf den \verb/aux/-File
+ge"-"andert.
+
+Bei \verb/\Retourlabel/ werden ein \verb/\mlabel/-Aufruf mit leerem
+ersten Argument sowie ein \verb/\retourlabel/-Aufruf mit Teil I
+der Absenderangabe auf den \verb/aux/-File geschrieben.
+
+\subsection{Zu neuen Definitionen}
+\begin{tabbing}
+AAAAAAAAAAA\= \kill
+\verb/\Einrueckung/\>
+\begin{minipage}[t]{11.8cm}
+Nach der Norm gehen Einr"uckungen von Grad 20 bis Zeilenende.\\
+Eine St"orung des Zeilenrhythmus beim "Ubergang vom Normaltext zur
+vbox l"a"st sich durch Einf"ugen von struts am Ende des Normaltextes
+und am Anfang der vbox vermeiden. Um dem Anwender die Eingabe von
+\verb/\strut/ zu ersparen und ihm zu erlauben, im Eingabefile den
+einzur"uckenden Text vom Rest durch Leerzeilen abzusetzen, wurde zu
+dem Trick mit der "`strut-Extra-Zeile"' gegriffen.
+\end{minipage}\\[1\parskip]
+\verb/\Datum/\>\verb/\date/ ist normalerweise mit \verb/\today/ belegt,
+bei Option \verb/german/ mit \\\>\verb/\heute/ und bei Aufruf von
+\verb/\Datum/ mit dessen Argument \\[1\parskip]
+\end{tabbing}
+\subsection{Streichungen}
+\begin{tabbing}
+AAAAAAAAAAA\= \kill
+\verb/\cc/\>ersetzt durch \verb/\Verteiler/ \\[1\parskip]
+\verb/\encl/\>ersetzt durch \verb/\Anlagen/\\[1\parskip]
+\verb/\headings/\>bei Briefen ohne Normvordruck ist Text in der
+ Kopfzeile un"ublich\\[1\parskip]
+\verb/\processto/, \>
+bei Verzicht auf \verb/headings/-Option ist die Aufteilung der
+Empf"anger-\\\verb/\@xproc/, \>adresse in
+\verb/\toname/ und \verb/\toaddress/ "uberfl"ussig.\\
+\verb/\@yproc/\>Da im Deutschen die erste Zeile der Anschrift meist
+nur eine Anrede\\\>wie {\em
+Herrn} enth"alt, w"are \verb/\processto/ ohnehin unbrauchbar.\\
+\>Modifizierte Versionen dieser Macros werden jedoch zur Aufteilung\\
+\>der Absenderangabe herangezogen. \\[1\parskip]
+\verb/\ps@firstpage/\>die Gestaltung der ersten Seite wird von
+\verb/\opening/ "ubernommen, \\\>\verb/\location/ und \verb/\telephone/
+ entfallen \\[1\parskip]
+\verb/\texttop/\>l"a"st kurze Briefe nicht ganz oben beginnen, im
+Deutschen nicht er- \\\>w"unscht
+\end{tabbing}
+
+\vspace{2cm}
+Rainer Sengerling\\
+Institut f"ur Theoret.\ und Angew.\ Physik\\Universit"at Stuttgart\\
+Pfaffenwaldring 57\\7000 Stuttgart 80
+
+\end{document}
diff --git a/macros/latex209/contrib/letters/geschbrf/geschbrf.sty b/macros/latex209/contrib/letters/geschbrf/geschbrf.sty
new file mode 100644
index 0000000000..2d8c223cf0
--- /dev/null
+++ b/macros/latex209/contrib/letters/geschbrf/geschbrf.sty
@@ -0,0 +1,1280 @@
+% geschbrf.sty -- Version 2.0, 1. M"arz 1995.
+% (c) Holm Sieber, Heinrich-Heine-Str. 7, 09577 Niederwiesa,
+% E-Mail: h.sieber@mathematik.tu-chemnitz.de
+% anhand dinbrief.sty von Rainer Sengerling.
+%
+% Die Einstellungen f"ur den Briefkopf und den Brieffu"s auf dem
+% Briefblatt m"ussen hier im Stylefile vom Nutzer vorgenommen
+% werden! (siehe weiter unten)
+%
+%% dinbrief.sty -- Version vom 9. Oktober 1992
+%% fuer LaTeX Version 2.09
+%% fuer vordrucklose Briefe im A4-Format, entsprechend den deutschen
+%% DIN-Normen 5008 (von 1986), 2107, 2142, 676 und 16507
+%% von Rainer Sengerling
+%% (Inst. f. Theor. u. Angew. Physik, Uni Stuttgart)
+%%
+%% aus letter.doc (Lamport, 25 Mar 92) entwickelt
+%% unter Beruecksichtigung von Beitraegen von B. Raichle
+%%
+%% Kontaktadressen:
+%% Rainer Sengerling: rainer@itap.physik.uni-stuttgart.de
+%% Rainer Sengerling, Josenhansstr. 13, 7000 Stuttgart 31
+%%
+%\typeout{Document Style `dinbrief' von R. Sengerling <9. Oktober 1992>.}
+\typeout{Document Style 'Geschaeftsbrief' (geschbrf.sty) <1. Maerz 1995>.}
+
+% CHOOSING THE TYPE SIZE:
+%
+% The type size option is handled by \def'ing \@ptsizem to the
+% following values:
+% 10pt : 0, 11pt : 1, 12pt : 2, norm : 3
+% Zum Laden von externen Zeichensaetzen (z.B. AMS-Fonts) wurde die alte
+% Groessenvariable \@ptsize beibehalten und folgenermassen zugeordnet
+% 10pt : 0, 11pt : 1, 12pt : 2, norm : 1
+% Then loading the different fonts accordingly.
+%
+\def\@ptsize{1} \def\@ptsizem{3} % Default is norm
+\@namedef{ds@10pt}{\def\@ptsize{0}\def\@ptsizem{0}} % 10pt option.
+\@namedef{ds@11pt}{\def\@ptsize{1}\def\@ptsizem{1}} % 11pt option.
+\@namedef{ds@12pt}{\def\@ptsize{2}\def\@ptsizem{2}} % 12pt option.
+\@namedef{ds@norm}{\def\@ptsize{1}\def\@ptsizem{3}} % norm option.
+
+
+% no twoside option
+%
+\@twosidefalse
+
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull
+% % hboxes.
+\def\ds@draft{\overfullrule 5\p@}% Causes overfull hboxes to be marked.
+
+% german option
+%
+% defines \date to use \heute (german form) instead of \today
+% loads 'german.sty' at the end of this file.
+%
+\newif\if@german\@germanfalse
+\def\ds@german{\@germantrue}
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the
+% present (main) .STY file is executed.
+
+\@options
+
+% **************************************************************
+% * Feld fuer benutzerspezifische Anpassungen *
+% **************************************************************
+%
+%Schrift f"ur R"uckadresse (DIN 676 u. 16507) -- Alternativen
+%\font\Retschrift=cmssq8 scaled 875
+\font\Retschrift=cmr7
+
+% Festlegung des Briefkopfes
+%
+% Hier wird das Aussehen des Briefkopfes f"ur Briefe auf Vordrucke der
+% Form A (27 mm H"ohe am Blattanfang f"ur den Firmenkopf) und auf Vordrucke
+% der Form B (45 mm H"ohe am Blattanfang) definiert.
+%
+% Der Text wird als Parameter eines \makebox Kommandos zentriert
+% am Blattanfang ausgegeben.
+%
+% Beispiel:
+%
+%\def\KopfFormA{\begin{tabular}{c}{\Huge Hagemann \& Co. Export/Import
+%GmbH}\\\rule{170mm}{1pt}\end{tabular}}
+%
+%\def\KopfFormB{\begin{tabular}{c}{\Huge Hagemann \& Co. Export/Import
+%GmbH}\\[3.5ex]\makebox[170mm][l]{\small gegr\"undet 1871, Export und
+%Import aller G\"uter}\\[-1ex]%
+%\rule{170mm}{1pt}\end{tabular}}
+
+\def\KopfFormA{}
+\def\KopfFormB{}
+
+% Festlegung des Brieffu"ses
+%
+% Mit ,,\def\Fuss{}'' wird das Aussehen des Brieffu"ses festgelegt.
+% Nach DIN 676 stehen hier Angaben zu den Gesch"aftsr"aumen, die Nummern
+% der Hauptanschl"usse aller Kommunikationsm"oglichkeiten und die
+% Kontoverbindungen. Bei Kapitalgesellschaften sind hier auch Angaben
+% zur Rechtsform und zum Sitz der Gesellschaft, das Registergericht
+% des Sitzes der Gesellschaft und die Nummer, unter der die Gesellschaft
+% in das Handelsregister eingetragen ist, bei einem Aufsichtsrat der Name
+% seines Vorsitzenden und die Namen des Vorsitzenden und aller Mitglieder
+% des Vorstandes bzw. die Namen der Gesellschafter anzugeben.
+%
+% Der Text wird als Parameter eines \makebox Kommandos zentriert
+% am Blattende ausgegeben. Daf"ur stehen in der H"ohe ca. 30 mm
+% zur Verf"ugung. Wenn mehr Platz ben"otigt wird, mu"s die Texth"ohe
+% auf dem ersten Blatt reduziert werden.
+%
+% Beispiel:
+%
+%\def\Fuss{\begin{tabular}{c}\rule{170mm}{1pt}\\\Retschrift%
+%\makebox[170mm]{%
+%\parbox[t]{30mm}{Gesch\"aftsr\"aume\\Hans-Meier-Weg 15\\[-1ex]%
+%47282 Gro{\ss}dorf}\hfill%
+%\parbox[t]{20mm}{Telefon\\(0 72 34) 57 83}\hfill%
+%\parbox[t]{20mm}{Telefax\\(0 72 34) 57 29}\hfill%
+%\parbox[t]{30mm}{Kontoverbindungen\\Sparkasse Kleinstadt\\[-1ex]%
+%BLZ 623 990 23\\[-1ex]Konto Nr.\ 823 392 992}\hfill%
+%\parbox[t]{30mm}{Gesch\"aftsf\"uhrer\\Hugo Hagemann\\[-1ex]%
+%Robert Hagemann\\[-1ex]Hans Meister}}\\%
+%\rule{0mm}{12mm}\end{tabular}}
+
+\def\Fuss{}
+
+% Parameter fuer Feineinstellung des Druckers
+% fuer Benutzer, die die Druckereinstellung nicht veraendern duerfen,
+% wollen oder koennen
+% Solleinstellung des Druckers s. PAGE LAYOUT (unten)
+%
+\newdimen\feinx \feinx=0pt
+\newdimen\feiny \feiny=0pt
+%
+%\feinx=0.55mm % f"ur HP-Laserjet am ITAP
+%\feiny=-1.3mm % " " " " "
+%
+%\feinx=-1.10mm % f"ur PostScript-Drucker am ITAP
+%\feiny=2.25mm % " " " " "
+
+% Etiketten
+\newdimen\Etiketthoehe % Hoehe eines Etikettes
+\newdimen\Etikettrand % oberer Rand beim Etikettensatz
+\newcount\Etikettzahl % Zahl der Etiketten in einer Kolonne
+
+% Etikettenformate -- Alternativen
+ % 105 x 42,3 [mm] Zweckform (No 3653) u. Herma (Laserprint No 4625)
+ % Rand = obere Etikettenreihe
+ % \Etiketthoehe=42.3mm
+ % \Etikettrand=42.3mm
+ % \Etikettzahl=6
+%****************** Voreinstellung ****************
+ % 105 x 42 [mm] Herma (copy-print No 4452)
+ % Streifen oben, Rand = Streifen
+ \Etiketthoehe=41.15mm
+ \Etikettrand=8.85mm
+ \Etikettzahl=7
+%*****************************************************
+ % 105 x 41 [mm] Zweckform (No 3477)
+ % Pfeile markieren oben, obere Etikettenreihe zum Rand gezaehlt
+ % \Etiketthoehe=41mm
+ % \Etikettrand=46.3mm
+ % \Etikettzahl=6
+ % 105 x 48 [mm] Herma (copy-print No 4457)
+ % Streifen unten, obere Etikettenreihe = Rand
+ % \Etiketthoehe=47.6mm
+ % \Etikettrand=47.9mm
+ % \Etikettzahl=5
+
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% norm-Grundzeilenabstand 1/6in = 4,23mm (DIN 2107,2142)
+\newdimen\GZA
+\GZA=1in \divide\GZA by 6
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size.
+% (Actual value will be
+% \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize.
+% This is done only for \normalsize, not for any other size-changing
+% commands.
+
+\ifcase \@ptsizem\relax % 10pt option
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5\p@ plus3\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 3\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 11pt option
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 12pt option
+
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12\p@ plus3\p@ minus7\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\parsep 4.5\p@ plus2\p@ minus\p@
+ \itemsep \parsep
+ \topsep 9\p@ plus3\p@ minus5\p@}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@list i added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\or % norm-Option (DIN 2107, 2142)
+
+\def\@normalsize{\@setsize\normalsize{1\GZA}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 22 Dec 87
+
+\def\small{\@setsize\small{1\GZA}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Def of \@listi added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+
+\normalsize % Choose the normalsize font.
+
+% von Groessenoption unabhaengige Schrift fuer Beschriftung
+% der Etiketten
+%
+\def\Adgroesse{\@setsize\Adgroesse{1\GZA}\xipt\@xipt}
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and
+% side of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+\oddsidemargin 0pt % Left margin on odd-numbered pages.
+\evensidemargin 0pt % Left margin on even-numbered pages.
+\marginparwidth 90pt % Width of marginal notes.
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+\marginparpush 5pt % Minimum vertical space between marginal notes.
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -2\GZA % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 1\GZA % Height of box containing running head.
+\headsep 2\GZA % Space between running head and text.
+\topskip 1\GZA % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 25pt % Distance from baseline of box containing
+ % foot to baseline of last line of text.
+
+% DIMENSION OF TEXT:
+
+\textheight 55\GZA % Height of text (including footnotes and
+ % figures, excluding running head and foot).
+\textwidth 6in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% Anpassung an Druckereinstellung
+\advance\topmargin by \feiny
+\advance\oddsidemargin by \feinx
+\advance\evensidemargin by \feinx
+
+
+\raggedbottom % 'ragged bottom' (all pages set to natural
+ % height, with no stretch or shrinkage)
+
+% FOOTNOTES:
+
+\footnotesep 12pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 10pt plus 2pt minus 4pt % Space between last line of
+ % text and top of first footnote.
+
+
+% FLOATS:
+% The following items must be defined, even though there are no
+% floats in this style.
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+
+
+
+% ****************************************
+% * dinbrief COMMANDS *
+% ****************************************
+%
+% The following declarations, shown with examples, give information
+% about the sender:
+%
+% \signature{Larry User} : goes after the closing.
+% \Absender{Dr.\ L. User\\3245 Foo St.\par Gnu York::(415)123-4567} :
+% Absenderangaben im Briefkopf und auf dem Absenderetikett
+% (\Retourlabel); der nach :: stehende Teil (z.B. Telefonnummer)
+% erscheint nur im Brief, :: impliziert keinen Zeilenumbruch
+% \Retouradresse{L. User --3245 Foo St. -- Gnu York} : vereinbart
+% einzeilige \returnaddress, die oberhalb der Empfaengeradresse
+% ausgegeben wird.
+%
+% Die Form der Ausgabe wird durch folgende Definitionen gesteuert.
+%
+% \Fenster : setzt die \returnaddress im Brief, produziert Faltmarken,
+% Briefkopf und Bezugszeile
+% \Vordruck : unterdr"uckt Ausgabe von Briefkopf und Zeile ,,Ihr ...'',
+% wenn ,,\Fenster'' definiert ist
+% \FormA : erzeugt Ausgabe des Briefes auf Vordruck Form A, wenn
+% ,,\Fenster'' definiert ist
+%
+% The \makelabels declaration causes mailing labels to be made. It
+% must go before the \begin{document} command.
+% Bei zusaetzlichem Aufruf von \Retourlabel werden auch Etiketten
+% mit der Absenderadresse erzeugt, die \returnaddress wird dann auf
+% dem Empfaengeretikett nicht ausgegeben.
+% Mit \spare{3} werden die ersten 3 Felder des Etikettensatzes
+% ausgelassen.
+%
+% Es koennen verschiedene Etikettensaetze benutzt werden. Oben im "Feld
+% fuer benutzerspezifische Anpassungen" finden Sie eine Auswahl im
+% Handel erhaeltlicher Etikettensaetze. Treffen Sie eine Standardwahl!
+% In Ausnahmefaellen koennen Sie die Kenndaten eines Etikettensatzes
+% mit Befehlen wie \Etihoehe{41mm}, \Etirand{46.3mm} u. \Etizahl{6}
+% im tex-File angeben.
+%
+%
+% Weitere Deklarationen:
+%
+% \Datum{Stuttgart, den 4.\ 8.\ 1992}
+% zur freien Gestaltung der Datumsangabe
+% \Postvermerk{Einschreiben}
+% fuer postalische Vermerke, die oberhalb
+% der Empfaengeradresse stehen.
+% \Behandlungsvermerk{E\ i\ l\ t}
+% Behandlungsvermerk neben Anschriftfeld
+% \Betreff{Ihr Schreiben v. ..}
+% ein- oder mehrzeilige Betreffangabe
+% \IhrZeichen{Meier}
+% Bezugstext zu ,,Ihr Zeichen, Ihre Nachricht vom''
+% \UnserZeichen{HS}
+% Bezugstext zu ,,Unser Zeichen, unsere Nachricht vom''
+% \Telefon{(03893) 5923-472}
+% Bezugstext zu ,,Telefon, Name''
+%
+% The letter environment: creates a new letter, starting from page 1.
+% (The first page is unnumbered.) Sein Argument ist die Empfaenger-
+% adresse; Leerzeilen mit \par oder Leerzeile im tex-File wie in
+% \begin{letter}{Herrn\\ Dr.\ R. Sengerling\\Josenhansstr.\13 \par
+% 7000 Stuttgart 31}
+%
+% Local declarations, such as \Absender, can follow the \begin{letter}.
+%
+% Text is begun with the \opening command, whose argument generates the
+% salutation, as in
+% \opening{Dear Henry,}
+% Eingerueckte und durch Leerzeilen abgesetzte Textteile sind mit
+% \Einrueckung{text} zu realisieren, wobei text aus mehreren Absaetzen
+% bestehen darf.
+% The body of the letter follows, ended by a \closing command, as in
+% \closing{Yours truly,}
+% The 'signature' is provided automatically; sofern vereinbart
+% \Anlagen, \Verteiler ersetzen \encl bzw. \cc im letter.sty, erzeugen
+% aber selbst keinen Text; Aufruf vor \closing!
+% \Verteiler{Verteiler:\\Tinker\\Evers} -- which produces:
+% Verteiler:
+% Tinker
+% Evers
+%
+% \Anlagen{Anlage:\\Prosspektmaterial} -- which produces:
+% Anlage:
+% Prospektmaterial
+%
+% \anlagenrechts bringt die Anlagen- und Verteilervermerke neben
+% die Grussformel (bei Platzmangel); Aufruf vor \closing!
+%
+% After the \closing you can put arbitrary stuff, which is typeset
+% with \parindent = 0 and no page breaking. Commands designed
+% for use after the closing are \ps.
+%
+% Beschreibung der letter-Makros
+%
+% \opening{Dear Mr. Foo:}-
+% Should produce everything up to and including the 'Dear Mr. Foo:'
+% and a \par command that follows. Es benuetzt folgende Befehle:
+%
+% \fromaddress : Das Argument des aktuellen \Absender-Befehls wird
+% mit Hilfe der modif. processto-Routine gemaess
+% \fromaddressI::\fromaddressII aufgespalten.
+% \fromaddressII erscheint nur im Briefkopf
+% \date : Datum, Form ist abh"angig von ,,\Fenster''
+% \fenst : Makro fuer Faltmarken u. durch Strich abgesetzte
+% kleingedruckte \returnaddress
+% \Vermerk : Argument von \Postvermerk
+% \toaddress : Argument des letter-Environments
+% \Adhoehe : zur Ausmessung der Adressbox
+% \Behver : Argument von \Behandlungsvermerk
+% \betreff : Argument von \Betreff
+% \ihr : Argument von \IhrZeichen
+% \unser : Argument von \UnserZeichen
+% \telefon : Argument von \Telefon
+%
+% \closing{TXT} : Generates the closing matter, Anlagen- und
+% Verteilervermerk and the signature.
+% An obvious thing to do is to use a t-\parbox for the closing
+% and the signature. \An steht normalerweise unterhalb, bei
+% \anlagenrechts jedoch rechts davon. Benutzt:
+%
+% \fromsig : argument of current \signature declaration
+% \stopbreaks : a macro that inhibits page breaking.
+% \An : Anlagen- und Verteilertext
+%
+% \ps : The only thing that this needs to do is call \startbreaks,
+% which allows page breaking again.
+%
+%
+% CUSTOMIZING THE LABELS
+%
+% Commands for generating the labels are put on the .AUX file, which is
+% read in and processed by the \end{document} command. You have to
+% define the following two commands:
+%
+% \startlabels : Should reset the page layout parameters if
+% necessary.
+%
+% \mlabel{RETURN ADDRESS}{Postvermerk}{TO ADRESS} : Command to
+% generate a single label.
+% \retourlabel{fromaddressI} : Befehl fuer ein Absender-Etikett
+
+
+
+% ************************************************
+% * spez. Befehle des dinbrief.sty *
+% ************************************************
+%
+\def\Datum#1{\def\date{#1}}
+\def\date{\if@german\iffenster\heutekurz\else\heute\fi%
+\else\iffenster\todayshort\else\today\fi\fi}
+
+\newif\iffenster\fensterfalse
+\def\Fenster{\fenstertrue}
+
+\newif\ifvordruck\vordruckfalse
+\def\Vordruck{\iffenster\vordrucktrue\fi}
+
+\newif\ifforma\formafalse
+\def\FormA{\iffenster\formatrue\fi}
+
+\def\Retouradresse#1{\def\returnaddress{#1}}
+\def\returnaddress{}
+
+\def\Postvermerk#1{\def\Vermerk{#1}}
+\def\Vermerk{}
+
+\newdimen\Adhoehe
+\def\Behandlungsvermerk#1{\def\Behver{#1}}
+\def\Behver{}
+
+\def\Betreff#1{\def\betreff{\ignorespaces #1}}
+\def\betreff{}
+
+\def\IhrZeichen#1{\def\ihr{\ignorespaces #1}}
+\def\ihr{}
+
+\def\UnserZeichen#1{\def\unser{\ignorespaces #1}}
+\def\unser{}
+
+\def\Telefon#1{\def\telefon{\ignorespaces #1}}
+\def\telefon{}
+
+\long\def\Einrueckung#1{\par
+ \vspace*{-\baselineskip}\vspace*{-\parskip}\strut \par
+ \hfill \vbox{\hsize 5in\strut #1}\par}
+% Durch struts wird die Einhaltung des Zeilenrhythmus garantiert. Um
+% dem Anwender das Einsetzen von \strut am Ende des vorausgehenden
+% Textes zu ersparen und ihm offenzuhalten, im Eingabefile den
+% einzurueckenden Text durch Leerzeilen abzusetzen, wird eine
+% strut-Zeile zwischengeschaltet und der ueberschuessige vertikale
+% Leerraum entfernt.
+% Bemerk. zu \strut:
+% \strut ist in LaTeX ein strut mit einer Ober-/Unterlaenge von
+% 0.7/0.3 \baselineskip (s. Def. von \strutbox in LFONTS.tex) --
+% dies ist eine Verallgemeinerung des 8.5pt/3.5pt-strut von plain-TeX
+% (s. TeXbook S. 353)
+
+\newif\ifanlagenr\anlagenrfalse
+\def\anlagenrechts{\anlagenrtrue}
+\def\Anlagen#1{\def\Anlagentext{#1}}
+\def\Anlagentext{}
+\def\Verteiler#1{\def\Verteilertext{#1}}
+\def\Verteilertext{}
+
+\newcount\sparzahl \sparzahl=0
+\def\spare#1{\sparzahl=#1\relax}
+
+\newif\ifretour\retourfalse
+\def\Retourlabel{\retourtrue}
+
+
+
+% **************************************************
+% * letter-Makros, weitgehend neu definiert *
+% **************************************************
+%
+
+% Neudefinition des opening-Befehls
+\def\opening#1{\thispagestyle{empty}%
+ \unitlength 1mm%
+ \begin{picture}(0,0)%
+% % Fenster
+ \iffenster\fenst\else%
+% % Absenderadresse und Datum - nur wenn nicht ,,\Fenster''
+ \put(0,12.69){%
+ \parbox[t]{\textwidth}{\parbox[t]{3in}{\fromaddressI\fromaddressII}%
+ \hfill \date }}\fi%
+% % Empfaengeradresse u. Behandlungsvermerk
+ \setbox\z@\vtop{\hsize 3in\strut \Vermerk\par \toaddress \strut}%
+ \Adhoehe\ht\z@
+ \advance\Adhoehe \dp\z@
+ \advance\Adhoehe -\dp\strutbox % = Unterlaenge eines LATEX-strut --
+% % s. Def. von \strutbox in LFONTS.tex
+% % beachte: die Dimensionsangabe in \vtop- u. \vbox-Befehlen bezieht
+% % sich nicht auf deren Gesamthoehe (s. TeXbook S. 80--81)
+%
+% % Die Position der Empf"angeradresse richtet sich nach der Verwendung
+% % von Vordrucken der Form A oder Form B.
+ \ifforma%
+ \put(0,-3.15){\box\z@ \hspace{1in}\vtop to\Adhoehe{\strut
+ \par \vfill \Behver \strut}}%
+ \else%
+ \put(0,-21.15){\box\z@ \hspace{1in}\vtop to\Adhoehe{\strut
+ \par \vfill \Behver \strut}}%
+ \fi%
+ \end{picture}%
+% % Anpassung fuer Betreff
+ \strut\par
+ \vspace{-\parskip}%
+% % Bei Form B erscheint alles 4 Zeilen tiefer als bei Form A.
+% % Bei ,,\Fenster'' r"uckt der Betreff 3 Zeilen weiter nach unten.
+ \iffenster\ifforma\vspace{14\GZA}\else\vspace{18\GZA}\fi%
+ \else\vspace{15\GZA}\fi%
+% % Anpassung wegen der verschiedenen Grundzeilenabstaende
+ \ifcase\@ptsizem\vspace{.045pt}\or\vspace{-1.555pt}\or
+ \vspace{-2.955pt}\fi
+ \betreff \strut \par
+ \vspace{-\parskip}%
+ \vspace{2\GZA}%
+% % Anpassung wegen der verschiedenen Grundzeilenabstaende
+ \ifcase\@ptsizem\vspace{.045pt}\or\vspace{-1.555pt}\or
+ \vspace{-2.955pt}\fi
+ \def\Anrede{#1}%
+ \ifx\Anrede\@empty \else #1\par\fi\nobreak}
+
+% Die Positionen der Striche und Texte unterscheidet sich zwischen
+% Form A und Form B des Briefes (DIN 676). Der relative Koordinatenursprung
+% liegt 33.84 mm unterhalb der oberen Blattkante.
+
+\def\rowa{\ifforma-53.16\else-71.16\fi}
+\def\rowb{\ifforma-158.16\else-176.16\fi}
+\def\rowc{\ifforma-96.66\else-114.66\fi}
+\def\rowd{\ifforma1.84\else-16.16\fi}
+\def\rowe{\ifforma-46.66\else-64.66\fi}
+\def\rowf{\ifforma-49.68\else-67.68\fi}
+
+\def\fenst{%
+ \ifvordruck\else%
+% % Briefkopf
+ \ifforma\put(-25.4,6.84){\makebox(210,27){\KopfFormA}}%
+ \else\put(-25.4,-11.84){\makebox(210,45){\KopfFormB}}\fi%
+% % Brieffu"s
+ \put(-25.4,-263.16){\makebox(210,30){\Fuss}}%
+% % Faltmarken
+ \put(-21,\rowa){\line(1,0){3}}%
+ \put(-21,\rowb){\line(1,0){3}}%
+% % Lochmarke
+ \put(-18,\rowc){\line(1,0){3}}%
+% % Strich unter Returnadresse
+ \put(-5.4,\rowd){\line(1,0){85}}%
+% % Setzen der Returnadresse
+ \put(-5.4,\rowd){\makebox(85,4){\Retschrift\returnaddress}}%
+% % Zeile ,,Ihr Zeichen ... Datum''
+ \put(0,\rowe){\makebox(50,4)[l]{\Retschrift
+ Ihr Zeichen, Ihre Nachricht vom}}%
+ \put(50.8,\rowe){\makebox(50,4)[l]{\Retschrift
+ Unser Zeichen, unsere Nachricht vom}}%
+ \put(101.6,\rowe){\makebox(50,4)[l]{\Retschrift Telefon, Name}}%
+ \put(152.4,\rowe){\makebox(20,4)[l]{\Retschrift Datum}}%
+%
+ \fi%
+% % Bezugszeichenzeile
+ \put(0,\rowf){\makebox(50,4)[lb]{\ihr}}%
+ \put(50.8,\rowf){\makebox(50,4)[lb]{\unser}}%
+ \put(101.6,\rowf){\makebox(50,4)[lb]{\telefon}}%
+ \put(152.4,\rowf){\makebox(20,4)[lb]{\date}}}
+
+% Neudefinition des closing-Befehls
+\long\def\closing#1{\par\nobreak
+ \stopbreaks
+ \noindent
+ \parbox[t]{3.5in}{\raggedright
+ \ignorespaces #1\strut \\[4\GZA]%
+ \ifx\@empty\fromsig \relax \else \fromsig \fi
+ \strut}%
+ \ifanlagenr\hfill \parbox[t]{2in}{\An}%
+ \else \par\An \fi}
+
+\def\An{\ifx\Anlagentext\@empty\else\Anlagentext \strut
+ \par \fi \ifx\Verteilertext\@empty\else\Verteilertext \strut\fi}
+
+\def\ps{\par\startbreaks\strut}
+
+\def\stopletter{}
+
+% Labels
+
+\newcount\labelcount
+
+
+% The following \startlabels command sets things up for producing
+% labels in two columns
+%
+\def\Etihoehe#1{\Etiketthoehe=#1\relax}
+\def\Etirand#1{\Etikettrand=#1\relax}
+\def\Etizahl#1{\Etikettzahl=#1\relax}
+
+
+% Neudefinition des startlabel-Befehls
+\def\startlabels{\labelcount\z@
+\setcounter{page}{91}%
+\pagestyle{empty}%
+\topmargin -24mm%
+\advance\topmargin \Etikettrand
+\topskip \z@skip
+\headheight \z@
+\headsep \z@
+\oddsidemargin -19.4mm%
+\evensidemargin \oddsidemargin
+% Druckeranpassung
+\advance\topmargin \feiny
+\advance\oddsidemargin \feinx
+\advance\evensidemargin \feinx
+\textheight=\Etikettzahl\Etiketthoehe
+\advance\textheight .05cm%
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 19.8cm%
+\columnsep 1.2cm%
+\Adgroesse
+\baselineskip \z@skip \lineskip \z@skip
+\boxmaxdepth \z@
+\parindent \z@
+\twocolumn
+\relax
+\ifnum\sparzahl>\z@
+ \ifnum\sparzahl<\Etikettzahl\else
+ \mbox{}\newpage \advance\sparzahl -\Etikettzahl\fi
+ \vspace*{\sparzahl\Etiketthoehe}\par\fi}
+
+% Neudefinition des mlabel-Befehls
+\long\def\mlabel#1#2#3{\def\test{#1}%
+ \baselineskip\GZA
+ \parskip\GZA
+ \ifx\test\@empty
+ \setbox\z@\vbox to40mm{\hspace*{9.4mm}\vbox{\hsize 3in\ignorespaces
+ #2\rule{\z@}{5mm}\par #3}\vss}%
+ \vbox to\Etiketthoehe{\vss \box\z@ \vss}%
+ \else
+ \ifdim\Etiketthoehe<45mm
+ \parskip2mm%
+ \setbox\z@\vbox{%
+ \underline{\rule[-.9mm]{\z@}{3.2mm}\makebox[93mm]{\Retschrift #1}}\\
+ \hspace*{9.4mm}\vbox{\hsize 3in\ignorespaces
+ #2\rule{\z@}{10\p@}\par #3}}%
+ \vbox to\Etiketthoehe{\box\z@ \vss}%
+ \else
+ \setbox\z@\vbox to45mm{%
+ \underline{\rule[-.9mm]{\z@}{5mm}\makebox[93mm]{\Retschrift #1}}\\
+ \hspace*{9.4mm}\vbox{\hsize 3in\ignorespaces
+ #2\rule{\z@}{5mm}\par #3}\vss}%
+ \vbox to\Etiketthoehe{\vss \box\z@ \vss}%
+ \fi
+ \fi}
+
+\long\def\retourlabel#1{\setbox\z@\vbox{\baselineskip\GZA\parskip\GZA
+ \hspace*{.2cm}%
+ \vbox{\hsize 8.7cm\rule{\z@}{18\p@}\ignorespaces #1\strut}}%
+ \vbox to \Etiketthoehe{\box\z@\vss}}
+
+
+
+
+% ****************************************
+% * THE GENERIC LETTER COMMANDS *
+% ****************************************
+%
+
+
+%% FMi & RmS: added \leavevmode to catch empty argument, 16 Aug 91
+%% RmS ...and added \ignorespaces, 21 Feb 92
+
+% Neudefinition des letter-Befehls
+\long\def\letter#1{\newpage
+ \c@page\@ne
+ \interlinepenalty 200 % smaller than the TeXbook value
+ \def\toaddress{\leavevmode\ignorespaces #1}}
+
+% Neudefinition des endletter-Befehls
+\def\endletter{\stopletter\@@par\pagebreak\@@par
+ %%% Unterdrueckung der Adressetikettenausgabe bei Fenster-Option
+ %%\iffenster\@fileswfalse\fi
+ \if@filesw
+ \begingroup
+ \let\\\relax
+ \def\protect##1{\string##1\space}%
+ \ifretour
+ \immediate\write\@auxout{\string\mlabel
+ {\empty}{\Vermerk}{\toaddress}}%
+ \immediate\write\@auxout{\string\retourlabel
+ {\fromaddressI}}%
+ \else
+ \immediate\write\@auxout{\string\mlabel
+ {\returnaddress}{\Vermerk}{\toaddress}}%
+ \fi
+ \endgroup
+ \fi}
+
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\\@nobreakcr
+ \let\vspace\@nobreakvspace}
+
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+
+\def\startbreaks{\let\\\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200\relax}}
+%% \relax added 20 Sep 88
+
+% Neudefinition des Absender-Befehls
+\long\def\Absender#1{\@processto{#1}}
+\def\fromaddressI{}\def\fromaddressII{}
+% Aufspaltung der Absenderadresse gemaess fromaddressI::fromaddress II
+% mit Hilfe der modifizierten Routinen \@processto, \@xproc und \@yproc
+%
+\long\def\@processto#1{\@xproc #1::@@@\ifx\fromaddressII\@empty
+\else \@yproc #1@@@\fi}
+\long\def\@xproc #1::#2@@@{\def\fromaddressI{#1}\def\fromaddressII{#2}}
+\long\def\@yproc #1::#2@@@{\def\fromaddressII{#2}}
+
+\def\signature#1{\def\fromsig{#1}}
+\def\fromsig{}
+
+% \document redefined so it writes '\startlabels\@startlabels' on the
+% AUX file if it's making one.
+%
+%
+% 91/03/26 FMi: |\process@table| added to support NFSS.
+% This will also work with old lfonts if no other style defines
+% |\process@table|.
+%
+% 92/02/21 RmS: added \@noskipsecfalse setting in conformance with
+% change in latex.tex.
+%
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux
+ {\string\startlabels\string\@startlabels}\fi
+ \csname process@table\endcsname
+ \let\glb@currsize\@empty %% Force \baselineskip initialisation.
+ \def\do##1{\let ##1\@notprerr}%
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}\@noskipsecfalse}
+
+% Redefine \enddocument so it outputs the last page of labels,
+% if necessary.
+%
+\def\enddocument{\@checkend{document}\newpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\makeatletter\input \jobname.aux\clearpage
+\fi\endgroup\deadcycles\z@\@@end}
+
+
+\def\makelabels{\@fileswtrue}
+
+\def\@startlabels{}
+
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+\def\ps@empty{\let\@oddhead\@empty\let\@oddfoot\@empty
+ \let\@evenhead\@oddhead\let\@evenfoot\@oddfoot}
+
+% Neudefinition des plain-Stiles
+\def\ps@plain{\let\@oddfoot\@empty\def\@oddhead{\hspace{3in}\rm
+ -- \thepage\ --\hfil}
+ \let\@evenfoot\@oddfoot\let\@evenhead\@oddhead}
+
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\ifnum\@ptsizem=3 \parskip=\baselineskip\else \parskip .7em\fi
+ % Extra vertical space between paragraphs.
+\parindent 0pt % Width of paragraph indentation.
+%\topsep .4em % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 0pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+%\itemsep .4em % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% See \@listI for values of \topsep and \itemsep
+% (Change made 17 Oct 91)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph
+ % environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph
+ % environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % SET BY THE LETTER COMMANDS
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the
+% list environment's parameters. See the LaTeX manual for an
+% explanation of the meanings of the parameters. Defaults for the list
+% environment are set as follows. First, \rightmargin, \listparindent
+% and \itemindent are set to 0pt. Then, for a Kth level list, the
+% command \@listK is called, where 'K' denotes 'i', 'ii', ... , 'vi'.
+% (I.e., \@listiii is called for a third-level list.) By convention,
+% \@listK should set \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 17 Oct 91)
+\def\@listI{\leftmargin\leftmargini
+ \topsep .4em%
+ \itemsep .4em\relax}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep .2em%
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+
+%% RmS 92/02/26 corrected definitions of \labelenum.. to use \theenum..
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi,
+% \labelitemii, \labelitemiii, and \labelitemiv, which define the
+% labels of the various itemization levels.
+
+\def\labelitemi{$\m@th\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\m@th\ast$}
+\def\labelitemiv{$\m@th\cdot$}
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\\@centercr
+ \list{}{\itemsep\z@ \itemindent -15\p@\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15\p@}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em%
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray
+% % environment
+
+\arraycolsep 5pt % Half the space between columns in an array
+ % environment.
+\tabcolsep 6pt % Half the space between columns in a tabular
+ % environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular
+ % environment.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command.
+ % (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+%
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and
+ % \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes
+% from the text. It should take zero vertical space, so it needs a
+% negative skip to compensate for any positive space taken by the rule.
+% (See PLAIN.TEX.)
+
+\def\footnoterule{\kern-\p@
+ \hrule \@width 1in % HS: ge"andert von .4\columnwidth
+ \kern .6\p@} % The \hrule has default height of .4pt.
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the
+% mark of the footnote and NOTE as the text. It is called when
+% effectively inside a \parbox, with \hsize = \columnwidth.
+%
+
+\long\def\@makefntext#1{\noindent %Macro to make the text of a footnote
+ \hangindent 5\p@\hbox to5\p@{\hss $\m@th^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters set by some commands. Easier to define
+% them than change the commands.
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+% \calnumber#1 gibt von einem Z"ahlerwert die Zehner und Einer aus
+% und erg"anzt eventuell eine f"uhrende Null
+% (Beispiele: 1994 -> '94', 14 -> '14', 3 -> '03')
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \ \number\day, \number\year}
+\def\heute{\number\day.\ \ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi
+ \ \number\year}
+\def\todayshort{\calnumber\year-\calnumber\month-\calnumber\day}
+\def\heutekurz{\calnumber\day.\calnumber\month.\calnumber\year}
+\def\calnumber#1{\count1=#1\divide\count1 by 100\multiply\count1 by 100%
+ \count2=#1\advance\count2 by-\count1 \ifnum10>\count2 0\fi\number\count2}
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\smallskipamount=.5\parskip % These values are used by the
+ % letter macros.
+\medskipamount=\parskip
+\bigskipamount=2\parskip
+
+\ps@plain % 'plain' page style
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column
+\@fileswfalse % Inhibits writing of .AUX file.
+
+\if@german % german option
+ \input german.sty\relax
+\fi
+
+\endinput
diff --git a/macros/latex209/contrib/letters/geschbrf/liesmich.txt b/macros/latex209/contrib/letters/geschbrf/liesmich.txt
new file mode 100644
index 0000000000..e2371ff5c7
--- /dev/null
+++ b/macros/latex209/contrib/letters/geschbrf/liesmich.txt
@@ -0,0 +1,41 @@
+
+Gesch"aftsbrief Version 2.0 (c) Holm Sieber, 1. M"arz 1995
+-----------------------------------------------------------------------------
+
+Der LaTeX 2.09 Style ,,geschbrf.sty'' ist eine direkte Erweiterung des
+Styles ,,dinbrief.sty'' von Rainer Sengerling. Die wesentliche Arbeit ist
+bereits im DIN Brief Style geleistet worden.
+
+Mit diesem Style k"onnen mit LaTeX
+
+- Briefe nach der DIN 5008 auf vordruckloses A4 Papier geschrieben
+ werden,
+- Briefe auf Formbl"atter f"ur Gesch"aftsbriefe nach der DIN 676
+ der Form A oder Form B geschrieben werden,
+- oder es k"onnen Briefe auf einfaches A4 Papier einschlie"slich
+ der Vordruckangaben erzeugt werden.
+
+Damit k"onnen also professionelle Briefe nach den DIN auf ,,vorgedrucktem
+Briefpapier'' erzeugt werden, ohne da"s entsprechende Vordrucke von einer
+Druckerei angefertigt werden m"ussen.
+
+Das Paket umfa"st folgende Dateien:
+
+readme.1st diese Datei,
+geschbrf.sty das Stylefile,
+gb_bsp.dvi Beispiele f"ur mit diesem Style erzeugte Briefe,
+gb_bsp.tex die Quellen dazu,
+gb_bsp.sty die f"ur die Beispiele modifizierte Datei geschbrf.sty,
+gb_doc.tex die Dokumentation des Styles,
+dinbrief.zip der Style von Rainer Sengerling.
+
+Die Modifikation f"ur das Beispiel beinhaltet nur die Definition eines
+Briefkopfes und eines Brieffu"ses im Stylefile.
+
+Der Autor ist, soweit es m"oglich ist, gerne bereit, Fehler zu entfernen
+und den Style auf Wunsch zu erweitern. Dazu kann er unter den unten
+angegebenen Adressen erreicht werden.
+
+Holm Sieber E-Mail: h.sieber@mathematik.tu-chemnitz.de
+Heinrich-Heine-Stra"se 7
+09577 Niederwiesa
diff --git a/macros/latex209/contrib/letters/gletter/gletter.sty b/macros/latex209/contrib/letters/gletter/gletter.sty
new file mode 100644
index 0000000000..8cc471c509
--- /dev/null
+++ b/macros/latex209/contrib/letters/gletter/gletter.sty
@@ -0,0 +1,768 @@
+
+%*****************************************************************************
+%
+% Modul : gletter.sty
+% Author : Olaf Buckow, EMail: falo@uni-paderborn.de
+% Date : 4.06.93
+%
+% Contents : Dokumentenstil f"ur Briefe
+% entwickelt aus letter.sty vom 25. M"arz 1992 (L. Lamport)
+% und dinbrief.sty vom 11. Mai 1992 (R. Sengerling)
+%
+% Last Modified : siehe \filedate
+%
+%*****************************************************************************
+
+\def\fileversion{1.3}
+\def\filedate{25. November 1993}
+
+\typeout{Document Style `gletter' von O. Buckow,
+ Version \fileversion\space vom \filedate}
+
+%% Der Befehlssatz gliedert sich in Standardbefehle, modifizierte Befehle
+%% und zus"atzliche Befehle, wobei erstere nat"urlich auch (intern)
+%% modifiziert sind!
+%
+% \location{raum_nr} ist nicht implementiert.
+% \name{absendername} ist nicht implementiert.
+%
+% Standardbefehle:
+% ~~~~~~~~~~~~~~~~
+%
+% \makelabels % zur Erzeugung von Adre"saufklebern.
+% \signature{absendername} % "Kaiser Wilhelm" in Klarschrift.
+% \address{absenderanschrift}
+% \telephone{tel_nr}
+% \opening{anrede} % Hi Folks
+% \closing{gru"sformel} % und tsch"u"s. \opening und \closing sind wie
+% \begin{document}, \end{document}, \begin{letter} sowie \end{letter}
+% zwingend notwendig!
+% \ps % erm"oglicht weiteren Text nach dem
+% \closing Befehl. Ein "PS:" mu"s ggf. selbst hinzugef"ugt werden.
+% \encl{anlagenliste} % KEINE Ausgabe von \enclname!
+% \encl kann/mu"s VOR dem \closing Befehl auftreten, da \encl "uber
+% diesen ausgegeben wird.
+% \cc{verteilerliste} % \underline{\ccname:}\\[.3ex] wird vor
+% der `verteilerliste' ausgegeben. Ausgabe erfolgt an der Definition-
+% stelle. \cc darf als Parameter f"ur `anschrift_ohne_ort' verwendet
+% werden.
+%
+% modifizierte Befehle:
+% ~~~~~~~~~~~~~~~~~~~~~
+%
+% \begin{letter}[postvermerk][anrede]{empf"angeranschrift_ohne_ort}{ort}
+% brieftext \end{letter}
+% zus"atzliche Parameter `postvermerk', `anrede' (optional) und `ort'.
+% `postvermerk' ist f"ur Eintr"age der Art Einschreiben oder
+% Eilbrief, `anrede' f"ur Eintr"age der Art Firma/Frau/Herr gedacht.
+%
+%
+% zus"atzliche Befehle (bzw. Optionen, Ma"se etc.):
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+%
+% \window % f"ur Fensterbriefumschl"age.
+% \nowindow % f"ur normale Briefe; Voreinstellung.
+% \phonesymbol % statt \phonename wird ein Telefonsymbol
+% verwendet. Setzt den wasy-Zeichensatz voraus!
+% \nophonesymbol % Voreinstellung.
+% \citytodate{text} % f"ur Ortsangaben zum Datum, z.B. `Ort, den'.
+% \yref{ihr_zeichen}
+% \ymail{ihre_nachricht_vom}
+% \myref{unser_zeichen}
+% \subject{betreff_text}
+% \enclright % plaziert die Anlagen rechts in H"ohe
+% der `gru"sformel'.
+% \noenclright % Anlagen unter den Text; Voreinstellung.
+% \info{infotext} % Der `infotext' wird auf der 1. Seite im
+% Fu"s abgelegt; z.B. Bankverbindung.
+% \labelhight % legt die H"ohe des Adre"saufklebers fest.
+% \labelhight ist mit 4.1cm vordefiniert.
+%
+% Die Dokumentenstiloption `norm' wird unterst"utzt.
+
+
+%*****************************************************************************
+%
+% i.a. werden nur deutsche Briefe geschrieben
+%
+\newif\if@german\@germantrue
+\def\ds@german{\typeout{}%
+ \typeout{Explizite Angabe der Option `german' nicht erforderlich!}%
+ \typeout{}}
+\input german.sty
+
+\let\german@save=\captionsgerman
+\def\captionsgerman{\german@save
+ \def\phonename{Tel.} % neue Namensbefehle zur Erg"anzung der
+ \def\yrefname{Ihr Zeichen} % \captions_SPRACHE Befehle
+ \def\ymailname{Ihre Nachricht vom}
+ \def\myrefname{Unser Zeichen}
+ \def\subjectname{}} % wer will: "Betreff"
+
+\let\english@save=\captionsenglish
+\def\captionsenglish{\english@save
+ \def\phonename{Phone}
+ \def\yrefname{Your Ref.}
+ \def\ymailname{Your letter from}
+ \def\myrefname{Our Ref.}
+ \def\subjectname{}} % wer will "Subject"
+
+\let\french@save=\captionsfrench
+\def\captionsfrench{\french@save
+ \def\phonename{T\'el\'ephone}
+ \def\yrefname{Votre r\'ef\'erence}
+ \def\ymailname{Votre courrier en date du}
+ \def\myrefname{Notre r\'ef\'erence}
+ \def\subjectname{}} % wer will: "Objet"
+
+\let\captionsaustrian=\captionsgerman
+\let\captionsUSenglish=\captionsenglish
+
+\captionsgerman
+
+
+%*****************************************************************************
+%
+\def\@ptsize{0} % default 10pt-Schrift
+\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt-Schrift
+\@namedef{ds@12pt}{\def\@ptsize{2}} % 12pt-Schrift
+\@namedef{ds@norm}{\def\@ptsize{3}} % Norm-Schrift (11pt spezial)
+
+\def\ds@twoside{\@twosidetrue}
+
+\def\ds@draft{\overfullrule 5\p@}
+
+\@options
+
+
+%*****************************************************************************
+%
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Grundzeilenabstand 1/6in = 4,23mm (DIN 2107, 2142)
+\newdimen\GZA
+\GZA=1in \divide\GZA by 6
+
+
+\ifcase \@ptsize\relax % 10pt-Schrift
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5\p@ plus3\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 3\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 11pt-Schrift
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\or % 12pt-Schrift
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+\abovedisplayskip 12\p@ plus3\p@ minus7\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini
+\parsep 4.5\p@ plus2\p@ minus\p@
+ \itemsep \parsep
+ \topsep 9\p@ plus3\p@ minus5\p@}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\or % Norm-Option (DIN 2107, 2142)
+
+\def\@normalsize{\@setsize\normalsize{\GZA}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus 2\p@ minus 4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus1\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\fi
+
+
+\def\label@size{\@setsize\xipt{13.6pt}\xipt\@xipt} % feste Schriften
+\def\retaddr@size{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\let\info@size\retaddr@size
+
+\normalsize
+\raggedbottom
+
+
+%*****************************************************************************
+%
+% Page Layout
+%
+\oddsidemargin 0pt
+\evensidemargin 0pt
+\marginparwidth 90pt
+\marginparsep 11pt
+\marginparpush 5pt
+\topmargin -2\GZA
+
+\headheight \GZA
+\headsep 2\GZA
+\topskip \GZA
+
+\footheight 12pt
+\footskip 25pt
+
+\textheight 56\GZA
+\textwidth 16cm
+
+\columnsep 10pt
+\columnseprule 0pt
+
+\footnotesep 12pt
+\skip\footins 10pt plus 2pt minus 4pt
+
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+
+%******************************************************************************
+%
+% \opening
+%
+% Absender und Empf"anger werden mit Hilfe der picture-Umgebung plaziert. Der
+% Nullpunkt (linke untere Ecke) des Bildes befindet sich ABSOLUT an der Stelle
+% x = \hoffset und
+% y = \voffset+\headsep+\topskip
+% Hier also bei (x,y) = (25.4mm,38.1mm), wobei standardm"a"sig
+% \hoffset=\voffset=1in angenommen wird.
+%
+\def\opening#1{\thispagestyle{firstpage}%
+ \unitlength1mm
+ \begin{picture}(0,0)
+ \put(\if@window5\else0\fi,-55){% % Empf"anger
+ \makebox(80,40)[l]{\parbox[t]{80\unitlength}{\@tocompaddress}}}
+ \if@window%
+ \put(-20,-70){\line(-1,0){3}} % Faltmarke oben
+ \put(-18,-115){\line(-1,0){5}} % Lochermarkierung
+ \put(-20,-175){\line(-1,0){3}} % Faltmarke unten
+% \multiput(0,-10)(90,0){2}{\rule{.5mm}{.5mm}} % Fenstereckpunkte oben
+ \multiput(0,-55)(90,0){2}{\rule{.5mm}{.5mm}} % Fenstereckpunkte unten
+ \put(0,-15){\@returnaddress} % Absender einzeilig
+ \else%
+ \put(0,11){\makebox[\textwidth][l]{%
+ \parbox[t]{3in}{% % Absender mehrzeilig
+ \ifx\@empty\@fromaddress\else%
+ \@fromaddress\xpar[1mm]\@telephone{\tenwy}\fi}
+ \@emptyrefmail{\hfill\@citytodate~\@date}{}}}%
+ \fi
+ \end{picture}
+ \xpar[60mm]
+ \@emptyrefmail{\if@window\mbox{}\hfill\@citytodate~\@date\xpar[\GZA]\fi}{%
+ \@refmaildate\xpar[\GZA]}%
+ \ifx\@empty\@subject\else\@subject\fi\xpar%
+ \vspace{\parskip} #1\xpar\nobreak} % Ende \opening
+
+
+\def\@returnaddress{\underline{\makebox[90mm]{%
+ \def\\{~$\cdot$~}\retaddr@size\sf\@fromaddress}}}
+
+\def\@tocompaddress{\ifx\@empty\topost\else\underline{\topost}\par\fi
+ \vspace{\GZA}\totitle\xpar\toname\par\toaddress\xpar[\GZA]\tocity}
+
+\def\@emptyrefmail#1#2{\ifx\@empty\@ymail\ifx\@empty\@myref\ifx\@empty\@yref #1
+ \else #2 \fi \else #2 \fi \else #2 \fi}
+
+\def\xpar{\@ifnextchar [{\@xpart}{\@xparf}}
+\def\@xpart[#1]{\@xparf\vspace{#1}}
+\def\@xparf{\par\vspace{-\baselineskip}\vspace{\GZA}}
+
+\def\@refmaildate{%
+ \ifx\@empty\@yref\else\@yref\hfill\fi%
+ \ifx\@empty\@ymail\else\@ymail\hfill\fi%
+ \ifx\@empty\@myref\else\@myref\hfill\fi%
+ \parbox[t]{1.4in}{\ifx\@empty\@citytodate\raggedleft\fi{%
+ \small\@citytodate}\mbox{}\par\@date}\xpar[\GZA]}
+
+
+%******************************************************************************
+%
+% \closing
+%
+\long\def\closing#1{\par\nobreak%
+ \stopbreaks
+ \noindent
+ \parbox[t]{3.5in}{\raggedright\ignorespaces #1\xpar[3\GZA]
+ \@fromsig\strut}
+ \if@enclright\hfill\parbox[t]{2in}{\@encl}
+ \else\xpar[\GZA]\@encl\fi} % Ende \closing
+
+
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+
+
+%******************************************************************************
+%
+% \letter
+%
+% #1=postvermerk, #2=anrede, #3=anschrift_ohne_ort, #4=ort
+%
+\long\def\letter{\@ifnextchar [{\@letterA}{\@letterA[]}}
+\long\def\@letterA[#1]{\@ifnextchar [{\@letterB[#1]}{\@letterB[#1][]}}
+\long\def\@letterB[#1][#2]#3#4{\newpage%
+ \c@page\@ne \interlinepenalty=200%
+ \gdef\topost{#1} \gdef\totitle{#2} \gdef\tocity{#4}%
+ \@processto{\leavevmode\ignorespaces #3}} % Ende \letter
+
+
+\long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
+ \else \@yproc #1@@@\fi}
+\long\def\@xproc #1\\#2@@@{\gdef\toname{#1}\gdef\toaddress{#2}}
+\long\def\@yproc #1\\#2@@@{\gdef\toaddress{#2}}
+
+
+%******************************************************************************
+%
+% \endletter
+%
+\def\endletter{\stopletter\@@par\pagebreak\@@par
+ \if@filesw
+ \begingroup
+ \let\\=\relax
+ \def\protect##1{\string##1\space}%
+ \immediate\write\@auxout{\string\mlabel{\protect\@returnaddress}{%
+ \protect\@tocompaddress}}%
+ \endgroup
+ \fi} % Ende \endletter
+
+
+\def\mlabel#1#2{\setbox0\vbox{#1\\[3mm]\hspace*{5mm}%
+ \parbox[b]{80mm}{\strut\ignorespaces #2}}%
+ \vbox to \labelhight{\vss \box0 \vss}}
+
+\def\stopletter{}
+
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200\relax}}
+
+
+%******************************************************************************
+%
+% Benutzerbefehle
+%
+\def\makelabels{\@fileswtrue}
+
+\def\signature#1{\def\@fromsig{#1}}
+\def\@fromsig{}
+
+\long\def\address#1{\def\@fromaddress{#1}}
+\def\@fromaddress{}
+
+\def\telephone#1{\def\@test{#1}
+ \ifx\@empty\@test\def\@telephone##1{}\else
+ \def\@telephone##1{\if@phonesymbol{##1\symbol{7}}\else
+ \phonename:\fi~#1}
+ \fi}
+\def\@telephone#1{}
+
+\newif\if@phonesymbol \@phonesymbolfalse
+\def\phonesymbol{\@phonesymboltrue
+ \font\egtwy = wasy8
+ \font\tenwy = wasy10}
+\def\nophonesymbol{\@phonesymbolfalse}
+
+\def\citytodate#1{\def\@citytodate{#1}}
+\def\@citytodate{}
+
+\def\info#1{\def\@info{#1}}
+\def\@info{}
+
+\def\subject#1{\def\@test{#1}
+ \ifx\@empty\@test\def\@subject{}\else\def\@subject{%
+ \ifx\@empty\subjectname\else\underline{\subjectname:} \fi {#1}}
+ \fi}
+\def\@subject{}
+
+\def\yref#1{\def\@test{#1}
+ \ifx\@empty\@test\def\@yref{}\else\def\@yref{%
+ \parbox[t]{1in}{{\small\sl\yrefname}\mbox{}\par #1}}
+ \fi}
+\def\@yref{}
+
+\def\ymail#1{\def\@test{#1}
+ \ifx\@empty\@test\def\@ymail{}\else\def\@ymail{%
+ \parbox[t]{1.5in}{{\small\sl\ymailname}\mbox{}\par #1}}
+ \fi}
+\def\@ymail{}
+
+\def\myref#1{\def\@test{#1}
+ \ifx\@empty\@test\def\@myref{}\else\def\@myref{%
+ \parbox[t]{1in}{{\small\sl\myrefname}\mbox{}\par #1}}
+ \fi}
+\def\@myref{}
+
+\newif\if@window \@windowfalse
+\def\window{\@windowtrue}
+\def\nowindow{\@windowfalse}
+
+\def\ps{\par\startbreaks}
+
+\newif\if@enclright \@enclrightfalse
+\def\enclright{\@enclrighttrue}
+\def\noenclright{\@enclrightfalse}
+
+\def\cc#1{\@hangfrom{\reset@font}\rm\underline{\ccname:}\\[.3ex]%
+ \hspace*{3mm}\parbox[t]{77mm}{\ignorespaces #1\strut}\par}
+
+\def\encl#1{\def\@encl{\@hangfrom{\reset@font}\ignorespaces #1\strut\par}}
+\def\@encl{}
+
+
+%******************************************************************************
+%
+% \document
+%
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn
+ \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw
+ \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\string\startlabels\string\@startlabels}
+ \fi
+ \csname process@table\endcsname
+ \let\glb@currsize\@empty
+ \def\do##1{\let ##1\@notprerr}%
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}\@noskipsecfalse} % Ende \document
+
+
+\newcount\labelcount
+\newdimen\labelhight \labelhight 4.1cm
+
+\def\startlabels{\pagestyle{empty}
+ \labelcount \z@
+ \topmargin 2.23cm
+ \headsep \z@
+ \oddsidemargin -2cm
+ \evensidemargin -2cm
+ \textheight 5\labelhight
+ \advance \textheight by .05cm
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \textwidth 19.8cm
+ \columnsep 1.2cm
+ \label@size
+ \baselineskip \z@
+ \lineskip \z@
+ \boxmaxdepth \z@
+ \parindent \z@
+ \twocolumn\relax}
+
+\def\@startlabels{}
+
+
+%******************************************************************************
+%
+% \enddocument
+%
+\def\enddocument{\@checkend{document}\newpage\begingroup
+ \if@filesw
+ \immediate\closeout\@mainaux
+ \makeatletter\input \jobname.aux\clearpage
+ \fi\endgroup\deadcycles\z@\@@end} % Ende \enddocument
+
+
+%******************************************************************************
+%
+% Seitenstile
+%
+\def\ps@headings{\def\@oddhead{\sl \headtoname{} \ignorespaces\toname
+ \hfil \@date \hfil \pagename{} \thepage}\def\@oddfoot{}
+ \let\@evenhead\@oddhead\def\@oddfoot{}}
+
+\def\ps@empty{\def\@oddhead{}\def\@oddfoot{}
+ \def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@firstpage{\def\@oddfoot{\raisebox{-20\p@}[\z@]{%
+ \hbox to\textwidth{\info@size\sf\@info
+ \if@window \ifx\@empty\@info\hfill\else\space\fi
+ \@telephone{\egtwy}\fi\hss}}}
+ \def\@oddhead{}\def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@plain{\def\@oddhead{\rm\hfil -- \thepage\ --\hfil}\def\@oddfoot{}
+ \def\@evenfoot{}\let\@evenhead\@oddhead}
+
+
+%******************************************************************************
+%
+\parskip \baselineskip
+\parindent 0pt
+\partopsep 0pt
+
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\labelsep .5em
+\parsep 0pt
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+\def\@listI{\leftmargin\leftmargini
+% \parsep 4.5\p@ plus2\p@ minus\p@
+ \topsep 9\p@ plus3\p@ minus5\p@
+ \itemsep 4.5\p@ plus2\p@ minus\p@}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5\p@ plus2\p@ minus\p@
+% \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+% \parsep \z@ \partopsep\p@ plus\z@ minus\p@
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\m@th\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\m@th\ast$}
+\def\labelitemiv{$\m@th\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -15\p@\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15\p@}\item[]}
+\let\endverse\endlist
+
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+
+\fboxsep = 3pt
+\fboxrule = .4pt
+
+\def\footnoterule{\kern-\p@
+ \hrule width .4\columnwidth \kern .6\p@}
+
+\long\def\@makefntext#1{\noindent
+ \hangindent 5\p@\hbox to5\p@{\hss $\m@th^{\@thefnmark}$}#1}
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber=2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+
+%******************************************************************************
+%
+% Voreinstellungen
+%
+\smallskipamount=.5\parskip
+\medskipamount=\parskip
+\bigskipamount=2\parskip
+
+\@twosidefalse
+\ps@plain
+\pagenumbering{arabic}
+\onecolumn
+\@fileswfalse
+
+
+\endinput
+
+
+%******************************************************************************
+%******************************************************************************
diff --git a/macros/latex209/contrib/letters/gletter/gletterdemo.tex b/macros/latex209/contrib/letters/gletter/gletterdemo.tex
new file mode 100644
index 0000000000..246bb84b78
--- /dev/null
+++ b/macros/latex209/contrib/letters/gletter/gletterdemo.tex
@@ -0,0 +1,327 @@
+
+%*****************************************************************************
+%
+% Modul : gletterdemo.tex
+% Author : Olaf Buckow
+% Date : 22.10.93
+%
+% Contents : Demo zum Dokumentenstil `gletter'
+%
+% Last Modified :
+%
+%*****************************************************************************
+
+
+%*****************************************************************************
+\documentstyle[norm]{gletter}
+
+%%
+%% sonstige Definitionen
+%%
+\def\instr#1{{\tt\symbol{92}#1}}
+\def\emt#1{{\em #1}\/}
+
+
+%*****************************************************************************
+\begin{document}
+\thispagestyle{empty}
+
+{\huge\bf Dokumentenstil {\sl gletter}}\\[2\GZA]
+%
+Der Dokumentenstil {\sl gletter} unterst"utzt --- in alphabetischer
+Auflistung --- folgende briefspezifische Befehle und Ma"se, die im Anschlu"s
+anhand von Beispielen erl"autert werden:
+
+\begin{itemize}
+\item \instr{address\{\emt{absenderanschrift}\}}
+\item \instr{begin\{letter\}[\emt{postvermerk}][\emt{anrede}]\{%
+ \emt{empf"angeranschrift\_ohne\_ort}\}\{\emt{ort}\}} \\[\GZA]
+ \hspace*{2.8cm} \emt{brieftext und weitere befehle} \\[\GZA]
+ \instr{end\{letter\}}
+\item \instr{cc\{\emt{verteilerliste}\}}
+\item \instr{citytodate\{\emt{text}\}}
+\item \instr{closing\{\emt{gru"sformel}\}}
+\item \instr{encl\{\emt{anlagenliste}\}}
+\item \instr{enclright}
+\item \instr{GZA}
+\item \instr{info\{\emt{infotext}\}}
+\item \instr{labelhight}
+\item \instr{makelabels}
+\item \instr{myref\{\emt{unser\_zeichen}\}}
+\item \instr{noenclright}
+\item \instr{nophonesymbol}
+\item \instr{nowindow}
+\item \instr{opening\{\emt{anrede}\}}
+\item \instr{phonesymbol}
+\item \instr{ps}
+\item \instr{signature\{\emt{absendername}\}}
+\item \instr{subject\{\emt{betreff\_text}\}}
+\item \instr{telephone\{\emt{tel\_nr}\}}
+\item \instr{window}
+\item \instr{ymail\{\emt{ihre\_nachricht\_vom}\}}
+\item \instr{yref\{\emt{ihr\_zeichen}\}}
+\end{itemize}
+
+Die Dokumentenstil--Option {\tt norm} wird unterst"utzt. Hierbei handelt
+es sich um eine {\tt 11pt}--Schrift mit einem Grundzeilenabstand von
+4.23 mm (= 1\instr{GZA}).
+
+Als Seitenstile stehen {\tt empty}, {\tt headings} und {\tt plain} zur
+Verf"ugung, wobei {\tt plain} die Defaulteinstellung ist.
+
+Durch \instr{makelabels} lassen sich Adre"saufkleber erzeugen, deren H"ohe
+durch \instr{labelhight} bestimmt wird. \instr{labelhight} ist mit 4.1 cm
+vordefiniert.
+
+
+%*****************************************************************************
+%
+% Beispiel 1
+%
+%\window
+%\nowindow
+\address{G. Letter \\ Musterweg 1 \\ 12345 Musterstadt}
+\telephone{( 09876 ) 54321}
+%\phonesymbol
+%\nophonesymbol
+%\signature{G. Letter}
+%\citytodate{Musterstadt, den}
+%\date{}
+%\yref{}
+%\ymail{}
+%\myref{}
+%\encl{}
+%\enclright
+%\noenclright
+\info{Das n"achste Beispiel folgt {\tt :-)}}
+
+\begin{letter}[Einschreiben]{Letter, G. \\ Musterweg 1}{12345 Musterstadt}
+
+\subject{Beispiel 1}
+
+\opening{Hallo Leute,}
+ausgehend von den Standardeinstellungen l"a"st sich das erste
+Beispiel mit folgenden Befehlen erzeugen:
+
+\begin{verbatim}
+ \documentstyle[norm]{gletter}
+
+ \address{G. Letter \\ Musterweg 1 \\ 12345 Musterstadt}
+ \telephone{( 09876 ) 54321}
+ \info{Das n"achste Beispiel folgt {\tt :-)}}
+
+ \begin{document}
+ \begin{letter}[Einschreiben]{Letter, G. \\ Musterweg 1}{12345 Musterstadt}
+ \subject{Beispiel 1}
+
+ \opening{Hallo Leute,}
+
+ < Brieftext >
+
+ \closing{Viel Spa"s}
+ \end{letter}
+ \end{document}
+\end{verbatim}
+
+Der Briefkopf ist auch f"ur Fensterbriefumschl"age geeignet. Man mu"s nur
+direkt \underline{unter} dem Betreff--Text --- hier: Beispiel 1 --- falten.
+
+\closing{Viel Spa"s}
+\end{letter}
+
+
+%*****************************************************************************
+%
+% Beispiel 2
+%
+%\window
+%\nowindow
+\address{G. Letter \\ Musterweg 1 \\ 12345 Musterstadt}
+\telephone{( 09876 ) 54321}
+\phonesymbol
+%\nophonesymbol
+\signature{G. Letter}
+\citytodate{Musterstadt, den}
+\date{2.02.2001}
+\yref{bu/ko}
+\ymail{\today}
+%\myref{}
+\encl{\underline{Anlagen} \\ gibt es hier leider keine}
+%\enclright
+%\noenclright
+\info{}
+
+\begin{letter}[][Firma]{GLetter GmbH \\ Musterweg 1}{12345 Musterstadt}
+
+\subject{Beispiel 2}
+
+\opening{Hallo Leute,}
+ausgehend von den Standardeinstellungen l"a"st sich das zweite
+Beispiel mit folgenden Befehlen erzeugen:
+
+\begin{verbatim}
+ \documentstyle[norm]{gletter}
+
+ \address{G. Letter \\ Musterweg 1 \\ 12345 Musterstadt}
+ \telephone{( 09876 ) 54321}
+ \phonesymbol
+ \signature{G. Letter}
+ \citytodate{Musterstadt, den}
+ \date{2.02.2001}
+ \ymail{\today}
+ \encl{\underline{Anlagen} \\ gibt es hier leider keine}
+
+ \begin{document}
+ \begin{letter}[][Firma]{GLetter GmbH \\ Musterweg 1}{12345 Musterstadt}
+ \subject{Beispiel 2}
+
+ \opening{Hallo Leute,}
+
+ < Brieftext >
+
+ \closing{Viel Spa"s w"unscht}
+ \ps PS: Das n"achste Beispiel folgt {\tt :-)} \\[\GZA]
+ PPS: Ziemlich einfallslose "`PS--Meldungen"'
+ \end{letter}
+ \end{document}
+\end{verbatim}
+
+\clearpage
+Auch dieser Brief l"a"st sich problemlos f"ur Fensterbriefumschl"age
+verwenden: Das Blatt ist auf H"ohe des Datums zu knicken.
+\closing{Viel Spa"s w"unscht}
+\ps PS: Das n"achste Beispiel folgt {\tt :-)} \\[\GZA]
+ PPS: Ziemlich einfallslose "`PS--Meldungen"'
+\end{letter}
+
+
+%*****************************************************************************
+%
+% Beispiel 3
+%
+\pagestyle{headings}
+\window
+%\nowindow
+\address{G. Letter \\ Musterweg 1 \\ 12345 Musterstadt}
+\telephone{( 09876 ) 54321}
+%\phonesymbol
+\nophonesymbol
+\signature{}
+\citytodate{}
+\date{\today}
+\yref{dd/ma}
+\ymail{9.06.93}
+\myref{m/bau}
+\encl{\underline{Anlagen} \\ gibt es hier auch keine}
+\enclright
+%\noenclright
+\info{Bankverbindung: Sparkasse Musterstadt, Kto--Nr: 123 456 789,
+ BLZ: 700 500 00\hfill}
+
+\begin{letter}{GLetter GmbH \\ --- Abteilung ZFE 63 --- \\
+ Musterweg 1}{12345 Musterstadt}
+
+\subject{Beispiel 3}
+
+\opening{Hallo Leute,}
+ausgehend von den Standardeinstellungen l"a"st sich das dritte
+Beispiel mit folgenden Befehlen erzeugen:
+
+\begin{verbatim}
+ \documentstyle[norm]{gletter}
+
+ \pagestyle{headings}
+ \window
+ \address{G. Letter \\ Musterweg 1 \\ 12345 Musterstadt}
+ \telephone{( 09876 ) 54321}
+ \yref{dd/ma}
+ \ymail{9.06.93}
+ \myref{m/bau}
+ \encl{\underline{Anlagen} \\ gibt es hier auch keine}
+ \enclright
+ \info{Bankverbindung: Sparkasse Musterstadt, Kto--Nr: 123 456 789,
+ BLZ: 700 500 00\hfill}
+
+ \begin{letter}{GLetter GmbH \\ --- Abteilung ZFE 63 --- \\
+ Musterweg 1}{12345 Musterstadt}
+
+ \subject{Beispiel 3}
+
+ \opening{Hallo Leute,}
+
+ < Brieftext >
+
+ \closing{So long ...}
+ \end{letter}
+ \end{document}
+\end{verbatim}
+
+Nun mu"s erst mal daf"ur gesorgt werden, da"s hier noch ein wenig Text
+auftaucht, sonst l"a"st sich der Seitenstil {\tt headings} gar nicht
+veranschaulichen.
+
+\closing{So long ...}
+\end{letter}
+
+
+%*****************************************************************************
+%
+% Beispiel 4
+%
+\window
+%\nowindow
+\address{G. Letter \\ Musterweg 1 \\ 12345 Musterstadt}
+\telephone{}
+%\phonesymbol
+%\nophonesymbol
+\signature{\hspace*{2em} ... sagt der Autor}
+%\citytodate{}
+%\date{\today}
+\yref{}
+\ymail{}
+\myref{}
+\encl{}
+%\enclright
+%\noenclright
+\info{}
+
+\begin{letter}{\cc{An alle MitarbeiterInnen der Abteilungen \\
+ A1 \\ B2 \\ C3}}{}
+
+\subject{Beispiel 4}
+
+\opening{Hallo Leute,}
+ausgehend von den Standardeinstellungen l"a"st sich das vierte
+Beispiel mit folgenden Befehlen erzeugen:
+
+\begin{verbatim}
+ \documentstyle[norm]{gletter}
+
+ \window
+ \address{G. Letter \\ Musterweg 1 \\ 12345 Musterstadt}
+ \signature{\hspace*{2em} ... sagt der Autor}
+ \encl{\underline{Anlagen} \\ gibt es hier auch keine}
+ \enclright
+
+ \begin{letter}{\cc{An alle MitarbeiterInnen der Abteilungen \\
+ A1 \\ B2 \\ C3}}{}
+
+ \subject{Beispiel 4}
+
+ \opening{Hallo Leute,}
+
+ < Brieftext >
+
+ \closing{und tsch"u"s ...}
+ \end{letter}
+ \end{document}
+\end{verbatim}
+
+\closing{und tsch"u"s ...}
+\end{letter}
+
+\end{document}
+
+
+%*****************************************************************************
+%*****************************************************************************
diff --git a/macros/latex209/contrib/letters/mvletter.sty b/macros/latex209/contrib/letters/mvletter.sty
new file mode 100644
index 0000000000..d4fb0cbe51
--- /dev/null
+++ b/macros/latex209/contrib/letters/mvletter.sty
@@ -0,0 +1,439 @@
+% - kleinere Korrekturen, Martin Wunderli, 25.4.1991, 20.7.1991
+% - an schweizer Sichtumschlge und eigene Bedfrnisse angepat, Martin
+% Wunderli, 29. Mrz 1991. Es wird die Benutzung des DINA4-Style
+% vorausgesetzt.
+% - die Namensangaben gegen meine eigenen ausgetauscht, Stefan Lindner 16-Jun-89
+% - modifiziert fuer eigene Beduerfnisse, Lutz Birkhahn 06-Apr-89
+% Ideen kommen von H. Kopka (LaTeX -- Eine Einfuehrung), vielen durch-
+% gesehenen Briefen und von meinem Kopf...
+% HINWEIS: Dieser Style war urspruenglich nur fuer meinen privaten
+% Gebrauch bestimmt, deshalb ist die Dokumentation und Kommentierung
+% auch recht spaerlich. Es war mal geplant, eine Style-Option "private"
+% zu unterstuetzen, bisher wird jedoch nur ein \if-Makro definiert
+% (\if@private), aber nirgends abgefragt... Wer das Buch von Kopka hat,
+% kann dort eine wesentlich ausfhrlichere Beschreibung lesen.
+% - letter.sty 20-Jan-88
+
+% Fr Leute, die DINA4.STY nicht haben:
+% DINA4-Format
+%\oddsidemargin 6pt\evensidemargin 6pt\marginparwidth 48pt\marginparsep 10pt
+%\topmargin -18pt\headheight 12pt\headsep 25pt\footheight 12pt\footskip 30pt
+%\textheight 625pt\textwidth 431pt\columnsep 10pt\columnseprule 0pt
+
+\typeout{Document Style `mwletter' <20 Juli 91>.}
+\typeout{Bearbeitung fuer: Martin Wunderli}
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@twosidefalse
+\def\ds@draft{\overfullrule 5pt}
+\newif\if@german \@germanfalse
+\def\ds@german{\@germantrue}
+\newif\if@private \@privatefalse
+\def\ds@private{\@privatetrue}
+\@options
+
+\if@german\input german.sty \relax\fi
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\ifcase \@ptsize\relax
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus
+2pt\def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt\parsep
+2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt\def\@listi{\leftmargin\leftmargini \topsep 3pt plus 1pt minus 1pt\parsep
+2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\def\@listi{\leftmargin\leftmargini \topsep 6pt plus 2pt minus
+2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt\def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt\parsep
+2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt\def\@listi{\leftmargin\leftmargini \parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\def\@listi{\leftmargin\leftmargini \topsep 6pt plus 2pt minus
+2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+\normalsize
+
+\oddsidemargin 5mm \evensidemargin 5mm
+\marginparwidth 90pt \marginparsep 11pt \marginparpush 5pt
+\topmargin -14mm \headheight 30pt \headsep 20pt \footheight 12pt \footskip 20pt
+\textheight 21cm \textwidth 14.8cm \columnsep 10pt \columnseprule 0pt
+\raggedbottom
+\footnotesep 12pt \skip\footins 10pt plus 2pt minus 4pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+
+% \newdimen\longindentation
+% \longindentation=.5\textwidth
+% \newdimen\indentedwidth
+% \indentedwidth=\textwidth
+% \advance\indentedwidth -\longindentation
+
+\newlength{\rightfield} \rightfield=63mm
+\newlength{\leftfield} \leftfield=\textwidth
+ \advance\leftfield by -\rightfield
+\newlength{\hackleftfield} \hackleftfield=\leftfield
+ \advance\hackleftfield by -1.5mm
+
+\newsavebox{\firm} \newsavebox{\firmaddress}
+\newsavebox{\firmreturn}
+
+\sbox{\firm}{\normalsize\rm Martin Wunderli}
+
+\sbox{\firmaddress}{
+ \footnotesize
+ \begin{minipage}{\hackleftfield}
+ \sc
+ Martin Wunderli\\
+ Eschenweg 7\\
+ CH--8057 Z\"urich
+ \end{minipage}
+ \begin{minipage}{\rightfield}
+ \begin{tabbing}
+ Internet: \= \kill
+ Telefon: \> 01/311 89 03\\
+ Internet: \> martin.wunderli@dp.ethz.ch\\
+ Fidonet: \> 2:302/815.25
+ \end{tabbing}
+ \end{minipage}
+}
+
+\sbox{\firmreturn}
+ {\underline{\viipt\rm Martin Wunderli $\cdot$ Eschenweg 7 $\cdot$ CH--8057 Z\"urich}}
+
+\def\to@label#1#2{\setbox0\vbox{\xiipt\rm\parbox{\leftfield}{#1}\\{#2}}
+ \vbox to 3cm{\vss \box0 \vss}}
+
+%In diesem Absatz sind Aenderungen vorzunehmen:
+\def\opening#1{
+ \thispagestyle{firstpage}
+
+ \makebox[\leftfield][l]{}
+ \parbox[t]{\rightfield}{\usebox{\firmreturn}\\
+ \to@label{\ifx\@specialmail\@empty \toname
+ \else\underline{{\bf\@specialmail}}\\[1ex]\toname\fi}
+ {\toaddress}}
+
+ \vspace{1cm}
+ \parbox[t]{\leftfield}{
+ \ifx\@ymail\@empty
+ \ifx\@yref\@empty
+ \ifx\@subject\@empty
+ \makebox[\leftfield][l]{}
+ \else
+ \makebox[\leftfield][l]{}\\[7mm]
+ \fi
+ \else
+ \makebox[\leftfield][l]{\@yref}\\[7mm]
+ \fi
+ \else
+ \makebox[\leftfield][l]{\@ymail \hfill \@yref \hfill}\\[7mm]
+ \fi
+ %\makebox[0pt][r]{---\hspace{1.6cm}}
+ \ifx\@subject\@empty
+ \makebox[\leftfield][l]{}
+ \else
+ \makebox[\leftfield][l]{\@subject}
+ \fi}
+ \@date\par
+ \vspace{4\parskip}
+ #1\par\nobreak
+}
+
+\long\def\closing#1{\par\nobreak\vspace{\parskip}
+ \stopbreaks
+ \noindent
+ {\raggedright
+ \ignorespaces #1\\[6\medskipamount] \ifx\@empty\fromsig
+ \fromname
+ \else \fromsig \fi\strut}
+ \par}
+
+\def\ps{\par\startbreaks}
+\def\cc#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom
+ {\rm\if@german Verteiler: \else cc: \fi}\ignorespaces #1\strut}\par}
+\def\encl#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom
+ {\rm\if@german Anlagen: \else encl: \fi}\ignorespaces #1\strut}\par}
+\def\stopletter{}
+
+\if@german
+ \def\yref#1{\def\@yref{\parbox[t]{.5\leftfield}
+ {\scriptsize Ihre Zeichen:\\ \normalsize #1}}}
+ \def\ymail#1{\def\@ymail{\parbox[t]{.5\leftfield}
+ {\scriptsize Ihre Nachricht vom:\\ \normalsize #1}}}
+ \def\subject#1{\def\@subject{{\bf #1}}}
+\else
+ \def\yref#1{\def\@yref{\parbox[t]{.5\leftfield}
+ {\scriptsize Your Ref.:\\ \normalsize #1}}}
+ \def\ymail#1{\def\@ymail{\parbox[t]{.5\leftfield}
+ {\scriptsize Your Mail's Date:\\ \normalsize #1}}}
+ \def\subject#1{\def\@subject{{\sl Subject\/}: #1}}
+\fi
+\def\@yref{} \def\@ymail{} \def\@myref{} \def\@subject{}
+
+\def\specialmail#1{\def\@specialmail{#1}}
+\def\@specialmail{}
+\def\email#1{\def\@email{#1}}
+\def\@email{}
+\def\mailbox#1{\def\@mailbox{#1}}
+\def\@mailbox{}
+
+\def\returnaddress{}
+\newcount\labelcount
+
+\def\startlabels{\labelcount=0 \baselineskip=0pt \lineskip=0pt
+\pagestyle{empty}
+\let\@texttop=\relax
+\topmargin -50pt
+\headsep 0pt
+\oddsidemargin -35pt
+\evensidemargin -35pt
+\textheight 10in
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 550pt
+\columnsep 25pt
+\xpt
+\baselineskip=0pt
+\lineskip=0pt
+\boxmaxdepth=0pt
+\parindent=0pt \twocolumn\relax}
+\def\mlabel#1#2{\setbox0\vbox{\parbox[b]{3.6in}{\strut\ignorespaces #2}}
+ \vbox to 2in{\vss \box0 \vss}}
+
+
+\long\def\letter#1{\newpage
+ \c@page\@ne
+ \interlinepenalty=200 \@processto{#1}}
+\def\endletter{\stopletter\@@par\pagebreak\@@par
+ \if@filesw
+ \begingroup
+ \def\protect{\string}
+ \let\\=\relax
+ \def\protect##1{\string##1\space}
+ \immediate\write\@auxout{\string\mlabel{\returnaddress}{\toname
+ \\\toaddress}}
+ \endgroup
+ \fi}
+\long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
+ \else \@yproc #1@@@\fi}
+\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200}}
+\def\name#1{\def\fromname{#1}}
+\def\fromname{}
+\def\signature#1{\def\fromsig{#1}}
+\def\fromsig{}
+\long\def\address#1{\def\fromaddress{#1}}
+\def\fromaddress{}
+\def\location#1{\def\fromlocation{#1}}
+\def\fromlocation{}
+\def\telephone#1{\def\telephonenum{#1}}
+\def\telephonenum{}
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\string\startlabels\string\@startlabels}\fi
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+\def\enddocument{\@checkend{document}\newpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\makeatletter\input \jobname.aux\clearpage
+\fi\endgroup\deadcycles\z@\@@end}
+
+\def\makelabels{\@fileswtrue}
+\def\@startlabels{}
+
+\def\ps@headings{\headheight25pt
+ \def\@oddhead{\usebox{\firm} \hrulefill\ \@date\ \hrulefill\
+ \if@german Seite \else Page \fi\thepage}
+ \def\@oddfoot{}}
+\def\ps@empty{\def\@oddhead{}\def\@oddfoot{}\def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@firstpage{\headheight36pt
+ \def\@oddhead{\parbox{\textwidth}{\usebox{\firmaddress}\par}}
+ \def\@oddfoot{}\def\@evenhead{}\def\@evenfoot{}}
+\def\ps@plain{\def\@oddhead{}\def\@oddfoot{\rm\hfil\thepage
+ \hfil}\def\@evenhead{}\let\@evenfoot\@oddfoot}
+
+\parskip .7em \parindent 0pt \topsep .4em \partopsep 0pt \itemsep .4em
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+\let\@listi\relax
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep .2em
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -15pt\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15pt}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@}
+
+\long\def\@makefntext#1{\noindent \hangindent 5pt\hbox
+ to 5pt{\hss $^{\@thefnmark}$}#1}
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\if@german \else
+ \def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\fi
+
+\smallskipamount=.5\parskip \medskipamount=\parskip
+\bigskipamount=2\parskip
+\ps@plain \pagenumbering{arabic} \onecolumn \@fileswfalse
diff --git a/macros/latex209/contrib/letters/serie/serienbr.sty b/macros/latex209/contrib/letters/serie/serienbr.sty
new file mode 100644
index 0000000000..bcc8aa97dc
--- /dev/null
+++ b/macros/latex209/contrib/letters/serie/serienbr.sty
@@ -0,0 +1,320 @@
+%Serienbrief-Style 0.53á
+
+\typeout{Serienbriefstyle 0.53á vom 6.3.94 von Gundolf Frank}
+
+%Hier die Adressendatei „ndern:
+\def\adressendateiname{brief.adr}
+
+\def\greatings{}
+
+\def\optional#1#2[#3]{%
+ \escapechar=-1
+ \if\def#1%
+ \edef#2{\futurelet\noexpand\next
+ \csname\string#2@@body\endcsname}
+ \expandafter\edef\csname\string#2@@body\endcsname{%
+ \noexpand\if[\noexpand\next
+ \def\noexpand\next{\csname\string#2@@do\endcsname}%
+ \noexpand
+ \else
+ \def\noexpand\next
+ {\csname\string#2@@do\endcsname
+ [\expandafter
+ \noexpand\csname\string#2@@default\endcsname]}%
+ \noexpand
+ \fi
+ \noexpand\next}%
+ \expandafter\noexpand\expandafter
+ \def\csname\string#2@@default\endcsname{#3}%
+ \edef\optional@continue{
+ \expandafter\noexpand\expandafter
+ \def\csname\string#2@@do\endcsname[####1]}%
+ \escapechar="5C\relax
+ \let\next=\optional@continue
+ \else
+ \escape="5C
+ \errmessage{\string\def fehlt nach \string\optional}
+ \let\next=\relax
+ \fi
+ \next}
+
+\long\def\text#1{\def\serientext{#1}}
+
+\optional\def\serienbrief[{}]#2{
+ \def\serienbriefuebergabe{#1}
+ \def\zwparameter{#2}
+ \ifx\zwparameter\empty
+ \errhelp{Bei \serienbrief[Optionen]{suchkriterium} mu\ss{} ein Suchkriterium angegeben werden.}
+ \errmessage{Es wurde kein Suchkriterium angegeben!}
+ \fi
+ \openin7=\adressendateiname
+ \loop
+ \def\ende{}
+ \def\zeile{}
+ \def\test{---}
+ \endlinechar=-1
+ \read7to\zeile
+ \ifx\zeile\test
+ \read7to\nachname
+ \read7to\vorname
+ \read7to\firma
+ \read7to\abteilung
+ \read7to\strasse
+ \read7to\ort
+ \read7to\tel
+ \read7to\cosename
+ \ifx\cosename\empty
+ \def\cosename{\vorname}
+ \fi
+ \read7to\geburtsdatum
+ \read7to\paraer
+ \read7to\parazw
+ \read7to\geschlecht
+ \read7to\kontakt
+ \endlinechar=`\^^M
+ \ifx#1\empty
+ \ifx\zwparameter\nachname
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Nachname}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\nachname
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Vorname}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\vorname
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Firma}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\firma
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Abteilung}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\abteilung
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Strasse}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\strasse
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Ort}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\ort
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Telefonnummer}
+ \ifx\serienbriefuebergabe\bedingung%
+ \ifx\zwparameter\tel
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Faxnummer}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\fax
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{E-Mail}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\email
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Geburtsdatum}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\Geburtsdatum
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Cosename}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\cosename
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Zusatz 1}
+ \ifx\serienbriefuebergabe\bedingung%
+ \ifx\zwparameter\paraer%
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Zusatz 2}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\parazw
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Geschlecht}
+ \ifx\serienbriefuebergabe\bedingung
+ \ifx\zwparameter\geschlecht
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\bedingung{Kontakt}
+ \ifx\serienbriefuebergabe\bedingung%
+ \ifx\zwparameter\kontakt%
+ \def\ende{gleich}
+ \fi
+ \fi
+ \def\test{gleich}
+ \ifx\ende\test
+ \def\test{n}%
+ \ifx\geschlecht\test%
+ \def\@uebergabeletter{%
+ \firma\\
+ \ifx\abteilung\empty%
+ \\
+ \else
+ Abteilung \abteilung\\
+ \fi
+ \strasse\\
+ \ort
+ }
+ \fi
+ \def\test{w}%
+ \ifx\geschlecht\test%
+ \ifx\firma\empty%
+ \def\@uebergabeletter{%
+ Frau\\
+ \vorname\space\nachname\\
+ \strasse\\
+ \ort
+ }
+ \else
+ \def\@uebergabeletter{%
+ \firma\\
+ \ifx\abteilung\empty%
+ \else
+ Abteilung \abteilung\\
+ \fi
+ \ifx\nachname\empty
+ \ \\
+ \else
+ z.H. Frau \nachname\\
+ \fi
+ \strasse\\
+ \ort
+ }
+ \fi
+ \fi
+ \def\test{m}%
+ \ifx\geschlecht\test%
+ \ifx\firma\empty
+ \def\@uebergabeletter{%
+ Herr\\
+ \vorname\space\nachname\\
+ \strasse\\
+ \ort
+ }
+ \else
+ \def\@uebergabeletter{%
+ \firma\\
+ \ifx\abteilung\empty%
+ \else
+ Abteilung \abteilung\\
+ \fi
+ \ifx\nachname\empty
+ \ \\
+ \else
+ z.H. Herr \nachname\\
+ \fi
+ \strasse\\
+ \ort
+ }
+ \fi
+ \fi
+ \typeout{}
+ \typeout{Anschrift gefunden:}
+ \if\firma\empty
+ \else
+ \typeout{\firma}
+ \fi
+ \if\abteilung\empty
+ \else
+ \typeout{Abteilung\space\abteilung}
+ \fi
+ \typeout{\vorname\space\nachname}
+ \typeout{\strasse}
+ \typeout{\ort}
+ \typeout{}
+ \begin{letter}{\@uebergabeletter}
+ \def\test{herzlich}
+ \ifx\test\kontakt
+ \def\test{m}
+ \ifx\test\geschlecht
+ \def\@uebergabe{
+ Lieber \cosename,
+ }
+ \fi
+ \def\test{w}
+ \ifx\test\geschlecht
+ \def\@uebergabe{
+ Liebe \cosename,
+ \fi
+ }
+ \fi
+ \def\test{n}
+ \ifx\test\geschlecht
+ \def\@uebergabe{
+ Liebe Damen und Herren,
+ }
+ \fi
+ \fi
+ \def\test{formal}
+ \ifx\test\kontakt
+ \def\test{m}
+ \ifx\test\geschlecht
+ \def\@uebergabe{
+ Sehr geehrter \nachname,
+ }
+ \fi
+ \def\test{w}
+ \ifx\test\geschlecht
+ \def\@uebergabe{
+ Sehr geehrte Frau \nachname,
+ }
+ \fi
+ \def\test{n}
+ \ifx\test\geschlecht
+ \def\@uebergabe{
+ Sehr geehrte Damen und Herren,
+ }
+ \fi
+ \fi
+ \opening{\@uebergabe}
+ \serientext
+ \ifx\greatings\empty
+ \def\test{herzlich}
+ \ifx\test\kontakt
+ \closing{Mit herzlichen Gráen}
+ \fi
+ \def\test{formal}
+ \ifx\test\kontakt
+ \closing{Mit freundlichen Gráen}
+ \fi
+ \else
+ \closing{\greatings}
+ \fi
+ \end{letter}
+ \def\ende{}
+ \fi
+ \fi
+ \ifeof7
+ \def\ende{eof}
+ \fi
+ \ifx\ende\empty
+ \repeat
+ \closein7
+}
+\endinput \ No newline at end of file
diff --git a/macros/latex209/contrib/letters/stbrief/defuser.sty b/macros/latex209/contrib/letters/stbrief/defuser.sty
new file mode 100644
index 0000000000..6c56bf433c
--- /dev/null
+++ b/macros/latex209/contrib/letters/stbrief/defuser.sty
@@ -0,0 +1,544 @@
+% DOCUMENT OPTION STYLE -- Released 15-FEB-1992
+%
+% This style has to be used as an style only
+% in connection with the stbrief.sty to define
+% all variables nescessary for this style.
+%
+% THE STYLE IS INCLUDED BY THE STBRIEF.STY BY ITSELF.
+% DON'T TRY TO MENTION IT AS A OPTION STYLE IN \DOCUMENTSTYLE[]{}.
+%
+% Copyright (c) 1991,1991 by Steffen Steinhaeuser
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+%
+% If you make any improvements, I'd like to hear about them.
+%
+% Steffen Steinh\"auser
+% Landwehrstr. 47
+% 6100 Darmstadt
+% Federal Republic of Germany
+% steinhaeuser@ddagsi5.bitnet
+% steffen_steinhaeuser@mz.maus.de
+%
+\def~{ }
+\typeout{-------------------------------------------------------}
+\typeout{| DefUser.STY V1.1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|}
+\typeout{| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c'15-Feb-91 Stone |}
+\typeout{-------------------------------------------------------}
+\typeout{}
+\typeout{Achtung:}
+\typeout{Auf den IBM (Komp.) und Atari Rechnern ist auf Umlaute und 'sz' nicht}
+\typeout{speziell zu achten. Falls es doch Probleme mit ihnen gibt, gilt:}
+\typeout{Alle Umlaute mit \string\"~ und das 'sz' mit \string\ss\string~{}~ angeben!!!}
+%
+% eigene Definitionen
+%
+\newif\ifdefault
+\defaultfalse
+\def\@empty{ }
+
+\newif\ifempty
+\def\look#1#2@@@{
+\if #1\@empty
+ \emptytrue
+\else
+ \emptyfalse
+\fi
+}
+
+\def\firstonly#1#2@@@{\def\antwort{#1}}
+%
+% Erstellen des neuen Benutzerdefinitionsfiles
+%
+\openin1\filename.sty
+\ifeof1
+ \closein1\relax
+\else
+ \closein1\relax
+ \defaulttrue
+ \typeout{}
+ \typeout{Die Angaben der Datei \filename.sty~werden als Defaulteingaben}
+ \typeout{angezeigt und koennen mit <RETURN> bestaetigt und uebernommen werden.}
+ \typeout{}
+ \input{\filename.sty}
+\fi
+%
+% Erstellen eines BackUpFiles der alten Daten
+%
+\ifdefault
+\newwrite\datafile
+\immediate\openout\datafile=\filename.bak
+%
+% Erstellen eines Headers fuer den Defuser.Bak-Datei
+%
+\immediate\write\datafile{\string\message{-- Benutzerspezifische Daten fuer den STBrief.STY}}
+\immediate\write\datafile{\string\defusertrue}
+\immediate\write\datafile{\string\name{\fromname}}
+\immediate\write\datafile{\string\signature{\fromsig}}
+\immediate\write\datafile{\string\strasse{\fromstreet}}
+\immediate\write\datafile{\string\stadt{\fromcity}}
+\immediate\write\datafile{\string\telefon{\telephonenum}}
+\immediate\write\datafile{\string\faxnummer{\faxnum}}
+\immediate\write\datafile{\string\bank{\bankname}}
+\immediate\write\datafile{\string\kontonr{\kontono}}
+\immediate\write\datafile{\string\bankleitzahl{\bankzahl}}
+\immediate\write\datafile{\string\logo{\fromlogo}}
+\immediate\write\datafile{\string\smallogo{\sfromlogo}}
+\iftoplogo
+ \immediate\write\datafile{\string\toplogotrue}
+\else
+ \immediate\write\datafile{\string\toplogofalse}
+\fi
+\iftoprule
+ \immediate\write\datafile{\string\topruletrue}
+\else
+ \immediate\write\datafile{\string\toprulefalse}
+\fi
+\ifsmallfrom
+ \immediate\write\datafile{\string\smallfromtrue}
+\else
+ \immediate\write\datafile{\string\smallfromfalse}
+\fi
+\iffrom
+ \immediate\write\datafile{\string\fromtrue}
+\else
+ \immediate\write\datafile{\string\fromfalse}
+\fi
+\ifbottomrule
+ \immediate\write\datafile{\string\bottomruletrue}
+\else
+ \immediate\write\datafile{\string\bottomrulefalse}
+\fi
+\ifbankv
+ \immediate\write\datafile{\string\bankvtrue}
+\else
+ \immediate\write\datafile{\string\bankvfalse}
+\fi
+%
+% Schliessen und Ende des BackUps
+%
+\immediate\closeout\datafile
+\fi
+%
+% Oeffnen des Ausgabefiles
+%
+\newwrite\datafile
+\immediate\openout\datafile=\filename.sty
+%
+% Keine Reaktionen auf Umlaute, d.h. keine voreilige Expansion
+%
+\originalTeX
+%
+% Erstellen eines Headers fuer den Defuser.Sty-Datei
+%
+\immediate\write\datafile{\string\message{-- Benutzerspezifische Daten fuer den STBrief.STY}}
+\immediate\write\datafile{\string\defusertrue}
+%
+% Abspeichern der ggf. alten Daten in eine .bak-Datei
+%
+%(in Vorbereitung)
+%
+%
+% Abfrage der Benutzerdaten und -wuensche
+%
+\typeout{}
+\typeout{Vor- und Nachnamen~:}
+\ifdefault
+ \let\antwort\fromname
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN > belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\fromname
+ \fi
+\else
+ \typein[\antwort]{(Hier muss eine Texteingabe erfolgen!)}
+\fi
+\expandafter\look\antwort~~@@@
+\ifempty
+ \def\antwort{?!?}
+\fi
+\immediate\write\datafile{\string\name{\antwort}}
+
+\typeout{}
+\typeout{Unterschrift~~~~~~~:}
+\ifdefault
+ \let\antwort\fromsig
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN > belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\fromsig
+ \fi
+\else
+ \typein[\antwort]{}
+\fi
+\expandafter\look\antwort~~@@@
+\ifempty\else
+ \immediate\write\datafile{\string\signature{\antwort}}
+\fi
+
+\typeout{}
+\typeout{Name der Strasse~~~:}
+\ifdefault
+ \let\antwort\fromstreet
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN> belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\fromstreet
+ \fi
+\else
+ \typein[\antwort]{(Hier muss eine Texteingabe erfolgen!)}
+\fi
+\expandafter\look\antwort~~@@@
+\ifempty
+ \def\antwort{?!?}
+\fi
+\immediate\write\datafile{\string\strasse{\antwort}}
+
+\typeout{}
+\typeout{Name des Ortes~~~~~:}
+\ifdefault
+ \let\antwort\fromcity
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN> belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\fromcity
+ \fi
+\else
+ \typein[\antwort]{(Hier muss eine Texteingabe erfolgen!)}
+\fi
+\expandafter\look\antwort~~@@@
+\ifempty
+ \def\antwort{?!?}
+\fi
+\immediate\write\datafile{\string\stadt{\antwort}}
+
+\typeout{}
+\typeout{Telefonnummer~~~~~~:}
+\ifdefault
+ \let\antwort\telephonenum
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN> belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\telephonenum
+ \fi
+\else
+ \typein[\antwort]{(Hier muss eine Texteingabe erfolgen!)}
+\fi
+\expandafter\look\antwort~~@@@
+\ifempty
+ \def\antwort{?!?}
+\fi
+\immediate\write\datafile{\string\telefon{\antwort}}
+
+\typeout{}
+\typeout{Telefaxnummer~~~~~~:}
+\ifdefault
+ \let\antwort\faxnum
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN> belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\faxnum
+ \fi
+\else
+ \typein[\antwort]{(Keine Eingabe ignoriert Faxnummereintrag im STBrief.)}
+\fi
+\immediate\write\datafile{\string\faxnummer{\antwort}}
+
+\typeout{}
+\typeout{Die Angaben zur Bank koennen weggelassen werden. Aber dann sollten}
+\typeout{Sie auch das Bankflag im folgenden auf 'AUS' (=Nein) schalten!}
+\typeout{}
+
+\typeout{Name der Bank~~~~~~:}
+\ifdefault
+ \let\antwort\bankname
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN> belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\bankname
+ \fi
+\else
+ \typein[\antwort]{(Keine Eingabe schaltet Bankverbindung im STBrieffuss aus.)}
+\fi
+\expandafter\look\antwort~~@@@
+\ifempty
+ \bankvfalse
+\else
+ \bankvtrue
+\fi
+\immediate\write\datafile{\string\bank{\antwort}}
+
+\typeout{}
+\typeout{Kontonummer~~~~~~~~:}
+\ifdefault
+ \let\antwort\kontono
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN> belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\kontono
+ \fi
+\else
+ \typein[\antwort]{(Keine Eingabe schaltet Bankverbindung im STBrieffuss aus.)}
+\fi
+\expandafter\look\antwort~~@@@
+\ifempty
+ \bankvfalse
+\fi
+\immediate\write\datafile{\string\kontonr{\antwort}}
+
+\typeout{}
+\typeout{Bankleitzahl~~~~~~~:}
+\ifdefault
+ \let\antwort\bankzahl
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN> belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\bankzahl
+ \fi
+\else
+ \typein[\antwort]{(Keine Eingabe schaltet Bankverbindung im STBrieffuss aus.)}
+\fi
+\expandafter\look\antwort~~@@@
+\ifempty
+ \bankvfalse
+\fi
+\immediate\write\datafile{\string\bankleitzahl{\antwort}}
+
+\typeout{}
+\typeout{Im folgenden koennen zwei Arten von Logos definiert werden. Sie}
+\typeout{erscheinen ggf. als Kopf des Briefes und ueber dem Adressfeld. }
+\typeout{Sind sie nicht definiert, so wird der Vor- und Nachname des}
+\typeout{Absenders dort eingesetzt.}
+\typeout{}
+
+\typeout{}
+\typeout{Kopflogo~~~~~~~~~~~:}
+\ifdefault
+ \let\antwort\fromlogo
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN> belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\fromlogo
+ \fi
+\else
+ \typein[\antwort]{}
+\fi
+\immediate\write\datafile{\string\logo{\antwort}}
+
+\typeout{}
+\typeout{Absenderlogo~~~~~~~:}
+\ifdefault
+ \let\antwort\sfromlogo
+ \typeout{Defaulteingabe~~~~~: \antwort}
+ \typein[\antwort]{(<RETURN> belaesst diese Angabe.)}
+ \expandafter\look\antwort~~@@@
+ \ifempty
+ \let\antwort\sfromlogo
+ \fi
+\else
+ \typein[\antwort]{}
+\fi
+\immediate\write\datafile{\string\smallogo{\antwort}}
+
+\def\nein{n}
+\def\ja{j}
+\def\Nein{N}
+\def\Ja{J}
+
+\typeout{}
+\typeout{Achtung:}
+\typeout{}
+\typeout{Die folgenden Fragen sind so gehalten, dass ein einfaches}
+\typeout{<Return> die Defaulteinstellung als gewuenschte uebernimmt.}
+\typeout{}
+
+\typeout{}
+\iftoplogo
+ \let\antwort\Ja
+\else
+ \let\antwort\Nein
+\fi
+\typeout{Soll das Logo oben auf den Seiten erscheinen (J/N)? [\antwort]}
+\typein[\antwort]{}
+\expandafter\look\antwort~~@@@
+\ifempty
+ \iftoplogo
+ \let\antwort\Ja
+ \else
+ \let\antwort\Nein
+ \fi
+\else
+ \expandafter\firstonly\antwort~~@@@
+\fi
+\ifx\antwort\nein\let\antwort\Nein\fi
+\ifx\antwort\Nein
+ \immediate\write\datafile{\string\toplogofalse}
+\else
+ \immediate\write\datafile{\string\toplogotrue}
+\fi
+
+\typeout{}
+\iftoprule
+ \let\antwort\Ja
+\else
+ \let\antwort\Nein
+\fi
+\typeout{Soll oben eine horizontale Linie erscheinen (J/N)? [\antwort]}
+\typein[\antwort]{}
+\expandafter\look\antwort~~@@@
+\ifempty
+ \iftoprule
+ \let\antwort\Ja
+ \else
+ \let\antwort\Nein
+ \fi
+\else
+ \expandafter\firstonly\antwort~~@@@
+\fi
+\ifx\antwort\nein\let\antwort\Nein\fi
+\ifx\antwort\Nein
+ \immediate\write\datafile{\string\toprulefalse}
+\else
+ \immediate\write\datafile{\string\topruletrue}
+\fi
+
+\typeout{}
+\ifsmallfrom
+ \let\antwort\Ja
+\else
+ \let\antwort\Nein
+\fi
+\typeout{Soll ihr Absender klein ueber der Adresse erscheinen (J/N)? [\antwort]}
+\typein[\antwort]{}
+\expandafter\look\antwort~~@@@
+\ifempty
+ \ifsmallfrom
+ \let\antwort\Ja
+ \else
+ \let\antwort\Nein
+ \fi
+\else
+ \expandafter\firstonly\antwort~~@@@
+\fi
+\ifx\antwort\nein\let\antwort\Nein\fi
+\ifx\antwort\Nein
+ \immediate\write\datafile{\string\smallfromfalse}
+\else
+ \immediate\write\datafile{\string\smallfromtrue}
+\fi
+
+\typeout{}
+\iffrom
+ \let\antwort\Ja
+\else
+ \let\antwort\Nein
+\fi
+\typeout{Soll ihr Absender oben rechts erscheinen (J/N)? [\antwort]}
+\typein[\antwort]{}
+\expandafter\look\antwort~~@@@
+\ifempty
+ \iffrom
+ \let\antwort\Ja
+ \else
+ \let\antwort\Nein
+ \fi
+\else
+ \expandafter\firstonly\antwort~~@@@
+\fi
+\ifx\antwort\nein\let\antwort\Nein\fi
+\ifx\antwort\Nein
+ \immediate\write\datafile{\string\fromfalse}
+\else
+ \immediate\write\datafile{\string\fromtrue}
+\fi
+
+\typeout{}
+\ifbottomrule
+ \let\antwort\Ja
+\else
+ \let\antwort\Nein
+\fi
+\typeout{Soll unten eine horizontale Linie erscheinen (J/N)? [\antwort]}
+\typein[\antwort]{}
+\expandafter\look\antwort~~@@@
+\ifempty
+ \ifbottomrule
+ \let\antwort\Ja
+ \else
+ \let\antwort\Nein
+ \fi
+\else
+ \expandafter\firstonly\antwort~~@@@
+\fi
+\ifx\antwort\nein\let\antwort\Nein\fi
+\ifx\antwort\Nein
+ \immediate\write\datafile{\string\bottomrulefalse}
+\else
+ \immediate\write\datafile{\string\bottomruletrue}
+\fi
+
+\typeout{}
+\ifbankv
+ \let\antwort\Ja
+\else
+ \let\antwort\Nein
+\fi
+\typeout{Soll die Bankverbindung unten eingeblendet werden (J/N)? [\antwort]}
+\typein[\antwort]{}
+\expandafter\look\antwort~~@@@
+\ifempty
+ \ifbankv
+ \let\antwort\Ja
+ \else
+ \let\antwort\Nein
+ \fi
+\else
+ \expandafter\firstonly\antwort~~@@@
+\fi
+\ifx\antwort\nein\let\antwort\Nein\fi
+\ifx\antwort\Nein
+ \immediate\write\datafile{\string\bankvfalse}
+\else
+ \immediate\write\datafile{\string\bankvtrue}
+\fi
+
+\typeout{}
+\typeout{Soll der Brief als FAX verschickt werden (J/N)? [N]}
+\typein[\antwort]{}
+\expandafter\look\antwort~~@@@
+\ifempty
+ \let\antwort\Nein
+\fi
+\ifx\antwort\nein\let\antwort\Nein\fi
+\ifx\antwort\Nein
+\else
+ \immediate\write\datafile{\string\fax}
+\fi
+%
+% Ende der Benutzer-Definitionen
+%
+\immediate\closeout\datafile
+%
+% Zurckschalten auf Umlautempfindlichkeit
+%
+\germanTeX
+%
+% Einbinden des selbst erstellten Userfiles
+%
+\input{\filename.sty}
diff --git a/macros/latex209/contrib/letters/stbrief/stbrief.sty b/macros/latex209/contrib/letters/stbrief/stbrief.sty
new file mode 100644
index 0000000000..42653c1397
--- /dev/null
+++ b/macros/latex209/contrib/letters/stbrief/stbrief.sty
@@ -0,0 +1,531 @@
+% DOCUMENT OPTION STYLE -- Released 21-MAR-1991
+%
+% adapted from LETTER DOCUMENT STYLE by Leslie Lamport
+%
+% This style has to be used as an optional style.
+% Tests have been made with the article.sty as the basis sty.
+% This style was also used together with the finder.sty.
+% Advice: Use the STBrief.Sty in connection with the DefUser.Sty.
+% (Of course ist works without it)
+%
+% Copyright (c) 1991,1991 by Steffen Steinhaeuser
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+%
+% If you make any improvements, I'd like to hear about them.
+%
+% Steffen Steinh\"auser
+% Landwehrstr. 47
+% 6100 Darmstadt
+% Federal Republic of Germany
+% steinhaeuser@ddagsi5.bitnet
+% steffen_steinhaeuser@mz.maus.de
+%
+\def~{ }
+\typeout{-------------------------------------------------------}
+\typeout{| STBRIEF.STY V1.4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|}
+\typeout{| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~c'15-Feb-91 R.Th/Stone |}
+\typeout{-------------------------------------------------------}
+\typeout{}
+%
+% Die Liste der folgenden Makros sollte mit den benutzerspezifischen
+% Daten in eine Datei als Optionstyle in \documentstyle[]{} angegeben
+% werden. Diese Arbeit sollte aber, falls vorhanden, der DefUser.Sty
+% uebernehmen.
+%
+% Folgenden Makros sollten die eigenen Einstellungen uebergeben werden:
+%
+% \name{}
+% \strasse{}
+% \stadt{}
+% \signature{}
+% \telefon{}
+% \faxnummer{}
+% \kontonr{}
+% \bank{}
+% \bankleitzahl{}
+% \smallogo{}
+% \logo{}
+% \logosymbol{}
+% \datum{}
+%
+% Folgende Makros sollten ggf. nur angegeben werden (oder nicht)
+%
+% \fax
+%
+% Folgende Flags bzgl. eigener Einstellung setzen
+%
+% \toplogo[true] oder \toplogofalse
+% \toprule[true] oder \toprulefalse
+% \bottomrule[true] oder \bottomrulefalse
+% \bankvtrue oder \bankv[false]
+% \from[true] oder \fromfalse
+% \symlogotrue oder \symlogo[false]
+%
+% [...] ist die Defaulteinstellung im STBrief.sty
+%
+% Ende der Liste
+%
+
+%
+% Font fuer das Logo im Briefkopf
+%
+\newfont{\toplogofnt}{cmtt10 scaled 2074}
+%
+% Skip zwischen zwei Absaetzen ist so gross wie etwa eine Leerzeile
+% Begin des Absatzes ist nicht eingerueckt
+%
+\parskip1.5ex plus.5ex minus.5ex
+\parindent0pt
+%
+% ****************************************
+% * laengen - definitionen *
+% ****************************************
+%
+% This is from documentsubstyle DINA4 for DIN A4 pagesize. GMD Z1.BN 12.06.85
+\oddsidemargin 0pt
+\evensidemargin 0pt
+\marginparwidth 0pt
+\marginparsep 0pt
+\marginparpush 0pt
+
+\topmargin -1.2cm
+\headheight 2.5cm
+\headsep 1cm
+\footheight 0.7cm
+\footskip 1cm
+\textheight 17cm
+\textwidth 16.2cm
+%
+% individuelle Einstellung je nach Computertyp und Druckertreiber
+%
+\voffset-8mm
+%\hoffset
+%
+% ****************************************
+% * logische flags - definitionen *
+% ****************************************
+%
+% Steuerung von etwaigen Ausgaben (oder nicht) durch neue IF-Kommandos
+%
+\newif\iftoplogo % Ausgabe des toplogos
+\newif\iftoprule % Linie oben (unter dem TopLogo)
+\newif\ifbottomrule % Linie unten (ueber der Bankverbindung)
+\newif\ifsmallfrom % Absender ueber der Adresse
+\newif\iffrom % from (-address) kann angeschaltet werden
+\newif\ifbankv % Ausgabe der Bankverbindung in der Fu_zeile
+\newif\ifsymlogo % Ausgabe eines Logosymbols
+%
+\newif\ifdefuser
+%
+% Defaulteinstellungen
+%
+\fromtrue
+\smallfromtrue
+\bankvfalse
+\toplogotrue
+\symlogofalse
+\topruletrue
+\bottomruletrue
+%
+% ****************************************
+% * textmakro - definitionen *
+% ****************************************
+%
+\def\fax{ %
+\smallfromfalse
+\toprulefalse
+\bottomrulefalse}
+
+\def\kontonr#1{\def\kontono{#1}}
+\def\kontono{}
+
+\def\bank#1{\def\bankname{#1}}
+\def\bankname{}
+
+\def\bankleitzahl#1{\def\bankzahl{#1}}
+\def\bankzahl{}
+
+\def\name#1{\def\fromname{#1}\def\fromsig{#1}}
+\def\fromname{}
+
+\def\strasse#1{\def\fromstreet{#1}}
+\def\fromstreet{}
+
+\def\stadt#1{\def\fromcity{#1}}
+\def\fromcity{}
+
+\def\signature#1{\def\fromsig{#1}}
+\def\fromsig{}
+
+\def\faxnummer#1{\def\faxnum{#1}}
+\def\faxnum{}
+
+\newlength{\telenumwidth}
+\newlength{\telewidth}
+\settowidth{\telewidth}{Telefon}
+
+\def\telefon#1{\def\telephonenum{#1}\settowidth{\telenumwidth}{#1}}
+\def\telephonenum{}
+
+\def\smallogo#1{\def\sfromlogo{#1}}
+\def\sfromlogo{}
+
+\def\logo#1{\def\fromlogo{#1}\def\sfromlogo{#1}}
+\def\fromlogo{}
+
+\def\logosymbol#1{\def\symlogo{#1} %
+ \iftoplogo\else\def\fromlogo{#1}\fi %
+ \ifx\@empty\symlogo\symlogofalse\else\symlogotrue\fi}
+
+\def\datum#1{\def\date{#1}}
+\def\date{\today}
+%
+% ****************************************
+% * stbrief environment - definitionen *
+% ****************************************
+%
+\def\opening#1{
+ \thispagestyle{firstpage}
+ {\hbox{} \par}
+ \vspace*{5mm} % \vfill
+ \par #1\par\nobreak
+}
+
+\long\def\closing#1{\par\nobreak\vspace{\parskip}
+ \stopbreaks
+ \noindent
+ \parbox{0.5\textwidth}{\raggedright
+ \ignorespaces #1\\[12mm]
+ \ifx\@empty\fromsig\else
+ \fromsig \fi\strut}\vfill
+ \par}
+
+\def\cc#1{\par\noindent
+\parbox[t]{\textwidth}{\@hangfrom{\rm \ccname }\ignorespaces #1\strut}\par}
+
+\def\encl#1{\par\noindent
+\parbox[t]{\textwidth}{\@hangfrom{\rm \enclname }\ignorespaces #1\strut}\par}
+
+\def\stopletter{}
+%
+% Labels
+%
+\def\returnaddress{}
+\newcount\labelcount
+%
+% The following \startlabels command sets things up for producing
+% labels in two columns of five 2" X 4-1/4" labels each, suitable
+% for reproducing onto Avery brand number 5352 address labels.
+%
+\def\startlabels{\labelcount=0 \baselineskip=0pt \lineskip=0pt
+\pagestyle{empty}
+\let\@texttop=\relax
+\topmargin -50pt
+\headsep 0pt
+\oddsidemargin -35pt
+\evensidemargin -35pt
+\textheight 10in
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 550pt
+\columnsep 25pt
+\xpt
+\baselineskip=0pt
+\lineskip=0pt
+\boxmaxdepth=0pt
+\twocolumn\relax}
+
+\def\mlabel#1#2{\setbox0\vbox{\parbox[b]{3.6in}{\strut\ignorespaces #2}}
+ \vbox to 2in{\vss \box0 \vss}}
+%
+% ****************************************
+% * THE GENERIC STBRIEF COMMANDS *
+% ****************************************
+%
+\long\def\letter#1{\newpage
+ \c@page\@ne
+ \interlinepenalty=200 % smaller than the TeXbook value
+ \@processto{#1}}
+
+\def\endletter{\stopletter\@@par\pagebreak \@@par
+ \if@filesw
+ \begingroup
+ \def\protect{\string}
+ \let\\=\relax
+ \def\protect##1{\string##1\space}
+ \immediate\write\@auxout{\string\mlabel{\returnaddress}{\toname
+ \\\toaddress}}
+ \endgroup
+ \fi}
+
+\long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
+ \else \@yproc #1@@@\fi}
+\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}
+
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200}}
+
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\string\startlabels\string\@startlabels}\fi
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}
+%
+% Sollten noch keine benutzerspezifischen Daten definiert sein,
+% gibt es jetzt die Moegloichkeit dazu
+%
+\ifdefuser\else\defuser\fi
+}
+
+\def\enddocument{\@checkend{document}\newpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\makeatletter\input \jobname.aux\clearpage
+\fi\endgroup\deadcycles\z@\@@end}
+
+\def\makelabels{\@fileswtrue}
+
+\def\@startlabels{}
+%
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+\gdef\@knickpoint{%
+\vbox to0pt{%
+ \vskip1.8cm%
+ \noindent\hbox to0pt{\hskip-1.8cm \null\vrule height.3pt width.5cm \hss}%
+\vss}%
+}
+
+\def\ps@firstpage{ %
+\headheight 7.5cm
+\def\@smallfrom{%
+ \hbox{%
+ \ifx\@empty\sfromlogo %
+ \tiny \fromname\ $\cdot$ \fromstreet\ $\cdot$ \fromcity %
+ \else %
+ \tiny \sfromlogo\ $\cdot$ \fromstreet\ $\cdot$ \fromcity %
+ \fi
+ }
+ }
+
+\def\@from{%
+ \parbox[t]{0.33\textwidth}{\raggedright
+ \vspace{8mm} %
+ \iffrom %
+ \scriptsize %
+ \fromname \\ %
+ \fromstreet \\ %
+ \fromcity \\ %
+ \parbox[t]{\telewidth}{Telefon} %
+ \parbox[t]{\telenumwidth}{\telephonenum} \\
+ \ifx\@empty\faxnum \else%
+ \parbox[t]{\telewidth}{Telefax} %
+ \parbox[t]{\telenumwidth}{\faxnum} \\ \fi%
+ \normalsize %
+ \else %
+ \par \vspace{5mm} \par %
+ \fi
+ \vspace{12mm}
+ \date}}
+
+\gdef\@firsthed{
+ \vbox {
+ \iftoplogo%
+ \ifx\@empty\fromlogo%
+ \parbox{\textwidth}{\Huge \fromname}%
+ \else %
+ \ifsymlogo%
+ \parbox{\textwidth}{\symlogo}%
+ \else %
+ {\toplogofnt \fromlogo}%
+ \fi%
+ \fi%
+ \fi%
+ \vskip 3mm
+ \iftoprule %
+ \rule[0pt]{\textwidth}{1pt} %
+ \fi%
+ }
+}
+
+\def\@firsthef{ %
+ \hbox to0pt{\@knickpoint\hss}%
+ \vbox to \headheight{ %
+ \@firsthed
+ \vspace*{21mm}\par
+ \vbox{
+ \parbox[t]{.6\textwidth}{
+ \vspace{8mm}
+ \ifsmallfrom %
+ \raggedright \@smallfrom %
+ \vskip 1mm %
+ \hrule %
+ \fi
+ \vskip 5mm
+ \hspace*{.05\textwidth}
+ \parbox[t]{.5\textwidth}{
+ \ifx\toname\@empty
+ \ifx\toaddress\@empty
+ \vbox{.} \vspace{3cm} \vbox{.}
+ \fi
+ \else
+ \toname \\ \toaddress
+ \fi
+ }
+ }
+ \hfil
+ \@from
+ }
+ \vspace*{10mm} % \vfill
+ }
+ }
+
+\def\@oddhead{%
+ \kern-9pt %
+ \@firsthef
+}
+
+\def\@oddfoot{%
+ \kern-3pt \vbox{
+ \ifbottomrule %
+ \rule[0pt]{\textwidth}{1pt} %
+ \ifbankv %
+ \scriptsize Bankverbindung:
+ \bankname\ $\cdot$ BLZ.\bankzahl\ $\cdot$ Kto.\kontono %
+ \hfill %
+ \fi %
+ \fi
+ }
+}
+
+\def\@evenfoot{
+ \iftoprule %
+ \vbox{\rule[0pt]{\textwidth}{1pt} } %
+ \fi
+ }
+\global\textheight 21.7cm
+\global\@colht\textheight
+\global\@colroom\textheight
+\global\vsize\textheight
+}
+
+\def\ps@plain{ %
+\def\@plainhef{ %
+ \vbox to \headheight {
+ \@firsthed \vskip 10mm
+ \vbox{\rm \hfil Seite \thepage }
+ \vfill}
+}
+
+\def\@oddhead{
+ \kern-9pt %
+ \@plainhef
+}
+
+\def\@oddfoot{
+ \vbox{
+ \ifbottomrule\rule[0pt]{\textwidth}{1pt}\fi}
+ }
+\let\@evenhead\@oddhead
+\def\@evenfoot{
+ \vbox{
+ \iftoprule\rule[0pt]{\textwidth}{1pt}\fi
+ }
+}
+}
+
+\let\anlage\encl
+\let\kopie\cc
+%
+% stbrief default preparation
+%
+\ps@plain % 'plain' page style
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column
+\@fileswfalse % Inhibits writing of .AUX file.
+%
+% ****************************************
+% * DEFINE USER *
+% ****************************************
+%
+\gdef\defuser{ %
+\openin1 defuser.sty
+\ifeof1
+ \closein1\relax
+ \typeout{}
+ \typeout{TeX kann den DefUser.Sty nicht finden. Sie muessen die von Hand}
+ \typeout{erstellte Datei mit den benutzerspezifischen Daten in die Liste}
+ \typeout{der Optionen im \string\documentstyle~ eintragen. Sie sollten versuchen}
+ \typeout{sich den DefUser.Sty zu besorgen, da er ihnen viel Arbeit erspart}
+ \typeout{und immer ueber den neusten Stand des STBrief.Sty informiert ist.}
+ \typeout{}
+ \typeout{Da Ihr Brief ohne die benutzerspezifischen Daten nicht auskommt,}
+ \typeout{wird an dieser Stelle der TeXlauf abgebrochen.}
+ \typeout{}
+ \typein[\return]{Druecken Sie <RETURN> !}
+ \end{document}
+\else
+\closein1\relax
+\def\ja{j}
+\def\Ja{J}
+\typeout{}
+\typeout{Achtung:}
+\typeout{}
+\typeout{Wie sie wissen, benoetigt man fuer den STBrief.Sty eine Datei mit}
+\typeout{benutzerspezifischen Daten. Hier gibt es nun die Moeglichkeit}
+\typeout{diese Datei interaktiv anzulegen und gleich zu verwenden. Sollten}
+\typeout{jedoch eine solche Datei schon existieren, so geben sie einfach}
+\typeout{deren Namen ein.}
+\typeout{}
+\typein[\filename]{Bitte den Namen des DefUser-Files eingeben (ohne Extension):}
+\typeout{}
+\typeout{Merken Sie sich den Dateinamen \filename[.sty], damit Sie ihn}
+\typeout{demnaechst im \string\documentstyle~ als Option angeben koennen.}
+\openin2\filename.sty
+\ifeof2
+ \closein2\relax
+ \typeout{}
+ \typeout{Keine Datei namens \filename.sty~ gefunden.}
+ \typeout{Der DefUser.Sty wird Ihnen helfen eine zu erstellen.}
+ \input{defuser.sty}
+\else
+ \closein2\relax
+ \typeout{}
+ \typein[\antwort]{Soll die Datei \filename.sty~ geaendert werden (J/N)? [N]}
+ \if\antwort\ja\let\antwort\Ja\fi
+ \if\antwort\Ja
+ \input{defuser.sty}
+ \else
+ \input{\filename.sty}
+ \fi
+\fi
+\fi
+}
diff --git a/macros/latex209/contrib/letters/stbrief/stbrief.tex b/macros/latex209/contrib/letters/stbrief/stbrief.tex
new file mode 100644
index 0000000000..c01b370f00
--- /dev/null
+++ b/macros/latex209/contrib/letters/stbrief/stbrief.tex
@@ -0,0 +1,18 @@
+\documentstyle[german,12pt,stbrief,finder,test5]{article}
+
+\begin{document}
+
+\findname[Otto]{Normal}
+\addressfile{adressen}
+
+\begin{letter}{\name \\ \street \\[2mm] \underline{\city}}
+
+\opening{Sehr geehrter Herr \name}
+
+Dies ist ein Testbrief.
+
+\closing{Mit freundlichen Gr\"u\ss {}en}
+
+\end{letter}
+
+\end{document}
diff --git a/macros/latex209/contrib/letters/tksbrief/privat.sty b/macros/latex209/contrib/letters/tksbrief/privat.sty
new file mode 100644
index 0000000000..4a4c5a523a
--- /dev/null
+++ b/macros/latex209/contrib/letters/tksbrief/privat.sty
@@ -0,0 +1,54 @@
+%
+% PRIVAT.STY
+% Zusatz-File zu TKSBRIEF.STY
+% (um einige Gliederungs- und Mathebefehle ergaenzt)
+% von Torsten-Karl Strempel am 1.7.1991
+%
+%** Namens- und Adressdefinitionen *********************************************
+%
+\gdef\TKS{Torsten--Karl Strempel}
+\gdef\TkS{T$\!\!$\raisebox{-0.6ex}{K}$\!\!$\raisebox{0.3ex}{S}}
+\gdef\tks{tks}
+\gdef\tkshelp{\TkS$\!$HELP }
+\gdef\tksbrief{\TkS$\!$BRIEF }
+\gdef\tkstex{\TkS$\!$\tex}
+\gdef\Firmenadresse{}
+\gdef\firmenadresse{}
+\gdef\firmenkonto{}
+\gdef\Privatadresse{
+ \put(100,-10){\parbox[t]{70mm}{\begin{center}{\large \TKS}\\
+ Musterstrasse 1\\
+ 12345 Musterdorf\\
+ \small Telefon 01234 / 12345
+ \end{center}}}}
+\gdef\privatadresse{
+ \put(0,0){\parbox[t]{70mm}{\begin{center}\TKS\\
+ Musterstrasse 1\\
+ 12345 Musterdorf\\
+ \end{center}}}}
+\gdef\konto#1#2#3{\footnotetext{Kontonr. #1 bei der #3, Blz #2}}
+%
+%** sonstige Befehle ***********************************************************
+%
+%
+%** Voreinstellungen fuer ein TKSBRIEF-Standarddokument ***********************
+%
+\sloppy
+\parindent=0pt
+\unitlength=1mm
+\def\test{privat}\ifx\test\privat % pruefen ob TKSBRIEF geladen wurde
+ \typeout{TKSBRIEF !!!}
+ \setpage{25mm}{20mm}{20mm}{20mm}{dinavier}
+ \pagestyle{plain}
+ \eineinhalbzeilig
+ \frenchspacing
+ \inchweg
+ \ohnefuss
+ \faltmarken
+ \datum{Musterdorf, den \Heute}
+ \von{privat}{}{}
+\else
+ \typeout{NO TKSBRIEF !!!}
+ \pagestyle{plain}
+\fi
+</PRE></BODY></HTML>
diff --git a/macros/latex209/contrib/letters/tksbrief/tksbrief.ltx b/macros/latex209/contrib/letters/tksbrief/tksbrief.ltx
new file mode 100644
index 0000000000..9529508165
--- /dev/null
+++ b/macros/latex209/contrib/letters/tksbrief/tksbrief.ltx
@@ -0,0 +1,471 @@
+%** TKSBRIEF ****************************************************************
+
+\documentstyle[12pt,german,tksbrief,privat]{article}
+
+\setpage{20mm}{20mm}{20mm}{20mm}{dinavier}
+
+\begin{document}
+
+%-- Brief 1 -----------------------------------------------------------------
+
+\an{An\\alle \TeX perten}{}
+\briefkopf
+
+\betrifft{Noch ein \LaTeX--Programm zum Briefeschreiben}
+
+Mit der Option \verb+tksbrief+\footnote{Nach einer Idee von H.Roes an der TH
+Darmstadt} zum Befehl \verb+\documentstyle+ werden einige neue Befehle zur
+Erzeugung eines Briefes mit \LaTeX{} zur Verf\"ugung gestellt.
+
+Jeder Brief ist in den Briefkopf und den eigentlichen Brieftext unterteilt.
+Die Bestandteile des Briefkopfs (Absender, Anschrift, Datum) werden passend
+f\"ur Sichtfensterbriefumschl\"age positioniert und zum exakten Falten k\"onnen
+Marken an den entsprechenden Stellen gezeichnet werden. Zur Erzeugung des
+Briefkopfs stehen die Befehle~:
+\begin{verbatim}
+ \von{}{}{},
+ \an{}{}, \AN{}{},
+ \datum{},
+ \plz{}
+ \briefkopf
+\end{verbatim}
+zur Verf\"ugung und f\"ur den Brieftext hat man die Befehle~:
+\begin{verbatim}
+ \betreff{}, \Betreff{}, \betrifft{},
+ \bestellung{}, \rechnung{},
+ \lieferschein{}, \lieferung{},
+ \sgdh, \sgf{}, \sgh{},
+ \mfg, \mfgr, \Mfgr{},
+ \hav, \havl, \Havl{},
+ \gez{}, \ieg, \be, \we,
+ \anlagen{}, \Anlagen{}, \anlageN,
+ \brief{}, \brieftext,
+ \Ps{}, \Pps{}
+\end{verbatim}
+Au\ss{}erdem kann man Postkarten in zwei Gr\"o\ss{}en und Verechnungsschecks
+direkt bedrucken, wobei je drei Textfelder, der Kartentext, das Datum und
+evtl. ein Absender und die Adresse und beim Scheck zus\"atzlich der Betrag in
+Worten und als Zahl zur Verf\"ugung stehen~:
+\begin{verbatim}
+ \karte{}{}{}, \Karte{}{}{}, \postkarte{}{}{}, \scheck{}{}{}{}{}{}
+\end{verbatim}
+Zur Beschriftung von DINC6-- und DL--Briefumschl\"agen \footnote{Bei anderen
+Umschl\"agen ist die Positionierung nicht exakt, aber im Prinzip kann man alles
+beschriften, was der Drucker aufnimmt.} und zur Erzeugung der Faltmarkierungen
+stehen die Befehle~:
+\begin{verbatim}
+ \umschlagc{}{}, \umschlagdl{}{}
+ \faltmarken, \ohnefaltmarken
+\end{verbatim}
+zur Verf\"ugung. Zur Textgestaltung kommen noch die Befehle~:
+\begin{verbatim}
+ \ohnekopf, \ohnefuss, \inchweg,
+ \setpage{}{}{}{}{},
+ \hfilll, \vfilll,
+ \heute, \Heute,
+ \ah, \av, \au, \ao,
+ \platz, \llabel, \lblabel
+ \ttitel{}, \Ttitel{}, \tline{}
+\end{verbatim}
+und die neuen Umgebungen~:
+\begin{verbatim}
+ llist, lblist,
+ einzeilig, eineinhalbzeilig, texzeilig
+\end{verbatim}
+hinzu.\\
+
+Verschiedene Zeilen innerhalb eines Arguments sind grunds\"atzlich durch
+\verb+\\+ zu trennen. Alle Seiten, die nicht den Befehl \verb+\briefkopf+
+enthalten, werden oben rechts mit \au{\it Seite xxx}\ao \ numeriert. Der
+Ausdruck der Seitennummern kann mit \verb+\pagestyle{empty}+ unterdr\"uckt
+werden.
+
+Die Behandlung von Leerzeichen ist am deutschen Standard orientiert, d.h.
+Leerzeichen werden alle gleich behandelt, auch wenn ihnen ein Punkt vorausgeht.
+
+Die Positionierung bezieht sich grunds\"atzlich auf DIN--A4--Papier.
+Wie ein Blatt in den Drucker NEC P6 einzuspannen ist, damit die Positionierung
+richtig erfolgt, ist in der Datei TKSBRIEF.STY beschrieben. Ein DIN--C6--Umschlag
+ist mit seiner linken oberen Ecke entsprechend einzuspannen, jedoch mu\ss{}
+zum Drucken die Anschlagsst\"arke ver\"andert werden. Bei Laserdruckern wird
+der Umschlag einfach wie normales Papier eingelegt; die momentanen Werte
+gelten f\"ur den HP--LaserJet IIP.
+
+Als kleine Spezialit\"at bietet der Befehl \verb+\setpage+ zus\"atzlich zum
+Einstellen der Seitenma\ss{}e die M\"oglichkeit, die Ausgabe auf Laserdruckern
+um 90 Grad zu drehen. Da DINA4papier in die meisten Drucker nicht quer
+eingelegt werden kann, ist die Datei \verb+HPLANDSC.ESC+ und n\"otig, die
+Steuersequenzen f\"ur HP--kompatible Laserdrucker enth\"alt, um die Ausgabe
+zu drehen. Diese m\"ussen evtl. angepa\ss{}t werden.
+\begin{verbatim}
+ \setpage{linker Rand}{rechter Rand}{oberer Rand}{unterer Rand}{Orientierung}
+\end{verbatim}
+Wird f\"ur Orientierung \verb+quer+ angegeben, dann wird das Papierformat
+A4quer eingestellt, sonst normal A4~:
+\begin{verbatim}
+ sonst = A4 <==> 210mm x 297mm (H x B)
+ dinavierq = A4quer <==> 297mm x 210mm (H x B)
+ dinafuenf = A5 <==> 148mm x 210mm (H x B)
+ dinafuenfq = A5quer <==> 210mm x 148mm (H x B)
+ dinasechs = A6 <==> 148mm x 105mm (H x B)
+ dinasechsq = A6quer <==> 105mm x 148mm (H x B)
+\end{verbatim}
+Voreingestellt ist normales A4-Format und der Seitenstil \verb+empty+.\\
+{\bf ACHTUNG : } Der Befehl \verb+\setpage+ wirkt nur auf das laufende
+Dokument, wenn er im Vorspann, also vor \verb+\begin{document}+ kommt~!
+
+Der Brief, den Sie gerade lesen, kann mit folgenden Befehlen gestaltet werden:
+\small
+\begin{verbatim}
+ \documentstyle[german,tksbrief,privat]{article}
+ \setpage{25mm}{20mm}{20mm}{20mm}{}
+ \pagestyle{plain}
+ \begin{document}
+ \von{privat}{}{}
+ \an{An\\alle \TeX{}perten}{}
+ \datum{Musterdorf, den \Heute}
+ \briefkopf
+ \betreff{Noch ein \LaTeX--Programm zum Briefeschreiben ...}
+ .
+ .
+ .
+ Brieftext
+ .
+ .
+ .
+ \Anlagen{Erl\"auterung der Briefkopf--Befehle, Erzeugung von
+ Faltmarkierungen und Bedrucken von Briefumschl\"agen\\
+ Erl\"auterung der Brieftext--Befehle\\
+ Ausdruck der Datei TKSBRIEF.STY}
+ \end{document}
+\end{verbatim}
+\normalsize
+Die einzelnen Befehle werden in den beiden folgenden Briefen erl\"autert.\\
+
+Um die eigene Adresse und eigene Makros benutzen zu k\"onnen, wird die Datei
+\verb+PRIVAT.STY+ nachgeladen, die zum einen Adressdefinitionen f\"ur den
+Briefkopf und den Umschlag enth\"alt und zum anderen die pers\"onliche
+Standardeinstellung des Dokuments festlegt. Damit diese Befehle auch ohne
+\verb+TKSBRIEF.STY+ laufen und um Fehler durch mehrmaliges Aufrufen zu
+vermeiden, werden im vorliegenden Fall Abfragen durchgef\"uhrt, ob die verwendeten
+Befehle schon definiert wurden.\\
+Ein weiterer Vorteil dieser Auspaltung liegt darin, da\ss{} man bei einer
+Ver\"anderung des Briefstyles nicht seine eigenen Daten und Einstellungen \"andern
+mu\ss{}. Man kann die Datei \verb+PRIVAT.STY+ auch als Sammlung eigener, oft
+ben\"otigter Makros verwenden und wie erw\"ahnt ohne \verb+TKSBRIEF.STY+
+verwenden. Eine Minimalversion der Datei \verb+PRIVAT.STY+ sieht wie folgt aus~:
+\small
+\begin{verbatim}
+ %
+ % PRIVAT.STY
+ % Zusatz-File zu TKSBRIEF.STY
+ % von Torsten-Karl Strempel am 1.7.1991
+ %
+ %** Namens- und Adressdefinitionen ********************
+ %
+ \gdef\TKS{Torsten--Karl Strempel}
+ \gdef\TkS{T$\!\!$\raisebox{-0.6ex}{K}$\!$S}
+ \gdef\tks{tks}
+ \gdef\tkshelp{{\sc\TkS--help} }
+ \gdef\tkstex{{\sc\TkS\tex}}
+ \gdef\Firmenadresse{}
+ \gdef\firmenadresse{}
+ \gdef\firmenkonto{\footnotetext{Unsere Bankverbindung lautet~:}}
+ \gdef\Privatadresse{
+ \put(100,-10){\parbox[t]{70mm}{\begin{center}{\large \TKS}\\
+ Musterstrasse 1\\
+ 12345 Musterdorf\\
+ \small Telefon 01234 / 12345
+ \end{center}}}}
+ \gdef\privatadresse{
+ \put(0,0){\parbox[t]{70mm}{\begin{center}\TKS\\
+ Musterstrasse 1\\
+ 12345 Musterdorf
+ \end{center}}}}
+ \gdef\konto#1#2#3{\footnotetext{Kontonr. #1 bei der #3, Blz #2}}
+ %
+ %** Hier folgen weitere Makros ***************
+ %
+ ...
+ %
+ %** Voreinstellungen f\"ur ein TKSBRIEF-Standarddokument ******
+ %
+ \sloppy
+ \parindent=0pt
+ \unitlength=1mm
+ \def\test{privat}\ifx\test\privat % pruefen ob TKSBRIEF geladen wurde
+ \typeout{TKSBRIEF !!!}
+ \pagestyle{plain}
+ \eineinhalbzeilig
+ \frenchspacing
+ \inchweg
+ \ohnefuss
+ \faltmarken
+ \setpage{25mm}{20mm}{20mm}{20mm}{dinavier}
+ \datum{Klein-Auheim, den \Heute} % Aktuelles Datum einsetzen
+ \von{privat}{}{}
+ \else
+ \typeout{NO TKSBRIEF !!!}
+ \pagestyle{plain}
+ \fi
+\end{verbatim}
+\normalsize
+\Anlagen{Erl\"auterung der Briefkopf--Befehle, Erzeugung von
+ Faltmarkierungen und Bedrucken von Briefumschl\"agen\\
+ Erl\"auterung der Brieftext--Befehle\\
+ Ausdruck der Datei TKSBRIEF.STY}
+
+%-- Brief 2 -----------------------------------------------------------------
+
+\AN{Dr.A.U.Backe\\Schmerzweg 5\\\plz{0815} Irgendwo}{Torsten-Karl Strempel / 12345 Musterdorf / Beispielbrief 1}
+\briefkopf
+\faltmarken
+%
+\betrifft{Briefkopf--Befehle,\\
+ Erzeugung von Faltmarkierungen,\\
+ Bedrucken von Briefumschl\"agen, Postkarten und Schecks}
+
+Der Befehl \verb+\an+ dient dazu, das Adressfeld des Briefes zu beschriften.
+Das erste Argument gibt dabei die Adresse an, an die der Brief geht, die durch
+die Verwendung der Kurzform \verb+an+ als Parameter direkt an zum Bedrucken
+des Briefumschlags (siehe unten) verwendet werden kann. Das zweite Argument
+dient dazu den eigenen Absender als oberste Zeile im Adressfeld
+unterzubringen. Standardm\"a\ss{}ig wird diese Zeile in der Schriftart
+\verb+\small+ gesetzt, was aber durch die Angabe einer eigenen Schriftart
+ge\"andert werden kann. Damit ist es m\"oglich das Bedrucken von
+Fensterumschl\"agen zu umgehen, da Absender und Adresse im Fenster sichtbar
+sind. So wurde das Adressfeld f\"ur diesen Brief mit dem folgenden Befehl
+erzeugt~:
+\begin{verbatim}
+ \An{Dr. A. U. Backe\\Schmerzweg 5\\\plz{0815} Irgendwo}
+ {Torsten-Karl Strempel / 12345 Musterdorf / Beispielbrief 1}
+\end{verbatim}
+
+Das erste Argument des Befehls \verb+\von+ legt die Ausgabe der
+Absenderangaben fest, wobei die folgenden M\"oglichkeiten zur Verf\"ugung
+stehen:
+\begin{llist}{\{\tt privat\} :}
+ \item[\{{\tt privat}\} :] Hiermit wird ein vordefinierter, nat\"urlich im
+ Moment auf mich pers\"onlich zugeschnittener Briefkopf erzeugt, wobei die
+ beiden folgenden Argumente nicht ber\"ucksichtigt werden.
+ \item[\{{\tt firma}\} :] Hiermit wird ein weiterer vordefinierter, nat\"urlich
+ ebenfalls auf mich pers\"onlich zugeschnittener Briefkopf erzeugt, der wie
+ oben die weiteren Argumente nicht ber\"ucksichtigt.
+ \item[\{{\it sonst}\}\hfill :] Werden die oben beschriebenen Macros nicht
+ verwendet, so erscheint das erste Argument oben links, das zweite Argument
+ oben in der Mitte und das dritte Argument oben linksb\"undig im rechten
+ Viertel des Briefes.
+\end{llist}
+Die Argumente der Befehle \verb+\an+ und \verb+\datum+ werden linksb\"undig im
+Adress\-feld (vertikal zentriert) bzw. rechtsb\"undig unterhalb des
+Adress\-feldes ausgegeben. Nat\"urlich kann man seinen Absender oder die Anschrift
+des Empf\"angers weitergehend formatieren. So ist es m\"oglich, mit~:
+\begin{verbatim}
+ \von{\begin{center}
+ {\Large Dr. A. U. Backe}\\
+ Schmerzweg 5\\
+ 0815 Irgendwo
+ \end{center}}{}{}
+\end{verbatim}
+Den Absender zentriert in die linke obere Ecke des Briefes zu setzen. Der Befehl
+\verb+\AN+ hat die gleiche Funktion, wie der Befehl \verb+\an+, nur wird die
+Adresse eingerahmt.\\
+
+Durch \verb+\briefkopf+ wird eine neue Seite begonnen, der Seitenz\"ahler auf
+1 gesetzt und der Briefkopf erzeugt. Dabei gelten jeweils die letzten Angaben
+des Absenders, der Anschrift und des Datums. Somit m\"ussen f\"ur einen neuen
+Brief nur die jeweiligen \"Anderungen des Briefkopfs angegeben werden.
+
+Da die sch\"onste Positionierung f\"ur Sichtfensterbriefumschl\"age nichts
+n\"utzt, wenn der Brief falsch gefaltet wird, lasssen sich mit dem Befehl
+\verb+\faltmarken+ Faltmarkierungen erzeugen. Die Markierungen erscheinen
+nur auf der Seite, die den Briefkopf enth\"alt und druckerbedingt teilweise bis
+zu 5mm vom linken Rand entfernt. Der Befehl \verb+\faltmarken+ bleibt
+solange g\"ultig bis der Befehl \verb+\ohnefaltmarken+ auftaucht.
+Entscheidend f\"ur die Erzeugung der Markierungen ist die Einstellung am
+\underline{Ende} der betroffenen Seite. Dabei ist zu beachten, da\ss{} eine
+Seite sp\"atestens mit dem n\"achsten \verb+\von+-- oder
+\verb+\briefkopf+--Befehl beendet wird. Die Standardeinstellung ist
+\verb+\ohnefaltmarken+. Man erh\"alt auch ohne die Markierungen in etwa die
+richtige Positionierung, wenn der Brief in H\"ohe des Datums gefaltet wird.
+
+Der Befehl \verb+\plz{}+ dient dazu die Postleitzahl in einer Adresse
+hervorzuheben, diese wird dann {\bf fettgedruckt} und
+\underline{\underline{doppelt}} unterstrichen~:
+\begin{center}
+ \verb+\plz{0815}+ f\"uhrt also zu \plz{0815}
+\end{center}
+
+%-- Umschlaege --------------------------------------------------------------
+
+\umschlagc{von}{an}
+\vspace{-5cm}
+\ttitel{Briefumschl\"age}
+Beim Befehl \verb+\umschlagc{}{}+ gibt das erste Argument den Absender und das
+zweite Argument die Anschrift an. Dabei k\"onnen durch
+\begin{center}
+ \verb+\umschlagc{von}{...}+ bzw. \verb+\umschlagc{...}{an}+
+\end{center}
+die Angaben der Befehle \verb+\von+ und \verb+\an+ \"ubernommen werden. Die
+Angaben werden auf dem Umschlag wie oben gezeigt positioniert. Der Befehl
+\verb+\umschlagdl{}{}+ dient zur Beschriftung von Umschl\"agen im Format DL
+(110$\times$220mm).
+
+%-- Postkarten --------------------------------------------------------------
+
+\karte{\footnotesize
+Dies ist ein Beispiel f\"ur eine Postkarte. Man kann auch
+verschiedene Umgebungen und Makros verwenden.
+\begin{quote}
+ \begin{itemize}
+ \item Einr\"ucken mit {\em quote}
+ \item Listen mit {\em itemize}
+ \item Zentrieren mit {\em center}
+ \item \ldots
+ \end{itemize}
+\end{quote}
+Der Strich unten in der Mitte des Textfeldes dient dabei zur Orientierung,
+wann die Karte voll ist (evtl. auf eine kleinere Schrift umschalten)
+}{\scriptsize
+Au\ss{}erdem steht ein kleines Feld neben der Briefmarke f\"ur den Absender
+oder das Datum zur Verf\"ugung, das auch mit den Befehlen \verb+\heute+ und
+\verb+\Heute+ gestaltet werden kann
+}
+{\begin{center}
+ Zum Schlu\ss{} hat man nat\"urlich noch den
+ Absender, der z.B. zentriert wird
+\end{center}}
+\vspace{-2cm}
+\ttitel{Postkarten}
+F\"ur das Bedrucken von Postkarten stehen die Parameter {\tt von} und {\tt an}
+nicht zur Verf\"ugung, da hier der Absender, bzw. die Adresse nur einmal
+gebraucht werden. Die obige Karte wurde mit dem Befehl \verb+\karte{}{}{}+
+f\"ur eine kleine Postkarte, 13.9$\times$8.9cm erzeugt. Entsprechend liefert
+\verb+\Karte{}{}{}+ eine gro\ss{}e Postkarte mit 14.7$\times$10.4cm. Der Befehl
+\verb+\postkarte{}{}{}+ positioniert auf einer vorgedruckten Standardpostkarte
+(mit aufgdruckter Briefmarke) einen Absender und eigenem Text darunter, sowie
+der Adresse auf der Vorderseite und auf der R\"uckseite einen weiteren Text im
+Querformat.
+
+%-- Schecks --------------------------------------------------------------
+
+\scheck{Torsten-Karl Strempel / 12345 Musterdorf}
+ {Dr. A. U. Backe\\Schmerzweg 5\\\plz{0815} Irgendwo}
+ {0.00}{absolut nichts}
+ {Musterdorf}{\heute}
+\vspace{-5cm}
+\ttitel{Schecks}
+F\"ur Standardverechnungsschecks (mit Abri\ss{}quittung f\"ur den Empf\"anger) steht der
+Befehl \verb+\scheck{}{}{}{}{}{}+ zur Verf\"ugung, der die folgenden Parameter
+an den entsprechenden Stellen im Vordruck einsetzt~:
+\begin{quote}
+ \begin{enumerate}
+ \item Der Absender (bitte nur eine Zeile)
+ \item Den Empf\"anger (kann mit Attributen versehen werden und \"uber mehrere
+ Zeilen gehen)
+ \item Der Betrag als Zahl (wird in - - eingeschlossen)
+ \item Der Betrag als Wort (wie oben)
+ \item Der Unterzeichnungsort
+ \item Das Unterzeichnungsdatum (hier sind wieder die Makros \verb+\heute+
+ und \verb+\Heute+ erlaubt)
+ \end{enumerate}
+\end{quote}
+Der obige Scheck wurde also mit dem Befehl~:
+\begin{quote}
+ \begin{verbatim}
+ \scheck{Torsten-Karl Strempel / 12345 Musterdorf}
+ {Dr. A. U. Backe\\Schmerzweg 5\\\plz{0815} Irgendwo}
+ {0.00}{absolut nichts}
+ {Musterdorf}{\heute}
+ \end{verbatim}
+\end{quote}
+erzeugt.
+
+%-- Brief 3 -----------------------------------------------------------------
+
+\AN{Dr. A. U. Backe\\Schmerzweg 5\\\plz{0815} Irgendwo}{Torsten-Karl Strempel / 12345 Musterdorf / Beispielbrief 2}
+\briefkopf
+%
+\betrifft{Brieftext--Befehle}
+Der eigentliche Brieftext wird i.a. nach dem Befehl \verb+\briefkopf+
+eingegeben. Daf\"ur stehen die Befehle des gew\"ahlten Documentstyls
+(z.B. {\tt article} oder {\tt letter}) zur Verf\"ugung. Die Befehle
+aus dem Brief--Style erzeugen die folgenden Ausgaben~:\\
+\begin{itemize}
+ \item \verb+\betreff{+{\it zeile 1}\verb+\\...\\+{\it zeile n}\verb+}+
+ \betreff{{\it zeile 1\\...\\zeile n}}
+ \item \verb+\Betreff{+{\it zeile 1}\verb+\\...\\+{\it zeile n}\verb+}+
+ \Betreff{{\it zeile 1\\...\\zeile n}}
+ \item \verb+\betrifft{+{\it zeile 1}\verb+\\...\\+{\it zeile n}\verb+}+
+ \betrifft{{\it zeile 1\\...\\zeile n}}
+ \item \verb+\bestellung{+{\it zeile 1}\verb+\\...\\+{\it zeile n}\verb+}+
+ \bestellung{{\it zeile 1\\...\\zeile n}}
+ \item \verb+\lieferschein{+{\it zeile 1}\verb+\\...\\+{\it zeile n}\verb+}+
+ \lieferschein{{\it zeile 1\\...\\zeile n}}
+ \item \verb+\lieferung{+{\it zeile 1}\verb+\\...\\+{\it zeile n}\verb+}+
+ \lieferung{{\it zeile 1\\...\\zeile n}}
+ \item \verb+\rechnung{+{\it zeile 1}\verb+\\...\\+{\it zeile n}\verb+}+
+ \rechnung{{\it zeile 1\\...\\zeile n}}
+\end{itemize}
+und jeweils einen etwas gr\"o\ss{}eren Absatz.\\
+
+Die Befehle f\"ur Anrede und Gru\ss{} erzeugen folgende Ausgaben~:\\
+\begin{itemize}
+ \item \verb+\sgdh+ \sgdh {\it Brieftext}\\
+ \item \verb+\sgf{+{\it Name}\verb+}+ \sgf{\it Name} {\it Brieftext}\newline
+ \item \verb+\sgh{+{\it Name}\verb+}+ \sgh{\it Name} {\it Brieftext}\newline
+ \item \verb+\mfg+\newline {\it Brieftext} \mfg
+ \item \verb+\mfgr+\newline {\it Brieftext} \mfgr
+ \item \verb+\Mfgr{+{\it Name}\verb+}+\newline {\it Brieftext} \Mfgr{Name}
+ \item \verb+\hav+\newline {\it Brieftext} \hav
+ \item \verb+\havl+\newline {\it Brieftext} \havl
+ \item \verb+\Havl{+{\it Name}\verb+}+\newline {\it Brieftext} \Havl{Name}
+ \item \verb+\gez{+{\it Name}\verb+}+\newline {\it Brieftext} \gez{\it Name}
+ \item \verb+\ieg+\newline {\it Brieftext} \ieg
+ \item \verb+\be+\newline {\it Brieftext} \be
+ \item \verb+\we+\newline {\it Brieftext} \we
+\end{itemize}
+Wird dabei nach dem Befehl f\"ur die Anrede bzw. vor dem Gru\ss{}--Befehl
+kein Absatz gemacht, erh\"alt man Abst\"ande wie in den Beispielen.
+Anderenfalls erh\"alt man gr\"o\ss{}ere Abst\"ande zwischen dem Brieftext und
+der Anrede bzw. dem Gru\ss{}.
+
+Das post scriptum wird standardm\"a\ss{}ig in der Schriftgr\"o\ss{}e {\tt small} ausgegeben~:
+\begin{quote}
+ \verb+\Ps{+{\it post sriptum}\verb+}+\newline {\it Brieftext} \Ps{\it post scriptum}
+ \verb+\Pps{+{\it post post sriptum}\verb+}+\newline {\it Brieftext} \Pps{\it post post scriptum}
+\end{quote}
+
+Die weiteren Befehle~:\newline
+\begin{quote}
+ \verb+\anlagen{+{\it zeile 1}\verb+\\...\\+{\it zeile n}\verb+}+ \anlagen{{\it zeile 1\\...\\zeile n}}
+ \verb+\Anlagen{+{\it zeile 1}\verb+\\...\\+{\it zeile n}\verb+}+ \Anlagen{{\it zeile 1\\...\\zeile n}}
+ \verb+\anlageN+ \anlageN
+\end{quote}
+erzeugen Anlagen am Ende der Seite, falls der Befehl am Ende des Brieftextes
+steht.\\
+
+Soll der Brieftext mehrfach verwendet werden, so kann er als Argument des
+Befehls \verb+\brief{}+ gespeichert werden. Die Ausgabe erfolgt mit
+\verb+\brieftext+. Soll beispielsweise ein Brief an mehrere Personen
+verschickt werden, so kann dies durch~:\\
+\begin{verbatim}
+ \von{...}{...}{...}
+ \datum{...}
+
+ \brief{...Brieftext...}
+
+ \an{...}{}
+ \briefkopf
+ \brieftext
+
+ \an{...}{}
+ \briefkopf
+ \brieftext
+\end{verbatim}
+usw. erreicht werden. Mit der Umgebung {\tt brief} k\"onnen auch Teile eines
+Briefes, die mehrfach verwendet werden sollen, gespeichert werden.
+Schwierigkeiten beim wiederholten Aufruf von Brieftexten sind bislang nur
+bei der Verwendung von gleitenden Tabellen oder Bildern aufgetreten.
+
+\end{document}
diff --git a/macros/latex209/contrib/letters/tksbrief/tksbrief.sty b/macros/latex209/contrib/letters/tksbrief/tksbrief.sty
new file mode 100644
index 0000000000..ab962c29de
--- /dev/null
+++ b/macros/latex209/contrib/letters/tksbrief/tksbrief.sty
@@ -0,0 +1,442 @@
+%
+% TKSBRIEF.STY von Torsten-Karl Strempel am 11.10.1994
+% (in Anlehnung an HBRIEF.STY von Henrik Roes)
+%
+% ACHTUNG : Die Escape-Sequenzen fuer HP-kompatible-Drucker
+% funktionieren nur fuer die entsprechenden Treiber
+%
+\typeout{}
+\typeout{Document Style `TKSBRIEF' Version vom 11.10.1994}
+\typeout{(in Anlehnung an HBRIEF.STY von Henrik Roes)}
+\typeout{}
+%
+\newcounter{seite}
+%
+\def\firma{firma}
+\def\altfirma{altfirma}
+\def\thd{thd}
+\def\privat{privat}
+\def\zweit{zweit}
+\def\Von{von}
+\def\An{an}
+\def\fm{fm}
+\def\dinavierq{dinavierq}
+\def\dinafuenf{dinafuenf}
+\def\dinafuenfq{dinafuenfq}
+\def\dinasechs{dinasechs}
+\def\dinasechsq{dinasechsq}
+\def\kassette{kassette}
+\def\manuell{manuell}
+%
+\def\ps@headings{\def\@evenhead{} \def\@evenfoot{}
+ \def\@oddfoot{}
+ \def\@oddhead{\stepcounter{seite}
+ \sl\hfil Seite \arabic{seite}}}
+\def\ps@theadings{\def\@evenhead{}
+ \def\@evenfoot{}
+ \def\@oddfoot{}
+ \def\@oddhead{\stepcounter{seite}
+ \sl\hfil Seite
+ \arabic{seite}}
+ \hrule}
+\def\ps@firstpage{\setcounter{seite}{1}
+ \def\@evenhead{} \def\@evenfoot{}
+ \def\@oddhead{}
+ \ifx\ftest\fm
+ \def\@oddfoot{\begin{picture}(0,0)
+ \put(0,0){\usebox{\faltbox}}
+ \end{picture}
+ \hfill}
+ \else
+ \def\@oddfoot{}
+ \fi}
+%
+\newsavebox{\vonbox}
+\newsavebox{\anbox}
+\newsavebox{\datumbox}
+\newsavebox{\adrbox}
+\newsavebox{\absbox}
+\newsavebox{\faltbox}
+%
+% Mit dem Befehl \INCHWEG werden \voffset und \hoffset auf -1 inch gesetzt.
+% Der Drucker NEC P6 beginnt dann im oberen linken Eck eines DIN-A4-Blattes
+% zu drucken, falls dieses mit der linken Kante an der Marke A4 und
+% mit der Oberkante am Strich in Hoehe des Druckkopfs eingespannt ist.
+%
+\newcommand{\ohnekopf}{\headheight0pt \headsep0pt}
+\newcommand{\ohnefuss}{\footheight0pt \footskip0pt}
+\newcommand{\inchweg}{\voffset=-1in \hoffset=-1in}
+%
+% ACHTUNG der Befehl darf nur am Anfang vor \begin{doc...} vorkommen !!!
+%
+% \setpage{linker Rand}{rechter Rand}{oberer Rand}{unterer Rand}{format}
+%
+% Wenn beidseitig gedruckt wird, gelten die Angaben fuer die rechten
+% Seiten. Die linken Seiten werden spiegelbildlich dazu angelegt,
+% d.h. die Angaben fuer den linken und rechten Rand werden einfach
+% vertauscht.
+%
+% Fuer format sind erlaubt : x = DinA4 laengs (297 x 210mm default)
+% dinavierq = DinA4 quer (210 x 297mm)
+% dinafuenf = DinA5 laengs (148 x 210mm)
+% dinafuenfq = DinA5 quer (210 x 148mm)
+% dinasechs = DinA6 laengs (148 x 105mm)
+% dinasechsq = DinA6 quer (105 x 148mm)
+%
+% Da DinA4papier nicht im Querformat in normale A4-Drucker eingespannt werden
+% kann, wird eine ESCAPE-Sequenz gesendet, die den Drucker veranlasst die
+% Ausgabe intern um 90 Grad zu drehen (HP-Laserjet).
+%
+\newcommand{\setpage}[5]{\global\def\test{#5}
+ \textheight 297mm
+ \textwidth 210mm
+ \ifx\test\dinavierq
+ \typeout{Papierformat : DINA4 quer (210x297mm)}
+ \textheight 210mm
+ \textwidth 297mm
+ \special{file=/tex/hplandsc.esc}
+ \fi
+ \ifx\test\dinafuenf
+ \typeout{Papierformat : DINA5 (210x148mm)}
+ \textheight 210mm
+ \textwidth 148mm
+ \fi
+ \ifx\test\dinafuenfq
+ \typeout{Papierformat : DINA5 quer (148x210mm}
+ \textheight 148mm
+ \textwidth 210mm
+ \fi
+ \ifx\test\dinasechs
+ \typeout{Papierformat : DINA6 (147x104mm}
+ \textheight 147mm
+ \textwidth 104mm
+ \fi
+ \ifx\test\dinasechsq
+ \typeout{Papierformat : DINA6 quer (104x147mm}
+ \textheight 104mm
+ \textwidth 147mm
+ \fi
+ \oddsidemargin#1
+ \evensidemargin#2
+ \topmargin#3
+ \addtolength{\textwidth}{-#1}
+ \addtolength{\textwidth}{-#2}
+ \addtolength{\textheight}{-#3}
+ \addtolength{\textheight}{-#4}
+ \addtolength{\textheight}{-\headheight}
+ \addtolength{\textheight}{-\headsep}
+ \addtolength{\textheight}{-\footskip}
+ \clearpage}
+%
+% Auswahl der Papierquelle
+%
+\newcommand{\papersource}[1]{\clearpage\global\def\test{#1}
+ \ifx\test\manuell
+ \typeout{Papierquelle : Manuell}
+ \special{file=/tex/hpmanuel.esc}
+ \fi
+ \ifx\test\kassette
+ \typeout{Papierquelle : Kassette}
+ \special{file=/tex/hpkasset.esc}
+ \fi}
+%
+\newcommand{\hfilll}{\hspace*{\fill}}
+\newcommand{\vfilll}{\vspace*{\fill}}
+\newcommand{\heute}{\the\day .\space\the\month .\space\the\year}
+\newcommand{\Heute}{\the\day .\space\ifcase\month\or Januar\or Februar
+ \or M\"arz\or April\or Mai\or Juni\or Juli\or August
+ \or September\or Oktober\or November\or Dezember\fi
+ \space\the\year}
+\newcommand{\platz}[2]{\begin{figure}[#2]
+ \unitlength#1
+ \begin{picture}(0,1)
+ \end{picture}
+ \end{figure}}
+\newcommand{\plz}[1]{\underline{\underline{\bf #1}}}
+%
+\newcommand{\llabel}[1]{{#1\hfill}}
+\newcommand{\lblabel}[1]{{\bf #1\hfill}}
+%
+\newenvironment{llist}[1]{\begin{list}{#1}%
+ {\settowidth{\labelwidth}{#1}
+ \setlength{\leftmargin}{\labelwidth}
+ \addtolength{\leftmargin}{\labelsep}
+ \renewcommand{\makelabel}{\llabel}}}%
+ {\end{list}}
+\newenvironment{lblist}[1]{\begin{list}{\bf #1}%
+ {\settowidth{\labelwidth}{\bf #1}
+ \setlength{\leftmargin}{\labelwidth}
+ \addtolength{\leftmargin}{\labelsep}
+ \renewcommand{\makelabel}{\lblabel}}}%
+ {\end{list}}
+\newenvironment{einzeilig}{\par\renewcommand{\baselinestretch}{0.9}
+ \small\normalsize}{\par}
+\newenvironment{eineinhalbzeilig}{\par\renewcommand{\baselinestretch}{1.2}
+ \small\normalsize}{\par}
+\newenvironment{texzeilig}{\par\renewcommand{\baselinestretch}{1}
+ \small\normalsize}{\par}
+\newcommand{\faltmarken}{\global\def\ftest{fm}}
+\newcommand{\ohnefaltmarken}{\global\def\|ftest{}}
+\unitlength=1mm
+\newcommand{\an}[2]{\savebox{\adrbox}(0,0){\put(0,0){\parbox{85mm}{#1}}}
+ \savebox{\anbox}
+ {\begin{picture}(0,0)
+ \put(0,0){\parbox[b]{85mm}{#1}}
+ \put(0,40){\parbox[b]{85mm}{\scriptsize#2}}
+ \end{picture}}
+}
+\newcommand{\AN}[2]{\savebox{\adrbox}(0,0){\put(0,0){\parbox{85mm}{#1}}}
+ \savebox{\anbox}
+ {\begin{picture}(0,0)
+ \put(0,0){\parbox[b]{85mm}{#1}}
+ \put(0,40){\parbox[b]{85mm}{\scriptsize#2}}
+ \put(-2,-2){\line(0,1){49}}
+ \put(87,-2){\line(0,1){49}}
+ \put(-2,-2){\line(1,0){89}}
+ \put(-2,47){\line(1,0){89}}
+ \end{picture}}
+}
+\savebox{\faltbox}{\begin{picture}(0,0)(20,-80)
+ \put(0,0){\line(1,0){2}}
+ \put(0,105){\line(1,0){2}}
+ \end{picture}}
+\newcommand{\datum}[1]{\savebox{\datumbox}(0,0){\put(0,0)
+ {\parbox[b]{\hsize}
+ {\hfilll\hfill\hfill #1}}}}
+\newcommand{\betreff}[1]{\par\medskip\smallskip
+ {#1}\par
+ \bigskip\bigskip}
+\newcommand{\Betreff}[1]{\begin{llist}{Betreff :}
+ \item{#1}
+ \end{llist}
+ \bigskip\smallskip}
+\newcommand{\betrifft}[1]{\begin{llist}{Betrifft :}
+ \item{#1}
+ \end{llist}
+ \bigskip\smallskip}
+\newcommand{\bestellung}[1]{\begin{llist}{Bestellung :}
+ \item{#1}
+ \end{llist}
+ \bigskip\smallskip}
+\newcommand{\quittung}[1]{\begin{llist}{Quittung :}
+ \item{#1}
+ \end{llist}
+ \bigskip\smallskip}
+\newcommand{\rechnung}[1]{\begin{llist}{Rechnung :}
+ \item{#1}
+ \end{llist}
+ \bigskip\smallskip}
+\newcommand{\lieferschein}[1]{\begin{llist}{Lieferschein :}
+ \item{#1}
+ \end{llist}
+ \bigskip\smallskip}
+\newcommand{\lieferung}[1]{\begin{llist}{Lieferung :}
+ \item{#1}
+ \end{llist}
+ \bigskip\smallskip}
+\newcommand{\sgdh}{\par Sehr geehrte Damen und Herren,\par\bigskip\medskip}
+\newcommand{\sgh}[1]{\par Sehr geehrter Herr {#1},\par\bigskip\medskip}
+\newcommand{\sgf}[1]{\par Sehr geehrte Frau {#1},\par\bigskip\medskip}
+\newcommand{\mfg}{\par\bigskip\medskip
+ Mit freundlichen Gr\"u{\ss}en\newline}
+\newcommand{\mfgr}{\par\bigskip\medskip
+ \hfilll\hfill\hfill Mit freundlichen Gr\"u{\ss}en
+ \hfilll\newline}
+\newcommand{\Mfgr}[1]{\par\bigskip\medskip
+ \hfilll\hfill\hfill Mit freundlichen Gr\"u{\ss}en
+ \hfilll\newline\begin{center}#1\end{center}}
+\newcommand{\hav}{\par\bigskip\medskip
+ Hochachtungsvoll\newline}
+\newcommand{\havl}{\par\bigskip\medskip
+ \hfilll\hfill\hfill Hochachtungsvoll
+ \hfilll\newline}
+\newcommand{\Havl}[1]{\par\bigskip\medskip
+ \hfilll\hfill\hfill Hochachtungsvoll
+ \hfilll\newline\begin{center}#1\end{center}}
+\newcommand{\ieg}{\par\bigskip\medskip
+ \hfilll\hfill\hfill In Empfang genommen von \rule{5cm}{1pt}
+ \hfilll\newline}
+\newcommand{\we}{\par\bigskip\medskip
+ \hfilll\hfill\hfill Ware erhalten \rule{5cm}{1pt}
+ \hfilll\newline}
+\newcommand{\be}{\par\bigskip\medskip
+ \hfilll\hfill\hfill Betrag erhalten \rule{5cm}{1pt}
+ \hfilll\newline}
+\newcommand{\gez}[1]{\par\bigskip\medskip
+ gez. {#1}\newline}
+\newcommand{\anlage}[1]{\par\vfill
+ {#1}\newline}
+\newcommand{\Anlage}[1]{\par\vfill
+ Anlage : {#1}\newline}
+\newcommand{\anlagen}[1]{\par\vfill
+ Anlagen :\newline
+ {#1}\newline}
+\newcommand{\anlageN}{\par\vfill
+ Anlagen\newline}
+\newcommand{\Anlagen}[1]{\vfill
+ \begin{llist}{Anlagen :}
+ \item{#1}
+ \end{llist}}
+\newcommand{\briefkopf}{\newpage \thispagestyle{firstpage}
+ \begin{picture}(165,60)(0,-10)
+ \put(-5,66){\usebox{\vonbox}}
+ \put(-5,16){\usebox{\anbox}}
+ \put(0,-5){\usebox{\datumbox}}
+ \end{picture}
+ \newline}
+\newcommand{\Ps}[1]{\vfill\begin{llist}{p.s. :\small }
+ \item{#1}
+ \end{llist}
+ \bigskip\smallskip}
+\newcommand{\Pps}[1]{\vfill\begin{llist}{p.p.s. :\small }
+ \item{#1}
+ \end{llist}
+ \bigskip\smallskip}
+\newcounter{Nr}
+\newcommand{\nr}{\addtocounter{Nr}{1}\arabic{Nr}}
+\newcommand{\Nr}{\addtocounter{Nr}{1}\fbox{\arabic{Nr}}}
+%
+% kleine Postkarte 13.9 x 8.9 cm
+%
+% \karte{Kartentext}{Absender und Datum}{Adresse}
+%
+\newcommand{\karte}[3]{\newpage \thispagestyle{plain}
+ \begin{picture}(139,89)(25,-22)
+ \put(0,80){\parbox[t]{55mm}{#1}}
+ \put(70,80){\parbox[t]{35mm}{#2}}
+ \put(70,47){\parbox[t]{65mm}{#3}}
+ \put(15,0){\line(1,0){25}}
+ \end{picture}}
+%
+% grosse Postkarte 14.7 x 10.4 cm
+%
+% \Karte{Kartentext}{Absender und Datum}{Adresse}
+%
+\newcommand{\Karte}[3]{\newpage \thispagestyle{plain}
+ \begin{picture}(147,104)(20,-12)
+ \put(0,95){\parbox[t]{65mm}{#1}}
+ \put(80,95){\parbox[t]{35mm}{#2}}
+ \put(80,45){\parbox[t]{60mm}{#3}}
+ \put(20,0){\line(1,0){25}}
+ \end{picture}}
+%
+% grosse Postkarte (Vordruck mit Briefmarke) 14.7 x 10.4 cm
+%
+% \postkarte{Absender}{Text1}{Adresse}
+%
+\newcommand{\postkarte}[4]{\newpage \thispagestyle{plain}
+ \begin{picture}(147,104)(20,-12)
+ \put( 0,94){\parbox[t]{65mm}{#1}} % Absender
+ \put( 0,50){\parbox[t]{65mm}{#2}} % Text1 (unterm Absender)
+ \put( 0, 5){\line(1,0){65}} % Untere Grenze fuer Text1
+ \put(80,60){\parbox[t]{60mm}{#3}} % Adresse
+ \end{picture}
+ \newpage\thispagestyle{plain}
+ \begin{picture}(147,104)(20,-32)
+ \put( 0,94){\parbox[t]{137mm}{#4}} % Text2 (unterm Absender)
+ \put( 0, 5){\line(1,0){137}} % Untere Grenze fuer Text2
+ \end{picture}}
+%
+% Verechnungsscheck 15.0 x 13.0 cm
+%
+% \scheck{Absender}{Empfaenger}{Betragzahl}{Betragwort}{Ort}{Datum}
+%
+\newcommand{\scheck}[6]{\newpage \thispagestyle{plain}
+ \begin{picture}(150,130)(25,-32)
+ \put( 20,122){\parbox[b]{125mm}{\scriptsize\bf #1}} % Absender auf Empfaengerbeleg
+ \put( 20, 95){\parbox[b]{100mm}{#1}} % Absender auf Scheck
+ \put( 15, 50){\parbox[t]{80mm}{#2}} % Empfaenger (Adressfeld)
+ \put(115, 65){\parbox[b]{30mm}{\bf-~#3~-}} % Betrag als Zahl
+ \put(115,112){\parbox[b]{30mm}{\bf #3}} % Betrag auf Empfaengerbeleg
+ \put( 40, 65){\parbox[b]{55mm}{\bf-~#4~-}} % Betrag in Worten
+ \put(115, 53){\parbox[b]{30mm}{#5}} % Unterzeichnungsort
+ \put(115, 45){\parbox[b]{30mm}{#6}} % Unterzeichnungsdatum
+ \end{picture}}
+%
+\newcommand{\brieftext}{}
+\newcommand{\brief}[1]{\renewcommand{\brieftext}{#1}}
+%
+% Beschriftung von DIN-C6-Umschlaegen
+%
+\newcommand{\umschlagc}[2]{\newpage \thispagestyle{plain}
+ \typeout{}
+ \typeout{Achtung: Seite (\thepage ) ist ein
+ Briefumschlag! Anschlagstaerke!!!}
+ \typeout{}
+ \global\def\test{#1}
+ \ifx\test\Von
+ \relax
+ \else
+ \savebox{\absbox}(0,0)
+ {\put(0,0){\parbox[t]{70mm}{#1}}}
+ \fi
+ \global\def\test{#2}
+ \ifx\test\An
+ \relax
+ \else
+ \savebox{\adrbox}(0,0)
+ {\put(0,0){\parbox{80mm}{#2}}}
+ \fi
+ \begin{picture}(160,110)(25,-30)
+ \put(70,35){\usebox{\adrbox}}
+ \put(0,95){\usebox{\absbox}}
+ \end{picture}}
+%
+% Beschriftung von DL-Umschlaegen
+%
+\newcommand{\umschlagdl}[2]{\newpage \thispagestyle{plain}
+ \typeout{}
+ \typeout{Achtung: Seite (\thepage ) ist ein
+ Briefumschlag! Anschlagstaerke!!!}
+ \typeout{}
+ \global\def\test{#1}
+ \ifx\test\Von
+ \relax
+ \else
+ \savebox{\absbox}(0,0)
+ {\put(0,0){\parbox[t]{70mm}{#1}}}
+ \fi
+ \global\def\test{#2}
+ \ifx\test\An
+ \relax
+ \else
+ \savebox{\adrbox}(0,0)
+ {\put(0,0){\parbox{80mm}{#2}}}
+ \fi
+ \begin{picture}(160,110)(25,-30)
+ \put(110,35){\usebox{\adrbox}}
+ \put(0,95){\usebox{\absbox}}
+ \end{picture}}
+\newcommand{\von}[3]{\clearpage
+ \global\def\test{#1}
+ \ifx\test\thd
+ \savebox{\vonbox}{\Thdadresse}
+ \savebox{\absbox}(0,0){\thdadresse}
+ \else\ifx\test\firma
+ \savebox{\vonbox}{\Firmenadresse}
+ \savebox{\absbox}(0,0){\firmenadresse}
+ \else\ifx\test\altfirma
+ \savebox{\vonbox}{\Altfirmenadresse}
+ \savebox{\absbox}(0,0){\altfirmenadresse}
+ \else\ifx\test\privat
+ \savebox{\vonbox}(0,0){\Privatadresse}
+ \savebox{\absbox}(0,0){\privatadresse}
+ \else\ifx\test\zweit
+ \savebox{\vonbox}(0,0){\Zweitadresse}
+ \savebox{\absbox}(0,0){\zweitadresse}
+ \else
+ \savebox{\vonbox}{\begin{picture}(0,0)
+ \put(0,0){\parbox[t]{110mm}{#1}}
+ \put(50,0){\parbox[t]{110mm}{#2}}
+ \put(100,0){\parbox[t]{110mm}{#3}}
+ \end{picture}}
+ \savebox{\absbox}{\put(0,0){\parbox[t]{70mm}{\begin{center}
+ #1~\\
+ #2~\\
+ #3
+ \end{center}}}}
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}
diff --git a/macros/latex209/contrib/letters/uni_stgt/ipebrief.sty b/macros/latex209/contrib/letters/uni_stgt/ipebrief.sty
new file mode 100644
index 0000000000..0c331ba1f0
--- /dev/null
+++ b/macros/latex209/contrib/letters/uni_stgt/ipebrief.sty
@@ -0,0 +1,415 @@
+Received: From DS0ITA51(BLACKY) by DS0RUS54 with Jnet id 6089
+ for ZRFN0370@DS0RUS54; Mon, 12 Mar 90 10:41 A
+Date: Mon, 12 Mar 90 10:38 N
+From: <BLACKY@DS0ITA51>
+Subject: ipebrief.sty
+To: zrfn0370@ds0rus54
+
+%aus letter.sty 21 Jul 85 entwickelt
+%
+% fuer Briefe mit Instituskopf im A4-Format, entsprechend den DIN-Normen
+% 5008 (von 1986), 2107, 2142 und 676 und den "Richtlinien zur Optischen
+% Gestaltung" der Universitaet Stuttgart
+%
+% Notwendig: Unilogo-Fonts !!
+%
+\typeout{Document Style 'ipebrief' von W. Schwarz}
+\typeout{Version 1.2 vom 12.2.1990}
+% Definition des Unilogo-Fonts
+\font\unilogo = uni4
+\font\grossfett = cmssbx10 at 12pt
+\font\grosschrift = cmss10 at 12pt
+\font\schriftzug = cmss10
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@namedef{ds@norm}{\def\@ptsize{3}}
+\@twosidefalse
+\def\ds@draft{\overfullrule 5pt}
+\@options
+%Option fuer deutsche Version (Datum)
+\newif\if@german\@germanfalse
+\def\ds@german{\@germantrue}
+\@options
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+% Umlaute koennen mit z.B. "o eingegeben werden
+\catcode`\"=\active \let"=\" \let\3=\ss
+%Grundzeilenabstand 1/6in = 4,23mm (DIN 2107,2142)
+\newdimen\GZA
+\GZA=4.23mm
+
+\ifcase \@ptsize\relax
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt \abovedisplayskip
+10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt} \def\small{\@setsize\small{11pt}\ixpt\@ixpt \abovedisplayskip
+8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt
+minus 2pt}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip
+\abovedisplayskip \abovedisplayshortskip \z@ plus
+1pt\belowdisplayshortskip 3pt plus 1pt minus 2pt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt} \or
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip
+\abovedisplayskip \abovedisplayshortskip \z@
+plus3pt\belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt \abovedisplayskip 10pt plus2pt
+minus5pt\belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@
+plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip
+\abovedisplayskip \abovedisplayshortskip \z@ plus
+1pt\belowdisplayshortskip 4pt plus 2pt minus 2pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt} \or
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip
+\abovedisplayskip \abovedisplayshortskip \z@
+plus3pt\belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt \abovedisplayskip 11pt
+plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt} \def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip
+\abovedisplayskip \abovedisplayshortskip \z@
+plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt} \let\Huge=\huge \or %
+Norm-Option (DIN 2107, 2142)
+\def\@normalsize{\@setsize\normalsize{1\GZA}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip
+\abovedisplayskip \abovedisplayshortskip \z@
+plus3pt\belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+\def\small{\@setsize\small{11pt}\xpt\@xpt \abovedisplayskip 10pt plus2pt
+minus5pt\belowdisplayskip \abovedisplayskip \abovedisplayshortskip \z@
+plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip
+\abovedisplayskip \abovedisplayshortskip \z@ plus
+1pt\belowdisplayshortskip 4pt plus 2pt minus 2pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt} \fi \normalsize
+
+\newif\iffenster\fenstertrue \def\keinfenster{\fensterfalse}
+\def\returnaddress{\parbox[b]{85mm}{\baselineskip 8pt \viipt\rm
+\hspace*{\fill}Institut f\"ur Physikalische Elektronik\hspace*{\fill}\\
+\hspace*{\fill}Pfaffenwaldring 47 $\cdot$ 7000 Stuttgart
+80\hspace*{\fill}}} \def\postvermerk#1{\def\Vermerk{#1}} \def\Vermerk{}
+\def\betreff#1{\def\Betreff{\ignorespaces #1}} \def\Betreff{}
+\def\Datum#1{\def\date{#1}} \def\date{\if@german\heute\else\today\fi}
+\newif\ifanlagenr\anlagenrfalse \def\anlagenrechts{\anlagenrtrue}
+\def\anlagen#1{\def\Anlagentext{#1}} \def\Anlagentext{}
+\def\verteiler#1{\def\Verteilertext{#1}} \def\Verteilertext{}
+%Verteiler \def\ps{\par\parbox[t]{\textwidth}{\startbreaks}}
+\def\cc#1{\par\noindent \parbox[t]{\textwidth}{\@hangfrom{\rm
+\if@german Verteiler: \else copy to: \fi}#1\strut}\par}
+\def\encl#1{\par\noindent \parbox[t]{\textwidth}{\@hangfrom{\rm
+\if@german Anlagen: \,\else%
+encl.: \ \ \ \ \fi}#1\strut}\par}
+%Parameter fuer Feineinstellung des Druckers
+\newdimen\feinx
+\newdimen\feiny \feinx=0.55mm \feiny=-1.3mm \newcount\sparzahl
+\sparzahl=0 \def\spare#1{\sparzahl=#1} \newdimen\Etiketthoehe
+\Etiketthoehe=4.1cm
+
+\oddsidemargin 0pt \evensidemargin 0pt \marginparwidth 90pt
+\marginparsep 11pt \marginparpush 5pt \topmargin -2\GZA \headheight
+1\GZA \headsep 2\GZA \footheight 12pt \footskip 25pt \topskip 1\GZA
+\textheight 55\GZA \textwidth 6in \columnsep 10pt \columnseprule 0pt
+%neu Anpassung an Druckereinstellung
+\advance\topmargin by \feiny
+\advance\oddsidemargin by \feinx \advance\evensidemargin by \feinx
+
+\raggedbottom
+\footnotesep 12pt \skip\footins 10pt plus 2pt minus 4pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+%Neudefinition des opening-Befehls
+
+% falls \durchwahl nicht besetzt ist, wird Sekretariatsnummer angegeben!
+\long\def\durchwahl#1{\def\durch{#1}} \def\durch{71\,41}
+% falls \user nicht besetzt ist, wird ausgegeben: TREBIN@DS0ITA51
+\long\def\user#1{\def\userid{#1}}\def\userid{TREBIN}
+
+\def\opening#1{\thispagestyle{empty} \unitlength 1mm
+\begin{picture}(0,0)
+%Institutskopf
+\put(0,0){\unilogo L}
+\put(110,13){\parbox[t]{6cm}{\baselineskip 15pt {\grossfett
+Universit\"at Stuttgart\\\\} {\grosschrift Institut f\"ur\\
+Physikalische Elektronik} }} \put(110,-16.16){\parbox[t]{6cm}{\parskip
+0.7em \schriftzug Pfaffenwaldring 47\\7000 Stuttgart
+80\\[1\baselineskip] Telefon (0711) 6\,85 - \durch \\ Telex TX
+07\,255\,455 univ d\\ Telefax (0711) 6\,85\,35\,00\\ E-Mail
+\userid\,@DS$\emptyset$ITA51\\[1\baselineskip] \date}}
+%Fenster
+\iffenster\fenst\fi
+%Empfaengeradresse
+\put(0,-21.15){\parbox[t]{3in}{\baselineskip 1\GZA\Vermerk \
+\par\toaddress}} \end{picture}
+%Anpassung fuer Betreff
+{\baselineskip1\GZA \parskip=0pt \ \par \vspace{14\GZA} \par} \Betreff \
+\ifnum\@ptsize=3\\[2\baselineskip]\else\\[1.5\baselineskip]\fi
+\def\Anrede{#1} \ifx\Anrede\empty \else #1\par\fi\nobreak} \def\fenst{%
+%Faltmarken
+\put(-19,-71.16){\line(1,0){3}}
+\put(-19,-176.16){\line(1,0){3}}
+%bei der gegenwaertigen Druckereinstellung wird die obere Faltmarke
+%besser nicht ausgegeben
+%\put(122.6,29){\line(0,1){3}}
+%Strich unter Returnadresse
+\put(-5.4,-16.16){\line(1,0){85}}
+%Setzen der Returnadresse
+\put(-5.4,-15.16){\returnaddress}}
+
+%Neudefinition des closing-Befehls
+\def\nickname#1{\def\kurzname{#1}}\def\kurzname{}
+\long\def\closing#1{\par\nobreak
+ \ifnum\@ptsize=3\relax\else\vspace{\parskip}\fi
+ \stopbreaks
+ \noindent
+ \parbox[t]{3.5in}{\raggedright
+ \ignorespaces #1 \ \\[4\GZA]
+ \ifx\@empty\kurzname
+ \fromsig
+ \else \kurzname \fi\strut}
+ \ifanlagenr\hfill \parbox[t]{2in}{\An}
+ \else \\[1\baselineskip]\An \fi}
+\def\An{\ifx\Anlagentext\empty\else\Anlagentext
+ \par \fi \ifx\Verteilertext\empty\else\Verteilertext\fi}
+
+\def\ps{\par\startbreaks}
+\def\stopletter{}
+
+\newcount\labelcount
+
+%Neudefinition des startlabel-Befehls
+\def\startlabels{\labelcount=0 \baselineskip=0pt \lineskip=0pt
+\setcounter{page}{91}
+\pagestyle{empty}
+\topmargin 2.23cm
+\topskip 0pt
+\headheight 0pt
+\headsep 0pt
+\oddsidemargin -2cm
+\evensidemargin -2cm
+%Druckeranpassung
+\advance\topmargin by \feiny
+\advance\oddsidemargin by \feinx
+\advance\evensidemargin by \feinx
+\textheight=6\Etiketthoehe
+\advance\textheight by .05cm
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 19.8cm
+\columnsep 1.2cm
+\xipt
+\baselineskip=0pt
+\lineskip=0pt
+\boxmaxdepth=0pt
+\twocolumn
+\relax
+\ifnum\sparzahl>0
+ \ifnum\sparzahl>5\ \newpage\advance\sparzahl by -6\fi
+ \vspace*{\sparzahl\Etiketthoehe}\par\fi}
+
+
+\long\def\mlabel#1#2{\parskip=1\GZA
+ \baselineskip1\GZA
+ \setbox0\vbox{
+ \hspace*{0.54cm}
+ \parbox[b]{8.7cm}{\ignorespaces
+ #1\rule{0pt}{10pt} \par #2 }}
+ \vbox to \Etiketthoehe{\box0\vss }}
+
+%Neudefinition des letter-Befehls
+\long\def\letter#1{\newpage
+ \c@page\@ne
+ \interlinepenalty=200 \def\toaddress{#1}}
+
+%Neudefinition des endletter-Befehls
+\def\endletter{\stopletter\@@par\pagebreak\@@par
+ \if@filesw
+ \begingroup
+ \def\protect{\string}
+ \let\\=\relax
+ \def\protect##1{\string##1\space}
+ \immediate\write\@auxout{\string\mlabel{\Vermerk}%
+ {\toaddress}}
+ \endgroup
+ \fi}
+
+
+\def\stopbreaks{\interlinepenalty \@M
+\def\par{\@@par\nobreak}\let\\=\@nobreakcr \let\vspace\@nobreakvspace}
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+\@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+\def\startbreaks{\let\\=\@normalcr \interlinepenalty
+200\def\par{\@@par\penalty 200}}
+\def\signature#1{\def\fromsig{\parbox[t]{7cm}{\begin{center}{#1}\end{center}}}}
+\def\fromsig{}
+
+
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\string\startlabels\string\@startlabels}\fi
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+\def\enddocument{\@checkend{document}\newpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\makeatletter\input \jobname.aux\clearpage
+\fi\endgroup\deadcycles\z@\@@end}
+
+\def\makelabels{\@fileswtrue}
+\def\@startlabels{}
+
+\def\ps@empty{\def\@oddhead{}\def\@oddfoot{}\def\@evenhead{}\def\@evenfoot{}}
+
+%Neudefinition des plain-Stiles
+\def\ps@plain{\def\@oddfoot{}\def\@oddhead{\rm\hspace{3in}
+ -- \thepage\ --\hfil}
+ \def\@evenfoot{}\let\@evenhead\@oddhead}
+
+\ifnum\@ptsize=3\parskip=1\baselineskip\else \parskip=0.7em\fi
+\parindent 0pt \topsep .4em \partopsep 0pt \itemsep .4em
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+\let\@listi\relax
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep .2em
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -15pt\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15pt}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hfil \it #1}
+\def\description{\list{}{\leftmargin\descriptionmargin
+ \labelwidth\leftmargin \advance\labelwidth -\labelsep
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@}
+
+\long\def\@makefntext#1{\noindent \hangindent 5pt\hbox
+ to 5pt{\hss $^{\@thefnmark}$}#1}
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+\def\today{\number\day.\ \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\year}
+
+\def\heute{\number\day.\ \ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi
+ \space\number\year}
+
+\smallskipamount=.5\parskip \medskipamount=\parskip
+\bigskipamount=2\parskip
+\ps@plain \pagenumbering{arabic} \onecolumn \@fileswfalse
+
diff --git a/macros/latex209/contrib/letters/uni_stgt/ipebrief_beispiel.tex b/macros/latex209/contrib/letters/uni_stgt/ipebrief_beispiel.tex
new file mode 100644
index 0000000000..21c47ef1a2
--- /dev/null
+++ b/macros/latex209/contrib/letters/uni_stgt/ipebrief_beispiel.tex
@@ -0,0 +1,270 @@
+\documentstyle[12pt,german]{ipebrief}
+\makelabels
+\begin{document}
+\durchwahl{5267}
+\user{BLACKY}
+\nickname{Wolfgang}
+\signature{Schwarz}
+\betreff{Beispiel f"ur den {\tt itapbrief1.sty}}
+\begin{letter}{An alle\\Benutzer der Brief-styles\par im Hause}
+\opening{Sehr geehrte(r) Leser(in),}
+nachfolgend ein Auszug aus dem Normblatt DIN 5008, das die {\em "au"sere
+Form} eines Briefes festlegt. Der Inhalt wird dadurch nicht ber"uhrt!
+Der nachfolgende Text stammt von Rainer Sengerling.
+
+{\large\bf 12\quad Beschriften von Briefbl"attern}\\[1mm]
+Die Verwendung genormter Vordrucke wird vorausgesetzt {\sl (siehe Seite 19
+"`Zitierte Normen und andere Unterlagen"')}. F"ur andere Formate, anderen
+Aufdruck und f"ur Bl"atter ohne Aufdruck sind die folgenden Abschnitte
+sinngem"a"s
+anzuwenden {\sl (siehe auch Abschnitt 12.15)}.
+
+\vspace{3mm}
+
+{\bf 12.4\quad Zeilenabstand}\\[1mm]
+Es wird mit einfachem Grundzeilenabstand (Zeilenabstand 1 bzw.\
+einzeilig) geschrieben.
+
+In Schriftst"ucken mit hoch- oder tiefgestellten Schriftzeichen oder in
+Schreiben besonderer Art darf mit gr"o"serem Zeilenabstand geschrieben
+werden {\sl (siehe Abschnitt 13.1)}
+
+{\sl Siehe "`Erl"auterungen"' zum Abschnitt 12.4}
+
+\vspace{3mm}
+
+{\bf 12.5\quad Anschriftfeld}\\[1mm]
+Anschriften werden im Anschriftfeld aller Schriftst"ucke und auf
+Briefh"ullen in gleicher Anordnung geschrieben. Satzzeichen innerhalb
+einer Anschriftzeile werden geschrieben; am Zeilenende fallen sie weg.
+Ortsnamen sind nicht gesperrt zu schreiben und nicht zu unterstreichen.
+
+Im Anschriftfeld sind au"ser der Anschrift des Empf"angers auch die
+postalischen Bestandteile zu vermerken (siehe Abschnitt 12.5.2\,a).
+
+F"ur die Verteilung der Zeilen im Anschriftfeld gelten die Muster im
+Abschnitt 12.5.6
+
+{\sl Siehe "`Erl"auterungen"' zum Abschnitt 12.5}
+
+{\bf 12.5.2\quad Gliederung}\\[1mm]
+Die Angaben im Anschriftfeld werden auf folgende Weise gegliedert (Punkt
+bedeutet Leerzeile):
+\renewcommand{\labelenumi}{\alph{enumi})}
+\begin{enumerate}
+\item Sendungsart, Versendungsform, Vorausverf"ugung\\
+$\bullet$
+\item Empf"angerbezeichnung
+\item Postfach (bei Briefsendungen an Abholer, Postfachinhaber) oder
+Stra"se und Hausnummer (bei zuzustellenden Sendungen)\\
+$\bullet$
+\item Postleitzahl und Bestimmungsort mit der Nummer des Postamtes\\
+$\bullet$
+\item Bestimmungsland
+\end{enumerate}
+
+Bei Auslandsanschriften ist die Leerzeile zwischen c) und d)
+entbehrlich, wenn das Bestimmungsland unter e) angegeben werden mu"s.
+
+{\sl Siehe Abschnitte 12.5.5 und 12.5.6}
+
+\vspace{2mm}
+
+{\bf 12.5.3\quad Unterstreichungen}\\[1mm]
+Die Angaben f"ur Sendungsart, Versendungsform und Vorausverf"ugung
+werden unterstrichen, wenn sie wegen Platzmangels nicht durch eine
+Leerzeile abgesetzt werden k"onnen.
+
+\vspace{2mm}
+
+{\bf 12.5.4\quad Empf"angerbezeichnungen}\\[1mm]
+Empf"angerbezeichnungen sollen sinngem"a"s in Zeilen aufgeteilt werden.
+
+Berufs- oder Amtsbezeichnungen werden in der Regel neben "`Herrn"' bzw.\
+"`Frau"', l"angere unter den Namen geschrieben.
+
+Akademische Grade (z.B. Dr., Dipl.-Ing.) stehen vor dem Namen
+
+{\sl Siehe Muster im Abschnitt 12.5.6}
+
+Bei Untermietern mu"s der Name des Wohnungsinhabers unter den Namen des
+Empf"angers geschrieben werden.
+
+{\sl Siehe Muster im Abschnitt 12.5.6}
+
+In Firmenanschriften wird das Wort "`Firma"' weggelassen, wenn aus der
+Emf"angerbezeichnung erkennbar ist, da"s es sich nicht um eine
+nat"urliche Person handelt.
+
+{\sl Siehe Muster im Abschnitt 12.5.6}
+
+\vspace{2mm}
+
+{\bf 12.5.5\quad Auslandsanschriften}\\[1mm]
+Auslandsanschriften m"ussen in lateinischer Schrift und in arabischen
+Ziffern gefa"st sein; Bestimmungsort und Bestimmungsland sind in
+Gro"sbuchstaben zu schreiben. Die Anordnung der Bestandteile der
+Anschrift sowie deren Schreibweise sind -- wenn m"oglich -- der
+Absenderangabe des Partners zu entnehmen. Der Bestimmungsort ist nach
+M"oglichkeit in der Sprache des Bestimmungslandes anzugeben (z.B. LIEGE
+statt L"uttich, FIRENZE statt Florenz, BUCURESTI statt Bukarest,
+THESSALONIKI statt Saloniki); die Angabe des Bestimmungslandes steht in
+der letzten Zeile der Anschrift. Im Verkehr mit bestimmten L"andern kann
+auf die Angabe des Bestimmungslandes verzichtet werden, wenn das
+Unterscheidungskennzeichen f"ur den grenz"uberschreitenden
+Kraftfahrzeugverkehr der Postleitzahl -- durch einen Bindestrich von
+dieser getrennt -- vorangesetzt wird\footnote{Die "Ubersicht der in
+Betracht kommenden L"ander ist beim Postamt erh"altlich.}
+
+{\sl Siehe Anschriften im Abschnitt 12.5.6}
+
+{\bf 12.5.6\quad Musteranschriften}\\[1mm]
+{\it s.\ Ende des Dokuments}
+
+\vspace{2mm}
+
+{\bf 12.7\quad Betreff und Teilbetreff}\\[1mm]
+Betreff und Teilbetreff sind stichwortartige Inhaltsangaben. Der Betreff
+bezieht sich auf den ganzen Brief, Teilbetreffe beziehen sich auf
+Briefteile.
+
+\vspace{2mm}
+{\bf 12.7.1\quad Der Wortlaut des Betreffs} \ldots Er wird ohne
+Schlu"spunkt geschrieben, beginnt an der Fluchtlinie und wird bei
+l"angerem Text sinngem"a"s auf mehrere Zeilen verteilt. \ldots
+
+\vspace{2mm}
+
+{\bf 12.7.2\quad Der Teilbetreff} beginnt an der Fluchtlinie, schlie"st
+mit einem Punkt und wird unterstrichen. Der Text wird unmittelbar
+angef"ugt.
+
+\vspace{2mm}
+
+{\bf 12.8\quad Behandlungsvermerke}\\[1mm]
+Behandlungsvermerke (z.B. Eilt) werden neben das Anschriftfeld,
+beginnend auf Grad 50, {\it (mit normbrief.sty nicht zu realisieren)}
+oder im Anschlu"s an die Betreffangabe geschrieben; sie k"onnen
+hervorgehoben werden.
+
+\vspace{3mm}
+
+{\bf 12.16\quad Briefh"ullen}\\[1mm]
+\ldots
+Die erste Zeile der Anschrift soll in der Mitte der Briefh"ullenh"ohe
+geschrieben werden.
+
+Die Absenderangabe beginnt in der 5.\ Zeile und wird ohne Leerzeilen und
+ohne Unterstreichung geschrieben.
+
+Zeilenanfang und -ende siehe Tabelle 2
+\newpage
+{\it aufbereitete} Tabelle 2
+
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{|l|c|c|}
+\hline
+&{\small Abstand zum linken} &{\small Zeilenl"ange}\\
+&{\small Rand, in cm}&{\small in cm}\\
+\hline
+{\bf Empf"angeranschrift}&&\\
+Vordrucke A4&2,54&7,62\\
+Briefh"ulle C6&7,62&6,35\\
+Briefh"ullen DL, C6/C5, C5&10,16&8,89\\
+Briefh"ulle C4&12,70&7,62\\
+\hline
+{\bf Absenderangabe}&&\\
+Briefh"ulle C6&1,27&3,81\\
+Briefh"ullen DL, C6/C5, C5&1,27&6,35\\
+Briefh"ulle C4&2,54&7,62\\
+\hline
+\end{tabular}
+\end{letter}
+\begin{letter}{Frau\\Erika Werner\\bei M"uller\\Bahnhofstr.\ 4 -- 6
+
+8580 Bayreuth}
+\end{letter}
+\begin{letter}{Frau\\ Annemarie Hartmann\\Vogelsangstr. 17 II\par
+2870 Delmenhorst}
+\postvermerk{Briefdrucksache}
+\end{letter}
+\begin{letter}{02694/73\\Herrn Gutsverwalter\\Dipl.-Ldw.\ Otto Winter\\
+Hauptstr.\ 3
+
+8221 Alm Post Neukirchen}
+\postvermerk{Nicht nachsenden}
+\end{letter}
+\begin{letter}{Eheleute\\Erika und Hans M"uller\\Hochstr.\ 4
+
+4709 Bergkamen}
+\postvermerk{Warensendung}
+\end{letter}
+\begin{letter}{Herrn Staatsanwalt\\Dr.\ Ernst Meyer und Frau\\
+Talblick 2
+
+8200 Rosenheim}
+\postvermerk{Eilzustellung -- auch nachts}
+\end{letter}
+\begin{letter}{Herrn Rechtsanwalt\\Dr.\ Otto Freiherr von Bergheim\\
+Leonhard-Eck-Str.\ 7 W 36
+
+8000 M"unchen 19}
+\postvermerk{Einschreiben -- R"uckschein}
+\end{letter}
+\begin{letter}{Herrn Direktor\\Dipl.-Kfm.\ Kurt Gr"aser\\Massivbau AG\\
+Postfach 21 03 14
+
+5600 Wuppertal 21}
+\end{letter}
+\begin{letter}{Frau Luise Weber\\Herrn Max Weber\\Rosenstra"se 35
+
+7030 B"oblingen}
+\end{letter}
+\begin{letter}{Lack- und Farbwerke\\Dr.\ Hans Sendler \& Co.\\
+Abt.\ FDM 412/10\\Postfach 80 19 36\par
+6230 Frankfurt 80}
+\end{letter}
+\begin{letter}{Lehmann \& Krause KG\\z.\ H. Herrn E. Winkelmann\\
+Gartenhaus III r.\\Johannisberger Str.\ 5 a\par 1000 Berlin 31}
+\end{letter}
+\begin{letter}{W"aschegro"shandel\\Robert Bergmann\\Venloer
+Stra"se 80 -- 82\par 5000 K"oln 30}
+\end{letter}
+\begin{letter}{Firma\\Otto Pfleiderer\\Braunenweiler\\Hauptstr.\ 5\par
+7968 Saulgau 1}
+\postvermerk{Drucksache}
+\end{letter}
+\begin{letter}{Amtsgericht Leer\\Grundbuchamt\\Postfach 11 24\par
+2950 Leer}
+\end{letter}
+\begin{letter}{Regierungspr"asident\\Dezernat 44.II.2\\
+Postfach 59 07\par 4400 M"unster}
+\end{letter}
+\begin{letter}{Nassauische Heimst"atte GmhH\\
+Abt.\ Landestreuhandstelle\\Postfach 10 29 17\par 6000 Frankfurt 1}
+\end{letter}
+\begin{letter}{Volksbank Friedberg\\Hauptzweigstelle Bad Nauheim\\
+Aliceplatz 4\par 6350 Bad Nauheim}
+\end{letter}
+
+
+\begin{letter}{VEB Ph"onix-Apparatewerk\\Absatzabteilung\\Inselstr. 14/20
+
+DDR-7021 Leipzig}
+\postvermerk{Einschreiben}
+\end{letter}
+\begin{letter}{Mevrouv J. de Vries\\ Poste restante A. Cuypstraat\\
+Postbus 99730\\1000 NA AMSTERDAM
+
+NIEDERLANDE}
+\end{letter}
+\begin{letter}{Monsieur P. Dubois\\Expert en assurances\\
+Escalier 3, b\^atiment C\\4, rue Jean Jaur\`es
+
+F-58500 CLAMECY}
+\end{letter}
+\begin{letter}{Mr.\ W. Smith\\514 Kingsbridge Road\\PURLEY, SURREY\\DE
+1\\GROSSBRITANNIEN CRZ 4TH}
+\end{letter}
+\end{document}
+
diff --git a/macros/latex209/contrib/letters/uni_stgt/ipebrief_doc.tex b/macros/latex209/contrib/letters/uni_stgt/ipebrief_doc.tex
new file mode 100644
index 0000000000..27138585e4
--- /dev/null
+++ b/macros/latex209/contrib/letters/uni_stgt/ipebrief_doc.tex
@@ -0,0 +1,69 @@
+\documentstyle[12pt,german]{garticle}
+\begin{document}
+\section*{Verwendung des IPE-Brief styles}
+Der Style \verb|ipebrief.sty| erzeugt automatisch den
+Instituts-Briefkopf und setzt den mit \verb|\signature| eingegebenen
+Absender unter den Institutsnamen.
+
+Die Verwendung wird am besten an einem Beispiel klar:
+
+\begin{tabbing}b\hspace{7.2cm}b\=b\kill\\
+\verb|\documentstyle[12pt,german]{ipebrief}|\\[2\jot]\>
+\parbox[c]{7.5cm}{Der \verb|ipebrief|-Sty\-le er\-zeugt den ge\-sam\-ten
+Briefbogen, inclusive Uni-Logo.}\\[2\jot]
+\verb|\makelabels|\>\parbox[c]{7.5cm}{Am Schlu"s wird von allen Briefen
+ein Adressen-Aufkleber angefertigt, die auf speziellen, Bl"attern
+(z.\,B. von Zweckform) ausgedruckt werden k"onnen.}\\[2\jot]
+\verb|\begin{document}|\\[2\jot]
+\verb|\durchwahl{5267}|\>\parbox[c]{7.5cm}{Hier wird die
+Instituts-Telefonnummer angegeben; falls keine angegeben ist, wird die
+Sekretariats-Nummer eingesetzt.}\\[2\jot]
+\verb|\user{BLACKY}|\>\parbox[c]{7.5cm}{Hier wird die userid am OLI
+eingesetzt; falls keine angegeben ist, wird {\sf TREBIN}
+ausgedruckt.}\\[2\jot] \verb|\nickname{Wolfgang}|\\[2\jot]
+\verb|\signature{Lawrenz}|\>\parbox[c]{7.5cm}{Der mit
+{\tt$\backslash$signature} eingegebene Name steht einerseits unter dem
+Institutsnamen und -- falls kein {\tt $\backslash$nickname} eingegeben
+wurde -- auch unter dem Brief (vgl.\ bei {\tt $\backslash$closing}).
+Wird etwas mit {\tt $\backslash$nickname} eingegeben, dann steht dies
+ausschlie"slich am Ende des Briefes.}\\[2\jot] \verb|\begin{letter}{An
+Fa.\\|\\ \verb|Mammamia \& Co.\\|\\ \verb|Postfach 7754\\ \\|\\
+\verb|7000 Stuttgart}|\>\parbox[c]{7.5cm}{%
+In~der~Klammer~steht~die\-je\-ni\-ge Adresse, die in das Adressenfeld
+eingepasst wird.}\\[2\jot] \verb|\betreff{Betr.: Mahnung}|\> Kann auch
+weggelassen werden.\\[2\jot] \verb|\opening{Hallo
+zusammen}|\>\parbox[c]{7.5cm}{{\tt $\backslash$opening} veranla"st das
+System, den Briefkopf zu erzeugen und schreibt dann die angegebene
+Begr"u"sungsformel.}\\[2\jot] \verb|Wie geht es euch denn
+so?...|\>Brieftext, evtl.\ mehrseitig.\\[3\baselineskip]
+\verb|\closing{Mit freundlichen|
+\verb|Gr"u"sen}|\>\parbox[c]{7.5cm}{Hier wird die angegebene Gru"sformel
+ausgedruckt und ein St"uck darunter der Name des Unterzeichners.}\\
+[2\jot] \verb|\encl{3 Briefe}|\>\parbox[c]{7.5cm}{erzeugt den Ausdruck:
+Anlage: 3 Briefe}\\[2\jot] \verb|\cc{Bloss}|\>\parbox[c]{7.5cm}{gibt den
+Verteiler an.}\\[2\jot] \verb|\ps{PPPS: nichts mehr}|\>Nachschrift(en)\\
+\verb|\end{letter}|\\ \verb|\begin{letter}{...}|\>\parbox[c]{7.5cm}{Ein
+neuer Brief beginnt, f"ur den dieselben Ausdr"ucke f"ur {\tt
+$\backslash$signature}, {\tt $\backslash$user} usw.\ eingesetzt
+werden.}\\[2\jot] \verb|\end{letter}|\\ \verb|\end{document}|
+\end{tabbing}
+
+Die beiden Brief-Styles sind f"ur englische und deutsche Briefe verschieden
+zu verwenden. Im Fall eines englischsprachigen Briefes darf die Option
+\verb|german| {\em nicht} verwendet werden. Dann wird das Datum auf
+amerikanische Art angegeben (z.\,B.\ March 15, 1989), bei der Telefonnummer
+automatisch die L"andervorwahl f"ur Deutschland erg"anzt und bei der
+Ortsvorwahl die 0 weggelassen. Bei der Angabe des Verteilers (mit
+\verb|\cc|) erscheint der Ausdruck "`copy to:"'; bei \verb|\encl| wird
+"`encl:"' ausgedruckt.
+
+Damit f"ur die Trennung die englischen Trennregeln beachtet werden, mu"s
+der File nun mit \verb|latex| "ubersetzt werden.
+
+Bei deutschen Briefen {\em mu"s} die Option \verb|german| gew"ahlt werden
+und mit \verb|glatex| "ubersetzt werden, damit das Datum in deutscher
+Schreibweise angegeben ist und die deutschen Trennregeln beachtet werden.
+
+\end{document}
+
+
diff --git a/macros/latex209/contrib/letters/uni_stgt/localmode.mf b/macros/latex209/contrib/letters/uni_stgt/localmode.mf
new file mode 100644
index 0000000000..cee9161de8
--- /dev/null
+++ b/macros/latex209/contrib/letters/uni_stgt/localmode.mf
@@ -0,0 +1,17 @@
+Received: From DS0ITA51(BLACKY) by DS0RUS54 with Jnet id 6087
+ for ZRFN0370@DS0RUS54; Mon, 12 Mar 90 10:39 A
+Date: Mon, 12 Mar 90 10:37 N
+From: <BLACKY@DS0ITA51>
+Subject: localmode.mf
+To: zrfn0370@ds0rus54
+
+mode_def hplaser = % HP Laserjet II
+ proofing:=0; % no, we're not making proofs
+ fontmaking:=1; % yes, we are making a font
+ tracingtitles:=0; % no, don't show titles in the log
+ pixels_per_inch:=300; %
+ blacker:=0; % don't make the pens any blacker
+ fillin:=0; % and don't compensate for fillin
+ o_correction:=0; % but suppress all overshoots
+ enddef;
+
diff --git a/macros/latex209/contrib/letters/uni_stgt/uni.mf b/macros/latex209/contrib/letters/uni_stgt/uni.mf
new file mode 100644
index 0000000000..c33c4e8f7c
--- /dev/null
+++ b/macros/latex209/contrib/letters/uni_stgt/uni.mf
@@ -0,0 +1,79 @@
+%
+% Programm zum Erzeugen des Signets der Universitaet Stuttgart
+% mit METAFONT (Version 1.7....)
+%
+% Autor: Wolfgang Schwarz, Institut f. Theoret. und Angewandte Physik
+%
+% Das Unilogo ist als Buchstabe L des mit diesem Programm
+% erzeugten Fonts anzusprechen
+%
+% Weitergabe an Dritte nur mit Zustimmung des Autors!
+%
+mode_setup;
+hoehe#:=9.8pt#; % Logo-Grundseite
+define_pixels(hoehe);
+halbe:=(0.57/16)*hoehe; % halbe Diagonale einer einzelnen Raute
+beginchar("L",hoehe#,hoehe#,0);
+%
+% Grundroutine zum Erzeugen einer Raute
+%
+def raute(expr x,y,winkel)=fill(halbe,0)--(2halbe,halbe)--(halbe,2halbe)
+--(0,halbe)--cycle shifted (x+(1/2hoehe-1halbe),y+(1/2hoehe-1halbe))
+rotatedaround ((1/2hoehe,1/2hoehe),winkel);
+enddef;
+%
+% Routine zum Erzeugen eines Viertels des Logos aus 42 Rauten
+%
+def viertel(expr winkel) =
+raute(0.000hoehe,0.000hoehe,winkel);
+raute(0.091hoehe,0.000hoehe,winkel);
+raute(0.205hoehe,0.000hoehe,winkel);
+raute(0.342hoehe,0.000hoehe,winkel);
+raute(0.500hoehe,0.000hoehe,winkel);
+raute(0.000hoehe,0.500hoehe,winkel);
+% Y-Axis (0,*)
+raute(0.000hoehe,0.342hoehe,winkel);
+raute(0.000hoehe,0.205hoehe,winkel);
+raute(0.000hoehe,0.091hoehe,winkel);
+raute(0.000hoehe,0.091hoehe,winkel);
+raute(0.000hoehe,0.205hoehe,winkel);
+raute(0.000hoehe,0.342hoehe,winkel);
+raute(0.000hoehe,0.500hoehe,winkel);
+raute(0.041hoehe,0.041hoehe,winkel);
+% First winkel (+,+)
+raute(0.087hoehe,0.087hoehe,winkel);
+raute(0.137hoehe,0.137hoehe,winkel);
+raute(0.191hoehe,0.191hoehe,winkel);
+raute(0.249hoehe,0.249hoehe,winkel);
+raute(0.311hoehe,0.311hoehe,winkel);
+raute(0.377hoehe,0.377hoehe,winkel);
+raute(0.144hoehe,0.046hoehe,winkel);
+raute(0.046hoehe,0.144hoehe,winkel);
+raute(0.202hoehe,0.097hoehe,winkel);
+raute(0.097hoehe,0.202hoehe,winkel);
+raute(0.263hoehe,0.152hoehe,winkel);
+raute(0.152hoehe,0.263hoehe,winkel);
+raute(0.270hoehe,0.051hoehe,winkel);
+raute(0.051hoehe,0.270hoehe,winkel);
+raute(0.328hoehe,0.211hoehe,winkel);
+raute(0.211hoehe,0.328hoehe,winkel);
+raute(0.338hoehe,0.107hoehe,winkel);
+raute(0.107hoehe,0.338hoehe,winkel);
+raute(0.398hoehe,0.274hoehe,winkel);
+raute(0.274hoehe,0.398hoehe,winkel);
+raute(0.412hoehe,0.166hoehe,winkel);
+raute(0.166hoehe,0.412hoehe,winkel);
+raute(0.418hoehe,0.056hoehe,winkel);
+raute(0.056hoehe,0.418hoehe,winkel);
+raute(0.488hoehe,0.231hoehe,winkel);
+raute(0.231hoehe,0.488hoehe,winkel);
+raute(0.498hoehe,0.116hoehe,winkel);
+raute(0.116hoehe,0.498hoehe,winkel);
+enddef;
+%
+% "Hauptprogramm"
+for quadrant=0 upto 3:
+winkel:=quadrant*90;
+viertel(winkel) endfor
+endchar;
+
diff --git a/macros/latex209/contrib/letters/uni_stgt/unilogo b/macros/latex209/contrib/letters/uni_stgt/unilogo
new file mode 100644
index 0000000000..e92a61ac8d
--- /dev/null
+++ b/macros/latex209/contrib/letters/uni_stgt/unilogo
@@ -0,0 +1,21 @@
+Received: From DS0ITA51(BLACKY) by DS0RUS54 with Jnet id 6085
+ for ZRFN0370@DS0RUS54; Mon, 12 Mar 90 10:38 A
+Date: Mon, 12 Mar 90 10:35 N
+From: <BLACKY@DS0ITA51>
+Subject: unilogo
+To: zrfn0370@ds0rus54
+
+Liebe Frau Burr,
+
+anbei erhalten sie alle Files, die Sie fuer das Unilogo brauchen:
+
+uni.mf die Quelle
+localmode.mf Einstellungen, wie ich sie zur Erzeugung des Logos
+ verwendet habe. In der Zwischenzeit habe ich aber
+ erfahren, dass der \localmode imagen zusammen mit
+ waits.mf auch fuer HP geeignet sei (ich hab's aber
+ nicht ausprobiert).
+logo.com DCL-Kommando-File in dem die (verbindliche) Reihenfolge
+ der Taten steht.
+ipebrief.sty Briefstyle (fuer das Inst. fuer Physikalische Elektronik)
+ das den Richlinien der Uni entspricht.
diff --git a/macros/latex209/contrib/lfonts_ams/lfonts_ams.readme b/macros/latex209/contrib/lfonts_ams/lfonts_ams.readme
new file mode 100644
index 0000000000..5b62961efc
--- /dev/null
+++ b/macros/latex209/contrib/lfonts_ams/lfonts_ams.readme
@@ -0,0 +1,11 @@
+Here is another possibly useful LaTeX file. This file is a modified
+lfonts.tex file that includes the stuff necessary for the American
+Mathematicsl Society fonts. There is a file called mssymb.tex that
+they distribute that does the right things so that you can use their
+fonts with Plain TeX but it doesn't have the necessary wiggle to work
+with LaTeX. I incorporated it into lfonts.tex and made up a special
+LaTeX called ``latex_ams''. This way you can use the AMS symbols with
+LaTeX's \small, etc. commands. The biggest problem is that the
+largest size currently available of the AMS fonts is 10 point. If you
+try to use anything larger than 10 point LaTeX will complain and tell
+you that it is substituting the 10 point size.
diff --git a/macros/latex209/contrib/lfonts_ams/lfonts_ams.tex b/macros/latex209/contrib/lfonts_ams/lfonts_ams.tex
new file mode 100644
index 0000000000..820d43fb1f
--- /dev/null
+++ b/macros/latex209/contrib/lfonts_ams/lfonts_ams.tex
@@ -0,0 +1,1245 @@
+% File LFONTS - Version of 6 May 1986.
+%
+% Here is another possibly useful LaTeX file. This file is a modified
+% lfonts.tex file that includes the stuff necessary for the American
+% Mathematicsl Society fonts. There is a file called mssymb.tex that
+% they distribute that does the right things so that you can use their
+% fonts with Plain TeX but it doesn't have the necessary wiggle to work
+% with LaTeX. I incorporated it into lfonts.tex and made up a special
+% LaTeX called ``latex_ams''. This way you can use the AMS symbols with
+% LaTeX's \small, etc. commands. The biggest problem is that the
+% largest size currently available of the AMS fonts is 10 point. If you
+% try to use anything larger than 10 point LaTeX will complain and tell
+% you that it is substituting the 10 point size.
+%
+% This version of LFONTS.TEX is for the CMR fonts. It was converted
+% from the AMR version by David Fuchs on 18 December 1985.
+%
+% This file needs to be customized for the fonts available at a particular
+% site. There are three places where changes need to be made. They
+% can be found by searching this file for the string FONT-CUSTOMIZING.
+%
+% FONT CONVENTIONS
+%
+% A TYPESTYLE COMMAND is something like \it that defines a type style.
+% Each style command \xx is defined to be \protect\pxx, where
+% \pxx is defined to choose the correct font for the current size.
+% This allows style commands to appear in 'unsafe' arguments where
+% protection is required.
+%
+% A SIZE COMMAND is something like \normalsize that defines a type size.
+% It is defined by the document style. However, \normalsize is handled
+% somewhat differently because it is called so often--e.g., on every
+% page by the output routine. The document style defines \@normalsize
+% instead of \normalsize.
+%
+% A ONE-SIZE typestyle is one that exists only in the \normalsize size.
+%
+% A FONT-SIZE COMMAND is one that defines \textfont, \scriptfont and
+% \scriptscriptfont for the font families corresponding to preloaded fonts,
+% as well as the typestyle commands for the preloaded fonts. Each
+% font-size command has an associated @fontsize command, having the same
+% name except for an '@' at the front. All font-size commands are defined
+% in LFONTS. The naming convention is that a fifteenpt font has a font-size
+% name \xvpt, and so on.
+%
+% Each size command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% which does the following.
+% 0. Executes \@nomath\SIZE to issue warning if in math mode.
+% 1. \let \@currsize = \SIZE
+% 2. Sets \strutbox to a strut of height .7 * BASELINESKIP and
+% depth .3 * BASELINESKIP
+% 3. Sets \baselineskip to \baselinestretch * BASELINESKIP
+% and
+% 4. Calls \FONTSIZE
+% 5. Executes the \@FONTSIZE command.
+% It should then define all the typestyle commands not defined by the font-size
+% command, except for the one-size type styles. A typestyle command for which
+% the corresponding font exists but is not preloaded is defined to expand to a
+% \@getfont command. A typestyle whose font does not exist is defined to
+% expand to a \@subfont command.
+%
+% A one-size typestyle whose font is not preloaded is defined to expand to
+% a \@onesizefont command.
+%
+% \em is defined to be \it inside an unslanted style and \rm inside a
+% slanted style. An \em command in a section title will produce a \pem
+% command in the table of contents.
+%
+
+\def\em{\protect\pem{}}
+\def\pem{\ifdim \fontdimen\@ne\font >\z@ \rm \else \it \fi}
+
+\def\normalsize{\ifx\@currsize\normalsize \rm \else \@normalsize\fi}
+
+% \load{SIZE}{STYLE} : Solves anomaly of loaded-on-demand font
+% used for first time in math mode. Give this command outside math
+% mode, before formula using it for first time.
+\def\load#1#2{\let\@tempa\@currsize \let\@currsize\relax #1#2\@tempa}
+
+% \newfont{\CMD}{FONT} defines \CMD to be the font FONT.
+% It is equivalent to \font \CMD = FONT
+% \symbol{NUM} == \char NUM
+
+\def\newfont#1#2{\@ifdefinable #1{\font #1=#2\relax}}
+\def\symbol#1{\char #1\relax}
+
+
+
+% \@getfont \STYLE \FAM \@FONTSIZE{LOADING.INFO}
+% \STYLE = style command
+% \FAM = a control sequence defined by \newfam\FAM
+% \@FONTSIZE = the @fontsize command for the current size.
+% LOADING.INFO = information needed to load the font--e.g.,
+% cmtti10 \magstep 2
+% Does the following, where \FONTNAME denotes a new unique, untypeable
+% font name:
+% 1. Executes \font \FONTNAME = LOADING.INFO
+% 2. Appends '\textfont FAM \FONTNAME \def\STYLE{\fam \FAM \FONTNAME}'
+% to the definition of \@FONTSIZE.
+% 3. Executes \@FONTSIZE \STYLE.
+%
+% \@nohyphens\STYLE\@FONTSIZE
+% Used right after \@getfont to set \hyphenchar of the new font to -1,
+% thereby prohibiting hyphenation. It is used with \tt fonts.
+% (\@nohyphens was added on 12/18/85)
+%
+% \@subfont \STYLE \REPSTYLE
+% \STYLE, \REPSTYLE = type style commands.
+% Types warning message and defines uses \REPSTYLE.
+%
+% \@onesizefont \STYLE {LOADING.INFO}
+% Defines \STYLE to be a typestyle that exists only for the \normalsize
+% size. It produces the font specified by LOADING.INFO
+%
+% \@addfontinfo\@FONTSIZE{DEFS}
+% Expands DEFS and adds to the definition of \@FONTSIZE. Items that should
+% not be expanded should be protected with \@prtct---except no protection
+% is needed for '\def\foo', only for the contents of the definition.
+%
+% \@nomath\CS : Types a warning '\CS used in math mode' if encountered
+% in math mode.
+
+% Remove \outer from definition of \newfam
+\def\newfam{\alloc@8\fam\chardef\sixt@@n}
+
+\def\@setsize#1#2#3#4{\@nomath#1\let\@currsize#1\baselineskip
+ #2\setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}\baselineskip\baselinestretch\baselineskip
+ \normalbaselineskip\baselineskip#3#4}
+
+\newif\if@bold
+
+\let\@prtct=\relax
+
+\def\@addfontinfo#1#2{{\def\@prtct{\noexpand\@prtct\noexpand}\def\def{\noexpand
+ \def\noexpand}\xdef#1{#1#2}}}
+
+\def\@getfont#1#2#3#4{\@ifundefined{\string #1\string #3}{\global\expandafter
+ \font \csname \string #1\string #3\endcsname #4\relax
+ \@addfontinfo#3{\textfont #2\csname \string #1\string #3\endcsname
+ \scriptfont #2\csname \string #1\string #3\endcsname
+ \scriptscriptfont #2\csname \string #1\string #3\endcsname
+ \def#1{\fam #2\csname\string #1\string #3\endcsname}}}{}#3#1}
+
+\def\@nohyphens#1#2{\global\expandafter \hyphenchar\csname
+ \string #1\string #2\endcsname \m@ne}
+
+\def\@subfont#1#2{\@warning{No \string#1\space typeface in
+ this size, using \string#2}#2}
+
+\def\@onesizefont#1#2{\expandafter\newfam\csname fm\string#1\endcsname
+ \global\expandafter\font\csname ft\string#1\endcsname #2\relax
+ \gdef#1{\ifx \@currsize\normalsize \@ftfam#1\else
+ \@warning{Typeface \string#1\space available only in
+ \string\normalsize, using \string\rm}\gdef #1{\ifx \@currsize\normalsize
+ \textfont\@fontfam#1 \scriptfont\@fontfam#1 \scriptscriptfont
+ \@fontfam#1\@ftfam#1\else \rm\fi}#1\fi}#1}
+
+\def\@ftfam#1{\fam\csname fm\string#1\endcsname\csname ft\string#1\endcsname}
+
+\def\@nomath#1{\ifmmode \@warning{\string#1\space in math mode.}\fi}
+\def\@nomathbold{\ifmmode \@warning{\string\mathbold\space in math mode.}\fi}
+
+% The following definitions save token space. E.g., using \@height
+% instead of height saves 5 tokens at the cost in time of one macro
+% expansion.
+
+\def\@height{height}
+\def\@depth{depth}
+\def\@width{width}
+
+\def\@magscale#1{ scaled \magstep #1}
+\def\@halfmag{ scaled \magstephalf}
+\def\@ptscale#1{ scaled #100}
+
+
+%% FONT-CUSTOMIZING: The following \font commands define the
+%% preloaded LaTeX fonts. Font names should be changed to cause
+%% different fonts to be loaded in place of these particular AMR fonts.
+%% \font commands should be added or deleted to change which fonts
+%% are preloaded.
+
+% five point
+ \font\fivrm = cmr5 % roman
+ \font\fivmi = cmmi5 % math italic
+ \skewchar\fivmi ='177 % for placement of accents
+%\font\fivmib = cmmib10 \@ptscale5 % bold math italic
+ \font\fivsy = cmsy5 % math symbols
+ \skewchar\fivsy ='60 % for placement of math accents
+%\font\fivsyb = cmbsy10 \@ptscale5 % bold math symbols
+ \font\fivxm = msxm5 % AMS symbols 1 medium
+ \font\fivym = msym5 % AMS symbols 2 medium
+%\font\fivit = cmti7 scaled 714 % text italic
+%\font\fivsl = cmsl10 \@ptscale5 % slanted
+%\font\fivbf = cmbx7 scaled 714 % extended bold
+%\font\fivbfs = cmbxsl10\@ptscale5 % extended bold slanted
+%\font\fivtt = cmtt10 \@ptscale5 % typewriter
+%\font\fivtti = cmitt10 \@ptscale5 % italic typewriter
+%\font\fivtts = cmsltt10\@ptscale5 % slanted typewriter
+%\font\fivsf = cmss10 \@ptscale5 % sans serif
+%\font\fivsfi = cmssi10 \@ptscale5 % italic sans serif
+%\font\fivsfb = cmssbx10\@ptscale5 % bold sans serif
+%\font\fivsc = cmcsc10 \@ptscale5 % small caps
+ \font\fivly = lasy5 % LaTeX symbols
+%\font\fivlyb = lasyb10 \@ptscale5 % LaTeX symbols
+%\font\fivuit = cmu10 \@ptscale5 % unslanted italic
+
+% six point
+ \font\sixrm = cmr6 % roman
+ \font\sixmi = cmmi6 % math italic
+ \skewchar\sixmi ='177 % for placement of accents
+%\font\sixmib = cmmib10 \@ptscale6 % bold math italic
+ \font\sixsy = cmsy6 % math symbols
+ \skewchar\sixsy ='60 % for placement of math accents
+%\font\sixsyb = cmbsy10 \@ptscale6 % bold math symbols
+ \font\sixxm = msxm6 % AMS symbols 1 medium
+ \font\sixym = msym6 % AMS symbols 2 medium
+%\font\sixit = cmti7 scaled 857 % text italic
+%\font\sixsl = cmsl10 \@ptscale6 % slanted
+%\font\sixbf = cmbx7 scaled 857 % extended bold
+%\font\sixbfs = cmbxsl10\@ptscale6 % extended bold slanted
+%\font\sixtt = cmtt10 \@ptscale6 % typewriter
+%\font\sixtti = cmitt10 \@ptscale6 % italic typewriter
+%\font\sixtts = cmsltt10\@ptscale6 % slanted typewriter
+%\font\sixsf = cmss10 \@ptscale6 % sans serif
+%\font\sixsfi = cmssi10 \@ptscale6 % italic sans serif
+%\font\sixsfb = cmssbx10\@ptscale6 % bold sans serif
+%\font\sixsc = cmcsc10 \@ptscale6 % small caps
+ \font\sixly = lasy6 % LaTeX symbols
+%\font\sixlyb = lasyb10 \@ptscale6 % LaTeX symbols
+%\font\sixuit = cmu10 \@ptscale6 % unslanted italic
+%\font\sixcyr = mcyr6 % AMS Cyrillic lightface
+
+% seven point
+ \font\sevrm = cmr7 % roman
+ \font\sevmi = cmmi7 % math italic
+ \skewchar\sevmi ='177 % for placement of accents
+%\font\sevmib = cmmib10 \@ptscale7 % bold math italic
+ \font\sevsy = cmsy7 % math symbols
+ \skewchar\sevsy ='60 % for placement of math accents
+%\font\sevsyb = cmbsy10 \@ptscale7 % bold math symbols
+ \font\sevxm = msxm7 % AMS symbols 1 medium
+ \font\sevym = msym7 % AMS symbols 2 medium
+ \font\sevit = cmti7 % text italic
+%\font\sevsl = cmsl10 \@ptscale7 % slanted
+%\font\sevbf = cmbx7 % extended bold
+%\font\sevbfs = cmbxsl10\@ptscale7 % extended bold slanted
+%\font\sevtt = cmtt10 \@ptscale7 % typewriter
+%\font\sevtti = cmitt10 \@ptscale7 % italic typewriter
+%\font\sevtts = cmsltt10\@ptscale7 % slanted typewriter
+%\font\sevsf = cmss10 \@ptscale7 % sans serif
+%\font\sevsfi = cmssi10 \@ptscale7 % italic sans serif
+%\font\sevsfb = cmssbx10\@ptscale7 % bold sans serif
+%\font\sevsc = cmcsc10 \@ptscale7 % small caps
+ \font\sevly = lasy7 % LaTeX symbols
+%\font\sevlyb = lasyb10 \@ptscale7 % LaTeX symbols
+%\font\sevuit = cmu10 \@ptscale7 % unslanted italic
+%\font\sevcyr = mcyr7 % AMS Cyrillic lightface
+
+% eight point
+ \font\egtrm = cmr8 % roman
+ \font\egtmi = cmmi8 % math italic
+ \skewchar\egtmi ='177 % for placement of accents
+%\font\egtmib = cmmib10 \@ptscale8 % bold math italic
+ \font\egtsy = cmsy8 % math symbols
+ \skewchar\egtsy ='60 % for placement of math accents
+%\font\egtsyb = cmbsy10 \@ptscale8 % bold math symbols
+ \font\egtxm = msxm8 % AMS symbols 1 medium
+ \font\egtym = msym8 % AMS symbols 2 medium
+ \font\egtit = cmti8 % text italic
+%\font\egtsl = cmsl8 % slanted
+%\font\egtbf = cmbx8 % extended bold
+%\font\egtbfs = cmbxsl10\@ptscale8 % extended bold slanted
+%\font\egttt = cmtt8 % typewriter
+%\font\egttti = cmitt10 \@ptscale8 % italic typewriter
+%\font\egttts = cmsltt10\@ptscale8 % slanted typewriter
+%\font\egtsf = cmss10 \@ptscale8 % sans serif
+%\font\egtsfi = cmssi10 \@ptscale8 % italic sans serif
+%\font\egtsfb = cmssbx10\@ptscale8 % bold sans serif
+%\font\egtsc = cmcsc10 \@ptscale8 % small caps
+ \font\egtly = lasy8 % LaTeX symbols
+%\font\egtlyb = lasyb10 \@ptscale8 % LaTeX symbols
+%\font\egtuit = cmu10 \@ptscale8 % unslanted italic
+%\font\egtcyr = mcyr8 % AMS Cyrillic lightface
+%\font\egtcyb = mcyb8 % AMS Cyrillic boldface
+
+% nine point
+ \font\ninrm = cmr9 % roman
+ \font\ninmi = cmmi9 % math italic
+ \skewchar\ninmi ='177 % for placement of accents
+%\font\ninmib = cmmib10 \@ptscale9 % bold math italic
+ \font\ninsy = cmsy9 % math symbols
+ \skewchar\ninsy ='60 % for placement of math accents
+%\font\ninsyb = cmbsy10 \@ptscale9 % bold math symbols
+ \font\ninxm = msxm9 % AMS symbols 1 medium
+ \font\ninym = msym9 % AMS symbols 2 medium
+ \font\ninit = cmti9 % text italic
+%\font\ninsl = cmsl9 % slanted
+ \font\ninbf = cmbx9 % extended bold
+%\font\ninbfs = cmbxsl10\@ptscale9 % extended bold slanted
+ \font\nintt = cmtt9 % typewriter
+ \hyphenchar\nintt = -1 % suppress hyphenation in \tt font
+%\font\nintti = cmitt10 \@ptscale9 % italic typewriter
+%\font\nintts = cmsltt10\@ptscale9 % slanted typewriter
+%\font\ninsf = cmss10 \@ptscale9 % sans serif
+%\font\ninsfi = cmssi10 \@ptscale9 % italic sans serif
+%\font\ninsfb = cmssbx10\@ptscale9 % bold sans serif
+%\font\ninsc = cmcsc10 \@ptscale9 % small caps
+ \font\ninly = lasy9 % LaTeX symbols
+%\font\ninlyb = lasyb10 \@ptscale9 % LaTeX symbols
+%\font\ninuit = cmu10 \@ptscale9 % unslanted italic
+%\font\nincyr = mcyr9 % AMS Cyrillic lightface
+%\font\nincyb = mcyb9 % AMS Cyrillic boldface
+
+% ten point
+ \font\tenrm = cmr10 % roman
+ \font\tenmi = cmmi10 % math italic
+ \skewchar\tenmi ='177 % for placement of accents
+%\font\tenmib = cmmib10 % bold math italic
+ \font\tensy = cmsy10 % math symbols
+ \skewchar\tensy ='60 % for placement of math accents
+%\font\tensyb = cmbsy10 % bold symbols
+ \font\tenxm = msxm10 % AMS symbols 1 medium
+ \font\tenym = msym10 % AMS symbols 2 medium
+ \font\tenit = cmti10 % text italic
+ \font\tensl = cmsl10 % slanted
+ \font\tenbf = cmbx10 % extended bold
+%\font\tenbfs = cmbxsl10 % extended bold slanted
+ \font\tentt = cmtt10 % typewriter
+ \hyphenchar\tentt = -1 % suppress hyphenation in \tt font
+%\font\tentti = cmitt10 % italic typewriter
+%\font\tentts = cmsltt10 % slanted typewriter
+ \font\tensf = cmss10 % sans serif
+%\font\tensfi = cmssi10 % italic sans serif
+%\font\tensfb = cmssbx10 % bold sans serif
+%\font\tensc = cmcsc10 % small caps
+ \font\tenly = lasy10 % LaTeX symbols
+%\font\tenlyb = lasyb10 % bold LaTeX symbols
+%\font\tenuit = cmu10 % unslanted italic
+%\font\tencyr = mcyr10 % AMS Cyrillic lightface
+%\font\tencyb = mcyb10 % AMS Cyrillic boldface
+
+% eleven point
+ \font\elvrm = cmr10 \@halfmag % roman
+ \font\elvmi = cmmi10 \@halfmag % math italic
+ \skewchar\elvmi ='177 % for placement of accents
+%\font\elvmib = cmmib10 \@halfmag % bold math italic
+ \font\elvsy = cmsy10 \@halfmag % math symbols
+ \skewchar\elvsy ='60 % for placement of math accents
+%\font\elvsyb = cmbsy10 \@halfmag % bold symbols
+ \font\elvit = cmti10 \@halfmag % text italic
+ \font\elvsl = cmsl10 \@halfmag % slanted
+ \font\elvbf = cmbx10 \@halfmag % exelvded bold
+%\font\elvbfs = cmbxsl10 \@halfmag % exelvded bold slanted
+ \font\elvtt = cmtt10 \@halfmag % typewriter
+ \hyphenchar\elvtt = -1 % suppress hyphenation in \tt font
+%\font\elvtti = cmitt10 \@halfmag % italic typewriter
+%\font\elvtts = cmsltt10 \@halfmag % slanted typewriter
+ \font\elvsf = cmss10 \@halfmag % sans serif
+%\font\elvsfi = cmssi10 \@halfmag % italic sans serif
+%\font\elvsfb = cmssbx10 \@halfmag % bold sans serif
+%\font\elvsc = cmcsc10 \@halfmag % small caps
+ \font\elvly = lasy10 \@halfmag % LaTeX symbols
+%\font\elvlyb = lasyb10 \@halfmag % bold LaTeX symbols
+%\font\elvuit = cmu10 \@halfmag % unslanted italic
+
+% twelve point
+ \font\twlrm = cmr10 \@magscale1 % roman
+ \font\twlmi = cmmi10 \@magscale1 % math italic
+ \skewchar\twlmi ='177 % for placement of accents
+%\font\twlmib = cmmib10 \@magscale1 % bold math italic
+ \font\twlsy = cmsy10 \@magscale1 % math symbols
+ \skewchar\twlsy ='60 % for placement of math accents
+%\font\twlsyb = cmbsy10 \@magscale1 % bold symbols
+ \font\twlit = cmti10 \@magscale1 % text italic
+ \font\twlsl = cmsl10 \@magscale1 % slanted
+ \font\twlbf = cmbx10 \@magscale1 % extended bold
+%\font\twlbfs = cmbxsl10 \@magscale1 % extended bold slanted
+ \font\twltt = cmtt10 \@magscale1 % typewriter
+ \hyphenchar\twltt = -1 % suppress hyphenation in \tt font
+%\font\twltti = cmitt10 \@magscale1 % italic typewriter
+%\font\twltts = cmsltt10 \@magscale1 % slanted typewriter
+ \font\twlsf = cmss10 \@magscale1 % sans serif
+%\font\twlsfi = cmssi10 \@magscale1 % italic sans serif
+%\font\twlsfb = cmssbx10 \@magscale1 % bold sans serif
+%\font\twlsc = cmcsc10 \@magscale1 % small caps
+ \font\twlly = lasy10 \@magscale1 % LaTeX symbols
+%\font\twllyb = lasyb10 \@magscale1 % bold LaTeX symbols
+%\font\twluit = cmu10 \@magscale1 % unslanted italic
+
+% fourteen point
+ \font\frtnrm = cmr10 \@magscale2 % roman
+ \font\frtnmi = cmmi10 \@magscale2 % math italic
+ \skewchar\frtnmi ='177 % for placement of accents
+%\font\frtnmib = cmmib10 \@magscale2 % bold math italic
+ \font\frtnsy = cmsy10 \@magscale2 % math symbols
+ \skewchar\frtnsy ='60 % for placement of math accents
+%\font\frtnsyb = cmbsy10 \@magscale2 % bold symbols
+%\font\frtnit = cmti10 \@magscale2 % text italic
+%\font\frtnsl = cmsl10 \@magscale2 % slanted
+ \font\frtnbf = cmbx10 \@magscale2 % extended bold
+%\font\frtnbfs = cmbxsl10 \@magscale2 % extended bold slanted
+%\font\frtntt = cmtt10 \@magscale2 % typewriter
+%\font\frtntti = cmitt10 \@magscale2 % italic typewriter
+%\font\frtntts = cmsltt10 \@magscale2 % slanted typewriter
+%\font\frtnsf = cmss10 \@magscale2 % sans serif
+%\font\frtnsfi = cmssi10 \@magscale2 % italic sans serif
+%\font\frtnsfb = cmssbx10 \@magscale2 % bold sans serif
+%\font\frtnsc = cmcsc10 \@magscale2 % small caps
+ \font\frtnly = lasy10 \@magscale2 % LaTeX symbols
+%\font\frtnlyb = lasyb10 \@magscale2 % bold LaTeX symbols
+%\font\frtnuit = cmu10 \@magscale2 % unslanted italic
+
+% seventeen point
+ \font\svtnrm = cmr10 \@magscale3 % roman
+ \font\svtnmi = cmmi10 \@magscale3 % math italic
+ \skewchar\svtnmi ='177 % for placement of accents
+%\font\svtnmib = cmmib10 \@magscale3 % bold math italic
+ \font\svtnsy = cmsy10 \@magscale3 % math symbols
+ \skewchar\svtnsy ='60 % for placement of math accents
+%\font\svtnsyb = cmbsy10 \@magscale3 % bold symbols
+%\font\svtnit = cmti10 \@magscale3 % text italic
+%\font\svtnsl = cmsl10 \@magscale3 % slanted
+ \font\svtnbf = cmbx10 \@magscale3 % extended bold
+%\font\svtnbfs = cmbxsl10 \@magscale3 % extended bold slanted
+%\font\svtntt = cmtt10 \@magscale3 % typewriter
+%\font\svtntti = cmitt10 \@magscale3 % italic typewriter
+%\font\svtntts = cmsltt10 \@magscale3 % slanted typewriter
+%\font\svtnsf = cmss10 \@magscale3 % sans serif
+%\font\svtnsfi = cmssi10 \@magscale3 % italic sans serif
+%\font\svtnsfb = cmssbx10 \@magscale3 % bold sans serif
+%\font\svtnsc = cmcsc10 \@magscale3 % small caps
+ \font\svtnly = lasy10 \@magscale3 % LaTeX symbols
+%\font\svtnlyb = lasyb10 \@magscale3 % bold LaTeX symbols
+%\font\svtnuit = cmu10 \@magscale3 % unslanted italic
+
+% twenty point
+ \font\twtyrm = cmr10 \@magscale4 % roman
+ \font\twtymi = cmmi10 \@magscale4 % math italic
+ \skewchar\twtymi ='177 % for placement of accents
+%\font\twtymib = cmmib10 \@magscale4 % bold math italic
+ \font\twtysy = cmsy10 \@magscale4 % math symbols
+ \skewchar\twtysy ='60 % for placement of math accents
+%\font\twtysyb = cmbsy10 \@magscale4 % bold symbols
+%\font\twtyit = cmti10 \@magscale4 % text italic
+%\font\twtysl = cmsl10 \@magscale4 % slanted
+%\font\twtybf = cmbx10 \@magscale4 % extended bold
+%\font\twtybfs = cmbxsl10 \@magscale4 % extended bold slanted
+%\font\twtytt = cmtt10 \@magscale4 % typewriter
+%\font\twtytti = cmitt10 \@magscale4 % italic typewriter
+%\font\twtytts = cmsltt10 \@magscale4 % slanted typewriter
+%\font\twtysf = cmss10 \@magscale4 % sans serif
+%\font\twtysfi = cmssi10 \@magscale4 % italic sans serif
+%\font\twtysfb = cmssbx10 \@magscale4 % bold sans serif
+%\font\twtysc = cmcsc10 \@magscale4 % small caps
+ \font\twtyly = lasy10 \@magscale4 % LaTeX symbols
+%\font\twtylyb = lasyb10 \@magscale4 % bold LaTeX symbols
+%\font\twtyuit = cmu10 \@magscale4 % unslanted italic
+
+% twenty-five point
+ \font\twfvrm = cmr10 \@magscale5 % roman
+%\font\twfvmi = cmmi10 \@magscale5 % math italic
+%\font\twfvmib = cmmib10 \@magscale5 % bold math italic
+%\font\twfvsy = cmsy10 \@magscale5 % math symbols
+%\font\twfvsyb = cmbsy10 \@magscale5 % bold symbols
+%\font\twfvit = cmti10 \@magscale5 % text italic
+%\font\twfvsl = cmsl10 \@magscale5 % slanted
+%\font\twfvbf = cmbx10 \@magscale5 % extended bold
+%\font\twfvbfs = cmbxsl10 \@magscale5 % extended bold slanted
+%\font\twfvtt = cmtt10 \@magscale5 % typewriter
+%\font\twfvtti = cmitt10 \@magscale5 % italic typewriter
+%\font\twfvtts = cmsltt10 \@magscale5 % slanted typewriter
+%\font\twfvsf = cmss10 \@magscale5 % sans serif
+%\font\twfvsfi = cmssi10 \@magscale5 % italic sans serif
+%\font\twfvsfb = cmssbx10 \@magscale5 % bold sans serif
+%\font\twfvsc = cmcsc10 \@magscale5 % small caps
+%\font\twfvly = lasy10 \@magscale5 % LaTeX symbols
+%\font\twfvlyb = lasyb10 \@magscale5 % bold LaTeX symbols
+%\font\twfvuit = cmu10 \@magscale5 % unslanted italic
+
+% Math extension
+ \font\tenex = cmex10
+
+% line & circle fonts
+\font\tenln = line10
+\font\tenlnw = linew10
+\font\tencirc = circle10
+\font\tencircw = circlew10
+
+% Change made 6 May 86: `\@warning' replaced by `\immediate\write 15'
+% since it's not defined when lfonts.tex is read by lplain.tex.
+%
+\ifnum\fontdimen8\tenln=\fontdimen8\tencirc \else
+ \immediate\write 15{Incompatible thin line and circle fonts}\fi
+\ifnum\fontdimen8\tenlnw=\fontdimen8\tencircw \else
+ \immediate\write 15{Incompatible thick line and circle fonts}\fi
+
+
+% protected font names
+\def\rm{\protect\prm}
+\def\it{\protect\pit}
+\def\bf{\protect\pbf}
+\def\sl{\protect\psl}
+\def\sf{\protect\psf}
+\def\sc{\protect\psc}
+\def\tt{\protect\ptt}
+\def\cyr{\protect\cyracc\protect\pcyr}
+\def\cyb{\protect\cyracc\protect\pcyb}
+
+%% FONT-CUSTOMIZING: The following definitions define certain commands
+%% to be abbreviations for certain font names. These commands are used
+%% below in \@getfont commands, which load the loaded-on-demand fonts.
+%% This is done only to save space. To change the fonts that are loaded
+%% on demand, one can either change these definitions or else change
+%% the arguments of the \@getfont commands.
+%%
+\def\@mbi{cmmib10}
+\def\@mbsy{cmbsy10}
+\def\@mcsc{cmcsc10}
+\def\@mss{cmss10}
+\def\@lasyb{lasyb10}
+
+% families
+
+\newfam\itfam % \it is family 4
+\newfam\slfam % \sl is family 5
+\newfam\bffam % \bf is family 6
+\newfam\ttfam % \tt is family 7
+\newfam\sffam % \sf is family 8
+\newfam\scfam % \sf is family 9
+\newfam\lyfam % \ly is family 10
+\newfam\xmfam % \mx is family 11
+\newfam\ymfam % \my is family 12
+\newfam\cyrfam % \cyr is family 13
+\newfam\cybfam % \cyb is family 14
+
+\def\cal{\fam\tw@}
+\def\mit{\fam\@ne}
+
+\def\@setstrut{\setbox\strutbox=\hbox{\vrule \@height .7\baselineskip
+ \@depth .3\baselineskip \@width\z@}}
+
+
+%% FONT-CUSTOMIZING: The commands \vpt, \vipt, ... , \xxvpt perform all
+%% the declarations needed to change the type size to 5pt, 6pt, ... ,
+%% 25pt. To see how this works, consider the definition of \viipt,
+%% which determines the fonts used in a 7pt type size. The command
+%% \def\pit{\fam\itfam\sevit}
+%% means that the \it command causes the preloaded \sevit font to
+%% be used--this font was defined earlier with a \font\sevit...
+%% command. The commands
+%% \textfont\itfam\sevit
+%% \scriptfont\itfam\sevit
+%% \scriptscriptfont\itfam\sevit
+%% tell TeX to use the \sevit font for all three math-mode sizes
+%% (text, script, and scriptscript) for the 7pt size.
+%% The fonts appearing in these commands must be preloaded.
+%%
+%% The command
+%% \def\pbf{\@getfont\pbf\bffam\@viipt{cmbx7}}
+%% declares \bf to use a loaded-on-demand font--namely, the font
+%% cmbx7.
+%%
+%% The command
+%% \def\ptt{\@subfont\tt\rm}
+%% declares that the \tt font is unavailable in the 7pt size, so
+%% the \rm font is used instead. (The substituted type style should
+%% correspond to a preloaded size.)
+
+\def\vpt{\textfont\z@\fivrm
+ \scriptfont\z@\fivrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\fivmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\fivsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\fivxm \scriptfont\xmfam=\fivxm \scriptscriptfont\xmfam=\fivxm
+\textfont\ymfam=\fivym \scriptfont\ymfam=\fivym \scriptscriptfont\ymfam=\fivym
+\def\prm{\fam\z@\fivrm}%
+\def\sixcyr{\@getfont\pcyr\cyrfam\@vipt{mcyr6}}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\fam\@ne\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\@getfont\pit\itfam\@vpt{cmti7 scaled714}}%
+\def\psl{\@subfont\sl\it}%
+\def\pbf{\@getfont\pbf\bffam\@vpt{cmbx7 scaled 714}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\pcyr{\@subfont\cyr\sixcyr}%
+\def\pcyb{\@subfont\cyb\sixcyr}%
+\def\ly{\fam\lyfam\fivly}\textfont\lyfam\fivly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut\rm}
+
+\def\@vpt{}
+
+\def\vipt{\textfont\z@\sixrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\sixmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\sixsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\sixxm \scriptfont\xmfam=\sixxm \scriptscriptfont\xmfam=\sixxm
+\textfont\ymfam=\sixym \scriptfont\ymfam=\sixym \scriptscriptfont\ymfam=\sixym
+\def\prm{\fam\z@\sixrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\@subfont\it\rm}%
+\def\psl{\@subfont\sl\rm}%
+\def\pbf{\@getfont\pbf\bffam\@vipt{cmbx7 scaled857}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\pcyr{\@getfont\pcyr\cyrfam\@vipt{mcyr6}}%
+\def\pcyb{\@subfont\cyb\cyr}%
+\def\ly{\fam\lyfam\sixly}\textfont\lyfam\sixly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\sixly
+\@setstrut\rm}
+
+\def\@vipt{}
+
+\def\viipt{\textfont\z@\sevrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\sevmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\sevsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\sevxm \scriptfont\xmfam=\fivxm \scriptscriptfont\xmfam=\fivxm
+\textfont\ymfam=\sevym \scriptfont\ymfam=\fivym \scriptscriptfont\ymfam=\fivym
+\def\prm{\fam\z@\sevrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\sevit}\textfont\itfam\sevit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@subfont\sl\it}%
+\def\pbf{\@getfont\pbf\bffam\@viipt{cmbx7}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\pcyr{\@getfont\pcyr\cyrfam\@viipt{mcyr7}}%
+\def\pcyb{\@subfont\cyb\cyr}%
+\def\ly{\fam\lyfam\sevly}\textfont\lyfam\sevly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@viipt{}
+
+\def\viiipt{\textfont\z@\egtrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\egtmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\egtsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\egtxm \scriptfont\xmfam=\sixxm \scriptscriptfont\xmfam=\fivxm
+\textfont\ymfam=\egtym \scriptfont\ymfam=\sixym \scriptscriptfont\ymfam=\fivym
+\def\prm{\fam\z@\egtrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\egtit}\textfont\itfam\egtit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@getfont\psl\slfam\@viiipt{cmsl8}}%
+\def\pbf{\@getfont\pbf\bffam\@viiipt{cmbx8}}%
+\def\ptt{\@getfont\ptt\ttfam\@viiipt{cmtt8}\@nohyphens\ptt\@viiipt}%
+\def\psf{\@getfont\psf\sffam\@viiipt{cmss8}}%
+\def\psc{\@getfont\psc\scfam\@viiipt{\@mcsc\@ptscale8}}%
+\def\pcyr{\@getfont\pcyr\cyrfam\@viiipt{mcyr8}}%
+\def\pcyb{\@getfont\pcyb\cybfam\@viiipt{mcyb8}}%
+\def\ly{\fam\lyfam\egtly}\textfont\lyfam\egtly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@viiipt{}
+
+\def\ixpt{\textfont\z@\ninrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\ninmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\ninsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\ninxm \scriptfont\xmfam=\sixxm \scriptscriptfont\xmfam=\fivxm
+\textfont\ymfam=\ninym \scriptfont\ymfam=\sixym \scriptscriptfont\ymfam=\fivym
+\def\prm{\fam\z@\ninrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\ninit}\textfont\itfam\ninit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@getfont\psl\slfam\@ixpt{cmsl9}}%
+\def\pbf{\fam\bffam\ninbf}\textfont\bffam\ninbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\nintt}\textfont\ttfam\nintt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+\def\psf{\@getfont\psf\sffam\@ixpt{cmss9}}%
+\def\psc{\@getfont\psc\scfam\@ixpt{\@mcsc\@ptscale9}}%
+\def\pcyr{\@getfont\pcyr\cyrfam\@ixpt{mcyr9}}%
+\def\pcyb{\@getfont\pcyb\cybfam\@ixpt{mcyb9}}%
+\def\ly{\fam\lyfam\ninly}\textfont\lyfam\ninly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@ixpt{}
+
+\def\xpt{\textfont\z@\tenrm
+ \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\tenmi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\tensy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\tenxm \scriptfont\xmfam=\sevxm \scriptscriptfont\xmfam=\fivxm
+\textfont\ymfam=\tenym \scriptfont\ymfam=\sevym \scriptscriptfont\ymfam=\fivym
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\tenmi
+ \textfont\tw@\tensy \textfont\lyfam\tenly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{tenmib}{\global\font\tenmib\@mbi
+ \global\font\tensyb\@mbsy
+ \global\font\tenlyb\@lasyb\relax\@addfontinfo\@xpt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\tenmib \textfont\tw@\tensyb
+ \textfont\lyfam\tenlyb \@prtct\@boldtrue}}}{}\@xpt\boldmath}%
+\def\prm{\fam\z@\tenrm}%
+\def\pit{\fam\itfam\tenit}\textfont\itfam\tenit \scriptfont\itfam\sevit
+ \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\tensl}\textfont\slfam\tensl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+\def\pbf{\fam\bffam\tenbf}\textfont\bffam\tenbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\tenbf
+\def\ptt{\fam\ttfam\tentt}\textfont\ttfam\tentt
+ \scriptfont\ttfam\tentt \scriptscriptfont\ttfam\tentt
+\def\psf{\fam\sffam\tensf}\textfont\sffam\tensf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+\def\psc{\@getfont\psc\scfam\@xpt{\@mcsc}}%
+\def\pcyr{\@getfont\pcyr\cyrfam\@xpt{mcyr10}}%
+\def\pcyb{\@getfont\pcyb\cybfam\@xpt{mcyb10}}%
+\def\ly{\fam\lyfam\tenly}\textfont\lyfam\tenly
+ \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@xpt{}
+
+\def\xipt{\textfont\z@\elvrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\elvmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\elvsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\tenxm \scriptfont\xmfam=\egtxm \scriptscriptfont\xmfam=\sixxm
+\textfont\ymfam=\tenym \scriptfont\ymfam=\egtym \scriptscriptfont\ymfam=\sixym
+\def\tencyr{\@getfont\pcyr\cyrfam\@xipt{mcyr10}}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\elvmi \textfont\tw@\elvsy
+ \textfont\lyfam\elvly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{elvmib}{\global\font\elvmib\@mbi\@halfmag
+ \global\font\elvsyb\@mbsy\@halfmag
+ \global\font\elvlyb\@lasyb\@halfmag\relax\@addfontinfo\@xipt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\elvmib \textfont\tw@\elvsyb
+ \textfont\lyfam\elvlyb\@prtct\@boldtrue}}}{}\@xipt\boldmath}%
+\def\prm{\fam\z@\elvrm}%
+\def\pit{\fam\itfam\elvit}\textfont\itfam\elvit
+ \scriptfont\itfam\egtit \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\elvsl}\textfont\slfam\elvsl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+\def\pbf{\fam\bffam\elvbf}\textfont\bffam\elvbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\elvtt}\textfont\ttfam\elvtt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+\def\psf{\fam\sffam\elvsf}\textfont\sffam\elvsf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+\def\psc{\@getfont\psc\scfam\@xipt{\@mcsc\@halfmag}}%
+\def\pcyr{\@subfont\cyr\tencyr}%
+\def\pcyb{\@subfont\cyb\tencyr}%
+\def\ly{\fam\lyfam\elvly}\textfont\lyfam\elvly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+\@setstrut \rm}
+
+\def\@xipt{}
+
+\def\xiipt{\textfont\z@\twlrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\twlmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\twlsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\tenxm \scriptfont\xmfam=\egtxm \scriptscriptfont\xmfam=\sixxm
+\textfont\ymfam=\tenym \scriptfont\ymfam=\egtym \scriptscriptfont\ymfam=\sixym
+\def\tencyr{\@getfont\pcyr\cyrfam\@xipt{mcyr10}}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twlmi
+ \textfont\tw@\twlsy \textfont\lyfam\twlly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{twlmib}{\global\font\twlmib\@mbi\@magscale1\global
+ \font\twlsyb\@mbsy \@magscale1\global\font
+ \twllyb\@lasyb\@magscale1\relax\@addfontinfo\@xiipt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\twlmib \textfont\tw@\twlsyb
+ \textfont\lyfam\twllyb\@prtct\@boldtrue}}}{}\@xiipt\boldmath}%
+\def\prm{\fam\z@\twlrm}%
+\def\pit{\fam\itfam\twlit}\textfont\itfam\twlit \scriptfont\itfam\egtit
+ \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\twlsl}\textfont\slfam\twlsl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+\def\pbf{\fam\bffam\twlbf}\textfont\bffam\twlbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\twltt}\textfont\ttfam\twltt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+\def\psf{\fam\sffam\twlsf}\textfont\sffam\twlsf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+\def\psc{\@getfont\psc\scfam\@xiipt{\@mcsc\@magscale1}}%
+\def\pcyr{\@subfont\cyr\tencyr}%
+\def\pcyb{\@subfont\cyb\tencyr}%
+\def\ly{\fam\lyfam\twlly}\textfont\lyfam\twlly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm}
+
+\def\@xiipt{}
+
+\def\xivpt{\textfont\z@\frtnrm
+ \scriptfont\z@\tenrm \scriptscriptfont\z@\sevrm
+\textfont\@ne\frtnmi \scriptfont\@ne\tenmi \scriptscriptfont\@ne\sevmi
+\textfont\tw@\frtnsy \scriptfont\tw@\tensy \scriptscriptfont\tw@\sevsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\tenxm \scriptfont\xmfam=\tenxm \scriptscriptfont\xmfam=\sevxm
+\textfont\ymfam=\tenym \scriptfont\ymfam=\tenym \scriptscriptfont\ymfam=\sevym
+\def\tencyr{\@getfont\pcyr\cyrfam\@xipt{mcyr10}}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\frtnmi \textfont\tw@\frtnsy
+ \textfont\lyfam\frtnly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{frtnmib}{\global\font
+ \frtnmib\@mbi\@magscale2\global\font\frtnsyb\@mbsy\@magscale2
+ \global\font\frtnlyb\@lasyb\@magscale2\relax\@addfontinfo\@xivpt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\frtnmib \textfont\tw@\frtnsyb
+ \textfont\lyfam\frtnlyb\@prtct\@boldtrue}}}{}\@xivpt\boldmath}%
+\def\prm{\fam\z@\frtnrm}%
+\def\pit{\@getfont\pit\itfam\@xivpt{cmti10\@magscale2}}%
+\def\psl{\@getfont\psl\slfam\@xivpt{cmsl10\@magscale2}}%
+\def\pbf{\fam\bffam\frtnbf}\textfont\bffam\frtnbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\@getfont\ptt\ttfam\@xivpt{cmtt10\@magscale2}\@nohyphens\ptt\@xivpt}%
+\def\psf{\@getfont\psf\sffam\@xivpt{\@mss\@magscale2}}%
+\def\psc{\@getfont\psc\scfam\@xivpt{\@mcsc\@magscale2}}%
+\def\pcyr{\@subfont\cyr\tencyr}%
+\def\pcyb{\@subfont\cyb\tencyr}%
+\def\ly{\fam\lyfam\frtnly}\textfont\lyfam\frtnly
+ \scriptfont\lyfam\tenly \scriptscriptfont\lyfam\sevly
+\@setstrut \rm}
+
+\def\@xivpt{}
+
+\def\xviipt{\textfont\z@\svtnrm
+ \scriptfont\z@\twlrm \scriptscriptfont\z@\tenrm
+\textfont\@ne\svtnmi \scriptfont\@ne\twlmi \scriptscriptfont\@ne\tenmi
+\textfont\tw@\svtnsy \scriptfont\tw@\twlsy \scriptscriptfont\tw@\tensy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\tenxm \scriptfont\xmfam=\tenxm \scriptscriptfont\xmfam=\tenxm
+\textfont\ymfam=\tenym \scriptfont\ymfam=\tenym \scriptscriptfont\ymfam=\tenym
+\def\tencyr{\@getfont\pcyr\cyrfam\@xipt{mcyr10}}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\svtnmi \textfont\tw@\svtnsy \textfont\lyfam\svtnly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\svtnrm}%
+\def\pit{\@getfont\pit\itfam\@xviipt{cmti10\@magscale3}}%
+\def\psl{\@getfont\psl\slfam\@xviipt{cmsl10\@magscale3}}%
+\def\pbf{\fam\bffam\svtnbf}\textfont\bffam\svtnbf
+ \scriptfont\bffam\twlbf \scriptscriptfont\bffam\tenbf
+\def\ptt{\@getfont\ptt\ttfam\@xviipt{cmtt10\@magscale3}\@nohyphens
+ \ptt\@xviipt}%
+\def\psf{\@getfont\psf\sffam\@xviipt{\@mss\@magscale3}}%
+\def\psc{\@getfont\psc\scfam\@xviipt{\@mcsc\@magscale3}}%
+\def\pcyr{\@subfont\cyr\tencyr}%
+\def\pcyb{\@subfont\cyb\tencyr}%
+\def\ly{\fam\lyfam\svtnly}\textfont\lyfam\svtnly
+ \scriptfont\lyfam\twlly \scriptscriptfont\lyfam\tenly
+\@setstrut \rm}
+
+\def\@xviipt{}
+
+\def\xxpt{\textfont\z@\twtyrm
+ \scriptfont\z@\frtnrm \scriptscriptfont\z@\twlrm
+\textfont\@ne\twtymi \scriptfont\@ne\frtnmi \scriptscriptfont\@ne\twlmi
+\textfont\tw@\twtysy \scriptfont\tw@\frtnsy \scriptscriptfont\tw@\twlsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\tenxm \scriptfont\xmfam=\tenxm \scriptscriptfont\xmfam=\tenxm
+\textfont\ymfam=\tenym \scriptfont\ymfam=\tenym \scriptscriptfont\ymfam=\tenym
+\def\tencyr{\@getfont\pcyr\cyrfam\@xipt{mcyr10}}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\twtyrm}%
+\def\pit{\@getfont\pit\itfam\@xxpt{cmti10\@magscale4}}%
+\def\psl{\@getfont\psl\slfam\@xxpt{cmsl10\@magscale4}}%
+\def\pbf{\@getfont\pbf\bffam\@xxpt{cmbx10\@magscale4}}%
+\def\ptt{\@getfont\ptt\ttfam\@xxpt{cmtt10\@magscale4}\@nohyphens\ptt\@xxpt}%
+\def\psf{\@getfont\psf\sffam\@xxpt{\@mss\@magscale4}}%
+\def\psc{\@getfont\psc\scfam\@xxpt{\@mcsc\@magscale4}}%
+\def\pcyr{\@subfont\cyr\tencyr}%
+\def\pcyb{\@subfont\cyb\tencyr}%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\frtnly \scriptscriptfont\lyfam\twlly
+\@setstrut \rm}
+
+\def\@xxpt{}
+
+\def\xxvpt{\textfont\z@\twfvrm
+ \scriptfont\z@\twtyrm \scriptscriptfont\z@\svtnrm
+\textfont\@ne\twtymi \scriptfont\@ne\twtymi \scriptscriptfont\@ne\svtnmi
+\textfont\tw@\twtysy \scriptfont\tw@\twtysy \scriptscriptfont\tw@\svtnsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\textfont\xmfam=\tenxm \scriptfont\xmfam=\tenxm \scriptscriptfont\xmfam=\tenxm
+\textfont\ymfam=\tenym \scriptfont\ymfam=\tenym \scriptscriptfont\ymfam=\tenym
+\def\tencyr{\@getfont\pcyr\cyrfam\@xipt{mcyr10}}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\twfvrm}%
+\def\pit{\@subfont\it\rm}%
+\def\psl{\@subfont\sl\rm}%
+\def\pbf{\@getfont\pbf\bffam\@xxvpt{cmbx10\@magscale5}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\pcyr{\@subfont\cyr\tencyr}%
+\def\pcyb{\@subfont\cyb\tencyr}%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\twtyly \scriptscriptfont\lyfam\svtnly
+\@setstrut \rm}
+
+\def\@xxvpt{}
+
+% SPECIAL LaTeX character definitions
+
+% Definitions of math operators added by LaTeX
+\mathchardef\mho"0A30
+\mathchardef\Join"3A31
+\mathchardef\Box"0A32
+\mathchardef\Diamond"0A33
+\mathchardef\leadsto"3A3B
+\mathchardef\sqsubset"3A3C
+\mathchardef\sqsupset"3A3D
+\def\lhd{\mathbin{< \hbox to -.43em{}\hbox{\vrule
+ \@width .065em \@height .55em \@depth .05em}\hbox to .2em{}}}
+\def\rhd{\mathbin{\hbox to .3em{}\hbox{\vrule \@width .065em \@height
+ .55em \@depth .05em}\hbox to -.43em{}>}}
+\def\unlhd{\mathbin{\leq \hbox to -.43em{}\hbox
+ {\vrule \@width .065em \@height .63em \@depth -.08em}\hbox to .2em{}}}
+\def\unrhd{\mathbin{ \hbox to .3em{}\hbox
+ {\vrule \@width .065em \@height .63em \@depth -.08em}\hbox to -.43em{}\geq}}
+
+% Definition of \$ to work in italic font (since it produces a pound sterling
+% sign in the cmit font.
+
+\def\${\protect\pdollar}
+\def\pdollar{{\ifdim \fontdimen\@ne\font >\z@ \sl \fi\char`\$}}
+
+% Definition of pound sterling sign.
+
+\def\pounds{{\it \char'44}}
+
+% Definition of \copyright changed so it works in other type styles,
+% and so it is robust
+\def\copyright{\protect\pcopyright}
+\def\pcopyright{{\rm\ooalign{\hfil
+ \raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}
+
+% Stuff from mssymb.tex (AMS symbols)
+
+\mathchardef\boxdot="2B00
+\mathchardef\boxplus="2B01
+\mathchardef\boxtimes="2B02
+\mathchardef\square="0B03
+\mathchardef\blacksquare="0B04
+\mathchardef\centerdot="2B05
+\mathchardef\lozenge="0B06
+\mathchardef\blacklozenge="0B07
+\mathchardef\circlearrowright="3B08
+\mathchardef\circlearrowleft="3B09
+\mathchardef\rightleftharpoons="3B0A
+\mathchardef\leftrightharpoons="3B0B
+\mathchardef\boxminus="2B0C
+\mathchardef\Vdash="3B0D
+\mathchardef\Vvdash="3B0E
+\mathchardef\vDash="3B0F
+\mathchardef\twoheadrightarrow="3B10
+\mathchardef\twoheadleftarrow="3B11
+\mathchardef\leftleftarrows="3B12
+\mathchardef\rightrightarrows="3B13
+\mathchardef\upuparrows="3B14
+\mathchardef\downdownarrows="3B15
+\mathchardef\upharpoonright="3B16
+\let\restriction=\upharpoonright
+\mathchardef\downharpoonright="3B17
+\mathchardef\upharpoonleft="3B18
+\mathchardef\downharpoonleft="3B19
+\mathchardef\rightarrowtail="3B1A
+\mathchardef\leftarrowtail="3B1B
+\mathchardef\leftrightarrows="3B1C
+\mathchardef\rightleftarrows="3B1D
+\mathchardef\Lsh="3B1E
+\mathchardef\Rsh="3B1F
+\mathchardef\rightsquigarrow="3B20
+\mathchardef\leftrightsquigarrow="3B21
+\mathchardef\looparrowleft="3B22
+\mathchardef\looparrowright="3B23
+\mathchardef\circeq="3B24
+\mathchardef\succsim="3B25
+\mathchardef\gtrsim="3B26
+\mathchardef\gtrapprox="3B27
+\mathchardef\multimap="3B28
+\mathchardef\therefore="3B29
+\mathchardef\because="3B2A
+\mathchardef\doteqdot="3B2B
+\let\Doteq=\doteqdot
+\mathchardef\triangleq="3B2C
+\mathchardef\precsim="3B2D
+\mathchardef\lesssim="3B2E
+\mathchardef\lessapprox="3B2F
+\mathchardef\eqslantless="3B30
+\mathchardef\eqslantgtr="3B31
+\mathchardef\curlyeqprec="3B32
+\mathchardef\curlyeqsucc="3B33
+\mathchardef\preccurlyeq="3B34
+\mathchardef\leqq="3B35
+\mathchardef\leqslant="3B36
+\mathchardef\lessgtr="3B37
+\mathchardef\backprime="0B38
+\mathchardef\risingdotseq="3B3A
+\mathchardef\fallingdotseq="3B3B
+\mathchardef\succcurlyeq="3B3C
+\mathchardef\geqq="3B3D
+\mathchardef\geqslant="3B3E
+\mathchardef\gtrless="3B3F
+\mathchardef\sqsubset="3B40
+\mathchardef\sqsupset="3B41
+\mathchardef\vartriangleright="3B42
+\mathchardef\vartriangleleft="3B43
+\mathchardef\trianglerighteq="3B44
+\mathchardef\trianglelefteq="3B45
+\mathchardef\bigstar="0B46
+\mathchardef\between="3B47
+\mathchardef\blacktriangledown="0B48
+\mathchardef\blacktriangleright="3B49
+\mathchardef\blacktriangleleft="3B4A
+\mathchardef\vartriangle="3B4D
+\mathchardef\blacktriangle="0B4E
+\mathchardef\triangledown="0B4F
+\mathchardef\eqcirc="3B50
+\mathchardef\lesseqgtr="3B51
+\mathchardef\gtreqless="3B52
+\mathchardef\lesseqqgtr="3B53
+\mathchardef\gtreqqless="3B54
+\mathchardef\Rrightarrow="3B56
+\mathchardef\Lleftarrow="3B57
+\mathchardef\veebar="2B59
+\mathchardef\barwedge="2B5A
+\mathchardef\doublebarwedge="2B5B
+\mathchardef\angle="0B5C
+\mathchardef\measuredangle="0B5D
+\mathchardef\sphericalangle="0B5E
+\mathchardef\varpropto="3B5F
+\mathchardef\smallsmile="3B60
+\mathchardef\smallfrown="3B61
+\mathchardef\Subset="3B62
+\mathchardef\Supset="3B63
+\mathchardef\Cup="2B64
+\let\doublecup=\Cup
+\mathchardef\Cap="2B65
+\let\doublecap=\Cap
+\mathchardef\curlywedge="2B66
+\mathchardef\curlyvee="2B67
+\mathchardef\leftthreetimes="2B68
+\mathchardef\rightthreetimes="2B69
+\mathchardef\subseteqq="3B6A
+\mathchardef\supseteqq="3B6B
+\mathchardef\bumpeq="3B6C
+\mathchardef\Bumpeq="3B6D
+\mathchardef\lll="3B6E
+\let\llless=\lll
+\mathchardef\ggg="3B6F
+\let\gggtr=\ggg
+\mathchardef\circledS="0B73
+\mathchardef\pitchfork="3B74
+\mathchardef\dotplus="2B75
+\mathchardef\backsim="3B76
+\mathchardef\backsimeq="3B77
+\mathchardef\complement="0B7B
+\mathchardef\intercal="2B7C
+\mathchardef\circledcirc="2B7D
+\mathchardef\circledast="2B7E
+\mathchardef\circleddash="2B7F
+\def\ulcorner{\delimiter"4B70B70 }
+\def\urcorner{\delimiter"5B71B71 }
+\def\llcorner{\delimiter"4B78B78 }
+\def\lrcorner{\delimiter"5B79B79 }
+\def\yen{\mathhexbox B55 }
+\def\checkmark{\mathhexbox B58 }
+\def\circledR{\mathhexbox B72 }
+\def\maltese{\mathhexbox B7A }
+\mathchardef\lvertneqq="3C00
+\mathchardef\gvertneqq="3C01
+\mathchardef\nleq="3C02
+\mathchardef\ngeq="3C03
+\mathchardef\nless="3C04
+\mathchardef\ngtr="3C05
+\mathchardef\nprec="3C06
+\mathchardef\nsucc="3C07
+\mathchardef\lneqq="3C08
+\mathchardef\gneqq="3C09
+\mathchardef\nleqslant="3C0A
+\mathchardef\ngeqslant="3C0B
+\mathchardef\lneq="3C0C
+\mathchardef\gneq="3C0D
+\mathchardef\npreceq="3C0E
+\mathchardef\nsucceq="3C0F
+\mathchardef\precnsim="3C10
+\mathchardef\succnsim="3C11
+\mathchardef\lnsim="3C12
+\mathchardef\gnsim="3C13
+\mathchardef\nleqq="3C14
+\mathchardef\ngeqq="3C15
+\mathchardef\precneqq="3C16
+\mathchardef\succneqq="3C17
+\mathchardef\precnapprox="3C18
+\mathchardef\succnapprox="3C19
+\mathchardef\lnapprox="3C1A
+\mathchardef\gnapprox="3C1B
+\mathchardef\nsim="3C1C
+\mathchardef\napprox="3C1D
+\mathchardef\varsubsetneq="3C20
+\mathchardef\varsupsetneq="3C21
+\mathchardef\nsubseteqq="3C22
+\mathchardef\nsupseteqq="3C23
+\mathchardef\subsetneqq="3C24
+\mathchardef\supsetneqq="3C25
+\mathchardef\varsubsetneqq="3C26
+\mathchardef\varsupsetneqq="3C27
+\mathchardef\subsetneq="3C28
+\mathchardef\supsetneq="3C29
+\mathchardef\nsubseteq="3C2A
+\mathchardef\nsupseteq="3C2B
+\mathchardef\nparallel="3C2C
+\mathchardef\nmid="3C2D
+\mathchardef\nshortmid="3C2E
+\mathchardef\nshortparallel="3C2F
+\mathchardef\nvdash="3C30
+\mathchardef\nVdash="3C31
+\mathchardef\nvDash="3C32
+\mathchardef\nVDash="3C33
+\mathchardef\ntrianglerighteq="3C34
+\mathchardef\ntrianglelefteq="3C35
+\mathchardef\ntriangleleft="3C36
+\mathchardef\ntriangleright="3C37
+\mathchardef\nleftarrow="3C38
+\mathchardef\nrightarrow="3C39
+\mathchardef\nLeftarrow="3C3A
+\mathchardef\nRightarrow="3C3B
+\mathchardef\nLeftrightarrow="3C3C
+\mathchardef\nleftrightarrow="3C3D
+\mathchardef\divideontimes="2C3E
+\mathchardef\varnothing="0C3F
+\mathchardef\nexists="0C40
+\mathchardef\mho="0C66
+\mathchardef\thorn="0C67
+\mathchardef\beth="0C69
+\mathchardef\gimel="0C6A
+\mathchardef\daleth="0C6B
+\mathchardef\lessdot="3C6C
+\mathchardef\gtrdot="3C6D
+\mathchardef\ltimes="2C6E
+\mathchardef\rtimes="2C6F
+\mathchardef\shortmid="3C70
+\mathchardef\shortparallel="3C71
+\mathchardef\smallsetminus="2C72
+\mathchardef\thicksim="3C73
+\mathchardef\thickapprox="3C74
+\mathchardef\approxeq="3C75
+\mathchardef\succapprox="3C76
+\mathchardef\precapprox="3C77
+\mathchardef\curvearrowleft="3C78
+\mathchardef\curvearrowright="3C79
+\mathchardef\digamma="0C7A
+\mathchardef\varkappa="0C7B
+\mathchardef\hslash="0C7D
+\mathchardef\hbar="0C7E
+\mathchardef\backepsilon="3C7F
+
+%\def\Bbb{\ifmmode\let\next\Bbb@\else
+% \def\next{\@warning{Use \string\Bbb\space only in math mode}}\fi\next}
+%\def\Bbb@#1{{\Bbb@@{#1}}}
+%\def\Bbb@@#1{\fam\ymfam#1}
+
+\def\Bbb{\ifmmode\let\next\Bbb@\else
+ \def\next{\@warning{Use \string\Bbb\space only in math mode}}\fi\next}
+\def\Bbb@{\fam\ymfam}
+
+% ***** CYRACC.DEF ***** 18 Aug 84, bb
+%
+% Access to the cyrillic is through the new MR transliteration scheme,
+% using TeX/Metafont ligature capability. (An alternate set of
+% ligatures exists, for accessing letters beyond the 26 located in
+% the font positions of the 26 roman letters. An authoritative list
+% of the ligature rules is in the file cyrillic.ligs.) Successful
+% use of this file requires appropriate cyrillic and accent fonts,
+% arranged according to the AMS/MR scheme.
+%
+% This is an interim version. Not everything works yet.
+% The following are known to be less than satisfactory:
+%
+% the intermediate `ligatures' for shch access numerals;
+% primes (transliteration of hard/soft signs) use math mode;
+% underbar on `cap' double prime is too low (hard sign);
+% thorn d's don't yet exist;
+% \cydot uses math mode.
+%
+%
+% Notes on the macros:
+%
+% The single space following each hex character code is necessary
+% to prevent the next input character from being gobbled.
+
+\def\cyracc{\def\cydot{{\kern0pt}}%
+ \def\cprime{\char"7E }\def\Cprime{\char"5E }%
+ \def\cdprime{\char"7F }\def\Cdprime{\char"5F }%
+ \def\dbar{dj}\def\Dbar{Dj}%
+ \def\dz{\char"1E }\def \Dz{\char"16 }%
+ \def\dzh{\char"0A }\def \Dzh{\char"02 }%
+ \def\'##1{\if c##1\char"0F %
+ \else \if C##1\char"07 %
+ \else \accent"26 ##1\fi \fi }%
+ \def\`##1{\if e##1\char"0B %
+ \else \if E##1\char"03 %
+ \else \errmessage{accent \string\` not defined in cyrillic}%
+ ##1\fi \fi }%
+ \def\=##1{\if e##1\char"0D %
+ \else \if E##1\char"05 %
+ \else \if \i##1\char"0C %
+ \else \if I##1\char"04 %
+ \else \errmessage{accent \string\= not defined in cyrillic}%
+ ##1\fi \fi \fi \fi }%
+ \def\u##1{\if \i##1\accent"24 i%
+ \else \accent"24 ##1\fi }%
+ \def\"##1{\if \i##1\accent"20 \char"3D %
+ \else \if I##1\accent"20 \char"04 %
+ \else \accent"20 ##1\fi \fi }}
diff --git a/macros/latex209/contrib/lms/lms.sty b/macros/latex209/contrib/lms/lms.sty
new file mode 100644
index 0000000000..44a4453b77
--- /dev/null
+++ b/macros/latex209/contrib/lms/lms.sty
@@ -0,0 +1,1434 @@
+% CUP Journal LMS document style v0.6, 4th January 1995
+% for LaTeX version 2.09
+% Copyright (C) 1994,1995 Cambridge University Press
+%
+% based on ARTICLE DOCUMENT STYLE
+% Copyright (C) 1988, 1989 by Leslie Lamport
+% Modified by ggw, June 1992
+% Modified by maw, October 1992
+% v0.3, ajw, 30 April 1993: Major changes, as outlined in Alison
+% Cadle's letter dated 2 Nov 1992
+% v0.4, ajw, mrd, 7th April 1994: NFSS 1/2 AMS 1/2 compatible
+% v0.5, ajw, 9th November 1994: minor bug fix
+% v0.6, ajw, 4th January 1995: add page numbers to table of contents,
+% increase indent on final affiliations, add \classno, change \cite
+
+\newif\ifoldfss
+\newif\ifnfssone
+\newif\ifnfsstwo
+\def\f@s@s{}%
+
+\@ifundefined{DeclareFontShape}%
+ {%
+ \@ifundefined{selectfont}%
+ {\global\oldfsstrue\def\f@s@s{with OFSS,\space}%
+ \let\reset@font=\relax}% old font selection scheme
+ {\global\nfssonetrue\def\f@s@s{with NFSS release 1,\space}}%
+ }%
+ {\global\nfsstwotrue\def\f@s@s{with NFSS release 2,\space}}%
+
+\typeout{Document Style `LMS' \f@s@s v0.6, released 4th January 1995}
+
+% Journals use two-sided printing.
+%
+\@twosidetrue % Defines twoside option.
+\@mparswitchtrue % Marginpars go on outside of page.
+% draft option
+%
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+\newif\iffin@l
+\def\ds@final{\fin@ltrue}
+
+\@options
+
+\def\hexnumber#1{\ifcase#1 0\or1\or2\or3\or4\or5\or6\or7\or8\or9\or
+ A\or B\or C\or D\or E\or F\fi}
+
+% choose right combination of font selection scheme and ams version
+\newif\ifone
+\newif\iftwo
+\newif\ifthree
+\newif\iffour
+\newif\iffive
+\newif\ifsix
+\newif\ifseven
+
+%% \let\epsilon\varepsilon
+%% \let\emptyset\varnothing
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+\def\quarter@line{3pt}
+\def\half@line{6pt}
+\def\full@line{12pt}
+\def\doublefull@line{18pt}
+
+\def\@normalsize{\@setsize\normalsize{\full@line}\xpt\@xpt
+ \abovedisplayskip \half@line plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \quarter@line plus 1pt
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI}
+\def\small{\@setsize\small{10pt}\ixpt\@ixpt
+ \abovedisplayskip 5pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 2.5pt plus 1pt
+ \belowdisplayshortskip \abovedisplayskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 0pt plus 1pt minus 1pt % was 10pt %ajw
+ \parsep \z@
+ \itemsep \parsep}}
+\def\medium{\@setsize\medium{10pt}\viiipt\@viiipt
+ \abovedisplayskip 5pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 2.5pt plus 1pt
+ \belowdisplayshortskip \abovedisplayskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 0pt plus 1pt minus 1pt % was 10pt %ajw
+ \parsep \z@
+ \itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9pt}\viiipt\@viiipt
+ \abovedisplayskip 4.5pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt
+ \belowdisplayshortskip \abovedisplayskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 0pt plus 1pt minus 1pt % was 9pt %ajw
+ \parsep \z@
+ \itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\addresssize{\@setsize\addresssize{11pt}\xpt\@xpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{16pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{21pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+%
+% SIDE MARGINS:
+\oddsidemargin 2pc % Left margin on odd-numbered pages.
+\evensidemargin 2pc % Left margin on even-numbered pages.
+
+\marginparwidth 2.0cm % Width of marginal notes.
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+% VERTICAL SPACING:
+% Top of page:
+\topmargin 3pc % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 18pt % Height of box containing running head.
+\headsep 6pt % Space between running head and text.
+\topskip = 12pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+
+\footheight \full@line % Height of box containing running foot.
+\footskip 18pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+% DIMENSION OF TEXT:
+%
+\textheight = 48\baselineskip \advance\textheight by \topskip
+ % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 30pc % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+%
+% FOOTNOTES:
+%
+%\footnotesep \half@line
+\footnotesep \full@line
+ % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+%\skip\footins \full@line plus \full@line minus 1pt
+ \skip\footins \doublefull@line plus \full@line minus 1pt
+ % Space between last line of text and
+ % top of first footnote.
+
+% FOR FLOATS ON A TEXT PAGE:
+%
+\floatsep 12pt plus \half@line minus 1pt
+ % Space between adjacent floats moved to top or bottom of text page.
+\textfloatsep 18pt plus \half@line minus 3pt
+ % Space between main text and floats at top or bottom of page.
+\intextsep 18pt plus \quarter@line minus 2pt
+ % Space between in-text figures and text
+\@maxsep 18pt
+ % The maximum of \floatsep, \textfloatsep and \intextsep
+ % (minus the stretch and shrink).
+
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus \half@line minus 2pt
+ % Same as \floatsep for double-column
+\dbltextfloatsep 18pt plus 4.5pt minus 3pt
+ % \textfloatsep for double-column
+\@dblmaxsep 18pt
+ % The maximum of \dblfloatsep and \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+\@fptop 0pt plus 0fil
+ % Stretch at top of float page/column. (Must be 0pt plus ...)
+\@fpsep \full@line plus 0fil
+ % Space between floats on float page/column.
+\@fpbot 0pt plus 3fil
+ % Stretch at bottom of float page/column. (Must be 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 0fil
+ % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep \full@line plus 0fil
+ % Space between floats on float page.
+\@dblfpbot 0pt plus 3fil
+ % Stretch at bottom of float page. (Must be 0pt plus ... )
+
+% MARGINAL NOTES:
+\marginparpush 6pt
+ % Minimum vertical separation between two marginal notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip \z@ plus .1pt % Extra vertical space between paragraphs.
+\parindent 1.5em % Width of paragraph indentation.
+\partopsep 0pt plus 1pt % Extra vertical space, in addition to
+%
+% The following page-breaking penalties are defined
+%
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+%
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+%
+\clubpenalty=0 % 'Club line' at bottom of page is OK.
+\widowpenalty=10000 % 'Widow line' at top of page is not good.
+
+
+
+% ****************************************
+% * PARTS *
+% ****************************************
+%
+\def\part{\par
+ \addvspace{4ex}
+ \@afterindentfalse
+ \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{part}
+ \addcontentsline{toc}{part}{Part \thepart: #1}
+ \else
+ \addcontentsline{toc}{part}{#1}
+ \fi
+ {\parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne
+ \reset@font\large\rm PART
+ \ifcase\thepart \or ONE \or TWO \or THREE \or FOUR \or FIVE
+ \or SIX \or SEVEN \or EIGHT \or NINE \or TEN \else \fi
+ \par \nobreak
+ \fi
+ \reset@font\LARGE \rm #2
+ \markboth{}{}\par }
+ \nobreak \vskip 3ex
+ \@afterheading
+}
+% Heading for \part* command
+\def\@spart#1{%
+ {\parindent 0pt \raggedright
+ \reset@font\LARGE \rm #1\par}
+ \nobreak
+ \vskip 3ex
+ \@afterheading
+}
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+\def\section{\@startsection{section}{1}{\z@}
+ {18pt plus 6pt minus 3pt}
+ {6pt plus 0pt minus 1pt}
+ {\centering\reset@font\normalsize\it}}
+\def\subsection{\@startsection{subsection}{2}{\parindent}
+ {18pt plus 6pt minus 3pt}
+% {6pt plus 0pt minus 1pt}
+ {-1em}
+ {\noindent\reset@font\normalsize\it}}
+ \def\subsubsection{\@startsection{subsubsection}{3}{\parindent}
+ {\full@line plus 6pt minus 3pt}
+% {6pt plus 0pt minus 1pt}
+ {-1em}
+ {\noindent\reset@font\normalsize\it}}
+\def\paragraph{\@startsection{paragraph}{4}{\z@}
+ {\full@line plus 6pt minus 3pt}
+ {\half@line plus 0pt minus 1pt}
+ {\noindent\reset@font\normalsize\rm}}
+\def\subparagraph{\@startsection{subparagraph}{4}{\parindent}
+ {\half@line plus 3.25pt minus 1pt}
+ {-0.5em}
+ {\reset@font\normalsize\rm}}
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+\setcounter{secnumdepth}{2}
+%
+% Changes to \@sect to achieve full points after numbers in section headings
+%
+% \@sect{1NAME}{2LEVEL}{3INDENT}{4BEFORESKIP}{5AFTERSKIP}{6STYLE}[ARG1]{ARG2}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \def\emptybracket{}%
+ \def\contsofeight{#8}%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec{}
+ \else \refstepcounter{#1}
+ \edef\@svsec{{\noexpand\reset@font\noexpand\rm
+ \csname the#1\endcsname
+ \ifnum #2=1% if a section
+ .%
+ \else
+ \ifnum #2=2% if a subsection
+ \ifx\emptybracket\contsofeight % and it's empty
+ .%
+ \else
+ \fi
+ \fi
+ \fi
+ }\hskip 0.5em
+ }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi #7}
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8%
+ \ifx\emptybracket\contsofeight
+ \hskip -0.5em
+ \else
+ .% only use a dot if there's a subsection heading
+ \fi
+ \csname #1mark\endcsname % add dot
+ {#7}\addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi#7}}
+ \fi
+ \@xsect{#5}}
+%
+% APPENDIX
+%
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+% ****************************************
+% * SKIPS *
+% ****************************************
+%
+\newskip\@indentskip % General CUP indent
+\newskip\smallindent % para. indent
+\newskip\@footindent % footnote indent
+\newskip\@leftskip % for CUP float stuff
+
+\@indentskip=2pc
+\smallindent=1em
+\@footindent=\smallindent
+\@leftskip=1pc
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+\leftmargini \@indentskip
+\leftmarginii 1.5pc
+\leftmarginiii 1.5pc
+\leftmarginiv 1.5pc
+\leftmarginv 1pc
+\leftmarginvi 1pc
+\leftmargin\leftmargini
+\labelsep 0.5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+%
+% label macros for Range-Left and Range-Right labels
+\def\makeRLlabel#1{\rlap{#1}\hss}
+\def\makeRRlabel#1{\hss\llap{#1}}
+%
+\def\@listI{\leftmargin\leftmargini
+ \parsep \z@ plus 1pt minus 1pt
+ \topsep 0pt plus 1pt minus 1pt % was \full@line %ajw
+ \itemsep \z@ plus 1pt minus 1pt
+ \let\makelabel\makeRRlabel}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt minus 1pt % was \half@line %ajw
+ \parsep \z@
+ \itemsep \parsep
+ \let\makelabel\makeRRlabel}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0pt plus 1pt minus 1pt % was \half@line %ajw
+ \parsep \z@
+ \partopsep \z@
+ \itemsep \parsep
+ \let\makelabel\makeRRlabel}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+ \let\makelabel\makeRRlabel}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+ \let\makelabel\makeRRlabel}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+ \let\makelabel\makeRRlabel}
+%
+% ENUMERATE
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep \else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \fi
+ \@ifnextchar [{\@enumeratetwo}{\@enumerateone}%
+}
+\def\@enumeratetwo[#1]{%
+ \list{\csname label\@enumctr\endcsname}%
+ {\settowidth\labelwidth{[#1]}
+ \leftmargin\labelwidth \advance\leftmargin\labelsep
+ \usecounter{\@enumctr}
+ \let\makelabel\makeRRlabel}
+}
+\def\@enumerateone{%
+ \list{\csname label\@enumctr\endcsname}%
+ {\usecounter{\@enumctr}
+ \let\makelabel\makeRRlabel}}
+
+
+\def\labelenumi{\theenumi}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\theenumiii}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\theenumiv}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+%
+% ITEMIZE
+%
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep
+ \else
+ \advance\@itemdepth \@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}{\let\makelabel\makeRRlabel}%
+ \fi}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\reset@font\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+%
+% DESCRIPTION
+%
+\def\descriptionlabel#1{\hspace\labelsep \reset@font\bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+%
+% Unlabelled run-in list
+%\def\unnumlabel#1{\reset@font\rm #1}
+\def\unnum{\list{}{\labelwidth\z@
+% \let\makelabel\unnumlabel
+ \leftmargin \parindent
+ \itemindent-\parindent
+}}
+\let\endunnum\endlist
+%
+% VERSE
+%
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@
+ \itemindent -\@indentskip
+ \listparindent \itemindent
+ \rightmargin\leftmargin
+ \advance\leftmargin \@indentskip}\item[]}
+\let\endverse\endlist
+%
+% QUOTATION
+%
+\def\quotation{\list{}{\listparindent \smallindent
+ \itemindent\listparindent
+ \leftmargin2.5pc\rightmargin\leftmargin
+ \parsep 0pt plus 1pt}\item[]\reset@font\small}
+\let\endquotation=\endlist
+%
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\leftmargin2.5pc\rightmargin\leftmargin}%
+ \item[]\reset@font\small}
+\let\endquote=\endlist
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+\newif\ifextraline
+\extralinefalse
+\def\@emptyfootnote{\footnotetext{}}
+\def\maketitle{\par
+ \begingroup
+ \newpage
+ \global\@topnum\z@
+ \@maketitle
+ \thispagestyle{title}%
+ \@thanks
+ \endgroup
+ \iffin@l
+ \ifextraline
+ \@footnoteone\@footnotetwo\@myfootnote\@footnotebull
+ \else
+ \@footnoteone\@footnotetwo\@footnotebull
+ \fi
+ \else
+ \ifextraline
+ \@myfootnote\@footnotetwo\@emptyfootnote\@emptyfootnote
+ \else
+ \@footnotetwo\@emptyfootnote\@emptyfootnote
+ \fi
+ \fi
+ \setcounter{footnote}{0}%
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}%
+% \gdef\@author{}\gdef\@title{}
+ \let\thanks\relax}%
+% \def\and{\end{author@tabular}\vskip .25em\par
+% \begin{author@tabular}[t]{@{}c@{}}}
+\newif\ifrunninghead
+\ifrunninghead
+ \def\and{\end{author@tabular}{\reset@font\sc and}%
+ \begin{author@tabular}[t]{@{}c@{}}}%
+\else % if in running head
+ \def\and{\reset@font\sc and}%
+\fi
+
+\def\@maketitle{\newpage
+ \vspace*{-14pt}%
+ {\parindent 0pt\centering\sloppy
+ {\reset@font\large \@title \par}%
+ \vskip 24pt% \ignorespaces
+ {\reset@font\normalsize% \noindent
+ \begin{author@tabular}[t]{@{\hspace*{6pt}}c@{}}\@author
+ \end{author@tabular}\par
+ }%
+ \par% \noindent
+ }%
+ \vspace{19pt\ignorespaces}%
+}
+
+\def\ps@title{\ps@empty\global\let\footnoterule\title@footnoterule
+\global\let\@makefntext\title@makefntext
+}
+\def\abstract{\removelastskip\par%
+{\centering\reset@font\sc Abstract\\[10pt]}\reset@font\footnotesize
+\parindent 1.5em\listparindent 1.5em\ignorespaces}
+ \def\endabstract{\endlist\addvspace{19pt}}
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+
+\mark{{}{}} % Initializes TeX's marks
+
+\gdef\@author{\mbox{}} % SFB 0.02
+\def\author{\@ifnextchar [{\@authortwo}{\@authorone}}
+\def\@authortwo[#1]#2{\gdef\@author{\uppercase{#2}}
+\gdef\@shortauthor{\lowercase{#1}}}
+\def\@authorone#1{\gdef\@author{\uppercase{#1}}
+\gdef\@shortauthor{\lowercase{#1}}}
+\def\shortauthor#1{\gdef\@shortauthor{\lowercase{#1}}}
+\gdef\@shortauthor{\runningheadtrue\@author}
+
+\gdef\@title{\mbox{}} % SFB 0.02
+\def\title{\@ifnextchar [{\@titletwo}{\@titleone}}
+\def\@titletwo[#1]#2{\gdef\@title{\uppercase{#2}}
+\gdef\@shorttitle{\lowercase{#1}}}
+\def\@titleone#1{\gdef\@title{\uppercase{#1}}
+\gdef\@shorttitle{\lowercase{#1}}}
+\def\shorttitle#1{\gdef\@shorttitle{\lowercase{#1}}}
+\gdef\@shorttitle{\@title}
+\def\volume#1{\gdef\@volume{#1}}
+\gdef\@volume{00}
+\def\pagerange#1{\gdef\@pagerange{#1}}
+\gdef\@pagerange{000--000}
+
+\edef\@pubyear{\number\year}
+\def\pubyear#1{\def\@pubyear{#1}}
+
+% \ps@empty and \ps@plain defined in LATEX.TEX
+
+\def\ps@headings{\let\@mkboth\markboth
+ \def\@oddhead{\hss\vbox{\hsize=\textwidth \hbox to \textwidth
+ {\strut\phantom{\thepage}\hfill\normalsize\sc
+ \@shorttitle\hfill {\rm\thepage}}
+ }}
+ \def\@oddfoot{}
+ \def\@evenhead{\hss\vbox{\hsize=\textwidth \hbox to \textwidth
+ {\strut\normalsize{\rm\thepage}\hfill \sc\@shortauthor
+ \hfill\phantom{\rm\thepage}}
+ }}
+ \def\@evenfoot{}
+ \def\sectionmark##1{\markboth{##1}{}}
+ \def\subsectionmark##1{\markright{##1}}
+}
+%
+% Removal of 'myheadings' page style.
+%
+\def\ps@myheadings{\ps@headings}
+
+\def\@classno{00000}
+\def\classno#1{\def\@classno{#1}}
+
+\def\@recdate{}
+\def\@extraline{}
+\def\recdate#1{\def\@recdate{#1}}
+\def\extraline#1{\extralinetrue\def\@extraline{#1}}
+
+\def\@affiliationone{}
+\def\affiliationone#1{\removelastskip\vspace{26pt}\noindent%
+ \reset@font\addresssize\hspace*{8pt}
+\parbox[t]{177pt}{\@affiliationone{#1}}}%15pc
+
+\def\@affiliationtwo{}
+\def\affiliationtwo#1{\reset@font\addresssize\parbox[t]{13.25pc}%
+{\@affiliationtwo{#1}}}
+
+\def\@affiliationthree{}
+\def\affiliationthree#1{\removelastskip\vspace{17pt}\noindent%
+ \reset@font\addresssize\hspace*{8pt}
+\parbox[t]{177pt}{\@affiliationthree{#1}}}%15pc
+
+\def\@affiliationfour{}
+\def\affiliationfour#1{\reset@font\addresssize\parbox[t]{13.25}%
+{\@affiliationfour{#1}}}
+
+%\def\@footnoteone{}
+%\def\@footnotetwo{}
+%\def\@myfootnote{}
+\def\@footnoteone{\footnotetext{Received \@recdate.}}
+\def\@footnotetwo{\footnotetext{1991
+{\reset@font\it Mathematics Subject Classification\/}
+ \@classno.}}
+\def\@myfootnote{\footnotetext{\@extraline .}}
+\def\@footnotebull{\footnotetext{\hfill{\reset@font\it Bull.\ London Math.\ Soc.\/}
+\@volume\ (\@pubyear) \@pagerange \hfill}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\def\ps@titlepage{\let\@mkboth\@gobbletwo
+% \def\@oddhead{\hss\vbox{\hsize=\textwidth \hbox to \textwidth
+% {\strut\small\rm \hfill}
+% {\strut\small\rm\@journal\hfill}
+% \vskip 2.5pt \vskip \arrayrulewidth}}
+% \def\@oddfoot{}
+% \def\@evenhead{\hss\vbox{\hsize=\textwidth \hbox to \textwidth
+% {\strut\small\rm \hfill}
+% {\strut\small\rm\@journal\hfill}
+% \vskip 2.5pt \vskip \arrayrulewidth}}
+% \def\@evenfoot{}
+% \def\sectionmark##1{}
+% \def\subsectionmark##1{}
+% }
+%
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+% THEOREM
+%
+% THEOREM (altered so that a definition of, say, \theorem, also defines
+% \theorem*. \theorem* is the unnumbered version and is defined
+% through the \newunnumbered mechanism. These are what the typespec calls
+% "environments to be numbered by the author". The body of these is
+% italicised. ggw.
+%
+\def\newtheorem#1{\@ifnextchar[{\@othm{#1}}{\@nthm{#1}}}
+
+\def\@nthm#1#2{%
+\@ifnextchar[{\@xnthm{#1}{#2}}{\@ynthm{#1}{#2}}}
+
+\def\@xnthm#1#2[#3]{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\@addtoreset{#1}{#3}%
+\expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+ \csname the#3\endcsname \@thmcountersep \@thmcounter{#1}}%
+\global\@namedef{#1}{\@thm{#1}{#2}}%
+\global\@namedef{#1*}{\@thmstar{#1}{#2}}%
+\global\@namedef{end#1}{\@endtheorem}%
+\global\@namedef{end#1*}{\@endthmstar}}}
+
+\def\@ynthm#1#2{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\@thm{#1}{#2}}%
+\global\@namedef{#1*}{\@thmstar{#1}{#2}}%
+\global\@namedef{end#1}{\@endtheorem}%
+\global\@namedef{end#1*}{\@endthmstar}}}
+
+\def\@othm#1[#2]#3{\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{the#1}{\@nameuse{the#2}}%
+\global\@namedef{#1}{\@thm{#2}{#3}}%
+\global\@namedef{#1*}{\@thmstar{#2}{#3}}%
+\global\@namedef{end#1}{\@endtheorem}
+\global\@namedef{end#1*}{\@endthmstar}}}
+
+\def\@thm#1#2{\refstepcounter
+ {#1}\@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}}
+
+\def\@xthm#1#2{\@begintheorem{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@ythm#1#2[#3]{\@opargbegintheorem{#2}{\csname
+ the#1\endcsname}{#3}\ignorespaces}
+%
+%
+\def\@begintheorem#1#2{
+ \list{}{\topsep \full@line \leftmargin \z@
+ \itemindent 2.5em %\parindent %ajw
+ \labelsep 1em \labelwidth \z@ \listparindent\parindent} %ajw
+ \item[{\reset@font\sc #1\ #2.}]\reset@font\it }
+\def\@opargbegintheorem#1#2#3{
+ \list{}{\topsep \full@line \leftmargin \z@
+ \itemindent 2.5em %\parindent %ajw
+ \labelsep 1em\labelwidth\z@\listparindent\parindent} %ajw
+ \item[{\reset@font\sc #1\ #2\ {\reset@font\rm (#3).}}]\reset@font\it }
+\def\@endtheorem{\endlist\par\@endpefalse} %ajw
+\def\@thmcounter#1{\noexpand\arabic{#1}}
+\def\@thmcountersep{.}
+%
+%
+\def\@thmstar#1#2{%\refstepcounter{#1}
+\@ifnextchar[{\@ythmstar{#1}{#2}}{\@xthmstar{#1}{#2}}}
+
+\def\@xthmstar#1#2{\@beginthmstar{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@ythmstar#1#2[#3]{\@opargbeginthmstar{#2}{\csname
+ the#1\endcsname}{#3}\ignorespaces}
+
+%DEFAULT VALUES
+\def\@thmstarcounter#1{{}}
+\def\@thmstarcountersep{{}}
+\def\@beginthmstar#1#2{%
+ \list{}{\topsep \full@line \leftmargin \z@
+ \itemindent 2.5em %\parindent %ajw
+ \labelsep 1em \labelwidth \z@ \listparindent\parindent} %ajw
+ \item[{\reset@font\sc #1.}]\reset@font\it }
+\def\@opargbeginthmstar#1#2#3{%
+ \list{}{\topsep \full@line
+ \itemindent 2.5em %\parindent %ajw
+ \leftmargin\z@\labelsep 1em\labelwidth\z@\listparindent\parindent} %ajw
+ \item[\hskip \labelsep{\reset@font\sc #1\ {\reset@font\rm (#3).}}]\reset@font\it }
+\def\@endthmstar{\endlist\par\@endpefalse} %ajw
+%
+% Numbered Examples, etc; these are exactly the same as \newtheorem,
+% except that the body is in roman. %ggw
+% \newexample now called \newnumbered
+
+\def\newnumbered#1{\@ifnextchar[{\@oexmpl{#1}}{\@nexmpl{#1}}}
+
+\def\@nexmpl#1#2{%
+\@ifnextchar[{\@xnexmpl{#1}{#2}}{\@ynexmpl{#1}{#2}}}
+
+\def\@xnexmpl#1#2[#3]{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\@addtoreset{#1}{#3}%
+\expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+ \csname the#3\endcsname \@exmplcountersep \@exmplcounter{#1}}%
+\global\@namedef{#1}{\@exmpl{#1}{#2}}%
+\global\@namedef{#1*}{\@exmplstar{#1}{#2}}%
+\global\@namedef{end#1}{\@endexample}%
+\global\@namedef{end#1*}{\@endexmplstar}}}
+
+\def\@ynexmpl#1#2{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@exmplcounter{#1}}%
+\global\@namedef{#1}{\@exmpl{#1}{#2}}%
+\global\@namedef{#1*}{\@exmplstar{#1}{#2}}%
+\global\@namedef{end#1}{\@endexample}%
+\global\@namedef{end#1*}{\@endexmplstar}}}
+
+\def\@oexmpl#1[#2]#3{\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{the#1}{\@nameuse{the#2}}%
+\global\@namedef{#1}{\@exmpl{#2}{#3}}%
+\global\@namedef{#1*}{\@exmplstar{#2}{#3}}%
+\global\@namedef{end#1}{\@endexample}
+\global\@namedef{end#1*}{\@endexmplstar}}}
+
+\def\@exmpl#1#2{\refstepcounter
+ {#1}\@ifnextchar[{\@yexmpl{#1}{#2}}{\@xexmpl{#1}{#2}}}
+
+\def\@xexmpl#1#2{\@beginexample{#2}
+{\csname the#1\endcsname}\ignorespaces}
+\def\@yexmpl#1#2[#3]{\@opargbeginexample{#2}{\csname
+ the#1\endcsname}{#3}\ignorespaces}
+%
+%
+\def\@beginexample#1#2{
+ \list{}{\topsep \full@line \leftmargin \z@
+ \itemindent 2.5em %\parindent %ajw
+ \labelsep 1em \labelwidth \z@ \listparindent\parindent} %ajw
+ \item[{\reset@font\sc #1\ #2.}]}
+\def\@opargbeginexample#1#2#3{
+ \list{}{\topsep \full@line
+ \itemindent 2.5em %\parindent %ajw
+ \leftmargin\z@\labelsep 1em\labelwidth\z@\listparindent\parindent} %ajw
+ \item[\hskip \labelsep{\reset@font\sc #1\ #2\ {\reset@font\rm (#3).}}]}
+\def\@endexample{\endlist\par\@endpefalse} %ajw
+\def\@exmplcounter#1{\noexpand\arabic{#1}}
+\def\@exmplcountersep{.}
+%
+%
+\def\@exmplstar#1#2{%\refstepcounter{#1}
+\@ifnextchar[{\@yexmplstar{#1}{#2}}{\@xexmplstar{#1}{#2}}}
+
+\def\@xexmplstar#1#2{\@beginexmplstar{#2}
+{\csname the#1\endcsname}\ignorespaces}
+\def\@yexmplstar#1#2[#3]{\@opargbeginexmplstar{#2}{\csname
+ the#1\endcsname}{#3}\ignorespaces}
+
+%DEFAULT VALUES
+\def\@exmplstarcounter#1{{}}
+\def\@exmplstarcountersep{{}}
+\def\@beginexmplstar#1#2{%
+ \list{}{\topsep \full@line \leftmargin \z@
+ \itemindent 2.5em %\parindent %ajw
+ \labelsep 1em \labelwidth \z@ \listparindent\parindent} %ajw
+ \item[{\reset@font\sc #1.}]}
+\def\@opargbeginexmplstar#1#2#3{%
+ \list{}{\topsep \full@line
+ \itemindent 2.5em %\parindent %ajw
+ \leftmargin\z@\labelsep 1em\labelwidth\z@\listparindent\parindent} %ajw
+ \item[\hskip \labelsep{\reset@font\sc #1\ {\reset@font\rm (#3).}}]}
+\def\@endexmplstar{\endlist\par\@endpefalse} %ajw
+%
+
+% Unnumbered Examples, etc; these are exactly the same as \newtheorem,
+% except that the body is in roman and they are unnumbered. %ajw
+% \newack now called \newunnumbered
+
+\def\newunnumbered#1{\@ifnextchar[{\@oack{#1}}{\@nack{#1}}}
+
+\def\@nack#1#2{%
+\@ifnextchar[{\@xnack{#1}{#2}}{\@ynack{#1}{#2}}}
+
+\def\@xnack#1#2[#3]{\expandafter\@ifdefinable\csname #1\endcsname
+{%\@definecounter{#1}\@addtoreset{#1}{#3}%
+%\expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+% \csname the#3\endcsname \@ackcountersep \@ackcounter{#1}}%
+\global\@namedef{#1}{\@ack{#1}{#2}}\global\@namedef{end#1}{\@endack}}}
+
+\def\@ynack#1#2{\expandafter\@ifdefinable\csname #1\endcsname
+{%\@definecounter{#1}%
+%\expandafter\xdef\csname the#1\endcsname{\@ackcounter{#1}}%
+\global\@namedef{#1}{\@ack{#1}{#2}}\global\@namedef{end#1}{\@endack}}}
+
+\def\@oack#1[#2]#3{\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{the#1}{\@nameuse{the#2}}%
+\global\@namedef{#1}{\@ack{#2}{#3}}%
+\global\@namedef{end#1}{\@endack}}}
+
+\def\@ack#1#2{%\refstepcounter{#1}
+\@ifnextchar[{\@yack{#1}{#2}}{\@xack{#1}{#2}}}
+
+\def\@xack#1#2{\@beginack{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@yack#1#2[#3]{\@opargbeginack{#2}{\csname
+ the#1\endcsname}{#3}\ignorespaces}
+
+%DEFAULT VALUES
+\def\@ackcounter#1{{}}
+\def\@ackcountersep{{}}
+\def\@beginack#1#2{%
+ \list{}{\topsep \full@line \leftmargin \z@
+ \itemindent 2.5em %\parindent %ajw
+ \labelsep 1em \labelwidth \z@ \listparindent\parindent} %ajw
+ \item[{\reset@font\sc #1.}]}
+\def\@opargbeginack#1#2#3{%
+ \list{}{\topsep \full@line
+ \itemindent 2.5em %\parindent %ajw
+ \leftmargin\z@\labelsep 1em\labelwidth\z@\listparindent\parindent} %ajw
+ \item[\hskip \labelsep{\reset@font\sc #1\ {\reset@font\rm (#3).}}]}
+\def\@endack{\endlist\par\@endpefalse} %ajw
+%
+% PROOF
+%
+\def\proof{\@ifnextchar[{\@oprf}{\@nprf}}
+\def\@nprf{%
+ \list{}{\topsep \full@line \leftmargin \z@
+ \itemindent 2.5em %\parindent %ajw
+ \labelsep 1em \labelwidth \z@ \listparindent\parindent} %ajw
+ \item[{\reset@font\it Proof.}]}
+\def\@oprf[#1]{%
+ \list{}{\topsep \full@line \leftmargin \z@
+ \itemindent 2.5em %\parindent %ajw
+ \labelsep 1em \labelwidth \z@ \listparindent\parindent} %ajw
+ \item[{\reset@font\it Proof\ #1.}]}
+\def\endproof{\endlist\par\@endpefalse} %ajw
+%
+%
+% NOTE ADDED IN PROOF
+%
+\def\noteinproof{%
+ \list{}{\topsep \full@line \leftmargin \z@
+ \itemindent 2.5em %ajw
+ \labelsep 1em\labelwidth\z@\listparindent\parindent\reset@font\footnotesize} %ajw
+ \item[{\reset@font\footnotesize\sc Note added in proof.}]}
+\def\endnoteinproof{\endlist\par\@endpefalse} %ajw
+%
+%
+% TITLEPAGE
+%
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{title}\c@page\z@}
+\def\endtitlepage{\global\let \@makefntext\normal@makefntext
+\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+\arraycolsep 5pt % Half the space between columns in an array environment.
+\tabcolsep 6pt % Half the space between columns in a tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 1.5pt % Space between adjacent rules in array or tabular env.
+
+%\renewcommand{\arraystretch}{1}
+
+\expandafter \def\csname tabular*\endcsname #1{\def\@halignto{to
+#1}\@tabular}
+
+
+\def\tabular{\def\@halignto{}
+ \doublerulesep \z@
+ \def\hline{\noalign{\ifnum0=`}\fi
+ \vskip 4.5pt
+ \hrule \@height \arrayrulewidth
+% \hrule width \textwidth \@height \arrayrulewidth
+ \vskip 4.5pt
+ \futurelet \@tempa\@xhline}
+ \def\@xhline{\ifx\@tempa\hline
+ \vskip -9pt
+ \vskip \doublerulesep
+ \fi
+ \ifnum0=`{\fi}}
+ \def\@arrayrule{\@addtopreamble{\hskip -.5\arrayrulewidth
+% \vrule \@width \arrayrulewidth
+ \hskip .5\arrayrulewidth}}
+\@tabular
+}
+%
+\let \oldtabular \tabular
+%this is to preserve the old tabular environment in case it is needed
+\let \endoldtabular \endtabular
+
+\def\tabular{\def\@halignto{to \textwidth}
+ \doublerulesep \z@
+ \def\hline{\noalign{\ifnum0=`}\fi
+ \vskip 4.5pt
+ \hrule \@height \arrayrulewidth
+% \hrule width \textwidth \@height \arrayrulewidth
+ \vskip 4.5pt
+ \futurelet \@tempa\@xhline}
+ \def\@xhline{\ifx\@tempa\hline
+ \vskip -9pt
+ \vskip \doublerulesep
+ \fi
+ \ifnum0=`{\fi}}
+ \def\@arrayrule{\@addtopreamble{\hskip -.5\arrayrulewidth
+% \vrule \@width \arrayrulewidth
+ \hskip .5\arrayrulewidth}}
+\tabskip=\tabcolsep plus 1fil\@tabular}
+% this fixes tabular
+%things so that they are full out l and r; the \tabskip setting is
+% to put tabskip before the first column. ggw
+
+
+% the following is to adjust the intercolumn spacing to put in
+% enough stretch. ggw
+\def\@tabarray{\@ifnextchar[{\@tarray}{\@ttarray}}
+\def\@tarray[#1]#2{\t@barray[#1]{@{\tabskip=2\tabcolsep plus 3pt} #2}}
+\def\@ttarray#1{\t@barray[c]{@{\tabskip=2\tabcolsep plus 3pt} #1}}
+
+\def\t@barray[#1]#2{\setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}\@mkpream{#2}\edef\@preamble{\halign \noexpand\@halignto
+\bgroup \tabskip\z@ \@arstrut \@preamble \tabskip=\tabcolsep plus 1fil \cr}%
+\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup \let\par\relax
+ \let\@sharp##\let\protect\relax \lineskip\z@\baselineskip\z@\@preamble}
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+%
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt
+% Space left between box and text by \fbox and \framebox.
+\fboxrule = \arrayrulewidth
+ % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+\newcounter{part}
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+
+\def\thepart {\arabic{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection.\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{1}
+
+\def\@undottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth
+ \else
+ \vskip \z@ plus .2pt
+ {\hangindent #2\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent #2\relax
+ \@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ #4\nobreak
+ \hfill \nobreak
+ \hbox to\@pnumwidth{\hfil\reset@font\rm \ }\par}\fi}
+
+% TABLEOFCONTENTS
+%
+\def\tableofcontents{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \section*{Contents}
+ \@starttoc{toc}
+ \if@restonecol\twocolumn\fi
+ \par\vspace{\full@line}}
+
+\def\l@part#1#2{\addpenalty{-\@highpenalty}
+ \addvspace{2.25em plus 1pt}
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\reset@font\normalsize\rm
+ \leavevmode
+ \hspace*{3pc}
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak
+ \global\@nobreaktrue
+ \everypar{\global\@nobreakfalse\everypar{}}%
+ \endgroup
+}
+\def\l@section#1#2{\addpenalty{\@secpenalty}
+ \@tempdima 1.5em
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \reset@font\rm\leavevmode
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup
+}
+\def\l@subsection{\@undottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@undottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@undottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@undottedtocline{5}{10em}{5em}}
+
+% LIST OF FIGURES
+%
+\def\listoffigures{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \section*{List of Figures\@mkboth{List of Figures}{List of Figures}}
+ \@starttoc{lof}
+ \if@restonecol\twocolumn\fi
+}
+\def\l@figure{\@undottedtocline{1}{1.5em}{2.3em}}
+
+% LIST OF TABLES
+%
+\def\listoftables{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \section*{List of Tables\@mkboth{List of Tables}{List of Tables}}
+ \@starttoc{lot}
+ \if@restonecol\twocolumn\fi
+}
+\let\l@table\l@figure
+%
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% keep the comma roman
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{{\reset@font\rm ,}\penalty\@m\ }\@ifundefined
+ % on this line
+ {b@\@citeb}{{\reset@font\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
+
+% change the citations to bold face:
+%\def\@cite#1#2{[{\reset@font\bf {#1\if@tempswa , #2\fi}}]}
+ \def\@cite#1#2{[{{\reset@font\bf #1\if@tempswa \reset@font\rm, #2\fi}}]}
+%
+\let\bibliobbb=\relax
+%
+\def\thebibliography#1{%
+%%MR \ifoldfss
+%%MR% \ifCUPmtlplainloaded
+%%MR \textfont\msbfam=\ninemsb
+%%MR% \else
+%%MR% \textfont\msbfam=\ninemsb
+%%MR% \fi
+%%MR \fi%
+ \bibliobbb
+ \def\bibname{\def\and{{\reset@font\rm and} }\reset@font\sc}
+\section*{References}
+ \addcontentsline{toc}{section}{References}
+ \list{{\reset@font\bf \arabic{enumi}.\ }}{%
+ \setbox\@tempboxa=\hbox{#1.\ }%
+ \labelwidth=\wd\@tempboxa
+% \labelwidth 24pt
+ \labelsep \z@
+ \leftmargin 30pt
+ \itemsep 0pt
+ \itemindent \z@
+ \advance\itemindent -\leftmargin
+ \advance\itemindent \labelwidth
+ \usecounter{enumi}
+ \let\makelabel=\makeRRlabel
+}
+ \reset@font\small \parindent\z@
+ \parskip\z@ plus .1pt\relax
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax
+}
+%
+\let\endthebibliography=\endlist
+\def\@biblabel#1{\reset@font\bf #1\ }
+%
+%
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+\newif\if@restonecol
+\def\theindex{\section*{Index}
+ \addcontentsline{toc}{section}{Index}
+ \reset@font\footnotesize
+ \parindent\z@
+ \parskip\z@ plus .1pt\relax
+ \let\item\@idxitem}
+\def\@idxitem{\par\hangindent 1pc}
+\def\subitem {\par\hangindent 1pc \hspace*{1pc}}
+\def\subsubitem{\par\hangindent 1pc\hspace*{1pc}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par\vskip\baselineskip \relax}
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+%\def\footnoterule{\kern-3\p@
+%\hrule width .4\columnwidth height \z@ \kern %3\p@}
+
+\def\normal@footnoterule{\kern-3\p@
+\hrule width \textwidth height .5pt \kern 3\p@}
+\def\title@footnoterule{\kern-3\p@
+\hrule width \textwidth height \z@ \kern 3\p@}
+\let\footnoterule\normal@footnoterule
+
+\long\def\normal@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.5em{\hss$^{\@thefnmark}$}\hspace{0.5em}%
+ \reset@font\rm #1}%\rm inserted for nfss: ggw
+\long\def\title@makefntext#1{\centering \parindent 1em\noindent
+ $^{\@thefnmark}$\hspace{0.5em}\reset@font\rm #1}%
+ %\rm inserted for nfss: ggw
+\let\@makefntext\normal@makefntext
+
+\def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+
+%\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-\@footindent
+% \parshape \@ne \@footindent \@tempdima}\par
+% \noindent \hbox to \z@{\hss$^{\@thefnmark}$\ }#1}
+%
+\renewcommand{\thefootnote}{\mbox{$\fnsymbol{footnote}$}}
+\@addtoreset{footnote}{page}
+
+\def\@fnsymbol#1{\ifcase#1\or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi\relax}
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.9}
+\setcounter{totalnumber}{3}
+\def\textfraction{.1}
+\def\floatpagefraction{.75}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.9}
+\def\dblfloatpagefraction{.75}
+%
+\long\def\@makecaption#1#2{%
+ \setbox\@tempboxa=\hbox{#2}%
+ \vskip \half@line
+ \raggedright\sloppy #1%
+ \ifdim\wd\@tempboxa>0pt%
+ .\enskip #2
+ \else
+ \fi
+ \par
+}
+%
+% TABLE
+%
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{1}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+%
+\def\fstyle@table{\reset@font\footnotesize\rm}
+\def\fjust@table{\centering}
+%
+\def\table{\@float{table}}% \fjust@table\fstyle@table
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\def\fcapjust@table{\centering\sloppy}
+\def\fcapsize@table{\reset@font\footnotesize\sc}
+\def\fcapstyle@table{\reset@font\footnotesize\it}
+%
+% FIGURE
+%
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{2}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig.\ \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\def\fstyle@figure{\reset@font\footnotesize\rm}
+\def\fjust@figure{\centering}
+
+\def\fcapjust@figure{\centering\sloppy}
+\def\fcapsize@figure{\reset@font\footnotesize\sc}
+\def\fcapstyle@figure{\reset@font\footnotesize\rm}
+%
+% stuff for different style float captions
+%
+\newif\ifwide@float
+\wide@floatfalse
+
+\long\def\@caption#1[#2]#3{\addcontentsline{\csname ext@#1\endcsname}{#1}%
+ {\protect\numberline{\csname the#1\endcsname}%
+ {\ignorespaces #2}}\par
+ \begingroup
+ \ifwide@float\@parboxrestore\else\@myparboxrestore\fi
+ \@makecaption{\csname fcapjust@#1\endcsname
+ \csname fcapsize@#1\endcsname
+ \csname fnum@#1\endcsname}%
+ {\csname fcapstyle@#1\endcsname \ignorespaces #3}\par
+ \endgroup
+}
+\def\@xfloat#1[#2]{%
+ \ifhmode \@bsphack\@floatpenalty-\@Mii \else \@floatpenalty-\@Miii\fi
+ \def\@captype{#1}%
+ \ifinner \@parmoderr\@floatpenalty\z@
+ \else \@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf
+ \fi
+ \global\setbox\@currbox\vbox\bgroup
+ \boxmaxdepth\z@
+ \csname fstyle@#1\endcsname
+ \ifwide@float \hsize\textwidth \linewidth\textwidth
+ \@parboxrestore
+ \else \hsize\textwidth \linewidth\textwidth
+ \@parboxrestore
+%\hsize\columnwidth \addtolength{\hsize}{-2pc} \@rightskip 2pc
+% \@myparboxrestore
+ \fi
+ \csname fjust@#1\endcsname
+}
+\def\@myarrayparboxrestore{\let\par\@@par
+ \let\-\@dischyph
+ \let\'\@acci \let\`\@accii \let\=\@acciii
+ \parindent\z@
+ \everypar{}\linewidth\hsize
+ \@totalleftmargin\z@ \leftskip\@leftskip
+ \rightskip\@rightskip
+ \parfillskip\@flushglue \lineskip\normallineskip
+ \baselineskip\normalbaselineskip\sloppy
+}
+\def\@myparboxrestore{\@myarrayparboxrestore\let\\=\@normalcr}
+%
+% stuff for wide floats
+%
+\def\@dblfloat{\wide@floattrue\@float}
+\def\end@dblfloat{\if@twocolumn\egroup
+ \ifnum\@floatpenalty <\z@ \@cons\@dbldeferlist\@currbox\fi
+ \ifnum \@floatpenalty =-\@Mii \@esphack\fi\else\end@float\fi
+ \wide@floatfalse
+}
+%
+% ****************************************
+% * REF and PAGEREF *
+% ****************************************
+%
+\def\ref#1{\@ifundefined{r@#1}{{\reset@font\bf ??}\@warning
+ {Reference `#1' on page \thepage \space
+ undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
+ \@car\@tempa \@nil\null}}%\rm inserted: ggw (and removed: maw)
+
+\def\pageref#1{\@ifundefined{r@#1}{{\reset@font\bf ??}\@warning
+ {Reference `#1' on page \thepage \space
+ undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
+ \@cdr\@tempa\@nil\null}}
+
+
+%
+% ****************************************
+% * CUP specials *
+% ****************************************
+%
+\def\author@tabular{\def\@halignto{}\@authortable}
+\let\endauthor@tabular=\endtabular
+\def\author@tabularcr{{\ifnum0=`}\fi
+ \@xtabularcr[4pt]\reset@font\small\it\ignorespaces}
+\def\author@tabularcrnospace{{\ifnum0=`}\fi
+ \@xtabularcr[-2pt]\reset@font\small\it\ignorespaces}
+\def\@authortable{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\\\author@tabularcr
+ \let\nextaddress\author@tabularcrnospace
+ \@tabarray}
+
+\def\long@rule{\par\noindent\rule{\textwidth}
+{\arrayrulewidth}\par\noindent}
+\def\short@rule{\par\noindent\rule{27pc}
+{\arrayrulewidth}\par\noindent}
+\def\top@eightrule{\par%
+ \rule{27pc}{\arrayrulewidth}\vspace{4pt}\par\noindent}
+\def\bottom@eightrule{\par\noindent%
+ \vspace{-1pt}\rule{27pc}{\arrayrulewidth}\par\noindent}
+
+\@addtoreset{equation}{section}
+\def\theequation{\thesection.\arabic{equation}}
+
+\let\acknowledgment\acknowledgement
+
+\def\acknowledgements{\reset@font\rm
+ \topsep 18pt plus 6pt minus 3pt\trivlist % same as subsection %ajw
+ \item[\hskip \labelsep{\reset@font\sc \hspace{\parindent}Acknowledgements.%
+ \hspace{0.5em}}]}
+\def\endacknowledgements{\endtrivlist}
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\number\day\
+ \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December
+ \fi \ \number\year}
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+\newif\ifCUPmtlplainloaded
+\ifx\CUP@mtlplain@loaded\undefined
+\else
+ \global\CUPmtlplainloadedtrue
+ \input lmssym
+ \fin@ltrue
+\fi
+%
+\ps@headings % `headings' page style
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Switch to \onecolumn and disable \twocolumn.
+\let\onecolumn=\relax
+\def\twocolumn{\typeout{Two column mode not available with LMS style.}}
+%
+\flushbottom
+\frenchspacing
diff --git a/macros/latex209/contrib/lms/lmsguide.tex b/macros/latex209/contrib/lms/lmsguide.tex
new file mode 100644
index 0000000000..2d87048ab4
--- /dev/null
+++ b/macros/latex209/contrib/lms/lmsguide.tex
@@ -0,0 +1,1082 @@
+% lmsguide.tex
+% Copyright (C) 1993,1994,1995 Cambridge University Press
+% v0.5, 4th January 1995
+
+\documentstyle{lms}
+
+%%% Uncomment ONE of the combinations \onetrue, \twotrue... \seventrue,
+%%% depending on the LaTeX configuration on your system. The files in
+%%% parentheses are required to tex the sample pages and guide.
+
+%%% You will need to have a local copy of the files shown in parentheses
+%%% for those documentstyles. If you have any problems at all, remember
+%%% thats your best option is to choose the version which has `noams' as
+%%% part of its title, and if you wish the typesetter to substitute ams
+%%% fonts for your fonts, please indicate this in the text.
+
+%%% oldfss = LaTeX without NFSS
+%%% nfssone = LaTeX with New Font Selection Scheme v1
+%%% nfsstwo = LaTeX with New Font Selection Scheme v2
+
+%%% noams = No AMS fonts, sample pages will substitute some characters
+%%% amsone = AMS v1 fonts
+%%% amstwo = AMS v2 fonts (the recommended option)
+
+%%% Uncomment ONE of the following combinations:
+
+ \onetrue % oldfss/noams
+% \twotrue % oldfss/amsone (mssymb.tex)
+% \threetrue % oldfss/amstwo (amssym.def,amssym.tex)
+% \fourtrue % nfssone/noams
+% \fivetrue % nfssone/amstwo (amsfonts.sty,amssymb.sty)
+% \sixtrue % nfsstwo/noams
+% \seventrue % nfsstwo/amstwo (amsfonts.sty,amssymb.sty)
+
+%%%% DON'T MODIFY THE FOLLOWING CODE; SKIP TO `START HERE' %%%%
+
+\ifCUPmtlplainloaded
+ \ifoldfss
+% \usefraktur
+ \usescript
+ %
+ % set up 9pt Bbb for bibliography
+ \font\ninemsy=mtym10 at 9pt
+ \def\bibliobbb{\textfont\msyfam=\ninemsy}
+ \fi
+%
+\else
+%
+%%% one (oldfss/noams)
+ \ifone
+ \def\frak{\protect\cal}
+ \let\goth=\frak
+ \def\Bbb{\protect\bf}
+ \def\scr{\protect\cal}
+ \fi
+
+%%% two (oldfss/amsone)
+ \iftwo
+ \input mssymb\relax % %%%MR own catcodes
+ \makeatletter
+ %
+ % if the following is already uncommented in your version of
+ % mssymb.tex, you may comment this out to % FINISH HERE to save
+ % a font family
+ %
+ % set up Euler Fraktur/Gothic font (\frak, \goth)
+ \font\teneuf=eufm10
+ \font\seveneuf=eufm7
+ \font\fiveeuf=eufm5
+ \newfam\euffam
+ \textfont\euffam=\teneuf
+ \scriptfont\euffam=\seveneuf
+ \scriptscriptfont\euffam=\fiveeuf
+ \def\frak{\ifmmode\let\next\frak@\else
+ \def\next{\errmessage{Use \string\frak\space only in math mode}}\fi
+ \next}
+ \def\goth{\ifmmode\let\next\frak@\else
+ \def\next{\errmessage{Use \string\goth\space only in math mode}}\fi
+ \next}
+ \def\frak@#1{{\frak@@{#1}}}
+ \def\frak@@#1{\fam\euffam#1}
+ % FINISH HERE
+ %
+ % set up 9pt Bbb for bibliography
+ \font\ninemsb=msym9
+ \def\bibliobbb{\textfont\msyfam=\ninemsb}
+ %
+ \def\scr{\protect\cal}
+ \let\le\leqslant \let\ge\geqslant
+ \let\leq\leqslant \let\geq\geqslant
+ \makeatother
+ \fi
+
+%%% three (oldfss/amstwo)
+ \ifthree
+% \input ../test/oldfss/amssym.def\relax
+% \input ../test/oldfss/amssym.tex\relax %%%MR own catcode
+ \input amssym.def\relax
+ \input amssym.tex\relax %%%MR own catcode
+ %
+ % set up Euler Script font (\scr)
+ \font\scrten=eusm10 \skewchar\scrten='60
+ \font\scrseven=eusm7 \skewchar\scrseven='60
+ \font\scrfive=eusm5 \skewchar\scrfive='60
+ \newfam\scrfam
+ \textfont\scrfam=\scrten
+ \scriptfont\scrfam=\scrseven
+ \scriptscriptfont\scrfam=\scrfive
+ \def\scr{\fam\scrfam\scrten}
+ %
+ % set up 9pt Bbb for bibliography
+ \font\ninemsb=msbm9
+ \def\bibliobbb{\textfont\msbfam=\ninemsb}
+ %
+ \let\le\leqslant \let\ge\geqslant
+ \let\leq\leqslant \let\geq\geqslant
+ \fi
+
+%%% four (nfssone/noams)
+ \iffour
+ \def\frak{\protect\cal}
+ \let\goth=\frak
+ \def\Bbb{\protect\mathbf}
+ \def\scr{\protect\cal}
+ \fi
+
+%%% five (nfssone/amstwo)
+ \iffive
+ \makeatletter
+% \input ../test/nfss1/amsfonts.sty\relax %%%MR assumes \makeatletter
+% \input ../test/nfss1/amssymb.sty\relax
+ \input amsfonts.sty\relax %%%MR assumes \makeatletter
+ \input amssymb.sty\relax
+ %
+ \new@fontshape{eus}{m}{n}{%
+ <5>eusm5<6>eusm6<7>eusm7<8>eusm8<9>eusm9<10>eusm10%
+ <11>eusm10 at 10.95pt<12>eusm10 at 12pt<14>eusm10 at 14.4pt%
+ <17>eusm10 at 17.28pt<20>eusm10 at 20.736pt%
+ <25>eusm10 at 24.8832pt}{}%
+ %
+ \new@fontshape{eus}{b}{n}{%
+ <5>eusb5<6>eusb6<7>eusb7<8>eusb8<9>eusb9<10>eusb10%
+ <11>eusb10 at 10.95pt<12>eusb10 at 12pt<14>eusb10 at 14.4pt%
+ <17>eusb10 at 17.28pt<20>eusb10 at 20.736pt%
+ <25>eusb10 at 24.8832pt}{}%
+ %
+ \extra@def{eus}{\skewchar#1='60}{}
+ %
+ \newmathalphabet{\scr}
+ \addtoversion{normal}{\scr}{eus}{m}{n}
+ \addtoversion{bold}{\scr}{eus}{b}{n}
+ %
+ \let\le\leqslant \let\ge\geqslant
+ \let\leq\leqslant \let\geq\geqslant
+ \makeatother
+ \fi
+
+%%% six (nfsstwo/noams)
+ \ifsix
+ \let\cal\mathcal
+ \def\frak{\protect\mathcal}
+ \let\goth=\frak
+ \def\Bbb{\protect\mathbf}
+ \def\scr{\protect\mathcal}
+ \fi
+
+%%% seven (nfsstwo/amstwo)
+ \ifseven
+ \makeatletter
+% \input ../test/nfss2/amsfonts.sty\relax %%%MR asuumes \makeatletter
+% \input ../test/nfss2/amssymb.sty\relax
+ \input amsfonts.sty\relax %%%MR asuumes \makeatletter
+ \input amssymb.sty\relax
+ %
+ \DeclareMathAlphabet{\scr}{U}{eus}{m}{n}
+ \SetMathAlphabet{\scr}{bold}{U}{eus}{b}{n}
+ %
+ \let\cal\mathcal
+ \let\le\leqslant \let\ge\geqslant
+ \let\leq\leqslant \let\geq\geqslant
+ \makeatother
+ \fi
+%
+\fi % end of CUPmtlplainloaded
+
+
+%%% for guide only
+
+\ifoldfss
+ \newcommand{\mitbf}[1] {\mbox{\boldmath ${#1}$}}
+ \newcommand{\rmn}[1] {{\rm {#1}}}
+ \newcommand{\itl}[1] {{\it {#1}}}
+ \newcommand{\bld}[1] {{\bf {#1}}}
+\fi
+
+\ifnfssone
+ \newmathalphabet{\mathit}
+ \addtoversion{normal}{\mathit}{cmr}{m}{it}
+ \addtoversion{bold}{\mathit}{cmr}{bx}{it}
+ \newmathalphabet{\mathcal}
+ \addtoversion{normal}{\mathcal}{cmsy}{m}{n}
+ \newcommand{\mitbf}[1] {\hbox{\mathversion{bold}${#1}$}}
+ \newcommand{\rmn}[1] {{\mathrm {#1}}}
+ \newcommand{\itl}[1] {{\mathit {#1}}}
+ \newcommand{\bld}[1] {{\mathbf {#1}}}
+\fi
+
+\ifnfsstwo
+ \newcommand{\mitbf}[1] {\hbox{\mathversion{bold}${#1}$}}
+ \newcommand{\rmn}[1] {{\mathrm {#1}}}
+ \newcommand{\itl}[1] {{\mathit {#1}}}
+ \newcommand{\bld}[1] {{\mathbf {#1}}}
+\fi
+
+
+%%% START HERE %%%
+
+\def\eg{{\it e.g.\ }}
+\def\etc{{\it etc}}
+\def\visiblespace{\leavevmode\hbox{\tt\char`\ }}
+\def\LaTeX{L\kern-.36em\raise.3ex\hbox{a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+\def\tick{\raisebox{.5ex}{$\protect\sqrt{}$}}
+
+\extraline{An extra footnoteline is available for funding information if
+required}
+\recdate{21 December 1994}
+\classno{28C15}
+\hyphenation{example examples}
+
+\begin{document}
+
+ \title[\LaTeX\ style file for London Mathematical Society
+ journals]{\LaTeX\ style file for submission to\\
+ the London Mathematical Society journals}
+ \author{Rod Mulvey \and\ Alison Woollatt}
+
+\maketitle
+
+ \begin{abstract}
+ This guide is for authors who are preparing papers for the
+ journals of the London Mathematical Society using the
+ \LaTeX\ document-preparation system and the LMS style file.
+ \end{abstract}
+
+\tableofcontents
+
+\section{Introduction}
+
+In addition to the standard submission of hardcopy from authors, the
+journals of the London Mathematical Society (LMS) now accept machine-readable
+forms of papers in \LaTeX. Initially, only the {\em Bulletin\/} will be
+accepting \LaTeX\ articles, but this is expected to be extended to the {\em
+Journal\/} and {\em Proceedings\/} in due course. The layout design for the
+LMS has been implemented as a \LaTeX\ style file, based on the \verb"article"
+style as discussed in the \LaTeX\ manual \cite{LaTeX}.
+Commands which differ from the standard \LaTeX\ interface, or which are
+provided in addition to the standard interface, are explained in this
+guide (which is {\em not} a substitute for the \LaTeX\ manual itself).
+Authors planning to submit their papers in \LaTeX\ are advised to use
+\verb"lms.sty" as early as possible in the creation of their files. (Note
+that files using Plain \TeX, AMS\TeX\ or other variants cannot be used. Also,
+the style is suitable only for papers, {\em not\/} for obituaries or book
+reviews, although these may be available later.)
+
+\subsection{Introduction to \LaTeX}
+
+\LaTeX\ is constructed as a series of macros on top of the \TeX\
+typesetting program.
+\LaTeX\ adds to \TeX\ a collection of facilities which simplify typesetting
+for authors by allowing them to concentrate on the logical structure of the
+document rather than its visual layout.
+Careful use of the \LaTeX\ mark-up philosophy results in uniform
+layout rather than the {\em ad hoc\/} results of some word-processing systems.
+Authors are advised to let the defaults control font selection etc.,
+rather than tinker themselves.
+
+\LaTeX\ provides a consistent and comprehensive document-preparation
+interface. Amongst other things, \LaTeX\ can automatically number list
+entries, equations, figures, tables and footnotes, as well as sections and
+subsections. Using this numbering system, bibliographic citations, page
+references and cross references to any other numbered entity (e.g. sections,
+equations, figures) are straightforward.
+
+\subsection{The LMS document style}
+
+The use of document styles allows a simple change of style (or style
+option) to transform the appearance of your document.
+The LMS style file preserves the
+standard \LaTeX\ interface such that any document which can be produced
+using the standard \LaTeX\ \verb"article" style can also be produced with
+the LMS style.
+However, the measure (or width of text) is 15pt (5mm) wider than the default
+for 10pt \verb"article", therefore line breaks will change. Authors are urged
+to use \verb"lms.sty" from the beginning of their document preparation; in
+particular, they are advised not to use wider measures as given by
+\verb"a4.sty" etc., because this will involve truncating long lines at a later stage.
+
+\subsection{General style issues}
+
+Use of \LaTeX\ defaults will result in a pleasing uniformity of layout
+and font selection. Authors should resist the temptation to make
+{\em ad hoc\/} changes to these. Also avoid use of direct formatting unless
+really necessary. Papers will be edited as usual, and this process may be
+obstructed by the use of inserted line breaks, etc.
+
+In addition to the standard \LaTeX\ fonts, authors can use the
+AMS {\em msam\/} and {\em msbm\/} fonts (see Subsection~\ref{sec:fonts}
+below). The final makeup will use Times Roman fonts, and if these are
+available to authors (e.g. via PS\LaTeX) they should be employed in order
+to ensure good use of space (they are in general more economical than
+computer modern fonts).
+
+For general style issues, authors are referred to the `Preparation of
+manuscripts' in the {\em Bulletin} of the LMS. Authors who are interested in
+the details of style are referred to \cite{Butcher} and \cite{Chicago}. The
+language used in the journals is British English, and spelling should conform
+to this.
+
+Use should be made of symbolic references (\verb"\ref") in order to
+protect against late changes of order, etc.
+
+\subsection{Submission of \LaTeX\ articles to the LMS}
+
+Authors who intend to submit a \LaTeX\ article to the LMS should obtain a
+copy of the style file \verb"lms.sty". This is available by anonymous FTP from
+\begin{verbatim}
+
+ ftp.cup.cam.ac.uk
+
+\end{verbatim}
+You will find the style file, instructions and sample pages concatenated into a single file \verb"lms.all" in the directory
+\begin{verbatim}
+
+ /pub/texarchive/journals/latex
+
+\end{verbatim}
+If you cannot obtain the LMS style file, use \verb"article" style.
+
+When submitting the final article, ensure that the following are included and clearly labelled.
+\begin{enumerate}
+ \item Hardcopy printout of the article
+ \item The input file (exactly matching hardcopy)
+ \item A copy of all user-defined macros
+ \item Bibliography files, or if you have used B{\sc ib}\TeX, the \verb".bib"
+ and \verb".bbl" files
+ \item Any other files necessary to prepare the article
+ for typesetting
+\end{enumerate}
+The files for the {\em final\/} article should be text-only with no
+system-dependent control codes, on a PC disk. If you are working on a
+Macintosh, please use Apple File Exchange with the following options to
+convert your file(s) to PC format.
+\begin{enumerate}
+\item Replace CR with CR/LF
+\item Special characters: change to closest single character
+\item Tab characters: Neither
+\end{enumerate}
+Submit the above by post to the appropriate member of the Editorial Board as
+described on the inside back cover of each issue of the {\em Bulletin}.
+
+\section{Using the LMS style}
+
+First, copy the file \verb"lms.sty" into an appropriate subdirectory on
+your system.
+The LMS style is implemented as a complete document style, {\em
+not\/} an option.
+In order to use the LMS style, replace \verb"article" by \verb"lms" in the
+\verb"\documentstyle" command at the beginning of your document: that is,
+%
+\begin{verbatim}
+
+ \documentstyle{article}
+
+\end{verbatim}
+%
+is replaced by
+%
+\begin{verbatim}
+
+ \documentstyle{lms}
+
+\end{verbatim}
+%
+In general, the following standard document style options should {\em
+not\/} be used with the LMS style:
+%
+\begin{itemize}
+ \item {\tt 10pt}, {\tt 11pt}, {\tt 12pt} -- unavailable;
+ \item {\tt draft}, {\tt twoside} -- {\tt twoside} is the default;
+ \item {\tt fleqn}, {\tt leqno}, {\tt titlepage}, {\tt twocolumn} --
+ should not be used (\verb"fleqn" is already incorporated into
+ the LMS style).
+\end{itemize}
+%
+However, {\tt proc}, {\tt ifthen}, {\tt bezier} can be used if
+necessary.
+
+At the beginning of the source code for this guide, you will find the
+following code.
+%
+\begin{verbatim}
+
+ %%% oldfss = LaTeX without NFSS
+ %%% nfssone = LaTeX with New Font Selection Scheme v1
+ %%% nfsstwo = LaTeX with New Font Selection Scheme v2
+
+ %%% noams = No AMS fonts, sample pages will substitute some
+ characters
+ %%% amsone = AMS v1 fonts
+ %%% amstwo = AMS v2 fonts (the recommended option)
+
+ %%% Uncomment ONE of the following combinations:
+
+ \onetrue % oldfss/noams
+ % \twotrue % oldfss/amsone (mssymb.tex)
+ % \threetrue % oldfss/amstwo (amssym.def,amssym.tex)
+ % \fourtrue % nfssone/noams
+ % \fivetrue % nfssone/amstwo (amsfonts.sty,amssymb.sty)
+ % \sixtrue % nfsstwo/noams
+ % \seventrue % nfsstwo/amstwo (amsfonts.sty,amssymb.sty)
+
+\end{verbatim}
+
+Before you process your document, you should uncomment one of these options,
+according to your system. The default is \verb"\onetrue". There is
+more about the effects of these options in Subsection~\ref{sec:fonts}.
+
+\section{Additional facilities}
+
+In addition to all the standard \LaTeX\ design elements, the LMS style
+includes the following features.
+%
+\begin{enumerate}
+ \item Commands for typesetting the title page
+ \item Ability to create new environments for examples,
+ exercises, problems, definitions,
+ notations, notes, remarks, conjectures,
+ corollaries, lemmas, propositions, theorems,
+ etc.
+ \item Proof environment
+ \item Noteinproof environment
+ \item Acknowledgements environment
+ \item Environments to produce affiliation addresses
+ \item Control of enumerated lists
+ \item Fonts---NFSS, AMS
+\end{enumerate}
+%
+In general, once you have used the additional \verb"lms.sty"
+facilities in your document, do not process it with a standard \LaTeX\
+style file.
+
+\subsection{Typesetting the title page}
+
+At the beginning of your article, the title should be generated in the
+usual way using the \verb"\maketitle" command. Immediately following the
+title you may include an abstract. For example, the titles for this guide were produced by the following source.
+%
+\begin{verbatim}
+
+ \extraline{An extra footnoteline is available for funding
+ information if required.}
+ \classno{28C15}
+
+ \begin{document}
+
+ \title[\LaTeX\ style file for London Mathematical Society
+ journals]{\LaTeX\ style file for submission to\\
+ the London Mathematical Society journals}
+ \author{Rod Mulvey \and\ Alison Woollatt}
+
+ \maketitle
+
+ \begin{abstract}
+ This guide is for authors who are preparing papers for the
+ journals of the London Mathematical Society using the
+ \LaTeX\ document-preparation system and the LMS style file.
+ \end{abstract}
+
+\end{verbatim}
+
+Note that there is a new command -- \verb"\extraline" -- which gives an
+extra footnote on the title page, and which is typically used for funding
+information. The 1991 {\it Mathematics Subject Classification\/} number
+will be inserted as a footnote. To insert the number, you use another
+new command -- \verb"\classno". The classificaton number on the title
+page of this guide was typeset using: \verb"\classno{28C15}".
+
+In the LMS style, the title of the article and the author's name (or
+authors' names) are used both at the beginning of the article for the main
+title and throughout the article as running headlines at the top of every
+page.
+The title is used on odd-numbered pages (rectos) and the author's name
+appears on even-numbered pages (versos).
+Although the main heading can run to several lines of text, the running
+headline must be a single line.
+Moreover, the main heading can incorporate new-line commands
+(e.g. \verb"\\"), but these are not acceptable in a running headline.
+To enable you to specify an alternative short title, which should be not
+more than 48 characters and spaces, and an alternative short author's name,
+the standard \verb"\title" and \verb"\author" commands have been extended
+to take an optional argument to be used as the running headline.
+
+\subsection{Creating new environments}
+
+You can create your own environments in \LaTeX, and although you may already
+be familiar with \verb"\newtheorem", you will not have seen the other two commands explained below.
+\begin{enumerate}
+ \item \verb"\newtheorem" is used for creating new theorem-like
+ environments, such as theorems, corollaries, lemmas,
+ conjectures and propositions, with the body of the text
+ (automatically) in italic.
+ \item \verb"\newnumbered" is used for creating new numbered environments,
+ such as\break examples, exercises and problems, with the body of
+ the text in roman.
+ \item \verb"\newunnumbered" is used for creating new
+ {\it un\/}numbered environments, such as remarks, notes
+ and definitions, also with the body of the text in roman.
+\end{enumerate}
+
+\subsubsection{\tt \char"5C newtheorem}
+
+You can set up numbered and unnumbered theorem-like environments to
+produce, for example, the following output.
+ \newtheorem{corollary}{Corollary}
+ \begin{corollary}[An optional argument]
+ Let $G$ be the free group on the generators $\langle
+ y_n\rangle^\infty_{n=1}$. There is a finite partition of
+ $G\times G$ such that one cannot find $(a,b)\in G\times G$ and
+ $d\in FP(\langle y_n\rangle ^\infty_{n=1})$ with either
+ $(a,b)\approx (ad,b)\approx (a,bd)$ or $(a,b)\approx (da,b)
+ \approx (a,db)$.
+ \end{corollary}
+ \begin{corollary*}
+ An unnumbered corollary will start like this.
+ \end{corollary*}
+\noindent To do this, create the corollary environment in the preamble
+%
+\begin{verbatim}
+
+ \newtheorem{corollary}{Corollary}
+
+\end{verbatim}
+%
+and use it as follows in the document.
+%
+\begin{verbatim}
+
+ \begin{corollary}[An optional argument]
+ Let $G$ be the free group on the generators $\langle
+ y_n\rangle^\infty_{n=1}$. There is a finite partition of
+ $G\times G$ such that one cannot find $(a,b)\in G\times G$ and
+ $d\in FP(\langle y_n\rangle ^\infty_{n=1})$ with either
+ $(a,b)\approx (ad,b)\approx (a,bd)$ or $(a,b)\approx (da,b)
+ \approx (a,db)$.
+ \end{corollary}
+ \begin{corollary*}
+ An unnumbered corollary will start like this.
+ \end{corollary*}
+
+\end{verbatim}
+
+The \verb"\newtheorem" command has the usual optional arguments (see
+\cite[p.~174]{LaTeX}), which can be used to control the numbering of
+these environments.
+
+\subsubsection{{\tt \char"5C newnumbered}\enskip and\/ {\tt \char"5C newunnumbered}}
+
+Theorem-like environments have the\break body of the theorem in italics. This
+is inappropriate for environments like example, exercise and remark, which
+require the text to be roman. These may be created by the commands
+\verb"\newnumbered" (which gives you a numbered environment) and
+\verb"\newunnumbered" (which gives you an unnumbered environment); both are
+used just like \verb"\newtheorem". You can control the numbering of
+\verb"\newnumbered" environments in exactly the same way as you do for
+theorems, by using optional arguments, as mentioned above.
+ \newnumbered{example}{Example}
+ \newunnumbered{notation}{Notation}
+ \begin{example}
+ Let $H$ be a real infinite dimensional Hilbert space with
+ orthonormal basis $\{e_n\}$. We define a linear isometry
+ $A:H\rightarrow H$ by \ldots\ but $u_n \not\rightarrow u$.
+ \end{example}
+ \begin{example*}
+ You can have an example unnumbered if you use an asterisk in
+ the source code. This gives the same layout as an unnumbered
+ environment (see below).
+ \end{example*}
+ \begin{notation}
+ This is mostly standard.
+ \end{notation}
+\noindent The above is produced by typing in the preamble
+\begin{verbatim}
+
+ \newnumbered{example}{Example}
+ \newunnumbered{notation}{Notation}
+
+\end{verbatim}
+and in the document the following.
+\begin{verbatim}
+
+ \begin{example}
+ Let $H$ be a real infinite dimensional Hilbert space with
+ orthonormal basis $\{e_n\}$. We define a linear isometry
+ $A:H\rightarrow H$ by \ldots\ but $u_n \not\rightarrow u$.
+ \end{example}
+ \begin{example*}
+ You can have an example unnumbered if you use an asterisk in
+ the source code. This gives the same layout as an unnumbered
+ environment (see below).
+ \end{example*}
+ \begin{notation}
+ This is mostly standard.
+ \end{notation}
+
+\end{verbatim}
+
+Note from this example that you can suppress the numbering on a \verb"\newnumbered" environment, and that the result is the same
+as if you had defined a \verb"\newunnumbered" environment.
+
+\subsection{{\tt proof} environment}
+
+An environment exists for proofs, and it can take an optional argument.
+ \begin{proof}[of Theorem~{\rm 27}]
+ We define a linear isometry $A:H\rightarrow H$ by the nonlinear
+ Schr\"{o}dinger equation. It would not be hard to modify the
+ proof to obtain an analogous result for ellipsoids rather than
+ spheres.
+ \end{proof}
+\noindent This is produced by typing the following.
+\begin{verbatim}
+
+ \begin{proof}[of Theorem~{\rm 27}]
+ We define a linear isometry $A:H\rightarrow H$ by the nonlinear
+ Schr\"{o}dinger equation. It would not be hard to modify the
+ proof to obtain an analogous result for ellipsoids rather than
+ spheres.
+ \end{proof}
+\end{verbatim}
+
+
+\subsection{{\tt noteinproof} environment}
+
+The \verb"noteinproof" environment has been set up for material added at
+the proof stage.
+
+ \begin{noteinproof}
+ We define a linear isometry $A:H\rightarrow H$ by the nonlinear
+ Schr\"{o}dinger equation. It would not be hard to modify the
+ proof to obtain an analogous result for ellipsoids rather than
+ spheres.
+ \end{noteinproof}
+\noindent The above was generated by typing the following.
+\begin{verbatim}
+
+ \begin{noteinproof}
+ We define a linear isometry $A:H\rightarrow H$ by the nonlinear
+ Schr\"{o}dinger equation. It would not be hard to modify the
+ proof to obtain an analogous result for ellipsoids rather than
+ spheres.
+ \end{noteinproof}
+\end{verbatim}
+
+\subsection{{\tt acknowledgements} environment}
+
+You may acknowledge your colleagues in the following manner.
+ \begin{acknowledgements}
+ Grateful thanks are due to my colleagues Dr Tony Drew and
+ Mr Bill Colbran.
+ \end{acknowledgements}
+ \noindent The above was produced by typing the following.
+\begin{verbatim}
+
+ \begin{acknowledgements}
+ Grateful thanks are due to my colleagues Dr Tony Drew and
+ Mr Bill Colbran.
+ \end{acknowledgements}
+
+\end{verbatim}
+
+\subsection{Affiliation addresses}
+
+Affiliation(s) appear at the end of an article. The LMS style allows up to
+four affiliations, using \verb"\affiliationone", \verb"\affiliationtwo",
+\verb"\affiliationthree" and \verb"\affiliationfour". The addresses at the
+end of this guide were produced using the following.
+\begin{verbatim}
+
+ \affiliationone{Cambridge University Press\\
+ Printing Division\\ Shaftesbury Road\\ Cambridge CB2 2BS}
+ %
+ \affiliationtwo{School of Mathematical Sciences\\
+ Queen Mary and Westfield College\\ Mile End Road\\ London E1 4NS}
+
+\end{verbatim}
+
+\subsection{Lists}
+
+The LMS style provides three standard list environments:
+\begin{itemize}
+ \item numbered lists, created using the \verb"enumerate" environment;
+ \item bulleted lists, created using the \verb"itemize" environment;
+ \item labelled lists, created using the \verb"description" environment.
+\end{itemize}
+The enumerated list numbers each list item with a small roman numeral in parentheses.
+Alternative styles can be achieved by inserting a redefinition of the
+number labelling command after \verb"\begin{enumerate}".
+For example, a list numbered with arabic numerals inside parentheses can be
+produced by the following.
+%
+\begin{verbatim}
+
+ \begin{enumerate}
+ \renewcommand{\theenumi}{(\arabic{enumi})}
+ \item First item
+\end{verbatim}
+~~~~~~~~~~~~~~~\vdots
+\begin{verbatim}
+ \end{enumerate}
+
+\end{verbatim}
+%
+This produces the following list.
+%
+\begin{enumerate}
+ \renewcommand{\theenumi}{(\arabic{enumi})}
+ \item First item
+ \item second item
+ \item etc.
+\end{enumerate}
+
+\subsection{Fonts}
+\label{sec:fonts}
+
+There are at present two `font selection schemes' in use for \LaTeX;
+these govern the use and interpretation of commands like \verb"\bf",
+\verb"\rm". The {\it old font selection scheme\/} is at present the
+\LaTeX\ default, and is described in \cite{LaTeX}. The {\it new font
+selection scheme} has been introduced in later versions of \LaTeX\ and, of course, in \LaTeX 2$\epsilon$. The LMS style will
+operate without modification using either font selection scheme.
+
+There are also two series of fonts designed by the American Mathematical
+Society ({\em msam} and {\em msbm}), and these can be used if desired.
+The AMS fonts contain slanted versions of the greater than or equal
+to, and less than or equal to, signs; these slanted versions are
+preferred by the LMS and so are substituted whenever \LaTeX\ commands like \verb"\ge" are used.
+Authors without the AMS fonts can thus use the standard \LaTeX\ forms,
+\verb"\ge" or \verb"\geq" and \verb"\le" or \verb"\leq".
+
+Table~\ref{fonts} shows all the combinations of versions of \LaTeX\ and AMS.
+You can see from the option you have chosen exactly which fonts are going
+to work for you, and which fonts you can expect to be substituted.
+
+(If you need to specify an extra font for use on your system, please do so
+with a generic command name defined in your preamble. We can then substitute
+the correct font globally.)
+%
+\begin{table}
+\caption[]{Font substitutions. A \tick\ means you will get the font you
+specified; otherwise, the font will be substituted with the one shown.}
+\label{fonts}
+\tabcolsep=5pt% reduced from 6pt for this table only
+\begin{tabular}{lccccc}
+\hline
+Your \LaTeX\ configuration & \verb"\Bbb" & \verb"\script" & \verb"\cal"
+& \verb"\leqslant" & \verb"\frak"\\
+\hline
+one (oldfss/noams) & \verb"\bf" & \verb"\cal" & \tick & -- & \verb"\cal"\\
+two (oldfss/amsone) & \tick & \verb"\cal" & \tick & \tick & \tick\\
+three (oldfss/amstwo) & \tick & \tick & \tick & \tick & \tick\\
+four (nfssone/noams) & \verb"\mathbf" & \verb"\cal" & \tick & -- & \verb"\cal"\\
+five (nfssone/amstwo) & \tick & \tick & \tick & \tick & \tick\\
+six (nfsstwo/noams) & \verb"\mathbf" & \verb"\mathcal" & \tick & -- & \verb"\mathcal"\\
+seven (nfsstwo/amstwo) & \tick & \tick & \tick & \tick & \tick\\
+\hline
+\end{tabular}
+\end{table}
+
+\section{Some guidelines for using standard facilities}
+
+The following notes may help you achieve the best effects with the LMS
+style file.
+
+\subsection{Sections}
+
+\LaTeX\ provides five levels of section headings, only three of which are
+defined in the LMS style file:
+%
+\begin{itemize}
+ \item \verb"\section"
+ \item \verb"\subsection"
+ \item \verb"\subsubsection"
+\end{itemize}
+
+\subsection{Running headlines}
+
+As described above, the title of the article and the author's name (or
+authors' names) are used as running headlines at the top of every page.
+The \verb"\pagestyle" and \verb"\thispagestyle" commands should {\em not\/}
+be used. Similarly, the commands \verb"\markright" and \verb"\markboth"
+should not be necessary.
+
+\subsection{Illustrations (or figures)}
+
+The LMS style will cope with most positioning of your illustrations, and you
+should not normally use the optional positioning qualifiers on the
+\verb"figure" environment which would override these decisions. A
+figure caption should be below the figure itself, therefore the
+\verb"\caption"
+command should appear after the figure or space left for an illustration.
+For example, Figure~\ref{sample-figure} is produced using the following.
+%
+\begin{verbatim}
+
+ \begin{figure}
+ \centering
+ \vspace{5cm}
+ \caption{An example figure in which space has been
+ left for the artwork}
+ \label{sample-figure}
+ \end{figure}
+
+\end{verbatim}
+%
+ \begin{figure}
+ \centering
+ \vspace{5cm}
+ \caption{An example figure in which space has been
+ left for the artwork}
+ \label{sample-figure}
+ \end{figure}
+
+\subsection{Tables}
+
+The LMS style will cope with most positioning of your tables,
+and you should not normally use the optional positioning qualifiers on the
+\verb"table" environment which would override these decisions.
+Table captions should be at the top, therefore the \verb"\caption" command
+should appear before the body of the table.
+
+The \verb"tabular" environment should be used to produce ruled tables;
+it has been modified for the LMS style in the following ways.
+%
+\begin{enumerate}
+ \item Additional vertical space is inserted on either side of a rule.
+ \item Vertical lines are not produced.
+\end{enumerate}
+%
+Commands to redefine quantities such as \verb"\arraystretch" should be
+omitted.
+For example, Table~\ref{symbols} is produced using the following.
+%
+\begin{verbatim}
+
+ \begin{table}
+ \caption{Components of generating functions}
+ \begin{tabular}{ccc}
+ \hline
+ $k$ & $\alpha_k(x)$ & $l_k(x)$\\
+ \hline
+ 1 & 1 & 1 \\
+ 2 & $x^3$ & $x^3$\\
+ 3 & $2x^5$ & $2x^5$\\
+ 4 & $2x^7$ & $x^6+2x^7$\\
+ 5 & $2x^7+2x^9$ & $2x^7+2x^9$\\
+ 6 & $2x^{11}$ & $4x^8+2x^{11}$\\
+ 7 & $4x^9+2x^{13}$ & $4x^9+2x^{13}$\\
+ 8 & $2x^9+2x^{15}$ & $3x^9+4x^{10}+2x^{15}$\\
+ 9 & $4x^{11}+2x^{17}$ & $4x^{10}+4x^{11}+2x^{17}$\\
+ \hline
+ \end{tabular}
+ \label{symbols}
+ \end{table}
+
+\end{verbatim}
+ \begin{table}
+ \caption{Components of generating functions}
+ \begin{tabular}{ccc}
+ \hline
+ $k$ & $\alpha_k(x)$ & $l_k(x)$\\
+ \hline
+ 1 & 1 & 1 \\
+ 2 & $x^3$ & $x^3$\\
+ 3 & $2x^5$ & $2x^5$\\
+ 4 & $2x^7$ & $x^6+2x^7$\\
+ 5 & $2x^7+2x^9$ & $2x^7+2x^9$\\
+ 6 & $2x^{11}$ & $4x^8+2x^{11}$\\
+ 7 & $4x^9+2x^{13}$ & $4x^9+2x^{13}$\\
+ 8 & $2x^9+2x^{15}$ & $3x^9+4x^{10}+2x^{15}$\\
+ 9 & $4x^{11}+2x^{17}$ & $4x^{10}+4x^{11}+2x^{17}$\\
+ \hline
+ \end{tabular}
+ \label{symbols}
+ \end{table}
+
+\subsection{Displayed mathematics}
+
+The LMS style will centre displayed mathematics. You should use the \LaTeX\
+standard of open and closed square brackets as delimiters for unnumbered
+equations. The equation
+ \[ \sum_{i=1}^p \lambda_i = {\rmn {trace}}({\bld S}) \]
+was typeset in the LMS style with
+\begin{verbatim}
+
+ \[ \sum_{i=1}^p \lambda_i = {\rmn {trace}}({\bld S}) \]
+
+\end{verbatim}
+The same equation may be numbered by the use of
+\verb"\begin{equation}"\ldots\break\verb"\end{equation}".
+Note that \verb"\rmn" and \verb"\bld" will produce roman
+and bold face characters respectively in math mode. They have been
+defined in two ways in the source code of the guide: one for
+authors using the new font selection scheme, and the other for
+authors using the old font selection scheme.
+
+
+
+\subsection{Bibliography}
+
+References to published literature will automatically be inserted into the text; see examples below for style.
+References should be listed in a \verb"thebibliography" environment
+alphabetically by author name(s) and then by year if the same author
+has several papers. The author name(s) should be in the \verb"\bibname"
+environment, using \verb"\and" where necessary. To refer to one of the
+references, for instance \cite{Bargmann}, you just type
+\verb"\cite{Bargmann}" in your source file.
+
+The following listing shows some references prepared in the style of the
+{\em Bulletin}; it produces the references shown at the end of this guide.
+%
+\begin{verbatim}
+
+ \begin{thebibliography}{9}
+ %
+ \bibitem{Bargmann}
+ {\bibname V. Bargmann}, `On a Hilbert space of
+ analytic functions and an associated integral
+ transform', {\em Comm.\ Pure Appl.\ Math.}\ (1961)
+ 187--214.
+ %
+ \bibitem{Berezin}
+ {\bibname F. A. Berezin}, `Covariant and
+ contravariant symbols of operators', {\em Math.\
+ USSR-Izv.}\ 6 (1972) 1117--1151.
+ %
+ \bibitem{BergerFA}
+ {\bibname C. A. Berger \and L. A. Coburn}, `Toeplitz
+ operators and quantum mechanics', {\em J. Funct.\
+ Anal.}\ 68 (1986) 273--299.
+ %
+ \bibitem{BergerTAMS}
+ {\bibname C. A. Berger \and L. A. Coburn}, `Toeplitz
+ operators on the Segal--Bargmann space', {\em Trans.\
+ Amer.\ Math.\ Soc.}\ 301 (1987) 813--829.
+ %
+ \bibitem{Butcher}
+ {\bibname J. Butcher},
+ {\em Copy-editing: the Cambridge handbook\/}
+ (Cambridge University Press, 1981).
+ %
+ \bibitem{Chicago}
+ {\em The Chicago manual of style\/}
+ (University of Chicago Press, 1982).
+ %
+ \bibitem{Guillemin}
+ {\bibname V. Guillemin}, `Toeplitz operators in
+ $n$~dimensions', {\em Integral Equations Operator
+ Theory\/} 7 (1984) 154--205.
+ %
+ \bibitem{Janas}
+ {\bibname J. Janas}, `Toeplitz and Hankel operators
+ on Bargmann spaces', {\em Glasgow Math.\ J.} 30 (1988)
+ 315--323.
+ %
+ \bibitem{LaTeX}
+ {\bibname L. Lamport},
+ {\em \LaTeX: a document preparation system\/}
+ (Addison-Wesley, New York, 1986).
+ \end{thebibliography}
+
+\end{verbatim}
+%
+Formatting for italic etc.\ should be avoided unless you are sure you
+understand the style of references; please concentrate on giving full and
+clear information.
+
+\section{Summary of commands}
+
+Table~\ref{authors} summarizes the design macros which are unique
+to the LMS style.
+
+\begin{table}
+\caption{Summary}
+\label{authors}
+\tabcolsep=3pt% reduced from 6pt for this table only
+\begin{tabular}{ll}
+\hline
+\verb"\title[optional short title]{long title}"
+ & for short title in running heads\\[2pt]
+\verb"\author[optional short author(s)]{long author(s)}"
+ & for short author(s) in running\\
+ & heads\\[2pt]
+\verb"\begin{abstract}...\end{abstract}" & for abstract on title page\\[2pt]
+\verb"\extraline" & for extra footnote for\\
+ & funding information\\[2pt]
+\verb"\classno" & for {\it Mathematics Subject Classification}\\
+ & number on title page\\[2pt]
+\verb"\newnumbered" & to create numbered environments\\
+ & such as examples, exercises, problems\\[2pt]
+\verb"\newunnumbered" & to create unnumbered environments\\
+ & such as remarks, notes, definitions\\[2pt]
+\verb"\begin{proof}...\end{proof}" & proof environment\\[2pt]
+\verb"\begin{noteinproof}...\end{noteinproof}" & for material added at proof
+ stage\\[2pt]
+\verb"\begin{acknowledgements}...\end{acknowledgements}"
+ & to acknowledge your colleagues\\[2pt]
+\verb"\affiliationone" & for the first affiliation\\[2pt]
+\verb"\affiliationtwo" & for the second affiliation\\[2pt]
+\verb"\affiliationthree" & for the third affiliation\\[2pt]
+\verb"\affiliationfour" & for the fourth affiliation\\[2pt]
+\hline
+\end{tabular}
+\end{table}
+
+\begin{thebibliography}{9}
+ %
+ \bibitem{Bargmann}
+ {\bibname V. Bargmann}, `On a Hilbert space of
+ analytic functions and an associated integral
+ transform', {\em Comm.\ Pure Appl.\ Math.}\ (1961)
+ 187--214.
+ %
+ \bibitem{Berezin}
+ {\bibname F. A. Berezin}, `Covariant and
+ contravariant symbols of operators', {\em Math.\
+ USSR-Izv.}\ 6 (1972) 1117--1151.
+ %
+ \bibitem{BergerFA}
+ {\bibname C. A. Berger \and L. A. Coburn}, `Toeplitz
+ operators and quantum mechanics', {\em J. Funct.\
+ Anal.}\ 68 (1986) 273--299.
+ %
+ \bibitem{BergerTAMS}
+ {\bibname C. A. Berger \and L. A. Coburn}, `Toeplitz
+ operators on the Segal--Bargmann space', {\em Trans.\
+ Amer.\ Math.\ Soc.}\ 301 (1987) 813--829.
+ %
+ \bibitem{Butcher}
+ {\bibname J. Butcher},
+ {\em Copy-editing: the Cambridge handbook\/}
+ (Cambridge University Press, 1981).
+ %
+ \bibitem{Chicago}
+ {\em The Chicago manual of style\/}
+ (University of Chicago Press, 1982).
+ %
+ \bibitem{Guillemin}
+ {\bibname V. Guillemin}, `Toeplitz operators in
+ $n$~dimensions', {\em Integral Equations Operator
+ Theory\/} 7 (1984) 154--205.
+ %
+ \bibitem{Janas}
+ {\bibname J. Janas}, `Toeplitz and Hankel operators
+ on Bargmann spaces', {\em Glasgow Math.\ J.} 30 (1988)
+ 315--323.
+ %
+ \bibitem{LaTeX}
+ {\bibname L. Lamport},
+ {\em \LaTeX: a document preparation system\/}
+ (Addison-Wesley, New York, 1986).
+ \end{thebibliography}
+
+%% Note that there is no paragraph spacing between two affiliations
+%% side by side
+
+ \affiliationone{Cambridge University Press\\
+ Printing Division\\ Shaftesbury Road\\ Cambridge CB2 2BS}
+ %
+ \affiliationtwo{School of Mathematical Sciences\\
+ Queen Mary and Westfield College\\ Mile End Road\\ London E1 4NS}
+
+\end{document}
diff --git a/macros/latex209/contrib/lms/lmssampl.tex b/macros/latex209/contrib/lms/lmssampl.tex
new file mode 100644
index 0000000000..f946b5d26f
--- /dev/null
+++ b/macros/latex209/contrib/lms/lmssampl.tex
@@ -0,0 +1,630 @@
+% lmssampl.tex
+% Copyright (C) 1993,1994,1995 Cambridge University Press
+% v0.3, 4th January 1995
+
+\documentstyle{lms}
+
+%%% Uncomment ONE of the combinations \onetrue, \twotrue... \seventrue,
+%%% depending on the LaTeX configuration on your system. The files in
+%%% parentheses are required to tex the sample pages and guide.
+
+%%% You will need to have a local copy of the files shown in parentheses
+%%% for those documentstyles. If you have any problems at all, remember
+%%% that your best option is to choose the version which has `noams' as
+%%% part of its title, and if you wish the typesetter to substitute ams
+%%% fonts for your fonts, please indicate this in the text.
+
+%%% oldfss = LaTeX without NFSS
+%%% nfssone = LaTeX with New Font Selection Scheme v1
+%%% nfsstwo = LaTeX with New Font Selection Scheme v2
+
+%%% noams = No AMS fonts, sample pages will substitute some characters
+%%% amsone = AMS v1 fonts
+%%% amstwo = AMS v2 fonts (the recommended option)
+
+%%% Uncomment ONE of the following combinations:
+
+ \onetrue % oldfss/noams
+% \twotrue % oldfss/amsone (mssymb.tex)
+% \threetrue % oldfss/amstwo (amssym.def,amssym.tex)
+% \fourtrue % nfssone/noams
+% \fivetrue % nfssone/amstwo (amsfonts.sty,amssymb.sty)
+% \sixtrue % nfsstwo/noams
+% \seventrue % nfsstwo/amstwo (amsfonts.sty,amssymb.sty)
+
+%%%% DON'T MODIFY THE FOLLOWING CODE; SKIP TO `START HERE' %%%%
+
+\ifCUPmtlplainloaded
+ \ifoldfss
+% \usefraktur
+ \usescript
+ %
+ % set up 9pt Bbb for bibliography
+ \font\ninemsy=mtym10 at 9pt
+ \def\bibliobbb{\textfont\msyfam=\ninemsy}
+ \fi
+%
+\else
+%
+%%% one (oldfss/noams)
+ \ifone
+ \def\frak{\protect\cal}
+ \let\goth=\frak
+ \def\Bbb{\protect\bf}
+ \def\scr{\protect\cal}
+ \fi
+
+%%% two (oldfss/amsone)
+ \iftwo
+ \input mssymb\relax % %%%MR own catcodes
+ \makeatletter
+ %
+ % if the following is already uncommented in your version of
+ % mssymb.tex, you may comment this out to % FINISH HERE to save
+ % a font family
+ %
+ % set up Euler Fraktur/Gothic font (\frak, \goth)
+ \font\teneuf=eufm10
+ \font\seveneuf=eufm7
+ \font\fiveeuf=eufm5
+ \newfam\euffam
+ \textfont\euffam=\teneuf
+ \scriptfont\euffam=\seveneuf
+ \scriptscriptfont\euffam=\fiveeuf
+ \def\frak{\ifmmode\let\next\frak@\else
+ \def\next{\errmessage{Use \string\frak\space only in math mode}}\fi
+ \next}
+ \def\goth{\ifmmode\let\next\frak@\else
+ \def\next{\errmessage{Use \string\goth\space only in math mode}}\fi
+ \next}
+ \def\frak@#1{{\frak@@{#1}}}
+ \def\frak@@#1{\fam\euffam#1}
+ % FINISH HERE
+ %
+ % set up 9pt Bbb for bibliography
+ \font\ninemsb=msym9
+ \def\bibliobbb{\textfont\msyfam=\ninemsb}
+ %
+ \def\scr{\protect\cal}
+ \let\le\leqslant \let\ge\geqslant
+ \let\leq\leqslant \let\geq\geqslant
+ \makeatother
+ \fi
+
+%%% three (oldfss/amstwo)
+ \ifthree
+% \input test/oldfss/amssym.def\relax
+% \input test/oldfss/amssym.tex\relax %%%MR own catcode
+ \input amssym.def\relax
+ \input amssym.tex\relax %%%MR own catcode
+ %
+ % set up Euler Script font (\scr)
+ \font\scrten=eusm10 \skewchar\scrten='60
+ \font\scrseven=eusm7 \skewchar\scrseven='60
+ \font\scrfive=eusm5 \skewchar\scrfive='60
+ \newfam\scrfam
+ \textfont\scrfam=\scrten
+ \scriptfont\scrfam=\scrseven
+ \scriptscriptfont\scrfam=\scrfive
+ \def\scr{\fam\scrfam\scrten}
+ %
+ % set up 9pt Bbb for bibliography
+ \font\ninemsb=msbm9
+ \def\bibliobbb{\textfont\msbfam=\ninemsb}
+ %
+ \let\le\leqslant \let\ge\geqslant
+ \let\leq\leqslant \let\geq\geqslant
+ \fi
+
+%%% four (nfssone/noams)
+ \iffour
+ \def\frak{\protect\cal}
+ \let\goth=\frak
+ \def\Bbb{\protect\mathbf}
+ \def\scr{\protect\cal}
+ \fi
+
+%%% five (nfssone/amstwo)
+ \iffive
+ \makeatletter
+% \input test/nfss1/amsfonts.sty\relax %%%MR assumes \makeatletter
+% \input test/nfss1/amssymb.sty\relax
+ \input amsfonts.sty\relax %%%MR assumes \makeatletter
+ \input amssymb.sty\relax
+ %
+ \new@fontshape{eus}{m}{n}{%
+ <5>eusm5<6>eusm6<7>eusm7<8>eusm8<9>eusm9<10>eusm10%
+ <11>eusm10 at 10.95pt<12>eusm10 at 12pt<14>eusm10 at 14.4pt%
+ <17>eusm10 at 17.28pt<20>eusm10 at 20.736pt%
+ <25>eusm10 at 24.8832pt}{}%
+ %
+ \new@fontshape{eus}{b}{n}{%
+ <5>eusb5<6>eusb6<7>eusb7<8>eusb8<9>eusb9<10>eusb10%
+ <11>eusb10 at 10.95pt<12>eusb10 at 12pt<14>eusb10 at 14.4pt%
+ <17>eusb10 at 17.28pt<20>eusb10 at 20.736pt%
+ <25>eusb10 at 24.8832pt}{}%
+ %
+ \extra@def{eus}{\skewchar#1='60}{}
+ %
+ \newmathalphabet{\scr}
+ \addtoversion{normal}{\scr}{eus}{m}{n}
+ \addtoversion{bold}{\scr}{eus}{b}{n}
+ %
+ \let\le\leqslant \let\ge\geqslant
+ \let\leq\leqslant \let\geq\geqslant
+ \makeatother
+ \fi
+
+%%% six (nfsstwo/noams)
+ \ifsix
+ \let\cal\mathcal
+ \def\frak{\protect\mathcal}
+ \let\goth=\frak
+ \def\Bbb{\protect\mathbf}
+ \def\scr{\protect\mathcal}
+ \fi
+
+%%% seven (nfsstwo/amstwo)
+ \ifseven
+ \makeatletter
+% \input test/nfss2/amsfonts.sty\relax %%%MR asuumes \makeatletter
+% \input test/nfss2/amssymb.sty\relax
+ \input amsfonts.sty\relax %%%MR asuumes \makeatletter
+ \input amssymb.sty\relax
+ %
+ \DeclareMathAlphabet{\scr}{U}{eus}{m}{n}
+ \SetMathAlphabet{\scr}{bold}{U}{eus}{b}{n}
+ %
+ \let\cal\mathcal
+ \let\le\leqslant \let\ge\geqslant
+ \let\leq\leqslant \let\geq\geqslant
+ \makeatother
+ \fi
+%
+\fi % end of CUPmtlplainloaded
+
+
+%%% for guide only
+
+\ifoldfss
+ \newcommand{\mitbf}[1] {\mbox{\boldmath ${#1}$}}
+ \newcommand{\rmn}[1] {{\rm {#1}}}
+ \newcommand{\itl}[1] {{\it {#1}}}
+ \newcommand{\bld}[1] {{\bf {#1}}}
+\fi
+
+\ifnfssone
+ \newmathalphabet{\mathit}
+ \addtoversion{normal}{\mathit}{cmr}{m}{it}
+ \addtoversion{bold}{\mathit}{cmr}{bx}{it}
+ \newmathalphabet{\mathcal}
+ \addtoversion{normal}{\mathcal}{cmsy}{m}{n}
+ \newcommand{\mitbf}[1] {\hbox{\mathversion{bold}${#1}$}}
+ \newcommand{\rmn}[1] {{\mathrm {#1}}}
+ \newcommand{\itl}[1] {{\mathit {#1}}}
+ \newcommand{\bld}[1] {{\mathbf {#1}}}
+\fi
+
+\ifnfsstwo
+ \newcommand{\mitbf}[1] {\hbox{\mathversion{bold}${#1}$}}
+ \newcommand{\rmn}[1] {{\mathrm {#1}}}
+ \newcommand{\itl}[1] {{\mathit {#1}}}
+ \newcommand{\bld}[1] {{\mathbf {#1}}}
+\fi
+
+%%% START HERE %%%
+
+\extraline{First author supported in part by a grant
+ from the National Science Foundation}
+
+\newtheorem{theorem}{Theorem}
+\newtheorem{lemma}{Lemma}
+\newtheorem{corollary}{Corollary}
+\newunnumbered{remark}{Remark}
+\newunnumbered{remarks}{Remarks}
+\newunnumbered{notation}{Notation}
+\newunnumbered{definition}{Definition}
+
+\classno{35B60}
+\begin{document}
+
+\title[Dirichlet's Problem When The Data Is An Entire Function]
+ {Dirichlet's Problem When The Data\\ Is An Entire Function}
+
+\author{Dmitry Khavinson \and\ Harold S. Shapiro}
+
+\maketitle
+
+\section{Introduction}
+\label{sec-Introduction}
+
+This paper may be regarded as a sequel (and correction) to \cite{Incorrect
+version}, and we use similar notations. Thus $x=(x_1,\ldots,x_n)$ and
+$y=(y_1,\dots,y_n)$ denote points of~${\Bbb R}^n$ and $z=x+iy$ a point
+of~${\Bbb C}^n$. We use standard multi-index notations; thus for
+$\alpha=(\alpha_1,\dots,\alpha_n)$ with $\alpha_j$ non-negative integers,
+$z^\alpha=z_1^{\alpha_1}\!\dots z_n^{\alpha_n}$,
+$|\alpha|=\alpha_1+\dots+\alpha_n$, $\alpha!=\alpha_1!\dots\alpha_n!$ and
+$|z|=(|z_1|^2+\dots|z_n|^2)^{1/2}$.
+
+$D$ denotes $(D_1,\dots,D_n)$ with $D_j=\partial/\partial z_j$, and
+$\partial$~denotes $(\partial_1,\ldots,\partial_n)$ with
+$\partial_j=\partial/\partial x_j$ (or $\partial/\partial y_j$,
+etc., as the case may be).
+
+${\scr P}_{m,n}$ denotes the set of polynomials on $n$~letters with complex
+coefficients, of degree at most~$m$, and ${\scr H}_{m,n}$ the set of
+homogeneous polynomials of degree~$m$ in ${\scr P}_{m,n}$ augmented by~$0$
+(so that ${\scr H}_{m,n}$ is a vector space over $\Bbb C$). The number of
+variables~($n$) will usually be suppressed in the notation, and we shall then
+write ${\scr P}_m{\scr H}_m$.
+
+For $f\in{\scr P}_m$, $f^*$~is the polynomial obtained from~$f$ by
+conjugating its coefficients.
+
+$E_n$ denotes the set of entire functions on~${\Bbb C}^n$, and $X_n$ the entire
+functions of exponential type. $E_n$~and~$X_n$ may be considered as topological
+vector spaces, so as to be duals of one another, in a standard way (compare
+\cite{Incorrect version}). $F_n$~is the Hilbert space of entire functions~$f$
+on~${\Bbb C}^n$, $f=\sum c_\alpha z^\alpha$ normed by
+\begin{equation}
+\|f\|^2 = \sum \alpha! \, |c_\alpha|^2.
+\label{eq:Fischer norm}
+\end{equation}
+
+{\em Whenever\/ $\|\,{\cdot}\,\|$ appears in this paper, it designates this
+norm.} We denote by~$\langle\,\, , \,\rangle$ the corresponding inner product
+in~$F_n$. Finally, for $z$~and~$w$ in~${\Bbb C}^n$, $z\cdot w$~denotes
+$\sum_1^n z_j w_j$.
+
+The main objective of this paper is to prove Theorem~\ref{theorem-Ellipsoid}
+below. The special case $a_1=\dots=a_n=1$ (or, rather, a formulation equivalent
+to this) is stated as Theorem~2 in \cite{Incorrect version}. Unfortunately, the
+proof offered there is incorrect (the error, on p.~522, lies in applying
+Lemma~1 to the series of polynomials $\sum h_m$: here $h_m$~is in~${\scr
+P}_m$, but not homogeneous, so Lemma~1 is not applicable). Even more
+unfortunately, the generalization of Theorem~2 of \cite{Incorrect version}
+presented as the Corollary on p.~525 is also based on an invalid deduction. The
+error here is the assertion that the analog of Theorem~3 for the space~$X_n$
+rather than $E_n$ can be proved by a similar argument---it cannot. Thus far we
+do not know whether this Corollary is true as stated, or not.
+
+The (we hope) correct proof of Theorem~\ref{theorem-Ellipsoid} below (Theorem~2
+of \cite{Incorrect version}) is based on elementary potential theory, not using
+techniques of \cite{Incorrect version} based on the Fischer
+norm~(\ref{eq:Fischer norm}). Using the latter technique, we have not succeeded
+in proving this theorem in full generality, but only within classes of entire
+functions of limited growth (Theorem~\ref{theorem-Ellipsoid} below). But, in
+return, we obtain an analogous result not only for the Laplace operator, but
+for a fairly large class of differential operators. Thus, the Corollary on
+p.~525 of \cite{Incorrect version} is shown to be true for each homogeneous
+polynomial~$P$ of a certain `amenable' class (see Section~\ref{sec-Ellipsoid}
+below), provided the given~$f$ is restricted to an appropriate subclass of the
+entire functions. This is done in Theorem~\ref{theorem-Ellipsoid} of the
+present paper.
+
+\section{Dirichlet's problem for the ellipsoid}
+\label{sec-Ellipsoid}
+
+\begin{theorem}
+\label{theorem-Ellipsoid}
+Let\/ $\Omega=\{x\in{\Bbb R}^n : \sum_{j=1}^n a_j^{-1}x_j^2 < 1\}$, where
+$a_j>0$. If $f$~is entire on\/ ${\Bbb C}^n$, the solution of the Dirichlet
+problem
+\begin{equation}
+\vcenter{\openup\jot\ialign
+ {\strut\hfil$\displaystyle#$&$\displaystyle{}#$\hfil&\quad#\hfil\cr
+\Delta u &= 0 &in\/ $\Omega$,\cr
+ u &= f &on $\partial\Omega$,\cr}}
+\label{eq:Dirichlet}
+\end{equation}
+extends to a harmonic function on\/~${\Bbb R}^n$. {\rm (}Hence it extends to
+an entire function on\/~${\Bbb C}^n$ satisfying\/ $\sum_1^n D_j^2 u = 0$, and
+equal to~$f$ on the variety\/ $\{z\in{\Bbb C}^n : \sum_1^n a_j^{-2}z_j^2 =
+1\}$.{\rm $\,$)}
+\end{theorem}
+
+\begin{proof}
+We can write the Taylor expansion of~$f$ as $f=\sum_0^\infty f_m$, where
+$f_m\in{\scr H}_m$. The Dirichlet problem analogous to~(\ref{eq:Dirichlet})
+with $f_m$ in place of~$f$ has a unique solution $u_m\in{\scr P}_m$. (This
+is well known, and is recalled for the reader's convenience in
+Section~\ref{sec-Conclusion} below.) To complete the proof, we shall show that
+$\sum_0^\infty u_m$ converges uniformly on compact subsets of ${\Bbb R}^n$.
+
+Let $\Gamma$ denote $\partial\Omega$. Let
+\begin{equation}
+u_m = u_{m,0}+u_{m,1}+\dots+u_{m,m}
+\label{eq:u definition}
+\end{equation}
+denote the decomposition of $u_m$ into homogeneous polynomials; thus $u_{m,j}$
+is in~${\scr H}_j$ and harmonic.
+
+We shall now prove that, for every $R>0$, there is a constant $A(R)$ such that
+\begin{equation}
+\sum_{m=0}^\infty \sum_{k=0}^m |u_{m,k}(x)| \le A(R),
+\quad \mbox{for $|x| \le R$},
+\label{eq:A(R) definition}
+\end{equation}
+which implies the desired convergence of~$\sum_0^\infty u_m$.
+\end{proof}
+
+\begin{lemma}
+\label{lemma-max limit}
+Let $F_m=\max\{|f_m(x)| : x\in\Gamma\}$. Then $F_m^{1/m}\to 0$.
+\end{lemma}
+
+\begin{proof}
+The proof uses only that $\Gamma$~is a compact subset of~${\Bbb C}^n$,
+contained in, say, the ball $B$:~$\{|z|\le\rho\}$.
+
+We have for $t\in{\Bbb C}$,
+\[
+f(tz) = \sum_0^\infty t^m f_m(z).
+\]
+Fixing $z\in B$, $f_m(z)$~are the Taylor coefficients of the entire function
+$t\mapsto f(tz)$ on~$\Bbb C$. By the Cauchy--Hadamard estimate,
+\[
+|f_m(z)| \le \frac{\max \{|f(tz)| : t \le T\}}{T^m}
+\]
+holds for all $T>0$. Hence,
+\[
+\max_{x \in B} |f_m(z)|\le\frac{\max\{|f(\zeta)|:|\zeta|\le\rho T\}}{T^m}
+\]
+Taking $m$th~roots and letting $m\to\infty$ gives
+\[
+\limsup_{m\to\infty}\bigl(\max_{x\in B} |f_m(z)|\bigr)^{1/m} \le T^{-1}
+\]
+for arbitrary~$T$, implying the assertion.
+\end{proof}
+
+\begin{remark}
+The referee has remarked that it would be of interest to obtain a sharp form of
+Lemma~\ref{lemma-max limit}, and has kindly supplied a proof that the
+exponent~$n/2$ in~(\ref{eq:A(R) definition}) can be improved to $(n-2)/2$.
+\end{remark}
+
+\begin{corollary*}
+Let $v$, $v_k$ and $\Sigma$ be as in Lemma\/~{\rm \ref{lemma-max limit}}, and let
+$D$~be a bounded open set in\/~${\Bbb R}^n$ containing the ball\/
+$\{|x|\le\rho\}$. Then, for $x\in\Sigma$,
+\begin{equation}
+|v_k(x)| \le {\scr C}_n k^{n/2} \rho^{-k} \cdot
+\max_{x\in\partial D} |v(x)|, \quad k \ge 1.
+\label{eq:bound on v}
+\end{equation}
+Also, $|v_0(x)| = |v_0(0)| \le \max\{|v(x)| : x\in\partial D\}$.
+\end{corollary*}
+
+\begin{proof}
+The statement concerning~$v_0$ is obvious, so suppose $k\ge1$, and without
+loss of generality, assume $\max\{|v(x)| : x\in\partial D\}$ is~$1$.
+
+Then $|v(x)| \le 1$ for $|x|=\rho$, by the maximum principle, so $|v(\rho x)|
+\le 1$ for $x\in\Sigma$. By the lemma, we have for $x\in\Sigma$,
+\[
+|v_k(\rho x)| \le {\scr C}_n k^{n/2},
+\]
+which gives (\ref{eq:bound on v}), since $v_k \in {\scr H}_k$.
+\end{proof}
+
+\begin{proof}[of Theorem, completed]
+We have, for $x\in\Gamma$,
+\[
+|f_m(x)| \le \varepsilon_m^m,
+\]
+where $\varepsilon_m$ is a sequence which tends to~$0$. Hence, for
+$x\in\Gamma$, $|u_m(x)|\le\varepsilon_m^m$. By the Corollary, the $u_{m,k}$
+in~(\ref{eq:u definition}) satisfy
+\[
+|u_{m,k}(x)| \le {\scr C}_n k^{n/2} \rho^{-k} \varepsilon_m^m |x|^k,
+ \quad k \ge 1,
+\]
+and $|u_{m,0}| \le {\scr C}_n \varepsilon_m^m$, for all $x \in {\Bbb R}^n$,
+where $\rho=\min_i a_i$. In particular, for $|x| \le R$,
+\[
+|u_{m,k}(x)| \le {\scr C}'_n \cdot A^k\varepsilon_m^m R^k
+\]
+holds for every choice of
+$A>\rho^{-1}$. Thus (\ref{eq:A(R) definition})~follows since $\sum_{m=0}^\infty
+\varepsilon_m^m \sum_{k=0}^m (AR)^k$ is clearly convergent (for assuming, as we
+may, $AR>1$, the inner sum is $\le C(AR)^{m+1}$, etc.). This completes the
+proof of Theorem~\ref{theorem-Ellipsoid}.
+\end{proof}
+
+\begin{remarks}
+Variants of the theorem can easily be obtained from the above estimates, for
+example, {\em if $f$~is of exponential type, so is~$u$}; indeed, $f$~is of
+exponential type if and only~if $\max\{|f_m(z)| : z\in K\}$ does not exceed
+$(A/m)^m$ (where $A=A(K)$~is some constant), holds for some (hence every)
+compact~$K$ having $0$~as an interior point. The proof now follows in the
+same way as before.
+\end{remarks}
+
+\begin{definition}
+Let $\Lambda$~denote the class of positive sequences $\{\lambda_m\}_0^\infty$
+with $\lambda_m \searrow 0$. To each sequence $\lambda=\{\lambda_m\}$
+in~$\Lambda$ we define $B_\lambda$ to be the set of all entire functions
+$f = \sum_0^\infty f_m$ on~${\Bbb C}^n$ (where, as usual, $f_m \in {\scr
+H}_m$) such that
+\begin{equation}
+\|f_m\| = o(\lambda_m^m)m^{m/2}, \quad m\to\infty,
+\end{equation}
+and
+\begin{equation}
+\|f\|_\lambda = \sup \lambda_m^{-m}m^{-m/2}\|f_m\|.
+\label{eq:lambda definition}
+\end{equation}
+It is easy to check that $B_\lambda$ is a Banach space with the norm
+$\|f\|_\lambda$. Moreover, it is separable, indeed $\sum_{m=0}^k f_m$
+converges to~$f$ as $k\to\infty$, for all $f \in B_\lambda$.
+\end{definition}
+
+\begin{lemma}
+If $g \in {\scr H}_m$, then
+\[
+\sum_1^n \|D_j g\|^2 = m\|g\|^2.
+\]
+\end{lemma}
+
+\begin{proof}
+$mg = \sum_1^n z_j D_j g$ by Euler's formula, so
+\[
+m\|g\|^2 = \sum_1^n \langle z_jD_jg,g \rangle = \sum_1^n \|D_jg\|^2.
+\]
+\end{proof}
+
+\begin{notation}
+Throughout this section, $Q$ denotes $\sum_1^n z_j^2$.
+\end{notation}
+
+\begin{remark}
+In terms of the Dirichlet problem, Theorem~\ref{theorem-Ellipsoid} says the
+following. {\em For~$f\in B_\lambda$, where $\lambda$~satisfies (\ref{eq:lambda
+definition})} (and hence, see the following remark, {\em for every entire~$f$
+of order~$<4$}), {\em the problem~(\ref{eq:lambda definition}), where\/
+$\Omega$~is the unit sphere, has a solution~$u$ that is (the restriction
+to\/~$\Omega$ of) an entire function in~$B_\lambda$.} It would not be hard to
+modify the proof to obtain an analogous result for ellipsoids rather than
+spheres (and $B_\lambda$ replaced by some related class of entire functions),
+by modifying Fischer's inner product so that $\sum_1^n D_j^2$ and
+multiplication by $\sum_1^n a_j^{-2}z_j^2$ become adjoint operators. However,
+we have been unable to obtain Theorem~\ref{theorem-Ellipsoid} (even for
+spheres) by such methods. On the other hand (and this is the point of the
+following section) these methods allow a generalization from $\sum_1^n D_j^2$
+to a large class of differential operators~$P(D)$ ($P$~being a homogeneous
+polynomial).
+\end{remark}
+
+\begin{remark}
+To give some feeling for what (\ref{eq:lambda definition})~means, let us show:
+{\em every entire function of order less than four is in~$B_\lambda$, for some
+$\lambda\in\Lambda$ satisfying\/} (\ref{eq:lambda definition}). Indeed, suppose
+$f$~is entire and
+\begin{equation}
+|f(z)| \le Ae^{|z|^\rho}, \quad z\in{\Bbb C}^n,
+\end{equation}
+where $A$ and $\rho$ are positive constants and $\rho<4$.
+\end{remark}
+
+\section{Concluding remarks}
+\label{sec-Conclusion}
+
+\subsection{}
+
+The basic question underlying this paper is that of finding global continuation
+of the solution to Dirichlet's problem when such continuation is known both for
+the equation of~$\partial\Omega$ and for the `data function'~$f$. Even when
+extreme regularity is assumed, for example, $\partial\Omega$~algebraic and
+$f$~entire, few results are known (even in two dimensions) about the maximal
+domain to which the solution extends harmonically, let alone the nature of the
+singularities that may arise. This is in contrast to the situation for Cauchy's
+problem, where, for example, complete results are known in two dimensions,
+based on the Schwarz function (compare \cite{Ref9,Ref12}). Moreover, G.~Johnson
+\cite{Ref8} has obtained complete results for the Cauchy problem when the
+initial data is an entire function restricted to a quadric surface (this for a
+class of differential operators including the Laplacian). So far, there are no
+results of this precision available for the Dirichlet problem.
+
+We have already spoken of the question of whether ellipsoids are characterized
+by Theorem~\ref{theorem-Ellipsoid}. In this connection, recall that when
+$\Omega$~is an ellipsoid, the solution of Dirichlet's problem with data
+in~${\scr P}_m$ also lies in~${\scr P}_m$ (this is a classical result
+from the study of ellipsoidal harmonics, and we used it in proving
+Theorem~\ref{theorem-Ellipsoid}). This has a kind of converse, which one
+readily sees as follows.
+
+\subsection{}
+
+Concerning the material in Sections
+\ref{sec-Introduction}~and~\ref{sec-Ellipsoid}, some questions remain.
+Especially, it seems of interest to know when the set of solutions
+of~$P^*(D)(P-1)f=0$, $f\in B_\lambda$, not merely is finite-dimensional (for
+which we gave sufficient conditions, in terms of $P$~and~$\lambda$) but
+consists of $0$~alone. Perhaps the uniqueness assumption in
+Theorem~\ref{theorem-Ellipsoid} could be omitted---we know of no
+counterexample.
+
+\begin{acknowledgements}
+This work was done while the first author was visiting Stockholm in the spring
+of~1991. The first author is indebted to the Royal Institute of~Technology for
+support and for providing a congenial research environment.
+\end{acknowledgements}
+
+\begin{thebibliography}{99}
+
+\bibitem{Ref1}
+{\bibname V. Bargmann}, `On a Hilbert space of analytic functions and an
+associated integral transform', {\it Comm.\ Pure Appl.\ Math.}\ (1961)
+187--214.
+%
+\bibitem{Ref2}
+{\bibname F. A. Berezin}, `Covariant and contravariant symbols of operators',
+{\it Math.\ USSR-Izv.}\ 6 (1972) 1117--1151.
+%
+\bibitem{Ref3}
+{\bibname C. A. Berger \and L. A. Coburn}, `Toeplitz operators and quantum
+mechanics', {\it J. Funct.\ Anal.}\ 68 (1986) 273--299.
+%
+\bibitem{Ref4}
+{\bibname C. A. Berger \and L. A. Coburn}, `Toeplitz operators on the
+Segal--Bargmann space', {\it Trans.\ Amer.\ Math.\ Soc.}\ 301 (1987)
+813--829.
+%
+\bibitem{Ref5}
+{\bibname V. Guillemin}, `Toeplitz operators in $n$~dimensions', {\it
+Integral Equations Operator Theory\/} 7 (1984) 154--205.
+%
+\bibitem{Ref6}
+{\bibname J. Janas}, `Toeplitz and Hankel operators on Bargmann spaces',
+{\it Glasgow Math.\ J.} 30 (1988) 315--323.
+%
+\bibitem{Ref7}
+{\bibname J. Janas}, `Unbounded Toeplitz operators in the Bargmann--Segal
+space', {\it Studia Math.}, to appear.
+%
+\bibitem{Ref8}
+{\bibname G. Johnson}, `The Cauchy problem in ${\Bbb C}^n$ for
+second-order PDE with data on a quadric surface', in preparation.
+%
+\bibitem{Ref9}
+{\bibname D. Khavinson \and H. S. Shapiro}, {\it The Schwarz potential in\/
+${\Bbb R}^n$ and Cauchy's problem for the Laplace equation},
+Research Report TRITA-MAT-1989-36 (Royal Institute of Technology, 1989).
+%
+\bibitem{Ref10}
+{\bibname D. J. Newman \and H. S. Shapiro}, `A Hilbert space of entire
+functions related to the operational calculus', mimeographed, Ann Arbor, 1964.
+%
+\bibitem{Ref11}
+{\bibname D. J. Newman \and H. S. Shapiro}, {\it Fischer spaces of entire
+functions}, Proc.\ Sympos.\ Pure Math II (Amer.\ Math.\ Soc., Providence, RI, 1968) 360--369.
+%
+\bibitem{Ref12}
+{\bibname H. S. Shapiro}, {\it The Schwarz function and its generalization to
+higher dimensions\/} (Wiley, 1991).
+%
+\bibitem{Incorrect version}
+{\bibname H. S. Shapiro}, `An algebraic theorem of E.~Fischer, and the
+holomorphic Goursat problem', {\it Bull.\ London Math.\ Soc.}\ 21
+(1989) 513--535.
+%
+\bibitem{Ref14}
+{\bibname H. S. Shapiro}, `Analytic continuation of the solution to
+Dirichlet's problem', in preparation.
+%
+\bibitem{Ref15}
+{\bibname B. Yu.\ Sternin \and V. E. Shatalov}, `Continuation of solutions
+of elliptic equations and localization of singularities', preprint, 1991.
+\end{thebibliography}
+
+%% Note that there is no paragraph spacing between two affiliations
+%% on one line
+
+\affiliationone{Department of Mathematics\\
+University of Arkansas\\ Fayetteville, AR 72701\\ USA}
+%
+\affiliationtwo{Mathematiska Institutionen\\
+Kungl.\ Tekniska H\"ogskolan\\ S-100 44 Stockholm\\ Sweden}
+
+\end{document}
diff --git a/macros/latex209/contrib/lms/readme.txt b/macros/latex209/contrib/lms/readme.txt
new file mode 100644
index 0000000000..36f1f03bb1
--- /dev/null
+++ b/macros/latex209/contrib/lms/readme.txt
@@ -0,0 +1,26 @@
+% readme.txt for LMS
+% Copyright (C) 1994,1995 Cambridge University Press
+% v0.3, 4th January 1995
+%
+% This software may only be used in the preparation of journal
+% articles or books or parts of books to be published by Cambridge
+% University Press. Any other use constitutes an infringement of
+% copyright.
+
+% If you run into problems or bugs with the software, please contact
+% Ben Garling at D.J.H.Garling@pmms.cam.ac.uk
+
+% The files for LMS are in the following directory:
+
+% LMS:
+% README.TXT this file
+% LMS.STY the style file
+% LMSGUIDE.TEX authors' instructions
+% LMSSAMPL.TEX sample pages
+%
+% If you have obtained this package by FTP you should have one large
+% file in which the above files are concatenated. Use a text editor,
+% or word-processor to split these files at the text `CUT HERE'.
+%
+% Typeset LMSGUIDE.TEX and the sample pages LMSSAMPL.TEX with LMS.STY
+% for instructions and examples.
diff --git a/macros/latex209/contrib/loggates/lgdoc.pdf b/macros/latex209/contrib/loggates/lgdoc.pdf
new file mode 100644
index 0000000000..8d3b9d2022
--- /dev/null
+++ b/macros/latex209/contrib/loggates/lgdoc.pdf
Binary files differ
diff --git a/macros/latex209/contrib/loggates/lgdoc.tex b/macros/latex209/contrib/loggates/lgdoc.tex
new file mode 100644
index 0000000000..14aff48e98
--- /dev/null
+++ b/macros/latex209/contrib/loggates/lgdoc.tex
@@ -0,0 +1,119 @@
+% Documentation for the loggates font.
+% By Nico Verwer (nico@cs.ruu.nl), April 8, 1992
+% After you have created the font (e.g. loggates.300pk and
+% loggates.tfm), make sure that TeX and your dvi-driver can find
+% these files.
+
+\documentstyle[loggates]{article}
+
+% This file uses XY-pic, but you may do without.
+% If you don't have XY-pic, delete the following line:
+\input{xypic}
+
+\ifx\xypicloaded\undefined% Test if XY-pic is used.
+ \def\XY{\leavevmode\hbox{X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}}}%
+\else\objectmargin{0pt}\fi
+\newcommand{\XYpicOnly}[1]{\ifx\xypicloaded\undefined%
+ \begin{quote}
+ \em Something which uses \XY -pic
+ should be here.
+ \end{quote}%
+ \else #1 \fi}
+
+\setlength{\fboxsep}{0pt}
+
+\begin{document}
+
+The \verb"loggates" font contains symbols for drawing digital logic
+circuits.
+It includes AND, OR, NAND, NOR, XOR, and NXOR (comparator) gates,
+inverters and buffers, and special characters to make input lines.
+Eventually, I'd like to use this font in a package for drawing circuit
+diagrams, based on the \XY -pic package by Kristoffer~H.~Rose.
+\footnote{\XY-pic can be obtained by FTP from \verb"diku.dk".}
+The package as it stands now is nice, but not really impressive, but
+that will hopefully improve.
+
+The font for drawing digital logic circuits was originally conceived by Rick
+Simpson, and published in UKTeX 1988, issue 30.
+\footnote{Milstd can be obtained by FTP from \verb"kth.se".}
+It was called milstd then (the font follows MIL-STD 806).
+The milstd font encouraged me to try to extend it; some gates (XOR,
+NXOR) were missing, and there were problems with connecting input lines
+(cf.\ the input line extenders below).
+I also made some changes to the metafont code, which make it easier to
+modify (imho), and made better bounding boxes.
+The result is \verb"loggates.mf".
+
+The file \verb"loggates.sty" is a \LaTeX\ style file which facilitates
+using the font.
+It defines commands for all of the gates, in all four directions (right,
+down, left, up).
+These names of these commands consist of the name of the gate,
+followed by a letter for the direction
+(\verb"r", \verb"d", \verb"l", \verb"u").
+For instance, \verb"\ANDr" and \verb"\XORu" give:
+\begin{quote}
+\ANDr \ \ \ \XORu
+\end{quote}
+
+The gates are set in a very tight bounding box:
+\begin{quote}
+\fbox{\INVl} \ \ \ \fbox{\NXORd}
+\end{quote}
+The reference point is in the lower left corner.
+This facilitates the use of \XY-pic, which makes a line disappear when
+it enters the bounding box.
+Note that \XY-pic centers boxes vertically, so in a diagram the
+reference point seems to be in the middle-left:
+\XYpicOnly{
+$$\diagram
+{} \rline|>{\bullet} & \text{\fbox{\NANDr}} \rline &
+\enddiagram$$
+}
+
+In circuit diagrams, gates have inputs. Inputs for AND-like gates are
+easy: just draw a line to the gate symbol.
+The input side of an OR-like gate is not straight, so the input line
+should extend into the bounding box.
+The \verb"loggates" font has characters for these `input line
+extenders', which go from the bounding box just up to the front of the
+gate.
+There are input line extenders for gates with 2, 3, 4, and 5 inputs.
+These extenders are added by appendding a single digit (2, 3, 4, or 5) to
+the gate command.
+Thus, \verb"\ORr3", \verb"\NXORd4", and \verb"\ANDl5" give
+\begin{quote}
+\ORr3 \ \ \ \NXORd4 \ \ \ \ANDl5
+\end{quote}
+Of course, AND gates don't need these extenders, but I added the
+optional digit for compatibility.
+
+The font can already be used with \XY-pic, but I'd like to do more
+things automatically, like the placement of connections.
+Here is a (nonsense) example of how to use \verb"loggates" with
+\XY-pic:
+\XYpicOnly{
+$$\diagram
+\rrline<\INuskip> & \rline<\INlskip> & \text{\NANDr2} \rrline & \bullet
+ \xline '[1,0]+<0pt,1em> '[1,-2]+<0pt,-1em>
+ '[2,-2]+<0pt,\INmskip> &
+\\
+ & & & &
+\\
+\rrline<\INlskip> \rrline<\INuskip> & \rline<\INmskip> &
+ \text{\NORr3} \rrline & \bullet
+ \xline '[-1,0]+<0pt,-1em> '[-1,-2]+<0pt,1em>
+ '[-2,-2]+<0pt,\INlskip> &
+\enddiagram$$
+}
+If the lines in this diagram don't connect perfectly, this is probably
+caused by an imperfection in your dvi-driver.
+
+I make no claims whatsoever about the usefulness of loggates.
+Consider this as an alpha-test version; I hope to release improved
+versions `real soon'.
+If you have ideas of how to use \XY-pic for drawing diagrams,
+or suggestions for features and improvements,
+please mail to \verb"nico@cs.ruu.nl".
+\end{document}
diff --git a/macros/latex209/contrib/loggates/loggates.mf b/macros/latex209/contrib/loggates/loggates.mf
new file mode 100644
index 0000000000..73d5083de8
--- /dev/null
+++ b/macros/latex209/contrib/loggates/loggates.mf
@@ -0,0 +1,777 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Loggates.mf --- special characters for drawing digital
+% electronic circuits with logical gates.
+%
+% Version history:
+% - "milstd" font by Rick Simpson, font for logical gates
+% as in MIL-STD 806.
+% (published in UKTeX 1988, issue 30 (23 Sept. 1988).)
+% - Extended version, 30 March 1992, by Nico Verwer,
+% now called loggates.mf. Added XOR, NXOR and OR-input
+% lines, supported in loggates.sty.
+%
+% To create the "loggates" font, use the command:
+% makefont loggates
+% or:
+% mf '\mode=localfont; mag=magstepX ; input' loggates.mf
+% for X = 0, 0.5, 1, 2, 3, 4, 5.
+%
+% To use the characters in a PLAIN TeX document:
+% \font\loggates=loggates % define the font
+% . . .
+% {\loggates\char0} % typeset the character
+%
+% To use the characters in a LaTeX document:
+% \newfont{\loggates}{loggates} % define the font
+% . . .
+% {\loggates\char0} % typeset the character
+%
+% The file loggates.sty contains definitions that make this
+% font easy to use.
+%
+
+mode_setup;
+font_identifier "LOGGATES";
+font_size 10pt#;
+gatew = 1.2pt;
+linew = 0.4pt;
+
+picture pic;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Slanting line at 45-degree angle for marking
+% busses in logic diagrams.
+
+slwd#:=7pt#;
+define_pixels(slwd);
+
+beginchar(0,slwd#,slwd#,0); "Slanted line for buss widths";
+
+x1 = 0;
+y1 = 0;
+
+x2 = slwd;
+y2 = slwd;
+
+pickup pencircle scaled gatew;
+draw z1--z2;
+
+labels (1,2);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% AND gate, facing to the right
+%
+
+gateunit# := 6pt#;
+
+gatea# := 2 * gateunit#;
+gateb# := 4 * gateunit#;
+gatec# := 2.5 * gateunit#;
+gated# := 2 * gateunit#;
+
+define_pixels(gatea,gateb,gatec,gated);
+
+w_and# := gatec#+gated#;
+h_and# := gateb#;
+define_pixels(w_and,h_and);
+
+beginchar(1,w_and#,h_and#,0); "AND gate, right";
+
+x1 = x2 = 0;
+x3 = x5 = gatec;
+x4 = gatec + gated;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = gatea;
+
+pickup pencircle scaled gatew;
+draw z1--z2--z3{right}..z4..{left}z5--z1;
+
+pic := currentpicture;
+
+labels (range 1 thru 5);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% AND gate, facing down
+%
+
+beginchar(2,h_and#,w_and#,0); "AND gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_and);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% AND gate, facing to the left
+%
+
+beginchar(3,w_and#,h_and#,0); "AND gate, right";
+
+currentpicture := pic rotated 180 shifted(w_and,h_and);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% AND gate, facing up
+%
+
+beginchar(4,h_and#,w_and#,0); "AND gate, up";
+
+currentpicture := pic rotated 90 shifted(h_and,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NAND gate, facing to the right
+%
+
+gatee# := gateunit#;
+
+define_pixels(gatee);
+
+w_nand# := gatec#+gated#+gatee#;
+h_nand# := gateb#;
+define_pixels(w_nand,h_nand);
+
+beginchar(5,w_nand#,h_nand#,0); "NAND gate, right";
+
+x1 = x2 = 0;
+x3 = x5 = gatec;
+x4 = gatec + gated;
+x6 = x4 + gatee/2;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = gatea;
+y6 = y4;
+
+pickup pencircle scaled gatew;
+draw z1--z2--z3{right}..z4..{left}z5--z1;
+draw fullcircle scaled gatee shifted(z6);
+
+pic := currentpicture;
+
+labels (range 1 thru 6);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NAND gate, facing down
+%
+
+beginchar(6,h_nand#,w_nand#,0); "NAND gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_nand);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NAND gate, facing to the left
+%
+
+beginchar(7,w_nand#,h_nand#,0); "NAND gate, left";
+
+currentpicture := pic rotated 180 shifted(w_nand,h_nand);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NAND gate, facing up
+%
+
+beginchar(8,h_nand#,w_nand#,0); "NAND gate, up";
+
+currentpicture := pic rotated 90 shifted(h_nand,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OR gate, facing to the right
+%
+
+gatef# := .75 * gateunit#;
+gateg# := 1.5 * gateunit#;
+gateh# := 3 * gateunit#;
+
+define_pixels(gatef,gateg,gateh);
+
+w_or# := gateg#+gateh#;
+h_or# := gateb#;
+define_pixels(w_or,h_or);
+
+beginchar(9,w_or#,h_or#,0); "OR gate, right";
+
+x1 = x2 = 0;
+x3 = x5 = gateg;
+x4 = gateg + gateh;
+x6 = gatef;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = y6 = gatea;
+
+pickup pencircle scaled gatew;
+draw z1..z6..z2;
+draw z2--z3;
+draw z3{right}..{(1,-2)}z4;
+draw z4{-1,-2}..z5{left};
+draw z5--z1;
+
+pic := currentpicture;
+
+labels (range 1 thru 6);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OR gate, facing down
+%
+
+beginchar(10,h_or#,w_or#,0); "OR gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_or);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OR gate, facing to the left
+%
+
+beginchar(11,w_or#,h_or#,0); "OR gate, left";
+
+currentpicture := pic rotated 180 shifted(w_or,h_or);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% OR gate, facing up
+%
+
+beginchar(12,h_or#,w_or#,0); "OR gate, up";
+
+currentpicture := pic rotated 90 shifted(h_or,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NOR gate, facing to the right
+%
+
+w_nor# := gateg#+gateh#+gatee#;
+h_nor# := gateb#;
+define_pixels(w_nor,h_nor);
+
+beginchar(13,w_nor#,h_nor#,0); "NOR gate, right";
+
+x1 = x2 = 0;
+x3 = x5 = gateg;
+x4 = gateg + gateh;
+x6 = gatef;
+x7 = x4 + gatee/2;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = y6 = gatea;
+y7 = y4;
+
+pickup pencircle scaled gatew;
+draw z1..z6..z2;
+draw z2--z3;
+draw z3{right}..{(1,-2)}z4;
+draw z4{-1,-2}..z5{left};
+draw z5--z1;
+draw fullcircle scaled gatee shifted (z7);
+
+pic := currentpicture;
+
+labels (range 1 thru 7);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NOR gate, facing down
+%
+
+beginchar(14,h_nor#,w_nor#,0); "NOR gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_nor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NOR gate, facing to the left
+%
+
+beginchar(15,w_nor#,h_nor#,0); "NOR gate, left";
+
+currentpicture := pic rotated 180 shifted(w_nor,h_nor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NOR gate, facing up
+%
+
+beginchar(16,h_nor#,w_nor#,0); "NOR gate, up";
+
+currentpicture := pic rotated 90 shifted(h_nor,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Buffer, facing to the right
+%
+
+gatei# := 3 * gateunit#;
+gatej# := .866 * gatei#;
+gatek# := 1.5 * gateunit#;
+
+define_pixels(gatei,gatej,gatek);
+
+w_buf# := gatej#;
+h_buf# := gatei#;
+define_pixels(w_buf,h_buf);
+
+beginchar(17,w_buf#,h_buf#,0); "Buffer, right";
+
+x1 = x2 = 0;
+x3 = gatej;
+
+y1 = 0;
+y2 = gatei;
+y3 = gatek;
+
+pickup pencircle scaled gatew;
+draw z1--z2--z3--z1;
+
+pic := currentpicture;
+
+labels (range 1 thru 3);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Buffer, facing down
+%
+
+beginchar(18,h_buf#,w_buf#,0); "Buffer, down";
+
+currentpicture := pic rotated 270 shifted (0,w_buf);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Buffer, facing to the left
+%
+
+beginchar(19,w_buf#,h_buf#,0); "Buffer, left";
+
+currentpicture := pic rotated 180 shifted(w_buf,h_buf);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Buffer, facing up
+%
+
+beginchar(20,h_buf#,w_buf#,0); "Buffer, up";
+
+currentpicture := pic rotated 90 shifted(h_buf,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Inverter, facing to the right
+%
+
+w_inv# := gatej#+gatee#;
+h_inv# := gatei#;
+define_pixels(w_inv,h_inv);
+
+beginchar(21,w_inv#,h_inv#,0); "Inverter, right";
+
+x1 = x2 = 0;
+x3 = gatej;
+x4 = x3 + gatee/2;
+
+y1 = 0;
+y2 = gatei;
+y3 = y4 = gatek;
+
+
+pickup pencircle scaled gatew;
+draw z1--z2--z3--z1;
+draw fullcircle scaled gatee shifted (z4);
+
+pic := currentpicture;
+
+labels (range 1 thru 4);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Inverter, facing down
+%
+
+beginchar(22,h_inv#,w_inv#,0); "Inverter, down";
+
+currentpicture := pic rotated 270 shifted (0,w_inv);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Inverter, facing to the left
+%
+
+beginchar(23,w_inv#,h_inv#,0); "Inverter, left";
+
+currentpicture := pic rotated 180 shifted(w_inv,h_inv);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Inverter, facing up
+%
+
+beginchar(24,h_inv#,w_inv#,0); "Inverter, up";
+
+currentpicture := pic rotated 90 shifted(h_inv,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% XOR gate, facing to the right
+%
+
+w_xor# := gatef#+gateg#+gateh#;
+h_xor# := gateb#;
+define_pixels(w_xor,h_xor);
+
+beginchar(25,w_xor#,h_xor#,0); "XOR gate, right";
+
+x1 = x2 = 0 + gatef;
+x3 = x5 = gateg + gatef;
+x4 = gateg + gateh + gatef;
+x6 = gatef + gatef;
+x7 = x8 = 0;
+x9 = 0 + gatef;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = y6 = gatea;
+y7 = 0;
+y8 = gateb;
+y9 = gatea;
+
+pickup pencircle scaled gatew;
+draw z1..z6..z2;
+draw z2--z3;
+draw z3{right}..{(1,-2)}z4;
+draw z4{-1,-2}..z5{left};
+draw z5--z1;
+draw z8..z9..z7;
+
+pic := currentpicture;
+
+labels (range 1 thru 9);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% XOR gate, facing down
+%
+
+beginchar(26,h_xor#,w_xor#,0); "XOR gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_xor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% XOR gate, facing to the left
+%
+
+beginchar(27,w_xor#,h_xor#,0); "XOR gate, left";
+
+currentpicture := pic rotated 180 shifted(w_xor,h_xor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% XOR gate, facing up
+%
+
+beginchar(28,h_xor#,w_xor#,0); "XOR gate, up";
+
+currentpicture := pic rotated 90 shifted(h_xor,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NXOR gate (a.k.a. comparator), facing to the right
+%
+
+w_nxor# := gatef#+gateg#+gateh#+gatee#;
+h_nxor# := gateb#;
+define_pixels(w_nxor,h_nxor);
+
+beginchar(29,w_nxor#,h_nxor#,0); "NXOR gate, right";
+
+x1 = x2 = 0 + gatef;
+x3 = x5 = gateg + gatef;
+x4 = gateg + gateh + gatef;
+x6 = gatef + gatef;
+x7 = x8 = 0;
+x9 = 0 + gatef;
+x10 = x4 + gatee/2;
+
+y1 = y5 = 0;
+y2 = y3 = gateb;
+y4 = y6 = gatea;
+y7 = 0;
+y8 = gateb;
+y9 = gatea;
+y10 = y4;
+
+pickup pencircle scaled gatew;
+draw z1..z6..z2;
+draw z2--z3;
+draw z3{right}..{(1,-2)}z4;
+draw z4{-1,-2}..z5{left};
+draw z5--z1;
+draw z8..z9..z7;
+draw fullcircle scaled gatee shifted (z10);
+
+pic := currentpicture;
+
+labels (range 1 thru 10);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NXOR gate, facing down
+%
+
+beginchar(30,h_nxor#,w_nxor#,0); "NXOR gate, down";
+
+currentpicture := pic rotated 270 shifted (0,w_nxor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NXOR gate, facing to the left
+%
+
+beginchar(31,w_nxor#,h_nxor#,0); "NXOR gate, left";
+
+currentpicture := pic rotated 180 shifted(w_nxor,h_nxor);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NXOR gate, facing up
+%
+
+beginchar(32,h_nxor#,w_nxor#,0); "NXOR gate, up";
+
+currentpicture := pic rotated 90 shifted(h_nxor,0);
+
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% lines to connect inputs of OR-like gates
+% N.B.: right/down facing inputs come before the gate,
+% left/up facing inputs after the gate!
+% The left/down lines have to be shifted by TeX, since
+% this shift cannot be determined in advance for down-
+% facing lines.
+% Only the right-facing lines have a height, which should
+% be used to determine the exact place where connections
+% should enter the gate.
+%
+
+linea# := 0.2 * gateb#;
+lineb# := 0.25 * (gateb# - (2 * linea#));
+linec# := 0.3333 * (gateb# - (2 * linea#));
+
+lineea# := 0.5 * gatef#;
+lineeb# := 0.75 * gatef#;
+lineec# := 0.87 * gatef#;
+lineed# := 0.95 * gatef#;
+
+define_pixels(linea,lineb,linec,lineea,lineeb,lineec,lineed);
+
+beginchar(33,0,gateb#-linea#,0); "upper input facing right";
+x1 = 0;
+x2 = lineea;
+y1 = y2 = gateb - linea;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(40,0,0,0); "upper input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(47,0,0,0); "upper input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(54,0,0,0); "upper input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(34,0,linea#,0); "lower input facing right";
+x1 = 0;
+x2 = lineea;
+y1 = y2 = linea;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(41,0,0,0); "lower input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(48,0,0,0); "lower input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(55,0,0,0); "lower input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(35,0,linea#+(2*lineb#),0); "middle input facing right";
+x1 = 0;
+x2 = lineed;
+y1 = y2 = linea + (2 * lineb);
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(42,0,0,0); "middle input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(49,0,0,0); "middle input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(56,0,0,0); "middle input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(36,0,gateb#-linea#-lineb#,0); "upper-middle input facing right";
+x1 = 0;
+x2 = lineeb;
+y1 = y2 = gateb - linea - lineb;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(43,0,0,0); "upper-middle input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(50,0,0,0); "upper-middle input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(57,0,0,0); "upper-middle input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(37,0,linea#+lineb#,0); "lower-middle input facing right";
+x1 = 0;
+x2 = lineeb;
+y1 = y2 = linea + lineb;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(44,0,0,0); "lower-middle input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(51,0,0,0); "lower-middle input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(58,0,0,0); "lower-middle input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(38,0,gateb#-linea#-linec#,0); "next-to-upper input facing right";
+x1 = 0;
+x2 = lineec;
+y1 = y2 = gateb - linea - linec;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(45,0,0,0); "next-to-upper input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(52,0,0,0); "next-to-upper input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(59,0,0,0); "next-to-upper input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+beginchar(39,0,linea#+linec#,0); "next-to-lower input facing right";
+x1 = 0;
+x2 = lineec;
+y1 = y2 = linea + linec;
+pickup pencircle scaled linew;
+draw z1--z2;
+pic := currentpicture;
+labels (range 1 thru 2);
+endchar;
+beginchar(46,0,0,0); "next-to-lower input facing down";
+currentpicture := pic rotated 270;
+endchar;
+beginchar(53,0,0,0); "next-to-lower input facing left";
+currentpicture := pic rotated 180;
+endchar;
+beginchar(60,0,0,0); "next-to-lower input facing up";
+currentpicture := pic rotated 90;
+endchar;
+
+end;
diff --git a/macros/latex209/contrib/loggates/loggates.readme b/macros/latex209/contrib/loggates/loggates.readme
new file mode 100644
index 0000000000..57d2e7df93
--- /dev/null
+++ b/macros/latex209/contrib/loggates/loggates.readme
@@ -0,0 +1,27 @@
+Loggates is a package for drawing digital electronic circuits with
+logical gates in TeX. It uses a special font to do this, which is
+derived from the "milstd" font by Rick Simpson.
+
+The package consists of the following files:
+
+* readme --- this file
+* loggates.mf --- metafont source for the loggates font
+* loggates.sty --- LaTeX style file for using this font
+* lgdoc.tex --- documentation in LaTeX
+* makefont --- UNIX shell script for generating the font
+
+A nice package which can be used with the logical gate symbol font is
+XY-pic by Kristoffer H. Rose. The file lgdoc.tex shows an example of how
+to do this. The XY-pic package can be obtained via FTP from:
+
+* diku.dk (129.142.96.1) [pub/TeX/misc/xypic*]
+* archive.cs.ruu.nl (131.211.80.5) [TEX/DIAGRAM/XYpic/xypic*]
+
+This is the first version of loggates. Among future improvements will be
+a better interface with the XY-pic package, which should make drawing
+circuit diagrams easier and similar to drawing commutative diagrams.
+Mail questions, remarks, suggestions for improvement to:
+
+Nico Verwer | nico@cs.ruu.nl
+Dept. of Computer Science, University of Utrecht | phone: +31 30 533921
+p.o. box 80.089, 3508 TB Utrecht, The Netherlands | fax: +31 30 513791
diff --git a/macros/latex209/contrib/loggates/loggates.sty b/macros/latex209/contrib/loggates/loggates.sty
new file mode 100644
index 0000000000..7c5299182b
--- /dev/null
+++ b/macros/latex209/contrib/loggates/loggates.sty
@@ -0,0 +1,139 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Nico Verwer",
+%%% version = "1.1",
+%%% date = "8 April 1992",
+%%% filename = "loggates.sty",
+%%% address = "Dept. of Computer Science
+%%% Rijksuniversiteit te Utrecht
+%%% P.O. box 80.089
+%%% 3508 TB Utrecht
+%%% the Netherlands",
+%%% telephone = "+31 30 533921",
+%%% FAX = "+31 30 513791",
+%%% email = "nico@cs.ruu.nl (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "TeX, LaTeX, logical gates symbols",
+%%% supported = "yes",
+%%% docstring = "This file accompanies the file loggates.mf
+%%% which contains Metafont definitions of
+%%% symbols for drawing digital circuit diagrams.
+%%% It defines macros to draw all possible
+%%% gates in all directions.
+%%% If you use this file with plain TeX, you may
+%%% want to call it loggates.tex. Since it uses @
+%%% as a character, it must be a style file in
+%%% LaTeX.
+%%% The next version of this file will include
+%%% an interface with the XY-pic package for
+%%% drawing diagrams.",
+%%% }
+%%% ====================================================================
+%
+\font\loggates=loggates
+%
+\def\BusWidth{{\loggates\char0}} % '/' for bus width notation
+%
+% Defintions for gates. All the gates that may have more than one
+% input (AND, NAND, OR, NOR, XOR, NXOR) may be followed by a single
+% digit from 2 to 5, to indicate the number of inputs.
+% On the OR-like gates, this will draw short input lines; for the
+% AND-like gates it has no effect.
+%
+\def\ANDr{\gdef\@gate{\char1}\@NIN} % AND gate facing right
+\def\ANDd{\gdef\@gate{\char2}\@NIN} % down
+\def\ANDl{\gdef\@gate{\char3}\@NIN} % left
+\def\ANDu{\gdef\@gate{\char4}\@NIN} % up
+\def\NANDr{\gdef\@gate{\char5}\@NIN} % NAND gate facing right
+\def\NANDd{\gdef\@gate{\char6}\@NIN} % etcetera...
+\def\NANDl{\gdef\@gate{\char7}\@NIN}
+\def\NANDu{\gdef\@gate{\char8}\@NIN}
+\def\ORr{\gdef\@gate{\char9}\@INr} % OR gate
+\def\ORd{\gdef\@gate{\char10}\@INd}
+\def\ORl{\gdef\@gate{\char11}\@INl}
+\def\ORu{\gdef\@gate{\char12}\@INu}
+\def\NORr{\gdef\@gate{\char13}\@INr} % NOR gate
+\def\NORd{\gdef\@gate{\char14}\@INd}
+\def\NORl{\gdef\@gate{\char15}\@INl}
+\def\NORu{\gdef\@gate{\char16}\@INu}
+\def\BUFr{{\loggates\char17}} % Buffer
+\def\BUFd{{\loggates\char18}}
+\def\BUFl{{\loggates\char19}}
+\def\BUFu{{\loggates\char20}}
+\def\INVr{{\loggates\char21}} % Inverter
+\def\INVd{{\loggates\char22}}
+\def\INVl{{\loggates\char23}}
+\def\INVu{{\loggates\char24}}
+\def\XORr{\gdef\@gate{\char25}\@INr} % XOR gate
+\def\XORd{\gdef\@gate{\char26}\@INd}
+\def\XORl{\gdef\@gate{\char27}\@INl}
+\def\XORu{\gdef\@gate{\char28}\@INu}
+\def\NXORr{\gdef\@gate{\char29}\@INr} % NXOR gate, a.k.a. comparator
+\def\NXORd{\gdef\@gate{\char30}\@INd}
+\def\NXORl{\gdef\@gate{\char31}\@INl}
+\def\NXORu{\gdef\@gate{\char32}\@INu}
+%
+% In order to connect input lines we define some skips.
+%
+\newskip\INmskip\setbox0=\hbox{{\loggates\char35}}\INmskip\ht0%
+\def\deflgskip#1#2{\setbox0=\hbox{{\loggates\char#2}}%
+ \global\newskip#1\global#1\ht0%
+ \global\advance #1 by-\INmskip}
+\deflgskip\INuskip{33}
+\deflgskip\INlskip{34}
+\deflgskip\INumskip{36}
+\deflgskip\INlmskip{37}
+\deflgskip\INmuskip{38}
+\deflgskip\INmlskip{39}
+\INmskip 0pt
+%
+% The following definitions are internal to loggates, and should not
+% normally be used.
+%
+\def\@gobble#1{} %Not strictly necessary in LaTeX...
+\def\@NIN{\futurelet\next\@@NIN}
+\def\@@NIN{\let\@next\@gobble%
+ {\loggates\@gate}%
+ \ifx\next2\else\ifx\next3\else\ifx\next4\else\ifx\next5%
+ \else\let\@next\relax\fi\fi\fi\fi\@next}
+\def\@INr{\futurelet\next\@@INr}
+\def\@@INr{\let\@next\@gobble%
+ \ifx\next2{\loggates\char33\char34\@gate}%
+ \else\ifx\next3{\loggates\char33\char34\char35\@gate}%
+ \else\ifx\next4{\loggates\char33\char34\char38\char39\@gate}%
+ \else\ifx\next5{\loggates\char33\char34\char35\char36\char37\@gate}%
+ \else{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
+\def\@INd{\futurelet\next\@@INd}
+\def\@@INd{\let\@next\@gobble%
+ \def\@up##1{\setbox0=\hbox{\@gate}\raise\ht0\hbox{\loggates##1}}%
+ \ifx\next2%
+ \hbox{\loggates\@up{\char40\char41}\@gate}%
+ \else\ifx\next3%
+ \hbox{\loggates\@up{\char40\char41\char42}\@gate}%
+ \else\ifx\next4%
+ \hbox{\loggates\@up{\char40\char41\char45\char46}\@gate}%
+ \else\ifx\next5%
+ \hbox{\loggates\@up{\char40\char41\char42\char43\char44}\@gate}%
+ \else%
+ \hbox{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
+\def\@INl{\futurelet\next\@@INl}
+\def\@@INl{\let\@next\@gobble%
+ \def\@up##1{\setbox0=\hbox{\@gate}\raise\ht0\hbox{\loggates##1}}%
+ \ifx\next2%
+ \hbox{\loggates\@gate\@up{\char47\char48}}%
+ \else\ifx\next3%
+ \hbox{\loggates\@gate\@up{\char47\char48\char49}}%
+ \else\ifx\next4%
+ \hbox{\loggates\@gate\@up{\char47\char48\char52\char53}}%
+ \else\ifx\next5%
+ \hbox{\loggates\@gate\@up{\char47\char48\char49\char50\char51}}%
+ \else%
+ \hbox{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
+\def\@INu{\futurelet\next\@@INu}
+\def\@@INu{\let\@next\@gobble%
+ \ifx\next2{\loggates\@gate\char54\char55}%
+ \else\ifx\next3{\loggates\@gate\char54\char55\char56}%
+ \else\ifx\next4{\loggates\@gate\char54\char55\char59\char60}%
+ \else\ifx\next5{\loggates\@gate\char54\char55\char56\char57\char58}%
+ \else{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
+
diff --git a/macros/latex209/contrib/loggates/makefont b/macros/latex209/contrib/loggates/makefont
new file mode 100644
index 0000000000..9d0100083d
--- /dev/null
+++ b/macros/latex209/contrib/loggates/makefont
@@ -0,0 +1,17 @@
+#!/bin/sh
+# A quick hack to make pk files.
+# Usage: makefont <fontfile>.
+# Makefont will delete all gf-files in the working directory.
+# This file is an example of how to generate the loggates font
+# (tfm- and pk-files). Consult your local TeX-guru if you have
+# problems doing this.
+for MAG in 0 # 0.5 1 2 3 4 5
+do
+ mf "\mode=localfont; mag=magstep${MAG}; input" $1
+done
+for GF in *gf
+do
+ gftopk -v $GF
+ rm $GF
+done
+
diff --git a/macros/latex209/contrib/loggates/readme b/macros/latex209/contrib/loggates/readme
new file mode 100644
index 0000000000..57d2e7df93
--- /dev/null
+++ b/macros/latex209/contrib/loggates/readme
@@ -0,0 +1,27 @@
+Loggates is a package for drawing digital electronic circuits with
+logical gates in TeX. It uses a special font to do this, which is
+derived from the "milstd" font by Rick Simpson.
+
+The package consists of the following files:
+
+* readme --- this file
+* loggates.mf --- metafont source for the loggates font
+* loggates.sty --- LaTeX style file for using this font
+* lgdoc.tex --- documentation in LaTeX
+* makefont --- UNIX shell script for generating the font
+
+A nice package which can be used with the logical gate symbol font is
+XY-pic by Kristoffer H. Rose. The file lgdoc.tex shows an example of how
+to do this. The XY-pic package can be obtained via FTP from:
+
+* diku.dk (129.142.96.1) [pub/TeX/misc/xypic*]
+* archive.cs.ruu.nl (131.211.80.5) [TEX/DIAGRAM/XYpic/xypic*]
+
+This is the first version of loggates. Among future improvements will be
+a better interface with the XY-pic package, which should make drawing
+circuit diagrams easier and similar to drawing commutative diagrams.
+Mail questions, remarks, suggestions for improvement to:
+
+Nico Verwer | nico@cs.ruu.nl
+Dept. of Computer Science, University of Utrecht | phone: +31 30 533921
+p.o. box 80.089, 3508 TB Utrecht, The Netherlands | fax: +31 30 513791
diff --git a/macros/latex209/contrib/loval/loval.sty b/macros/latex209/contrib/loval/loval.sty
new file mode 100644
index 0000000000..1ce1ed535a
--- /dev/null
+++ b/macros/latex209/contrib/loval/loval.sty
@@ -0,0 +1,91 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% LOVAL.STY \copyright by Elmar Schal\"{u}ck %
+% Version 1.1 February 1991 %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\message{LOVAL.STY Ver 1.1 Feb 1991 Elmar Schal\"{u}ck}
+\catcode`\@=11 % Make @ a letter
+\newbox\@tmpbox % to save a box
+\newdimen\@tmpdimd % dimen of depth
+\newdimen\@tmpdimh % dimen of height
+\newdimen\@tmpdimw % dimen of width
+\newdimen\@oldunitl \newcount\@textw%
+\newcount\@texth \newcount\@textd%
+\newcount\@xoffs \newcount\@yoffs%
+\newcount\@xoval \newcount\@yoval%
+\newcount\@totalwidth \newcount\@totalheight%
+\newcount\@xovaloffs \newcount\@horline%
+\newcount\@ytextoffs \newcount\@xtextoffs%
+\newcount\@fboxcount \newcount\@wholecount
+\newcount\@stdoffs %
+\newdimen\@em%
+%
+% \ovalbox#1 defines a box with round corners to enclose #1
+%
+\long\def\ovalbox#1{\relax\leavevmode %
+ \@oldunitl=\unitlength % save old unitlength
+ \unitlength.01pt % interim value for precision
+ \@em=1em % 1 em
+ \@stdoffs=\@em %
+ \divide\@stdoffs by \unitlength % to avoid unwanted glues
+ \divide\@stdoffs by10 %
+ \multiply\@stdoffs by 3 % 0.3em
+ \setbox\@tmpbox\hbox{#1} % make #1 a box
+ \@tmpdimd=\dp\@tmpbox % depth of box, i.e. the part beneath
+ % the baseline
+ \@tmpdimh=\ht\@tmpbox % part above baseline
+ \@tmpdimw=\wd\@tmpbox % width of box
+ \@textw=\@tmpdimw\divide\@textw by\unitlength
+ \@texth=\@tmpdimh\divide\@texth by\unitlength
+ \@textd=\@tmpdimd\divide\@textd by\unitlength
+ \@fboxcount=\fboxsep\divide\@fboxcount by\unitlength
+ \@wholecount=\@wholewidth\divide\@wholecount by\unitlength
+ \advance\@texth by \@textd
+ \advance\@tmpdimh by\@tmpdimd % total height of original box
+ \@xoval=\@fboxcount\@yoval=\@texth % diametervalues of \oval
+ \advance\@yoval by \@fboxcount % xoval for width
+ \advance\@yoval by \@fboxcount % yoval for height
+ \@xoffs=\@xoval\divide\@xoffs by 2 %
+ \advance\@xoffs by -\@stdoffs % where to place left oval
+ \@yoffs=\@yoval\divide\@yoffs by 2 % middle of ovalheight
+ \@horline=\@fboxcount %
+ \advance\@horline by \@textw % length of horiz. line
+ \advance\@tmpdimd by\fboxsep %
+ \advance\@tmpdimd by\@wholewidth % total depth of box
+ \@ytextoffs=\@textd %
+ \advance\@ytextoffs by\@wholecount % baseline in picturevalues
+ \advance\@ytextoffs by\@fboxcount %
+ \@xtextoffs=\@fboxcount % where to put original text
+ \advance\@xtextoffs by -\@stdoffs %
+ \@totalwidth=\@wholecount %
+ \advance\@totalwidth by \@fboxcount %
+ \advance\@totalwidth by \@totalwidth %
+ \advance\@totalwidth by \@textw %
+ \advance\@totalwidth by -\@stdoffs %
+ \advance\@totalwidth by -\@stdoffs % width of picture enviroment
+ \@totalheight=\@wholecount %
+ \advance\@totalheight by \@fboxcount %
+ \advance\@totalheight by \@totalheight %
+ \advance\@totalheight by \@texth % height of picture enviroment
+ \hbox{\lower\@tmpdimd % put a box beneath baseline
+ \hbox%
+ {\relax%
+ \begin{picture}(\@totalwidth,\@totalheight) %
+ \put(\@xoffs,\@yoffs){\oval(\@xoval,\@yoval)[l]} % left oval
+ \put(\@xoffs,0){\line(1,0){\@horline}} % lower line
+ \put(\@xoffs,\@yoval){\line(1,0){\@horline}} % upper line
+ \put(\@xtextoffs,\@ytextoffs){#1} % original box
+ \advance\@xoffs by \@horline %
+ \put(\@xoffs,\@yoffs){\oval(\@xoval,\@yoval)[r]} % right oval
+ \end{picture}\relax %
+ } %
+ }%
+ \unitlength=\@oldunitl % restore unitlength
+} %
+%
+\catcode`\@=12%
+% reset catcode of @-sign
+%
+% End of LOVAL.STY
+%
diff --git a/macros/latex209/contrib/loval/lovaltest.pdf b/macros/latex209/contrib/loval/lovaltest.pdf
new file mode 100644
index 0000000000..9c83b4bd1d
--- /dev/null
+++ b/macros/latex209/contrib/loval/lovaltest.pdf
Binary files differ
diff --git a/macros/latex209/contrib/loval/lovaltest.tex b/macros/latex209/contrib/loval/lovaltest.tex
new file mode 100644
index 0000000000..c3093419b2
--- /dev/null
+++ b/macros/latex209/contrib/loval/lovaltest.tex
@@ -0,0 +1,59 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% LOVALTEST.tex %
+%
+% Description of LOVAL.STY
+%
+\documentstyle[loval]{article}
+\pagestyle{empty}
+\begin{document}
+\centering{\Large LOVAL.STY - oval boxes}
+\vspace{0.3in}
+
+This is the descreption of an option that yields similar results as
+the wellknown \verb+\fbox+. It produces a \ovalbox{box} around some
+text with round corners. Because I have choosen to take a picture
+enviroment, some warnings occur during compilation. These may be
+ignored by the user.
+
+
+The following parameters are of some interest.
+\begin{itemize}
+\item \verb+\fboxsep+
+
+Different values of this parameter yield different seperation amount
+from text and surrounding borders, c.f. \verb+\fbox+.
+
+\verb+\fboxsep10pt\ovalbox{test}+ gives the following: \fboxsep10pt\ovalbox{test}.
+
+\verb+\fboxsep3pt\ovalbox{3pt is default}+ gives \fboxsep3pt\ovalbox{3pt is default}.
+
+\item \verb+\linethickness+
+
+Three possibilities are given to choose the linethickness.
+\begin{itemize}
+\item \verb+\thinlines+
+
+This is the default as in \ovalbox{this} example.
+
+\item \verb+\thicklines+
+
+Here we get \ovalbox{thick} lines.
+
+\item \verb+\linethickness<dimen>+
+
+\verb+\linethickness{1.5pt}+ gives these
+\linethickness{1.5pt}\fboxsep8pt\ovalbox{strange} results.
+\end{itemize}
+\end{itemize}
+
+\vspace{.4in}
+If you need another version of this \verb+\ovalbox+ that works with
+plain\TeX\ you can mail me and I send you the other style file and a
+new fontsource {\tt newcirc.mf} to build the appropriate circlefont.
+This version does not give unneccesary warnings.
+\vspace{.3in}
+
+Have some fun with my macros.
+
+Elmar Schal\"{u}ck elmar@uni-paderborn.de
+\end{document}
diff --git a/macros/latex209/contrib/manpage/example1.tex b/macros/latex209/contrib/manpage/example1.tex
new file mode 100644
index 0000000000..31466a3ce7
--- /dev/null
+++ b/macros/latex209/contrib/manpage/example1.tex
@@ -0,0 +1,421 @@
+\documentstyle[11pt,twoside,manpage]{report}
+\begin{document}
+
+\begin{manpage}{OIM Library}{Button}{Draft}
+
+\subtitle{Name}
+ Button --- a graphical event object that can be turn-on turn-off
+
+\subtitle{Declaration}
+ \#include \<button.h\>
+
+\function{Button(Point origin, Point corner, const~char\* label,
+ int foreground_color = WHITE,
+ int background_color = BLACK,
+ int frame_style = IN_BORDER,
+ Boolean show_status = SHOW)}
+ Construct a button inside a rectangle area with lower left vertex at
+ "origin" and upper right vertex at "corner". A button is actually a
+ round-cornered box in shape, so the "origin" and "corner" are located
+ outside of the button area. The "label" is for button label. The
+ first highlighted character in the label text will be the hot key when
+ the mouse is disabled, otherwise highlighted text have no effects.
+ For example, label "@N@ext" designate "N" as the hot key for the button
+ if the mouse do not present; "@N@ext" and "Next" are the same when the
+ mouse is enabled. By default, if the mouse driver is loaded before
+ program execution, it is enabled. Other attributes are self-explanatory.
+ Foreground color is also used for label color.
+
+\function{Button(int left, int bottom, int right, int top, const~char\* label,
+ int foreground_color = WHITE,
+ int background_color = BLACK,
+ int frame_style = IN_BORDER,
+ Boolean show_status = SHOW)}
+ Construct a button with "left", "bottom", "right" and "top" as its
+ boundaries. Button will be shown when created by default.
+
+\subtitle{Description}
+ Button is similar to electronic touch buttons in operation. It can be
+ pressed on or pressed off depending on its current status. Usually,
+ we use normal color to indicate for button "off" position and highlight
+ color for button "on" position. Button is an effect way to implement
+ boolean variables that can toggled on a screen. When the mouse is
+ enabled, point the mouse cursor inside the button area to press the
+ button. When the mouse is disabled, a hot key have to be specified
+ and press that key to trigger a button press operation.
+
+\subtitle{Public \\ Operations}
+
+\function{Boolean pressed()}
+ Check if the button has been pressed, usually in a loop. If it is,
+ the switch action (highlight or redraw the button) is performed.
+
+\function{Boolean isOn()}
+ Return TRUE if the button is at "on" (highlighted) position.
+
+\function{Boolean isOff()}
+ Return TRUE if the button is at "off" (normal color) position.
+
+\function{Boolean isHide()}
+ Return TRUE if at least one hide operation is outstanding.
+
+\function{void turnOn()}
+ Highlight the button figure and set the button status to "on".
+
+\function{void turnOff()}
+ Redraw the button figure using the normal color and set the button
+ status to "off".
+
+\function{void show()}
+ Set the hide status to false and draw the button figure in normal
+ or highlight color depending on current button status.
+
+\function{void hide()}
+ Set the hide status to true and erase the button figure by drawing
+ a box that covers the button, the color is taken from a pixel just
+ outside of the button and fill-pattern is SOLID_FILL.
+
+\subtitle{Virtual \\ Operations}
+
+\function{Boolean isSelected(Point p)}
+ This function is used in the event handler. Return TRUE if the hot key
+ is press when mouse is not enabled, when mouse is enabled check if the
+ mouse cursor is pressed and it is inside the button figure.
+
+\function{int status()}
+ Returns 0 if the button is off and 1 if the button is on.
+ This function is called in the event handler if there is a event
+ function bonded to the button (see Event for more details). The
+ value of the function is passed to the event function as default
+ argument value.
+
+\function{int select()}
+ The same as saying turnOn() when the button is off or turnOff() when
+ the button is on. This function is hardly needed. It is here simply
+ because the Event class has it defined and the Button class is a
+ subclass of Event.
+
+\function{void bind(void \hbox{\rm (\*{\it handler})(int)})}
+ Associate a function (often referred as the button handler) with the
+ button. After the function "handler" is bonded to the button, it is
+ invoked automatically every time the button is pressed by the event
+ handler. The argument value to the function is passed as the status
+ of the button. The default action taken by the event handler can be
+ modified by changing the next function action().
+
+\function{void action(int status)}
+ The default action function called through the event handler. It defines
+ the behavior of the button module when a function is bonded to the button.
+ Not to modify this function unless it is absolutely necessary because it
+ redefines the semantics of all button objects.
+
+\subtitle{See Also}
+ Event, Choice, RoundBox
+
+\subtitle{Author}
+ Rong Chen at the Office for Information Management, UIUC. 9-1-89.
+
+\end{manpage}
+\newpage
+\begin{verbatim}
+ /* EXAMPLE 1 */
+ #include <time.h>
+ #include "key.h"
+ #include "button.h"
+
+ main() {
+ Key key;
+ Point a1(100, 100), a2(240, 130);
+ Button a(a1, a2, "@F@irst Button", WHITE, RED);
+ Button b(400, 100, 540, 120, "@S@econd Button", WHITE, BLUE);
+ Point c1(250, 200), c2(400, 300);
+ Button c(c1, c2, "@T@hird Button\nhas\nThree Lines", WHITE, GREEN);
+ while (1) {
+ if (a.pressed()) { /* sleep(1); a.turnOff(); */ }
+ if (b.pressed()) { sleep(1); b.turnOff(); }
+ if (c.pressed()) { break; }
+ }
+ a.hide(); b.hide(); key.waitFor(CR);
+ }
+
+ /* EXAMPLE 2 */
+ #include <stdlib.h>
+ #include "button.h"
+ #include "box.h"
+
+ void funcA(int) {
+ Box infoBox(0, 0, MAX_X, 40, RED, CYAN);
+ infoBox << "A button is pressed";
+ }
+ void funcB(int) {
+ Box infoBox(0, 0, MAX_X, 40, BLUE, CYAN);
+ infoBox << "B button is pressed";
+ }
+ void funcC(int) { exit(0); }
+
+ main() {
+ Button a(100, 100, 240, 130, "Button @A@", WHITE, RED);
+ Button b(400, 100, 540, 120, "Button @B@", WHITE, BLUE);
+ Button c(250, 200, 400, 300, "@E@xit", WHITE, GREEN);
+ a.bind(funcA); b.bind(funcB); c.bind(funcC);
+ Event::waitForEvents();
+ }
+\end{verbatim}
+
+\end{document}
+
+Path: jarthur!usc!julius.cs.uiuc.edu!ux1.cso.uiuc.edu!ux1.cso.uiuc.edu!m.cs.uiuc.edu!rchen
+From: rchen@m.cs.uiuc.edu
+Newsgroups: comp.text.tex
+Subject: latest manpage.sty for C++ library
+Message-ID: <69100010@m.cs.uiuc.edu>
+Date: 15 Sep 90 20:53:00 GMT
+Lines: 510
+Nf-ID: #N:m.cs.uiuc.edu:69100010:000:19265
+Nf-From: m.cs.uiuc.edu!rchen Sep 15 15:53:00 1990
+
+
+% MANPAGE DOCUMENT STYLE -- Created 25 May 1990, Updated 15 September 1990
+% manpage.sty
+
+% Rong Chen (rchen@cs.uiuc.edu)
+% Department of Computer Science
+% University of Illinois at Urbana-Champaign
+% Urbana, IL 61801
+
+% Copyright (c) 1990 by Rong Chen
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% This style option is designed to work with the report document style
+% of LaTeX version 2.09. Use \documentstyle[11pt,manpage]{report}
+%
+% The commands that are created in the style file are:
+%
+% \begin{manpage}{Title}{Module}{Version} % see an example, all will be clear
+% \end{manpage} % end of manpage environment
+% \function{#1} (e.g., \function{void demo(int dummy)}) % with \medskip added
+% \function*{#1} (e.g., \function*{void demo(int dummy)})% no extra spacing
+% \subtitle{#1} (e.g., \subtitle{ANTHOR}) % fit in the same line if possible
+% \subtitle*{#1} (e.g., \subtitle*{AUTHOR})% always break a newline
+% "#1" (e.g., "dummy_variable") % argument is in italic&unbreakable
+% \separator % draw a thin line to seperate suntitle from the text
+% \header{#1}{#2}{#3} % in case you want to have a header and
+% \footer{#1}{#2}{#3} % a footer outside of the manpage environment
+% \dq % print double quote character (")
+%
+% In the \function macro, data types and their dummy arguments are separated
+% by a space. So if you have a function like "int f(const int n)", you should
+% document it as \function{int f(const~int n)}. The argument n is optional.
+% In the \subtitle macro, two lines of text may be devided by "\\".
+%
+% The following characters (control-sequents) are defined (or redefined) as:
+%
+% \* --- the same as $\ast$
+% \< --- the same as $\langle$
+% \> --- the same as $\rangle$
+% < --- the same as $<$
+% > --- the same as $>$
+% _ --- the same as \_
+% + --- the same as $+$
+% | --- the same as $\mid$
+% ^ --- hat character that is defined as $\wedge$ being raised 0.6ex
+% " --- the same as {\tt "} when outside of the manpage environment,
+% otherwise use \dq instead
+
+% If you make any improvements, I'd like to hear about them.
+
+\headheight 24pt % See LaTeX book for definitions
+\headsep 12pt
+\textwidth 6.25in
+\textheight 8.0in
+\topmargin 0in
+\marginparwidth 0pt
+\oddsidemargin 0pt
+\evensidemargin 0pt
+\marginparsep 0pt
+\parindent 0pt
+\newdimen\argindent \argindent 3em % indentation for function arguments
+\parskip 10pt plus 1pt
+
+\newcommand{\header}[3]{\gdef\@header{{#1}{#2}{#3}}}
+\newcommand{\footer}[3]{\gdef\@footer{{#1}{#2}{#3}}}
+
+\catcode`\"=\active
+\def\arg@quote#1"{\hbox{\it #1\/}}
+\def\tt@quote{\hbox{\tt \char`\" \relax}}
+\let"=\tt@quote
+\let\dq=\tt@quote
+
+\def\separator{\rule{\linewidth}{0.5pt}}
+
+\def\function{\@ifstar{\@func@star}{\@func@norm}}
+\def\@func@star#1{\expandafter\@function#1 \\ }
+\def\@func@norm#1{\expandafter\@function#1 \medskip\\ }
+
+\newdimen\arg@dim % temp variables that you don't want to know
+\newdimen\line@siz
+\newbox\arg@box
+
+\def\@function#1(#2)#3 {
+ \begingroup
+ \setbox\arg@box=\hbox{\bf #1 \rm \((\)} \global\arg@dim\wd\arg@box
+ \setbox\arg@box=\hbox{\rm \()\);}
+ \global\line@siz\linewidth\global\advance\line@siz-\wd\arg@box
+ \pagebreak[3]
+ \expandafter\print@name#1 \@@{\rm \((\)}\def\@comma{}\ignorespaces
+ \@for\@tempa:=#2\do{\ignorespaces
+ \setbox\arg@box=\hbox{\@comma} \global\advance\arg@dim\wd\arg@box
+ \unskip\@comma\def\@comma{\nobreak,\penalty-\@m\ }\ignorespaces
+ \expandafter\print@arg\@tempa\@@\relax\ignorespaces
+ }~{\rm \()\)\nobreak#3}
+ \endgroup
+}
+
+\def\print@name#1#2 #3\@@{
+ \unskip\edef\tmp@name{#3}\ignorespaces
+ \ifx\tmp@name\@empty{\bf #1#2 }\else{\rm #1#2 \bf #3}\fi
+}
+
+\def\print@arg#1\@@{\expandafter\print@type#1 \@@}
+
+\def\print@type#1#2 #3\@@{
+ \setbox\arg@box=\hbox{{\rm #1#2}\ifx #3\@nil\else\ignorespaces
+ \expandafter\print@dummy#3=\@@\fi\unskip\/}
+ \global\advance\arg@dim\wd\arg@box
+ \ifdim\arg@dim>\line@siz
+ \global\arg@dim\argindent \global\advance\arg@dim\wd\arg@box
+ \hfill\penalty-\@m\hbox{}\kern\argindent\fi
+ \box\arg@box%
+}
+
+\def\print@dummy#1=#2\@@{
+ \edef\tmp@name{#1}\def\a@space{ }\ifx\tmp@name\a@space\else
+ {\it\ #1\/}\ifx #2\@nil\else{\rm \(=\)}\expandafter\strip@eq#2\fi
+ \fi
+}
+
+\def\strip@eq#1={{\rm #1}}
+
+\def\subtitle{\@ifstar{\@subtit@star}{\@subtit@norm}}
+
+\def\@subtit@star#1{
+ \item[\hbox{\large\bf\begin{tabular}[t]{l}#1\end{tabular}}\hfill]
+ \hfil\par
+ \expandafter{\let\par=\space\ignorespaces\let\par=\endgraf}
+}
+
+\def\@subtit@norm#1{
+ \setbox\arg@box=\hbox{\large\bf\begin{tabular}[t]{l}#1\end{tabular}}
+ \ifdim \wd\arg@box > \labelwidth \item[\copy\arg@box\hfill]\hfil\par
+ \else \dp\arg@box=0pt \item[\copy\arg@box\hfill] \fi
+ \expandafter{\let\par=\space\ignorespaces\let\par=\endgraf}
+}
+
+\newenvironment{manpage}[3]{\@beginManpage#1\@@#2\@@#3\@@}{\@endManpage}
+
+\def\@beginManpage#1\@@#2\@@#3\@@{
+ \pagestyle{headings}
+ \addcontentsline{toc}{section}{#2}
+ \clearpage
+ \gdef\@header{{#2}{#1}{#2}}
+ \gdef\@footer{{#3}{\thepage}{\today}}
+ \begin{list}{}{
+ \setlength\labelwidth{1.2in}
+ \setlength\leftmargin{\labelwidth}
+ \addtolength\leftmargin{\labelsep}
+ \topsep 5pt plus 2pt minus 2pt
+ \itemsep 5pt plus 2pt minus 2pt
+ \parsep 10pt plus 2pt minus 2pt
+ }
+ \raggedbottom
+ \let"=\arg@quote
+}
+
+\def\@endManpage{
+ \end{list} \clearpage \flushbottom
+ \let"=\tt@quote
+}
+
+\def\@first#1#2#3{#1}
+\def\@second#1#2#3{#2}
+\def\@third#1#2#3{#3}
+
+\def\ps@headings{
+ \def\@oddhead{\parbox{\textwidth}{
+ {\rm\ \ \expandafter\@first\@header\hfill
+ \expandafter\@second\@header\hfill
+ \expandafter\@third\@header\ \ } \\[.1cm]
+ \hbox{}\rule[12pt]{\textwidth}{1pt}
+ }}
+ \def\@evenhead{\parbox{\textwidth}{
+ {\rm\ \ \expandafter\@third\@header\hfill
+ \expandafter\@second\@header\hfill
+ \expandafter\@first\@header\ \ } \\[.1cm]
+ \hbox{}\rule[12pt]{\textwidth}{1pt}
+ }}
+ \def\@oddfoot{\parbox{\textwidth}{
+ \hbox{}\rule{\textwidth}{1pt} \\[.1cm]
+ {\sl\ \ \expandafter\@first\@footer\hfill
+ \rm\expandafter\@second\@footer\hfill
+ \sl\expandafter\@third\@footer\ }
+ }}
+ \def\@evenfoot{\parbox{\textwidth}{
+ \hbox{}\rule{\textwidth}{1pt} \\[.1cm]
+ {\sl\ \ \expandafter\@third\@footer\hfill
+ \rm\expandafter\@second\@footer\hfill
+ \sl\expandafter\@first\@footer\ }
+ }}
+}
+
+\gdef\@header{{}{}{}}
+\gdef\@footer{{}{}{}}
+
+\def\tableofcontents{\@restonecolfalse
+ \newskip\@savskip \@savskip=\parskip
+ \parskip 0pt plus 1pt
+ \clearpage \thispagestyle{plain} \global\@topnum\z@ \@afterindentfalse
+ \@makeschapterhead{{Contents\@mkboth{CONTENTS}{CONTENTS}}}
+ \@afterheading \@starttoc{toc}
+ \parskip=\@savskip
+}
+
+\def\@makechapterhead#1{
+ \vspace*{50pt}
+ { \raggedleft
+ \Large\bf Chapter \thechapter \par \vskip 15pt
+ \huge\bf #1\par
+ \nobreak \vskip 30pt
+ }
+}
+
+\def\@makeschapterhead#1{
+ \vspace*{50pt}
+ { \raggedleft
+ \huge\bf #1\par
+ \nobreak \vskip 30pt
+ }
+}
+
+\def\@schapter#1{
+ \addcontentsline{toc}{chapter}{#1}
+ \@makeschapterhead{#1}
+ \@afterheading
+}
+
+\catcode`\<=\active \def\mit@less{\hbox{\(\char`\<\)}} \let<=\mit@less
+\catcode`\>=\active \def\mit@more{\hbox{\(\char`\>\)}} \let>=\mit@more
+\def\<{\hbox{\(\langle\)}} \def\>{\hbox{\(\rangle\)}} \def\*{\hbox{\(\ast\)}}
+%\catcode`\_=\active \def_={\hbox{\kern.06em \vbox{\hrule width.3em}}}
+\catcode`\_=\active \global\let_=\_
+\catcode`\^=\active \def\mit@wedge{\hbox{\raise.06ex \hbox{\small \(\wedge\)}}}
+\let^=\mit@wedge
+\catcode`\+=\active \def\mit@add{\hbox{\(\char43\)}} \let+=\mit@add
+\catcode`\|=\active \def\mit@mid{\hbox{\(\mid\)}} \let|=\mit@mid
+
diff --git a/macros/latex209/contrib/manpage/example2.tex b/macros/latex209/contrib/manpage/example2.tex
new file mode 100644
index 0000000000..9492d3af95
--- /dev/null
+++ b/macros/latex209/contrib/manpage/example2.tex
@@ -0,0 +1,264 @@
+\documentstyle[11pt,twoside,manpage]{report}
+\begin{document}
+\pagestyle{headings}
+
+\begin{manpage}{OIM C++ Library}{Choice}{Version 1.0}
+
+\subtitle{Name}
+ Choice --- a set of boxes representing the choices available.
+
+\subtitle{Declaration}
+ \#include \<choice.h\>
+
+\function{Choice(Point origin, Point corner,
+ int foreground_color, int background_color,
+ int frame_style, int space_in_between,
+ int number_of_choices,
+ const~char\* first_label, $...$)}
+ Constructs a choice object. Each choice object is a set of boxes
+ representing the choices available. "Origin" and "corner" define the
+ rectangular area inside which the boxes are displayed.
+ The "space_in_between" (in pixels)
+ defines the distance between two adjacent boxes. Depending on
+ whether there is enough room to put all the choices horizontally
+ or vertically in the designated area,
+ the choices will be laid out accordingly. The
+ attributes "foreground_color", "background_color" and "frame_style"
+ define the colors for each box that represents each choice.
+ The number of labels starting with "first_label" must match the
+ number given by "number_of_choices". Each label is displayed within
+ its corresponding box. The choices are displayed
+ as soon as they are created.
+
+\function{Choice(int number_of_choices, Boolean is_horizontal = VIRTICAL)}
+ Constructs an array of choices or
+ a choice object with boxes of different sizes. The attributes
+ of the actual choices will be defined later using the
+ addItem() operation. Note: It is forbidden to have arguments
+ in the constructors of array objects in C++.
+
+\subtitle{Description}
+ A Choice object is a set of related boxes. It is used to display
+ multiple choices on the screen.
+ A choice may either be selected by pressing a hot key
+ (when mouse is not enabled) or by pressing a mouse button when the mouse
+ cursor is within the intended choice box.
+ The first highlighted character in the text label will be the
+ hot key if the mouse is not enabled, otherwise, the highlighted
+ character will have no effect. For example, label "@N@ext" designates
+ "N" as the hot key for the button if the mouse is not enabled.
+ By default, if the mouse driver is loaded before program execution,
+ the mouse is enabled.
+ When using the mouse to select
+ a choice, the selection is immediate; a hot key must be confirmed
+ by pressing ENTER (carriage return key). Arrow keys can also be used
+ to move the current selection in the direction indicated by the arrows,
+ this also requires an ENTER to confirm.
+
+\subtitle{Public \\ Operations}
+
+\function{void addItem(Point origin, Point corner,
+ int foreground_color, int background_color,
+ int frame_style, const~char\* label,
+ int text_color = WHITE,
+ int text_highlight_color = LIGHT_WHITE)}
+ Defines the attributes of a choice box in the array declared by the
+ Choice(int "number_of_choices", Boolean "is_horizontal" = VIRTICAL)
+ constructor.
+ It must be called exactly "number_of_choices"
+ times. The first call specifies the first choice, second call specifies
+ the second choice, and so on. The attributes "origin" and "corner"
+ define a box area where the choice item is located on the screen. Other
+ attributes are self-explanatory. This call is particularly useful
+ on program setup pages.
+
+\function{void disable(int index)}
+ Disables a choice box designated by "index". This means that the choice
+ can still be seen on the screen but can not be selected any more.
+ The hot key for the choice is rendered as in the normal text color rather
+ than in the highlight color. This call is often useful on a setup page,
+ where it is often necessary to have a few choices contingent upon
+ others, i.e., they are disabled first until the choices that they
+ depend upon have been initialized and then they are enabled again.
+
+\function{void enable(int index)}
+ Enables a choice box designated by "index".
+ All choices are enabled when created.
+
+\function{Boolean hasValue()}
+ Returns TRUE if the designated choice object has been selected at
+ least once. Graphically,
+ it means one of the choices is rendered in reverse colors. It is
+ sometimes necessary to check if all choice objects on a screen have
+ been selected, so that a program can go on to the next page of screen.
+ If a previous select() call is returned abnormally by pressing an ESC key,
+ this function will return FALSE. Should this occur, the previous
+ value, if any, will also be lost.
+
+\function{int selectNext()}
+ Steps through each choice of the choice object in sequential order.
+ This function is often used in implementing parameter
+ initialization screens in a controlled order. The order that the
+ choices are steped through is the same as the order of the choice
+ array. This is operator is valid only for keyboard mode. If the
+ mouse is enabled, it behaves exactly as select().
+
+\function{void setCurrent(int index)}
+ Resets the current (default) choice to the choice box indicated by
+ "index". The default choice is
+ set to the first choice box ("index" $=$ 0) when a choice object is created,
+ or the choice selected last time. This call can
+ change the default choice without having to select anything first. It will
+ affect the behavior of a selectNext() call.
+
+\function{void reset()}
+ Erases the default choice and resets the internal pointers as if this
+ choice object had never been selected before.
+
+\subtitle{Virtual \\ Operations}
+
+\function{void action(int status)}
+ Defines the behaviors of the choice object when a choice handler
+ has been bonded to the object. This function is called by the
+ event handler when it detects that the choice object has been
+ selected. The default action is to do nothing if no choice handler
+ presents, otherwise, it invokes the choice handler
+ and passes it along with the current status
+ (whatever has been returned from a status() call).
+ Do not modify this function unless it is absolutely necessary because
+ it redefines the sematics of all choice objects.
+
+\function{void bind(void \hbox{\rm (\*{\it handler})(int)})}
+ Associates a choice handler function with the choice object. Every
+ time this choice object is invoked, the choice handler is called
+ immediately.
+ The handler is passed along with the current "status"
+ (return value of status() call) as its argument. The default
+ action taken by the event handler can be modified by changing
+ the next function action().
+
+\function{Boolean isSelected(Point cursor)}
+ Returns TRUE if a legal hot key is pressed for the
+ the indicated choice object. It also returns TRUE if
+ a mouse button is pressed within the range of the choice object area.
+ This call is used by the event handler to check if this choice object
+ has been selected. It is hardly needed in regular applications.
+ The "cursor" is for mouse cursor in mouse mode or faked with the
+ current keyboard input as the cursor's x coordinate.
+
+\function{int select()}
+ Picks a choice from the choice object. If the mouse is not enabled,
+ the default choice (the one picked last time or the first one if
+ this is the first time this function is called) is displayed in
+ highlight colors. The arrow key can be used to move the
+ default choice. The ENTER key must be used to confirm the selection.
+ If the mouse is enabled,
+ this call checks if a mouse button has been pressed while the mouse
+ cursor is inside one of the choice boxes. The return value is the index
+ of the choice box selected.
+ A ESC key may be pressed
+ to leave the current select() call without actually selecting anything.
+ In this case, $-1$ will be returned.
+ Note: With no mouse enabled,
+ select() waits for either an Enter key or ESC key to return, whereas
+ with the mouse enabled, the return is immediate.
+
+\function{int status()}
+ Returns the current choice index (the one in reverse color on the screen).
+ If there is no current choice (either it has not been selected or has
+ been reset) the return value is $-1$.
+
+\subtitle{See Also}
+ Event, Button, Box
+
+\subtitle{Author}
+ Ron Chen at the Office for Information Management, UIUC. 9-1-89.
+
+\end{manpage}
+\newpage
+\begin{verbatim}
+ /* EXAMPLE 1 */
+ #include <stdlib.h>
+ #include "choice.h"
+
+ void handler1(int choice) {
+ Box box(500, 30, 600, 60, LIGHT_CYAN, LIGHT_MAGENTA);
+ box << choice + 1;
+ }
+
+ void handler2(int choice) {
+ Box box(500, 30, 600, 60, LIGHT_CYAN, LIGHT_MAGENTA);
+ box << (choice==0 ? "Ape" : (choice==1 ? "Bob" : "Car"));
+ }
+
+ void handler3(int choice) {
+ Box box(500, 30, 600, 60, LIGHT_CYAN, LIGHT_MAGENTA);
+ switch (choice) {
+ case 0: box << "D"; break; case 1: box << "E"; break;
+ case 2: box << "F"; break; case 3: box << "G"; break;
+ case 4: exit(0);
+ }
+ }
+
+ main() {
+ Point a(100, 100), b(220, 130);
+ Choice c1(a,b,BROWN,RED,ON_BORDER,0,4,"@1@","@2@","@3@","@4@");
+
+ a = Point(200, 200); b = Point(400, 230);
+ Choice c2(a,b,WHITE,BLUE,IN_BORDER,10,3,"@A@pe","@B@ob","@C@ar");
+
+ a = Point(500, 230); b = Point(550, 330);
+ Choice c3(a,b,GREEN,GRAY,NO_BORDER,10,5,"@D@","@E@","@F@","@G@","@H@");
+
+ for (int pick;;) {
+ if ((pick = c1.select()) != -1) handler1(pick);
+ if ((pick = c2.select()) != -1) handler2(pick);
+ if ((pick = c3.select()) != -1) handler3(pick);
+ }
+ }
+\end{verbatim}
+\newpage
+\begin{verbatim}
+ /* EXAMPLE 2 */
+ #include <stdlib.h>
+ #include "choice.h"
+
+ void handler1(int pick) {
+ Box box(500, 30, 600, 60, LIGHT_CYAN, LIGHT_MAGENTA);
+ box << pick + 1;
+ }
+
+ void handler2(int pick) {
+ Box box(500, 30, 600, 60, LIGHT_CYAN, LIGHT_MAGENTA);
+ box << (pick==0 ? "Ape" : (pick==1 ? "Bob" : "Car"));
+ }
+
+ void handler3(int pick) {
+ Box box(500, 30, 600, 60, LIGHT_CYAN, LIGHT_MAGENTA);
+ switch (pick) {
+ case 0: box << "D"; break; case 1: box << "E"; break;
+ case 2: box << "F"; break; case 3: box << "G"; break;
+ case 4: exit(0);
+ }
+ }
+
+ main() {
+ Point a(100, 100), b(220, 130);
+ Choice c1(a,b,BROWN,RED,ON_BORDER,0,4,"@1@","@2@","@3@","@4@");
+ Choice c2(3, HORIZONTAL);
+ c2.addItem(Point(200, 200), Point(260,230),
+ WHITE, BLUE, IN_BORDER, "@A@pe");
+ c2.addItem(Point(270, 200), Point(330,230),
+ WHITE, BLUE, IN_BORDER, "@B@ob");
+ c2.addItem(Point(340, 200), Point(400,230),
+ WHITE, BLUE, IN_BORDER, "@C@ar");
+ a = Point(500, 230); b = Point(550, 330);
+ Choice c3(a,b,GREEN,GRAY,NO_BORDER,10,5,"@D@","@E@","@F@","@G@","@H@");
+
+ c1.bind(handler1);
+ c2.bind(handler2);
+ c3.bind(handler3);
+ Event::waitForEvents();
+ }
+\end{verbatim}
+\end{document}
diff --git a/macros/latex209/contrib/manpage/manpage.sty b/macros/latex209/contrib/manpage/manpage.sty
new file mode 100644
index 0000000000..500ee7f670
--- /dev/null
+++ b/macros/latex209/contrib/manpage/manpage.sty
@@ -0,0 +1,342 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Rong Chen",
+%%% version = "1.03",
+%%% date = "11 June 1992",
+%%% time = "15:16:26 CDT",
+%%% filename = "manpage.sty",
+%%% address = "Department of Computer Science
+%%% University of Illinois at Urbana-Champaign
+%%% 1304 W. Springfield Ave.
+%%% Urbana, IL 61801
+%%% USA",
+%%% telephone = "(217) 244-7118",
+%%% FAX = "(217) 333-3501",
+%%% checksum = "03245 575 2732 22501",
+%%% email = "rchen@cs.uiuc.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, manpage",
+%%% supported = "yes",
+%%% docstring = "This LaTeX style file is similar to the UNIX troff
+%%% man macros in format and is specially tuned for
+%%% documenting the C++ library that the author wrote.
+%%%
+%%% This style option is designed to work with both
+%%% report and article document styles of LaTeX v2.09,
+%%% e.g., \documentstyle[11pt,twoside,manpage]{report}
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by
+%%% the equivalent of the standard UNIX wc
+%%% (word count) utility output of lines,
+%%% words, and characters. This is produced by
+%%% Robert Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+
+% manpage.sty
+%
+% Copyright (c) 1990 by Rong Chen (rchen@cs.uiuc.edu)
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+%
+% The commands defined in the style file are listed bellow:
+%
+% \begin{manpage}{Title}{Module}{Version} % see an example, all will be clear
+% % latex supplies the current date if no \date{} is specified
+% \end{manpage} % end of manpage environment
+% \variable{#1} (e.g., \variable{int foo}) % with \medskip added
+% \variable*{#1} (e.g., \variable*{int bar})% no extra spacing
+% \function{#1} (e.g., \function{void demo(int dummy)}) % with \medskip added
+% \function*{#1} (e.g., \function*{void demo(int dummy)})% no extra spacing
+% \subtitle{#1} (e.g., \subtitle{AUTHOR}) % fit in the same line if possible
+% \subtitle*{#1} (e.g., \subtitle*{AUTHOR})% always break a newline
+% "#1" (e.g., "dummy_variable") % argument is in italic&unbreakable
+% \separator % draw a thin line to separate subtitle from the text
+% \header{#1}{#2}{#3} % in case you want to have a header and
+% \footer{#1}{#2}{#3} % a footer outside of the manpage environment
+%
+% In the \function macro, data types and their dummy arguments are separated
+% by a space. So if you have a function like "int f(const int n)", you should
+% document it as \function{int f(const~int n)}. The argument n is optional.
+% In the \subtitle macro, two lines of text may be divided by "\\".
+%
+% The following characters (control-sequents) are defined (or redefined) as:
+%
+% \" --- print the double quote character ("), use $\ddot{\rm#1}$ for accent
+% \~ --- defined as $\sim$ being raised 0.6ex, use $\tilde{\rm#1}$ for accent
+% \* --- the same as $\ast$
+% \< --- the same as $\langle$
+% \> --- the same as $\rangle$
+% < --- the same as $<$
+% > --- the same as $>$
+% _ --- the same as \_, use $\sb{#1}$ for subscript (see TeXbook pp. 135)
+% + --- the same as $+$
+% | --- the same as $\mid$
+% ^ --- {\small $\wedge$} being raised 0.6ex, superscript is now $\sp{#1}$
+% " --- the same as {\tt "} when outside of the manpage environment,
+% otherwise use \" instead
+
+\headheight 24pt % see Lamport's LaTeX book for definitions
+\headsep 12pt
+\textwidth 6.25in
+\textheight 8.0in
+\topmargin 0in
+\marginparwidth 0pt
+\oddsidemargin 0pt
+\evensidemargin 0pt
+\marginparsep 0pt
+\parindent 0pt
+\parskip 10pt plus 1pt
+
+\newdimen\funindent \funindent 0pt % indentation for function/variable entries
+\newdimen\argindent \argindent -1pt % indentation for function arguments
+
+% when \argindent >= 0pt, subsequent lines of arguments have fixed indentation
+% i.e., \argindent (e.g., 3em). See the following example:
+% int foo ( int x, int y, int w,
+% int h, char a, char b,
+% char c, char d )
+%
+% when \argindent < 0pt (value doesn't matter), arguments are auto-indented:
+% int foo ( int x, int y, int w,
+% int h, char a, char b,
+% char c, char d )
+
+% \tableofcontents and \chapter macros are also modified in manpage.sty.
+% The standard LaTeX \tableofcontents couldn't handle \chapter* correctly.
+% In the table of contents each manpage has the same indentation as a section.
+% Chapter titles have smaller font and they are pushed to the right margin.
+
+% > From: Vick Khera <khera@cs.duke.edu>
+% > one more thing you may like... we have this cprog.sty style
+% > (formatting of C programs, by \'Eamonn McManus <emcmanus@cs.tcd.ie>)
+% > that lets you place C, C++, Pascal, and Modula-2 source code in your
+% > LaTeX source directly. no more verbatim mode, which i think is ugly
+% > for C code. just be sure to include it *before* you include manpage.sty
+% > or things break. i don't know why, but i can live with it:
+% > \documentstyle[cprog,manpage]{report} will do the trick. then just replace
+% > those pesky \begin{verbatim}\end{verbatim} with \begin{cprog}\end{cprog}
+% > and it looks much better. i also like to put after the \documentstyle
+% > the command \let\ctextfont=\sf so the code is typeset in the \sf font
+% > to differentiate it from normal text.
+% (you may do the same with \let\ccommentfont=\sl and \let\cstringfont=\sf)
+
+% If you make any improvements, I'd like to hear about them.
+%
+% STOP STOP STOP -- comments end here :-(
+% but there is a sample.tex file in the back.
+
+\newcommand{\header}[3]{\gdef\@header{{#1}{#2}{#3}}}
+\newcommand{\footer}[3]{\gdef\@footer{{#1}{#2}{#3}}}
+
+\def\separator{\rule{\linewidth}{0.5pt}}
+
+\catcode`\"=\active
+\def\arg@quote#1"{\hbox{\it #1\/}}
+\def\tt@quote{\hbox{\tt \char34}}
+\let"=\tt@quote
+\let\"=\tt@quote
+
+\def\variable{\pagebreak[3]\@ifstar{\var@star}{\var@norm}}
+\def\var@star#1{\expandafter\print@var#1\@@\\ }
+\def\var@norm#1{\expandafter\print@var#1\@@\medskip\\ }
+
+\def\print@var#1\@@{\expandafter\parse@var#1 =\@@}
+\def\parse@var#1=#2\@@{
+ \print@name#1\@@
+ \ifx #2\@nil\else{\unskip\rm\ \(=\)\ }\strip@eq#2\fi
+}
+
+\def\function{\pagebreak[3]\@ifstar{\@func@star}{\@func@norm}}
+\def\@func@star#1{\expandafter\@function#1 \\ }
+\def\@func@norm#1{\expandafter\@function#1 \medskip\\ }
+
+\newdimen\arg@dim % temp variables that you don't want to know
+\newdimen\arg@indent
+\newdimen\line@siz
+\newbox\arg@box
+
+\def\@function#1(#2)#3 {
+ \expandafter\print@name#1 \@@
+ \setbox\arg@box=\hbox{\rm\ \((\)\ }%
+ \global\advance\arg@dim\wd\arg@box
+ \unskip\box\arg@box
+ \edef\@fortmp{#2}%
+ \ifx\@fortmp\@empty {\rm \()\)#3}\else
+ \setbox\arg@box=\hbox{\rm\ \()\);}%
+ \global\line@siz\linewidth \global\advance\line@siz-\wd\arg@box
+ \ifdim\argindent<0pt
+ \global\arg@indent\arg@dim \else\global\arg@indent\argindent\fi
+ \def\@comma{}%
+ \@for\@tempa:=#2\do{%
+ \setbox\arg@box=\hbox{\@comma}%
+ \global\advance\arg@dim\wd\arg@box
+ \unskip\@comma\def\@comma{\nobreak,\penalty-\@m\ }%
+ \expandafter\print@arg\@tempa\@@
+ }%
+ \unskip\nobreak\hbox{\rm\ \()\)#3}%
+ \fi
+}
+
+\def\print@name#1#2 #3\@@{%
+ \edef\tmp@name{#3}%
+ \ifx\tmp@name\@empty
+ \setbox\arg@box=\hbox{\bf #1#2}%
+ \else\setbox\arg@box=\hbox{\rm #1#2 \bf #3\unskip}\fi
+ \global\arg@dim\funindent \global\advance\arg@dim\wd\arg@box
+ \unskip\hspace{\funindent}\box\arg@box
+}
+
+\def\print@arg#1\@@{\expandafter\print@type#1 \@@}
+
+\def\print@type#1#2 #3\@@{%
+ \setbox\arg@box=\hbox{{\rm #1#2}%
+ \ifx #3\@nil\else\expandafter\print@dummy#3=\@@\fi
+ \unskip\/}%
+ \global\advance\arg@dim\wd\arg@box
+ \ifdim\arg@dim>\line@siz
+ \global\arg@dim\arg@indent \global\advance\arg@dim\wd\arg@box
+ \hfill\penalty-\@m\hbox{}\kern\arg@indent\fi
+ \box\arg@box
+}
+
+\def\print@dummy#1=#2\@@{%
+ \edef\tmp@name{#1}\def\a@space{ }%
+ \ifx\tmp@name\a@space\else
+ {\unskip\it\ #1\/}%
+ \ifx #2\@nil\else{\unskip\rm\ \(=\)\ }\strip@eq#2\fi
+ \fi
+}
+
+\def\strip@eq#1={\rm \expandafter\ignorespaces#1\unskip}
+
+\def\subtitle{\pagebreak[3]\@ifstar{\@subtit@star}{\@subtit@norm}}
+
+\def\@subtit@star#1{
+ \item[\hbox{\large\bf\begin{tabular}[t]{l}#1\end{tabular}}\hfill]
+ \hfil\par
+ \expandafter{\let\par=\space\ignorespaces\let\par=\endgraf}
+}
+
+\def\@subtit@norm#1{
+ \setbox\arg@box=\hbox{\large\bf\begin{tabular}[t]{l}#1\end{tabular}}
+ \ifdim \wd\arg@box > \labelwidth \item[\copy\arg@box\hfill]\hfil\par
+ \else \dp\arg@box=0pt \item[\copy\arg@box\hfill] \fi
+ \expandafter{\let\par=\space\ignorespaces\let\par=\endgraf}
+}
+
+\newenvironment{manpage}[3]{\@beginManpage#1\@@#2\@@#3\@@}{\@endManpage}
+
+\def\@beginManpage#1\@@#2\@@#3\@@{
+ \newpage
+ \pagestyle{headings}
+ \addcontentsline{toc}{section}{#2}
+ \clearpage
+ \gdef\@header{{#2}{#1}{#2}}
+ \gdef\@footer{{#3}{\thepage}{\@date}}
+ \begin{list}{}{
+ \setlength\labelwidth{1.2in}
+ \setlength\leftmargin{\labelwidth}
+ \addtolength\leftmargin{\labelsep}
+ \topsep 5pt plus 2pt minus 2pt
+ \itemsep 5pt plus 2pt minus 2pt
+ \parsep 10pt plus 2pt minus 2pt
+ }
+ \raggedbottom
+ \let"=\arg@quote
+}
+
+\def\@endManpage{
+ \end{list} \clearpage \flushbottom
+ \let"=\tt@quote
+}
+
+\def\@first#1#2#3{#1}
+\def\@second#1#2#3{#2}
+\def\@third#1#2#3{#3}
+
+\def\ps@headings{
+ \def\@oddhead{\parbox{\textwidth}{
+ {\rm\ \ \expandafter\@first\@header\hfill
+ \expandafter\@second\@header\hfill
+ \expandafter\@third\@header\ \ } \\[.1cm]
+ \hbox{}\rule[12pt]{\textwidth}{1pt}
+ }}
+ \def\@evenhead{\parbox{\textwidth}{
+ {\rm\ \ \expandafter\@third\@header\hfill
+ \expandafter\@second\@header\hfill
+ \expandafter\@first\@header\ \ } \\[.1cm]
+ \hbox{}\rule[12pt]{\textwidth}{1pt}
+ }}
+ \def\@oddfoot{\parbox{\textwidth}{
+ \hbox{}\rule{\textwidth}{1pt} \\[.1cm]
+ {\sl\ \ \expandafter\@first\@footer\hfill
+ \rm\expandafter\@second\@footer\hfill
+ \sl\expandafter\@third\@footer\ }
+ }}
+ \def\@evenfoot{\parbox{\textwidth}{
+ \hbox{}\rule{\textwidth}{1pt} \\[.1cm]
+ {\sl\ \ \expandafter\@third\@footer\hfill
+ \rm\expandafter\@second\@footer\hfill
+ \sl\expandafter\@first\@footer\ }
+ }}
+}
+
+\gdef\@header{{}{}{}}
+\gdef\@footer{{}{}{}}
+
+\def\tableofcontents{\@restonecolfalse
+ \newskip\@savskip \@savskip=\parskip
+ \parskip 0pt plus 1pt
+ \clearpage \thispagestyle{plain} \global\@topnum\z@ \@afterindentfalse
+ \@makeschapterhead{{Contents\@mkboth{CONTENTS}{CONTENTS}}}
+ \@afterheading \@starttoc{toc}
+ \parskip=\@savskip
+}
+
+\def\@makechapterhead#1{
+ \vspace*{50pt}
+ { \raggedleft
+ \Large\bf \@chapapp{} \thechapter \par \vskip 15pt
+ \huge\bf #1\par
+ \nobreak \vskip 30pt
+ }
+}
+
+\def\@makeschapterhead#1{
+ \vspace*{50pt}
+ { \raggedleft
+ \huge\bf #1\par
+ \nobreak \vskip 30pt
+ }
+}
+
+\def\@schapter#1{
+ \addcontentsline{toc}{chapter}{#1}
+ \@makeschapterhead{#1}
+ \@afterheading
+}
+
+\catcode`\<=\active \def\mit@less{\hbox{\(\char60\)}} \let<=\mit@less
+\catcode`\>=\active \def\mit@more{\hbox{\(\char62\)}} \let>=\mit@more
+\def\<{\(\langle\)}
+\def\>{\(\rangle\)}
+\def\*{\(\ast\)}
+\def\~{\(\raise.6ex\hbox{\(\sim\)}\)}
+% \catcode`\_=\active \def_={\hbox{\kern.1em\vbox{\hrule width.3em}}}
+\catcode`\_=\active \global\let_=\_
+\def\mit@wedge{\hbox{\raise.6ex\hbox{\small \(\wedge\)}}}
+\catcode`\^=\active \let^=\mit@wedge
+\catcode`\+=\active \def\mit@add{\hbox{\(\char43\)}} \let+=\mit@add
+\catcode`\|=\active \def\mit@mid{\hbox{\(\mid\)}} \let|=\mit@mid
+
+\endinput
+
diff --git a/macros/latex209/contrib/manpage/sample.tex b/macros/latex209/contrib/manpage/sample.tex
new file mode 100644
index 0000000000..c01fb1bd3c
--- /dev/null
+++ b/macros/latex209/contrib/manpage/sample.tex
@@ -0,0 +1,230 @@
+% \documentstyle[11pt,twoside,manpage]{report}
+% \begin{document}
+% \date{November 25, 1990}
+%
+% \begin{titlepage}
+% \vspace*{1.0in}
+% \begin{flushright}
+% {\huge\bf OIM C++ Library} \\[.25cm]
+% {\rule[.1in]{4.5in}{.02in}}\\[.25cm]
+% {\large\bf Reference Manual} \\[2.0cm]
+% {\large\bf Version 1.0} \\[4.0cm]
+% {\bf Rong Chen}\\[1.0cm]
+% {Research Services}\\
+% {Office for Information Management}\\
+% {1407 W. Gregory Drive}\\
+% {Urbana, IL 61801}\\
+% {(217)--244--8538}\\
+% \end{flushright}
+% \end{titlepage}
+%
+% \pagenumbering{roman}
+% \tableofcontents
+%
+% \chapter*{Preface}
+%
+% Object-oriented problem solving and object-oriented programming
+% represent a way of thinking and a methodology for computer
+% programming that are quite different from the traditional approaches
+% supported by structured programming languages. The powerful
+% features of object-oriented programming support the concepts that
+% make computer problem solving a more human-like activity and
+% that increase the re-usability of software code. As object-oriented
+% languages become steadily available, object-oriented programming
+% is becoming more and more popular among both system developers
+% and application programmers.
+%
+% \newpage
+%
+% \raggedbottom
+% \pagenumbering{arabic}
+% \pagestyle{headings}
+% \chapter*{Class Descriptions}
+%
+% \begin{manpage}{OIM C++ Library}{Choice}{Version 1.0}
+%
+% \subtitle{Name}
+% Choice --- a set of boxes representing the choices available.
+%
+% \subtitle{Declaration}
+% \#include \<choice.h\>
+%
+% \function{Choice(Point origin, Point corner,
+% int foreground_color, int background_color,
+% int frame_style, int space_in_between,
+% int number_of_choices,
+% const~char\* first_label, $...$ )}
+% Constructs a choice object. Each choice object is a set of boxes
+% representing the choices available. The "origin" and "corner"
+% define the rectangular area inside which the boxes are displayed.
+% The "space_in_between" (in pixels)
+% defines the distance between two adjacent boxes. Depending on
+% whether there is enough room to put all the choices horizontally
+% or vertically in the designated area,
+% the choices will be laid out accordingly. The
+% attributes "foreground_color", "background_color" and "frame_style"
+% define the colors for each box that represents each choice.
+% The number of labels starting with "first_label" must match the
+% number given by "number_of_choices". Each label is displayed within
+% its corresponding box. The choices are displayed
+% as soon as they are created.
+%
+% \function{Choice(int number_of_choices, Boolean is_horizontal = VERTICAL)}
+% Constructs an array of choices or
+% a choice object with boxes of different sizes. The attributes
+% of the actual choices will be defined later using the
+% addItem() operation. Note: It is forbidden to have arguments
+% in the constructors of array objects in C++.
+%
+% \function{\~Choice()}
+% Choice class has an empty destructor.
+%
+% \subtitle{Description}
+% A Choice object is a set of related boxes. It is used to display
+% multiple choices on the screen.
+% A choice may either be selected by pressing a hot key
+% (when mouse is not enabled) or by pressing a mouse button when the mouse
+% cursor is within the intended choice box.
+% The first highlighted character in the text label will be the
+% hot key if the mouse is not enabled, otherwise, the highlighted
+% character will have no effect. For example, label "@N@ext" designates
+% "N" as the hot key for the button if the mouse is not enabled.
+% By default, if the mouse driver is loaded before program execution,
+% the mouse is enabled. When using the mouse to select
+% a choice, the selection is immediate; a hot key must be confirmed
+% by pressing ENTER (carriage return key). Arrow keys can also be used
+% to move the current selection in the direction indicated by the arrows,
+% this also requires an ENTER to confirm.
+%
+% \subtitle{Global \\ Variables}
+% \variable{char host_name[20] = \"rose.cs.uiuc.edu\"}
+% The "host_name" buffer is initialized to the current machine name
+% before the main() function is executed. The machine name is
+% usually declared in a DOS shell variable "OIMUSER".
+%
+% \variable{Boolean mouse_installed}
+% By default, the "mouse_installed" variable is assigned to TRUE if
+% the mouse driver has been installed before program execution;
+% otherwise it is assigned to FALSE. The value may also be changed
+% through enableMouse() and disableMouse() functions.
+%
+% \subtitle{Macros}
+% \function{MAX({\it x}, {\it y})}
+% Returns the maximum of the two comparable objects "x", and "y".
+% This macro is often used to compare integers or real numbers.
+%
+% \function{MIN({\it x}, {\it y})}
+% Returns the minimum of the two comparable objects "x", and "y".
+% This macro is often used to compare integers or real numbers.
+%
+% \subtitle{Public \\ Operations}
+% \function{void addItem(Point origin, Point corner,
+% int foreground_color, int background_color,
+% int frame_style, const~char\* label,
+% int text_color = WHITE,
+% int text_highlight_color = LIGHT_WHITE)}
+% Defines the attributes of a choice box in the array declared by the
+% Choice(int "number_of_choices", Boolean "is_horizontal" = VERTICAL)
+% constructor. It must be called exactly "number_of_choices"
+% times. The first call specifies the first choice, second call specifies
+% the second choice, and so on. The attributes "origin" and "corner"
+% define a box area where the choice item is located on the screen. Other
+% attributes are self-explanatory. This call is particularly useful
+% on program setup pages.
+%
+% \function{Boolean hasValue()}
+% Returns TRUE if the designated choice object has been selected at
+% least once. Graphically,
+% it means one of the choices is rendered in reverse colors. It is
+% sometimes necessary to check if all choice objects on a screen have
+% been selected, so that a program can go on to the next page of screen.
+% If a previous select() call is returned abnormally by pressing an ESC
+% key, this function will return FALSE. Should this occur, the previous
+% value, if any, will also be lost.
+%
+% \subtitle{Virtual \\ Operations}
+%
+% \function{void action(int status)}
+% Defines the behaviors of the choice object when a choice handler
+% has been bonded to the object. This function is called by the
+% event handler when it detects that the choice object has been
+% selected. The default action is to do nothing if no choice handler
+% presents, otherwise, it invokes the choice handler
+% and passes it along with the current status
+% (whatever has been returned from a status() call).
+% Do not modify this function unless it is absolutely necessary because
+% it redefines the semantics of all choice objects.
+%
+% \function{void bind(void \hbox{\rm (\*{\it handler})(int)})}
+% Associates a choice handler function with the choice object. Every
+% time this choice object is invoked, the choice handler is called
+% immediately.
+% The handler is passed along with the current "status"
+% (return value of status() call) as its argument. The default
+% action taken by the event handler can be modified by changing
+% the next function action().
+%
+% \function{Boolean isSelected(Point cursor)}
+% Returns TRUE if a legal hot key is pressed for the
+% the indicated choice object. It also returns TRUE if
+% a mouse button is pressed within the range of the choice object area.
+% This call is used by the event handler to check if this choice object
+% has been selected. It is hardly needed in regular applications.
+% The "cursor" is for mouse cursor in mouse mode or faked with the
+% current keyboard input as the cursor's x coordinate.
+%
+% \subtitle{See Also}
+% Event, Button, Box
+%
+% \subtitle{Author}
+% Rong Chen at the Office for Information Management, UIUC. 9-1-89.
+%
+% \end{manpage}
+% \newpage
+% \begin{verbatim}
+% #include <stdlib.h>
+% #include "choice.h"
+%
+% void handler1(int pick) {
+% Box box(500, 30, 600, 60, LIGHT_CYAN, LIGHT_MAGENTA);
+% box << pick + 1;
+% }
+%
+% void handler2(int pick) {
+% Box box(500, 30, 600, 60, LIGHT_CYAN, LIGHT_MAGENTA);
+% box << (pick==0 ? "Ape" : (pick==1 ? "Bob" : "Car"));
+% }
+%
+% void handler3(int pick) {
+% Box box(500, 30, 600, 60, LIGHT_CYAN, LIGHT_MAGENTA);
+% switch (pick) {
+% case 0: box << "D"; break; case 1: box << "E"; break;
+% case 2: box << "F"; break; case 3: box << "G"; break;
+% case 4: exit(0);
+% }
+% }
+%
+% main() {
+% Point a(100, 100), b(220, 130);
+% Choice c1(a, b, BROWN, RED, ON_BORDER, 0, 4,
+% "@1@", "@2@", "@3@", "@4@");
+% Choice c2(3, HORIZONTAL);
+% c2.addItem(Point(200, 200), Point(260,230),
+% WHITE, BLUE, IN_BORDER, "@A@pe");
+% c2.addItem(Point(270, 200), Point(330,230),
+% WHITE, BLUE, IN_BORDER, "@B@ob");
+% c2.addItem(Point(340, 200), Point(400,230),
+% WHITE, BLUE, IN_BORDER, "@C@ar");
+% a = Point(500, 230); b = Point(550, 330);
+% Choice c3(a, b, GREEN, GRAY, NO_BORDER, 10, 5,
+% "@D@", "@E@", "@F@", "@G@", "@H@");
+% c1.bind(handler1);
+% c2.bind(handler2);
+% c3.bind(handler3);
+%
+% waitForEvents();
+% }
+% \end{verbatim}
+%
+% \end{document}
+%===========================[End of sample.tex]=============================
diff --git a/macros/latex209/contrib/manual/README b/macros/latex209/contrib/manual/README
new file mode 120000
index 0000000000..43bb593714
--- /dev/null
+++ b/macros/latex209/contrib/manual/README
@@ -0,0 +1 @@
+manual.readme \ No newline at end of file
diff --git a/macros/latex209/contrib/manual/man10.sty b/macros/latex209/contrib/manual/man10.sty
new file mode 100644
index 0000000000..074c83877a
--- /dev/null
+++ b/macros/latex209/contrib/manual/man10.sty
@@ -0,0 +1,147 @@
+% man10.sty 11 Aug 87
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+\def\@listi{\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+\evensidemargin .5in \oddsidemargin 1.5in
+\marginparwidth .75in \marginparsep 7pt
+ \topmargin .75in \headheight 12pt \headsep .25in \footheight 12pt \footskip
+.35in
+
+\textheight 504pt \textwidth 4.5in \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 6.65pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 15pt \topsep 8pt plus 2pt minus 4pt
+\partopsep 2pt plus 1pt minus 1pt \itemsep 4pt plus 2pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\preface{\chapter*{Preface\@mkboth{PREFACE}{PREFACE}}
+ \addcontentsline{toc}{chapter}{Preface}}
+
+\def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+\@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+\secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+ \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+\Huge \bf #1\@endpart}
+\def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+\thispagestyle{empty}
+ \newpage
+ \fi \if@tempswa \twocolumn \fi}
+\def\@spart#1{\Huge \bf #1\@endpart}
+
+
+\def\@makechapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \huge\bf \@chapapp{} \thechapter \par
+ \vskip 20pt \fi \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\@makeschapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\chapter{\cleardoublepage
+\setcounter{lastchapage}{\value{page}}
+\addtocounter{lastchapage}{-1}
+\thispagestyle{plain} \global\@topnum\z@
+\@afterindentfalse \secdef\@chapter\@schapter}
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \ifnum\c@chapnumber>\c@chapter \def\thechapnumber{\Alph{chapnumber}}\fi
+ \refstepcounter{chapter}
+ \setcounter{chapnumber}{\c@chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#1}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+\addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
+\@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{#2}
+ \@afterheading \fi}
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}
+ \@afterheading\fi}
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+\def\chaptermark#1{}
+
+\setcounter{secnumdepth}{2}
+
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{Appendix}
+ \def\thechapter{\Alph{chapter}}}
+
+
+\leftmargini 25pt
+\leftmarginii 22pt \leftmarginiii 18.7pt \leftmarginiv 17pt \leftmarginv 10pt
+\leftmarginvi 10pt
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 4pt plus 2pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/manual/man11.sty b/macros/latex209/contrib/manual/man11.sty
new file mode 100644
index 0000000000..91ccaf8c8e
--- /dev/null
+++ b/macros/latex209/contrib/manual/man11.sty
@@ -0,0 +1,147 @@
+% man11.sty 11 Aug 87
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+\evensidemargin .25in \oddsidemargin 1.25in
+\marginparwidth 1in \marginparsep 7pt
+ \topmargin .73in \headheight 12pt \headsep .275in \footheight 12pt \footskip
+.38in
+
+\textheight 530.4pt \textwidth 5in \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 7.7pt
+\skip\footins 10pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 17pt \topsep 9pt plus 3pt minus 5pt
+\partopsep 3pt plus 1pt minus 2pt \itemsep 4.5pt plus 2pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\preface{\chapter*{Preface\@mkboth{PREFACE}{PREFACE}}
+ \addcontentsline{toc}{chapter}{Preface}}
+
+\def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+\@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+\secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+ \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+\Huge \bf #1\@endpart}
+\def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+\thispagestyle{empty}
+ \newpage
+ \fi \if@tempswa \twocolumn \fi}
+\def\@spart#1{\Huge \bf #1\@endpart}
+
+\def\@makechapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \huge\bf \@chapapp{} \thechapter \par
+ \vskip 20pt \fi \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\@makeschapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\chapter{\cleardoublepage
+\setcounter{lastchapage}{\value{page}}
+\addtocounter{lastchapage}{-1}
+\thispagestyle{plain} \global\@topnum\z@
+\@afterindentfalse \secdef\@chapter\@schapter}
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \ifnum\c@chapnumber>\c@chapter \def\thechapnumber{\Alph{chapnumber}}\fi
+ \refstepcounter{chapter}
+ \setcounter{chapnumber}{\c@chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#1}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+\addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
+\@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{#2}
+ \@afterheading \fi}
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}
+ \@afterheading\fi}
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+\def\chaptermark#1{}
+
+\setcounter{secnumdepth}{2}
+
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{Appendix}
+ \def\thechapter{\Alph{chapter}}}
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 4.5pt plus 2pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/manual/man12.sty b/macros/latex209/contrib/manual/man12.sty
new file mode 100644
index 0000000000..152f667670
--- /dev/null
+++ b/macros/latex209/contrib/manual/man12.sty
@@ -0,0 +1,147 @@
+% man12.sty 11 Aug 87
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt
+\def\@listi{\parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\normalsize
+
+\evensidemargin .25in \oddsidemargin 1.25in
+\marginparwidth 1in \marginparsep 7pt
+ \topmargin .73in \headheight 12pt \headsep .275in \footheight 12pt \footskip
+30pt
+
+\textheight 536.5pt \textwidth 5in \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 8.4pt
+\skip\footins 10.8pt plus 4pt minus 2pt
+\floatsep 14pt plus 2pt minus 4pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt \@maxsep 20pt \dblfloatsep 14pt plus 2pt
+minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 10pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 10pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+
+\parskip 0pt plus 1pt \parindent 1.5em \topsep 10pt plus 4pt minus 6pt
+\partopsep 3pt plus 2pt minus 2pt \itemsep 5pt plus 2.5pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\preface{\chapter*{Preface\@mkboth{PREFACE}{PREFACE}}
+ \addcontentsline{toc}{chapter}{Preface}}
+
+\def\part{\cleardoublepage \thispagestyle{empty} \if@twocolumn \onecolumn
+\@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+\secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+\addtocontents{toc}{\protect\contentsline{part}{\thepart \hspace{1em}#1}{}}\else
+\addtocontents{toc}{\protect\contentsline{part}{#1}{}}\fi \markboth{}{}
+ \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+\Huge \bf #1\@endpart}
+\def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+\thispagestyle{empty}
+ \newpage
+ \fi \if@tempswa \twocolumn \fi}
+\def\@spart#1{\Huge \bf #1\@endpart}
+
+\def\@makechapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \huge\bf \@chapapp{} \thechapter \par
+ \vskip 20pt \fi \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\@makeschapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\chapter{\cleardoublepage
+\setcounter{lastchapage}{\value{page}}
+\addtocounter{lastchapage}{-1}
+\thispagestyle{plain} \global\@topnum\z@
+\@afterindentfalse \secdef\@chapter\@schapter}
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \ifnum\c@chapnumber>\c@chapter \def\thechapnumber{\Alph{chapnumber}}\fi
+ \refstepcounter{chapter}
+ \setcounter{chapnumber}{\c@chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#1}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+\addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
+\@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{#2}
+ \@afterheading \fi}
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}
+ \@afterheading\fi}
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+\def\chaptermark#1{}
+
+\setcounter{secnumdepth}{2}
+
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{Appendix}
+ \def\thechapter{\Alph{chapter}}}
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 5pt plus 2.5pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/manual/manual.readme b/macros/latex209/contrib/manual/manual.readme
new file mode 100644
index 0000000000..946916d827
--- /dev/null
+++ b/macros/latex209/contrib/manual/manual.readme
@@ -0,0 +1,52 @@
+Ken,
+
+ Following this message will be four messages containing the input files for
+the MANUAL Style. The MANUAL Style is based on the BOOK Style, but numbers
+pages by chapter-page_in_chapter. It also defines \preface and a couple of
+other items.
+
+ I orignally got the style off the VAX SIG Tape for Fall 1987. It was
+placed there by Harry Flowers. Here is the statement on his submission and
+his listing on the style:
+
+*****************************************************************************
+CUSTOM COMPUTER APPLICATIONS - A subsidiary of Traveler's Express
+Fall 1987 DECUS Submissions
+
+Most of the submissions are DCL command procedures. Some I wouldn't be without
+and others are merely useful. Several are documented internally. A few of the
+procedures require VMS V4.4 or later (GOSUBs). At any rate, I suggest reading
+the command procedures before using them. As always, neither myself nor Custom
+Computer Applications accepts any responsibility for the use or reliability of
+these submissions. They may not be sold for profit, but may be distributed
+freely otherwise. Enjoy!
+ Harry Flowers
+ Custom Computer Applications
+ 1780 Moriah Woods Blvd. #6
+ Memphis, TN 38117
+
+
+
+ LaTeX Document Style
+MANUAL.STY -+A document style based on the "book" style, which supports
+MAN10.STY |page numbering by chapter, LaTeXing only selected pages, and
+MAN11.STY |always produces right-handed odd-numbered pages (chapters
+MAN12.STY -+start on right-hand pages). Details inside MANUAL.STY.
+
+*****************************************************************************
+
+
+I have modified the style files to add the \preface and to correct a problem
+with page numbering for the \part. I think the style shoudl be included in
+you style collection.
+
+--------------------------------------------------------------------------------
+| M. Edward (Ted) Nieland - Systems Analyst |
+|------------------------------------------------------------------------------|
+| US Snail: | Arpa Internet: |
+| Systems Research Laboratories, Inc. | TNIELAND@WPAFB-AAMRL.ARPA |
+| 2800 Indian Ripple Road WP 196 | TNIELAND%FALCON@WPAFB-AAMRL.ARPA |
+| Dayton, OH 45440 | |
+|------------------------------------------------------------------------------|
+| A T & T: (513) 255-8846/8760/5156 |
+--------------------------------------------------------------------------------
diff --git a/macros/latex209/contrib/manual/manual.sty b/macros/latex209/contrib/manual/manual.sty
new file mode 100644
index 0000000000..7f78da9502
--- /dev/null
+++ b/macros/latex209/contrib/manual/manual.sty
@@ -0,0 +1,290 @@
+% manual.sty 11-Aug-87
+%
+% This style is identical to the book style with the following exceptions:
+%
+% 1) \oddsidemargin and \evensidemargin dimensions have been swapped
+% in the manXX.sty files so that the odd pages are right-handed
+%
+% 2) The title page made with \maketitle is now numbered -1 instead
+% of zero so that it is still a right-handed page
+%
+% The effect of these changes is that chapters always start on the
+% right-handed pages instead of always starting on the left-handed side.
+%
+% 3) Code to generate selected pages: see notes at the end of this file.
+%
+% 4) Added new pagenumbering "bychapter" which numbers pages by chapter.
+%
+% 5) Corrected \part so that page numbers are not used in the table of
+% contents entry.
+%
+% 6) Added \preface for a Preface chapter after a table of contents.
+% Warning: When using \preface, you must run the document THREE
+% times to get the page numbering for the table of contents and preface
+% correct. (T.N. 4/4/88)
+%
+\typeout{Document Style `manual'. Release 4 April 1988}
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@twosidetrue \@mparswitchtrue \def\ds@draft{\overfullrule 5pt}
+\@options
+\input man1\@ptsize.sty\relax
+
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {chapter}
+\newcounter {section}[chapter]
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart {\Roman{part}}
+\def\thechapter {\arabic{chapter}}
+\def\thesection {\thechapter.\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+\def\@chapapp{Chapter}
+
+
+\def\@pnumwidth{1.9em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{2}
+
+
+\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+\def\l@part#1#2{\addpenalty{-\@highpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+
+
+\def\l@preface#1#2{\pagebreak[3]
+ \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@chapter#1#2{\pagebreak[3]
+ \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
+\def\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
+\def\l@paragraph{\@dottedtocline{4}{10em}{5em}}
+\def\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
+\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}\if@restonecol\twocolumn
+ \fi}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}\if@restonecol\twocolumn
+ \fi}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\chapter*{Bibliography\@mkboth
+ {BIBLIOGRAPHY}{BIBLIOGRAPHY}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+\@addtoreset{footnote}{chapter}
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+
+\newcounter{figure}[chapter]
+\def\thefigure{\thechapter.\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}[chapter]
+\def\thetable{\thechapter.\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\def\maketitle{\begin{titlepage}
+ \let\footnotesize\small \let\footnoterule\relax \setcounter{page}{-1}
+ \null
+ \vfil
+ \vskip 60pt \begin{center}
+ {\LARGE \@title \par} \vskip 3em {\large \lineskip .75em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1.5em {\large \@date \par} \end{center} \par
+\@thanks
+\vfil
+\null
+\end{titlepage}
+\setcounter{footnote}{0} \let\thanks\relax
+\gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\maketitle\relax}
+
+
+\mark{{}{}}
+
+\def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}{}}\def\sectionmark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}}}
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\@addtoreset{equation}{chapter}
+\def\theequation{\thechapter.\arabic{equation}}
+
+
+\ps@headings \pagenumbering{arabic} \onecolumn
+%
+%
+\newcounter{lastchapage}\newcounter{chapage}\newcounter{chapnumber}
+\def\bychapter#1{\@bychapter{\@nameuse{c@#1}}}
+\def\@bychapter#1{\ifnum\c@chapnumber<1 \else\thechapnumber{-}\thechapage\fi}
+\pagenumbering{bychapter}
+%\def\numberline#1{\advance\hangindent0.5in \hbox to0.5in{#1\hfil}}
+%
+% PRINT SELECTED PAGES
+%
+% Create a file pages.tex which contains the pages you want printed, one
+% per line, in the order they will be generated. After the last page number
+% has been matched, all further pages will be printed. If you only want to
+% print the pages listed, put -999999999 as the last page number in the file.
+%
+% From TUGboat, Volume 8 (1987), No. 2, page 217 (with TeX \pageno replaced
+% by LaTeX \c@page):
+%
+\let\Shipout=\shipout
+\newread\pages \newcount\nextpage \openin\pages=pages
+\def\getnextpage{\ifeof\pages\else
+ {\endlinechar=-1\read\pages to\next
+ \ifx\next\empty % in this case we should have eof now
+ \else\global\nextpage=\next\fi}\fi}
+\ifeof\pages\else\message{PAGES.TEX found, generating only the requested pages!}
+ \getnextpage\fi
+\def\shipout{
+\setcounter{chapage}{\c@page}
+\addtocounter{chapage}{-\value{lastchapage}}
+\message{(\thechapnumber-\thechapage)}
+ \ifeof\pages\let\next=\Shipout
+ \else\ifnum\c@page=\nextpage\getnextpage\let\next=\Shipout
+ \else\let\next=\Tosspage\fi\fi \next}
+\newbox\garbage \def\Tosspage{\deadcycles=0\setbox\garbage=}
diff --git a/macros/latex209/contrib/megatape/brecht.tex b/macros/latex209/contrib/megatape/brecht.tex
new file mode 100644
index 0000000000..340ae5a519
--- /dev/null
+++ b/macros/latex209/contrib/megatape/brecht.tex
@@ -0,0 +1,78 @@
+% Demo-Input-File for TAPEDEMO.TEX and MEGADEMO.TEX
+% shows the difference between TAPE.STY and MEGATAPE.STY
+%
+%
+\renewcommand{\globaltapeid}{\footnotesize\sf Hope You\\ like it}
+\renewcommand{\baselinestretch}{0.5}
+%
+%
+% --------------------------------------------------------- Side A
+\album{brecht.1} % ---------------------------------------- Album-ID
+{% -------------------------------------------------------- Stuff for the side
+\begin{flushleft}{\bf Side A}\end{flushleft}
+\begin{enumerate}
+{\scriptsize
+\item Intro (Prckner)
+\item Moritate von Mackie Messer \\
+ (Sting)
+\item Die Seer\"auber-Jenny (Nannini)
+\item Der Kanonensong (Bruce)
+\item Das Liebesduett (Sting/Nannini)
+\item Die Ballade von der sexuellen \\
+ H\"origkeit (Sting)
+\item Lieder aus Mahagoni (instr.)
+\item Alabama-Song (Nannini)
+\item Ach bedenken Sie, Herr Jakob \\
+ Schmidt (Nannini)
+\item Wie man sich bettet... (Nannini)
+\item Lost in the stars (Bruce)
+\item Bilbao-Song (Bruce)
+\item Surabaya Johnny (Nannini)
+}%
+\end{enumerate}
+}%
+% ---------------------------------------------------------- Title
+{\footnotesize\sf STING,\\ GIANNA NANNINI,\\ JACK BRUCE\\ \& EBERHARD SCHOENER}%
+% ---------------------------------------------------------- Backflap
+{\footnotesize {\it Recorded live 1.5.1987 at \\
+Deutsches Schauspielhaus, \\
+Hamburg}\\[1mm]
+DOLBY B}
+%
+%
+%
+%
+% --------------------------------------------------------- Side B
+\album{brecht.2} % ---------------------------------------- Album-ID
+{% -------------------------------------------------------- Stuff for the side
+\begin{flushright}{\bf Side B}\end{flushright}
+\begin{enumerate}
+{\scriptsize
+\item Surabaya Johnny (Nannini)
+\item Lonely house (Sting)
+\item September-Song (Bruce)
+\item Lullaby (instr.)
+\item Soldato in amorato (Nannini)
+\item 12-Ton-Serie aus Lost in the stars \\
+ (Schoener)
+\item Wie der Wind weht (Sting)
+\item An meinem kleinen Radio- \\ Apparat (Sting)
+\item Ballad of Mac The Knife (Sting) *
+\item Ballad of the soldier's wife \\
+ (Marianne Faithfull) *
+}%
+\end{enumerate}
+}%
+% ---------------------------------------------------------- Title
+{\normalsize\sf ... machen \\[1mm] BRECHT / WEILL}
+% ---------------------------------------------------------- Backflap
+{\footnotesize {\it except * taken from the album\\ "Lost in the Stars", \\
+The Music of Kurt Weill \\ (c) (p) 1985 A\&M Records
+}}
+
+
+%----------------------------------------------------------- Make the Cassette
+% Optional explicit title
+% Try out and delete the '%'
+\maketape[\sf from \\ TV]{brecht.1}{brecht.2}%[{\bf Sting, G. Nannini, J. Bruce, E. Schoener}\\machen {\large\sc Brecht/Weill}]
+
diff --git a/macros/latex209/contrib/megatape/megademo.tex b/macros/latex209/contrib/megatape/megademo.tex
new file mode 100644
index 0000000000..c3a1c03562
--- /dev/null
+++ b/macros/latex209/contrib/megatape/megademo.tex
@@ -0,0 +1,13 @@
+\documentstyle[megatape]{article}
+\renewcommand{\globaltapeid}{\footnotesize\sf Hope You\\ like it}
+\renewcommand{\baselinestretch}{0.5}
+\parindent0pt
+\begin{document}
+{\bf MEGADEMO, gesetzt mit MEGATAPE.STY:} \\
+\\
+Gengend Platz in den Boxen \\
+
+\vspace{2cm}
+
+\input{brecht}
+\end{document}
diff --git a/macros/latex209/contrib/megatape/megatape.doc b/macros/latex209/contrib/megatape/megatape.doc
new file mode 100644
index 0000000000..01ba282ffa
--- /dev/null
+++ b/macros/latex209/contrib/megatape/megatape.doc
@@ -0,0 +1,178 @@
+% tape document style for LaTeX 2.09
+% podar@sbcs (Sunil Podar) June 20,1986
+% Dept. of Applied Math., SUNY at Stony Brook
+% You may use this file for whatever purpose you wish. Please leave this
+% notice, identifying original author, intact.
+
+\typeout{}
+\typeout{Document Style 'tape'. Released 20 June 1986}
+\typeout{Renamed to 'megatape'. Revised 16 October 1991 by Martin Nickel}
+\typeout{ThanX to Sunil Podar for his basic work !}
+\typeout{}
+% The changes are documented from line 111 to 134
+%
+% This documentstyle is for making casette tape labels. Two labels can be
+% fit on a page with a \newpage command after every two labels.
+% It should be invoked with \documentstyle[tape]{article}.
+% --- should have made a standalone documentstyle, but was lazy; would
+% involve unnecessary dirty work.
+% If more stuff needs to be fit on a label, reduce the \baselinestretch in
+% the document and/or use smaller fonts.
+% Two commands are implemented:
+% \album{album-id}{stuff for the side}{title}{addendum that goes on backflap}
+% \maketape[tape-id]{album-id}{album-id}[optional explicit title]
+%---------------------------------------------------------------------------
+\makeatletter
+\textwidth 5in
+\textheight 9in
+\pagestyle{empty}
+\renewcommand{\baselinestretch}{0.85}
+\parskip 0pt plus 1pt
+%\parindent=0pt %% done inside \maketape
+\hbadness=3000% will not complain about every little underfull hbox.
+%
+\leftmargini 12pt
+\leftmarginii 10pt % more than two level deep not expected!
+\labelsep 3pt
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\topsep 2pt plus 1pt minus 1pt
+\partopsep 2pt plus 1pt minus 1pt
+\parsep 1pt
+\itemsep 1pt
+
+%% many paragraphing environments use list's and fiddle with the parameter
+%% values, thus need to include them in the \def of \@listi.
+\def\@listi{\leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \partopsep 2pt plus 1pt minus 1pt
+ \parsep 1pt
+ \itemsep 1pt}
+
+%%removed the \def of \@listi from \small and \footnotesize
+%% --- causes problems when used in center environment.
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt%------
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt}
+%
+%% following two redefined to get the label flushleft.
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{\rlap{##1}\hss}}\fi}
+
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne
+\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+\list{\csname\@itemitem\endcsname}{\def\makelabel##1{\rlap{##1}\hss}}\fi}
+
+%----------------
+\setlength{\doublerulesep}{1mm}
+\setlength{\arrayrulewidth}{0.8pt}
+\newdimen\tapeidwidth
+\newdimen\@titlewidth
+%------------------------------------------------------------------------
+% Here are the user controllable parameters, specific to \makelabel:
+% \globaltapeid goes on the little box on the left side of title. Typical
+% thing to put there would be name. e.g.
+% \renewcommand{\globaltapeid}{\footnotesize\sf Sunil\\Podar}
+\def\globaltapeid{} %changed via a \renewcommand
+\def\tapeidmarker{\vline} %changed via a \renewcommand
+\tapeidwidth=0.35in %changed via a \setlength{\tapeidwidth}{..} command
+% We put a \rule of 0in width and appropriate height along with the
+% \tapeidmarker for the \vline to work since it is in a makebox[0in].
+%-----------------------------------------------------------------------
+% \album{5}{side}{title}{addendum} => defines \album@v@s = side and
+% \album@v@t = title and \album@v@a = addendum
+% the title is the one used by \maketape as default.
+%
+\long\def\album#1#2#3#4{%
+\@namedef{album.#1.s}{#2}% side
+\@namedef{album.#1.t}{#3}% title
+\@namedef{album.#1.a}{#4}}% addendum
+%------------------------------------------------------------------
+%\maketape[tape-id]{album-id1}{album-id2}[explicit title formatted as a centered one entry]
+% -- makes a tape label of albums identified by album-id1 andalbum-id2. The
+% titles are picked up from the \album definition; if an explicit centered
+% label is desired then specify it as the third (optional) argument.
+%
+\def\maketape{\@ifnextchar[{\@maketape}{\@maketape[]}}
+\def\@maketape[#1]#2#3{\@ifnextchar[%
+{\@imaketape[#1]{#2}{#3}}{\@imaketape[#1]{#2}{#3}[@]}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% I've made the following changes: %
+% %
+% old 'tape.sty' new 'megatape.sty' %
+% %
+%ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ %
+%³ ³ ³ 1 ³ %
+%³ ³ ÃÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄ´ %
+%³ 5 ³ ³ 2 ³ 3 ³ 4 ³ %
+%³ ³ ÃÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄ´ %
+%³ ³ ÄÄÄÄÄÄÄ> ³ ³ %
+%ÃÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄ´ ³ ³ %
+%³ 2 ³ 3 ³ 4 ³ ³ 5 ³ %
+%ÃÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄ´ ³ ³ %
+%³ 1 ³ ³ ³ %
+%ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ %
+% ³ ³ %
+% ³ ³ %
+% ³ 6 ³ %
+% ³ ³ %
+% ³ ³ %
+% ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@imaketape[#1]#2#3[#4]{{\parindent=0pt
+\tabcolsep=1pt %want explicit control on spacing
+\begin{tabular}{|l@{\hspace{0.1in}}|@{\hspace{0.1in}}l|}
+%%%%%%%%%%%
+% field 1 %
+%%%%%%%%%%%
+\hline
+%\makebox[0in][l]{\hskip-2mm\rule[-0.72in]{0.4mm}{0.9in}}%
+\makebox[0in][l]{\hskip-2mm\rule[-0.45in]{0.4mm}{0.55in}}%
+\ \minipage[t]{1.84in}\@nameuse{album.#2.a}\ \endminipage &%
+% need \ in minipage to enforce size in case any of the minipage args are null
+\minipage[t]{1.84in}\@nameuse{album.#3.a}\endminipage\ \\
+\hline
+%%%%%%%%%%%%%%%%%%%%%
+% Fields 2, 3 and 4 %
+%%%%%%%%%%%%%%%%%%%%%
+\hline
+\multicolumn{2}{|@{}l@{}|}{%
+\makebox[0in][l]{\hskip-1.8mm\rule[-0.2in]{0.4mm}{0.46in}}%
+\,\parbox{\tapeidwidth}{\raggedright\globaltapeid\ }%
+\makebox[0in]{\tapeidmarker\rule[-0.2in]{0in}{0.46in}}%
+\@titlewidth=1.97in \advance\@titlewidth by-\tapeidwidth%
+\ifx#4@%
+\parbox{\@titlewidth}{\centering \@nameuse{album.#2.t}\ }%
+\parbox{\@titlewidth}{\centering \@nameuse{album.#3.t}\ }%
+\else\@titlewidth=2\@titlewidth\parbox{\@titlewidth}{\centering #4\ }%
+\fi%
+\makebox[0in]{\tapeidmarker\rule[-0.2in]{0in}{0.46in}}%
+\parbox{\tapeidwidth}{\raggedleft #1\ }\,}\\
+\hline
+%
+%%%%%%%%%%%%%%%%%%
+% Fields 5 and 6 %
+%%%%%%%%%%%%%%%%%%
+\hline
+\makebox[0in][l]{\hskip-2mm\rule[-4.88in]{0.4mm}{5in}\hskip1.2mm\rule[-2.5in]{4in}{0.4mm}}%
+\ \minipage[t]{1.84in}\@nameuse{album.#2.s}\endminipage &%
+\minipage[t]{1.84in}\@nameuse{album.#3.s}\endminipage\ \\
+\hline
+%
+\end{tabular}%
+\par\vspace*{0.2in}}}
+%------------------------------------------------------------------
+\makeatother
diff --git a/macros/latex209/contrib/megatape/megatape.sty b/macros/latex209/contrib/megatape/megatape.sty
new file mode 100644
index 0000000000..f512c9fd7c
--- /dev/null
+++ b/macros/latex209/contrib/megatape/megatape.sty
@@ -0,0 +1,153 @@
+% tape document style for LaTeX 2.09
+% podar@sbcs (Sunil Podar) June 20,1986
+% Dept. of Applied Math., SUNY at Stony Brook
+% You may use this file for whatever purpose you wish. Please leave this
+% notice, identifying original author, intact.
+
+\typeout{}
+\typeout{Document Style 'tape'. Released 20 June 1986}
+\typeout{Renamed to 'megatape'. Revised 16 October 1991 by Martin Nickel}
+\typeout{ThanX to Sunil Podar for his basic work !}
+\typeout{}
+%
+% This documentstyle is for making casette tape labels. Two labels can be
+% fit on a page with a \newpage command after every two labels.
+% It should be invoked with \documentstyle[tape]{article}.
+% --- should have made a standalone documentstyle, but was lazy; would
+% involve unnecessary dirty work.
+% If more stuff needs to be fit on a label, reduce the \baselinestretch in
+% the document and/or use smaller fonts.
+% Two commands are implemented:
+% \album{album-id}{stuff for the side}{title}{addendum that goes on backflap}
+% \maketape[tape-id]{album-id}{album-id}[optional explicit title]
+%---------------------------------------------------------------------------
+\makeatletter
+\textwidth 5in
+\textheight 9in
+\pagestyle{empty}
+\renewcommand{\baselinestretch}{0.85}
+\parskip 0pt plus 1pt
+%\parindent=0pt %% done inside \maketape
+\hbadness=3000% will not complain about every little underfull hbox.
+%
+\leftmargini 12pt
+\leftmarginii 10pt % more than two level deep not expected!
+\labelsep 3pt
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\topsep 2pt plus 1pt minus 1pt
+\partopsep 2pt plus 1pt minus 1pt
+\parsep 1pt
+\itemsep 1pt
+
+%% many paragraphing environments use list's and fiddle with the parameter
+%% values, thus need to include them in the \def of \@listi.
+\def\@listi{\leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \partopsep 2pt plus 1pt minus 1pt
+ \parsep 1pt
+ \itemsep 1pt}
+
+%%removed the \def of \@listi from \small and \footnotesize
+%% --- causes problems when used in center environment.
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt%------
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt}
+%
+%% following two redefined to get the label flushleft.
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{\rlap{##1}\hss}}\fi}
+
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne
+\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+\list{\csname\@itemitem\endcsname}{\def\makelabel##1{\rlap{##1}\hss}}\fi}
+
+%----------------
+\setlength{\doublerulesep}{1mm}
+\setlength{\arrayrulewidth}{0.8pt}
+\newdimen\tapeidwidth
+\newdimen\@titlewidth
+%------------------------------------------------------------------------
+% Here are the user controllable parameters, specific to \makelabel:
+% \globaltapeid goes on the little box on the left side of title. Typical
+% thing to put there would be name. e.g.
+% \renewcommand{\globaltapeid}{\footnotesize\sf Sunil\\Podar}
+\def\globaltapeid{} %changed via a \renewcommand
+\def\tapeidmarker{\vline} %changed via a \renewcommand
+\tapeidwidth=0.35in %changed via a \setlength{\tapeidwidth}{..} command
+% We put a \rule of 0in width and appropriate height along with the
+% \tapeidmarker for the \vline to work since it is in a makebox[0in].
+%-----------------------------------------------------------------------
+% \album{5}{side}{title}{addendum} => defines \album@v@s = side and
+% \album@v@t = title and \album@v@a = addendum
+% the title is the one used by \maketape as default.
+%
+\long\def\album#1#2#3#4{%
+\@namedef{album.#1.s}{#2}% side
+\@namedef{album.#1.t}{#3}% title
+\@namedef{album.#1.a}{#4}}% addendum
+%------------------------------------------------------------------
+%\maketape[tape-id]{album-id1}{album-id2}[explicit title formatted as a centered one entry]
+% -- makes a tape label of albums identified by album-id1 andalbum-id2. The
+% titles are picked up from the \album definition; if an explicit centered
+% label is desired then specify it as the third (optional) argument.
+%
+\def\maketape{\@ifnextchar[{\@maketape}{\@maketape[]}}
+\def\@maketape[#1]#2#3{\@ifnextchar[%
+{\@imaketape[#1]{#2}{#3}}{\@imaketape[#1]{#2}{#3}[@]}}
+\def\@imaketape[#1]#2#3[#4]{{\parindent=0pt
+\tabcolsep=1pt %want explicit control on spacing
+\begin{tabular}{|l@{\hspace{0.1in}}|@{\hspace{0.1in}}l|}
+%%%%%%%%%%%
+% field 1 %
+%%%%%%%%%%%
+\hline
+%\makebox[0in][l]{\hskip-2mm\rule[-0.72in]{0.4mm}{0.9in}}%
+\makebox[0in][l]{\hskip-2mm\rule[-0.45in]{0.4mm}{0.55in}}%
+\ \minipage[t]{1.84in}\@nameuse{album.#2.a}\ \endminipage &%
+% need \ in minipage to enforce size in case any of the minipage args are null
+\minipage[t]{1.84in}\@nameuse{album.#3.a}\endminipage\ \\
+\hline
+%%%%%%%%%%%%%%%%%%%%%
+% Fields 2, 3 and 4 %
+%%%%%%%%%%%%%%%%%%%%%
+\hline
+\multicolumn{2}{|@{}l@{}|}{%
+\makebox[0in][l]{\hskip-1.8mm\rule[-0.2in]{0.4mm}{0.46in}}%
+\,\parbox{\tapeidwidth}{\raggedright\globaltapeid\ }%
+\makebox[0in]{\tapeidmarker\rule[-0.2in]{0in}{0.46in}}%
+\@titlewidth=1.97in \advance\@titlewidth by-\tapeidwidth%
+\ifx#4@%
+\parbox{\@titlewidth}{\centering \@nameuse{album.#2.t}\ }%
+\parbox{\@titlewidth}{\centering \@nameuse{album.#3.t}\ }%
+\else\@titlewidth=2\@titlewidth\parbox{\@titlewidth}{\centering #4\ }%
+\fi%
+\makebox[0in]{\tapeidmarker\rule[-0.2in]{0in}{0.46in}}%
+\parbox{\tapeidwidth}{\raggedleft #1\ }\,}\\
+\hline
+%
+%%%%%%%%%%%%%%%%%%
+% Fields 5 and 6 %
+%%%%%%%%%%%%%%%%%%
+\hline
+\makebox[0in][l]{\hskip-2mm\rule[-4.88in]{0.4mm}{5in}\hskip1.2mm\rule[-2.5in]{4in}{0.4mm}}%
+\ \minipage[t]{1.84in}\@nameuse{album.#2.s}\endminipage &%
+\minipage[t]{1.84in}\@nameuse{album.#3.s}\endminipage\ \\
+\hline
+%
+\end{tabular}%
+\par\vspace*{0.2in}}}
+%------------------------------------------------------------------
+\makeatother
diff --git a/macros/latex209/contrib/megatape/read.me b/macros/latex209/contrib/megatape/read.me
new file mode 100644
index 0000000000..e06e73afa8
--- /dev/null
+++ b/macros/latex209/contrib/megatape/read.me
@@ -0,0 +1,46 @@
+This is the complete release of the MEGATAPE-package
+----------------------------------------------------
+
+
+The FTP-server 129.69.1.12 (Uni Stuttgart) contains an incomplete version
+of this package ! To run the demos you also need BRECHT.TEX.
+
+The contents of the package:
+----------------------------
+MEGATAPE.DOC Documented version of the MEGATAPE-Style
+MEGATAPE.STY Undocumented version of the MEGATAPE-Style
+TAPE.STY Original TAPE-Style from Sunil Podar
+MEGADEMO.TEX Demo for MEGATAPE.STY, needs BRECHT.TEX
+TAPEDEMO.TEX Demo for TAPE.STY, needs BRECHT.TEX
+BRECHT.TEX Input-File for MEGADEMO.TEX and TAPEDEMO.TEX
+READ.ME This file
+
+
+To compare the output of TAPE.STY and MEGATAPE.STY, tex' the demos:
+
+ glatex tapedemo
+ glatex megademo
+
+Both use the same input-file (BRECHT.TEX) but with different style-files.
+
+Take a look at the output:
+
+ v tapedemo
+ v megademo
+
+Do You see the differences ? I hope You see them ...
+
+
+
+Nevertheless thanks to Sunil Podar for his basic works on TAPE.STY.
+
+
+
+
+Martin Nickel
+Seminar fr Wirtschafts- und Sozialstatistik
+Universit„t zu K”ln
+Albertus-Magnus-Platz
+W-5000 K”ln 41
+
+e-mail: nickel@mx500.wiso.uni-koeln.de
diff --git a/macros/latex209/contrib/megatape/tape.sty b/macros/latex209/contrib/megatape/tape.sty
new file mode 120000
index 0000000000..9f035590f1
--- /dev/null
+++ b/macros/latex209/contrib/megatape/tape.sty
@@ -0,0 +1 @@
+../tape/tape.sty \ No newline at end of file
diff --git a/macros/latex209/contrib/megatape/tapedemo.tex b/macros/latex209/contrib/megatape/tapedemo.tex
new file mode 100644
index 0000000000..62e3cadb4e
--- /dev/null
+++ b/macros/latex209/contrib/megatape/tapedemo.tex
@@ -0,0 +1,12 @@
+\documentstyle[tape]{article}
+\renewcommand{\globaltapeid}{\footnotesize\sf Hope You\\ like it}
+\renewcommand{\baselinestretch}{0.5}
+\parindent0pt
+\begin{document}
+{\bf TAPEDEMO, gesetzt mit TAPE.STY:} \\
+\\
+Hoffnungslos berfllte Boxen, Falten zwecklos \\
+\vspace{1cm}
+
+\input{brecht}
+\end{document}
diff --git a/macros/latex209/contrib/memo/memo.sty b/macros/latex209/contrib/memo/memo.sty
new file mode 100644
index 0000000000..38e9122239
--- /dev/null
+++ b/macros/latex209/contrib/memo/memo.sty
@@ -0,0 +1,320 @@
+% memo.sty 22 Nov 88
+\typeout{Document Style 'memo'. Released 22 November 1988}
+%this is the standard AF memo
+%HISTORY: 16 Apr 87: original release
+% 22 Nov 88: added attachments macro
+%it uses the following info defined in any order
+% \from{..} printed in the FROM block
+% \to{..} printed in the TO block
+% \subject{..} printed in the SUBJECT block
+% \date{..} if specified used in the date area, else the current date is used
+% \signature{..} printed after memo as your signature block
+% \attach{#-of-attachments}{attach-list} creates attachments
+% #-of-attachments is set in form '# Atch' or 'Atch' if empty
+% attach-list is set in a 2in paragraph tabular environment so
+% anything that works in that environment will work here.
+% The text of each attachment should be seperated by \\.
+% Numbering is up to you. See example.
+% \begin{memo} follow this with your text
+% \end{memo} follow your text with this
+% You also need to use \begin{document} and \end{document}
+% You can have multiple line from, to, subject and signature blocks, just
+% separate the lines with \\
+% A separate style option is available called mfr which will only print the
+% subject block and print MEMO FOR RECORD at top of page.
+% send questions/suggestions to Capt Mark Roth, ENG, 513-255-3576,
+% mroth@afit.af.mil
+%
+% Example:
+% \documentstyle{memo} %or \documentstyle[mfr]{memo} for memo-for-rec
+% \to{AF/CC}
+% \from{DOD/CC}
+% \subject{Appreciation}
+% \date{29 Feb 1988}
+% \attach{2}{1. Letter from the President\\2. Mom's endorsement}
+% \signature{Frank Carlucci\\Secretary}
+% \begin{document}
+% \begin{memo}
+% You're doing a great job. Keep it up!
+% \end{memo}
+% \end{document}
+%
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@twosidefalse
+\def\ds@draft{\overfullrule 5pt}
+\@options
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\ifcase \@ptsize\relax
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+\normalsize
+
+\marginparpush 5pt
+\headheight 12pt \headsep 45pt \footheight 12pt \footskip 25pt
+\columnsep 10pt \columnseprule 0pt
+
+\marginparwidth 0pt \oddsidemargin 0pt \evensidemargin 0pt
+\marginparsep 0pt \topmargin 0pt \textwidth 6.5in \textheight 8.5 in
+
+\raggedbottom
+\footnotesep 12pt \skip\footins 10pt plus 2pt minus 4pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+
+
+\def\opening{\thispagestyle{empty}
+ \hbox to \hsize{FROM:
+\begin{tabular}[t]{l}\ignorespaces\fromaddress
+ \end{tabular} \hfill \today}\par
+ \medskip
+ SUBJECT:
+\begin{tabular}[t]{l}\ignorespaces\subj
+ \end{tabular} \par
+ \medskip
+ TO:
+\begin{tabular}[t]{l}\ignorespaces\toaddress
+ \end{tabular} \par
+ \vspace{2\parskip}
+ \par\nobreak}
+
+\long\def\closing{\par\nobreak\vspace{6\parskip}
+ \stopbreaks
+ \noindent
+\begin{tabular}[t]{l}\noindent\ignorespaces\fromsig\end{tabular}
+ }
+
+\def\ps{\par\startbreaks}
+\def\cc#1{\par\noindent
+\parbox[t]{\textwidth}{\@hangfrom{\rm cc: }\ignorespaces #1\strut}\par}
+
+\def\attach#1#2{\def\nattach{#1}\def\attachl{#2}}
+\def\attachl{}
+\def\nattach{}
+
+\def\doattach{
+\ifx\@empty\attachl
+\par
+\else
+\noindent
+\begin{tabular}[t]{p{2in}}
+\ignorespaces\noindent\ifx\@empty\nattach\else\nattach\ \fi Atch \\\attachl
+\end{tabular}
+\fi
+\par}
+\def\stopmemo{}
+
+
+
+\long\def\memo{\newpage
+ \c@page\@ne
+ \interlinepenalty=200 \opening}
+\def\endmemo{\closing\hfill\doattach\stopmemo\@@par\pagebreak\@@par
+ \if@filesw
+ \begingroup
+ \def\protect{\string}
+ \let\\=\relax
+ \def\protect##1{\string##1\space}
+ \endgroup
+ \fi}
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200}}
+\def\signature#1{\def\fromsig{#1}}
+\def\fromsig{}
+\def\subject#1{\def\subj{#1}}
+\def\subj{}
+\long\def\from#1{\def\fromaddress{#1}}
+\def\fromaddress{}
+\long\def\date#1{\def\printdate{#1}}
+\def\printdate{}
+\def\to#1{\def\toaddress{#1}}
+\def\toaddress{}
+
+
+\def\ps@headings{\def\@oddhead{\sl \ignorespaces
+\begin{tabular}[t]{l}\ignorespaces\subj
+ \end{tabular}
+ \hfil \today
+ \hfil Page \thepage}\def\@oddfoot{}}
+\def\ps@empty{\def\@oddhead{}\def\@oddfoot{}\def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@plain{\def\@oddhead{}\def\@oddfoot{\rm\hfil\thepage
+ \hfil}\def\@evenhead{}\let\@evenfoot\@oddfoot}
+
+\parskip .7em \parindent 0pt \topsep .4em \partopsep 0pt \itemsep .4em
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+\let\@listi\relax
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep .2em
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -15pt\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15pt}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hfil \it #1}
+\def\description{\list{}{\leftmargin\descriptionmargin
+ \labelwidth\leftmargin \advance\labelwidth -\labelsep
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@}
+
+\long\def\@makefntext#1{\noindent \hangindent 5pt\hbox
+ to 5pt{\hss $^{\@thefnmark}$}#1}
+
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\def\today{\ifx\@empty\printdate\number\day\space\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\year
+\else \printdate\fi}
+
+
+\smallskipamount=.5\parskip \medskipamount=\parskip
+\bigskipamount=2\parskip
+\ps@headings \pagenumbering{arabic} \onecolumn \@fileswfalse
+
diff --git a/macros/latex209/contrib/memo/mfr.sty b/macros/latex209/contrib/memo/mfr.sty
new file mode 100644
index 0000000000..175db5fc7c
--- /dev/null
+++ b/macros/latex209/contrib/memo/mfr.sty
@@ -0,0 +1,12 @@
+%NAME: mfr.sty
+%mfr.sty memo-for-record style option for memo.sty
+%redefines opening to use only subject field and print memo for record
+%Mark A. Roth, 30 April 87
+\def\opening{\thispagestyle{empty}
+ \hbox to \hsize{MEMO FOR RECORD\hfill \today}\par
+ \bigskip
+ SUBJECT:
+\begin{tabular}[t]{l}\ignorespaces\subj
+ \end{tabular} \par
+ \vspace{2\parskip}
+ \par\nobreak}
diff --git a/macros/latex209/contrib/memo2/memo.pdf b/macros/latex209/contrib/memo2/memo.pdf
new file mode 100644
index 0000000000..5e6b80dbf7
--- /dev/null
+++ b/macros/latex209/contrib/memo2/memo.pdf
Binary files differ
diff --git a/macros/latex209/contrib/memo2/memo.sty b/macros/latex209/contrib/memo2/memo.sty
new file mode 100644
index 0000000000..f0bd9c18f0
--- /dev/null
+++ b/macros/latex209/contrib/memo2/memo.sty
@@ -0,0 +1,285 @@
+\typeout{Document Style 'memo'. Version 1.3 - updated 30 May 1985}
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+\input memo1\@ptsize.sty\relax
+\input extradefs
+
+\font\cosc=cmssbx10 scaled \magstep1
+\hsize=\columnwidth
+\let\savedbs=\\
+%
+\def\singlecolumn{\global\let\\=\onlyelement}
+\def\doublecolumn{\global\let\\=\leftelement}
+%
+\let\To=\singlecolumn
+\let\From=\singlecolumn
+\let\Copies=\doublecolumn
+\newlength{\subjectwidth}
+\setlength{\subjectwidth}{0pt}
+%
+\def\memohdr To:#1From:#2Copies:#3Subject:#4{
+\def\copieslist{#3}
+%
+\def\leftelement##1{\global\let\\=\rightelement & ##1 \quad}
+\def\rightelement##1{\global\let\\=\leftelement & ##1 \cr}
+\def\onlyelement##1{& ##1\cr}
+\def\blankarg{ }
+%
+\thispagestyle{comemo}
+{\sloppy
+\newbox\namesbox
+\newbox\spacerbox
+\newbox\subjectbox
+\setbox\namesbox=\vtop{\halign {& ## \hfil\cr
+%
+ {\bf To:} \To #1\crcr
+ \noalign{\medskip}
+%
+ {\bf From:} \From #2\crcr
+ \noalign{\medskip}
+%
+ \ifx\copieslist\empty\else\ifx\copieslist\blankarg\else
+ {\bf Copies:} \Copies #3\crcr\fi\fi}}
+%
+\let\\=\relax
+\setbox\spacerbox=\hbox{\qquad \bf Subject:}
+\ifdim\subjectwidth=0pt
+ \subjectwidth=\hsize
+ \advance\subjectwidth by -\wd\namesbox
+ \advance\subjectwidth by -\wd\spacerbox
+\fi
+%
+\setbox\subjectbox=\hbox{\vtop{\halign {& ## \hfil\cr
+ {\bf Date:} & \today\cr
+ \noalign{\vskip-\lastskip\medskip}
+ {\bf Subject:} & \vtop{\raggedright\hsize\subjectwidth\strut%
+ {\ignorespaces #4}\strut}\cr}}}
+%
+\hbox{\hss \box\namesbox \qquad \hss \box\subjectbox \hss}
+
+\bigskip
+\global\let\\=\savedbs
+}}
+%
+\def\memosign#1\par{\vskip 1in plus 0.1in minus 0.25in
+ \let\\=\hbox
+ \rightline{\hbox{\vbox{\hrule width2.0in height0pt depth0pt#1}}}
+ \let\\=\savedbs
+}
+%
+\def\twosign#1\par#2\par{\vskip 1in plus 0.1in minus 0.25in
+ \let\\=\hbox
+ \rightline{\hbox{\vbox{\hrule width2.0in height0pt depth0pt#1}}
+ \hfill
+ \vbox{\hrule width2.0in height0pt depth0pt#2}}
+ \let\\=\savedbs
+}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+\def\verse{\let\\=\@centercr
+\list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+\rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+\itemindent\listparindent
+\rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+\let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+\def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+\def\@endtheorem{\endtrivlist}
+\def\theequation{\arabic{equation}}
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+\else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+\def\tableofcontents{\section*{Contents\markboth{CONTENTS}{CONTENTS}}
+\@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{-\@highpenalty}
+\addvspace{2.25em plus 1pt} \begingroup
+\@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+{\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+\nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{-\@highpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+\parindent \z@ \rightskip \@pnumwidth
+\parfillskip -\@pnumwidth
+\bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+\endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\markboth
+{LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\markboth
+{LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+\def\thebibliography#1{\section*{References\markboth
+{REFERENCES}{REFERENCES}}\list
+{[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+\advance\leftmargin\labelsep\usecounter{enumi}}}
+\let\endthebibliography=\endlist
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+\markboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+\parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-1\p@
+\hrule width .4\columnwidth
+\kern .6\p@}
+\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+\advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+\parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+\long\def\@makecaption#1#2{
+\vskip 10pt
+\setbox\@tempboxa\hbox{#1: #2}
+\ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+\fi}
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\def\maketitle{\par
+\begingroup
+\def\thefootnote{\fnsymbol{footnote}}
+\def\@makefnmark{\hbox
+to 0pt{$^{\@thefnmark}$\hss}}
+\if@twocolumn
+\twocolumn[\@maketitle]
+\else \newpage
+\global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+\endgroup
+\setcounter{footnote}{0}
+\let\maketitle\relax
+\let\@maketitle\relax
+\gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+\null
+\vskip 2em \begin{center}
+{\LARGE \@title \par} \vskip 1.5em {\large \lineskip .5em
+\begin{tabular}[t]{c}\@author
+\end{tabular}\par}
+\vskip 1em {\large \@date} \end{center}
+\par
+\vskip 1.5em}
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+\mark{{}{}}
+\if@twoside \def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm
+\thepage\hfil \sl \leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+\thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+\thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox
+{}\sl \rightmark \hfil \rm\thepage}\def\sectionmark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\z@
+\thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\def\@oddhead{\hbox{}\sl\@rhead \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\@lhead\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+%
+\def\ps@comemo{\def\@oddhead{\makebox[\columnwidth][c]{
+\vbox{\cosc\hbox{COMPANY NAME} \vskip 3pt \hbox{DIVISION}}
+\hspace*{1in}{\hbox{\xiipt \sf INTER-OFFICE CORRESPONDENCE}}}}
+\def\@oddfoot{}\def\@evenhead{}\def\@evenfoot{}}
+
+\def\today{\ifcase\month\or
+January\or February\or March\or April\or May\or June\or
+July\or August\or September\or October\or November\or December\fi
+\space\number\day, \number\year}
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
diff --git a/macros/latex209/contrib/memo2/memo.tex b/macros/latex209/contrib/memo2/memo.tex
new file mode 100644
index 0000000000..87288ffdf4
--- /dev/null
+++ b/macros/latex209/contrib/memo2/memo.tex
@@ -0,0 +1,33 @@
+\documentstyle[12pt]{memo}
+\begin{document}
+\memohdr To:\\{All \LaTeX{} User's}
+From:\\{Kent McPherson}
+Copies:\\{All others}
+Subject:{This is an example of the memo style written for \LaTeX.}
+
+This is an example of the memo style. Someone at your site will have to modify
+the file {\tt MEMO.STY} to insert your company name and anything else you may
+wish to have printed at the top of your memo. For example, we have our company
+logo printed at the top of our memos.
+
+There are a few items that need to be mentioned in conjunction with this style.
+\begin{enumerate}
+\item You {\em must\/} include a blank line following:
+\begin{enumerate}
+\item the {\tt Subject:} line, and
+\item the \verb"\memosign" macro.
+\end{enumerate}
+
+\item The subject {\em must\/} be enclosed in a brace pair.
+\item If you do not wish to copy anyone on the memo, delete the
+\verb"<namelist>" placeholder. The string {\tt Copies:} {\em must\/} remain.
+\end{enumerate}
+
+
+\memosign \hrule \vskip 5pt
+\\{Kent McPherson}
+\\{Lear Siegler, Inc./Instrument Division}
+\\{4141 Eastern Ave., S.E.}
+\\{Grand Rapids, MI\ \ 49508}
+
+\end{document}
diff --git a/macros/latex209/contrib/memo2/memo10.sty b/macros/latex209/contrib/memo2/memo10.sty
new file mode 100644
index 0000000000..5d48f6db11
--- /dev/null
+++ b/macros/latex209/contrib/memo2/memo10.sty
@@ -0,0 +1,98 @@
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+\def\@listi{\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+\if@twoside \oddsidemargin 44pt \evensidemargin 82pt \marginparwidth 107pt
+\else \oddsidemargin 63pt \evensidemargin 63pt
+\marginparwidth 90pt
+\fi
+\marginparsep 11pt
+\topmargin -32pt \headheight 42pt \headsep 25pt \footheight 12pt \footskip
+30pt
+\textheight 582pt \textwidth 345pt \columnsep 10pt \columnseprule 0pt
+\footnotesep 12pt \skip\footins 6pt plus 2pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 15pt \topsep 8pt plus 2pt minus 4pt
+\partopsep 2pt plus 1pt minus 1pt \itemsep 4pt plus 2pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+\ifnum \c@secnumdepth >\m@ne \Large \bf Part \thepart \par \nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+\huge \bf
+#1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+-.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+-.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+{paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+{subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+.2ex}{-1em}{\normalsize\bf}}
+\setcounter{secnumdepth}{3}
+\def\appendix{\par
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\def\thesection{\Alph{section}}}
+
+\leftmargini 25pt
+\leftmarginii 22pt \leftmarginiii 18.7pt \leftmarginiv 17pt \leftmarginv 10pt
+\leftmarginvi 10pt
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 4pt plus 2pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+\labelwidth\leftmarginii\advance\labelwidth-\labelsep
+\topsep 4pt plus 2pt minus 1pt
+\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+\labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+\topsep 2pt plus 1pt minus 1pt
+\parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+\itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+\labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+\labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+\labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/memo2/memo11.sty b/macros/latex209/contrib/memo2/memo11.sty
new file mode 100644
index 0000000000..7743d4eb3f
--- /dev/null
+++ b/macros/latex209/contrib/memo2/memo11.sty
@@ -0,0 +1,99 @@
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+\if@twoside \oddsidemargin 36pt \evensidemargin 74pt \marginparwidth 100pt
+\else \oddsidemargin 54pt \evensidemargin 54pt
+\marginparwidth 83pt
+\fi
+\marginparsep 10pt
+\topmargin -32pt
+\headheight 42pt \headsep 25pt \footheight 12pt \footskip 30pt
+\textheight 582pt \textwidth 360pt \columnsep 10pt \columnseprule 0pt
+\footnotesep 12pt \skip\footins 6pt plus 2pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 17pt \topsep 9pt plus 3pt minus 5pt
+\partopsep 3pt plus 1pt minus 2pt \itemsep 4.5pt plus 2pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+\ifnum \c@secnumdepth >\m@ne \Large \bf Part \thepart \par\nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+\huge \bf
+#1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+-.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+-.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+{paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+{subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+.2ex}{-1em}{\normalsize\bf}}
+\setcounter{secnumdepth}{3}
+\def\appendix{\par
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\def\thesection{\Alph{section}}}
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 4.5pt plus 2pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+\labelwidth\leftmarginii\advance\labelwidth-\labelsep
+\topsep 4.5pt plus 2pt minus 1pt
+\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+\labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+\topsep 2pt plus 1pt minus 1pt
+\parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+\itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+\labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+\labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+\labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/memo2/memo12.sty b/macros/latex209/contrib/memo2/memo12.sty
new file mode 100644
index 0000000000..d4eb1c6b3e
--- /dev/null
+++ b/macros/latex209/contrib/memo2/memo12.sty
@@ -0,0 +1,100 @@
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt
+\def\@listi{\parsep 4.5pt plus 2pt minus 1pt
+\itemsep \parsep
+\topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\normalsize
+
+\if@twoside \oddsidemargin 21pt \evensidemargin 59pt \marginparwidth 85pt
+\else \oddsidemargin 39.5pt \evensidemargin 39.5pt
+\marginparwidth 68pt
+\fi
+\marginparsep 10pt
+\topmargin -32pt \headheight 42pt \headsep 25pt \footheight 12pt \footskip
+30pt
+\textheight 582pt \textwidth 390pt \columnsep 10pt \columnseprule 0pt
+\footnotesep 14pt \skip\footins 8pt plus 2pt minus 4pt
+\floatsep 14pt plus 2pt minus 4pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt \@maxsep 20pt \dblfloatsep 14pt plus 2pt
+minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 10pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 10pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+
+\parskip 0pt plus 1pt \parindent 1.5em \topsep 10pt plus 4pt minus 6pt
+\partopsep 3pt plus 2pt minus 2pt \itemsep 5pt plus 2.5pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+\ifnum \c@secnumdepth >\m@ne \Large \bf Part \thepart \par\nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+\huge \bf
+#1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+-.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+-.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+{paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+{subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+.2ex}{-1em}{\normalsize\bf}}
+\setcounter{secnumdepth}{3}
+\def\appendix{\par
+\setcounter{section}{0}
+\setcounter{subsection}{0}
+\def\thesection{\Alph{section}}}
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 5pt plus 2.5pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+\labelwidth\leftmarginii\advance\labelwidth-\labelsep
+\topsep 5pt plus 2.5pt minus 1pt
+\parsep 2.5pt plus 1pt minus 1pt
+\itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+\labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+\topsep 2.5pt plus 1pt minus 1pt
+\parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+\itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+\labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+\labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+\labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/milstd/milstd.sty b/macros/latex209/contrib/milstd/milstd.sty
new file mode 100644
index 0000000000..09fb87de85
--- /dev/null
+++ b/macros/latex209/contrib/milstd/milstd.sty
@@ -0,0 +1,818 @@
+% MIL-STD DOCUMENT STYLE -- for LaTeX version 2.08
+
+\typeout{Document Style 'milstd'. Version EX 02 - revised 27 February 1986}
+\typeout{}
+
+\def\subsubparagraphmark#1{} % Default definitions for milstd style
+\def\subsubsubparagraphmark#1{}
+%
+% Ignore boxes up to 5 points to wide
+%
+\hfuzz=5pt
+
+% The type size option is handled by reading a different file for each
+% size, as follows:
+% 10pt : MS10, 11pt : MS11, 12pt : MS12
+% Implemented by \def'ing \@ptsize to last digit of file name.
+%
+
+\def\@ptsize{0} % Default is MS10.STY
+\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt option reads in MS11.STY
+\@namedef{ds@12pt}{\def\@ptsize{2}} % 12pt option reads in MS12.STY
+%
+% Define \documentnumber and \documentdate commands
+\newcommand{\documentnumber}[1]{\def\docnumber{#1}}
+\newcommand{\documentdate}[1]{\def\docdate{#1}}
+
+% Define the \volume counter and assignment command
+\newcounter{volume}
+\newcommand{\volume}[1]{\setcounter{volume}{#1}
+ \renewcommand{\pagenumbering}[1]%
+ {\global\c@page \@ne \gdef\thepage{\thevolume-\csname @##1\endcsname\c@page}}
+ \def\thepage{\thevolume-\arabic{page}}
+ \def\thefigure{\thevolume-\arabic{figure}}
+ \def\thetable{\thevolume-\Roman{table}} }
+
+% Two-side or one-side printing.
+%
+% \@twosidefalse % Default is one-sided printing.
+\def\ds@twoside{\@twosidetrue % Defines twoside option.
+ \@mparswitchtrue} % Marginpars go on outside of page.
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+% Define the control sequences for the different spec types
+%
+\newif\ifmilitary
+\def\military{\militarytrue}
+\def\commercial{\militaryfalse}
+\newif\ifbspec
+\newif\ifcspec
+\def\spectype{}
+\def\A{\def\spectype{A}}
+\def\Btwo{\def\spectype{B} \bspectrue}
+\let\Bfive\Btwo
+\def\Cfive{\def\spectype{C} \cspectrue}
+%
+% This is a temporary message for the bookform option that used to be part of
+% this style.
+\def\bookform{
+ \typeout{}\typeout{ ! ! ! ATTENTION ! ! !}\typeout{}
+ \typeout{Bookform documents are now generated by the `bookform' style.}
+ \typeout{Change your style from `milstd' to `bookform' and delete the}
+ \typeout{\string\bookform\space command. Then run LaTeX again.}
+ \stop}
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+\input ms1\@ptsize.sty\relax
+\input extradefs
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+
+\def\labelenumi{\alph{enumi}.}
+\def\theenumi{\alph{enumi}}
+
+\def\labelenumii{(\arabic{enumii})}
+\def\theenumii{\arabic{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{(\alph{enumiii})}
+\def\theenumiii{\alph{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\roman{enumiv}.}
+\def\theenumiv{\roman{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+%\newdimen\descriptionmargin
+%\descriptionmargin=3em
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+%
+%
+\def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+
+\def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+% The macro \@eqnnum defines how equation numbers are to appear in equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero.
+%
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+\tabcolsep 6pt % Half the space between columns in a tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is stepped.
+% Counter OLDCTR must already be defined.
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+\newcounter {subsubparagraph}[subparagraph]
+\newcounter {subsubsubparagraph}[subsubparagraph]
+\newcounter {appnumber}
+
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+
+\def\thepart{\Roman{part}} % Roman numeral part numbers.
+\def\thesection {\arabic{section}.}
+\def\thesubsection {\thesection\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+\def\thesubsubparagraph {\thesubparagraph.\arabic{subsubparagraph}}
+\def\thesubsubsubparagraph {\thesubsubparagraph.\arabic{subsubsubparagraph}}
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \subsection command writes a
+% \contentsline{subsection}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If subsections are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \thesubsection. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table' environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@section,
+% \l@subsection, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note that \section is level 1,
+% \subsection is level 2, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+
+\def\@pnumwidth{3em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{7}
+
+
+% TABLEOFCONTENTS
+%
+\def\tableofcontents{\section*{\protect\centering{TABLE OF CONTENTS}
+ \markboth{TABLE OF CONTENTS}{TABLE OF CONTENTS}}
+ \addvspace{1.0em plus 1pt} % space above toc entry
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \hbox to\textwidth{Paragraph \hfill Page}\par
+ \addvspace{1.0em plus 1pt} % space below Parag... entry
+ \endgroup
+ {\parskip 0pt plus 1pt
+ \@starttoc{toc}}}
+
+\def\l@part#1#2{\addpenalty{-\@highpenalty}
+ \addvspace{2.25em plus 1pt} % space above part line
+ \begingroup
+ \@tempdima 3em % width of box holding part number, used by
+ \parindent \z@ \rightskip \@pnumwidth %% \numberline
+ \parfillskip -\@pnumwidth
+ {\large \bf % set line in \large boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak % Never break after part entry
+ \endgroup}
+
+\def\l@section{\@dottedtocline{1}{0em}{7em}}
+\def\l@subsection{\@dottedtocline{2}{0em}{7em}}
+\def\l@subsubsection{\@dottedtocline{3}{0em}{7em}}
+\def\l@paragraph{\@dottedtocline{4}{0em}{7em}}
+\def\l@subparagraph{\@dottedtocline{5}{0em}{7em}}
+\def\l@subsubparagraph{\@dottedtocline{6}{0em}{7em}}
+\def\l@subsubsubparagraph{\@dottedtocline{7}{0em}{7em}}
+
+% LIST OF FIGURES
+%
+\def\listoffigures{\section*{\protect\centering{LIST OF FIGURES}
+ \markboth{LIST OF FIGURES}{LIST OF FIGURES}}
+ \addvspace{1.0em plus 1pt} % space above lof entry
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \hbox to\textwidth{Figure \hfill Page}\par
+ \addvspace{1.0em plus 1pt} % space below Figure... entry
+ \endgroup
+ {\parskip 0pt plus 1pt
+ \@starttoc{lof}}}
+
+\def\l@figure{\@dottedtocline{1}{0em}{5.5em}}
+
+% LIST OF TABLES
+%
+\def\listoftables{\section*{\protect\centering{LIST OF TABLES}
+ \markboth{LIST OF TABLES}{LIST OF TABLES}}
+ \addvspace{1.0em plus 1pt} % space above lot entry
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \hbox to\textwidth{Table \hfill Page}\par
+ \addvspace{1.0em plus 1pt} % space below Table... entry
+ \endgroup
+ {\parskip 0pt plus 1pt
+ \@starttoc{lot}}}
+
+\let\l@table\l@figure
+
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% TEMPORARY DEFINITIONS:
+
+\def\thebibliography#1{\section*{References\markboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep\usecounter{enumi}}}
+
+\let\endthebibliography=\endlist
+
+% \def\@biblabel#1{[#1]\hfill} % Produces the label for a \bibitem[...]
+ % command.
+% \def\@cite#1{[#1]} % Produces the output of the \cite command.
+
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+
+\newif\if@restonecol
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \markboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+\def\@idxitem{\par\hangindent 40pt}
+
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@} % The \hrule has default height of .4pt .
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth). The following macro indents
+% all lines of the footnote by 10pt, and indents the first line of
+% a new paragraph by 1em. To change these dimensions, just substitute
+% the desired value for '10pt' [in both places] or '1em'.
+% The mark is flushright against the footnote.
+%
+% It is much easier to write a macro in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. In that case, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+ \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+ \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1. #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+
+% FIGURE
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{hbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}
+\def\thetable{\@Roman\c@table}
+
+\def\fps@table{hbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+
+% \maketitle ==
+% BEGIN
+% \par
+% \begingroup
+% redefine \@makefnmark so footnote marks take zero space (this make
+% centering look better)
+% \thefootnote == \fnsymbol{footnote} % to number by *, dagger, etc.
+% if @twocolumn = true
+% then \twocolumn[\@maketitle]
+% else \@maketitle
+% fi
+% \thispagestyle{plain}
+% \@thanks % \thanks defines \@thanks to have \footnotetext commands for
+% % producing footnotes.
+% \endgroup
+% END
+\def\maketitle{\par
+ \begingroup
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle \fi
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage \thispagestyle{titlepage}
+ \parskip 0pt plus 1pt
+ \null
+
+ \vspace{.4in}
+ \begin{center}
+ {\large \bf \@title \par} % Title set in \large size.
+ \vspace{1.5in}
+ \makebox[\textwidth]{\makebox[2in][l]{Authenticated by:} \hfill
+ \makebox[2in][l]{Approved by:}} \par
+ \vspace{.5in}
+ \makebox[\textwidth]{\makebox[2in][l]{\rule[0pt]{2in}{1pt}} \hfill
+ \makebox[2in][l]{\rule[0pt]{2in}{1pt}}} \par
+ \makebox[\textwidth]{\makebox[2in][l]{Procuring Activity} \hfill
+ \makebox[2in][l]{Program Manager}} \par
+ \vspace{.75in}
+ \makebox[\textwidth]{\makebox[2in][l]{\rule[0pt]{2in}{1pt}} \hfill
+ \makebox[2in][l]{\rule[0pt]{2in}{1pt}}} \par
+ \makebox[\textwidth]{\makebox[2in][l]{Date} \hfill
+ \makebox[2in][l]{Technical Director}} \par
+ \vspace{.75in}
+ \makebox[\textwidth]{\makebox[2in]{}\hfill
+ \makebox[2in]{\rule[0pt]{2in}{1pt}}} \par
+ \makebox[\textwidth]{\makebox[2in]{} \hfill \makebox[2in][l]{Date}}
+ \end{center}
+ }
+
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \sectionmark, ... , where
+% \sectionmark{TEXT} is called by \section to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'left' mark. Works like TeX's
+% \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'right' mark. Works like TeX's
+% \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \section command and
+% the right mark is changed by a \subsection command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+
+\mark{{}{}} % Initializes TeX's marks
+
+% \def\ps@empty{\def\@oddhead{}
+% \def\@oddfoot{}
+% \def\@evenhead{}\def\@evenfoot{}}
+%
+% \def\ps@plain{\def\@oddhead{}
+% \def\@oddfoot{\rm\hfil\thepage\hfil}
+% \def\@evenhead{}
+% \let\@evenfoot\@oddfoot}
+
+% Definition of 'headings' page style
+% Note the use of ##1 for parameter of \def\sectionmark inside the
+% \def\ps@headings.
+%
+
+\if@twoside % If two-sided printing.
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@evenhead{\rm \thepage\hfil \sl \leftmark}% Left heading.
+\def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage}% Right heading.
+\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}%
+\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else % If one-sided printing.
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage}% Heading.
+\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+% Definition of 'myheadings' page style. The user's \head command
+% changes the definition of \@lhead and/or \@rhead.
+%
+\def\ps@myheadings{\def\@oddhead{\hbox{}\sl\@rhead \hfil \rm\thepage}%
+\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\@lhead\hbox {}}%
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+% Definition of 'milstd' page style for specifications.
+% Note the use of ##1 for parameter of \def\sectionmark inside the
+% \def\ps@milstd.
+%
+
+\if@twoside % If two-sided printing.
+\def\ps@milstd{\def\@oddfoot{\rm \hbox{}\hfil \thepage}
+\def\@evenfoot{\rm \thepage\hfil}%
+\def\@evenhead{\small\rm \shortstack[l]{
+ \ifmilitary C\spectype\docnumber \else L\spectype\docnumber \fi \\
+ \ifx\@empty\docdate \today \else \docdate \fi} \hfil}%
+\def\@oddhead{\hbox{} \hfil\small\rm \shortstack[l]{
+ \ifmilitary C\spectype\docnumber \else L\spectype\docnumber \fi \\
+ \ifx\@empty\docdate \today \else \docdate \fi}}%
+\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}%
+\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else % If one-sided printing.
+\def\ps@milstd{\def\@oddfoot{\rm\hbox{}\hfil \thepage}\def\@evenfoot{}%
+\def\@oddhead{\hbox{} \hfil\rm \shortstack[l]{
+ \ifmilitary C\spectype\docnumber \else L\spectype\docnumber \fi \\
+ \ifx\@empty\docdate \today \else \docdate \fi}}%
+\def\@evenhead{}%
+\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+% Definition of 'titlepage' page style.
+%
+\def\ps@titlepage{\headheight=6em
+ \def\@oddhead{\hbox{}\hfil \bf
+ \shortstack[l]{
+ Specification Number \ifmilitary C\spectype\docnumber
+ \else L\spectype\docnumber \fi\\
+ FSCM No. 35351\\
+ \ifbspec Part I of Two Parts \\
+ (Part II \ifmilitary CC\docnumber \else LC\docnumber \fi ) \\
+ \else \ifcspec Part II of Two Parts \\
+ (Part I \ifmilitary CB\docnumber \else LB\docnumber \fi ) \\
+ \fi \fi
+ \ifx\@empty\docdate \today \else \docdate \fi}}
+ \def\@oddfoot{}\def\@evenhead{}%
+ \def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+% FOR VERSION 2.08
+%\def\ps@myheadings{\ps@headings\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\number\day\space \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\year}
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\ps@milstd
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column.
+\def\docdate{}
+\def\docnumber{}
+\military
+\bspecfalse
+\cspecfalse
+\if@twoside\else\raggedbottom\fi % Ragged bottom unless twoside option.
+%
+% Define the section style commands
+%
+\def\sectionstyle{\large\bf}
+\def\subsectionstyle{\large\bf}
+\def\subsubsectionstyle{\normalsize\bf}
+\def\paragraphstyle{\normalsize\bf}
+\def\subparagraphstyle{\normalsize\bf}
+\def\subsubparagraphstyle{\normalsize\bf}
+\def\subsubsubparagraphstyle{\normalsize\bf}
+
+% DEC/CMS REPLACEMENT HISTORY, Element MILSTD.STY
+% *9 27-FEB-1986 14:29:48 MCPHERSON "Correct \volume command, delete documentlist,restore headings page style and create milstd page style"
+% *8 13-FEB-1986 13:21:41 MCPHERSON "\volume command set the pagestyle, redefine how figures/tables are numbered"
+% *7 7-FEB-1986 10:10:18 MCPHERSON "deleted bookform, added volumes, renumbered appendices"
+% *6 14-JAN-1986 09:07:37 MCPHERSON "Update revision date message"
+% *5 13-JAN-1986 08:53:27 MCPHERSON "Change descriptionlabel format, reset \parskip inside toc and title"
+% *4 15-NOV-1985 12:57:58 MCPHERSON "Add ps@plain initialization"
+% *3 15-NOV-1985 11:13:39 MCPHERSON "Added bookform documents"
+% *2 14-NOV-1985 13:18:31 MCPHERSON "Add A specs and commercial capability"
+% *1 6-NOV-1985 15:11:17 MCPHERSON "MIL-STD-490 document style, LaTeX 2.08"
+% DEC/CMS REPLACEMENT HISTORY, Element MILSTD.STY
diff --git a/macros/latex209/contrib/milstd/ms10.sty b/macros/latex209/contrib/milstd/ms10.sty
new file mode 100644
index 0000000000..308edc4127
--- /dev/null
+++ b/macros/latex209/contrib/milstd/ms10.sty
@@ -0,0 +1,363 @@
+% MIL-STD DOCUMENT STYLE -- for LaTeX version 2.08
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt}
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 44pt % Left margin on odd-numbered pages.
+ \evensidemargin 82pt % Left margin on even-numbered pages.
+ \marginparwidth 107pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -35pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 24pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 30pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 8.33in % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 6.25in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 12pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 6pt plus 2pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 10pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 15pt % Width of paragraph indentation.
+\topsep 8pt plus 2pt minus 4pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 2pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+\itemsep 4pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par \nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- i.e., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\clearpage \@startsection {section}{1}{\parindent}
+ {3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+\def\subsection{\@startsection{subsection}{2}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus .2ex}{\subsectionstyle}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus -.2ex}{\subsubsectionstyle}}
+\def\paragraph{\@startsection {paragraph}{4}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\paragraphstyle}}
+\def\subparagraph{\@startsection {subparagraph}{5}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subparagraphstyle}}
+\def\subsubparagraph{\@startsection {subsubparagraph}{6}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubparagraphstyle}}
+\def\subsubsubparagraph{\@startsection {subsubsubparagraph}{7}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubsubparagraphstyle}}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{7}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section counter to zero and
+% -- reset the subsection counter to zero
+% -- redefine the \section command to produce the proper format appendix
+
+\def\appendix{\par
+ \clearpage
+ \renewcommand{\thepage}{\Roman{appnumber}-\arabic{page}}
+ \setcounter{appnumber}{0}
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \makeatletter
+ \def\section{\clearpage \addtocounter{section}{9}
+ \addtocounter{appnumber}{1} \setcounter{page}{1}
+ \addtocontents{toc}{\noindent\hspace{7em}APPENDIX~\Roman{appnumber}}
+ \setcounter{figure}{0}
+ \setcounter{table}{0}
+ \begin{center}
+ \large\bf
+ APPENDIX~\Roman{appnumber}
+ \end{center}
+ \par
+ \@startsection {section}{1}{\parindent}{3.5ex plus 1ex minus
+ .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+ \makeatother
+ \def\thefigure{\Roman{appnumber}-\arabic{figure}}
+ \def\thetable{\Roman{appnumber}-\Roman{table}}
+}
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin
+
+\leftmargini 4.5em % 25pt
+\leftmarginii 2.2em % 22pt % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % 18.7pt % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % 17pt % > \labelsep + width of 'M.'
+\leftmarginv 1em % 10pt
+\leftmarginvi 1em % 10pt
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 4pt plus 2pt minus 1pt
+
+\def\@listi{\leftmargin\leftmargini}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+% DEC/CMS REPLACEMENT HISTORY, Element MS10.STY
+% *6 27-FEB-1986 14:31:02 MCPHERSON "Redefine \thepage for appendices, capitalize appendix"
+% *5 13-FEB-1986 13:22:27 MCPHERSON "Reset the figure and table counters for each appendix"
+% *4 7-FEB-1986 10:10:23 MCPHERSON "deleted bookform, added volumes, renumbered appendices"
+% *3 13-JAN-1986 09:01:56 MCPHERSON "Increase \parskip, increase indentation on lists "
+% *2 13-JAN-1986 08:56:05 MCPHERSON "Increase \parskip for blank line between paragraphs, increase indentation for lists"
+% *1 6-NOV-1985 15:11:23 MCPHERSON "MIL-STD-490 document style, LaTeX 2.08"
+% DEC/CMS REPLACEMENT HISTORY, Element MS10.STY
diff --git a/macros/latex209/contrib/milstd/ms11.sty b/macros/latex209/contrib/milstd/ms11.sty
new file mode 100644
index 0000000000..c9afbbcf60
--- /dev/null
+++ b/macros/latex209/contrib/milstd/ms11.sty
@@ -0,0 +1,362 @@
+% MIL-STD DOCUMENT STYLE -- for LaTeX version 2.08
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 4pt plus 2pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 36pt % Left margin on odd-numbered pages.
+ \evensidemargin 74pt % Left margin on even-numbered pages.
+ \marginparwidth 100pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+ \marginparwidth 83pt
+\fi
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -35pt % Nominal distance from top of page to top of
+
+\headheight 24pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 30pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 8.33in % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 6.25in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 12pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 6pt plus 2pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 11pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 17pt % Width of paragraph indentation.
+\topsep 9pt plus 3pt minus 5pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 3pt plus 1pt minus 2pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+\itemsep 4.5pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par\nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- i.e., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\clearpage \@startsection {section}{1}{\parindent}
+ {3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+\def\subsection{\@startsection{subsection}{2}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus .2ex}{\subsectionstyle}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus -.2ex}{\subsubsectionstyle}}
+\def\paragraph{\@startsection {paragraph}{4}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\paragraphstyle}}
+\def\subparagraph{\@startsection {subparagraph}{5}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subparagraphstyle}}
+\def\subsubparagraph{\@startsection {subsubparagraph}{6}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubparagraphstyle}}
+\def\subsubsubparagraph{\@startsection {subsubsubparagraph}{7}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubsubparagraphstyle}}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{7}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section counter to zero and
+% -- reset the subsection counter to zero
+% -- redefine the \section command to produce the proper format appendix
+
+\def\appendix{\par
+ \clearpage
+ \renewcommand{\thepage}{\Roman{appnumber}-\arabic{page}}
+ \setcounter{appnumber}{0}
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \makeatletter
+ \def\section{\clearpage \addtocounter{section}{9}
+ \addtocounter{appnumber}{1} \setcounter{page}{1}
+ \addtocontents{toc}{\noindent\hspace{7em}APPENDIX~\Roman{appnumber}}
+ \setcounter{figure}{0}
+ \setcounter{table}{0}
+ \begin{center}
+ \large\bf
+ APPENDIX~\Roman{appnumber}
+ \end{center}
+ \par
+ \@startsection {section}{1}{\parindent}{3.5ex plus 1ex minus
+ .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+ \makeatother
+ \def\thefigure{\Roman{appnumber}-\arabic{figure}}
+ \def\thetable{\Roman{appnumber}-\Roman{table}}
+}
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 4.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 4.5pt plus 2pt minus 1pt
+
+\def\@listi{\leftmargin\leftmargini}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+% DEC/CMS REPLACEMENT HISTORY, Element MS11.STY
+% *5 27-FEB-1986 14:31:14 MCPHERSON "Redefine \thepage for appendices, capitalize appendix"
+% *4 13-FEB-1986 13:22:41 MCPHERSON "Reset the figure and table counters for each appendix"
+% *3 7-FEB-1986 10:10:27 MCPHERSON "deleted bookform, added volumes, renumbered appendices"
+% *2 13-JAN-1986 09:02:13 MCPHERSON "Increase \parskip, increase indentation on lists "
+% *1 6-NOV-1985 15:11:29 MCPHERSON "MIL-STD-490 document style, LaTeX 2.08"
+% DEC/CMS REPLACEMENT HISTORY, Element MS11.STY
diff --git a/macros/latex209/contrib/milstd/ms12.sty b/macros/latex209/contrib/milstd/ms12.sty
new file mode 100644
index 0000000000..25a38a6bf3
--- /dev/null
+++ b/macros/latex209/contrib/milstd/ms12.sty
@@ -0,0 +1,363 @@
+% MIL-STD DOCUMENT STYLE -- for LaTeX version 2.08
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+\def\@listi{\parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 21pt % Left margin on odd-numbered pages.
+ \evensidemargin 59pt % Left margin on even-numbered pages.
+ \marginparwidth 85pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+ \marginparwidth 68pt
+\fi
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -35pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 24pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 30pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 8.33in % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 6.25in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 14pt % Height of strut placed at the beginning of every
+ % footnote.
+\skip\footins 8pt plus 2pt minus 4pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 14pt plus 2pt minus 4pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 14pt plus 4pt minus 4pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 14pt plus 2pt minus 4pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 10pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 10pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 7pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 12pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 1.5em % Width of paragraph indentation.
+\topsep 10pt plus 4pt minus 6pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 3pt plus 2pt minus 2pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+\itemsep 5pt plus 2.5pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \bf Part \thepart % THEN Print 'Part' and
+ \par\nobreak % number in \Large boldface.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\clearpage \@startsection {section}{1}{\parindent}
+ {3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+\def\subsection{\@startsection{subsection}{2}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus .2ex}{\subsectionstyle}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1.5ex plus -.2ex}{\subsubsectionstyle}}
+\def\paragraph{\@startsection {paragraph}{4}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\paragraphstyle}}
+\def\subparagraph{\@startsection {subparagraph}{5}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subparagraphstyle}}
+\def\subsubparagraph{\@startsection {subsubparagraph}{6}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubparagraphstyle}}
+\def\subsubsubparagraph{\@startsection {subsubsubparagraph}{7}{\parindent}
+ {3.25ex plus 1ex minus .2ex}{-1em}{\subsubsubparagraphstyle}}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{7}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section counter to zero and
+% -- reset the subsection counter to zero
+% -- redefine the \section command to produce the proper format appendix
+
+\def\appendix{\par
+ \clearpage
+ \renewcommand{\thepage}{\Roman{appnumber}-\arabic{page}}
+ \setcounter{appnumber}{0}
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \makeatletter
+ \def\section{\clearpage \addtocounter{section}{9}
+ \addtocounter{appnumber}{1} \setcounter{page}{1}
+ \addtocontents{toc}{\noindent\hspace{7em}APPENDIX~\Roman{appnumber}}
+ \setcounter{figure}{0}
+ \setcounter{table}{0}
+ \begin{center}
+ \large\bf
+ APPENDIX~\Roman{appnumber}
+ \end{center}
+ \par
+ \@startsection {section}{1}{\parindent}{3.5ex plus 1ex minus
+ .2ex}{2.3ex plus .2ex}{\sectionstyle}}
+ \makeatother
+ \def\thefigure{\Roman{appnumber}-\arabic{figure}}
+ \def\thetable{\Roman{appnumber}-\Roman{table}}
+}
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 4.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 5pt plus 2.5pt minus 1pt
+
+\def\@listi{\leftmargin\leftmargini}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+% DEC/CMS REPLACEMENT HISTORY, Element MS12.STY
+% *5 27-FEB-1986 14:31:28 MCPHERSON "Redefine \thepage for appendices, capitalize appendix"
+% *4 13-FEB-1986 13:22:54 MCPHERSON "Reset the figure and table counters for each appendix"
+% *3 7-FEB-1986 10:10:31 MCPHERSON "deleted bookform, added volumes, renumbered appendices"
+% *2 13-JAN-1986 09:02:27 MCPHERSON "Increase \parskip, increase indentation on lists "
+% *1 6-NOV-1985 15:11:34 MCPHERSON "MIL-STD-490 document style, LaTeX 2.08"
+% DEC/CMS REPLACEMENT HISTORY, Element MS12.STY
diff --git a/macros/latex209/contrib/misc/QED.sty b/macros/latex209/contrib/misc/QED.sty
new file mode 120000
index 0000000000..937f00d227
--- /dev/null
+++ b/macros/latex209/contrib/misc/QED.sty
@@ -0,0 +1 @@
+../../../generic/proofs/taylor/QED.sty \ No newline at end of file
diff --git a/macros/latex209/contrib/misc/STYLE_descriptions b/macros/latex209/contrib/misc/STYLE_descriptions
new file mode 100644
index 0000000000..cba039f246
--- /dev/null
+++ b/macros/latex209/contrib/misc/STYLE_descriptions
@@ -0,0 +1,287 @@
+File Description
+
+a4.sty Set page size to A4
+
+a4wide.sty Set page size to A4 with narrow margins
+
+a5.sty sets A5 page size (use only with 10pt)
+
+a5comb.sty sets A% page style but for spirally-bound documents
+ (bigger inner margins)
+
+aaai.sty Style file for AAAI conference 1988
+aaai-doc.tex (BibTeX style in bibtex-style and bibtex-style-0.98)
+
+agugrl.sty AGU Geophysical Research Letters style
+agugrl-sample.tex
+
+agujgr.sty AGU Journal of Geophysical Research style
+agujgr-sample.tex
+
+aip.sty for American Institute of Physics journals
+
+album Style for printing cassette labels
+
+alleqno.sty makes all displayed equations numbered by default
+
+alltt.sty Like verbatim, but permits other commands inside
+
+amssymbols.sty Load AMS font
+
+apalike.sty LaTeX and BibTeX style files for a APA-like
+ style (APA = Amer. Psychological Association)
+
+apsabstract.sty for formatting abstracts for American
+ Physical Society meetings
+
+biihead.sty Underlined heading
+
+boxedminipage.sty puts a box round a minipage
+
+breakcites.sty allows citations to break across lines
+
+bsf.sty Provide access to bold san serif fonts in LaTeX
+
+captcont.sty Auxiliary file needed
+
+cd.sty Commutative diagram macros
+cd-doc.tex
+
+changebar.sty changebars for LaTeX
+
+chapterbib.sty Allow LaTeX & BibTeX to produce separate
+ bibliographies for each chapter.
+
+cite.sty Compress lists of numbers in citations to ranges, and
+ allow linebreaks with difficulty
+
+cup.sty a document style for books in the Cambridge
+ University Press, British Computer Society
+ Workshop series.
+
+cyrillic.sty Load Cyrillic font
+
+deproc.sty DECUS proceedings style and
+deproc-doc.tex documentation
+deproc.readme
+
+doublespace.sty Double spacing in text
+
+draft.sty Draft option for documents for "debugging"
+
+drafthead.sty Prints DRAFT in heading
+
+drop.sty Style for making large dropped initials for
+ starting paragraphs
+
+eepic A picture environment that used tpic specials
+
+env.sty style files to print on envelopes
+
+
+epic an extended picture environment
+
+equations.sty marcros to to aid in constructing displayed
+ equations in LaTeX
+
+espo.sty Style file for Esperanto
+
+fancyheadings.sty modify the headers and footers
+
+farticle.sty French version of article.sty
+
+figplace.tex TeX macros to handle floating insertion
+
+fixup.sty Fixup Plain's \bigl, etc. to track LaTeX size changes
+
+flowchart.sty macros to write flow charts
+
+fnpara.sty sets footnotes as parapraphs
+
+format.sty Print FP numbers in fixed format
+
+frenchponct.sty french punctuation
+
+frontiers.sty for Frontiers '88 symposium and other IEEE conferences
+
+fullpage.sty Get more out of a page
+
+geophysics.sty Geophysics journal style
+
+german.sty Style file for German
+
+hackalloc.sty make allocation local for LaTeX
+
+headerfooter.sty adds the capability of underlining the heading, ala
+ the LaTeX manual
+
+icassp.sty This is a document style option, for cammera-ready copy
+ for the ICASSP '89 conference (and other IEEE
+ conferences???), to be used with the article document
+ style and the proc document style option.
+
+ijcai89.sty Conference Style for IJCAI-89
+ijcai89.tex
+
+insertplot.sty Macros for inserting PostScript in files printed with
+insertplot.readme Arbortext's DVIPS.
+
+iso.sty for use by those writing ISO standards
+iso9.sty
+iso-doc.tex
+
+ist21.sty IST21 document style option for cover page
+
+jbs.sty for the Journal of Business Strategies
+
+jeep.sty usefull modifications of the article style
+jeep.tex
+
+layout.tex Prints nice diagram showing page parameters
+layout.readme of LaTeX
+
+lablst.sty for printing label definitions at the end of
+ the document
+
+lcustom.tex Useful macros and definitions for LaTeX
+
+lfonts_ams.tex Use AMS symbols in LaTeX
+lfonts_ams.readme
+
+local-suppl.tex Supplement to local guide that describes
+ lcustom.tex sfwmac.sty tgrind.sty trademarks.sty
+ xxxcustom.tex xxxslides.sty
+
+ltugbot.sty for articles to tugboat
+
+manual Like ``book'' but for manuals
+ Need to look at ``book'' for documentation
+
+memo.sty Memo and memo for the record style option
+mfr.sty
+
+merge.sty Form letter option to LaTeX letter style
+
+mf.sty make Metafont logo's at all sizes
+
+mitpress.sty a simple MIT Press format
+
+mitthesis.sty Massachusetts Institute of Technology thesis format
+mitthesis-sample.tex
+
+multibox.sty provides multiple boxes in pictures
+
+named.sty for use with named.bst
+
+natsci.sty natural sciences stle style
+ (BibTeX file in bibtex-style-0.98)
+
+nl.sty style file customized for Dutch
+
+nofm.sty for "n of M" style pagination
+
+nopagenumbers.sty remove page numbers
+
+overcite.sty Give superscript numbers for citations, compressing
+ lists to ranges, and move past punctuation
+
+pagefoots.sty puts footnotes at the bottom of each page
+
+parskip.sty sets parindent to 0 and puts some glue into
+ parskip to aid page breaks
+
+portland.sty environments to switch between portrait mode
+ and landscape mode
+
+pslatex Macros to build pslatex, a LaTeX that uses printer
+ resident PostScript fonts. Requires dvi2ps that
+ understands PostScript fonts.
+
+refman.sty document style for reference manuals similar to
+ the PostScript manual
+
+remark.sty Like newtheorem but no \it
+
+res.sty a format for doing resumes by Michael DeCorte
+res-sample.tex
+
+resume.sty a format for doing resumes by Stephen Gildea
+resume-sample.tex
+
+romanneg.sty roman-numbered pages get negative page numbers (useful
+ when selecting only part of a document to be printed)
+
+rotate.sty Rotation of TeX output with TeXtures
+ (and maybe? other PostScript drivers)
+
+sc21.sty ISO/TC97/SC21 document style option for cover page
+sc21-wg1.sty
+
+schedule.sty Style for generating schedule sheets
+
+screen.sty helps create a document suitable for screen previewing
+
+semitic.sty used to set Semitic languages
+
+sfwmac.sty Useful macros for Unix documentation
+
+showlabels.sty Shows labels and references to them
+
+siam SIAM LaTeX style
+ (BibTeX style in bibtex-style)
+
+slem.sty Change \sl to \em
+
+spacecites.sty Modified to give spacing between citations
+
+subeqn.sty allows related equations to be numbered with the same
+ number but is further qualified by a,b,c etc.
+
+subeqnarray.sty allows related eqnarrays to be numbered with the same
+ number but is further qualified by a,b,c etc.
+
+subfigure.sty allows related figures to be numbered with the same
+ number but is further qualified by a,b,c etc.
+
+supertab.sty allows multipage tabulars
+
+suthesis.sty Stanford U thesis style
+
+svma.sty Style for Springer-Verlag reports, multi-author
+svsa.sty ditto for single author
+svma-doc.tex
+
+tables.sty Ruled and unruled tables made easy
+tables-doc.tex
+
+tabls.sty Simulate minimum-lineskip glue in tablar environments
+
+tape files to setup tape libraries
+
+texnames.sty Define a couple more TeX names
+
+tgrind.sty Tgrind macros for LaTeX instead of TeX
+
+threepart.sty Three part page headers
+
+trademarks.sty Definitions of common trademarks
+
+twoup.sty change the page sizes so that 2 pages can fit
+ onto one with the help of dvidvi
+
+ucthesis U of California thesis style
+
+ukdate.sty changes the \today command to UK style
+
+ulem.sty Use underlining for \em-phasis
+
+usenix.sty For Usenix conference proceedings
+
+vdm.sty Vienna Development Method LaTeX style
+vdm-doc.tex Documentation on above
+
+verbatimfiles.sty include a file in a verbatim mode
+
+xxxcustom.tex Supplementary macros for xxx-tex, for some xxx
+
+xxxslides.sty Supplementary macros for SliTeX, includes slides.sty
diff --git a/macros/latex209/contrib/misc/a4letter.sty b/macros/latex209/contrib/misc/a4letter.sty
new file mode 100644
index 0000000000..eb0d4f720a
--- /dev/null
+++ b/macros/latex209/contrib/misc/a4letter.sty
@@ -0,0 +1,457 @@
+% This is LETTER.STY in text format, as of April, 14, 1988,
+% by D. Heinrich (TH Karlsruhe).
+%
+% Last modified May, 04, 1988.
+%
+% According to the german DIN.
+% It gives the possibility to add a backaddress to the information
+% given in the window and to include a huge address (sender).
+% \windowrules and \nowindowrules are possible.
+% It's also possible to adapt captions to other languages.
+%
+% It is based on A4LETTER.STY in text format, as of June 16, 1987.
+% letter.sty 17-Jan-86 with modifications
+% for DIN-A4 paper + window envelopes, by H.Partl (Wien)
+%
+
+\typeout{}
+\typeout{Document Style `letter'.}
+\typeout{Modified at University of Karlsruhe - 04. May 1988.}
+\typeout{}
+\typeout{If you really want to use Lamport's original letter format,}
+\typeout{please use the style `aletter'.}
+\typeout{}
+
+{\catcode`\_=12 \gdef\jobname@aux{\jobname.aux}} % .aux or _aux or ...
+
+\def\@ptsize{0}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@twosidefalse
+\def\ds@draft{\overfullrule 5pt}
+
+\@options
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\ifcase \@ptsize\relax
+ \def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt}
+ \def\small{\@setsize\small{11pt}\ixpt\@ixpt
+ \abovedisplayskip 8.5pt plus 3pt minus 4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus2pt
+ \belowdisplayshortskip 4pt plus2pt minus 2pt}
+ \def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+ \abovedisplayskip 6pt plus 2pt minus 4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt
+ \belowdisplayshortskip 3pt plus 1pt minus 2pt}
+ \def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+ \def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+ \def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+ \def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+ \def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+ \def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+ \def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+ \def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+ \abovedisplayskip 11pt plus3pt minus6pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+ \def\small{\@setsize\small{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt}
+ \def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+ \abovedisplayskip 8pt plus 2pt minus 4pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt
+ \belowdisplayshortskip 4pt plus 2pt minus 2pt}
+ \def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+ \def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+ \def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+ \def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+ \def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+ \def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+ \def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+ \def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+ \abovedisplayskip 12pt plus3pt minus7pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+ \def\small{\@setsize\small{13.6pt}\xipt\@xipt
+ \abovedisplayskip 11pt plus3pt minus6pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+ \def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt
+ \belowdisplayshortskip 6pt plus3pt minus3pt}
+ \def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+ \def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+ \def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+ \def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+ \def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+ \def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+ \let\Huge=\huge
+\fi
+
+\normalsize
+
+% \oddsidemargin 53pt \evensidemargin 53pt
+% \marginparwidth 90pt \marginparsep 11pt
+% \marginparpush 5pt \topmargin 27pt
+% \headheight 12pt \headsep 45pt
+% \footheight 12pt \footskip 25pt
+% \textheight 505pt \textwidth 365pt
+% \columnsep 10pt \columnseprule 0pt
+% The above values (letter.sty) are replaced by the following values:
+
+\oddsidemargin 0in
+\evensidemargin 0in
+\marginparwidth .08in
+\marginparsep .01in
+\marginparpush 5pt
+\topmargin -35pt
+\headheight 12pt
+\headsep 25pt
+\footheight 12pt
+\footskip 25pt
+\textheight 8.9in
+\textwidth 6.5in
+\columnsep 10pt
+\columnseprule 0pt
+% (Note that these new values use all of the paper, like in Plain TeX,
+% but disable the writing of marginpar's.
+
+\raggedbottom
+
+\footnotesep 12pt
+\skip\footins 10pt plus 2pt minus 4pt
+
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+% window for toaddress
+\def\@windowrules#1{\gdef\@@windowrules{#1}}
+\def\windowrules{\@windowrules{yes}}
+\def\nowindowrules{\@windowrules{}}
+\windowrules
+
+\def\backaddress#1{\gdef\@backaddress{#1}}
+\backaddress{}
+
+% \opening is quite different from the original one:
+\def\opening#1{\thispagestyle{empty}
+ \vspace*{-2cm} % upper edge of window <----
+ \ifx\@empty\fromaddress \else
+ \setbox0=\vbox{\raggedright \fromaddress \par \bigskip}
+ \vbox{\raggedright \fromaddress \par \bigskip}
+ \vspace{-\ht0}
+ \vspace{-\dp0}
+ \vspace{2.25cm}
+ \ifx\@empty\@@windowrules \hrule width 0pt
+ \else \hrule width 8cm
+ \fi
+ \ifx\@empty\@backaddress \else
+ \vspace{.75cm}
+ \setbox1=\vbox{
+ \hbox to 8cm{\hss{\scriptsize \@backaddress}\hss}}
+ \vbox{
+ \hbox to 8cm{\hss{\scriptsize \@backaddress}\hss}
+ \hrule width 8cm}
+ \vspace{-\ht1}
+ \vspace{-\dp1}
+ \hrule width 0pt
+ \fi
+ \fi
+ \ifx\@empty\@backaddress \vspace{5cm} \else % height of window <----
+ \vspace{4.25cm} % height of window <----
+ \fi
+ \vbox to 0pt{\vss \raggedright \toname \\ \toaddress \par
+ \vspace{.75cm}} % vorher .25cm + \bigskip
+ \ifx\@empty\fromaddress \else
+ \ifx\@empty\@@windowrules \hrule width 0pt
+ \else \hrule width 8cm
+ \fi
+ \vspace{0.85cm}% vorher 1.4cm
+ \hspace*{-2cm}\vbox{\hrule width .3cm}\par
+ \fi
+ \vspace{1cm}
+ {\raggedleft \@place\space\@date \par}
+ \medskip
+ \vspace{0pt plus 1cm} % to help with page break
+ #1\par\nobreak}
+
+\long\def\closing#1{\par\nobreak\vspace{\parskip}
+ \stopbreaks
+ {\raggedright
+ \ignorespaces #1\\[6\parskip]
+ \ifx\@empty\fromsig
+ \fromname
+ \else \fromsig \fi\strut}
+ \par\bigskip}
+
+%\def\ps{\par\startbreaks}
+\def\ps#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm P.S.: }%
+ \ignorespaces #1\strut}\par}
+\def\cc#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm \ccname: }% <-----
+ \ignorespaces #1\strut}\par}
+\def\ccname{cc} % <-----
+\def\encl#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm \enclname: }% <-----
+ \ignorespaces #1\strut}\par}
+\def\enclname{encl} % <-----
+\def\stopletter{}
+
+\def\returnaddress{}
+\newcount\labelcount
+\def\place#1{\gdef\@place{#1,}}
+\def\@place{}
+\def\date#1{\gdef\@date{#1}}
+\def\@date{\today}
+
+\def\startlabels{
+ \labelcount=0 \baselineskip=0pt \lineskip=0pt
+ \pagestyle{empty}
+ \let\@texttop=\relax
+ \topmargin -50pt
+ \headsep 0pt
+ \oddsidemargin -35pt
+ \evensidemargin -35pt
+ \textheight 10in
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \textwidth 550pt
+ \columnsep 25pt
+ \xpt
+ \baselineskip=0pt
+ \lineskip=0pt
+ \boxmaxdepth=0pt
+ \twocolumn\relax}
+\def\mlabel#1#2{\setbox0\vbox{\parbox[b]{3.6in}{%
+ \strut\ignorespaces #2}}
+ \vbox to 2in{\vss \box0 \vss}}
+
+
+
+\long\def\letter#1{\clearpage
+ \c@page\@ne
+ \interlinepenalty=200 \@processto{#1}}
+\def\endletter{\stopletter\@@par\pagebreak\@@par
+ \if@filesw
+ \begingroup
+ \def\protect{\string}
+ \let\\=\relax
+ \def\protect##1{\string##1\space}
+ \immediate\write\@auxout{\string\mlabel{\returnaddress}{\toname
+ \\\toaddress}}
+ \endgroup
+ \fi}
+\long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
+ \else \@yproc #1@@@\fi}
+\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200}}
+
+\def\name#1{\def\fromname{#1}}
+\def\fromname{}
+\def\signature#1{\def\fromsig{#1}}
+\def\fromsig{}
+\long\def\address#1{\def\fromaddress{#1}}
+\def\fromaddress{}
+\def\location#1{\def\fromlocation{#1}}
+\def\fromlocation{}
+\def\telephone#1{\def\telephonenum{#1}}
+\def\telephonenum{}
+
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname@aux
+ \immediate\write\@mainaux{\string\startlabels\string\@startlabels}\fi
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+\def\enddocument{\@checkend{document}\newpage\begingroup
+ \if@filesw \immediate\closeout\@mainaux
+ \makeatletter\input \jobname@aux\clearpage
+ \fi\endgroup\deadcycles\z@\@@end}
+
+\def\makelabels{\@fileswtrue}
+\def\@startlabels{}
+
+
+
+% \def\@texttop{\ifnum\c@page=1\vskip 0pt plus .00006fil\relax\fi}
+\let\@texttop=\relax
+
+\def\ps@headings{
+ \def\@oddhead{\sl \headtoname\ \ignorespaces\toname \hfil \today % <--
+ \hfil Seite \thepage}\def\@oddfoot{}}
+\def\headtoname{To} % <-----
+\def\ps@empty{
+ \def\@oddhead{}\def\@oddfoot{}\def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@firstpage{\def\@oddhead{}\def\@oddfoot{\raisebox
+ {-45pt}[0pt]{\hbox to \textwidth
+ {\hspace*{100pt}\xpt\fromlocation \hfill
+ \telephonenum}}\hss}\def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@plain{
+ \def\@oddhead{}\def\@oddfoot{\rm\hfil\thepage
+ \hfil}\def\@evenhead{}\let\@evenfoot\@oddfoot}
+
+\parskip .7em
+\parindent 0pt
+\topsep .4em
+\partopsep 0pt
+\itemsep .4em
+
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+
+\let\@listi\relax
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep .2em
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -15pt\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15pt}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt
+\tabcolsep 6pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\def\footnoterule{\kern-1\p@
+ \hrule width .4\columnwidth
+ \kern .6\p@}
+
+\long\def\@makefntext#1{\noindent \hangindent 5pt\hbox
+ to 5pt{\hss $~{\@thefnmark}$}#1}
+
+
+\c@topnumber=2
+\def\topfraction{.7}
+\c@bottomnumber=1
+\def\bottomfraction{.3}
+\c@totalnumber=3
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+
+\smallskipamount=.5\parskip
+\medskipamount=\parskip
+\bigskipamount=2\parskip
+
+\ps@plain
+\pagenumbering{arabic}
+\onecolumn
+\@fileswfalse
+
diff --git a/macros/latex209/contrib/misc/accarticle.sty b/macros/latex209/contrib/misc/accarticle.sty
new file mode 100644
index 0000000000..f284020dc7
--- /dev/null
+++ b/macros/latex209/contrib/misc/accarticle.sty
@@ -0,0 +1,184 @@
+% ACCarticle.sty 6-FEB-92 balemi@aut.ethz.ch
+
+\typeout{Document Style `ACCarticle' <6-FEB-92>.}
+%
+% use with
+% \title{} \author{} \maketitle \begin{abstract}..\end{abstract}
+
+% change sizes and margins
+\input article.sty
+%\input IEEE1\@ptsize.sty\relax
+%\twocolumn
+
+\textheight 238mm
+\textwidth 177mm
+\columnsep 15mm
+\voffset -20mm
+\hoffset -30mm
+\twocolumn
+\sloppy
+\flushbottom
+\parindent 0pt
+\parskip 1em
+%\oddsidemargin 1.2truein
+%\evensidemargin 1.2truein
+%\topmargin .6 truein
+
+% added \firstpagestyle so maketitle doesn't output a number if you
+% don't want it to
+\newcommand{\firstpagestyle}[1]{\def\fpgstyle{\thispagestyle{#1}}}
+\firstpagestyle{plain}
+\def\maketitle{\par
+ \begingroup
+% \def\thefootnote{\fnsymbol{footnote}}
+% fnsymbol box size changed 9/9/89 rhr
+% \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \def\@makefnmark{\hbox{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\fpgstyle\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em \begin{center}
+ {\LARGE\bf \@title \par} \vskip 1.5em {\large \lineskip .5em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+% \vskip 1em {\@date}
+ \end{center}
+ \par
+ \vskip 1.5em}
+
+\def\abstract{\begin{center}{\bf Abstract}\end{center} \vskip -\parskip}
+\def\endabstract{\par}
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}.}
+\def\thesubsection {\thesection\arabic{subsection}.}
+\def\thesubsubsection {\thesubsection\arabic{subsubsection}}
+
+\def\@sect#1#2#3#4#5#6#7[#8]#9{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 0.5em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \setbox1=\hbox{\@svsec #8}
+% changed to center sect titles
+ \ifdim \wd1>\columnwidth
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8}
+ \else
+ \ifnum #2 > 1
+ {\@svsec #8}
+ \else
+ \centerline{\@svsec #8}
+ \fi
+ \fi
+ \endgroup
+ \csname #1mark\endcsname{#8}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #8}\else
+ \def\@svsechd{#6\hskip #3\@svsec #9#7\csname #1mark\endcsname
+ {#8}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #8}}\fi
+ \@xsect{#5}}
+
+\def\@startsection#1#2#3#4#5#6#7{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi
+ \vskip -\parskip
+ \@ifstar
+ {\@ssect{#1}{#2}{#3}{#4}{#5}{#6}{#7}}
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}{}{#7}}}}
+
+\def\@ssect#1#2#3#4#5#6#7#8{\@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6
+% \@hangfrom{\hskip #3}{\interlinepenalty \@M #8#7}
+ \setbox1=\hbox{\@svsec #8}
+% changed to center sect titles
+ \ifdim \wd1>\columnwidth
+ \@hangfrom{\hskip #3}{\interlinepenalty \@M #8#7}
+ \else
+ \ifnum #2 > 1
+ \vskip -\parskip
+ \leftline{#8#7}
+ \else
+ \centerline{#8#7}
+ \fi
+ \fi
+ \endgroup
+ \else \def\@svsechd{#6\hskip #3\relax #8#7}\fi
+ \@xsect{#5}}
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \vskip -\parskip
+ \@afterheading
+ \else \global\@nobreakfalse \global\@noskipsectrue
+ \everypar{\if@noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd \endgroup \unskip
+ \hskip -#1
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{}\fi}\fi\ignorespaces}
+
+\def\section{\@startsection{section}{1}{\z@}
+{6.5ex plus 0.5ex minus 0.5ex}{3ex plus 0.3ex}{\bf}{}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{3.0ex plus
+.3ex minus .1ex}{0.01ex plus .0ex}{\hskip -.7ex\bf}{}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{3.0ex plus
+.3ex minus .1ex}{0ex plus .0ex}{\hskip 2em\bf}{:\ \ \ }}
+
+
+\def\QED{~\rule[-1pt]{5pt}{5pt}\par\medskip}
+\newenvironment{proof}{{\bf Proof: \ }}{ \hfill \QED}
+\def\@begintheorem#1#2{\vskip -\parskip\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2:}]}
+\def\@opargbegintheorem#1#2#3{\vskip -\parskip\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+
+
+
+\def\thebibliography#1{\subsection*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\parskip 0pt \list
+ {[\arabic{enumi}]\hfill}{\labelwidth 7mm \leftmargin\labelwidth
+ \itemindent 9mm
+\advance\leftmargin -7mm
+\itemsep -1mm
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@oddhead{}\def\@oddfoot{\hfil
+ \@footernote\ \qquad \thepage}
+\def\@evenhead{}\def\@evenfoot{
+\thepage\qquad \@footernote\ \hfil }
+}
+
+\def\footernote#1{\def\@footernote{#1}}
+\footernote{}
+
+
+% set up default pagestyle
+\pagestyle{plain}
+
+
diff --git a/macros/latex209/contrib/misc/acmproc.sty b/macros/latex209/contrib/misc/acmproc.sty
new file mode 100644
index 0000000000..f4092a3dfe
--- /dev/null
+++ b/macros/latex209/contrib/misc/acmproc.sty
@@ -0,0 +1,186 @@
+% ACMproc.sty
+% PROC DOCUMENT STYLE -- Released 4 September 1986
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+% This is a style option for use with the article style to produce
+% camera-ready conference proceedings.
+
+\typeout{Document Style Option 'ACMproc'}
+
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Dimensions shrink by about 2 percent
+
+% SIDE MARGINS (ACM instructions)
+ \oddsidemargin -0.25in % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin -0.25in
+% to print on a 8.5''x11'' page manually feeded through the
+% LaserWriter
+\advance\oddsidemargin by -4.5mm
+\advance\evensidemargin by -4.5mm
+
+% VERTICAL SPACING (ACM instructions)
+ % Top of page:
+\topmargin -0.25in % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+\advance\topmargin by -37pt % subtract \headheight and \headsep from \topmargin
+\advance\topmargin by -1.7cm % ???
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 100pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT (ACM instructions)
+
+\textheight 9in % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\advance\textheight by 5mm
+\textwidth 7in % Width of text line.
+ % For two-column mode:
+\columnsep .333in % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% ADJUSTMENT FOR A4 PAGE SIZE 900403/BjL
+
+\hoffset=3mm
+\voffset=18mm
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% Use \markright (or \markboth) to put an identification in the
+% lower left. The page number is printed in the lower right.
+
+
+\def\@oddhead{}\def\@evenhead{}
+\def\@oddfoot{\rm\rightmark \hfil Page \thepage}
+\def\@evenfoot{\@oddfoot}
+
+
+% ****************************************
+% * TITLE *
+% ****************************************
+%
+
+% This definition of \maketitle taken from article.sty, except
+% it does not do a \thispagestyle{plain}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%% ATTENTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%% JJL HACK %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Un hack horrible qui change 2.25 en 1.20 pour faire des titres
+% moins hauts REVISED to 1.50 % MJ: revised to 6cm
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \twocolumn[\@maketitle]
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\vbox to 6cm{\hsize\textwidth
+ \linewidth\hsize \vfil \centering
+ {\LARGE \@title \par} % Title set in \LARGE size. MJ: correction
+ % de la correction
+ \vskip 2em % Vertical space after title.
+ {\large \begin{tabular}[t]{c}\@author \end{tabular}\par}
+ \vskip 2em % MJ: leave at least that place after authors
+ \vfil}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%% fin du hack %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The \copyrightspace command is used to produce a blank space in the first
+% column where a copyright notice belongs. It works by producing a
+% blank footnote of the appropriate size. Note that it should appear
+% after any \footnote commands that produce footnotes for the first
+% column.
+
+% modified from 97pt to .75in, to satisfy acm requirement [0]
+% changed to 1in after \advance'ing\textheight by 5mm
+\def\copyrightspace{\footnotetext{\mbox{}\vrule height 1in width 0pt}}
+
+% Section commands changed (smaller font, smaller spaces around) 900403/BjL
+
+\def\section{\@startsection {section}{1}{\z@}{-3.25ex plus -1ex minus
+-.2ex}{1.5ex plus .2ex}{\bf}}
+
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\bf}}
+
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\bf}}
+
+% The abstract Environment (changed 900403/BjL)
+
+\def\abstract{\section*{ABSTRACT}}
+\def\endabstract{\par}
+
+% Bibliography 900403/BjL
+
+\def\thebibliography#1{\section*{REFERENCES\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+% Table of contents 900403/BjL
+
+\def\tableofcontents{\section*{CONTENTS\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+
+% List of figures 900403/BjL
+
+\def\listoffigures{\section*{LIST OF FIGURES\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+
+% List of tables 900403/BjL
+
+\def\listoftables{\section*{LIST OF TABLES\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+
+% Index 900403/BjL
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{INDEX}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\twocolumn
+\sloppy
+\parindent 1em
+\leftmargini 2em
+\leftmargin\leftmargini
+\leftmarginv .5em
+\leftmarginvi .5em
+\flushbottom
diff --git a/macros/latex209/contrib/misc/acronym.sty b/macros/latex209/contrib/misc/acronym.sty
new file mode 100644
index 0000000000..2d21d2b557
--- /dev/null
+++ b/macros/latex209/contrib/misc/acronym.sty
@@ -0,0 +1,105 @@
+% @(#)acronym.sty 1.2 9/11/90 Copyright 1989 ICL
+%
+% Author: John Kewley
+%
+% This style file contains macros for acronyms.
+%
+% Two styles are supported - footnote and parenthesised.
+% This can be switched using \foottrue for footnotes or
+% \footfalse (default) for parenthesised.
+%
+% Parenthesised acronyms are used as follows:
+% Declare acronym using:
+% \newacronym{latex name}{expanded name}[printed name]
+% (The printed name defaults to latex name).
+% e.g. \acronym{GNU}{GNU Not Unix}[\sc{gnu}]
+% When acronym is first used (\GNU), the following is printed:
+% expanded name (printed name)
+% GNU Not Unix (GNU)
+% Subsequent use yields only the printed name.
+%
+% Footnote acronyms work in the same way except when they are first used:
+% printed name\footnote{expanded name}
+%
+% Acronyms can be followed by an optional argument:
+% \newacronym{PE}{Processing Element}
+% \PE['s] gives
+% Processing Element's (PE's)
+%
+% They can also be followed by s to signify the plural:
+% \newacronym{PE}{Processing Element}
+% \PEs gives
+% Processing Elements (PEs)
+%
+% If they are to be referred to before they are first used, in a title say
+% When full expansion might not look good, or in a section heading where
+% the definition would not be wanted in the contents list, short and long forms
+% of the acronym are defined.
+%
+% e.g. \section{\GNUshort\ Comings}
+%
+% The long version can be used where a repetition of the full name is required.
+%
+% Quite often acronyms are defined in a Glossary, Terminology or
+% Table of Acronyms. The item command is provided for this:
+%
+% \GNUitem gives
+% \item[GNU] GNU Not Unix
+%
+% Whenever an acronym is defined using \newacronym, all the above forms are
+% available.
+%
+% John Kewley ICL
+%
+% jk@r6.cs.man.ac.uk or
+% jk@nw.stl.stc.co.uk
+
+% Auxiliary definitions:
+
+% \ifnextchar
+%\def\ifnextchar#1#2#3{\@ifnextchar#1{#2}{#3}}
+
+\def\namegdef#1{\expandafter\gdef\csname #1\endcsname}
+\def\namedef#1{\expandafter\def\csname #1\endcsname}
+\def\nameuse#1{\csname #1\endcsname}
+
+\newif\iffoot \footfalse
+
+\def\acitemx#1#2[#3]{\item [#1#3] #2#3}
+\def\acitem#1#2{\@ifnextchar [{\acitemx{#1}{#2}}{\acitemx{#1}{#2}[]}}
+\def\acfootx#1#2[#3]{#1#3\footnote{#2#3}}
+\def\acfoot#1#2{\@ifnextchar [{\acfootx{#1}{#2}}{\acfootx{#1}{#2}[]}}
+\def\aclongx#1#2[#3]{#1#3 (#2#3)}
+\def\aclong#1#2{\@ifnextchar [{\aclongx{#1}{#2}}{\aclongx{#1}{#2}[]}}
+\def\acshortx#1[#2]{#1#2}
+\def\acshort#1{\@ifnextchar [{\acshortx{#1}}{\acshortx{#1}[]}}
+\def\acronx#1#2[#3]{\iffoot\acfoot{#1}{#2}[#3]\else\aclong{#1}{#2}[#3]\fi}
+\def\acron#1#2{\@ifnextchar [{\acronx{#1}{#2}}{\acronx{#1}{#2}[]}}
+
+\def\newacaux#1#2{\namegdef{#1x}[##1]{#2##1}%
+ \namegdef{#1}{\protect\@ifnextchar [{\protect\nameuse{#1x}}{#2}}}
+\def\newac#1#2[#3]{%
+ \namegdef{#1item}{\acitem{#3}{#2}}
+ \namegdef{#1items}{\acitem{#3s}{#2s}}
+ \namegdef{#1long}{\protect\aclong{#2}{#3}}
+ \namegdef{#1longs}{\protect\aclong{#2s}{#3s}}
+ \namegdef{#1short}{\protect\acshort{#3}}
+ \namegdef{#1shorts}{\protect\acshort{#3s}}
+ \namegdef{#1foot}{\protect\acfoot{#3}{#2}}
+ \namegdef{#1foots}{\protect\acfoot{#3s}{#2s}}
+ \namegdef{#1x}[##1]{\acron{#2##1}{#3##1}\newacaux{#1}{#3}}
+ \namegdef{#1s}{\protect\nameuse{#1x}[s]}
+ \namegdef{#1}{\protect\@ifnextchar [{\protect\nameuse{#1x}}%
+ {\protect\acronx{#2}{#3}[]\protect\newacaux{#1}{#3}}}}
+
+\def\termit#1#2[#3]{\newac{#1}{#2}[#3]\acitem{#3}{#2}}
+\def\termitem#1#2{\@ifnextchar [{\termit{#1}{#2}}{\termit{#1}{#2}[#1]}}
+
+\def\newte#1#2[#3]{\namegdef{#1item}{\acitem{#3}{#2}}}
+\def\newterm#1#2{\protect\@ifnextchar [{\newte{#1}{#2}}{\newte{#1}{#2}[#1]}}
+
+% \newacronym
+% #1 : short name
+% #2 : long name
+% [#3] : optional printed name
+\def\newacronym#1#2{\@ifnextchar [{\newac{#1}{#2}}{\newac{#1}{#2}[#1]}}
diff --git a/macros/latex209/contrib/misc/add-wes.sty b/macros/latex209/contrib/misc/add-wes.sty
new file mode 100644
index 0000000000..857ca00398
--- /dev/null
+++ b/macros/latex209/contrib/misc/add-wes.sty
@@ -0,0 +1,802 @@
+% Save file as: ADD-WES.STY Source: FILESERV@SHSU.BITNET
+% Posted by pauld@cs.washington.edu (Paul Barton-Davis) to comp.text.tex
+% on 23 Aug 91 20:09:12 GMT
+% Original text accompanying post follows \endinput at bottom of file
+%% addison-wesley.sty
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% A `book' style conforming (just!) to the Addison-Wesley house style
+%% Paul Barton-Davis <pauld@cs.washington.edu> December 1988
+%%
+%% v1.05 nmm 29-jun-89 - include notes at head of index
+%% v1.04 nmm 21-jun-89 - change 'part' handling
+%% v1.03 pad 25-feb-89 - added `cexample' and `wexample' environments; fixed
+%% error in `mycaption' which dropped figure
+%% number when caption length > hsize.
+%% v1.02 pad 15-feb-89 - added 'rhfig' to produce figures with captions
+%% alongside instead of underneath, and 'mycaption' to
+%% give nice captions.
+%% v1.01 pad xx-jan-89 - change indents for display envts.
+%%
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Copyright (c):
+%% Freely copy, modify and redistribute on condition that this
+%% copyright notice remains on all such copied, modified or
+%% distributed versions.
+%%
+%% Portions of this file derived from material written by
+%% Leslie Lamport.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% NOTE:
+%%
+%% The author disclaims more or less all responsibility for the design
+%% decisions implicitly represented in this file. This LaTeX
+%% documentstyle was implememented to meet an external design
+%% specification, and its existence neither condones or decries that
+%% specification.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% TO DO:
+%%
+%% right floating figures (properly)
+%% references
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\typeout%
+{Document Style `Addison-Wesley Book' v1.05 nmm 29-jun-89}
+
+%% MATERIAL FROM BOOK.STY
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@twosidetrue \@mparswitchtrue \def\ds@draft{\overfullrule 5pt}
+\@options
+\input bk1\@ptsize.sty\relax
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {chapter}
+\newcounter {section}[chapter]
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart {\arabic{part}}
+\def\thechapter {\arabic{chapter}}
+\def\thesection {\thechapter.\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+\def\@chapapp{Chapter}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{2}
+
+\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+\def\l@part#1#2{\addpenalty{-\@highpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+
+\def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else
+% \vskip \z@ plus .2pt
+ {\hangindent #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ #4\nobreak\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep
+ mu$}\hfill \nobreak \hbox to\@pnumwidth{\hfil\rm #5}\vskip -\parskip
+\par}\fi}
+
+\def\l@chapter#1#2{\pagebreak[3]
+ \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
+\def\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
+\def\l@paragraph{\@dottedtocline{4}{10em}{5em}}
+\def\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
+\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}\if@restonecol\twocolumn
+ \fi}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}\if@restonecol\twocolumn
+ \fi}
+\let\l@table\l@figure
+
+\def\thebibliography#1{\chapter*{Bibliography\@mkboth
+ {BIBLIOGRAPHY}{BIBLIOGRAPHY}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\chaptermark{Index}\columnsep 35pt\twocolumn[\@makeschapterhead{Index}In this index, page numbers are shown
+in {\bf bold} type to indicate a major source of information about the item
+being indexed. Page numbers in {\it italics} indicate a definition.\vskip 1.5cm]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+\@addtoreset{footnote}{chapter}
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize #1: #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+\newcounter{figure}[chapter]
+\def\thefigure{\thechapter.\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}[chapter]
+\def\thetable{\thechapter.\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\def\maketitle{\begin{titlepage}
+ \let\footnotesize\small
+ \let\footnoterule\relax
+ \setcounter{page}{0}
+ \null
+ \vfil
+ \vskip 60pt
+ {\Huge\sf \@title} \vskip 36pt
+ {\large \@author}
+ \vfil
+ \end{titlepage}
+ \setcounter{footnote}{0}
+ \let\maketitle\relax}
+
+\mark{{}{}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\@addtoreset{equation}{chapter}
+\def\theequation{\thechapter.\arabic{equation}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FONTS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Use PostScript fonts (Times as default)
+%% For newer LaTeX's, you can simply insert a new version of
+%% the font definitions here.
+
+\input{psdef.sty}
+\input{times.sty}
+
+%% redefine \LARGE to be 24pt (more in line with A-W's font sizes)
+
+\def\LARGE{\@setsize\LARGE{24pt}\xxpt\@xxpt}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% PAGE DIMENSIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\textwidth 15truecm
+\textheight 22.5truecm
+\baselineskip 14truept
+\oddsidemargin 1cm
+\evensidemargin 1cm
+\topmargin 0cm
+
+%% skip sizes
+
+\parskip 5pt plus 1pt minus 0.5pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% RUNNING HEADERS & FOOTERS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\headerfont{\normalsize\it}
+\newdimen\headerspacer
+\headerspacer 1truecm
+
+\def\ps@headings
+ {
+ \let\@mkboth=\@gobbletwo
+ \def\@oddhead{\hbox to \textwidth
+ {\hfil {\headerfont \@chaptername%
+ \hskip \headerspacer \thepage}}}
+ \def\@oddfoot{\relax}
+
+ \if@twoside
+ \def\@evenhead{\hbox to \textwidth
+ {{\headerfont \thepage%
+ \hskip \headerspacer \the@title} \hfil}}
+ \def\@evenfoot{\relax}
+ \else
+ \def\@evenhead{\relax}
+ \def\@evenfoot{\relax}
+ \fi
+ }
+
+%% Addison-Wesley `plain' headings (for chapter pages - just put the
+%% page number in the bottom right corner)
+
+\def\ps@plain
+ {
+ \let\@mkboth=\@gobbletwo
+ \def\@oddhead{\relax}
+ \def\@oddfoot{\hbox to \textwidth {\hfil \headerfont \thepage}}
+
+ \if@twoside
+ \def\@evenhead{\relax}
+ \def\@evenfoot{\hbox to \textwidth {\headerfont \thepage \hfil}}
+ \else
+ \def\@evenhead{\relax}
+ \def\@evenfoot{\hbox to \textwidth {\headerfont \thepage \hfil}}
+ \fi
+ }
+
+\def\the@title{\@title}
+\def\@title{} %% This is reset by a \title command in the text
+\def\@chaptername{} %% This is reset by a \chapter command in the text
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% ENVIRONMENTS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% new environments, or new definitions of old ones
+%%
+%% - example : for displaying computer interaction
+%% - wexample : as above, but full width
+%% - cexample : as above, but centered
+%% - pseudocode : for displaying pseudo-code
+%% - outputstuff : for displaying computer output
+%% - description : like description, but with equal left & right indents
+%% - itemize : as above, for itemized lists
+%% - enumerate : as above, for enumerated lists
+%% - preface : for prefaces
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% EXAMPLE environment
+%%
+
+\def\examplefont{\tb} %% font (& style) used for all example environments
+\newdimen\exampletopsep %% white space to leave above an example
+\exampletopsep\parskip
+
+\def\example{\list{}{%
+\topsep\exampletopsep
+\rightmargin\leftmargin
+\examplefont}
+\item[]}
+
+\let\endexample\endlist
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% FULL WIDTH EXAMPLE ENVIRONMENT
+%%
+
+\def\wexample{\list{}{%
+\topsep\exampletopsep
+\leftmargin 0pt
+\rightmargin \leftmargin
+\examplefont}
+\item[]}
+
+\let\endwexample\endlist
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% CENTERED EXAMPLE ENVIRONMENT
+%%
+
+\def\cexample{%
+\begin{center}
+\examplefont}
+
+\def\endcexample{\end{center}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% PSEUDO-PSUEDOCODE ENVIRONMENT
+%%
+%% usage:
+
+%% \begin{pseudocode}
+%% if (test clause) \\
+%% \> action statement \\
+%% else \\
+%% \> alternative \\
+%% endif
+%% \end{pseudocode}
+
+%% extra levels of indentation can be achieved with additional \>'s.
+
+\def\pseudocode{\list{}{%
+\topsep \exampletopsep
+\rightmargin \leftmargin
+\examplefont}
+\item[]
+\begin{tabbing}
+\hskip 1cm \= \hskip 1cm \= \hskip 1cm \= \hskip 1cm \= \hskip 1cm \= \kill}
+
+\def\endpseudocode{\endtabbing\endlist}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% OUTPUTSTUFF ENVIRONMENT
+%%
+%% for displaying the output from computer interaction
+
+\def\outputfont{\op} %% font to use for outputstuff
+\newdimen\outputstufftopsep %% space to leave above outputstuff
+\outputstufftopsep\parskip
+
+\def\outputstuff{\list{}{%
+\rightmargin \leftmargin
+\topsep\outputstufftopsep
+\outputfont}
+\item[]}
+
+\let\endoutputstuff\endlist
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% DESCRIPTION ENVIRONMENT
+%%
+%% redefine the `description' environment
+%% to give equal right and left margins,
+%% and parametize its topsep
+
+\newdimen\lrdesctopsep %% space to leave above a description
+\lrdesctopsep\parskip
+
+\def\description{\list{}{%
+\topsep\lrdesctopsep
+\rightmargin\leftmargin
+\itemindent -\leftmargin
+\divide\itemindent by 2
+\labelwidth\z@
+\let\makelabel\descriptionlabel
+}}
+
+\let\enddescription\endlist
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% ITEMIZED LIST ENVIRONMENT
+%%
+
+\def\itemize{%
+\ifnum \@itemdepth >3%
+ \@toodeep%
+\else%
+ \advance\@itemdepth \@ne%
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}%
+ {\def\makelabel##1{\hss\llap{##1}}%
+ \rightmargin\leftmargin}%
+\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% ENUMERATED LIST ENVIRONMENT
+%%
+
+\def\enumerate{%
+\ifnum \@enumdepth >3%
+ \@toodeep%
+\else
+ \advance\@enumdepth \@ne%
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \list{\csname label\@enumctr\endcsname}%
+ {\usecounter{\@enumctr}%
+ \def\makelabel##1{\hss\llap{##1}}%
+ \rightmargin\leftmargin}%
+\fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% PREFACE ENVIRONMENT
+%%
+%% basically just uses roman page numbering, with a plain
+%% pagestyle, and ships out the page(s) when done.
+%%
+%% NB. should really save current pagenumbering and style,
+%% rather than just switching back to arabic/headings
+%% when done
+
+\def\preface{%
+\clearpage
+\pagenumbering{roman}
+\vbox to \chapterboxsize {%
+ \noindent
+ {\LARGE\hb Preface}
+ \vfill}
+\pagestyle{plain}
+\noindent
+
+}
+
+\def\endpreface{%
+\clearpage
+\pagenumbering{arabic}
+\pagestyle{headings}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% SECTIONING
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Boiler plate material for sectioning, parametizing all
+%% spacing, style and font information for users who want
+%% to modify these on the fly (not that they're encouraged to).
+
+\newdimen\abovesectionskip
+\newdimen\belowsectionskip
+\newdimen\abovesubsectionskip
+\newdimen\belowsubsectionskip
+\newdimen\abovesubsubsectionskip
+\newdimen\belowsubsubsectionskip
+\newdimen\baselineskiptwice
+
+\baselineskiptwice=\baselineskip
+\multiply\baselineskiptwice by 2
+
+\abovesectionskip=-\baselineskiptwice
+\belowsectionskip=\baselineskip
+
+\abovesubsectionskip=-\baselineskip
+\belowsubsectionskip=6pt
+
+\abovesubsubsectionskip=-\baselineskip
+\belowsubsubsectionskip=4truept
+
+\def\sectionfont{\large\hb}
+\def\subsectionfont{\normalsize\hb}
+\def\subsubsectionfont{\normalsize\ho}
+
+%% prevent subsubsections and below being numbered
+
+\setcounter{secnumdepth}{2}
+
+%% now define the sectioning commands
+
+%% PART is an exception, in that it doesn't use
+%% \@startsection, but instead just throws out a recto
+%% page with a Part number and associated rubbish with it.
+
+\def\part#1{%
+\cleardoublepage
+\thispagestyle{empty}
+\refstepcounter{part}
+\vbox to \vsize{%
+ \vskip 60pt
+ \hbox to \textwidth{\hfil\Huge\hb Part \thepart \hfil}
+ \vskip 2cm
+ \begin{center}
+ {\LARGE\hb #1}
+ \end{center}
+ \vfill}
+\newpage
+}
+
+\def\section%%
+{\@startsection{section}{1}%
+ {\z@}{\abovesectionskip}{\belowsectionskip}%
+ {\sectionfont}}
+
+\def\subsection%%
+{\@startsection{subsection}{2}%
+ {\z@}{\abovesubsectionskip}{\belowsubsectionskip}%
+ {\subsectionfont}}
+
+\def\subsubsection%%
+{\@startsection{subsubsection}{3}%
+ {\z@}{\abovesubsubsectionskip}{\belowsubsubsectionskip}%
+ {\subsubsectionfont}}
+
+%% \chapter - redefine to ensure chapters begin on a recto
+%% page; use `awplain' for chapter pages; define the@chapter as the
+%% chapter
+
+\def\cleartoversopage{\clearpage \ifodd\c@page \hbox{} \newpage\fi}
+
+\def\chapter{%%
+ \cleardoublepage%%
+ \thispagestyle{plain}%%
+ \global\@topnum\z@
+ \@afterindentfalse%%
+ \secdef\@chapter%%
+ \@schapter}
+
+\def\chaptermark#1{\gdef\@chaptername{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% CAPTIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% \mycaption{figure number}{subnumber}{caption}
+%%
+%% Mysteriously, this macro seems to use absolute figure numbers
+%% rather than relying on LaTeX to figure it out. Now, in 1991, I
+%% don't know why this is. It was probably part of the general
+%% book production scheme, which need to refer to figures by
+%% and not by number; I just don't know. It does, however, allow
+%% subnumbers (like 1.a, 1.b and 1.c).
+
+\def\mycaption#1#2#3{%
+ \setcounter{\@captype}{#1}
+ \addcontentsline{\csname
+ ext@\@captype\endcsname}{\@captype}{\protect\numberline{\csname
+ the\@captype\endcsname}{\ignorespaces #3}}
+ \par
+ \begingroup
+ \@parboxrestore
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\bf Figure \csname the\@captype\endcsname#2}
+ #3}
+ \ifdim \wd\@tempboxa > \hsize
+ \setbox\@tempboxa\hbox{%
+ \bf Figure \csname the\@captype\endcsname#2\ }%
+ \@tempdima \textwidth
+ \advance\@tempdima by -\wd\@tempboxa
+ \hbox{%
+ \box\@tempboxa
+ \vtop{\hsize \@tempdima #3}}
+ \else
+ \par \hbox to \hsize{%
+ \hfil\box\@tempboxa\hfil}
+ \fi
+ \endgroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% RIGHT-HAND INDENTED FIGURES
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newdimen\@txtwd
+\newdimen\@figwd
+\newdimen\rhfigindent
+\rhfigindent 1cm
+
+%% \rhfig{HEIGHT}{WIDTH}{FIGURE NUMBER}{SUBNUMBER}{CAPTION}
+
+\def\rhfig#1#2#3#4#5{%
+ \begin{figure}[htb]
+%%
+%% set up the figure counter and add stuff to the aux file
+%%
+ \setcounter{\@captype}{#3}
+ \addcontentsline{\csname
+ ext@\@captype\endcsname}{\@captype}{\protect\numberline{\csname
+ the\@captype\endcsname}{\ignorespaces #5}}
+%%
+%% now adjust \@txtwd to give the width of the caption
+%%
+ \@txtwd \textwidth
+ \@figwd #2
+ \advance \@txtwd by -\@figwd
+ \advance \@txtwd by -\rhfigindent
+ \setbox\@tempboxa\hbox{\bf Figure \csname the\@captype\endcsname#4\ }
+ \advance \@txtwd by -\wd\@tempboxa
+%%
+%% now set up a pair of hboxed vboxes with the caption in the right hand
+%% one and the figure (space) in the left.
+%%
+ \hbox to \textwidth{%
+ \hbox{\hskip \rhfigindent%
+ \vtop to #1{\vfill
+ \hbox{%
+ \box\@tempboxa
+ \vtop{\hsize\@txtwd #5}}
+ \vfill}}
+ \hfill
+ \hbox to \@figwd{
+ \vtop{\vskip #1}}}
+ \end{figure}}
+
+\newdimen\@figwd
+\newdimen\@txtwd
+\newdimen\@blah
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% CHAPTER HEADINGS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newdimen\chapterboxsize
+\newdimen\chapternumberwidth
+\newdimen\chaptertitlewidth
+
+%% set total depth of chapter heading to be 14 lines
+
+\chapterboxsize \baselineskip \multiply\chapterboxsize by 14
+
+\chapternumberwidth 4cm %% width for "Chapter <number>"
+\chaptertitlewidth \textwidth
+\advance \chaptertitlewidth by -\chapternumberwidth
+
+\def\chapterheadfont{\LARGE\hb}%
+\def\chapternumfont{\LARGE\ho}%
+
+\def\@makechapterhead#1{%
+ \vbox to \chapterboxsize {%
+ \parindent=0pt%
+ \hbox to \textwidth{%
+ \vtop{\hsize \chapternumberwidth \chapternumfont
+ \@chapapp{} \thechapter}
+ \hss
+ \vtop{\baselineskip=26pt \hsize \chaptertitlewidth
+ \chapterheadfont \raggedright #1}}
+ \vfill}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% BOXES (for buttons and such things)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% First a useful construct for putting `struts' into hboxes
+%% to fix their height properly for boxing up.
+%%
+
+\newbox\@adbox%% box with ascenders and descenders present.
+\def\@adstrut{%
+\setbox\@adbox\hbox{bp}%% do this here to make sure we get the current font
+\vrule height \ht\@adbox width 0pt depth \dp\@adbox}
+
+%% \fbox - a new version with better spacing than lamport's
+%%
+%% We just set up two boxes - one the same as the argument,
+%% and the other with its height adjusted to include ascenders and
+%% descenders. It is this box that is used to set the dimensions
+%% of the frame around the first (I hope).
+
+\long\def\fbox#1{\leavevmode\setbox\@tempboxa\hbox{#1\@adstrut}
+ \@tempdima 0pt \advance\@tempdima \fboxsep
+ \advance\@tempdima \dp\@tempboxa
+ \hbox{\lower \@tempdima\hbox
+ {\vbox{\hrule \@height \fboxrule
+ \hbox{\vrule \@width \fboxrule \hskip\fboxsep
+ \vbox{\vskip\fboxsep \box\@tempboxa\vskip\fboxsep}\hskip
+ \fboxsep\vrule \@width \fboxrule}
+ \hrule \@height \fboxrule}}}}
+
+%% STUFF TO START WITH
+
+\ps@headings
+\pagenumbering{arabic}
+\onecolumn
+
+\endinput
+
+From: pauld@cs.washington.edu (Paul Barton-Davis)
+Newsgroups: comp.text.tex
+Subject: Addison-Wesley.sty (documentstyle provided)
+Message-ID: <1991Aug23.200912.1556@beaver.cs.washington.edu>
+Date: 23 Aug 91 20:09:12 GMT
+Sender: news@beaver.cs.washington.edu (USENET News System)
+Organization: Computer Science & Engineering, U. of Washington, Seattle
+Lines: 790
+Originator: pauld@stowe.cs.washington.edu
+
+Below is a documentstyle I wrote for a book called "The X Window
+System - A User's Guide" by Niall Mansfield, published in 1989 by
+Addison-Wesley. As such, it is a style that closely (but not exactly)
+matches A-W's house style for computer-related texts. This is the very
+same file used to format the book, and it was written for this purpose
+only. I have just gone through and added a few comments here and there
+to help anyone else who might want to use it. I haven't used it in a
+long time, and neither has Niall: we're both at work on a new style
+called "STOP", based on the Hughes "STOP" format for user
+documentation. I hope to be posting that within a month or so, but I
+might wait until the new book that uses it is with A-W. If you have
+problems with it, please send me mail. Note that it currently inputs
+two files that set up PostScript Times Roman as the default font
+family. These are not included, since I have posted them before.
+
+Please remember that I know LaTeX a little better now than back then
+(and still not well enough to hack floating indented figures). There
+are several things in the style that I would change if I wrote it
+again; I merely thought that some folks might like a chance to use a
+"real book" documentstyle.
+
+-- enjoy
+ paul
+--
diff --git a/macros/latex209/contrib/misc/ailetter.tex b/macros/latex209/contrib/misc/ailetter.tex
new file mode 100644
index 0000000000..95770970b1
--- /dev/null
+++ b/macros/latex209/contrib/misc/ailetter.tex
@@ -0,0 +1,43 @@
+% This can be used to print letters on AI Lab letterhead on those printers
+% which have them in the third tray. It will also put the extension number
+% in the appropriate place at the bottom of the page; due to feeding
+% variability in the printer, this may sometimes be off. Second and
+% subsequent pages are printed on standard paper; copy to blank bonded
+% paper if you so desire.
+
+% Extension numbers are defined with other personal parameters by the
+% declaration
+%
+% \extension{xxxx}
+%
+% Send bug messages to Yishai@OZ.
+
+\makeatletter
+\let\@origshipout=\shipout
+\def\@testvbox{\vbox}
+\def\@aishipout#1#2{%
+ \def\@foo{#1}
+ \ifx\@foo\@testvbox
+ \@origshipout\vbox to 9.19in{\vskip\@origvoffset
+ \moveright\@orighoffset#1{#2}%
+ \vss
+ \hbox{\hskip 4.9in\ninrm\@extension}}
+ \else\errmessage{Bug in \string\ailetterhead!}
+ \@origshipout#1#2\fi
+ \special{tray 1}%
+ \voffset=\@origvoffset
+ \hoffset=\@orighoffset
+ \global\let\shipout=\@origshipout}
+
+\def\ailetterhead{%
+ \special{tray 3}
+ \xdef\@origvoffset{\the\voffset}
+ \xdef\@orighoffset{\the\hoffset}
+ \hoffset=0pt
+ \voffset=0pt
+ \let\shipout=\@aishipout}
+
+\def\@extension{}
+\def\extension#1{\def\@extension{#1}}
+\makeatother
+
diff --git a/macros/latex209/contrib/misc/aimemo.sty b/macros/latex209/contrib/misc/aimemo.sty
new file mode 100644
index 0000000000..b165645cab
--- /dev/null
+++ b/macros/latex209/contrib/misc/aimemo.sty
@@ -0,0 +1,71 @@
+% Use the full page
+%
+\oddsidemargin 18pt
+\evensidemargin 18pt
+\topmargin 0pt
+\textheight 595pt
+\textwidth 432pt
+
+% Topheading supplies left and right flushed headings for the
+% lrheading command.
+%
+\def\topheadings#1#2{\def\@toplefthead{#1}\def\@toprighthead{#2}}
+
+% Page style: lrheadings
+% put text suplied by the topheadings command in the left and
+% right corners of the topheading.
+%
+\def\ps@lrheadings{%
+\def\@oddhead{\hbox{}\sl\@toplefthead\hfil\sl\@toprighthead}%
+\def\@evenhead{\sl\@toplefthead\hfil\sl\@toprighthead\hbox{}}%
+\def\@oddfoot{\hbox{}\hfil\rm\thepage\hfil}%
+\def\@evenfoot{\hbox{}\hfil\rm\thepage\hfil}}
+
+% Page style: footpagenumber
+% put nothing in header and center the page number in the footer.
+%
+\def\ps@footpagenumber{%
+\def\@oddhead{}\def\@evenhead{}%
+\def\@oddfoot{\hbox{}\hfil\rm\thepage\hfil}%
+\def\@evenfoot{\hbox{}\hfil\rm\thepage\hfil}}
+
+% \skipline leaves a blank line realitive to the size of the current
+% font.
+%
+\def\skipline{\vskip 2em}
+
+% stuff to change the format of figures
+%
+\def\@float#1{\@ifnextchar[{\@xfloat{#1}}{\edef\@tempa{\noexpand\@xfloat
+ {#1}[\csname fps@#1\endcsname]}\@tempa}}
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \boxmaxdepth\z@
+ \hsize\columnwidth \@parboxrestore}
+
+\def\end@float{\egroup
+ \ifnum\@floatpenalty <\z@
+ \@cons\@currlist\@currbox
+ \ifdim \ht\@currbox >\textheight
+ \ht\@currbox\textheight \fi
+ \global\@outputdonefalse
+ \ifnum\@floatpenalty < -\@Mii
+ \penalty\@floatpenalty
+ \if@outputdone\else\global\@outputdonetrue
+ \vbox{}\penalty\@floatpenalty\fi
+ \else \vadjust{\penalty \@floatpenalty}\@esphack\fi\fi}
+
+\def\@dblfloat#1{\if@twocolumn\else\@latexerr{Two-column float
+on one-column page}\@ehd\fi
+\@ifnextchar[{\@xdblfloat{#1}}{\@xdblfloat{#1}[tp]}}
diff --git a/macros/latex209/contrib/misc/alleqno.sty b/macros/latex209/contrib/misc/alleqno.sty
new file mode 100644
index 0000000000..5ebce6ad95
--- /dev/null
+++ b/macros/latex209/contrib/misc/alleqno.sty
@@ -0,0 +1,49 @@
+% alleqno.sty -- LaTeX style file to make displayed equations numbered
+% by default.
+%
+% This document style option makes all displayed equations numbered by
+% default. In particular, it defines things so that \[, \], \[[, and
+% \]] may be used as follows:
+%
+% \[ ... \] ==> \begin{equation} ... \end{equation}
+% \[[ ... \]] ==> \begin{eqnarray} ... \end{eqnarray}
+%
+% These new commands are short, and they stand out clearly from the
+% surrounding text on a terminal screen.
+%
+% Note that \begin{displaymath} ... \end{displaymath} should *not* be
+% used with this style file -- use \[ ... \] instead. To override the
+% default and get an unnumbered displayed equation, use a one-line
+% \begin{eqnarray} ... \end{eqnarray}.
+%
+% - Jonathan Thornburg, 25/Sept/88
+%
+% Dept of Geophysics & Astronomy thornburg@mtsg.ubc.ca
+% The University of British Columbia userbkis@ubcmtsg.bitnet
+% Vancouver BC V6T 1W5 userbkis%ubc@um.cc.umich.edu
+% Canada ubc-vision!ubcmtsg.bitnet!thornburg
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Thanks to Donald Arseneau for help with the following macro.
+\def\mygobbletoken{\let\myjunktoken= }%%%
+%
+\def\[{\futurelet\mydisplayselect\mydisplay}%%%
+\def\mydisplay{%%%
+ \if\mydisplayselect[%%%
+ \begin{eqnarray}\let\mynextcommand=\mygobbletoken%%%
+ \else%%%
+ \begin{equation}\let\mynextcommand=\relax%%%
+ \fi%%%
+ \mynextcommand
+}%%%
+%
+\def\]{\futurelet\mydisplayselect\myenddisplay}%%%
+\def\myenddisplay{%%%
+ \if\mydisplayselect]%%%
+ \end{eqnarray}\let\mynextcommand=\mygobbletoken%%%
+ \else%%%
+ \end{equation}\let\mynextcommand=\relax%%%
+ \fi%%%
+ \mynextcommand
+}%%%
diff --git a/macros/latex209/contrib/misc/alltt2.sty b/macros/latex209/contrib/misc/alltt2.sty
new file mode 100644
index 0000000000..6c5988553b
--- /dev/null
+++ b/macros/latex209/contrib/misc/alltt2.sty
@@ -0,0 +1,47 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Mario Wolczko",
+%%% version = "2",
+%%% date = "21 May 1992",
+%%% time = "20:53:23 BST",
+%%% filename = "alltt2.sty",
+%%% address = "Dept of Computer Science
+%%% The University of Manchester
+%%% Oxford Road
+%%% Manchester M13 9PL
+%%% UK",
+%%% telephone = "+44-61-275-6146",
+%%% FAX = "+44-61-275-6236",
+%%% checksum = "29088 47 178 1848",
+%%% email = "mario@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, verbatim",
+%%% supported = "no",
+%%% docstring = "Modification of the alltt style to indent
+%%% alltt environments by \allttindent parameter",
+%%% }
+%%% ====================================================================
+
+% ALLTT2 DOCUMENT-STYLE OPTION - modified from alltt of 17 December 1987
+% for LaTeX version 2.09
+% Copyright (C) 1987 by Leslie Lamport
+
+% same as alltt (q.v.), but has a parameter length (\allttindent) that
+% controls how much an allt environment is indented wrt it's context.
+
+\newdimen\allttindent \allttindent=0pt % set this to change the indent
+
+\def\docspecials{\do\ \do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+
+\def\alltt{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin \advance\leftskip\allttindent \rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \tt \catcode``=13 \@noligs
+\let\do\@makeother \docspecials
+ \frenchspacing\@vobeyspaces}
+
+\let\endalltt=\endtrivlist
+
+
diff --git a/macros/latex209/contrib/misc/altnline.sty b/macros/latex209/contrib/misc/altnline.sty
new file mode 100644
index 0000000000..7ca6e6f281
--- /dev/null
+++ b/macros/latex209/contrib/misc/altnline.sty
@@ -0,0 +1,189 @@
+% altnline.sty Version - 1.1
+%
+% Disclaimer - Use at your own risk.
+%
+% James Fortune
+% Oakland University
+% jafortun@vela.acs.oakland.edu
+%
+% Based upon the TUGboat article ``Output Routines: Examples and Techniques.''
+% that appeared in Volume 11 (1990), Nos. 1, 3 and 4.
+%
+% This version incorporates suggestions made by Michal Jaegermann, namely:
+%
+% * Include explicit reference to the TUGboat article
+% * ``You can use \def in style files without violating LaTeX spirit.
+% If you are writing style it is assumed that you know what you are
+% doing. :-)'' --- I don't know what I'm doing so I left the \newcommand
+% and \renewcommand commands as is.
+% * Internal macros from style file should be protected against name conflicts
+% with user stuff by inclusion of '@' character in names. --- This is quite
+% reasonable so command names that the user is not expected to use in a
+% LaTeX file have been changed to include the '@' character.
+% * He sent a new appendline command that adds numbers on a left margin
+% only that was also inspired by the Salomon article. He left it as an
+% exercise for me to modify it for two-sided printing. I probably shouldn't
+% have picked something from the double dangerous bend signs for my first
+% serious attempt at hacking on a style file :-).
+% * A global linesSoFar so that lineCount may be set to linesSoFar to deal
+% with box255 being broken from the bottom up. countlines (or its
+% equivalent) advances linesSoFar by a count of lines on a current page.
+% * Use of a decremented remainder variable to determine when to add a number
+% to a line. --- I'm trying to get all the lines first.
+% * He advised not trying to combine the countlines and duplicate operations
+% into a single loop. ``I am afraid that you really have to first count
+% how many lines you have on a page and later use this value to produce
+% line numbers.''
+%
+% Changes to version 1.1 - Michal Jaegermann, ntomczak@vega.math.ualberta.ca
+%
+% * Added logic to print line numbers only every \lineCountInterval
+% * Added a way to set up ONE range of numbered lines; use \nlinesBoundary
+% to do that. (It is possible to sprinkle your text with \nlinesBoundary
+% commands and they may even do the right thing if you will put them
+% in right places - but this is a hack.)
+% * Miscellaneous cleanup
+% * Every implicit or explicit \clearpage will still cause
+% 'Output routine didn't use all of \box255' message. Any volunteers
+% who know enough about LaTeX output routine to repair that?
+%
+
+% \font\sevenrm=cmr7
+
+% Rainer showed me how to save the previous \output. Thanks Rainer.
+\newtoks\LaTeX@output
+\LaTeX@output = \expandafter{\the\output}
+
+\newcommand\zero@ToSp{\parskip=\@ne sp plus\@ne pt
+ \renewcommand\vfil{\vskip1sp plus1fil}
+ \renewcommand\vfill{\vskip1sp plus1fill}
+ \abovedisplayshortskip=\@ne sp plus3pt
+ \postdisplaypenalty=\@ne
+ \interlinepenalty=\@ne}
+
+\zero@ToSp
+
+
+\newcount\lin@CountInit % used to establish lineCount of first line on page
+\lin@CountInit=\z@
+\newcount\lineCountInterval % used to determine how often lin@Count is printed
+\lineCountInterval=5
+%
+\newcount\lin@CountStart % don't print line numbers below this value
+\lin@CountStart=\@ne
+\newcount\lin@CountFinish % don't print line numbers higher than this
+\lin@CountFinish=\m@ne
+%
+% A command to set boundaries for line numbering. Use as:
+% \nlinesBoundary{12}, or \nlinesBoundary[50]{12}
+% \nlinesBoundary[<optional upper limit>]<lower limit>
+% Any negative number for an upper limit means number to the very end.
+% This is a default!
+%
+\def\nlinesBoundary{\@ifnextchar[{\nlin@sBoundary}{\nlin@sBoundary[\m@ne]}}
+\edef\nlin@sBoundary[#1]#2{%
+ \global\lin@CountFinish=#1\relax
+ \global\lin@CountStart=#2\relax}
+
+\newif\ifa@@lnum % do we really want to print that line number?
+
+\newcount\lin@sSoFar
+% remainder from division of \lin@sSoFar by \lineCountInterval
+\newcount\total@Rem
+% current value of remainder used to produce line numbers
+\newcount\lin@rem
+% these calculations allow to start with \lin@CountInit different from 0
+\newcommand\resetlin@sSoFar{%
+ \global\lin@sSoFar=\lin@CountInit
+ \total@Rem=\lin@CountInit
+ \divide\total@Rem by\lineCountInterval
+ \multiply\total@Rem by-\lineCountInterval
+ \global\advance\total@Rem by\lin@CountInit}
+
+\resetlin@sSoFar
+
+\newcount\lin@Count
+\newif\ifAnyleft \newcount\pen
+\newcommand\count@lines{%
+ \global\lin@Count=\lin@sSoFar
+ \loop \Anyleftfalse
+ \ifdim\lastskip=\z@ \ifdim\lastkern=\z@ \ifnum\lastpenalty=\z@
+ \setbox0=\lastbox
+ \ifvoid0
+ \else \Anylefttrue \global\advance\lin@Count by\@ne
+ \global\advance\total@Rem by\@ne
+ \ifnum\total@Rem=\lineCountInterval
+ \global\total@Rem=\z@
+ \fi\fi
+ \else \Anylefttrue \unpenalty \fi
+ \else \Anylefttrue \unkern \fi
+ \else \Anylefttrue \unskip \fi
+ \ifAnyleft \repeat}
+
+\newcommand\@duplicate{%
+ \loop \Anyleftfalse
+ \ifdim\lastskip=\z@ \ifdim\lastkern=\z@ \ifnum\lastpenalty=\z@
+ \global\setbox0=\lastbox \ifvoid0 % end of breakup loop
+ \else \Anylefttrue % box present
+ \ifnum\lin@rem=0 % if remainder non-zero we do not care
+ \lin@rem=\lineCountInterval
+ \ifnum\lin@Count<\lin@CountStart
+ \a@@lnumfalse
+ \else
+ \ifnum\lin@CountFinish<0 % no upper bound
+ \a@@lnumtrue % print it
+ \else
+ \ifnum\lin@Count>\lin@CountFinish
+ \a@@lnumfalse
+ \else
+ \a@@lnumtrue % this is the ticket
+ \fi
+ \fi
+ \fi
+ \else
+ \a@@lnumfalse
+ \fi
+ \ifa@@lnum
+ \append@line
+ \else
+ \global\setbox1=\vbox{\box0\unvbox1}
+ \fi
+ \advance\lin@Count\m@ne
+ \advance\lin@rem by\m@ne\fi
+ \else \Anylefttrue % penalty present
+ \pen=\lastpenalty
+ \global\setbox1=\vbox{\penalty\pen\unvbox1}\unpenalty\fi
+ \else \Anylefttrue % kern present
+ \dimen0=\lastkern
+ \global\setbox1=\vbox{\kern\dimen0\unvbox1}\unkern \fi
+ \else \Anylefttrue % skip present
+ \skip0=\lastskip
+ \global\setbox1=\vbox{\vskip\skip0\unvbox1}\unskip \fi
+ \ifAnyleft \repeat}
+
+\newcommand\append@line{% attach line number
+ \setbox2=\vbox to \z@{\smash{\footnotesize\the\lin@Count}}
+ \wd2=25pt % that much of space for a line number
+ \ifodd\count0 % on the right margin for odd pages
+ \setbox0=\hbox{\box0\rlap{\rule{\wd2}{\z@}\box2}}
+ \else % and on the left for even
+ \setbox0=\hbox{\llap{\box2}\box0}
+ \fi
+ \global\setbox1=\vbox{\box0\unvbox1}} % add this to a reconstructed page
+
+\newbox\brk % Use old output definition if page is not to be output
+\output={\ifnum\outputpenalty <-\@M
+ \output={\LaTeX@output}
+\else
+ \lin@Count=\lin@sSoFar
+ \setbox\brk=\vbox{\unvcopy\@cclv\count@lines}
+ \global\setbox1=\vbox{}
+ \lin@rem=\total@Rem
+ \global\lin@sSoFar=\lin@Count
+ \setbox\brk=\vbox{\unvcopy\@cclv\@duplicate}
+ \ifdim\ht\brk>\z@\message{Incomplete breakup}\fi
+ \ht1=\z@\dp1=\z@
+ \global\setbox\@cclv=\vbox to\vsize{\unvbox1}% attempt to get glues back
+ \@makecol\@opcol
+\fi}
+\endinput
diff --git a/macros/latex209/contrib/misc/annotation.sty b/macros/latex209/contrib/misc/annotation.sty
new file mode 100644
index 0000000000..7758cbbb26
--- /dev/null
+++ b/macros/latex209/contrib/misc/annotation.sty
@@ -0,0 +1,62 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% File "annotation.sty" (by Tom Hofmann, E-mail: wtho@cgch.UUCP)
+% 1989-10-30
+%
+% This File contains the definition of a LaTeX environment "annotation"
+% which allows to alternatively print or suppress parts of the document.
+%
+%
+% Usage:
+%
+% - Declare "annotation" as documentstyle option or include this file
+% by "\input{annotation.sty}"
+% - Embed annotations in "\begin{annotation}" and "\end{annotation}"
+% - To print the document including the annotations write "\printnotes"
+% before the first annotation. Alternatively, write "\suppressnotes"
+% to print without annotations.
+% - The default setting is "\printnotes".
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% (1) Definition of the environment "annotation" when notes are
+% to be printed.
+
+\def\printnotes{\def\annotation{}} % "\endannotation" can be missing
+
+% (2) Definition of the environment "annotation" when notes are not
+% to be printed.
+
+% Make '{' and '}' "other characters" and make '(' and ')'
+% "begingroup" and "endgroup" resp. Thus make it possible
+% to have "\end{annotation}" as part of a macro definition.
+
+\begingroup\makeatletter % since the catcodes of '{' and '}'
+\catcode`{=12\relax\catcode`}=12\relax % will change, use \begingroup and
+\catcode`(=1\relax \catcode`)=2\relax % \endgroup instead.
+
+\gdef\suppressnotes(%
+
+% Make '{' and '}' searchable when expanding the macro by giving them
+% the same catcode in the subsequent text as in the macro definition.
+
+ \gdef\annotation(\catcode`{=12\relax\catcode`}=12\relax\@NOTE)
+
+% Skip text between "\begin{annotaion}" and "\end{annotation}"
+% (inclusive), but return an "\end{annotation}" command to LaTeX for
+% the correct environment handling (see below).
+
+ \long\gdef\@NOTE##1\end{annotation}(\@ENDNOTE))
+
+
+\endgroup % End of the enchantment.
+
+% Generate an environment-end command conformable to LaTeX.
+
+{\makeatletter\gdef\@ENDNOTE{\end{annotation}}}
+
+\printnotes % This is the default setting.
+
+%%%%%%%% END OF FILE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/macros/latex209/contrib/misc/answers.sty b/macros/latex209/contrib/misc/answers.sty
new file mode 100644
index 0000000000..e1e253b570
--- /dev/null
+++ b/macros/latex209/contrib/misc/answers.sty
@@ -0,0 +1,155 @@
+
+%% This is ANSWERS.STY
+%% Copyright (C) 1992 by Mike Piff.
+%% All rights reserved.
+%% Copying of this file is authorized only if
+%% you make absolutely no changes to your copy.
+%%
+%%
+%%Name: ANSWERS.STY
+%%Description: A style option to LaTeX that allows answers to problems to
+%% be included adjacent to the problems in the source file.
+%% The answers are written out to a subsidiary file, ready to
+%% be included later in the document.
+%% An example is appended to the end of the style file.
+%%Keywords: answers,solutions,problems,exercises
+%%Author: "Mike Piff" <M.Piff@sheffield.ac.uk>
+%%Latest version: 10/27/92 02:43pm
+%%Supported: Yes
+
+
+
+%% Usage
+%% \documentstyle[answers]{article} %% in LaTeX
+
+
+
+\let\@@it=\it %% save meaning of \it
+\def\RestoreIt{\global\let\it\@@it}
+\def\Noit{\global\let\it\RestoreIt} %%let \it revert to old meaning
+%% this is useful in, for instance,
+%% \newtheorem{exercise}{Exercise\Noit}
+%% \newtheorem{Solution}{Solution\Noit}
+%% which gives an upright rather than italic style
+
+\newwrite\@ns
+
+{\catcode`\<=1 \catcode`\>=2 \catcode`\{=12 \catcode`\}=12
+ \gdef\LBRACE<{>\gdef\RBRACE<}>
+ \catcode`\|=0 |catcode`|\=12 |gdef|END<\end>>
+
+%% This defines the conventions
+%% #1 = \Solution, say
+%% #2 = environment name to use in solution file
+%% #3 = environment terminating solution in problems file
+%% The line that ends the solution must consist only of \end{#3},
+%% with no leading spaces.
+\def\SolutionMarker#1#2#3{%
+ \let#1=\ExSolution
+ \def\solutionmark{#2}%
+ \def\exercisemark{#3}%
+ \edef\DefineEnd{\gdef\noexpand\@ndexercise{\END\LBRACE#3\RBRACE}}%
+ \DefineEnd
+}
+\newif\ifhint
+\def\HintMarker#1{\def#1{\global\hinttrue\ExSolution}}
+
+\def\newsolution#1#2{%
+ \expandafter\def\csname#1\endcsname##1##2{%
+ \trivlist\item[\hskip\itemsep{\bf#2 ##1%
+ \def\temp{##2}%
+ \ifx\temp\empty\else\ (##2)\fi}]}%
+ \expandafter\def\csname end#1\endcsname{\endtrivlist}%
+}
+
+%%Write directly to solution file
+\def\Write#1{{\let\protect\string \immediate\write\@ns{#1}}}
+
+\outer\def\Opensolutionfile#1{% #1=filename
+ \immediate\openout\@ns=#1
+ \Write{\string\BeginSolutions}%
+ \OpenHook
+}
+
+\def\Closesolutionfile{%
+ \Write{\string\EndSolutions}%
+ \immediate\closeout\@ns
+ \CloseHook
+}
+%%Note that \OpenHook and \CloseHook may be redefined to take parameters, in
+%%which case, say
+%%\OpenSolutionFile{FileName}{Param1}{Param2}...
+%%\OpenHook might also write parameters to \BeginSolutions to the \@ns file
+
+%%This is similar to The TeXbook. However, a solution is allowed to contain
+%%blank lines here.
+\def\PreSolutionSpacer{\Write{}}
+\def\ExSolution{\PreSolutionSpacer
+ \Write{\string\begin{\solutionmark}%
+ {\csname the\exercisemark\endcsname}{\ifhint Hint\fi}}%
+ \global\hintfalse
+ \c@pytoendEx}
+\def\c@pytoendEx{\begingroup\s@tupcopy\c@pyans}
+\def\s@tupcopy{\def\do##1{\catcode`##1=12}\dospecials%
+ \catcode`\|=12 \makeatother\obeylines\let\n@xt\empty}
+
+\def\@Ndgroup{\endgroup\expandafter\end\expandafter{\exercisemark}%
+ \PostSolutionSpacer}
+\def\PostSolutionSpacer{}
+
+{\obeylines \gdef\c@pyans#1
+ {\def\n@xt{#1}%
+ \ifx\n@xt\@ndexercise\Write{\string\end{\solutionmark}}\let\n@xt=\@Ndgroup%
+ \else\Write{\n@xt}\let\n@xt=\c@pyans\fi\n@xt}}
+
+%% Default values
+\def\OpenHook{}
+\def\CloseHook{}
+\def\BeginSolutions{}
+\def\EndSolutions{}
+\SolutionMarker\Solution{solution}{exercise}
+
+\endinput
+
+
+
+
+%% Example of usage
+\documentstyle[12pt,answers]{article}
+
+\newtheorem{exercise}{Exercise\Noit}[section]
+\newsolution{solution}{Solution}
+
+\SolutionMarker\Solution{solution}{exercise}
+\HintMarker\Hint
+
+%%\renewcommand{\OpenHook}[1]{\Write{\protect\section{#1}}}
+\renewcommand{\OpenHook}{\Write{\protect\section*{Solutions to Section \thesection}}}
+\renewcommand{\CloseHook}{}
+
+\renewcommand{\BeginSolutions}{\clearpage\small}
+\renewcommand{\EndSolutions}{\clearpage\normalsize}
+
+\begin{document}
+\section{Problems}
+\Opensolutionfile{testsol}%%{Solutions}
+\begin{exercise}
+ Question
+\Solution Answer
+\end{exercise}
+\begin{exercise}
+ Another Question
+\Hint A Hint
+\end{exercise}
+\Closesolutionfile
+\input{testsol}
+\end{document}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Dr M J Piff %% e-mail:
+%% Department of Pure Mathematics %%
+%% University of Sheffield %% M.Piff@sheffield.ac.uk
+%% Hicks Building %%
+%% Hounsfield Road %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% SHEFFIELD S3 7RH %% Telephone: SHEFFIELD (0742) 768555
+%% England %% Ext. 4431
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/misc/apalike-plus.readme b/macros/latex209/contrib/misc/apalike-plus.readme
new file mode 100644
index 0000000000..2c5ff00ac5
--- /dev/null
+++ b/macros/latex209/contrib/misc/apalike-plus.readme
@@ -0,0 +1,18 @@
+apalike-plus.sty - This is for people who want something like apalike.sty
+ (perhaps because they are using apalike.bst), but who
+ want the extra features described below.
+
+With this style-option:
+- the default title is "References", but can be changed by putting a
+ \renewcommand{\bibtitle}{...} command before \begin{thebibliography}
+- if the document style is such that \pagestyle{headings} is used,
+ "REFERENCES" goes in the page-heading by default, but can be changed
+ with \renewcommand{\bibheadtitle}{...}
+- thebibliography gives an \addcontentsline command, so that \tableofcontents
+ puts the bibliography (with appropriate title) in the table of contents.
+
+authordate1-4.sty - This is for people who are using one of the BibTeX
+ author-date style files authordate1.bst, ... ,
+ authordate4.bst. It redefines \cite and thebibliography,
+ and also defines a \shortcite command such that if \cite
+ gives "(Smith, 1970)", \shortcite gives "(1970)".
diff --git a/macros/latex209/contrib/misc/apalike-plus.sty b/macros/latex209/contrib/misc/apalike-plus.sty
new file mode 100644
index 0000000000..2405fd2ce6
--- /dev/null
+++ b/macros/latex209/contrib/misc/apalike-plus.sty
@@ -0,0 +1,68 @@
+% This style-option file, apalike-plus.sty, is based on apalike.sty.
+% As such, it can be used to redefine \cite and thebibliography for:
+% - production of do-it-yourself author-date bibliographies
+% - use with BibTeX, with \bibliographystyle{apalike}.
+%
+% It differs from apalike.sty in that:
+% - a command \bibtitle is defined, to generate the bibliography title
+% - a command \bibheadtitle is defined, to generate the text to be used
+% by \pagestyle{headings}
+% - \bibtitle and \bibheadtitle are set to generate "References" and
+% "REFERENCES" respectively.
+% - an \addcontentsline{toc}{...}{\bibtitle} command is issued.
+% Thus:
+% - the default bibliography title is "References", but can be changed by
+% having \renewcommand{\bibtitle}{...} before \begin{thebibliography}
+% or \bibliography
+% - the default page header text is "REFERENCES", but can be changed by
+% \renewcommand{\bibheadtitle}{...}
+% - \tableofcontents will give a table of contents that mentions the
+% bibliography.
+%
+% David Rhead
+% Cripps Computing Centre
+% Nottingham University
+% February 1990
+
+% Use parens instead of brackets for \cite, and no label in the bibliography
+%
+\def\@cite#1#2{(#1\if@tempswa , #2\fi)}
+\def\@biblabel#1{}
+
+% Set length of hanging indentation for bibliography entries
+%
+\newlength{\bibhang}
+\setlength{\bibhang}{2em}
+
+% Define default title and page-head text.
+%
+\def\bibtitle{References}
+\def\bibheadtitle{REFERENCES}
+
+\@ifundefined{chapter}{\def\thebibliography#1{\section*{\bibtitle\@mkboth
+ {\bibheadtitle}{\bibheadtitle}}
+ \addcontentsline{toc}{section}{\bibtitle}\list
+ {\relax}{\setlength{\labelsep}{0em}
+ \setlength{\itemindent}{-\bibhang}
+ \setlength{\leftmargin}{\bibhang}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}}%
+{\def\thebibliography#1{\chapter*{\bibtitle\@mkboth
+ {\bibheadtitle}{\bibheadtitle}}
+ \addcontentsline{toc}{chapter}{\bibtitle}\list
+ {\relax}{\setlength{\labelsep}{0em}
+ \setlength{\itemindent}{-\bibhang}
+ \setlength{\leftmargin}{\bibhang}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}}
+
+% `; ' goes between cites, and there's no \hbox around individual cites
+%
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{; }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
diff --git a/macros/latex209/contrib/misc/apeqnum.sty b/macros/latex209/contrib/misc/apeqnum.sty
new file mode 100644
index 0000000000..12ed2cf20d
--- /dev/null
+++ b/macros/latex209/contrib/misc/apeqnum.sty
@@ -0,0 +1,21 @@
+% This is apeqnum.sty
+% 8-November-1990
+% Don Hosek
+% Style option for article.sty and derivatives; causes equations
+% to be numbered A1, A2, A3, B1, etc. in a document.
+
+% First save a copy of the old meaning of \appendix
+\let\apeqnum@appendix=\appendix
+
+% Now, we will redefine \appendix so that it does the following:
+% (1) The old functions of \appendix (\apeqnum@appendix)
+% (2) Causes equations to be numbered beginning from one at
+% the beginning of each appendix (this is accomplished
+% for the article style with the command
+% \@addtoreset{equation}{section})
+% (3) Change the definition of \theequation (which prints the
+% equation numbers) so that the appendix letter is prepended.
+\def\appendix{%
+ \apeqnum@appendix % (1)
+ \@addtoreset{equation}{section} % (2)
+ \def\theequation{\thesection\arabic{equation}}} % (3)
diff --git a/macros/latex209/contrib/misc/apguide.tex b/macros/latex209/contrib/misc/apguide.tex
new file mode 100644
index 0000000000..30be4ac53e
--- /dev/null
+++ b/macros/latex209/contrib/misc/apguide.tex
@@ -0,0 +1,1484 @@
+% Save file as: APGUIDE.TEX Source: FILESERV@SHSU.BITNET
+% This is the file APGUIDE.TEX
+% from version 2.0 of the REVTEX macro package.
+%
+% This file is part of a compuscript toolbox distributed by
+% the American Physical Society in conjunction with
+% the TeX author-prepared program.
+%
+% All rights not specifically granted are reserved,
+% American Physical Society, 1991.
+%
+% Permission is granted to make and distribute verbatim
+% copies of the complete toolbox provided that the README file
+% and copyright notices are preserved on all copies.
+% Permission is granted to use the style files provided that
+% neither the content of the style files nor their names are changed.
+% APS macros may be used and distributed provided each use is
+% accompanied by an appropriate acknowledgment.
+%
+% For more information, see the README file.
+%
+\documentstyle[revtex]{aps}
+\begin{document}
+\def\SNG{{\em Physical Review Style and Notation Guide}}
+\def\UG {{\em \LaTeX\ User's Guide \& Reference Manual}}
+\def\btt#1{{\tt$\backslash$\string#1}}%
+\begin{title}
+Input Guide for \TeX\ Author-Prepared Compuscripts
+\end{title}
+\vskip .5in
+\narrowtext
+
+\section{INTRODUCTION}
+\label{sec:intro}
+
+In 1987, the Council of The American Physical Society authorized
+acceptance of \TeX -formatted author-prepared compuscripts to be
+submitted to the {\em Physical~Review A, B, C,} and {\em D\/}
+in machine-readable
+form. It
+is essential that author-prepared input be consistent and
+standardized so that the compuscripts can become part of the normal
+production procedures. It is only by routinely handling
+author-prepared files that this
+method of production will be economically feasible.
+
+
+This input guide contains basic instructions for keyboarding
+compuscripts using the {\em REVTEX\/} macro package, which works
+in a \LaTeX\ environment.
+This guide is part of the ``\TeX\ compuscript toolbox'';
+other items in the toolbox are the
+{\em REVTEX\/} macro package (several style files), test files,
+a README file (which contains details regarding installation and
+copying of the style files), and hard copy
+of the {\em Physical Review Style and Notation Guide}.
+For correct notation and style practices, authors should read the
+{\em Physical Review Style and Notation Guide}, furnished with
+the toolbox;
+authors also should be guided
+by recent issues of {\em Physical~Review.}
+
+%You may wish to supplement this input guide with
+%the excellent documentation available for \LaTeX : namely,
+%the {\em User's Guide \& Reference Manual}.
+%It is important that this input guide be followed
+%whenever possible.
+
+Compuscripts
+that do not comply closely with these instructions will be
+returned to the author for changes.
+
+{\bf Contents of this Guide.}
+In Sec.\ \ref{sec:gensubmit} we describe procedures for
+making an original submission (review purposes) to the Editorial
+Offices. Sections\ \ref{sec:conmailsub} and \ref{sec:e-mail} detail
+procedures for conventional mail and electronic mail submissions,
+respectively.
+
+Section \ref{sec:process} briefly describes author proofs.
+
+Section \ref{sec:filesubmit} discusses the specifications
+for file submittal (floppy, tape, electronic mail).
+
+In Sec.\ \ref{sec:instruct} we describe in detail
+several aspects of compuscript creation:
+the input of front matter and how to switch from
+galley to preprint format;
+paragraph formatting, hyphenation, quotes, and textwidth issues;
+section headings;
+basic input for in-text math and displayed equations; special
+character issues; footnotes and references; figure captions;
+and tables.
+
+In Sec.\ \ref{sec:xrefs} we have described the various
+autonumbering features of {\em REVTEX}; these features
+can be used to autonumber equations, figures, tables,
+references, and section heads.
+
+Finally, Sec.\ \ref{sec:samples}
+contains two sample compuscripts, input and output,
+preprint format and galley format. These two samples
+(one brief and
+descriptive, and another an actual published
+{\em Physical Review\/} manuscript)
+illustrate many {\em REVTEX} and \LaTeX\ features that
+are necessary to create a compuscript.
+
+Appendix \ref{sec:commands} is a handy list of some
+necessary commands that will be found in a {\em REVTEX}
+compuscript. This command list supplements the \LaTeX\ {\em User's
+Guide and Reference Manual}.
+
+Appendix \ref{sec:upgrade} itemizes the differences
+between v1 and v2 of {\em REVTEX}, for current users of
+v1.
+
+Authors who have not ever participated in the author-prepared
+program may wish to read Appendix \ref{sec:fastfacts}
+and Appendix \ref{sec:macros}
+at this point.
+There we give a brief
+overview of the author-prepared program and answer some
+frequently asked author questions.
+
+Appendix \ref{sec:contacts} lists the people and places
+to contact if you have questions about any services
+described herein. To obtain the most proper and expedient
+answer to your question, please consult Appendix E before calling
+or e-mailing the APS.
+
+{\bf Note on participating journals}.
+The compuscript program is open to all {\em Physical
+Review A, B, C,} and {\em D\/} authors. At press time, project
+development efforts had begun to expand the program to include
+{\em Physical Review Letters\/} and {\em Reviews of Modern Physics}.
+It is anticipated that {\em Physical
+Review Letters\/} authors
+will be able to participate in a compuscript program by December of
+1991 (possibly earlier). Procedures for participation in the
+{\em Physical Review Letters\/} compuscript program will differ
+from those detailed in this guide, however, use of {\em REVTEX\/}
+will remain essentially the same. Please contact the authors of
+this guide for information on project development status for
+either {\em Physical Review Letters\/} or {\em Reviews of Modern
+Physics}.
+
+%
+
+ Unless specified in Appendix \ref{sec:contacts},
+ questions regarding this Input Guide should be directed
+ to Peggy C. Sutherland, APS Publications Liaison Office,
+ 500 Sunnyside Blvd., Woodbury, NY 11797.
+
+
+\section{GENERAL COMPUSCRIPT SUBMISSION\\ PROCEDURES}
+\label{sec:gensubmit}
+
+Original submissions to the editorial offices can be made via
+conventional mail or electronic mail. Both methods are
+described below. Conventional mail submission is
+described, unless otherwise specified.
+
+When the {\em REVTEX\/} compuscript is ready to go, it
+should should be submitted to the Editorial Offices in
+conformance with the
+printed procedures in the first issue of each volume of {\em Physical
+Review A, B, C,} and {\em D}. The following procedures
+are those unique to compuscript processing.
+
+It should be stated in the communication accompanying the manuscript
+that the paper is to be considered as a
+\TeX -formatted author-prepared compuscript and the preference
+for file medium (floppy, e-mail, tape). See Sec.\
+\ref{sec:filesubmit} for detailed
+file submittal specifications.
+
+The manuscript will go through the usual refereeing process
+and normal editorial functions. Frequently there are manuscript
+changes needed in response to referee and editor
+questions/suggestions. All such changes should be indicated
+in the correspondence that accompanies a revised manuscript
+and/or file.
+
+
+{\bf It is very important} that no undocumented changes be made to the
+file after the manuscript has been sent to the
+editor's office. The importance of this
+cannot be overemphasized. Publication delays will be experienced
+if there are any discrepancies, {\bf however minor they may
+be,} between the compuscript file
+and the manuscript that has been given to the editor's
+office.
+
+
+\subsection{Conventional mail submissions}
+\label{sec:conmailsub}
+
+Original submissions
+that involve paper copies of the manuscript and
+the postal system are conventional mail submissions.
+
+If the author has submitted conventionally,
+then the
+author should await word from the Editorial Office
+before sending the compuscript file; conventional
+submissions require that compuscript files be forwarded only
+after formal acceptance of the manuscript by the APS Editorial
+Offices.
+
+When received by conventional mail at the editor's office,
+the manuscript will begin the usual editorial
+processing route. The special handling needed for
+compuscript processing will be initiated. See Fig.\ 1.
+
+%%%Figure 1 is not in TeX format, therefore it
+%%%cannot be included in this file.
+
+As part of routine preprocessing
+for compuscripts, the author will be contacted to establish that
+the compuscript file meets the necessary requirements for
+inclusion in the author-prepared program. The author will
+be asked several questions related to the file.
+
+It is important that the author respond promptly to these queries.
+This information is critical for a compuscript to be included
+in the author-prepared program. It is not in the spirit
+of the author-prepared program to delay processing
+of a manuscript solely for the purpose of including
+the manuscript in the program. Therefore, if critical information
+is not available at the time the manuscript
+is given editorial approval for publication, then
+the manuscript will not be included in
+the program.
+
+
+In most cases, when/if accepted for publication by the %
+scientific editor, the author will be asked to send the compuscript
+file. (The exceptional case exists when the author opts to
+make manuscript corrections; see Sec.\ \ref{sec:process}.)
+%SHOULD GO ELSEWHERE The author should (1) modify front matter
+% for galley output, and
+%(2) \LaTeX\ the paper to evaluate equation lengths, shortening
+%or ``breaking'' equations where necessary before
+%providing the file.
+
+Frequently there are manuscript changes
+needed in response to referee and editor
+questions/suggestions. All such changes must be indicated
+in the correspondence that accompanies a revised manuscript.
+The file must be exactly represented by the
+latest (hard copy) manuscript that was sent to the Editorial Offices.
+If there are known differences,
+these should be itemized in communication
+accompanying the file. Delays will result if these instructions
+are not followed.
+
+\subsection{Electronic mail submissions}
+\label{sec:e-mail}
+
+Original submissions that involve
+machine readable files of the manuscript and an
+electronic mail system are electronic mail submissions.
+See Fig.\ 2.
+
+All such submissions and inquiries should be addressed
+to {\tt tex@apsedoff}. Manuscript submissions must include a covering
+message stating to which journal the paper is submitted
+and must provide a conventional mailing address.
+
+Figures must be forwarded by FAX at the same time that the manuscript
+is sent by electronic mail. The FAX number is (516) 924-5294;
+the FAX transmission should be marked for the attention of
+Debbie Stuart. Readable FAX copies of figures are sufficient
+for reviewing purposes only. Original figures should be
+forwarded by
+conventional or overnight mail as soon as possible.
+
+The file must be in ASCII and not contain any control characters.
+Line lengths should
+be kept to 70 characters or less.
+
+If the transmissions of the \TeX\ file and figures have been
+successful, an acknowledgment will be sent by electronic mail.
+If any problems are encountered by Editorial Services staff,
+the author will be contacted
+immediately via electronic mail and informed of the problem. If
+no acknowledgment is received within 24 hours, it should
+be assumed that the file was not received.
+
+Copies of the manuscript must {\bf not} be sent by
+conventional mail. Only original figures should be sent
+via conventional mail.
+
+A copy of the manuscript that has been generated by
+Editorial Services staff will be forwarded to the
+author.
+
+\section{PRODUCTION OF AUTHOR PROOFS}
+\label{sec:process}
+
+Ordinarily, editor and copyeditor changes are made
+to the file at the production site.
+(If the author opts to make all file changes,
+it should be so indicated in the cover letter
+that accompanies the manuscript. Please contact the authors
+of this guide for procedural details.)
+
+When/if a manuscript is accepted for publication, the
+manuscript and the compuscript file will be forwarded to
+production.
+Standard procedures for production will be in effect, and the
+author will receive the correspondence associated with routine
+manuscript publication. The manuscript will be returned to the
+author with the galleys. The manuscript will be thoroughly marked
+to indicate where file changes were needed,
+and the author will
+be responsible for thorough proofreading of galleys.
+
+Although the author has assumed the keyboarding responsibility
+and the proofreading
+responsibility, the production staff will still perform a complete
+proofreading of the article and will insert necessary
+changes. Requested tabular additions also will be
+inserted. Page proofs therefore should
+be carefully checked. Return the marked manuscript and the
+proofed galley to the address indicated on the galley and
+the necessary corrections will be handled by the production staff.
+
+\section{FILE SUBMITTAL SPECIFICATIONS}
+\label{sec:filesubmit}
+
+Please see Sec.\ \ref{sec:gensubmit} for important submittal
+procedures.
+
+
+Compuscripts should be submitted (1) on a DOS-formatted
+floppy disk, (2) on a UNIX-generated
+nine-track magnetic tape, or (3) via electronic mail. The tape/floppy
+should be labeled to
+indicate the code number of the manuscript, the names
+of all the files on the tape, and the return
+address of the submitting author. The following list indicates the
+acceptable formats and densities for the tape.
+
+\smallskip
+
+\indent\hbox to19mm{Formats:\hfil} tp, tar.
+
+\indent\hbox to19mm{Densities:\hfil} 800 bpi, 1600bpi.
+
+\smallskip
+
+The tape/floppy may contain one large file, e.g.,
+BB1010, or may contain
+a series of separately named files, e.g., BB1010,
+BB1010caps, BB1010tabs.
+The code number of the compuscript does not have to
+be used as the file
+name or names; smithpaper, smithcaps, smithfigs, etc., will suffice.
+
+Upon receipt of the file(s) by the production
+office, the contents will be
+concatenated and assigned the appropriate production code number.
+The compuscript file will then be evaluated for various
+potential problems and compliance with the input
+instructions. Compuscripts may be returned to the author at this
+time if extensive changes are necessary.
+
+
+All bitnet receipts will be acknowledged.
+
+\section{COMPUSCRIPT INSTRUCTIONS}
+\label{sec:instruct}
+
+Author-prepared compuscripts should include the following parts
+in this order: title, authors, byline,
+abstract, suggested PACS numbers (1990 Physics and
+Astronomy Classification), main manuscript body,
+references, figure captions, and tables. The production staff will
+add verified PACS numbers.
+Specific instructions pertaining to various parts of the compuscript
+are listed below as well as a short annotated example of compuscript
+input. Formatting commands (macros) are indicated where necessary.
+
+Manuscripts should not contain any author-defined macros. Macros which
+are simple text substitutions can be ``expanded'' by the author before
+submittal. More complicated macros can create problems when the file
+is edited for production and should also be avoided.
+See Appendix \ref{sec:macros}
+for further information.
+
+\subsection{Front matter}
+
+{\bf Preprints vs Galley form.} The {\em REVTEX\/} macro package
+has been developed to accommodate the preprint needs of the author
+as well as the production needs of the APS.
+If you use {\em REVTEX\/} to prepare a manuscript for submission
+to the Editorial Offices, only minor changes are needed
+to participate in the author-prepared program.
+These minor changes are (1) modifying the first
+line of the file and (2) breaking long equations
+where needed. Guidelines
+for equation breaking are outlined later; front
+matter is discussed below.
+
+The editors of {\em Physical Review\/} require a large typeface with
+adequate space between typed lines for technical editing marks and
+wide margins for editor and author comments. This {\bf preprint
+format} can be obtained with the following front matter:
+
+\begin{verbatim}
+\documentstyle[preprint,revtex]{aps}
+\begin{document}
+\draft
+\end{verbatim}
+
+{\bf Galley format}, which is needed for production of the
+page that goes to the printer, is produced by
+the following front matter:
+
+\begin{verbatim}
+\documentstyle[revtex]{aps}
+\begin{document}
+\draft
+\end{verbatim}
+
+
+\subsection{Text}
+
+{\bf Paragraphs} always begin with a blank input line.
+{\bf Do not hyphenate} words at the end of a line; \TeX\ will do
+this. Continue to hyphenate modifiers within a line of text, e.g.,
+``author-prepared copy.''
+
+{\bf Use curly quotes} for quotation marks
+around quoted text ({\tt ``xxx''})
+not straight quotes ({\tt "xxx" }). [For
+opening quotes, this is two octal 140 characters (hex 60);
+for closing quotes,
+this is two octal 047 (hex 27) characters.]
+
+There are two commands that control the width of
+the text across the page in the galley
+format; \btt{narrowtext} will set
+the column width to 3$\case3/8$ in., and the \btt{widetext}
+command will set the text 7 in.\ wide. The \btt{widetext} command
+is needed to set very long equations. See the section on
+displayed math, below.
+
+Neither \btt{narrowtext} or \btt{widetext}
+have any effect on the output if the front matter calls for
+the preprint form. The preprint output is a uniform
+6 in.\ throughout.
+
+Don't use \btt{smallskip}, \btt{bigskip}, or any other vertical motion
+commands. Horizontal motion commands are unnecessary as well.
+
+\subsection{Section headings}
+
+Three levels of headings are provided in {\em REVTEX\/}:
+{\tt section}, {\tt subsection},
+and {\tt subsubsection}.
+Precede the section heading with the \btt{nonum} command to suppress
+the automatic numbering; e.g.,
+\begin{verbatim}
+ \nonum\section{Introduction}
+\end{verbatim}
+
+To label a section heading for cross
+referencing use the \btt{label} command {\em after\/}
+the heading; e.g.,
+\begin{verbatim}
+ \section{Introduction}
+ \label{sec:intro}
+\end{verbatim}
+
+\subsection{In-text math}
+
+{\em Physical Review\/} uses the delimiter \$
+for any \TeX\ in-line math, e.g.,
+\begin{quote}
+ {the quantity $a^z$}
+\end{quote}
+is obtained from the input
+ \begin{verbatim}
+ the quantity $a^z$
+ \end{verbatim}
+
+Another example of in-line math is
+
+\smallskip
+
+ \leftline{\bf input:}
+ \begin{verbatim}
+ ... difference between $\langle J_z \rangle
+ (t)$ and $\langle J_z\rangle_{\rm HF}(t) ...$
+ \end{verbatim}
+\leftline{\bf output:}
+ \begin{quote}
+ ... difference between $\langle J_z \rangle (t)$ and $\langle
+ J_z \rangle_{\rm HF}(t) ...$
+ \end{quote}
+
+\smallskip
+
+Standard mathematical style conventions are followed
+for in-line math such as smaller point size for
+superscripts/subscripts, appropriate use of roman,
+italic, and Greek fonts, and the use of special math symbols.
+(See the {\em Style and Notation Guide} for help.)
+\TeX\ will take care of setting the point size appropriately
+for variables and numbers in the superscript/subscript position.
+To get the appropriately sized superscript/subscript in the
+roman font, use the \btt{rm} command:
+\smallskip
+\begin{quote}
+ \leftline{\bf input:}
+ \begin{verbatim}
+ $... J_{\rm HF}(t) ...$
+ \end{verbatim}
+\end{quote}
+\leftline{\bf output:}
+\begin{quote}
+ $... J_{\rm HF}(t) ...$
+\end{quote}
+\smallskip
+\TeX\ will assume that you want the superscript or subscript
+to consist of the first {\em token\/} (generally a single
+character or command) following the \^{} or \_, {\em unless\/}
+you use curly brackets to delimit the subscript/superscript. It is
+safest to use the curly brackets if unsure.
+The curly brackets here also serve to limit the scope of the
+{\tt\string\rm} command.
+Again, don't use any vertical motion commands in math; horizontal
+motion commands are unnecessary as well.
+
+\subsection{Displayed equations}
+
+The most common (and preferred) type of
+displayed equation in {\em Physical
+Review\/} is a narrow, {\bf indented single-line equation, with an
+equation number on the same line}. Try to set as many equations as you
+can in this way. Because some equations are longer
+than this type of styling will allow, there are other types of
+displays to accommodate longer equations.
+
+Equations can be set flush left with the margin if they do not
+fit in the column; dropping the equation numbers to the line
+below the equation will also help and is handled automatically
+by {\em REVTEX\/} for single-line equations.
+Breaking the equation into multiline format may be necessary for very
+long equations.
+
+If an equation needs to be broken into more than four lines, it should
+be set in a wide column for ease of reading, using the \btt{widetext}
+command. The author should return to \btt{narrowtext} as soon
+as possible after one or more very long equations.
+
+
+In Sample Compuscript A, we have
+illustrated how to obtain each of the above.
+
+
+\subsubsection{Numbering displayed equations}
+
+The {\em REVTEX\/} macro package allows two methods for numbering
+equations: you can assign your own equation numbers
+or you can allow {\em REVTEX\/} to number for you.
+
+Use the command \btt{eqnum}$\{${\em thenumber}$\}$
+to number your own equations. You can also use this command to
+produce a specific equation number not normally obtainable; $(1')$,
+for example.
+
+For automatically numbered single-line and multiline equations, use
+the {\tt equation} and {\tt eqnarray} environments.
+You can use the \btt{[},\btt{]}
+commands and the {\tt eqnarray$\ast$} environment for unnumbered
+single-line and
+multiline equations, respectively. The command \btt{nonumber} will
+suppress the numbering on a single line of an eqnarray.
+
+If you wish a series of equations to be a lettered sequence, e.g.,
+(1a), (1b), and (1c), just include the equations or eqnarray within
+the {\tt mathletters} environment.
+
+Finally, to have {\em REVTEX\/} number equations by section,
+use the {\tt eqsecnum} style option.
+
+See Sample Compuscript A to see examples of how all this works.
+
+\subsubsection{Cross-referencing displayed equations}
+
+Authors will probably not cross-reference every equation
+in text. When a numbered equation needs to be
+referred to in text by its number,
+the \btt{label\{{\em tag}\}} and \btt{ref\{{\em tag}\}}
+commands should be used. The
+\btt{label} command is used within the equation or the eqnarray line
+to be referenced:
+
+\smallskip
+
+\leftline{\bf input:}
+\begin{verbatim}
+\begin{equation}
+A=B \label{pauli}
+\end{equation}
+... It follows from Eq.\ (\ref{pauli})
+that this is the case ...
+\end{verbatim}
+\leftline{\bf output:}
+\begin{equation}
+A=B \label{pauli}
+\end{equation}
+... It follows from Eq.\ (\ref{pauli}) that this
+is the case ...
+
+\smallskip
+
+Please note the parentheses surrounding the command.
+They are necessary for proper output.
+You can also label individual lines in an eqnarray.
+Numbers produced with \btt{eqnum} can also be cross-referenced:
+just follow the \btt{eqnum} command with a \btt{label} command.
+Please see Sec.\ \ref{sec:xrefs}
+for further information about cross-referencing.
+
+\subsection{Special Characters}
+
+Authors should avoid the use of specially designed ``define
+characters'' and choose symbols from those shown in the {\em
+\LaTeX\ User's Guide \& Reference Manual}.
+There is no guarantee that a specially designed definition
+will produce the desired results at the production installation.
+If a special symbol is required and not listed in the \UG ,
+please request special consideration
+in the cover letter accompanying the file submittal. The
+copyeditor will make note of it and the production staff
+will attempt to accommodate the author.
+
+Unusual characters are subject to approval by the editor.
+
+\subsection{Footnotes and references}
+
+The list of references should appear after the main
+body of the paper. Please refer to the \SNG\ and
+recent issues of {\em Physical Review\/} for current style.
+Sample Compuscript A shows
+examples of a variety of reference entries, e.g., journal, book,
+byline, and private communication.
+
+References will be listed in the reference section using the
+\btt{bibitem} command, and they will be cited in text using
+the \btt{cite} command.
+
+A byline footnote and the first reference cited
+may appear in the reference section like this:
+
+\smallskip
+
+\begin{verbatim}
+\begin{references}
+\bibitem[*]{AAAuth}Present Address: Brookhaven
+National Laboratory, Upton, New York, 11973.
+\bibitem{tal82}Y. Tal and L. J. Bartolotti,
+J. Chem. Phys. {\bf 76}, 4056 (1982).
+\end{references}
+\end{verbatim}
+
+\smallskip
+
+The {\tt [*]} represents an optional, author-specified
+reference label. If a reference label is not
+present, {\em REVTEX\/} will assign
+the next available reference number.
+
+{\tt$\{$tal82$\}$} is a tag; it can be any string of
+letters and numbers that you will easily associate with the
+reference. This tag will be used in text to tell \TeX\ what
+reference you want to cite. See the example below.
+
+\bigskip
+
+\leftline{\bf input:}
+\begin{verbatim}
+... This has been noted previously \cite{tal82}.
+\end{verbatim}
+\leftline{\bf output:}
+\begin{quote}
+... This has been noted previously \cite{tal82}.
+\end{quote}
+\smallskip
+Input for an author name with a byline footnote
+is similar, but the output is different:
+
+\bigskip
+
+\leftline{\bf input:}
+\begin{verbatim}
+\author{A. A. Author\cite{AAAuth}}
+\end{verbatim}
+\leftline{\bf output:}
+\author{A. A. Author\cite{AAAuth}}
+
+\bigskip
+
+(See the
+\SNG\ for details on proper usage of byline footnotes.)
+Output (galley form) in the reference section for
+the footnote and reference
+samples above will look like this:
+
+\begin{references}
+\bibitem[*]{AAAuth}Present Address: Brookhaven
+National Laboratory, Upton, New York, 11973.
+\bibitem{tal82}Y. Tal and L. J. Bartolotti,
+J. Chem. Phys. {\bf 76}, 4056 (1982).
+\end{references}
+
+
+\bigskip
+
+\leftline{\bf Quick guide to references:}
+
+\smallskip
+
+$\bullet$ The \btt{bibitem} command begins a reference.
+
+$\bullet$ References should be listed in the reference section
+in the order in which they are first cited in the text.
+(See next item.)
+
+$\bullet$ References will automatically be numbered by {\em REVTEX\/}
+in the order in which they occur in the reference section, unless the
+author provides his/her own label.
+
+$\bullet$ The {\tt$\{$tal82$\}$} is a tag; it can be any string of
+letters and numbers that you will easily associate with the
+reference. This tag will be used in text to tell \TeX\ what
+reference you want to cite.
+
+$\bullet$ Footnotes to the byline should precede the
+references and should not be numbered. Provide a label in
+square brackets following the \btt{label} command.
+For {\em Physical Review A, B, C,} and {\em D,}
+use [{\tt*}], [\btt{dag}], [\btt{ddag}], [\btt{S}], [{\tt**}],
+[\btt{dag}\btt{dag}], [\btt{ddag}\btt{ddag}], [\btt{S}\btt{S}]
+in the order listed. This conforms to the requirements
+detailed in {\em The Style and Notation Guide}.
+
+\bigskip
+
+\subsection{Figure captions}
+
+Figure captions are a part of the compuscript and should appear after
+the references. They should be input
+sequentially in the order in which they are
+cited in the text; \LaTeX\ will label and number the captions
+FIG.~1, FIG.~2, etc.
+
+Note below the use of
+the \btt{label} command; this is used to cross-reference
+figures in text. The \btt{label} command should be inserted
+after the text of the figure caption, before the final
+curly bracket.
+
+\smallskip
+
+\leftline{\bf input:}
+\begin{verbatim}
+\figure{Text of first caption.\label{fig1}}
+
+\figure{This is the second caption:
+comparison of the differential cross sections
+for the subprocess $qg \rightarrow qggg$ of our
+approximation (dotted line) versus the
+approximation of Maxwell together with the use
+of the effective structure function
+approximation(solid line).\label{fig2}}
+
+\end{verbatim}
+\leftline{\bf output:}
+
+\figure{Text of first caption.\label{fig1}}
+
+\figure{This is the second caption:
+comparison of the differential cross sections
+for the subprocess $qg \rightarrow qggg$ of our
+approximation (dotted line) versus the approximation
+of Maxwell together with the use of the
+effective structure function approximation
+(solid line).\label{fig2}}
+
+\bigskip
+
+Figures are cited in text with the use of the \btt{ref} command:
+
+\smallskip
+
+\leftline{\bf input:}
+\begin{verbatim}
+...It can be seen from Fig.\ \ref{fig1} that
+the data are inconsistent with this
+conclusion...
+\end{verbatim}
+
+\leftline{\bf output:}
+
+\smallskip
+
+...It can be seen from Fig.\ \ref{fig1} that
+the data are inconsistent with this conclusion...
+
+\smallskip
+
+\noindent
+Further information on cross-referencing can be found
+in Sec.~\ref{sec:xrefs}.
+
+Figures and illustrations are submitted as originals or glossy prints.
+Follow the rules in the \SNG\ for style and specifications.
+
+\subsection{Tables}
+
+Tables are a part of the compuscript and should appear at the end of
+the file. Every table must have a complete caption and the correct
+number of descriptive column headings. Tables may be narrow
+(8.6~cm or 3.4~in.\ wide), medium (14~cm or 5.5~in.\ wide),
+or wide (17.8~cm or 7.0~in.\ wide), in galley format.
+An example of each appears in the sample compuscript input.
+Tables will be sized at the production site to be set narrow, medium,
+or wide (according to the number of columns, type of material, etc.).
+(When using the preprint form for {\em REVTEX\/}, all tables will
+be set 6~in.\ wide. {\em REVTEX\/} will ignore \btt{narrowtext},
+\btt{mediumtext}, and \btt{widetext} commands if the front matter
+of the file calls for the preprint form.)
+
+Each table must begin with \btt{begin}$\{${\tt table}$\}$,
+and end with \btt{end}$\{${\tt table}$\}$.
+Follow current {\em Physical Review\/}
+style concerning placement of table lines. (See examples in this
+guide and recent issues of {\em Physical Review}.) The table
+commands will set double horizontal
+lines appearing at the beginning and end of the table;
+a single horizontal rule should be set after the column headings with
+the use of the \btt{tableline} command.
+Extra sets of column headings within the table will require another
+\btt{tableline} to separate the headings from the column entries.
+Do not insert any other horizontal or vertical
+lines in the body of the table.
+
+Since tables are automatically numbered,
+the \btt{label} command is used with the \btt{ref} command
+to cite tables in text. The \btt{label} command should
+appear after the \btt{end}{\tt $\{$tabular$\}$ }and
+before the \btt{end}{\tt$\{$table$\}$} command.
+\bigskip
+
+\leftline{\bf Some special table considerations:}
+
+\smallskip
+
+
+$\bullet$ {\em Numerical columns\/} should align on the decimal point
+(or decimal points if more than one is
+present). See Sample Compuscript A.
+
+$\bullet$ Use \$ delimiters for all math in
+a table (no displayed equation commands). See Sample Compuscript A.
+
+$\bullet$ {\em Footnotes\/} in a table must be labeled a, b, c, etc.
+See Sample Compuscript A.
+
+$\bullet$ {\em Extra wide tables\/}
+that will not fit into the 17.8-cm or 7.0-in.\ designation
+can be manipulated by the production staff to produce a turned table
+that will appear lengthwise on a page. A cover letter requesting
+this special handling should accompany tape submittal.
+The author can use the \btt{squeezetable} command with tables that
+do not fit on the page.
+
+\bigskip
+Authors should consider the feasibility of depositing extensive
+tabular material in the Physics Auxiliary Publication Service
+of the American Institute of Physics. This material will usually
+be included in the Microfilm edition of the {\em Physical~Review}.
+For details, please write to the Editorial Office.
+
+\section{CROSS-REFERENCING}
+\label{sec:xrefs}
+
+{\em REVTEX\/} has built-in features for autonumbering of
+section headings, equations, tables, and figures.
+This section contains a simplified explanation of
+cross-referencing features. The format for using these
+features with section headings, equations, tables, and figures
+is discussed in the appropriate section.
+
+Cross-referencing depends upon the use of ``tags,'' which
+are defined by the user. The \btt{label} command is used
+to identify tags for \TeX . Tags are strings of characters that
+serve to label equations, tables, and figures, so that
+you don't need to know what number {\em REVTEX\/} has assigned to
+the item in order to talk about it in text.
+
+You will need to \LaTeX\ the original file more than once to
+ensure that the tags have been properly
+linked to appropriate numbers. If you add any tags,
+you will need to \LaTeX\ more than once in subsequent work sessions:
+ \LaTeX\ will
+display an error message that ends with {\tt ... Rerun
+to get cross-references right}.
+If you see that message, \LaTeX\ the file again.
+If the error message appears after two \LaTeX ings,
+please check your labels; you probably have referred to
+an item in text without tagging the item.
+
+You may not need to know (or care to know) all about what
+\LaTeX\ is doing for autonumbering; however, you may want to know that
+when you \LaTeX\ the file for the first time, an
+auxiliary file with the {\tt .aux} filename extension will be
+created that connects numbers with their tags. Subsequent
+\LaTeX ing accesses the auxiliary file to put the proper number
+in the text.
+
+Sample Compuscript A illustrates the use of cross-referencing.
+
+
+\widetext
+
+
+\section{COMPUSCRIPT SAMPLES}
+\label{sec:samples}
+
+In the following pages is a short annotated sample compuscript
+(Sample A) in input and output form. The various parts
+of the compuscript are explained as well
+as the associated galley formatting commands (macros).
+The input follows the output.
+
+The {\em REVTEX\/} galley macro package produces
+single-column galleys (sometimes double-column width for
+long equations, wide figures,
+and tables). The galleys are sent to
+the art department where the output
+and figures are combined in a two-column format onto camera-ready
+boards that are then sent to the printer.
+
+Please review the various sections of the output and compare
+to the input.
+
+For a more comprehensive example of compuscript input, see
+Sample Compuscript B (galley format and preprint format).
+
+
+\subsection{Sample Compuscript A}
+%% NOTE:
+%% The compuscript sample that appears here in the Input Guide
+%% is actually the file SMPLEA.TEX, and is included separately in the
+%% toolbox.
+
+\subsection{Sample Compuscript B -- Galley Format}
+%% NOTE:
+%% The compuscript sample that appears here in the Input Guide
+%% is actually the file SMPLEB.TEX, and is included separately in the
+%% toolbox.
+
+\subsection{Sample Compuscript B -- Preprint Format}
+%% NOTE:
+%% The compuscript sample that appears here in the Input Guide
+%% is actually the file SMPLEC.TEX, and is included separately in the
+%% toolbox.
+
+\mediumtext
+\appendix{Command list}
+\label{sec:commands}
+
+In the following pages is a brief description of some
+necessary commands.
+Those commands that are unique to {\em REVTEX\/} are so noted
+with {\tt (R)}. Please consult the \LaTeX\ {\em User's Guide and
+Reference Manual\/} if you have further questions
+regarding \LaTeX\ commands.
+
+If commands require arguments, they are so noted
+with \#{\tt 1}, \#{\tt 2}, etc.
+The commands are in order of their probable occurrence in a file.
+
+\vskip .5in
+\begin{verbatim}
+\documentstyle[#1]{aps} Will allow for proper formatting of paper; use
+ [preprint,revtex] for #1 if preprint format
+ is desired, and use [revtex] for #1 if galley
+ format is desired. To number equations by
+ section, use the eqsecnum option:
+ [revtex,eqsecnum].
+
+\tightenlines Preprint style outputs a double-spaced
+ manuscript. When used in preprint style,
+ this command reverts to single spacing to
+ save paper. Has no effect in galley style.
+ Use before \begin{document}. (R)
+
+\begin{document}, Necessary in the beginning and end of file.
+\end{document}
+
+\preprint{#1} When used as the first command of a document,
+ places #1 at the top right corner of the first
+ page in preprint style. Used for site-specific
+ preprint numbers. (R)
+
+\draft Omission of this command will cause printing
+ of PACS numbers to be stifled. (R)
+
+\begin{title}, Signals beginning or end of title. The title
+\end{title} should be broken with the \\ command.
+
+\author{#1} #1 represents a list of authors. Use \\ to force
+ linebreaks.
+
+\begin{instit}, Signals beginning or end of an author's address
+\end{instit} (institution). The address should be
+ broken with \\ if necessary.
+
+\receipt{#1} #1 represents the date of receipt at the
+ Editorial Offices. This date will be
+ inserted at the production site. (R)
+
+\begin{abstract}, Signals the beginning or end of the abstract.
+\end{abstract}
+
+\pacs{#1} #1 represents valid PACS numbers. This command
+ should be used after the abstract, even if
+ #1 is empty. (R)
+
+\narrowtext For galley format, will set all text that
+ follows into a 3 3/8 in. column. Does not
+ affect preprint output. (R)
+
+\mediumtext For galley format, will set figure captions
+ and tables 5 1/2 in. wide. Does not
+ affect preprint output. (R)
+
+\widetext For galley format, will set all text that
+ follows into a 7 in. wide column. Does not
+ affect preprint output. (R)
+
+\section{#1} #1 represents a primary heading. Fragile
+ commands should be preceded by \protect.
+
+\subsection{#1} #1 represents a secondary heading. Fragile
+ commands should be preceded by \protect.
+
+\subsubsection{#1} #1 represents a third-level heading. Fragile
+ commands should be preceded by \protect.
+
+\cite{#1} Sets a reference or byline footnote citation.
+ #1 represents a list of reference tags used with
+ \bibitem. Lists of consecutive numbers will
+ be collapsed; e.g., 1,2,3 will become 1-3.
+
+\case{#1}/{#2} Sets textstyle (smaller) fractions in displayed
+ equations. #1 is the numerator, #2 is
+ denominator. (R)
+
+\openone Produces an openface one. (R)
+
+\alt,\agt Produce "approximately less than" and
+ "approximately greater than" signs,
+ respectively, in math mode. (R)
+
+\FL Sets the displayed equation that follows
+ flush left with the margin. (R)
+
+\FR Sets the displayed equation that follows
+ flush right. (R)
+
+\[,\] Signals beginning or end of unnumbered
+ displayed equation.
+
+\begin{eqnarray}, Signals beginning or end of multiline
+\end{eqnarray} displayed equation.
+
+\nonumber Suppresses the numbering of a single
+ line in a multiline equation.
+
+\begin{quasitable}, Environment to produce tables in text. See
+\end{quasitable} Sample B in the REVTEX guide for an example.
+
+\label{#1} #1 represents the tag. This command appears in
+ displayed equations that need cross-referencing,
+ all tables, and all figure captions. Also used
+ following section headings that need
+ cross-referencing.
+
+\ref{#1} #1 represents the tag. This command appears
+ in text wherever sections, equations, tables,
+ or figures are cited.
+
+\nonum Stifles numbering of the immediately following
+ section heading.
+
+\acknowledgments Sets a section heading for the acknowledgment
+ section.
+
+\appendix{#1} Sets #1 as a lettered appendix heading.
+ #1 can be empty. To be used when there are
+ multiple appendixes. \protect should be used
+ for fragile commands. Appendixes should not
+ be started with \section{#1}.
+
+\unletteredappendix{#1} Same as \appendix, but produces no letter.
+ To be used when there is only one appendix.
+
+\begin{references}, Signals beginning or end of reference section.
+\end{references}
+
+\bibitem[#1]{#2} Sets a reference in the reference section.
+ #1 represents an optional, author-specified
+ reference symbol. This is used for byline
+ footnotes, which are not numbered in
+ Physical Review.
+ #2 represents the reference tag.
+
+\figure{#1\label{#2}} Sets the figure caption.
+ #1 represents the text of the caption.
+ #2 represents the figure caption tag.
+
+\newpage Signals start of new page.
+
+\begin{table}, Signals the beginning or end of a table.
+\end{table}
+
+\dec #1.#2 This command may be used for simple
+ decimal-point alignments in tables.
+ #1.#2 represents a number to be aligned
+ by the decimal point. The decimal point and a
+ space after #2 are mandatory. \dec uses
+ constant-width boxes for #1 and #2. For
+ best results you can set the widths with
+ \setdec. See Sample A. (R)
+
+\setdec #1.#2 This command is used to set the amount of space
+ reserved on each side of the decimal point by
+ the \dec command. Use \setdec inside a table
+ to set the size of \dec for the numbers used
+ in that table only, or outside a table to set
+ the size globally. \setdec 000.000 is the
+ default. See Sample Compuscript A. (R)
+
+\squeezetable Used immediately after \begin{table}, shrinks
+ tables that would not otherwise fit. (R)
+
+\caption{#1} Sets the table caption. #1 represents the
+ text of the caption.
+
+\begin{tabular}{#1} Signals the beginning of the tabular material.
+ #1 represents formatting commands for
+ the columns.
+
+\tableline Sets a horizontal rule, separating column
+ headings from data. (R)
+
+\end{tabular} Signals end of tabular material.
+
+\tablenotes{#1} Sets footnotes to the table. #1 represents
+ text of footnote. These footnotes are not
+ autonumbered: text of footnote must be
+ preceded by a roman letter in a superscript to
+ coincide with the citation in table. (R)
+
+\end{verbatim}
+
+\widetext
+\newpage
+\appendix{Upgrading to {\em REVTEX\/} 2.0}
+\label{sec:upgrade}
+
+\catcode`\@=11
+\def\alt{\mathrel{\mathpalette\vereq<}}
+\def\vereq#1#2{\lower3pt\vbox{\baselineskip1.5pt \lineskip1.5pt
+\ialign{$\m@th#1\hfill##\hfil$\crcr#2\crcr\sim\crcr}}}
+\def\agt{\mathrel{\mathpalette\vereq>}}
+\def\openone{\leavevmode
+ \hbox{\small1\kern\iftwelvepointon-3.8pt\else-3.3pt\fi\@normalsize1}%
+}
+\def\xxx{\leavevmode\hbox{\tt\char`\ }} % visible space
+\catcode`\@=12
+%
+
+\begin{table}
+\caption{This table is a summary of the new commands and capabilities
+of {\em REVTEX\/} 2.0. \xxx\ denotes an input space. See the
+{\em REVTEX\/} 2.0 manual for examples of usage.
+{\bf Note}: if you wish to run {\em REVTEX\/} 2.0 on
+files formatted with an old version, you should first delete the
+{\tt.aux} file. The auxiliary-file formats are incompatible.}
+\begin{tabular}{lp{12cm}}
+ \tt\string eqsecnum& This style option replaces the old
+\verb+\math-with-secnums+ command. \\[4pt]
+ \tt\string \tightenlines& This command has been added since
+ the preprint style now produces double-spaced output. This command,
+ placed before the \verb+\begin{document}+, will give
+ {\em single}-spaced output in the preprint style. This may be more
+ convenient for the author while the paper is being written. \\[4pt]
+ \tt\string \preprint\{\#1\}&This command should be used just before
+ the title. It will place its argument in the upper-right corner of
+ the page. To be used for site-specific information
+ (e.g., preprint numbers).\\[4pt]
+ title environment& You now need to break the lines of the title with
+\verb=\\=. The title is not set in boldface. \\[4pt]
+ \tt\string \author\{\#1\}& The author list will be broken
+ automatically if
+it does not fit on one line. Breaks can be forced with
+\verb+\\+. \\[4pt]
+ \tt\string \moreauthors\{\#1\}& This command is no longer needed.
+ It has been set equal to {\tt\string\authors\{\#1\}}. \\[4pt]
+ instit environment& Line breaks must now be forced with
+ \verb+\\+.\\[4pt]
+ \tt\string \onlinecite\{\#1\}& This will produce a reference
+ citation with the number on line with the text. Can also be used as
+{\tt\string\citenum\{\#1\}}. These commands and \verb+\cite+ all
+collapse lists automatically. \\[4pt]
+ \tt\string \overlay\{\#1\}\{\#2\} & To print two symbols on
+ top of each other.\\[4pt]
+ \tt\string \FR & This command will flush an equation or eqnarray
+to the right in galley mode.\\[4pt]
+ \tt\string\eqnum\{\#1\}& Now accepts any legal number as an argument,
+including primes, etc. Can be used in eqnarrays and equations
+and with \verb+\label+ and \verb+\ref+. This is
+transparent to the normal autonumbering.\\[4pt]
+ mathletters environment &
+This is an environment to ``number'' equations with letters;
+e.g., (1a),(1b),(1c). Works with equations and eqnarrays. \\[4pt]
+ \verb+\openone+& Produces an openface one (\openone).\\[4pt]
+ \verb+\alt,\agt+ & Produce $\alt$,$\agt$ in math mode.\\[4pt]
+ \vtop{\hbox{\verb+\begin{quasitable},+}
+\vskip2pt\hbox{\verb+\end{quasitable}+}} &
+Environment to produce tables in text.
+See Sample B in the {\em REVTEX} guide for an example.\\[4pt]
+ \vtop{\hbox{\tt\string\section\{\#1\}, \string\subsection\{\#1\},}
+\vskip2pt
+\hbox{\tt\string\subsubsection\{\#1\}}}&
+All can now be broken with \verb+\\+, and all
+work with \verb+\label+ and \verb+\ref+. {\tt\string\protect} is
+needed (and works) with fragile commands in headings. Not bold.\\[4pt]
+ \tt\string \acknowledgments&
+Produces a heading for the acknowledgments. \\[4pt]
+ \tt\string \appendix\{\#1\}&
+Used for the appendix headings in a paper with more than one appendix.
+Automatically produces letters in sequence, and uses the letter in
+equation numbers. Works with \verb+\label+ and \verb+\ref+. Fragile
+commands need to be {\tt\string\protect}'d. The curly brackets must
+be present, but may be empty. Not bold.\\[4pt]
+ \tt\string \unletteredappendix\{\#1\}& Similar to \verb+\appendix+,
+but produces no letter. Should be used when there is a
+single appendix in a paper. \\[4pt]
+ \tt\string \bibitem & The optional argument is now truly optional.
+The references will now all be numbered automatically, and no
+arguments in square brackets should be used except
+where byline footnotes are needed. \\[4pt]
+ table environment & LaTeX's @ command for specifying a tabular format
+has been re-enabled inside a table environment. This allows authors to
+align columns by the LaTeX trick of smashing two columns together (see
+Sample Compuscript A).
+Tables no longer produce monolithic boxes. Instead the output
+is much more like lines of regular text, allowing
+tables to break over pages. \\[4pt]
+ \tt\string \setdec\xxx \#1.\#2\xxx & This command is used to set
+ the amount of space reserved on each side of the period by the
+ \verb+\dec+ command. See Sample Compuscript A.\\[4pt]
+\tt\string\squeezetable & There may be tables that will not fit in the
+width provided by the preprint style. Inserting this command right
+after the table environment begins will shrink the type in a table,
+helping it to fit.
+ %\tt\string & \\[4pt]
+ %\tt\string & \\
+\end{tabular}
+\end{table}
+
+
+\narrowtext
+\newpage
+
+\appendix{FAST FACTS FOR NEW PARTICIPANTS}
+\label{sec:fastfacts}
+
+Since 1980 the American Physical Society has been accepting
+computer files from authors and using those files (``compuscripts'')
+in the preparation of their galleys. In 1987 a research and
+development effort was launched to expand this service to include
+\TeX -formatted compuscripts. We have been publishing
+\TeX\ compuscripts since 1988.
+
+\medskip
+{\bf Benefits to Author: Reduced Proofreading}. Since
+galleys are composed from virtually the same file that produced
+the manuscript, proofreading time can be reduced significantly.
+
+\medskip
+{\bf How to Qualify: Use {\em REVTEX} or \LaTeX\ Macros}.
+The APS has developed a ``compuscript toolbox,'' which is
+composed of macros, a {\em Physical Review Input Guide
+for \TeX\ Author-Prepared Compuscripts}, a {\em Style
+and Notation Guide}, and complete instructions on how to
+install the macros. The toolbox is designed to guide the author
+in the preparation of a manuscript for the {\em Physical
+Review}.
+
+\medskip
+
+
+{\bf Which Journals are Participants?} Papers
+submitted to {\em Physical Review A, B, C,\/} or {\em D\/}
+may qualify.
+
+\medskip
+{\bf Media for Compuscripts}. We can process
+files received via electronic mail, DOS formatted floppy disk, and
+even magnetic tapes from UNIX systems.
+
+\medskip
+{\bf How to Participate}. Indicate your interest
+in your cover letter when you make your {\bf original} submission.
+We will contact you to confirm file qualification. Then we will
+contact you if your manuscript is accepted for publication to
+arrange file transfer.
+
+\medskip
+{\bf Obtaining the Toolbox and More Information}. Contact
+
+\medskip
+Peggy Sutherland
+
+APS Liaison Office
+
+500 Sunnyside Boulevard
+
+Woodbury, New York~~11797
+
+\medskip
+(516) 349-7800, ext.\ 674
+
+\medskip
+E mail address: {\tt mis@apsedoff}
+
+
+\appendix{COMMON AUTHOR QUESTIONS}
+\label{sec:macros}
+
+{\bf Page Charges.}
+Historically, page charges for compuscripts have
+fluctuated. The Council has, at various points
+over the ten-year history of the program, voted
+for reduced page charges, the elimination
+of page charges, and full page charges for compuscripts.
+At press time, compuscripts were subject
+to full page charges.
+
+\bigskip
+{\bf Macros.}
+Some authors use specialized definitions, or macros,
+in their files. These definitions serve different
+purposes: some macros save the author from typing
+a long character string repetitively (Type 1), and some macros
+act as commands to the \TeX\ program or the troff
+program (Type 2).
+
+\smallskip
+{\bf How macros become problematic.}
+Type-1 macros enable the author to define a frequently
+occurring string of characters as a shorter string, in
+order to save typing time. These macros become
+problematic at production stage when the frequently
+occurring string needs stylistic or grammatical changes.
+At that point, the production of the compuscript requires
+either (1) evaluation by a staff member who is fluent in
+macro construction, because the macro will need to
+changed, or (2) additional attention by a staff member
+who will change every occurrence of the string manually
+in the file.
+
+Neither one of the two alternatives is in the
+spirit of the compuscript program: the author of
+the compuscript will need to proofread the galleys
+very carefully, and production time/cost has become
+inflated by processing as a compuscript!
+
+Type-2 macros enable the author to give commands to the \TeX\
+program. Authors need to do this when the
+macro package they are using does not contain a command
+that they need.
+
+Type-2 macros frequently occur in \LaTeX\ compuscripts.
+This is because the macros do not provide for certain
+elements of {\em Physical Review} style; for instance,
+letters in equation numbers. Authors who are using \LaTeX\ to
+compose their compuscripts would need to develop
+a command that would number their equations (1a), (1b), etc.
+
+Type-2 macros should not occur in {\em REVTEX\/} compuscripts. The
+{\em REVTEX\/} macros ideally represent a complete command set,
+allowing the author to do anything that Physical Review style
+allows.
+
+Since our first release of {\em REVTEX\/}, some
+authors have given us feedback on macros that they
+would like included in the {\em REVTEX\/} package, as well
+as changes they would like made. Some of
+these suggestions are feasible (accurate double
+spacing) and some are not (the ability to draw
+many horizontal lines within the tabular environment).
+Relevant suggestions have been incorporated in
+v2.0 of {\em REVTEX\/}. The APS will review compuscripts
+containing Type-2
+macros when authors feel that they have found a deficiency
+in {\em REVTEX\/}.
+
+{\bf Authors should remove all macros from their
+compuscripts.} Type-1 macros are easy to remove, with
+the aid of a word processor which is equipped to
+do global substitutions. Type-2 macros are
+not easy to remove; authors may not be able to
+do so and therefore will be ineligible for the compuscript
+program. This of course does not prevent them from
+making their original submission electronically.
+
+This represents the current policy for compuscript
+page charges and macro usage, which is subject to
+change. If you have any questions regarding
+these issues please contact the authors of this guide.
+
+
+\appendix{CONTACTS}
+\label{sec:contacts}
+
+\vskip.5pc
+\begin{quasitable}
+\begin{tabular}{p{1.5in}p{1.5in}}
+\noindent{\bf REVTEX \mbox{questions/}\par technical support$^*$}\par
+\vskip4pt\hrule width1.5in\vskip4pt
+C.\ Hamlin \par
+{\tt mis@apsedoff}\par
+\vskip4pt
+P.\ Sutherland\par
+{\tt mis@apsedoff}\par
+&
+\noindent{\bf Electronic mail\par submissions$^{**}$}\par
+\vskip4pt\hrule width1.5in\vskip4pt
+L.\ Siddons \par
+{\tt tex@apsedoff}\par
+\\[.75pc]
+\noindent{\bf \mbox{Policy questions$^*$}\par}
+\vskip4pt\hrule width1.5in\vskip4pt
+C.\ Hamlin \par
+P.\ Sutherland\par
+&
+\noindent{\bf Manuscript status\par queries$^{**}$}\par
+\vskip4pt\hrule width1.5in\vskip4pt
+\tt
+pra@apsedoff\par prb@apsedoff\par prc@apsedoff\par prd@apsedoff\par
+\\[.75pc]
+\noindent{\bf MIS project\par development questions$^*$}\par
+\vskip4pt\hrule width1.5in\vskip4pt
+P.\ Sutherland\par
+&
+\end{tabular}
+\end{quasitable}
+
+\noindent $^*$American Physical Society Liaison Office, 500 Sunnyside
+Boulevard, Woodbury NY 11797.
+
+\smallskip
+
+\noindent$^{**}$Editorial Offices, 1 Research Road, Ridge, NY 11961.
+
+
+
+\end{document}
+%
+%
+%
diff --git a/macros/latex209/contrib/misc/aps.sty b/macros/latex209/contrib/misc/aps.sty
new file mode 100644
index 0000000000..f848af657d
--- /dev/null
+++ b/macros/latex209/contrib/misc/aps.sty
@@ -0,0 +1,138 @@
+%March 16, 1989 version
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+
+\newif\iftwelvepointon %% larger bold math in 12pt style
+
+\@options
+\iftwelvepointon\else
+\input aps10.sty\fi
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+
+
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {chapter}
+\newcounter {section}[chapter]
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart {\Roman{part}}
+\def\thechapter {\arabic{chapter}}
+\def\thesection {\thechapter.\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+\def\@chapapp{Chapter}
+
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{2}
+
+\def\l@chapter#1#2{\pagebreak[3]
+ \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1 #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+
+\mark{{}{}}
+
+\if@twoside
+\def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm
+\thepage\hfil \sl \leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}{}}\def\sectionmark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}}}
+\else \def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox
+{}\sl \rightmark \hfil \rm\thepage}\def\chaptermark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}}}
+\fi
+\def\ps@myheadings{\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\@addtoreset{equation}{chapter}
+
+
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
+
diff --git a/macros/latex209/contrib/misc/aps10.sty b/macros/latex209/contrib/misc/aps10.sty
new file mode 100644
index 0000000000..c0ca61cc6c
--- /dev/null
+++ b/macros/latex209/contrib/misc/aps10.sty
@@ -0,0 +1,145 @@
+% Version: March 16, 1989
+% rep10.sty 23 Sep 85
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+\def\@listi{\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+\if@twoside \oddsidemargin 44pt \evensidemargin 82pt \marginparwidth 107pt
+\else \oddsidemargin 63pt \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt
+ \topmargin 27pt \headheight 12pt \headsep 25pt \footheight 12pt \footskip
+30pt
+
+\textheight 528pt \textwidth 345pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 6.65pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 15pt \topsep 8pt plus 2pt minus 4pt
+\partopsep 2pt plus 1pt minus 1pt \itemsep 4pt plus 2pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\part{\cleardoublepage \thispagestyle{plain} \if@twocolumn \onecolumn
+\@tempswatrue \else \@tempswafalse \fi \hbox{}\vfil \bgroup \centering
+\secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+ \ifnum \c@secnumdepth >-2\relax \huge\bf Part \thepart \par \vskip 20pt \fi
+\Huge \bf #1\@endpart}
+\def\@endpart{\par\egroup \vfil\newpage \if@twoside \hbox{}
+\thispagestyle{empty}
+ \newpage
+ \fi \if@tempswa \twocolumn \fi}
+\def\@spart#1{\Huge \bf #1\@endpart}
+
+
+\def\@makechapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \huge\bf \@chapapp{} \thechapter \par
+ \vskip 20pt \fi \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\@makeschapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \Huge \bf #1\par
+ \nobreak \vskip 40pt } }
+
+\def\chapter{\clearpage \thispagestyle{plain} \global\@topnum\z@
+\@afterindentfalse \secdef\@chapter\@schapter}
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#1}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+\addtocontents{lot}{\protect\addvspace{10pt}} \if@twocolumn
+\@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{#2}
+ \@afterheading \fi}
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}
+ \@afterheading\fi}
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+\def\chaptermark#1{}
+
+\setcounter{secnumdepth}{2}
+
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{Appendix}
+ \def\thechapter{\Alph{chapter}}}
+
+
+\leftmargini 25pt
+\leftmarginii 22pt \leftmarginiii 18.7pt \leftmarginiv 17pt \leftmarginv 10pt
+\leftmarginvi 10pt
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 4pt plus 2pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/macros/latex209/contrib/misc/apsabstract.sty b/macros/latex209/contrib/misc/apsabstract.sty
new file mode 100644
index 0000000000..7425139d1f
--- /dev/null
+++ b/macros/latex209/contrib/misc/apsabstract.sty
@@ -0,0 +1,428 @@
+% APS abstract style. June 26, 1989.
+% Written by
+% Charles Karney
+% Plasma Physics Laboratory Phone: +1 609 243 2607
+% Princeton University MFEnet: Karney@PPC.MFEnet
+% PO Box 451 Internet: Karney%PPC.MFEnet@NMFECC.LLNL.GOV
+% Princeton, NJ 08543-0451 Bitnet: Karney%PPC.MFEnet@LBL.Bitnet
+% with contributions from Cris Barnes and Tom Murphy.
+
+\typeout{Document Substyle 'APS abstract'. Released 26 June 1989}
+
+% ******************** User documentation ********************
+
+% APSABSTRACT: LaTeX style for abstracts submitted to American Physical
+% Society conferences.
+
+% Summary. This following is a minimal abstract.
+
+% \documentstyle[11pt,apsabstract,dpp1989]{article}
+
+% \submittedby{Charles F. F. Karney}
+% \submittedaddress{Princeton Plasma Physics Laboratory\\
+% P.O. Box 451\\Princeton, NJ 08543-0451}
+% \category{1.6/T}
+% \theory % or \experiment or both
+% \preferposter % or \preferoral or \nopreference
+% \title{Current drive efficiency in a hot plasma\thanks
+% {This work supported by DoE contract No.\ DE--AC02--76--CHO--3073.}}
+% \author{C. F. F. Karney and B. J. Braams}
+% \affiliation{Princeton University}
+
+% \begin{document}
+% \maketitle
+% Body of abstract. (This can include equations, bibliography, etc.)
+% \end{document}
+
+% Details.
+
+% Specify apsabstract,dpp1989 (in this order) as optional arguments to
+% \documentstyle, e.g.,
+% \documentstyle[11pt,apsabstract,dpp1989]{article}
+% (apsabstract contains the formatting commands. dpp1989 includes the
+% information specific by the 1989 DPP meeting.) 11pt is the prefered size.
+
+% Place various declarations between \documentstyle and \begin{document}.
+% These are mostly self explanatory:
+
+% \invitedabstract: If this is an invited abstract (print in landscape
+% mode). Many of the fields (\category, \preferposter, etc.) are
+% irrelevant and are ignored.
+
+% \submittedby{name}: Name of APS member submitting abstract
+% \submittedaddress{address}: and his address (lines separated with \\)
+% \category{number}: The subject category number
+
+% \theory or \experiment or both: To get one of the experiment/theory
+% boxes checked (optional)
+% \preferposter or \preferoral or \nopreference: Ditto
+
+% \placement{placment instructions}: optional
+% \specialfacilities{special facilities}: optional
+% \otherrequests{other requests}: optional
+
+% \title{title}: The title of the abstract. Probably should include
+% something like
+% \thanks{This work supported by DoE contract
+% No.\ DE--AC02--76--CHO--3073.}
+% \author{authors}: Author list punctuated with commas (and `and')
+% \affiliation{Princeton University}: Affiliation
+
+% For papers with authors from more than one institution, you can use
+% footnotes to indicate the affiliation of the minorities (via \thanks). If
+% you want to list multiple affiliations in the heading, then use
+% \affiliation to specify the last institution and include the other
+% institutions in the author list (in italics). Thus
+% \author{A. Shadrack, B. Misheck,
+% C. Abednego, {\it Princeton University}, and
+% N. Nebuchadnezzar}
+% \affiliation{Babylonian Institute of Furnaces}
+
+% Stick \maketitle between \begin{document} and the body of the abstract.
+
+% Pretty much anything can go into the body of the abstract. LaTeX thinks
+% you are merely typing an ordinary paper that happens to have a small
+% \textheight and \texwidth.
+
+% LaTeX normally sets footnotes in \footnotesize. This is probably too
+% small considering that APS abstracts get reduced when printed in the
+% Bulletin of the APS. Therefore, both footnotes and references are set in
+% \referencesize, which apsabstract.sty defines to be \normalsize. If you
+% would like these set smaller, try
+% \renewcommand{\referencesize}{\small}
+
+% You'll know if your abstract is too long if it spills over onto a second
+% page. Try changing to 10pt type. Or else, reduce the baseline separation
+% with \renewcommand{\baselinestretch}{0.9}.
+
+% A complete abstract is given in tex$doc:apstest.tex.
+
+% ******************** End of user documentation ********************
+
+% SEE END OF FILE FOR INSTALLER'S INSTRUCTIONS
+
+\textwidth=120mm \textheight=105mm % APS rules
+
+\oddsidemargin=25mm \topmargin=-15mm
+\parskip=0pt
+\headheight=31mm
+\headsep=5ex
+\onecolumn \raggedbottom \sloppy
+\def\baselinestretch{1}
+
+\newif\if@invited \@invitedfalse
+\def\invitedabstract{\@invitedtrue
+ \textheight=4.7in \textwidth=8.2in % Invited abstracts are larger
+ \headsep=2ex % The title etc. is part of the header
+ \parindent=0pt % First line of body is not indented
+ \headheight=40mm
+ \topmargin=0mm
+ \oddsidemargin=11mm
+}
+
+% All the field declarations
+
+\def\conference#1{\gdef\@conference{#1}} \conference{}
+\def\location#1{\gdef\@location{#1}} \location{}
+\def\date#1{\gdef\@date{#1}} \date{}
+\def\mailto#1{\gdef\@mailto{#1}} \mailto{}
+\def\receiptdate#1{\gdef\@receiptdate{#1}} \receiptdate{}
+
+\def\category#1{\gdef\@category{#1}} \category{}
+\def\submittedby#1{\gdef\@submittedby{#1}} \submittedby{}
+\def\submittedaddress#1{\gdef\@submittedaddress{#1}} \submittedaddress{}
+
+\def\title#1{\gdef\@title{#1}} \title{}
+\def\author#1{\gdef\@author{#1}} \author{}
+\def\affiliation#1{\gdef\@affiliation{#1}} \affiliation{}
+
+\def\experiment{\gdef\@experiment{y}}
+\def\theory{\gdef\@theory{y}}
+\gdef\@experiment{}\gdef\@theory{}
+
+\def\preferposter
+ {\gdef\@preferposter{y}\gdef\@preferoral{}\gdef\@nopreference{}}
+\def\preferoral
+ {\gdef\@preferposter{}\gdef\@preferoral{y}\gdef\@nopreference{}}
+\def\nopreference
+ {\gdef\@preferposter{}\gdef\@preferoral{}\gdef\@nopreference{y}}
+\gdef\@preferposter{}\gdef\@preferoral{}\gdef\@nopreference{}
+
+\def\placement#1{\gdef\@placement{#1}} \placement{}
+\def\specialfacilities#1{\gdef\@specialfacilities{#1}}\specialfacilities{}
+\def\otherrequests#1{\gdef\@otherrequests{#1}} \otherrequests{}
+
+% Most of the formatting goes into the header and footer.
+% Define the myheadings to get the top and bottom typeset
+
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\@maketop}\def\@oddfoot{\@makebottom}%
+\def\@evenhead{}\def\@evenfoot{}}
+\pagestyle{myheadings}
+
+% Need to define \pagenumbering even though pagestyle is empty
+% in order to get \thepage defined
+
+\pagenumbering{arabic}
+
+% Boxes with/without X's
+
+\newbox\@emptybox \newbox\@fullbox
+
+\setbox\@emptybox=\hbox{\lower1.5pt
+ \hbox{\unitlength=10pt\begin{picture}(1,1)(0,0)
+ \put(0,0){\framebox(1,1){}}\end{picture}}}
+\setbox\@fullbox=\hbox{\lower1.5pt
+ \hbox{\unitlength=10pt\begin{picture}(1,1)(0,0)
+ \put(0,0){\line(1,1){1}}\put(1,0){\line(-1,1){1}}
+ \put(0,0){\framebox(1,1){}}\end{picture}}}
+
+\def\@checkedbox{\copy\@fullbox}
+\def\@uncheckedbox{\copy\@emptybox}
+
+\def\@choosebox#1{\ifx\@empty#1\@uncheckedbox\else\@checkedbox\fi}
+
+% Top matter
+
+\def\@maketop{\hbox to \hsize{\hss
+ \vbox{\if@invited\else\hsize=180 mm \fi
+ \xpt\baselineskip=12pt\maketop}\hss}}
+\def\maketop{%
+ {\centering
+ {\xipt\bf\if@invited Invited \fi\@conference\\[1ex]
+ \ifx\@empty\@location \else\@location, \fi % Location field is optional
+ \@date}\\[2ex]
+ \if@invited\vspace{7ex}\noindent\box\@titlebox\else
+ Category Number and Subject%
+ \ifx\@empty\@category\ \rule{5cm}{0.4pt} \relax\else
+ : {\xipt \@category} \fi\\[1ex]
+ \noindent
+ \@choosebox{\@theory}\ Theory\qquad
+ \@choosebox{\@experiment}\ Experiment \\ \fi
+ }}
+
+% Bottom matter
+
+\def\@makebottom{\if@invited\else\hbox to \hsize{\hss
+ \vbox{\hsize=180 mm \xpt\baselineskip=12pt \makebottom}\hss}\fi}
+\def\makebottom{%
+ {\vspace{\headsep}
+ \def\rrule{\penalty0
+ \rule{0pt}{15pt}\rule{57mm}{0.4pt}}\parindent=0pt\parskip=0pt
+ \hspace{18mm}
+ \begin{minipage}[t]{65mm}\raggedright\sloppy
+ \def\@para##1{\par\noindent\hangindent=6mm
+ \hbox to \hangindent{##1\hfil}}
+ \@para{\@choosebox{\@preferposter}}Prefer Poster Session
+ \@para{\@choosebox{\@preferoral}}Prefer Oral Session
+ \@para{\@choosebox{\@nopreference}}No Preference
+ \@para{\@choosebox{\@placement}}This poster/oral should be
+ placed in the following grouping:
+ \@para{}\ifx\@empty\@placement\rrule\rrule\else
+ {\xipt\bf \@placement}\fi
+ \@para{\@choosebox{\@specialfacilities}}Special Facilities Requested
+ \@para{}\ifx\@empty\@specialfacilities\rrule\rrule\else
+ {\xipt\bf \@specialfacilities}\fi
+ \@para{\@choosebox{\@otherrequests}}Other Special Requests
+ \@para{}\ifx\@empty\@otherrequests\rrule\rrule\else
+ {\xipt\bf \@otherrequests}\fi
+ \end{minipage}%
+ \hspace{25mm}%
+ \begin{minipage}[t]{65mm}
+ Submitted by:\par
+ \vspace{30pt}\hrule
+ (\strut Signature of APS Member) \par
+ \begin{flushleft}
+ \@submittedby\\\@submittedaddress
+ \end{flushleft}
+ \end{minipage}
+ }
+ \par\vspace{10pt}\noindent
+ {\xipt
+ This form, or a reasonable facsimile, plus {\large\bf TWO XEROX COPIES},
+ must be received by {\large\bf NO LATER THAN NOON}, \@receiptdate\
+ at the following address:\par}
+ \begin{flushleft}\leftskip=18mm\relax
+ \@mailto
+ \end{flushleft}
+}
+
+\let\abstract\relax % So text can optionally be put in abstract environment
+
+% Set the title
+
+\def\maketitle{\par
+ \begingroup
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle \fi\thispagestyle{myheadings}\@thanks
+ \endgroup
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax\@gobblecr}
+
+\long\def\@gobble#1{} % So gobble can discard a \par
+
+\newbox\@titlebox
+
+\def\@maketitle{\if@invited
+ \newpage\par\global\setbox\@titlebox
+ \vbox{\hsize\columnwidth \@parboxrestore
+ {\large\bf \@title.}\strut\par
+ {\sc\@author}, {\it\@affiliation}\strut\par}
+\else
+ \newpage\par\noindent\kern .67in % 8 spaces at 12 chars/in
+ \relax{\large\bf\@title}\@.
+ {\sc\@author}, {\it\@affiliation}---%
+\fi}
+
+% Footnotes are handled by putting them in \box\@footins. This is spat out
+% either by the bibliography or by \end{document}
+
+\newbox\@footins % Declare a box for the footnotes
+
+\def\thefootnote{\fnsymbol{footnote}} % Use symbols for footnotes
+
+% Redefine \LaTeX's \@footnotetext
+\long\def\@footnotetext#1{\global\setbox\@footins
+ \vbox{\unvbox\@footins
+ \referencesize
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@mpfootnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces #1\strut}}}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ $^{\@thefnmark}$#1}
+
+% The citations handled with superscript numbers as in aip style.
+% In addition, we have to put out the footnotes.
+
+\def\newblock{}
+
+\def\thebibliography#1{\vskip\skip\footins\footnoterule\unvbox\@footins
+\setcounter{biblionum}{0}\frenchspacing\referencesize}
+\let\endthebibliography=\par
+
+\@definecounter{biblionum}
+\def\@bibnum{\arabic{biblionum}}
+\def\bibitem#1{\stepcounter{biblionum}\par\noindent
+ $\m@th^{\@bibnum}$%
+ \if@filesw \immediate\write\@auxout
+ {\string\bibcite{#1}{\@bibnum}}\fi\ignorespaces}
+% Still using aip style citations
+\def\@cite#1#2{\unskip\nobreak\relax
+ \def\@tempa{$\m@th^{\hbox{\the\scriptfont0 #1}}$}%
+ \futurelet\@tempc\@citexx}
+\let\citea=\@cite
+\def\@citexx{\ifx.\@tempc\let\@tempd=\@citepunct\else
+ \ifx,\@tempc\let\@tempd=\@citepunct\else
+ \let\@tempd=\@tempa\fi\fi\@tempd}
+\def\@citepunct{\@tempc\edef\@sf{\spacefactor=\the\spacefactor\relax}\@tempa
+ \@sf\@gobble}
+\def\citenum#1{{\def\@cite##1{##1}\cite{#1}}}
+
+% Add check for \@footins in \enddocument
+\def\enddocument{\@checkend{document}
+\ifvoid\@footins\else\vskip\skip\footins\footnoterule\unvbox\@footins\fi
+\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\let\referencesize\normalsize
+
+\endinput
+
+******************** INSTALLER'S INSTRUCTIONS ********************
+
+Put this file, apsabstract.sty into your standard texinputs directory. You
+might want to extract the user documentation from the top of this file,
+edit it where appropriate and place it somewhere canonical (in your Local
+Guide, INFO system, or wherever). You need to create a file describing the
+conference. Here is a typical example, dpp1989.sty, for the 1989 Division
+of Plasma Physics meeting. The format should be obvious.
+
+******************** dpp1989.sty ********************
+
+\conference{Abstract Submitted for the Thirty-first Annual Meeting\\
+ Division of Plasma Physics}
+
+\date{November 13--17, 1989}
+
+\location{Anaheim, California} % This is optional
+
+\mailto{Saralyn Stewart \\
+Institute for Fusion Studies \\
+RLM 11.234 \\
+The University of Texas at Austin \\
+Austin, TX\ \ 78712\\
+Telephone: (512) 471-4378}
+
+\receiptdate{Monday, July 10, 1989}
+
+******************** End of dpp1989.sty ********************
+
+Here is the example refered to in the user documentation,
+tex$doc:apstest.tex:
+
+******************** apstest.tex ********************
+
+% Test of APS abstract styles
+
+\documentstyle[11pt,apsabstract,dpp1989]{article}
+
+\newcommand{\DOEcredit}{This work supported by DoE contract
+No.\ DE--AC02--76--CHO--3073.}
+
+\submittedby{Charles F. F. Karney}
+\submittedaddress{Princeton Plasma Physics Laboratory\\
+P.O. Box 451\\Princeton, NJ 08543-0451}
+
+\category{1.6/T}
+
+\theory % one or both of \theory or \experiment
+\preferposter % one of \preferposter or \preferoral or \nopreference
+
+% These three are optional
+\placement{next to paper by B. J. Braams and C. F. F. Karney}
+\specialfacilities{35mm movie projector}
+\otherrequests{Please schedule on Monday morning}
+
+
+\title{Current drive efficiency in a hot plasma\thanks{\DOEcredit}}
+
+\author{C. F. F. Karney and B. J. Braams}
+
+\affiliation{Princeton University}
+
+\begin{document}
+
+\maketitle
+
+The efficiency of current drive by rf waves may be computed by means of a
+response function \cite{AntChu82}. Here we use the response function
+calculated for a relativistic plasma \cite{BraKar87} to calculate the
+efficiency of current drive by lower-hybrid and electron-cyclotron waves in
+a hot reactor plasma. The results are compared to those obtained by
+neglecting either relativistic effects or the self-consistent reaction of
+the bulk on the tail electrons.
+
+\begin{thebibliography}{1}
+
+\bibitem{AntChu82} T. M. Antonsen and K. R. Chu, Phys.\ Fluids {\bf 25},
+1295 (1982).
+
+\bibitem{BraKar87} B. J. Braams and C. F. F. Karney, Phys.\ Rev.\ Lett.\
+{\bf 59}, 1817 (1987).
+
+\end{thebibliography}
+
+\end{document}
+
+******************** End of apstest.tex ********************
diff --git a/macros/latex209/contrib/misc/astyped.sty b/macros/latex209/contrib/misc/astyped.sty
new file mode 100644
index 0000000000..4ad22ba567
--- /dev/null
+++ b/macros/latex209/contrib/misc/astyped.sty
@@ -0,0 +1,23 @@
+%%%%%%%%%%%%%%%%%%%%%% @(#)astyped.sty 1.3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ASTYPED DOCUMENT-STYLE OPTION - released 88/06/30
+% for LaTeX version 2.09
+% Based on Leslie Lamport's verbatim environment in latex.tex.
+
+% Defines the `astyped' environment, which is like the `verbatim'
+% environment except most of the special characters have their usual meanings.
+% Space, ^K, and ^A are the only specials changed.
+
+\def\astyped{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \tt \catcode``=13 \@noligs \let\do\@makeother \do\ \do\^^K\do\^^A
+ \frenchspacing\@vobeyspaces}
+
+\let\endastyped=\endtrivlist
+
+% Used inside astyped environments for normal formatting of a line.
+% I wish I could give space its normal catcode within \notastyped.
+\def\notastyped#1{\mbox{\rm #1}}
+
diff --git a/macros/latex209/contrib/misc/at.sty b/macros/latex209/contrib/misc/at.sty
new file mode 100644
index 0000000000..50f9899e2c
--- /dev/null
+++ b/macros/latex209/contrib/misc/at.sty
@@ -0,0 +1,52 @@
+% at.sty Colin Hogben (chah@jet.uk)
+% 12-Aug-91 First version
+% 20-Mar-92 Fixed to allow for \headheight
+% 06-Jul-93 \@useat only used in case of any \at material (B.Gaulle)
+%
+% \at(HPOS,VPOS){TEXT}
+% Positions TEXT at an absolute distance of HPOS from the left edge
+% and VPOS from the top edge of the current page.
+%
+% Example:
+% \at(2cm,5cm){\parbox[t]{10cm}{
+% Name\\ % Recipient's name and address positioned
+% Address\\etc.}} % suitably for a windowed envelope
+% -----------------------------------------------------------------
+%
+% First create a box in which to store absolute positioned material.
+%
+\newbox\@atbox
+\newif\ifat\atfalse% --bg
+%
+% at(HPOS,VPOS){TEXT}
+% Add the TEXT to the box with suitable offsets applied.
+%
+\long\def\at(#1,#2)#3{\setbox\@atbox=\hbox
+ {\unhbox\@atbox
+ \vtop to 0pt{\kern #2\hbox to 0pt{\kern #1\relax #3\hss}\vss}}%
+ \attrue}% --bg
+%
+% Unload the saved absolute-positioned material.
+% Teleport to the actual top corner of the page by undoing the header
+% separation, the top and side margins, and the mysterious 1 inch
+% offset applied to each. Then make it look like a singularity (zero
+% height, depth and width).
+%
+\def\@useat{\ifat% --bg
+ \vtop to 0pt{\kern-\headsep \kern-\topmargin \kern-\headheight \kern-1in
+ \hbox to 0pt{\kern-\@themargin \kern-1in \unhbox\@atbox \hss}\vss}%
+ \fi\atfalse}% --bg
+%
+% The following is a copy of the latex.tex \output routine except for
+% line 1: this prepends the shifted absolute material to the current
+% page. A little unsafe to copy code like this, but I couldn't work
+% out where else to insert the box.
+%
+\output{\setbox255=\vbox{\@useat \unvbox255}%
+ \ifnum\outputpenalty <-\@M\@specialoutput\else%
+ \@makecol\@opcol\@floatplacement\@startcolumn%
+ \@whilesw\if@fcolmade \fi{\@opcol\@startcolumn}\fi%
+ \global\vsize\ifnum\outputpenalty >-\@Miv \@colroom%
+ \else \maxdimen\fi}%
+%
+\endinput% --bg
diff --git a/macros/latex209/contrib/misc/balanced.sty b/macros/latex209/contrib/misc/balanced.sty
new file mode 100644
index 0000000000..ae5244253d
--- /dev/null
+++ b/macros/latex209/contrib/misc/balanced.sty
@@ -0,0 +1,61 @@
+% The twocolumns environment can be used anywhere in a one column document to
+% produce two column output. The twocolumns environment may extend for an
+% unlimited number of pages, and start and finish mid-page. Columns are
+% always balanced. The code works very hard to avoid two-column ``widows''
+% and ``orphans''. No inserts are supported (haven't worked out where to put
+% them yet).
+
+\newbox\partialpage
+\newbox\leftcolumn
+\newdimen\dimen@
+\newdimen\colsize
+\newdimen\lastpageshrink
+\newdimen\dimend
+\newenvironment{twocolumns}{\begingroup \global\@twocolumntrue
+\def\fps@table{t}
+ \pagegoal=2\textheight
+ \lastpageshrink=\pageshrink
+ \output={\global\setbox\partialpage=\vbox{\unvbox255}}\penalty-10000%
+ \def\columnout{\trycolumnout}%
+ \output={\columnout}%
+ \hsize=\textwidth \advance\hsize-\columnsep \divide\hsize by 2
+ \columnwidth=\hsize \linewidth=\hsize
+ \global\colsize=\textheight
+ \global\advance\colsize by-\ht\partialpage
+ \vsize=\colsize
+ \global\advance\vsize by\lastpageshrink
+ \multiply\vsize by2}%
+% \end{twocolumns}
+ {\pagegoal=4\textheight
+ \output={\balancecolumns\pagesofar}\break
+ \endgroup \global\vsize=\textheight \pagegoal=\vsize}
+
+\def\pagesofar{\unvbox\partialpage%
+ \wd0=\hsize \wd2=\hsize \hbox to\textwidth{\box0\hfil\box2}}
+\def\balancecolumns{\setbox0\vbox{\unvbox255} \dimen@=\ht0
+ \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by2 \splittopskip=\topskip
+ {\vbadness=10000 \loop \global\setbox3=\copy0
+ \global\setbox1=\vsplit3 to\dimen@
+ \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt\repeat}
+ \ifdim\dimen@>\textheight \dimen@=\textheight\fi
+ \setbox0=\vbox to \dimen@{\unvbox1} \setbox2=\vbox to \dimen@{\unvbox3}
+ \if\ht0>\ht2\setbox2=\vbox to\ht0{\unvbox2}\else
+ \if\ht2>\ht0\setbox0=\vbox to\ht2{\unvbox0}\fi\fi}
+
+\def\trycolumnout{%
+% \@dblfloatplacement
+ \global\def\columnout{\leftcolumnout}
+ \global\vsize=\colsize
+ \unvbox255\penalty\outputpenalty}
+\def\leftcolumnout{%
+ \global\def\columnout{\rightcolumnout}
+ \global\setbox\leftcolumn=\vbox to\vsize{\unvbox255}}
+\def\rightcolumnout{%
+ \global\def\columnout{\trycolumnout}
+ \setbox0=\box\leftcolumn
+ \setbox2=\vbox to \vsize{\unvbox255}
+ \setbox\@outputbox=\vbox{\pagesofar}\@outputpage
+ \global\colsize=\textheight
+ \global\vsize=2\colsize}
+
diff --git a/macros/latex209/contrib/misc/bar.sty b/macros/latex209/contrib/misc/bar.sty
new file mode 100644
index 0000000000..c8271ca86e
--- /dev/null
+++ b/macros/latex209/contrib/misc/bar.sty
@@ -0,0 +1,548 @@
+% BAR.STY --- Style File zum Setzen von Balkendiagrammen
+% Autor: J. Bleser, E. Lang
+% Hochschulrechenzentrum
+% Technische Hochschule Darmstadt
+% !!! Dieses Style-File ist urheberrechtlich geschuetzt !!!
+% !!! Aenderungen nur mit Zustimmung der Autoren !!!
+\typeout{Option BAR, Version 1.0 Sep. 92, J.Bleser, TH Darmstadt, HRZ}
+\typeout{bug fix for CTAN April 1994 (SPQR, for David Carlisle)}
+\newcount\breite \newcount\hoehe \newcount\tiefe
+\newcount\lhoehe \newcount\anzbar \newcount\hbarI
+\newcount\xpos \newcount\lxpos \newcount\halfbreite
+\newcount\ypos \newcount\lypos
+\newcount\tmpa \newcount\tmpb \newcount\tmpc
+\newcount\tmpd \newcount\tmpe
+\newcount\xmin \newcount\xmax \newcount\xstep
+\newcount\deltax \newcount\yhoehe %
+\newcount\ymin \newcount\ymax \newcount\ystep
+\newcount\yminII \newcount\ymaxII \newcount\deltay
+\newcount\ymove \newcount\xmove \newcount\inter
+\newcount\exact \newcount\xexact
+\newdimen\dtmpa \newdimen\dtmpb
+\newdimen\dmin \newdimen\dmax \newdimen\dstep
+\newdimen\dxmin \newdimen\dxmax \newdimen\dxstep
+\newdimen\faktor \newdimen\dinter
+\newbox\mybox \newbox\xbox \newbox\ybox
+\newif\if@xaxis \newif\if@yaxis
+\newif\if@hlineon
+\newif\iffaktor\faktorfalse
+
+
+\def\setnumberpos#1{\def\my@number{\expandafter\csname my@#1\endcsname}}
+\def\my@number{\my@outside}
+
+
+\def\m@nth{month}\def\d@y{day}
+\def\setxvaluetyp#1{\gdef\x@value{#1}%
+ \ifx\x@value\m@nth\let\myx@value\Monat@%
+ \else\ifx\x@value\d@y\let\myx@value\Tag@%
+ \else\let\myx@value\Zahl@n%
+ \fi%
+ \fi%
+}
+
+
+\def\solid{solid}\gdef\l@style{\relax}
+\def\setlinestyle#1{\gdef\l@style{#1}%
+ \ifx\l@style\solid\let\my@lstyle=\mylinebox%
+ \else\let\my@lstyle=\mydotbox%
+ \fi%
+}
+
+
+\def\setwidth#1{\global\breite=#1%
+ \ifdim\dinter>0pt\inter\dinter\multiply\inter\breite\divide\inter65536\fi%
+ \halfbreite\breite\divide\halfbreite2%
+}
+
+
+\def\setdepth#1{\ifnum#1<10\global\tiefe=0\else\global\tiefe=#1\fi}
+
+
+\def\setstretch#1{\global\faktor=#1pt\faktortrue}
+
+
+\def\setstyle#1{\def\my@style{#1}}
+\def\my@style{\tt}
+
+
+\def\setprecision#1{\global\exact=#1}
+\exact=0
+
+
+\def\sethspace#1{\dinter#1pt\dtmpa#1pt\multiply\dtmpa\breite%
+ \inter\dtmpa\divide\inter65536%
+}
+
+
+\def\setxname{\@ifnextchar [{\isetxname}{\isetxname[]}}
+\def\isetxname[#1]#2{\global\setbox\xbox=\hbox{\makebox(0,0)[#1]{#2}}}
+
+
+\def\setyname{\@ifnextchar [{\isetyname}{\isetyname[l]}}
+\def\isetyname[#1]#2{\global\setbox\ybox=\hbox{\makebox(0,0)[#1]{#2}}}
+
+
+\newcount\vorz %
+\def\setyaxis{\@ifnextchar [{\i@setyaxis}{\i@setyaxis[0]}}
+\def\i@setyaxis[#1]#2#3#4{%
+ \dmin#2\faktor\ymin\dmin\divide\ymin by65536%
+ \dmax#3\faktor\ymax\dmax\divide\ymax by65536%
+ \ifnum\ymin>\ymax\vorz-1\else\vorz1\fi%
+ \ifnum\ymin>0\ymin-\ymin\fi%
+ \ifnum\ymax<0\ymax-\ymax\fi%
+ \dstep#4\faktor\ystep\dstep\divide\ystep by65536%
+ \ifnum\ystep<0\ystep-\ystep\fi%
+ \@yaxistrue%
+ \setbox0=\hbox{\the\ymax}\setbox1=\hbox{\the\ymin}
+ \ifdim\wd0>\wd1\xmove=\wd0\else\xmove=\wd1\fi%
+ \divide\xmove by65536\advance\xmove by4%
+ \global\xmove=\the\xmove%
+ \deltay\ymax\advance\deltay-\ymin\tmpb\deltay%
+ \divide\deltay\ystep%
+ \advance\deltay by1%
+ \dmin=#2pt\dstep=#4pt%
+ \thicklines%
+ \multiput(0,\ymin)(0,\ystep){\deltay}{\line(-1,0){4}%
+ \put(-6,0){\makebox(0,0)[r]{{\my@style\dimIIreal\dmin}}%
+ \global\advance\dmin by\dstep}}%
+ \dtmpa=#1\faktor\ymove\dtmpa\divide\ymove by65536\ifnum\ymove<0\ymove=0\fi%
+ \tmpa\ymin\advance\tmpa by-\ymove\advance\tmpb by\ymove%
+ \global\yhoehe\tmpb %
+ \put(0,\tmpa){\line(0,1){\tmpb}}%
+ \thinlines%
+}
+
+
+\def\setxaxis#1#2#3{%
+ \dxmin#1pt\dxmax#2pt\dxstep#3pt\global\xexact\exact%
+ \@xaxistrue\let\mytmp@style=\my@style%
+}
+
+
+\def\hlineon{\global\@hlineontrue}
+
+
+\def\bar#1#2{\@ifnextchar [{\@bar{#1}{#2}}{\@bar{#1}{#2}[]}}
+\def\@bar#1#2[#3]{%
+ \dtmpa#1\faktor\hoehe\dtmpa\divide\hoehe by65536%
+ \multiply\hoehe\vorz%
+ \ypos0\def\@user{#1}%
+ \ifnum\hoehe<\yminII\yminII=\hoehe\fi\ifnum\hoehe>\ymaxII\ymaxII=\hoehe\fi%
+ \ifnum\anzbar=0\hbarI=\hoehe\fi%
+ \ifnum#2>-1%
+ \ifnum\hoehe<0\ypos=\hoehe\tmpa=-\hoehe\else\tmpa=\hoehe\fi%
+ \ifnum #2=1\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}\fi%
+ \ifnum #2=2\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpc=\breite\divide\tmpc by3\tmpb=\xpos\advance\tmpb by1%
+ \multiput(\tmpb,\ypos)(3,0){\tmpc}{\line(0,1){\tmpa}}%
+ \fi
+ \ifnum #2=3\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpc=\tmpa\divide\tmpc by3\tmpb=\ypos\advance\tmpb by1%
+ \multiput(\xpos,\tmpb)(0,3){\tmpc}{\line(1,0){\breite}}%
+ \fi
+ \ifnum #2=4\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpc=\breite\divide\tmpc by3\tmpb=\xpos\advance\tmpb by1%
+ \multiput(\tmpb,\ypos)(3,0){\tmpc}{\line(0,1){\tmpa}}%
+ \tmpc=\tmpa\divide\tmpc by3\tmpb=\ypos\advance\tmpb by1%
+ \multiput(\xpos,\tmpb)(0,3){\tmpc}{\line(1,0){\breite}}%
+ \fi
+ \ifnum #2=5\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpc=\breite\divide\tmpc by4\tmpb=\xpos\advance\tmpb by1%
+ \multiput(\tmpb,\ypos)(4,0){\tmpc}{\rule{2pt}{\tmpa pt}}%
+ \tmpc=\tmpa\divide\tmpc by4\tmpb=\ypos\advance\tmpb by1%
+ \multiput(\xpos,\tmpb)(0,4){\tmpc}{\rule{\breite pt}{2pt}}%
+ \fi
+ \ifnum #2=6\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpb=\breite\divide\tmpb by-2%
+ \ifnum\hoehe>0\advance\tmpb by\tmpa\fi%
+ \tmpc=\tmpa\divide\tmpc by4%
+ \multiput(\xpos,\ypos)(0,4){\tmpc}{%
+ \ifdim\@ydim<\tmpb pt\line(2,1){\breite}%
+ \else\tmpd=\@ydim\divide\tmpd by65536%
+ \ifnum\tmpd<0\else\advance\tmpd by-\tmpa\fi%
+ \multiply\tmpd by-2\line(2,1){\tmpd}%
+ \fi%
+ }%
+ \tmpb=\breite\divide\tmpb by8\tmpc=\breite\advance\tmpc by-8%
+ \tmpd=\tmpa\multiply\tmpd 2\advance\xpos by 8%
+ \multiput(\xpos,\ypos)(8,0){\tmpb}{%
+ \ifnum\tmpc<\tmpd\line(2,1){\tmpc}\else\line(2,1){\tmpd}\fi%
+ \global\advance\tmpc by-8%
+ }%
+ \advance\xpos by -8%
+ \fi%
+ \ifnum #2=7\put(\xpos,\ypos){\framebox(\breite,\tmpa){}}%
+ \tmpb=\breite\divide\tmpb by2%
+ \ifnum\hoehe>0\ypos=\hoehe\else\ypos=0\advance\tmpb by-\tmpa\fi%
+ \tmpc=\tmpa\divide\tmpc by4%
+ \multiput(\xpos,\ypos)(0,-4){\tmpc}{%
+ \ifdim\@ydim<\tmpb pt\tmpd=\@ydim\divide\tmpd by65536%
+ \ifnum\tmpd<0\advance\tmpd by\tmpa\fi%
+ \multiply\tmpd by2\line(2,-1){\tmpd}%
+ \else\line(2,-1){\breite}%
+ \fi%
+ }%
+ \tmpb=\breite\divide\tmpb by8\advance\tmpb by 1\tmpc=\breite%
+ \tmpd=\tmpa\multiply\tmpd 2%
+ \multiput(\xpos,\ypos)(8,0){\tmpb}{%
+ \ifnum\tmpc>\tmpd\line(2,-1){\tmpd}\else\line(2,-1){\tmpc}\fi%
+ \global\advance\tmpc by-8%
+ }%
+ \fi%
+ \ifnum #2=8\put(\xpos,\ypos){\rule{\breite pt}{\tmpa pt}}\fi
+ \my@number%
+ \fi%
+ \tmpc-\baselineskip\divide\tmpc 65536%
+ \divide\tmpc 2%
+ \put(\xpos,\ypos){\put(0,\tmpc){\makebox(\breite,0){#3}}}%
+ \ifnum\anzbar>0
+ \ifnum\tiefe>0
+ \ifnum\lhoehe<\hoehe
+ \ifnum\lhoehe>0\machDachI(\lxpos,\lhoehe)
+ \else\machDachI(\lxpos,0)
+ \fi
+ \else
+ \ifnum\lhoehe>0\machDachII(\lxpos,\lhoehe)
+ \else\machDachII(\lxpos,0)
+ \fi
+ \fi%
+ \fi%
+ \if@hlineon\machHLines\fi%
+ \fi%
+ \lxpos\xpos\advance\xpos\breite\advance\xpos\inter%
+ \advance\anzbar1\lhoehe\hoehe%
+}
+
+
+\newenvironment{barenv}%
+{\par%
+ \xpos0\breite40\halfbreite20\tiefe0\lhoehe0\anzbar0%
+ \yminII0\ymaxII0\inter0\dinter0pt\vorz1%
+ \exact0\ymove0\xmove0\unitlength1pt\@xaxisfalse\@yaxisfalse\@hlineonfalse%
+ \let\my@lstyle=\mydotbox\let\myx@value=\Zahl@n%
+ \faktor1pt%
+ \def\vline{\my@vline}%
+ \def\hspace{\my@hspace}%
+ \setbox\@tempboxa=\hbox\bgroup%
+ \begin{picture}(0,0)\thinlines%
+}%
+{%
+ \advance\xpos by-\inter%
+ \ifnum\tiefe>0
+ \put(\xpos,0){\line(1,1){\tiefe}}%
+%%%DPC CHANGE
+% \put(\xpos,\hoehe){\line(1,1){\tiefe}\put(0,\tiefe){\line(0,1){-\hoehe}}}%
+ \put(\xpos,\hoehe){\line(1,1){\tiefe}%
+ \put(0,\tiefe){\ifnum\hoehe<\z@\line(0,1){-\hoehe}\fi}}%
+%%%END DPC CHANGE
+ \fi%
+ \deltax=\lhoehe\bar{0}{-1}\lhoehe=\deltax%
+ \thicklines%
+ \if@yaxis\else\tmpa=\ymaxII\advance\tmpa by-\yminII\advance\tmpa by\tiefe%
+ \put(0,\yminII){\line(0,1){\tmpa}}%
+ \fi%
+ \if@xaxis%
+ \advance\ymin by-\ymove%
+ \tmpe=\exact\global\exact=\xexact%
+ \put(0,\ymin){\line(1,0){\lxpos}}%
+ \xstep=\dxstep\divide\xstep by65536%
+ \dtmpa=\dxmax\advance\dtmpa by-\dxmin%
+ \deltax=\dtmpa\divide\deltax by65536\divide\deltax by\xstep%
+ \advance\deltax by1%
+ \tmpa=\breite\divide\tmpa by2%
+ \tmpb=\breite\advance\tmpb by\inter%
+ \multiput(\tmpa,\ymin)(\tmpb,0){\deltax}{%
+ \line(0,-1){4}\myx@value\dxmin%
+ \global\advance\dxmin by\dxstep}%
+ \global\exact=\tmpe%
+ \fi%
+ \put(0,0){\line(1,0){\lxpos}}%
+ \if@xaxis\tmpa=-20\else\tmpa=-10\fi%
+ \ifvoid\xbox\else\put(\lxpos,\ymin){\put(0,\tmpa){\box\xbox}}\fi%
+ \tmpa=\ymax\advance\tmpa by6\advance\tmpa by\tiefe%
+ \ifvoid\ybox\else\put(\tiefe,\tmpa){\box\ybox}\fi%
+ \if@hlineon%
+ \ifnum\lhoehe<0%
+ \tmpb=-\ymin\advance\tmpb by\lhoehe%
+ \advance\tmpb by\ymove\divide\tmpb by\ystep%
+ \tmpa=\ymin\advance\tmpa by\tiefe\advance\tmpa by\ymove%
+ \multiput(\lxpos,\tmpa)(0,\ystep){\tmpb}{%
+ \ifdim\@ydim<\lhoehe pt%
+ \else\ypos=-\@ydim\divide\ypos by65536%
+ \advance\ypos by\lhoehe\advance\ypos by\tiefe%
+ \tmpe=\tiefe\advance\tmpe by-\ypos%
+ \ifnum\ypos>0\put(\tmpe,0){\thinlines\my@lstyle\ypos}\fi%
+ \fi%
+ }%
+ \fi%
+ \put(0,\ymin){\line(1,0){\lxpos}}%
+ \tmpa=\ymax\advance\tmpa by-\ymin%
+ \ifnum\tiefe>0
+ \put(0,\ymax){\line(1,1){\tiefe}\put(0,\tiefe){\line(1,0){\lxpos}%
+ \line(0,-1){\tmpa}\put(0,-\tmpa){\line(-1,-1){\tiefe}}}}%
+ \else\put(0,\ymax){\line(1,0){\lxpos}\line(0,-1){\tmpa}}%
+ \fi%
+ \thinlines%
+ \ifnum\hbarI<0\tmpa=-\ymin\advance\tmpa by\hbarI\advance\tmpa by-\tiefe%
+ \put(\tiefe,\tiefe){\line(0,1){\ymax}}%
+ \put(\tiefe,\hbarI){\line(0,-1){\tmpa}}%
+ \else\tmpa=\ymax\advance\tmpa by-\hbarI\advance\ymax by\tiefe%
+ \put(\tiefe,\ymax){\line(0,-1){\tmpa}}%
+ \ifnum\ymin<0\tmpa=\ymin%
+ \advance\tmpa by\tiefe\put(\tiefe,\tmpa){\line(0,1){-\tmpa}}%
+ \fi%
+ \fi%
+ \ifnum\hbarI<0\tmpa=\hbarI\tmpb=0\else\tmpa=0\tmpb=\hbarI\fi%
+ \tmpc=-\ymin\advance\tmpc \tmpa%
+ \ifnum\tmpc>\tiefe\tmpc=\tiefe\fi
+ \ifnum\ymove>0\put(0,\ymin){\line(1,1){\tmpc}}\fi%
+ \advance\ymin by\ymove%
+ \multiput(0,\ymin)(0,\ystep){\deltay}{%
+ \ifdim\@ydim<\tmpa pt%
+ \tmpc=-\@ydim\divide\tmpc by65536\advance\tmpc by\tmpa%
+ \ifnum\tmpc>\tiefe\tmpc=\tiefe\fi%
+ \ifx\l@style\solid\line(1,1){\tmpc}%
+ \else\divide\tmpc by 3\multiput(0,0)(3,3){\tmpc}{.}%
+ \fi%
+ \else\ifdim\@ydim>\tmpb pt%
+ \ifx\l@style\solid\line(1,1){\tiefe}%
+ \else\tmpe=\tiefe\divide\tmpe by3\multiput(0,0)(3,3){\tmpe}{.}%
+ \fi%
+ \fi%
+ \fi%
+ }%
+ \fi%
+ \thinlines%
+ \ifnum\ymaxII<\ymax\global\ymaxII=\ymax\else\global\ymaxII=\ymaxII\fi%
+ \ifnum\yminII>\ymin\global\yminII=\ymin\else\global\yminII=\yminII\fi%
+ \global\advance\yminII by-\ymove%
+ \global\xpos=\the\xpos\global\advance\xpos by20%
+ \end{picture}
+ \egroup%
+ \global\advance\ymaxII by\tiefe\advance\ymaxII by-\yminII%
+ \advance\xpos by-\breite%
+ \begin{picture}(\the\xpos,\the\ymaxII)
+ \put(\xmove,-\yminII){\box\@tempboxa}
+ \end{picture}
+ \faktorfalse
+}
+
+
+\def\legend#1#2{%
+ \begin{picture}(20,10)
+ \put(0,0){\framebox(20,10){}}
+ \ifnum #1=2\multiput(1,0)(3,0){7}{\line(0,1){10}}\fi%
+ \ifnum #1=3\multiput(0,1)(0,3){3}{\line(1,0){20}}\fi%
+ \ifnum #1=4\multiput(1,0)(3,0){7}{\line(0,1){10}}%
+ \multiput(0,1)(0,3){3}{\line(1,0){20}}%
+ \fi%
+ \ifnum #1=5\multiput(1,0)(4,0){5}{\rule{2pt}{10pt}}%
+ \multiput(0,2)(0,4){2}{\rule{20pt}{2pt}}%
+ \fi%
+ \ifnum #1=6%
+ \put(0,0){\line(2,1){20}}\put(0,4){\line(2,1){13}}\put(8,0){\line(2,1){12}}%
+ \fi%
+ \ifnum #1=7%
+ \put(0,10){\line(2,-1){20}}\put(0,6){\line(2,-1){12}}%
+ \put(8,10){\line(2,-1){12}}%
+ \fi%
+ \ifnum #1=8\put(0,0){\rule{20\unitlength}{10\unitlength}}\fi%
+ \end{picture}%
+ \quad#2%
+}
+
+
+
+\def\my@vline{%
+ \tmpa\ymin\advance\tmpa-\ymove%
+ \put(\xpos,\tmpa){\line(0,1){\yhoehe}}
+}
+
+
+\def\my@hspace#1{%
+ \dtmpa#1pt\multiply\dtmpa\breite%
+ \tmpa\dtmpa\divide\tmpa65536%
+ \global\advance\xpos\tmpa
+}
+
+
+
+\def\mydotbox#1{\tmpe=#1\advance\tmpe by2\lower0.8pt\hbox to\tmpe pt{\dotfill}}
+
+
+\def\mylinebox#1{\line(1,0){#1}}
+
+
+% Parameter: umzuwandelnde Dimension.
+\def\dimIIreal#1{%
+ \dtmpa=#1\tmpa=\dtmpa\divide\tmpa by65536\advance\dtmpa by-\tmpa pt%
+ \the\tmpa\ifnum\exact>0,\fi%
+ \tmpb=\exact%
+ \@whilenum\tmpb>0\do{%
+ \advance\dtmpa by0.05pt\dtmpa=10\dtmpa\advance\dtmpa by-0.5pt%
+ \tmpa=\dtmpa\divide\tmpa by65536\advance\dtmpa by-\tmpa pt%
+ \the\tmpa\advance\tmpb by-1}%
+}
+
+
+\def\machDachI(#1,#2){%
+ \tmpa=\hoehe\advance\tmpa by-#2\tmpd=\tmpa\ifnum\tmpd<0\tmpd=-\tmpd\fi%
+ \ifnum\hoehe<0\machDachII(#1,#2)%
+ \else
+ \tmpb=\breite\advance\tmpb by-\tiefe%
+ \advance\tmpb by\inter%
+ \ifnum\tmpa<\tiefe\advance\tmpa by-\tiefe\advance\tmpb by-\tmpa\fi%
+ \ifnum\tmpb>\breite\tmpb=\breite\fi%
+ \ifnum\breite<\tiefe\put(#1,#2){\line(1,1){\breite}}%
+ \else\put(#1,#2){\line(1,1){\tiefe}\put(0,\tiefe){\line(1,0){\tmpb}}}%
+ \fi%
+ \fi%
+ \tmpa=#1\advance\tmpa by\breite%
+ \ifnum\inter>0%
+ \ifnum\tmpd<\inter\tmpb=\tiefe\else\tmpb=\inter\fi%
+ \put(\tmpa,\lhoehe){\line(1,1){\tmpb}}%
+ \fi%
+ \ifnum\lhoehe<0\put(\tmpa,\lhoehe){%
+ \ifnum\hoehe<0\tmpb=-\lhoehe\advance\tmpb by\hoehe%
+ \ifnum\tmpb>\tiefe\tmpa=\tiefe\else\tmpa=\tmpb\tmpb=0\fi%
+ \line(1,1){\tmpa}\put(0,\tmpa){\advance\tmpb by-\tiefe\line(0,1){\tmpb}}%
+ \else\tmpa=-\lhoehe\advance\tmpa by-\tiefe%
+ \ifnum-\lhoehe<\tiefe\tmpb=-\lhoehe\else\tmpb=\tiefe\fi%
+ \line(1,1){\tmpb}\put(0,\tmpb){\line(0,1){\tmpa}}%
+ \fi%
+ }%
+ \fi
+}
+
+
+\def\machDachII(#1,#2){%
+ \tmpa=#1\advance\tmpa by\breite\tmpb=0%
+ \ifnum\hoehe>0\ifnum\lhoehe<0\tmpb=\lhoehe\fi
+ \put(\tmpa,\tmpb){\line(1,1){\inter}}
+ \else\put(\tmpa,0){\line(1,1){\tiefe}}
+ \fi
+ \ifnum\hoehe<0\tmpa=\lhoehe\else\tmpa=\lhoehe\advance\tmpa by-\hoehe\fi
+ \ifnum\tmpa<0\tmpa=\inter\else\advance\tmpa by\inter\fi%
+ \put(#1,#2){\line(1,1){\tiefe}\put(0,\tiefe){\line(1,0){\breite}%
+ \line(0,-1){\tmpa}\line(-1,-1){\tiefe}}}%
+}
+
+
+\def\machHLinesI{%
+ \tmpc=\breite\advance\tmpc by2%
+ \setbox\mybox=\hbox to\tmpc pt{\dotfill}
+ \multiput(\lxpos,\ymin)(0,\ystep){\deltay}{%
+ \ifdim\@ydim<\tmpa pt\lower0.8pt\copy\mybox\fi%
+ \ifdim\@ydim>\tmpb pt\lower0.8pt\copy\mybox\fi%
+ }
+}
+
+
+\def\machHLinesII{%
+ \multiput(\lxpos,\lypos)(0,\ystep){\deltay}{%
+ \ifdim\@ydim<\tmpa pt%
+ \ifdim\@ydim>\tmpc pt\ypos=\breite\advance\ypos by-\tiefe%
+ \else\ypos=\breite%
+ \fi%
+ \my@lstyle\ypos
+ \else%
+ \ifdim\@ydim>\tmpc pt%
+ \else%
+ \ypos=-\@ydim\divide\ypos by65536%
+ \advance\ypos by\lhoehe\advance\ypos by\tiefe%
+ \tmpe=\breite\advance\tmpe by-\ypos%
+ \ifnum\ypos>0\ifnum\tmpe>0\put(\tmpe,0){\my@lstyle\ypos}\fi\fi%
+ \fi%
+ \fi%
+ \ifdim\@ydim>\tmpb pt%
+ \ypos=\breite\advance\ypos by-\tiefe%
+ \ifdim\@ydim>\tmpd pt\ypos=\breite%
+ \else\ifdim\@ydim<\hoehe pt%
+ \else\tmpe=\@ydim\divide\tmpe by65536\advance\tmpe by-\hoehe%
+ \advance\ypos by\tmpe%
+ \fi%
+ \fi%
+ \my@lstyle\ypos
+ \fi%
+ }%
+\ifnum\ymove>0%
+ \tmpb=\ymin\advance\tmpb by-\ymove\advance\tmpb by\tiefe%
+ \ifnum\lhoehe>\tmpb\ypos=\breite%
+ \ifnum\hoehe<\tmpb\advance\ypos by-\tiefe\fi%
+ \put(\lxpos,\tmpb){\line(1,0){\ypos}}
+ \fi%
+\fi%
+}
+
+
+\def\machHLines{%
+ \tmpe=\baselineskip\divide\tmpe by65536\advance\tmpe by3%
+ \ifnum\lhoehe<0\tmpa=\lhoehe\tmpb=0\else\tmpa=0\tmpb=\lhoehe\fi%
+ \ifnum\hoehe<0\tmpc=\hoehe\tmpd=0\else\tmpc=0\tmpd=\hoehe\fi%
+ \advance\tmpb by\tiefe\advance\tmpd by\tiefe%
+ \advance\lxpos by\tiefe%
+ \lypos=\ymin\advance\lypos by\tiefe%
+ \machHLinesII%
+}
+
+
+\def\@user{}
+\def\my@empty{}
+\def\my@inside{%
+ \ifnum\hoehe<0\put(\xpos,\hoehe){\makebox(\breite,\tmpa){{\my@style\@user}}}%
+ \else\put(\xpos,0){\makebox(\breite,\tmpa){{\my@style\@user}}}%
+ \fi%
+}
+\def\my@outside{%
+ \tmpa=\hoehe%
+ \ifnum\hoehe<0\advance\tmpa by-6\else\advance\tmpa by\tiefe\advance\tmpa by6%
+ \fi%
+ \tmpb=\breite\divide\tmpb by2\advance\tmpb by\xpos%
+ \ifnum\hoehe>0\advance\tmpb by\tiefe\fi%
+ \put(\tmpb,\tmpa){\makebox(0,0){{\my@style\@user}}}%
+}
+\def\my@up{%
+ \ifnum\hoehe>0\tmpa=\hoehe\advance\tmpa by\tiefe\advance\tmpa by8%
+ \else\tmpa=\tiefe\advance\tmpa by8%
+ \fi%
+ \tmpb=\breite\divide\tmpb by2\advance\tmpb by\xpos\advance\tmpb by\tiefe%
+ \put(\tmpb,\tmpa){\makebox(0,0){{\my@style\@user}}}%
+}
+\def\my@down{%
+ \ifnum\hoehe>0\tmpa=-6\else\tmpa=\hoehe\advance\tmpa by-6\fi%
+ \tmpb=\breite\divide\tmpb by2\advance\tmpb by\xpos%
+ \put(\tmpb,\tmpa){\makebox(0,0){{\my@style\@user}}}%
+}
+\def\my@axis{%
+ \ifnum\hoehe>0\tmpa=-6\else\tmpa=6\fi%
+ \tmpb=\breite\divide\tmpb by2\advance\tmpb by\xpos%
+ \put(\tmpb,\tmpa){\makebox(0,0){{\my@style\@user}}}%
+}
+
+
+\def\Monat@#1{%
+ \tmpd=#1\divide\tmpd by65536\tmpd=\the\tmpd%
+ \tmpc=\tmpd\divide\tmpc by12\multiply\tmpc by12\advance\tmpd -\tmpc%
+ \put(0,-10){\makebox(0,0){{\mytmp@style%
+ \ifcase\tmpd Dez\or Jan\or Feb\or M\"ar\or Apr\or Mai\or Jun\or Jul%
+ \or Aug\or Sep\or Okt\or Nov%
+ \fi%
+ }}}%
+}
+
+
+\def\Tag@#1{%
+ \tmpd=#1\divide\tmpd by65536\tmpd=\the\tmpd%
+ \tmpc=\tmpd\divide\tmpc by7\multiply\tmpc by7\advance\tmpd -\tmpc%
+ \put(0,-10){\makebox(0,0){{\mytmp@style%
+ \ifcase\tmpd Son\or Mon\or Die\or Mit\or Don\or Fre\or Sam\fi%
+ }}}%
+}
+
+
+\def\Zahl@n#1{%
+ \dtmpa=#1%
+ \put(0,-10){\makebox(0,0){{\mytmp@style\dimIIreal\dxmin}}}%
+}
+\endinput
diff --git a/macros/latex209/contrib/misc/bibmods.sty b/macros/latex209/contrib/misc/bibmods.sty
new file mode 100644
index 0000000000..068dd3c981
--- /dev/null
+++ b/macros/latex209/contrib/misc/bibmods.sty
@@ -0,0 +1,65 @@
+% -*-latex-*-
+%% /u/sy/beebe/tex/bib/bibmods.sty, Mon Jul 9 08:40:33 1990
+%% Edit by Nelson H.F. Beebe <beebe at plot79.math.utah.edu>
+
+%% =====================================================================
+%% @LaTeX-style-file{
+%% author = "Nelson H. F. Beebe <beebe at science.utah.edu>",
+%% version = "1.01",
+%% date = "10 September 1991",
+%% filename = "bibmods.sty",
+%% address = "Center for Scientific Computing
+%% and Department of Mathematics
+%% South Physics Building
+%% University of Utah
+%% Salt Lake City, UT 84112
+%% USA
+%% Tel: (801) 581-5254",
+%% checksum = "14420 65 318 2830",
+%% email = "beebe at science.utah.edu (Internet)",
+%% codetable = "ISO/ASCII",
+%% supported = "yes",
+%% docstring = "This LaTeX style file provides a modification
+%% to the thebibliography environment to improve
+%% spacing.
+%%
+%% The checksum field above contains a CRC-16
+%% checksum as the first value, followed by the
+%% equivalent of the standard UNIX wc (word
+%% count) utility output of lines, words, and
+%% characters. This is produced by Robert
+%% Solovay's checksum utility."
+%% }
+%% =====================================================================
+
+% The standard LaTeX \bibliography definition invokes \sloppy, which in turn
+% sets \tolerance to 10000. This gives spacing that is too stretchable,
+% with the result that wide white spaces appear in order to give right-
+% justified output in two-column mode. We redefine \thebibliography
+% to invoke the original definition, then reset the tolerance to a more
+% reasonable value. We also allow a little \emergencystretch (a TeX 3.0
+% feature) to allow individual lines to be slightly longer; if that
+% name is unknown, the code avoids its use, so as to work with earlier
+% versions of TeX.
+
+% TeXbook, p. 308:
+\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}
+
+\let\oldthebibliography=\thebibliography
+\renewcommand{\thebibliography}[1]{\oldthebibliography{#1}
+ \hyphenpenalty=1
+ % \emergencystretch is a new feature of TeX 3.0; use it only if known
+ \ifundefined{emergencystretch}
+ \relax
+ \else
+ \emergencystretch=3pt
+ \fi
+ \if@twocolumn
+ \tolerance=6000 %need looser tolerances in two-column mode
+ \else
+ \tolerance=2000
+ \fi
+\hbadness=10000 \relax}
+
+\overfullrule=3pt % to catch problems in the output.
+
diff --git a/macros/latex209/contrib/misc/bigtabular.sty b/macros/latex209/contrib/misc/bigtabular.sty
new file mode 100644
index 0000000000..62c3eb99e1
--- /dev/null
+++ b/macros/latex209/contrib/misc/bigtabular.sty
@@ -0,0 +1,99 @@
+% Save file as: TABULAR.STY or BIGTABULAR.STY Source: FILESERV@SHSU.BITNET
+% Tabular.sty
+% Denys Duchier, Yale University, July 1990
+%
+% This file defines a \Tabular environment which is essentially
+% similar to the \tabular environment but is able to handle very
+% large tables which have to be split across pages.
+%
+% The major distinction is that \Tabular doesn't take an optional
+% argument. It behaves much like \begin{tabular*}{\linewidth} with
+% \Tabularleftskip and \Tabularrightskip used as the stretchable glue
+% on either side. Also, instead of contributing the table as a large
+% box, it performs a \unvbox so that individual rows are contributed
+% instead and page breaks can occur between them.
+%
+% \begin{Tabular}{...} ... \end{Tabular}
+%
+% has essentially the same effect as:
+%
+% \begin{center}\begin{tabular}{...} ... \end{tabular}\end{center}
+%
+% but may be split across pages.
+%
+% {\Tabularleftskip = 0pt
+% \Tabularrightskip = 0pt
+% \begin{Tabular}{@{}l@{\extracolsep{\fill}}cr@{}}
+% ...
+% \end{Tabular}}
+%
+% will produce a 3 column table with the left column flushed left,
+% the right column flushed right, and equal spacing between the
+% columns.
+
+\newskip\Tabularleftskip \Tabularleftskip\@flushglue
+\newskip\Tabularrightskip \Tabularrightskip\@flushglue
+
+\newbox\Tabularbox
+
+% let's count the number of columns so that we know how many columns
+% hlines must span.
+
+\newcount\Tabularcount
+\newcount\Tabularcolumns
+\def\@Tabclassz{\global\advance\Tabularcount\@ne\@tabclassz}
+\let\@latexclassiii\@classiii
+\def\@Tabclassiii{\global\advance\Tabularcount\@ne\@latexclassiii}
+
+% allow page breaks between rows
+
+\def\@Tabularcr{{\ifnum0=`}\fi\@ifstar{\@xTabularcr}{\@xTabularcr}}
+\def\@xTabularcr{\@ifnextchar[{\@argTabularcr}{\ifnum0=`{\fi}\cr
+ \noalign{\pagebreak[1]}}}
+
+\def\@argTabularcr[#1]{\ifnum0=`{\fi}\ifdim #1>\z@
+ \unskip\@xargarraycr{#1}\else \@yargarraycr{#1}\fi
+ \noalign{\pagebreak[1]}}
+
+% \hline is redefined to output 2 lines one on top of the other, with
+% a slightly more encouraging \pagebreak than between normal rows.
+% Thus, if a page break must occur, there will a line at the bottom,
+% and it will be repeated at the top of the next page too. This is
+% visually much more appealing.
+
+\let\@latexhline\hline
+\let\@latextabarray\@tabarray
+\def\@tabarray{\let\hline\@latexhline\@latextabarray}
+\def\Tabularhline{\multispan{\Tabularcolumns}{\unskip\leaders\hrule
+ height\arrayrulewidth\hfill}\cr
+ \noalign{\vskip-\arrayrulewidth\pagebreak[2]}%
+ \multispan{\Tabularcolumns}{\unskip\leaders\hrule
+ height\arrayrulewidth\hfill}\cr}
+
+\def\Tabular#1{\trivlist\item[]\noindent
+ \setbox\Tabularbox\vbox\bgroup
+ \let\@acol\@tabacol
+ \let\@classz\@Tabclassz
+ \let\@classiii\@Tabclassiii
+ \let\@classiv\@tabclassiv
+ \let\\\@Tabularcr
+ \setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}%
+ \global\Tabularcount\z@
+ \@mkpream{#1}%
+ \Tabularcolumns\Tabularcount
+ \let\hline\Tabularhline
+ \let\@classiii\@latexclassiii
+ \tabskip\Tabularleftskip
+ \edef\@preamble{\halign to\linewidth\bgroup
+ \tabskip\z@ \@arstrut \@preamble
+ \tabskip\Tabularrightskip \cr}%
+ \let\@starpbox\@@startpbox
+ \let\@endpbox\@@endpbox
+ \let\@sharp##\let\protect\relax
+ \lineskip\z@\baselineskip\z@
+ \@preamble}
+
+\def\endTabular{\crcr\egroup\egroup\unvbox\Tabularbox\endtrivlist}
diff --git a/macros/latex209/contrib/misc/biihead.sty b/macros/latex209/contrib/misc/biihead.sty
new file mode 100644
index 0000000000..bbb60f2570
--- /dev/null
+++ b/macros/latex209/contrib/misc/biihead.sty
@@ -0,0 +1,21 @@
+%BIIHEAD.STY If this is included after \documentstyle{report}, it adds
+% an underlined heading style to the LaTeX report style.
+% \pagestyle{biiheadings} will put underlined headings at the top
+% of each page. The right page headings are the Chapter titles and
+% the left page titles are supplied by \def\lefthead{text}.
+
+% Ted Shapin, Dec. 17, 1986
+
+\makeatletter
+\def\ps@biiheadings{\let\@mkboth\markboth
+\def\@oddhead{\protect\makebox[0pt][l]{\protect\underline
+ {\protect\makebox[\textwidth][l]{\sl\rightmark\hfill\rm\thepage}}}}
+\def\@oddfoot{}
+\def\@evenhead{\protect\makebox[0pt][l]{\protect\underline
+ {\protect\makebox[\textwidth][l]
+ {\rm\thepage\hfill\sl\lefthead}}}}
+\def\lefthead{}
+\def\chaptermark##1{\markright {\uppercase{%
+\@chapapp\ \thechapter.\ ##1}}}
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+\makeatother
diff --git a/macros/latex209/contrib/misc/boxit.sty b/macros/latex209/contrib/misc/boxit.sty
new file mode 100644
index 0000000000..8b0a9f9f1d
--- /dev/null
+++ b/macros/latex209/contrib/misc/boxit.sty
@@ -0,0 +1,91 @@
+%%From: marcel@cs.caltech.edu (Marcel van der Goot)
+%%Newsgroups: comp.text.tex
+%%Subject: illegal modification of boxit.sty
+%%Date: 28 Feb 92 01:10:02 GMT
+%%Organization: California Institute of Technology (CS dept)
+%%Nntp-Posting-Host: andromeda.cs.caltech.edu
+%%
+%%
+%%Quite some time ago I posted a file boxit.sty; maybe it made it
+%%to some archives, although I don't recall submitting it. It defines
+%% \begin{boxit}
+%% ...
+%% \end{boxit}
+%%to draw a box around `...', where the `...' can contain other
+%%environments (e.g., a verbatim environment). Unfortunately, it had
+%%a problem: it did not work if you used it in paragraph mode, i.e., it
+%%only worked if there was an empty line in front of \begin{boxit}.
+%%Luckily, that is easily corrected.
+%%
+%%HOWEVER, apparently someone noticed the problem, tried to correct it,
+%%and then distributed this modified version. That would be fine with me,
+%%except that:
+%%1. There was no note in the file about this modification, it only has my
+%% name in it.
+%%2. The modification is wrong: now it only works if there is *no* empty
+%% line in front of \begin{boxit}. In my opinion this bug is worse than
+%% the original one.
+%%
+%%In particular, the author of this modification tried to force an empty
+%%line by inserting a `\\' in the definition of \Beginboxit. If you have
+%%a version of boxit.sty with a `\\', please delete it. If you have my
+%%old version of boxit.sty, please also delete it. Below is an improved
+%%version.
+%%
+%%Thanks to Joe Armstrong for drawing my attention to the bug and to the
+%%illegal version.
+%%
+%% Marcel van der Goot
+%% .---------------------------------------------------------------
+%% | Blauw de viooltjes, marcel@cs.caltech.edu
+%% | Rood zijn de rozen;
+%% | Een rijm kan gezet
+%% | Met plaksel en dozen.
+%% |
+
+
+% boxit.sty
+% version: 27 Feb 1992
+%
+% Defines a boxit environment, which draws lines around its contents.
+% Usage:
+% \begin{boxit}
+% ... (text you want to be boxed, can contain other environments)
+% \end{boxit}
+%
+% The width of the box is the width of the contents.
+% The boxit* environment behaves the same, except that the box will be
+% at least as wide as a normal paragraph.
+%
+% The reason for writing it this way (rather than with the \boxit#1 macro
+% from the TeXbook), is that now you can box verbatim text, as in
+% \begin{boxit}
+% \begin{verbatim}
+% this better come out in boxed verbatim mode ...
+% \end{verbatim}
+% \end{boxit}
+%
+% Marcel van der Goot
+% marcel@cs.caltech.edu
+%
+
+\def\Beginboxit
+ {\par
+ \vbox\bgroup
+ \hrule
+ \hbox\bgroup
+ \vrule \kern1.2pt %
+ \vbox\bgroup\kern1.2pt
+ }
+
+\def\Endboxit{%
+ \kern1.2pt
+ \egroup
+ \kern1.2pt\vrule
+ \egroup
+ \hrule
+ \egroup
+ }
+
+\newenvironment{boxit}{\Beginboxit}{\Endboxit}
+\newenvironment{boxit*}{\Beginboxit\hbox to\hsize{}}{\Endboxit}
diff --git a/macros/latex209/contrib/misc/breakcites.sty b/macros/latex209/contrib/misc/breakcites.sty
new file mode 100644
index 0000000000..9b083df8dc
--- /dev/null
+++ b/macros/latex209/contrib/misc/breakcites.sty
@@ -0,0 +1,10 @@
+% breakcites.sty
+% Style file to allow citations to be broken across lines.
+% -Don Hosek 3/14/89
+%
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ {\csname b@\@citeb\endcsname}}}{#1}}
diff --git a/macros/latex209/contrib/misc/bsf.sty b/macros/latex209/contrib/misc/bsf.sty
new file mode 100644
index 0000000000..9df8e535f0
--- /dev/null
+++ b/macros/latex209/contrib/misc/bsf.sty
@@ -0,0 +1,97 @@
+% Provide access to the boldface san serif type style for LaTeX. Once you
+% have included "bsf" as a style option, you can use the \bsf command to
+% select the boldface san serif style, just as you would select the usual
+% boldface Roman style with \bf, EXCEPT:
+%
+% The various fonts defined here are all "loaded on demand". As
+% discussed in the LaTeX book, Section C.14.4, a loaded on demand
+% font is subject to two restrictions when used in math mode:
+%
+% - The font must be used OUTSIDE of math mode before it is used
+% INSIDE of math mode. The \load command can be used to get
+% around this restriction.
+%
+% - Only a single font size is available within math mode - the
+% display, text, script and scriptscriptfonts will all be the
+% same. This can be avoided ONLY by changing the definitions
+% given here to pre-load the appropriate fonts; see LFONTS.TEX
+% for further information. (Alternatively, \@getfont could be
+% made more clever.) Note that pre-loading the fonts could cause
+% you to fill font space with fonts you never really use.
+%
+% In order to allow other style files that need access to \bsf to input this
+% file safely, it is designed so that an attempt to input it a second time -
+% or, more exactly, when command "\bsf" is already defined - is ignored.
+%
+% This file can be adapted easily to define other font type styles. The real
+% limit is likely to come from the requirement that each style so defined must
+% be given a unique family number - TeX only supports 16 families and LaTeX
+% as usually configured already uses 10. The right way to avoid this problem
+% is to modify \@getfont so that it ignores a family number of -1. Fonts
+% so specified would not be usable in math mode, but that's no big deal; you
+% don't WANT to use tons of non-math fonts in math mode anyway.
+%
+% As currently written, this file assumes that you have boldface san serif
+% fonts available at the following point sizes:
+%
+% lcmssb8
+% lcmssb8 at 9pt
+% cmssbx10
+% cmssbx10 at 11pt
+% cmssbx10 at 12pt
+% cmssbx10 at 17pt
+% cmssbx10 at 25pt
+%
+% All but the last of these should be commonly available. I'm not sure about
+% the last one; LFONTS.TEX does not assume the availability of ANY 25 pt fonts
+% other than Roman. If necessary, change the definition of \bsfxxv@ to
+% \@subfont\bsf\rm. (Alternatively, if you have boldface sans serif fonts
+% at sizes smaller than 8pt, you might want to change the definitions of
+% \bsfv@, \bsfvi@, and \bsfvii@.)
+%
+% Technical note: It is possible to do without the \bsf<size>@ macros by
+% including their contents, with a whole bunch of \@prtct's, within the
+% \@addfontinfo definitions. This is a pain to do, and probably doesn't end
+% up saving any space anyway. This way costs you a bunch of extra macros,
+% but it's a LOT easier to understand!
+%
+% Written by Jerry Leichter (LEICHTER-JERRY@CS.YALE.EDU)
+% Modified, 27-Jan-89 by Jerry Leichter
+% Fixed typos in file name for lcmssb8.
+% Modified, 16-Jun-89 by Jerry Leichter
+% Changed family name for consistency. Fixed a typo in the definition
+% for 9pt, introduced by the 27-Jan fix. Sigh, such a *simple* file....
+
+\expandafter\ifx\csname bsf\endcsname\relax %Once only, please
+% Note: It's a pain to use \@ifundefined here - we don't want to pass the
+% rest of the definitions as an argument, but we can't easily use \endinput
+% since, with docsty, we can't control where the line breaks occur.
+
+\typeout{Document Option `bsf': 16 Jun 89}
+\def\bsf{\protect\pbsf}
+\newfam\bsffam
+\@addfontinfo\@vpt{\@prtct\bsfv@}
+ \def\bsfv@{\def\pbsf{\@subfont\bsf\bf}}
+\@addfontinfo\@vipt{\@prtct\bsfvi@}
+ \def\bsfvi@{\def\pbsf{\@subfont\bsf\bf}}
+\@addfontinfo\@viipt{\@prtct\bsfvii@}
+ \def\bsfvii@{\def\pbsf{\@subfont\bsf\bf}}
+\@addfontinfo\@viiipt{\@prtct\bsfviii@}
+ \def\bsfviii@{\def\pbsf{\@getfont\pbsf\bsffam\@viiipt{lcmssb8}}}
+\@addfontinfo\@ixpt{\@prtct\bsfx@}
+ \def\bsfx@{\def\pbsf{\@getfont\pbsf\bsffam\@ixpt{lcmssb8\@halfmag}}}
+\@addfontinfo\@xpt{\@prtct\bsfx@}
+ \def\bsfx@{\def\pbsf{\@getfont\pbsf\bsffam\@xpt{cmssbx10}}}
+\@addfontinfo\@xipt{\@prtct\bsfxi@}
+ \def\bsfxi@{\def\pbsf{\@getfont\pbsf\bsffam\@xipt{cmssbx10\@halfmag}}}
+\@addfontinfo\@xiipt{\@prtct\bsfxii@}
+ \def\bsfxii@{\def\pbsf{\@getfont\pbsf\bsffam\@xiipt{cmssbx10\@magscale1}}}
+\@addfontinfo\@xivpt{\@prtct\bsfxiv@}
+ \def\bsfxiv@{\def\pbsf{\@getfont\pbsf\bsffam\@xivpt{cmssbx10\@magscale2}}}
+\@addfontinfo\@xviipt{\@prtct\bsfxvii@}
+ \def\bsfxvii@{\def\pbsf{\@getfont\pbsf\bsffam\@xviipt{cmssbx10\@magscale3}}}
+\@addfontinfo\@xxpt{\@prtct\bsfxx@}
+ \def\bsfxx@{\def\pbsf{\@getfont\pbsf\bsffam\@xxpt{cmssbx10\@magscale4}}}
+\@addfontinfo\@xxvpt{\@prtct\bsfxxv@}
+ \def\bsfxxv@{\def\pbsf{\@getfont\pbsf\bsffam\@xxvpt{cmssbx10\@magscale5}}}
+\fi
diff --git a/macros/latex209/contrib/misc/bsl.sty b/macros/latex209/contrib/misc/bsl.sty
new file mode 100644
index 0000000000..4432e0fb74
--- /dev/null
+++ b/macros/latex209/contrib/misc/bsl.sty
@@ -0,0 +1,97 @@
+% Save file as: BSL.STY Source: FILESERV@SHSU.BITNET
+% Provide access to the boldface slanted type style for LaTeX. Once you
+% have included "bsl" as a style option, you can use the \bsl command to
+% select the boldface slanted style, just as you would select the usual
+% boldface Roman style with \bf, EXCEPT:
+%
+% The various fonts defined here are all "loaded on demand". As
+% discussed in the LaTeX book, Section C.14.4, a loaded on demand
+% font is subject to two restrictions when used in math mode:
+%
+% - The font must be used OUTSIDE of math mode before it is used
+% INSIDE of math mode. The \load command can be used to get
+% around this restriction.
+%
+% - Only a single font size is available within math mode - the
+% display, text, script and scriptscriptfonts will all be the
+% same. This can be avoided ONLY by changing the definitions
+% given here to pre-load the appropriate fonts; see LFONTS.TEX
+% for further information. (Alternatively, \@getfont could be
+% made more clever.) Note that pre-loading the fonts could cause
+% you to fill font space with fonts you never really use.
+%
+% In order to allow other style files that need access to \bsl to input this
+% file safely, it is designed so that an attempt to input it a second time -
+% or, more exactly, when command "\bsl" is already defined - is ignored.
+%
+% This file can be adapted easily to define other font type styles. The real
+% limit is likely to come from the requirement that each style so defined must
+% be given a unique family number - TeX only supports 16 families and LaTeX
+% as usually configured already uses 10. The right way to avoid this problem
+% is to modify \@getfont so that it ignores a family number of -1. Fonts
+% so specified would not be usable in math mode, but that's no big deal; you
+% don't WANT to use tons of non-math fonts in math mode anyway.
+%
+% As currently written, this file assumes that you have boldface san serif
+% fonts available at the following point sizes:
+%
+% cmbxsl10 at 9pt
+% cmbxsl10
+% cmbxsl10 at 11pt
+% cmbxsl10 at 12pt
+% cmbxsl10 at 14pt
+% cmbxsl10 at 17pt
+% cmbxsl10 at 20pt
+% cmbxsl10 at 25pt
+%
+% All but the last of these should be commonly available. I'm not sure about
+% the last one; LFONTS.TEX does not assume the availability of ANY 25 pt fonts
+% other than Roman. If necessary, change the definition of \bslxxv@ to
+% \@subfont\bsl\rm. (Alternatively, if you have boldface slanted fonts
+% at sizes smaller than 8pt, you might want to change the definitions of
+% \bslv@, \bslvi@, and \bslvii@.)
+%
+% Technical note: It is possible to do without the \bsl<size>@ macros by
+% including their contents, with a whole bunch of \@prtct's, within the
+% \@addfontinfo definitions. This is a pain to do, and probably doesn't end
+% up saving any space anyway. This way costs you a bunch of extra macros,
+% but it's a LOT easier to understand!
+%
+% Written by GEorge D. Greenwade (BED_GDG@SHSU.BITNET)
+% as a variation from BSF.STY written by Jerry Leichter
+% (LEICHTER-JERRY@CS.YALE.EDU)
+% April 5, 1990
+
+\expandafter\ifx\csname bsl\endcsname\relax %Once only, please
+% Note: It's a pain to use \@ifundefined here - we don't want to pass the
+% rest of the definitions as an argument, but we can't easily use \endinput
+% since, with docsty, we can't control where the line breaks occur.
+
+\typeout{Document Option 'bsl' for Bold Slanted Fonts -- April 5, 1990 -- GDG}
+\def\bsl{\protect\pbsl}
+\newfam\bslfam
+\@addfontinfo\@vpt{\@prtct\bslv@}
+ \def\bslv@{\def\pbsl{\@subfont\bsl\bf}}
+\@addfontinfo\@vipt{\@prtct\bslvi@}
+ \def\bslvi@{\def\pbsl{\@subfont\bsl\bf}}
+\@addfontinfo\@viipt{\@prtct\bslvii@}
+ \def\bslvii@{\def\pbsl{\@subfont\bsl\bf}}
+\@addfontinfo\@viiipt{\@prtct\bslviii@}
+ \def\bslviii@{\def\pbsl{\@subfont\bsl\bf}}
+\@addfontinfo\@ixpt{\@prtct\bslx@}
+ \def\bslx@{\def\pbsl{\@getfont\pbsl\bslfam\@ixpt{cmbxsl10\@halfmag}}}
+\@addfontinfo\@xpt{\@prtct\bslx@}
+ \def\bslx@{\def\pbsl{\@getfont\pbsl\bslfam\@xpt{cmbxsl10}}}
+\@addfontinfo\@xipt{\@prtct\bslxi@}
+ \def\bslxi@{\def\pbsl{\@getfont\pbsl\bslfam\@xipt{cmbxsl10\@halfmag}}}
+\@addfontinfo\@xiipt{\@prtct\bslxii@}
+ \def\bslxii@{\def\pbsl{\@getfont\pbsl\bslfam\@xiipt{cmbxsl10\@magscale1}}}
+\@addfontinfo\@xivpt{\@prtct\bslxiv@}
+ \def\bslxiv@{\def\pbsl{\@getfont\pbsl\bslfam\@xivpt{cmbxsl10\@magscale2}}}
+\@addfontinfo\@xviipt{\@prtct\bslxvii@}
+ \def\bslxvii@{\def\pbsl{\@getfont\pbsl\bslfam\@xviipt{cmbxsl10\@magscale3}}}
+\@addfontinfo\@xxpt{\@prtct\bslxx@}
+ \def\bslxx@{\def\pbsl{\@getfont\pbsl\bslfam\@xxpt{cmbxsl10\@magscale4}}}
+\@addfontinfo\@xxvpt{\@prtct\bslxxv@}
+ \def\bslxxv@{\def\pbsl{\@getfont\pbsl\bslfam\@xxvpt{cmbxsl10\@magscale5}}}
+\fi
diff --git a/macros/latex209/contrib/misc/buscard.sty b/macros/latex209/contrib/misc/buscard.sty
new file mode 100644
index 0000000000..8b9d632637
--- /dev/null
+++ b/macros/latex209/contrib/misc/buscard.sty
@@ -0,0 +1,226 @@
+%buscard.sty version 1.5 30 Apr 93
+%changes: 1.1: now works if empty entries present, can even print a blank card
+% 1.2: uses psfig macros to set seal,
+% new command to specify organization name and seal file
+% 1.3: puts small cut marks instead of boxes around cards
+% 1.4: adds specifications for sealwidth, sealheight, and sealoffset
+% 1.5: made more robust for non-NFSS users (by edwin@cs.ucla.edu)
+%business card style by Mark A. Roth, 22 Dec 92. Email: mroth@afit.af.mil
+%see end of file for example of use.
+\documentstyle{article}
+\nofiles
+\makeatletter
+%I need a 7pt sans serif font, which the standard LaTeX NFSS set doesn't have
+\@ifundefined{new@fontshape}
+ {\errmessage{Sorry. The default fonts in this style require the new font
+ selection scheme. You'll have to modify it to work with old
+ style LaTeX.}}
+ {\new@fontshape{cmss}{m}{n}{%
+ <5>cmss8 at5pt%
+ <6>cmss8 at6pt%
+ <7>cmss8 at7pt%
+ <8>cmss8%
+ <9>cmss9%
+ <10>cmss10%
+ <11>cmss10 at10.95pt%
+ <12>cmss12%
+ <14>cmss12 at14.4pt%
+ <17>cmss17%
+ <20>cmss17 at20.74pt%
+ <25>cmss17 at24.88pt%
+ }{}}
+\pagestyle{empty}
+\oddsidemargin -.25in \evensidemargin -.25in \marginparsep 0pt
+\textwidth 7.1in \textheight 11in \topmargin -54pt \tabcolsep 0pt
+\newdimen\cardwidth \newdimen\cardcontentheight \newdimen\cardcontentwidth
+\newdimen\psfigsealheight \newdimen\psfigsealwidth
+\cardwidth 3.5in \cardcontentheight 108.5pt \cardcontentwidth 225pt
+\newdimen\headerwidth \headerwidth\cardcontentwidth
+\headheight 0pt \headsep 0pt \parindent 0pt \parskip 0pt \footheight 0pt
+%
+%new def of @iframebox to get partial tic marks instead of boxes
+%comment this out if you want whole boxes as in version 1.2
+%if there's a better way please let me know
+%
+\long\def\@iframebox[#1][#2]#3{\leavevmode
+ \savebox\@tempboxa[#1][#2]{\kern\fboxsep #3\kern\fboxsep}\@tempdima\fboxrule
+ \advance\@tempdima \fboxsep \advance\@tempdima \dp\@tempboxa
+ \hbox{\lower \@tempdima\hbox
+ {\vbox{\hrule \@height \fboxrule \@width 3pt
+ \hbox{\vrule \@height 3pt \@width \fboxrule \hskip-\fboxrule
+ \vbox{\vskip\fboxsep \box\@tempboxa\vskip\fboxsep}\hskip
+ -\fboxrule\vrule \@height 3pt \@width \fboxrule}%
+ \hrule \@height \fboxrule \@width 3pt}}}}
+%
+\def\bc@e{}
+\def\bc@organization{\mbox{}\\[2pt]}
+\def\organization#1{\ifx\bc@e#1\else\def\bc@organization{#1\\[2pt]}\fi}
+\def\bc@department{\mbox{}\\}
+\def\department#1{\ifx\bc@e#1\else\def\bc@department{#1\\}\fi}
+\def\bc@name{}
+\def\name#1{\ifx\bc@e#1\else\def\bc@name{\ \\[-20pt]#1\\}\fi}
+\def\bc@rank{}
+\def\rank#1{\ifx\bc@e#1\else\def\bc@rank{#1\\}\fi}
+\def\bc@title{}
+\def\title#1{\ifx\bc@e#1\else\def\bc@title{#1\\}\fi}
+\def\bc@right{}
+\def\right#1{\def\bc@right{#1}}
+\def\bc@left{}
+\def\left#1{\def\bc@left{#1}}
+\def\bc@email{}
+\def\email#1{\def\bc@email{#1}}
+\def\bc@workphone{}
+\def\workphone#1{\def\bc@workphone{#1}}
+\def\bc@fax{}
+\def\fax#1{\def\bc@fax{#1}}
+\def\bc@address{}
+\def\address#1{\def\bc@address{#1}}
+\def\bc@sealheight{0pt}\def\bc@sealwidth{0pt}
+\def\bc@sealfile{}\def\bc@sealoffset{0pt}
+\newif\if@sealhere \@sealherefalse
+\def\seal#1{\ifx\bc@e#1\else%
+\def\bc@sealfile{#1}\if@sealhere\else\input psfig \pssilent\@sealheretrue\fi\fi}
+\def\sealwidth#1{\ifx\bc@e#1\else\def\bc@sealwidth{#1}%
+\setlength{\psfigsealwidth}{\bc@sealwidth}%
+\addtolength{\psfigsealwidth}{2.3pt}%
+\addtolength{\headerwidth}{-\psfigsealwidth}\fi}
+\def\sealheight#1{\ifx\bc@e#1\else\def\bc@sealheight{#1}%
+\setlength{\psfigsealheight}{\bc@sealheight}%
+\addtolength{\psfigsealheight}{2.3pt}\fi}
+\def\sealoffset#1{\ifx\bc@e#1\else\def\bc@sealoffset{#1}\fi}
+\fboxsep 17pt
+\def\bc@makecard{\ \hspace*{-10.4pt}\vspace*{-.7pt}
+\ifx\bc@right\bc@e\def\bc@right{\bc@email\hspace*{2pt}\\\bc@workphone\\%
+\ifx\bc@fax\bc@e\else FAX: \bc@fax\fi}\fi
+\ifx\bc@left\bc@e\def\bc@left{\bc@address}\fi
+\framebox[\cardwidth]{%
+\begin{minipage}{\cardcontentwidth}
+\vbox to \cardcontentheight{
+\if@sealhere
+\ifx\bc@sealwidth\bc@e\errmessage{You must specify sealwidth and sealheight.}\fi
+\vspace*{-8pt}
+%print the seal scaled to fit specified width
+\vbox to \psfigsealheight{\hbox to \psfigsealwidth{
+\psfig{figure=\bc@sealfile,height=\bc@sealheight,width=\bc@sealwidth}%
+}
+\vspace*{-\bc@sealheight}\hspace*{\bc@sealwidth}%
+\begin{minipage}[t]{\headerwidth}
+\begin{center}
+{\footnotesize\sf \bc@organization}
+{\scriptsize\sf \bc@department}
+\end{center}
+\end{minipage}
+}
+\vfill
+\vspace*{\bc@sealoffset}
+\else %if no seal
+\begin{center}
+{\footnotesize\sf \bc@organization}
+{\scriptsize\sf \bc@department}
+\end{center}
+\fi %end of if@sealhere
+%
+\vfill
+%if name, rank, and title all empty then print a blank
+\ifx\bc@name\bc@e\ifx\bc@rank\bc@e\ifx\bc@title\bc@e\def\bc@name{\mbox{}}%
+\fi\fi\fi
+\begin{center}
+{\large\rm\bc@name}
+{\scriptsize\sf\bc@rank}
+{\scriptsize\sf\bc@title}
+\end{center}
+\vfill
+
+\hbox to \cardcontentwidth{
+\scriptsize\sf
+\begin{tabular}[b]{l}
+\bc@left
+\end{tabular}
+\hfill
+\begin{tabular}[b]{r}
+\bc@right
+\end{tabular}
+} %end hbox to cardcontentwidth
+} %end vbox to cardcontentheight
+\end{minipage} %end of minipage
+} %end of framebox
+} %end \bc@makecard
+
+\newdimen\twocardwidth\twocardwidth2\cardwidth
+\addtolength{\twocardwidth}{-\fboxrule}
+\def\bc@topvertcut{\ \hspace*{-13.7pt}
+\hbox to \twocardwidth{%
+\vrule height 3pt width \fboxrule\hfill
+\vrule height 3pt width \fboxrule\hfill
+\vrule height 3pt width \fboxrule}\vskip-1pt}
+\newcounter{card} \newcounter{printedcard} \newcounter{pagecard}
+\def\makecard#1{%
+\bc@topvertcut\par%
+\ \hspace*{-6.7pt}%
+\setcounter{card}{#1}\setcounter{printedcard}{0}\setcounter{pagecard}{0}%
+\@whilenum\c@card>\c@printedcard\do%
+ {\bc@makecard\bc@makecard\newline%
+ \addtocounter{printedcard}{2}%
+ \addtocounter{pagecard}{1}%
+ \ifnum\c@pagecard=5%
+ \ifnum\c@card>\c@printedcard%
+ \newpage\setcounter{pagecard}{0}\bc@topvertcut\ \hspace*{-6.7pt}%
+ \fi%
+ \fi%
+ }%end while
+}%end makecard
+\makeatother
+\endinput
+%sample file to create business cards; change this file to
+%hold your information and feed it to your favorite LaTeX processor.
+%send comments/problems to Mark Roth, mroth@afit.af.mil
+%
+%Fill in the following with your info, \address gets printed in the
+%lower left corner, \email, \workphone and \fax in the lower right corner.
+%If you want to do your own thing in the corners use commands \left and
+%\right, separating lines with \\
+%
+\documentstyle{buscard}
+%
+%the seal is an encapsulated PostScript file, leave out it you don't have one
+\seal{sealname.eps}
+%the desired seal width and height must be specified, the style will scale
+%your seal image to this width and height. Make sure your image specifies
+%the minimal bounding box. An adjustment for vertical height of the seal
+%can be made by specifying a dimension for sealoffset.
+\sealheight{dimen} %specify height of seal, e.g., .5in, 50pt, ...
+\sealwidth{dimen} %specify width of seal, e.g., .5in, 50pt, ...
+\sealoffset{dimen} %specify vertical adjustment after seal, e.g., .5in, -50pt
+ %make this space adjustment if your name, etc. doesn't look centered
+%
+%the department is printed under the organization name at the top of the card
+%leave them out if you don't want them
+\organization{UNIVERSITY OF TYPESETTING}
+\department{Dept. of Electrical and Computer Engineering}
+%
+%the next three entries are centered in the middle of the card
+\name{JOHN J. DOE, Ph.D.} %this format is up to you!
+\rank{MAJOR, USAF} %all fields are optional
+\title{PROFESSOR OF ELECTRICAL ENGINEERING}
+%
+%lower left corner
+\address{First Line\\ Second Line\\ Third Line}
+%
+%lower right corner
+\email{doe@somewhere}
+\workphone{(555) 555-5555, DSN 555-5555}
+\fax{(555) 555-5555, DSN 555-5555} %word FAX is automatically supplied
+%
+%this is the same info using \right
+%\right{doe@somewhere\\
+% (555) 555-5555, DSN 555-5555\\
+% FAX: (555) 555-5555, DSN 555-5555} %you have to supply word FAX
+%
+%if you don't want cut marks around the cards uncomment the following line
+%\fboxrule 0pt
+\begin{document}
+ %this command prints the cards, 10 per page, in even numbers
+\makecard{2} %change the number here to the number of cards you want
+ %don't try more than 10 to start, just in case don't like
+ %your cards on the first attempt
+\end{document}
diff --git a/macros/latex209/contrib/misc/calendar.sty b/macros/latex209/contrib/misc/calendar.sty
new file mode 100644
index 0000000000..bccbd0bca3
--- /dev/null
+++ b/macros/latex209/contrib/misc/calendar.sty
@@ -0,0 +1,549 @@
+% calendar.sty - print calendar
+% Copyright (C) 1991 J"urgen Stuber
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 1, or (at your option)
+% any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have a copy of the GNU General Public License;
+% if not, write to the Free Software Foundation, Inc.,
+% 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+% History:
+% 10.4.1991 js - posted
+%
+% Description:
+% This will generate a calendar in the following format:
+% +----------+----------+ ... +----------+
+% | Januar | Februar | | Dezember |
+% +----------+----------+ ... +----------+
+% + 1 DI | 1 FR | | 1 SO |
+% +----------+----------+ ... +----------+
+% + 2 MI | 2 SA | | 2 MO |
+% +----------+----------+ ... +----------+
+% .
+% .
+% .
+%
+% +----------+----------+ ... +----------+
+% |31 DO | | |31 DI |
+% +----------+----------+ ... +----------+
+%
+% Because of space limitations the calendar is printed on 3 pages.
+%
+% Features:
+% - number of week in year
+% - handles holidays and birthdays in a flexible way
+% - computes day of week & easter date
+%
+% Limitations:
+% - does not print year due to lack of space
+% - number of annotations per date is limited to two due to lack of space
+% - does not compute moon phases
+% - does not compute beginning of spring, summer, etc.
+%
+% Usage:
+% generate a LaTex file calendar.tex like the following:
+%
+%--- beginning of calendar.tex ------------------------------
+% \documentstyle[german]{calendar}
+%
+% \def\weekdayname#1{%
+% \ifcase#1 \relax
+% MO\or DI\or MI\or DO\or FR\or SA\or SO%
+% \fi
+% }
+%
+% \def\monthname#1{%
+% \ifcase#1 \relax
+% Januar\or Februar\or M"arz\or April\or Mai\or Juni\or
+% Juli\or August\or September\or Oktober\or November \or Dezember%
+% \fi
+% }
+%
+% \begin{document}%
+% \setYear{1991}%
+% \input{holiday}%
+% \input{birthday}%
+% \typesetYear%
+% \end{document}
+%--- end of calendar.tex ------------------------------
+%
+% holiday.tex and birthday.tex contain declarations in the following
+% formats:
+%
+% \annual{text}{day.month.}{holidayflag}
+% \annualMovable{text}{day.month.}{dayOfWeek}{holidayflag}
+% \easterRelative{text}{offset}{holidayflag}
+% \anniversary{text}{day.month.year}{holidayflag}
+%
+% \annual will generate an annotation for the specified day containing
+% the given text. If holidayflag is 1 the day will be marked as
+% a holiday, i.e., printed in boldface.
+% \annualMovable will generate the annotation for the next day with
+% matching day of the week on or after the specified date.
+% The day of the week is encoded as 0 for monday up to 6 for sunday.
+% \easterRelative will generate the annotation for the day with
+% the specified offset from easter.
+% \anniversary will generate an annotation consisting of text and the
+% number of the anniversary.
+%
+% Here is a sample file containing declarations of holidays for
+% Northrhine-Westfalia. Some other german holidays are included but
+% commented out.
+%
+%--- beginning of holiday.tex ------------------------------
+% \annual{Neujahr}{1.1.}{1}%
+% \annual{Heilige Drei K"onige}{6.1.}{0}%
+% %\annual{Valentinstag}{14.2.}{0}%
+% \easterRelative{Rosenmontag}{-48}{0}%
+% %\easterRelative{Fastnacht}{-47}{0}%
+% \easterRelative{Aschermittwoch}{-46}{0}%
+% \easterRelative{Karfreitag}{-2}{1}%
+% \easterRelative{Ostern}{0}{1}%
+% \easterRelative{Ostern}{1}{1}%
+% \annual{Tag der Arbeit}{1.5.}{1}%
+% \easterRelative{Himmelfahrt}{39}{1}%
+% \easterRelative{Pfingsten}{49}{1}%
+% \easterRelative{Pfingsten}{50}{1}%
+% \easterRelative{Fronleichnam}{60}{1}%
+% %\annual{Mari"a Himmelfahrt}{15.8.}{0}%
+% %\annual{Reformationstag}{31.10.}{0}%
+% \annual{Allerheiligen}{1.11.}{1}%
+% %\annualMovable{Volkstrauertag}{13.11.}{6}{0}%
+% \annualMovable{Bu"s- und Bettag}{16.11.}{2}{1}%
+% %\annualMovable{Totensonntag}{20.11.}{6}{0}%
+% %\annualMovable{1. Advent}{27.11.}{6}{0}%
+% %\annualMovable{2. Advent}{4.12.}{6}{0}%
+% %\annualMovable{3. Advent}{11.12.}{6}{0}%
+% %\annualMovable{4. Advent}{18.12.}{6}{0}%
+% %\annual{Mari"a Empf"angnis}{8.12.}{0}%
+% \annual{Heiligabend}{24.12.}{0}%
+% \annual{Weihnachten}{25.12.}{1}%
+% \annual{Weihnachten}{26.12.}{1}%
+% \annual{Silvester}{31.12.}{0}%
+%--- end of holiday.tex ------------------------------
+%
+% You may change the following parameters:
+% \columnheight height of the entire column, including title
+% \titleheight height of title containing month name
+% \itemwidth width of one column
+% \daywidth position of right edge of day number in column
+% \weekdaywidth width reserved for day of week
+%
+%----------------------------------------------------------------------
+\input{article.sty}
+\pagestyle{empty}%
+\evensidemargin=0pt
+\oddsidemargin=\evensidemargin
+\topmargin=0pt
+\topmargin 0pt
+\headheight 0pt
+\headsep 0pt
+\footskip 0pt
+%
+\textheight 280mm
+%----------------------------------------------------------------------
+% list macros (see TeXBook, Dirty Tricks)
+
+\let\sep\relax
+
+\toksdef\tb=2
+
+\def\leftlist#1{%
+ \def\sep##1{\relax##1\cr}%
+ \vbox{\halign{##\hfil\cr#1}}%
+}
+
+\def\@ifundef#1{\expandafter\ifx\csname#1\endcsname\relax}
+\def\@nameedef#1{\expandafter\edef\csname #1\endcsname}
+
+\newcount\tmpcnt
+
+\def\remainder#1by#2{%
+ \tmpcnt=#1 %
+ \divide\tmpcnt by #2 %
+ \multiply\tmpcnt by #2 %
+ \advance #1 by -\tmpcnt}
+
+%----------------------------------------------------------------------
+
+\newcount\curday % day
+\newcount\curmonth % month
+\newcount\curweekday % day of week, 0=Monday
+\newcount\curyear % year
+\newcount\daycount % day of year
+\newcount\weekcount % week of year
+\newcount\leapyear % 0=normal year, 1=leap year
+\newcount\easter % easter date, as day of year
+\newcount\startweekday % first day of week in year
+
+\def\setYear#1{
+ \global\curyear=#1 %
+ {% compute leap year
+ \newcount\rf \rf=\curyear \remainder\rf by{4}%
+ \newcount\rh \rh=\curyear \remainder\rh by{100}%
+ \newcount\rfh \rfh=\curyear \remainder\rfh by{400}%
+ \ifnum\rfh=0 %
+ \global\leapyear=1 %
+ \else
+ \ifnum\rh=0 %
+ \global\leapyear=0 %
+ \else
+ \ifnum\rf=0 %
+ \global\leapyear=1 %
+ \else
+ \global\leapyear=0 %
+ \fi
+ \fi
+ \fi
+ }%
+ {% compute easter date
+ % this is the easter formula by C.F.Gauss -- valid up to 8201
+ % (no limitation, considering the current rate of environmental destruction)
+ \newcount\tmpa \tmpa=\curyear \remainder\tmpa by{19}%
+ \newcount\tmpb \tmpb=\curyear \remainder\tmpb by{4}%
+ \newcount\tmpc \tmpc=\curyear \remainder\tmpc by{7}%
+ \newcount\yh \yh=\curyear \divide\yh by 100 %
+ \newcount\yfh \yfh=\curyear \divide\yfh by 400 %
+ \newcount\m \m=\yh
+ \multiply\m by 8 %
+ \advance\m by 13 %
+ \divide\m by 25 %
+ \advance\m by -2 %
+ \newcount\s \s=\yh \advance\s by -\yfh \advance\s by -2 %
+ \newcount\M \M=15 %
+ \advance\M by \s
+ \advance\M by -\m
+ \remainder\M by{30}%
+ \newcount\N \N=6 %
+ \advance\N by \s
+ \remainder\N by{7}%
+ \newcount\d \d=\tmpa
+ \multiply\d by 19 %
+ \advance\d by \M
+ \remainder\d by{30}%
+ \newcount\D
+ \ifnum\d=29 %
+ \D=28 %
+ \else
+ \ifnum\d=28 %
+ \ifnum\d>10 %
+ \D=27 %
+ \else
+ \D=\d
+ \fi
+ \else
+ \D=\d
+ \fi
+ \fi
+ \multiply\tmpb by 2 %
+ \multiply\tmpc by 4 %
+ \newcount\e \e=\D
+ \multiply\e by 6 %
+ \advance\e by \tmpb
+ \advance\e by \tmpc
+ \advance\e by \N
+ \remainder\e by{7}%
+ \advance\e by 80 %
+ \advance\e by \leapyear
+ \advance\e by \D
+ \global\easter=\e
+ }% pooh -- done it
+ {% compute starting day of week --- we know easter is on a sunday
+ \newcount\fsd \fsd=\easter \remainder\fsd by{7}%
+ \newcount\wd \wd=6 \advance\wd by -\fsd
+ \global\startweekday=\wd
+ }%
+}
+
+%----------------------------------------------------------------------
+
+\def\monthlength#1{%
+ \ifnum\leapyear=0
+ \ifcase#1 %
+ 31\or28\or31\or30\or31\or30\or
+ 31\or31\or30\or31\or30\or31%
+ \fi
+ \else
+ \ifcase#1 %
+ 31\or29\or31\or30\or31\or30\or
+ 31\or31\or30\or31\or30\or31%
+ \fi
+ \fi
+}
+
+\def\monthoffset#1{%
+ \ifnum\leapyear=0 %
+ \ifcase#1 %
+ 0\or31\or59\or90\or120\or151\or
+ 181\or212\or243\or273\or304\or334%
+ \fi
+ \else
+ \ifcase#1 %
+ 0\or31\or60\or91\or121\or152\or
+ 182\or213\or244\or274\or305\or335%
+ \fi
+ \fi
+}
+
+%----------------------------------------------------------------------
+% typesetting individual days
+
+% #1 : day in month
+% #2 : Holiday flag (0=workday, 1=holiday)
+\def\typesetDay#1#2{\relax%
+ \ifnum#2=0 %
+ {#1}%
+ \else
+ {\bf #1}%
+ \fi
+}
+
+% #1 : weekday code 0..7, 0=Monday
+% #2 : Holiday flag (0=workday, 1=holiday)
+\def\typesetWeekday#1#2{%
+ \ifnum#2=0 %
+ {\weekdayname{#1}}%
+ \else
+ {\bf\weekdayname{#1}}%
+ \fi
+}
+
+% #1 : annotations, format a1\sepa 2\sep..\sep an
+\def\typesetAnnotations#1{{\leftlist{#1}}}
+
+\newdimen\columnheight \columnheight=247mm
+\newdimen\titleheight \titleheight=10mm
+\newdimen\itemwidth \itemwidth=43mm
+\newdimen\daywidth \daywidth=6mm
+\newdimen\weekdaywidth \weekdaywidth=9mm
+
+\newdimen\itemheight \itemheight=\columnheight
+ \advance\itemheight by -\titleheight
+ \divide\itemheight by 31
+ \advance\itemheight by -2.4pt
+
+\def\typesetItem{%
+ \@ifundef{ann\the\daycount}%
+ \def\ann{}%
+ \else
+ \def\ann{\@nameuse{ann\the\daycount}}%
+ \fi
+ \@ifundef{hol\the\daycount}%
+ \ifnum\curweekday=6 %
+ \def\hol{1}%
+ \else
+ \def\hol{0}%
+ \fi
+ \else
+ \def\hol{\@nameuse{hol\the\daycount}}%
+ \fi
+ \vbox{%
+ \kern1pt%
+ \hbox to \itemwidth{%
+ \vbox to \itemheight{%
+ \vfil
+ \hbox to\daywidth{\hfil{\large\typesetDay{\the\curday}{\hol}}}%
+ \vfil}%
+ \kern2mm%
+ \vbox to \itemheight{%
+ \vfil
+ \hbox to\weekdaywidth{%
+ {\large\typesetWeekday{\the\curweekday}{\hol}}%
+ \hfil}%
+ \vfil}%
+ \vbox to \itemheight{%
+ {\scriptsize\typesetAnnotations{\ann}}%
+ \vfil
+ }%
+ \hfil
+ \ifnum\curweekday=0 %
+ \vbox to \itemheight{%
+ \kern1pt%
+ \hbox{{\scriptsize\the\weekcount}\kern1pt}%
+ \vfil
+ }%
+ \global\advance \weekcount by 1 %
+ \else\relax\fi
+ }%
+ \kern1pt%
+ \hrule}}
+
+\def\typesetDummyItem{%
+ \vbox{%
+ \kern1pt%
+ \hbox to \itemwidth{%
+ \vbox to \itemheight{%
+ \vfil
+ }%
+ \hfil
+ }%
+ \kern1pt
+ \hrule}}
+
+\newcount\lastday
+
+% #1 : number of month, 1=January
+\def\typesetMonth#1{%
+ \vbox{%
+ \vbox to \titleheight{%
+ \hrule
+ \kern2pt%
+ \vfil
+ \hbox to \itemwidth{\hfil{\LARGE\bf\strut\monthname{#1}}\hfil}%
+ \vfil
+ \hrule height0.8pt%
+ }
+ \curday=0 %
+ \edef\lastday{\monthlength{#1} }%
+ \loop\ifnum\curday<\lastday
+ \global\advance \curday by 1 %
+ \typesetItem
+ \global\advance \daycount by 1 %
+ \global\advance \curweekday by 1 %
+ \ifnum\curweekday>6 %
+ \global\advance \curweekday by -7 %
+ \else\relax\fi
+ \repeat
+ \loop\ifnum\curday<31 %
+ \global\advance \curday by 1 %
+ \typesetDummyItem
+ \repeat
+ \vfil
+ }%
+}
+
+% #2 : first month
+% #3 : last month+1
+\def\typesetPartialYear#1#2{%
+ \hrule
+ \hbox{%
+ \curmonth=#1 %
+ \loop\ifnum\curmonth<#2 %
+ \vrule %
+ \typesetMonth{\the\curmonth}%
+ \global\advance\curmonth by 1 %
+ \repeat
+ \vrule
+ }%
+ \hrule
+}
+
+\def\typesetYear{%
+ \curweekday=\startweekday
+ \weekcount=1 %
+ \daycount=0 %
+ \newcount\firstmonth
+ \newcount\endmonth
+ \firstmonth=0 %
+ \loop\ifnum\firstmonth<12 %
+ \endmonth=\firstmonth \advance\endmonth by 4 %
+ \typesetPartialYear{\the\firstmonth}{\the\endmonth}%
+ \eject
+ \advance\firstmonth by 4 %
+ \repeat
+}
+
+%----------------------------------------------------------------------
+
+\def\dayOf#1.#2.#3 {#1}
+\def\monthOf#1.#2.#3 {#2}
+\def\yearOf#1.#2.#3 {#3}
+
+\def\addAnn#1#2#3{%
+ \@ifundef{ann#1}%
+ \@namedef{ann#1}{}%
+ \else
+ \relax
+ \fi
+ \tb=\expandafter{#2}%
+ \@nameedef{ann#1}{\@nameuse{ann#1}\noexpand\sep{\the\tb#3}}%
+}
+
+\def\addHol#1#2{%
+ \ifnum#2=1 %
+ \@namedef{hol#1}{1}%
+ \else\relax\fi
+}
+
+%----------------------------------------------------------------------
+% entries for holidays
+
+% #1 : text
+% #2 : date in format d.m.
+% #3 : holiday flag
+\def\annual#1#2#3{%
+ \edef\dof{\dayOf#2 }%
+ \edef\mof{\monthOf#2 }%
+ \tmpcnt=\mof
+ \advance\tmpcnt by -1 %
+ \edef\moff{\monthoffset{\the\tmpcnt}}%
+ \tmpcnt=\moff
+ \advance\tmpcnt by \dof
+ \advance\tmpcnt by -1 %
+ \edef\doy{\the\tmpcnt}%
+ \addAnn{\doy}{#1}{}%
+ \addHol{\doy}{#3}%
+}
+
+% #1 : text
+% #2 : date in format d.m.
+% #3 : day of week
+% #4 : holiday flag
+\def\annualMovable#1#2#3#4{%
+ \edef\dof{\dayOf#2 }%
+ \edef\mof{\monthOf#2 }%
+ \curday=\mof
+ \advance\curday by -1 %
+ \edef\moff{\monthoffset{\the\curday}}%
+ \curday=\moff %
+ \advance\curday by \dof
+ \advance\curday by -1 %
+ \curweekday=700 %
+ \advance\curweekday by -\curday
+ \advance\curweekday by -\startweekday
+ \advance\curweekday by#3 %
+ \remainder\curweekday by{7}%
+ \advance\curday by \curweekday
+ \edef\doy{\the\curday}%
+ \addAnn{\doy}{#1}{}%
+ \addHol{\doy}{#4}%
+}
+
+% #1 : text
+% #2 : offset to easter (may be negative)
+% #3 : holiday flag
+\def\easterRelative#1#2#3{%
+ \tmpcnt=\easter %
+ \advance\tmpcnt by #2 %
+ \edef\doy{\the\tmpcnt}%
+ \addAnn{\doy}{#1}{}%
+ \addHol{\doy}{#3}%
+}
+
+% #1 : text
+% #2 : date in format d.m.y
+% #3 : holiday flag
+\def\anniversary#1#2#3{%
+ \edef\dof{\dayOf#2 }%
+ \edef\mof{\monthOf#2 }%
+ \edef\yof{\yearOf#2 }%
+ \tmpcnt=\mof
+ \advance\tmpcnt by -1 %
+ \edef\moff{\monthoffset{\the\tmpcnt}}%
+ \tmpcnt=\moff
+ \advance\tmpcnt by \dof
+ \advance\tmpcnt by -1 %
+ \edef\doy{\the\tmpcnt}%
+ \tmpcnt=\curyear %
+ \advance\tmpcnt by -\yof
+ \addAnn{\doy}{#1 }{\the\tmpcnt}%
+ \addHol{\doy}{#3}%
+}
diff --git a/macros/latex209/contrib/misc/calorie.sty b/macros/latex209/contrib/misc/calorie.sty
new file mode 100644
index 0000000000..859839c1f9
--- /dev/null
+++ b/macros/latex209/contrib/misc/calorie.sty
@@ -0,0 +1,989 @@
+% calorie.sty --- LaTeX macro of calorie checking for who goes on a diet.
+%
+% Note:
+% This file is distributed WITHOUT ANY WARRANTY.
+% No author or distributor accepts responsibility
+% to anyone for the consequences of using it.
+% I am NOT a dietitian nor a medical doctor.
+%
+% Copyright (c) 1994 by Shuji Aonuma.
+% Reports or requests to aonuma@kodama.issp.u-tokyo.ac.jp
+%
+% Unchanged copies of this file may be freely distributed.
+% You may modify a renamed copy of this file.
+%
+% Calorie data are taken from
+% ``Karorii chekku nouto (Calorie Check Notebook)'', Fusosha Publishing (1994)
+% (in Japanese).
+%
+% Documentation is not ready, but
+% example calorie data, TeX, PostScript files are added at end of this file.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%% RCS
+\def\RCS@HEADER$#1: #2.#3 #4 #5 #6 #7 #8${%
+ \def\RCS@NAME{#2}%
+ \def\RCS@REVISION{#4}\def\RCS@DATE{#5}%
+ \def\RCS@AUTHOR{#7}
+ \typeout{\RCS@NAME\@spaces********* Version: \RCS@REVISION\space(\RCS@DATE).}
+ }
+\RCS@HEADER$Header: calorie.stv 1.3 94/12/22 19:26:06 noteASC2-issp Brief $
+%RCS information file name release date time machine status(or Brief when auto check in on a Brief Editor)
+
+% new skips, counters, ifs
+\newskip\Cat@a \newskip\Cat@b \newskip\Cat@c \newskip\Cat@d \newskip\Cat@e%
+\newskip\Cat@f \newskip\Cat@g \newskip\Cat@h \newskip\Cat@i \newskip\Cat@j%
+\newskip\Cat@k \newskip\Cat@l \newskip\Cat@m \newskip\Cat@n \newskip\Cat@o%
+
+\newif\ifCat@a@ \newif\ifCat@b@ \newif\ifCat@c@ \newif\ifCat@d@ \newif\ifCat@e@%
+\newif\ifCat@f@ \newif\ifCat@g@ \newif\ifCat@h@ \newif\ifCat@i@ \newif\ifCat@j@%
+\newif\ifCat@k@ \newif\ifCat@l@ \newif\ifCat@m@ \newif\ifCat@n@ \newif\ifCat@o@%
+
+\newskip\Total@bf \newskip\Total@lu \newskip\Total@tb%
+\newskip\Total@su \newskip\Total@mm \newskip\Total@all%
+\newskip\Total@tmp%
+
+\newskip\Cal@tmp%
+\newcount\Rd@a \newcount\Rd@b
+\newcount\Year \newcount\Month \newcount\Day
+\newcount\CDtmpa \newcount\CDtmpb \newcount\CDtmpc \newcount\WDay
+\newskip\CalorieWd
+
+\newskip\StdCalorie\StdCalorie\z@
+\newskip\LimitCalorie\LimitCalorie\z@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%default column width%
+\CalorieWd\columnwidth
+
+
+%Set standard calorie limit. Warned when exceeded.
+\def\SetCalorie#1{\StdCalorie#1pt}%
+% for example
+% \SetCalorie{2200}%Japanese male, 30 years-old, light job, 170cm height, 65kg
+
+ % Standard required calorie (kcal) t=one's height in cm
+ % age female male
+ % 20-29 15.50t-636 20.00t-1150
+ % 30-39 15.00t-611 19.17t-1054
+ % 40-49 15.00t-611 18.57t-998
+ % 50-59 16.00t-788 20.00t-1300
+ % 60- 16.00t-858 18.21t-1132
+
+%date
+\def\YE@#1#2#3#4#5#6{19#1#2}%
+\def\DY@#1#2#3#4#5#6{\if#50#6\else#5#6\fi}%
+\def\MN@#1#2#3#4#5#6{%
+ \if #30\ifcase#4\or Jan.\or Feb.\or Mar.\or Apr.\or May\or Jun.\or%
+ Jul.\or Aug.\or Sep.\fi\fi%
+ \if #31\ifcase#4 Oct.\or Nov.\or Dec.\fi\fi
+}
+\def\CalcDay#1#2#3#4#5#6{%Stolen without permission from dayofweek.sty on CTAN
+ % by Martin Minow of DEC (minow%bolt.dec@decwrl.dec.com).
+ \Month=#3#4\relax\Day=#5#6\relax\Year=19#1#2\relax%
+ \CDtmpa=\Month \advance\CDtmpa-14 \divide\CDtmpa12%
+ \advance\CDtmpa\Year
+ \WDay=\Month \advance\WDay10
+ \CDtmpc=\WDay \divide\CDtmpc13
+ \multiply\CDtmpc12
+ \advance\WDay-\CDtmpc\relax \multiply\WDay13 \advance\WDay-1
+ \divide\WDay5 \advance\WDay\Day \advance\WDay77
+ \CDtmpb=\CDtmpa \CDtmpc=\CDtmpb \divide\CDtmpc100 \multiply\CDtmpc100
+ \advance\CDtmpb-\CDtmpc
+ \multiply\CDtmpb5 \divide\CDtmpb4 \advance\WDay\CDtmpb
+ \CDtmpb=\CDtmpa \divide\CDtmpb400 \advance\WDay\CDtmpb
+ \CDtmpb=\CDtmpa \divide\CDtmpb100 \multiply\CDtmpb2 \advance\WDay-\CDtmpb
+ \CDtmpb=\WDay \divide\CDtmpb7 \multiply\CDtmpb7 \advance\WDay-\CDtmpb
+ \ifcase\WDay Sun.\or Mon.\or Tue.\or Wed.\or
+ Thu.\or Fri.\or Sat.\fi
+}
+
+
+%%%%%
+\def\Hrule{\rule[.5ex]{\CalorieWd}{.3pt}\\}
+\def\Vskip{\vskip1ex}
+
+%%%%%
+%make dimension to real (e.g. 12.5pt -> 12.5)
+{\catcode`\p=12\catcode`\t=12%
+\gdef\REAL@In#1.#2pt{\Rd@a#1\relax}\gdef\REAL@Fl#1.#2pt{\Round@#2/}}
+
+\def\Rd#1{\expandafter\REAL@In\the#1\expandafter\REAL@Fl\the#1%
+ \the\Rd@a\hbox to 2ex{.\the\Rd@b\hss}}
+
+\def\Round@#1{\@ifnextchar/{\Round@@#10}{\Round@@#1}}
+\def\Round@@#1#2{\@ifnextchar/{\Round@@@#1#20}{\Round@@@#1#2}}
+\def\Round@@@#1#2#3/{%
+ \Rd@b#1\relax\@tempcntb#2\relax%
+ \ifnum\@tempcntb>4\advance\Rd@b1\relax\fi%
+ \ifnum\Rd@b=10\advance\Rd@a1\relax\Rd@b0\relax\fi%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begin{Calorie}{date} date -> 941224
+% |
+% |
+%\end{Calorie}
+
+\def\Calorie#1{%
+ \parindent\z@%
+ %date
+ \hbox to \CalorieWd{{\NameDate \CalcDay#1, \MN@#1\space\DY@#1, \YE@#1}\hfill kcal}
+ \Vskip
+ %initialize
+ \LimitCalorie\StdCalorie%
+ \Cat@a\z@ \Cat@b\z@ \Cat@c\z@ \Cat@d\z@ \Cat@e\z@ \Cat@f\z@%
+ \Cat@g\z@ \Cat@h\z@ \Cat@i\z@ \Cat@j\z@ \Cat@k\z@ \Cat@l\z@%
+ \Cat@m\z@ \Cat@n\z@ \Cat@o\z@%
+ \Cat@a@false \Cat@b@false \Cat@c@false \Cat@d@false \Cat@e@false \Cat@f@false%
+ \Cat@g@false \Cat@h@false \Cat@i@false \Cat@j@false \Cat@k@false \Cat@l@false%
+ \Cat@m@false \Cat@n@false \Cat@o@false%
+ \Total@bf\z@ \Total@lu\z@ \Total@tb\z@ \Total@su\z@ \Total@mm\z@%
+ \Total@all\z@ \Total@tmp\z@%
+}
+
+\def\endCalorie{%
+ \Total@all\Total@bf%sum for a whole day.
+ \advance\Total@all\Total@lu%
+ \advance\Total@all\Total@tb%
+ \advance\Total@all\Total@su%
+ \advance\Total@all\Total@mm%
+ \Hrule\PrintCat\Hrule%print items
+ \hbox to \CalorieWd{\null\hfill\NameTotal\dotfill\Rd\Total@all}\\%print total
+ \hbox to \CalorieWd{\null\hfill\NameLimit\null\hfill\Rd\LimitCalorie}\\%
+ \ifdim\Total@all>\LimitCalorie%warning
+ \Vskip\advance\Total@all-\LimitCalorie%
+ \fbox{\hbox to \CalorieWd%
+ {\bf\NameWarning\hfill{\Large\bf\Rd\Total@all} kcal\hfill\NameOver}}%
+ \fi%
+}
+
+\def\TotalCat#1{%partial sum
+ \csname Total@#1\endcsname\Cat@a%
+ \advance\csname Total@#1\endcsname\Cat@b%
+ \advance\csname Total@#1\endcsname\Cat@c%
+ \advance\csname Total@#1\endcsname\Cat@d%
+ \advance\csname Total@#1\endcsname\Cat@e%
+ \advance\csname Total@#1\endcsname\Cat@f%
+ \advance\csname Total@#1\endcsname\Cat@g%
+ \advance\csname Total@#1\endcsname\Cat@h%
+ \advance\csname Total@#1\endcsname\Cat@i%
+ \advance\csname Total@#1\endcsname\Cat@j%
+ \advance\csname Total@#1\endcsname\Cat@k%
+ \advance\csname Total@#1\endcsname\Cat@l%
+ \advance\csname Total@#1\endcsname\Cat@m%
+ \advance\csname Total@#1\endcsname\Cat@n%
+ \advance\csname Total@#1\endcsname\Cat@o%
+}
+
+\def\Print@Cat#1{%print data
+ \hbox to \CalorieWd{%
+ \hskip.3\CalorieWd\hbox to 5ex{\hss(#1)\hss}%
+ \hbox to 3ex{\hss\csname ifCat@#1@\endcsname$\circ$\else$\times$\fi\hss}%
+ \csname CatName#1\endcsname%
+ \hfill\Rd{\csname Cat@#1\endcsname}
+ }\\
+}
+
+\def\PrintCat{%print item
+ \NameDetail\\
+ \Print@Cat{a} \Print@Cat{b} \Print@Cat{c} \Print@Cat{d} \Print@Cat{e}
+ \Print@Cat{f} \Print@Cat{g} \Print@Cat{h} \Print@Cat{i} \Print@Cat{j}
+ \Print@Cat{k} \Print@Cat{l} \Print@Cat{m} \Print@Cat{n} \Print@Cat{o}
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% I usually have five meals, breakfast, lunch, tea-break snack,
+% supper, and finally a light snack with drinking liquor or beer
+% at midnight.
+%
+% So I prepared five environments which work inside the Calorie environment.
+% Breakfast
+% Lunch
+% TeaBreak
+% Supper
+% NightSnack
+%
+
+
+\def\Breakfast{\Vskip\Total@tmp\z@\Hrule}
+\def\endBreakfast{%
+ \global\Total@bf\Total@tmp\Hrule%
+ \hbox to \CalorieWd{\NameBreakfast\dotfill\Rd\Total@bf}%
+}
+
+\def\Lunch{\Vskip\Total@tmp\z@\Hrule}
+\def\endLunch{%
+ \global\Total@lu\Total@tmp\Hrule%
+ \hbox to \CalorieWd{\NameLunch\dotfill\Rd\Total@lu}%
+}
+
+\def\TeaBreak{\Vskip\Total@tmp\z@\Hrule}
+\def\endTeaBreak{%
+ \global\Total@tb\Total@tmp\Hrule%
+ \hbox to \CalorieWd{\NameTeaBreak\dotfill\Rd\Total@tb}%
+}
+
+\def\Supper{\Vskip\Total@tmp\z@\Hrule}
+\def\endSupper{%
+ \global\Total@su\Total@tmp\Hrule%
+ \hbox to \CalorieWd{\NameSupper\dotfill\Rd\Total@su}%
+}
+
+\def\NightSnack{\Vskip\Total@tmp\z@\Hrule}
+\def\endNightSnack{%
+ \global\Total@mm\Total@tmp\Hrule%
+ \hbox to \CalorieWd{\NameNightSnack\dotfill\Rd\Total@mm}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \Cal{name of material}{category}{unit calorie}{unit}{amount}
+%
+\def\Cal#1#2#3#4#5{\Cal@tmp#3pt%
+ \Cal@tmp#5\Cal@tmp%
+ \def\Tmp@{#1}
+ \global\advance\csname Cat@#2\endcsname\Cal@tmp%
+ \global\csname Cat@#2@true\endcsname%
+ \advance\Total@tmp\Cal@tmp%
+ \hbox to \CalorieWd{%
+ \hbox to 5ex{\hss(#2)\hss}
+ \ifx\Tmp@\@empty%
+ \hfill\else#1, #5\ \ifx#51#4\else#4\PlChar\fi\dotfill\
+ \fi%
+ \Rd\Cal@tmp}\\}
+
+
+
+% To define daily material
+% \cdef{name}{category}{unit calorie}{unit}
+% is equivalent to
+% \def\name#1{\Cal{category}{unit calorie}{unit}#1}
+%
+\def\cdef#1#2#3#4{%
+ \expandafter\ifx\csname #1\endcsname\relax%
+ \expandafter\def\csname#1\endcsname##1{\Cal{#1}{#2}{#3}{#4}{##1}}%
+ \else%
+ \@latexerr{Command name `#1' already used}\@eha
+ \fi%
+}
+
+%%%%%%%%%%%%%%
+% \Cons{name of exercise}{unit calorie}{unit}{amount}
+% calories of additional exercise,
+% which inflate the calorie limit, \LimitCalorie.
+%
+
+\def\Cons#1#2#3#4{\Cal@tmp#2pt%
+ \Cal@tmp#4\Cal@tmp%
+ \global\advance\LimitCalorie\Cal@tmp%
+ \hbox to \CalorieWd{%
+ \hfill#1, #4\ \ifx#41#3\else#3s\fi\dotfill%
+ $-$\Rd\Cal@tmp}}
+
+% To define daily exercise.
+% Similar to \cdef
+
+\def\sdef#1#2#3{%
+ \expandafter\ifx\csname #1\endcsname\relax%
+ \expandafter\def\csname#1\endcsname##1{\Cons{#1}{#2}{#3}{##1}}
+ \else%
+ \@latexerr{Command name `#1' already used}\@eha
+ \fi%
+}
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Japanese version, which may be more satisfying, will be sent by an email on request.
+%
+\def\NameDate{\large\bf Date: }
+\def\NameTotal{{\bf Total }}
+\def\NameLimit{{\bf Limit }}
+\def\NameDetail{{\bf Items }}
+\def\NameWarning{{Warning}}
+\def\NameOver{{ Exceeded!!}}
+\def\PlChar{s}%plural char
+\def\NameBreakfast{{\bf Breakfast} \hfill total}
+\def\NameLunch{{\bf Lunch} \hfill total}
+\def\NameTeaBreak{{\bf Tea Break} \hfill total}
+\def\NameSupper{{\bf Supper} \hfill total}
+\def\NameNightSnack{{\bf Night Snack} \hfill total}
+
+% Categories of materials
+% I am unfamiliar with nutrition.
+% I hope someone teach me suitable terminology.
+\def\CatNamea{Cereals}
+\def\CatNameb{Meats}
+\def\CatNamec{Seafoods}
+\def\CatNamed{Eggs}
+\def\CatNamee{Dairy products}
+\def\CatNamef{Beans}
+\def\CatNameg{Potatoes}
+\def\CatNameh{Green vegetables}
+\def\CatNamei{Other vegetables}
+\def\CatNamej{Dry goods}%Laver, dried fish etc
+\def\CatNamek{Fruits}
+\def\CatNamel{Oils \& seasonings}
+\def\CatNamem{Confectioneries}
+\def\CatNamen{Drinks}
+\def\CatNameo{Miscellaneous}
+
+
+% if calorie.dat file exists, load it in.
+\openin1 calorie.dat
+\ifeof1\else\closein1 \relax\@@input calorie.dat\fi
+
+
+
+\endinput
+
+Following are two files, calorie.dat (sample data file) and
+example.tex (example).
+To obtain an example,
+save as in separated files, and compile example.tex
+
+
+calorie.dat --- sample data file for calorie.sty
+----------------cut here----------------
+%% calorie.dat
+% Calorie data for daily materials.
+%
+%
+\cdef{Rice}{a}{200}{cup}
+\cdef{Noodles}{a}{210}{cup}
+\cdef{Soba}{a}{240}{cup}
+\cdef{ChinaNoodles}{a}{370}{cup}
+\cdef{Bread}{a}{160}{slice}
+\cdef{CalorieMate}{a}{100}{piece}%eutrophic
+\cdef{VitaminSalad}{a}{23.333}{piece}%eutrophic
+\cdef{Yogurt}{e}{0.6}{gram}
+\cdef{Tofu}{f}{240}{chou}
+\cdef{Egg}{d}{80}{piece}%egg
+\cdef{Carrot}{i}{0.32}{gram}
+\cdef{Beer}{n}{0.4}{ml}
+\cdef{Coffee}{n}{0}{cup}
+\cdef{Fried}{l}{2}{cm$^3$}
+
+%Set
+
+\def\Sushi#1{%
+ \Cal{Sushi rice}{a}{40}{piece}{#1}
+ \Cal{Raw fish}{c}{15}{piece}{#1}
+ \Cal{Vinegar}{l}{0}{ml}{#1}
+}
+\cdef{Quail}{d}{18}{piece}%egg of quail
+\cdef{Nattoh}{f}{2}{gram}
+\cdef{Laver}{j}{0}{sheet}
+
+\def\Quixote{% Curry lunch at Quixote
+ \Cal{Curry (Quixote)}{o}{50}{dish}{1}
+ \Cal{}{a}{70}{}{1}
+ \Cal{}{g}{40}{}{1}
+ \Cal{}{i}{20}{}{1}
+ \Cal{}{l}{50}{}{1}
+ \Cal{Rice}{a}{1}{gram}{200}
+ \Cal{Cabbage}{h}{.1}{gram}{30}
+}
+
+
+% exercise
+\sdef{Jog}{4}{min}
+\sdef{Walk}{1.6}{min}
+\sdef{Tennis}{5.33}{min}
+
+\endinput
+----------------cut here----------------
+
+
+
+example.tex --- example of calorie.sty
+----------------cut here----------------
+%example.tex
+\documentstyle[%
+ a4,%
+ calorie%
+]{article}
+\begin{document}
+ \SetCalorie{2200}
+ %Standard for a Japanese male,
+ %170cm height, light job
+
+ \begin{Calorie}{941221}
+ \Tennis{30}
+
+ \begin{Breakfast}
+ \VitaminSalad{3}
+ \CalorieMate{4}
+ \Coffee{1}
+ \end{Breakfast}
+
+ \begin{Lunch}
+ \Quixote%Curry set at Restaurant Quixote
+ \Cal{Scallop}{o}{1.11}{gram}{50}
+ \Fried{20}
+ \Coffee{1}
+ \end{Lunch}
+
+ \Jog{20}
+
+ \begin{Supper}
+ \Sushi{20}
+ \Egg{.3}
+ \Quail{1}
+ \Nattoh{10}
+ \Laver{5}
+ \end{Supper}
+
+ \begin{NightSnack}
+ \Yogurt{60}
+ \Beer{700}
+ \end{NightSnack}
+
+ \end{Calorie}
+\end{document}
+----------------cut here----------------
+
+
+example.tex --- example of calorie.sty
+----------------cut here----------------
+%!PS-Adobe-2.0
+%%Creator: dvips 5.54 Copyright 1986, 1994 Radical Eye Software
+%%Title: CALORIE.DVI
+%%CreationDate: Thu Dec 22 19:37:36 1994
+%%Pages: 2
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%EndComments
+%DVIPSCommandLine: C:\DRIVERS\DVIPS\DVIPS.EXE CALORIE.DVI
+%DVIPSParameters: dpi=600, compressed, comments removed
+%DVIPSSource: TeX output 1994.12.22:1936
+%%BeginProcSet: texc.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
+mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
+ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
+hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
+TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get
+round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{
+statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0
+0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn
+begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X
+array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo
+setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx
+FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{
+pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
+B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
+length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
+/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
+/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp
+0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
+index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
+ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]/id
+ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N /cp 0 N{
+rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id gp get
+/gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp add /cp
+X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add /gp X
+adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{dup
+255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 adv}
+B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 idiv
+S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
+putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
+adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
+{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
+adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
+chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
+}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
+cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
+0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
+false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
+scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath
+transform round exch round exch itransform moveto rulex 0 rlineto 0
+ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
+0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
+B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{
+3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p
+-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{
+3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 39158280 55380996 1000 600 600
+(C:\DRIVERS\DVIPS/CALORIE.DVI) @start /Fa 3 55 df<EA03F8EA0FFE487E481380
+4813C0A2B512E0A76C13C0A26C13806C13006C5AEA03F81313779226>46
+D<91380FFFC091B512FE0107ECFFC0011F15F04915FC90267FF8077F9026FFC0007F4848
+C76C138048486E13C0486C6E13E0486C6C15F08082486D15F8A380A25CA26C5D4A15F06C
+5B6C90C7FCC64816E090C85A18C04C138018004C5A4B5B4B5B030F5B037F13C0027FB55A
+04FCC7FC16F016FEEEFFC0DA000713F0030113FC6F6CB4FC7013807013C018E07013F018
+F818FCA27013FEA3D801E016FFEA0FFC487E487E487FA2B57EA318FEA25E18FC6C5B18F8
+91C75A6C4816F0D81FF84A13E06D4A13C06CB449B512806CD9F00714006C90B65AC616F8
+013F15E0010F1580010102FCC7FCD9001F13C0384F7ACD45>51 D<923807FF80037F13F0
+0203B512FC021F14FF027F158091B5000113C001039039F8003FE04901E0130F490180EB
+3FF04990C712FF49485B494815F849485B5A5C5A485BA2486F13F05C486F13E0EF3F8094
+C7FC5AA25C5AA2ED3FF80281B57E028314E0B5008714F8028F80DA9FC07F9139BF001FFF
+02FC6D13807013C04A6D13E04A15F018F84A7F18FCA24A15FEA44A15FFA37EA67EA46C17
+FE80A26C17FCA26C4B13F8806C17F06C6D15E06C5D6E4913C0D97FFE4913806D6C6CB512
+006D90B512FC01075D6D5D010015C0021F49C7FC020313E0384F7ACD45>54
+D E /Fb 1 52 df<13FF000313E0380F01F8381C007C0030137E003C133E007E133FA412
+3CC7123E147E147C5C495AEB07E03801FF8091C7FC380001E06D7E147C80143F801580A2
+1238127C12FEA21500485B0078133E00705B6C5B381F01F03807FFC0C690C7FC19277DA5
+21>51 D E /Fc 28 121 df<EA0F80EA3FE0EA7FF0EAFFF8A8EA7FF0A7EA3FE0A7EA1FC0
+A7EA0F80A7C7FCA7EA0F80EA3FE0EA7FF0A2EAFFF8A5EA7FF0A2EA3FE0EA0F800D3B78BA
+1D>33 D<B812C017FC17FF18C028007FF000037F04007F717E717E171F84A2717EA74D5A
+A260173F4D5A4D5A4C13C0040F5B91B600FCC7FCA2EFFF8002F0C713F0EF3FF8717E717E
+717E19807113C0A319E0A719C0A25F4D138019005FEF7FFE4C485AB912F018C095C7FC17
+F03B397DB844>66 D<B912F0A426007FF8C7FCEF1FF8170717031701A21700A21878A304
+3C137C183CA41800167CA216FC150391B5FCA4ECF8031500167CA2163C180FA3181EA293
+C7FCA2183EA2183C187CA218FCA2EF01F81703170F173FEE01FFB9FC18F0A338397DB83F
+>69 D<B612FCA439007FF800B3B3ADB612FCA41E397DB824>73 D<B7FCA426007FF8C9FC
+B3ACEF0780A5170F1800A35FA25FA25F5F5E5EEE0FFE167FB8FCA431397DB839>76
+D<B500FC0203B512F0A28080C66C6D90390003F0006F6E5A81017B7F13798101787F6E7E
+6E7E6E7F6E7FA26E7F6E7F6E7F6E7F6F7E153F826F13806F13C06F13E06F13F06F13F881
+17FCEE7FFEEE3FFF7013817013C17013E18218F17013F97013FDEF7FFF8383A283838383
+83187FA2183F181F01FC160FB500FC150718031801A244397DB84B>78
+D<D907FF130E013FEBE01E90B5EAF83E0003ECFE7E3A07FC01FFFE390FF0001F4848130F
+48481303491301007F140090C8FC167E5A163EA27F161E7F7F6D91C7FC13FC387FFFE014
+FEECFFF06C14FE6F7E6C816C15F06C816C81C681133F010F801301D9000F1480EC007F03
+0F13C01503818100F0157FA3163FA27E17807E167F6C16007E6D14FE01E0495A01F81303
+9039FF801FF800FC90B512E0D8F83F5CD8F00749C7FC39E0007FF02A3B7BB935>83
+D<003FB91280A4D9F800EBF003D87FC09238007FC049161F007EC7150FA2007C1707A200
+781703A400F818E0481701A4C892C7FCB3AE010FB7FCA43B387DB742>I<B6D8E01FB500
+FC90383FFFFCA4000101F0C7D83FFCC8EA7E006C71153C171F6E197C017F701578836E70
+14F8013F6F5E6E1801011F4B6D5CA26E18036D4B6D5CA26D6D496D495A173C6F170F6D03
+7C6D91C7FCEF787F6F5F6D4B6C6C131E816D02016E5BEFE01F03F8177C027F01036E1378
+4D7E03FCEE80F8023F49486C5C15FE021F010FEDC1E04D7E03FF16C36E49EDE3C0041E7F
+049E15F76E01BC6D5C04FC15FF6E95C8FC4C80A26E5F4C143F6E5F4C141FA2037F5E4C14
+0FA26F486E5AA2031F5E93C812036F5E5E3A7EB863>87 D<EB3FFE0003B512E0000F14F8
+391FF00FFE003FEB03FF6D6C7F6E7FA26F7EA26C5A6C5AEA0380C8FCA2EC3FFF010FB5FC
+137F3901FFF87F00071380380FFE00EA3FF85B485A12FF5BA415FF6D5A127F263FF00713
+F83B1FFC1FBFFFC0390FFFFE1F0003EBF80F39003FE0032A257DA42E>97
+D<903801FFC0010F13FC017F13FFD9FF8013802603FE0013C048485AEA0FF8121F13F012
+3F6E13804848EB7F00151C92C7FC12FFA9127FA27F123FED01E06C7E15036C6CEB07C06C
+6C14806C6C131FC69038C07E006DB45A010F13F00101138023257DA42A>99
+D<EE7F80ED7FFFA4150381AF903801FF81010F13F1013F13FD9038FFC07F0003EB001FD8
+07FC1307000F8048487F5B123FA2485AA312FFAA127FA27F123FA26C6C5B000F5C6C6C5B
+6C6C4913C02701FF80FD13FE39007FFFF9011F13E1010313012F3A7DB935>I<903803FF
+80011F13F0017F13FC3901FF83FE3A03FE007F804848133F484814C0001FEC1FE05B003F
+EC0FF0A2485A16F8150712FFA290B6FCA301E0C8FCA4127FA36C7E1678121F6C6C14F86D
+14F000071403D801FFEB0FE06C9038C07FC06DB51200010F13FC010113E025257DA42C>
+I<EC1FF0903801FFFC010713FF90391FF87F8090383FE0FFD9FFC113C0A2481381A24813
+016E1380A2ED3E0092C7FCA8B6FCA4000390C8FCB3ABB512FEA4223A7DB91D>I<161FD9
+07FEEBFFC090387FFFE348B6EAEFE02607FE07138F260FF801131F48486C138F003F15CF
+4990387FC7C0EEC000007F81A6003F5DA26D13FF001F5D6C6C4890C7FC3907FE07FE48B5
+12F86D13E0261E07FEC8FC90CAFCA2123E123F7F6C7E90B512F8EDFF8016E06C15F86C81
+6C815A001F81393FC0000F48C8138048157F5A163FA36C157F6C16006D5C6C6C495AD81F
+F0EB07FCD807FEEB3FF00001B612C06C6C91C7FC010713F02B377DA530>I<13FFB5FCA4
+12077EAFED7FC0913803FFF8020F13FE91381F03FFDA3C01138014784A7E4A14C05CA25C
+A291C7FCB3A3B5D8FC3F13FFA4303A7DB935>I<EA01F0EA07FC487EA2487EA56C5AA26C
+5AEA01F0C8FCA913FF127FA412077EB3A9B512F8A4153B7DBA1B>I<13FFB5FCA412077E
+AF92380FFFE0A4923803FC0016F0ED0FE0ED1F804BC7FC157E5DEC03F8EC07E04A5A141F
+EC7FE04A7E8181A2ECCFFEEC0FFF496C7F806E7F6E7F82157F6F7E6F7E82150F82B5D8F8
+3F13F8A42D3A7EB932>107 D<13FFB5FCA412077EB3B3ACB512FCA4163A7DB91B>I<01FE
+D97FE0EB0FFC00FF902601FFFC90383FFF80020701FF90B512E0DA1F81903983F03FF0DA
+3C00903887801F000749DACF007F00034914DE6D48D97FFC6D7E4A5CA24A5CA291C75BB3
+A3B5D8FC1FB50083B512F0A44C257DA451>I<01FEEB7FC000FF903803FFF8020F13FE91
+381F03FFDA3C011380000713780003497E6D4814C05CA25CA291C7FCB3A3B5D8FC3F13FF
+A430257DA435>I<903801FFC0010F13F8017F13FFD9FF807F3A03FE003FE048486D7E48
+486D7E48486D7EA2003F81491303007F81A300FF1680A9007F1600A3003F5D6D1307001F
+5DA26C6C495A6C6C495A6C6C495A6C6C6CB45A6C6CB5C7FC011F13FC010113C029257DA4
+30>I<9039FF01FF80B5000F13F0023F13FC9138FE07FFDAF00113800003496C13C00280
+EB7FE091C713F0EE3FF8A2EE1FFCA3EE0FFEAA17FC161FA217F8163F17F06E137F6E14E0
+6EEBFFC0DAF00313809139FC07FE0091383FFFF8020F13E0020390C7FC91C9FCACB512FC
+A42F357EA435>I<9038FE03F000FFEB0FFEEC3FFF91387C7F809138F8FFC000075B6C6C
+5A5CA29138807F80ED3F00150C92C7FC91C8FCB3A2B512FEA422257EA427>114
+D<90383FF0383903FFFEF8000F13FF381FC00F383F0003007E1301007C130012FC15787E
+7E6D130013FCEBFFE06C13FCECFF806C14C06C14F06C14F81203C614FC131F9038007FFE
+140700F0130114007E157E7E157C6C14FC6C14F8EB80019038F007F090B512C000F81400
+38E01FF81F257DA426>I<130FA55BA45BA25B5BA25A1207001FEBFFE0B6FCA3000390C7
+FCB21578A815F86CEB80F014816CEBC3E090383FFFC06D1380903803FE001D357EB425>
+I<01FFEC3FC0B5EB3FFFA4000714016C80B3A35DA25DA26C5C6E4813E06CD9C03E13FF90
+387FFFFC011F13F00103138030257DA435>I<B539F01FFFF0A4000390398003F8006C01
+C013E06C1407D97FE05B6D6C485A6E48C7FC90381FFC3E010F5B903807FEFC6D6C5A5D6D
+5B6D5B6E7E6E7E814A7EA24A7E903801F3FFD903E37FD907C17FEB0FC049486C7E4A6C7E
+013E80496D7E49130F00016E7EB590383FFFF8A42D257EA432>120
+D E /Fd 3 15 df<007FB81280B912C0A26C17803204799641>0
+D<0060150600F8150F6C151F007E153F6C157E6C6C14FC6C6CEB01F86C6CEB03F06C6CEB
+07E06C6CEB0FC06C6CEB1F80017EEB3F006D137E6D6C5A90380FC1F8903807E3F0903803
+F7E06DB45A6D5B6EC7FCA24A7E497F903803F7E0903807E3F090380FC1F890381F80FC90
+383F007E017E7F49EB1F804848EB0FC04848EB07E04848EB03F04848EB01F84848EB00FC
+48C8127E007E153F48151F48150F00601506282874A841>2 D<EB0FE0EB7FFC497E0003
+EBFF803907F83FC0390FC007E0391F8003F0393F0001F8003E130048147CA20078143C00
+F8143EA248141EA46C143EA20078143C007C147CA26C14F8003F1301391F8003F0390FC0
+07E03907F83FC06CB51280C6EBFE006D5AEB0FE01F207BA42A>14
+D E /Fe 1 59 df<121C127FEAFF80A5EA7F00121C0909798817>58
+D E /Ff 59 122 df<DA0FF813FC91397FFF07FF903B01F807DF83C0903A07E001FF0F90
+3B1F8007FE1FE090393F000FFC137E16F85B9338F007804848010790C7FC1503ACB812F8
+A32801F80003F0C7FCB3AB486C497E267FFFE0B512F0A3333B7FBA30>11
+D<EC0FF8EC7FFE903901F80780903907E001C090391F8000E090383F0007017E497EA25B
+A2485A6F5AED018092C8FCA9ED03F0B7FCA33901F8000F1503B3AA486C497E267FFFE0B5
+12C0A32A3B7FBA2E>I<141FEC7FC0903801F0E0903803C0600107137090380F80309038
+1F00381518A25BA2133E133F15381530A215705D5D140190381F838092CAFC1487148E02
+DC49B51280EB0FF85C4A9039003FF8000107ED0FC06E5D71C7FC6E140E010F150CD91DFC
+141C01391518D970FE143801E015302601C07F1470D803805D00076D6C5BD80F00EBC001
+48011F5C4890380FE003003E6E48C8FC007E903807F8060203130E00FE6E5A6E6C5A1400
+ED7F706C4B13036F5A6F7E6C6C6D6C5B7013066C6C496C130E6DD979FE5B281FF001F07F
+133C3C07F80FE03FC0F86CB539800FFFF0C69026FE000313C0D91FF0D9007FC7FC393E7D
+BB41>38 D<146014E0EB01C0EB0380EB0700130E131E5B5BA25B485AA2485AA212075B12
+0F90C7FCA25A121EA2123EA35AA65AB2127CA67EA3121EA2121F7EA27F12077F1203A26C
+7EA26C7E1378A27F7F130E7FEB0380EB01C0EB00E01460135278BD20>40
+D<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378A2137C133C133E131EA2131F7F
+A21480A3EB07C0A6EB03E0B2EB07C0A6EB0F80A31400A25B131EA2133E133C137C1378A2
+5BA2485A485AA2485A48C7FC120E5A5A5A5A5A13527CBD20>I<121C127FEAFF80A213C0
+A3127F121C1200A412011380A2120313005A1206120E5A5A5A12600A19798817>44
+D<121C127FEAFF80A5EA7F00121C0909798817>46 D<EB03F8EB1FFF90387E0FC09038F8
+03E03901E000F0484813780007147C48487FA248C77EA2481580A3007EEC0FC0A600FE15
+E0B3007E15C0A4007F141F6C1580A36C15006D5B000F143EA26C6C5B6C6C5B6C6C485A6C
+6C485A90387E0FC0D91FFFC7FCEB03F8233A7DB72A>48 D<EB01C013031307131F13FFB5
+FCA2131F1200B3B3A8497E007FB512F0A31C3879B72A>I<EB0FF0EB7FFE48B57E3903E0
+3FE0390F000FF0000E6D7E486D7E486D7E123000706D7E126012FCB4EC7F807FA56CC7FC
+121CC8FCEDFF00A34A5A5D14035D4A5A5D140F4A5A4A5A92C7FC147C5C495A495A495A49
+5A91C8FC011EEB01805B5B49130348481400485A485A000EC75A000FB6FC5A5A485CB6FC
+A321387CB72A>I<EB07F8EB3FFF4913C03901F80FF03903C007F848486C7E380E000100
+0F80381FE0006D7FA56C5A6C5AC85A1401A25D4A5AA24A5A5DEC0F80027EC7FCEB1FFCEC
+FF809038000FE06E7EEC01FC816E7EED7F80A216C0A2153F16E0A2121EEA7F80487EA416
+C049137F007F1580007EC7FC0070ECFF006C495A121E390F8003F83907F00FF00001B512
+C06C6C90C7FCEB0FF8233A7DB72A>I<1538A2157815F8A2140114031407A2140F141F14
+1B14331473146314C313011483EB030313071306130C131C131813301370136013C01201
+EA038013005A120E120C5A123812305A12E0B712F8A3C73803F800AB4A7E0103B512F8A3
+25397EB82A>I<0006140CD80780133C9038F003F890B5FC5D5D158092C7FC14FC38067F
+E090C9FCABEB07F8EB3FFE9038780F803907E007E090388003F0496C7E12066E7EC87EA2
+8181A21680A4123E127F487EA490C71300485C12E000605C12700030495A00385C6C1303
+001E495A6C6C485A3907E03F800001B5C7FC38007FFCEB1FE0213A7CB72A>I<EC3FC090
+3801FFF0010713FC90380FE03E90383F800790387E001F49EB3F804848137F485AA2485A
+000FEC3F0049131E001F91C7FCA2485AA3127F90C9FCEB01FC903807FF8039FF1E07E090
+383801F0496C7E01607F01E0137E497FA249148016C0151FA290C713E0A57EA56C7E16C0
+A2121FED3F807F000F15006C6C5B15FE6C6C5B6C6C485A3900FE07F090383FFFC06D90C7
+FCEB03FC233A7DB72A>I<12301238123E003FB612E0A316C05A168016000070C7120600
+60140E5D151800E01438485C5D5DC712014A5A92C7FC5C140E140C141C5CA25CA214F049
+5AA21303A25C1307A2130FA3495AA3133FA5137FA96DC8FC131E233B7BB82A>I<EB03F8
+EB1FFF017F13C09038FC07F03901E001F848486C7E4848137C90C77E48141E000E141F00
+1E80A3121FA27F5D01E0131E6C6C133E01FC133C6D5B6C6C6C5AECC1E06CEBF3C06C01FF
+C7FC6C5BEB3FFF6D13C081017F13F801F07F3903E07FFE3907801FFF48486C1380481303
+003E6D13C0003CEB007F007C143F0078EC0FE000F814075A1503A21501A36C15C0127815
+03007C15806CEC07006C5C6C6C131ED807E0137C3903F803F0C6B55A013F1380D907FCC7
+FC233A7DB72A>I<EB03F8EB1FFF017F13C09038FC07E03903F803F048486C7E48486C7E
+49137E121F48487FA2007F158090C7FCA248EC1FC0A616E0A56C143FA27F123F001F147F
+A26C6C13FF6C6C13DF000313013901F0039F3900FC0F1FD93FFC13C0EB07F090C7FC153F
+1680A316005D000F147E487E486C5BA24A5A4A5A49485A6C48485A001C495A260F807FC7
+FC3807FFFC000113F038003FC0233A7DB72A>I<B712E016FC16FF0001903980007FC06C
+90C7EA1FE0707E707E707EA2707EA283A75F16035F4C5A4C5A4C5A4C5AEEFF8091B500FC
+C7FCA291C7EA7F80EE1FE0EE07F0707E707E83707EA21880177F18C0A7188017FFA24C13
+005F16034C5AEE1FF8486DEB7FF0B812C094C7FC16F832397DB83B>66
+D<913A01FF800180020FEBE003027F13F8903A01FF807E07903A03FC000F0FD90FF0EB03
+9F4948EB01DFD93F80EB00FF49C8127F01FE153F12014848151F4848150FA248481507A2
+485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180A3123F7F001F160318006C
+7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD91FE05C6D6CEB03C0D903FC
+EB0F80902701FF803FC7FC9039007FFFFC020F13F002011380313D7BBA3C>I<B712C016
+F816FE000190398001FF806C90C7EA3FE0EE0FF0EE03F8707E707E177FA2EF3F8018C017
+1F18E0170F18F0A3EF07F8A418FCAC18F8A4EF0FF0A218E0A2171F18C0EF3F80A2EF7F00
+17FE4C5A4C5AEE0FF0EE3FE0486DEBFF80B8C7FC16F816C036397DB83F>I<B812FCA300
+01903880000F6C90C71201EE007E173E171E170EA31706A317078316C0A394C7FCA31501
+A21503150F91B5FCA3EC000F15031501A21500A21860A318E093C712C0A41701A3EF0380
+A21707A2170F173F177F486D903807FF00B9FCA333397DB839>I<B812F8A30001903880
+001F6C90C71201EE00FC177C173C171CA2170CA4170E1706A2ED0180A21700A41503A215
+07151F91B5FCA3EC001F15071503A21501A692C8FCAD4813C0B612C0A32F397DB836>I<
+DBFF8013C0020FEBF001023F13FC9139FF803F03903A03FC000787D90FF0EB03CF4948EB
+00EF4948147F4948143F49C8121F485A4848150F48481507A248481503A2485A1701123F
+5B007F1600A448481600AB93B6FCA26C7E9338007FE0EF3FC0A2123F7F121FA26C7EA26C
+7EA26C7E6C7E6C6C157F6D7E6D6C14FF6D6C14EFD90FF8EB03C7D903FEEB0783903A00FF
+C03F0191393FFFFC00020F01F0130002001380383D7CBA41>I<013FB512E0A39039001F
+FC00EC07F8B3B3A3123FEA7F80EAFFC0A44A5A1380D87F005B0070131F6C5C6C495A6C49
+C7FC380781FC3801FFF038007F80233B7DB82B>74 D<B612E0A3000101C0C8FC6C90C9FC
+B3AD1718A517381730A31770A317F0A216011603160FEE1FE0486D13FFB8FCA32D397DB8
+34>76 D<B5933807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F015
+63A3D9C3F815C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318
+A26E6C1330A36E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F
+8CA2ED1FD8A3ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED018045
+397DB84C>I<B5913807FFFE8080C69238007FE06EEC1F80D9DFF0EC0F001706EBCFF8EB
+C7FCA2EBC3FEEBC1FFA201C07F6E7EA26E7E6E7E81140F6E7E8114036E7E168080ED7FC0
+16E0153FED1FF0ED0FF8A2ED07FCED03FEA2ED01FF6F1386A2EE7FC6EE3FE6A2EE1FF6EE
+0FFEA216071603A216011600A2177E486C153E487ED80FFC151EB500C0140EA217063739
+7DB83E>I<EC03FF021F13E09138FE01FC903901F8007ED907E0EB1F8049486D7ED93F80
+EB07F049C76C7E01FE6E7E48486E7E49157E0003167F4848ED3F80A24848ED1FC0A2001F
+17E049150F003F17F0A3007F17F8491507A300FF17FCAC007F17F86D150FA3003F17F0A2
+6C6CED1FE0A36C6CED3FC0000717806D157F000317006C6C15FEA26C6C4A5A017F4A5A6D
+6C495A6D6C495AD907E0EB1F80D903F8017FC7FC903900FE01FC91381FFFE0020390C8FC
+363D7BBA41>I<B712C016F816FE000190398001FF806C90C7EA3FC0EE0FE0EE07F0EE03
+F817FC17FE1601A217FFA717FEA2EE03FCA2EE07F817F0EE0FE0EE3FC0923801FF0091B5
+12FC16F091C9FCB3A5487FB6FCA330397DB839>I<EC03FF021F13E09138FE01FC903901
+F8007ED907E0EB1F8049486D7ED93F80EB07F049C76C7E01FE6E7E48486E7EA24848157F
+0007178049153F000F17C049151F001F17E0A24848ED0FF0A3007F17F8A2491507A200FF
+17FCAC007F17F8A26D150FA2003F17F0A26C6CED1FE0A36C6CED3FC00007027C14804AB4
+FC3C03F80383807F003B01FC0701C0FEEC0E002600FE0CEBE1FC017FEC63F8D93F8CEB77
+F0D91FCCEB3FE0D907EE14806DB449C7FC0100D981FC130CEC1FFF0203131C91C7001E13
+1C161F183CEF807CEFC0F8EE0FFFA318F08218E07013C07013809338007E00364B7BBA41
+>I<B612FEEDFFE016F8000190388007FE6C90C76C7EEE3FC0707E707E707EA2707EA283
+A65FA24C5AA24C5A4C5AEE3F8004FFC8FCED07FC91B512E05E9138000FF0ED03F8ED00FE
+82707E707EA2161F83A583A6F00180A217F8160F1803486D01071400B66D6C5A04011306
+933800FE0ECAEA3FFCEF07F0393B7DB83D>I<D90FF813C090383FFE0190B512813903F8
+07E33907E000F74848137F4848133F48C7121F003E140F007E1407A2007C140312FC1501
+A36C1400A37E6D14006C7E7F13F86CB47E6C13F8ECFF806C14E06C14F86C14FEC680013F
+1480010714C0EB007F020713E0EC007FED3FF0151F150FED07F8A200C01403A21501A37E
+A216F07E15036C15E06C14076C15C06C140F6DEB1F80D8FBF0EB3F00D8F0FE13FE39E03F
+FFF8010F13E0D8C00190C7FC253D7CBA2E>I<003FB812E0A3D9C003EB001F273E0001FE
+130348EE01F00078160000701770A300601730A400E01738481718A4C71600B3B0913807
+FF80011FB612E0A335397DB83C>I<B500FC91387FFF80A30003018091380FFC006C90C8
+EA07E0715A6C705A6E1403017F93C7FCA280013F1506A26E140E011F150C80010F5DA280
+01075DA26E147001031560A26D6C5CA2806D4A5AA2ED8003027F91C8FCA291383FC006A2
+15E0021F5BA2EDF01C020F1318A26E6C5AA215FC02035BA2EDFEE002015BA26E6C5AA36F
+C9FCA3153EA2151CA3393B7EB83E>86 D<B500FE91383FFFE0A3000301E0913807FE00C6
+49EC03F0017F6F5A606D6C5D6D6C140395C7FC6D6C1406A26D6C5C6D6C141C17186D6C14
+3817306D6D5B6E6C13E05F91383FE0015F91381FF003DA0FF890C8FC1606913807FC0E16
+0C913803FE1C913801FF185E6E13B016E0157F6F5AB3A24B7E023FB512C0A33B397FB83E
+>89 D<EB1FE0EBFFFC3803E03F3907000F80390F8007E0486C6C7E13E06E7EA26E7E6C5A
+6C5AC8FCA4147FEB07FFEB3FE0EBFE00EA03F8EA0FF0EA1FC0123F485A90C7FC160C12FE
+A31401A26C13036CEB077C903980063E18383FC01E3A0FE0781FF03A03FFF00FE03A007F
+8007C026277DA52A>97 D<EA03F012FFA3120F1203B0EC1FE0EC7FF89038F1E03E9039F3
+801F809039F7000FC001FEEB07E049EB03F049EB01F85BED00FCA216FEA2167E167FAA16
+7E16FEA216FC15016D14F8ED03F07F01EEEB07E001C6EB0FC09039C7801F00903881E07E
+903800FFF8C7EA1FC0283B7EB92E>I<EB03FC90381FFF8090387E03E03901F800704848
+13F83907E001FC380FC003A2EA1F80123F90380001F848EB00F01500A2127E12FEAA127E
+127FA26C14067F001F140E6D130C000F141C6C6C13386C6C13706C6C13E039007C07C090
+381FFF00EB07F81F277DA525>I<ED0FC0EC03FFA3EC003F150FB0EB03F8EB1FFF90387E
+078F9038F801EF3903F0007F4848133F4848131FA24848130F123F90C7FC5AA2127E12FE
+AA127E127FA27EA26C6C131FA26C6C133F6C6C137F6C6CEBEFF03A01F801CFFF39007C07
+8F90381FFE0FD907F813C0283B7DB92E>I<EB07F8EB1FFF90387C0FC03901F803E03903
+F001F0D807E013F8380FC0004848137CA248C7127E153E5A153F127E12FEA3B7FCA248C8
+FCA5127EA2127FA26C14037F001F14076C6C13060007140E6D131CD801F013386C6C1370
+90387E03E090381FFF80903803FC0020277EA525>I<147E903803FF8090380FC1E0EB1F
+8790383F0FF0137EA213FCA23901F803C091C7FCADB512FCA3D801F8C7FCB3AB487E387F
+FFF8A31C3B7FBA19>I<ED03F090390FF00FF890393FFC3C3C9039F81F707C3901F00FE0
+3903E007C03A07C003E010000FECF000A248486C7EA86C6C485AA200075C6C6C485A6D48
+5A6D48C7FC38073FFC38060FF0000EC9FCA4120FA213C06CB512C015F86C14FE6CECFF80
+4815C03A0F80007FE048C7EA0FF0003E140348140116F8481400A56C1401007C15F06CEC
+03E0003F1407D80F80EB0F80D807E0EB3F003901FC01FC39007FFFF0010790C7FC26387E
+A52A>I<EA03F012FFA3120F1203B0EC0FF0EC3FFCECF03F9039F1C01F809039F3800FC0
+EBF70013FE496D7EA25BA35BB3A3486C497EB500C1B51280A3293A7EB92E>I<EA0380EA
+0FE0487EA56C5AEA0380C8FCAAEA03F012FFA312071203B3AA487EB512C0A312387EB717
+>I<EB01C0EB07F0EB0FF8A5EB07F0EB01C090C7FCAAEB01F813FFA313071301B3B3A212
+3C127E00FF13F01303A214E038FE07C0127C383C0F00EA0FFEEA03F8154984B719>I<EA
+03F012FFA3120F1203B1913801FFFCA39138007FC01600157C15705D4A5A4A5A4AC7FC14
+1E1438147814FC13F1EBF3FEEBF73F01FE7FEBF81F496C7E8114076E7E6E7E811400157E
+157F811680ED1FC0486CEB3FF0B500C0B5FCA3283A7EB92C>I<EA03F012FFA3120F1203
+B3B3AD487EB512C0A3123A7EB917>I<2703F00FF0EB1FE000FFD93FFCEB7FF8913AF03F
+01E07E903BF1C01F83803F3D0FF3800FC7001F802603F70013CE01FE14DC49D907F8EB0F
+C0A2495CA3495CB3A3486C496CEB1FE0B500C1B50083B5FCA340257EA445>I<3903F00F
+F000FFEB3FFCECF03F9039F1C01F803A0FF3800FC03803F70013FE496D7EA25BA35BB3A3
+486C497EB500C1B51280A329257EA42E>I<EB03FE90380FFF8090383E03E09038F800F8
+4848137C48487F48487F4848EB0F80001F15C090C712074815E0A2007EEC03F0A400FE15
+F8A9007E15F0A2007F14076C15E0A26C6CEB0FC0000F15806D131F6C6CEB3F006C6C137E
+C66C13F890387E03F090381FFFC0D903FEC7FC25277EA52A>I<3903F01FE000FFEB7FF8
+9038F1E07E9039F3801F803A07F7000FC0D803FEEB07E049EB03F04914F849130116FC15
+0016FEA3167FAA16FEA3ED01FCA26DEB03F816F06D13076DEB0FE001F614C09039F7803F
+009038F1E07E9038F0FFF8EC1FC091C8FCAB487EB512C0A328357EA42E>I<3807E01F00
+FFEB7FC09038E1E3E09038E387F0380FE707EA03E613EE9038EC03E09038FC0080491300
+A45BB3A2487EB512F0A31C257EA421>114 D<EBFF03000313E7380F80FF381E003F487F
+487F00707F12F0A2807EA27EB490C7FCEA7FE013FF6C13E06C13F86C7F00037FC67F0107
+1380EB007F141F00C0EB0FC01407A26C1303A37E15806C13077EEC0F00B4131E38F3C07C
+38E1FFF038C03F801A277DA521>I<1318A51338A31378A313F8120112031207001FB5FC
+B6FCA2D801F8C7FCB215C0A93800FC011580EB7C03017E13006D5AEB0FFEEB01F81A347F
+B220>I<D803F0EB07E000FFEB01FFA3000FEB001F00031407B3A4150FA3151F12016D13
+3F0000EC77F86D9038E7FF8090383F03C790381FFF87903A03FC07E00029267EA42E>I<
+B538803FFEA33A0FF8000FF06C48EB07E00003EC03C06D148000011500A26C6C1306A26D
+130E017E130CA26D5BA2EC8038011F1330A26D6C5AA214E001075BA2903803F180A3D901
+FBC7FCA214FF6D5AA2147CA31438A227257EA32C>I<B53A1FFFE03FFEA3260FF8009038
+000FF86C48017EEB03E018C00003023EEB0180A26C6C013FEB0300A36C6CEC8006156FA2
+017E9038EFC00C15C7A2D93F016D5A15830281EBF038D91F831430150102C3EBF8709026
+0FC6001360A2D907E66D5A02EC137CA2D903FCEB7F804A133FA2010192C7FC4A7FA20100
+141E4A130E0260130C37257EA33C>I<B538807FFFA33A03FE003FF00001EC1F80000092
+C7FC017E131C6D13186D6C5AECC070010F5B6D6C5AECF180EB03FB6DB4C8FC6D5AA2147F
+804A7E8114CF903801C7E090380383F090380703F8EB0601496C7E011C137E49137F0178
+7F496D7E486C80000FEC3FF0D8FFFE90B51280A329247FA32C>I<B538803FFEA33A0FF8
+000FF06C48EB07C00003EC03806C7E16007F00001406A2017E5BA2137F6D5BA26D6C5AA2
+ECC070010F1360A26D6C5AA214F101035BA2D901FBC7FCA214FF6D5AA2147CA31438A214
+30A214701460A25CA2EA7C0100FE5B130391C8FC1306EAFC0EEA701C6C5AEA1FF0EA0FC0
+27357EA32C>I E /Fg 14 117 df<EA07C0EA1FF0EA3FF8EA7FFC12FF13FEA213FFA47E
+7E7EEA07CFEA000FA2131F131EA2133EA2133C137C13F8A2EA01F0120313E0EA07C0EA1F
+801300121E120C1022788E1F>44 D<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3F
+F8EA1FF0EA07C00F0F788E1F>46 D<EC03C01407141F147FEB03FF133FB6FCA413C3EA00
+03B3B3ADB712FCA5264177C038>49 D<ECFFE0010F13FE013F6D7E90B612E0000315F826
+07FC0313FE3A0FE0007FFFD81F806D138048C7000F13C0488001C015E001F07F00FF6E13
+F07F17F881A46C5A6C5A6C5AC9FC17F05DA217E05D17C04B13804B1300A2ED1FFC4B5A5E
+4B5A4B5A4A90C7FC4A5A4A5AEC0FF04A5AEC3F804AC7127814FE495A494814F8D907E014
+F0495A495A49C8FC017C140149140348B7FC4816E05A5A5A5A5AB8FC17C0A42D417BC038
+>I<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F0714
+3E147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A485A120F
+5B48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038>52
+D<EC7FF0903807FFFE011F6D7E017F14E09039FFE03FF0489038800FF848496C7E484880
+48486D7E001F80003F1680A2484815C08117E0A212FF17F0A617F8A45D127FA3003F5CA2
+6C7E5D6C6C5B12076C6C131E6CEBC07C6CEBFFF8013F5B010F01C013F00101130090C8FC
+A217E05DA2EA03C0D80FF015C0487E486C491380A217004B5A150F5E49495A6C48495A01
+C0EBFFE0260FF0035B6CB65A6C4AC7FC6C14F86C6C13E0D907FEC8FC2D427BC038>57
+D<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3FF8EA1FF0EA07C0C7FCAEEA07C0EA
+1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3FF8EA1FF0EA07C00F2C78AB1F>I<B9FC18F018
+FE727E19E026003FFEC7001F13F805017F9438003FFF060F7F727F727F727F84737E737E
+A2737EA2737EA21B80A2851BC0A51BE0AD1BC0A51B8061A21B006162193F624F5A19FF62
+4E5B06075B4E5B063F90C7FC4DB45A050F13F8BA5A19C04EC8FC18F095C9FC4B447CC356
+>68 D<B600FE017FB691B512FEA526007FFCC8D83FFEC9EA7C006E82013F701778807415
+F86D705F6F7014016D705FA26F7014036D64814E6D14076D646F70140F6D041E94C7FCA2
+6F023E6D5C6DDC3C7F151E81027F037C6D5CF0783F6F70147C023F4B6C1578A26F01016F
+13F86E4B6C5D16806E02036F485A4E7E04C0EEE0036E4A486C5DA2DCE00FEDF0076E4B6C
+5D16F06E4A6F48C8FC051E7F04F8705A6E4A027F131EA2DCFC7CEDFE3E037F0178023F13
+3C04FE16FF033F01F85E4D8004FF17F86F496E5BA36F496E5BA26F604D80A26F90C86C5B
+A36F486F90C9FCA26F48167EA30478163C6F457EC374>87 D<903801FFE0011F13FE017F
+6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7EA26F7FA36F7F6C5A6C5AEA00
+F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC01000313E0000F1380381FFE0048
+5A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013EEBFFC03A1FFF80FC7F0007EB
+FFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 D<EC3FFC49B512C0010F14F001
+3F14FC90397FF003FE9039FFC001FF0003495A48494813805B120F485AA2485A6F130000
+7F6E5AED00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C1407000F16806D140F6C
+6DEB1F006C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7FC9038003FF82A
+2F7CAD32>99 D<EE03FEED07FFA5ED001F160FB1EC3FE0903803FFFC010FEBFF8F013F14
+CF9039FFF807FF48EBC00148903880007F4890C7123F4848141F49140F121F485AA3127F
+5BA212FFAC127FA37F123FA26C6C141FA26C6C143F0007157F6C6C91B5FC6CD9C00314FC
+6C9038F01FEF6DB5128F011FEBFE0F010713F89026007FC0EBF80036467CC43E>I<EC3F
+F80103B57E010F14E0013F8090397FF83FF89039FFC007FC48496C7E48496C7E48486D13
+80485A001FED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401F0C9FCA5127F
+A27FA2123F17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C01F0EB3F0090
+397FFE01FE011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33>I<EB01E0A513
+03A41307A2130FA2131FA2133F137F13FF1203000F90B51280B7FCA4C601E0C7FCB3A3ED
+01E0A9150302F013C0137F150790393FF80F8090391FFC1F006DB5FC6D13FC01015B9038
+003FE023407EBE2C>116 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+%%PaperSize: a4
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 330 390 a Fg(Date:)50 b(W)-9 b(ed.,)38 b(Dec.)49
+b(21,)38 b(1994)1413 b Ff(k)n(cal)1347 526 y(T)-7 b(ennis,)27
+b(30)g(mins)17 b Fe(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g
+(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)j
+Fd(\000)p Ff(159.9)p 330 643 2865 3 v 366 761 a(\(a\))64
+b(VitaminSalad,)28 b(3)f(pieces)19 b Fe(:)14 b(:)f(:)h(:)g(:)g(:)g(:)g
+(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)
+g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h
+(:)g(:)47 b Ff(70.0)366 860 y(\(a\))64 b(CalorieMate,)26
+b(4)i(pieces)23 b Fe(:)14 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f
+(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)
+g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)51
+b Ff(400.0)364 960 y(\(n\))62 b(Co\013ee,)28 b(1)f(cup)15
+b Fe(:)f(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)
+g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g
+(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)
+h(:)g(:)g(:)42 b Ff(0.0)p 330 1042 V 330 1159 a Fc(Breakfast)1065
+b Ff(total)8 b Fe(:)14 b(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)
+f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)8
+b Ff(470.0)p 330 1277 V 366 1394 a(\(o\))64 b(Curry)27
+b(\(Quixote\),)h(1)f(dish)20 b Fe(:)14 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)
+g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
+(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)48
+b Ff(50.0)366 1494 y(\(a\))2568 b(70.0)366 1593 y(\(g\))g(40.0)376
+1693 y(\(i\))2577 b(20.0)376 1793 y(\(l\))g(50.0)366
+1892 y(\(a\))64 b(Rice,)28 b(200)e(grams)12 b Fe(:)h(:)h(:)g(:)g(:)g(:)
+g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
+(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)
+g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)40 b Ff(200.0)364
+1992 y(\(h\))62 b(Cabbage,)27 b(30)f(grams)15 b Fe(:)e(:)h(:)g(:)g(:)g
+(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)
+g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g
+(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)43 b Ff(3.0)366 2091
+y(\(o\))64 b(Scallop,)27 b(50)g(grams)21 b Fe(:)14 b(:)g(:)g(:)f(:)h(:)
+g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f
+(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)
+g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)50 b Ff(55.5)376 2191
+y(\(l\))73 b(F)-7 b(ried,)28 b(20)f(cm)990 2161 y Fb(3)1027
+2191 y Ff(s)d Fe(:)13 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g
+(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)
+f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g
+(:)g(:)f(:)h(:)52 b Ff(40.0)364 2291 y(\(n\))62 b(Co\013ee,)28
+b(1)f(cup)15 b Fe(:)f(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h
+(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)
+g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
+(:)g(:)g(:)f(:)h(:)g(:)g(:)42 b Ff(0.0)p 330 2372 V 330
+2490 a Fc(Lunc)m(h)1136 b Ff(total)25 b Fe(:)14 b(:)g(:)g(:)f(:)h(:)g
+(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)
+h(:)g(:)g(:)g(:)g(:)25 b Ff(528.5)1423 2590 y(Jog,)i(20)g(mins)19
+b Fe(:)13 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
+(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)k
+Fd(\000)p Ff(80.0)p 330 2707 V 366 2825 a(\(a\))64 b(Sushi)28
+b(rice,)f(20)g(pieces)13 b Fe(:)g(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f
+(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)
+g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g
+(:)40 b Ff(800.0)369 2924 y(\(c\))66 b(Ra)n(w)27 b(\014sh,)h(20)f
+(pieces)13 b Fe(:)h(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f
+(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)
+g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)41
+b Ff(300.0)376 3024 y(\(l\))73 b(Vinegar,)27 b(20)g(mls)21
+b Fe(:)14 b(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g
+(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)
+h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g
+(:)48 b Ff(0.0)364 3123 y(\(d\))62 b(Egg,)27 b(.3)g(pieces)19
+b Fe(:)14 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h
+(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)
+g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
+(:)g(:)47 b Ff(24.0)364 3223 y(\(d\))62 b(Quail,)27 b(1)h(piece)18
+b Fe(:)13 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
+(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)
+g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h
+(:)g(:)46 b Ff(18.0)371 3323 y(\(f)6 b(\))70 b(Nattoh,)28
+b(10)f(grams)22 b Fe(:)14 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f
+(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)
+g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g
+(:)g(:)51 b Ff(20.0)374 3422 y(\(j\))73 b(La)n(v)n(er,)26
+b(5)h(sheets)18 b Fe(:)c(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)
+g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g
+(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)
+g(:)g(:)g(:)g(:)g(:)45 b Ff(0.0)p 330 3504 V 330 3622
+a Fc(Supp)s(er)1093 b Ff(total)23 b Fe(:)13 b(:)h(:)g(:)g(:)g(:)g(:)g
+(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)
+g(:)g(:)g(:)23 b Ff(1162.0)p 330 3739 V 369 3857 a(\(e\))66
+b(Y)-7 b(ogurt,)27 b(60)g(grams)8 b Fe(:)13 b(:)h(:)g(:)f(:)h(:)g(:)g
+(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)
+h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g
+(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)36 b Ff(36.0)364 3956
+y(\(n\))62 b(Beer,)27 b(700)f(mls)18 b Fe(:)d(:)e(:)h(:)g(:)g(:)g(:)g
+(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)
+g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h
+(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)46 b Ff(280.0)p
+330 4038 V 330 4155 a Fc(Nigh)m(t)31 b(Snac)m(k)1009
+b Ff(total)17 b Fe(:)d(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g
+(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)j
+Ff(316.0)p 330 4237 V 330 4355 a Fc(Items)1226 4454 y
+Ff(\(a\))69 b Fd(\016)32 b Ff(Cereals)1189 b(1540.0)1223
+4554 y(\(b\))56 b Fd(\002)21 b Ff(Meats)1359 b(0.0)1228
+4654 y(\(c\))72 b Fd(\016)32 b Ff(Seafo)r(o)r(ds)1179
+b(300.0)1223 4753 y(\(d\))68 b Fd(\016)32 b Ff(Eggs)1363
+b(42.0)1228 4853 y(\(e\))72 b Fd(\016)32 b Ff(Dairy)27
+b(pro)r(ducts)988 b(36.0)1230 4952 y(\(f)6 b(\))76 b
+Fd(\016)32 b Ff(Beans)1320 b(20.0)1226 5052 y(\(g\))69
+b Fd(\016)32 b Ff(P)n(otato)r(es)1220 b(40.0)1223 5152
+y(\(h\))68 b Fd(\016)32 b Ff(Green)c(v)n(egetables)962
+b(3.0)1235 5251 y(\(i\))79 b Fd(\016)32 b Ff(Other)27
+b(v)n(egetables)926 b(20.0)1234 5351 y(\(j\))78 b Fd(\016)32
+b Ff(Dry)c(go)r(o)r(ds)1202 b(0.0)1224 5451 y(\(k\))57
+b Fd(\002)21 b Ff(F)-7 b(ruits)1365 b(0.0)1235 5550 y(\(l\))79
+b Fd(\016)32 b Ff(Oils)27 b(&)h(seasonings)896 b(90.0)1212
+5650 y(\(m\))44 b Fd(\002)21 b Ff(Confectioneries)1026
+b(0.0)1809 5919 y(1)p eop
+%%Page: 2 2
+2 1 bop 1223 390 a Ff(\(n\))68 b Fd(\016)32 b Ff(Drinks)1254
+b(280.0)1226 490 y(\(o\))69 b Fd(\016)32 b Ff(Miscellaneous)998
+b(105.5)p 330 572 2865 3 v 1519 689 a Fc(T)-8 b(otal)44
+b Fe(:)14 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
+(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)d
+Ff(2476.5)1514 789 y Fc(Limit)1214 b Ff(2439.9)p 330
+936 2921 4 v 330 1079 4 144 v 358 1038 a Fc(W)-8 b(arning)793
+b Fa(36.6)31 b Fc(k)m(cal)825 b(Exceeded!!)p 3247 1079
+V 330 1082 2921 4 v 1809 5919 a Ff(2)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/latex209/contrib/misc/calprog.sty b/macros/latex209/contrib/misc/calprog.sty
new file mode 100644
index 0000000000..424aca37ad
--- /dev/null
+++ b/macros/latex209/contrib/misc/calprog.sty
@@ -0,0 +1,102 @@
+%% Save file as: CALPROG.STY Source: FILESERV@SHSU.BITNET
+%% Author: Michael Barr <barr@triples.Math.McGill.CA>
+%% Original Source: Posted to INFO-TeX@SHSU.edu on Thu, 2 Jan 92 18:33:54 EST
+%
+%After seeing how complicated a calendar program can be, I was moved to
+%fix the one I had been using. Although I haven't tested it extensively,
+%I believe it gives the correct Gregorian dates from whenever the
+%Gregorian began (which is different in defferent countries and in Russia
+%was not until after 1917) until the year 4000 when a leap year is supposed
+%to be omitted. A better correction would have been to omit leap years
+%in all years divisible by 2000 and not by 6000, but this would have
+%required immediate agreement and I guess that seemed too difficult.
+%
+%Obviously, the top line has to be edited to give the desired year.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%% Start here %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\yearnum \yearnum=1992
+
+\documentstyle{article}
+\textwidth 7.05in \oddsidemargin-.255in
+\textheight=9in \headheight =0pt \topmargin=0pt\headsep=0pt
+\footheight=0pt\footskip=0pt
+\pagestyle{empty}\thispagestyle{empty}
+
+\newcount\febdays \febdays=28
+\newcount\yearnuma
+\newcount\yearnumb
+\newcount\firstdate \newcount \lastdate \newcount \datenum
+
+\def\month#1#2#3{\initialdate{#1}{#2}%
+\begin{tabular}{|rrrrrrr|} \hline
+\multicolumn{7}{|c|}{#3}\\ \hline
+Su&Mo&Tu&We&Th&Fr&Sa\\ \hline
+\day{ 1}&\day{ 2}&\day{ 3}&\day{ 4}&\day{ 5}&\day{ 6}&\day{ 7}\\
+\day{ 8}&\day{ 9}&\day{10}&\day{11}&\day{12}&\day{13}&\day{14}\\
+\day{15}&\day{16}&\day{17}&\day{18}&\day{19}&\day{20}&\day{21}\\
+\day{22}&\day{23}&\day{24}&\day{25}&\day{26}&\day{27}&\day{28}\\
+\day{29}&\day{30}&\day{31}&\day{32}&\day{33}&\day{34}&\day{35}\\
+\day{36}&\day{37}&\day{38}&\day{39}&\day{40}&\day{41}&\day{42}\\ \hline
+\end{tabular}\global\advance\firstdate by #2
+\ifnum\firstdate>35 \global\advance\firstdate by -35
+ \else\global\advance \firstdate by -28 \fi}
+\def\day#1{\advance \datenum by#1
+ \ifnum\datenum>0 \ifnum\datenum>\lastdate\else\number\datenum \fi\fi}
+\def\initialdate#1#2{\datenum=1 \advance\datenum by -#1 \lastdate=#2}
+\newcount\xa\newcount\xb\newcount\xc
+\newcount\ya\newcount\yb\newcount\yc\newcount\yd
+\xa=0 \xb=235 {\multiply \xb by 2 \global\xc=\xb }
+\yd=0 \yc=136 {\multiply \yc by 2 \global \yb=\yc }
+{\multiply \yc by 3 \global \ya=\yc }
+
+\begin{document}
+\font\gross=cminch
+
+\def\setup{\yearnuma=\yearnum{%
+\divide\yearnuma by 100
+\multiply\yearnuma by 100
+\ifnum\yearnum=\yearnuma \divide \yearnum by 100 \fi
+\ifodd\yearnum\relax
+\else \divide\yearnum by 2
+ \ifodd\yearnum\relax
+ \else \global\febdays=29
+ \fi
+\fi
+}%
+{%
+\advance\yearnum by -1
+\yearnuma=\yearnum
+\divide\yearnuma by 400 \multiply \yearnuma by -400
+\advance\yearnuma by \yearnum % \yearnuma=\yearnum mod 400
+\firstdate=\yearnuma
+\yearnumb=\yearnuma
+\divide\yearnumb by 100 \divide\yearnuma by 4
+\advance\yearnuma by -\yearnumb % correct leapyear count by centuries
+\advance\firstdate by \yearnuma % add number of leapyears
+\yearnuma=\firstdate
+\divide\yearnuma by 7 \multiply\yearnuma by 7
+\advance\firstdate by -\yearnuma % \firstdate = #leapyears mod 7
+% Now do final correction for year 0.
+\global\firstdate=\ifcase\firstdate2 \or3 \or4 \or5 \or6 \or7 \or1 \fi
+}%
+}%
+
+\setup
+\begin{center}{\gross \number\yearnum }\end{center}
+\unitlength.01in
+\begin{picture}(705,543)
+\put(\xa,\ya){\month{\firstdate}{31}{January}}
+\put(\xb,\ya){\month{\firstdate}{\febdays}{February}}
+\put(\xc,\ya){\month{\firstdate}{31}{March}}
+\put(\xa,\yb){\month{\firstdate}{30}{April}}
+\put(\xb,\yb){\month{\firstdate}{31}{May}}
+\put(\xc,\yb){\month{\firstdate}{30}{June}}
+\put(\xa,\yc){\month{\firstdate}{31}{July}}
+\put(\xb,\yc){\month{\firstdate}{31}{August}}
+\put(\xc,\yc){\month{\firstdate}{30}{September}}
+\put(\xa,\yd){\month{\firstdate}{31}{October}}
+\put(\xb,\yd){\month{\firstdate}{30}{November}}
+\put(\xc,\yd){\month{\firstdate}{31}{December}}
+\end{picture}\newpage
+
+\end{document}}
diff --git a/macros/latex209/contrib/misc/card-set.sty b/macros/latex209/contrib/misc/card-set.sty
new file mode 100644
index 0000000000..b25f713ff1
--- /dev/null
+++ b/macros/latex209/contrib/misc/card-set.sty
@@ -0,0 +1,288 @@
+% card.sty by R. Potu\v cek jr. March 6, 1992 %
+% %
+\message{Card style Version 2.04, March 6, 1992 by R. Potu\v cek jr.} %
+% %
+% This style allows you to print text formatted for cardfile cards. As it %
+% is a problem to print on such cards anyway, the text ist formatted into %
+% groups of consecutive boxes, so as to allow cutting it out and glueing %
+% together to cardfiles. %
+% %
+% Card size can be manipulated at will and card pages will be enumerated %
+% optionally and independently for each card, so as to allow texts longer %
+% than one card. %
+% %
+% The style should work with plain \TeX\ as well es with \LaTeX. %
+% %
+% %
+% %
+% %
+% If you have any suggestions, questions or comments, please e-mail (with a %
+% Version number please) to: %
+% %
+% potucek@winx06.informatik.uni-wuerzburg.de %
+% %
+% ---------------------------------------------------------------------------- %
+% %
+% For use with \LaTeX\ use the environment `card', which expects a parameter %
+% containing material supposed to be set in the header: %
+% %
+% \begin{card}{heading} %
+% ... %
+% \end{card} %
+% %
+% For use with plain \TeX\ÿenclose the actual text between `\card' and %
+% `\endcard': %
+% %
+% \card{heading} %
+% ... %
+% \endcard %
+% %
+% ---------------------------------------------------------------------------- %
+% %
+% The text within the environment will be formatted as follows: %
+% %
+% +---------------------------+---------------------------+ %
+% | heading page | heading page | %
+% +---------------------------+---------------------------+ %
+% | Text, broken into small | allow usage of all other | %
+% | pages of their own, so as | \LateX\ commands. | %
+% | to allow comfortable usage| | %
+% | as an environment, an to | | %
+% +---------------------------+---------------------------+ %
+% %
+% ---------------------------------------------------------------------------- %
+% %
+% The size of the card is set by \cardheight and \cardwidth. The distance of %
+% the text from the borders is set by \cardfreespace. Pagenubers can be %
+% selected by setting: %
+% %
+% \let\cardpageno\on % turn on pagenumbers %
+% \let\cardpageno\off % turn off pagenumbers %
+% %
+% Before each card and between two boxes \cardfreespace will be inserted. %
+% Furthermore there is a token register called `\everycard' that is executed %
+% at the beginning of every card, so as to allow a general style definition %
+% for every card, which then may be dependent on the environment you use. %
+% %
+% If you don't like empty pages to be printed, i.e. pages that have a header %
+% but don't contain any text, you can suppress printing by setting: %
+% %
+% \let\cardprtempty\off % suppress empty pages %
+% \let\cardprtempty\on % print emty pages %
+% %
+% ---------------------------------------------------------------------------- %
+% %
+% These are the parameters you may change, however you should modify them in %
+% your source file rather than changing these global presets! %
+% %
+\edef\on{1 }\edef\off{0 }
+
+\let\cardpageno\on
+\let\cardprtempty\on
+
+\newdimen\cardwidth \cardwidth74mm
+\newdimen\cardheight \cardheight52mm
+\newdimen\cardfreespace \cardfreespace5pt
+\newdimen\cardsepamount \cardsepamount\medskipamount
+
+\newtoks\everycard \everycard{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Don't change anything that follows! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Allow `@' in command names;
+%
+\ifcat @a \def\card@atdef{1} \else \catcode`\@=11 \def\card@atdef{0} \fi
+
+% Declare registers needed:
+%
+\newdimen\card@height \card@height\cardheight
+\newdimen\card@headheight \card@headheight12pt
+\newdimen\card@tmpdim
+\newdimen\card@ghsize
+\newdimen\card@gvsize
+
+\newbox\card@textboxone
+\newbox\card@textboxtwo
+\newbox\card@pagebox
+\newbox\card@strutbox
+
+\newtoks\origout
+\newtoks\card@lhead \card@lhead={}
+\newtoks\card@rhead \card@rhead={}
+
+\newcount\card@pagecount \card@pagecount0
+\newcount\card@lcount \card@lcount1
+\newcount\card@rcount \card@rcount2
+\newcount\card@lrf \card@lrf0
+
+\def\on{1}
+\def\off{0}
+% Message macro for debugging:
+%
+\def\card@db#1#2{
+ \ifnum#1<0 \message{#2} \fi
+}
+
+% Define strut for cardhead. Default is \strut. It shouldn't be needed but
+% let's make sure:
+%
+\def\card@strut{\strut}
+\def\card@makestrut#1{
+ \global\def\card@strut{\copy\card@strutbox}
+ \global\setbox\card@strutbox=\hbox{\vphantom{#1}}
+ \card@tmpdim=\ht\card@strutbox \advance\card@tmpdim 1.4pt\global\ht\card@strutbox=\card@tmpdim
+ \card@tmpdim=\dp\card@strutbox \advance\card@tmpdim 1.4pt\global\dp\card@strutbox=\card@tmpdim
+}
+
+% Flush contents of \TeX's vertical list:
+%
+\def\card@preflush{
+ \origout=\output
+ \card@tmpdim\vsize \vsize2\vsize
+ \global\setbox\card@pagebox=\vbox{}
+ \output={
+ \card@db1{:}
+ \global\setbox\card@pagebox=\vbox{
+ \unvbox\card@pagebox
+ \par\noindent\vskip\cardsepamount
+ \ifvbox255\unvbox255
+ \else\box255\fi
+ }
+ }
+ \par\penalty-\@M
+ \output=\origout
+ \vsize\card@tmpdim
+ \ifvbox\card@pagebox \else
+ \global\setbox\card@pagebox=\vbox{\box\card@pagebox}
+ \fi
+}
+
+% Initialize all local parameters of a card with those infos available.
+% Furthermore change \output temporarily to allow page breaking within a card.
+%
+\def\card@init#1{
+ \card@preflush
+ \origout=\output
+ \output={\card@output}
+ \card@ghsize\hsize
+ \card@gvsize\vsize
+ \card@makestrut{#1}
+ \card@lhead={#1\ifnum\on=\cardpageno\hfill\the\card@lcount\hskip\cardfreespace\else\fi}
+ \card@rhead={#1\ifnum\on=\cardpageno\hfill\the\card@rcount\hskip\cardfreespace\else\fi}
+ \global\card@headheight0pt
+ \global\advance\card@headheight \ht\card@strutbox
+ \global\advance\card@headheight \dp\card@strutbox
+ \global\card@tmpdim\cardheight
+ \global\advance\card@tmpdim -\card@headheight
+ \global\card@height\card@tmpdim
+ \global\advance\card@tmpdim -2\cardfreespace
+ \vsize\card@tmpdim
+ \global\card@tmpdim\cardwidth
+ \global\advance\card@tmpdim -2\cardfreespace
+ \hsize\card@tmpdim
+ \global\card@pagecount0
+ \global\card@lcount1
+ \global\card@rcount2
+ \global\card@lrf0
+ \topskip0pt
+ \card@db0{(}
+}
+
+% Restore \hsize, \vsize and \output to previous values:
+%
+\def\card@exit{
+ \global\advance\card@lrf 2
+ \the\output
+ \hsize\card@ghsize %globa?
+ \vsize\card@gvsize
+ \output=\origout
+ \origout={}
+ \card@db0{)}
+}
+
+% Make cardfile-card with global dimensions and {lhead}{rhead}{lbody}{rbody}
+%
+\def\makecard#1#2#3#4{
+ \vbox to \cardheight{
+ \hrule
+ \hbox to 2\cardwidth{\vrule
+ \hbox to \cardwidth{\card@strut\hskip\cardfreespace#1\hss}\hss\vrule
+ \hbox to \cardwidth{\card@strut\hskip\cardfreespace#2\hss}\hss\vrule}
+ \hrule
+ \hbox to 2\cardwidth{\vrule\hbox to \cardwidth{\hskip\cardfreespace
+ \vbox to \card@height{\vskip\cardfreespace#3\vss}\hss
+ \hss}\hss\vrule\hbox to \cardwidth{\hskip\cardfreespace
+ \vbox to \card@height{\vskip\cardfreespace#4\vss}\hss
+ \hss}\hss\vrule}
+ \vss
+ \hrule
+ }
+}
+
+% Test whether left box contains any material
+%
+\newif\ifcard@page
+\def\ifpage{
+ \ifnum\the\card@lrf>0 \card@pagetrue % Create output
+ \else \card@pagefalse \fi % unless regular left
+ \ifnum\the\card@lrf=2
+ \ifvbox\card@textboxone\else % or empty
+ \card@pagefalse
+ \fi
+ \ifnum\cardprtempty=\on\relax
+ \ifnum\the\card@lcount=1
+ \card@pagetrue
+ \fi
+ \fi
+ \fi
+ \ifcard@page
+}
+
+% Actual \output routine. This routine does not create any output. Rather it
+% writes such boxes as it wishes to output into \card@pagebox, which then is
+% passed to the regular output routine!
+%
+\def\card@output{
+ \global\advance\card@pagecount 1
+ \ifcase\the\card@lrf
+ \global\setbox\card@textboxone=\box255\global\card@lcount\card@pagecount \card@db0{ (0,<\the\card@pagecount>) }
+ \or \global\setbox\card@textboxtwo=\box255\global\card@rcount\card@pagecount \card@db0{ (1,<\the\card@pagecount>) }
+ \or \global\setbox\card@textboxone=\box255\global\card@lcount\card@pagecount \card@db0{ (2,<\the\card@pagecount>) }
+ \or \global\setbox\card@textboxtwo=\box255\global\card@rcount\card@pagecount \card@db0{ (3,<\the\card@pagecount>) }
+ \fi
+ \ifpage
+ \global\setbox\card@pagebox=\vbox{\unvbox\card@pagebox
+ \par\noindent\vskip\cardsepamount
+ \makecard{\the\card@lhead}{\the\card@rhead}
+ {\box\card@textboxone}{\box\card@textboxtwo}
+ }
+ \fi
+% Test routines:
+% \ifnum\the\card@lrf>1 \shipout\box\card@pagebox \fi % for testing only
+% \ifnum\the\card@lrf>1 \shipout\copy\card@pagebox \fi % for testing only
+ \ifnum\the\card@lrf>0 \global\card@lrf0 \else \global\card@lrf1 \fi
+}
+
+% The actual definition of the environment comes here, so as to allow use
+% with plain \TeX\ as well:
+%
+\long\def\card#1{
+ \begingroup
+ \card@db2{#1}
+ \card@init{#1}
+ \the\everycard
+ \par
+}
+\long\def\endcard{
+ \vfill
+ \penalty-\@M
+ \card@exit
+ \unvbox\card@pagebox
+ \endgroup
+}
+
+% Restore `@' to catcode `other' if needed:
+%
+\ifx0\card@atdef \catcode`@=12 \else \fi
diff --git a/macros/latex209/contrib/misc/card.sty b/macros/latex209/contrib/misc/card.sty
new file mode 100644
index 0000000000..b08f037237
--- /dev/null
+++ b/macros/latex209/contrib/misc/card.sty
@@ -0,0 +1,96 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Silvano Balemi",
+%%% version = "1.0",
+%%% date = "12-APR-1993",
+%%% filename = "card.sty",
+%%% address = "Automatic Control Laboratory
+%%% Swiss Federal Institute of Technology (ETH)
+%%% Zurich,
+%%% 8092 Zurich,
+%%% Switzerland",
+%%% telephone = "+41 (1) 256.55.35",
+%%% FAX = "+41 (1) 262.43.62",
+%%% email = "balemi@aut.ee.ethz.ch (Internet)",
+%%% keywords = "LaTeX, Visiting cards
+%%% supported = "yes",
+%%% docstring = "This is a LaTeX substyle file for producing
+%%% 10 visiting cards in credit card format
+%%% (european standard) on A4 pages
+%%%
+%%% Usage:
+%%% \documentstyle[card]{article}
+%%% \begin{document}
+%%% \card{
+%%% \put(5,26){Name}
+%%% \put(5,15){street}
+%%% \put(5,10){City}
+%%% \put(5,05){Tel: XXXX}
+%%% }
+%%% \starmarkings % default, or
+%%% %% \flatmarkings % markings not on cards, or
+%%% %% \nomarkings % no markings
+%%% \visitingcards
+%%% \end{document}
+%%% }
+%%% ====================================================================
+
+\typeout{Document substyle 'card.sty' for creating visiting cards <12 Apr 93>}
+
+\def\es{} % eat space for nice formatting
+\setlength{\unitlength}{1mm}
+\setlength{\headheight}{0mm}
+\setlength{\headsep}{0mm}
+\setlength{\footheight}{0mm}
+\setlength{\footskip}{0mm}
+\setlength{\topmargin -12mm}
+\setlength{\textheight 270mm}
+\setlength{\oddsidemargin -11.3mm}
+\setlength{\textwidth 177mm}
+\pagestyle{empty}
+
+\def\card{}
+
+\def\visitingcard{\es
+\newsavebox{\visitingbox}
+\sbox{\visitingbox}{\es
+\begin{picture}(85.5,54)
+\card
+\end{picture}
+}}
+
+%% Create no markings. Useful when printing double-sided cards.
+\def\nomarkings{\def\@markings{}}
+
+%% Draws the full frame around each card. Useful for designing a card.
+\def\fullframe{\def\@markings{%
+\multiput(0,0)(0,54){6}{\line(1,0){171}}
+\multiput(0,0)(85.5,0){3}{\line(0,1){270}}}}
+
+%% Creates small star at all corners of all cards
+\def\starmarkings{\def\@markings{%
+\multiput(0,0)(0,54){6}{\makebox(0.0,0.1)[c]{{\tiny +}}}
+\multiput(85.5,0)(0,54){6}{\makebox(0.0,0.1)[c]{{\tiny +}}}
+\multiput(171,0)(0,54){6}{\makebox(0.0,0.1)[c]{{\tiny +}}}}}
+
+%% These markings are not invasive. Markings are not put on the cards.
+\def\flatmarkings{\def\@markings{%
+\thinlines
+\multiput(0,-.5)(85.5,0){3}{\line(0,-1){5}}
+\multiput(0,270.5)(85.5,0){3}{\line(0,1){5}}
+\multiput(-.5,0)(0,54){6}{\line(-1,0){5}}
+\multiput(171.5,0)(0,54){6}{\line(1,0){5}}}}
+
+%% Default markings are starmarkings
+\starmarkings
+
+\def\visitingcards{
+\visitingcard
+\begin{picture}(171,270)(0,0)
+ \multiput(0,0)(0,54){5}{\usebox{\visitingbox}}
+ \multiput(85.5,0)(0,54){5}{\usebox{\visitingbox}}
+ % draw markings
+ \@markings
+\end{picture}
+}
+
diff --git a/macros/latex209/contrib/misc/catmac-doc.tex b/macros/latex209/contrib/misc/catmac-doc.tex
new file mode 100644
index 0000000000..1f4885b926
--- /dev/null
+++ b/macros/latex209/contrib/misc/catmac-doc.tex
@@ -0,0 +1,536 @@
+%Please reply to inhb@mcgillb.bitnet.
+%For this semester only, to barr@linc.cis.upenn.edu.
+%Michael Barr
+%Math Dept
+%McGill Univ.
+%805 Sherbrooke St W
+%Montreal, QC
+%Canada H3P 1S4
+\documentstyle[12pt,catmac]{article}
+\textheight=9in \topmargin=0pt\headheight=0pt\headsep=0pt
+\textwidth=6.5in \oddsidemargin=0pt
+\begin{document}
+{\catcode`\ =13\global\let =\ \catcode`\^^M=13
+\gdef^^M{\par\noindent}}
+\def\verbatim{\tt
+\catcode`\^^M=13
+\catcode`\ =13
+\catcode`\\=12
+\catcode`\{=12
+\catcode`\}=12
+\catcode`\_=12
+\catcode`\^=12
+\catcode`\&=12
+\catcode`\~=12
+\catcode`\#=12
+\catcode`\%=12
+\catcode`\$=12
+\catcode`|=0
+}
+
+All commercial rights reserved. May be freely distributed
+and used with the following exceptions:\\
+1. No commercial use without explicit permission.\\
+2. It may not be used by any employee of a telephone company.\\
+3. It may not be distributed without this notice.
+
+\def\\{{\tt \char 92}}
+
+\section*{The catmac macros}
+The file catmac includes a number of macros for drawing commutative
+diagrams in special shapes as well as more flexible macros to paste
+together more complicated diagrams.
+
+In general, there are two kinds of macros. The first kind has the
+following form
+{\tt \\shapename[shape\_parameters]} and is intended to be used in the
+following way:
+{\verbatim
+\begin{center}
+\resetparms
+\shapename[shape_parameters]
+\end{center}
+|egroup
+
+This will create a shape with the given parameters. It operates by
+building its own picture environment.
+
+The second kind of procedure must be used inside a picture environment
+and allows the user to put a diagram of a given size and shape at a
+given place. The usual way in which this is used is:
+
+{\verbatim
+\begin{center}
+%code to be explained later
+\begin{picture}(xext,yext)
+\putshape1(x1,y1)[shape_parameters1]
+|dots
+\putshape(xn,yn)[shape_parametersn]
+\end{picture}
+\end{center}
+|egroup
+
+Here is an example of the first kind of macro. I will have to explain a
+few details before giving examples of the second. The code
+{\verbatim
+\begin{center}
+\resetparms
+\square[A`B`C`D;f`g`h`k]
+\end{center}
+|egroup
+produces the diagram
+\begin{center}
+\resetparms
+\square[A`B`C`D;f`g`h`k]
+\end{center}
+and the code
+{\verbatim
+\begin{center}
+\resetparms
+\Atriangle[A`B`C;f`g`h]
+\end{center}
+|egroup
+produces the diagram
+\begin{center}
+\resetparms
+\Atriangle[A`B`C;f`g`h]
+\end{center}
+The reason for the shape name will be explained later.
+
+If an arrow label extends especially high or low, the space
+automatically expands to match. For example,
+{\verbatim
+\begin{center}
+\resetparms
+\square[A`B`C`D;\sum_{i=1}^{\infty}`g`h`\Psi^A_k]
+\end{center}
+|egroup
+will get the diagram
+\begin{center}
+\resetparms
+\square[A`B`C`D;\sum_{i=1}^{\infty}`g`h`\Psi^A_k]
+\end{center}
+and so on.
+
+Before going on, I will explain about the parameters. Any shape will
+have one or two parameters for height and/or length as well as one
+parameter for each arrow in the diagram. These are in addition to the
+parameters used in the actual procedures. For example, the procedure
+{\verbatim
+\begin{center}
+\setsqparms[-1`0`2`-3;1000`700]
+\square[A`B`C`D;f`g`h`k]
+\end{center}
+|egroup
+gives the square:
+\begin{center}
+\setsqparms[-1`0`2`-3;1000`700]
+\square[A`B`C`D;f`g`h`k]
+\end{center}
+The meaning is as follows. The first four parameters refer to four
+arrows in linguistic order (top, left, right, bottom). A negative
+number gives a backward arrow, while a zero causes it to be omitted. A
+parameter with an absolute value of 1 is ordinary, while 2 gives an
+arrow with a tail (monomorphism) and 3 a double headed arrow
+(epimorphism). The last two parameters determine the width and height,
+respectively, in units of 0.01 em (an em is the width of an M, the
+widest letter in a font).
+
+Although {\tt \\resetparms} works with any of the shapes (and simply
+chooses
+the default values of 1 for all arrows and 500 for height and width),
+the remaining shapes use different names. The various parameter setting
+procedures are
+{\verbatim
+\setsqparms[#1`#2`#3`#4;#5`#6]
+\settriparms[#1`#2`#3;#4]
+\settripairparms[#1`#2`#3`#4`#5;#6]
+\setrecparms[#1`#2]
+|egroup
+With the exception of the last, the parameters before the semicolon set
+the arrow types and the one or two after set lengths. In the last one,
+both parameters are lengths.
+
+Here are the shapes. We have already seen the shape {\tt \\square}.
+There are eight different triangles, all isoceles right triangles in
+different orientations. The names all have the form {\tt
+\\xtriangle}, where x is the letter that most closely resembles the
+actual shape of the triangle.
+
+Here are the names, followed by a sample of each one:
+\begin{list}{}{}
+\item{\tt \\btriangle}\samepage
+\begin{center}
+\resetparms
+\btriangle[A`B`C;f`g`h]
+\end{center}
+\pagebreak[0]
+\item{\tt \\dtriangle}\samepage
+\begin{center}
+\resetparms
+\dtriangle[A`B`C;f`g`h]
+\end{center}
+\pagebreak[0]
+\item{\tt \\ptriangle}\samepage
+\begin{center}
+\resetparms
+\ptriangle[A`B`C;f`g`h]
+\end{center}
+\pagebreak[0]
+\item{\tt \\qtriangle}\samepage
+\begin{center}
+\resetparms
+\qtriangle[A`B`C;f`g`h]
+\end{center}
+\pagebreak[0]
+\item{\tt \\Atriangle}\samepage
+\begin{center}
+\resetparms
+\Atriangle[A`B`C;f`g`h]
+\end{center}
+\pagebreak[0]
+\item{\tt \\Vtriangle}\samepage
+\begin{center}
+\resetparms
+\Vtriangle[A`B`C;f`g`h]
+\end{center}
+\pagebreak[0]
+\item{\tt \\Ctriangle}\samepage
+\begin{center}
+\resetparms
+\Ctriangle[A`B`C;f`g`h]
+\end{center}
+\pagebreak[0]
+\item{\tt \\Dtriangle}\samepage
+\begin{center}
+\resetparms
+\Dtriangle[A`B`C;f`g`h]
+\end{center}
+\end{list}
+
+In addition, there are two special diagrams that come up often enough to
+be worth having a special macros for.
+\begin{list}{}{}
+\item{\tt \\Atrianglepair}\samepage
+\begin{center}
+\resetparms
+\Atrianglepair[A`B`C`D;f`g`h`k`l]
+\end{center}
+\item{\tt \\Vtrianglepair}\samepage
+\begin{center}
+\resetparms
+\Vtrianglepair[A`B`C`D;f`g`h`k`l]
+\end{center}
+\end{list}
+Finally, there is one special shape that is probably not used by very
+many mathematicians. Still I have it and the user might as well share
+it.
+
+{\verbatim
+\recurse[A`B`R`C;s`f_0`f`t_0`t]
+|egroup
+\begin{center}
+\resetparms
+\recurse[A`B`R`C;s`f_0`f`t_0`t]
+\end{center}
+
+Notice what happens if the first parameter is empty:
+{\verbatim
+\recurse[`B`R`C;s`f_0`f`t_0`t]
+|egroup
+\begin{center}
+\resetparms
+\recurse[`B`R`C;s`f_0`f`t_0`t]
+\end{center}
+
+This takes care of the simple procedures. The remaining procedures are
+there as building blocks for more complicated diagrams.
+
+These take the form
+\vskip0pt\noindent
+{\tt \\putshape(xpos,ypos)[shape\_parameters]}
+\vskip0pt\noindent
+where
+shape is one of the 11 shapes (excluding {\tt \\recurse}) described
+above
+and the parms are as described there. The parameters {\tt xpos} and
+{\tt ypos} are the offsets from the lower left corner of the picture
+measured in umits of .01 em in the usual \LaTeX\ fashion.
+
+There is one
+more shape which is simply an arrow with an attached label. This is
+called {\tt \\putmorphism} and it is used with the syntax
+\vskip0pt\noindent
+{\tt
+\\putmorphism(xpos,ypos)(run,rise)[node1`node2`label]\{dist\}\{type\}\{loc\}}
+\vskip0pt\noindent
+Here the parameters {\tt xpos} and
+{\tt ypos} are as above. The slope is {\tt rise/run} where {\tt rise}
+and {\tt run} are two numbers that give the slope in accordance with the
+\LaTeX\ rules. That is rise and run must have no common divisor and
+must not exceed 4 in absolute value. In addition, these procedures are
+defined so that rise must not be positive and if it is zero, then run
+must be positive. In other words, all arrows must go in the linguistic
+direction, downwards or to the right. Arrows can be made to go in the
+reverse direction as explained below.
+
+The next three parameters are the node that appears first (in linguistic
+order), the one that appears second and the arrow label. The next
+paramater is the distance in the sense of \LaTeX\ between the centers of
+the nodes. This means it is the horizontal component of the distance,
+unless that is negative, in which case it is the vertical distance. The
+second parameter is the code for the arrowtype, an integer between -3
+and 3 with the same meaning as explained above. Using negative values
+of this parameter allows one to draw an arrow that goes upwards or left.
+Note, however, that node1 is always the node that is above or to the
+left of node2. The last parameter should have the value a,b,l,r or m.
+The values a and b are used only for horizontal arrows and direct the
+arrow label to be placed above or below the arrow. The values l and r
+are used for all other arrows and direct the label to be left or right
+of the arrow. Finally, a vertical arrow only can be given the parameter
+m, in which case the arrow will be gapped and the label placed in the
+middle of the gap.
+
+In general, the simple macros are designed to be used as indicated
+either in the {\tt \\begin\{center\} \ldots \\end\{center\}} environment
+or in one of the others, usually
+{\verbatim
+\begin{equation}\begin{array}{c}
+|dots
+\end{array}\end{equation}|egroup
+
+The \\putshape macros must be used inside a picture environment that is
+normally placed inside a centering or similar environment. The
+reference point for the positioning parameters is determined as the
+lower left corner of the smallest rectangle with sides parallel to the
+coordinate axes that includes the center points of all nodes on its
+border. This rectangle will be degenerate in the case of a horizontal
+or vertical morphism. The reference point may either be on or outside
+the actual figure. For example, in the case of the btriangle, it is the
+center of the lower left node, while for a qtriangle it is outside the
+triangle itself being the fourth corner of the enclosing square.
+
+The macros are made so that they fit together well. That is why all
+distances are from node centers to node centers. If a vertex is part of
+two shapes, it is probably best not to repeat it, since it is
+conceivable that round-off errors will cause its two appearances to be
+slightly offset. It can either be omitted or, since the width is used
+to determine the amount to shorten horizontal arrows, replaced by {\tt
+\\phantom} versions. Both methods are illustrated in the example given
+at the end.
+
+One more thing has to be described. when beginning picture mode, you
+have to allocate both a horizontal and vertical space. the vertical
+space is crucial and, while the horizontal is not as critical, it still
+determines whether the figure is properly centered. This partially
+automated as follows. You begin by giving values to two variables,
+called {\tt \\xext} and {\tt\\yext} (for x-extent and y-extent, resp.).
+This is done by the declarations
+{\tt\\xext=xparm, \\yext=yparm}, where {\tt xparm} and {\tt yparm} are
+the sum of all the horizontal and vertical distances used in the
+procedures. Of course, if two shapes are put side by side, the
+x-extents will be the sum plus the space between them if any, while the
+y-extent will be that of the larger one. In figuring out these extents,
+ignore the heights and widths of the vertices and arrow labels. So what
+these really measure is the distance between the two most distantly
+separated arrows in the diagram, or rather it would if none was omitted.
+
+These must be adjusted for the space occupied by the labels and nodes.
+There are procedures to do this automatically, but they require an
+assist from the user. First, there are six raw procedures that can
+carry out these adjustments. They are {\verbatim \topadjust,
+\botadjust, \leftadjust, \rightadjust, \leftsladjust, \rightsladjust
+|egroup that take 3 parameters each and adjust {\tt\\xext} and
+{\tt\\yext} for the heights and widths of the nodes. They all take as
+parameters two nodes and one arrow and figure out which one stands the
+highest or sticks out the furthest and makes the appropriate adjustment.
+The first four can be given the nodes in either order and the arrow
+label comes third. In the case of the last two, making adjustment for
+slnat arrows of a triangle, the first parameter is the node that sticks
+out the further, the second is the other node (which is the rarely the
+determining one) and the third is the label. If it is clear that a node
+or label cannot possibly be the salient one, then it may safely be
+omitted.
+
+In practice, it is hardly ever necessary to use these procedures. There
+is a single procedure called {\tt\\adjust} that is used as follows:
+{\verbatim
+\adjust[tnode`tlabel;lnode`llabel;rnode`rlabel;bnode`blabel]
+|egroup
+It is usually necessary to specify only four parameters leaving the
+remainder blank. For example, if the top label is empty, then some node
+(if there is more than one, always use the tallest; if in doubt use them
+both concatenated). If the label is not blank, it will almost stick up
+further than the node. If in doubt, give them both, but this should
+rarely happen. Similar remarks apply to the other pairs of parameters.
+
+These adjustment procedures adjust not only {\tt\\xext} and {\tt\\yext}
+but another pair of variables called {\tt\\xpos} and {\tt\\ypos}. When
+this has all been done, you can now begin picture mode with
+{\verbatim
+\begin{picture}(\xext,\yext)(\xoff,\yoff)
+|dots
+\end{picture}
+|egroup
+
+A somewhat baroque (but taken from an actual text) example illustrates
+most of these points.
+{\verbatim
+\begin{center}
+\xext=2100 \yext=2100
+\adjust[`\mu;`T\eta'T;`\sigma;`T'T\eta']
+\begin{picture}(\xext,\yext)(\xoff,\yoff)
+\putmorphism(0,2100)(0,-1)[``T\eta'T]{1400}1l
+\putmorphism(0,2100)(1,0)[TT`T`\mu]{700}1a
+\putmorphism(0,2100)(1,-1)[`TTT'`TT\eta']{700}1l
+\putmorphism(700,2100)(1,-1)[`TT'`T\eta]{700}1r
+\put(700,1750){\makebox(0,0){1}}
+\putmorphism(700,1420)(1,0)[\phantom{TTT'}`\phantom{TT'}`\mu
+ T']{700}1a
+\putmorphism(700,1380)(1,0)[\phantom{TTT'}`%
+ \phantom{TT'}`T\sigma]{700}1b
+\setsqparms[0`1`1`1;700`700]
+\putsquare(700,700)[TTT'`TT'`TT'TT'`TT'T';`T\eta'TT'``]
+\putmorphism(700,700)(1,0)[\phantom{TT'TT'}`%
+ \phantom{TT'T'}`TT'\sigma]{700}1a
+\put(300,1400){\makebox(0,0){2}}
+\put(950,1050){\makebox(0,0){3}}
+\settriparms[0`1`0;700]
+\putbtriangle(1400,700)[``TT';T\eta'T'`id`]
+\putmorphism(1400,700)(1,0)[\phantom{TT'T'}`%
+ \phantom{TT'}`T\mu']{700}1a
+\put(1600,1050){\makebox(0,0){6}}
+\setsqparms[1`1`0`1;700`700]
+\putsquare(0,0)[TT'T`\phantom{TT'TT'}`T'T`T'TT';%
+ TT'T\eta'`\sigma T``T'T\eta']
+\putmorphism(700,0)(1,0)[\phantom{T'TT'}`%
+ \phantom{T'T'}`T'\sigma]{700}1b
+\setsqparms[0`0`1`1;700`700]
+\putsquare(1400,0)[``T'T'`T';``\sigma`\mu']
+\putmorphism(700,700)(0,-1)[``\sigma TT']{700}1m
+\putmorphism(1400,700)(0,-1)[``\sigma T']{700}1m
+\put(300,350){\makebox(0,0){4}}
+\put(1050,350){\makebox(0,0){5}}
+\put(1750,350){\makebox(0,0){7}}
+\end{picture}
+\end{center}
+|egroup
+which produces
+\begin{center}
+\xext=2100 \yext=2100
+\adjust[`\mu;`T\eta'T;`\sigma;`T'T\eta']
+\begin{picture}(\xext,\yext)(\xoff,\yoff)
+\putmorphism(0,2100)(0,-1)[``T\eta'T]{1400}1l
+\putmorphism(0,2100)(1,0)[TT`T`\mu]{700}1a
+\putmorphism(0,2100)(1,-1)[`TTT'`TT\eta']{700}1l
+\putmorphism(700,2100)(1,-1)[`TT'`T\eta]{700}1r
+\put(700,1750){\makebox(0,0){1}}
+\putmorphism(700,1420)(1,0)[\phantom{TTT'}`\phantom{TT'}`\mu
+ T']{700}1a
+\putmorphism(700,1380)(1,0)[\phantom{TTT'}`%
+ \phantom{TT'}`T\sigma]{700}1b
+\setsqparms[0`1`1`1;700`700]
+\putsquare(700,700)[TTT'`TT'`TT'TT'`TT'T';`T\eta'TT'``]
+\putmorphism(700,700)(1,0)[\phantom{TT'TT'}`%
+ \phantom{TT'T'}`TT'\sigma]{700}1a
+\put(300,1400){\makebox(0,0){2}}
+\put(950,1050){\makebox(0,0){3}}
+\settriparms[0`1`0;700]
+\putbtriangle(1400,700)[``TT';T\eta'T'`id`]
+\putmorphism(1400,700)(1,0)[\phantom{TT'T'}`%
+ \phantom{TT'}`T\mu']{700}1a
+\put(1600,1050){\makebox(0,0){6}}
+\setsqparms[1`1`0`1;700`700]
+\putsquare(0,0)[TT'T`\phantom{TT'TT'}`T'T`T'TT';%
+ TT'T\eta'`\sigma T``T'T\eta']
+\putmorphism(700,0)(1,0)[\phantom{T'TT'}`%
+ \phantom{T'T'}`T'\sigma]{700}1b
+\setsqparms[0`0`1`1;700`700]
+\putsquare(1400,0)[``T'T'`T';``\sigma`\mu']
+\putmorphism(700,700)(0,-1)[``\sigma TT']{700}1m
+\putmorphism(1400,700)(0,-1)[``\sigma T']{700}1m
+\put(300,350){\makebox(0,0){4}}
+\put(1050,350){\makebox(0,0){5}}
+\put(1750,350){\makebox(0,0){7}}
+\end{picture}
+\end{center}
+
+Here is a page of samples of the results from the various
+{\tt\\putshapes}. The code
+{\verbatim
+\begin{center}
+\xext=3000 \yext=3500
+\begin{picture}(\xext,\yext)(\xoff,\yoff)
+\resetparms
+\putsquare(0,0)[A`B`C`D;f`g`h`k]
+\putbtriangle(0,1500)[A`B`C;f`g`h]
+\putdtriangle(2200,1500)[A`B`C;f`g`h]
+\putptriangle(0,3000)[A`B`C;f`g`h]
+\putqtriangle(1000,500)[A`B`C;f`g`h]
+\putCtriangle(1500,750)[A`B`C;f`g`h]
+\putDtriangle(700,1000)[A`B`C;f`g`h]
+\putAtriangle(2000,2200)[A`B`C;f`g`h]
+\putAtrianglepair(0,2500)[A`B`C`D;f`g`h`k`l]
+\putVtriangle(2000,3000)[A`B`C;f`g`h]
+\putVtrianglepair(1000,2500)[A`B`C`D;f`g`h`k`l]
+\end{picture}
+\end{center}
+|egroup
+produces the diagram:
+\begin{center}
+\xext=3000 \yext=3500
+\begin{picture}(\xext,\yext)(\xoff,\yoff)
+\resetparms
+\putsquare(0,0)[A`B`C`D;f`g`h`k]
+\putbtriangle(0,1500)[A`B`C;f`g`h]
+\putdtriangle(2200,1500)[A`B`C;f`g`h]
+\putptriangle(0,3000)[A`B`C;f`g`h]
+\putqtriangle(1000,500)[A`B`C;f`g`h]
+\putCtriangle(1500,750)[A`B`C;f`g`h]
+\putDtriangle(700,1000)[A`B`C;f`g`h]
+\putAtriangle(2000,2200)[A`B`C;f`g`h]
+\putAtrianglepair(0,2500)[A`B`C`D;f`g`h`k`l]
+\putVtriangle(2000,3000)[A`B`C;f`g`h]
+\putVtrianglepair(1000,2500)[A`B`C`D;f`g`h`k`l]
+\end{picture}
+\end{center}
+
+
+Added material:
+
+The catdoc file is out-of-date in two ways. Most important is that all
+the basic shapes (square and triangles) now accept optional arguments.
+For example, the code
+{\verbatim
+\resetparms\square[A`B`C`D;f`g`h`k]
+|egroup
+is equivalent to simply
+{\verbatim
+|egroup
+\square[A`B`C`D;f`g`h`k]
+The code
+{\verbatim
+\settriparms[1`-1`2;750]\ptriangle[A`B`C;f`g`h]
+|egroup
+is equivalent to
+{\verbatim
+\ptriangle<1`-1`2;750>[A`B`C;f`g`h]
+|egroup
+and the code
+{\verbatim
+\settripairparms[1`-1`0`2`-3;1000]
+\putAtrianglepair(500,750)[A`B`C`D;f`g`h`k`l]
+|egroup
+is equivalent to
+{\verbatim
+\putAtrianglepair<1`-1`0`2`-3;1000>(500,750)[A`B`C`D;f`g`h`k`l]
+|egroup
+Note that both the old and new syntax work.
+
+The second new things are various shapes that I have found useful enough
+to add over the last few months. For example, I have both vertical and
+horizontal coequalizers. Had I had the need, I would have added
+equalizers, and no doubt will at some future date. Or maybe you will
+and can send it to me. These can all be found by reading the source
+file, where they are sort of documented.
+\end{document}
diff --git a/macros/latex209/contrib/misc/catmac.sty b/macros/latex209/contrib/misc/catmac.sty
new file mode 100644
index 0000000000..43a36455b2
--- /dev/null
+++ b/macros/latex209/contrib/misc/catmac.sty
@@ -0,0 +1,1013 @@
+% This should appear in a file named catmac.sty
+% Copyright 1988,1989 Michael Barr
+% Department of Mathematics and Statistics
+% McGill University
+% 805 Sherbrooke St., W
+% Montreal, Quebec, Canada
+% H3P 1S4
+%
+% inhb@mcgillb.bitnet
+%
+% All commercial rights reserved. May be freely distributed
+% and used with the following exceptions:
+% 1. No commercial use without explicit permission.
+% 2. It may not be used by any employee of a telephone
+% company.
+% 3. It may not be distributed without this notice.
+%
+% Last revised 89-12-11
+
+
+\newcount \coefa
+\newcount \coefb
+\newcount \coefc
+\newcount\tempcounta
+\newcount\tempcountb
+\newcount\tempcountc
+\newcount\tempcountd
+\newcount\xext
+\newcount\yext
+\newcount\xoff
+\newcount\yoff
+\newcount\gap%
+\newcount\arrowtypea
+\newcount\arrowtypeb
+\newcount\arrowtypec
+\newcount\arrowtyped
+\newcount\arrowtypee
+\newcount\height
+\newcount\width
+\newcount\xpos
+\newcount\ypos
+\newcount\run
+\newcount\rise
+\newcount\arrowlength
+\newcount\halflength
+\newcount\arrowtype
+\newdimen\tempdimen
+\newdimen\xlen
+\newdimen\ylen
+\newsavebox{\tempboxa}%
+\newsavebox{\tempboxb}%
+\newsavebox{\tempboxc}%
+
+
+\newcount \repetitions
+\def\repto#1{%
+\mathrel{
+\hbox{$
+\repetitions=0%
+\loop\ifnum\repetitions<#1%
+ \advance \repetitions by 1%
+ \relbar\joinrel
+\repeat
+\rightarrow
+$}}}
+\def\to{\repto0}
+\def\To{\repto1}
+\def\two{\reptwo0}
+\def\Two{\reptwo1}
+\def\tofro{\mathrel{\vcenter{\hbox{\oalign
+{$\longrightarrow$\crcr$\longleftarrow$}}}}}
+
+\def\epi{\mathrel{\mathchar"221\mkern -12mu\mathchar"221}}
+\def\leftepi{\mathrel{\mathchar"220\mkern -12mu\mathchar"220}}
+\def\mon{\mathrel{\m@th\hbox to
+ 14.6pt{\lasyb\char'51\hskip-2.1pt$\arrext$\hss
+$\mathord\rightarrow$}}} % width of \epi
+\def\leftmono{\mathrel{\m@th\hbox to
+14.6pt{$\mathord\leftarrow$\hss$\arrext$\hskip-2.1pt\lasyb\char'50%
+}}} % width of \epi
+\font\lasyb=lasyb10 scaled \magstephalf % for \mon
+\mathchardef\arrext="0200 % amr minus for arrow extension (see \into)
+
+
+\setlength{\unitlength}{.01em}%
+\def\settypes(#1,#2,#3){\arrowtypea#1 \arrowtypeb#2 \arrowtypec#3}
+\def\settoheight#1#2{\setbox\@tempboxa\hbox{#2}#1\ht\@tempboxa\relax}%
+\def\settodepth#1#2{\setbox\@tempboxa\hbox{#2}#1\dp\@tempboxa\relax}%
+\def\settokens[#1`#2`#3`#4]{%
+ \def\tokena{#1}\def\tokenb{#2}\def\tokenc{#3}\def\tokend{#4}}
+\def\setsqparms[#1`#2`#3`#4;#5`#6]{%
+\arrowtypea #1
+\arrowtypeb #2
+\arrowtypec #3
+\arrowtyped #4
+\width #5
+\height #6
+}
+\def\setpos(#1,#2){\xpos=#1 \ypos#2}
+
+\def\bfig{\begin{picture}(\xext,\yext)(\xoff,\yoff)}
+\def\efig{\end{picture}}
+
+\def\putbox(#1,#2)#3{\put(#1,#2){\makebox(0,0){$#3$}}}
+
+\def\settriparms[#1`#2`#3;#4]{\settripairparms[#1`#2`#3`1`1;#4]}%
+
+\def\settripairparms[#1`#2`#3`#4`#5;#6]{%
+\arrowtypea #1
+\arrowtypeb #2
+\arrowtypec #3
+\arrowtyped #4
+\arrowtypee #5
+\width #6
+\height #6
+}
+
+\def\resetparms{\settripairparms[1`1`1`1`1;500]\width 500}%default values%
+
+\resetparms
+
+\def\mvector(#1,#2)#3{%%
+\put(0,0){\vector(#1,#2){#3}}%
+\put(0,0){\vector(#1,#2){30}}%
+}
+\def\evector(#1,#2)#3{{%%
+\arrowlength #3
+\put(0,0){\vector(#1,#2){\arrowlength}}%
+\advance \arrowlength by-30
+\put(0,0){\vector(#1,#2){\arrowlength}}%
+}}
+
+\def\horsize#1#2{%
+\settowidth{\tempdimen}{$#2$}%
+#1=\tempdimen
+\divide #1 by\unitlength
+}
+
+\def\vertsize#1#2{%
+\settoheight{\tempdimen}{$#2$}%
+#1=\tempdimen
+\settodepth{\tempdimen}{$#2$}%
+\advance #1 by\tempdimen
+\divide #1 by\unitlength
+}
+
+\def\vertadjust[#1`#2`#3]{%
+\vertsize{\tempcounta}{#1}%
+\vertsize{\tempcountb}{#2}%
+\ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
+\divide\tempcounta by2
+\vertsize{\tempcountb}{#3}%
+\ifnum \tempcountb>0 \advance \tempcountb by20 \fi
+\ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
+}
+
+\def\horadjust[#1`#2`#3]{%
+\horsize{\tempcounta}{#1}%
+\horsize{\tempcountb}{#2}%
+\ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
+\divide\tempcounta by20
+\horsize{\tempcountb}{#3}%
+\ifnum \tempcountb>0 \advance \tempcountb by60 \fi
+\ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
+}
+
+% In this procedure, #1 is the paramater that sticks out all the way,
+% #2 sticks out the least and #3 is a label sticking out half way. #4 is
+% the amount of the offset.
+
+\def\sladjust[#1`#2`#3]#4{%
+\tempcountc=#4
+\horsize{\tempcounta}{#1}%
+\divide \tempcounta by2
+\horsize{\tempcountb}{#2}%
+\divide \tempcountb by2
+\advance \tempcountb by-\tempcountc
+\ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb\fi
+\divide \tempcountc by2
+\horsize{\tempcountb}{#3}%
+\advance \tempcountb by-\tempcountc
+\ifnum \tempcountb>0 \advance \tempcountb by80\fi
+\ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb\fi
+\advance\tempcounta by20
+}
+
+\def\putvector(#1,#2)(#3,#4)#5#6{{%
+\xpos=#1
+\ypos=#2
+\run=#3
+\rise=#4
+\arrowlength=#5
+\arrowtype=#6
+\ifnum \arrowtype<0
+ \ifnum \run=0
+ \advance \ypos by-\arrowlength
+ \else
+ \tempcounta \arrowlength
+ \multiply \tempcounta by\rise
+ \divide \tempcounta by\run
+ \ifnum\run>0
+ \advance \xpos by\arrowlength
+ \advance \ypos by\tempcounta
+ \else
+ \advance \xpos by-\arrowlength
+ \advance \ypos by-\tempcounta
+ \fi
+ \fi
+ \multiply \arrowtype by-1
+ \multiply \rise by-1
+ \multiply \run by-1
+\fi
+\ifnum \arrowtype=1
+ \put(\xpos,\ypos){\vector(\run,\rise){\arrowlength}}%
+\else\ifnum \arrowtype=2
+ \put(\xpos,\ypos){\mvector(\run,\rise)\arrowlength}%
+\else\ifnum\arrowtype=3
+ \put(\xpos,\ypos){\evector(\run,\rise){\arrowlength}}%
+\fi\fi\fi
+}}
+
+\def\putsplitvector(#1,#2)#3#4{%%
+\xpos #1
+\ypos #2
+\arrowtype #4
+\halflength #3
+\arrowlength #3
+\gap 140
+\advance \halflength by-\gap
+\divide \halflength by2
+\ifnum \arrowtype=1
+ \put(\xpos,\ypos){\line(0,-1){\halflength}}%
+ \advance\ypos by-\halflength
+ \advance\ypos by-\gap
+ \put(\xpos,\ypos){\vector(0,-1){\halflength}}%
+\else\ifnum \arrowtype=2
+ \put(\xpos,\ypos){\line(0,-1)\halflength}%
+ \put(\xpos,\ypos){\vector(0,-1)3}%
+ \advance\ypos by-\halflength
+ \advance\ypos by-\gap
+ \put(\xpos,\ypos){\vector(0,-1){\halflength}}%
+\else\ifnum\arrowtype=3
+ \put(\xpos,\ypos){\line(0,-1)\halflength}%
+ \advance\ypos by-\halflength
+ \advance\ypos by-\gap
+ \put(\xpos,\ypos){\evector(0,-1){\halflength}}%
+\else\ifnum \arrowtype=-1
+ \advance \ypos by-\arrowlength
+ \put(\xpos,\ypos){\line(0,1){\halflength}}%
+ \advance\ypos by\halflength
+ \advance\ypos by\gap
+ \put(\xpos,\ypos){\vector(0,1){\halflength}}%
+\else\ifnum \arrowtype=-2
+ \advance \ypos by-\arrowlength
+ \put(\xpos,\ypos){\line(0,1)\halflength}%
+ \put(\xpos,\ypos){\vector(0,1)3}%
+ \advance\ypos by\halflength
+ \advance\ypos by\gap
+ \put(\xpos,\ypos){\vector(0,1){\halflength}}%
+\else\ifnum\arrowtype=-3
+ \advance \ypos by-\arrowlength
+ \put(\xpos,\ypos){\line(0,1)\halflength}%
+ \advance\ypos by\halflength
+ \advance\ypos by\gap
+ \put(\xpos,\ypos){\evector(0,1){\halflength}}%
+\fi\fi\fi\fi\fi\fi
+}
+
+\def\putmorphism(#1)(#2,#3)[#4`#5`#6]#7#8#9{{%
+\run #2
+\rise #3
+\ifnum\rise=0
+ \puthmorphism(#1)[#4`#5`#6]{#7}{#8}{#9}%
+\else\ifnum\run=0
+ \putvmorphism(#1)[#4`#5`#6]{#7}{#8}{#9}%
+\else
+\setpos(#1)%
+\arrowlength #7
+\arrowtype #8
+\ifnum\run=0
+\else\ifnum\rise=0
+\else
+\ifnum\run>0
+ \coefa=1
+\else
+ \coefa=-1
+\fi
+\ifnum\arrowtype>0
+ \coefb=0
+ \coefc=-1
+\else
+ \coefb=\coefa
+ \coefc=1
+ \arrowtype=-\arrowtype
+\fi
+\width=2
+\multiply \width by\run
+\divide \width by\rise
+\ifnum \width<0 \width=-\width\fi
+\advance\width by60
+\if l#9 \width=-\width\fi
+\putbox(\xpos,\ypos){#4}% %node 1
+{\multiply \coefa by\arrowlength% %node 2
+\advance\xpos by\coefa
+\multiply \coefa by\rise
+\divide \coefa by\run
+\advance \ypos by\coefa
+\putbox(\xpos,\ypos){#5} }%
+{\multiply \coefa by\arrowlength% %label
+\divide \coefa by2
+\advance \xpos by\coefa
+\advance \xpos by\width
+\multiply \coefa by\rise
+\divide \coefa by\run
+\advance \ypos by\coefa
+\if l#9%
+ \put(\xpos,\ypos){\makebox(0,0)[r]{$#6$}}%
+\else\if r#9%
+ \put(\xpos,\ypos){\makebox(0,0)[l]{$#6$}}%
+\fi\fi }%
+{\multiply \rise by-\coefc% %arrow
+\multiply \run by-\coefc
+\multiply \coefb by\arrowlength
+\advance \xpos by\coefb
+\multiply \coefb by\rise
+\divide \coefb by\run
+\advance \ypos by\coefb
+\multiply \coefc by70
+\advance \ypos by\coefc
+\multiply \coefc by\run
+\divide \coefc by\rise
+\advance \xpos by\coefc
+\multiply \coefa by140
+\multiply \coefa by\run
+\divide \coefa by\rise
+\advance \arrowlength by\coefa
+\ifnum \arrowtype=1
+ \put(\xpos,\ypos){\vector(\run,\rise){\arrowlength}}%
+\else\ifnum\arrowtype=2
+ \put(\xpos,\ypos){\mvector(\run,\rise){\arrowlength}}%
+\else\ifnum\arrowtype=3
+ \put(\xpos,\ypos){\evector(\run,\rise){\arrowlength}}%
+\fi\fi\fi}\fi\fi\fi\fi}}
+
+\def\puthmorphism(#1,#2)[#3`#4`#5]#6#7#8{{%
+\xpos #1
+\ypos #2
+\width #6
+\arrowlength #6
+\putbox(\xpos,\ypos){#3\vphantom{#4}}%
+{\advance \xpos by\arrowlength
+\putbox(\xpos,\ypos){\vphantom{#3}#4}}%
+\horsize{\tempcounta}{#3}%
+\horsize{\tempcountb}{#4}%
+\divide \tempcounta by2
+\divide \tempcountb by2
+\advance \tempcounta by30
+\advance \tempcountb by30
+\advance \xpos by\tempcounta
+\advance \arrowlength by-\tempcounta
+\advance \arrowlength by-\tempcountb
+\putvector(\xpos,\ypos)(1,0){\arrowlength}{#7}%
+\divide \arrowlength by2
+\advance \xpos by\arrowlength
+\vertsize{\tempcounta}{#5}%
+\divide\tempcounta by2
+\advance \tempcounta by20
+\if a#8 %
+ \advance \ypos by\tempcounta
+ \putbox(\xpos,\ypos){#5}%
+\else
+ \advance \ypos by-\tempcounta
+ \putbox(\xpos,\ypos){#5}%
+\fi}}
+
+\def\putvmorphism(#1,#2)[#3`#4`#5]#6#7#8{{%
+\xpos #1
+\ypos #2
+\arrowlength #6
+\arrowtype #7
+\settowidth{\xlen}{$#5$}%
+\putbox(\xpos,\ypos){#3}%
+{\advance \ypos by-\arrowlength
+\putbox(\xpos,\ypos){#4}}%
+{\advance\arrowlength by-140
+\advance \ypos by-70
+\ifdim\xlen>0pt
+ \if m#8%
+ \putsplitvector(\xpos,\ypos){\arrowlength}{\arrowtype}%
+ \else
+ \putvector(\xpos,\ypos)(0,-1){\arrowlength}{\arrowtype}%
+ \fi
+\else
+ \putvector(\xpos,\ypos)(0,-1){\arrowlength}{\arrowtype}%
+\fi}%
+\ifdim\xlen>0pt
+ \divide \arrowlength by2
+ \advance\ypos by-\arrowlength
+ \if l#8%
+ \advance \xpos by-40
+ \put(\xpos,\ypos){\makebox(0,0)[r]{$#5$}}%
+ \else\if r#8%
+ \advance \xpos by40
+ \put(\xpos,\ypos){\makebox(0,0)[l]{$#5$}}%
+ \else
+ \putbox(\xpos,\ypos){#5}%
+ \fi\fi
+\fi
+}}
+
+\def\topadjust[#1`#2`#3]{%
+\yoff=10
+\vertadjust[#1`#2`{#3}]%
+\advance \yext by\tempcounta
+\advance \yext by 10
+}
+\def\botadjust[#1`#2`#3]{%
+\vertadjust[#1`#2`{#3}]%
+\advance \yext by\tempcounta
+\advance \yoff by-\tempcounta
+}
+\def\leftadjust[#1`#2`#3]{%
+\xoff=0
+\horadjust[#1`#2`{#3}]%
+\advance \xext by\tempcounta
+\advance \xoff by-\tempcounta
+}
+\def\rightadjust[#1`#2`#3]{%
+\horadjust[#1`#2`{#3}]%
+\advance \xext by\tempcounta
+}
+\def\rightsladjust[#1`#2`#3]{%
+\sladjust[#1`#2`{#3}]{\width}%
+\advance \xext by\tempcounta
+}
+\def\leftsladjust[#1`#2`#3]{%
+\xoff=0
+\sladjust[#1`#2`{#3}]{\width}%
+\advance \xext by\tempcounta
+\advance \xoff by-\tempcounta
+}
+\def\adjust[#1`#2;#3`#4;#5`#6;#7`#8]{%
+\topadjust[#1``{#2}]
+\leftadjust[#3``{#4}]
+\rightadjust[#5``{#6}]
+\botadjust[#7``{#8}]}
+
+\def\putsquarep<#1>(#2)[#3;#4`#5`#6`#7]{{%
+\setsqparms[#1]%
+\setpos(#2)%
+\settokens[#3]%
+\puthmorphism(\xpos,\ypos)[\tokenc`\tokend`{#7}]{\width}{\arrowtyped}b%
+\advance\ypos by \height
+\puthmorphism(\xpos,\ypos)[\tokena`\tokenb`{#4}]{\width}{\arrowtypea}a%
+\putvmorphism(\xpos,\ypos)[``{#5}]{\height}{\arrowtypeb}l%
+\advance\xpos by \width
+\putvmorphism(\xpos,\ypos)[``{#6}]{\height}{\arrowtypec}r%
+}}
+
+\def\putsquare{\@ifnextchar <{\putsquarep}{\putsquarep%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped;\width`\height>}}
+\def\square{\@ifnextchar< {\squarep}{\squarep
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped;\width`\height>}}
+ % #6
+\def\squarep<#1>[#2`#3`#4`#5;#6`#7`#8`#9]{{% % #2------>#3
+\setsqparms[#1]% % | |
+\xext=\width % | |
+\yext=\height % #7| |#8
+\topadjust[#2`#3`{#6}]% % | |
+\botadjust[#4`#5`{#9}]% % | |
+\leftadjust[#2`#4`{#7}]% % v v
+\rightadjust[#3`#5`{#8}]% % #4------>#5
+\begin{picture}(\xext,\yext)(\xoff,\yoff)% #9
+\putsquarep<\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped;\width`\height>%
+(0,0)[#2`#3`#4`#5;#6`#7`#8`{#9}]%
+\end{picture}%
+}}
+
+\def\putptrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\ypos by \height
+\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a%
+\putvmorphism(\xpos,\ypos)[`#6`{#8}]{\height}{\arrowtypeb}l%
+\advance\xpos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r%
+}}
+
+\def\putptriangle{\@ifnextchar <{\putptrianglep}{\putptrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\ptriangle{\@ifnextchar <{\ptrianglep}{\ptrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+
+\def\ptrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%% #5
+\settriparms[#1]%
+\width=\height % #2----->#3
+\xext=\width % | /
+\yext=\width % | /
+\topadjust[#2`#3`{#5}]% % #6| /#7
+\botadjust[#3``]% % | /
+\leftadjust[#2`#4`{#6}]% % | /
+\rightsladjust[#3`#4`{#7}]% % v v
+\begin{picture}(\xext,\yext)(\xoff,\yoff)% #4
+\putptrianglep<\arrowtypea`\arrowtypeb`\arrowtypec;\height>%
+(0,0)[#2`#3`#4;#5`#6`{#7}]%
+\end{picture}%
+}}
+
+\def\putqtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\ypos by\height
+\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a%
+\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}l%
+\advance\xpos by\height
+\putvmorphism(\xpos,\ypos)[`#6`{#9}]{\height}{\arrowtypec}r%
+}}
+
+\def\putqtriangle{\@ifnextchar <{\putqtrianglep}{\putqtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\qtriangle{\@ifnextchar <{\qtrianglep}{\qtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+
+\def\qtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%%
+\settriparms[#1]% #5
+\width=\height % #2----->#3
+\xext=\width % \ |
+\yext=\height % \ |
+\topadjust[#2`#3`{#5}]% % #6\ |#7
+\botadjust[#4``]% % \ |
+\leftsladjust[#2`#4`{#6}]% % \ |
+\rightadjust[#3`#4`{#7}]% % v v
+\begin{picture}(\xext,\yext)(\xoff,\yoff)% #4
+\putqtrianglep<\arrowtypea`\arrowtypeb`\arrowtypec;\height>%
+(0,0)[#2`#3`#4;#5`#6`{#7}]%
+\end{picture}%
+}}
+
+\def\putdtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b%
+\advance\xpos by \height \advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#7}]{\height}{\arrowtypea}l%
+\putvmorphism(\xpos,\ypos)[#4``{#8}]{\height}{\arrowtypeb}r%
+}}
+
+\def\putdtriangle{\@ifnextchar <{\putdtrianglep}{\putdtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\dtriangle{\@ifnextchar <{\dtrianglep}{\dtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+
+\def\dtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%%
+\settriparms[#1]% #2
+\width=\height % / |
+\xext=\width % / |
+\yext=\height % #5/ |#6
+\topadjust[#2``]% % / |
+\botadjust[#3`#4`{#7}]% % / |
+\leftsladjust[#3`#2`{#5}]% % v v
+\rightadjust[#2`#4`{#6}]% % #3----->#4
+\begin{picture}(\xext,\yext)(\xoff,\yoff)% #7
+\putdtrianglep<\arrowtypea`\arrowtypeb`\arrowtypec;\height>%
+(0,0)[#2`#3`#4;#5`#6`{#7}]%
+\end{picture}%
+}}
+
+\def\putbtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b%
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}r%
+\putvmorphism(\xpos,\ypos)[#4``{#7}]{\height}{\arrowtypea}l%
+}}
+
+\def\putbtriangle{\@ifnextchar <{\putbtrianglep}{\putbtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\btriangle{\@ifnextchar <{\btrianglep}{\btrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+
+\def\btrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%%
+\settriparms[#1]% #2
+\width=\height % | \
+\xext=\width % | \
+\yext=\height % #5| \#6
+\topadjust[#2``]% % | \
+\botadjust[#3`#4`{#7}]% % | \
+\leftadjust[#2`#3`{#5}]% % v v
+\rightsladjust[#4`#2`{#6}]% % #3----->#4
+\begin{picture}(\xext,\yext)(\xoff,\yoff)% #7
+\putbtrianglep<\arrowtypea`\arrowtypeb`\arrowtypec;\height>%
+(0,0)[#2`#3`#4;#5`#6`{#7}]%
+\end{picture}%
+}}
+
+\def\putAtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+{\multiply \height by2
+\puthmorphism(\xpos,\ypos)[#5`#6`{#9}]{\height}{\arrowtypec}b}%
+\advance\xpos by\height \advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[#4``{#7}]{\height}{\arrowtypea}l%
+\putmorphism(\xpos,\ypos)(1,-1)[``{#8}]{\height}{\arrowtypeb}r%
+}}
+
+\def\putAtriangle{\@ifnextchar <{\putAtrianglep}{\putAtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\Atriangle{\@ifnextchar <{\Atrianglep}{\Atrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+
+\def\Atrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%%
+\settriparms[#1]% #2
+\width=\height % / \
+\xext=\width % / \
+\yext=\height % #5/ \#6
+\topadjust[#2``]% % / \
+\botadjust[#3`#4`{#7}]% % / \
+\multiply \xext by2 % % v v
+\leftsladjust[#3`#2`{#5}]% % #3------------>#4
+\rightsladjust[#4`#2`{#6}]% % #7
+\begin{picture}(\xext,\yext)(\xoff,\yoff)%
+\putAtrianglep<\arrowtypea`\arrowtypeb`\arrowtypec;\height>%
+(0,0)[#2`#3`#4;#5`#6`{#7}]%
+\end{picture}%
+}}
+
+\def\putAtrianglepairp<#1>(#2)[#3;#4`#5`#6`#7`#8]{{%
+\settripairparms[#1]%
+\setpos(#2)%
+\settokens[#3]%
+\puthmorphism(\xpos,\ypos)[\tokenb`\tokenc`{#7}]{\height}{\arrowtyped}b%
+\advance\xpos by\height
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[\tokena``{#4}]{\height}{\arrowtypea}l%
+\putvmorphism(\xpos,\ypos)[``{#5}]{\height}{\arrowtypeb}m%
+\putmorphism(\xpos,\ypos)(1,-1)[``{#6}]{\height}{\arrowtypec}r%
+}}
+
+\def\putAtrianglepair{\@ifnextchar <{\putAtrianglepairp}{\putAtrianglepairp%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
+\def\Atrianglepair{\@ifnextchar <{\Atrianglepairp}{\Atrianglepairp%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
+
+\def\Atrianglepairp<#1>[#2;#3`#4`#5`#6`#7]{{%
+\settripairparms[#1]%
+\settokens[#2]%
+\width=\height
+\xext=\width
+\yext=\height
+\topadjust[\tokena``]%
+\vertadjust[\tokenb`\tokenc`{#6}]% % #2a
+\tempcountd=\tempcounta % / | \
+\vertadjust[\tokenc`\tokend`{#7}]% % / | \
+\ifnum\tempcounta<\tempcountd % #3/ #4 \#5
+\tempcounta=\tempcountd\fi % / | \
+\advance \yext by\tempcounta % / | \
+\advance \yoff by-\tempcounta % v v v
+\multiply \xext by2 % % #2b---->#2c---->#2d
+\leftsladjust[\tokenb`\tokena`{#3}]% % #6 #7
+\rightsladjust[\tokend`\tokena`{#5}]%
+\begin{picture}(\xext,\yext)(\xoff,\yoff)%
+\putAtrianglepairp
+<\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>%
+(0,0)[#2;#3`#4`#5`#6`{#7}]%
+\end{picture}%
+}}
+
+\def\putVtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\ypos by\height
+{\multiply\height by2
+\puthmorphism(\xpos,\ypos)[#4`#5`{#7}]{\height}{\arrowtypea}a}%
+\putmorphism(\xpos,\ypos)(1,-1)[`#6`{#8}]{\height}{\arrowtypeb}l%
+\advance\xpos by\height
+\advance\xpos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r%
+}}
+
+\def\putVtriangle{\@ifnextchar <{\putVtrianglep}{\putVtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\Vtriangle{\@ifnextchar <{\Vtrianglep}{\Vtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+
+\def\Vtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%%
+\settriparms[#1]% #5
+\width=\height % #2------------->#3
+\xext=\width % \ /
+\yext=\height % \ /
+\topadjust[#2`#3`{#5}]% % #6\ /#7
+\botadjust[#4``]% % \ /
+\multiply \xext by2 % % \ /
+\leftsladjust[#2`#3`{#6}]% % v v
+\rightsladjust[#3`#4`{#7}]% % #4
+\begin{picture}(\xext,\yext)(\xoff,\yoff)%
+\putVtrianglep<\arrowtypea`\arrowtypeb`\arrowtypec;\height>%
+(0,0)[#2`#3`#4;#5`#6`{#7}]%
+\end{picture}%
+}}
+
+\def\putVtrianglepairp<#1>(#2)[#3;#4`#5`#6`#7`#8]{{
+\settripairparms[#1]%
+\setpos(#2)%
+\settokens[#3]%
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(1,-1)[`\tokend`{#6}]{\height}{\arrowtypec}l%
+\puthmorphism(\xpos,\ypos)[\tokena`\tokenb`{#4}]{\height}{\arrowtypea}a%
+\advance\xpos by\height
+\putvmorphism(\xpos,\ypos)[``{#7}]{\height}{\arrowtyped}m%
+\advance\xpos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#8}]{\height}{\arrowtypee}r%
+}}
+
+\def\putVtrianglepair{\@ifnextchar <{\putVtrianglepairp}{\putVtrianglepairp%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
+\def\Vtrianglepair{\@ifnextchar <{\Vtrianglepairp}{\Vtrianglepairp%
+ <\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>}}
+
+\def\Vtrianglepairp<#1>[#2;#3`#4`#5`#6`#7]{{%
+\settripairparms[#1]%
+\settokens[#2]% #3 #4
+\xext=\height % #2a---->#2b---->#2c
+\width=\height % \ | /
+\yext=\height % \ | /
+\vertadjust[\tokena`\tokenb`{#4}]% #5\ #6 /#7
+\tempcountd=\tempcounta % \ | /
+\vertadjust[\tokenb`\tokenc`{#5}]% \ | /
+\ifnum\tempcounta<\tempcountd% v v v
+\tempcounta=\tempcountd\fi% #2d
+\advance \yext by\tempcounta
+\botadjust[\tokend``]%
+\multiply \xext by2
+\leftsladjust[\tokena`\tokend`{#6}]%
+\rightsladjust[\tokenc`\tokend`{#7}]%
+\begin{picture}(\xext,\yext)(\xoff,\yoff)%
+\putVtrianglepairp
+<\arrowtypea`\arrowtypeb`\arrowtypec`\arrowtyped`\arrowtypee;\height>%
+(0,0)[#2;#3`#4`#5`#6`{#7}]%
+\end{picture}%
+}}
+
+
+\def\putCtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(1,-1)[``{#9}]{\height}{\arrowtypec}l%
+\advance\xpos by\height
+\advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[#4`#5`{#7}]{\height}{\arrowtypea}l%
+{\multiply\height by 2
+\putvmorphism(\xpos,\ypos)[`#6`{#8}]{\height}{\arrowtypeb}r}%
+}}
+
+\def\putCtriangle{\@ifnextchar <{\putCtrianglep}{\putCtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\Ctriangle{\@ifnextchar <{\Ctrianglep}{\Ctrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+
+\def\Ctrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%%
+\settriparms[#1]% #2
+\width=\height % / |
+\xext=\width % / |
+\yext=\height % #5/ |
+\multiply \yext by2 % % / |
+\topadjust[#2``]% % / |
+\botadjust[#4``]% % v |
+\sladjust[#3`#2`{#5}]{\width}% % #3 |#6
+\tempcountd=\tempcounta % \ |
+\sladjust[#3`#4`{#7}]{\width}% % \ |
+\ifnum \tempcounta<\tempcountd % #7\ |
+\tempcounta=\tempcountd\fi % \ |
+\advance \xext by\tempcounta % \ |
+\advance \xoff by-\tempcounta % v v
+\rightadjust[#2`#4`{#6}]% % #4
+\begin{picture}(\xext,\yext)(\xoff,\yoff)%
+\putCtrianglep<\arrowtypea`\arrowtypeb`\arrowtypec;\height>%
+(0,0)[#2`#3`#4;#5`#6`{#7}]%
+\end{picture}%
+}}
+
+\def\putDtrianglep<#1>(#2,#3)[#4`#5`#6;#7`#8`#9]{{%
+\settriparms[#1]%
+\xpos=#2 \ypos=#3
+\advance\xpos by\height \advance\ypos by\height
+\putmorphism(\xpos,\ypos)(-1,-1)[``{#9}]{\height}{\arrowtypec}r%
+\advance\xpos by-\height \advance\ypos by\height
+\putmorphism(\xpos,\ypos)(1,-1)[`#5`{#8}]{\height}{\arrowtypeb}r%
+{\multiply\height by 2
+\putvmorphism(\xpos,\ypos)[#4`#6`{#7}]{\height}{\arrowtypea}l}%
+}}
+
+\def\putDtriangle{\@ifnextchar <{\putDtrianglep}{\putDtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+\def\Dtriangle{\@ifnextchar <{\Dtrianglep}{\Dtrianglep
+ <\arrowtypea`\arrowtypeb`\arrowtypec;\height>}}
+
+\def\Dtrianglep<#1>[#2`#3`#4;#5`#6`#7]{{%%
+\settriparms[#1]% #2
+\width=\height % | \
+\xext=\height % | \
+\yext=\height % | \#6
+\multiply \yext by2 % % | \
+\topadjust[#2``]% % | \
+\botadjust[#4``]% % | v
+\leftadjust[#2`#4`{#5}]% % #5| #3
+\sladjust[#3`#2`{#5}]{\height}% % | /
+\tempcountd=\tempcountd % | /
+\sladjust[#3`#4`{#7}]{\height}% % | /#7
+\ifnum \tempcounta<\tempcountd % | /
+\tempcounta=\tempcountd\fi % | /
+\advance \xext by\tempcounta % v v
+\begin{picture}(\xext,\yext)(\xoff,\yoff)% #4
+\putDtrianglep<\arrowtypea`\arrowtypeb`\arrowtypec;\height>%
+(0,0)[#2`#3`#4;#5`#6`{#7}]%
+\end{picture}%
+}}
+
+\def\setrecparms[#1`#2]{\width=#1 \height=#2}%
+% #4
+% #3b<-------#3a x #3b
+% ^ | |
+% / | |
+% #5/ | |
+% / | |
+% / | |
+% / | |
+% #3c |#6 |#3a x #5
+% \ | |
+% \ | |
+% #8\ | |
+% \ | |
+% \ | |
+% v v v
+% #3d<-------#3a x #3d
+% #8
+
+\def\recursep<#1`#2>[#3;#4`#5`#6`#7`#8]{{%
+\width=#1 \height=#2
+\settokens[#3]
+\settowidth{\tempdimen}{$\tokena$}
+\ifdim\tempdimen=0pt
+ \savebox{\tempboxa}{\hbox{$\tokenb$}}%
+ \savebox{\tempboxb}{\hbox{$\tokend$}}%
+ \savebox{\tempboxc}{\hbox{$#6$}}%
+\else
+ \savebox{\tempboxa}{\hbox{$\hbox{$\tokena$}\times\hbox{$\tokenb$}$}}%
+ \savebox{\tempboxb}{\hbox{$\hbox{$\tokena$}\times\hbox{$\tokend$}$}}%
+ \savebox{\tempboxc}{\hbox{$\hbox{$\tokena$}\times\hbox{$#6$}$}}%
+\fi
+\ypos=\height
+\divide\ypos by 2
+\xpos=\ypos
+\advance\xpos by \width
+\xext=\xpos \yext=\height
+\topadjust[#3`\usebox{\tempboxa}`{#4}]%
+\botadjust[#5`\usebox{\tempboxb}`{#8}]%
+\sladjust[\tokenc`\tokenb`{#5}]{\ypos}%
+\tempcountd=\tempcounta
+\sladjust[\tokenc`\tokend`{#5}]{\ypos}%
+\ifnum \tempcounta<\tempcountd
+\tempcounta=\tempcountd\fi
+\advance \xext by\tempcounta
+\advance \xoff by-\tempcounta
+\rightadjust[\usebox{\tempboxa}`\usebox{\tempboxb}`\usebox{\tempboxc}]%
+\bfig
+\putCtrianglep<-1`1`1;\ypos>(0,0)[`\tokenc`;#5`#6`{#7}]%
+\puthmorphism(\ypos,0)[\tokend`\usebox{\tempboxb}`{#8}]{\width}{-1}b%
+\puthmorphism(\ypos,\height)[\tokenb`\usebox{\tempboxa}`{#4}]{\width}{-1}a%
+\advance\ypos by \width
+\putvmorphism(\ypos,\height)[``\usebox{\tempboxc}]{\height}1r%
+\efig
+}}
+
+\def\recurse{\@ifnextchar <{\recursep}{\recursep<\width`\height>}}
+
+\def\puttwohmorphisms(#1,#2)[#3`#4;#5`#6]#7#8#9{{%
+% 1 and 2 are position, 3 and 4 are the nodes, 5 and 6 the labels,
+% 7 the distance between node centers and 8 & 9 are the arrow types.
+% #5
+% #3 ===========> #4
+% #6
+%
+\puthmorphism(#1,#2)[#3`#4`]{#7}0a
+\ypos=#2
+\advance\ypos by 20
+\puthmorphism(#1,\ypos)[\phantom{#3}`\phantom{#4}`#5]{#7}{#8}a
+\advance\ypos by -40
+\puthmorphism(#1,\ypos)[\phantom{#3}`\phantom{#4}`#6]{#7}{#9}b
+}}
+
+\def\puttwovmorphisms(#1,#2)[#3`#4;#5`#6]#7#8#9{{%
+% 1 and 2 are position, 3 and 4 are the nodes, 5 and 6 the labels,
+% 7 the distance between node centers and 8 & 9 are the arrow types.
+%
+% #3
+% ||
+% ||
+% #5 || #6
+% ||
+% ||
+% vv
+% #4
+%
+\putvmorphism(#1,#2)[#3`#4`]{#7}0a
+\xpos=#1
+\advance\xpos by -20
+\putvmorphism(\xpos,#2)[\phantom{#3}`\phantom{#4}`#5]{#7}{#8}l
+\advance\xpos by 40
+\putvmorphism(\xpos,#2)[\phantom{#3}`\phantom{#4}`#6]{#7}{#9}r
+}}
+
+\def\puthcoequalizer(#1)[#2`#3`#4;#5`#6`#7]#8#9{{%
+% #1 is (\xpos,\ypos), the next 6 are the nodes and arrow labels
+% #8 is the distance between each pair of nodes and #9 is the pos of #7
+% either a (above) or b (below)
+% #5 #7
+% #2 ===========> #3 --------> #4
+% #6
+%
+\setpos(#1)%
+\puttwohmorphisms(\xpos,\ypos)[#2`#3;#5`#6]{#8}11%
+\advance\xpos by #8
+\puthmorphism(\xpos,\ypos)[\phantom{#3}`#4`#7]{#8}1{#9}
+}}
+
+\def\putvcoequalizer(#1)[#2`#3`#4;#5`#6`#7]#8#9{{%
+% #1 is (\xpos,\ypos), the next 6 are the nodes and arrow labels
+% #8 is the distance between each pair of nodes and #9 is the pos of #7
+% either l (left) or r (right)
+%
+% #2
+% | |
+% | |
+% #5 | | #6
+% | |
+% | |
+% v v
+% #3
+% |
+% |
+% #7 |
+% |
+% v
+% #4
+%
+\setpos(#1)%
+\puttwovmorphisms(\xpos,\ypos)[#2`#3;#5`#6]{#8}11%
+\advance\ypos by -#8
+\putvmorphism(\xpos,\ypos)[\phantom{#3}`#4`#7]{#8}1{#9}
+}}
+
+\def\putthreehmorphisms(#1)[#2`#3;#4`#5`#6]#7(#8)#9{{%
+% Use: \putthreehmorphisms(xpos,ypos)[lnode`rnode;toplabel`midlabel%
+% botlabel]{distance}(toparrowtype,midarrowtype,botarrowtype){position}
+\setpos(#1) \settypes(#8)
+\if a#9 %
+ \vertsize{\tempcounta}{#5}%
+ \vertsize{\tempcountb}{#6}%
+ \ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
+\else
+ \vertsize{\tempcounta}{#4}%
+ \vertsize{\tempcountb}{#5}%
+ \ifnum \tempcounta<\tempcountb \tempcounta=\tempcountb \fi
+\fi
+\advance \tempcounta by 60
+\puthmorphism(\xpos,\ypos)[#2`#3`#5]{#7}{\arrowtypeb}{#9}
+\advance\ypos by \tempcounta
+\puthmorphism(\xpos,\ypos)[\phantom{#2}`\phantom{#3}`#4]{#7}{\arrowtypea}{#9}
+\advance\ypos by -\tempcounta \advance\ypos by -\tempcounta
+\puthmorphism(\xpos,\ypos)[\phantom{#2}`\phantom{#3}`#6]{#7}{\arrowtypec}{#9}
+}}
+
+%\def\putarc(#1,#2)[#3`#4`#5]#6#7#8{{%
+%\xpos #1
+%\ypos #2
+%\width #6
+%\arrowlength #6
+%\putbox(\xpos,\ypos){#3\vphantom{#4}}%
+%{\advance \xpos by\arrowlength
+%\putbox(\xpos,\ypos){\vphantom{#3}#4}}%
+%\horsize{\tempcounta}{#3}%
+%\horsize{\tempcountb}{#4}%
+%\divide \tempcounta by2
+%\divide \tempcountb by2
+%\advance \tempcounta by30
+%\advance \tempcountb by30
+%\advance \xpos by\tempcounta
+%\advance \arrowlength by-\tempcounta
+%\advance \arrowlength by-\tempcountb
+%\halflength=\arrowlength \divide\halflength by 2
+%\divide\arrowlength by 5
+%\put(\xpos,\ypos){\bezier{\arrowlength}(0,0)(50,50)(\halflength,50)}
+%\ifnum #7=-1 \put(\xpos,\ypos){\vector(-3,-2)0} \fi
+%\advance\xpos by \halflength
+%\put(\xpos,\ypos){\xpos=\halflength \advance\xpos by -50
+% \bezier{\arrowlength}(0,50)(\xpos,50)(\halflength,0)}
+%\ifnum #7=1 {\advance \xpos by
+% \halflength \put(\xpos,\ypos){\vector(3,-2)0}} \fi
+%\advance\ypos by 50
+%\vertsize{\tempcounta}{#5}%
+%\divide\tempcounta by2
+%\advance \tempcounta by20
+%\if a#8 %
+% \advance \ypos by\tempcounta
+% \putbox(\xpos,\ypos){#5}%
+%\else
+% \advance \ypos by-\tempcounta
+% \putbox(\xpos,\ypos){#5}%
+%\fi
+%}}
+
diff --git a/macros/latex209/contrib/misc/chapref.sty b/macros/latex209/contrib/misc/chapref.sty
new file mode 100644
index 0000000000..c3e16ff573
--- /dev/null
+++ b/macros/latex209/contrib/misc/chapref.sty
@@ -0,0 +1,108 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Chaprefs.sty - Style file to produce Reference sections on a per
+% Chapter bases (using BibTeX)
+%
+% Author: Peter J. Knaggs, School of Computing and Mathematics,
+% Teesside Polytechnic, Middlesbrogh, Cleveland, England.
+%
+%=======================================================================
+
+%
+% Define two variables:
+% \bib@sty - Holds the selected bibliography style
+% \bib@name - Holds the name of the current \include file
+%
+
+\def\bib@sty{plane}
+\def\bib@name{\jobname}
+
+%
+% Redefine \include to save the name of the included file in the variable
+% \bib@name. This definition simply extends the LaTeX definition by
+% redefining \include to call \@include, this is taken from the \include
+% definition in LaTeX.TeX
+%
+
+\def\include#1{\include@#1 }
+\def\include@#1 {\def\bib@name{#1}\@include#1 }
+
+%
+% Define a new `Preamble' flag to indicate chapter reference are required.
+% This is required as the contents of the .aux files is diferent dependent
+% on the state of this flag.
+%
+% The flag is initilay set to false. Ie., do not produce chapter reference,
+% but do produce a bibliography chapter.
+%
+% The preable command \chaprefs is defined to switch the flag to true. Ie.,
+% produce chapter reference, but not a bibliography chapter.
+%
+
+\newif\if@chpref \@chpreffalse
+\def\chaprefs{\@chpreftrue}
+
+%
+% Redefine \bibliographystyle to save the selected style in the variable
+% \bib@sty. This will be ouput to the .aux file for each included file.
+% Hence only one \bibliographystyle command is required.
+%
+
+\def\bibliographystyle#1{
+ \if@filesw\immediate\write\@auxout{\string\bibstyle{#1}}\fi
+ \def\bib@sty{#1}
+}
+
+%
+% Redefine \bibliography to use new factoring of the command.
+% It redefineds the constant \@Ref as used in \thebiblography to add a
+% "References" section, such that it now adds a "Biblography" chapter.
+%
+
+\def\bibliography#1{\if@filesw\immediate\write\@auxout{\string\bibdata{#1}}
+ \def\@Ref{\@bib} \@input{\jobname.bbl} \fi }
+
+%
+% define \references to write the \bibstyle and \bibdata commands to the
+% current .aux file. It then inputs the current .bbl file if it exists.
+%
+
+\def\references#1{\if@filesw\if@chpref\immediate\write\@auxout
+ {\string\bibstyle{\bib@sty}} \write\@auxout{\string\bibdata{#1}}
+ \fi \@input{\bib@name.bbl} \fi }
+
+%
+% Define two functions:
+% \@Ref to add a "References" section to the current % chapter.
+% \@bib to add a "Bibliography" chapter to the document.
+%
+% It is assumed that the bibliography will be at the end of the document.
+% Ie., no \references commands are given after the \bibliography command.
+%
+
+\def\@Ref{\section{References}}
+\def\@bib{\chapter*{Bibliography\@mkboth{BIBLIOGRAPHY}{BIBLIOGRAPHY}}
+ \addcontentsline{toc}{chapter}{Bibliography} }
+
+%
+% At the start of a .bbl file is the command \thebibliography. This has
+% been modified to add a "References" section to the current chapter. Note,
+% the definition of \thebibliography is taken from the ucthesis document
+% style.
+%
+% When the \bibliography command is used the definition of \@Ref is altered
+% to add a "Bibliography" chapter. This definition is not changed back,
+% thus the \bibliography command must only be given after all \references
+% commands have been processed.
+%
+
+\def\thebibliography#1{\@Ref\list{[\arabic{enumi}]}
+ {\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/misc/chessboard.tex b/macros/latex209/contrib/misc/chessboard.tex
new file mode 100644
index 0000000000..ebb3f20c09
--- /dev/null
+++ b/macros/latex209/contrib/misc/chessboard.tex
@@ -0,0 +1,162 @@
+\documentstyle[times,array]{csart}
+\begin{document}
+% chessboard.tex
+% sebastian rahtz august 29th 1989
+%
+% from Clark's cheq.sty, and article by W. Appelt in Tugboat 9.2,
+% 284--287, 1988
+%---------------
+% fonts
+% Derived from cheq.pl by Adrian F. Clark, 11th July 1989.
+% Can be used by LaTeX or by plain TeX.
+\font\Cheq=Cheq at 18pt % design size is 1pt; characters just legible at this size
+
+\def\CheqBBOnBlack{\Cheq\char 241 }
+\def\CheqBB{\Cheq\char 76 }
+\def\CheqBXOnBlack{\Cheq\char 240 }
+\def\CheqBX{\Cheq\char 75 }
+\def\CheqBKOnBlack{\Cheq\char 234 }
+\def\CheqBK{\Cheq\char 83 }
+\def\CheqBPOnBlack{\Cheq\char 184 }
+\def\CheqBP{\Cheq\char 80 }
+\def\CheqBQOnBlack{\Cheq\char 206 }
+\def\CheqBQ{\Cheq\char 81 }
+\def\CheqBROnBlack{\Cheq\char 229 }
+\def\CheqBR{\Cheq\char 84 }
+\def\CheqBSquare{\Cheq\char 120 }
+\def\CheqWBOnBlack{\Cheq\char 186 }
+\def\CheqWB{\Cheq\char 98 }
+\def\CheqWXOnBlack{\Cheq\char 251 }
+\def\CheqWX{\Cheq\char 107 }
+\def\CheqWKOnBlack{\Cheq\char 167 }
+\def\CheqWK{\Cheq\char 115 }
+\def\CheqWPOnBlack{\Cheq\char 185 }
+\def\CheqWP{\Cheq\char 112 }
+\def\CheqWQOnBlack{\Cheq\char 182 }
+\def\CheqWQ{\Cheq\char 113 }
+\def\CheqWROnBlack{\Cheq\char 160 }
+\def\CheqWR{\Cheq\char 116 }
+%--------------
+\newif\ifblackchess
+\newif\ifblackplaying
+\def\BB{\ifblackchess\CheqBBOnBlack\else\CheqBB\fi}
+\def\BX{\ifblackchess\CheqBXOnBlack\else\CheqBX\fi}
+\def\BK{\ifblackchess\CheqBKOnBlack\else\CheqBK\fi}
+\def\BP{\ifblackchess\CheqBPOnBlack\else\CheqBP\fi}
+\def\BQ{\ifblackchess\CheqBQOnBlack\else\CheqBQ\fi}
+\def\BR{\ifblackchess\CheqBROnBlack\else\CheqBR\fi}
+\def\WB{\ifblackchess\CheqWBOnBlack\else\CheqWB\fi}
+\def\WX{\ifblackchess\CheqWXOnBlack\else\CheqWX\fi}
+\def\WK{\ifblackchess\CheqWKOnBlack\else\CheqWK\fi}
+\def\WP{\ifblackchess\CheqWPOnBlack\else\CheqWP\fi}
+\def\WQ{\ifblackchess\CheqWQOnBlack\else\CheqWQ\fi}
+\def\WR{\ifblackchess\CheqWROnBlack\else\CheqWR\fi}
+%
+% Appelt's move macros, amended
+%
+\newcounter{chessmove}
+\setcounter{chessmove}{0}
+\def\Move#1#2#3#4#5#6{
+% [XQKBRP][a-h][1-9][-x][a-h][1-8]
+\def\hashthree{\ifcase#3\relax\or A\or B\or C\or D\or E\or F\or G\or H\fi}
+\def\hashsix{\ifcase#6\relax\or A\or B\or C\or D\or E\or F\or G\or H\fi}
+\ifblackplaying\relax\else\addtocounter{chessmove}{1}\par\thechessmove.
+\fi
+#1#2#3#4#5#6
+\typeout{#1 #2#3(\hashthree) #4 #5#6(\hashsix)}
+\expandafter%
+\def\csname #2@\hashthree\endcsname{\void}%
+\ifblackplaying\expandafter%
+\def\csname #5@\hashsix\endcsname{\csname B#1\endcsname}%
+\else\expandafter%
+\def\csname #5@\hashsix\endcsname{\csname W#1\endcsname}%
+\fi
+}
+%
+\def\move#1#2#3#4#5#6 {
+% [XQKBRP][a-h][1-8][-x][a-h][1-8]
+\if#3-
+\Move P#1#2#3#4#5
+\else\if#3x
+\Move P#1#2#3#4#5%
+\else
+\Move #1#2#3#4#5#6
+\fi\fi
+\ifblackplaying\blackplayingfalse\else\blackplayingtrue\fi
+}
+%-------------------
+\def\void{\ifblackchess\CheqBSquare\else\hfill\fi}
+%------ Initial settings of board -------------
+\makeatletter
+\def\a@H{\BR}
+\def\b@H{\BK}\def\c@H{\BB}\def\d@H{\BQ}
+\def\e@H{\BX}\def\f@H{\BK}\def\g@H{\BB}
+\def\h@H{\BR}
+% ps
+\def\a@G{\BP}\def\b@G{\BP}\def\c@G{\BP}
+\def\d@G{\BP}\def\e@G{\BP}\def\f@G{\BP}
+\def\g@G{\BP}\def\h@G{\BP}
+% blank squares
+%
+\def\a@F{\void}\def\b@F{\void}\def\c@F{\void}\def\d@F{\void}
+\def\e@F{\void}\def\f@F{\void}\def\g@F{\void}\def\h@F{\void}
+\def\a@E{\void}\def\b@E{\void}\def\c@E{\void}\def\d@E{\void}
+\def\e@E{\void}\def\f@E{\void}\def\g@E{\void}\def\h@E{\void}
+\def\a@D{\void}\def\b@D{\void}\def\c@D{\void}\def\d@D{\void}
+\def\e@D{\void}\def\f@D{\void}\def\g@D{\void}\def\h@D{\void}
+\def\a@C{\void}\def\b@C{\void}\def\c@C{\void}\def\d@C{\void}
+\def\e@C{\void}\def\f@C{\void}\def\g@C{\void}\def\h@C{\void}
+%
+\def\a@B{\WP}\def\b@B{\WP}\def\c@B{\WP}\def\d@B{\WP}\def\e@B{\WP}\def\f@B{\WP}
+\def\g@B{\WP}\def\h@B{\WP}
+%
+\def\a@A{\WR}\def\b@A{\WK}\def\c@A{\WB}\def\d@A{\WX}
+\def\e@A{\WQ}\def\f@A{\WB}\def\g@A{\WK}\def\h@A{\WR}
+%---------------------------------------------------
+%
+\def\blacksquare#1{\blackchesstrue#1\blackchessfalse}
+%
+\def\Showboard{
+\par\vspace{1cm}
+\centerline{Board after move \thechessmove\ of \ifblackplaying White
+\else Black \fi player}
+\par\vspace{1cm}
+\tabcolsep=0pt
+\centerline{\begin{tabular}{lcccccccc}
+\cline{2-9}
+8 \vline& \a@H\vline&\blacksquare{\b@H}\vline&\c@H\vline&\blacksquare{\d@H}\vline&\e@H\vline&\blacksquare{\f@H}\vline&
+\g@H\vline&\blacksquare{\h@H}\vline\\
+\cline{2-9}
+7 \vline& \blacksquare{\a@G}\vline&\b@G\vline&\blacksquare{\c@G}\vline&\d@G\vline&\blacksquare{\e@G}\vline&\f@G\vline&\blacksquare{\g@G}\vline&\h@G\vline\\
+\cline{2-9}
+6 \vline& \a@F\vline&\blacksquare{\b@F}\vline&\c@F\vline&\blacksquare{\d@F}\vline&\e@F\vline&\blacksquare{\f@F}\vline&
+\g@F\vline&\blacksquare{\h@F}\vline\\
+\cline{2-9}
+5 \vline& \blacksquare{\a@E}\vline&\b@E\vline&\blacksquare{\c@E}\vline&\d@E\vline&\blacksquare{\e@E}\vline&\f@E\vline&\blacksquare{\g@E}\vline&\h@E\vline\\
+\cline{2-9}
+4 \vline& \a@D\vline&\blacksquare{\b@D}\vline&\c@D\vline&\blacksquare{\d@D}\vline&\e@D\vline&\blacksquare{\f@D}\vline&
+\g@D\vline&\blacksquare{\h@D}\vline\\
+\cline{2-9}
+3 \vline& \blacksquare{\a@C}\vline&\b@C\vline&\blacksquare{\c@C}\vline&\d@C\vline&\blacksquare{\e@C}\vline&\f@C\vline&\blacksquare{\g@C}\vline&\h@C\vline\\
+\cline{2-9}
+2 \vline& \a@B\vline&\blacksquare{\b@B}\vline&\c@B\vline&\blacksquare{\d@B}\vline&\e@B\vline&\blacksquare{\f@B}\vline&
+\g@B\vline&\blacksquare{\h@B}\vline\\
+\cline{2-9}
+1 \vline& \blacksquare{\a@A}\vline&\b@A\vline&\blacksquare{\c@A}\vline&\d@A\vline&\blacksquare{\e@A}\vline&\f@A\vline&\blacksquare{\g@A}\vline&\h@A\vline\\
+\cline{2-9}
+&a&b&c&d&e&f&g&h\\
+\end{tabular}}
+\par
+}
+\makeatother
+
+\Showboard
+
+\move e2-e4 \move c7-c6 \move c2-c4
+\move d7-d5
+\move Kb1-d2 \move d5xe4 \move Kd2xe4 \move Kb8-d7
+\move Kg1-f3
+
+\Showboard
+
+\end{document}
diff --git a/macros/latex209/contrib/misc/chgbar.sty b/macros/latex209/contrib/misc/chgbar.sty
new file mode 100644
index 0000000000..c49e8be18c
--- /dev/null
+++ b/macros/latex209/contrib/misc/chgbar.sty
@@ -0,0 +1,157 @@
+% Change bar document-style option for LaTeX.
+%
+% Copyright (C) 1990 by David B. Johnson.
+%
+% dbj@titan.rice.edu (Dave Johnson)
+
+% These macros draw a solid bar down the right margin of the output,
+% covering a range of the input file that has been declared to be changed.
+%
+% The beginning and end of a change bar in the text are marked with
+% \chgbarbegin and \chgbarend, respectively. For example,
+%
+% Here is some sample text \chgbarbegin that was
+% changed\chgbarend{} and some that wasn't changed.
+%
+% The change bar is drawn continuously between the line of output
+% containing the \chgbarbegin and the line of output containing the
+% \chgbarend. These lines can end up on separate pages, and the
+% division at page boundaries is handled automatically.
+
+% Two dimensions control the size and placement of the change bars:
+% \chgbarwidth The width of a change bar
+% \chgbarsep The distance between the text and the change bar
+
+% Warning: it does not appear to be possible to do this completely
+% correctly, due to the time at which the verticle glue on a page is
+% finally set, and the way that page breaks are decided. With
+% \raggedbottom, this normally works fine. It hasn't been tested with
+% \flushbottom, but will probably behave worse. In strange rare
+% situations, a change bar might be drawn from the first line of a page
+% up off the top of a page; this can usually be fixed by slightly moving
+% the \chngbarend around, or by breaking a single change bar range
+% into two ranges.
+
+\newdimen\chgbarwidth \newdimen\chgbarsep
+\chgbarwidth 4pt
+\chgbarsep .25in
+
+\def\chgbarbegin{\ifhmode\@chgbar{-2}\else\@chgbar{-3}\fi}
+\def\chgbarend{\@chgbar{-4}\relax}
+
+\marginparpush 0pt
+
+% The remainder of this is hacked up based on the LaTeX 2.09 latex.tex.
+
+% copied from \marginpar
+\def\@chgbar#1{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\global
+ \count\@currbox#1}{\@floatpenalty\z@ \@fltovf
+ \def\@currbox{\@tempboxa}}\fi
+ \setbox\@tempboxa\vbox
+ \bgroup\end@float\@esphack}
+
+\newdimen\@chgbarbegin
+\newif\if@inchgbar \@inchgbarfalse
+
+\def\@addmarginpar{%
+\ifnum\count\@currbox = -2 % change bar begin from hmode
+ \global\@chgbarbegin\@pageht \global\advance\@chgbarbegin -\baselineskip
+ \global\@inchgbartrue
+ \@cons\@freelist\@currbox
+\else
+\ifnum\count\@currbox = -3 % change bar begin not from hmode
+ \global\@chgbarbegin\@pageht
+ \global\@inchgbartrue
+ \@cons\@freelist\@currbox
+\else
+\ifnum\count\@currbox = -4 % change bar end
+ \if@inchgbar\else\@latexbug\fi
+ \@tempdima\@pageht \advance\@tempdima -\@chgbarbegin
+ \nointerlineskip
+ \@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\chgbarsep
+ \else \hskip -\chgbarsep \fi
+\hbox{\vbox to 0pt{\vss
+ \hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@
+}}
+\hss}
+ \nointerlineskip
+ \global\@inchgbarfalse
+ \@cons\@freelist\@currbox
+\else
+ \@next\@marbox\@currlist{\@cons\@freelist\@marbox
+ \@cons\@freelist\@currbox}\@latexbug\@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \ifnum\@tempcnta <\z@ \global\setbox\@marbox\box\@currbox \fi
+ \@tempdima\@mparbottom \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox \ifdim\@tempdima >\z@
+ \@warning{Marginpar on page \thepage\space moved}\else\@tempdima\z@ \fi
+ \global\@mparbottom\@pageht \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\ht\@marbox\z@ \global\dp\@marbox\z@
+ \vskip -\@pagedp \vskip\@tempdima\nointerlineskip
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\marginparsep
+ \else \hskip -\marginparsep \hskip -\marginparwidth \fi
+ \box\@marbox \hss}
+ \vskip -\@tempdima
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}
+\fi\fi\fi}
+
+\def\@makecol{\setbox\@outputbox\box\@cclv
+ \if@inchgbar
+ \@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \@tempdima\ht\@outputbox \advance\@tempdima -\@chgbarbegin
+ \advance\@tempdima -\baselineskip
+ \setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@outputbox \nointerlineskip \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\chgbarsep
+ \else \hskip -\chgbarsep \fi
+ \hbox{\vbox to 0pt{\vss
+ \hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@}}\hss}}
+ \global\@chgbarbegin 0pt
+\fi
+ \ifvoid\footins\else\setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@outputbox\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}
+ \global\maxdepth\@maxdepth}
+
+\newenvironment{changebar}{\chgbarbegin}{\chgbarend}
diff --git a/macros/latex209/contrib/misc/chomsky.sty b/macros/latex209/contrib/misc/chomsky.sty
new file mode 100644
index 0000000000..6d33a27c14
--- /dev/null
+++ b/macros/latex209/contrib/misc/chomsky.sty
@@ -0,0 +1,158 @@
+% % chomsky.sty by Michael Barr. From TeXhax 1989, issue 54.
+% % See below, after \endinput, for documentation.
+% \documentstyle{article}
+% \textwidth=6.5in \leftmargin=0in
+% \begin{document}
+\unitlength=.001em
+
+\newcount\xa \newcount\xb \newcount\xc
+\newcount\ya \newcount\yb \newcount\yc \newcount\ym
+\newcount\Xa \newcount\Xb \newcount\Xc
+\newcount\Ya \newcount\Yb \newcount\Yc
+\newcount\hsep \newcount\vsep
+\newcount\tempa \newcount\tempb \newcount\tempc
+\newbox\boxa \newbox\boxb \newbox\boxc
+\newcount\offset \newcount\offseta \newcount\offsetb \newcount\offsetc
+\newcount \hsep \newcount \vsep
+\hsep=3000
+\newcount \wide \newcount \high
+\newcount\correction
+\newdimen\tempdimen
+\tempdimen=3.3333333pt
+\divide\tempdimen by \unitlength
+\correction=\tempdimen
+
+\def\chomsky{\bgroup\catcode`\/=\active \catcode`\[=1 \catcode`\]=2}
+\def\endchomsky{\egroup}
+
+\chomsky
+
+\gdef/#1;#2,#3/{{%
+\setbox\boxa=\hbox{${\rm#1}$}
+\offset=0 \setbox\boxb=\hbox{\strut#2}\offsetb=\offset
+\offset=0 \setbox\boxc=\hbox{\strut#3}\offsetc=\offset
+\xa=\wd\boxa \divide \xa by \unitlength
+\ya=\ht\boxa \divide \ya by \unitlength
+\xb=\wd\boxb \divide \xb by \unitlength
+\yb=\ht\boxb \divide \yb by \unitlength
+\xc=\wd\boxc \divide \xc by \unitlength
+\yc=\ht\boxc \divide \yc by \unitlength
+\ifnum\offsetb=0 \offsetb=\xb \divide \offsetb by 2 \fi
+\ifnum\offsetc=0 \offsetc=\xc \divide \offsetc by 2 \fi
+\ifnum\xc=0 \onebox \else \twobox \fi}}
+
+\gdef\onebox{{%
+\Xa=\offsetb
+\vsep=2000
+\Ya=\yb \advance \Ya by \vsep
+\wide=\xb
+\high=\yb \advance \high by \vsep {\divide \ya by 2 \global\advance
+ \high by \ya}
+\advance\wide by -\correction
+\begin{picture}(\wide,\high)
+\put(\Xa,\Ya){\makebox(0,0){\usebox{\boxa}}}
+\put(0,0){\usebox{\boxb}}
+\global\offset=\Xa
+\advance \Ya by -\ya \advance \Ya by -100
+\advance \vsep by -\ya \advance \vsep by -400
+\put(\Xa,\Ya){\line(0,-1){\vsep}}
+\end{picture}
+}}
+
+\gdef\twobox{{%
+\ifnum\yb<\yc \ym=\yc \else \ym=\yb \fi
+\Yb=\ym \advance \Yb by -\yb
+\Yc=\ym \advance \Yc by -\yc
+\Xc=\xb \advance \Xc by \hsep
+\vsep=\xb \advance \vsep by -\offsetb \advance \vsep by \offsetc
+ \advance \vsep by \hsep \divide \vsep by 2
+\Xa=\offsetb \advance \Xa by \vsep \advance\Xa by \correction
+\Ya=\ym \advance \Ya by \vsep
+\wide=\xb \advance \wide by \xc \advance \wide by \hsep
+\advance\wide by -\correction
+\high=\Ya {\divide \ya by 2 \global\advance \high by \ya}
+\begin{picture}(\wide,\high)(\correction,0)
+\put(\Xa,\Ya){\makebox(0,0){\usebox{\boxa}}}
+\put(0,\Yb){\usebox{\boxb}}
+\put(\Xc,\Yc){\usebox{\boxc}}
+\global\offset=\Xa
+\advance \Ya by -\ya \advance \Ya by -200
+\advance \vsep by -\ya \advance \vsep by -500
+{\advance\Xa by -\ya \advance\Xa by -200
+\put(\Xa,\Ya){\line(-1,-1){\vsep}}}
+\advance\Xa by \ya \advance \Xa by 200
+\put(\Xa,\Ya){\line(1,-1){\vsep}}
+\end{picture}
+}}
+
+\endchomsky
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+% \end{document}
+% \gdef/#1;#2,#3/{\lbrack$_{\rm#1}\,$#2 #3\rbrack$_{\rm#1}\,$}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Usage: \chomsky [/;,/] \endchomsky.
+ Can recurse.
+ E.g.,
+
+ \chomsky
+ [/S;[/NP;[/Det;The,/],[/N;man,/]/],%
+ [/VP;[/V_t;bit,/],[/NP;[/Det;a,/],[/N;dog,/]/]/]/]
+ \endchomsky
+
+ Gives:
+ S
+ / \
+ / \
+ / \
+ / \
+ / \
+ NP VP
+ / \ / \
+ / \ / \
+ Det N / \
+ | | Vt NP
+ The man | / \
+ bit Det N
+ | |
+ a dog
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Date: Mon, 22 May 89 22:49:14 EDT
+From: INHB000 <INHB%MCGILLC.BITNET@UWAVM.ACS.WASHINGTON.EDU>
+Subject: Macro to help display parsing trees
+Keywords: macros, parsing trees
+
+Paul Krause wanted some macros to help him display parsing trees. The
+enclosed is not the best possible solution, but it is a start. It can
+be improved in various ways. The most important is to reduce the number
+3000 that \hsep defaults to. It is that large only so that very short
+two word phrases will still have their parse lines; with a smaller value
+you come up to a shorter distance than latex can draw a slant line. The
+best thing is to use a smaller value, 1500 looks good, and increase it
+if the resultant line is too short. Then the positioning is not
+perfect. This appears to be the result of the boxes produced by the
+\picture environment being too wide by 3.333333pt. It might be better
+if the lines lower in the tree had steeper slope. This would introduce
+all sorts of complications.
+
+Some might object to the syntax. It was chosen to make the rather ugly
+recursive structure as readable as possible and, not coincidentally,
+come as close as possible to the alternate notation used in Chomsky's
+``Aspects of Syntax''. In fact, a different definition that reproduces
+that alternate notation appears at the end. I would have preferred the
+syntax without the slashes, but I could not figure out how to implement
+that. A couple of caveats. Since I have changed their \catcode's, [,]
+and / cannot be used inside the trees. Since I have never seen them so
+used, this seems safe. Of course, the brackets can all be replaced by
+braces and the opening slashes changed to \tree or something.
+
+The only sane way to use this macro is to define a key in your editor
+that produces the string [/;,/] and four backspaces with a single
+keystroke and leaves you in insert mode. This will help enormously in
+getting the syntax correct.
+
+Michael Barr
diff --git a/macros/latex209/contrib/misc/cites.sty b/macros/latex209/contrib/misc/cites.sty
new file mode 100644
index 0000000000..8e2ed5eacd
--- /dev/null
+++ b/macros/latex209/contrib/misc/cites.sty
@@ -0,0 +1,137 @@
+%
+% CITES (style option to DARTICLE) is an extracted and changed
+% part of the AIP style written by Charles Karney (Karney@PPC.MFEnet).
+% CITES DOCUMENT SUBSTYLE -- released 15 March 1988
+%
+% To use this give CITES as an optional argument to \documentstyle. The
+% main style should be DARTICLE. E.g.,
+% \documentstyle[12pt,german,cites]{darticle}
+
+% This provides
+% (1) Superscript reference numbers in citation and bibliography.
+% This is done by calling \numcite after \begin{document}.
+% You should put the references in the logically correct place, e.g.
+% "... as is given by Landau \cite{landau}. Next sentence ..."
+% \cite takes care of removing the preceding spaces and putting the
+% reference after the punctuation (e.g, "... Landau.$~7$ ...").
+
+% (2) Three or more consecutive reference numbers are represented as a
+% range. Thus 1,3,4,5,6,8,9 is printed as 1,3--6,8,9. No sorting is
+% performed; i.e., 1,3,2 is printed as such.
+% The cites style does this by default.
+
+% (3) \citenum and \citea give you more control over the appearance of
+% the citations. \citenum emits the plain citation number without
+% ornament as in "... as shown in Ref.~\citenum{foo}.". \citea puts
+% it's argument into the ornamentation for citations.
+% Thus \cite{foo} is equivalent to \citea{\citenum{foo}}.
+
+% (4) \bibnum{p} prints entries of the thebibliography environment in the
+% form #.
+% \bibnum{k} prints entries of the thebibliography environment in the
+% form [#]
+% \bibnum{h} prints entries of the thebibliography environment in the
+% form $^{#1}$
+% Default is \bibnum{k}.
+% If \numcite is used, \bibnum should appear after it.
+% G. Kruljac, MPI Stuttgart, kruljac@ds0mpi11, 13.03.89
+
+% CHANGES
+% 06.04.89 G. Kruljac, kruljac@ds0mpi11
+% - inserted commands \refincount and \@refincount to
+% offer a possibility for citation numbering inside
+% chapters, sections,...
+% Initially it is empty. The user can define it by i.e.
+% \refincount{\thechapter.} or \refincount{\thesubsection.}
+%
+% - corrections inside thebibliography for leftmargin
+% evaluations
+%
+%
+
+%\typeout{Document Substyle 'CITES'. Released 15 March 1988}
+\typeout{Document Substyle `CITES' modified by MPI FKF, Version 1.1, 06.04.89}
+
+% here we define the counter which should preceed the reference number
+\def\@refincount{}
+\def\refincount#1{\gdef\@refincount{#1}}
+
+% Superscript citations -- skip optional arg to \cite
+% Move citation after period and comma.
+\def\@cite#1#2{[{\@refincount#1\if@tempswa , #2\fi}]}
+
+\gdef\numcite{\bibnum{h}
+ \def\@cite##1##2{\unskip\nobreak\relax
+ \def\@tempa{$\m@th^{\hbox{\the\scriptfont0
+ \@refincount##1}}$}%
+ \futurelet\@tempc\@citexx}
+ \def\@citexx{\ifx.\@tempc\let\@tempd=\@citepunct\else
+ \ifx,\@tempc\let\@tempd=\@citepunct\else
+ \let\@tempd=\@tempa\fi\fi\@tempd}
+ \def\@citepunct{\@tempc%
+ \edef\@sf{\spacefactor=\the\spacefactor\relax}
+ \@tempa\@sf\@gobble}}
+
+\def\bibnumh{\hfil$\m@th^{\@refincount\arabic{enumi}}$}
+\def\bibnump{\hfil\@refincount\arabic{enumi}.}
+\def\bibnumk{\hfil[\@refincount\arabic{enumi}]}
+\def\bibnum#1{\if\string#1h \global\let\@bibnum=\bibnumh\else
+ \if\string#1k \global\let\@bibnum=\bibnumk\else
+ \if\string#1p \global\let\@bibnum=\bibnump\else
+ \global\let\@bibnum=\bibnumh%
+ \fi\fi\fi}
+\let\@bibnum=\bibnumk
+
+\def\thebibliography#1{\par%\clearpage%
+ \section*{\refname\@mkboth
+ {\uppercase{\refname}}{\uppercase{\refname}}}%
+ \list
+% {\@bibnum}{\settowidth\labelwidth{$\m@th{##1}$}
+ {\@bibnum}%
+ {\ifx\@bibnum\bibnumk%
+ \settowidth\labelwidth{[\@refincount#1]}
+ \else\ifx\@bibnum\bibnumh
+ \settowidth\labelwidth{$\m@th^{\@refincount#1}$}
+ \labelsep0pt\itemindent\labelwidth
+ \else\settowidth\labelwidth{\@refincount#1.}
+ \fi\fi
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \ifnum\itemindent=0\else\advance\itemindent-\leftmargin\fi
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+% \citenum emits the plain citation number without ornament
+% \citea puts it's argument into the ornamentation for citations
+% thus \cite{foo} is equivalent to \citea{\citenum{foo}}
+\def\citenum#1{{\def\@cite##1##2{##1}\cite{#1}}}
+\def\citea#1{\@cite{#1}{}}
+
+% Collapse citation numbers to ranges. Non-numeric and undefined labels
+% are handled. No sorting is done. E.g., 1,3,2,3,4,5,foo,1,2,3,?,4,5
+% gives 1,3,2-5,foo,1-3,?,4,5
+\newcount\@tempcntc
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@ifundefined
+ {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}%
+ \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne
+ \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}%
+ \else
+ \advance\@tempcntb\@ne
+ \ifnum\@tempcntb=\@tempcntc
+ \else\advance\@tempcntb\m@ne\@citeo
+ \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}}
+\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else\@citea%
+ \def\@citea{,\@refincount}%
+ \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else
+ {\advance\@tempcnta\@ne%
+ \ifnum\@tempcnta=\@tempcntb
+ \else \def\@citea{--\@refincount}\fi
+ \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi}
+
+
diff --git a/macros/latex209/contrib/misc/colors.sty b/macros/latex209/contrib/misc/colors.sty
new file mode 100644
index 0000000000..47d5ce9a4b
--- /dev/null
+++ b/macros/latex209/contrib/misc/colors.sty
@@ -0,0 +1,89 @@
+%% Save file as: COLORS.STY Source: FILESERV@SHSU.BITNET
+%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+% Name:
+% colors.sty
+% Author: Fred Knight <knight@ll.mit.edu>
+% Purpose:
+% Implement grayscale or color selection from LaTeX for PostScript.
+% Works with black-and-white and color PostScript printers.
+% A rainbow of colors is defined by default; you can add any
+% color if you know its RGB values, e.g., from $OPENWINHOME/lib/rgb.txt.
+% NOTE: RGB.TXT is stored as STY.COLORS_RGB_TXT on FILESERV and is in the
+% [.STY] directory on Niord.SHSU.edu (192.92.115.8)
+%
+% Examples:
+%-----1.
+% \documentstyle[colors,...]{...}
+%
+% \begin{verse}
+% \psred Roses are red;\\
+% \psblue The sky is blue;\\
+% \psgreen Pickles are green;\\
+% \psorange Colors are new.\\ \psblack
+%
+% \red{Strawberries are red too;}\\
+% \violet{But violets are never blue;}\\
+% \end{verse}
+%-----2.
+% \documentstyle[colors,...]{...}
+%
+% \def\psLightGoldenrod{\pssetrgbcolor{0.93}{0.86}{0.51}}
+% \def\LightGoldenrod#1{\psgsave\psLightGoldenrod#1\psgrestore}
+% \LightGoldenrod{I like Light Goldenrod for a border color.}
+% I like \psLightGoldenrod Light Goldenrod\psblack for a border color.
+% Usage:
+% \ps<color> : changes to <color>,
+% : e.g., \psred red \psblue not blue
+% \<color>{text} : outputs text in <color>,
+% : e.g., \red{strawberries}
+%
+% \pssetgray{f} : changes color to shade of gray
+% : f = 0 (black) to 1 (white)
+% Restrictions:
+% Only for Postscript---black & white or color!
+% Only for dvi-to-ps driver that understands:
+% \special{ps:: <Postscript commands>}
+% Modification History:
+% write, 19 Oct 90, FKK
+% alter \psred, \psorange, etc.; make a bw rainbow, 13 Nov 90, FKK
+% omit pscolor and psbw booleans, 26 Jun 91, FKK
+% add macros with arguments (see usage), 26 Jun 91, FKK
+% remove \tan (conflicts with tangent) but keep \pstan, 15 Apr 92, FKK
+%-------------------------------------------------------------------
+%
+% =====>> BASIC ACCESS TO POSTSCRIPT COLORS
+%
+% =====>> Usage: \pssetrgbcolor{red}{green}{blue}
+% where: 0 < red < 1, etc.
+% =====>> Note: B&W ps printers understand setrgbcolor!
+%
+\def\pssetrgbcolor#1#2#3{\immediate\special{ps:: #1 #2 #3 setrgbcolor}}
+\def\pssetgray#1{\immediate\special{ps:: #1 setgray}}
+\def\psgsave{\immediate\special{ps:: gsave}}
+\def\psgrestore{\immediate\special{ps:: grestore}}
+%
+% =====>> COMMANDS DERIVED FROM \pssetrgbcolor AND \pssetgray
+% =====>> TWO TYPES: SET A NEW COLOR (NO ARGUMENT), e.g., \psred
+% =====>> COLOR AN ARGUMENT, e.g., \red{Roses are red;}
+%
+\def\psgray#1{\pssetgray{#1}}
+\def\psblack{\psgray{0}}
+\def\black#1{\psgsave\psblack#1\psgrestore}
+\def\psred{\pssetrgbcolor{1}{0}{0}}
+\def\red#1{\psgsave\psred#1\psgrestore}
+\def\psorange{\pssetrgbcolor{1}{.65}{0}}
+\def\orange#1{\psgsave\psorange#1\psgrestore}
+\def\psyellow{\pssetrgbcolor{1}{1}{0}}
+\def\yellow#1{\psgsave\psyellow#1\psgrestore}
+\def\psgreen{\pssetrgbcolor{0}{1}{0}}
+\def\green#1{\psgsave\psgreen#1\psgrestore}
+\def\psblue{\pssetrgbcolor{0}{0}{1}}
+\def\blue#1{\psgsave\psblue#1\psgrestore}
+\def\psviolet{\pssetrgbcolor{.72}{.33}{.83}}
+\def\violet#1{\psgsave\psviolet#1\psgrestore}
+\def\pstan{\pssetrgbcolor{.5}{.5}{.2}}
+%conflicts with tangent%\def\tan#1{\psgsave\pstan#1\psgrestore}
+\def\psbrown{\pssetrgbcolor{.5}{.3}{.3}}
+\def\brown#1{\psgsave\psbrown#1\psgrestore}
+\def\pswhite{\psgray{1}}
+\def\white#1{\psgsave\pswhite#1\psgrestore}
diff --git a/macros/latex209/contrib/misc/commtest.tex b/macros/latex209/contrib/misc/commtest.tex
new file mode 100644
index 0000000000..6eb0ce3d02
--- /dev/null
+++ b/macros/latex209/contrib/misc/commtest.tex
@@ -0,0 +1,56 @@
+% An illustration of comment.sty by Victor Eijkhout.
+% This file belongs to comment.sty version 3.0 or later,
+% it is both plain TeX and LaTeX compatible.
+
+\def\plainname{plain}
+\ifx\fmtname\plainname
+ \input comment.sty
+\else
+ \documentstyle[comment]{article}
+ \begin{document}
+\fi
+
+\includecomment{thisone}
+\excludecomment{notthisone}
+
+This sentence
+\comment
+has
+\endcomment
+no verb.
+
+Check for\notthisone
+superfluous
+\endnotthisone
+spaces, and
+\thisone
+inclusion
+\endthisone
+of proper texts.
+
+% a test of the special comments
+\newcount\comlines
+\specialcomment{countedcomment}
+ {\comlines=-1\relax %note that the rest of the first line is also comment
+ \def\ThisComment##1{\global\advance\comlines1\relax}}
+ {\endgraf **Comment: \number\comlines\ line(s) removed**\endgraf}
+
+This is a line of text
+\countedcomment
+Oneline
+\endcountedcomment
+another line of text
+\countedcomment
+One line
+Two line
+Three line
+\endcountedcomment
+last line of text
+
+\edef\byebye{
+\if\fmtname\plainname
+ \noexpand\csname bye\noexpand\endcsname
+\else
+ \noexpand\end{document}
+\fi}
+\byebye \ No newline at end of file
diff --git a/macros/latex209/contrib/misc/cprog.sty b/macros/latex209/contrib/misc/cprog.sty
new file mode 100644
index 0000000000..0fb80c6076
--- /dev/null
+++ b/macros/latex209/contrib/misc/cprog.sty
@@ -0,0 +1,230 @@
+% cprog.tex (or cprog.sty) - formatting of C programs
+% By \'Eamonn McManus <emcmanus@cs.tcd.ie>. This file is not copyrighted.
+% $Id: cprog.tex,v 1.4 90/09/12 23:21:26 emcmanus Exp $
+
+% This allows C programs to be formatted directly by TeX. It can be
+% invoked by \cprogfile{filename} or (in LaTeX) \begin{cprog} ...
+% \end{cprog} or (in plain TeX) \cprog ... \end{cprog}. In LaTeX, the
+% alternative form \begin{cprog*} is allowed, where spaces in C strings
+% are printed using the `square u' character (like LaTeX {verbatim*}).
+% In plain TeX, you have to use \csname cprog*\endcsname for this (sorry).
+% If you are using \cprogfile, say \cprogttspacetrue beforehand if you
+% want this effect.
+
+% The formatting is (necessarily) simple. C text is set in a normal Roman
+% font, comments in a slanted font, and strings in a typewriter font, with
+% spaces optionally made visible as the `square u' symbol. Tabs are
+% expanded to four spaces (this does not look good when comments are
+% aligned to the right of program text). Some pairs of input characters
+% appear as single output characters: << <= >> >= != -> are respectively
+% TeX's \ll \le \gg \ge \ne \rightarrow. Say \cprogpairsfalse to disable
+% this.
+
+% You can escape to TeX within cprog text by defining an escape character.
+% The character @ is suitable for C and Pascal. I have not tested other
+% characters so they may interact badly with their existing definitions here.
+% To define @ as the escape character, do \cprogescape@. Then within text
+% you can do @ followed by TeX commands. These commands will be in a TeX
+% group with the \catcodes of \{}% as normal. The commands are terminated
+% by a newline, which is not considered part of the program text.
+
+% The fonts below can be changed to alter the setting of the various parts
+% of the program. The \cprogbaselineskip parameter can be altered to
+% change the line spacing. LaTeX's \baselinestretch is taken into account
+% too. The indentation applied to the whole program is \cprogindent,
+% initially 0. Before and after the program there are skips of
+% \beforecprogskip and \aftercprogskip; the default values are \parskip
+% and 0 respectively (since there will often be a \parskip after the
+% program anyway).
+
+% If the source text is Pascal or Modula-2, say \pascaltrue or \modulatrue
+% (respectively) before formatting it. This makes (* *) be recognised for
+% comments instead of /* */. Braces {} are also recognised for Pascal.
+% \pascalfalse or \modulafalse as appropriate restores the default of C.
+
+% This package works by making a large number of characters active. Since
+% even spaces are active, it is possible to examine the next character in
+% a macro by making it a parameter, rather than using \futurelet as one
+% would normally do. This is more convenient, but the coding does mean
+% that if the next character itself wants to examine a character it may
+% look at a token from the macro rather than the input text. I think that
+% all cases that occur in practice have been looked after.
+
+% The macros could still do with some work. For example, the big macro
+% defined with [] taking the place of {} could be recoded to use {} and so
+% be more legible. The internal macros etc should have @ in their names,
+% and should be checked against LaTeX macros for clashes.
+
+% Allow multiple inclusion to go faster.
+
+\ifx\undefined\cprogsetup % The whole file.
+
+% Define the fonts used for program text, comments, and strings.
+% Note that if \it is used for \ccommentfont, something will need to
+% be done about $ signs, which come out as pounds sterling.
+\let\ctextfont=\rm \let\ccommentfont=\sl \let\cstringfont=\tt
+
+% Parameters. Unfortunately \newdimen is \outer (\outerness is a mistake)
+% so we need a subterfuge in case we are skipping the file.
+\csname newdimen\endcsname\cprogbaselineskip \cprogbaselineskip=\baselineskip
+\csname newdimen\endcsname\cprogindent \cprogindent=0pt
+\csname newdimen\endcsname\cprogwidth % Gets default=\hsize when cprog invoked.
+\csname newskip\endcsname\beforecprogskip \beforecprogskip=\parskip
+\csname newskip\endcsname\aftercprogskip \aftercprogskip=0pt
+\csname newif\endcsname\ifcprogttspace
+\csname newif\endcsname\ifcprogpairs \cprogpairstrue
+\csname newif\endcsname\ifpascal
+\csname newif\endcsname\ifmodula % Same as Pascal but no {comments}.
+{\def\junk{\fi\fi\fi\fi}} % If skipping.
+
+\let\cprogesc\relax
+\begingroup \catcode`~=\active
+\gdef\cprogescape#1{%
+ {\catcode`~=\active \uccode`~=`#1 \aftergroup\cprogescont
+ \uppercase{\aftergroup~}}}
+\gdef\cprogescont#1{%
+ \def\cprogesc{%
+ \makeactive#1\def#1{%
+ \begingroup \catcode`\\0 \catcode`{1 \catcode`}2 \catcode`\%14
+ \catcode` 10 \clinegroup{}}}}
+\endgroup
+
+\def\makeactive#1{\catcode`#1=\active} \def\makeother#1{\catcode`#1=12}
+{\obeyspaces\gdef\activespace{ } \obeylines\gdef\activecr{^^M}}
+{\catcode`|=\catcode`\\ \makeactive\\ |gdef|activebackslash{\}}
+{\catcode9=\active \gdef\activetab{^^I}}
+
+% The following group makes many characters active, so that their catcodes
+% in the \cprogchars macro are active, allowing them to be defined. We
+% could alternatively define more stuff like \activebackslash and use
+% \expandafter or (carefully) \edef to expand these in the macro.
+\begingroup
+\catcode`[=\catcode`{ \catcode`]=\catcode`}
+\makeactive! \makeactive" \makeactive' \makeactive( \makeactive* \makeactive-
+\makeactive/ \makeactive< \makeactive> \makeactive? \makeactive^ \makeactive_
+\makeactive\{ \makeactive| \makeactive\}
+\gdef\activestar[*]
+\gdef\cprogchars[%
+ \makeother##\makeother$\makeother&\makeother\%\makeother^%
+ \makeactive"\makeactive'\makeactive*\makeactive?\makeactive{\makeactive}%
+ \makeactive}\makeactive\\\makeactive_\expandafter\makeactive\activetab%
+ \makeactive!\makeactive<\makeactive>\makeactive-\makeactive|%
+ \ifcprogpairs
+ \def!##1[\ifx=##1$\ne$\else\string!\null##1\fi]%
+ \def-##1[\ifx>##1$\rightarrow$\else$\string-$##1\fi]%
+ % We use \aftergroup in < and > to deal with the fact that #1 might
+ % itself examine the following character.
+ \def<##1[[$\ifx<##1\ll$\else\ifx=##1\le$\else
+ \ifx>##1\ifpascal\ne$\else\string<$\aftergroup>\fi
+ \else \string<$\aftergroup##1\fi\fi\fi]]%
+ \def>##1[[$\ifx>##1\gg$\else\ifx=##1\ge$\else
+ \string>$\aftergroup##1\fi\fi]]%
+ \else \def![\string!\null]% Avoid !` ligature.
+ \def-[$\string-$]\def<[$\string<$]\def>[$\string>$]%
+ \fi
+ \def?[\string?\null]% Avoid ?` ligature.
+ \def"[\cquote"[\tt\string"]]\def'[\cquote'[\tt\ttquote]]\def*[$\string*$]%
+ \ifmodula \pascaltrue \fi % Except that {...} is used for sets.
+ \ifpascal
+ \ifmodula \dulllbrace \else
+ \def{[\begingroup \dulllbrace{\ccommentsetup\def}[\/\endgroup }]]%
+ \fi \makeactive(\let(=\pascalcomment \makeactive^\def^[$\uparrow$]%
+ \else \dulllbrace\makeactive/\let/=\ccomment
+ \fi
+ \def}[$\}$]\def|[$\string|$]\def~[$\sim$]\let_\_%
+ \expandafter\def\activebackslash[$\backslash$]%
+ \obeyspaces \expandafter\def\activespace[\leavevmode\space]%
+ \expandafter\def\activetab[\ \ \ \ ]%
+ \obeylines \expandafter\def\activecr[\strut\par]]
+\gdef\cprogarg[\expandafter\def\activebackslash##1[\ifx##1e\let\next\cprogend
+ \else$\backslash$\let\next##1\fi\next]\eatcr]
+\gdef\cprogend nd#1{cprog#2}[\endcprogarg] % #1 can be space, #2 *.
+\gdef\dulllbrace[\def{[$\{$]]
+\endgroup
+
+\chardef\ttquote=13 % Undirected single quote.
+\begingroup \makeactive" \makeactive' \makeactive!
+\gdef\cquote#1#2{% #1 is the quote, " or ', #2 how to set it.
+ \begingroup #2\cstringfont \makeactive\\%
+ \ifpascal \makeother\\\makeother^%
+ \else \expandafter\let\activebackslash\quotebackslash
+ \fi
+ \expandafter\edef\activespace{\ifcprogttspace\char`\ \else\ \fi}%
+ \expandafter\let\activecr=\unclosedstring
+ \def!{\string!\null}% No !` ligature.
+ \makeother*\makeother-\makeother/\makeother<\makeother>%
+ \makeother_\makeother\{\makeother\}\makeother|\makeother~%
+ \ifx"#1\let'\ttquote \else \makeother"\fi
+ \def#1{#2\endgroup}}
+\endgroup
+\csname newhelp\endcsname\cprogunclosedstr{%
+A string or character constant earlier in the line was unclosed.^^JSo
+I'm closing it now.}
+\def\unclosedstring{%
+ \escapechar-1%
+ \errhelp\cprogunclosedstr
+ \errmessage{Unclosed string}%
+ \endgroup}
+\newlinechar=`^^J
+\def\quotebackslash#1{\char`\\%
+ \expandafter\ifx\activecr#1\strut\par
+ \else\if'\noexpand#1\ttquote\else\string#1\fi\fi}
+
+% In a comment, we shrink the width of the opening / to that of a space so
+% that the stars in multiline comments will line up. We also shrink the
+% closing * for symmetry, but not in Pascal where it looks nasty.
+% Note that \end{cprog} is not recognised in strings or comments.
+\def\spacebox#1{\leavevmode \hbox to \spaceskip{#1\hss}}
+
+\begingroup \makeactive* \makeactive! \makeother/
+\gdef\ccommentsetup{\ccommentfont \makeother-\makeother'\makeother"\makeother/%
+ \def!{\string!\null}\expandafter\def\activebackslash{$\backslash$}}
+\gdef\ccomment#1{%
+ \let\next\relax
+ \ifx#1*\bgroup \ccommentsetup
+ \spacebox{\ctextfont\string/}*%
+ \makeactive*\def*{\commentstar/}%
+ \else\if\noexpand#1/\begingroup //\ccommentsetup \clinegroup\activecr
+ \else \string/\let\next#1%
+ \fi\fi\next}
+\gdef\pascalcomment#1{%
+ \ifx#1*\bgroup \ccommentsetup \let\next\dulllbrace \makeother(%
+ \spacebox{\ctextfont\string(}*\makeactive*\def*{\commentstar)}%
+ \else (\let\next#1\fi \next}
+\obeylines \long\gdef\clinegroup#1#2^^M{#2\endgroup#1}%
+\endgroup
+\def\commentstar#1#2{%
+ {\if#1\noexpand#2\egroup \ifpascal\else\aftergroup\spacebox\fi\fi}{$*$}#2}
+
+% We usually have an active ^^M after \cprog or \begin{cprog}.
+\def\eatcr#1{{\expandafter\ifx\activecr#1\else\aftergroup#1\fi}}
+
+% Expand to stretch and shrink (plus and minus) of parameter #1.
+\def\stretchshrink#1{\expandafter\eatdimenpart\the#1 \end}
+\def\eatdimenpart#1 #2\end{#2}
+
+\ifx\undefined\baselinestretch \def\baselinestretch{1}\fi
+
+\def\cprogsetup{\ctextfont \cprogchars \parskip=0pt\stretchshrink\parskip
+ \ifdim \cprogwidth=0pt \else \hsize\cprogwidth \fi
+ \cprogesc \spaceskip\fontdimen2\font \xspaceskip\spaceskip
+ \baselineskip=\baselinestretch\cprogbaselineskip \parindent=\cprogindent
+ \vskip\beforecprogskip}
+\def\endcprog{\endgroup \vskip\aftercprogskip}
+\def\cprogfile#1{\begingroup \cprogsetup \input#1\endcprog}
+\def\cprog{\begingroup \cprogttspacefalse \cprogsetup \cprogarg}
+% Like {verbatim*}, {cprog*} uses `square u' for spaces in quoted strings.
+\expandafter\def\csname cprog*\endcsname{%
+ \begingroup \cprogttspacetrue \cprogsetup \cprogarg}
+\expandafter\let\csname endcprog*\endcsname=\endcprog
+% In LaTeX we need to call \end{cprog} properly to close the environment,
+% whereas in plain TeX this will end the job. The test for LaTeX is not
+% bulletproof, but most plain TeX documents don't refer to the LaTeX logo.
+\ifx\undefined\LaTeX \let\endcprogarg=\endcprog
+\else \def\endcprogarg{\ifcprogttspace\end{cprog*}\else\end{cprog}\fi}
+\fi
+
+\fi % \ifx\undefined\cprogsetup
+
+\endinput
+
diff --git a/macros/latex209/contrib/misc/cup.sty b/macros/latex209/contrib/misc/cup.sty
new file mode 100644
index 0000000000..ab53a7f491
--- /dev/null
+++ b/macros/latex209/contrib/misc/cup.sty
@@ -0,0 +1,1053 @@
+% SVLNCS DOCUMENT STYLE -- Released 23 march 1989
+% by Marc Shapiro shapiro@sor.inria.fr
+% Adapted from ARTICLE.STY and ART12.STY released 4 September 1986
+% for LaTeX version 2.09, Copyright (C) 1986 by Leslie Lamport
+
+% Use like this:
+% \documentsyle{svlncs} % no options
+% \begin{document}
+% \title{The Story of my Life} % Capitalized
+% \author{F. Bar\and L. User} % no space before \and
+% \affiliation{The University of Nowhere}
+% \maketitle
+% \begin{abstract}
+% ...
+% \end{abstract}
+% \section{INTRODUCTION} % SECTION TITLES IN UPPER CASE
+% ...
+% \subsection{This is an Interesting Subsection} % Capitalized
+% ...
+% \subsubsection{Proof 1} % \subsubsection for proofs only,
+% ... % in math works only !
+% \bibliography{...} % no \bibliographystyle !
+% \end{document}
+% Uses the `paren' bibliography style. If you don't have it, retrieve file
+% btxbst.doc from the latex-style repository; it tells you how to
+% build paren.bst
+
+\typeout{Document Style SVLNCS, for conference proceedings printed in
+`Springer-Verlag Lecture Notes in Computer Science'}
+
+
+% PREPARING A FOREIGN LANGUAGE VERSION:
+% (shapiro@inria 18-jan-88)
+%
+% This document style is for documents prepared in the English language.
+% To prepare a version for another language, various English words must
+% be replaced. To do so, just change the definition of the following
+% macros (may be done in an option file):
+% \contentsname
+% \listfigurename
+% \listtablename
+% \indexname
+% \refname
+% \figurename
+% \figuresepname
+% \tablename
+% also change the definition of \today
+% also change titlepage.sty
+% for French, add \frenchspacing
+
+% Only one type size: 12 pt
+\def\@ptsize{2}
+
+% Two-side or one-side printing.
+%
+% \@twosidefalse % Default is one-sided printing.
+\def\ds@twoside{\@twosidetrue % Defines twoside option.
+ \@mparswitchtrue} % Marginpars go on outside of page.
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt}
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+\def\@listi{\parsep 4.5pt plus 2pt minus 1pt
+ \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+% SIDE MARGINS:
+\oddsidemargin 0.2 cm % Note that \oddsidemargin = \evensidemargin
+\evensidemargin 0.2 cm
+\marginparwidth 2cm
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -68pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 75pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+% DIMENSION OF TEXT:
+% \textheight is the height of text (including footnotes and figures,
+% excluding running head and foot).
+
+\textheight = 23.5cm
+\advance\textheight by \topskip
+\textwidth 15.6cm % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 8.4pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 10.8pt plus 4pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 14pt plus 2pt minus 4pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 14pt plus 4pt minus 4pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 14pt plus 2pt minus 4pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 10pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 10pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 7pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip=2.5ex plus 1pt minus 1pt % Extra vertical space between paragraphs.
+\parindent 0em % Width of paragraph indentation.
+\topsep 10pt plus 4pt minus 6pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 3pt plus 2pt minus 2pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+\itemsep 5pt plus 2.5pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\z@}{-2.5ex plus -1ex minus
+ -.2ex}{1pt plus 1pt}{\large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-2.25ex plus -1ex minus
+ -.2ex}{1pt plus 1pt}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{3.25ex plus
+ 1ex minus .2ex}{-1em}{\normalsize\it}}
+
+% Default initializations of \...mark commands. (See below for their
+% us in defining page styles.
+%
+
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{2}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section and subsection counters to zero
+% -- redefine the section counter to produce appendix numbers
+% -- redefine the \section command if appendix titles and headings are
+% to look different from section titles and headings.
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\parsep 5pt plus 2.5pt minus 1pt
+
+\def\@listi{\leftmargin\leftmargini}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+%\newdimen\descriptionmargin
+%\descriptionmargin=3em
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+% The macro \@eqnnum defines how equation numbers are to appear in equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero.
+%
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+\tabcolsep 6pt % Half the space between columns in a tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is stepped.
+% Counter OLDCTR must already be defined.
+
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \subsection command writes a
+% \contentsline{subsection}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If subsections are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \thesubsection. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table' environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@section,
+% \l@subsection, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note that \section is level 1,
+% \subsection is level 2, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+
+% TABLEOFCONTENTS
+%
+% ++++ Multilingual (shapiro@inria 19-jan-88)
+\def\contentsname{Contents}
+\def\tableofcontents{\section*{\contentsname\@mkboth{\uppercase
+ {\contentsname}}{\uppercase{\contentsname}}}
+ \@starttoc{toc}}
+
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} % space above part line
+ \begingroup
+ \@tempdima 3em % width of box holding part number, used by
+ \parindent \z@ \rightskip \@pnumwidth %% \numberline
+ \parfillskip -\@pnumwidth
+ {\large \bf % set line in \large boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak % Never break after part entry
+ \endgroup}
+
+\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break
+ \addvspace{1.0em plus 1pt} % space above toc entry
+ \@tempdima 1.5em % width of box holding section number
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+
+% LIST OF FIGURES
+%
+% ++++ Multilingual (shapiro@inria 19-jan-88)
+\def\listfigurename{List of Figures}
+\def\listoffigures{\section*{\listfigurename\@mkboth
+ {\uppercase{\listfigurename}}{LISTE DES FIGURES\uppercase
+ {\listfigurename}}}\@starttoc{lof}}
+
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+% LIST OF TABLES
+%
+% ++++ Multilingual (shapiro@inria 19-jan-88)
+\def\listtablename{List of Tables}
+\def\listoftables{\section*{\listtablename\@mkboth
+ {\uppercase{\listtablename}}{\uppercase{\listtablename}}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus -.07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+% ++++ Multilingual (shapiro@inria 19-jan-88)
+\def\refname{References}
+\def\thebibliography#1{\section*{\refname\@mkboth
+ {\uppercase{\refname}}{\uppercase{\refname}}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+\def\@biblabel#1{#1\hfill} % Produces the label for a \bibitem[...]
+ % command.
+\def\@cite#1{#1} % Produces the output of the \cite command.
+
+% extra space produced between multiple citations, e.g.
+% \cite{foo87,bar88} --> Foo (1987), Bar (1988a)
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{, \penalty\@m}\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
+
+% \bibliographystyle{paren} % Foo (1987), Foo and Bar (1988) style
+\immediate\write\@auxout{\string\bibstyle{paren}}
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+
+\newif\if@restonecol
+
+% ++++ Multilingual (shapiro@inria 22-jan-88)
+\def\indexname{Index}
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{\indexname}]
+ \@mkboth{\uppercase{\indexname}}{\uppercase{\indexname}}\thispagestyle
+ {plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+\def\@idxitem{\par\hangindent 40pt}
+
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@} % The \hrule has default height of .4pt .
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth).
+%
+% The following macro indents all lines of the footnote by 10pt, and
+% indents the first line of a new paragraph by 1em. To change these
+% dimensions, just substitute the desired value for '10pt' [in both
+% places] or '1em'. The mark is flushright against the footnote.
+% \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+% \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+%
+% A simpler macro is used, in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. Thus, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+% changed 25 Jun 86 to fix according to Howard Trickey:
+% instead of \unhbox\@tempboxa\par we do #1: #2\par
+% ++++ Multilingual (shapiro 30-mar-88)
+\def\figuresepname{: }
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1{\figuresepname}#2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ #1{\figuresepname}#2\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+
+% FIGURE
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+% ++++ Multilingual (shapiro@inria 11-mar-88)
+\def\figurename{Figure}
+\def\fnum@figure{\figurename{} \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+% ++++ Multilingual (shapiro@inria 11-mar-88)
+\def\tablename{Table}
+\def\fnum@table{\tablename{} \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+
+% \maketitle ==
+% BEGIN
+% \par
+% \begingroup
+% redefine \@makefnmark so footnote marks take zero space (this make
+% centering look better)
+% \thefootnote == \fnsymbol{footnote} % to number by *, dagger, etc.
+% if @twocolumn = true
+% then \twocolumn[\@maketitle]
+% else \@maketitle
+% fi
+% \thispagestyle{plain}
+% \@thanks % \thanks defines \@thanks to have \footnotetext commands for
+% % producing footnotes.
+% \endgroup
+% END
+
+\def\affiliation#1{\gdef\@affiliation{#1}}
+
+\def\and{, }
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@affiliation{}\let
+ \thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em % Vertical space above title.
+ \begin{flushleft}
+ {\LARGE \@title \par} % Title set in \LARGE size.
+ \vskip 1.5em % Vertical space after title.
+ {\large % Authors aligned on a single line,
+ \lineskip .5em % in upper case
+ \uppercase{\@author}}
+ \vskip 1em % Vertical space after author.
+ \@affiliation % Affiliation of author
+ \end{flushleft} % No date
+ \par
+ \vskip 1.5em} % Vertical space after date.
+
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\list{}{\listparindent 0pt
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 2ex plus 1pt}\item[]
+\fi}
+
+\def\endabstract{\if@twocolumn\else\endlist\fi}
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \sectionmark, ... , where
+% \sectionmark{TEXT} is called by \section to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'left' mark. Works like TeX's
+% \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'right' mark. Works like TeX's
+% \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \section command and
+% the right mark is changed by a \subsection command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+% Commands like \tableofcontents that should set the marks in some page styles
+% use a \@mkboth command, which is \let by the pagestyle command (\ps@...)
+% to \markboth for setting the heading or \@gobbletwo to do nothing.
+
+\mark{{}{}} % Initializes TeX's marks
+
+% \ps@empty and \ps@plain defined in LATEX.TEX
+
+% Definition of 'headings' page style
+% Note the use of ##1 for parameter of \def\sectionmark inside the
+% \def\ps@headings.
+%
+
+\if@twoside % If two-sided printing.
+\def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@evenhead{\rm \thepage\hfil \sl \leftmark}% Left heading.
+\def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage}% Right heading.
+\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}%
+\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else % If one-sided printing.
+\def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage}% Heading.
+\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+% Definition of 'myheadings' page style.
+%
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil \rm\thepage}%
+\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox {}}%
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\ps@plain % 'plain' page style
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column.
+\if@twoside\else\raggedbottom\fi % Ragged bottom unless twoside option.
diff --git a/macros/latex209/contrib/misc/currency.sty b/macros/latex209/contrib/misc/currency.sty
new file mode 100644
index 0000000000..be495ea26e
--- /dev/null
+++ b/macros/latex209/contrib/misc/currency.sty
@@ -0,0 +1,17 @@
+% This file includes some useful hacks to include currency symbols other
+% than the standard \$ and \pounds of LaTeX. It is a collection from kind
+% individuals who have provided this code.
+%
+% If you have other currency symbols or fixes to enhance those in this file,
+% please send them to the archist responsible for this collection:
+% George D. Greenwade, Department of Economics and Business Analysis, Sam
+% Houston State University, Huntsville, TX 77341 (409) 294-1265
+% BED_GDG@SHSU.BITNET
+%
+% Japanese Yen - provided by <sommer@binah.cc.brandeis.edu>, 17-APR-1991
+\newcommand{\yen}{{\ooalign{Y\crcr$=$}}}
+%
+% Alternate British Pounds Sterling - upright instead of italic - provided
+% by <XITIJSCH@DDATHD21.BITNET>, 15-APR-1991
+\def\Pounds{{\rm \char'44}}
+
diff --git a/macros/latex209/contrib/misc/custombib.sty b/macros/latex209/contrib/misc/custombib.sty
new file mode 100644
index 0000000000..9f03fa9bb7
--- /dev/null
+++ b/macros/latex209/contrib/misc/custombib.sty
@@ -0,0 +1,39 @@
+% custombib.sty - thebibliography with customizable text and sectioning
+%
+% This is a small modification of the standard command made by L. Lamport.
+%
+% Pablo A. Straub, University of Maryland, straub@cs.umd.edu
+%
+% 11/08/91 Posted to comp.text.tex
+% 11/09/91 Add \bibliogrphyitem for extra customization
+% 11/10/91 Posted again to comp.text.tex with extra customization
+%
+% An example of use: To use in report or book style, you should redefine
+% \theblibliographysection. If you want it to be like an unnumbered chapter
+% with an entry in the table of contents, the following will do.
+%
+% \renewcommand{\bibliographysection}{\addcontentsline
+% {toc}{chapter}{\bibliographytext}\chapter*}
+%
+% Another example: To make the list appear as an enumeration (a number and a
+% a period, instead of the number in square brackets), the following will do.
+%
+% \renewcommand{\bibliographyitem}[1]{#1.\hfil}
+
+
+\newcommand{\bibliographysection}{\section*}
+
+\newcommand{\bibliographytext}{References}
+
+\newcommand{\bibliographyitem}[1]{[#1]}
+
+\def\thebibliography#1{\bibliographysection{\bibliographytext\@mkboth
+ {\uppercase{\bibliographytext}}{\uppercase{\bibliographytext}}}\list
+ {\bibliographyitem{\arabic{enumi}}}
+ {\settowidth\labelwidth{\bibliographyitem{#1}}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
diff --git a/macros/latex209/contrib/misc/cyrillic.sty b/macros/latex209/contrib/misc/cyrillic.sty
new file mode 100644
index 0000000000..a0218c7522
--- /dev/null
+++ b/macros/latex209/contrib/misc/cyrillic.sty
@@ -0,0 +1,26 @@
+% Written by Charles Karney (Karney%PPC.MFENET@NMFECC.ARPA) 1986/07/28.
+% The cyrillic style option loads up the cyrillic fonts. It is assumed that
+% cyracc.def is on the system. Only \textfont, \scriptfont, and
+% \scriptscriptfont sizes are provided. 10pt, 11pt, 12pt styles are
+% supported. The fonts are accessed via \cyr. E.g., {\cyr Zhurnal}.
+
+\input cyracc.def
+\ifcase\@ptsize
+ \font\tencyr=mcyr10
+ \font\sevencyr=mcyr7
+ \font\fivecyr=mcyr6
+\or
+ \font\tencyr=mcyr10 scaled \magstephalf
+ \font\sevencyr=mcyr8
+ \font\fivecyr=mcyr6
+\or
+ \font\tencyr=mcyr10 scaled \magstep1
+ \font\sevencyr=mcyr8
+ \font\fivecyr=mcyr6
+\fi
+
+\newfam\cyrfam
+\textfont\cyrfam=\tencyr \scriptfont\cyrfam=\sevencyr
+ \scriptscriptfont\cyrfam=\fivecyr
+
+\def\cyr{\fam\cyrfam\tencyr\cyracc}
diff --git a/macros/latex209/contrib/misc/dates.sty b/macros/latex209/contrib/misc/dates.sty
new file mode 100644
index 0000000000..607d45d0ae
--- /dev/null
+++ b/macros/latex209/contrib/misc/dates.sty
@@ -0,0 +1,288 @@
+% --- ------------------------------------------------------------------
+% --- dates.sty
+% --- Flexible Date Macros for LaTeX, version 1.00--1
+% --- ------------------------------------------------------------------
+% --- Adrian F. Clark (alien@uk.ac.essex) 4-Aug-1992
+% --- ------------------------------------------------------------------
+%
+% --- \today generates today's date. Alter this to suit
+% --- the way you want it to appear. It is currently
+% --- set up to generate dates in the form
+% --- `Thursday 4th October 1066'
+%
+% --- \thisdayofweek generates today's day name (`Sunday', etc).
+% --- \thisday generates today's day (`1', `2', etc).
+% --- \thisdayth generates today's day (`1st', `2nd', etc),
+% --- where the `st' etc are generated by \st etc.
+% --- \thismonth generates today's month (`January', etc).
+% --- \thisyear generates today's year.
+% --- \thisphaseofmoon generates the current phase of the moon.
+%
+% --- \dayofweek{year}{month}{day} generates the day of the week for
+% the given date.
+%
+% --- \phaseofmoon{year}{month}{day} generates the phase of the moon
+% for the given date.
+%
+% --- \Sunday (etc) generates `Sunday' (etc).
+% --- \January (etc) generates 'January' (etc).
+% --- \NewMoon (etc) generates `new' (etc).
+%
+% --- \st generates a raised, reduced, underlined `st', as in 1st.
+% --- \nd generates a raised, reduced, underlined `nd', as in 2nd.
+% --- \rd generates a raised, reduced, underlined `rd', as in 3rd.
+% --- \th generates a raised, reduced, underlined `th', as in 4th.
+
+% --- ------------------------------------------------------------------
+% --- The actual date macros.
+
+% --- As distributed, \today generates today's date in the style
+% --- `Thursday 4th October 1066'.
+
+\def\today{\thisdayofweek\ \thisdayth\ \thismonth\ \thisyear}
+
+\def\thisday{\number\day}
+
+\def\thisdayth{\thisday \ifcase\day
+ \or\st\or\nd\or\rd\or\th\or\th\or\th\or\th\or\th\or\th\or\th
+ \or\th\or\th\or\th\or\th\or\th\or\th\or\th\or\th\or\th\or\th
+ \or\st\or\nd\or\rd\or\th\or\th\or\th\or\th\or\th\or\th\or\th\or\st\fi}
+
+\def\thisdayofweek{\dayofweek{\year}{\month}{\day}}
+
+\def\thismonth{\ifcase\month\or \January\or \February\or \March\or
+ \April\or \May\or \June\or \July\or \August\or \September\or
+ \October\or \November\or \December\fi}
+
+\def\thisyear{\number\year}
+
+\def\thisphaseofmoon{\phaseofmoon{\year}{\month}{\day}}
+
+% --- ------------------------------------------------------------------
+% --- Names of days of the week, the months, and the phases of the moon.
+% --- This makes it easier to change them for languages other than English.
+% --- (And that's why they're not \@Sunday, etc).
+
+\def\Sunday{Sunday}
+\def\Monday{Monday}
+\def\Tuesday{Tuesday}
+\def\Wednesday{Wednesday}
+\def\Thursday{Thursday}
+\def\Friday{Friday}
+\def\Saturday{Saturday}
+
+\def\January{January}
+\def\February{February}
+\def\March{March}
+\def\April{April}
+\def\May{May}
+\def\June{June}
+\def\July{July}
+\def\August{August}
+\def\September{September}
+\def\October{October}
+\def\November{November}
+\def\December{December}
+
+\def\NewMoon{new}
+\def\WaxCresMoon{waxing crescent}
+\def\FirstQuarterMoon{in its first quarter}
+\def\WaxGibMoon{waxing gibbous}
+\def\FullMoon{full}
+\def\WaneGibMoon{waning gibbous}
+\def\LastQuarterMoon{in its last quarter}
+\def\WaneCresMoon{waning crescent}
+
+
+% --- ------------------------------------------------------------------
+% --- Counters. Note that we use the same registers as TeX holds other
+% --- things in (e.g., \count0 holds the page number). This requires
+% --- that \@savestyle, \@setstyle, \dayofweek and \phaseofmoon perform
+% --- all their register manipulations within a group. This may seem
+% --- a bit messy, but it saves having eight registers permanently set
+% --- aside just for date calculation.
+
+\def\@cent{\count0 } % century number (1979 == 20)
+\def\@diy{\count1 } % day in the year
+\def\@dow{\count2 } % gets day of the week
+\def\@epact{\count3 } % age of the moon on Jan. 1
+\def\@golden{\count4 } % Moon's golden number
+\def\@leap{\count5 } % leap year fingaler
+\def\@x{\count6 } % temp register
+\def\@y{\count7 } % another temp register
+
+% --- ------------------------------------------------------------------
+% --- For `old' (pre version 2.10) LaTeX, these macros ensure the
+% --- smaller text comes out in the right font by saving the font
+% --- family before reducing the size, then restoring it.
+% --- (This hack was suggested by Leslie Lamport.) Of course, it
+% --- requires that the font in use when the caller is invoked has
+% --- a sensible family.
+
+% --- For LaTeX 2.10 onwards, which uses the font selection scheme due
+% --- to Mittelbach and Shoepf, such a hack is not necessary. The
+% --- macros detect which version is in use automagically.
+
+\def\st{\alien@up{st}}
+\def\nd{\alien@up{nd}}
+\def\rd{\alien@up{rd}}
+\def\th{\alien@up{th}}
+
+\def\alien@up#1{{\@savestyle\thinspace$^{\underline{\hbox{%
+ \scriptsize\@setstyle#1\fam=-1 }}}$}}
+
+% --- Macros to save and restore the font family.
+
+\def\@savestyle{\count0=\the\fam}
+
+\def\@setstyle{\ifcase\count0\rm\or\mit\or\cal\or\rm% what's family 3?
+ \or\it\or\sl\or\bf\or\tt\fi}
+
+% --- ------------------------------------------------------------------
+% --- The nitty-gritty.
+
+% --- The day of the week (\Sunday, etc.) is inserted into the text
+% --- by \dayofweek. (This uses registers \@dow, \@leap, \@x and \@y.)
+% --- I acquired this from elsewhere; it was apparently written by
+% --- Martin Minow, now a DEC employee. The algorithms is:
+% --- leap = year + (month - 14)/12;
+% --- dow = (13 * (month + 10 - (month + 10)/13*12) - 1)/5
+% --- dow += day + 77 + 5 * (leap % 100)/4
+% --- dow += leap / 400
+% --- dow -= leap / 100 * 2
+% --- dow = (dow % 7)
+
+\def\dayofweek#1#2#3{{\@leap=#2\advance\@leap by -14\divide\@leap by 12\relax
+ \advance\@leap by #1\relax
+ \@dow=#2\advance\@dow by 10\relax
+ \@y=\@dow \divide\@y by 13\multiply\@y by 12\relax
+ \advance\@dow by -\@y \multiply\@dow by 13\relax
+ \advance\@dow by -1 \divide\@dow by 5\relax
+ \advance\@dow by #3\advance\@dow by 77\relax
+ \@x=\@leap \@y=\@x \divide\@y by 100\multiply\@y by 100\relax
+ \advance\@x by -\@y \relax
+ \multiply\@x by 5\divide\@x by 4\advance\@dow by \@x
+ \@x=\@leap \divide\@x by 400\advance\@dow by \@x
+ \@x=\@leap \divide\@x by 100\multiply\@x by 2\advance\@dow by -\@x
+ \@x=\@dow \divide\@x by 7\multiply\@x by 7\advance\@dow by -\@x
+ \ifcase\@dow \Sunday\or \Monday\or \Tuesday\or \Wednesday\or
+ \Thursday\or \Friday\or \Saturday\fi}}
+
+\endinput
+
+%
+% --- Likewise, \phaseofmoon inserts the phase of the moon into the
+% --- text. This was written by the same person as \dayofweek.
+% --- The routine calculates the year's epact (the age of the moon on Jan 1.),
+% --- adds this to the number of days in the year, and calculates the phase
+% --- of the moon for this date. It returns the phase as a string, e.g.,
+% --- \NewMoon, \FullMoon, etc.
+%
+% --- In the algorithm:
+% --- diy is the day of the year - 1 (i.e., Jan 1 is day 0).
+% --- golden is the number of the year in the Mentonic cycle, used to
+% --- determine the position of the calender moon.
+% --- epact is the age of the calender moon (in days) at the beginning
+% --- of the year. To calculate epact, two century-based
+% --- corrections are applied:
+% --- Gregorian: (3 * cent)/4 - 12
+% --- is the number of years such as 1700, 1800 when
+% --- leap year was not held.
+% --- Clavian: (((8 * cent) + 5) / 25) - 5
+% --- is a correction to the Mentonic cycle of about
+% --- 8 days every 2500 years. Note that this will
+% --- overflow 16 bits in the year 409600. Beware.
+% --- The algorithm is accurate for the Gregorian calender only.
+%
+% --- The magic numbers used in the phase calculation are:
+% --- 29.5 The moon's period in days.
+% --- 177 29.5 scaled by 6
+% --- 22 (29.5 / 8) scaled by 6 (this gets the phase)
+% --- 11 ((29.5 / 8) / 2) scaled by 6
+%
+% --- Theoretically, this should yield a number in the range 0 .. 7. However,
+% --- two days per year, things don't work out too well.
+%
+% --- Epact is calculated by the algorithm given in Knuth vol. 1 (Calculation
+% --- of Easter). See also the article on Calenders in the Encyclopaedia
+% --- Britannica and Knuth's algorithm in CACM April 1962, page 209.
+%
+\def\phaseofmoon#1#2#3{{%
+ \@diy=#3 \advance\@diy by \ifcase#2 % Jan 1 == 0
+ -1\or -1\or 30\or 58\or 89\or 119\or 150\or % Jan .. Jun
+ 180\or 211\or 241\or 272\or 303\or 333\fi % Jul .. Dec
+% if ((month > 2) && ((year % 4 == 0) &&
+% ((year % 400 == 0) || (year % 100 != 0))))
+% diy++; /* Leapyear fixup */
+ \ifnum #2>2
+ \@x=#1 \@y=\@x \divide\@y by 4 \multiply\@y by 4 \advance\@x by -\@y
+ \ifnum \@x=0 % month > 2 and maybe leap year
+ \@x=#1 \@y=\@x \divide\@y by 400 \multiply\@y by 400 \advance\@x by -\@y
+ \ifnum \@x=0 % 2000 is a leap year
+ \advance\@diy by 1 % so it's one day later
+ \else % not 2000, check other '00's
+ \@x=#1 \@y=\@x \divide\@y by 100 \multiply\@y by 100 \advance\@x by -\@y
+ \ifnum \@x>0 % not some other '00' year
+ \advance\@diy by 1 % it's still one day later
+ \fi % not odd century
+ \fi % not 2000-type century
+ \fi % not leapish year
+ \fi % not march or later
+% cent = (year / 100) + 1; /* Century number */
+% golden = (year % 19) + 1; /* Golden number */
+ \@cent=#1 \divide\@cent by 100 \advance\@cent by 1
+ \@golden=#1
+ \@y=#1 \divide\@y by 19 \multiply\@y by 19 \advance\@golden by -\@y
+ \advance\@golden by 1
+% epact = ((11 * golden) + 20 /* Golden number */
+% + (((8 * cent) + 5) / 25) - 5 /* 400 year cycle */
+% - (((3 * cent) / 4) - 12)) % 30; /* Leap year correction */
+ \@epact=11 \multiply\@epact by \@golden
+ \advance\@epact by 20
+ \@x=8 \multiply\@x by \@cent \advance\@x by 5
+ \divide\@x by 25 \advance\@x by -5
+ \advance\@epact by \@x
+ \@x=3 \multiply\@x by \@cent \divide\@x by 4 \advance\@x by -12
+ \advance\@epact by -\@x
+ \@y=\@epact \divide\@y by 30 \multiply\@y by 30 \advance\@epact by -\@y
+% if (epact <= 0)
+% epact += 30; /* Age range is 1 .. 30 */
+% if ((epact == 25 && golden > 11) || epact == 24)
+% epact++;
+ \ifnum \@epact<0
+ \advance\@epact by 30
+ \fi
+ \ifnum \@epact=25
+ \ifnum \@golden>11
+ \advance \@epact by 1
+ \fi
+ \else
+ \ifnum \@epact=24
+ \advance \@epact by 1
+ \fi
+ \fi
+%
+% --- Calculate the phase, using the magic numbers defined above.
+% --- Note that phase may be equal to 8 (== 0) on two days of the year
+% --- due to the way the algorithm was implemented.
+% --- phase = (((((diy + epact) * 6) + 11) % 177) / 22) & 7;
+%
+ \@x=\@diy \advance\@x by \@epact \multiply\@x by 6 \advance\@x by 11
+ \@y=\@x \divide\@y by 177 \multiply\@y by 177 \advance\@x by -\@y
+ \divide\@x by 22
+ \ifcase\@x \NewMoon\or \WaxCresMoon\or \FirstQuarterMoon\or
+ \WaxGibMoon\or \FullMoon\or \WaneGibMoon\or
+ \LastQuarterMoon\or \WaneCresMoon\or \NewMoon\fi}}
+
+REVISION HISTORY
+
+1.00--0 3-Aug-1990 First version
+1.00--1 4-Aug-1992 Corrected \dayofweek: it was generating
+ additional spaces before the day-name: this was
+ significant in {tabular} environments, and
+ screwed up alignment no end. Disabled the
+ \phaseofmoon definitions, which are of little
+ interest to most people.
+
+% --- End of dates.sty
+
diff --git a/macros/latex209/contrib/misc/dayofweek.sty b/macros/latex209/contrib/misc/dayofweek.sty
new file mode 120000
index 0000000000..64ffeb4e3c
--- /dev/null
+++ b/macros/latex209/contrib/misc/dayofweek.sty
@@ -0,0 +1 @@
+../../../generic/misc/dayofweek.tex \ No newline at end of file
diff --git a/macros/latex209/contrib/misc/db.sty b/macros/latex209/contrib/misc/db.sty
new file mode 100644
index 0000000000..983152823f
--- /dev/null
+++ b/macros/latex209/contrib/misc/db.sty
@@ -0,0 +1,236 @@
+
+%%%%%%%%%%%%%%% DATABASE STYLE %%%%%%%%%%%%%%%%%%
+
+% db.sty
+%
+% Style to generate listings, to send out letters, etc. using
+% a database.
+%
+% Version 2.1 (11/20/91)
+%
+% Written by George Panagopoulos (georgios@umiacs.umd.edu)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\long\def\DOCCOMMENT#1\ENDDOCCOMMENT{}
+
+\DOCCOMMENT
+
+%%%%%%%%%%%% SAMPLE DATABASE FILE mydb.tdb:
+
+% Schema definition
+
+\fields{FName, LName,
+ Email, Addr,
+ local}
+
+% Database
+
+\tuple{FName= George,
+ LName= Panagopoulos,
+ Addr= {CS Dept., U of MD, College Park 20742},
+ Email= {\tt georgios@umiacs.umd.edu},
+ local= 1}
+
+\tuple{FName= Somebody,
+ LName= Else,
+ Email= {\tt sb@elsewhere}} % all other fields empty
+
+\tuple{FName= Ten,
+ LName= \FirstName}
+
+%%%%%%%%%%%%% SAMPLE USE FILE mydb.tex:
+
+\documentstyle[db]{article}
+
+\begin{document}
+
+% List 1
+
+\newcommand{\tupletext}{\thetuplectr & \FName\ \LName & \Email \\}
+\begin{tabular}{rll}
+ \db{mydb} % Lists all
+\end{tabular}
+===
+\thetuplectr\ person(s) listed
+
+% List 2
+
+\renewcommand{\tupletext}{\FName\ (\Email)}
+\ref{num:tuples} local person(s):
+
+\begin{enumerate}
+ \db{mydb}[local] % lists all that have nonempty \local
+ \label{num:tuples}
+\end{enumerate}
+
+\end{document}
+
+%%%%%%%%%%%%% OUTPUT of mydb.tex:
+
+1 George Panagopoulos georgios@umiacs.umd.edu
+2 Somebody Else sb@elsewhere
+3 Ten Ten
+===
+3 person(s) listed
+
+1 person(s) below:
+
+1. George (georgios@umiacs.umd.edu)
+
+%%%%%%%%%%%%%% NOTES (refer to example above)
+
+Database files have the extension ".tdb".
+
+Field order is irrelevant.
+
+A subset of the fields may be given as argument in the \tuple command.
+The rest become empty.
+
+TeX/LaTeX commands are valid inside field values.
+
+Other fields are valid inside field values.
+
+A field value must not contain a comma, unless the comma is enclosed
+in braces.
+
+White space is insignificant outside \fields and \tuple commands in
+the database file.
+
+White space is insignificant inside a \fields or a \tuple command,
+except between the first letter of a field name and the following
+equal sign, and between the first letter of a field value and the
+following comma or closing brace.
+Therefore:
+ In a \fields command, *there must be no space between the field name
+ and the following comma or closing brace*:
+ \fields{ Name, Addr}
+ is valid, but
+ \fields{Name ,Addr}
+ is invalid, and so is
+ \fields{Name,Addr }
+ In a \tuple command, *there must be no space between the field name
+ and the equal sign, and no unwanted spaces between the field value
+ and the following comma or closing brace*:
+ \tuple{ Name= x xx , Addr= yy y }
+ is equivalent to
+ \tuple{Name={x xx },Addr={yy y }},
+ but
+ \tuple{Name =xxx,Addr=yyy}
+ is invalid.
+
+Beware of conflicts between field names and other TeX macros. The
+\fields command issues a warning if your field name conflicts with an
+already defined macro, but goes on to redefine it anyway.
+
+The field macros become undefined after the execution of the the \db
+command. The old values (if applicable) are NOT restored.
+
+The same database and more than one databases may be included in the
+same document.
+
+The counter {tuplectr} is used to count tuples. The macro \thetuplectr
+may be used and/or modified at wish. The value of the counter is saved
+in the \ref variable in the end of the \db command.
+
+\ENDDOCCOMMENT
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcounter{tuplectr}
+
+%%%%%%%%%%%% USEFUL MACROS
+
+\def\ignorewhitespace{\catcode`\ =9\catcode`\^^M=9}
+\def\noignorewhitespace{\catcode`\ =10\catcode`\^^M=5}
+
+\ignorewhitespace
+
+\def\db@ifb#1{ % trim one space from #1, if needed
+ \ifx \space #1
+ \else #1 \fi}
+
+%%%%%%%%%%%% SCHEMA READING
+
+\def\chk@fld@name#1{ % check fldname #1 for conflict with other macros
+ \expandafter\ifx \csname#1\endcsname \relax % if undefined
+ \else
+ \global\expandafter\let\csname#1\endcsname\relax % undefine macro
+ \typeout{Warning: \space field \space name \space
+ \expandafter\string\csname#1\endcsname
+ \space redefines \space a \space TeX \space macro}
+ \fi}
+
+\def\@field#1,{ % expand \init@fields with: \gdef\#1{} (#1=fldname)
+ % and \undef@fields with: \global\let\#1\relax
+ \edef\fld@name{\db@ifb#1}
+ \chk@fld@name{\fld@name}
+ \xdef\init@fields{
+ \init@fields
+ \expandafter\gdef\csname\fld@name\endcsname{}}
+ \xdef\undef@fields{
+ \undef@fields
+ \global\expandafter\let\csname\fld@name\endcsname\relax}}
+
+\def\parse@fld@names#1{ % set \init@fields to clear all fields
+ % and \undef@fields to undef all field macros
+ \@for\@args:=#1
+ \do {\expandafter\@field\@args,}}
+
+\def\fields#1{ % read field names (keeps ignoring whitespace)
+ \xdef\init@fields{}
+ \xdef\undef@fields{}
+ \parse@fld@names{#1}}
+
+%%%%%%%%%%%% TUPLE PARSING
+
+\def\@setfield#1=#2,{
+ \expandafter\xdef\csname\db@ifb#1\endcsname{#2}}
+
+\def\parse@fields#1{
+ \@for\@args:=#1
+ \do {\expandafter\@setfield\@args,}}
+
+\def\print@tuple{ % print tuple value as requested
+ % \db@flag is not expanded and contains the name of a field
+ \edef\db@flag@val{\db@flag} % eval \db@flag
+ \ifx \db@flag@val \empty % ignore tuple if \db@flag=\empty
+ \else
+ \refstepcounter{tuplectr}
+ \tupletext
+ \fi}
+
+%%%%%%%%%%%% TUPLE READING
+
+\def\@tuple#1{ % parse tuple and call \print@tuple
+ \init@fields % empty field values
+ \parse@fields{#1}
+ \print@tuple
+ \ignorewhitespace}
+
+\def\tuple{ % read tuple, print \tupletext if \db@flag not empty
+ \noignorewhitespace % will be restored by \@tuple
+ \@tuple}
+
+\def\notuple#1{} % ignore entry
+
+%%%%%%%%%%%% DB READING
+
+\def\@db#1[#2]{ % #1=file, #2=field not to be empty for \tupletext
+ \ifx . #2
+ \gdef\db@flag{1} % always nonempty
+ \else
+ \xdef\db@flag{\csname#2\endcsname}
+ \fi
+ \setcounter{tuplectr}{0}
+ \ignorewhitespace
+ \@input{#1.tdb}
+ \undef@fields
+ \noignorewhitespace}
+
+\def\db#1{ % read database, print \tupletext for each included tuple
+ \@ifnextchar [
+ {\@db#1}
+ {\@db#1[.]}}
+
+\noignorewhitespace
diff --git a/macros/latex209/contrib/misc/dblitem.sty b/macros/latex209/contrib/misc/dblitem.sty
new file mode 100644
index 0000000000..778f5fae67
--- /dev/null
+++ b/macros/latex209/contrib/misc/dblitem.sty
@@ -0,0 +1,45 @@
+\topmargin -.5in
+\oddsidemargin -.1in
+\textheight 8.9in
+\textwidth 6.5in
+\overfullrule=0pt
+\def\header#1#2{\parindent0em {#1 \hfill #2} \vskip.2in \parindent1.7em}
+\def\@oddfoot{\rm SYNCH User's Guide \hfil \thepage \hfil \today}
+\def\section{\@startsection {section}{1}{\z@}{+3.5ex plus +1ex minus
+ +.2ex}{2.3ex plus .2ex}{\normalsize\rm}}
+\def\nbrlineone{\par\smallskip \noindent
+\verb=----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8= \\}
+\def\nbrlinetwo{\verb=----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8= \\ }
+\def\char{{\sf (CHAR) }}
+\def\int{{\sf (INTEGER) }}
+\def\flpt{{\sf (FL PT) }}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Macros for "double items" %
+% Modified version of \item macro and context on %
+% p. 355 of TeXBook %
+% %
+% Norman J. Richert March 1990 %
+% Univ. of Houston-Clear Lake %
+% e-mail: richert@cl.uh.edu %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newskip\dblskip % Box register w/dblskip width
+\dblskip=5pc % Dblskip width of 6 picas
+\newskip\firstdbl % Box register w/firstdbl width
+\firstdbl=4pc % Firstdbl width of 4 picas
+\newskip\seconddbl % Box register w/seconddbl width
+\seconddbl=2pc % Seconddbl width of 1 picas
+\def\dblhang{\hangindent\dblskip} % Indent width of dblskip
+\def\dbltextindent#1#2{\noindent\hskip\dblskip
+ % No indent, horiz. skip of dblskip
+\llap{\hbox to\dblskip{\hbox to\firstdbl{#1\hfil}%
+ % left lap with 2 hbox spreads to arg1
+\hbox to \seconddbl{#2\hfil}}}\ignorespaces}
+ % hbox spread to arg2
+\def\dblitem{\vskip6pt\dblhang\dbltextindent}
+\def\dblitemi{\vskip-.1pc\dblhang\dbltextindent}
+ % Definition of dblitem
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/macros/latex209/contrib/misc/dectab.sty b/macros/latex209/contrib/misc/dectab.sty
new file mode 100644
index 0000000000..e9892f9f90
--- /dev/null
+++ b/macros/latex209/contrib/misc/dectab.sty
@@ -0,0 +1,49 @@
+% DECTAB.STY (April 27, 1991)
+% Allows decimal alignment in tabular environment
+% \dec definitions taken from REVTEX.STY
+% by Charles Franklin, April 27, 1991
+% (C38871CF@WUVMD.WUSTL.EDU or C38871CF@WUVMD.Bitnet)
+%
+% USAGE: For decimal alignment in a table, use \dec 3.14 for
+% the cell entry. The column should be center aligned
+% to achieve the desired effect.
+% For example:
+%
+% \begin{tabular}{lcc}
+%
+% Constant & \dec -1.461 & \dec -0.724 \\
+% Standard Error & \dec (0.422) & \dec (0.455) \\
+%
+% Note that a `.' MUST appear for the alignment to work.
+% Use `\dec 520.' NOT `\dec 520' for integers.
+%
+% DECTAB also defines \ra, \la, \ca for easy modification of
+% global alignments. These produce local right, left and center
+% alignments of the cell entry. If there are spaces in the cell
+% entry, enclose the contents in {...}, eg \la {This Column}
+%
+\typeout{Document Style Option `dectab', version April 27, 1991}
+
+\newdimen\@Ldec \newdimen\@Rdec
+
+\def\dec #1.#2 {\hbox to\@Ldec{\hss#1}\def\test{#2}%
+\ifx\test\empty\hbox to\@Rdec{\hfill}\else\hbox to\@Rdec{.#2\hss}\fi
+}
+
+\def\setdec #1.#2 {\relax%
+ \bgroup
+ \setbox0\hbox{\kern1pt\relax#1}\setbox1\hbox{\kern1pt\relax#2}%
+ \global\@Ldec\wd0\global\@Rdec\wd1%
+ \egroup
+}
+
+\setdec 000.000 % default size of 3 digits on each side
+
+% Following defs allow easy modification of global alignment in
+% tables. \ra, \la, \ca for right, left and center alignments.
+
+\def\ra #1 {\multicolumn{1}{r}{#1}}
+\def\la #1 {\multicolumn{1}{l}{#1}}
+\def\ca #1 {\multicolumn{1}{c}{#1}}
+
+% end DECTAB.STY
diff --git a/macros/latex209/contrib/misc/deflist.sty b/macros/latex209/contrib/misc/deflist.sty
new file mode 100644
index 0000000000..621e466472
--- /dev/null
+++ b/macros/latex209/contrib/misc/deflist.sty
@@ -0,0 +1,16 @@
+% *** DEFLIST ****
+%
+% Aufruf: \begin{deflist}{Label}
+% \item[label] TeX
+% \end{deflist}
+% erzeugt: Liste, bei der das laengste Label die Einrueckungstiefe bestimmt
+%
+%\def\deflabel#1{\bf #1\hfill}
+\def\deflabel#1{#1\hfill}
+\def\deflist#1{
+% \list{}{\settowidth{\labelwidth}{\bf #1}
+ \list{}{\settowidth{\labelwidth}{#1}
+ \setlength{\leftmargin}{\labelwidth}
+ \addtolength{\leftmargin}{\labelsep}
+ \let\makelabel \deflabel}}
+\let\enddeflist\endlist
diff --git a/macros/latex209/contrib/misc/deleq.sty b/macros/latex209/contrib/misc/deleq.sty
new file mode 100644
index 0000000000..1b3df7c671
--- /dev/null
+++ b/macros/latex209/contrib/misc/deleq.sty
@@ -0,0 +1,359 @@
+% The style option file "deleq.sty" is found after these instructions,
+% right before the .sty-file is a line with 30 percentage-signs.
+%
+%
+% LaTeX Macro for Partial Numbering of Equations
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+%
+% by Mats Dahlgren, <matsd@physchem.kth.se>
+% or <mats@fenk.wau.nl>, June 1994
+%
+% Version 3.0, June 22, 1994
+% Version 3.02, Sept. 8, 1994
+%
+% NOTICE: This version of deleq.sty (3.02) is the last which runs
+% under LaTeX 2.09. It is not maintained any longer. All
+% improvements and changes are done to the file for LaTeX2e,
+% which have a version number of 4.0 (or higher). Useres
+% are urged to change to LaTeX2e and a newer version of deleq.sty.
+%
+% CHANGES: A few font-testings have been included, which - hopefully -
+% makes deleq.sty v.3.02 compatible with also other font
+% selection schemen than NFSS2.
+%
+% deleq.sty is a LaTeX macro makes partial numbering of equations
+% possible. It is meant to be used when numbering such as 3a, 3b, etc.
+% is desired. The default is to give an equation number like '3a'
+% without period and with the 'a' typeset in roman font. It can be used
+% in 'article' as well as 'book' and 'report' document styles. The
+% examples given below are valid for 'article' styled documents.
+% Both right aligned and left aligned equation numbers are avaliable.
+% Equations can be numbered either 3, 3a, 3b, ..., or 2, 3a, 3b, ....
+% Also, if equation numbers within eqnarray-like environments can be
+% numbered 3, 3a, 3b,... or starting at 3a, which can follow both after
+% equation 2b or 3. An array environment can have its first equation
+% numbered 3b if the nearest previous equation is 3a. Within the
+% array environment, equations can be numbered 3a, 3b, 4, 4a, 4b, 5a, 5b,
+% etc., and also not numbered lines are possible ('\nonumber' works).
+% Furthermore, equation numbers can be "recycled". If equation 3 is repeated
+% after equation 8, it can still have the numbering set to 3, and be
+% followed by (a new) equation 9. "Recycled" equation numbers can
+% receive partial numbers (3a, 3b, ...); partially numbered equations
+% can also be "recycled" (but at this stage, the latter can not receive
+% new partial numbers neatly, it will come out like '3ba' if eqution 3b
+% is the "recycled" equation). A command for using references in mathmode
+% which avoids the eroor message "Don't use \bf in mathmode" when processed
+% is also included.
+%
+% deleq.sty version 3.0 has been tested with LaTeX 2.09 under UNIX. Please
+% send bug reports, corrections, additions, suggestions, etc to me at
+% <matsd@physchem.kth.se>. Use the file at your own pleasure and risk.
+% (Command names are a mixture of LaTeX, Swedish and a bit of the author's
+% fantasy...)
+%
+% Enjoy your LaTeX!
+% mats d.
+%
+%
+% Requirements: The file 'deleq.sty' must be available in the user's
+% 'TEXINPUTS' directories.
+%
+% Usage: The macro is included by stating 'deleq' as one of the
+% options with the '\documentstyle' command.
+%
+% Environments: The macro defines the following eight environments:
+% deqn environment for automatic numbering of the
+% first equation of type 3a
+% dleqn 'deqn' for left-aligned numbers
+% ddeqn used for automatic numbering of the
+% equations following the one in 'deqn';
+% see also details below
+% ddleqn 'ddeqn' for left-aligned numbers
+% deqarr environment for automatic partial equation
+% numbering used in 'eqnarray' environment
+% dleqarr 'deqarr' for left-aligned numbers
+% ddeqar similar to 'deqarr' environment, but more
+% flexible, see details below
+% ddleqar 'ddeqar' for left-aligned numbers
+%
+% Commands: The macro defines the following thirteen commands:
+% \nydeqno
+% \heqno
+% \nydeleqno
+% \nydelleqno
+% \deleqno
+% \delleqno
+% \reqno{FOO}
+% \rleqno{FOO}
+% \rndeqno{FOO}
+% \rndleqno{FOO}
+% \rdeqno{FOO}
+% \rdleqno{FOO}
+% \mthref{FOO}
+%
+% Notice: 1. If you use '\nydeleqno', '\nydelleqno', '\deleqno',
+% '\delleqno', \nydeqno', '\heqno', '\reqno', '\rleqno'
+% '\rndeqno', '\rndleqno', '\rdeqno', or '\rdleqno' in
+% combination with '\label{FOO}', '\label{FOO}' should
+% appear after the 'deleq'-command;
+% 2. If you change the appearance of equation numbers (e.g. use
+% '[2]' instead of '(2)'), deleq':s commands may not typeset
+% the partial equation numbers like your ordinary ones.
+%
+% Syntax: Here follows a more detailed description of the different
+% environments and commands.
+%
+% \begin{deqn} typesets an equation just like \begin{equation} ..
+% ..\end{deqn} \end{equation} does, but gives it a number such as
+% '3a' instead of '3' (always 'a').
+%
+% \begin{dleqn} typesets an equation just like \begin{deqn} .. \end{deqn}
+% ..\end{dleqn} does, but with the equation number left-aligned.
+%
+% \begin{ddeqn} typesets an equation just like \begin{equation} ..
+% ..\end{ddeqn} \end{equation} does, but gives it a number such as
+% '3b', '3c'... instead of '3', '4'... when following after
+% another partially numbered equation. When following
+% after an ordinarily numbered equation ('3') it gives
+% a partial equation number with the last used ordinary
+% equation number, e.g. '3a'. Can be made to produce the
+% result of 'deqn' environment by the use of '\nydeqno'.
+%
+% \begin{ddleqn} typesets an equation just like \begin{ddeqn} .. \end{ddeqn}
+% ..\end{ddleqn does, but with the equation number left-aligned.
+%
+% \begin{deqarr} typesets an equation array just like \begin{eqnarray} ..
+% ..\end{deqarr} \end{eqnarray} does, but gives the first numbered
+% equation a number like '3a' instead of '3' (always 'a'),
+% and the following '3b', '3c' etc. The '\nonumber' command
+% works just like in the 'equationarray' environment.
+%
+% \begin{dleqarr} typesets an equation array just like \begin{dleqarr} ..
+% ..\end{dleqarr} \end{dleqarr} does, but with the equation numbers
+% left-aligned.
+%
+% \begin{ddeqar} typesets an equation array just like \begin{eqnarray} ..
+% ..\end{ddeqar} \end{eqnarray} does, but gives the equation numbers such
+% as '3a' if following after an equation numbered '3'
+% (ordinary equation number) and numbers such as '3c' if
+% following after a partially numbered equation '3b'.
+% Can be made to produce the result of 'deqarr' environment
+% by the use of '\nydeqno'. The '\nonumber' command
+% works just like in the 'equationarray' environment.
+%
+% \begin{ddleqar} typesets an equation array just like \begin{ddleqar} ..
+% ..\end{ddleqar} \end{ddleqar} does, but with the equation numbers
+% left-aligned.
+%
+% \nydeqno Used within 'deqarr', 'dleqarr', 'ddeqar', or 'ddleqar'
+% environments to step the main equation number by one
+% and reset the partial equation number to 'a'; thus,
+% '\nydeqno' gives equation number '4a' when following
+% equation '3c'.
+%
+% \heqno Used within 'deqarr', 'dleqarr', 'ddeqar', or 'ddleqar'
+% environments to step the main equation number by one and
+% to produce an ordinary equation number; thus, gives
+% equation number '4' when following equation '3c'.
+% Equations following the '\heqno'-ed will be partially
+% numbered with the '\heqno'-ed equation's number as the
+% main number, e.g. '4a' (unless it has a '\nydeqno'
+% command, which in this case would produce the equation
+% number '5a').
+%
+% \nydeleqno gives a new partial equation number when used in $$ ... $$.
+% Thus, writing '$$ ... \nydeleqno $$' is equivalent to
+% writing '\begin{deqn} ... \end{deqn}'.
+%
+% \nydelleqno gives a new partial left-aligned equation number when
+% used in $$ ... $$. Thus, writing '$$ ... \nydelleqno $$'
+% is equivalent to writing '\begin{dleqn} ... \end{dleqn}'.
+%
+% \deleqno gives a partial equation number when used in $$ ... $$.
+% Thus, writing '$$ ... \deleqno $$' is equivalent to
+% writing '\begin{ddeqn} ... \end{ddeqn}'.
+%
+% \delleqno gives a partial left-aligned equation number when
+% used in $$ ... $$. Thus, writing '$$ ... \delleqno $$'
+% is equivalent to writing '\begin{ddleqn} ... \end{ddleqn}'.
+%
+% \reqno{FOO} is used when repeating equations with its original number.
+% '\reqno' takes the argument 'FOO', which has to be defined
+% by a '\label{FOO}' in the original equation. It can
+% only be used within $$ ... $$. It does not affect the
+% equation number counter, nor the partial equation number
+% counter. However, it resets the partial equation number
+% counter for the '\rndeqno', '\rndleqno', '\rdeqno', and
+% '\rdleqno' commands. If used with a '\label{FOOO}'
+% command, the .aux-file will only contain the page number
+% of label {FOOO}.
+%
+% \rleqno{FOO} same as '\reqno{FOO}' but left-aligns the equation number.
+%
+% \rndeqno{FOO} adds a partial equation number to an old equation number,
+% specified by the FOO label. If FOO refers to equation
+% '4', '\rdeqno{FOO}' will result in equation number '4a'
+% (always 'a'). It can only be used within
+% $$ ... $$. It does not affect the equation number counter,
+% nor the partial equation number counter. However, it
+% resets the partial equation number counter for the
+% '\rndeqno', '\rndleqno', '\rdeqno', and '\rdleqno' commands.
+% The argument of '\rndeqno' follows the same rules as that of
+% '\reqno'. When used with the '\label{FOOO}' command, a
+% reference to FOOO will only return the partial equation
+% number. To make a complete reference to an equation
+% which has a '\rndeqno' command, say '\ref{FOO}\ref{FOOO}'.
+%
+% \rndleqno{FOO} same as '\rndeqno{FOO}' but left-aligns the equation number.
+%
+% \rdeqno{FOO} same as '\rndeqno{FOO}' but without resetting any
+% equation number counter and giving consecutive partial
+% equation numbers ('4b', '4c', etc.).
+% NOTE: There is nothing preventing the repeated use of
+% '\rndeqno{FOO}' and '\rdeqno{FOO}' for the same label
+% FOO. This will result in numbering such as '3a' (if
+% FOO refers to equation '3') occuring several times.
+%
+% \rdleqno{FOO} same as '\rdeqno{FOO}' but left-aligns the equation number.
+%
+% \mthref{FOO} same as ordinary '\ref{FOO}' but does not type-set the
+% '??' in '\bf' font if occurring within mathmode.
+% 'deleq.sty' makes use of this to avoid interruptions when
+% LaTeX-ing documents containing '\reqno', '\rleqno',
+% '\rndeqno', '\rndleqno', '\rdeqno', or '\rdleqno'. It
+% can be used also outside mathmode, and behaves then
+% just like '\ref{FOO}'. Warnings are the same as
+% when using '\ref{FOO}'.
+%
+%
+% The file itself begins here
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% deleq.sty Version 3.02, Sept. 8, 1994
+% (c) 1994 by Mats Dahlgren (matsd@physchem.kth.se or mats@fenk.wau.nl)
+%
+\typeout{deleq.sty included, version 3.02 (Sept. 8, 1994). (c) 1994 by Mats Dahlgren}
+%% Part 0: Compatibility with older TeX/LaTeX versions than 3.141/2.09
+\@ifundefined{mathrm}{\def\mathrm{\rm}}{\def\rm{\mathrm}}
+\@ifundefined{mathcal}{\def\mathcal{\cal}}{}
+\@ifundefined{reset@font}{\def\reset@font{\hspace*{0pt}}}{}
+\def\deleqver{{\tt deleq.sty} version 3.02 (Sept.~8, 1994)}
+%% Part 1: Counters etc.
+\newcounter{deleq}[equation]
+\newcounter{Deleq}
+\newcount\@deqpen
+\newcount\@deqcnt
+\def\aLph#1{\@aLph{\@nameuse{c@#1}}}
+\def\@aLph#1{\ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or
+ z\else\@ctrerr\fi}
+\def\thedeleq {\theequation\mathrm{\aLph{deleq}}}
+\def\theDeleq {\mathrm{\aLph{Deleq}}}
+\def\@deleqnnum{{\reset@font\rm (\thedeleq)}}
+\def\@delleqnnum{\hbox to .01\p@{}\rlap{\reset@font\rm
+ \hskip -\displaywidth(\thedeleq)}}
+\def\mthref#1{\@ifundefined{r@#1}{\ifmmode \mathrm{??} \else
+ {\reset@font\bf ??} \fi\@warning {Reference `#1' on page \thepage \space
+ undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
+ \@car\@tempa \@nil\null}}
+%% Part 2: \nydeleqno and \deleqno, with leftists
+\def\nydeleqno{\refstepcounter{equation}\refstepcounter{deleq}
+ \let\@currentlabel\thedeleq \eqno (\thedeleq)}
+\def\deleqno{\refstepcounter{deleq} \let\@currentlabel\thedeleq
+ \eqno (\thedeleq)}
+\def\nydelleqno{\refstepcounter{equation}\refstepcounter{deleq}
+ \let\@currentlabel\thedeleq \leqno (\thedeleq)}
+\def\delleqno{\refstepcounter{deleq} \let\@currentlabel\thedeleq
+ \leqno (\thedeleq)}
+%% Part 3: \reqno, \rndeqno, and \rdeqno, with leftists
+\newcommand{\reqno}[1]{\setcounter{Deleq}{-1}\refstepcounter{Deleq}
+ \eqno (\mthref{#1}) }
+\newcommand{\rdeqno}[1]{\refstepcounter{Deleq}
+ \eqno (\mthref{#1}\theDeleq)}
+\newcommand{\rndeqno}[1]{\setcounter{Deleq}{0}\refstepcounter{Deleq}
+ \eqno (\mthref{#1}\theDeleq)}
+\newcommand{\rleqno}[1]{\setcounter{Deleq}{-1}\refstepcounter{Deleq}
+ \leqno (\mthref{#1}) }
+\newcommand{\rdleqno}[1]{\refstepcounter{Deleq}
+ \leqno (\mthref{#1}\theDeleq)}
+\newcommand{\rndleqno}[1]{\setcounter{Deleq}{0}\refstepcounter{Deleq}
+ \leqno (\mthref{#1}\theDeleq)}
+%% Part 4: 'deqarr' environment
+\def\@deqncr{{\ifnum0=`}\fi\@ifstar{\global\@deqpen\@M
+ \@ydeqncr}{\global\@deqpen\interdisplaylinepenalty \@ydeqncr}}
+\def\@ydeqncr{\@ifnextchar [{\@xdeqncr}{\@xdeqncr[\z@]}}
+\def\@xdeqncr[#1]{\ifnum0=`{\fi}\@@deqncr
+ \noalign{\penalty\@deqpen\vskip\jot\vskip #1\relax}}
+\def\@@deqncr{\let\@tempa\relax
+ \ifcase\@deqcnt \def\@tempa{& & &}\or \def\@tempa{& &}%
+ \else \def\@tempa{&}\fi
+ \@tempa \if@eqnsw\@deleqnnum\stepcounter{deleq}\fi
+ \global\@eqnswtrue\global\@deqcnt\z@\cr}
+\def\deqarr{\stepcounter{equation}\stepcounter{deleq}
+ \let\@currentlabel\thedeleq
+ \global\@eqnswtrue\m@th
+ \global\@deqcnt\z@\tabskip\@centering\let\\\@deqncr
+ $$\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@deqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@deqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\enddeqarr{\@@deqncr\egroup
+ \global\advance\c@deleq\m@ne$$\global\@ignoretrue}
+%% Part 4b: 'dleqarr' environment
+\def\@dleqncr{{\ifnum0=`}\fi\@ifstar{\global\@deqpen\@M
+ \@ydleqncr}{\global\@deqpen\interdisplaylinepenalty \@ydleqncr}}
+\def\@ydleqncr{\@ifnextchar [{\@xdleqncr}{\@xdleqncr[\z@]}}
+\def\@xdleqncr[#1]{\ifnum0=`{\fi}\@@dleqncr
+ \noalign{\penalty\@deqpen\vskip\jot\vskip #1\relax}}
+\def\@@dleqncr{\let\@tempa\relax
+ \ifcase\@deqcnt \def\@tempa{& & &}\or \def\@tempa{& &}%
+ \else \def\@tempa{&}\fi
+ \@tempa \if@eqnsw\@delleqnnum\stepcounter{deleq}\fi
+ \global\@eqnswtrue\global\@deqcnt\z@\cr}
+\def\dleqarr{\stepcounter{equation}\stepcounter{deleq}
+ \let\@currentlabel\thedeleq
+ \global\@eqnswtrue\m@th
+ \global\@deqcnt\z@\tabskip\@centering\let\\\@dleqncr
+ $$\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@deqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@deqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\enddleqarr{\@@dleqncr\egroup
+ \global\advance\c@deleq\m@ne$$\global\@ignoretrue}
+%% Part 5: 'ddeqar' environment
+\def\ddeqar{\stepcounter{deleq}
+ \let\@currentlabel\thedeleq
+ \global\@eqnswtrue\m@th
+ \global\@deqcnt\z@\tabskip\@centering\let\\\@deqncr
+ $$\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@deqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@deqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endddeqar{\enddeqarr}
+%% Part 5b: 'ddleqar' environment
+\def\ddleqar{\stepcounter{deleq}
+ \let\@currentlabel\thedeleq
+ \global\@eqnswtrue\m@th
+ \global\@deqcnt\z@\tabskip\@centering\let\\\@dleqncr
+ $$\halign to\displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@deqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@deqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endddleqar{\enddleqarr}
+%% Part 6: 'deqn' and 'ddeqn' environments, with leftists
+\def\deqn{$$\refstepcounter{equation}\stepcounter{deleq}
+ \let\@currentlabel\thedeleq}
+\def\enddeqn{\eqno \hbox{\@deleqnnum} $$\global\@ignoretrue}
+\def\ddeqn{$$\refstepcounter{deleq} \let\@currentlabel\thedeleq}
+\def\endddeqn{\eqno \hbox{\@deleqnnum} $$\global\@ignoretrue}
+\def\dleqn{\deqn}
+\def\enddleqn{\leqno \hbox{\@deleqnnum} $$\global\@ignoretrue}
+\def\ddleqn{\ddeqn}
+\def\endddleqn{\leqno \hbox{\@deleqnnum} $$\global\@ignoretrue}
+%% Part 7: \nydeqno and \heqno
+\def\nydeqno{\stepcounter{equation}\stepcounter{deleq}}
+\def\heqno{\stepcounter{equation}}
+%% END of it all!
diff --git a/macros/latex209/contrib/misc/diagmac.sty b/macros/latex209/contrib/misc/diagmac.sty
new file mode 120000
index 0000000000..6cf14e4009
--- /dev/null
+++ b/macros/latex209/contrib/misc/diagmac.sty
@@ -0,0 +1 @@
+../../../latex/contrib/diagmac/diagmac.sty \ No newline at end of file
diff --git a/macros/latex209/contrib/misc/diagramdoc.tex b/macros/latex209/contrib/misc/diagramdoc.tex
new file mode 100644
index 0000000000..3995d54999
--- /dev/null
+++ b/macros/latex209/contrib/misc/diagramdoc.tex
@@ -0,0 +1,968 @@
+% This document should be typeset with LaTeX;
+% it gives a basic user's information about the diagram macros.
+% Those macros are necessary for this typesetting,
+% so make sure the "diagram" document is in your TeX file.
+% Print the document in the "landscape" position
+% or remove the instructions \oddsidemargin168mm and
+% evensidemargin29mm from the preamble.
+% The size of the output has been choosen so that two pages
+% of the document can fit nicely on a A4 page.
+
+%% Lines with two %-signs were commented away by Nico verwer,
+%% to make this document a4-sized.
+%% To restore this file to its original, search for all lines
+%% containing %%.
+%% \documentstyle[twoside]{article}
+\documentstyle[a4]{article} %% remove this line to restore original.
+
+\input{diagram}
+
+%% \hoffset-23.5mm
+%% \voffset-20mm
+%% \oddsidemargin168mm
+%% \evensidemargin27mm
+%% \textheight 454pt
+%% \textwidth 283pt
+\pagestyle{myheadings}
+\markboth{}{}
+
+
+\newcommand{\bs}{$\backslash$}
+\newcommand{\p}{\hspace{14pt}}
+\newcommand{\vb}{\verb}
+\newcommand{\tab}{\begin{tabular}}
+\newcommand{\TAB}{\end{tabular}}
+\newcommand{\D}{{\em Diagram}}
+\newcommand{\tc}[1]{\par\noindent#1}
+
+\title{User's guide for the {\em Diagram} Macros}
+\author{Francis Borceux}
+\date{UCL, Louvain-la-Neuve,Belgium.
+\thanks{bitnet:FBORCEUX@BUCLLN11}}
+
+\begin{document}
+
+
+\maketitle
+
+\thispagestyle{empty}
+
+%\LARGE\bf\noindent Contents\vspace{10pt}
+%
+%\normalsize
+%
+%
+%\tc{\makebox[6mm][r]{1.} What are the {\em Diagram}
+%Macros?\dotfill2}
+%\tc{\makebox[6mm][r]{2.} Inserting in-text arrows.\dotfill2}
+%\tc{\makebox[6mm][r]{3.} Backward in-text arrows.\dotfill3}
+%\tc{\makebox[6mm][r]{4.} Naming the in-text arrows.\dotfill4}
+%\tc{\makebox[6mm][r]{5.} Emphasizing an arrow.\dotfill5}
+%\tc{\makebox[6mm][r]{6.} Primary diagram arrows.\dotfill5}
+%\tc{\makebox[6mm][r]{7.} Secondary diagram arrows.\dotfill6}
+%\tc{\makebox[6mm][r]{8.} Ternary diagram arrows.\dotfill7}
+%\tc{\makebox[6mm][r]{9.} Naming the diagram arrows.\dotfill9}
+%\tc{\makebox[6mm][r]{10.} Conceiving a diagram.\dotfill10}
+%\tc{\makebox[6mm][r]{11.} Typing a diagram.\dotfill12}
+%\tc{\makebox[6mm][r]{12.} The variable length option.\dotfill14}
+%\tc{\makebox[6mm][r]{13.} Superposing items in a
+%diagram.\dotfill16}
+%\tc{\makebox[6mm][r]{14.} Drawing curved arows.\dotfill17}
+%\tc{\makebox[6mm][r]{15.} The free slope arrows.\dotfill19}
+%\tc{\makebox[6mm][r]{16.} The scaling option.\dotfill21}
+%\tc{\makebox[6mm][r]{17.} Final adjustments.\dotfill22}
+%\tc{\makebox[6mm][r]{18.} Some special characters.\dotfill24}
+
+\tableofcontents
+\pagebreak
+
+
+\section{What are the {\em Diagram} Macros?}
+
+\p{\em Diagram} is a series of Macros intended to produce
+easily rather sophisticated diagrams which can appear when typing
+category theory. The range of arrows which can be produced includes
+plain morphisms, dotted morphisms, monomorphisms, epimorphisms,
+bimorphisms, isomorphisms, equalities, pairs of parallel arrows
+and pairs of adjoint arrows. Most arrows can be drawned in the
+sixteen basic directions of the compass-card (and this inspires
+the terminology). Some curved arrows are also available. All
+these arrows can be given a name, on either side of the arrow.
+For emphasizing, arrows can be printed in bold-face type. Except
+for some special features, the Macros will take care of choosing
+the correct length of each arrow as well as positioning
+correctly the various elements which appear in the diagram. The
+final result will be a diagram with rows and columns at a
+distance of 80 points (1.1in, 28mm) from each other; this
+standard distance can be changed for every individual diagram
+just by giving a scaling factor.
+
+
+{\em Diagram} includes also a list of in-text symbols containing in
+particular the same variety of arrows in both the forward and the
+backward directions.
+
+The {\em Diagram} Macros are \LaTeX\ Macros which make an
+intensive use of the \LaTeX\ picture environment and in
+particular of the \vb+\vector+ command. To use them for producing
+a document, it suffices to have in your \TeX\ file a copy of the
+file {\em diagram} and to call it with the command
+\vb+\input{diagram}+, in the preamble of your new document. The
+{\em Diagram} macros will give good results with 10pt, 11pt and
+12pt styles.The following sections should provide you with full
+information on how to use the {\em Diagram} macros for producing
+your documents.
+
+
+\section{Inserting in-text arrows.}
+
+\p An in-text arrow is one which you include in a line of text, like
+for example when you write:
+\begin{quote}Let $f:A\mono B$ be a monomorphism \ldots \end{quote}
+Here are the available in-text arrows and the corresponding
+commands. The length of an in-text arrow is 20pt.
+
+\begin{tabular}{lll}
+plain arrow&\vb+\ar+&\ar\\
+dotted arrow&\vb+\dotar+&\dotar\\
+monomorphism&\vb+\mono+&\mono\\
+epimorphism&\vb+\epi+&\epi\\
+bimorphism&\vb+\bimo+&\bimo\\
+isomorphism&\vb+\iso+&\iso\\
+pair of parallel arrows&\vb+\biar+&\biar\\
+equality&\vb+\eql+&\eql\\
+pair of adjoint arrows&\vb+\adjar+&\adjar
+\end{tabular}
+
+\vspace{3pt}
+
+When you insert an in-text arrow, the {\em Diagram} Macros will
+take care of the spacing at both ends of the arrow. The in-text
+arrow commands can be used both in paragraph and in Math mode, but
+normally you should use them in Math mode to print the surrounding
+characters in Math italic. Compare indeed\\
+%\hspace*{-10mm}%
+\begin{tabular}{ll}
+\vb+Let f:A\epi B be an epimorphism +
+&Let f:A\epi B be an epimorphism \TAB
+
+\noindent with\\
+%\hspace*{-10mm}%
+\tab{ll}
+\vb+Let $f:A\epi B$ be an epimorphism+
+&Let $f:A\epi B$ be an epimorphism
+\TAB
+
+\section{Backward in-text arrows.}
+
+\p It is a general rule of the {\em Diagram} Macros that to draw an
+arrow in some given direction, it suffices to preceed the name of
+the arrow by a code for the direction. To draw an in-text arrow in
+the backward direction, it suffices to add the prefix \vb+bk+ to
+the command for that arrow.
+
+\begin{tabular}{lll}
+backward plain arrow&\vb+\bkar+&\bkar\\
+backward dotted arrow&\vb+\bkdotar+&\bkdotar\\
+backward monomorphism&\vb+\bkmono+&\bkmono\\
+backward epimorphism&\vb+\bkepi+&\bkepi\\
+backward bimorphism&\vb+\bkbimo+&\bkbimo\\
+backward isomorphism&\vb+\bkiso+&\bkiso\\
+backward pair of parallel arrows&\vb+\bkbiar+&\bkbiar\\
+backward equality&\vb+\bkeql+&\bkeql\\
+backward pair of adjoint arrows&\vb+\bkadjar+&\bkadjar
+\end{tabular}
+
+\section{Naming the in-text arrows.}
+
+\p In a line of text, it is probably a better idea to type
+\mbox{$f:A\bimo B$} than $A\Bimo{f}B$. Nevertheless the \D\ Macros
+allow you to give an upper name to the single in-text arrows as well
+as an upper-lower name to the double in-text arrows. It is a general
+rule of the \D\ Macros that to give an upper name to a single arrow
+or an upper-lower name to a double arrow, it suffices \nolinebreak
+to
+
+\begin{enumerate}
+\item type the first letter of the corresponding command as an
+upper-case letter
+\item give the name(s) of the arrow(s) as argument(s) of the
+command.
+\end{enumerate}
+Here is a list of the available named in-text arrows:\vspace{5pt}
+
+%\hspace*{-7mm}%
+\begin{tabular}{lll}
+plain arrow $f$&\vb+\Ar{f}+&\Ar{f}\\
+dotted arrow $f$&\vb+\Dotar{f}+&\Dotar{f}\\
+monomorphism $f$&\vb+\Mono{f}+&\Mono{f}\\
+epimorphism $f$&\vb+\Epi{f}+&\Epi{f}\\
+bimorphism $f$&\vb+\Bimo{f}+&\Bimo{f}\\
+isomorphism $f$&\vb+\Iso{f}+&\Iso{f}\\
+pair of parallel arrows $f, g$&\vb+\Biar{f}{g}+&\Biar{f}{g}\\
+pair of adjoint arrows $f, g$&\vb+\Adjar{f}{g}+&\Adjar{f}{g}\\
+backward plain arrow $f$&\vb+\Bkar{f}+&\Bkar{f}\\
+backward dotted arrow $f$&\vb+\Bkdotar{f}+&\Bkdotar{f}\\
+backward monomorphism $f$&\vb+\Bkmono{f}+&\Bkmono{f}\\
+backward epimorphism $f$&\vb+\Bkepi{f}+&\Bkepi{f}\\
+backward bimorphism $f$&\vb+\Bkbimo{f}+&\Bkbimo{f}\\
+backward isomorphism $f$&\vb+\Bkiso{f}+&\Bkiso{f}\\
+pair of parallel backward arrows $f,g$
+&\vb+\Bkbiar{f}{g}+&\Bkbiar{f}{g}\\
+backward pair of adjointarrows $f, g$
+&\vb+\Bkadjar{f}{g}+&\Bkadjar{f}{g} \end{tabular}
+\vspace{5pt}
+
+The name of an arrow will always be processed in Math mode at the
+scripstyle size; therefore the text characters will be printed in
+Math italic and you should not type any \$ sign to introduce a
+mathematical symbol in the name of an arrow.
+
+\section{Emphasizing an arrow.}
+
+\p The dotted arrows are a first type of emphasized arrows; their
+construction is rather slow. It will be easier for \LaTeX\ to
+print an arrow in bold face style: to realize this, just preceed
+the command for the arrow by the command \vb+\B+; thus
+\vb+$A\B\Mono{f}B$+ produces $A\B\Mono{f}B$. That ``bolding''
+process applies to both the ``in text'' and the ``diagram''
+arrows.
+
+\section{Primary diagram arrows.}
+
+\p The {\em diagram arrows} are those arrows specially designed to
+fit nicely in a diagram; their variety and their names are the same
+as those of in-text arrows: plain arrow (\vb+ar+), dotted arrow
+(\vb+dotar+), monomorphism (\vb+mono+), epimorphism (\vb+epi+),
+bimorphism (\vb+bimo+), isomorphism (\vb+iso+), pair of parallel
+arrows (\vb+biar+), equality (\vb+eql+) and pair of adjoint arrows
+(\vb+adjar+). You should never use an in-text arrow in a diagram
+nor a diagram arrow in a line of text: the technical
+characteristics of those pictures are just incompatible!
+
+While an in-text arrow is always horizontal, the possibility must
+exist to give a diagram arrow a rather arbitrary direction. For
+that reason the name of a diagram arrow starts {\em always} with
+the prefix indicating its direction, even in the case of an
+horizontal right pointing arrow. The direction of an arrow is
+indicated by a direction of the compass-card, using the
+classical abbreviations:
+
+\tab{llll}
+north( \vb+n+ )&south( \vb+s+ )&east( \vb+e+ )&west( \vb+w+ )
+\TAB
+
+The command for producing a primary arrow is obtained by
+typing the abbreviation for its direction followed by the
+abbreviation for the type of arrow. For example the command
+\vb+\wbimo+ will produce a west pointing bimorphism. Here are
+other examples.
+\DIAG
+{\bullet} \n {} \n {\bullet} \n {} \n {\bullet} \nn
+{} \n {} \n {\naR{\mbox{\bs\tt nar}}} \n {} \n {}J\nn
+{\bullet} \n {\Wmono{\mbox{\bs\tt wmono}}} \n {\bullet}\n
+{\Eepi{\mbox{\bs\tt eepi}}} \n {\bullet} \nn
+{} \n {} \n {\Sbiar{}{\mbox{\bs\tt sbiar}}} \n {} \n {} \nn
+{\bullet} \n {} \n {\bullet} \n {} \n {\bullet}
+\diag
+
+The case of adjoint arrows requires a comment. For east and west
+pairs of adjoint arrows, the direction is that of the lower arrow;
+for north and south pairs of adjoint arrows, the direction is that
+of the left arrow.
+
+The standard length of a primary arrow is 50pt, but the length of
+an {\em horizontal} arrow is automatically adjusted when the
+adjacent vertices have too long names.
+
+\section{Secondary diagram arrows.}
+
+\p The secondary diagram arrows are those which are oriented in
+the secondary directions of the compass-card; here are thus the
+possible directions and the corresponding abbreviations:
+
+\tab{ll}
+north-east ( \vb+ne+ )&south-east ( \vb+se+ )\\
+north-west ( \vb+nw+ )&south-west ( \vb+sw+ )
+\TAB
+
+The variety of available arrows is the same as for primary arrows:
+plain arrow (\vb+ar+), dotted arrow (\vb+dotar+), monomorphism
+(\vb+mono+), epimorphism (\vb+epi+), bimorphism (\vb+bimo+),
+isomorphism (\vb+iso+), pair of parallel arrows (\vb+biar+),
+equality (\vb+eql+) and pair of adjoint arrows (\vb+adjar+).
+Just as for primary arrows, a secondary arrow is obtained by
+typing the abbreviation for its direction followed by the
+abbreviation for the type of arrow. For example the command
+\vb+\swbiar+ will produce a pair of sout-west pointing arrows.
+Here are some examples of what you can produce as secondary
+diagram arrows:
+
+
+\DIAG
+{\bullet} \n {} \n {\bullet} \n {} \n {\bullet} \nn
+{} \n {\nwbimO{\mbox{\bs\tt nwbimo}}} \n {}
+\n {\Neadjar{}{\mbox{\bs\tt neadjar}}} \n {}J\nn
+{\bullet} \n {} \n {\bullet} \n {} \n {\bullet} \nn
+{} \n {\Swiso{\mbox{\bs\tt swiso}}} \n {}
+\n {\Sedotar{\mbox{\bs\tt sedotar}}} \n {} \nn
+{\bullet} \n {} \n {\bullet} \n {} \n {\bullet}
+\diag
+
+The case of a pair of adjoint arrows requires again a comment. The
+direction is always that of the lower arrow.
+
+The secondary diagram arrows have a standard horizontal extent
+equal to 58pt.
+
+\section{Ternary diagram arrows.}
+
+\p The ternary diagram arrows are those which are oriented along
+the diagonals of a rectangle of sides 1,2. Taking some liberty with
+trigonometry and geography, we shall name them after the ternary
+directions of the compass-card. Thus, here are the available
+directions and the corresponding abbreviations:
+\begin{center}
+\tab{ll}
+north-north-east ( \vb+nne+ )&east-north-east ( \vb+ene+ )\\
+east-south-east ( \vb+ese+ )&south-south-east ( \vb+sse+ )\\
+south-south-west ( \vb+ssw+ )&west-south-west ( \vb+wsw+ )\\
+west-north-west ( \vb+wnw+ )&north-north-west ( \vb+nnw+ )
+\TAB
+\end{center}
+
+The only type of ternary arrows provided by the \D\ Macros are the
+plain arrows. Again you will obtain the command for a ternary arrow
+by preceeding the abbreviation \vb+ar+ with the prefix indicating the
+direction of the arrow. Here are thus the eight available ternary
+arrows:\\
+%\hspace*{-10mm}%
+\begin{minipage}{12cm}
+\DIAG
+{\bullet} \n {} \n {\bullet} \n {} \n {\bullet} \n {} \n
+{\bullet} \n {} \n {\bullet} \nn
+{} \n {} \n {} \n {} \n {} \n {} \n {} \n {} \n {} \nn
+{\bullet} \n {} \n {\bullet} \n {\nnwaR{\mbox{\bs\tt nnwar}}} \n
+{\bullet} \n {\nneaR{\mbox{\bs\tt nnear}}} \n {\bullet} \n {} \n
+{\bullet} \nn
+{} \n {} \n {\wnwaR{\mbox{\bs\tt wnwar}}} \n {} \n {} \n {} \n
+{\eneaR{\mbox{\bs\tt enear}}} \n {} \n {} \nn
+{\bullet} \n {} \n{\bullet} \n {} \n {\bullet} \n {} \n
+{\bullet} \n {} \n {\bullet} \nn
+{} \n {} \n {\Wswar{\mbox{\bs\tt wswar}}} \n {} \n {} \n {} \n
+{\Esear{\mbox{\bs\tt esear}}} \n {} \n {} \nn
+{\bullet} \n {} \n {\bullet} \n {\Sswar{\mbox{\bs\tt sswar}}} \n
+{\bullet} \n {\Ssear{\mbox{\bs\tt ssear}}} \n {\bullet} \n {} \n
+{\bullet} \nn
+{} \n {} \n {} \n {} \n {} \n {} \n {} \n {} \n {} \nn
+{\bullet} \n {} \n {\bullet} \n {} \n {\bullet} \n {} \n
+{\bullet} \n {} \n {\bullet}
+\diagv{23}{0}{0}
+\end{minipage}
+
+A ternary diagram arrow has a standard horizontal extent equal to
+66pt or 132pt according to the case.
+
+\section{Naming the diagram arrows.}
+
+\p The rules for naming the diagram arrows are analogous to those
+for naming the in-text arrows, with the additional possibility of
+naming the arrow on either of its sides. It suffice to type the
+first or the last letter of the command as an upper-case letter
+and give the name of the arrow as an argument. Here is an exhaustive
+list of the available possibilities.
+
+\begin{description}
+\item[Eql:] An equality cannot be named
+\item[Vertical ar, mono, epi, bimo:] A first upper-case letter
+produces a left name and a last upper-case letter produces a
+right name; thus type \vb+\Smono{f}+ to draw a south monomorphism
+with left name $f$ and \vb+\nepI{g}+ to draw a north epimorphism
+with right name $g$.
+\item[Non-vertical ar, mono, epi, bimo:] A first upper-case letter
+produces an upper name and a last upper-case letter produces a
+lower name; thus type \vb+\War{f}+ to draw a west arrow with upper
+name $f$ and \vb+\nebimO{g}+ to draw a north-east bimorphism with
+lower name $g$.
+\item[Horizontal iso:] A first upper-case letter
+produces an upper name and a last upper-case letter produces a
+lower name; thus type \vb+\Wiso{f}+ to draw a west isomorphism with
+upper name $f$ and \vb+\eisO{g}+ to draw an east isomorphism
+with lower name $g$.
+\item[Non-horizontal iso:] Type a first upper-case letter to name
+it; the name will appear on one side of the arrow and the
+``isomorphism symbol'' on the other side; thus \vb+\Nwiso{f}+ draws
+a north-west isomorphism with name $f$.
+\item[Vertical biar, adjar:] Type a first upper-case letter to name
+them and give successively the name of the left arrow and that of
+the right arrow; thus \vb+\Sbiar{f}{g}+ draws a pair of south
+arrows with left name $f$ and right name $g$.
+\item[Non-vertical biar, adjar:] Type a first upper-case letter to
+name them and give successively the name of the upper arrow and
+that of the lower arrow; thus \vb+\Seadjar{f}{g}+ will produce a
+south-east pair of adjoint arrows with upper name $f$ and lower
+name $g$.
+\end{description}
+
+The name of an arrow will always be processed in Math mode at the
+textstyle size; therefore the text characters will be printed in
+Math italic and you should not type any \$ sign to introduce a
+mathematical symbol in the name of an arrow. The name of an arrow
+will automatically be positioned in order not to bump into the
+corresponding arrow.
+
+\section{Conceiving a diagram.}
+
+\p We are now arriving at the central section of this user's guide:
+the one which describes the basic principle for realizing a
+diagram. This will be better explained on an example. Let us
+therefore suppose you want to construct the following diagram.
+\DIAG
+{X} \n {} \n {} \n {} \n {} \nn
+{} \n {\Sedotar{z}} \n {\Esear{y}} \n {} \n {} \nn
+{} \n {\sseaR{x}} \n {P} \n {\Eepi{k}} \n {B} \nn
+{} \n {} \n {\Smono{h}} \n {} \n {\smonO{g}} \nn
+{} \n {} \n {A} \n {\eepI{f}} \n {C}
+\diag
+
+This diagram contains several items: five vertices $A,B,C,P,X$,
+four primary arrows, one secondary arrow and two ternary arrows;
+one of the arrows is emphasized. All those items are very different
+in nature, size, orientation, position \ldots The first basic rule
+for conceiving a diagram is to ignore completely all those
+differences and just treat equally all those items; this allows a
+maximum of flexibility and simplicity. To realize this, the \D\
+Macros consider a formal pattern of points, at a 40pt distance from
+each other, both horizontally and vertically. Then each item of the
+diagram is {\em centered} at one of the points of the pattern, using
+the {\em picture} environment.
+
+Let us for example visualize the pattern of points on which the
+previous diagram has been constructed.
+\newcommand{\pat}
+{\begin{picture}(0,0)
+\multiput(-8000,-8000)(4000,0){5}{\circle*{300}}
+\multiput(-8000,-4000)(4000,0){5}{\circle*{300}}
+\multiput(-8000,0)(4000,0){5}{\circle*{300}}
+\multiput(-8000,4000)(4000,0){5}{\circle*{300}}
+\multiput(-8000,8000)(4000,0){5}{\circle*{300}}
+\end{picture}}
+
+\DIAG
+{X} \n {} \n {} \n {} \n {} \nn
+{} \n {\Sedotar{z}} \n {\Esear{y}} \n {} \n {} \nn
+{} \n {\sseaR{x}} \n {\cross{P}{\pat}} \n {\Eepi{k}} \n {B} \nn
+{} \n {} \n {\Smono{h}} \n {} \n {\smonO{g}} \nn
+{} \n {} \n {A} \n {\eepI{f}} \n {C}
+\diag
+
+The complete pattern needs not be a square nor even a rectangle. It
+is just compulsory to start all the lines from a same (left) column
+and leave no hole at all in any line; but lines need not be of equal
+length. To fill in the holes which could appear inside a line, it
+suffices to attach empty items at the corresponding points of the
+pattern. Here is for example the set of items corresponding to the
+previous diagram.
+\vspace{10pt}
+
+\begin{center}
+\begin{picture}(200,200)
+\thicklines
+\put(0,0){\line(1,0){200}}
+\put(0,40){\line(1,0){200}}
+\put(0,80){\line(1,0){200}}
+\put(0,120){\line(1,0){200}}
+\put(0,160){\line(1,0){120}}
+\put(0,200){\line(1,0){40}}
+\put(0,0){\line(0,1){200}}
+\put(40,0){\line(0,1){200}}
+\put(80,0){\line(0,1){160}}
+\put(120,0){\line(0,1){160}}
+\put(160,0){\line(0,1){120}}
+\put(200,0){\line(0,1){120}}
+\put(20,180){\makebox(0,0){$X$}}
+\put(60,140){\makebox(0,0)
+{\normalsize\bs\tt\scriptsize Sedotar\{z\}}}
+\put(60,100){\makebox(0,0){\bs\tt\scriptsize
+sseaR\{x\}}} \put(100,140){\makebox(0,0){\bs\tt\scriptsize
+Esear\{y\}}} \put(100,100){\makebox(0,0){$P$}}
+\put(100,60){\makebox(0,0){\bs\tt\scriptsize Smono\{h\}}}
+\put(100,20){\makebox(0,0){$A$}}
+\put(140,100){\makebox(0,0){\bs\tt\scriptsize Eepi\{k\}}}
+\put(140,20){\makebox(0,0){\bs\tt\scriptsize eepI\{f\}}}
+\put(180,100){\makebox(0,0){$B$}}
+\put(180,60){\makebox(0,0){\bs\tt\scriptsize smonO\{g\}}}
+\put(180,20){\makebox(0,0){$C$}}
+\end{picture}
+\end{center}\vspace{10pt}
+
+\section{Typing a diagram.}
+
+\p Let us assume you have determined the nature and the position of
+each item of your diagram. Here is what you should type in order to
+give that information to the \D\ Macros.
+
+\begin{enumerate}
+\item Type the command \vb+\DIAG+ to start the typing of the
+diagram;
+this command will in particular start a {\em center} environment;
+it can be given both in paragraph and in math mode.
+\item Type between curly brackets the description of {\em every}
+item; this description will automatically be processed in Math mode.
+The empty items will thus appear as \{\} in your input.
+\item {\em Separate} two consecutive items in a same row by the
+``next item command'', which is \vb+\n+. The command \vb+\n+ may
+not appear before the first item of a row nor after the last item of
+a row.
+\item {\em Separate} two consecutive rows of items by the ``next
+row command'' which is \vb+\nn+. The command \vb+\nn+ may not appear
+before the first row of items nor after the last row of items.
+\item Type the command \vb+\diag+ to indicate the end of the
+diagram typing.
+\end{enumerate}
+
+When you type a diagram using the procedure just indicated, notice
+that between the two commands \vb+\DIAG+ and \vb+\diag+
+\begin{itemize} \item You can put as much space as you want in a
+line to make your input file easier to read;
+\item You should never use a \$ sign to type a mathematical symbol,
+except if you did include that symbol in a box.
+\end{itemize}
+
+With all that in mind, the diagram of the
+previous section can be typed as follows
+\begin{verbatim}
+\DIAG
+{X} \nn
+{} \n{\Sedotar{z}}\n{\Esear{y}} \nn
+{} \n{\sseaR{x}} \n{P} \n{\Eepi{k}}\n{B} \nn
+{} \n{} \n{\Smono{h}}\n{} \n{\smonO{g}}\nn
+{} \n{} \n{A} \n{\eepI{f}}\n {C}
+\diag
+\end{verbatim}
+or equivalently as
+\begin{verbatim}
+\DIAG{X}\n{}\n{}\n{}\n{}\nn{}\n{\Sedotar{z}}
+\n{\Esear{y}}\n{}\n{}\nn{}\n{\sseaR{x}}\n{P}
+\n{\Eepi{k}}\n{B}\nn{}\n{}\n{\Smono{h}}\n{}
+\n{\smonO{g}}\nn{}\n{}\n{A}\n{\eepI{f}}\n{C}\diag
+\end{verbatim}
+
+The \D\ Macros will automatically center the diagram horizontally
+on the page and will take care of the spacing with the preceeding
+and the following text. When a diagram is rather big, you should
+make it a figure or a table (see \LaTeX book, 3.5.1 page 60) to
+improve the quality of the page-making. If you want to align
+horizontally various small diagrams, consider these just as a
+unique wide diagram where some columns are completely empty.
+
+\section {The variable length option.}
+
+\p Suppose you want to produce the following diagram:
+\DIAG
+{A} \n {} \n {\Earv{f}{130}} \n {} \n {C} \nn
+{} \n {\seepI{p}} \n {} \n {\nemonO{i}} \n {} \nn
+{} \n {} \n {B} \n {} \n {}
+\diag
+Following the instructions of the previous sections you will
+type:
+\begin{verbatim}
+\DIAG
+{A}\n{} \n{\Ear{f}}\n{} \n{C}\nn
+{} \n{\seepI{p}}\n{} \n{\nemonO{i}}\nn
+{} \n{} \n{B} \nn
+\diag
+\end{verbatim}
+and you will get
+\DIAG
+{A} \n {} \n {\Ear{f}} \n {} \n {C} \nn
+{} \n {\seepI{p}} \n {} \n {\nemonO{i}} \n {} \nn
+{} \n {} \n {B} \n {} \n {}
+\diag
+which is not exactly what you wanted!
+
+The \D\ Macros assume that a primary arrow connects two vertices
+attached at the two horizontally adjacent points of the pattern, and
+a corresponding assumption is made for the secondary and the ternary
+arrows. The east arrow of the previous diagram does not satisfy
+that assumption: it connects vertices situated at a four intervals
+distance. The \D\ Macros provide you with a {\em variable length
+option} which allows you to modify the length of an arrow in order
+to take care of such particularities. The ``variable length
+option'' is a special feature, which means that the \D\ Macros need
+your help to handle the problem. In fact, what you have to do is to
+decide the new length of the arrow.
+
+Not all arrows have been provided with a ``variable length
+option''; here are the possibilities:
+\begin{itemize}
+\item All the primary arrows, named or unamed, admit a variable
+length option.
+\item The four secondary plain arrows, named or unamed, admit a
+variable length option; the other secondary arrows are not provided
+with the variable length option.
+\item The ternary arrows do not have the variable length option.
+\end{itemize}
+
+To take advantage of the variable length option, it suffices to
+follow the name of the corresponding command with the lower-case
+letter \vb+v+ and give to that command an additional last argument
+which will be
+\begin{itemize}
+\item The new length of the arrow in the case of a primary arrow
+\item The new horizontal extent of the arrow in the case of a
+secondary arrow;
+\end{itemize}
+those two lengthes must be expressed in points. The new arrow will
+still be centered with respect to the corresponding point of the
+pattern. For example typing \vb+\Earv{f}{130}+ for the east
+arrow of the previous diagram will produce the desired result as in
+the first diagram. Typing \vb+\smonOv{g}{30}+ will produce a south
+monomorphism with right name $g$ and length 30 points, typing
+\vb+\Wadjarv{f}{g}{100}+ will produce a west pair of adjoint arrows
+with names $f,g$ and length 100 points and typing \vb+\near{82.5}+
+will produce an unamed north-east arrow with horizontal extent 82.5
+points.
+
+The standard length of a primary arrow is 50pt; since each
+interval of the pattern has length 40pt, the new length of a primary
+arrow will be $$50+(n\times 40)$$
+where $n$ is the number of intervals the arrow crosses. In the
+same way the horizontal extent of a secondary arrow is 58pt,
+so that the new horizontal extent of a secondary arrow will be
+$$58+(n\times 40)$$
+where n is the number of horizontal intervals the arrow crosses.
+
+\section{Superposing items in a diagram.}
+
+\p Sometimes you will like to superpose two items at the same point
+of the pattern underlying your diagram, like in the following
+example:
+\DIAG
+{A} \n {\ear} \n {B} \nn
+{\nar} \n {\cross{\near}{\sear}} \n {\sar} \nn
+{C} \n {\ear} \n {D}
+\diag
+The command for superposing two items is \vb+\cross{1}{2}+ where 1
+and 2 stand for the two items; the two arguments 1 and 2 are
+automatically processed in Math mode. The previous diagram can thus
+be typed as
+%% \pagebreak %% Removed for a4 sized document!
+\begin{verbatim}
+\DIAG
+{A} \n {\ear} \n {B} \nn
+{\nar} \n {\cross{\near}{\sear}} \n {\sar} \nn
+{C} \n {\ear} \n {D}
+\diag
+\end{verbatim}
+
+When superposing two arrows, the \vb+\cross+ command can have the
+undesired effect that one of the arrows will bump into the name of
+the other arrow. A special command has been designed to correct
+such a defect and is explained in section~17. For that reason, the
+``cross'' option could be considered as a special feature of the
+\D\ Macros: one which requires your help.
+
+\section{Drawing curved arrows.}
+
+\p Drawing curved arrows is another special feature of the
+\D\ Macros, thus a process where the \D\ Macros need you help. In
+fact you will have to decide the length of the curved arrow and
+possibly you will have to adjust the spacing around the diagram (an
+easy procedure for that will be described in section~17).
+
+Just plain curved arrows in the primary directions are provided by
+the \D\ Macros. The first letter of the command indicates where,
+with respect to the diagram, the arrow has to stand (this
+determines the concavity of the arrow); the second letter indicates
+the overall direction of the arrow; then follows the abbreviation
+\vb+curve+ for ``curved arrow''. As usual, the two first
+indications are given using the compass-card terminology:
+\vb+n,s,e,w+. Typing the first letter as an upper-case letter will
+produce a named arrow, the name being given as a first argument of
+the command. It is compulsory to give the length of the arrow as a
+last argument. By length of the arrow we mean clearly its
+horizontal or vertical extent (according to the case), expressed in
+points. For example \vb+\Necurve{f}{160}+ will produce a curved
+arrow with name $f$ and length 160 points, to be positioned at the
+north side of a diagram and with overall east direction.
+
+For more clarity, here are the eight unamed curved arrows (of
+length 80 points) and the corresponding commands. The bullets
+indicate the position of the formal centers (?!) of these arrows;
+each bullet corresponds thus to the point which will coincide with
+the corresponding point of the pattern.
+\vspace{15pt}
+\DIAG
+{} \n {\cross{\begin{picture}(0,0)\put(0,0){\circle*{300}}
+\end{picture}}{\Necurve{\mbox{\bs\tt necurve}}{80}}} \n {} \n {}
+\n
+{\cross{\begin{picture}(0,0)\put(0,0){\circle*{300}}\end{picture}}
+{\Nwcurve{\mbox{\bs\tt nwcurve}}{80}}} \n {} \diagv{10}{0}{-5}
+\DIAG
+{} \n {\cross{\begin{picture}(0,0)\put(0,0){\circle*{300}}
+\end{picture}}{\Securve{\mbox{\bs\tt securve}}{80}}} \n {} \n {}
+\n
+{\cross{\begin{picture}(0,0)\put(0,0){\circle*{300}}\end{picture}}
+{\Swcurve{\mbox{\bs\tt swcurve}}{80}}}\n {} \nn {} \n {} \n {} \n {}
+\n {} \n {} \nn
+{\cross{\begin{picture}(0,0)\put(0,0){\circle*{300}}\end{picture}}
+{\Wscurve{\mbox{\bs\tt wscurve}}{80}}} \n {} \n
+{\cross{\begin{picture}(0,0)\put(0,0){\circle*{300}}\end{picture}}
+{\Wncurve{\mbox{\bs\tt wncurve}}{80}}} \n
+{\cross{\begin{picture}(0,0)\put(0,0){\circle*{300}}\end{picture}}
+{\Escurve{\mbox{\bs\tt escurve}}{80}}} \n {} \n
+{\cross{\begin{picture}(0,0)\put(0,0){\circle*{300}}\end{picture}}
+{\Encurve{\mbox{\bs\tt encurve}}{80}}} \diagv{0}{0}{40}
+
+Most often you will have to include a curved arrow at a point of
+the pattern which is already occupied by another item, a vertex or an
+arrow; just use the \vb+\cross+ command of the previous section to
+superpose the two items. The length of a curved arrow will generally
+be a multiple of 80 points, since this is the normal distance
+between two vertices, in a primary direction. Here is an example of
+a diagram containing curved arrows:
+\DIAG
+{A} \n {\Ear{a}} \n {\cross{B}{\Necurve{l}{160}}} \n {\Ear{b}}
+\n {C} \nn
+{\cross{\Wncurve{e}{80}}{\Sbiar{f}{g}}} \n {}
+\n {\saR{h}} \n {} \n {\saR{k}} \nn
+{D} \n {\eaR{c}} \n {E} \n {\eaR{d}} \n {F}
+\diagv{25}{0}{0}
+It should thus be typed as follows:
+\begin{verbatim}
+\DIAG
+{A}\n{\Ear{a}} \n{\cross{B}{\Necurve{l}{160}}}
+ \n{\Ear{b}}\n{C} \nn
+{\cross{\Wncurve{e}{80}}{\Sbiar{f}{g}}}
+ \n{} \n{\saR{h}}\n{} \n{\saR{k}}\nn
+{D}\n {\eaR{c}}\n{E} \n{\eaR{d}}\n{F}
+\diagv{25}{13}{0}
+\end{verbatim}
+
+\section{The free slope arrows.}
+
+\p When you have to produce a given diagram of vertices and arrows,
+you must clearly choose adequately the position of each vertex so
+that all the arrows will be in one of the sixteen directions
+considered by the \D\ Macros. Anybody who has read this user's guide
+will easily produce an example of a diagram where this requirement
+cannot be fulfilled. Nevertheless such a situation is rather
+unusual since, for example, the most popular book on category
+theory {\em (Saunders MAC LANE -- Categories for the working
+mathematician -- Springer,1971)} \ldots does not contain any such
+diagram! [Well, I have been lucky: Saunders did not draw the
+connecting morphism in the snake lemma!]
+
+The slope of an arrow is a pair $(n,m)$ of integers: when you
+move $n$ points left, you move $m$ points up; as usual, a
+negative value of $n$ or $m$ indicates a movement in the
+opposite direction. For example, here are the slopes of the various
+diagram arrows:
+\begin{itemize}
+\item The primary arrows have slope $(\pm1,0)$ [horizontal arrows]
+or $(0,\pm1)$ [vertical arrows];
+\item The secondary arrows have slope $(\pm1,\pm1)$;
+\item The ternary arrows have slope $(\pm1,\pm2)$ or $(\pm2,\pm1)$
+according to the case.
+\end{itemize}
+In fact, \LaTeX allows you to draw arrows in thirty two other
+directions, using the picture environment and the commands
+\vb+\put+ and \vb+\vector+; the corresponding available slopes are
+$(\pm1,\pm3)$, $(\pm3,\pm1)$, $(\pm1,\pm4)$, $(\pm4,\pm1)$,
+$(\pm2,\pm3)$, $(\pm3,\pm2)$, $(\pm3,\pm4)$, $(\pm4,\pm3)$.
+The length of an arrow is always specified by giving the horizontal
+extent of the arrow, except in the case of vertical arrows where
+the actual length is given. So you can just design any arrow or set
+of arrows using the picture environment and choose the corresponding
+picture as an item of your diagram; the center of your picture will
+be positioned automatically at the corresponding point of the
+pattern. This is exactly what the \D\ Macros are doing any time you
+ask them to draw an arrow.
+
+You can avoid some typing (but just that!), by using the ``free slope
+arrow Macro'' to produce directly a diagram arrow, like for
+primary, secondary and ternary arrows. It has the following form
+where, as a matter of convention, the origin of the coordinates is
+the point of the pattern at which you want to include the free slope
+arrow:
+
+\vb+\Freear{n}{a}{b}{x}{y}{u}{v}{l}+\\
+where
+\begin{itemize}
+\item \vb+n+ is the name of the arrow;
+\item \vb+(a,b)+ are the coordinates (in points) of the place where
+you want the lower left corner of that name to be positioned;
+\item \vb+(x,y)+ are the coordinates of the origin of the arrow;
+\item \vb+(u,v)+ is the slope of the arrow (it must be one of the
+slopes just indicated);
+\item \vb+l+ is the horizontal extent (in points) of the arrow, or
+its length in the case of a vertical arrow.
+\end{itemize}
+If you do not want to name the arrow, just type, following the
+usual \D\ Macros convention:
+
+\vb+\freear{x}{y}{u}{v}{l}+\\
+Clearly, the ``free slope arrow'' option is not a \D\ Macros
+feature: it is just plain \LaTeX\ job.
+
+
+\section{The scaling option.}
+
+\p The ``variable length'' option has allowed us to design properly
+the diagram of \S 12. But you can possibly not be satisfied with
+the final product, because the resulting diagram is unusually big
+for the few arrows it does contain. This is easily corrected!
+
+Replacing the initial command \vb+\DIAG+ by the corresponding
+``variable scale'' command \vb+\DIAGV{n}+ will scale the original
+pattern of points by n\% and adjust correspondingly the length of
+every arrow in the diagram. For example typing
+\begin{verbatim}
+\DIAGV{50}
+{A}\n{} \n{\Earv{f}{130}}\n{} \n{C}\nn
+{} \n{\seepI{p}}\n{} \n{\nemonO{i}}\nn
+{} \n{} \n{B}
+\diag
+\end{verbatim}
+will produce the following result
+\DIAGV{50}
+{A} \n {} \n {\Earv{f}{130}} \n {} \n {C} \nn
+{} \n {\seepI{p}} \n {} \n {\nemonO{i}} \nn
+{} \n {} \n {B}
+\diag
+
+Since text characters (and various other things) are unaffected by
+the scaling process, you should avoid reducing exagerately a
+diagram. In most cases, a reduction up to 50\% gives excellent
+results. On the other hand, an enlargement can be helpful when
+handling vertices with very long names.
+
+This ``variable scale'' option is particularly useful when
+designing ``three dimensional'' diagrams, which require very often a
+rather dense pattern of reference points and many ``long'' arrows
+produced via the ``variable length'' option. For example to design
+the following cube
+
+\DIAGV{50}
+{} \n{} \n{B} \n{} \n{\Earv{b}{130}} \n{} \n{D} \nn
+{} \n{\Near{a}} \n{} \n{} \n{} \n{\Near{d}} \n{} \nn
+{A} \n{} \n{\cross{\Earv{\movename{c}{10}{0}}{130}}
+ {\Sarv{\movename{f}{0}{-8}}{130}}}
+ \n{} \n{C} \n{} \n{\saRv{h}{130}} \nn
+{} \nn
+{\Sarv{e}{130}} \n{} \n{F} \n{}
+ \n{\cross{\eaRv{\movename{j}{-10}{0}}{130}}
+ {\saRv{\movename{g}{0}{8}}{130}}}
+ \n{} \n{H} \nn
+{} \n{\Near{i}} \n{} \n{} \n{} \n{\neaR{l}} \nn
+{E} \n{} \n{\eaRv{k}{130}} \n{} \n{G}
+\diag
+it suffices to type
+\begin{verbatim}
+\DIAGV{50}
+{} \n{} \n{B} \n{} \n{\Earv{b}{130}} \n{} \n{D} \nn
+{} \n{\Near{a}} \n{} \n{} \n{} \n{\Near{d}} \n{} \nn
+{A} \n{} \n{\cross{\Earv{\movename{c}{10}{0}}{130}}
+ {\Sarv{\movename{f}{0}{-13}}{130}}}
+ \n{} \n{C} \n{} \n{\saRv{h}{130}} \nn
+{} \nn
+{\Sarv{e}{130}} \n{} \n{F} \n{}
+ \n{\cross{\eaRv{\movename{j}{-10}{0}}{130}}
+ {\saRv{\movename{g}{0}{13}}{130}}}
+ \n{} \n{H} \nn
+{} \n{\Near{i}} \n{} \n{} \n{} \n{\neaR{l}} \nn
+{E} \n{} \n{\eaRv{k}{130}} \n{} \n{G}
+\diag
+\end{verbatim}
+where the \vb+\movename+ command is explained in the next section.
+
+\section{Final adjusments.}
+
+\p The \D\ Macros are intended to provide you with a powerful tool
+for designing diagrams, so in normal circumstances, no adjusment at
+all should be necessary. But in some unusual cases, for example
+when you use the special features of the \D\ Macros, you can want to
+interact for correcting some imperfections. Some Macros have been
+designed to help you realizing this.
+
+If the vertices of a same row have names of different heights,
+those names will no longer stand at the same altitude since they
+are centered at the corresponding points of the pattern. There is a
+``normalizing'' command \vb+\N+ which you can apply to the ``high
+vertices'' in order to correct this defect: instead of typing
+\vb+{vertex}+ type \vb+{\N{vertex}}+, where \vb+vertex+ stands here
+for the name of the vertex.
+
+You can want to move the name of an arrow, especially when you have
+used the \vb+\cross+ command to superpose two named arrows. If $f$
+is the name of the arrow, instead of \vb+{f}+ you just type
+\vb+{\movename{f}{n}{m}}+ where n and m are integers (positive or
+negative); the name of the arrow will be moved \vb+n+ pt right
+and \vb+m+ pt up. In the same way the
+commands \vb+\movearrow{\Ear{f}}{n}{m}+ and
+\vb+\moveverterx{A}{n}{m}+ will
+move respectively the east arrow $f$ and the vertex $A$, \vb+n+
+pt right and \vb+m+ pt up.
+
+Because the curved arrows are very ``excentric'' with respect to
+their formal center, they will cause problems of spacing when drawn
+along an outer edge of a diagram. Drawing a curved arrow along the
+upper or the lower edge of a diagram will generally cause the
+diagram to overlap the surrounding text; drawing a curved arrow
+along just one vertical side of a diagram will cause bad horizontal
+centering. Those defects can be corrected by using the ``variable
+spacing'' option of the diagram commands. Just replace the final
+command \vb+\diag+ by the corresponding ``variable spacing''
+command \vb+\diagv{t}{l}{b}+ where
+\begin{itemize}
+\item \vb+t+ is the vertical space, expressed in points, to be
+added at the top of the diagram;
+\item \vb+l+ is the horizontal space, expressed in points, to be
+added left of the diagram;
+\item \vb+b+ is the vertical space, expressed in points, to be
+added at the bottom of the diagram.
+\end{itemize}
+This command will not work properly if your diagram is wider than
+the textwidth; in that case, include the diagram in a mini-page
+environment (see \LaTeX book, page 98) wide enough to contain it and
+position this mini-page in your document using, for example, the
+commands \vb+\hspace*+ and \vb+\vspace*+.
+
+Finally, some unexpected troubles can occur if you
+introduce in a diagram items which have not been designed in a
+way which is compatible with the internal structure of the \D\
+Macros. You will most often get rid of the problem by including the
+new item in a box of formal dimensions (0,0).
+
+\section{Some special characters.}
+
+\p This last section contains some {\em text} symbols which you can
+want to use in connection with the \D\ Macros.
+
+The ``commutative diagram'' symbol \com\ can be produced by giving
+the command \vb+\com+ and the ``adjoint'' symbol \adj\ is obtained
+via the command \vb+\adj+.
+
+Finally here are some commands for designing natural
+transformations, with or without name.\vspace{10pt}
+
+\begin{tabular}{ll}
+{\bs\tt nat} & \nat \\ & \\
+{\bs\tt Nat\{F\}\{$\alpha$\}\{G\}} & \Nat{F}{\alpha}{G} \\ & \\
+{\bs\tt binat} & \binat \\ & \\
+{\bs\tt Binat\{F\}\{$\alpha$\}\{G\}\{$\beta$\}\{H\}} &
+\Binat{F}{\alpha}{G}{\beta}{H}
+\end{tabular}
+
+\vspace{10pt}
+
+In the case of named natural transformations, the names of the
+functors and the natural transformations are processed in Math
+mode; thus do not include any \$ sign for putting a mathematical
+symbol in those names. Here is how those symbols will be positioned
+in a line of text:\\
+$$A\nat B\binat C$$
+
+
+\end{document}
diff --git a/macros/latex209/contrib/misc/diagtest.tex b/macros/latex209/contrib/misc/diagtest.tex
new file mode 100644
index 0000000000..7673ae4129
--- /dev/null
+++ b/macros/latex209/contrib/misc/diagtest.tex
@@ -0,0 +1,403 @@
+%TESTS OF DIAGRAM MACROS - J. C. Reynolds - December 1987
+
+%This is an input file for LATEX that inputs the macros in diagmac.tex
+%and tests them. A user's manual for these macros is in diagmac.doc
+
+\documentstyle[12pt]{article}
+\oddsidemargin=0in
+\evensidemargin=0in
+\textwidth=6.5in
+\begin{document}
+
+\thispagestyle{empty}
+
+\begin{centering}
+{\large\bf TESTS OF DIAGRAM MACROS} \\[14 pt]
+\today \\[21 pt]
+\end{centering}
+
+\input diagmac
+
+%These are the two examples given in the user's manual.
+
+$$\diagram{
+\vertex 0,100:{A}{\border{3pt}{4pt}\rect}
+\vertex 150,100:{B}{\border{3pt}{4pt}\rect}
+\vertex 0,0:{A'}{\border{3pt}{4pt}\rect}
+\vertex 150,0:{B'}{\border{3pt}{4pt}\rect}
+\setedge 0,100,150,100:
+\shadeedge
+\drawsolidedge
+\drawedgehead{100}10
+\abutabove 75:{\textstyle c}{\border{2pt}{2pt}\octagon{3pt}}
+\setedge 0,0,150,0:
+\shadeedge
+\drawsolidedge
+\drawedgehead{100}10
+\abutbelow 75:{\textstyle c'}{\border{2pt}{2pt}\octagon{3pt}}
+\setedge 0,100,0,0:
+\shadeedge
+\drawsolidedge
+\drawedgehead{100}10
+\abutleft 50:{\textstyle a}{\border{2pt}{2pt}\octagon{3pt}}
+\setedge 150,100,150,0:
+\shadeedge
+\drawsolidedge
+\drawedgehead{100}10
+\abutright 50:{\textstyle b}{\border{2pt}{2pt}\octagon{3pt}}
+}$$
+
+$$\ctdiagram{
+\ctv 0,100:{A}
+\ctv 150,100:{B}
+\ctv 0,0:{A'}
+\ctv 150,0:{B'}
+\ctet 0,100,150,100:{c}
+\cteb 0,0,150,0:{c'}
+\ctel 0,100,0,0:{a}
+\cter 150,100,150,0:{b}
+}$$
+
+\newpage
+
+%This gives a thorough workout to the general macros for diagrams.
+%The result looks like an eye-chart for Martians.
+
+$$\diagram{
+\vertex -150,0:{X+Y}{\border{4pt}{3pt}\rorect{2pt}01\outline}
+\vertex 0,-50:Y{\border{10pt}{10pt}\hexagon\outline}
+\vertex 150,0:\sum{\border{10pt}{10pt}\octagon{10pt}\outline
+ \border{5pt}{5pt}\octagon{12pt}\thicklines\outline\thinlines}
+\vertex -100,150:\alpha{\border{4pt}{3pt}\diamond\outline}
+\vertex 100,150:\sum{\border{10pt}{10pt}\rorect{20pt}00\outline
+ \border{5pt}{5pt}\rorect{24pt}00\thicklines\outline\thinlines}
+\vertex 0,200:{X^2+Y^2}{\border{4pt}{3pt}\rect\outline}
+\place -150,-150:{X+Y^{Z^2}}
+ {\leftghost X\symmetrize\borderto{0pt}{0pt}\border{4pt}{3pt}\rect\outline
+ \setcircle{16pt}{\xcenter}{\bexpr}\drawcircle0110
+ \drawcirclehead{0}{-1}1
+ \abutcirclebelow{-10pt}\alpha{\border{2pt}{2pt}\rect\outline}
+ \abutcirclebelow{10pt}\alpha{\border{2pt}{2pt}\rect\outline}}
+\placed{150pt}{-150pt}{X+Y}
+ {\rightghost Y\symmetrize\borderto{0pt}{26pt}\border{4pt}{0pt}\rect\outline
+ \placed{\lexpr}{\ycenter}{\vrule height3.2pt depth-2.8pt width10pt}{}
+ \place 0,-3:{\vrule height3.2pt depth-2.8pt width10pt}{\xcenter=\lexpr}
+ \setcircle{16pt}{\rexpr}{\texpr}\shiftcircle{8pt}{8pt}\drawcircle1101
+ \drawcirclehead{0}{-1}1\drawcirclehead{-1}00
+ \abutcircleabove{0pt}\alpha{\border{2pt}{2pt}\rect\outline}}
+\vertex 0,-150:{}{\setcircle{40pt}{\xcenter}{\ycenter}\drawcircle1111
+ \drawcirclehead231\drawcirclehead{-2}30
+ \drawcirclehead6{-9}0\drawcirclehead{-4}{-6}1
+ \abutcircleleft{0pt}\alpha{\border{2pt}{2pt}\rect\outline}
+ \abutcircleright{20pt}\alpha{\border{2pt}{2pt}\rect\outline}
+ \abutcircleright{0pt}\alpha{\border{2pt}{2pt}\rect\outline}
+ \abutcircleright{-20pt}\alpha{\border{2pt}{2pt}\rect\outline}}
+\setedge 0,200,-100,150:\shadeedge\drawsolidedge\drawedgehead{100}10
+ \abutleft 185:{\alpha+\beta}{\border{2pt}{2pt}\rorect{5pt}01\outline}
+\setedge 0,200,100,150:\shadeedge\drawsolidedge\drawedgehead{100}10
+ \abutright 185:{\alpha+\beta}{\border{2pt}{2pt}\rorect{5pt}01\outline}
+\setedge -150,0,0,-50:\shadeedge\drawdashedge{11pt}{10pt}01\drawedgehead{80}01
+ \abutleftd{-25pt}{\alpha\beta}
+ {\border{2pt}{2pt}\borderto{25pt}{0pt}\rect\outline}
+\setedge -150,0,150,0:\drawedgehead{50}01\shadeedge\drawsolidedge
+ \abutabove -10:\rho{\border{2pt}{2pt}\diamond\outline}
+\setedge -150,0,-100,150:\shadeedge\drawsolidedge\drawedgehead{100}10
+ \abutleft 75:\rho{\border{10pt}{10pt}\octagon{10pt}\outline}
+\setedge -150,0,100,150:\shadeedge\drawdotedge{7pt}1
+ \abutaboved{-100pt}\rho{\border{10pt}{10pt}\hexagon\outline}
+\setedge 0,-50,150,0:\shadeedge\drawsolidedge\drawedgehead{20}11
+ \abutrightd{-25pt}\rho{\border{2pt}{2pt}\borderto{25pt}{0pt}\rect\outline}
+\setedge 0,-50,-100,150:\shadeedge\drawsolidedge
+\setedge 0,-50,100,150:\shadeedge\drawsolidedge
+\setedge 150,0,-100,150:\shadeedge\drawsolidedge
+ \abutbelowd{100pt}\rho{\border{10pt}{10pt}\hexagon\outline}
+\setedge 150,0,100,150:\shadeedge\drawdashedge{40pt}{40pt}11\drawedgehead000
+ \abutleft 75:\rho{\border{10pt}{10pt}\hexagon\outline}
+ \shiftedge{-10pt}\shadeedge\drawdashedge{30pt}{30pt}10\drawedgehead000
+ \shiftedge{-10pt}\shadeedge\drawdashedge{11pt}{5pt}01\drawedgehead000
+ \shiftedge{-10pt}\shadeedge\drawdotedge{8pt}0\drawedgehead{100}10
+ \abutright 75:\rho{\border{5pt}{5pt}\rorect{5pt}11\outline}
+\setedge -100,150,100,150:\drawedgehead{50}11\shadeedge\drawsolidedge
+ \abutbelow 0:\rho{\border{2pt}{2pt}\rect\outline}
+\setedge 0,-50,-150,-150:\thicklines\drawedgehead{50}01\thinlines
+ \shadeedge\drawdashedge{13pt}{3pt}01\drawedgehead{50}11
+ \abutbelow -50:{X \atop Y}{\border{2pt}{2pt}\rorect{5pt}10\outline}
+\setedge 0,-50,0,-150:\thicklines\shadeedge\drawsolidedge\thinlines
+\setedge 0,-50,150,-150:\shadeedge\drawsolidedge
+ \abutabove 75:{X \atop Y}{\border{2pt}{2pt}\rorect{5pt}10\outline}
+\setedge -175,-50,-175,-100:\drawdashedge{10pt}{31pt}11
+\setedge -165,-100,-165,-50:\drawdashedge{15pt}{15pt}01
+\setedge -155,-50,-155,-100:\drawdashedge{5pt}{5pt}11
+\setedge -145,-100,-145,-50:\drawdotedge{26pt}1
+\setedge -135,-50,-135,-100:\drawdotedge{25pt}1
+\setedge -125,-100,-125,-50:\drawdotedge{5pt}1
+\setedge 125,-50,175,-50:\drawdashedge{10pt}{31pt}11
+\setedge 175,-60,125,-60:\drawdashedge{15pt}{15pt}01
+\setedge 125,-70,175,-70:\drawdashedge{5pt}{5pt}11
+\setedge 175,-80,125,-80:\drawdotedge{26pt}1
+\setedge 125,-90,175,-90:\drawdotedge{25pt}1
+\setedge 175,-100,125,-100:\drawdotedge{5pt}1
+}$$
+
+\newpage
+
+%These three diagrams test the macros for category-theory diagrams.
+
+$$\ctdiagram{
+\ctvg0,0:{Y'}{\ctlpbl{I_{Y'}}}
+\ctvg150,0:{Z=Z_0}{\ctgl{Z}\ctlpbr{I_Z}}
+\ctvg0,100:{X_0=X}{\ctgr{X}\ctlptl{I_X}}
+\ctvg150,100:{Y}{\ctlptr{I_Y}}
+\ctet0,100,150,100:\alpha
+\cteb0,0,150,0:{\beta'}
+\ctel0,100,0,0:{\alpha'}
+\cter150,100,150,0:\beta
+\ctetb0,100,150,0:11{\alpha;\beta}{\alpha';\beta'}
+}$$
+
+$$\ctdiagram{\ctdash
+\ctvg0,0:{Y'}{\ctlpblcc{I_{Y'}}}
+\ctvg150,0:{Z=Z_0}{\ctgl{Z}\ctlpbrcc{I_Z}}
+\ctvg0,100:{X_0=X}{\ctgr{X}\ctlptlcc{I_X}}
+\ctvg150,100:{Y}{\ctlptrcc{I_Y}}
+\ctet0,100,150,100:\alpha
+\ctnohead\cteb0,0,150,0:{\beta'}\cthead
+\ctel0,100,0,0:{\alpha'}
+\cter150,100,150,0:\beta
+\ctelr0,100,150,0:11{\alpha';\beta'}{\alpha;\beta}
+}$$
+
+$$\ctdiagram{
+\ctv0,0:{Y'}
+\ctvg150,0:{Z=Z_0}{\ctgl{Z}}
+\ctvg0,100:{X_0=X}{\ctgr{X}}
+\ctv150,100:Y
+\ctetg0,100,150,100;50:\alpha
+\ctebg0,0,150,0;50:{\beta'}
+\ctelg0,100,0,0;30:{\alpha'}
+\cterg150,100,150,0;30:\beta
+\ctetbg0,100,150,0;50,100:10{\rho}{\rho'}
+\ctelrg0,0,150,100;70,30:01{\theta}{\theta'}
+}$$
+
+\newpage
+
+%The next two diagrams are further tests of the macros for drawing
+%double edges.
+
+$$\ctdiagram{
+\ctv0,0:X
+\ctv-100,100:Y\ctv-100,0:Y\ctv-100,-100:Y
+\ctv100,100:Z\ctv100,0:Z\ctv100,-100:Z
+\ctetb0,0,-100,100:10\alpha\beta
+\ctdash\ctetb0,0,-100,0:00\alpha\beta\ctsolid
+\ctetb0,0,-100,-100:01\alpha\beta
+\ctetb0,0,100,100:10\alpha\beta
+\ctdash\ctetb0,0,100,0:11\alpha\beta\ctsolid
+\ctetb0,0,100,-100:01\alpha\beta
+}$$
+
+$$\ctdiagram{
+\ctv0,0:X
+\ctv-100,100:Y\ctv0,100:Y\ctv100,100:Y
+\ctv-100,-100:Z\ctv0,-100:Z\ctv100,-100:Z
+\ctelr0,0,-100,100:10\alpha\beta
+\ctelr0,0,0,100:00\alpha\beta
+\ctelr0,0,100,100:01\alpha\beta
+\ctelr0,0,-100,-100:10\alpha\beta
+\ctelr0,0,0,-100:11\alpha\beta
+\ctelr0,0,100,-100:01\alpha\beta
+}$$
+
+\newpage
+
+%These two diagrams test the usage of \ctinnermid and \ctoutermid.
+
+$$\ctdiagram{\ctv 0,0:{
+{\displaystyle\sum_{i=0}^{100}x_i\cdot y_i}\over
+{\displaystyle\sqrt{\biggl(\sum_{i=0}^{100}x_i^2\biggr)
++\biggl(\sum_{i=0}^{100}y_i^2\biggr)}}}
+\ctv0,150:A\ctv150,150:B\ctv150,0:C\ctv150,-150:D
+\ctv0,-150:E\ctv-150,-150:F\ctv-150,0:G\ctv-150,150:H
+\cter0,0,0,150:A\ctinnermid\cter0,0,0,150:a\ctoutermid
+\cter150,150,0,0:B\ctinnermid\cter150,150,0,0:b\ctoutermid
+\cteb0,0,150,0:C\ctinnermid\cteb0,0,150,0:c\ctoutermid
+\cteb150,-150,0,0:D\ctinnermid\cteb150,-150,0,0:d\ctoutermid
+\ctel0,0,0,-150:E\ctinnermid\ctel0,0,0,-150:e\ctoutermid
+\ctel-150,-150,0,0:F\ctinnermid\ctel-150,-150,0,0:f\ctoutermid
+\ctet0,0,-150,0:G\ctinnermid\ctet0,0,-150,0:g\ctoutermid
+\ctet-150,150,0,0:H\ctinnermid\ctet-150,150,0,0:h
+}$$
+
+$$\ctdiagram{\ctv 0,0:{
+{\displaystyle\sum_{i=0}^{100}x_i\cdot y_i}\over
+{\displaystyle\sqrt{\biggl(\sum_{i=0}^{100}x_i^2\biggr)
++\biggl(\sum_{i=0}^{100}y_i^2\biggr)}}}
+\ctv-150,150:A\ctv0,150:C\ctv150,150:E\ctv150,0:G
+\ctelr0,0,-150,150:11AB\ctinnermid
+\ctelr0,0,-150,150:11ab\ctoutermid
+\ctelr0,150,0,0:11CD\ctinnermid
+\ctelr0,150,0,0:11cd\ctoutermid
+\ctetb0,0,150,150:11EF\ctinnermid
+\ctetb0,0,150,150:11ef\ctoutermid
+\ctetb150,0,0,0:11GH\ctinnermid
+\ctetb150,0,0,0:11gh
+}$$
+
+\newpage
+
+%This is a ``real'' diagram, relating directed complete relations to
+%Scott's inverse limit construction. It is sufficiently crowded
+%that it has been necessary to place some of the abutted expressions
+%carefully to avoid ambiguity.
+
+$$\ctdiagram{
+\ctvg0,0:{D_0}{\border{2pt}{0pt}}
+\ctv72,0:{D_1}
+\ctv144,0:{D_2}
+\ctv216,0:{\quad\cdots}
+\ctvg288,144:{D_\infty}{\advance\ycenter by 5pt\border{50pt}{10pt}}
+\ctv234,36:{\cdots}
+\ctetbg0,0,72,0;48,48:10{\phi_0}{\psi_0}
+\ctetbg72,0,144,0;114,114:10{\phi_1}{\psi_1}
+\ctetb144,0,216,0:10{\phi_2}{\psi_2}
+\ctelrg0,0,288,144;42,30:10{\Phi_0}{\Psi_0}
+\ctelrg72,0,288,144;42,30:10{\Phi_1}{\Psi_1}
+\ctelrg144,0,288,144;42,30:10{\Phi_2}{\Psi_2}
+\ctvg0,-72:{D'_0}{\border{2pt}{0pt}}
+\ctv72,-72:{D'_1}
+\ctv144,-72:{D'_2}
+\ctv216,-72:{\quad\cdots}
+\ctvg288,-216:{D'_\infty}{\advance\ycenter by -5pt\border{50pt}{10pt}}
+\ctv234,-108:{\cdots}
+\ctetbg0,-72,72,-72;48,48:10{\phi'_0}{\psi'_0}
+\ctetbg72,-72,144,-72;114,114:10{\phi'_1}{\psi'_1}
+\ctetb144,-72,216,-72:10{\phi'_2}{\psi'_2}
+\ctelrg0,-72,288,-216;-114,-102:10{\Phi'_0}{\Psi'_0}
+\ctelrg72,-72,288,-216;-114,-102:10{\Phi'_1}{\Psi'_1}
+\ctelrg144,-72,288,-216;-114,-102:10{\Phi'_2}{\Psi'_2}
+\cter0,0,0,-72:{\alpha_0}
+\cter72,0,72,-72:{\alpha_1}
+\cter144,0,144,-72:{\alpha_2}
+\ctv216,-36:{\cdots}
+\ctdash
+\cter288,144,288,-216:{\alpha_\infty}
+}$$
+
+\newpage
+
+%This shows how a macro can be defined and then used to give two different
+%views of the same diagram.
+
+\def\testcube#1#2#3#4#5#6#7#8{
+$$\ctdiagram{
+\ctv#1,#3:{A_1}
+\ctv#2,#3:{B_1}
+\ctv#1,#4:{A_2}
+\ctv#2,#4:{B_2}
+\ctv#5,#7:{A'_1}
+\ctv#6,#7:{B'_1}
+\ctv#5,#8:{A'_2}
+\ctv#6,#8:{B'_2}
+\ctet#1,#3,#2,#3:{\gamma_1}
+\ctet#1,#4,#2,#4:{\gamma_2}
+\cter#1,#3,#1,#4:{\alpha}
+\cter#2,#3,#2,#4:{\beta}
+\ctet#5,#7,#6,#7:{\gamma'_1}
+\ctet#5,#8,#6,#8:{\gamma'_2}
+\cter#5,#7,#5,#8:{\alpha'}
+\cter#6,#7,#6,#8:{\beta'}
+\cter#1,#3,#5,#7:{a_1}
+\cter#2,#3,#6,#7:{b_1}
+\cter#1,#4,#5,#8:{a_2}
+\cter#2,#4,#6,#8:{b_2}
+}$$}
+
+\testcube{0}{200}{200}{0}{50}{150}{150}{50}
+
+\testcube{0}{150}{150}{0}{100}{250}{200}{50}
+
+\newpage
+
+%An example of a partial ordering with a limit point.
+
+$${\def\diagramunit{0.25in}
+\ctdiagram{\ctnohead
+\ctv0,0:{\geq 0}
+\ctv2,2:{\geq 1}
+\ctv4,4:{\geq 2}
+\ctv7,7:\infty
+\ctv-2,2:{=0}
+\ctv0,4:{=1}
+\ctv2,6:{=2}
+\cten0,0,2,2:
+\cten2,2,4,4:
+\cten0,0,-2,2:
+\cten2,2,0,4:
+\cten4,4,2,6:
+\ctdot
+\cten4,4,7,7:
+}}$$
+
+%An example of a binary tree, produced by user macros.
+
+\newcount\cnx\newcount\cny\newcount\cnxx\newcount\cnyy
+
+\def\treea#1{\cnxx=\cnx\cnyy=\cny
+\ctv\cnx,\cny:{\scriptstyle #1}
+\advance\cnx by -1\advance\cny by 4
+\ctdot
+\cten\cnxx,\cnyy,\cnx,\cny:
+\advance\cnx by 2
+\cten\cnxx,\cnyy,\cnx,\cny:
+\ctsolid
+\cnx=\cnxx\cny=\cnyy}
+
+\def\treeb#1{\ctv\cnx,\cny:{\scriptstyle #1}
+\advance\cnx by -2\advance\cny by 4
+\treea{#10}
+\cnxx=\cnx\advance\cnxx by 2\cnyy=\cny\advance\cnyy by -4
+\cten\cnxx,\cnyy,\cnx,\cny:
+\advance\cnx by 4
+\treea{#11}
+\cnxx=\cnx\advance\cnxx by -2\cnyy=\cny\advance\cnyy by -4
+\cten\cnxx,\cnyy,\cnx,\cny:
+\advance\cnx by -2\advance\cny by -4}
+
+\def\treec#1{\ctv\cnx,\cny:{\scriptstyle #1}
+\advance\cnx by -4\advance\cny by 4
+\treeb{#10}
+\cnxx=\cnx\advance\cnxx by 4\cnyy=\cny\advance\cnyy by -4
+\cten\cnxx,\cnyy,\cnx,\cny:
+\advance\cnx by 8
+\treeb{#11}
+\cnxx=\cnx\advance\cnxx by -4\cnyy=\cny\advance\cnyy by -4
+\cten\cnxx,\cnyy,\cnx,\cny:
+\advance\cnx by -4\advance\cny by -4}
+
+\def\treed#1{\ctv\cnx,\cny:{\scriptstyle #1}
+\advance\cnx by -8\advance\cny by 4
+\treec{#10}
+\cnxx=\cnx\advance\cnxx by 8\cnyy=\cny\advance\cnyy by -4
+\cten\cnxx,\cnyy,\cnx,\cny:
+\advance\cnx by 16
+\treec{#11}
+\cnxx=\cnx\advance\cnxx by -8\cnyy=\cny\advance\cnyy by -4
+\cten\cnxx,\cnyy,\cnx,\cny:
+\advance\cnx by -8\advance\cny by -4}
+
+\def\tree{\ctv\cnx,\cny:\bot\def\centerheight{2pt}
+\advance\cnx by -16\advance\cny by 4
+\treed{0}
+\cnxx=\cnx\advance\cnxx by 16\cnyy=\cny\advance\cnyy by -4
+\cten\cnxx,\cnyy,\cnx,\cny:
+\advance\cnx by 32
+\treed{1}
+\cnxx=\cnx\advance\cnxx by -16\cnyy=\cny\advance\cnyy by -4
+\cten\cnxx,\cnyy,\cnx,\cny:
+\advance\cnx by -16\advance\cny by -4}
+
+$${\def\diagramunit{7.5pt}
+\ctdiagram{\ctnohead\cnx=0\cny=0\tree}}$$
+
+\end{document}
diff --git a/macros/latex209/contrib/misc/dina4.sty b/macros/latex209/contrib/misc/dina4.sty
new file mode 100644
index 0000000000..8ed259ac31
--- /dev/null
+++ b/macros/latex209/contrib/misc/dina4.sty
@@ -0,0 +1,4 @@
+% DINA4-Format
+\oddsidemargin 6pt\evensidemargin 6pt\marginparwidth 48pt\marginparsep 10pt
+\topmargin -18pt\headheight 12pt\headsep 25pt\footheight 12pt\footskip 30pt
+\textheight 625pt\textwidth 431pt\columnsep 10pt\columnseprule 0pt
diff --git a/macros/latex209/contrib/misc/disstyle.sty b/macros/latex209/contrib/misc/disstyle.sty
new file mode 100644
index 0000000000..cdaf6e1622
--- /dev/null
+++ b/macros/latex209/contrib/misc/disstyle.sty
@@ -0,0 +1,42 @@
+% Das ist ein Style, wie er fuer Diessertationen hilfreich sein koennte
+%
+% Gabriele Kruljac, MPI
+
+\typeout{Document Substyle `DISSTYLE' by MPI FKF, Version 1.2, 15.06.89}
+
+
+% Hier wird die Seitenzahl defaultm"a"sig oben in die Mitte gesetzt
+\def\ps@plain{\def\@oddhead{\hfil\thepage\hfil}\def\@oddfoot{}%
+\def\@evenhead{\hfil\thepage\hfil}\def\@evenfoot{}}
+\def\ps@mypage{\def\@oddhead{\hfil\thepage\hfil}\def\@oddfoot{}%
+\def\@evenhead{\hfil\thepage\hfil}\def\@evenfoot{}}
+\pagestyle{plain}
+
+% Hiermit werden Gleichungen mit Kapitel.Gleichung numeriert und
+% der Gleichungszaehler bei Beginn eines neuen Kapitels initialisiert.
+\@addtoreset{equation}{section}
+\def\theequation{\thesection.\arabic{equation}}
+
+% Hiermit werden Abbildungen mit Kapitel.Abbildung numeriert und
+% der Abbildungszaehler bei Beginn eines neuen Kapitels initialisiert.
+\@addtoreset{figure}{section}
+\def\thefigure{\thesection.\arabic{figure}}
+
+% Hiermit werden Tafeln mit Kapitel.Tafel numeriert und
+% der Tafelzaehler bei Beginn eines neuen Kapitels initialisiert.
+\@addtoreset{table}{section}
+\def\thetable{\thesection.\arabic{table}}
+
+% Die folgenden Definitionen ueberschreiben die Voreinstellung
+% fuer den \paragraph Befehl, und stellt ihn als vierte Gliederungsebene
+% zur Verf"ugung.
+% Standardmaessig wird die Ueberschrift eines Paragraphs ohne Nummer
+% in bold und der folgende Text in die gleiche Zeile gesetzt.
+% Jetzt wird paragraph mit numeriert, danach eine neue Zeile begonnen
+% und der Titel des paragraph mit ins Inhaltsverzeichnis uebernommen
+
+\def\paragraph{\@startsection {paragraph}{4}{\z@}
+ {-3.25ex plus -1ex minus-.2ex}{1.5ex plus .2ex}
+ {\normalsize\bf}}
+\setcounter{secnumdepth}{4}
+\setcounter{tocdepth}{4}
diff --git a/macros/latex209/contrib/misc/dpccyr.sty b/macros/latex209/contrib/misc/dpccyr.sty
new file mode 100644
index 0000000000..3dd96abd66
--- /dev/null
+++ b/macros/latex209/contrib/misc/dpccyr.sty
@@ -0,0 +1,262 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "David Carlisle",
+%%% version = "1.00",
+%%% date = "09 December 1991",
+%%% time = "17:33:06 BST",
+%%% filename = "dpccyr.sty",
+%%% address = "Computer Science Department
+%%% Manchester University
+%%% Oxford Road
+%%% Manchester
+%%% England
+%%% M13 9PL",
+%%% telephone = "+44 61 275 6139",
+%%% FAX = "+44 61 275 6236",
+%%% checksum = "39898 262 918 8382",
+%%% email = "carlisle@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, cyrillic, NFSS",
+%%% supported = "yes",
+%%% docstring = "
+%%%
+%%% dpccyr.sty (cyrillic.sty)
+%%%
+%%% Loads the UWcyr fonts for the NFSS.
+%%% This file may be installed as cyrillic.sty but should be
+%%% distributed as dpccyr.sty to avoid name clashes with other,
+%%% possibly better, cyrillic options.
+%%%
+%%% The checksum field above was produced by
+%%% Robert Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*x>
+% This file may be used without modification as a style (.sty) file.
+%
+% If you have Mittelbach's doc.sty, this file may be formatted with a
+% command like:
+% latex dpccyr.sty
+%
+% If you have the Mittelbach/Duchier/Braams docstrip utility, you may
+% produce a faster loading .sty file. Rename this file to: dpccyr.doc
+% Then run this file through *plain* TeX:
+% tex dpccyr.doc
+% This should produce the file dpccyr.sty.
+% If you do not have plain TeX on your system, you can trick LaTeX into
+% doing the work as follows:
+% latex \def\fmtname{plain} \input dpccyr.doc
+% Note that you may need to quote the arguments here to stop your
+% operating system treating the \ characters incorrectly.
+%
+% latex dpccyr.doc
+% Will produce a typeset version of the documentation, as above.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\plain{plain}\ifx\fmtname\plain\csname fi\endcsname
+ \def\batchfile{dpccyr.doc}
+ \input docstrip
+ \preamble
+
+ Do not distribute the stripped version of this file.
+ The checksum in the header refers to the documented version.
+
+ \endpreamble
+% =======
+ \generateFile{dpccyr.sty}{t}{\from{dpccyr.doc}{fontdef}}
+% =======
+% You do not need the fontdef option if you LaTeX format already has
+% the cyrillic fontdefs (eg fontdef.max). So you may just need:
+% \generateFile{dpccyr.sty}{t}{\from{dpccyr.doc}{}}
+ \endinput
+\fi
+%
+\ifcat a\noexpand @\let\next\relax\else\def\next{%
+ \documentstyle[dpccyr,doc]{article}\MakePercentIgnore}\fi\next
+%
+%\def\eatmodule<#1>{}\eatmodule
+%</x>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \textwidth=355pt ^^A Allow macrocode text with 72 columns.
+% \CodelineIndex ^^A Code lines numbered.
+% \DisableCrossrefs ^^A No Cross references.
+% \MakeShortVerb{\|} ^^A |\foo| works like \verb+\foo+
+%
+%
+% \title{dpccyr.sty\\(cyrillic.sty)}
+% \author{D. P. Carlisle}
+% \date{09 December 1991}
+% \begin{document}
+% \maketitle
+%
+% This file defines the commands:\\
+% |\cyr| normal weight upright cyrillic\\
+% |\cyr\it| normal weight italic cyrillic\\
+% |\cyr\sc| normal weight caps and small caps cyrillic\\
+% |\cyr\bf| bold weight upright cyrillic\\
+% |\cyrss| normal weight sans-serif cyrillic\\
+% |\mathcyr| same as |\cyr|, but set up for math-mode
+%
+% It should perhaps be noted that I know nothing at all about the
+% Cyrillic alphabet, this is just a basic set of declarations to allow
+% these fonts to be used in a \LaTeX\ based on the NFSS.
+%
+% This file may be installed as {\tt cyrillic.sty}, however it should be
+% distributed as {\tt dpccyr.sty} to avoid name clashes with other,
+% possibly better Cyrillic styles.
+%
+% \typeout{End of the Introduction and Examples.}
+% \typein[\answer]%
+% {Do you want an annotated listing of the macro definitions (y/n) ?}
+% \def\next{y}\ifx\answer\next\else\expandafter\stop\fi
+%
+% \section{The Macros}
+%
+% If your \LaTeX\ format is built with a fontdef file, like {\tt
+% fontdef.max}, which contains the cyrillic font definitions, you may
+% modify the |\generateFile| command in the preamble to this document,
+% not to include the {\tt fontdef} option. {\tt docstrip} will then
+% remove the following section from the stripped {\tt .sty} version of
+% this file.
+%
+% \begin{macrocode}
+%<*fontdef>
+\new@fontshape{UWCyr}{m}{n}{%
+ <5>wncyr5%
+ <6>wncyr6%
+ <7>wncyr7%
+ <8>wncyr8%
+ <9>wncyr9%
+ <10>wncyr10%
+ <11>wncyr10 at10.95pt%
+ <12>wncyr10 at12pt%
+ <14>wncyr10 at14.4pt%
+ <17>wncyr10 at17.28pt%
+ <20>wncyr10 at20.74pt%
+ <25>wncyr10 at24.88pt}{}
+
+\new@fontshape{UWCyr}{m}{it}{%
+ <5>wncyi5%
+ <6>wncyi6%
+ <7>wncyi7%
+ <8>wncyi8%
+ <9>wncyi9%
+ <10>wncyi10%
+ <11>wncyi10 at10.95pt%
+ <12>wncyi10 at12pt%
+ <14>wncyi10 at14.4pt%
+ <17>wncyi10 at17.28pt%
+ <20>wncyi10 at20.74pt%
+ <25>wncyi10 at24.88pt}{}
+
+\new@fontshape{UWCyr}{m}{sc}{%
+ <5>wncysc10 at5pt%
+ <6>wncysc10 at6pt%
+ <7>wncysc10 at7pt%
+ <8>wncysc10 at8pt%
+ <9>wncysc10 at9pt%
+ <10>wncysc10%
+ <11>wncysc10 at10.95pt%
+ <12>wncysc10 at12pt%
+ <14>wncysc10 at14.4pt%
+ <17>wncysc10 at17.28pt%
+ <20>wncysc10 at20.74pt%
+ <25>wncysc10 at24.88pt}{}
+
+\new@fontshape{UWCyr}{b}{n}{%
+ <5>wncyb5%
+ <6>wncyb6%
+ <7>wncyb7%
+ <8>wncyb8%
+ <9>wncyb9%
+ <10>wncyb10%
+ <11>wncyb10 at10.95pt%
+ <12>wncyb10 at12pt%
+ <14>wncyb10 at14.4pt%
+ <17>wncyb10 at17.28pt%
+ <20>wncyb10 at20.74pt%
+ <25>wncyb10 at24.88pt}{}
+
+\extra@def{UWCyr}{}{}
+
+\new@fontshape{UWCyss}{m}{n}{%
+ <5>wncyss8 at5pt%
+ <6>wncyss8 at6pt%
+ <7>wncyss8 at7pt%
+ <8>wncyss8%
+ <9>wncyss9%
+ <10>wncyss10%
+ <11>wncyss10 at10.95pt%
+ <12>wncyss10 at12pt%
+ <14>wncyss10 at14.4pt%
+ <17>wncyss10 at17.28pt%
+ <20>wncyss10 at20.74pt%
+ <25>wncyss10 at24.88pt}{}
+
+\extra@def{UWCyss}{}{}
+%</fontdef>
+% \end{macrocode}
+%
+% The main definitions:
+% \begin{macrocode}
+\input cyracc.def
+% \end{macrocode}
+%
+% Set up the user level font commands:
+% \begin{macrocode}
+\extra@def{UWCyr}{}{\mathcyracc}
+\def\cyr{\fontfamily{UWCyr}\cyracc\selectfont}
+\def\cyrss{\fontfamily{UWCyss}\cyracc\selectfont}
+
+\subst@fontshape{UWCyr}{bx}{n}{UWCyr}{b}{n}
+
+\newmathalphabet{\mathcyr}
+\addtoversion{normal}{\mathcyr}{UWCyr}{m}{n}
+\addtoversion{bold}{\mathcyr}{UWCyr}{b}{n}
+% \end{macrocode}
+
+% A version of |\cyracc| using |\mathchar| instead of
+% |\char|, so the symbols come from the correct font. Can use
+% |\fam=7| trick rather than get the cyrillic fontfamily out of
+% |\mathcyr@group| as these symbols are only used within the scope (or
+% argument) of |\mathcr|. This ought to be in {\tt cyrac.def}
+% as it applies to any math-mode use of these fonts, not just \LaTeX.
+
+% \begin{macrocode}
+\def\mathcyracc{%
+ \def\cydot{{\kern0pt}}%
+ \mathchardef\cprime"707E
+ \mathchardef\Cprime"705E
+ \mathchardef\cdprime"707F
+ \mathchardef\Cdprime"705F
+ \def\dbar{dj}\def\Dbar{Dj}%
+ \mathchardef\dz"701E
+ \mathchardef\Dz"7016
+ \mathchardef\dzh"700A
+ \mathchardef\Dzh"7002
+ \def\'##1{\if c##1\mathchar"700F
+ \else \if C##1\mathchar"7007
+ \else \mathaccent"7026 ##1\fi \fi }%
+ \def\`##1{\if e##1\mathchar"700B
+ \else \if E##1\mathchar"7003
+ \else \errmessage{accent \string\` not defined in cyrillic}%
+ ##1\fi \fi }%
+ \def\=##1{\if e##1\mathchar"700D
+ \else \if E##1\mathchar"7005
+ \else \if \i##1\mathchar"700C
+ \else \if I##1\mathchar"7004
+ \else \errmessage{accent \string\= not defined in cyrillic}%
+ ##1\fi \fi \fi \fi }%
+ \def\u##1{\if \i##1\mathaccent"7024 i%
+ \else \mathaccent"7024 ##1\fi }%
+ \def\"##1{\if \i##1\mathaccent"7020 \mathchar"703D
+ \else \if I##1\mathaccent"7020 \mathchar"7004
+ \else \mathaccent"7020 ##1\fi \fi }%
+ \def\!{\mskip-\thinmuskip}}
+% \end{macrocode}
+
+% \end{document}
+\endinput \ No newline at end of file
diff --git a/macros/latex209/contrib/misc/draft.sty b/macros/latex209/contrib/misc/draft.sty
new file mode 100644
index 0000000000..e494f9dcf8
--- /dev/null
+++ b/macros/latex209/contrib/misc/draft.sty
@@ -0,0 +1,253 @@
+%
+% new email address: jeb@risc.com
+%
+% NAME THIS FILE: draft.sty (or name it draft.doc and run it through
+% doc2sty) AND PUT IT IN YOUR MACROS OR TEXFORMATS DIRECTORY
+%
+% This is a first attempt at a draft option for the standard LaTeX styles.
+% It still has several problems, which are detailed below.
+% The draft option attempts to accomplish the following:
+% Without requiring any changes to a LaTeX file (other than specifying
+% the draft option :-) and without changing the formatting of the
+% ``real'' text , mark the spots where \label, \cite, \ref, \index,
+% or \glossary commands occur in text, and print the command arguments
+% in the margin.
+%
+% USAGE:
+% Specify draft as an optional argument to the documentstyle command
+% e.g., \documentstyle[11pt,draft]{book}
+%
+% JUSTIFICATION:
+% Why am I submitting this, even though it still has some problems?
+%
+% 1) Even in its present shape, I think it is fairly useful.
+% I was going crazy before, trying to remember labels, keys,
+% and so forth. I am still going crazy, but now for different
+% reasons.
+% 2) I'm just learning TeX, and don't expect to know enough to do this
+% correctly for a while. Hopefully, someone who knows TeX will
+% agree this is a useful option, and will point out my mistakes.
+% Since the changes to the standard LateX routines are fairly minor,
+% and my mistakes are probably silly and quite obvious, this
+% may be easy to do.
+% 3) I am interested in hearing ideas for other features for this
+% option. This option includes some of the ideas of Dr. Rouben
+% Rostamian (rostamia@umbc3.UMD.EDU) and I am interested in
+% hearing from others.
+% 4) Because of 2) and 3), I think we will end up with a better
+% draft option if I post this in its present form and ask for
+% help.
+%
+% Please send bugs, fixes, and suggestions to:
+% Joe Baker
+% 6731 Boelter Hall UCLA L.A., CA 90024 (213) 825-7079, 825-2327
+% INTERNET: jbaker@ee.ucla.edu
+% UUCP: {ucbvax, or other backbone}!ucla-cs!uclaee!jbaker
+%
+% FINALLY, THE DETAILS
+%
+% The option marks \label,\cite,\ref,\index, and \glossary commands in the
+% text with a scriptsize calligraphic letter in the interline space
+% (L for label,
+% C for cite, R for ref, I for index and G for glossary.
+% The label, citation, is printed in the margin in scriptsize bold letters.
+%
+% For items which are input in horizontal mode, a \marginpar box holding
+% the text is put in the right margin (if there are no free boxes left,
+% the next option is used.)
+%
+% Items which are input in display math mode are shoved into the left
+% margin (parboxes are not used, so it is possible for one label to
+% overwrite another, or for a label to run off the left edge of the page.)
+%
+% Items which are input in non-display math mode and equation arrays
+% are giving me problems. The left margin code works fine for equations
+% in the middle of text, but doesn't produce anything for equation arrays.
+% Unfortunately, I haven't found a way to distinguish between the two
+% cases. For now, I simply raise the item and print it in small letters,
+% and hope to avoid hitting any superscripts.
+%
+% Right now, a space or extra bit of glue is getting inserted where the
+% item is, and thus the ``real'' text is not formatted quite the same in
+% draft mode. On the tests I've run so far, there hasn't been enough
+% added space to actually change any of the linebreaks, so it doesn't
+% seem to be a serious problem.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Okay, here it is %%%%%%%%%%%%%%%%%%%%%%%%%%
+% NOTE THIS:
+% force all marginpar items into the right margin, to leave the left
+% margin for calls to marginalnote.
+\@mparswitchfalse
+%
+%
+% MARGINALNOTE
+%
+% The following is a slightly rewritten version of Knuth's marginalstar stuff
+% from the TeXBook, pg. 316. It is used to put a marginalnote in the left
+% margin. The note is just shoved out and made right justified w.r.t. the
+% left margin. Two calls to marginalnote for the same line of text will
+% be written one over the other. Long marginal notes will extend off the
+% page to the left.
+%
+\def\strutdepth{\dp\strutbox}%
+\def\marginalnote#1{\strut\vadjust{\kern-\strutdepth\specialnote{#1}}}%
+\def\specialnote#1{\vtop to \strutdepth{\baselineskip%
+\strutdepth\vss\llap{\hbox{\scriptsize \bf #1}}\null}}%
+%
+% NOTEMARK
+% This is used to put a little calligraphic letter in the text to mark
+% the spot where the item occurred.
+%
+\def\notemark#1{\rlap{%
+\specialnote{\raise8pt\hbox{$\scriptscriptstyle\cal#1$}}}}
+%
+% Since I haven't found one approach that works in all modes, I
+% have set up the makenote routine to use the following options
+% (draftimm, draftdmm, draftinm, drafthm) in inner math mode,
+% display math mode, inner non-math mode, and horizontal mode.
+% If you don't like one, redefine it before the begin{document}
+% line.
+\def\draftimm#1{\hbox{\bf \scriptsize #1}}
+\def\draftdmm#1{\marginalnote{#1}}
+\def\draftinm#1{\notemark{\bf \scriptsize #1}}
+\def\drafthm#1{\ifx\@freelist\@empty % if there are no boxes for a marginpar,
+ \marginalnote{#1} % use a marginalnote
+ \else
+ {\marginpar{\scriptsize \bf #1}}
+ \fi}
+
+%
+% MAKENOTE
+% this routine prints the command argument. It tries to do the best it
+% can for the given mode.
+%
+%\def\makenote#1{
+%
+%
+% \ifmmode % In math mode, we can't use
+% % \marginpar, so we use marginalnote
+% % in display mode, and for now,
+% % just use bold print in inner mode
+% % marginalnote works okay in regular
+% % non-display math, but not in
+% % eqnarrays. By redefining draft...
+% % you can change this behavior.
+% \ifinner
+% \draftimm{#1}
+% \else
+% \draftdmm{#1}
+% \fi
+% \else
+% \ifinner
+% \draftinm{#1}
+% \else
+% \drafthm{#1}
+% \fi
+% \fi}
+\def\makenote#1{\ifmmode\ifinner\draftimm{#1}%
+\else\draftdmm{#1}\fi%
+\else\ifinner\draftinm{#1}%
+\else%
+\drafthm{#1}%
+\fi\fi}
+%
+% MODIFIED LATEX ROUTINES
+% We add the \notemark and \makenote routines to the \ref, \pageref,
+% \label, \index, \glossary, and \cite commands.
+%
+% REF
+%
+% \ref{FOO} ==
+% BEGIN
+% make a reference mark in the text (calligraphic R)
+% if \r@foo undefined
+% then ??
+% Warning: 'reference foo on page ... undefined'
+% else \@car \eval(\r@FOO)\@nil
+% fi
+% make a reference note (hopefully in the margin) listing the
+% reference key
+% END
+%
+\def\ref#1{\notemark{R}%
+\@ifundefined{r@#1}{{\bf ??}\@warning%
+{Reference `#1' on page \thepage \space %
+undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter%
+\@car\@tempa \@nil\null}\makenote{R:#1}}
+%
+% PAGEREF
+%
+% \pageref{foo} =
+% BEGIN
+% make a page reference mark in the text (calligraphic PR)
+% if \r@foo undefined
+% then ??
+% Warning: 'reference foo on page ... undefined'
+% else \@cdr \eval(\r@FOO)\@nil
+% fi
+% make a reference note (hopefully in the margin) listing the
+% page reference key
+% END
+%
+\def\pageref#1{\notemark{PR}%
+\@ifundefined{r@#1}{{\bf ??}\@warning%
+{Reference `#1' on page \thepage \space %
+undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter%
+\@cdr\@tempa\@nil\null}\makenote{PR:#1}}%
+%
+% LABEL
+%
+% same story for the label routine
+\def\label#1%
+{\notemark{L}\makenote{L:#1}\@bsphack%
+\if@filesw{\let\thepage\relax%
+\xdef\@gtempa{\write\@auxout{\string%
+\newlabel{#1}{{\@currentlabel}{\thepage}}}}}\@gtempa%
+\if@nobreak\ifvmode\nobreak\fi\fi\fi\@esphack}
+%
+% INDEX
+% note that \@wrindex is normally used by both the index and the
+% glossary commands. We will make a new version for the glossary
+% command that differs only in putting out a G instead of an I.
+%
+% \@wrindex{ITEM} ==
+% BEGIN
+% make an I mark in the text, and put the index item in the margin
+% write of {\indexentry{ITEM}{page number}}
+% \endgroup
+% \@esphack
+% END
+%
+\def\@wrindex#1#2{\notemark{I}\makenote{I:#2}%
+\let\thepage\relax%
+\xdef\@gtempa{\write#1{\string \indexentry{#2}{\thepage}}}\endgroup\@gtempa%
+\if@nobreak \ifvmode\nobreak\fi\fi\@esphack}%
+%
+% GLOSSARY
+% version for use by glossary commands
+%
+\def\@wrindexg#1#2{\notemark{G}\makenote{G:#2}%
+\let\thepage\relax%
+\xdef\@gtempa{\write#1{\string \indexentry{#2}{\thepage}}}\endgroup\@gtempa%
+\if@nobreak \ifvmode\nobreak\fi\fi\@esphack}%
+%
+% new version of the glossary stuff: just changed @wrindex to @wrindexg
+%
+\def\makeglossary{\if@filesw \newwrite\@glossaryfile
+ \immediate\openout\@glossaryfile=\jobname.glo
+ \def\glossary{\@bsphack\begingroup\@sanitize\@wrindexg\@glossaryfile}\typeout
+ {Writing glossary file \jobname.glo }\fi}
+%
+% CITE
+%
+% citex is used by the bibliography citation routines
+% the second argument is the citation key
+%
+\def\@citex[#1]#2{\notemark{C}\makenote{C:#2}%
+\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+\def\@citea{}\@cite{\@for\@citeb:=#2\do%
+{\@citea\def\@citea{,}\@ifundefined%
+{b@\@citeb}{{\bf ?}\@warning%
+{Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
+
diff --git a/macros/latex209/contrib/misc/draftcopy.sty b/macros/latex209/contrib/misc/draftcopy.sty
new file mode 100644
index 0000000000..3338a7e0d7
--- /dev/null
+++ b/macros/latex209/contrib/misc/draftcopy.sty
@@ -0,0 +1,8 @@
+
+% Prints a large "DRAFT" diagonally across each page
+% Does not show up in TeXview
+
+\typeout{Prints "DRAFT" on each page; does not show in TeXView}
+\special{!userdict begin /bop-hook{gsave 200 30 translate
+65 rotate /Times-Roman findfont 216 scalefont setfont
+0 0 moveto 0.85 setgray (DRAFT) show grestore}def end}
diff --git a/macros/latex209/contrib/misc/drafthead.sty b/macros/latex209/contrib/misc/drafthead.sty
new file mode 100644
index 0000000000..b257a557d9
--- /dev/null
+++ b/macros/latex209/contrib/misc/drafthead.sty
@@ -0,0 +1,40 @@
+% Document style option "drafthead"
+% -- usage: \documentstyle[...,drafthead,...]{...}
+% -- puts "DRAFT" with date and time at top of each page.
+%
+% Author: Stephen Page - sdpage@uk.ac.oxford.prg
+% sdpage%prg.oxford.ac.uk@ucl-cs.arpa
+% sdpage%prg.oxford.ac.uk@cs.ucl.ac.uk
+% Released 23 June 1986
+%
+% Sets \pagestyle{myheadings} and installs a header.
+%
+% Bugs:
+% -- LaTeX supplies free page number in a nonzero-width box at r.h. edge,
+% so the word DRAFT is not exactly centered. It's near enough, though!
+% -- Always sets headers, destroying any user-supplied ones.
+%----------------------------------------------------------------------------
+
+%
+% compute the time in hours and minutes; make new variables \timehh and \timemm
+%
+\newcount\timehh\newcount\timemm
+\timehh=\time
+\divide\timehh by 60 \timemm=\time
+\count255=\timehh\multiply\count255 by -60 \advance\timemm by \count255
+%
+% now put in header
+\markboth%
+%--- Left mark
+{\hspace*{\fill}{\protect\small\bf \fbox{DRAFT}}
+\hspace*{\fill}
+\protect\makebox[0pt][r]{\protect\small\sl\today\ --
+\ifnum\timehh<10 0\fi\number\timehh\,:\,\ifnum\timemm<10 0\fi\number\timemm}
+}%--- right mark
+{\protect\makebox[0pt][l]{\protect\small\sl\today\ --
+\ifnum\timehh<10 0\fi\number\timehh\,:\,\ifnum\timemm<10 0\fi\number\timemm}
+\hspace*{\fill}
+{\protect\small\bf \fbox{DRAFT}}
+\hspace*{\fill}}
+
+\pagestyle{myheadings}
diff --git a/macros/latex209/contrib/misc/drafts.sty b/macros/latex209/contrib/misc/drafts.sty
new file mode 100644
index 0000000000..b1cbdb44f6
--- /dev/null
+++ b/macros/latex209/contrib/misc/drafts.sty
@@ -0,0 +1,154 @@
+%%
+%% drafts.sty -- Release: Sept. 3, 1992
+%% Author: H. Saiedian, U. of Nebraska at Omaha, hossein@unocss.unomaha.edu
+%% Usage:
+%% \documentstyle[...,drafts,...]
+%% ...
+%% \pagestyle{drafts}
+%%
+%% This style puts the word |DRAFT| on the top and bottom of each page and
+%% then surrounds it with horizontal rule on both sides. Also date and
+%% time of when the drafts were printed are shown on the bottom of each
+%% each.
+%%
+%% A slightly-modified version of fancyheading.sty is used. drafts.sty has
+%% three parts: fancyheadings stuff developed by Piet van Oostrum (Dept
+%% of Computer Science, University of Utrecht, The Netherlands), TeX code
+%% for getting the time, and the initializations. The initialization part
+%% at the end allows for customization.
+%
+%%--------------------------------------------------------------------------
+%%
+%% Slightly modified fancyheading.sty (developed by Piet van Oostrum)
+%
+\def\lhead{\@ifnextchar[{\@xlhead}{\@ylhead}}
+\def\@xlhead[#1]#2{\gdef\@elhead{#1}\gdef\@olhead{#2}}
+\def\@ylhead#1{\gdef\@elhead{#1}\gdef\@olhead{#1}}
+
+\def\chead{\@ifnextchar[{\@xchead}{\@ychead}}
+\def\@xchead[#1]#2{\gdef\@echead{#1}\gdef\@ochead{#2}}
+\def\@ychead#1{\gdef\@echead{#1}\gdef\@ochead{#1}}
+
+\def\rhead{\@ifnextchar[{\@xrhead}{\@yrhead}}
+\def\@xrhead[#1]#2{\gdef\@erhead{#1}\gdef\@orhead{#2}}
+\def\@yrhead#1{\gdef\@erhead{#1}\gdef\@orhead{#1}}
+
+\def\lfoot{\@ifnextchar[{\@xlfoot}{\@ylfoot}}
+\def\@xlfoot[#1]#2{\gdef\@elfoot{#1}\gdef\@olfoot{#2}}
+\def\@ylfoot#1{\gdef\@elfoot{#1}\gdef\@olfoot{#1}}
+
+\def\cfoot{\@ifnextchar[{\@xcfoot}{\@ycfoot}}
+\def\@xcfoot[#1]#2{\gdef\@ecfoot{#1}\gdef\@ocfoot{#2}}
+\def\@ycfoot#1{\gdef\@ecfoot{#1}\gdef\@ocfoot{#1}}
+
+\def\rfoot{\@ifnextchar[{\@xrfoot}{\@yrfoot}}
+\def\@xrfoot[#1]#2{\gdef\@erfoot{#1}\gdef\@orfoot{#2}}
+\def\@yrfoot#1{\gdef\@erfoot{#1}\gdef\@orfoot{#1}}
+
+\newdimen\headrulewidth
+\newdimen\footrulewidth
+\newdimen\plainheadrulewidth
+\newdimen\plainfootrulewidth
+\newdimen\headwidth
+\newif\if@drafts \@draftsfalse
+\def\drafts#1#2{\if@drafts#1\else#2\fi}
+
+% Initialization of the head and foot text.
+
+\headrulewidth 0pt
+\footrulewidth\z@
+
+\plainheadrulewidth\z@
+\plainfootrulewidth\z@
+
+\lhead{}
+\chead{}
+\rhead{}
+%
+\lfoot{}
+\cfoot{}
+\rfoot{}
+
+% Put together a header or footer given the left, center and
+% right text, fillers at left and right and a rule.
+% The \lap commands put the text into an hbox of zero size,
+% so overlapping text does not generate an errormessage.
+
+\def\@fancyhead#1#2#3#4#5{#1\hbox to\headwidth{\vbox{\hbox
+{\rlap{\parbox[b]{\headwidth}{\raggedright#2\strut}}\hfill
+\parbox[b]{\headwidth}{\centering#3\strut}\hfill
+\llap{\parbox[b]{\headwidth}{\raggedleft#4\strut}}}\headrule}}#5}
+
+
+\def\@fancyfoot#1#2#3#4#5{#1\hbox to\headwidth{\vbox{\footrule
+\hbox{\rlap{\parbox[t]{\headwidth}{\raggedright#2\strut}}\hfill
+\parbox[t]{\headwidth}{\centering#3\strut}\hfill
+\llap{\parbox[t]{\headwidth}{\raggedleft#4\strut}}}}}#5}
+
+\def\headrule{{\if@drafts\headrulewidth\plainheadrulewidth\fi
+\hrule\@height\headrulewidth\@width\headwidth \vskip-\headrulewidth}}
+
+\def\footrule{{\if@drafts\footrulewidth\plainfootrulewidth\fi
+\vskip-0.3\normalbaselineskip\vskip-\footrulewidth
+\hrule\@width\headwidth\@height\footrulewidth\vskip0.3\normalbaselineskip}}
+
+\def\ps@fancy{
+\let\@mkboth\markboth
+\@ifundefined{chapter}{\def\sectionmark##1{\markboth
+{\uppercase{\ifnum \c@secnumdepth>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}
+\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+{\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth>\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}{}}
+\def\sectionmark##1{\markright{\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}}}
+\def\@oddhead{\@fancyhead\relax\@olhead\@ochead\@orhead\hss}
+\def\@oddfoot{\@fancyfoot\relax\@olfoot\@ocfoot\@orfoot\hss}
+\def\@evenhead{\@fancyhead\hss\@elhead\@echead\@erhead\relax}
+\def\@evenfoot{\@fancyfoot\hss\@elfoot\@ecfoot\@erfoot\relax}
+\headwidth\textwidth}
+\def\ps@drafts{\ps@fancy \let\ps@plain\ps@plain@fancy}
+\def\ps@plain@fancy{\@draftstrue\ps@fancy}
+%
+%%--------------------------------------------------------------------------
+%
+%% Getting the time and using it via \now
+%
+\newcount\hour
+\newcount\minute
+\hour=\time
+\divide \hour by 60
+\minute=\time
+\loop \ifnum \minute > 59 \advance \minute by -60 \repeat
+\def\now{%
+\ifnum \hour<13
+\ifnum \hour<1 12:\else\number\hour:\fi
+\ifnum \minute<10 0\fi
+\number\minute%
+\ifnum \hour<12 \ AM \else \ PM \fi
+\else \advance \hour by -12 \number\hour:%
+\ifnum \minute<10 0\fi
+\number\minute%
+\ PM \fi%
+}
+%
+%%--------------------------------------------------------------------------
+%
+%% Initializations
+%
+\headrulewidth 0pt
+\footrulewidth 0pt
+\plainheadrulewidth 0pt
+\plainfootrulewidth 0pt
+%
+\lhead{}
+\chead{.\hrulefill\fbox{\large\sf DRAFT}\hrulefill}
+\rhead{}
+%
+\lfoot{}
+\cfoot{.\hrulefill\fbox{\large\sf DRAFT}\hrulefill \\
+ \sf \today \hspace{1mm} \now \hfill \thepage}
+\rfoot{}
+%%--------------------------------------------------------------------------
+\endinput
diff --git a/macros/latex209/contrib/misc/draftstamp.sty b/macros/latex209/contrib/misc/draftstamp.sty
new file mode 100644
index 0000000000..89b9007597
--- /dev/null
+++ b/macros/latex209/contrib/misc/draftstamp.sty
@@ -0,0 +1,127 @@
+% DRAFTSTAMP.sty
+%
+% Put a big DRAFT (or anything) across each page (or only the first page),
+% using PostScript.
+%
+% USAGE
+% Bring it in with
+% \input draftstamp.sty
+% (LaTeX users can instead say \documentstyle[...,draftstamp,...]{...}).
+% The default it to print DRAFT without the user doing anything.
+%
+% RESTRICTIONS
+% 1) Expects the DVI to PostScript driver to be DVIPS.
+%
+% REMARKS
+% 1) The angle, position, font, and typesize can be changed inside each
+% document if you comment out the \draftstamp just up from the bottom of
+% this file. The price is that you have to say \draftstamp yourself,
+% after you (optionally) redefine these values (obviously at the
+% start of the document). Example: for LaTeX, the line after
+% \documentstyle[..,draftstamp,..]{..}
+% could read
+% \def\drafttext{INTERNAL ONLY}\def\draftPSscalefont{ 100 }\draftstamp
+% (note the \draftstamp). See also Installation (3).
+% 2) The number before setgray describes lightness or darkness of the text.
+% This is white area/total area, so white=1, black=0.
+% 3) Called draftstamp.sty and not draftstamp.tex (i) so LaTeX users can
+% include it in the list of substyles, if desired, and (ii) so a person
+% on the nets can tell from the directory listing alone that it is
+% a drop-in file, and not a document.
+%
+% INSTALLATION
+% 0) Put this where your TeX looks for files. For emTeX that is probably
+% c:\emtex\texinputs.
+% 1) Run as described in Usage and check the darkness of DRAFT. Tip: check
+% if it reproduces on your favorite copier. See Remark (2).
+% 2) Have the next line be uncommented if you want a warning when the
+% stamp is on.
+\message{ Substyle DRAFTSTAMP <93-Jul-07 jh>.}
+% 3) Some people may want DRAFT only on the first page. Or they may want
+% some other text. They need to change this file (or, if this file is in
+% an inaccessable shared area, change a copy of this file in their home
+% area).
+% Here are their options.
+% (i) Go to the bottom.
+% Change the commenting so that \draftfirstpageonlytrue is the
+% default. Now every document will put DRAFT on only the first page.
+% Or, change \drafttext to \def\drafttext{v. 1.01}. Now every
+% document will have v. 1.01 on the pages. Of course, non-English
+% documents will need something like this.
+% Or, change any default in this way.
+% (ii) To decide values on a per-document basis, go to the bottom and
+% comment out the \draftstamp invocation. Inside eacy document,
+% any changes made to the defaults must be followed by \draftstamp:
+% for instance, DRAFT only on the first page with
+% \draftfirstpageonlytrue\draftstamp
+% (naturally you can, for instance, combine the \input draftstamp.sty
+% line and the above into a personal macro).
+% (iii) Modify this file to either prompt the user or to look for a
+% user's (configuration or profile) file to set defaults on a
+% per-user basis. I (jh) thought these were both big solutions to
+% a small problem, so I didn't do them.
+%
+% HISTORY
+% 93-Jul-07 jh Lones Smith (lones@lones.mit.edu) suggests an option for
+% printing only on the first page. I made some internal changes so
+% that could be done at document-processing time, instead of set
+% by a system manager.
+% 93-Jul-01 jh Added Installation (1) tip. Posted to SHSU.
+% 93-May-18 jh Changed setgray number from .99 to .94 to make DRAFT darker
+% so it will reproduce on my copier.
+% 93-Mar-05 jim hefferon (hefferon@smcvax.smcvt.edu) Typed in from an note
+% given by Vivek Khera (khera@cs.duke.edu) on comp.text.tex, who said it
+% came first from Anita Marie Hoover (anita@brahms.udel.edu). ?Derives
+% first from the dvips manual?
+%
+% macro: \draftstamp Insert raw PostScript via a dvips \special.
+% The dvips manual under Other Bells and Whistles suggests printing a DRAFT
+% across each page with essentially:
+% \special{! userdict
+% begin /bop-hook{
+% gsave 200 30 translate
+% 65 rotate /Times-Roman findfont 220 scalefont setfont
+% 0 0 moveto 0.94 setgray (DRAFT) show grestore
+% }def end}}%
+% (`bop-hook' for `beginning of page'?). I (jh) turned these numbers
+% into variables and buried it inside a \def\draftstamp so the numbers are
+% set when the \draftstamp command is issued, instead of when this file is
+% read.
+\newif\ifdraftfirstpageonly
+% Now either \draftfirstpageonlytrue or \draftfirstpageonlyfalse
+% puts DRAFT only on the first page, or on every page. Omitting both
+% amounts to `false'. See the discussion of \newif (p. 211 in TeXbook).
+% (I (jh) chose \newif instead of an optional argument so plain TeX works,
+% not just LaTeX.)
+\def\draftstamphook{\ifdraftfirstpageonly/start%
+ \else/bop%
+ \fi}
+\def\draftstamp{\special{! userdict
+ begin \draftstamphook-hook{
+ gsave \draftPStranslate translate
+ \draftPSrotate rotate \draftPSfont findfont
+ \draftPSscalefont scalefont setfont
+ \draftPSmoveto moveto \draftPSgraylevel setgray
+ (\drafttext) show grestore
+ }def end}}%
+%
+% DEFAULTS
+\def\drafttext{DRAFT}
+\def\draftPStranslate{ 200 30 }
+\def\draftPSscalefont{ 220 }
+\def\draftPSgraylevel{ 0.94 } % See Remarks (2) and Installation (1).
+\def\draftPSrotate{ 65 }
+\def\draftPSmoveto{ 0 0 }
+\def\draftPSfont{ /Times-Roman }
+% Comment out whichever of these you don't want to make the default.
+\draftfirstpageonlyfalse % do all pages
+%\draftfirstpageonlytrue % do first page only
+%
+% The next command activates \draftstamp. If you want to activate
+% differently for each document (say, by sometimes changing DRAFT to
+% SECRET) you need to comment this line out. (It
+% is here for compatibility with old versions of this style.) See also
+% Installation (3).
+\draftstamp
+
+\endinput
diff --git a/macros/latex209/contrib/misc/drop.sty b/macros/latex209/contrib/misc/drop.sty
new file mode 100644
index 0000000000..f4a5d773f9
--- /dev/null
+++ b/macros/latex209/contrib/misc/drop.sty
@@ -0,0 +1,67 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DROP.DOC <February 17, 1988>
+% Macro for dropping and enlarging the first letter(s) of a paragraph.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Macro written by David G. Cantor, and published Fri, 12 Feb 88, in
+% TeXhax, 1988 #16.
+% Internet: dgc@math.ucla.edu
+% UUCP: ...!{ihnp4, randvax, sdcrdcf, ucbvax}!ucla-cs!dgc
+%
+% Modified for use with LaTeX by Dominik Wujastyk, February 17, 1988
+% Internet: dow@wjh12.harvard.edu
+% Bitnet: dow@harvunxw.bitnet
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This LaTeX macro is for dropping and enlarging the first letter(s) of a
+% paragraph. The argument may be one or more letters.
+%
+% Here is an example of its usage:
+%
+% \documentstyle[drop]{article}
+% \begin{document}
+% \drop{IN} THE beginning God created the heaven and the earth. Now the
+% earth was unformed and void, and darkness was upon the face of the
+% deep; and the spirit of God hovered over the face of the waters.
+% \end{document}
+%
+% Which will produce something along these lines:
+%
+% I I\ I THE beginning God created the heaven and the earth.
+% I I \ I Now the earth was unformed and void, and darkness was
+% I I \I upon the face of the deep; and the spirit of God hov-
+% ered over the face of the waters.
+%
+% In the first instance the macro will pause during LaTeX processing and
+% ask you for the font you wish to use for you drop capital. When you
+% have something that looks good, then comment out box one in DROP.STY,
+% and comment in box two, replacing "cmr10 scaled \magstep5" with the font
+% of your choice.
+%
+% In my opinion (DW) there are no fonts available in the standard
+% TeX/LaTeX set that are ideal for this use, unless you go down to 9pt or
+% 8pt for your text face, and this is too small. If you have Metafont you
+% should consider generating a cmr17 font at a magstep of two (about 25pt)
+% or three (about 30pt), or even more, depending on the point size of your
+% main text. Why not go the whole hog and design some really fancy
+% capitals from scratch!
+%
+%%%%%%%%%%%%%%%%%%%%% BOX ONE %%%%%%%%%%%%%%%%%%%%%%%%%
+\typein[\dropinitialfont]{Font for Dropped initial:} %
+\font\largefont \dropinitialfont %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%%%%%%%%%%%%%%%%%%%%% BOX TWO %%%%%%%%%%%%%%%%%%%%%%%%%
+%\font\largefont= cmr10 scaled \magstep5 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\drop#1#2{{\noindent
+ \setbox0\hbox{\largefont #1}\setbox1\hbox{#2}\setbox2\hbox{(}%
+ \count0=\ht0\advance\count0 by\dp0\count1\baselineskip
+ \advance\count0 by-\ht1\advance\count0by\ht2
+ \dimen1=.5ex\advance\count0by\dimen1\divide\count0 by\count1
+ \advance\count0 by1\dimen0\wd0
+ \advance\dimen0 by.25em\dimen1=\ht0\advance\dimen1 by-\ht1
+ \global\hangindent\dimen0\global\hangafter-\count0
+ \hskip-\dimen0\setbox0\hbox to\dimen0{\raise-\dimen1\box0\hss}%
+ \dp0=0in\ht0=0in\box0}#2}
diff --git a/macros/latex209/contrib/misc/ebnf.sty b/macros/latex209/contrib/misc/ebnf.sty
new file mode 100644
index 0000000000..8915794b77
--- /dev/null
+++ b/macros/latex209/contrib/misc/ebnf.sty
@@ -0,0 +1,72 @@
+%From: Damian.Cugley@prg.oxford.ac.uk (Damian Cugley)
+%Subject: Re: Styles for lispcode and grammars wanted...
+%Date: 11 Jul 90 18:34:23 GMT
+%
+%Here's one I threw together for my own use. It does EBNF, in LaTeX, in
+%the style I like - catagory names italicized in angle brackets, and
+%`::=' introducing productions.
+%
+%Example of use:
+%------------------------------------------------------------------------
+%Generally glue is quoted using this notation~\TBcite[\p271]:
+%\begin{EBNF}
+% \item[glue]
+% \<dimen> [~`plus' \<stretch>~] [~`minus' \<stretch>~].
+% \item[stretch]
+% \<dimen> | \<fil dimen>.
+% \item[fil dimen]
+% \<factor> (~`fil' | `fill' | `filll'~).
+%\end{EBNF}
+%A \<stretch> which is a \<dimen> ...
+%------------------------------------------------------------------------
+%
+%This is "list" environment in the style of "description" etc (Sec. 5.7).
+%Thus, productions start with
+%
+% \item[LHS]
+%
+%which produces
+%
+% <LHS> ::=
+%
+%in the document. (This was so I can alter the ::= to something else if
+%I really want to.) Each production is in LR (horizontal) mode. The
+%whole thing is indented to \parindent, with turnover lines indented a
+%further 2 em.
+%
+%`|' produces a vertical line.
+%
+%\<FOO> or \Cat{FOO} produces <FOO>, with FOO italicized.
+%
+%You might prefer {\tt plus} instead of `plus' etc.
+%
+%
+%Here's the code:
+%------------------------------------------------------------------------
+% Damian Cugley <Damian.Cugley@prg.oxford.ac.uk> Wed 11 Jul 1990
+
+\begingroup \catcode`\|=13
+ \gdef\EBNF
+ {\list{???}%
+ {%
+ \catcode`\|=13 \def|{$\mid$}%
+ \def\makelabel##1{\<##1> ::=}%
+ \parsep=0pt \itemsep=\smallskipamount
+ \leftmargin=\parindent \advance\leftmargin+2em
+ \labelsep=0.5em \labelwidth=1.5em
+ \raggedright
+ }%
+ }
+\endgroup
+
+\let\endEBNF\endlist
+
+\def\Cat#1{\hbox{$\langle${\it #1\/}$\rangle$}}
+\def\<#1>{Cat{#1}}
+\endinput
+------------------------------------------------------------------------
+
+ /--------------------------------------------------------------------\
+ | Damian Cugley, Programming Research Group, 11 Keble Rd, Oxford, UK |
+ | Damian.Cugley@prg.oxford.ac.uk =or= ...@oxford.prg in UK |
+ \--------------------------------------------------------------------/
diff --git a/macros/latex209/contrib/misc/editbar.sty b/macros/latex209/contrib/misc/editbar.sty
new file mode 100644
index 0000000000..3214dc108b
--- /dev/null
+++ b/macros/latex209/contrib/misc/editbar.sty
@@ -0,0 +1,615 @@
+\iffalse %
+
+ LaTeX Style: editbar.sty 2.0
+
+ Written by: Michael R. Van Geest
+ Unisys Corp.
+ M.S. 4522
+ 2276 Highcrest Road
+ Roseville, MN 55113
+
+ Internet: mrv@unirsvl.rsvl.unisys.com
+
+ Date: August 17, 1994
+
+ TeX Drivers Supported: DVIPS
+
+
+ General Information:
+
+ editbar.sty is a LaTeX style to be used to print edit bars
+ (change bars) with PostScript as the final output.
+
+ DVIPS is the only driver currently supported, but others could
+ be used.
+
+ Generation of edit bars on one page and/or spanning
+ multiple pages.
+
+ The output routine of LaTeX is modified to include the edit
+ bar commands to span multiple pages.
+
+
+ Macro usage:
+
+ ebarsetup - Place after \begin{document}
+
+ ebarcleanup - Place before \end{document}
+ It is adviseable to put a \clearpage before
+ \ebarcleanup.
+
+ genebaron - Start generating edit bars.
+
+ Put in a \hbox to 0pt to not affect letter spacing.
+
+ Example: \hbox to 0pt{\genebaron\hss}
+
+ If the first item in a sentence or data item,
+ put \hskip0pt before it.
+
+ Example: \hskip0pt\hbox to 0pt{\genebaron\hss}
+
+ genebaroff - End generating edit bars.
+
+
+ Counters that can be modified are:
+
+ \ebaroddside - Distance in points from the left side of the
+ paper to where the edit bar on the odd side
+ of the paper is placed.
+
+ Currently set to 508.
+
+ \ebarevenside - Distance in points from the left side of the
+ paper to where the edit bar on the even side
+ of the paper is placed.
+
+ Currently set to -30.
+
+ \ebarbarheight - Height of edit bar in points on current line.
+ Currently set to 12 (1 pica).
+
+ \ebarbarwidth - Edit bar width in points, currently set to 2.
+
+
+ Auxilary files that are created are:
+
+ \jobname.ebo - Edit bar out file.
+
+ \count0 is written to this file in the output
+ routine by the \write command.
+
+ \jobname.ebi - Edit bar in file. The contents of \jobname.ebo
+ are copied to this file after 1 pass of LaTeX.
+ This file is used as input to the genebaron
+ and genebaroff macros to find out which page(s)
+ to place the edit bars.
+
+ Notes: 1. The .ebo and .ebi files must be deleted if revisions
+ are made to the original .tex file.
+
+ 2. Three passes must be run to ensure correct ebar
+ generation.
+
+ Pass 1 - Write editbar on and off to .ebo file
+
+ Pass 2 - Read editbar on and offs from .ebi file
+ generated on pass one.
+
+ If spanning pages, write ebar span on and
+ off macros to the aux file.
+
+ The reason this is done, is because TeX reads
+ ahead a couple of pages, and will set count
+ registers incorrectly, resulting in incorrect
+ page spanning.
+
+ By writing edit bar page span macros to the aux
+ file, the next pass can do an ifx to check
+ that the edit bar is spanning the correct pages.
+
+ Pass 3 - Read editbar on and offs from pass two.
+ Also check for macros written to aux file
+ from pass 2 for edit bar page spanning.
+
+
+ Restrictions:
+
+ - Does not span multiple chapters. The edit bar must
+ end at the chapter. This is because count0 is used
+ as the edit bar counter to place on odd or even sides
+ if two sided styles are used. If one sided styles
+ are used, the odd side edit bar code is used.
+
+ - Nested edit bars are not supported.
+
+ Examples:
+
+ \genebaron Text \genebaron text \genebaroff
+
+ \genebaron Text \genebaroff text \genebaroff
+
+ - Does support paper resolution. The DVIPS
+ PostScript def Resolution is used.
+
+ - Edit bars in Longtable.sty should work.
+
+
+ Sample Usage:
+
+ \documentstyle[editbar]{book}
+ %
+ \begin{document}
+ %
+ \ebarsetup{}%
+ %
+ Paragraph on page 1
+ %
+ \newpage
+ This paragraph \hbox to 0pt{\genebaron\hss}has an edit bar on it.
+ %
+ \newpage
+ %
+ This is a paragraph that has an edit bar around it.
+ %
+ This \genebaroff{}is a paragraph with end edit bar that ends it.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ More stuff.
+ %
+ \clearpage\ebarcleanup{}%
+ \end{document}
+
+\fi %
+
+\def\fileversion{v2.0}
+\def\filedate{17AUG94}
+\wlog{Style-Option: `editbar' \fileversion \space\space <\filedate> (M.R.V.G.)}
+
+% Dimen Register - truepagetotal
+%
+% This is set in the sample output routine. Must be used for edit bars
+% to work correctly.
+%
+\newdimen\truepagetotal
+%
+%
+% Read Register - ebarin
+% Edit Bar read in file
+%
+\newread\ebarin
+
+% Write Register - ebarout
+% Edit Bar write out file
+%
+\newwrite\ebarout
+
+% Count Register - ebarnest
+%
+\newcount\ebarnest
+\ebarnest=0
+
+% Count Register - ebarcount
+%
+\newcount\ebarcount
+\ebarcount=0
+
+% Count Register - ebaroddside
+%
+\newcount\ebaroddside
+\ebaroddside=508
+
+% Count Register - ebarevenside
+%
+\newcount\ebarevenside
+\ebarevenside=-30
+
+% Count Register - ebarbarwidth
+%
+\newcount\ebarbarwidth
+\ebarbarwidth=2
+
+% Count Register - ebarbarheight
+%
+\newcount\ebarbarheight
+\ebarbarheight=12
+
+% Count Register - ebarpagesspan
+%
+\newcount\ebarpagesspan
+\ebarpagesspan=0
+
+% Count Register - ebaroncapture
+%
+\newcount\ebaroncapture
+\ebaroncapture=0
+
+% Count Register - ebaroncapturesave
+%
+\newcount\ebaroncapturesave
+\ebaroncapturesave=0
+
+% Count Register - ebaroffcapture
+%
+\newcount\ebaroffcapture
+\ebaroffcapture=0
+
+% Count Register - ebarsubtract
+%
+\newcount\ebarsubtract
+\ebarsubtract=0
+
+% If - ifebarfileopen
+% Checks to see if the ebarfile is open
+%
+\newif\ifebarfileopen
+%
+% If - ifebarspanpages
+% Checks for ebar spanning pages
+%
+\newif\ifebarspanpages
+\ebarspanpagesfalse %
+%
+% Def - Text for ifx checking on ebar page spanning
+%
+\def\ebarcheckonmsg{ebarspanon}
+\def\ebarcheckoffmsg{ebarspanoff}
+%
+% ebarsetup
+%
+% Sets up the input and output ebar files
+%
+% Place at the top of the document
+%
+\globaldefs1%
+\def\ebarsetup{%
+\immediate\openin\ebarin=\jobname.ebi %
+\ifeof\ebarin%
+ \typeout{No file \jobname.ebi}%
+ \global\ebarfileopenfalse%
+\else%
+ \global\ebarfileopentrue%
+\fi%
+\immediate\openout\ebarout=\jobname.ebo %
+}%
+%
+% ebarcleanup
+%
+% Closes the ebar output file, then opens the ebar output file for read,
+% then copies the ebar output file to the ebar input file for the next
+% pass to read the ebar input file
+%
+% Place at the end of the document
+%
+\def\ebarcleanup{%
+\immediate\closein\ebarin%
+\immediate\closeout\ebarout%
+%%
+\immediate\openin\ebarin=\jobname.ebo %
+\immediate\openout\ebarout=\jobname.ebi %
+%%
+\ebarfileopentrue%
+%%
+\loop%
+ \immediate\read\ebarin to \ebarinin%
+ \ifeof\ebarin%
+ \ebarfileopenfalse%
+ \fi%
+ \ifebarfileopen%
+ \immediate\write\ebarout{\ebarinin}%
+\repeat%
+%%
+\closein\ebarin%
+\closeout\ebarout%
+}%
+%
+% ebargeton
+%
+% Gets the next ebar reference from the ebar input file
+%
+% Specifically, gets the relative page number output from the prior
+% pass of genebar macro
+%
+\def\ebargeton{%
+\immediate%
+\ifeof\ebarin%
+%
+\else%
+ \immediate\read\ebarin to \ebarinon%
+ \global\ebaroncapture=\ebarinon%
+ \global\ebaroncapturesave=\ebarinon%
+\fi%
+}
+%
+% ebargetoff
+%
+% Gets the next ebar reference from the ebar input file
+%
+% Specifically, gets the relative page number output from the prior
+% pass of genebar macro
+%
+\def\ebargetoff{%
+\immediate%
+\ifeof\ebarin%
+%
+\else%
+ \immediate\read\ebarin to \ebarinoff%
+ \global\ebaroffcapture=\ebarinoff%
+\fi%
+}
+%
+% endebarthispage
+%
+% Check edit bar status to end an edit bar on this page
+%
+\def\endebarthispage{%
+ \expandafter\ifx\csname EBARSPANONat%
+ Count\romannumeral\ebarcount%
+ Page\romannumeral\count0%
+ \endcsname%
+ \ebarcheckonmsg
+%
+% TRUE Statement, Macro is defined
+%
+ \message{Ebar Spanning Pages On}
+ \global\ebarspanpagestrue
+ \fi %
+%
+ \ifebarspanpages
+ \genebaroffpage{}%
+ \fi%
+}%
+%
+% beginebarnextpage
+%
+% Check edit bar status to begin an edit bar on next page
+%
+\def\beginebarnextpage{%
+ \ifebarspanpages
+ \genebaronpage{}%
+ \fi%
+ \expandafter\ifx\csname EBARSPANOFFat%
+ Count\romannumeral\ebarcount%
+ Page\romannumeral\count0%
+ \endcsname%
+ \ebarcheckoffmsg
+%
+% TRUE Statement, Macro is defined
+%
+ \message{Ebar Spanning Pages Off}
+ \global\ebarspanpagesfalse
+ \fi
+}%
+%
+% ebarspecialstart, ebarspecialodd, ebarspecialeven, and ebarspecialend
+%
+% Start, Odd and even pages, and end special macros
+%
+\newtoks\ebarendline
+\ebarendline={ }%
+%
+%
+\def\ebarspecialstart{%
+ \special{ps:%
+ /SPECIALSTART pop % FOR DEBUGGING PostScript
+ Resolution 72 div /Point exch def % Get points conversion
+ currentpoint exch pop % Get current Y point
+ Point \the\ebarbarheight\the\ebarendline %
+ mul sub /Y1point exch def % Get current Y point
+ % minus ebar height
+ }%
+}%
+%
+\def\ebarspecialodd{%
+ \special{ps:%
+ /SPECIALODD pop % FOR DEBUGGING PostScript
+ Point \the\ebaroddside\the\ebarendline %
+ mul /Xpoint exch def % Get X point
+ }%
+}%
+%
+\def\ebarspecialeven{%
+ \special{ps:%
+ /SPECIALEVEN pop % FOR DEBUGGING PostScript
+ Point \the\ebarevenside\the\ebarendline %
+ mul /Xpoint exch def % Get X point
+ }%
+}%
+%
+\def\ebarspecialend{%
+ \special{ps:%
+ /SPECIALEND pop % FOR DEBUGGING PostScript
+ gsave %
+ Point \the\ebarbarwidth\the\ebarendline %
+ mul setlinewidth % Edit Bar width
+ currentpoint exch pop \the\ebarsubtract\the\ebarendline %
+ % Get current Y point
+ Point mul sub /Y2point exch def % minus adjustment
+ Xpoint Y1point moveto %
+ Xpoint Y2point lineto stroke %
+ grestore}%
+}%
+%
+% genebaron
+%
+% Writes the relative page number to the ebar output file,
+% reads from the ebar input file if open and generates the ebar on
+%
+% Place where the ebar will occur
+%
+\def\genebaron{%
+ \write\ebarout{\the\count0}%
+ \global\advance\ebarcount by 1 %
+\ifeof\ebarin%
+\else%
+ \global\advance\ebarnest by 1 %
+%
+ \ifnum\ebarnest=1 %
+ \else%
+ \@latexerr{Edit bar are nested, bad results can occur.}%
+ {Please use genebaroff before using genebaron}%
+ \fi%
+%
+ \ebargeton% % Get ebar on page
+ \ebargetoff% % Get ebar off page
+%
+ \global\ebarpagesspan=\ebaroffcapture% % Get page span
+ \global\advance\ebarpagesspan by -\ebaroncapture%
+%
+ \ifnum\ebarpagesspan>0%
+%
+ \immediate\write \@auxout{\gdef\string\EBARSPANONat%
+ Count\romannumeral\ebarcount%
+ Page\romannumeral\ebaroncapture{ebarspanon}}
+ \immediate\write \@auxout{\gdef\string\EBARSPANOFFat%
+ Count\romannumeral\ebarcount%
+ Page\romannumeral\ebaroffcapture{ebarspanoff}}
+%
+ \fi %
+%
+ \special{ps:%
+ /GENEBARON pop % FOR DEBUGGING PostScript
+ }%
+%
+ \ebarspecialstart%
+%
+ \if@twoside%
+ \ifodd\ebaroncapture%
+ \ebarspecialodd%
+ \else%
+ \ebarspecialeven%
+ \fi%
+ \else%
+ \ebarspecialodd%
+ \fi%
+\fi%
+}%
+%
+% genebaronpage
+%
+% Fake ebar on for page begin
+%
+%
+\def\genebaronpage{%
+\ifeof\ebarin%
+\else%
+ \special{ps:%
+ /GENEBARONPAGE pop % FOR DEBUGGING PostScript
+ }%
+ \ebarspecialstart%
+%
+ \if@twoside%
+ \ifodd\count0%
+ \ebarspecialodd%
+ \else%
+ \ebarspecialeven%
+ \fi%
+ \else%
+ \ebarspecialodd%
+ \fi%
+\fi%
+}%
+%
+% genebaroff
+%
+% Writes the relative page number to the ebar output file, and
+% generates special code for end
+%
+% Place where the ebar will occur
+%
+\def\genebaroff{\write\ebarout{\the\count0}%
+\ifeof\ebarin%
+\else%
+ \global\ebarsubtract=0 %
+ \global\advance\ebarnest by -1 %
+%
+ \ifnum\ebarnest=0 %
+ \else%
+ \@latexerr{Edit bar are nested, bad results can occur.}%
+ {Please use genebaron before using genebaroff}%
+ \fi%
+%
+ \special{ps:%
+ /GENEBAROFF pop % FOR DEBUGGING PostScript
+ }%
+ \ebarspecialend%
+\fi%
+}%
+%
+% genebaroffpage
+%
+% Fake ebar off for page end
+%
+\def\genebaroffpage{%
+\ifeof\ebarin%
+\else%
+ \global\ebarsubtract=\pagegoal % Get pagegoal
+ \ifdim\truepagetotal < \pagegoal %
+ \global\advance\ebarsubtract by -\truepagetotal % subtract truepagetotal
+ \else
+ \global\advance\ebarsubtract by -\pagegoal % subtract pagegoal
+ \fi
+%
+ \global\divide\ebarsubtract by 65536 % Divide by scaled points
+%
+ \special{ps:%
+ /GENEBAROFFPAGE pop % FOR DEBUGGING PostScript
+ }%
+ \ebarspecialend%
+\fi%
+}%
+%
+%
+\globaldefs0%
+%
+% Sample shipout routine changes
+%
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+%
+ {\setbox0=\vbox{\unvcopy\@outputbox} % MRV 07JAN94
+ \global\truepagetotal=\ht0} % Get true page total
+%
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth
+ {\let\label\@gobble \let\index\@gobble
+ \@thehead}} %% 22 Feb 87
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+%
+ \box\@outputbox
+%
+ \endebarthispage%
+%
+ \baselineskip\footskip
+ \hbox to\textwidth{\let\label\@gobble
+ \let\index\@gobble %% 22 Feb 87
+ \@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark%
+%
+ \beginebarnextpage{}}
+%
diff --git a/macros/latex209/contrib/misc/enumspec.sty b/macros/latex209/contrib/misc/enumspec.sty
new file mode 100644
index 0000000000..05726d9d0c
--- /dev/null
+++ b/macros/latex209/contrib/misc/enumspec.sty
@@ -0,0 +1,56 @@
+%% ENUMSPEC.STY -- Enumerate environment with special leading character for
+%% LaTeX version 2.09 (\documentstyle[enumspec]{...})
+%% January 13, 1988
+%% George D. Greenwade (BED_GDG@SHSU), Center for Business & Economic
+%% Research, Sam Houston State University, Huntsville, TX 77341-2056
+%%
+%% Allows for a leading character on the enumi ... enumiv labels. Default
+%% character (\leadchar) is $\ast$, but may easily be changed on the first
+%% line of the code, in the preamble of the LaTeX document (using \def),
+%% or in the body of the LaTeX document (using \renewcommand). Instead of
+%% \item in the enumerate environment, use \itemn for normal enumeration and
+%% \items for special character enumeration, as these switch between the
+%% enumeration labels (NOTE: \item may be used, but once \items is invoked,
+%% enumi ... enumiv are globally redefined, until reset using \itemn.)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Define leading character %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\leadchar{$\ast$}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Define special labels %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\stardefs{\def\labelenumi{\leadchar \arabic{enumi}.}
+ \def\theenumi{\arabic{enumi}}
+ \def\labelenumii{\leadchar (\alph{enumii})}
+ \def\theenumii{\alph{enumii}}
+ \def\p@enumii{\theenumi}
+ \def\labelenumiii{\leadchar \roman{enumiii}.}
+ \def\theenumiii{\roman{enumiii}}
+ \def\p@enumiii{\theenumi(\theenumii)}
+ \def\labelenumiv{\leadchar \Alph{enumiv}.}
+ \def\theenumiv{\Alph{enumiv}}
+ \def\p@enumiv{\p@enumiii\theenumiii}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Define normal labels %%
+%% (from ARTICLE.STY) %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\normaldefs{\def\labelenumi{\arabic{enumi}.}
+ \def\theenumi{\arabic{enumi}}
+ \def\labelenumii{(\alph{enumii})}
+ \def\theenumii{\alph{enumii}}
+ \def\p@enumii{\theenumi}
+ \def\labelenumiii{\roman{enumiii}.}
+ \def\theenumiii{\roman{enumiii}}
+ \def\p@enumiii{\theenumi(\theenumii)}
+ \def\labelenumiv{\Alph{enumiv}.}
+ \def\theenumiv{\Alph{enumiv}}
+ \def\p@enumiv{\p@enumiii\theenumiii}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Define \items and \itemn %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\items{\stardefs \item}
+\def\itemn{\normaldefs \item}
diff --git a/macros/latex209/contrib/misc/env.sty b/macros/latex209/contrib/misc/env.sty
new file mode 100644
index 0000000000..4b14401cdd
--- /dev/null
+++ b/macros/latex209/contrib/misc/env.sty
@@ -0,0 +1,126 @@
+%From: <DLV%CUNYVMS1.BITNET@uwavm.acs.washington.edu>
+
+%\documentstyle[12pt,env]{article}
+%\nofiles
+%\begin{document}
+%\sf
+%
+%\from{Dimitri Vulis} %fills the blank in the return address on our stationery
+%
+%\begin{envelope}
+%Dimitri Vulis\\
+%Department of Mathematics/Box 330\\
+%City University of New York Graduate Center\\
+%33 West 33 St.\\
+%New York, NY 10036
+%\ZipBar{10036-8099}
+%\end{envelope}
+%
+%\begin{envelope}
+%American Mathematical Society\\
+%P. O. Box 6248\\
+%Providence, RI 02940
+%\ZipBar{02940-9943}
+%\end{envelope}
+%
+%\begin{envelope}
+%Acad.\ Stanislav P. Merkuriev, Rector\\
+%Leningrad State University\\
+%Universitetskaya Naberezhnaya, 7/9\\
+%Leningrad 199034\\
+%USSR
+%\end{envelope}
+%
+%\end{document}
+%
+%Evidently, the envilope environment contains the address, and \ZipBar produces
+%an optional bar code on the bottom right corner.
+%
+%Assuming that you are facing the LaserWriter, and the cables are toward the
+%wall, feed the envelope into the slot on your right (opposite the paper
+%cassette) face up, so that its bottom is flush with the edge of the slot
+%closest to the wall. If this is consufing, just try all possible combinations.
+%
+%When you are printing multiple envelopes, there is an approx. 2 second time
+%window to feed the next envelope; if you do it too early, or too late, it jams.
+%Wait about 2 seconds before the previous envelope disappears. Here, practice
+%only makes perfect.
+%
+%Manual feeding won't work if your paper cassette is empty, and it's normal for
+%a blank sheet of paper to be dragged out together with the envelope.
+
+
+\textwidth9.5in
+\textheight6.675in
+\pagestyle{empty}
+\special{ps: landscape}
+
+\def\@from{}
+\def\from#1{\def\@from{#1}}
+
+\newbox\ZipBarL
+\newbox\ZipBarS %1/64" 1/32"
+\setbox\ZipBarL\hbox{\vrule height.125in width.015625in\hskip.03125in}
+\setbox\ZipBarS\hbox{\vrule height.05in width.015625in\hskip.03125in}
+%each black bar is about 4.6 dots wide on a 300dpi printer
+\newcount\ZipBarm
+\newcount\ZipBarn
+\newif\ifzipcode
+\chardef\ten=10
+
+%Almost like using \ifcase... except `-' is ignored.
+\def\ZipBar@@@#1#2{\expandafter\def\csname ZipBar@@#1\endcsname%
+{#2\advance\ZipBarn#1\relax}}
+
+\ZipBar@@@0{\copy\ZipBarL\copy\ZipBarL\copy\ZipBarS\copy\ZipBarS\copy\ZipBarS}
+\ZipBar@@@1{\copy\ZipBarS\copy\ZipBarS\copy\ZipBarS\copy\ZipBarL\copy\ZipBarL}
+\ZipBar@@@2{\copy\ZipBarS\copy\ZipBarS\copy\ZipBarL\copy\ZipBarS\copy\ZipBarL}
+\ZipBar@@@3{\copy\ZipBarS\copy\ZipBarS\copy\ZipBarL\copy\ZipBarL\copy\ZipBarS}
+\ZipBar@@@4{\copy\ZipBarS\copy\ZipBarL\copy\ZipBarS\copy\ZipBarS\copy\ZipBarL}
+\ZipBar@@@5{\copy\ZipBarS\copy\ZipBarL\copy\ZipBarS\copy\ZipBarL\copy\ZipBarS}
+\ZipBar@@@6{\copy\ZipBarS\copy\ZipBarL\copy\ZipBarL\copy\ZipBarS\copy\ZipBarS}
+\ZipBar@@@7{\copy\ZipBarL\copy\ZipBarS\copy\ZipBarS\copy\ZipBarS\copy\ZipBarL}
+\ZipBar@@@8{\copy\ZipBarL\copy\ZipBarS\copy\ZipBarS\copy\ZipBarL\copy\ZipBarS}
+\ZipBar@@@9{\copy\ZipBarL\copy\ZipBarS\copy\ZipBarL\copy\ZipBarS\copy\ZipBarS}
+
+\def\ZipBar@@#1{\csname ZipBar@@#1\endcsname}
+
+\def\ZipBar@#1{%
+ \ifx#1\null%
+ \let\next\relax%
+ \else%
+ \ZipBar@@{#1}%
+ \let\next\ZipBar@%
+ \fi%
+ \next}
+
+\def\ZipBar#1{%
+ \zipcodetrue%
+ \par\vspace{.5in}%
+ \hfill\hbox{%
+ \copy\ZipBarL% start with a long bar
+ \ZipBarn\z@%
+ \ZipBar@#1\null%
+ \ZipBarm\ZipBarn%
+ \divide\ZipBarm\ten%
+ \multiply\ZipBarm\ten%
+ \advance\ZipBarm-\ZipBarn%
+ \ifnum\ZipBarm<0%
+ \advance\ZipBarm\ten%
+ \fi%
+ \ZipBar@@{\the\ZipBarm}% last digit, so that the sum is divisible by ten
+ \copy\ZipBarL% end with a long bar
+ }\hspace*{1.5in}\vspace*{.375in}}
+
+\def\envelope{
+\newpage \zipcodefalse
+\special{ps::[asis] statusdict /manualfeed true put}
+\raggedright
+\vspace*{3.175in} %Fill in the blank on our stationary---change as needed
+{\parindent.32in\@from\ \par}
+\vfill
+\parindent3.5in}
+%A fancier way would be to put the street address in a box and to center it
+\def\endenvelope{\par
+\ifzipcode \else \vspace*{1in} \fi
+\special{ps::[asis] statusdict /manualfeed false put}}
diff --git a/macros/latex209/contrib/misc/epac.sty b/macros/latex209/contrib/misc/epac.sty
new file mode 100644
index 0000000000..a45f612646
--- /dev/null
+++ b/macros/latex209/contrib/misc/epac.sty
@@ -0,0 +1,234 @@
+% This is epac.sty in text format, as of 23 October 1991.
+% This is the official style file of the
+% European Particle Accelerator Conference.
+%
+% It is a style option of the standard LaTeX 'article' style, i.e.
+% the usage is:
+% \documentstyle[epac]{article}
+% Instructions for authors are provided in a separate file epac.tex
+% which can be used as a model for papers to be submitted to the
+% conference.
+%
+% This file will produce a camera-ready manuscript for the EPAC if
+% used with LaTeX, Version 2.09.
+%
+% *** DO NOT MODIFY THIS FILE IN ANY WAY WHATSOEVER. ***
+% HOWEVER DO DISTRIBUTE IT FREELY TO OTHER USERS/INSTITUTIONS
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Much of this file is based upon: %
+% %
+% % PROC DOCUMENT STYLE -- Released 4 September 1986 %
+% % for LaTeX version 2.09 %
+% % Copyright (C) 1985 by Leslie Lamport %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+
+\typeout{Document Style Option 'EPAC', Version of 23 October 1991}
+\typeout{-------------------------------------------}
+\typeout{-- This is the official style for}
+\typeout{-- papers to be submitted to the}
+\typeout{-- European Particle Accelerator Conference}
+\typeout{-------------------------------------------}
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+% SIDE MARGINS:
+ \oddsidemargin -13mm % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin -13mm
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -47pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 75pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 24.6cm % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 18.229cm % Width of text line.
+ % For two-column mode:
+\columnsep 5mm % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% Use \markright (or \markboth) to put an identification in the
+% lower left. The page number is printed in the lower right.
+
+
+\def\@oddhead{}\def\@evenhead{}
+\def\@oddfoot{}
+\def\@evenfoot{\@oddfoot}
+
+%-----------------------------------------------------------------------
+%
+% We acknowledge the borrowing of the clever part of
+% Steven Gildea's definition of \section
+% from geophysi.sty.
+%
+% \section is tricky because we want to both support \section* and have
+% the section title uppercased.
+
+\def\section{\secdef\@sectionb\@sections}
+\def\@sectionb[#1]#2{\@sections{#2}}
+\def\@sections#1{\@startsection {section}{1}{\z@}
+ {-2.8ex plus -0.8ex minus -.1ex}{1.5ex plus .2ex}
+ {\large\bf\centering}{\uppercase{#1}}}
+% Should there be any problem with this, we can revert to the following
+% but then the onus is on the user to type the argument of \section in
+% uppercase in the input file.
+%
+%\def\section{\@startsection {section}{1}{\z@}{-2.8ex plus -0.8ex minus
+% -.1ex}{1.5ex plus .2ex}{\large\bf\centering}}
+
+\def\subsection{\@startsection{subsection}{2}{\z@}{-2.6ex plus -.8ex minus
+ -.17ex}{1.2ex plus .17ex}{\large\sl}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}
+ {-2.5ex plus -.7ex minus -.17ex}{-1em}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{2.5ex plus .7ex minus .17ex}{-1em}{\normalsize\sl}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{2.25ex plus .7ex minus
+ .17ex}{-1em}{\normalsize\bf}}
+
+\setcounter{secnumdepth}{2}
+
+%-----------------------------------------------------------------------
+
+% ****************************************
+% * TITLE *
+% ****************************************
+%
+
+% This definition of \maketitle taken from article.sty, and has been
+% somewhat modified.
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \twocolumn[\@maketitle]
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\newlength{\titleblockheight} % so user can change it if need be
+\setlength{\titleblockheight}{4cm}
+
+
+\def\@maketitle{\vbox to \titleblockheight {\hsize\textwidth
+ \linewidth\hsize \vfil \centering
+ {\Large\bf \@title \par}
+ \vskip 2em % Vertical space after title.
+ {\large\begin{tabular}[t]{c}\@author \end{tabular}\par}
+ \vfil}}
+
+
+% The \copyrightspace command is used to produce a blank space in the first
+% column where a copyright notice may go. It works by producing a
+% blank footnote of the appropriate size. Note that it should appear
+% after any \footnote commands that produce footnotes for the first
+% column. Adjusted to leave just 1cm.
+
+\def\copyrightspace{\footnotetext[0]{\mbox{}\vrule height 1cm width 0pt}}
+
+% The abstract Environment
+
+\def\abstract{\subsection*{Abstract}}
+\def\endabstract{\par}
+
+% Redefine to use smaller fonts
+\def\thebibliography#1{\setlength{\itemsep}{0pt}\setlength{\parsep}{0pt}
+ \section*{REFERENCES\@mkboth
+ {REFERENCES}{REFERENCES}}\small\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\twocolumn
+\sloppy
+\parindent 1em
+\leftmargini 2em
+\leftmargin\leftmargini
+\leftmarginv .5em
+\leftmarginvi .5em
+\flushbottom
+%-----------------------------------------------------------------------
+%-----------------------------------------------------------------------
+% Here are some useful commands which facilitate correct formatting:
+%
+% To give a numerical value with units, e.g. \QTY{ 4.2 }{ MV\,n^{-1} }
+% (this takes care that the units in an equation are in a roman font
+% and not in math-italic which is used for symbols, IMPORTANT!!)
+%
+\newcommand{\QTY}[2]{\mbox{\(#1\rm\,#2\)}}
+%-----------------------------------------------------------------------
+%
+% To express a number in scientific notation, e.g. \Enum{1.7}{32}
+\newcommand{\Enum}[2]{\mbox{\(#1\times10^{#2}\)}}
+%
+%-----------------------------------------------------------------------
+% numerical formula e.g. \NQTY{E}{GeV} gives [E/GeV]
+\newcommand{\NQTY}[2]{\mbox{$[#1/{\rm #2}]$}} % symbol with units in
+%
+%-----------------------------------------------------------------------
+% Expectation value or average, e.g. \EV{ x^2 } gives <x^2>
+\newcommand{\EV}[1]{\left\langle #1 \right\rangle}% expectation value
+%
+%-----------------------------------------------------------------------
+% These are convenient for quoting luminosity:
+\newcommand{\LUMI}[1]{\QTY{#1}{cm^{-2}s^{-1}}}
+\newcommand{\LUM}[2]{\LUMI{#1\times10^{#2}}}
+%
+% thus a B-factory design might quote \LUM{3.0}{33}
+%-----------------------------------------------------------------------
+\def\gappeq{\mathrel{ \rlap{\raise.5ex\hbox{$>$}}
+ {\lower.5ex\hbox{$\sim$}} } }
+%
+% \gappeq is a compound symbol made out of a > sign on top of a tilde
+% usually used to mean "greater than or approximately equal to"
+% or "vaguely greater than" by physicists.
+% It behaves as a mathematical relation in TeX's math modes, e.g.
+% $ a \gappeq b $ in the text and
+% $$ a \gappeq b $$ as a display.
+%
+\def\lappeq{\mathrel{ \rlap{\raise.5ex\hbox{$<$}}
+ {\lower.5ex\hbox{$\sim$}} } }
+%-----------------------------------------------------------------------
+% End of epac.sty
diff --git a/macros/latex209/contrib/misc/epigram.sty b/macros/latex209/contrib/misc/epigram.sty
new file mode 120000
index 0000000000..e0a99de4ce
--- /dev/null
+++ b/macros/latex209/contrib/misc/epigram.sty
@@ -0,0 +1 @@
+../../../generic/misc/epigram.tex \ No newline at end of file
diff --git a/macros/latex209/contrib/misc/eqnarray.sty b/macros/latex209/contrib/misc/eqnarray.sty
new file mode 100644
index 0000000000..bac573c7c8
--- /dev/null
+++ b/macros/latex209/contrib/misc/eqnarray.sty
@@ -0,0 +1,99 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "David M. Jones",
+%%% version = "1.0",
+%%% date = "06 May 1992",
+%%% time = "16:30:57 EDT",
+%%% filename = "eqnarray.sty",
+%%% address = "MIT Laboratory for Computer Science
+%%% Room NE43-316
+%%% 545 Technology Square
+%%% Cambridge, MA 02139
+%%% USA",
+%%% telephone = "(617) 253-5936",
+%%% FAX = "(617) 253-3480",
+%%% checksum = "36087 99 481 4448",
+%%% email = "dmjones@theory.lcs.mit.edu (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, eqnarray",
+%%% supported = "yes",
+%%% docstring = "This file reimplements the LaTeX eqnarray
+%%% environment to fix two problems: (1) the
+%%% standard definition places far too much
+%%% space around the second column (10 points
+%%% in the standard styles) and (2) the macro
+%%% \@eqnsel (see below) does not work as
+%%% documented in latex.tex. If used in
+%%% conjunction with fleqn.sty, eqnarray must
+%%% appear after fleqn in the document-style
+%%% option list.
+%%%
+%%% I know of no bugs in this implementation,
+%%% but would be happy to hear of any problems
+%%% that arise with it.
+%%%
+%%% Oh, by the way, all of this would be
+%%% unnecessary if you used AMS-LaTeX.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by
+%%% the equivalent of the standard UNIX wc
+%%% (word count) utility output of lines,
+%%% words, and characters. This is produced by
+%%% Robert Solovay's checksum utility. This
+%%% program, as well as Nelson Beebe's proposal
+%%% for standard file headers, is available via
+%%% anonymous ftp from math.utah.edu.",
+%%% }
+%%% ====================================================================
+
+%% The default is for left-hand side of equations to be flushright.
+%% To make them flushleft, \let\@eqnsel = \relax
+
+\let\@eqnsel\hfil
+
+%% There are two main modifications. First, I removed the
+%% \hskip\@centering from the beginning of the preamble. This \hskip
+%% was, as far as I can tell, superfluous and was crippling \@eqnsel.
+%% Second, I removed the two occurences of \hskip 2\arraycolsep and
+%% change the template for the second column to ${{}##{}}$. This
+%% restores the proper amount of space around the second column of the
+%% eqnarray. I also introduced the parameters \@eqnmar and \@eqnhook
+%% to provide support for the flush left equation style.
+
+\newskip\@eqnmar
+\@eqnmar\@centering
+
+\let\@eqnhook\relax
+
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\@eqnmar\let\\=\@eqncr
+\@eqnhook
+$$\halign to \displaywidth\bgroup\@eqnsel
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hfil${{}##{}}$\hfil&\global\@eqcnt\tw@
+ $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+%% Since we've removed the \arraycolsep's from \eqnarray, we have to
+%% redefine \lefteqn to put that space back in. It seems unlikely
+%% that \arraycolsep is really what should be used here, but the
+%% following definition maintains compatibility with the old
+%% definition of eqnarray.
+
+\def\lefteqn#1{\hbox to 4\arraycolsep{$\displaystyle #1$\hss}}
+
+%% Finally, if fleqn.sty has been invoked earlier, we set
+%% \@eqnmar=\mathindent and redefine \@eqnhook to futz around with
+%% \abovedisplayskip and friends. Hopefully no-one else will define
+%% \mathindent.
+
+\@ifundefined{mathindent}{}{\@eqnmar\mathindent
+ \def\@eqnhook{\abovedisplayskip\topsep
+ \ifvmode\advance\abovedisplayskip\partopsep\fi
+ \belowdisplayskip\abovedisplayskip
+ \belowdisplayshortskip\abovedisplayskip
+ \abovedisplayshortskip\abovedisplayskip}}
+
+\endinput
diff --git a/macros/latex209/contrib/misc/eqsecnum.sty b/macros/latex209/contrib/misc/eqsecnum.sty
new file mode 100644
index 0000000000..fe47db81b1
--- /dev/null
+++ b/macros/latex209/contrib/misc/eqsecnum.sty
@@ -0,0 +1,26 @@
+% Save file as: EQSECNUM.STY Source: FILESERV@SHSU.BITNET
+% This is the file EQSECNUM.STY
+% from version 2.0 of the REVTEX macro package.
+%
+% This file is part of a compuscript toolbox distributed by
+% the American Physical Society in conjunction with
+% the TeX author-prepared program.
+%
+% All rights not specifically granted are reserved,
+% American Physical Society, 1991.
+%
+% Permission is granted to make and distribute verbatim
+% copies of the complete toolbox provided that the README file
+% and copyright notices are preserved on all copies.
+% Permission is granted to use the style files provided that
+% neither the content of the style files nor their names are changed.
+% APS macros may be used and distributed provided each use is
+% accompanied by an appropriate acknowledgment.
+%
+% For more information, see the README file.
+%
+\global\secnumberstrue
+%
+%
+%
+%
diff --git a/macros/latex209/contrib/misc/equation.sty b/macros/latex209/contrib/misc/equation.sty
new file mode 100644
index 0000000000..8f85d8b08a
--- /dev/null
+++ b/macros/latex209/contrib/misc/equation.sty
@@ -0,0 +1,272 @@
+%------------------------------------------------------------------------
+% This is equations.sty (August 1988). Written by
+% Charles Karney
+% Plasma Physics Laboratory Phone: +1 609 243 2607
+% Princeton University MFEnet: Karney@PPC.MFEnet
+% PO Box 451 ARPAnet: Karney%PPC.MFEnet@NMFECC.ARPA
+% Princeton, NJ 08543-0451 Bitnet: Karney%PPC.MFEnet@ANLVMS.Bitnet
+% with some ideas and macros borrowed from John Hobby and Stephen Gildea.
+
+% --------------------USER DOCUMENTATION--------------------
+
+% Use this as a style option, e.g.,
+% \documentstyle[equations]{article}
+% These probably don't work in conjunction with the leqno option.
+
+% This implements the following:
+
+% (1) \yesnumber turns on an equation number in an eqnarray* environment
+% (just as \nonumber turns it off in an eqnarray environment). E.g.,
+% \begin{eqnarray*}
+% a &=& b \\
+% & & + c \\
+% & & + d \\
+% & & + e \\
+% & & + f \\
+% & & + g \yesnumber
+% \end{eqnarray*}
+
+% (2) The eqalign environment is just like Plain TeX's \eqalign. E.g.,
+% \begin{equation}
+% \begin{eqalign}
+% a &= b, \\
+% c &= d.
+% \end{eqalign}
+% \end{equation}
+% Note that \begin{equation} \end{equation} or equivalent is needed.
+
+% (3) The eqalignno environment is just like Plain TeX's \eqalignno. E.g.,
+% \begin{eqalignno}
+% a &= b, \label{foo}\\
+% c &= d. \label{bar}
+% \end{eqalignno}
+% Note the absence of \begin{equation} \end{equation}. \nonumber can be used
+% to suppress the equation number. eqalignno* is the same except that the
+% equation numbers are suppressed (unless a \yesnumber appears).
+
+% (4) The eqaligntwo environment is a two-equation per line equivalent of
+% eqalignno. E.g.,
+% \begin{eqaligntwo}
+% a &= b, & x &= y, \label{foo} \\
+% c &= d, & z &= w. \label{bar}
+% \end{eqalign}
+% eqaligntwo* is defined similarly.
+
+% (5) The cases environment is just like Plain TeX's \cases. E.g.,
+% \begin{equation}
+% u(x) =
+% \begin{cases}
+% 0, & for $x < 0$,
+% 1, & for $x \ge 0$.
+% \end{cases}
+% \end{equation}
+% Note the first column is treated as math, the second column as text.
+
+% (6) I've borrowed John Hobby's modifications to the eqnarray environment
+% (to fix up the spacing around the operator), and to the \big, \bigg, etc.
+% operators (to make them scale with the point size).
+
+% (7) I've borrowed Stephen Gildea's subequations environment, and fixed it
+% so that it ignores spaces after the environment and so that you can refer
+% both to the overall set of equations and to individual subequations. E.g.,
+% \begin{subequations} \label{foo}
+% \begin{eqalignno}
+% a &= b, \label{foo-a} \\
+% c &= d, \label{foo-b}
+% \end{eqalignno}
+% text text text text ...
+% \begin{equation}
+% e = f. \label{foo-c}
+% \end{equation}
+% \end{subequations}
+% Now \ref{foo}, \ref{foo-a}, \ref{foo-b}, \ref{foo-c}, produce 1, 1a, 1b,
+% 1c.
+
+% --------------------END OF USER DOCUMENTATION--------------------
+
+\typeout{Document Substyle `EQUATION', modified by MPI, Version 1.0, 09.03.89}
+
+
+% Fix up eqnarray* so that \yesnumber and \nonumber do the obvious things
+\newif\if@defeqnsw \@defeqnswtrue
+
+% This is John Hobby's (hobby@research.att.com) version to fix up the spacing.
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+%\global\@eqnswtrue inactivated march 89 G. Kruljac
+\tabskip\@centering\let\\=\@eqncr
+$$\halign to \displaywidth\bgroup\hfil\global\@eqcnt\z@
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+% Here's the eqnarray* environment:
+
+%\let\@seqncr=\@eqncr
+\@namedef{eqnarray*}{\@defeqnswfalse\eqnarray}
+\@namedef{endeqnarray*}{\endeqnarray}
+
+\def\yesnumber{\global\@eqnswtrue}
+
+\def\@@eqncr{\let\@tempa\relax\global\advance\@eqcnt by \@ne
+ \ifcase\@eqcnt \def\@tempa{& & & &}\or \def\@tempa{& & &}\or
+ \def\@tempa{& &}\or \def\@tempa{&}\else\fi
+ \@tempa \if@eqnsw\@eqnnum\stepcounter{equation}\fi
+ \if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+ \global\@eqcnt\z@\cr}
+
+% Several formulas like \eqalign (to go inside \begin{equation}
+% \end{equation} or $$ $$.
+
+\def\@eqnacr{{\ifnum0=`}\fi\@ifstar{\@yeqnacr}{\@yeqnacr}}
+
+\def\@yeqnacr{\@ifnextchar [{\@xeqnacr}{\@xeqnacr[\z@]}}
+
+\def\@xeqnacr[#1]{\ifnum0=`{\fi}\cr \noalign{\vskip\jot\vskip #1\relax}}
+
+\def\eqalign{\null\,\vcenter\bgroup\openup1\jot \m@th \let\\=\@eqnacr
+\ialign\bgroup\strut
+\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil\crcr}
+\def\endeqalign{\crcr\egroup\egroup\,}
+
+% \cases
+
+\def\cases{\left\{\,\vcenter\bgroup\normalbaselines\m@th \let\\=\@eqnacr
+ \ialign\bgroup$##\hfil$&\quad##\hfil\crcr}
+\def\endcases{\crcr\egroup\egroup\right.}
+
+% Several formulas like \eqalignno (doesn't need the $$ $$)
+
+\def\eqalignno{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+\let\\=\@eqncr
+$$\displ@y \tabskip\@centering \halign to \displaywidth\bgroup
+ \global\@eqcnt\@ne\hfil
+ $\@lign\displaystyle{##}$\tabskip\z@skip&\global\@eqcnt\tw@
+ $\@lign\displaystyle{{}##}$\hfil\tabskip\@centering&
+ \llap{\@lign##}\tabskip\z@skip\crcr}
+
+\def\endeqalignno{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+
+
+% Here's the eqalignno* environment:
+
+\@namedef{eqalignno*}{\@defeqnswfalse\eqalignno}
+\@namedef{endeqalignno*}{\endeqalignno}
+
+% Two formulas like \eqalignno (doesn't need the $$ $$)
+
+\def\eqaligntwo{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+\let\\=\@eqncr
+$$\displ@y \tabskip\@centering \halign to \displaywidth\bgroup
+ \global\@eqcnt\m@ne\hfil
+ $\@lign\displaystyle{##}$\tabskip\z@skip&\global\@eqcnt\z@
+ $\@lign\displaystyle{{}##}$\hfil\qquad&\global\@eqcnt\@ne
+ \hfil$\@lign\displaystyle{##}$&\global\@eqcnt\tw@
+ $\@lign\displaystyle{{}##}$\hfil\tabskip\@centering&
+ \llap{\@lign##}\tabskip\z@skip\crcr}
+
+\def\endeqaligntwo{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+
+\@namedef{eqaligntwo*}{\@defeqnswfalse\eqaligntwo}
+\@namedef{endeqaligntwo*}{\endeqaligntwo}
+
+% subequations
+%%% File: subeqn.sty
+%%% The subequations environment %%%
+%
+% Within the subequations environment, the only change is that
+% equations are labeled differently. The number stays the same,
+% and lower case letters are appended. For example, if after doing
+% three equations, numbered 1, 2, and 3, you start a subequations
+% environmment and do three more equations, they will be numbered
+% 4a, 4b, and 4c. After you end the subequations environment, the
+% next equation will be numbered 5.
+%
+% Both text and equations can be put inside the subequations environment.
+%
+% If you make any improvements, I'd like to hear about them.
+%
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Mass. 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+%
+\newtoks\@stequation
+
+\def\subequations{\refstepcounter{equation}%
+ \edef\@savedequation{\the\c@equation}%
+ \@stequation=\expandafter{\theequation}% %only want \theequation
+ \edef\@savedtheequation{\the\@stequation}% %expanded once
+ \edef\oldtheequation{\theequation}%
+ \setcounter{equation}{0}%
+ \def\theequation{\oldtheequation\alph{equation}}}
+
+\def\endsubequations{%
+ \setcounter{equation}{\@savedequation}%
+ \@stequation=\expandafter{\@savedtheequation}%
+ \edef\theequation{\the\@stequation}%
+ \global\@ignoretrue}
+
+% More from John Hobby
+% Fix Plain's \bigl, \Bigl, etc. macros so that they try to scale with
+% LaTeX size changes. This uses the fact that \@setsize sets \ht\strutbox
+% to be 70% of the normal unstretched baselineskip.
+
+\def\big#1{{\hbox{$\left#1\vcenter to1.428\ht\strutbox{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vcenter to2.142\ht\strutbox{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vcenter to2.857\ht\strutbox{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vcenter to3.571\ht\strutbox{}\right.\n@space$}}}
+
+% More from Schaefer-Siebert / Kruljac
+% kruljac@ds0mpi11
+
+\def\@leqncr{{\ifnum0=`}\fi\@ifstar{\global\@eqpen\@M
+ \@yeqncr}{\global\@eqpen\interdisplaylinepenalty \@lyeqncr}}
+
+\def\@lyeqncr{\@ifnextchar [{\@lxeqncr}{\@lxeqncr[\z@]}}
+
+\def\@lxeqncr[#1]{\ifnum0=`{\fi}\@@leqncr
+ \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}
+
+
+\def\@@leqncr{\let\@tempa\relax\global\advance\@eqcnt by \@ne
+ \ifcase\@eqcnt \def\@tempa{& & & &}\or \def\@tempa{& & &}\or
+ \def\@tempa{& &}\or \def\@tempa{&}\else\fi
+ \@tempa \if@eqnsw\@leqnnum\stepcounter{equation}\fi
+ \if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+ \global\@eqcnt\z@\cr}
+
+ \def\@leqnnum{{\hspace{\fill}\hbox{\normalsize (\theequation)}}}
+
+\def\lequation#1{\bgroup#1$$ % $$ BRACE MATCHING HACK
+\refstepcounter{equation}}
+
+\def\endlequation{\eqno \@leqnnum % $$ BRACE MATCHING HACK
+$$\egroup\global\@ignoretrue}
+
+\def\leqnarray#1{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+\tabskip\@centering\let\\=\@leqncr
+\bgroup#1
+$$\halign to \displaywidth\bgroup\hfil\global\@eqcnt\z@
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\def\endleqnarray{\@@leqncr\egroup
+ \global\advance\c@equation\m@ne$$\egroup\global\@ignoretrue}
+
+% Here's the leqnarray* environment:
+
+\@namedef{leqnarray*}{\@defeqnswfalse\leqnarray}
+\@namedef{endleqnarray*}{\endleqnarray}
+
+\endinput
+
diff --git a/macros/latex209/contrib/misc/equationarray.sty b/macros/latex209/contrib/misc/equationarray.sty
new file mode 100644
index 0000000000..07f6aaf9c9
--- /dev/null
+++ b/macros/latex209/contrib/misc/equationarray.sty
@@ -0,0 +1,88 @@
+% Equationarray.doc
+%
+% Combine the capabilities of the eqnarray environment and the array
+% environment.
+%
+% Problem: The eqnarray environment is too restrictive in that it is
+% only prepared to accept three part equations. Some applications
+% require more sophisticated mathematics, so three parts aren't
+% enough. Simultaneously, we would like to have our equations
+% numbered. If the equations aren't to be numbered, then the array
+% environment suffices. If the equations aren't to be aligned with
+% each other, then the equation environment is preferred.
+%
+% Usage:
+%
+% \begin{equationarray}{rrcl}
+% % Equations go here, in the same format as you would use
+% % for arrays.
+% \end{equationarray}
+%
+% Written by:
+% Tony Li, University of Southern California, <tli@sargas.usc.edu>
+% Started 6/15/88.
+% Yes, I know this is a kludge. Suggestions accepted, flames to
+% /dev/null. I never said that I knew what I was doing.
+%
+
+\def\equationarray{\stepcounter{equation} \let\@currentlabel=\theequation
+ \global\@eqnswtrue \global\@eqcnt\z@ \global\@eqargcnt \z@ \let\\=\@equationcr
+ \let\@acol\@arrayacol \let\@classz\@eqnclassz \def\@halignto{to\displaywidth}
+ \@equationarray}
+
+\def\@equationarray#1{\setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}
+ \@mkpream{#1}
+ \edef\@preamble{\halign \noexpand\@halignto
+ \bgroup \tabskip\z@ \@arstrut \@preamble
+ \hfill\tabskip\@centering &\llap{\@sharp}\tabskip\z@\cr}%
+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \bgroup \let\par\relax
+ \let\@sharp## \let\protect\relax \lineskip\z@ \baselineskip\z@
+ \tabskip\@centering $$ % $$ BRACE MATCHING HACK
+ \@preamble
+}
+
+\def\@eqnclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+ \global\advance\@eqargcnt\@ne
+ \edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\displaystyle\tabskip\z@\@sharp$\hfil \or
+ $\relax\displaystyle\tabskip\z@\@sharp$\hfil \or
+ \hfil$\relax\displaystyle\tabskip\z@\@sharp$\fi
+ \global\advance\@eqcnt\@ne}}
+
+\def\endequationarray{\@equationcr
+\egroup\global\advance\c@equation\m@ne % $$ BRACE MATCHING HACK
+$$\tabskip\@centering\egroup\global\@ignoretrue}
+
+\def\@equationcr{${\ifnum0=`}\fi\@ifstar{\@xequationcr}{\@xequationcr}}
+\def\@xequationcr{
+ \@ifnextchar[{\@argequationcr}{\ifnum0=`{\fi}${}\@zequationcr
+ \global\@eqnswtrue\global\@eqcnt\z@\cr}}
+
+\def\@argequationcr[#1]{\ifnum0=`{\fi}${}\ifdim #1>\z@
+ \@xargequationcr{#1}\else
+ \@yargequationcr{#1}\fi}
+
+\def\@xargequationcr#1{
+ \@tempdima #1\advance\@tempdima \dp \@arstrutbox
+ \vrule \@height\z@ \@depth\@tempdima \@width\z@ \@zequationcr
+ \global\@eqnswtrue\global\@eqcnt\z@ \cr}
+
+\def\@yargequationcr#1{ \@zequationcr
+ \global\@eqnswtrue\global\@eqcnt\z@ \cr\noalign{\vskip #1}}
+
+\def\@zequationcr{\@wargequationcr\if@eqnsw\@eqnnum
+ \stepcounter{equation}\global\@eqcnt\z@\fi}
+
+\def\@wargequationcr{\ifnum\@eqcnt<\@eqargcnt
+ \@amper \@wargequationcr\fi}
+
+\def\@amper{&}
+
+\newcount\@eqargcnt
diff --git a/macros/latex209/contrib/misc/equations.sty b/macros/latex209/contrib/misc/equations.sty
new file mode 100644
index 0000000000..1f1364ceea
--- /dev/null
+++ b/macros/latex209/contrib/misc/equations.sty
@@ -0,0 +1,217 @@
+% This file, equations.sty (August 1988), contains a collection of macros
+% to aid in constructing displayed equations in LaTeX. Written by
+% Charles Karney
+% Plasma Physics Laboratory Phone: +1 609 243 2607
+% Princeton University MFEnet: Karney@PPC.MFEnet
+% PO Box 451 ARPAnet: Karney%PPC.MFEnet@NMFECC.ARPA
+% Princeton, NJ 08543-0451 Bitnet: Karney%PPC.MFEnet@ANLVMS.Bitnet
+% with some ideas and macros borrowed from John Hobby and Stephen Gildea.
+
+% --------------------USER DOCUMENTATION--------------------
+
+% Use this as a style option, e.g.,
+% \documentstyle[equations]{article}
+% These probably don't work in conjunction with the leqno option.
+
+% This implements the following:
+
+% (1) \yesnumber turns on an equation number in an eqnarray* environment
+% (just as \nonumber turns it off in an eqnarray environment). E.g.,
+% \begin{eqnarray*}
+% a &=& b \\
+% & & + c \\
+% & & + d \\
+% & & + e \\
+% & & + f \\
+% & & + g \yesnumber
+% \end{eqnarray*}
+
+% (2) The eqalign environment is just like Plain TeX's \eqalign. E.g.,
+% \begin{equation}
+% \begin{eqalign}
+% a &= b, \\
+% c &= d.
+% \end{eqalign}
+% \end{equation}
+% Note that \begin{equation} \end{equation} or equivalent is needed.
+
+% (3) The eqalignno environment is just like Plain TeX's \eqalignno. E.g.,
+% \begin{eqalignno}
+% a &= b, \label{foo}\\
+% c &= d. \label{bar}
+% \end{eqalignno}
+% Note the absence of \begin{equation} \end{equation}. \nonumber can be used
+% to suppress the equation number. eqalignno* is the same except that the
+% equation numbers are suppressed (unless a \yesnumber appears).
+
+% (4) The eqaligntwo environment is a two-equation per line equivalent of
+% eqalignno. E.g.,
+% \begin{eqaligntwo}
+% a &= b, & x &= y, \label{foo} \\
+% c &= d, & z &= w. \label{bar}
+% \end{eqaligntwo}
+% eqaligntwo* is defined similarly.
+
+% (5) The cases environment is just like Plain TeX's \cases. E.g.,
+% \begin{equation}
+% u(x) =
+% \begin{cases}
+% 0, & for $x < 0$,
+% 1, & for $x \ge 0$.
+% \end{cases}
+% \end{equation}
+% Note the first column is treated as math, the second column as text.
+
+% (6) I've borrowed John Hobby's modifications to the eqnarray environment
+% (to fix up the spacing around the operator), and to the \big, \bigg, etc.
+% operators (to make them scale with the point size).
+
+% (7) I've borrowed Stephen Gildea's subequations environment, and fixed it
+% so that it ignores spaces after the environment and so that you can refer
+% both to the overall set of equations and to individual subequations. E.g.,
+% \begin{subequations} \label{foo}
+% \begin{eqalignno}
+% a &= b, \label{foo-a} \\
+% c &= d, \label{foo-b}
+% \end{eqalignno}
+% text text text text ...
+% \begin{equation}
+% e = f. \label{foo-c}
+% \end{equation}
+% \end{subequations}
+% Now \ref{foo}, \ref{foo-a}, \ref{foo-b}, \ref{foo-c}, produce 1, 1a, 1b,
+% 1c.
+
+% --------------------END OF USER DOCUMENTATION--------------------
+
+% Fix up eqnarray* so that \yesnumber and \nonumber do the obvious things
+\newif\if@defeqnsw \@defeqnswtrue
+
+% This is John Hobby's (hobby@research.att.com) version to fix up the spacing.
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+\global\@eqnswtrue
+\tabskip\@centering\let\\=\@eqncr
+$$\halign to \displaywidth\bgroup\hfil\global\@eqcnt\z@
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\def\yesnumber{\global\@eqnswtrue}
+
+\def\@@eqncr{\let\@tempa\relax\global\advance\@eqcnt by \@ne
+ \ifcase\@eqcnt \def\@tempa{& & & &}\or \def\@tempa{& & &}\or
+ \def\@tempa{& &}\or \def\@tempa{&}\else\fi
+ \@tempa \if@eqnsw\@eqnnum\stepcounter{equation}\fi
+ \if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+ \global\@eqcnt\z@\cr}
+
+% Several formulas like \eqalign (to go inside \begin{equation}
+% \end{equation} or $$ $$.
+
+\def\@eqnacr{{\ifnum0=`}\fi\@ifstar{\@yeqnacr}{\@yeqnacr}}
+
+\def\@yeqnacr{\@ifnextchar [{\@xeqnacr}{\@xeqnacr[\z@]}}
+
+\def\@xeqnacr[#1]{\ifnum0=`{\fi}\cr \noalign{\vskip\jot\vskip #1\relax}}
+
+\def\eqalign{\null\,\vcenter\bgroup\openup1\jot \m@th \let\\=\@eqnacr
+\ialign\bgroup\strut
+\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil\crcr}
+\def\endeqalign{\crcr\egroup\egroup\,}
+
+% \cases
+
+\def\cases{\left\{\,\vcenter\bgroup\normalbaselines\m@th \let\\=\@eqnacr
+ \ialign\bgroup$##\hfil$&\quad##\hfil\crcr}
+\def\endcases{\crcr\egroup\egroup\right.}
+
+% Several formulas like \eqalignno (doesn't need the $$ $$)
+
+\def\eqalignno{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+\let\\=\@eqncr
+$$\displ@y \tabskip\@centering \halign to \displaywidth\bgroup
+ \global\@eqcnt\@ne\hfil
+ $\@lign\displaystyle{##}$\tabskip\z@skip&\global\@eqcnt\tw@
+ $\@lign\displaystyle{{}##}$\hfil\tabskip\@centering&
+ \llap{\@lign##}\tabskip\z@skip\crcr}
+
+\def\endeqalignno{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+
+
+% Here's the eqalignno* environment:
+
+\@namedef{eqalignno*}{\@defeqnswfalse\eqalignno}
+\@namedef{endeqalignno*}{\endeqalignno}
+
+% Two formulas like \eqalignno (doesn't need the $$ $$)
+
+\def\eqaligntwo{\stepcounter{equation}\let\@currentlabel=\theequation
+\if@defeqnsw\global\@eqnswtrue\else\global\@eqnswfalse\fi
+\let\\=\@eqncr
+$$\displ@y \tabskip\@centering \halign to \displaywidth\bgroup
+ \global\@eqcnt\m@ne\hfil
+ $\@lign\displaystyle{##}$\tabskip\z@skip&\global\@eqcnt\z@
+ $\@lign\displaystyle{{}##}$\hfil\qquad&\global\@eqcnt\@ne
+ \hfil$\@lign\displaystyle{##}$&\global\@eqcnt\tw@
+ $\@lign\displaystyle{{}##}$\hfil\tabskip\@centering&
+ \llap{\@lign##}\tabskip\z@skip\crcr}
+
+\def\endeqaligntwo{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+
+\@namedef{eqaligntwo*}{\@defeqnswfalse\eqaligntwo}
+\@namedef{endeqaligntwo*}{\endeqaligntwo}
+
+% subequations
+%%% File: subeqn.sty
+%%% The subequations environment %%%
+%
+% Within the subequations environment, the only change is that
+% equations are labeled differently. The number stays the same,
+% and lower case letters are appended. For example, if after doing
+% three equations, numbered 1, 2, and 3, you start a subequations
+% environmment and do three more equations, they will be numbered
+% 4a, 4b, and 4c. After you end the subequations environment, the
+% next equation will be numbered 5.
+%
+% Both text and equations can be put inside the subequations environment.
+%
+% If you make any improvements, I'd like to hear about them.
+%
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Mass. 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+%
+\newtoks\@stequation
+
+\def\subequations{\refstepcounter{equation}%
+ \edef\@savedequation{\the\c@equation}%
+ \@stequation=\expandafter{\theequation}% %only want \theequation
+ \edef\@savedtheequation{\the\@stequation}% %expanded once
+ \edef\oldtheequation{\theequation}%
+ \setcounter{equation}{0}%
+ \def\theequation{\oldtheequation\alph{equation}}}
+
+\def\endsubequations{%
+ \setcounter{equation}{\@savedequation}%
+ \@stequation=\expandafter{\@savedtheequation}%
+ \edef\theequation{\the\@stequation}%
+ \global\@ignoretrue}
+
+% More from John Hobby
+% Fix Plain's \bigl, \Bigl, etc. macros so that they try to scale with
+% LaTeX size changes. This uses the fact that \@setsize sets \ht\strutbox
+% to be 70% of the normal unstretched baselineskip.
+
+\def\big#1{{\hbox{$\left#1\vcenter to1.428\ht\strutbox{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vcenter to2.142\ht\strutbox{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vcenter to2.857\ht\strutbox{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vcenter to3.571\ht\strutbox{}\right.\n@space$}}}
+
+\endinput
diff --git a/macros/latex209/contrib/misc/esperant.sty b/macros/latex209/contrib/misc/esperant.sty
new file mode 100644
index 0000000000..1c6df8ab3c
--- /dev/null
+++ b/macros/latex209/contrib/misc/esperant.sty
@@ -0,0 +1,342 @@
+% This is ESPERANT.TEX or ESPERANT.DOC or ESPERANT.STY,
+% Vers. 1.1.a 10-DEC-1991,
+%
+% (c) 1991 J"org Knappen
+% knappen@vkpmzd.kph.uni-mainz.de
+%
+% Usage conditions: GNU-licence, Version 1.0
+% This includes the right to copy this file free and distribute the
+% copies, as long as no money is taken for it and as long as this file
+% remains unchanged.
+%
+% by J. Knappen, Uni Mainz, using GERMAN.STY 2.3d, collected by
+% H. Partl, TU Wien, deutsch.sty by J. Schrod, Darmstadt,
+% and espo.sty (anonymous).
+% Contributers to these files are included by reference.
+%
+% Thanks to Derk Ederveen and E. T. Grimley-Evans for correcting the terms
+% in \captionsesperanto
+%
+% DOCUMENT STYLE OPTION for writing esperanto texts
+% with TeX version 2.x (Plain TeX) or with LaTeX version 2.09.
+%
+% It can be called via
+% \input esperant
+% or (with LaTeX) via
+% \documentstyle[esperant]{anystyle}
+%
+% The name ``esperant.sty'' (without o) is choosen purposefully, because
+% there are a lot of computers out there, which cannot handle filenames
+% consisting of more than 8 letters.
+%
+% This file is different from ``esperanto.sty'' by J. L. Braams, to be used
+% with the babel system
+%
+% Commands to be used by the end users:
+%
+% ^c, ^g, ^h, ^j, ^s create the esperanto circumflexed consonants
+% ^C, ^G, ^H, ^J, ^S ditto, uppercase versions
+% ^u, ^U create the esperanto u-breve (\u{u})
+% if you need an u-circumflex, write \^u
+% ^| Morpheme boundary to assist correct hyphenation
+%
+% \captionsesperanto switches the captions to esperanto
+% \dateesperanto switches \today to produce the date in e-o
+% \hodiau produces the current date in esperanto
+% \hodiaun produces the current date in esperanto, accusative
+%
+% \captionsenglish switches the captions back to english
+% \dateUSenglish does the same for the date
+% \dateenglish switches to british english date
+%
+% You can change each caption if you want. E. g. if you prefer
+% ``vd. anka^u'' instead of ``vidu anka^u'', say
+% \renewcommand{\seealsoname}{vd.~anka\u{u}}
+%
+% \Esper, \esper allow you to count by the letters of the esperanto
+% alphabet (A, B, C, ^C, D, ...). You can redefine
+% \Alph into \Esper by
+% \let\Alph=\Esper % I leave this purposefully to
+% you as the end user and don't turn it on as default
+%
+% Notes:
+%
+% This file can be used both with Plain TeX and with LaTeX and other
+% macro packages, and with the original TeX and LaTeX fonts. Usage
+% of esperanto hyphenation patterns is recommended to accompany this
+% style file when writing esperanto texts.
+%
+% Derk Ederveen (D.Ederveen@pttrl.nl) has prepared esperanto hyphenation
+% patterns, supporting the ``cx''-notation. Obviously, these ones are not
+% optimal, but a good try. Alternatively, you might try
+% italian or portugese hyphenation patterns. (Both are available on several
+% servers.)
+%
+% The file should be read in vertical mode only (usually at the
+% beginning of the document) to avoid spurious spaces.
+%
+% \undefined must be an undefined control sequence.
+%
+% Multiple calls of this file (e.g. at the beginning of each subfile)
+% will do no harm. Only the first call (i.e., if \EsperantoOn is undefined)
+% performs all the definitions and settings. Later calls only switch
+% to \EsperantoOn.
+%
+% The catcode of @ remains unchanged after processing of this file.
+% All definitions are global, the switching on of the esperanto options
+% is local.
+%
+% The commands \EsperantoOn, \EsperantoOff, \modifiedhaton, modifiedhatoff and
+% \selectlanguage are ``fragile'' with LaTeX and should not be used
+% within arguments of macro calls.
+%
+% In Plain TeX, `\protect' should be \let to `\relax' normally and to
+% something like `\string' inside the arguments of `\write' or `\message'
+% (see LaTeX.TEX for all the details).
+%
+% The current version has been designed for TeX versions 1 and 2.
+% When used with TeX version 3 or with MLTeX by M.Ferguson, the
+% setting of the \language counter and/or calls of \setlanugage
+% have to be inserted into the definition of the \selectlanguage
+% command, with values that are appropriate for the hyphenation patterns
+% loaded into the FMT file by IniTeX.
+%
+% Since ^ has a different catcode (\active) and a different meaning
+% than in original TeX, special care has to be taken if ^ is to be
+% used in its original meaning.
+%
+% WARNINGS:
+%
+% If you want to use `verbatim.sty' by R. Schoepf, this must be read before
+% you read in `esperant.sty'. The same is true for every style option which
+% makes use of the ^^-Notation.
+%
+% If you use `endnotes.sty' by J. Lavigno, you should read it before
+% esperant.sty. Otherwise, it will overwrite \notesname again.
+%
+% \ifundefined{EsperantoOn} or \EsperantoOn=\relax
+\expandafter\ifx\csname EsperantoOn\endcsname\relax
+% \then go ahead \else do nothing
+\else \endinput \fi
+
+\message{Document Style Option `esperant' Version 1.1a of 10-OKT-1991}
+
+% \ifundefined{protect} (plain TeX)
+\ifx\protect\undefined
+% \then define it
+\let\protect=\relax \fi
+
+{% begin a group ...
+ \catcode`\@=11 % \makeatletter
+
+% Part one:
+% Define the \allowhyphens hack
+\gdef\allowhyphens{\penalty\@M \hskip\z@skip}
+% {\nobreak \hskip 0pt plus 0pt\relax}
+%
+% Part two
+% add the ^ to the definitions of dospecials and sanitize:
+% Don't ask me on the meaning of this! (JK)
+%
+\begingroup
+\def\do{\noexpand\do\noexpand}%
+% note that "\xdef" means "\global\edef"
+\xdef\dospecials{\dospecials\do\^}%
+% not ( \ifundefined{@sanitize} or \@sanitize=\relax ) = if LaTeX
+\expandafter\ifx\csname @sanitize\endcsname\relax \else
+ \def\@makeother{\noexpand\@makeother\noexpand}%
+ \xdef\@sanitize{\@sanitize\@makeother\^}%
+\fi
+\endgroup
+
+% Part three:
+% define all the funny things the hat does
+
+\gdef\modifiedhaton{\catcode`\^\active}
+\gdef\modifiedhatoff{\catcode`\^7 }
+
+{\modifiedhaton
+\gdef^{\protect\ph@t}
+\gdef\ph@t#1{\ifmmode\sp{#1}
+ \else\ifx#1u\u u\allowhyphens% ^u gives breve on u
+ \else\ifx#1U\u U\allowhyphens% and ^U gives one on U (rare)
+ \else\ifx#1h{h\llap{\^{}}}\allowhyphens% ^h mustn't be too tall
+ \else\ifx#1j{\^\j}\allowhyphens% ^j requires undotted j
+ \else\ifx#1|\discretionary{-}{}{}\allowhyphens% morpheme boundary
+ \else{\^{#1}}\allowhyphens% Normal circumflexing
+\fi\fi\fi\fi\fi\fi}
+} % end of \modifiedhaton
+
+% Part four:
+% Define the date and the captions of LaTeX
+
+\gdef\dateesperanto{\def\today{la \number\day a de \ifcase\month\or
+ januaro\or februaro\or marto\or aprilo\or majo\or junio\or
+ julio\or a\u{u}gusto\or septembro\or oktobro\or novembro\or decembro\fi,\space
+ \number\year}%
+\global\let\hodiau=\today}
+\gdef\hodiaun{la \number\day an de \ifcase\month\or
+ januaro\or februaro\or marto\or aprilo\or majo\or junio\or
+ julio\or a\u{u}gusto\or septembro\or oktobro\or novembro\or decembro\fi,\space
+ \number\year}
+
+\gdef\dateUSenglish{\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}}
+
+\gdef\dateenglish{\def\today{\ifcase\day\or
+ 1st\or 2nd\or 3rd\or 4th\or 5th\or
+ 6th\or 7th\or 8th\or 9th\or 10th\or
+ 11th\or 12th\or 13th\or 14th\or 15th\or
+ 16th\or 17th\or 18th\or 19th\or 20th\or
+ 21st\or 22nd\or 23rd\or 24th\or 25th\or
+ 26th\or 27th\or 28th\or 29th\or 30th\or
+ 31st\fi
+ ~\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space \number\year}}
+
+% Skip this block, if you allready have LaTeX 2.09 from 1-DEC-1991 or
+% any newer version. If not, read it carefully.
+%
+% Here is, how you can modify the LaTeX document style files and option
+% files, to benefit from the following \captionsxxxxx commands. Def's like
+% \def\tableofcontents{\section*{Contents\markboth{CONTENTS}{CONTENTS}}
+% \@starttoc{toc}}
+% should be redefined by def's like
+% \def\contentsname{Contents} % <---
+% \def\tableofcontents{\section*{\contentsname
+% \markboth{\uppercase{\contentsname}}{\uppercase{\contentsname}}}
+% \@starttoc{toc}}
+%
+% (it's best to put all these new lines to the end of the original files),
+% and of course, you should modify the change date in the file header and
+% in the \typeout command.
+% You need not do this yourself - rather, retrieve "International LaTeX"
+% (e.g. from the DANTE server LISTSERV@DHDURZ1 on Bitnet) !
+% Or via ftp from 129.69.1.12 (Stuttgart) or any other of the well-known
+% TeXservers.
+%
+% If your LaTeX dates from 1-Dec-1991 or later, you don't need ILateX
+% any longer -- and if not, update your LaTeX.
+%
+% The list of names is based on the proposal of H. Partl, but is enlarged
+% by the following ones
+% \seename, \seealsoname, and prefacename (J. Schrod, deutsch.sty)
+% \subjectname,
+% and \notesname.
+%
+\gdef\captionsesperanto{%
+\def\contentsname{Enhavo}%
+\def\listfigurename{Listo de figuroj}%
+\def\listtablename{Listo de tabeloj}%
+\def\abstractname{Resumo}%
+\def\partname{Parto}%
+\def\chaptername{\^Capitro}%
+\def\prefacename{Anta\u{u}parolo}%
+\def\appendixname{Apendico}%
+\def\refname{Cita\^joj}%
+\def\bibname{Bibliografio}%
+\def\indexname{Indekso}%
+\def\figurename{Figuro}%
+\def\tablename{Tabelo}%
+\def\pagename{Pa\^go}%
+\def\seename{vidu}% a^u: vd.
+\def\alsoname{vidu anka\u{u}}% a^u: vd. anka\u{u}
+\def\notesname{Rimarkoj}% endnotes.sty
+\def\enclname{Aldono(j)}%
+\def\ccname{Kopie al}%
+\def\headtoname{Al}%
+\def\subjectname{Temo}%
+}
+
+\gdef\captionsenglish{%
+\def\prefacename{Preface}%
+\def\refname{References}%
+\def\abstractname{Abstract}%
+\def\bibname{Bibliography}%
+\def\chaptername{Chapter}%
+\def\appendixname{Appendix}%
+\def\contentsname{Contents}%
+\def\listfigurename{List of Figures}%
+\def\listtablename{List of Tables}%
+\def\indexname{Index}%
+\def\figurename{Figure}%
+\def\tablename{Table}%
+\def\partname{Part}%
+\def\enclname{encl}%
+\def\ccname{cc}%
+\def\headtoname{To}%
+\def\pagename{Page}%
+\def\seename{see}%
+\def\alsoname{see also}%
+\def\notesname{Notes}%
+\def\subjectname{Subject}%
+}
+
+% Part four a:
+% Define \Esper and \esper
+\gdef\esper#1{\@esper{\@nameuse{c@#1}}}
+\gdef\Esper#1{\@Esper{\@nameuse{c@#1}}}
+\gdef\@esper#1{\ifcase#1\or a\or b\or c\or \^c\or d\else\@iesper{#1}\fi}
+\gdef\@iesper#1{\ifcase#1\or \or \or \or \or \or
+ \or e\or f\or g\or \^g\or h\or h\llap\^{}\or i\or j\or \^\j\or k%
+ \or l\or m\or n\or o\or p\or r\or s\or \^s\or t\or u\or \u{u}\or v%
+ \or z\else\@ctrerr\fi}
+\gdef\@Esper#1{\ifcase#1\or A\or B\or C\or \^C\or D\else\@Iesper{#1}\fi}
+\gdef\@Iesper#1{\ifcase#1\or \or \or \or \or \or E\or F\or G\or \^G\or H%
+ \or \^H\or I\or J\or \^J\or K\or L\or M\or N\or O\or P\or R\or S\or \^S\or T%
+ \or U\or \u{U}\or V\or Z\else\@ctrerr\fi}
+
+
+% Part five:
+% Define the new counter language to switch date and captions
+\newcount\l@nguage
+%
+% This will be re-declared as \language if the latter has not yet been
+% declared neither by Ferguson's ``Multilingual T^eX'' nor by TeX 3:
+% \ifundefined{language}
+\expandafter\ifx\csname language\endcsname\relax
+\global\let\language=\l@nguage
+\fi
+%
+\newcount\USenglish \global\USenglish=0
+\newcount\esperanto \global\esperanto=1
+\newcount\english \global\english=2
+%
+\gdef\selectlanguage#1{%
+ \expandafter\ifcase #1\relax
+ \dateUSenglish \captionsenglish \or
+ \dateesperanto \captionsesperanto \or
+ \dateenglish \captionsenglish \fi}
+% Note: If used with TeX version 3 or with multi-lingual TeX by M.Ferguson,
+% commands like
+% \language=#1\relax
+% and/or
+% \setlanguage{...}
+% should be inserted into the above definition in order to switch on the
+% correct hyphenation patterns.
+%
+% \ifundefined{setlanguage} (= TeX version < 3 )
+\expandafter\ifx\csname setlanguage\endcsname\relax
+\global\let\setlanguage=\selectlanguage
+\fi
+%
+
+% Part six:
+% Define the switches between esperanto and original TeX
+
+\gdef\EsperantoOff{\modifiedhatoff}
+\gdef\EsperantoOn{\modifiedhaton}
+
+} % ... return to previous catcodes
+%
+% Now, switch on what is appropriate for esperanto:
+%
+\EsperantoOn
+\selectlanguage{\esperanto}
+
+% This is the end of ESPERANTO.STY/DOC/TEX.
+\endinput
diff --git a/macros/latex209/contrib/misc/espo.sty b/macros/latex209/contrib/misc/espo.sty
new file mode 100644
index 0000000000..62c01ec553
--- /dev/null
+++ b/macros/latex209/contrib/misc/espo.sty
@@ -0,0 +1,52 @@
+%
+% To produce an accented c, type ^c.
+% the uparrow is also used for the breve,
+% to keep finger-training down.
+%
+\def\^#1{\ifx#1u\u u% ^u gives breve on u
+ \else\ifx#1U\u U% and ^u gives one on U (rare)
+ \else\ifx#1h{\rlap{\accent 94{}}h}%^h mustn't be too tall
+ \else\ifx#1j{\accent 94 \j}% ^j requires undotted j
+ \else{\accent 94 #1}\fi\fi\fi\fi} % Normal circumflexing
+\let\superscript=^ % Save current binding of ^
+\catcode`\^=\active % ^ now active
+\def^{\ifmmode\let\ACC=\superscript\else\let\ACC=\^\fi\ACC}
+% Does auto-accent iff not math
+%
+% Some de-anglicizations. The input is the same, however,
+% to preserve the integrity of the documentation.
+%
+\def\tableofcontents{\section*{Enhavoj\@mkboth{ENHAVOJ}{ENHAVOJ}}
+ \@starttoc{toc}}
+\def\listoffigures{\section*{Listo de Figuroj\@mkboth
+ {LISTO DE FIGUROJ}{LISTO DE FIGUROJ}}\@starttoc{lof}}
+\def\listoftables{\section*{Listo de Tabeloj\@mkboth
+ {LISTO DE TABELOJ}{LISTO DE TABELOJ}}\@starttoc{lot}}
+\def\thebibliography#1{\section*{Aludoj\@mkboth
+ {ALUDOJ}{ALUDOJ}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Indekso}]
+ \@mkboth{INDEKSO}{INDEKSO}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\fnum@figure{Figuro \thefigure}
+\def\fnum@table{Tabelo \thetable}
+\def\abstract{\if@twocolumn
+\section*{Resumo}
+\else \small
+\begin{center}
+{\bf Resumo\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+
+\def\today{la \number\day a de \ifcase\month\or
+ januaro\or februaro\or marto\or aprilo\or majo\or junio\or
+ julio\or a^ugusto\or septembro\or oktobro\or novembro\or decembro\fi,\space
+ \number\year}
diff --git a/macros/latex209/contrib/misc/etcetera.tex b/macros/latex209/contrib/misc/etcetera.tex
new file mode 100644
index 0000000000..d119a38176
--- /dev/null
+++ b/macros/latex209/contrib/misc/etcetera.tex
@@ -0,0 +1,45 @@
+% -*- Mode: TeX -*-
+
+\ifx\thisfileis\anUndefinedMacro\input maybeload \fi
+
+\thisfileis{<eb.tex.texlocal>etcetera} % abort loading if we're already loaded
+
+% This file defines a few abbreviations for convenience.
+% Usage:
+% \sectref{foo-section} % if you have \label{foo-section} somewhere;
+% % inserts a section symbol and the section
+% % number
+% blah blah~$\threedots$
+% blah blah~$\fourdots$
+% $x_1 \spdots x_n$ % for a string; dots at the bottom
+% $x_1+\spcdots+x_n$ % for a sum or whatever; dots in the middle
+% \etc.
+% \ie.
+% \eg.
+% \cf.
+% \ibid.
+% \opcit.
+% \etal.
+%
+
+\input redefine % from texlocal
+
+% You may want to redefine \sectref as follows:
+% \renewcommand{\sectref}{section~\ref}
+%
+\newcommand{\sectref}{\S\ref}
+
+\newcommand{\threedots}{\nolinebreak[4]\mathinner{\ldotp\ldotp\ldotp}}
+\newcommand{\fourdots}{\nolinebreak[4]\mathinner{\ldotp\ldotp\ldotp\ldotp}}
+\newcommand{\spdots}{\;\ldots\;}
+\newcommand{\spcdots}{\;\cdots\;}
+\newdef\etc.{\mbox{\it etc.}}
+\newdef\ie.{\mbox{\it i.e.}}
+\newdef\eg.{\mbox{\it e.g.}}
+\newdef\cf.{\mbox{\it cf.}}
+\newdef\ibid.{\mbox{\it ibid.}}
+\newdef\opcit.{\mbox{\it op. cit.}}
+\newdef\etal.{\mbox{\it et al.}}
+
+\newdef\vs.{\mbox{vs.}} % perhaps not italic?
+
diff --git a/macros/latex209/contrib/misc/euler.sty b/macros/latex209/contrib/misc/euler.sty
new file mode 100644
index 0000000000..407405fcce
--- /dev/null
+++ b/macros/latex209/contrib/misc/euler.sty
@@ -0,0 +1,146 @@
+% The following lines establish the use of the Euler Fraktur font.
+% Calling sequence: \documentstyle[...,euler,...]{....}
+% Slightly modified from a version snarfed from LISTSERV at DHDURZ1
+% The modification is using the command \@addto to
+% modify the virtual font size definitions later used
+% by ARTxx.STY or REPxx.STy or so on.
+% I found \@addto in VDM.STY by Mario Wolcko.
+% The advantage is that using this trick you can add
+% different families of fonts to the existing LATEX fonts
+% and the later style options do not remove font families added
+% by previous style option. So you can add selectively
+% e.g. the MSXMxx and MSYMxx families and later also
+% the Euler Fraktur and the cyrillic fonts without any changes
+% in the style files. Without \@addto this is rather difficult
+% to accomplish.
+% Updates 11/20/1988 by E. Neuwirth (A4422DAB at AWIUNI11)
+
+ \def\@addto#1#2{\ifx#1\undefined % do nothing
+ \else \toks0=\expandafter{#1}\toks1={#2}%
+ \global\edef#1{\the\toks0 \the\toks1 }\fi}
+
+
+
+
+\catcode`@=11
+
+\def\relaxnext@{\let\next\relax}
+
+%\font\twfveuf=eufm10 \@magscale5
+\font\twtyeuf=eufm10 \@magscale4
+\font\svtneuf=eufm10 \@magscale3
+\font\frtneuf=eufm10 \@magscale2
+\font\twelveeuf=eufm10 \@magscale1
+\font\eleveneuf=eufm10 \@halfmag
+\font\teneuf=eufm10
+\font\nineeuf=eufm9
+\font\eighteuf=eufm8
+\font\seveneuf=eufm7
+\font\sixeuf=eufm6
+\font\fiveeuf=eufm5
+
+\newfam\euffam
+
+% Hier sind jetzt geaenderte LFONTS Definitionen (fuer LaTeX)
+
+\@addto\@vpt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\fiveeuf}\textfont\euffam=\fiveeuf
+ \scriptfont\euffam=\fiveeuf \scriptscriptfont\euffam=\fiveeuf
+\@setstrut\rm}
+
+
+\@addto\@vipt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\sixeuf}\textfont\euffam=\sixeuf
+ \scriptfont\euffam=\sixeuf \scriptscriptfont\euffam=\sixeuf
+\@setstrut\rm}
+
+
+\@addto\@viipt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\seveneuf}\textfont\euffam=\seveneuf
+ \scriptfont\euffam=\fiveeuf \scriptscriptfont\euffam=\fiveeuf
+\@setstrut \rm}
+
+
+\@addto\@viiipt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\eighteuf}\textfont\euffam=\eighteuf
+ \scriptfont\euffam=\sixeuf \scriptscriptfont\euffam=\fiveeuf
+\@setstrut \rm}
+
+
+\@addto\@ixpt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\nineeuf}\textfont\euffam=\nineeuf
+ \scriptfont\euffam=\sixeuf \scriptscriptfont\euffam=\fiveeuf
+\@setstrut \rm}
+
+
+\@addto\@xpt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\teneuf}\textfont\euffam=\teneuf
+ \scriptfont\euffam=\seveneuf \scriptscriptfont\euffam=\fiveeuf
+\@setstrut \rm}
+
+
+\@addto\@xipt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\eleveneuf}\textfont\euffam=\eleveneuf
+ \scriptfont\euffam=\eighteuf \scriptscriptfont\euffam=\sixeuf
+\@setstrut \rm}
+
+
+\@addto\@xiipt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\twelveeuf}\textfont\euffam=\twelveeuf
+ \scriptfont\euffam=\eighteuf \scriptscriptfont\euffam=\sixeuf
+ \@setstrut \rm}
+
+
+\@addto\@xivpt{\textfont\z@\frtnrm
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\frtneuf}\textfont\euffam=\frtneuf
+ \scriptfont\euffam=\teneuf \scriptscriptfont\euffam=\seveneuf
+\@setstrut \rm}
+
+
+\@addto\@xviipt{\textfont\z@\svtnrm
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\svtneuf}\textfont\euffam=\svtneuf
+ \scriptfont\euffam=\twelveeuf \scriptscriptfont\euffam=\teneuf
+\@setstrut \rm}
+
+
+\@addto\@xxpt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\twtyeuf}\textfont\euffam=\twtyeuf
+ \scriptfont\euffam=\frtneuf \scriptscriptfont\euffam=\twelveeuf
+\@setstrut \rm}
+
+
+\@addto\@xxvpt{
+% Hier AmS-Fonts
+\def\euf{\fam\euffam\twtyeuf}\textfont\euffam=\twtyeuf
+ \scriptfont\euffam=\twtyeuf \scriptscriptfont\euffam=\svtneuf
+\@setstrut \rm}
+
+
+
+
+
+
+
+
+\def\frak{\relaxnext@\ifmmode\let\next\frak@\else
+ \def\next{\Err@{Use \string\frak\space only in math mode}}\fi\next}
+\def\goth{\relaxnext@\ifmmode\let\next\frak@\else
+ \def\next{\Err@{Use \string\goth\space only in math mode}}\fi\next}
+\def\frak@#1{{\frak@@{#1}}}
+\def\frak@@#1{ %\noaccents@
+\fam\euffam#1}
+% End definition of Euler Fraktur font.
+
+\catcode`@=12 % at signs are no longer letters
+
diff --git a/macros/latex209/contrib/misc/exam.sty b/macros/latex209/contrib/misc/exam.sty
new file mode 100644
index 0000000000..80ced00c27
--- /dev/null
+++ b/macros/latex209/contrib/misc/exam.sty
@@ -0,0 +1,394 @@
+%% EXAM.STY -- Examination Style (article version) for LaTeX version 2.09
+%% History: July 21, 1989; Original version (MCTF.STY) July 25, 1988
+%% Author: George D. Greenwade (BED_GDG@SHSU.BITNET)
+%% Center for Business and Economic Research
+%% Sam Houston State University, Huntsville, TX 77341-2056
+%% Huntsville, Texas, USA 77341-2056
+%% (409) 294-1518
+%%
+%% Includes ART11.STY, FULLPAGE.STY, and FANCYHEADINGS.STY as default.
+%% Usage: \documentstyle[exam]{article}
+%% %\key % remove leading comment if key is desired, see below
+%% %\listing % remove leading comment if listing is desired, see below
+%% \courseno{ECO 530} % specify the course number in this field
+%% \examno{One} % specify the exam number in this field
+%% \date{Exam Date} % specify exam date (my preference is to use
+%% % semester and year); default is \today
+%% \prof{Greenwade} % specify the professor's name in this field
+%% \intro{Instruction text} % specify the instruction text in this
+%% % field. Note that this version does NOT
+%% % provide a line for the student's name.
+%% \begin{document}
+%% \maketitle % generate a first page with information
+%% % provided above
+%% \startquestions
+%% %See below for specifics of operation
+%%
+%% % multiple choice example
+%% \qtem{A}{03.015} This is a multiple choice question and:
+%% \startanswers
+%% \atem this is the correct answer.
+%% \atem this is an incorrect answer.
+%% \atem this is another incorrect answer.
+%% \finishanswers
+%%
+%% % true-false example
+%% \qtem{T}{05.027} This is a true statement. \endtf
+%%
+%% % essay example, with a 2 inch blank response area
+%% \ltem{2}{11.045} You have two inches to respond to this. \endessay
+%%
+%% % fill-in-the-blank example
+%% \ftem{missing}{15.23} There is a word \_\_\_\_\_\_\_\_\_\_\_\_\_ .
+%% \endfitb
+%%
+%% \finishquestions
+%% \end{document}
+%%
+%% NOTES
+%% All questions are within a minipage environment to ensure that questions
+%% are not broken across pages.
+%%
+%% A variation of the enumi counter is employed (\qcount) to ensure proper
+%% enumeration of questions.
+%%
+%% There are useful variations of \item within the file to assist in the
+%% generation of exams:
+%%
+%% Exam questions are delimited by \startquestions ... \finishquestions
+%% QUESTION TYPES
+%% -- \qtem{X}{Y} creates a question item for multiple choice and
+%% true/false items, with a blank leading line for responses. In this
+%% case, {X} represents the correct response (\qtema) and {Y} represents
+%% the question number from within the master question data file
+%% (\qmasno). BOTH X AND Y MUST BE SPECIFIED, EVEN IF AS \qtem{}{}
+%% -- \ltem{X}{Y} creates a question item for essay and fill-in-the-blank
+%% items, without a blank leading line for responses. In this case, {X}
+%% represents the vertical blank space for the response (\qtema) and
+%% {Y} represents the question number from within the master question
+%% data file (\qmasno).
+%% BOTH X AND Y MUST BE SPECIFIED, WITH X POSSESSING AN EXPLICIT NUMBER.
+%% THE MINIMAL ENTRY IS \ltem{0}{}
+%% ANSWER TYPES
+%% Answers to question are delimited by:
+%% -- MULTIPLE CHOICE: (Following \qtem{X}{Y} The question text...) a
+%% delimited range begining with \startanswers and ended by \finishanswers;
+%% each answer item is identified with \atem. This creates an enumerated
+%% list (\enumii) of a., b., c., ...
+%% -- TRUE/FALSE: (Following \qtem{X}{Y} The question text...) terminate
+%% text with \endtf , which automatically generates a. True b. False
+%% -- ESSAY/FILL-IN-THE-BLANK: (Following \ltem{X}{Y} The question text...)
+%% terminate test with \endessay , which provides X inches of specified
+%% vertical space for the response. In the case of Fill-in questions,
+%% specify X to zero
+%%
+%% There are two useful preamble declarations (\key and \listing) used to
+%% produce different reports from a .TEX file:
+%% -- no declaration creates an exam, with leading blanks, as specified by
+%% \qtem or \ltem.
+%% -- \key creates an answer key, with the correct answer placed where the
+%% leading blank space was on the exam form. The key format is
+%% identical to the corresponding exam.
+%% -- \listing creates a listing of questions similar to \key, but the
+%% master question number is also provided. This option is handy in
+%% maintaining the master database of questions. In the case of the
+%% \listing output for \ltem items, a note is provided informing of the
+%% vertical space provided for the answer, rather than the physical space
+%% for the answer to conserve printed output.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Get ART11.STY from local collection
+\input{art11.sty}
+
+% This is FULLPAGE.STY, version 2
+% (hardcoded to ensure consistency between users)
+% This is FULLPAGE.STY by H.Partl, Version 2 as of 15 Dec 1988.
+\topmargin 0pt
+\headheight 13.6pt % necessary variation to avoid overfull vboxes
+\headsep 30pt % necessary variation to provide nicer tops of pages
+\advance \topmargin by -\headheight
+\advance \topmargin by -\headsep
+
+\textheight 9.2in
+
+\oddsidemargin 0pt
+\evensidemargin \oddsidemargin
+\marginparwidth 0.5in
+
+\textwidth 6.5in
+% end of FULLPAGE.STY
+
+% This is FANCYHEADINGS.STY
+% (hardcoded to ensure consistency between users)
+% fancyheadings.sty version 1.0
+% Fancy headers and footers.
+% Piet van Oostrum, Dept of Computer Science, University of Utrecht
+% Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands
+% Telephone: +31-30-531806. piet@cs.ruu.nl (mcvax!hp4nl!ruuinf!piet)
+% March, 1989.
+\def\lhead{\@ifnextchar[{\@xlhead}{\@ylhead}}
+\def\@xlhead[#1]#2{\gdef\@elhead{#1}\gdef\@olhead{#2}}
+\def\@ylhead#1{\gdef\@elhead{#1}\gdef\@olhead{#1}}
+
+\def\chead{\@ifnextchar[{\@xchead}{\@ychead}}
+\def\@xchead[#1]#2{\gdef\@echead{#1}\gdef\@ochead{#2}}
+\def\@ychead#1{\gdef\@echead{#1}\gdef\@ochead{#1}}
+
+\def\rhead{\@ifnextchar[{\@xrhead}{\@yrhead}}
+\def\@xrhead[#1]#2{\gdef\@erhead{#1}\gdef\@orhead{#2}}
+\def\@yrhead#1{\gdef\@erhead{#1}\gdef\@orhead{#1}}
+
+\def\lfoot{\@ifnextchar[{\@xlfoot}{\@ylfoot}}
+\def\@xlfoot[#1]#2{\gdef\@elfoot{#1}\gdef\@olfoot{#2}}
+\def\@ylfoot#1{\gdef\@elfoot{#1}\gdef\@olfoot{#1}}
+
+\def\cfoot{\@ifnextchar[{\@xcfoot}{\@ycfoot}}
+\def\@xcfoot[#1]#2{\gdef\@ecfoot{#1}\gdef\@ocfoot{#2}}
+\def\@ycfoot#1{\gdef\@ecfoot{#1}\gdef\@ocfoot{#1}}
+
+\def\rfoot{\@ifnextchar[{\@xrfoot}{\@yrfoot}}
+\def\@xrfoot[#1]#2{\gdef\@erfoot{#1}\gdef\@orfoot{#2}}
+\def\@yrfoot#1{\gdef\@erfoot{#1}\gdef\@orfoot{#1}}
+
+\newdimen\headrulewidth
+\newdimen\footrulewidth
+\newdimen\plainheadrulewidth
+\newdimen\plainfootrulewidth
+\newdimen\headwidth
+\newif\if@fancyplain \@fancyplainfalse
+\def\fancyplain#1#2{\if@fancyplain#1\else#2\fi}
+
+\headrulewidth 0.4pt
+\footrulewidth\z@
+\plainheadrulewidth\z@
+\plainfootrulewidth\z@
+
+\lhead[\fancyplain{}{\sl\rightmark}]{\fancyplain{}{\sl\leftmark}}
+\chead{}
+\rhead[\fancyplain{}{\sl\leftmark}]{\fancyplain{}{\sl\rightmark}}
+\lfoot{}
+\cfoot{\rm\thepage} % page number
+\rfoot{}
+
+\def\@fancyhead#1#2#3#4#5{#1\hbox to\headwidth{\vbox{\hbox
+{\rlap{\parbox[b]{\headwidth}{\raggedright#2\strut}}\hfill
+\parbox[b]{\headwidth}{\centering#3\strut}\hfill
+\llap{\parbox[b]{\headwidth}{\raggedleft#4\strut}}}\headrule}}#5}
+
+\def\@fancyfoot#1#2#3#4#5{#1\hbox to\headwidth{\vbox{\footrule
+\hbox{\rlap{\parbox[t]{\headwidth}{\raggedright#2\strut}}\hfill
+\parbox[t]{\headwidth}{\centering#3\strut}\hfill
+\llap{\parbox[t]{\headwidth}{\raggedleft#4\strut}}}}}#5}
+
+\def\headrule{{\if@fancyplain\headrulewidth\plainheadrulewidth\fi
+\hrule\@height\headrulewidth\@width\headwidth \vskip-\headrulewidth}}
+
+\def\footrule{{\if@fancyplain\footrulewidth\plainfootrulewidth\fi
+\vskip-0.3\normalbaselineskip\vskip-\footrulewidth
+\hrule\@width\headwidth\@height\footrulewidth\vskip0.3\normalbaselineskip}}
+
+\def\ps@fancy{
+\let\@mkboth\markboth
+\@ifundefined{chapter}{\def\sectionmark##1{\markboth
+{\uppercase{\ifnum \c@secnumdepth>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}
+\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+{\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth>\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}{}}
+\def\sectionmark##1{\markright{\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}}}
+\def\@oddhead{\@fancyhead\relax\@olhead\@ochead\@orhead\hss}
+\def\@oddfoot{\@fancyfoot\relax\@olfoot\@ocfoot\@orfoot\hss}
+\def\@evenhead{\@fancyhead\hss\@elhead\@echead\@erhead\relax}
+\def\@evenfoot{\@fancyfoot\hss\@elfoot\@ecfoot\@erfoot\relax}
+\headwidth\textwidth}
+\def\ps@fancyplain{\ps@fancy \let\ps@plain\ps@plain@fancy}
+\def\ps@plain@fancy{\@fancyplaintrue\ps@fancy}
+% end of FANCYHEADINGS.STY
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% \def's for \prof, \examno, and \courseno %%
+%% \date and \intro %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\prof#1{\edef\prof{#1}}
+\def\examno#1{\edef\examno{#1}}
+\def\courseno#1{\edef\courseno{#1}}
+\def\intro#1{\gdef\intro{#1}}
+\def\date#1{\gdef\@date{#1}}
+\gdef\@date{\today} %Default is today's date
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% \newifs for key and listing of questions %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifkey
+\newif\iflisting
+
+\global\keyfalse
+\global\listingfalse
+
+\def\key{\global\keytrue \global\listingfalse}
+\def\listing{\global\listingtrue \global\keytrue}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Create leading blank answer line %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\ansline{
+\iflisting{\qmasno\ \underline{$\bullet$ \qtema\ $\bullet$}} \else
+\ifkey{\underline{\rule{.15in}{.0mm}$\bullet$ \qtema\
+ $\bullet$\rule{.15in}{.0mm}}} \else
+ \ifnum\qcount<9 {\rule{.5in}{.3mm} \kern 5mm}
+ \else\ifnum\qcount>8 {\rule{.5in}{.3mm} \kern 3mm}
+ \else {\rule{.5in}{.3mm} \kern 3mm}
+\fi \fi \fi \fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Make following period for answer options %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\labelenumii{\alph{enumii}.}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Questions use enumi counter and are %%
+%% inserted appropriately using minipage %%
+%% leading blank line is used and redefined %%
+%% to original status upon exit; define %%
+%% \endtf for questions without subitems %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcount\qcount
+\qcount=-1
+
+%%% QUESTIONS WITH A LEADING BLANK RESPONSE LINE
+
+%% \startquestions is used to create question items WITH a blank answer
+%% line for responses to be entered.
+\def\startquestions{\qcount=-1\def\labelenumi{\ansline \arabic{enumi}.}
+ \ \\ }
+
+%% \qtem is a question and answer set placed on a minipage which HAS a leading
+%% blank line for responses.
+\def\qtem#1#2{\advance \qcount by 1 \noindent
+ \hspace*{.7in} \begin{minipage}{5.7in} \edef\qtema{#1} \edef\qmasno{#2}
+ \begin{enumerate} \setcounter{enumi}{\qcount} \item}
+
+%% \finishquestions is used to end questions and reset \labelenumi so that the
+%% leading blank space is removed (used with \startquestions)
+\def\finishquestions{\def\labelenumi{\arabic{enumi}.}}
+
+%% \ltem is a question and answer set placed on a minipage which does NOT have
+%% a leading blank line for responses.
+\def\ltem#1#2{\advance \qcount by 1 \noindent
+ \hspace*{.7in} \begin{minipage}{5.7in} \edef\qtema{#1} \edef\qmasno{#2}
+\let\ansline\essayline
+ \begin{enumerate} \setcounter{enumi}{\qcount} \item}
+
+\def\essayline{
+\iflisting{\qmasno\ \rule{.25in}{0pt}} \else
+ \ifnum\qcount<9 {\rule{.5in}{0mm} \kern 5mm}
+ \else\ifnum\qcount>8 {\rule{.5in}{0mm} \kern 3mm}
+ \else {\rule{.5in}{.3mm} \kern 3mm}
+\fi \fi \fi}
+
+%% \ftem is a question and answer set placed on a minipage which does NOT have
+%% a leading blank line for responses.
+\def\ftem#1#2{\advance \qcount by 1 \noindent
+ \hspace*{.7in} \begin{minipage}{5.7in} \edef\qtema{#1} \edef\qmasno{#2}
+\let\ansline\essayline
+ \begin{enumerate} \setcounter{enumi}{\qcount} \item}
+
+\def\fillblankline{
+\iflisting{\qmasno\ \qtema} \else
+\ifkey{\underline{\qtema}}\else
+ \ifnum\qcount<9 {\rule{.5in}{0mm} \kern 5mm}
+ \else\ifnum\qcount>8 {\rule{.5in}{0mm} \kern 3mm}
+ \else {\rule{.5in}{.3mm} \kern 3mm}
+\fi \fi \fi \fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Answers use enumii counter and are %%
+%% inserted appropriately using minipage %%
+%% optional "atem" is defined to tighten up %%
+%% vertical space between answers %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\mcitemsep
+\mcitemsep 0pt
+
+%% \startanswers is used to start an answer set of multiple choice answers
+\def\startanswers{ \vspace*{-2mm} \begin{enumerate} \let\itemsep\mcitemsep}
+
+%% \finishanswers is used to end the answer list and close the minipage
+\def\finishanswers{\ \\ \end{enumerate} \end{enumerate} \end{minipage} }
+
+%% \endtf is used to end a true-false statement which has no multiple choice
+%% answers present (primarily, close the minipage)
+\def\endtf{\begin{enumerate} \atem True \rule{.5in}{0pt} b. False \ \\
+
+\end{enumerate} \end{enumerate} \end{minipage} }
+
+\def\endessay{\ \\ \iflisting{{\sl A vertical space of \qtema\ inches is left
+for this response}\\
+
+} \else
+{\rule{0pt}{\qtema in}} \fi
+\end{enumerate} \end{minipage}}
+
+\def\endfitb{\ \\ \ifkey{{\sl \qtema }\\
+
+} \else {\ \\} \fi \end{enumerate} \end{minipage}}
+
+%% \atem is an answer item used following \startanswers. Note the negative
+%% \vspace* added to tighten up the appearance of the answer set.
+%% Can use \item if happy with standard LaTeX spacing for enumii.
+\def\atem{%\vspace*{-1.5mm}
+ \item}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% \maketitle for test, list, and key headers %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\maketitle{
+\typeout{ }
+
+\iflisting\typeout{Processing a Listing of Questions for \courseno } \else
+\ifkey\typeout{Processing Answer Key for Exam \examno , \courseno} \else
+\typeout{Processing Exam \examno , \courseno , for Professor \prof } \fi\fi
+
+\typeout{ }
+\iflisting{\noindent {\bf \courseno \hfill \today \\
+Listing of Questions \hfill \prof }\\
+\vspace*{2mm}
+
+This is a listing of questions in your exam database. The first number in the
+left column represents the question number in the master database, with a
+number such as 05.012 representing question 12 in chapter 5. The second entry
+in the left column represents the correct answer from among the choices
+presented. The third number in the left column represents the running question
+count for the range of questions in the database specified (this is handy once
+questions are deleted from your database). Finally, the question, as it would
+appear on an exam, is presented.\\ \rule{0pt}{4mm}}
+\else
+\ifkey
+{\noindent {\bf \courseno \hfill \@date \\
+Exam \examno \hfill $\bullet$ ANSWER KEY $\bullet$ \hfill \prof }\\
+\vspace*{2mm}
+
+\intro \ \\ \rule{0pt}{4mm}}
+\else %\ifexam
+{\noindent {\bf \courseno \hfill \@date \\
+Exam \examno \hfill \prof }\\
+\vspace*{2mm}
+
+\intro \ \\ \rule{0pt}{4mm}}
+\fi \fi }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Headers for pages other than first %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\lhead{\iflisting{\sl \courseno\ Listing of Questions}
+ \else\ifkey{\sl \courseno, Exam \examno\ Answer Key}
+ \else{\sl \courseno, Exam \examno}\fi \fi}
+\chead{\sl \prof}
+\rhead{\sl Page \thepage}
+\lfoot{}
+\cfoot{}
+\rfoot{}
+\pagestyle{fancy}
+\thispagestyle{empty}
+
diff --git a/macros/latex209/contrib/misc/example.sty b/macros/latex209/contrib/misc/example.sty
new file mode 100644
index 0000000000..bdab7fa192
--- /dev/null
+++ b/macros/latex209/contrib/misc/example.sty
@@ -0,0 +1,412 @@
+% example.sty 20 May 91
+%------------------------------------------------------------
+% Copyright (c) 1988, 1991 by J.Schrod.
+% Distributed under the terms of the GNU General Public License.
+
+%
+% LaTeX style option example
+% tested with style article, should also work with other styles
+% don't use it with twoside or twocolumn option
+%
+% [LaTeX in MAKEPROG]
+
+
+%
+% Author
+% js: Joachim Schrod <xitijsch@ddathd21.bitnet>
+% Contributors
+% (** enough place for your name **)
+%
+
+%
+% VERSION HISTORY (MSCF -- most significant change first)
+%
+% DATE WHO REMARKS
+% 91-05-20 js documentation added for distribution
+% 88-06-29 js created it for THD LaTeX tutorial
+
+
+
+
+%%%%
+%%%%
+%%%% These TeX macros were documented with the documentation system
+%%%% MAKEPROG and automatically converted to the current form.
+%%%% If you have MAKEPROG available you may transform it back to
+%%%% the original input: Remove every occurence of three percents
+%%%% and one optional blank from the beginning of a line and remove
+%%%% every line which starts with four percents. The following lex
+%%%% program will do this:
+%%%%
+%%%% %%
+%%%%
+%%%% ^%%%\ ? ;
+%%%% ^%%%%.*\n ;
+%%%%
+%%%% MAKEPROG may be obtained over the net from the Bitnet-Listserver
+%%%% LISTSERV@DHDURZ1 (filelist WEBWARE), from tuglib@science.utah.edu,
+%%%% or via ftp from june.cs.washington.edu.
+%%%%
+%%%%
+%%% \documentstyle[progltx,example]{article}
+
+
+%%% \nofiles % don't need an aux file
+%%% \hfuzz=18pt % expected overfull hboxes in code
+
+
+%%% \begin{document}
+
+
+%%% \title{The {\tt example\/} Style Option}
+%%% \author{% % LaTeX does not discard unnecessary glue...
+%%% Joachim Schrod%
+%%% \thanks{%
+%%% TU~Darmstadt, Alexanderstr.~10, D-6100 Darmstadt, Germany.\hfil\break
+%%% Email: {\tt xitijsch@ddathd21.bitnet}.%
+%%% }%
+%%% }
+%%% \date{20 May 91}
+
+%%% \maketitle
+
+
+
+%%% \chap What's this style option for?.
+
+%%% This style option makes it easier to produce examples for \TeX{}
+%%% courses. It realizes an |example| environment; the text within such
+%%% an environment is typeset two times: On the left side just like any
+%%% ordinary text, on the right side verbatim. So an author can be sure
+%%% that the verbatim and the typeset part of an \TeX{} example is
+%%% consistent. The usage is simple: Type
+%%% %
+%%% \begin{quote}
+%%% |\begin{example}|
+%%% |Some \TeX{} text.|
+%%% |\end{example}|
+%%% \end{quote}
+%%% %
+%%% and you get
+%%% %
+%%% \begin{example}
+%%% Some \TeX{} text.
+%%% \end{example}
+%%% %
+%%% Just note one important point: {\it The end of the environment must
+%%% be on a line of it's own, there must be no space in front of the
+%%% |\end|, and there must be no text -- even no comment -- behind}. For
+%%% further information have a look at the section on possible
+%%% enhancements.
+
+
+%%% \sect This program is free software; you can redistribute it and/or
+%%% modify it under the terms of the GNU General Public License as
+%%% published by the Free Software Foundation; either version~1, or (at your
+%%% option) any later version.
+
+%%% This program is distributed in the hope that it will be useful, but
+%%% {\bf without any warranty\/}; without even the implied warranty of
+%%% {\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+%%% the GNU General Public License for more details.
+
+%%% You should have received a copy of the GNU General Public License
+%%% along with this program; if not, write to the Free Software Foundation,
+%%% Inc., 675~Mass Ave, Cambridge, MA~02139, USA.
+
+
+%%% \sect The implementation uses an auxiliary file. This file has the
+%%% extension |tmp|. Be aware of this if you use such a file name in other
+%%% options. The file is not needed outside of the environment.
+
+%%% All public markups start with |Example|, all private ones with
+%%% |example_|. These two prefixes are reserved.
+
+%%% The width of an example column is available for inspection and change
+%%% in the dimension register |\ExampleWidth|.
+
+
+%%% \sect This style option still has at least one problem which you
+%%% should be aware of: I've encountered false indentation while I've
+%%% used it within an item of a |list| environment. I remember that there
+%%% was a difference if it was used with or without text in front of it.
+%%% But I didn't needed this stuff so I decided not to look at.
+
+%%% Might be, that |\everypar| is not handled correctly or that some flags
+%%% should be looked at. (Remember that an |\item| in \LaTeX{} does not
+%%% set anything -- it just stores it away until the start of the next
+%%% paragraph!)
+
+%%% Furthermore I set |\oddsidemargin| and |\evensidemargin| to 0\,pt, but
+%%% I do not remember why. Is this really necessary? (I should have
+%%% documented it in the beginning, nothing lives longer than a
+%%% provision\,\dots)
+
+
+%%% \sect And some future enhancements would be easy to make:
+%%% %
+%%% \begin{itemize}
+
+%%% \item The algorithm for typesetting the verbatim text should be those
+%%% of |progltx|. Then tabulators and all those stuff would be handled
+%%% right.
+
+%%% \item The algorithm for detecting the environment end should be those
+%%% of |progltx|, too. It would allow for comments; a markup which forbids
+%%% a comment behind it should be forbidden.
+
+%%% \item There should be a way to specify texts which are only printed in
+%%% the \TeX{} part resp.\ the verbatim part. This would be helpful for
+%%% inserting help lines, additional information etc. (Implementation is
+%%% straightforward.)
+
+%%% \item The implementation does not care for the |twoside| option. Then
+%%% the order should be mirrored. I.e., verbatim left and \TeX{} text
+%%% right.
+
+%%% \item Other arrangements of \TeX{} text and verbatim text should be
+%%% possible. E.g., on a slide there should not be beside each other but
+%%% below. Perhaps also on a multi-column layout.
+
+%%% \end{itemize}
+
+
+%%% \sect Before we start we declare some shorthands for category codes.
+%%% By declaring the underscore~`(|_|)' as letters we can use it in our
+%%% macros. (I agree with {\sc D.~Knuth} that
+%%% |\identifier_several_words_long| is more readable than
+%%% |\IdentifierSeveralWordsLong| and in every case better than
+%%% |\p@@@s|.) As this is a \LaTeX{} style option the at sign is a letter
+%%% anyhow; so we can use the ``private'' Plain and \LaTeX{} macros; and
+%%% with the underscore we can make our own macros more readable. But as
+%%% we have to restore this category code at the end of this macro file
+%%% we store its former value in the control sequence |\uscode|. This
+%%% method is better than to use a group because not all macros have to
+%%% be defined global this way.
+
+%%% \beginprog
+\chardef\escape=0
+\chardef\open=1
+\chardef\close=2
+\chardef\letter=11
+\chardef\other=12
+%\chardef\active=13 % is defined in Plain already
+
+\chardef\uscode=\catcode`\_ % top level macro file!
+
+\catcode`\_=\letter
+%%% \endprog
+
+
+%%% \sect Now some setup where I don't remember why I've done them,
+%%% perhaps it was only needed in our tutorials. -- But never change a
+%%% running program by yourself, let others do the work\,\dots
+
+%%% \beginprog
+\oddsidemargin=0pt
+\evensidemargin=\oddsidemargin
+%%% \endprog
+
+
+
+
+%%% \chap The Work is Simple.
+
+%%% Guess, the problem of implementation is no problem: We write the whole
+%%% stuff to a file and read it back twice. One time for typesetting it as
+%%% it is, second time for typesetting it verbatim. That's all.
+
+%%% So let's define our file variable and name first:
+
+%%% \beginprog
+\newwrite\example_file
+\def\example_name{\jobname.tmp } % <-- space!
+%%% \endprog
+
+
+%%% \sect Both parts of one example will be placed besides each other. We
+%%% use the margin for the example, too. (There is not much place anyhow.)
+%%% Between the two parts there is |\columnsep| space left.
+
+%%% \beginprog
+\newdimen\ExampleWidth
+ \ExampleWidth=\textwidth
+ \advance\ExampleWidth by \marginparwidth % stick into margins
+ \advance\ExampleWidth by -\columnsep % between columns
+ \divide\ExampleWidth by 2
+%%% \endprog
+
+
+%%% \sect When we're about, we may specify how to set the two parts. We
+%%% may assume that the complete text is in the file |\example_name|. Both
+%%% parts are typeset as minipages (it's better than vtop's for
+%%% |\footnote| examples and such like). Sectioning markups and other
+%%% stuff which setup things must behave as if they were not there --
+%%% nobody wants an entry in his table of contents because he has used a
+%%% |\section| markup in an example.
+
+%%% The horizontal rules are needed for a better (still not correct)
+%%% interline spacing.
+
+%%% {\it FIXME: How about index and glossary entries?}
+
+%%% \beginprog
+\def\ExampleSet{%
+ \begin{minipage}[t]{\ExampleWidth}%
+ \hrule height\z@
+ \def\markboth##1##2{}%
+ \def\markright##1{}%
+ \def\addcontentsline##1##2##3{}%
+ \input \example_name
+ \par
+ \hrule height\z@
+ \end{minipage}%
+ }
+%%% \endprog
+
+
+%%% \sect Grmpfh, the \LaTeX{} |verbatim| environment is sloppy
+%%% implemented (to say it polite). I will establish at least that a tab
+%%% is typeset as 8~spaces; this will help some people.
+
+%%% {\it FIXME: other\/ |verbatim| implementation!}
+
+%%% \beginprog
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\@vobeytabs{\catcode`\^^I\active \let^^I\@xobeytab}
+ \global\let^^I=\@xobeytab% % for \write's
+\endgroup
+\def\@xobeytab{\space\space\space\space\space\space\space\space}
+%%% \endprog
+
+
+%%% \sect The verbatim code is taken from \LaTeX{}:
+
+%%% \beginprog
+\def\ExampleVerb{%
+ \begin{minipage}[t]{\ExampleWidth}%
+ \hrule height\z@
+ \begingroup
+ \small
+ \parindent\z@
+ \rightskip\@flushglue
+ \@makeother\"\@verbatim
+ \frenchspacing \@vobeyspaces \@vobeytabs
+ \input \example_name
+ \endverbatim
+ \endgroup
+ \hrule height\z@
+ \end{minipage}%
+ }
+%%% \endprog
+
+
+
+
+%%% \chap Writing the example to the auxiliary file.
+
+%%% Now we come to the real environment: We open our auxiliary file and
+%%% start copying line by line afterwards. When we see the environment
+%%% end we will finish. As a convenience for input we will ignore empty
+%%% lines at the beginning of the example, this is flagged by |@ignore|.
+
+%%% \beginprog
+\def\example{
+ \par
+ \immediate\openout\example_file\example_name
+ \begingroup
+ \@makeother\"\let\do\@makeother \dospecials
+ \obeylines \obeyspaces
+ \@ignoretrue \copy_line
+ }
+%%% \endprog
+
+
+%%% \sect We need a reference line of the example end to compare against.
+%%% This line we call |\end_of_example|. Of course all catcodes have to
+%%% set up appropriately.
+
+%%% \beginprog
+\begingroup
+ \catcode`\|=\escape % | is temporary escape character
+ \catcode`\[=\open % [ and ] are temporary grouping symbols
+ \catcode`\]=\close
+ \catcode`\{=\other % these are `other' in verbatim mode
+ \catcode`\}=\other
+ \catcode`\\=|other
+ |gdef|end_of_example[\end{example}]
+|endgroup
+%%% \endprog
+
+
+%%% \sect Following the ``golden rules of \TeX{} macro coding,'' we will
+%%% split gathering of the next line and working with it. If the line
+%%% equals our reference line we will stop our envirenment. Of course, we
+%%% must call |\end| ourselves as we have just read it from the input and
+%%% it is already tokenized.
+
+%%% If we are inmidst the example we write the line to the auxiliary file,
+%%% if we shall not skip empty lines as indicated by |@ignore|.
+
+%%% {\it FIXME: The comparison should not be so rude!}
+
+%%% \beginprog
+\begingroup
+ \obeylines \gdef\copy_line#1^^M{\write_line{#1}}%
+\endgroup
+
+\def\write_line#1{%
+ \def\next{#1}%
+ \ifx \next\end_of_example
+ \def\next{\end{example}}% % finish example
+ \else
+ \ifx \next\empty
+ \if@ignore % ignore empty lines at the beginning
+ \else % but write them out later
+ \immediate\write\example_file{\next}%
+ \fi
+ \else
+ \immediate\write\example_file{\next}%
+ \@ignorefalse % at least one non-empty line written
+ \fi
+ \let\next\copy_line % next line of example
+ \fi
+ \next
+ }
+%%% \endprog
+
+
+%%% \sect Now we may handle our real work: The example text is written
+%%% out, we just have to set it two times. But first we must close the
+%%% file. Both parts are set by a |\leftline| which inserts glue by |\hss|
+%%% and will not yield an overfull hbox this way, it just sticks out to
+%%% the right.
+
+%%% We try to mimic a displayed equation in spacing -- it's better than
+%%% nothing (polishing needed).
+
+%%% \beginprog
+\def\endexample{%
+ \endgroup
+ \immediate\closeout\example_file
+ \penalty \predisplaypenalty
+ \vskip \abovedisplayskip
+ \leftline{\ExampleSet \hskip\columnsep \ExampleVerb}%
+ \penalty \postdisplaypenalty
+ \vskip \belowdisplayskip
+ }
+%%% \endprog
+
+
+%%% \sect We must restore our catcode and are finished.
+
+%%% \beginprog
+\catcode`\_=\uscode
+
+\endinput
+%%% \endprog
+
+
+
+%%% \end{document}
diff --git a/macros/latex209/contrib/misc/exercise.mac b/macros/latex209/contrib/misc/exercise.mac
new file mode 100644
index 0000000000..93c7b61521
--- /dev/null
+++ b/macros/latex209/contrib/misc/exercise.mac
@@ -0,0 +1,57 @@
+% Subject: exercise-macros
+% author : Alan R. Rogers
+
+% These macros are modified versions of the \exercise and \answer macros
+% on p. 422 of the TeXbook. The modifications are to make them work under
+% LaTeX.
+% Usage:
+% \documentstyle [12pt,twoside]{report}
+% \input exercise
+% \begin{document}
+% \chapter{Text}
+% \exercise In what season of the year did George Washington spend the
+% winter in Valley forge?
+% \answer 1776
+%
+% \exercise In what year did George Washington spend the winter there?
+% \answer Winter
+%
+% \chapter{Answers}
+% \listanswers % The answers are inserted here.
+% \end{document}
+% BUG: The blank lines after the \answer macros are *mandatory*. If you leave
+% them out TeX will exhaust the file looking for them.
+% Alan R. Rogers (rogers@anthro.utah.edu), U. of Utah, 10/23/88
+
+\newcounter{exno}[chapter]
+
+%\newenvironment{exercise}{\begin{list}{\small\llap{$\bullet$\kern.15em}%
+% {\footnotesize EXERCISE \bf\thechapter.\theexno}}{
+% \usecounter{exno}\small
+% \setlength{\labelwidth}{5em} \setlength{\labelsep}{1em}
+% \setlength{\leftmargin}{6em}
+% \setlength{\itemsep}{0em} \setlength{\topsep}{\parsep}}}
+% {\end{list}\normalsize}
+
+\outer\def\exercise{\addtocounter{exno}{1}
+ \par\small\noindent\llap{$\bullet$\kern.15em}% bullet in margin
+ {\footnotesize EXERCISE \bf\thechapter.\theexno}\par\nopagebreak\noindent}
+
+\def\ansno#1.#2:{\par\noindent
+ \hbox to\parindent{\bf\hss#1.#2.\enspace}\ignorespaces}
+\chardef\other=12
+\newwrite\ans
+\immediate\openout\ans=answers
+\outer\def\answer{\normalsize\par
+ \immediate\write\ans{}
+ \immediate\write\ans{\string\ansno\thechapter.\theexno:}
+ \copytoblankline}
+\def\copytoblankline{\begingroup\setupcopy\copyans}
+\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials
+ \catcode`\|=\other \obeylines}
+{\obeylines \gdef\copyans#1
+ {\def\next{#1}%
+ \ifx\next\empty\let\next=\endgroup %
+ \else\immediate\write\ans{\next} \let\next=\copyans\fi\next}}
+
+\def\listanswers{\immediate\closeout\ans\input answers}
diff --git a/macros/latex209/contrib/misc/exercise.sty b/macros/latex209/contrib/misc/exercise.sty
new file mode 100644
index 0000000000..34da48b709
--- /dev/null
+++ b/macros/latex209/contrib/misc/exercise.sty
@@ -0,0 +1,56 @@
+% Original author: Alan R. Rogers <rogers@anthro.utah.edu>
+% Example usage follows style file
+\newcounter{exno}[chapter]
+
+%\newenvironment{exercise}{\begin{list}{\small\llap{$\bullet$\kern.15em}%
+% {\footnotesize EXERCISE \bf\thechapter.\theexno}}{
+% \usecounter{exno}\small
+% \setlength{\labelwidth}{5em} \setlength{\labelsep}{1em}
+% \setlength{\leftmargin}{6em}
+% \setlength{\itemsep}{0em} \setlength{\topsep}{\parsep}}}
+% {\end{list}\normalsize}
+
+\outer\def\exercise{\addtocounter{exno}{1}
+ \par\small\noindent\llap{$\bullet$\kern.15em}% bullet in margin
+ {\footnotesize EXERCISE \bf\thechapter.\theexno}\par\nopagebreak\noindent}
+
+\def\ansno#1.#2:{\par\noindent
+ \hbox to\parindent{\bf\hss#1.#2.\enspace}\ignorespaces}
+\chardef\other=12
+\newwrite\ans
+\immediate\openout\ans=answers
+\outer\def\answer{\normalsize\par
+ \immediate\write\ans{}
+ \immediate\write\ans{\string\ansno\thechapter.\theexno:}
+ \copytoblankline}
+\def\copytoblankline{\begingroup\setupcopy\copyans}
+\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials
+ \catcode`\|=\other \obeylines}
+{\obeylines \gdef\copyans#1
+ {\def\next{#1}%
+ \ifx\next\empty\let\next=\endgroup %
+ \else\immediate\write\ans{\next} \let\next=\copyans\fi\next}}
+
+\def\listanswers{\immediate\closeout\ans\input answers}
+
+%============================================================================
+% These macros are modified versions of the \exercise and \answer macros
+% on p. 422 of the TeXbook. The modifications are to make them work under
+% LaTeX.
+% Usage:
+% \documentstyle [12pt,twoside,exercise]{report}
+% \begin{document}
+% \chapter{Text}
+% \exercise In what season of the year did George Washington spend the
+% winter in Valley forge?
+% \answer 1776
+%
+% \exercise In what year did George Washington spend the winter there?
+% \answer Winter
+%
+% \chapter{Answers}
+% \listanswers % The answers are inserted here.
+% \end{document}
+% BUG: The blank lines after the \answer macros are *mandatory*. If you leave
+% them out TeX will exhaust the file looking for them.
+% Alan R. Rogers (rogers@anthro.utah.edu), U. of Utah, 10/23/88
diff --git a/macros/latex209/contrib/misc/exercise.tex b/macros/latex209/contrib/misc/exercise.tex
new file mode 100644
index 0000000000..8521d93ea1
--- /dev/null
+++ b/macros/latex209/contrib/misc/exercise.tex
@@ -0,0 +1,54 @@
+% These macros are modified versions of the \exercise and \answer macros
+% on p. 422 of the TeXbook. The modifications are to make them work under
+% LaTeX.
+% Usage:
+% \documentstyle [12pt,twoside]{report}
+% \input exercise
+% \begin{document}
+% \chapter{Text}
+% \exercise In what season of the year did George Washington spend the
+% winter in Valley forge?
+% \answer 1776
+%
+% \exercise In what year did George Washington spend the winter there?
+% \answer Winter
+%
+% \chapter{Answers}
+% \listanswers % The answers are inserted here.
+% \end{document}
+% BUG: The blank lines after the \answer macros are *mandatory*. If you leave
+% them out TeX will exhaust the file looking for them.
+% Alan R. Rogers (rogers@anthro.utah.edu), U. of Utah, 10/23/88
+
+\newcounter{exno}[chapter]
+
+%\newenvironment{exercise}{\begin{list}{\small\llap{$\bullet$\kern.15em}%
+% {\footnotesize EXERCISE \bf\thechapter.\theexno}}{
+% \usecounter{exno}\small
+% \setlength{\labelwidth}{5em} \setlength{\labelsep}{1em}
+% \setlength{\leftmargin}{6em}
+% \setlength{\itemsep}{0em} \setlength{\topsep}{\parsep}}}
+% {\end{list}\normalsize}
+
+\outer\def\exercise{\addtocounter{exno}{1}
+ \par\small\noindent\llap{$\bullet$\kern.15em}% bullet in margin
+ {\footnotesize EXERCISE \bf\thechapter.\theexno}\par\nopagebreak\noindent}
+
+\def\ansno#1.#2:{\par\noindent
+ \hbox to\parindent{\bf\hss#1.#2.\enspace}\ignorespaces}
+\chardef\other=12
+\newwrite\ans
+\immediate\openout\ans=answers
+\outer\def\answer{\normalsize\par
+ \immediate\write\ans{}
+ \immediate\write\ans{\string\ansno\thechapter.\theexno:}
+ \copytoblankline}
+\def\copytoblankline{\begingroup\setupcopy\copyans}
+\def\setupcopy{\def\do##1{\catcode`##1=\other}\dospecials
+ \catcode`\|=\other \obeylines}
+{\obeylines \gdef\copyans#1
+ {\def\next{#1}%
+ \ifx\next\empty\let\next=\endgroup %
+ \else\immediate\write\ans{\next} \let\next=\copyans\fi\next}}
+
+\def\listanswers{\immediate\closeout\ans\input answers}
diff --git a/macros/latex209/contrib/misc/extradefs.tex b/macros/latex209/contrib/misc/extradefs.tex
new file mode 100644
index 0000000000..c7ac99e5ad
--- /dev/null
+++ b/macros/latex209/contrib/misc/extradefs.tex
@@ -0,0 +1,58 @@
+%
+% Supplied by Kent McPherson
+%
+\def\trademark{{\ooalign
+ {\tiny \hfill \raise .085ex\hbox{R}\hfill \crcr
+ \scriptsize \mathhexbox20D}}}
+%
+% Supplied by Kent McPherson
+%
+\newlength{\ulength}
+\newcommand{\uline}[2]{
+ \settowidth{\ulength}{#2}
+ \parbox{\ulength}{
+ {#2} \\ [-.75\baselineskip]
+ \rule{\ulength}{#1}}
+}
+%
+% Supplied by Kent McPherson
+%
+\newcount\@outlinedepth \@outlinedepth = 0
+
+\@definecounter{outlinei}
+\@definecounter{outlineii}
+\@definecounter{outlineiii}
+\@definecounter{outlineiv}
+
+\def\outline{\ifnum \@outlinedepth >3 \@toodeep\else
+ \advance\@outlinedepth \@ne
+ \edef\@outlinectr{outline\romannumeral\the\@outlinedepth}\list
+ {\csname label\@outlinectr\endcsname}{\usecounter
+ {\@outlinectr}\def\makelabel##1{\hss\llap{##1}}}\fi}
+
+\let\endoutline =\endlist
+
+\def\labeloutlinei{\Roman{outlinei}.}
+\def\theoutlinei{\Roman{outlinei}}
+\def\labeloutlineii{\Alph{outlineii}.}
+\def\theoutlineii{\Alph{outlineii}}
+\def\p@outlineii{\theoutlinei}
+\def\labeloutlineiii{\arabic{outlineiii}.}
+\def\theoutlineiii{\arabic{outlineiii}}
+\def\p@outlineiii{\theoutlinei(\theoutlineii)}
+\def\labeloutlineiv{\alph{outlineiv}.}
+\def\theoutlineiv{\alph{outlineiv}}
+\def\p@outlineiv{\p@outlineiii\theoutlineiii}
+%
+% Supplied by Kent McPherson
+%
+%
+% Produce a list of MIL documents
+\def\documentlabel#1{\def\\{\egroup\hbox\bgroup}
+ \raisebox{0pt}[2.5ex][0ex]{\vtop{\hbox\bgroup#1\egroup}} \hfill}
+\def\documentlist{\list{}{\labelwidth=10em
+ \advance\labelwidth\labelsep
+ \leftmargin\labelwidth \advance\leftmargin\labelsep
+ \advance\leftmargin 2\parindent
+ \let\makelabel\documentlabel \raggedright}}
+\let\enddocumentlist=\endlist
diff --git a/macros/latex209/contrib/misc/fancychapters.sty b/macros/latex209/contrib/misc/fancychapters.sty
new file mode 100644
index 0000000000..d9ae87b12e
--- /dev/null
+++ b/macros/latex209/contrib/misc/fancychapters.sty
@@ -0,0 +1,107 @@
+% $Id: fancychapters.sty,v 1.1 1992/07/10 07:40:27 joke Exp $
+%
+% A macro for fancy chapter headings for use with LaTeX 2.09
+%
+% Copyright (C) 1992 by Joerg Heitkoetter
+% Systems Analysis Group, University of Dortmund, Germany.
+% (joke@ls11.informatik.uni-dortmund.de).
+%
+% This is modified code from bk11.sty, I received from TeXpert
+% Gerd Neugebauer 8/7/92 (gerd@intellektik.informatik.th-darmstadt.de).
+% Thank's for the q&d hack, Gerd!
+%
+% Corrections of typos, \newdimensions, and everything, to handle
+% things relatively by joke.
+%
+% Enjoy!
+
+
+% DESCRIPTION
+%
+% This style option provides the macro \Chapter. It requires the style
+% book (report works as well :-)
+%
+% The first argument is typeset in a \parbox on the right top of the
+% chapter page, using an \emphasized font. The second argument is the
+% chapter's title.
+% An optional argument between, corresponds to the optional argument of
+% the \chapter command. Thus
+%
+% \Chapter{<quote>}{<title>} or \Chapter{<quote>}[<abbrev>]{<title>}
+%
+% are both valid constructs.
+%
+% Two new dimension counters, \fancychapwidth and \fancychapsep handle
+% the width of the quote's \parbox, and it's distance to the begin
+% of the `Chapter X' mark, respectively. See the EXAMPLE below to `grok'
+% how things work. Please note that the real distance between quote
+% and `Chapter X' mark is actually \fancychapsep + 50pt, as the latter
+% is always inserted, before a chapter starts. You could simply use
+% negative values (e.g. \fancychapsep=-50pt) to get around this, but
+% you shouldn't do, unless you're a fan of \uglychapters ;-)
+
+
+% Some new dimensions...
+\newdimen\fancychapwidth
+\newdimen\fancychapsep
+
+% ... and their defaults
+\fancychapwidth=0.5\textwidth
+\fancychapsep=10pt
+
+% the \Chapter ...
+\long\def\Chapter#1{\cleardoublepage
+ \thispagestyle{plain}%
+ \global\@topnum\z@
+
+ \@afterindentfalse
+ \hfill\parbox{\fancychapwidth}{\em #1} % put quotation in a box
+ % flushed right
+ \vspace{\fancychapsep}\par % add distance to chapter head
+ \secdef\@chapter\@schapter}
+
+% That's all folks.
+\endinput
+
+
+% EXAMPLE
+%
+% (1) uncomment the following %%% marked lines
+% (2) save them to a file
+% (3) LaTeX it!
+
+%%%\documentstyle[fancychapters]{report}
+%%%
+%%%\begin{document}
+%%%\Chapter{
+%%%{\scriptsize (Sung to the tune of ``The Impossible Dream'' from MAN OF
+LA MANCHA)}\\[5pt]
+%%% To code the impossible code, \\
+%%% To bring up a virgin machine, \\
+%%% To pop out of endless recursion, \\
+%%% To grok what appears on the screen, \\[5pt]
+%%% To right the unrightable bug, \\
+%%% To endlessly twiddle and thrash, \\
+%%% To mount the unmountable magtape, \\
+%%% To stop the unstoppable crash!
+%%%
+%%% \begin{center}
+%%% {\tt /usr/games/fortune}
+%%% \end{center}
+%%% }{Building Operating Systems}
+%%%
+%%%\fancychapwidth=2in
+%%%\fancychapsep=0pt
+%%%\Chapter{``Nobody feels as helpless as the owner of a sick goldfish.''
+%%%}{Building More Operating Systems}
+%%%
+%%%\fancychapwidth=0.75\textwidth
+%%%\fancychapsep=10pt
+%%%\Chapter{
+%%%``Parents of young organic life forms should be warned, that
+%%%towels can be harmful, if swallowed in large quantities.''
+%%%\\[5pt]
+%%%\rightline{{\rm --- Douglas Adams}}
+%%%}[No More]{Building No More Operating Systems}
+%%%
+%%%\end{document}
diff --git a/macros/latex209/contrib/misc/farticle.sty b/macros/latex209/contrib/misc/farticle.sty
new file mode 100644
index 0000000000..c8581d3b2e
--- /dev/null
+++ b/macros/latex209/contrib/misc/farticle.sty
@@ -0,0 +1,244 @@
+% This is FARTICLE.STY in text format, as of May 15, 1988.
+% article.sty 16-Mar-88
+% B.L. 06/12/88
+
+\typeout{Document Style 'farticle' <16 Mar 88>.}
+\typeout{Francisation de 'farticle'}
+
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+ \input sty(art1\@ptsize)\relax
+
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+ \newcounter{part}
+ \newcounter {section}
+ \newcounter{subsection}[section]
+ \newcounter{subsubsection}[subsection]
+ \newcounter{paragraph}[subsubsection]
+ \newcounter{subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Table des mati\`eres}
+\markboth{TABLE DES MATI\`ERES}{TABLE DES MATI\`ERES}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{Liste des Figures\@mkboth
+ {LISTE DES FIGURES}{LISTE DES FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{Liste des Tableaux\@mkboth
+ {LISTE DES TABLEAUX}{LISTE DES TABLEAUX}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\section*{Bibliographie\@mkboth
+ {BIBLIOGRAPHIE}{BIBLIOGRAPHIE}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\newcounter{theindex}
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$|{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize #1: #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Tableau \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$|{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em \begin{center}
+ {\LARGE \@title \par} \vskip 1.5em {\large \lineskip .5em
+\begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em {\large \@date} \end{center}
+ \par
+ \vskip 1.5em}
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\number\day\space\ifcase\month\or
+ Janvier\or F\'evrier\or Mars\or Avril\or Mai\or Juin\or
+ Juillet\or Ao\|ut\or Septembre\or Octobre\or Novembre\or D\'ecembre\fi
+ \space \number\year}
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
diff --git a/macros/latex209/contrib/misc/fixup.sty b/macros/latex209/contrib/misc/fixup.sty
new file mode 100644
index 0000000000..0c9ed889bb
--- /dev/null
+++ b/macros/latex209/contrib/misc/fixup.sty
@@ -0,0 +1,169 @@
+% FIXUP DOCUMENT STYLE OPTION
+% for LaTeX Version 2.09 <25 Jan 1988>
+% by John Hobby (hobby@research.att.com)
+%
+% If the fleqn style option is also used, it should precede this one.
+
+
+\hyphenation{bi-dif-fer-en-tial buzz-word data-path equi-vari-ant gauss-ian
+ hexa-dec-i-mal le-gendre mass-a-chu-setts non-smooth
+ qua-si-smooth stand-alone time-stamp wave-guide white-space}
+
+
+
+
+% Fix Plain's \bigl, \Bigl, etc. macros so that they try to scale with
+% LaTeX size changes. This uses the fact that \@setsize sets \ht\strutbox
+% to be 70% of the normal unstretched baselineskip.
+
+\def\big#1{{\hbox{$\left#1\vcenter to1.428\ht\strutbox{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vcenter to2.142\ht\strutbox{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vcenter to2.857\ht\strutbox{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vcenter to3.571\ht\strutbox{}\right.\n@space$}}}
+
+
+
+
+
+% Fix \sbox and \mbox so that they do not take the box contents as a parameter.
+% This makes environments that depend on catcode changes work inside
+
+\def\sbox#1{\setbox#1\hbox}
+\def\mbox{\leavevmode\hbox}
+
+
+
+
+
+
+
+
+% Apply \addpenalty's trick for not confusing \addvspace so that the \write
+% from \addtocontents or \addcontentsline will not mess up vertical spacing
+
+\def\addvstuff#1{%
+ \ifvmode\ifdim\lastskip=\z@ #1%
+ \else \@tempskipb\lastskip
+ \vskip -\lastskip #1\vskip\@tempskipb
+ \fi
+ \else #1\fi}
+
+\def\addpenalty#1{\ifvmode
+ \if@minipage\else\if@nobreak\else
+ \addvstuff{\penalty#1}%
+ \fi\fi
+ \else\@noitemerr\fi}
+
+\long\def\addtocontents#1#2{%
+ \if@filesw \begingroup
+ \let\label\@gobble \let\index\@gobble
+ \def\protect##1{\string\string\string##1\string\space\space}%
+ \edef\@tempa{\write \@auxout {\string\@writefile{#1}{#2}}}%
+ \addvstuff{\@tempa \if@nobreak \ifvmode\nobreak\fi\fi}%
+ \endgroup\fi}
+
+\def\addcontentsline#1#2#3{%
+ \if@filesw \begingroup
+ \let\label\@gobble \let\index\@gobble
+ \def\protect##1{\string\string\string##1\string\space\space}%
+ \@temptokena{\thepage}%
+ \edef\@tempa{\write \@auxout{\string\@writefile{#1}%
+ {\protect\contentsline{#2}{#3}{\the\@temptokena}}}}%
+ \addvstuff{\@tempa \if@nobreak \ifvmode\nobreak\fi\fi}%
+ \endgroup\fi}
+
+
+
+
+% Make floats use the trick from the minipage environment to avoid extraneous
+% space at the top. e.g., "\begin{figure} \begin{center}..."
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \hsize\columnwidth \@parboxrestore
+ \@minipagetrue
+ \everypar{\global\@minipagefalse\everypar{}}}
+
+
+
+
+% We now redefine the eqnarray environment to correct the space around
+% the operator. Since the fleqn document style option also redefines
+% this environment, we carefully check the previous definition before
+% making any changes. Any changes to the definition in LaTeX itself
+% or in the fleqn document style option will cause the `Warning: unable...'
+% message to appear. If this happens it will be necessary to update the
+% definitions of \@tempa and \@tempb below and incorperate the changes into
+% the new definitions of \eqnarray.
+
+
+% This is the current definition of \eqnarray for the fleqn document style
+% option:
+
+\def\@tempa{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$\halign to
+\linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+{##}$&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+&\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+\tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+
+% Here is the corresponding defintion from latex.tex:
+
+\def\@tempb{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+$$\halign to \displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+
+\ifx\eqnarray\@tempa % If the fleqn document style option is in effect
+
+ \def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+ \global\@eqnswtrue
+ \global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+ \abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+ \belowdisplayskip\abovedisplayskip
+ \belowdisplayshortskip\abovedisplayskip
+ \abovedisplayshortskip\abovedisplayskip
+ $$\halign to \linewidth\bgroup\hfil
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\else\ifx\eqnarray\@tempb % Else try the default eqnarray environment
+
+ \def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+ \global\@eqnswtrue
+ \global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+ $$\halign to \displaywidth\bgroup\hfil
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\else \typeout{Warning: Unable to fix unknown version of \string\enarray.}
+\fi\fi
+
+\def\@tempa{} % Free up TeX's memory
+\def\@tempb{}
diff --git a/macros/latex209/contrib/misc/fllater.sty b/macros/latex209/contrib/misc/fllater.sty
new file mode 100644
index 0000000000..22cb45944a
--- /dev/null
+++ b/macros/latex209/contrib/misc/fllater.sty
@@ -0,0 +1,55 @@
+\def\filename{fllater}
+
+
+\def\next{\@insertfalse \@textmin \textfraction\@colht
+ \@tempdima\@pageht \advance\@tempdima\@pagedp
+ \ifdim \@textmin >\@tempdima \@tempdima\@textmin \fi
+ \advance\@tempdima\ht\@currbox \advance\@tempdima\@maxsep
+ \ifdim\@colroom >\@tempdima
+ \ifnum\@colnum >\z@
+ \@currtype\count\@currbox \divide\@currtype\@xxxii
+ \multiply\@currtype\@xxxii
+ \@bitor\@currtype\@deferlist
+ \if@test\else
+ \@bitor\@currtype\@botlist
+ \if@test \@addtobot \else
+ \ifodd\count\@currbox
+ \global\advance\@colnum\m@ne
+ \@cons\@midlist\@currbox
+ \vskip\intextsep \box\@currbox
+ \penalty\interlinepenalty \vskip\intextsep
+ \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+ \outputpenalty\z@
+ \@inserttrue
+ \else \@addtotoporbot
+ \fi\fi\fi\fi\fi
+ \if@insert\else\@cons\@deferlist\@currbox\fi}
+
+\ifx\@addtocurcol\next
+\let\next\relax
+\def\@addtocurcol{\@insertfalse \@textmin \textfraction\@colht
+ \@tempdima\@pageht \advance\@tempdima\@pagedp
+ \ifdim \@textmin >\@tempdima \@tempdima\@textmin \fi
+ \advance\@tempdima\ht\@currbox \advance\@tempdima\@maxsep
+ \ifdim\@colroom >\@tempdima
+ \ifnum\@colnum >\z@
+ \@currtype\count\@currbox \divide\@currtype\@xxxii
+ \multiply\@currtype\@xxxii
+ \@bitor\@currtype\@deferlist
+ \if@test\else
+ \@bitor\@currtype\@botlist
+ \if@test \@addtobot \else
+ \ifodd\count\@currbox
+ \global\advance\@colnum\m@ne
+ \@cons\@midlist\@currbox
+ \vskip\intextsep \box\@currbox
+ \penalty\interlinepenalty \vskip\intextsep
+ \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+ \outputpenalty\z@
+ \@inserttrue
+ \else \@addtobot
+ \fi\fi\fi\fi\fi
+ \if@insert\else\@cons\@deferlist\@currbox\fi}
+\else
+\errmessage{Style \filename\space is out of date}
+\fi
diff --git a/macros/latex209/contrib/misc/floatnohead.sty b/macros/latex209/contrib/misc/floatnohead.sty
new file mode 100644
index 0000000000..7c29b5d915
--- /dev/null
+++ b/macros/latex209/contrib/misc/floatnohead.sty
@@ -0,0 +1,13 @@
+% if there are floats around
+% then set pagestyle to be empty
+% Original version posted to comp.text.tex Sebastian Rahtz
+% Modified by Don Hosek so that message is done with \message rather than
+% \typeout--this causes the message to appear when the page is output rather
+% than when it is processed.
+\def\@tryfcolumn #1{\global\@fcolmadefalse \xdef\@trylist{#1}\xdef\@failedlist
+ {}\begingroup \let\@elt\@xtryfc \@trylist \endgroup
+ \if@fcolmade
+ \message{Page with floats and nothing else}
+ \thispagestyle{empty}
+\@vtryfc #1
+\fi}
diff --git a/macros/latex209/contrib/misc/flowchart.sty b/macros/latex209/contrib/misc/flowchart.sty
new file mode 100644
index 0000000000..0df4442fef
--- /dev/null
+++ b/macros/latex209/contrib/misc/flowchart.sty
@@ -0,0 +1,185 @@
+%
+%From: chase@orc.olivetti.com (David Chase)
+%Subject: re: Flow charts in LaTeX
+%Date: Mon, 24 Oct 88 15:34:42 -0700
+%
+%Here is a tool that might be useful; you can use it to get lines
+%which bend (90 degrees) ending in arrows, and you can study it (ha ha)
+%to figure out how it might be extended to do a flow chart.
+%It is included within a program to test demonstrate it. It uses only
+%the LaTeX picture macros for graphics.
+%
+%Note the use of dirty tricks to turn points into dimensionless
+%numbers. There may be a better way, but I couldn't find it. My
+%difficulties with this lead me to believe that either
+%(1) TeX should really provide dimensionless real numbers
+%or
+%(2) Maybe LaTeX should use real lengths instead of dimensionless
+%numbers in the picture environment. I might get tired of always
+%attaching a dimension to things, but it would be LOTS easier to write
+%interesting macros.
+%
+%If anyone can point out to me an easier way to do this, I'd be happy
+%to hear it. People on TeXhax tried to help me a couple of years ago
+%with this, but nothing seemed to work.
+%
+%---------------- BEGINNING OF MACROS ----------------
+% First, a dirty trick
+
+{\catcode`p=12 \catcode`t=12 \gdef\bogusmacro#1pt{#1}}
+\let\getfactor=\bogusmacro
+\def\unpt#1{\expandafter\getfactor\the#1}
+
+% A macro to get us out of the iteration.
+
+\def\gobbleemup#1,#2,#3,{}
+
+% TWAI does all the work, and could probably be rewritten
+% to be much prettier.
+
+\def\twai#1,#2,#3,#4,#5,{
+% \typeout{Twisty arrow increment of |#1| |#2| |#3| |#4| |#5|}
+
+% Turn parameters into PT quantities so we can do simple arithmetic.
+ \xco#1pt\relax
+ \yco#2pt\relax
+ \len#4pt\relax
+ \advance\len -\firstshrink\relax
+% We get \taoval dynamically from our caller
+ \def\firstshrink{\taoval pt}\relax
+% Set things up for selection and iteration
+ \let\drawcommand=\line
+ \def\this{#3}
+ \def\xvec{0}
+ \def\yvec{0}
+ \let\next=\twai
+% Figure out which way we're going now
+ \if\this\uu
+ \addtolength{\yloc}{\len}
+ \def\yvec{1}
+ \corner=0
+ \else
+ \if\this\dd
+ \addtolength{\yloc}{-\len}
+ \def\yvec{-1}
+ \corner=1
+ \else
+ \if\this\ll
+ \addtolength{\xloc}{-\len}
+ \def\xvec{-1}
+ \corner=0
+ \else
+ \if\this\rr
+ \addtolength{\xloc}{\len}
+ \def\xvec{1}
+ \corner=2
+ \else
+ \if\this\ee
+ \relax
+ \else
+ \typeout{Twisty Arrow Increment--arg 2 (\this) not one of {udlre}}
+ \fi\fi\fi\fi\fi
+ \if#5\ee
+% \typeout{Ending vector}
+ \let\drawcommand=\twaiend
+ \advance\len\tarad
+ \fi
+% \typeout{New XL \unpt\xloc\space YL \unpt\yloc}
+% Here we emit the line or ending command
+ \put(\unpt\xco,\unpt\yco){\drawcommand(\xvec,\yvec){\unpt\len}}
+ % Figure out the next line
+ \if#5\uu
+ \advance\yloc \tarad
+ \advance\corner 1
+ \else
+ \if#5\dd
+ \advance\yloc -\tarad
+ \advance\corner 0
+ \else
+ \if#5\ll
+ \advance\xloc -\tarad
+ \advance\corner 2
+ \else
+ \if#5\rr
+ \advance\xloc \tarad
+ \advance\corner 0
+ \else
+ \if#5\ee
+ \let\next=\gobbleemup
+ \corner=4
+ \else
+ typeout{Twisty Arrow Increment--arg 5 (#5) not one of {udlre}}
+ \fi\fi\fi\fi\fi
+% \typeout{Corner center XL \unpt\xloc\space YL \unpt\yloc}
+ \ifcase\corner
+ % case 0 TL
+ \put(\unpt\xloc,\unpt\yloc){\oval(\taoval,\taoval)[tl]}
+ \or
+ % case 1 BL
+ \put(\unpt\xloc,\unpt\yloc){\oval(\taoval,\taoval)[bl]}
+ \or
+ % case 2 TR
+ \put(\unpt\xloc,\unpt\yloc){\oval(\taoval,\taoval)[tr]}
+ \or
+ % case 3 BR
+ \put(\unpt\xloc,\unpt\yloc){\oval(\taoval,\taoval)[br]}
+ \or
+ % case 4 END
+ \relax
+ \fi
+ \advance\xloc \xvec\tarad
+ \advance\yloc \yvec\tarad
+% \typeout{Final XL \unpt\xloc\space YL \unpt\yloc}
+% iterate or finish, depending upon value of 'next'
+ \next\unpt\xloc,\unpt\yloc,#5,
+ }
+\def\twistyarrowgen(#1,#2,#3,#4)#5{{
+ \def\uu{u}
+ \def\dd{d}
+ \def\ll{l}
+ \def\rr{r}
+ \def\ee{e}
+ \countdef\corner=255
+ \newskip{\xco}\newskip{\yco}\newskip{\len}
+ \newskip{\xloc}\newskip{\yloc}
+ \newskip{\tarad}\setlength{\tarad}{#3pt}
+ \newskip{\dummylen}
+ \let\twaiend=#4
+ \setlength{\dummylen}{\tarad}
+ \advance\dummylen \dummylen
+ \def\taoval{\unpt\dummylen}
+ \setlength{\xloc}{#1pt}\setlength{\yloc}{#2pt}
+ \def\firstshrink{\tarad}\relax
+ \twai #1,#2,#5,e,}}
+%
+\def\twistyarrow(#1,#2){\twistyarrowgen(#1,#2,2,\vector)}
+\def\twistyarrowrad(#1,#2,#3){\twistyarrowgen(#1,#2,#3,\vector)}
+%---------------- END OF MACROS ----------------
+%\documentstyle[flowchart]{article}
+%\begin{document}
+%\unitlength=.1in
+%\begin{center}
+%\begin{picture}(30,30)
+%\twistyarrowrad(0,0,1){%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11,r,11,d,10,l,10,%
+%u,11}
+%\end{picture}
+%\end{center}
+%\end{document}
diff --git a/macros/latex209/contrib/misc/font-nostalgia.sty b/macros/latex209/contrib/misc/font-nostalgia.sty
new file mode 100644
index 0000000000..a94c730073
--- /dev/null
+++ b/macros/latex209/contrib/misc/font-nostalgia.sty
@@ -0,0 +1,51 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Mario Wolczko",
+%%% version = "2",
+%%% date = "21 May 1992",
+%%% time = "20:55:58 BST",
+%%% filename = "font-nostalgia.sty",
+%%% address = "Dept of Computer Science
+%%% The University of Manchester
+%%% Oxford Road
+%%% Manchester M13 9PL
+%%% UK",
+%%% telephone = "+44-61-275-6146",
+%%% FAX = "+44-61-275-6236",
+%%% checksum = "47224 51 137 1962",
+%%% email = "mario@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, NFSS, fonts",
+%%% supported = "yes",
+%%% docstring = "For New Font Selection Scheme users --
+%%% provides commands with the pre-NFSS meanings of \rm, \bf, etc.",
+%%% }
+%%% ====================================================================
+
+\@ifundefined{extract@font}
+ {\let\oldrm\rm
+ \let\oldbf\bf
+ \let\oldtt\tt
+ \let\oldsf\sf
+ \let\oldsl\sl
+ \let\oldit\it
+ \let\oldsc\sc}
+ {\newcommand\oldrm{\reset@font}
+ \newcommand\oldtt{\family\ttdefault\series\default@series
+ \shape{n}\selectfont}
+ \newcommand\oldsf{\family\sfdefault\series\default@series
+ \shape{n}\selectfont}
+ \def\@psfmtname{pslplain}
+ \ifx\fmtname\@psfmtname % pslatex
+ \newcommand\oldbf{\family\rmdefault\series{b}%
+ \shape{n}\selectfont}
+ \else
+ \newcommand\oldbf{\family\rmdefault\series{bx}%
+ \shape{n}\selectfont}
+ \fi
+ \newcommand\oldit{\family\rmdefault\series\default@series
+ \shape{it}\selectfont}
+ \newcommand\oldsl{\family\rmdefault\series\default@series
+ \shape{sl}\selectfont}
+ \newcommand\oldsc{\family\rmdefault\series\default@series
+ \shape{sc}\selectfont}}
diff --git a/macros/latex209/contrib/misc/fontstyl.txt b/macros/latex209/contrib/misc/fontstyl.txt
new file mode 100644
index 0000000000..d81591fb3e
--- /dev/null
+++ b/macros/latex209/contrib/misc/fontstyl.txt
@@ -0,0 +1,27 @@
+Die drei Style-Files AMSFONTS.STY, EULER.STY und CYRFONT.STY machen
+Fonts, die standardm"a"sig nur unter AmSTeX verf"ugbar sind, auch
+unter LaTeX zug"anglich.
+
+AMSFONTS.STY bindet den erweiterten mathematischen Zeichensatz in
+LaTeX ein und zwar so, da"s einfach die ganzen in AmSTeX zus"atzlich
+definierten Macros auch in LaTeX verwendbar sind.
+
+EULER.STY macht ganz analog den Fraktur-Zeichensatz verf"ugbar.
+Dieser Zeichensatz wird mit den Macros \frak oder \goth verf"ugbar.
+Zu beachten ist aber, da"s dieser Zeichensatz nur f"ur den
+Mathematikmodus entworfen wurde und im normalen Textmodus praktisch
+nicht verwendbar ist.
+
+CYRFONTS.STY macht den cyrillischen Zeichsatz verf"ugbar, die
+entsprechenden Macros wurden aus der AmSTeX-Erweiterung "ubernommen.
+
+Die fr"uheren Versionen dieser files konnten nicht gleichzeitig
+verwendet werden. Verwendete man n"amlich EULER.STY nach
+AMSFONTS.STY, dann wurde ein Teil der AMSFONTS.STY-Definitionen
+wieder gel"oscht. Die neuen Versionen haben dieses Problem nicht, sie
+k"onnen also auch gemeinsam verwendet werden.
+
+Weiters wurde im file AMSFONTS.STY die Definition f"r das \AmSTeX Logo
+eingef"ugt.
+
+
diff --git a/macros/latex209/contrib/misc/format.sty b/macros/latex209/contrib/misc/format.sty
new file mode 100644
index 0000000000..f63725248e
--- /dev/null
+++ b/macros/latex209/contrib/misc/format.sty
@@ -0,0 +1,28 @@
+% Written by Charles Karney (Karney%PPC.MFENET@NMFECC.ARPA) 1986/04/29.
+% Format is a style option which allows the printing of floating point
+% numbers in fixed format. The argument is the counter to use. The
+% optional first argument if the power of ten to multiply counter by. The
+% default is 0. An integer is produced if power is nonnegative.
+% Otherwise, at least one digit appears before decimal point and exactly
+% -power digits after decimal point. Restriction: abs(power)<=6.
+%
+% Example: label an axis with -1.0, -0.8, -0.6, ... 1.0
+% \newcounter{axis} \setcounter{axis}{-10}
+% \multiput(...)(...){11}{\format[-1]{axis}\addtocounter{axis}{2}}
+
+\def\format{\@ifnextchar[{\format@}{\format@[0]}}
+\def\format@[#1]#2{\@tempcnta#1 \@format{\@nameuse{c@#2}}}
+\def\@format#1{\hbox{$
+ \ifnum #1<0 - #1-#1\fi % Here's where to insert a +
+ \ifnum\@tempcnta<0
+ \@tempcnta-\@tempcnta
+ \@tempcnta\ifcase\@tempcnta\or 10 \or 100 \or 1000 \or
+ 10000 \or 100000 \else 1000000 \fi
+ \@tempcntb#1 \divide\@tempcntb \@tempcnta
+ \number\@tempcntb . \multiply\@tempcntb \@tempcnta
+ \advance\@tempcntb -#1 \advance\@tempcnta -\@tempcntb
+ \expandafter\@gobble\number\@tempcnta
+ \else
+ \number #1
+ \ifcase\@tempcnta\or 0\or 00\or 000\or
+ 0000\or 00000\else 000000\fi\fi$}}
diff --git a/macros/latex209/contrib/misc/frenchponct.sty b/macros/latex209/contrib/misc/frenchponct.sty
new file mode 100644
index 0000000000..e8f5cb1904
--- /dev/null
+++ b/macros/latex209/contrib/misc/frenchponct.sty
@@ -0,0 +1,23 @@
+%%%%%%%%%%%%%%%%%%%%%%%% FRENCHPONCT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\catcode`\@=11
+% Origine brochcod.tex Y.Roy
+% Les caracteres de double ponctuation (!?;:) sont
+% saisis precedes d'un espace.
+\catcode`\;=\active
+\catcode`\:=\active
+\catcode`\!=\active
+\catcode`\?=\active
+\def;{\relax\ifhmode\ifdim\lastskip>\z@
+ \unskip\kern\fontdimen2\font \kern-1.4\fontdimen3\font
+ \fi\fi\string;}
+\def:{\relax\ifhmode\ifdim\lastskip>\z@
+ \unskip\penalty\@M\ \fi\fi\string:}
+\def!{\relax\ifhmode\ifdim\lastskip>\z@
+ \unskip\kern\fontdimen2\font
+ \kern-1.4\fontdimen3\font\fi\fi\string!}
+\def?{\relax\ifhmode\ifdim\lastskip>\z@
+ \unskip\kern\fontdimen2\font
+ \kern-1.4\fontdimen3\font\fi\fi\string?}
+
+\frenchspacing
+\catcode`\@=12
diff --git a/macros/latex209/contrib/misc/frenchquote.sty b/macros/latex209/contrib/misc/frenchquote.sty
new file mode 100644
index 0000000000..92523f022b
--- /dev/null
+++ b/macros/latex209/contrib/misc/frenchquote.sty
@@ -0,0 +1,5 @@
+\def\frlquote{\vbox{\offinterlineskip
+ \hbox{${\scriptscriptstyle\langle\!\langle}$}\kern-0.1pt}\hskip
+ -.6pt plus.3pt minus.2pt~}
+\def\frrquote{~\hskip -.6pt plus.3pt minus.2pt\vbox{\offinterlineskip
+ \hbox{$\scriptscriptstyle\rangle\!\rangle$}\kern-0.1pt}}
diff --git a/macros/latex209/contrib/misc/frontiers.sty b/macros/latex209/contrib/misc/frontiers.sty
new file mode 100644
index 0000000000..bfc8da8a72
--- /dev/null
+++ b/macros/latex209/contrib/misc/frontiers.sty
@@ -0,0 +1,203 @@
+% FRONTIERS DOCUMENT STYLE -- released 27 September 1988
+% for LaTeX version 2.09
+% Copyright (C) 1988 by Max Hailperin, except portions
+% Copyright (C) 1985 by Leslie Lamport, or otherwise indicated.
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+%
+% This is a document style option, for cammera-ready copy for the
+% Frontiers '88 symposium (and other IEEE conferences???), to be
+% used with the article document style and the proc document style option.
+% Note that it is will only work if your device can actually produce 11x14
+% output (e.g. an Imagen 3320 with ledger-size paper), or if you convince
+% your dvi driver to scale the output down (and then do an enlargement of
+% the output to send in) -- this results in lower quality, of course.
+%
+% WARNING: The visual design of this style is rather poor. The conference
+% specifications forced some of this, and as a result it didn't seem
+% worth worrying about the rest. Be forewarned however.
+
+\typeout{Document Style Option 'Frontiers' -- released 27 September 1988}
+
+% ****************************************
+% * KEYWORDS *
+% ****************************************
+
+% \keywords{foo, bar, baz} should go at the end of the abstract
+
+\def\keywords#1{\begin{list}{}{\setlength{\leftmargin}{0pt}\setlength
+{\rightmargin}{0pt}\setlength{\topsep}{\baselineskip}\setlength
+{\partopsep}{0pt}}\item[]Keywords: #1\end{list}}
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+\def\@fnsymbol#1{\ifcase#1\or *\or **\or +\or ++\else\@ctrerr\fi\relax}
+
+\def\thefootnote{\fnsymbol{footnote}}
+
+% ****************************************
+% * SECTIONING *
+% ****************************************
+% Slight modification of the geophysics.sty file,
+% Copyright (c) 1987 by Stephen Gildea
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% Headings:
+% for principal heading use \section
+% for lower rank heading use \subsection
+% for still lower rank heading use \subsubsection
+\setcounter{secnumdepth}{0}
+
+% \section is tricky because we want to both support \section* and have
+% the section title uppercased.
+\def\section{\secdef\@sectionb\@sections}
+\def\@sectionb[#1]#2{\@sections{#2}}
+\def\@sections#1{\@startsection
+ {section}{1}{\z@}{-3.5ex plus -1ex minus -.2ex}{2.3ex plus .2ex}{\Large
+\bf}{\uppercase{#1}}}
+
+% the below is modeled on the above, plus the paragraph def from art10.doc
+\def\subsubsection{\secdef\@subsubsectionb\@subsubsections}
+\def\@subsubsectionb[#1]#2{\@subsubsections{#2}}
+\def\@subsubsections#1{\@startsection
+ {subsubsection}{3}{\z@}{3.25ex plus 1ex minus .2ex}{-1sp}{\normalsize
+ \bf}{#1---}}
+
+% the below is less closely modeled on the geophysical stuff, plus art10.doc
+\def\subsection{\secdef\@subsectionb\@subsections}
+\def\@subsectionb[#1]#2{\@subsections{#2}}
+\def\@subsections#1{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}{#1}}
+
+% in case people nest more deeply than allowed --- perhaps should be error
+\def\paragraph{\subsubsection}
+\def\subparagraph{\subsubsection}
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Lamport claims that for some unspecified device(s) dimensions
+% shrink by about 2 percent.
+
+% SIDE MARGINS:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -48pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 36pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 12pt % Height of box containing running foot.
+\footskip 150pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 11.55in % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 9in % Width of text line.
+ % For two-column mode:
+\columnsep 1cm % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page number is printed in the top center, in "n of m" form.
+
+
+\def\@oddhead{\rm\hfil \thepage\ of \pageref{@last-page} \hfil}
+\def\@evenhead{\@oddhead}
+\def\@oddfoot{}\def\@evenfoot{\@oddfoot}
+
+% This is from latex.tex, except for-vvvvvvvvvvvvvvvvvv
+\def\enddocument{\@checkend{document}\label{@last-page}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+% ****************************************
+% * TITLE *
+% ****************************************
+%
+% This @maketitle is from proc.doc, except for the uppercasing
+\def\@maketitle{\vbox to 2.25in{\hsize\textwidth
+ \linewidth\hsize \vfil \centering
+ {\LARGE \uppercase\expandafter{\@title} \par} % TITLE set in \LARGE size.
+ \vskip 2em % Vertical space after title.
+ {\large \begin{tabular}[t]{c}\@author \end{tabular}\par}
+ \vfil}}
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+% Some fancy footwork to get Ref. vs. Refs. depending on how many citeations
+\newif\if@multicitesw
+\newif\if@multiciteauxsw
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@multiciteswfalse\@multiciteauxswfalse\@for\@citeb:=#2\do
+{\if@multiciteauxsw\@multiciteswtrue\fi\@multiciteauxswtrue}\@cite
+{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{, \penalty\@m}\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
+
+\def\@cite#1#2{{(Ref\if@multicitesw s\fi.\ {#1\if@tempswa , #2\fi})}}
+
+% This is the stuff to change the reference list to 1. instead of [1].
+% Except for the relevant minor differences, it is straight from article.doc.
+\def\@biblabel#1{#1.\hfill}
+
+\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {\arabic{enumi}.}{\settowidth\labelwidth{#1.}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+% ****************************************
+% * CAPTIONS *
+% ****************************************
+
+% This makes captions use a period rather than a colon. It is a minor
+% change to code from article.doc.
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1. #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ #1. #2\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
diff --git a/macros/latex209/contrib/misc/ftn.sty b/macros/latex209/contrib/misc/ftn.sty
new file mode 100644
index 0000000000..dde117846c
--- /dev/null
+++ b/macros/latex209/contrib/misc/ftn.sty
@@ -0,0 +1,46 @@
+% ftn.sty - footnotes inside tabular/array environments
+% Kresten Krab Thorup <krab@iesd.auc.dk> 1991-06-25
+
+\def\inner@ftn{%
+ \@ifnextchar[{\in@xftn}{\in@ftn{}}}
+
+\def\in@xftn[#1]#2{%
+ \in@ftn{[#1]}{#2}}
+
+\def\in@ftn#1#2{%
+ \@temptokena={\footnotetext#1{#2}}%
+ \@temptokenb=\expandafter{\ftn@list}%
+ \xdef\ftn@list{\the\@temptokenb\the\@temptokena}%
+ \footnotemark#1}
+
+\def\exec@ftn{%
+ \let\@temptokena=\ftn@list
+ \let\ftn@list=\empty
+ \@temptokena}
+
+\def\ftn#1{%
+ \expandafter\let\csname o@#1\expandafter\endcsname
+ \expandafter=\csname #1\endcsname
+ \expandafter\let\csname o@end#1\expandafter\endcsname
+ \expandafter=\csname end#1\endcsname
+ \expandafter\def\csname #1\endcsname{\bgroup
+ \let\footnote\inner@ftn\csname o@#1\endcsname}
+ \expandafter\def\csname end#1\endcsname{\csname o@end#1\endcsname
+ \exec@ftn\egroup}}
+
+%
+% INITIALIZING
+%
+
+\newtoks\@temptokenb
+\def\ftn@list{}
+
+% add more to this list...
+
+\ftn{tabular}
+\ftn{array}
+\ftn{minipage}
+\ftn{eqnarray}
+
+
+
diff --git a/macros/latex209/contrib/misc/fullpage.sty b/macros/latex209/contrib/misc/fullpage.sty
new file mode 100644
index 0000000000..67824e30ae
--- /dev/null
+++ b/macros/latex209/contrib/misc/fullpage.sty
@@ -0,0 +1,29 @@
+% This is FULLPAGE.STY by H.Partl, Version 2 as of 15 Dec 1988.
+% Document Style Option to fill the paper just like Plain TeX.
+
+\typeout{Style Option FULLPAGE Version 2 as of 15 Dec 1988}
+
+\topmargin 0pt
+\advance \topmargin by -\headheight
+\advance \topmargin by -\headsep
+
+\textheight 8.9in
+
+\oddsidemargin 0pt
+\evensidemargin \oddsidemargin
+\marginparwidth 0.5in
+
+\textwidth 6.5in
+
+
+% For users of A4 paper: The above values are suited for american 8.5x11in
+% paper. If your output driver performs a conversion for A4 paper, keep
+% those values. If your output driver conforms to the TeX standard (1in/1in),
+% then you should add the following commands to center the text on A4 paper:
+
+% \advance\hoffset by -3mm % A4 is narrower.
+% \advance\voffset by 8mm % A4 is taller.
+
+\endinput
+
+
diff --git a/macros/latex209/contrib/misc/gart11.sty b/macros/latex209/contrib/misc/gart11.sty
new file mode 100644
index 0000000000..953657f594
--- /dev/null
+++ b/macros/latex209/contrib/misc/gart11.sty
@@ -0,0 +1,109 @@
+% This is ART11.STY in text format, as of May 5, 1986.
+% art11.sty 23 Sep 85
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+\if@twoside \oddsidemargin 14pt \evensidemargin 14pt \marginparwidth 0pt
+\else \oddsidemargin 14pt \evensidemargin 14pt
+ \marginparwidth 0pt
+\fi
+\marginparsep 0pt
+ \topmargin -28pt
+\headheight 25pt \headsep 25pt \footheight 12pt \footskip 30pt
+
+\textheight 640pt \textwidth 425pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 7.7pt
+\skip\footins 10pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 9pt plus 1pt minus 1pt \parindent 0pt \topsep 0pt
+\partopsep 0pt \itemsep 0pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf Teil \thepart \par\nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 4.5pt plus 2pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/misc/garticle.sty b/macros/latex209/contrib/misc/garticle.sty
new file mode 100644
index 0000000000..ac03cc3f50
--- /dev/null
+++ b/macros/latex209/contrib/misc/garticle.sty
@@ -0,0 +1,233 @@
+% This is GARTICLE.STY in text format, as of June 8, 1987 (PA, TU Wien)
+% garticle.sty 5 Sep 8
+\typeout{Document Style `garticle'. Version vom 8. Juni 1987}
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+\input gart1\@ptsize.sty\relax
+
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Inhalt\markboth{INHALT}{INHALT}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{Abbildungsverzeichnis\markboth
+ {ABBILDUNGSVERZEICHNIS}{ABBILDUNGSVERZEICHNIS}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{Tabellenverzeichnis\markboth
+ {TABELLENVERZEICHNIS}{TABELLENVERZEICHNIS}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\section*{Literatur\markboth
+ {LITERATUR}{LITERATUR}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \markboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Abbildung \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Tabelle \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em \begin{center}
+ {\LARGE \@title \par} \vskip 1.5em {\large \lineskip .5em
+\begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em {\large \@date} \end{center}
+ \par
+ \vskip 1.5em}
+\def\abstract{\if@twocolumn
+\section*{Zusammenfassung}
+\else \small
+\begin{center}
+{\bf Zusammenfassung\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm
+\thepage\hfil \sl \leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox
+{}\sl \rightmark \hfil \rm\thepage}\def\sectionmark##1{\markright
+{\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\number\day . \ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi
+ \space\number\year}
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
diff --git a/macros/latex209/contrib/misc/geophysics.sty b/macros/latex209/contrib/misc/geophysics.sty
new file mode 100644
index 0000000000..21c39d887a
--- /dev/null
+++ b/macros/latex209/contrib/misc/geophysics.sty
@@ -0,0 +1,105 @@
+% geophysics.sty
+% For Geophysics, a publication of the Society of Exploration Geophysicists.
+%
+% This style option is designed to work with the article document
+% style of LaTeX version 2.09. Use
+% \documentstyle[geophysics]{article}
+%
+% The rules here are from "Instructions to authors" Geophysics January 1986.
+
+% 15 Jan 87
+
+% Copyright (c) 1987 by Stephen Gildea
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% If you make any improvements, I'd like to hear about them.
+
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Mass. 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+
+
+\oddsidemargin=.25in
+\topmargin=0in
+\textwidth=6in
+
+% set \textheight to about 8in. Must be multiple of \baselineskip.
+\ifcase \@ptsize
+ % 10 pt (\baselineskip=12pt)
+ \textheight=576pt
+\or % 11 pt (\baselineskip=13.6pt)
+ \textheight=584.8pt
+\or % 12 pt (\baselineskip=15pt)
+ \textheight=585pt
+\fi
+
+%everything is to be double spaced, and 1.5 looks double spaced.
+\def\baselinestretch{1.5}
+
+\parindent=1em
+\parskip=0in
+
+\def\fnum@figure{{\sc Fig.}\ \thefigure}
+
+% Use period instead of colon
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1.\ #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+\def\thebibliography#1{\section*{References\markboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}\@bibsetup}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+% Don't put the citation in an hbox.
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{\@citesep}\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+
+% undent first line of reference by using negative \itemindent.
+\def\@bibsetup{\itemindent=-\leftmargin}
+
+% Use a semicolon instead of a comma between multiple citations.
+\def\@citesep{; }
+
+% round parens instead of square brackets
+\def\@cite#1#2{({#1\if@tempswa , #2\fi})}
+
+% Labels should not be printed in References
+\def\@biblabel#1{\hfill}
+
+% Headings:
+% for principal heading use \section
+% for lower rank heading use \subsection
+% for still lower rank heading use \subsubsection
+\setcounter{secnumdepth}{0}
+
+% \section is tricky because we want to both support \section* and have
+% the section title uppercased.
+\def\section{\secdef\@sectionb\@sections}
+\def\@sectionb[#1]#2{\@sections{#2}}
+\def\@sections#1{\@startsection
+ {section}{1}{\z@}{14pt}{14pt}{\centering\bf}{\uppercase{#1}}}
+\def\subsection{\@startsection {subsection}{2}{\z@}{14pt}{14pt}{\bf}}
+\def\subsubsection#1{\par\addvspace{14pt}{\bf #1.---\/}\ignorespaces}
+
+\def\acknowledgments{\section{Acknowledgments}}
diff --git a/macros/latex209/contrib/misc/hackalloc.sty b/macros/latex209/contrib/misc/hackalloc.sty
new file mode 100644
index 0000000000..9c26b42d64
--- /dev/null
+++ b/macros/latex209/contrib/misc/hackalloc.sty
@@ -0,0 +1,17 @@
+% -*-LaTeX-*-
+% hackalloc.sty: make allocation local for LaTeX.
+% This redefines the allocation primitive so _all_ allocation becomes
+% block-local after this is loaded; no idea what the side-effects of this
+% may be. If it breaks, change \alloc@ to \localloc@, and either redefine
+% just what you need to use \alloc@, or define \locnew* for local
+% allocation, as in the commented lines.
+% NOTE: lying again... this doesn't work for inserts which are still
+% global.
+
+%\def\locnewdimen{\localloc@1\dimen\dimendef\insc@unt}
+%\def\localloc@#1#2#3#4#5{\advance\count1#1 by 1
+\def\alloc@#1#2#3#4#5{\advance\count1#1 by 1
+ \ch@ck#1#4#2% Check room
+ \allocationnumber=\count1#1
+ #3#5=\allocationnumber
+ \wlog{Locally \string#5=\string#2\the\allocationnumber}}
diff --git a/macros/latex209/contrib/misc/hackarray.sty b/macros/latex209/contrib/misc/hackarray.sty
new file mode 100644
index 0000000000..9dad530466
--- /dev/null
+++ b/macros/latex209/contrib/misc/hackarray.sty
@@ -0,0 +1,64 @@
+%From: bjnw@castle.ed.ac.uk (Brian Wylie)
+%Subject: \bbegin{eqnarray}{rllccl}
+%Keywords: equation+array != eqnarray
+
+%I've been looking for a successor to the LaTeX eqnarray environment
+%which allowed more control over the format and number of "columns", as
+%one might naturally expect to be specified by
+
+% \begin{eqnarray}{rlc|cl}
+% right & left & centre & vline & centre & left \label{eqn2a} \\
+% right & left & centre & vline & centre & left \label{eqn2b}
+% \end{eqnarray}
+
+%Having scoured Clarkson, etc, and failing to come find anything hopeful
+%I've finally plucked up the courage to have a go at it and see what I
+%could come up with (I don't really know any TeX but it tends to frighten
+%me when I look through latex.tex :-).
+
+%I've been pfaffing with it for a bit and haven't really managed to get
+%it completely together. I've included a copy of my attempts for your
+%perusal, and hope that you don't die laughing at the horrible nastiness
+%of this total abortion.
+
+%=========================>8 hackarray.sty 8<============================
+% hackarray.sty
+%
+% Bastard offspring of the eqnarray and tabular environments
+%
+% (Only tested with fleqn.sty, probably won't work with anything else)
+
+\newlength{\tmp}
+\setlength{\tmp}{\textwidth}
+\addtolength{\tmp}{-\mathindent}
+
+\newcommand{\num}{\stepcounter{equation}\makeatletter
+\let\@currentlabel=\theequation{\rm (\theequation)}}
+
+\newenvironment{hackarray}[1]{\begin{displaymath}%
+\begin{tabular*}{\tmp}{#1@{\extracolsep{\fill}}l@{\protect\num}}}%
+{\end{tabular*}\end{displaymath}}
+
+% Use like a tabular environment BUT include an extra column of &'s at end
+% (which aren't specified in the column format) or put a label there.
+% Also remember that all text is formatted in text mode NOT math mode !
+% e.g.
+% \begin{hackarray}{rlc|cl}
+% right & left & centre & vline & centre & left & \label{} \\
+% right & left & centre & vline & centre & left &
+% \end{hackarray}
+\endinput
+=========================>8 hackarray.sty 8<============================
+
+I realise that as a "eqnarray" substitute it's a bit lame to have each
+array element formatted in text mode (rather than math mode), however,
+for my immediate needs this wasn't a serious problem (most of it wasn't
+maths anyway) while there were other more worrying problems (like the
+need for the trailing null column).
+
+As you see, it has a few problems. These may be fixable, but I think
+I've done as much as I can. Any suggestions greatly appreciated,
+including any pointers to code which does things properly.
+
+ Slainte, "Since parallel programming tools exist,
+ Brian. MIMD machines are easy to use". -- Meiko 04/90
diff --git a/macros/latex209/contrib/misc/hangcaption.sty b/macros/latex209/contrib/misc/hangcaption.sty
new file mode 100644
index 0000000000..6a7e3fb5b6
--- /dev/null
+++ b/macros/latex209/contrib/misc/hangcaption.sty
@@ -0,0 +1,113 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% filename = "hangcaption.sty",
+%%% version = "2.00",
+%%% date = "27 August 1992",
+%%% time = "22:23:46 EDT",
+%%% author = "David M. Jones",
+%%% address = "MIT Laboratory for Computer Science
+%%% Room NE43-316
+%%% 545 Technology Square
+%%% Cambridge, MA 02139
+%%% USA",
+%%% telephone = "(617) 253-5936",
+%%% FAX = "(617) 253-3480",
+%%% checksum = "57880 113 520 5319",
+%%% email = "dmjones@theory.lcs.mit.edu",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, caption",
+%%% supported = "no",
+%%% abstract = "Defines a variant of the caption command to
+%%% produce captions with hanging
+%%% indentation.",
+%%% docstring = "This is the debugged version of a modified
+%%% caption macro, \hangcaption, to produce
+%%% captions with hanging indentation, like
+%%% this:
+%%%
+%%% Figure 1.1: XXXXX XXX XXXX XXXX XXX
+%%% XXX XXX XXX XXX XX XXX
+%%%
+%%% The length variable \captionwidth controls
+%%% how the caption is typeset. If the width
+%%% of the caption is less than \captionwidth,
+%%% the \hangcaption is typeset the same way a
+%%% short \caption would be (usually centered).
+%%% Otherwise, it is set as shown above, with a
+%%% total width equal to \captionwidth.
+%%% \captionwidth is set to \hsize normally,
+%%% but you may want to change it temporarily
+%%% to match the width of a \tabular*
+%%% environment, for example.
+%%%
+%%% \hangcaption is used in the same way as
+%%% \caption. To retain compatibility with
+%%% previous versions of this style, the
+%%% \hangcaption is also available under the
+%%% name \isucaption.
+%%%
+%%% I did not write this file. The original
+%%% author is unknown. However, I did fix a bug,
+%%% namely, I removed a superflous "^^" that was
+%%% causing one of the close braces to be
+%%% interpreted as an equals sign, thus messing
+%%% up the brace balancing. I also tacked an
+%%% "\endinput" on to the end of the file and
+%%% added this header, and incorporated a few
+%%% changes suggested by Harm Bakker, George
+%%% Greenwade, and Rainer Schoepf.
+%%%
+%%% v2.00 (27 Aug 1992): altered \numberline to
+%%% use \the... instead of \fnum@... (fix due to
+%%% Harm Bakker <bakker@cs.rulimburg.nl>).
+%%% Changed \isucaption to \hangcaption at George
+%%% Greenwade's <bed_gdg@SHSU.edu> suggestion.
+%%%
+%%% v1.03 (12 August 1992): minor changes to
+%%% header.
+%%%
+%%% v1.02 (12 August 1992): patches by Rainer
+%%% Schoepf <schoepf@sc.ZIB-Berlin.DE> to (a)
+%%% work around a bug in LaTeX and (b) measure
+%%% the caption correctly by including room for
+%%% the colon and the space.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+
+\newlength\captionwidth \captionwidth=\hsize
+
+\def\hangcaption{\refstepcounter\@captype\@dblarg{\@hangcaption\@captype}}
+
+\long\def\@hangcaption#1[#2]#3{%
+ \baselineskip 14.5\p@
+ \addcontentsline{\csname ext@#1\endcsname}{#1}%
+ {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
+ \par
+ \begingroup
+ \@parboxrestore
+ \setbox\@tempboxa\hbox{\csname fnum@#1\endcsname: #3}%
+ \ifdim \wd\@tempboxa > \captionwidth
+ \begingroup
+ \setbox\@tempboxa\hbox{\csname fnum@#1\endcsname: }%
+ \advance \captionwidth by -\wd\@tempboxa
+ \@makecaption{\csname fnum@#1\endcsname}%
+ {\ignorespaces{\protect\parbox[t]{\captionwidth}{\leavevmode#3}}}%
+ \endgroup
+ \else
+ \begingroup
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}%
+ \endgroup
+ \fi
+ \par\vspace{1.7ex}%
+ \endgroup}
+
+\let\isucaption\hangcaption
+
+\endinput
diff --git a/macros/latex209/contrib/misc/headerfooter.sty b/macros/latex209/contrib/misc/headerfooter.sty
new file mode 100644
index 0000000000..9ddac2cc6e
--- /dev/null
+++ b/macros/latex209/contrib/misc/headerfooter.sty
@@ -0,0 +1,75 @@
+% headerfooter.sty 13 Apr 89
+
+% Use with LaTeX version 2.09:
+% \documentstyle[headerfooter]{article}
+
+% Copyright (c) 1987 by Stephen Gildea
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% If you make any improvements, I'd like to hear about them.
+
+% Stephen Gildea
+% MIT Earth Resources Lab
+% Cambridge, Mass. 02139
+% mit-erl!gildea
+% gildea@erl.mit.edu
+
+% \pageheader{LEFT}{CENTER}{RIGHT}
+% \pagefooter{LEFT}{CENTER}{RIGHT}
+
+% There is no reason why these commands should not be available
+% to the user. Of course, I did fancy up the interface a bit.
+% By mit-erl!gildea 11 October 1986
+% minor changes 14 Oct 87 gildea
+% added \pageheaderlinetrue feature 9 Dec 88 gildea
+% added \pagefooterlinetrue feature 13 Apr 89 gildea
+
+% All of these commands take three arguments, which are printed at
+% the left, center, and right of each page. All three args must be
+% provided even if some of them are empty. The odd and even
+% variations are only useful if you are using the twoside option.
+
+% Example: \pagefooter{}{\thepage}{}
+
+% Say \pageheaderlinetrue if you want the header underlined.
+% Say \pagefooterlinetrue if you want a rule above the footer.
+
+\newif\ifpageheaderline \pageheaderlinefalse
+\newif\ifpagefooterline \pagefooterlinefalse
+
+\newdimen\pageheaderlineskip \pageheaderlineskip=1.5pt
+
+\newdimen\pagefooterlineskip \pagefooterlineskip=\pageheaderlineskip
+
+\def\@headerline#1#2#3{%
+ \ifpageheaderline
+ \vbox{\hbox to \textwidth{\rlap{#1}\hss{#2}\hss\llap{#3}}%
+ \vskip\pageheaderlineskip \hrule}%
+ \else{\rlap{#1}\hss{#2}\hss\llap{#3}}\fi}
+
+\def\@footerline#1#2#3{%
+ \ifpagefooterline
+ \vbox{\hrule \vskip\pagefooterlineskip
+ \hbox to \textwidth{\rlap{#1}\hss{#2}\hss\llap{#3}}}%
+ \else{\rlap{#1}\hss{#2}\hss\llap{#3}}\fi}
+
+\newcommand\oddpageheader[3]{\def\@oddhead{\@headerline{#1}{#2}{#3}}}
+
+\newcommand\evenpageheader[3]{\def\@evenhead{\@headerline{#1}{#2}{#3}}}
+
+\newcommand\oddpagefooter[3]{\def\@oddfoot{\@footerline{#1}{#2}{#3}}}
+
+\newcommand\evenpagefooter[3]{\def\@evenfoot{\@footerline{#1}{#2}{#3}}}
+
+\newcommand\pageheader[3]{%
+ \oddpageheader{#1}{#2}{#3}\evenpageheader{#1}{#2}{#3}}
+
+\newcommand\pagefooter[3]{%
+ \oddpagefooter{#1}{#2}{#3}\evenpagefooter{#1}{#2}{#3}}
diff --git a/macros/latex209/contrib/misc/hex.sty b/macros/latex209/contrib/misc/hex.sty
new file mode 100644
index 0000000000..123507c4cd
--- /dev/null
+++ b/macros/latex209/contrib/misc/hex.sty
@@ -0,0 +1,31 @@
+%% Save file as: HEX.STY Source: FILESERV@SHSU.BITNET
+%% From: domen@euler.crin.fr (Eric Domenjoud)
+%% Date: 7 Oct 91 14:07:20 GMT
+%% Organization: CRIN, Nancy, France
+
+%% \documentstyle[....,hex,....]{......}
+%%
+%% \hex{ctr} gives then the value of ctr in hexadecimal. If you want lowercase
+%% letters, just change A,B,C,D,E,F to lowercase in the definition below.
+
+%-------------------------------------------------------
+
+\newcount\@decnum
+\newcount\@digit
+\def\@hex#1{{\@decnum=#1
+ \ifnum\@decnum>15
+ \@digit=\@decnum
+ \divide\@decnum 16
+ \@hex\@decnum
+ \multiply\@decnum -16
+ \advance\@decnum\@digit
+ \fi
+ \ifnum\@decnum=10 A\else
+ \ifnum\@decnum=11 B\else
+ \ifnum\@decnum=12 C\else
+ \ifnum\@decnum=13 D\else
+ \ifnum\@decnum=14 E\else
+ \ifnum\@decnum=15 F\else
+ \number\@decnum\fi\fi\fi\fi\fi\fi}}
+
+\def\hex#1{\@hex{\nameuse{c@#1}}}
diff --git a/macros/latex209/contrib/misc/hndout.sty b/macros/latex209/contrib/misc/hndout.sty
new file mode 100644
index 0000000000..fed2d72235
--- /dev/null
+++ b/macros/latex209/contrib/misc/hndout.sty
@@ -0,0 +1,75 @@
+% Plymouth Polytechnic Computing Service - HANDOUT Document style
+% Jon Warbrick January 1988
+
+% Copyright (C) Jon Warbrick and Plymouth Polytechnic 1989
+% Permission is granted to reproduce the document in any way providing
+% that it is distributed for free, except for any reasonable charges for
+% printing, distribution, staff time, etc. Direct commercial
+% exploitation is not permitted. Extracts may be made from this
+% document providing an acknolwledgment of the original source is
+% maintained.
+
+% This option re-defines the \maketitle command to generate a standard
+% Computing Service handout banner. It currently only works for an
+% 11pt article (though I may fix it oneday)
+
+% Just modify the textwidth a bit to center the text on the page
+
+\setlength{\textwidth}{6.5in}
+\setlength{\oddsidemargin}{0in}
+\setlength{\evensidemargin}{0in}
+
+% The title is made up of information supplied by the \title, \author
+% and \date commands, along with an extra command \docnumber. The
+% date defaults to the current month and year.
+
+\def\docnumber#1{\gdef\@docnumber{#1}}
+\gdef\@docnumber{X99.99--999}
+\gdef\@title{There and Back Again}
+\gdef\@author{Bilbo Baggins}
+\def\@date{\ifcase\month\or January\or February\or March\or April\or
+ May\or June\or July\or August\or September\or October\or
+ November\or December\fi\space\number\year}
+
+% Commented maketitle to avoid use of postscript printer Yin Kean.
+% \def\maketitle{
+% \begin{picture}(0,100)(55,-8)
+% \put(0,36){\framebox(214,84){Computing Service Logo}} % dummy logo
+% \put(0,120){\special{include TeX>inputs>hologo.ps}}
+% \put(234,112){\parbox[t]{234pt}{\centering\Large\bf\@title}}
+% \put(234,60){\parbox[t]{234pt}{\centering
+% \@docnumber \\\relax \@date \\[1em] \@author}}
+% \put(0,0){\line(1,0){468}}
+% \end{picture}
+% \let\maketitle\relax
+% \gdef\@author{}\gdef\@title{}\gdef\@docnumber{}\gdef\@date{}
+% }
+
+% Technical documents don't look very good with indented paragraphs,
+% so set parindent to zero, and increse parskip. To do this job properly,
+% the space above and below all of the list making enviroments should be
+% reduced by this ammount as well - again I may do this someday.
+
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{7pt plus 2pt minus 1pt}
+
+% Some extra help with including examples of computer input/output is rather
+% handy. Here is a definition of the alltt enviroment (like verbatim, but
+% still recognises \, { and }) and example (like alltt, but indented)
+
+\def\docspecials{\do\ \do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+
+\def\alltt{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \tt \catcode``=13 \@noligs \let\do\@makeother \docspecials
+ \frenchspacing\@vobeyspaces}
+
+\let\endalltt=\endtrivlist
+
+\newenvironment{example}%
+ {\nopagebreak[3]\begin{quote}\begin{alltt}}%
+ {\end{alltt}\end{quote}}
+
diff --git a/macros/latex209/contrib/misc/hvdashln.sty b/macros/latex209/contrib/misc/hvdashln.sty
new file mode 100644
index 0000000000..33e1e8ba57
--- /dev/null
+++ b/macros/latex209/contrib/misc/hvdashln.sty
@@ -0,0 +1,50 @@
+% hvdashln.sty : h(orizontal and )v(ertical )dash(ed )l(i)n(e).sty
+% Copyright (C) 1993, 1999 Hiroshi Nakashima
+% (Kyoto Univ. / Toyohashi Univ. of Tech.)
+% (nakasima@tutics.tut.ac.jp)
+%
+% This program can be redistributed and/or modified under the terms of the
+% LaTeX Project Public License Distributed from CTAN archives in directory
+% macros/latex/base/lppl.txt; either version 1 of the License, or any later
+% version.
+%
+% \hdashline is a dashed counterpart of \hline and
+% \vdashline is a dashed counterpart of \vline of LaTeX's "array" environment.
+%
+% The following parameters are available to control the shape of dashed lines.
+%
+% \hdashlinewidth : length of each dash segment
+% \hdashlinegap : amout of each gap between dash segments
+%
+% Both parameters have a common default value, 4 pt, and thus the shape of a
+% horizontal dashed line will be the following.
+%
+% 4pt
+% |--- --- --- ---|
+% 4pt
+%
+% NOTE:
+% \vdashline will be broken if an array contains tall rows. This problem
+% is fixed in the advanced style named "arydshln" written by the author,
+% which also has new features such as allowing `:' to specify vertical
+% dashed line in preamble and \cdashline being a counterpart of \cline.
+%
+\newcount\hdl@columns \let\hdl@mkpream\@mkpream
+\def\@mkpream{\hdl@columns\@ne \hdl@mkpream}
+\def\@addamp{\if@firstamp\@firstampfalse \else\edef\@preamble{\@preamble
+&}\advance\hdl@columns\@ne\fi}
+\def\hdashline{\multispan{\hdl@columns}\unskip
+\vrule\@height\arrayrulewidth\@width\hdashlinewidth \hskip.5\hdashlinegap
+\xleaders\hbox{\hskip.5\hdashlinegap
+\vrule\@height\arrayrulewidth\@width\hdashlinewidth
+\hskip.5\hdashlinegap}\hfill \hskip.5\hdashlinegap
+\vrule\@height\arrayrulewidth\@width\hdashlinewidth\cr
+\noalign{\vskip-\arrayrulewidth}} \newdimen\hdashlinewidth
+\hdashlinewidth4pt % \newdimen\hdashlinegap \hdashlinegap4pt %
+\def\vdashline{\hskip\arraycolsep \@tempdima\ht\@arstrutbox
+\advance\@tempdima\dp\@arstrutbox \lower\dp\@arstrutbox\vbox to\@tempdima{
+\hrule\@height.5\hdashlinewidth\@width\arrayrulewidth \vskip.5\hdashlinegap
+\xleaders\vbox{\vskip.5\hdashlinegap
+\hrule\@height\hdashlinewidth\@width\arrayrulewidth
+\vskip.5\hdashlinegap}\vfil \vskip.5\hdashlinegap
+\hrule\@height.5\hdashlinewidth\@width\arrayrulewidth}% \hskip\arraycolsep}
diff --git a/macros/latex209/contrib/misc/icassp.sty b/macros/latex209/contrib/misc/icassp.sty
new file mode 100644
index 0000000000..f7d93513a3
--- /dev/null
+++ b/macros/latex209/contrib/misc/icassp.sty
@@ -0,0 +1,231 @@
+% ICASSP DOCUMENT STYLE -- released 15 December 1988
+% for LaTeX version 2.09
+% Copyright (C) 1988 bt John Vlontzos, except portions
+% Copyright (C) 1988 by Max Hailperin, except portions
+% Copyright (C) 1985 by Leslie Lamport, or otherwise indicated.
+% Modified by John Vlontzos
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+%
+% This is a document style option, for cammera-ready copy for the
+% ICASSP '89 conference (and other IEEE conferences???), to be
+% used with the article document style and the proc document style option.
+%
+% WARNING: The visual design of this style is rather poor. The conference
+% specifications forced some of this, and as a result it didn't seem
+% worth worrying about the rest. Be forewarned however.
+
+\typeout{Document Style Option 'icassp' -- released 13 December 1988}
+% ************************************************************************
+% BRIEF DESCRIPTION
+% ************************************************************************
+% * This is a documentstyle that will print your paper
+% in a form suitable for ICASSP or other IEEE conferences (hopefully)
+% * Just take your {article} file and make a few changes detailed
+% below
+% * All columns set to 11truecm
+% * The first two pages are 10in long and cover the first mat
+% * The title is centered on a wide page so it should be printed in
+% landscape mode
+% * If there is only one author use the standard \author macro from {article}
+% if there are 2 authors, use the new macro \authors described below
+% * A macro for thanks is provided (\thanksu{thanks text})
+% * The second page MUST be identified by placing the macro \thisissecondpage
+% anywhere in the second page
+% * The second and subsequent mats are broken into 4 pages each 6.44in long
+% * Section titles are centered, Capitalized and numbered
+% (if you don't want numbering just set \secnumdepth{0})
+% * Sub(sub)sections are lowercase and boldface, flush left
+% * Some notes are included in the macro definitions to make use more clear
+% ****************************************
+% * KEYWORDS *
+% ****************************************
+
+% \keywords{foo, bar, baz} should go at the end of the abstract
+
+\def\keywords#1{\begin{list}{}{\setlength{\leftmargin}{0pt}\setlength
+{\rightmargin}{0pt}\setlength{\topsep}{\baselineskip}\setlength
+{\partopsep}{0pt}}\item[]Keywords: #1\end{list}}
+
+
+% ****************************************
+% * SECTIONING *
+% ****************************************
+% Slight modification of the geophysics.sty file,
+% Copyright (c) 1987 by Stephen Gildea
+% Slight modification of above by John Vlontzos
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% Headings:
+% for principal heading use \section
+% for lower rank heading use \subsection
+% for still lower rank heading use \subsubsection
+\setcounter{secnumdepth}{3}
+%If you don't want section numbers, set secnumdepth to 0
+% \section is tricky because we want to both support \section* and have
+% the section title uppercased.
+\def\section #1{\begin{center} \sectionc{#1} \end{center}}
+\def\sectionc{\secdef\@sectionb\@sections}
+\def\@sectionb[#1]#2{\@sections{#2}}
+\def\@sections#1{\@startsection
+ {section}{1}{\z@}{-3.5ex plus -1ex minus -.2ex}{2.3ex plus .2ex}{\large
+ \bf}{\uppercase{#1}}}
+
+% the below is modeled on the above, plus the paragraph def from art10.doc
+\def\subsubsection{\secdef\@subsubsectionb\@subsubsections}
+\def\@subsubsectionb[#1]#2{\@subsubsections{#2}}
+\def\@subsubsections#1{\@startsection
+ {subsubsection}{3}{\z@}{3.25ex plus 1ex minus .2ex}{-1sp}{\normalsize
+ \bf}{#1---}}
+
+% the below is less closely modeled on the geophysical stuff, plus art10.doc
+\def\subsection{\secdef\@subsectionb\@subsections}
+\def\@subsectionb[#1]#2{\@subsections{#2}}
+\def\@subsections#1{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}{#1}}
+
+% in case people nest more deeply than allowed --- perhaps should be error
+\def\paragraph{\subsubsection}
+\def\subparagraph{\subsubsection}
+
+% *************************************************
+% Abstract definition (centered and capitalized)
+% dont forget to \begin{abstract}...\end{abstract}
+% *************************************************
+
+\def\abstract{\if@twocolumn
+\section*{ABSTRACT}
+\else \small
+\begin{center}
+{\bf ABSTRACT\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi\vspace{.1truein}}
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page. Lamport claims that for some unspecified device(s) dimensions
+% shrink by about 2 percent.
+
+% SIDE MARGINS:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin -48truept % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 0truept % Height of box containing running head.
+\headsep 10truept % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 0pt % Height of box containing running foot.
+\footskip 300pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+\textheight 10truein % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 10.5truecm % Width of text line.
+ % For two-column mode:
+\columnsep .92truecm % Space between columns
+\columnseprule 0truept % Width of rule between columns.
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page number is printed in the top center, in "n of m" form.
+
+
+\def\@oddhead{\rm\hfil \thepage\ of \pageref{@last-page} \hfil}
+\def\@evenhead{\@oddhead}
+\def\@oddfoot{}\def\@evenfoot{\@oddfoot}
+
+% This is from latex.tex, except for-vvvvvvvvvvvvvvvvvv
+\def\enddocument{\@checkend{document}\label{@last-page}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+% ****************************************
+% * TITLE *
+% ****************************************
+%
+% This @maketitle is from proc.doc, except for the uppercasing
+% ****************************************
+%AUTHORS is a macro for more than one authors
+% used as \authors {name 1\\ dept1 \\ univ1}{name 2 \\ dept2 \\ univ2}
+% ***************************************
+\def\authors#1#2{\hbox to \hsize{\@tablebox{#1}\hfil\@tablebox{#2}}}
+
+\def\@tablebox#1{\begin{tabular}[t]{@{}l@{}}#1\end{tabular}}
+% **************************************
+%THANKSU is a macro that replacing \thanks.
+%It permits placing of the \thanks in ANY page
+%useful when the first printed page is smaller than the mat provided.
+% just define your footnote using \thanksu and then place it
+% in the appropriate page by using \putthanks anywhere in the page.
+% ****************************************
+\def\thanksu #1{\textwidth 11truecm \newsavebox{\thankw}\savebox
+ {\thankw}[11cm]{\parbox{10.5truecm}{#1}}}
+\def\putthanks{\footnotetext{\leftskip=-25truept \rightskip=25truept
+ \usebox{\thankw}\par}}
+\def\@maketitle{\textwidth 32.8truecm \vbox to 5.9cm{\hsize\textwidth
+ \linewidth\hsize \vfil \centering {\Large \bf \uppercase
+ \expandafter{\@title} \par} % TITLE set in \Large size.
+ \vskip .4cm % Vertical space after title.
+ {\large \begin{tabular}[t]{c}\@author \end{tabular}\par}
+ \vfil}\newpage\textwidth 11truecm}
+% ****************************************
+% Since the first two pages can be printed in a way that
+% covers the whole mat, mark the second page by
+% placing \thisissecondpage ANYWHERE in the second page
+% ***************************************
+\def\thisissecondpage{\textheight 6.44truein}
+% ****************************************
+% * CAPTIONS *
+% ****************************************
+
+% This makes captions use a period rather than a colon. It is a minor
+% change to code from article.doc.
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1. #2}
+ \ifdim \wd\@tempboxa >\textwidth % IF longer than one line:
+ #1. #2\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\textwidth{\hfil\box\@tempboxa\hfil}
+ \fi}
+% *****************************************
+% the following macro produces the references heading in capitals
+% and without a section number
+% *****************************************
+\def\thebibliography#1{\setcounter{secnumdepth}{0}\sectionc*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
diff --git a/macros/latex209/contrib/misc/ieeconf.sty b/macros/latex209/contrib/misc/ieeconf.sty
new file mode 100644
index 0000000000..4e6500e027
--- /dev/null
+++ b/macros/latex209/contrib/misc/ieeconf.sty
@@ -0,0 +1,102 @@
+% --------------------------------------------------------------------------
+% I E E C O N F -- style option for IEE Conference proceedings
+% --------------------------------------------------------------------------
+% Version 1.00--0 Adrian F Clark <alien@uk.ac.essex> 20-Aug-1991
+% --------------------------------------------------------------------------
+
+\typeout{IEE Conference Proceedings style v1.00--0 20-Aug-1991}
+
+
+% Page dimensions.
+
+\@twosidetrue % two-sided document
+\twocolumn % two columns of type
+\sloppy % make those columns justify
+\columnsep 11mm % space between columns
+\columnwidth 80mm % width of each column
+\parindent 15pt % paragraph indent
+\parskip 10pt plus 1pt minus 1pt % paragraph skip
+\baselineskip 11pt plus 0.1pt minus 0.1pt % baseline skip
+
+\textheight 254mm % height of text on a page
+\textwidth 171mm % total width of a page
+\oddsidemargin -5mm % shift the page leftwards
+\evensidemargin -5mm % shift the page leftwards
+\topmargin -2mm % shift the page upwards
+\headheight 0pt % no running heads...
+\headsep 0pt % ...so no separation from text
+\marginparwidth 48pt % don't use marginal notes...
+\marginparsep 10pt % ...in conference proceedings
+
+
+% Additional macro, to output the authors' affiliation. Make it
+% default to Essex (since that's where I am!).
+
+\def\affiliation#1{\def\@affiliation{#1}}
+\def\@affiliation{University of Essex, UK}
+
+
+% Macro for outputting the title of the paper, resetting macros and
+% counters, etc.
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \twocolumn[\@maketitle]
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\relax
+ \gdef\@affiliation{}\let\thanks\relax}
+
+
+% Output the actual title, author and affiliation according to the IEE
+% guidelines.
+
+\def\@maketitle{\vbox to 44mm{\hsize\textwidth
+ \linewidth\hsize \vfil \raggedright
+ {\large \uppercase\expandafter{\@title} \par}
+ \vskip -\parskip\vskip 6mm\relax
+ \noindent\@author\par
+ \vskip -\parskip\vskip 9mm\relax
+ \noindent\@affiliation\par
+ \vskip -\parskip\vskip 15mm\relax}}
+
+
+% Miscellania
+
+\def\copyrightspace{\footnotetext[0]{\mbox{}\vrule height 97pt width 0pt}}
+
+\def\abstract{\section*{Abstract}}
+\def\endabstract{\par}
+
+\pagestyle{empty} % no page numbers
+
+
+% Sectioning macros, since the default ones are too big for this page
+% layout (we also ensure they're set ragged-right).
+% These are modified from the definitions in art10.sty.
+
+% (Arguments to \@startsection: name level indent beforeskip afterskip
+% style.)
+
+\def\section{\@startsection {section}{1}{\z@}{-1.5ex plus -.5ex minus
+ -.2ex}{1ex plus .1ex}{\large\bf\raggedright}}
+
+\def\subsection{\@startsection{subsection}{2}{\z@}{-1.25ex plus -.5ex minus
+ -.2ex}{0.8ex plus .1ex}{\normalsize\bf\raggedright}}
+
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-1.25ex plus
+ -.5ex minus -.2ex}{0.8ex plus .1ex}{\normalsize\bf\raggedright}}
+
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{1.25ex plus .5ex minus
+ .2ex}{-1em}{\normalsize\bf\raggedright}}
+
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{1.25ex plus .5ex minus
+ .2ex}{-1em}{\normalsize\bf\raggedright}}
+
+% End of ieeconf.sty.
diff --git a/macros/latex209/contrib/misc/ieeeconf.sty b/macros/latex209/contrib/misc/ieeeconf.sty
new file mode 100644
index 0000000000..71425fb62a
--- /dev/null
+++ b/macros/latex209/contrib/misc/ieeeconf.sty
@@ -0,0 +1,56 @@
+% ----------------------------------------------------------------------
+% I E E E C O N F -- style option for IEEE Conferences, including the
+% International Conferences on Pattern Recognition
+% ----------------------------------------------------------------------
+% Based on the template produced by Matthew Ward of Worcester
+% Polytechnic Institute.
+% Version 1.00--0 Adrian F. Clark <alien@essex.ac.uk> 17-Apr-1992
+% ----------------------------------------------------------------------
+
+\typeout{IEEE Conference Proceedings style v1.00--0 17-Apr-1992}
+
+
+% ----------------------------------------------------------------------
+% Other style files.
+% ----------------------------------------------------------------------
+
+\input twocolumn.sty
+
+% ----------------------------------------------------------------------
+% Page dimensions.
+% ----------------------------------------------------------------------
+
+\setlength{\textheight}{8.75in}
+\setlength{\columnsep}{2.0pc}
+\setlength{\textwidth}{6.8in}
+\setlength{\footheight}{0pt}
+\setlength{\topmargin}{0.25in}
+\setlength{\headheight}{0pt}
+\setlength{\headsep}{0pt}
+\setlength{\oddsidemargin}{-.19in}
+\setlength{\parindent}{1pc}
+
+% ----------------------------------------------------------------------
+% Fiddle about with the appearence of the page, etc.
+% ----------------------------------------------------------------------
+
+\pagestyle{empty}
+
+\def\title#1{\gdef\@title{\Large\bf#1}}
+\date{}
+\def\abstract{\thispagestyle{empty}\relax
+ \subsection*{\centering Abstract}\bgroup\em}
+\def\endabstract{\egroup}
+
+\def\subsize{\@setsize\subsize{12pt}\xipt\@xipt}
+
+\def\section{\@startsection{section}{1}{\z@}{2ex plus 1ex minus
+ .2ex}{1ex plus .2ex}{\large\bf}}
+
+\def\subsection{\@startsection{subsection}{2}{\z@}{1ex plus 1ex}
+ {.2ex plus .2ex}{\subsize\bf}}
+
+% ----------------------------------------------------------------------
+% End of ieeeconf.sty.
+% ----------------------------------------------------------------------
+
diff --git a/macros/latex209/contrib/misc/ifthen-addi.sty b/macros/latex209/contrib/misc/ifthen-addi.sty
new file mode 100644
index 0000000000..c7092375a3
--- /dev/null
+++ b/macros/latex209/contrib/misc/ifthen-addi.sty
@@ -0,0 +1,22 @@
+%
+% small extension for ifthen style -- TeX \newif's
+%
+% e.g., \ifthen{\boolean{@twoside}}{}{}
+%
+\def\boolean#1{1=1\fi\noexpand\csname if#1\endcsname\def\noexpand\@tempa{1=1}%
+\else\def\noexpand\@tempa{1=0}\fi\ifnum\noexpand\@tempa}
+%
+%
+%
+% \ifthenelse{\dimenequal{10pt}{20pt}}{}{} like #1 = #2
+% \ifthenelse{\dimenless{10pt}{20pt}}{}{} like #1 < #2
+% \ifthenelse{\dimengreater{10pt}{20pt}}{}{} like #1 > #2
+%
+\def\dimenequal#1#2{1=1\fi\noexpand\ifdim #1=#2 \def\noexpand\@tempa{1=1}
+\else\def\noexpand\@tempa{1=0}\fi\ifnum\noexpand\@tempa}
+%
+\def\dimenless#1#2{1=1\fi\noexpand\ifdim #1<#2 \def\noexpand\@tempa{1=1}
+\else\def\noexpand\@tempa{1=0}\fi\ifnum\noexpand\@tempa}
+%
+\def\dimengreater#1#2{1=1\fi\noexpand\ifdim #1>#2 \def\noexpand\@tempa{1=1}
+\else\def\noexpand\@tempa{1=0}\fi\ifnum\noexpand\@tempa}
diff --git a/macros/latex209/contrib/misc/ifthenpl.sty b/macros/latex209/contrib/misc/ifthenpl.sty
new file mode 100644
index 0000000000..c7092375a3
--- /dev/null
+++ b/macros/latex209/contrib/misc/ifthenpl.sty
@@ -0,0 +1,22 @@
+%
+% small extension for ifthen style -- TeX \newif's
+%
+% e.g., \ifthen{\boolean{@twoside}}{}{}
+%
+\def\boolean#1{1=1\fi\noexpand\csname if#1\endcsname\def\noexpand\@tempa{1=1}%
+\else\def\noexpand\@tempa{1=0}\fi\ifnum\noexpand\@tempa}
+%
+%
+%
+% \ifthenelse{\dimenequal{10pt}{20pt}}{}{} like #1 = #2
+% \ifthenelse{\dimenless{10pt}{20pt}}{}{} like #1 < #2
+% \ifthenelse{\dimengreater{10pt}{20pt}}{}{} like #1 > #2
+%
+\def\dimenequal#1#2{1=1\fi\noexpand\ifdim #1=#2 \def\noexpand\@tempa{1=1}
+\else\def\noexpand\@tempa{1=0}\fi\ifnum\noexpand\@tempa}
+%
+\def\dimenless#1#2{1=1\fi\noexpand\ifdim #1<#2 \def\noexpand\@tempa{1=1}
+\else\def\noexpand\@tempa{1=0}\fi\ifnum\noexpand\@tempa}
+%
+\def\dimengreater#1#2{1=1\fi\noexpand\ifdim #1>#2 \def\noexpand\@tempa{1=1}
+\else\def\noexpand\@tempa{1=0}\fi\ifnum\noexpand\@tempa}
diff --git a/macros/latex209/contrib/misc/indent.sty b/macros/latex209/contrib/misc/indent.sty
new file mode 100644
index 0000000000..02d8650f4d
--- /dev/null
+++ b/macros/latex209/contrib/misc/indent.sty
@@ -0,0 +1,120 @@
+%%% Save file as: INDENT.STY Source: FILESERV@SHSU.BITNET
+%%% The following checksum includes all SHSU-generated topmatter.
+%%% checksum = "65425 120 759 5150"
+%
+% \subsection{Environments for Indented Text}
+%
+% \DescribeEnv{indentation}
+% The indentation environment allows us to temporarily reset the margins.
+% This environment takes two arguments, which are the left and right indents.
+% Usually either both will be the same (for a centered indent) or else
+% the right indent will be 0pt (for left indent only).
+%
+% Examples:
+%
+% \begin{verbatim}
+% \begin{indentation}{1.5em}{1.5em}
+% This text will be set in a justified paragraph with narrower
+% margins than usual. The paragraph will be indented 1.5em on
+% each side from the surrounding margins.
+% \end{indentation}
+%
+% \begin{indentation}{.5in}{0pt}
+% This text will be set in a justified paragraph indented at
+% the left but not the right.
+% \end{indentation}
+%
+%
+% \begin{indentation}{1.5em}{1.5em}
+% This text will be indented.
+% \begin{indentation}{1.5em}{1.5em}
+% The indentation environment can be nested, giving indents
+% within indents, so this text will be indented some more.
+% \end{indentation}
+% Now we return to the first indentation level.
+% \end{indentation}
+% \end{verbatim}
+%
+% The method of margin-changing implemented here is identical to that
+% used by \LaTeX's "list" environment. Indeed, this code was written
+% by making a copy of the "list" environment's code, studying it closely,
+% and carefully paring out everything that didn't relate to setting margins.
+% This means that if another
+% environment (such as "center" or "quote") that uses the "list" environment
+% is nested inside the "indentation" environment, or if an "indentation"
+% environment is used inside a "list" environment, everything should
+% work just fine.
+%
+% \begin{macro}{\indentation}
+% The "indentation" environment begins and ends by executing "\par".
+% The first one guarantees that a paragraph that began before the
+% environment will not be affected by the new margins the environment
+% sets up, and that the last paragraph inside the environment will be.
+% The code for resetting the margins uses "\parshape" to maintain the
+% modified margin settings, rather than using "\leftskip" and "\rightskip".
+% This is rather clever, since it leaves us free to use the skip values
+% to produce other special effects (such as centering or ragged right).
+% But because \TeX\ normally resets "\parshape" declarations at the
+% end of each paragraph, we redefine "\par" to perform its usual
+% actions {\em inside a group}. The group is opened, "\@@par" ends
+% the paragraph, the "\parshape" setting is canceled {\em within the
+% group}, and the group ends, restoring the "\parshape" setting.
+% \begin{macrocode}
+\newenvironment{indentation}[2]%
+{%
+ \par
+ \setlength{\leftmargin}{#1}%
+ \setlength{\rightmargin}{#2}%
+ \advance\linewidth -\leftmargin
+ \advance\linewidth -\rightmargin
+ \advance\@totalleftmargin\leftmargin
+ \@setpar{{\@@par}}%
+ \parshape 1 \@totalleftmargin \linewidth
+ \ignorespaces
+}%
+{\par}
+% \end{macrocode}
+% An earlier version of this code used the "list" environment directly.
+% Using the "indentation" environment actually caused a "list" environment
+% with one item to be created. The formatting parameters for the "list"
+% environment were set to make the list appear just like the surrounding
+% text, except for the margin change. That is, "\topsep" was given
+% the value "0pt", "\parsep" was set to "\parskip", and "\listparindent"
+% and "\itemindent" were both set to "\parindent". This worked tolerably
+% well as a first approximation, but ultimately it was unsatisfactory for
+% several reasons, the most important being that an empty "list" environment
+% generates a \LaTeX\ error ("\@noitemerr", to be specific). Instead of
+% choosing special values and writing extra code to overcome the setup
+% that the "list" environment performs that isn't needed for our purposes,
+% I finally decided to simply figure out how the "list" environment resets
+% margins and re-implement just that part in the "indentation" environment.
+% \end{macro}
+%
+% \DescribeEnv{ctrindent}
+% The ctrindent environment uses the indentation environment
+% (defined above) and the standard "\centering" declaration to typeset
+% centered text in reduced margins. This environment takes two
+% arguments, which are the left and right indents. Usually
+% both will be the same, but in principle you could have a paragraph
+% whose lines were centered around a point that was off-center with
+% respect to the surrounding column of text.
+%
+% Example:
+%
+% \begin{verbatim}
+% \begin{ctrindent}{.5in}{.5in}
+% This text will be set in a centered paragraph with narrower
+% margins than usual.
+% \end{ctrindent}
+% \end{verbatim}
+%
+% \begin{macro}{\ctrindent}
+% The "\ctrindent" environment is just an "indentation" environment
+% inside which a "\centering" declaration is in effect.
+% \begin{macrocode}
+\newenvironment{ctrindent}[2]%
+{\begin{indentation}{#1}{#2}\centering}%
+{\end{indentation}}
+% \end{macrocode}
+% \end{macro}
+%
diff --git a/macros/latex209/contrib/misc/inputfile.sty b/macros/latex209/contrib/misc/inputfile.sty
new file mode 100644
index 0000000000..5fa26e2fa4
--- /dev/null
+++ b/macros/latex209/contrib/misc/inputfile.sty
@@ -0,0 +1,43 @@
+%
+% Inputfile style : Designed by R.Tucci, Ciba-Geigy AG Basle, June 29, 1990
+% modified by R.Tucci Feb. 21, 1991
+%
+% The following commands are defined for internal use
+%
+% \@fileindex : To keep the current level of \input{}
+% \@iinput : Redefines the \@iinput command of \latex.tex to
+% save the filename of \input{...}
+% \inputfilename : Returns the filename depending on \@fileindex
+% \@filenamei : Contains the filename for \@fileindex=1
+% \@filenameii : Contains the filename for \@fileindex=2
+% \@filenameiii : Contains the filename for \@fileindex=3
+% \@filename... : ... etc.
+% This Style should be used in the following manner
+%
+% 1. add this file to the \documentstyle[...]
+% 2. use the command \inputfilename somewhere in the text and the current
+% input file name will be substituted
+\typeout{filename environment loaded. WRTC , Version 1.1 22.02.91}
+ %
+ % Redefine \@iinput from latex.tex to keep the filename
+ % available
+\newcount\@fileindex % defines the pointer to the current filename
+\@fileindex=0 % and initialize it.
+\def\@iinput#1{\advance\@fileindex by 1 % increment the pointer
+ % save the filename
+ % the following line dose this Job:
+ % 1. \expandafter prevents to redefine \csname, so
+ % 2. \csname filename\romannumeral\@fileindex\endcsname
+ % expands to the control sequence \filename<x> where <x> is
+ % the roman character representation of \@fileindex. (e.g ii)
+ % 3. \def defines the resulted control sequence of 2. to be #1
+ \expandafter\def\csname filename\romannumeral\@fileindex\endcsname
+{#1}
+ \@@input#1 % now read the file
+ \ifnum\@fileindex>0 % check for end of stack
+ \advance\@fileindex by -1 \fi} % and decrement the pointer
+ % read the current filename if an \input
+ % has been performed, otherwise use \jobname
+\def\inputfilename{\ifnum\@fileindex=0\jobname
+ \else\csname filename\romannumeral\@fileindex\endcsname
+ \fi}
diff --git a/macros/latex209/contrib/misc/invertedparagraphs.tex b/macros/latex209/contrib/misc/invertedparagraphs.tex
new file mode 100644
index 0000000000..f0d510632e
--- /dev/null
+++ b/macros/latex209/contrib/misc/invertedparagraphs.tex
@@ -0,0 +1,25 @@
+% -*- Mode: TeX -*-
+
+\ifx\thisfileis\anUndefinedMacro\input maybeload \fi
+
+\thisfileis{<eb.tex.texlocal>invertedparagraphs} % abort loading if we're already loaded
+
+% This file defines a \begin{invertedparagraphs}...\end{invertedparagraphs}
+% environment that's useful in bibliographies.
+
+\input redefine % from texlocal
+
+% Inverted paragraphs.
+
+\newdimen\invertedparindent
+\invertedparindent=20pt
+
+\newenvironment{invertedparagraphs}{%
+\list{}%
+{\setlength{\listparindent}{-\invertedparindent}%
+\setlength{\leftmargin}{\invertedparindent}%
+\setlength{\labelwidth}{0pt}%
+\setlength{\labelsep}{0pt}%
+\setlength{\itemindent}{0pt}}%
+{\item{}\hspace{-\invertedparindent}}}{\endlist}
+
diff --git a/macros/latex209/contrib/misc/isf.sty b/macros/latex209/contrib/misc/isf.sty
new file mode 100644
index 0000000000..6c30a2d72a
--- /dev/null
+++ b/macros/latex209/contrib/misc/isf.sty
@@ -0,0 +1,95 @@
+% Save file as: ISF.STY Source: FILESERV@SHSU.BITNET
+% Provide access to the italic san serif type style for LaTeX. Once you
+% have included "isf" as a style option, you can use the \isf command to
+% select the italic san serif style, just as you would select the usual
+% italic style with \it, EXCEPT:
+%
+% The various fonts defined here are all "loaded on demand". As
+% discussed in the LaTeX book, Section C.14.4, a loaded on demand
+% font is subject to two restrictions when used in math mode:
+%
+% - The font must be used OUTSIDE of math mode before it is used
+% INSIDE of math mode. The \load command can be used to get
+% around this restriction.
+%
+% - Only a single font size is available within math mode - the
+% display, text, script and scriptscriptfonts will all be the
+% same. This can be avoided ONLY by changing the definitions
+% given here to pre-load the appropriate fonts; see LFONTS.TEX
+% for further information. (Alternatively, \@getfont could be
+% made more clever.) Note that pre-loading the fonts could cause
+% you to fill font space with fonts you never really use.
+%
+% In order to allow other style files that need access to \isf to input this
+% file safely, it is designed so that an attempt to input it a second time -
+% or, more exactly, when command "\isf" is already defined - is ignored.
+%
+% This file can be adapted easily to define other font type styles. The real
+% limit is likely to come from the requirement that each style so defined must
+% be given a unique family number - TeX only supports 16 families and LaTeX
+% as usually configured already uses 10. The right way to avoid this problem
+% is to modify \@getfont so that it ignores a family number of -1. Fonts
+% so specified would not be usable in math mode, but that's no big deal; you
+% don't WANT to use tons of non-math fonts in math mode anyway.
+%
+% As currently written, this file assumes that you have boldface san serif
+% fonts available at the following point sizes:
+%
+% lcmssi8
+% lcmssi8 at 9pt
+% cmssi10
+% cmssi10 at 11pt
+% cmssi10 at 12pt
+% cmssi10 at 17pt
+% cmssi10 at 20pt
+% cmssi10 at 25pt
+%
+% All but the last of these should be commonly available. I'm not sure about
+% the last one; LFONTS.TEX does not assume the availability of ANY 25 pt fonts
+% other than Roman. If necessary, change the definition of \isfxxv@ to
+% \@subfont\isf\it. (Alternatively, if you have italic sans serif fonts
+% at sizes smaller than 8pt, you might want to change the definitions of
+% \isfv@, \isfvi@, and \isfvii@.)
+%
+% Technical note: It is possible to do without the \isf<size>@ macros by
+% including their contents, with a whole bunch of \@prtct's, within the
+% \@addfontinfo definitions. This is a pain to do, and probably doesn't end
+% up saving any space anyway. This way costs you a bunch of extra macros,
+% but it's a LOT easier to understand!
+%
+% Written by George D. Greenwade (BED_GDG@SHSU.BITMET) as a variation of
+% BSF.STY Written by Jerry Leichter (LEICHTER-JERRY@CS.YALE.EDU)
+
+\expandafter\ifx\csname isf\endcsname\relax %Once only, please
+% Note: It's a pain to use \@ifundefined here - we don't want to pass the
+% rest of the definitions as an argument, but we can't easily use \endinput
+% since, with docsty, we can't control where the line breaks occur.
+
+\typeout{Document Option `isf' 25 August 1989 (GDG)}
+\def\isf{\protect\pisf}
+\newfam\sfifam
+\@addfontinfo\@vpt{\@prtct\isfv@}
+ \def\isfv@{\def\pisf{\@subfont\isf\it}}
+\@addfontinfo\@vipt{\@prtct\isfvi@}
+ \def\isfvi@{\def\pisf{\@subfont\isf\it}}
+\@addfontinfo\@viipt{\@prtct\isfvii@}
+ \def\isfvii@{\def\pisf{\@subfont\isf\it}}
+\@addfontinfo\@viiipt{\@prtct\isfviii@}
+ \def\isfviii@{\def\pisf{\@getfont\pisf\sfifam\@viiipt{lsmssi8}}}
+\@addfontinfo\@ixpt{\@prtct\isfx@}
+ \def\isfx@{\def\pisf{\@getfont\pisf\sfifam\@ixpt{lsmssi8\@halfmag}}}
+\@addfontinfo\@xpt{\@prtct\isfx@}
+ \def\isfx@{\def\pisf{\@getfont\pisf\sfifam\@xpt{cmssi10}}}
+\@addfontinfo\@xipt{\@prtct\isfxi@}
+ \def\isfxi@{\def\pisf{\@getfont\pisf\sfifam\@xipt{cmssi10\@halfmag}}}
+\@addfontinfo\@xiipt{\@prtct\isfxii@}
+ \def\isfxii@{\def\pisf{\@getfont\pisf\sfifam\@xiipt{cmssi10\@magscale1}}}
+\@addfontinfo\@xivpt{\@prtct\isfxiv@}
+ \def\isfxiv@{\def\pisf{\@getfont\pisf\sfifam\@xivpt{cmssi10\@magscale2}}}
+\@addfontinfo\@xviipt{\@prtct\isfxvii@}
+ \def\isfxvii@{\def\pisf{\@getfont\pisf\sfifam\@xviipt{cmssi10\@magscale3}}}
+\@addfontinfo\@xxpt{\@prtct\isfxx@}
+ \def\isfxx@{\def\pisf{\@getfont\pisf\sfifam\@xxpt{cmssi10\@magscale4}}}
+\@addfontinfo\@xxvpt{\@prtct\isfxxv@}
+ \def\isfxxv@{\def\pisf{\@getfont\pisf\sfifam\@xxvpt{cmssi10\@magscale5}}}
+\fi
diff --git a/macros/latex209/contrib/misc/isolatin1.sty b/macros/latex209/contrib/misc/isolatin1.sty
new file mode 100644
index 0000000000..9a6850979d
--- /dev/null
+++ b/macros/latex209/contrib/misc/isolatin1.sty
@@ -0,0 +1,174 @@
+% 1-Jun-1992
+%
+% File bases on iso1ibm.tex Version 1.0 of May, 9 1990
+\message{ISO-latin-1 input coding, version 0.9 of 1-Jun-1992.}
+%
+% For input of 8 bits character.
+% This allows reading ISO-8859 Latin-1 codes.
+%
+\chardef \atcode = \the \catcode `\@
+\catcode `\@ = 11
+%
+\catcode160=13 \def^^a0{{\bf?}} % 160 '240, "a0
+\catcode161=13 \def^^a1{!`} % 161 '241, "a1
+\catcode162=13 \def^^a2{{\bf?}} % 162 '242, "a2
+\catcode163=13 \def^^a3{\pounds{}} % 163 '243, "a3
+\catcode164=13 \def^^a4{{\bf?}} % 164 '244, "a4
+\catcode165=13 \def^^a5{{\bf?}} % 165 '245, "a5
+\catcode166=13 \def^^a6{$\vert$} % 166 '246, "a6
+\catcode167=13 \def^^a7{\S{}} % 167 '247, "a7 \S{} ISO-1,
+\catcode168=13 \def^^a8{\"{ }} % 168 '250, "a8
+\catcode169=13 \def^^a9{\copyright{}}% 169, '251, "a9
+\catcode170=13 \def^^aa{{\bf?}} % 170 '252, "aa
+\catcode171=13 % 171 '253, "ab,
+\@ifundefined{lguill}{\def^^ab{$<<$}}{\def^^ab{\lguill}}
+\catcode172=13 \def^^ac{{\bf?}} % 172 '254, "ac
+\catcode173=13 \def^^ad{{\bf?}} % 173 '255 "ad
+\catcode174=13 \def^^ae{{\bf?}} % 174 '256, "ae
+\catcode175=13 \def^^af{{\bf?}} % 175 '257, "af
+\catcode176=13 \def^^b0{{\bf?}} % 176 '260, "b0 ?? \No
+\catcode177=13 \def^^b1{$\pm$} % 177 '261, "b1 ISO-1 plus-minus
+\catcode178=13 \def^^b2{${}^2$} % 178, '262, "b2
+\catcode179=13 \def^^b3{${}^3$} % 179, '263, "b3
+\catcode180=13 \def^^b4{\'{ }} % 180, '264, "b4
+\catcode181=13 \def^^b5{{\bf?}} % 181, '265, "b5
+\catcode182=13 \def^^b6{\P{}} % 182, '266, "b6
+\catcode183=13 \def^^b7{$\cdot$} % 183, '267, "b7
+\catcode184=13 \def^^b8{\c{ }} % 184, '270, "b8
+\catcode185=13 \def^^b9{${}^1$} % 185, '271, "b9
+\catcode186=13 \def^^ba{{\bf?}} % 186, '272, "ba
+\catcode187=13 % 187, '273, "bb
+\@ifundefined{rguill}{\def^^bb{$>>$}}{\def^^bb{\rguill}}
+\catcode188=13 \def^^bc{$\frac 1 4$} % 188, '274, "bc
+\catcode189=13 \def^^bd{$\frac 1 2$} % 189, '275, "bd
+\catcode190=13 \def^^be{$\frac 3 4$} % 190, '276, "be
+\catcode191=13 \def^^bf{?`} % 191, '277, "bf
+\catcode192=13 \def^^c0{\`A} % 192, '300, "c0
+\@ifundefined{@grave@A@grave@}{\def^^c0{\`A}}{\let^^c0=\@grave@A@grave@}
+\catcode193=13 \def^^c1{\'A} % 193, '301, "c1
+\@ifundefined{@acute@A@acute@}{\def^^c1{\'A}}{\let^^c1=\@acute@A@acute@}
+\catcode194=13 \def^^c2{\^A} % 194, '302, "c2
+\@ifundefined{@circflx@A@circflx@}{\def^^c2{\^A}}{\let^^c2=\@circflx@A@circflx@}
+\catcode195=13 \def^^c3{\~A} % 195, '303, "c3
+\@ifundefined{@tileda@A@tilda@}{\def^^c3{\~A}}{\let^^c3=\@tileda@A@tilda@}
+\catcode196=13 \def^^c4{\"A} % 196, '304, "c4
+\@ifundefined{@Umlaut@A@Umlaut@}{\def^^c4{\"A}}{\let^^c4=\@Umlaut@A@Umlaut@}
+\catcode197=13 \def^^c5{\AA{}} % 197, '305, "c5
+\@ifundefined{@A@A@}{\def^^c5{\AA{}}}{\let^^c5=\@A@A@}
+\catcode198=13 \def^^c6{\AE{}} % 198, '306, "c6
+\@ifundefined{@A@E@}{\def^^c6{\AE{}}}{\let^^c6=\@A@E@}
+\catcode199=13 \def^^c7{\c{C}} % 199, '307, "c7
+\@ifundefined{@cedilla@C@cedilla}{\def^^c7{\c{C}}}{\let^^c7=\@cedilla@C@cedilla}
+\catcode200=13 \def^^c8{\`E} % 200, '310, "c8
+\@ifundefined{@grave@E@grave@}{\def^^c8{\`E}}{\let^^c8=\@grave@E@grave@}
+\catcode201=13 \def^^c9{\'E} % 201, '311, "c9
+\@ifundefined{@acute@E@acute@}{\def^^c9{\'E}}{\let^^c9=\@acute@E@acute@}
+\catcode202=13 \def^^ca{\^E} % 202, '312, "ca
+\@ifundefined{@circflx@E@circflx@}{\def^^ca{\^E}}{\let^^ca=\@circflx@E@circflx@}
+\catcode203=13 \def^^cb{{\"E}} % 203, '313, "cb
+\@ifundefined{@Umlaut@E@Umlaut@}{\def^^cb{\"E}}{\let^^cb=\@Umlaut@E@Umlaut@}
+\catcode204=13 \def^^cc{\`I} % 204, '314, "cc
+\@ifundefined{@grave@I@grave@}{\def^^cc{\`I}}{\let^^cc=\@grave@I@grave@}
+\catcode205=13 \def^^cd{\'I} % 205, '315, "cd
+\@ifundefined{@acute@I@acute@}{\def^^cd{\'I}}{\let^^cd=\@acute@I@acute@}
+\catcode206=13 \def^^ce{\^I} % 206, '316, "ce
+\@ifundefined{@circflx@I@circflx@}{\def^^ce{\^I}}{\let^^ce=\@circflx@I@circflx@}
+\catcode207=13 \def^^cf{{\"I}} % 207, '317, "cf
+\@ifundefined{@Umlaut@I@Umlaut@}{\def^^cf{\"I}}{\let^^cf=\@Umlaut@I@Umlaut@}
+\catcode208=13 \def^^d0{\rlap{\raise0.3ex\hbox{--}}D} % 208, '320, "d0
+\@ifundefined{@Eth@}{}{\let^^d0=\@Eth@}
+\catcode209=13 \def^^d1{¥} % 209, '321, "d1
+\@ifundefined{@tileda@N@tilda@}{\def^^d1{\~N}}{\let^^d1\@tileda@N@tilda@}
+\catcode210=13 \def^^d2{\`O} % 210, '322, "d2
+\@ifundefined{@grave@O@grave@}{\def^^d2{\`O}}{\let^^d2=\@grave@O@grave@}
+\catcode211=13 \def^^d3{\'O} % 211, '323, "d3
+\@ifundefined{@acute@O@acute@}{\def^^d3{\'O}}{\let^^d3\@acute@O@acute@}
+\catcode212=13 \def^^d4{\^O} % 212, '324, "d4
+\@ifundefined{@circflx@O@circflx@}{\def^^d4{\^O}}{\let^^d4=\@circflx@O@circflx@}
+\catcode213=13 \def^^d5{\~O} % 213, '325, "d5
+\@ifundefined{@tileda@O@tilda@}{\def^^d5{\~O}}{\let^^d5\@tileda@O@tilda@}
+\catcode214=13 \def^^d6{\"O} % 214, '326, "d6
+\@ifundefined{@Umlaut@O@Umlaut@}{\def^^d6{\"O}}{\let^^d6=\@Umlaut@O@Umlaut@}
+\catcode215=13 \def^^d7{$\times$}% 215, '327, "d7
+\catcode216=13 \def^^d8{\O{}} % 216, '330, "d8
+\@ifundefined{@OOO@}{\def^^d8{\O{}}}{\let^^d8=\@OOO@}
+\catcode217=13 \def^^d9{\`U} % 217, '331, "d9
+\@ifundefined{@grave@U@grave@}{\def^^d9{\`U}}{\let^^d9=\@grave@U@grave@}
+\catcode218=13 \def^^da{\'U} % 218, '332, "da
+\@ifundefined{@acute@U@acute@}{\def^^da{\'U}}{\let^^da=\@acute@U@acute@}
+\catcode219=13 \def^^db{\^U} % 219, '333, "db
+\@ifundefined{@circflx@U@circflx@}{\def^^db{\^U}}{\let^^db=\@circflx@U@circflx@}
+\catcode220=13 \def^^dc{\"U} % 220, '334, "dc
+\@ifundefined{@Umlaut@U@Umlaut@}{\def^^dc{\"U}}{\let^^dc=\@Umlaut@U@Umlaut@}
+\catcode221=13 \def^^dd{{\'Y}} % 221, '335, "dd
+\@ifundefined{@acute@Y@acute@}{\def^^dd{\'Y}}{\let^^dd=\@acute@Y@acute@}
+\catcode222=13 \def^^de{\lower 0.7ex \hbox{l}\hskip-1ex\relax b} % 222, '336, "de
+\@ifundefined{@Thorn@}{}{\let^^de=\@Thorn@}
+\catcode223=13 \def^^df{\ss{}} % 223, '337, "df
+\@ifundefined{@sss@}{\def^^df{\ss{}}}{\let^^df=\@sss@}
+\catcode224=13 \def^^e0{\`a} % 224, '340, "e0
+\@ifundefined{@grave@a@grave@}{\def^^e0{\`a}}{\let^^e0=\@grave@a@grave@}
+\catcode225=13 \def^^e1{\'a} % 225, '341, "e1
+\@ifundefined{@acute@a@acute@}{\def^^e1{\'a}}{\let^^e1=\@acute@a@acute@}
+\catcode226=13 \def^^e2{\^a} % 226, '342, "e2
+\@ifundefined{@circflx@a@circflx@}{\def^^e2{\^a}}{\let^^e2=\@circflx@a@circflx@}
+\catcode227=13 \def^^e3{\~a} % 227, '343, "e3
+\@ifundefined{@tileda@a@tilda@}{\def^^e3{\~a}}{\let^^e3=\@tileda@a@tilda@}
+\catcode228=13 \def^^e4{\"a} % 228, '344, "e4
+\@ifundefined{@Umlaut@a@Umlaut@}{\def^^e4{\"a}}{\let^^e4=\@Umlaut@a@Umlaut@}
+\catcode229=13 \def^^e5{\aa{}} % 229, '345, "e5
+\@ifundefined{@a@a@}{\def^^e5{\aa{}}}{\let^^e5=\@a@a@}
+\catcode230=13 \def^^e6{\ae{}} % 230, '346, "e6
+\@ifundefined{@a@e@}{\def^^e6{\ae{}}}{\let^^e6=\@a@e@}
+\catcode231=13 \def^^e7{\c{c}} % 231, '347, "e7
+\@ifundefined{@cedilla@c@cedilla}{\def^^e7{\c{c}}}{\let^^e7=\@cedilla@c@cedilla}
+\catcode232=13 \def^^e8{\`e} % 232, '350, "e8
+\@ifundefined{@grave@e@grave@}{\def^^e8{\`e}}{\let^^e8=\@grave@e@grave@}
+\catcode233=13 \def^^e9{\'e} % 233, '351, "e9
+\@ifundefined{@acute@e@acute@}{\def^^e9{\'e}}{\let^^e9=\@acute@e@acute@}
+\catcode234=13 \def^^ea{\^e} % 234, '352, "ea
+\@ifundefined{@circflx@e@circflx@}{\def^^ea{\^e}}{\let^^ea=\@circflx@e@circflx@}
+\catcode235=13 \def^^eb{\"e} % 235, '353, "eb
+\@ifundefined{@Umlaut@e@Umlaut@}{\def^^eb{\"e}}{\let^^eb=\@Umlaut@e@Umlaut@}
+\catcode236=13 \def^^ec{\`{\i}} % 236, '354, "ec
+\@ifundefined{@grave@i@grave@}{\def^^ec{\`{\i}}}{\let^^ec=\@grave@i@grave@}
+\catcode237=13 \def^^ed{\'{\i}} % 237, '355, "ed
+\@ifundefined{@acute@i@acute@}{\def^^ed{\'{\i}}}{\let^^ed=\@acute@i@acute@}
+\catcode238=13 \def^^ee{\^{\i}} % 238, '356, "ee
+\@ifundefined{@circflx@i@circflx@}{\def^^ee{\^{\i}}}{\let^^ee=\@circflx@i@circflx@}
+\catcode239=13 \def^^ef{\"{\i}} % 239, '357, "ef
+\@ifundefined{@Umlaut@i@Umlaut@}{\def^^ef{\"{\i}}}{\let^^ef=\@Umlaut@i@Umlaut@}
+\catcode240=13 \def^^f0{$\partial$} % 240, '360, "f0
+\@ifundefined{@eth@}{\def^^f0{$\partial$}}{\let^^f0=\@eth@}
+\catcode241=13 \def^^f1{\~n} % 241, '361, "f1
+\@ifundefined{@tileda@n@tilda@}{\def^^f1{\~n}}{\let^^f1\@tileda@n@tilda@}
+\catcode242=13 \def^^f2{\`o} % 242, '362, "f2
+\@ifundefined{@grave@o@grave@}{\def^^f2{\`o}}{\let^^f2=\@grave@o@grave@}
+\catcode243=13 \def^^f3{\'o} % 243, '363, "f3
+\@ifundefined{@acute@o@acute@}{\def^^f3{\'o}}{\let^^f3\@acute@o@acute@}
+\catcode244=13 \def^^f4{\^o} % 244, '364, "f4
+\@ifundefined{@circflx@o@circflx@}{\def^^f4{\^o}}{\let^^f4=\@circflx@o@circflx@}
+\catcode245=13 \def^^f5{\~o} % 245, '365, "f5
+\@ifundefined{@tileda@o@tilda@}{\def^^f5{\~o}}{\let^^f5\@tileda@o@tilda@}
+\catcode246=13 \def^^f6{\"o} % 246, '366, "f6
+\@ifundefined{@Umlaut@o@Umlaut@}{\def^^f6{\"o}}{\let^^f6=\@Umlaut@o@Umlaut@}
+\catcode247=13 \def^^f7{$\div$} % 247, '367, "f7
+\catcode248=13 \def^^f8{\o{}} % 248, '370, "f8
+\@ifundefined{@ooo@}{\def^^f8{\o{}}}{\let^^f8=\@ooo@}
+\catcode249=13 \def^^f9{\`u} % 249, '371, "f9
+\@ifundefined{@grave@u@grave@}{\def^^f9{\`u}}{\let^^f9=\@grave@u@grave@}
+\catcode250=13 \def^^fa{\'u} % 250, '372, "fa
+\@ifundefined{@acute@u@acute@}{\def^^fa{\'u}}{\let^^fa=\@acute@u@acute@}
+\catcode251=13 \def^^fb{\^u} % 251, '373, "fb
+\@ifundefined{@circflx@u@circflx@}{\def^^fb{\^u}}{\let^^fb=\@circflx@u@circflx@}
+\catcode252=13 \def^^fc{\"u} % 252, '374, "fc
+\@ifundefined{@Umlaut@u@Umlaut@}{\def^^fc{\"u}}{\let^^fc=\@Umlaut@u@Umlaut@}
+\catcode253=13 \def^^fd{\'y} % 253, '375, "fd
+\@ifundefined{@acute@y@acute@}{\def^^fd{\'y}}{\let^^fd=\@acute@y@acute@}
+\catcode254=13 \def^^fe{\lower 0.8ex\hbox{l}\hskip-1ex\relax b} % 254, '376, "fe
+\@ifundefined{@thorn@}{}{\let^^fe=\@thorn@}
+\catcode255=13 \def^^ff{\"y} % 255, '377, "ff
+\@ifundefined{@Umlaut@y@Umlaut@}{\def^^ff{\"y}}{\let^^ff=\@Umlaut@y@Umlaut@}
+\catcode `\@ = \the \atcode
+\endinput
+% End of iso-latin-1.tex
diff --git a/macros/latex209/contrib/misc/ist21.sty b/macros/latex209/contrib/misc/ist21.sty
new file mode 100644
index 0000000000..487a2d28b7
--- /dev/null
+++ b/macros/latex209/contrib/misc/ist21.sty
@@ -0,0 +1,39 @@
+% IST21 DOCUMENT-STYPE OPTION - Wed May 20 17:07:56 BST 1987
+%
+% derived from
+%
+% TITLEPAGE DOCUMENT-STYLE OPTION - released 27 January 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+% This style option produces a title appropriate for BSI IST/21 documents,
+% and general memos.
+%
+% In addition to the normal \title, \author (will give rise to the
+% source of the document) and \date commands, two further values
+% should be set. These are:
+%
+% \project{Project Reference}
+% The project reference for the document. For example,
+% \project{97.21.23} or \project{97.21.9 Q45}
+%
+% \status{Document Status}
+% For example \status{UK Position} or \status{UK Expert Contribution}
+
+\def\project#1{\def\@project{{#1}}} \project{\em 97.21.NN}
+\def\status#1{\def\@status{{#1}}} \status{\em status unset}
+
+\def\maketitle{
+ \setcounter{page}{0}
+ \begin{Large}
+ \begin{description}
+ \item[TITLE:] \@title
+ \item[SOURCE:] \@author
+ \item[DATE:] \@date
+ \item[PROJECT:] \@project
+ \item[STATUS:] \@status
+ \end{description}
+ \end{Large}
+\bigskip
+\null
+}
diff --git a/macros/latex209/contrib/misc/isucaption.sty b/macros/latex209/contrib/misc/isucaption.sty
new file mode 100644
index 0000000000..10823eb3ed
--- /dev/null
+++ b/macros/latex209/contrib/misc/isucaption.sty
@@ -0,0 +1,39 @@
+%NAME: isucaption.sty
+% written by gagac@isumvs.bitnet
+%
+%Figure 1.1: This is the debugged version of a modified caption macro
+% to produce captions with hanging indentation (like this).
+% If the caption is less than a full line, it will be
+% centered. \isucaption is used in the same way as \caption
+% (the name may be changed).
+% The variable \captionwidth may be set to match the width
+% of a \tabular* environment. If set inside a table or
+% figure environment, it will affect only that environment.
+
+\def\isucaption{\refstepcounter\@captype
+ \@dblarg{\@isucaption\@captype}}
+
+\newlength\captionwidth \captionwidth=\hsize
+\long\def\@isucaption#1[#2]#3{
+ \baselineskip 14.5 pt
+ \addcontentsline {\csname ext@#1\endcsname}{#1}
+ {\protect\numberline{\csname fnum@#1\endcsname}{\ignorespaces #2}}
+ \par
+ \begingroup
+ \@parboxrestore
+ \setbox\@tempboxa\hbox{\csname fnum@#1\endcsname #3}
+ \ifdim \wd\@tempboxa >\captionwidth
+ \begingroup
+ \setbox\@tempboxa\hbox{\csname fnum@#1\endcsname^^}
+ \advance \captionwidth by -\wd\@tempboxa
+ \@makecaption{\csname fnum@#1\endcsname}
+ {\ignorespaces{\protect\parbox[t]{\captionwidth}{#3}}}%
+ \endgroup
+ \else
+ \begingroup
+ \@makecaption{\csname fnum@#1\endcsname}
+ {\ignorespaces #3}
+ \endgroup
+ \fi
+ \par\vspace{1.7ex}
+ \endgroup}
diff --git a/macros/latex209/contrib/misc/ital.sty b/macros/latex209/contrib/misc/ital.sty
new file mode 100644
index 0000000000..41c0f5c548
--- /dev/null
+++ b/macros/latex209/contrib/misc/ital.sty
@@ -0,0 +1,73 @@
+% This is ITAL.STY, from TeXmag v3n1, by Dan Bernstein
+% bernsten@phoenix.princeton.edu
+%
+% Italics-without-tears (or how to avoid doing italic correction!)
+%
+% To use the macros, simply type \ital{text} where you would normally
+% type {\it text}, and similarly for \upright. \slant is like \ital.
+% These are not \long macros and are meant for text within a paragraph,
+% so stick to {\it...} for many-paragraph italicisation.
+%
+% First come the basic definitions.
+%
+\newif\if@corr\newif\if@nonzero
+{\@tempskipa 0pt plus 0pt minus 0pt\xdef\zero@skip{\the\@tempskipa}}
+% Now come the macros for dealing with italics. Notice the use of
+% \futurelet to see what token comes after the \ital{...}. These macros
+% aren't perfect; the worst problem is that they can't really look ahead
+% to see if a period or a comma will be added next to the text, and they
+% only see if the next token after the } is a period or a comma. If you
+% have some other macro or character that should also force the italic
+% correction to disappear, add \do{\themacroname} to \no@corr.
+\def\ital#1{{\it #1}\begingroup\futurelet\@tempa\@corr}
+\def\slant#1{{\sl #1}\begingroup\futurelet\@tempa\@corr}
+\def\no@corr{\do{.}\do{,}}
+\def\@corr{\def\do##1{\ifx\@tempa##1\@corrfalse\fi}\@corrtrue\no@corr
+\if@corr\/\fi\endgroup}
+%
+% The problem of roman type within italic type is quite different. The
+% italic correction will always be added at the beginning (if you're
+% typing \ital{... something\upright{,} ...} then you have a very weird
+% idea of the logical structure of your document). However, \upright will
+% almost always be preceded by a space, and maybe even some kerns,
+% penalties, and other glue; so we must ``unspace'' past these items,
+% add the italic correction, and put the spaces back. The \upright macro
+% reflects this; \@unspace removes as many glue/kern/penalty items as
+% possible from the current horizontal list and sets \@tempa to a control
+% sequence that dumps all the glue/kern/penalty items right back on.
+%
+\def\upright#1{\begingroup\@unspace\/\@tempa\endgroup{\@uprightfont #1}}
+\def\@unspace{%
+\def\@tempa{}\loop\@nonzerofalse
+\@tempskipa\lastskip\unskip
+\@tempdima\lastkern\unkern
+\@tempcnta\lastpenalty\unpenalty
+\edef\@tempb{\the\@tempskipa}%
+\ifx\@tempb\zero@skip
+\else\edef\@tempa{\hskip\@tempb\@tempa}\@nonzerotrue\fi
+\ifdim\@tempdima=0pt\else\edef\@tempa{\kern\the\@tempdima\@tempa}\@nonzerotrue\fi
+\ifnum\@tempcnta=0\else\edef\@tempa{\penalty\the\@tempcnta\@tempa}\@nonzerotrue\fi
+\if@nonzero\repeat}
+%
+% \upright (because of \@unspace) has many more caveats than \ital and
+% \slant. As described in the TeXbook, \lastskip and its friends take
+% the last such item off the current list, returning zero if the last item
+% is not such an item. This makes it easy for \@unspace to keep going back,
+% removing skips, kerns, and penalties until they are all zero, but it
+% leads to two problems. The first is that a zero item that you really
+% put in explicitly (probably for some obscure line-breaking reasons)
+% will not be passed through to \@tempa and thus will not be put back. The
+% second is that if you have a sequence of a few such zero items, \@unspace
+% will stop there and won't get all the way back to where it should.
+% Furthermore, a whatsit or similar weird item will also stop \@unspace.
+% The solution to the first two problems is to replace \hskip0pt with
+% \hskip1sp, \kern0pt with \kern1sp, and \penalty0 with \penalty1. Any
+% DVI program that shows a difference of 1sp doesn't round correctly.
+%
+%
+% the font to be used for upright text
+\def\uprightfont#1{\def\@uprightfont{#1}}
+\uprightfont{\rm}
+%
+% and here's a crib of LaTeX' \em (without the protection):
+\def\emph#1{\ifdim \fontdimen\@ne\font >\z@ \upright{#1}\else \ital{#1}\fi}
diff --git a/macros/latex209/contrib/misc/italic.sty b/macros/latex209/contrib/misc/italic.sty
new file mode 100644
index 0000000000..8c47825ac2
--- /dev/null
+++ b/macros/latex209/contrib/misc/italic.sty
@@ -0,0 +1,38 @@
+% Save file as: ITALIC.STY Source: FILESERV@SHSU.BITNET
+%
+% File: ITALIC.STY
+%
+% Author: Hunter Goatley
+% goathunter@WKUVX1.BITNET
+%
+% Date: August 21, 1991
+%
+% Abstract:
+%
+% The macros \ital and \slant are defined to typeset tex in italic
+% (\it) and slanted (\sl) fonts, automatically inserting the italic
+% correction (\/) if necessary. The correction is not inserted if
+% the token following the parameter is a period or a comma, as
+% suggested on page 14 of _The TeXbook_.
+%
+% Based on the \predict macro presented in _TeX for the Impatient_,
+% p. 233.
+%
+% These macros use \toks0 as a temporary.
+%
+% The \futurelet\it@next in \ital and \slant defines \it@next to be
+% whatever the character following the parameter is. \d@slant checks
+% to see if \it@next is a comma or period; if it is neither, the
+% italic correction (\/) is included.
+%
+\catcode`\@=11 % Temporarily make @ a letter
+\def\ital#1{\toks0={#1}\let\slf@nt=\it\futurelet\it@next\d@slant}
+\def\slant#1{\toks0={#1}\let\slf@nt=\sl\futurelet\it@next\d@slant}
+\def\d@slant{{\slf@nt\the\toks0}%
+ \ifx\it@next,% % If \it@next is not a comma
+ \else\ifx\it@next.% % ... and is not a period
+ \else\/% % ... insert the correction (\/)
+ \fi\fi% % ...
+ \let\it@next=\relax% % "Undefine" \it@next
+ }
+\catcode`\@=12 % Reset @ as other
diff --git a/macros/latex209/contrib/misc/jbs.sty b/macros/latex209/contrib/misc/jbs.sty
new file mode 100644
index 0000000000..f2ee96dab3
--- /dev/null
+++ b/macros/latex209/contrib/misc/jbs.sty
@@ -0,0 +1,200 @@
+% Article sub-style JBS.STY
+% Usage: \documentstyle[jbs]{article}
+% REQUIRED COMMANDS LISTED BELOW
+% optional commands listed below
+% \setcounter{page}{foo} --`foo' is first page number for article
+% \begin{document}
+% \leadpagelayout
+% blank line
+% Text as usual
+%
+\typeout { }
+\typeout{Article document style `jbs' for the Journal of Business Strategies}
+\typeout { }
+% Basic layouts for Journal of Business Strategies--released July 3, 1988
+%
+% Copyright (c) 1988 by George D. Greenwade (BED_GDG@SHSU.BITNET)
+% Center for Business and Economic Research
+% Sam Houston State University
+% Huntsville, Texas 77341-2056
+%
+% Must include the following definitions in the preamble of the document:
+%% \vol{foo} -- `foo' is Volume number for the article
+%% \no{foo} -- `foo' is Number in the Volume
+%% \issue{foo} -- `foo' is issue (i.e., Spring or Fall)
+%% \yr{foo} -- `foo' is year of publication
+%% \runhead{foo} -- `foo' is running head for odd-numbered (right-hand) pages
+%% \title{foo} -- `foo' is titlepage title (insert breaks with \cr)
+%% \author{foo} -- `foo' is lead author's name
+%% \affil{foo} -- `foo' is lead author's affiliation (insert breaks with \cr)
+%% Defaults intentionally not specified as each article is
+%% unique in these aspects. Failure to specify any of these
+%% results in "command not specified" error.
+% Optional entries in preamble:
+%% Present design allows for up to two additional co-authors with unique
+%% affiliations (total of three authors and affiliations).
+%% \authorii{foo} -- `foo' is first co-author (second author)
+%% \affilii{foo} -- `foo' is authorii's affiliation
+%% \authoriii{foo} -- `foo' is second co-author (third author)
+%% \affiliii{foo} -- `foo' is authoriii's affiliation
+
+% BASIC SETUPS AND LAYOUTS
+\ds@twoside % First, we use two-sided layout for the JBS.
+\input{art12.sty} % To generate photo-ready copy for reduction to a
+\textwidth6in % finished 6X9 book, we print in 12 point using a
+\textheight9in % 6X9 text definition. This reduces nicely. We
+\topmargin-12pt % have found that virtually all stray toner marks
+\oddsidemargin.75in % are essentially erased out in the reduction process.
+\evensidemargin.75in
+\headheight11pt
+\headsep7mm
+\pagestyle{empty}
+\thispagestyle{plain}
+
+% CREATE BOXES
+\newbox\topheadlinebox % These are the boxes which are utilized in
+\newbox\titlebox % the various centering processes defined below.
+\newbox\bottomheadlinebox
+\newbox\authorbox
+\newbox\affilbox
+
+% DEFINE VARIOUS ARTICLE SPECIFIC VARIABLES
+\def\vol#1{\edef\vol{#1}} % Volume number
+\def\no#1{\edef\no{#1}} % Number within the Volume
+\def\issue#1{\edef\issue{#1}} % Issue (Fall or Spring)
+\def\yr#1{\edef\yr{#1}} % Year of publication
+\def\runhead#1{\edef\runhead{#1}} % Running header (Author: Title)
+
+% DEFINE PAGE HEADERS \evenpageheader and \oddpageheader
+% A variation from HEADERFOOTER.STY, copyright (c) 1987 by Stephen Gildea
+\newcommand\evenpageheader[3]{\def\@evenhead
+ {\rlap{#1}\hss{#2}\hss\llap{#3}}}
+\newcommand\oddpageheader[3]{\def\@oddhead
+ {\rlap{#1}\hss{#2}\hss\llap{#3}}}
+
+% PAGE HEADERS AND LEAD FOOTNOTE
+\evenpageheader{\bf \thepage}{\large\em Journal of Business Strategies}
+{\bf Vol.~\vol, No.~\no}
+\oddpageheader{\bf \issue\ \yr}{\large\em \runhead}{\bf \thepage}
+\long\def\leadfn{\footnotetext[0]{\hspace*{-6mm}\small {\em Journal of Business
+Strategies},
+Volume \vol, Number \no\ (\issue\ \yr)}}
+
+% CENTERING COMMAND \CenterBox
+% A variation from VERTEX.TEX, copyright (c) 1987 by Hal R. Varian
+%% #1 - name of box
+%% #2 - font used in box
+%% #3 - baselineskip for box
+%% #4 - text of box, separated by \cr
+\def\CenterBox#1#2#3#4{%
+\global\setbox#1=\vbox{\baselineskip=#3\halign{#2\hfil##\hfil\cr#4\crcr}}}
+
+% SPECIAL FONT DEFINITIONS USED IN CENTERING OF LEAD PAGE ELEMENTS
+\def\titlefont{\Large\sc}
+\def\authorfont{\large\sl}
+\def\affilfont{\twlrm}
+
+% MAKE NEEDED CENTERED ELEMENTS FOR LEAD PAGE
+\def\CenteredTitle#1{
+ \CenterBox
+ \titlebox
+ \titlefont
+ {20pt}
+ {#1}}
+
+\def\CenteredAuthor#1{
+ \CenterBox
+ \authorbox
+ \authorfont
+ \normalbaselineskip
+ {#1}}
+
+\def\CenteredAffil#1{
+ \CenterBox
+ \affilbox
+ \affilfont
+ {14pt}%\normalbaselineskip
+ {#1}}
+
+% MAKE CENTERED RULES FOR ABOVE AND BELOW TITLEBOX
+%% Upper rule
+\global\setbox\topheadlinebox\vbox{\baselineskip\normalbaselineskip
+\halign{\titlefont\hfil#\hfil\cr{\vrule width6in height.7mm}\crcr}}
+%% Lower rule
+\global\setbox\bottomheadlinebox\vbox{\baselineskip\normalbaselineskip
+\halign{\titlefont\hfil#\hfil\cr{\vrule width6in height.7mm}\crcr}}
+
+% IF MULTIPLE AUTHORS
+\newif\ifauthorii
+\global\authoriifalse
+\newif\ifauthoriii
+\global\authoriiifalse
+
+\def\CenteredAuthorII#1{
+\global\authoriitrue
+\newbox\authoriibox
+ \CenterBox
+ \authoriibox
+ \authorfont
+ \normalbaselineskip
+ {#1}}
+
+\def\CenteredAffilII#1{
+\newbox\affiliibox
+ \CenterBox
+ \affiliibox
+ \affilfont
+ {14pt}%\normalbaselineskip
+ {#1}}
+
+\def\CenteredAuthorIII#1{
+\global\authoriiitrue
+\newbox\authoriiibox
+ \CenterBox
+ \authoriiibox
+ \authorfont
+ \normalbaselineskip
+ {#1}}
+
+\def\CenteredAffilIII#1{
+\newbox\affiliiibox
+ \CenterBox
+ \affiliiibox
+ \affilfont
+ {14pt}%\normalbaselineskip
+ {#1}}
+
+% DEFINE AND PLACE IN BOXES: TITLE, AUTHOR, AND AFFILIATION
+\long\def\title#1{\CenteredTitle{#1}}
+\def\author#1{\CenteredAuthor{#1}}
+\long\def\affil#1{\CenteredAffil{#1}}
+\def\authorii#1{\CenteredAuthorII{#1}}
+\long\def\affilii#1{\CenteredAffilII{#1}}
+\def\authoriii#1{\CenteredAuthorIII{#1}}
+\long\def\affiliii#1{\CenteredAffilIII{#1}}
+
+% DEFINE \leadpagelayout TO INVOKE THE LEAD PAGE LAYOUT
+\def\leadpagelayout{{\vbox{
+\@@line{\hfil\box\topheadlinebox\hfil} % Centered line
+\vskip.3pc
+\@@line{\hfil\box\titlebox\hfil} % Centered title
+\vskip-.2pc
+\@@line{\hfil\box\bottomheadlinebox\hfil} % Centered line
+\vskip.8pc
+\@@line{\hfil\box\authorbox\hfil} % Author's name (centered)
+\vskip.2pc
+\@@line{\hfil\box\affilbox\hfil} % Author's affiliation (centered)
+\ifauthorii
+{\vskip.6pc
+\@@line{\hfil\box\authoriibox\hfil} % 2nd Author's name (centered)
+\vskip.2pc
+\@@line{\hfil\box\affiliibox\hfil}} % 2nd Author's affiliation (centered)
+\fi
+\ifauthoriii
+{\vskip.6pc
+\@@line{\hfil\box\authoriiibox\hfil} % 3rd Author's name (centered)
+\vskip.2pc
+\@@line{\hfil\box\affiliiibox\hfil}} % 3rd Author's affiliation (centered)
+\fi
+\vskip1pc}}
+\leadfn} % Generate lead-page footnote
diff --git a/macros/latex209/contrib/misc/jmb.sty b/macros/latex209/contrib/misc/jmb.sty
new file mode 100644
index 0000000000..7c3240d726
--- /dev/null
+++ b/macros/latex209/contrib/misc/jmb.sty
@@ -0,0 +1,62 @@
+% jmb.sty is identical to apalike.sty 1989 June 19
+%
+% apalike.sty style, used in conjunction with apalike.bst,
+% will produce an apa-like bibliography style:
+%
+% 1) Bibliography entries formatted alphabetically, last name
+% first, each entry having a hanging indentation and no label.
+% 2) References in the following formats:
+% (Author, 1986)
+% (Author and Author, 1986)
+% (Author et al., 1986).
+% 3) Multiple references in the form (Author1, 1986; Author2, 1987)
+%
+% To be used as an optional argument to the \documentstyle command; for example
+% \documentstyle[11pt,apalike]{book}
+%
+% 16-Sep-86, original version by Susan King and Oren Patashnik.
+% 13-Oct-87 changes:
+% Fixed bug in last line by adding the {} that disappeard when
+% the \hbox{} was removed from the pre-APALIKE definition;
+% added club and widow penalties;
+% patched the \newblock LaTeX bug from `-.07em' to simply `.07em';
+% and made this work for document styles that don't define `chapter'.
+%
+%
+% Use parens instead of brackets for \cite, and no label in the bibliography
+%
+\def\@cite#1#2{(#1\if@tempswa , #2\fi)}
+\def\@biblabel#1{}
+
+% Set length of hanging indentation for bibliography entries
+%
+\newlength{\bibhang}
+\setlength{\bibhang}{2em}
+
+% \thebibliography environment depends on whether or not `chapter's can exist
+%
+\@ifundefined{chapter}{\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {\relax}{\setlength{\labelsep}{0em}
+ \setlength{\itemindent}{-\bibhang}
+ \setlength{\leftmargin}{\bibhang}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}}%
+{\def\thebibliography#1{\chapter*{Bibliography\@mkboth
+ {BIBLIOGRAPHY}{BIBLIOGRAPHY}}\list
+ {\relax}{\setlength{\labelsep}{0em}
+ \setlength{\itemindent}{-\bibhang}
+ \setlength{\leftmargin}{\bibhang}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}}
+
+% `; ' goes between cites, and there's no \hbox around individual cites
+%
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{; }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
diff --git a/macros/latex209/contrib/misc/joe.sty b/macros/latex209/contrib/misc/joe.sty
new file mode 100644
index 0000000000..00b9fae0f5
--- /dev/null
+++ b/macros/latex209/contrib/misc/joe.sty
@@ -0,0 +1,151 @@
+% Article sub-style JOE.STY 1-MAR-1989 17:17:32
+% Updated 2-FEB-1990 09:51:35
+\typeout{Article documentstyle option 'joe' for the Journal of Economics.}
+
+% BASIC SETUPS AND LAYOUTS
+\ds@twoside % First, we use two-sided layout for the JoE.
+\twocolumn % Second, impose two columns
+\sloppy % TeX's sloppy looks better than LaTeX's fussy!
+\flushbottom % Flushbottom since this is for production
+\parindent 1em % Indents, margins, widths, and seps
+\leftmargini 2em % " " " " " " " " " " " " " " " " "
+\leftmarginv .5em % " " " " " " " " " " " " " " " " "
+\leftmarginvi .5em % " " " " " " " " " " " " " " " " "
+\marginparwidth 48pt % V V V V V V V V V V V V V V V V V
+\marginparsep 10pt % ---------------------------------
+\voffset-.4in % Offset the page to fit
+\parskip=0pt plus 1pt % Allow for stretchy paragraph skips
+\textwidth6.6in % Text is 6.6 inches wide
+\textheight9.1in % Text is 9.1 inches high
+\oddsidemargin.2in % Offset for odd-numbered pages
+\evensidemargin.1in % Offset for odd-numbered pages
+\headheight8.2pt % Allow 7.1 points for header text
+\headsep4.5mm % Separate text from headers 4.4 millimeters
+\columnsep.3in % Separate columns .3 inches
+\arraycolsep 2.5pt % Separate columns in arrays by 5 pt total
+\nofiles % Don't use .AUX files, so why create them?
+\renewcommand{\textfraction}{.12}
+\renewcommand{\floatpagefraction}{.8}
+\renewcommand{\dblfloatpagefraction}{.8}
+\newskip\holdsep % New skip for listing environments
+\holdsep 4.5pt plus 2pt minus 1pt % which is defined to standard \itemsep
+\def\shortseps{\itemsep=\parskip} % Use \shortseps to get \itemsep of \parskip
+\def\normalseps{\itemsep=\holdsep} % Use \normalseps to get standard \itemsep
+\pagestyle{empty} % Empty pagestyle, but we will customize below
+
+% DEFINE ARTICLE-SPECIFIC HEADING INFORMATION
+\def\vol#1{\edef\vol{#1}} % Volume number
+\def\yr#1{\edef\yr{#1}} % Year of publication
+\def\runhead#1{\edef\runhead{#1}} % Running header (Author: Title)
+
+% \prelim OPTION TO IDENTIFY PROOF DRAFTS AWAITNG FINAL EDITORIAL APPROVAL
+\newif\ifprelim
+\global\prelimfalse
+\def\prelim{\global\prelimtrue\typeout{Proof Draft}}
+
+% DEFINE PAGE HEADERS \evenpageheader AND \oddpageheader
+% A variation from HEADERFOOTER.STY, copyright (c) 1987 by Stephen Gildea
+\newcommand\evenpageheader[3]{\def\@evenhead
+ {\rlap{#1}\hss{#2}\hss\llap{#3}}}
+\newcommand\oddpageheader[3]{\def\@oddhead
+ {\rlap{#1}\hss{#2}\hss\llap{#3}}}
+
+% PAGE HEADERS AND LEAD FOOTNOTE
+\evenpageheader{\bf \thepage}{\large\sl The Journal of Economics, \vol , \yr}
+{\ifprelim{\bf Proof Draft} \else {}\fi}
+\oddpageheader{\ifprelim{\bf Proof Draft} \else {}\fi}{\large\sl \runhead}{\bf
+ \thepage}
+
+% DEFINE NECESSARY DEMERITS AND OTHER STUFF TO MAKE IT LOOK RIGHT
+\doublehyphendemerits=100000 % No consecutive line hyphens
+\brokenpenalty=10000 % No broken words across columns/pages
+\widowpenalty=10000 % No widows at bottom of page
+\clubpenalty=10000 % No orphans at top of page
+
+% DEFINE \leadpagelayout
+\date{}
+\let\school\thanks
+\let\leadpagelayout\maketitle
+\let\section\subsection
+\def\thesubsection{\Roman{subsection}.}
+\let\subsection\subsubsection
+\def\thesubsubsection{\Alph{subsubsection}.}
+\let\subsubsection\paragraph
+\def\theparagraph{\arabic{paragraph}.}
+
+% DECALIGN.STY included directly in whole
+%\typeout{Document Style option 'decalign'. Released 1 October 1987}
+\def\dsep{} % This is necessary for some unknown reason.
+\def\@testpach#1{\@chclass \ifnum \@lastchclass=\tw@ 4 \else
+ \ifnum \@lastchclass=3 5 \else
+ \z@ \if #1c\@chnum \z@ \else
+ \if #1l\@chnum \@ne \else
+ \if #1r\@chnum \tw@ \else
+ \@chclass \if #1|\@ne \else
+ \if #1@\tw@ \else
+ \if #1p3 \else
+ \if #1d7 \else
+ \ifnum \@lastchclass=7 8 \else \z@ \@preamerr 0\fi
+ \fi \fi \fi \fi \fi \fi \fi \fi
+\fi}
+% Additions to these macros handle the extra classes.
+\def\@mkpream#1{\@firstamptrue\@lastchclass6
+\def\@preamble{}\def\protect{\noexpand\protect\noexpand}\let\@sharp\relax
+\let\@startpbox\relax\let\@endpbox\relax
+\@expast{#1}\expandafter\@tfor \expandafter
+ \@nextchar \expandafter:\expandafter=\@tempa\do{\@testpach\@nextchar
+ \ifnum \@lastchclass=7 \ifnum \@chclass=8 \else\@classviii{.}\fi\fi
+ \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii
+ \or \@classiv \or\@classv \or \or\@classvii \or\@classviii{\@nextchar}%
+ \fi\@lastchclass\@chclass}%
+\ifcase \@lastchclass \@acol
+ \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi}
+\def\@tabular{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv
+ \let\@classviii\@tabclassviii
+ \let\\\@tabularcr\@tabarray}
+\def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\@classviii\@arrayclassviii
+ \let\\\@arraycr\def\@halignto{}\@tabarray}
+\def\@arrayclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \or
+ \@acolampacol \or \@acolampacol
+ \fi
+\edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil
+ \or \hfil$\relax\@sharp$\fi}}
+\def\@tabclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \or
+ \@acolampacol \or \@acolampacol
+ \fi
+\edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil\ignorespaces\@sharp\unskip\hfil
+ \or \ignorespaces\@sharp\unskip\hfil
+ \or \hfil\hskip\z@ \ignorespaces\@sharp\unskip\fi}}
+\def\@classi{\ifcase \@lastchclass \@acol \@arrayrule \or
+ \@addtopreamble{\hskip \doublerulesep}\@arrayrule\or
+ \or \or \@arrayrule \or
+ \@acol \@arrayrule \or \@arrayrule \or
+ \@acol \@arrayrule \or \@acol \@arrayrule
+ \fi}
+\def\@classiii{\ifcase \@lastchclass \@acolampacol \or
+ \@addamp\@acol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@ampacol \or
+ \@acolampacol \or \@ampacol
+ \fi}
+\def\@classvii{\ifcase \@lastchclass \@acolampacol \or
+ \@addamp\@acol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@ampacol \or
+ \@acolampacol \or \@acolampacol \fi}
+\def\@tabclassviii#1{\@addtopreamble{\catcode`#1=4 \hfil\ignorespaces\@sharp
+ \unskip&#1\@sharp\unskip\hfil}}
+\def\@arrayclassviii#1{\@addtopreamble{\catcode`#1=4 \hfil$\relax\@sharp$&
+ $\relax.\@sharp$\hfil}}
diff --git a/macros/latex209/contrib/misc/kalender.tex b/macros/latex209/contrib/misc/kalender.tex
new file mode 100644
index 0000000000..cb5b2293f7
--- /dev/null
+++ b/macros/latex209/contrib/misc/kalender.tex
@@ -0,0 +1,327 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Tages-Termin-Kalender erstellen %
+% von Andreas Schrell %
+% Windhoevel 2 %
+% 5600 Wuppertal 2 %
+% Tel. 0202/666889 %
+% E-Mail: ma107 at dhafeu11.bitnet %
+% Version 1.0 vom 9.10.1991 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentstyle{article}
+
+%
+% Wochentag zu einem Datum ermitteln
+%
+\makeatletter
+\newcount\@tag \newcount\@monat \newcount\@jahr
+\newcount\@ja \newcount\@jb \newcount\@ha
+\newcount\@hb \newcount\@hc \newcount\@b \newcount\@f
+\newcount\Tag \newcount\Monat \newcount\Jahr \newcount\WT
+\newcount\Woche \newcount\JT \newcount\RT \newcount\MAXT
+\newcount\WTM
+
+\def\Wochentag #1.#2.#3.{\@tag=#1\@monat=#2\@jahr=#3
+\Tag#1\Monat#2\Jahr#3
+\ifnum\@jahr<100\advance\@jahr by 1900\else\fi
+\ifnum\@monat<3 % if monat<3
+ \advance\@monat by 10 % monat:=monat+10
+ \advance\@jahr by -1 % jahr:=jahr-1
+\else % else
+ \advance\@monat by -2 % monat:=monat-2
+\fi % fi
+\@ja=\@jahr\divide\@ja by 100 % ja:=jahr/100
+\@jb=-\@ja\multiply\@jb by 100
+\advance \@jb by \@jahr % jb:=jahr-ja*100
+\@ha=\@monat\multiply\@ha by 13
+\advance\@ha by -1 % ha:=13*monat-1
+\divide\@ha by 5 % ha:=ha/5
+\@hb=\@jb\divide\@hb by 4 % hb:=jb/4
+\@hc=\@ja\divide\@hc by 4 % hc:=ja/4
+\@b=\@ha\advance\@b by \@hb
+\advance\@b by \@hc % b:=ha+hb+hc
+\@f=\@b\advance\@f by \@jb
+\advance\@f by \@tag % f:=b+jb+tag
+\multiply \@ja by 2
+\advance\@f by -\@ja % f:=f-2*ja
+\maketag}
+
+\newif\ifFeiertag
+\newif\ifMK \MKfalse
+\def\FTT #1 #2 #3 {\ifnum\Monat=#2 \ifnum\Tag=#1
+ \Feiertagtrue\def\Feiertagname{#3}%
+\fi\fi}
+\def\FTM #1 #2 #3 {\ifnum\Monat=#2 \ifnum\WTC=#1
+ \Feiertagtrue\def\Feiertagname{#3}%
+\fi\fi}
+\def\testFeiertage{\Feiertagfalse
+ \ifMK\let\FT\FTM\else\let\FT\FTT\fi
+ \FT 1 1 Neujahr
+ \FT 1 5 Maifeiertag
+ \FT 3 10 {Tag der deutschen Einheit}
+ \FT 1 11 Allerheiligen
+ \FT 25 12 1.~Weihnachtstag
+ \FT 26 12 2.~Weihnachtstag
+\ifnum\Jahr=1991
+ \FT 20 11 Bu\ss-~und~Bettag
+\fi
+\ifnum\Jahr=1992
+ \FT 17 4 Karfreitag
+ \FT 19 4 Ostern
+ \FT 20 4 Ostern
+ \FT 28 5 Himmelfahrt
+ \FT 7 6 Pfingsten
+ \FT 8 6 Pfingsten
+ \FT 18 6 Fronleichnam
+ \FT 18 11 Bu\ss-~und~Bettag
+\fi
+\ifnum\Jahr=1993
+ \FT 9 4 Karfreitag
+ \FT 11 4 Ostern
+ \FT 12 4 Ostern
+ \FT 20 5 Himmelfahrt
+ \FT 30 5 Pfingsten
+ \FT 31 5 Pfingsten
+ \FT 10 6 Fronleichnam
+ \FT 17 11 Bu\ss-~und~Bettag
+\fi
+\ifnum\Jahr=1994
+ \FT 1 4 Karfreitag
+ \FT 3 4 Ostern
+ \FT 4 4 Ostern
+ \FT 12 5 Himmelfahrt
+ \FT 22 5 Pfingsten
+ \FT 23 5 Pfingsten
+ \FT 2 6 Fronleichnam
+ \FT 16 11 Bu\ss-~und~Bettag
+\fi
+}
+
+\def\MAXTberechnen{
+ \MAXT=
+ \ifcase\Monat
+ -1\or 31\or 28\or 31\or 30\or 31\or 30\or 31\or 31\or
+ 30\or 31\or 30\or 31\else \ddt \fi\relax
+ \ifnum\Monat=2
+ \@ha=\Jahr \divide\@ha by 4 \multiply \@ha by 4
+ \ifnum\@ha=\Jahr \advance \MAXT by 1\fi
+ \@ha=\Jahr \divide\@ha by 100 \multiply \@ha by 100
+ \ifnum\@ha=\Jahr \advance \MAXT by -1\fi
+ \@ha=\Jahr \divide\@ha by 400 \multiply \@ha by 400
+ \ifnum\@ha=\Jahr \advance \MAXT by 1\fi
+ \fi\relax}
+
+\def\maketag{\@ha=\@f
+\divide\@ha by 7
+\multiply\@ha by 7
+\advance\@f by -\@ha % f:= f mod 7
+\WT=\@f
+\edef\Tagname{\ifcase\@f
+ Sonntag\or Montag\or Dienstag\or Mittwoch\or Donnerstag\or
+ Freitag\or Samstag\else ????????\fi}
+\edef\Monatname{\ifcase\Monat \ddt\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or
+ Dezember\else ????????\fi}}
+
+\def\nexttag{\advance\@f by 1
+ \advance\JT by 1 \advance\RT by -1
+ \advance\Tag by 1
+ \ifnum\Tag>\MAXT
+ \Tag=1
+ \advance\Monat by 1
+ \ifnum\Monat>12 \Monat=1 \advance\Jahr by 1 \fi
+ \MAXTberechnen
+ \fi\relax
+ \maketag
+ \ifnum\WT=1\advance\Woche by 1\fi\relax
+ \ifnum\Tag=1 \WTM=\WT\fi}
+
+\newcount\Malc \newcount\WTC
+
+\newbox\Monatsbox
+
+\def\Monatskalender{\maketag\MKtrue
+ \WTC=\WTM \ifnum\WTC=0\relax\WTC=7\fi
+ \global\Malc=\WTC
+\setbox\Monatsbox=\vbox{\hsize=4cm\small
+ \noindent\setbox0\hbox{00}\underline{\strut
+ \hbox to \wd0{\hss Mo\hss}\ \ \hbox to \wd0{\hss Di\hss}\ \
+ \hbox to \wd0{\hss Mi\hss}\ \ \hbox to \wd0{\hss Do\hss}\ \
+ \hbox to \wd0{\hss Fr\hss}\ \ \hbox to \wd0{\hss Sa\hss}\ \
+ \hbox to \wd0{\hss\bf So\hss}}\vskip 1mm
+ \noindent
+ \loop
+ \ifnum\WTC>1\relax
+ \advance\WTC by -1
+ \phantom{00}\ \
+ \repeat
+ \WTC=1
+ \loop
+ {\testFeiertage
+ \ifFeiertag\global\let\FTF\it\else\global\let\FTF\relax\fi}%
+ \ifnum\WTC<\MAXT\relax
+ {\ifnum\Malc=7\bf\fi\FTF
+ \ifnum\WTC<10\relax\phantom{0}\fi
+ \ifnum\Tag=\WTC\underline{\the\WTC}\else\the\WTC\fi}%
+ {\ifnum\Malc=7\relax \\ \global\Malc=0\else\ \ \fi}%
+ \global\advance\Malc by 1
+ \advance\WTC by 1
+ \repeat{\ifnum\Malc=7\bf\fi\FTF
+ \ifnum\Tag=\WTC\underline{\the\WTC}\else\the\WTC\fi}\par}\MKfalse}
+
+\arrayrulewidth=0.00333in
+\tabcolsep=2pt \doublerulesep=0pt
+\fboxrule=\arrayrulewidth
+\fboxsep=-\fboxrule
+\pagestyle{empty}
+\oddsidemargin=-1cm
+\topmargin=-1cm
+\advance\vsize by 1cm
+\headheight=0pt
+\headsep=0pt
+
+\def\Initialisierung{\newbox\BoxA
+ \setbox\BoxA\hbox{\begin{tabular*}{12cm}%
+ {|l|@{\extracolsep{\fill}}l@{\extracolsep{0pt}}*{6}{|c}|}
+ \hline
+ \vrule height11pt width0pt
+ Uhr & T\"atigkeit & P & T & S & Pri & Zeit & ok \\
+ \hline\hline
+ \phantom{0}\lower1pt\hbox{7:}\phantom{00}
+ & \hbox to 7cm{\hss} & & & & & & \\ \hline
+ \phantom{0}\lower1pt\hbox{8:} & & & & & & & \\ \hline
+ \phantom{0}\lower1pt\hbox{9:} & & & & & & & \\ \hline
+ \lower1pt\hbox{10:} & & & & & & & \\ \hline
+ \lower1pt\hbox{11:} & & & & & & & \\ \hline
+ \lower1pt\hbox{12:} & & & & & & & \\ \hline
+ \lower1pt\hbox{13:} & & & & & & & \\ \hline
+ \lower1pt\hbox{14:} & & & & & & & \\ \hline
+ \lower1pt\hbox{15:} & & & & & & & \\ \hline
+ \lower1pt\hbox{16:} & & & & & & & \\ \hline
+ \lower1pt\hbox{17:} & & & & & & & \\ \hline
+ \lower1pt\hbox{18:} & & & & & & & \\ \hline
+ \lower1pt\hbox{19:} & & & & & & & \\ \hline
+ \lower1pt\hbox{20:} & & & & & & & \\ \hline
+ \lower1pt\hbox{21:} & & & & & & & \\ \hline
+ \lower1pt\hbox{22:} & & & & & & & \\ \hline \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \multicolumn{2}{|l|}{} & & & & & & \\ \hline
+ \end{tabular*}}}
+
+\def\Tageskalender{\Monatskalender
+ \testFeiertage
+ \vbox{\ifFeiertag\vglue-7mm\fi
+ \ifFeiertag\hbox{\framebox{\vbox to 7mm{\vss\hbox to 12cm{\hss
+ \bf\Feiertagname\hss}\vss}}}\nointerlineskip\fi
+ \hbox{%
+ \framebox{\vbox to 7mm{\vss\hbox to 4cm{\hss
+ \Large\bf\vrule height13pt width0pt\Tagname\hss}\vss}}%
+ \framebox{\vbox to 7mm{\vss\hbox to 8cm{\hss
+ \Large\bf\vrule height13pt width0pt\relax \the\Tag.
+ \Monatname\ (\the\Monat)\ \ \the\Jahr\hss}\vss}}}%
+ \nointerlineskip
+ \hbox{\bf
+ \framebox{\vbox to 7mm{\vss
+ \hbox to 4cm{\hss\vrule height12pt width0pt
+ \the\Woche. Woche\hss}\vss}}%
+ \framebox{\vbox to 7mm{\vss\hbox to 4cm{\hss\vrule height12pt width0pt
+ \the\JT. Tag\hss}\vss}}%
+ \framebox{\vbox to 7mm{\vss\hbox to 4cm{\hss\vrule height12pt width0pt
+ \the\RT\ Resttage
+ \hss}\vss}}}%
+ \vskip 3mm
+ \copy\BoxA
+ \vskip 3mm
+ \hbox{\vbox{\hbox{%
+ \framebox{\vbox to 2cm{\hbox to 7cm{\ Gedenktage:
+ \vrule height11pt width0pt\strut\hss}
+ \hrule height 0.00333in\vss
+ \hrule height 0.00333in\vss
+ \hrule height 0.00333in\vss
+ \hrule height 0.00333in\vss
+}}}%
+ \offinterlineskip
+ \hbox{%
+ \framebox{\vbox to 2cm{\hbox to 7cm{\ Notizen:
+ \vrule height11pt width0pt\strut\hss}
+ \hrule height 0.00333in\vss
+ \hrule height 0.00333in\vss
+ \hrule height 0.00333in\vss
+ \hrule height 0.00333in\vss
+}}}}%
+ \framebox{\vbox to 4cm{\vss
+ \hbox to 5cm{\hss\vbox{\hsize=4cm
+ \hbox{\bf\Monatname\ \the\Jahr}\vskip 4mm
+ \copy\Monatsbox\par}\hss}\vss}}}}%
+}
+
+
+%%%%%%%%%%%%%%%%
+% Es geht los: %
+%%%%%%%%%%%%%%%%
+
+\message{Anfangsdatum (xx.xx.xxxx): }
+\read-1 to \AFD
+
+\newcount\AT
+\message{Anzahl der Tage (eine Seite pro Tag!): }
+\read-1 to \AZT
+\AT=\AZT
+
+\newcount\startt \newcount\startm
+\newif\ifweiter
+
+\expandafter\Wochentag \AFD.
+
+\startt=\Tag\startm=\Monat
+\Tag=1\Monat=1\JT=1\Woche=1
+\Wochentag 1.1.\the\Jahr.
+\MAXTberechnen
+
+\RT=364
+\@ha=\Jahr \divide\@ha by 4 \multiply \@ha by 4
+\ifnum\@ha=\Jahr \advance \RT by 1\fi
+\@ha=\Jahr \divide\@ha by 100 \multiply \@ha by 100
+\ifnum\@ha=\Jahr \advance \RT by -1\fi
+\@ha=\Jahr \divide\@ha by 400 \multiply \@ha by 400
+\ifnum\@ha=\Jahr \advance \RT by 1\fi
+
+\message{Ich berechne die Daten des ersten Tages. }
+\message{Bitte etwas Geduld. }
+\loop
+{\global\weitertrue
+ \ifnum\Monat=\startm
+ \ifnum\Tag=\startt
+ \global\weiterfalse
+ \fi
+ \fi}%
+\ifweiter %\fi
+ \nexttag
+\repeat
+
+\Initialisierung
+
+\makeatother
+
+\begin{document}
+
+\loop
+\ifnum\AT>0 %\fi
+ \advance\AT by -1
+ \message{(\Tagname, \the\Tag. \Monatname\space \the\Jahr,
+ noch zu setzen: \the\AT\space\ifnum\AT=1 Tag\else Tage\fi) ........ }
+ \Tageskalender\clearpage
+ \nexttag
+\repeat
+
+\end{document}
diff --git a/macros/latex209/contrib/misc/labels.sty b/macros/latex209/contrib/misc/labels.sty
new file mode 100644
index 0000000000..2b2f4e5022
--- /dev/null
+++ b/macros/latex209/contrib/misc/labels.sty
@@ -0,0 +1,80 @@
+%%% ======================================================================
+%%% @LaTeX-style{
+%%% filename = "labels.sty",
+%%% version = "1.0",
+%%% date = "17 July 1992",
+%%% time = "13:39:24.74 +0100",
+%%% author = "Norman Gray",
+%%% address = "Department of Physics
+%%% Open University
+%%% Milton Keynes
+%%% MK7 6AA, UK",
+%%% e-mail = "N.O.Gray@open.ac.uk (Internet)",
+%%% telephone = "+44 908 652279",
+%%% FAX = "+44 908 653744",
+%%% archived = "Aston, SHSU",
+%%% keywords = "Labels, cross-referencing",
+%%% abstract = "If this style file is included amongst the
+%%% \documentstyle options, all uses of the \label
+%%% command within the LaTeX file will have the label
+%%% name printed in the margin (except when used in
+%%% a \caption, when it appears in the text).",
+%%% codetable = "ISO/Ascii",
+%%% checksum = "60488 80 330 3319",
+%%% docstring = "Display label names in margin
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility."
+%%% }
+%%% ======================================================================
+
+\let\@@eqnnum=\@eqnnum
+\def\@eqnnum{\@@eqnnum
+% + |\@eqnnum| will produce a note, sticking into the margin beside
+% the equation number, which has the equation's label and number.
+% |\labeln@me| is initialised to |\relax|, redefined within the
+% |\label| macro, and reset to |\relax| here. If it's already equal
+% to |\relax| here, the equation number hasn't been labelled, and so
+% `???' is put in the margin. \-
+\if\labeln@me\relax
+ \margintext{???}%
+\else
+ \margintext{\labeln@me}\global\def\labeln@me{\relax}%
+\fi}
+
+\let\@@makecaption\@makecaption
+\let\@label\label
+\def\@gobblethree#1#2#3{}
+\def\prlabelname#1{% expansion is label name #1 with all catcodes `other'
+\expandafter\expandafter\expandafter\@gobblethree
+ \expandafter\string\csname r@#1\endcsname}
+ % use \r@#1, rather then just \#1 to avoid defining new control sequence
+
+\long\def\@makecaption#1#2{{\def\label##1{{\nintt\{\prlabelname{##1}\}\space
+ }\@label{##1}}\@@makecaption{#1}{#2}}}
+\def\label#1{\@bsphack\@label{#1}%
+\ifmmode
+ \xdef\labeln@me{\prlabelname{#1}}% label name produced with equation number
+\else
+{\setbox0=\vbox to 0pt{\vss\hbox to \hsize{\hfill
+ \margintext{\prlabelname{#1}}}}\dp0=0pt%
+\ifvmode
+ \nointerlineskip\box0\nobreak % fix this box to next one
+\else
+ \vadjust{\box0\nobreak}%
+\fi}%
+\fi
+\@esphack}
+
+%\if@twoside
+% \def\margintext#1{\ifodd\c@page\rlap{\nintt\quad\{#1\}}\else
+% \llap{\nintt\{#1\}\quad\hskip\textwidth}\fi}
+%\else
+% \def\margintext#1{\rlap{\nintt\quad\{#1\}}}
+%\fi
+\def\margintext#1{\rlap{\sevit\quad\{#1\}}}
+\global\def\labeln@me{\relax}
diff --git a/macros/latex209/contrib/misc/lablst.sty b/macros/latex209/contrib/misc/lablst.sty
new file mode 100644
index 0000000000..bacd7e8787
--- /dev/null
+++ b/macros/latex209/contrib/misc/lablst.sty
@@ -0,0 +1,55 @@
+% LABLST.STY -- A document style option for printing label definitions at
+% the end of the document. Use with
+
+% \documentstyle[11pt,lablst]{article}
+
+% for example. WARNING: This redefines \end{document} which may break
+% some document styles.
+
+% This borrows heavily from:
+% LABLST.TEX -- A LaTeX input file for printing label definitions.
+% Copyright (c) 1985 by Leslie Lamport (5 January 1985).
+
+% Putting this functionality into a style option turns out to be much more
+% convenient for users of TeXtures, because of the way files are organized
+% with that system.
+
+% This file was put together on October 18, 1989 by:
+% Charles Karney Phone: +1 609 243 2607
+% Plasma Physics Laboratory FAX: +1 609 243 2160
+% Princeton University MFEnet: Karney@PPC.MFENET
+% PO Box 451 Internet: Karney%PPC.MFENET@CCC.NMFECC.GOV
+% Princeton, NJ 08543-0451 Bitnet: Karney%PPC.MFENET@LBL.BITNET
+
+
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\@lablst % This line is the sole modification to \enddocument
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\def\@lablst{
+ \parindent 0pt \parskip 0pt
+ \xpt \baselineskip 12pt
+ \newwrite \labfile \relax
+ \immediate\openout \labfile =\jobname.lab\relax
+ {\def\toc{toc}
+ \def\@writefile##1##2{\def\temp{##1}\ifx\temp\toc
+ \immediate\write\labfile{##2}\fi}
+ \def\newlabel##1##2{\immediate\write\labfile{\string\newlabel{##1}{##2}}}
+ \def\bibcite##1##2{\immediate\write\labfile{\string\bibcite{##1}{##2}}}
+ \makeatletter
+ \input \jobname.aux }
+ \immediate\closeout\labfile
+ \def\newlabel##1##2{\par \hbox to \textwidth
+ {\hfill\makebox[10em][l]{\tt ##1}\makebox[3.5em][l]{\first
+ ##2}\hspace{1em}Page:\makebox[3em][r]{\second ##2}\hspace{4em}}}
+ \def\first##1##2{##1}
+ \def\second##1##2{##2}
+ \def\bibcite##1##2{\par\makebox[2in][l]{\tt ##1}[##2]}
+ \input \jobname.lab
+ \clearpage
+}
+\endinput
diff --git a/macros/latex209/contrib/misc/laioobr.sty b/macros/latex209/contrib/misc/laioobr.sty
new file mode 100644
index 0000000000..2749aa7e35
--- /dev/null
+++ b/macros/latex209/contrib/misc/laioobr.sty
@@ -0,0 +1,800 @@
+% laioobr.sty
+% briefstijl voor laioo
+%
+% Auteur: Werenfried Spit
+% First Version: 2 januari 1990
+% Complete revision, including work from brief.sty
+\def\stijlversie{1.3}\def\stijldatum{6 november 1990}
+\gdef\at{\makeatletter @\makeatother}
+%
+% 1.3 verbeteringen uit brief.sty <1.1> ingevoerd (WS)
+%
+\typeout{Document Style 'LaiooBrief'. Versie <\stijlversie>, <\stijldatum>}
+
+\overfullrule 0pt
+\def\@ptsize{0}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@namedef{ds@twoside}{\@twosidetrue}
+\@twosidefalse
+\def\ds@draft{\overfullrule 15pt}
+\@namedef{ds@a4}{\message{De A4-optie is niet nodig: ik doe de papierafmetingen zelf.}}
+\@namedef{ds@A4}{\relax}
+\@namedef{ds@dutch}{\message{De dutch-optie is niet nodig}}
+\@namedef{ds@dutch}{\relax}
+\@namedef{ds@sober}{\message{De sober-optie is niet nodig}}
+\@namedef{ds@sober}{\relax}
+\@namedef{ds@datehead}{\message{De datehead-optie is niet nodig}}
+\@namedef{ds@datehead}{\relax}
+
+
+\newif\if@typhulp \def\ds@typhulp{\@typhulptrue}
+\newif\if@streepjes \def\ds@streepjes{\@streepjestrue}
+\newif\if@typhulp \def\ds@notyphulp{\@typhulpfalse}
+\newif\if@streepjes \def\ds@nostreepjes{\@streepjesfalse}
+\newif\if@adresrechts \def\ds@adresrechts{\@adresrechtstrue}
+\newif\if@muchfonts \def\ds@muchfonts{\@muchfontstrue} % (WS) ivm ruimte
+ \def\ds@notmuchfonts{\@muchfontsfalse}
+\@muchfontstrue
+\newif\if@onepage \def\ds@onepage{\@onepagetrue}
+\@onepagefalse
+
+\newcount\language \language=0
+ \input dutch.sty % Nederlands
+\def\ds@engels{\language=1 \input english.sty}
+\def\ds@USengels{\language=2 \input english.sty}
+\def\ds@duits{\language=3 \input german.sty}
+
+\@options
+
+
+
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+%%%%%%%%%%%%%%%%%%%%%%% point size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifcase \@ptsize\relax
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\or
+\def\@normalsize{\@setsize\normalsize{15pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\fi
+\normalsize
+
+%%%%%%%%%%%%%%%%%%%%%% Paper Size %%%%%%%%%%%%%%%%%%%%%%%%%%
+\oddsidemargin=7.6mm
+\evensidemargin=\oddsidemargin
+%V rechter marge is volgens NEN 10mm; voor symmetrie lijkt 33 mij beter.
+\textwidth=134mm
+% \@rightskip=0cm plus 5cm \rightskip=\@rightskip % uitgevulde paragrafen (WS)
+\marginparwidth=0pt \marginparsep=0pt \marginparpush=0pt
+\topmargin-12.4mm
+%V het briefhoofd komt tot 43mm van de bovenkant van het papier
+\headheight=15mm \headsep=0mm
+\newdimen\@firstheadheight \@firstheadheight=39mm
+\newdimen\@otherheadheight \@otherheadheight=\headheight
+\newdimen\@otherheadsep \@otherheadsep=2mm
+\newdimen\@vervolgsep
+\newdimen\footsep \footsep=2.5cm %%analoog aan headsep
+\newdimen\@firsttextheight \@firsttextheight=243mm % eigenlijk 203mm:
+\newdimen\@firstpageskip \@firstpageskip=40mm
+\newdimen\@othertextheight \@othertextheight=243mm
+\textheight=\@firsttextheight % op het timmermansoog
+\if@onepage\@othertextheight=\textheight\fi
+\columnsep 10pt \columnseprule 0pt %V twee koloms brieven? belachelijk!
+\raggedbottom %% hm! zonder raggedbottom gaat het slot mis.
+\footnotesep 12pt \skip\footins 10pt plus 2pt minus 4pt
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+\@maxsep 20pt
+\@dblmaxsep 20pt
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+
+\newdimen\longindentation
+\longindentation=0.4\textwidth
+\newdimen\indentedwidth
+\indentedwidth=\textwidth
+\advance\indentedwidth -\longindentation
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% opening / afsluiting %%%%%%%%%%%%%%%%%%%%%
+\if@muchfonts \gdef\refkopfont{\footnotesize\sf} % (WS)
+ \gdef\kleinvet{\footnotesize\sf}
+ \gdef\headfont{\large\sf}
+\else \font\refkopfont=cmssq8
+ \font\kleinvet=cmbx7
+ \gdef\headfont{\Large\sf}
+\fi
+
+\def\opening#1{\thispagestyle{firstpage}
+ \begin{figure}[b]{\vskip \@firstpageskip}\end{figure} % de laatste 4cm moeten leeg zijn ivm de vergrote kop en voet
+ \adresveld
+ \prevdepth=-1000pt %% ????
+ \vskip 2mm
+ \if@typhulp \referentieregels \else \referentieblok \fi
+ \vskip 10mm
+ \relax#1
+ \par\vspace*{4.5mm}\nobreak}
+\def\ondertekening#1{\def\fromsig{#1}}\def\fromsig{}
+%V een aanzienlijke verbetering op de LL constructie: nu kun je
+%V de ondertekening na de afsluiting geven.
+\long\def\afsluiting#1{\par\nobreak\vspace{\parskip}
+ \stopbreaks \noindent
+ \ifx\@empty\fromsig
+ \def\ondertekening##1{\def\fromsig{##1}
+ \hskip\longindentation \parbox{.5\textwidth}{\raggedright
+ \ignorespaces #1 \\[2\baselineskip] \fromsig \strut}}
+ \else \parbox{.5\textwidth}{\raggedright
+ \hskip\longindentation \ignorespaces #1 \\[2\parskip]
+ \fromsig \strut}
+ \fi \par}
+
+
+\def\betreft#1{\def\@subject{#1}} \def\@subject{}
+\def\ps{\par\startbreaks}
+\def\cc#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm cc: }\ignorespaces
+ #1\strut}\par}
+\def\bijlage#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm \bijlagetekst\ }\ignorespaces
+ #1\strut}\par}
+\def\bijlagen#1{\par\noindent
+ \parbox[t]{\textwidth}{\@hangfrom{\rm \bijlagentekst\ }\ignorespaces
+ #1\strut}\par}
+\def\stopletter{}
+
+
+\def\returnaddress{}
+\newcount\labelcount
+
+\def\startlabels{\labelcount=0 \baselineskip=0pt \lineskip=0pt
+\pagestyle{empty}
+\let\@texttop=\relax
+\topmargin -25mm
+\headsep 0pt
+\oddsidemargin -35pt
+\evensidemargin -35pt
+\textheight 297mm
+\@colht\textheight \@colroom\textheight \vsize\textheight
+\textwidth 210mm
+\columnsep 3.79mm
+\baselineskip=0pt
+\lineskip=0pt
+\boxmaxdepth=0pt
+\twocolumn\relax}
+% \def\mlabel#1#2{\setbox0\vbox{%
+% \parbox[b]{3.6in}{\strut\ignorespaces #2}}
+% \vbox to 2in{\vss \box0 \vss}}
+\def\mlabel#1#2{\setbox0\vbox{%
+\parbox[b]{90mm}{\raggedright\strut\ignorespaces #2}}
+ \vbox to 37.125mm{\vss \box0 \vss}}
+
+\long\def\brief#1{\newpage
+ \c@page\@ne
+ \interlinepenalty=200 \@processto{#1}
+ \@defrefveld{\@Ad}{\geadresseerdetekst}{\toname}
+ \ifdim\wd\@Dt=0cm \@defrefveld{\@Dt}{\datumtekst}{\vandaag}\fi
+%% misschien headheight opvoeren en textheight verminderen
+%% voor de vervolgbladen. Nb: op het eerste blad mag niet met
+%% de textheight geklooid worden, omdat dan het adres op de
+%% verkeerde hoogte kan komen.
+ {\setbox\@tempboxa=\vervolghoofd
+ \@tempdima=\ht\@tempboxa
+ \advance\@tempdima by -\@otherheadheight
+ \ifdim\@tempdima>0cm
+ \global\advance\@otherheadheight by \@tempdima
+ \global\advance\@othertextheight by -\@tempdima \fi}
+%% idem voetregel bekijken
+ {\setbox\@tempboxa=\vbox{\voetregel}
+ \global\footskip=\ht\@tempboxa %%moet de teksthoogte niet minder worden?
+ \global\advance\footskip by \footsep}
+ } %V maar niet als die er als is!!!
+\def\endbrief{\stopletter\@@par\pagebreak\@@par
+ \if@filesw \begingroup
+ \def\protect{\string} \let\\=\relax
+ \def\protect##1{\string##1\space}
+ \immediate\write\@auxout{\string\mlabel{\returnaddress}{\toname
+ \\\toaddress}}
+ \endgroup \fi
+ %% en nu forceren dat elke brief zijn eigen referenties heeft.
+ \begingroup \setbox\@tempboxa=\box\@UB \setbox\@tempboxa=\box\@UK
+ \setbox\@tempboxa=\box\@OK \endgroup
+ }
+
+\long\def\brief#1{\newpage
+ \c@page\@ne
+ \interlinepenalty=200 \@processto{#1}}
+\def\endletter{\stopletter\@@par\pagebreak\@@par
+\if@filesw
+\begingroup
+\def\protect{\string}
+\let\\=\relax
+\def\protect##1{\string##1\space}
+\immediate\write\@auxout{\string\mlabel{\returnaddress}{\toname
+\\\toaddress}}
+\endgroup
+\fi}
+\long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
+ \else \@yproc #1@@@\fi}
+\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}
+\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}
+\def\stopbreaks{\interlinepenalty \@M
+ \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+ \let\vspace\@nobreakvspace}
+\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}
+\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
+ \@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}
+\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}
+\def\startbreaks{\let\\=\@normalcr
+ \interlinepenalty 200\def\par{\@@par\penalty 200}}
+
+\def\name#1{\def\fromname{#1}}
+\def\signature#1{\def\fromsig{#1}}
+\def\fromsig{}
+\long\def\address#1{\def\fromaddress{#1}}
+\def\fromaddress{}
+\def\stuknummer#1{
+ \def\@stuknummer{#1}
+ \def\@stuknummerbox{
+ \raisebox{18mm}{\hbox to 4\refveldbreedte{ \hfill \fbox{\footnotesize\sf \@stukname ~ #1} }}
+ }}
+\def\@stuknummer{}
+\def\@stuknummerbox{}
+
+%%%%%%%%%%%%%%%%%%%%%%%% adresveld %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\gdef\@hss{\hskip 0cm plus 1filll minus 1filll\relax}
+
+\newdimen\adresveldbreedte
+\newif\if@antwoordadres
+\def\antwoordadres#1{\@antwoordadrestrue\def\@antwoordadres{#1}}
+\def\@antwoordadres{}
+\def\adresveld{\hbox{}\kern-\topskip
+ \kern-12mm
+ \bgroup% \baselineskip=0pt %% dit voorkomt tonnen problemen.
+ \lineskip=0pt %% tonnetjes.
+ \if@adresrechts \adresveldbreedte=4\refveldbreedte
+ \advance\adresveldbreedte by -76mm
+ \def\@tempa{\moveright 76mm}
+ \else \let\@tempa\relax \adresveldbreedte=83mm\fi
+ \setbox\@tempboxa= % geadresseerde plus adres
+ \vtop{\hsize=\adresveldbreedte \@normalsize
+ \rightskip=0cm plus \adresveldbreedte
+ \let\\=\@nobreakcr \toname \\ \toaddress}
+ \if@typhulp {\footnotesize\sf\hrule \@height.05ex \@width\adresveldbreedte} \fi
+ \if@antwoordadres\@tempa\vbox to 0cm{
+ \hbox to \adresveldbreedte{\kleinvet
+ \def\\{\unskip\enspace$\bullet$\enspace\ignorespaces}%
+ \@antwoordadres\hfil}\kern2pt
+ \hrule \vss}\fi
+% \if@typhulp \@tempa\llap{\vbox to 0cm
+% {\vskip9mm\streepje\vss}} \fi
+ \kern 7mm \kern-\ht\@tempboxa \@tempdima=\dp\@tempboxa%
+ \if \@tempboxa > 27mm \typeout{Overfull addressbox}\fi
+ \@tempa\box\@tempboxa \kern-\@tempdima
+ \vskip27mm % totale hoogte adresbox 34mm
+ \hrule \@height.05ex \@width4\refveldbreedte
+ \egroup}
+
+
+%%%%%%%%%%%%%%%%%%%%%% referentieblok %%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\refveldbreedte
+\refveldbreedte=38mm %% 3/2 inch. zie NEN 3516
+\newdimen\halfrefveldbreedte
+\halfrefveldbreedte=25mm
+
+\def\@defrefveld#1#2#3{\setbox#1=\@horrefveld{#2}{#3}}
+\def\@defverrefveld#1#2#3{\setbox#1=\@verrefveld{#2}{#3}}
+\def\@horrefveld#1#2{\hbox{\refkopfont
+ \hbox to\halfrefveldbreedte{#1 \hss}
+ \hbox{#2} }}
+% \def\@refveld#1#2{\vtop{\hsize=\refveldbreedte \parskip=0cm
+% \lineskiplimit=0cm \baselineskip=12pt
+% \rightskip=0cm plus \refveldbreedte
+% minus .5\refveldbreedte
+% \vbox{\refkopfont\baselineskip=10pt #1\strut}
+% #2}}
+\def\@verrefveld#1#2{\hbox to\refveldbreedte{
+ \vtop{\hsize=\refveldbreedte\parskip=0cm%
+ \refkopfont%
+ \hbox to \hsize{#1 \hfil\strut}
+ \viiipt\sf #2 }\hss}}
+\newbox\@UB \newbox\@UK \newbox\@OK \newbox\@Dt \newbox\@Su
+\def\uwbriefvan#1{\@defrefveld{\@UB}{\uwbrieftekst}{#1}}
+\def\uwkenmerk#1{\@defrefveld{\@UK}{\uwkenmerktekst}{#1}}
+\def\onskenmerk#1{\@defrefveld{\@OK}{\onskenmerktekst}{#1}}
+\def\onderwerp#1{\@defrefveld{\@Su}{\betrefttekst}{#1}}
+\def\datum#1{\def\@tempa{}\def\@tempb{#1}\ifx\@tempa\@tempb
+ \setbox\@Dt\hbox{ }\else\@defrefveld{\@Dt}{\datumtekst}{#1}\fi\def\@datum{#1}}
+%V Datum word geinitialiseerd op \vandaag in \brief
+%V als de gebruiker verder niets doet, als hij een leeg argument opgeeft
+%V verschijnt er in het geheel geen datum.
+
+\def\referentieblok{\vbox{\raggedright\refkopfont
+ {\copy\@Dt}
+ {\copy\@UB}
+ {\copy\@UK}
+ {\copy\@OK}
+ {\copy\@Su}
+ }}
+\def\referentieregels{\vbox{
+ \hbox{\@verrefveld{\uwbrieftekst}{\vskip 9mm} \@verrefveld{\uwkenmerktekst}{}
+ \@verrefveld{\onskenmerktekst}{} \@verrefveld{\datumtekst}{} \@hss}
+ \@horrefveld{\betrefttekst:}{} }
+ \vskip 2mm}
+
+\newbox\@Ad %V Geadresseerde: geinitialiseerd in \brief
+\def\vervolgreferentieregel{\vbox
+ {\hbox to 4\refveldbreedte
+ {\normalsize\sf \@datum \hfill \thepage\hss}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%% headers / footers %%%%%%%%%%%%%%%%%%%%%%%
+\def\briefhoofd{}\def\vervolghoofd{\vbox{}}
+\def\oddvervolghoofd{\vbox{}}\def\evenvervolghoofd{\vbox{}}
+\def\maakbriefhoofd
+ {\@ifstar {\@kortvervolgbriefhoofd}{\@langvervolgbriefhoofd}}
+\def\@kortvervolgbriefhoofd
+ #1#2{ \gdef\@stukname{#1}
+ \@maakbriefhoofd{\xxpt\sf #1}{\normalsize\sf #2}
+ \def\oddvervolghoofd{\normalsize\sf
+ \vbox{\hsize=\textwidth %4\refveldbreedte
+ \hbox to \hsize{\strut\hfil #2}
+ {\footnotesize\sf \hrule \@height 0.3ex \@width \hsize}
+ \kern2mm }}
+ \let\vervolghoofd=\oddvervolghoofd
+ \def\evenvervolghoofd{\normalsize\sf
+ \vbox{\hsize=\textwidth %4\refveldbreedte
+ \hbox to \hsize{#1\strut\hfil}
+ {\footnotesize\sf \hrule \@height 0.3ex \@width \hsize}
+ \kern2mm }}
+}
+
+\def\@langvervolgbriefhoofd
+ #1#2{ \gdef@stukname{#1}
+ \@maakbriefhoofd{\xxpt\sf #1}{\normalsize\sf #2}
+ \def\oddvervolghoofd{\normalsize\sf
+ \vbox{\briefhoofd\vskip2mm
+ \vbox{}}}
+ \let\vervolghoofd=\oddvervolghoofd
+ \def\evenvervolghoofd{\normalsize\sf
+ \vbox{\briefhoofd\vskip2mm
+ \vbox{}}}
+}
+\def\@maakbriefhoofd#1#2{\def\briefhoofd{%
+ \vbox{\normalsize\sf
+ \hsize=4\refveldbreedte
+ \hbox to \hsize{#1\strut\hfil}
+ \vskip 1.5mm
+ \hrule \@height.3ex \@width 4\refveldbreedte
+ \vskip 1.5mm
+ \hbox to \hsize {\strut \hfill \hbox{#2} }
+ }}}
+\maakbriefhoofd*{LAIOO}{Landelijk AiO Overleg}
+\gdef\@stukname{laioo} % vanwege de kleine letters
+\newbox\@voetruimte \setbox\@voetruimte=\hbox{}
+\newcount\@voetteller
+\def\voetregel{\hbox to 4.1\refveldbreedte{\leftskip=0pt\parskip=0pt
+ \vtop{\footnotesize\sf
+ \kern-\@firstpageskip
+ \hrule \@height 0.05ex \@width 4\refveldbreedte
+ \vskip 2mm
+ \if\@voetteller>0\copy\@voetruimte\else\defaultbox\fi} \hss}}
+\def\oddvervolgvoetregel{\vbox
+ {\hrule
+ \vskip 2mm
+ \hbox to \textwidth{\footnotesize\sf \@datum \hfill \thepage\hss}}}
+\def\evenvervolgvoetregel{\vbox
+ {\hrule
+ \vskip 2mm
+ \hbox to \textwidth{\footnotesize\sf \thepage \hfill \strut \hss}}}
+\let\vervolgvoetregel=\oddvervolgvoetregel
+\def\voetitem#1#2{\advance\@voetteller by 1
+ \setbox\@voetruimte=\hbox to 4\refveldbreedte
+ {\unhbox\@voetruimte
+ \ifcase\@voetteller \relax \or \relax \or
+ \hfil \else \hfill \fi
+ \@verrefveld{#1}{#2}\hskip0cm plus 3\refveldbreedte}}
+\def\ps@empty{
+ \def\@oddhead{}\def\@oddfoot{}
+ \def\@evenhead{}\def\@evenfoot{}}
+\def\ps@plain{
+ \def\@oddhead{}\def\@evenhead{}
+ \def\@oddfoot{\rm\hfil\thepage}
+ \let\@evenfoot=\@oddfoot}
+%% @hss omdat de kop en voet te breed zijn.
+\def\ps@headings{
+ \if@twoside\def\@oddhead{\vbox to \@otherheadheight
+ {\oddvervolghoofd\vfill
+ \if@streepjes\streepjes{\@otherheadheight}\fi}%
+ \hss}
+ \def\@evenhead{\vbox to \@otherheadheight
+ {\evenvervolghoofd\vfill}%
+ \hss}
+ \else\def\@oddhead{\vbox to \@otherheadheight
+ {\evenvervolghoofd\vfill
+ \if@streepjes\streepjes{\@otherheadheight}\fi}%
+ \hss}
+ \let\@evenhead=\@oddhead\fi
+ \def\@oddfoot{\oddvervolgvoetregel\@hss}
+ \def\@evenfoot{\evenvervolgvoetregel\@hss}
+}
+\def\ps@firstpage{
+\headheight=\@firstheadheight
+\global\textheight=\@othertextheight
+\global\headsep=\@otherheadsep
+ \def\@oddhead{\vbox to \@firstheadheight
+ {\briefhoofd\vfill
+ \hbox{\@stuknummerbox\@hss}
+ \if@streepjes\streepjes{\@firstheadheight}\fi}%
+ \hss}
+ \def\@evenhead{}
+ \def\@oddfoot{\voetregel\@hss}
+ \let\@evenfoot=\@oddfoot}
+
+%%%%%%%%%%%% default footing
+
+\def\location#1#2{\voetitem{Afzender:}{#1}\voetitem{}{#2} }
+\def\@Secretariaat{Secretariaat:}
+\def\@afzender{W.F.M. Spit}
+\def\@fromlocation{R.J. v.d. Graafflaboratorium \\
+ Postbus 80.000 \\
+ 3508~TA~~Utrecht}
+\def\telefoon#1{\def\@phonenr{#1}}
+\def\@phonenr{030--532330}
+\def\email#1{\def\@email{Email: #1}}
+\def\fax#1{\def\@fax{Telefax: #1}}
+\def\telex#1{\def\@telex{Telex: #1}}
+\def\@email{Email: nspit\at fys.ruu.nl}
+\def\@fax{Telefax: 030--518689}
+
+
+% \voetitem{\protect\@Secretariaat}{\protect\@afzender \\ \protect\@fromlocation}
+% \voetitem{}{\protect\telefoon: \protect\@phonenumber \\
+% \@fax \\
+% \@email }
+
+\def\defaultbox{\hbox to 4\refveldbreedte
+{ %\hfil
+ \@verrefveld{\@Secretariaat \hskip.2em}{\protect\@afzender}
+ \hskip-12mm
+ \@verrefveld{}{\protect\@fromlocation}
+ \@verrefveld{}{\protect\telefoon: \protect\@phonenr \\
+ \protect\@fax \\
+ \protect\@email }
+ \hfil
+}}
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% vouwstreepjes %%%%%%%%%%%%%%%%%%%%%%%%%%
+%% momenteel alleen envelop EN-DL-V geimplementeerd
+\def\streepje{\hbox to 2mm{\hrulefill}}
+\def\streepjes#1{\vbox to 0cm
+ {\kern-#1 %% dit brengt ons bovenin het briefhoofd, 13mm onder
+ \hbox to \textwidth %% de rand van het papier
+ {\llap{\perfstreepje\kern24mm}\hfill %% 7mm van rand op 33mm
+ \rlap{\kern18mm\vouwstreepjes}} %% 7mm van rand op 33mm
+ \vss}} %% zie textwidth boven.
+\def\perfstreepje {\vtop{\kern\z@
+ \kern 135mm %% 297/2 - 13
+ \streepje}}
+\def\vouwstreepjes{\vtop{\kern\z@
+ \kern 91mm % 92mm %% 105-13
+ \streepje %% denk maar dat dit geen dikte heeft
+ \kern 50mm %% 155-150
+ \streepje}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\string\startlabels\string\@startlabels}\fi
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+\def\enddocument{\@checkend{document}\newpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\makeatletter\input \jobname.aux\clearpage
+\fi\endgroup\deadcycles\z@\@@end}
+
+\def\makelabels{\@fileswtrue}
+\def\@startlabels{}
+
+
+\def\@texttop{\ifnum\c@page=1\vskip 0pt % plus 0.00006fil
+\relax\fi}
+%\def\p@sheadings{\def\@oddhead{\sl To \ignorespaces\toname \hfil \today
+%\hfil Page \thepage}\def\@oddfoot{}}
+% \def\ps@headings{%
+% \def\@oddhead{\sl\ignorespaces\toname \hfil \@date\hfil --\ \thepage}%
+% \def\@evenhead{\sl\ignorespaces\toname \hfil \@date\hfil --\ \thepage}%
+% \def\@oddfoot{}\def\@evenfoot{}}
+\def\ps@empty{%
+\def\@oddhead{}\def\@oddfoot{}\def\@evenhead{}\def\@evenfoot{}}
+\def\ps@plain{%
+\def\@oddhead{}\def\@oddfoot{\rm\hfil\thepage \hfil}%
+\def\@evenhead{}\let\@evenfoot\@oddfoot}
+
+\parskip 0.7em \parindent 0pt \topsep 0.4em \partopsep 0pt \itemsep 0.4em
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep 5pt
+\parsep 0pt
+\let\@listi\relax
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 0.2em
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -15pt\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15pt}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \it #1}
+\def\description{\list{}{\leftmargin\descriptionmargin
+ \labelwidth\leftmargin \advance\labelwidth -\labelsep
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth 0.4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = 0.4pt
+\def\footnoterule{\kern-1\p@
+ \hrule width 0.4\columnwidth
+ \kern 0.6\p@}
+
+\long\def\@makefntext#1{\noindent \hangindent 5pt\hbox
+ to 5pt{\hss $^{\@thefnmark}$}#1}
+
+\c@topnumber=2
+\def\topfraction{0.7}
+\c@bottomnumber=1
+\def\bottomfraction{0.3}
+\c@totalnumber=3
+\def\textfraction{0.2}
+\def\floatpagefraction{0.5}
+\c@dbltopnumber= 2
+\def\dbltopfraction{0.7}
+\def\dblfloatpagefraction{0.5}
+
+
+\smallskipamount=.5\parskip \medskipamount=\parskip
+\bigskipamount=2\parskip
+\frenchspacing
+\ps@empty \pagenumbering{arabic} \onecolumn \@fileswfalse
+% \raggedright
+
+
+% definities die eigenlijk wel in de preamble zouden kunnen
+%
+
+\newcommand{\ij}{i\hspace{-0.12em}j}
+\newcommand{\bau}{{\sc bau}}
+\newcommand{\aio}{{\sc aio}}
+\newcommand{\oio}{{\sc oio}}
+\newcommand{\ruu}{{\sc ruu}}
+\newcommand{\rug}{{\sc rug}}
+\newcommand{\rul}{{\sc rul}}
+\newcommand{\eur}{{\sc eur}}
+\newcommand{\uva}{{\sc uva}}
+\newcommand{\kun}{{\sc kun}}
+\newcommand{\kub}{{\sc kub}}
+\newcommand{\tud}{{\sc tud}}
+\newcommand{\tue}{{\sc tue}}
+\newcommand{\ut}{{\sc ut}}
+\newcommand{\rl}{{\sc rl}}
+\newcommand{\vu}{{\sc vu}}
+\newcommand{\luw}{{\sc luw}}
+\newcommand{\dcp}{{\sc dcp}}
+\newcommand{\nwo}{{\sc nwo}}
+\newcommand{\fom}{{\sc fom}}
+\newcommand{\cor}{{\sc cor}}
+\newcommand{\stw}{{\sc stw}}
+\newcommand{\laioo}{{\sc laioo}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% talen %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifcase\language % 0: Nederlands
+ \def\uwbrieftekst{Uw brief van}
+ \def\uwkenmerktekst{Uw kenmerk}
+ \def\onskenmerktekst{Ons kenmerk}
+ \def\datumtekst{Datum}
+ \def\geadresseerdetekst{Geadresseerde}
+ \def\bladnummertekst{Bladnummer}
+ \def\vandaag{\number\day~\ifcase\month\or
+ januari\or februari\or maart\or april\or mei\or juni\or juli\or
+ augustus\or september\or oktober\or november\or december\fi
+ \space \number\year}
+ \def\betrefttekst{Onderwerp}
+ \def\bijlagetekst{Bijlage:}
+ \def\bijlagentekst{Bijlagen:}
+ \def\telefoon{Telefoon}
+\or % 1: Engels
+ \def\uwbrieftekst{Your letter of}
+ \def\uwkenmerktekst{Your reference}
+ \def\onskenmerktekst{Our reference}
+ \def\datumtekst{Date}
+ \def\geadresseerdetekst{To}
+ \def\bladnummertekst{Page}
+ \def\vandaag{\ifcase\day\or
+ 1st\or 2nd\or 3rd\or 4th\or 5th\or
+ 6th\or 7th\or 8th\or 9th\or 10th\or
+ 11th\or 12th\or 13th\or 14th\or 15th\or
+ 16th\or 17th\or 18th\or 19th\or 20th\or
+ 21st\or 22nd\or 23rd\or 24th\or 25th\or
+ 26th\or 27th\or 28th\or 29th\or 30th\or
+ 31st\fi~\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space \number\year}
+ \def\betrefttekst{Subject}
+ \def\bijlagetekst{Enclosure:}
+ \def\bijlagentekst{Enclosures:}
+ \def\telefoon{Telephone}
+\or % 2: Amerikaans
+ \def\uwbrieftekst{Your letter of}
+ \def\uwkenmerktekst{Your reference}
+ \def\onskenmerktekst{Our reference}
+ \def\datumtekst{Date}
+ \def\geadresseerdetekst{To}
+ \def\bladnummertekst{Page}
+ \def\vandaag{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+ \def\betrefttekst{Subject}
+ \def\bijlagetekst{Enclosure:}
+ \def\bijlagentekst{Enclosures:}
+ \def\telefoon{Telephone}
+\or % 3: Duits
+ \def\uwbrieftekst{Ihr Brief von}
+ \def\uwkenmerktekst{Ihr Zeichen}
+ \def\onskenmerktekst{Unser Zeichen}
+ \def\datumtekst{Datum}
+ \def\geadresseerdetekst{An}
+ \def\bladnummertekst{Zettel}
+ \def\vandaag{\number\day.~\ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember\fi
+ \space\number\year}
+ \def\betrefttekst{Betrifft}
+ \def\bijlagetekst{Anlage:}
+ \def\bijlagentekst{Anlagen:}
+ \def\telefoon{Telephoon}
+\fi
+% et qui parle Fran\c{c}ais, nowadays?
+
+\newcounter{figure}
+% \def\fnum@figure{\figurename{} \thefigure} %V from Dutch
+\def\thefigure{}
+% \def\fps@figure{tbp}
+\def\ftype@figure{1}
+% \def\ext@figure{lof}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+
+
+%
+\def\today{\vandaag}
+\ps@headings
+\ds@streepjes
+\datum{\vandaag}
+
diff --git a/macros/latex209/contrib/misc/landscape.sty b/macros/latex209/contrib/misc/landscape.sty
new file mode 100644
index 0000000000..3a71b8bc89
--- /dev/null
+++ b/macros/latex209/contrib/misc/landscape.sty
@@ -0,0 +1,12 @@
+% Landscape style file
+% Don Hosek 2/5/88
+\marginparwidth 0pt
+\oddsidemargin 0pt
+\evensidemargin 0pt
+\marginparsep 0pt
+
+\topmargin 0pt
+
+\textwidth 9in
+\textheight 6in
+
diff --git a/macros/latex209/contrib/misc/latex-go-board.tex b/macros/latex209/contrib/misc/latex-go-board.tex
new file mode 100644
index 0000000000..b44b676d7c
--- /dev/null
+++ b/macros/latex209/contrib/misc/latex-go-board.tex
@@ -0,0 +1,68 @@
+%% A Sample of LaTeX Go Board
+%% Youyi Chen
+%% University of Waterloo, Dept. of Statistics and Actuarial Science
+%% ychen@aftermath.waterloo.edu
+%% Sept. 1990
+%%
+\documentstyle[12pt]{article}
+\pagestyle{empty}
+
+\begin{document}
+\centerline{{\Huge No Way Out?}}
+\vspace{.5in}
+\begin{center}
+\setlength{\unitlength}{5mm}
+\begin{picture}(18,18)(1,1)
+
+%% moves
+\put(6,3){\circle*{1}}
+\put(7,3){\circle*{1}}
+\put(8,3){\circle*{1}}
+\put(5,4){\circle*{1}}
+\put(9,4){\circle*{1}}
+\put(5,6){\circle*{1}}
+\put(9,6){\circle*{1}}
+\put(7,6){\circle*{1}}
+\put(7,7){\circle*{1}}
+
+\put(6,4){\circle{1}}
+\put(7,4){\circle{1}}
+\put(8,4){\circle{1}}
+\put(6,5){\circle{1}}
+\put(8,5){\circle{1}}
+%% the board
+%% horizontal
+\multiput(1,1)(0,1){3}{\line(1,0){18}}
+
+\put(1,4){\line(1,0){4}}
+\put(9,4){\line(1,0){10}}
+
+\put(1,5){\line(1,0){4.5}}
+\put(6.5,5){\line(1,0){1}}
+\put(8.5,5){\line(1,0){10.5}}
+
+\multiput(1,6)(0,1){14}{\line(1,0){18}}
+
+%%vertical
+\multiput(1,1)(1,0){5}{\line(0,1){18}}
+
+\put(6,1){\line(0,1){2}}
+\put(6,5.5){\line(0,1){13.5}}
+
+\put(7,1){\line(0,1){2}}
+\put(7,4.5){\line(0,1){14.5}}
+
+\put(8,1){\line(0,1){2}}
+\put(8,5.5){\line(0,1){13.5}}
+
+\multiput(9,1)(1,0){11}{\line(0,1){18}}
+
+%% the stars
+\multiput(4,4)(6,0){3}{\circle*{0.3}}
+\multiput(4,10)(6,0){3}{\circle*{0.3}}
+\multiput(4,16)(6,0){3}{\circle*{0.3}}
+
+\end{picture}
+\end{center}
+\end{document}
+
diff --git a/macros/latex209/contrib/misc/lcaption.sty b/macros/latex209/contrib/misc/lcaption.sty
new file mode 100644
index 0000000000..eb1714782d
--- /dev/null
+++ b/macros/latex209/contrib/misc/lcaption.sty
@@ -0,0 +1,50 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% lcaption.sty 1.0
+%
+% Provides smart formatting of long captions. The captions are
+% formatted like:
+% Figure 1: This is a
+% long text.
+%
+% <-----\CapSize----->
+%
+% If \CapSize is set to ZERO, it will fit the caption to \hsize
+% (the width of the surrounding text)
+%
+% The syntax is \lcaption[short]{long} just like LaTeX's caption command.
+% the [short] argument may be omitted.
+%
+% The command \smartcap will make \caption act like \lcaption. It
+% should be used only once.
+%
+% \CapSize defaults to ZERO, and may be set by a command like:
+%
+% \CapSize=5in
+%
+% Based on original by Lars P. Fischer <fischer@iesd.auc.dk>
+% Parts of the code is taken from latex.tex (c) by Leslie Lamport
+% Put together by Kresten Krab Thorup <Krab@iesd.auc.dk> january 1991
+% You may not redistribute modified versions of this code, unless
+% you name it to something else than lcaption.sty
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\typeout{Style Option `lcaption' r1.0 <01/06/91> (KKT)}
+
+\newdimen\CapSize\CapSize\z@
+
+\long\def\@lmakecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1:\ }
+ \@tempdima\hsize\advance\@tempdima-\wd\@tempboxa
+ \ifdim\CapSize=\z@\else
+ \ifdim\@tempdima>\CapSize \@tempdima\CapSize\fi\fi
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim\wd\@tempboxa<\hsize\hfil #1: #2\hfil\par\else
+ \hbox to\hsize{\hfil #1: \parbox[t]\@tempdima{#2}\hfil}
+ \fi}
+
+\def\lcaption{\let\@makecaption\@lmakecaption\caption}
+
+\def\smartcap{\def\caption{\let\@makecaption\@lmakecaption
+\refstepcounter\@captype \@dblarg{\@caption\@captype}}}
+
+
diff --git a/macros/latex209/contrib/misc/lcustom.tex b/macros/latex209/contrib/misc/lcustom.tex
new file mode 100644
index 0000000000..c76a75ad8e
--- /dev/null
+++ b/macros/latex209/contrib/misc/lcustom.tex
@@ -0,0 +1,429 @@
+% LaTeX customization
+
+
+\makeatletter % for a little while
+
+\def\inputverbatim#1{%
+\begingroup \catcode``=13 \@noligs \tt \let\do\@makeother \dospecials
+\obeylines \obeyspaces \frenchspacing \input #1 \endgroup }
+
+% plain TeX compatibility
+
+\def\oldstyle{\xdef\@oldstyle{\the\textfont\@ne}\mit\@oldstyle}
+
+
+% PhD-TeX compatibility
+
+\def\showsummary{%
+ \begingroup
+ \def\note##1{%
+ \ifcase\value{##1}no ##1s\or
+ 1 ##1\else
+ \the\value{##1} ##1s\fi
+ }%
+ \typeout{LaTeX summary: \note{figure}, \note{table}, \note{footnote}.}%
+ \endgroup
+}
+
+\def\smaller{\footnotesize}
+
+
+% Float Support
+
+\def\topfraction{0.85}
+\def\textfraction{0.20}
+\def\floatpagefraction{0.85}
+\def\dbltopfraction{0.85}
+\def\dblfloatpagefraction{0.85}
+
+
+% \tagfigure*[FLOAT]{FILE}{CAPTION}{LABEL}
+% * optional
+% FLOAT float options
+% FILE reads TPIC output in file figureFILE
+% CAPTION for list of figures
+% LABEL for \ref and \pageref
+\def\tagfigure{\@ifstar{\@stagfigure}{\@tagfigure}}
+\def\@tagfigure{\@ifnextchar[{\@@tagfigure}{\@@tagfigure[t]}}
+\def\@stagfigure{\@ifnextchar[{\@@stagfigure}{\@@stagfigure[t]}}
+
+\def\@@tagfigure[#1]#2{%
+ \@@@tagfigure[#1]{\input figure#2\relax\centerline{\box\graph}}}
+\def\@@stagfigure[#1]#2{%
+ \@@@stagfigure[#1]{\input figure#2\relax\centerline{\box\graph}}}
+
+
+% \tagdiagram*[FLOAT]{FILE}{CAPTION}{LABEL}
+% * optional
+% FLOAT float options
+% FILE reads LaTeX input in file diagramFILE
+% CAPTION for list of figures
+% LABEL for \ref and \pageref
+\def\tagdiagram{\@ifstar{\@stagdiagram}{\@tagdiagram}}
+\def\@tagdiagram{\@ifnextchar[{\@@tagdiagram}{\@@tagdiagram[t]}}
+\def\@stagdiagram{\@ifnextchar[{\@@stagdiagram}{\@@stagdiagram[t]}}
+
+\def\@@tagdiagram[#1]#2{\@@@tagfigure[#1]{\input diagram#2\relax}}
+\def\@@stagdiagram[#1]#2{\@@@stagfigure[#1]{\input diagram#2\relax}}
+
+
+% \tagverbatim*[FLOAT]{FILE}{CAPTION}{LABEL}
+% * optional
+% FLOAT float options
+% FILE reads LaTeX input in file FILE and inserts in in verbatim mode.
+% CAPTION for list of figures
+% LABEL for \ref and \pageref
+\def\tagverbatim{\@ifstar{\@stagverbatim}{\@tagverbatim}}
+\def\@tagverbatim{\@ifnextchar[{\@@tagverbatim}{\@@tagverbatim[t]}}
+\def\@stagverbatim{\@ifnextchar[{\@@stagverbatim}{\@@stagverbatim[t]}}
+
+\def\@@tagverbatim[#1]#2{\@@@tagfigure[#1]{\inputverbatim{#2}}}
+\def\@@stagverbatim[#1]#2{\@@@stagfigure[#1]{\inputverbatim{#2}}}
+
+
+\def\@@@tagfigure[#1]#2#3#4{%
+ \begin{figure}[#1]
+ \hrule
+ \vskip .5\baselineskip
+ \begin{minipage}\columnwidth
+ \small#2%
+ \end{minipage}
+ \vskip .5\baselineskip plus .5\baselineskip
+ \begingroup
+ \setbox\z@=\hbox{#4}%
+ \ifdim\wd\z@>\z@
+ \caption{#3}%
+ \label{#4}%
+ \else
+ \captcont{#3}%
+ \fi
+ \endgroup
+ \vskip 2pt
+ \hrule
+ \end{figure}
+}
+
+\def\@@@stagfigure[#1]#2#3#4{%
+ \begin{figure*}[#1]
+ \hrule
+ \vskip .5\baselineskip
+ \begin{minipage}\textwidth
+ \small#2%
+ \end{minipage}
+ \vskip .5\baselineskip plus .5\baselineskip
+ \begingroup
+ \setbox\z@=\hbox{#4}%
+ \ifdim\wd\z@>\z@
+ \caption{#3}%
+ \label{#4}%
+ \else
+ \captcont{#3}%
+ \fi
+ \endgroup
+ \vskip 2pt
+ \hrule
+ \end{figure*}
+}
+
+
+% \tagtable*[FLOAT]{FILE}{CAPTION}{LABEL}
+% * optional
+% FILE read LaTeX input in file tableFILE
+% FLOAT float options
+% CAPTION for list of tables
+% LABEL for \ref and \pageref
+\def\tagtable{\@ifstar{\@stagtable}{\@tagtable}}
+\def\@tagtable{\@ifnextchar[{\@@tagtable}{\@@tagtable[t]}}
+\def\@stagtable{\@ifnextchar[{\@@stagtable}{\@@stagtable[t]}}
+
+\def\@@tagtable[#1]#2#3#4{%
+ \begin{table}[#1]
+ \hrule
+ \vskip .5\baselineskip
+ \begin{minipage}\textwidth
+ \small\input table#2\relax
+ \end{minipage}
+ \vskip .5\baselineskip plus .5\baselineskip
+ \begingroup
+ \setbox\z@=\hbox{#4}%
+ \ifdim\wd\z@>\z@
+ \caption{#3}%
+ \label{#4}%
+ \else
+ \captcont{#3}%
+ \fi
+ \endgroup
+ \vskip 2pt
+ \hrule
+ \end{table}
+}
+
+\def\@@stagtable[#1]#2#3#4{%
+ \begin{table*}[#1]
+ \hrule
+ \vskip .5\baselineskip
+ \begin{minipage}\columnwidth
+ \small\input table#2\relax
+ \end{minipage}
+ \vskip .5\baselineskip plus .5\baselineskip
+ \begingroup
+ \setbox\z@=\hbox{#4}%
+ \ifdim\wd\z@>\z@
+ \caption{#3}%
+ \label{#4}%
+ \else
+ \captcont{#3}%
+ \fi
+ \endgroup
+ \vskip 2pt
+ \hrule
+ \end{table*}
+}
+
+
+% Environments:
+
+% DESCRIBE - similar to DESCRIPTION, but indents extra on left margin of
+% outer list
+
+\def\describe{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \ifnum\@listdepth=1 \advance\leftmargin by2em\fi
+ \let\makelabel\descriptionlabel}}
+\let\enddescribe=\endlist
+
+
+% Document style options:
+% 10pt - Makes ten-point type the normal (default) type size
+% draftnote - Customized draft option
+
+\@namedef{ds@10pt}{\def\@ptsize{0}} %%% for orthogonality
+
+
+\newif\ifdraft \draftfalse
+
+\def\draftstring{{\ifdraft \tt Draft\fi}}
+
+\def\draftext{%
+ \ifdraft
+ \begingroup
+ \tt
+ \ifodd\c@page
+ \LaTeX set \today\ with \fmtname\ v\fmtversion
+ \else
+ Draft \versiontag/ of \versiondate/
+ \fi
+ \endgroup
+ \fi
+}
+
+\def\ds@draftnote{%
+ \drafttrue
+ \@ifundefined{ds@draft}{}{\ds@draft}%
+ \def\ps@plain{%
+ \let\@mkboth=\@gobbletwo
+ \def\@oddhead{\draftext\hfil}%
+ \def\@oddfoot{\draftstring\hfil\rm\thepage\hfil\draftstring}%
+ \def\@evenhead{\hfil\draftext}%
+ \let\@evenfoot=\@oddfoot
+ }%
+ \let\ps@@headings=\ps@headings
+ \def\ps@headings{%
+ \ps@@headings
+ \def\@oddfoot{\draftext\hfil}%
+ \def\@evenfoot{\hfil\draftext}%
+ }%
+}
+
+
+% Page Styles
+
+% \pagestyle{myfootings} similar to the myheadings command but also permits
+% the user to define foot information as well as head information
+% \markleftfoot{left_foot} specifies the foot for odd-numbered
+% pages
+% \markrightfoot{right_foot} specifies the foot for even-numbered
+% pages
+% N.B. DOES NOT USE MARKS TO ACCOMPLISH THIS, OWING TO CONFLICT WITH HEADING
+% ROUTINES
+
+\def\ps@myfootings{\ps@myheadings}
+
+\def\markleftfoot#1{\def\@evenfoot{\hbox{}\sl#1\hfil}}
+\def\markrightfoot#1{\def\@oddfoot{\hfil\sl#1\hbox{}}}
+
+
+% \pagestyle{reprint} similar to plain page style in draft mode
+
+\let\reprintext=\draftext
+\let\reprintstring=\draftstring
+
+\def\ps@reprint{%
+ \def\draftext{%
+ \ifdraft
+ \begingroup
+ \tt
+ \ifodd\c@page
+ \LaTeX set \today
+ \else
+ Draft \versiontag/
+ \fi
+ \endgroup
+ \fi
+ }%
+ \def\@oddhead{\reprintext\hfil\draftext}%
+ \def\@oddfoot{\reprintstring\hfil\rm\thepage}%
+ \def\@evenhead{\draftext\hfil\reprintext}%
+ \def\@evenfoot{\rm\thepage\hfil\reprintstring}%
+}
+
+
+% The Title
+
+\def\title#1{%
+ \gdef\@title{#1}%
+ \gdef\banner{%
+ \newpage\setcounter{page}{1}%
+ \begin{center}\Large#1\end{center}%
+ }%
+}
+
+
+% Miscellany
+
+\def\implies{\quad\supset\ }
+
+\def\tdots{\ldots\thinspace}
+
+\def\boxit#1{\fbox{\sc#1}}
+
+\def\note#1{\ifdraft\marginpar{\tt#1}\fi}
+
+
+% Fractions (from The TUGboat v6 n1, 1985)
+
+\def\myfrac#1/#2{%
+ \leavevmode\kern.1em
+ \raise.5ex\mbox{\the\scriptfont\z@ #1}\kern-.1em
+ /\kern-.15em\lower.25ex\mbox{\the\scriptfont\z@ #2}%
+}
+
+
+% Trademarks...
+
+\input trademark.sty
+
+
+% Continuation Captions...
+
+\input captcont.sty
+
+
+% Startup
+
+\xdef\today{%
+ \ifcase\month
+ \number\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\else
+ \number\month\fi
+ \space\number\day, {\noexpand\mit\number\year}%
+}
+
+\begingroup
+ \count0=\time
+ \count1=\count0
+ \divide\count0 by 60
+ \count2=\count0
+ \multiply\count0 by 60
+ \advance\count1 by -\count0
+ \ifnum\count2>11
+ \ifnum\count2>12 \advance\count2 by -12\fi
+ \def\ampm{pm}%
+ \else
+ \ifnum\count2=0 \advance\count2 by 12\fi
+ \def\ampm{am}%
+ \fi
+ \xdef\daytime{%
+ \ifnum\count2<10 0\fi \the\count2:%
+ \ifnum\count1<10 0\fi \the\count1
+ \ampm
+ }%
+\endgroup
+
+
+\makeatother % back to normal
+
+%
+%Mail-From: BEEBE created at 3-Dec-86 11:41:39
+%Date: Wed 3 Dec 86 11:41:39-MST
+%From: "Nelson H.F. Beebe" <Beebe@UTAH-SCIENCE.ARPA>
+%Subject: Funny behaviour of itemize with long item keys
+%To: jrp%nplpsg%uucp@CS.UCL.AC.UK
+%cc: BEEBE@UTAH-SCIENCE.ARPA
+%X-US-Mail: "Center for Scientific Computation, South Physics,
+%University of Utah, Salt Lake City, UT 84112"
+%X-Telephone: (801) 581-5254
+%Message-ID: <12259892637.20.BEEBE@UTAH-SCIENCE.ARPA>
+%ReSent-Date: Wed 3 Dec 86 16:31:14-MST
+%ReSent-From: "Nelson H.F. Beebe" <Beebe@UTAH-SCIENCE.ARPA>
+%ReSent-To: jrp%nplpsg%uucp@SEISMO.CSS.GOV
+%ReSent-Message-ID: <12259945355.20.BEEBE@UTAH-SCIENCE.ARPA>
+%
+%In TeXHaX #10 you ask for a solution for the itemize
+%environment where long keys do not cause a line break, when
+%they would look nicer if they did.
+%
+%I met this problem in writing my TECO manual, and here is my
+%solution. First, I have two environments:
+%
+%% ======================================================================
+%% commandtable generates a list with the item entered into the index
+%% and the item label flush left in \tt font. It is intended for
+%% documenting TECO commands.
+%\newcommand{\tablelabel}[1]{\mbox{\tt#1}\hfil\INDEX{{\string\tt\space #1}}{#1}}
+%\newenvironment{commandtable}{
+% \begin{list}{}
+% {
+% \let\makelabel\tablelabel
+% \setlength{\labelwidth}{30pt}
+% \setlength{\leftmargin}{1.1\labelwidth}
+% }
+% }{\end{list}}
+%
+%% ======================================================================
+%% commandentry generates a list with the item label flush left in \sf
+%% font. It is intended for the TECO command descriptions.
+%
+%\newcommand{\entrylabel}[1]{\mbox{\sf#1:}\hfil}
+%\newenvironment{commandentry}{
+% \begin{list}{}
+% {
+% \let\makelabel\entrylabel
+% \setlength{\labelwidth}{40pt}
+% \setlength{\leftmargin}{1.1\labelwidth}
+% }
+% }{\end{list}}
+%
+%Then I have a newline macro:
+%\newcommand{\NEWLINE}{\mbox{}\\ \vspace*{-\baselineskip}}
+%
+%Here is how they are used:
+% \begin{commandtable}
+% \item[\protect\CTL{\BS{}}]\NEWLINE{}
+% \begin{commandentry}
+% \item[Action]
+% Returns from a function. If issued at top-level,
+% the interpreter simply terminates, just as if
+% end of input had been reached.
+% \item[Errors]
+% None.
+% \item[Return values]
+% Any arguments in effect are passed back to the
+% caller.
+% \end{commandentry}
+% ...etc...
+% \end{commandtable}
+%
+%The other two macros listed are unimportant, but here they are:
+%\newcommand{\BS}{{\tt\symbol{92}}} % ASCII backslash
+%\newcommand{\NEWLINE}{\mbox{}\\ \vspace*{-\baselineskip}}
diff --git a/macros/latex209/contrib/misc/listoftheorem.sty b/macros/latex209/contrib/misc/listoftheorem.sty
new file mode 100644
index 0000000000..905167dacd
--- /dev/null
+++ b/macros/latex209/contrib/misc/listoftheorem.sty
@@ -0,0 +1,123 @@
+%%
+%% LaTeX Style sheet to permit theorem environments to generate
+%% table-of-contents-like entries similar to those produced
+%% bye the \listoffigures command.
+%% ...Art Mulder, July/90 art@maccs.DCSS.mcmaster.ca
+%% ...!uunet!utai!utgpu!maccs!art
+%%
+%% Permission granted to do whatever you want with this style
+%% file. Use at your own risk, it works for me, but I make no
+%% warranty as to its performance.
+
+%% STEP ONE:
+%% modify one of the 'begin theorem' commands so that it executes an
+%% \addcontentsline, on a file called whatever the theorem is. ie: if
+%% this is a "theo" type theorem, them write on a file called foo.theo
+
+%% %% based on \@thm macro found in latex.tex and modified to suit
+%% %% my purposes
+%%
+%% % \@thm{NAME}{TEXT} ==
+%% % BEGIN
+%% % \addcontentsline{NAME}{figure}{\theNAME}
+%% %% ^ above line added by art mulder
+%% % \refstepcounter{NAME}
+%% % if next char = [
+%% % then \@ythm{NAME}{TEXT}
+%% % else \@xthm{NAME}{TEXT}
+%% % fi
+%% % END
+%%
+%% \def\@thm#1#2{\addcontentsline{#1}{figure}{\protect
+%% \numberline{\csname the#1\endcsname}}
+%% \refstepcounter
+%% {#1}\@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}}
+%%
+%% THIS ABOVE CODE WORKS, HOWEVER IT MAKES NO PROVISION FOR INCLUDING
+%% THE OPTIONAL ARGUMENT IN THE LISTING. THIS NEXT CODE (UP TO STEP TWO)
+%% DOES INCLUDE THE OPTIONAL ARGUMENT IN THE LISTING.
+
+%% based on \@xthm and \@ythm macros found in latex.tex
+
+% \@xthm{NAME}{TEXT} ==
+% BEGIN
+% \addcontentsline{NAME}{figure}{\theNAME}
+%% ^ above line added by art mulder
+% \@begintheorem{TEXT}{\theNAME}
+% \ignorespaces
+% END
+%
+% \@ythm{NAME}{TEXT}[OPARG] ==
+% BEGIN
+% \addcontentsline{NAME}{figure}{\theNAME OPARG}
+%% ^ above line added by art mulder
+%% Put the Optional Argument into the List-Of file
+% \@opargbegintheorem{TEXT}{\theNAME}{OPARG}
+% \ignorespaces
+% END
+
+\def\@xthm#1#2{\addcontentsline{#1}{figure}{\protect
+ \numberline{\csname the#1\endcsname}}
+ \@begintheorem{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@ythm#1#2[#3]{\addcontentsline{#1}{figure}{\protect
+ \numberline{\csname the#1\endcsname}{\ignorespaces #3}}
+ \@opargbegintheorem{#2}{\csname
+ the#1\endcsname}{#3}\ignorespaces}
+
+%% STEP TWO:
+%% write \listof{}{} macro to generate lists of desired theorem
+%% environments.
+
+%% based on listoffigures macro from book.doc (or book.sty)
+
+\def\listof#1#2{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{List of #1\@mkboth
+ {LIST OF \uppercase{#1}}{LIST OF \uppercase{#1}}}
+ \@starttoc{#2}\if@restonecol \twocolumn\fi}
+
+%\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}
+
+%%--------------------
+%% INSTRUCTIONS FOR USE:
+%% - read the sections in the LaTeX manual in regards to:
+%% \addcontentsline, \newtheorem
+%% - use a theorem envornment as usual (all changes there are "behind the
+%% scenes" so you don't have to do anything different)
+%% - insert a \listof command in your document wherever you want a
+%% listing to go (DISCLAIMER: I have only tried this at the
+%% front of the book, following the Table of Contents)
+%% - the listof command has the following form:
+%% \listof{HEADING}{THEOREM_ENV_NAME}
+%% where:
+%% HEADING = whatever you want to follow the words
+%% "List Of" in the heading.
+%% THEOREM_ENV_NAME = the environment name that you gave
+%% to your theorem environment.
+
+%% EXAMPLE USAGE:
+%% - define a theorem environment:
+%% \newtheorem{lem}{Lemma}[section]
+%% ^ define a "Lemma" theorem environment, numbered within
+%% chapters (NO CHANGE from before use of
+%% listoftheorem.sty)
+%%
+%% - request a list of theorems
+%% \listof{Lemmas}{lem}
+%% ^ will now get a listing similar to a "list of figures"
+%% entitled "List Of Lemmas".
+%%
+%% - use the lemma theorem environment
+%% \begin{lem}
+%% blah blah
+%% \end{lem}
+%% ^ In addition to what the theorem environment would
+%% normally do, this will write a "list of lemmas"
+%% entry on a file entitled foo.lem, where foo is the name
+%% of the document (as in foo.tex).
+%% Note there is NO CHANGE in use from before use of
+%% listoftheorem.sty
+
+%% BUGS:
+%% - two theorem environments can share a counter (see numbered_like
+%% option in definition of Theorem environments in LaTeX manual)
+%% But there is no way for two theorem environments to share listing.
diff --git a/macros/latex209/contrib/misc/local-suppl.tex b/macros/latex209/contrib/misc/local-suppl.tex
new file mode 100644
index 0000000000..d62e4b0a50
--- /dev/null
+++ b/macros/latex209/contrib/misc/local-suppl.tex
@@ -0,0 +1,105 @@
+\subsubsection{The {\tt a4} and {\tt a4wide} Style Options}
+
+By default, the output page is designed to be printed on US paper.
+The {\tt a4} and {\tt a4wide} style options result in output
+that fits better onto A4 size pages.
+It is sometimes convenient to be able to fit more text onto an A4 page.
+The {\tt a4wide} option accomplishes this by using narrower margins.
+
+\subsubsection{The {\tt tgrind} Style Option}{\label{tagrind}}
+
+It is useful to be able to include program fragments as figures in a
+text. The {\tt tgrind} style option can be used to accomplish this
+fairly painlessly by defining the \verb|\tagrind| command.
+
+The \verb|\tagrind| command has the following proforma:
+\begin{itemize} \tt
+\item[]
+\verb|\tagrind*|[{\it loc\/}]\{{\it file\/}\}\{{\it caption \/}\}\{{\it
+label \/}\}
+\end{itemize}
+
+As usual,
+\begin{itemize}
+\item in two-column format, the ordinary form produces a
+single-column listing and the $\ast$-forms produces a double-column listing;
+
+\item {\it loc\/}
+is a sequence of one to four of the letters \verb|h| ({\it here\/}),
+\verb|t| ({\it top\/}), \verb|b| ({\it bottom\/}) and \verb|p| ({\it
+page\/}) specifying where the listing may be placed.
+
+\item {\it file} specifies the file from which the ground listing
+is to be taken.
+
+\item {\it caption} produces a numbered caption.
+
+\item {\it label} assigns a label to the listing, so that it may be
+referred to by means to the \verb|\ref{|{\it label\/}\verb|}| command.
+
+\end{itemize}
+
+The listing file should be generated using {\tt tgrind} and removing
+the first and last lines of the resulting file. For example, if the C
+source file {\tt file.c} were to be used as a listing,
+\begin{verbatim}
+ tgrind -f -lc file.c | sed -e 1d -e \$d >file.tex
+\end{verbatim}
+would generate a file {\tt file.tex} suitable for use
+with \verb|tagrind|. For example,
+\begin{verbatim}
+\tagrind{file}{This is an example}{eg}
+\end{verbatim}
+
+\subsubsection{The {\tt sfwmac} Style Option}
+
+The {\tt sfwmac} style option defines a set of macros which are
+useful when writing program documentation. The \verb|\pgm{|{\it
+program\/}\verb|}| command expects a program name as an argument.
+The name in printed (in italics) and an index entry is made for it.
+Similarly, the \verb|\man{|{\it program\/}\verb|}(|{\it
+section\/}\verb|)| command may be used to produce references to
+manual page entries.
+The \verb|\arg{|{\it argument\/}\verb|}|, \verb|\switch{|{\it
+switch\/}\verb|}| and \verb|\file{|{\it file\/}\verb|}| commands may be
+used when referring to program arguments and switches and to
+filenames. These produce no index entry.
+
+This style also defines a number of common program names such as
+\latex/, \slitex/, etc. These are produced by means of
+\verb|\LaTeX|, \verb|\SLiTeX| commands and indexed.
+
+Suggestions for additions to the list of defined program names are
+welcome.
+
+\subsubsection{The {\tt trademark} Style Option}
+
+The {\tt trademark} style option defines a number of trademarks and
+trade names. For example, \Unix/ (note the automatically defined
+footnote) was produced by a \verb|\Unix/| command. Note that there
+is no need to append \verb*|\ | or \verb|{}| to prevent the
+swallowing up of succeeding spaces.
+
+Suggestions for additions to the list of trademarks are welcome.
+
+\subsubsection{The {\tt lcustom} Style Option}
+
+This style contains a whole bunch of useful little command
+definitions. The \verb|\inputverbatim{|{\it file\/}\verb|}|
+command inserts the file in verbatim mode. However, it is usually
+better to use the \verb|\tagrind| command described in section
+\ref{tagrind} for this purpose. A number of further commands
+provide a clean way of introducing diagrams and tables from
+subsidiary files. They are similar in form and usage to the to the
+\verb|\tagrind| command.
+
+\subsubsection{The {\tt vdm} Style Option}
+
+The {\tt vdm} style option aids typesetting of VDM specifications: it
+provides macros for typesetting formulae, data types, functions,
+operations and proofs in whatever the currently approved VDM manner
+happens to be. A copy of the user manual for the {\tt vdm} style option
+can be obtained by typing
+\begin{verbatim}
+ latex /usr/lib/tex/macros/vdm.tex
+\end{verbatim}
diff --git a/macros/latex209/contrib/misc/losymbol.sty b/macros/latex209/contrib/misc/losymbol.sty
new file mode 100644
index 0000000000..8325dc6cdb
--- /dev/null
+++ b/macros/latex209/contrib/misc/losymbol.sty
@@ -0,0 +1,65 @@
+%------------------8<--------------------8<------------8<--------------
+%losymbol.sty by gerry van dooren, may 1992, revised august 1992.
+% elecgd@urc.tue.nl
+%
+%definition is nearly analogous to the setup for list of figures
+%and list of tables; use same definition using \@starttoc,
+%however default extension is now .los
+%
+%MODIFICATIONS:
+%
+%1. losymbol.sty can now always be used, without paying attention to the
+% style file used in de main document (using if undefined) <aug 1992>.
+%
+%2. It appeared that, if the list of symbols is larger than one page,
+% the pagenumber of the list in the table of contents was the last page
+% of the list of symbols. This is also repaired by interchanging the
+% \addcontentsline{} and the \starttoc{} statements <july 1992>.
+%
+%PROBLEMS ENCOUNTERED:
+%
+%1. If the explanation of the symbols is longer than the width of the
+% right column, the linespacing is not uniform anymore. The solution
+% to this problem is not yet found <july 1992>.
+%
+\def\losymbolsname{List of symbols}
+\def\listofsymbols{\@ifundefined{chapter}{%
+ \section*{\losymbolsname \@mkboth
+ {\uppercase{\losymbolsname}}{\uppercase{\losymbolsname}}}
+ \addcontentsline{toc}{section}{\losymbolsname}\@starttoc{los}
+ }{%
+ \chapter*{\losymbolsname \@mkboth
+ {\uppercase{\losymbolsname}}{\uppercase{\losymbolsname}}}
+ \addcontentsline{toc}{chapter}{\losymbolsname}\@starttoc{los}
+ }
+}
+%
+%command for putting text in file \jobname.loa is \addsymbol
+%command that is used for actually producing text is called
+%\makenicesymbolline
+\def\addsymbol#1#2{%
+\addtocontents{los}{\protect \makenicesymbolline{#1}{#2}}}
+%
+%physical dimensions of columns
+%
+\newdimen\@lcsym %width of left column
+\@lcsym=3cm %default 3cm
+%
+\newdimen\@mcsym %width of mid column (space)
+\@mcsym=2cm %default 2cm
+%
+\newdimen\@rcsym %width of right column
+\@rcsym=\hsize %initial width=textwidth
+%
+\advance\@rcsym by -\@lcsym %subtract lcsym
+\advance\@rcsym by -\@mcsym %subtract mid
+%
+%command for producing the actual line uses standard minipages
+%to cope with long definitions
+%
+\def\makenicesymbolline#1#2{%
+\begin{minipage}[t]{\@lcsym}#1\end{minipage}%
+$\hspace{\@mcsym}$%
+\begin{minipage}[t]{\@rcsym}#2\end{minipage}\newline}
+%
+%end of losymbol.sty
diff --git a/macros/latex209/contrib/misc/lslide.sty b/macros/latex209/contrib/misc/lslide.sty
new file mode 100644
index 0000000000..925e6688e4
--- /dev/null
+++ b/macros/latex209/contrib/misc/lslide.sty
@@ -0,0 +1,707 @@
+%% Save file as: LSLIDE.STY Source: FILESERV@SHSU.BITNET
+% lslide.sty - version 2.0.1 (April 1992)
+% by Young U. Ryu
+%
+% o There is a sample file in the end of the commented area.
+% LaTeX (or AmSLaTeX) it at least twice and print.
+% ^^^^^
+% The remainder of the original header information and example file are
+% in the file STY.LSLIDE_TEX on FILESERV/Niord.
+%
+% Noted modifications by Keith Farkas <farkas@eecg.toronto.edu> posted
+% to comp.text.tex on 21 Apr 92 15:43:52 GMT:
+% I have added a new vertical centering option to the slide style file
+% writen by Yong Ryu. The new option is \vertgroup and is like \vertcenter
+% with the exception that \vspace{2em} is placed after \subsection
+% rather than \vspace{\vfill}.
+
+\typeout{Presentation Slide Style File for LaTeX/AmSLaTeX, version 2.0.1}
+\typeout{by Young. U. Ryu - March 1992; modified by Keith Farkas - April 1992}
+
+\def\landscape{%
+ \sloppy
+ \textwidth 8.8in
+ \textheight 6in
+ \topmargin -.6in
+ \oddsidemargin -.18in
+ \evensidemargin\oddsidemargin}
+
+\def\portrait{%
+ \sloppy
+ \textwidth 6in
+ \textheight 8.8in
+ \topmargin -.65in
+ \oddsidemargin -.3in
+ \evensidemargin\oddsidemargin}
+
+%
+% Frame for the whole page
+% \@my@box@frame{thinkness}{hspace}{vspace}{...}
+%
+\newdimen \@tempdimc
+\newdimen \@tempdimd
+
+\def\@my@box@frame#1#2#3#4{\vbox{%
+ \setbox\@tempboxa\hbox{#4}%
+ \@tempdima#3
+ \advance\@tempdima #1 \advance\@tempdima \dp\@tempboxa
+ \hbox{\lower \@tempdima%
+ \hbox{\vbox{\hrule depth0pt height #1%
+ \hbox{\vrule depth0pt width #1%
+ \hskip#2%
+ \vbox{\vskip#3 \box\@tempboxa\vskip#3}%
+ \hskip#2%
+ \vrule depth0pt width #1}
+ \hrule depth0pt height #1}}}}}
+
+%
+% Shadow Frame for the whole page:
+% \@my@shadow@box@frame{frame thinkness}{shade thickness}{hspace}{vspace}{...}
+%
+
+\def\@my@shadow@box@frame#1#2#3#4#5{\vbox{%
+ \setbox\@tempboxa\hbox{#5}%
+ \@tempdima#4
+ \advance\@tempdima #1 \advance\@tempdima \dp\@tempboxa
+ \setbox\@tempboxa%
+ \hbox{\lower \@tempdima%
+ \hbox{\vbox{\hrule depth0pt height #1%
+ \hbox{\vrule depth0pt width #1%
+ \hskip#3%
+ \vbox{\vskip#4 \box\@tempboxa\vskip#4}%
+ \hskip#3%
+ \vrule depth0pt width #1}
+ \hrule depth0pt height #1}}}%
+ \@tempdimc\ht\@tempboxa \advance\@tempdimc-#2
+ \advance\@tempdimc\@tempdima
+ \@tempdimd\wd\@tempboxa
+ \hbox{\box\@tempboxa\relax%
+ \lower\@tempdima\hbox{\vrule width#2 height\@tempdimc depth0pt}}
+ \nointerlineskip\moveright#2
+ \vbox{\hrule height#2 width\@tempdimd depth0pt}}}
+
+%
+% Oval frame: by Tomoki Shiratori
+% \@my@oval@frame{thickness}{hspace}{vspace}{...}
+% thickness = \thinlines or \thicklines
+
+\def\@my@oval@frame#1#2#3#4{\vbox{%
+ #1%
+ \setbox0 = \vbox{%
+ \vskip#3\relax
+ #4\relax
+ \vskip#3\relax}%
+ \@tempdimc \ifdim \ht0 >\wd0 \wd0\else \ht0 \fi%
+ \divide\@tempdimc 10\relax
+ \@getcirc{\@tempdimc}%
+ \@tempdimc\ht0%
+ \advance\@tempdimc -\@tempdima%
+ \advance\@tempdimc 2\@wholewidth%
+ \@tempdimd .5\@tempdima \advance\@tempdimd -\@wholewidth%
+ \setbox0 = \hbox{%
+ \raise\@tempdimd\hbox{\vrule height\@tempdimc width\@wholewidth}%
+ \hskip#2\relax
+ \box0\relax
+ \hskip#2\relax
+ \raise\@tempdimd\hbox{\vrule height\@tempdimc width\@wholewidth}}%
+ \@tempdimd\wd0 \@tempdimc\@tempdimd%
+ \advance\@tempdimc -\@tempdima%
+ \vskip -.5\@tempdima \vskip\@wholewidth%
+ \hbox to\@tempdimd{%
+ \@tempcntb\@tempcnta \advance\@tempcntb 3\relax
+ {\@circlefnt \char\@tempcntb\kern -.5\@tempdima}%
+ \vbox{\hrule height\@wholewidth width\@tempdimc}%
+ {\@circlefnt \kern .5\@tempdima \kern -\@wholewidth \char\@tempcnta%
+ \kern -\@tempdima \kern\@wholewidth}}%
+ \vskip -.5\@tempdima%
+ \box0\relax
+ \vskip -.5\@tempdima%
+ \hbox to\@tempdimd{%
+ \@tempcntb\@tempcnta \advance\@tempcntb\tw@\relax
+ {\@circlefnt \char\@tempcntb\kern -.5\@tempdima}%
+ \vbox{\hrule height\@wholewidth width\@tempdimc}%
+ {\advance\@tempcntb\m@ne%
+ \@circlefnt \kern .5\@tempdima \kern -\@wholewidth \char\@tempcntb%
+ \kern -\@tempdima \kern \@wholewidth}}%
+ \vskip -.5\@tempdima \vskip\@wholewidth}}%
+
+%
+% modification of \@outputpage (from latex.tex)
+%
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \my@frame{%
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth
+ {\let\label\@gobble \let\index\@gobble
+ \@thehead}} %% 22 Feb 87
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\let\label\@gobble
+ \let\index\@gobble %% 22 Feb 87
+ \@thefoot}}%
+ }% end of my@frame
+ }%
+ \global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+
+%
+% Heading and Footing
+% In part, from fancyheading.sty
+%
+
+\def\lhead#1{\gdef\@elhead{#1}\gdef\@olhead{#1}}
+\def\chead#1{\gdef\@echead{#1}\gdef\@ochead{#1}}
+\def\rhead#1{\gdef\@erhead{#1}\gdef\@orhead{#1}}
+
+\def\lfoot#1{\gdef\@elfoot{#1}\gdef\@olfoot{#1}}
+\def\cfoot#1{\gdef\@ecfoot{#1}\gdef\@ocfoot{#1}}
+\def\rfoot#1{\gdef\@erfoot{#1}\gdef\@orfoot{#1}}
+
+\def\@slidehead#1#2#3#4#5{#1\hbox to\textwidth%
+ {\vbox{\hbox{\rlap{\parbox[b]{\textwidth}%
+ {\raggedright#2\strut}}\hfill\parbox[b]{\textwidth}%
+ {\centering#3\strut}\hfill\llap{\parbox[b]{\textwidth}%
+ {\raggedleft#4\strut}}}}}#5}
+
+\def\@slidefoot#1#2#3#4#5{#1\hbox to\textwidth%
+ {\vbox{\hbox{\rlap{\parbox[t]{\textwidth}%
+ {\raggedright#2\strut}}\hfill\parbox[t]{\textwidth}%
+ {\centering#3\strut}\hfill\llap{\parbox[t]{\textwidth}%
+ {\raggedleft#4\strut}}}}}#5}
+
+\def\ps@slide{%
+ \def\@oddhead{\@slidehead\relax\@olhead\@ochead\@orhead\hss}%
+ \def\@oddfoot{\@slidefoot\relax\@olfoot\@ocfoot\@orfoot\hss}%
+ \def\@evenhead{\@slidehead\hss\@elhead\@echead\@erhead\relax}%
+ \def\@evenfoot{\@slidefoot\hss\@elfoot\@ecfoot\@erfoot\relax}%
+ }
+
+\def\ps@empty{%
+ \def\@oddhead{\@slidehead\relax\space\space\space\hss}%
+ \def\@oddfoot{\@slidefoot\relax\space\space\space\hss}%
+ \def\@evenhead{\@slidehead\hss\space\space\space\relax}%
+ \def\@evenfoot{\@slidefoot\hss\space\space\space\relax}%
+ }
+
+%
+% by modifying \fbox in latex.tex
+% \Fbox{box sep}{box rule width/height}{...}
+%
+\def\Fbox#1#2#3{\@my@box@frame{#2}{#1}{#1}{#3}}
+
+%
+% Places a shadow box
+% \SFbox{box sep}{box rule width/height}{shade rule width/height}{...}
+%
+\def\SFbox#1#2#3#4{\@my@shadow@box@frame{#2}{#3}{#1}{#1}{#4}}
+
+%
+% by modifying \fbox in latex.tex
+% \Underline & \Underbar
+%
+\def\Underline#1{%
+ \leavevmode%
+ \setbox\@tempboxa\hbox{#1}%
+ \@tempdima1pt
+ \advance\@tempdima 3pt
+ \advance\@tempdima \dp\@tempboxa
+ \hbox{\lower \@tempdima%
+ \hbox{\vbox{\hbox{\vbox{\box\@tempboxa\vskip3pt}}%
+ \hrule height1pt}}}}
+
+% from plain.tex
+\def\Underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@
+ \m@th \Underline{\box\z@}$}
+
+%
+% Things to be entered in texts
+%
+\def\title{\@ifnextchar[{\@@Title}{\@Title}}
+\def\@Title#1{\def\slide@title{\uppercase{#1}}
+ \def\slidetitle{#1}}
+\def\@@Title[#1]#2{\def\slide@title{\uppercase{#2}}
+ \def\slidetitle{#1}}
+\def\slide@title{\hspace*{1pt}}
+\def\slidetitle{\hspace*{1pt}}
+
+\def\author{\@ifnextchar[{\@@Author}{\@Author}}
+\def\@@Author[#1]#2{\def\slide@author{#2}%
+ \def\slideauthor{#1}}
+\def\@Author#1{\def\slide@author{#1}
+ \def\slideauthor{#1}}
+\def\slide@author{\hspace*{1pt}}
+\def\slideauthor{\hspace*{1pt}}
+
+\def\organization#1{\def\authororga{#1}}
+\def\authororga{\hspace*{1pt}}
+
+\def\date#1{\def\slidedate{#1}}
+\def\slidedate{\today}
+
+%
+% section and subsection
+%
+\newcounter{sec@ctr}
+\setcounter{sec@ctr}{1}
+
+\def\section{\@ifnextchar[{\@@Section}{\@Section}}
+
+\def\@Section#1{\clearpage
+ \thispagestyle{empty}
+ \vspace*{\fill}
+ \begin{center}
+ \Hugesize\uppercase{#1}
+ \end{center}
+ \vspace*{\fill}
+ \def\sectiontitle{#1}
+ \Add@@secitem{toc}{\thesec@ctr}{#1}
+ \addtocounter{sec@ctr}{1}
+ \clearpage}
+
+\def\@@Section[#1]#2{\clearpage
+ \thispagestyle{empty}
+ \vspace*{\fill}
+ \begin{center}
+ \Hugesize\uppercase{#2}
+ \end{center}
+ \vspace*{\fill}
+ \def\sectiontitle{#1}
+ \Add@@secitem{toc}{\thesec@ctr}{#1}
+ \addtocounter{sec@ctr}{1}
+ \clearpage}
+
+\def\sectiontitle{\relax}
+
+\def\Add@@secitem#1#2#3{\if@filesw \begingroup
+\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
+\def\protect##1{\string\string\string##1\string\space
+ \space}\@temptokena{\thepage}%
+\edef\@tempa{\write \@auxout{\string\@writefile{#1}{\protect
+ \secitem{#2}{#3}{\the\@temptokena}}}}\@tempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+
+\def\subsection#1{\subsec@begin@vspace
+ \addtocounter{sec@ctr}{-1}
+ \Add@@subsecitem{toc}{\thesec@ctr}{#1}
+ \addtocounter{sec@ctr}{1}
+ \hspace*{\fill}
+ \sub@section@frame{\Largesize #1}
+ \hspace*{\fill}
+ \subsec@end@vspace}
+
+\def\Add@@subsecitem#1#2#3{\if@filesw \begingroup
+\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
+\def\protect##1{\string\string\string##1\string\space
+ \space}\@temptokena{\thepage}%
+\edef\@tempa{\write \@auxout{\string\@writefile{#1}{\protect
+ \subsecitem{#2}{#3}{\the\@temptokena}}}}\@tempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+
+%
+% titlepage
+%
+\def\titlepage{\thispagestyle{empty}
+ \vspace*{\fill}
+ \begin{center}
+ \Hugesize \slide@title \\ [2em]
+ \Normalsize\slide@author \\ [.5em]
+ \Normalsize\authororga \\ [1em]
+ \Normalsize\slidedate
+ \end{center}
+ \vspace*{\fill}
+ \setcounter{page}{0}
+ \clearpage}
+
+%
+% tables of contents
+%
+\def\contentsname{CONTENTS}
+
+\newcounter{@@@dum@@@}
+\setcounter{@@@dum@@@}{0}
+
+\def\slidecontents{\@ifnextchar*{\@@slidecontents}{\@slidecontents}}
+
+\def\@slidecontents{\openin1 \jobname.toc \ifeof1 \typeout
+ {No file \jobname.toc}\else\closein1\relax
+ \def\secitem##1##2##3{%
+ \ifnum\value{@@@dum@@@}=0%
+ \setcounter{@@@dum@@@}{1}%
+ \begin{citemize}\contsize\fi
+ \item[$\bullet$] ##2 \dotfill\ ##3\ignorespaces}
+ \def\subsecitem##1##2##3{\ignorespaces}
+ \clearpage
+ \thispagestyle{empty}
+ \addtocounter{page}{-1}
+ \subsec@begin@vspace
+ \hspace*{\fill}
+ \sub@section@frame{\Largesize\contentsname}
+ \hspace*{\fill}
+ \subsec@end@vspace
+ \input{\jobname.toc}
+ \ifnum\value{@@@dum@@@}=1%
+ \setcounter{@@@dum@@@}{0}%
+ \end{citemize}\fi
+ \vspace*{\fill}
+ \clearpage
+ \fi}
+
+\def\@@slidecontents*{\openin1 \jobname.toc \ifeof1 \typeout
+ {No file \jobname.toc}\else\closein1\relax
+ \def\secitem##1##2##3{%
+ \ifnum\value{@@@dum@@@}=0%
+ \setcounter{@@@dum@@@}{1}%
+ \begin{citemize}\contsize\fi
+ \item[$\bullet$] ##2 \hspace{\fill}}
+ \def\subsecitem##1##2##3{\ignorespaces}
+ \clearpage
+ \thispagestyle{empty}
+ \addtocounter{page}{-1}
+ \subsec@begin@vspace
+ \hspace*{\fill}
+ \sub@section@frame{\Largesize\contentsname}
+ \hspace*{\fill}
+ \subsec@end@vspace
+ \input{\jobname.toc}
+ \ifnum\value{@@@dum@@@}=1%
+ \setcounter{@@@dum@@@}{0}%
+ \end{citemize}\fi
+ \vspace*{\fill}
+ \clearpage
+ \fi}
+
+\def\sectioncontents{\@ifnextchar*{\@@sectioncontents}{\@sectioncontents}}
+
+\newcounter{@@@dummy@@@}
+\setcounter{@@@dummy@@@}{0}
+
+\@ifundefined{checkmark}%
+ {\def\mycheckmark{\surd}}%
+ {\def\mycheckmark{\checkmark}}
+
+\def\mysecpointer{\Rightarrow}
+
+\def\@sectioncontents{\openin1 \jobname.toc \ifeof1 \typeout
+ {No file \jobname.toc}\else\closein1\relax
+ \def\secitem##1##2##3{%
+ \ifnum\value{@@@dum@@@}=0%
+ \setcounter{@@@dum@@@}{1}%
+ \begin{citemize}\contsize\fi
+ \ifnum\value{@@@dummy@@@}=1%
+ \setcounter{@@@dummy@@@}{0}%
+ \end{ccitemize}\fi
+ \item[\ifnum\value{sec@ctr}>##1$\mycheckmark\;\bullet$%
+ \else\ifnum\value{sec@ctr}=##1$\mysecpointer\bullet$%
+ \else$\bullet$\fi\fi] ##2 \dotfill\ ##3\ignorespaces}
+ \def\subsecitem##1##2##3{%
+ \ifnum\value{sec@ctr}=##1%
+ \ifnum\value{@@@dummy@@@}=0
+ \setcounter{@@@dummy@@@}{1}
+ \begin{ccitemize}\contsizesize\fi
+ \item[$\bullet$] ##2 \hspace*{\fill}\fi}
+ \clearpage
+ \thispagestyle{empty}
+ \addtocounter{page}{-1}
+ \subsec@begin@vspace
+ \hspace*{\fill}
+ \sub@section@frame{\Largesize\contentsname}
+ \hspace*{\fill}
+ \subsec@end@vspace
+ \input{\jobname.toc}
+ \ifnum\value{@@@dummy@@@}=1%
+ \setcounter{@@@dummy@@@}{0}%
+ \end{ccitemize}\fi
+ \ifnum\value{@@@dum@@@}=1%
+ \setcounter{@@@dum@@@}{0}%
+ \end{citemize}\fi
+ \vspace*{\fill}
+ \clearpage
+ \fi}
+
+\def\@@sectioncontents*{\openin1 \jobname.toc \ifeof1 \typeout
+ {No file \jobname.toc}\else\closein1\relax
+ \def\secitem##1##2##3{%
+ \ifnum\value{@@@dum@@@}=0%
+ \setcounter{@@@dum@@@}{1}%
+ \begin{citemize}\contsize\fi
+ \ifnum\value{@@@dummy@@@}=1%
+ \setcounter{@@@dummy@@@}{0}%
+ \end{ccitemize}\fi
+ \item[\ifnum\value{sec@ctr}>##1$\mycheckmark\;\bullet$%
+ \else\ifnum\value{sec@ctr}=##1$\mysecpointer\bullet$%
+ \else$\bullet$\fi\fi] ##2 \hspace{\fill}}
+ \def\subsecitem##1##2##3{%
+ \ifnum\value{sec@ctr}=##1%
+ \ifnum\value{@@@dummy@@@}=0
+ \setcounter{@@@dummy@@@}{1}
+ \begin{ccitemize}\contsizesize\fi
+ \item[$\bullet$] ##2 \hspace{\fill}\fi}
+ \clearpage
+ \thispagestyle{empty}
+ \addtocounter{page}{-1}
+ \subsec@begin@vspace
+ \hspace*{\fill}
+ \sub@section@frame{\Largesize\contentsname}
+ \hspace*{\fill}
+ \subsec@end@vspace
+ \input{\jobname.toc}
+ \ifnum\value{@@@dummy@@@}=1%
+ \setcounter{@@@dummy@@@}{0}%
+ \end{ccitemize}\fi
+ \ifnum\value{@@@dum@@@}=1%
+ \setcounter{@@@dum@@@}{0}%
+ \end{citemize}\fi
+ \clearpage
+ \vspace*{\fill}
+ \fi}
+
+\def\citemize{\list{\relax}%
+ {\leftmargin=2.5em
+ \rightmargin=.5em
+ \labelwidth=2em
+ \labelsep=.5em
+ \def\makelabel##1{\hss\llap{##1}}}}
+\let\endcitemize =\endlist
+
+\def\ccitemize{\list{\relax}%
+ {\leftmargin=1em
+ \rightmargin=0em
+ \labelwidth=.5em
+ \labelsep=.5em
+ \def\makelabel##1{\hss\llap{##1}}}}
+\let\endccitemize =\endlist
+
+%
+% modifications to enumerate env.
+%
+\def\labelenumi{\theenumi.}
+ \def\theenumi{\arabic{enumi}}
+\def\labelenumii{\theenumi.\theenumii.}
+ \def\theenumii{\arabic{enumii}}
+ \def\p@enumii{\theenumi.}
+\def\labelenumiii{\theenumi.\theenumii.\theenumiii.}
+ \def\theenumiii{\arabic{enumiii}}
+ \def\p@enumiii{\theenumi.\theenumii.}
+\def\labelenumiv{\theenumi.\theenumii.\theenumiii.\theenumiv.}
+ \def\theenumiv{\arabic{enumiv}}
+ \def\p@enumiv{\theenumi.\theenumii.\theenumiii.}
+
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}
+ \labelsep = .2em
+ \ifnum \@enumdepth = 1
+ \labelwidth = 1em
+ \leftmargin=\leftskip
+ \advance\leftmargin1.8em
+ \else \ifnum \@enumdepth = 2
+ \labelwidth = 1.6em
+ \leftmargin = 1.8em %\leftmargin = \labelwidth+\labelsep
+ \else \ifnum \@enumdepth = 3
+ \labelwidth = 2.4em
+ \leftmargin = 2.6em
+ \else
+ \labelwidth = 3.2em
+ \leftmargin = 3.4em
+ \fi
+ \fi
+ \fi
+ \def\makelabel##1{\rlap{##1}\hss}}\fi}
+
+%
+% Font sizes
+%
+\def\Hugesize{\Huge} % in art12.sty, \Huge = \huge
+\def\Largesize{\huge} % in art11.sty, \Huge > \huge
+\def\Normalsize{\LARGE}
+\def\Smallsize{\Large}
+
+\def\contsize{\LARGE}
+\def\contsizesize{\Large}
+\def\smallcontentsfonts{%
+ \def\contsize{\Large}
+ \def\contsizesize{\large}}
+
+\def\smallerfonts{%
+ \def\Hugesize{\huge}
+ \def\Largesize{\LARGE}
+ \def\Normalsize{\Large}
+ \def\Smallsize{\large}
+ \def\contsize{\Large}
+ \def\contsizesize{\large}
+ \def\smallcontentsfonts{%
+ \def\contsize{\large}
+ \def\contsizesize{\normalsize}}%
+ }
+%
+% modifications to document env.
+%
+
+\let\@@@@document\document
+\def\document{\@@@@document
+ \Normalsize}
+\let\@@end@@document\enddocument
+\def\enddocument{%
+\if@filesw \newwrite\tf@toc
+ \immediate\openout\tf@toc=\jobname.toc
+ \typeout{Writing toc file \jobname.toc}\fi
+ \@@end@@document}
+
+%
+% slide environment
+%
+\newdimen\defaultskip
+\def\slide{\@ifnextchar[{\@@Slide}{\@Slide}}
+\def\@Slide{\@@Slide[0pt]}
+\def\@@Slide[#1]{\slide@begin@vspace
+ \begingroup
+ \advance\leftskip\defaultskip
+ \advance\rightskip\defaultskip
+ \advance\leftskip#1
+ \advance\rightskip#1
+ \advance\leftmargini\leftskip}
+\def\endslide{\par\endgroup
+ \slide@end@vspace
+ \clearpage}
+
+%
+% Page vertical spacing types
+%
+\def\vertcenter{%
+ \def\subsec@begin@vspace{\vspace*{\fill}}
+ \def\subsec@end@vspace{\vspace*{\fill}}
+ \def\slide@begin@vspace{\vspace*{\fill}}
+ \def\slide@end@vspace{\vspace*{\fill}}%
+ }
+\def\vertgroup{%
+ \def\subsec@begin@vspace{\relax}
+ \def\subsec@end@vspace{\vspace*{2em}}
+ \def\slide@begin@vspace{\vspace*{\fill}}
+ \def\slide@end@vspace{\vspace*{\fill}}%
+ }
+\def\verttop{%
+ \def\subsec@begin@vspace{\relax}
+ \def\subsec@end@vspace{\vspace*{2em}}
+ \def\slide@begin@vspace{\relax}
+ \def\slide@end@vspace{\relax}%
+ }
+
+%
+% Page Frame Definitions
+%
+\def\doubleboxframe{%
+ \def\my@frame##1{%
+ \@my@box@frame{.4em}{.3em}{.3em}%
+ {\@my@box@frame{1.6pt}{.8em}{.8em}{##1}}}}
+
+\def\shadowframe{%
+ \def\my@frame##1{%
+ \@my@shadow@box@frame{1.6pt}{3.2pt}{.8em}{.8em}{##1}}}
+
+\def\ovalframe{%
+ \def\my@frame##1{\@my@oval@frame{\thicklines}{.4em}{.3em}{##1}}}
+
+%
+% Subsection frames
+%
+\def\boxsecframe{\def\sub@section@frame##1{\Fbox{3pt}{1pt}{##1}}}
+\def\shadowsecframe{\def\sub@section@frame##1{\SFbox{3pt}{1pt}{2pt}{##1}}}
+
+%
+% defaults
+%
+% slide head and foot
+\lhead{\slidetitle}
+\chead{\relax} % empty
+\rhead{\sectiontitle}
+\lfoot{\slideauthor}
+\cfoot{\relax} % empty
+\rfoot{\thepage}
+
+%
+\defaultskip=1em
+%
+\pagestyle{slide}
+
+% \portrait vs. \landspace
+\portrait
+
+% no parindent
+\parindent 0pt
+
+% \vertcenter vs. \verttop
+\vertcenter % vertical centering
+
+% \doubleboxframe vs. \shadowframe vs. \ovalframe
+\shadowframe
+
+% \boxsecframe vs. \shadowsecframe
+\shadowsecframe
+
+% hyphenation off. Comment the following line if you want hyphenation on
+\pretolerance=10000
+
+% right-justification off
+% Comment the following two lines if you want right-justification on
+\@rightskip\@flushglue
+\rightskip\@rightskip
+
+%
+% use pointing hand
+%
+%\font\handsfont=hands scaled\magstep5
+%\def\handright{{\handsfont \char"41}}
+%\def\handleft{{\handsfont \char"42}}
+%\def\mysecpointer{\mbox{\handright}\,}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% hands fonts
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%%Do ftp login:
+%%
+%% anonymous@ymir.claremont.edu
+%%
+%%Go to the directory of hands.dir:
+%%
+%% cd tex
+%% cd mf
+%% cd hands
+%%
+%%Get all files:
+%%
+%% mget *
+%%
+%%Modifications to hands.mf
+%%^^^^^^^^^^^^^^^^^^^^^^^^^
+%% ... ...
+%% size=10pt#;
+%% ... ...
+%% thinline#:=6/100em#;
+%%
+%%Run metafont on hands.mf with magnification of:
+%%
+%% 1.2**5
+%%
+%%which is used in lslide.sty
+%%Probably, you may want to generate hands fonts with
+%%all magnifications:
+%%
+%% 1, root(1.2), 1.2, 1.2**2, 1.2**3, 1.2**4, 1.2**5
+%%
diff --git a/macros/latex209/contrib/misc/lslide.tex b/macros/latex209/contrib/misc/lslide.tex
new file mode 100644
index 0000000000..c68fcb9379
--- /dev/null
+++ b/macros/latex209/contrib/misc/lslide.tex
@@ -0,0 +1,412 @@
+%% Save file as: LSLIDE.TEX Source: FILESERV@SHSU.BITNET
+% by Young U. Ryu
+%
+% o There is a sample below. All original header material follows
+% \end{document}
+% LaTeX (or AmSLaTeX) it at least twice and print.
+% ^^^^^
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentstyle[12pt,lslide]{article}
+%\documentstyle[12pt,amssymbols,lslide]{article}
+ % <- if amssymbols.sty is available
+%\documentstyle[12pt,amstex,amssymb,lslide]{article}
+ % <- if you use AmSLaTeX
+
+%\landscape
+ % <- if your driver can rotate 90 degrees.
+ % e.x. in emTeX derivers:
+ % hp filename /tr2
+ % \portrait is default.
+
+% Addjust page dimenstions here if necessary. For example:
+%\addtolength{\textwidth}{-.3in}
+%\addtolength{\textheight}{.5in}
+%\addtolength{\topmargin}{.02in}
+%\addtolength{\oddsidemargin}{-.03in}
+%\addtolength{\evensidemargin}{-.03in}
+
+%\verttop
+ % compare it with \vertcenter that is the default
+
+%\doubleboxframe % or \ovalframe
+ % compare them with \shadowframe that is the default
+
+%\boxsecframe
+ % compare it with \shadowsecframe that is the default
+
+\begin{document}
+
+\title[Sample Slides with {\tt lslide.sty}]%
+ {Sample Slides \\
+ with {\tt lslide.sty}}
+
+\author{Thomas Magnum}
+
+\organization{Private Investigator's Association}
+
+\date{March 1992}
+
+\titlepage
+
+\slidecontents
+
+\sectioncontents
+
+\section{Introduction}
+
+\begin{slide}
+\subsection{Problems of Truth-Functional Logic}
+
+\Underbar{Case 1}
+
+\begin{enumerate}
+\item $\neg A$ \\
+ Therefore $A \rightarrow B$
+\item The Padre beach is not poluted. \\
+ Therefore, if the Padre beach is poluted, it is good for surfing.
+\end{enumerate}
+
+\vspace*{\fill}
+
+\Underbar{Case 2}
+
+\begin{enumerate}
+\item $B$ \\
+ Therefore $A \rightarrow B$
+\item The Padre beach is good for surfing. \\
+ Therefore, if the Padre beach is poluted, it is good for surfing.
+\end{enumerate}
+\end{slide}
+
+\begin{slide}[.5in]
+\Underbar{Case 3}
+
+\begin{enumerate}
+\item $A \rightarrow B$ \\
+ $C \rightarrow \neg B$ \\
+ $C \rightarrow A$ \\
+ $C$ \\
+ Therefore $B \wedge \neg B$
+\item If it is a bird, then it can fly. \\
+ If it is penguin, then it cannot fly. \\
+ If it is penguin, then it is a bird. \\
+ It is a bird \\
+ Therefore, it cannot fly.
+\end{enumerate}
+\end{slide}
+
+\sectioncontents
+
+\section{Next Section}
+
+\begin{slide}[1in]
+Whatever it is. What ever it is.
+Whatever it is. What ever it is.
+
+\vspace*{1.5em}
+
+\begin{enumerate}
+\item Item 1 with Normalsize.
+ \begin{enumerate}\Smallsize
+ \item Item 1.1 with Smallsize.
+ \item Item 1.2 with Smallsize.
+ \end{enumerate}
+\item Item 2 with Normalsize.
+\end{enumerate}
+\end{slide}
+
+\end{document}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% End of the sample file%%%
+%
+% Noted modifications by Keith Farkas <farkas@eecg.toronto.edu> posted
+% to comp.text.tex on 21 Apr 92 15:43:52 GMT:
+% I have added a new vertical centering option to the slide style file
+% writen by Yong Ryu. The new option is \vertgroup and is like \vertcenter
+% with the exception that \vspace{2em} is placed after \subsection
+% rather than \vspace{\vfill}.
+%
+% o lslide.sty is a LaTeX/AmSLaTeX style file for
+% presentation slide typesetting.
+% It was developed for my personal use. That is,
+% it is a prototype. It may be improved in the future.
+% See Final Notes, Bugs, Comments, etc.
+%
+% o It generates a title page, tables of contents,
+% separate section heading pages, and slides
+% with heads and foots inside a nice frame.
+%
+% o No hyphenations:
+% Hyphenated words are not easily readable
+% in presentation slides, in my opinion.
+% No right-justifications
+% Right justifications may place too big spaces
+% between words, when hyphenations are turned off.
+%
+% If you want hyphenations and/or right-justifications
+% go to the "defaults" section in the end of this style file
+% and comment commands to make them.
+%
+% o A postscript driver is NOT required.
+% ^^^
+%
+% o Version 2.0.1 Update
+% A. added a third vertical centering option \vertgroup. \vertgroup
+% is like \vertcenter with the exception that \vspace{2em} is
+% placed after \subsection rather than \vspace{\vfill}.
+% Keith Farkas (farkas@eecg.toronto.edu April 21 1992)
+%
+% o Version 2.0 Update
+% A. Frame macros are simplified and redundant macros are removed.
+% B. A bug in \slidecontents & \sectioncontents is fixed.
+% Bug: When filename.toc exists but is empty, the previous
+% version reports `\item ...' missing error.
+% C. Thanks to Tomoki Shiratori, an oval frame is added.
+% D. \typeA & \typeB are renamed to \vertcenter & \verttop.
+% E. \pframeA & \pframeB are renamed to \doubleboxframe & \shadowframe.
+% F. \sframeA & \sframeB are renamed to \boxsecframe & \shadowsecframe.
+%
+% o Version 1.2 Update
+% A. A shadow page frame added.
+% B. \SFbox changed.
+% C. \vertcenter and \verttop def. changed.
+% D. Extra spaces following page no. in tables of contents are removed.
+%
+% o Version 1.1 Update
+% A. Default page dimensions changed.
+% B. \leftmargini of itemize env.: \leftskip is always added.
+% The left skip of itemize env. is (almost) same as
+% that of enumerate env.
+% C. \SFbox added - places a shadow box.
+%
+% o How to use it:
+% A. \documentstyle[12pt,lslide]{article} % <- Minimal Req.
+% \documentstyle[12pt,amssymbols,lslide]{article}
+% % <- use amssymbols.sty for LaTeX if available
+% \documentstyle[12pt,amstex,amssymb,lslide]{article}
+% % <- may be used with AmSLaTeX
+% % Personally, I prefer it because it can
+% % easily handle various shapes/styles of fonts.
+%
+% Or you may use art11.sty to make the whole slide fonts smaller.
+% \documentstyle[11pt,lslide]{article}
+% \documentstyle[11pt,amssymbols,lslide]{article}
+% \documentstyle[11pt,amstex,amssymb,lslide]{article}
+% (To make fonts smaller, you may also use \smallerfonts. See B.)
+% Note: There is no font size difference between art10.sty
+% and art11.sty, when fonts >= \large are used.
+% If you use art10.sty, head and foot fonts of slides
+% become too small.
+%
+% B. \portrait (default)
+% \landscape
+% (Should be placed before \begin{document})
+% If your print driver allows the 90 degree rotation of the
+% output pages:
+% e.g., emTeX drivers - /tr1 or /tr3
+% e.x., hp myslide /tr1
+% e.g., dvi2ps - -elandscape (???)
+% or your printer has a sideway printing mode,
+% you may use \landscape.
+%
+% Probably, you must modify the page dimensions.
+% Place those modifications after \portrait or
+% \landscape. If you use the default (i.e., do not
+% use \portrait or \landscape), place them just after
+% \documentstyle[...]{...}.
+% e.g., \addtolength{\textwidth}{...in}
+% \addtolength{\textheight}{...in}
+% \addtolength{\topmargin}{...in}
+% \addtolength{\oddsidemargin}{...in}
+% \addtolength{\evensidemargin}{...in}
+%
+% \defaultskip=...in or ...pt or ...em or ......
+% horizontal spaces at the left and the right of slide
+% bodies (within the slide frame)
+% The default is:
+% \defaultskip=1em
+%
+% \vertcenter (default)
+% \verttop
+% (Should be placed before \begin{document})
+% \vertcenter option places \vspace*{\fill} on the top and bottom
+% of each slide page and after \subsection. (Vertical centering)
+% \verttop option places \vspace*{.5em} before \subsection and
+% \vspace*{1em} after \subsection; not \vspace on the top
+% or bottom of each slide page.
+% \vertgroup is like \vertcenter but places \vspace{2em} after
+% \subsection
+%
+% \doubleboxframe
+% \shadowframe (default)
+% (Should be placed before \begin{document})
+% \doubleboxframe option places double boxes around each page.
+% \shadowframe option places a shadow box around each page.
+% \ovalframe option places an oval around each page.
+%
+% \boxsecframe
+% \shadowsecframe (default)
+% (Should be placed before \begin{document})
+% \boxsecframe option places a single box around subsection title.
+% \shadowsecframe option places a shadow box around subsection title.
+%
+% \contentsname{...}
+% (Placed before or after \begin{document})
+% Heading of tables of contents. Default is:
+% \contentsname{CONTENTS}
+%
+% \smallerfonts
+% (Placed before \begin{document})
+% Make fonts smaller thoughout the whole file.
+% If you think the default fonts are too big,
+% use this command.
+% Or, you may use art11.sty to make fonts smaller. (See A.)
+%
+% \smallcontentsfonts
+% (Placed before or after \begin{document})
+% Makes fonts for tables of contents smaller.
+% Use when the table of content occupies more than one page.
+% If it is used with \smallerfonts, it must placed after
+% \smallerfonts.
+%
+% C. \title{T} or \title[T1]{T2}
+% (Placed before or after \begin{document})
+% T or T2 goes to the title page.
+% T or T1 goes to the left head of each page.
+% \author{A}
+% (Placed before or after \begin{document})
+% A goes to the title page and left foot of each page.
+% \organization{O}
+% (Placed before or after \begin{document})
+% O goes to the title page.
+% \date{D}
+% (Placed before or after \begin{document})
+% D goes to the title page.
+% \titlepage
+% (Placed after \begin{document})
+% Generates the title page.
+%
+% From now on, everything should be placed after \begin{document}
+%
+% D. \slidecontents or \slidecontents*
+% (Placed outside \begin{slide} ... \end{slide})
+% Generates a Table of Contents that Consists of Section Headings.
+% Usually placed after \titlepage
+% If * is placed, no page numbers will appear.
+%
+% \sectioncontents or sectioncontents*
+% (Placed outside \begin{slide} ... \end{slide})
+% Generates a Table of Contents that Consists of Section Headings
+% and Subsection Heading of the Following Section.
+% Usually placed before \section{...}
+% If * is placed, no page numbers will appear.
+%
+% E. \section{A} or \section[A1]{A2}
+% (Placed outside \begin{slide} ... \end{slide})
+% A or A2 goes to a separate page of section heading
+% A or A1 goes to a table of contents and the right head of each page.
+%
+% F. \subsection{A}
+% (Placed inside \begin{slide} ... \end{slide})
+% A frame box surrounds A.
+% A goes to a table of contents for the section.
+%
+% G. \begin{slide} ... \end{slide}
+% Generates a page of slide.
+% Your slide bodies are to be placed here.
+% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+% \begin{slide}[dimension] ... \end{slide}
+% Adds horizontal spaces by "dimension (e.g. 1in, 3em, etc.)"
+% at the left and the right of the text body (within
+% the frame).
+% Only for that page of slide.
+% cf. \defaultskip = dimension
+% for all pages of slide
+%
+% H. \Underbar{...} and \Underline{...}
+% Same as \underbar and \underline except that the rule
+% is thicker.
+%
+% I. Font size (Notice that all start with a capital letter)
+% \Hugesize
+% \Largesize
+% \Normalsize - default for slides
+% \Smallsize
+%
+% J. Slide head and foot
+% \lhead{...} default: \lhead{\slidetitle}
+% \chead{...} default: \chead{\relax} % empty
+% \rhead{...} default: \rhead{\sectiontitle}
+% \lfoot{...} default: \lfoot{\slideauthor}
+% \cfoot{...} default: \cfoot{\relax} % empty
+% \rfoot{...} default: \rfoot{\thepage}
+%
+% K. Miscellaneous
+% \slidetitle - prints slide title (default: \hspace*{1pt})
+% \slideauthor - prints author name (default: \hspace*{1pt})
+% \authororga - prints organization (default: \hspace*{1pt})
+% \slidedate - prints date (default: \today)
+% \sectiontitle - prints section heading
+%
+% \pagestyle{slide} is default for slides
+% note: \ps@slide is defined in this style file
+% \pagestyle{empty} is default for the title page,
+% tables of contents, and section heading pages.
+%
+% \Fbox{box sep}{rule thickness}{...}
+% Places a box around ...
+% box sep = spaces between ... and box rules
+% rule thickness = as you can guess
+% e.x., \Fbox{3pt}{1pt}{Box Me}
+%
+% \SFbox{box sep}{rule thickness}{shade thickness}{...}
+% Places a shadow box around ...
+% box sep = spaces between ... and box rules
+% e.x., \SFbox{3pt}{1pt}{2pt}{Box Me}
+%
+% L. Final Notes, Bugs, Comments, etc.
+% This is a prototype. It will be extended in the future:
+% - Various types of slide frames are desirable.
+% Users may select.
+% - \begin{note} ... \end{note} is useful.
+% - Top-bottom centering (vertical centering) can be done by \vertcenter.
+% Left-right centering (horizontal centering) may be implemented.
+% - Postscript specific features ???
+% With postscript, lots of things can be done easily (?!).
+% But, I personally discourage postscript specific features,
+% because I myself use non-postscript printers more often.
+% - Probably, new font definitions are needed, instead of
+% using those (i.e. defaults) of LaTeX/AmSLaTeX, 'cause
+% many of them are not used at all and we may need
+% big fonts with various shapes.
+%
+% How to get (bold) sans serif fonts instead of roman fonts:
+% - If you use AmSLaTeX (with the new font scheme), it's simple:
+% \begin{document}\sf
+% \begin{document}\sf\bf
+% Or something more ... (especially to get bold math)
+% - If you use LaTeX, it's not simple.
+% ``\begin{document}\sf\Normalsize'' or
+% ``\begin{document}\sf\Normalsize\bf''
+% handles many (but not all) cases.
+% The best way is to define a style file (or using
+% one if available) which sets \sf (or \sf\bf) as default.
+% Or you may create a .fmt file after modifying
+% lfonts.sty.
+% - Personally, I modified a font file (fontdef.max) for AmSLaTeX
+% and created a lslide.fmt file so that bold sans serif
+% is default for text and bold symbol fonts are
+% default for math.
+% However, unfortunately, not all AmS bold fonts
+% are available!!!
+%
+% Bugs
+% - Probably a few (or many???).
+% - I can't locate them. I need your help...
+%
+% E-mail bugs and comments to
+% young@emx.utexas.edu
+% youngryu@bongo.cc.utexas.edu
+%
+%
diff --git a/macros/latex209/contrib/misc/ltgtsim.sty b/macros/latex209/contrib/misc/ltgtsim.sty
new file mode 100644
index 0000000000..7294ea4fba
--- /dev/null
+++ b/macros/latex209/contrib/misc/ltgtsim.sty
@@ -0,0 +1,15 @@
+% Save file as: LTGTSIM.STY Source: FILESERV@SHSU.BITNET
+% Posted by thompson@stars.gsfc.nasa.gov (BILL THOMPSON) to comp.text.tex
+% on 29 Jul 91 15:41:26 GMT
+
+% The commands \ltsim and \gtsim combine the symbols < ~ and > ~ respectively.
+% The commands \ltsimscript and \gtsimscript do the same in subscripts.
+
+\newcommand{\ltsim}{\protect\raisebox{-0.5ex}{$\:\stackrel{\textstyle <}
+ {\sim}\:$}}
+\newcommand{\gtsim}{\protect\raisebox{-0.5ex}{$\:\stackrel{\textstyle >}
+ {\sim}\:$}}
+\newcommand{\ltsimscript}{\protect\raisebox{-0.5ex}{$\stackrel{\scriptstyle <}
+ {\sim}$}}
+\newcommand{\gtsimscript}{\protect\raisebox{-0.5ex}{$\stackrel{\scriptstyle >}
+ {\sim}$}}
diff --git a/macros/latex209/contrib/misc/makerobust.sty b/macros/latex209/contrib/misc/makerobust.sty
new file mode 100644
index 0000000000..114531cfeb
--- /dev/null
+++ b/macros/latex209/contrib/misc/makerobust.sty
@@ -0,0 +1,112 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "David Carlisle",
+%%% version = "1.01",
+%%% date = "04 May 1993",
+%%% time = "13:48:42 BST",
+%%% filename = "makerobust.sty",
+%%% address = "Computer Science Department
+%%% Manchester University
+%%% Oxford Road
+%%% Manchester
+%%% England
+%%% M13 9PL",
+%%% telephone = "+44 61 275 6139",
+%%% FAX = "+44 61 275 6236",
+%%% checksum = "63663 112 477 4231",
+%%% email = "carlisle@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, fragile, robust",
+%%% supported = "yes",
+%%% docstring = "
+%%%
+%%% makerobust.sty
+%%%
+%%% A LaTeX style option defining the \makerobust command.
+%%% \makerobust{\cs} makes the control sequence \cs robust.
+%%%
+%%% If you put \makerobust{\cite} in the preamble, you can write:
+%%% \caption{Taken from \cite{foo}} rather than
+%%% \caption{Taken from \protect\cite{foo}}
+%%%
+%%% The checksum field above was produced by
+%%% Robert Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+%
+% Version 1.00: 19 May 1991
+% Version 1.01: 04 May 1993 (Xiaoming Cai) remove `\` from the internal
+% command names, so that they work when read
+% from a file.
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*x>
+% This file may be used without modification as a style (.sty) file.
+%
+% If you have Mittelbach's doc.sty, this file may be formatted with a
+% command like:
+% latex makerobust.sty
+%
+% If you have the Mittelbach/Duchier/Braams docstrip utility, you may
+% produce a faster loading .sty file.
+% Rename this file to: makerobust.doc
+% Then run this file through *plain* TeX:
+% tex makerobust.doc
+% This should produce the file makerobust.sty.
+% If you do not have plain TeX on your system, you can trick LaTeX into
+% doing the work as follows:
+% latex \def\fmtname{plain} \input makerobust.doc
+% Note that you may need to quote the arguments here to stop your
+% operating system treating the \ characters incorrectly.
+%
+% latex makerobust.doc
+% Will produce a typeset version of the documentation, as above.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\plain{plain}\ifx\fmtname\plain\csname fi\endcsname
+ \def\batchfile{makerobust.doc}
+ \input docstrip
+ \preamble
+
+ Do not distribute the stripped version of this file.
+ The checksum in the header refers to the documented version.
+
+ \endpreamble
+ \generateFile{makerobust.sty}{t}{\from{makerobust.doc}{}}
+ \endinput
+\fi
+%
+\ifcat a\noexpand @\let\next\relax\else\def\next{%
+ \documentstyle[doc]{article}\MakePercentIgnore}\fi\next
+%
+%\def\eatmodule<#1>{}\eatmodule
+%</x>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \textwidth=355pt ^^A Allow macrocode text with 72 columns.
+% \CodelineIndex ^^A Code lines numbered.
+% \DisableCrossrefs ^^A No Cross references.
+% \MakeShortVerb{\|} ^^A |\foo| works like \verb+\foo+
+%
+% \title{makerobust.sty}
+% \author{D. P. Carlisle}
+% \date{04 May 93}
+% \begin{document}
+% \maketitle
+%
+% \begin{macro}{\makerobust}
+% |\makerobust| may be used to make a fragile command robust.\\
+% So if in the preamble you have |\makerobust{\cite}| then you may use
+% |\cite| rather than |\protect\cite| in a moving argument, like
+% that of |\caption|.
+% \begin{macrocode}
+\def\makerobust#1{%
+ \@ifundefined{fr@gile\expandafter\@gobble\string#1}%
+ {\expandafter
+ \let\csname fr@gile\expandafter\@gobble\string#1\endcsname#1%
+ \edef#1{\noexpand\protect\expandafter\noexpand
+ \csname fr@gile\expandafter\@gobble\string#1\endcsname}}%
+ {\@warning{\string#1 is already robust (command ignored)}}}%
+% \end{macrocode}
+% \end{macro}
+% \end{document}
+\endinput
diff --git a/macros/latex209/contrib/misc/marginote.sty b/macros/latex209/contrib/misc/marginote.sty
new file mode 100644
index 0000000000..940d5c2fd1
--- /dev/null
+++ b/macros/latex209/contrib/misc/marginote.sty
@@ -0,0 +1,75 @@
+%%% ======================================================================
+%%% @LaTeX-style-file{
+%%% filename = "marginote.sty",
+%%% version = "2.0",
+%%% date = "1 July 1993",
+%%% time = "09:07:08 CDT",
+%%% author = "George D. Greenwade",
+%%% address = "Department of Economics and Business Analysis
+%%% College of Business Administration
+%%% P. O. Box 2118
+%%% Sam Houston State University
+%%% Huntsville, Texas, USA 77341-2118",
+%%% email = "bed_gdg@SHSU.edu (Internet)
+%%% BED_GDG@SHSU (BITNET)
+%%% SHSU::BED_GDG (THENET)",
+%%% telephone = "(409) 294-1266",
+%%% FAX = "(409) 294-3712",
+%%% supported = "yes",
+%%% archived = "SHSU*",
+%%% keywords = "LaTeX, marginal notes",
+%%% codetable = "ISO/ASCII",
+%%% abstract = "Create command \marginote{text} to use marginal
+%%% notes in a document. Each marginal note is
+%%% denoted by the fnsymbol sequence and does not
+%%% alter any know counters other than those created.
+%%% Original version September 12, 1989.",
+%%% modifications = "Modified 1 July 1993 in response to report from
+%%% Bradley C. Kuszmaul <bradley@theory.lcs.mit.edu>
+%%% via David M. Jones <dmjones@theory.lcs.mit.edu>
+%%% that a `gratuitous space' was introduced in the
+%%% \stepcounter{marginalnote} (dumb mistake on my
+%%% part!). Also added this file header and added
+%%% \endinput at the end of the file.",
+%%% checksum = "11442 75 385 3712",
+%%% docstring = "The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility."
+%%% }
+%%% ======================================================================
+\typeout{LaTeX document substyle 'marginote.sty' July 1, 1993 (GDG)}
+
+\topmargin 0pt %% this code from FULLPAGE.STY
+\advance \topmargin by -\headheight %%
+\advance \topmargin by -\headsep %%
+
+\textheight 8.9in %%
+
+\oddsidemargin 0pt %%
+\evensidemargin \oddsidemargin %%
+\marginparwidth 1.1in %% changed (+.6in) to allow for notes
+
+\textwidth 5.9in %% changed (-.6in) to allow for notes
+ %% end of FULLPAGE.STY
+
+\newcounter{marginalnote}
+\def\themarginalnote{\fnsymbol{marginalnote}}
+\newcount\marginalnotecounter
+\marginalnotecounter=0
+
+\def\marginote#1{\ifmmode %% Can't use \marginpar in math mode, thus ...
+\typeout{ }
+\typeout{\string \marginote \space error. Cannot use \string \marginote \space
+in math mode. Ignoring text.}
+\typeout{ }
+\else \ifnum \marginalnotecounter=9 \setcounter{marginalnote}{0}
+\marginalnotecounter= 0 \fi %% fnsymbol only goes to 9
+\stepcounter{marginalnote}% -- line split -- GDG 1-JUL-1993
+\advance\marginalnotecounter 1
+{$^{\themarginalnote}$\ \marginpar{\raggedright %% \raggedright just looks
+\footnotesize $\themarginalnote.$\ #1}} %% better in such a small space
+\fi}
+\endinput % -- added -- GDG 1-JUL-1993
diff --git a/macros/latex209/contrib/misc/marnote.sty b/macros/latex209/contrib/misc/marnote.sty
new file mode 100644
index 0000000000..3246beca44
--- /dev/null
+++ b/macros/latex209/contrib/misc/marnote.sty
@@ -0,0 +1,61 @@
+% marnote.sty - MarNote 0.1 <03 Jan 92>
+% macros to print a short note vertically in left or right margin on all pages.
+% literal text is rotated appropriately.
+%
+% requires psfig and dvips
+%
+% James Darrell McCauley <jdm5548@diamond.tamu.edu>
+% Department of Agricultural Engineering
+% Texas A&M University
+% College Station, Texas 77843-2117, USA
+%
+% useful for:
+% o printing full citation on pre-prints of papers (so if
+% you give copies to friends, they know where to find
+% it published later).
+% o easily identifying documents in folders or notebooks
+\ifx\undefined\leftnote\else\endinput\fi
+\typeout{MarNote 0.1 <03 Jan 92>} % identity
+\input{psfig} % latest psfig.tex makes sure that this is read only once
+%
+\def\leftnote#1{
+ \special{!userdict begin /bop-hook{gsave 20 50 translate 90 rotate
+ /Times-Roman findfont 11 scalefont setfont
+ 0 0 moveto (#1)
+ show grestore}def end
+ }
+}
+%
+\def\rightnote#1{
+ \special{!userdict begin /bop-hook{gsave 590 50 translate 90 rotate
+ /Times-Roman findfont 11 scalefont setfont
+ 0 0 moveto (#1)
+ show grestore}def end
+ }
+}
+%
+% Special bonus!! a macro to lightly write the word "draft"
+% across a page. Use only one of \leftnote, \rightnote, & \draftcp
+\def\draftcp{
+ \special{!userdict begin /bop-hook{gsave 200 30 translate
+ 65 rotate /Times-Roman findfont 216 scalefont setfont
+ 0 0 moveto 0.99 setgray (DRAFT) show grestore}def end
+ }
+}
+\endinput
+\documentstyle[marnote]{article}
+\title{Example of ``marnote.sty''}
+\author{James Darrell McCauley}
+\date{03 January 1992}
+\begin{document}
+%\draftcp % specifies a draft copy
+\rightnote{``Example of MarNote Style File.'' 1992. McCauley, J.D.
+ To appear in: Style Archives Everywhere.}
+\maketitle
+\end{document}
+
+
+--
+James Darrell McCauley, Grad Res Asst, Spatial Analysis Lab
+Dept of Ag Engr, Texas A&M Univ, College Station, TX 77843-2117, USA
+(Darrell.McCauley@tamu.edu, jdm5548@tamagen.bitnet)
diff --git a/macros/latex209/contrib/misc/mathtext.sty b/macros/latex209/contrib/misc/mathtext.sty
new file mode 100644
index 0000000000..3d54d9fcf0
--- /dev/null
+++ b/macros/latex209/contrib/misc/mathtext.sty
@@ -0,0 +1,12 @@
+% MATHTEXT.STY
+% Author: George D. Greenwade, Director, Center for Business and Economic
+% Research, Sam Houston State University, Huntsville, TX 77341-2056
+% Voice: (409) 294-1518 BITNET: BED_GDG@SHSU
+% Purpose: Brief style file which allows the issuance of \text{foo} to insert
+% text in mathmode, and warns (but processes fragilely) when
+% encountered outside mathmode.
+% Date: January 14, 1989 (GDG)
+\typeout{Document substyle 'mathtext.sty' January 14, 1989 (GDG)}
+\def\text#1{\ifmmode\leavevmode\hbox{#1}\else
+ \typeout{Warning: \string\text \space used outside math mode!}
+ \begingroup\hbox{#1}\endgroup\fi}
diff --git a/macros/latex209/contrib/misc/meparticle.sty b/macros/latex209/contrib/misc/meparticle.sty
new file mode 100644
index 0000000000..6d90a700d0
--- /dev/null
+++ b/macros/latex209/contrib/misc/meparticle.sty
@@ -0,0 +1,324 @@
+% MEParticle.sty 26-Mar-92 balemi@aut.ee.ethz.ch
+% For articles according to the formatting instructions for the
+% proceedings of Mechanical Engineering Publications Limited
+%
+% use with \title{} \author{} \abstract{} \maketitle
+
+
+\typeout{Document Style `MEParticle' <26 Mar 92>.}
+
+
+\def\abstract#1{\gdef\@abstract{#1}}
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+\input art1\@ptsize.sty\relax
+
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\section*{REFERENCES\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {(\arabic{enumi})}{\settowidth\labelwidth{[#1]}
+ \labelwidth 8mm \leftmargin 8mm
+ \itemsep -1.5mm
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\def\@mklab#1{#1 \hfil}
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{MEPheadings}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize #1: #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{MEPheadings}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+\let\thanks\relax}
+\def\@maketitle{\newpage
+\vskip 55mm \noindent {\bf SYNOPSIS. }\@abstract
+ \par
+ \vskip 1em}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
+
+
+\twocolumn
+
+% FROM art10.sty 22-Dec-87
+\def\section{\@startsection {section}{1}{\z@}{-2.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-2.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+\setlength{\columnsep}{6mm}
+\setlength{\topmargin}{-2cm}
+\setlength{\headheight}{23mm}
+\setlength{\headsep}{0.8cm}
+\setlength{\textheight}{240mm}
+\setlength{\oddsidemargin}{0.5cm}
+\setlength{\textwidth}{161mm}
+
+\pagestyle{MEPheadings}
+\newdimen\headwidth
+\newdimen\headrulewidth
+\headrulewidth 0.4pt
+\headwidth \textwidth
+\addtolength\headwidth{-10mm}
+\def\footnoterule{\kern-3\p@
+ \hrule width \columnwidth
+ \kern 2.6\p@}
+
+\def\footernote#1{\def\@footernote{#1}}
+\footernote{}
+\def\@oddfoot{\hfill\@footernote}\def\@evenfoot{\@footernote\hfill}
+
+\def\ps@MEPheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox{}}
+\def\@oddfoot{\hfill\@footernote}\def\@evenfoot{\@footernote\hfill}
+\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+% Definition for the running heads. The standard command
+% \markboth{author's name}{title of the paper}
+% can be used to manually set the headers
+\def\@evenhead{\hbox to\headwidth{\vbox{\hbox
+{\rlap{\parbox[b]{\headwidth}{\leftmark \strut}\hfil \thepage}}}}\hss}
+\def\@oddhead{\hbox to\headwidth{\vbox{\hbox
+{\rlap{\parbox[b]{\headwidth}{\rightmark\strut}\hfil \thepage}}}}\hss}
+\def\rightmark{\@author\\\@title \gdef\@title{}
+}
+\def\leftmark{\@author\\@title \gdef\@title{}
+}
+\def\markboth#1#2{\def\leftmark{#1}\def\rightmark{#2}}
+
+
+
+\long\def\@makecaption#1#2#3{
+\ifx\figurestring#3
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1.~ #2}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{#1.~ }
+ \parbox{\hsize}{\raggedright\hangindent \wd\@tempboxa \hangafter=1%
+ \unhbox\@tempboxa#2}
+ \else \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+\else
+ \setbox\@tempboxa\hbox{#1~~ #2}
+ \ifdim \wd\@tempboxa >\hsize
+ \setbox\@tempboxa\hbox{#1~~ }
+ \parbox{\hsize}{\raggedright\hangindent \wd\@tempboxa \hangafter=1%
+ \unhbox\@tempboxa#2}
+ \else \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+ \vskip 10pt
+\fi
+}
+
+
+
+
diff --git a/macros/latex209/contrib/misc/merge.sty b/macros/latex209/contrib/misc/merge.sty
new file mode 100644
index 0000000000..b3f033869e
--- /dev/null
+++ b/macros/latex209/contrib/misc/merge.sty
@@ -0,0 +1,178 @@
+%% [merge.sty]
+%%
+%% MERGE -- A Form Letter Option to the LaTeX Letter Style
+%%
+%% by
+%%
+%% Graeme McKinstry
+%% Computing Services Centre
+%% University of Otago
+%% P O Box 56
+%% Dunedin, New Zealand
+%%
+%% graeme%otago.ac.nz@relay.cs.net
+%%
+%% A version of these macros appeared in TUGboat 8 #1, April 1987.
+%%
+%% Merge is a substyle [option] under the Latex style 'Letter' which
+%% merges a standard letter with a separate file containing addresses
+%% and opening lines. Merge will read {address}{opening} pairs from a
+%% specified file and merge them with a form letter by producing a separate
+%% letter environment (containing unique "\begin{letter}{address}" and
+%% "\opening{opening}" commands) for each pair.
+%%
+%% Detailed instructions for preparation of the form letter and the
+%% separate address file appear below, after the macros.
+%%
+%%
+%% 27 July 1988
+%% Special Thanks go to B. Beeton (BNB@SEED.AMS.COM) for
+%% -- supplying the raw TeX and documentation from the TUGBoat article;
+%% -- adding some documentation;
+%% -- and for placing this file in the <tex.tugboat> archives at score.
+%%
+%% 28 July 1988
+%% C. Roberson (csrobe@icase.[arpa|edu], csrobe@[wm]cs.wm.edu)
+%% -- some additional documentation (mostly cleanup for .sty file);
+%% -- changed ID message to a form more similar to LaTeX's;
+%% -- changed "Could not open file" to "Could not open address file"
+%% so user would better understand for which filename TeX
+%% was prompting with the string "\@mergefile=";
+%% -- tested merge.sty; It works! Thanks, Graeme!
+%% -- submitted file to /public/latex-style archives @ cs.rochester.edu.
+%%
+%% 6 September 1988
+%% G. McKinstry
+%% -- enhanced the macros to handle running headlines properly;
+%% -- fixed some other problems from the original version not addressed
+%% fully by C. Roberson;
+%% -- submitted new file to the latex-style archives.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% csr - changed next line to conform more to LaTeX greeting.
+\typeout{Letter Sub-Style 'Merge'. Release 6 October 1986 by Graeme McKinstry}
+
+%% The basic algorithm is:
+%% 1. Open the address file.
+%% 2. Read the addresses file getting the address and opening line.
+%% 3. Process the contents of the MERGE environment and store it
+%% in a box (\@store). This is the standard part of the letter.
+%% 4. Produce the start of the letter (your address (including date),
+%% their address, and the opening line).
+%% 5. Make a copy of the standard letter (\@store) and unbox this copy.
+%% 6. Repeat steps 2, 4, and 5 (not 3) until there are no more addresses.
+
+
+\newbox\@store
+\long\def\@contents{\global\setbox\@store=\vbox\bgroup} % store the contents
+\long\def\@endcontents{\egroup} % of the letter
+
+\def\@sendaddress{test}
+\def\@openingtext{test}
+\newif\if@firsttime % For storing the standard letter
+\@firsttimetrue % the first time through.
+
+\newread\@addrfile % allocate an input stream
+
+\def\@openfile{\openin\@addrfile=\@mergefile % open the address file
+\ifeof\@addrfile % i.e., didn't open successfully
+ \loop
+ \immediate\write16{Could not open address file \@mergefile}
+ \closein\@addrfile % close the input stream
+ \read16 to \@mergefile % get another file name
+ \openin\@addrfile=\@mergefile % open up input stream
+ \ifeof\@addrfile
+ \repeat % repeat until successfully opened
+\fi}
+
+% The merge environment (used as the \begin{merge}. The argument (#1) is
+% the name of the file containing the addresses (a default of .tex extension)
+% This file is opened (\@openfile), read (\@readfile), and then the box
+% containing the contents of the standard letter is started (\@contents).
+
+\def\merge#1{\def\@mergefile{#1 }\@openfile
+ \@readfile
+ \@contents}
+
+% Read address file getting the address and opening line. If this is the
+% first through then there is no reason to call \endmerge as this will
+% be called later on (when \end{merge} is used).
+
+\def\@getopeningline{\global\read\@addrfile
+ to\@openingtext} % get the opening line
+
+\def\@readfile{\global\read\@addrfile to\@sendaddress % get the address
+ \ifeof\@addrfile
+ \let\next=\relax
+ \else
+ \@getopeningline
+ \if@firsttime
+ \let\next=\relax
+ \else
+ \let\next=\endmerge
+ \fi
+ \fi\next}
+
+\newbox\@letterbox % For copy of \@store (the box containing the standard
+ % letter.
+\def\endmerge{\if@firsttime\@endcontents\global\@firsttimefalse\fi %
+ % end contents if it is the first time
+ \bgroup\let\oldletter=\letter
+ \def\letter##1\@relax{\oldletter{##1}} % redefines letter
+ \expandafter\letter\@sendaddress\@relax % need to expand \@sendaddress
+ \opening{\@openingtext\vskip2\parskip}
+ \setbox\@letterbox=\copy\@store % copy the contents of the letter
+ \unvbox\@letterbox
+ \endletter\egroup
+ \ifeof\@addrfile
+ \message{End of file}
+ \let\next=\relax
+ \else
+ \let\next=\@readfile % loop round yet again
+ \fi\next}
+
+\endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% A letter, say LETTER.TEX, would be set up as follows:
+
+%% \documentstyle[merge]{letter}
+%%
+%% \address{...} % your address
+%% \signature{...} % your signature
+%%
+%% \begin{document}
+%% \begin{merge}{myaddresses} % MYADDRESSES.TEX contains addresses+openings
+%%
+%% With regard to .... % letter starts
+%%
+%% \closing{...} % closing
+%% \ps{...} % \ps, \encl, \cc, etc.
+%%
+%% \end{merge}
+%% \end{document}
+
+%% The address file, MYADDRESSES.TEX, would contain:
+
+%% {Computing Services Centre, \\ % first address
+%% University of Otago, \\
+%% Dunedin, \\
+%% New Zealand}
+%% {Dear Graeme,} % \opening for first address
+%% {Charles S. Roberson\\ % next address
+%% Dept. of Computer Science\\
+%% College of William and Mary\\
+%% Williamsburg, VA 23185}
+%% {Dear Chip,} % next \opening
+%% .... % etc.
+
+%% NOTES:
+%% Braces are matched, except that if the input is only one line then it
+%% is not necessary to contain it within braces.
+%% It is important to leave NO BLANK LINES at the end of the address file.
+%% Be sure to supply the "\\" for breaking the addresses. -csr
+
+%% [merge.sty]
diff --git a/macros/latex209/contrib/misc/mf.sty b/macros/latex209/contrib/misc/mf.sty
new file mode 100644
index 0000000000..40ce64705a
--- /dev/null
+++ b/macros/latex209/contrib/misc/mf.sty
@@ -0,0 +1,37 @@
+% mf.sty:
+% Document style option to define Metafont logo in all sizes
+% Author: Don Hosek
+% Revision Date: 3/27/89
+% User macros defined: \mf (print Metafont logo)
+% \logo (select MF logo font
+
+% Define \logo in terms of \plogo so that it isn't fragile (see lfonts.tex)
+\def\logo{\protect\plogo}
+
+% We need a family too. [I think this is a waste on LaTeX's part]
+\newfam\logofam
+
+% Define font that will be loaded for logo font here:
+\def\@logof{logo10}
+\def\@logoix{logo9}
+\def\@logoviii{logo8}
+
+% Insert messages for attempted use of \logo at 5-7pt:
+\@addfontinfo\@vpt{\def\plogo{\@prtct\@subfont\@prtct\logo\@prtct\rm}}
+\@addfontinfo\@vipt{\def\plogo{\@prtct\@subfont\@prtct\logo\@prtct\rm}}
+\@addfontinfo\@viipt{\def\plogo{\@prtct\@subfont\@prtct\logo\@prtct\rm}}
+
+% actually get the font for sizes 8-25pt:
+\@getfont\plogo\logofam\@viiipt{\@logoviii}
+\@getfont\plogo\logofam\@ixpt{\@logoix}
+\@getfont\plogo\logofam\@xpt{\@logof}
+\@getfont\plogo\logofam\@xipt{\@logof\@halfmag}
+\@getfont\plogo\logofam\@xiipt{\@logof\@magscale1}
+\@getfont\plogo\logofam\@xivpt{\@logof\@magscale2}
+\@getfont\plogo\logofam\@xviipt{\@logof\@magscale3}
+\@getfont\plogo\logofam\@xxpt{\@logof\@magscale4}
+\@getfont\plogo\logofam\@xxvpt{\@logof\@magscale5}
+
+\def\MF{{\logo META}\-{\logo FONT}}
+
+\endinput
diff --git a/macros/latex209/contrib/misc/misc.sty b/macros/latex209/contrib/misc/misc.sty
new file mode 100644
index 0000000000..9720b4f5dc
--- /dev/null
+++ b/macros/latex209/contrib/misc/misc.sty
@@ -0,0 +1,62 @@
+% podar@sbcs (Sunil Podar) July 14, 1986
+% following commands implemented here (see the comments below for more info):
+% \pmb
+% \timeofday
+% \verbfile
+% \listing
+%----------------------------------------------------------------------------
+% poor man's bold. from pp. 386 of TeXbook. 1.732*0.025=0.0433 (the ratio of
+% em to ex)
+\newdimen\pmboffset
+\pmboffset 0.025em
+\def\pmb#1{\setbox0=\hbox{#1}%
+ \kern-\pmboffset\copy0\kern-\wd0
+ \kern 2\pmboffset\copy0\kern-\wd0
+ \kern-\pmboffset\raise 1.732\pmboffset\box0 }
+%----------------------------------------------------------------------------
+% \timeofday is just like \today; it gives the current time of day in the form
+% hh:mm as in the military style. It eats up a blank so normally one would
+% say: \timeofday\ (i.e. a \<space>.
+\def\timeofday{{\@tempcnta=\time \divide\@tempcnta by 60 \@tempcntb=\@tempcnta
+\multiply\@tempcntb by 60 \advance\@tempcntb by -\time %@tempcntb is -ve here
+\ifnum\@tempcntb < -9 \number\@tempcnta:\number-\@tempcntb
+ \else\number\@tempcnta:0\number-\@tempcntb\fi}}
+%----------------------------------------------------------------------------
+%From: Tim Morgan <morgan@uci-icsa>
+%Subject: verbatim macros
+%Here are some macros which I mostly stole from the TeXbook source and
+%other places. You can say
+%
+% \verbfile{filename}
+%to \input all of "filename" in verbatim mode. The end of the file is the
+%only thing that gets you back out of verbatim -- no characters are special.
+%\listing is the same except that each line of the file is automatically
+%numbered.
+%Tim
+%
+% Produce verbatim listings of various sorts
+
+\def\uncatcodespecials{\def\do##1{\catcode`##1=12 } \dospecials}
+
+\def\setupverbatim{%
+ \par \tt \spaceskip=0pt % Make sure we get fixed tt spacing
+ \obeylines\uncatcodespecials\obeyspaces\verbatimdefs
+}
+{\catcode`\^^M=13{\catcode`\ =13\gdef\verbatimdefs{\def^^M{\ \par}\let =\ }}
+ \gdef\verbatimgobble#1^^M{}}
+%
+% Input a file in verbatim mode. Sometimes useful for including
+% real-life examples into a paper.
+\def\verbfile#1{\begingroup\setupverbatim
+ \parskip=0pt plus .05\baselineskip \parindent=0pt
+ \input#1 \endgroup
+}
+
+% This is the same as the above, but it adds line numbers to each
+% line of the file printed.
+\newcount\lineno
+\def\listing#1{\lineno=0\begingroup\setupverbatim
+ \parskip=0pt plus .05\baselineskip \parindent=20pt
+ \everypar{\advance\lineno by 1 \llap{\the\lineno\ \ }}\input#1
+ \endgroup
+}
diff --git a/macros/latex209/contrib/misc/moreverb.readme b/macros/latex209/contrib/misc/moreverb.readme
new file mode 100644
index 0000000000..e3d3c29fa6
--- /dev/null
+++ b/macros/latex209/contrib/misc/moreverb.readme
@@ -0,0 +1,7 @@
+% NOTE FROM CTAN ADMINISTRATOR: moreverb.sty requires verbatim.sty.
+%Verbatim.sty is no longer supported for LaTeX 2.09, but a verbatim
+%package is available in tex-archive/macros/latex/packages/tools/verbatim.dtx.
+%If you are unable to upgrade to latex2e, a verbatim.sty which MAY work
+%is available in tex-archive/fonts/ams/amsltx11/inputs/verbatim.sty. Do not
+%under any circumstances bother the author of this latter file with any
+%problems you may have.
diff --git a/macros/latex209/contrib/misc/multicolpar.sty b/macros/latex209/contrib/misc/multicolpar.sty
new file mode 100644
index 0000000000..ade42b1585
--- /dev/null
+++ b/macros/latex209/contrib/misc/multicolpar.sty
@@ -0,0 +1,69 @@
+%% Save file as: MULTICOLPAR.STY Source: FILESERV@SHSU.BITNET
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% File multicolpar.sty
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% by
+% Mauro Orlandini <orlandini@lheavx.gsfc.nasa.gov>
+% Modified by Max Hailperin <max@nic.gac.edu>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This LaTeX style, writes different paragraphs in different columns
+% the number of columns is free), as
+% This is the first paragraph | This is the second paragraph and its
+% and text follows... | own text follows...
+%
+% This is the third paragraph | This is the fourth paragraph...
+% and text follows... |
+%
+% This format is useful for translated articles, in which there is the
+% original language in the first column and the translated version in
+% the second.
+%
+% Usage: \begin{multicolpar}{N}
+% ... text ...
+% \end{multicolpar}
+%
+% where N is the number of columns in which the text will be displayed.
+% Warning: Inside the environment, each blank line (ie a \par) will correspond
+% to a paragraph, therefore do not leave blank lines soon after the
+% \begin{multicolpar}{N} command and soon before the \end{multicolpar}
+% command (unless you want so).
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newenvironment{multicolpar}[1]{\begin{trivlist}\item[]%
+\multicolumnparallelparagraphs{#1}{2em}}%
+{\endmulticolumnparallelparagraphs\end{trivlist}}
+
+\newcount\columnsleft \newcount\totalcolumns \newdimen\separation
+
+\def\multicolumnparallelparagraphs#1#2{%
+ \hbadness5000 \vbadness9999 \tolerance9999
+ \totalcolumns=#1 \separation=#2 \let\xpar=\par
+ \vskip\parskip
+ \columnsleft=#1\relax
+ \hbox to\hsize\bgroup
+ \let\par\nextmulticolumnparallelparagraph
+ \dimen0=#2\advance\hsize-\columnsleft\dimen0 \advance\hsize\dimen0
+ \divide\hsize\columnsleft\relax
+ \vtop\bgroup}
+\def\nextmulticolumnparallelparagraph{%
+ \egroup
+ \advance\columnsleft-1
+ \ifnum\columnsleft>0
+ \hfil\vtop\bgroup
+ \else
+ \egroup
+ \xpar\vskip\baselineskip\xpar
+ \multicolumnparallelparagraphs\totalcolumns\separation
+ \fi}
+
+\def\endmulticolumnparallelparagraphs{%
+ \egroup
+ \advance\columnsleft-1
+ \ifnum\columnsleft>0
+ \hfil\vtop\bgroup\hbox to \hsize{}
+ \endmulticolumnparallelparagraphs
+ \else
+ \egroup
+ \xpar
+ \fi}
diff --git a/macros/latex209/contrib/misc/multind.sty b/macros/latex209/contrib/misc/multind.sty
new file mode 100644
index 0000000000..ef91c28df0
--- /dev/null
+++ b/macros/latex209/contrib/misc/multind.sty
@@ -0,0 +1,65 @@
+% indexes document style option for producing multiple indexes
+% for use with the modified bbok style, CHbook.sty
+% Written by F.W. Long, Version 1.1, 12 August 1991.
+
+% Modified by F.W. Long, Version 1.1a, 29 August 1991
+% to get the index heading correctly spaced.
+
+% Modified by F.W. Long, Version 1.1b, 31 August 1991
+% to remove the abbreviation \ix (which should be in the document, not here).
+
+% Modified \makeindex and \index commands to allow multiple indexes
+% in both cases the first parameter is the index name.
+% They now work more like \@starttoc and \addcontentsline.
+% \index is no longer defined inside \makeindex but determines
+% whether the appropriate file is defined before writing to it.
+
+\def\makeindex#1{\begingroup
+ \makeatletter
+ \if@filesw \expandafter\newwrite\csname #1@idxfile\endcsname
+ \expandafter\immediate\openout \csname #1@idxfile\endcsname #1.idx\relax
+ \typeout{Writing index file #1.idx }\fi \endgroup}
+
+\def\index#1{\@bsphack\begingroup
+ \def\protect##1{\string##1\space}\@sanitize
+ \@wrindex{#1}}
+
+% \@wrindex now checks that the appropriate file is defined.
+
+\def\@wrindex#1#2{\let\thepage\relax
+ \xdef\@gtempa{\@ifundefined{#1@idxfile}{}{\expandafter
+ \write\csname #1@idxfile\endcsname{\string
+ \indexentry{#2}{\thepage}}}}\endgroup\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+% Modified \printindex command to allow multiple indexes.
+% This now takes over much of the work of \theindex.
+% Again, the first parameter is the index name.
+% The second parameter is the index title (as printed).
+
+\newif\if@restonecol
+\def\printindex#1#2{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+ \columnseprule \z@ \columnsep 35pt
+ \newpage \twocolumn[{\Large\bf #2 \vskip4ex}]
+ \markright{\uppercase{#2}}
+ \addcontentsline{toc}{section}{#2}
+ \@input{#1.ind}}
+
+% The following index commands are taken from book.sty.
+% \theindex is modified to not start a chapter.
+
+\def\theindex{\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+% the command \ix allows an abbreviation for the general index
+
+%\def\ix#1{#1\index{general}{#1}}
+
+% define the \see command from makeidx.sty
+
+\def\see#1#2{{\em see\/} #1}
diff --git a/macros/latex209/contrib/misc/newequation.sty b/macros/latex209/contrib/misc/newequation.sty
new file mode 100644
index 0000000000..cd0714c4d8
--- /dev/null
+++ b/macros/latex209/contrib/misc/newequation.sty
@@ -0,0 +1,28 @@
+% newequation.sty
+%
+% 12 Jan 91 Created.
+% clayton@thumper.bellcore.com
+%
+% newequation.sty defines the \newequation command, which defines
+% new equation environments. The command format is
+%
+% \newequation{name}{format}
+%
+% where "name" is the name of the new equation environment and "format"
+% is the format of the equation number. For example,
+%
+% \newequation{define}{(D\arabic{define})}
+%
+% The new environment follows Latex's numbered sections convention:
+% there's a counter called "name" and a command called \the"name" with
+% "format" as its initial definition. See section 5.3 in the Latex
+% user's guide for more on numbering.
+
+\def \newequation#1#2{
+ \@definecounter{#1}
+ \@namedef{the#1}{\hbox{#2}}
+ \@namedef{#1}{$$\refstepcounter{#1}}
+ \@namedef{end#1}{
+ \eqno \csname the#1\endcsname $$\global\@ignoretrue
+ }
+ }
diff --git a/macros/latex209/contrib/misc/nextslide.sty b/macros/latex209/contrib/misc/nextslide.sty
new file mode 100644
index 0000000000..b9d7e3ac3a
--- /dev/null
+++ b/macros/latex209/contrib/misc/nextslide.sty
@@ -0,0 +1,47 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Mario Wolczko",
+%%% version = "3",
+%%% date = "21 May 1992",
+%%% time = "20:58:09 BST",
+%%% filename = "nextslide.sty",
+%%% address = "Dept of Computer Science
+%%% The University of Manchester
+%%% Oxford Road
+%%% Manchester M13 9PL
+%%% UK",
+%%% telephone = "+44-61-275-6146",
+%%% FAX = "+44-61-275-6236",
+%%% checksum = "48653 47 228 1860",
+%%% email = "mario@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "SliTeX, page control",
+%%% supported = "yes",
+%%% docstring = "Adds \newslide command to SliTeX, allowing
+%%% (some) other environments (e.g. lists) to span multiple slides.",
+%%% }
+%%% ====================================================================
+%If you, like me, are driven crazy by slitex's insistence that you
+%delimit each and every slide with a \begin{slide}..\end{slide}
+%environment, then some relief is at hand.
+%
+%This style option defines a single command, \newslide, than
+%you can use to replace the sequence
+% \end{slide}
+% \begin{slide}{}
+%
+%It's better than \newpage, because that doesn't increment the page
+%count, and gives you a "slide too long" error -- \newslide doesn't.
+%And unlike \end{slide}\begin{slide}{} you can use \newslide within an
+%environment, eg
+% \begin{enumerate}
+% \item foo
+% \item bar
+% \newslide
+% \item baz
+% \end{enumerate}
+%
+%Given that the functioning part of newslide.sty is only 32 characters
+%long, I don't know why it isn't provided in the first place!
+
+\def\newslide{\endslide\slide{}}
diff --git a/macros/latex209/contrib/misc/nf.sty b/macros/latex209/contrib/misc/nf.sty
new file mode 100644
index 0000000000..c0632061d9
--- /dev/null
+++ b/macros/latex209/contrib/misc/nf.sty
@@ -0,0 +1,170 @@
+%%% Save file as: nf.sty Source: FILESERV@SHSU.BITNET
+%%% The following checksum includes all SHSU-generated topmatter.
+%%% checksum = "41408 170 486 6458"
+% NF (style option to ARTICLE) for Nuclear Fusion
+% NF DOCUMENT SUBSTYLE -- released 17 January 1989
+% Written by Charles Karney (Karney@Princeton.EDU).
+
+% This document style is designed for manuscripts to be submitted to
+% Nuclear Fusion.
+% To use this give NF as an optional argument to \documentstyle. The
+% main style should be ARTICLE. E.g.,
+% \documentstyle[12pt,nf]{article}
+% This provides all the same facilities as the AIP style, except:
+
+% (1) Sections are numbered with arabic numerals, e.g., 2.3.1 (the
+% ARTICLE default).
+
+% (2) Reference numbers in citation and bibliography are enclosed in []'s
+% (the ARTICLE default).
+
+% (3) The style of the subsections, etc. is different.
+
+% (4) Use Fig. instead of FIG. in figure captions, etc.
+
+\typeout{Document Substyle 'NF'. Released 17 January 1989}
+
+\def\thebibliography#1{\par\clearpage\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+% \citenum emits the plain citation number without ornament
+% \citea puts it's argument into the ornamentation for citations
+% thus \cite{foo} is equivalent to \citea{\citenum{foo}}
+\def\citenum#1{{\def\@cite##1##2{##1}\cite{#1}}}
+\def\citea#1{\@cite{#1}{}}
+
+% Collapse citation numbers to ranges. Non-numeric and undefined labels
+% are handled. No sorting is done. E.g., 1,3,2,3,4,5,foo,1,2,3,?,4,5
+% gives 1,3,2-5,foo,1-3,?,4,5
+\newcount\@tempcntc
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@ifundefined
+ {b@\@citeb}%
+ {\@citeo\@tempcntb\m@ne\@citea\def\@citea{,\penalty\@m\ }{\bf ?}%
+ \@warning{Citation `\@citeb' on page \thepage \space undefined}}%
+ {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}%
+ \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne
+ \@citea\def\@citea{,\penalty\@m\ }\hbox{\csname b@\@citeb\endcsname}%
+ \else
+ \advance\@tempcntb\@ne
+ \ifnum\@tempcntb=\@tempcntc
+ \else\advance\@tempcntb\m@ne\@citeo
+ \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}}
+\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else\@citea\def\@citea{,\penalty\@m\ }%
+ \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else
+ {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else \def\@citea{--}\fi
+ \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi}
+
+% Title page
+\def\@maketitle{\newpage
+ \null
+ \vskip 1em plus 2em minus 1em % Vertical space before date.
+ \ifx\@date\@empty\else
+ \begin{flushright}
+ {\normalsize \@date} % Date set in \large size.
+ \end{flushright}
+ \vskip 2em plus 2em minus 1em % Vertical space above title.
+ \fi
+ \begin{center}
+ {\Large\bf \@title \par} % Title set in \Large size.
+ \vskip 1.5em plus 0em minus .5em % Vertical space after title.
+ {\large % each author set in \large, in a
+ \lineskip .5em plus 0em minus .3em % tabular environment
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+\end{center}
+ \par
+ \vskip 1.5em plus .5em minus .5em} % Vertical space after author.
+
+\newif\if@starvariant \@starvariantfalse
+
+\def\abstract{\if@starvariant\else\section*{Abstract}\fi}
+\def\endabstract{\par\clearpage}
+
+\@namedef{abstract*}{\@starvarianttrue\abstract}
+\@namedef{endabstract*}{\endabstract}
+
+\parskip 1.5pt plus 1.5pt % Extra vertical space between paragraphs.
+\tabcolsep 12pt % Double column separation in tables
+
+\def\section{\@startsection {section}{1}{\z@}{3.5ex plus 1ex minus
+ .2ex}{2.3ex plus .2ex}{\large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{3.25ex plus 1ex minus
+ .2ex}{1.5ex plus .2ex}{\large\sl}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{3.25ex plus
+1ex minus .2ex}{1.5ex plus .2ex}{\normalsize\sl}}
+
+\newif\if@numbersec \@numbersectrue
+\def\appendix{\par\clearpage
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \@addtoreset{equation}{section}
+ \def\theequation{\thesection\arabic{equation}}
+ \def\thesection{\Alph{section}}
+ \def\thesubsection{\arabic{subsection}}
+ \@ifstar{\def\@sectname{Appendix}\@numbersecfalse}
+ {\def\@sectname{Appendix~}\@numbersectrue}}
+
+% Figures
+\def\thefigures#1{\par\clearpage
+ \if@starvariant\section*{Figure\@mkboth
+ {FIGURE}{FIGURE}}\else
+ \section*{Figures\@mkboth
+ {FIGURES}{FIGURES}}\fi
+ \list
+ {Fig.~\arabic{enumi}.}{\labelwidth\parindent\advance\labelwidth -\labelsep
+ \leftmargin\parindent\usecounter{enumi}}}
+\def\figitem#1{\item\label{#1}}
+\let\endthefigures=\endlist
+
+\@namedef{thefigures*}{\@starvarianttrue\thefigures}
+\@namedef{endthefigures*}{\endthefigures}
+
+% Tables
+\def\thetables#1{\par\clearpage
+ \if@starvariant\section*{Table\@mkboth
+ {TABLE}{TABLE}}\else
+ \section*{Tables\@mkboth
+ {TABLES}{TABLES}}\fi
+ \list
+ {Table~\Roman{enumi}.}{\labelwidth-\labelsep
+ \leftmargin0pt\usecounter{enumi}}}
+\def\tableitem#1{\item\label{#1}}
+\let\endthetables=\endlist
+
+\@namedef{thetables*}{\@starvarianttrue\thetables}
+\@namedef{endthetables*}{\endthetables}
+
+% Put period after section number and allow for APPENDIX prefix.
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\ifnum #2=1 \@sectname
+ \if@numbersec\csname the#1\endcsname\fi.\else
+ \csname the#1\endcsname.\fi
+ \hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\@sectname{}
+
+\endinput
diff --git a/macros/latex209/contrib/misc/nl.sty b/macros/latex209/contrib/misc/nl.sty
new file mode 100644
index 0000000000..d7a241e9cf
--- /dev/null
+++ b/macros/latex209/contrib/misc/nl.sty
@@ -0,0 +1,113 @@
+% Met ========== onderstreept nederlandse teksten
+\@ifundefined{chapter}
+{%%%%%%%%%%%%%%% dit is voor article style %%%%%%%%%%%%%%%%%%%%%
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf Deel \thepart \par \nobreak \fi \huge
+% ====
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\tableofcontents{\section*{Inhoud\markboth{INHOUD}{INHOUD}}
+% ====== ====== ======
+ \@starttoc{toc}}
+\def\listoffigures{\section*{Lijst van figuren\markboth
+% ==================
+ {LIJST VAN FIGUREN}{LIJST VAN FIGUREN}}\@starttoc{lof}}
+% ================= =================
+\def\listoftables{\section*{Lijst van tabellen\markboth
+% ==================
+ {LIJST VAN TABELLEN}{LIJST VAN TABELLEN}}\@starttoc{lot}}
+% ================== ==================
+\def\thebibliography#1{\section*{Referenties\markboth
+% ===========
+ {REFERENTIES}{REFERENTIES}}\list
+% =========== ===========
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+% =====
+ \markboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+% ===== =====
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\abstract{\if@twocolumn
+\section*{Samenvatting}
+% ============
+\else \small
+\begin{center}
+{\bf Samenvatting\vspace{-.5em}\vspace{0pt}}
+% ============
+\end{center}
+\quotation
+\fi}}
+{%%%%%%%%%%%%%% Dit is voor report en book style %%%%%%%%%%%%%%%
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+ \ifnum \c@secnumdepth >-2\relax \huge\bf Deel \thepart \par \vskip 20pt \fi
+% ====
+\Huge \bf #1\@endpart}
+\def\@chapapp{Hoofdstuk}
+% =========
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{Appendix}
+% ========
+ \def\thechapter{\Alph{chapter}}}
+\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{Inhoud\@mkboth{INHOUD}{INHOUD}}
+% ====== ====== ======
+ \@starttoc{toc}\if@restonecol\twocolumn\fi}
+\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{Lijst van figuren\@mkboth
+% =================
+ {LIJST VAN FIGUREN}{LIJST VAN FIGUREN}}\@starttoc{lof}\if@restonecol\twocolumn
+% ================= =================
+ \fi}
+\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{Lijst van tabellen\@mkboth
+% ==================
+ {LIJST VAN TABELLEN}{LIJST VAN TABELLEN}}\@starttoc{lot}\if@restonecol
+% ================== ==================
+ \twocolumn\fi}
+\def\thebibliography#1{\chapter*{Referenties\@mkboth
+% ===========
+ {REFERENTIES}{REFERENTIES}}\list
+% ============ ============
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\@makeschapterhead{Index}]
+% =====
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+% ===== =====
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\abstract{\titlepage
+\null\vfil
+\begin{center}
+{\bf Samenvatting}
+% ============
+\end{center}}
+}
+%%%%%%%%%%%%%%%%%%% dit is voor allebei %%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\today{\number\day\space\ifcase\month%
+\or jan\or feb\or maart\or apr\or mei\or juni%
+% === === ===== === === ====
+\or juli\or aug\or sept\or okt\or nov\or dec\fi
+% ==== === ==== === === ===
+\space\number\year}
+\def\fnum@figure{Figuur \thefigure}
+% ======
+\def\fnum@table{Tabel \thetable}
+% =====
diff --git a/macros/latex209/contrib/misc/nnfootnote.sty b/macros/latex209/contrib/misc/nnfootnote.sty
new file mode 100644
index 0000000000..3b84844356
--- /dev/null
+++ b/macros/latex209/contrib/misc/nnfootnote.sty
@@ -0,0 +1,33 @@
+% T Mark Ellison 26 Jun 1991
+%
+% This style file defines the command \nnfoottext
+% which allows the user to at any time insert footnote
+% text material without adding a footnote number
+% to either the main page or the note.
+%
+% Sample Use:
+%
+% .....
+% \begin{document}
+% .....
+% \nnfoottext{This is a witty and interesting
+% numberless footnote. Thank-you.}
+% .....
+% \end{document}
+%
+% This was originally developed for the acknowledgement
+% notes similar to the style used by the journal
+% Linguistic Inquiry. The code was adapted from the latex
+% source.
+%
+\long\def\nnfoottext#1{\insert\footins{\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@thefnmark{}
+ \edef\@currentlabel{}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+
diff --git a/macros/latex209/contrib/misc/nopagenumbers.sty b/macros/latex209/contrib/misc/nopagenumbers.sty
new file mode 100644
index 0000000000..6a96bf7a99
--- /dev/null
+++ b/macros/latex209/contrib/misc/nopagenumbers.sty
@@ -0,0 +1,15 @@
+%
+% A tiny style file to suppress page numbers on LaTeX pages. I can never
+% remember {\em what} LaTeX calls it!
+%
+% Richard Furuta
+% Department of Computer Science
+% University of Maryland
+% College Park, MD 20742
+%
+% furuta@mimsy.umd.edu
+% seismo!umcp-cs!furuta
+%
+% October 22, 1986, first release
+%
+\pagestyle{empty}
diff --git a/macros/latex209/contrib/misc/noprot.sty b/macros/latex209/contrib/misc/noprot.sty
new file mode 100644
index 0000000000..43d346bb2e
--- /dev/null
+++ b/macros/latex209/contrib/misc/noprot.sty
@@ -0,0 +1,188 @@
+% Style file noprot.sty by Sami Sozuer. (June 1994)
+% This style file eliminates the need for \protect'ion in:
+%
+% 1 - Argument of \thanks
+% 2 - Argument (or optional argument) of \caption
+% 3 - Optional argument of \bibitem
+% 4 - Arguments of \addcontentsline and \addtocontents
+% 5 - Sectioning commands (\chapter \section etc)
+% EXCEPT when the argument of a sectioning command appears in
+% a page heading (as for example is the case with \chapter and \section
+% commands in the book style).
+%
+% The remaining problem of fragile commands within the headings
+% will be addressed later.
+%
+% The elimination of \protect within \caption and sectioning commands
+% is made possible by suppressing the expansion of the arguments
+% of these commands and by writing them into the .aux
+% file as literal strings. This means that values of dynamic quantities
+% cannot be included in these commands any more. If you need to reference
+% a page, use \pageref instead of \the\page or something similar in the
+% argument of \caption and/or sectioning commands.
+% Thanks to David Carlisle for pointing this out.
+%
+% The following is a remedy for such rare cases:
+% ===================================================================
+% Let's assume you have a List of Figures, and that you MUST expand
+% something at the point where \caption is issued, so that its value
+% appears in the List of Figures entry. In the old scheme, you would say:
+%
+% \caption{First part of Caption \value{\MyCounter} Second part of Caption}
+%
+% and the value of the \MyCounter would appear in the List of Figures.
+% But with this style file, you need to use a somewhat more complicated
+% construct similar to the following:
+%
+% \def\CaptionI{First part of Caption}
+% \def\CaptionII{Second part of Caption}
+% \edef\temp{\noexpand\caption{\CaptionI \value{\MyCounter} \CaptionII}}
+% \temp
+%
+% Here, we need the current value of a user-defined counter \MyCounter
+% to be written into the .aux file which is read in the second run
+% of latex to produce the List of Figures. Since its value presumably
+% changes throughout the document, we want its value at the point that
+% the \caption command is issued, rather than its value at the point
+% that the List of Figures is typeset, to appear in the List of Figures.
+% If you don't have a list of figures, then of course you needn't
+% worry about any of this. The same considerations apply also for
+% the arguments of sectioning commands that appear in the Table of Contents.
+%
+% The rationale for using this style file, of course, is that such
+% cases are extremely rare! For one thing, most books/articles
+% rarely contain a List of Figures and/or a List of Tables, and even
+% when you do use one, the chances of needing an immediate expansion
+% in a \caption command are small.
+% ===================================================================
+%%%% Use : in private commands to reduce chances of conflict
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Remember the catcode of :
+\expandafter\edef\csname X:Old:Cat\endcsname{\the\catcode`\:}%
+\catcode`\:=11\relax%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%BEGIN:PROTECT etc
+\long\def\@caption#1[#2]#3{\par
+\X:addcontline{\csname ext@#1\endcsname}{#1}%
+{\string\numberline{\csname the#1\endcsname}}%
+{\ignorespaces #2}%
+ \begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \ifnum #2>\c@secnumdepth
+ \addcontentsline{toc}{#1}{#7}
+ \else
+ \X:addcontline{toc}{#1}{\string\numberline{\csname the#1\endcsname}}{#7}
+ \fi
+ \else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname{#7}
+ \ifnum #2>\c@secnumdepth
+ \addcontentsline{toc}{#1}{#7}
+ \else
+ \X:addcontline{toc}{#1}{\string\numberline{\csname the#1\endcsname}}{#7}
+ \fi}
+ \fi
+ \@xsect{#5}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #1,#2,#3 expanded; #4 is passed as string
+\def\X:addcontline#1#2#3#4{\if@filesw \begingroup
+\edef\X:argone{#1}%
+\edef\X:argtwo{#2}%
+\edef\X:argtri{#3}%
+\X:STRING{#4}{\argfor}%
+\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
+\def\protect{}%
+\@temptokena{\thepage}%
+%---------------use \edef because #2 and \the\@temptokena should be expandad
+%---------------before passed on to \@writefile, which does *not* expand
+\edef\@tempa%
+{\write \@auxout%
+{%---------------------\contentsline should not be expanded here
+\string\@writefile{\X:argone}{\string\contentsline{\X:argtwo}{\X:argtri\argfor}{\the\@temptokena}}%
+}%
+}\@tempa
+\if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@writefile#1#2{%
+\X:STRING{#2}{\X:argtu}%
+\@ifundefined{tf@#1}{}{\expandafter
+ \immediate\write\csname tf@#1\endcsname{\X:argtu}}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\X:STRING#1#2{\def\X:STRIP##1>{}\def\X:NEXT{#1}\edef#2{\expandafter\X:STRIP\meaning\X:NEXT}}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #1,#2 expanded; #3 is passed as string
+\def\addcontentsline#1#2#3{\if@filesw \begingroup
+\edef\X:argone{#1}%
+\edef\X:argtwo{#2}%
+\X:STRING{#3}{\X:argtri}%
+\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
+\def\protect{}%
+\@temptokena{\thepage}%
+%---------------use \edef because #2 and \the\@temptokena should be expandad
+%---------------before passed on to \@writefile, which does *not* expand
+\edef\@tempa%
+{\write \@auxout%
+{%---------------------\contentsline should not be expanded here
+\string\@writefile{\X:argone}{\string\contentsline{\X:argtwo}{\X:argtri}{\the\@temptokena}}%
+}%
+}\@tempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\long\def\addtocontents#1#2{\if@filesw \begingroup
+\X:STRING{#2}{\X:argtwo}\relax%
+\edef\X:argone{#1}%
+\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
+\def\protect##1{\string\string\string##1\string\space\space}%
+\edef\@tempa{\write \@auxout {\string\@writefile{\X:argone}{\X:argtwo}}}\@tempa
+\if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\thanks#1{\footnotemark%
+\begingroup%
+\gdef\X:thanks{#1}%-----------this \gdef should stay
+\def\protect{\noexpand\protect\noexpand}%
+\xdef\@thanks{\@thanks\protect\footnotetext[\the\c@footnote]%
+{\noexpand\X:thanks}}%
+\endgroup}%
+\def\@thanks{}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\@lbibitem[#1]#2{\item[\@biblabel{#1}]%
+\if@filesw
+{%
+\X:STRING{#1}{\X:argone}
+\def\protect##1{}%
+\immediate\write\@auxout{\string\bibcite{#2}{\X:argone}}
+}%
+\fi\ignorespaces}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% The following code is needed for the \label command in a \caption
+%%%% or section argument to work properly, since the argument of
+%%%% a \section or a \caption command is written verbatim into
+%%%% the .aux file without being expanded.
+\let\X:tableofcontents\tableofcontents%
+\def\tableofcontents{\begingroup%
+\let\label\@gobble\let\index\@gobble\let\glossary\@gobble%
+\X:tableofcontents\endgroup}%
+%
+\let\X:listoffigures\listoffigures%
+\def\listoffigures{\begingroup%
+\let\label\@gobble\let\index\@gobble\let\glossary\@gobble%
+\X:listoffigures\endgroup}%
+%
+\let\X:listoftables\listoftables%
+\def\listoftables{\begingroup%
+\let\label\@gobble\let\index\@gobble\let\glossary\@gobble%
+\X:listoftables\endgroup}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%END:PROTECT etc
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Restore catcode of :
+\catcode`\:=\csname X:Old:Cat\endcsname\relax%
+\expandafter\global\expandafter\let\csname X:Old:Cat\endcsname\undefined%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%that's it!
diff --git a/macros/latex209/contrib/misc/nosecnumbers.sty b/macros/latex209/contrib/misc/nosecnumbers.sty
new file mode 100644
index 0000000000..c630100b9a
--- /dev/null
+++ b/macros/latex209/contrib/misc/nosecnumbers.sty
@@ -0,0 +1,42 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Mario Wolczko",
+%%% version = "2",
+%%% date = "21 May 1992",
+%%% time = "20:59:56 BST",
+%%% filename = "nosecnumbers.sty",
+%%% address = "Dept of Computer Science
+%%% The University of Manchester
+%%% Oxford Road
+%%% Manchester M13 9PL
+%%% UK",
+%%% telephone = "+44-61-275-6146",
+%%% FAX = "+44-61-275-6236",
+%%% checksum = "09542 42 160 1796",
+%%% email = "mario@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, section numbers",
+%%% supported = "yes",
+%%% docstring = "Suppresses section numbers in \sections,
+%%% \subsections, etc (but still writes entries for a table of
+%%% contents).",
+%%% }
+%%% ====================================================================
+% nosecnumbers ... equivalent to a global replace of \section,
+% \subsection, etc, with \section* (except that you still get entries in
+% the table of contents).
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{}\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{#7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{#7}}\fi
+ \@xsect{#5}}
diff --git a/macros/latex209/contrib/misc/npsfont.sty b/macros/latex209/contrib/misc/npsfont.sty
new file mode 100644
index 0000000000..b9b48bef63
--- /dev/null
+++ b/macros/latex209/contrib/misc/npsfont.sty
@@ -0,0 +1,193 @@
+%% BEGIN npsfont.sty
+%%
+\def\fileversion{v1.0}
+\def\filedate{91/11/20}
+%%
+%% Style option npsfont.sty, for use with LaTeX 2.09
+%% and the New Font Selection Scheme.
+%%
+%% COPYRIGHT 1992, by Timothy Van Zandt, tvz@Princeton.EDU
+%%
+%% Copying of part or all of this file is allowed under the following
+%% conditions only:
+%% (1) You may freely distribute unchanged copies of the file. Please
+%% include the documentation when you do so.
+%% (2) You may modify a renamed copy of the file, but only for personal
+%% use or use within an organization.
+%% (3) You may copy fragments from the file, for personal use or for use
+%% in a macro package for distribution, as long as credit is given
+%% where credit is due.
+%%
+%% You are NOT ALLOWED to take money for the distribution or use of
+%% this file or modified versions or fragments thereof, except for
+%% a nominal charge for copying etc.
+%%
+% DESCRIPTION:
+%
+% Defining new PostScript fonts with the New Font Selection Scheme is easy,
+% but these macros make it easier. They save on keystrokes, and most
+% importantly, they make it easy to change the file names used for fonts
+% because you only have to type the file name once instead of 12 times (for
+% the 12 standard LaTeX sizes). An optional argument lets you scale the fonts.
+%
+% These macros are substitutes for the NFSS's \new@fontshape command. For
+% information on the purpose of this command, and on how to select fonts that
+% are defined with it, see the documentation of the NFSS. If you don't have
+% the NFSS, it is available from
+% rusmv1.rus.uni-stuttgart.de
+% in
+% soft/tex/latex-style-supported/New-Font-Selection
+% and from
+% ymir.claremont.edu
+% in
+% [.anonymous.tex.inputs.latex-mainz]
+% The NFSS is undoubtably the best way to use PostScript fonts (or any non-
+% standard fonts) with LaTeX, and is well worth upgrading to.
+%
+% USAGE:
+%
+% \newpsfont[<scaling>]{<family>}{<series>}{<shape>}{<filename>}
+%
+% \newpsfamily[<scaling>]{<family>}{
+% {<series 1>}{<shape 1>}{<filename 1>},
+% {<series 2>}{<shape 2>}{<filename 2>},
+% . . .
+% {<series n>}{<shape n>}{<filename n>}}
+%
+% The scaling argument is optional. Like the \new@fontshape command, these
+% commands can only be used in the preamble.
+%
+% EXAMPLE:
+%
+% Suppose the Helvetica-Oblique virtual font on your system has the name
+% phvro.vf. The following defines the <helvetica> family, <m>edium series, and
+% <it>alic shape to be the Helvetica-Oblique font, at the standard LaTeX
+% font sizes, scaled by .82:
+%
+% \newpsfont[.82]{helvetica}{m}{it}{phvro}
+%
+% This is equivalent to:
+%
+% \new@fontshape{helvetica}{m}{it}{%
+% <5>phvro at 4.1pt%
+% <6>phvro at 4.92pt%
+% <7>phvro at 5.74pt%
+% <8>phvro at 6.56pt%
+% <9>phvro at 7.38pt%
+% <10>phvro at 8.2pt%
+% <11>phvro at 8.979pt%
+% <12>phvro at 9.84pt%
+% <14>phvro at 11.808pt%
+% <17>phvro at 14.1696pt%
+% <20>phvro at 17.0068pt%
+% <25>phvro at 20.4016pt}{}
+%
+% The following command sets up the standard Helvetica family:
+%
+% \newpsfamily[.82]{helvetica}{%
+% {m}{n}{phvr}, %Helvetica
+% {m}{it}{phvro}, %Helvetica-Oblique
+% {m}{sl}{phvro}, %Helvetica-Oblique
+% {bx}{n}{phvb}, %Helvetica-Bold
+% {bx}{it}{phvbo}, %Helvetica-BoldOblique
+% {bx}{sl}{phvbo}} %Helvetica-BoldOblique
+%
+% (Don't forget the commas.) It is equivalent to:
+%
+% \newpsfont[.82]{helvetica}{m}{n}{phvr} %Helvetica
+% \newpsfont[.82]{helvetica}{m}{it}{phvro} %Helvetica-Oblique
+% \newpsfont[.82]{helvetica}{m}{sl}{phvro} %Helvetica-Oblique
+% \newpsfont[.82]{helvetica}{bx}{n}{phvb} %Helvetica-Bold
+% \newpsfont[.82]{helvetica}{bx}{it}{phvbo} %Helvetica-BoldOblique
+% \newpsfont[.82]{helvetica}{bx}{sl}{phvbo} %Helvetica-BoldOblique
+% \extra@def{helvetica}{}{}
+%
+% WHY SCALE FONTS?:
+%
+% Disclaimer: The suggestions that follow come from someone who doesn't know
+% anything about fonts.
+%
+% Mixing fonts that are not designed to be used together is not for purists,
+% but many of us do it anyway. Scaling the fonts can at least correct for
+% differences in the x-heights. This is important if you use Computer
+% Modern fonts for in-line math and some other fonts for text.
+%
+% To find out the x-height of the 10pt size of a font, load this style and
+% use the command
+%
+% \showxheight{<filename>}
+%
+% E.g., \showxheight{phvr} and \showxheight{cmr10} displays
+%
+% x-height of cmr10 at 10pt is 4.30554pt
+% x-height of phvr at 10pt is 5.24998pt
+%
+% on the terminal. Scaling the Helvetica fonts by 4.30554/5.24990 = .82
+% gets the x-heights of these fonts in line. It is best to set the x-heights
+% the same for the medium weight, normal shaped fonts, and then scale the
+% rest of the fonts in the same family by the same amount.
+%
+% David Jones has a psfonts.sty that sets up the standard PostScript fonts,
+% all scaled so that the x-heights match that of the Computer Modern medium
+% roman font. It is available via anonymous ftp from theory.lcs.mit.edu in
+% /pub/dmjones.
+%
+% IMPLEMENTATION:
+%
+% \scale@stdsizes has at its argument a scaling factor. It uses \font@scale
+% to define \scaled@sizes to be the macro whose argument is the name of a
+% font, and which expands to the definitions of the standard \LaTeX{} sizes
+% for New Font Selection Schemes \new@fontshape command.
+%
+\message{\space\space\fileversion\space\space\filedate
+ \space\space<tvz>}
+\@ifundefined{new@psfontshape}{}{\endinput}
+\def\font@scale#1#2#3{\dimen@=#2\dimen@=#3\dimen@
+ \edef\scaled@sizes##1{\scaled@sizes{##1}<#1>##1 at\number\dimen@ sp}}
+\def\scale@stdsizes#1{%
+ \edef\scaled@sizes##1{}%
+ \font@scale{5}{5pt}{#1}%
+ \font@scale{6}{6pt}{#1}%
+ \font@scale{7}{7pt}{#1}%
+ \font@scale{8}{8pt}{#1}%
+ \font@scale{9}{9pt}{#1}%
+ \font@scale{10}{10pt}{#1}%
+ \font@scale{11}{10.95pt}{#1}%
+ \font@scale{12}{12pt}{#1}%
+ \font@scale{14}{14.4pt}{#1}%
+ \font@scale{17}{17.28pt}{#1}%
+ \font@scale{20}{20.74pt}{#1}%
+ \font@scale{25}{24.88pt}{#1}}
+\def\new@psfontshape#1#2#3#4{%
+ \new@fontshape{#1}{#2}{#3}{\scaled@sizes{#4}}{}}
+\def\new@psfont[#1]#2#3#4#5{%
+ \scale@stdsizes{#1}%
+ \new@psfontshape{#2}{#3}{#4}{#5}}
+\def\newpsfont{%
+ \@ifnextchar [{\new@psfont}{\new@psfont[1]}}
+\def\newpsfamily{%
+ \@ifnextchar [{\new@psfamily}{\new@psfamily[1]}}
+\def\new@psfamily[#1]#2#3{%
+ \scale@stdsizes{#1}%
+ \@for\@tempa:=#3\do{%
+ \edef\@tempb{\noexpand\new@psfontshape{#2}\@tempa}
+ \@tempb}%
+ \extra@def{#2}{}{}}
+\def\showxheight#1{%
+ \font\@tempfont=#1 at 10pt%
+ \typeout{^^J x-height of #1 at 10pt is \the\fontdimen5\@tempfont}}
+% The commands are added to \@preamblecmds to save memory.
+\begingroup
+ \def\do{\noexpand\do\noexpand}
+ \xdef\@preamblecmds{\@preamblecmds
+ \do\font@scale
+ \do\scale@stdsizes
+ \do\scaled@sizes
+ \do\new@psfontshape
+ \do\new@psfont
+ \do\newpsfont
+ \do\newpsfamily
+ \do\new@psfamily}
+\endgroup
+\endinput
+%% END npsfont.sty
diff --git a/macros/latex209/contrib/misc/optarg.sty b/macros/latex209/contrib/misc/optarg.sty
new file mode 100644
index 0000000000..9a5218296b
--- /dev/null
+++ b/macros/latex209/contrib/misc/optarg.sty
@@ -0,0 +1,42 @@
+\def\newoptargcommand#1{%
+ \@ifnextchar({\@xoptargcmd{#1}}%
+ {\newcommand{#1}}%
+}
+
+\def\@xoptargcmd#1(#2){%
+% \@ifdefinable#1%
+% {
+ \expandafter\def\expandafter#1\expandafter{%
+ \expandafter
+ \@ifnextchar
+ \expandafter
+ [%
+ \csname\string#1\expandafter\endcsname
+ \expandafter
+ {\csname\string#1\endcsname[#2]}}%
+ \expandafter\@zoptargcmd
+ \csname\string#1\endcsname
+}
+
+\def\@zoptargcmd#1{%
+ \@ifnextchar[{\@zzoptargcmd#1}%
+ {\def#1[####1]}%
+}
+
+\catcode`\?=11\relax
+\long\def\@zzoptargcmd#1[#2]#3{%
+ \@tempcnta#2\relax
+ \let#1\relax
+ \let\@?@\relax
+ \edef\@tempa{\long\def#1[\@?@1]}%
+ \@tempcntb \tw@
+ \@whilenum\@tempcnta>\z@
+ \do{%
+ \edef\@tempa{\@tempa\@?@\the\@tempcntb}%
+ \advance\@tempcntb \@ne
+ \advance\@tempcnta \m@ne}%
+ \let\@?@##%
+ \@tempa{#3}%
+}
+\catcode`\?=12\relax
+\endinput
diff --git a/macros/latex209/contrib/misc/ovalfbox.sty b/macros/latex209/contrib/misc/ovalfbox.sty
new file mode 100644
index 0000000000..78f6f24045
--- /dev/null
+++ b/macros/latex209/contrib/misc/ovalfbox.sty
@@ -0,0 +1,35 @@
+% THIS IS OVALFBOX.STY of August, 3, 1992.
+% Unfortunately, \fboxrule (LaTeX book p.195) does not work,
+% since we use ovals (circle font).
+% Instead, use \thinlines and \thicklines.
+% However, \fboxsep does work!
+\def\ovalfbox#1{%
+ \mbox{% mbox, leaves vertical mode!
+ \begingroup \newdimen\@ovdp
+ \boxmaxdepth\maxdimen
+ \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
+ \setbox\@tempboxa\hbox{#1}%
+ \@ovxx\wd\@tempboxa \advance\@ovxx2\fboxsep
+ \@ovdp\dp\@tempboxa \advance\@ovdp\fboxsep
+ \@ovyy\ht\@tempboxa \advance\@ovyy\@ovdp \advance\@ovyy\fboxsep
+ \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
+ \advance \@tempdimb -2\p@
+ \@getcirc \@tempdimb % sets \@tempboxa en \@tempdima
+ \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
+ \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
+ \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
+ \@circlefnt
+ \setbox\@tempboxa
+ \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi
+ \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi
+ \if@ovt \@ovhorz \kern -\@ovxx \fi
+ \if@ovb \raise \@ovyy \@ovhorz \fi}%
+ \ht\@tempboxa\z@ \dp\@tempboxa\z@
+ \raise-\@ovdp\hbox to\z@{\box\@tempboxa\hss}%
+ \hbox to\@ovxx{\hss\rm #1\hss}%
+ \endgroup}}
+\def\Ovalfbox#1{{\advance\fboxsep 1em \ovalfbox{#1}}}
+% ^^^
+% Change this if you want less/more space
+\endinput
+
diff --git a/macros/latex209/contrib/misc/pagefoots.sty b/macros/latex209/contrib/misc/pagefoots.sty
new file mode 100644
index 0000000000..439569cdf0
--- /dev/null
+++ b/macros/latex209/contrib/misc/pagefoots.sty
@@ -0,0 +1,192 @@
+% Save file as: PAGEFOOTS.STY Source: FILESERV@SHSU.BITNET
+% A footnote-numbering style from Brian T. Schellenberger. v1.0.
+% This is redistributable by anybody to anybody for any price.
+% I only ask that you credit me for it, and that if you make any
+% changes and distribute them to anybody else at all, you (1) send
+% them back to me, and (2) note who made them so that any different
+% versions of this floating around may be distinguished.
+
+% Updates:
+% 10-Mar-89 Brian T. Schellenberger ...!mcnc!rti!sas!bts
+% Initial release.
+% 21-Mar-92 Darrel Hankerson hank@ducvax.auburn.edu
+% \def\@currenvir appears out of place in \definition
+% (reported by Nachum Dershowitz nachum@cs.uiuc.edu)
+
+% The first thing here is my begin definitions environment. It is
+% an environment for programming, and is seperate from the footnote-
+% related stuff. I find it convenient, and it is needed for my other
+% code to work. I also use symbolic names for all catcodes in my
+% programming, but I've gotten that out of this code for greater ease
+% of use by the great wide world out there.
+
+% The footnote code itself.
+% 1. This code resets foot notes on each page. It needs two passes
+% to do this correctly, although it comes as close as possible on
+% the first pass. You generally make two passes with LaTeX anyway,
+% to get cross-references right, so this shouldn't be a problem.
+% It uses the aux file like everything else.
+% 2. It also uses the \fnsymbol to "number" the footnotes. This is
+% controlled by the first line of \newfoots.
+% 3. It gets rid of the usual footnote rule, and inserts more vertical
+% space for footnotes. This is also easy to see/control in the
+% \newfoots command.
+% 4. Most of this code simply makes the "new" footnotes stuff available;
+% you can include all of this except the last line in a style file
+% and only say \newfoots if you want them, or you include it all
+% and say \restorefoots for the files where you don't want it.
+% 5. \restorefoots and/or \newfoots are only guarenteed to work right
+% in the preamble.
+% 6. I don't think I depend on anything funny in LaTeX, but in case
+% this falls apart totally, I am running the 29-Apr-87 LaTeX.
+
+
+%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+%----definitions: within \begin{definitions} (which does not really define
+% a group), spacing means nothing. Use \space for a space character
+% and \par for a blank line, for those rare instances where they are
+% really desired. Also, @ is seen as a letter. All these are reversed
+% and \end{definitions}---\E{even if} they had the same catagories before!
+% These should not be nested but, unfortunately, there is no way to tell.
+
+
+\newif\ifatletter
+
+\newenvironment {definitions}
+ {
+ \endgroup % doesn't really nest
+ \ifcat @a \atlettertrue \else \atletterfalse \fi
+ % \catcode`\ =\ignoreC \catcode`\^^M=\ignoreC
+ \makeatletter \catcode`\ =9 \catcode`\^^M=9
+ }%
+ {
+ % \catcode`\ =\spaceC \catcode`\^^M=\nlC
+ \makeatother \catcode`\ =10 \catcode`\^^M=5
+ \ifatletter \makeatletter \fi
+% \def \@currenvir {definitions} <-- Original location
+ \begingroup % doesn't really nest
+ \def \@currenvir {definitions} % 21-Mar-92 DH
+ }
+
+%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+\begin{definitions}
+
+%-----\my@footnote: stuff for handling my footnote stuff
+
+% NOTE: This corrects it on the second pass, based on the page numbers
+% on the first pass. Both this and other cross-reference stuff
+% will need to be run TWICE again if tables of contents, lists of
+% figures, &c. are paginated with the main material.
+
+\def \my@footnote
+ {
+ \if@minipage\else % In a minipage, we can't cross a page.
+ \edef \tmp@name {ft@\thepage-\the\c@footnote}
+ \expandafter\expandafter\expandafter\ifx
+ \expandafter\csname\tmp@name\endcsname \relax
+ \else
+ % DEFINED: replace footnote marker
+ \edef\tmp@b{\expandafter\csname\tmp@name\endcsname}
+ \begingroup
+ \c@footnote = \tmp@b
+ \xdef \@thefnmark {\thefootnote}
+ \endgroup
+ \fi % end \ifx ... \else DEFINED
+
+ \if@filesw
+ \edef \fttmp@
+ {
+ \write\@auxout
+ {
+ \string\newfoot@mark{\thepage}
+ {\the\c@footnote}{\noexpand\thepage}
+ }
+ }
+ \fttmp@
+ \fi % end \if@filesw
+ \fi % end \if@minipage
+ }
+
+% \newfoot@mark:
+% #1: nominal page it occurs on, as by \thepage.
+% #2: nominal footnote number on that page.
+% #3: actual page it occurs on, as by \thepage.
+
+\newcount\ft@page \ft@page = 0
+\newcount\ft@foot \ft@foot = 0
+
+\def \newfoot@mark #1#2#3
+ {
+ \ifdigit{#3}
+ \ifnum #3 < \ft@page \ft@page=0
+ \else\ifnum #3 > \ft@page \ft@page=#3 \ft@foot=0
+ \fi\fi
+ \else \ft@page=0
+ \fi
+
+ \addtolength\ft@foot{1}
+ \def\tmp@a{#2}
+ \edef\tmp@b{\the\ft@foot}
+ \ifx \tmp@a\tmp@b \else
+ \expandafter \xdef \csname ft@#1-#2\endcsname {\the\ft@foot}
+ \fi
+ }
+
+\newif\ifisdigit
+\def \ifdigit #1 {\digithelp #1 \digithelpend}
+\def \digithelp#1#2\digithelpend
+ {
+ \isdigitfalse
+ \if0#1\isdigittrue\fi \if1#1\isdigittrue\fi \if2#1\isdigittrue\fi
+ \if3#1\isdigittrue\fi \if4#1\isdigittrue\fi \if5#1\isdigittrue\fi
+ \if4#1\isdigittrue\fi \if5#1\isdigittrue\fi \if6#1\isdigittrue\fi
+ \if7#1\isdigittrue\fi \if8#1\isdigittrue\fi \if9#1\isdigittrue\fi
+ \ifisdigit
+ }
+
+
+\def \newfoots
+ {
+ \renewcommand \thefootnote {\fnsymbol{footnote}} %only if you want!
+ \renewcommand \thempfootnote {\arabic{footnote}}
+ \renewcommand \footnoterule {}
+ \skip\footins = 16pt plus 6pt minus 4pt
+ \@addtoreset{footnote}{page}
+ \let \cur@footnote = \my@footnote
+ }
+
+% NOTE: \restorefoots MUST be called before anything else is added to
+% \cl@page => do NOT move the \@@cl@page into the .static. file,
+% and do it at the very end of mytex.sty. Also, if \stdfoots
+% are desired, they should be the first thing restored---and
+% \E{definately} in the preamble.
+
+\def \restorefoots
+ {
+ \renewcommand \thefootnote {\arabic{footnote}}
+ \renewcommand \thempfootnote {\alph{mpfootnote}}
+ \let \footnoterule = \@@footnoterule
+ \skip\footins = \bigskipamount
+ \let \cl@page = \@@cl@page
+ \let \cur@footnote = \relax
+ }
+
+\def \footnote
+ {
+ \@ifnextchar [
+ {\@xfootnote} %else, no optional argument:
+ {
+ \stepcounter{\@mpfn}
+ \xdef\@thefnmark{\thempfn}
+ \cur@footnote
+ \@footnotemark\@footnotetext
+ }
+ }
+
+\end{definitions}
+
+
+\newfoots
+\endinput
diff --git a/macros/latex209/contrib/misc/parskip.sty b/macros/latex209/contrib/misc/parskip.sty
new file mode 100644
index 0000000000..8b29613cf5
--- /dev/null
+++ b/macros/latex209/contrib/misc/parskip.sty
@@ -0,0 +1,33 @@
+% This is PARSKIP.STY by H.Partl, TU Wien, as of 19 Jan 1989.
+% Document Style Option to be used with any style and with any size.
+% It produces the following Paragraph Layout:
+% Zero Parindent and non-zero Parskip. The stretchable glue in \parskip
+% helps LaTeX in finding the best place for page breaks.
+
+\parskip=0.5\baselineskip \advance\parskip by 0pt plus 2pt
+\parindent=\z@
+
+% To accompany this, the vertical spacing in the list environments is changed
+% to use the same as \parskip in all relevant places (for normalsize only):
+% \parsep = \parskip
+% \itemsep = \z@ % add nothing to \parskip between items
+% \topsep = \z@ % add nothing to \parskip before first item
+
+\def\@listI{\leftmargin\leftmargini
+ \topsep\z@ \parsep\parskip \itemsep\z@}
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep\z@ \parsep\parskip \itemsep\z@}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep\z@ \parsep\parskip \itemsep\z@}
+
+% Note that listiv, listv and listvi don't change vertical parameters.
+
+\endinput
+
+
diff --git a/macros/latex209/contrib/misc/portland.sty b/macros/latex209/contrib/misc/portland.sty
new file mode 100644
index 0000000000..56ebf455e8
--- /dev/null
+++ b/macros/latex209/contrib/misc/portland.sty
@@ -0,0 +1,124 @@
+% This is PORTLAND.STY by H.Partl, TU Wien, as of 16 Dec 1988.
+% Definition of commands and environments \portrait and \landscape
+% for switching between PORTRAIT and LANDSCAPE printing. To be
+% called as document style option with any available style.
+%
+% Commands:
+% \portrait sets or resets the page layout to the initial values
+% (i.e. the values valid at \begin{document})
+% \landscape sets the page layout such that the horizontal and
+% vertical measures are interchanged with respect to
+% the initial values. The text area will occupy the
+% same position on the page as in \portrait mode.
+% Both command issue a \clearpage before changing the layout.
+%
+% Environments:
+% \begin{portrait} ... \end{portrait}
+% \begin{landscape} ... \end{landscape}
+% Both issue \clearpage at the \begin and at the \end.
+%
+% Implementation Dependencies:
+% You should insert the correct paper height (11in or 197mm or ...)
+% into \paperheight for correct positioning.
+% If your printer driver allows mixing of protrait and landscape pages
+% within one printout, you should insert the corresponding \special
+% commands just after the four \clearpage commands.
+% If your printer only allows printing of the whole document either in
+% protrait or in landscape orientation, you should print the document
+% twice (or selected parts of it) - once in portrait and once in landscape -
+% and then merge the correct pages.
+% If your printer can't print in landscape orientation, then these commands
+% can be used only for small pages that fit onto the paper in both direc-
+% tions.
+
+\newdimen \paperheight % needed for calculation of bottom margin.
+\paperheight 297mm % <--- 11in for US paper or 297mm for A4 paper!
+
+\newdimen\phoffset
+\newdimen\pvoffset
+\newdimen\ptextwidth
+\newdimen\ptextheight
+\newdimen\ptopmargin
+\newdimen\poddsidemargin
+\newdimen\pevensidemargin
+
+\newdimen\lhoffset
+\newdimen\lvoffset
+\newdimen\ltextwidth
+\newdimen\ltextheight
+\newdimen\ltopmargin
+\newdimen\loddsidemargin
+\newdimen\levensidemargin
+
+\def\set@portland@values{%
+% portrait values = current values
+\phoffset\hoffset
+\pvoffset\voffset
+\ptextwidth\textwidth
+\ptextheight\textheight
+\ptopmargin\topmargin
+\poddsidemargin\oddsidemargin
+\pevensidemargin\evensidemargin
+% landscape margins will be measured from zero point
+\lhoffset \z@
+\lvoffset \z@
+% landscape textwidth = portrait textheight
+\ltextwidth \ptextheight
+% landscape textheight = portrait textwidth
+\ltextheight \ptextwidth
+% landscape left margin = portrait bottom margin (same for odd and even)
+\loddsidemargin \paperheight
+\advance \loddsidemargin by -\ptextheight
+\advance \loddsidemargin by -\headsep
+\advance \loddsidemargin by -\headheight
+\advance \loddsidemargin by -\ptopmargin
+\advance \loddsidemargin by -\pvoffset
+\advance \loddsidemargin by -2in
+\levensidemargin \loddsidemargin
+% landscape top margin (incl. head) = portrait oddside left margin
+\ltopmargin \poddsidemargin
+\advance \ltopmargin by -\headheight
+\advance \ltopmargin by -\headsep
+\advance \ltopmargin by \phoffset
+}
+
+\def\portrait{\clearpage \message{ \string\portrait }%
+ \hoffset\phoffset
+ \voffset\pvoffset
+ \textwidth\ptextwidth
+ \textheight\ptextheight
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \topmargin\ptopmargin
+ \oddsidemargin\poddsidemargin
+ \evensidemargin\pevensidemargin
+ }
+
+\def\endportrait{\clearpage \message{ \string\endportrait }}
+
+\def\landscape{\clearpage \message{ \string\landscape }%
+ \hoffset\lhoffset
+ \voffset\lvoffset
+ \textwidth\ltextwidth
+ \textheight\ltextheight
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \topmargin\ltopmargin
+ \oddsidemargin\loddsidemargin
+ \evensidemargin\levensidemargin
+ }
+
+\def\endlandscape{\clearpage \message{ \string\endlandscape }}
+
+\let\set@document@values \document
+\def\document{\set@document@values \set@portland@values}
+
+\endinput
diff --git a/macros/latex209/contrib/misc/psboxit.sty b/macros/latex209/contrib/misc/psboxit.sty
new file mode 100644
index 0000000000..6f9bbd9942
--- /dev/null
+++ b/macros/latex209/contrib/misc/psboxit.sty
@@ -0,0 +1,175 @@
+% psboxes.sty
+%
+% This package enables to put a PostScript drawing behind a TeX box.
+% The drawing is parametrized by the position and the size of the
+% TeX box. To put a gray [rounded] box behind a word use
+% \PScommands % Once at the begining
+%
+% ... text text \psboxit{25 cartouche}{THE WORD} text text
+% \psboxit{box 0.5 setgray fill}{\spbox{ANOTHER WORD}}
+% text text ...
+%
+% * If your boxes are ill sized try to change 16384 to
+% something else (original code used 65536).
+% % 65536 is the internal unit of TeX (scaled point, TeXBook page 57)
+% Those macros were adapted from Tom Sheffler (CMU)'s psframe.sty style. In
+% particular, the spacebox macro was just copied from his style.
+%
+% Je'ro^me MAILLOT, INRIA
+% maillot@bora.inria.fr
+% August 1991
+%
+%
+% A Few PostScript definitions to use with \psboxit
+% Call \PScommands once at the begining of your program, this will
+% define : box roundedbox rectcartouche and cartouche. They are 4
+% PostScript programs. Change the values before setlinewidth end
+% setgray to customize your boxes
+%
+% Ex : \psboxit{25 cartouche}{blah blah}
+% \psboxit{rectcartouche}{blah blah}
+%
+\long\def\PScommands{\special{! TeXDict begin
+/box{% Processes the path of a rectangle.
+% Needs : x0 y0 x1 y1.
+newpath 2 copy moveto 3 copy pop exch lineto 4 copy pop pop
+lineto 4 copy exch pop exch pop lineto closepath } bind def
+%
+%
+/min{ 2 copy gt { exch } if pop } bind def%
+/max{ 2 copy lt { exch } if pop } bind def%
+/roundedbox{% Processes the path of a rounded rectangle.
+% Needs : x0 y0 x1 y1 radius.
+% The bounding box is augmented by +/- radius to allow easily to
+% frame several rounded boxes around the same Texture box. Ex:
+% \psboxit{4 copy 15 roundedbox 25 roundedbox} {\spbox{Some Text}}
+% draws two scaled boxes arond the same word. Delete the `radius
+% sub' and `radius add' commands to suppress that enlargement.
+%
+/radius exch store
+3 2 roll % x0 x1 y1 y0
+2 copy min radius sub /miny exch store
+ max radius add /maxy exch store
+2 copy min radius sub /minx exch store
+ max radius add /maxx exch store
+newpath
+minx radius add miny moveto
+maxx miny maxx maxy radius arcto
+maxx maxy minx maxy radius arcto
+minx maxy minx miny radius arcto
+minx miny maxx miny radius arcto 16 {pop} repeat
+closepath
+}bind def
+%
+%
+/rectcartouche{% Draws a filled and framed box
+% Needs : x0 y0 x1 y1
+box gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def
+%
+%
+/cartouche{% Draws a filled and framed rounded box
+% Needs : x0 y0 x1 y1 radius
+roundedbox gsave .95 setgray fill grestore 1 setlinewidth stroke }bind def
+%
+end }% Closes dictionnary
+}\PScommands%
+%%
+%% PSBOXIT
+%%
+%% \psboxit{PS program}{TeX stuff}
+%%
+%% The bounding box of the TeX stuff is pushed on the PostScript stack
+%% and then the program in the first argument is called
+%%
+%% EXAMPLE: set some text on a gray background, Use the SPBOX macro to
+%% give some space around the text.
+%%
+%% \psboxit{box 0.5 setgray fill}{\spbox{Some Text}}
+%%
+%% See \PScommands for the \box definition
+%%
+\chardef \atcode = \the \catcode `\@
+\catcode `\@ = 11
+
+\long\def\psboxit#1#2{%
+\begingroup\setbox0=\hbox{#2}%
+\dimen0=\ht0 \advance\dimen0 by \dp0%
+ % Write out the PS code to set the current path using HEIGHT,
+ % WIDTH , DEPTH of box0.
+ \hbox{%
+ \special{ps: gsave currentpoint translate
+ 0
+ \number\dp0 \space 15800 div % hand tuned for dvips
+ \number\wd0 \space 15800 div % hand tuned for dvips
+ \number\ht0 \space -15800 div % hand tuned for dvips
+% \number\dp0 \space 16384 div
+% \number\wd0 \space 16384 div
+% \number\ht0 \space -16384 div % Bounding box
+% \number\dp0 \space 65536 div
+% \number\wd0 \space 65536 div
+% \number\ht0 \space -65536 div % Bounding box
+ #1 grestore}%
+ \copy0%
+}%HBOX
+\endgroup%
+}%
+
+% SPACEBOX
+%
+% This macro simply takes some TeX stuff, and puts FOUR sides on it
+% so that the box is the same size as the thing you'd get with
+% an \fbox{} command. (All I did was modify the code for \fbox{}
+% so that all rules were replaced with struts).
+%
+% USAGE: \spbox{text} is just like \fbox{text} but makes no rules
+%
+% REASON: so that if using \pspath{...}{\fbox{stuff}}
+% there is a way to get another box the same size:
+% \pspath{...}{\spbox{stuff}}
+%
+\long\def\spbox#1{\leavevmode\setbox1\hbox{#1}%
+ \dimen0\fboxrule \advance\dimen0 \fboxsep%
+ \advance\dimen0 \dp1%
+ \hbox{\lower \dimen0\hbox%
+ {\vbox{\hrule height \fboxrule width 0pt%
+ \hbox{\vrule width \fboxrule height 0pt \hskip\fboxsep%
+ \vbox{\vskip\fboxsep \box1\vskip\fboxsep}\hskip%
+ \fboxsep\vrule width \fboxrule height 0pt}%
+ \hrule height \fboxrule width 0pt}}}}%
+
+\def\Gbox#1{\psboxit{box 0.9 setgray fill}{#1}}
+%%
+\newsavebox{\gray@box}%
+\newdimen\gray@space
+%
+\long\def\Beginboxitpara#1{\edef\gray@tmp{#1}%
+\gray@space=\fboxsep \advance\gray@space by -\fboxrule
+\par\prevdepth=-1000pt\vskip 0.5\baselineskip\noindent
+\setbox\gray@box=%
+\hbox\bgroup \vrule width \fboxrule
+ \vtop\bgroup \hrule
+ \vbox\bgroup
+ \kern\gray@space
+ \hbox\bgroup
+ \kern\gray@space
+ \vtop\bgroup
+ \hsize=\linewidth\advance\hsize-2\fboxsep\noindent
+ \ignorespaces}
+\def\Endboxitpara{%
+ \egroup
+ \kern\gray@space
+ \egroup
+ \kern\gray@space
+ \egroup \hrule
+ \egroup\vrule width \fboxrule
+ \egroup
+ \psboxit{\gray@tmp}{\box\gray@box}%
+ \vskip 0.5\baselineskip
+\par}
+
+\newenvironment{boxitpara}[1]{\Beginboxitpara{#1}}{\Endboxitpara}
+\newenvironment{boxitpara*}[1]{\Beginboxitpara{#1}\hbox to\hsize{}}%
+{\Endboxitpara}
+
+\catcode `\@ = \the \atcode
+\endinput
diff --git a/macros/latex209/contrib/misc/psfont.sty b/macros/latex209/contrib/misc/psfont.sty
new file mode 100644
index 0000000000..429dd46a2e
--- /dev/null
+++ b/macros/latex209/contrib/misc/psfont.sty
@@ -0,0 +1,117 @@
+% Filename: psfont.sty
+% Author: Alan Jeffrey
+% E-mail: alanje@cogs.sussex.ac.uk
+% Last modified: 14 May 1992
+
+% This is a document style option which defines macros for loading PS fonts.
+
+% Set a flag to declare ourselves loaded:
+
+\def\psfont@loaded{ }
+
+% Load one font:
+
+\def\new@ps@fontshape#1#2#3#4%
+ {\new@fontshape{#1}{#2}{#3}{%
+ <5>#4 at5pt%
+ <6>#4 at6pt%
+ <7>#4 at7pt%
+ <8>#4 at8pt%
+ <9>#4 at9pt%
+ <10>#4%
+ <11>#4 at10.95pt%
+ <12>#4 at12pt%
+ <14>#4 at14.4pt%
+ <17>#4 at17.28pt%
+ <20>#4 at20.736pt%
+ <25>#4 at24.8832pt}{}}
+
+% Load a whole family:
+
+\def\load@ps@font#1#2#3#4#5#6#7#8#9%
+ {\new@ps@fontshape{#1}{m}{n}{#2}
+ \new@ps@fontshape{#1}{m}{it}{#3}
+ \new@ps@fontshape{#1}{m}{sl}{#4}
+ \new@ps@fontshape{#1}{m}{sc}{#5}
+ \new@ps@fontshape{#1}{b}{n}{#6}
+ \new@ps@fontshape{#1}{b}{it}{#7}
+ \new@ps@fontshape{#1}{b}{sl}{#8}
+ \new@ps@fontshape{#1}{b}{sc}{#9}
+ \new@ps@fontshape{#1}{bx}{n}{#6}
+ \new@ps@fontshape{#1}{bx}{it}{#7}
+ \new@ps@fontshape{#1}{bx}{sl}{#8}
+ \new@ps@fontshape{#1}{bx}{sc}{#9}
+ \expandafter\let\csname every@#1@family\endcsname\every@ps@family
+ \extra@def{#1}}
+
+% Some extra characters:
+
+\chardef\currency"A8
+\chardef\cents"A2
+\chardef\yen"A5
+\chardef\florin"A6
+
+% When a new family FOO is loaded, we call \every@FOO@family.
+
+\def\fontfamily#1{\csname every@#1@family\endcsname\edef\f@family{#1}}
+\let\family\fontfamily
+
+% The CM families define the following macros:
+
+\let\cm@pounds\pounds
+\let\cm@S\S
+\let\cm@dag\dag
+\let\cm@ddag\ddag
+\let\cm@P\P
+\let\cm@ldots\ldots
+\let\cm@H\H
+\let\cm@dot\.
+\let\cm@AA\AA
+
+\def\every@cm@family
+ {\let\pounds\cm@pounds
+ \let\S\cm@S
+ \let\dag\cm@dag
+ \let\ddag\cm@ddag
+ \let\P\cm@P
+ \let\ldots\cm@ldots
+ \let\H\cm@H
+ \let\.\cm@dot
+ \let\AA\cm@AA}
+
+\let\every@cmr@family=\every@cm@family
+\let\every@cmtt@family=\every@cm@family
+\let\every@cmss@family=\every@cm@family
+
+% The PS families define the following macros:
+
+\newdimen\aadimen
+
+\chardef\ps@pounds"A3
+\chardef\ps@S"A7
+\chardef\ps@dag"B2
+\chardef\ps@ddag"B3
+\chardef\ps@P"B6
+\chardef\ps@ldots"BC
+\def\ps@H#1{{\accent"CD #1}}
+\def\ps@dot#1{{\accent"C7 #1}}
+\def\ps@AA{\leavevmode\setbox0\hbox{h}\aadimen\ht0
+ \advance\aadimen-1ex\setbox0\hbox{A}\rlap{\raise.67\aadimen
+ \hbox to \wd0{\hss\char'27\hss}}A}
+
+\def\every@ps@family
+ {\let\pounds\ps@pounds
+ \let\S\ps@S
+ \let\dag\ps@dag
+ \let\ddag\ps@ddag
+ \let\P\ps@P
+ \let\ldots\ps@ldots
+ \let\H\ps@H
+ \let\.\ps@dot
+ \let\AA\ps@AA}
+
+% For some reason, the default family is hard wired to be cmr,
+% rather than defined to be \rmdefault...
+
+\def\default@family{\rmdefault}
+
diff --git a/macros/latex209/contrib/misc/psfonts.tex b/macros/latex209/contrib/misc/psfonts.tex
new file mode 100644
index 0000000000..74025abd2c
--- /dev/null
+++ b/macros/latex209/contrib/misc/psfonts.tex
@@ -0,0 +1,146 @@
+% psfonts.tex
+%
+% Frank Jensen (September 30, 1990)
+
+\ifx\psfontsloaded\relax
+\else \let\psfontsloaded=\relax
+
+\def\declare@font #1#2#3#4%
+ {\new@fontshape{#1}{#2}{#3}{%
+ <5>#4 at5pt%
+ <6>#4 at6pt%
+ <7>#4 at7pt%
+ <8>#4 at8pt%
+ <9>#4 at9pt%
+ <10>#4 at10pt%
+ <11>#4 at10.95445pt%
+ <12>#4 at12pt%
+ <14>#4 at14.4pt%
+ <17>#4 at17.28pt%
+ <20>#4 at20.736pt%
+ <25>#4 at24.8832pt}{}}
+
+% Times Family
+
+\declare@font{times}{m}{n}{ptmr}
+\declare@font{times}{b}{n}{ptmb}
+\declare@font{times}{b}{it}{ptmbi}
+\declare@font{times}{c}{n}{ptmrrn}
+\declare@font{times}{m}{sc}{ptmrc}
+\declare@font{times}{m}{it}{ptmri}
+\declare@font{times}{m}{sl}{ptmro}
+\declare@font{times}{x}{n}{ptmrre}
+
+\extra@def{times}{}{}
+
+
+
+% Helvetica Family
+
+\declare@font{helvetica}{m}{n}{phvr}
+\declare@font{helvetica}{b}{n}{phvb}
+\declare@font{helvetica}{b}{it}{phvbo}
+\subst@fontshape{helvetica}{b}{sl}{helvetica}{b}{it}
+\declare@font{helvetica}{c}{n}{phvrrn}
+\declare@font{helvetica}{bc}{n}{phvbrn}
+\declare@font{helvetica}{bc}{it}{phvbon}
+\subst@fontshape{helvetica}{bc}{sl}{helvetica}{bc}{it}
+\declare@font{helvetica}{c}{it}{phvron}
+\subst@fontshape{helvetica}{c}{sl}{helvetica}{c}{it}
+\declare@font{helvetica}{m}{sc}{phvrc}
+\declare@font{helvetica}{m}{it}{phvro}
+\subst@fontshape{helvetica}{m}{sl}{helvetica}{m}{it}
+
+\extra@def{helvetica}{}{}
+
+
+
+% Bookman Family
+
+\declare@font{bookman}{m}{n}{pbkl}
+\declare@font{bookman}{b}{n}{pbkd}
+\declare@font{bookman}{b}{it}{pbkdi}
+\declare@font{bookman}{m}{sc}{pbklc}
+\declare@font{bookman}{m}{it}{pbkli}
+
+\extra@def{bookman}{}{}
+
+
+
+% New Century Schoolbook Family
+
+\declare@font{ncs}{m}{n}{pncr}
+\declare@font{ncs}{b}{n}{pncb}
+\declare@font{ncs}{b}{it}{pncbi}
+\declare@font{ncs}{m}{sc}{pncrc}
+\declare@font{ncs}{m}{it}{pncri}
+
+\extra@def{ncs}{}{}
+
+
+% Courier Family
+
+\declare@font{courier}{m}{n}{pcrr}
+\declare@font{courier}{b}{n}{pcrb}
+\declare@font{courier}{b}{it}{pcrbo}
+\declare@font{courier}{m}{it}{pcrro}
+
+\extra@def{courier}{\hyphenchar #1\m@ne}{}
+
+
+
+% Palatino Family
+
+\declare@font{palatino}{m}{n}{pplr}
+\declare@font{palatino}{b}{n}{pplb}
+\declare@font{palatino}{b}{it}{pplbi}
+\declare@font{palatino}{b}{u}{pplbu}
+\declare@font{palatino}{c}{n}{pplrrn}
+\declare@font{palatino}{m}{sc}{pplrc}
+\declare@font{palatino}{m}{it}{pplri}
+\declare@font{palatino}{m}{sl}{pplro}
+\declare@font{palatino}{m}{u}{pplru}
+\declare@font{palatino}{x}{n}{pplrre}
+
+\extra@def{palatino}{}{}
+
+
+
+% AvantGarde Family
+
+\declare@font{avantgarde}{m}{n}{pagk}
+\declare@font{avantgarde}{b}{n}{pagd}
+\declare@font{avantgarde}{b}{it}{pagdo}
+\subst@fontshape{avantgarde}{b}{sl}{avantgarde}{b}{it}
+\declare@font{avantgarde}{m}{sc}{pagkc}
+\declare@font{avantgarde}{m}{it}{pagko}
+\subst@fontshape{avantgarde}{m}{sl}{avantgarde}{m}{it}
+
+\extra@def{avantgarde}{}{}
+
+
+
+% Futura Family
+
+\declare@font{futura}{c}{n}{pfuc}
+\declare@font{futura}{bc}{n}{pfubc}
+\declare@font{futura}{bc}{sl}{pfuboc}
+\subst@fontshape{futura}{b}{it}{futura}{b}{sl}
+\declare@font{futura}{ebc}{n}{pfuxc}
+\declare@font{futura}{ebc}{sl}{pfuxoc}
+\declare@font{futura}{lc}{n}{pfulc}
+\subst@fontshape{futura}{m}{it}{futura}{m}{sl}
+
+\extra@def{futura}{}{}
+
+
+
+% Default settings
+
+\def\sfdefault{helvetica}
+\def\ttdefault{courier}
+
+\def\bfdefault{b}
+
+\fi
+\endinput
diff --git a/macros/latex209/contrib/misc/psmath.sty b/macros/latex209/contrib/misc/psmath.sty
new file mode 100644
index 0000000000..def9bbd6f4
--- /dev/null
+++ b/macros/latex209/contrib/misc/psmath.sty
@@ -0,0 +1,216 @@
+%%
+%% psmath.sty (Febuary 2 1991 Kresten Krab Thorup)
+%%
+
+%%
+%% BUGREPORTS: krab@iesd.auc.dk
+%%
+
+\message{`PostScript math' style option <february 2 1991>}
+
+\def\@declare@font #1#2#3#4%
+ {\new@fontshape{#1}{#2}{#3}{%
+ <5>#4 at4pt%
+ <6>#4 at5pt%
+ <7>#4 at6pt%
+ <8>#4 at7pt%
+ <9>#4 at8pt%
+ <10>#4 at9pt%
+ <11>#4 at10pt%
+ <12>#4 at11pt%
+ <14>#4 at12pt%
+ <17>#4 at14pt%
+ <20>#4 at17pt%
+ <25>#4 at20pt}{}}
+
+\@declare@font{pssymbol}{m}{it}{psyro}
+\@declare@font{pssymbol}{m}{n}{psyr}
+\extra@def{pssymbol}{}{}
+
+\let\@declare@font\relax
+
+\input psfonts
+
+%
+% Define the new math family
+%
+
+\new@mathversion\mv@times
+
+% Fonts we're going to use...
+
+\define@mathgroup\mv@times{0}
+ {times}{m}{n}
+\define@mathgroup\mv@times{1}
+ {times}{m}{it}
+\define@mathgroup\mv@times{2}
+ {cmsy}{m}{n}
+%\define@mathgroup\mv@times{3}
+% {cmex}{m}{n}
+
+
+\new@mathgroup\timsyi@group
+\define@mathgroup\mv@times\timsyi@group
+ {pssymbol}{m}{it}
+
+\new@mathgroup\timsyn@group
+\define@mathgroup\mv@times\timsyn@group
+ {pssymbol}{m}{n}
+
+\new@mathgroup\timi@group
+\define@mathgroup\mv@times\timi@group
+ {cmm}{m}{it}
+
+\new@mathgroup\lyfam@group
+ \define@mathgroup\mv@times\lyfam@group
+ {lasy}{m}{n}
+
+
+\edef\@tempa{\hexnumber@\timsyi@group} % Math chars from postscript
+ % font psyro
+% lowercase greek
+
+\mathchardef\alpha="0\@tempa 61
+\mathchardef\beta="0\@tempa 62
+\mathchardef\chi="0\@tempa 63
+\mathchardef\delta="0\@tempa 64
+\mathchardef\varepsilon="0\@tempa 65
+\mathchardef\phi="0\@tempa 66
+\mathchardef\gamma="0\@tempa 67
+\mathchardef\eta="0\@tempa 68
+\mathchardef\iota="0\@tempa 69
+\mathchardef\varphi="0\@tempa 6A
+\mathchardef\kappa="0\@tempa 6B
+\mathchardef\lambda="0\@tempa 6C
+\mathchardef\mu="0\@tempa 6D
+\mathchardef\nu="0\@tempa 6E
+\mathchardef\pi="0\@tempa 70
+\mathchardef\theta="0\@tempa 71
+\mathchardef\rho="0\@tempa 72
+\mathchardef\sigma="0\@tempa 73
+\mathchardef\tau="0\@tempa 74
+\mathchardef\upsilon="0\@tempa 75
+\mathchardef\varpi="0\@tempa 76
+\mathchardef\omega="0\@tempa 77
+\mathchardef\xi="0\@tempa 78
+\mathchardef\psi="0\@tempa 79
+\mathchardef\zeta="0\@tempa 7A
+\mathchardef\partial="0\@tempa B6
+\mathchardef\vartheta="0\@tempa 4A
+
+\edef\@tempa{\hexnumber@\timsyn@group} % Math chars from postscript
+ % font psyr
+\mathchardef\angle="0\@tempa D0
+\mathchardef\forall="0\@tempa 22
+\mathchardef\exists="0\@tempa 24
+\mathchardef\aleph="0\@tempa C0
+\mathchardef\Re="0\@tempa C2
+\mathchardef\Im="0\@tempa C1
+\mathchardef\wp="0\@tempa C3
+\mathchardef\nabla="0\@tempa D1
+\mathchardef\infty="0\@tempa A5
+
+\mathchardef\vee="2\@tempa DA
+\mathchardef\wedge="2\@tempa D9
+\mathchardef\cdot="2\@tempa D7
+\mathchardef\ast="2\@tempa 2A
+\mathcode`/="2\@tempa 2F
+\mathchardef\varsigma="0\@tempa 56
+
+\mathchardef\leftrightarrow="3\@tempa AB
+\mathchardef\leftarrow="3\@tempa AC
+\mathchardef\uparrow="3\@tempa AD
+\mathchardef\rightarrow="3\@tempa AE
+\mathchardef\downarrow="3\@tempa AF
+\mathchardef\Leftrightarrow="3\@tempa DB
+\mathchardef\Leftarrow="3\@tempa DC
+\mathchardef\Uparrow="3\@tempa DD
+\mathchardef\Rightarrow="3\@tempa DE
+\mathchardef\Downarrow="3\@tempa DF
+\mathchardef\ldots="3\@tempa BC
+
+\mathchardef\pm="3\@tempa B1
+\mathchardef\geq="3\@tempa B3
+\mathchardef\times="3\@tempa B4
+\mathchardef\div="3\@tempa B8
+\mathchardef\prime="3\@tempa A2
+\mathchardef\bullet="3\@tempa B7
+\mathchardef\equiv="3\@tempa BA
+\mathchardef\approx="3\@tempa BB
+\mathchardef\sim="3\@tempa 7E
+\mathchardef\mid="3\@tempa BD
+\mathchardef\otimes="3\@tempa C4
+\mathchardef\oplus="3\@tempa C5
+\mathchardef\cap="3\@tempa C7
+\mathchardef\cup="3\@tempa C8
+\mathchardef\supset="3\@tempa C9
+\mathchardef\supseteq="3\@tempa CA
+\mathchardef\subset="3\@tempa CC
+\mathchardef\subseteq="3\@tempa CD
+\mathchardef\in="3\@tempa CE
+
+\mathcode`\.="6\@tempa 2E
+\mathcode`\,="6\@tempa 2C
+\mathcode`\f="0\@tempa A6
+
+%
+% Handle the symbols that are missing in the PostScript fonts, to
+% complete family 1
+%
+
+\edef\@tempa{\hexnumber@\timi@group}
+
+\mathchardef\varrho="0\@tempa 25
+\def\vec{\mathaccent"0\@tempa 7E }
+\mathchardef\natural="0\@tempa 5C
+\mathchardef\epsilon="0\@tempa 0F
+\mathchardef\imath="0\@tempa 7B
+\mathchardef\jmath="0\@tempa 7C
+\mathchardef\ell="0\@tempa 60
+\mathchardef\flat="0\@tempa 5B
+\mathchardef\sharp="0\@tempa 5D
+%
+\mathchardef\star="2\@tempa 3F
+\mathchardef\triangleleft="2\@tempa 2E
+\mathchardef\triangleright="2\@tempa 2F
+%
+\mathchardef\smile="3\@tempa 5E
+\mathchardef\frown="3\@tempa 5F
+\mathchardef\leftharpoonup="3\@tempa 28
+\mathchardef\leftharpoondown="3\@tempa 29
+\mathchardef\rightharpoonup="3\@tempa 2A
+\mathchardef\rightharpoondown="3\@tempa 2B
+\mathchardef\lhook="3\@tempa 2C
+\mathchardef\rhook="3\@tempa 2D
+
+% pick up some symbols from the LaTeX symbol font...
+
+\edef\@tempa{\hexnumber@\lyfam@group}
+
+\mathchardef\mho="0\@tempa 30
+\mathchardef\Join="3\@tempa 31
+\mathchardef\Box="0\@tempa 32
+\mathchardef\Diamond="0\@tempa 33
+\mathchardef\leadsto="3\@tempa 3B
+\mathchardef\sqsubset="3\@tempa 3C
+\mathchardef\sqsupset="3\@tempa 3D
+\mathchardef\lhd="3\@tempa 01
+\mathchardef\unlhd="3\@tempa 02
+\mathchardef\rhd="3\@tempa 03
+\mathchardef\unrhd="3\@tempa 04
+
+\def\dots{\ifmmode\ldots\else$\ldots$\fi}
+
+\declare@font{zapf}{m}{it}{pzcmi}
+\extra@def{zapf}{}{}
+
+\newmathalphabet\zapf
+\addtoversion{times}{\zapf}{zapf}{m}{it}
+
+\gdef\cal#1{{\zapf{#1}}}
+%
+% 1 2 3 - GO!
+%
+\mathversion{times}
+%%
+%% End of file `psmath.sty'.
diff --git a/macros/latex209/contrib/misc/pspic.sty b/macros/latex209/contrib/misc/pspic.sty
new file mode 100644
index 0000000000..9bec746f82
--- /dev/null
+++ b/macros/latex209/contrib/misc/pspic.sty
@@ -0,0 +1,209 @@
+\typeout{Document Style `PostScript PICTURE' v1.1b <apr 12 1991>.}
+%
+%----------------------------------------------------------------------
+%
+% PostScript PICTURE
+%
+% For use with DVIPS (by tomas rokicki)
+%
+%
+% By: Kresten Krab Thorup, University of Aalborg, Denmark
+% <krab@iesd.auc.dk>
+% January 1991
+%
+%
+% Thanks to Rett Bull <RBULL@POMONA.CLAREMONT.EDU> for comments and
+% bugreports.
+%----------------------------------------------------------------------
+%
+% ==================================
+% psbox
+% ==================================
+% Bug fixed 91/04/12. Reported by Johannes Sixt.
+% (The `end' at the end of this macro had incidential become `en d')
+\def\psbox#1{%
+ \vbox{%
+ \hbox{%
+ \special{" \number\unitlength.0 65290.17 div dup scale
+ picdict begin
+ /lwidth \number\@wholewidth.0 \number\unitlength.0 div def
+ lwidth setlinewidth
+ \moveto(0,0) #1 end}}}}
+%
+% ==================================
+% Commands for use in \psbox
+% ==================================
+%
+\def\moveto(#1,#2){ /x #1 def /y #2 def x y moveto}
+\def\rline(#1,#2){ newpath
+ x y moveto
+ #1 #2 rlineto
+ linedash 0 setdash stroke
+ /x x #1 add def
+ /y y #2 add def}
+%
+% ==================================
+% Commands for use in LaTeX
+% ==================================
+%
+%----------------------------------------------------------------------
+% \line command of LaTeX
+%----------------------------------------------------------------------
+\def\line(#1,#2)#3{\psbox{%
+ \@ccolour setgray
+ /linedash \linedash def
+ #1 0 eq
+ {/fac{#2 div abs #3 mul}def}
+ {/fac{#3 #1 abs div mul}def}
+ ifelse
+ \rline( #1 fac , #2 fac ) }}
+%----------------------------------------------------------------------
+% \putline(x1,y1)(x2,y2)
+%----------------------------------------------------------------------
+%\def\putline(#1,#2)(#3,#4){\put(#1,#2){\psbox{%
+% \@ccolour setgray
+% /linedash \linedash def
+% \rline(#3 #1 sub,#4 #2 sub)
+%}}}
+%----------------------------------------------------------------------
+% \vector command of LaTeX
+%----------------------------------------------------------------------
+\def\vector(#1,#2)#3{\psbox{%
+ \@ccolour setgray
+ /linedash \linedash def
+ #1 0 eq
+ {/fac{#2 div abs #3 mul}def}
+ {/fac{#3 #1 abs div mul}def}
+ ifelse
+ newpath
+ 0 0 #1 fac #2 fac lwidth lwidth \number\headwidth.0 mul
+ lwidth \number\headlength.0 mul arrow fill}}
+%----------------------------------------------------------------------
+% \putvector(x1,y1)(x2,y2)
+%----------------------------------------------------------------------
+%\def\putvector(#1,#2)(#3,#4){\put(#1,#2){\psbox{%
+% \@ccolour setgray
+% /linedash \linedash def
+% newpath
+% 0 0 #3 #1 sub #4 #2 sub lwidth lwidth \number\headwidth.0 mul
+% lwidth \number\headlength.0 mul arrow fill
+%}}}
+%----------------------------------------------------------------------
+% \circle and \circle* commands of LaTeX
+%----------------------------------------------------------------------
+\def\circle{\@ifstar{\@dot}{\@circle}}
+\def\@circle#1{\psbox{ newpath
+ 0 0 #1 2 div 0 360 arc
+ [] 0 setdash
+ \@ccolour setgray stroke}}
+\def\@dot#1{\psbox{newpath
+ 0 0 #1 2 div 0 360 arc
+ \@ccolour setgray fill}}
+%----------------------------------------------------------------------
+% \ellipse(width,heigth)
+% (suggested by Rett Bull)
+%----------------------------------------------------------------------
+ \def\ellipse(#1,#2){\@ifnextchar[%
+ {\@ellipse(#1,#2)}{\@ellipse(#1,#2)[full]}}
+ \def\@ellipse(#1,#2)#3{\psbox{%
+ #1 #2 scale newpath 0 0 0.5 e#3 arc [] 0 setdash stroke}}
+%----------------------------------------------------------------------
+% \bezier(x1,y1)(x2,y2)(x3,y3)
+%----------------------------------------------------------------------
+\def\bezier(#1,#2)(#3,#4)(#5,#6){%
+\psbox{#1 #2 #3 #4 #5 #6 curveto \@ccolour setgray \linedash 0 setdash stroke}%
+}%
+%----------------------------------------------------------------------
+% \oval command of LaTeX
+%----------------------------------------------------------------------
+\def\oval(#1,#2){\@ifnextchar[{\@oval(#1,#2)}{\@oval(#1,#2)[full]}}
+\def\@oval(#1,#2)[#3]{%
+ \begingroup
+ \@ovxx = #1\unitlength
+ \@ovyy =#2\unitlength
+ \@tempdimb \ifdim \@ovyy >\@ovxx =\@ovxx\else =\@ovyy \fi
+ \ifnum\@tempdimb>\maxovaldiam \@tempdimb=\maxovaldiam \fi
+ \psbox{/rad \number\@tempdimb.0 \number\unitlength.0 div 2 div def
+ /dx #1 2 div rad sub def
+ /dy #2 2 div rad sub def
+ \@ccolour setgray
+ newpath #3 [] 0 setdash stroke }%
+ \endgroup}
+%----------------------------------------------------------------------
+% \ctext{...} Text to be written with the current grayscale
+%----------------------------------------------------------------------
+\def\ctext#1{\special{ps:gsave \@ccolour
+ setgray}{}#1\special{ps:grestore}}
+%----------------------------------------------------------------------
+% Customization
+%----------------------------------------------------------------------
+\def\vectorhead#1#2{\headlength=#1 \headwidth=#2 }
+\def\dashpattern[#1]{\xdef\linedash{[#1] }}
+\def\colour#1{\def\@ccolour{\@nameuse{CC#1}}}
+\def\shade#1{\def\@ccolour{ 1 #1 100 div sub }}
+%
+% ==================================
+% Initialization
+% ==================================
+%
+\newdimen\maxovaldiam
+\maxovaldiam=14mm % Max diameter of LaTeX circle
+%
+\newcount\headlength % length of arrowhead in terms of
+ % linewidth
+\newcount\headwidth % width of arrowhead in terms of linewidth
+\vectorhead{9}{5} % default vectorhead dimentions
+%
+\dashpattern[] % set default type of linedashes
+%
+\def\CCwhite{1 }
+\def\CCblack{0 }
+\def\CCgray{.5 }
+\def\CClightgray{.75 }
+\def\CCdarkgray{.25 }
+\colour{black}
+%----------------------------------------------------------------------
+% The P*stScr*pt dictionary
+%----------------------------------------------------------------------
+\special{!/picdict 200 dict def picdict begin
+%
+% Comamnds needed for ``ellipse''
+%
+ /etr {0 90} def /etl {90 180} def /et {0 180} def
+ /ebr {270 360} def /ebl {180 270} def /eb {180 360} def
+ /el {90 270} def /er {-90 90} def /efull {0 360}def
+%
+% Comamnds needed for ``oval''
+%
+/tr { 0 0 moveto newpath dx dy rad 0 90 arc} def
+/tl { 0 0 moveto newpath -1 dx mul dy rad 90 180 arc} def
+/bl { 0 0 moveto newpath -1 dx mul -1 dy mul rad 180 270 arc} def
+/br { 0 0 moveto newpath dx -1 dy mul rad 270 360 arc} def
+/b { bl stroke newpath br -1 dx mul -1 dy mul rad sub moveto dx 2 mul
+ 0 rlineto} def
+/t { tl stroke newpath tr -1 dx mul dy rad add moveto dx 2 mul 0
+ rlineto } def
+/l { bl stroke newpath tl -1 dx mul rad sub -1 dy mul moveto 0 dy 2
+ mul rlineto } def
+/r { tr stroke newpath br dx rad add -1 dy mul moveto 0 dy 2 mul
+ rlineto } def
+/full { t stroke newpath r stroke newpath b stroke newpath l } def
+/mtrx matrix def
+%
+/arrow {
+/headlength exch def /halfheadthickness exch 2 div def
+/halfthickness exch 2 div def /tipy exch def /tipx exch def /taily
+exch def /tailx exch def /dx tipx tailx sub def /dy tipy taily sub def
+/arrowlength dx dx mul dy dy mul add sqrt def /angle dy dx atan def
+/base arrowlength headlength sub def /savematrix mtrx currentmatrix
+def tailx taily translate angle rotate gsave newpath 0 0 moveto base 0
+lineto linedash 0 setdash stroke grestore base halfheadthickness neg
+moveto arrowlength 0 lineto base halfheadthickness lineto base
+halfthickness lineto closepath savematrix setmatrix
+} def
+%%
+end}
+%----------------------------------------------------------------------
+% end of pspic.sty
+%----------------------------------------------------------------------
+
diff --git a/macros/latex209/contrib/misc/pstimesm.sty b/macros/latex209/contrib/misc/pstimesm.sty
new file mode 100644
index 0000000000..3a8dd9973e
--- /dev/null
+++ b/macros/latex209/contrib/misc/pstimesm.sty
@@ -0,0 +1,80 @@
+% Filename: pstimesm.sty
+% Author: Alan Jeffrey
+% Email: alanje@cogs.sussex.ac.uk
+% Last modified: 26 May 1992
+
+% This is a LaTeX style file for Times with the MathTime fonts.
+
+% 21 May 1992: Created file.
+%
+% 26 May 1992: Added Zapf Chancery calligraphic letters.
+% (Unfortunately, this means that \cal I and O will not be very
+% obvious, but life is hard.)
+
+% To begin with, we load the MathTime macros. Unfortunately, these
+% PLAY SILLY BUGGERS with the catcode of @, which we have to patch.
+% Why oh why oh why...
+
+\newcount\atcatcode
+
+\atcatcode=\catcode`\@
+
+\input mtmacs
+
+\catcode`\@=\atcatcode
+
+% Then we can get on with loading some fonts. First off, we load the
+% Times font.
+
+\input pstimes.sty
+
+% Then we load the MathTime fonts themselves.
+
+\new@ps@fontshape{MTMI}{m}{it}{MTMI}
+\new@ps@fontshape{MTSY}{m}{n}{MTSY}
+\new@ps@fontshape{MTEX}{m}{n}{MTEX}
+
+\new@mathversion\mv@mathtime
+
+\define@mathgroup\mv@mathtime{0}{times}{m}{n}
+\define@mathgroup\mv@mathtime{1}{MTMI}{m}{it}
+\define@mathgroup\mv@mathtime{2}{MTSY}{m}{n}
+\define@mathgroup\mv@mathtime{3}{MTEX}{m}{n}
+
+\addtoversion{mathtime}{\mathsf}{\sfdefault}{m}{n}
+\addtoversion{mathtime}{\mathbf}{\rmdefault}{bx}{n}
+\addtoversion{mathtime}{\mathsc}{\scdefault}{m}{n}
+\addtoversion{mathtime}{\mathit}{\rmdefault}{m}{it}
+\addtoversion{mathtime}{\mathsl}{\rmdefault}{m}{sl}
+\addtoversion{mathtime}{\mathtt}{\ttdefault}{m}{n}
+
+% There are no bold math fonts for MathTime.
+
+\def\boldmath{\@warning{\string\boldmath\space is not available
+ with MathTime}\gdef\boldmath{}}
+
+% The command \cal now generated Zapf Chancery, scaled up by 15.28%,
+% to make the cap height the same as that of Times Roman.
+
+\let\cal\undefined
+\newmathalphabet\cal
+
+\new@fontshape{chancery}{m}{it}{%
+ <5>pzcmi at5.76pt%
+ <6>pzcmi at6.92pt%
+ <7>pzcmi at8.07pt%
+ <8>pzcmi at9.22pt%
+ <9>pzcmi at10.38pt%
+ <10>pzcmi at11.52pt%
+ <11>pzcmi at12.62pt%
+ <12>pzcmi at13.83pt%
+ <14>pzcmi at16.6pt%
+ <17>pzcmi at19.92pt%
+ <20>pzcmi at23.90pt%
+ <25>pzcmi at28.68pt}{}
+
+\addtoversion{mathtime}{\cal}{chancery}{m}{it}
+
+% The default math version is MathTime.
+
+\mathversion{mathtime}
diff --git a/macros/latex209/contrib/misc/qm.sty b/macros/latex209/contrib/misc/qm.sty
new file mode 100644
index 0000000000..16c3413e82
--- /dev/null
+++ b/macros/latex209/contrib/misc/qm.sty
@@ -0,0 +1,53 @@
+% ***************************** QM.STY *****************************
+% Version 1.1
+% 25.5.1994
+%
+% Commands for Bras, Kets, and the like. The commands are working in
+% textmode and mathmode.
+%
+% Since Version 1.1 of this style the arguments of all commands are set to
+% mathmode; e.g. you don't have to write \bra{$\Phi$} but only \bra{\Phi}.
+%
+% Written by:
+% Norbert Christlieb
+% Heussweg 102
+% 20255 Hamburg
+% Germany
+% E-Mail: norbert@philosophie.uni-hamburg.de
+%
+% *******************************************
+\def\fileversion{1.1}
+\def\filedate{May 25, 1994}
+\typeout{Style Option `qm' Version\space\fileversion\space<\filedate>
+ (NC) }
+
+% Command for Bras. Example: with "\bra{1}" you get "<1|".
+\newcommand{\bra}[1]{\mbox{\rm \raisebox{0.15ex}[-0.15ex]{$<$}$#1$
+ \kern-.20em \vrule width.025em height1.6ex depth 0ex}}
+
+% \ket{1}: |1>
+\newcommand{\ket}[1]{\mbox{\rm \vrule width.025em height1.6ex
+ depth 0ex \kern.15em $#1$\raisebox{0.15ex}[-0.15ex]{$>$}}}
+
+% \bracket{1}{2}: <1|2>
+\newcommand{\bracket}[2]{\mbox{\rm \raisebox{0.15ex}[-0.15ex]{$<$}$#1$
+ \kern-.20em \vrule width.025em height1.6ex depth 0ex \kern.20em
+ $#2$\raisebox{0.15ex}[-0.15ex]{$>$}}}
+
+% \expvalue{1}{2}{3}: <1|2|3>
+\newcommand{\expvalue}[3]{\mbox{\rm \raisebox{0.15ex}[-0.15ex]{$<$}$#1$
+ \kern-.20em \vrule width.025em height1.6ex depth 0ex \kern.20em $#2$
+ \kern-.20em \vrule width.025em height1.6ex depth 0ex \kern.15em
+ $#3$\raisebox{0.15ex}[-0.15ex]{$>$}}}
+
+% Operator of the identity: \identop
+\def\identop{\mbox{\tt \large \kern.45em \vrule width.02em height1.35ex
+ depth 0ex \kern-.19em 1}}
+
+% Adjoint Operator
+\newcommand{\adjoint}[1]{\mbox{$#1^{\mbox{\scriptsize \dag}}$}}
+
+
+
+
+
diff --git a/macros/latex209/contrib/misc/quote.sty b/macros/latex209/contrib/misc/quote.sty
new file mode 100644
index 0000000000..73328d49d7
--- /dev/null
+++ b/macros/latex209/contrib/misc/quote.sty
@@ -0,0 +1,119 @@
+% Save file as: QUOTE.STY Source: FILESERV@SHSU.BITNET
+%
+% File: QUOTE.STY
+%
+% Author: Hunter Goatley
+% goathunter@WKUVX1.BITNET
+%
+% Date: August 14, 1991
+%
+% Abstract:
+%
+% This file defines the macros \begindoublequotes and \enddoublequotes,
+% which let TeX replace the double-quote character (") with TeX's
+% left double-quote and right double-quote. For example:
+%
+% "This is a test." ---> ``This is a test.''
+%
+% The double-quote character is still available via \dq. (\" is still
+% treated as the umlaut accent.)
+%
+% This macro makes a couple of assumptions about the double-quotes:
+%
+% 1. Double-quotes are assumed to come in pairs. When replacing
+% double-quotes, the macro alternates between `` and ''. The only
+% exception to this is noted in (2) below.
+% 2. A double-quote at the beginning of a paragraph is always treated
+% as ``. This correctly handles the case where a quotation is
+% continued into a second paragraph:
+%
+% "This is the first paragraph.\par
+% "This is the second paragraph of the same quote."
+%
+% Normal TeX spacing after `` and '' is maintained by saving and
+% restoring the \spacefactor.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% HOW IT WORKS:
+%
+% The double-quote character (") is made active by \begindoublequotes.
+% The " macro keeps track of left-quote/right-quote pairs and inserts
+% the appropriate `` and '' in its place.
+%
+% Each character has a \spacefactor associated with it, which specifies
+% the amount of stretch or shrink that a space following the character
+% can have. Most characters have a factor of 1000, but some punctuation
+% marks have higher spacefactors, most notably the period, which has a
+% \spacefactor of 3000. This means the space following a period can
+% stretch up to 3 times more than the space after a regular character,
+% accounting for the increased space at the end of sentences.
+%
+% The `` and '' ligatures are assigned \spacefactor's of 0, so that the
+% \spacefactor that is applied to the next character is the same as that
+% of the character preceding the quotes. Because " has been redefined as
+% a macro, any spaces following " are swallowed by TeX. It was necessary
+% to have this macro re-insert any needed space so that the following
+% cases worked correctly:
+%
+% "This is a test," she said. --> ``This is a test,'' she said.
+% "This is in a list"; etc. --> ``This is in a list''; etc.
+%
+% Without the added space, the first example becomes:
+%
+% ``This is a test,''she said.
+%
+% The solution was to save the current \spacefactor before inserting a
+% right double-quote, then resetting the \spacefactor after the
+% insertion. The net effect was that the " macro has a \spacefactor
+% of 0, which matches the way TeX treats `` and ''.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{% % Begin a group for which " is active
+\catcode`\"=\active % Make " an active character
+\catcode`\@=11 % Make @ an active character
+%
+% \begindoublequotes
+%
+% This macro makes " an active character, resets the control sequence
+% \dblqu@te to L (left), and defines \dq as a replacement for ".
+%
+\gdef\begindoublequotes{% % \begindoublequotes enables "
+ \global\catcode`\"=\active % Make " an active character
+ \global\chardef\dq=`\" % Double-quote char. via \dq
+ \global\let\dblqu@te=L % Always start with a left double-quote
+ } % End of macro
+%
+% Define the macro that will be executed whenever " is encountered.
+%
+\gdef"{%
+ % If the double-quote is the first character in a new paragraph,
+ % make sure it becomes a left double-quote. This case can be
+ % detected by checking to see if TeX is currently in vertical mode.
+ % If so, the double-quote is at the beginning of the paragraph
+ % (since " hasn't actually generated any horizontal mode tokens
+ % yet, TeX is still in vertical mode). If the mode is vertical,
+ % set \dblqu@te equal to L.
+ %
+ \ifinner\else\ifvmode\let\dblqu@te=L\fi\fi
+ %
+ % Now insert the appropriate left or right double-quote.
+ %
+ % If \dblqu@te is L, insert a `` and set \dblqu@te to R.
+ %
+ \if L\dblqu@te``\global\let\dblqu@te=R%
+ %
+ % Otherwise, save the current \spacefactor, insert '', set \dblqu@te
+ % to L, and reset the original \spacefactor.
+ %
+ \else
+ \let\xxx=\spacefactor % Save the \spacefactor
+ ''\global\let\dblqu@te=L% % Insert '' and reset \dblqu@te
+ \spacefactor\xxx % Reset the \spacefactor
+ \fi % End of \if L\dblqu@te...
+ } % End of " macro
+} % End of group
+
+\gdef\enddoublequotes{%
+ \catcode`\"=12 %Set " back to other
+ }
diff --git a/macros/latex209/contrib/misc/raggedtab.sty b/macros/latex209/contrib/misc/raggedtab.sty
new file mode 100644
index 0000000000..24bdc45e31
--- /dev/null
+++ b/macros/latex209/contrib/misc/raggedtab.sty
@@ -0,0 +1,11 @@
+% Style option to cause all parboxes to be typeset ragged right:
+
+\def\@arrayparboxrestore{\let\par\@@par
+ \let\-\@dischyph
+ \let\'\@acci \let\`\@accii \let\=\@acciii
+ \parindent\z@ \parskip\z@
+ \everypar{}\linewidth\hsize
+ \@totalleftmargin\z@ \leftskip\z@ \rightskip\@flushglue
+ \@rightskip\@flushglue
+ \parfillskip\@flushglue \lineskip\normallineskip
+ \baselineskip\normalbaselineskip\sloppy}
diff --git a/macros/latex209/contrib/misc/rangecite.sty b/macros/latex209/contrib/misc/rangecite.sty
new file mode 100644
index 0000000000..758f2f5532
--- /dev/null
+++ b/macros/latex209/contrib/misc/rangecite.sty
@@ -0,0 +1,75 @@
+% RANGECITE DOCUMENT-STYLE OPTION FOR ANY STYLE WITH NUMERIC CITATIONS
+%
+% This redefines the LaTex \@cite macro to gather consecutive citation numbers
+% i,i+1,...,j into a range i-j
+%
+% Nachum Dershowitz (nachum@cs.uiuc.edu)
+% Edward M. Reingold (reingold@cs.uiuc.edu)
+%
+% These macros are in the public domain. You may use them and copy them at
+% will, provided you retain the authorship information. We wrote these for
+% temporary use in a single paper, so use them at your own risk!
+%
+% Written 12 Apr 1990
+%
+%
+\newif\if@first%
+\newcounter{@@@first}%
+\newcounter{@@@state}%
+%
+% A simple four-state finite automaton:
+% State 0: No references in current range
+% State 1: One reference in current range
+% State 2: Two references in current range
+% State 3: More than two references in current range
+%
+\newcounter{@@@next}%
+\newcounter{@@@cur}%
+\newcounter{@@@curt}%
+\newcommand{\b@@@ENDLIST}{9999}%
+\def\@citex[#1]#2{%
+ \if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+ \def\@citea{}%
+ \@cite{%
+ \@firsttrue%
+ \setcounter{@@@state}{0}%
+ \@for\@citeb:=#2,@@ENDLIST\do{%
+ \@ifundefined{b@\@citeb}%
+ {{\bf ?}%
+ \@warning{Citation `\@citeb' on page \thepage \space undefined}}%
+% else%
+ {\setcounter{@@@next}{\csname b@\@citeb\endcsname}%
+ \ifcase\the@@@state%
+% state 0:
+ \setcounter{@@@state}{1}%
+ \or% state 1:
+ \ifnum\value{@@@next}=\value{@@@curt}%
+ \setcounter{@@@state}{2}%
+ \setcounter{@@@first}{\value{@@@cur}}%
+ \else%
+ \if@first{}\else{,\ }\fi%
+ \the@@@cur%
+ \@firstfalse%
+ \fi%
+ \or% state 2:
+ \ifnum\value{@@@next}=\value{@@@curt}%
+ \setcounter{@@@state}{3}%
+ \else%
+ \setcounter{@@@state}{1}%
+ \if@first{}\else{,\ }\fi%
+ \the@@@first,\ \the@@@cur%
+ \@firstfalse%
+ \fi%
+ \or% state 3:
+ \ifnum\value{@@@next}=\value{@@@curt}%
+ \else%
+ \setcounter{@@@state}{1}%
+ \if@first{}\else{,\ }\fi%
+ \the@@@first-\the@@@cur%
+ \@firstfalse%
+ \fi%
+ \fi%
+ \setcounter{@@@cur}{\value{@@@next}}%
+ \setcounter{@@@curt}{\value{@@@cur}}%
+ \addtocounter{@@@curt}{1}}}}%
+ {#1}}%
diff --git a/macros/latex209/contrib/misc/regel.sty b/macros/latex209/contrib/misc/regel.sty
new file mode 100644
index 0000000000..fa9023136c
--- /dev/null
+++ b/macros/latex209/contrib/misc/regel.sty
Binary files differ
diff --git a/macros/latex209/contrib/misc/remark.sty b/macros/latex209/contrib/misc/remark.sty
new file mode 100644
index 0000000000..771ae1d73e
--- /dev/null
+++ b/macros/latex209/contrib/misc/remark.sty
@@ -0,0 +1,130 @@
+% ****************************************
+% * REMARK ENVIRONMENTS *
+% ****************************************
+%
+% The user creates his own remark-like environments with the command
+% \newremark{NAME}{TEXT}[COUNTER] or
+% \newremark{NAME}[OLDNAME]{TEXT}
+% This defines the environment NAME to be just as one would expect a
+% remark environment to be, except that it prints ``TEXT'' instead of
+% ``Remark''.
+%
+% If OLDNAME is given, then environments NAME and OLDNAME use the same
+% counter, so using a NAME environment advances the number of the next
+% NAME environment, and vice-versa.
+%
+% If COUNTER is given, then environment NAME is numbered within COUNTER.
+% E.g., if COUNTER = subsection, then the first NAME in subsection 7.2
+% is numbered TEXT 7.2.1.
+%
+% The way NAME environments are numbered can be changed by redefining
+% \theNAME.
+%
+% DOCUMENT STYLE PARAMETERS
+%
+% \@rmkcounter{COUNTER} : A command such that
+% \edef\theCOUNTER{\@rmkcounter{COUNTER}}
+% defines \theCOUNTER to produce a number for a remark environment.
+% The default is:
+% BEGIN \noexpand\arabic{COUNTER} END
+%
+% \@rmkcountersep : A separator placed between a remark number and
+% the number of the counter within which it is numbered.
+% E.g., to make the third remark of section 7.2 be numbered
+% 7.2-3, \@rmkcountersep should be \def'ed to '-'. Its
+% default is '.'.
+%
+% \@beginremark{NAME}{NUMBER} : A command that begins a remark
+% environment for a 'remark' named 'NAME NUMBER' --
+% e.g., \@beginremark{Lemma}{3.7} starts Lemma 3.7.
+%
+% \@opargbeginremark{NAME}{NUMBER}{OPARG} : A command that begins a remark
+% environment for a 'remark' named 'NAME NUMBER' with optional
+% argument OPARG -- e.g., \@beginremark{Lemma}{3.7}{Jones}
+% starts `Lemma 3.7 (Jones):'.
+%
+% \@endremark : A command that ends a remark environment.
+%
+% \newremark{NAME}{TEXT}[COUNTER] ==
+% BEGIN
+% if \NAME is definable
+% then \@definecounter{NAME}
+% if COUNTER present
+% then \@addtoreset{NAME}{COUNTER} fi
+% \theNAME == BEGIN \theCOUNTER \@rmkcountersep
+% eval\@rmkcounter{NAME} END
+% else \theNAME == BEGIN eval\@rmkcounter{NAME} END
+% \NAME == \@rmk{NAME}{TEXT}
+% \endNAME == \@endremark
+% else error
+% fi
+% END
+%
+% \newremark{NAME}[OLDNAME]{TEXT}==
+% BEGIN
+% if \NAME is definable
+% then \theNAME == \theOLDNAME
+% \NAME == \@rmk{OLDNAME}{TEXT}
+% \endNAME == \@endremark
+% else error
+% fi
+% END
+%
+% \@rmk{NAME}{TEXT} ==
+% BEGIN
+% \refstepcounter{NAME}
+% if next char = [
+% then \@yrmk{NAME}{TEXT}
+% else \@xrmk{NAME}{TEXT}
+% fi
+% END
+%
+% \@xrmk{NAME}{TEXT} ==
+% BEGIN
+% \@beginremark{TEXT}{\theNAME}
+% \ignorespaces
+% END
+%
+% \@yrmk{NAME}{TEXT}[OPARG] ==
+% BEGIN
+% \@opargbeginremark{TEXT}{\theNAME}{OPARG}
+% \ignorespaces
+% END
+%
+\def\newremark#1{\@ifnextchar[{\@ormk{#1}}{\@nrmk{#1}}}
+
+\def\@nrmk#1#2{%
+\@ifnextchar[{\@xnrmk{#1}{#2}}{\@ynrmk{#1}{#2}}}
+
+\def\@xnrmk#1#2[#3]{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\@addtoreset{#1}{#3}%
+\expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+ \csname the#3\endcsname \@rmkcountersep \@rmkcounter{#1}}%
+\global\@namedef{#1}{\@rmk{#1}{#2}}\global\@namedef{end#1}{\@endremark}}}
+
+\def\@ynrmk#1#2{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@rmkcounter{#1}}%
+\global\@namedef{#1}{\@rmk{#1}{#2}}\global\@namedef{end#1}{\@endremark}}}
+
+\def\@ormk#1[#2]#3{\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{the#1}{\@nameuse{the#2}}%
+\global\@namedef{#1}{\@rmk{#2}{#3}}%
+\global\@namedef{end#1}{\@endremark}}}
+
+\def\@rmk#1#2{\refstepcounter
+ {#1}\@ifnextchar[{\@yrmk{#1}{#2}}{\@xrmk{#1}{#2}}}
+
+\def\@xrmk#1#2{\@beginremark{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@yrmk#1#2[#3]{\@opargbeginremark{#2}{\csname
+ the#1\endcsname}{#3}\ignorespaces}
+
+%DEFAULT VALUES
+\def\@rmkcounter#1{\noexpand\arabic{#1}}
+\def\@rmkcountersep{.}
+%deleted September 2, 1986 MDK
+%\def\@makermknumber#1#2{\bf #1 #2:}
+\def\@beginremark#1#2{\trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+\def\@opargbeginremark#1#2#3{\trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+\def\@endremark{\endtrivlist}
diff --git a/macros/latex209/contrib/misc/rmthm.sty b/macros/latex209/contrib/misc/rmthm.sty
new file mode 100644
index 0000000000..e1770391ef
--- /dev/null
+++ b/macros/latex209/contrib/misc/rmthm.sty
@@ -0,0 +1,23 @@
+% rmthm.sty, by nico@cs.ruu.nl
+% This version is of 14 June 1991.
+% You can change the style in which your \newtheorems are typeset with
+% \renewcommand{\theoremstyle}{...}.
+% Default is \rm (hence the name of this file).
+% You can also specify an end-of-theorem marker with
+% \renewcommand{\theoremclosing}{...}.
+% Default is a box flushed right.
+% If you don't want your theorems to be numbered, number them like
+% the nonumtheorem theorem environment, i.e.
+% \newtheorem{thm}[nonumthm]{Thm}.
+
+\def\@begintheorem#1#2{\theoremstyle
+ \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+\def\@opargbegintheorem#1#2#3{\theoremstyle
+ \trivlist \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+\def\@endtheorem{\nopagebreak\theoremclosing\endtrivlist}
+\def\theoremstyle{\rm}
+\def\theoremclosing{\hfill$\Box$}
+\newtheorem{nonumthm}{\relax}
+\renewcommand{\thenonumthm}{\relax}
+
+
diff --git a/macros/latex209/contrib/misc/rnl-slides.sty b/macros/latex209/contrib/misc/rnl-slides.sty
new file mode 100644
index 0000000000..cedc241c53
--- /dev/null
+++ b/macros/latex209/contrib/misc/rnl-slides.sty
@@ -0,0 +1,594 @@
+
+
+ Hallo,
+
+ Jemandem hat gefragt ob es m"oglich w"are einen Rand um einer TeXt
+ herum zu machen. Bernd hat als `hint' gegeben dass das mit
+ \@oddhead und \@evenhead geht.
+ Hierbei ist eine SliTeX Stylefile der genau dass macht. Warnung:
+ die File kann nicht ohne "Anderungen benutzt werden, denn es
+ versucht mit einem \special eine LN03-sixel-File zu lesen.
+ Aber vielleicht hilft es?
+
+ Mit freundlichem Gruss,
+
+ Johannes Braams
+
+PTT Research Neher Laboratorium, P.O. box 421,
+2260 AK Leidschendam, The Netherlands.
+Phone : +31 70 3325051 E-mail : JL_Braams@pttrnl.nl
+Fax : +31 70 3326477
+-------------------------------------------------------------------------------
+% RNL-slides DOCUMENT STYLE
+% for SliTeX version 2.09
+% Copyright (C) 1991 by Johannes Braams
+% This style is based on the SLIDE style, Copyright (C) 1985 by Leslie Lamport
+%
+\def\fileversion{0.2}
+\def\filedate{25 januari 1990}
+\typeout{Documentstyle 'RNL-slides' version \fileversion\space <\filedate>}
+
+\def\@notinslitex{\errmessage{This command not allowed in SLiTeX.}}
+
+%page layout
+\@twosidefalse
+\topmargin -10pt
+\oddsidemargin 17pt
+\evensidemargin 17pt
+
+\def\pl@twoside{\@latexerr{No 'twoside' layout for slides}\@eha}
+
+\advance\hoffset by -1cm
+\advance\voffset by -0.3cm
+\headheight 0pt
+\headsep 2.3pc
+\footheight 0pt
+\footskip 45pt
+\newdimen\boxwidth\newdimen\boxheight
+\boxwidth = 63.2pc \textwidth = \boxwidth \advance\textwidth by -4pc
+\boxheight = 39.5pc \textheight = \boxheight \advance\textheight by -4.6pc
+\columnwidth \textwidth
+\columnsep 10pt
+\columnseprule \z@
+
+%footnotes
+
+\skip\footins 10pt plus 2pt minus 4pt % Space between last line of text and
+ % top of first footnote.
+
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+\footnotesep 20pt % Height of strut placed at the beginning of every
+ % footnote.
+
+
+
+
+%floats and marginpar
+\marginparwidth 0pt
+\marginparsep 0pt
+\marginparpush 0pt
+
+
+
+
+
+
+
+
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+%
+% Note that SLITeX uses a different font-naming and size-defining convention
+% than LaTeX.
+%
+\font\trm lcmss8
+\def\@mainsize{\@visibletrue\tiny}
+\parindent 0pt
+\def\baselinestretch{1}
+
+\def\sc{\@noslifont\sc}
+\def\@noslifont#1{\@warning{No \string#1\space type style in SLiTeX}}
+
+\def\Huge{\huge}
+
+\def\huge{\@nomath\huge\@LARGE\@huge\def\@currsize{\@huge}\rm
+\baselineskip 60pt plus 10pt minus 6pt%
+\lineskip 2pt%
+\def\@parskip{60pt plus 30pt minus 6pt}%
+\parskip\@parskip
+\abovedisplayskip 24pt plus 10pt minus 6pt%
+\belowdisplayskip 24pt plus 10pt minus 6pt%
+\abovedisplayshortskip 12pt plus 8pt%
+\belowdisplayshortskip 12pt plus 8pt%
+\setbox\strutbox=\hbox{\vrule height27pt depth11pt width0pt}%
+\baselineskip\baselinestretch\baselineskip
+\normalbaselineskip\baselineskip}
+
+\def\@huge{\if@visible\fortyonept\else\ifortyonept\fi}
+
+\def\LARGE{\@nomath\LARGE\@LARGE\def\@currsize{\@LARGE}\rm
+\baselineskip 52pt plus 10pt minus 6pt%
+\lineskip 2pt%
+\def\@parskip{52pt plus 30pt minus 6pt}%
+\parskip\@parskip
+\abovedisplayskip 24pt plus 10pt minus 6pt%
+\belowdisplayskip 24pt plus 10pt minus 6pt%
+\abovedisplayshortskip 12pt plus 8pt%
+\belowdisplayshortskip 12pt plus 8pt%
+\setbox\strutbox=\hbox{\vrule height27pt depth11pt width0pt}%
+\baselineskip\baselinestretch\baselineskip
+\normalbaselineskip\baselineskip}
+
+\def\@LARGE{\if@visible\thirtyfourpt\else\ithirtyfourpt\fi}
+
+\def\Large{\@nomath\Large\@Large\def\@currsize{\@Large}\rm
+\baselineskip 48pt plus 10pt minus 6pt%
+\lineskip 2pt%
+\def\@parskip{48pt plus 30pt minus 6pt}%
+\parskip\@parskip
+\abovedisplayskip 24pt plus 10pt minus 6pt%
+\belowdisplayskip 24pt plus 10pt minus 6pt%
+\abovedisplayshortskip 12pt plus 8pt%
+\belowdisplayshortskip 12pt plus 8pt%
+\setbox\strutbox=\hbox{\vrule height27pt depth11pt width0pt}%
+\baselineskip\baselinestretch\baselineskip
+\normalbaselineskip\baselineskip}
+
+\def\@Large{\if@visible\twentyninept\else\itwentyninept\fi}
+
+\def\large{\@nomath\large\@large\def\@currsize{\@large}\rm
+\baselineskip 42pt plus 8pt minus 5pt%
+\lineskip 2pt%
+\def\@parskip{40pt plus 20pt minus 4pt}%
+\parskip\@parskip
+\abovedisplayskip 20pt plus 8pt minus 3pt%
+\belowdisplayskip 20pt plus 8pt minus 3pt%
+\abovedisplayshortskip 10pt plus 5pt%
+\belowdisplayshortskip 10pt plus 5pt%
+\setbox\strutbox=\hbox{\vrule height20pt depth8.5pt width0pt}%
+\baselineskip\baselinestretch\baselineskip
+\normalbaselineskip\baselineskip}
+
+\def\@large{\if@visible\twentyfourpt\else\itwentyfourpt\fi}
+
+
+\def\normalsize{\@nomath\normalsize\@normalsize\def\@currsize{\@normalsize}\rm
+\baselineskip 30pt plus 3pt minus 3pt%
+\lineskip 2pt%
+\def\@parskip{30pt plus 12pt minus 6pt}%
+\parskip\@parskip
+\abovedisplayskip 10pt plus 2pt minus 2pt%
+\belowdisplayskip 6pt plus 2pt minus 2pt%
+\abovedisplayshortskip 6pt plus 2pt%
+\belowdisplayshortskip 6pt plus 2pt%
+\setbox\strutbox=\hbox{\vrule height17pt depth7pt width0pt}%
+\baselineskip\baselinestretch\baselineskip
+\normalbaselineskip\baselineskip}
+
+\def\@normalsize{\if@visible\twentypt\else\itwentypt\fi}
+
+\def\small{\@nomath\small\@small\def\@currsize{\@small}\rm
+\baselineskip 19pt plus 3pt minus 1pt%
+\lineskip 2pt%
+\def\@parskip{15pt plus 10pt minus 6pt}%
+\parskip\@parskip
+\abovedisplayskip 9pt plus 2pt minus 2pt%
+\belowdisplayskip 6pt plus 2pt minus 2pt%
+\abovedisplayshortskip 4pt plus 2pt%
+\belowdisplayshortskip 4pt plus 2pt%
+\setbox\strutbox=\hbox{\vrule height13.5pt depth5.6pt width0pt}%
+\baselineskip\baselinestretch\baselineskip
+\normalbaselineskip\baselineskip}
+
+\def\@small{\if@visible\seventeenpt\else\iseventeenpt\fi}
+
+\let\footnotesize=\small
+
+\let\scriptsize=\small
+
+\def\tiny{\@nomath\tiny\@tiny\def\@currsize{\@tiny}\rm
+\baselineskip 16pt plus 2pt minus 1pt%
+\lineskip 2pt%
+\def\@parskip{11pt plus 11pt minus 5pt}%
+\parskip\@parskip
+\abovedisplayskip 9pt plus 2pt minus 6pt%
+\belowdisplayskip 9pt plus 2pt minus 6pt%
+\abovedisplayshortskip 0pt plus 2pt%
+\belowdisplayshortskip 0pt plus 2pt%
+\setbox\strutbox=\hbox{\vrule height10pt depth4pt width0pt}%
+\baselineskip\baselinestretch\baselineskip
+\normalbaselineskip\baselineskip}
+
+\def\@tiny{\if@visible\fourteenpt\else\ifourteenpt\fi}
+
+%
+%\change{0.2a}{25/01/91}{Redefine {\tt\bsl @arrayparbox} to fit \SLiTeX}
+%
+\def\@arrayparboxrestore{\let\par\@@par
+ \let\-\@dischyph
+ \let\'\@acci \let\`\@accii \let\=\@acciii
+ \parindent\z@ \parskip\@parskip
+ \everypar{}\linewidth\hsize
+ \@totalleftmargin\z@ \leftskip\z@ \rightskip\z@ \@rightskip\z@
+ \parfillskip\@flushglue \lineskip\normallineskip
+ \baselineskip\normalbaselineskip\sloppy}
+
+
+
+
+
+
+
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+\newbox\rand
+\setbox\rand=\vbox to\boxheight{\hsize\boxwidth\offinterlineskip
+\rlap{\hbox{\rule[-2pt]{\boxwidth}{2pt}}}
+\vskip-2pt
+\rlap{\hbox to \boxwidth{\rule[-\boxheight]{2pt}{\boxheight}\hfill
+ \rule[-\boxheight]{2pt}{\boxheight}}}
+\vskip-2pt
+\rlap{\hbox{\rule{\boxwidth}{2pt}}}
+}
+\ht\rand=\z@ \dp\rand=\z@ \wd\rand=\z@
+
+\newbox\l@g@
+\setbox\l@g@\hbox to 122pt{%
+ \special{ln03:plotfile texinputs:research.six}\hfill\null}
+\newbox\@slidenum
+\def\pagebox#1{%
+\setbox\@slidenum\vbox to 0pt{\vskip 18pt
+\hbox{\hskip-33pt\trm 910128.#1}\vss}
+\box\@slidenum}
+%
+% The page styles of slides is determined by the 'slide' page
+% style, the slide environment executing a \thispagestyle{slide}
+% command. The page styles of overlays and notes are similarly
+% determined by 'overlay' and 'note' page styles. The command
+% standard 'headings', 'plain' and 'empty' page styles work by
+% redefining the 'slide', 'overlay', and 'note' styles.
+%
+
+\def\ps@headings{%
+\def\ps@slide{%
+ \def\@oddfoot{\pagebox{\theslide}\hfill\copy\l@g@}
+ \def\@oddhead{\hskip-2pc\copy\rand\hfill\null}
+ \let\@evenfoot\@oddfoot
+ \let\@evenfoot\@oddfoot
+ }
+\def\ps@overlay{%
+ \def\@oddfoot{\pagebox{\theoverlay}\hfill\copy\l@g@}
+ \def\@oddhead{\hskip-2pc\copy\rand\hfill\null}
+ \let\@evenfoot\@oddfoot
+ \let\@evenfoot\@oddfoot
+ }
+\def\ps@note{%
+ \def\@oddfoot{\pagebox{\thenote}\hfill\copy\l@g@}
+ \def\@oddhead{\hskip-2pc\copy\rand\hfill\null}
+ \let\@evenfoot\@oddfoot
+ \let\@evenfoot\@oddfoot
+ }
+}
+
+\let\ps@plain\ps@headings
+\let\ps@empty\ps@headings
+%
+%\def\ps@plain{\def\ps@slide{%
+%\def\@oddfoot{\@mainsize \mtbox{}\hfil\hbox to 3em{\theslide\hss}}%
+%\def\@oddhead{}%
+%%\def\@evenfoot{\@mainsize \mbox{}\hfil\hbox to 3em{\theslide\hss}}%
+%\def\@evenhead{}}
+%\def\ps@overlay{\def\@oddfoot{\@mainsize
+% \mbox{}\hfil\hbox to 3em{\theoverlay\hss}}%
+%\def\@oddhead{}%
+%\def\@evenfoot{\@mainsize \mbox{}\hfil\hbox to 3em{\theoverlay\hss}}%
+%\def\@evenhead{}}
+%\def\ps@note{\def\@oddfoot{\@mainsize \hbox{}\hfil\thenote}%
+%\def\@oddhead{}%
+%\def\@evenfoot{\@mainsize \hbox{}\hfil\thenote}%
+%\def\@evenhead{}}}
+
+%\def\ps@empty{%
+%\def\ps@slide{\def\@oddhead{}\def\@oddfoot{}%
+%\def\@evenhead{}\def\@evenfoot{}}%
+%\def\ps@overlay{\def\@oddhead{}\def\@oddfoot{}%
+%\def\@evenhead{}\def\@evenfoot{}}%
+%\def\ps@note{\def\@oddhead{}\def\@oddfoot{}%
+%\def\@evenhead{}\def\@evenfoot{}}}
+
+% Default definition the 'slide', 'overlay', and 'note' page styles.
+\ps@headings
+
+% Set ordinary page style to 'empty'
+%\def\@oddhead{}\def\@oddfoot{}%
+%\def\@evenhead{}\def\@evenfoot{}
+
+
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+
+
+
+
+
+
+
+
+% ****************************************
+% * ENVIRONMENTS *
+% ****************************************
+%
+% titlepage
+%
+\def\titlepage{\newpage\thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\newpage}
+
+% Default values for list environment.
+
+\leftmargini 38pt
+\leftmarginii 30pt
+\leftmarginiii 20pt
+\leftmarginiv 15pt
+\leftmarginv 15pt
+\leftmarginvi 10pt
+
+\labelsep 10pt
+\tabbingsep \labelsep
+
+\def\@listi{\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\parsep .5\parskip
+\topsep \parsep
+\itemsep\parskip
+\partopsep 0pt}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \parsep .5\parskip
+ \topsep \parsep
+ \itemsep\parskip}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+
+
+
+% PARAGRAPH-FORMATTING ENVIRONMENTS
+% ---------------------------------
+% VERSE
+% \CR ends line
+% Line continuations indented further.
+% Blank line makes new paragraph with \parskip space
+%
+\def\verse{\let\\=\@centercr \list{}{\itemsep\z@
+ \itemindent -15pt\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 15pt}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 20pt\relax\itemindent\listparindent
+ \rightmargin\leftmargin}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% LIST-MAKING ENVIRONMENTS
+% ------------------------
+%
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+%\change{0.2}{26/01/91}{Added {\tt\bsl freelines} and {\tt centerlist}
+% environment}
+% CENTERLIST
+%
+\def\freelines{\@rightskip 0\p@ plus 2em \rightskip\@rightskip}%
+% \leftskip\z@%
+% \parindent\z@%
+% \parfillskip = 0.1\hsize plus 1fil%
+% \parskip\z@}%
+
+\def\centerlist#1#2{\center\minipage[t]{#2}
+\freelines%\leftmargini=0pt
+\csname #1\endcsname
+\def\endcenterlist{\csname end#1\endcsname\endminipage\endcenter}}
+
+\def\vcenter{\null\vfill}
+\def\endvcenter{\vfill\null}
+
+% Theorem environments
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+% Array and tabular environment parameters
+\arraycolsep 8pt
+\tabcolsep 10pt
+\arrayrulewidth .6pt
+\doublerulesep 3pt
+
+% \fbox parameters
+\fboxsep = 5pt
+\fboxrule = .6pt
+
+% Date
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+
+
+
+
+
+
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+
+% Following makes footnotes numbered *, dagger, etc., with numbering
+% begun again on every slide, note, or overlay.
+
+\def\thefootnote{\fnsymbol{footnote}}
+\@addtoreset{footnote}{slide}
+\@addtoreset{footnote}{overlay}
+\@addtoreset{footnote}{note}
+
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.) The resulting rule will appear on all color layers, so
+% it's best not to draw a rule.
+
+\let\footnoterule=\relax
+
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth). The following macro indents
+% all lines of the footnote by 10pt, and indents the first line of
+% a new paragraph by 1em. To change these dimensions, just substitute
+% the desired value for '10pt' [in both places] or '1em'.
+% The mark is flushright against the footnote.
+%
+% It is much easier to write a macro in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. In that case, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\noindent % Macro to make the text of a footnote
+ \hangindent 10pt\hbox
+ to 10pt{\hss $^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text.
+
+
+
+
+
+
+
+
+
+
+\def\theequation{\@arabic{\c@equation}}
+
+% The following stuff isn't used, but needs to be defined.
+\def\@figsep{7pt}
+\def\@textfigsep{5pt}
+\def\@captionskip{6pt}
+\def\topfraction{.7}
+\def\bottomfraction{.3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+
+
+
+
+
+
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\pagenumbering{arabic}
+\onecolumn
+\normalsize
+
+
diff --git a/macros/latex209/contrib/misc/rotate_tex.sty b/macros/latex209/contrib/misc/rotate_tex.sty
new file mode 100644
index 0000000000..771cfa670b
--- /dev/null
+++ b/macros/latex209/contrib/misc/rotate_tex.sty
@@ -0,0 +1,45 @@
+%% Save file as: ROTATE.TEX Source: FILESERV@SHSU.BITNET
+%% NOTE: This file is part of the DVIPS distribution
+%
+% These macros allow you to rotate or flip a \TeX\ box. Very useful for
+% sideways tables or upsidedown answers.
+%
+% To use, create a box containing the information you want to rotate.
+% (An hbox or vbox will do.) Now call \rotr\boxnum to rotate the
+% material and create a new box with the appropriate (flipped) dimensions.
+% \rotr rotates right, \rotl rotates left, \rotu turns upside down, and
+% \rotf flips. These boxes may contain other rotated boxes.
+%
+\newdimen\rotdimen
+\def\vspec#1{\special{ps:#1}}% passes #1 verbatim to the output
+\def\rotstart#1{\vspec{gsave currentpoint currentpoint translate
+ #1 neg exch neg exch translate}}% #1 can be any origin-fixing transformation
+\def\rotfinish{\vspec{currentpoint grestore moveto}}% gets back in synch
+%
+% First, the rotation right. The reference point of the rotated box
+% is the lower right corner of the original box.
+%
+\def\rotr#1{\rotdimen=\ht#1\advance\rotdimen by\dp#1%
+ \hbox to\rotdimen{\hskip\ht#1\vbox to\wd#1{\rotstart{90 rotate}%
+ \box#1\vss}\hss}\rotfinish}
+%
+% Next, the rotation left. The reference point of the rotated box
+% is the upper left corner of the original box.
+%
+\def\rotl#1{\rotdimen=\ht#1\advance\rotdimen by\dp#1%
+ \hbox to\rotdimen{\vbox to\wd#1{\vskip\wd#1\rotstart{270 rotate}%
+ \box#1\vss}\hss}\rotfinish}%
+%
+% Upside down is simple. The reference point of the rotated box
+% is the upper right corner of the original box. (The box's height
+% should be the current font's xheight, \fontdimen5\font,
+% if you want that xheight to be at the baseline after rotation.)
+%
+\def\rotu#1{\rotdimen=\ht#1\advance\rotdimen by\dp#1%
+ \hbox to\wd#1{\hskip\wd#1\vbox to\rotdimen{\vskip\rotdimen
+ \rotstart{-1 dup scale}\box#1\vss}\hss}\rotfinish}%
+%
+% And flipped end for end is pretty ysae too. We retain the baseline.
+%
+\def\rotf#1{\hbox to\wd#1{\hskip\wd#1\rotstart{-1 1 scale}%
+ \box#1\hss}\rotfinish}%
diff --git a/macros/latex209/contrib/misc/rs.sty b/macros/latex209/contrib/misc/rs.sty
new file mode 100644
index 0000000000..ce17e862cb
--- /dev/null
+++ b/macros/latex209/contrib/misc/rs.sty
@@ -0,0 +1,994 @@
+% ===================================================================
+% RS.sty
+% Copyright (C) 1992 Cambridge University Press
+% Version 1.01, 26 January 1993
+% V 0.91 6 Oct 92 JAS.
+% V 0.92 21 Nov 92 JAS.
+% V 0.93 30 Nov 92 JAS.
+% V 0.94 3 Dec 92 Alison Woollatt to include truesize option.
+% V 0.95 3 Dec 92 Alison Woollatt to remove raggedbottom and
+% increase floatpagefraction to 0.9, put letterspacing in author macro,
+% correct proofbox
+% V 1.00 8 Jan 93 Alison Woollatt to correct section headings, equation
+% numbering and referencing in appendices
+% V 1.01 26 Jan 93 Alison Woollatt to include \sect, reduce
+% space in appendix % equation numbering, center running heads
+% V 1.02 26 Apr 93 Jonathan Wainwright to include a selection of
+% AMS symbols from AMSSYMBO.STY (see AMS SYMBOLS) and to change theorem
+% typeface from \it to \sl (see THEOREM)
+%
+% Royal Society: Proceedings document style
+% based on FLM.sty
+% based on ARTICLE DOCUMENT STYLE -- Released 26 April 88
+% for LaTeX version 2.09 by Leslie Lamport
+% ------------------------------------------------------------------
+%
+% INSTRUCTIONS TO EDITOR:
+%
+% Use the following \documentstyle options to select journal
+% for catchline (default = trans):
+% \documentstyle[trans] % Phil. Trans. R. Soc. Lond.
+% \documentstyle[proc] % Proc. R. Soc. Lond.
+%
+% Use the following commands in preamble to control catchline:
+% \series{A} % (the default)
+% \volume{2}
+% \pagerange{0--000}
+% \year{1993}
+%
+% For received date, add the following to end of file after References:
+% \received{Received 9 August 1992; accepted 10 August 1992.}
+%
+% For first paragraph after abstract, insert a \noindent by hand.
+%
+% For Discussion section after References, use \discussion and \comment.
+%
+% The \documentstyle[truesize] option invokes the 10.5/12 font size.
+%
+%======================================================================
+
+\typeout{Document style `Royal Society journal style', V 1.02, 26 April 1993}
+%
+% Journals use two-sided printing.
+%
+\@twosidetrue
+\@mparswitchtrue
+\def\ds@draft{\overfullrule 5pt}
+\def\ds@proc{\gdef\@journal{Proc.\ R.\ Soc.\ Lond.}}
+\def\ds@trans{\gdef\@journal{Phil.\ Trans.\ R.\ Soc.\ Lond.}}
+\def\@journal{Phil.\ Trans.\ R.\ Soc.\ Lond.} % default
+%
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+\let\xvipt\xviipt
+\let\@xvipt\@xviipt
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+\def\@normalsize{\@setsize\normalsize{12pt}\xipt\@xipt% 11 on 12
+ \abovedisplayskip 6.5pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 3pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip}
+\def\small{\@setsize\small{10pt}\ixpt\@ixpt% 9 on 10
+ \abovedisplayskip 6pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 3pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip}
+\def\footnotesize{\@setsize\footnotesize{10pt}\viiipt\@viiipt% 8 on 10
+ \abovedisplayskip 5pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 2pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip}
+\def\indexsize{\@setsize\indexsize{9pt}\viiipt\@viiipt} % 8 on 9
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt} % 7 on 8
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt} % 5 on 6
+\def\large{\@setsize\large{12.5pt}\xipt\@xipt} % 11 on 12.5
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt} % 14 on 18
+\def\LARGE{\@setsize\LARGE{19pt}\xvipt\@xvipt} % 16 on 19
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt} % 20 on 25
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt} % 25 on 30
+%\newfont{\qsmall}{mtr10 scaled 975} % 9.75pt rm, used in quotations
+%\newfont{\qsmall}{Times-Roman at 9.75pt} % 9.75pt rm, used in quotations
+\normalsize
+
+% ****************************************
+% * TRUESIZE *
+% ****************************************
+
+\def\ds@truesize{%
+%
+% define 10.5pt and 16pt
+\font\tenptfiverm = cmr10 at 10.5pt
+\font\tenptfiveit = cmti10 at 10.5pt
+\font\tenptfivemi = cmmi10 at 10.5pt
+ \skewchar\tenptfivemi ='177 % for placement of accents
+\font\tenptfivesy = cmsy10 at 10.5pt
+ \skewchar\tenptfivesy ='60 % for placement of math accents
+\font\tenptfivesl = cmsl10 at 10.5pt
+\font\tenptfivebf = cmbx10 at 10.5pt
+\font\tenptfivett = cmtt10 at 10.5pt
+ \hyphenchar\tenptfivett = -1 % suppress hyphenation in \tt font
+\font\tenptfivesf = cmss10 at 10.5pt
+\font\tenptfively = lasy10 at 10.5pt
+\font\tenptfiveex = cmex10 at 10.5pt
+
+\def\xptv{\textfont\z@\tenptfiverm
+ \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\tenptfivemi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\tenptfivesy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenptfiveex \scriptfont\thr@@\tenptfiveex \scriptscriptfont\thr@@\tenptfiveex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\tenptfivemi
+ \textfont\tw@\tenptfivesy \textfont\lyfam\tenptfively
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{tenptfivemib}{\global\font\tenptfivemib\@mbi
+ \global\font\tenptfivesyb\@mbsy
+ \global\font\tenptfivelyb\@lasyb\relax\@addfontinfo\@xptv
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\tenptfivemib \textfont\tw@\tenptfivesyb
+ \textfont\lyfam\tenptfivelyb \@prtct\@boldtrue}}}{}\@xptv\boldmath}%
+\def\prm{\fam\z@\tenptfiverm}%
+\def\pit{\fam\itfam\tenptfiveit}\textfont\itfam\tenptfiveit \scriptfont\itfam\sevit
+ \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\tenptfivesl}\textfont\slfam\tenptfivesl
+ \scriptfont\slfam\tenptfivesl \scriptscriptfont\slfam\tenptfivesl
+\def\pbf{\fam\bffam\tenptfivebf}\textfont\bffam\tenptfivebf
+ \scriptfont\bffam\tenptfivebf \scriptscriptfont\bffam\tenptfivebf
+\def\ptt{\fam\ttfam\tenptfivett}\textfont\ttfam\tenptfivett
+ \scriptfont\ttfam\tenptfivett \scriptscriptfont\ttfam\tenptfivett
+\def\psf{\fam\sffam\tenptfivesf}\textfont\sffam\tenptfivesf
+ \scriptfont\sffam\tenptfivesf \scriptscriptfont\sffam\tenptfivesf
+\def\psc{\@getfont\psc\scfam\@xptv{\@mcsc}}%
+\def\ly{\fam\lyfam\tenptfively}\textfont\lyfam\tenptfively
+ \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@xptv{}
+
+% sixteen point
+ \font\sxtnrm = cmr10 at 16pt % roman MR(6.3.91)
+%% \font\sxtnmi = mtmi10 at 16pt % math italic
+%% \skewchar\sxtnmi ='177 % for placement of accents
+%\font\sxtnmib = mtmib10 at 16pt % bold math italic
+%% \font\sxtnsy = mtsy10 at 16pt % math symbols
+%% \skewchar\sxtnsy ='60 % for placement of math accents
+%\font\sxtnsyb = mtbsy10 at 16pt % bold symbols
+%\font\sxtnit = mtti10 at 16pt % text italic
+%\font\sxtnsl = mtsl10 at 16pt % slanted
+ \font\sxtnbf = cmbx10 at 16pt % extended bold
+%\font\sxtnbfs = mtbxsl10 at 16pt % extended bold slanted
+%\font\sxtntt = mttt10 at 16pt % typewriter
+%\font\sxtntti = mtitt10 at 16pt % italic typewriter
+%\font\sxtntts = mtsltt10 at 16pt % slanted typewriter
+%\font\sxtnsf = mtss10 at 16pt % sans serif
+%\font\sxtnsfi = mtssi10 at 16pt % italic sans serif
+%\font\sxtnsfb = mtssbx10 at 16pt % bold sans serif
+%\font\sxtnsc = mtcsc10 at 16pt % small caps
+%% \font\sxtnly = lasy10 at 16pt % LaTeX symbols
+%\font\sxtnlyb = lasyb10 at 16pt % bold LaTeX symbols
+%\font\sxtnuit = mtu10 at 16pt % unslanted italic
+
+\def\xvipt{\textfont\z@\sxtnrm
+ \scriptfont\z@\twlrm \scriptscriptfont\z@\tenrm
+%%\textfont\@ne\sxtnmi \scriptfont\@ne\twlmi \scriptscriptfont\@ne\tenmi
+%%\textfont\tw@\sxtnsy \scriptfont\tw@\twlsy \scriptscriptfont\tw@\tensy
+%%\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+%%\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+%% \textfont\@ne\sxtnmi \textfont\tw@\sxtnsy \textfont\lyfam\sxtnly
+%% \@boldfalse}\@boldfalse
+%%\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\sxtnrm}%
+%%\def\pit{\@getfont\pit\itfam\@xvipt{mtti10\@magscale3}}%
+%%\def\psl{\@getfont\psl\slfam\@xvipt{mtsl10\@magscale3}}%
+\def\pbf{\fam\bffam\sxtnbf}\textfont\bffam\sxtnbf
+ \scriptfont\bffam\twlbf \scriptscriptfont\bffam\tenbf
+%%\def\ptt{\@getfont\ptt\ttfam\@xvipt{mttt10\@magscale3}\@nohyphens
+%% \ptt\@xvipt}%
+%%\def\psf{\@getfont\psf\sffam\@xvipt{mtss16}}%
+%%\def\psc{\@getfont\psc\scfam\@xvipt{\@mcsc\@magscale3}}%
+%%\def\ly{\fam\lyfam\sxtnly}\textfont\lyfam\sxtnly
+%% \scriptfont\lyfam\twlly \scriptscriptfont\lyfam\tenly
+\@setstrut \rm}
+
+\def\@xvipt{}
+
+% overwrite sixteenpoint
+\let\xvipt\xvipt
+\let\@xvipt\@xvipt
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xptv\@xptv% 10.5 on 12
+ \abovedisplayskip 6.5pt plus 1pt minus 1pt
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 3pt plus 1pt
+ \belowdisplayshortskip \abovedisplayshortskip}
+} % end of ds@truesize
+
+\@options
+%
+ % ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% SIDE MARGINS:
+\oddsidemargin 2pc
+\evensidemargin 2pc
+\marginparwidth 2.0cm
+\marginparsep 10pt
+
+% VERTICAL SPACING:
+\topmargin 2.5pc
+\headheight 12pt
+\headsep 8pt
+\topskip 12pt
+\footheight 8pt
+\footskip 18pt
+\newskip\halflineskip
+\halflineskip=6pt plus .5pt minus .5pt
+%\newskip\affilskip % used by authors to separate affiliations on title page
+%\affilskip=3pt
+
+% DIMENSION OF TEXT:
+\textheight = 48\baselineskip \advance\textheight by \topskip
+\textwidth 32pc
+\columnsep 10pt
+\columnseprule 0pt
+
+% FOOTNOTES:
+\footnotesep 2pt% % space between footnotes
+\skip\footins 18pt plus 1pt% % space between text and first note
+
+% FLOATS:
+%\def\topfigrule{\vskip\floatsep\hbox{\rule{\textwidth}{.4pt}}\vskip-\floatsep}
+\floatsep 10pt plus 2pt minus 1pt
+\textfloatsep=1.4\floatsep
+\intextsep\floatsep
+\@maxsep 15pt
+\dblfloatsep\floatsep
+\dbltextfloatsep\floatsep
+\@dblmaxsep 15pt
+\@fptop 0pt plus 0fil
+\@fpsep 10pt plus 0fil
+\@fpbot 0pt plus 3fil
+\@dblfptop 0pt plus 0fil
+\@dblfpsep 10pt plus 0fil
+\@dblfpbot 0pt plus 3fil
+\marginparpush 5pt
+
+ % ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip \z@ plus .3pt
+\parindent 1em
+\partopsep 0pt plus 1pt
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+\clubpenalty=0
+\widowpenalty=10000
+
+ % ****************************************
+% * PARTS *
+% ****************************************
+%
+\def\part{\par \addvspace{4ex}\@afterindentfalse
+ \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{part}
+ \addcontentsline{toc}{part}{Part \thepart: #1}
+ \else \addcontentsline{toc}{part}{#1}
+ \fi
+ {\parindent 0pt \centering %changed ggw
+ \ifnum \c@secnumdepth >\m@ne
+ \large\rm PART
+ \ifcase\thepart \or ONE \or TWO \or THREE \or FOUR \or FIVE
+ \or SIX \or SEVEN \or EIGHT \or NINE \or TEN \else \fi
+ \par \nobreak
+ \fi
+ \LARGE \rm #2 \markboth{}{}\par }
+ \nobreak \vskip 3ex \@afterheading}
+\def\@spart#1{{\parindent 0pt \centering % changed ggw
+ \LARGE \rm #1\par}
+ \nobreak \vskip 3ex \@afterheading}
+
+ % ****************************************
+% * SECTIONS *
+% ****************************************
+%
+\def\section{\setcounter{equation}{0}
+ \@startsection {section}{1}{\z@}
+ {19pt plus 2pt minus 1pt}% beforeskip; neg = suppress indent
+ {6pt plus .5pt minus .3pt}% afterskip
+ {\centering\large\bf}}% style
+\def\subsection{\@startsection{subsection}{2}{\z@}
+ {9pt plus 1pt minus 1pt}
+ {3pt plus .1pt minus .1pt}
+ {\centering\normalsize\it}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+ {9pt plus 1pt minus 1pt}
+ {3pt plus .1pt minus .1pt}
+ {\raggedright\normalsize\it}}
+\def\paragraph{}
+\def\subparagraph{}
+%
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \def\@svsec{}%
+ \else
+ \refstepcounter{#1}
+ \ifnum #2=1
+ \edef\@svsec{\ifappendix Appendix \fi\csname the#1\endcsname.\hskip 0.5em}
+ \fi
+ \ifnum #2=2
+ \edef\@svsec{{\rm(}\csname the#1\endcsname{\rm)}\hskip 0.5em}
+ \fi
+ \ifnum #2=3
+ \edef\@svsec{{\rm(\csname the#1\endcsname)}\hskip 0.5em}
+ \fi
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \ifnum #2=1% sections only
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \ifappendix\protect\hskip\@tempdima Appendix~\csname the#1\endcsname.\ \ #7%
+ \else \protect\numberline{\csname the#1\endcsname.}#7\fi\fi}
+% \protect\numberline{\csname the#1\endcsname.}\ifappendix\else #7\fi\fi}
+ \else
+ \addcontentsline{toc}{#1}{\ifnum #2>2 \else
+ \protect\numberline{{\rm(}{\it\csname the#1\endcsname}{\rm)}}#7\fi}
+ \fi
+ \else %
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname {#7}
+ \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname.}\fi#7}
+ }%
+ \fi
+ \@xsect{#5}}
+
+\newif\ifappendix \appendixfalse
+\def\appendix{\par
+ \setcounter{section}{0}
+ \def\thesection{\Alph{section}}
+ \def\thesubsection{\alph{subsection}}
+ \def\thesubsubsection{\roman{subsubsection}}
+ \def\theequation{{\rm \thesection}\ls\arabic{equation}}
+ \appendixtrue}
+
+\setcounter{secnumdepth}{3} % number sections, subsections and subsubsections
+ % but not paragraphs or subparagraphs.
+
+ % ****************************************
+% * PART & SECTION NUMBERS *
+% ****************************************
+%
+% from home:
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+%\newcounter {subparagraph}[paragraph]
+\def\thepart {\arabic{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\alph{subsection}}
+\def\thesubsubsection {\roman{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+%\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+ % ****************************************
+% * SKIPS *
+% ****************************************
+%
+\newskip\@indentskip
+\newskip\smallindent
+\newskip\@footindent
+\newskip\@leftskip
+\@indentskip=2.5em
+\smallindent=1em
+\@footindent=\smallindent
+\@leftskip=\z@
+
+ % ****************************************
+% * LISTS *
+% ****************************************
+%
+\leftmargini\z@
+\labelsep\z@
+\labelwidth\z@
+%
+%\def\makeitemlabel#1{\hspace\labelwidth\hspace\labelsep\hfill #1}
+\def\makeitemlabel#1{\hfill #1}
+%
+% set leftmargin to labelwidth + labelsep of OUTER list:
+\def\@listI{\parsep\z@ \topsep\z@ \partopsep\z@ \itemsep\z@ \rightmargin\z@
+ \leftmargin\labelwidth \advance\leftmargin\labelsep}
+\def\@listi{\@listI \leftmargin\leftmargini \itemindent 1em}
+\def\@listii{\@listI \advance\leftmargin 1em}
+\def\@listiii{\@listI}
+\def\@listiv{\@listI}
+\def\@listv{\@listI}
+\def\@listvi{\@listI}
+\@listi
+%
+% ITEMIZE
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep
+ \else \advance\@itemdepth \@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \list{\csname\@itemitem\endcsname}%
+ {\labelsep .5em \settowidth{\labelwidth}{\csname\@itemitem\endcsname}
+ \let\makelabel\makeitemlabel}%
+ \fi}
+\def\labelitemi{$\bullet$} % ggw
+\def\labelitemii{$\circ$}
+\def\labelitemiii{---} % ggw
+\def\labelitemiv{--} % ggw
+%
+% ENUMERATE
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep
+ \else \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\fi
+ \@ifnextchar [{\@enumeratetwo}{\@enumeratetwo[i]}}
+\def\@enumeratetwo[#1]{%
+ \list{\csname label\@enumctr\endcsname}%
+ {\settowidth\labelwidth{#1} \labelsep .5em
+ \advance\itemindent\labelsep \advance\itemindent\labelwidth
+ \usecounter{\@enumctr}}}
+%
+\def\labelenumi{(\theenumi)}
+\def\theenumi{\roman{enumi}}
+\def\labelenumii{({\it\theenumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi.\theenumii}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\p@enumii.\theenumiii}
+\def\labelenumiv{\theenumiv}
+\def\theenumiv{\roman{enumiv}}
+\def\p@enumiv{\p@enumiii.\theenumiv}
+%
+% DESCRIPTION
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@%\itemindent-\leftmargin
+ \ifnum\@listdepth=1\else\advance\leftmargin 1em\fi
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+%
+%
+ % ****************************************
+% * DISPLAYED TEXT *
+% ****************************************
+%
+% VERSE
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@
+ \itemindent -\@indentskip
+ \listparindent \itemindent
+ \rightmargin\leftmargin
+ \advance\leftmargin \@indentskip}\item[]}
+\let\endverse\endlist
+%
+% QUOTATION
+\def\quotation{\list{}{\listparindent\smallindent
+ \itemindent\listparindent
+ \leftmargin 1em\rightmargin\leftmargin
+ \topsep\halflineskip
+ \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+%
+% QUOTE
+\let\quote\quotation
+%\def\quote{\par\list{}{\leftmargin\z@\rightmargin\leftmargin}\item[]%
+% \small\rule{0pt}{10pt}\ignorespaces}
+\let\endquote=\endlist
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+% THEOREM
+% The following modifies two internal routines called by Latex's
+% \newtheorem command, which RS.sty users are encouraged to use
+% for their own purposes, such as creating Lemma 1.2, etc.
+%
+\newenvironment{definition}{\par\addvspace{\halflineskip}
+\refstepcounter{theorem}{\it Definition~\thetheorem}.\hskip.5em\ignorespaces}%
+{\vskip\halflineskip\par}
+%
+\def\@begintheorem#1#2{\par\addvspace{\halflineskip}{\bf #1\ #2.}\hskip.5em\sl}
+\def\@opargbegintheorem#1#2#3{\par\vskip\halflineskip
+ {\bf #1\ #2.\ {\rm (#3)}.}\hskip.5em\sl}
+\def\@endtheorem{\vskip\halflineskip\par}
+%
+% PROOF
+\newsavebox{\proofbox}
+\sbox{\proofbox}{\rule{7pt}{7pt}}
+%\def\proof{\list{}{\topsep\halflineskip \labelwidth\z@ \labelsep .5em
+% \let\makelabel\makeitemlabel} \item[{\it Proof.}]}
+%\def\endproof{\hspace*{\fill}\usebox{\proofbox}\endlist}
+\def\proof{\par\addvspace{\halflineskip} {\it Proof.}\hskip.5em\ignorespaces}
+\def\endproof{\hspace*{\fill}\usebox{\proofbox}\vskip\halflineskip\par}
+\@namedef{proof*}{\proof}
+\@namedef{endproof*}{\vskip\halflineskip\par}
+%
+% REMARK works like \newtheorem but without the ability to number,and
+% produces displayed paragraph in same style as proof.
+\def\newremark#1#2{\newenvironment{#1}{%
+ \list{}{\topsep\halflineskip \labelwidth\z@
+ \labelsep .5em\let\makelabel\makeitemlabel} \item[{\it #2.}]}{\endlist}}
+%
+% EQUATION and EQNARRAY
+%
+\def\theequation{\thesection.\arabic{equation}}
+%
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+% \def\@eqnnum{(\theequation)} % (the default in LaTeX)
+%
+% The following substitution causes \eqnarray to give same spacing
+% around =,>,<, etc. as in one-line equation.
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+$$\halign to \displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+% \hskip 2\arraycolsep \hfil${##}$\hfil
+ \hfil${\;##\;}$\hfil
+% &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+%
+% TITLEPAGE
+%
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt
+\tabcolsep 3pt % this is half the space between cols. in a tabular env. ggw
+\arrayrulewidth .5pt
+\doublerulesep 1.5pt
+\tabbingsep \labelsep
+%\skip\@mpfootins = \skip\footins
+\skip\@mpfootins = 0pt
+\fboxsep = 3pt
+\fboxrule = .5pt
+
+ % ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+\def\affiliation#1{\gdef\@affiliation{#1}}
+\gdef\@affiliation{}
+
+\def\maketitle{\appendixfalse\@ifnextchar [{\m@ketitleone}{\m@ketitletwo}}%
+\def\m@ketitletwo{\m@ketitleone[n]}
+\def\m@ketitleone[#1]{
+ \par
+ \begingroup
+% no changes to footnoting necessary; keep at bottom of page -- jas
+% \def\thefootnote{\fnsymbol{footnote}}
+% \def\@makefnmark{\hbox to 0pt{${\@thefnmark}$\hss}}% fnmark now on line -- ggw
+ \newpage \global\@topnum\z@
+ \@maketitle{#1}\thispagestyle{titlepage} \@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax \let\@maketitle\relax \gdef\@affiliation{}
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+%\def\and{{\small\bf AND}\ } % not needed for Roy.Soc.
+
+\def\@maketitle#1{
+ \newpage
+ \vspace*{10pt}
+ {\centering \sloppy
+ {\LARGE\bf \@title \par}
+ \vskip 16pt plus 2pt minus 1pt
+ {\sc B\ls y\ls\ \@author \par}
+ \vskip 3pt plus 1pt
+ {\it \@affiliation \par}
+ \par}
+ \vskip 20pt plus 2pt minus 1pt
+}
+
+\def\abstract{\par\normalsize\noindent\ignorespaces}
+\def\endabstract{\par\vskip 9pt plus 1pt minus 1pt
+ \vbox{\centerline{\rule[4pt]{30pc}{.4pt}}}\vskip 9pt plus 1pt minus 1pt\par}
+
+ % ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+\mark{{}{}}
+\gdef\@author{\mbox{}}
+\def\author{\@ifnextchar [{\@authortwo}{\@authorone}}
+% make \and a simple 'and' for \@shortauthor
+\def\@authortwo[#1]#2{\gdef\@author{#2}\gdef\@shortauthor{#1}}
+\def\@authorone#1{\gdef\@author{#1}
+ \begingroup\def\and{and}\gdef\@shortauthor{#1}\endgroup}
+\def\shortauthor#1{\gdef\@shortauthor{#1}}
+\gdef\@shortauthor{}
+\gdef\@title{\mbox{}} % SFB 0.96
+\def\title{\@ifnextchar [{\@titletwo}{\@titleone}}
+\def\@titletwo[#1]#2{\gdef\@title{#2}\gdef\@shorttitle{#1}}
+\def\@titleone#1{\gdef\@title{#1}\gdef\@shorttitle{#1}}
+\def\shorttitle#1{\gdef\@shorttitle{#1}}
+\gdef\@shorttitle{}
+%
+\def\series#1{\gdef\@series{#1}}
+\gdef\@series{A}
+\def\year#1{\gdef\@year{#1}}
+\gdef\@year{1993}
+\def\volume#1{\gdef\@volume{#1}}
+\gdef\@volume{11}
+\def\pagerange#1{\gdef\@pagerange{#1}}
+\gdef\@pagerange{1--000}
+\newsavebox{\RSfootbox}
+\sbox{\RSfootbox}{\footnotesize{\it\@journal}\ \rm\@series\ (\@year)}
+\def\ps@headings{\let\@mkboth\markboth
+ \def\@oddhead{\phantom{\rm \thepage}\hfil\it \@shorttitle \hfil\rm \thepage}
+ \def\@oddfoot{\usebox{\RSfootbox}\hfil}
+ \def\@evenhead{\rm \thepage \hfil \it \@shortauthor \hfil\phantom{\rm \thepage}}
+ \def\@evenfoot{\@oddfoot}
+ \def\sectionmark##1{\markboth{##1}{}}
+ \def\subsectionmark##1{\markright{##1}}}
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\it \rightmark \hfill \rm \thepage}
+ \def\@oddfoot{}
+ \def\@evenhead{\it \leftmark \hfill \rm \thepage}
+ \def\@evenfoot{}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+\def\ps@titlepage{\let\@mkboth\@gobbletwo
+ \def\@oddfoot{\raisebox{0pt}[8pt][0pt]{%
+ \parbox[t]{\textwidth}{\footnotesize\usebox{\RSfootbox} {\bf\@volume},
+ {\rm \@pagerange} \hfill {\rm\copyright\ \@year\ The Royal
+ Society}\\[2pt] \makebox[0pt][l]{\it Printed in Great Britain} \hfil
+ {\small\rm\thepage} \hfil}}}
+ \def\@oddhead{}\def\@evenhead{}\let\@evenfoot\@oddfoot
+ \def\sectionmark##1{}\def\subsectionmark##1{}}
+
+ % ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{2}
+%\@undottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+\def\@undottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth
+ \else
+ \vskip \z@ plus .2pt
+ {\hangindent #2\relax
+ \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax \@afterindenttrue
+ \interlinepenalty\@M \leavevmode
+ \@tempdima #3\relax {\rm #4}\nobreak \hfill \nobreak
+ \hbox to\@pnumwidth{\hfil\rm #5}\par}\fi} % page number added -- ggw
+\def\tableofcontents{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \vskip 4pt plus .5pt
+ \centerline{\large\bf Contents} \mbox{}\hfill {\sc page}
+ \vskip 2pt
+ \@starttoc{toc}
+ \if@restonecol\twocolumn\fi \par\vspace{12pt}}
+%
+\def\l@section#1#2{\addpenalty{\@secpenalty}
+ \@tempdima 1.5em
+ \begingroup
+ \parindent\z@ \rightskip\@pnumwidth \parfillskip -\@pnumwidth
+ \rm\leavevmode \advance\leftskip\@tempdima
+ \hskip-\leftskip {#1}\nobreak\hfil
+ \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@subsection{\@undottedtocline{2}{1.5em}{1.6em}}
+\def\l@subsubsection{\@undottedtocline{3}{3.8em}{3.2em}}
+%
+% The following are irrelevant for RS -- jas
+% \def\l@paragraph{\@undottedtocline{4}{7.0em}{4.1em}}
+% \def\l@subparagraph{\@undottedtocline{5}{10em}{5em}}
+% \def\listoffigures{\@restonecolfalse
+% \if@twocolumn\@restonecoltrue\onecolumn\fi
+% \section*{List of Figures}% altered -- ggw
+% \@starttoc{lof} \if@restonecol\twocolumn\fi}
+% \def\l@figure{\@undottedtocline{1}{1.5em}{2.3em}}
+% \def\listoftables{\@restonecolfalse
+% \if@twocolumn\@restonecoltrue\onecolumn\fi
+% \section*{List of Tables}% altered -- ggw
+% \@starttoc{lot} \if@restonecol\twocolumn\fi}
+% \let\l@table\l@figure
+
+ % ****************************************
+% * THE INDEX *
+% ****************************************
+%
+\newif\if@restonecol
+\def\theindex{\section*{Index} % changed to U&LC -- ggw
+ \addcontentsline{toc}{section}{Index}
+ \footnotesize \parindent\z@ \parskip\z@ plus .1pt\relax
+ \let\item\@idxitem}
+\def\@idxitem{\par\hangindent 1em}
+\def\subitem {\par\hangindent 1em \hspace*{1em}}
+\def\subsubitem{\par\hangindent 1em\hspace*{1em}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par\vskip\baselineskip \relax}
+
+ % ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+%\def\footnoterule{}
+\def\footnoterule{\setcounter{footnote}{0}}% To force numbering to start
+% at 1 on each page. Works because numbers are
+% assigned at occurrence of the \footnote{} command; this
+% resets counter after they are printed. This might not work
+% if next footnote falls close enough to page break to have
+% already been 'digested'. --jas
+\def\@makefntext#1{\hskip1em\@thefnmark\hskip.5em\ignorespaces #1}
+\def\@fnsymbol#1{\ifcase#1\or \dag\or \ddag\or \P\or \|\or
+ \dag\dag\or \ddag\ddag\or \P\P\or \|\| \else\@ctrerr\fi\relax}
+% \@makefnmark : A macro to generate the footnote marker from \@thefnmark
+% The default is \hbox{$^\@thefnmark$}, i.e., raised.
+\def\@makefnmark{\hbox{\@thefnmark}}% used in text
+\def\thempfootnote{\hbox{$^\alph{mpfootnote}$}}% have to change this because we
+ %do want minipage footnote marks to be raised (since they are
+ %alphabetic and not symbols).
+
+ % ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+\setcounter{topnumber}{3}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{0}
+\def\bottomfraction{.9}
+\setcounter{totalnumber}{3}
+\def\textfraction{.1}
+\def\floatpagefraction{.9}
+\setcounter{dbltopnumber}{3}
+\def\dbltopfraction{.9}
+\def\dblfloatpagefraction{.5}
+%
+\long\def\@makecaption#1#2{\vskip3pt\begingroup\small
+ \setbox\@tempboxa\hbox{{\rm #1.} \fcap@type #2}
+ \ifdim \wd\@tempboxa >2\hsize \parbox{\textwidth}{\unhbox\@tempboxa}
+ \else {\centering \unhbox\@tempboxa\par} \fi \endgroup\vskip3pt}
+%
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tp}
+\def\ftype@table{1}
+\def\ext@table{lot}
+\def\fnum@table{Table~\thetable}
+%\def\table{\@float{table}\rule[4pt]{\textwidth}{.4pt} \vskip\floatsep}
+\def\table{\let\fcap@type\it \@float{table}\small}
+\def\plaintable{\@float{table}}
+\let\endplaintable\end@float
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+\def\fstyle@table{\small\rm}
+\def\fjust@table{\centering}%changed ggw
+\def\fcapjust@table{\centering} %changed ggw
+\def\fcapsize@table{\small\rm}
+\def\fcapstyle@table{\small\it}
+%
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tp}
+\def\ftype@figure{2}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure~\thefigure}
+\def\figure{\let\fcap@type\rm \@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\def\fstyle@figure{\small\rm}
+\def\fjust@figure{\centering}
+\def\fcapjust@figure{\centering}% changed ggw
+\def\fcapsize@figure{\small\rm}
+\def\fcapstyle@figure{\small\rm}
+\newif\ifwide@float
+\wide@floatfalse
+%
+%\@caption{TYPE}[STEXT]{TEXT}
+\def\@dblfloat{\wide@floattrue\@float}
+\def\end@dblfloat{\if@twocolumn\egroup
+ \ifnum\@floatpenalty <\z@ \@cons\@dbldeferlist\@currbox\fi
+ \ifnum \@floatpenalty =-\@Mii \@esphack\fi\else\end@float\fi
+ \wide@floatfalse}
+
+%this is to preserve the old tabular environment in case it is needed
+\let \oldtabular \tabular
+\let \endoldtabular \endtabular
+
+\def\tabular{\def\@halignto{to \textwidth}\tabskip=\tabcolsep plus 1fil\@tabular}
+% This fixes tabular things so that they are full out l and r; the \tabskip setting
+% is to put tabskip before the first column.
+% The following is to adjust the intercolumn spacing to put in
+% enough stretch. ggw
+\def\@tabarray{\@ifnextchar[{\@tarray}{\@ttarray}}
+\def\@tarray[#1]#2{\t@barray[#1]{@{\tabskip=2\tabcolsep plus 3pt}
+ #2}}
+\def\@ttarray#1{\t@barray[c]{@{\tabskip=2\tabcolsep plus 3pt}
+ #1 }}
+\def\t@barray[#1]#2{\setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}\@mkpream{#2}\edef\@preamble{\halign \noexpand\@halignto
+\bgroup \tabskip\z@ \@arstrut \@preamble \tabskip=\tabcolsep plus 1fil \cr}%
+\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup \let\par\relax
+ \let\@sharp##\let\protect\relax \lineskip\z@\baselineskip\z@\@preamble}
+
+ % ****************************************
+% * CUP specials *
+% ****************************************
+%
+\def\ls{\kern.15em} % for letterspacing; .15em is a hair less than thinspace
+\renewcommand{\thefootnote}{\mbox{$\fnsymbol{footnote}$}}
+\def\sect#1{\hbox{\S\ls{#1}}} % for a section mark
+\def\hline{\noalign{\ifnum0=`}\fi \vskip 6pt
+ \hrule \@height \arrayrulewidth \vskip 6pt
+ \futurelet \@tempa\@xhline}
+\def\@xhline{\ifx\@tempa\hline \vskip -12pt
+ \vskip \doublerulesep \fi \ifnum0=`{\fi}}
+\newenvironment{acknowledgments}{
+ \par\addvspace{\halflineskip}\noindent\small\ignorespaces}{\par}
+\def\discussion{\par\addvspace{22pt plus 1pt minus 1pt}
+ \centerline{{\it Discussion}} \vskip4pt}
+\def\comment{\par\addvspace{12pt}\noindent\ignorespaces}
+\def\received#1{\par\addvspace{\halflineskip}\centerline{\footnotesize\it #1}}
+ % ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+\def\today{\number\day\ \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December
+ \fi \ \year}
+
+ % ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+% the immediately following code is taken from MSCS.sty, somewhat modified.
+\def\@biblabel#1{#1}
+\def\thebibliography#1{\par\section*{References}
+ \addcontentsline{toc}{section}{\hskip\@tempdima References}
+ \list{}{\labelwidth\z@ \leftmargin 1em \itemindent -1em \itemsep 1pt}
+ \small \parindent\z@
+%\parskip\z@ plus .1pt\relax
+ \parskip 1.5pt plus .1pt\relax
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+%
+% The following code is taken from authordate.sty, by David Rhead, of
+% the Cripps Computing Centre (February 1990), with some modifications
+% by ggw. It is intended for documents
+% that use the author-date citation system. When used in conjunction with
+% authordate1.bst, ... , authordate4.bst, it allows citations of the
+% form \shortcite{bloggs-60} as well as the usual \cite{bloggs-60}.
+% When
+% ... \cite{bloggs-60} ... \shortcite{bloggs-60} ...
+% appears in the input file,
+% ... (Bloggs, 1960) ... (1960) ...
+% appears in the final document.
+%
+% Code taken from apalike.sty.
+%
+\def\@cite#1#2{(#1\if@tempswa , #2\fi)}
+\def\@biblabel#1{}
+
+% Set length of hanging indentation for bibliography entries
+%
+\newlength{\bibhang}
+\setlength{\bibhang}{1em}
+
+% Define default title and page-head text.
+%
+\def\bibtitle{References}
+\def\bibheadtitle{REFERENCES}
+
+% Code taken from aaai.sty.
+%
+% don't box citations, add space between multiple citations, separate with ;
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{; }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+{\csname b@\@citeb\endcsname}}}{#1}}
+% Allow short (name-less) citations, when used in
+% conjunction with a bibliography style that creates labels like
+% \citename{<names>, }<year>
+\let\@internalcite\cite
+\def\cite{\def\citename##1{##1}\@internalcite}
+\def\shortcite{\def\citename##1{}\@internalcite}
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+\ps@headings
+\pagenumbering{arabic}
+\onecolumn \let\onecolumn=\relax
+\def\twocolumn{\typeout{Two column mode not available with RS style.}}
+\flushbottom
+\frenchspacing
+\def\>{\kern .1em}
+\def\bm #1{\mbox{\boldmath $#1$}}
+\def\smfr #1#2{{\textstyle\frac{#1}{#2}}}
+\def\shove{\hskip10000pt minus 1fil}
+%
+% *************************************
+% ********** AMS SYMBOLS ************
+% *************************************
+%
+\font\tenmsx=msxm10 scaled \magstep1
+\font\sevenmsx=msxm8
+\font\fivemsx=msxm6
+\font\tenmsy=msym10 scaled \magstep1
+\font\sevenmsy=msym8
+\font\fivemsy=msym6
+
+\newfam\msxfam
+\newfam\msyfam
+\textfont\msxfam=\tenmsx \scriptfont\msxfam=\sevenmsx
+ \scriptscriptfont\msxfam=\fivemsx
+\textfont\msyfam=\tenmsy \scriptfont\msyfam=\sevenmsy
+ \scriptscriptfont\msyfam=\fivemsy
+
+\def\hexnumber@#1{\ifnum#1<10 \number#1\else
+ \ifnum#1=10 A\else\ifnum#1=11 B\else\ifnum#1=12 C\else
+ \ifnum#1=13 D\else\ifnum#1=14 E\else\ifnum#1=15 F\fi\fi\fi\fi\fi\fi\fi}
+
+\def\msx@{\hexnumber@\msxfam}
+\def\msy@{\hexnumber@\msyfam}
+\mathchardef\boxdot="2\msx@00
+\mathchardef\boxplus="2\msx@01
+\mathchardef\boxtimes="2\msx@02
+\mathchardef\square="0\msx@03
+\mathchardef\blacksquare="0\msx@04
+\mathchardef\lozenge="0\msx@06
+\mathchardef\blacklozenge="0\msx@07
+\mathchardef\boxminus="2\msx@0C
+\mathchardef\geqslant="3\msx@3E
+\mathchardef\leqslant="3\msx@36
+\mathchardef\vartriangleright="3\msx@42
+\mathchardef\vartriangleleft="3\msx@43
+\mathchardef\blacktriangledown="0\msx@48
+\mathchardef\blacktriangleright="3\msx@49
+\mathchardef\blacktriangleleft="3\msx@4A
+\mathchardef\blacktriangle="0\msx@4E
+\mathchardef\triangledown="0\msx@4F
+\mathchardef\hslash="0\msy@7D
+%
+% Redefine two relation symbols \leq and \geq
+%
+\def\leq{\leqslant}
+\def\geq{\geqslant}
+%
+% Newcommands defining shapes
+%
+\newcommand{\triright}{\vartriangleright}
+\newcommand{\trileft}{\vartriangleleft}
+\newcommand{\btridown}{\blacktriangledown}
+\newcommand{\btriright}{\blacktriangleright}
+\newcommand{\btrileft}{\blacktriangleleft}
+\newcommand{\btriup}{\blacktriangle}
+\newcommand{\triup}{\bigtriangleup}
+\newcommand{\tridown}{\triangledown}
+\newcommand{\bsquare}{\blacksquare}
+\newcommand{\blozenge}{\blacklozenge}
diff --git a/macros/latex209/contrib/misc/rssconf.sty b/macros/latex209/contrib/misc/rssconf.sty
new file mode 100644
index 0000000000..cbf4c50db8
--- /dev/null
+++ b/macros/latex209/contrib/misc/rssconf.sty
@@ -0,0 +1,31 @@
+% --------------------------------------------------------------------------
+% R S S C O N F -- style option for RSS Conference proceedings
+% --------------------------------------------------------------------------
+% Version 1.00--0 Adrian F Clark <alien@uk.ac.essex> 22-Jun-1993
+% --------------------------------------------------------------------------
+
+\typeout{RSS Conference Proceedings style v1.00--0 22-Jun-1993}
+
+
+% Page dimensions.
+
+\parindent 15pt % paragraph indent
+\parskip 0pt plus 1pt minus 1pt % paragraph skip
+
+\textheight 252mm % height of text on a page
+\textwidth 164mm % total width of a page
+\oddsidemargin 5mm % shift the page rightwards
+\evensidemargin 5mm % shift the page rightwards
+\topmargin -7mm % shift the page upwards
+\headheight 0pt % no running heads...
+\headsep 0pt % ...so no separation from text
+\marginparwidth 48pt % don't use marginal notes...
+\marginparsep 10pt % ...in conference proceedings
+
+
+\def\abstract{\section*{Abstract}}
+\def\endabstract{\par}
+
+\pagestyle{empty} % no page numbers
+
+% End of rssconf.sty.
diff --git a/macros/latex209/contrib/misc/sc21-wg1.sty b/macros/latex209/contrib/misc/sc21-wg1.sty
new file mode 100644
index 0000000000..c52003945d
--- /dev/null
+++ b/macros/latex209/contrib/misc/sc21-wg1.sty
@@ -0,0 +1,64 @@
+% ISO/TC97/SC21 DOCUMENT-STYPE OPTION - Wed May 20 17:07:56 BST 1987
+%
+% derived from
+%
+% TITLEPAGE DOCUMENT-STYLE OPTION - released 27 January 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+% This style option produces a cover page appropriate for
+% ISO/TC97/SC21 documents.
+%
+% In addition to the normal \title, \author (will give rise to the
+% source of the document) and \date commands, three further values
+% should be set. These are:
+%
+% \nnumber{NNN}
+% The N Number of the document. Put something like \nnumber{\sl XXXX},
+% if you are not sure of the number.
+%
+% \project{Project Reference}
+% The project reference for the document. For example,
+% \project{97.21.23} or \project{97.21.9 Q45}
+%
+% \status{Document Status}
+% For example \status{UK Position} or \status{UK Expert Contribution}
+
+\def\nnumber#1{\def\@nnumber{{#1}}} \nnumber{\em NNNN}
+\def\project#1{\def\@project{{#1}}} \project{\em 97.21.NN}
+\def\status#1{\def\@status{{#1}}} \status{\em status unset}
+
+\def\maketitle{\begin{titlepage}
+ \setcounter{page}{0}
+ \begin{flushright}
+ \shortstack[l]{ ISO/TC 97/SC 21 N {\LARGE \bf \@nnumber} \\
+ {\sl Project: \@status} \\
+ Date: \@date}
+ \end{flushright}
+ \vfil
+ \begin{center}
+ {\LARGE I S O } \\[3ex]
+ {\Large \sc International Organisation for Standardisation } \\[2ex]
+ {\Large \sc Organisation Internationale de Normalisation } \\[5ex]
+ \fbox{
+ \shortstack{
+ {\Huge ISO/TC 97/SC 21} \\[1ex]
+ {\Huge WG 1} \\[2ex]
+ {\LARGE OSI --- Architecture}
+ }
+ }
+ \end{center}
+ \vskip 70pt % To adjust centering.
+ \begin{Large}
+ \begin{description}
+ \item[TITLE:] \@title
+ \item[SOURCE:] \@author
+ \item[DATE:] \@date
+ \item[PROJECT:] \@project
+ \item[STATUS:] \@status
+ \end{description}
+ \end{Large}
+ \vfil
+\null
+\end{titlepage}
+}
diff --git a/macros/latex209/contrib/misc/sc21.sty b/macros/latex209/contrib/misc/sc21.sty
new file mode 100644
index 0000000000..41f7206f1f
--- /dev/null
+++ b/macros/latex209/contrib/misc/sc21.sty
@@ -0,0 +1,65 @@
+% ISO/TC97/SC21 DOCUMENT-STYPE OPTION - Wed May 20 17:07:56 BST 1987
+%
+% derived from
+%
+% TITLEPAGE DOCUMENT-STYLE OPTION - released 27 January 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+% This style option produces a cover page appropriate for
+% ISO/TC97/SC21 documents.
+%
+% In addition to the normal \title, \author (will give rise to the
+% source of the document) and \date commands, three further values
+% should be set. These are:
+%
+% \nnumber{NNN}
+% The N Number of the document. Put something like \nnumber{\sl XXXX},
+% if you are not sure of the number.
+%
+% \project{Project Reference}
+% The project reference for the document. For example,
+% \project{97.21.23} or \project{97.21.9 Q45}
+%
+% \status{Document Status}
+% For example \status{UK Position} or \status{UK Expert Contribution}
+
+\def\nnumber#1{\def\@nnumber{{#1}}} \nnumber{\em NNNN}
+\def\project#1{\def\@project{{#1}}} \project{\em 97.21.NN}
+\def\status#1{\def\@status{{#1}}} \status{\em status unset}
+
+\def\maketitle{\begin{titlepage}
+ \setcounter{page}{0}
+ \begin{flushright}
+ \shortstack[l]{ ISO/TC 97/SC 21 N {\bf \LARGE \@nnumber} \\
+ {\sl Project: \@status} \\
+ Date: \@date}
+ \end{flushright}
+ \vfil
+ \begin{center}
+ {\LARGE I S O } \\[3ex]
+ {\Large \sc International Organisation for Standardisation } \\[2ex]
+ {\Large \sc Organisation Internationale de Normalisation } \\[5ex]
+ \fbox{
+ \shortstack{
+ {\LARGE ISO/TC 97/SC 21} \\[2ex]
+ {\Large \sc Information Retrieval, Transfer } \\
+ {\Large and Management for OSI } \\[2ex]
+ {\large Secretariat: USA (ANSI)}
+ }
+ }
+ \end{center}
+ \vskip 70pt % To adjust centering.
+ \begin{Large}
+ \begin{description}
+ \item[TITLE:] \@title
+ \item[SOURCE:] \@author
+ \item[DATE:] \@date
+ \item[PROJECT:] \@project
+ \item[STATUS:] \@status
+ \end{description}
+ \end{Large}
+ \vfil
+\null
+\end{titlepage}
+}
diff --git a/macros/latex209/contrib/misc/schedule.sty b/macros/latex209/contrib/misc/schedule.sty
new file mode 100644
index 0000000000..63f14d0850
--- /dev/null
+++ b/macros/latex209/contrib/misc/schedule.sty
@@ -0,0 +1,484 @@
+%% File: schedule.doc
+%% Author: Frank Pfenning (fp@cs.cmu.edu)
+%%
+%% Defines macros to draw a schedule.
+%%
+%
+% The schedule file should have the following format
+% (main style and other options depending on your use):
+%
+% \documentstyle[...,schedule,...]{...}
+%
+% \begin{document}
+% ...
+%
+% \begin{schedule}
+% \c d h:mm-h:mm event, more;[righttop][rightbot]
+% ...
+% \end{schedule}
+%
+% ...
+% \end{document}
+%
+% where d is the day, one of M T W H F S U (upper case only!).
+% h is the hour. Everything < 8 is assumed to be pm, but you
+% maybe explicit and use the 24 hour clock.
+% mm are the minutes.
+% event is what will be put into the box for the specified
+% time slot. \\ starts a new line.
+% more (optional) is another line in the box for the event.
+% It will be separated from the event by some extra space.
+% righttop (optional) is text which is placed in the
+% top right corner of the box (in small type).
+% rightbot (optional) like righttop, put at the bottom
+% right corner of the box.
+%
+% NOTES: - The spaces after the day and the time as well as the semi-colon
+% at the end of the line (before optional arguments) are necessary!
+%
+% - Do not use footnotes in schedule items - they wont appear
+% on the page.
+%
+% - For events without duration (beginning time = end time) the `room'
+% entry will appear below the line, the `event' entry above the line.
+%
+% - For short events the type may be too large. Here you may leave out
+% event and room and merely specify `[righttop]' and `[rightbot]',
+% which will appear in small print. For example:
+% \c T 3:30-3:45 ;[See Rick][Short Meeting]
+%
+% - The events do not need to appear in chronological order. This
+% allows you to have a file with all regular events and include it in a
+% schedule for a particular week with
+% \input{filename}
+% anywhere between \begin{schedule} and \end{schedule}.
+%
+% - Sometimes your will get spurious overfull \vbox or \hbox
+% warning messages. The schedule will often look acceptable anyway.
+%
+% PostScript Notes (perhaps site dependent, works at CMU):
+% - When using pslatex, you can shade the background of a class by
+% using replacing \c by one of the following:
+% \cw (white), \cL (very light gray), \cl (light gray),
+% \cd (dark gray), \cD (very dark gray)
+% \c is treated like \cl, but that can be changed through
+% \def\backgrounddefault{<shade>}, where <shade> is one of
+% \white, \Light, \light, \dark, \Dark. When the file is run through
+% latex instead of pslatex, those shadings are ignored.
+% - When there are overlapping classes, the one later in the input file
+% will shadow the earlier one. When output is produced
+% for non-PostScript devices, both will be visible.
+% - When landscape format is desired (with or without the use of
+% \landscape below), create the PostScript file from the dvi file with
+% dvi-ps -o landscape file.dvi > file.ps
+%
+% The variables and their defaults are
+%
+% \schedunitlength 1.1pt - may be used to scale the schedule.
+% \daywidth 80 - width of one day column in multiples of unitlength.
+% \hourlength 60 - length of one hour in multiples of unitlength.
+% \startday 8 - time in hours for schedule to begin.
+% \endday 5 - time in hours for schedule to end.
+% \firstday 0 - 0 for Monday through 6 for Sunday
+% \lastday 4 - 0 for Monday through 6 for Sunday
+%
+% \preamble {} - arbitrary LaTeX-format text to precede the schedule.
+% \schedtopsep 40 - distance between bottom of preamble and schedule box in
+% multiples of unitlength.
+% \postamble {} - arbitrary LaTeX-format text to follow the schedule.
+% \schedbotsep 40 - distance between top of postamble and schedule box in
+% multiple of unitlength.
+%
+% \landscape and \portrait (default) - sets the \daywidth and \hourlength.
+% Defaults for portrait are \daywidth 80 and \hourlength 60,
+% defaults for landscape are \daywidth 120 and \hourlength 40.
+%
+% \markhours and \nomarkhours (default) - forces a grid to be printed into
+% the schedule which makes it easier to write in new events by hand.
+%
+% \showdates and \shownodates (default) - forces the dates of the week
+% to be printed ant the bottom of the schedule. Set the date of
+% Monday using \beginweek.
+% \beginweek 0/1 - The date of the first day on the schedule (usually Monday)
+% in the format month/day. For example:
+% \beginweek 5/13
+% if the week on the schedule begins on May 13. This only has
+% an effect if \showdates was set.
+% \firstdate 0/1 - synonym for \beginweek
+%
+% \singlepagestyle (default inherited from the main document style):
+% - use empty page style, no top margin.
+%
+% These variables may be set BEFORE the 'schedule' environment is entered.
+%
+% Known bugs: Some lines do not match up exactly, I suspect due to the fact
+% that a framed box contains the frame on its outside. One
+% has to come very close to see this, so I am not motivated
+% to fix this.
+%
+% The \firstdate or \beginweek must appear before the
+% \begin{schedule}. This is bothersome if one keeps updating
+% the events, but not the variables from week to week.
+%
+% The postscript gray-level options have not been tested
+% outside CMU.
+%
+% Two examples follow.
+%
+% ---- An individual weekly schedule ----
+% \documentstyle[12pt,fullpage,schedule]{article}
+% \voffset -0.2in % may be useful if its a tight fit.
+% \singlepagestyle
+%
+% \landscape % landscape for previewing.
+% \thicklines
+% \schedunitlength=1.1pt
+% \startday 9 \endday 5
+% \markhours
+% \preamble{\Large Schedule Spring '84}
+% \postamble{\small No classes during fall break Nov 3 -- Nov 10}
+%
+% \begin{document}
+% \begin{schedule}
+% \c M 2:00-3:15 Applied Logic\\Seminar;[][SH 324]
+% \c T 1:30-3:30 Discrete Math;[Statman][WeH 6121]
+% \c T 3:30-5:00 TPS Meeting;[Andrews][TPS Group]
+% \c W 2:00-3:15 Applied Logic\\Seminar;[][DH 2105]
+% \c H 2:00-3:30 Logic Seminar;[][WeH 5427]
+% \end{schedule}
+% \end{document}
+%
+% ---- The schedule of a two-day workshop ----
+% \documentstyle[12pt,fullpage,schedule]{article}
+% \singlepagestyle
+%
+% \hourlength=58 \daywidth=200
+% \thicklines
+% \schedunitlength=1.1pt
+% \startday 9 \endday 7
+% \firstday 4 \lastday 5
+% \preamble{\large Meeting on Metalanguage and Tools for Mechanizing Formal
+% Deductive Theories}
+% \showdates
+% \firstdate 11/13
+%
+% \begin{document}
+% \begin{schedule}
+%
+% \c F 9:00-9:45 Using a Higher-Order\\Logic Programming Language\\
+% to Implement Program Transformations;[D. Miller][UPenn]
+% \c F 9:45-10:30 Building Proof Systems in an Extended \\
+% Logic Programming Language;[A. Felty][Upenn]
+% \cw F 10:30-10:45 Break;[][]
+% \c F 10:45-12:15 The Categorical Abstract Machine\\
+% State of the Art;[P.-L. Curien][ENS]
+% \cw F 12:15-1:15 Lunch;[][]
+% \c F 1:15-1:45 A Very Brief Look at NuPRL;[J. Bates][CMU]
+% \c F 1:45-2:15 Reasoning about Programs\\
+% that Construct Proofs;[R. Constable][Cornell]
+% \cw F 2:15-2:30 Break;[][]
+% \c F 2:30-3:15 Theorem Proving via Partial Reflection;[D. Howe][Cornell]
+% \c F 3:15-3:45 MetaPrl: A Framework for\\Knowledge Based Media;[J. Bates][CMU]
+% \cw F 3:45-4:00 Break;[][]
+% \cd F 4:00-5:00 Discussion:\\The Role of Formal Reasoning\\in Software
+% Development;[][]
+% \cL F 5:00-6:30 Demos:\\
+% PRL (WeH 4114)\\
+% $\lambda$-Prolog (WeH 4623);[][]
+%
+%
+% \c S 9:00-9:45 A Framework for Defining Logics;[R. Harper][Edinburgh]
+% \c S 9:45-10:30 The Logician's Workbench\\
+% in the Ergo Support System;[F. Pfenning][CMU]
+% \cw S 10:30-10:45 Break;[][]
+% \c S 10:45-11:30 A Tactical Approach\\
+% to Algorithm Design;[D. Smith][Kestrel]
+% \c S 11:30-12:15 Reusing Data Structure Designs;[A. Goldberg][Kestrel]
+% \cw S 12:15-1:15 Lunch\\WeH 4605;[][]
+% \c S 1:15-2:00 Paddle: Popart's Development Language;[D. Wile][USC/ISI]
+% \c S 2:00-2:45 Mechanizing Construction and\\
+% Modification of Specifications;[M. Feather][USC/ISI]
+% \cw S 2:45-3:00 Break;[][]
+% \c S 3:00-3:45 The TPS Theorem Proving System;[P. Andrews][CMU]
+% \c S 3:45-4:30 ONTIC: Knowledge Representation\\
+% for Mathematics;[D. McAllester][Cornell]
+% \cL S 4:30-6:00 Demos\\
+% Popart (WeH 4114)\\
+% The LF Proof Editor (WeH 4623)\\
+% TPS (WeH 7211);[][]
+%
+% \put(0,-35){\makebox(\daywidth,20){Wherrett Room, Skibo}}
+% \put(\daywidth,-35){\makebox(\daywidth,20){Wean Hall 7500}}
+%
+% \end{schedule}
+% \end{document}
+%======================================================================
+%
+% Here the definitions begin.
+%
+%
+% File: schedule.sty
+% Author: Frank Pfenning (fp@cs.cmu.edu)
+%
+% Defines macros to draw a schedule.
+% Documentation is in schedule.doc
+%
+% Use this as an option to another documentstyle.
+
+\def\singlepagestyle{\topmargin 0pt\pagestyle{empty}\thispagestyle{empty}}
+
+ % The indented stuff following allows gray levels on postscript devices.
+ % It may only work at this installation (CMU).
+ % Is there a reliable way to tell whether the output device is
+ % postscript?
+ \newif\ifPS
+ \expandafter\ifx\csname PostScript\endcsname\relax
+ \PSfalse
+ \else
+ \PStrue
+ \fi
+
+ \ifPS
+ \def\setgray #1{\special{"#1 setgray"}}
+ % Changes the gray level of the "pen" on the PostScript device
+ % #1 should be a number between 0 and
+ % 0 is black 1 is white
+ % NB Remember to reset the gray level to black.
+ \def\Dark{\def\backgroundgray{\setgray{0.8}}}
+ \def\dark{\def\backgroundgray{\setgray{0.9}}}
+ \def\light{\def\backgroundgray{\setgray{0.95}}}
+ \def\Light{\def\backgroundgray{\setgray{0.99}}}
+ \def\white{\def\backgroundgray{\setgray{1}}}
+ \else
+ \def\Dark{} \def\dark{} \def\light{} \def\Light{} \def\white{}
+ \fi
+
+\def\backgrounddefault{\light}
+
+\newdimen\schedunitlength \schedunitlength=1.1pt
+
+\newcount\hourlength
+\newcount\daywidth
+\def\portrait{\hourlength=60 \daywidth=80}
+\def\landscape{\hourlength=40 \daywidth=120}
+\portrait
+
+\newcount\startday \startday=8
+\newcount\endday \endday=5
+
+\newcount\firstday \firstday=0
+\newcount\lastday \lastday=4
+
+\newcount\schedtopsep \schedtopsep=40
+\newcount\schedbotsep \schedbotsep=40
+
+\newcount\dday \dday=1
+\newcount\mmonth \mmonth=0
+
+\newcount\ypos \newcount\xpos \newcount\ylength
+
+\newcount\tempa \newcount\tempb \newcount\tempc \newcount\tempd
+
+\newcount\schedtop
+
+\newcount\schedwidth \newcount\hschedwidth
+
+\newcount\firstdayoffset
+\newcount\numdays
+
+\def\preamble#1{\gdef\preambletext{#1}}
+\def\beginpreamble#1\endpreamble{\gdef\preambletext{#1}}
+
+\def\postamble#1{\gdef\postambletext{#1}}
+\def\beginpostamble#1\endpostamble{\gdef\postambletext{#1}}
+
+\def\markhours{\gdef\hourlengthmarks{T}}
+\def\nomarkhours{\gdef\hourlengthmarks{N}}
+
+\def\showdates{\gdef\showdatesflag{T}}
+\def\shownodates{\gdef\showdatesflag{N}}
+
+\def\beginweek#1/{\mmonth #1\dday }
+\def\firstdate{\beginweek}
+
+\preamble{}
+\postamble{}
+\nomarkhours
+\shownodates
+
+\def\initdimen{\unitlength=\schedunitlength
+\ypos=0 \xpos=0
+\ylength=0 \tempa=0 \tempb=0 \tempc=0 \tempd=0
+\ifnum \endday<8 \advance\endday by 12\fi
+\ifnum \startday<8 \advance\startday by 12\fi
+\schedtop=\endday \advance\schedtop by -\startday
+\multiply\schedtop by\hourlength
+\firstdayoffset=\firstday \multiply\firstdayoffset by\daywidth
+\numdays=\lastday \advance\numdays by -\firstday
+\schedwidth=\numdays \advance\schedwidth by 1
+ \multiply\schedwidth by\daywidth
+\hschedwidth=\schedwidth \divide\hschedwidth by 2
+}
+
+\def\class#1{\framebox(\daywidth,\ylength){\begin{tabular}{c}
+ \commaparse#1,,\end{tabular}}}
+
+\def\commaparse#1,{\@ifnextchar ,{#1\ignorechar}{#1\\[1.3em]\commaparse}}
+\def\ignorechar#1{}
+
+\def\timeclass#1#2{\put(\xpos,\ypos){\timeboxbegin{#1}}%
+ \put(\xpos,\ypos){\timeboxend{#2}}}
+
+\def\grayput{%
+ \put(\xpos,\ypos){\backgroundgray
+ \rule{\daywidth\unitlength}{\ylength\unitlength}%
+ \black}}
+
+\def\classput#1;{%
+ \put(\xpos,\ypos){\class{#1}}%
+ \@ifnextchar [{\optone}{\relax}%]
+ }
+
+\def\optone[#1]{\put(\xpos,\ypos){\righttopbox{#1}}%
+ \@ifnextchar [{\opttwo}{\relax}%]
+ }
+
+\def\opttwo[#1]{\put(\xpos,\ypos){\rightbotbox{#1}}}
+
+\def\timeboxbegin#1{\makebox(\daywidth,\ylength)[tl]{%
+ \scriptsize{\raisebox{0em}[0.85em]{\scriptsize{\hskip 0.2em #1}}}}}
+
+\def\righttopbox#1{\makebox(\daywidth,\ylength)[tr]{%
+ \scriptsize{\raisebox{0em}[0.85em]{\scriptsize{#1\hskip 0.2em}}}}}
+
+\def\timeboxend#1{\makebox(\daywidth,\ylength)[bl]{%
+ \scriptsize{\raisebox{0.2em}{\scriptsize{\hskip 0.2em #1}}}}}
+
+\def\rightbotbox#1{\makebox(\daywidth,\ylength)[br]{%
+ \scriptsize{\raisebox{0.2em}{\scriptsize{#1\hskip 0.2em}}}}}
+
+\def\daywidthxpos#1{%
+ \advance \xpos by -\firstdayoffset
+ \if M#1\else \advance\xpos by\daywidth
+ \if T#1\else \advance\xpos by\daywidth
+ \if W#1\else \advance\xpos by\daywidth
+ \if H#1\else \advance\xpos by\daywidth
+ \if F#1\else \advance\xpos by\daywidth
+ \if S#1\else \advance\xpos by\daywidth
+ \if U#1\else \advance\xpos by\daywidth\fi\fi\fi\fi\fi\fi\fi}
+
+\def\cD{\Dark\cdefault}
+\def\cd{\dark\cdefault}
+\def\cl{\light\cdefault}
+\def\cL{\Light\cdefault}
+\def\cw{\white\cdefault}
+\def\c{\backgrounddefault\cdefault}
+
+\def\cdefault#1 #2:#3-#4:#5 {%
+ %% First convert time to 24hour clock
+ \ypos=-#2 \ifnum \ypos>-8 \advance\ypos by -12\fi
+ \ylength=#4 \ifnum \ylength<8 \advance\ylength by 12\fi
+ %% Now calculate the length of the entry: hours
+ \advance\ylength by \ypos \multiply\ylength by\hourlength
+ %% Calculate the beginning of the entry in hours
+ \advance\ypos by\startday
+ \multiply\ypos by\hourlength
+ \advance\ypos by\schedtop
+ %% Add the minutes
+ \tempa=#3 \multiply\tempa by\hourlength \divide\tempa by 60
+ \advance\ypos by -\tempa
+ %% Add minutes to length.
+ \tempa=#5 \advance\tempa by -#3
+ \multiply\tempa by\hourlength \divide\tempa by 60
+ \advance\ylength by\tempa
+ %% The lower left corner is at beginning of entry - length of entry
+ \advance\ypos by -\ylength
+ \xpos=0 \daywidthxpos{#1}%
+ \ifPS \grayput\fi
+ \timeclass{#2:#3}{#4:#5}
+ \classput}
+
+
+\def\putday#1{\ifnum \firstday<\tempc \ifnum \tempc<\tempd
+ \put(\tempa,\schedtop){\makebox(\daywidth,20){#1}}%
+ \if T\showdatesflag
+ \put(\tempa,-20){\makebox(\daywidth,20){\the\mmonth/\the\dday}}%
+ \increaseday \fi
+ \advance\tempa by\daywidth \fi \fi
+ \advance\tempc by 1}
+
+\def\nextmonth{\advance\mmonth by 1\dday 1}
+
+\def\increaseday{\advance\dday by 1
+ \ifnum \dday=29\ifnum \mmonth=2\nextmonth\fi\fi
+ \ifnum \dday=31\ifcase \mmonth \or \or \or \or \nextmonth
+ \or \or \nextmonth \or \or
+ \or \nextmonth \or \or \nextmonth
+ \or \fi\fi
+ \ifnum \dday=32\ifcase \mmonth \or \nextmonth \or \or \nextmonth
+ \or \or \nextmonth \or \or \nextmonth
+ \or \nextmonth \or \or \nextmonth
+ \or \or \mmonth 1\dday 1\fi\fi}
+
+\def\schedule{
+
+\initdimen
+
+\begin{center}
+
+\begin{picture}(\schedwidth,\schedtop)(0,0)
+\tempa=\schedtop \advance\tempa by\schedtopsep
+\put(\hschedwidth,\tempa){\makebox(0,0)[b]{\preambletext}}
+\put(0,0){\framebox(\schedwidth,\schedtop){}}
+
+%% One more time stamp than there are hours.
+\tempa=\startday \advance\tempa by -1
+
+\xpos=\startday \ypos=\schedtop
+\loop \ifnum \xpos>12 \advance\xpos by -12\fi
+ \put(0,\ypos){\makebox(0,0)[r]{\the\xpos :00\hskip 1.7em}}%
+ \advance\ypos by -\hourlength \advance\tempa by 1
+ \advance\xpos by 1
+ \ifnum \tempa<\endday \repeat
+
+\tempa=\endday \advance\tempa by -\startday \advance\tempa by 1
+\multiput(0,\schedtop)(0,-\hourlength){\tempa}{%
+ \makebox(0,0)[r]{\vrule height 0.4pt width 1.5em}}
+
+\if T\hourlengthmarks
+ \multiput(\daywidth,\schedtop)(\daywidth,0){\numdays}{%
+ \makebox(0,0)[t]{\vrule height 0.3em width 0.4pt}}
+ \multiput(\daywidth,0)(\daywidth,0){\numdays}{%
+ \makebox(0,0)[b]{\vrule height 0.3em width 0.4pt}}
+ \advance\tempa by -2
+ \tempd=\schedtop \advance\tempd by -\hourlength
+ \tempb=\daywidth \tempc=0
+ \multiput(0,\tempd)(0,-\hourlength){\tempa}{%
+ \makebox(0,0)[l]{\vrule height 0.4pt width 0.3em}}
+ \loop \multiput(\tempb,\tempd)(0,-\hourlength){\tempa}{%
+ \makebox(0,0)[c]{\vrule height 0.2pt depth 0.2pt width 0.3em
+ \vrule height 0.3em depth 0.3em width 0.4pt
+ \vrule height 0.2pt depth 0.2pt width 0.3em}}
+ \advance\tempb by \daywidth
+ \advance\tempc by 1
+ \ifnum \tempc<\numdays \repeat
+ \multiput(\tempb,\tempd)(0,-\hourlength){\tempa}{%
+ \makebox(0,0)[r]{\vrule height 0.4pt width 0.3em}}
+ \fi
+
+\tempa=0 \tempc=1 \tempd=\lastday \advance\tempd by 2
+\putday{Monday}
+\putday{Tuesday}
+\putday{Wednesday}
+\putday{Thursday}
+\putday{Friday}
+\putday{Saturday}
+\putday{Sunday}
+\put(0,-\schedbotsep){\makebox(0,0)[tl]{\postambletext}}
+}
+
+\def\endschedule{
+\end{picture}
+
+\end{center}
+}
diff --git a/macros/latex209/contrib/misc/screen.sty b/macros/latex209/contrib/misc/screen.sty
new file mode 100644
index 0000000000..9190d64e27
--- /dev/null
+++ b/macros/latex209/contrib/misc/screen.sty
@@ -0,0 +1,32 @@
+% SCREEN.STY is used to create a LaTeX document suitable for SCREENVIEWing.
+
+\oddsidemargin=0pt % for 1in left margin (which SCREENVIEW removes!)
+\evensidemargin=0pt % ditto
+\textwidth=400pt % so SCREENVIEW output will fit within 80 columns
+
+% redefine all font sizes to be \normalsize
+\def\tiny{\normalsize}
+\def\scriptsize{\normalsize}
+\def\footnotesize{\normalsize}
+\def\small{\normalsize}
+\def\large{\normalsize}
+\def\Large{\normalsize}
+\def\LARGE{\normalsize}
+\def\huge{\normalsize}
+\def\Huge{\normalsize}
+
+% redefine all font types to be \tt
+\def\em{\tt}
+\def\bf{\tt}
+\def\it{\tt}
+\def\sl{\tt}
+\def\sf{\tt}
+\def\sc{\tt}
+\def\rm{\tt}
+
+% now typeset document using \tt and \raggedright
+\tt
+\raggedright
+
+
+
diff --git a/macros/latex209/contrib/misc/seceqn.sty b/macros/latex209/contrib/misc/seceqn.sty
new file mode 100644
index 0000000000..bedb83d39f
--- /dev/null
+++ b/macros/latex209/contrib/misc/seceqn.sty
@@ -0,0 +1,11 @@
+% Save file as: SECEQN.STY Source: FILESERV@SHSU.BITNET
+% seceqn.sty
+%
+% Substyle file for use with "article" to cause equations to be numbered
+% within sections.
+%
+% 13 Apr 89 Jerry Leichter (LEICHTER-JERRY@CS.YALE.EDU)
+\typeout{Document Option `seceqn': 13 Apr 89}
+\@addtoreset{equation}{section} %Make equation=0 when section steps
+\def\theequation{\thesection.\arabic{equation}}
+ %How an equation number looks
diff --git a/macros/latex209/contrib/misc/secret.sty b/macros/latex209/contrib/misc/secret.sty
new file mode 100644
index 0000000000..65361e6d30
--- /dev/null
+++ b/macros/latex209/contrib/misc/secret.sty
@@ -0,0 +1,85 @@
+%Date: Fri, 24 Nov 89 13:44:13 EST
+%From: Denys Duchier <duchier-denys@YALE.ARPA>
+%Subject: Re: secret.sty?
+%Keywords: LaTeX, secret.sty
+%
+%> Does anyone out there have an option file for report.sty (call
+%> it secret.sty?) which does the following (for use in LaTeXing
+%> classified reports):
+%>
+%> (1) all paragraphs must begin with a (U), (C), or (S) which
+%> denotes unclassified, confidential, and secret, respectively.
+%>
+%> (2) if a paragraph continues on the next page, the (U), (C),
+%> and (S) has to be inserted into the first line of the continuing
+%> paragraph on the next page.
+%
+%I don't think requirement (2) can be satisfied as stated because when
+%TeX exercises its page breaking algorithm, paragraphs have already
+%been formatted and broken into individual lines, each one put in its
+%own box and appended to the vertical list: you can't insert (S) at the
+%top of the next page and have TeX reconsider line breaks.
+%
+%However, it is possible to come close: instead of putting the labels
+%in the running text, we can let them hang out in the margin. The code
+%below appears to work on the example I tried; put it in file
+%secret.sty and use \documentstyle[secret]{article} or something like
+%it at the top of your document.
+%
+%If you type \unclassified (resp. \confidential or \secret) the
+%subsequent paragraphs will begin with (U) (resp. (C) or (S)) hanging
+%out in the margin. \nosecret turns off this behaviour. You can also
+%use them as environments.
+%
+%%--Denys
+%Organization: Computer Science, Yale University, New Haven, CT 06520-2158
+%%% File: secret.sty
+
+\def\@markright#1#2#3#4{\gdef\@themark{{#1}{#4}{#3}}}
+\def\@markextra#1#2#3#4{\gdef\@themark{{#1}{#2}{#4}}}
+\def\@markboth#1#2#3#4#5{\gdef\@themark{{#4}{#5}{#3}}}
+
+\def\@leftmark#1#2#3{#1}
+\def\@rightmark#1#2#3{#2}
+\def\@extramark#1#2#3{#3}
+
+\def\markboth#1#2{{\let\protect\noexpand
+ \let\label\relax \let\index\relax
+ \expandafter\@markboth\@themark
+ {#1}{#2}\mark{\@themark}}\if@nobreak\ifvmode\nobreak\fi\fi}
+
+\def\markextra#1{{\let\protect\noexpand
+ \let\label\relax \let\index\relax
+ \expandafter\@markextra\@themark
+ {#1}\mark{\@themark}}\if@nobreak\ifvmode\nobreak\fi\fi}
+
+\def\extrabotmark{\expandafter\@extramark\botmark}
+\def\extrafirstmark{\expandafter\@extramark\firstmark}
+
+\def\@themark{{}{}{}}
+
+\newdimen\@tempdimc
+
+\output{\@tempdimc = \dp255
+ \ifnum\outputpenalty <-\@M\@specialoutput\else
+ \@makecol\@opcol\@floatplacement\@startcolumn
+ \@whilesw\if@fcolmade \fi{\@opcol\@startcolumn}\fi
+ \global\vsize\ifnum\outputpenalty >-\@Miv \@colroom
+ \else \maxdimen\fi
+ \edef\@tempa{\extrabotmark}\ifx\@tempa\empty\else
+ \llap{\@tempa\hskip\labelsep}\advance\@tempdimc
+ -\prevdepth \advance\@tempdimc -\baselineskip
+ \kern\@tempdimc\fi}
+
+\def\@secret#1{\everypar{\markextra{}\llap{#1\hskip\parindent\hskip\labelsep}\markextra{#1}}}
+
+\def\unclassified{\@secret{(U)}}
+\def\confidential{\@secret{(C)}}
+\def\secret{\@secret{(S)}}
+
+\def\nosecret{\markextra{}\everypar{}}
+
+\let\@extraenddocument\enddocument
+\def\enddocument{\nosecret\@extraenddocument}
+
+%--Denys
diff --git a/macros/latex209/contrib/misc/semitic.sty b/macros/latex209/contrib/misc/semitic.sty
new file mode 100644
index 0000000000..eef6f2c527
--- /dev/null
+++ b/macros/latex209/contrib/misc/semitic.sty
@@ -0,0 +1,113 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%Cut with a sharp axe here%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is a very simple LaTeX substyle to set Semitic languages. It is a very
+% much a hacked HEBREW.TeX distributed with the Hebrew fonts.
+% Graeme McKinstry,
+% Computing Services Centre,
+% University of Otago,
+% Dunedin,
+% New Zealand.
+% E-mail: graeme%otago.ac.nz@relay.cs.net
+%
+% The fonts were designed by Jacques Goldberg:
+% E-mail: phr00jg@technion.bitnet (watch for ZEROES in phr00jg)
+% S-mail: Prof. Jacques Goldberg, Department of Physics
+% TECHNION, 32000 Haifa, Israel.
+% Emergency phone: (972)4-293663
+%
+% WHAT IT DOES:
+% * Reverses order of letters in words.
+% * Reverses order of words on a line (sets right-to-left).
+%
+% Use it as follows:
+% \documentstyle[semitic,...]{...}
+% .
+% .
+% .
+% Normal text here
+% \begin{semitic}
+% Hebrew text in `natural direction'. Type Hebrew paragraph as
+% you would any `normal' paragraph in a LaTeX document.
+% \end{semitic}
+% More text ...
+% .
+% .
+% .
+%
+% NOTES:
+% * There is now no need to put only 1 hebrew word on a line. Treat the
+% Hebrew text as `normal' text.
+% * There can be no space between `\end' and `{semitic}' in
+% `\end{semitic}' (similar to the verbatim environment).
+% * To keep something together enclose it in braces, e.g., {text together}
+% This will stop it being broken over a line but the contents
+% will still be reversed. If more than 1 word then place a ~ between
+% words to maintain space.
+% * To keep something together and to STOP IT BEING REVERSED enclose it
+% in 2 sets of braces, e.g.,
+% {{$\sin(\theta + \frac{\pi}{2}) = \cos \theta$}}
+% * The text is processed in LR mode and then formed into lines. Anything
+% that starts a new paragraph, e.g., displayed maths, will cause problems.
+% This also mean that no blank lines can appear in the environment.
+% * A new paragraph is started before and after the semitic environment.
+
+\font\ivrit=redis10
+\hyphenchar\ivrit=-1
+\font\hebbf=redisbx10
+\hyphenchar\hebbf=-1
+\font\hebsl=rediss10
+\hyphenchar\hebsl=-1
+
+% The two lines below are taken from D. Knuth and P. MacKay
+% TuGBoat vol.8,#1,page 14.
+% Use \hebrew{hebrew~text} for short hebrew passages.
+\gdef\hebrew#1\relax{{\ivrit\reflect#1\empty\tcelfer}}
+\gdef\reflect#1#2\tcelfer{\ifx#1\empty\else\reflect#2\tcelfer#1\fi}
+
+\def\ivrconcat#1#2{#1 #2}
+
+\newbox\ivrbox % The Semitic box to test full line condition
+\newbox\ivrstrbox % The box to hold the current Semitic string
+\setbox\ivrbox=\hbox{}
+\setbox\ivrstrbox=\hbox{}
+
+\def\@esemitic{\end{semitic}} % Used for checking end of environment
+
+\def\semitic{\par\ivrit\let\bf=\hebbf\let\sl=\hebsl
+ \parindent=0pt\@makesemiticline}
+\def\endsemitic{\par}
+
+% \@makesemitic line reads in a word at a time (a word is taken as text
+% terminated by 1 or more spaces).
+% It will then take this word and reverse it (using \reflect) and add it
+% to the FRONT of the line being made. If this word makes the line too
+% long (> \linewidth) then the line is broken before this word and this
+% word is added to the next line.
+
+\def\@makesemiticline#1 {\def\@word{#1}\relax
+ \ifx\@word\empty % removes CR
+ \let\next=\@makesemiticline
+ \else
+ \ifx\@esemitic\@word % i.e., read in \end{semitic}
+ \let\next=\@esemitic % will finish off semitic environment
+ \hbox to\hsize{\hfil \unhbox\ivrstrbox \unskip}
+ \else % semitic word
+ \ifdim\wd\ivrstrbox=0pt % i.e., contains nothing therefore
+ % at beginning of line
+ \setbox\ivrbox=\hbox{\reflect#1\empty\tcelfer}
+ \else % add reversed word to FRONT of line.
+ \setbox\ivrbox=\hbox{\ivrconcat{\reflect#1\empty\tcelfer
+ }{ \unhcopy\ivrstrbox}}
+ \fi
+ \let\next=\@makesemiticline % will loop around yet again
+ \ifdim \linewidth < \wd\ivrbox % line now too long
+ \hbox to\linewidth{\hss % remove \hss to justify
+ \unhcopy\ivrstrbox}
+ \setbox\ivrstrbox=\hbox{\reflect#1\empty\tcelfer}
+ \else % set store string to whole line
+ \setbox\ivrstrbox=\hbox{\unhcopy\ivrbox}\relax
+ \fi
+ \fi
+ \fi\next}
+%%%%%%%%%%%%%%%%%%%%%%%%%%Cut with a sharp axe here%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/macros/latex209/contrib/misc/sentences.tex b/macros/latex209/contrib/misc/sentences.tex
new file mode 100644
index 0000000000..c40b4d084d
--- /dev/null
+++ b/macros/latex209/contrib/misc/sentences.tex
@@ -0,0 +1,133 @@
+% -*- Mode: TeX -*-
+
+\ifx\thisfileis\anUndefinedMacro\input maybeload \fi
+
+\thisfileis{<eb.tex.texlocal>sentences} % abort loading if we're already loaded
+
+\input redefine
+
+% A referenceable "sentences" list environment for Latex. Remember to
+% put "{}" % after the \item command if the sentence begins with "[".
+% There is also a "subsentences" environment.
+
+\makeatletter
+
+\newif\ifinsentences
+\insentencesfalse
+
+\newcounter{sentence}
+\newcounter{subsentence}[sentence]
+
+% These next definitions define the format of the "sentence"
+% and "subsentence" counters. It is tricky to get them right.
+% First of all, the parentheses in "(4)" and "(2iii)" are
+% defined to be part of the printed representation of the
+% "sentence" and "subsentence" counters. This is so that
+% parentheses will be included in \ref - \label constructions.
+% Second, the "subsentence" counter must print out with the
+% "sentence" number included as well; this is similar to
+% what happens with the section and chapter counters.
+% Third, despite the second requirement, the "subsentence"
+% counter must appear without the sentence number when it
+% is actually used to number a subsentence.
+%
+% We use two auxiliary control sequences here and below in order
+% to make it easier to change the subsentence numbering style.
+% The two control sequences are \subsentencenumbering, which should
+% be \let to something like \roman or \alph, and
+% \subsentencepunctuation, which controls the format of subsentence
+% numbers as they appear before the subsentences.
+
+\def\thesentence{(\arabic{sentence})}
+\def\thesubsentence{(\arabic{sentence}\subsentencenumbering{subsentence})}
+
+% These next two definitions are defaults.
+
+\let\subsentencenumbering\roman
+\def\subsentencepunctuation#1{(#1)}
+
+%%% Using \begin{list} and \end{list} in the argument of a
+%%% \newenvironment command doesn't work properly; I have to call
+%%% \list and \endlist directly.
+
+\newenvironment{sentences}{\list{\thesentence}%
+{\edef\sent@nbr{\the\c@sentence}\usecounter{sentence}%
+\setcounter{sentence}{\sent@nbr}%
+\ifinsentences \errmessage{Nested sentences environment.} \fi
+\def\makelabel##1{##1\hfil}%
+\leftmargin\leftmargini\labelwidth\leftmargin
+ \advance\labelwidth-\labelsep
+\insentencestrue}}{\endlist}
+
+\newenvironment{subsentences}{\list
+{\subsentencepunctuation{\subsentencenumbering{subsentence}}}%
+{\edef\sent@nbr{\the\c@subsentence}\usecounter{subsentence}%
+\setcounter{subsentence}{\sent@nbr}%
+\leftmargin\leftmargini\labelwidth\leftmargin
+ \advance\labelwidth-\labelsep
+\def\makelabel##1{##1\hfil}%
+\ifinsentences\relax\else
+ \errmessage{\string\begin{subsentences} not in sentences environment}\fi}}%
+{\endlist}
+
+% These sentence-judgement macros are for use with the sentences
+% environment; they back up over preceding space. They're designed
+% for use just after an \item.
+
+\newcommand{\sentencejudgement}[1]{\strut\llap{#1\hskip 2pt}}
+\newcommand{\bad}{\sentencejudgement{$\ast$}}
+\newcommand{\quest}{\sentencejudgement{?}}
+\newcommand{\qquest}{\sentencejudgement{?\kern -0.5pt?}}
+
+% An abbreviation.
+
+\newcommand{\sentence}[1]{\begin{sentences}\item{#1}\end{sentences}}
+
+% Local references.
+%
+% \nextsentence the next sentence
+% \nextsentence[2] the sentence after the next sentence
+% \nextsentencesub{1} the first subsentence of the next sentence
+% \nextsentencesub[2]{1} the first subsentence of the sentence after
+% the next sentence
+%
+
+\newdef\nextsentence{\@ifnextchar[{\@argnextsentence}{\@argnextsentence[1]}%]
+}
+
+\newdef\@argnextsentence[#1]{\bgroup
+ \advance\c@sentence by #1\relax
+ \thesentence
+ \egroup}
+
+\newdef\nextsentencesub{\@ifnextchar[{\@argnextsentencesub
+ }{\@argnextsentencesub[1]}%]
+}
+
+\newdef\@argnextsentencesub[#1]#2{\bgroup
+ \advance\c@sentence by #1\relax
+ \c@subsentence=#2\relax
+ \thesubsentence
+ \egroup}
+
+% Define labeled brackets. Write ``[\ntype:NP foo bar ...'' to get an
+% NP bracket. \ctype is acceptable as an abbreviation.
+
+\newdef\ntype:#1 {{$_{\mbox{\tiny #1}}$} }
+\newlet\ctype=\ntype % synonmym
+
+% Common symbols with bars over them.
+
+\newcommand{\Bar}[1]{\ifmmode \overline{\mbox{#1}}\else $\Bar{#1}$\fi}
+\newcommand{\Sbar}{\Bar S}
+\newcommand{\Nbar}{\Bar N}
+\newcommand{\Abar}{\Bar A}
+\newcommand{\Xbar}{\Bar X}
+\newcommand{\Twobar}[1]{\Bar{\Bar{#1}}}
+
+\newcommand{\thetabar}{\overline\theta}
+
+% More common symbols.
+
+\newcommand{\wh}{{\it wh}}
+
diff --git a/macros/latex209/contrib/misc/set_sp.sty b/macros/latex209/contrib/misc/set_sp.sty
new file mode 100644
index 0000000000..99d120bcd5
--- /dev/null
+++ b/macros/latex209/contrib/misc/set_sp.sty
@@ -0,0 +1,253 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Geoffrey R. D. Tobin",
+%%% version = "1.0",
+%%% date = "23 Jan 1992",
+%%% time = "15:56:00 AEDT (06:56:00 GMT)",
+%%% filename = "set_sp.sty",
+%%% address = "Department of Electronic Engineering
+%%% La Trobe University
+%%% Bundoora VIC 3083
+%%% Australia",
+%%% telephone = "+ 613 479-1180",
+%%% checksum = "06002 253 1152 10466"
+%%% email = "ecsgrt@luxor.latrobe.edu.au (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, linespacing, NFSS",
+%%% supported = "yes, by email",
+%%% docstring = "The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by
+%%% the equivalent of the standard UNIX wc
+%%% (word count) utility output of lines,
+%%% words, and characters. This is produced by
+%%% Robert Solovay's checksum utility. This
+%%% program, as well as Nelson Beebe's proposal
+%%% for standard file headers, is available via
+%%% anonymous ftp from math.utah.edu.",
+%%% }
+%%% ====================================================================
+% set_sp.sty - version 1 - 15:56 - Thu 23 Jan 1992 - Geoffrey Tobin
+% `merge' of ideas of setspace.sty and of dblsp.sty mods by Mark A. Roth.
+%
+%% FILE: setspace.sty in SYS2.TEX.PUB.ISULATEX.STYLES
+%% AUTHOR: Erica M. S. Harris
+%% DATE: April 1990
+%% DESCR: LaTeX Document style option "setspace"
+%% Usage: \documentstyle[...,setspace,...]{...}
+%% Based on the doublespace option created by Stephen Page.
+%%
+%% This style option provides commands and environments for doing
+%% double and one-and-a-half spacing based on pt size.
+%%
+%% Single spacing is the default.
+%%
+%% Three commands, \doublespacing, \onehalfspacing, and
+%% \singlespacing, are for use in the preamble to set the overall
+%% spacing for the document. If a different spacing is required then
+%% the \setstretch{baselinestretch} command can be used in the
+%% preamble to set the baselinestretch appropriately. The default
+%% spacing with this style option is single spacing.
+%%
+%% Three environments, singlespace, onehalfspace, and doublespace,
+%% allow the spacing to be changed within the document. Both the
+%% onehalfspace and doublespace environments are intended to increase
+%% the spacing, so the onehalfspace environment should not be used in
+%% a double spaced document. If an increased spacing different from
+%% one-and-a-half or double spacing is required then the spacing
+%% environment can be used. The spacing environment takes one
+%% argument which is the larger baselinestretch to use,
+%% e.g., \begin{spacing}{2.5}.
+%%
+%% \footins is adjusted the same as \parskip - appears to work. Lose
+%% stretch parts but don't consider that to be crucial
+%%
+%% Removed code for altering spacing before and after displayed
+%% equations - just looked too much.
+%%
+%% MODS:
+%%
+%% PLEASE REPORT ANY BUGS
+%%
+%% Old Documentation follows:
+%% 1. A new environment "singlespace" is provided, within which single
+%% spacing will apply.
+%% JFL - changed so that it works in regular text and so that
+%% vertical space before and after is correctly computed.
+%% 2. Double spacing is turned off within footnotes and floats (figures
+%% and tables).
+%% 3. Proper double spacing happens below tabular environments and in
+%% other places where LaTeX uses a strut.
+%% 4. Slightly more space is inserted before footnotes.
+%% 5. JFL - fixes spacing before and after displayed math.
+% 6. MAR - fix to work with new font selection scheme if used.
+%%
+% Modified by: Mark A. Roth, mroth@afit.af.mil
+%%
+%% mods: Jean-Francois Lamy
+%% lamy@ai.toronto.edu
+%% lamy@utai.uucp
+%
+% Author: Stephen Page -- sdpage@prg.oxford.ac.uk
+%
+% Original ``doublespace.sty'' released 6 July 1986 - 3 September 1986
+%%
+%% POSSIBLE BUGS:
+%% . Increasing struts may possibly cause some other obscure part of
+%% formatting to fall over.
+%% . \begin{singlespace}\begin{quote} produces the wrong spacing before
+%% the quote (extra glue is inserted).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\doublespacing{\ifcase \@ptsize \relax % 10pt
+ \def\baselinestretch{1.667}
+ \or % 11pt
+ \def\baselinestretch{1.618}
+ \or % 12pt
+ \def\baselinestretch{1.655}
+ \fi} % EMSH
+
+\def\onehalfspacing{\ifcase \@ptsize \relax % 10pt
+ \def\baselinestretch{1.25}
+ \or % 11pt
+ \def\baselinestretch{1.213}
+ \or % 12pt
+ \def\baselinestretch{1.241}
+ \fi} % EMSH
+
+\def\singlespacing{\def\baselinestretch{1}} % EMSH
+
+\def\setstretch#1{\renewcommand{\baselinestretch}{#1}}
+
+%---Stretch the baseline BEFORE calculating the strut size. This improves
+% spacing below tabular environments etc., probably...
+% Comments are welcomed.
+% This change not needed with new font selection scheme-MAR
+
+\ifx\undefined\selectfont %then new font selection scheme not invoked-MAR
+\def\@setsize#1#2#3#4{\@nomath#1 \let\@currsize#1 %
+ \baselineskip #2 %
+ \baselineskip\baselinestretch\baselineskip
+ \parskip\baselinestretch\parskip
+ \setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}%
+ \skip\footins \baselinestretch\skip\footins % EMSH
+ \normalbaselineskip\baselineskip#3#4}
+\else %new font selection scheme is defined, set up way to change baselines-MAR
+\def\@newbaseline{ \setnew@baselineskip
+ \baselineskip\baselinestretch\baselineskip
+ \setbox\strutbox\hbox{\vrule\@height.7\baselineskip
+ \@depth.3\baselineskip \@width\z@}%
+ \normalbaselineskip\baselineskip}% -MAR
+\fi %-MAR
+
+%---Increase the space between last line of text and footnote rule.
+%\skip\footins 20pt plus4pt minus4pt % commented out by EMSH.
+
+%---Reset baselinestretch within footnotes and floats.
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}
+ \ifx\undefined\selectfont %then new font selection scheme not invoked-MAR
+ \@normalsize % EMSH mod from "\small\normalsize".
+ \else %else new font selection scheme is invoked-MAR
+ \@newbaseline %include new baselinestretch-MAR
+ \fi %-MAR
+ \boxmaxdepth\z@
+ \hsize\columnwidth \@parboxrestore}
+
+\long\def\@footnotetext#1{\insert\footins{\def\baselinestretch{1}\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% A single spaced quote (say) is done by surrounding singlespace with quote.
+%
+\def\singlespace{%
+\vskip\baselineskip%
+\def\baselinestretch{1}%
+\ifx\undefined\selectfont %then new font selection scheme not invoked-MAR
+\ifx\@currsize\normalsize\@normalsize\else\@currsize\fi%
+\else %else new font selection scheme is invoked-MAR
+\@newbaseline %include new baselinestretch-MAR
+\fi %-MAR
+% \vskip-\parskip% % EMSH omitted this, so I've commented it out - gt.
+\vskip-\baselineskip}
+
+\def\endsinglespace{\par}
+
+% spacing, doublespace and onehalfspace all are meant to INCREASE the
+% spacing (i.e. calling onehalfspace from within doublespace will not
+% produce a graceful transition between spacings)
+%
+\def\spacing#1{\par%
+ \begingroup % moved from \endspacing by PGBR 1-29-91
+ \def\baselinestretch{#1}%
+ \ifx\undefined\selectfont %then new font selection scheme not invoked-MAR
+ \ifx\@currsize\normalsize\@normalsize\else\@currsize\fi % MAR removed `}'.
+ \else %else new font selection scheme is invoked-MAR
+ \@newbaseline %include new baselinestretch-MAR
+ \fi %-MAR
+} % MAR moved `}' hither.
+
+\def\endspacing{\par%
+ \vskip \parskip%
+ \vskip \baselineskip%
+ \endgroup%
+ \vskip -\parskip%
+ \vskip -\baselineskip%
+% \begingroup %\begingroup used to be here, PGBR 1-29-91
+ }
+
+% one and a half spacing is 1.5 x pt size
+\def\onehalfspace{\ifcase \@ptsize \relax % 10pt
+ \spacing{1.25}
+ \or % 11pt
+ \spacing{1.213}
+ \or % 12pt
+ \spacing{1.241}
+ \fi}
+\let\endonehalfspace=\endspacing
+
+% double spacing is 2 x pt size
+\def\doublespace{\ifcase \@ptsize \relax % 10pt
+ \spacing{1.667}
+ \or % 11pt
+ \spacing{1.618}
+ \or % 12pt
+ \spacing{1.655}
+ \fi}
+\let\enddoublespace=\endspacing %first end independently added by MAR & EMSH.
+
+% gt - EMSH chose to omit display math part that follows.
+% She wrote (see above) that the "altered spacing before and after displayed
+% equations ... just looked too much".
+%
+% Fix up spacing before and after displayed math
+% (arraystretch seems to do a fine job for inside LaTeX displayed math,
+% since array and eqnarray seem to be affected as expected).
+% Changing \baselinestretch and doing a font change also works if done here,
+% but then you have to change @setsize to remove the call to @nomath)
+%
+\everydisplay{
+ \abovedisplayskip \baselinestretch\abovedisplayskip%
+ \belowdisplayskip \abovedisplayskip%
+ \abovedisplayshortskip \baselinestretch\abovedisplayshortskip%
+ \belowdisplayshortskip \baselinestretch\belowdisplayshortskip}
+%
+% end "set_sp.sty"
+%%% ====================================================================
diff --git a/macros/latex209/contrib/misc/settosize.sty b/macros/latex209/contrib/misc/settosize.sty
new file mode 100644
index 0000000000..66267c6c0e
--- /dev/null
+++ b/macros/latex209/contrib/misc/settosize.sty
@@ -0,0 +1,50 @@
+%%% The user needs to be able to specify the width for text, and
+%%% use the largest point size necessary to fill that width.
+%%%
+%%% After macros by Phil Taylor January 1993;
+%%% converted to LaTeX style file (needs NFSS) and changed syntax
+%%% by Sebastian Rahtz, February 1993.
+
+%%% \Fontname: like \fontname, but voids any size specifier
+%%% Usage: \Fontname \font {} %%% don't omit {} !!!
+
+\edef \Fontname
+ {\noexpand \expandafter \noexpand \stripsize \noexpand \fontname \space}
+\def \stripsize #1 #2#{#1}
+
+\newcount \pts@f@r
+\newdimen \set@width
+
+\def\massage@fontname#1 #2:{\def\curr@fontname{#1}}
+
+\def \scaletowidth#1#2{%
+ \set@width #1
+ \edef\f@name{\fontname\font\space:}%
+ \expandafter\massage@fontname\f@name
+ \pts@f@r \f@size
+ \setbox 0 = \hbox{#2}%
+ \ifdim \wd 0 < \set@width
+ \def\@increment{1}%
+ \def\@test{<}%
+ \else
+ \def\@increment{-1}%
+ \def\@test{>}%
+ \fi
+ \loop
+ \font\temp@font=\curr@fontname\space at \the\pts@f@r pt
+ \setbox 0 = \hbox{{\temp@font #2}}%
+ \message {\curr@fontname->\the \pts@f@r...}%
+ \ifdim \wd 0 \@test \set@width
+ \advance \pts@f@r by \@increment
+ \repeat
+ \advance \pts@f@r by -\@increment
+ \message {The calculated font size is \the \pts@f@r pt}%
+ \font\temp@font=\curr@fontname\space at \the\pts@f@r pt
+ \hbox to \set@width {\hss{\temp@font #2}\hss}%
+ }
+\endinput
+
+
+Example:
+
+\scaletowidth{50cm}{Now is the time for the Party}
diff --git a/macros/latex209/contrib/misc/sfwmac.sty b/macros/latex209/contrib/misc/sfwmac.sty
new file mode 100644
index 0000000000..3b75864e59
--- /dev/null
+++ b/macros/latex209/contrib/misc/sfwmac.sty
@@ -0,0 +1,60 @@
+% LaTeX support for writing UNIX-style documentation
+
+
+% UNIX-style references
+
+\def\sfwFILfont{\sl}
+
+\def\@egaux#1#2#3{%
+ \def#1##1{%
+ #2\begingroup \tt \let\do=\@makeother \dospecials
+ \def\@tempa####1##1{####1\endgroup#3}\@tempa
+ }%
+}
+
+\def\pgm#1{\mbox{\it#1}\index{#1}} % programs
+\def\xpgm#1#2{\mbox{\it#1}\index{\noexpand\noexpand\noexpand#2{}}}
+\def\man#1(#2){\xpgm{#1\/}{#1}(#2)} % manual entries
+\@egaux\arg{`{}}{'{}} % arguments to programs
+\@egaux\switch{`{}-}{'{}} % switches to programs
+\def\file#1{\mbox{\sfwFILfont#1}} % filename
+
+
+% Commonly used software systems
+
+\def\sfwPGMfont{\tt}
+
+\def\@sfwdef#1#2{\@sfwaux{#1/}{#2}}
+\def\@sfwaux#1#2{\def#1{\mbox{#2}\index{\noexpand\noexpand\noexpand#1{}}}}
+
+\@sfwdef\EMACS{\sfwPGMfont EMACS}
+\@sfwdef\INFO{\sfwPGMfont INFO}
+\@sfwdef\MLisp{\sfwPGMfont MLisp}
+
+\@sfwdef\SendMail{\sfwPGMfont SendMail}
+\@sfwdef\UUCP{\sfwPGMfont UUCP}
+
+\def\AmS{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$}
+\@sfwaux\AmSTeX{\rm \AmS-\TeX}
+
+\@sfwaux\PhDTeX{\rm P\kern-.05em{\sc h\kern-.025em D}\kern-0.08em\TeX}
+
+\@sfwaux\LaTeX{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}
+\@sfwaux\BibTeX{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em\TeX}
+\@sfwaux\SLiTeX{\rm S\kern-.06em{\sc l\kern-.035emi}\kern-.06em\TeX}
+\@sfwaux\BibTeX{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em\TeX}
+
+\@sfwdef\WEB{\sfwPGMfont WEB}
+
+\@sfwdef\Prolog{\sfwPGMfont Prolog}
+\@sfwdef\Lisp{\sfwPGMfont Lisp}
+
+\@sfwdef\DBUG{\sfwPGMfont DBUG}
+
+\@sfwdef\troff{\sfwPGMfont troff}
+\@sfwdef\nroff{\sfwPGMfont nroff}
+\@sfwdef\Miranda{\sfwPGMfont Miranda}
+\@sfwdef\AiM{\sfwPGMfont AiM}
+\@sfwdef\ASN{\sfwPGMfont ASN.1}
+\@sfwdef\ISODE{\sfwPGMfont ISODE}
+
diff --git a/macros/latex209/contrib/misc/shsulet.sty b/macros/latex209/contrib/misc/shsulet.sty
new file mode 100644
index 0000000000..30db8d9b7f
--- /dev/null
+++ b/macros/latex209/contrib/misc/shsulet.sty
@@ -0,0 +1,394 @@
+% Save file as: SHSULET.STY Source: FILESERV@SHSU.BITNET
+% SHSULET.STY Document Style -- with liberal extractions from
+% Leslie Lamport's ARTICLE.STY
+\typeout{Document Style 'shsulet'. Released August 10, 1989}
+\typeout{Letterhead design -- Sam Houston State University}
+\typeout{}
+% Letterhead style file for use in LaTeX. Default institution is Sam Houston
+% State University. Copyright, 1989, George D. Greenwade
+% Author: George D. Greenwade, Director, Center for Business and Economic
+% Research, Sam Houston State Univeristy, Huntsville, TX 77341-2056
+% Voice: (409) 294-1518 BITNET: BED_GDG@SHSU
+% Original Release: August 10, 1989 (GDG)
+% Modification History: August 14, 1989 \memo option added (GDG)
+%
+% This style is provided for public domain use. The author provides no
+% warranty, express or implied, regarding the fitness of this code for any
+% specific use, nor for any loss associated with its use. Any comments or
+% suggestions regarding enhancement of this style will be welcomed by the
+% author. NOTE: THIS IS A MAIN STYLE FILE AND IS NOT DESIGNED TO BE USED
+% AS A SUB-STYLE OF ANY EXISTING LaTeX STYLE FILES.
+%
+% Usage (example):
+% \documentstyle{shsulet}
+% \sender{George D. Greenwade}
+% \title{Ph.D., Director}
+% \dept{Center for Business and Economic Research}
+% \deptaddress{P. O. Box 2056\\
+% Huntsville, TX 77341-2056 \hfill Bitnet: bed\_gdg@shsu}
+% \deptphone{(409) 294-1518}
+% \toname{Dr. Martin J. Anisman}
+% \toaddress{Office of the President\\
+% Sam Houston State University \\
+% Huntsville, TX 77341-2001}
+% \prepare{GDG:ltx}
+% \cc{Leslie Lamport \\ Donald E. Knuth}
+% \re{Letterhead style file in \LaTeX}
+% \attach{1}{Commands for use in {\tt shsulet.sty}}
+% \encl{2}{{\sl The \TeX book}\\
+% {\sl \LaTeX\ A Document Preparation System}}
+% \letterhead
+%
+% Text of the letter. Paragraphs are block style and a proper skip is provided
+% so that \verb+\\+ characters are not needed.
+%
+% \closing
+%
+% Alternatively, if a memo on letterhead is desired, replace the command
+% \letterhead with the command \memo. This creates a memo-style document.
+
+% The code for shsulet
+
+\def\@ptsize{1} % This style uses a basic article layout
+\@options % in 11 point (hardcoded), which accepts sub-style
+\input art11.sty \relax % arguments (useful for personal styles to define
+ % many standard definitions for a user).
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Standard article definitions %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+\def\theequation{\arabic{equation}}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+% SHSULET Style specific %
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Page layouts
+\textwidth 6.5in
+\textheight 8.8in
+\topmargin .15in
+\topsep .4em
+\oddsidemargin 0in
+\headheight 9pt
+\headsep 12pt
+\parskip .7em
+\parindent 0pt
+\partopsep 0pt
+\itemsep .4em
+\raggedbottom
+
+% Penalties
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+\brokenpenalty=10000 % No broken words across columns/pages
+\widowpenalty=10000 % No widows at bottom of page
+\clubpenalty=10000 % No orphans at top of page
+\widowpenalty=10000 % No widows at bottom of page
+\clubpenalty=10000 % No orphans at top of page
+
+\newdimen\headlinenames
+\headlinenames=\textwidth \advance \headlinenames-5mm
+
+% Information to be included --
+% Legend for notes: f.p.=for personalization, f.l.=for letterhead,
+% f.t.=for text, f.c.=for closing
+\def\instname#1{\gdef\@instname{#1}} % Institution name (f.l.)
+ \gdef\@instname{Sam Houston State University}
+ %--Default institution SHSU
+\def\sender#1{\def\sender{#1}\gdef\@sender{#1}}
+ % Sender's name (f.p.)
+ \gdef\@sender{}
+\def\title#1{\gdef\@title{, #1}} % Sender's title (f.p.)
+ \gdef\@title{} %--Default title empty
+\def\dept#1{\edef\dept{#1}} % Sender's department (f.l.)
+\def\deptphone#1{\edef\deptphone{#1}} % Sender's phone (f.l.)
+\def\deptaddress#1{\def\deptaddress{#1}} % Sender's address (f.l.)
+\def\toname#1{\gdef\@toname{To: #1} \def\toname{#1}}
+ % Recipient's name (f.t.)
+ \gdef\@toname{} %--Default recipient empty
+\def\toaddress#1{\gdef\@toaddress{#1} \def\toaddress{#1}}
+ % Recipients address (f.t.)
+ \gdef\@toaddress{} %--Default address empty
+\def\closingtext#1{\gdef\@closingtext{#1}} % Closing phrase (f.t.)
+ \gdef\@closingtext{Sincerely,} %--Default closing is Sincerely,
+\def\date#1{\gdef\@date{#1}} % Date of letter (f.t.)
+ \gdef\@date{\today} %--Default date is \today
+\def\nodate{\gdef\@date{ }} % Don't date letter
+\def\re#1{\gdef\@re{\vspace*{.1in}\ \\
+RE: #1 }\gdef\topic{#1}} % Subject of letter (f.t.)
+ \gdef\@re{} \gdef\topic{} %--Default subject is empty
+\def\signature#1{\gdef\@signature{#1}} % Sender's signature (f.c.)
+ \gdef\@signature{\sender} %--Default signature is \sender
+\def\runhead#1{\gdef\@runhead{#1}} % User specified left heading
+ \gdef\@runhead{} %--No specialized heading
+\def\downshift#1{\gdef\@downshift{#1}}
+ \gdef\@downshift{0}
+
+\def\headertext{\ifx\@empty \@toname \let\@toname\@runhead \fi
+\ifx\@empty \@toname {\@date} \else
+{\ignorespaces\@toname \hfil \@date } \fi}
+
+\def\personalline{\ifx\@empty\@sender {} \else
+{\vspace*{1mm} \ \\
+\hspace*{-12mm} {\sf \sender\@title} \\ } \fi} % \vspace*{.1in}\ \\
+
+\def\prepare#1{\gdef\@prepare{\ \\ #1\ \\}}
+\gdef\@prepare{}
+
+\def\cc#1{\gdef\@cc{cc: \begin{tabular}[t]{l}
+#1 \\
+\end{tabular}\ \\}}
+\gdef\@cc{}
+
+\def\attach#1#2{\def\attcount{#1} \def\attlist{#2} \gdef\@attach{\ \\
+Attached \ifx\@empty \attcount {} %#1 {}
+\else {(#1)}
+\fi
+\ifx\@empty #2 {}
+\else
+{\begin{tabular}[t]{l}
+#2 \\
+\end{tabular}\ \\}
+\fi
+}}
+\gdef\@attach{}
+
+\def\encl#1#2{\def\enccount{#1} \def\enclist{#2} \gdef\@encl{\ \\
+Enclosed \ifx\@empty \enccount {} %#1 {}
+\else {(#1)}
+\fi
+\ifx\@empty #2 {}
+\else
+{\begin{tabular}[t]{l}
+#2 \\
+\end{tabular}\ \\}
+\fi
+}}
+\gdef\@encl{}
+
+\def\ps@headings{\def\@oddhead{\sl \headertext
+\hfil Page \thepage}\def\@oddfoot{}}
+
+\def\ps@empty{\def\@oddhead{}\def\@oddfoot{}\def\@evenhead{}\def\@evenfoot{}}
+
+\pagestyle{headings}
+\thispagestyle{empty}
+\pagenumbering{arabic}
+
+\def\letterhead{\begin{document}
+\vspace*{-.8in}
+\begin{center}
+{\Huge\bf \@instname}\\
+\end{center}
+{\large \sc
+\begin{tabular}[t]{p{\headlinenames}}
+\dept \hfill \deptphone \\
+\deptaddress \\
+\end{tabular}}\newline
+\rule[.7ex]{6.5in}{.4mm}\\
+\ifx\@empty \personalline \vspace*{-.5in}\\
+ \else
+\personalline \\
+\fi
+\rule{0pt}{\@downshift in}\\
+\@date\\
+\ifx\@empty \@toname {} \else
+{\vspace*{.1in}\ \\
+\hspace*{-2mm}\begin{tabular}{l}
+\toname \\ \end{tabular}\ \\ }\fi
+\ifx\@empty \@toaddress {} \else
+{\hspace*{-2mm}\begin{tabular}{l}
+\toaddress \\
+\end{tabular}\ \\} \fi
+\@re
+}
+
+\def\memo{\begin{document}
+\vspace*{-.8in}
+\begin{center}
+{\Huge\bf \@instname}\\
+\end{center}
+{\large \sc
+\begin{tabular}[t]{p{\headlinenames}}
+\dept \hfill \deptphone \\
+\deptaddress \\
+\end{tabular}}\newline
+\rule[.7ex]{6.5in}{.4mm}\\
+\ifx\@empty \personalline \vspace*{-.5in}\\
+ \else
+\personalline
+\fi
+\vspace*{-3mm}
+\begin{center}
+{\large\bf MEMORANDUM}
+\end{center}
+{%\vspace*{.1in}\ \\
+\hspace*{-2mm}\begin{tabular}{ll}
+To: & \toname \\ %\\
+From: \rule{0pt}{5mm} & \@signature \\ %\\
+Date: \rule{0pt}{5mm} & \@date \\
+%@re
+RE: \rule{0pt}{5mm} & \topic \\
+\end{tabular}\ \\ }
+\closingtext{}
+\signature{\vspace*{-.8in}}
+}
+
+\def\closing{\vspace*{\parskip}
+\begin{minipage}{6in}
+\@closingtext\ \\
+\vspace*{.4in} \ \\
+\@signature\ \\
+\ifx\@empty \@prepare {} \else
+{\@prepare} \fi
+\ifx\@empty \@cc {} \else
+{\@cc} \fi
+\ifx\@empty \@attach {} \else
+{\@attach} \fi
+\ifx\@empty \@encl {} \else
+{\@encl} \fi
+\end{minipage}
+\end{document}
+}
+
+\def\letterheadcopy{\begin{document}
+\vspace*{-.8in}
+\begin{center}
+{\Huge\bf \@instname}\\
+\end{center}
+{\large \sc
+\begin{tabular}[t]{p{\headlinenames}}
+\dept \hfill \deptphone \\
+\deptaddress \\
+\end{tabular}}\newline
+\rule[.7ex]{6.5in}{.4mm}\\
+\ifx\@empty \personalline \vspace*{-.5in}\\
+ \else
+\personalline \\
+\fi
+\rule{0pt}{\@downshift in}\\
+\@date \rule{4in}{0pt}{\huge\bf COPY}\\
+\ifx\@empty \@toname {} \else
+{\vspace*{.1in}\ \\
+\hspace*{-2mm}\begin{tabular}{l}
+\toname \\ \end{tabular}\ \\ }\fi
+\ifx\@empty \@toaddress {} \else
+{\hspace*{-2mm}\begin{tabular}{l}
+\toaddress \\
+\end{tabular}\ \\} \fi
+\@re
+}
+
diff --git a/macros/latex209/contrib/misc/side.sty b/macros/latex209/contrib/misc/side.sty
new file mode 100644
index 0000000000..778569fbe1
--- /dev/null
+++ b/macros/latex209/contrib/misc/side.sty
@@ -0,0 +1,74 @@
+%% Save file as: SIDE.STY Source: FILESERV@SHSU.BITNET
+%+
+% Name:
+% side.sty
+% Purpose:
+% Include sideways (landscape) tables and figures in LaTeX documents
+% by defining new environments called sidetable and sidefigure.
+% Three options are available for placement along the width of the
+% printed page:
+% flush top [t]
+% centered (default) [c]
+% flush bottom [b]
+% Standard LaTeX behavior (flush left) is preserved in the other
+% direction.
+% Usage:
+% \documentstyle[side,...]{...}
+%
+% \begin{sidetable}
+% \caption{\label{mysidetable} A landscape floating table on a page.}
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% Column1&Column2\\
+% Line1&\\
+% &Line2\\
+% \hline
+% \end{tabular}
+% \end{center}
+% \end{sidetable}
+%
+% \begin{sidefigure}
+% \hbox to \textheight{\hss \fbox{CENTERED FIGURE}\hss}
+% \caption{\label{mysidefigure} A landscape floating figure on a page.}
+% \end{sidefigure}
+% Restrictions:
+% Works only with PostScript.
+% Requires rotate.tex (part of dvips distribution)
+% Modification History:
+% write, 17 Oct 91, F.K.Knight and M.F.Ryba, MIT Lincoln Laboratory
+% add placement options, 3 Dec 91, FKK
+%-
+%
+% =====>> Both environments use rotate.tex
+%
+\ifx\undefined\rotl\input{rotate}\fi
+\newbox\rotbox
+
+% from psfig
+\edef\sideRestoreAt{\catcode`@=\number\catcode`@\relax}
+\catcode`\@=11\relax
+%
+% =====>> Sidetable: a rotated table environment.
+% =====>> Since \newenvironment can't take definition with optional args,
+% =====>> mimic code for \parbox in latex.tex.
+%
+\def\sidetable{\@ifnextchar [{\@sidetable}{\@sidetable[c]}}
+\long\def\@sidetable[#1]{\begin{table}[p]%
+ \setbox\rotbox\vbox to \textwidth\bgroup\hsize=\textheight
+ \if #1t\else\vss\fi
+ \if #1b\edef\@sideend{}\else\edef\@sideend{\vss}\fi}
+\long\def\endsidetable{\@sideend\egroup \rotl\rotbox\end{table}}
+%
+% =====>> Sidefigure: a rotated figure environment,
+%
+\def\sidefigure{\@ifnextchar [{\@sidefigure}{\@sidefigure[c]}}
+\long\def\@sidefigure[#1]{\begin{figure}[p]%
+ \setbox\rotbox\vbox to \textwidth\bgroup\hsize=\textheight
+ \if #1t\else\vss\fi
+ \if #1b\edef\@sideend{}\else\edef\@sideend{\vss}\fi}
+\long\def\endsidefigure{\@sideend\egroup \rotl\rotbox\end{figure}}
+%
+% =====>> FINISH
+%
+\sideRestoreAt
diff --git a/macros/latex209/contrib/misc/sines.tex b/macros/latex209/contrib/misc/sines.tex
new file mode 100644
index 0000000000..4d5cbc4daf
--- /dev/null
+++ b/macros/latex209/contrib/misc/sines.tex
@@ -0,0 +1,47 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% macros to calculate sines from 90 to -90
+% Jim Walker, Dept Mathematics, University of South Carolina
+\newdimen\x
+\newdimen\y
+\newdimen\xsquare
+\newdimen\xfourth
+{% change char codes
+ \catcode`\p=12
+ \catcode`\t=12
+ \gdef\numonly#1pt{%
+ \def\xx{#1}%
+ }%
+}%
+\def\MULTyBYx{%
+ \expandafter\numonly\the\x
+ \edef\b{\y=\xx\y}%
+ \b
+}%
+\def\calcsin{% Find sin(\x) and put it in \y. Say \x is in degrees.
+ \x=0.0174533\x % Convert to radians.
+ \y=\x
+ \MULTyBYx
+ \xsquare=\y
+ \MULTyBYx
+ \MULTyBYx
+ \xfourth=\y
+ \y=1pt
+ \advance\y by -0.1666666\xsquare
+ \advance\y by 0.008333333\xfourth
+ \MULTyBYx
+}%
+% Example of use:
+%\x=23pt \calcsin \expandafter\numonly\the\y
+% Now \xx should contain the sine of 23 degrees.
+%\def\sine#1{\x=#1 \calcsin \expandafter\numonly\the\y \message{sine of
+%#1 is \xx}}
+%----------------------------------------------------------
+% given a box with width W and height H, then its height after rotation by R
+% is W * sin(R) + H * cos(R), and it extends W * cos(R) to the right
+% and H * sin(R) to the left
+% (arithmetic courtesy of Nico Poppelier)
+%
+\newdimen\xh\newdimen\xw\newdimen\xtemp\newdimen\xcos\newdimen\xsin
+\newdimen\xleft\newdimen\xright
+\def\MULTxtempBYxcos{\expandafter\numonly\the\xcos\edef\b{\xtemp=\xx\xtemp}\b}%
+\def\MULTxtempBYxsin{\expandafter\numonly\the\xsin\edef\b{\xtemp=\xx\xtemp}\b}%
diff --git a/macros/latex209/contrib/misc/slem.sty b/macros/latex209/contrib/misc/slem.sty
new file mode 100644
index 0000000000..5a60bb6ab0
--- /dev/null
+++ b/macros/latex209/contrib/misc/slem.sty
@@ -0,0 +1,14 @@
+%
+% Modify \em so that is uses \sl rather than \it
+%
+% Richard Furuta
+% Department of Computer Science
+% University of Maryland
+% College Park, MD 20742
+%
+% furuta@mimsy.umd.edu
+% seismo!umcp-cs!furuta
+%
+% October 22, 1986, first release
+%
+\renewcommand{\pem}{\ifdim \fontdimen\@ne\font >\z@ \rm \else \sl \fi}
diff --git a/macros/latex209/contrib/misc/smaller.sty b/macros/latex209/contrib/misc/smaller.sty
new file mode 100644
index 0000000000..0576f422de
--- /dev/null
+++ b/macros/latex209/contrib/misc/smaller.sty
@@ -0,0 +1,40 @@
+%Date: Thu, 1 Feb 90 15:23:02 EST
+%From: Bernie Cosell <cosell@WILMA.BBN.COM>
+%Subject: Relative font sizing in LaTeX
+%Keywords: LaTeX, font sizing
+%
+% Modified 1-May-1990 Don Hosek to allow it to work properly when input
+% by another .sty file.
+%
+%One continual annoyance to me is that LaTeX does absolute font sizing,
+%and so if you have some \newcommand that uses the sizing commands to
+%achieve some graphic effect, you'll discover that your chapter heads
+%and footnotes and such are pretty screwed up [in a recent case, I
+%wanted a fake small-caps-san-serif font, and so I used {\small\sf
+%NOWISTHETIME}, which did just what I wanted in the running text, but
+%was an unmitigated disaster in the chapter heads]. I think that the
+%following is a significant improvement: \smaller and \larger changes
+%the point size *relatively* by one slot, and so I made my definition:
+%{\smaller\sf NOWISTHETIME}, and it all magically works. The
+%definitions are:
+
+\def\smaller{\ifx\@currsize\Huge \protect\huge \else
+ \ifx\@currsize\huge \protect\LARGE \else
+ \ifx\@currsize\LARGE \protect\Large \else
+ \ifx\@currsize\Large \protect\large \else
+ \ifx\@currsize\large \protect\normalsize \else
+ \ifx\@currsize\normalsize \protect\small \else
+ \ifx\@currsize\small \protect\footnotesize \else
+ \ifx\@currsize\footnotesize \protect\scriptsize \else
+ \protect\tiny
+ \fi\fi\fi\fi\fi\fi\fi\fi}
+\def\larger{\ifx\@currsize\tiny \protect\scriptsize \else
+ \ifx\@currsize\scriptsize \protect\footnotesize \else
+ \ifx\@currsize\footnotesize \protect\small \else
+ \ifx\@currsize\small \protect\normalsize \else
+ \ifx\@currsize\normalsize \protect\large \else
+ \ifx\@currsize\large \protect\Large \else
+ \ifx\@currsize\Large \protect\LARGE \else
+ \ifx\@currsize\LARGE \protect\huge \else
+ \protect\Huge
+ \fi\fi\fi\fi\fi\fi\fi\fi}
diff --git a/macros/latex209/contrib/misc/smalltalk.sty b/macros/latex209/contrib/misc/smalltalk.sty
new file mode 100644
index 0000000000..9a30dde0fc
--- /dev/null
+++ b/macros/latex209/contrib/misc/smalltalk.sty
@@ -0,0 +1,161 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Mario Wolczko",
+%%% version = "3",
+%%% date = "21 May 1992",
+%%% time = "21:02:11 BST",
+%%% filename = "smalltalk.sty",
+%%% address = "Dept of Computer Science
+%%% The University of Manchester
+%%% Oxford Road
+%%% Manchester M13 9PL
+%%% UK",
+%%% telephone = "+44-61-275-6146",
+%%% FAX = "+44-61-275-6236",
+%%% checksum = "56043 161 377 5156",
+%%% email = "mario@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, Smalltalk programming language",
+%%% supported = "yes",
+%%% docstring = "Useful for typesetting small fragments of
+%%% the Smalltalk programming language",
+%%% }
+%%% ====================================================================
+%
+% example:
+%
+% \begin{smalltalk}
+% \category{Magnitudes-Numbers}
+% \class{Integer}
+% \superclass{Object}
+% \instvars{a b c}
+% \protocol{arithmetic functions}
+% \begin{method}{factorial}
+% | f |
+% self isZero
+% ifTrue: [n _ 1]
+% ifFalse: [n _ self * (self - 1) factorial].
+% ^n
+% \end{method}
+% \classmeths
+% ...
+% \end{smalltalk}
+%
+
+% warning: if you put a Smalltalk environment inside a list (e.g.,
+% itemize, description, etc, then don't have a paragraph skip between
+% it and the next item. Example:
+% \begin{itemize}
+% \item blah blah
+% \begin{smalltalk}
+% code
+% \end{smalltalk} % don't put a blank line after this
+% \item ....
+%
+
+
+\def\@fmtname{lplain}
+\def\@psfmtname{pslplain}
+
+\newenvironment{smalltalk}{\@beginst}{\@endst}
+
+\def\st{\protect\@st}
+\def\@st{\@setSTcatcodes\smalltalkfont} % for in-line code
+
+\newdimen\stindent \stindent=\parindent
+
+\def\@beginst{\everymath{}\vskip1ex \leftskip=\stindent
+ \baselineskip=\stbaselineskip \parskip=0pt
+% \parskip=\stbaselineskip
+ \@setSTcatcodes\@vobeyspaces\obeylines\noindent\smalltalkfont}
+
+\newdimen\stbaselineskip \stbaselineskip\baselineskip
+
+\def\@endst{\vskip1ex
+ \global\everypar={{\setbox0=\lastbox}%
+ \global\everypar={}%
+ \global\let\par=\@@par}
+ \global\let\par=\@undonoindent}
+\def\@undonoindent{\global\everypar={}\global\let\par=\@@par\@@par}
+
+\def\class#1{\noindent\hbox to 7em{\rm class\hfil}\smalltalkfont
+ #1\par\vskip 1ex\relax}
+
+\def\category#1{\noindent\hbox to 7em{\rm category\hfil}\smalltalkfont
+ #1\par\vskip 1ex\relax}
+
+\def\protocol#1{\noindent\hbox to 7em{\rm protocol\hfil}\smalltalkfont
+ #1\par\vskip 1ex\relax}
+
+\def\superclass#1{\noindent\hbox to 7em{\rm superclass\hfil}\smalltalkfont
+ #1\par\vskip 1ex\relax}
+
+\def\instvars#1{\noindent\hbox to 9em{\rm instance variables\hfil}\smalltalkfont
+ #1\par\vskip 1ex\relax}
+
+\def\classmeths{\noindent\rm class methods\par\vskip 1ex\relax}
+
+\newenvironment{method}{\@beginmethod}{\@endmethod}
+
+\ifx\fmtname\@fmtname % standard LaTeX is OK
+ \ifx\selectfont\@undefined
+ \def\smalltalkfont{\sf}
+ \ifcase\@ptsize
+ \font\smalltalkboldfont=cmssbx10
+ \or
+ \font\smalltalkboldfont=cmssbx10 scaled\magstep1
+ \or
+ \font\smalltalkboldfont=cmssbx10 scaled\magstep2
+ \fi
+ \else
+ \def\smalltalkfont{\family{cmss}\series{m}\shape{n}\selectfont}
+ \def\smalltalkboldfont{\family{cmss}\series{bx}\shape{n}\selectfont}
+ \fi
+\else \ifx\fmtname\@psfmtname % so is pslatex
+ \ifx\selectfont\@undefined
+ \def\smalltalkfont{\sf}
+ \ifcase\@ptsize
+ \font\smalltalkboldfont=phvb0 at 9pt
+ \or
+ \font\smalltalkboldfont=phvb0 at 10pt
+ \or
+ \font\smalltalkboldfont=phvb0 at 11pt
+ \fi
+ \else
+ \def\smalltalkfont{\family\sfdefault\series{m}\shape{n}\selectfont}
+ \def\smalltalkboldfont{\family\sfdefault\series{b}\shape{n}\selectfont}
+ \fi
+\else % SliTeX is different
+ \font\smalltalkboldfont=cmssbx10 at 20.74pt
+ \def\smalltalkfont{\rm}
+\fi\fi
+
+\def\@beginmethod#1{\vbox\bgroup\noindent{\smalltalkboldfont#1}}
+
+\def\@st@under{$\leftarrow$}
+\def\@st@uparrow{$\uparrow$}
+\def\@st@bar{$\mid$}
+\def\@st@lt{$\mathchar"313C$}
+\def\@st@gt{$\mathchar"313E$}
+%\def\@st@minus{$\mathchar"2200$}
+
+{\catcode`\_=\active \catcode`\^=\active \catcode`\|=\active
+ \catcode`\<=\active \catcode`\>=\active%\catcode`\-=\active
+ \gdef\@setSTcatcodes{%
+ \@makeother\#\@makeother\%\@makeother\~%
+ \catcode`\_=\active \catcode`\^=\active \catcode`\|=\active
+ \catcode`\<=\active \catcode`\>=\active%\catcode`\-=\active
+ \let_\@st@under \let^\@st@uparrow \let|\@st@bar
+ \let<\@st@lt \let>\@st@gt}} %\let-\@st@minus}}
+
+%{\catcode`\_=\active \catcode`\^=\active \catcode`\|=\active
+% \catcode`\<=\active \catcode`\>=\active%\catcode`\-=\active
+% \gdef\@setSTcatcodes{%
+% \@makeother\#\@makeother\%\@makeother\~%
+% \catcode`\_=\active \catcode`\^=\active \catcode`\|=\active
+% \catcode`\<=\active \catcode`\>=\active%\catcode`\-=\active
+% \def_{$\leftarrow$}\def^{$\uparrow$}\def|{$\mid$}%
+% \def<{$\mathchar"313C$}\def>{$\mathchar"313E$}}}
+% \def-{$\mathchar"2200$}}}
+
+\def\@endmethod{\strut\egroup}
diff --git a/macros/latex209/contrib/misc/sober.sty b/macros/latex209/contrib/misc/sober.sty
new file mode 100644
index 0000000000..2bfd1a71fb
--- /dev/null
+++ b/macros/latex209/contrib/misc/sober.sty
@@ -0,0 +1,147 @@
+% SOBER.STY van Nico Poppelier
+% --------------------------------------
+% Koppen van secties, subsecties, ...
+% --------------------------------------
+%
+% --------------------------------------
+% fontgrootte en regelafstand
+% (met de notatie X/Y wordt bedoeld
+% 'letter X op regelafstand Y')
+% --------------------------------------
+%
+% 10pt 11pt 12pt
+% \scriptsize 7/ 8 8/ 9.5 8/ 9.5
+% \tiny 5/ 6 6/ 7 6/ 7
+% \small 9/11 10/12 11/13.6
+% \footnotesize 8/ 9.5 9/11 10/12
+% \@normalsize 10/12 11/13.6 12/15
+% \large 12/14 12/14 14/18
+% \Large 14/18 14/18 17/22
+% \LARGE 17/22 17/22 20/25
+% \huge 20/25 20/25 25/30
+% \Huge 25/30 25/30 25/30
+%
+% de syntax van \@startsection is:
+% \@startsection
+% {Name}{Level}{Indent}{Before_skip}{After_Skip}{Type_face}
+% Indent : inspring van kop vanaf linkermarge
+% Before_skip: wit boven kopje
+% (< 0 geeft aan dat eerste alinea niet inspringt)
+% After_skip : wit onder kopje indien >= 0
+% horizontaal wit na kopje,
+% met kopje op de regel indien < 0
+%
+% notatie voor <glue>: <dimen>(<stretch>)(<shrink>)
+%
+% in LaTeX's standaard-stijlen (onafhankelijk van \@ptsize):
+%
+% Indent Before_skip After_skip Type_face
+% section 0 -3.5ex (-1ex)(-0.2ex) 2.3ex(0.2ex) \Large\bf
+% subsection 0 -3.25ex(-1ex)(-0.2ex) 1.5ex(0.2ex) \large\bf
+% subsubsection 0 -3.25ex(-1ex)(-0.2ex) 1.5ex(0.2ex) \normalsize\bf
+% paragraph 0 3.25ex( 1ex)( 0.2ex) -1em()() \normalsize\bf
+% subparagraph \parindent 3.25ex( 1ex)( 0.2ex) -1em()() \normalsize\bf
+%
+%
+% in een soberder uitvoering (onafhankelijk van \@ptsize):
+%
+\def\section{\@startsection{section}{1}
+{\z@}{-2.5ex plus -0.5ex minus -0.1ex}{0.5ex plus 0.1ex}{\large\bf}}
+\def\subsection{\@startsection{subsection}{2}
+{\z@}{-2.25ex plus -0.3ex minus -0.2ex}{0.05ex plus 0.05ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}
+{\z@}{-2.25ex plus -0.3ex minus -0.2ex}{0.05ex plus 0.05ex}{\normalsize\sc}}
+\def\paragraph{\@startsection{paragraph}{4}
+{\z@}{2ex plus 0.5ex minus 0.1ex}{-0.7em}{\normalsize\it}}
+\def\subparagraph{\@startsection{subparagraph}{4}
+{\parindent}{2ex plus 0.5ex minus 0.1ex}{-0.7em}{\normalsize\it}}
+%
+% --------------------------------------
+% Hoofdstuk-koppen
+% --------------------------------------
+%
+% LaTeX's book style (standaard documentstijl) definieert
+% de hoofdstuk-koppen onafhankelijk van \@ptsize
+%
+\def\@makechapterhead#1{\vspace*{20pt}%
+{\parindent 0pt\Large\bf \ifnum\c@secnumdepth>\m@ne\thechapter \fi
+ \parbox[t]{0.7\textwidth}{\raggedright #1}\par\nobreak \vskip25pt} }
+%
+\def\@makeschapterhead#1{
+ \vspace*{20pt} { \parindent 0pt \raggedright
+ \LARGE\bf#1\par\nobreak\vskip25pt } }
+%
+% --------------------------------------
+% List-omgevingen (itemize en enumerate)
+% --------------------------------------
+%
+% De volgende parameters zijn relevant in een list-omgeving:
+%
+% \labelsep : afstand tussen label en item
+% \labelwidth : breedte van label
+% \leftmargin : afstand tussen linkermarge en item
+% \rightmargin : afstand tussen item en rechtermarge
+% \listparindent: indentatie voor vervolg-alinea's in item
+% \parsep : verticaal wit tussen vervolg-alinea's in item
+% \itemsep : verticaal wit tussen opeenvolgende item's
+% \topsep,
+% \partopsep : wit boven item 1 = \topsep + \parskip
+% (geen alinea-overgang boven lijst)
+% wit boven item 1 = \topsep + \parskip + \partopsep
+% (alinea-overgang boven lijst)
+%
+% zie verder LaTeX-boek 5.7.1 en C.5.3
+% --------------------------------------
+%
+% De parameters voor niveau 1 worden gedefinieerd op top-niveau en
+% \@listi definieert uitsluitend \leftmargin
+%
+% size = small (9pt, 10pt, 11pt)
+\def\@listi{\topsep 0.4ex \parsep 0pt \itemsep \parsep}
+% \topsep 4pt(2pt)(2pt) 6pt(2pt)(2pt) 9pt(3pt)(5pt)
+% \parsep 2pt(1pt)(1pt) 3pt(2pt)(1pt) 4.5pt(2pt)(1pt)
+%
+% size = footnotesize (8pt, 9pt, 10pt)
+\def\@listi{\topsep 0.4ex \parsep 0pt \itemsep \parsep}
+% \topsep 3pt(1pt)(1pt) 4pt(2pt)(2pt) 6pt(2pt)(2pt)
+% \parsep 2pt(1pt)(1pt) 2pt(1pt)(1pt) 3pt(2pt)(1pt)
+%
+% size = normalsize (and bigger)
+% \parskip 0pt(1pt) 0pt(1pt) 0pt(1pt)
+% \parindent 15pt 17pt 1.5em
+% \topsep 8pt(2pt)(4pt) 9pt(3pt)(5pt) 10pt(4pt)(6pt)
+% \partopsep 2pt(1pt)(1pt) 3pt(1pt)(2pt) 3pt(2pt)(2pt)
+% \itemsep 4pt(2pt)(1pt) 4.5pt(2pt)(1pt) 5pt(2.5pt)(1pt
+% \parsep 4pt(2pt)(1pt) 4.5pt(2pt)(1pt) 5pt(2.5pt)(1pt)
+\topsep 0.4ex \partopsep 0pt \itemsep 0pt \parsep 0pt
+%
+% \leftmargini 2.5em \leftmarginii 2.2em \leftmarginiii 1.87em
+% \leftmarginiv 1.7em \leftmarginv 1.0em \leftmarginvi 1.0em
+%
+% \leftmargin\leftmargini
+% \labelwidth\leftmargini\advance\labelwidth-\labelsep
+% \labelsep 0.5em
+%
+% \def\@listi{\leftmargin\leftmargini}
+%
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+% \topsep 4pt(2pt)(1pt) 4.5pt(2pt)(1pt) 5pt(2.5pt)(1pt)
+% \parsep 2pt(1pt)(1pt) 2pt(1pt)(1pt) 2.5pt(1pt)(1pt)
+ \topsep 0pt \parsep 0pt \itemsep \parsep}
+%
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+% \topsep 2pt(1pt)(1pt) 2pt(1pt)(1pt) 2.5pt(1pt)(1pt)
+% \partopsep 1pt(0pt)(1pt) 1pt(0pt)(1pt) 1pt(0pt)(1pt)
+ \parsep \z@ \topsep 0pt \partopsep 0pt \itemsep \topsep}
+%
+% \def\@listiv{\leftmargin\leftmarginiv
+% \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+%
+% \def\@listv{ \leftmargin\leftmarginv
+% \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+%
+% \def\@listvi{\leftmargin\leftmarginvi
+% \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/macros/latex209/contrib/misc/spacecites.sty b/macros/latex209/contrib/misc/spacecites.sty
new file mode 100644
index 0000000000..89438fa68f
--- /dev/null
+++ b/macros/latex209/contrib/misc/spacecites.sty
@@ -0,0 +1,20 @@
+% Modifications to the "report" \documentstyle to space out citations
+% in other words, this redefines the citation style to put spaces after
+% the commas: [Furu86, Furu87] instead of [Furu86,Furu87]
+%
+% Richard Furuta
+% Department of Computer Science
+% University of Maryland
+% College Park, MD 20742
+%
+% furuta@mimsy.umd.edu
+% seismo!umcp-cs!furuta
+%
+% October 22, 1986, first release
+%
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{, }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
diff --git a/macros/latex209/contrib/misc/spacing.sty b/macros/latex209/contrib/misc/spacing.sty
new file mode 100644
index 0000000000..530c07ff37
--- /dev/null
+++ b/macros/latex209/contrib/misc/spacing.sty
@@ -0,0 +1,51 @@
+\makeatletter
+
+% Single- and double-spacing macros for LATEX
+
+% To use these macros, simply include "spacing" as an optional argument to the
+% \documentsyle command, e.g.,
+%
+% \documentstyle[12pt,spacing]{article}
+%
+% in your LATEX file. The options can appear in any order.
+
+% These macros are designed to be used with \begin and \end in the typical
+% LATEX-environment way, e.g.,
+%
+% \begin{singlespace}
+% .
+% .
+% .
+% \begin{doublespace}
+% .
+% .
+% .
+% \end{doublespace}
+% .
+% .
+% .
+% \end{singlespace}
+
+\def\singlespace{\par%
+ \vskip \parskip%
+ \vskip \baselineskip%
+ \def\baselinestretch{1}%
+ \ifx\@currsize\normalsize\@normalsize\else\@currsize\fi%
+ \vskip -\parskip%
+ \vskip -\baselineskip}
+
+\def\endsinglespace{\par}
+
+\def\doublespace{\par%
+ \def\baselinestretch{2}%
+ \ifx\@currsize\normalsize\@normalsize\else\@currsize\fi}
+
+\def\enddoublespace{\par%
+ \vskip \parskip%
+ \vskip \baselineskip%
+ \endgroup%
+ \vskip -\parskip%
+ \vskip -\baselineskip%
+ \begingroup}
+
+\makeatother
diff --git a/macros/latex209/contrib/misc/sqmac.tex b/macros/latex209/contrib/misc/sqmac.tex
new file mode 100644
index 0000000000..80e88cf890
--- /dev/null
+++ b/macros/latex209/contrib/misc/sqmac.tex
@@ -0,0 +1,320 @@
+% This should appear in a file named SQMAC.TEX
+\long\def\ig#1{\relax}
+\ig{Thanks to Roberto Minio for this def'n. Compare the def'n of
+\comment in AMSTeX.}
+\ig{ Copyright 1988 Michael Barr
+ Department of Mathematics and Statistics
+ McGill University
+ Montreal, Quebec, Canada
+ H3P 1S4
+
+ inhb@mcgillc.bitnet
+
+ All commercial rights reserved. May be freely distributed
+ for non-commercial use, so long as this notice is included.}
+
+\setlength{\unitlength}{.1em}
+
+\newlength{\ulabeloffset}
+\newlength{\ulabelwidth}
+\newlength{\arrowwidth}
+\newlength{\lnodewidth}
+\newlength{\rnodewidth}
+\newlength{\loffset}
+\newlength{\roffset}
+
+\newcount\tarrowflag
+\newcount\larrowflag
+\newcount\rarrowflag
+\newcount\barrowflag
+\newcount\height
+\newcount\width
+\newcount\arrowlen
+\newcount\labelheight
+
+
+% The following is like \vector, except it makes a monic (tailed) arrow.
+
+\def\mvector(#1,#2)#3
+{
+\begin{picture}(#3,#3)(-2,0)
+\put(0,4){\vector(#1,#2){#3}}
+\put(0,4){\vector(#1,#2){3}}
+\end{picture}
+}
+
+% The following is like \vector, except it makes an epic (2-headed) arrow.
+
+\def\evector(#1,#2)#3
+{
+\arrowlen #3
+\begin{picture}(\arrowlen,\arrowlen)(-2,0)
+\put(0,4){\vector(#1,#2){\arrowlen}}
+\advance \arrowlen by -4
+\put(0,4){\vector(#1,#2){\arrowlen}}
+\end{picture}
+}
+
+
+\catcode`@=11 % unhide @sign definitions
+
+\def\absvector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+\@linelen=#3
+\ifnum\@xarg =0 \@vvector
+ \else \ifnum\@yarg =0 \@hvector \else \@svector\fi
+\fi}
+
+\catcode`@=12 % @signs are no longer letters
+
+\ig{This definition of \function below is a modification of one due to
+Charles Wells whose idea it was to try to make the length of the arrow
+depend on the sizes of the nodes. Much elaborated, it forms the basis
+of the square macro.}
+
+\newcommand{\setwidths}[4]
+{
+\settowidth{\lnodewidth}{#1}
+\settowidth{\rnodewidth}{#2}
+\setlength{\loffset}{0.5\lnodewidth}
+\setlength{\roffset}{0.5\rnodewidth}
+\addtolength{\loffset}{3\unitlength} %allows a little space
+\addtolength{\roffset}{3\unitlength} %before & after the arrow
+\setlength{\arrowwidth}{#4\unitlength}
+\addtolength{\arrowwidth}{-\loffset}
+\addtolength{\arrowwidth}{-\roffset}
+\setlength{\ulabeloffset}{\loffset}
+\settowidth{\ulabelwidth}{#3}
+\advance\ulabeloffset by .5\arrowwidth
+\advance\ulabeloffset by -.5\ulabelwidth
+}
+
+\newcommand{\dofunc}[4]
+{
+\setwidths{#1}{#2}{#3}{#4}
+\begin{picture}(0,0)
+\put(0,0){\makebox(0,0){#1}}
+\put(-3,0){\hspace{\loffset}\absvector(1,0){\arrowwidth}}
+\put(#4,0){\makebox(0,0){#2}}
+\put(0,4){\hspace{\ulabeloffset}{#3}\hspace{\ulabeloffset}}
+\end{picture}
+}
+
+
+% The four parameters are (lnode,rnode;label,width)
+\def\func(#1,#2;#3;#4)
+{ %begin func
+\makebox(0,0){\dofunc{#1}{#2}{#3}{#4}
+}%end box
+}%end func
+
+
+\ig{The next procedure is to set parameters for a square. The six
+parameters are all numbers. The first 4 flag the four arrows of the
+square as follows:
+
+ top or bottom left or right
+ arrow arrow
+
+ < -3 leftwards, normal upwards, normal ( <----- )
+ -3 leftwards, epic upwards, epic ( <<---- )
+ -2 leftwards, monic upwards, monic ( <----< )
+ -1 leftwards, normal upwards, normal ( <----- )
+ 0 omitted omitted
+ 1 rightwards, normal downwards, normal ( -----> )
+ 2 rightwards, epic downwards, epic ( ---->> )
+ 3 rightwards, monic downwards, monic ( >----> )
+ > 3 rightwards, normal downwards, normal ( -----> )
+
+In other words, when the parameter is positive, the arrow goes in the
+ordinary (linguistic) direction and when negative, in the opposite
+direction. When the parameter is 0, the arrow is omitted. When the
+absolute valute of the parameter is 2, you get a monic (tailed) arrow
+and when it is 3, you get an epic (double headed) arrow. Any other
+non-zero value gives an normal arrow.
+
+The last 2 parameters, for which 60 and 70 are a reasonable values, are
+the distance between the vertical, resp. horizontal arrows in
+increments of .1 em.
+
+The procedure \resetparms sets the first 4 of these parameters to 1 and
+the last two to 60 and 70.
+
+NOTE: ONE OF THE PROCEDURES \setparms OR \resetparms SHOULD BE EXECUTED
+BEFORE A SQUARE IS MADE.
+
+The procedure \square takes 8 parameters, in the format
+[#1`#2`#3`#4;#5`#6`#7`#8] which are in order,
+[NW`NE`SW`SE;t`l`r`b], the first four being the nodes and the last four
+the labels on the arrows.
+
+The top and bottom arrows have their lengths automatically adjusted to
+compensate for the widths of the nodes. Thus 50 will be a reasonable
+value for the width parameter, but only if the labels are not too long.
+The examples below show how these squares may be fitted together to make
+more complicated diagrams. Although it may be possible in principle to
+superimpose the joint arrow, it seems safer to omit one of them. Minor
+arithmetic errors might otherwise result in thick lines. Note, in the
+examples, the use of the procedure \phantom to make the arrow lengths
+proper, while avoiding overlapping nodes.
+
+Note the \hspace and \space used to properly space them. I don't
+understand the spacing rules used in picture mode to figure out how to
+do these automatically and so they are determined by trial and error. I
+suspect they depend on the widths of the nodes and the heights of the
+labels. Also note the blank lines between the two squares in the second
+example. This is necessary for proper spacing.}
+
+\ig{In case you are interested why I used the peculiar syntax for the
+parameters, it is because I didn't like to type braces and I also didn't
+want to use things like parens and commas that I am likely to use as
+parts of nodes and arrows. But feel free to change this syntax.}
+
+\def\setparms[#1`#2`#3`#4;#5`#6]
+{
+\tarrowflag #1
+\larrowflag #2
+\rarrowflag #3
+\barrowflag #4
+\width #5
+\height #6
+}
+
+\newcommand{\resetparms}
+{
+\tarrowflag1
+\larrowflag1
+\rarrowflag1
+\barrowflag1
+\width50
+\height50
+}
+
+\resetparms %initializes defaults
+
+\ig{The parameters are the nodes and arrows in linguistic order.
+Note: if one of the nodes has an asscript, then the other one on
+the same line must too. Use an empty box (e.g. blah_{}) if necessary.}
+\def\square[#1`#2`#3`#4;#5`#6`#7`#8]%
+{
+\advance \height by 30
+\begin{picture}(\width,\height)(0,4)
+\arrowlen\height
+\labelheight\height
+\divide\labelheight by 2
+\advance \height by -15
+\advance \arrowlen by -44
+
+\setwidths{#1}{#2}{#5}{\width}
+\put(0,\height){\makebox(0,0){#1}}
+\ifnum\tarrowflag>0
+ \put(-3,\height){\hspace{\loffset}\absvector(1,0){\arrowwidth}}
+ \ifnum\tarrowflag=3
+ \advance\arrowwidth by -4\unitlength
+ \put(-3,\height){\hspace{\loffset}\absvector(1,0){\arrowwidth}}
+ \fi
+ \ifnum\tarrowflag=2
+ \put(-1,\height){\hspace{\loffset}\absvector(1,0){\unitlength}}
+ \fi
+\else\ifnum\tarrowflag<0
+ \advance\loffset by \arrowwidth
+ \put(-3,\height){\hspace{\loffset}\absvector(-1,0){\arrowwidth}}
+ \ifnum\tarrowflag=-3
+ \advance\arrowwidth by -4\unitlength
+ \put(-3,\height){\hspace{\loffset}\absvector(-1,0){\arrowwidth}}
+ \fi
+ \ifnum\tarrowflag=-2
+ \put(-5,\height){\hspace{\loffset}\absvector(-1,0){\unitlength}}
+ \fi
+\fi\fi
+
+\put(\width,\height){\makebox(0,0){#2}}
+\advance \height by 4
+\put(0,\height){\hspace{\ulabeloffset}{#5}\hspace{\ulabeloffset}}
+
+\advance \height by -11
+\ifnum\larrowflag>0
+ \put(0,\height){\vector(0,-1){\arrowlen}}
+ \ifnum\larrowflag=3
+ \advance\arrowlen by -4
+ \put(0,\height){\vector(0,-1){\arrowlen}}
+ \advance\arrowlen by 4
+ \fi
+ \ifnum\larrowflag=2
+ \advance \height by -2
+ \put(0,\height){\vector(0,-1){1}}
+ \advance \height by 2
+ \fi
+\else\ifnum\larrowflag<0
+ \advance\height by-\arrowlen
+ \put(0,\height){\vector(0,1){\arrowlen}}
+ \ifnum\larrowflag=-3
+ \advance\arrowlen by -4
+ \put(0,\height){\vector(0,1){\arrowlen}}
+ \advance\arrowlen by 4
+ \fi
+ \ifnum\larrowflag=-2
+ \advance \height by 2
+ \put(0,\height){\vector(0,1){1}}
+ \advance \height by -2
+ \fi
+ \advance\height by\arrowlen
+\fi\fi
+
+\ifnum\rarrowflag>0
+ \put(\width,\height){\vector(0,-1){\arrowlen}}
+ \ifnum\rarrowflag=3
+ \advance\arrowlen by -4
+ \put(\width,\height){\vector(0,-1){\arrowlen}}
+ \fi
+ \ifnum\rarrowflag=2
+ \advance \height by -2
+ \put(\width,\height){\vector(0,-1){1}}
+ \fi
+\else\ifnum\rarrowflag<0
+ \advance\height by-\arrowlen
+ \put(\width,\height){\vector(0,1){\arrowlen}}
+ \ifnum\rarrowflag=-3
+ \advance\arrowlen by -4
+ \put(\width,\height){\vector(0,1){\arrowlen}}
+ \advance\arrowlen by 4
+ \fi
+ \ifnum\rarrowflag=-2
+ \advance \height by 2
+ \put(\width,\height){\vector(0,1){1}}
+ \advance \height by -2
+ \fi
+\fi\fi
+
+\put(-3,\labelheight){\makebox(0,0)[r]{#6}}
+\advance \width by 3
+\put(\width,\labelheight){\makebox(0,0)[l]{#7}}
+\advance \width by -3
+
+\setwidths{#3}{#4}{#8}{\width}
+\put(0,15){\makebox(0,0){#3}}
+\ifnum\barrowflag>0
+ \put(-3,15){\hspace{\loffset}\absvector(1,0){\arrowwidth}}
+ \ifnum\barrowflag=3
+ \advance\arrowwidth by -4\unitlength
+ \put(-3,15){\hspace{\loffset}\absvector(1,0){\arrowwidth}}
+ \fi
+ \ifnum\barrowflag=2
+ \put(-1,15){\hspace{\loffset}\absvector(1,0){\unitlength}}
+ \fi
+\else\ifnum\barrowflag<0
+ \advance\loffset by \arrowwidth
+ \put(-3,15){\hspace{\loffset}\absvector(-1,0){\arrowwidth}}
+ \ifnum\barrowflag=-3
+ \advance\arrowwidth by -4\unitlength
+ \put(-3,15){\hspace{\loffset}\absvector(-1,0){\arrowwidth}}
+ \fi
+ \ifnum\barrowflag=-2
+ \put(-5,15){\hspace{\loffset}\absvector(-1,0){\unitlength}}
+ \fi
+\fi\fi
+\put(\width,15){\makebox(0,0){#4}}
+\put(0,7){\hspace{\ulabeloffset}{#8}\hspace{\ulabeloffset}}
+\end{picture}
+}
+ý SMTPUSER HMCVAX 5/14/88
+þ INHB@MCGILLC.BITNET DHOSEK@HMCVAX.BITNE 5/14/88 No subject
diff --git a/macros/latex209/contrib/misc/sqsample.tex b/macros/latex209/contrib/misc/sqsample.tex
new file mode 100644
index 0000000000..e475f637e6
--- /dev/null
+++ b/macros/latex209/contrib/misc/sqsample.tex
@@ -0,0 +1,143 @@
+%This file should be called sqsample.tex
+\documentstyle[12pt]{article}
+\pagestyle{empty}
+\def\colim{\mathop{\rm colim}\nolimits}
+\newcommand{\bp}{\begin{picture}}
+\newcommand{\ep}{\end{picture}}
+\begin{document}
+\input sqmac
+
+\setparms[0`-1`-2`-3;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+\hspace{5em}
+\setparms[-1`-2`-3`-4;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+
+\setparms[-2`-3`-4`0;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+\hspace{5em}
+\setparms[-3`-4`0`-1;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+
+\setparms[-4`0`-1`-2;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+
+\setparms[0`1`2`3;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+\hspace{5em}
+\setparms[1`2`3`4;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+
+\setparms[2`3`4`0;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+\hspace{5em}
+\setparms[3`4`0`1;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+
+\setparms[4`0`1`2;70`70]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+
+%In the diagrams below, the parameters specify that the squares are
+%height 90 units (approximately 90 points) and the left and right arrows
+%are, respectively, monic and epic. The horozontal backspace of 21 units
+%was determined by trial and error and depends in a way I don't
+%understand on the sizes of the nodes. In the second square the upper
+%arrow is monc, the left hand one omitted, the right hand arrow epic and
+%the bottom ordinary. The nodes marked \phantom are used to calculate
+%the lengths of the arrows, but are not actually printed. For more
+%information, see the commentary in the file squarmac.tex.
+
+\begin{center}
+\makebox
+{
+\setparms[1`2`-3`-1;60`90]
+\square[$AAAAA$`$BB$`$DD$`$CCC$;$f$```$g$]
+\hspace{-14\unitlength}
+\setparms[2`0`3`1;60`90]
+\square[\phantom{$BB$}`$EEEE$`\phantom{$CCC$}`$FFF$;$l$``$m$`$n$]
+}
+\end{center}
+
+\newpage
+
+\ig{I have been unable to figure out how to center a diagram like the
+one below, since every attempt to cause a cr gives an error to the
+centering macro. It can be done by eye, of course. It is also hard ot
+prevent a page break here.}
+
+\setparms[1`1`1`1;60`70]
+\square[$AAA$`$BB$`$C$`$DDDD$;$f$`$g$`$h$`$k$]
+
+\tarrowflag0
+\vspace{-31\unitlength}
+\setparms[1`1`1`1;60`80]
+\square[\phantom{$C$}`\phantom{$DDDD$}`$EE$`$FFF$;$l$``$m$`$n$]
+
+\ig{
+In the diagrams below (which, together with the surrounding text, are from
+an actual paper) the fact that there is a blank line above the text and
+not, but a \\ below, is because that is what works. Instead, one could
+have a blank line below and begin the next line with \noindent. If \\
+is used to separate the text above from the square, then \hspace has no
+effect, although \hspace* would probably work. It appears that one
+cannot put such a diagram into a {center} environment. I get an
+"impossible" error message, but I assume that was the real reason.
+
+This illustrates the use of \vector to add other arrows to a diagram.
+In general, I don't know how, except by trial and error, to say exactly
+where these arrows should go, but I assume that with experience, it will
+become easier to place them.
+
+One more comment: If the parameters are set inside a proedure, then they
+will be reset when that environment is exited. On the other hand the
+line \tarrowflag3 above set a parameter globally and then resetting it
+in the first of the diagrams below does not reset it for the second. It
+is probably to ALWAYS set or rest the parameters so that if a diagram is
+moved, or something inserted above it, it will always be correct.}
+
+Now let $A$ be an arbitrary object of ${\cal A}$ that satisfies all the Horn
+sentences. Like any object of ${\cal A}$, $A$ is a filtered colimit of
+finitely presented algebras. Write $A=\colim A_i$. Then we have a
+diagram for each $i$
+
+\hspace{7em}
+\bp(0,70)
+\put(37,44){\vector(-1,-1){26}}
+\setparms[1`1`1`1;40`40]
+\square[$A_i$`$\Phi\Psi A_i$`$A$`$\Phi\Psi A$;$f_i$```$f$]
+\ep\\
+where the diagonal arrow exists because $A$ satisfies all those Horn
+sentences. Since $\Psi$ is a left adjoint, it preserves filtered
+colimits and $\Phi$ does by assumption. Taking colimits, we get
+
+\hspace{6em}
+\bp(0,70)
+\put(63,44){\vector(-2,-1){52}}
+\setparms[1`1`1`1;68`40]
+\square[$\colim A_i$`$\colim\Phi\Psi A_i$`$A$`$\colim\Phi\Psi A$;```]
+\ep
+
+From the fact that both vertical arrows are isomorphisms, it follows by
+an easy diagram chase that the diagonal is too.
+
+\ig{ The following illustrates a minor flaw in the \square macro and two
+possible workarounds. Neither is perfect; the first still doesn't leave
+them lined up perfectly (apparently because superscripts don't go up as
+far as subscripts go down) while the second leaves the nodes on the same
+line, but leaves both of them a bit high with respect to the arrow than
+unadorned nodes. Only a perfectionist will notice anything wrong with
+either of them}
+
+\resetparms\width70
+\square[$AAAAA_1$`$BB$`$CCC$`$DD$;$f$```$g$]
+
+\resetparms\width70
+\square[$AAAAA_1^{}$`$BB$`$CCC$`$DD$;$f$```$g$]
+\hspace{10em}
+\resetparms\width70
+\square[$AAAAA_1$`$BB_{}$`$CCC$`$DD$;$f$```$g$]
+
+
+\end{document}
+ý SMTPUSER HMCVAX 5/14/88
+þ INHB@MCGILLC.BITNET DHOSEK@HMCVAX.BITNE 5/14/88 No subject
diff --git a/macros/latex209/contrib/misc/sshdbk10.sty b/macros/latex209/contrib/misc/sshdbk10.sty
new file mode 100644
index 0000000000..c1a75f7349
--- /dev/null
+++ b/macros/latex209/contrib/misc/sshdbk10.sty
@@ -0,0 +1,59 @@
+% Save file as: SSHDBK10.STY Source: FILESERV@SHSU.BITNET
+% SSHDBK10.STY: Sans Serif headings for BK10 style
+% Change the headings to be in Sans Serif typefaces,
+% Also, take all sizes down a notch (huge, not Huge etc.).
+% The changes are flagged thus.
+% ^^^^
+%
+%----------------------------- part ---------------------------------------
+% From book.sty:
+%
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi \markboth{}{}
+ {\centering \ifnum \c@secnumdepth >-2\relax \Large\sf Part \thepart \par
+% ^^^^^^^^^
+\vskip 20pt \fi \huge \sf #1\par}\@endpart}
+% ^^^^^^^^^
+\def\@endpart{\vfil\newpage \if@twoside \hbox{} \thispagestyle{empty}
+ \newpage
+ \fi \if@tempswa \twocolumn \fi}
+\def\@spart#1{{\centering \huge \sf #1\par}\@endpart}
+% ^^^^^^^^^
+%
+%----------------------------- chapter -----------------------------------
+% From bk10.sty:
+%
+\def\@makechapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \huge\sf \@chapapp{} \thechapter \par
+ \vskip 20pt \fi \huge \sf #1\par
+% ^^^^^^^^^
+ \nobreak \vskip 40pt } }
+
+\def\@makeschapterhead#1{ \vspace*{50pt} { \parindent 0pt \raggedright
+ \huge \sf #1\par
+%^^^^^^^^^
+ \nobreak \vskip 40pt } }
+
+%----------------------------- section -----------------------------------
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\sf}}
+% ^^^
+%-------------------------- subsection -----------------------------------
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\sf}}
+% ^^^
+%-------------------------- subsubsection --------------------------------
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\sf}}
+% ^^^
+%---------------------------- paragraph ----------------------------------
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\sf}}
+% ^^^
+%--------------------------- subparagraph --------------------------------
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\sf}}
+% ^^^
diff --git a/macros/latex209/contrib/misc/steveshacks.tex b/macros/latex209/contrib/misc/steveshacks.tex
new file mode 100644
index 0000000000..d2aea18eb2
--- /dev/null
+++ b/macros/latex209/contrib/misc/steveshacks.tex
@@ -0,0 +1,315 @@
+Return-Path: <spqr@minster.york.ac.uk>
+Received: from minster.york.ac.uk by ftp.tex.ac.uk (4.1/SMI-4.1)
+ id AA04969; Tue, 9 Mar 93 09:31:49 GMT
+From: spqr@minster.york.ac.uk
+Date: Tue, 9 Mar 93 09:29:08
+Message-Id: <swordfish.731669420@minster.york.ac.uk>
+To: archive@ftp.tex.ac.uk
+In-Reply-To: smith@gramian.harvard.edu's message of 2 Mar 93 23:02:22 GMT
+Subject: Steve's LaTeX Hacks
+Status: RO
+
+ From: smith@gramian.harvard.edu (Steven Smith)
+ Newsgroups: comp.text.tex
+ Date: 2 Mar 93 23:02:22 GMT
+ Distribution: comp.text.tex
+ Organization: Harvard Robotics Lab, Harvard University
+
+ I recently submitted a paper to a publisher who demanded that it be in
+ LaTeX format. At first I hated this. But later, I grew to like it as
+ I learned to hack LaTeX to get it to do what I wanted. I've heard
+ several people complain about some of the LaTeX problems that I faced,
+ so I've included my fixes here for people to use.
+
+ The code is arranged in three sections: (i) LaTeX bug fixes, where I
+ fix LaTeX so that it doesn't do things that are plain wrong, (ii) LaTeX
+ hacks, where I hack LaTeX to make it conform to a style that I prefer,
+ and (iii) useful macros from Plain TeX that for some specious reason
+ are not included in LaTeX. I've also included a proof environment
+ that gives Halmos's tombstone.
+
+
+ Note to LaTeX-but-non-TeX users: I highly recommend using Plain
+ TeX macros like \pmatrix etc. You will find typing
+
+ $$\pmatrix{a&b\cr c&d}$$
+
+ much faster and easier than typing
+
+ \[\left(\begin{array}{cc}a&b\\c&d\end{array}\right)\].
+
+ Most of these macros, described in Chapters 16-19 of the TeXbook,
+ are defined in standard LaTeX, so you may use them.
+
+
+ Included below are the following:
+
+ LaTeX bug fixes:
+
+ 1. Fix eqnarray to delete those awful spaces around the relation.
+ 2. Use correct 12-point math extension font.
+ 3. Define correct 12-point \big,...,\Bigg macros.
+
+ LaTeX hacks:
+
+ 1. Add 10-point bold roman subscripts.
+ 2. Put stretchiness and new hooks in the theorem environment.
+ 3. Add an environment for proofs.
+ 4. Change LaTeX's \cite command for bold citations separated by thinspaces.
+ 5. Add Plain TeX's \headline and \footline to plain pagestyle.
+
+ Plain TeX additions:
+
+ 1. Add \eqalign.
+ 2. \overfullrule=5pt (Plain TeX's setting).
+
+
+ The code follows. All of this code should be placed in LaTeX's
+ preamble (between \documentstyle and \begin{document}). If you only
+ take part of this code, be sure to surround it in your preamble with
+ the LaTeX commands \makeatletter and \makeatother. And, of course, if
+ you don't like anything about these macros, you are free to change them.
+
+
+ \makeatletter
+
+ % LaTeX bug fixes:
+
+ % 1. Fix eqnarray to delete those awful spaces around the relation.
+
+ % Fix eqnarray's \def so that it uses the correct spacing (cf. latex.tex).
+ \def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+ \global\@eqnswtrue
+ \global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+ $$\halign to \displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ ${{}##{}}$&\global\@eqcnt\tw@$\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+ % 2. Use correct 12-point math extension font.
+
+ % Use correct 12-point fonts (cf. lfonts.tex).
+ \font\twlex=cmex10 at 12pt
+ \font\eightex=cmex8
+ \font\eightbf=cmbx8
+ \font\sixbf=cmbx6
+
+ \def\xiipt{\textfont\z@\twlrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+ \textfont\@ne\twlmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+ \textfont\tw@\twlsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+ \textfont\thr@@\twlex \scriptfont\thr@@\eightex \scriptscriptfont\thr@@\eightex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twlmi
+ \textfont\tw@\twlsy \textfont\lyfam\twlly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{twlmib}{\global\font\twlmib\@mbi\@magscale1\global
+ \font\twlsyb\@mbsy \@magscale1\global\font
+ \twllyb\@lasyb\@magscale1\relax\@addfontinfo\@xiipt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\twlmib \textfont\tw@\twlsyb
+ \textfont\lyfam\twllyb\@prtct\@boldtrue}}}{}\@xiipt\boldmath}%
+ \def\prm{\fam\z@\twlrm}%
+ \def\pit{\fam\itfam\twlit}\textfont\itfam\twlit \scriptfont\itfam\egtit
+ \scriptscriptfont\itfam\sevit
+ \def\psl{\fam\slfam\twlsl}\textfont\slfam\twlsl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+ \def\pbf{\fam\bffam\twlbf}\textfont\bffam\twlbf
+ \scriptfont\bffam\eightbf \scriptscriptfont\bffam\sixbf
+ \def\ptt{\fam\ttfam\twltt}\textfont\ttfam\twltt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+ \def\psf{\fam\sffam\twlsf}\textfont\sffam\twlsf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+ \def\psc{\@getfont\psc\scfam\@xiipt{\@mcsc\@magscale1}}%
+ \def\ly{\fam\lyfam\twlly}\textfont\lyfam\twlly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm}
+
+ % 3. Define correct 12-point \big,...,\Bigg macros (cf. lplain.tex).
+
+ \def\big#1{{\hbox{$\left#1\vbox to10\p@{}\right.\n@space$}}}
+ \def\Big#1{{\hbox{$\left#1\vbox to13\p@{}\right.\n@space$}}}%
+ \def\bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}%
+ \def\Bigg#1{{\hbox{$\left#1\vbox to21\p@{}\right.\n@space$}}}%
+
+
+ % LaTeX hacks:
+
+ % 1. Add 10-point bold roman subscripts.
+
+ % Use correct 10-point bold subscript fonts like Plain TeX (cf. lfonts.tex).
+ \font\eightex=cmex8
+ \font\sevenbf=cmbx7
+ \font\fivebf=cmbx5
+
+ \def\xpt{\textfont\z@\tenrm
+ \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
+ \textfont\@ne\tenmi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
+ \textfont\tw@\tensy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
+ \textfont\thr@@\tenex \scriptfont\thr@@\eightex \scriptscriptfont\thr@@\eightex
+ \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\tenmi
+ \textfont\tw@\tensy \textfont\lyfam\tenly
+ \@boldfalse}\@boldfalse
+ \def\boldmath{\@ifundefined{tenmib}{\global\font\tenmib\@mbi
+ \global\font\tensyb\@mbsy
+ \global\font\tenlyb\@lasyb\relax\@addfontinfo\@xpt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\tenmib \textfont\tw@\tensyb
+ \textfont\lyfam\tenlyb \@prtct\@boldtrue}}}{}\@xpt\boldmath}%
+ \def\prm{\fam\z@\tenrm}%
+ \def\pit{\fam\itfam\tenit}\textfont\itfam\tenit \scriptfont\itfam\sevit
+ \scriptscriptfont\itfam\sevit
+ \def\psl{\fam\slfam\tensl}\textfont\slfam\tensl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+ \def\pbf{\fam\bffam\tenbf}\textfont\bffam\tenbf
+ \scriptfont\bffam\sevenbf \scriptscriptfont\bffam\fivebf
+ \def\ptt{\fam\ttfam\tentt}\textfont\ttfam\tentt
+ \scriptfont\ttfam\tentt \scriptscriptfont\ttfam\tentt
+ \def\psf{\fam\sffam\tensf}\textfont\sffam\tensf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+ \def\psc{\@getfont\psc\scfam\@xpt{\@mcsc}}%
+ \def\ly{\fam\lyfam\tenly}\textfont\lyfam\tenly
+ \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
+ \@setstrut \rm}
+
+ % 2. Put stretchiness and new hooks in the theorem environment.
+
+ \def\thmstretch{plus.5em minus.1em }
+ \def\thmskip{0pt \thmstretch}
+ \def\thmstart{\hskip\thmskip\ignorespaces}
+ \let\thmtextfont=\it
+ \newif\ifthmtitle \thmtitletrue % If TRUE, print text (e.g., ``Theorem'').
+
+ % Macros for paper's structure:
+
+ % These are utility macros:
+ \newtheorem{THEOREM}{Theorem}[section]
+ \newtheorem{PROPOSITION}[THEOREM]{Proposition}
+ \newtheorem{DEFINITION}[THEOREM]{Definition}
+ \newtheorem{LEMMA}[THEOREM]{Lemma}
+ \newtheorem{COROLLARY}[THEOREM]{Corollary}
+ \newtheorem{EXAMPLE}[THEOREM]{Example}
+ \newtheorem{REMARK}[THEOREM]{Remark}
+ \newtheorem{REMARKS}[THEOREM]{Remarks}
+ \newtheorem{DISCUSSION}[THEOREM]{}
+ \newtheorem{ALGORITHM}[THEOREM]{Algorithm}
+ \newtheorem{PROBLEM}[THEOREM]{Problem}
+
+ % Use these environments for their stated purpose.
+ \newenvironment{theorem}%
+ {\let\thmtextfont=\it \thmtitletrue \begin{THEOREM}}%
+ {\end{THEOREM}}
+ \newenvironment{proposition}%
+ {\let\thmtextfont=\it \thmtitletrue \begin{PROPOSITION}}%
+ {\end{PROPOSITION}}
+ \newenvironment{definition}%
+ {\let\thmtextfont=\rm \thmtitletrue \begin{DEFINITION}}%
+ {\end{DEFINITION}}
+ \newenvironment{lemma}%
+ {\let\thmtextfont=\it \thmtitletrue \begin{LEMMA}}%
+ {\end{LEMMA}}
+ \newenvironment{corollary}%
+ {\let\thmtextfont=\it \thmtitletrue \begin{COROLLARY}}%
+ {\end{COROLLARY}}
+ \newenvironment{example}%
+ {\let\thmtextfont=\rm \thmtitletrue \begin{EXAMPLE}}%
+ {\end{EXAMPLE}}
+ \newenvironment{remark}%
+ {\let\thmtextfont=\rm \thmtitletrue \begin{REMARK}}%
+ {\end{REMARK}}
+ \newenvironment{remarks}%
+ {\let\thmtextfont=\rm \thmtitletrue \begin{REMARKS}}%
+ {\end{REMARKS}}
+ \newenvironment{discussion}%
+ {\let\thmtextfont=\rm \thmtitlefalse \begin{DISCUSSION}}%
+ {\end{DISCUSSION}}
+ \newenvironment{algorithm}%
+ {\let\thmtextfont=\rm \thmtitletrue \begin{ALGORITHM}}%
+ {\end{ALGORITHM}}
+ \newenvironment{problem}%
+ {\let\thmtextfont=\rm \thmtitletrue \begin{PROBLEM}}%
+ {\end{PROBLEM}}
+
+ \newenvironment{steps}{\begin{description}}{\end{description}}
+ \def\step[#1]{\item[\rm{\it Step\/}~#1]}
+
+ % Change LaTeX's theorem format somewhat (cf. latex.tex)
+ \def\@begintheorem#1#2{\thmtextfont \trivlist \ifthmtitle
+ \item[\hskip \labelsep{\bf #1\ #2.}]\else
+ \item[\hskip \labelsep{\bf #2.}]\fi\thmstart}
+ \def\@opargbegintheorem#1#2#3{\thmtextfont \trivlist
+ \item[\hskip\labelsep{\bf #1\ #2\ {\rm(#3)}.}]\thmstart}
+
+ % 3. Add an environment for proofs.
+
+ % Proof environment with Halmos's tombstone
+ \newif\ifmathtomb \mathtombfalse
+
+ %\def\tombstone{\unskip\penalty50 % Tombstone breaks to left margin.
+ % \enskip \vrule width.3333em height.7em depth.2em
+ % \ifmmode \global\mathtombtrue \else \global\mathtombfalse \fi}
+
+ \def\tombstone{\unskip\penalty50 % Tombstone breaks to right margin.
+ \hskip 0pt plus-1fill \null\nobreak\hskip 0pt plus1fill
+ \enskip \vrule width.3333em height.7em depth.2em
+ \ifmmode \global\mathtombtrue \else \global\mathtombfalse \fi}
+ % Tombstone scores!
+
+ \newenvironment{proof}% Use \tombstone explicitly in display math
+ {\futurelet\next\pr@oftext}% Optional argument for proof text.
+ {\ifmathtomb \else \tombstone \fi \par
+ \ifmathtomb \else \addvspace{\medskipamount}\fi \global\mathtombfalse}
+ \def\pr@oftext{\ifx\next[\let\temp\opr@@ftext\else\let\temp\pr@@ftext\fi\temp}
+ \def\pr@@ftext{\beginpr@@f{Proof}}
+ \def\opr@@ftext[#1]{\beginpr@@f{#1}}
+ \def\beginpr@@f#1{\par \addvspace{\bigskipamount}\widowpenalty=10000
+ \noindent{\bf #1.}\hskip\labelsep\thmstretch % No widow lines in proofs.
+ \ignorespaces}
+
+ % The text will be ``Proof'' unless an optional argument [] is used.
+ % The syntax should be TeX-equivalent to one of the following:
+ %
+ % \begin{proof} Text. \end{proof}
+ % \begin{proof} Text $$math.\tombstone$$ \end{proof}
+
+ % 4. Change LaTeX's \cite command for bold citations separated by thinspaces.
+
+ \def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\thinspace }\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+ \hbox{\bf\csname b@\@citeb\endcsname}}}{#1}}
+ %\hbox{\small\bf\csname b@\@citeb\endcsname}}}{#1}} % Give \small citation #'s.
+
+ % 5. Add Plain TeX's \headline and \footline to plain pagestyle.
+
+ \newtoks\headline \headline={\hfil} % headline is normally blank
+ \newtoks\footline \footline={\hss\rm\thepage\hss}
+ % footline is normally a centered page number in font \tenrm
+
+ % Change \ps@plain to include running headline information (cf. latex.tex).
+ \def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\the\headline}\let\@evenhead\@oddhead
+ \def\@oddfoot{\the\footline}\let\@evenfoot\@oddfoot}
+ % Odd and even cases are lumped into one macro as in Plain TeX.
+
+ \pagestyle{plain} % Run \pagestyle to incorporate changes.
+
+
+ % Plain TeX additions:
+
+ % 1. Add \eqalign.
+
+ \def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
+ \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
+ \crcr#1\crcr}}\,}
+
+ % 2. \overfullrule=5pt (Plain TeX's setting).
+
+ \overfullrule=5pt % Plain TeX's setting
+
+ \makeatother
+
diff --git a/macros/latex209/contrib/misc/strukto.sty b/macros/latex209/contrib/misc/strukto.sty
new file mode 100644
index 0000000000..2dc3c19046
--- /dev/null
+++ b/macros/latex209/contrib/misc/strukto.sty
Binary files differ
diff --git a/macros/latex209/contrib/misc/subtabfg.sty b/macros/latex209/contrib/misc/subtabfg.sty
new file mode 100644
index 0000000000..8b0560af92
--- /dev/null
+++ b/macros/latex209/contrib/misc/subtabfg.sty
@@ -0,0 +1,72 @@
+%% FILE: subtabfg in SYS2.TEX.PUB.ISULATEX.STYLES
+%% AUTHOR: Erica M. S. Harris
+%% DATE: August 1990
+%% DESCR: Style option for subnumbering tables and figures.
+%% Use \subfigures to start subnumbering figures; \newsubfigure
+%% to start a new set of subfigures; and \nosubfigures to turn
+%% subfigure numbering off. These commands should be used outside the
+%% figure environment. The subfigures can be labelled and referred to
+%% as usual. If you want to label an entire set of subfigures use the
+%% \figurelabel command after the \caption for one of the subfigures in
+%% the set.
+%% Similarly, Use \subtables to start subnumbering tables;
+%% \newsubtable to start a new set of subtables; and \nosubtables
+%% to turn subtable numbering off. These commands should be used
+%% outside the table environment. The subtables can be labelled and
+%% referred to as usual. If you want to label an entire set of
+%% subtables use the \tablelabel command after the \caption for one
+%% of the subtables in the set.
+%%
+%% MODS:
+%%
+\newcounter{mainfigure}
+
+\def\subfigures{\setcounter{mainfigure}{\c@figure}
+ \stepcounter{mainfigure}
+ \setcounter{figure}{0}
+ \global\let\oldthefigure\thefigure%
+ \@ifundefined{chapter}%
+ {\gdef\thefigure{\themainfigure\alph{figure}}
+ \global\let\thewholefigure\themainfigure}
+ {\gdef\thefigure{\thechapter.\themainfigure\alph{figure}}
+ \gdef\thewholefigure{\thechapter.\themainfigure}}
+ \global\let\@currentfigurelabel\thewholefigure}
+
+\def\newsubfigure{\stepcounter{mainfigure}\setcounter{figure}{0}}
+
+\def\nosubfigures{\setcounter{figure}{\c@mainfigure}
+ \@ifundefined{chapter}{\gdef\thefigure{\arabic{figure}}}%
+ {\gdef\thefigure{\thechapter.\arabic{figure}}}}
+
+\def\@currentfigurelabel{}
+
+\def\figurelabel#1{\@bsphack\if@filesw {\let\thepage\relax
+ \xdef\@gtempa{\write\@auxout{\string
+ \newlabel{#1}{{\@currentfigurelabel}{\thepage}}}}}
+ \@gtempa \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
+
+\newcounter{maintable}
+
+\def\subtables{\setcounter{maintable}{\c@table}
+ \stepcounter{maintable}
+ \setcounter{table}{0}
+ \global\let\oldthetable\thetable%
+ \@ifundefined{chapter}%
+ {\gdef\thetable{\themaintable\alph{table}}
+ \global\let\thewholetable\themaintable}
+ {\gdef\thetable{\thechapter.\themaintable\alph{table}}
+ \gdef\thewholetable{\thechapter.\themaintable}}
+ \global\let\@currenttablelabel\thewholetable}
+
+\def\newsubtable{\stepcounter{maintable}\setcounter{table}{0}}
+
+\def\nosubtables{\setcounter{table}{\c@maintable}
+ \@ifundefined{chapter}{\gdef\thetable{\arabic{table}}}%
+ {\gdef\thetable{\thechapter.\arabic{table}}}}
+
+\def\@currenttablelabel{}
+
+\def\tablelabel#1{\@bsphack\if@filesw {\let\thepage\relax
+ \xdef\@gtempa{\write\@auxout{\string
+ \newlabel{#1}{{\@currenttablelabel}{\thepage}}}}}
+ \@gtempa \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
diff --git a/macros/latex209/contrib/misc/suthesis.sty b/macros/latex209/contrib/misc/suthesis.sty
new file mode 100644
index 0000000000..bf27fe5cb0
--- /dev/null
+++ b/macros/latex209/contrib/misc/suthesis.sty
@@ -0,0 +1,265 @@
+% Stanford University PhD thesis style -- modifications to the report style
+% For LaTeX version 2.09
+%
+% Last edit Tue Sep 13 14:40:26 1988
+% Last edit by Joseph Pallas
+
+\typeout{Document Style Option `suthesis' <13 Sep 88>.}
+
+\long\def\comment#1{}
+\comment{
+
+ Example of use:
+ \documentstyle[12pt,suthesis]{report}
+ \begin{document}
+ \title{How to Write Theses\\
+ With Two Line Titles}
+ \author{John Henry Candidate}
+ \principaladviser{John Parker}
+ \firstreader{John Green}
+ \secondreader{John BigBooty\\(Another Department)}
+
+ \beforepreface
+ \prefacesection{Preface}
+ This thesis tells you all you need to know about...
+ \prefacesection{Acknowledgements}
+ I would like to thank...
+ \afterpreface
+
+ \chapter{Introduction}
+ ...
+ \chapter{Conclusions}
+ ...
+ \appendix
+ \chapter{A Long Proof}
+ ...
+ \bibliographystyle{plain}
+ \bibliography{mybib}
+ \end{document}
+
+Documentation:
+ This style file modifies the standard report style to follow the
+ Graduate Program Offices's "Directions for Preparing Doctoral
+ Dissertations". It sets the margins and interline spacing and
+ disallows page breaks at hyphens.
+
+ The \beforepreface command creates the title page, a copyright page
+ (optionally), and a signature page. Then the user should put
+ preface section(s), using the \prefacesection{section title}
+ command. The \afterpreface command then produces the tables of
+ contents, tables and figures, and sets things up to start
+ the main body (on arabic page 1).
+
+ The following commands can control what goes in the front matter
+ material:
+
+ \title{thesis title}
+ \author{author's name}
+ \dept{author's department}
+ - Computer Science if omitted
+ \principaladviser{the principal advisor's name}
+ (or \principaladvisor, if you prefer advisor spelled with o)
+ \firstreader{the first reader's name}
+ \secondreader{the second reader's name}
+ \submitdate{month year in which submitted to GPO}
+ - date LaTeX'd if omitted
+ \copyrightyear{year degree conferred (next year if submitted in Dec.)}
+ - year LaTeX'd (or next year, in December) if omitted
+ \copyrighttrue or \copyrightfalse
+ - produce or don't produce a copyright page (true by default)
+ \figurespagetrue or \figurespagefalse
+ - produce or don't produce a List of Figures page
+ (true by default)
+ \tablespagetrue or \tablespagefalse
+ - produce or don't produce a List of Tables page
+ (true by default)
+
+This style uses interline spacing that is 1.3 times normal, except
+in the figure and table environments where normal spacing is used.
+That can be changed by doing:
+ \renewcommand{\baselinestretch}{1.6}
+(or whatever you want instead of 1.6)
+Unfortunately, that command probably won't take effect unless it comes
+before the \begin{document} or after something like \small \normalsize.
+
+The example above shows the 12pt substyle being used. This seems to give
+acceptable looking results, but it may be omitted to get smaller print.
+
+}
+
+% First thing we do is make sure that report has been loaded. A
+% common error is to try to use suthesis as a documentstyle.
+\@ifundefined{chapter}{\@latexerr{The `suthesis' option should be used
+with the `report' document style}{You should probably read the
+suthesis documentation.}}{}
+
+% We need 1" margins except on the binding edge, where it is 1 1/2"
+% Theses are single-sided, so we don't care about \evensidemargin
+\oddsidemargin 0.5in \evensidemargin 0in
+\marginparwidth 40pt \marginparsep 10pt
+\topmargin 0pt \headsep .5in
+\textheight 8.1in \textwidth 6in
+
+% Disallow page breaks at hyphens (this will give some underfull vbox's,
+% so an alternative is to use \brokenpenalty=100 and manually search
+% for and fix such page breaks)
+\brokenpenalty=10000
+
+% Use 1.3 times the normal baseline-to-baseline skip
+\renewcommand{\baselinestretch}{1.3}
+
+% Redefine the macro used for floats (including figures and tables)
+% so that single spacing is used.
+% (Note \def\figure{\@float{figure}set single spacing} doesn't work
+% because figure has an optional argument)
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}\@normalsize
+ \boxmaxdepth\z@
+ \hsize\columnwidth \@parboxrestore}
+
+% Redefine the macro used for footnotes to use single spacing
+\long\def\@footnotetext#1{\insert\footins{\def\baselinestretch{1}\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% \author, \title are defined in report; here are the rest of the
+% front matter defining macros
+\def\dept#1{\gdef\@dept{#1}}
+\def\principaladviser#1{\gdef\@principaladviser{#1}}
+\def\advis@r{Adviser} % default spelling
+\def\principaladvisor#1{\gdef\@principaladviser{#1}\gdef\advis@r{Advisor}}
+\def\firstreader#1{\gdef\@firstreader{#1}}
+\def\secondreader#1{\gdef\@secondreader{#1}}
+\def\submitdate#1{\gdef\@submitdate{#1}}
+\def\copyrightyear#1{\gdef\@copyrightyear{#1}} % \author, \title in report
+\def\@title{}\def\@author{}\def\@dept{computer science}
+\def\@principaladviser{}\def\@firstreader{}\def\@secondreader{}
+\def\@submitdate{\ifcase\the\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space \number\the\year}
+% Stanford says that December theses should have the next year as the
+% copyright year
+\ifnum\month=12
+ \@tempcnta=\year \advance\@tempcnta by 1
+ \edef\@copyrightyear{\number\the\@tempcnta}
+\else
+ \def\@copyrightyear{\number\the\year}
+\fi
+\newif\ifcopyright \newif\iffigurespage \newif\iftablespage
+\copyrighttrue \figurespagetrue \tablespagetrue
+
+
+\def\titlep{%
+ \thispagestyle{empty}%
+ \null\vskip1in%
+ \begin{center}
+ \Large\uppercase\expandafter{\@title}
+ \end{center}
+ \vfill
+ \begin{center}
+ \sc a dissertation\\
+ submitted to the department of
+ \lowercase\expandafter{\@dept}\\
+ and the committee on graduate studies\\
+ of stanford university\\
+ in partial fulfillment of the requirements\\
+ for the degree of\\
+ doctor of philosophy
+ \end{center}
+ \vfill
+ \begin{center}
+ \rm By\\
+ \@author\\
+ \@submitdate\\
+ \end{center}\vskip.5in\newpage}
+
+\def\copyrightpage{%
+ \null\vfill
+ \begin{center}
+ \large
+ \copyright\ Copyright \@copyrightyear\ by \@author\\
+ All Rights Reserved
+ \end{center}
+ \vfill\newpage}
+
+\long\def\signature#1{%
+\begin{center}
+\begin{minipage}{4in}
+\parindent=0pt
+I certify that I have read this thesis and that in my opinion
+it is fully adequate, in scope and in quality, as a dissertation for the degree
+of Doctor of Philosophy.
+\par
+\vspace{.5in}
+\hbox to 4in{\hfil\shortstack{\vrule width 3in height 0.4pt\\#1}}
+\end{minipage}
+\end{center}}
+
+\def\signaturepage{%
+ \signature{\@principaladviser\\(Principal \advis@r)}
+ \vfill
+ \signature\@firstreader
+ \vfill
+ \signature\@secondreader
+ \vfill
+ \begin{center}
+ \begin{minipage}{4in}
+ Approved for the University Committee on Graduate Studies:\par
+ \vspace{.5in}
+ \hbox to 4in{\hfil\shortstack{\vrule width 3in height 0.4pt\\
+ Dean of Graduate Studies}}
+ \end{minipage}
+ \end{center}}
+
+\def\beforepreface{
+ \pagenumbering{roman}
+ \pagestyle{plain}
+ \titlep
+ \ifcopyright\copyrightpage\fi
+ \signaturepage}
+
+\def\prefacesection#1{%
+ \chapter*{#1}
+ \addcontentsline{toc}{chapter}{#1}}
+
+\def\afterpreface{\newpage
+ \tableofcontents
+ \newpage
+ \iftablespage
+ \listoftables
+ \newpage
+ \fi
+ \iffigurespage
+ \listoffigures
+ \newpage
+ \fi
+ \pagenumbering{arabic}
+ \pagestyle{headings}}
+
+% Redefine \thebibliography to go to a new page and put an entry in the
+% table of contents
+\let\@ldthebibliography\thebibliography
+\renewcommand{\thebibliography}[1]{\newpage
+ \addcontentsline{toc}{chapter}{Bibliography}
+ \@ldthebibliography{#1}}
+
+% Start out normal
+\pagestyle{headings}
+
diff --git a/macros/latex209/contrib/misc/tabbingbox.tex b/macros/latex209/contrib/misc/tabbingbox.tex
new file mode 100644
index 0000000000..e7e25b22cb
--- /dev/null
+++ b/macros/latex209/contrib/misc/tabbingbox.tex
@@ -0,0 +1,79 @@
+% -*- Mode: TeX -*-
+
+\ifx\thisfileis\anUndefinedMacro\input maybeload \fi
+
+\thisfileis{<eb.tex.texlocal>tabbingbox} % abort loading if already loaded
+
+\input redefine % from texlocal
+
+% TABBING BOXES (LaTex)
+%
+% The \begin{tabbingbox}...\end{tabbingbox} environment saves
+% a tabbing environment in a box. This is one way to make a
+% box out of a bunch of lines and have the width of the
+% box be equal to the width of the longest line. Naturally,
+% tabbing commands are also available in the box, but they aren't
+% used much.
+%
+% An optional position argument [t], [b], or [c] as for \parbox
+% may be supplied. The default is [t].
+%
+% A second optional argument [boxnumber] causes the box to be
+% saved in the indicated box number, instead of being returned.
+% Sample use of this form: \begin{tabbingbox}[b][0]...
+%
+% As a special feature, a [boxnumber] may have the form
+% [G boxnumber] to indicate a global assignment.
+%
+
+\makeatletter
+
+\newbox\@tabbingboxbox
+
+\def\tabbingbox{\@ifnextchar[{\@argXtabbingbox}%]
+{\let\@tabboxnum\@tabbingboxbox\@tabbingbox[t]}}
+
+\def\@argXtabbingbox[#1]{\@ifnextchar
+ [{\@argYtabbingbox[#1]}{\let\@tabboxnum\@tabbingboxbox
+ \@tabbingbox[#1]}%]
+}
+
+\def\@argYtabbingbox[#1][#2]{\def\@tabboxnum{#2}\@tabbingbox[#1]}
+
+\def\@tabbingbox[#1]{\global\setbox\@tabbingboxbox
+ \hbox\bgroup\begingroup\minipage[#1]{\z@}\begingroup\tabbing}
+
+% The weird stuff with \unvbox below patches up a [b]-positioned
+% box, which for some reason gets final glue of zero that causes
+% the vbox to have zero depth and get positioned funny.
+
+\def\endtabbingbox{\global\@minipagetrue\endtabbing\endgroup
+ \endminipage
+ \setbox\@tempboxa\lastbox
+ \ifdim \dp\@tempboxa=\z@
+ \vbox{\unvbox\@tempboxa\unskip}\else\box\@tempboxa\fi
+ \global\@minipagefalse\endgroup
+ \egroup
+ \ifx\@tabboxnum\@tabbingboxbox\box\@tabboxnum
+ \else
+ \xdef\@snarftabbingbox
+ {\if G\expandafter\@car\@tabboxnum\@nil\relax
+ \global\setbox\expandafter\@cdr\@tabboxnum\relax\@nil
+ \else
+ \setbox\@tabboxnum\fi\box\@tabbingboxbox
+ }\aftergroup\@snarftabbingbox
+ \fi}
+
+%\def\endtabbingbox{\global\@minipagetrue\endtabbing\endgroup
+% \endminipage\unskip\endgroup\egroup\global\@minipagefalse
+% \ifx\@tabboxnum\@tabbingboxbox\box\@tabboxnum
+% \else
+% \xdef\@snarftabbingbox
+% {\if G\expandafter\@car\@tabboxnum\@nil\relax
+% \global\setbox\expandafter\@cdr\@tabboxnum\relax\@nil
+% \else
+% \setbox\@tabboxnum\fi\box\@tabbingboxbox
+% }\aftergroup\@snarftabbingbox
+% \fi}
+
+\makeatother
diff --git a/macros/latex209/contrib/misc/tabverb.sty b/macros/latex209/contrib/misc/tabverb.sty
new file mode 100644
index 0000000000..9daa0ec7f6
--- /dev/null
+++ b/macros/latex209/contrib/misc/tabverb.sty
@@ -0,0 +1,91 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Verbatim With Tabbing and Page Breaks
+%
+% Written by:
+% Michael Fine
+% Distributed Systems Architecture.
+% September 1987
+%
+%
+% This environment is similar to the LaTeX verbatim environment but it
+% interpretes tab characters as usually expected. It has the
+% additional feature that a CTL-L in the verbatim environment invokes
+% the LaTeX macro \newpage (thereby giving you some control over page
+% breaks).
+%
+% There is also a command \inputverbatim which can be used to specify
+% a file to be input and typeset in the verbatim environment.
+%
+% This does not and should be made to work correctly for verbatim* as
+% well. Also, it should probably use a different name.
+%
+% Usage:
+%
+% \setlength{\tabwidth} % or
+% \settowidth{\tabwidth}{text}
+% % default is width of 8 characters of \normalsize\tt
+%
+% Then:
+% \begin{verbatim}
+% Verbatim text set in \tt font with ^L for page ejects
+% and ^I for tabs
+% \end{verbatim}
+%
+% or:
+% \inputverbatim{filename} % input a file of text
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%
+% A version message
+%
+\typeout{Tabbing Verbatim Style <September 29, 1987>}
+
+\newlength{\tabwidth}
+\settowidth{\tabwidth}{\normalsize\tt mmmmmmmm}
+ % default is 8 characters of \tt font in \normalsize
+
+\begingroup
+\catcode`\^^I=\active\def^^L{}
+
+\gdef\@newverbatim{\@verbatim
+ \def\par{\egroup\@@par\noindent
+ \@tempdima 0pt\hbox\bgroup{}}\obeylines
+ \let\ignorespaces\relax % for \@gobblecr
+ \catcode`\^^I\active
+ \def^^I{\egroup\setbox\@tempboxa\lastbox\@tempdimb \wd\@tempboxa
+ \box\@tempboxa
+ \advance\@tempdima by \@tempdimb \computeskip\penalty10000
+ \hskip\@tempdimb\advance\@tempdima by \@tempdimb
+ \hbox\bgroup{}}\def^^L{\egroup\setbox\@tempboxa\lastbox
+ \@tempdimb\wd\@tempboxa
+ \ifdim\@tempdimb=0pt\else\box\@tempboxa\fi
+ {\let\par\@@par\newpage}\noindent\hbox\bgroup\@gobblecr}\relax
+ \def\computeskip{\@tempcnta 0\@tempdimb 0pt\loop
+ \ifdim \@tempdimb<\@tempdima
+ \advance\@tempdimb by \tabwidth \advance \@tempcnta1 \repeat
+ \ifdim\@tempdima=\@tempdimb \advance\@tempcnta1\fi
+ \@tempdimb\@tempcnta \tabwidth \advance \@tempdimb
+ by -\@tempdima}}
+
+\gdef\verbatim{\@newverbatim\frenchspacing\@vobeyspaces
+ \@xverbatim\noindent\hbox\bgroup\@gobblecr}
+
+\gdef\endverbatim{\egroup\setbox\@tempboxa\lastbox
+ \@tempdimb\wd\@tempboxa
+ \ifdim\@tempdimb=0pt\else\box\@tempboxa\fi
+ \let\par\@@par\endtrivlist}
+
+%
+% Now we define \inputverbatim
+%
+% This is similar to \verbatim but does not need \@xverbatim trickery
+% to delimit the begining and end of the verbatim text.
+
+\gdef\inputverbatim#1{{\@newverbatim\frenchspacing\@vobeyspaces
+ \noindent\hbox\bgroup\input{#1}\endverbatim}}
+
+\endgroup
diff --git a/macros/latex209/contrib/misc/techreport.sty b/macros/latex209/contrib/misc/techreport.sty
new file mode 100644
index 0000000000..582cd7f6e7
--- /dev/null
+++ b/macros/latex209/contrib/misc/techreport.sty
@@ -0,0 +1,379 @@
+%$% techreport.sty
+%$% Technical Report style option to the USC Thesis/Dissertation
+%$% document-style.
+%$% $Header: techreport.sty,v 1.7 92/08/13 14:25:21 sdc Exp $
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% @LaTeX-style-file{
+%%% Author = "Steven Douglas Cochran",
+%%% Version = "1.7",
+%%% Date = "13 August 1992",
+%%% Time = "14:25:21 EDT",
+%%% Filename = "techreport.sty",
+%%% Address = "Digital Mapping Laboratory
+%%% School of Computer Science
+%%% Carnegie-Mellon University
+%%% 5000 Forbes Avenue
+%%% Pittsburgh, PA 15213-3890
+%%% USA",
+%%% Telephone = "(412) 268-5654",
+%%% FAX = "",
+%%% checksum = "22179 335 1194 11016",
+%%% Email = "sdc+@CS.CMU.EDU (Internet)",
+%%% CodeTable = "ISO/ASCII",
+%%% Keywords = "LaTeX, Technical Report",
+%%% Archives = "shsu*",
+%%% Supported = "yes",
+%%% Abstract = "LaTeX document-style option to the
+%%% USCthesis style for converting a thesis
+%%% or dissertation into a technical report."
+%%% Note = "Requires Tomas Rokicki's `rotate' style
+%%% option (or equivalent) if the spine-art
+%%% option is used.
+%%% SeeAlso = "USCthesis.sty",
+%%% DocString = "The checksum field above contains a CRC-16
+%%% the checksum as the first value, followed
+%%% by equivalent of the standard UNIX wc
+%%% (word count) utility output of lines,
+%%% words, and characters. This is produced
+%%% by Robert Solovay's checksum utility.",
+%%% }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% $Log: techreport.sty,v $
+%$% Revision 1.7 92/08/13 14:25:21 sdc
+%$% Changed the standard title page to use \@university instead of a
+%$% hardcoded name. The standard (Thesis/Dissertation) titlepage may
+%$% now be replaced by redefining \customtitlepage. Cleaned-up the
+%$% code and comments a little.
+%$%
+%$% Revision 1.6 91/03/23 01:36:48 cochran
+%$% Updated to allow the multiple volumes change to USCthesis.
+%$% Corrected bug which caused the chapters to be allowed to begin on
+%$% an even page if the preface section was not processed.
+%$%
+%$% Revision 1.5 1991/03/20 06:03:05 cochran
+%$% Modified to auto-load and use the standard rotate style.
+%$%
+%$% Revision 1.4 1991/03/15 04:51:49 cochran
+%$% Modified cover page so that it is centered. Added a "(top of
+%$% spine)" message to the spine-art page. (Maybe in the future the
+%$% Printer won't get it upside-down!)
+%$%
+%$% Revision 1.3 1991/02/09 01:04:02 cochran
+%$% Fixed bug in interaction with USCthesis and added the ability
+%$% to change the layout of the copyright line.
+%$%
+%$% Revision 1.1 90/12/03 12:33:31 cochran
+%$% Initial revision.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%$% Usage: \documentstyle[...,twoside,techreport,...]{USCthesis}
+%%%
+%$% and add the following lines before the \begin{preface}:
+%%%
+%$% \reportnumber{IRIS 256}
+%$% \acknowledgment{This research was sponsored by ...}
+%$% \address{Institute for Robotics and Intelligent Systems\\
+%$% School of Engineering\\
+%$% ...}
+%%%
+%%% An additional command has been added which allows the printing
+%%% of the art for the spine of the document. It must be used prior
+%%% to the \begin{preface}.
+%%%
+%%% \printspinetrue
+%%%
+%%% Also there is an optional argument in the \pageleft macro in the
+%%% USCthesis style which allows the gutter margin to be adjusted
+%%% for paper that is not 8.5in across:
+%%%
+%%% \paperleft[-5.75pt]{1.50in}
+%%%
+%%% (However, you will have to know how the printer aligns the pages
+%%% to make use of this feature.)
+%%%
+%%% If the copyright notice is not correct according to your
+%%% organization's practice. You can (re)define the \thecopyright
+%%% macro to give the correct form (the variables \@copyrightyrear
+%%% and \@author should have useful values in them).
+%%%
+%%% If you want the titlepage (i.e. the page inside the cover) to be
+%%% different than the standard (Thesis/Dissertation) one then you
+%%% can (re)define the \customtitlepage macro to be what you want.
+%%% Currently it creates a page that is a cross between the
+%%% techreport cover and a dissertation titlepage and includes the
+%%% following information: \@reportnumber, \@title, \@author,
+%%% \@university, \@majorfield, \@address, \@submitdate,
+%%% \@acknowledgementtext and either \@mastersdegree or
+%%% \@doctorsdegree (depending on the switch \ifthesis). \@volume
+%%% is included if non-empty. One example of a "regular" techreport
+%%% titlepage would be to add the following to your techreport
+%%% between the \documentstyle and the \begin{document}.
+%%%
+%%% \makeatletter
+%%% \def\customtitlepage{%
+%%% \vbox{%
+%%% \null
+%%% \vskip 1.69 true in
+%%% \hbox to 4.57in{%
+%%% \vbox to 2.125in{%
+%%% \vss
+%%% \begin{center}%
+%%% \vskip 0.20 true in plus 1fil
+%%% {\TechTitleSize \@reportnumber \par}%
+%%% \vskip 0.20 true in plus 2fil
+%%% {\TechTitleSize \@title\@acknowledgmentmark \par}%
+%%% \ifx\@volume\@empty\else
+%%% \vskip 0.20 true in plus 1fil
+%%% {\TechRegularSize \@volume \par}%
+%%% \fi
+%%% \vskip 0.20 true in plus 2fil
+%%% {\TechRegularSize\sl \@author \par}%
+%%% \vskip 0.20 true in plus 1fil
+%%% \end{center}%
+%%% \vss}}%
+%%% \vfill
+%%% \ifcopyright
+%%% \begin{center}%
+%%% \thecopyright
+%%% \end{center}%
+%%% \fi
+%%% \@acknowledgmenttext
+%%% \vss}}
+%%% \makeatother
+%%%
+%%% With either the default or the above \customtitlepage, you can
+%%% throw out the coverpage and the spine and use a printed cover
+%%% with a cutout box to show through the title, report number and
+%%% author.
+%%%
+%$% NOTE: This style requires a local rotate.sty that contains the
+%$% macro \rotr. If this style option is not available, the
+%$% \printspinetrue option will not work.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%
+%% Allow larger font sizes (The normal large sizes are disabled in the
+%% USCthesis style.
+%%
+\def\TechTitleSize{\@setsize\TechTitleSize{25pt}\xxpt\@xxpt}
+\def\TechRegularSize{\@setsize\TechRegularSize{18pt}\xivpt\@xivpt}
+
+%%
+%% Now define the functions to handle the titlepage blips.
+%%
+\def\reportnumber#1{%
+ \gdef\@reportnumber{#1}}
+
+\def\@acknowledgmentmark{}
+\def\@acknowledgmenttext{}
+\def\acknowledgment#1{%
+ \gdef\@acknowledgmentmark{$^{1}$}%
+ \gdef\@acknowledgmenttext{%
+ \vbox{%
+ \hrule width 2.5in
+ \vskip 3pt
+ \parbox{\textwidth}{\footnotesize \qquad $^{1}$#1}}}}
+
+\def\address#1{%
+ \gdef\@address{#1}}
+
+%%
+%% Next set up for the control of the spine art
+%%
+\newif\ifprintspine
+\printspinefalse
+
+%%
+%% Allow the copyright message to be changed.
+%%
+\def\thecopyright{%
+ \normalsize Copyright\ \ \copyright\ \ \@copyrightyear\ \ \@author}
+
+%%
+%% Now, we define the title (etc) page(s)
+%%
+\def\customtitlepage{%
+ \vbox to \textheight{%
+ \null
+ \vskip 1.69 true in
+ \hbox to 4.57in{%
+ \vbox to 2.125in{%
+ \vss
+ \begin{center}%
+ \vskip 0.20 true in plus 1fil
+ {\TechTitleSize \@reportnumber \par}%
+ \vskip 0.20 true in plus 2fil
+ {\TechTitleSize \@title\@acknowledgmentmark \par}%
+ \ifx\@volume\@empty\else
+ \vskip 0.20 true in plus 1fil
+ {\TechRegularSize \@volume \par}%
+ \fi
+ \vskip 0.20 true in plus 2fil
+ {\TechRegularSize\sl \@author \par}%
+ \vskip 0.20 true in plus 1fil
+ \end{center}%
+ \vss}}%
+ \vskip 0.15 true in plus 0.05 true in minus 0.05 true in
+ \begin{center}%
+ {\ifthesis
+ A Thesis Presented to the%
+ \else
+ A Dissertation Presented to the%
+ \fi\\
+ FACULTY OF THE \@schoolname\\
+ \@university\\
+ In Partial Fulfillment of the Requirements for the Degree\\
+ \ifthesis
+ \@mastersdegree
+ \else
+ \@doctorsdegree
+ \fi\\
+ \ifshowmajorfield
+ (\@majorfield)%
+ \fi}
+ \vskip 0.35 true in plus 0.11 true in minus 0.11 true in
+ \@address \par
+ \vskip 0.25 true in plus 0.08 true in minus 0.08 true in
+ {\bf \small \@submitdate \par}% should be just month and year
+ \end{center}%
+ \par
+ \vfill
+ \ifcopyright
+ \begin{center}%
+ \thecopyright
+ \end{center}%
+ \fi
+ \@acknowledgmenttext}}
+
+\def\maketitle{%
+ \begin{titlepage}%
+ \setcounter{page}{0}%
+ \advance\evensidemargin 0.25in%
+ \null
+ \vskip 1.54 true in
+ \hbox to 4.3125in{%
+ \vbox to 2.125in{%
+ \vss
+ \begin{center}%
+ \vskip 0.20 true in plus 1fil
+ {\TechTitleSize \@reportnumber \par}%
+ \vskip 0.20 true in plus 2fil
+ {\TechTitleSize \@title \par}%
+ \ifx\@volume\@empty\else
+ \vskip 0.20 true in plus 1fil
+ {\TechRegularSize \@volume \par}%
+ \fi
+ \vskip 0.20 true in plus 2fil
+ {\TechRegularSize\sl \@author \par}%
+ \vskip 0.20 true in plus 1fil
+ \end{center}%
+ \vss}}%
+ \vskip 0.875 true in
+ \begin{center}%
+ {\TechRegularSize \@address \par}%
+ \vskip .25 true in
+ {\TechRegularSize \@submitdate \par}% Should be just month and year
+ \end{center}%
+ \par
+ \vfill
+ \newpage
+ \advance\evensidemargin -0.25in%
+ %%
+ \ifprintspine
+ \makeatletter
+ %% Load the rotate functions if not defined.
+ \expandafter\ifx\csname rotr\endcsname\relax
+ \@input{rotate.sty}%
+ \fi
+ %% If necessary, create a temporary box for use with \rotr.
+ \expandafter\ifx\csname @rotbox\endcsname\relax
+ \newbox\@rotbox
+ \fi
+ \makeatother
+ \setcounter{page}{1}%
+ \rlap{%
+ \hbox to \textwidth{%
+ \TechRegularSize\hfil (Top of Spine)\hfil}}%
+ \nobreak
+ {\setbox\@rotbox=\hbox to \textheight{%
+ \hfil
+ {\TechTitleSize \@reportnumber}%
+ \hfil
+ \hfil
+ {\TechTitleSize \@author}%
+ \hfil}
+ \rotr\@rotbox}%
+ \newpage
+ \fi
+ %%
+ \setcounter{page}{1}%
+ \customtitlepage
+ \end{titlepage}}
+
+%%
+%% Redefine the preface and chapter so that the latter starts on odd pages
+%% (if two-sided and if past the preface section) and the former does
+%% not have this attribute (since each section of the preface
+%% environment acts like a chapter).
+%%
+\newif\if@twosidebody
+\@twosidebodytrue % Default is true
+
+% Update the PREFACE environment. The titlepage is generated when the
+% environment is first entered and the numbering is roman within the preface.
+% The \endpreface switches to arabic numbering.
+\def\preface{%
+ \newpage
+ \if@twoside % Turn off blank even pages during the preface.
+ \global\@twosidebodyfalse
+ \fi
+ \pagenumbering{roman}%
+ \pagestyle{empty}%
+ \begin{singlespace}%
+ \ifproposal
+ \makeproptitle
+ \setcounter{page}{1}%
+ \addtocounter{page}{\@startpageA}% Advance page counter for title page.
+ \else
+ \maketitle
+ \setcounter{page}{1}%
+ \addtocounter{page}{\@startpageA}% Advance page counter for (signature
+ \fi % and) title. At USC, the signature
+ \newpage % page is not counted!
+ \ifx\@volume\@empty\else % Add Volume ID to contents if present.
+ \addtocontents{toc}{\protect\contentsline{part}{\@volume}{}}%
+ \fi
+ \end{singlespace}%
+ \pagestyle{plain}}
+
+\def\endpreface{%
+ \clearpage
+ \global\@twosidebodytrue
+ \if@twoside
+ \ifodd \c@page \else
+ \hbox{}% Add a blank page at the end of the preface
+ \newpage
+ \fi
+ \fi
+ \pagenumbering{arabic}%
+ \pagestyle{plain}%
+ \setcounter{page}{\@startpageB}}
+
+%
+% Now, update the chapter to check for even/odd pages.
+%
+\def\chapter{%
+ \if@twoside
+ \if@twosidebody
+ \cleardoublepage % Start each chapter on an odd page
+ \else
+ \clearpage
+ \fi
+ \else
+ \clearpage
+ \fi
+ \thispagestyle{plain}
+ \global\@topnum\z@
+ \@afterindentfalse
+ \secdef
+ \@chapter
+ \@schapter}
diff --git a/macros/latex209/contrib/misc/tgrind.sty b/macros/latex209/contrib/misc/tgrind.sty
new file mode 100644
index 0000000000..dc567bf6ca
--- /dev/null
+++ b/macros/latex209/contrib/misc/tgrind.sty
@@ -0,0 +1,167 @@
+% LaTeX tgrind environment
+
+% Based on Van Jacobson's ``tgrindmac'', a macro package for TeX grinding
+% Our job here is to simplify it quite a bit and make it conform to LaTeX
+
+\newif\ifcomment\newif\ifstring
+\newcount\linecount\newcount\linenext
+\newbox\linesofar
+\newdimen\TBwid
+\newdimen\ts
+\newbox\tbox
+
+\def\tgrind{%
+% Stuff we ignore for right now.
+\let\Head=\@gobble
+\def\File##1,##2,##3{}
+\let\Proc=\@gobble
+\let\ProcCont=\@gobble
+%
+% Each formfeed in the input is replaced by a "\NewPage" macro. If
+% you really want a page break here, define this as "\vfill\eject".
+\def\NewPage{\filbreak\bigskip}
+%
+% Each line of the program text is enclosed by a "\L{...}". We turn
+% each line into an hbox of size hsize. If we saw a procedure name somewhere
+% in the line (i.e., "procbox" is not null), we right justify "procbox"
+% on the line. Every 10 lines we output a small, right justified line number.
+\def\L##1{\par\hbox to\hsize{\CF\strut\global\advance\linecount by1
+##1\hss\linebox}}
+%
+\linecount=0
+\linenext=9
+\def\linebox{\ifnum\linecount>\linenext\global\advance\linenext by10
+\hbox{\sevrm\the\linecount}\fi}
+%
+% The following weirdness is to deal with tabs. "Pieces" of a line
+% between tabs are output as "\LB{...}". E.g., a line with a tab at
+% column 16 would be output as "\LB{xxx}\Tab{16}\LB{yyy}". (Actually, to
+% reduce the number of characters in the .tex file the \Tab macro
+% supplies the 2nd & subsequent \LB's.) We accumulate the LB stuff in an
+% hbox. When we see a Tab, we grab this hbox (using "\lastbox") and turn
+% it into a box that extends to the tab position. We stash this box in
+% "\linesofar" & use "\everyhbox" to get \linesofar concatenated onto the
+% front of the next piece of the line. (There must be a better way of
+% doing tabs [cf., the Plain.tex tab macros] but I'm not not enough of a
+% TeX wizard to come up with it. Suggestions would be appreciated.)
+\def\LB{\CF\hbox}
+\setbox\linesofar=\null
+\everyhbox={\box\linesofar}
+\def\Tab##1{\setbox\tbox=\lastbox\TBwid=1\wd\tbox\advance\TBwid by 1\ts
+\ifdim\TBwid>##1\ts
+\setbox\linesofar=\hbox{\box\tbox\space}\else
+\setbox\linesofar=\hbox to ##1\ts{\box\tbox\hfil}\fi\LB}
+%
+% A normal space is too thin for code listings. We make spaces & tabs
+% be in "\ts" units (which are the width of a "0" in the current font).
+\setbox\tbox=\hbox{0} \ts=1\wd\tbox \setbox\tbox=\hbox{\hskip 1\ts}
+\def\space{\hskip 1\ts\relax}
+%
+% Font changing stuff for keywords, comments & strings. We put keywords
+% in boldface, comments in text-italic & strings in typewriter. Since
+% we're usually changing the font inside of a \LB macro, we remember the
+% current font in \CF & stick a \CF at the start of each new box.
+% Also, the characters " and ' behave differently in comments than in
+% code, and others behave differently in strings than in code.
+\let\CF=\rm
+\def\K##1{{\bf ##1}} % Keyword
+\def\C{\it\global\let\CF=\it\global\commenttrue\relax} % Comment Start
+\def\CE{\rm\global\let\CF=\rm\global\commentfalse\relax}% Comment End
+\def\S{\tt\global\let\CF=\tt\global\stringtrue\relax} % String Start
+\def\SE{\rm\global\let\CF=\rm\global\stringfalse\relax} % String End
+%
+% Special characters.
+\def\{{\ifmmode\lbrace\else\ifstring{\char'173}\else$\lbrace$\fi\fi}
+\def\}{\ifmmode\rbrace\else\ifstring{\char'175}\else$\rbrace$\fi\fi}
+\def\!{\ifmmode\backslash\else\ifstring{\char'134}\else$\backslash$\fi\fi}
+\def\|{\ifmmode|\else\ifstring{\char'174}\else$|$\fi\fi}
+\def\<{\ifmmode<\else\ifstring<\else$<$\fi\fi}
+\def\>{\ifmmode>\else\ifstring>\else$>$\fi\fi}
+\def\/{\ifmmode/\else\ifstring/\else$/$\fi\fi}
+\def\-{\ifmmode-\else\ifstring-\else$-$\fi\fi}
+\def\_{\ifstring{\char'137}\else\underbar{\ }\fi}
+\def\&{{\char'046}}
+\def\#{{\char'043}}
+\def\%{{\char'045}}
+\def\~{{\char'176}}
+\def\"{\ifcomment''\else{\tt\char'042}\fi}
+\def\'{\ifcomment'\else{\tt\char'047}\fi}
+\def\^{{\char'136}}
+\def\${{\rm\char'044}}
+%
+\raggedright\obeyspaces%\let =\space%
+}
+
+% \tagrind*[FLOAT]{FILE}{CAPTION}{LABEL}
+% * optional
+% FLOAT float options
+% FILE reads LaTeXgrind input in file FILE
+% CAPTION for list of figures
+% LABEL for \ref and \pageref
+\def\tagrind{\@ifstar{\@stagrind}{\@tagrind}}
+
+\def\@tagrind{\@ifnextchar[{\@@tagrind}{\@@tagrind[t]}}
+\def\@stagrind{\@ifnextchar[{\@@stagrind}{\@@stagrind[t]}}
+
+\def\@@tagrind[#1]#2#3#4{%
+ \begin{figure}[#1]
+ \hrule
+ \vskip .5\baselineskip
+ \begin{minipage}\columnwidth\small
+ \begin{tgrind}
+ \input #2\relax
+ \end{tgrind}
+ \end{minipage}
+ \vskip .5\baselineskip plus .5\baselineskip
+ \begingroup
+ \setbox\z@=\hbox{#4}%
+ \ifdim\wd\z@>\z@
+ \caption{#3}%
+ \label{#4}%
+ \else
+ \captcont{#3}%
+ \fi
+ \endgroup
+ \vskip 2pt
+ \hrule
+ \end{figure}
+}
+
+\def\@@stagrind[#1]#2#3#4{%
+ \begin{figure*}[#1]
+ \hrule
+ \vskip .5\baselineskip
+ \begin{minipage}\textwidth\small
+ \begin{tgrind}
+ \input #2\relax
+ \end{tgrind}
+ \end{minipage}
+ \vskip .5\baselineskip plus .5\baselineskip
+ \begingroup
+ \setbox\z@=\hbox{#4}%
+ \ifdim\wd\z@>\z@
+ \caption{#3}%
+ \label{#4}%
+ \else
+ \captcont{#3}%
+ \fi
+ \endgroup
+ \vskip 2pt
+ \hrule
+ \end{figure*}
+}
+
+
+\def\tgrindfile#1{%
+ \par\addvspace{0.1in}
+ \hrule
+ \vskip .5\baselineskip
+ \begin{footnotesize}
+ \begin{tgrind}
+ \input #1\relax
+ \end{tgrind}
+ \end{footnotesize}
+ \vskip .5\baselineskip
+ \hrule
+ \addvspace{0.1in}
+}
diff --git a/macros/latex209/contrib/misc/thebib-plus.readme b/macros/latex209/contrib/misc/thebib-plus.readme
new file mode 100644
index 0000000000..18cf03f757
--- /dev/null
+++ b/macros/latex209/contrib/misc/thebib-plus.readme
@@ -0,0 +1,22 @@
+thebib-plus.sty - This is for people who are using thebibliography or
+ \bibliography as defined in the standard LaTeX styles,
+ but who want the extra features described below.
+
+With this style-option:
+- the default title is "References", but can be changed by putting a
+ \renewcommand{\bibtitle}{...} command before \begin{thebibliography}
+- if the document style is such that \pagestyle{headings} is used,
+ "REFERENCES" goes in the page-heading by default, but can be changed
+ with \renewcommand{\bibheadtitle}{...}
+- thebibliography gives an \addcontentsline command, so that \tableofcontents
+ puts the bibliography (with appropriate title) in the table of contents.
+
+The files are:
+apalike-plus.sty - This is for people who want something like apalike.sty
+ (perhaps because they are using apalike.bst), but who
+ want the extra features described above.
+authordate1-4.sty - This is for people who are using one of the BibTeX
+ author-date style files authordate1.bst, ... ,
+ authordate4.bst. It redefines \cite and thebibliography,
+ and also defines a \shortcite command such that if \cite
+ gives "(Smith, 1970)", \shortcite gives "(1970)".
diff --git a/macros/latex209/contrib/misc/thebib-plus.sty b/macros/latex209/contrib/misc/thebib-plus.sty
new file mode 100644
index 0000000000..ecd0865e68
--- /dev/null
+++ b/macros/latex209/contrib/misc/thebib-plus.sty
@@ -0,0 +1,46 @@
+% This style-option file, thebib-plus.sty, is based on code taken from
+% article.doc and report.doc/book.doc.
+%
+% It differs from the standard code in that:
+% - a command \bibtitle is defined, to generate the bibliography title
+% - a command \bibheadtitle is defined, to generate the text to be used
+% by \pagestyle{headings}
+% - \bibtitle and \bibheadtitle are set to generate "References" and
+% "REFERENCES" respectively.
+% - an \addcontentsline{toc}{...}{\bibtitle} command is issued.
+% Thus:
+% - the default bibliography title is "References", but can be changed by
+% having \renewcommand{\bibtitle}{...} before \begin{thebibliography}
+% or \bibliography
+% - the default page header text is "REFERENCES", but can be changed by
+% \renewcommand{\bibheadtitle}{...}
+% - \tableofcontents will give a table of contents that mentions the
+% bibliography.
+%
+% David Rhead
+% Cripps Computing Centre
+% February 1990
+
+% Define default title and page-head text.
+%
+\def\bibtitle{References}
+\def\bibheadtitle{REFERENCES}
+
+\@ifundefined{chapter}{\def\thebibliography#1{\section*{\bibtitle\@mkboth
+ {\bibheadtitle}{\bibheadtitle}}
+ \addcontentsline{toc}{section}{\bibtitle}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}}%
+{\def\thebibliography#1{\chapter*{\bibtitle\@mkboth
+ {\bibheadtitle}{\bibheadtitle}}
+ \addcontentsline{toc}{chapter}{\bibtitle}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}}
diff --git a/macros/latex209/contrib/misc/threecolumn.sty b/macros/latex209/contrib/misc/threecolumn.sty
new file mode 100644
index 0000000000..df9045bee2
--- /dev/null
+++ b/macros/latex209/contrib/misc/threecolumn.sty
@@ -0,0 +1,182 @@
+% Document sub-style threecolumn.sty May 23, 1989
+%
+% Author: George D. Greenwade, Director, Center for Business and Economic
+% Research, Sam Houston State University, Huntsville, TX 77341-2056
+% Voice: (409) 294-1518 Bitnet: BED_GDG@SHSU.BITNET
+%
+% Date of Release: May 23, 1989 (original version)
+% Revision History:
+%
+% Purpose: To create LaTeX output in three columns without corrupting the
+% general uses of LaTeX. This version is not suggested for use unless the
+% ENTIRE DOCUMENT is to be in a three column output with no multiple column
+% floats.
+%
+% Usage: Preamble: \documentstyle[...,threecolumn]{...}
+% In text: \threecolumn
+%
+% Features: Addition of \photo{height}{caption} to create an empty box of the
+% dimension \columnwidth wide and specified height (#1), with a caption below
+% set in the \sl font. Height MUST be specified, caption may be blank, but
+% must be left as a null entry (i.e., \photo{2in}{} for a 2-inch blank space).
+% \photo is placed on a minipage within a table[ht]. The caption is photo-
+% specific and does not step the table counter (as best as I can tell).
+%
+% Known Limitations (which would be nice ot fix): May 23, 1989
+% (1) \threecolumn does NOT presently handle MULTIPLE COLUMN table and figure
+% floats properly, but does properly handle footnotes; however, there are
+% no apparent float handling problem in \twocolumn or \onecolumn.
+% (2) Switching from \onecolumn to \twocolumn and \onecolumn to \threecolumn
+% behave properly. Switching from \threecolumn to \twocolumn,
+% \threecolumn to \onecolumn, \twocolumn to \theeecolumn, and \twocolumn
+% to \onecolumn generates a blank (but numbered) page. As a rule,
+% \twocolumn presents strange output results in this sub-style.
+% (3) \maketitle is inoperable in \threecolumn.
+%
+% Copyright (c) 1989 by George D. Greenwade
+% Permission to copy all or part of this work is granted, provided that the
+% copies are not made or distributed for resale, and that the copyright notice
+% and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO WARRANTY
+% WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK, INCLUDING
+% WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
+% PURPOSE.
+%
+% Please forward all fixes and improvements which do not otherwise corrupt the
+% operation of the LaTeX document processing program to the author.
+\typeout{Document Style Option 'threecolumn'. Released 23 May 1989}
+
+\hoffset -.4in % Generalized page layout for three column
+\voffset -.3in % output. Certainly, these are subject to
+\columnsep 15pt % customization, but these definitions seem to
+\textwidth 7.2in % provide efficient default margins.
+\textheight 9.5in %
+\topmargin 0pt %
+\headsep 0pt %
+\headheight 0pt %
+\oddsidemargin 0pt %
+\pretolerance=500 % Needed pretolerance and tolerance to assure
+\tolerance=10000 % text generally fits the columns
+\doublehyphendemerits=100000 % Inhibit consecutive line hyphens
+\brokenpenalty=10000 % Inhibit broken words across columns/pages
+\widowpenalty=10000 % Inhibit widows at bottom of page
+\clubpenalty=10000 % Inhibit orphans at top of page
+
+\newif\if@threecolumn \@threecolumnfalse % New ifs used in routine
+\newif\if@secondcolumn \@secondcolumnfalse %
+\newif\if@thirdcolumn \@thirdcolumnfalse %
+\newbox\@centercolumn % New box to place center column
+\newdimen\photoblock \photoblock=0pt % New dimension used in \photo
+
+\def\onecolumn{\clearpage % Redefine \onecolumn without corruption
+ \global\columnwidth\textwidth
+ \global\hsize\columnwidth \global\linewidth\columnwidth
+ \global\@twocolumnfalse \global\@threecolumnfalse
+ \global\@secondcolumnfalse \global\@thirdcolumnfalse
+ \@floatplacement}
+
+\def\twocolumn{\clearpage % Redefine \twocolumn without corruption
+ \global\columnwidth\textwidth
+ \global\advance\columnwidth -\columnsep \global\divide\columnwidth\tw@
+ \global\hsize\columnwidth \global\linewidth\columnwidth
+ \global\@twocolumntrue \global\@threecolumnfalse
+ \global\@firstcolumntrue \global\@secondcolumnfalse
+ \global\@thirdcolumnfalse
+ \@dblfloatplacement\@ifnextchar[{\@topnewpage}{}}
+
+\def\threecolumn{\clearpage % Define \threeecolumn (very rough;
+ \global\columnwidth\textwidth % handles floats poorly, if at all)
+ \global\advance\columnwidth -\columnsep
+ \global\advance\columnwidth -\columnsep \global\divide\columnwidth\thr@@
+ \global\hsize\columnwidth \global\linewidth\columnwidth
+ \global\@twocolumnfalse \global\@threecolumntrue \global\@firstcolumntrue
+ \global\@secondcolumnfalse \global\@thirdcolumnfalse
+ \@dblfloatplacement\@ifnextchar[{\@topnewpage}{}}
+
+\def\@doclearpagethree{\ifvoid\footins % Define variation of \@doclearpage
+ \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
+%WAS \setbox\@tempboxa\box\@ccl
+ \setbox\@tempboxa\box\@cclv
+ \xdef\@deferlist{\@toplist\@botlist
+ \@deferlist}\gdef\@toplist{}\gdef\@botlist{}\global\@colroom\@colht
+ \ifx\@currlist
+ \@empty\else\@latexerr{Float(s)
+ lost}\@ehb\gdef\@currlist{}\fi
+ \@makefcolumn\@deferlist
+ \@whilesw\if@fcolmade \fi{\@opcol
+ \@makefcolumn\@deferlist}\if@threecolumn
+ \if@firstcolumn
+ \xdef\@dbldeferlist{\@dbltoplist
+ \@dbldeferlist}\gdef\@dbltoplist{}\global\@colht\textheight
+ \begingroup \@dblfloatplacement \@makefcolumn\@dbldeferlist
+ \@whilesw\if@fcolmade \fi \endgroup
+ \if@secondcolumn
+ {\@outputpage\@makefcolumn\@dbldeferlist} \fi \endgroup
+ \else \vbox{}\clearpage
+ \fi\fi
+ \else\setbox\@cclv\vbox{\box\@cclv\vfil}\@makecol\@opcol
+ \clearpage
+ \fi}
+
+\def\@specialoutput{\ifnum\outputpenalty > -\@Mii % Redefine \@specialoutput
+ \if@threecolumn \@doclearpagethree % to handle \threecolumn
+ \else \@doclearpage \fi % environment.
+ \else
+ \ifnum \outputpenalty <-\@Miii
+ \ifnum\outputpenalty<-\@MM \deadcycles\z@\fi
+ \global\setbox\@holdpg\vbox{\unvbox\@cclv}
+%WAS: \else \setbox\@tempboxa\box\@ccl
+ \else \setbox\@tempboxa\box\@cclv
+ \@pagedp\dp\@holdpg \@pageht\ht\@holdpg
+ \unvbox\@holdpg
+ \ifvoid\footins\else\advance\@pageht\ht\footins
+ \advance\@pageht\skip\footins \advance\@pagedp\dp\footins
+ \insert\footins{\unvbox\footins}\fi
+ \@next\@currbox\@currlist{\ifnum\count\@currbox >\z@
+ \@addtocurcol\else\@addmarginpar\fi}\@latexbug
+ \ifnum \outputpenalty <\z@ \penalty \z@ \fi
+ \fi\fi}
+
+\def\@opcol{\global\@mparbottom\z@ % Redefine \@opcol to handle \threecolumn
+ \if@twocolumn\@outputdblcol \fi % environment without corruption
+ \if@threecolumn\@outputtplcol\else
+ \@outputpage \global\@colht\textheight \fi}
+
+\def\@skipcolumn{\if@firstcolumn % Tentatively define \@skipcolumn (for future
+ \global\@firstcolumnfalse % use in two-column-wide material in the
+ \global\@secondcolumnfalse % \threecolumn environment) NOT EMPLOYED!
+ \global\@thirdcolumntrue \fi
+ \if@secondcolumn \global\@firstcolumntrue \global\@secondcolumnfalse
+ \global\@thirdcolumnfalse \fi}
+
+\def\@outputtplcol{\if@firstcolumn % Define \@outputtplcol (analogous to
+ \global\@firstcolumnfalse % \@outputdblcol, but for \threecolumn)
+ \global\@secondcolumntrue \global\@thirdcolumnfalse
+ \global\setbox\@leftcolumn\box\@outputbox
+\else
+ \if@secondcolumn \global\@secondcolumnfalse \global\@thirdcolumntrue
+ \global\setbox\@centercolumn\box\@outputbox
+\else
+\global\@thirdcolumnfalse \global\@firstcolumntrue
+ \setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
+ {\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil
+\hbox to\columnwidth
+ {\hss \box\@centercolumn \hss}\hfil \vrule width\columnseprule\hfil
+ \hbox to\columnwidth{\box\@outputbox \hss}}}\@combinedblfloats
+ \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+ \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup
+ \fi \fi}
+
+\def\photoblocksize{\global\photoblock=\columnwidth % Define width of the
+ \advance \photoblock -\columnsep % photo block
+ \if@threecolumn \advance \photoblock -\columnsep \fi}
+
+\def\photo#1#2{\photoblocksize % Define \photo{height}{caption} as floating
+ \begin{table}[ht] % blank space for photo insertions to be used
+\begin{minipage}{\photoblock} % in final paste-up.
+\rule{0pt}{#1} \\ % #1 is height
+\end{minipage} % width defaults to column width
+\begin{center} {\sl \ #2} % #2 is caption set in the \sl font face
+\end{center}
+\end{table}}
diff --git a/macros/latex209/contrib/misc/timetab.sty b/macros/latex209/contrib/misc/timetab.sty
new file mode 100644
index 0000000000..8e6969532f
--- /dev/null
+++ b/macros/latex209/contrib/misc/timetab.sty
@@ -0,0 +1,93 @@
+%%
+%% TimeTab Style by Tobias Oetiker Created 1993-4-19
+%% >>>>>>>>>>BETA VERSION <<<<<<<<<<<<<<<<<<<<<<<<<<<
+%%
+%% Works Best with NFSS installed ... (but works anyway)
+%%
+%% Comments to oetiker@stud.ee.ethz.ch please
+%%
+%% This Style implements a new environment to create
+%% timetables as in the example below.
+%%
+%%
+%% Environment: timetab{Unitlength}%
+%% {Horizontal Boxes}{Vetical Boxes}%
+%% {X Box Size}{Y Box Size}
+%% Commands: \Lek{X Location}{Y Location}{Vertical Size in Boxes}{Text}
+%% \BLek similar to \Lek but with bold and larger Font.
+%%
+%% Example: to create a Time Table like This:
+%% _______ ________ ________
+%% | Time | | |
+%% |_______| Other |________|
+%% | | Field | |
+%% | Cente |________| |
+%% | TxT | | |
+%% |_______| | 4.Fie |
+%% | | | |
+%% | |________| |
+%% | | | |
+%% |_______|________|________|
+%%
+%% Enter:
+%% \documentstyle[timetab]{article}
+%% \begin{document}
+%% \begin{timetab}{0.8cm}{3}{5}{3}{1}
+%% \BLek{0}{0}{1}{Time}
+%% \Lek{1}{0}{2}{Other\\Filed}
+%% \Lek{0}{1}{2}{Cente\\TxT}
+%% \Lek{1}{2}{2}{}
+%% \Lek{2}{1}{4}{4.Fie}
+%% \end{timetab}
+%% \end{document}
+%%
+%%
+%% 1993-4-19 Version 0.1 Initial Creation of this Style
+%%
+\newcount\tmfx
+\newcount\tmfy
+\newcount\tmfh
+\newcount\XNR
+\newcount\YNR
+\newcount\Breite
+\newcount\Hoehe
+\newcount\THoehe
+\newcount\TBreite
+
+\newenvironment{timetab}[5]{%
+\setlength{\unitlength}{#1}
+\XNR=#2 % Number of Boxes Horizontal
+\YNR=#3 % Number of Boxes Vertical
+\Breite=#4 % X Size of a Box
+\Hoehe=#5 % Y Size of a Box
+\THoehe=\Hoehe
+\multiply \THoehe by \YNR
+\TBreite=\Breite
+\multiply \TBreite by \XNR
+\begin{picture}(\TBreite,\THoehe)(0,-\THoehe)
+\put(0,0){\line(1,0){\TBreite}}
+\put(0,-\THoehe){\line(1,0){\TBreite}}
+
+\put(0,0){\line(0,-1){\THoehe}}
+\multiput(\Breite,0)(\Breite,0){#2}{\line(0,-1){\THoehe}}%
+}{\end{picture}}
+
+\newcommand{\Lek}[4]{%
+ \tmfh=#3
+ \multiply \tmfh by \Hoehe
+ \tmfx=#1
+ \multiply \tmfx by \Breite
+ \tmfy=#2
+ \advance \tmfy by #3
+ \multiply \tmfy by \Hoehe
+ \put(\tmfx,-\tmfy){%
+ \begin{picture}(\Breite,\tmfh)(0,0)
+ \put(0,0){\makebox(\Breite,\tmfh){%
+ \parbox{\Breite\unitlength}{\centering\footnotesize\sf #4}}}
+ \multiput(0,0)(0,\tmfh){2}{\line(1,0){\Breite}}
+ \end{picture}
+ }
+}
+
+\newcommand{\BLek}[4]{\Lek{#1}{#2}{#3}{\small\sf\bf #4}}
+\endinput
diff --git a/macros/latex209/contrib/misc/topnum.sty b/macros/latex209/contrib/misc/topnum.sty
new file mode 100644
index 0000000000..e0cb50ae17
--- /dev/null
+++ b/macros/latex209/contrib/misc/topnum.sty
@@ -0,0 +1,7 @@
+% Hiermit kriegt man die Seitenzahl oben in die Mitte
+\def\ps@plain{\def\@oddhead{}\def\@oddfoot{\hfil \thepage \hfil}%
+ \def\@evenhead{}\def\@evenfoot{}}
+\def\ps@mypage{\def\@oddhead{\hfil \thepage~\hfil}%
+ \def\@oddfoot{}%
+ \def\@evenhead{}\def\@evenfoot{}}
+\ps@plain
diff --git a/macros/latex209/contrib/misc/trademarks.sty b/macros/latex209/contrib/misc/trademarks.sty
new file mode 100644
index 0000000000..3003534f5b
--- /dev/null
+++ b/macros/latex209/contrib/misc/trademarks.sty
@@ -0,0 +1,81 @@
+% Trademarks...
+
+\def\gobble#1{}
+\def\tradeORGfont{\sc} % used for organizations (e.g., ACM)
+\def\tradeNAMfont{\sf} % used for names (e.g., Ada)
+
+\def\tradeorg#1{%
+ \tradeaux{#1}{\expandafter\gobble\string#1}\empty\tradeORGfont
+}
+\def\tradeorgn#1#2{%
+ \tradeaux{#1}{#2}\empty\tradeORGfont
+}
+\def\tradename#1#2#3{\tradeaux{#1}{#2}{#3}\tradeNAMfont}
+\def\trademark#1#2{%
+ \tradeaux{#1}{\expandafter\gobble\string#1}{#2}\tradeNAMfont
+}
+
+\def\tradeaux#1#2#3#4{%
+ \def#1/{\relax}% % in case #3 references #1
+ \setbox0=\hbox{#3}% % when we make the \hbox
+ \ifdim\wd0>0pt
+ \gdef#1/{%
+ \tradeaux{#1}{#2}\empty{#4}%
+ #1/\footnote{#1/ is a trademark of #3.}%
+ }%
+ \else
+ \gdef#1/{{#4#2}}%
+ \fi
+}
+
+\tradeorg\acm
+\tradeorg\ansi
+\tradeorg\Apple
+\tradename\Ada{Ada}
+ {the Department of Defense (\Ada/ Joint Program Office)}
+\tradename\balance{Balance} {Sequent Computer Systems, Incorporated}
+\tradeorg\bsd
+\tradename\butterfly{Butterfly}{Bolt, Beranek, and Newman, Incorporated}
+\tradeorg\ccitt
+\tradename\cms{CMS} {International Business Machines, Incorporated}
+\tradename\cpm{CP/M} {Digital Research Corporation}
+\tradename\chrysalis{Chrysalis}{Bolt, Beranek, and Newman, Incorporated}
+\tradename\decnet{DECnet} {Digital Equipment Corporation}
+\tradeorgn\dod{DoD}
+\tradename\dynix{DYNIX} {Sequent Computer Systems, Incorporated}
+\tradename\ethernet{Ethernet} {the Xerox Corporation}
+\tradename\eunice{Eunice} \empty
+\tradename\exos{EXOS} {Excelan, Incorporated}
+\tradeorg\IBM
+\tradename\ibmpc{IBM PC} {International Business Machines, Incorporated}
+\tradeorg\HP
+\tradename\IMAGEN{IMAGEN} {IMAGEN Corporation}
+\tradeorg\ieee
+\tradename\lattice{Lattice} {Lattice, Incorporated}
+\tradename\locus{Locus} {Locus Computing Corporation}
+\tradename\mac{Macintosh} {Apple Computer, Incorporated}
+\def\microvax/{$\mu$\vax/}
+\def\microvms/{$\mu$\vms/}
+\tradeorg\milstd
+\tradename\Miranda{Miranda} {Research Software Limited}
+\tradename\msdos{MS-DOS} {Microsoft Corporation}
+\tradename\mvs{MVS} {International Business Machines, Incorporated}
+\tradeorg\NCC
+\tradeorg\NPL
+\tradename\pcdos{PC-DOS} {International Business Machines, Incorporated}
+\tradename\pcinterface{PC-Interface}%
+ {Locus Computing Corporation}
+\tradename\pdp{PDP} {Digital Equipment Corporation}
+\tradename{\tops20}{Tops20} {Digital Equipment Corporation}
+\tradename\Sun{Sun Workstation} {Sun Microsystems Incorporated}
+\tradename\trustedmail{Trusted\ Mail}%
+ {Trusted Technologies, Incorporated}
+\tradeorg\QMS
+\tradename\ultrix{ULTRIX} {Digital Equipment Corporation}
+\tradename\unibus{UNIBUS} {Digital Equipment Corporation}
+\tradename\Unix{{\sc Unix}} {AT\&T Bell Laboratories}
+\tradename\vax{VAX} {Digital Equipment Corporation}
+\tradename\vm{VM} {International Business Machines, Incorporated}
+\tradename\vms{VMS} {Digital Equipment Corporation}
+\tradename\xenix{Xenix} {Microsoft Corporation}
+\tradeorg\Xerox
diff --git a/macros/latex209/contrib/misc/trees.sty b/macros/latex209/contrib/misc/trees.sty
new file mode 100644
index 0000000000..be4c556cd4
--- /dev/null
+++ b/macros/latex209/contrib/misc/trees.sty
@@ -0,0 +1,120 @@
+% treedef.tex
+%
+% These definitions for tree macros are taken from "Trees in TeX",
+% by David Eppstein, as published in TUGboat 6#1, March 1985.
+% David Eppstein's address (as of 15 June 1988) is
+% Computer Science Department
+% Columbia University
+% New York, NY 10027
+% Eppstein@cs.Columbia.edu
+
+\newbox\treebox
+\def\tree{\global\setbox\treebox=\boxtree}
+\def\subtree{\ettext \boxtree}
+\def\leaf#1{\subtree#1\endsubtree}
+
+\def\endsubtree{\ettext \egroup}
+\def\endtree{\endsubtree \settreesizes \typesettree}
+
+\newif\iftreetext\treetextfalse % Whether still aligning text
+\def\boxtree{\hbox\bgroup % Start outer box of tree or subtree
+ \baselineskip 2.5ex % Narrow line spacing slightly
+ \tabskip 0pt % No spurious glue in alignment
+ \vbox\bgroup % Start inner text \vbox
+ \treetexttrue % Remember for \ettext
+ \let\par\crcr \obeylines % New line breaks without explicit \cr
+ \halign\bgroup##\hfil\cr} % Start alignment with simple template
+\def\ettext{\iftreetext % Are we still in inner text \vbox?
+ \crcr\egroup \egroup \fi} % Yes, end alignment and box
+
+\def\cons#1#2{\edef#2{\xmark #1#2}} % Add something to start of list.
+\def\car#1{\expandafter\docar#1\docar} % Take first element of list
+\def\docar\xmark#1\xmark#2\docar{#1} % ..by ignoring rest in expansion.
+\def\cdr#1{\expandafter\docdr#1\docdr#1} % Similarly, drop first element.
+\def\docdr\xmark#1\xmark#2\docdr#3{\def#3{\xmark #2}}
+\def\xmark{\noexpand\xmark} % List separator expands to self.
+\def\nil{\xmark} % Empty list is just a separator.
+
+\def\settreesizes{\setbox0=\copy\treebox \global\let\treesizes\nil \setsizes}
+\newdimen\treewidth % Width of this part of the tree.
+\def\setsizes{\setbox0=\hbox\bgroup % Get a horiz list as a workspace.
+ \unhbox0\unskip % Take tree, unpack it into horiz list.
+ \inittreewidth % Get old width at this level.
+ \sizesubtrees % Recurse through all subtrees.
+ \sizelevel % Now set width from remaining \vbox.
+ \egroup} % All done, finish our \hbox.
+
+\def\inittreewidth{\ifx\treesizes\nil % If this is the first at this level
+ \treewidth=0pt % ..then we have no previous max width.
+ \else \treewidth=\car\treesizes % Otherwise take old max level width
+ \global\cdr\treesizes % ..and advance level width storage
+ \fi} % ..in preparation for next level.
+
+\def\sizesubtrees{\loop % For each box in horiz list (subtree)
+ \setbox0=\lastbox \unskip % ..pull it off list and flush glue.
+ \ifhbox0 \setsizes % If hbox, it's a subtree - recurse
+ \repeat} % ..and loop; end loop on tree text.
+
+\def\sizelevel{\ifdim\treewidth<\wd0 % If greater than previous maximum
+ \treewidth=\wd0 \fi % Then set max to new high
+ \global\cons{\the\treewidth}\treesizes}% In either case, put back on list
+
+\newdimen\treeheight % Height of this part of the tree.
+\newif\ifleaf % Tree has no subtrees (is a leaf).
+\newif\ifbotsub % Bottom subtree of parent.
+\newif\iftopsub % Top subtree of parent.
+\def\typesettree{\medskip \maketree \medskip} % Make whole tree with spacing.
+\def\maketree{\hbox{\treewidth=\car\treesizes % Get width at this level.
+ \cdr\treesizes % Set up width list for recursion.
+ \makesubtreebox\unskip % Set \treebox to text, make subtrees.
+ \ifleaf \makeleaf % No subtrees, add glue.
+ \else \makeparent \fi}} % Have subtrees, stick them at right.
+
+{\catcode`@=11 % Be able to use \voidb@x.
+\gdef\makesubtreebox{\unhbox\treebox % Open up tree or subtree.
+ \unskip\global\setbox\treebox\lastbox % Pick up very last box.
+ \ifvbox\treebox % If we're already at the \vbox
+ \global\leaftrue \let\next\relax % ..then this is a leaf.
+ \else \botsubtrue % Otherwise, we have subtrees.
+ \setbox0\box\voidb@x % Init stack of processed subs
+ \botsubtrue \let\next\makesubtree % ..and call \maketree on them.
+ \fi \next}} % Finish up for whichever it was.
+
+\def\makesubtree{\setbox1\maketree % Call \maketree on this subtree.
+ \unskip\global\setbox\treebox\lastbox % Pick up box before it.
+ \treeheight=\ht1 % Get height of subtree we made
+ \advance\treeheight 2ex % Add some room around the edges
+ \ifhbox\treebox \topsubfalse % If picked up box is a \vbox,
+ \else \topsubtrue \fi % ..this is the top, otherwise not.
+ \addsubtreebox % Stack subtree with the rest.
+ \iftopsub \global\leaffalse % If top, remember not a leaf
+ \let\next\relax \else % ..(after recursion), set return.
+ \botsubfalse \let\next\makesubtree % Otherwise, we have more subtrees.
+ \fi \next} % Do tail recursion or return.
+
+\def\addsubtreebox{\setbox0=\vbox{\subtreebox\unvbox0}}
+\def\subtreebox{\hbox\bgroup % Start \hbox of tree and lines
+ \vbox to \treeheight\bgroup % Start \vbox for vertical rules.
+ \ifbotsub \iftopsub \vfil % If both bottom and top subtree
+ \hrule width 0.4pt % ..vertical rule is just a dot.
+ \else \treehalfrule \fi \vfil % Bottom gets half-height rule.
+ \else \iftopsub \vfil \treehalfrule % Top gets half-height the other way.
+ \else \hrule width 0.4pt height \treeheight \fi\fi % Middle, full height.
+ \egroup % Finish vertical rule \vbox.
+ \treectrbox{\hrule width 1em}\hskip 0.2em\treectrbox{\box1}\egroup}
+
+\def\treectrbox#1{\vbox to \treeheight{\vfil #1\vfil}}
+\def\treehalfrule{\dimen0=\treeheight % Get total height.
+ \divide\dimen0 2\advance\dimen0 0.2pt % Divide by two, add half horiz height.
+ \hrule width 0.4pt height \dimen0} % Make a vertical rule that high.
+
+\def\makeleaf{\box\treebox} % Add leaf box to horiz list.
+\def\makeparent{\ifdim\ht\treebox>\ht0 % If text is higher than subtrees
+ \treeheight=\ht\treebox % ..use that height.
+ \else \treeheight=\ht0 \fi % Otherwise use height of subtrees.
+ \advance\treewidth-\wd\treebox % Take remainder of level width
+ \advance\treewidth 1em % ..after accounting for text and glue.
+ \treectrbox{\box\treebox}\hskip 0.2em % Add text, space before connection.
+ \treectrbox{\hrule width \treewidth}\treectrbox{\box0}} % Add \hrule, subs.
+
+\endinput
diff --git a/macros/latex209/contrib/misc/truecols.doc b/macros/latex209/contrib/misc/truecols.doc
new file mode 100644
index 0000000000..0517057972
--- /dev/null
+++ b/macros/latex209/contrib/misc/truecols.doc
@@ -0,0 +1,398 @@
+\iffalse
+% This is truecols.doc, a sub-style for use with SliTeX.
+% It is documented with the conventions of doc.sty; run it through a
+% suitable driver file to print format the documentation.
+% It is intended for use with ltugboat.sty as it stands.
+% Note that with the old doc.sty you'll get extra space at the front
+% of paras starting with \DescribeMacro.
+% Use docstrip.tex to strip the comments to form truecols.sty.
+
+%% Copyright D.Love, SERC Daresbury Laboratory, 1991
+%% The `doc' version of this style is re-distributable and usuable
+%% under conditions of the GNU copyleft, but please mark any changes,
+%% list them here and report any major enhancements to the author.
+\fi
+\def\filedate{18/4/90}
+\def\fileversion{1.2}
+% \NoBlackBoxes
+% \def\ps{\PS}\def\dvi{{\tt dvi}}\def\pj{Paint\-Jet}
+%^^A can't use \verb in arguments:
+% \def\sp{{\tt\char\escapechar special}}
+% \title{Experiments in \TeX nicolour --- A \SliTeX\ Sub-style for
+% Colour Printers\footnote{File version \fileversion, dated
+% \filedate.}}
+% \author{David Love}
+% \address{SERC Daresbury Laboratory,\\Warrington WA4 4AD, UK}
+% \netaddress{d.love@daresbury.ac.uk}
+%
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% \SliTeX\ assumes that colour transparencies will be produced from
+% layers, each printed in a single colour. This sub-style allows a
+% suitable \dvi{} driver to produce multi-coloured
+% slides in one go (i.e., using a single layer). It is customisable
+% for \ps{} printers or simpler colour devices like the the HP \pj{}.
+% \end{abstract}
+%
+% \section{Introduction}
+% \SliTeX{}---a version of \LaTeX{} for making slides---supports colours
+% in its output by producing `colour layers', one per colour \cite{slitex}.
+% It is assumed that these will be copied to transparencies of the
+% appropriate colour and overlapped to make a composite multi-colour
+% slide. Colour is valuable on slides, but this means
+% of producing it is inconvenient and inappropriate if you have
+% a colour printer and a suitable \dvi{} driver for it.
+%
+% This sub-style for \SliTeX{} allows all the colours to be produced
+% in one layer. It is designed for use with colour \ps{} printers or
+% others like the HP \pj{} with suitable \dvi{} drivers, following
+% experiments with these printers at Daresbury.
+% It is intended to provoke discussion
+% of the use of colour with \TeX{}, a subject about which little
+% has been said so far in public, rather than be at all definitive.
+%
+% \section{Approach}
+% Use of colour with \TeX{} is non-standard and has to
+% be done by passing information to the \dvi{} driver. This could be
+% done in one of two ways:
+% \begin{itemize}
+% \item using fonts whose names idenitify them to the driver to
+% be printed in a particular colour but are otherwise
+% identical to the black version (possibly using virtual fonts \cite{vf});
+% \item using the \sp{} mechanism to tell the driver to
+% change colours.
+% \end{itemize}
+% The second option is easier to implement with an existing driver and
+% allows colour for other objects than characters i.e.,
+% rules,\footnote{{\tt \char\escapechar colorslides} doesn't work
+% properly with rules---they come out in each layer.}
+% and has been adopted here.
+% Unfortunately, existing drivers differ in their \verb+\special+
+% mechanisms and few understand colour explicitly.
+% However, drivers which allow you to include arbitrary \ps{} with a
+% \sp{} have this ability implicitly
+% since colour operators are defined in \ps{} \cite{redbook}.
+% (Colour gets rendered in shades of grey on a normal laser printer,
+% which can help with proofing.)
+%
+% There is a proposed standard for \sp{}s \cite{hosek}
+% which includes colour information, but the definition of the
+% \verb+textcolor+ \sp{} is inconveniently related to the \dvi{} stack.
+% Working with existing \ps{} drivers, one has to make
+% some assumptions about them, as detailed below.
+%
+% In the case of the \pj{} printer there does not appear to be an existing
+% driver, so one was produced with a suitable \sp{} defined arbitrarily.
+%
+% \section{\pj{} Driver}
+% The Hewlett-Packard \pj{} can print in colour at 180~dpi, which
+% is quite adequate for making transparencies. A driver for it was
+% produced using the HP Laserjet version from Beebe's family \cite{beebe}
+% as a basis since this has rather similar control sequences.
+% It was extended to maintain four bitmaps independently,
+% allowing three colours other than black to be printed. Allowing
+% more colours would make the code more complicated and slower as well
+% as using more memory for the bitmaps. It supports one
+% \sp{} to allow colour changes between black, red, green
+% and blue. A defect is that the result of overlapping items of
+% different colours is independent of their order in the \dvi{} file,
+% but this simplifies the driver considerably.
+%
+% \section{Assumptions}
+% The necessary assumptions about the driver are largely isolated in
+% the macros \verb+\special@color+
+% and \verb+\colormix+.\footnote{I spell the
+% English way except in code names, where I reluctantly use `color'
+% for consistency with existing code.}
+% Suitable changes could be quite easily made to conform with an
+% eventual standard for \sp{}s or use a different driver.
+%
+% \subsection{\ps}
+% We assume that a \ps{} driver understands
+% \sp{}s of the form
+% \begin{center}
+% \verb*+\special{ps:: +\meta{code}\verb+}+,
+% \end{center}
+% where \meta{code} is
+% arbitrary \ps{} from which the surrounding code output by the driver is not
+% protected. This is appropriate for Rokicki's
+% {\tt dvips} and ArborText's DVILASER/PS\@.
+\iffalse
+% and
+% would be for the Daresbury {\tt dvitops} if it didn't zap the
+% graphics state at each font change.\footnote{This can probably be
+% fixed by messing with the header.}
+\fi
+% We use the RGB colour model \cite[\S 4.8]{redbook}.
+%
+% \subsection{\pj{} or other printer}
+% A non-\ps{} printer should understand a special of the form
+% \verb*+{color +\meta{colour}\verb+}+, where \meta{colour} can take
+% the values {\tt black\rm, \tt red\rm, \tt green\rm\ or \tt blue},
+% determining the colour of all subsequent printing until the next
+% change. The default is assumed to be black.
+%
+% \section{User interface}
+% As well as re-defining some internal \SliTeX{} macros, we make some
+% new ones as described below.
+%
+% \DescribeMacro{\psprinterfalse}
+% The default is to assume the use of a \ps{} printer. Saying
+% \verb+\psprinterfalse+ changes this to produce output suitable for
+% the \pj{} (or similar printer). This should only be done
+% in the preamble.
+%
+% Any colours you use {\em must\/} be declared using
+% \verb+\colors+ \DescribeMacro{\colors}(even red, green, blue and black).
+% \DescribeEnv{slide}
+% They do not need including in the argument of \verb+\begin{slide}+ for
+% use with \verb+\truecolors+, but there needs to be some argument,
+% even if it's null.
+%
+% \DescribeMacro{\truecolors}
+% Like \verb+\blackandwhite+, \verb+\truecolors+ is
+% invoked from the driver file to process a batch of slides described
+% in the file given as its argument. It works like
+% \verb+\blackandwhite+ in that it only makes one layer, but will
+% include the
+% information for the printer to produce the
+% colours in the \dvi{} file. Notes are not printed by
+% \verb+\truecolors+.
+%
+% \subsection{\ps{} specifics}
+% \DescribeMacro{\colormix}
+% Before you use a new \ps{} colour, you have to define how it is
+% mixed from red, green and blue. \verb+\colormix+ does this for you.
+% It takes four arguments. The first is the name of the colour and
+% the others are numeric values for the intensities of red, green and
+% blue respectively in the mixture. (See the description of RGB in
+% \cite{redbook}.) These values must lie in the
+% range 0--1 such that 1 is most intense and 0 is no
+% intensity. Thus you might define yellow by
+% \[\verb+\colormix{yellow}{0}{1}{1}+\]
+% You don't need to define red, green, blue or black---they are done
+% already.
+%
+% You could put blocks of text on a coloured background either by
+% setting it on top of a suitably-sized rule or using explicit \sp s.
+%
+% \subsection{Other printers}
+% Only red, green, blue and black are available. Use of
+% \verb+\colormix+ will produce a warning. Using a non-white
+% background won't work very well with the \pj{}.
+%
+% \subsection{Problem with list environments}
+% A problem occurs if you want the first text in a list environment
+% item to be a different colour to the label since \verb+\special+s
+% before the text appear in the \dvi{} file before the label.
+% A way round this is to insert \verb+\leavevmode+ after \verb+\item+.
+% This sort of problem may occur in other situtaions.
+%
+% \section{Code}
+% \subsection{Driver-independent code}
+% \begin{macrocode}
+\typeout{SliTeX style option `truecols' (v. \fileversion\space of \filedate)}
+% \end{macrocode}
+% \DescribeMacro{\if@truecol}
+% We introduce a new switch to tell us whether we can assume we have
+% true colour printing capability and unset it initially.
+% \begin{macrocode}
+\newif \if@truecol \@truecolfalse
+% \end{macrocode}
+% \DescribeMacro{\the@color}
+% We keep track of the current colour using \verb+\the@color+
+% (to get colours right with grouping).
+% Initially it's black.
+% \begin{macrocode}
+\def\the@color{\black}
+% \end{macrocode}
+% \DescribeMacro{\ifpsprinter}
+% This tells us if we're dealing with a \ps{} printer (the default)
+% or not.
+% \begin{macrocode}
+\newif \ifpsprinter \psprintertrue
+% \end{macrocode}
+% \DescribeMacro{\truecolors}
+% A new \verb+\truecolors+ command is defined, which works like
+% \verb+\blackandwhite+, printing everything in the file given as its
+% argument in one layer. Thus it must set the \verb+\@bw+
+% switch. This slightly unfortunate change to \verb+\@bw+'s
+% meaning makes the alterations easier.
+% \begin{macrocode}
+\newcommand{\truecolors}[1]{\@truecoltrue \blackandwhite{#1}}
+% \end{macrocode}
+%\DescribeMacro{\@color}
+% We modify \verb+\@color+ to take note of the \verb+@truecol+ setting
+% (if \verb+@bw+ is set). If appropriate, it puts out a
+% colour-changing \sp{} using \verb+\special@color+. We can omit the
+% test for a colour change in math mode if we're not depending on
+% invisible fonts.
+% \begin{macrocode}
+\def\@color#1{%
+ \if@truecol \else \@mmodetest \fi % change
+ \if@bw \@visibletrue
+ \if@truecol \special@color{#1}\fi % change
+ \else \@visiblefalse
+ \@for \@x@a :=#1\do{\ifx\@x@a\@currcolor\@visibletrue\fi}\fi
+ \@currsize \@currfont \ignorespaces}
+% \end{macrocode}
+% \DescribeMacro{\endslide}
+% We ensure that the driver colour is
+% reset to black at the end of each slide
+% by setting it in \verb+\endslide+.
+% \begin{macrocode}
+\def\endslide{\@color{black}\par\break}
+% \end{macrocode}
+% \DescribeMacro{\note}
+% We don't want to waste truecolour output on producing notes, which
+% we will if we don't re-define \verb+\note+ (since \verb+@bw+ is set
+% by \verb+\truecolors+). We just add a test on \verb+@truecol+.
+% \begin{macrocode}
+\def\note{%
+ \stepcounter{note}%
+ \if@bw
+ \if@truecol \gdef\@slidesw{F}% added
+ \else
+ \gdef\@slidesw{T}%
+ \if@onlynotesw\@whilenum \c@slide > \@donotehigh\relax
+ \do{\@setlimits\@donotelist\@donotelow\@donotehigh}\ifnum
+ \c@slide < \@donotelow\relax \gdef\@slidesw{F}\fi\fi\fi
+ \else \gdef\@slidesw{F}\fi
+ \if\@slidesw T\newpage\thispagestyle{note}\else
+ \end{note}\@gobbletoend{note}\fi }
+% \end{macrocode}
+% \DescribeMacro{\colors}
+% We re-define \verb+\colors+ to check that we know about those
+% specified. It could, perhaps, be dispensed with at the cost of
+% incompatibility with standard \SliTeX{}. If we're not using \ps{}
+% only the four pre-defined colours are available.
+% \begin{macrocode}
+\def\colors#1{%
+ \@for\@colortemp:=#1\do{%
+ \@ifundefined{\@colortemp @mix}{% change
+ \ifpsprinter
+ \errhelp{You could use I to define it now.}%
+ \errmessage{You need to use \noexpand\colormix to define
+ \@colortemp}%
+ \else
+ \errhelp{It's safe to carry on.}%
+ \errmessage{You can only use black, red, green and blue with
+ this printer, not \@colortemp}%
+ \expandafter\xdef\csname\@colortemp\endcsname{\relax}%
+ \fi
+ }{}
+ \expandafter\xdef\csname\@colortemp\endcsname
+ {\noexpand\@color{\@colortemp}}%
+ }% (do)
+ \ifx\@colorlist\@empty \gdef\@colorlist{#1}%
+ \else \xdef\@colorlist{\@colorlist,#1}\fi}
+% \end{macrocode}
+% \DescribeMacro{\pagestyle}
+% Finally we change the default pagestyle since the alignment marks
+% would only be useful with overlays.
+% \begin{macrocode}
+\pagestyle{plain}
+% \end{macrocode}
+%
+% \subsection{Driver-dependent code}
+% \DescribeMacro{\colormix}
+% The \ps{} user can mix new colours in the RGB model using
+% \verb+\colormix+. It takes four arguments, the name of the colour
+% (which must then be declared with \verb+\colors+) and three real numbers
+% in the range 0--1 describing respectively the intensity of red,
+% green and blue in the result. The result is to define a macro of
+% the form \verb+\+\meta{colour}\verb+@mix+ to be a list of arguments 2--4.
+% \begin{macrocode}
+\def\colormix#1#2#3#4{%
+ \ifpsprinter \else \typeout{Warning: \noexpand\colormix used with
+ \noexpand\psprinterfalse.}\fi
+ \color@range@check{#2}\color@range@check{#3}\color@range@check{#4}%
+ \expandafter\xdef\csname#1@mix\endcsname{#2 #3 #4}}
+% \end{macrocode}
+% \DescribeMacro{\color@range@check}
+% We need to check that the numeric arguments of \verb+\colormix+ are
+% in the range 0--1. Since they're real numbers we
+% convert them to dimensions to test.
+% \begin{macrocode}
+\def\color@range@check#1{%
+ \def\fred{\errhelp{Carry on, but you'll get a PostScript error if
+ you try to print the results.}%
+ \errmessage{\noexpand\colormix arguments must be in the
+ range 0--1}}%
+ \ifdim#1 pt < 0pt \fred \fi \ifdim#1 pt > 1pt \fred \fi }
+% \end{macrocode}
+% \DescribeMacro{\special@color}
+% This has to change the current colour on the output device to that
+% given as its argument,
+% but first has to store the current value and make sure it is
+% re-instated at the end of the current group. (Coloured fonts would
+% avoid the need for this.) Note the \verb+{}+ inserted at the end of
+% the group to avoid spaces being gobbled afterwards as with
+% \verb+{\red foo} bar+. Probably there's a better way of doing this.
+% \begin{macrocode}
+\def\special@color#1{%
+ \def\the@color{\csname#1\endcsname}\aftergroup\the@color
+ \aftergroup{\aftergroup}%
+% \end{macrocode}
+% To change colour with \ps{} we use a \sp{} which
+% will emit code of the form
+% \begin{center} \meta{red level}\verb*+ +\meta{green level}\verb*+ +^^A
+% \meta{blue level}\verb*+ +{\tt setrgbcolor} \end{center}
+% Perhaps this should be parameterised.
+% The three levels are provided by a macro of the form
+% \verb+\+\meta{colour}\verb+@mix+ which must be defined for each
+% \meta{colour} which is used.
+% It might be useful is to
+% define a white font (RGB=[1~1~1]) which could be painted over a
+% coloured region.
+% \begin{macrocode}
+ \ifpsprinter \special{ps:: \csname#1@mix\endcsname\space
+ setrgbcolor\space}%
+% \end{macrocode}
+% For the \pj{} we output
+% \begin{center}\verb*+\special{color +\meta{colour}\verb+}+,
+% \end{center}
+% where \meta{colour} can be {\tt black\rm, \tt red\rm, \tt green \rm
+% or \tt blue} and we assume that \verb+#1+ is one of these.
+% \begin{macrocode}
+ \else \special{color #1}\fi % (\ifpsprinter)
+} % (\def\special@color)
+% \end{macrocode}
+% \DescribeMacro{\black@mix}\DescribeMacro{\red@mix}
+% \DescribeMacro{\blue@mix}\DescribeMacro{\green@mix}
+% Here we define the RGB mixes for the \ps{} colours we support
+% initially. These macros need defining for the \pj{} too, so that we
+% can check on colours the user tries to invoke.
+% \begin{macrocode}
+\def\black@mix{0 0 0} \def\red@mix{1 0 0}
+\def\blue@mix{0 0 1} \def\green@mix{0 1 0}
+% \end{macrocode}
+% \begin{thebibliography}{1}
+% \bibitem{slitex} Leslie Lamport. {\sl \LaTeX{}: A Document
+% Preparation System}; {\tt slitex.tex} dated 10 November 1986; {\tt
+% slides.sty} dated 17 January 1986.
+% \bibitem{vf} Donald Knuth. \TUB, 11(1), 1990, p.~13.
+% \bibitem{redbook} Adobe Systems Inc. {\sl\ps\ Language Reference Manual}.
+% \bibitem{hosek} Don Hosek. Proposed \verb+DVI \special+ command
+% standard. (See \TUB, 10(2), 1989, p.~188.)
+%^^A \bibitem{glv&tjr} Glenn L. Vandenberg and Thomas J. Reid.
+%^^A \sp{} issues. \TUB, 8(3), 1987, p.~287.
+% \bibitem{beebe} Nelson H. F. Beebe. {\sl A \TeX{} DVI Driver Family}.
+% \end{thebibliography}
+% {\tenuit Note added:\enspace } Since doing this work I have become
+% aware of two related pieces of work. One is Ken Yap's article
+% ``Making 35~mm Colour Slides with \SliTeX'' in \TUB{} 11.2 (1990),
+% p.~279. He also used a modified version of a Beebe driver for his
+% raster device, but maintained the colour layers idea. This style
+% provides the `more elegant and general solution' to the problem
+% mentioned in his conclusion.
+%
+% The other work is concerned with specifically \PS{} printers rather
+% than raster ones. It is Leslie Lamport's {\tt ps-slides.sty} which
+% Sebastian Rahtz pointed out to me, available from the Aston archive.
+% Since it is specific to \PS{} it can support fancier facilities. His
+% approach to changing the way standard \SliTeX{} works is somewhat
+% different from mine, which presumably means I was a little misguided.
+% \makesignature
diff --git a/macros/latex209/contrib/misc/uhthesis.sty b/macros/latex209/contrib/misc/uhthesis.sty
new file mode 100644
index 0000000000..5f60e37ddc
--- /dev/null
+++ b/macros/latex209/contrib/misc/uhthesis.sty
@@ -0,0 +1,391 @@
+
+% University of Houston PhD/MS thesis style -- modifications to the report style
+% For LaTeX version 2.09
+%
+% Author: Dimitrios Georgakopoulos (dimitris@cs.uh.edu)
+%
+% The float and footnote macros bellow are stolen from the
+% Stanfford University thesis style.
+
+\typeout{Document Style Option `uhthesis' <31 Aug 90>.}
+
+\long\def\comment#1{}
+\comment{
+
+Example of use:
+ \documentstyle[12pt,uhthesis]{report}
+ \begin{document}
+ \title{Transaction Management in\\ Multidatabase Systems}
+ \author{Dimitrios Georgakopoulos}
+ \adviser{Dr. Marek Rusinkiewicz, Chairman}
+ \firstreader{Dr. Farok Bastani}
+ \secondreader{Dr. Paulina Markenscoff\\Computer Engineering Department}
+
+ \makecoverpages
+ \begin{abstract}
+ This thesis tells you all you need to know about...
+ \end{abstract}
+ \begin{acknowledgements}
+ I would like to thank...
+ \end{acknowledgements}
+ \makecontentspages
+ \chapterpages
+
+ \chapter{Introduction}
+ ...
+ \chapter{Conclusions}
+ ...
+ \appendix
+ \chapter{A Long Proof}
+ ...
+ \bibliographystyle{plain}
+ \bibliography{mybib}
+ \end{document}
+
+Documentation:
+ This style file modifies the standard report style to follow the
+ Dean's Office "Preparing your Thesis/Dissertation for Submission
+ to the college of Natural Sciences and Mathematics: A Guideline".
+
+ The \makecoverpages command creates a copyright page (optionally),
+ the title page and, and the signature page. The \begin{abstact}
+ command creates the abstract page. The abstract itself should be
+ included between a \begin{abstact} and an \end{abstact} command,
+ as usual. Your (optional) acknowlegments should be included in the
+ (optional) \begin{acknowledments} ...\end{acknowledments} section.
+ The \makecontentspages command produces the table of contents, the
+ list of tables (optional) and the list of figures (optinal). Finally,
+ the \chapterpages command sets the page style of the main body of
+ your thesis.
+
+ The following commands can control what goes in the front matter
+ material:
+
+ \title{thesis title}
+ \author{author's name}
+ \degree{author's degree}{type of thesis}
+ - e.g. \degree{Masters of Science}{Thesis}
+ - if \degree is ommitted,
+ \degree{Doctor of Philosophy}{Dissertation} is assumed
+ \department{author's department}
+ - Computer Science if omitted
+ \college{the college or school the thesis is submitted to}
+ - College of Natural Sciences and Mathematics if omitted
+ \adviser{the adviser's name}
+ \firstreader{the first reader's name}
+ \secondreader{the second reader's name}
+ \thirdreader{the third reader's name}
+ \fourthreader{the fourth reader's name}
+ \threereaderstrue or \threereadersfalse
+ - print or don't print a third reader in the
+ signature page (true by default)
+ \fourreaderstrue or \fourreadersfalse
+ - print or don't print a fourth reader in the
+ signature page (true by default)
+ \submitdate{month year in which the thesis is submitted}
+ - date LaTeX'd if omitted
+ \copyrighttrue or \copyrightfalse
+ - produce or don't produce a copyright page (true by default)
+ \figurelisttrue or \figurelistfalse
+ - produce or don't produce a List of Figures page
+ (true by default)
+ \tablelisttrue or \tablelistfalse
+ - produce or don't produce a List of Tables page
+ (true by default)
+
+
+ This style uses interline spacing that is 1.6 times normal, except
+ in the figure and table environments where normal spacing is used.
+ That can be changed by doing:
+ \renewcommand{\baselinestretch}{1.6}
+ (or whatever you want instead of 1.6)
+ Unfortunately, that command probably won't take effect unless it comes
+ before the \begin{document} or after something like \small \normalsize.
+
+ The example above shows the 12pt substyle being used. This seems to give
+ acceptable looking results, but it may be omitted to get smaller print.
+}
+
+% First thing we do is make sure that report has been loaded. A
+% common error is to try to use uhthesis as a documentstyle.
+\@ifundefined{chapter}{\@latexerr{The `uhthesis' option should be used
+with the `report' document style}}{}
+
+% We need 1 1/2" margins except on the right edge, where it is 1"
+% Theses are single-sided, so we don't care about \evensidemargin
+\oddsidemargin 0.5in \evensidemargin 0in
+%\marginparwidth 40pt \marginparsep 10pt
+\topmargin 0in
+\headsep 0.4in
+\textheight 8in
+\textwidth 5.95in
+
+% Disallow page breaks at hyphens (this will give some underfull vbox's,
+% so an alternative is to use \brokenpenalty=100 and manually search
+% for and fix such page breaks)
+\brokenpenalty=10000
+
+% Use 1.6 times the normal baseline-to-baseline skip
+\renewcommand{\baselinestretch}{1.6}
+
+% Roman page numbers in cover pages
+\pagenumbering{roman}
+
+% Redefine the macro used for floats (including figures and tables)
+% so that single spacing is used.
+% (Note \def\figure{\@float{figure}set single spacing} doesn't work
+% because figure has an optional argument)
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa p\advance\@tempcnta \@ne\fi
+ \if\@tempa p\advance\@tempcnta \tw@\fi
+ \if\@tempa p\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \def\baselinestretch{1}\@normalsize
+ \boxmaxdepth\z@
+ \hsize\columnwidth \@parboxrestore}
+
+% Redefine the macro used for footnotes to use single spacing
+\long\def\@footnotetext#1{\insert\footins{\def\baselinestretch{1}\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% \author, \title are defined in report style; here are the rest definitions
+% Define degree & thesis type
+% it takes two arguments: author's degree and thesis/disseration/whatever
+% defaults Doctor of Philosophy and Dissertation
+\def\degree#1#2{
+ \gdef\@degree{#1}
+ \gdef\@thesistype{#2}}
+\def\@degree{\rm Doctor of Philosophy}
+\def\@thesistype{\rm Dissertation}
+
+% Define college/school -- default College of Natural Sciences and Mathematics
+\def\college#1{\gdef\@college{#1}}
+\def\@college{\rm College of Natural Sciences and Mathematics}
+
+% Define department -- default Computer Science
+\def\department#1{\gdef\@department{#1}}
+\def\@department{\rm Computer Science}
+
+% Thesis advisor and committee
+\def\adviser#1{\gdef\@adviser{#1}}
+\def\firstreader#1{\gdef\@firstreader{#1}}
+\def\secondreader#1{\gdef\@secondreader{#1}}
+\def\thirdreader#1{\gdef\@thirdreader{#1}}
+\def\fourthreader#1{\gdef\@fourthreader{#1}}
+\def\submitdate#1{\gdef\@submitdate{#1}}
+
+% \author, \title in report
+\def\@title{}
+\def\@author{}
+\def\@adviser{}
+\def\@firstreader{}
+\def\@secondreader{}
+\def\@thirdreader{}
+\def\@fourthreader{}
+\def\@submitdate{\ifcase\the\month\or
+ January,\or February,\or March,\or April,\or May,\or June,\or
+ July,\or August,\or September,\or October,\or November,\or December,\fi
+ \space \number\the\year}
+
+\newif\ifcopyright
+\copyrighttrue
+
+\newif\iffigurelist
+\figurelisttrue
+
+\newif\iftablelist
+\tablelisttrue
+
+\newif\ifthreereaders
+\threereaderstrue
+
+\newif\iffourreaders
+\fourreaderstrue
+
+%Cover pages
+\def\titlep{%
+ \newpage
+ \thispagestyle{empty}%
+ \setcounter{page}{1}
+ \begin{center}
+ \Large\uppercase\expandafter{\@title}
+ \end{center}
+ \vskip.3in
+ \centerline{\vrule width 1.5in height 0.4pt}
+ \vskip.5in
+ \begin{center}
+ \rm A \expandafter{\@thesistype}\\
+ Presented to\\
+ the Faculty of the Department of
+ \expandafter{\@department}\\
+ University of Houston
+ \vskip.4in
+ \centerline{\vrule width 1.5in height 0.4pt}
+ \vskip.5in
+ In Partial Fulfillment\\
+ of the Requirements for the Degree\\
+ \expandafter{\@degree}
+ \vskip.4in
+ \centerline{\vrule width 1.5in height 0.4pt}
+ \vskip.5in
+ \rm By\\
+ \@author\\
+ \@submitdate\\
+ \end{center}}
+
+\def\copyrightpage{%
+ \newpage
+ \thispagestyle{empty}%
+ \setcounter{page}{1}
+ \null\vskip2.5in
+ \begin{center}
+ \copyright \ COPYRIGHTED BY\\
+ \vskip.5in
+ \underline{\@author}\\
+ \vskip.5in
+ \underline{\@submitdate}
+ \end{center}}
+
+
+\def\signaturepage{%
+ \newpage
+ \begin{center}
+ \Large\uppercase\expandafter{\@title}
+ \end{center}
+ \vspace{.5in}
+ \rightline{\shortstack[l]{\vrule width 3in height 0.4pt\\
+ \@author}}
+ \vspace{0.5in}
+ \hspace{2.9in} \rm APPROVED:
+
+ \vspace{.5in}
+ \rightline{\shortstack[l]{\vrule width 3in height 0.4pt\\ \@adviser}}
+ \vspace{.5in}
+ \rightline{\shortstack[l]{\vrule width 3in height 0.4pt\\ \@firstreader}}
+ \vspace{.5in}
+
+ \rightline{\shortstack[l]{\vrule width 3in height 0.4pt\\ \@secondreader}}
+ \vspace{.5in}
+ \ifthreereaders
+ \rightline{\shortstack[l]{\vrule width 3in height 0.4pt\\ \@thirdreader}}
+ \fi
+ \vspace{.5in}
+ \iffourreaders
+ \rightline{\shortstack[l]{\vrule width 3in height 0.4pt\\ \@fourthreader}}
+ \fi
+ \vspace{.8in}
+ \leftline{\shortstack[l]{\vrule width 4in height
+ 0.4pt\\Dean, \expandafter{\@college}}}}
+
+\def\makecoverpages{%
+ \ifcopyright\copyrightpage\fi
+ \titlep
+ \signaturepage}
+
+
+%Abstract cover page
+\def\abstractp{%
+ \newpage
+ \begin{center}
+ \Large\uppercase\expandafter{\@title}
+ \end{center}
+ \vskip.3in
+ \centerline{\vrule width 1.5in height 0.4pt}
+ \vskip.5in
+ \begin{center}
+ \rm An Abstract of a \expandafter{\@thesistype}\\
+ Presented to\\
+ the Faculty of the Department of
+ \expandafter{\@department}\\
+ University of Houston
+ \vskip.4in
+ \centerline{\vrule width 1.5in height 0.4pt}
+ \vskip.5in
+ In Partial Fulfillment\\
+ of the Requirements for the Degree\\
+ \expandafter{\@degree}
+ \vskip.4in
+ \centerline{\vrule width 1.5in height 0.4pt}
+ \vskip.5in
+ \rm By\\
+ \@author\\
+ \@submitdate\\
+ \end{center}}
+
+%Abstract
+\def\abstract{
+ \abstractp
+ \newpage
+ \begin{center}
+ \Huge \bf Abstract
+ \end{center}}
+
+%\def\endabstract{}
+
+%Acknowledgements
+\def\acknowledgements{
+ \newpage
+ \begin{center}
+ \Huge \bf Acknowledgements
+ \end{center}}
+
+%\def\endacknowledgements{}
+
+%Table of contents
+\def\makecontentspages{
+ \def\baselinestretch{1}\@normalsize
+ \tableofcontents
+ \newpage
+ \iffigurelist
+ \listoffigures
+ \newpage
+ \fi
+ \iftablelist
+ \listoftables
+ \newpage
+ \fi
+ \def\baselinestretch{1.6}\@normalsize}
+
+%Chapter page definition
+\def\chapterpages{
+ % Put the page number on the top of the page
+% \def\@oddhead{\rm\hfil\thepage\hfil}
+% \def\@oddfoot{}
+% \let\@evenhead\@oddhead
+% \let\@evenfoot\@oddfoot
+
+ \pagenumbering{arabic}}
+
+% Redefine \thebibliography to go to a new page and put an entry in the
+% table of contents
+\let\@ldthebibliography\thebibliography
+\renewcommand{\thebibliography}[1]{
+ \newpage
+ \def\baselinestretch{1}\@normalsize
+ \addcontentsline{toc}{chapter}{Bibliography}
+ \@ldthebibliography{#1}}
+
+% Single space for drafts
+\def\singlespace{
+ \def\baselinestretch{1}\@normalsize}
+
+%That's all folks
+
+
+%Jim Briggs, Ph.D. <-- Dept. of Chem. <-- Univ. of Houston <-- Houston <-- TX
+% <-- 77204-5641 <-- (713)743-3315 <-- JBriggs@UH.EDU
+
+
diff --git a/macros/latex209/contrib/misc/ukdate.sty b/macros/latex209/contrib/misc/ukdate.sty
new file mode 100644
index 0000000000..8a39f217a0
--- /dev/null
+++ b/macros/latex209/contrib/misc/ukdate.sty
@@ -0,0 +1,203 @@
+% --- ------------------------------------------------------------------
+% --- English-style Date Macros for LaTeX, version 1.00--0.
+% --- ------------------------------------------------------------------
+%
+% --- \today (replaces American-style macro of same name) generates
+% --- today's date in the form Thursday 4th October 1066.
+% --- The `th' is raised, reduced in size and underlined in the
+% --- same font style (family) as the rest of the date.
+%
+% --- \st generates a raised, reduced, underlined `st', as in 1st.
+% --- \nd generates a raised, reduced, underlined `nd', as in 2nd.
+% --- \rd generates a raised, reduced, underlined `rd', as in 3rd.
+% --- \th generates a raised, reduced, underlined `th', as in 4th.
+%
+% --- \dayofweek generates the day of the week, based on TeX's values
+% --- of \day, \month and \year.
+%
+% --- \phaseofmoon generates the current phase of the moon, again based
+% --- on TeX's values for \day, \month and \year.
+%
+% --- ------------------------------------------------------------------
+% --- Adrian F. Clark (alien@uk.ac.essex.ese) 26-Oct-1988 10:05:50
+% --- ------------------------------------------------------------------
+
+% --- Counters. Note that we use the same registers as TeX holds other
+% --- things in (e.g., \count0 holds the page number). This requires
+% --- that \@savestyle, \@setstyle, \dayofweek and \phaseofmoon perform
+% --- all their register manipulations within a group. This may seem
+% --- a bit messy, but it saves having eight registers permanently set
+% --- aside just for date calculation.
+
+\def\@cent{\count0 } % century number (1979 == 20)
+\def\@diy{\count1 } % day in the year
+\def\@dow{\count2 } % gets day of the week
+\def\@epact{\count3 } % age of the moon on Jan. 1
+\def\@golden{\count4 } % Moon's golden number
+\def\@leap{\count5 } % leap year fingaler
+\def\@x{\count6 } % temp register
+\def\@y{\count7 } % another temp register
+
+
+% --- A replacement for the ``plain'' TeX and LaTeX \today macro, to
+% --- to output the date in English-style.
+% --- They ensure the smaller text comes out in the right font by saving
+% --- the font family before reducing the size, then restoring it. (This
+% --- was suggested by Leslie Lamport.) Of course, it requires that the
+% --- font in use when today is invoked has a sensible family.
+
+\def\@up#1{{\@savestyle\thinspace$^{\underline{\hbox{%
+ \scriptsize\@setstyle#1\fam=-1 }}}$}}
+\def\st{\@up{st}}
+\def\nd{\@up{nd}}
+\def\rd{\@up{rd}}
+\def\th{\@up{th}}
+
+% --- Macros to save and restore the font family.
+
+\def\@savestyle{\count0=\the\fam}
+\def\@setstyle{\ifcase\count0\rm\or\mit\or\cal\or\rm% what's family 3?
+ \or\it\or\sl\or\bf\or\tt\fi}
+
+% --- The date, English style (e.g. Thursday 4th October 1066).
+
+\def\today{\dayofweek\ \number\day\ifcase\day
+ \or\st\or\nd\or\rd\or\th\or\th\or\th\or\th\or\th\or\th\or\th
+ \or\th\or\th\or\th\or\th\or\th\or\th\or\th\or\th\or\th\or\th
+ \or\st\or\nd\or\rd\or\th\or\th\or\th\or\th\or\th\or\th\or\th\or\st\fi
+ \space\ifcase\month\or January\or February\or March\or April\or May\or
+ June\or July\or August\or September\or October\or November\or December\fi
+ \space\number\year}
+
+% --- The day of the week ("Sunday", etc.) is inserted into the text
+% --- by \dayofweek. (This uses registers \@dow, \@leap, \@x and \@y.)
+% --- I acquired this from elsewhere; I don't know who wrote it.
+
+\def\dayofweek{{%
+% leap = year + (month - 14)/12;
+ \@leap=\month \advance\@leap by -14 \divide\@leap by 12
+ \advance\@leap by \year
+% dow = (13 * (month + 10 - (month + 10)/13*12) - 1)/5
+ \@dow=\month \advance\@dow by 10
+ \@y=\@dow \divide\@y by 13 \multiply\@y by 12
+ \advance\@dow by -\@y \multiply\@dow by 13
+ \advance\@dow by -1 \divide\@dow by 5
+% dow += day + 77 + 5 * (leap % 100)/4
+ \advance\@dow by \day \advance\@dow by 77
+ \@x=\@leap \@y=\@x \divide\@y by 100 \multiply\@y by 100 \advance\@x by -\@y
+ \multiply\@x by 5 \divide\@x by 4 \advance\@dow by \@x
+% dow += leap / 400
+ \@x=\@leap \divide\@x by 400 \advance\@dow by \@x
+% dow -= leap / 100 * 2;
+% dow = (dow % 7)
+ \@x=\@leap \divide\@x by 100 \multiply\@x by 2 \advance\@dow by -\@x
+ \@x=\@dow \divide\@x by 7 \multiply\@x by 7 \advance\@dow by -\@x
+ \ifcase\@dow Sunday\or Monday\or Tuesday\or Wednesday\or
+ Thursday\or Friday\or Saturday\fi}}
+%
+% --- Likewise, \phaseofmoon inserts the phase of the moon into the
+% --- text. This was written by the same person as \dayofweek.
+% --- The routine calculates the year's epact (the age of the moon on Jan 1.),
+% --- adds this to the number of days in the year, and calculates the phase
+% --- of the moon for this date. It returns the phase as a string, e.g.,
+% --- "new", "full", etc.
+%
+% --- In the algorithm:
+% --- diy is the day of the year - 1 (i.e., Jan 1 is day 0).
+% --- golden is the number of the year in the Mentonic cycle, used to
+% --- determine the position of the calender moon.
+% --- epact is the age of the calender moon (in days) at the beginning
+% --- of the year. To calculate epact, two century-based
+% --- corrections are applied:
+% --- Gregorian: (3 * cent)/4 - 12
+% --- is the number of years such as 1700, 1800 when
+% --- leap year was not held.
+% --- Clavian: (((8 * cent) + 5) / 25) - 5
+% --- is a correction to the Mentonic cycle of about
+% --- 8 days every 2500 years. Note that this will
+% --- overflow 16 bits in the year 409600. Beware.
+% --- The algorithm is accurate for the Gregorian calender only.
+%
+% --- The magic numbers used in the phase calculation are:
+% --- 29.5 The moon's period in days.
+% --- 177 29.5 scaled by 6
+% --- 22 (29.5 / 8) scaled by 6 (this gets the phase)
+% --- 11 ((29.5 / 8) / 2) scaled by 6
+%
+% --- Theoretically, this should yield a number in the range 0 .. 7. However,
+% --- two days per year, things don't work out too well.
+%
+% --- Epact is calculated by the algorithm given in Knuth vol. 1 (Calculation
+% --- of Easter). See also the article on Calenders in the Encyclopaedia
+% --- Britannica and Knuth's algorithm in CACM April 1962, page 209.
+%
+\def\phaseofmoon{{%
+ \@diy=\day \advance\@diy by \ifcase\month % Jan 1 == 0
+ -1\or -1\or 30\or 58\or 89\or 119\or 150\or % Jan .. Jun
+ 180\or 211\or 241\or 272\or 303\or 333\fi % Jul .. Dec
+% if ((month > 2) && ((year % 4 == 0) &&
+% ((year % 400 == 0) || (year % 100 != 0))))
+% diy++; /* Leapyear fixup */
+ \ifnum \month>2
+ \@x=\year \@y=\@x \divide\@y by 4 \multiply\@y by 4 \advance\@x by -\@y
+ \ifnum \@x=0 % month > 2 and maybe leapyear
+ \@x=\year \@y=\@x \divide\@y by 400
+ \multiply\@y by 400 \advance\@x by -\@y
+ \ifnum \@x=0 % 2000 is a leap year
+ \advance\@diy by 1 % so it's one day later
+ \else % not 2000, check other '00's
+ \@x=\year \@y=\@x \divide\@y by 100
+ \multiply\@y by 100 \advance\@x by -\@y
+ \ifnum \@x>0 % not some other '00' year
+ \advance\@diy by 1 % it's still one day later
+ \fi % not odd century
+ \fi % not 2000-type century
+ \fi % not leapish year
+ \fi % not march or later
+% cent = (year / 100) + 1; /* Century number */
+% golden = (year % 19) + 1; /* Golden number */
+ \@cent=\year \divide\@cent by 100 \advance\@cent by 1
+ \@golden=\year
+ \@y=\year \divide\@y by 19 \multiply\@y by 19 \advance\@golden by -\@y
+ \advance\@golden by 1
+% epact = ((11 * golden) + 20 /* Golden number */
+% + (((8 * cent) + 5) / 25) - 5 /* 400 year cycle */
+% - (((3 * cent) / 4) - 12)) % 30; /* Leap year correction */
+ \@epact=11 \multiply\@epact by \@golden
+ \advance\@epact by 20
+ \@x=8 \multiply\@x by \@cent \advance\@x by 5
+ \divide\@x by 25 \advance\@x by -5
+ \advance\@epact by \@x
+ \@x=3 \multiply\@x by \@cent \divide\@x by 4 \advance\@x by -12
+ \advance\@epact by -\@x
+ \@y=\@epact \divide\@y by 30 \multiply\@y by 30 \advance\@epact by -\@y
+% if (epact <= 0)
+% epact += 30; /* Age range is 1 .. 30 */
+% if ((epact == 25 && golden > 11) || epact == 24)
+% epact++;
+ \ifnum \@epact<0
+ \advance\@epact by 30
+ \fi
+ \ifnum \@epact=25
+ \ifnum \@golden>11
+ \advance \@epact by 1
+ \fi
+ \else
+ \ifnum \@epact=24
+ \advance \@epact by 1
+ \fi
+ \fi
+%
+% --- Calculate the phase, using the magic numbers defined above.
+% --- Note that phase may be equal to 8 (== 0) on two days of the year
+% --- due to the way the algorithm was implemented.
+% --- phase = (((((diy + epact) * 6) + 11) % 177) / 22) & 7;
+%
+ \@x=\@diy \advance\@x by \@epact \multiply\@x by 6 \advance\@x by 11
+ \@y=\@x \divide\@y by 177 \multiply\@y by 177 \advance\@x by -\@y
+ \divide\@x by 22
+ \ifcase\@x new\or waxing crescent\or in its first quarter\or
+ waxing gibbous\or full\or waning gibbous\or
+ in its last quarter\or waning crescent\or new\fi}}
+
+% --- End of ukdate.sty
diff --git a/macros/latex209/contrib/misc/underlin.tex b/macros/latex209/contrib/misc/underlin.tex
new file mode 100644
index 0000000000..e2495f63bd
--- /dev/null
+++ b/macros/latex209/contrib/misc/underlin.tex
@@ -0,0 +1,16 @@
+\nofiles
+\documentstyle[doc]{article}
+
+^^A !!!! Warning !!!!
+^^A Comment character in this file is ^^A not %
+^^A after doc.sty was read in.
+
+ \DisableCrossrefs
+^^A \EnableCrossrefs ^^A Uncomment this line if you want
+ ^^A full crossreferences
+ \OnlyDescription ^^A Outcomment this line if you want
+ ^^A the full article
+
+\begin{document}
+ \input{underlin.sty}
+\end{document}
diff --git a/macros/latex209/contrib/misc/unfinished.tex b/macros/latex209/contrib/misc/unfinished.tex
new file mode 100644
index 0000000000..3904365789
--- /dev/null
+++ b/macros/latex209/contrib/misc/unfinished.tex
@@ -0,0 +1,44 @@
+% -*- Mode: TeX -*-
+
+\ifx\thisfileis\anUndefinedMacro\input maybeload \fi
+
+\thisfileis{<eb.tex.texlocal>unfinished} % abort loading if already loaded
+
+% This file defines a LaTex environment that's convenient for marking unfinished
+% sections of a paper.
+%
+% \begin{unfinished}
+% \* explain the hairy stuff
+% \* give examples
+% \end{unfinished}
+%
+% There are also the abbreviations \notfinished and \notwritten.
+%
+% The \begin{unfinished}...\end{unfinished} environment is like an
+% itemize environment, but it also types a warning if it occurs
+% in a document that's not a draft (as determined heuristically by
+% the setting of \overfullrule).
+%
+% To shut off the \unfinished sections entirely in a pinch, you
+% can use the command \killunfinished. Of course, normally
+% you should repair them by finishing them. There may be
+% bugs in the \killunfinished mechanism.
+
+\newcommand{\unfinished}{\ifdim\overfullrule > 0pt\else
+ \typeout{WARNING: Unfinished section not in a draft.}
+ \fi\def\*{\item{}}\bgroup\itemize}
+
+\newdef\endunfinished{\egroup\enditemize}
+
+\newcommand{\unfinisheditem}[1]{\begin{unfinished}
+\item #1
+\end{unfinished}}
+
+\newcommand{\notfinished}{\unfinisheditem{not finished yet}}
+\newcommand{\notwritten}{\unfinisheditem{not written yet}}
+
+\makeatletter
+\newdef\killunfinished{\def\unfinished{\setbox9\vbox\bgroup\itemize}
+\def\endunfinished{\egroup}}
+\makeatother
+
diff --git a/macros/latex209/contrib/misc/unilogo.sty b/macros/latex209/contrib/misc/unilogo.sty
new file mode 100644
index 0000000000..568a05169c
--- /dev/null
+++ b/macros/latex209/contrib/misc/unilogo.sty
@@ -0,0 +1,259 @@
+%
+% ##############################################################################
+% ## ##
+% ## This LaTeX macro generates the University of Stuttgart logo which is ##
+% ## considered as single character. Its size can be arbitrarily selected ##
+% ## from 15mm to 75mm in diameter. If the requested size is out of this ##
+% ## range a framebox containing an error notification is printed instead ##
+% ## of the logo. ##
+% ## ##
+% ## If the mathematical symbol fonts defined within this macro are not ##
+% ## available on a specific installation the macro can be easily adapted ##
+% ## to the available fonts. ##
+% ## ##
+% ## Parameters: P1 = requested size [mm] ##
+% ## ##
+% ##############################################################################
+% ## ##
+% ## Copyright : Universitaet Stuttgart, Institut fuer Nachrichten- ##
+% ## vermittlung und Datenverarbeitung (IND) ##
+% ## Author : Gert Willmann ##
+% ## Date : 25-NOV-1988 ##
+% ## ##
+% ##############################################################################
+%
+
+\newcommand {\UniStuttgartLogo} [1] {\setlength{\unitlength}{#1}
+ %
+ \font \MINUSFOUR = cmsy5 scaled 1000 % About 10pt magstep -4 (font [PIXEL.1500]cmsy5)
+ \font \MINUSTHREE = cmsy5 scaled 1200 % About 10pt magstep -3 (font [PIXEL.1800]cmsy5)
+ \font \MINUSTWO = cmsy7 scaled 1000 % About 10pt magstep -2 (font [PIXEL.1500]cmsy7)
+ \font \MINUSONE = cmsy7 scaled 1200 % About 10pt magstep -1 (font [PIXEL.1800]cmsy7)
+ \font \ZERO = cmsy10 scaled 1000 % Exact 10pt magstep 0 (font [PIXEL.1500]cmsy10)
+ \font \PLUSONE = cmsy10 scaled 1200 % Exact 10pt magstep +1 (font [PIXEL.1800]cmsy10)
+ \font \PLUSTWO = cmsy10 scaled 1440 % Exact 10pt magstep +2 (font [PIXEL.2160]cmsy10)
+ \font \PLUSTHREE = cmsy10 scaled 1728 % Exact 10pt magstep +3 (font [PIXEL.2592]cmsy10)
+ \font \PLUSFOUR = cmsy10 scaled 2073 % Exact 10pt magstep +4 (font [PIXEL.3110]cmsy10)
+ \font \PLUSFIVE = cmsy10 scaled 2488 % Exact 10pt magstep +5 (font [PIXEL.3732]cmsy10)
+ \font \PLUSSIX = cmsy10 scaled 2986 % Exact 10pt magstep +6 (font [PIXEL.4479]cmsy10)
+ %
+ \ifdim \unitlength<15.00mm
+ \def \DIAMOND ##1 {}
+ \else
+ \ifdim \unitlength<18.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\MINUSFOUR\symbol{'005}}}
+ \put (##1) {\makebox(-0.010,-0.010){\PLUSTWO\symbol{'001}}}} % Offset to compensate bad symbol alignment
+ \else
+ \ifdim \unitlength<21.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\MINUSTHREE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\MINUSFOUR\symbol{'005}}}
+ \put (##1) {\makebox(-0.010,-0.010){\PLUSTWO\symbol{'001}}}} % Offset to compensate bad symbol alignment
+ \else
+ \ifdim \unitlength<24.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\MINUSTWO\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\MINUSFOUR\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\MINUSFOUR\symbol{'017}}}}
+ \else
+ \ifdim \unitlength<27.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\MINUSONE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\MINUSTHREE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\MINUSTHREE\symbol{'017}}}}
+ \else
+ \ifdim \unitlength<31.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\ZERO\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\MINUSTWO\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\MINUSTWO\symbol{'017}}}}
+ \else
+ \ifdim \unitlength<36.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\PLUSONE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\MINUSONE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\MINUSONE\symbol{'017}}}}
+ \else
+ \ifdim \unitlength<42.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\PLUSTWO\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSONE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSONE\symbol{'017}}}}
+ \else
+ \ifdim \unitlength<49.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\PLUSTHREE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSTWO\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSTWO\symbol{'017}}}}
+ \else
+ \ifdim \unitlength<58.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\PLUSFOUR\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSTHREE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSTHREE\symbol{'017}}}}
+ \else
+ \ifdim \unitlength<69.00mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\PLUSFIVE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSFOUR\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSFOUR\symbol{'017}}}}
+ \else
+ \ifdim \unitlength<75.01mm
+ \def \DIAMOND ##1 {\put (##1) {\makebox(0.000,0.000){\PLUSSIX\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSFIVE\symbol{'005}}}
+ \put (##1) {\makebox(0.000,0.000){\PLUSFIVE\symbol{'017}}}}
+ \else
+ \def \DIAMOND ##1 {}
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ %
+ \begin{picture}(1.000,1.000)(-0.500,-0.500)
+ \ifdim \unitlength<15.00mm
+ \thinlines
+ \put (-0.500,-0.500) {\framebox(1.000,1.000){\scriptsize\it\shortstack{Size\\ too\\ small}}}
+ \typeout {UniStuttgartLogo -- Released 25 November 1988, requested size too small.}
+ \else
+ \ifdim \unitlength<75.01mm
+ \DIAMOND { 0.000, 0.000} % Center (0,0)
+ \DIAMOND {-0.500, 0.000} % X-Axis (*,0)
+ \DIAMOND {-0.342, 0.000}
+ \DIAMOND {-0.205, 0.000}
+ \DIAMOND {-0.091, 0.000}
+ \DIAMOND { 0.091, 0.000}
+ \DIAMOND { 0.205, 0.000}
+ \DIAMOND { 0.342, 0.000}
+ \DIAMOND { 0.500, 0.000}
+ \DIAMOND { 0.000,-0.500} % Y-Axis (0,*)
+ \DIAMOND { 0.000,-0.342}
+ \DIAMOND { 0.000,-0.205}
+ \DIAMOND { 0.000,-0.091}
+ \DIAMOND { 0.000, 0.091}
+ \DIAMOND { 0.000, 0.205}
+ \DIAMOND { 0.000, 0.342}
+ \DIAMOND { 0.000, 0.500}
+ \DIAMOND { 0.041, 0.041} % First quadrant (+,+)
+ \DIAMOND { 0.087, 0.087}
+ \DIAMOND { 0.137, 0.137}
+ \DIAMOND { 0.191, 0.191}
+ \DIAMOND { 0.249, 0.249}
+ \DIAMOND { 0.311, 0.311}
+ \DIAMOND { 0.377, 0.377}
+ \DIAMOND { 0.144, 0.046}
+ \DIAMOND { 0.046, 0.144}
+ \DIAMOND { 0.202, 0.097}
+ \DIAMOND { 0.097, 0.202}
+ \DIAMOND { 0.263, 0.152}
+ \DIAMOND { 0.152, 0.263}
+ \DIAMOND { 0.270, 0.051}
+ \DIAMOND { 0.051, 0.270}
+ \DIAMOND { 0.328, 0.211}
+ \DIAMOND { 0.211, 0.328}
+ \DIAMOND { 0.338, 0.107}
+ \DIAMOND { 0.107, 0.338}
+ \DIAMOND { 0.398, 0.274}
+ \DIAMOND { 0.274, 0.398}
+ \DIAMOND { 0.412, 0.166}
+ \DIAMOND { 0.166, 0.412}
+ \DIAMOND { 0.418, 0.056}
+ \DIAMOND { 0.056, 0.418}
+ \DIAMOND { 0.488, 0.231}
+ \DIAMOND { 0.231, 0.488}
+ \DIAMOND { 0.498, 0.116}
+ \DIAMOND { 0.116, 0.498}
+ \DIAMOND {-0.041, 0.041} % Second quadrant (-,+)
+ \DIAMOND {-0.087, 0.087}
+ \DIAMOND {-0.137, 0.137}
+ \DIAMOND {-0.191, 0.191}
+ \DIAMOND {-0.249, 0.249}
+ \DIAMOND {-0.311, 0.311}
+ \DIAMOND {-0.377, 0.377}
+ \DIAMOND {-0.144, 0.046}
+ \DIAMOND {-0.046, 0.144}
+ \DIAMOND {-0.202, 0.097}
+ \DIAMOND {-0.097, 0.202}
+ \DIAMOND {-0.263, 0.152}
+ \DIAMOND {-0.152, 0.263}
+ \DIAMOND {-0.270, 0.051}
+ \DIAMOND {-0.051, 0.270}
+ \DIAMOND {-0.328, 0.211}
+ \DIAMOND {-0.211, 0.328}
+ \DIAMOND {-0.338, 0.107}
+ \DIAMOND {-0.107, 0.338}
+ \DIAMOND {-0.398, 0.274}
+ \DIAMOND {-0.274, 0.398}
+ \DIAMOND {-0.412, 0.166}
+ \DIAMOND {-0.166, 0.412}
+ \DIAMOND {-0.418, 0.056}
+ \DIAMOND {-0.056, 0.418}
+ \DIAMOND {-0.488, 0.231}
+ \DIAMOND {-0.231, 0.488}
+ \DIAMOND {-0.498, 0.116}
+ \DIAMOND {-0.116, 0.498}
+ \DIAMOND {-0.041,-0.041} % Third quadrant (-,-)
+ \DIAMOND {-0.087,-0.087}
+ \DIAMOND {-0.137,-0.137}
+ \DIAMOND {-0.191,-0.191}
+ \DIAMOND {-0.249,-0.249}
+ \DIAMOND {-0.311,-0.311}
+ \DIAMOND {-0.377,-0.377}
+ \DIAMOND {-0.144,-0.046}
+ \DIAMOND {-0.046,-0.144}
+ \DIAMOND {-0.202,-0.097}
+ \DIAMOND {-0.097,-0.202}
+ \DIAMOND {-0.263,-0.152}
+ \DIAMOND {-0.152,-0.263}
+ \DIAMOND {-0.270,-0.051}
+ \DIAMOND {-0.051,-0.270}
+ \DIAMOND {-0.328,-0.211}
+ \DIAMOND {-0.211,-0.328}
+ \DIAMOND {-0.338,-0.107}
+ \DIAMOND {-0.107,-0.338}
+ \DIAMOND {-0.398,-0.274}
+ \DIAMOND {-0.274,-0.398}
+ \DIAMOND {-0.412,-0.166}
+ \DIAMOND {-0.166,-0.412}
+ \DIAMOND {-0.418,-0.056}
+ \DIAMOND {-0.056,-0.418}
+ \DIAMOND {-0.488,-0.231}
+ \DIAMOND {-0.231,-0.488}
+ \DIAMOND {-0.498,-0.116}
+ \DIAMOND {-0.116,-0.498}
+ \DIAMOND { 0.041,-0.041} % Fourth quadrant (+,-)
+ \DIAMOND { 0.087,-0.087}
+ \DIAMOND { 0.137,-0.137}
+ \DIAMOND { 0.191,-0.191}
+ \DIAMOND { 0.249,-0.249}
+ \DIAMOND { 0.311,-0.311}
+ \DIAMOND { 0.377,-0.377}
+ \DIAMOND { 0.144,-0.046}
+ \DIAMOND { 0.046,-0.144}
+ \DIAMOND { 0.202,-0.097}
+ \DIAMOND { 0.097,-0.202}
+ \DIAMOND { 0.263,-0.152}
+ \DIAMOND { 0.152,-0.263}
+ \DIAMOND { 0.270,-0.051}
+ \DIAMOND { 0.051,-0.270}
+ \DIAMOND { 0.328,-0.211}
+ \DIAMOND { 0.211,-0.328}
+ \DIAMOND { 0.338,-0.107}
+ \DIAMOND { 0.107,-0.338}
+ \DIAMOND { 0.398,-0.274}
+ \DIAMOND { 0.274,-0.398}
+ \DIAMOND { 0.412,-0.166}
+ \DIAMOND { 0.166,-0.412}
+ \DIAMOND { 0.418,-0.056}
+ \DIAMOND { 0.056,-0.418}
+ \DIAMOND { 0.488,-0.231}
+ \DIAMOND { 0.231,-0.488}
+ \DIAMOND { 0.498,-0.116}
+ \DIAMOND { 0.116,-0.498}
+ \typeout {UniStuttgartLogo -- Released 25 November 1988.}
+ \else
+ \thicklines
+ \put (-0.500,-0.500) {\framebox(1.000,1.000){\LARGE\it Size~too~large}}
+ \typeout {UniStuttgartLogo -- Released 25 November 1988, requested size too large.}
+ \fi
+ \fi
+ \end{picture}}
+
diff --git a/macros/latex209/contrib/misc/uscthesis.sty b/macros/latex209/contrib/misc/uscthesis.sty
new file mode 100644
index 0000000000..ce29bfe2a7
--- /dev/null
+++ b/macros/latex209/contrib/misc/uscthesis.sty
@@ -0,0 +1,999 @@
+%$% USCthesis.sty
+%$% USC Thesis/Dissertation document-style
+%$% $Header: USCthesis.sty,v 2.3 92/08/13 14:22:21 sdc Exp $
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% @LaTeX-style-file{
+%%% Author = "Steven Douglas Cochran",
+%%% Version = "2.3",
+%%% Date = "13 August 1992",
+%%% Time = "14:22:21 EDT",
+%%% Filename = "USCthesis.sty",
+%%% Address = "Digital Mapping Laboratory
+%%% School of Computer Science
+%%% Carnegie-Mellon University
+%%% 5000 Forbes Avenue
+%%% Pittsburgh, PA 15213-3890
+%%% USA",
+%%% Telephone = "(412) 268-5654",
+%%% FAX = "",
+%%% checksum = "54671 999 3568 32946",
+%%% Email = "sdc+@CS.CMU.EDU (Internet)",
+%%% CodeTable = "ISO/ASCII",
+%%% Keywords = "LaTeX, Thesis, Dissertation",
+%%% Archives = "shsu*",
+%%% Supported = "yes",
+%%% Abstract = "LaTeX document-style for typesetting
+%%% Theses or Dissertations in accordance
+%%% with the University of Southern
+%%% California Regulations for Format and
+%%% Presentation of Theses and Disertations.
+%%% It provides some alternative ``bells and
+%%% whistles'' such as support for
+%%% multi-volume documents."
+%%% Note = "Requires Stephen Page's `doublespace'
+%%% style option (or equivalent) in addition
+%%% to the standard LaTeX `report' style."
+%%% SeeAlso = "techreport.sty",
+%%% DocString = "The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by
+%%% the equivalent of the standard UNIX wc
+%%% (word count) utility output of lines,
+%%% words, and characters. This is produced
+%%% by Robert Solovay's checksum utility.",
+%%% }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%$% $Log: USCthesis.sty,v $
+%$% Revision 2.3 92/08/13 14:22:21 sdc
+%$% Added \universityname for easy use outside USC. Also the
+%$% \if@techreport switch can be used to turn off the one-side-only
+%$% warning message (for better interface with the techreport style
+%$% option). Placed a check for TeX-3.0 to allow an old TeX to work
+%$% without warnings. Cleaned-up the code and comments a little.
+%$%
+%$% Revision 2.2 92/06/29 10:59:15 sdc
+%$% Added standard file header for style.
+%$%
+%$% Revision 2.1 91/02/09 00:54:08 cochran
+%$% Fixed bug in interaction with techreport.sty.
+%$%
+%$% Revision 2.0 91/01/03 16:12:48 cochran
+%$% Merged divergent branches by cochran@iris.usc.edu (1.10) and by
+%$% tli@almaak.usc.edu (1.11); these are common up to revision 1.8.
+%$% Removed fix in 1.11 which added Reference List to the TOC since
+%$% this is handled by the \references command.
+%$%
+%$% Changes by tli@almaak.usc.edu:
+%$%
+%$% 1.11 (90/09/23) Change title font to 12pt. Change author's
+%$% font to 12pt. Fix Reference List so that it shows up in TOC.
+%$% Break the way that appendices show up in TOC.
+%$%
+%$% 1.10 (90/07/10) Added a hack to make it work with TeX 3.0.
+%$%
+%$% 1.9 (90/01/30) Make subsubsections show up with numbered
+%$% labels and in the TOC.
+%$%
+%$% Changes by cochran@iris.usc.edu:
+%$%
+%$% 1.10 (90/12/29) Added commands and modified \title to allow
+%$% multiple volume dissertations. Fixed bug which caused the
+%$% pagestyle of the TOC to be wrong if there were no
+%$% preceeding prefacesections.
+%$%
+%$% 1.9 (90/12/03) Corrected title size to correspond to the
+%$% University Publications statement that the "Title must be
+%$% the same size as `FACULTY OF ...' and no bold print. Also
+%$% added an optional argument to the \pageleft command to
+%$% allow the fine tuning of the gutter margin in the
+%$% techreport style option.
+%$%
+%$% Revision 1.8 89/09/15 19:39:11 tli
+%$% Change spacing in accordance with University Publications.
+%$%
+%$% Revision 1.7 89/01/27 13:56:04 tli
+%$% Too much space after a saying.
+%$%
+%$% Revision 1.6 89/01/26 14:01:20 tli
+%$% Added the saying environment.
+%$%
+%$% Revision 1.5 88/11/02 10:42:47 cochran
+%$% Minor corrections and removal of unnecessary \makeatletter and
+%$% \makeatother.
+%$%
+%$% Revision 1.4 88/10/20 11:58:38 cochran
+%$% Updated to allow the user more control over spacing to the "blue
+%$% lines," and to be in accordance with the USC Regulations for
+%$% Format and Presentation of Theses and Disertations, published
+%$% March 1987.
+%$%
+%$% Revision 1.3 88/03/16 10:49:19 cochran
+%$% Several small updates to \committee as suggested by peng@USC-IRIS.
+%$%
+%$% Revision 1.1 88/03/05 20:04:51 cochran
+%$% Set penalties, and new margin and page sizes. Fixed bug which
+%$% caused a wrong contents page for long lists of figures or tables.
+%$%
+%$% Revision 1.0 87/03/05 18:29:34 cochran
+%$% Created by combining the best (?) features of the dissertation
+%$% styles written by Herb Barad @ USC-SIPI and Howard Trickey @
+%$% Stanford University.
+%$%
+%$% NOTE: This style assumes the existance of Stephen Page's
+%$% `doublespace' style option in addition to the standard
+%$% LaTeX `report' style.
+%%%
+%%% Example:
+%%%
+%%% \documentstyle[12pt]{USCthesis}
+%%% \begin{document}
+%%% \title[Volume I]{Dissertation Title}
+%%% \author{Terry FullName Candidate}
+%%% \committee{J.~Smith & (Chairperson)\\*
+%%% N.~Jones\\*
+%%% S.~Foobar & (Outside Member)}
+%%% \begin{preface}
+%%% \prefacesection{Dedication}
+%%% This dissertation is dedicated to . . .
+%%% \prefacesection{Acknowledgements}
+%%% I would like to thank . . .
+%%% \begin{singlespace}
+%%% \tableofcontents
+%%% \listoftables
+%%% \listoffigures
+%%% \end{singlespace}
+%%% \prefacesection{Abstract}
+%%% This dissertation contains all knowledge about . . .
+%%% \end{preface}
+%%% \chapter{Introduction}
+%%% . . .
+%%% \chapter{Conclusions}
+%%% . . .
+%%% \begin{singlespace}
+%%% \references{plain}{mybib}
+%%% \appendix
+%%% \chapter{A Long Proof}
+%%% . . .
+%%% \end{singlespace}
+%%% . . .
+%%% \addvolumecontents{thesis_part2}
+%%% \addvolumecontents{thesis_part3}
+%%% \addvolumecontents[lof]{thesis_part2}
+%%% \end{document}
+%%%
+%%% Documentation:
+%%%
+%%% This style file modifies the standard report style to follow the
+%%% "USC Regulations for Format and Presentation of Theses and
+%%% Dissertations" (July 1989) document published by the Office of
+%%% University Publications.
+%%%
+%%% The following options are available for use in the \documentstyle
+%%% (other options also available as report.sty options or as
+%%% option.sty files).
+%%%
+%%% `10pt' (default) `11pt' or `12pt' base typesize.
+%%%
+%%% `dissertation' (default), or `thesis' title page.
+%%%
+%%% `final' (default) or `proposal' layout.
+%%%
+%%% `copyright' (default) or `nocopyright' message on title page.
+%%% This affects the `final' layout only.
+%%%
+%%% `fussy' (default) or `sloppy' word spacing. This affects the
+%%% alignment at the right margin. Fussy will sometimes write
+%%% over the blue line but is very useful for finding problem
+%%% areas during the development of the thesis. Sloppy will
+%%% insure that no line passes the right margin, but may need
+%%% to over stretch the line and thus generate an underfilled
+%%% hbox message.
+%%%
+%%% `clref' (default) or `opref' to set the open or closed format
+%%% of the entries in the references section.
+%%%
+%%% The following may be set PRIOR to the \begin{document} in order
+%%% to make adjustments to fit the text in the "blue lines". The
+%%% values listed below are the defaults:
+%%%
+%%% \pagetop{1.01 true in} % 1 inch plus allowance
+%%% \pageleft{1.51 true in} % 1.5 inches plus allowance
+%%% \pageheight{8.73 true in} % 9 inches minus allowance
+%%% \pagewidth{5.92 true in} % 6 inches minus allowance
+%%% \pagemargin{2.0} % Number of (unstretched) lines
+%%% % between text and page number
+%%% \setstretch{1.3} % Set the "double" spacing
+%%%
+%%% The following commands control what goes on the title page.
+%%%
+%%% \title[volume]{thesis title}
+%%% - The thesis title is set using the \title command.
+%%% The optional volume parameter allows the
+%%% specification of the volume on the title page for
+%%% long papers which are divided.
+%%%
+%%% \author{author's full name}
+%%% - Authors name.
+%%%
+%%% \universityname{UNIVERSITY OF SOUTHERN CALIFORNIA}
+%%% - The university's name (the above is the default).
+%%%
+%%% \schoolname{name of the school granting the degree}
+%%% - "GRADUATE SCHOOL" is the default. Changing this
+%%% also has the effect of turning off the \majorfield
+%%% entry. This affects the `final' layout only.
+%%%
+%%% \degree{degree name}
+%%% - defaults to "Master of Science" or "Doctor of
+%%% Philosophy" depending on whether the `thesis' or
+%%% `dissertation' option is in effect. This affects
+%%% the `final' layout only.
+%%%
+%%% \majorfield{author's major}
+%%% - "Electrical Engineering" if omitted. Changing the
+%%% \schoolname has the effect of turning off the
+%%% display of the major field. If you specify this
+%%% command after changing the \schoolname, both will be
+%%% shown on the titlepage. This affects the `final'
+%%% layout only.
+%%%
+%%% \committee{name1\\* name2\\* name3}
+%%% - Currently this in only used on with the `proposal'
+%%% option, since the signature page MUST be the one
+%%% supplied by the University. This affects the
+%%% `proposal' layout only.
+%%%
+%%% \submitdate{month & year in which submitted to Graduate School}
+%%% - current month & year if omitted.
+%%%
+%%% \copyrightyear{year degree conferred (next year if submitted in Dec.)}
+%%% - current year (or next year, in December) if omitted.
+%%% This affects only the `final' layout and only when
+%%% the `copyright' option is in effect.
+%%%
+%%% The PREFACE environment prints the titlepage and sets up the page
+%%% formatting for the preface pages. To create a preface section
+%%% use the command:
+%%%
+%%% \prefacesection[optional TOC name]{name}
+%%%
+%%% To generate the Table of Contents, and the Lists of Tables and
+%%% Figures, use the commands:
+%%%
+%%% \tableofcontents[CONTENTS]
+%%% \listoftables*[LIST OF TABLES]
+%%% \listoffigures*[LIST OF FIGURES]
+%%%
+%%% the bracketed names are used at the top of the sections and in
+%%% the Table of Contents for the tables and figures. The optional
+%%% `*' in the latter commands suppresses their entry into the Table
+%%% of Contents.
+%%%
+%%% When multiple volumes are present (as indicated by the use of the
+%%% optional argument of the \title command), the Table of Contents
+%%% may be augmented by specifying the name of the other parts of the
+%%% document with the command:
+%%%
+%%% \addvolumecontents[toc]{volumename}
+%%%
+%%% This command should be placed right after the \begin{document}
+%%% command to include prior volumes, and just before the
+%%% \end{document} command to include the contents of later volumes.
+%%% By default (if the optional [] section is ommited) it reads in
+%%% the volumename.toc file (if present). Using [lof] or [lot] work
+%%% in the same way for the lists of figures and tables respectively.
+%%%
+%%% To start the document at a page other than 1 (for later volumes)
+%%% you can use the command:
+%%%
+%%% \startingpagenumber{1}{1}
+%%%
+%%% prior to the \begin{preface} command. The first argument is the
+%%% page number of the titlepage and subsequent pages numbered with
+%%% roman numerals and the second is the number of the first page
+%%% after the preface section. The defaults are shown above.
+%%%
+%%% To include a reference section, use the following command:
+%%%
+%%% \references*[Reference List]{style}{bibfile(s)}
+%%%
+%%% where the `*' is optional and indicates that you DO NOT want this
+%%% section to appear in the Table-of-Contents. "Reference List" is
+%%% the default name if the optional `[]' section of the command is
+%%% not specified (the USC Regulations suggest either `Reference
+%%% List' or `Bibliography'). Both of the remaining entries MUST be
+%%% specified. {Style} is any of "plain", "unsrt", "alpha", "abbrv"
+%%% (or other *.bst format file). The {bibfile(s)} are a list of one
+%%% or more *.bib filenames from which the references are to be taken.
+%%%
+%%% The `saying' environment is used to set a cutesy little quotation
+%%% at the start of the chapter, just after the chapter head. To use:
+%%%
+%%% \begin{saying}
+%%% If this exercise isn't just a joke, the title of \\
+%%% this appendix is a lie.
+%%% \end{saying}
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%
+%% Declare the dissertation style
+%%
+\typeout{Document Style: `USCthesis' Version 2.3 1992.08.13}
+
+%%
+%% Define style option flags
+%%
+\@namedef{ds@10pt}{\def\@ptsize{0}} % Default (defined in report.sty)
+%% \ds@11pt and \ds@12pt are defined in report.sty
+
+\newif\ifthesis
+\def\ds@dissertation{\thesisfalse} % Default
+\def\ds@thesis{\thesistrue}
+
+\newif\ifproposal
+\def\ds@final{\proposalfalse} % Default
+\def\ds@proposal{\proposaltrue}
+
+\newif\ifcopyright
+\copyrighttrue
+\def\ds@nocopyright{\copyrightfalse}
+\def\ds@copyright{\copyrighttrue} % Default
+
+\fussy
+\def\ds@fussy{\fussy} % Default
+\def\ds@sloppy{\sloppy}
+
+\newif\ifopenbib
+\def\ds@clref{\openbibfalse} % Default
+\def\ds@opref{\openbibtrue}
+
+\newif\if@techreport % Internal switch for techreport
+\def\ds@techreport{% style option. Set switch, if
+ \@techreporttrue % the option is present, but
+ \xdef\@optionfiles{% still add to the \@optionfiles
+ \@optionfiles % list.
+ \@elt techreport.sty\relax
+ }}
+
+%%
+%% Define the Layout adjustment commands. Initialization of values is
+%% made after loading the report style.
+%%
+\def\pagetop#1{%
+ \global \topmargin #1 % Nominal distance from page top to
+ \global\advance \topmargin -1.0 true in} % top of boxwith running head.
+
+\def\pageleft{%
+ \@ifnextchar [%
+ {\@pageleft}%
+ {\@pageleft[0pt]}}
+
+\def\@pageleft[#1]#2{%
+ \if@twoside
+ %% Values for two-sided printing: (1/2 inch gutter margin)
+ \global \oddsidemargin #2 % Left margin on odd-numbered pages.
+ \global\advance \oddsidemargin -1.0 true in
+ \global \evensidemargin #2 % Left margin on even-numbered pages.
+ \global\advance \evensidemargin -1.5 true in
+ \global\advance \evensidemargin #1 % Adjustment for fine-tuning gutter
+ % margin
+ \flushbottom
+ \ifproposal\else\if@techreport\else
+ \typeout{Warning: Thesis/Dissertation should be
+ printed on one side only.}
+ \fi\fi
+ \else
+ %% Values for one-sided printing:
+ \global \oddsidemargin #2
+ \global\advance \oddsidemargin -1.0 true in
+ \global \evensidemargin \oddsidemargin
+ \raggedbottom
+ \fi}
+
+\def\pageheight{%
+ \@ifnextchar [%
+ {\@pageheight}%
+ {\@pageheight[\baselineskip]}}
+
+\def\@pageheight[#1]#2{%
+ \global \footheight #1%
+ \global \textheight #2%
+ \global\advance \textheight -\footheight}
+
+\def\pagewidth#1{\global \textwidth #1}
+
+\def\pagemargin#1{\global \footskip #1\baselineskip}
+
+%%
+%% Load the standard `report' style, and `doublespace' macros.
+%%
+\input report.sty\relax
+\input doublespace.sty\relax
+\setstretch{1.3} % Use 1.3 times the normal baseline-to-baseline skip
+
+%%
+%% Modify Penalties
+%%
+\brokenpenalty 10000 % Disallow page breaks at hyphens (this
+ % will give some underfull vbox's, so an
+ % alternative is to use \brokenpenalty=100
+ % and manually search for and fix such page
+ % breaks)
+\clubpenalty 10000 % Disallow club (orphan) lines
+\displaywidowpenalty 10000 % Disallow widow lines before display
+\widowpenalty 10000 % Disallow widow lines
+
+%%
+%% Disallow x- or -xx breaks. But if used in an old TeX, we will just
+%% have to do without and hope for the best.
+%%
+\ifx\undefined\inputlineno\else
+ \lefthyphenmin=2
+ \righthyphenmin=3
+\fi
+
+%%
+%% Set the Page Style Parameters
+%%
+\@addtoreset{equation}{chapter} % Have the equation reset in each chapter
+\headheight 0.0 true pt % Height of box containing running head
+\headsep 0.0 true pt % Size of strut between head and text
+\topskip 10.0 true pt % Baselineskip for the first line of page
+\itemsep 0.0 true pt % Extra vertical space, in addition to
+ % \parskip, added between list items
+\pagetop{1.01 true in} % Set \topmargin
+\pageleft{1.51 true in} % Set \evensidemargin and \oddsidemargin
+\pageheight{8.73 true in} % Set \textheight and \footheight
+\pagewidth{5.92 true in} % Set \textwidth
+\pagemargin{2.0} % Set \footskip
+
+%%
+%% Redefine some font sizes so that things don't get too big.
+%%
+\let\LARGE=\Large
+\let\huge=\Large
+\let\Huge=\Large
+
+%%
+%% Redefine plain style page to move the page number to the lower
+%% right corner.
+%%
+\if@twoside
+ \def\ps@plain{%
+ \def\@oddhead{}%
+ \def\@oddfoot{\hfil\rm\thepage}%
+ \def\@evenhead{}
+ \def\@evenfoot{\rm\thepage\hfil}}%
+\else
+ \def\ps@plain{%
+ \def\@oddhead{}%
+ \def\@oddfoot{\hfil\rm\thepage}%
+ \def\@evenhead{}
+ \let\@evenfoot\@oddfoot}%
+\fi
+
+%%
+%% Define Title Page Macros
+%%
+%% \title and \author is defined in latex.tex, but we will need to
+%% redefine \title to allow the optional argument. Also, the \thanks
+%% command is disabled and such footnotes will be thrown away or will
+%% appear in the wrong place.
+%%
+\def\title{%
+ \@ifnextchar [%
+ {\@title}%
+ {\@title[\@empty]}}
+
+\def\@title[#1]#2{%
+ \gdef\@volume{#1}%
+ \gdef\@title{#2}}
+
+%%
+%% The \addvolumecontents will add the contents of other volumes to
+%% the current volume. This command should be placed after the
+%% \begin{document} for earlier volumes and before the \end{document}
+%% for later ones.
+%%
+\def\thesisinput#1{%
+ \if@filesw
+ \begingroup
+ \let\thesisinput=\@gobble % Inhibit recursive \thesisinput's
+ \@input{#1}%
+ \endgroup
+ \fi}
+
+\def\addvolumecontents{%
+ \@ifnextchar [%
+ {\@addvolumecontents}%
+ {\@addvolumecontents[toc]}}
+
+\long\def\@addvolumecontents[#1]#2{%
+ \if@filesw
+ \begingroup
+ \let\label\@gobble
+ \let\index\@gobble
+ \let\glossary\@gobble
+ \def\protect##1{\string\string\string##1\string\space \space}%
+ \edef\@tempa{%
+ \immediate\write\@auxout{%
+ \string\@writefile{#1}{\protect \thesisinput{#2.#1}}}}%
+ \@tempa
+ \if@nobreak
+ \ifvmode
+ \nobreak
+ \fi
+ \fi
+ \endgroup
+ \fi
+ \relax}
+
+%%
+%% The \startingpagenumber command will change the default starting
+%% page number for the first (title) page of the current volume and
+%% for the first page after the preface section.
+%%
+\def\@startpageA{1}
+\def\@startpageB{1}
+
+\def\startingpagenumber#1#2{%
+ \gdef\@startpageA{#1}%
+ \gdef\@startpageB{#2}}
+
+%%
+%% The following flag is used to suppress the major field name on the
+%% title page when the default school is changed (only the GRADUATE
+%% SCHOOL currently uses a major field). Setting \majorfield after
+%% \schoolname will reset the flag and allow the printing of another
+%% school with a major field in addition.
+%%
+\newif\ifshowmajorfield
+\showmajorfieldtrue
+
+\def\universityname#1{%
+ \gdef\@university{\uppercase{#1}}}
+\def\@university{UNIVERSITY OF SOUTHERN CALIFORNIA}
+
+\def\schoolname#1{%
+ \gdef\@schoolname{#1}%
+ \showmajorfieldfalse}
+\def\@schoolname{GRADUATE SCHOOL}
+
+\def\degree#1{%
+ \ifthesis
+ \gdef\@mastersdegree{#1}%
+ \else
+ \gdef\@doctorsdegree{#1}}
+\def\@mastersdegree{MASTER OF SCIENCE}
+\def\@doctorsdegree{DOCTOR OF PHILOSOPHY}
+
+\def\majorfield#1{%
+ \gdef\@majorfield{#1}%
+ \showmajorfieldtrue}
+\def\@majorfield{Electrical Engineering}
+
+\def\committee#1{\gdef\@committee{#1}}
+\def\@committee{}
+
+\def\submitdate#1{\gdef\@submitdate{#1}}
+\def\@submitdate{%
+ \ifcase \the\month
+ \or January%
+ \or February%
+ \or March%
+ \or April%
+ \or May%
+ \or June%
+ \or July%
+ \or August%
+ \or September%
+ \or October%
+ \or November%
+ \or December%
+ \fi
+ \space
+ \number \the\year}
+
+\def\copyrightyear#1{\gdef\@copyrightyear{#1}}
+%% December dissertations should have the next year as the copyright year
+\ifnum \month=12
+ \@tempcnta=\year
+ \advance\@tempcnta by 1
+ \edef\@copyrightyear{\number \the\@tempcnta}
+\else
+ \def\@copyrightyear{\number \the\year}
+\fi
+
+%%
+%% Create the PREFACE environment. The titlepage is generated when
+%% the environment is first entered and the numbering is roman within
+%% the preface. The \endpreface switches to arabic numbering.
+%%
+\def\preface{%
+ \newpage
+ \pagenumbering{roman}%
+ \pagestyle{empty}%
+ \begin{singlespace}%
+ \ifproposal
+ \makeproptitle
+ \setcounter{page}{1}%
+ \addtocounter{page}{\@startpageA}% Advance page counter for title page.
+ \else
+ \maketitle
+ \setcounter{page}{1}%
+ \addtocounter{page}{\@startpageA}% Advance page counter for (signature
+ \fi % and) title. At USC, the signature
+ \newpage % page is not counted!
+ \ifx\@volume\@empty\else % Add Volume ID to contents if present.
+ \addtocontents{toc}{\protect\contentsline{part}{\@volume}{}}%
+ \fi
+ \end{singlespace}%
+ \pagestyle{plain}}
+
+\def\endpreface{%
+ \newpage
+ \pagenumbering{arabic}%
+ \pagestyle{plain}%
+ \setcounter{page}{\@startpageB}}
+
+%%
+%% Define the PROPOSAL title page
+%%
+\def\makeproptitle{%
+ \begin{titlepage}%
+ \null
+ \vskip 60.0 true pt% To adjust centering.
+ \begin{center}
+ {\Large \@title \par}% Set title in \Large size.
+ \ifx\@volume\@empty\else
+ \vskip 3em% Vertical space before volume.
+ \@volume
+ \fi
+ \vskip 3em% Vertical space after title.
+ \ifthesis
+ {Masters Thesis Proposal}%
+ \else
+ {Ph.D. Dissertation Proposal}%
+ \fi\\*%
+ {submitted by}%
+ \vskip 3em % Vertical space before author.
+ {\lineskip .75em
+ \@author
+ \par}%
+ \vskip 1.5cm % Vertical space before date.
+ {\small
+ \@submitdate
+ \par}%
+ \vskip 1.5in
+ {{\bf Guidance Committee}\\*[1.0 true cm]%
+ \begin{tabular}[t]{ll}\@committee
+ \end{tabular}\par}%
+ \end{center}%
+ \par
+ \vfil
+ \end{titlepage}}
+
+%%
+%% Make the Dissertation titlepage
+%%
+\def\maketitle{%
+ \begin{titlepage}%
+ \setcounter{page}{0}%
+ \null
+ \vfill\vfill
+ \begin{center}%
+ {\@title \par}% Set title the same size as "FACULTY OF ..."
+ \ifx\@volume\@empty\else
+ \vskip 0.16 true in
+ \@volume
+ \fi
+ \vskip 0.16 true in
+ by%
+ \vskip 0.16 true in
+ {\begin{tabular}[t]{c}\@author\\*[1.0 true in]%
+ \hline
+ \end{tabular}%
+ \par}
+ \vskip 1.0 true in
+ \ifthesis
+ A Thesis Presented to the%
+ \else
+ A Dissertation Presented to the%
+ \fi\\*[0.1 true in]%
+ FACULTY OF THE \@schoolname\\*[0.1 true in]%
+ \@university\\*[0.1 true in]%
+ In Partial Fulfillment of the\\*[0.1 true in]%
+ Requirements for the Degree\\*[0.1 true in]%
+ \ifthesis
+ \@mastersdegree
+ \else
+ \@doctorsdegree
+ \fi\\*[0.1 true in]%
+ \ifshowmajorfield
+ (\@majorfield)%
+ \fi\\*[1.0 true cm]%
+ \vfill
+ {\bf \small \@submitdate \par}% should be just month and year
+ \end{center}%
+ \par
+ \vfill
+ \ifcopyright
+ \begin{center}%
+ {\normalsize\ Copyright~ \@copyrightyear\ ~\@author}%
+ \end{center}%
+ \fi
+ \end{titlepage}}
+
+%%
+%% Start a Preface Page
+%%
+\newdimen\prefacetopspace
+\prefacetopspace=1.0 true in
+
+\def\prefacesection{%
+ \@ifnextchar [%
+ {\@prefacesectionB}%
+ {\@prefacesectionA}}
+
+\def\@prefacesectionA#1{%
+ \@prefacesectionB[#1]{#1}}
+
+\def\@prefacesectionB[#1]#2{%
+ \newpage
+ \pagestyle{plain}%
+ \null
+ \vskip\prefacetopspace
+ \begin{center}%
+ \section*{#2}%
+ \end{center}%
+ \addcontentsline{toc}{chapter}{#1}}
+
+%%
+%% Make the Table of Contents and Figures/Tables pages
+%%
+\def\tableofcontents{%
+ \@ifnextchar [%
+ {\@starspeciallist{toc}}%
+ {\@starspeciallist{toc}[Contents]}}
+
+\def\listoftables{%
+ \@ifstar
+ {\@ifnextchar [%
+ {\@starspeciallist{lot}}%
+ {\@starspeciallist{lot}[List Of Tables]}}%
+ {\@ifnextchar [%
+ {\@speciallist{lot}}%
+ {\@speciallist{lot}[List Of Tables]}}}
+
+\def\listoffigures{%
+ \@ifstar
+ {\@ifnextchar [%
+ {\@starspeciallist{lof}}%
+ {\@starspeciallist{lof}[List Of Figures]}}%
+ {\@ifnextchar [%
+ {\@speciallist{lof}}%
+ {\@speciallist{lof}[List Of Figures]}}}
+
+\def\@starspeciallist#1[#2]{%
+ \newpage
+ \@restonecolfalse
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \fi
+ \chapter*{#2}%
+ \@starttoc{#1}%
+ \if@restonecol\twocolumn\fi}
+
+\def\@speciallist#1[#2]{%
+ \newpage
+ \@restonecolfalse
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \fi
+ \chapter*{#2}%
+ \addcontentsline{toc}{chapter}{#2}
+ \@starttoc{#1}%
+ \if@restonecol\twocolumn\fi}
+
+%%
+%% Redefine the report.sty chapter definitions to suppress hyphenation
+%% in the titles.
+%%
+\def\@makechapterhead#1{%
+ \vspace*{50pt}%
+ {\parindent 0pt
+ \raggedright
+ \hyphenpenalty 10000%
+ \ifnum \c@secnumdepth > \m@ne
+ \Large\bf \@chapapp{} \thechapter\par
+ \vskip 20pt
+ \fi
+ \Large\bf #1\par
+ \nobreak
+ \vskip 40pt}
+ \hyphenpenalty 50}
+
+\def\@makeschapterhead#1{%
+ \vspace*{50pt}%
+ {\parindent 0pt
+ \raggedright
+ \hyphenpenalty 10000%
+ \Large\bf #1\par
+ \nobreak
+ \vskip 40pt}
+ \hyphenpenalty 50}
+
+%%
+%% Redefine the report.sty section definitions. The \@startsection
+%% command takes the arguments:
+%%
+%% {Name}{Level}{Indent}{BeforeSkip}{AfterSkip}{Style}
+%%
+%% Also it takes a `*' which suppress the section counting, and if the
+%% `*' is not present an optional [Altheading]{heading} pair.
+%%
+\def\section{\@startsection{section}% Name
+ {1}% Level
+ {\z@}% Indent
+ {-3.5ex plus -1ex minus -.2ex}% BeforeSkip
+ {2.3ex plus .2ex}% AfterSkip
+ {\Large\bf\hyphenpenalty 10000}}% Style
+
+\def\subsection{\@startsection{subsection}% Name
+ {2}% Level
+ {\z@}% Indent
+ {-3.5ex plus -1ex minus -.2ex}% BeforeSkip
+ {1.5ex plus .2ex}% AfterSkip
+ {\large\bf\hyphenpenalty 10000}}% Style
+
+\def\subsubsection{\@startsection{subsubsection}% Name
+ {3}% Level
+ {\z@}% Indent
+ {-3.5ex plus -1ex minus -.2ex}% BeforeSkip
+ {1.5ex plus .2ex}% AfterSkip
+ {\normalsize\bf\hyphenpenalty 10000}}% Style
+
+\def\paragraph{\@startsection{paragraph}% Name
+ {4}% Level
+ {\z@}% Indent
+ {3.25ex plus 1ex minus .2ex}% BeforeSkip
+ {-1em}% AfterSkip
+ {\normalsize\bf\hyphenpenalty 10000}}% Style
+
+\def\subparagraph{\@startsection{subparagraph}% Name
+ {4}% Level
+ {\parindent}% Indent
+ {3.25ex plus 1ex minus .2ex}% BeforeSkip
+ {-1em}% AfterSkip
+ {\normalsize\bf\hyphenpenalty 10000}}% Style
+
+%%
+%% The value of the counter secnumdepth gives the depth of the
+%% highest-level sectioning command that is to produce section
+%% numbers.
+%%
+\setcounter{secnumdepth}{3}
+\setcounter{tocdepth}{3}
+
+%%
+%% Redefine the report.sty `Bibliography' as a `Reference List' chapter.
+%%
+\def\bibliographystyle#1{% But first, turn off standard bib commands.
+ \@latexerr{\string\bibliographystyle\space is undefined.
+ Use \string\references{#1}{bibfile list}}\@eha}
+\def\bibliography#1{%
+ \@latexerr{\string\bibliography\space is undefined.
+ Use \string\references{bibstyle}{#1}}\@eha}
+
+\def\references{%
+ \@ifstar
+ {\@referencesA}%
+ {\@referencesB}}
+
+\def\@referencesA{%
+ \@ifnextchar [%
+ {\@referencesAA}%
+ {\@referencesAA[Reference List]}}%
+
+\def\@referencesAA[#1]#2#3{
+ \gdef\@referencesname{#1}
+ \if@filesw
+ \immediate\write\@auxout{\string\bibstyle{#2}}%
+ \immediate\write\@auxout{\string\bibdata{#3}}%
+ \fi
+ \@input{\jobname.bbl}}
+
+\def\@referencesB{
+ \@ifnextchar [
+ {\@referencesBB}
+ {\@referencesBB[Reference List]}}
+
+\def\@referencesBB[#1]#2#3{
+ \addcontentsline{toc}{chapter}{#1}
+ \gdef\@referencesname{#1}
+ \if@filesw
+ \immediate\write\@auxout{\string\bibstyle{#2}}%
+ \immediate\write\@auxout{\string\bibdata{#3}}%
+ \fi
+ \@input{\jobname.bbl}}
+
+\def\@referencesname{Reference List}
+
+\def\thebibliography#1{
+ \chapter*{\@referencesname\@mkboth{\@referencesname}{\@referencesname}}
+ \list{[\arabic{enumi}]}{
+ \settowidth\labelwidth{[#1]}
+ \leftmargin\labelwidth \advance\leftmargin\labelsep
+ \ifopenbib
+ \listparindent -1.5em
+ \advance\leftmargin-\listparindent
+ \itemindent\listparindent
+ \parsep 0pt%
+ \fi
+ \usecounter{enumi}}%
+ \ifopenbib
+ \def\newblock{\par}
+ \let\\=\@centercr
+ \@rightskip\@flushglue \rightskip\@rightskip
+ \leftskip\z@
+ \else
+ \def\newblock{\hskip .11em plus .33em minus -.07em}%
+ \fi
+ \sloppy
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+%%
+%% APPENDIX
+%%
+%% The \appendix command must do the following:
+%% -- reset the chapter counter to zero
+%% -- set \@chapapp to Appendix (for messages)
+%% -- redefine the chapter counter to produce appendix numbers
+%% -- reset the section counter to zero
+%% -- redefine the \chapter command if appendix titles and headings
+%% are to look different from chapter titles and headings.
+%%
+%% For USC, the Appendix appears VERY oddly in the table of contents.
+%%
+\def\appendix{
+ \par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{Appendix}
+ \def\thechapter{\Alph{chapter}}
+ \def\@chapter[##1]##2{
+ \refstepcounter{chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ \addtocontents{toc}{
+ \protect\contentsline{chapter}{Appendix \thechapter}{\relax}}
+ \addcontentsline{toc}{section}{##1}
+ \chaptermark{##1}
+ \addtocontents{lof}{\protect\addvspace{10pt}}% Adds between-chapter space
+ \addtocontents{lot}{\protect\addvspace{10pt}}% to lists of figs & tables.
+ \if@twocolumn
+ \@topnewpage[\@makechapterhead{##2}]
+ \else \@makechapterhead{##2}
+ \@afterheading % Routine called after chap
+ \fi}} % and section heading.
+
+%%
+%% Define the `saying' environment
+%% Used to set a cutesy little quotation at the start of the chapter
+%%
+\def\saying{%
+ \trivlist
+ \raggedleft
+ \item[]\em}
+
+\def\endsaying{%
+ \endtrivlist
+ \vspace{20pt}}
+
+%%
+%% Define the starting pagestyle
+%%
+\pagestyle{plain}
diff --git a/macros/latex209/contrib/misc/usenix.sty b/macros/latex209/contrib/misc/usenix.sty
new file mode 100644
index 0000000000..4a742023b6
--- /dev/null
+++ b/macros/latex209/contrib/misc/usenix.sty
@@ -0,0 +1,105 @@
+% usenix.sty
+% For Usenix conference proceedings -- released 1 June 1989
+%
+% This style option is designed to work with the article document
+% style of LaTeX version 2.09. Use
+% \documentstyle[usenix]{article}
+%
+% The rules here are from "Instructions for Usenix Authors and
+% Speakers" in the INSTRUCTIONS from Usenix.
+% I've followed these rules as close as possible but there are a
+% number of "gaps" that I had questions about. I waited several
+% months for a response from Usenix but never got one. If you find
+% any problems with submitting proceedings with this style, please
+% let me know.
+
+
+% Copyright (c) 1989 by David K. Steiner
+% Permission to copy all or part of this work is granted, provided
+% that the copies are not made or distributed for resale, and that
+% the copyright notice and this notice are retained.
+%
+% THIS WORK IS PROVIDED ON AN "AS IS" BASIS. THE AUTHOR PROVIDES NO
+% WARRANTY WHATSOEVER, EITHER EXPRESS OR IMPLIED, REGARDING THE WORK,
+% INCLUDING WARRANTIES WITH RESPECT TO ITS MERCHANTABILITY OR FITNESS
+% FOR ANY PARTICULAR PURPOSE.
+
+% If you make any improvements, I'd like to hear about them.
+
+% Dave Steiner
+% Rutgers University
+% CCIS, Busch Campus
+% PO Box 879
+% Piscataway, NJ 08855-0879
+% steiner@topaz.rutgers.edu
+% ..!rutgers!topaz.rutgers.edu!steiner
+
+\typeout{Document Style Option 'Usenix' -- version 0.9, released 1 June 1989}
+
+% All comments assume basic font is 10pt rm but code should
+% handle any font size changes
+
+% 6x9in centered in a 8.5x11in page
+\oddsidemargin=.25in
+\evensidemargin=.25in
+\marginparwidth=0pt
+\marginparsep=0pt
+\textwidth=6in
+
+\topmargin=0in
+\textheight=9in
+\headheight=0pt
+\headsep=0pt
+
+\parskip=\baselineskip \divide\parskip \tw@
+\parindent=\baselineskip \multiply\parindent \tw@
+
+%Title should be 14pt bold, attribution info should be 12pt italic.
+% Don't include date. Abstract should be 12pt with a 12pt bold title.
+
+\def\maketitle{\par
+ \begingroup
+ \parskip=0pt
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em \begin{center}
+ {\LARGE\bf \@title \par} \vskip 1.5em {\large\it \lineskip .5em
+\begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \end{center}
+ \par
+ \vskip 1.5em}
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \large
+\begin{center}
+{\bf ABSTRACT\vspace{-.5em}\vspace{0pt}\vskip\baselineskip}
+\end{center}
+\quotation
+\fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+\def\section{\@startsection {section}{1}{\z@}
+ {\parskip}{.1pt plus .2pt}{\normalsize\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}
+ {\parskip}{.1pt plus .2pt}{\normalsize\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
+ {\parskip}{.1pt plus .2pt}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{\parskip}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{\parskip}{-1em}{\normalsize\bf}}
+
+% End of usenix.sty
diff --git a/macros/latex209/contrib/misc/userps.sty b/macros/latex209/contrib/misc/userps.sty
new file mode 100644
index 0000000000..d26d9d4ab0
--- /dev/null
+++ b/macros/latex209/contrib/misc/userps.sty
@@ -0,0 +1,54 @@
+% convenient LaTeX pagestyles,
+% defined by various LaTeX users
+%
+% *** WARNING WARNING WARNING ***
+% The macros in this file are NOT guaranteed to work and they are
+% definitely NOT maintained. Do not count on them remaining
+% stable over long periods: if you use them in a thesis (say),
+% copy the ones you use to your own macro file!
+%
+% To invoke the pagestyle named \ps@foo, you can say
+%
+% \pagestyle{foo}
+% or
+% \thispagestyle{foo}
+%
+%
+% Latex users are encouraged to create their own styles and put
+% them in this file. They should keep in mind the following
+% points:
+% 1. All styles added should be documented.
+% 2. The style added must work REGARDLESS of the document
+% style and point size used, or else they should
+% clearly state which styles and sizes they are
+% restricted to.
+% 3. Don't allow spurious spaces into the style macros!!!
+% 4. All styles should be added anonymously unless the
+% author wants to get hundreds of questions about
+% usage!
+%
+
+% DON'T MESS WITH THIS LINE. IT MUST PRECEDE ALL OTHERS!
+\makeatletter % allow @ in macro names
+
+
+% A SAMPLE STYLE:
+%
+% STYLE plaintop : invoked (for example) with \pagestyle{plaintop}
+%
+% This style is like the Plain style (i.e., just a page number is output)
+% but the page number is in the middle of the header line (at the top of
+% the page) and the footer line (at the bottom of the page) is blank.
+%
+\def\ps@plaintop{%
+ \def\@oddhead{\rm\hfil\thepage\hfil}%
+ \def\@oddfoot{}%
+ \def\@evenhead\@oddhead
+ \let\@evenfoot\@oddfoot}
+
+
+%% ADD MORE STYLES HERE.
+
+
+% DON'T MESS WITH THE FOLLOWING LINE. IT MUST BE THE LAST LINE IN THE FILE!!
+\makeatother
diff --git a/macros/latex209/contrib/misc/varfbox.sty b/macros/latex209/contrib/misc/varfbox.sty
new file mode 100644
index 0000000000..11e96ca0dc
--- /dev/null
+++ b/macros/latex209/contrib/misc/varfbox.sty
@@ -0,0 +1,20 @@
+% Save file as: VARFBOX.STY Source: FILESERV@SHSU.BITNET
+\typeout{Document Sub-Style 'varfbox', Version 1 (August 8, 1989) GDG}
+\newdimen\holdrule
+
+\edef\Fbox#1#2{\holdrule=\fboxrule
+\fboxrule=#1mm \fbox{#2} \fboxrule=\holdrule}
+
+% Usage: \Fbox{foo}{Text to box}
+% This is a short style file which allows the user to specify the size of
+% \fboxrule (in mm) as they use the \fbox environment by specifying \Fbox
+%
+% foo is the number of millimeters the \fboxrule should be set to for
+% that box.
+%
+% \fboxrule for normal \fbox environment is not changed.
+%
+% Author: George D. Greenwade, Director, Center for Business and Economic
+% Research, sam Houston State University, Huintsville, TX (409) 294-1518
+% BITNET: BED_GDG@SHSU
+% Revision History: 8-AUG-1989 Original Version GDG
diff --git a/macros/latex209/contrib/misc/verbatimfiles.sty b/macros/latex209/contrib/misc/verbatimfiles.sty
new file mode 100644
index 0000000000..90a4c32f1b
--- /dev/null
+++ b/macros/latex209/contrib/misc/verbatimfiles.sty
@@ -0,0 +1,42 @@
+% Here is a version of Adrian's VERBATIM.STY, for inputting whole files
+% verbatim, which is "more LaTeX-like" in that it uses the actual LaTeX
+% macros which set up the `verbatim' environment.
+%
+% As a matter of interest, it is much nicer for TeX if you input large
+% quantities of "verbatim material" from an "external file" rather than by use
+% of the `verbatim' environment (i.e. putting the material in the main input
+% file. This is because this environment, in common with most (but not all)
+% other "verbatim macros", makes the whole of the "vebatim material" a macro
+% argument and therefore eats up TeTeX's internal memory.
+%
+% Chris Rowley
+%
+
+% --- V E R B A T I M F I L E S . S T Y
+%
+% --- This LaTeX style-file defines two user-callable macros:
+% --- \verbatimfile{<filename>} for verbatim inclusion of a file
+% --- \verbatimlisting{<filename>} for verbatim inclusion with line numbers
+%
+% --- The macros are based on those distributed with Sunil Podar's
+% --- `EPIC.STY' macro package, attributed to Tim Morgan,
+% --- modified to keep internal macros internal by Adrian F. Clark,
+% --- alien@uk.ac.essex.ese
+% --- ---and further latexification by Chris Rowley,
+% --- ca_rowley@uk.ac.open.acs.vax.
+%
+% --- Note that the precise layout of line breaks in this file is important!
+%
+
+\def\verbatimfile#1{\begingroup
+ \@verbatim \frenchspacing \@vobeyspaces
+ \input#1 \endgroup
+}
+
+\newcounter{lineno}
+
+\def\verbatimlisting#1{\setcounter{lineno}{0}%
+ \begingroup \@verbatim \frenchspacing \@vobeyspaces \parindent=20pt
+ \everypar{\stepcounter{lineno}\llap{\thelineno\ \ }}\input#1
+ \endgroup
+}
diff --git a/macros/latex209/contrib/misc/verbinp.sty b/macros/latex209/contrib/misc/verbinp.sty
new file mode 100644
index 0000000000..31e0add2be
--- /dev/null
+++ b/macros/latex209/contrib/misc/verbinp.sty
@@ -0,0 +1,1230 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% VERBINP.TEX / VERBINP.STY %
+% %
+% (c) 1993: Rainer Perske, Zur Gr"afte 10, D-48161 M"unster, Germany %
+% %
+% This file may be copied, distributed and modified only unter the %
+% TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION of %
+% the GNU GENERAL PUBLIC LICENSE, Version 2, and any later version, %
+% as published by Free Software Foundation, Inc., 675 Mass Ave, %
+% Cambridge, MA 02139, USA. %
+% %
+% Direct any comments about this file to: perske@uni-muenster.de %
+% For the date of this version see \message line below %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Einf"ugen von Dateien, die dann verbatim ausgegeben werden. %
+% Die Zeichen hex.A0 bis FF werden optional gem"a"s ISO 8859 Latin 1, %
+% gem"a"s CECP 850 oder gem"a"s CECP 437 gedruckt. Die Steuerzeichen %
+% hex.00 bis 07, 0E bis 20 und 7F bis 9F werden ebenfalls sinnvoll %
+% dargestellt, die Steuerzeichen 08 (BS), 09 (HT), 0A (LF), 0B (VT), %
+% 0C (FF) und OD (CR) werden sinnvoll ausgeführt, wobei LF, VT, FF %
+% und CR alle (nur) als Zeilenenden behandelt werden. %
+% %
+% \verbinput{fn} - Datei fn einf"ugen %
+% \verbinputnum{fn} - Datei fn einf"ugen, links mit Zeilennummern %
+% \verbinputbox{fn} - Datei fn einf"ugen, in Kasten einschlie"sen %
+% \verbcharset{nnn} - Zeichensatz nnn einstellen, dabei ist nnn eine %
+% der Zahlen 88591, 850 oder 437. Die Einstellung gilt lokal %
+% %
+% Diese Datei ist mit \input in die Pr"aambel einzuf"ugen oder als %
+% Style-Datei im \documentstyle-/\documentclass-Befehl anzugeben %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\verbinputdefined\relax\endinput\else\let\verbinputdefined\relax\fi
+
+\message{Verbatim 8 Bit File Input of 23.Aug.1993}
+
+\begingroup
+\makeatletter% LaTeX-Buchstabe
+\catcode`\:=11% Privater Buchstabe
+\catcode`\^^0c=\active\let^^0c=\relax% Outer-Setzung entsch"arfen
+\gdef\H:{2.4ex}% Zeilenabstand
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Erster Teil: Definition der Sonderzeichen %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Kein Zeichen darf so definiert werden, da"s es mit '{' anf"angt,
+% da sonst wegen \everypar Schwierigkeiten auftreten k"onnen
+
+% Makro zum Setzen der Dimensionen zur Laufzeit
+
+\newdimen{\w:}
+\newdimen{\h:}
+\newdimen{\d:}
+\newdimen{\x:}
+\newdimen{\y:}
+\newdimen{\z:}
+
+% Hilfsmakros
+
+\gdef\cbox:#1{\leavevmode{\tt\setbox0=\hbox to\w:{#1}\ht0=\h:\dp0=\d:\box0 }}
+\gdef\sym:#1{\cbox:{\hss#1\hss}}
+\gdef\bs:{{\hskip-\w:}}
+\gdef\up:#1#2{\raise#1\hbox{#2}}
+\gdef\cntl:#1{\sym:{\char20 \bs:\up:{.3ex}{\char20 }\bs:\up:{-.4ex}{#1}}}
+\gdef\cntl::#1{\sym:{\char94 \bs:\up:{.3ex}{\char94 }\bs:\up:{-.4ex}{#1}}}
+\gdef\G:#1{\leavevmode\lower\d:\vbox to\z:{\vss\hbox to\w:{#1\hss}}}
+\gdef\B:#1#2#3#4{\hbox to0em{\vrule height0ex depth0ex width#1\x:\vrule
+height#2\y: depth-#3\y: width#4\x: \hss}}
+
+% Umdefinierte ASCII-Zeichen
+
+\gdef\:sp{\ }% Feste Blanks
+\gdef\:gr{\kern0pt\char96 }% Keine Ligaturen ?` und !`
+\gdef\:us{\leavevmode\vrule height-.2\d: depth.5\d: width\w:\relax}% Aussehen
+
+% Definition der Akzente und Umlaute als Makros
+
+\gdef\:acute{\char19 }
+\gdef\:angstrom{\char23 }
+\gdef\:macron{\char22 }
+\gdef\:cedilla{\char24 }
+\gdef\:circumflex{\char94 }
+\gdef\:grave{\char18 }
+\gdef\:tilde{\char126 }
+\gdef\:umlaut{\char127 }
+
+\gdef\acu:a{\accent19 a}
+\gdef\acu:A{\accent19 A}
+\gdef\acu:e{\accent19 e}
+\gdef\acu:E{\accent19 E}
+\gdef\acu:i{\accent19 \char16 }
+\gdef\acu:I{\accent19 I}
+\gdef\acu:o{\accent19 o}
+\gdef\acu:O{\accent19 O}
+\gdef\acu:u{\accent19 u}
+\gdef\acu:U{\accent19 U}
+\gdef\acu:y{\accent19 y}
+\gdef\acu:Y{\accent19 Y}
+\gdef\ang:a{\accent23 a}
+\gdef\ang:A{\accent23 A}
+\gdef\ced:C{C\bs:{\char24 }}
+\gdef\ced:c{c\bs:{\char24 }}
+\gdef\cir:a{\accent94 a}
+\gdef\cir:A{\accent94 A}
+\gdef\cir:e{\accent94 e}
+\gdef\cir:E{\accent94 E}
+\gdef\cir:i{\accent94 \char16 }
+\gdef\cir:I{\accent94 I}
+\gdef\cir:o{\accent94 o}
+\gdef\cir:O{\accent94 O}
+\gdef\cir:u{\accent94 u}
+\gdef\cir:U{\accent94 U}
+\gdef\dia:o{\char28 }
+\gdef\dia:O{\char31 }
+\gdef\gra:a{\accent18 a}
+\gdef\gra:A{\accent18 A}
+\gdef\gra:e{\accent18 e}
+\gdef\gra:E{\accent18 E}
+\gdef\gra:i{\accent18 \char16 }
+\gdef\gra:I{\accent18 I}
+\gdef\gra:o{\accent18 o}
+\gdef\gra:O{\accent18 O}
+\gdef\gra:u{\accent18 u}
+\gdef\gra:U{\accent18 U}
+\gdef\lig:ae{\char26 }
+\gdef\lig:AE{\char29 }
+\gdef\til:a{\accent126 a}
+\gdef\til:A{\accent126 A}
+\gdef\til:n{\accent126 n}
+\gdef\til:N{\accent126 N}
+\gdef\til:o{\accent126 o}
+\gdef\til:O{\accent126 O}
+\gdef\uml:a{\accent127 a}
+\gdef\uml:A{\accent127 A}
+\gdef\uml:e{\accent127 e}
+\gdef\uml:E{\accent127 E}
+\gdef\uml:i{\accent127 \char16 }
+\gdef\uml:I{\accent127 I}
+\gdef\uml:o{\accent127 o}
+\gdef\uml:O{\accent127 O}
+\gdef\uml:u{\accent127 u}
+\gdef\uml:U{\accent127 U}
+\gdef\uml:y{\accent127 y}
+\gdef\:eszet{\char25 }
+
+% Definition der graphischen Zeichen im 9x9-Raster als Makros
+
+\gdef\box:full{\G:{\B:0909}}
+\gdef\box:halfhigh{\G:{\B:09{4.5}9}}
+\gdef\box:halfleft{\G:{\B:090{4.5}}}
+\gdef\box:halflow{\G:{\B:0{4.5}09}}
+\gdef\box:halfright{\G:{\B:{4.5}90{4.5}}}
+\gdef\box:light{\G:{\B:1901\B:4901\B:7901}}
+\gdef\box:medium{\G:{\B:{0.5}902\B:{3.5}902\B:{6.5}902}}
+\gdef\box:dark{\G:{\B:{0.5}902\B:{3.5}902\B:{6.5}902\B:0879\B:0549\B:0219}}
+\gdef\box:small{\G:{\B:3633}}
+\gdef\bar:DDLLRR{\G:{\B:0659\B:0432\B:2401\B:6401\B:7432}}
+\gdef\bar:DDLL{\G:{\B:0432\B:2401\B:0656\B:6601}}
+\gdef\bar:DDRR{\G:{\B:2601\B:3656\B:6401\B:7432}}
+\gdef\bar:DLR{\G:{\B:0549\B:4501}}
+\gdef\bar:DL{\G:{\B:0544\B:4501}}
+\gdef\bar:DR{\G:{\B:4501\B:5544}}
+\gdef\bar:LLRR{\G:{\B:0439\B:0659}}
+\gdef\bar:LR{\G:{\B:0549}}
+\gdef\bar:UDLR{\G:{\B:0549\B:4901}}
+\gdef\bar:UDL{\G:{\B:0544\B:4901}}
+\gdef\bar:UDR{\G:{\B:4901\B:5544}}
+\gdef\bar:UD{\G:{\B:4901}}
+\gdef\bar:ULR{\G:{\B:0549\B:4951}}
+\gdef\bar:UL{\G:{\B:0544\B:4941}}
+\gdef\bar:UR{\G:{\B:4941\B:5544}}
+\gdef\bar:UUDDLLRR{\G:{\B:0652\B:2951\B:6951\B:7652\B:0432\B:2401\B:6401\B:7432}}
+\gdef\bar:UUDDLL{\G:{\B:0652\B:2951\B:0432\B:2401\B:6901}}
+\gdef\bar:UUDDRR{\G:{\B:2901\B:6951\B:7652\B:6401\B:7432}}
+\gdef\bar:UUDD{\G:{\B:2901\B:6901}}
+\gdef\bar:UULLRR{\G:{\B:0439\B:0652\B:2951\B:6951\B:7652}}
+\gdef\bar:UULL{\G:{\B:0652\B:2951\B:0436\B:6931}}
+\gdef\bar:UURR{\G:{\B:2931\B:3436\B:6951\B:7652}}
+\gdef\bar:UDLL{\G:{\B:0434\B:0654\B:4901}}
+\gdef\bar:UUDDL{\G:{\B:0542\B:2901\B:6901}}
+\gdef\bar:DDL{\G:{\B:0546\B:2401\B:6501}}
+\gdef\bar:DLL{\G:{\B:0434\B:0654\B:4601}}
+\gdef\bar:UUL{\G:{\B:0546\B:2951\B:6941}}
+\gdef\bar:ULL{\G:{\B:0434\B:0654\B:4931}}
+\gdef\bar:UDRR{\G:{\B:4901\B:5435\B:5655}}
+\gdef\bar:UUDDR{\G:{\B:2901\B:6901\B:7543}}
+\gdef\bar:ULLRR{\G:{\B:0439\B:0659\B:4961}}
+\gdef\bar:UULR{\G:{\B:0549\B:2951\B:6951}}
+\gdef\bar:DLLRR{\G:{\B:0439\B:0659\B:4401}}
+\gdef\bar:DDLR{\G:{\B:0549\B:2401\B:6501}}
+\gdef\bar:UUR{\G:{\B:2547\B:2951\B:6951}}
+\gdef\bar:URR{\G:{\B:4931\B:5435\B:5655}}
+\gdef\bar:DRR{\G:{\B:4601\B:5435\B:5655}}
+\gdef\bar:DDR{\G:{\B:2547\B:2401\B:6501}}
+\gdef\bar:UUDDLR{\G:{\B:2901\B:6901\B:0549}}
+\gdef\bar:UDLLRR{\G:{\B:0439\B:0659\B:4901}}
+
+% Definition der sonstige Zeichen als Makros
+
+\gdef\ctl:at{\cntl:{@}}
+\gdef\ctl:a{\cntl:{A}}
+\gdef\ctl:b{\cntl:{B}}
+\gdef\ctl:c{\cntl:{C}}
+\gdef\ctl:d{\cntl:{D}}
+\gdef\ctl:e{\cntl:{E}}
+\gdef\ctl:f{\cntl:{F}}
+\gdef\ctl:g{\cntl:{G}}
+\gdef\ctl:h{\cntl:{H}}
+\gdef\ctl:i{\cntl:{I}}
+\gdef\ctl:j{\cntl:{J}}
+\gdef\ctl:k{\cntl:{K}}
+\gdef\ctl:l{\cntl:{L}}
+\gdef\ctl:m{\cntl:{M}}
+\gdef\ctl:n{\cntl:{N}}
+\gdef\ctl:o{\cntl:{O}}
+\gdef\ctl:p{\cntl:{P}}
+\gdef\ctl:q{\cntl:{Q}}
+\gdef\ctl:r{\cntl:{R}}
+\gdef\ctl:s{\cntl:{S}}
+\gdef\ctl:t{\cntl:{T}}
+\gdef\ctl:u{\cntl:{U}}
+\gdef\ctl:v{\cntl:{V}}
+\gdef\ctl:w{\cntl:{W}}
+\gdef\ctl:x{\cntl:{X}}
+\gdef\ctl:y{\cntl:{Y}}
+\gdef\ctl:z{\cntl:{Z}}
+\gdef\ctl:a:{\cntl:{[}}
+\gdef\ctl:b:{\cntl:{\char92 }}
+\gdef\ctl:c:{\cntl:{]}}
+\gdef\ctl:d:{\cntl:{\char94 }}
+\gdef\ctl:e:{\cntl:{\char95 }}
+\gdef\ctl::at{\cntl::{@}}
+\gdef\ctl::a{\cntl::{A}}
+\gdef\ctl::b{\cntl::{B}}
+\gdef\ctl::c{\cntl::{C}}
+\gdef\ctl::d{\cntl::{D}}
+\gdef\ctl::e{\cntl::{E}}
+\gdef\ctl::f{\cntl::{F}}
+\gdef\ctl::g{\cntl::{G}}
+\gdef\ctl::h{\cntl::{H}}
+\gdef\ctl::i{\cntl::{I}}
+\gdef\ctl::j{\cntl::{J}}
+\gdef\ctl::k{\cntl::{K}}
+\gdef\ctl::l{\cntl::{L}}
+\gdef\ctl::m{\cntl::{M}}
+\gdef\ctl::n{\cntl::{N}}
+\gdef\ctl::o{\cntl::{O}}
+\gdef\ctl::p{\cntl::{P}}
+\gdef\ctl::q{\cntl::{Q}}
+\gdef\ctl::r{\cntl::{R}}
+\gdef\ctl::s{\cntl::{S}}
+\gdef\ctl::t{\cntl::{T}}
+\gdef\ctl::u{\cntl::{U}}
+\gdef\ctl::v{\cntl::{V}}
+\gdef\ctl::w{\cntl::{W}}
+\gdef\ctl::x{\cntl::{X}}
+\gdef\ctl::y{\cntl::{Y}}
+\gdef\ctl::z{\cntl::{Z}}
+\gdef\ctl::a:{\cntl::{[}}
+\gdef\ctl::b:{\cntl::{\char92 }}
+\gdef\ctl::c:{\cntl::{]}}
+\gdef\ctl::d:{\cntl::{\char94 }}
+\gdef\ctl::e:{\cntl::{\char95 }}
+\gdef\:fixedblank{\char32 }
+\gdef\:invertedexclamationmark{\char14 }
+\gdef\:cent{c\bs:\up:{-.2ex}{\char124 }}
+\gdef\:pound{\sym:{\it\char36 }}
+\gdef\:currency{\up:{.5\y:}{\sym:{$\scriptstyle\cap$}}\bs:
+\up:{\y:}{\sym:{$\scriptstyle\cup$}}}
+\gdef\:Yen{Y\bs:\up:{-\y:}{-}}
+\gdef\:brokenvbar{\G:{\B:4851\B:4411}}
+\gdef\:paragraph{\sym:{S\bs:\up:{-.6ex}{S}}}
+\gdef\:copyright{\cbox:{\kern-.2em(\hss\up:{.2ex}{c}\hss)\kern-.2em}}
+\gdef\:umera{\cbox:{\up:{.3ex}{\char95 }\bs:\up:{.4ex}{a}}}
+\gdef\:frenchleftquotes{\sym:{<\kern-.3em<}}
+\gdef\:not{\sym:{-\llap{\up:{-.66ex}{\char13 }\kern-.18em}}}
+\gdef\:syllablehyphen{\sym:{\it\char45 }}
+\gdef\:registered{\cbox:{\kern-.2em(\hss R\hss)\kern-.2em}}
+\gdef\:degree{\sym:{$^\circ$}}
+\gdef\:plusminus{+\bs:\char95 }
+\gdef\:supertwo{\sym:{$^{\scriptscriptstyle2}$}}
+\gdef\:superthree{\sym:{$^{\scriptscriptstyle3}$}}
+\gdef\:mu{\sym:{$\mu$}}
+\gdef\:paramark{\sym:{\P}}
+\gdef\:middledot{\cbox:{\up:{.5ex}{.}}}
+\gdef\:superone{\sym:{$^{\scriptscriptstyle1}$}}
+\gdef\:umero{\cbox:{\up:{.3ex}{\char95 }\bs:\up:{.4ex}{o}}}
+\gdef\:frenchrightquotes{\sym:{>\kern-.3em>}}
+\gdef\:onefourth{\up:{\y:}{\sym:{$\scriptstyle{1\over4}$}}}
+\gdef\:onehalf{\up:{\y:}{\sym:{$\scriptstyle{1\over2}$}}}
+\gdef\:threefourth{\up:{\y:}{\sym:{$\scriptstyle{3\over4}$}}}
+\gdef\:invertedquestionmark{\char15 }
+\gdef\:Eth{D\bs:-}
+\gdef\:eth{d\bs:{\char22 }}
+\gdef\:Thorn{\sym:{\rlap{\kern-.07em\rm I}\up:{2\y:}{$\scriptscriptstyle\supset$}}}
+\gdef\:thorn{\sym:{\rlap{\kern.08em\vrule height\h: depth\d: width\x:}\up:{0.2ex}{$\scriptscriptstyle\supset$}\kern-\x:}}
+%%%\gdef\:thorn{\cbox:{\kern-.17em\up:{-.2ex}{\char124 }\hss o}}%%%naja%%%{\G:{\B:1701}\bs: o}
+\gdef\:times{\up:{\y:}{\sym:{$\scriptstyle\times$}}}
+\gdef\:div{\up:{\y:}{\sym:{$\scriptstyle\div$}}}
+\gdef\:dotlessi{\char16 }
+\gdef\:doubleunderscore{\char95 \bs:\up:{-\y:}{\char95 }}
+\gdef\:florin{\sym:{\it f}}
+
+\gdef\:alpha{\sym:{$\alpha$}}
+\gdef\:approxequal{\up:{\y:}{\sym:{$\scriptstyle\approx$}}}
+\gdef\:bigmiddledot{\up:{\y:}{\sym:{$\scriptstyle\bullet$}}}
+\gdef\:cut{\sym:{$\cap$}}
+\gdef\:Delta{\char1 }
+\gdef\:delta{\sym:{$\delta$}}
+\gdef\:diameter{\sym:{$\phi$}}
+\gdef\:elementof{\sym:{$\in$}}
+\gdef\:Gamma{\char0 }
+\gdef\:ge{<\bs:\char95 }
+\gdef\:identity{\up:{\y:}{\sym:{$\scriptstyle\equiv$}}}
+\gdef\:infinity{\up:{\y:}{\sym:{$\scriptstyle\infty$}}}
+\gdef\:intlower{\G:{\B:4931\B:2322}}
+\gdef\:intupper{\G:{\B:4601\B:5762}}
+\gdef\:invertednot{\sym:{\rlap{\kern-.18em\up:{-.66ex}{\char13 }}-}}
+\gdef\:le{>\bs:\char95 }
+\gdef\:Omega{\char10 }
+\gdef\:Pesetas{P\bs:\hbox{\kern1\x: t\kern-1\x:}}
+\gdef\:Phi{\char9 }
+\gdef\:Pi{\char5 }
+\gdef\:root{\up:{\y:}{\sym:{$\scriptscriptstyle\surd$}}}
+\gdef\:Sigma{\char6 }
+\gdef\:sigma{\sym:{$\sigma$}}
+\gdef\:supern{\sym:{$^{\rm n}$}}
+\gdef\:tau{\sym:{$\tau$}}
+\gdef\:Theta{\char2 }
+
+\gdef\:null{\ }
+\gdef\:smile{\G:{\B:2985\B:1821\B:7821\B:2215\B:3761\B:5761\B:3543\B:4431}}
+\gdef\:invertedsmile{\G:{\B:2975\B:1822\B:6822\B:2315\B:2655\B:4761\B:2422\B:5422}}
+\gdef\:herz{\up:{\y:}{\sym:{$\scriptstyle\heartsuit$}}}
+\gdef\:karo{\up:{\y:}{\sym:{$\scriptstyle\diamondsuit$}}}
+\gdef\:kreuz{\up:{\y:}{\sym:{$\scriptstyle\clubsuit$}}}
+\gdef\:pik{\up:{\y:}{\sym:{$\scriptstyle\spadesuit$}}}
+\gdef\:bigdot{\sym:{$\bullet$}}
+\gdef\:invertedbigdot{\sym:{$\bullet$}\bs:\G:{\B:0989\B:0109\B:0901\B:8901}}
+\gdef\:circ{\sym:{$\circ$}}
+\gdef\:invertedcirc{\sym:{$\circ$}\bs:\G:{\B:0989\B:0109\B:0901\B:8901}}
+\gdef\:male{o\bs:\up:{3\y:}{\sym:{$\scriptscriptstyle\nearrow$}}}
+\gdef\:female{\up:{2\y:}{o}\bs:\up:{-2\y:}{+}}
+\gdef\:onenote{\G:{\B:1422\B:3831\B:4873\B:4653\B:7851}}
+\gdef\:twonote{\G:{\B:0312\B:2821\B:5422\B:7831\B:3874\B:3654}}
+\gdef\:star{\sym:{$\ast$}}
+\gdef\:trirt{\sym:{$\triangleright$}}
+\gdef\:trilf{\sym:{$\triangleleft$}}
+\gdef\:arrupdn{\up:{\y:}{\sym:{$\scriptstyle\updownarrow$}}}
+\gdef\:doubleexclamationmark{\cbox:{\kern-.1em!\hss!\kern-.1em}}
+\gdef\:bigcursor{\sym:{\vrule height.5ex depth0ex width7\x:}}
+\gdef\:updnbar{\up:{\y:}{\sym:{$\scriptstyle\updownarrow$}\bs:\G:{\B:2105}}}
+\gdef\:arrup{\up:{\y:}{\sym:{$\scriptstyle\uparrow$}}}
+\gdef\:arrdn{\up:{\y:}{\sym:{$\scriptstyle\downarrow$}}}
+\gdef\:arrrt{\up:{\y:}{\sym:{$\scriptscriptstyle\rightarrow$}}}
+\gdef\:arrlf{\up:{\y:}{\sym:{$\scriptscriptstyle\leftarrow$}}}
+\gdef\:mirrorednot{\sym:{\rlap{\kern-.18em\up:{-.10ex}{\char13 }}-}}
+\gdef\:arrlfrt{\up:{\y:}{\sym:{$\scriptscriptstyle\leftrightarrow$}}}
+\gdef\:triup{\up:{\y:}{\sym:{$\scriptstyle\bigtriangleup$}}}
+\gdef\:tridn{\up:{\y:}{\sym:{$\scriptstyle\bigtriangledown$}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Zweiter Teil: Definition der Makros zum Setzen der Sonderzeichen %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\verb:normalize{
+\catcode`\^^21=11\catcode`\^^22=11\catcode`\^^23=11
+\catcode`\^^24=11\catcode`\^^25=11\catcode`\^^26=11\catcode`\^^27=11
+\catcode`\^^28=11\catcode`\^^29=11\catcode`\^^2a=11\catcode`\^^2b=11
+\catcode`\^^2c=11\catcode`\^^2d=11\catcode`\^^2e=11\catcode`\^^2f=11
+\catcode`\^^30=11\catcode`\^^31=11\catcode`\^^32=11\catcode`\^^33=11
+\catcode`\^^34=11\catcode`\^^35=11\catcode`\^^36=11\catcode`\^^37=11
+\catcode`\^^38=11\catcode`\^^39=11\catcode`\^^3a=11\catcode`\^^3b=11
+\catcode`\^^3c=11\catcode`\^^3d=11\catcode`\^^3e=11\catcode`\^^3f=11
+\catcode`\^^40=11\catcode`\^^41=11\catcode`\^^42=11\catcode`\^^43=11
+\catcode`\^^44=11\catcode`\^^45=11\catcode`\^^46=11\catcode`\^^47=11
+\catcode`\^^48=11\catcode`\^^49=11\catcode`\^^4a=11\catcode`\^^4b=11
+\catcode`\^^4c=11\catcode`\^^4d=11\catcode`\^^4e=11\catcode`\^^4f=11
+\catcode`\^^50=11\catcode`\^^51=11\catcode`\^^52=11\catcode`\^^53=11
+\catcode`\^^54=11\catcode`\^^55=11\catcode`\^^56=11\catcode`\^^57=11
+\catcode`\^^58=11\catcode`\^^59=11\catcode`\^^5a=11\catcode`\^^5b=11
+\catcode`\^^5c=11\catcode`\^^5d=11\catcode`\^^5e=11
+\catcode`\^^61=11\catcode`\^^62=11\catcode`\^^63=11
+\catcode`\^^64=11\catcode`\^^65=11\catcode`\^^66=11\catcode`\^^67=11
+\catcode`\^^68=11\catcode`\^^69=11\catcode`\^^6a=11\catcode`\^^6b=11
+\catcode`\^^6c=11\catcode`\^^6d=11\catcode`\^^6e=11\catcode`\^^6f=11
+\catcode`\^^70=11\catcode`\^^71=11\catcode`\^^72=11\catcode`\^^73=11
+\catcode`\^^74=11\catcode`\^^75=11\catcode`\^^76=11\catcode`\^^77=11
+\catcode`\^^78=11\catcode`\^^79=11\catcode`\^^7a=11\catcode`\^^7b=11
+\catcode`\^^7c=11\catcode`\^^7d=11\catcode`\^^7e=11
+}
+
+\gdef\verb:activate{
+\catcode`\^^00=13\catcode`\^^01=13\catcode`\^^02=13\catcode`\^^03=13
+\catcode`\^^04=13\catcode`\^^05=13\catcode`\^^06=13\catcode`\^^07=13
+\catcode`\^^08=13\catcode`\^^09=13\catcode`\^^0a=13\catcode`\^^0b=13
+\catcode`\^^0c=13\catcode`\^^0d=13\catcode`\^^0e=13\catcode`\^^0f=13
+\catcode`\^^10=13\catcode`\^^11=13\catcode`\^^12=13\catcode`\^^13=13
+\catcode`\^^14=13\catcode`\^^15=13\catcode`\^^16=13\catcode`\^^17=13
+\catcode`\^^18=13\catcode`\^^19=13\catcode`\^^1a=13\catcode`\^^1b=13
+\catcode`\^^1c=13\catcode`\^^1d=13\catcode`\^^1e=13\catcode`\^^1f=13
+\catcode`\^^20=13\catcode`\^^5f=13\catcode`\^^60=13\catcode`\^^7f=13
+\catcode`\^^80=13\catcode`\^^81=13\catcode`\^^82=13\catcode`\^^83=13
+\catcode`\^^84=13\catcode`\^^85=13\catcode`\^^86=13\catcode`\^^87=13
+\catcode`\^^88=13\catcode`\^^89=13\catcode`\^^8a=13\catcode`\^^8b=13
+\catcode`\^^8c=13\catcode`\^^8d=13\catcode`\^^8e=13\catcode`\^^8f=13
+\catcode`\^^90=13\catcode`\^^91=13\catcode`\^^92=13\catcode`\^^93=13
+\catcode`\^^94=13\catcode`\^^95=13\catcode`\^^96=13\catcode`\^^97=13
+\catcode`\^^98=13\catcode`\^^99=13\catcode`\^^9a=13\catcode`\^^9b=13
+\catcode`\^^9c=13\catcode`\^^9d=13\catcode`\^^9e=13\catcode`\^^9f=13
+\catcode`\^^a0=13\catcode`\^^a1=13\catcode`\^^a2=13\catcode`\^^a3=13
+\catcode`\^^a4=13\catcode`\^^a5=13\catcode`\^^a6=13\catcode`\^^a7=13
+\catcode`\^^a8=13\catcode`\^^a9=13\catcode`\^^aa=13\catcode`\^^ab=13
+\catcode`\^^ac=13\catcode`\^^ad=13\catcode`\^^ae=13\catcode`\^^af=13
+\catcode`\^^b0=13\catcode`\^^b1=13\catcode`\^^b2=13\catcode`\^^b3=13
+\catcode`\^^b4=13\catcode`\^^b5=13\catcode`\^^b6=13\catcode`\^^b7=13
+\catcode`\^^b8=13\catcode`\^^b9=13\catcode`\^^ba=13\catcode`\^^bb=13
+\catcode`\^^bc=13\catcode`\^^bd=13\catcode`\^^be=13\catcode`\^^bf=13
+\catcode`\^^c0=13\catcode`\^^c1=13\catcode`\^^c2=13\catcode`\^^c3=13
+\catcode`\^^c4=13\catcode`\^^c5=13\catcode`\^^c6=13\catcode`\^^c7=13
+\catcode`\^^c8=13\catcode`\^^c9=13\catcode`\^^ca=13\catcode`\^^cb=13
+\catcode`\^^cc=13\catcode`\^^cd=13\catcode`\^^ce=13\catcode`\^^cf=13
+\catcode`\^^d0=13\catcode`\^^d1=13\catcode`\^^d2=13\catcode`\^^d3=13
+\catcode`\^^d4=13\catcode`\^^d5=13\catcode`\^^d6=13\catcode`\^^d7=13
+\catcode`\^^d8=13\catcode`\^^d9=13\catcode`\^^da=13\catcode`\^^db=13
+\catcode`\^^dc=13\catcode`\^^dd=13\catcode`\^^de=13\catcode`\^^df=13
+\catcode`\^^e0=13\catcode`\^^e1=13\catcode`\^^e2=13\catcode`\^^e3=13
+\catcode`\^^e4=13\catcode`\^^e5=13\catcode`\^^e6=13\catcode`\^^e7=13
+\catcode`\^^e8=13\catcode`\^^e9=13\catcode`\^^ea=13\catcode`\^^eb=13
+\catcode`\^^ec=13\catcode`\^^ed=13\catcode`\^^ee=13\catcode`\^^ef=13
+\catcode`\^^f0=13\catcode`\^^f1=13\catcode`\^^f2=13\catcode`\^^f3=13
+\catcode`\^^f4=13\catcode`\^^f5=13\catcode`\^^f6=13\catcode`\^^f7=13
+\catcode`\^^f8=13\catcode`\^^f9=13\catcode`\^^fa=13\catcode`\^^fb=13
+\catcode`\^^fc=13\catcode`\^^fd=13\catcode`\^^fe=13\catcode`\^^ff=13
+}
+
+\begingroup
+\verb:activate%
+%
+\gdef\verb:iso{%
+\verb:normalize%
+\verb:activate%
+\let^^00=\ctl:at%
+\let^^01=\ctl:a%
+\let^^02=\ctl:b%
+\let^^03=\ctl:c%
+\let^^04=\ctl:d%
+\let^^05=\ctl:e%
+\let^^06=\ctl:f%
+\let^^07=\ctl:g%
+\let^^08=\verb:BS%
+\let^^09=\verb:HT%
+\let^^0a=\verb:LF%
+\let^^0b=\verb:VT%
+\let^^0c=\verb:FF%
+\let^^0d=\verb:CR%
+\let^^0e=\ctl:n%
+\let^^0f=\ctl:o%
+\let^^10=\ctl:p%
+\let^^11=\ctl:q%
+\let^^12=\ctl:r%
+\let^^13=\ctl:s%
+\let^^14=\ctl:t%
+\let^^15=\ctl:u%
+\let^^16=\ctl:v%
+\let^^17=\ctl:w%
+\let^^18=\ctl:x%
+\let^^19=\ctl:y%
+\let^^1a=\ctl:z%
+\let^^1b=\ctl:a:%
+\let^^1c=\ctl:b:%
+\let^^1d=\ctl:c:%
+\let^^1e=\ctl:d:%
+\let^^1f=\ctl:e:%
+\let^^20=\:sp%
+\let^^5f=\:us%
+\let^^60=\:gr%
+\let^^7f=\:Delta%
+\let^^80=\bar:LR%
+\let^^81=\bar:UD%
+\let^^82=\bar:UR%
+\let^^83=\bar:UL%
+\let^^84=\bar:DL%
+\let^^85=\bar:DR%
+\let^^86=\bar:UDR%
+\let^^87=\bar:ULR%
+\let^^88=\bar:UDL%
+\let^^89=\bar:DLR%
+\let^^8a=\bar:UDLR%
+\let^^8b=\box:light%
+\let^^8c=\box:medium%
+\let^^8d=\box:dark%
+\let^^8e=\:dotlessi%
+\let^^8f=\:doubleunderscore%
+\let^^90=\bar:LLRR%
+\let^^91=\bar:UUDD%
+\let^^92=\bar:UURR%
+\let^^93=\bar:UULL%
+\let^^94=\bar:DDLL%
+\let^^95=\bar:DDRR%
+\let^^96=\bar:UUDDRR%
+\let^^97=\bar:UULLRR%
+\let^^98=\bar:UUDDLL%
+\let^^99=\bar:DDLLRR%
+\let^^9a=\bar:UUDDLLRR%
+\let^^9b=\box:halfhigh%
+\let^^9c=\box:halflow%
+\let^^9d=\box:full%
+\let^^9e=\box:small%
+\let^^9f=\:florin%
+\let^^a0=\:fixedblank%
+\let^^a1=\:invertedexclamationmark%
+\let^^a2=\:cent%
+\let^^a3=\:pound%
+\let^^a4=\:currency%
+\let^^a5=\:Yen%
+\let^^a6=\:brokenvbar%
+\let^^a7=\:paragraph%
+\let^^a8=\:umlaut%
+\let^^a9=\:copyright%
+\let^^aa=\:umera%
+\let^^ab=\:frenchleftquotes%
+\let^^ac=\:not%
+\let^^ad=\:syllablehyphen%
+\let^^ae=\:registered%
+\let^^af=\:macron%
+\let^^b0=\:degree%
+\let^^b1=\:plusminus%
+\let^^b2=\:supertwo%
+\let^^b3=\:superthree%
+\let^^b4=\:acute%
+\let^^b5=\:mu%
+\let^^b6=\:paramark%
+\let^^b7=\:middledot%
+\let^^b8=\:cedilla%
+\let^^b9=\:superone%
+\let^^ba=\:umero%
+\let^^bb=\:frenchrightquotes%
+\let^^bc=\:onefourth%
+\let^^bd=\:onehalf%
+\let^^be=\:threefourth%
+\let^^bf=\:invertedquestionmark%
+\let^^c0=\gra:A%
+\let^^c1=\acu:A%
+\let^^c2=\cir:A%
+\let^^c3=\til:A%
+\let^^c4=\uml:A%
+\let^^c5=\ang:A%
+\let^^c6=\lig:AE%
+\let^^c7=\ced:C%
+\let^^c8=\gra:E%
+\let^^c9=\acu:E%
+\let^^ca=\cir:E%
+\let^^cb=\uml:E%
+\let^^cc=\gra:I%
+\let^^cd=\acu:I%
+\let^^ce=\cir:I%
+\let^^cf=\uml:I%
+\let^^d0=\:Eth%
+\let^^d1=\til:N%
+\let^^d2=\gra:O%
+\let^^d3=\acu:O%
+\let^^d4=\cir:O%
+\let^^d5=\til:O%
+\let^^d6=\uml:O%
+\let^^d7=\:times%
+\let^^d8=\dia:O%
+\let^^d9=\gra:U%
+\let^^da=\acu:U%
+\let^^db=\cir:U%
+\let^^dc=\uml:U%
+\let^^dd=\acu:Y%
+\let^^de=\:Thorn%
+\let^^df=\:eszet%
+\let^^e0=\gra:a%
+\let^^e1=\acu:a%
+\let^^e2=\cir:a%
+\let^^e3=\til:a%
+\let^^e4=\uml:a%
+\let^^e5=\ang:a%
+\let^^e6=\lig:ae%
+\let^^e7=\ced:c%
+\let^^e8=\gra:e%
+\let^^e9=\acu:e%
+\let^^ea=\cir:e%
+\let^^eb=\uml:e%
+\let^^ec=\gra:i%
+\let^^ed=\acu:i%
+\let^^ee=\cir:i%
+\let^^ef=\uml:i%
+\let^^f0=\:eth%
+\let^^f1=\til:n%
+\let^^f2=\gra:o%
+\let^^f3=\acu:o%
+\let^^f4=\cir:o%
+\let^^f5=\til:o%
+\let^^f6=\uml:o%
+\let^^f7=\:div%
+\let^^f8=\dia:o%
+\let^^f9=\gra:u%
+\let^^fa=\acu:u%
+\let^^fb=\cir:u%
+\let^^fc=\uml:u%
+\let^^fd=\acu:y%
+\let^^fe=\:thorn%
+\let^^ff=\uml:y%
+}%
+%
+\gdef\verb:ibm{%
+\verb:normalize%
+\verb:activate%
+\let^^00=\:null%
+\let^^01=\:smile%
+\let^^02=\:invertedsmile%
+\let^^03=\:herz%
+\let^^04=\:karo%
+\let^^05=\:kreuz%
+\let^^06=\:pik%
+\let^^07=\:bigdot%
+\let^^08=\verb:BS%
+\let^^09=\verb:HT%
+\let^^0a=\verb:LF%
+\let^^0b=\verb:VT%
+\let^^0c=\verb:FF%
+\let^^0d=\verb:CR%
+\let^^0e=\:twonote%
+\let^^0f=\:star%
+\let^^10=\:trirt%
+\let^^11=\:trilf%
+\let^^12=\:arrupdn%
+\let^^13=\:doubleexclamationmark%
+\let^^14=\:paramark%
+\let^^15=\:paragraph%
+\let^^16=\:bigcursor%
+\let^^17=\:updnbar%
+\let^^18=\:arrup%
+\let^^19=\:arrdn%
+\let^^1a=\:arrrt%
+\let^^1b=\:arrlf%
+\let^^1c=\:mirrorednot%
+\let^^1d=\:arrlfrt%
+\let^^1e=\:triup%
+\let^^1f=\:tridn%
+\let^^20=\:sp%
+\let^^5f=\:us%
+\let^^60=\:gr%
+\let^^7f=\:Delta%
+\let^^80=\ced:C%
+\let^^81=\uml:u%
+\let^^82=\acu:e%
+\let^^83=\cir:a%
+\let^^84=\uml:a%
+\let^^85=\gra:a%
+\let^^86=\ang:a%
+\let^^87=\ced:c%
+\let^^88=\cir:e%
+\let^^89=\uml:e%
+\let^^8a=\gra:e%
+\let^^8b=\uml:i%
+\let^^8c=\cir:i%
+\let^^8d=\gra:i%
+\let^^8e=\uml:A%
+\let^^8f=\ang:A%
+\let^^90=\acu:E%
+\let^^91=\lig:ae%
+\let^^92=\lig:AE%
+\let^^93=\cir:o%
+\let^^94=\uml:o%
+\let^^95=\gra:o%
+\let^^96=\cir:u%
+\let^^97=\gra:u%
+\let^^98=\uml:y%
+\let^^99=\uml:O%
+\let^^9a=\uml:U%
+\let^^9b=\dia:o%
+\let^^9c=\:pound%
+\let^^9d=\dia:O%
+\let^^9e=\:times%
+\let^^9f=\:florin%
+\let^^a0=\acu:a%
+\let^^a1=\acu:i%
+\let^^a2=\acu:o%
+\let^^a3=\acu:u%
+\let^^a4=\til:n%
+\let^^a5=\til:N%
+\let^^a6=\:umera%
+\let^^a7=\:umero%
+\let^^a8=\:invertedquestionmark%
+\let^^a9=\:registered%
+\let^^aa=\:not%
+\let^^ab=\:onehalf%
+\let^^ac=\:onefourth%
+\let^^ad=\:invertedexclamationmark%
+\let^^ae=\:frenchleftquotes%
+\let^^af=\:frenchrightquotes%
+\let^^b0=\box:light%
+\let^^b1=\box:medium%
+\let^^b2=\box:dark%
+\let^^b3=\bar:UD%
+\let^^b4=\bar:UDL%
+\let^^b5=\acu:A%
+\let^^b6=\cir:A%
+\let^^b7=\gra:A%
+\let^^b8=\:copyright%
+\let^^b9=\bar:UUDDLL%
+\let^^ba=\bar:UUDD%
+\let^^bb=\bar:DDLL%
+\let^^bc=\bar:UULL%
+\let^^bd=\:cent%
+\let^^be=\:Yen%
+\let^^bf=\bar:DL%
+\let^^c0=\bar:UR%
+\let^^c1=\bar:ULR%
+\let^^c2=\bar:DLR%
+\let^^c3=\bar:UDR%
+\let^^c4=\bar:LR%
+\let^^c5=\bar:UDLR%
+\let^^c6=\til:a%
+\let^^c7=\til:A%
+\let^^c8=\bar:UURR%
+\let^^c9=\bar:DDRR%
+\let^^ca=\bar:UULLRR%
+\let^^cb=\bar:DDLLRR%
+\let^^cc=\bar:UUDDRR%
+\let^^cd=\bar:LLRR%
+\let^^ce=\bar:UUDDLLRR%
+\let^^cf=\:currency%
+\let^^d0=\:eth%
+\let^^d1=\:Eth%
+\let^^d2=\cir:E%
+\let^^d3=\uml:E%
+\let^^d4=\gra:E%
+\let^^d5=\:dotlessi%
+\let^^d6=\acu:I%
+\let^^d7=\cir:I%
+\let^^d8=\uml:I%
+\let^^d9=\bar:UL%
+\let^^da=\bar:DR%
+\let^^db=\box:full%
+\let^^dc=\box:halflow%
+\let^^dd=\:brokenvbar%
+\let^^de=\gra:I%
+\let^^df=\box:halfhigh%
+\let^^e0=\acu:O%
+\let^^e1=\:eszet%
+\let^^e2=\cir:O%
+\let^^e3=\gra:O%
+\let^^e4=\til:o%
+\let^^e5=\til:O%
+\let^^e6=\:mu%
+\let^^e7=\:thorn%
+\let^^e8=\:Thorn%
+\let^^e9=\acu:U%
+\let^^ea=\cir:U%
+\let^^eb=\gra:U%
+\let^^ec=\acu:y%
+\let^^ed=\acu:Y%
+\let^^ee=\:macron%
+\let^^ef=\:acute%
+\let^^f0=\:syllablehyphen%
+\let^^f1=\:plusminus%
+\let^^f2=\:doubleunderscore%
+\let^^f3=\:threefourth%
+\let^^f4=\:paramark%
+\let^^f5=\:paragraph%
+\let^^f6=\:div%
+\let^^f7=\:cedilla%
+\let^^f8=\:degree%
+\let^^f9=\:umlaut%
+\let^^fa=\:middledot%
+\let^^fb=\:superone%
+\let^^fc=\:superthree%
+\let^^fd=\:supertwo%
+\let^^fe=\box:small%
+\let^^ff=\:fixedblank%
+}%
+%
+\gdef\verb:pc{%
+\verb:normalize%
+\verb:activate%
+\let^^00=\:null%
+\let^^01=\:smile%
+\let^^02=\:invertedsmile%
+\let^^03=\:herz%
+\let^^04=\:karo%
+\let^^05=\:kreuz%
+\let^^06=\:pik%
+\let^^07=\:bigdot%
+\let^^08=\verb:BS%
+\let^^09=\verb:HT%
+\let^^0a=\verb:LF%
+\let^^0b=\verb:VT%
+\let^^0c=\verb:FF%
+\let^^0d=\verb:CR%
+\let^^0e=\:twonote%
+\let^^0f=\:star%
+\let^^10=\:trirt%
+\let^^11=\:trilf%
+\let^^12=\:arrupdn%
+\let^^13=\:doubleexclamationmark%
+\let^^14=\:paramark%
+\let^^15=\:paragraph%
+\let^^16=\:bigcursor%
+\let^^17=\:updnbar%
+\let^^18=\:arrup%
+\let^^19=\:arrdn%
+\let^^1a=\:arrrt%
+\let^^1b=\:arrlf%
+\let^^1c=\:mirrorednot%
+\let^^1d=\:arrlfrt%
+\let^^1e=\:triup%
+\let^^1f=\:tridn%
+\let^^20=\:sp%
+\let^^5f=\:us%
+\let^^60=\:gr%
+\let^^7f=\:Delta%
+\let^^80=\ced:C%
+\let^^81=\uml:u%
+\let^^82=\acu:e%
+\let^^83=\cir:a%
+\let^^84=\uml:a%
+\let^^85=\gra:a%
+\let^^86=\ang:a%
+\let^^87=\ced:c%
+\let^^88=\cir:e%
+\let^^89=\uml:e%
+\let^^8a=\gra:e%
+\let^^8b=\uml:i%
+\let^^8c=\cir:i%
+\let^^8d=\gra:i%
+\let^^8e=\uml:A%
+\let^^8f=\ang:A%
+\let^^90=\acu:E%
+\let^^91=\lig:ae%
+\let^^92=\lig:AE%
+\let^^93=\cir:o%
+\let^^94=\uml:o%
+\let^^95=\gra:o%
+\let^^96=\cir:u%
+\let^^97=\gra:u%
+\let^^98=\uml:y%
+\let^^99=\uml:O%
+\let^^9a=\uml:U%
+\let^^9b=\:cent%%%
+\let^^9c=\:pound%
+\let^^9d=\:Yen%%%
+\let^^9e=\:Pesetas%%%
+\let^^9f=\:florin%
+\let^^a0=\acu:a%
+\let^^a1=\acu:i%
+\let^^a2=\acu:o%
+\let^^a3=\acu:u%
+\let^^a4=\til:n%
+\let^^a5=\til:N%
+\let^^a6=\:umera%
+\let^^a7=\:umero%
+\let^^a8=\:invertedquestionmark%
+\let^^a9=\:invertednot%%%
+\let^^aa=\:not%
+\let^^ab=\:onehalf%
+\let^^ac=\:onefourth%
+\let^^ad=\:invertedexclamationmark%
+\let^^ae=\:frenchleftquotes%
+\let^^af=\:frenchrightquotes%
+\let^^b0=\box:light%
+\let^^b1=\box:medium%
+\let^^b2=\box:dark%
+\let^^b3=\bar:UD%
+\let^^b4=\bar:UDL%
+\let^^b5=\bar:UDLL%%%
+\let^^b6=\bar:UUDDL%%%
+\let^^b7=\bar:DDL%%%
+\let^^b8=\bar:DLL%%%
+\let^^b9=\bar:UUDDLL%
+\let^^ba=\bar:UUDD%
+\let^^bb=\bar:DDLL%
+\let^^bc=\bar:UULL%
+\let^^bd=\bar:UUL%%%
+\let^^be=\bar:ULL%%%
+\let^^bf=\bar:DL%
+\let^^c0=\bar:UR%
+\let^^c1=\bar:ULR%
+\let^^c2=\bar:DLR%
+\let^^c3=\bar:UDR%
+\let^^c4=\bar:LR%
+\let^^c5=\bar:UDLR%
+\let^^c6=\bar:UDRR%%%
+\let^^c7=\bar:UUDDR%%%
+\let^^c8=\bar:UURR%
+\let^^c9=\bar:DDRR%
+\let^^ca=\bar:UULLRR%
+\let^^cb=\bar:DDLLRR%
+\let^^cc=\bar:UUDDRR%
+\let^^cd=\bar:LLRR%
+\let^^ce=\bar:UUDDLLRR%
+\let^^cf=\bar:ULLRR%%%
+\let^^d0=\bar:UULR%%%
+\let^^d1=\bar:DLLRR%%%
+\let^^d2=\bar:DDLR%%%
+\let^^d3=\bar:UUR%%%
+\let^^d4=\bar:URR%%%
+\let^^d5=\bar:DRR%%%
+\let^^d6=\bar:DDR%%%
+\let^^d7=\bar:UUDDLR%%%
+\let^^d8=\bar:UDLLRR%%%
+\let^^d9=\bar:UL%
+\let^^da=\bar:DR%
+\let^^db=\box:full%
+\let^^dc=\box:halflow%
+\let^^dd=\box:halfleft%%%
+\let^^de=\box:halfright%%%
+\let^^df=\box:halfhigh%
+\let^^e0=\:alpha%%%
+\let^^e1=\:eszet%
+\let^^e2=\:Gamma%%%
+\let^^e3=\:Pi%%%
+\let^^e4=\:Sigma%%%
+\let^^e5=\:sigma%%%
+\let^^e6=\:mu%
+\let^^e7=\:tau%%%
+\let^^e8=\:Phi%%%
+\let^^e9=\:Theta%%%
+\let^^ea=\:Omega%%%
+\let^^eb=\:delta%%%
+\let^^ec=\:infinity%%%
+\let^^ed=\:diameter%%%
+\let^^ee=\:elementof%%%
+\let^^ef=\:cut%%%
+\let^^f0=\:identity%%%
+\let^^f1=\:plusminus%
+\let^^f2=\:ge%%%
+\let^^f3=\:le%%%
+\let^^f4=\:intupper%%%
+\let^^f5=\:intlower%%%
+\let^^f6=\:div%
+\let^^f7=\:approxequal%%%
+\let^^f8=\:degree%
+\let^^f9=\:bigmiddledot%%%
+\let^^fa=\:middledot%
+\let^^fb=\:root%%%
+\let^^fc=\:supern%%%
+\let^^fd=\:supertwo%
+\let^^fe=\box:small%
+\let^^ff=\:fixedblank%
+}%
+\gdef\verb:test{%
+\verb:normalize%
+\verb:activate%
+\let^^00=\ctl:at%
+\let^^01=\ctl:a%
+\let^^02=\ctl:b%
+\let^^03=\ctl:c%
+\let^^04=\ctl:d%
+\let^^05=\ctl:e%
+\let^^06=\ctl:f%
+\let^^07=\ctl:g%
+\let^^08=\verb:BS%
+\let^^09=\verb:HT%
+\let^^0a=\verb:LF%
+\let^^0b=\verb:VT%
+\let^^0c=\verb:FF%
+\let^^0d=\verb:CR%
+\let^^0e=\ctl:n%
+\let^^0f=\ctl:o%
+\let^^10=\ctl:p%
+\let^^11=\ctl:q%
+\let^^12=\ctl:r%
+\let^^13=\ctl:s%
+\let^^14=\ctl:t%
+\let^^15=\ctl:u%
+\let^^16=\ctl:v%
+\let^^17=\ctl:w%
+\let^^18=\ctl:x%
+\let^^19=\ctl:y%
+\let^^1a=\ctl:z%
+\let^^1b=\ctl:a:%
+\let^^1c=\ctl:b:%
+\let^^1d=\ctl:c:%
+\let^^1e=\ctl:d:%
+\let^^1f=\ctl:e:%
+\let^^20=\:sp%
+\let^^5f=\:us%
+\let^^60=\:gr%
+\let^^7f=\:Delta%
+\let^^80=\ctl::at%
+\let^^81=\ctl::a%
+\let^^82=\ctl::b%
+\let^^83=\ctl::c%
+\let^^84=\ctl::d%
+\let^^85=\ctl::e%
+\let^^86=\ctl::f%
+\let^^87=\ctl::g%
+\let^^88=\ctl::h%
+\let^^89=\ctl::i%
+\let^^8a=\ctl::j%
+\let^^8b=\ctl::k%
+\let^^8c=\ctl::l%
+\let^^8d=\ctl::m%
+\let^^8e=\ctl::n%
+\let^^8f=\ctl::o%
+\let^^90=\ctl::p%
+\let^^91=\ctl::q%
+\let^^92=\ctl::r%
+\let^^93=\ctl::s%
+\let^^94=\ctl::t%
+\let^^95=\ctl::u%
+\let^^96=\ctl::v%
+\let^^97=\ctl::w%
+\let^^98=\ctl::x%
+\let^^99=\ctl::y%
+\let^^9a=\ctl::z%
+\let^^9b=\ctl::a:%
+\let^^9c=\ctl::b:%
+\let^^9d=\ctl::c:%
+\let^^9e=\ctl::d:%
+\let^^9f=\ctl::e:%
+\let^^a0=\:null%
+\let^^a1=\:smile%
+\let^^a2=\:invertedsmile%
+\let^^a3=\:herz%
+\let^^a4=\:karo%
+\let^^a5=\:kreuz%
+\let^^a6=\:pik%
+\let^^a7=\:bigdot%
+\let^^a8=\:invertedbigdot%
+\let^^a9=\:circ%
+\let^^aa=\:invertedcirc%
+\let^^ab=\:male%
+\let^^ac=\:female%
+\let^^ad=\:onenote%
+\let^^ae=\:twonote%
+\let^^af=\:star%
+\let^^b0=\:trirt%
+\let^^b1=\:trilf%
+\let^^b2=\:arrupdn%
+\let^^b3=\:doubleexclamationmark%
+\let^^b4=\:paramark%
+\let^^b5=\:paragraph%
+\let^^b6=\:bigcursor%
+\let^^b7=\:updnbar%
+\let^^b8=\:arrup%
+\let^^b9=\:arrdn%
+\let^^ba=\:arrrt%
+\let^^bb=\:arrlf%
+\let^^bc=\:mirrorednot%
+\let^^bd=\:arrlfrt%
+\let^^be=\:triup%
+\let^^bf=\:tridn%
+\let^^c0=\ctl:at%
+\let^^c1=\ctl:a%
+\let^^c2=\ctl:b%
+\let^^c3=\ctl:c%
+\let^^c4=\ctl:d%
+\let^^c5=\ctl:e%
+\let^^c6=\ctl:f%
+\let^^c7=\ctl:g%
+\let^^c8=\ctl:h%
+\let^^c9=\ctl:i%
+\let^^ca=\ctl:j%
+\let^^cb=\ctl:k%
+\let^^cc=\ctl:l%
+\let^^cd=\ctl:m%
+\let^^ce=\ctl:n%
+\let^^cf=\ctl:o%
+\let^^d0=\ctl:p%
+\let^^d1=\ctl:q%
+\let^^d2=\ctl:r%
+\let^^d3=\ctl:s%
+\let^^d4=\ctl:t%
+\let^^d5=\ctl:u%
+\let^^d6=\ctl:v%
+\let^^d7=\ctl:w%
+\let^^d8=\ctl:x%
+\let^^d9=\ctl:y%
+\let^^da=\ctl:z%
+\let^^db=\ctl:a:%
+\let^^dc=\ctl:b:%
+\let^^dd=\ctl:c:%
+\let^^de=\ctl:d:%
+\let^^df=\ctl:e:%
+\let^^e0=\ctl::at%
+\let^^e1=\ctl::a%
+\let^^e2=\ctl::b%
+\let^^e3=\ctl::c%
+\let^^e4=\ctl::d%
+\let^^e5=\ctl::e%
+\let^^e6=\ctl::f%
+\let^^e7=\ctl::g%
+\let^^e8=\ctl::h%
+\let^^e9=\ctl::i%
+\let^^ea=\ctl::j%
+\let^^eb=\ctl::k%
+\let^^ec=\ctl::l%
+\let^^ed=\ctl::m%
+\let^^ee=\ctl::n%
+\let^^ef=\ctl::o%
+\let^^f0=\ctl::p%
+\let^^f1=\ctl::q%
+\let^^f2=\ctl::r%
+\let^^f3=\ctl::s%
+\let^^f4=\ctl::t%
+\let^^f5=\ctl::u%
+\let^^f6=\ctl::v%
+\let^^f7=\ctl::w%
+\let^^f8=\ctl::x%
+\let^^f9=\ctl::y%
+\let^^fa=\ctl::z%
+\let^^fb=\ctl::a:%
+\let^^fc=\ctl::b:%
+\let^^fd=\ctl::c:%
+\let^^fe=\ctl::d:%
+\let^^ff=\ctl::e:%
+}%
+%
+\endgroup
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Dritter Teil: Definition der Makros %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newbox\verbb:x
+\newcount\verb:line
+\newtoks\verb:toks
+\gdef\verb:bar{\up:{-0.6ex}{\vrule width1ptheight\H: depth0ex}}
+\gdef\verb:bol{\setbox\verbb:x=\hbox\bgroup}
+\gdef\verb:egrp{\leavevmode\egroup\ht\verbb:x\h:\dp\verbb:x\d:\box\verbb:x}
+\gdef\verb:eol{\verb:egrp\par}
+\gdef\verb:xbol{\nobreak\leavevmode\verb:bar\space\setbox\verbb:x=\hbox\bgroup}
+\gdef\verb:xeol{\verb:egrp\hfill\verb:bar\par}
+\gdef\verb:cnt{\advance\verb:line by1\hbox to3em{\hfil\the\verb:line\quad}}
+\global\let\verb:cset\verb:iso
+
+\gdef\verb:BS{%
+\leavevmode\egroup% end collecting of current box
+\dimen0\wd\verbb:x% get width of current box
+\advance\dimen0by-\w:% one space back
+\wd\verbb:x\dimen0% set box width of current box
+\setbox0=\box\verbb:x% copy box
+\setbox\verbb:x=\hbox\bgroup\box0% restart box
+}
+
+\gdef\verb:HT{%
+\leavevmode\egroup% end collecting of current box
+\dimen0\wd\verbb:x% get width of current box
+\divide\dimen0by8% integer division by tab distance
+\divide\dimen0by\w:% integer division by character width
+\multiply\dimen0by\w:% integer multiplication by character width
+\advance\dimen0by\w:% advance to next position
+\multiply\dimen0by8% integer multiplication by tab distance
+\wd\verbb:x\dimen0% set box width of current box
+\box\verbb:x% type box
+\setbox\verbb:x=\hbox\bgroup% start next box
+}
+
+\gdef\verb:LF{\verb:CR}
+\gdef\verb:VT{\verb:CR\verb:CR}
+\gdef\verb:FF{\verb:CR\verb:CR\verb:CR}%%%{\verb:eol\vskip0ptplus1fil\break}
+
+\gdef\verb:verb{%
+\verb:cset%
+\frenchspacing\tt\baselineskip=\H:\parindent=0pt\parskip=0pt%
+\setbox0=\hbox{X}%
+\global\w:=\wd0%
+\global\h:=\ht0%
+\setbox0=\hbox{g}%
+\global\d:=\dp0%
+\global\x:=\w:\global\divide\x: by9%
+\global\z:=\h:\global\advance\z: by\d:%
+\global\y:=\H:\global\divide\y: by9%
+}
+
+\gdef\verbcharset#1{%
+\ifnum#1=437\let\verb:cset\verb:pc\else%
+\ifnum#1=850\let\verb:cset\verb:ibm\else%
+\ifnum#1=88591\let\verb:cset\verb:iso\else%
+\ifnum#1=4101962\let\verb:cset\verb:test\else%
+\@latexerr{Unknown verbatim character set}\@eha%
+\fi\fi\fi\fi%
+}
+
+\gdef\verbinput#1{%
+\par%
+\verb:toks=\everypar\everypar{}%
+\begingroup%
+\def\verb:CR{\verb:eol}%
+\verb:verb%
+\everypar{\the\verb:toks\everypar{\verb:bol}\the\everypar}%
+\input#1\endgroup%
+\par%
+}
+
+\gdef\verbinputnum#1{%
+\par%
+\verb:toks=\everypar\everypar{}%
+\begingroup%
+\verb:line=0%
+\def\verb:CR{\verb:eol}%
+\verb:verb%
+\everypar{\the\verb:toks\everypar{\verb:cnt\verb:bol}\the\everypar}%
+\input#1\endgroup%
+\par%
+}
+
+\gdef\verbinputbox#1{%
+\par%
+\begingroup%
+\def\verb:CR{\verb:xeol\verb:xbol}%
+\verb:verb%
+\offinterlineskip%
+\noindent\leaders\hrule height1pt\hfill\kern0pt\par%
+\verb:xbol\verb:xeol\verb:xbol\input#1\relax\verb:xeol\nobreak%
+\noindent\leaders\hrule height1pt\hfill\kern0pt\par\nointerlineskip%
+\endgroup%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\endgroup
+
diff --git a/macros/latex209/contrib/misc/verbsubfile.sty b/macros/latex209/contrib/misc/verbsubfile.sty
new file mode 100644
index 0000000000..5bd91e8b74
--- /dev/null
+++ b/macros/latex209/contrib/misc/verbsubfile.sty
@@ -0,0 +1,129 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% VRBSUBFILE.STY
+%
+% Copyright (c) 1993 by Norman Walsh, All Rights Reserved.
+% Copy freely as per the GNU Copyleft.
+%
+% Requires:
+% The New Font Selection Scheme (NFSS)
+% VERBATIM.STY by Rainer Schoepf
+% VRBINPUT.STY by Bernd Raichle.
+%
+% VRBSUBFILE allows you to perform verbatim input of subsections of
+% a file. I wrote it in anticipation of documenting some shell scripts
+% and I want to be able to incorporate a few lines of shell script
+% in verbatim mode then write a few lines or paragraphs of documentation
+% then incorporate a few more lines of shell script, etc.
+%
+% Optionally, verbatim lines are numbered.
+%
+% Comments and suggestions always welcome.
+% Norman Walsh <walsh@cs.umass.edu>
+% Graduate Computer Science Department
+% University of Massachusetts
+% Amherst, MA 01003
+%
+% User interface:
+% VerbatimSubfile[#1]#2#3#4
+% Input lines #2 to #3 of file #4. If present, #1 indicates which lines
+% should be numbered. For example, if #1 is 5, lines 5, 10, 15, etc.
+% will be numbered. By default, lines are not numbered at all.
+%
+% VerbatimSubfileFont[#1]#2
+% Use font #2 for verbatim input lines and, if present, use font #1 for
+% line numbers. By default, #2 is \tt and #1 is \rm\tiny.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\fileversion{v1.0}
+\def\filedate{93/03/01}
+\typeout{Style-Option: `vrbsubfile'
+ \fileversion \space <\filedate> (ndw)}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\newcounter{Verb@LineNo} % current line number
+\newcounter{Verb@LineMod} % modulo to print on
+\newcounter{Verb@LineLoop} % loop count in line number (1..Mod)
+\newcounter{Verb@LineStart} % first line to print
+\newcounter{Verb@LineCount} % number of lines to print
+\newcounter{Verb@PrintFlag} % print this line?
+%
+%%%% Default verbatim font and verbatim line number font
+\def\Verb@sfFont{\tt}
+\def\Verb@sfLineNumFont{\rm\tiny}
+%
+%%%% Macros to change fonts
+\def\Verb@setbothfonts[#1]#2{%
+ \def\Verb@sfFont{#2}%
+ \def\Verb@sfLineNumFont{#1}%
+}
+\def\Verb@setverbfont#1{%
+ \def\Verb@sfFont{#1}%
+}
+\def\VerbatimSubfileFont{\@ifnextchar[{\Verb@setbothfonts}{\Verb@setverbfont}}
+%
+%%%% Internal macro that does the work...
+\def\Verb@subfile#1{\begingroup%
+ \def\verbatim@font{\Verb@sfFont\selectfont}
+ \setcounter{Verb@LineNo}{0}%
+ \setcounter{Verb@LineLoop}{0}%
+ \parskip=0pt
+ \def\verbatim@processline{%
+ \addtocounter{Verb@LineNo}{1}%
+ \addtocounter{Verb@LineLoop}{1}%
+ \setcounter{Verb@PrintFlag}{1}%
+ \ifnum\theVerb@LineStart>0% we haven't reached the first line yet...
+ \setcounter{Verb@PrintFlag}{0}%
+ \addtocounter{Verb@LineStart}{-1}%
+ \else%
+ \ifnum\theVerb@LineCount=0% we're out of the "printable" region
+ \setcounter{Verb@PrintFlag}{0}%
+ \else%
+ \addtocounter{Verb@LineCount}{-1}% decrease the line count
+ \fi%
+ \fi%
+ % debugging...
+ %\typeout{Start: \theVerb@LineStart, Count: \theVerb@LineCount,
+ % Print: \theVerb@PrintFlag, Loop: \theVerb@LineLoop,
+ % Mod: \theVerb@LineMod}%
+ \ifnum\theVerb@PrintFlag=1%
+ \leavevmode%
+ \ifnum\theVerb@LineLoop=\theVerb@LineMod%
+ \llap{{\Verb@sfLineNumFont\selectfont \theVerb@LineNo}%
+ \ \hskip\@totalleftmargin}%
+ \setcounter{Verb@LineLoop}{0}%
+ \else%
+ \llap{\phantom{\Verb@sfLineNumFont\selectfont 0}\ %
+ \hskip\@totalleftmargin}%
+ \fi%
+ \the\verbatim@line\par%
+ \else%
+ \ifnum\theVerb@LineLoop=\theVerb@LineMod%
+ \setcounter{Verb@LineLoop}{0}%
+ \fi%
+ \fi}%
+ \verbatiminput{#1}\endgroup}%
+%
+%%%% Macros to request verbatim subfiles
+\def\Verb@subfilePlain#1#2#3{%
+ \setcounter{Verb@LineMod}{-1}
+ \setcounter{Verb@LineStart}{#1}
+ \setcounter{Verb@LineCount}{#2}
+ \addtocounter{Verb@LineCount}{-\theVerb@LineStart}
+ \addtocounter{Verb@LineCount}{1}
+ \addtocounter{Verb@LineStart}{-1}
+ \Verb@subfile{#3}
+}
+
+\def\Verb@subfileNumbered[#1]#2#3#4{%
+ \setcounter{Verb@LineMod}{#1}
+ \setcounter{Verb@LineStart}{#2}
+ \setcounter{Verb@LineCount}{#3}
+ \addtocounter{Verb@LineCount}{-\theVerb@LineStart}
+ \addtocounter{Verb@LineCount}{1}
+ \addtocounter{Verb@LineStart}{-1}
+ \Verb@subfile{#4}
+}
+
+\def\VerbatimSubfile{\@ifnextchar[{\Verb@subfileNumbered}{\Verb@subfilePlain}}
+%
+%%%% EOF
diff --git a/macros/latex209/contrib/misc/vita.sty b/macros/latex209/contrib/misc/vita.sty
new file mode 100644
index 0000000000..69e899c870
--- /dev/null
+++ b/macros/latex209/contrib/misc/vita.sty
@@ -0,0 +1,131 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% kcb@hss.caltech.edu 9-90
+%% Vita style option along the lines of A Handbook for Scholars.
+%% Use with article style, e.g.: \documentstyle[vita,11pt]{article}
+%% SAMPLE USAGE:
+%%
+%% \documentstyle[vita]{article}
+%% \newcategory{Cookbooks and other nonacademic publications}
+%%
+%% \begin{document}
+%% \name{Woodrow Wilson}
+%% \businessadress{The White House\\Washington D.C.}
+%% \homeaddress{Also The White House\\Washington D.C.}
+%%
+%% \begin{vita}
+%% \begin{Degrees} \item B.S. etc. \item Ph.D. ... \end{Degrees}
+%% ...
+%% \begin{Publications} \item My First One
+%% \item My Last One
+%% \end{Publications}
+%% ...
+%% \begin{References}
+%% My Advisor \\ Big 10 U \and My Mother \\ Home
+%% \end{References}
+%%
+%% \end{vita}
+%% \end{document}
+%%%%%%%%%%%%%%%%%
+%%
+%% Predefined categories include (from a Handbook for Scholars, in order):
+%% Degrees, Additional education, Experience, Honors, Grants,
+%% Memberships, Personal information, References, Publications
+%% and (not from a Handbook for Scholars):
+%% Books, Articles, Reviews, Invited seminars, Professional activities
+%%
+%% Entries in each category are preceded by \item EXCEPT for
+%% references. References are inputted in a format similar to the
+%% \author command. In particular, multiple references are separated
+%% by the \and command.
+%%
+%% The \newcategory command allows you to create new categories. It
+%% takes a single argument, namely the heading for the category.
+%% Categories produced with the \newcategory command should have their
+%% entries preceded by \item.
+%%
+%% Note the use of uppercase letters in the arguments of \begin and
+%% \end for categories. Also note the \begin{vita} and \end{vita}
+%% commands which produce the heading, headers, date, etc.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Command to define new categories:
+\newcommand{\newcategory}[1]{\newenvironment{#1}
+ {\sectionheading{#1}\begin{description}}{\end{description}\par}}
+\newcommand{\sectionheading}[1]{\medskip\pagebreak[2]\par
+ {\small\bf #1}\nopagebreak}
+%%
+%% Category headings defined already: (in order of Handbook for Scholars)
+\newcategory{Degrees}
+\newcategory{Additional education}
+\newcategory{Experience}
+\newcategory{Honors}
+\newcategory{Grants}
+\newcategory{Memberships}
+\newcategory{Personal information}
+\newcategory{Publications}
+%
+% Other predefined categories not from Handbook for Scholars:
+\newcategory{Work in progress}
+\newcategory{Books}
+\newcategory{Articles}
+\newcategory{Reviews}
+\newcategory{Invited seminars}
+\newcategory{Professional activities}
+%%
+%%
+%% New commands
+\def\@name{}
+\def\@homeaddress{}
+\def\@businessaddress{Division of the Humanities and Social Sciences\\
+California Institute of Technology\\Pasadena, CA 91125}
+%
+\newcommand{\name}[1]{\renewcommand{\@name}{#1}}
+\newcommand{\businessaddress}[1]{\renewcommand{\@businessaddress}{#1}}
+\newcommand{\homeaddress}[1]{\renewcommand{\@homeaddress}{#1}}
+%
+% this formats the above information:
+\newenvironment{vita}{\thispagestyle{empty}
+\ifx\@name\@empty\@warning{Missing name command}\fi
+\markright{\protect\small\rm\@name}
+\vspace*{-\headsep}\vspace*{-\headheight}
+\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}ll@{}}
+\begin{tabular}[t]{@{}l@{}}
+\@name\\
+\@businessaddress
+\end{tabular}
+&
+\ifx\@homeaddress\@empty\@warning{Missing homeaddress}\else
+\begin{tabular}[t]{@{}l@{}}
+{\small home:}\\
+\@homeaddress
+\end{tabular}
+\fi
+\end{tabular*}
+\bigskip}{\par\nopagebreak\vfill\hfill \today}
+%
+%
+\newenvironment{References}{\sectionheading{References}\begin{description}
+ \item[]
+ \begin{tabular}[t]{l}}{\end{tabular}\end{description}\par}
+\renewcommand{\and}{\end{tabular}\item[]\begin{tabular}[t]{l}}
+%
+%
+\renewcommand{\today}{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi,
+ \space\number\year}
+%
+%
+%% Formatting parameters
+\raggedright\sloppy
+\pagestyle{myheadings}
+%
+\parindent 0pt
+\let\@listi\@listii
+\let\@listii\@listiii
+\@listi
+%
+\nofiles
+%%
+%%
diff --git a/macros/latex209/contrib/misc/voorbeeld.sty b/macros/latex209/contrib/misc/voorbeeld.sty
new file mode 100644
index 0000000000..76db699144
--- /dev/null
+++ b/macros/latex209/contrib/misc/voorbeeld.sty
@@ -0,0 +1,143 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Werenfried Spit",
+%%% version = "1.0.1",
+%%% date = "25 October 1993",
+%%% time = "17:00",
+%%% filename = "voorbeeld.sty",
+%%% address = "Departament de Fisica Teorica
+%%% Universitat de Valencia
+%%% c/ Moliner, 50
+%%% E-46100 Burjassot, Valencia
+%%% Espanya",
+%%% telephone = "+34-6-386 4550",
+%%% checksum = "03456 143 633 5962",
+%%% email = "spit@vm.ci.uv.es
+%%% spit@ific.uv.es",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, linguistic examples",
+%%% supported = "yes",
+%%% abstract = "In linguistics people use examples that have the
+%%% lay out of items in a list, but the logical
+%%% structure of mathematical equations: they have
+%%% numbers that are reset only at the beginnings of
+%%% sections or chapters and that can be referenced to.
+%%% Voorbeeld.sty (voorbeeld is dutch for example)
+%%% defines the environment `voorbeelden' for this
+%%% purpose.
+%%% Documentation at the end of this file.",
+%%% docstring = "The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+%%%%%%%%%%% voorbeeldomgeving %%%%%%%%
+%% (C) Werenfried Spit 08-01-90
+%%
+\newenvironment{voorbeelden}{\thevoorbeelden}{\endthevoorbeelden}
+\newcount\@vbdepth \@vbdepth = 0
+\@definecounter{vbcounti}
+\@definecounter{vbcountii}
+\@definecounter{vbcountiii}
+\@definecounter{vbcountiv}
+\@addtoreset{vbcounti}{section}
+
+
+\def\thevoorbeelden{\ifnum \@vbdepth >3 \@toodeep\else
+ \advance\@vbdepth \@ne
+ \edef\@vbctr{vbcount\romannumeral\the\@vbdepth}\list
+ {\csname label\@vbctr\endcsname}{\ifnum \@vbdepth >1 \usecounter
+ {\@vbctr}\else
+ \@nmbrlisttrue\def
+ \@listctr{vbcounti}\fi\def\makelabel##1{\hss\llap{##1}}}\fi}
+
+\let\endthevoorbeelden =\endlist
+
+\def\labelvbcounti{\bf\arabic{vbcounti}}
+\def\thevbcounti{\arabic{vbcounti}}
+\def\p@vbcountii{\thevbcounti}
+\def\labelvbcountii{\bf\alph{vbcountii}}
+\def\thevbcountii{\alph{vbcountii}}
+
+\def\labelvbcountiii{\roman{vbcountiii}}
+\def\thevbcountiii{\roman{vbcountiii}}
+\def\p@vbcountiii{\thevbcounti(\thevbcountii)}
+\def\labelvbcountiv{\alph{vbcountiv}}
+\def\thevbcountiv{\alph{vbcountiv}}
+\def\p@vbcountiv{\p@vbcountiii\thevbcountiii}
+
+
+\endinput
+%%%%%%% documentation and examples of usage %%%%%%%
+\documentstyle[voorbeeld,a4]{article}
+\begin{document}
+\begin{center}
+{\large\bf Voorbeeld.sty} \\[0.5\baselineskip]
+{\it Werenfried Spit} \\[\baselineskip]
+\end{center}
+
+In linguistical papers one often uses numbered examples. These examples
+look like lists of numbered items, but logically they behave more like
+displayed equations. It should be possible to generate automatic
+references to specific examples, and example counters are reset only
+at the beginning of a new chapter or section.
+This style defines an environment \verb|voorbeelden| that makes typesetting
+such examples easier.
+
+\paragraph{Usage}
+The usage is analogous to that \verb|enumerate|, only now it
+is possible to add labels:
+\begin{quote}
+\begin{voorbeelden}
+\item \begin{voorbeelden} \item Volgens Jan was-ie ziek. \label{Jan}
+ \item * Volgens Jan hij was ziek. \label{Jan*}
+ \end{voorbeelden}
+\end{voorbeelden}
+The starred example (\ref{Jan*}) is an ungrammatical sentence,
+just like (\ref{Eline}):
+\begin{voorbeelden}
+\item Osewoudt ontkende, dat hij Eline had zien lopen. \label{Osewoudt}
+\item * In Elines bed ze bracht heel wat zoete uurtjes door. \label{Eline}
+\end{voorbeelden}
+\end{quote}
+Which was produced by
+\begin{verbatim}
+\begin{voorbeelden}
+\item \begin{voorbeelden} \item Volgens Jan was-ie ziek. \label{Jan}
+ \item * Volgens Jan hij was ziek. \label{Jan*}
+ \end{voorbeelden}
+\end{voorbeelden}
+The starred example (\ref{Jan*}) is an ungrammatical sentence,
+just like (\ref{Eline}):
+\begin{voorbeelden}
+\item Osewoudt ontkende, dat hij Eline had zien lopen. \label{Osewoudt}
+\item * In Elines bed ze bracht heel wat zoete uurtjes door. \label{Eline}
+\end{voorbeelden}
+\end{verbatim}
+The counter for the top level numbering is reset every section, the
+counters for sublevel numberings are reset every item (like an
+\verb|enumerate|). You can have three sublevels nested.
+
+\paragraph{Tuning}
+The counter for the top level numbering is reset every section.
+Change in the style file the line
+\begin{verbatim}
+ \@addtoreset{vbcounti}{section}
+\end{verbatim}
+if you want the resetting to take place at another level.
+
+\paragraph{The name of the game}
+I first wrote this little style for use in a dutch linguistical
+thesis. `Voorbeeld' is the dutch word for example, so it seemed
+most logical to use that as a name. When it was distributed
+wider I chose to keep the name, since there already exists a style
+\verb|example.sty| (which defines an environment \verb|example|
+to show examples of \LaTeX\ usage). Feel free to change the
+name of the environment for your own {\em private} use, (as long
+as you don't also use \verb|example.sty| this should do no harm)
+but don't pass on a changed file.
+\end{document}
+%% end of file %%
diff --git a/macros/latex209/contrib/misc/voorbeelden.sty b/macros/latex209/contrib/misc/voorbeelden.sty
new file mode 100644
index 0000000000..8b59082b12
--- /dev/null
+++ b/macros/latex209/contrib/misc/voorbeelden.sty
@@ -0,0 +1,79 @@
+%>I have been using LaTeX for few months and I have problems with
+%>writing linguistics examples. I would like them to be numbered,
+%>labelled, and displayed as follow:
+
+%>(1) a. Bla, bla, bla...
+%> b. Bla, bla, bla...
+%> c. Bla, bla, bla...
+
+%I wrote the following for someone wanting the same sort of thing.
+%It is called `voorbeelden' (Dutch for examples), but the name
+%could be changed. Use it as
+
+%\begin{voorbeelden}
+%\item \begin{voorbeelden} \item Bla, bla, bla ...
+% \item Bla, bla, bla ...
+% \item Bla, bla, bla ...
+% \end{voorbeelden}
+%\item More bla bla
+%\end{voorbeelden}
+
+%--------------------------------------------------------------------
+%Werenfried Spit
+% R.J. v.d. Graafflaboratorium +31-(0)30-53-2330
+% Postbus 80.000
+% 3508 TA Utrecht spit@fys.ruu.nl
+% The Netherlands spit@hutruu51.bitnet
+%--------------------------------------------------------------------
+
+
+
+
+
+%%%%%%%%%cut here %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%% voorbeeldomgeving %%%%%%%%
+%% (C) Werenfried Spit 08-01-90
+%%
+
+
+
+
+\newenvironment{voorbeelden}{\thevoorbeelden}{\endthevoorbeelden}
+\newcount\@vbdepth \@vbdepth = 0
+\@definecounter{vbcounti}
+\@definecounter{vbcountii}
+\@definecounter{vbcountiii}
+\@definecounter{vbcountiv}
+\@addtoreset{vbcounti}{section}
+
+
+\def\thevoorbeelden{\ifnum \@vbdepth >3 \@toodeep\else
+ \advance\@vbdepth \@ne
+ \edef\@vbctr{vbcount\romannumeral\the\@vbdepth}\list
+ {\csname label\@vbctr\endcsname}{\ifnum \@vbdepth >1 \usecounter
+ {\@vbctr}\else
+ \@nmbrlisttrue\def
+ \@listctr{vbcounti}\fi\def\makelabel##1{\hss\llap{##1}}}\fi}
+
+\let\endthevoorbeelden =\endlist
+
+\def\labelvbcounti{\bf\arabic{vbcounti}}
+\def\thevbcounti{\arabic{vbcounti}}
+\def\p@vbcountii{\thevbcounti}
+\def\labelvbcountii{\bf\alph{vbcountii}}
+\def\thevbcountii{\alph{vbcountii}}
+
+\def\labelvbcountiii{\roman{vbcountiii}}
+\def\thevbcountiii{\roman{vbcountiii}}
+\def\p@vbcountiii{\thevbcounti(\thevbcountii)}
+\def\labelvbcountiv{\alph{vbcountiv}}
+\def\thevbcountiv{\alph{vbcountiv}}
+\def\p@vbcountiv{\p@vbcountiii\thevbcountiii}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%cut here %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/misc/warn.sty b/macros/latex209/contrib/misc/warn.sty
new file mode 100644
index 0000000000..54be168431
--- /dev/null
+++ b/macros/latex209/contrib/misc/warn.sty
@@ -0,0 +1,18 @@
+% Written by Kresten Krab Thorup <krab@iesd.auc.dk>
+
+%Here's a little hack, that allow you to get the linenumbers of LaTeX's
+%warning messages.
+
+%The output is like:
+%
+% LaTeX Warning [l.86]: Citation `diggle' on page 91 undefined.
+
+%where [l.86] refers to line 86 in the current file.
+%
+%You should put the following in a style file:
+
+%----------------------------------------------------------------------
+% warn.sty
+%
+\def\@warning#1{\typeout{LaTeX Warning [l.\the\inputlineno]: #1.}}
+%----------------------------------------------------------------------
diff --git a/macros/latex209/contrib/misc/wasy.sty b/macros/latex209/contrib/misc/wasy.sty
new file mode 100644
index 0000000000..df3e44fff9
--- /dev/null
+++ b/macros/latex209/contrib/misc/wasy.sty
@@ -0,0 +1,244 @@
+%% wasy.sty v 1.1 von J"org Knappen 28. 11. 1992
+%% (c) J"org Knappen 1992 knappen@vkpmzd.kph.uni-mainz.de
+%% Copying conditions: GNU licence v1.0
+%% The WASY fonts are loaded and a lot of control sequences are
+%% defined
+%% \wasy acts as a font switch, switching its argument to wasy
+
+\@ifundefined{extract@font}
+ {\errmessage{The style option `wasy' does not make sense if you
+ do not use a format with the new font selection scheme.}
+ \endinput}
+ {}
+
+ \def\RIfM@{\relax\protect\ifmmode}
+ \let\boxz@\fi % \if \fi matching hack
+ \def\boxz@{\box\z@}
+ \def\setboxz@h{\setbox\z@\hbox}
+ \def\wdz@{\wd\z@}
+ \def\noaccents@{\def\accentclass@{0}}
+ \def\Invalid@@{Invalid use of \string}
+ \def\nonmatherr@#1{\err@
+ {\string#1\space allowed only in math mode}\@ehd}
+ \def\err@{\@latexerr}
+
+\newmathalphabet\wasy@
+\addtoversion{normal}\wasy@{wasy}{m}{n}
+\addtoversion{bold}\wasy@{wasy}{b}{n}
+\new@mathgroup\wasy@group
+\define@mathgroup\mv@normal\wasy@group{wasy}{m}{n}
+\define@mathgroup\mv@bold\wasy@group{wasy}{b}{n}
+% Precautions for national styles changing the \catcode of "
+\chardef\dq@code=\catcode`\"
+\catcode`\"=12
+\edef\@wasy{\hexnumber@\wasy@group}
+\def\pwasy{\RIfM@\expandafter\wasy@\else
+ \expandafter\nonmatherr@\expandafter\wasy\fi}
+\def\wasy{\protect\pwasy}
+\new@fontshape{wasy}{m}{n}{%
+ <5>wasy5%
+ <6>wasy6%
+ <7>wasy7%
+ <8>wasy8%
+ <9>wasy9%
+ <10>wasy10%
+ <11>wasy11% This one was computed with the help of the Sauter tools
+% <11>wasy10 at10.95pt% alternative, change the position of the % sign to
+% choose this
+ <12>wasy12%
+ <14>wasy14% Ditto, design_size:=14.4;
+% <14>wasy12 at14.4pt% alternative
+ <17>wasy17%
+% <20>wasy17 at19.71pt%
+ <20>wasy20%
+% <25>wasy17 at24.48pt%
+ <25>wasy25%
+ }{}
+\new@fontshape{wasy}{b}{n}{%
+ <5>wasyb5%
+ <6>wasyb6%
+ <7>wasyb7%
+ <8>wasyb8%
+ <9>wasyb9%
+ <10>wasyb10%
+ <11>wasyb11% This one was computed with the help of the Sauter tools
+% <11>wasyb10 at10.95pt% alternative, change the position of the % sign to
+% choose this
+ <12>wasyb12%
+ <14>wasyb14% Ditto, design_size:=14.4;
+% <14>wasyb12 at14.4pt% alternative
+ <17>wasyb17%
+% <20>wasyb17 at19.71pt%
+ <20>wasyb20%
+% <25>wasyb17 at24.48pt%
+ <25>wasyb25%
+ }{}
+\extra@def{wasy}{}{\noaccents@}
+% The following was extracted from:
+% this is wasyfont.tex version 2.01--92/10
+% Overall changes: Introduced \mathhexbox
+% Changes made due to the nature of the wasy font as a math font
+% Introduced $-signs etc.
+%%%%%% special macro
+\def\overstrike#1#2{{\setbox0\hbox{$#2$}\hbox to \wd0{\hss
+ $#1$\hss}\kern-\wd0\box0}}
+%%%%%% special symbols
+\edef\male{\mathhexbox\@wasy1A}
+\edef\female{\mathhexbox\@wasy19}
+\edef\currency{\mathhexbox\@wasy1B}
+\edef\phone{\mathhexbox\@wasy07}
+\edef\recorder{\mathhexbox\@wasy06}
+\edef\clock{\mathhexbox\@wasy1C}
+\edef\lightning{\mathhexbox\@wasy12}
+\edef\pointer{\mathhexbox\@wasy09}
+\edef\RIGHTarrow{\mathhexbox\@wasy11}
+\edef\LEFTarrow{\mathhexbox\@wasy10}
+\edef\UParrow{\mathhexbox\@wasy4B}
+\edef\DOWNarrow{\mathhexbox\@wasy4C}
+\def\AC{\hbox{\kern0.5pt$\wasy{\photonchar}$\kern0.5pt}}
+\def\HF{\lower0.9pt\hbox to 0pt{\kern0.5pt$\wasy{\photonchar}$\hss}%
+ \raise0.9pt\hbox{\kern0.5pt$\wasy{\photonchar}$\kern0.5pt}}
+
+\edef\VHF{\mathhexbox\@wasy40}
+\edef\Box{\mathhexbox\@wasy32}\let\Square\Box
+\edef\XBox{\mathhexbox\@wasy34}
+\edef\Diamond{\mathhexbox\@wasy33}
+\edef\hexagon{\mathhexbox\@wasy37}
+\edef\pentagon{\mathhexbox\@wasy44}
+\edef\octagon{\mathhexbox\@wasy38}
+\edef\varhexagon{\mathhexbox\@wasy39}
+\edef\hexstar{\mathhexbox\@wasy41}
+\edef\varhexstar{\mathhexbox\@wasy42}
+\edef\davidsstar{\mathhexbox\@wasy43}
+\edef\diameter{\mathhexbox\@wasy1F}
+\edef\invdiameter{\mathhexbox\@wasy15}
+\edef\varangle{\mathhexbox\@wasy1E}
+\edef\lozenge{\mathhexbox\@wasy35}
+\edef\kreuz{\mathhexbox\@wasy36}
+\edef\smiley{\mathhexbox\@wasy2C}
+\edef\frownie{\mathhexbox\@wasy2F}
+\edef\blacksmiley{\mathhexbox\@wasy2D}
+\edef\sun{\mathhexbox\@wasy2E}
+\edef\checked{\mathhexbox\@wasy08}
+\edef\bell{\mathhexbox\@wasy0A}
+\edef\eighthnote{\mathhexbox\@wasy0B}
+\edef\quarternote{\mathhexbox\@wasy0C}
+\edef\halfnote{\mathhexbox\@wasy0D}
+\edef\fullnote{\mathhexbox\@wasy0E}
+\edef\twonotes{\mathhexbox\@wasy0F}
+\edef\brokenvert{\mathhexbox\@wasy7C}
+\edef\therefore{\mathhexbox\@wasy05}
+\edef\ataribox{\mathhexbox\@wasy6D}
+\edef\Circle{\mathhexbox\@wasy23}
+\edef\CIRCLE{\mathhexbox\@wasy20}
+\edef\Leftcircle{\mathhexbox\@wasy49}
+\edef\LEFTCIRCLE{\mathhexbox\@wasy47}
+\edef\Rightcircle{\mathhexbox\@wasy4A}
+\edef\RIGHTCIRCLE{\mathhexbox\@wasy48}
+\edef\LEFTcircle{\hbox to 0pt{\LEFTCIRCLE\hss}\hbox{\Circle}}
+\edef\RIGHTcircle{\hbox to 0pt{\RIGHTCIRCLE\hss}\hbox{\Circle}}
+%%%%%% astronomy
+
+\edef\vernal{\mathhexbox\@wasy17}
+\edef\ascnode{\mathhexbox\@wasy13}
+\edef\descnode{\mathhexbox\@wasy14}
+\edef\fullmoon{\mathhexbox\@wasy23}
+\edef\newmoon{\mathhexbox\@wasy20}
+\edef\leftmoon{\mathhexbox\@wasy24}
+\edef\rightmoon{\mathhexbox\@wasy25}
+\edef\astrosun{\hbox{$\odot$}}
+\edef\mercury{\mathhexbox\@wasy27}
+\edef\venus{\raise0.2ex\hbox{\female}}
+\edef\earth{\lower0.3ex\hbox{\mathhexbox\@wasy26}}
+\edef\mars{\lower0.2ex\hbox{\male}}
+\edef\jupiter{\mathhexbox\@wasy58}
+\edef\saturn{\mathhexbox\@wasy59}
+\edef\uranus{\mathhexbox\@wasy5A}
+\edef\neptune{\mathhexbox\@wasy5B}
+\edef\pluto{\mathhexbox\@wasy5C}
+\edef\conjunction{\mathhexbox\@wasy56}
+\edef\opposition{\mathhexbox\@wasy57}
+%%%%%% the zodiac
+\edef\aries{\mathhexbox\@wasy17}
+\edef\taurus{\mathhexbox\@wasy5D}
+\edef\gemini{\mathhexbox\@wasy5E}
+\edef\cancer{\mathhexbox\@wasy5F}
+\edef\leo{\mathhexbox\@wasy13}
+\edef\virgo{\mathhexbox\@wasy60}
+\edef\libra{\mathhexbox\@wasy61}
+\edef\scorpio{\mathhexbox\@wasy62}
+\edef\sagittarius{\mathhexbox\@wasy63}
+\edef\capricornus{\mathhexbox\@wasy64}
+\edef\aquarius{\mathhexbox\@wasy65}
+\edef\pisces{\mathhexbox\@wasy66}
+%%%%%% APL characters
+\edef\APLstar{\mathhexbox\@wasy45}
+\edef\APLlog{\mathhexbox\@wasy16}
+\edef\APLbox{\mathhexbox\@wasy7E}
+\edef\APLup{\mathhexbox\@wasy00}
+\edef\APLdown{\mathhexbox\@wasy46}
+\edef\APLinput{\mathhexbox\@wasy7D}
+\edef\APLcomment{\mathhexbox\@wasy7F}
+\edef\APLinv{\hbox to 0pt{$\div$\hss}\APLbox}
+\edef\APLuparrowbox{\mathhexbox\@wasy6E}
+\edef\APLdownarrowbox{\mathhexbox\@wasy6F}
+\edef\APLleftarrowbox{\mathhexbox\@wasy70}
+\def\APLrightarrowbox{\mathhexbox\@wasy71}
+\def\notbackslash{\overstrike{\backslash}{-}}
+\def\notslash{\overstrike{/}{-}}
+\def\APLnot#1{\overstrike{\sim}{#1}}
+\def\APLcirc#1{\overstrike{\circ}{#1}}
+\def\APLvert#1{\overstrike{\vert}{#1}}
+\def\APLminus{\raise0.7ex\hbox{$-$}}
+%%%%%% diagrams
+\edef\photonchar{\mathhexbox\@wasy3A}
+\def\photon{\hbox{$\wasy{\photonchar\photonchar\photonchar\photonchar}$}}
+\def\gluon{\hbox{$\wasy{\char"51\char"50\char"50\char"50%
+ \char"50\char"50\char"50\char"52}$}}
+%%%%%% math characters
+\edef\Bowtie{\mathhexbox\@wasy31}
+\edef\leftturn{\mathhexbox\@wasy22}
+\edef\rightturn{\mathhexbox\@wasy21}
+%%%%%% special characters
+\edef\cent{\mathhexbox\@wasy67}
+\edef\permil{\mathhexbox\@wasy68}
+\edef\agemO{\mathhexbox\@wasy30}
+\edef\thorn{\mathhexbox\@wasy69}
+\edef\Thorn{\mathhexbox\@wasy6A}
+\edef\dh{\mathhexbox\@wasy6B}
+\def\Dh{\leavevmode{\setbox0\hbox{D}%
+ \hbox to\wd0{\kern 0.04em\char32\hss D}}}
+\edef\openo{\mathhexbox\@wasy6C}
+\edef\inve{\mathhexbox\@wasy55}
+%%%%%% math operators as mathchars
+\def\invmathchardef#1#2{\mathchardef#2"#1}
+\invmathchardef{3\@wasy01}{\lhd}
+\invmathchardef{3\@wasy03}{\rhd}
+\invmathchardef{3\@wasy10}{\LHD}
+\invmathchardef{3\@wasy11}{\RHD}
+\invmathchardef{3\@wasy02}{\unlhd}
+\invmathchardef{3\@wasy04}{\unrhd}
+\invmathchardef{3\@wasy3C}{\sqsubset}
+\invmathchardef{3\@wasy3D}{\sqsupset}
+\invmathchardef{3\@wasy3E}{\apprle}
+\invmathchardef{3\@wasy3F}{\apprge}
+\invmathchardef{3\@wasy1D}{\varpropto}
+\invmathchardef{0\@wasy18}{\invneg}
+\invmathchardef{3\@wasy3B}{\leadsto}
+\invmathchardef{2\@wasy23}{\ocircle}
+\invmathchardef{3\@wasy16}{\logof}
+\invmathchardef{1\@wasy72}{\varint}
+\invmathchardef{1\@wasy73}{\iint}
+\invmathchardef{1\@wasy74}{\iiint}
+\invmathchardef{1\@wasy75}{\varoint}
+\invmathchardef{1\@wasy76}{\oiint}
+%
+%%%%%% new definitions
+%
+\def\newpropto{\let\propto\varpropto}
+\def\newint{\let\int\varint \let\oint\varoint} % default limits
+
+% Save LaTeX \mho
+\let\mho\amegO
+\catcode`\"=\dq@code
+\endinput
diff --git a/macros/latex209/contrib/misc/windlet.doc b/macros/latex209/contrib/misc/windlet.doc
new file mode 100644
index 0000000000..dc77cd1ddd
--- /dev/null
+++ b/macros/latex209/contrib/misc/windlet.doc
@@ -0,0 +1,184 @@
+\iffalse
+% This is windlet.doc. Print it using doc.sty and an appropriate
+% driver file.
+% Copyright D.Love, SERC Daresbury Laboratory, 1990
+% Distributable and usuable under conditions of the GNU copyleft, but
+% please mark any changes and list them here.
+\fi
+\def\filedate{26/7/90}
+\def\fileversion{1.1}
+% \title{A {\sf letter} Sub-style for Use with Window
+% Envelopes\footnote{File version \fileversion, dated \filedate.}}
+% \author{David Love\\[1ex]{\it SERC Daresbury
+% Laboratory, Warrington WA4 4AD, UK}\\[1ex]
+% ({\tt d.love@daresbury.ac.uk})}
+% \date{}
+%
+% \maketitle
+%
+% \begin{abstract}
+% \noindent This is a sub-style for use with {\sf letter} that can be
+% used with certain types of envelope with windows so that the address
+% will show through the window.
+% \end{abstract}
+%
+% \noindent
+% It is convenient, rather than use a sticky address label for a one-
+% or few-off letter, to use envelopes with transparent windows. We
+% then need to make sure that the {\sf letter} style is suitably
+% altered so print the \verb+\toaddress+ in the correct place for this
+% window. Of course, the values of the positioning will depend on the
+% stationery you use. This version is intended for use with A4 paper
+% i.e., using {\tt a4.sty},
+% and $8.62''\times3.34''$ envelopes as used in my establishment, at
+% least. This will probably be
+% suitable also for other European countries. If not, the dimensions
+% should be readily changeable for your stationery, according to the
+% following diagrams.
+% \par \medskip
+% \setlength{\unitlength}{6mm}
+% \begin{picture}(8.25,6.69)(0,5)
+% \put(0,5){\line(0,1){6.69}} \put(0,11.69){\line(1,0){8.25}}
+% \put(8.25,11.69){\line(0,-1){6.69}}
+% \put(.85,10.2){\vector(-1,0){.85}}\put(0,10.2){\vector(1,0){.85}}
+% \put(.2,10.5){\tt\small $\backslash$lettersideskip}
+% \put(.85,8.4){\framebox(3.35,1.5){\parbox{3\unitlength}{\raggedright
+% \tt\small $\backslash$toaddress region}}}
+% \put(4.0,9.9){\vector(0,1){1.79}}\put(4.0,11.69){\vector(0,-1){1.79}}
+% \put(4.0,10.7){\tt\small ~$\backslash$lettertopskip}
+% \put(.5,7.75){\vector(-1,0){.5}} \put(.5,7.75){~first fold}
+% \put(4.0,7.75){\vector(0,1){.65}}\put(4.0,8.4){\vector(0,-1){.65}}
+% \put(4.0,7.75){\tt\small ~$\backslash$letterfoldskip}
+% \put(4.4,8.4){\vector(0,1){1.5}} \put(4.4,9.9){\vector(0,-1){1.5}}
+% \put(4.4,9){~\tt\small $\backslash$letteraddressheight}
+% \put(3,6){{\large letter}}
+% \end{picture}
+% \hfill
+% \begin{picture}(8.6,4.35)(0,0)
+% \put(0,0){\framebox(8.6,4.35){}}
+% \put(.65,.85){\framebox(3.65,1.55){window}}
+% \put(4.5,.85){\vector(0,1){1.55}} \put(4.5,2.4){\vector(0,-1){1.55}}
+% \put(4.5,1.3){~$1.55''$}
+% \put(.65,.9){\vector(-1,0){.65}}\put(0,.9){\vector(1,0){.65}}
+% \put(.3,.2){$0.65''$}
+% \put(.65,4.35){\vector(0,-1){1.9}}\put(.65,2.45){\vector(0,1){1.9}}
+% \put(.65,3.2){~$1.9''$}
+% \put(5,3.5){{\large envelope}}
+% \end{picture}
+% \par\medskip
+% Here are the default values of the lengths,
+% \DescribeMacro{\lettertopskip}\DescribeMacro{\lettersidepskip}%
+% \DescribeMacro{\letteraddressheight}\DescribeMacro{\letterfoldskip}%
+% appropriate for my stationery.
+% \begin{macrocode}
+\newlength{\lettertopskip} \setlength{\lettertopskip}{1.8in}
+\newlength{\lettersideskip} \setlength{\lettersideskip}{0.8in}
+\newlength{\letteraddressheight}
+\setlength{\letteraddressheight}{1.5in}
+\newlength{\letterfoldskip} \setlength{\letterfoldskip}{0.65in}
+% \end{macrocode}
+%
+% We only need major surgery on \verb+\opening+,\DescribeMacro{\opening}
+% which positions the
+% addresses. The difficulty is positioning boxes in the right
+% absolute place on the paper.
+% \begin{macrocode}
+\def\opening#1{
+% \end{macrocode}
+% The {\sf firstpage} style is defined below.
+% \begin{macrocode}
+ \thispagestyle{firstpage}
+% \end{macrocode}
+% To get to the bottom of the address area, we have to move down by
+% \verb+\lettertopskip+ from the top of the paper. However, we have
+% to take into account the conventional $1''$ border,
+% \verb+\topmargin+, \verb+\headheight+, \verb+\headsep+ and
+% \verb+\baselineskip+ in doing so.
+% \begin{macrocode}
+ \vspace*{\lettertopskip}
+ \vspace*{-\topmargin} \vspace*{-\headheight} \vspace*{-\headsep}
+ \vspace*{-1in} \vspace*{-\baselineskip}
+% \end{macrocode}
+% Now that we're in the right place vertically, we're ready to typeset
+% the addressee details.
+% To get to the left-hand side of the address area, we have to
+% subtract the $1''$ and \verb+\oddsidemargin+ from
+% \verb+lettersideskip+, which will probably mean the address sticks
+% into the margin. The addressee's and sender's addresses go in boxes
+% at the left and right of the page, aligned at their top. This is
+% not the same as in the original, where the sender's address pushed
+% the addressee'd down the page. This all goes into an \verb+\hbox+
+% positioned appropriately relative to the left margin. Since the
+% window is bigger than the address area, we don't need to add extra
+% space around it.
+% \begin{macrocode}
+ \hbox{%
+ \hspace*{\lettersideskip}\hspace*{-\oddsidemargin}\hspace*{-1in}%
+% \end{macrocode}
+% The first thing we do, though, is to put a mark at the left to tell
+% us where to fold the paper. This may get lost, depending on how
+% close to the edge of the paper the printer can go, so might need
+% adjusting for your circumstances. The size of the rule is rather
+% arbitrary.
+% \begin{macrocode}
+ \vbox to 0pt{\vspace*{\letterfoldskip}\hbox to 0pt{%
+ \hspace*{-\lettersideskip}%
+ \hspace*{.2in}% to get to imageable area
+ \rule{.2in}{.2pt}\hss}\vss
+ }%
+% \end{macrocode}
+% Unlike the original, we check for a possible
+% empty argument to \verb+\begin{letter}+, which would cause an
+% error (although there's not much point in using this sub-style if
+% you don't have the address in there!). We add \verb+\vfill+ to
+% centre the address in the window vertically. (It had better not be
+% too long.)
+% \begin{macrocode}
+ \ifx\@empty\toaddress
+ \vbox to \letteraddressheight {\vfill \raggedright \toname \vfill}
+ \else
+ \vbox to \letteraddressheight
+ {\vfill \raggedright \toname \\ \toaddress \vfill}
+ \fi
+% \end{macrocode}
+% The sender's address is set the same way as in the original, but in
+% a different place.
+% \begin{macrocode}
+ \ifx\@empty\fromaddress
+ \relax
+ \else
+ \vbox to \letteraddressheight {
+ \vfill
+ \begin{tabular}[b]{l}
+ \ignorespaces\fromaddress
+ \end{tabular}
+ \vfill
+ }
+ \fi
+ } % (hbox)
+% \end{macrocode}
+% The date always comes out in the same place.
+% \begin{macrocode}
+ \par \smallskip
+ {\raggedleft \@date \par}
+ \bigskip #1 \par \nobreak
+} % (\def\opening)
+% \end{macrocode}
+% The original value of \verb+\@texttop+\DescribeMacro{\@texttop}
+% included \verb+fil+ to centre
+% a short letter on the page; we don't want this.
+% \begin{macrocode}
+\let\@texttop=\relax
+% \end{macrocode}
+%
+% The \verb+\pagestyle+\DescribeEnv{firstpage}
+% for the first page may be chosen appropriately
+% for your institution. This is done by defining \verb+\ps@headings+
+% appropriately. {\tt letter.sty} does this to put the telephone
+% number in the right place for the SRI letterhead, which isn't much
+% use for most of us. In the absence of a better idea, we'll make the
+% style {\sf empty}. If you want special action for this, you'll
+% have to change this definition or include it in a later sub-style.
+% \begin{macrocode}
+\let\ps@firstpage=\ps@empty
+% \end{macrocode}
diff --git a/macros/latex209/contrib/misc/xrefwarn.sty b/macros/latex209/contrib/misc/xrefwarn.sty
new file mode 100644
index 0000000000..37df6b5df3
--- /dev/null
+++ b/macros/latex209/contrib/misc/xrefwarn.sty
@@ -0,0 +1,50 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Nico Verwer",
+%%% version = "1.2",
+%%% date = "24 February 1992",
+%%% filename = "xrefwarn.sty",
+%%% address = "Dept. of Computer Science
+%%% Rijksuniversiteit te Utrecht
+%%% P.O. box 80.089
+%%% 3508 TB Utrecht
+%%% the Netherlands",
+%%% telephone = "+31 30 533921",
+%%% FAX = "+31 30 513791",
+%%% email = "nico@cs.ruu.nl (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, x-ref warnings",
+%%% supported = "yes",
+%%% docstring = "Normally, LaTeX issues a warning every
+%%% time it encounters an undefined cross-
+%%% reference or citation. Thus you will get
+%%% many identical warnings. The effect of
+%%% this style file is that only one warning
+%%% is issued for every cross-reference or
+%%% citation.",
+%%% }
+%%% ====================================================================
+
+\ifx\xrefwarnLoaded\undefined\else\endinput\fi
+\let\xrefwarnLoaded\empty
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+ {b@\@citeb}{{\bf #2}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}
+ \global\@namedef{b@\@citeb}{{\bf ?}}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
+
+\def\ref#1{\@ifundefined{r@#1}{{\bf {#1}?}
+ \@ifundefined{rr@#1}{\global\@namedef{rr@#1}{}\@warning
+ {Reference `#1' on page \thepage \space
+ undefined}}{}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
+ \@car\@tempa \@nil\null}}
+
+\def\pageref#1{\@ifundefined{r@#1}{{\bf {#1}?}
+ \@ifundefined{rr@#1}{\global\@namedef{rr@#1}{}\@warning
+ {Reference `#1' on page \thepage \space
+ undefined}}{}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
+ \@cdr\@tempa\@nil\null}}
+
diff --git a/macros/latex209/contrib/misc/xxxcustom.tex b/macros/latex209/contrib/misc/xxxcustom.tex
new file mode 100644
index 0000000000..7fde01e36d
--- /dev/null
+++ b/macros/latex209/contrib/misc/xxxcustom.tex
@@ -0,0 +1,95 @@
+% LaTeX customization for XXX
+
+
+\makeatletter
+
+\typeout{LaTeX customization 'XXXcustom'. Version 1.00 - released 17 June 1985
+}
+
+
+% plain TeX compatibility
+
+\def\oldstyle{\xdef\@oldstyle{\the\textfont\@ne}\mit\@oldstyle}
+
+
+% Compatibility with XXX-TeX
+
+\def\smaller{\footnotesize} % smaller than small
+
+\let\nfootnote=\footnote
+
+\let\tell=\typeout
+
+\def\implies{\quad\supset\ }
+
+\def\tdots{\ldots\thinspace}
+
+\let\bop=\newpage
+
+\def\hbreak{\hfil\break}
+
+\def\lp{\par\noindent}
+
+\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}
+
+\def\boxit#1{\fbox{\sc#1}}
+
+
+% Draft Stuff
+
+\newif\ifdraft \draftfalse
+
+\def\draftstring{{\ifdraft \tt Draft\fi}}
+
+\def\ds@DScustom{\ifdraft \@ifundefined{ds@draft}{}{\ds@draft}\fi}
+
+
+% Extras
+
+\newdimen\extra@wid \extra@wid=\z@
+
+\def\extra#1#2{%
+ \setbox\z@=\hbox{#2:\quad}
+ \ifnum\extra@wid<\wd\z@ \extra@wid=\wd\z@\fi
+ \def#1##1{%
+ \nobreak
+ \extra@skip
+ \vbox{%
+ \def\@filler{#2:\hfil\global\let\@filler=\empty}%
+ \let\\=\cr
+ \tabskip=\z@
+ \halign{%
+ \hbox to\extra@wid{\@filler}\ignorespaces####\unskip\hfil\cr
+ ##1\cr
+ }%
+ }%
+ \nobreak
+ }%
+}
+
+\def\extra@skip{%
+ \vskip 2\baselineskip
+ \def\extra@skip{\vskip .15in}%
+}
+
+
+% Miscellany
+
+\def\bigquote#1\endbigquote{%
+ \begin{quote}
+ \noindent\llap{``}\ignorespaces#1\unskip''
+ \end{quote}
+}
+
+
+
+% Double Spacing Macro
+
+\def\doublespace{
+ \baselineskip=2\baselinestretch pt
+}
+
+\def\XXXAA{\leavevmode\setbox0\hbox{h}\dimen@\ht0\advance\dimen@-1ex%
+ \rlap{\kern+.45ex\raise.67\dimen@\hbox{\char'27}}A}
+
+\makeatother
diff --git a/macros/latex209/contrib/misc/xxxslides.sty b/macros/latex209/contrib/misc/xxxslides.sty
new file mode 100644
index 0000000000..0dfb7813f1
--- /dev/null
+++ b/macros/latex209/contrib/misc/xxxslides.sty
@@ -0,0 +1,361 @@
+% SLiTeX super-customization for the SLIDES style
+% Instead of
+%
+% \documentstyle[XXXslides]{slides}
+%
+% the correct usage is
+%
+% \documentstyle{XXXslides}
+%
+% which will automatically include slides.sty
+
+\typeout{Document Style 'XXXslides' -- version 1.04, released 28 August 1986}
+
+\@ifundefined{oldstyle}{\input XXXcustom\relax \makeatletter}{}
+\let\@@options=\@options \let\@options=\relax
+\input slides.sty
+\makeatletter % backwards compatibility
+\let\@options=\@@options
+
+
+% Document style options:
+% blackandwhite - don't use a secondary file
+% draft - generate black-boxes when boxes are overfull (NI)
+% landscape - 11 x 8-1/2
+% xxxx - use ``Research and Technology Center'' in logo
+% oval - put an oval around title information
+% pagenumbers - generate page numbers in left-hand corner of footer
+% plain - no logo in footer
+% portrait - 8-1/2 x 11
+% proprietary - use ``PROPRIETARY'' in head/foot
+% small - make the slides a bit smaller than standard SLiTeX
+
+\def\ds@blackandwhite{%
+ \let\@document=\document
+ \def\document{%
+ \@document
+ \blackandwhite{null}
+ \@makingslidestrue
+ }%
+ \let\@enddocument=\enddocument
+ \def\enddocument{\@makingslidesfalse\@enddocument}%
+}
+
+\def\ds@draft{%
+ \overfullrule=5\p@
+ \def\XXX@corner{+}%
+}
+\let\XXX@corner=\empty
+
+\newif\if@landscape \@landscapefalse
+\def\ds@landscape{%
+ \@landscapetrue
+ \textwidth=615\p@ \textheight=470\p@
+ \columnwidth=\textwidth
+}
+\def\ds@portrait{%
+ \@landscapefalse
+ \textwidth=470\p@ \textheight=615\p@
+ \columnwidth=\textwidth
+}
+
+\newif\if@xxxx \@xxxxfalse
+\let\ds@xxxx=\@xxxxtrue
+
+\newif\if@ovaltitle \@ovaltitlefalse
+\let\ds@oval=\@ovaltitletrue
+
+\newif\if@pagenumbers \@pagenumbersfalse
+\let\ds@pagenumbers=\@pagenumberstrue
+
+%%% \def\XXX@logo{%
+%%% \vtop{%
+%%% \halign{\hfil##\hfil\cr
+%%% \headfont NORTHROP\cr
+%%% \if@xxxx \hbox{\lowfont\kern-1.2em\raise.6em
+%%% \hbox{Research and Technology Center}}\cr\fi
+%%% }%
+%%% }%
+%%% }
+\let\XXX@logo=\empty
+\let\XXX@titlelogo=\XXX@logo
+\def\ds@plain{\def\XXX@logo{\XXX@corner}\let\XXX@titlelogo=\empty}
+
+\def\ds@proprietary{%
+ \def\XXX@prop{{\small\bf PROPRIETARY}\hfil}%
+}
+\let\XXX@prop=\empty
+
+\def\ds@small{%
+ \let\Huge=\huge
+ \let\huge=\LARGE
+ \let\LARGE=\Large
+ \let\Large=\large
+ \let\large=\normalsize
+ \let\normalsize=\small
+ \let\small=\tiny
+ \let\footnotesize=\small
+ \let\scriptsize=\small
+
+ \normalsize
+
+ \let\ds@small=\empty
+}
+
+\@namedef{ds@10pt}{\@latexerr{No '10pt' layout for slides}\eha}
+\@namedef{ds@11pt}{\@latexerr{No '11pt' layout for slides}\eha}
+\@namedef{ds@12pt}{\@latexerr{No '12pt' layout for slides}\eha}
+\def\ds@openbib{\@latexerr{No 'openbib' layout for slides}\@eha}
+\def\ds@titlepage{\@latexerr{No 'titlepage' layout for slides}\@eha}
+\def\ds@twocolumn{\@latexerr{No 'twocolumn' layout for slides}\@eha}
+\def\ds@twoside{\@latexerr{No 'twoside' layout for slides}\@eha}
+
+\@options
+
+
+% Parameters different than SLiTeX
+
+%%% \font\headfont=northrop20
+%%% \font\lowfont=bookx9
+%%% \font\notesfont=bookx12
+\def\notesfont{\scriptsize\rm}
+
+% Page Style
+
+\setbox\z@=\hbox{\@mainsize\XXX@logo}
+\ifdim \ht\z@>\footheight
+ \advance\textheight by-\footheight
+ \footheight=\ht\z@
+ \advance\textheight by\footheight
+ \footskip=\footheight \advance\footskip by11\p@
+\fi
+
+\def\ps@XXXslides{%
+ \def\ps@slide{%
+ \def\@oddfoot{%
+ \@mainsize\null
+ \if@pagenumbers \hbox to3em{\theslide\hss}\fi
+ \XXX@notes\hfil\hspace{2in}\XXX@prop\XXX@logo
+ }%
+ \def\@oddhead{\@mainsize\null \XXX@corner\hfil \XXX@prop\XXX@corner}%
+ \let\@evenfoot=\@oddfoot
+ \let\@evenhead=\@oddhead
+ }%
+ \def\ps@overlay{%
+ \def\@oddfoot{%
+ \@mainsize\null
+ \if@pagenumbers \hbox to 3em{\theoverlay\hss}\fi
+ \hfil\XXX@corner
+ }%
+ \def\@oddhead{\@mainsize\null \XXX@corner\hfil \XXX@corner}%
+ \let\@evenfoot=\@oddfoot
+ \let\@evenhead=\@oddhead
+ }%
+ \def\ps@note{%
+ \def\@oddfoot{\@mainsize\null \hfil\thenote}%
+ \let\@oddhead=\empty
+ \let\@evenfoot=\@oddfoot
+ \let\@evenhead=\@oddhead
+ }%
+}
+
+\def\ps@title{%
+ \def\ps@slide{%
+ \def\@oddfoot{\@mainsize\null
+ \XXX@notes\hfil\hspace{2in}\XXX@prop\XXX@titlelogo}%
+ \def\@oddhead{\@mainsize\null \hfil\XXX@prop}%
+ \let\@evenfoot=\@oddfoot
+ \let\@evenhead=\@oddhead
+ }%
+ \def\ps@overlay{%
+ \let\@oddfoot=\empty
+ \let\@oddhead=\empty
+ \let\@evenfoot=\@oddfoot
+ \let\@evenhead=\@oddhead
+ }%
+ \def\ps@note{%
+ \let\@oddfoot=\empty
+ \let\@oddhead=\empty
+ \let\@evenfoot=\@oddfoot
+ \let\@evenhead=\@oddhead
+ }%
+ \ps@slide
+}
+
+
+% Titles (from article.sty)
+
+\def\maketitlepage{\begin{titlepage}\maketitle\end{titlepage}}
+
+\def\maketitle{%
+ \par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}%
+ \def\@makefnmark{\hbox to\z@{$^{\@thefnmark}$\hss}}%
+ \newpage
+ \global\@topnum=\z@
+ \@maketitle
+ \thispagestyle{title}%
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{\z@}
+ \global\let\@title=\empty
+ \global\let\@author=\empty
+ \global\let\@thanks=\empty
+}
+
+\newcount\title@ht \newcount\title@wd
+\newcount\title@@ht \newcount\title@@wd
+
+\def\@maketitle{%
+ \newpage
+ \null
+ \setbox\z@=\vbox{%
+ \ \vskip .75em
+ \begin{center}
+ {\Large\bf \@title \par}%
+ \vskip .5em
+ {\large\bf
+ \lineskip=.25em
+ \begin{tabular}[t]{c}
+ \@author
+ \end{tabular}
+ \par
+ }%
+ \vskip .5em
+ {\large\bf \@date}%
+ \end{center}
+ \par
+ \vskip .75em
+ }%
+ \if@ovaltitle
+ \title@ht=\ht\z@ \title@wd=\wd\z@
+ \title@@ht=\ht\z@ \title@@wd=\wd\z@
+ \divide\title@@ht by2 \divide\title@@wd by2
+ \unitlength=1sp
+ \fi
+ \box\z@
+ \if@ovaltitle
+ \vskip -\title@ht\unitlength
+ {\centering
+ \begin{picture}(\title@wd,\title@ht)
+ \put(\title@@wd,\title@@ht){\oval(\title@wd,\title@ht)}
+ \end{picture}
+ \par}
+ \fi
+}
+
+\def\ctitle#1{%
+ \begin{center}
+ \large\bf#1%
+ \end{center}
+ \vskip.125in plus.25in
+}
+
+
+% Slides
+
+\def\bwslide{\let\XXX@notes=\empty \slide\empty}
+\let\endbwslide=\endslide
+
+\def\bwoverlay{\overlay\empty}
+\let\endbwoverlay=\endoverlay
+
+
+% Parts (parts is parts...)
+
+\newcounter{part}
+
+\def\part{\secdef\@part\@spart}
+
+\def\@part[#1]#2{%
+ \stepcounter{part}
+ \begin{center}
+ \Large\bf PART \thepart\\
+ \huge\bf #2%
+ \end{center}
+ \vskip1.25in plus.25in
+}
+
+\def\@spart#1{%
+ \begin{center}
+ \huge\bf #1%
+ \end{center}
+ \vskip1.15in plus.25in
+}
+
+\def\thepart{\Roman{part}}
+
+
+% Macros for circled lists (similar to itemize)
+
+\newcount\@xxxxdepth \@xxxxdepth=\z@
+
+\def\xxxx{%
+ \ifnum \@xxxxdepth>2
+ \@toodeep
+ \else
+ \advance\@xxxxdepth by\@ne
+ \edef\@xxxxitem{labelxxxx\romannumeral\the\@xxxxdepth}%
+ \list{\csname\@xxxxitem\endcsname}{%
+ \def\makelabel##1{\hss\llap{##1}}%
+ \labelwidth=\leftmargini \advance\labelwidth-\labelsep
+ \ifcase\@xxxxdepth\or
+ \itemindent=-1em \listparindent=\itemindent
+ \leftmargin=3em
+ \parsep=\the\parsep plus.5\parsep minus.5\parsep
+ \topsep=\parsep
+ \or
+ \itemindent=-2em \listparindent=\itemindent
+ \leftmargin=4em
+ \parsep=\the\parsep plus.5\parsep minus.5\parsep
+ \topsep=\parsep
+ \else
+ \itemindent=-2em \listparindent=\itemindent
+ \leftmargin=2em
+ \fi
+ \rightmargin=\z@
+ }%
+ \fi
+}
+\let\endxxxx=\endlist
+
+\def\labelxxxxi{$\circ$}
+\let\labelxxxxii=\empty
+\let\labelxxxxiii=\empty
+\let\labelxxxxiv=\empty
+
+
+\def\slidenotes#1{\def\XXX@notes{\notesfont#1}}
+\let\XXX@notes=\empty
+
+
+% Macros for figures (PIC support)
+
+\let\slidepoint=\small
+
+\def\diagram{\@ifnextchar[{\@diagram}{\@diagram[]}}
+\def\@diagram[#1]#2{%
+ \let\@d@agram=\empty \let\@di@gram=\empty
+ \@tfor\@tempa:=#1\do{%
+ \if\@tempa p
+ \let\@d@agram=\slidepoint
+ \def\@di@gram{\centerline{\box\graph}}\fi
+ \if\@tempa t
+ \let\@d@agram=\slidepoint\fi
+ }%
+ \@d@agram \input #2\relax \@di@gram
+}
+
+
+% Initialization
+
+\pagestyle{XXXslides}
+
+\uchyph=\z@
+\brokenpenalty=\@M
+\hyphenpenalty=\@M
+\tolerance=500
+\pretolerance=\@M
+\clubpenalty=\@M
+\widowpenalty=\@M \displaywidowpenalty=\@M
diff --git a/macros/latex209/contrib/misc/yearcal.tex b/macros/latex209/contrib/misc/yearcal.tex
new file mode 100644
index 0000000000..ff145138ed
--- /dev/null
+++ b/macros/latex209/contrib/misc/yearcal.tex
@@ -0,0 +1,133 @@
+%%% Save file as: YEARCAL.TEX Source: FILESERV@SHSU.BITNET
+%%% @LaTeX-file{
+%%% author = "Michael Barr",
+%%% version = "1.0",
+%%% date = "1992-06-24",
+%%% time = "16:35 EDT",
+%%% filename = "yearcal.tex",
+%%% address = "Department of Mathematics & Statistics"
+%%% McGill University
+%%% 805 Sherbrooke St. W
+%%% Montreal, QC
+%%% Canada H3A 2K6",
+%%% telephone = "(514) 398-3806",
+%%% FAX = "(514) 398-3899",
+%%% email = "barr@math.mcgill.ca (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, year calendar"
+%%% checksum = "53683 132 503 5111",
+%%% supported = "yes",
+%%% docstring = "
+%%% This LaTeX file prints the correct Gregorian calendar for any
+%%% year between the adoption of the Gregorian calendar (which
+%%% happened during the 18th, 19th and even 20th century,
+%%% depending on country) and the year 4000. That year is
+%%% supposed, according to current plans, not to be a leap year,
+%%% although, strictly speaking, that ought to happen in the year
+%%% 3200.
+%%%
+%%% The current definition of the Gregorian calendar is:
+%%% Years divisible by 4 are leap years; except
+%%% years divisible by 100 are not leap years; except
+%%% years divisible by 400 are leap years; except
+%%% years divisible by 4000 are not leap years.
+%%% So the years 1800 and 1900 were not leap years, but 2000 will be.
+%%% }
+%%% ====================================================================
+
+% The current definition of the Gregorian calendar is:
+% Years divisible by 4 are leap years; except
+% years divisible by 100 are not leap years; except
+% years divisible by 400 are leap years; except
+% years divisible by 4000 are not leap years.
+% So the years 1800 and 1900 were not leap years, but 2000 will be.
+
+
+\typeout{}
+\typein[\theyear]{Please enter the year:}
+\newcount\yearnum \yearnum=\theyear
+
+\documentstyle{article}
+\textwidth 7.05in \oddsidemargin-.255in
+\textheight=9in \headheight =0pt \topmargin=0pt\headsep=0pt
+\footheight=0pt\footskip=0pt
+\pagestyle{empty}\thispagestyle{empty}
+
+\newcount\febdays \febdays=28
+\newcount\yearnuma
+\newcount\yearnumb
+\newcount\firstdate \newcount \lastdate \newcount \datenum
+
+\def\month#1#2#3{\initialdate{#1}{#2}%
+\begin{tabular}{|rrrrrrr|} \hline
+\multicolumn{7}{|c|}{#3}\\ \hline
+Su&Mo&Tu&We&Th&Fr&Sa\\ \hline
+\day{ 1}&\day{ 2}&\day{ 3}&\day{ 4}&\day{ 5}&\day{ 6}&\day{ 7}\\
+\day{ 8}&\day{ 9}&\day{10}&\day{11}&\day{12}&\day{13}&\day{14}\\
+\day{15}&\day{16}&\day{17}&\day{18}&\day{19}&\day{20}&\day{21}\\
+\day{22}&\day{23}&\day{24}&\day{25}&\day{26}&\day{27}&\day{28}\\
+\day{29}&\day{30}&\day{31}&\day{32}&\day{33}&\day{34}&\day{35}\\
+\day{36}&\day{37}&\day{38}&\day{39}&\day{40}&\day{41}&\day{42}\\ \hline
+\end{tabular}\global\advance\firstdate by #2
+\ifnum\firstdate>35 \global\advance\firstdate by -35
+ \else\global\advance \firstdate by -28 \fi}
+\def\day#1{\advance \datenum by#1
+ \ifnum\datenum>0 \ifnum\datenum>\lastdate\else\number\datenum \fi\fi}
+\def\initialdate#1#2{\datenum=1 \advance\datenum by -#1 \lastdate=#2}
+\newcount\xa\newcount\xb\newcount\xc
+\newcount\ya\newcount\yb\newcount\yc\newcount\yd
+\xa=0 \xb=235 {\multiply \xb by 2 \global\xc=\xb }
+\yd=0 \yc=136 {\multiply \yc by 2 \global \yb=\yc }
+{\multiply \yc by 3 \global \ya=\yc }
+
+\begin{document}
+\font\gross=cminch
+
+\def\setup{\yearnuma=\yearnum{%
+\divide\yearnuma by 100
+\multiply\yearnuma by 100
+\ifnum\yearnum=\yearnuma \divide \yearnum by 100 \fi
+\ifodd\yearnum\relax
+\else \divide\yearnum by 2
+ \ifodd\yearnum\relax
+ \else \global\febdays=29
+ \fi
+\fi
+}%
+{%
+\advance\yearnum by -1
+\yearnuma=\yearnum
+\divide\yearnuma by 400 \multiply \yearnuma by -400
+\advance\yearnuma by \yearnum % \yearnuma=\yearnum mod 400
+\firstdate=\yearnuma
+\yearnumb=\yearnuma
+\divide\yearnumb by 100 \divide\yearnuma by 4
+\advance\yearnuma by -\yearnumb % correct leapyear count by centuries
+\advance\firstdate by \yearnuma % add number of leapyears
+\yearnuma=\firstdate
+\divide\yearnuma by 7 \multiply\yearnuma by 7
+\advance\firstdate by -\yearnuma % \firstdate = #leapyears mod 7
+% Now do final correction for year 0.
+\global\firstdate=\ifcase\firstdate2 \or3 \or4 \or5 \or6 \or7 \or1 \fi
+}%
+}%
+
+\setup
+\begin{center}{\gross \number\yearnum }\end{center}
+\unitlength.01in
+\begin{picture}(705,543)
+\put(\xa,\ya){\month{\firstdate}{31}{January}}
+\put(\xb,\ya){\month{\firstdate}{\febdays}{February}}
+\put(\xc,\ya){\month{\firstdate}{31}{March}}
+\put(\xa,\yb){\month{\firstdate}{30}{April}}
+\put(\xb,\yb){\month{\firstdate}{31}{May}}
+\put(\xc,\yb){\month{\firstdate}{30}{June}}
+\put(\xa,\yc){\month{\firstdate}{31}{July}}
+\put(\xb,\yc){\month{\firstdate}{31}{August}}
+\put(\xc,\yc){\month{\firstdate}{30}{September}}
+\put(\xa,\yd){\month{\firstdate}{31}{October}}
+\put(\xb,\yd){\month{\firstdate}{30}{November}}
+\put(\xc,\yd){\month{\firstdate}{31}{December}}
+\end{picture}\newpage
+
+\end{document}}
diff --git a/macros/latex209/contrib/mit-press/10mitprb.sty b/macros/latex209/contrib/mit-press/10mitprb.sty
new file mode 100644
index 0000000000..7202520db6
--- /dev/null
+++ b/macros/latex209/contrib/mit-press/10mitprb.sty
@@ -0,0 +1,590 @@
+%
+% This file helps define the MIT-Press-Book document style, created and
+% maintained by EB@OZ. Please do not modify it.
+%
+% Modified from REPORT DOCUMENT STYLE -- Released 23 September 1985
+% for LaTeX version 2.09
+% which was
+% Copyright (C) 1985 by Leslie Lamport
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1} % see also \programspacing below
+
+% LaTex (LFONTS.TEX) leaves out some font sizes that we'll be using.
+% Therefore we redefine \vipt and \viipt to remove the corresponding
+% \@subfont calls. However, if we do this we must also create
+% pxl font files of the proper magnifications for our printers.
+% Since we've created new pxl font files for small \tt sizes only,
+% we'll remove \@subfont calls for \tt alone.
+
+\def\vipt{\textfont\z@\sixrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\sixmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\sixsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\sixrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\@subfont\it\rm}%
+\def\psl{\@subfont\sl\rm}%
+\def\pbf{\@getfont\pbf\bffam\@vipt{ambx7 scaled857}}%
+\def\ptt{\@getfont\ptt\ttfam\@vipt{amtt8 at 6pt}}% %% NEW
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\sixly}\textfont\lyfam\sixly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\sixly
+\@setstrut\rm}
+
+\def\viipt{\textfont\z@\sevrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\sevmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\sevsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\sevrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\sevit}\textfont\itfam\sevit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@subfont\sl\it}%
+\def\pbf{\@getfont\pbf\bffam\@viipt{ambx7}}%
+\def\ptt{\@getfont\ptt\ttfam\@vipt{amtt8 at 7pt}}% %% NEW
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\sevly}\textfont\lyfam\sevly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{13pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt}
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+% We add several sizes in between \small and \tiny.
+% They are mainly for use in typesetting large \tt programs
+% or traces; they are not standard.
+% In order, the sizes go \small \smaller \verysmall \quitesmall \tiny.
+%
+\def\smaller{\@setsize\smaller{10pt}\viiipt\@viiipt
+\abovedisplayskip 7.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 3pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\verysmall{\@setsize\verysmall{9pt}\viipt\@viipt
+\abovedisplayskip 6.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\topsep 3pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\tiny{\@setsize\tiny{8pt}\vipt\@vipt}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+% This one is new in the MIT-Press-Book style; it's not used in the
+% REPORT style.
+\def\captionsize{\@setsize\captionsize{10pt}\ixpt\@ixpt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\topsep 3pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+% This one is new as well. It's used in the 'program' environment.
+%
+\def\programspacing{\newbaselinestretch{0.75}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\normalsize % Choose the normalsize font.
+
+% PICTURE ENVIRONMENT BUG:
+%
+% Change \the\fontdimen8\tenlnw to a larger value so that
+% \thicklines will work better with horizontal and vertical
+% lines. I don't know what's wrong here; it may be our
+% printers.
+%
+
+\fontdimen8\tenlnw=1.0pt %% empirically determined value
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+% SIDE MARGINS:
+\oddsidemargin 56pt % Left margin on odd-numbered pages.
+\evensidemargin 56pt % Left margin on even-numbered pages.
+\marginparwidth 107pt % Width of marginal notes.
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+
+ % Top of page:
+\topmargin 27pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 24pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+
+ % Bottom of page:
+\footheight 0pt % Height of box containing running foot.
+\footskip 0pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+
+\textheight 500pt % Height of text (including footnotes and figures,
+ % excluding running head and foot).
+\textwidth 334pt % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% Parameters used by the special table of contents format that's used
+% in the MIT-Press-Book style.
+
+\newdimen\toc@leftwidth
+\toc@leftwidth 7.5pc
+\newdimen\toc@rightwidth
+\toc@rightwidth 18.7pc
+\newdimen\toc@colsep
+\toc@colsep .8pc
+\newdimen\toc@prechapterskip
+\toc@prechapterskip 20pt
+\newdimen\toc@postchapterskip
+\toc@postchapterskip 8pt
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 6.65pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 9pt plus 4pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% CAPTIONSKIP -- Made a parameter in this document style.
+
+\newdimen\precaptionskip
+\precaptionskip 0pt % default is none
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 4.4pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 22pt % Width of paragraph indentation.
+\topsep 8pt plus 2pt minus 4pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 2pt plus 1pt minus 1pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+\itemsep 4pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+
+\invertedparindent\parindent % This dimension is defined in the
+ % texlocal:invertedparagraphs file,
+ % which is read before this file is.
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+\widowpenalty 10000
+\clubpenalty 10000
+
+
+% ****************************************
+% * CHAPTERS AND SECTIONS *
+% ****************************************
+%
+%
+
+\def\part{\cleardoublepageempty % Starts new page.
+ \thispagestyle{empty} % Page style of part page is 'empty'
+ \if@twocolumn % IF two-column style
+ \onecolumn % THEN \onecolumn
+ \@tempswatrue % @tempswa := true
+ \else \@tempswafalse % ELSE @tempswa := false
+ \fi % FI
+ \bgroup\parindent 0pt\raggedright\secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}
+ {\protect\numberline{\thepart} #1}\else% ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ \markboth{}{}
+ \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+ \@chapterheadlayout{Part \thepart:}{#1}\else
+ \@chapterheadlayout{}{#1}\fi
+ \@endpart}
+
+% \@endpart finishes the part page
+%
+\def\@endpart{\par\egroup % END centering
+ \vfil\newpage % End page with 1fil glue.
+ \if@twoside % IF twoside printing
+ \hbox{} % THEN Produce totally blank page
+ \thispagestyle{empty}
+ \newpage
+ \fi % FI
+ \if@tempswa % IF @tempswa = true
+ \twocolumn % THEN \twocolumn
+ \fi} % FI
+
+\def\@spart#1{\@chapterheadlayout{}{#1}\@endpart}
+
+% The chapter headings will be formatted as follows:
+%
+% Chapter 27
+% ---------------------------------------------
+% Still Further Considerations
+%
+% The \@chapterheadlayout definition helps keep the line the same distance from
+% the top of the page and the text regardless of what happens.
+% However, things could be changed so that the text moves downward if
+% the chapter has a long title.
+%
+% A \chapter*{...} chapter DOES appear in the table of contents,
+% in this document style; however, it appears in a different format
+% from a normal chapter.
+
+\def\@topchapterdecls{\parindent\z@\raggedright\Large\bf}
+
+\def\@topchapterbox#1{\hbox{\vbox to 58pt{\vfill
+ \parbox[b]{\textwidth}{\raggedright\hyphenpenalty5000 #1}}}\par
+ \hbox to \textwidth{\hrulefill}}
+
+\def\@bottomchapterbox#1{\hbox{}\par
+ \vbox to 65pt{\parbox[b]{\textwidth}{\raggedright\hyphenpenalty1000 #1}\vfill}}
+
+\def\@chapterheadlayout#1#2{\@topchapterbox{#1}\@bottomchapterbox{#2}}
+
+% \@makechapterhead {TEXT} : Makes the heading for the \chapter command.
+%
+
+\def\@makechapterhead#1{ % Heading for \chapter command
+ \bgroup
+ \@topchapterdecls
+ % IF secnumdepth > -1 THEN
+ % print 'Chapter' and number.
+ \ifnum \c@secnumdepth >\m@ne
+ \@chapterheadlayout{\@chapapp\ \thechapter}{#1}\else
+ \@chapterheadlayout{}{#1}\fi
+ \nobreak
+ \egroup}
+
+% \@makeschapterhead {TEXT} : Makes the heading for the \chapter* command.
+%
+
+\def\@makeschapterhead#1{ % Heading for \chapter* command
+ \bgroup
+ \@topchapterdecls
+ \@chapterheadlayout{}{#1}\nobreak
+ \egroup}
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a \chapter or \section command without using
+% \@startsection, you can use \secdef as follows:
+% \def\chapter { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \chapter[...]{...}
+% \def\CMDB #1{ ... } % Command to define \chapter*{...}
+
+\def\chapter{\clearchapterpage % Starts new page, possibly leaving a blank one.
+ \thispagestyle{empty} % Page style of chapter page is empty
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@chapter\@schapter} % to \@afterindenttrue to have indent.
+
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}
+ \typeout{Book \@chapapp\space\thechapter.}
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#2}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}
+ \addtocontents{lof}{\protect\addvspace{10pt}} % Adds between-chapter space
+ \addtocontents{lot}{\protect\addvspace{10pt}} % to lists of figs & tables.
+ \if@twocolumn % Tests for two-column mode.
+ \@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{#2}
+ \@afterheading % Routine called after chapter and
+ \fi} % section heading.
+
+% We arrange for \chapter* entries to appear in the table of contents, but
+% indicated with "schapter" rather than "chapter".
+
+\def\@schapter#1{\addcontentsline{toc}{schapter}{#1}\if@twocolumn
+ \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}\@afterheading\fi
+ \markboth{#1}{#1}}
+
+% \chapter{...} isn't supposed to be used in the front matter;
+% \chapter*{...} is supposed to be used instead.
+
+\def\front@chapter[#1]#2{\front@schapter{#2}}
+
+\def\front@makeschapterhead#1{\bgroup % Heading for \chapter* command in
+ \parindent 0pt\raggedright % front matter
+ \large\uppercase{#1}\par\nobreak
+ \vspace{20pt}
+ \egroup
+ \@afterindenttrue
+ \@afterheading}
+
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+% In the MIT-Press-Book style, I've set up only chapters and sections
+% to suppress paragraph indentation -- not subsections.
+
+\def\section{\@startsection{section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf\raggedright}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{3.25ex plus 1ex minus
+ .2ex}{1.5ex plus .2ex}{\large\bf\raggedright}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{3.25ex plus
+ 1ex minus .2ex}{1.5ex plus .2ex}{\large\sl\raggedright}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize
+ \sl\raggedright}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\sl\raggedright}}
+
+% Default initializations of \...mark commands. (See below for their
+% use in defining page styles.
+%
+
+\def\chaptermark#1{}
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the chapter counter to zero
+% -- set \@chapapp to Appendix (for messages)
+% -- redefine the chapter counter to produce appendix numbers
+% -- reset the section counter to zero
+% -- redefine the \chapter command if appendix titles and headings are
+% to look different from chapter titles and headings.
+%
+% In this document style, we also set the tocdepth counter to
+% zero so that sections of appendices will not go in the table
+% of contents.
+%
+% Also, we do a \clearpage in the \appendix command in this document
+% style. Among other things, that allows us to do an \immediate\write
+% instead of a \write for the \addtocontents.
+
+\def\appendix{\clearpage
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{Appendix}
+ \bgroup
+ \let\latexwrite\write
+ \def\write{\immediate\latexwrite}
+ \addtocontents{toc}{\protect\@tocappendix}
+ \egroup
+ \def\thechapter{\Alph{chapter}}}
+
+\def\@tocappendix{\def\@chapapp{Appendix}\setcounter{tocdepth}{0}}
+
+
+
+% INDEX INDENTATION
+
+\newlength\indexindent
+{\small \global\indexindent=0.6em}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 25pt
+\leftmarginii 22pt % > \labelsep + width of '(m)'
+\leftmarginiii 18.7pt % > \labelsep + width of 'vii.'
+\leftmarginiv 17pt % > \labelsep + width of 'M.'
+\leftmarginv 10pt
+\leftmarginvi 10pt
+
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\parsep 4pt plus 2pt minus 1pt
+
+\def\@listi{\leftmargin\leftmargini}
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/macros/latex209/contrib/mit-press/mit-press-book.sty b/macros/latex209/contrib/mit-press/mit-press-book.sty
new file mode 100644
index 0000000000..e8877fcef5
--- /dev/null
+++ b/macros/latex209/contrib/mit-press/mit-press-book.sty
@@ -0,0 +1,1261 @@
+%
+% This file defines the MIT-Press-Book document style, created and
+% maintained by EB@OZ. Please do not modify it.
+%
+% Modified from REPORT DOCUMENT STYLE -- Released 23 September 1985
+% for LaTeX version 2.09
+% which was
+% Copyright (C) 1985 by Leslie Lamport
+
+\typeout{Document Style 'MIT-Press-Book'. Version of 23-Oct-86.}
+
+% The type size option is handled by reading a different file for each
+% size, as follows, to define font size-specific commands:
+% 10pt : 10MITPRB, 11pt : 11MITPRB, 12pt : 12MITPRB
+% Implemented by \def'ing \@ptsize to second digit of file name.
+% However, only 10pt is available now.
+%
+
+\def\@ptsize{0} % Default is 10MITPRB.STY
+\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt option reads in 11MITPRB.STY
+\@namedef{ds@12pt}{\def\@ptsize{2}} % 12pt option reads in 12MITPRB.STY
+
+% Two-side or one-side printing: this document style only allows
+% twoside.
+%
+
+\@twosidetrue % Always two-sided printing.
+\@mparswitchtrue % Marginpars go on outside of page.
+
+\newif\if@bradford
+\newif\if@cogsci
+\@bradfordfalse
+\@cogscifalse
+
+\def\ds@bradford{\@bradfordtrue}
+ % 'bradford' option makes front matter
+ % come out as for a Bradford Book.
+
+\def\ds@cogsci{\@cogscitrue} % 'bradford,cogsci' makes front matter
+ % for Computational Models of
+ % Cognition and Perception
+
+\def\ds@twoside{} % Allows vacuous twoside option.
+
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\newif\ifdraft
+\draftfalse
+\def\ds@draft{\relax
+ \overfullrule 5pt\relax % Causes overfull hboxes to be marked.
+ \drafttrue}
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+\input invertedparagraphs % from texlocal
+\makeatletter
+
+\input 1\@ptsize mitprb.sty\relax
+
+\newif\if@restonecol % Used in a few places later.
+
+% This is used in the \programspacing definition in the 1xMITPRB file
+% [at least]. It causes a change in \baselinestretch to become
+% effective immediately. It has the unfortunate side-effect of
+% selecting the \rm typeface.
+
+\def\newbaselinestretch#1{\def\baselinestretch{#1}\@currsize}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin\parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+% INVERTED PARAGRAPHS
+%
+% Used for the bibliography, in this document style.
+%
+% The dimension \invertedparindent is set in the
+% 1xMITPRB file.
+%
+% The invertedparagraphs environment is now defined by
+% another file on TEXLOCAL:, which is read before the
+% 1xMITPRB file.
+
+% TABBING BOXES
+%
+% The \begin{tabbingbox}...\end{tabbingbox} environment saves
+% a tabbing environment in a box. This is one way to make a
+% box out of a bunch of lines and have the width of the
+% box be equal to the width of the longest line. Naturally,
+% tabbing commands are also available in the box, but they aren't
+% used much.
+%
+% An optional position argument [t], [b], or [c] as for \parbox
+% may be supplied. The default is [b].
+%
+% A second optional argument [boxnumber] causes the box to be
+% saved in the indicated box number, instead of being returned.
+% Sample use of this form: \begin{tabbingbox}[b][0]...
+%
+% The definition is on texlocal now.
+
+\input tabbingbox
+\makeatletter
+
+% ALPHABETICALLY NUMBERED LISTS
+%
+% These are made part of the document style in case we want to change
+% the format of the label in a standardized way.
+%
+
+\newcounter{alphlist}
+\renewcommand{\thealphlist}{(\alph{alphlist})}
+
+\newenvironment{alphlist}%
+{\list{\thealphlist}{\usecounter{alphlist}\def\makelabel##1{##1\hfil}}}%
+{\endlist}
+
+% \tt PROGRAMS AND TRACES
+%
+% We define a \begin{program}...\end{program} environment that is
+% set in \tt with reduced line spacing. There's also a version
+% that produces a box, \begin{programbox}...\end{programbox},
+% with the same optional arguments as \begin{tabbingbox}.
+%
+% Verbatim mode is not set, so TeX features can be used.
+% \obeycr is not set either, since an \obeycr command can just
+% be typed if desired.
+%
+
+\def\program{\programspacing\tt\tabbing}
+\let\endprogram\endtabbing
+
+\def\programbox{\programspacing\tt\tabbingbox}
+\let\endprogrambox\endtabbingbox
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment,
+% except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+%
+% In the MIT-Press-Book document style, I set theorems in \rm type
+% instead of \it and I add a colon. I also make it easier to change
+% this behavior by introducing the macro \theoremstart, which gets
+% three arguments that are usually just concatenated but are supplied
+% separately to allow possible font-switching:
+%
+% \theoremstart{Theorem}{1.3}{}
+% \theoremstart{Theorem}{1.3}{ (Jones)}.
+%
+% Finally, I don't understand why Latex uses the \list environment
+% to do theorems, and it makes things come out wrong from my point
+% of view. I'll remove the use of \list as well.
+
+\def\theoremstart#1#2#3{\par\rm\noindent{\bf #1\ #2\rm#3\bf:\ }}
+
+\def\@begintheorem#1#2{\theoremstart{#1}{#2}{}}
+\def\@opargbegintheorem#1#2#3{\theoremstart{#1}{#2}{ (#3)}}
+
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero. In two-column style, it still makes a one-column
+% page.
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+\tabcolsep 6pt % Half the space between columns in a tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+%
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * CHAPTERS AND SECTIONS *
+% ****************************************
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is stepped.
+% Counter OLDCTR must already be defined.
+
+\newcounter{part}
+\newcounter {chapter}
+\newcounter {section}[chapter]
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+
+\def\thepart {\Roman{part}}
+\def\thechapter {\arabic{chapter}}
+\def\thesection {\thechapter.\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+% This macro is like \cleardoublepage, but its inserted blank
+% page has an empty pagestyle.
+\def\cleardoublepageempty{\clearpage\if@twoside \ifodd\c@page\else
+ \hbox{}\thispagestyle{empty}\newpage\if@twocolumn
+ \hbox{}\thispagestyle{empty}\newpage\fi\fi\fi}
+
+% In this document style, \cleardoublepage should always mean
+% \cleardoublepageempty.
+
+\let\latexcleardoublepage\cleardoublepage
+\let\cleardoublepage\cleardoublepageempty
+
+\let\clearchapterpage\cleardoublepageempty
+
+% \@chapapp is initially defined to be 'Chapter'. The \appendix
+% command redefines it to be 'Appendix'.
+%
+\def\@chapapp{Chapter}
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \subsection command writes a
+% \contentsline{subsection}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If subsections are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \thesubsection. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table' environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@chapter, \l@section,
+% \l@subsection, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note, \chapter is level 0, \section
+% is level 1, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+%
+% The MIT-Press-Book style does not use the \@dottedtocline macro. Instead,
+% it uses a special contents style that is controlled by the parameters
+% \toc@leftwidth, \toc@rightwidth, and \toc@colsep that are set by the
+% 1xMITPRB file. The macro \toc@atpage{TITLE}{PAGE} could also be redefined.
+% In addition, there's \toc@prechapterskip and \toc@postchapterskip.
+
+\def\toc@atpage#1#2{#1~~#2\hfill}
+
+% The l@TYPE macros receive arguments l@TYPE{NUMBEREDTITLE}{PAGE},
+% where NUMBEREDTITLE is actually {\numberline{NUM}TITLE} if there's
+% a section number.
+
+\newbox\toc@leftbox
+\newbox\toc@rightbox
+
+\def\l@chapter#1#2{\bgroup
+ \pagebreak[3]\parindent\z@
+ \def\numberline##1{\global\setbox\toc@leftbox\hbox to \toc@leftwidth
+ {\large \@chapapp\ ##1\hfill}}
+ % #1 better use \numberline!
+ \setbox\toc@rightbox\hbox
+ {\parbox[t]{\toc@rightwidth}{\raggedright\bf
+ \toc@atpage{#1}{#2}\large\strut}}
+ \vspace{\toc@prechapterskip}
+ \hbox to \textwidth{\hbox to \toc@leftwidth{\hrulefill}\hskip
+ \toc@colsep\hbox to \toc@rightwidth{\hrulefill}\hfill}
+ \nopagebreak\par
+ \hbox to\textwidth{\box\toc@leftbox\hskip\toc@colsep\box\toc@rightbox\hfill}
+ \lineskip\parskip\nopagebreak\par
+ \hrule height\z@\nopagebreak
+ \vspace{\toc@postchapterskip}
+ \egroup}
+
+% The definition of \@schapter in this document style arranges for a
+% contents line entry that calls \l@schapter for a \chapter* section.
+
+\def\l@schapter#1#2{\bgroup
+ \parindent\z@
+ \hbox to \textwidth{\large\rm\toc@atpage{#1}{#2}\hfill}
+ \par\egroup}
+
+\def\l@part#1#2{\bgroup
+ \pagebreak[3]
+ \parindent\z@
+ \def\numberline##1{\global\setbox\toc@leftbox\hbox{\large\bf Part ##1: }}
+ \vspace{\toc@prechapterskip}
+ \setbox\toc@rightbox\hbox
+ {\parbox[t]{\toc@rightwidth % not really the right parameter
+ }{\large\bf #1}}
+ \hbox to \textwidth{\box\toc@leftbox\box\toc@rightbox\hfill}
+ \par
+ \nobreak
+ % Remove prechapter skip
+ \vspace{-\toc@prechapterskip}
+ \egroup}
+
+\def\l@section#1#2{\ifnum 1>\c@tocdepth \else
+ \nopagebreak[2]\bgroup\raggedright
+ \@tempdima\toc@leftwidth
+ \advance\@tempdima\toc@colsep
+ \parindent\z@\parskip\z@\leftskip\@tempdima
+ \def\numberline##1{}
+ \toc@atpage{#1}{#2}
+ \par\egroup
+ \fi}
+
+% Contents entries for subsections are turned off by
+% default. But if they were turned on, they would come out in the
+% same style (without section numbers) but indented slightly and
+% in slanted type.
+
+\def\l@subsection#1#2{\ifnum 2>\c@tocdepth \else
+ \bgroup\raggedright
+ \@tempdima\toc@leftwidth
+ \advance\@tempdima\toc@colsep
+ \advance\@tempdima 2em
+ \parindent\z@\parskip\z@\leftskip\@tempdima
+ \def\numberline##1{}
+ \toc@atpage{#1}{#2}
+ \par\egroup
+ \fi}
+
+\def\l@subsubsection#1#2{\ifnum 3>\c@tocdepth \else
+ \bgroup\raggedright
+ \@tempdima\toc@leftwidth
+ \advance\@tempdima\toc@colsep
+ \advance\@tempdima 4em
+ \parindent\z@\parskip\z@\leftskip\@tempdima
+ \def\numberline##1{}
+ {\sl\toc@atpage{#1}{#2}}
+ \par\egroup
+ \fi}
+
+% Since I don't know how anything further should come out,
+% I'll just disallow them.
+
+\def\l@paragraph#1#2{}
+\def\l@subparagraph#1#2{}
+
+% Lists of tables and figures aren't really supported in the
+% MIT-Press-Book style, but these definitions will marginally
+% work in the \begin{frontmatter}...\end{frontmatter} style.
+
+% LIST OF FIGURES
+%
+\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{List of Figures}\@starttoc{lof}\if@restonecol\twocolumn
+ \fi}
+
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+
+% LIST OF TABLES
+%
+\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{List of Tables}\@starttoc{lot}\if@restonecol\twocolumn
+ \fi}
+
+\let\l@table\l@figure
+
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus -.07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+%
+% In the MIT-Press-Book document style, the Latex bibliographic database
+% is not currently supported. References are entered by hand.
+%
+% Also, for some reason MIT Press prefers 'References' to
+% 'Bibliography' so we use that as the chapter* heading.
+%
+% This thebibliography environment doesn't take an argument.
+
+\def\thebibliography{\addtocontents{toc}{\vskip\toc@prechapterskip}
+ \chapter*{References}\invertedparagraphs
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax
+ \label{start-biblio}}
+
+\def\endthebibliography{\endlist\label{end-biblio}}
+
+% \def\@biblabel#1{[#1]\hfill} % Produces the label for a \bibitem[...]
+ % command.
+% \def\@cite#1{[#1]} % Produces the output of the \cite command.
+
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+%
+% Index entries are produced automatically by Latex, but the sorted
+% index itself must be produced by other means.
+%
+% The commands \mainentry{...}, \subentry{...}, and \newdictletter{...}
+% that are defined here correspond to the commands that are produced
+% by an index sorting system that runs on MIT-PREP (contact eb@oz).
+%
+% If that system is used, the following syntax should be used
+% for \index commands, involving certain bracketed keywords:
+%
+% \index{Main topic}
+% \index{Main topic, subtopic} %% ", " is separator
+% \index{Main,~topic,~with,~commas, subtopic} %% ",~" is not separator
+%
+% never \index{{\it Topic, subtopic}} %% NEVER do this --
+% %% topic and subtopic will be
+% %% mechanically split
+% %% apart during the sorting
+% %% process and the braces
+% %% won't match any more!!
+% \index{\it Topic, subtopic} %% This is OK but only the
+% %% topic will be italicized.
+%
+% \index{[begin] Complexity classes, discussion of} %% start a range
+% \index{[end] Complexity classes, discussion of} %% end a range
+%
+% \index{3SAT [as] three-sat} %% alphabetize as "three-sat"
+% \index{{\it Aspects\/}, contrasted with modern work} %% already alphabetizes
+% %% correctly
+% \index{3SAT [as] three-sat, 3CNF and [as] three-cnf and}
+%
+% \index{Computational complexity [see] Complexity} %% refer elsewhere
+% \index{Problem, methods for solving [see] Algorithm} %% refer elsewhere
+%
+% never \index{...&%<>@#...} -- some characters forbidden
+%
+% these \nindex{complexity classes} are...
+% % roughly like:
+% % \index{Complexity classes}complexity classes
+%
+% ... work by \nindex[N.]{Chomsky} ...
+% % \index{Chomsky,~N.}Chomsky
+%
+% ... solving the \nindex{problem}[solving the] ...
+% % roughly like
+% % \index{Problem, solving the}problem
+%
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 15pt\relax\twocolumn
+\chapter*{Index}\small\parindent\z@\parskip\z@ plus .3pt\relax
+\raggedright
+\let\item\@idxitem\frenchspacing}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+% The \nindex macro will capitalize the first token of its argument,
+% if the first token is a letter. It will also skip over the known
+% typeface-changing commands \rm, \it, \em, \sl, \bf,
+% but over no other commands. Thus \nindex{computational complexity}
+% and \nindex{\it computational complexity} will both capitalize
+% the first "C".
+%
+% Note that \nindex{\it Aspects} capitalizes the index entry as well
+% as the text, while {\it \nindex{parallel computation}} capitalizes
+% only the text.
+
+\def\@idxredefs{\def~{\string~}\def\@tempa{ }%
+\edef\cal{\string\cal\@tempa}%
+\edef\sc{\string\sc\@tempa}%
+}
+
+\newtoks\idx@toks
+
+% \@nindexA{...} -- just one argument
+%
+\def\@nindexA#1{{\global\cap@toks{}\@caplook#1\@@capend
+ \@idxredefs\xdef\@tempa{{\the\cap@toks}}\expandafter
+ \index\@tempa}{#1}}
+
+\def\nindex{\@ifnextchar[\@nindexB\@nindexY}
+
+% \@nindexB[N.]{Chomsky}
+%
+\def\@nindexB[#1]#2{{\global\cap@toks{}\@caplook#2\@@capend
+ \@idxredefs\xdef\@tempa{{\the\cap@toks,~#1}}\expandafter
+ \index\@tempa}{#2}}
+
+% can't use \@ifnextchar here because it gobbles spaces!!
+
+\def\@nindexY#1{\def\@idxtempa{{#1}}\futurelet\@idxtempb\@nindexZ}
+\def\@nindexZ{\if[\@idxtempb\def\@idxtempb{\expandafter
+ \@nindexC\@idxtempa}\else
+ \def\@idxtempb{\expandafter\@nindexA\@idxtempa}\fi%]
+\@idxtempb}
+
+% \@nindexC{topic}[subtopic]
+%
+\def\@nindexC#1[#2]{{\global\cap@toks{}\@caplook#1\@@capend
+ \@idxredefs\xdef\@tempa{{\the\cap@toks, #2}}\expandafter
+ \index\@tempa}{#1}}
+
+% Capitalizing mechanism for ...text...\@@capend:
+% If the first token of ...text... is identifiable as a letter,
+% capitalize it. Skip over a small set of known font-changing commands when
+% looking for the first token. This only works for easy cases.
+% (Note: There's not any \capitalize any more; it was only defined
+% for testing.)
+%
+% \capitalize{foo} ==> Foo
+% \capitalize{\it foo} ==> \it Foo
+% \capitalize{{\it foo}}==> {\it foo} %% doesn't capitalize
+%
+% The special-effect typefaces \sc, \tt, \sf aren't in the list.
+% All of this is actually very hard to accomplish.
+%
+% The expansion actually involves "\uppercase{f}" instead of "F".
+
+\newtoks\cap@toks
+
+\def\@tokadd#1#2{#1=\expandafter{\the#1#2}}
+
+\def\@caplook{\futurelet\@tempa\@captest}
+
+\def\@capgobble#1\@@capend{\global\cap@toks\expandafter{\the\cap@toks #1}}
+
+\def\@capskip{\def\@tempa##1{\global\@tokadd\cap@toks{##1}\@caplook}}
+
+\def\@captest{\relax
+\ifcat a\@tempa\def\@tempa##1{\global\@tokadd\cap@toks
+ {\uppercase{##1}}\@capgobble}%
+\else\ifx \@tempa\rm \@capskip
+ \else\ifx \@tempa\it \@capskip
+ \else\ifx \@tempa\em \@capskip
+ \else\ifx \@tempa\sl \@capskip
+ \else\ifx \@tempa\bf \@capskip
+ \else\let\@tempa\@capgobble\fi\fi\fi\fi\fi\fi\@tempa}
+
+\def\@idxitem{\parindent 0\indexindent\par\hangindent 1\indexindent}
+
+\def\subitem{\parindent 2\indexindent\par\hangindent 3\indexindent}
+
+\def\subsubitem{\parindent 4\indexindent\hangindent 5\indexindent}
+
+\def\indexspace{\par \vspace{10pt plus 5pt minus 3pt}}
+
+% Routines called by output of sorting procedures
+
+\def\mainentry#1{\pagebreak[2]\item {#1}}
+
+\def\subentry#1{\subitem {#1}}
+
+\def\newdictletter#1{\indexspace}
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@} % The \hrule has default height of .4pt .
+
+% \newcounter{footnote}
+\@addtoreset{footnote}{chapter} % Numbers footnotes within chapters
+
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth).
+%
+% The following macro indents all lines of the footnote by 10pt, and
+% indents the first line of a new paragraph by 1em. To change these
+% dimensions, just substitute the desired value for '10pt' [in both
+% places] or '1em'. The mark is flushright against the footnote.
+% \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+% \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+%
+% A simpler macro is used, in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. Thus, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default used.
+%
+
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% Redefine the \caption command so that the optional argument is null
+% if omitted, instead of defaulting to the caption text. This is
+% because we're assuming captions are long and will cause \caption to
+% choke if the optional argument is omitted.
+
+\long\def\nulldefault@dblarg#1{\@ifnextchar[{#1}{\ndfl@xdblarg{#1}}}
+\long\def\ndfl@xdblarg#1#2{#1[]{#2}}
+
+\def\caption{\refstepcounter\@captype \nulldefault@dblarg{\@caption\@captype}}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+% In this document style, we use footnote-style captions.
+
+\newif\iflongcaption % can be temporarily set true
+ % so it won't try the hbox bit
+
+\long\def\@makecaption#1#2{
+ \bgroup\captionsize % 10MITPRB defines \captionsize
+ \vskip\precaptionskip
+ \iflongcaption
+ #1: #2\par
+ \else
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ \unhbox\@tempboxa\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi
+ \fi
+ \egroup}
+
+% The caption style can be temporarily redefined to produce effects like
+% "Figure 10 (facing page):", as in
+%
+% \setcaptionstyle[figure]{Figure \thefigure\ (facing page)}
+%
+% Here we make the "optional" argument required, so it can't be left out.
+%
+
+\def\setcaptionstyle[#1]#2{\expandafter\def\csname fnum@#1\endcsname}
+
+% A command for putting a separator rule at the bottom of a figure.
+
+\newcommand{\figurerule}{\par\vskip 5pt\hrule\vskip 5pt\relax}
+
+% This one goes at the top of a figure that's at the bottom of the page.
+
+\newcommand{\bottomfigurerule}{\par\hrule\relax}
+
+% Define a synonym for compatibility with some older files of ours.
+
+\let\longcaption\caption
+
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+
+% FIGURE
+
+\newcounter{figure}[chapter]
+\def\thefigure{\thechapter.\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}[chapter]
+\def\thetable{\thechapter.\@arabic\c@table}
+
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+%
+% The titlepage environment is omitted here, since there are more
+% specialized macros for making the half-title and full-title pages
+% in this document style.
+
+% \input titlepage.sty
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \chaptermark, \sectionmark, ... , where
+% \chaptermark{TEXT} is called by \chapter to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'left' mark. Works like TeX's
+% \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'right' mark. Works like TeX's
+% \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \chapter command and
+% the right mark is changed by a \section command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+
+\mark{{}{}} % Initializes TeX's marks
+
+% \def\ps@empty{\def\@oddhead{}
+% \def\@oddfoot{}
+% \def\@evenhead{}\def\@evenfoot{}}
+%
+% \def\ps@plain{\def\@oddhead{}
+% \def\@oddfoot{\rm\hfil\thepage\hfil}
+% \def\@evenhead{}
+% \let\@evenfoot\@oddfoot}
+
+% In this document style, I have introduced a counter 'headmarkdepth' that
+% determines whether sections, subsections, etc. change the page heading.
+
+\newcounter{headmarkdepth}
+
+\def\ps@headings{\def\@oddfoot{}% % No feet.
+\def\@evenfoot{}% % No feet.
+%
+% Heading style across two pages:
+% nn Methodological Preliminaries | Chapter 2 nn
+%
+\def\@evenhead{{\small\bf \thepage}\hfill % Left heading.
+ {\let\\ \relax\sl\leftmark}}%
+\def\@oddhead{{\sl \rightmark}\hfill
+ {\let\\ \relax\small\bf\thepage}}% % Right heading.
+%
+\def\chaptermark##1{\ifnum 0>\c@headmarkdepth\else\markboth{##1}{\@chapapp\ \thechapter}\fi}%
+\def\sectionmark##1{\ifnum 1>\c@headmarkdepth\else\markright{##1}\fi}%
+\def\subsectionmark##1{\ifnum 2>\c@headmarkdepth\else\markright{##1}\fi}%
+}
+
+\ps@headings
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+% EQUATION and EQNARRAY -- put here because it must follow \chapter definition
+%
+% \newcounter{equation}
+%
+\@addtoreset{equation}{chapter} % Makes \chapter reset 'equation' counter.
+
+\def\theequation{\thechapter.\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+% The macro \@eqnnum defines how equation numbers are to appear in equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+
+
+% *********************************************
+% * SPECIAL PAGE FORMAT *
+% *********************************************
+%
+% Alignment marks and a copyright notice are added.
+%
+
+\def\@vcut{\hrule height 18pt depth 0pt width .5pt\relax}
+\def\@hcut{\vrule height .5pt depth 0pt width 17.5pt\relax}
+
+\def\@ltcut{
+ \vbox to 24pt{
+ \hbox to 0pt{\hskip-30pt\vbox to 0pt{\@vcut\vss}\@hcut\hfil}
+ \vfil}}
+\def\@lbcut{
+ \vbox to 24pt{
+ \vfil
+ \hbox to 0pt{\hskip-30pt\vbox{\@vcut}\@hcut\hfil}}}
+\def\@rtcut{
+ \vbox to 24pt{
+ \hbox to 0pt{\hfil\@hcut\vbox to 0pt{\@vcut\vss}\hskip-30pt}
+ \vfil}}
+\def\@rbcut{
+ \vbox to 24pt{
+ \vfil
+ \hbox to 0pt{\hfil\@hcut\vbox{\@vcut}\hskip-30pt}}}
+
+\def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\hbox to 27pc{\@ltcut\hfil\@rtcut}\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \vskip0pt
+ \hbox to 27pc{\@lbcut\hfil\@rbcut}
+ \hbox to 27pc{\hfil\vrule width 0pt height 10pt\bf
+ \arabic{page}\hfil}
+ \vskip 10pt
+ \hbox to 27pc{\hfil\presscopyright\hfil}}}
+ \global\@colht\textheight
+ \endgroup
+ \stepcounter{page}\let\firstmark\botmark}
+
+\def\presscopyright{\rm Copyright \copyright\ \today\ by the MIT Press}
+
+
+% ****************************************
+% * FRONT MATTER *
+% ****************************************
+%
+% The environment \begin{frontmatter}...\end{frontmatter} is used for
+% the title page, table of contents, preface, and so forth. It
+% redefines the page numbering. Sections should be indicated with
+% the \chapter* command.
+
+\newif\ifpluralauthors
+\pluralauthorsfalse
+
+\long\def\@contentsignore#1\@endcontentsignore{}
+
+\def\frontmatter{\def\thepage{\roman{page}}\relax
+ \let\@makeschapterhead\front@makeschapterhead
+ \clearpage
+ \setcounter{page}{1}\setcounter{footnote}{0}\relax
+ \let\@chapter\front@chapter
+ \let\clearchapterpage\clearpage
+ % no contents lines until table of contents has been output
+ \addtocontents{toc}{\protect\@contentsignore}
+ % no page numbering until table of contents has been output
+ \pagestyle{empty}}
+
+\def\endfrontmatter{\cleardoublepageempty
+ \setcounter{page}{1}\setcounter{footnote}{0}}
+
+\if@bradford
+\def\halftitlepage#1{\clearpage\bgroup
+ \@topchapterdecls\@topchapterbox{#1\vspace{0.5in}}\egroup
+ \thispagestyle{empty}\clearpage}
+\else
+\def\halftitlepage#1{\clearpage\bgroup\flushleft
+ \def\baselinestretch{1.10}\Large\bf#1\endflushleft
+ \egroup\thispagestyle{empty}\clearpage}
+\fi
+
+\if@bradford
+\def\fulltitlepage#1#2{\cleardoublepageempty
+ \begingroup
+ \let\clearpage\relax\halftitlepage{#1}\flushleft
+ \large\rm #2\vfill
+ \normalsize\bf A Bradford Book\\
+ \rm The MIT Press\\Cambridge, Massachusetts\\
+ London, England\endflushleft
+ \endgroup\thispagestyle{empty}\newpage}
+\else
+\def\fulltitlepage#1#2{\cleardoublepageempty
+ \begingroup\flushleft
+ \def\baselinestretch{1.10}\Large\bf#1\\[20pt]\large\rm#2\\
+ \vfill\normalsize The MIT Press\\Cambridge, Massachusetts\\
+ London, England\endflushleft
+ \endgroup\thispagestyle{empty}\newpage}
+\fi
+
+\if@bradford
+\if@cogsci
+\def\bookseriespage#1{\clearpage{\flushleft\rm
+\input mitprcogsci \\
+{\bf Computational Models of Cognition and Perception}\\[5pt]
+Editors\\[5pt]
+#1\\[10pt]}\raggedright\parindent\z@}
+\else
+\def\bookseriespage{\clearpage
+ \@topchapterdecls\@topchapterbox{}\normalsize\parskip\z@
+ \vspace{10pt}\mbox{\input mitprbb }\ \large\bf Bradford Books\par
+ \vspace{10pt}\small\rm
+ \invertedparagraphs}
+\fi
+\else
+\def\bookseriespage{\clearpage\flushleft\small\parskip 8pt}
+\fi
+
+\if@bradford
+\if@cogsci
+\def\seriesbook#1 #2\par{{\it #1}, #2\par}
+\else
+\def\seriesbook#1 #2/#3. \par{#2. #1. #3.\par}
+\fi
+\else
+\def\seriesbook#1 #2\par{{\sl #1\/} #2\par}
+\fi
+
+\if@bradford
+\if@cogsci
+\def\endbookseriespage{\clearpage}
+\else
+\def\endbookseriespage{\endinvertedparagraphs\clearpage}
+\fi
+\else
+\def\endbookseriespage{\endflushleft\clearpage}
+\fi
+
+% TABLEOFCONTENTS
+% In report style, \tableofcontents, \listoffigures, etc. are always
+% set in single-column style. @restonecol
+
+% This should be done inside \begin{frontmatter}...\end{frontmatter},
+% for this document style. Otherwise the \chapter* command here
+% won't work as we expect.
+
+\def\tableofcontents{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi
+ \chapter*{Contents}\bgroup\raggedbottom
+ \raggedright\hyphenpenalty1000\@starttoc{toc}\egroup
+ \if@restonecol\twocolumn\fi
+ \pagestyle{headings}\let\clearchapterpage\cleardoublepageempty
+ \addtocontents{toc}{\protect\@endcontentsignore}}
+
+% Sample usage of \libraryofcongress:
+%
+% \begin{copyrightpage}
+%
+% \publishersnote
+%
+% \libraryofcongress
+% \author Berwick, Robert C.
+% \title The acquisition of syntactic knowledge.
+% \series (The MIT Press series in artificial intelligence.)
+% \keywords 1.~Artificial intelligence. 2.~Linguistics---Data processing.
+% 3.~Language acquisition. 4.~Learning---Mathematical models. I.~Title.
+% II.~Series.
+% \numbers Q335.B48 1985 \and 401.9 \and 85--11460
+% \isbn 0-262-02226-5
+% \done
+%
+% \end{copyrightpage}
+
+\def\publishersnote{\input mitprpn }
+
+\def\copyrightpage{\flushleft\parskip 10pt}
+\def\endcopyrightpage{\vfill\clearpage}
+
+% redefine this if the bibliography pages have to be killed from the entry;
+% MIT Press actually says to leave them out
+\def\libraryofcongressbib{Bibliography: p.\pageref{start-biblio}--\pageref{end-biblio}}
+%\def\libraryofcongressbib{Bibliography: p.}
+
+\def\libraryofcongress\author #1\title #2\series #3\keywords #4\numbers #5\isbn #6\done
+{{\bf Library of Congress Cataloging-in-Publication Data}\par
+\begin{minipage}{3.5in}\raggedright\let\and\qquad
+\def\skip{\hskip 2em\relax}%
+#1\\
+{\skip #2}\par
+{\skip #3}\\
+{\skip \libraryofcongressbib}\\
+{\skip Includes index.}\\
+{\skip\let\and\quad #4}\\
+#5\\
+ISBN #6
+\end{minipage}}
+
+\def\aiseriesforeword{\input mitpraisf }
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column.
+\flushbottom % No ragged bottom.
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+% \chapter = 0
+% \section = 1
+% \subsection = 2
+
+\setcounter{secnumdepth}{1} % Default: Sections only, not subsections.
+\setcounter{tocdepth}{1} % Contents lines for sections but not
+ % subsections.
+\setcounter{headmarkdepth}{0} % Default: Chapters only.
+
+% As for the Latex small-caps font-loading bug, we'll have none of it.
+
+\load{\normalsize}{\cal}
+\load{\small}{\cal}
+\load{\large}{\cal}
+\load{\normalsize}{\sc}
+\load{\large}{\sc}
+\load{\small}{\sc}
+\load{\normalsize}{\sf}
+
+%
+% Load some convenient abbreviations as part of the document style.
+% Also, change the format used by the \sectref command.
+%
+
+\input etcetera % on texlocal
+\makeatletter
+\def\sectref{section~\ref}
+
diff --git a/macros/latex209/contrib/mit-press/mitpraisf.tex b/macros/latex209/contrib/mit-press/mitpraisf.tex
new file mode 100644
index 0000000000..a5e5f1555e
--- /dev/null
+++ b/macros/latex209/contrib/mit-press/mitpraisf.tex
@@ -0,0 +1,68 @@
+
+% This file is logically part of MIT-Press-Book.STY, created and maintained
+% by EB@OZ. Please do not change it.
+
+% To be input within \begin{frontmatter}...\end{frontmatter}.
+
+\chapter*{Series Foreword}
+
+Artificial intelligence is the study of intelligence using the ideas
+and methods of computation. Unfortunately, a definition of
+intelligence seems impossible at the moment because intelligence
+appears to be an amalgam of so many information-processing and
+information-representation abilities.
+
+Of course psychology, philosophy, linguistics, and related disciplines
+offer various perspectives and methodologies for studying
+intelligence. For the most part, however, the theories proposed in
+these fields are too incomplete and too vaguely stated to be realized
+in computational terms. Something more is needed, even though
+valuable ideas, relationships, and constraints can be gleaned from
+traditional studies of what are, after all, impressive existence
+proofs that intelligence is in fact possible.
+
+Artificial intelligence offers a new perspective and a new
+methodology. Its central goal is to make computers intelligent, both
+to make them more useful and to understand the principles that make
+intelligence possible. That intelligent computers will be extremely
+useful is obvious. The more profound point is that artificial
+intelligence aims to understand intelligence using the ideas and
+methods of computation, thus offering a radically new and different
+basis for theory formation. Most of the people doing artificial
+intelligence believe that these theories will apply to any intelligent
+information processor, whether biological or solid state.
+
+There are side effects that deserve attention, too. Any program that
+will successfully model even a small part of intelligence will be
+inherently massive and complex. Consequently, artificial intelligence
+continually confronts the limits of computer science technology. The
+problems encountered have been hard enough and interesting enough to
+seduce artificial intelligence people into working on them with
+enthusiasm. It is natural, then, that there has been a steady flow of
+ideas from artificial intelligence to computer science, and the flow
+shows no sign of abating.
+
+%Robotics is the part of Artificial Intelligence concerned with the
+%intelligent connection of perception to action. A key issue in
+%Robotics is understanding the mechanics of manipulation as a basis for
+%the successful planning and execution of robot tasks. Currently, we
+%cannot claim to understand manipulation. Our knowledge of robotics is
+%almost entirely empirical. If fundamental principles exist, we have
+%not discovered them. We consider this book to be an important step
+%toward uncovering such principles.
+
+The purpose of this MIT Press Series in Artificial
+Intelligence is to provide people in many areas, both professionals
+and students, with timely, detailed information about what is
+happening on the frontiers in research centers all over the world.
+
+\vskip 10pt
+\noindent
+Patrick Henry Winston \hfill Michael Brady
+
+\vfill
+
+\newpage
+
+% end of Series Foreword
+
diff --git a/macros/latex209/contrib/mit-press/mitprbb.tex b/macros/latex209/contrib/mit-press/mitprbb.tex
new file mode 100644
index 0000000000..264f36ee9f
--- /dev/null
+++ b/macros/latex209/contrib/mit-press/mitprbb.tex
@@ -0,0 +1,12 @@
+% Bradford Books back-to-back "B" logo.
+% Part of MIT-PRESS-BOOK document style, maintained by EB@OZ.
+% Please do not change this.
+\hbox{\setlength{\unitlength}{2pt}\thicklines
+\begin{picture}(9,7)
+\put(3.5,1){\oval(7,2)[l]}
+\put(4.5,1){\oval(7,2)[r]}
+\put(3.5,0){\line(0,1){7}}
+\put(4.5,0){\line(0,1){7}}
+\put(3.5,7){\line(-1,0){1}}
+\put(4.5,7){\line(1,0){1}}
+\end{picture}}\endinput
diff --git a/macros/latex209/contrib/mit-press/mitprcogsci.tex b/macros/latex209/contrib/mit-press/mitprcogsci.tex
new file mode 100644
index 0000000000..46b9249132
--- /dev/null
+++ b/macros/latex209/contrib/mit-press/mitprcogsci.tex
@@ -0,0 +1,127 @@
+%%% *************************************************************************
+%%% * This file is mechanically generated by translation from an Illustrate *
+%%% * figure. Do not edit this file directly. *
+%%% *************************************************************************
+\bgroup
+\setlength{\unitlength}{0.8cm}
+\begin{picture}(1.7606295,1.4401575)(0,0)
+\thicklines
+\put(0.12992126,0.53346455){\circle*{0.06259842}}
+\put(0.16968504,0.534252){\circle*{0.06259842}}
+\put(0.20905511,0.5346457){\circle*{0.06259842}}
+\put(0.2488189,0.53385824){\circle*{0.06259842}}
+\put(0.28818896,0.53110236){\circle*{0.06259842}}
+\put(0.32755905,0.52559054){\circle*{0.06259842}}
+\put(0.36535433,0.5137795){\circle*{0.06259842}}
+\put(0.3988189,0.4929134){\circle*{0.06259842}}
+\put(0.42874014,0.46732283){\circle*{0.06259842}}
+\put(0.45511812,0.43779528){\circle*{0.06259842}}
+\put(0.47637796,0.4043307){\circle*{0.06259842}}
+\put(0.4956693,0.36968505){\circle*{0.06259842}}
+\put(0.51338583,0.33425197){\circle*{0.06259842}}
+\put(0.5283465,0.2976378){\circle*{0.06259842}}
+\put(0.5425197,0.26062992){\circle*{0.06259842}}
+\put(0.5559055,0.22322835){\circle*{0.06259842}}
+\put(0.5685039,0.18582678){\circle*{0.06259842}}
+\put(0.5807087,0.1480315){\circle*{0.06259842}}
+\put(0.5933071,0.11023622){\circle*{0.06259842}}
+\put(0.6066929,0.073228344){\circle*{0.06259842}}
+\put(0.62598425,0.03858268){\circle*{0.06259842}}
+\put(0.6559055,0.047637794){\circle*{0.06259842}}
+\put(0.67165357,0.08385827){\circle*{0.06259842}}
+\put(0.68307084,0.12165354){\circle*{0.06259842}}
+\put(0.6929134,0.16023622){\circle*{0.06259842}}
+\put(0.7011811,0.19881889){\circle*{0.06259842}}
+\put(0.7090551,0.23779528){\circle*{0.06259842}}
+\put(0.71614176,0.27677166){\circle*{0.06259842}}
+\put(0.72283465,0.31574804){\circle*{0.06259842}}
+\put(0.72913384,0.3547244){\circle*{0.06259842}}
+\put(0.73503935,0.3940945){\circle*{0.06259842}}
+\put(0.74094486,0.43307087){\circle*{0.06259842}}
+\put(0.7468504,0.47244096){\circle*{0.06259842}}
+\put(0.7519685,0.511811){\circle*{0.06259842}}
+\put(0.7574803,0.5507874){\circle*{0.06259842}}
+\put(0.76259845,0.5901575){\circle*{0.06259842}}
+\put(0.7677165,0.62952757){\circle*{0.06259842}}
+\put(0.77283466,0.6688976){\circle*{0.06259842}}
+\put(0.77755904,0.7082677){\circle*{0.06259842}}
+\put(0.7822835,0.7476378){\circle*{0.06259842}}
+\put(0.78700787,0.78700787){\circle*{0.06259842}}
+\put(0.7917323,0.8263779){\circle*{0.06259842}}
+\put(0.7964567,0.86574805){\circle*{0.06259842}}
+\put(0.8011811,0.9051181){\circle*{0.06259842}}
+\put(0.80551183,0.94448817){\circle*{0.06259842}}
+\put(0.8102362,0.9838583){\circle*{0.06259842}}
+\put(0.8145669,1.0232283){\circle*{0.06259842}}
+\put(0.81929135,1.0625985){\circle*{0.06259842}}
+\put(0.82401574,1.1019685){\circle*{0.06259842}}
+\put(0.8287402,1.1409448){\circle*{0.06259842}}
+\put(0.83346456,1.180315){\circle*{0.06259842}}
+\put(0.8385827,1.2196851){\circle*{0.06259842}}
+\put(0.84370077,1.2590551){\circle*{0.06259842}}
+\put(0.8496063,1.2984252){\circle*{0.06259842}}
+\put(0.8562992,1.3374016){\circle*{0.06259842}}
+\put(0.8645669,1.3759843){\circle*{0.06259842}}
+\put(0.88188976,1.4066929){\circle*{0.06259842}}
+\put(0.8968504,1.3708662){\circle*{0.06259842}}
+\put(0.9047244,1.3318897){\circle*{0.06259842}}
+\put(0.9110236,1.2929134){\circle*{0.06259842}}
+\put(0.9169291,1.2535433){\circle*{0.06259842}}
+\put(0.92204726,1.2141732){\circle*{0.06259842}}
+\put(0.9271653,1.1748031){\circle*{0.06259842}}
+\put(0.9318898,1.1354331){\circle*{0.06259842}}
+\put(0.93661416,1.096063){\circle*{0.06259842}}
+\put(0.9413386,1.056693){\circle*{0.06259842}}
+\put(0.946063,1.0173228){\circle*{0.06259842}}
+\put(0.9503937,0.9779528){\circle*{0.06259842}}
+\put(0.9551181,0.93858266){\circle*{0.06259842}}
+\put(0.9594488,0.8992126){\circle*{0.06259842}}
+\put(0.96417326,0.8602362){\circle*{0.06259842}}
+\put(0.96889764,0.82086617){\circle*{0.06259842}}
+\put(0.973622,0.78149605){\circle*{0.06259842}}
+\put(0.97834647,0.742126){\circle*{0.06259842}}
+\put(0.98307085,0.7027559){\circle*{0.06259842}}
+\put(0.988189,0.6633858){\circle*{0.06259842}}
+\put(0.9933071,0.62401575){\circle*{0.06259842}}
+\put(0.9984252,0.5846457){\circle*{0.06259842}}
+\put(1.0035433,0.54527557){\circle*{0.06259842}}
+\put(1.0090551,0.5062992){\circle*{0.06259842}}
+\put(1.0145669,0.46692914){\circle*{0.06259842}}
+\put(1.0200788,0.42755905){\circle*{0.06259842}}
+\put(1.0259843,0.38858268){\circle*{0.06259842}}
+\put(1.0322834,0.3492126){\circle*{0.06259842}}
+\put(1.0385827,0.31023622){\circle*{0.06259842}}
+\put(1.0452756,0.27125984){\circle*{0.06259842}}
+\put(1.052756,0.23228346){\circle*{0.06259842}}
+\put(1.0602362,0.19330709){\circle*{0.06259842}}
+\put(1.0688976,0.1547244){\circle*{0.06259842}}
+\put(1.0787401,0.11614173){\circle*{0.06259842}}
+\put(1.0905511,0.07834645){\circle*{0.06259842}}
+\put(1.1070867,0.042519685){\circle*{0.06259842}}
+\put(1.1370078,0.04330709){\circle*{0.06259842}}
+\put(1.1543307,0.07913386){\circle*{0.06259842}}
+\put(1.1669291,0.11653543){\circle*{0.06259842}}
+\put(1.1787401,0.15433072){\circle*{0.06259842}}
+\put(1.1901575,0.19212599){\circle*{0.06259842}}
+\put(1.2023622,0.22992127){\circle*{0.06259842}}
+\put(1.2153543,0.26732284){\circle*{0.06259842}}
+\put(1.2291338,0.3043307){\circle*{0.06259842}}
+\put(1.2440945,0.34133857){\circle*{0.06259842}}
+\put(1.2614173,0.37677166){\circle*{0.06259842}}
+\put(1.2807087,0.41141734){\circle*{0.06259842}}
+\put(1.3019685,0.4448819){\circle*{0.06259842}}
+\put(1.3287401,0.47401574){\circle*{0.06259842}}
+\put(1.3594488,0.4988189){\circle*{0.06259842}}
+\put(1.3937008,0.5181102){\circle*{0.06259842}}
+\put(1.4318898,0.52795273){\circle*{0.06259842}}
+\put(1.4712598,0.5322835){\circle*{0.06259842}}
+\put(1.5110236,0.53346455){\circle*{0.06259842}}
+\put(1.5507874,0.53385824){\circle*{0.06259842}}
+\put(1.5901575,0.53385824){\circle*{0.06259842}}
+\put(1.6299213,0.53346455){\circle*{0.06259842}}
+\thinlines
+\put(0.87992126,1.4086614){\line(0,-1){0.87559056}}
+\put(1.7551181,0.53346455){\line(-1,0){1.7503937}}
+\put(0.87992126,0.033464566){\line(0,1){0.5003937}}
+\end{picture}
+\egroup
diff --git a/macros/latex209/contrib/mit-press/mitprpn.tex b/macros/latex209/contrib/mit-press/mitprpn.tex
new file mode 100644
index 0000000000..97bca9020f
--- /dev/null
+++ b/macros/latex209/contrib/mit-press/mitprpn.tex
@@ -0,0 +1,45 @@
+
+% This file is logically part of MIT-Press-Book.STY, created and maintained
+% by EB@OZ. Please do not change it.
+
+% To be input within \begin{frontmatter}...\end{frontmatter}.
+
+\makeatletter
+
+\if@bradford
+\bgroup\clearpage\@topchapterdecls
+\@topchapterbox{}\egroup{\sl Publisher's Note:\/}
+\else
+\chapter*{Publisher's Note}
+\fi
+This format is intended to reduce the cost of publishing certain works
+in book form and to shorten the gap between editorial preparation and
+final publication. The time and expense of detailed editing and
+composition in print have been avoided by photographing the text of
+this book directly from the
+\ifpluralauthors authors' \else author's \fi
+typeset copy.
+
+\if@bradford\relax\else\vskip 10pt\fi
+
+Copyright \copyright\ \number\year\ by The Massachusetts Institute of
+Technology.
+
+All rights reserved. No part of this book may be reproduced, stored
+in a retrieval system, or transmitted, in any form, or by any means,
+electronic, mechanical, photocopying, recording, or otherwise, without
+the prior written permission of the publisher.
+
+This book was typeset with Donald E. Knuth's \TeX\ and Leslie
+Lamport's \LaTeX.
+
+\if@bradford\relax\else\vskip 10pt\fi
+
+Printed and bound in the United States of America.
+
+\if@bradford\relax\else\vskip 0.5in\fi
+
+% Library of Congress info goes here -- use \libraryofcongress macro.
+
+\makeatother
+
diff --git a/macros/latex209/contrib/mtns/mtns12.sty b/macros/latex209/contrib/mtns/mtns12.sty
new file mode 100644
index 0000000000..2c0d6f45fa
--- /dev/null
+++ b/macros/latex209/contrib/mtns/mtns12.sty
@@ -0,0 +1,116 @@
+% MTNSart12.sty 6-May-91
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt
+\def\@listi{\leftmargin\leftmargini \parsep 4.5pt plus 2pt minus 1pt \itemsep
+\parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\leftmargin\leftmargini \topsep 6pt plus 2pt minus 2pt\parsep 3pt
+plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\normalsize
+
+\if@twoside \oddsidemargin 21pt \evensidemargin 59pt \marginparwidth 85pt
+\else \oddsidemargin 39.5pt \evensidemargin 39.5pt
+ \marginparwidth 68pt
+\fi
+\marginparsep 10pt
+ \topmargin -3.4mm \headheight 0pt \headsep 0pt \footskip 30pt
+
+\textheight = 36\baselineskip
+\advance\textheight by \topskip
+\textwidth 390pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 8.4pt
+\skip\footins 10.8pt plus 4pt minus 2pt
+\floatsep 14pt plus 2pt minus 4pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt \@maxsep 20pt \dblfloatsep 14pt plus 2pt
+minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 10pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 10pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+
+\parskip 0pt plus 1pt \parindent 1.5em \partopsep 3pt plus 2pt minus 2pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf Part \thepart \par\nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{3.0ex plus 1ex minus
+ .2ex}{0.1ex plus .2ex}{\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{2.5ex plus 1ex minus
+ .2ex}{0.2ex plus .2ex}{\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.5ex plus
+ 1ex minus .2ex}{0.2ex plus .2ex}{\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{1em}{\normalsize\bf}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 5pt plus 2.5pt minus 1pt\topsep
+10pt plus 4pt minus 6pt\itemsep 5pt plus 2.5pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\parindent 10mm
+\topskip 15pt
diff --git a/macros/latex209/contrib/mtns/mtnsarticle.sty b/macros/latex209/contrib/mtns/mtnsarticle.sty
new file mode 100644
index 0000000000..be6e2d39f5
--- /dev/null
+++ b/macros/latex209/contrib/mtns/mtnsarticle.sty
@@ -0,0 +1,466 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Silvano Balemi",
+%%% version = "1.1",
+%%% date = "23-JUL-93",
+%%% filename = "MTNSarticle.sty",
+%%% address = "Automatic Control Laboratory
+%%% Swiss Federal Institute of Technology (ETH)
+%%% 8092 Zurich, Switzerland",
+%%% telephone = "+41 (1) 256.55.35",
+%%% FAX = "+41 (1) 262.43.62",
+%%% email = "balemi@aut.ee.ethz.ch",
+%%% keywords = "LaTeX, MTNS proceedings, Camera ready,
+%%% publisher style",
+%%% supported = "yes. Please send comments via E-mail",
+%%% mainserver = "ifa.ethz.ch"
+%%% docstring = "This is a LaTeX style file for camera ready
+%%% articles according to instructions of the
+%%% publisher of Mathematical Theory of Network and Systems
+%%% The default font size is 12 points,
+%%%
+%%% Usage:
+%%% \documentstyle{MTNSarticle}
+%%% \author{}
+%%% \title{}
+%%% \abstract{}
+%%% \keywords{}
+%%% \maketitle
+%%% The command "\footernote{TEXT}" puts the
+%%% text TEXT at the bottom of the page
+%%% together with the page number. In order to
+%%% remove footnote and page number, insert
+%%% \thispagestyle{empty}\pagestyle{empty}
+%%% right after the \maketitle command!!
+%%% }
+%%% ====================================================================
+\typeout{Document Style `MTNSarticle' <23-JUL-93>.}
+
+\def\abstract#1{\gdef\@abstract{#1}}
+\def\keywords#1{\gdef\@keywords{#1}}
+
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+
+%%% FONT DEFINITION FOR 12 POINTS (taken and modified from art12.sty)
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt
+\def\@listi{\leftmargin\leftmargini \parsep 4.5pt plus 2pt minus 1pt \itemsep
+\parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\leftmargin\leftmargini \topsep 6pt plus 2pt minus 2pt\parsep 3pt
+plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+\normalsize
+
+\if@twoside \oddsidemargin 21pt \evensidemargin 59pt \marginparwidth 85pt
+\else \oddsidemargin 1mm \evensidemargin\oddsidemargin \marginparwidth 68pt
+\fi
+
+\marginparsep 10pt
+\topmargin -6.4mm
+\headheight 0pt
+\headsep 0pt
+\footskip 30pt
+\parindent 10mm
+\topskip 15pt
+\textheight 250mm
+\textwidth 150mm
+
+\footnotesep 8.4pt
+\skip\footins 10.8pt plus 4pt minus 2pt
+\floatsep 14pt plus 2pt minus 4pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt \@maxsep 20pt \dblfloatsep 14pt plus 2pt
+minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 10pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 10pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+
+\parskip 0pt plus 1pt
+\partopsep 3pt plus 2pt minus 2pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\section{\@startsection {section}{1}{\z@}{3.0ex plus 1ex minus
+ .2ex}{0.1ex plus .2ex}{\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{2.5ex plus 1ex minus
+ .2ex}{0.2ex plus .2ex}{\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{2.5ex plus
+ 1ex minus .2ex}{0.2ex plus .2ex}{\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection{subparagraph}{4}{\parindent}{3.25ex
+ plus 1ex minus .2ex}{1em}{\normalsize\bf}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 5pt plus 2.5pt minus 1pt\topsep
+10pt plus 4pt minus 6pt\itemsep 5pt plus 2.5pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+%%%%%%%%%% End of lines taken from art12.sty
+
+
+\def\[{\relax\ifmmode\@badmath\else
+ \begin{trivlist}
+ \@beginparpenalty\predisplaypenalty
+ \@endparpenalty\postdisplaypenalty
+ \item[]\leavevmode
+ \hbox to\linewidth\bgroup$ \displaystyle
+ \hskip\mathindent\bgroup\fi}
+\def\]{\relax\ifmmode \egroup $\hfil \egroup \end{trivlist}\else \@badmath \fi}
+\def\equation{\@beginparpenalty\predisplaypenalty
+ \@endparpenalty\postdisplaypenalty
+\refstepcounter{equation}\trivlist \item[]\leavevmode
+ \hbox to\linewidth\bgroup $ \displaystyle
+\hskip\mathindent}
+\def\endequation{$\hfil \displaywidth\linewidth\@eqnnum\egroup \endtrivlist}
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$\halign to
+\linewidth\bgroup\@eqnsel\hskip\@centering$\displaystyle\tabskip\z@
+ {##}$\hfil&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue }
+\newdimen\mathindent
+\mathindent = 0pt
+
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}}
+\def\thesection {\arabic{section}.}
+\def\thesubsection {\thesection\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\section*{REFERENCES\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\hskip 0.5mm \arabic{enumi}\hskip 0.5mm ]}{\settowidth\labelwidth{[#1]}
+ \labelwidth 8mm \leftmargin 8mm
+ \itemsep -1.5mm
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\def\@cite#1#2{[\hskip 0.5mm{#1\if@tempswa , #2\fi}\hskip 0.5mm]}
+\def\@mklab#1{#1 \hfil}
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{footer}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width \columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{\small #1. #2}
+ \ifdim \wd\@tempboxa >\hsize{\small #1. #2}\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{{\small Fig. \thefigure}}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{
+\pagestyle{footer}
+\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+\pagestyle{footer}
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{footer}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@abstract{}\gdef\@keywords{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em
+\advance \rightskip by 10mm
+\advance \leftskip by 10mm
+\begin{center}
+\advance \rightskip by 10mm
+\advance \leftskip by 10mm
+\vspace{16mm}
+ {\bf \uppercase{\@title} \par} \vskip 1.5em { \lineskip .5em
+\begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em {} \end{center}
+ \par
+ \vskip 1.5em
+\noindent
+{\bf ABSTRACT}
+\par
+\@abstract
+\par
+\null
+\noindent
+{\bf Key Words: }\@keywords
+\par
+}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\def\ps@footer{\let\@mkboth\@gobbletwo
+ \def\@oddhead{}\def\@oddfoot{\hfil
+ \@footernote\ \qquad \thepage}
+\def\@evenhead{}\def\@evenfoot{
+\thepage\qquad \@footernote\ \hfil }
+}
+
+\def\footernote#1{\def\@footernote{#1}}
+\footernote{}
+
+\ps@footer
+\pagenumbering{arabic}
+\onecolumn
+\if@twoside\else\raggedbottom\fi
+
+\def\@thmcountersep{}
+
+% needed to reduce space between counter and text in sections and
+% subsections
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 0.5em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+
diff --git a/macros/latex209/contrib/mtns/mtnssample.bib b/macros/latex209/contrib/mtns/mtnssample.bib
new file mode 100644
index 0000000000..72b2cae61d
--- /dev/null
+++ b/macros/latex209/contrib/mtns/mtnssample.bib
@@ -0,0 +1,15 @@
+@inproceedings{BBB:91,
+ author={Balemi, S. and V. Balakrishnan and S. Boyd},
+ title={{Computation of the Maximum ${\bf H}_\infty$-norm of
+ Parameter-dependent Linear Systems by a Branch and Bound Algorithm}},
+ year={1991},
+ booktitle={Proc. of MNTS-91}
+ }
+@inproceedings{KhPa:86,
+ author={Khargonekar, P.I. and A.M. Pascoal},
+ title={Robust stabilixability of {LTI} plants: {NLTV}
+ controllers},
+ year={1986},
+ booktitle={Proc. 25th IEEE CDC},
+ address={Athens, Greece}
+ }
diff --git a/macros/latex209/contrib/mtns/mtnssample.tex b/macros/latex209/contrib/mtns/mtnssample.tex
new file mode 100644
index 0000000000..759682dca9
--- /dev/null
+++ b/macros/latex209/contrib/mtns/mtnssample.tex
@@ -0,0 +1,87 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MTNSsample.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%% More information: see the header of MTNSarticle.sty %%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentstyle{MTNSarticle}
+
+\begin{document}
+\bibliographystyle{unsrt}
+
+%% useful definition when preparing own reprints
+\setcounter{page}{9}
+\footernote{Presented at the last MTNS Symposium}
+
+\title{SAMPLE DOCUMENT OF ARTICLE SUBMITTED FOR REPRODUCTION
+IN MTNS PROCEEDINGS}
+
+\author{
+S. Balemi\thanks{
+Automatic Control Lab., ETH-Zentrum, 8092 \underline{Zurich},
+Switzerland , balemi@aut.ee.ethz.ch} \
+and
+R. Roy.\thanks{Information Systems Lab., Stanford University,
+Stanford CA, 94305, USA}
+}
+
+\abstract{
+This is a \LaTeX\ sample of an article using two MTNS style files
+created for formatting according to the instructions for
+direct photo-offset reproduction of MTNS Proceedings articles.
+}
+\keywords{
+\LaTeX, style files, MTNS Proceedings
+}
+
+\maketitle
+%% When uncommented, the next line removes page numbers and footernote
+%\thispagestyle{empty}\pagestyle{empty}
+
+\section{INTRODUCTION}
+This paper uses two style files created for \LaTeX\ in order to
+format an article according to the ``instructions and format of
+a camera-ready typescript for direct photo-offset reproduction''.
+
+The style file used is {\tt MTNSarticle.sty}
+ and should be in a path known by \LaTeX.
+The format produced by the style file satisfies most of the
+requirements. However, no bibliography style file (see
+\cite{KhPa:86,BBB:91}) is available for formatting the references
+from the bibliography file according to MTNS instructions. We advise
+therefore to ``tune'' by hand in the the *.bbl file possible small
+differences.
+
+\section{CONCLUSIONS}
+A sample article for publication in the MTNS Proceedings has been
+presented. It takes advantage of two style files which format
+the article automatically according to MTNS instructions.
+
+\section*{ACKNOLWEDGMENT}
+The authors are grateful to \dotfill during\\
+the preparation of this work.
+
+%\bibliography{bib-file} % commented if *.bbl file included, as seen below
+
+%%%%%%%%%%%%%%%%% BIBLIOGRAPHY IN THE LaTeX file !!!!! %%%%%%%%%%%%%%%%%%%%%%%%
+%% This is nothing else than the MTNSsample.bbl file that you would %%
+%% obtain with BibTeX: this way, you do not need a separate *.bbl file %%
+%%---------------------------------------------------------------------------%%
+\begin{thebibliography}{1}
+
+\bibitem{KhPa:86}
+P.I. Khargonekar and A.M. Pascoal.
+\newblock Robust stabilixability of {LTI} plants: {NLTV} controllers.
+\newblock In {\em Proc. 25th IEEE CDC}, Athens, Greece, 1986.
+
+\bibitem{BBB:91}
+S.~Balemi, V.~Balakrishnan, and S.~Boyd.
+\newblock {Computation of the Maximum ${\bf H}_\infty$-norm of
+ Parameter-dependent Linear Systems by a Branch and Bound Algorithm}.
+\newblock In {\em Proc. of MNTS-91}, 1991.
+
+\end{thebibliography}
+%%---------------------------------------------------------------------------%%
+
+\end{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of MTNSsample.tex %%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/nfss-addons/avantgardemath.sty b/macros/latex209/contrib/nfss-addons/avantgardemath.sty
new file mode 100644
index 0000000000..b6641f2679
--- /dev/null
+++ b/macros/latex209/contrib/nfss-addons/avantgardemath.sty
@@ -0,0 +1,23 @@
+% math fonts:
+\@ifundefined{new@fontshape}%
+{\@latexerr{This style option to use PostScript fonts can only be used%
+ with the new font selection scheme}\@eha%
+ \endinput}{}
+\message{Using PostScript AvantGarde font for math text}
+%
+\input psmath
+%
+\firstpsmathgroup{pag}{m}{n}% avantgarde - roman
+\secondpsmathgroup{pag}{m}{sl}% avantgarde - slanted
+\thirdpsmathgroup{cmsy}{m}{n}% cmsy
+
+%\new@mathversion\mv@psbold
+%\define@mathgroup\mv@psbold{0}{ppl}{b}{n}
+%\define@mathgroup\mv@psbold{1}{ppl}{b}{it}
+%\define@mathgroup\mv@psbold{2}{cmsy}{b}{n}
+%\def\boldmath{\@nomath\boldmath
+% \mathversion{psbold}}
+\new@internalmathalphabet\mathbf\bffam{pag}{b}{n}
+\def\pbf{\family\rmdefault
+ \series\bfdefault
+ \shape\default@shape\selectfont\mathbf}
diff --git a/macros/latex209/contrib/nfss-addons/nfsslint.sty b/macros/latex209/contrib/nfss-addons/nfsslint.sty
new file mode 100644
index 0000000000..2c729d572f
--- /dev/null
+++ b/macros/latex209/contrib/nfss-addons/nfsslint.sty
@@ -0,0 +1,93 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Mario Wolczko",
+%%% version = "2",
+%%% date = "21 May 1992",
+%%% time = "20:59:01 BST",
+%%% filename = "nfsslint.sty",
+%%% address = "Dept of Computer Science
+%%% The University of Manchester
+%%% Oxford Road
+%%% Manchester M13 9PL
+%%% UK",
+%%% telephone = "+44-61-275-6146",
+%%% FAX = "+44-61-275-6236",
+%%% checksum = "25494 93 315 3067",
+%%% email = "mario@cs.man.ac.uk (Internet)",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, NFSS, fonts",
+%%% supported = "yes",
+%%% docstring = "For New Font Selection Scheme users --
+%%% warns of possible font problems in pre-NFSS files.",
+%%% }
+%%% ====================================================================
+%
+% If you have switched to the NFSS, but have pre-NFSS documents, this
+% style option will tell you when latexing those documents using NFSS
+% may change the appearance.
+%
+% Example: if in a document you had
+% \bf foo \sf bar
+% then prior to NFSS ``bar'' would be in mediumweight sans-serif, but
+% using NFSS it would be in bold sans. If you add nfsslint as a style
+% option, you will get a warning something like this:
+% nfsslint: possible unexpected font in use of \sf on line 42
+
+\@ifundefined{extract@font}
+ {\@warning{The style option `nfsslint' is ignored
+ -- you are not using the new font selection scheme.}
+ \endinput}
+ {}
+
+\let\@prelint@tt\tt
+\let\@prelint@rm\rm
+\let\@prelint@sf\sf
+\let\@prelint@sc\sc
+\let\@prelint@it\it
+\let\@prelint@bf\bf
+\let\@prelint@sl\sl
+
+\def\@lintwarn#1{\@warning{nfsslint: possible unexpected font in use
+ of \string#1}}
+
+% warn if not default series and shape
+\def\rm{%
+ \ifx\f@series\default@series % series OK
+ \ifx\f@shape\default@shape\else\@lintwarn\rm\fi
+ \else\@lintwarn\rm\fi
+ \@prelint@rm}
+\def\sf{%
+ \ifx\f@series\default@series % series OK
+ \ifx\f@shape\default@shape\else\@lintwarn\sf\fi
+ \else\@lintwarn\sf\fi
+ \@prelint@sf}
+\def\tt{%
+ \ifx\f@series\default@series % series OK
+ \ifx\f@shape\default@shape\else\@lintwarn\tt\fi
+ \else\@lintwarn\tt\fi
+ \@prelint@tt}
+
+% warn if not default family and shape
+\def\bf{%
+ \ifx\f@family\default@family % family OK
+ \ifx\f@shape\default@shape\else\@lintwarn\bf\fi
+ \else\@lintwarn\bf\fi
+ \@prelint@bf}
+
+
+% warn if not default family and series
+\def\it{%
+ \ifx\f@family\default@family % family OK
+ \ifx\f@series\default@series\else\@lintwarn\it\fi
+ \else\@lintwarn\it\fi
+ \@prelint@it}
+\def\sl{%
+ \ifx\f@family\default@family % family OK
+ \ifx\f@series\default@series\else\@lintwarn\sl\fi
+ \else\@lintwarn\sl\fi
+ \@prelint@sl}
+\def\sc{%
+ \ifx\f@family\default@family % family OK
+ \ifx\f@series\default@series\else\@lintwarn\sc\fi
+ \else\@lintwarn\sc\fi
+ \@prelint@sc}
diff --git a/macros/latex209/contrib/nfss-addons/npsfont.sty b/macros/latex209/contrib/nfss-addons/npsfont.sty
new file mode 100644
index 0000000000..b9b48bef63
--- /dev/null
+++ b/macros/latex209/contrib/nfss-addons/npsfont.sty
@@ -0,0 +1,193 @@
+%% BEGIN npsfont.sty
+%%
+\def\fileversion{v1.0}
+\def\filedate{91/11/20}
+%%
+%% Style option npsfont.sty, for use with LaTeX 2.09
+%% and the New Font Selection Scheme.
+%%
+%% COPYRIGHT 1992, by Timothy Van Zandt, tvz@Princeton.EDU
+%%
+%% Copying of part or all of this file is allowed under the following
+%% conditions only:
+%% (1) You may freely distribute unchanged copies of the file. Please
+%% include the documentation when you do so.
+%% (2) You may modify a renamed copy of the file, but only for personal
+%% use or use within an organization.
+%% (3) You may copy fragments from the file, for personal use or for use
+%% in a macro package for distribution, as long as credit is given
+%% where credit is due.
+%%
+%% You are NOT ALLOWED to take money for the distribution or use of
+%% this file or modified versions or fragments thereof, except for
+%% a nominal charge for copying etc.
+%%
+% DESCRIPTION:
+%
+% Defining new PostScript fonts with the New Font Selection Scheme is easy,
+% but these macros make it easier. They save on keystrokes, and most
+% importantly, they make it easy to change the file names used for fonts
+% because you only have to type the file name once instead of 12 times (for
+% the 12 standard LaTeX sizes). An optional argument lets you scale the fonts.
+%
+% These macros are substitutes for the NFSS's \new@fontshape command. For
+% information on the purpose of this command, and on how to select fonts that
+% are defined with it, see the documentation of the NFSS. If you don't have
+% the NFSS, it is available from
+% rusmv1.rus.uni-stuttgart.de
+% in
+% soft/tex/latex-style-supported/New-Font-Selection
+% and from
+% ymir.claremont.edu
+% in
+% [.anonymous.tex.inputs.latex-mainz]
+% The NFSS is undoubtably the best way to use PostScript fonts (or any non-
+% standard fonts) with LaTeX, and is well worth upgrading to.
+%
+% USAGE:
+%
+% \newpsfont[<scaling>]{<family>}{<series>}{<shape>}{<filename>}
+%
+% \newpsfamily[<scaling>]{<family>}{
+% {<series 1>}{<shape 1>}{<filename 1>},
+% {<series 2>}{<shape 2>}{<filename 2>},
+% . . .
+% {<series n>}{<shape n>}{<filename n>}}
+%
+% The scaling argument is optional. Like the \new@fontshape command, these
+% commands can only be used in the preamble.
+%
+% EXAMPLE:
+%
+% Suppose the Helvetica-Oblique virtual font on your system has the name
+% phvro.vf. The following defines the <helvetica> family, <m>edium series, and
+% <it>alic shape to be the Helvetica-Oblique font, at the standard LaTeX
+% font sizes, scaled by .82:
+%
+% \newpsfont[.82]{helvetica}{m}{it}{phvro}
+%
+% This is equivalent to:
+%
+% \new@fontshape{helvetica}{m}{it}{%
+% <5>phvro at 4.1pt%
+% <6>phvro at 4.92pt%
+% <7>phvro at 5.74pt%
+% <8>phvro at 6.56pt%
+% <9>phvro at 7.38pt%
+% <10>phvro at 8.2pt%
+% <11>phvro at 8.979pt%
+% <12>phvro at 9.84pt%
+% <14>phvro at 11.808pt%
+% <17>phvro at 14.1696pt%
+% <20>phvro at 17.0068pt%
+% <25>phvro at 20.4016pt}{}
+%
+% The following command sets up the standard Helvetica family:
+%
+% \newpsfamily[.82]{helvetica}{%
+% {m}{n}{phvr}, %Helvetica
+% {m}{it}{phvro}, %Helvetica-Oblique
+% {m}{sl}{phvro}, %Helvetica-Oblique
+% {bx}{n}{phvb}, %Helvetica-Bold
+% {bx}{it}{phvbo}, %Helvetica-BoldOblique
+% {bx}{sl}{phvbo}} %Helvetica-BoldOblique
+%
+% (Don't forget the commas.) It is equivalent to:
+%
+% \newpsfont[.82]{helvetica}{m}{n}{phvr} %Helvetica
+% \newpsfont[.82]{helvetica}{m}{it}{phvro} %Helvetica-Oblique
+% \newpsfont[.82]{helvetica}{m}{sl}{phvro} %Helvetica-Oblique
+% \newpsfont[.82]{helvetica}{bx}{n}{phvb} %Helvetica-Bold
+% \newpsfont[.82]{helvetica}{bx}{it}{phvbo} %Helvetica-BoldOblique
+% \newpsfont[.82]{helvetica}{bx}{sl}{phvbo} %Helvetica-BoldOblique
+% \extra@def{helvetica}{}{}
+%
+% WHY SCALE FONTS?:
+%
+% Disclaimer: The suggestions that follow come from someone who doesn't know
+% anything about fonts.
+%
+% Mixing fonts that are not designed to be used together is not for purists,
+% but many of us do it anyway. Scaling the fonts can at least correct for
+% differences in the x-heights. This is important if you use Computer
+% Modern fonts for in-line math and some other fonts for text.
+%
+% To find out the x-height of the 10pt size of a font, load this style and
+% use the command
+%
+% \showxheight{<filename>}
+%
+% E.g., \showxheight{phvr} and \showxheight{cmr10} displays
+%
+% x-height of cmr10 at 10pt is 4.30554pt
+% x-height of phvr at 10pt is 5.24998pt
+%
+% on the terminal. Scaling the Helvetica fonts by 4.30554/5.24990 = .82
+% gets the x-heights of these fonts in line. It is best to set the x-heights
+% the same for the medium weight, normal shaped fonts, and then scale the
+% rest of the fonts in the same family by the same amount.
+%
+% David Jones has a psfonts.sty that sets up the standard PostScript fonts,
+% all scaled so that the x-heights match that of the Computer Modern medium
+% roman font. It is available via anonymous ftp from theory.lcs.mit.edu in
+% /pub/dmjones.
+%
+% IMPLEMENTATION:
+%
+% \scale@stdsizes has at its argument a scaling factor. It uses \font@scale
+% to define \scaled@sizes to be the macro whose argument is the name of a
+% font, and which expands to the definitions of the standard \LaTeX{} sizes
+% for New Font Selection Schemes \new@fontshape command.
+%
+\message{\space\space\fileversion\space\space\filedate
+ \space\space<tvz>}
+\@ifundefined{new@psfontshape}{}{\endinput}
+\def\font@scale#1#2#3{\dimen@=#2\dimen@=#3\dimen@
+ \edef\scaled@sizes##1{\scaled@sizes{##1}<#1>##1 at\number\dimen@ sp}}
+\def\scale@stdsizes#1{%
+ \edef\scaled@sizes##1{}%
+ \font@scale{5}{5pt}{#1}%
+ \font@scale{6}{6pt}{#1}%
+ \font@scale{7}{7pt}{#1}%
+ \font@scale{8}{8pt}{#1}%
+ \font@scale{9}{9pt}{#1}%
+ \font@scale{10}{10pt}{#1}%
+ \font@scale{11}{10.95pt}{#1}%
+ \font@scale{12}{12pt}{#1}%
+ \font@scale{14}{14.4pt}{#1}%
+ \font@scale{17}{17.28pt}{#1}%
+ \font@scale{20}{20.74pt}{#1}%
+ \font@scale{25}{24.88pt}{#1}}
+\def\new@psfontshape#1#2#3#4{%
+ \new@fontshape{#1}{#2}{#3}{\scaled@sizes{#4}}{}}
+\def\new@psfont[#1]#2#3#4#5{%
+ \scale@stdsizes{#1}%
+ \new@psfontshape{#2}{#3}{#4}{#5}}
+\def\newpsfont{%
+ \@ifnextchar [{\new@psfont}{\new@psfont[1]}}
+\def\newpsfamily{%
+ \@ifnextchar [{\new@psfamily}{\new@psfamily[1]}}
+\def\new@psfamily[#1]#2#3{%
+ \scale@stdsizes{#1}%
+ \@for\@tempa:=#3\do{%
+ \edef\@tempb{\noexpand\new@psfontshape{#2}\@tempa}
+ \@tempb}%
+ \extra@def{#2}{}{}}
+\def\showxheight#1{%
+ \font\@tempfont=#1 at 10pt%
+ \typeout{^^J x-height of #1 at 10pt is \the\fontdimen5\@tempfont}}
+% The commands are added to \@preamblecmds to save memory.
+\begingroup
+ \def\do{\noexpand\do\noexpand}
+ \xdef\@preamblecmds{\@preamblecmds
+ \do\font@scale
+ \do\scale@stdsizes
+ \do\scaled@sizes
+ \do\new@psfontshape
+ \do\new@psfont
+ \do\newpsfont
+ \do\newpsfamily
+ \do\new@psfamily}
+\endgroup
+\endinput
+%% END npsfont.sty
diff --git a/macros/latex209/contrib/nfss-addons/palatinomath.sty b/macros/latex209/contrib/nfss-addons/palatinomath.sty
new file mode 100644
index 0000000000..944ec8bcdb
--- /dev/null
+++ b/macros/latex209/contrib/nfss-addons/palatinomath.sty
@@ -0,0 +1,23 @@
+% math fonts:
+\@ifundefined{new@fontshape}%
+{\@latexerr{This style option to use PostScript fonts can only be used%
+ with the new font selection scheme}\@eha%
+ \endinput}{}
+\message{Using PostScript Palatino font for math text}
+%
+\input psmath
+%
+\firstpsmathgroup{ppl}{m}{n}% palatino - roman
+\secondpsmathgroup{ppl}{m}{it}% palatino - slanted
+\thirdpsmathgroup{cmsy}{m}{n}% cmsy
+
+%\new@mathversion\mv@psbold
+%\define@mathgroup\mv@psbold{0}{ppl}{b}{n}
+%\define@mathgroup\mv@psbold{1}{ppl}{b}{it}
+%\define@mathgroup\mv@psbold{2}{cmsy}{b}{n}
+%\def\boldmath{\@nomath\boldmath
+% \mathversion{psbold}}
+\new@internalmathalphabet\mathbf\bffam{ppl}{b}{n}
+\def\pbf{\family\rmdefault
+ \series\bfdefault
+ \shape\default@shape\selectfont\mathbf}
diff --git a/macros/latex209/contrib/nfss-addons/pandora.sty b/macros/latex209/contrib/nfss-addons/pandora.sty
new file mode 100644
index 0000000000..6cebf3d9de
--- /dev/null
+++ b/macros/latex209/contrib/nfss-addons/pandora.sty
@@ -0,0 +1,343 @@
+%%
+\def\fileversion{1.0}
+\def\filedate{93/01/18}
+%%
+%% COPYRIGHT 1993 Martin Ward, Martin.Ward@durham.ac.uk
+%%
+%% DESCRIPTION:
+%% Set text in pandora and maths in euler fonts where possible.
+%% Uses the new font selection scheme.
+%%
+%% INSTALLATION:
+%% Put this file where your TeX looks for inputs, under the name
+%% pandora.sty.
+%%
+%% DOCUMENTATION:
+%% Include pandora as a LaTeX style option. Most text will be set in
+%% the pandora fonts (apart from caps/small caps, bold extended
+%% slanted/italic and semibold condensed, which will appear in Computer
+%% Modern).
+%% Requires the new font selection scheme.
+%%
+%% COPYING:
+%% This program is free software; you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by
+%% the Free Software Foundation; either version 2 of the License, or
+%% (at your option) any later version.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this program; if not, write to the Free Software
+%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%%
+%% CODE:
+\@ifundefined{selectfont}
+ {\@latexerr{`pandora' style option could only be used
+ with the new font selection scheme}\@eha
+ \endinput}{}
+
+\input{amsfonts.sty}
+
+%% Please don't change the next lines unless you know exactly what you
+%% are doing.
+%%
+%\def\default@shape{n}
+%\def\default@series{m}
+%\def\default@family{cmr}
+\def\default@family{pnr}
+%\def\default@errfont{cmsy10}
+%%
+%% Again, this is doubly dangerous bent.
+%%
+\fontfamily\default@family
+\fontseries\default@series
+\fontshape\default@shape
+
+
+
+\new@fontshape{pnr}{m}{n}{%
+ <5>pnr10 at4.82pt%
+ <6>pnr10 at5.79pt%
+ <7>pnr10 at6.94pt%
+ <8>pnr10 at8.33pt%
+ <9>pnr10 at9.13pt%
+ <10>pnr10%
+ <11>pnr10 at10.95pt%
+ <12>pnr10 at12pt%
+ <14>pnr10 at14.4pt%
+ <17>pnr10 at17.28pt%
+ <20>pnr10 at20.74pt%
+ <25>pnr10 at24.88pt}{}
+\extra@def{pnr}{}{}
+\new@fontshape{pnr}{m}{sl}{%
+ <5>pnsl10 at4.82pt%
+ <6>pnsl10 at5.79pt%
+ <7>pnsl10 at6.94pt%
+ <8>pnsl10 at8.33pt%
+ <9>pnsl10 at9.13pt%
+ <10>pnsl10%
+ <11>pnsl10 at10.95pt%
+ <12>pnsl10 at12pt%
+ <14>pnsl10 at14.4pt%
+ <17>pnsl10 at17.28pt%
+ <20>pnsl10 at20.74pt%
+ <25>pnsl10 at24.88pt}{}
+
+\subst@fontshape{pnr}{m}{it}{pnr}{m}{sl}
+
+% \new@fontshape{pnr}{m}{it}{%
+% <5>pnsl10 at4.82pt%
+% <6>pnsl10 at5.79pt%
+% <7>pnsl10 at6.94pt%
+% <8>pnsl10 at8.33pt%
+% <9>pnsl10 at9.13pt%
+% <10>pnsl10%
+% <11>pnsl10 at10.95pt%
+% <12>pnsl10 at12pt%
+% <14>pnsl10 at14.4pt%
+% <17>pnsl10 at17.28pt%
+% <20>pnsl10 at20.74pt%
+% <25>pnsl10 at24.88pt}{}
+
+% Hmmm... can't find a Pandora small caps, use cmsc for now:
+\subst@fontshape{pnr}{m}{sc}{cmr}{m}{sc}
+
+% \new@fontshape{pnr}{m}{sc}{%
+% <5>cmsl10 at4.82pt%
+% <6>cmsl10 at5.79pt%
+% <7>cmsl10 at6.94pt%
+% <8>cmsl10 at8.33pt%
+% <9>cmsl10 at9.13pt%
+% <10>cmsl10%
+% <11>cmsl10 at10.95pt%
+% <12>cmsl10 at12pt%
+% <14>cmsl10 at14.4pt%
+% <17>cmsl10 at17.28pt%
+% <20>cmsl10 at20.74pt%
+% <25>cmsl10 at24.88pt}{}
+
+\new@fontshape{pnr}{b}{n}{%
+ <5>pnb10 at4.82pt%
+ <6>pnb10 at5.79pt%
+ <7>pnb10 at6.94pt%
+ <8>pnb10 at8.33pt%
+ <9>pnb10 at9.13pt%
+ <10>pnb10%
+ <11>pnb10 at10.95pt%
+ <12>pnb10 at12pt%
+ <14>pnb10 at14.4pt%
+ <17>pnb10 at17.28pt%
+ <20>pnb10 at20.74pt%
+ <25>pnb10 at24.88pt}{}
+
+%%%%%%%%% bold extended series
+\subst@fontshape{pnr}{bx}{n}{pnr}{b}{n}
+\subst@fontshape{pnr}{bx}{sl}{cmr}{bx}{sl}
+\subst@fontshape{pnr}{bx}{it}{cmr}{bx}{sl}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Sans serif font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{pnss}{m}{n}{%
+ <5>pnss10 at4.82pt%
+ <6>pnss10 at5.79pt%
+ <7>pnss10 at6.94pt%
+ <8>pnss10 at8.33pt%
+ <9>pnss10 at9.13pt%
+ <10>pnss10%
+ <11>pnss10 at10.95pt%
+ <12>pnss10 at12pt%
+ <14>pnss10 at14.4pt%
+ <17>pnss10 at17.28pt%
+ <20>pnss10 at20.74pt%
+ <25>pnss10 at24.88pt}{}
+
+\subst@fontshape{pnss}{m}{it}{pnss}{m}{sl}
+
+\new@fontshape{pnss}{m}{sl}{%
+ <5>pnssi10 at4.82pt%
+ <6>pnssi10 at5.79pt%
+ <7>pnssi10 at6.94pt%
+ <8>pnssi10 at8.33pt%
+ <9>pnssi10 at9.13pt%
+ <10>pnssi10%
+ <11>pnssi10 at10.95pt%
+ <12>pnssi10 at12pt%
+ <14>pnssi10 at14.4pt%
+ <17>pnssi10 at17.28pt%
+ <20>pnssi10 at20.74pt%
+ <25>pnssi10 at24.88pt}{}
+
+
+%%%%%%% Font/shape undefined, therefore substituted
+
+\subst@fontshape{pnss}{m}{sc}{cmr}{m}{sc}
+
+%%%%%%%% semibold condensed series
+\subst@fontshape{pnss}{sbc}{n}{cmr}{sbc}{n}
+
+%%%%%%%%% bold extended series
+
+\new@fontshape{pnss}{bx}{n}{%
+ <5>pnssb10 at4.82pt%
+ <6>pnssb10 at5.79pt%
+ <7>pnssb10 at6.94pt%
+ <8>pnssb10 at8.33pt%
+ <9>pnssb10 at9.13pt%
+ <10>pnssb10%
+ <11>pnssb10 at10.95pt%
+ <12>pnssb10 at12pt%
+ <14>pnssb10 at14.4pt%
+ <17>pnssb10 at17.28pt%
+ <20>pnssb10 at20.74pt%
+ <25>pnssb10 at24.88pt}{}
+
+
+\extra@def{pnss}{}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Typewriter font shapes
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\new@fontshape{pntt}{m}{n}{%
+ <5>pntt9 at4.82pt%
+ <6>pntt9 at5.79pt%
+ <7>pntt9 at6.94pt%
+ <8>pntt9 at8.33pt%
+ <9>pntt9%
+ <10>pntt9 at 10pt%
+ <11>pntt9 at10.95pt%
+ <12>pntt9 at12pt%
+ <14>pntt9 at14.4pt%
+ <17>pntt9 at17.28pt%
+ <20>pntt9 at20.74pt%
+ <25>pntt9 at24.88pt}{}
+
+
+\subst@fontshape{pntt}{m}{it}{cmtt}{m}{it}
+
+\subst@fontshape{pntt}{m}{sl}{cmtt}{m}{sl}
+
+\subst@fontshape{pntt}{m}{sc}{cmtt}{m}{sc}
+
+
+% From the Euler fonts designed by Hermann Zapf we need the families
+% `euler cursive'. (Others will follow in the finial version of this
+% option.)
+\new@fontshape{eur}{m}{n}{%
+ <5>eurm5%
+ <6>eurm6%
+ <7>eurm7%
+ <8>eurm8%
+ <9>eurm9%
+ <10>eurm10%
+ <11>eurm10 at10.95pt%
+ <12>eurm10 at12pt%
+ <14>eurm10 at14.4pt%
+ <17>eurm10 at17.28pt%
+ <20>eurm10 at20.74pt%
+ <25>eurm10 at24.88pt}{}
+% We will have to set a \verb+\skewchar+ but I don't know the right
+% value.
+\extra@def{eur}{\skewchar#1'177}{}
+%
+% Don Knuth re-designed some of the math extension symbols to blend
+% better with the euler fonts. So we have a font called `Euler
+% compatible extension font' available in 7 to 10pt.
+\new@fontshape{euex}{m}{n}{%
+ <5>1euex7%
+ <6>1euex7%
+ <7>euex7%
+ <8>euex8%
+ <9>euex9%
+ <10>euex10%
+ <11>1euex10%
+ <12>1euex10%
+ <14>1euex10%
+ <17>1euex10%
+ <20>1euex10%
+ <25>1euex10}{}
+%
+\extra@def{euex}{}{}
+
+\new@mathversion\mv@euler
+% Now we define the basic {\em math groups\/} for the new version,
+% i.e.\ the groups 0 to 3.
+\define@mathgroup\mv@euler{0}
+ {pnr}{m}{n}
+\define@mathgroup\mv@euler{1}
+ {eur}{m}{n}
+\define@mathgroup\mv@euler{2}
+ {cmsy}{m}{n}
+
+% We also add a special math group to the euler version which
+% contains the redesigned math symbols. Since we don't assume that
+% this version has to live in coexistance with the `normal' or `bold'
+% version we don't add this group to the other versions.
+\new@mathgroup\euex@group
+\define@mathgroup\mv@euler\euex@group
+ {euex}{m}{n}
+%
+% To set up the math version properly we have to reset some
+% \verb+\mathcode+s. We have to take, for example, digits in math
+% from the math group number one, i.e.\ from the euler cursive font.
+% If we do this globally switching back to, let's say, \LaTeX{}s
+% normal version will produces an undesired effect: we will then get
+% oldstyle numerals in math.
+%
+% We will leave this problem open at the moment until there is more
+% experience with this new font selection scheme. After all, it does
+% not seem a very good idea to use such incompatible math versions
+% together in one document.
+%
+% So here we are, re-arranging some of the internal tables:
+\mathcode`\0="7130
+\mathcode`\1="7131
+\mathcode`\2="7132
+\mathcode`\3="7133
+\mathcode`\4="7134
+\mathcode`\5="7135
+\mathcode`\6="7136
+\mathcode`\7="7137
+\mathcode`\8="7138
+\mathcode`\9="7139
+%
+% And here are some example for using the symbols from the special
+% extension font. We use \verb+\hexnumber@+ to get the unknown assignment to
+% \verb+\euex@group+ as a hexadecimal number into the macro \verb+\@tempa+.
+\edef\@tempa{\hexnumber@\euex@group}
+\mathchardef\intop="1\@tempa 52
+\mathchardef\ointop="1\@tempa 48
+\mathchardef\sum="1\@tempa 50
+\mathchardef\prod="1\@tempa 51
+%
+% Since numbers for footnotes are text numbers and not math
+% formulas we prefere shapes comming from Concrete roman (like
+% 12345) instead of $12345$. So we have to change the footnote mark
+% generation to avoid using math mode.
+\def\@makefnmark{\raise 1ex\hbox{\scriptsize\@thefnmark}}
+%
+%
+\mathversion{euler}
+
+
+%% switch to Pandora Roman family:
+\family{pnr}\selectfont%
+\renewcommand{\rmdefault}{pnr}%
+
+%% Make the msam and msbm fonts available to the "euler" math version:
+\define@mathgroup\mv@euler\msa@group{msa}{m}{n}%
+\define@mathgroup\mv@euler\msb@group{msb}{m}{n}%
+
+
+
diff --git a/macros/latex209/contrib/nfss-addons/psfonts.sty b/macros/latex209/contrib/nfss-addons/psfonts.sty
new file mode 100644
index 0000000000..0d5cc8394c
--- /dev/null
+++ b/macros/latex209/contrib/nfss-addons/psfonts.sty
@@ -0,0 +1,319 @@
+%
+% Definition of the PostScript fonts that are known to Rokicki's dvips
+% Written by Dick van Soest
+%
+%%
+%% The format of a font/shape definition is as follows:
+%%
+%% \new@fontshape{family}{series}{shape}%
+%% {<size_1>external_font_1%
+%% <size_2>external_font_2%
+%% ...
+%% <size_n>external_font_n}{}
+%%
+%% (Don't forget the final {} !)
+%%
+%% family : Name of font family like cmr etc.
+%% series : Weight and width of the font in 1 to 4 letter
+%% abbreviations. A table is given in the tugboat article
+%% distributed together with this file.
+%% shape : Either n (normal), it (italic), sc (small caps), sl
+%% (slanted) or u (upright italic).
+%% <size_i> : The size in printer points. Standard LaTeX supports 5,
+%% 6, 7, 8, 9, 10, 11, 12, 14, 17, 20, 25 corresponding to
+%% \tiny, \scriptsize and so on. The angle brackets are
+%% part of the syntax!
+%%
+%% external_font_i : The name of the external font in your font
+%% library. If the font/shape is not available in a
+%% certain size you may use the name of a replacement
+%% font. E.g. one can substitute cmr5 for cmti.. which is
+%% only available in size 7 and higher. If you put a `1'
+%% in front of the name of the font a warning message will
+%% be produced (saying that the font has been substituted
+%% for the real one) when you use it for the first time.
+%% Below you can find examples of this mechanism.
+%%
+%% For font/shape combinations which aren't available at all like
+%% computer modern sans serif small caps a suitable default will be
+%% used automatically unless you specify a substitution yourself with
+%% the \subst@fontshape command.
+%%
+%% It syntax is as follows:
+%%
+%% \subst@fontshape{family}{series}{shape}%
+%% {subst_family}{subst_series}{subst_shape}
+%%
+%% This might be necessary if the automatically selected default does
+%% not match your needs. For example: the font shape choosen instead
+%% of `computer modern sans serif small caps' would be `computer
+%% modern sans serif normal'. With a \subst@fontshape command you can
+%% change this, for example, to `computer modern roman small caps' as
+%% we did below. (If you don't like this remove this line in your
+%% *copy* of this file.)
+%%
+%% Finally, for every family there is an \extra@def macro. It defines
+%% special action to be done at load time for every font of the family.
+%% In most cases you can simply write
+%%
+%% \extra@def{family}{}{}
+%%
+%% In this file it is used to suppress hyphenation for typewriter
+%% fonts (see \extra@def{cmtt}... below) and to set the \skewchar
+%% for math fonts (see \extra@def{cmm}... and \extra@def{cmsy}...).
+%%
+%------------------------------------------------------------------------
+% Possible series:
+%
+% Weight class
+% ul ultra light
+% el extra light
+% l light
+% sl semi light
+% m medium (normal)
+% sb semi bold
+% b bold
+% eb extra bold
+% ub ultra bold
+%
+% Width class
+% uc ultra condensed (50%)
+% ec extra condensed (62.5%)
+% c condensed (75%)
+% sc semi condensed (87.5%)
+% m medium (normal) (100%)
+% sx semi expanded (112.5%)
+% x expanded (125%)
+% ex extra expanded (150%)
+% ux ultra expanded (200%)
+%
+% To combine the abbreviations in the \series command, weight is used
+% first and any instance of medium is dropped except when weight and
+% width are both medium. In this case one single m is used. So bold
+% expanded would be bx whereas medium expanded would be x.
+%
+% ------------------------------------------------------------------------
+%
+% Possible shapes:
+% n normal
+% it italic
+% sc small caps
+% sl slanted
+% u upright italic
+%
+%------------------------------------------------------------------------
+% Definition of a macro to make things easier to define - Dick
+% #1 is the name of the family
+% #2 is the name of the series
+% #3 is the name of the shape
+% #4 is the name of the TFM file
+\@ifundefined{new@fontshape}
+ {\errmessage{The style option `psfonts' does not make sense if you
+ do not use the new font selection scheme.}
+ \endinput}
+ {}
+\@ifundefined{@psfontsloaded}{}{\endinput}
+
+\def\postscriptdefinefont#1#2#3#4{%
+ \new@fontshape{#1}{#2}{#3}{%
+ <5>#4 at5pt%
+ <6>#4 at6pt%
+ <7>#4 at7pt%
+ <8>#4 at8pt%
+ <9>#4 at9pt%
+ <10>#4 at10pt%
+ <11>#4 at10.95pt%
+ <12>#4 at12pt%
+ <14>#4 at14.4pt%
+ <17>#4 at17.28pt%
+ <20>#4 at20.74pt%
+ <25>#4 at24.88pt}{}}
+%
+%
+%% ********************************************************************
+%%
+%% AvantGarde
+%%
+%% ********************************************************************
+%% Series: medium Shape: normal
+\postscriptdefinefont{pag}{m}{n}{pagk}
+%% Series: medium Shape: small caps
+\postscriptdefinefont{pag}{m}{sc}{pagkc}
+%% Series: medium Shape: oblique
+\postscriptdefinefont{pag}{m}{sl}{pagko}
+%% Series: bold Shape: normal
+\postscriptdefinefont{pag}{b}{n}{pagd}
+%% Series: bold Shape: oblique
+\postscriptdefinefont{pag}{b}{sl}{pagdo}
+\extra@def{pag}{}{}
+\subst@fontshape{pag}{m}{it}{pag}{m}{sl}
+\subst@fontshape{pag}{b}{it}{pag}{b}{sl}
+%
+%% ********************************************************************
+%%
+%% Bookman
+%%
+%% ********************************************************************
+%% Series: bold Shape: normal
+\postscriptdefinefont{pbk}{b}{n}{pbkd}
+%% Series: bold Shape: italic
+\postscriptdefinefont{pbk}{b}{it}{pbkdi}
+%% Series: medium Shape: normal
+\postscriptdefinefont{pbk}{m}{n}{pbkl}
+%% Series: medium Shape: small caps
+\postscriptdefinefont{pbk}{m}{sc}{pbklc}
+%% Series: medium Shape: italic
+\postscriptdefinefont{pbk}{m}{it}{pbkli}
+\extra@def{pbk}{}{}
+\subst@fontshape{pbk}{m}{sl}{pbk}{m}{it}
+\subst@fontshape{pbk}{b}{sl}{pbk}{b}{it}
+%
+%% ********************************************************************
+%%
+%% Courier
+%%
+%% ********************************************************************
+%% Series: bold Shape: normal
+\postscriptdefinefont{pcr}{b}{n}{pcrb}
+%% Series: bold Shape: oblique
+\postscriptdefinefont{pcr}{b}{sl}{pcrbo}
+%% Series: medium Shape: normal
+\postscriptdefinefont{pcr}{m}{n}{pcrr}
+%% Series: medium Shape: oblique
+\postscriptdefinefont{pcr}{m}{sl}{pcrro}
+\extra@def{pcr}{}{}
+\subst@fontshape{pcr}{m}{it}{pcr}{m}{sl}
+\subst@fontshape{pcr}{b}{it}{pcr}{b}{sl}
+\subst@fontshape{pcr}{m}{sc}{pcr}{m}{sc}
+%
+%% ********************************************************************
+%%
+%% Helvetica
+%%
+%% ********************************************************************
+%% Series: bold Shape: normal
+\postscriptdefinefont{phv}{b}{n}{phvb}
+%% Series: bold Shape: oblique
+\postscriptdefinefont{phv}{b}{sl}{phvbo}
+%% Series: bold condensed Shape: normal
+\postscriptdefinefont{phv}{bc}{n}{phvbrn}
+%% Series: bold condensed Shape: oblique
+\postscriptdefinefont{phv}{bc}{sl}{phvbon}
+%% Series: condensed Shape: oblique
+\postscriptdefinefont{phv}{c}{sl}{phvron}
+%% Series: condensed Shape: normal
+\postscriptdefinefont{phv}{c}{n}{phvrrn}
+%% Series: medium Shape: oblique
+\postscriptdefinefont{phv}{m}{sl}{phvro}
+%% Series: medium Shape: normal
+\postscriptdefinefont{phv}{m}{n}{phvr}
+%% Series: medium Shape: small caps
+\postscriptdefinefont{phv}{m}{sc}{phvrc}
+\extra@def{phv}{}{}
+\subst@fontshape{phv}{m}{it}{phv}{m}{sl}
+\subst@fontshape{phv}{b}{it}{phv}{b}{sl}
+\subst@fontshape{phv}{bc}{it}{phv}{bc}{sl}
+\subst@fontshape{phv}{c}{it}{phv}{c}{sl}
+%
+%% ********************************************************************
+%%
+%% NewCenturySchoolbook
+%%
+%% ********************************************************************
+% Series: bold Shape: normal
+\postscriptdefinefont{pncs}{b}{n}{pncb}
+% Series: bold Shape: italic
+\postscriptdefinefont{pncs}{b}{it}{pncbi}
+% Series: medium Shape: italic
+\postscriptdefinefont{pncs}{m}{it}{pncri}
+%% Series: medium Shape: normal
+\postscriptdefinefont{pncs}{m}{n}{pncr}
+%% Series: medium Shape: small caps
+\postscriptdefinefont{pncs}{m}{sc}{pncrc}
+\extra@def{pncs}{}{}
+\subst@fontshape{pncs}{m}{sl}{pncs}{m}{it}
+\subst@fontshape{pncs}{b}{sl}{pncs}{b}{it}
+%
+%% ********************************************************************
+%%
+%% Palatino
+%%
+%% ********************************************************************
+%% Series: bold Shape: normal
+\postscriptdefinefont{ppl}{b}{n}{pplb}
+%% Series: bold Shape: italic
+\postscriptdefinefont{ppl}{b}{it}{pplbi}
+%% Series: bold Shape: unslanted
+\postscriptdefinefont{ppl}{b}{u}{pplbu}
+%% Series: condensed Shape: normal
+\postscriptdefinefont{ppl}{c}{n}{pplrrn}
+%% Series: expanded Shape: normal
+\postscriptdefinefont{ppl}{x}{n}{pplrre}
+%% Series: medium Shape: italic
+\postscriptdefinefont{ppl}{m}{it}{pplri}
+%% Series: medium Shape: slanted
+\postscriptdefinefont{ppl}{m}{sl}{pplro}
+%% Series: medium Shape: normal
+\postscriptdefinefont{ppl}{m}{n}{pplr}
+%% Series: medium Shape: small caps
+\postscriptdefinefont{ppl}{m}{sc}{pplrc}
+%% Series: medium Shape: unslanted
+\postscriptdefinefont{ppl}{m}{u}{pplru}
+\extra@def{ppl}{}{}
+\subst@fontshape{ppl}{b}{sl}{ppl}{b}{it}
+%
+%% ********************************************************************
+%%
+%% Symbol
+%%
+%% ********************************************************************
+%% Family: symbol
+%% Series: medium Shape: normal
+\postscriptdefinefont{psy}{m}{n}{psyr}
+%% Series: medium Shape: slanted
+\postscriptdefinefont{psy}{m}{sl}{psyro}
+\extra@def{psy}{}{}
+%
+%% ********************************************************************
+%%
+%% Times
+%%
+%% ********************************************************************
+%% Series: bold Shape: normal
+\postscriptdefinefont{ptm}{b}{n}{ptmb}
+%% Series: bold Shape: italic
+\postscriptdefinefont{ptm}{b}{it}{ptmbi}
+%% Series: condensed Shape: normal
+\postscriptdefinefont{ptm}{c}{n}{ptmrrn}
+%% Series: expanded Shape: normal
+\postscriptdefinefont{ptm}{x}{n}{ptmrre}
+%% Series: medium Shape: italic
+\postscriptdefinefont{ptm}{m}{it}{ptmri}
+%% Series: medium Shape: slanted
+\postscriptdefinefont{ptm}{m}{sl}{ptmro}
+%% Series: medium Shape: normal
+\postscriptdefinefont{ptm}{m}{n}{ptmr}
+%% Series: medium Shape: smallcaps
+\postscriptdefinefont{ptm}{m}{sc}{ptmrc}
+\extra@def{ptm}{}{}
+\subst@fontshape{ptm}{b}{sl}{ptm}{b}{it}
+%
+%% ********************************************************************
+%%
+%% Zapf Chancery
+%%
+%% ********************************************************************
+%% Series: medium Shape: it
+\postscriptdefinefont{pzc}{m}{it}{pzcmi}
+\extra@def{pzc}{}{}
+%
+%% ********************************************************************
+%%
+%% Zapf Dingbats
+%%
+%% ********************************************************************
+%% Series: medium Shape: normal
+\postscriptdefinefont{pzd}{m}{n}{pzdr}
+\extra@def{pzd}{}{}
+%
+\def\@psfontsloaded{}
diff --git a/macros/latex209/contrib/nfss-addons/psfonts.tex b/macros/latex209/contrib/nfss-addons/psfonts.tex
new file mode 100644
index 0000000000..74025abd2c
--- /dev/null
+++ b/macros/latex209/contrib/nfss-addons/psfonts.tex
@@ -0,0 +1,146 @@
+% psfonts.tex
+%
+% Frank Jensen (September 30, 1990)
+
+\ifx\psfontsloaded\relax
+\else \let\psfontsloaded=\relax
+
+\def\declare@font #1#2#3#4%
+ {\new@fontshape{#1}{#2}{#3}{%
+ <5>#4 at5pt%
+ <6>#4 at6pt%
+ <7>#4 at7pt%
+ <8>#4 at8pt%
+ <9>#4 at9pt%
+ <10>#4 at10pt%
+ <11>#4 at10.95445pt%
+ <12>#4 at12pt%
+ <14>#4 at14.4pt%
+ <17>#4 at17.28pt%
+ <20>#4 at20.736pt%
+ <25>#4 at24.8832pt}{}}
+
+% Times Family
+
+\declare@font{times}{m}{n}{ptmr}
+\declare@font{times}{b}{n}{ptmb}
+\declare@font{times}{b}{it}{ptmbi}
+\declare@font{times}{c}{n}{ptmrrn}
+\declare@font{times}{m}{sc}{ptmrc}
+\declare@font{times}{m}{it}{ptmri}
+\declare@font{times}{m}{sl}{ptmro}
+\declare@font{times}{x}{n}{ptmrre}
+
+\extra@def{times}{}{}
+
+
+
+% Helvetica Family
+
+\declare@font{helvetica}{m}{n}{phvr}
+\declare@font{helvetica}{b}{n}{phvb}
+\declare@font{helvetica}{b}{it}{phvbo}
+\subst@fontshape{helvetica}{b}{sl}{helvetica}{b}{it}
+\declare@font{helvetica}{c}{n}{phvrrn}
+\declare@font{helvetica}{bc}{n}{phvbrn}
+\declare@font{helvetica}{bc}{it}{phvbon}
+\subst@fontshape{helvetica}{bc}{sl}{helvetica}{bc}{it}
+\declare@font{helvetica}{c}{it}{phvron}
+\subst@fontshape{helvetica}{c}{sl}{helvetica}{c}{it}
+\declare@font{helvetica}{m}{sc}{phvrc}
+\declare@font{helvetica}{m}{it}{phvro}
+\subst@fontshape{helvetica}{m}{sl}{helvetica}{m}{it}
+
+\extra@def{helvetica}{}{}
+
+
+
+% Bookman Family
+
+\declare@font{bookman}{m}{n}{pbkl}
+\declare@font{bookman}{b}{n}{pbkd}
+\declare@font{bookman}{b}{it}{pbkdi}
+\declare@font{bookman}{m}{sc}{pbklc}
+\declare@font{bookman}{m}{it}{pbkli}
+
+\extra@def{bookman}{}{}
+
+
+
+% New Century Schoolbook Family
+
+\declare@font{ncs}{m}{n}{pncr}
+\declare@font{ncs}{b}{n}{pncb}
+\declare@font{ncs}{b}{it}{pncbi}
+\declare@font{ncs}{m}{sc}{pncrc}
+\declare@font{ncs}{m}{it}{pncri}
+
+\extra@def{ncs}{}{}
+
+
+% Courier Family
+
+\declare@font{courier}{m}{n}{pcrr}
+\declare@font{courier}{b}{n}{pcrb}
+\declare@font{courier}{b}{it}{pcrbo}
+\declare@font{courier}{m}{it}{pcrro}
+
+\extra@def{courier}{\hyphenchar #1\m@ne}{}
+
+
+
+% Palatino Family
+
+\declare@font{palatino}{m}{n}{pplr}
+\declare@font{palatino}{b}{n}{pplb}
+\declare@font{palatino}{b}{it}{pplbi}
+\declare@font{palatino}{b}{u}{pplbu}
+\declare@font{palatino}{c}{n}{pplrrn}
+\declare@font{palatino}{m}{sc}{pplrc}
+\declare@font{palatino}{m}{it}{pplri}
+\declare@font{palatino}{m}{sl}{pplro}
+\declare@font{palatino}{m}{u}{pplru}
+\declare@font{palatino}{x}{n}{pplrre}
+
+\extra@def{palatino}{}{}
+
+
+
+% AvantGarde Family
+
+\declare@font{avantgarde}{m}{n}{pagk}
+\declare@font{avantgarde}{b}{n}{pagd}
+\declare@font{avantgarde}{b}{it}{pagdo}
+\subst@fontshape{avantgarde}{b}{sl}{avantgarde}{b}{it}
+\declare@font{avantgarde}{m}{sc}{pagkc}
+\declare@font{avantgarde}{m}{it}{pagko}
+\subst@fontshape{avantgarde}{m}{sl}{avantgarde}{m}{it}
+
+\extra@def{avantgarde}{}{}
+
+
+
+% Futura Family
+
+\declare@font{futura}{c}{n}{pfuc}
+\declare@font{futura}{bc}{n}{pfubc}
+\declare@font{futura}{bc}{sl}{pfuboc}
+\subst@fontshape{futura}{b}{it}{futura}{b}{sl}
+\declare@font{futura}{ebc}{n}{pfuxc}
+\declare@font{futura}{ebc}{sl}{pfuxoc}
+\declare@font{futura}{lc}{n}{pfulc}
+\subst@fontshape{futura}{m}{it}{futura}{m}{sl}
+
+\extra@def{futura}{}{}
+
+
+
+% Default settings
+
+\def\sfdefault{helvetica}
+\def\ttdefault{courier}
+
+\def\bfdefault{b}
+
+\fi
+\endinput
diff --git a/macros/latex209/contrib/nfss-addons/psmath.sty b/macros/latex209/contrib/nfss-addons/psmath.sty
new file mode 100644
index 0000000000..def9bbd6f4
--- /dev/null
+++ b/macros/latex209/contrib/nfss-addons/psmath.sty
@@ -0,0 +1,216 @@
+%%
+%% psmath.sty (Febuary 2 1991 Kresten Krab Thorup)
+%%
+
+%%
+%% BUGREPORTS: krab@iesd.auc.dk
+%%
+
+\message{`PostScript math' style option <february 2 1991>}
+
+\def\@declare@font #1#2#3#4%
+ {\new@fontshape{#1}{#2}{#3}{%
+ <5>#4 at4pt%
+ <6>#4 at5pt%
+ <7>#4 at6pt%
+ <8>#4 at7pt%
+ <9>#4 at8pt%
+ <10>#4 at9pt%
+ <11>#4 at10pt%
+ <12>#4 at11pt%
+ <14>#4 at12pt%
+ <17>#4 at14pt%
+ <20>#4 at17pt%
+ <25>#4 at20pt}{}}
+
+\@declare@font{pssymbol}{m}{it}{psyro}
+\@declare@font{pssymbol}{m}{n}{psyr}
+\extra@def{pssymbol}{}{}
+
+\let\@declare@font\relax
+
+\input psfonts
+
+%
+% Define the new math family
+%
+
+\new@mathversion\mv@times
+
+% Fonts we're going to use...
+
+\define@mathgroup\mv@times{0}
+ {times}{m}{n}
+\define@mathgroup\mv@times{1}
+ {times}{m}{it}
+\define@mathgroup\mv@times{2}
+ {cmsy}{m}{n}
+%\define@mathgroup\mv@times{3}
+% {cmex}{m}{n}
+
+
+\new@mathgroup\timsyi@group
+\define@mathgroup\mv@times\timsyi@group
+ {pssymbol}{m}{it}
+
+\new@mathgroup\timsyn@group
+\define@mathgroup\mv@times\timsyn@group
+ {pssymbol}{m}{n}
+
+\new@mathgroup\timi@group
+\define@mathgroup\mv@times\timi@group
+ {cmm}{m}{it}
+
+\new@mathgroup\lyfam@group
+ \define@mathgroup\mv@times\lyfam@group
+ {lasy}{m}{n}
+
+
+\edef\@tempa{\hexnumber@\timsyi@group} % Math chars from postscript
+ % font psyro
+% lowercase greek
+
+\mathchardef\alpha="0\@tempa 61
+\mathchardef\beta="0\@tempa 62
+\mathchardef\chi="0\@tempa 63
+\mathchardef\delta="0\@tempa 64
+\mathchardef\varepsilon="0\@tempa 65
+\mathchardef\phi="0\@tempa 66
+\mathchardef\gamma="0\@tempa 67
+\mathchardef\eta="0\@tempa 68
+\mathchardef\iota="0\@tempa 69
+\mathchardef\varphi="0\@tempa 6A
+\mathchardef\kappa="0\@tempa 6B
+\mathchardef\lambda="0\@tempa 6C
+\mathchardef\mu="0\@tempa 6D
+\mathchardef\nu="0\@tempa 6E
+\mathchardef\pi="0\@tempa 70
+\mathchardef\theta="0\@tempa 71
+\mathchardef\rho="0\@tempa 72
+\mathchardef\sigma="0\@tempa 73
+\mathchardef\tau="0\@tempa 74
+\mathchardef\upsilon="0\@tempa 75
+\mathchardef\varpi="0\@tempa 76
+\mathchardef\omega="0\@tempa 77
+\mathchardef\xi="0\@tempa 78
+\mathchardef\psi="0\@tempa 79
+\mathchardef\zeta="0\@tempa 7A
+\mathchardef\partial="0\@tempa B6
+\mathchardef\vartheta="0\@tempa 4A
+
+\edef\@tempa{\hexnumber@\timsyn@group} % Math chars from postscript
+ % font psyr
+\mathchardef\angle="0\@tempa D0
+\mathchardef\forall="0\@tempa 22
+\mathchardef\exists="0\@tempa 24
+\mathchardef\aleph="0\@tempa C0
+\mathchardef\Re="0\@tempa C2
+\mathchardef\Im="0\@tempa C1
+\mathchardef\wp="0\@tempa C3
+\mathchardef\nabla="0\@tempa D1
+\mathchardef\infty="0\@tempa A5
+
+\mathchardef\vee="2\@tempa DA
+\mathchardef\wedge="2\@tempa D9
+\mathchardef\cdot="2\@tempa D7
+\mathchardef\ast="2\@tempa 2A
+\mathcode`/="2\@tempa 2F
+\mathchardef\varsigma="0\@tempa 56
+
+\mathchardef\leftrightarrow="3\@tempa AB
+\mathchardef\leftarrow="3\@tempa AC
+\mathchardef\uparrow="3\@tempa AD
+\mathchardef\rightarrow="3\@tempa AE
+\mathchardef\downarrow="3\@tempa AF
+\mathchardef\Leftrightarrow="3\@tempa DB
+\mathchardef\Leftarrow="3\@tempa DC
+\mathchardef\Uparrow="3\@tempa DD
+\mathchardef\Rightarrow="3\@tempa DE
+\mathchardef\Downarrow="3\@tempa DF
+\mathchardef\ldots="3\@tempa BC
+
+\mathchardef\pm="3\@tempa B1
+\mathchardef\geq="3\@tempa B3
+\mathchardef\times="3\@tempa B4
+\mathchardef\div="3\@tempa B8
+\mathchardef\prime="3\@tempa A2
+\mathchardef\bullet="3\@tempa B7
+\mathchardef\equiv="3\@tempa BA
+\mathchardef\approx="3\@tempa BB
+\mathchardef\sim="3\@tempa 7E
+\mathchardef\mid="3\@tempa BD
+\mathchardef\otimes="3\@tempa C4
+\mathchardef\oplus="3\@tempa C5
+\mathchardef\cap="3\@tempa C7
+\mathchardef\cup="3\@tempa C8
+\mathchardef\supset="3\@tempa C9
+\mathchardef\supseteq="3\@tempa CA
+\mathchardef\subset="3\@tempa CC
+\mathchardef\subseteq="3\@tempa CD
+\mathchardef\in="3\@tempa CE
+
+\mathcode`\.="6\@tempa 2E
+\mathcode`\,="6\@tempa 2C
+\mathcode`\f="0\@tempa A6
+
+%
+% Handle the symbols that are missing in the PostScript fonts, to
+% complete family 1
+%
+
+\edef\@tempa{\hexnumber@\timi@group}
+
+\mathchardef\varrho="0\@tempa 25
+\def\vec{\mathaccent"0\@tempa 7E }
+\mathchardef\natural="0\@tempa 5C
+\mathchardef\epsilon="0\@tempa 0F
+\mathchardef\imath="0\@tempa 7B
+\mathchardef\jmath="0\@tempa 7C
+\mathchardef\ell="0\@tempa 60
+\mathchardef\flat="0\@tempa 5B
+\mathchardef\sharp="0\@tempa 5D
+%
+\mathchardef\star="2\@tempa 3F
+\mathchardef\triangleleft="2\@tempa 2E
+\mathchardef\triangleright="2\@tempa 2F
+%
+\mathchardef\smile="3\@tempa 5E
+\mathchardef\frown="3\@tempa 5F
+\mathchardef\leftharpoonup="3\@tempa 28
+\mathchardef\leftharpoondown="3\@tempa 29
+\mathchardef\rightharpoonup="3\@tempa 2A
+\mathchardef\rightharpoondown="3\@tempa 2B
+\mathchardef\lhook="3\@tempa 2C
+\mathchardef\rhook="3\@tempa 2D
+
+% pick up some symbols from the LaTeX symbol font...
+
+\edef\@tempa{\hexnumber@\lyfam@group}
+
+\mathchardef\mho="0\@tempa 30
+\mathchardef\Join="3\@tempa 31
+\mathchardef\Box="0\@tempa 32
+\mathchardef\Diamond="0\@tempa 33
+\mathchardef\leadsto="3\@tempa 3B
+\mathchardef\sqsubset="3\@tempa 3C
+\mathchardef\sqsupset="3\@tempa 3D
+\mathchardef\lhd="3\@tempa 01
+\mathchardef\unlhd="3\@tempa 02
+\mathchardef\rhd="3\@tempa 03
+\mathchardef\unrhd="3\@tempa 04
+
+\def\dots{\ifmmode\ldots\else$\ldots$\fi}
+
+\declare@font{zapf}{m}{it}{pzcmi}
+\extra@def{zapf}{}{}
+
+\newmathalphabet\zapf
+\addtoversion{times}{\zapf}{zapf}{m}{it}
+
+\gdef\cal#1{{\zapf{#1}}}
+%
+% 1 2 3 - GO!
+%
+\mathversion{times}
+%%
+%% End of file `psmath.sty'.
diff --git a/macros/latex209/contrib/oval/newcirc.mf b/macros/latex209/contrib/oval/newcirc.mf
new file mode 100644
index 0000000000..eaa0b7a41c
--- /dev/null
+++ b/macros/latex209/contrib/oval/newcirc.mf
@@ -0,0 +1,806 @@
+font_identifier "CIRCLEOV"; font_size 8pt#;
+font_coding_scheme:="LATEX CIRCLE";
+aspect_ratio#:=1;
+mode_setup;
+
+let cmchar=\; % cmchar should precede each character, for testing purposes
+
+thicknessone:=ceiling(0.4pt#*hppp); % the way rules thicknesses are done
+% thickness#:=thickness/hppp; % and let thickness# round to right value
+% NO, I deleted this BAD line! --- DEK, 9 Jul 87
+pickup pencircle scaled thicknessone; nibone:=savepen;
+pickup pencircle scaled 2thicknessone; nibtwo:=savepen;
+pickup pencircle scaled 3thicknessone; nibthree:=savepen;
+pickup pencircle scaled 4thicknessone; nibfour:=savepen;
+
+
+def qbeginchar (expr c, diam_sharp) =
+beginchar(c,.5*diam_sharp,.5*diam_sharp,0);
+enddef;
+
+def upleftchar(expr diam_sharp) =
+draw quartercircle rotated 90 scaled 4diam_sharp shifted (2diam_sharp,0);
+enddef;
+
+def downleftchar(expr diam_sharp) =
+draw quartercircle rotated 180 scaled 4diam_sharp
+ shifted (2diam_sharp,2diam_sharp);
+enddef;
+
+def uprightchar(expr diam_sharp) =
+draw quartercircle scaled 4diam_sharp;
+enddef;
+
+def downrightchar(expr diam_sharp) =
+draw quartercircle rotated 270 scaled 4diam_sharp shifted (0,2diam_sharp);
+enddef;
+
+cmchar "2pt, top left";
+qbeginchar(0,4pt#);
+pickup nibone;
+upleftchar(4pt#);
+endchar;
+
+cmchar "2pt, bottom left";
+qbeginchar(1,4pt#);
+pickup nibone;
+downleftchar(4pt#);
+endchar;
+
+cmchar "2pt, top right";
+qbeginchar(2,4pt#);
+pickup nibone;
+uprightchar(4pt#);
+endchar;
+
+cmchar "2pt, bottom right";
+qbeginchar(3,4pt#);
+pickup nibone;
+downrightchar(4pt#);
+endchar;
+
+cmchar "4pt, top left";
+qbeginchar(4,8pt#);
+pickup nibone;
+upleftchar(8pt#);
+endchar;
+
+cmchar "4pt, bottom left";
+qbeginchar(5,8pt#);
+pickup nibone;
+downleftchar(8pt#);
+endchar;
+
+cmchar "4pt, top right";
+qbeginchar(6,8pt#);
+pickup nibone;
+uprightchar(8pt#);
+endchar;
+
+cmchar "4pt, bottom right";
+qbeginchar(7,8pt#);
+pickup nibone;
+downrightchar(8pt#);
+endchar;
+
+cmchar "6pt, top left";
+qbeginchar(8,12pt#);
+pickup nibone;
+upleftchar(12pt#);
+endchar;
+
+cmchar "6pt, bottom left";
+qbeginchar(9,12pt#);
+pickup nibone;
+downleftchar(12pt#);
+endchar;
+
+cmchar "6pt, top right";
+qbeginchar(10,12pt#);
+pickup nibone;
+uprightchar(12pt#);
+endchar;
+
+cmchar "6pt, bottom right";
+qbeginchar(11,12pt#);
+pickup nibone;
+downrightchar(12pt#);
+endchar;
+
+cmchar "8pt, top left";
+qbeginchar(12,16pt#);
+pickup nibone;
+upleftchar(16pt#);
+endchar;
+
+cmchar "8pt, bottom left";
+qbeginchar(13,16pt#);
+pickup nibone;
+downleftchar(16pt#);
+endchar;
+
+cmchar "8pt, top right";
+qbeginchar(14,16pt#);
+pickup nibone;
+uprightchar(16pt#);
+endchar;
+
+cmchar "8pt, bottom right";
+qbeginchar(15,16pt#);
+pickup nibone;
+downrightchar(16pt#);
+endchar;
+
+cmchar "10pt, top left";
+qbeginchar(16,20pt#);
+pickup nibone;
+upleftchar(20pt#);
+endchar;
+
+cmchar "10pt, bottom left";
+qbeginchar(17,20pt#);
+pickup nibone;
+downleftchar(20pt#);
+endchar;
+
+cmchar "10pt, top right";
+qbeginchar(18,20pt#);
+pickup nibone;
+uprightchar(20pt#);
+endchar;
+
+cmchar "10pt, bottom right";
+qbeginchar(19,20pt#);
+pickup nibone;
+downrightchar(20pt#);
+endchar;
+
+cmchar "12pt, top left";
+qbeginchar(20,24pt#);
+pickup nibone;
+upleftchar(24pt#);
+endchar;
+
+cmchar "12pt, bottom left";
+qbeginchar(21,24pt#);
+pickup nibone;
+downleftchar(24pt#);
+endchar;
+
+cmchar "12pt, top right";
+qbeginchar(22,24pt#);
+pickup nibone;
+uprightchar(24pt#);
+endchar;
+
+cmchar "12pt, bottom right";
+qbeginchar(23,24pt#);
+pickup nibone;
+downrightchar(24pt#);
+endchar;
+
+cmchar "14pt, top left";
+qbeginchar(24,28pt#);
+pickup nibone;
+upleftchar(28pt#);
+endchar;
+
+cmchar "14pt, bottom left";
+qbeginchar(25,28pt#);
+pickup nibone;
+downleftchar(28pt#);
+endchar;
+
+cmchar "14pt, top right";
+qbeginchar(26,28pt#);
+pickup nibone;
+uprightchar(28pt#);
+endchar;
+
+cmchar "14pt, bottom right";
+qbeginchar(27,28pt#);
+pickup nibone;
+downrightchar(28pt#);
+endchar;
+
+cmchar "16pt, top left";
+qbeginchar(28,32pt#);
+pickup nibone;
+upleftchar(32pt#);
+endchar;
+
+cmchar "16pt, bottom left";
+qbeginchar(29,32pt#);
+pickup nibone;
+downleftchar(32pt#);
+endchar;
+
+cmchar "16pt, top right";
+qbeginchar(30,32pt#);
+pickup nibone;
+uprightchar(32pt#);
+endchar;
+
+cmchar "16pt, bottom right";
+qbeginchar(31,32pt#);
+pickup nibone;
+downrightchar(32pt#);
+endchar;
+
+cmchar "2pt, top left";
+qbeginchar(32+0,4pt#);
+pickup nibtwo;
+upleftchar(4pt#);
+endchar;
+
+cmchar "2pt, bottom left";
+qbeginchar(32+1,4pt#);
+pickup nibtwo;
+downleftchar(4pt#);
+endchar;
+
+cmchar "2pt, top right";
+qbeginchar(32+2,4pt#);
+pickup nibtwo;
+uprightchar(4pt#);
+endchar;
+
+cmchar "2pt, bottom right";
+qbeginchar(32+3,4pt#);
+pickup nibtwo;
+downrightchar(4pt#);
+endchar;
+
+cmchar "4pt, top left";
+qbeginchar(32+4,8pt#);
+pickup nibtwo;
+upleftchar(8pt#);
+endchar;
+
+cmchar "4pt, bottom left";
+qbeginchar(32+5,8pt#);
+pickup nibtwo;
+downleftchar(8pt#);
+endchar;
+
+cmchar "4pt, top right";
+qbeginchar(32+6,8pt#);
+pickup nibtwo;
+uprightchar(8pt#);
+endchar;
+
+cmchar "4pt, bottom right";
+qbeginchar(32+7,8pt#);
+pickup nibtwo;
+downrightchar(8pt#);
+endchar;
+
+cmchar "6pt, top left";
+qbeginchar(32+8,12pt#);
+pickup nibtwo;
+upleftchar(12pt#);
+endchar;
+
+cmchar "6pt, bottom left";
+qbeginchar(32+9,12pt#);
+pickup nibtwo;
+downleftchar(12pt#);
+endchar;
+
+cmchar "6pt, top right";
+qbeginchar(32+10,12pt#);
+pickup nibtwo;
+uprightchar(12pt#);
+endchar;
+
+cmchar "6pt, bottom right";
+qbeginchar(32+11,12pt#);
+pickup nibtwo;
+downrightchar(12pt#);
+endchar;
+
+cmchar "8pt, top left";
+qbeginchar(32+12,16pt#);
+pickup nibtwo;
+upleftchar(16pt#);
+endchar;
+
+cmchar "8pt, bottom left";
+qbeginchar(32+13,16pt#);
+pickup nibtwo;
+downleftchar(16pt#);
+endchar;
+
+cmchar "8pt, top right";
+qbeginchar(32+14,16pt#);
+pickup nibtwo;
+uprightchar(16pt#);
+endchar;
+
+cmchar "8pt, bottom right";
+qbeginchar(32+15,16pt#);
+pickup nibtwo;
+downrightchar(16pt#);
+endchar;
+
+cmchar "10pt, top left";
+qbeginchar(32+16,20pt#);
+pickup nibtwo;
+upleftchar(20pt#);
+endchar;
+
+cmchar "10pt, bottom left";
+qbeginchar(32+17,20pt#);
+pickup nibtwo;
+downleftchar(20pt#);
+endchar;
+
+cmchar "10pt, top right";
+qbeginchar(32+18,20pt#);
+pickup nibtwo;
+uprightchar(20pt#);
+endchar;
+
+cmchar "10pt, bottom right";
+qbeginchar(32+19,20pt#);
+pickup nibtwo;
+downrightchar(20pt#);
+endchar;
+
+cmchar "12pt, top left";
+qbeginchar(32+20,24pt#);
+pickup nibtwo;
+upleftchar(24pt#);
+endchar;
+
+cmchar "12pt, bottom left";
+qbeginchar(32+21,24pt#);
+pickup nibtwo;
+downleftchar(24pt#);
+endchar;
+
+cmchar "12pt, top right";
+qbeginchar(32+22,24pt#);
+pickup nibtwo;
+uprightchar(24pt#);
+endchar;
+
+cmchar "12pt, bottom right";
+qbeginchar(32+23,24pt#);
+pickup nibtwo;
+downrightchar(24pt#);
+endchar;
+
+cmchar "14pt, top left";
+qbeginchar(32+24,28pt#);
+pickup nibtwo;
+upleftchar(28pt#);
+endchar;
+
+cmchar "14pt, bottom left";
+qbeginchar(32+25,28pt#);
+pickup nibtwo;
+downleftchar(28pt#);
+endchar;
+
+cmchar "14pt, top right";
+qbeginchar(32+26,28pt#);
+pickup nibtwo;
+uprightchar(28pt#);
+endchar;
+
+cmchar "14pt, bottom right";
+qbeginchar(32+27,28pt#);
+pickup nibtwo;
+downrightchar(28pt#);
+endchar;
+
+cmchar "16pt, top left";
+qbeginchar(32+28,32pt#);
+pickup nibtwo;
+upleftchar(32pt#);
+endchar;
+
+cmchar "16pt, bottom left";
+qbeginchar(32+29,32pt#);
+pickup nibtwo;
+downleftchar(32pt#);
+endchar;
+
+cmchar "16pt, top right";
+qbeginchar(32+30,32pt#);
+pickup nibtwo;
+uprightchar(32pt#);
+endchar;
+
+cmchar "16pt, bottom right";
+qbeginchar(32+31,32pt#);
+pickup nibtwo;
+downrightchar(32pt#);
+endchar;
+
+cmchar "2pt, top left";
+qbeginchar(64+0,4pt#);
+pickup nibthree;
+upleftchar(4pt#);
+endchar;
+
+cmchar "2pt, bottom left";
+qbeginchar(64+1,4pt#);
+pickup nibthree;
+downleftchar(4pt#);
+endchar;
+
+cmchar "2pt, top right";
+qbeginchar(64+2,4pt#);
+pickup nibthree;
+uprightchar(4pt#);
+endchar;
+
+cmchar "2pt, bottom right";
+qbeginchar(64+3,4pt#);
+pickup nibthree;
+downrightchar(4pt#);
+endchar;
+
+cmchar "4pt, top left";
+qbeginchar(64+4,8pt#);
+pickup nibthree;
+upleftchar(8pt#);
+endchar;
+
+cmchar "4pt, bottom left";
+qbeginchar(64+5,8pt#);
+pickup nibthree;
+downleftchar(8pt#);
+endchar;
+
+cmchar "4pt, top right";
+qbeginchar(64+6,8pt#);
+pickup nibthree;
+uprightchar(8pt#);
+endchar;
+
+cmchar "4pt, bottom right";
+qbeginchar(64+7,8pt#);
+pickup nibthree;
+downrightchar(8pt#);
+endchar;
+
+cmchar "6pt, top left";
+qbeginchar(64+8,12pt#);
+pickup nibthree;
+upleftchar(12pt#);
+endchar;
+
+cmchar "6pt, bottom left";
+qbeginchar(64+9,12pt#);
+pickup nibthree;
+downleftchar(12pt#);
+endchar;
+
+cmchar "6pt, top right";
+qbeginchar(64+10,12pt#);
+pickup nibthree;
+uprightchar(12pt#);
+endchar;
+
+cmchar "6pt, bottom right";
+qbeginchar(64+11,12pt#);
+pickup nibthree;
+downrightchar(12pt#);
+endchar;
+
+cmchar "8pt, top left";
+qbeginchar(64+12,16pt#);
+pickup nibthree;
+upleftchar(16pt#);
+endchar;
+
+cmchar "8pt, bottom left";
+qbeginchar(64+13,16pt#);
+pickup nibthree;
+downleftchar(16pt#);
+endchar;
+
+cmchar "8pt, top right";
+qbeginchar(64+14,16pt#);
+pickup nibthree;
+uprightchar(16pt#);
+endchar;
+
+cmchar "8pt, bottom right";
+qbeginchar(64+15,16pt#);
+pickup nibthree;
+downrightchar(16pt#);
+endchar;
+
+cmchar "10pt, top left";
+qbeginchar(64+16,20pt#);
+pickup nibthree;
+upleftchar(20pt#);
+endchar;
+
+cmchar "10pt, bottom left";
+qbeginchar(64+17,20pt#);
+pickup nibthree;
+downleftchar(20pt#);
+endchar;
+
+cmchar "10pt, top right";
+qbeginchar(64+18,20pt#);
+pickup nibthree;
+uprightchar(20pt#);
+endchar;
+
+cmchar "10pt, bottom right";
+qbeginchar(64+19,20pt#);
+pickup nibthree;
+downrightchar(20pt#);
+endchar;
+
+cmchar "12pt, top left";
+qbeginchar(64+20,24pt#);
+pickup nibthree;
+upleftchar(24pt#);
+endchar;
+
+cmchar "12pt, bottom left";
+qbeginchar(64+21,24pt#);
+pickup nibthree;
+downleftchar(24pt#);
+endchar;
+
+cmchar "12pt, top right";
+qbeginchar(64+22,24pt#);
+pickup nibthree;
+uprightchar(24pt#);
+endchar;
+
+cmchar "12pt, bottom right";
+qbeginchar(64+23,24pt#);
+pickup nibthree;
+downrightchar(24pt#);
+endchar;
+
+cmchar "14pt, top left";
+qbeginchar(64+24,28pt#);
+pickup nibthree;
+upleftchar(28pt#);
+endchar;
+
+cmchar "14pt, bottom left";
+qbeginchar(64+25,28pt#);
+pickup nibthree;
+downleftchar(28pt#);
+endchar;
+
+cmchar "14pt, top right";
+qbeginchar(64+26,28pt#);
+pickup nibthree;
+uprightchar(28pt#);
+endchar;
+
+cmchar "14pt, bottom right";
+qbeginchar(64+27,28pt#);
+pickup nibthree;
+downrightchar(28pt#);
+endchar;
+
+cmchar "16pt, top left";
+qbeginchar(64+28,32pt#);
+pickup nibthree;
+upleftchar(32pt#);
+endchar;
+
+cmchar "16pt, bottom left";
+qbeginchar(64+29,32pt#);
+pickup nibthree;
+downleftchar(32pt#);
+endchar;
+
+cmchar "16pt, top right";
+qbeginchar(64+30,32pt#);
+pickup nibthree;
+uprightchar(32pt#);
+endchar;
+
+cmchar "16pt, bottom right";
+qbeginchar(64+31,32pt#);
+pickup nibthree;
+downrightchar(32pt#);
+endchar;
+
+cmchar "2pt, top left";
+qbeginchar(96+0,4pt#);
+pickup nibfour;
+upleftchar(4pt#);
+endchar;
+
+cmchar "2pt, bottom left";
+qbeginchar(96+1,4pt#);
+pickup nibfour;
+downleftchar(4pt#);
+endchar;
+
+cmchar "2pt, top right";
+qbeginchar(96+2,4pt#);
+pickup nibfour;
+uprightchar(4pt#);
+endchar;
+
+cmchar "2pt, bottom right";
+qbeginchar(96+3,4pt#);
+pickup nibfour;
+downrightchar(4pt#);
+endchar;
+
+cmchar "4pt, top left";
+qbeginchar(96+4,8pt#);
+pickup nibfour;
+upleftchar(8pt#);
+endchar;
+
+cmchar "4pt, bottom left";
+qbeginchar(96+5,8pt#);
+pickup nibfour;
+downleftchar(8pt#);
+endchar;
+
+cmchar "4pt, top right";
+qbeginchar(96+6,8pt#);
+pickup nibfour;
+uprightchar(8pt#);
+endchar;
+
+cmchar "4pt, bottom right";
+qbeginchar(96+7,8pt#);
+pickup nibfour;
+downrightchar(8pt#);
+endchar;
+
+cmchar "6pt, top left";
+qbeginchar(96+8,12pt#);
+pickup nibfour;
+upleftchar(12pt#);
+endchar;
+
+cmchar "6pt, bottom left";
+qbeginchar(96+9,12pt#);
+pickup nibfour;
+downleftchar(12pt#);
+endchar;
+
+cmchar "6pt, top right";
+qbeginchar(96+10,12pt#);
+pickup nibfour;
+uprightchar(12pt#);
+endchar;
+
+cmchar "6pt, bottom right";
+qbeginchar(96+11,12pt#);
+pickup nibfour;
+downrightchar(12pt#);
+endchar;
+
+cmchar "8pt, top left";
+qbeginchar(96+12,16pt#);
+pickup nibfour;
+upleftchar(16pt#);
+endchar;
+
+cmchar "8pt, bottom left";
+qbeginchar(96+13,16pt#);
+pickup nibfour;
+downleftchar(16pt#);
+endchar;
+
+cmchar "8pt, top right";
+qbeginchar(96+14,16pt#);
+pickup nibfour;
+uprightchar(16pt#);
+endchar;
+
+cmchar "8pt, bottom right";
+qbeginchar(96+15,16pt#);
+pickup nibfour;
+downrightchar(16pt#);
+endchar;
+
+cmchar "10pt, top left";
+qbeginchar(96+16,20pt#);
+pickup nibfour;
+upleftchar(20pt#);
+endchar;
+
+cmchar "10pt, bottom left";
+qbeginchar(96+17,20pt#);
+pickup nibfour;
+downleftchar(20pt#);
+endchar;
+
+cmchar "10pt, top right";
+qbeginchar(96+18,20pt#);
+pickup nibfour;
+uprightchar(20pt#);
+endchar;
+
+cmchar "10pt, bottom right";
+qbeginchar(96+19,20pt#);
+pickup nibfour;
+downrightchar(20pt#);
+endchar;
+
+cmchar "12pt, top left";
+qbeginchar(96+20,24pt#);
+pickup nibfour;
+upleftchar(24pt#);
+endchar;
+
+cmchar "12pt, bottom left";
+qbeginchar(96+21,24pt#);
+pickup nibfour;
+downleftchar(24pt#);
+endchar;
+
+cmchar "12pt, top right";
+qbeginchar(96+22,24pt#);
+pickup nibfour;
+uprightchar(24pt#);
+endchar;
+
+cmchar "12pt, bottom right";
+qbeginchar(96+23,24pt#);
+pickup nibfour;
+downrightchar(24pt#);
+endchar;
+
+cmchar "14pt, top left";
+qbeginchar(96+24,28pt#);
+pickup nibfour;
+upleftchar(28pt#);
+endchar;
+
+cmchar "14pt, bottom left";
+qbeginchar(96+25,28pt#);
+pickup nibfour;
+downleftchar(28pt#);
+endchar;
+
+cmchar "14pt, top right";
+qbeginchar(96+26,28pt#);
+pickup nibfour;
+uprightchar(28pt#);
+endchar;
+
+cmchar "14pt, bottom right";
+qbeginchar(96+27,28pt#);
+pickup nibfour;
+downrightchar(28pt#);
+endchar;
+
+cmchar "16pt, top left";
+qbeginchar(96+28,32pt#);
+pickup nibfour;
+upleftchar(32pt#);
+endchar;
+
+cmchar "16pt, bottom left";
+qbeginchar(96+29,32pt#);
+pickup nibfour;
+downleftchar(32pt#);
+endchar;
+
+cmchar "16pt, top right";
+qbeginchar(96+30,32pt#);
+pickup nibfour;
+uprightchar(32pt#);
+endchar;
+
+cmchar "16pt, bottom right";
+qbeginchar(96+31,32pt#);
+pickup nibfour;
+downrightchar(32pt#);
+endchar;
+
+bye;
diff --git a/macros/latex209/contrib/oval/oval.sty b/macros/latex209/contrib/oval/oval.sty
new file mode 100644
index 0000000000..2caf622d3a
--- /dev/null
+++ b/macros/latex209/contrib/oval/oval.sty
@@ -0,0 +1,113 @@
+\message{OVAL Boxes (c) by Elmar Schalueck 1991}
+\catcode`\@=11 % Make @ a letter
+\newbox\@tmpbox % to save a box
+\newbox\@cornerbox % to save a corner
+\newdimen\@tmpradius%
+\newdimen\@tmprule%
+\newdimen\@tmpdimadd%
+\newdimen\@tmpsep%
+\newdimen\@tmpdimd % dimen of depth
+\newdimen\@tmpdimh % dimen of height
+\newdimen\@tmpdimw % dimen of width
+\newdimen\@cornerdimw % dimen of width of a corner
+\newdimen\@vboxheight % dimen of height of surrounding box
+\newdimen\@hboxwidth % dimen of width of surrounding box
+\font\@cornerfont = newcirc % font for corners
+\newcount\@tmpchar%
+\newcount\@tmpcount%
+%
+%
+%
+% \@getovalradius calculates the real radius of the corners
+%
+\def\@getovalradius
+{\global\@tmpsep=2pt
+\ifdim\fboxsep>14\@tmpsep\@tmpcount=7\else
+\ifdim\fboxsep>12\@tmpsep\@tmpcount=6\else
+\ifdim\fboxsep>10\@tmpsep\@tmpcount=5\else
+\ifdim\fboxsep>8\@tmpsep\@tmpcount=4\else
+\ifdim\fboxsep>6\@tmpsep\@tmpcount=3\else
+\ifdim\fboxsep>4\@tmpsep\@tmpcount=2\else
+\ifdim\fboxsep>2\@tmpsep\@tmpcount=1\else
+\global\@tmpcount=0\fi\fi\fi\fi\fi\fi\fi
+\global\@tmpchar=4\global\multiply\@tmpchar by\@tmpcount
+\advance\@tmpcount by 1
+\global\multiply\@tmpsep by\@tmpcount}
+%
+%
+% \@gettmprule calculates real line width
+%
+\def\@gettmprule
+{\global\@tmprule=.4pt
+\ifdim\fboxrule>3\@tmprule\@tmpcount=3\else
+\ifdim\fboxrule>2\@tmprule\@tmpcount=2\else
+\ifdim\fboxrule>\@tmprule\@tmpcount=1\else
+\@tmpcount=0\fi\fi\fi
+\advance\@tmpcount by 1
+\global\@tmprule=.4pt\global\multiply\@tmprule by\@tmpcount
+\advance\@tmpcount by -1
+\multiply\@tmpcount by 32
+\global\advance\@tmpchar by\@tmpcount}
+%
+%
+%
+% \ovalbox#1 defines a box with round corners to enclose #1
+%
+\long\def\ovalbox#1{%
+ \leavevmode\setbox\@tmpbox\hbox{#1} % make #1 a box
+ \@getovalradius%
+ \@gettmprule%
+ \setbox\@cornerbox\hbox{\@cornerfont\char\@tmpchar}%
+ \@cornerdimw=\wd\@cornerbox%
+ \@tmpdimd=\dp\@tmpbox % depth of box, i.e. the part beneath
+ % the baseline
+ \@tmpdimh=\ht\@tmpbox % part above baseline
+ \@tmpdimw=\wd\@tmpbox % width of box
+ \advance\@tmpdimh by\@tmpdimd % total height of original box
+ \@hboxwidth=\fboxsep%
+ \advance\@hboxwidth by \fboxsep%
+ \@vboxheight=\@hboxwidth%
+ \advance\@hboxwidth by \@tmpdimw % total width of surrounding box
+ \advance\@vboxheight by \@tmpdimh % total height of surrounding box
+ \advance\@tmpdimd by\fboxsep%
+ \advance\@tmpdimd by\@tmprule % total amount beneath baseline
+ \@tmpdimadd=\fboxsep%
+ \advance\@tmpdimadd by -\@tmpsep%
+ \multiply\@tmpdimadd by 2 % calculate additional length
+ \advance\@tmpdimh by\@tmpdimadd % calculate height of vrule
+ \advance\@tmpdimw by\@tmpdimadd % calculate width of hrule
+ \hbox{\lower\@tmpdimd % put a box beneath baseline
+ \hbox%
+ {\vbox%
+ {\hbox{\@cornerfont \char \@tmpchar}%
+ \nointerlineskip%
+ \global\advance\@tmpchar by 1%
+ \hbox{\hskip-0.5\@tmprule%
+ \vrule height\@tmpdimh width\@tmprule depth0pt}%
+ \nointerlineskip%
+ \hbox{\@cornerfont \char \@tmpchar}%
+ \global\advance\@tmpchar by 1%
+ }\relax%
+ \lower0.5\@tmprule\vbox
+ {\hrule width\@tmpdimw height\@tmprule depth0pt\relax%
+ \vskip\fboxsep%
+ \vskip-0.25\@tmprule%
+ \hbox%
+ {\hskip0.5\@tmpdimadd%
+ \box\@tmpbox\relax % place original box
+ }%
+ \vskip\fboxsep%
+ \hrule width\@tmpdimw height\@tmprule depth0pt\relax%
+ }\relax%
+ \vbox%
+ {\hbox{\@cornerfont \char \@tmpchar}%
+ \nointerlineskip%
+ \global\advance\@tmpchar by 1%
+ \hbox{\hskip\@tmpsep\hskip-0.5\@tmprule%
+ \vrule height\@tmpdimh width\@tmprule depth0pt}%
+ \nointerlineskip%
+ \hbox{\@cornerfont \char \@tmpchar}%
+ }%
+ }}}%
+%
+\catcode`\@=12%
diff --git a/macros/latex209/contrib/oval/ovaltest.tex b/macros/latex209/contrib/oval/ovaltest.tex
new file mode 100644
index 0000000000..b3cc3c4dd1
--- /dev/null
+++ b/macros/latex209/contrib/oval/ovaltest.tex
@@ -0,0 +1,31 @@
+% Description of OVAL.STY
+%
+\documentstyle[oval]{article}
+\pagestyle{empty}
+\begin{document}
+\centering{\Large OVAL.STY - oval boxes}
+\vspace{0.3in}
+
+This is the description of an option that yields similar results as
+the wellknown \verb+\fbox+. It produces a \ovalbox{box} around some
+text with round corners. Because I have choosen to take a picture
+enviroment, some warnings occur during compilation. These may be
+ignored by the user.
+
+
+The following parameters are of some interest.
+\begin{itemize}
+\item \verb+\fboxsep+
+
+\item \verb+\fboxrule+
+
+\end{itemize}
+
+Both values have the same meaning as for the well known {\tt fbox}.
+
+\vspace{.3in}
+
+Have some fun with my macros.
+
+Elmar Schal\"{u}ck elmar@uni-paderborn.de
+\end{document}
diff --git a/macros/latex209/contrib/pageframe/README b/macros/latex209/contrib/pageframe/README
new file mode 100644
index 0000000000..f97a00efda
--- /dev/null
+++ b/macros/latex209/contrib/pageframe/README
@@ -0,0 +1,58 @@
+
+ pageframe.sty
+ pgframedoc.tex
+ pgframetest.tex
+
+"pageframe.sty" is a LaTeX style file primarily intended
+to assist in preparing books, although it is also useful
+when other types of documents are being designed. Using
+the "pageframe" option causes LaTeX to put corner marks
+and tag lines on the pages of the document, and optionally
+allows the user to include a graph-paper-like grid over
+the text area (for measuring indentations, space around
+heads or figures, etc.) and/or rules that outline the
+text area, header, and footer (so you can see the effects
+of such parameters as \textheight, \evensidemargin,
+\topsep, \footskip, etc.) and/or rules that outline the
+trimmed size of the page (assuming that the ultimate size
+of the document is smaller than the size of the paper on
+which it is being printed).
+
+"pageframe.sty" has been privately tested by me and a few
+friends who are doing book production work, so I think it's
+free of major bugs, but comments and suggestions for enhancements
+are very welcome.
+
+"pgframedoc.tex" is a (lengthy) documentation file (for LaTeX)
+that explains and illustrates the features provided by
+"pageframe.sty" (and incidentally explains a few quirks and
+even bugs of LaTeX that affect the use of "pageframe").
+"pgframetest.tex" is a short document that illustrates
+the use of "pageframe" without explaining anything.
+
+NOTE ABOUT REDISTRIBUTION (ARCHIVE MAINTAINERS TAKE NOTE!)
+I put a lot of work into the documentation file (with help
+from beta testers). It is my wish that the style file
+"pageframe.sty" NEVER EVER be distributed without the
+documentation file "pgframedoc.tex". If you want to place
+these files in an archive, you may re-package the Unix-oriented
+compressed tar archive into ".arc" or ".zoo" or ".lzh" or ".shar"
+or other format, but PLEASE DO NOT place the style file itself
+(separately from the doc file) into your archive. Please
+DO NOT EVEN MAKE IT POSSIBLE for a user of your archive
+to retrieve the style file without the documentation file.
+Of course, this request also applies to "private" transfers:
+please NEVER EVER give anyone the style file without the
+documentation.
+
+[ Yes, I know about "doc.sty", but although I have successfully
+read documentation that was prepared with it, and extracted
+style files that are in that format, I haven't been able to
+find the file "doc.doc" that explains how to *create* a self-
+documenting style file. I don't have Volume 10 of TUGboat (which
+I believe included an article about it) -- I wasn't a TUG member
+back then -- and I didn't feel like deducing the usage of
+the "doc.sty" macros from other peoples' documentation files. ]
+
+--Cameron Smith
+ cameron@symcom.math.uiuc.edu
diff --git a/macros/latex209/contrib/pageframe/pagefram.sty b/macros/latex209/contrib/pageframe/pagefram.sty
new file mode 100644
index 0000000000..0ca5749fa1
--- /dev/null
+++ b/macros/latex209/contrib/pageframe/pagefram.sty
@@ -0,0 +1,248 @@
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% pageframe.sty by Cameron Smith
+%% 18 Sept 1990, 16 Oct 1990, 21 Nov 1990, 14 Nov 1991
+%%
+%% By default, draws a frame around the text area to represent
+%% the edge of the paper -- useful when pages for a book of size
+%% 7x9 inches (for example) is being proofed on 8 1/2 x 11 inch
+%% paper. If \pageframefalse is executed, the part of the frame
+%% beside the text is removed, leaving only the corner marks
+%% to use for checking registration and for cropping.
+%% The full frame can be restored by executing \pageframetrue.
+%%
+%% This shows the results of
+%%
+%% \pageframetrue and \pageframefalse
+%%
+%% _|__________|_ _| |_
+%% | |
+%% | |
+%% | |
+%% | |
+%% | |
+%% | |
+%% _|__________|_ _ _
+%% | | | |
+%%
+%%
+%% This style option also prints (outside the page area) a timestamp,
+%% a job ID, and the page number and a sequence number on each page.
+%% The sequence number advances throughout the document, so even if
+%% there is a page (i) and several pages 1, only the first page
+%% will have sequence number 1.
+%%
+%% An oversight in the original version sometimes caused the tag line
+%% to be printed in an unusual font (if that was the last-used font
+%% on the preceding page). The current version explicitly sets the
+%% font for the tag line so that this won't happen. The default is
+%% to use cmr10, since it's highly unlikely that there are any TeX
+%% sites that don't have this font available, but the \pffont macro
+%% is provided in case another font is desired.
+%%
+%% Two more features have been added: an "inner skeleton", consisting
+%% of rules that demarcate the header, footer, and text area, and a
+%% "text grid" that can be placed inside the text area. Use
+%% "\innerskeltrue" or "\innerskelfalse" to control the skeleton
+%% and "\textgridtrue" or "\textgridfalse" to control the text grid.
+%% Use (for example) "\gridsize{10pt}{12pt}" to make a grid whose
+%% squares have width 10pt and height 12pt.
+%%
+%% To use this style option, include pageframe as an optional argument
+%% in the \documentstyle command, e.g.
+%%
+%% \documentstyle[pageframe]{book}
+%%
+%% Also you must tell LaTeX the height of the paper you are using
+%% (it can deduce the width for itself). You do this by including
+%% a declaration such as
+%% \paperheight{9in}
+%%
+%% in the preamble of your document. This *must* appear before
+%% the first page of output, because the new output routine
+%% uses this value. (If you forget to specify it, then two
+%% things will happen: the vertical rules at the sides of the
+%% text will disappear, because LaTeX thinks they have height 0pt,
+%% and the rule that represents the bottom of the paper will be
+%% flush against the bottom of the footer.)
+%%
+%% Since this style file modifies (a part of) LaTeX's output routine,
+%% it is exceedingly unlikely to be compatible with any other style
+%% option that also modifies the output routine.
+%%
+%% Please direct comments and bug reports by electronic mail
+%% to CAMERON@MIDD.BITNET or cameron@midd.cs.middlebury.edu
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This is the timestamp
+%%
+\@tempcnta\time\@tempcntb\@tempcnta
+\divide\@tempcntb by 60\multiply\@tempcntb by 60\advance\@tempcnta-\@tempcntb
+\divide\@tempcntb by 60
+\edef\@@@timestamp{\vrule height.4in depth .3in width 0pt%
+ \hskip.5in\today\space\space
+ \ifnum\@tempcntb<10 0\fi
+ \number\@tempcntb:\ifnum\@tempcnta<10 0\fi\number\@tempcnta
+ \space\space\space\space\space\space\jobname
+ \space\space\space\space\space\space
+}
+%%
+%% \pffont lets us specify the font to use for the tag line
+%% By default we use whatever font is current when this file is
+%% being loaded. This will normally be cmr10; in any case we're
+%% selecting a font which is (a) certainly available on the system
+%% were running on and (b) probably suitable for this purpose
+%% (normal-sized roman text).
+%%
+\def\pffont#1{\global\font\@@@pffont=#1\relax}
+\def\@@@pffont{\global\let\@@@pffont}
+\expandafter\@@@pffont\the\font
+%%
+\newcount\@@@sheetcount
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This is the code that makes the "inner skeleton".
+%%
+\newif\ifinnerskel
+\newif\iftextgrid
+\textgridtrue
+\newdimen\@@@gridwd\newdimen\@@@gridht
+\def\gridsize#1#2{\global\@@@gridwd#1\global\@@@gridht#2}
+\@@@gridwd 10pt \@@@gridht 10pt
+%%
+\def\@@@innerskel{\vbox to 0pt{%
+\vskip \topmargin
+\vbox to 0pt{\vss\hrule width\textwidth}%
+\vskip \headheight
+\vbox to 0pt{\vss\hrule width\textwidth}%
+\vskip \headsep
+\vbox to 0pt{\vss\hrule width\textwidth}%
+\iftextgrid
+\vbox to 0pt{\vbox to \textheight{%
+\leaders\vbox to \@@@gridht{\vss\hrule width\textwidth}\vfil
+}\vss}%
+\fi
+\hbox to \textwidth{\llap{\vrule height\textheight}%
+\iftextgrid\leaders\hbox to\@@@gridwd{\hfil\vrule height\textheight}\fi\hfil
+\vrule height\textheight}%
+\vbox to 0pt{\vss\hrule width\textwidth}%
+\vskip \footskip
+\vbox to 0pt{\vss\hrule width\textwidth}%
+\vskip -\footheight
+\vbox to 0pt{\vss\hrule width\textwidth}%
+\vss
+}}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% The paper width can be deduced from the text width and margins,
+%% but the paper height must be specified.
+%%
+\newdimen\@@@pageheight
+\def\paperheight#1{\global\@@@pageheight#1}
+\newdimen\@@@pagewidth
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% The part of the output routine that puts the frame on the
+%% page to represent the edge of the paper is surrounded by
+%% \ifpageframe...\fi so that it can be suppressed.
+%%
+\newif\ifpageframe
+\pageframetrue
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% \@@@cropmark should be followed by two letters, the first of which
+%% is t or b (for top or bottom) and the second l or r (left or right).
+%% It makes a box of height, width, and depth 0pt, but with a
+%% crop mark extending above or below and left or right of the base point.
+%%
+%% The arms of the crop mark do not quite meet, but are positioned
+%% so that if they were extended to meet, the meeting point would be
+%% the corner of the paper. This is to allow a little leeway for
+%% positioning and cutting the paper.
+%%
+\def\@@@cropmark#1#2{%
+\csname#2lap\endcsname{%
+\vbox to 0pt{%
+\if#1t\vss\else
+\hbox to .5in{\if#2r\hfil\fi
+\vrule width .45in height .4pt depth 0pt\if#2l\hfil\fi}%
+\vglue.05in\fi%
+\hbox to .5in{\if#2l\hfil\fi\vrule height .45in depth 0pt\if#2r\hfil\fi}%
+\if#1b\vss\else
+\vglue.05in%
+\hbox to .5in{\if#2r\hfil\fi
+\vrule width .45in height .4pt depth 0pt\if#2l\hfil\fi}%
+\fi%
+}}%
+}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\let\@theothermargin\@themargin
+%%
+\def\@outputpage{\begingroup\catcode`\ =10
+ \let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \let\@theothermargin\evensidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \let\@theothermargin\oddsidemargin
+ \fi\fi
+ \global\advance\@@@sheetcount by1%
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vbox to 0pt{\vss
+ \hbox{\@@@pffont\@@@timestamp
+ Sheet number \number\@@@sheetcount
+ \space\space Page number \thepage
+ }
+ \hrule height 0pt depth 0pt
+ }
+ \@@@pagewidth\@themargin\advance\@@@pagewidth\textwidth
+ \advance\@@@pagewidth\@theothermargin
+ \hbox{\@@@cropmark tl\hskip\@@@pagewidth\@@@cropmark tr}
+ \ifpageframe\vbox to0pt{\vss\hrule width\@@@pagewidth}\fi
+ \hbox{%
+ \ifpageframe\llap{\vrule height0pt depth\@@@pageheight}\else
+ \vrule height0pt depth\@@@pageheight width0pt\fi
+ \hskip\@themargin
+ \vtop{\ifinnerskel\@@@innerskel\fi
+ \vskip \topmargin
+ \setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth
+ {\let\label\@gobble \let\index\@gobble
+ \@thehead}} %% 22 Feb 87
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\let\label\@gobble
+ \let\index\@gobble %% 22 Feb 87
+ \@thefoot}%
+ }%
+ \ifpageframe
+ \hskip\@theothermargin
+ \rlap{\vrule height0pt depth\@@@pageheight}\fi
+ }
+ \ifpageframe\vbox to0pt{\hrule width\@@@pagewidth\vss}\fi
+ \hbox{\@@@cropmark bl\hskip\@@@pagewidth\@@@cropmark br}
+ }
+ \global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% End of "pageframe.sty"
+%%
diff --git a/macros/latex209/contrib/pageframe/pageframe.sty b/macros/latex209/contrib/pageframe/pageframe.sty
new file mode 120000
index 0000000000..d274c90fc8
--- /dev/null
+++ b/macros/latex209/contrib/pageframe/pageframe.sty
@@ -0,0 +1 @@
+pagefram.sty \ No newline at end of file
diff --git a/macros/latex209/contrib/pageframe/pgframed.tex b/macros/latex209/contrib/pageframe/pgframed.tex
new file mode 100644
index 0000000000..eaf2ee86bd
--- /dev/null
+++ b/macros/latex209/contrib/pageframe/pgframed.tex
@@ -0,0 +1,686 @@
+\documentstyle[pageframe]{book}
+%%%%%%%%%%
+%%
+%% Parameters used by pageframe
+%%
+\paperheight{9.3in}
+\footheight 10pt
+%%%%%%%%%%
+%%
+%% Macros to make filler text
+%%
+\newcount\foo\def\testsen{\advance\foo by1%
+This is filler sentence number \the\foo. }%
+\def\testsenfive{\testsen\testsen\testsen\testsen\testsen}%
+\newcount\bar\def\testpar{\advance\bar by1%
+This is filler paragraph number \the\bar.
+\testsenfive\testsenfive\testsenfive\par}%
+\def\fourtestpars{\testpar\testpar\testpar\testpar}
+%%%%%%%%%%
+%%
+%% The basic style we're using is "book" style,
+%% but we re-define many parameters:
+%%
+%% white space between paragraphs
+\parskip 12pt
+%% handling of short text pages
+\raggedbottom
+%% numbering of sections
+\def\thesection{\arabic{section}}
+\setcounter{secnumdepth}{0}
+%% left-hand running heads (usually set by \chapter,
+%% but this document doesn't have any \chapter's)
+\markboth{The {\tt pageframe} document style option}{}
+%% right-hand running heads (set by \section; we omit
+%% the \uppercase macro so the heads don't SCREAM at us)
+\def\sectionmark#1{\markright{#1}}
+%% margins
+\evensidemargin 1in
+\oddsidemargin .75in
+\topmargin .5in
+\headsep .2in
+%%
+\textwidth 4.65in
+%%
+\textheight=45\baselineskip
+\advance\textheight by\topskip
+%% space around list environments (including center)
+\topsep 0pt
+%% footnotes (use a dagger instead of a numeral)
+%{\makeatletter
+%\gdef\@makefnmark{\hbox{$^{\dag}$}}
+%\long\gdef\@makefntext#1{\parindent 1em\noindent
+% \hbox to 1.8em{\hss$^{\dag}$\ }#1}
+%}
+\def\thefootnote{\fnsymbol{footnote}}
+%%
+%% Thanks to anita@brahms.udel.edu (Anita Marie Hoover)
+%% for this code, which causes footnotes always to appear at
+%% the bottom of a page even if the page isn't full of text.
+%% She posted the fix in comp.text.tex
+%% (article <25024@brahms.udel.edu> on 14 Oct 91 at 14:26:22 GMT).
+%% This modifies part of LaTeX's output routine; the original
+%% lines are commented out.
+%%
+\makeatletter
+\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
+ \else\setbox\@outputbox
+% \vbox{\boxmaxdepth \maxdepth
+% \unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \vbox to\@colht{\boxmaxdepth\maxdepth\unvbox\@cclv\vfill\relax
+ \vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}%
+ \global\maxdepth\@maxdepth}
+\makeatother
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\begin{document}
+%%
+\pageframefalse
+%%
+\thispagestyle{plain}
+\begin{center}
+{\LARGE\bf
+The {\tt pageframe} document style option}\\[5pt]
+{\large Cameron Smith}\\[5pt]
+version current as of 2 December 1991
+\end{center}
+%%
+\section{Introduction}
+The \verb"pageframe" document style option was written as an aid
+for people who are using \LaTeX\ to make books. It assumes that
+the pages generated by \LaTeX\ are printed on paper larger than the
+ultimate trimmed and bound size of the leaves of the book
+(for example, pages of a $7{\rm in}\times9{\rm in}$ book printed
+on $8\frac12{\rm in}\times11{\rm in}$ paper). The \verb"pageframe"
+style option provides the following services:
+\begin{itemize}
+\item Corner marks to serve as guides in trimming the page to final size
+\item An identifying line of text (commonly called a tag line)
+ across the top of each printed page,
+ outside the final trim area, containing
+\begin{itemize}
+\item the name of the job that produced the page
+ (this is the name of the main input file),
+\item the time and date when the job was run,
+\item the folio (the number of the page in the document's
+ own numbering system---this number may be a roman numeral,
+ and it may not be unique within the document), and
+\item the absolute sequence number of the sheet within the document
+ (this starts at number 1 and increases throughout the document)
+\end{itemize}
+\item A frame around the trim area of the page
+\item Frames around the running head, text body, and footline
+\item A grid (of user-specified dimensions) within the text body
+\end{itemize}
+The tag line and corner marks are always printed; the other
+features may be turned on (separately) for draft or proof runs
+but would be turned off when the final form of the document is
+being generated.
+
+This document illustrates and explains the features that the
+\verb"pageframe" style provides. The pages of the document are printed
+with different combinations of the \verb"pageframe" option settings;
+you may want to look at the \LaTeX\ source for the document
+to see how these are specified. You will find
+a summary of the \verb"pageframe" commands near the end
+of this document.
+
+\pagebreak
+\pageframetrue
+%%
+\section{The Page Frame}
+The page frame is a rectangle that outlines the entire area of the
+final trimmed page. (The edges of this rectangle therefore line up
+with the lines that make up the corner marks.)
+It's useful in drafts to allow the designer to see where
+the design elements (folios, running heads and feet,
+displays, text body, etc.) will fall in relation to the edges
+of the printed page. The page you're now reading
+has this frame. This feature is turned on
+by default when the \verb"pageframe" style is used, but you can
+turn it off and back on with the commands
+\begin{center}
+\begin{tabular}{l}
+\verb"\pageframefalse"\\
+\verb"\pageframetrue"
+\end{tabular}
+\end{center}
+(respectively).
+The setting (false=off or true=on) that is in effect when a page
+is actually emitted to the \verb"dvi" file (that is, when \LaTeX's
+``output routine'' is invoked) is the one that is obeyed, so if you
+change this setting partway through a document it may take effect
+a page or so before or after you expected. (This happens because
+\TeX\ is typically in the middle of page $n+1$ before it realizes
+that it has accumulated enough material to fill page $n$.)
+
+%%
+\pagebreak
+%\pageframefalse
+\innerskeltrue
+\textgridfalse
+%%
+\section{The Inner Skeleton}
+The \verb"pageframe" style also allows the designer to outline
+the headline, footline, and text body rectangle of a page.
+I call this the ``inner skeleton'' of the page (for want of a
+better name), and you can turn it on or off with
+\begin{center}
+\begin{tabular}{l}
+\verb"\innerskeltrue"\\
+\verb"\innerskelfalse"
+\end{tabular}
+\end{center}
+This feature is off by default, because it's distracting,
+but it's useful in the early stages of design when you want
+to judge the precise placement of the heads and feet, or
+later when you want to see how unusual features like
+displayed material or marginal notes fit on the page in relation
+to the main text.
+
+When the page frame and inner skeleton are both turned on,
+you can see at a glance almost all the parameters that
+\LaTeX\ uses to lay out a page. The width of the text rectangle
+is \verb"\textwidth", the distance from the edge of the
+text rectangle to the outer edge of the (trimmed) paper is
+\verb"\evensidemargin",
+and the distance from the text rectangle to the inner edge of the
+paper is \verb"\oddsidemargin". The distance from the top of
+the (trimmed) paper to the rule that represents the top of
+the page header is \verb"\topmargin", the distance from the top
+of the header to the bottom is \verb"\headheight", and the distance
+from the bottom of the header to the top of the text rectangle is
+\verb"\headsep". The height of the text rectangle is \verb"\textheight",
+the distance from the baseline of the text rectangle to the
+baseline of the footer is \verb"\footskip", and the distance
+from the top to the bottom of the footer is \verb"\footheight".
+The section {\it Things You Need To Know\/} later in this document
+has a more detailed discussion of some of these parameters.
+
+The inner skeleton can be turned on
+without the page frame, although that seems to me to be
+of questionable value. I can see wanting the page frame
+without the inner skeleton, but not vice versa. However,
+the switches are independent.
+
+%%
+\pagebreak
+\pageframetrue
+\innerskelfalse
+%%
+\section{The Text Grid}
+Another optional feature is a grid laid
+over\footnote{well, actually under---it's
+laid on the page {\em before\/} the text---but you usually
+won't be able to tell the difference} the text body.
+This can be useful for measuring the leading
+(\LaTeX's \verb"\baselineskip" parameter), or space above and
+below a display or section head. The text grid will not be
+displayed unless the \verb"innerskel" switch is on. Even then,
+the grid is omitted unless the \verb"textgrid" switch is also on,
+which it is by default. As usual, you can turn it off and on
+with the commands
+\begin{center}
+\begin{tabular}{l}
+\verb"\textgridfalse"\\
+\verb"\textgridtrue"
+\end{tabular}
+\end{center}
+
+Although a grid makes it almost impossible to read the text
+on a page, it can be useful when you are trying
+to gauge parameters that affect the layout of the text
+within the text rectangle
+(rather than the parameters listed earlier, which
+affect the way the larger features of the page --- header,
+footer, and text area as a whole --- are arranged). Text
+layout parameters include the \verb"\baselineskip", the
+\verb"\parskip", the \verb"\parindent", the \verb"\topskip",
+the space above and below section heads
+(usually specified in a style file as arguments to the
+\verb"\@startsection" macro), space around figures, tables,
+and lists, space above footnotes, and many others.
+
+The next two pages show grids of different sizes laid
+over the text body. The first page uses the default grid,
+which is composed of squares 10pt on a side. The grid on the
+following page has rectangles 10 picas wide and 15 points high;
+this was specified with the command
+\begin{center}
+\verb"\gridsize{10pc}{15pt}"
+\end{center}
+The grid size that is in effect when a page is
+actually sent to the \verb"dvi" file is the one that is used
+for that page.
+
+\pagebreak
+\innerskeltrue
+\textgridtrue
+{\Large
+This page has the default grid, which consists of squares 10pt on a side.}
+
+\fourtestpars
+\pagebreak
+\gridsize{10pc}{15pt}%
+{\Large
+This page has a grid with vertical lines 10pc apart and
+horizontal lines 15pt apart.}
+
+\fourtestpars
+%%
+\columnsep 2pc
+\twocolumn
+\textgridfalse
+\section{Two-Column Format}
+As you can see, the inner skeleton does work on a page in
+two-column format, but it still outlines the text body as
+a whole (rather than outlining each column separately).
+Similarly, a text grid on a two-column page
+covers both columns together
+(not each column separately). To treat the columns
+as separate objects, I would have had to alter
+much more of \LaTeX's output routine than I was
+comfortable with. And that approach still would not
+be able to handle \LaTeX\ extensions like
+Frank Mittelbach's \verb"multicol" style option, which are
+increasingly used instead of \LaTeX's built-in
+two-column feature. So I decided to punt.
+
+The rest of this page is simply filler.
+
+\testpar\testpar\testpar
+\onecolumn
+\innerskelfalse
+%%
+\section{Things You Need To Know}
+This section details a few more things you need to know before you
+use the \verb"pageframe" document style option.
+
+One of the basic assumptions underlying the \verb"pageframe" code
+is that your document is being laid out for back-to-back two-sided
+printing (remember, \verb"pageframe" was created primarily to assist in book
+production). As explained below, this assumption is used in calculating
+the width of the trimmed pages, so the frame may have the wrong width
+if you use \verb"pageframe" with a one-sided document
+style. Note that the standard \LaTeX\ \verb"article" and \verb"report"
+document styles both accept \verb"twoside" as an option, so a document
+that begins
+\begin{center}
+\verb"\documentstyle[twoside,pageframe]{article}"
+\end{center}
+(for example) should come out just fine.
+
+Strictly speaking,
+\LaTeX\ doesn't know how wide your page is---it doesn't place anything
+on the page to the right of the text body, so it doesn't care how
+much farther out the edge of the paper is. For this reason \LaTeX\ only
+provides parameters to specify the widths of the left-hand margins
+(\verb"\oddsidemargin" for odd-numbered pages, and \verb"\evensidemargin"
+for even-numbered pages). How then do we figure out where
+to put the corner marks and rules that mark the right-hand edge
+of the paper? We do it by assuming that the right-side margin
+on a recto (= right-hand-side = odd-numbered) page is equal to
+the left-side margin on a verso (= left-hand-side = even-numbered) page,
+and vice versa. This is usually the case, because
+otherwise the text rectangles of the pages on the
+opposite sides of a leaf wouldn't line up
+back-to-back.\footnote{Books are occasionally designed that way,
+but it often looks horrible,
+because the mass of ink in the text area on the back of a page is usually
+dark enough to show through.
+That isn't a problem if the text rectangles are aligned, because the text
+ink is dark enough that the eye doesn't notice the ``ghost'' from the
+other side of the leaf.}
+Therefore the \verb"pageframe" style option assumes that the
+\verb"\evensidemargin" is the fore-edge margin for all pages (recto
+and verso), and the \verb"\oddsidemargin" is the gutter
+margin for all pages.\footnote{This is correct: note that the left edge
+of a recto page is in the gutter, while the left edge of a verso page
+is at the fore-edge.}
+It computes the width of a (trimmed) page
+to be the sum of the width of the text body (which is given by \LaTeX's
+\verb"\textwidth" parameter) and the widths of the fore-edge and gutter
+margins. (I could remove this assumption, having the user instead specify
+the page width explicitly, and I will do so if user feedback shows
+a demand for this.)
+
+
+Unfortunately, there is
+no parameter, or sum of parameters, that tells us the
+total height of a page. Once again, \LaTeX\ doesn't need
+to know that. It simply starts at the top of the page, laying down
+space above the header (the \verb"\topmargin"), then the header
+(a box of height \verb"\headheight"), then space below the header and
+above the text body (the \verb"\headsep"), then the text body
+(a box of height \verb"\textheight"), then the footer
+(a box of height \verb"\footheight" whose baseline is a distance
+\verb"\footskip" below the bottom of the text body).
+Since \LaTeX\ places nothing on the page below the footer,
+it doesn't care---and doesn't know---how far below the footer
+the physical edge of the printed page will fall.
+And there's no clever assumption that we can make to figure
+it out, as we did in computing the paper width.
+The top-to-bottom analogue of the left-to-right reflection argument
+given above doesn't work: there's no reason why the distance
+below the footer on recto
+pages should equal the distance above the header on verso
+pages.\footnote{If books were bound across the top
+instead of along the side, this would be true---but then
+the left and right margins would be
+independent and you'd have to specify the width of a page. You can't win.}
+This means that
+in order for the bottom corner marks to be placed in the right
+positions I had to provide a way for you to specify the
+trim height of the paper.
+You do it this way:
+\begin{center}
+\verb"\paperheight{9in}"
+\end{center}
+This declaration goes in the preamble of your \LaTeX\ document (after
+the \verb"\documentstyle" command but before the \verb"\begin{document}"
+command). If you omit it, the rules that outline
+the left and right edges of the page in the page frame will disappear,
+and the bottom corner marks will abut the footer.
+
+There is a half-truth in the preceding paragraph, regarding the height
+of the page footer. The \LaTeX\ manual does state
+(on page 163) that \verb"\footheight" is the height of the
+box into which the page's footer is placed, and the code for
+\verb"pageframe" acts as if this were so.
+But \LaTeX\ doesn't actually work that way.
+In fact, the file \verb"latex.tex" contains a comment
+to the effect that the \verb"\footheight" parameter is never
+used by \LaTeX{}, and this does seem to be the case.
+The standard \verb"article", \verb"book", and \verb"report" document
+styles do not even specify a value for \verb"\footheight", leaving it
+at its default setting of 0pt. With this setting, the upper and lower
+rules drawn by \verb"\innerskeltrue" to demarcate the footer will coincide,
+so you'll only see a single line on the page, representing the baseline of
+the page footer. The document you're now reading arbitrarily
+sets \verb"\footheight"
+to 10pt just to illustrate how the inner skeleton was intended to look,
+but you should be aware that it's not a bug in the \verb"pageframe" code
+if you see only a single line indicating the position of the footer.
+
+\setcounter{page}{1}
+I reset the page number counter to 1 on this page to demonstrate
+that the sheet sequence number in the tag line at the top of a page
+is independent of the page number printed on the page.
+Even if a book design calls for a roman-numeral page $i$ and
+a new page 1 for every part or chapter, there will still
+be only one page with sheet number 1.
+
+\pagebreak
+\pffont{cmti10}
+By default the tag line across the top of the page
+is printed in whatever font is current while \LaTeX\ is
+loading the \verb"pageframe" style file (this is ordinarily
+\verb"cmr10", but some installations might be configured
+with different fonts). You can select any font you like for
+the tag lines with the \verb"\pffont" command.
+I reset the tag line font on this page to \verb"cmti10" by putting
+the declaration \verb"\pffont{cmti10}" just before this paragraph.
+A tag line font that you declare in this way takes effect as soon as
+\LaTeX\ ships out the next page to the \verb"dvi" file, and
+remains in effect through the end of the document (unless you
+give another \verb"\pffont" command). Remember that because of the
+way output routines work in \TeX\ the next page shipped out
+might actually be the page before or after the one on which the
+\verb"\pffont" declaration would seem to fall by its position
+in the source file.
+
+Observe that the arms of the corner marks do not quite meet,
+but are positioned
+so that if they were extended to meet, the meeting point would be
+the corner of the paper. The gap allows leeway for
+positioning and cutting the paper. The current version of
+\verb"pageframe" doesn't allow you to control the lengths of the
+corner marks, the size of the gaps between them and the page corners,
+or the distance between the tag line and the top of the page
+frame, but it wouldn't be too hard to parametrize these.
+I didn't do it because I didn't see a reason to, but I will
+if there's demand.
+
+Just in case you're worried about all these extra words and rules
+on the page
+throwing off the measurements, relax! The code for \verb"pageframe"
+uses constructions like \verb"\llap" and \verb"\rlap" to ``hide'' the
+height, width, and depth of every mark that it places on the page,
+so that the marks placed by your document (text, illustrations,
+or whatever) fall into exactly the same positions when you
+use \verb"pageframe" as when you don't.
+
+Piet van~Oostrum has written the \verb"fancyheadings" style option
+to provide enhanced formatting capabilities for running heads
+and feet. This style option allows for
+\begin{itemize}
+\item three-part headers and footers
+\item rules in header and footer
+\item headers and footers wider than \verb|\textwidth|
+\item multiline headers and footers
+\item separate headers and footers for even and odd pages
+\item separate headers and footers for chapter pages
+\end{itemize}
+To provide extra-wide headers and footers, \verb"fancyheadings"
+defines a new dimension parameter, \verb"\headwidth", which it uses
+instead of \verb"\textwidth" to specify the widths of the
+boxes in which the running heads and feet are constructed.
+The \verb"pageframe" style option does not take account of this
+new parameter, and continues to draw its rules outlining header
+and footer at width \verb"\textwidth". It would be possible
+to make \verb"pageframe" sensitive to \verb"fancyheadings", using
+\verb"\headwidth" if \verb"fancyheadings" is in effect and
+\verb"\textwidth" otherwise.
+I'm willing to do this if there is any demand for it.
+(Keep those cards and letters coming in, folks!)
+
+The use of the margin parameters (\verb"\topmargin",
+\verb"\evensidemargin", and \verb"\oddsidemargin") calls for
+further comment. The \LaTeX\ manual (on page 163 again) defines
+the margin parameters to be ``one inch less than the distance
+from the [top or left] edge of the paper'' to the running head
+or the text (as appropriate). Why ``one inch less''? Well,
+it so happens (although the \LaTeX\ manual doesn't tell you this) that
+\TeX\ always uses a point one inch down from the top edge of the
+paper and one inch right of the left edge of the paper as the
+origin of its coordinate system, and all the marks on the paper
+are positioned relative to that point. You'll have to read
+{\it \TeX: The Program\/} (Volume B of the Computers \& Typesetting
+series) for an explanation of why it's done
+that way (or do what I'm doing: wait for the movie). At any rate,
+\LaTeX's margin parameters are {\em really\/} measuring relative
+to \TeX's origin point, not the corner of the paper. For that reason
+I used that point as the upper left corner of the ``virtual'' page
+area (to which the larger actual paper will be trimmed when the
+book is bound), and that's why this document speaks of \verb"\topmargin",
+\verb"\evensidemargin", and \verb"\oddsidemargin" as specifying the
+actual margins (relative to the trimmed page area) rather than
+``one inch less than'' the actual margins.
+
+Incidentally, suppose you're working with a document design
+that calls for pages a bit wider than $7\frac12{\rm in}$ or taller
+than $10{\rm in}$, and you want to proof the document on
+$8\frac12{\rm in}\times11{\rm in}$ paper. Does the fact that
+\TeX's origin is set down and in by one inch make this impossible?
+No! Should you use negative values of \verb"\topmargin",
+\verb"\evensidemargin", and \verb"\oddsidemargin" to move the text
+farther up and to the left than it would ordinarily go? Well,
+you can, but you will get very confusing results---for example,
+a negative \verb"\topmargin" will cause the running head to overstrike
+the tag line that \verb"pageframe" puts across the top of the sheet.
+Mind you, \verb"pageframe" doesn't complain or malfunction; it just
+does what you told it to do. Still, to obtain useful results, you should
+always use positive values for the margin parameters. How can you
+fit a wide or tall page onto the paper, then? You can use a feature
+of \TeX\ that (regrettably) isn't documented in the \LaTeX\ manual:
+\verb"\hoffset" and \verb"\voffset". These parameters tell \TeX\ to
+displace its origin horizontally or vertically (respectively) from
+its usual $(1{\rm in},1{\rm in})$ position. They both normally have the
+value 0pt, but if you put
+\begin{center}
+\begin{tabular}{l}
+\verb"\hoffset -0.5in"\\
+\verb"\voffset -0.25in"
+\end{tabular}
+\end{center}
+(for example)
+into the preamble of your document, then every mark on every page will
+be shifted a quarter inch up and a half inch to the left of where it
+would have been. Using the \verb"\hoffset" and \verb"\voffset" parameters
+makes a single adjustment in the \verb"dvi" file, so it affects all
+marks the same way (including those made by \verb"pageframe"), and they
+all maintain their relative positions to one another. Of course, if you
+move the origin up too far (more than about half an inch), then the
+tag line across the top of the sheet will fall off the top edge of the
+paper; your device driver may or may not accept this gracefully.
+On the other hand, if you are printing the document directly (rather
+than printing a camera-ready repro from which to make a printing
+plate), you might want to move the origin up one inch and left one
+inch; that way the upper left corner of the virtual page will coincide
+with the physical upper left corner of the paper and you'll only have
+to trim the sheets on two sides instead of four.
+
+One last caveat: the \verb"pageframe" style option does its work by
+substituting new code for a part of \LaTeX's output routine
+(specifically, the \verb"\@outputpage" subroutine).
+This means that any other document style option that also attempts
+to hook into or replace this part of the output routine will
+be incompatible
+with the \verb"pageframe" option. It isn't very common for style
+files to do this, but it does happen.
+%%
+{\catcode`\|=0 |catcode`|\=12 |gdef|bslash{\}}
+%%
+\newenvironment{cmdlist}%
+{\begin{list}{}%
+{\leftmargin 3.5cm\rightmargin 0cm\labelwidth 3cm\labelsep .5cm
+\itemsep\baselineskip\listparindent\parindent}%
+}%
+{\end{list}}
+%%
+\section{Summary}
+This section summarizes the user commands provided by the
+\verb"pageframe" style option. The code for \verb"pageframe"
+also defines some ``private'' control sequences that are not intended
+to be used directly; all such control sequences have \verb"@" signs
+in their names.
+
+\begin{cmdlist}
+%
+\item[\tt\bslash paperheight]
+The command \verb"\paperheight{HT}" (where \verb"HT"
+is a \TeX\ dimension specification) tells the \verb"pageframe"
+code that the trimmed height of the paper on which your document
+will ultimately appear is \verb"HT". This is used to determine
+how far down the page the bottom corner marks are positioned.
+This should be specified in the preamble of your document
+(after the \verb"\documentstyle" command and before the
+\verb"\begin{document}" command). If you forget to declare
+a paper height, the bottom corner marks will be positioned parallel
+with the bottom of the footer.
+%
+\item[\tt\strut\vtop to 0pt{%
+\hbox{\bslash pageframetrue}%
+\hbox{\bslash pageframefalse}%
+\vss}]
+The conditional \verb"\ifpageframe" is used
+in the code for \verb"pageframe" to control the printing of the
+rectangle that outlines the trim edges of the paper.
+It is true by default (so the rectangle is printed);
+you will want to turn it off before printing a final copy
+of your document.
+%
+\item[\tt\strut\vtop to 0pt{%
+\hbox{\bslash innerskeltrue}%
+\hbox{\bslash innerskelfalse}%
+\vss}]
+The conditional \verb"\ifinnerskel" is used
+to control the printing of the
+rectangle around the text area and the rules that
+outline the header and footer.
+It is false by default (so the inner skeleton is not printed).
+Turning off the inner skeleton also disables the text grid feature.
+%
+\item[\tt\strut\vtop to 0pt{%
+\hbox{\bslash textgridtrue}%
+\hbox{\bslash textgridfalse}%
+\vss}]
+The conditional \verb"\iftextgrid" is used, together with the
+\verb"\ifinnerskel" conditional,
+to control the printing of a grid over the main text area of the
+page. It is true by default; however, this is not sufficient to
+cause the text grid to appear.
+If the inner skeleton is turned off, the text grid is not printed,
+regardless of the setting of the \verb"textgrid" switch. The text
+grid is only printed if the \verb"innerskel" and \verb"textgrid"
+switches are both on. The default grid is made up of squares 10pt
+on a side; it can be reset with the \verb"\gridsize" command.
+%
+\item[\tt\bslash gridsize]
+The command \verb"\gridsize{WD}{HT}" (where \verb"WD" and \verb"HT"
+are \TeX\ dimension specifications) causes the text grid to be drawn
+with vertical rules separated by \verb"WD" and horizontal rules
+separated by \verb"HT" (so the grid cells are rectangles of dimensions
+${\tt WD}\times{\tt HT}$).
+%
+\item[\tt\bslash pffont]
+The command \verb"\pffont{FONTSPEC}" causes the tag line across
+the top of each page to be printed in the font specified by
+the \verb"FONTSPEC", which should be a font designation such as
+\verb"cmr10" or {\tt times at 12pt} or {\tt cmbx10 scaled
+\bslash magstep2}.
+%
+\end{cmdlist}
+%%
+\section{Acknowledgements}
+The author of the \verb"pageframe" document style option is
+very grateful for the assistance of Irma Tani, who beta tested
+both the \TeX\ code and the documentation and suggested many
+improvements in both. Having professional experience
+in book production (which the author completely lacks), she was able
+to say what features would be useful in real applications.
+Brian Junker also made very helpful comments about the beta
+version of the documentation.
+%%
+\section{Feedback}
+The author of the \verb"pageframe" document style option
+used it for over a year in both large and
+small documents before releasing it for beta testing, and the code
+went through several conceptual overhauls during that time.
+He now believes it to be, not perfect, but complete enough and
+clean enough to be widely useful.
+Even so, he realizes that errors and pitfalls may remain, and
+he would be grateful to receive reports of them, whether they
+represent coding gaffes that cause malfunctions, or infelicities
+of design that make \verb"pageframe" hard to use. His name is Cameron
+Smith, and he can be reached through electronic mail
+as \verb"cameron@midd.cc.middlebury.edu"
+or \verb"cameron@symcom.math.uiuc.edu", or by telephone
+at (513) 429-2707.
+%%
+\section{Claims and Disclaimers}
+%
+This document and the computer code in the file
+\verb"pageframe.sty" are copyright 1991
+by the author, Cameron Smith. Permission is granted to all to use the
+code (by executing it on a computer) without fee, but {\em not\/} to
+sell it or to incorporate it into other works offered for sale.
+
+The computer code described in this document is offered in hopes that
+it will be found useful, and in the belief that it is correct,
+but it is offered without any
+warranty of any kind, including warranty of fitness for any purpose.
+Users of this code do so entirely at their own risk. The author
+neither admits nor accepts any liability for any loss, direct,
+indirect, consequential, incidental, or otherwise, resulting
+from the use of the computer code described herein. The statements
+in this document are believed to be complete and accurate but
+are not warranted to be so, and remedy for any omissions or inaccuracies
+is limited to the issuance of a corrected version of the document.
+%%
+\end{document}
diff --git a/macros/latex209/contrib/pageframe/pgframet.tex b/macros/latex209/contrib/pageframe/pgframet.tex
new file mode 100644
index 0000000000..b8e94e60c4
--- /dev/null
+++ b/macros/latex209/contrib/pageframe/pgframet.tex
@@ -0,0 +1,43 @@
+\documentstyle[pageframe]{book}
+%%
+\paperheight{9in}
+\footheight 10pt
+%%
+\newcount\foo\def\testsen{\advance\foo by1%
+This is test sentence number \the\foo. }%
+\def\testsenfive{\testsen\testsen\testsen\testsen\testsen}%
+\newcount\bar\def\testpar{\advance\bar by1%
+This is test paragraph number \the\bar.
+\testsenfive\testsenfive\testsenfive\par}%
+\def\fourtestpars{\testpar\testpar\testpar\testpar}
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+\begin{document}
+%%
+\pageframefalse
+%%
+\section{first}
+\fourtestpars\fourtestpars
+%%
+\pageframetrue
+%%
+\section{second}
+\fourtestpars
+%%
+\innerskeltrue
+%%
+\section{third}
+\fourtestpars\fourtestpars
+%%
+\gridsize{12pt}{15pt}%
+%%
+\section{fourth}
+\fourtestpars\testpar\testpar
+%%
+\textgridfalse
+%%
+\section{fifth}
+\fourtestpars
+%%
+\end{document}
diff --git a/macros/latex209/contrib/paper/pap11.sty b/macros/latex209/contrib/paper/pap11.sty
new file mode 100644
index 0000000000..99f6065f81
--- /dev/null
+++ b/macros/latex209/contrib/paper/pap11.sty
@@ -0,0 +1,366 @@
+% PAPER DOCUMENT STYLE -- Released 22 Feb 90
+% for LaTeX version 2.09
+% Copyright (C) 1990 by Don Hosek
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} % Setting of \@listi added 9 Jun 87
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 4pt plus 2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 0pt % Left margin on odd-numbered pages.
+ \evensidemargin 0pt % Left margin on even-numbered pages.
+ \marginparwidth 100pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+ \marginparwidth 83pt
+\fi
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin 0pt % Nominal distance from top of page to top of
+
+\headheight 12pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 30pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+% DIMENSION OF TEXT:
+% 24 Jun 86: changed to explicitly compute \textheight to avoid roundoff.
+% The value of the multiplier was calculated as the floor of the
+% old \textheight minus \topskip, divided by \baselineskip for \normalsize.
+% The old value of \textheight was 530.4pt.
+% \textheight is the height of text (including footnotes and figures,
+% excluding running head and foot).
+
+\textheight = 8.1in
+\advance\textheight by \topskip
+\textwidth 6.5in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 7.7pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 10pt plus 4pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 0pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 17pt % Width of paragraph indentation.
+%\topsep 9pt plus 3pt minus 5pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 3pt plus 1pt minus 2pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+%\itemsep 4.5pt plus 2pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+% See \@listI for values of \topsep and \itemsep
+% (Change made 9 Jun 87)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \large \sl Part \thepart % THEN Print 'Part' and
+ \par\nobreak % number in \Large boldface.
+ \fi % FI
+ \Large \sl % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \Large \sl
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- i.e., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\large\sl}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\sl}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\sl}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\sl}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\sl}}
+
+
+% Default initializations of \...mark commands. (See below for their
+% us in defining page styles.
+%
+
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{3}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section and subsection counters to zero
+% -- redefine the section counter to produce appendix numbers
+% -- redefine the \section command if appendix titles and headings are
+% to look different from section titles and headings.
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+%\parsep 4.5pt plus 2pt minus 1pt %(Removed 9 Jun 87)
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 9 Jun 87)
+\def\@listI{\leftmargin\leftmargini \parsep 4.5pt plus 2pt minus 1pt%
+\topsep 9pt plus 3pt minus 5pt%
+\itemsep 4.5pt plus 2pt minus 1pt}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/macros/latex209/contrib/paper/pap12.sty b/macros/latex209/contrib/paper/pap12.sty
new file mode 100644
index 0000000000..85bd414f23
--- /dev/null
+++ b/macros/latex209/contrib/paper/pap12.sty
@@ -0,0 +1,370 @@
+% PAPER DOCUMENT STYLE -- Released 22 Feb 90
+% for LaTeX version 2.09
+% Copyright (C) 1990 by Don Hosek
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+\abovedisplayskip 12pt plus3pt minus7pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt%
+\let\@listi\@listI} % Setting of \@listi added 9 Jun 87
+
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6.5pt plus3.5pt minus3pt
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+ \parsep 4.5pt plus 2pt minus 1pt \itemsep \parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt%
+\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 0pt % Left margin on odd-numbered pages.
+ \evensidemargin 0pt % Left margin on even-numbered pages.
+ \marginparwidth 100pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0pt % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0pt
+ \marginparwidth 83pt
+\fi
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin 0pt % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+% \topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 30pt % Distance from baseline of box containing foot
+ % to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+% 24 Jun 86: changed to explicitly compute \textheight to avoid roundoff.
+% The value of the multiplier was calculated as the floor of the
+% old \textheight minus \topskip, divided by \baselineskip for \normalsize.
+% The old value of \textheight was 536.5pt.
+% \textheight is the height of text (including footnotes and figures,
+% excluding running head and foot).
+
+\textheight = 8.1in
+\advance\textheight by \topskip
+\textwidth 6.5in % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 8.4pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 10.8pt plus 4pt minus 2pt % Space between last line of text and
+ % top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 14pt plus 2pt minus 4pt % Space between adjacent floats moved
+ % to top or bottom of text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and floats
+ % at top or bottom of page.
+\intextsep 14pt plus 4pt minus 4pt % Space between in-text figures and
+ % text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 14pt plus 2pt minus 4pt % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must be
+ % 0pt plus ...)
+\@fpsep 10pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must be
+ % 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
+\@dblfpsep 10pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 7pt % Minimum vertical separation between two marginal
+ % notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 0pt plus 1pt % Extra vertical space between paragraphs.
+\parindent 1.5em % Width of paragraph indentation.
+%\topsep 10pt plus 4pt minus 6pt % Extra vertical space, in addition to
+ % \parskip, added above and below list and
+ % paragraphing environments.
+\partopsep 3pt plus 2pt minus 2pt % Extra vertical space, in addition to
+ % \parskip and \topsep, added when user
+ % leaves blank line before environment.
+%\itemsep 5pt plus 2.5pt minus 1pt % Extra vertical space, in addition to
+ % \parskip, added between list items.
+% See \@listI for values of \topsep and \itemsep
+% (Change made 9 Jun 87)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a sectionioning command without using
+% \@startsection, you can use \secdef as follows:
+% \def\part { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \part[...]{...}
+% \def\CMDB #1{ ... } % Command to define \part*{...}
+
+\def\part{\par % New paragraph
+ \addvspace{4ex} % Adds vertical space above title.
+ \@afterindentfalse % Suppresses indent in first paragraph. Change
+ \secdef\@part\@spart} % to \@afterindenttrue to have indent.
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \refstepcounter{part} % THEN step part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add unnumbered line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1
+ \Large \sl Part \thepart % THEN Print 'Part' and
+ \par\nobreak % number in \Large slanted.
+ \fi % FI
+ \huge \bf % Select \huge boldface.
+ #2\markboth{}{}\par } % Print title and set heading marks null.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% Heading for \part* command
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \sl
+ #1\par} % Title.
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 3ex % Space between title and text.
+ \@afterheading % Routine called after part and
+ } % section heading.
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., section=1,
+% subsection = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\large\sl}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\sl}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\sl}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\sl}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\sl}}
+
+
+% Default initializations of \...mark commands. (See below for their
+% us in defining page styles.
+%
+
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{3}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the section and subsection counters to zero
+% -- redefine the section counter to produce appendix numbers
+% -- redefine the \section command if appendix titles and headings are
+% to look different from section titles and headings.
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+%\parsep 5pt plus 2.5pt minus 1pt %(Removed 9 Jun 87)
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 9 Jun 87)
+\def\@listI{\leftmargin\leftmargini \parsep 5pt plus 2.5pt minus 1pt%
+\topsep 10pt plus 4pt minus 6pt%
+\itemsep 5pt plus 2.5pt minus 1pt}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
diff --git a/macros/latex209/contrib/paper/paper-sample.tex b/macros/latex209/contrib/paper/paper-sample.tex
new file mode 100644
index 0000000000..80e381c5a3
--- /dev/null
+++ b/macros/latex209/contrib/paper/paper-sample.tex
@@ -0,0 +1,534 @@
+\documentstyle[titlepage,11pt]{paper}
+\title{A Change of Heart}
+\author{Don Hosek}
+
+\newcommand{\ltoc}{{\em The Last Temptation of Christ\/}}
+
+\begin{document}
+\maketitle
+In {\em The Last Temptation of Christ,\/} Nikos Kazantzakis
+presents a model of Jesus which includes a rather dramatic change
+in his character during the time he spends in the desert: before
+that time, he preaches love, but afterwards, he also preached
+change on earth. This conflict over Jesus' r\^ole on earth is
+demonstrated well in his conversation with John the Baptist:
+\begin{quotation}
+``Isn't love enough'' [Jesus] asked.
+
+``No,'' answered the Baptist angrily. ``The tree is rotten. God
+called to me and gave me the ax, which I then placed at the roots
+of the tree. I did my duty. Now do yours: take the ax and
+strike!''
+
+``If I were fire, I would burn; if I were a woodcutter, I would
+strike. But I am a heart, and I love.''
+
+``I am a heart also, that's why I cannot endure injustice,
+shamelessness or infamy. How can you love the unjust, the
+infamous and the shameless? Strike! One of man's greatest
+obligations is anger.''
+
+``Anger?'' said Jesus, his heart objecting. ``Aren't we all
+brothers?''
+
+``Brothers?'' the Baptist replied sarcastically. `` Do you think
+love is the way of God---love? Look here---'' He stretched forth
+his bony, hairy hand and pointed to the Dead Sea, which stank
+like a rotting carcass. ``Have you ever bent over to see the two
+whores, Sodom and Gomorrah, at her bottom? God became angry,
+hurled fire, stamped the earth: dry land turned to sea and
+swallowed up Sodom and Gomorrah. That's God's way---follow it.
+What to the prophecies say? `On the day of the Lord blood will
+flow from wood, the stones of the houses will come to life, will
+rise up and kill the house owners!' The day of the Lord has set
+out and is coming. I was the first to discern it. I uttered a
+cry, took God's ax, placed it at the root of the world. I called,
+called, called for you to come. You came, and now I shall
+depart.''~\cite[pp.~241--2]{ltoc}
+\end{quotation}
+
+Is this conflict of values accurate? Or is it simply part of
+Kazantzakis' interpretation of the Jesus story?\footnote{It may
+be worthwhile to summarize the intellectual history of
+Kazantzakis as presented in the ``Note on the Author'' in the
+Simon \& Schuster edition of {\em The Last Temptation of
+Christ\/}: he spent his childhood in Crete where ``he first
+experienced revolutionary ardor.'' Then, during a time in a
+school run by Franciscan monks, he was introduced to Western
+thought, contemplation, and the virtue of Christ. After a time in
+an all-male monastery (to the point of excluding hens and cows),
+he then turned to Nietzsche. ``He was thereafter to renounce
+Nietzsche for Buddha, then Buddha for Lenin, then Lenin for
+Odysseus. When he returned to Christ, as he did, it was to a
+Christ enriched by everything that had come
+between.''~\cite[pp.~497--8]{ltoc}} Too a certain extent, the
+answer to {\em both\/} questions is ``yes.'' Certainly, the
+extent to which the conflict between the two approaches to Jesus'
+mission exists is primarily part of Kazantzakis' interpretation
+of the story, but that the conflict existed would be difficult to
+deny; Bertrand Russell, in {\em A History of Western
+Philosophy\/} notes:
+\begin{quotation}
+The Jews believed that the Messiah would bring them temporal
+prosperity, and victory over their enemies here on
+earth.~\cite[p.~309]{russell}
+\end{quotation}
+And the New Jerusalem Bible, in a footnote comments:
+\begin{quotation}
+The Gospel shows Jesus at this critical moment abandoning his
+policy of the messianic secret \ldots\ and unequivocally
+accepting the title of Messiah, although making clear that he is
+Messiah not in the traditional sense of a political liberator,
+but in the sense of the glorious personage whom Daniel has seen
+in vision.\cite[p.~1655]{new-j}
+\end{quotation}
+
+This Jewish perception of what the Messiah was certainly makes
+the conflict in Kazantzakis' work somewhat more clear; by acting
+as a social liberator, Jesus was, in effect, reacting to certain
+market pressures. That is, to obtain the following of certain
+supporters of the zealots, he needed to adopt some of their
+policies.
+
+The next question we should ask, then, is can we find any
+supporting text of the Jewish messianic personality of Jesus in
+the scriptures? We can infer from how Christianity developed in
+the years after Jesus' death that the
+Messiah-as-liberator-of-souls view of Christ was the one that
+shaped how Christian beliefs, and from reading the four canonical
+Gospels, we see that for the most part, the teachings of Christ
+appear in that light. However, in Matthew, we can read:
+\begin{quotation}
+``Do not suppose that I have come to bring peace to the earth; it
+is not peace I have come to bring, but a sword. For I have come
+to set son against {\em father, daughter against mother,
+daughter-in-law against mother-in-law; a person's enemies will be
+the enemies of his own household.\/}''~\mbox{[Mt~10:34--6]}
+\end{quotation}
+Luke contains a prophecy from Simeon saying
+\begin{quotation}
+Look, he is destined for the fall and for the rise of many in
+Israel, destined to be a sign that is opposed.~\mbox{[Lk~2:34]}
+\end{quotation}
+Luke also has John the Baptist declare
+\begin{quotation}
+``I baptise you with water, but someone is coming, who is more
+powerful than me, and I am not fit to undo the strap of his
+sandals; he will baptise you with the Holy Spirit and
+fire.~\mbox{[Lk~3:16]}
+\end{quotation}
+And later, Jesus says,
+\begin{quote}
+``I have come to bring fire to the earth, and how I wish it were
+blazing already.''~\mbox{[Lk~12:49]}
+\end{quote}
+The ``cleansing of the temple'' which takes place in all four
+gospels is yet another example of a possible social mission of
+Jesus. John describes it thus:
+\begin{quotation}
+When the time of the Jewish Passover was near Jesus went up to
+Jerusalem, and in the temple he fond people selling cattle and
+sheep and doves, and the money changers sitting there. Making a
+whip out of cord, he drove them all out of the Temple, sheep and
+cattle as well, scattered the money changers' coins, knocked
+their tables over and said to the dove sellers, ``Take all this
+out of here and stop using my Father's house as a
+market.''~\mbox{[Jn~2:14--6]}
+\end{quotation}
+There are alternate interpretations of the quotes given above;
+they do not {\em necessarily\/} support the
+Jesus-as-revolutionary theory, but they also do not necessarily
+contradict it either.
+
+That there is little indication of Jesus as revolutionary in the
+Gospel according to Mark is not as remarkable as it might seem;
+it is generally agreed that Mark is a later gospel than Matthew
+and John.\footnote{However, there are still many sources which
+will claim that Matthew and Luke were based on Mark. This is true
+to a certain extent, according to the editors of {\em The New
+Jerusalem Bible\/} who postulate a proto-Mark which served as a
+source for all three extant synoptic gospels. ``The last revision
+of Mark must have been made after [Matthew and Luke] had already
+made use of [the previous version]. This would account for the
+features which appear late and the cases where Matthew and Luke
+agree against Mark; they would both reflect an earlier version of
+his text.''~\cite[p.~1601]{new-j}}
+ Rather than giving an image of Jesus as a liberating
+Messiah, ``the real point of its message is the {\em
+manifestation of the crucified
+Messiah.\/}''~\cite[p.~1605]{new-j} The commentator of {\em The
+New Jerusalem Bible\/} comments on the conflict between the
+expected and actual r\^oles of Jesus:
+\begin{quotation}
+Jesus laid down a way of humility and submission; but the Jews,
+expecting a victorious warrior-Messiah, were ill-prepared for
+this answer to their hope; the reason why the Jesus wanted
+silence about his miracles (5:43) and his identity (7:24;~9:30)
+was to avoid an enthusiasm which would have been as ill-advised
+as it would have been mistaken.~\cite[p.~1605]{new-j}
+\end{quotation}
+
+The gospels, if they do not present Jesus as a social agitator,
+do indicate that the conservative Jews did view him that way.
+Luke has Pilate say of Jesus:
+\begin{quotation}
+``You have brought this man before me as a popular agitator. Now
+I have gone into the matter myself in your presence and found no
+grounds in the man for any of the charges you bring against
+him.''~\mbox{[Lk~23:14]}
+\end{quotation}
+and in John, we find:
+\begin{quotation}
+Meanwhile a large number of Jews heard that he was there and came
+not only on account of Jesus but also to see Lazarus whom he had
+raised from the dead. Then the chief priests decided to kill
+Lazarus as well, since it was on his account that many of the
+Jews were leaving them and believing in
+Jesus.~\mbox{[Jn~12:9--11]}
+\end{quotation}
+Also, we should not ignore the Revelation to John, which
+incontrovertibly shows Jesus (as the lamb) acting violently
+against the unholy people of the ancient world.
+
+We can find some external evidence that lends some credence to
+this theory; for example, Shirley Jackson Case writes:
+\begin{quotation}
+Even the meager formalities of John's movement seemed soon to
+have proved unsatisfactory to Jesus. Apparently he heartily
+espoused John's cause, so far as it represented a new attitude of
+consecration and a renewal of confidence in God's readiness to
+deliver his people\ldots [Unlike John the Baptist, Jesus] took
+his stand in the midst of society where he might conduct an
+aggressive propaganda on behalf of his new interests.
+
+This aggressive policy of Jesus had its advantageous as well as
+its disastrous possibilities. It gave him a much wider range of
+social contacts than would have been available had he followed
+the plan of John. But at the same time it greatly augmented the
+possibilities of opposition\ldots
+
+The impression made be Jesus upon his contemporaries was so
+unusually forceful that it aroused a public opposition which
+presently cut short his public career\ldots it was the
+unconventional methods by which Jesus sought to bring these
+results to pass that constituted the real basis of opposition
+between him and his contemporaries. The problem at issue was not
+so much the question of what end was to be sought, as of the safe
+path to be pursued in order to arrive at the desired goal. It was
+on this emblem of safe procedure that Jesus and his enemies came
+to deadly grips.~\cite[pp.~52--4]{case}
+\end{quotation}
+
+Richard Cassidy is one writer who reads a revolutionary Jesus out
+of the gospel of Luke. He writes of the temple
+disturbance~(Lk~20):
+\begin{quotation}
+Luke shows Jesus acting against ``those who sold'' and accusing
+the traffickers of having made the temple a ``den of robbers.''
+The chief priests exercised tight control over all temple
+activities and very likely derived a portion of their personal
+incomes from the buying and selling that took place within temple
+precincts. In the passage above, Luke does not explicitly state
+that Jesus' actions actually placed him in conflict with the
+chief priests; but it does clearly portray Jesus as acting
+against the prevailing economic practices.~\cite[p.~35]{cass}
+\end{quotation}
+
+Case expresses the view that Jesus was not sympathetic to the
+position of the revolutionists:
+\begin{quotation}
+In all probability Jesus' earlier popularity had been partially
+due to the presence of such hopes among the common people of
+Galilee. On the other hand, it is apparent that Jesus himself
+never seconded these ambitions, and on occasion very definitely
+expressed himself as out of harmony with the revolutionists. When
+this fact became known among his sympathizers many turned away
+from him and thus reduced the strength of his popular
+following.~\cite[p.~58]{case}
+\end{quotation}
+However, this reading simply means that Jesus did not wholly
+agree with the {\em zealots.\/} His position clearly is opposed
+to that of the temple priests, as exhibited by his continual
+conflicts with the scribes and pharisees as well as the
+disruption of the temple; that he did not openly and violently
+oppose {\em Rome\/} as he did the Jews of the temple lead to the
+conflict with the zealots and the loss of supporters that Case
+noticed.
+
+We set out to see if we could justify Kazantzakis'
+characterization of Jesus in \ltoc; to see whether there is any
+justification for Kazantzakis writing of John the Baptist passing
+the axe on to Jesus. Cassidy would think that perhaps this is
+justified. The attacks against the temple and Jewish
+establishment are certainly quite clear, but did he also rise up
+against Rome? Cassidy says,
+\begin{quotation}
+Although Jesus did not constitute the same type of threat that to
+Roman rule as the Zealots and the Parthians, the threat that he
+posed was, ultimately, not less dangerous. Unlike the Zealots,
+the Jesus of Luke's gospel does not make the overthrow of Roman
+rule the central focus of his activity, nor does he support any
+of the other forms of government (including that probably
+advocated by the Zealots) that might have been considered as
+replacements for Roman rule. Nevertheless, by espousing radically
+new social patterns and by refusing to defer to the existing
+political authorities, Jesus pointed the way to a social order in
+which neither the Romans nor any other oppressing group would be
+able to hold sway.~\cite[p.~79]{cass}
+\end{quotation}
+Cassidy recognizes the fact that the view of Luke is possibly
+distorted, but claims that this is unlikely:
+\begin{quotation}
+Certainly in the years between Jesus' death and the time of
+Luke's writing, there were ample opportunities for errors to be
+made and for those who handed on the traditions about Jesus
+(including Luke himself) to alter them in such a way that Luke's
+final account could contain as much distortion as accuracy. On
+the other hand, we know that Luke wanted to write ``an orderly
+account,'' and we also know that Luke's descriptions relative to
+empire history are, in fact, amazingly accurate.
+
+We find these latter two considerations persuasive and are thus
+inclined to hold that the stance Luke attributes to Jesus
+corresponds to the stance that Jesus actually had. It can be
+argued, however, that such a position is as much a matter of
+perspective as it is of reasoned analyses and judgment, and this
+we are willing to admit. {\em Do Luke's descriptions give an
+accurate portrayal of Jesus' stance?\/} In the end, given the
+lack of conclusive evidence, it is likely that any reply will
+hinge on one's personal perspective.~\cite[pp.~85--6]{cass}
+\end{quotation}
+It is still difficult to say whether Kazantzakis' portrayal of
+the internal conflict of Jesus over the nature of his mission is
+justificable.
+
+However, in examining the teachings of the founding fathers of
+the Church, we find that the preachings tend more towards the
+morals of individuals than towards the movement for social
+justice that Cassidy finds in Luke and Kazantzakis' John the
+Baptist calls for from Jesus. In the apocryphal Acts of Paul,
+Paul is credited with preaching the following aphorisms in the
+house of Onesiphorus:
+\begin{quotation}
+Blessed are the pure in heart, for they shall see God.
+
+Blessed are they that keep the flesh chaste, for they shall
+become the temple of God.
+
+Blessed are they that abstain ({\em or\/} the continent) for unto
+them shall God speak.
+
+Blessed are they that have renounced this world, for they shall
+be well-pleasing unto God.
+
+Blessed are they that posses their wives as though they had them
+not, for they shall inherit God.
+
+Blessed are they that have the fear of God, for they shall become
+angels of God.
+
+Blessed are they that tremble at the oracles of God, for they
+shall be comforted.
+
+Blessed are they that receive {\em the\/} wisdom of Jesus Christ,
+for they shall be called sons of the Most High.
+
+Blessed are they that have kept their baptism {\em pure,\/} for
+they shall rest with the Father and the Son.
+
+Blessed are they that have compassed the understanding of Jesus
+Christ, for they shall be in light.
+
+Blessed are they that for love of God have departed from the
+fashion of this world, for they shall judge angels, and shall be
+blessed at the right hand of the Father.
+
+Blessed are the merciful, for they shall obtain mercy and shall
+not see the bitter day of judgement.
+
+Blessed are the bodies of virgins, for they shall be
+well-pleasing unto God and shall not lose the reward of their
+continence (chastity), for the word of the Father shall be unto
+them a work of salvation in the say of his Son, and they shall
+have rest world without
+end.~\mbox{[ActsPl~2:5--6]}\footnote{Quoted from \cite{nta}.}
+\end{quotation}
+These do not sound like the teachings of a Jesus who ``knocked
+tables over'' in the Temple of Jerusalem.\footnote{And while the
+presentation in Revelation might be taken this way, it is also
+worth noting that this book of the Bible nearly did not become
+canonical.~\cite[pp.~2027--8]{new-j}} Is it possible that the
+fathers of the church had ``toned down'' the revolutionary nature
+of Jesus' acts? A sentiment expressed in Romans is not atypical:
+\begin{quotation}
+Let love be without any pretence. Avoid what is evil; stick to
+what is good. In brotherly love let your feelings of deep
+affection for one another come to expression and regard others as
+more important than yourself.~\mbox{[Rm~12:9--10]}
+\end{quotation}
+Or in Corinthians when the following is expressed:
+\begin{quotation}
+Keep away from sexual immorality. All other sins that someone may
+commit are done outside the body; but the sexually immoral person
+sins against his own body. Do you not realize your body is the
+temple of the Holy Spirit, who is in you and whom you have
+received from God? You are not your own property, then; you have
+been bought at a price. So use your body for the glory of
+God.~\mbox{[1~Co~6:18--20]}
+\end{quotation}
+
+Let us examine the question of why the founding fathers of the
+Church might have abandoned the social revolution portion of
+Jesus' teachings to the degree that they did (many of the quotes
+from the New Testament cited above have non-social-reform
+interpretations generally ascribed to them).
+
+Perhaps the main reason for the abandonment of Jesus as the
+warrior-Messiah in the teachings of the Christian church is that
+\begin{quotation}
+Not only was the social environment of the Christian movement
+largely gentile well before the end of the first century, but it
+had severed almost completely and earlier bonds of social contact
+with the Jewish Christians of Palestine. During the first
+generation, in the time of Peter, Paul, and Barnabas, the
+Christians of Jerusalem were treated by their gentile brethren at
+least as peers, if not as superiors. But after the year 70, when
+the Jewish war against Rome resulted in the destruction of the
+Temple and inspired a new disdain on the part of the Gentiles for
+all things Jewish, Palestinian Christianity rapidly lost
+prestige. It made few if any gains in membership, while the
+gentile communities constantly increased. By the year 100
+Christianity is mainly a gentile religious
+movement.~\cite[pp.~27--8]{case}
+\end{quotation}
+The expectation that the Messiah would be a force that {\em
+actively\/} liberates the Jews from Rome was, as the quote from
+Russell above indicated, primarily a Jewish belief. As the
+Christian cult became increasingly gentile, the necessary r\^ole
+of the fledgling Christianity's Jesus had to play changed as
+well. Paul, in Galatians said, with respect to the Jewish
+traditions:
+\begin{quotation}
+I, Paul, give you my word that if you accept circumcision,
+Christ will be of no benefit to you at all. I give my assurance
+once again to every man who accepts circumcision that he is under
+obligation to keep the whole Law; once you seek to be reckoned as
+upright through the Law, then you have separated yourself from
+Christ, you have fallen away from grace.~\mbox{[Ga~5:2--4]}
+\end{quotation}
+
+Case believes that
+\begin{quotation}
+Henceforth the gentile field offered Christians their only hope
+of success. Their efforts to win Jewish adherents proved
+increasingly futile \ldots\ its prospects of further success now
+lay exclusively in its power to perpetuate itself through appeal
+to the non-Jewish population of the Roman Empire. Unless it had
+been able to integrate itself successfully as a movement in
+gentile society, its hope of survival would have been in
+vain.~\cite[pp.~67--8]{case}
+\end{quotation}
+Christianity faced a tough field of competition for followers in
+the Roman empire.
+\begin{quotation}
+All about them was a veritable welter of religious cults offering
+to their devotees a wide variety of satisfactions and presenting
+a great many different forms of appeal. There was hardly a single
+area of interest that had not been already cultivated by some
+older cult.~\cite[p.~69]{case}
+\end{quotation}
+
+In addition to the desire to exclude unfavorable beliefs from
+Christianity to aid in evangelizing the gentiles of the Roman
+empire, there was desire inside the Christian movement to gain
+the support of the empire itself:
+\begin{quotation}
+On more than one occasion Christians had sought to bring their
+cause into favor by calling the attention of the authorities to
+the fact that the Empire's beginnings, and its continued glory,
+had been conincident with the rise and growth of the Christian
+movement. One was to infer that the prayers of the Christians and
+their presence in society were genuine elements of safety which
+should be nourished if future prosperity were to be
+assured.~\cite[p.~209]{case}
+\end{quotation}
+
+Why should whether this interpretation is valid matter to us at
+all? Biblical hermeneutics has been a central feature of Western
+theology for quite some time.\footnote{To explain hermeneutics in
+brief: one begins by attempting to determine the intent of the
+author in interpretting the text; this interpretation is then
+used in the light of understanding current happenings, then with
+that illumination on the text, the reader returns to the text and
+re-interprets it. This process can be continued as much as
+necessary. Berryman~\cite{berryman} contains the following
+example which is illuminating:
+\begin{quotation}\footnotesize
+[Latin Americans] understand the Bible in terms of their
+experience and reinterpret that experience in terms of biblical
+symbols. In theological jargon this is called the ``hermeneutical
+circle''---interpretation moves from experience to text to
+experience. As an example, consider the saying of Jesus, ``Unless
+the grain of wheat falls to the earth and dies, it remains just a
+grain of wheat. But if it dies, it produces much fruit''
+(John~12:24). The original text certainly applies to Jesus' own
+death. Suppose, however, a community leader is murdered, and
+after initial fear and intimidation, people resolve to continue
+their struggle, inspired by the leader's example. When that same
+text comes up, it is seen as referring to their martyred leader,
+whose life is showing fruit. Hence their is an ongoing
+interaction between life experience and its interpretation in the
+light of Scripture.
+\end{quotation}
+Berryman de-emphasizes the r\^ole of authorial intent, but as
+will be noted, it is essential to proper hermeneutical
+interpretation.}
+The earliest attempts to understand the Bible grew out of the
+Reformation:
+\begin{quotation}
+Since Protestant theologians believed, not only that Scripture
+was infallible, but that it had been written with specific
+reference to the needs of all subsequent time, they thought it
+both profitable and necessary to derive therefrom a body of
+normative teaching specifically applicable to their own
+problems. No primary importance was attached to the particular
+circumstances under which a scriptural document had been
+composed, nor were any questions asked regarding the special
+interests that might have been dominant when the original author
+and his first readers lived. Without hesitation, it was
+unconsciously assumed that the biblical writer had centered
+attention upon the particular issues with which the reformers
+themselves were so vitally concerned.~\cite[p.~5]{case}
+\end{quotation}
+However, if the historical background of the passage being
+interpretted is ignored, then the validity of the interpretation
+can be easily called into question.\footnote{I am reminded of a
+preacher I heard on the radio once who took the phrase ``to the
+victor belongs the spoils'' to refer to ``oil'' despite the fact
+that he was reading a translation and the spoil/oil pairing would
+not have been present in the original text.} If Jesus' mission
+did not contain in it some attempts at changing social conditions
+as well as spiritual conditions, then many schools of theology
+(liberation theology, in particular) would no longer be valid.
+With this in mind, attempting to understand the full background
+behind a text like Luke, is essential not only to Biblical
+scholarship, but to contemporary social movements as well.
+
+More specifically, the hermeneutic circle is especially important
+in understanding Kazantzakis' novel, which can be taken to be
+more-or-less as an interpretation of the New Testament. As was
+noted above, Kazantzakis' spiritual growth went began with
+``revolutionary ardor'' followed by an ascetic Christianity then
+through Nietzsche, Buddha, Lenin, Odysseus, and back to Christ.
+In effect, \ltoc\ is Kazantzakis' own liberation theology. His
+Jesus' change of heart mirrors very much Kazantzakis' own pattern
+of intellectual growth. While Jesus, for a time, adopts a
+``revolutionary ardor'' of his own, he after a time returns to
+the way of love, in a manner similar to that of Kazantzakis.
+\ltoc\ represents not only Kazantzakis' interpretation of the New
+Testament, it represents his interpretation in the light of his
+own experiences.
+
+\bibliographystyle{plain}
+\bibliography{jesus}
+\end{document}
diff --git a/macros/latex209/contrib/paper/paper.sty b/macros/latex209/contrib/paper/paper.sty
new file mode 100644
index 0000000000..84f3f69e74
--- /dev/null
+++ b/macros/latex209/contrib/paper/paper.sty
@@ -0,0 +1,752 @@
+% PAPER DOCUMENT STYLE -- Released 28 November 1989
+% for LaTeX version 2.09
+% Copyright (C) 1989 by Don Hosek
+
+\typeout{Document Style `paper' <28 Nov 89>.}
+
+
+% PREPARING A FOREIGN LANGUAGE VERSION:
+%
+% This document style is for documents prepared in the English language.
+% To prepare a version for another language, various English words must
+% be replaced. All the English words that required replacement are
+% indicated below, where we give the name of the command in which the
+% words appear, and the entire line containing the word(s), with the
+% actual words underlined.
+%
+% \tableofcontents:
+% \def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+% ~~~~~~~~ ~~~~~~~~ ~~~~~~~~
+% \listoffigures:
+% \def\listoffigures{\section*{List of Figures\@mkboth
+% ~~~~~~~~~~~~~~~
+% {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+% ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
+% \listoftables:
+% \def\listoftables{\section*{List of Tables\@mkboth
+% ~~~~~~~~~~~~~~
+% {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+% ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
+% \thebibliography:
+% \def\thebibliography#1{\section*{References\@mkboth
+% ~~~~~~~~~~
+% {REFERENCES}{REFERENCES}}\list
+% ~~~~~~~~~~ ~~~~~~~~~~
+% \theindex:
+% \columnsep 35pt\twocolumn[\section*{Index}]
+% ~~~~~
+% \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+% ~~~~~ ~~~~~
+% figure and table environments:
+% \def\fnum@figure{Figure \thefigure}
+% ~~~~~~
+% \def\fnum@table{Table \thetable}
+% ~~~~~
+% abstract environment:
+% {\bf Abstract\vspace{-.5em}\vspace{0pt}}
+% ~~~~~~~~
+
+
+% CHOOSING THE TYPE SIZE:
+%
+% The type size option is handled by reading a different file for each
+% size, as follows:
+% 10pt : PAP10, 11pt : PAP11, 12pt : PAP12
+% Implemented by \def'ing \@ptsize to last digit of file name.
+%
+
+\def\@ptsize{1} % Default is PAP11.STY
+\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt option reads in PAP11.STY
+\@namedef{ds@12pt}{\def\@ptsize{2}} % 12pt option reads in PAP12.STY
+
+% Two-side or one-side printing.
+%
+% \@twosidefalse % Default is one-sided printing.
+\def\ds@twoside{\@twosidetrue % Defines twoside option.
+ \@mparswitchtrue} % Marginpars go on outside of page.
+% draft option
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\def\ds@draft{\overfullrule 5pt} % Causes overfull hboxes to be marked.
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+
+\@options
+
+\input pap1\@ptsize.sty\relax
+
+
+% ****************************************
+% * External stuff *
+% ****************************************
+%
+
+\input{doublespace.sty}
+\input{smaller.sty}
+\let\smaller=\relax
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+%
+% 16 Mar 88 -- changed defs of \labelenum... to use \theenum...
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\let\\=\@centercr
+ \small\list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}%
+ \singlespace\smaller\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\small\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}%
+ \singlespace\smaller\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\small\list{}{\rightmargin\leftmargin}
+ \singlespace\smaller\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+%\newdimen\descriptionmargin
+%\descriptionmargin=3em
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% THEOREM
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{\it \trivlist
+% \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+
+
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+
+\def\theequation{\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray environment
+
+% The macro \@eqnnum defines how equation numbers are to appear in equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero.
+%
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+% ARRAY AND TABULAR
+%
+
+\arraycolsep 5pt % Half the space between columns in an array environment.
+\tabcolsep 6pt % Half the space between columns in a tabular environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * SECTIONS *
+% ****************************************
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is stepped.
+% Counter OLDCTR must already be defined.
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+
+\def\thepart{\Roman{part}} % Roman numeral part numbers.
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \subsection command writes a
+% \contentsline{subsection}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If subsections are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \thesubsection. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table' environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@section,
+% \l@subsection, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note that \section is level 1,
+% \subsection is level 2, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+
+% TABLEOFCONTENTS
+%
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} % space above part line
+ \begingroup
+ \@tempdima 3em % width of box holding part number, used by
+ \parindent \z@ \rightskip \@pnumwidth %% \numberline
+ \parfillskip -\@pnumwidth
+ {\large \bf % set line in \large boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak % Never break after part entry
+ \endgroup}
+
+\def\l@section#1#2{\addpenalty{\@secpenalty} % good place for page break
+ \addvspace{1.0em plus 1pt} % space above toc entry
+ \@tempdima 1.5em % width of box holding section number
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
+ \hskip -\leftskip %% 25 Jan 88 change to \numberline
+ #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+
+% LIST OF FIGURES
+%
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+% LIST OF TABLES
+%
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus .07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+
+\def\thebibliography#1{\clearpage\singlespace\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+% \def\@biblabel#1{[#1]\hfill} % Produces the label for a \bibitem[...]
+ % command.
+% \def\@cite#1{[#1]} % Produces the output of the \cite command.
+
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+
+\newif\if@restonecol
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+
+\def\@idxitem{\par\hangindent 40pt}
+
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@} % The \hrule has default height of .4pt .
+
+% \newcounter{footnote}
+
+% The numbering style (arabic, alph, etc.) for ordinary footnotes
+% is defined by the macro \thefootnote.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth).
+%
+% The following macro indents all lines of the footnote by 10pt, and
+% indents the first line of a new paragraph by 1em. To change these
+% dimensions, just substitute the desired value for '10pt' [in both
+% places] or '1em'. The mark is flushright against the footnote.
+% \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+% \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+%
+% A simpler macro is used, in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. Thus, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default definition used.
+
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+% changed 25 Jun 86 to fix according to Howard Trickey:
+% instead of \unhbox\@tempboxa\par we do #1: #2\par
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ #1: #2\par % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+
+% FIGURE
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+
+% \maketitle ==
+% BEGIN
+% \par
+% \begingroup
+% redefine \@makefnmark so footnote marks take zero space (this make
+% centering look better)
+% \thefootnote == \fnsymbol{footnote} % to number by *, dagger, etc.
+% if @twocolumn = true
+% then \twocolumn[\@maketitle]
+% else \@maketitle
+% fi
+% \thispagestyle{plain}
+% \@thanks % \thanks defines \@thanks to have \footnotetext commands for
+% % producing footnotes.
+% \endgroup
+% END
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em % Vertical space above title.
+ \begin{center}
+ {\LARGE \@title \par} % Title set in \LARGE size.
+ \vskip 1.5em % Vertical space after title.
+ {\large % each author set in \large, in a
+ \lineskip .5em % tabular environment
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em % Vertical space after author.
+ {\large \@date} % Date set in \large size.
+\end{center}
+ \par
+ \vskip 1.5em} % Vertical space after date.
+
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \sectionmark, ... , where
+% \sectionmark{TEXT} is called by \section to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'left' mark. Works like TeX's
+% \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'right' mark. Works like TeX's
+% \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \section command and
+% the right mark is changed by a \subsection command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+% Commands like \tableofcontents that should set the marks in some page styles
+% use a \@mkboth command, which is \let by the pagestyle command (\ps@...)
+% to \markboth for setting the heading or \@gobbletwo to do nothing.
+
+\mark{{}{}} % Initializes TeX's marks
+
+% \ps@empty and \ps@plain defined in LATEX.TEX
+
+% Definition of 'headings' page style
+% Note the use of ##1 for parameter of \def\sectionmark inside the
+% \def\ps@headings.
+%
+
+\if@twoside % If two-sided printing.
+\def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@evenhead{\rm \thepage\hfil \sl \leftmark}% Left heading.
+\def\@oddhead{\hbox{}\sl \rightmark \hfil \rm\thepage}% Right heading.
+\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}%
+\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else % If one-sided printing.
+\def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@oddhead{\hbox {}\sl \rightmark \hfil \rm\thepage}% Heading.
+\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+% Definition of 'myheadings' page style.
+%
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil \rm\thepage}%
+\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox {}}%
+\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+%
+% WIDOWS and ORPHANS
+%
+\widowpenalty=9999 % Widows and orphans permitted only in dire
+\clubpenalty=9999 % emergencies
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\ps@plain % 'plain' page style
+\pagenumbering{arabic} % Arabic page numbers
+\onecolumn % Single-column.
+\raggedbottom % Bottoms of pages are always ragged-bottomed
diff --git a/macros/latex209/contrib/picinpar/picinpar-de.pdf b/macros/latex209/contrib/picinpar/picinpar-de.pdf
new file mode 100644
index 0000000000..2157fc206e
--- /dev/null
+++ b/macros/latex209/contrib/picinpar/picinpar-de.pdf
Binary files differ
diff --git a/macros/latex209/contrib/picinpar/picinpar-de.tex b/macros/latex209/contrib/picinpar/picinpar-de.tex
new file mode 100644
index 0000000000..6494ea6b67
--- /dev/null
+++ b/macros/latex209/contrib/picinpar/picinpar-de.tex
@@ -0,0 +1,285 @@
+%
+% By Friedhelm Sowa, Heinrich-Heine-University D\"usseldorf,
+% Computing Center
+% In case of emergency try to get the email adress
+% after having checked the input :-)
+% Okay, for those who are too lazy:
+% tex@ze8.rz.uni-duesseldorf.de
+% sowa@convex.rz.uni-duesseldorf.de
+%
+% Distributed under the terms of the GNU General Public License.
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2, or (at your
+% option) any later version.
+%
+\documentstyle[german,picinpar]{article}
+\setlength{\parskip}{.66\baselineskip}
+\setlength{\parindent}{0pt}
+\begin{document}
+\section*{Beispiele zu {\tt picinpar.sty}}
+\font\yn=cmss17 scaled \magstep5 %oder sonst was gro"ses (yinit?)
+\begin{verbatim}
+\begin{window}[0,l,{\yn V},{}]
+or einigen Jahren wurde von ...
+... Abschnitts erfolgten automatisch.
+\end{window}
+\end{verbatim}
+
+\begin{window}[0,l,{\yn V},{}]
+or einigen Jahren wurde von Donald E.~Knuth im TUGboat ein kleines
+Problem mit der Bitte um L"osung vorgestellt. Es handelte sich darum,
+in einem Paragraphen ein Fenster zu erzeugen, in das man beliebigen Text
+oder eine Zeichnung hineinsetzen kann. Prompt kamen dann in den folgenden
+Ausgaben L"osungsvorschl"age: Einer von DEK pers"onlich, der andere von
+Alan Hoenig. Der letztgenannte brachte die elegantere L"osung, die keine
+manuellen Korrekturen mehr notwendig machte. Sein Makro verlangte lediglich
+in den Parametern Informationen "uber die Breite und H"ohe der
+freizulassenden Stelle im Paragraphen. Die Einz"uge und der Satz der
+Fragmente des Abschnitts erfolgten automatisch.
+\end{window}
+
+\begin{verbatim}
+\begin{figwindow}[2,r,{
+\unitlength1cm
+\begin{picture}(3,1.4)
+\put(0.7,0.7){\circle*{0.2}} \put(0.7,0.7){\circle{1.2}}
+\put(0.7,0.7){\vector(0,1){0.6}} \put(2.5,0.7){\circle*{0.5}}
+\end{picture}
+},{Kreise und Pfeile}]
+Was leisten nun diese Macros ...
+... sieht hierbei wie folgt aus:
+\end{figwindow}
+\end{verbatim}
+
+\begin{figwindow}[2,r,{
+\unitlength1cm
+\begin{picture}(3,1.4)
+\put(0.7,0.7){\circle*{0.2}} \put(0.7,0.7){\circle{1.2}}
+\put(0.7,0.7){\vector(0,1){0.6}} \put(2.5,0.7){\circle*{0.5}}
+\end{picture}
+},{Kreise und Pfeile}]
+Was leisten nun diese Macros? Einen kleinen Eindruck hat man schon
+zu Anfang dieses Artikels bekommen: der erste Buchstabe des Absatzes
+ist in einer anderen Schriftgr"o"se gedruckt und in den Absatz eingepa"st.
+Es mu"s aber nicht unbedingt Text sein, der so einger"uckt wird. Es kann
+ebenso eine \verb?picture?--Umgebung sein, die so in den Absatz eingef"ugt
+wird. Das rechts stehende Beispiel, das aus "'\LaTeX , Eine Einf"uhrung"'
+bekannt sein d"urfte, ist in einer \verb?minipage?--Umgebung gesetzt
+worden. Die Eingabe im Text sieht hierbei wie oben aus.
+\end{figwindow}
+
+\begin{verbatim}
+\begin{tabwindow}[1,r,{
+\begin{tabular}[t]{|r|l|r@{:}l|}
+\hline
+1&HSV&12&0\\
+...
+\end{tabular}
+},{Tabelle}]
+Auch der Satz von Tabellen in ...
+... w"urde sie etwas durchh"angen.
+
+Nachdem die Tastatur gequ"alt ...
+... noch die Nummerierung stimmt.
+\end{tabwindow}
+\end{verbatim}
+
+\begin{tabwindow}[1,r,{
+\begin{tabular}[t]{|r|l|r@{:}l|}
+\hline
+1&HSV&12&0\\
+\hline
+2&MSV&11&1\\
+\hline
+3&VfB&10&2\\
+\hline
+4&SVW&9&3\\
+\hline
+5&1.\ FCK&8&4\\
+\hline
+\end{tabular}
+},{Tabelle}]
+Auch der Satz von Tabellen in ein Fenster ist kein gro"ses Problem.
+Man nimmt einfach eine Tabelle, oder denkt sich auch eine aus.
+Dann wird daf"ur Sorge getragen, da"s sie auch mit der unteren
+Zeile ausgerichtet wird. Ansonsten w"urde sie etwas durchh"angen.
+
+Nachdem die Tastatur gequ"alt und das Hirn zermartert wurde kommt
+dann so etwas heraus, wie es hier rechts zu sehen ist. Sogar die
+Tabellenbezeichnung ist erschienen. Aber wirklich interessant wird's,
+wenn auch bei der n"achsten Tabelle noch die Nummerierung stimmt.
+\end{tabwindow}
+
+\begin{verbatim}
+\begin{tabwindow}[2,l,{
+\begin{tabular}[t]{|r|l|r@{:}l|}
+...
+\end{tabular}
+},{Tabelle}]
+Was wahnsinnig ...
+... sagt's denn?
+\end{tabwindow}
+\end{verbatim}
+
+\begin{tabwindow}[2,l,{
+\begin{tabular}[t]{|r|l|r@{:}l|}
+\hline
+1&HSV&12&0\\
+\hline
+2&MSV&11&1\\
+\hline
+3&VfB&10&2\\
+\hline
+4&SVW&9&3\\
+\hline
+5&1.\ FCK&8&4\\
+\hline
+\end{tabular}
+},{Tabelle}]
+Was wahnsinnig auflockernd wirkt, ist der st"andige Positionswechsel
+von Abbildungen auf einer Seite. Das Auge wird nicht m"ude bei
+der Erkundung der typographischen Vielfalt, die in gedruckten
+Werken enthalten ist. Aber man sollte sich nichtsdestotrotz doch
+auf die wesentlichen Mitteilungen konzentrieren, die mit derartigen
+Werken vermittelt werden sollen.
+
+Was sind aber nun die essentiellen Informationen? Naja, ein kleines
+{\tt l} und eine {\tt 2} bewirkt ein g"anzlich anderes Erscheinungsbild
+der Realit"at, wie sie mit den Augen eines Fu"sballfans der sechziger
+Jahre gesehen sein k"onnte. Bevor wir es vergessen: Da war doch noch
+die Unsicherheit wegen der Nummerierung von Tabellen. Na also, wer
+sagt's denn?
+\end{tabwindow}
+
+\begin{verbatim}
+\begin{tabwindow}[4,c,{
+\begin{tabular}[t]{|r|l|r@{:}l|r@{:}l|}
+...
+\end{tabular}
+},{Tabelle}]
+\sloppy
+Aber jetzt wird alles auf ...
+... genug der Beispiele.
+\end{tabwindow}
+\end{verbatim}
+
+\begin{tabwindow}[4,c,{
+\begin{tabular}[t]{|r|l|r@{:}l|r@{:}l|}
+\hline
+1&HSV&12&0&14&1\\
+\hline
+2&MSV&11&1&10&4\\
+\hline
+3&VfB&10&2&12&9\\
+\hline
+4&SVW&9&3&11&9\\
+\hline
+5&1.\ FCK&8&4&10&10\\
+\hline
+\end{tabular}
+},{Tabelle}]
+\sloppy
+Aber jetzt wird alles auf die Spitze getrieben. Oder vielmehr
+in die Mitte gesetzt. Ja doch, auch der zentrierte Satz einer Tabelle
+ist ebenfalls kein gro"ses Problem. Ein Problem ist jedoch, wie denn
+der Text gelesen werden soll. Erst die linke Spalte und dann die
+rechte oder einfach von links nach rechts? Oft kann man es nicht
+falsch machen. Das tr"ostet doch ungemein!
+
+Nun noch ein kleiner Hinweis in eigener Sache:
+Beim zentrierten Satz ist es schon besser, wenn der Abstand zwischen
+den Abschnitten auf $0pt$ gesetzt wird oder nur ein Paragraph verwendet
+wird. Der Grund? Die Abst"ande k"onnen unabh"angig vom Zeilenabstand
+sein und so ist ein optisch korrekter Satz der Spalten rechts und
+links vom Fenster etwas m"uhsam {\tt :-)}. Um nichts dem Zufall zu
+"uberlassen wird dies gleich von {\tt picinpar} erledigt.
+\end{tabwindow}
+
+Jetzt noch der Fall, bei dem eine Abbildung zentriert in den Text gesetzt
+werden soll, aber rechts und links so wenig Platz ($<=72pt$) bleibt,
+da"s dort die Probleme mit den Trennungen zu gro"s werden w"urden. Als
+Beispiel wird im Fenster die \TeX{}--Eingabe zu diesem Fall gezeigt. Um
+gleich etwaigen Problemen vorzubeugen, wird zun"achst wie folgt vorgegangen:
+
+{\parskip0pt\topsep0pt
+\begin{verbatim}
+\newbox\pppbox
+\setbox\pppbox=\vbox{\hsize=11cm
+\begin{verbatim}
+\begin{figwindow}[4,c,{\wframepic{ppp}
+},
+{Die Eingabe zu diesem Textteil!}]
+Diese Vorgehensweise ist wegen der Benutzung
+...
+dem Einsatz im Wege.
+\end{figwindow}
+\end{verbatim}
+\verb?\end{verbatim}?
+\begin{verbatim}
+}
+\end{verbatim}
+}
+\newbox\pppbox
+\setbox\pppbox=\vbox{\hsize=11cm
+\begin{verbatim}
+\begin{figwindow}[4,c,{\wframepic{ppp}
+},
+{Die Eingabe zu diesem Textteil!}]
+Diese Vorgehensweise ist wegen der Benutzung
+...
+dem Einsatz im Wege.
+\end{figwindow}
+\end{verbatim}
+}
+\begin{figwindow}[4,c,{\wframepic{ppp}},
+{Die Eingabe zu diesem Textteil!}]
+Diese Vorgehensweise ist wegen der Benutzung von {\tt figwindow} und
+der {\tt verbatim} dargestellten Eingabe notwendig. Aber ist ja auch egal.
+Wichtig ist einfach, da"s festgestellt wird, ob rechts und links vom
+zentrierten Bild noch genug Platz frei ist, um dort Text ohne gro"se
+Probleme zu setzen. Die Wahl von $72pt$ ist mehr oder weniger willk"urlich
+vorgenommen worden. Letztlich h"angt diese Grenze ja auch von der
+verwendeten Sprache ab. Falls also nicht genug Platz an den Seiten
+vorhanden ist, dann wird einfach nach dem Fenster mit dem Text fortgefahren.
+Noch mal schnell ein Blick auf die Nummerierung der Abbildungen...
+Ja, stimmt genau. Jetzt steht also dem Einsatz nichts im Wege.
+\end{figwindow}
+
+\begin{window}[3,r,{\arraycolsep=2.5pt \def\arraystretch{.75}
+$\left(\begin{array}{ccccccccc}%
+ *&*&*&*&&&&&\\
+ **&*&*&*&*&&&&\\ \cline{3-6}
+ *&*&\multicolumn{1}{|c}{*}&*&*&\multicolumn{1}{c|}{*}&&&\\
+ &*&\multicolumn{1}{|c}{*}&*&*&\multicolumn{1}{c|}{*}&*&&\\
+ &&\multicolumn{1}{|c}{*}&*&*&\multicolumn{1}{c|}{*}&*&*&\\ \cline{3-6}
+ &&&*&*&*&*&*&*\\
+ &&&&*&*&*&*&*\\
+ &&&&&*&*&*&*\\
+ &&&&&&*&*&*
+ \end{array}
+ \right)$},{}]
+Doch halt! Es handelt sich hier ja um \TeX{}. Und das ist Grund genug, auch
+noch kurz auf mathematischen Formelsatz einzugehen. Sowohl im Fenster als
+auch im Text neben dem Fenster k"onnen Formeln erscheinen, deren Dimensionen
+beim Satz weitestgehend ber"ucksichtigt werden. Da ist also rechts ein
+{\tt array} und hier folgt eine Formel:
+
+\def\formel#1#2#3#4#5{#1(#4)-#1(#3)=
+\int_{#3}^{#4}\sum_{j=0}^{#5}#2(x_j)
+\prod_{{k=0}\atop{k\not= j}}^{#5}
+{x-x_k\over x_j-x_k}\; dx}
+$\formel Ffabn$
+
+Der zentrierte Satz von Formeln neben dem Text ist bisher mit
+{\tt picinpar.sty} nicht m"oglich, vielleicht kommt es aber eines
+Tages. Und "uberhaupt hat sich gerade der Mathematiksatz als gro"ses
+Problem bei der Entwicklung herausgestellt, da doch viel {\tt glue} in
+den {\tt boxes} verwendet wird. Aber es geht ja doch so halbwegs.
+\end{window}
+\vfill
+\centerline{Friedhelm Sowa, Heinrich--Heine--Universit"at D"usseldorf,
+Universit"atsrechenzentrum}
+\centerline{Email: sowa@convex.rz.uni-duesseldorf.de {\sl oder}
+tex@ze8.rz.uni-duesseldorf.de}
+\end{document}
diff --git a/macros/latex209/contrib/picinpar/picinpar-en.pdf b/macros/latex209/contrib/picinpar/picinpar-en.pdf
new file mode 100644
index 0000000000..f35c4a8ccf
--- /dev/null
+++ b/macros/latex209/contrib/picinpar/picinpar-en.pdf
Binary files differ
diff --git a/macros/latex209/contrib/picinpar/picinpar-en.tex b/macros/latex209/contrib/picinpar/picinpar-en.tex
new file mode 100644
index 0000000000..7dedd49391
--- /dev/null
+++ b/macros/latex209/contrib/picinpar/picinpar-en.tex
@@ -0,0 +1,89 @@
+\documentclass[pagesize=auto, fontsize=14pt, DIV=12, parskip=half]{scrartcl}
+
+\usepackage{fixltx2e}
+\usepackage{etex}
+\usepackage{lmodern}
+\usepackage[T1]{fontenc}
+\usepackage{textcomp}
+\usepackage{microtype}
+\usepackage{hyperref}
+
+\newcommand*{\mail}[1]{\href{mailto:#1}{\texttt{#1}}}
+\newcommand*{\pkg}[1]{\textsf{#1}}
+\newcommand*{\cs}[1]{\texttt{\textbackslash#1}}
+\makeatletter
+\newcommand*{\cmd}[1]{\cs{\expandafter\@gobble\string#1}}
+\makeatother
+\newcommand*{\env}[1]{\texttt{#1}}
+
+\addtokomafont{title}{\rmfamily}
+\deffootnote{0.5em}{1em}{\textsuperscript{\thefootnotemark}}
+
+\title{The \pkg{picinpar} package\thanks{This manual corresponds to \pkg{picinpar.sty}~v1.2a, dated~July~13, 1993.}}
+\subtitle{Macros for making windows with \LaTeX}
+\author{Friedhelm Sowa\thanks{Heinrich-Heine-University D\"usseldorf, Computing Center\newline\mail{sowa@uni-duesseldorf.de}}}
+\date{July 13, 1993}
+
+
+\begin{document}
+
+\maketitle
+
+Distributed under the terms of the GNU General Public License.
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version~2, or (at your
+option) any later version.
+
+Incorporated are basic ideas of Alan Hoenig (Thanks Alan!)
+Thanks to Phil Taylor, who gave some useful hints during his
+tutorial at the EURO~\TeX~92 in Prague.
+
+Also thanks to Ulrik Vieth, who incorporated the macros for
+generating captions within the windows.
+
+
+\minisec{Known problems:}
+
+\begin{itemize}
+\item
+ Don't use \cmd{\samepage}
+
+\item
+ Use \cmd{\footnotemark} within and \cmd{\footnotetext} outside the
+ \env{window}-environment instead of \cmd{\footnote}
+
+\item
+ When using the \pkg{epic}-package load \pkg{picinpar} before \pkg{epic}
+ like
+\begin{verbatim}
+\documentstyle[...,picinpar,epic]{...}
+\end{verbatim}
+\end{itemize}
+
+
+\minisec{Changes:}
+
+\begin{labeling}{1.2a}
+\item[1.1]
+ If \verb+\brokenpenalty\maxdimen+ then it's set to 9999 within the
+ window's group
+
+ Reported by \mail{kuhlmav@elec.canterbury.ac.nz}
+
+\item[1.2]
+ When centering a window and the right column contains less
+ lines than the left column then the right lines are raised
+ by using \cmd{\vfill}
+
+ Reported by Wolfgang Riedel, TU Chemnitz
+
+\item[1.2a]
+ A better way to shift the right box. There was some trouble
+ when the window is on the left. I don't know why I didn't
+ notice \TeX's overfull \cmd{\vbox}
+
+ Reported by Stephan Seidl, \mail{seidl@rcs.urz.tu-dresden.de}
+\end{labeling}
+
+\end{document}
diff --git a/macros/latex209/contrib/picinpar/picinpar.sty b/macros/latex209/contrib/picinpar/picinpar.sty
new file mode 100644
index 0000000000..47e1688420
--- /dev/null
+++ b/macros/latex209/contrib/picinpar/picinpar.sty
@@ -0,0 +1,535 @@
+\typeout{%
+Pictures in Paragraphs. Version 1.2a, July 13, 1993}
+% This is picinpar.sty version 1.2a as of july 13, 1993
+% Macros for making windows with LaTeX
+%
+% By Friedhelm Sowa, Heinrich-Heine-University D\"usseldorf,
+% Computing Center
+% In case of emergency try to get the email adress
+% after having checked the input :-)
+% Okay, for those who are too lazy:
+% sowa@uni-duesseldorf.de
+% Distributed under the terms of the GNU General Public License.
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2, or (at your
+% option) any later version.
+%
+% Incorporated are basic ideas of Alan Hoenig (Thanks Alan!)
+% Thanks to Phil Taylor, who gave some useful hints during his
+% tutorial at the EURO TeX 92 in Prague.
+%
+% Also thanks to Ulrik Vieth, who incorporated the macros for
+% generating captions within the windows.
+%
+%----------------
+% Known problems:
+%
+% - Don't use \samepage
+% - Use \footnotemark within and \footnotetext outside the
+% window-environment instead of \footnote
+% - When using the epic-package load picinpar before epic
+% like \documentstyle[...,picinpar,epic]{...}
+%----------------
+% Changes:
+%
+% 1.1 If \brokenpenalty\maxdimen then it's set to 9999 within the
+% window's group
+%
+% Reported by kuhlmav@elec.canterbury.ac.nz
+%
+% 1.2 When centering a window and the right column contains less
+% lines than the left column then the right lines are raised
+% by using \vfill
+%
+% Reported by Wolfgang Riedel, TU Chemnitz
+%
+% 1.2a A better way to shift the right box. There was some trouble
+% when the window is on the left. I don't know why I didn't
+% notice TeX's overfull \vbox
+%
+% Reported by Stephan Seidl, seidl@rcs.urz.tu-dresden.de
+
+%
+%
+%
+% Here we go
+%
+% Counts
+\newcount\br
+\newcount\bl
+\newcount\na
+\newcount\nb
+\newcount\tcdsav
+\newcount\tcl
+\newcount\tcd
+\newcount\tcn
+\newcount\cumtcl
+\newcount\cumpartcl
+% Dimens
+\newdimen\lftside
+\newdimen\rtside
+\newdimen\hpic
+\newdimen\vpic
+\newdimen\strutilg
+\newdimen\picwd
+\newdimen\topheight
+\newdimen\ilg
+\newdimen\lpic
+\newdimen\lwindowsep \newdimen\rwindowsep % VK 10 Feb 93
+\lwindowsep0.5\baselineskip % "
+\rwindowsep0.5\baselineskip % "
+\newdimen\cumpar
+% Tokens
+\newtoks\twa
+\newtoks\la
+\newtoks\ra
+\newtoks\ha
+\newtoks\pictoc
+% Boxes
+\newbox\rawtext
+\newbox\holder
+\newbox\windowbox
+\newbox\wartext
+\newbox\finaltext
+\newbox\aslice
+\newbox\bslice
+\newbox\wbox
+\newbox\wstrutbox
+\newbox\picbox
+\newbox\waslice
+\newbox\wbslice
+\newbox\fslice
+% Another strut
+\def\wstrut{\relax\ifmmode\copy\wstrutbox\else\unhcopy\wstrutbox\fi}
+%
+\long\def\window[#1,#2,#3,#4] {%
+% #1 is an integer---no. of lines down from par top
+% #2 is l, r or c what means left, right or centered
+% default is, that the picture is printed at the left side
+% #3 is the material for setting a graphic box
+% #4 is the explanation for the graphic
+\vskip\parskip\everypar{}
+\global\cumpar=0pt
+\global\cumpartcl=0
+\global\cumtcl=0
+ \tcd=#1
+ \lftside=0pt \rtside=0pt
+% \hpic=\linewidth
+ \twa={} \la={} \ra={} \ha={}
+\setbox\wbox=\hbox{(}
+\computeilg
+\pictoc={#3}
+\setbox\windowbox=\vbox{\hbox{#3}}
+\setbox\wbox=\vbox{\hbox{\noindent#4}}
+\picwd=\wd\windowbox
+\hpic=\picwd
+\vpic=\ht\windowbox\advance\vpic\dp\windowbox
+\if #2c\lftside=\linewidth\advance\lftside-\picwd\rtside=0.5\lftside
+ \lftside=\rtside
+\else \if #2r\lftside=\linewidth\advance\lftside-\picwd
+ \rtside=0pt
+ \else\rtside=\linewidth\advance\rtside-\picwd
+ \lftside=0pt
+ \fi
+\fi
+%
+% In case of a centered picture, that does not allow text beside
+% we have to add some glue between preceding text, window and
+% following text.
+%
+\if #2c
+ \ifdim\rtside<72pt
+ \rtside=0pt\lftside=0pt
+ \setbox\windowbox=\vbox{%
+ \hrule width\picwd height0pt depth0pt
+ \vskip.5\parskip\box\windowbox\vskip.5\parskip
+ \hrule width\picwd height0pt depth0pt}
+ \vpic=\ht\windowbox\advance\vpic\dp\windowbox
+ \fi
+ \parskip0pt % Within the window area a \parskip>0pt may look ugly
+\fi
+\ifnum\picwd=0\setbox\picbox=\vbox{\hbox{\noindent#4}} % without picture
+ \hpic=\wd\picbox % calculate dimensions
+ \ifnum\lftside=0\rtside=\linewidth\advance\rtside-\hpic
+ \else\ifnum\rtside=0\lftside=\linewidth\advance\lftside-\hpic
+ \else\rtside=0.5\linewidth\advance\rtside-0.5\hpic
+ \lftside=\rtside
+ \fi\fi
+\else\setbox\picbox=\vbox{\hsize=\hpic\vbox to\vpic{\box\windowbox\vfill}%
+\ifdim\ht\wbox>0pt\vskip\ilg\vbox{\hsize=\hpic\noindent#4
+%
+% See above, this is the second part of glue
+%
+\if #2c
+ \ifdim\rtside=0pt \ifdim\lftside=0pt
+ \vskip\parskip\hrule width\hpic height0pt depth0pt
+ \fi \fi
+\fi
+}
+\fi}\fi
+\vpic=\ht\picbox\advance\vpic\dp\picbox
+%\ifdim\lftside>0pt\advance\lftside-0.5\baselineskip\fi % put in a distance
+%\ifdim\rtside>0pt\advance\rtside-0.5\baselineskip\fi % between text and
+% % window
+\ifdim\lftside>0pt\advance\lftside-\lwindowsep\fi % VK 10 Feb 93
+\ifdim\rtside>0pt\advance\rtside-\rwindowsep\fi % "
+\global\br=\rtside \global\bl=\lftside
+\ifnum\picwd=0
+\ifdim\vpic>0pt\picwd=\hpic
+\else\vpic=\ht\picbox\advance\vpic\dp\picbox
+\fi
+\fi
+ \global\tcl=0 \lpic=0pt
+ \loop\global\advance\tcl by 1 \lpic=\tcl\baselineskip
+ \ifdim\lpic<\vpic\repeat
+ \vpic=\lpic
+ \global\cumtcl=\tcl
+%
+% Here we know exactly the number of indented lines and
+% are able to generate the tokens for the \parshape list
+%
+ \ifnum\bl>0\la={ 0pt \lftside}\fi
+ \ifnum\br>0\ra={ 0pt \rtside}\fi
+ \ifnum\tcd>0\ha={ 0pt \linewidth}\fi
+ \ifnum\tcl<1\global\tcl=1\fi
+ \createparshapespec
+ \tcd=#1 % restore the lintel
+ \global\tcdsav=#1
+%
+% This is a very tricky part of the package. Some day there
+% will exist a detailed documentation.
+%
+\ifdim\parskip>0pt
+ \def\par{\hfill\vadjust{\vskip0pt\vbox to\parskip{\vss}}
+ \global\advance\cumpartcl by 1
+ \global\advance\cumpar by \parskip
+ \global\lpic=\ht\wstrutbox
+ \global\advance\lpic by \dp\wstrutbox
+ \ifdim\cumpar<\lpic
+ \else\advance\cumpar by -\lpic
+ \advance\cumtcl by -1
+ \fi
+ \egroup\global\tcd=\tcdsav
+ \setbox\wartext=\vbox{\unvbox\rawtext}
+\setbox\rawtext=\vbox\bgroup
+\clubpenalty=0\widowpenalty=0
+\ifnum\brokenpenalty<\maxdimen\else\brokenpenalty=9999\fi
+\tolerance=1000
+\global\lpic=\ht\wstrutbox
+\global\advance\lpic by \dp\wstrutbox
+%
+% Pick up header lines
+%
+\ifnum\tcd>0\vbadness=10000\splittopskip0pt
+ \loop\setbox\holder=\vsplit\wartext to \lpic
+ \hpic=\wd\holder\prune\holder\hpic
+ \ifdim\ht\holder=\parskip
+ \hbox{\vrule height\parskip width0pt depth0pt}
+ \typeout{A paragraph ended within headlines! Please change }
+ \typeout{the number of headlines for the window environment!}
+ \global\advance\tcd by -1
+ \else\hbox{\vbox{\box\holder\unskip}}
+ \global\advance\tcd by -1
+ \fi
+ \ifnum\tcd>0\repeat
+ \global\tcd=0
+ \ifdim\ht\wartext>0pt
+ \ifdim\ht\wartext=\parskip\global\advance\tcdsav by 1
+ \setbox\holder=\vsplit\wartext to \lpic
+ \hbox{\vrule height\parskip width0pt depth0pt}
+ \global\advance\cumpar by -\parskip
+ \global\advance\cumpartcl by -1
+ \fi\fi
+\fi
+%
+% Pick up lines beside window, the rest too
+%
+\global\tcn=0
+\topheight=0pt
+\ifdim\ht\wartext>0pt\vbadness=10000\splittopskip0pt
+ \loop\setbox\holder=\vsplit\wartext to \lpic
+ \hpic=\wd\holder\prune\holder\hpic
+ \ifdim\ht\holder=\parskip
+ \hbox{\vrule height\parskip width0pt depth0pt}
+ \global\advance\topheight by \parskip
+ \else
+ \setbox\fslice=\hbox{\box\holder}
+ \hpic=\ht\fslice
+ \advance\hpic by\dp\fslice
+ \ifdim\hpic>\lpic
+ \global\advance\topheight by\hpic
+ \hbox{\vbox{\box\fslice\vss}}
+ \else\ifdim\hpic=0pt\relax
+ \else\global\advance\topheight by \lpic
+ \hbox{\vbox{\box\fslice}}\fi\fi
+ \fi
+ \ifdim\ht\wartext>0pt\repeat
+\tcn=0
+\loop\advance\tcn by 1
+\advance\topheight by -\lpic
+\ifdim\topheight>0pt\repeat
+\hpic=\topheight
+\ifdim\hpic<0pt\advance\tcn by -1\fi
+\global\topheight=\tcn\lpic
+\fi
+%
+% If the indented part is not completed we have to generate a
+% new token for the \parshape list
+%
+\ifnum\tcn<\cumtcl
+\global\tcl=\cumtcl
+\global\advance\topheight by\cumpartcl\parskip
+ \global\advance\tcl by -\tcn \global\twa={}
+ \ifnum\tcl>0
+\global\vpic=\topheight
+\global\topheight=\tcl\lpic
+\global\advance\vpic by \topheight
+\global\advance\vpic by \lpic
+ \createparshapespec
+ \parshape=\tcn \the\twa
+ \else\parshape=0
+ \fi
+\else\parshape=0\fi}
+\else\def\par{\\}
+\fi % new definition of \par in case of \parskip>0 ends here
+%
+% This is where we start to pick up the paragraph(s)
+%
+ \setbox\rawtext=\vbox\bgroup\unvbox\rawtext\unskip
+ \clubpenalty=0\widowpenalty=0
+ \ifnum\brokenpenalty<\maxdimen\else\brokenpenalty=9999\fi
+ \tolerance=1000
+ \parshape=\tcn \the\twa }
+%
+\def\endwindow{%
+ \global\tcd=\tcdsav
+ \egroup\vskip\parskip\parshape=0 % reset parshape; end \box\rawtext
+ \vbadness=10000
+ \splittopskip=0pt
+%
+% Typeset the lines above the window
+%
+\ifnum\tcd>0\setbox\holder=\vsplit\rawtext to \tcd\baselineskip
+\tcn=\tcd
+\loop\advance\tcn -1
+\setbox\fslice=\vsplit\holder to\baselineskip
+\prune\fslice\linewidth
+\topheight=0pt
+\ifnum\dp\fslice>\dp\wstrutbox
+ \advance\topheight-\dp\fslice
+ \advance\topheight\dp\wstrutbox
+ \advance\topheight\ilg\fi
+\hbox to\linewidth{\box\fslice}
+\vskip-\topheight
+\ifdim\ht\holder>0pt\repeat
+\fi
+%
+% Now we build the boxes beside the window
+%
+\global\topheight=\tcl\baselineskip
+\ifnum\cumpartcl>0\global\tcl=\cumtcl
+ \global\topheight=\vpic
+\fi
+\ifnum\bl>0 \ifnum\br>0 \multiply\topheight by 2\fi\fi
+\ifnum\bl>0\setbox\holder=\vsplit\rawtext to\topheight
+\else\ifnum\br>0\setbox\holder=\vsplit\rawtext to\topheight\fi\fi
+\tcn=\tcl \na=0 \nb=0
+\ifnum\bl>0 \ifnum\br>0 \multiply\tcn by 2\fi\fi
+\ifnum\bl>0\na=\tcn\ifnum\br>0\divide\na by 2\fi\fi
+\ifnum\br>0\nb=\tcn\ifnum\bl>0\divide\nb by 2\fi\fi
+\ifnum\na=0\ifnum\nb=0
+ \setbox\waslice=\vbox to\vpic{\vss}
+ \setbox\wbslice=\vbox to\vpic{\vss}
+ \bl=1\br=1
+ \vskip\ilg
+\fi\fi
+%
+% both sides
+%
+\ifnum\na>0 \ifnum\nb>0
+\loop\advance\nb -1
+\advance\na -1
+\setbox\aslice=\vsplit\holder to\baselineskip
+\prune\aslice\lftside
+\setbox\waslice=\vbox{\unvbox\waslice\hbox
+to\lftside{\box\aslice\hfil}}
+\setbox\bslice=\vsplit\holder to\baselineskip
+\prune\bslice\rtside
+\setbox\wbslice=\vbox{\unvbox\wbslice\hbox
+to\rtside{\box\bslice\hfil}}
+\ifnum\nb>0\repeat
+\fi\fi
+%
+% only text on the left side
+%
+\ifnum\na>0
+ \loop\advance\na -1
+ \setbox\aslice=\vsplit\holder to\baselineskip
+ \prune\aslice\lftside
+ \setbox\waslice=\vbox{\unvbox\waslice\hbox
+ to\lftside{\box\aslice\hfil}}
+ \ifdim\ht\holder>0pt\repeat
+\fi
+%
+% only text on the right side
+%
+\ifnum\nb>0
+ \loop\advance\nb -1
+ \setbox\bslice=\vsplit\holder to\baselineskip
+ \prune\bslice\rtside
+ \setbox\wbslice=\vbox{\unvbox\wbslice\hbox
+ to\rtside{\box\bslice\hfil}}
+ \ifdim\ht\holder>0pt\repeat
+\fi
+%
+% fixing the dimensions of the window part
+%
+\ifnum\bl=0\topheight=\ht\wbslice
+\else\ifnum\br=0\topheight=\ht\waslice
+ \else\ifdim\ht\waslice>\ht\wbslice\topheight=\ht\waslice
+ \else\topheight=\ht\wbslice\fi\fi\fi
+%
+% ship out the window material to the main vertical list
+%
+\ifnum\bl>0 \ifnum\br>0 \ifdim\ht\wbslice<\topheight
+\setbox\wbslice=\vbox to\topheight{\box\wbslice\vfill}
+\fi\fi\fi
+\setbox\windowbox=\vbox{\hbox to\linewidth{%
+\ifnum\bl>0\box\waslice\hfill\fi%
+\vbox to\topheight{\hrule width\picwd height0pt depth0pt\vskip0pt%
+\vfill\unvbox\picbox%
+\ifnum\picwd>0\vfill\fi%
+\vss}\ifnum\br>0\hfill\vbox{\box\wbslice}\fi}}%
+\unvbox\windowbox%
+\loop
+ \setbox\bslice=\vsplit\rawtext to\baselineskip
+ \prune\bslice\linewidth
+ \setbox\wbslice=\vbox{\hbox to\linewidth{\box\bslice\hfil}}
+ \unvbox\wbslice
+ \ifdim\ht\rawtext>0pt
+\repeat
+}% FINITO
+%
+% What else do we need?
+%
+\def\prune#1#2{
+% take a \vbox containing a single \hbox,
+% \unvbox it, and cancel the \lastskip
+% put in a \hbox of width #2
+ \unvbox#1 \setbox#1=\lastbox % \box#1 now is an \hbox
+ \ifdim\ht#1=\parskip
+ \setbox#1=\hbox to#2{\vrule height\parskip depth0pt width0pt\hfill}
+ \else\ifdim\ht#1=0pt\relax
+ \else\setbox#1=\hbox to#2{\wstrut\unhbox#1\unskip}\fi\fi}
+%
+% Here the token \twa is generated.
+% It's not so difficult as it looks like.
+%
+\def\createparshapespec{%
+\global\tcn=0
+\ifnum\bl>0\global\tcn=\tcl\else\ifnum\br>0\global\tcn=\tcl\fi\fi
+\na=0 \nb=0
+\ifnum\bl>0 \ifnum\br>0 \multiply\tcn by 2\fi\fi
+\ifnum\bl>0\na=\tcn\ifnum\br>0\divide\na by 2\fi\fi
+\ifnum\br>0\nb=\tcn\ifnum\bl>0\divide\nb by 2\fi\fi
+\global\advance\tcn by\tcd \global\advance\tcn by1
+\ifnum\tcd>0
+\loop\twa=\expandafter{\the\twa\the\ha}\advance\tcd -1
+\ifnum\tcd>0\repeat
+\fi
+\ifnum\bl>0 \ifnum\br>0
+\loop\twa=\expandafter{\the\twa\the\la}\advance\na -1
+\twa=\expandafter{\the\twa\the\ra}\advance\nb -1
+\ifnum\na>0\repeat
+\fi\fi
+\ifnum\na>0
+\loop\twa=\expandafter{\the\twa\the\la}\advance\na -1
+\ifnum\na>0\repeat
+\fi
+\ifnum\nb>0
+\loop\twa=\expandafter{\the\twa\the\ra}\advance\nb -1
+\ifnum\nb>0\repeat
+\fi
+\global\twa=\expandafter{\the\twa 0pt \the\linewidth}}
+%
+\def\computeilg{% compute the interline glue
+ \tcl=0\ilg=0pt\strutilg=0pt
+ \loop\setbox\wbox=\hbox{\char\tcl}
+ \ifdim\ht\wbox>\ilg\ilg=\ht\wbox\fi
+ \ifdim\dp\wbox>\strutilg\strutilg=\dp\wbox\fi
+ \advance\tcl by 1
+ \ifnum\tcl<128\repeat
+ \ht\wbox=\ilg
+ \dp\wbox=\strutilg
+ \strutilg=\ht\wbox %\advance\strutilg by\ilg
+ \ifdim\strutilg>\baselineskip
+ \typeout{character with height greater baselineskip found in font}
+ \typeout{baselineskip changed to 1.5 of that height!}
+ \baselineskip=1.5\strutilg
+ \fi
+ \global\ilg=\baselineskip
+ \global\advance\ilg-\ht\wbox \global\advance\ilg-\dp\wbox
+ \strutilg=\ht\wbox \advance\strutilg by\ilg
+ \setbox\wstrutbox=\hbox{\vrule height\strutilg depth\dp\wbox width0pt}}
+%
+% frames
+%
+\def\framepic#1{\vbox{%
+\hsize\expandafter\wd\csname #1box\endcsname
+\advance\hsize .8pt \hrule%
+\hbox to\hsize%
+{\vrule\hfill\vbox to\expandafter\ht\csname #1box\endcsname{%
+\expandafter\box\csname #1box\endcsname }\hfill\vrule}\hrule\vss}}
+%
+\def\wframepic#1{\vbox{%
+\hsize\expandafter\wd\csname #1box\endcsname
+\advance\hsize 3.8pt\hrule%
+\hbox to\hsize%
+{\vrule\hfill\vbox{\kern1.5pt%
+\expandafter\box\csname #1box\endcsname
+\kern1.5pt}\hfill\vrule}\hrule\vss}}
+%
+% caption
+%
+\def\winstepcounter#1{\global\advance\csname c@#1\endcsname 1
+ {\let\@elt\@stpelt \csname cl@#1\endcsname}}
+
+\def\winrefstepcounter#1{\winstepcounter{#1}\let\@tempa\protect
+\def\protect{\noexpand\protect\noexpand}%
+\edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}%
+\let\protect\@tempa}
+\long\def\w@dblarg#1{\@ifnextchar[{#1}{\w@xdblarg{#1}}}
+\long\def\w@xdblarg#1#2\par{#1[{#2}]#2\par}
+
+\def\wincaption{\winrefstepcounter\@captype \w@dblarg{\@wincaption\@captype}}
+
+\long\def\@wincaption#1[#2]#3\par{\par\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \normalsize
+ \@makewincaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\long\def\@makewincaption#1#2{%
+ \setbox\@tempboxa\hbox{\footnotesize{\bf #1:\enspace}{#2}}%
+ \ifdim\wd\@tempboxa>\picwd
+ {\footnotesize{\bf #1:\enspace}{#2\par}}
+ \else
+ \hbox to\picwd{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+\long\def\figwindow[#1,#2,#3,#4] {%
+ \advance\c@figure -1
+ \begin{window}[#1,#2,{#3},{\def\@captype{figure}%
+ \wincaption#4\par}] }
+
+\long\def\tabwindow[#1,#2,#3,#4] {%
+ \advance\c@table -1
+ \begin{window}[#1,#2,{#3},{\def\@captype{table}%
+ \wincaption#4\par}] }
+
+\def\endfigwindow{\end{window}}
+\def\endtabwindow{\end{window}}
+\endinput
diff --git a/macros/latex209/contrib/picins/LIES.MICH b/macros/latex209/contrib/picins/LIES.MICH
new file mode 100644
index 0000000000..23ce7c0d32
--- /dev/null
+++ b/macros/latex209/contrib/picins/LIES.MICH
@@ -0,0 +1,32 @@
+nformationen zu PICINS (Version 3.0)
+ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
+
+Edmund Lang, THD/HRZ, 17.11.92
+
+
+PICINS ist ein Makropaket fr LaTeX, das die Integration von Bildern in
+LaTeX-Dokumente auf einfache Weise erm”glicht.
+
+Die Dokumentation zu PICINS ist in der Datei MPIC.DVI enthalten.
+
+Das Hilfsprogram PCLTOMSP stammt aus dem emTeX-Paket von E. Mattes.
+
+Folgende Dateien sind Bestandteil des PICINS-Paketes:
+
+- !INFO.DOK Diese Dokumentations-Datei
+- PICINS.STY PICINS-Makro-Paket als .STY-Datei
+- PICINS.DOC Dokumentierte Form von PICINS.STY
+ (wird nur zur Dokumentation ben”tigt)
+- PICINS.ALT Alte Version der PICINS.STY-Datei (wird aus
+ Kompatibilit„tsgrnden noch zur Verfgung gestellt)
+- EXTPIC.STY Makros zur Realisierung von \special-Kommandos
+- MPIC.DVI Benutzer-Handbuch in DVI-Form
+- MANDEL.* Externes Bild (erscheint im Benutzerhandbuch)
+- MEXHAT1.* Externes Bild (erscheint im Benutzerhandbuch)
+- MEXHAT2.* Externes Bild (erscheint im Benutzerhandbuch)
+- PCLREL.EXE Hilfsprogramm PCLRel
+- PCLTOMSP.EXE Konvertierungsprogramm PCLtoMSP
+- PCLTOMSP.DOC Dokumentation zu PCLtoMSP
+- HPTOXX.EXE Konvertierungsprogramm HPtoXX
+- HPTOXX.DVI Dokumentation zu HPtoXX
+ \ No newline at end of file
diff --git a/macros/latex209/contrib/picins/README.1st b/macros/latex209/contrib/picins/README.1st
new file mode 100644
index 0000000000..3fb9c6eeb0
--- /dev/null
+++ b/macros/latex209/contrib/picins/README.1st
@@ -0,0 +1,7 @@
+% picins/README 21 Dec 92
+%------------------------------------------------------------
+
+The complete distribution is available from ftp.uni-stuttgart.de in
+soft/tex/systems/pc/picins as a ZIP file, including MS-DOS programs.
+This directory holds only a subset, namely the style files.
+
diff --git a/macros/latex209/contrib/picins/extpic.sty b/macros/latex209/contrib/picins/extpic.sty
new file mode 100644
index 0000000000..0957e28912
--- /dev/null
+++ b/macros/latex209/contrib/picins/extpic.sty
@@ -0,0 +1,62 @@
+% EXTPIC.STY 02. Mai 90
+%------------------------------------------------
+% (c) 1988,1989 by J.Schrod.
+% (c) 1990 by E.Lang.
+
+%
+% Version 1.0 Dezember 1988.
+% Version 1.1 April 1989.
+% Version 1.2 Anpassung an PICINS.STY, Mai 1990
+% Version 1.3 Neue Makros fr die DVIDRV-Treiber aus emTeX, Februar 1991
+%
+
+%
+% Beispiele fr special-Kommandos zur Einbindung externer Grafiken in
+% LaTeX-Dokumente bei Benutzung der Style-Datei PICINS.STY
+%
+
+
+\chardef\uscode=\catcode`\_
+\catcode`\_=11 % letter
+
+
+
+%
+% general \special-placement macro with positioning in left upper corner
+% Params: 1. Special command
+%
+
+\def\special_set#1{\special{#1}}%
+
+
+%
+% Makros zur Einbindung externer Grafiken
+%
+
+
+%
+% Treiberfamilie DVI... des Instituts fr theoretische Informatik der TH
+% Darmstadt
+%
+\def\picinc#1{\special_set{PICFILE:INCLUDE:#1}} % Picture Dateien (DPF)
+\def\hpinc#1{\special_set{HP:INCLUDE:#1}} % HP-PCL Steuer-Kommandos
+\def\preinc#1{\special_set{PRESCRIBE:INCLUDE:#1}} % PreScribe Dateien (Kyocera)
+\def\precmd#1{\special_set{PRESCRIBE:COMMAND:#1}} % PreScribe-Sequenzen (Kyocera)
+\def\psinc#1{\special_set{POSTSCRIPT:INCLUDE:#1}} % PostScript Dateien
+\def\pscmd#1{\special_set{POSTSCRIPT:COMMAND:#1}} % PostScript-Sequenzen
+
+
+%
+% Treiberfamilie DVIDRV au emTeX von Eberhard Mattes.
+%
+\def\eminc#1{\special_set{em:graph #1}} % MSP- oder PCX-Dateien
+
+
+
+%
+% finished. The category code must be restored.
+%
+
+\catcode`\_=\uscode
+
+\endinput
diff --git a/macros/latex209/contrib/picins/mandel.msp b/macros/latex209/contrib/picins/mandel.msp
new file mode 100644
index 0000000000..52d1abd44d
--- /dev/null
+++ b/macros/latex209/contrib/picins/mandel.msp
Binary files differ
diff --git a/macros/latex209/contrib/picins/mexhat1.msp b/macros/latex209/contrib/picins/mexhat1.msp
new file mode 100644
index 0000000000..0b1c1cd0a4
--- /dev/null
+++ b/macros/latex209/contrib/picins/mexhat1.msp
Binary files differ
diff --git a/macros/latex209/contrib/picins/mexhat2.msp b/macros/latex209/contrib/picins/mexhat2.msp
new file mode 100644
index 0000000000..23d1265909
--- /dev/null
+++ b/macros/latex209/contrib/picins/mexhat2.msp
Binary files differ
diff --git a/macros/latex209/contrib/picins/mpic.dvi b/macros/latex209/contrib/picins/mpic.dvi
new file mode 100644
index 0000000000..ca2a6a32f6
--- /dev/null
+++ b/macros/latex209/contrib/picins/mpic.dvi
Binary files differ
diff --git a/macros/latex209/contrib/picins/picins.alt b/macros/latex209/contrib/picins/picins.alt
new file mode 100644
index 0000000000..f960b83a49
--- /dev/null
+++ b/macros/latex209/contrib/picins/picins.alt
@@ -0,0 +1,510 @@
+\message{Option `picins' Version 2.1 Nov. 1991, TH Darmstadt/HRZ}
+\newbox\@BILD%
+\newdimen\d@breite%
+\newdimen\d@hoehe%
+\newdimen\d@xoff%
+\newdimen\d@yoff%
+\newdimen\d@shad%
+\newdimen\d@dash%
+\newdimen\d@boxl%
+\newdimen\d@pichskip%
+\newdimen\d@tmp
+\newdimen\d@tmpa
+\newdimen\d@bskip
+\newdimen\hsiz@
+\newcount\c@breite
+\newcount\c@hoehe
+\newcount\c@xoff
+\newcount\c@yoff
+\newcount\c@pos
+\newcount\c@shad
+\newcount\c@dash
+\newcount\c@boxl
+\newcount\c@zeilen%
+\newcount\@changemode%
+\newcount\c@picpos
+\newcount\c@whole%
+\newcount\c@half%
+\newcount\c@tmp
+\newcount\c@tmpa
+\newcount\c@tmpb
+\newcount\c@tmpc
+\newcount\c@tmpd
+\newskip\d@leftskip
+\newif\if@list \@listfalse%
+ %
+\newif\if@offset%
+ %
+
+
+\c@picpos=0
+\d@shad=4pt%
+\d@dash=4pt%
+\d@boxl=10pt%
+\d@pichskip=1em%
+\@changemode=0%
+\def\@captype{figure}%
+
+
+\def\piccaptype#1{\def \@captype {#1}}
+
+
+\def\pichskip#1{\d@pichskip #1\relax}
+
+
+\def\shadowthickness#1{\d@shad #1\relax}
+
+
+\def\dashlength#1{\d@dash #1\relax}
+
+
+\def\boxlength#1{\d@boxl #1\relax}
+
+
+\def\picchangemode{\@changemode=1}%
+\def\nopicchangemode{\@changemode=0}%
+
+
+\def\piccaption{\refstepcounter\@captype \@dblarg{\my@caption \@captype}}
+\long\def\my@caption #1[#2]#3{
+ \par\vskip\parskip
+ \addcontentsline{\csname ext@#1\endcsname }{#1}%
+ {\protect \numberline {\csname the#1\endcsname }{\ignorespaces #2}}
+ \begingroup
+ \@parboxrestore \normalsize
+ \my@makecaption {\csname fnum@#1\endcsname }{\ignorespaces #3}
+ \par
+ \global\advance\d@hoehe by 10pt
+ \endgroup
+ \vskip\parskip
+}
+\def\my@makecaption #1#2{
+ \global\advance\d@hoehe by 10pt
+ \global\advance\hangafter by-1
+ \setbox \@tempboxa \hbox {#1: #2}
+ \ifdim \wd\@tempboxa >\hsiz@ \unhbox\@tempboxa\hfil \par
+ \else \ifnum\c@pos=2 \hbox to\hsiz@ {\hfil{\box\@tempboxa}}
+ \else
+ \d@tmpI=\hsize\advance\d@tmpI by-\hsiz@
+ \hbox to\hsize{\hskip\d@tmpI{\hbox to\hsiz@{\box\@tempboxa\hfil}}}
+ \fi
+ \fi
+}
+
+
+
+
+
+
+
+\def\parpic{%
+ \@ifnextchar ({\iparpic}{\iparpic(0pt,0pt)}
+}
+\def\iparpic(#1,#2){%
+ \@ifnextchar ({\@offsettrue\iiparpic(#1,#2)}%
+ {\@offsetfalse\iiparpic(#1,#2)(0pt,0pt)}
+}
+\def\iiparpic(#1,#2)(#3,#4){%
+ \@ifnextchar [{\iiiparpic(#1,#2)(#3,#4)}{\iiiparpic(#1,#2)(#3,#4)[l]}
+}
+\def\iiiparpic(#1,#2)(#3,#4)[#5]{%
+ \@ifnextchar [{\ivparpic(#1,#2)(#3,#4)[#5]}{\ivparpic(#1,#2)(#3,#4)[#5][]}
+}
+\def\ivparpic(#1,#2)(#3,#4)[#5][#6]#7{%
+ \setbox\@BILD=\hbox{#7}%
+ \d@breite=#1\d@breite=\the\d@breite%
+ \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi%
+ \c@breite=\d@breite\divide\c@breite by65536%
+ \d@hoehe=#2\d@hoehe=\the\d@hoehe%
+ \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi%
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536%
+ \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536%
+ \d@yoff=\d@hoehe%
+ \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536%
+ \c@pos=1\unitlength1pt%
+ \if@offset%
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe){}}%
+ \put(\c@xoff,\c@yoff){\box\@BILD}%
+ \end{picture}%
+ }%
+ \else%
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}%
+ \end{picture}%
+ }%
+ \fi%
+ \@tfor\@tempa := #5\do{%
+ \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa l\c@pos=1\fi%
+ \if\@tempa r\c@pos=2\fi%
+ }%
+ \ifodd\count0\c@picpos=0\else\c@picpos=\@changemode\fi%
+ \pagetotal=\the\pagetotal%
+ \d@tmp=\pagegoal\advance\d@tmp by-\pagetotal\advance\d@tmp by-\baselineskip%
+ \ifdim\d@hoehe>\d@tmp%
+ \vskip 0pt plus\d@hoehe\relax\pagebreak[3]\vskip 0pt plus-\d@hoehe\relax%
+ \ifnum\c@picpos=1\c@picpos=0\else\c@picpos=\@changemode\fi%
+ \fi%
+ \ifnum\c@picpos=1\ifnum\c@pos=1\c@pos=2\else\c@pos=1\fi\fi%
+ \ifnum\@listdepth>0
+ \@listtrue\parshape 0%
+ \advance\hsize -\rightmargin%
+ \d@leftskip \leftskip%
+ \leftskip \@totalleftmargin%
+ \if@inlabel\rule{\linewidth}{0pt}\vskip-\baselineskip\relax\fi%
+ \else\@listfalse\medskip%
+ \fi%
+ \if@list\d@tmpa=\linewidth\else\d@tmpa=\hsize\fi%
+ \ifnum\c@pos=1\d@tmpa=0pt%
+ \else\advance\d@tmpa by-\wd\@BILD\d@breite=-\d@breite%
+ \fi%
+ \d@bskip=\d@hoehe\advance\d@bskip by\parskip\advance\d@bskip by.3\baselineskip%
+ {\noindent\hspace*{\d@tmpa}\relax%
+ \box\@BILD\nopagebreak\vskip-\d@bskip\relax\nopagebreak}%
+ \d@tmp=-\d@hoehe\divide\d@tmp by\baselineskip%
+ \c@zeilen=\d@tmp\advance\c@zeilen by-1%
+ \ifdim\d@breite<0pt\advance\d@breite by-\d@pichskip%
+ \else\advance\d@breite by\d@pichskip%
+ \fi%
+ \hangindent=\d@breite%
+ \hangafter=\c@zeilen%
+ \let\old@par=\par
+ \let\par=\x@par%
+}
+
+
+
+
+\newdimen\ptoti
+\newdimen\ptotii
+\def\x@par{%
+ \ptoti=\pagetotal%
+ \old@par%
+ \ptotii=\pagetotal%
+ \ifdim\ptoti<\ptotii%
+ \d@tmp=\baselineskip%
+ \multiply\d@tmp by\prevgraf%
+ \advance\d@tmp by\parskip%
+ \global\advance\d@hoehe by-\d@tmp\d@tmp=\d@hoehe%
+ \else\d@tmp=\d@hoehe%
+ \fi%
+ \ifdim\d@hoehe>0pt%
+ \divide\d@tmp by\baselineskip\c@zeilen=-\d@tmp\advance\c@zeilen by-1%
+ \c@zeilen=\the\c@zeilen%
+ \else\c@zeilen=0
+ \fi
+ \ifnum\c@zeilen<0\hangafter=\c@zeilen\hangindent=\d@breite%
+ \else\let\par=\old@par%
+ \hangindent 0pt
+ \leftskip \d@leftskip
+ \if@list\parshape \@ne \@totalleftmargin \linewidth
+ \advance\hsize \rightmargin
+ \fi
+ \fi
+}
+
+
+\def\picskip#1{%
+ \ptoti=\pagetotal%
+ \let\par=\old@par\par%
+ \ptotii=\pagetotal%
+ \c@tmp=#1\relax%
+ \ifnum\c@tmp=0%
+ \ifdim\ptoti<\ptotii%
+ \d@tmp=\baselineskip\multiply\d@tmp by\prevgraf\advance\d@tmp by\parskip%
+ \advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex%
+ \fi%
+ \ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi%
+ \else\hangafter=-\c@tmp\hangindent=\d@breite%
+ \fi%
+ \leftskip \d@leftskip%
+ \if@list\parshape \@ne \@totalleftmargin \linewidth%
+ \advance\hsize \rightmargin%
+ \fi
+}
+
+
+
+
+
+
+\def\hpic{%
+ \@ifnextchar ({\ihpic}{\ihpic(0pt,0pt)}
+}
+\def\ihpic(#1,#2){%
+ \@ifnextchar ({\@offsettrue\iihpic(#1,#2)}%
+ {\@offsetfalse\iihpic(#1,#2)(0pt,0pt)}
+}
+\def\iihpic(#1,#2)(#3,#4){%
+ \@ifnextchar [{\iiihpic(#1,#2)(#3,#4)}{\iiihpic(#1,#2)(#3,#4)[l]}
+}
+\def\iiihpic(#1,#2)(#3,#4)[#5]{%
+ \@ifnextchar [{\ivhpic(#1,#2)(#3,#4)[#5]}{\ivhpic(#1,#2)(#3,#4)[#5][]}
+}
+\def\ivhpic(#1,#2)(#3,#4)[#5][#6]#7{%
+ \setbox\@BILD=\hbox{#7}%
+ \d@breite=#1\d@breite=\the\d@breite%
+ \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi%
+ \c@breite=\d@breite\divide\c@breite by65536%
+ \d@hoehe=#2\d@hoehe=\the\d@hoehe%
+ \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi%
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536%
+ \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536%
+ \d@yoff=\d@hoehe%
+ \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536%
+ \c@pos=0\d@tmpa=\parindent\parindent=0pt\unitlength1pt%
+ \if@offset
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe){}}%
+ \put(\c@xoff,\c@yoff){\box\@BILD}%
+ \end{picture}%
+ }%
+ \else%
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}%
+ \end{picture}%
+ }%
+ \fi%
+ \@tfor\@tempa := #5\do{%
+ \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa t\c@pos=1\fi%
+ \if\@tempa b\c@pos=2\fi%
+ }%
+ \ifnum\c@pos=0\parbox{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
+ \ifnum\c@pos=1\parbox[t]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
+ \ifnum\c@pos=2\parbox[b]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
+ \parindent=\d@tmpa%
+}
+
+
+
+
+
+
+\def\Rahmen(#1,#2)#3{%
+ \c@whole=\@wholewidth\divide\c@whole by65536%
+ \c@half=\@halfwidth\divide\c@half by65536%
+ \c@tmpa=#1\advance\c@tmpa by\c@whole\advance\c@tmpa by\c@whole%
+ \c@tmpb=#2\advance\c@tmpb by\c@whole\advance\c@tmpb by\c@whole%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(\c@whole,\c@half){\framebox(#1,#2){#3}}%
+ \end{picture}%
+ \global\advance\d@breite by2\@wholewidth%
+ \global\advance\d@hoehe by2\@wholewidth%
+}
+
+
+\def\Schatten(#1,#2)#3{%
+ \c@whole=\@wholewidth\divide\c@whole by65536%
+ \c@half=\@halfwidth\divide\c@half by65536%
+ \c@shad=\d@shad\divide\c@shad by65536%
+ \c@tmp=\c@whole\advance\c@tmp by\c@whole\c@tmpd=\c@tmp%
+ \advance\c@tmp by\c@shad%
+ \advance\c@tmpd by#1%
+ \advance\c@half by\c@shad%
+ \c@tmpa=#1\advance\c@tmpa by\c@tmp%
+ \c@tmpb=#2\advance\c@tmpb by\c@tmp%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(\c@whole,\c@half){\framebox(#1,#2){#3}}%
+ \put(\c@shad,0){\rule{\c@tmpd pt}{\c@shad pt}}%
+ \put(\c@tmpd,0){\rule{\c@shad pt}{#2 pt}}%
+ \end{picture}%
+ \global\advance\d@breite by2\@wholewidth\global\advance\d@breite by\d@shad%
+ \global\advance\d@hoehe by2\@wholewidth\global\advance\d@hoehe by\d@shad%
+}
+
+
+\def\Oval(#1,#2)#3{%
+ \@wholewidth=0.4pt%
+ \c@tmpa=\the#1\divide\c@tmpa by2%
+ \c@tmpb=\the#2\divide\c@tmpb by2%
+ \begin{picture}(#1,#2)%
+ \put(\c@tmpa,\c@tmpb){\oval(#1,#2)}%
+ \put(0.4,0.4){#3}%
+ \end{picture}%
+ \global\advance\d@breite by1pt\global\advance\d@hoehe by1pt%
+}
+
+
+\def\Strich(#1,#2)#3{%
+ \c@whole=\@wholewidth\divide\c@whole by65536%
+ \c@half=\@halfwidth\divide\c@half by65536%
+ \c@dash=\d@dash\divide\c@dash by65536%
+ \c@tmp=\c@whole\advance\c@tmp by\c@whole%
+ \c@tmpa=#1\advance\c@tmpa by\c@tmp%
+ \c@tmpb=#2\advance\c@tmpb by\c@tmp%
+ \c@tmpc=#1\advance\c@tmpc by\c@whole%
+ \c@tmpd=#2\advance\c@tmpd by\c@whole%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(\c@half,\c@half){\dashbox{\c@dash}(\c@tmpc,\c@tmpd){#3}}%
+ \end{picture}%
+ \global\advance\d@breite by2\@wholewidth%
+ \global\advance\d@hoehe by2\@wholewidth%
+}
+
+
+\def\Kasten(#1,#2)#3{%
+ \@wholewidth=0.4pt%
+ \c@boxl=\d@boxl\divide\c@boxl by65536\c@boxl=\the\c@boxl%
+ \c@tmpa=#1\advance\c@tmpa by\c@boxl%
+ \c@tmpb=#2\advance\c@tmpb by\c@boxl%
+ \c@tmp=#2%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(0,\c@boxl){\framebox(#1,#2){#3}}%
+ \put(\c@boxl,0){\line(-1,1){\c@boxl}}%
+ \put(\c@boxl,0){\line(1,0){#1}\line(-1,1){\c@boxl}}%
+ \put(\c@boxl,0){\put(#1,0){\line(0,1){\c@tmp}%
+ \put(0,\c@tmp){\line(-1,1){\c@boxl}}}}%
+ \end{picture}%
+ \global\advance\d@breite by\d@boxl%
+ \global\advance\d@hoehe by\d@boxl%
+}
+
+
+
+
+
+\newbox\env@box%
+\newdimen\d@envdp
+\newcount\c@hsize
+\newcount\c@envdp
+\newdimen\d@envb
+
+\long\def\frameenv{\@ifnextchar [{\@frameenv}{\@frameenv[\textwidth]}}
+\long\def\@frameenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+ \advance\textwidth by-2\@wholewidth
+ \advance\textwidth by-2\fboxsep
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+\def\endframeenv{%
+ \egroup%
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-2\@wholewidth
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by2\fboxsep%
+ \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \c@tmp=\@wholewidth \divide\c@tmp by65536
+ \vskip\@wholewidth%
+ \unitlength 1pt\noindent%
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@tmp,\c@tmp){\framebox(\c@hsize,\c@envdp){\box\env@box}}
+ \end{picture}%
+}
+
+
+
+\long\def\shadowenv{\@ifnextchar [{\@shadowenv}{\@shadowenv[\textwidth]}}
+\long\def\@shadowenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+ \advance\textwidth by-2\@wholewidth
+ \advance\textwidth by-2\fboxsep
+ \advance\textwidth by-\d@shad%
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+\def\endshadowenv{%
+ \egroup
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \d@tmpa=\d@envb
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-2\@wholewidth \advance\d@envb by-\d@shad
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by2\fboxsep%
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \d@hoehe=\d@envdp
+ \advance\d@hoehe by2\@wholewidth \advance\d@hoehe by\d@shad
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@shad =\d@shad \divide\c@shad by65536
+ \c@tmp=\@wholewidth \divide\c@tmp by65536
+ \advance\d@tmpa by-2\d@shad
+ \c@xoff =\d@tmpa \divide\c@xoff by65536
+ \advance\c@xoff by\c@shad \advance\c@xoff by-1
+ \advance\d@envdp by\@wholewidth
+ \vskip\@halfwidth
+ \unitlength 1pt\noindent%
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@tmp,\c@shad){\framebox(\c@hsize,\c@envdp){\box\env@box}}
+ \put(\c@shad,0){\rule{\d@tmpa}{\d@shad}}%
+ \put(\c@xoff,0){\rule{\d@shad}{\d@envdp}}%
+ \end{picture}%
+ \vskip\@halfwidth
+}
+
+
+\long\def\dashenv{\@ifnextchar [{\@dashenv}{\@dashenv[\textwidth]}}
+\long\def\@dashenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+ \advance\textwidth by-2\@wholewidth \advance\textwidth by-2\fboxsep
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+\long\def\enddashenv{%
+ \egroup
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-\@wholewidth
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by2\fboxsep%
+ \advance\d@envdp by\@wholewidth
+ \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \c@dash=\d@dash \divide\c@dash by65536%
+ \c@whole=\@wholewidth \divide\c@whole by65536
+ \c@half=\@halfwidth \divide\c@half by 65536
+ \noindent\unitlength 1pt
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@half,\c@whole){\dashbox{\c@dash}(\c@hsize,\c@envdp){\box\env@box}}
+ \end{picture}%
+}
+
+
+\long\def\ovalenv{\@ifnextchar [{\@ovalenv}{\@ovalenv[\textwidth]}}%
+\long\def\@ovalenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+ \advance\textwidth by-4\fboxsep
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+\long\def\endovalenv{%
+ \egroup
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \@wholewidth=0.4pt
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-2\@wholewidth
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by4\fboxsep%
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@tmpa=\c@hsize \divide\c@tmpa by2%
+ \c@tmpb=\c@envdp \divide\c@tmpb by2%
+ \d@tmpa=2\fboxsep \advance\d@tmpa by\@wholewidth
+ \c@xoff=\d@tmpa \divide\c@xoff by65536%
+ \advance\d@tmpa by\dp\env@box
+ \c@yoff=\d@tmpa \divide\c@yoff by65536%
+ \unitlength 1pt\noindent
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@tmpa,\c@tmpb){\oval(\c@hsize,\c@envdp)}
+ \put(\c@xoff,\c@yoff){\box\env@box}%
+ \end{picture}%
+}
+
diff --git a/macros/latex209/contrib/picins/picins.doc b/macros/latex209/contrib/picins/picins.doc
new file mode 100644
index 0000000000..179c519609
--- /dev/null
+++ b/macros/latex209/contrib/picins/picins.doc
@@ -0,0 +1,866 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Autor: Joachim Bleser %
+% TH Darmstadt -- Hochschulrechenzentrum %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% History: %
+% %
+% Version 1.0 %
+% Definition von \PARPIC un \HPIC %
+% %
+% Version 1.1 (7.3.90) %
+% Korrektur des \PICCHANGEMODUS %
+% Einfuehrung einer Option DASH und OVAL fuer \PARPIC und \HPIC %
+% %
+% Version 1.2 (12.3.90) %
+% Neue Umgebungen OVALENV und DASHENV %
+% Dokumentation innerhalb der .STY-Datei %
+% Korrektur der Umgebungen SHADOWENV und FRAMEENV %
+% %
+% Version 1.3 (2.5.90) %
+% Korrektur der DASH Option von \PARPIC und \DASHENV-Umgebung %
+% %
+% Version 1.4 (3.8.90) %
+% Ueberarbeitung aller Optionen von \PARPIC und \HPIC %
+% Neue Befehle : \PICCAPTION %
+% \PICHSKIP %
+% %
+% Version 1.4 (Dez.90 - Jan.91) %
+% Dokumentation des .sty-Files %
+% %
+% Version 2.0 (Juni 91) %
+% Ueberarbeitung und Umstrukturierung von \PARPIC und \HPIC %
+% Einfuehrung einer Option BOX fuer \PARPIC und \HPIC %
+% Einfuehrung eines Positionsparameters fuer \PARPIC und \HPIC %
+% %
+% Version 2.1 (November 91) %
+% Korrektur des \X@PAR und des \PICSKIP Kommandos %
+% %
+% Version 3.0 (Juli 92) %
+% Erweiterung der Unterschriften-Funktionalitaet %
+% Korrektur von \PARPIC %
+% Korrektur von \X@PAR %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% PICINS.STY enthaelt Kommandos, die die Integration von Bildern
+% in Text unterstuetzen. Dies sind im Einzelnen:
+%
+% \parpic : Text umfliesst das Bild
+% \hpic : Bilder in einem eigenen Absatz
+% \picskip : beeinflusst das Umfliessen von Bildern durch Text
+% \pichskip : horizontaler Abstand zwischen Bild und Text
+% \shadowthickness: Schattendicke
+% \dashlength: Laenge der Striche
+% \boxlength: Tiefe der Box
+% \piccaption: Unterschrift unter/neben das Bild
+% \newcaption: Erweitertes \caption-Kommando
+% \picchangemode: steuert Bildplazierung
+%
+% Weiterhin werden vier neue Umgebungen definiert:
+% frameenv : Umrahmt den Inhalt
+% shadowenv: Umrahmt den Inhalt und schattiert den Rahmen
+% ovalenv : Umrahmt den Inhalt mit abgerundeten Ecken
+% dashenv : Umrahmt den Inhalt mit einem gestrichelten Rahmen
+%
+%
+\message{Option `picins' Version 3.0 Sep. 1992, TH Darmstadt/HRZ}
+% Deklaration der benoetigten 'Variablen'
+% Alle Variablen, die mit \d@... anfangen, enthalten Dimensionen,
+% und alle Variablen, die mit \c@... anfangen, enthalten Counts
+\newbox\@BILD% eine BOX zur Aufnahme des Bildinhalts
+\newbox\@TEXT% und eine Box fuer die (optionale) Unterschrift
+\newdimen\d@breite% Bildbreite
+\newdimen\d@hoehe% Bildhoehe
+\newdimen\d@xoff% Offset in x-Richtung
+\newdimen\d@yoff% Offset in y-Richtung
+\newdimen\d@shad% Schattendicke
+\newdimen\d@dash% Strichlaenge
+\newdimen\d@boxl% Boxlaenge (bzw. -tiefe)
+\newdimen\d@pichskip% Raum zwischen Bild und Text bei \PARPIC
+\newdimen\d@tmp
+\newdimen\d@tmpa
+\newdimen\d@bskip
+\newdimen\hsiz@% Variable fuer original \hsize
+\newdimen\p@getot@l% Variable fuer original \pagetotal
+\newcount\c@breite
+\newcount\c@hoehe
+\newcount\c@xoff
+\newcount\c@yoff
+\newcount\c@pos
+\newcount\c@shad
+\newcount\c@dash
+\newcount\c@boxl
+\newcount\c@zeilen% Anzahl der einzurueckenden Zeilen bei \PARPIC
+\newcount\@changemode% Flag fuer den \PICCHANGEMODE
+\newcount\c@piccaption% Flag fuer Unterschrift unter/neben \parpic
+\newcount\c@piccaptionpos% Wo soll die Unterschrift stehen?
+\newcount\c@picpos
+\newcount\c@whole% Count fuer \@wholewidth (Liniendicke)
+\newcount\c@half% Haelfte von \C@WHOLE
+\newcount\c@tmp
+\newcount\c@tmpa
+\newcount\c@tmpb
+\newcount\c@tmpc
+\newcount\c@tmpd
+\newskip\d@leftskip
+\newif\if@list \@listfalse% TRUE, wenn \PARPIC innerhalb einer LIST-Umgebung
+ % verwendet wird
+\newif\if@offset% TRUE, wenn bei \PARPIC oder \HPIC Offset angegeben wurden,
+ % ansonsten FALSE
+
+
+% Es folgen einige Voreinstellung (Defaults):
+\c@piccaptionpos=1% Default Unterschrift unter Bild
+\c@picpos=0
+\d@shad=4pt% Default fuer Schattendicke
+\d@dash=4pt% Default fuer gestrichelte Rahmen
+\d@boxl=10pt% Default fuer Boxtiefe
+\d@pichskip=1em% Default fuer Abstand zwischen Bild und Text
+\@changemode=0% Default kein Wechselmodus
+\def\@captype{figure}% Default fuer \piccaptype
+\let\old@par=\par% \PAR-Kommando wird gerettet
+
+% \pichskip steuert den horizontalen Abstand zwischen Bild und Text
+\def\pichskip#1{\d@pichskip #1\relax}
+
+
+% \shadowthickness destimmt die Schattendicke (Option [s])
+\def\shadowthickness#1{\d@shad #1\relax}
+
+
+% \dashlength bestimmt die Strichlaenge (Option [d])
+\def\dashlength#1{\d@dash #1\relax}
+
+
+% \boxlength bestimmt die Boxtiefe (Option [x])
+\def\boxlength#1{\d@boxl #1\relax}
+
+
+\def\picchangemode{\@changemode=1}% Einschalter fuer den Wechselmode
+\def\nopicchangemode{\@changemode=0}% Ausschalter fuer den Wechselmode
+
+
+\def\piccaptionoutside{\c@piccaptionpos=1}% Unterschrift unter dem Rahmen
+\def\piccaptioninside{\c@piccaptionpos=2}% Unterschrift im Rahmen
+\def\piccaptionside{\c@piccaptionpos=3}% Unterschrift rechts/links neben Bild
+\def\piccaptiontopside{\c@piccaptionpos=4}%Unterschrift rechts/links neben Bild
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Der \piccaption-Befehl
+% ======================
+% Der \PICCAPTION-Befehl macht nichts anderes, als ein Makro mit
+% der Kurzform und ein Makro mit der richtigen Unterschrift zu
+% definieren. Die Auswertung dieser Makros erfolgt in \PARPIC.
+\def\piccaption{\@ifnextchar [{\@piccaption}{\@piccaption[]}}
+\def\@piccaption[#1]#2{\c@piccaption=1\def\sh@rtf@rm{#1}\def\capti@nt@xt{#2}}
+% \MAKE@PICCAPTION verwendet das orginal LaTeX-Caption Kommando, um
+% Unterschrift zu erzeugen. Es muss nur die Textbreite angepasst werden.
+\def\make@piccaption{%
+ \hsiz@\d@breite% So breit darf die Unterschrift werden
+ \ifnum\c@piccaptionpos=2% Abhaenig von der Postion, an der die
+ \advance\hsiz@ -2\fboxsep% Unterschrift stehen soll, wird die Textbreite
+ \fi% entsprechend korrigiert.
+ \ifnum\c@piccaptionpos>2%
+ \hsiz@\hsize\advance\hsiz@-\d@breite\advance\hsiz@-\d@pichskip%
+ \fi%
+ \setbox\@TEXT=\vbox{\hsize\hsiz@\caption[\sh@rtf@rm]{\capti@nt@xt}}%
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Der \newcaption-Befehl
+% ======================
+% Das \piccaption-Kommando entspricht weitgehend dem LaTeX
+% \caption-Kommando aus dem LATEX.TEX-File
+% Dieses Kommando bewirkt, dass der Unterschriftentext linksbuendig
+% untereinander steht.
+\def\newcaption{\refstepcounter\@captype\@dblarg{\@newcaption\@captype}}
+\long\def\@newcaption#1[#2]#3{%
+ \old@par%
+ \addcontentsline{\csname ext@#1\endcsname }{#1}%
+ {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}
+ \begingroup\@parboxrestore\normalsize%
+ \@newmakecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\old@par%
+ \endgroup%
+}
+\long\def\@newmakecaption#1#2{%
+ \vskip 10pt%
+ \setbox\@tempboxa \hbox {#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize% #1: #2\par%<-- So steht's im Orginal
+ \setbox0=\hbox{#1: }\dimen0=\hsize\advance\dimen0 by-\wd0
+ \setbox1=\vtop{\hsize=\dimen0 #2}
+ \hbox{\box0 \box1}
+ \par
+ \else \hbox to\hsize {\hfil \box \@tempboxa \hfil}
+ \fi
+}
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Der \parpic-Befehl
+% ==================
+% Syntax: \parpic(breite,hoehe)(x-off,y-off)[Optionen][Position]{Bildinhalt}
+% ------------------------------------------------------------------
+% \parpic positioniert ein Bild an den Anfang eines neuen Absatzes.
+% Neben dem Bild steht Text (das Bild wird vom Text umflossen).
+% Angegeben werden muss der Bildinhalt, alle anderen Angaben sind optional.
+%
+% Vorgehensweise:
+% Zuerst wird gefragt, ob die optionalen Parameter vorhanden sind
+% Dem LaTeX-Befehl \@ifnextchar werden drei Parameter uebergeben:
+% 1. das Zeichen, das als naechstes erwartet wird
+% 2. die Aktion, die ausgefuehrt wird, wenn das Zeichen tatsaechlich
+% erscheint
+% 3. die Aktion, die ausgefuehrt wird, wenn das Zeichen nicht erscheint
+% Im dritten Fall werden Defaultwerte an die Aktion uebergeben.
+%
+% Dann werden Bildhoehe und Bildbreite ermittelt. Wurden Offsets
+% uebergeben, wird das Bild nach diesen Offsets positioniert, ansonsten
+% wird nach Parameter #6 positioniert.
+% Anschliessend werden die Umrahmnungsparameter ausgewertet.
+% Nun wird berechnet, ob das Bild noch auf die aktuelle Seite passt,
+% oder ob umgebrochen werden muss. Nun kann das Bild positioniert
+% werden. Zuletzt wird die Anzahl der einzurueckenden Zeilen berechnet
+% und das \par-Kommando fuer eigene Zwecke umdefiniert.
+%
+% Es wird getestet, ob Bildbreite und Bildhoehe explizit angegeben wurden
+\def\parpic{%
+ \@ifnextchar ({\iparpic}{\iparpic(0pt,0pt)}
+}
+% Es wird getestet, ob Offsets angeben wurden.
+\def\iparpic(#1,#2){%
+ \@ifnextchar ({\@offsettrue\iiparpic(#1,#2)}%
+ {\@offsetfalse\iiparpic(#1,#2)(0pt,0pt)}
+}
+% Es wird getestet, ob Umrahmungsoptionen angegeben wurden. Wenn nicht,
+% wird ein [l] (d.h. Bild auf die linke Seite) als Default uebergeben.
+\def\iiparpic(#1,#2)(#3,#4){%
+ \@ifnextchar [{\iiiparpic(#1,#2)(#3,#4)}{\iiiparpic(#1,#2)(#3,#4)[l]}
+}
+% Es wird getestet, ob Positionsparameter angegeben wurden.
+\def\iiiparpic(#1,#2)(#3,#4)[#5]{%
+ \@ifnextchar [{\ivparpic(#1,#2)(#3,#4)[#5]}{\ivparpic(#1,#2)(#3,#4)[#5][]}
+}
+\def\ivparpic(#1,#2)(#3,#4)[#5][#6]#7{%
+ \let\par=\old@par\par%
+ \hangindent0pt\hangafter1% Default Einstellungen vornehmen
+ \setbox\@BILD=\hbox{#7}%
+ \d@breite=#1\d@breite=\the\d@breite% Die Bildbreite wird bestimmt
+ \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi%
+ \c@breite=\d@breite\divide\c@breite by65536%
+ \multiply\c@piccaption\c@piccaptionpos%
+ \d@hoehe=#2\d@hoehe=\the\d@hoehe% Die Bildhoehe wird bestimmt
+ \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi%
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536%
+ \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536% Der x-Offset wird berechnet
+ \d@yoff=\d@hoehe% Der y-Offset wird berechnet
+ \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536%
+ \c@pos=1\unitlength1pt%
+ \if@offset% Bild wird nach den Offsets innerhalb der Rahmens positioniert
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe){}}%
+ \put(\c@xoff,\c@yoff){\box\@BILD}%
+ \end{picture}%
+ }%
+ \else% Bild wird nach Parameter #6 positioniert
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}%
+ \end{picture}%
+ }%
+ \fi%
+ \ifnum\c@piccaption=2% Unterschrift in den Rahmen, unterhalb des Bildes.
+ \make@piccaption% Unterschrift erzeugen.
+ \advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT% 'Bild'hoehe korrigieren
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536%
+ \setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}%
+ \hbox{\hspace{\fboxsep}\box\@TEXT}%
+ \vspace{4pt}}%
+ \fi%
+% Nun werden die Umrahmungsparameter ausgewertet
+ \@tfor\@tempa := #5\do{%
+ \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa l\c@pos=1\fi%
+ \if\@tempa r\c@pos=2\fi%
+ }%
+ \ifnum\c@piccaption=1% Unterschrift unterhalb des Rahmens
+ \make@piccaption% Unterschrift erzeugen.
+ \advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT%
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536% 'Bild'-hoehe korrigieren.
+ \setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}\hbox{\box\@TEXT}\vspace{4pt}}%
+ \fi%
+ \ifodd\count0\c@picpos=0\else\c@picpos=\@changemode\fi%
+% Wenn der verbleibende vertikale Platz auf der Seite fuer das Bild
+% nicht mehr ausreicht, wird ein Seitenumbruch erzwungen.
+ \pagetotal=\the\pagetotal%
+ \d@tmp=\pagegoal\advance\d@tmp by-\pagetotal\advance\d@tmp by-\baselineskip%
+ \ifdim\d@hoehe>\d@tmp%
+ \vskip 0pt plus\d@hoehe\relax\pagebreak[3]\vskip 0pt plus-\d@hoehe\relax%
+ \ifnum\c@picpos=1\c@picpos=0\else\c@picpos=\@changemode\fi%
+ \fi%
+ \ifnum\c@picpos=1\ifnum\c@pos=1\c@pos=2\else\c@pos=1\fi\fi%
+% Wird \parpic innerhalb einer LIST-Umgebung verwendet (\@listdepth>0),
+% muessen besondere Vorkehrungen getroffen werden.
+ \ifnum\@listdepth>0
+ \@listtrue\parshape 0%
+ \advance\hsize -\rightmargin%
+ \d@leftskip \leftskip%
+ \leftskip \@totalleftmargin%
+ \if@inlabel\rule{\linewidth}{0pt}\vskip-\baselineskip\relax\fi%
+ \else\@listfalse\medskip%
+ \fi%
+% Soll das Bild auf der rechten Seite positioniert werden, muss der
+% Betrag der Einrueckung berechnet werden.
+% einrueck := akt_textbreite - bildbreite
+ \if@list\d@tmpa=\linewidth\else\d@tmpa=\hsize\fi%
+ \ifnum\c@piccaption=3% Unterschrift soll neben das Bild, vertikal zentriert
+ \make@piccaption%
+ \d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT%
+ \ifdim\d@hoehe>\d@tmp%
+ \setbox\@TEXT=\vbox to\d@hoehe{\vfill\box\@TEXT\vspace{.2\baselineskip}\vfill}%
+ \else%
+ \setbox\@BILD=\vbox to\d@tmp{\vfill\box\@BILD\vfill}%
+ \d@hoehe\d@tmp%
+ \fi%
+ \fi%
+ \ifnum\c@piccaption=4% Unterschrift soll neben das Bild auf gleiche Hoehe
+ \make@piccaption%
+ \d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT%\advance\d@tmp-10pt%
+ \setbox\@TEXT=\vbox to\d@hoehe{\vspace{-10pt}\box\@TEXT\vfil}%
+ \advance\d@hoehe-\d@tmp%
+ \fi%
+ \ifnum\c@pos=1\d@tmpa=0pt%
+ \ifnum\c@piccaption>2% Unterschrift soll neben das Bild
+ \setbox\@BILD=\hbox{\box\@BILD\hspace{\d@pichskip}\hbox{\box\@TEXT}}%
+ \fi%
+ \else\advance\d@tmpa by-\wd\@BILD\d@breite=-\d@breite%
+ \ifnum\c@piccaption>2% Unterschrift soll neben das Bild
+ \d@tmpa=0pt%
+ \setbox\@BILD=\hbox{\hbox{\box\@TEXT}\hspace{\d@pichskip}\box\@BILD}%
+ \fi%
+ \fi%
+% Um den Wert von \d@bskip wird nach der Bildplazierung wieder
+% nach oben zurueckgesprungen. Der Wert .3\baselineskip wurde
+% empirisch ermittelt.
+ \p@getot@l\the\pagetotal%
+ \d@bskip\d@hoehe\advance\d@bskip by\parskip\advance\d@bskip by.3\baselineskip%
+% Nun wird das Bild (evt. eingerueckt und) positioniert.
+ {\noindent\hspace*{\d@tmpa}\relax%
+ \box\@BILD\nopagebreak\vskip-\d@bskip\relax\nopagebreak}%
+% Aus der Bildhoehe berechnet sich die Anzahl der einzurueckenden Zeilen.
+% zeilen := bildhoehe / baselineskip
+ \d@tmp=-\d@hoehe\divide\d@tmp by\baselineskip%
+ \c@zeilen=\d@tmp\advance\c@zeilen by-1%
+ \ifdim\d@breite<0pt\advance\d@breite by-\d@pichskip%
+ \else\advance\d@breite by\d@pichskip%
+ \fi%
+ \hangindent=\d@breite% Der Bertag der Einrueckung.
+ \hangafter=\c@zeilen% Die Anzahl der einzurueckenden Zeilen.
+% Die Bedeutung des \par-Kommandos wird gerettet; anschliessend wird
+% \par umdefiniert.
+ \let\par=\x@par%
+ \ifnum\c@piccaption=3% In diesem Fall steht kein weiterer Text neben
+ \hangindent0pt\hangafter1\let\par=\old@par% dem Bild ==> vskip
+ \vskip\d@hoehe\vskip.2\baselineskip%
+ \fi%
+ \c@piccaption=0% Das Unterschriftenflag wird wieder geloescht
+}
+
+
+
+
+\newdimen\ptoti
+\newdimen\ptotii
+% Das \x@par-Makro
+% ----------------
+% Das \x@par-Makro ersetzt solange das aktuelle \par-Kommando, solange noch
+% Zeilen einzuruecken sind; anschliessend erhaelt das \par-Kommando seine
+% alte Bedeutung zurueck.
+\def\x@par{%
+ \ptoti\pagetotal% Hoehe VOR dem \par-Kommando.
+ \old@par% \old@par entspricht dem aktuellen \par
+ \ptotii\pagetotal% Hoehe NACH dem \par-Kommando.
+ \ifdim\ptoti=\ptotii% Der Absatz enthaelt KEINE Zeile (ist leer).
+ \d@tmp\d@hoehe%
+ \else% Der Absatz enthaelt mindestens eine Zeile.
+ \d@tmp\baselineskip% Die Hoehe des vorangehenden Absatzes
+ \multiply\d@tmp by\prevgraf% wird aus der Anzahl Zeilen des Absatzes
+ \advance\d@tmp by\parskip% berechnet
+ \global\advance\d@hoehe by-\d@tmp\d@tmp=\d@hoehe%
+ \fi%
+% Wenn die verbleibende Bildhoehe > 0pt ist, muessen noch mehr Zeilen
+% eingerueckt werden.
+ \ifdim\d@hoehe>0pt%
+ \divide\d@tmp by\baselineskip\c@zeilen=-\d@tmp\advance\c@zeilen by-1%
+ \c@zeilen=\the\c@zeilen% Um Aenderung nach aussen sichtbar zu machen
+ \else\c@zeilen=0
+ \fi
+ \ifnum\c@zeilen<0\hangafter=\c@zeilen\hangindent=\d@breite%
+ \else\let\par=\old@par%
+ \hangindent 0pt%
+ \leftskip \d@leftskip%
+ \if@list\parshape \@ne \@totalleftmargin \linewidth%
+ \advance\hsize \rightmargin%
+ \fi%
+ \fi%
+}
+
+
+% Das \picskip-Makro
+% ------------------
+% Mit dem \picskip-Kommando kann die Anzahl der einzurueckenden Zeilen
+% beeinflusst werden. Als Parameter wird die gewuenschte Anzahl von
+% einzurueckenden Zeilen uebergeben. Ist diese 0, wird der verbleibende
+% Platz neben dem Bild uebersprungen (\vspace*{\d@hoehe}) und der
+% Text wird unterhalb des Bildes fortgesetzt.
+%
+\def\picskip#1{%
+ \let\par=\old@par%
+ \par%
+ \pagetotal\the\pagetotal%
+ \c@tmp=#1\relax%
+ \ifnum\c@tmp=0% Sprung ueber den verbleibenden Zwischenraum hinweg
+ \d@tmp\baselineskip\multiply\d@tmp by\prevgraf\advance\d@tmp\parskip%
+ \ifdim\p@getot@l<\pagetotal
+ \advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex%
+ \ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi%
+ \fi%
+ \ifdim\p@getot@l=\pagetotal% Test auf Leerzeile
+ \advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex%
+ \ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi%
+ \fi%
+ \else\hangafter=-\c@tmp\hangindent=\d@breite%
+ \fi%
+ \leftskip \d@leftskip%
+% Wurde \PARPIC innerhalb einer LIST-Umgebung verwendet, so wird nun
+% \parshape wieder gesetzt.
+ \if@list\parshape \@ne \@totalleftmargin \linewidth%
+ \advance\hsize \rightmargin%
+ \fi%
+}
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Der \hpic-Befehl
+% ================
+% Syntax: \hpic(breite,hoehe)(x-off,y-off)[Optionen][Position]{Bildinhalt}
+% ------------------------------------------------------------
+% \hpic ermoeglicht das komfortable Positionieren von Bilder in einem
+% eigenen Absatz; d.h. Text neben dem Bild ist nicht moeglich.
+%
+% Vorgehensweise:
+% Zuerst werden Bildbreite und Bildhoehe sowie die Offsets bestimmt.
+% Wurden Offsets uebergeben, wird das Bild nach Vorgabe positioniert,
+% ansonsten nach Paramter #6. Anschliessend werden die Umrahmungs-
+% parameter ausgewertet. Zuletzt wird das Bild in eine \parbox
+% positioniert.
+%
+% Es wird getestet, ob Bildbreite und Bildhoehe explizit angegeben wurden
+\def\hpic{%
+ \@ifnextchar ({\ihpic}{\ihpic(0pt,0pt)}
+}
+% Es wird getestet, ob Offsets angegeben wurden
+\def\ihpic(#1,#2){%
+ \@ifnextchar ({\@offsettrue\iihpic(#1,#2)}%
+ {\@offsetfalse\iihpic(#1,#2)(0pt,0pt)}
+}
+% Es wird getestet, ob Umrahmungsoptionen angegeben wurden. Wenn nicht,
+% wird ein [l] (d.h. Bild auf die linke Seite) als Default uebergeben.
+\def\iihpic(#1,#2)(#3,#4){%
+ \@ifnextchar [{\iiihpic(#1,#2)(#3,#4)}{\iiihpic(#1,#2)(#3,#4)[l]}
+}
+% Es wird getestet, ob Positionsparameter angegeben wurden
+\def\iiihpic(#1,#2)(#3,#4)[#5]{%
+ \@ifnextchar [{\ivhpic(#1,#2)(#3,#4)[#5]}{\ivhpic(#1,#2)(#3,#4)[#5][]}
+}
+\def\ivhpic(#1,#2)(#3,#4)[#5][#6]#7{%
+ \setbox\@BILD=\hbox{#7}%
+ \d@breite=#1\d@breite=\the\d@breite%
+ \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi%
+ \c@breite=\d@breite\divide\c@breite by65536%
+ \d@hoehe=#2\d@hoehe=\the\d@hoehe%
+ \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi%
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536%
+ \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536%
+ \d@yoff=\d@hoehe%
+ \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536%
+ \c@pos=0\d@tmpa=\parindent\parindent=0pt\unitlength1pt%
+ \if@offset
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe){}}%
+ \put(\c@xoff,\c@yoff){\box\@BILD}%
+ \end{picture}%
+ }%
+ \else% Bild wird nach Parameter #6 positioniert
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}%
+ \end{picture}%
+ }%
+ \fi%
+ \@tfor\@tempa := #5\do{%
+ \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa t\c@pos=1\fi%
+ \if\@tempa b\c@pos=2\fi%
+ }%
+ \ifnum\c@pos=0\parbox{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
+ \ifnum\c@pos=1\parbox[t]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
+ \ifnum\c@pos=2\parbox[b]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
+ \parindent=\d@tmpa%
+}
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ===============
+% Die Hilfsmakros
+% ===============
+% Die nun folgenden Makros sind nicht fuer die Verwendung
+% in einem Dokument geeignet. Sie dienen den oben definierten
+% 'Hauptmakros' zur Unterstuetzung.
+
+% Das \Rahmen-Makro
+% -----------------
+% Mit diesem Makro wird mittels der \picture-Umgebung ein Rahmen um das
+% Bild gezeichnet ==> \framebox
+% Parameter:
+% #1,#2: Breite und Hoehe in Punkten
+% #3 : Bildinhalt
+% Die Breite und Hoehe des Bildes werden zuletzt um zweimal Liniendicke
+% erhoeht.
+\def\Rahmen(#1,#2)#3{%
+ \c@whole=\@wholewidth\divide\c@whole by65536%
+ \c@half=\@halfwidth\divide\c@half by65536%
+ \c@tmpa=#1\advance\c@tmpa by\c@whole\advance\c@tmpa by\c@whole%
+ \c@tmpb=#2\advance\c@tmpb by\c@whole\advance\c@tmpb by\c@whole%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(\c@whole,\c@half){\framebox(#1,#2){#3}}%
+ \end{picture}%
+ \global\advance\d@breite by2\@wholewidth%
+ \global\advance\d@hoehe by2\@wholewidth%
+}
+
+
+% Das \Schatten-Makro
+% -----------------
+% Mit diesem Makro wird mittels der \picture-Umgebung ein Rahmen und ein
+% Schatten um das Bild gezeichnet ==> \framebox + 2 \rule
+% Parameter:
+% #1,#2: Breite und Hoehe in Punkten
+% #3 : Bildinhalt
+% Die Breite und Hoehe des Bildes werden zuletzt um zweimal Liniendicke
+% und einmal Schattendicke erhoeht.
+\def\Schatten(#1,#2)#3{%
+ \c@whole=\@wholewidth\divide\c@whole by65536%
+ \c@half=\@halfwidth\divide\c@half by65536%
+ \c@shad=\d@shad\divide\c@shad by65536%
+ \c@tmp=\c@whole\advance\c@tmp by\c@whole\c@tmpd=\c@tmp%
+ \advance\c@tmp by\c@shad%
+ \advance\c@tmpd by#1%
+ \advance\c@half by\c@shad%
+ \c@tmpa=#1\advance\c@tmpa by\c@tmp%
+ \c@tmpb=#2\advance\c@tmpb by\c@tmp%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(\c@whole,\c@half){\framebox(#1,#2){#3}}%
+ \put(\c@shad,0){\rule{\c@tmpd pt}{\c@shad pt}}%
+ \put(\c@tmpd,0){\rule{\c@shad pt}{#2 pt}}%
+ \end{picture}%
+ \global\advance\d@breite by2\@wholewidth\global\advance\d@breite by\d@shad%
+ \global\advance\d@hoehe by2\@wholewidth\global\advance\d@hoehe by\d@shad%
+}
+
+
+% Das \Oval-Makro
+% -----------------
+% Mit diesem Makro wird mittels der \picture-Umgebung ein runder Rahmen um das
+% Bild gezeichnet ==> \oval
+% Parameter:
+% #1,#2: Breite und Hoehe in Punkten
+% #3 : Bildinhalt
+\def\Oval(#1,#2)#3{%
+ \@wholewidth=0.4pt%
+ \c@tmpa=\the#1\divide\c@tmpa by2%
+ \c@tmpb=\the#2\divide\c@tmpb by2%
+ \begin{picture}(#1,#2)%
+ \put(\c@tmpa,\c@tmpb){\oval(#1,#2)}%
+ \put(0.4,0.4){#3}%
+ \end{picture}%
+ \global\advance\d@breite by1pt\global\advance\d@hoehe by1pt%
+}
+
+
+% Das \Strich-Makro
+% -----------------
+% Mit diesem Makro wird mittels der \picture-Umgebung ein gestrichelter Rahmen
+% um das Bild gezeichnet ==> \dashbox
+% Parameter:
+% #1,#2: Breite und Hoehe in Punkten
+% #3 : Bildinhalt
+% Die Breite und Hoehe des Bildes werden zuletzt um zweimal Liniendicke
+% erhoeht.
+\def\Strich(#1,#2)#3{%
+ \c@whole=\@wholewidth\divide\c@whole by65536%
+ \c@half=\@halfwidth\divide\c@half by65536%
+ \c@dash=\d@dash\divide\c@dash by65536%
+ \c@tmp=\c@whole\advance\c@tmp by\c@whole% c@tmp = 2*c@whole
+ \c@tmpa=#1\advance\c@tmpa by\c@tmp%
+ \c@tmpb=#2\advance\c@tmpb by\c@tmp%
+ \c@tmpc=#1\advance\c@tmpc by\c@whole%
+ \c@tmpd=#2\advance\c@tmpd by\c@whole%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(\c@half,\c@half){\dashbox{\c@dash}(\c@tmpc,\c@tmpd){#3}}%
+ \end{picture}%
+ \global\advance\d@breite by2\@wholewidth%
+ \global\advance\d@hoehe by2\@wholewidth%
+}
+
+
+% Das \Kasten-Makro
+% -----------------
+% Mit diesem Makro wird mittels der \picture-Umgebung ein 3D-Kasten
+% um das Bild gezeichnet ==> \dashbox
+% Parameter:
+% #1,#2: Breite und Hoehe in Punkten
+% #3 : Bildinhalt
+% Die Breite und Hoehe des Bildes werden zuletzt um die Kastentiefe
+% erhoeht.
+\def\Kasten(#1,#2)#3{%
+ \@wholewidth=0.4pt%
+ \c@boxl=\d@boxl\divide\c@boxl by65536\c@boxl=\the\c@boxl%
+ \c@tmpa=#1\advance\c@tmpa by\c@boxl%
+ \c@tmpb=#2\advance\c@tmpb by\c@boxl%
+ \c@tmp=#2%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(0,\c@boxl){\framebox(#1,#2){#3}}%
+ \put(\c@boxl,0){\line(-1,1){\c@boxl}}%
+ \put(\c@boxl,0){\line(1,0){#1}\line(-1,1){\c@boxl}}%
+ \put(\c@boxl,0){\put(#1,0){\line(0,1){\c@tmp}%
+ \put(0,\c@tmp){\line(-1,1){\c@boxl}}}}%
+ \end{picture}%
+ \global\advance\d@breite by\d@boxl%
+ \global\advance\d@hoehe by\d@boxl%
+}
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newbox\env@box%
+\newdimen\d@envdp
+\newcount\c@hsize
+\newcount\c@envdp
+\newdimen\d@envb
+
+% Die Umgebung FRAMEENV
+% =====================
+% Syntax: \begin{frameenv}[Breite] ... \end{frameenv}
+% Diese Umgebung umrahmt ihren Inhalt
+%
+% Vorgehensweise:
+% Die Textbreite (\textwidth) wird etwas verkleinert und der Umgebungs-
+% inhalt in eine \vbox eingeschlossen. Dadurch erfolgt der Zeilenumbruch
+% automatisch. Anschliessend wird die \vbox innerhalb einer
+% 'picture'-Umgebung in eine \framebox positioniert.
+%
+% Zuerst wird die optionale 'Breite' abgefragt
+\long\def\frameenv{\@ifnextchar [{\@frameenv}{\@frameenv[\textwidth]}}
+\long\def\@frameenv[#1]{%
+% \textwidth wird gerettet und anschliessend mit der 'Breite' initialisiert
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+% Damit der Text (der Inhalt) nicht bis an die Umrahmung heranreicht, wird
+% die \textwidth etwas verkleinert
+ \advance\textwidth by-2\@wholewidth
+% \fboxsep (LaTeX-Befehl) enthaelt den Abstand zwischen Text und Umrahmung
+ \advance\textwidth by-2\fboxsep
+ \hsize=\textwidth \linewidth=\textwidth
+% Nun wird eine \vbox geoffnet, in die der Text geschrieben wird.
+ \setbox\env@box=\vbox\bgroup}%
+%
+\def\endframeenv{%
+ \egroup% Die Box wird geschlossen und alle Werte wieder zurueckgesetzen
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-2\@wholewidth
+ \c@hsize=\d@envb \divide\c@hsize by65536% Breite der Box in Punkten
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by2\fboxsep%
+ \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
+% Fuer die \picture-Umgebung werden alle Dimesionen in Punkte umgerechnet
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \c@tmp=\@wholewidth \divide\c@tmp by65536
+ \vskip\@wholewidth% Etwas vertikaler Abstand zum vorhergehenden Text
+ \unitlength 1pt\noindent%
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@tmp,\c@tmp){\framebox(\c@hsize,\c@envdp){\box\env@box}}
+ \end{picture}%
+}
+
+
+
+% Die Umgebung SHADOWENV
+% ======================
+% Syntax: \begin{shadowenv}[Breite] ... \end{shadowenv}
+% Diese Umgebung umrahmt und schattiert ihren Inhalt
+%
+% Vorgehensweise:
+% Die Textbreite (\textwidth) wird etwas verkleinert und der Umgebungs-
+% inhalt in eine \vbox eingeschlossen. Dadurch erfolgt der Zeilenumbruch
+% automatisch. Anschliessend wird die \vbox innerhalb einer
+% 'picture'-Umgebung in eine \framebox positioniert und der Schatten
+% angehaengt.
+%
+% Zuerst wird die optionale 'Breite' abgefragt
+\long\def\shadowenv{\@ifnextchar [{\@shadowenv}{\@shadowenv[\textwidth]}}
+\long\def\@shadowenv[#1]{%
+% \textwidth wird gerettet und anschliessend mit der 'Breite' initialisiert
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+% Damit der Text (der Inhalt) nicht bis an die Umrahmung heranreicht, wird
+% die \textwidth etwas verkleinert
+ \advance\textwidth by-2\@wholewidth
+% \fboxsep (LaTeX-Befehl) enthaelt den Abstand zwischen Text und Umrahmung
+ \advance\textwidth by-2\fboxsep
+ \advance\textwidth by-\d@shad% Korrektur um die Schattendicke
+ \hsize=\textwidth \linewidth=\textwidth
+% Nun wird eine \vbox geoffnet, in die der Text geschrieben wird.
+ \setbox\env@box=\vbox\bgroup}%
+%
+\def\endshadowenv{%
+ \egroup
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \d@tmpa=\d@envb
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-2\@wholewidth \advance\d@envb by-\d@shad
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by2\fboxsep%
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \d@hoehe=\d@envdp
+% Umgebungshoehe := Texthoehe + 2*Strichdicke + Schattendicke
+ \advance\d@hoehe by2\@wholewidth \advance\d@hoehe by\d@shad
+% Umrechnen der Dimensionen in Counts fuer die \picture-Umgebung
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@shad =\d@shad \divide\c@shad by65536
+ \c@tmp=\@wholewidth \divide\c@tmp by65536
+ \advance\d@tmpa by-2\d@shad
+ \c@xoff =\d@tmpa \divide\c@xoff by65536
+ \advance\c@xoff by\c@shad \advance\c@xoff by-1
+ \advance\d@envdp by\@wholewidth
+ \vskip\@halfwidth
+ \unitlength 1pt\noindent%
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@tmp,\c@shad){\framebox(\c@hsize,\c@envdp){\box\env@box}}
+ \put(\c@shad,0){\rule{\d@tmpa}{\d@shad}}% Horizontaler Schatten
+ \put(\c@xoff,0){\rule{\d@shad}{\d@envdp}}% Vertikaler Schatten
+ \end{picture}%
+ \vskip\@halfwidth
+}
+
+
+% Die Umgebung DASHENV
+% ======================
+% Syntax: \begin{dashenv}[Breite] ... \end{dashenv}
+% Diese Umgebung umrahmt ihren Inhalt gestrichelt.
+%
+% Vorgehensweise:
+% Die Textbreite (\textwidth) wird etwas verkleinert und der Umgebungs-
+% inhalt in eine \vbox eingeschlossen. Dadurch erfolgt der Zeilenumbruch
+% automatisch. Anschliessend wird die \vbox innerhalb einer
+% 'picture'-Umgebung in einer \dashbox positioniert
+%
+% Zuerst wird die optionale 'Breite' abgefragt
+\long\def\dashenv{\@ifnextchar [{\@dashenv}{\@dashenv[\textwidth]}}
+\long\def\@dashenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+ \advance\textwidth by-2\@wholewidth \advance\textwidth by-2\fboxsep
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+%
+\long\def\enddashenv{%
+ \egroup
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-\@wholewidth
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by2\fboxsep%
+ \advance\d@envdp by\@wholewidth
+ \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@envdp=\d@envdp \divide\c@envdp by65536% Hoehe der Box in Punkten
+ \c@dash=\d@dash \divide\c@dash by65536% Strichlaenge in Punkten
+ \c@whole=\@wholewidth \divide\c@whole by65536
+ \c@half=\@halfwidth \divide\c@half by 65536
+ \noindent\unitlength 1pt
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@half,\c@whole){\dashbox{\c@dash}(\c@hsize,\c@envdp){\box\env@box}}
+ \end{picture}%
+}
+
+
+% Die Umgebung OVALENV
+% ======================
+% Syntax: \begin{ovalenv}[Breite] ... \end{ovalenv}
+% Diese Umgebung umrahmt ihren Inhalt mit abgerundeten Ecken.
+%
+% Vorgehensweise:
+% Die Textbreite (\textwidth) wird etwas verkleinert und der Umgebungs-
+% inhalt in eine \vbox eingeschlossen. Dadurch erfolgt der Zeilenumbruch
+% automatisch. Anschliessend wird die \vbox innerhalb einer
+% 'picture'-Umgebung in einem \oval positioniert.
+%
+%
+% Zuerst wird die optionale 'Breite' abgefragt
+\long\def\ovalenv{\@ifnextchar [{\@ovalenv}{\@ovalenv[\textwidth]}}%
+\long\def\@ovalenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+% \fboxsep (LaTeX-Befehl) enthaelt den Abstand zwischen Text und Umrahmung
+ \advance\textwidth by-4\fboxsep
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+%
+\long\def\endovalenv{%
+ \egroup
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \@wholewidth=0.4pt
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-2\@wholewidth
+ \c@hsize=\d@envb \divide\c@hsize by65536% Breite des Ovals in Punkten
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by4\fboxsep%
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@tmpa=\c@hsize \divide\c@tmpa by2% Der Mittelpunkt des Ovals ist die
+ \c@tmpb=\c@envdp \divide\c@tmpb by2% Breite/Hoehe geteilt durch 2
+ \d@tmpa=2\fboxsep \advance\d@tmpa by\@wholewidth
+ \c@xoff=\d@tmpa \divide\c@xoff by65536%
+ \advance\d@tmpa by\dp\env@box
+ \c@yoff=\d@tmpa \divide\c@yoff by65536%
+ \unitlength 1pt\noindent
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@tmpa,\c@tmpb){\oval(\c@hsize,\c@envdp)}
+ \put(\c@xoff,\c@yoff){\box\env@box}%
+ \end{picture}%
+}
diff --git a/macros/latex209/contrib/picins/picins.sty b/macros/latex209/contrib/picins/picins.sty
new file mode 100644
index 0000000000..2b17a83176
--- /dev/null
+++ b/macros/latex209/contrib/picins/picins.sty
@@ -0,0 +1,578 @@
+% PICINS.STY --- Style File zum Einbinden von Bildern
+% Autor: J. Bleser, E. Lang
+% Hochschulrechenzentrum
+% Technische Hochschule Darmstadt
+% !!! Dieses Style-File ist urheberrechtlich geschuetzt !!!
+% !!! Aenderungen nur mit Zustimmung der Autoren !!!
+\message{Option `picins' Version 3.0 Sep. 1992, TH Darmstadt/HRZ}
+\newbox\@BILD%
+\newbox\@TEXT%
+\newdimen\d@breite%
+\newdimen\d@hoehe%
+\newdimen\d@xoff%
+\newdimen\d@yoff%
+\newdimen\d@shad%
+\newdimen\d@dash%
+\newdimen\d@boxl%
+\newdimen\d@pichskip%
+\newdimen\d@tmp
+\newdimen\d@tmpa
+\newdimen\d@bskip
+\newdimen\hsiz@%
+\newdimen\p@getot@l%
+\newcount\c@breite
+\newcount\c@hoehe
+\newcount\c@xoff
+\newcount\c@yoff
+\newcount\c@pos
+\newcount\c@shad
+\newcount\c@dash
+\newcount\c@boxl
+\newcount\c@zeilen%
+\newcount\@changemode%
+\newcount\c@piccaption%
+\newcount\c@piccaptionpos%
+\newcount\c@picpos
+\newcount\c@whole%
+\newcount\c@half%
+\newcount\c@tmp
+\newcount\c@tmpa
+\newcount\c@tmpb
+\newcount\c@tmpc
+\newcount\c@tmpd
+\newskip\d@leftskip
+\newif\if@list \@listfalse%
+\newif\if@offset%
+
+
+\c@piccaptionpos=1%
+\c@picpos=0
+\d@shad=4pt%
+\d@dash=4pt%
+\d@boxl=10pt%
+\d@pichskip=1em%
+\@changemode=0%
+\def\@captype{figure}%
+\let\old@par=\par%
+
+\def\pichskip#1{\d@pichskip #1\relax}
+
+
+\def\shadowthickness#1{\d@shad #1\relax}
+
+
+\def\dashlength#1{\d@dash #1\relax}
+
+
+\def\boxlength#1{\d@boxl #1\relax}
+
+
+\def\picchangemode{\@changemode=1}%
+\def\nopicchangemode{\@changemode=0}%
+
+
+\def\piccaptionoutside{\c@piccaptionpos=1}%
+\def\piccaptioninside{\c@piccaptionpos=2}%
+\def\piccaptionside{\c@piccaptionpos=3}%
+\def\piccaptiontopside{\c@piccaptionpos=4}%
+
+\def\piccaption{\@ifnextchar [{\@piccaption}{\@piccaption[]}}
+\def\@piccaption[#1]#2{\c@piccaption=1\def\sh@rtf@rm{#1}\def\capti@nt@xt{#2}}
+\def\make@piccaption{%
+ \hsiz@\d@breite%
+ \ifnum\c@piccaptionpos=2%
+ \advance\hsiz@ -2\fboxsep%
+ \fi%
+ \ifnum\c@piccaptionpos>2%
+ \hsiz@\hsize\advance\hsiz@-\d@breite\advance\hsiz@-\d@pichskip%
+ \fi%
+ \setbox\@TEXT=\vbox{\hsize\hsiz@\caption[\sh@rtf@rm]{\capti@nt@xt}}%
+}
+
+
+
+\def\newcaption{\refstepcounter\@captype\@dblarg{\@newcaption\@captype}}
+\long\def\@newcaption#1[#2]#3{%
+ \old@par%
+ \addcontentsline{\csname ext@#1\endcsname }{#1}%
+ {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}
+ \begingroup\@parboxrestore\normalsize%
+ \@newmakecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\old@par%
+ \endgroup%
+}
+\long\def\@newmakecaption#1#2{%
+ \vskip 10pt%
+ \setbox\@tempboxa \hbox {#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize%
+ \setbox0=\hbox{#1: }\dimen0=\hsize\advance\dimen0 by-\wd0
+ \setbox1=\vtop{\hsize=\dimen0 #2}
+ \hbox{\box0 \box1}
+ \par
+ \else \hbox to\hsize {\hfil \box \@tempboxa \hfil}
+ \fi
+}
+
+
+
+
+
+\def\parpic{%
+ \@ifnextchar ({\iparpic}{\iparpic(0pt,0pt)}
+}
+\def\iparpic(#1,#2){%
+ \@ifnextchar ({\@offsettrue\iiparpic(#1,#2)}%
+ {\@offsetfalse\iiparpic(#1,#2)(0pt,0pt)}
+}
+\def\iiparpic(#1,#2)(#3,#4){%
+ \@ifnextchar [{\iiiparpic(#1,#2)(#3,#4)}{\iiiparpic(#1,#2)(#3,#4)[l]}
+}
+\def\iiiparpic(#1,#2)(#3,#4)[#5]{%
+ \@ifnextchar [{\ivparpic(#1,#2)(#3,#4)[#5]}{\ivparpic(#1,#2)(#3,#4)[#5][]}
+}
+\def\ivparpic(#1,#2)(#3,#4)[#5][#6]#7{%
+ \let\par=\old@par\par%
+ \hangindent0pt\hangafter1%
+ \setbox\@BILD=\hbox{#7}%
+ \d@breite=#1\d@breite=\the\d@breite%
+ \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi%
+ \c@breite=\d@breite\divide\c@breite by65536%
+ \multiply\c@piccaption\c@piccaptionpos%
+ \d@hoehe=#2\d@hoehe=\the\d@hoehe%
+ \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi%
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536%
+ \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536%
+ \d@yoff=\d@hoehe%
+ \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536%
+ \c@pos=1\unitlength1pt%
+ \if@offset%
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe){}}%
+ \put(\c@xoff,\c@yoff){\box\@BILD}%
+ \end{picture}%
+ }%
+ \else%
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}%
+ \end{picture}%
+ }%
+ \fi%
+ \ifnum\c@piccaption=2%
+ \make@piccaption%
+ \advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT%
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536%
+ \setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}%
+ \hbox{\hspace{\fboxsep}\box\@TEXT}%
+ \vspace{4pt}}%
+ \fi%
+ \@tfor\@tempa := #5\do{%
+ \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa l\c@pos=1\fi%
+ \if\@tempa r\c@pos=2\fi%
+ }%
+ \ifnum\c@piccaption=1%
+ \make@piccaption%
+ \advance\d@hoehe\ht\@TEXT\advance\d@hoehe\dp\@TEXT%
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536%
+ \setbox\@BILD=\vbox{\box\@BILD\vspace{-5pt}\hbox{\box\@TEXT}\vspace{4pt}}%
+ \fi%
+ \ifodd\count0\c@picpos=0\else\c@picpos=\@changemode\fi%
+ \pagetotal=\the\pagetotal%
+ \d@tmp=\pagegoal\advance\d@tmp by-\pagetotal\advance\d@tmp by-\baselineskip%
+ \ifdim\d@hoehe>\d@tmp%
+ \vskip 0pt plus\d@hoehe\relax\pagebreak[3]\vskip 0pt plus-\d@hoehe\relax%
+ \ifnum\c@picpos=1\c@picpos=0\else\c@picpos=\@changemode\fi%
+ \fi%
+ \ifnum\c@picpos=1\ifnum\c@pos=1\c@pos=2\else\c@pos=1\fi\fi%
+ \ifnum\@listdepth>0
+ \@listtrue\parshape 0%
+ \advance\hsize -\rightmargin%
+ \d@leftskip \leftskip%
+ \leftskip \@totalleftmargin%
+ \if@inlabel\rule{\linewidth}{0pt}\vskip-\baselineskip\relax\fi%
+ \else\@listfalse\medskip%
+ \fi%
+ \if@list\d@tmpa=\linewidth\else\d@tmpa=\hsize\fi%
+ \ifnum\c@piccaption=3%
+ \make@piccaption%
+ \d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT%
+ \ifdim\d@hoehe>\d@tmp%
+ \setbox\@TEXT=\vbox to\d@hoehe{\vfill\box\@TEXT\vspace{.2\baselineskip}\vfill}%
+ \else%
+ \setbox\@BILD=\vbox to\d@tmp{\vfill\box\@BILD\vfill}%
+ \d@hoehe\d@tmp%
+ \fi%
+ \fi%
+ \ifnum\c@piccaption=4%
+ \make@piccaption%
+ \d@tmp\ht\@TEXT\advance\d@tmp\dp\@TEXT%
+ \setbox\@TEXT=\vbox to\d@hoehe{\vspace{-10pt}\box\@TEXT\vfil}%
+ \advance\d@hoehe-\d@tmp%
+ \fi%
+ \ifnum\c@pos=1\d@tmpa=0pt%
+ \ifnum\c@piccaption>2%
+ \setbox\@BILD=\hbox{\box\@BILD\hspace{\d@pichskip}\hbox{\box\@TEXT}}%
+ \fi%
+ \else\advance\d@tmpa by-\wd\@BILD\d@breite=-\d@breite%
+ \ifnum\c@piccaption>2%
+ \d@tmpa=0pt%
+ \setbox\@BILD=\hbox{\hbox{\box\@TEXT}\hspace{\d@pichskip}\box\@BILD}%
+ \fi%
+ \fi%
+ \p@getot@l\the\pagetotal%
+ \d@bskip\d@hoehe\advance\d@bskip by\parskip\advance\d@bskip by.3\baselineskip%
+ {\noindent\hspace*{\d@tmpa}\relax%
+ \box\@BILD\nopagebreak\vskip-\d@bskip\relax\nopagebreak}%
+ \d@tmp=-\d@hoehe\divide\d@tmp by\baselineskip%
+ \c@zeilen=\d@tmp\advance\c@zeilen by-1%
+ \ifdim\d@breite<0pt\advance\d@breite by-\d@pichskip%
+ \else\advance\d@breite by\d@pichskip%
+ \fi%
+ \hangindent=\d@breite%
+ \hangafter=\c@zeilen%
+ \let\par=\x@par%
+ \ifnum\c@piccaption=3%
+ \hangindent0pt\hangafter1\let\par=\old@par%
+ \vskip\d@hoehe\vskip.2\baselineskip%
+ \fi%
+ \c@piccaption=0%
+}
+
+
+
+
+\newdimen\ptoti
+\newdimen\ptotii
+\def\x@par{%
+ \ptoti\pagetotal%
+ \old@par%
+ \ptotii\pagetotal%
+ \ifdim\ptoti=\ptotii%
+ \d@tmp\d@hoehe%
+ \else%
+ \d@tmp\baselineskip%
+ \multiply\d@tmp by\prevgraf%
+ \advance\d@tmp by\parskip%
+ \global\advance\d@hoehe by-\d@tmp\d@tmp=\d@hoehe%
+ \fi%
+ \ifdim\d@hoehe>0pt%
+ \divide\d@tmp by\baselineskip\c@zeilen=-\d@tmp\advance\c@zeilen by-1%
+ \c@zeilen=\the\c@zeilen%
+ \else\c@zeilen=0
+ \fi
+ \ifnum\c@zeilen<0\hangafter=\c@zeilen\hangindent=\d@breite%
+ \else\let\par=\old@par%
+ \hangindent 0pt%
+ \leftskip \d@leftskip%
+ \if@list\parshape \@ne \@totalleftmargin \linewidth%
+ \advance\hsize \rightmargin%
+ \fi%
+ \fi%
+}
+
+
+\def\picskip#1{%
+ \let\par=\old@par%
+ \par%
+ \pagetotal\the\pagetotal%
+ \c@tmp=#1\relax%
+ \ifnum\c@tmp=0%
+ \d@tmp\baselineskip\multiply\d@tmp by\prevgraf\advance\d@tmp\parskip%
+ \ifdim\p@getot@l<\pagetotal
+ \advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex%
+ \ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi%
+ \fi%
+ \ifdim\p@getot@l=\pagetotal%
+ \advance\d@hoehe by-\d@tmp\advance\d@hoehe by1ex%
+ \ifdim\d@hoehe>0pt\vspace*{\d@hoehe}\fi%
+ \fi%
+ \else\hangafter=-\c@tmp\hangindent=\d@breite%
+ \fi%
+ \leftskip \d@leftskip%
+ \if@list\parshape \@ne \@totalleftmargin \linewidth%
+ \advance\hsize \rightmargin%
+ \fi%
+}
+
+
+
+
+
+
+\def\hpic{%
+ \@ifnextchar ({\ihpic}{\ihpic(0pt,0pt)}
+}
+\def\ihpic(#1,#2){%
+ \@ifnextchar ({\@offsettrue\iihpic(#1,#2)}%
+ {\@offsetfalse\iihpic(#1,#2)(0pt,0pt)}
+}
+\def\iihpic(#1,#2)(#3,#4){%
+ \@ifnextchar [{\iiihpic(#1,#2)(#3,#4)}{\iiihpic(#1,#2)(#3,#4)[l]}
+}
+\def\iiihpic(#1,#2)(#3,#4)[#5]{%
+ \@ifnextchar [{\ivhpic(#1,#2)(#3,#4)[#5]}{\ivhpic(#1,#2)(#3,#4)[#5][]}
+}
+\def\ivhpic(#1,#2)(#3,#4)[#5][#6]#7{%
+ \setbox\@BILD=\hbox{#7}%
+ \d@breite=#1\d@breite=\the\d@breite%
+ \ifdim\d@breite=0pt\d@breite=\wd\@BILD\fi%
+ \c@breite=\d@breite\divide\c@breite by65536%
+ \d@hoehe=#2\d@hoehe=\the\d@hoehe%
+ \ifdim\d@hoehe=0pt\d@hoehe=\ht\@BILD\advance\d@hoehe by\dp\@BILD\fi%
+ \c@hoehe=\d@hoehe\divide\c@hoehe by65536%
+ \d@xoff=#3\c@xoff=\d@xoff\divide\c@xoff by65536%
+ \d@yoff=\d@hoehe%
+ \advance\d@yoff by-#4\c@yoff=\d@yoff\divide\c@yoff by65536%
+ \c@pos=0\d@tmpa=\parindent\parindent=0pt\unitlength1pt%
+ \if@offset
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe){}}%
+ \put(\c@xoff,\c@yoff){\box\@BILD}%
+ \end{picture}%
+ }%
+ \else%
+ \setbox\@BILD=\hbox{%
+ \begin{picture}(\c@breite,\c@hoehe)%
+ \put(0,0){\makebox(\c@breite,\c@hoehe)[#6]{\box\@BILD}}%
+ \end{picture}%
+ }%
+ \fi%
+ \@tfor\@tempa := #5\do{%
+ \if\@tempa f\setbox\@BILD=\hbox{\Rahmen(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa s\setbox\@BILD=\hbox{\Schatten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa o\setbox\@BILD=\hbox{\Oval(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa d\setbox\@BILD=\hbox{\Strich(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa x\setbox\@BILD=\hbox{\Kasten(\c@breite,\c@hoehe){\box\@BILD}}\fi%
+ \if\@tempa t\c@pos=1\fi%
+ \if\@tempa b\c@pos=2\fi%
+ }%
+ \ifnum\c@pos=0\parbox{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
+ \ifnum\c@pos=1\parbox[t]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
+ \ifnum\c@pos=2\parbox[b]{\d@breite}{\makebox[0cm]{}\\\box\@BILD\smallskip}\fi%
+ \parindent=\d@tmpa%
+}
+
+
+
+
+
+
+\def\Rahmen(#1,#2)#3{%
+ \c@whole=\@wholewidth\divide\c@whole by65536%
+ \c@half=\@halfwidth\divide\c@half by65536%
+ \c@tmpa=#1\advance\c@tmpa by\c@whole\advance\c@tmpa by\c@whole%
+ \c@tmpb=#2\advance\c@tmpb by\c@whole\advance\c@tmpb by\c@whole%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(\c@whole,\c@half){\framebox(#1,#2){#3}}%
+ \end{picture}%
+ \global\advance\d@breite by2\@wholewidth%
+ \global\advance\d@hoehe by2\@wholewidth%
+}
+
+
+\def\Schatten(#1,#2)#3{%
+ \c@whole=\@wholewidth\divide\c@whole by65536%
+ \c@half=\@halfwidth\divide\c@half by65536%
+ \c@shad=\d@shad\divide\c@shad by65536%
+ \c@tmp=\c@whole\advance\c@tmp by\c@whole\c@tmpd=\c@tmp%
+ \advance\c@tmp by\c@shad%
+ \advance\c@tmpd by#1%
+ \advance\c@half by\c@shad%
+ \c@tmpa=#1\advance\c@tmpa by\c@tmp%
+ \c@tmpb=#2\advance\c@tmpb by\c@tmp%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(\c@whole,\c@half){\framebox(#1,#2){#3}}%
+ \put(\c@shad,0){\rule{\c@tmpd pt}{\c@shad pt}}%
+ \put(\c@tmpd,0){\rule{\c@shad pt}{#2 pt}}%
+ \end{picture}%
+ \global\advance\d@breite by2\@wholewidth\global\advance\d@breite by\d@shad%
+ \global\advance\d@hoehe by2\@wholewidth\global\advance\d@hoehe by\d@shad%
+}
+
+
+\def\Oval(#1,#2)#3{%
+ \@wholewidth=0.4pt%
+ \c@tmpa=\the#1\divide\c@tmpa by2%
+ \c@tmpb=\the#2\divide\c@tmpb by2%
+ \begin{picture}(#1,#2)%
+ \put(\c@tmpa,\c@tmpb){\oval(#1,#2)}%
+ \put(0.4,0.4){#3}%
+ \end{picture}%
+ \global\advance\d@breite by1pt\global\advance\d@hoehe by1pt%
+}
+
+
+\def\Strich(#1,#2)#3{%
+ \c@whole=\@wholewidth\divide\c@whole by65536%
+ \c@half=\@halfwidth\divide\c@half by65536%
+ \c@dash=\d@dash\divide\c@dash by65536%
+ \c@tmp=\c@whole\advance\c@tmp by\c@whole%
+ \c@tmpa=#1\advance\c@tmpa by\c@tmp%
+ \c@tmpb=#2\advance\c@tmpb by\c@tmp%
+ \c@tmpc=#1\advance\c@tmpc by\c@whole%
+ \c@tmpd=#2\advance\c@tmpd by\c@whole%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(\c@half,\c@half){\dashbox{\c@dash}(\c@tmpc,\c@tmpd){#3}}%
+ \end{picture}%
+ \global\advance\d@breite by2\@wholewidth%
+ \global\advance\d@hoehe by2\@wholewidth%
+}
+
+
+\def\Kasten(#1,#2)#3{%
+ \@wholewidth=0.4pt%
+ \c@boxl=\d@boxl\divide\c@boxl by65536\c@boxl=\the\c@boxl%
+ \c@tmpa=#1\advance\c@tmpa by\c@boxl%
+ \c@tmpb=#2\advance\c@tmpb by\c@boxl%
+ \c@tmp=#2%
+ \begin{picture}(\c@tmpa,\c@tmpb)%
+ \put(0,\c@boxl){\framebox(#1,#2){#3}}%
+ \put(\c@boxl,0){\line(-1,1){\c@boxl}}%
+ \put(\c@boxl,0){\line(1,0){#1}\line(-1,1){\c@boxl}}%
+ \put(\c@boxl,0){\put(#1,0){\line(0,1){\c@tmp}%
+ \put(0,\c@tmp){\line(-1,1){\c@boxl}}}}%
+ \end{picture}%
+ \global\advance\d@breite by\d@boxl%
+ \global\advance\d@hoehe by\d@boxl%
+}
+
+
+
+
+
+\newbox\env@box%
+\newdimen\d@envdp
+\newcount\c@hsize
+\newcount\c@envdp
+\newdimen\d@envb
+
+\long\def\frameenv{\@ifnextchar [{\@frameenv}{\@frameenv[\textwidth]}}
+\long\def\@frameenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+ \advance\textwidth by-2\@wholewidth
+ \advance\textwidth by-2\fboxsep
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+\def\endframeenv{%
+ \egroup%
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-2\@wholewidth
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by2\fboxsep%
+ \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \c@tmp=\@wholewidth \divide\c@tmp by65536
+ \vskip\@wholewidth%
+ \unitlength 1pt\noindent%
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@tmp,\c@tmp){\framebox(\c@hsize,\c@envdp){\box\env@box}}
+ \end{picture}%
+}
+
+
+
+\long\def\shadowenv{\@ifnextchar [{\@shadowenv}{\@shadowenv[\textwidth]}}
+\long\def\@shadowenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+ \advance\textwidth by-2\@wholewidth
+ \advance\textwidth by-2\fboxsep
+ \advance\textwidth by-\d@shad%
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+\def\endshadowenv{%
+ \egroup
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \d@tmpa=\d@envb
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-2\@wholewidth \advance\d@envb by-\d@shad
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by2\fboxsep%
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \d@hoehe=\d@envdp
+ \advance\d@hoehe by2\@wholewidth \advance\d@hoehe by\d@shad
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@shad =\d@shad \divide\c@shad by65536
+ \c@tmp=\@wholewidth \divide\c@tmp by65536
+ \advance\d@tmpa by-2\d@shad
+ \c@xoff =\d@tmpa \divide\c@xoff by65536
+ \advance\c@xoff by\c@shad \advance\c@xoff by-1
+ \advance\d@envdp by\@wholewidth
+ \vskip\@halfwidth
+ \unitlength 1pt\noindent%
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@tmp,\c@shad){\framebox(\c@hsize,\c@envdp){\box\env@box}}
+ \put(\c@shad,0){\rule{\d@tmpa}{\d@shad}}%
+ \put(\c@xoff,0){\rule{\d@shad}{\d@envdp}}%
+ \end{picture}%
+ \vskip\@halfwidth
+}
+
+
+\long\def\dashenv{\@ifnextchar [{\@dashenv}{\@dashenv[\textwidth]}}
+\long\def\@dashenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+ \advance\textwidth by-2\@wholewidth \advance\textwidth by-2\fboxsep
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+\long\def\enddashenv{%
+ \egroup
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-\@wholewidth
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by2\fboxsep%
+ \advance\d@envdp by\@wholewidth
+ \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \c@dash=\d@dash \divide\c@dash by65536%
+ \c@whole=\@wholewidth \divide\c@whole by65536
+ \c@half=\@halfwidth \divide\c@half by 65536
+ \noindent\unitlength 1pt
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@half,\c@whole){\dashbox{\c@dash}(\c@hsize,\c@envdp){\box\env@box}}
+ \end{picture}%
+}
+
+
+\long\def\ovalenv{\@ifnextchar [{\@ovalenv}{\@ovalenv[\textwidth]}}%
+\long\def\@ovalenv[#1]{%
+ \hsiz@=\textwidth \textwidth=#1 \d@envb=#1
+ \advance\textwidth by-4\fboxsep
+ \hsize=\textwidth \linewidth=\textwidth
+ \setbox\env@box=\vbox\bgroup}%
+\long\def\endovalenv{%
+ \egroup
+ \hsize=\hsiz@ \textwidth=\hsiz@ \linewidth=\hsiz@
+ \@wholewidth=0.4pt
+ \c@breite=\d@envb \divide\c@breite by65536
+ \advance\d@envb by-2\@wholewidth
+ \c@hsize=\d@envb \divide\c@hsize by65536%
+ \d@envdp=\dp\env@box \advance\d@envdp by\ht\env@box%
+ \advance\d@envdp by4\fboxsep%
+ \c@envdp=\d@envdp \divide\c@envdp by65536%
+ \d@hoehe=\d@envdp \advance\d@hoehe by2\@wholewidth
+ \c@hoehe=\d@hoehe \divide\c@hoehe by65536
+ \c@tmpa=\c@hsize \divide\c@tmpa by2%
+ \c@tmpb=\c@envdp \divide\c@tmpb by2%
+ \d@tmpa=2\fboxsep \advance\d@tmpa by\@wholewidth
+ \c@xoff=\d@tmpa \divide\c@xoff by65536%
+ \advance\d@tmpa by\dp\env@box
+ \c@yoff=\d@tmpa \divide\c@yoff by65536%
+ \unitlength 1pt\noindent
+ \begin{picture}(\c@breite,\c@hoehe)(0,0)
+ \put(\c@tmpa,\c@tmpb){\oval(\c@hsize,\c@envdp)}
+ \put(\c@xoff,\c@yoff){\box\env@box}%
+ \end{picture}%
+}
diff --git a/macros/latex209/contrib/picins/picins.txt b/macros/latex209/contrib/picins/picins.txt
new file mode 100644
index 0000000000..2da1e1e0bb
--- /dev/null
+++ b/macros/latex209/contrib/picins/picins.txt
@@ -0,0 +1,112 @@
+% Summary of commands in picins.sty
+% This summary made by Piet van Oostrum <piet@cs.ruu.nl> Apr 25 1995.
+% NOTE: The author of picins.sty is Joachim Bleser (TH Darmstadt)
+
+% \parpic : Text flows around picture
+% \hpic : Pictures in a separate paragraph
+% \picskip : directs the flow of text around pictures
+% \pichskip : horizontal distance between picture and text
+% \shadowthickness: obvious
+% \dashlength: Length of dashes
+% \boxlength: depth of boxes
+% \piccaption: Caption under/beside the picture
+% \newcaption: enhanced \caption-command
+% \picchangemode: directs picture placement
+%
+% New environments:
+% frameenv : frame around contents
+% shadowenv: frame with shadow around contents
+% ovalenv : frame with rounded corners around contents
+% dashenv : dashed frame around contents
+
+\parpic(width,height)(x-offset,y-offset)[Options][Position]{Picture}
+Paragraph text....
+
+All parameters except the Picture are optional. The picture can be
+positioned left or right, boxed with a rectangle, oval, shadowbox,
+dashed box, a caption can be given which includes it in the List of
+figures.
+
+If the width and height are not given [in which case also no offsets
+can be given] or if they are given as 0pt, the actual size of the
+Picture is used.
+
+Options can be (default is l):
+ l - put picture on left side of the paragraph
+ r - put picture on right side of the paragraph
+
+ f - frame the picture
+ d - put a dashed frame aroud the picture
+ o - put an \oval around the picture
+ s - put a shadowbox around the picture
+ x - put a 3D box around the picture
+ Max one of each group can be given
+
+Position:
+ l - put the picture left in the box
+ r - put the picture right in the box
+ t - put the picture in the top of the box
+ b - put the picture in the bottom of the box
+ Default is centering. It only makes a difference if the width and
+ height given are bigger than the actual picture. If offsets are
+ given Position is not used.
+
+Picture can be any LaTeX construct.
+
+\picskip{n} overrules the normal calculations about the number of lines
+that should be indented for the picture. By default the paragraph is
+indented until the end of the picture. If \picskip{n} is given, from
+this point on exactly n lines will be indented. \picskip terminates the
+currrent paragraph. It should NOT be followed by \par or an empty line.
+
+\pichskip{length} defines the horizontal distance between picture and text.
+
+\dashlength{length} defines the length of the dashes used in a dashed
+box (default 4pt). It is given as parameter to \dashbox.
+
+\shadowthickness{length} defines the obvious thing for shadowboxes.
+
+\boxlength{length} defines the depth of the 3D boxes (default 10pt).
+
+\piccaption[]{Caption text} defines the caption for the picture. It must
+be given BEFORE the \parpic command. The parameters are as in the standard
+LaTeX \caption command. It makes a figure caption. You must change
+\@captype to get e.g. a table caption. A \label command should be given IN
+the \piccaption command.
+
+Placement:
+\piccaptionoutside causes the caption to be positioned below the
+ picture, outside of the box. (this is the default).
+\piccaptioninside causes the caption to be positioned below the
+ picture, inside of the box.
+\piccaptionside positions the caption besides the picture (vertically
+ centered)
+\piccaptiontopside positions the caption besides the picture (top
+ aligned)
+
+\picchangemode causes the [l] and [r] Options of \parpic to be reversed
+on even pages, so that [l] means inside of the page, and [r] means
+outside of the page.
+\nopicchangemode cancels this effect.
+
+\newcaption[Short]{Caption text} is like \caption, but formats a ``hanging''
+caption. If you want to combine this with \piccaption you should do a
+\let\caption\newcaption.
+
+\hpic(width,height)(x-offset,y-offset)[Options][Position]{Picture}
+can be used to place pictures besides each other (each one should be
+included in a \hpic). You can e.g. put a number of \hpic's in a
+\centerline.
+
+Options can be:
+ t - align the pictures on top
+ b - align the pictures on bottom
+ (default vertically centered)
+ t d o s x - as in \parpic
+
+Framed environments:
+ct
+\begin{xxx}[width]
+ ....
+\end{xxx}
+ xxx can be frameenv, shadowenv, ovalenv or dashenv .
diff --git a/macros/latex209/contrib/postcard/demo.tex b/macros/latex209/contrib/postcard/demo.tex
new file mode 100644
index 0000000000..9795528f96
--- /dev/null
+++ b/macros/latex209/contrib/postcard/demo.tex
@@ -0,0 +1,24 @@
+\documentstyle[11pt,german,postcard]{article}
+\begin{document}
+\anrede{Herrn}
+\name{Arne Steuer}
+\strasse{Ziehltstra"se 25}
+\ort{77855 Achern}
+\land{Deutschland}
+\nachricht{
+Moment, Moooment!\\
+Glauben Sie ja nicht, was Sie vor sich haben! Falls Sie glauben, Sie haben ein
+{\tt postcard.sty} vor sich, liegen Sie ganz richtig!
+Gell, dann braucht man niemals nicht mehr bei der Post, der Gelben, eine
+Postkarte zu kaufen! Man kann alles selbst machen. Sogar das Bild auf der
+R"uckseite mit einer IFF-Grafik gestalten
+An einem {\tt stamp.sty} arbeite ich gerade. Wenn er fertig ist,
+kann man sogar seine Briefmarken mit \TeX\ selbst machen! Man schiebt dann
+seine Kreditkarte ins Diskettenlaufwerk, und bei jeder Briefmarke wird das
+entsprechende Porto abgebucht! Dann schaffe ich gerade an einem Style-File
+zum Bedrucken von Lokuspapier ({\tt asswipe.sty}).\\
+Gru"s und Ku"s}
+\bild{DANTE:staunen.iff}{bw}
+\postcard
+\end{document}
+
diff --git a/macros/latex209/contrib/postcard/demo2.tex b/macros/latex209/contrib/postcard/demo2.tex
new file mode 100644
index 0000000000..73f35a0771
--- /dev/null
+++ b/macros/latex209/contrib/postcard/demo2.tex
@@ -0,0 +1,26 @@
+\documentstyle[11pt,german,postcard]{article}
+\begin{document}
+\anrede{Herrn}
+\name{Arne Steuer}
+\strasse{Ziehltstra"se 25}
+\ort{77855 Achern}
+\absender{DANTE e.V.\\
+ Postfach 10 18 40\\
+ 69008 Heidelberg}
+
+\nachricht{
+Moment, Moooment!\\
+Glauben Sie ja nicht, was Sie vor sich haben! Falls Sie glauben, Sie haben ein
+{\tt postcard.sty} vor sich, liegen Sie ganz richtig!
+Gell, dann braucht man niemals nicht mehr bei der Post, der Gelben, eine
+Postkarte zu kaufen! Man kann alles selbst machen. Sogar das Bild auf der
+R"uckseite mit einer IFF-Grafik gestalten
+An einem {\tt stamp.sty} arbeite ich gerade. Wenn er fertig ist,
+kann man sogar seine Briefmarken mit \TeX\ selbst machen! Man schiebt dann
+seine Kreditkarte ins Diskettenlaufwerk, und bei jeder Briefmarke wird das
+entsprechende Porto abgebucht! Dann schaffe ich gerade an einem Style-File
+zum Bedrucken von Lokuspapier ({\tt asswipe.sty}).\\
+Gru"s und Ku"s}
+\postcard
+\end{document}
+
diff --git a/macros/latex209/contrib/postcard/postcard.sty b/macros/latex209/contrib/postcard/postcard.sty
new file mode 100644
index 0000000000..e6aacd8f43
--- /dev/null
+++ b/macros/latex209/contrib/postcard/postcard.sty
@@ -0,0 +1,128 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% postcard.sty V1.0 --- 27. Juni 1993 by Yellow Foot Software %
+% V1.1 --- 05. Dezember 1993 %
+% %
+% Folgende Befehle stehen zur Verfügung: %
+% %
+% \anrede{Herr/Frau etc.} --- Anrede für das Adressfeld %
+% \name{Name} --- Name für das Adressfeld %
+% \strasse{Straße} --- Straße für das Adressfeld %
+% \ort{PLZ und Ort} --- Ort für das Adressfeld %
+% \land{Land} --- Land für das Adressfeld (nur bei %
+% \bild) %
+% \absender{1.Zeile\\ %
+% 2.Zeile\\ %
+% ... } --- Absendeadresse (nur ohne \bild) %
+% \nachricht{Postkartentext} --- Der Text der Postkarte %
+% \bild{Pfad der IFF-Bilddatei}{art} - Bild und Bildart %
+% (bw,color,ham) für die %
+% Rückseitengestaltung %
+% ACHTUNG: \bild nutzt einen \special-Befehl! Dadurch kann es zu ein- %
+% schränkungen der Portabilität kommen. Gegebenenfalls muß %
+% die Syntax des \bild-Makros angepaßt werden. %
+% %
+% Außer \nachricht können alle Befehle auch weggelassen werden. %
+% Die Postkarte wird ohne Angabe weiterer Größen und Maße auf Norm- %
+% größe richtig formatiert. %
+% Wird \bild weggelassen, wird automatisch eine Norm-Postkarte mit %
+% Absenderfeld und dem Text auf der Rückseite erzeugt. %
+% %
+% Die LaTeX-Quelldatei muß wie folgt aufgebaut sein: %
+% %
+% \documentstyle[...,postcard]{article} %
+% \begin{document} %
+% ... oben genannte Befehle ... %
+% \postcard %
+% \end{document} %
+% %
+% Achern, 27.06.1993 Arne Steuer %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\textwidth20cm
+\textheight25cm
+\pagestyle{empty}
+\parindent0cm
+\unitlength1mm
+\newdimen\postcardtextwidth
+\postcardtextwidth70mm
+
+
+\def\anrede#1{\def\@anrede{#1}}
+\def\@anrede{}
+\def\name#1{\def\@name{#1}}
+\def\@name{}
+\def\strasse#1{\def\@strasse{#1}}
+\def\@strasse{}
+\def\ort#1{\def\@ort{#1}}
+\def\@ort{}
+\def\land#1{\def\@land{#1}}
+\def\@land{}
+\def\absender#1{\def\@absender{#1}}
+\def\@absender{}
+%
+% Die Syntax des \special-Befehls gilt für das Programm SpecialHost
+% ß-Version 0.94 (C) 1991 by Georg Heßmann. Dieses Programm ist Bestand-
+% teil des PasTeX für Amiga von Georg Heßmann.
+%
+% Für andere Programme zum Auswerten von \special-Strings muß die Syntax
+% entsprechend angepaßt werden.
+%
+
+\def\bild#1#2{\gdef\@bild{\special{ifffile=#1 mode=#2
+ hoffset=-3in voffset=2.1in
+ hsize=150mm vsize=105mm}}}
+\def\@bild{}
+
+\def\nachricht#1{
+\gdef\breittext{\parbox[t]{2\postcardtextwidth}{#1}}
+\gdef\text{\parbox[t]{\postcardtextwidth}{#1}}
+}
+
+
+\def\postcard{
+\ifx\@empty\@bild{
+\def\@land{}
+\begin{picture}(150,105)
+\put(0,0) {\framebox(150,105){}}
+\put(71,60) {\xiipt{\sf Postkarte}}
+\begin{LARGE}
+\put(71,43) \@anrede
+\put(71,35) \@name
+\put(71,27) \@strasse
+\put(71, 9) \@ort
+\end{LARGE}
+\put(120,75){\framebox(20,25){DM 0,80}}
+\put(3,100) {\parbox[t]{\postcardtextwidth}{\viiipt{\sf Absender}\newline
+ \xpt{\@absender}}}
+\end{picture}
+\newline
+\begin{picture}(150,105)
+\put(0,0) {\framebox(150,105){\breittext}}
+\end{picture}
+}
+ \else{
+\begin{picture}(150,105)
+\put(0,0) {\framebox(150,105){}}
+\put(78,5) {\line(0,1){95}}
+\begin{LARGE}
+\put(81,64) \@anrede
+\put(81,52) \@name
+\put(81,40) \@strasse
+\put(81,20) \@ort
+\put(81, 9) \@land
+\end{LARGE}
+\put(120,75){\framebox(20,25){DM 0,80}}
+\put(3,100) \text
+\end{picture}
+\newline
+\begin{picture}(150,105)
+\put(0,0) {\framebox(150,105){\@bild}}
+\end{picture}
+}
+\fi
+}
+
+
diff --git a/macros/latex209/contrib/postcard/postcard.tex b/macros/latex209/contrib/postcard/postcard.tex
new file mode 100644
index 0000000000..91403fa844
--- /dev/null
+++ b/macros/latex209/contrib/postcard/postcard.tex
@@ -0,0 +1,75 @@
+\documentstyle[german]{article}
+\begin{document}
+\section*{Postkarten mit Pas\TeX\ auf dem Amiga}
+Arne W.~Steuer
+\subsection*{Der {\tt postcard.sty}}
+Sie kennen die Situation: Da haben Sie am Wochenende mal Zeit, zu Hause
+den liegengebliebenen B"urokram aufzuarbeiten, Sie m"u"sten dazu eine
+Postkarte versenden, \ldots und: keine Postkarten im Hause und die
+Post"amter haben geschlossen.
+
+Genau das habe ich vor kurzem auch erlebt. Also versuchte ich, aus der Not
+eine Tugend zu machen und schrieb kurzerhand einen Stylefile. Damit kann
+man nun nicht nur Postkarten erstellen, sondern --- sofern man m"ochte ---
+auch IFF-Grafiken (schwarzwei"s, farbig oder HAM) einbinden und so eine
+\TeX nische Ansichtskarte gestalten.
+
+Voraussetzung f"ur letzteres ist allerdings, da"s man "uber das
+Pas\TeX-Paket von Georg He"smann verf"ugt. Die Grafikeinbindung erfolgt
+n"amlich mitels eines \verb/\special/-Befehls. Die Syntax dieses \verb/
+\special/-Befehls gilt f"ur das Programm SpecialHost $\beta$-Version 0.94
+von Georg He"smann.
+
+Für andere Programme zum Auswerten von \verb/\special/-Strings kann die
+Syntax aber wohl problemlos entsprechend angepaßt werden. Auch wenn eine
+andere Methode des Grafik-Importes in \LaTeX\ bevorzugt wird (siehe dazu
+Die \TeX nische Kom"odie, Heft 2/1993, S.~38 ff.), m"u"ste eine Anpassung
+leicht m"oglich sein.
+
+\subsection*{Die neuen Befehle}
+
+Folgende Befehle stehen zur Verf"ugung:\\[5mm]
+\begin{tabular}{p{6cm}p{6cm}}
+\verb/\anrede{/Herr/Frau etc.\verb/}/ & Anrede f"ur das Adressfeld\\
+\verb/\name{/Name\verb/}/ & Name f"ur das Adressfeld\\
+\verb/\strasse{/Straße\verb/}/ & Stra"se f"ur das Adressfeld\\
+\verb/\ort{/PLZ und Ort\verb/}/ & Ort f"ur das Adressfeld\\
+\verb/\land{/Land\verb/}/ & Land f"ur das Adressfeld (nur bei
+ Verwendung des \verb/\bild/-Befehls)\\
+\verb/\absender{1.Zeile\\2.Zeile\\...}/ & Absendeadresse (nur ohne
+ Verwendung des
+ \verb/\bild/-Befehls)\\
+\verb/\nachricht{/Postkartentext\verb/}/ & Der Text der Postkarte\\
+\verb/\bild{/Pfad der IFF-Bilddatei\verb/}{/art\verb/}/ & Bild und Bildart
+ ({\tt bw,color,ham}) f"ur die
+ R"uckseitengestaltung
+\end{tabular}
+
+\vspace{5mm}
+{\bf Achtung:} \verb/\bild/ nutzt den \verb/\special/-Befehl! Dadurch kann
+es zu einschr"ankungen der Portabilit"at kommen. Gegebenenfalls muß die
+Syntax des \verb/\bild/-Makros angepa"st werden.
+
+Außer \verb/\nachricht/ k"onnen alle
+Befehle auch weggelassen werden. Die Postkarte wird ohne Angabe weiterer
+Gr"o"sen und Ma"se auf Normgr"o"se richtig formatiert. Wird \verb/\bild/
+weggelassen, wird automatisch eine Norm-Postkarte mit Absenderfeld und dem
+Text auf der R"uckseite erzeugt. Es ist unerheblich, welche Gr"o"se die
+einzubindenden Bilder haben, eine korrekte Skalierung erfolgt automatisch.
+
+Die \LaTeX-Quelldatei mu"s wie folgt aufgebaut sein:
+\begin{verbatim}
+\documentstyle[...,postcard]{article}
+\begin{document}
+ ... oben genannte Befehle ...
+\postcard
+\end{document}
+\end{verbatim}
+
+Es empfiehlt sich, als Druckmedium etwas festeres Papier zu nehmen (etwa
+$150g/m^2$). Der Output mu"s dann nur noch ausgeschnitten werden und an der
+Falzkante geknickt und zusammengeklebt werden.
+
+Fertig ist die Postkarte!
+\end{document}
+
diff --git a/macros/latex209/contrib/postcard/staunen.iff b/macros/latex209/contrib/postcard/staunen.iff
new file mode 100644
index 0000000000..765a09267f
--- /dev/null
+++ b/macros/latex209/contrib/postcard/staunen.iff
Binary files differ
diff --git a/macros/latex209/contrib/pphlp/helpproc.pas b/macros/latex209/contrib/pphlp/helpproc.pas
new file mode 100644
index 0000000000..6bca81e335
--- /dev/null
+++ b/macros/latex209/contrib/pphlp/helpproc.pas
@@ -0,0 +1,136 @@
+Program Help_processor (Input,Output) ;
+
+{
+
+
+Program description:
+
+ Help pre-processor
+
+
+Author : Krish Singh
+
+Written: 8th Oct 1991
+
+Version: 1.0
+
+Limitations: The program doesn't examine the contents of !<...|...>
+constructions, to see if there are any `...' within them. Also, it seems
+impossible to include the string !<...|...> within the file it processes - this
+makes documenting the system itself rather difficult!
+
+}
+
+LABEL
+ terminate;
+VAR
+ inchar,nextchar,outchar,dummychar :CHAR;
+ input_file,output_file,verbstring,
+ instring,outstring,boldon,boldoff: VARYING [132] OF CHAR;
+ i,istatus,il:integer;
+ infile,outfile:text;
+ bold,verbold:boolean;
+
+FUNCTION
+cli$get_value(com1:VARYING [a] OF CHAR;VAR com2:VARYING [b] OF CHAR;VAR i:integer):INTEGER;EXTERNAL;
+
+{---------------------------------------------------------------------------}
+Begin {Main program}
+
+ boldon:='E[1m';
+ boldoff:='E[0m';
+ boldon[1]:=chr(27);
+ boldoff[1]:=chr(27);
+ verbold:=true;
+
+ istatus:=cli$get_value('INFILE',input_file,il);
+ { writeln('reading from ',input_file); }
+ istatus:=cli$get_value('OUTFILE',output_file,il);
+ { writeln('and writing to ',output_file); }
+
+
+ {
+ write('Input file>');
+ readln(input_file);
+
+ write('Output file>');
+ readln(output_file);
+ }
+
+ OPEN(infile,input_file,default:='.help',history:=old);
+ reset(infile);
+ OPEN(outfile,output_file,default:=input_file,history:=new);
+ extend(outfile);
+
+ writeln (outfile,'! File produced by PPhlp/Helpproc from input file ',
+ input_file);
+
+ While not(eof(infile)) do
+ Begin
+ readln(infile,instring);
+
+ IF ((length(instring)>0) and (instring[1]='!')) then begin
+ { It might be an instruction to this program. In any case, }
+ { don't write it out to the output, as it would be ignored }
+ { by the help librarian }
+
+ IF (instring='!helpproc{stop}') then goto terminate;
+ IF (instring='!helpproc{verb_bold}') then verbold:=true;
+ IF (instring='!helpproc{verb_nobold}') then verbold:=false;
+
+ IF (instring='!begin{verbatim}') and (verbold)
+ then instring:=boldon;
+ IF (instring='!end{verbatim}') and (verbold)
+ then instring:=boldoff;
+ End
+
+ Else Begin
+ { Check the line for special characters, writing it out as }
+ { we go. }
+
+ i:=1;
+ while (i<=length(instring)) do begin
+ inchar:=instring[i];
+ If (inchar<>'''') AND (inchar<>'`') AND (inchar<>'!') then begin
+ write(outfile,inchar);
+ End
+ Else begin
+
+ IF (inchar='!') then begin
+ nextchar:='Q';
+ IF (i<>length(instring)) then nextchar:=instring[i+1];
+ IF (nextchar='<') then begin
+ while (instring[i]<>'|') AND (i<=length(instring)) do
+ begin
+ i:=i+1;
+ End;
+ i:=i+1;
+ while (instring[i]<>'>') AND (i<=length(instring))
+ do begin
+ write(outfile,instring[i]);
+ i:=i+1;
+ End;
+ End
+ Else begin
+ write(outfile,inchar);
+ End;
+ End;
+
+ IF (inchar='`') then begin
+ bold:=true;
+ write(outfile,boldon);
+ End;
+ IF (inchar='''') then begin
+ IF not(bold) then write(outfile,'''');
+ IF bold then write(outfile,boldoff);
+ bold:=false;
+ End;
+ End;
+ i:=i+1;
+ End { while (i<=length(instring)) };
+ writeln(outfile);
+ End; { if (instring[1] = '!') }
+ End;
+terminate: close(infile);close(outfile);
+End. {Main program}
+{---------------------------------------------------------------------------}
diff --git a/macros/latex209/contrib/pphlp/hlp.lse b/macros/latex209/contrib/pphlp/hlp.lse
new file mode 100644
index 0000000000..cec5b545f5
--- /dev/null
+++ b/macros/latex209/contrib/pphlp/hlp.lse
@@ -0,0 +1,155 @@
+!======================================================================
+! @LSE-command-file{
+! filename = "hlp.lse",
+! version = "1.0",
+! date = "17 July 1992",
+! time = "17:54:02.50 ",
+! author = "Norman Gray",
+! address = "Department of Physics
+! Open University
+! Milton Keynes
+! MK7 6AA, UK",
+! e-mail = "N.O.Gray@open.ac.uk (Internet)",
+! telephone = "+44 908 652279",
+! FAX = "+44 908 653744",
+! archived = "Aston, SHSU",
+! keywords = "hlp-files, VMS, help",
+! abstract = "This file is part of the PPHLP package, which
+! allows both printed manuals and VMS help library
+! modules to be prepared from a single file.",
+! codetable = "ISO/Ascii",
+! checksum = "53005 155 537 5704",
+! docstring = "This file will tell LSE about the .hlp `language'
+! - the margins, wrap-mode, and so on. It
+! additionally defines a series of `adjustments', so
+! that the code-elision feature of LSE is more
+! effective.
+!
+! To use this file, enter LSE and read in this file,
+! and then go to the command line (by pressing ^Z).
+! Give the command DO to define the language, and
+! then the command SAVE ENVIRONMENT if you wish LSE
+! to recognise the file-type .hlp in future.
+!
+! The checksum field above contains a CRC-16
+! checksum as the first value, followed by the
+! equivalent of the standard UNIX wc (word
+! count) utility output of lines, words, and
+! characters. This is produced by Robert
+! Solovay's checksum utility."
+!}
+!======================================================================
+
+!delete language hlp
+define language hlp -
+ /capabilities=nodiagnostics -
+ /file_types=(.hlp,.help) -
+ /initial_string="%<title>%" -
+ /placeholder=( -
+ optional = ("%{", "}%"), -
+ optional_list = ("%{", "}%..."), -
+ required = ("%<", ">%"), -
+ required_list = ("%<", ">%..."), -
+ pseudocode=("[ ", " ]")) -
+ /identifier_characters= -
+ "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"-
+ /punctuation_characters=",.;:?%{}[]<>" -
+ /overview=minimum=3 -
+ /left_margin=context_dependent -
+ /right_margin=65 -
+ /wrap -
+ /tab=4
+
+!delete adjustment/lang=hlp "$(column=1)1"
+!delete adjustment/lang=hlp "$(column=1)2"
+!delete adjustment/lang=hlp "$(column=1)3"
+!delete adjustment/lang=hlp "$(column=1)4"
+!delete adjustment/lang=hlp "$(column=1)5"
+!delete adjustment/lang=hlp "$(column=1)/"
+!delete adjustment/lang=hlp "$(column=1)!helpsection"
+!delete adjustment/lang=hlp "$(column=1)!title"
+!delete adjustment/lang=hlp "$(column=1)!verbatimline"
+!delete adjustment/lang=hlp "$(column=1)!begin{verbatim}"
+!delete adjustment/lang=hlp "$(column=1)!end{verbatim}"
+!delete adjustment/lang=hlp "$(column=1)!begin{TeXtext}"
+!delete adjustment/lang=hlp "$(column=1)!begin"
+!delete adjustment/lang=hlp "$(column=1)!end"
+!delete adjustment/lang=hlp "$(column=1)!index"
+
+define adjustment/lang=hlp "$(column=1)1" /current=-10
+define adjustment/lang=hlp "$(column=1)2" /current=-8
+define adjustment/lang=hlp "$(column=1)3" /current=-6
+define adjustment/lang=hlp "$(column=1)4" /current=-4
+define adjustment/lang=hlp "$(column=1)5" /current=-2
+define adjustment/lang=hlp "$(column=1)/" /current=-1
+define adjustment/lang=hlp "$(column=1)!helpsection" -
+ /inherit=next/current=-1/nooverview
+define adjustment/lang=hlp "$(column=1)!title" /current=-1
+define adjustment/lang=hlp "$(column=1)!verbatimline" /nooverview
+define adjustment/lang=hlp "$(column=1)!begin{verbatim}" -
+ /subsequent=1/nooverview
+define adjustment/lang=hlp "$(column=1)!end{verbatim}" -
+ /subsequent=-1
+define adjustment/lang=hlp "$(column=1)!begin{TeXtext}" -
+ /nooverview ! rather than following, as TeXtext isn't ended by !end
+define adjustment/lang=hlp "$(column=1)!begin" /subsequent=1
+define adjustment/lang=hlp "$(column=1)!end" /subsequent=-1
+define adjustment/lang=hlp "$(line_end)" /inherit=minimum/nocount/unit
+define adjustment/lang=hlp "$(column=1)!index" /inherit=previous
+
+!delete placeholder "title" /language=hlp
+define placeholder "title" -
+ /language=hlp
+ "!title{%<text>%}"
+ "!pagetitle{%<text>%}"
+ "!author{%<text>%}"
+ "!authorext{%<text>%}"
+ "!userguide{%<text>%}"
+ "!maketitle"
+end define
+
+!delete token "textext" /language=hlp
+define token "textext" -
+ /language=hlp
+ "!begin{TeXtext}"
+ "! %{rtext}%..."
+ "!\end{TeXtext}"
+end define
+
+!delete token "hlptext" /language=hlp
+define token "hlptext" -
+ /language=hlp
+ "!beginhlptext"
+ "%{rtext}%..."
+ "!endhlptext
+end define
+
+!delete token "verbatim" /language=hlp
+define token "verbatim" -
+ /language=hlp
+ "!begin{verbatim}"
+ "%{rtext}%..."
+ "!end{verbatim}"
+end define
+
+!delete token "<" /language=hlp
+define token "<" -
+ /language=hlp -
+ /description="LaTeX text | hlp text"
+ "!<%{text}%|%{text}%>"
+end define
+
+!delete placeholder "text" /language=hlp
+define placeholder "text" -
+ /language=hlp -
+ /type=terminal
+ "Text"
+end define
+
+!delete placeholder "rtext" /language=hlp
+define placeholder "rtext" -
+ /language=hlp -
+ /duplication=vertical -
+ /type=terminal
+ "Running text"
+end define
diff --git a/macros/latex209/contrib/pphlp/phutguide.sty b/macros/latex209/contrib/pphlp/phutguide.sty
new file mode 100644
index 0000000000..c5b617d249
--- /dev/null
+++ b/macros/latex209/contrib/pphlp/phutguide.sty
@@ -0,0 +1,337 @@
+%%% ======================================================================
+%%% @LaTeX-style{
+%%% filename = "phutguide.sty",
+%%% version = "1.0",
+%%% date = "19 July 1992",
+%%% time = "13:53:20.42 ",
+%%% author = "Norman Gray",
+%%% address = "Department of Physics
+%%% Open University
+%%% Milton Keynes
+%%% MK7 6AA, UK",
+%%% e-mail = "N.O.Gray@open.ac.uk (Internet)",
+%%% telephone = "+44 908 652279",
+%%% FAX = "+44 908 653744",
+%%% archived = "Aston, SHSU",
+%%% keywords = "hlp-files, VMS, help",
+%%% abstract = "This file is part of the PPHLP package, which
+%%% allows both printed manuals and VMS help library
+%%% modules to be prepared from a single file.",
+%%% codetable = "ISO/Ascii",
+%%% checksum = "01208 337 784 12102",
+%%% docstring = "This style-file supports a user guide. The
+%%% principal differences from an ordinary article
+%%% style are in the \maketitle command and the
+%%% information that goes into it, and in the
+%%% provision of an advice-box which appears
+%%% automatically at the end of the text.
+%%%
+%%% There are a number of parochialisms, marked by
+%%% the line string `% parochial'. Ach, why not call
+%%% them `customisable sections'...?
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility."
+%%% }
+%%% ======================================================================
+% phutguide.sty September 1990
+% modified from acsguide.sty, May 87, written by ACS, Open University
+\typeout{Physics Userguide. Released September 1990} % parochial
+\def\phutilitarians{Norman ({\tt no\char"5F gray})} % parochial
+\def\phutilitarianext{2279} % parochial
+% Next line added by Steve Daniels 6 May 88
+\newif\ifview\viewfalse
+\def\@ptsize{1}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue}
+\def\ds@draft{\overfullrule 5pt}
+\@options
+%\input acsguide1\@ptsize.sty\relax
+\input phutguide11.sty\relax
+
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{plain}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\markboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\markboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\markboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\section*{References\markboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \markboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@ \hrule width \columnwidth \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\bf #1:} #2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\gdef\@date{\thismonth}
+\def\pagetitle#1{\gdef\@pagetitle{#1}}
+\def\userguide#1{\gdef\@userguide{#1}}
+\def\authorext#1{\gdef\@authorext{#1}}
+\def\hoverline#1{\relax\ifmmode
+ \overline{\bigstrut #1}\else
+ $\overline{\hbox{\bigstrut #1}}$\relax\fi}
+\newbox\bigstrutbox
+\setbox\bigstrutbox=\hbox{\vrule height10pt depth3.5pt width0pt}
+\def\bigstrut{\relax\ifmmode\copy\bigstrutbox\else\unhcopy\bigstrutbox\fi}
+
+\def\advbox{\if@twocolumn\else\vfill
+\begin{center}
+\fbox{\parbox{300pt}{\parskip=\smallskipamount\small\sl\@advboxinfo}}
+\end{center}
+\fi}
+\def\@advboxinfo{ % default text % parochial
+This documentation is also available on-line, by typing\par
+\$ help \toptopic\par
+\ifx\@author\@empty\else For further information on this package, see
+\@author\ifx\@authorext\undefined\else\ on extension \@authorext\fi. \fi
+To gain access to physics\_utilities, give the command\par
+\$ @ science\$dsk:[physics\_utilities.util]phut\_setup}
+\long\def\advboxinfo#1{\long\gdef\@advboxinfo{#1}}
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn \twocolumn[\@maketitle]
+ \else \newpage \global\@topnum\z@ \@maketitle \fi
+ \thispagestyle{empty}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \ifx\@pagetitle\undefined\let\@pagetitle=\@title\fi
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \ifx\@userguide\undefined\let\@userguide=\@empty\fi
+ \hrule\vskip 20pt\par\noindent
+ {\Large\bf Physics User Guide \@userguide} % parochial
+ \vskip 25pt\par\noindent
+ {\LARGE\bf\@title}\vskip 25pt\par
+ \hrule \par
+ \vskip 20pt}
+
+\def\abstract{\if@twocolumn
+ \section*{Abstract}
+ \else
+ \quote \sl
+ \fi}
+\def\endabstract{\if@twocolumn\else
+ \endquote
+ \flushright
+ \ifx\@author\undefined\let\@author=\@empty
+ \else\sl \@author\\ \fi
+ \sl\@date
+ \endlist
+ \vskip 5pt\hrule\vskip 15pt
+ \fi}
+
+\mark{{}{}}
+
+\def\ps@plain{
+ \def\@oddhead{}
+ \def\@oddfoot{\hfil \bf\thepage \hfil}
+ \def\@evenhead{}
+ \def\@evenfoot{\hfil \bf\thepage \hfil}}
+\if@twoside
+ \def\ps@headings{
+ \ifx\@pagetitle\undefined\let\@pagetitle=\@title\fi
+ \ifx\@userguide\undefined\let\@userguide=\@empty\fi
+ \def\@oddhead{\protect\underline{\vbox{\hsize=\textwidth\noindent
+ \bf \@date \hfill \@pagetitle}}}
+ \def\@oddfoot{\protect\hoverline{\vbox{\hsize=\textwidth\noindent
+ \bf Physics User Guide \@userguide \hfill \thepage}}}
+ % parochial
+ \def\@evenhead{\protect\underline{\vbox{\hsize=\textwidth\noindent
+ \bf \@pagetitle \hfill \@date}}}
+ \def\@evenfoot{\protect\hoverline{\vbox{\hsize=\textwidth\noindent
+ \bf \thepage \hfill Physics User Guide \@userguide}}}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+\else
+ \def\ps@headings{
+ \ifx\@date\undefined\let\@date=\thismonth\fi
+ \ifx\@userguide\undefined\let\@userguide=\@empty\fi
+ \ifx\@pagetitle\undefined\let\@pagetitle=\@title\fi
+ \def\@oddhead{\protect\underline{\vbox{\noindent
+ \bf\@date \hfill \@pagetitle}}}
+ \def\@oddfoot{\protect\hoverline{\vbox{\noindent
+ \bf Physics User Guide \@userguide \hfill \thepage}}}
+ % parochial
+ \def\@evenhead{}
+ \def\@evenfoot{}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+\fi
+\def\ps@myheadings{
+ \def\@oddhead{\hbox{}\sl\rightmark \hfil \rm\thepage}
+ \def\@oddfoot{}
+ \def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox{}}
+ \def\@evenfoot{}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+
+
+\def\today{\space\number\day\ \ifcase\month\or
+January\or February\or March\or April\or May\or June\or
+July\or August\or September\or October\or November\or December\fi\
+\number\year}
+\def\thismonth{\ifcase\month\or
+January\or February\or March\or April\or May\or June\or
+July\or August\or September\or October\or November\or December\fi\
+\number\year}
+
+
+\ps@headings \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
diff --git a/macros/latex209/contrib/pphlp/phutguide11.sty b/macros/latex209/contrib/pphlp/phutguide11.sty
new file mode 100644
index 0000000000..f8b8816945
--- /dev/null
+++ b/macros/latex209/contrib/pphlp/phutguide11.sty
@@ -0,0 +1,139 @@
+%%% ======================================================================
+%%% @LaTeX-style{
+%%% filename = "phutguide11.sty",
+%%% version = "1.0",
+%%% date = "19 July 1992",
+%%% time = "14:01:43.72 ",
+%%% author = "Norman Gray",
+%%% address = "Department of Physics
+%%% Open University
+%%% Milton Keynes
+%%% MK7 6AA, UK",
+%%% e-mail = "N.O.Gray@open.ac.uk (Internet)",
+%%% telephone = "+44 908 652279",
+%%% FAX = "+44 908 653744",
+%%% archived = "Aston, SHSU",
+%%% keywords = "hlp-files, VMS, help",
+%%% abstract = "This file is part of the PPHLP package, which
+%%% allows both printed manuals and VMS help library
+%%% modules to be prepared from a single file.",
+%%% codetable = "ISO/Ascii",
+%%% checksum = "02642 139 542 6038",
+%%% docstring = "This file is the companion to phutstyle.sty.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility."
+%%% }
+%%% ======================================================================
+% acsmod11.sty 27 Jan 87
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\topsep 6pt plus 2pt minus 2pt\parsep 3pt plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt
+\def\@listi{\topsep 4pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+
+\if@twoside \oddsidemargin 54pt \evensidemargin 54pt \marginparwidth 100pt
+ \else \oddsidemargin 54pt \evensidemargin 54pt \marginparwidth 83pt
+\fi
+\marginparsep 10pt
+\topmargin 0pt
+\headheight 15pt \headsep 22pt \footheight 15pt \footskip 30pt
+
+\textheight 600pt \textwidth 360pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 12pt
+\skip\footins 6pt plus 2pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 17pt \topsep 9pt plus 3pt minus 5pt
+\partopsep 3pt plus 1pt minus 2pt \itemsep 4.5pt plus 2pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf Part \thepart \par\nobreak \fi \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep 4.5pt plus 2pt minus 1pt
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/pphlp/pphlp.com b/macros/latex209/contrib/pphlp/pphlp.com
new file mode 100644
index 0000000000..3272283606
--- /dev/null
+++ b/macros/latex209/contrib/pphlp/pphlp.com
@@ -0,0 +1,163 @@
+$ !!! ======================================================================
+$ !!! @VAX-VMS-shell{
+$ !!! filename = "pphlp.com",
+$ !!! version = "1.0",
+$ !!! date = "19 July 1992",
+$ !!! time = "14:05:50.47 ",
+$ !!! author = "Norman Gray",
+$ !!! address = "Department of Physics
+$ !!! Open University
+$ !!! Milton Keynes
+$ !!! MK7 6AA, UK",
+$ !!! e-mail = "N.O.Gray@open.ac.uk (Internet)",
+$ !!! telephone = "+44 908 652279",
+$ !!! FAX = "+44 908 653744",
+$ !!! archived = "Aston, SHSU",
+$ !!! keywords = "hlp-files, VMS, help",
+$ !!! abstract = "This file is part of the PPHLP package, which
+$ !!! allows both printed manuals and VMS help library
+$ !!! modules to be prepared from a single file.",
+$ !!! codetable = "ISO/Ascii",
+$ !!! checksum = "22288 163 899 6257",
+$ !!! docstring = "This is the DCL com-file which drives the PPhlp
+$ !!! package. It does so by parsing the command line
+$ !!! and the input file specifications, and preparing a
+$ !!! file pphlpdefs.tex, which is read in during the
+$ !!! next stage, when this file LaTeX's the principal
+$ !!! file, pphlp.tex. It finally renames the files
+$ !!! pphlp.dvi and pphlp.lis to match the name of the
+$ !!! original .hlp file.
+$ !!!
+$ !!! The checksum field above contains a CRC-16
+$ !!! checksum as the first value, followed by the
+$ !!! equivalent of the standard UNIX wc (word
+$ !!! count) utility output of lines, words, and
+$ !!! characters. This is produced by Robert
+$ !!! Solovay's checksum utility."
+$ !!! }
+$ !!! ======================================================================
+$!+ This procedure will prettyprint an |.hlp| file by \LaTeX ing the file
+$! |pphlp.tex|.
+$!
+$! The only parameter is the name of the file to be set---the routine first
+$! searches for a file with extension |.help|, then for |.hlp|.
+$!
+$! Information is passed to |pphlp.tex| via the file |pphlpdefs.tex|, which
+$! supplies the documentstyle, and has the following definitions:
+$!
+$! \medskip
+$! \begin{tabular}{lp{4in}}
+$! |\pphlpstyleoptions & The style options to be used.\\
+$! |\pphlpname| & The full file name, including version number.\\
+$! |\pphlphead| & The bare file name, without directory and extension. \\
+$! |\pphlpextra| & Any extra information which might be of use. This isn't
+$! currently used. \\
+$! |\pphlppreamble|& Commands to go in the preamble.
+$! \end{tabular}
+$!
+$! When this com file is invoked, extra documentstyle options may be provided
+$! by prefixing them on the command line with a hyphen, so that
+$! \begin{center}\tt
+$! pphlp -acsfigs,twocolumn helpfile
+$! \end{center}
+$! would set the file |helpfile.hlp| with the |[twoside,acsfigs,twocolumn]|
+$! options.
+$!
+$! Also, commands may be inserted into the preamble, by prefixing them with a
+$! plus sign, so that
+$! \begin{center}\tt
+$! pphlp +\makeindex helpfile
+$! \end{center}
+$! would insert the |\makeindex| command into the preamble.
+$!
+$! Finally, extra qualifiers may be added to the LaTeX command.
+$! \medskip
+$!\-
+$
+$ source_dir := phut:[util.local.pphlp]
+$
+$ param = 0
+$! docopts = "twoside"
+$ docopts = ""
+$ preamble = ""
+$ quals = ""
+$ fname_p = ""
+$ parse_loop:
+$ param = param + 1
+$ if p'param .eqs. "" then goto finished_parse
+$ ch1 = f$extract (0,1,p'param)
+$ if ch1 .eqs. "-"
+$ then
+$ if docopts .eqs. ""
+$ then
+$ docopts = f$edit (f$extract (1,99,p'param), "lowercase")
+$ else
+$ docopts = docopts + "," + -
+ f$edit (f$extract (1,99,p'param), "lowercase")
+$ endif
+$ else
+$ if ch1 .eqs. "+"
+$ then
+$ preamble = preamble + -
+ f$edit (f$extract (1,99,p'param), "lowercase") + " "
+$ else
+$ if ch1 .eqs. "/"
+$ then
+$ quals = quals + p'param
+$ else
+$ fname_p = p'param
+$ endif
+$ endif
+$ endif
+$ goto parse_loop
+$
+$ finished_parse:
+$
+$ if fname_p .eqs. "" then inquire fname_p "Which file? "
+$
+$ fname = f$search (f$parse (fname_p,".help")) ! check it exists, and fill in version number
+$ if fname .eqs. ""
+$ then
+$ fname = f$search (f$parse (fname_p,".hlp"))
+$ if fname .eqs. ""
+$ then
+$ write sys$output f$fao ("File !AS not found.", -
+ f$parse (fname_p,".hlp",,,"syntax_only")) ! doesn't check dir'y exists
+$ exit
+$ endif
+$ endif
+$
+$ outfilename = f$parse (fname,,,"name") ! just filename
+$
+$
+$ open/write argfile pphlpdefs.tex
+$ write argfile "{\catcode`\$=11 \catcode`\_=11" ! so we can read in ...
+$ if docopts .nes. "" then -
+ write argfile f$fao ("\gdef\pphlpstyleoptions{!AS}", docopts)
+$ write argfile f$fao ("\gdef\pphlpname{!AS}", -
+ f$edit (fname, "lowercase")) ! full file name
+$ write argfile f$fao ("\gdef\pphlphead{!AS}", -
+ f$edit (outfilename, "lowercase")) ! file name
+$ write argfile f$fao ("\gdef\pphlpextra{last revised !AS}", -
+ f$file(fname,"cdt")) ! file creation date
+$ if preamble .nes. "" then -
+ write argfile f$fao ("\gdef\pphlppreamble{!AS}", preamble)
+$ write argfile "}"
+$ close argfile
+$
+$ define/user sys$input sys$command
+$ on error then continue
+$ latex 'source_dir'pphlp 'quals' ! which reads in |prettydefs.tex|
+$ rename/nolog pphlp.dvi,.lis 'outfilename
+$ delete/noconfirm/nolog pphlpdefs.tex;*
+$! +Only the |.dvi| and |.lis| files are renamed---the |.aux| is left as it
+$! is. If there are cross-references within the prettyprinted file, then the
+$! |.aux| file containing them must be called |pphlp.aux| if \LaTeX\ is to
+$! find it. \-
+$
+$ write sys$output ""
+$ write sys$output "Output written on ",f$parse(outfilename,".DVI")
+$ write sys$output "Transcript written on ",f$parse(outfilename,".LIS")
+$ write sys$output ""
+$
+$ EXIT
diff --git a/macros/latex209/contrib/pphlp/pphlp.help b/macros/latex209/contrib/pphlp/pphlp.help
new file mode 100644
index 0000000000..065d891d69
--- /dev/null
+++ b/macros/latex209/contrib/pphlp/pphlp.help
@@ -0,0 +1,265 @@
+!iffalse
+!!! ======================================================================
+!!! @Digital-HELP-Text{
+!!! filename = "pphlp.help",
+!!! version = "1.0",
+!!! date = "19 July 1992",
+!!! time = "14:08:28.91 ",
+!!! author = "Norman Gray",
+!!! address = "Department of Physics
+!!! Open University
+!!! Milton Keynes
+!!! MK7 6AA, UK",
+!!! e-mail = "N.O.Gray@open.ac.uk (Internet)",
+!!! telephone = "+44 908 652279",
+!!! FAX = "+44 908 653744",
+!!! archived = "Aston, SHSU",
+!!! keywords = "hlp-files, VMS, help",
+!!! abstract = "This file is part of the PPHLP package, which
+!!! allows both printed manuals and VMS help library
+!!! modules to be prepared from a single file.",
+!!! codetable = "ISO/Ascii",
+!!! checksum = "04228 265 1410 10242",
+!!! docstring = "This is the main documentation for the PPhlp
+!!! package. It may be turned into a file suitable
+!!! for the help librarian by processing through
+!!! helpproc.pas, or into a printable .dvi file by
+!!! processing through pphlp.com.
+!!!
+!!! The checksum field above contains a CRC-16
+!!! checksum as the first value, followed by the
+!!! equivalent of the standard UNIX wc (word
+!!! count) utility output of lines, words, and
+!!! characters. This is produced by Robert
+!!! Solovay's checksum utility."
+!!! }
+!!! ======================================================================
+!fi
+!title{PPHLP: A documentation tool}
+!pagetitle{Pphlp}
+!author{Norman Gray}
+!authorext{2279}
+!userguide{Util5}
+!maketitle
+!begin{TeXtext}
+! \begin{abstract}
+! PPhlp is a tool for producing both
+! printed documentation using \LaTeX, and a help library usable
+! through the VMS `help' command, from a single file.
+! \end{abstract}
+!\end{TeXtext}
+!helpsection
+1 PPhlp
+This utility takes an appropriately formatted `.hlp' file and
+!<\LaTeX|LaTeX>'s it, to produce formatted documentation. It takes
+advantage of the fact that the librarian, which turns `.hlp'
+files into help libraries, ignores any line which has an
+exclamation mark in the first column. When you are writing
+documentation for this utility, you can regard the exclamation
+mark as an escape character, just like the backslash character.
+
+When you are writing documentation, you should remember that you
+are working under two sets of constraints: everything that
+appears in a line which does not start with an exclamation will
+appear as-is in the help library; at the same time, everything
+should be valid !<\LaTeX{}|LaTeX>. Most of the features in this
+utility are designed to reconcile these conflicting demands.
+!helpsection
+2 HLP_file_format
+This is documented fully in the librarian manual, but the
+essential format is:
+!begin{enumerate}!let*\item
+* Any line with an exclamation mark in column 1 is ignored;
+* Any line with a digit in column 1 is taken to be a help library
+ level, and is followed by a key.
+* The key should be composed of letters, digits, the dollar sign,
+ underscore and hyphen.
+* Because the material between the keys is indented on-screen,
+ you should limit the lines in the help file to about 60--70
+ characters.
+!end{enumerate}
+!helpsection
+2 PPhlp_control_sequences
+The following control sequences are usable in pphlp file.
+!begin{description} !activate+ !def+ {!par!begingroup!makeother!!!vitem}
+!def!vitem#1 {!endgroup!item[!tt #1]}
++ !helpsection
+ Put this command before each line which consists of a help level number
+ and heading, or before a qualifier line.
++ !verbatimline
+ Put this command before a line which is to be set verbatim. It takes an
+ optional argument, which is the number of verbatim lines to be set.
++ !settab
+ When making tables, it is sometimes useful to define a different
+ character, say `-', to be the alignment tab character.
+ For example
+!verbatimline[5]
+ !begin{center}!settab: !begin{tabular}{ll}
+ first column : second column
+ !\
+ ...
+ !end{tabular}!end{center}
++ !activate
+ Make a character active, for example in the line
+!verbatimline[3]
+ !begin{itemize}!activate* !let*!item
+ * Here is the first item in the list
+ ...
+ which would help make an itemised list of starred items.
++ !makeother
+ Give a character the catcode `other'. Takes an optional argument with
+ an alternative catcode.
++ !beginhlptext...!endhlptext
+ The text between these control sequences is not included
+ in the !<!LaTeX|LaTeX> version of the documentation.
+!beginhlptext
++ ! <LaTeX-text|hlp-text>
+!endhlptext
+!item[!tt!!<!LaTeX-text|hlp-text>]
+ Put only the first alternate text in the !<!LaTeX|LaTeX> file. If you use
+ this, you'll have to also use Krish's preprocessor
+ (`pproc') to strip the first alternate from the `.hlp' file
+ before it can be put into a help library. Do not split
+ this construction over two or more lines.
+!end{description}
+
+A new environment has been defined, and the verbatim environment
+slightly changed.
+!begin{description}!activate+ !def+ #1:{!item[!tt!{#1!}]}
++ TeXtext:
+ Blocks of text which are to be omitted from the library
+ should have exclamation marks at the beginning of each
+ line. Longer sections should additionally be surrounded by the
+ TeXtext environment, in which exclamation marks are
+ ignored, to avoid spacing problems. Note that the
+ environment should be ended by `\end{TeXtext}', rather
+ than `!end{TeXtext}'. The control sequence `\!' will
+ produce an exclamation mark in this environment.
++ verbatim:
+ The verbatim environment has been changed, so that it
+ must be ended by the string `!end{verbatim}', rather than
+ `\end{verbatim}'.
+!end{description}
+
+The following characters are also made active:
+!begin{description}!activate+ !def+ #1{!item[!tt #1]}
+!makeother!` !makeother!*
++ `
+ In-line strings which are to be set verbatim should be
+ placed between `...' (and you should avoid using left
+ quotes in other contexts).
++ *
+ Words or phrases to be emphasised should go between
+ *...*.
+!end{description}
+
+Other changes from standard !<!LaTeX|LaTeX> are:
+!begin{description}!activate+ !def+ #1:{!item[#1]}
++ `$' and `@' characters:
+ These have been given catcode *other*, that is, they can
+ be used in text as normal characters. This means that
+ maths mode must be begun and ended with `!(...!)'
++ The underscore:
+ This has been made active, and will produce an ordinary
+ underscore in text, and a subscript in maths mode.
+!end{description}
+
+Finally, remember that !<!TeX|TeX>'s `!endinput' command may be
+used in a help file to indicate that no more of the file should
+be read. All the text after this point will be seen only by the
+help librarian.
+!helpsection
+2 Preprocessor
+In most cases, enough formatting material may be included within
+an `.hlp' file that it can be used either for input to `pphlp' or
+given to the help librarian. Sometimes, however, the formatting
+within the file is involved enough that some preprocessing is
+required. Specifically, this will be necessary if you use the
+`!<...|...>' construction.
+
+A program exists to do this preprocessing, called `pproc', which
+is set up by the command
+
+!verbatimline
+ $ set command biocom:helpproc
+
+The format of the command is
+
+!verbatimline
+ $ pproc <input-file> <output-file>
+
+It is a useful convention to reserve the `.hlp' suffix for file
+which are directly suitable for the help librarian, and to give
+the `.help' suffix to files which must be run through the
+preprocessor.
+
+The processor recognises the following constructs.
+!begin{description}!activate+ !def+{!begingroup!makeother!! !vitem}
+!def!vitem #1 :{!endgroup!item[!tt #1]}
+!makeother!`
++ !<...|...> :
+ The preprocessor leaves only the second alternative in
+ the file.
++ `...' :
+ Text within quotes is surrounded by escape sequences
+ which will embolden it within the help file.
+!end{description}
+!helpsection
+2 Calling_pphlp
+The `pphlp' processor is set up by defining the symbol
+
+!verbatimline
+ $ pphlp :== @ phut:[util.local.pphlp]pphlp
+
+and has the format
+
+!verbatimline[2]
+ $ pphlp [-stylefile ...] [+\preamblecommands ...] -
+ [/extraqualifiers] hlp-file
+
+where you may give a list of additional style files prefixed by
+hyphens, and a list of !<!LaTeX|LaTeX> commands (with backslash
+as the escape character) prefixed with a plus sign, which are to
+be inserted in the preamble. If the extension is missing from
+the `hlp-file', then the procedure first searches for a file
+with the extension `.help', then for one with the extension
+`.hlp'.
+
+For example, given the file `doc.help' and style files
+`acs_specials.sty' and `doc-sty.sty', the following command will
+format the help file in batch mode (note that the qualifier must
+be separated from the filename).
+
+!verbatimline
+ $ pphlp -acs_specials -doc-sty +\makeindex doc /batch
+!helpsection
+2 Other_LaTeX_facilities
+Other !<!LaTeX|LaTex> facilities such as cross referencing,
+compiling tables of contents, and floating figures and tables are
+perfectly usable within this system.
+
+The indexing program *MakeIndex* can be used with `pphlp', with a
+minor alteration. That program uses the exclamation mark as a
+sub-entry delimiter, but this causes problems with `pphlp' as
+that character is the escape. Accordingly, if you want to use
+*MakeIndex*, then you should use it with a style file which
+alters its behaviour so that the `>' character (say) is the
+sub-entry delimiter. That is, you should create a file
+(`pphlp.isty', say) with the contents
+
+!verbatimline[2]
+ level '>'
+ keyword "!indexentry"
+
+invoke `pphlp' with the command
+
+!verbatimline
+ $ pphlp +\makeindex doc-file
+
+and invoke *MakeIndex* with the command
+
+!verbatimline
+ $ makeindex -s pphlp.isty pphlp.idx
+
+(note that the index file is called `pphlp.idx', rather than
+`doc-file.idx').
diff --git a/macros/latex209/contrib/pphlp/pphlp.readme b/macros/latex209/contrib/pphlp/pphlp.readme
new file mode 100644
index 0000000000..6a9efebc97
--- /dev/null
+++ b/macros/latex209/contrib/pphlp/pphlp.readme
@@ -0,0 +1,139 @@
+PPhlp
+-----
+This is a system for producing both VMS help libraries and printed documentation
+from a single file, which has LaTeX commands embedded within it. Although it is
+therefore fairly specific to VMS, the format of help library modules is simple,
+and the system could probably be translated fairly easily to take advantage of
+another format with a similar heirarchical structure.
+
+The system is not dissimilar to the GNU texinfo format.
+
+
+Brief Description
+-----------------
+Help library modules contain plain text, which is given a structure by lines
+which consist of a level number in column 1, followed by a heading. After
+they've been inserted into a help library, and help is requested on a particular
+topic, the help system will display all the level 1 text for that topic,
+followed by all the level 2 headings. After you select a level 2 heading, you
+will see all the level 2 text, and the level 3 headings, and so on. This is
+analogous to the successive levels of section, subsection, paragraph,... of a
+paper document.
+
+The help system will not display any lines which have an exclamation mark `!' in
+column 1, and we can take advantage of this to embed LaTeX commands in the text.
+
+For example, here is the start of the help file for PPhlp (all the lines should
+be taken to start in column 1):
+
+ !title{PPHLP: A documentation tool}
+ !pagetitle{Pphlp}
+ !author{Norman Gray}
+ !authorext{2279}
+ !userguide{Util5}
+ !maketitle
+ !begin{TeXtext}
+ ! \begin{abstract}
+ ! PPhlp is a tool for producing both
+ ! printed documentation using \LaTeX, and a help library usable
+ ! through the VMS `help' command, from a single file.
+ ! \end{abstract}
+ !\end{TeXtext}
+ !helpsection
+ 1 PPhlp
+ This utility takes an appropriately formatted `.hlp' file and
+ ...
+ !helpsection
+ 2 HLP_file_format
+ This is documented fully in the librarian manual, but
+ ...
+
+You can see most of the extensions to and changes from LaTeX in this section.
+The escape character in PPhlp files is `!', rather than `\'. `!maketitle' uses
+the fields filled in before it to produce a title page. `!helpsection', which
+is followed on the next line by a number and a text string, produces a section,
+subsection, paragraph (and so on) heading, depending on the value of the number:
+the title is composed of the rest of the line, with any underscores changed to
+spaces. Any text between quotes is set verbatim.
+
+As it stands, this file would be perfectly acceptable to the help librarian, and
+could be inserted into a help library with the command
+
+ $ libr/help <library-name> <module-name>
+
+In certain circumstances, the PPhlp file needs some preprocessing, and the
+package includes a program designed to do this.
+
+For more information, read the help file.
+
+
+Files
+-----
+The package consists of the following files:
+
+ PPHLP.README This file.
+ PPHLP.TEX The file which is actually LaTeXed, by ...
+ PPHLP.COM DCL com-file, which acts as a `front-end' to the
+ package.
+ PPHLP.HELP A help file. It can either be turned into an
+ .hlp file by processing it with helpproc
+ (below), or into a .dvi file by invoking the
+ com-file.
+ HELPPROC.PAS A preprocessor, which strips out some
+ constructions.
+ PPROC.CLD A .cld file for the preprocessor.
+ HLP.LSE An LSE file which defines the language `hlp',
+ and adds adjustments designed for the `folding
+ editor' capacities of LSE, by allowing elision
+ of the help text as you write it.
+ PHUTGUIDE.STY The documentstyle in which the help documents
+ PHUTGUIDE11.STY are set.
+
+[HELPPROC.PAS was written by Krish Singh, and PHUTGUIDE.STY is a modification of
+a manuals style written by the Open University's computer service]
+
+
+Setting it up
+-------------
+To use the system, edit the line
+
+ $ source_dir := phut:[util.local.pphlp]
+
+in pphlp.com, so that it refers to wherever you've put the files. Then define a
+command
+
+ $ pphlp :== @ <wherever-the-source-files-are>pphlp
+
+and put the two style files wherever it is that TeX expects to find them. To
+make the preprocessor, compile and link helpproc.pas, edit the `image' line in
+pproc.cld to point to the newly linked image, and add the command `pproc' to
+your command tables with
+
+ $ set command pproc
+
+To use hlp.lse, enter LSE, read this file into a buffer, and give the command
+`do'. You can make the resulting definitions permanent by giving the command
+`save environment' within LSE.
+
+Format the help file by giving the command
+
+ $ pphlp pphlp.help ! .help is the default file type
+
+This will produce a .dvi file which can be printed normally. Alternatively, you
+can give the command
+
+ $ pproc pphlp.help ! .help is the default, again
+
+which will produce an .hlp file which can be inserted into a help library.
+
+I hope it's useful - have fun.
+
+Norman
+
+===============================================================================
+Norman Gray N.O.Gray@open.ac.uk (Internet)
+Department of Physics
+Open University
+Milton Keynes, MK7 6AA +44 908 652279
+UK +44 908 653744 (fax)
+===============================================================================
diff --git a/macros/latex209/contrib/pphlp/pphlp.tex b/macros/latex209/contrib/pphlp/pphlp.tex
new file mode 100644
index 0000000000..3f99cb1c01
--- /dev/null
+++ b/macros/latex209/contrib/pphlp/pphlp.tex
@@ -0,0 +1,315 @@
+%%% ======================================================================
+%%% @TeX-file{
+%%% filename = "pphlp.tex",
+%%% version = "1.0",
+%%% date = "19 July 1992",
+%%% time = "14:12:45.12 ",
+%%% author = "Norman Gray",
+%%% address = "Department of Physics
+%%% Open University
+%%% Milton Keynes
+%%% MK7 6AA, UK",
+%%% e-mail = "N.O.Gray@open.ac.uk (Internet)",
+%%% telephone = "+44 908 652279",
+%%% FAX = "+44 908 653744",
+%%% archived = "Aston, SHSU",
+%%% keywords = "hlp-files, VMS, help",
+%%% abstract = "This file is part of the PPHLP package, which
+%%% allows both printed manuals and VMS help library
+%%% modules to be prepared from a single file.",
+%%% codetable = "ISO/Ascii",
+%%% checksum = "29376 315 1629 13208",
+%%% docstring = "This is the core of the PPhlp package, and is
+%%% driven by the com-file pphlp.com, which LaTeX's
+%%% this file after customising it through the
+%%% definitions in pphlpdefs.tex, which this file
+%%% \input's.
+%%%
+%%% The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility."
+%%% }
+%%% ======================================================================
+% + This \LaTeX\ file will set VMS |.hlp| files. \LaTeX\ commands are
+% `hidden' in the file by turning the VMS comment character `!' into an
+% escape character. Since it's an escape, you can't use `!' as an
+% exclamation point---if you want that character in your help text, use `!!'
+% instead.
+%
+% For convenience, the characters |$| and |@| have been made letters. The
+% character |_| has been made active, producing a |\tt| underscore in text,
+% or a subscript in maths mode (which must be surrounded by |\(..\)| since
+% the dollar has been taken away), and advantage is taken of this catcode to
+% |\let| it equal to |\space| when it appears in helpsection headings.
+%
+% The following control sequences and active characters are defined:
+% \begin{description}
+% \item[\verb-\helpsection-]
+% Put this command before each line which consists of a help level number
+% and heading, or before a qualifier line.
+% \item[\verb-\verbatimline-]
+% Put this command before a line which is to be set verbatim. It takes an
+% optional argument, which is the number of verbatim lines to be set.
+% \item[\verb-\settab-]
+% When making tables, it is sometimes useful to define a different
+% character, say `-', to be the alignment tab character.
+% \item[\verb-\activate-]
+% Make a character active, for example in the line
+% |!begin{itemize}\activate* \let*\item|, which would help make an
+% itemised list of starred items.
+% \item[\verb-\makeother-]
+% Give a character the catcode `other'. Takes an optional argument with
+% an alternative catcode.
+% \item[\lq]
+% In-line strings which are to be set verbatim should be placed between
+% `\dots' (and you should avoid using left quotes in other contexts).
+% \item[*]
+% Words or phrases to be emphasised should go between |*...*|.
+% \item[{\tt !<{\it \LaTeX{} text}|{\it hlp text}>}]
+% Put only the first alternate text in the \LaTeX{} file. If you use
+% this, you'll have to also use Krish's preprocessor ({\tt
+% run tools:helpproc}) to strip the first alternate from the .hlp file
+% before it can be put into a help library.
+% \item[\verb-\beginhlptext...\endhlptext-]
+% The text between these control sequences is not included in the \LaTeX
+% version of the documentation.
+% \item[\verb-{TeXtext}- environment]
+% Blocks of text which are to be omitted from the library should have
+% !~marks at the beginning of each line. They should additionally be
+% surrounded by the \verb-{TeXtext}- environment, in which !~marks are
+% ignored, to avoid spacing problems. Note that the environment should
+% be ended by |\end{TeXtext}|, rather than |!end{TeXtext}|. The control
+% sequence |\!| will produce an exclamation mark in this environment.
+% \end{description}
+% \-
+% * \def\commratio{0.5}
+
+
+\input pphlpdefs
+\ifx\pphlpstyleoptions\undefined
+ \documentstyle{phutguide}
+\else
+ % any extra styles should be added AFTER \pphlpstyleoptions
+ \expandafter\expandafter\expandafter
+ \documentstyle\expandafter[\pphlpstyleoptions]{phutguide}
+\fi
+
+% \percentnextline
+\def\dospecials{\do\\\do\{\do\}\do\&\do\#\do\^\do\%\do\~\do\!\do\*}
+
+\catcode`!=0 % ! in col. 1 is the .hlp comment character
+\chardef!!="21 % `!!' gives exclamation mark
+\catcode`\@=11
+\catcode`\$=11
+
+\def\Uncatcode{\@noligs \let\do\@makeother \dospecials}
+
+\def\activate#1{\catcode`#1=\active} % make argument character active
+\def\makeother{\@ifnextchar[{\@@makeother}{\@makeother}}
+\def\@@makeother[#1]#2{\catcode`#2=#1}
+\def\c@c#1{\message % debugging - print catcode
+ {catcode \string #1 is \ifcase\catcode`#1 escape\or begingroup\or
+ endgroup\or math\or align\or endline\or parameter\or superscript\or
+ subscript\or ignored\or space\or letter\or other\or active\or
+ comment\or invalid\fi}}
+
+% make underscore a subscript only in math mode
+\def\underscore{\ifmmode _ \else {\tt\char "5F}\fi}
+\activate\_ \let_\underscore
+
+\def\paragraph{\@startsection % Not all styles have these defined, so\dots
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{1ex plus .2ex }{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{5}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{1ex}{\(\Diamond\)\sl}}
+
+
+% + The macro |\helpsection| begins a group, and calls |\gethelpsectionparams|
+% to get the parameters from the next line. The latter sets the counter
+% |\helpsectiondepth| to be the first parameter, or increments and negates it,
+% if the first parameter is the character /, denoting a qualifier line. Then we
+% call |\dohelpsection|, which uses a |\ifcase| statement to set the section
+% heading.
+%
+% In the default case, level~1 headings are ignored, levels 2, 3 and~4 are set
+% as |\section|, |\subsection| and |\subsubsection|, and level 5 is simply
+% bulleted. This is because there will be only a single level~1 heading in most
+% files. If this is not the case, then the command |\multilevelone| should be
+% given, which sets level~1 headings as |\section|s.
+% \-
+
+\let\helpleveli\@gobble
+\let\helplevelii\section
+\let\helpleveliii\subsection
+\let\helpleveliv\subsubsection
+\let\helplevelv\subparagraph
+\def\multilevelone{% Don't ignore level one headings
+ \let\helpleveli\section
+ \let\helplevelii\subsection
+ \let\helpleveliii\subsubsection
+ \let\helpleveliv\paragraph
+ \let\helplevelv\subparagraph}
+
+\newcount\helpsectiondepth
+% We mustn't do the following within a group, or else things like
+% |@currentlabel| don't make it out.
+\def\helpsection{%
+ \let_\space % so |_|'s in section headings turn to space
+ \activate\^^M % so we can read the arguments --- undo these at the end
+ \gethelpsectionparams}
+
+{\catcode`\^^M=\active%
+\gdef\gethelpsectionparams^^M#1#2^^M{%
+ \if/#1 %
+ \ifnum\helpsectiondepth > 0 %
+ \global\helpsectiondepth=-\helpsectiondepth %
+ \global\advance\helpsectiondepth by -1 %
+ \fi %
+ \else %
+ \global\helpsectiondepth=#1 %
+ \fi %
+ \dohelpsection{#2}}%
+%
+\gdef\dohelpsection#1{%
+ \ifnum\helpsectiondepth < 0 %
+ \@tempcnta=-\helpsectiondepth \def\arg{\tt /#1}%
+ \else %
+ \@tempcnta\helpsectiondepth \def\arg{#1}%
+ \fi %
+ \ifcase\@tempcnta \or %
+ \helpleveli {\arg} %
+ \xdef\toptopic{\arg} % Top-level help topic for use in |\advbox|
+ \or %
+ \helplevelii {\arg} \or %
+ \helpleveliii{\arg} \or %
+ \helpleveliv {\arg} \or %
+ \helplevelv {\arg} %
+ \else %
+ \errhelp{See Norman if you need more}%
+ \errmessage{There is currently a maximum of five levels of help}%
+ \fi %
+ \let_\underscore
+ \catcode`\^^M=5 % ... again
+ % Undo the redefinition of |_| here, rather than at the end of
+ % |\gethelpsectionparams| so that the active underscore means
+ % |\space| in the argument to the |\helplevel| commands
+ }}
+
+% + We want to be able to select alternate texts depending on whether
+% we're producing a \LaTeX\ file or a help library.
+%
+% For occasional words, use the construction \verb-!<LaTeX text|hlp text>-,
+% in which case the text should be run through Krish's preprocessor before
+% being put into the help library. For this latter reason, it should always be
+% |!<| rather than |\<|, although they are equivalent to \LaTeX.
+%
+% To miss out larger chunks of help library text is easy---we just
+% surround the text with |\iffalse...\fi|, suitably disguised. It's
+% unfortunate that this doesn't look exactly like a \LaTeX\
+% environment, but life's like that\dots.
+%
+% Putting text in the \LaTeX\ document, whilst keeping it from the
+% library seems easy---you just prefix the lines with exclamation
+% marks---but there's a subtlety in that we must then have at least
+% one blank space after the `!', which is then interpreted as a
+% control space, and lines blank apart from the `!' are not
+% interpreted as new paragraphs. Solve both these latter problems by
+% making `! ignored within the |{TeXtext}| environment. Note that
+% this means that the environment {\em must\/} be ended with
+% |\end{TeXtext}|, rather than |!end|.
+% \-
+
+\let\beginhlptext\iffalse
+\let\endhlptext\fi
+
+\def\TeXtext{\catcode`\!=9}
+\let\endTeXtext\relax
+
+\def\<#1|#2>{#1}
+
+% + A couple of macros for verbatim text. In-line strings should go between
+% |`...'|, and complete lines of verbatim material should be preceded by a
+% |\verbatimline| command. The |!begin{verbatim}| environment may be used, but
+% it must be ended by the string |!end{verbatim}|. This means that the `
+% character should be made active---do this inside a group so we can make other
+% catcode changes later in this file.
+%
+% Finally, make `!' an escape character, rather than ignored, in the \TeX text
+% environment, so that `!!' will give an exclamation mark there.
+% \-
+\activate' \let'\rq
+{\obeyspaces\global\let =\ } % make active space equal to |\ |
+%\def\hyspace{\discretionary{\char32\relax}{\char32\relax}{\char32\relax}} % make spaces hyphen-like
+%{\activate` \gdef`{\begingroup \catcode"20=12 \Uncatcode \let'\endgroup \tt}}
+{\activate`
+\obeyspaces\activate\.\activate\_%
+% allow spaces, dots and underscores to break verbatim text
+\gdef`{\begingroup\Uncatcode\let'\endgroup%
+\activate\_\def_{\discretionary{\char"5F\relax}{}{\char"5F\relax}}%
+\activate\.\def.{\discretionary{\char"2E\relax}{}{\char"2E\relax}}%
+\obeyspaces\def {\discretionary{\char32\relax}{\char32\relax}{\char32\relax}}%
+\tt}}
+
+\newcount\@verbatimlinecount
+{\activate\^^M
+\gdef\verbatimline{\ifvmode \noindent \else \par \fi % If previous line is
+ % blank, |\noindent| means we enter horizontal mode with
+ % previous parskip. Otherwise, |\par| forces us into
+ % vertical mode, and we enter horizontal mode later, with
+ % parskip zero.
+ \begingroup \parskip=0pt \activate\^^M%
+ \@ifnextchar[{\@verbatimline}{\@verbatimline[1]}}%
+\gdef\@verbatimline[#1]^^M{\@verbatimlinecount=#1 \obeyspaces\Uncatcode %
+ \def\@tempa{TeXtext}\ifx\@tempa\@currenvir\catcode"21=0\fi % re-escape ! in \TeX{}text
+ \tt\do@verbatimline}%
+\gdef\do@verbatimline#1^^M{#1\par\noindent % following text on new line
+ % (new paragraph with parskip zero)
+ \advance\@verbatimlinecount by -1 %
+ \ifnum\@verbatimlinecount=0 %
+ \def\next{\endgroup}%
+ \else %
+ \def\next{\do@verbatimline}%
+ \fi\next}}
+
+\begingroup \catcode `|=0 \catcode `[= 1 % This is nicked from
+ % |latex.tex|---make |\begin{verbatim}| end with
+ % |!end{verbatim}|
+\catcode`]=2 \catcode `\{=12 \catcode `\}=12
+\catcode`\!=12 |gdef|@xverbatim#1!end{verbatim}[#1|end[verbatim]]
+|gdef|@sxverbatim#1!end{verbatim*}[#1|end[verbatim*]]
+|endgroup
+
+% likewise---make verbatim environment within \TeX text have ! as escape
+\def\verbatim{\@verbatim \frenchspacing\@vobeyspaces
+ \ifx\@tempa\@currenvir \catcode"21=0\fi \@xverbatim}
+\@namedef{verbatim*}{\@verbatim \ifx\@tempa\@currenvir \catcode"21=0\fi
+ \@sxverbatim}
+
+% bits and bobs
+
+\def\settab#1{\catcode`#1=4} % set the tab character for setting tables
+
+\chardef\star`* % |*...*| emphasises things
+\activate* \def\emphasise#1*{{\em #1\/}}
+\def*{\ifmmode\star\else\emphasise\fi}
+
+\escapechar=`\! % so we're free to recatcode backslash
+
+\activate` % make it active again
+
+\parskip=\medskipamount
+\parindent=0pt
+
+\let\helpproc\@gobble % instruction to Krish's preprocessor
+
+\@ifundefined{pphlppreamble}{}{\pphlppreamble}
+
+% %%%%%%%%%%%%%%% Now read in the file %%%%%%%%%%%%%%%%%%%
+!begin{document}
+
+!input{!pphlpname}
+!advbox
+!end{document}
diff --git a/macros/latex209/contrib/pphlp/pproc.cld b/macros/latex209/contrib/pphlp/pproc.cld
new file mode 100644
index 0000000000..4ddc06737f
--- /dev/null
+++ b/macros/latex209/contrib/pphlp/pproc.cld
@@ -0,0 +1,4 @@
+define verb pproc
+image tools:helpproc
+ parameter p1,label=infile,value(required)
+ parameter p2,label=outfile,value(default=".hlp")
diff --git a/macros/latex209/contrib/prelim/prelim.pdf b/macros/latex209/contrib/prelim/prelim.pdf
new file mode 100644
index 0000000000..ef34e3ada0
--- /dev/null
+++ b/macros/latex209/contrib/prelim/prelim.pdf
Binary files differ
diff --git a/macros/latex209/contrib/prelim/prelim.sty b/macros/latex209/contrib/prelim/prelim.sty
new file mode 100644
index 0000000000..29e68878cb
--- /dev/null
+++ b/macros/latex209/contrib/prelim/prelim.sty
@@ -0,0 +1,105 @@
+% Documentstyle-option ``prelim''(-inary)
+%
+% FUNCTION:
+% Marks drafts as drafts by adding a line stating it's a draft on every page.
+% The ``draftmark'' is preset to contain the word ``ENTWURF'', the day
+% and the time of the formatting.
+%
+% USAGE:
+% Simply add the option ``prelim'' in your \documentstyle-command.
+%
+% INTERFACE:
+% You can change the appearance of the draftmark by redefining two
+% makros. If you remove the style-option for the final printout, the
+% redefinitions are harmless.
+%
+% \drafttext: Yields the text that signals that the document is in
+% draft-status. Predefined to ``ENTWURF''. Redefine it
+% if you like other words or languages.
+% \draftmark: Yields the line that signals the draft-status. Redefine it
+% if you want to change the appearance of the line, e.g. for
+% different orientations or fonts.
+%
+% ADDITIONAL:
+% We define the makro \timeofday that expands to hh:mm which is
+% \time in readable form. Remember that it's only accessible when the
+% prelim-option is activated. It's main purpose is to be used in the
+% \draftmark-definition.
+%
+% Copyright (C) 1990 by
+% Robert Tolksdorf
+% K\"ortestr. 30
+% D-1000 Berlin 61
+% West-Germany
+%
+% 27.05.90 Original
+% 29.05.90 Added a blank after \today in \draftmark
+% 31.05.90 Changed \timeofday to insert an addition `0' (eg. in 2:07)
+% 31.07.90 Rearranged the message output
+%
+% See end of file for licence
+%
+\newcount\@hourmin
+\def\timeofday{\@hourmin=\time\divide\@hourmin by 60\relax\the\@hourmin:%
+ \multiply\@hourmin by -60 \advance\@hourmin by\time\ifnum\@hourmin<10{0}\fi%
+ \the\@hourmin}
+%
+% \drafttext defines what text should appear
+%
+\def\drafttext{ENTWURF (\today\ -- \timeofday)}
+%
+% \draftmark defines how the draft-marking line should appear
+%
+\def\draftmark{\rm\hfil\drafttext\hfil}
+%
+% We redefine the original LaTeX-output-grandmaster and introduce an
+% additional line saying that the document is in draft-status.
+%
+\def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}
+%
+% Here our modification is: simply add an additional line
+% to the \vbox that contains the \draftmark. Simple, but it works!
+%
+ \hbox to\textwidth{\draftmark}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+%
+% Type out a message (it contains a version-number in parenthesis).
+%
+\typeout{*** This document is in draft-status *** (1-310790RT)}
+
+\endinput
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 1, or (at your option)
+% any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+
+
diff --git a/macros/latex209/contrib/prelim/prelim.tex b/macros/latex209/contrib/prelim/prelim.tex
new file mode 100644
index 0000000000..e709f4570d
--- /dev/null
+++ b/macros/latex209/contrib/prelim/prelim.tex
@@ -0,0 +1,173 @@
+\documentstyle[german,dina4]{article}
+\author{Robert Tolksdorf\\K"ortestr.~30\\D-1000 Berlin 61}
+\title{Kennzeichnung von Vorversionen eines Dokuments}
+\def\prelim{{\tt prelim}}
+\def\Prelim{{\tt prelim}\ }
+\begin{document}
+\maketitle
+\begin{abstract}
+Durch eine kleine Modifikation der Output-Routine von \LaTeX\ werden
+Vorver"-sion"-en eines Dokuments durch eine zus"atzliche Zeile am
+Seitenende als solche markiert. Die Modifikation wird als Style-Option
+implementiert.
+\end{abstract}
+
+\section{Das Problem}
+
+Wer Dokumente zur Ver"offentlichung erstellt, schreibt normalerweise
+nicht sofort die endg"ultige Version. Vor einer Herausgabe stehen
+diverse Korrekturdurchl"aufe; vor einer Ver"offentlichung eine Edition
+und Korrektur durch den Herausgeber. Die dabei entstehenden Dokumente
+sind vorl"aufige Versionen, Korrekturexemplare oder halbfertige
+Notizensammlungen.
+
+Druckt man sich diese Dokumente aus, besteht hinterher keine
+M"oglichkeit, auf einen Blick festzustellen, aus welcher Phase der
+Dokumentenerstellung der Ausdruck stammt. W"un"-schens"-wert w"are eine
+einfache Markierung, m"oglichst mit Ausdruckdatum.
+
+Eine L"osung daf"ur w"are mit \LaTeX, vorl"aufige Versionen
+beispielsweise zweispaltig zu setzen und erst in der endg"ultigen
+Version auf Spalten zu verzichten. Dieses Vorgehen hat allerdings den
+Nachteil, da"s die auch bei \LaTeX\ n"otige visuelle Kontrolle des
+Layouts in den Vorversionen nicht m"oglich ist.
+
+Wir implementieren daher eine Dokumentenstil-Option, bei der in den
+Vorversionen eine zus"atzliche Zeile mit der Kennzeichnung "`ENTWURF"'
+und dem Formatierungsdatum erscheint. Da die Implementierung an der
+Output-Routine von \LaTeX\ ansetzt, beeinflu"st sie nicht das Layout.
+Da gleichzeitig ein vern"unftiges Layout einen unteren Rand l"a"st,
+wird die Markierung im Ausdruck bei gleichbleibender
+Druckerseitenl"ange ausreichend Platz finden.
+
+\section{Die \prelim-Option}
+
+Die hier vorgestellte \prelim-Option sorgt f"ur die Kennzeichnung des
+Status eines Dokuments als "`preliminary"' -- also vorl"aufig. Dazu
+wird sie einfach in der \verb!\documentstyle!-Deklaration als Option
+aufgef"uhrt:
+
+{\small\begin{verbatim}
+\documentstyle[...,prelim]{...}
+\end{verbatim}}
+
+\noindent \Prelim kann an jeder Position in der Liste der Optionen
+erscheinen. Jeder Seite wird nun eine Zeile der Art "`ENTWURF (27. Mai
+1990 -- 12:34)"' hinzugef"ugt, wobei Datum und Uhrzeit dem
+Formatierungszeitpunkt entsprechen. Die Seite wird dabei etwas
+h"oher, ohne den Satzspiegel w"ahrend der Formatierung zu "andern. F"ur
+die Endversion entfernt man einfach die Option in der
+\verb!\documentstyle!-Deklaration.
+
+Text und Aussehen der Markierungszeile sind durch zwei Makros
+ver"anderbar. Dabei definiert \verb!\drafttext! den Text, der
+den Status des Dokuments bezeichnet -- also als Voreinstellung
+"`ENTWURF"' mit Datum und Uhrzeit oder auch "`Draft"' oder "`To appear
+in `Die \TeX nische Ko"-m"o"-die'"' oder "`Vorversion"'. Eine "Anderung
+ist beispielsweise durch \verb!\def\drafttext{Draft}! m"oglich. Es
+sollte hier nur Text expandieren.
+
+Das Aussehen der Zeile ist in \verb!\draftmark! definiert. Hier findet
+das Layout der Zeile statt, wobei mindestens ein variabler horizontaler
+Leerraum vorhanden sein sollte. Die Voreinstellung lautet
+\verb!\rm\hfil\drafttext\hfil!, was die Zeile zentriert und die normale
+Modern-Schrift verwendet. Man k"onnte ihr Erscheinungsbild auch mit
+einer "Anderung nach \verb!\def\draftmark{\sl\drafttext\hfil}!
+modifizieren; dann w"urde die Zeile in {\sl slanted} und linksb"undig
+erzeugt. Zum Einf"ugen des Datums der Formatierung kann das Makro
+\verb!\timeofday! verwendet werden.
+
+In der endg"ultigen Version eines Dokuments brauchen eventuell
+vorhandene Neudefinitionen von \verb!\drafttext! und \verb!\draftmark!
+nicht entfernt zu werden, da sie ohne die {\tt prelim}-Option nicht
+weiter st"oren. Die Einf"uhrung zweier Makros dient der Trennung
+zwischen Inhalt und Aussehen.
+
+Eigentlich sollte die Option {\tt draft} hei"sen. Da aber in \LaTeX\
+eine Style-Option \verb!\ds@draft! vordefiniert ist -- bei ihr werden
+"ubervolle K"asten durch einen \verb!\vrule! markiert -- schied der
+Name aus zugunsten von \Prelim f"ur "`preliminary"'.
+
+\section{Die Implementierung}
+
+Zur Implementierung war ein Blick in {\tt LATEX.TEX} n"otig. Die
+zentrale Routine zum Ausgeben einer Seite ist \verb!\@outputpage!. In
+ihr wird an \verb!\shipout! eine {\sf vbox} "ubergeben, in der der
+Seiteninhalt aus mehreren {\sf hbox} zusammengesetzt wird. F"ur unsere
+Zwecke mu"s nur eine Zeile hinzugef"ugt werden, in der die
+Kennzeichnung als {\sf hbox} hinzu kommt.
+
+Die Stil-Option ersetzt die \LaTeX-Definition von \verb!\@outputpage!
+einfach durch die so modifizierte. Tats"achlich wurde der Code direkt
+aus {\tt LATEX.TEX} herauskopiert. Die Idee zu \verb!\timeofday! stammt
+aus {\tt FONTBL.TEX} von Pierre A.\ MacKay.
+
+\noindent
+Es folgt der Code von {\tt PRELIM.STY}:
+
+{\small\begin{verbatim}
+% Documentstyle-option ``prelim''(-inary)
+%
+% Copyright (C) 1990 by
+% Robert Tolksdorf
+% K\"ortestr. 30
+% D-1000 Berlin 61
+% West-Germany
+%
+% 27.05.90 Original
+% 29.05.90 Added a blank after \today in \draftmark
+% 31.05.90 Changed \timeofday to insert an addition `0' (eg. in 2:07)
+% 31.07.90 Rearranged the message output
+%
+\newcount\@hourmin
+\def\timeofday{\@hourmin=\time\divide\@hourmin by 60\relax\the\@hourmin:%
+ \multiply\@hourmin by -60 \advance\@hourmin by\time\ifnum\@hourmin<10{0}\fi%
+ \the\@hourmin}
+%
+% \drafttext defines what text should appear
+%
+\def\drafttext{ENTWURF (\today\ -- \timeofday)}
+%
+% \draftmark defines how the draft-marking line should appear
+%
+\def\draftmark{\rm\hfil\drafttext\hfil}
+%
+% We redefine the original LaTeX-output-grandmaster and introduce an
+% additional line saying that the document is in draft-status.
+%
+\def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}
+%
+% Here our modification is: simply add an additional line
+% to the \vbox that contains the \draftmark. Simple, but it works!
+%
+ \hbox to\textwidth{\draftmark}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+%
+% Type out a message (it contains a version-number in parenthesis).
+%
+\typeout{*** This document is in draft-status *** (1-310790RT)}
+
+\endinput
+\end{verbatim}}
+
+\end{document}
+
+
diff --git a/macros/latex209/contrib/progkeys/README b/macros/latex209/contrib/progkeys/README
new file mode 100644
index 0000000000..03d16a35b5
--- /dev/null
+++ b/macros/latex209/contrib/progkeys/README
@@ -0,0 +1,181 @@
+This directory contains files that allow to generate two style
+files: 'programs.sty' and 'keywords.sty'.
+
+The 'demo' subdirectory contains an example of what can be done with
+these two styles ('demo.tex' can be compiled either with LaTeX or with
+LaTeX2.09 -- for the LaTeX version, see the corresponding directory
+under macros/latex/contrib/supported).
+
+The two files in this archive may be used independently or in
+conjunction, according to your wish.
+The file 'programs.sty' is intended to allow a parameterized way of
+typesetting programs with TeX/LaTeX commands inside.
+The file 'keywords.sty' allows use and define sets of keywords that
+will be typeset with different fonts, according to the wish of the
+user.
+The purpose of these two files, when used in conjunction, is to allow
+a user to write only one program and to print it differently,
+according to the document where it must be put (ex: keywords in
+english/french, keywords underlined, boldfaced, programs
+indented, no indented, numbered, unnumbered, etc). Of course, the
+algorithm will be written only once.
+
+Below I give a short description of the files and the way to generate
+them.
+
+
+------------
+programs.sty
+------------
+
+I have written a style file for typesetting programs.
+Its particularities are:
+
+- TABS are replaced by simple SPACES as in the 'astyped.sty' style
+- and you can use emphasized fonts, math formulae, etc.
+- programs may be numbered or unnumbered
+- line numbers may appear in the left side or right side margin,
+ or in both sides, or inside the text body (on the left of the text)
+- line numbers may be refered to with \label / \ref
+- the first line of a numbered program is by default 1, but it is
+ possible to change this first value in two manners:
+ o by specifying a particular first number
+ o by indicating that the next program will start at the line
+ number that follows the last line of the last previous
+ program typed
+- programs may be globally indented, but a particular occurrence may
+ have a different indentation
+
+By default, 7 environments are provided, according to the font size:
+
+ program normal size
+ programs small size
+ programf footnote size
+ programsc scriptsize
+ programt tiny size
+ programl large size
+ programL Large size
+
+For each environment, there exist to file inclusion commands that work
+in a manner similar to the \verbatimfile and \verbatimlisting commands
+of the 'verbatimfiles.sty' file:
+
+ \fprogram? inclusion of unnumbered program
+ \lprogram? inclusion of numbered program
+
+where '?' stands for nothing, or for one string in "s", "f", "sc",
+"t", "l" and "L", according to the font size desired.
+
+It is possible to define new environments. For instance
+
+ \NewProgram{FOO}{LARGE}
+
+will define the environment FOO with font size set to LARGE, and to
+file inclusion commands: \fFOO and \lFOO.
+
+This style file is a '.doc' file called 'programs.doc'.
+If you have the 'doc.sty' style by F. Mittelbach and the
+'docstrip.tex' utility by F. Mittelbach et al., then you can extract
+the style file and type the documentation by running the following
+commands:
+
+ latex programs.ins
+ latex programs.drv
+ latex programs.drv
+ latex programs.drv
+ makeindex -s programs.ist programs.idx
+ latex programs.drv
+
+
+
+------------
+keywords.sty
+------------
+As a companion to the style programs.sty, here follows a style called
+keywords.sty whose main purpose is to provide a parameterized way to
+typeset keywords. This style may be used in conjunction with the
+programs.sty file, but this is not necessary.
+
+What you can do is, for instance, to type a program where keywords
+will appear boldfaced. It suffices to issue the \ProgKeywords command
+(global scope), and then to type the text, for instance:
+
+ \BEGIN
+ \FOR I := 1 \TO 10 \DO
+ ....
+ \ENDDO
+ \END
+
+In this example, the keywords are commands defined in the second part
+of the keywords.sty file. If the environment is such that spaces are
+obeyed (like in the verbatim environment or by using the programs.sty
+file), then keywords can be typed as is; otherwise (i.e. in normal
+text) they must be typed followed by a "\" character
+(e.g.: \BEGIN\ ...).
+
+Assume now, that you want that the program above is typed with
+keywords written with an emphazised font and underlined, and that
+words appear in French instead of English.
+Then take the same program, but just change the "\ProgKeywords"
+command that precedes it to "\UFAlgoKeywords" (for: Underlined French
+AlgoKeywords).
+
+I have sorted keywords in lexicographic order.
+If you need to change or add a definition go anywhere among the
+keywords and type (e.g. definition of the keyword FOO):
+
+#1{\FOO}{this is an example}[bla bla]%
+
+Then if you chose commands where the 'F' does not appear in the
+beginning of the name, any occurrence of "\FOO" is replaced by the
+sentence "this is an example"; otherwise, the sentence "bla bla" will
+be used.
+
+If your wish is that the same expansion is performed for all the
+commands, the omit tht fourth parameter:
+
+#1{\FOO}{this is an example}
+
+
+The commands provided are:
+
+ -------------------------------------------------------------------------
+ English keywords French keywords
+ -------------------------------------------------------------------------
+ \tt BOLDFACE DISPLAY \ProgKeywords \FProgKeywords
+ \tt NORMAL DISPLAY \ttKeywords \FttKeywords
+ \em DISPLAY \AlgoKeywords \FAlgoKeywords
+ underlined \em DISPLAY \UAlgoKeywords \UFAlgoKeywords
+ normal (\rm) DISPLAY \NormalKeywords \FNormalKeywords
+ -------------------------------------------------------------------------
+
+As I am French, I have used English and French languages; however you
+can use any couple of languages you want. I recall that if parameter 4
+in keyword definition is omitted, then only the first language is
+used.
+
+The file terminates by a command that selects the default mode (in the
+current case this is \UFAlgoKeywords).
+
+This style file is a '.doc' file called 'keywords.doc'.
+If you have the 'doc.sty' style by F. Mittelbach and the
+'docstrip.tex' utility by F. Mittelbach et al., then you can extract
+the style file and type the documentation by running the following
+commands:
+
+ latex keywords.ins
+ latex keywords.drv
+ latex keywords.drv
+ latex keywords.drv
+ makeindex -s keywords.ist keywords.idx
+ latex keywords.drv
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Miguel ALABAU
+LaBRI, Universite BORDEAUX I
+351, cours de la Liberation 33405 TALENCE Cedex (FRANCE)
+e-mail: Miguel.Alabau@labri.u-bordeaux.fr
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/macros/latex209/contrib/progkeys/demo b/macros/latex209/contrib/progkeys/demo
new file mode 120000
index 0000000000..43690c609e
--- /dev/null
+++ b/macros/latex209/contrib/progkeys/demo
@@ -0,0 +1 @@
+../../../latex/contrib/progkeys/demo \ No newline at end of file
diff --git a/macros/latex209/contrib/progkeys/keywords.doc b/macros/latex209/contrib/progkeys/keywords.doc
new file mode 100644
index 0000000000..f045bdf8d9
--- /dev/null
+++ b/macros/latex209/contrib/progkeys/keywords.doc
@@ -0,0 +1,1010 @@
+% \iffalse meta-comment
+%
+% 'keywords.doc'
+%
+% Copyright (C) 1993,1994,1995 by Miguel Alabau. All rights reserved.
+%
+% COMMANDS FOR TYPESETTING KEYWORDS
+%
+% **WARNING** If the file 'keywords.ins' does not accompany the file
+% 'keywords.doc', then you must strip this last file by hand.
+% (1) Run 'latex docstrip' on 'keywords.doc' and indicate 'drv' as
+% suffix file and 'driver' as selector for extraction.
+% (2) Run 'latex docstrip' on 'keywords.doc' and indicate 'sty' as
+% suffix file and 'style' as selector for extraction.
+% (3) Run 'latex docstrip' on 'keywords.doc' and indicate 'ist' as
+% suffix file and 'index' as selector for extraction.
+% Then, if you want to produce the documentation, proceed as follows:
+% latex keywords.drv; latex keywords.drv; latex keywords.drv
+% makeindex -s keywords.ist keywords.idx
+% latex keywords.drv
+%
+% \fi
+%
+%
+% \def\fileversion{v1.0}
+% \def\filedate{95/04/01}
+% \def\docdate {96/01/31}
+%
+%
+% ^^A -*-LaTeX-*-
+%
+%\catcode`\<=12
+
+% \CheckSum{564}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+%
+% \DoNotIndex{\@,\@@par,\@beginparpenalty,\@empty}
+% \DoNotIndex{\@flushglue,\@gobble,\@input}
+% \DoNotIndex{\@makefnmark,\@makeother,\@maketitle}
+% \DoNotIndex{\@namedef,\@ne,\@spaces,\@tempa}
+% \DoNotIndex{\@tempb,\@tempswafalse,\@tempswatrue}
+% \DoNotIndex{\@thanks,\@thefnmark,\@topnum}
+% \DoNotIndex{\@@,\@elt,\@forloop,\@fortmp,\@gtempa,\@totalleftmargin}
+% \DoNotIndex{\",\/,\@ifundefined,\@nil,\@verbatim,\@vobeyspaces}
+% \DoNotIndex{\|,\~,\ ,\active,\advance,\aftergroup,\begingroup,\bgroup}
+% \DoNotIndex{\cal,\csname,\def,\documentstyle,\dospecials,\edef}
+% \DoNotIndex{\egroup}
+% \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\endtrivlist}
+% \DoNotIndex{\expandafter,\fi,\fnsymbol,\futurelet,\gdef,\global}
+% \DoNotIndex{\hbox,\hss,\if,\if@inlabel,\if@tempswa,\if@twocolumn}
+% \DoNotIndex{\ifcase}
+% \DoNotIndex{\ifcat,\iffalse,\ifx,\ignorespaces,\index,\input,\item}
+% \DoNotIndex{\jobname,\kern,\leavevmode,\leftskip,\let,\llap,\lower}
+% \DoNotIndex{\m@ne,\next,\newpage,\nobreak,\noexpand,\nonfrenchspacing}
+% \DoNotIndex{\obeylines,\or,\protect,\raggedleft,\rightskip,\rm,\sc}
+% \DoNotIndex{\setbox,\setcounter,\small,\space,\string,\strut}
+% \DoNotIndex{\strutbox}
+% \DoNotIndex{\thefootnote,\thispagestyle,\topmargin,\trivlist,\tt}
+% \DoNotIndex{\twocolumn,\typeout,\vss,\vtop,\xdef,\z@}
+% \DoNotIndex{\,,\@bsphack,\@esphack,\@noligs,\@vobeyspaces,\@xverbatim}
+% \DoNotIndex{\`,\catcode,\end,\escapechar,\frenchspacing,\glossary}
+% \DoNotIndex{\hangindent,\hfil,\hfill,\hskip,\hspace,\ht,\it,\langle}
+% \DoNotIndex{\leaders,\long,\makelabel,\marginpar,\markboth,\mathcode}
+% \DoNotIndex{\mathsurround,\mbox,\newcount,\newdimen,\newskip}
+% \DoNotIndex{\nopagebreak}
+% \DoNotIndex{\parfillskip,\parindent,\parskip,\penalty,\raise,\rangle}
+% \DoNotIndex{\section,\setlength,\TeX,\topsep,\underline,\unskip,\verb}
+% \DoNotIndex{\vskip,\vspace,\widetilde,\\,\%,\@date,\@defpar}
+% \DoNotIndex{\[,\{,\},\]}
+% \DoNotIndex{\count@,\ifnum,\loop,\today,\uppercase,\uccode}
+% \DoNotIndex{\baselineskip,\begin,\tw@}
+% \DoNotIndex{\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,\n,\o,\p,\q}
+% \DoNotIndex{\r,\s,\t,\u,\v,\w,\x,\y,\z,\A,\B,\C,\D,\E,\F,\G,\H}
+% \DoNotIndex{\I,\J,\K,\L,\M,\N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z}
+% \DoNotIndex{\1,\2,\3,\4,\5,\6,\7,\8,\9,\0}
+% \DoNotIndex{\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_}
+% \DoNotIndex{\discretionary,\immediate,\makeatletter,\makeatother}
+% \DoNotIndex{\meaning,\newenvironment,\par,\relax,\renewenvironment}
+% \DoNotIndex{\repeat,\scriptsize,\selectfont,\the,\undefined}
+% \DoNotIndex{\arabic,\do,\makeindex,\null,\number,\show,\write,\@ehc}
+% \DoNotIndex{\@author,\@ehc,\@ifstar,\@sanitize,\@title,\everypar}
+% \DoNotIndex{\if@minipage,\if@restonecol,\ifeof,\ifmmode}
+% \DoNotIndex{\lccode,\newtoks,\onecolumn,\openin,\p@,\SelfDocumenting}
+% \DoNotIndex{\settowidth,\@resetonecoltrue,\@resetonecolfalse,\bf}
+% \DoNotIndex{\clearpage,\closein,\lowercase,\@inlabelfalse}
+% \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault}
+% \DoNotIndex{\bfdefault}
+%
+% \DoNotIndex{\addtocounter,\baselinestretch,\em,\noindent}
+% \DoNotIndex{\linewidth,\columnwidth,\newcounter,\newif,\newlength}
+% \DoNotIndex{\normalsize,\refstepcounter,\rlap,\rule}
+% \DoNotIndex{\@@tempa,\@@tempb,\@ifnextchar,\@nameuse}
+%
+% \title{The ``{\sf{}keywords.sty}'' style file\thanks{%
+% This file has version number \fileversion{} dated \filedate{}.
+% The documentation was last revised on \docdate{}.}}
+%
+% \author{Miguel Alabau\\
+% {\small{}LaBRI, Universit\'e Bordeaux~I (France)}\\
+% {\small{\em{}e-mail\/}: {\tt{}Miguel.Alabau@labri.u-bordeaux.fr}}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This style file contains a set of definitions that allow keywords
+% to be defined and printed in several convenient ways.
+% For each keyword two definitions may be provided. This is to
+% allow the use of keywords in two contexts (for instance
+% English/French translation of the keywords).
+% At the same time, keyword can be printed in roman, teletype,
+% boldfaced or underlined.
+% The user can define other styles for printing keywords.
+% A set of keywords is provided by default. Of course a user can
+% define new keywords or redefine existing ones without modifying
+% the style file.
+% \end{abstract}%
+%
+% \newif\ifmulticols
+% \makeatletter
+% \ifhave@multicol\multicolstrue\else\multicolsfalse\fi
+% \makeatother
+%
+% \begin{footnotesize}
+% \ifmulticols \begin{multicols}{2} \fi
+% \tableofcontents
+% \ifmulticols \end{multicols} \fi
+% \end{footnotesize}
+%
+%
+% \ifmulticols
+% \begin{multicols}{2}[\section{Introduction}]
+% \else \section{Introduction} \fi
+%
+% When typing programs or algorithms, it often happens for a same
+% text to appear as an algoritm (pseudo-code) or as a program. In such
+% cases different fonts are used. For instance, algorithms may appear
+% with keywords italicised or underlined, while the same keywords
+% appear boldfaced in the program text.
+% Moreover algorithms are often typed with keywords belonging to the
+% native language of the writer while program keywords appear usually
+% to be english ones.
+%
+% The file {\em{}keywords.sty\/} provides simple solutions to both of
+% these problems by giving the user capability to define each keyword
+% in two simultaneaous different manners and by providing different
+% printing styles.
+%
+% Keywords are commands to be issued in text. Hence this style file is
+% origimally intended to be used in conjunction with the features
+% provided by the {\em{}programs.sty\/} style file~\cite{alabau95-d}.
+% However, it can be used independently.
+%
+% \ifnoprogsfile \relax\else
+%
+% For instance, let be the following piece of program:
+%
+% \begin{verbatim}
+% \BEGIN
+% statements
+% \END
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% \noindent%
+% where \verb+\BEGIN+ and \verb+\END+ are two predefined commands in
+% this style file.
+% If we issue the command \verb+\ProgKeywords+, then we get:
+%
+% \ProgKeywords
+% \begin{programf}*
+% \BEGIN
+% statements
+% \END
+% \end{programf}
+%
+% \vspace{-\baselineskip}
+% \noindent%
+% If we prefer to use the second language, we can issue the
+% \verb+\FProgKeywords+:
+%
+% \FProgKeywords
+% \begin{programf}*
+% \BEGIN
+% statements
+% \END
+% \end{programf}
+%
+% \vspace{-\baselineskip}
+% \noindent%
+% We can also use other typesetting rules, like underlined emphasized
+% fonts (\verb+UAlgoKeywords+):
+%
+% \UAlgoKeywords
+% \begin{programf}*
+% \BEGIN
+% statements
+% \END
+% \end{programf}
+%
+% \vspace{-\baselineskip}
+% \noindent%
+% It is also possible to define new keywords or to redefine existing
+% ones, by issuing a command like:
+%
+% \begin{verbatim}
+% \NewKeyword{\BEGIN}{this is the beginning}
+% \NewKeyword{\END}{this is the end}
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% \noindent%
+% which leads to the following piece of code (default typesetting used
+% is the last one specified, i.e. \verb+UAlgoKeywords+):
+%
+% \NewKeyword{\BEGIN}{this is the beginning}
+% \NewKeyword{\END}{this is the end}
+% \begin{programf}*
+% \BEGIN
+% statements
+% \END
+% \end{programf}
+%
+% \fi
+%
+% \ifmulticols\end{multicols}\fi
+%
+% ^^A **********************************************
+% ^^A ** USERS's MANUAL **
+% ^^A **********************************************
+%
+% \section{User's Manual}
+%
+% A set of default keywords is provided in this file (see
+% section~\ref{default-keywords}). For each keyword, two definitions
+% are provided: the first one in english, and the second one in french
+% (because I am French).
+% The switch between the two languages is performed by global commands
+% wich serve also to define the font used for printing.
+%
+% \subsection{Selecting a printing style}
+% \label{user:selecting-printing-styles}
+%
+% \DescribeMacro{\ProgKeywords}
+% \DescribeMacro{\FProgKeywords}
+% \DescribeMacro{\ttKeywords}
+% \DescribeMacro{\FttKeywords}
+% \DescribeMacro{\AlgoKeywords}
+% \DescribeMacro{\FAlgoKeywords}
+% \DescribeMacro{\NormalKeywords}
+% \DescribeMacro{\FNormalKeywords}
+%
+% The following printing styles are provided:
+%
+% \begin{center}
+% \begin{tabular}{lll}
+% \hline
+% \multicolumn{1}{c}{style}
+% & \multicolumn{1}{c}{definition~1}
+% & \multicolumn{1}{c}{definition~2}\\
+% \hline\hline
+% \verb+\bf+ & \verb+\ProgKeywords+ & \verb+\FProgKeywords+\\
+% \verb+\tt+ & \verb+\ttKeywords+ & \verb+\FttKeywords+\\
+% \verb+\em+ & \verb+\AlgoKeywords+ & \verb+\FAlgoKeywords+\\
+% \verb+\rm+ & \verb+\NormalKeywords+ & \verb+\FNormalKeywords+\\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \DescribeMacro{\UAlgoKeywords}
+% \DescribeMacro{\UFAlgoKeywords}
+% \DescribeMacro{\FUAlgoKeywords}
+% There are also two underlined styles:
+%
+% \begin{center}
+% \begin{tabular}{lll}
+% \hline
+% \multicolumn{1}{c}{style}
+% & \multicolumn{1}{c}{definition~1}
+% & \multicolumn{1}{c}{definition~2}\\
+% \hline\hline
+% underlined \verb+\em+ & \verb+\UAlgoKeywords+ & \verb+\FUAlgoKeywords+\\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% For compatability with previous versions of keywords.sty, the
+% command \verb+\UFAlgoKeywords+ has been defined as a synonym for
+% \verb+\FUAlgoKeywords+.
+%
+% \subsection{Defining and Re-defining keywords}
+% \label{user:program-keywords}
+%
+% \DescribeMacro{\NewKeyword}
+% The command
+%
+% \begin{verbatim}
+% \NewKeyword{\WORD}{SENTENCE1}[SENTENCE2]
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% defines the command \verb+\WORD+ to issue the text in
+% \verb+SENTENCE1+ or in \verb+SENTENCE2+ when it is typed, according
+% to the style currently in use.
+%
+% For instance, one could use \verb+SENTENCE1+ for defining english
+% keywords and \verb+SENTENCE2+ for defining their french translation.
+%
+% If ``\verb+[SENTENCE2]+'' is omitted, all happens as if the
+% following command had been issued:
+%
+% \begin{verbatim}
+% \NewKeyword{\WORD}{SENTENCE1}[SENTENCE1]
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% The command \verb+\NewKeyword+ serves also to redefine existing
+% keywords.
+%
+% \subsection{Defining a printing style}
+% \label{user:defining-printing-styles}
+%
+% \DescribeMacro{\DefineKeywordsStyles}
+% The command
+%
+% \begin{verbatim}
+% \DefineKeywordsStyles{MODE}{\STYLE}
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% allows for the user to define particular printing modes.
+% Its main effect is to define the commands \verb+\MODEs+ and
+% \verb+\FMODEs+ that will lead to print respectively the
+% \verb+SENTENCE1+ part or the \verb+SENTENCE2+ part of the
+% \verb+\NewKeyword+ definitions.
+% For instance, the commands \verb+\ProgKeywords+ and
+% \verb+\FProgKeywords+ have been automatically defined from a
+% \verb+\DefineKeywordsStyles{ProgKeyword}{\bf}+ command.
+%
+% \DescribeMacro{\DefineUnderlinedKeywordsStyles}
+% \ \\
+% For \verb+SENTENCE+$_i$ to be underlined, it is necessary to issue a
+%
+% \begin{verbatim}
+% \DefineUnderlinedKeywordsStyles{MODE}{\STYLE}
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% command, instead of the ``\verb+\DefineKeywordsStyles+'' described
+% above.
+% This is how the \verb+\UAlgoKeywords+ and \verb+\FUAlgoKeywords+
+% commands have been defined, by issuing a
+% \verb+\DefineUnderlinedKeywordsStyles{UAlgoKeyword}{\em}+ command.
+%
+% \subsection{The Index File}
+%
+% In order for the processing of this file to be complete, an index
+% format file is required. Let us assume that it is named
+% \verb+keywords.ist+, then the following command must be run and then
+% another compilation of the current file:
+%
+% \begin{macrocode}
+%<index>
+%<index>%% -----------------------------------------------------------
+%<index>%% Assuming this file is named "keywords.ist" (after being
+%<index>%% generated from "keywords.doc" by running "latex docstrip"),
+%<index>%% the following command will produce a well formated index:
+%<index>%%
+%<index>%% makeindex -s keywords.ist keywords.idx
+%<index>%% -----------------------------------------------------------
+%<index>
+% \end{macrocode}
+%
+% Another possibility is to set the environment variable
+% \verb+INDEXSTYLE+ to a directory name where the ``.ist'' files
+% (index format files) may be found.
+%
+% A possible index file is given below\footnote{It can be generated by
+% invoquing the compilation of ``docstrip'' with the ``index''
+% option.}:
+%
+% \begin{macrocode}
+%<index>actual '='
+%<index>quote '!'
+%<index>level '>'
+%<index>preamble
+%<index>"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n"
+%<index>postamble
+%<index>"\n\n \\end{theindex}\n"
+%<index>item_x1 "\\efill \n \\subitem "
+%<index>item_x2 "\\efill \n \\subsubitem "
+%<index>delim_0 "\\pfill "
+%<index>delim_1 "\\pfill "
+%<index>delim_2 "\\pfill "
+%<index>% The next lines will produce some warnings when
+%<index>% running Makeindex as they try to cover two different
+%<index>% versions of the program:
+%<index>lethead_prefix "{\\bf\\hfil "
+%<index>lethead_suffix "\\hfil}\\nopagebreak\n"
+%<index>lethead_flag 1
+%<index>heading_prefix "{\\bf\\hfil "
+%<index>heading_suffix "\\hfil}\\nopagebreak\n"
+%<index>headings_flag 1
+% \end{macrocode}
+%
+% \subsection{The Driver File}
+%
+% There is also a driver file, called {\em{}programs.drv\/}, that is
+% included in the distribution.
+% It is devoted to control the latex compilation of the documentation.
+% Its code is given below.
+%
+% \begin{macrocode}
+%<*driver>
+\newif\ifnoprogsfile
+\openin1 programs.sty
+\ifeof1 \noprogsfiletrue\else\noprogsfilefalse\fi\closein1
+\ifnoprogsfile \relax\else
+\openin1 keywords.sty
+\ifeof1 \noprogsfiletrue\else\noprogsfilefalse\fi\closein1
+\fi
+\ifnoprogsfile
+ \typeout{*************************************************************}
+ \typeout{To get a more complete documentation, you should:}
+ \typeout{(1) generate the file 'programs.sty'(see 'programs.doc'), and}
+ \typeout{(2) copy the current file into 'keywords.sty'}
+ \typeout{*************************************************************}
+\fi
+\ifnoprogsfile
+ \documentstyle[doc]{article}%
+\else
+ \documentstyle[doc,programs,keywords]{article}%
+\fi
+\MakePercentIgnore%
+%
+\setlength{\textwidth}{31pc}%
+\setlength{\textheight}{54pc}%
+\setlength{\parindent}{0pt}%
+\setlength{\parskip}{2pt plus 1pt minus 1pt}%
+\setlength{\oddsidemargin}{8pc}%
+\setlength{\marginparwidth}{8pc}%
+\setlength{\topmargin}{-2.5pc}%
+\setlength{\headsep}{20pt}%
+\setlength{\columnsep}{1.5pc}%
+\setlength{\columnwidth}{18.75pc}%
+%%
+\setcounter{IndexColumns}{2}%
+\EnableCrossrefs%
+\RecordChanges
+\CodelineIndex
+%\OldMakeindex % use if your MakeIndex is pre-v2.9%
+\begin{document}%
+ \DocInput{keywords.doc}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \subsection{Extracting the documents included in the file keywords.doc}
+%
+% There are three documents included in the {\em{}keywords.doc\/} file:
+% the style file ({\em{}keywords.sty}),
+% the index style file for printing a cross-referenced document
+% ({\em{}keywords.ist}),
+% and the driver file for printing the document: {\em{}keywords.drv\/}.
+%
+% For file extraction it is necessary to use the \verb"docstrip"
+% utility, which is part of the \verb"doc"
+% distribution~\cite{art:doc}.
+% Normally, a file \verb"docstrip.tex" should exist on the \LaTeX\
+% style files directory.
+% Extraction is performed by typing:
+%
+% \begin{verbatim}
+% latex docstrip
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% This is an interactive program, and the dialogue for generating the
+% style file should be:
+%
+% \begin{verbatim}
+% **********************************************************
+% * This program converts documented macro-files into fast *
+% * loadable files by stripping off (nearly) all comments! *
+% **********************************************************
+%
+% ****************************************************
+% * First type the extension of your input file(s): *
+% \infileext=doc
+% ****************************************************
+%
+% ****************************************************
+% * Now type the extension of your output file(s) : *
+% \outfileext=sty
+% ****************************************************
+%
+% ****************************************************
+% * Now type the name(s) of option(s) to include : *
+% \Options=style
+% ****************************************************
+%
+% ****************************************************
+% * Finally give the list of input file(s) without *
+% * extension seperated by commas if necessary : *
+% \filelist=Programs
+% ****************************************************
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% For generating the index file it suffices to rerun the
+% \verb"docstrip" utility and to answer ``ist/index'' instead of
+% ``sty/style'' int the above steps~2 and~3.
+%
+% \medskip
+%
+% The three files may be produced in a single pass, by simply latexing
+% the file {\em{}keywords.ins\/} which goes along with the file
+% {\em{}keywords.doc\/}.
+%
+% \medskip
+%
+% Generation of the documentation is then simply performed as follows
+% (the {\em{}keywords.doc\/} file includes its own driver):
+%
+% \begin{verbatim}
+% latex keywords.doc
+% latex keywords.doc
+% latex keywords.doc
+% makeindex -s keywords.ist keywords.idx
+% latex keywords.doc
+% \end{verbatim}
+%
+% \StopEventually{
+% \begin{thebibliography}{1}
+% \bibitem{book:KnuthA} {\sc D.E. Knuth}.
+% \newblock Computers \& Typesetting (The \TeX book).
+% \newblock Addison-Wesley, Vol. A, 1986.
+% \bibitem{lamport86}{\sc L. Lamport}.
+% \newblock {\em {\LaTeX}: a Document Preparation System}.
+% \newblock Addison-Wesley Publishing Company, 1986.
+% \bibitem{art:doc} {\sc F. Mittelbach}.
+% \newblock The {\tt doc}-option.
+% \newblock {\sl TUGboat}, Vol.~10(2), {\it pp}.~245--273, July
+% 1989.
+% \bibitem{alabau95-d} {\sc M. Alabau}.
+% \newblock The ``{\sf{}programs.sty}'' style file.
+% \newblock March 1995.
+% {\em{}e-mail:\/} {\tt{}Miguel.Alabau@labri.u-bordeaux.fr}
+% \end{thebibliography}
+%
+% } ^^A end \StopEventually
+%
+% \begin{macrocode}
+%<*style>
+% \end{macrocode}
+%
+
+% ^^A **********************************************
+% ^^A ** TECHNICAL DESCRIPTION **
+% ^^A **********************************************
+
+\typeout{Document style `keywords.sty' <1993,1994,1995>}
+
+% \section{Description of Macros}
+%
+% \begin{macro}{\AlreadyDefined@@Keywords}
+% This macro can be tested by any style file to know if the file
+% ``{\sf{}keywords.sty}'' has been input. But it allows a modular
+% programming style similar to the one used with the C~header
+% files.
+% Hence, the first time the ``{\sf{}keywords.sty}'' style file is
+% included all of its body will be included; the second time, the
+% body will not be included.
+% \begin{macrocode}
+\expandafter\ifx\csname AlreadyDefined@@Keywords\endcsname\relax%
+\expandafter\def\csname AlreadyDefined@@Keywords\endcsname{}%
+\else\endinput\fi
+% \end{macrocode}
+% \end{macro}%
+%
+% A test for the existence of this macro is performed for
+% compatability with ancient versions of \LaTeX.
+% \begin{macrocode}
+\@ifundefined{reset@font}{\global\let\reset@font\relax}{}
+% \end{macrocode}
+
+% \subsection{Defining and Re-defining keywords}
+%
+% \begin{macro}{\NewKeyword}
+% \begin{macro}{\@@newkwrd}
+% The \verb+\NewKeyword+ command has three parameters, but the
+% third one is optional. By default it is assumed to be equal to
+% the second one:
+% \begin{macrocode}
+\def\NewKeyword#1#2{\@ifnextchar[{\@@newkwrd{#1}{#2}}{\@@newkwrd{#1}{#2}[#2]}}
+% \end{macrocode}
+% \end{macro}
+%
+% The \verb+\@@newkwrd+ performs the real work. It calls the
+% command \verb+\@@KeywordsCurrentStyle+ whose effect is to define
+% the command \verb+\@@kwrd+ and then invokes this last command.
+% \begin{macrocode}
+\def\@@newkwrd#1#2[#3]{\def#1{\@@KeywordsCurrentStyle{\@@kwrd}{#2}{#3}\@@kwrd}}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Defining printing styles}
+%
+% \begin{macro}{\@@TypeStyle}
+% This command is expected to be called with a command name as
+% first parameter. Its effect is to define \verb+#1+ as the
+% command that print \verb+#3+ with style \verb+#2+~:
+% \begin{macrocode}
+\def\@@TypeStyle#1#2#3{\def#1{\mbox{\reset@font#2{}#3\/}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DefineKeywordsStyles}
+% The macro \verb+\DefineKeywordsStyles+ has two parameters, let
+% them be \verb+toto+ and \verb+bf+. Its effect is to define
+% two commands called \verb+\@@toto+ and \verb+\F@@toto+. Each of
+% these two new commands has three parameters: the first one must
+% be the name of a command (the keyword to be defined) and the
+% other two must be two texts associated to the keyword. The
+% \verb+\@@toto+ command will select the first text while the
+% \verb+\F@@toto+ command will select the second text.
+% \begin{macrocode}
+\newif\if@@underline \@@underlinefalse
+\def\DefineKeywordsStyles#1#2{
+ \if@@underline
+ \@namedef{@@#1}##1##2##3{\@@TypeStyle{##1}{#2}{\underline{##2}}}
+ \@namedef{F@@#1}##1##2##3{\@@TypeStyle{##1}{#2}{\underline{##3}}}
+ \else
+ \@namedef{@@#1}##1##2##3{\@@TypeStyle{##1}{#2}{##2}}
+ \@namedef{F@@#1}##1##2##3{\@@TypeStyle{##1}{#2}{##3}}
+ \fi
+% \end{macrocode}
+% A boolean switch is used to select underlined fonts. By default
+% non underlined fonts are used, and a reset to non boolean fonts
+% is performed after every definition of keyword:
+% \begin{macrocode}
+ \@@underlinefalse
+% \end{macrocode}
+% At last two commands are provided to the user: \verb+\totos+ and
+% \verb+\Ftotos+ whose effect is to set the command
+% \verb+\@@KeywordsCurrentStyle+ respectively to \verb+\@@toto+ or
+% \verb+\F@@toto+~:
+% \begin{macrocode}
+ \@namedef{#1s}{\def\@@KeywordsCurrentStyle{\@nameuse{@@#1}}}
+ \@namedef{F#1s}{\def\@@KeywordsCurrentStyle{\@nameuse{F@@#1}}}
+}
+% \end{macrocode}
+% By this way when a command
+%
+% \begin{verbatim}
+% \NewKeyword{\WORD}{SENTENCE1}[SENTENCE2]
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% is issued, then \verb+\WORD+ is defined to
+%
+% \begin{verbatim}
+% \@@KeywordsCurrentStyle{\@@kwrd}{SENTENCE1}{SENTENCE2}\@@kwrd}
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% Hence, every time the command \verb+\WORD+ is issued by the
+% user in the text of its programs, \verb+\@@kwrd+ is redefined
+% and invoked under the running definition of
+% \verb+\@@KeywordsCurrentStyle+.
+% This complicated trick ensures that every keyword, even if it is
+% not defined in the style file (e.g. if it is defined in the text
+% typed by the user) will be typed with the correct font selection.
+% \end{macro}
+
+% \begin{macro}{\DefineUnderlinedKeywordsStyles}
+% This macro serves to switch to underlined fonts:
+% \begin{macrocode}
+\def\DefineUnderlinedKeywordsStyles#1#2{
+ \@@underlinetrue
+ \DefineKeywordsStyles{#1}{#2}
+}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Predefined printing styles}
+%
+% The commands in the margin are automatically generated (see above and
+% section~\ref{user:selecting-printing-styles}) by issuing the
+% following commands:
+%
+% \begin{macro}{\ProgKeywords}
+% \begin{macro}{\FProgKeywords}
+% \
+% \begin{macrocode}
+\DefineKeywordsStyles{ProgKeyword}{\bf}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ttKeywords}
+% \begin{macro}{\FttKeywords}
+% \
+% \begin{macrocode}
+\DefineKeywordsStyles{ttKeyword}{\tt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\AlgoKeywords}
+% \begin{macro}{\FAlgoKeywords}
+% \
+% \begin{macrocode}
+\DefineKeywordsStyles{AlgoKeyword}{\em}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\UAlgoKeywords}
+% \begin{macro}{\FUAlgoKeywords}
+% \
+% \begin{macrocode}
+\DefineUnderlinedKeywordsStyles{UAlgoKeyword}{\em}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NormalKeywords}
+% \begin{macro}{\FNormalKeywords}
+% \
+% \begin{macrocode}
+\DefineKeywordsStyles{NormalKeyword}{\relax}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \
+% \begin{macro}{\UFAlgoKeywords}
+% This macro is defined for compatability with previous versions
+% of the style:
+% \begin{macrocode}
+\let\UFAlgoKeywords\FUAlgoKeywords
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Predefined keywords}
+% \label{default-keywords}
+%
+% The macros below are sorted alphabetically:
+% \begin{macrocode}
+%<style>%% DEFAULT KEYWORDS
+\NewKeyword{\ABORT}{abort}[avorter]
+\NewKeyword{\ABS}{abs}
+\NewKeyword{\ABSTRACT}{abstract}[abstrait]
+\NewKeyword{\ACCEPT}{accept}[accepter]
+\NewKeyword{\ACCESS}{access}[acc\`es]
+\NewKeyword{\ALIASED}{aliased}[alias\'e]
+\NewKeyword{\ALL}{all}[tout]
+\NewKeyword{\ALT}{alt}
+\NewKeyword{\AND}{and}[et]
+\NewKeyword{\APPEND}{append}[ajouter\_\-en\_\-fin]
+\NewKeyword{\ARRAY}{array}[tableau]
+\NewKeyword{\ASSERT}{assert}[assertion]
+\NewKeyword{\ASSIGN}{:=}
+\NewKeyword{\AT}{at}
+\NewKeyword{\BEGIN}{begin}[d\'ebut]
+\NewKeyword{\BLOCK}{block}[bloc]
+\NewKeyword{\BOOLEAN}{boolean}[bool\'een]
+\NewKeyword{\BODY}{body}
+\NewKeyword{\BOT}{$\bot$}
+\NewKeyword{\BOX}{$<>$}
+\NewKeyword{\BY}{by}[pas]
+\NewKeyword{\CASE}{case}[choix]
+\NewKeyword{\CATINDEX}{catindex}
+\NewKeyword{\CHAN}{chan}[canal]
+\NewKeyword{\CHANNEL}{channel}[canal]
+\NewKeyword{\CHAR}{char}[car]
+\NewKeyword{\CHARACTER}{character}[caract\`ere]
+\NewKeyword{\CLOSE}{close}[fermer]
+\NewKeyword{\CO}{co}
+\NewKeyword{\COBEGIN}{cobegin}
+\NewKeyword{\COEND}{coend}
+\NewKeyword{\COMMUTATIVE}{commutative}[commutatif]
+\NewKeyword{\COMPLEX}{complex}[complexe]
+\NewKeyword{\COMPUTE}{compute}[calculer]
+\NewKeyword{\CONNECT}{$\longrightarrow$}
+\NewKeyword{\CONNECTB}{$\Longrightarrow$}
+\NewKeyword{\CONST}{const}
+\NewKeyword{\CONSTANT}{constant}[constante]
+\NewKeyword{\CONSTRAINTS}{constraints}[contraintes]
+\NewKeyword{\CONTINUE}{continue}
+\NewKeyword{\DATA}{data}[donn\'ee]
+\NewKeyword{\DECLARE}{declare}
+\NewKeyword{\DECOMPOSE}{decompose}
+\NewKeyword{\DELAY}{delay}[d\'elai]
+\NewKeyword{\DELTA}{delta}
+\NewKeyword{\DEPTH}{depth}[profondeur]
+\NewKeyword{\DIGITS}{digits}[chiffres]
+\NewKeyword{\DIMENSION}{dimension}
+\NewKeyword{\DIST}{dist}
+\NewKeyword{\DISTRIBUTE}{distribute}[r\'epartir]
+\NewKeyword{\DIV}{div}
+\NewKeyword{\DO}{do}[faire]
+\NewKeyword{\DOALL}{doall}[faire en parall\`ele]
+\NewKeyword{\DOM}{dom}
+\NewKeyword{\DOMAIN}{domain}[domaine]
+\NewKeyword{\DOMAINS}{domains}[domaines]
+\NewKeyword{\DONE}{done}[fait]
+\NewKeyword{\DOPAR}{dopar}[faire en parall\`ele]
+\NewKeyword{\DOWNTO}{downto}[jusqu'\`a]
+\NewKeyword{\DYNAMIC}{dynamic}[dynamique]
+\NewKeyword{\EACH}{each}[chaque]
+\NewKeyword{\EGO}{MyId}[EGO]
+\NewKeyword{\ELSE}{else}[sinon]
+\NewKeyword{\ELSIF}{elsif}[sinon si]
+\NewKeyword{\END}{end}[fin]
+\NewKeyword{\ENDCASE}{end case}[fin choix]
+\NewKeyword{\ENDIF}{end if}[finsi]
+\NewKeyword{\ENDDO}{end do}[fait]
+\NewKeyword{\ENDLOOP}{end loop}[fait]
+\NewKeyword{\ENTRY}{entry}[entr\'ee]
+\NewKeyword{\EOT}{eot}
+\NewKeyword{\EQ}{$=$}
+\NewKeyword{\EXCEPTION}{exception}
+\NewKeyword{\EXIT}{exit}[sortir]
+\NewKeyword{\EXTERNAL}{external}[externe]
+\NewKeyword{\FI}{fi}[finsi]
+\NewKeyword{\FILE}{file}[fichier]
+\NewKeyword{\FIRST}{first}[premier]
+\NewKeyword{\FOR}{for}[pour]
+\NewKeyword{\FORALL}{forall}[pour tout]
+\NewKeyword{\FOREACH}{foreach}[pour chaque]
+\NewKeyword{\FORWARD}{forward}
+\NewKeyword{\FUNCTION}{function}[fonction]
+\NewKeyword{\GE}{$\geq$}
+\NewKeyword{\GENERIC}{generic}[g\'en\'erique]
+\NewKeyword{\GETNODE}{getnode}[prendre\_\-noeud]
+\NewKeyword{\GOTO}{goto}[aller\_\-\`a]
+\NewKeyword{\GRAPH}{graph}[graphe]
+\NewKeyword{\GT}{$>$}
+\NewKeyword{\IF}{if}[si]
+\NewKeyword{\IMPLICATION}{$\Rightarrow$}
+\NewKeyword{\IMPLY}{$\Rightarrow$}
+\NewKeyword{\IMPORT}{import}[importer]
+\NewKeyword{\IN}{in}[dans]
+\NewKeyword{\IND}{ind}
+\NewKeyword{\INDEX}{index}
+\NewKeyword{\INIT}{init}
+\NewKeyword{\INOUT}{inout}
+\NewKeyword{\INPORT}{inport}
+\NewKeyword{\INPUT}{input}
+\NewKeyword{\INTEGER}{integer}[entier]
+\NewKeyword{\INTO}{into}
+\NewKeyword{\IS}{is}[est]
+\NewKeyword{\LABEL}{label}[\'etiquette]
+\NewKeyword{\LAST}{last}[dernier]
+\NewKeyword{\LE}{$\leq$}
+\NewKeyword{\LENGTH}{length}[longueur]
+\NewKeyword{\LIMITED}{limited}[limit\'e]
+\NewKeyword{\LOOP}{loop}[faire]
+\NewKeyword{\LT}{$<$}
+\NewKeyword{\MAP}{map}[placer]
+\NewKeyword{\MOD}{mod}
+\NewKeyword{\MODULE}{module}
+\NewKeyword{\MODULO}{modulo}
+\NewKeyword{\MULTIPLE}{multiple}
+\NewKeyword{\MYID}{MyId}[EGO]
+\NewKeyword{\NE}{$\neq$}
+\NewKeyword{\NEIGHBOUR}{neighbour}[voisin]
+\NewKeyword{\NEIGHBOURS}{neighbours}[voisins]
+\NewKeyword{\NEW}{new}[nouveau]
+\NewKeyword{\NEWBLOCK}{newblock}
+\NewKeyword{\NIL}{nil}
+\NewKeyword{\NODE}{node}[noeud]
+\NewKeyword{\NOT}{not}[non]
+\NewKeyword{\NUL}{nul}
+\NewKeyword{\NULL}{null}[nul]
+\NewKeyword{\OD}{od}[fait]
+\NewKeyword{\ODPAR}{odpar}[fait]
+\NewKeyword{\OF}{of}
+\NewKeyword{\ON}{on}
+\NewKeyword{\OPEN}{open}[ouvrir]
+\NewKeyword{\OR}{or}[ou]
+\NewKeyword{\OTHERS}{others}
+\NewKeyword{\OUT}{out}
+\NewKeyword{\OUTPORT}{outport}
+\NewKeyword{\OUTPOUT}{outpout}
+\NewKeyword{\PACKAGE}{package}[paquetage]
+\NewKeyword{\PARALLEL}{parallel}
+\NewKeyword{\PARFOR}{parfor}[en parall\`ele: pour]
+\NewKeyword{\PAR}{par}[en parall\`ele]
+\NewKeyword{\PERCENT}{\%}
+\NewKeyword{\PLACE}{place}[placer]
+\NewKeyword{\PORT}{port}
+\NewKeyword{\PRAGMA}{pragma}
+\NewKeyword{\PRI}{pri}
+\NewKeyword{\PRIVATE}{private}[priv\'e]
+\NewKeyword{\PROCEDURE}{procedure}[proc\'edure]
+\NewKeyword{\PROCESS}{process}[processus]
+\NewKeyword{\PROGRAM}{program}[programme]
+\NewKeyword{\PROTECTED}{protected}[prot\'eg\'e]
+\NewKeyword{\RAISE}{raise}[lever]
+\NewKeyword{\RANGE}{range}[intervalle]
+\NewKeyword{\READ}{read}[lire]
+\NewKeyword{\READY}{ready}[pr\^et]
+\NewKeyword{\REAL}{real}[r\'eel]
+\NewKeyword{\RECORD}{record}[enregistrement]
+\NewKeyword{\RECV}{recv}[recevoir]
+\NewKeyword{\RECEIVE}{receive}[recevoir]
+\NewKeyword{\REM}{rem}
+\NewKeyword{\RENAMES}{renames}[renomme]
+\NewKeyword{\REPEAT}{repeat}[r\'ep\'eter]
+\NewKeyword{\REQUEUE}{requeue}
+\NewKeyword{\RESET}{reset}
+\NewKeyword{\RETURN}{return}[retour]
+\NewKeyword{\REVERSE}{reverse}
+\NewKeyword{\REWIND}{rewind}
+\NewKeyword{\REWRITE}{rewrite}
+\NewKeyword{\ROOT}{root}[racine]
+\NewKeyword{\SELECT}{select}
+\NewKeyword{\SEND}{send}[\'emettre]
+\NewKeyword{\SENDEOT}{sendeot}[\'emettre eot]
+\NewKeyword{\SEPARATE}{separate}[s\'epar\'ement]
+\NewKeyword{\SEQ}{seq}
+\NewKeyword{\SET}{set}
+\NewKeyword{\SIZE}{size}[taille]
+\NewKeyword{\SKIP}{skip}[sauter]
+\NewKeyword{\STRING}{string}[cha\^{\i}ne de caract\`eres]
+\NewKeyword{\SUBTYPE}{subtype}[sous\_\-type]
+\NewKeyword{\SWITCH}{switch}
+\NewKeyword{\TAGGED}{tagged}[\'etiquett\'e]
+\NewKeyword{\TASK}{task}[t\^ache]
+\NewKeyword{\TERMINATE}{terminate}[terminer]
+\NewKeyword{\THEN}{then}[alors]
+\NewKeyword{\TO}{to}[jusqu'\`a]
+\NewKeyword{\TOWARDS}{towards}[vers]
+\NewKeyword{\TRANSMIT}{transmit}[\'emettre]
+\NewKeyword{\TUPLE}{tuple}[n\_\-uplet]
+\NewKeyword{\TYPE}{type}
+\NewKeyword{\UNDEF}{undef}[ind\'efini]
+\NewKeyword{\UNTIL}{until}[jusqu'\`a]
+\NewKeyword{\USE}{use}
+\NewKeyword{\VAR}{var}
+\NewKeyword{\VARIABLE}{variable}
+\NewKeyword{\WHEN}{when}[si]
+\NewKeyword{\WHERE}{where}[si]
+\NewKeyword{\WHILE}{while}[tant que]
+\NewKeyword{\WITH}{with}[avec]
+\NewKeyword{\WRITE}{write}[\'ecrire]
+\NewKeyword{\XOR}{xor}
+%<style>%%
+%<style>%% French syntax
+%<style>%%
+\NewKeyword{\EMETTRE}{send}[\'emettre]
+\NewKeyword{\RECEVOIR}{receive}[recevoir]
+\NewKeyword{\POUR}{for}[pour]
+\NewKeyword{\FAIRE}{do}[faire]
+\NewKeyword{\FAIT}{end do}[fait]
+\NewKeyword{\SI}{if}[si]
+\NewKeyword{\ALORS}{then}[alors]
+\NewKeyword{\SINON}{else}[sinon]
+\NewKeyword{\FINSI}{end if}[fin si]
+\NewKeyword{\DEBUT}{begin}[d\'ebut]
+\NewKeyword{\FIN}{end}[fin]
+% \end{macrocode}
+% Then we terminate by instructing \LaTeX\ to switch to the default
+% font for typing keywords (which, in the current implementation is
+% underlined \verb+\em+).
+% \begin{macrocode}
+\FUAlgoKeywords
+% \end{macrocode}
+
+% \begin{macrocode}
+%</style>
+% \end{macrocode}
+
+% ^^A The four commented lines below may be used to output an index on
+% ^^A a page layout greater than the one used till now.
+% ^^A -----
+% ^^A \newpage
+% ^^A \setlength{\oddsidemargin}{0pt}
+% ^^A \setlength\textwidth{15cm}
+% ^^A \normalsize
+% ^^A -----
+%
+% \IndexPrologue{%
+% \section*{Index}%
+% \markboth{Index}{Index}%
+% {\it{}The italic numbers denote the pages where the
+% corresponding entry is described,
+% numbers underlined point to the definition,
+% all others indicate the places where it is used
+% (ie. the line numbers where it appears).
+% }}
+% \Finale
+% \newpage
+% \PrintIndex \PrintChanges
diff --git a/macros/latex209/contrib/progkeys/keywords.ins b/macros/latex209/contrib/progkeys/keywords.ins
new file mode 100644
index 0000000000..94e432e3c3
--- /dev/null
+++ b/macros/latex209/contrib/progkeys/keywords.ins
@@ -0,0 +1,51 @@
+\def\ifToplevel#1{#1}
+
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{keywords.ins}
+\input docstrip.tex
+\preamble
+
+Copyright: Miguel Alabau, 1995 \space\space\space Miguel.Alabau@labri.u-bordeaux.fr
+
+\endpreamble
+\keepsilent
+
+\Msg{\space\space\space\space *******************************************}
+\Msg{\space\space\space\space ** keywords utility}
+\Msg{\space\space\space\space *******************************************}
+\Msg{}
+
+\Msg{*** Generating the driver files ***}
+\generateFile{keywords.drv}{f}{\from{keywords.doc}{driver}}
+
+\Msg{*** Generating the document package files ***}
+\generateFile{keywords.sty}{f}{\from{keywords.doc}{style}}
+
+\Msg{*** Generating the index files for producing the documentation crossrefs ***}
+\generateFile{keywords.ist}{f}{\from{keywords.doc}{index}}
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space\space\space keywords.sty}
+\Msg{*}
+\Msg{* To produce the documentation of the 'keywords' utility,}
+\Msg{* perform as follows:}
+\Msg{* \space\space\space\space - run three times keywords.drv through LaTeX}
+\Msg{* \space\space\space\space - then run 'makeindex -s keywords.ist keywords.idx'}
+\Msg{* \space\space\space\space - then run once keywords.drv through LaTeX}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+
+\endinput
diff --git a/macros/latex209/contrib/progkeys/programs.doc b/macros/latex209/contrib/progkeys/programs.doc
new file mode 100644
index 0000000000..15e1f87c83
--- /dev/null
+++ b/macros/latex209/contrib/progkeys/programs.doc
@@ -0,0 +1,1222 @@
+% \iffalse
+%
+% 'programs.doc'
+%
+% Copyright (C) 1993,1994,1995 by Miguel Alabau. All rights reserved.
+%
+% ENVIRONMENTS FOR EASILY TYPESETTING PROGRAMS
+%
+% **WARNING** If the file 'programs.ins' does not accompany the file
+% 'programs.doc', then you must strip this last file by hand.
+% (1) Run 'latex docstrip' on 'programs.doc' and indicate 'drv' as
+% suffix file and 'driver' as selector for extraction.
+% (2) Run 'latex docstrip' on 'programs.doc' and indicate 'sty' as
+% suffix file and 'style' as selector for extraction.
+% (3) Run 'latex docstrip' on 'programs.doc' and indicate 'ist' as
+% suffix file and 'index' as selector for extraction.
+% Then, if you want to produce the documentation, proceed as follows:
+% latex programs.drv; latex programs.drv; latex programs.drv
+% makeindex -s programs.ist programs.idx
+% latex programs.drv
+%
+% \fi
+%
+%
+% \def\fileversion{v1.0}
+% \def\filedate{95/04/01}
+% \def\docdate {96/01/31}
+%
+%
+% ^^A -*-LaTeX-*-
+%
+%\catcode`\<=12
+
+% \CheckSum{393}
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \DoNotIndex{\@,\@@par,\@beginparpenalty,\@empty}
+% \DoNotIndex{\@flushglue,\@gobble,\@input}
+% \DoNotIndex{\@makefnmark,\@makeother,\@maketitle}
+% \DoNotIndex{\@namedef,\@ne,\@spaces,\@tempa}
+% \DoNotIndex{\@tempb,\@tempswafalse,\@tempswatrue}
+% \DoNotIndex{\@thanks,\@thefnmark,\@topnum}
+% \DoNotIndex{\@@,\@elt,\@forloop,\@fortmp,\@gtempa,\@totalleftmargin}
+% \DoNotIndex{\",\/,\@ifundefined,\@nil,\@verbatim,\@vobeyspaces}
+% \DoNotIndex{\|,\~,\ ,\active,\advance,\aftergroup,\begingroup,\bgroup}
+% \DoNotIndex{\cal,\csname,\def,\documentstyle,\dospecials,\edef}
+% \DoNotIndex{\egroup}
+% \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\endtrivlist}
+% \DoNotIndex{\expandafter,\fi,\fnsymbol,\futurelet,\gdef,\global}
+% \DoNotIndex{\hbox,\hss,\if,\if@inlabel,\if@tempswa,\if@twocolumn}
+% \DoNotIndex{\ifcase}
+% \DoNotIndex{\ifcat,\iffalse,\ifx,\ignorespaces,\index,\input,\item}
+% \DoNotIndex{\jobname,\kern,\leavevmode,\leftskip,\let,\llap,\lower}
+% \DoNotIndex{\m@ne,\next,\newpage,\nobreak,\noexpand,\nonfrenchspacing}
+% \DoNotIndex{\obeylines,\or,\protect,\raggedleft,\rightskip,\rm,\sc}
+% \DoNotIndex{\setbox,\setcounter,\small,\space,\string,\strut}
+% \DoNotIndex{\strutbox}
+% \DoNotIndex{\thefootnote,\thispagestyle,\topmargin,\trivlist,\tt}
+% \DoNotIndex{\twocolumn,\typeout,\vss,\vtop,\xdef,\z@}
+% \DoNotIndex{\,,\@bsphack,\@esphack,\@noligs,\@vobeyspaces,\@xverbatim}
+% \DoNotIndex{\`,\catcode,\end,\escapechar,\frenchspacing,\glossary}
+% \DoNotIndex{\hangindent,\hfil,\hfill,\hskip,\hspace,\ht,\it,\langle}
+% \DoNotIndex{\leaders,\long,\makelabel,\marginpar,\markboth,\mathcode}
+% \DoNotIndex{\mathsurround,\mbox,\newcount,\newdimen,\newskip}
+% \DoNotIndex{\nopagebreak}
+% \DoNotIndex{\parfillskip,\parindent,\parskip,\penalty,\raise,\rangle}
+% \DoNotIndex{\section,\setlength,\TeX,\topsep,\underline,\unskip,\verb}
+% \DoNotIndex{\vskip,\vspace,\widetilde,\\,\%,\@date,\@defpar}
+% \DoNotIndex{\[,\{,\},\]}
+% \DoNotIndex{\count@,\ifnum,\loop,\today,\uppercase,\uccode}
+% \DoNotIndex{\baselineskip,\begin,\tw@}
+% \DoNotIndex{\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,\n,\o,\p,\q}
+% \DoNotIndex{\r,\s,\t,\u,\v,\w,\x,\y,\z,\A,\B,\C,\D,\E,\F,\G,\H}
+% \DoNotIndex{\I,\J,\K,\L,\M,\N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z}
+% \DoNotIndex{\1,\2,\3,\4,\5,\6,\7,\8,\9,\0}
+% \DoNotIndex{\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_}
+% \DoNotIndex{\discretionary,\immediate,\makeatletter,\makeatother}
+% \DoNotIndex{\meaning,\newenvironment,\par,\relax,\renewenvironment}
+% \DoNotIndex{\repeat,\scriptsize,\selectfont,\the,\undefined}
+% \DoNotIndex{\arabic,\do,\makeindex,\null,\number,\show,\write,\@ehc}
+% \DoNotIndex{\@author,\@ehc,\@ifstar,\@sanitize,\@title,\everypar}
+% \DoNotIndex{\if@minipage,\if@restonecol,\ifeof,\ifmmode}
+% \DoNotIndex{\lccode,\newtoks,\onecolumn,\openin,\p@,\SelfDocumenting}
+% \DoNotIndex{\settowidth,\@resetonecoltrue,\@resetonecolfalse,\bf}
+% \DoNotIndex{\clearpage,\closein,\lowercase,\@inlabelfalse}
+% \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault}
+% \DoNotIndex{\bfdefault}
+%
+% \DoNotIndex{\addtocounter,\baselinestretch,\em,\noindent}
+% \DoNotIndex{\linewidth,\columnwidth,\newcounter,\newif,\newlength}
+% \DoNotIndex{\normalsize,\refstepcounter,\rlap,\rule}
+% \DoNotIndex{\@@tempa,\@@tempb,\@ifnextchar,\@nameuse}
+%
+% \title{The ``{\sf{}programs.sty}'' style file\thanks{%
+% This file has version number \fileversion{} dated \filedate{}.
+% The documentation was last revised on \docdate{}.}}
+%
+% \author{Miguel Alabau\\
+% {\small{}LaBRI, Universit\'e Bordeaux~I (France)}\\
+% {\small{\em{}e-mail\/}: {\tt{}Miguel.Alabau@labri.u-bordeaux.fr}}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This style file contains a set of definitions that allow a fairly
+% easy pretty-printing of programs.
+% In particular, text alignement is obtained by simply typing
+% {\tt{}space} characters.
+% Emphasized characters, mathematical symbols and commands are
+% directly taken into account.
+% \end{abstract}%
+%
+% \newif\ifmulticols
+% \makeatletter
+% \ifhave@multicol\multicolstrue\else\multicolsfalse\fi
+% \makeatother
+%
+% \begin{footnotesize}
+% \ifmulticols \begin{multicols}{2} \fi
+% \tableofcontents
+% \ifmulticols \end{multicols} \fi
+% \end{footnotesize}
+%
+%
+% \ifmulticols
+% \begin{multicols}{2}[\section{Introduction}]
+% \else \section{Introduction} \fi
+%
+% The \LaTeX\ \verb"verbatim" environment allows for easy typesetting
+% of text. However it is sometimes convenient to type programs that
+% involve some mathematics, some emphasized text or some boldfaced
+% keywords.
+% \LaTeX\ provides the \verb"tabbing" environment for freely
+% typesetting programs. But a cumbersome aspect of this environment is
+% the way tabs are specified: their presence makes the text to be
+% obscured.
+% The file {\em{}programs.sty\/} provides different environments and
+% commands for typesetting programs. Spaces are interpreted as in the
+% \verb"verbatim" environment, avoiding the user to type \verb"\=" and
+% \verb"\>" control characters.
+% Accents, mathematical symbols, emphasized and boldface fonts can be
+% used. Another useful feature is the capability
+% to number lines and to put labels on lines (and, of course, to refer
+% to them).
+%
+% \ifnoprogsfile \relax\else
+%
+% For instance, you may type something like
+% \InBodyLeftNumberLine
+%
+% \begin{verbatim}
+% \begin{programf}
+% function sqrt(x: integer): integer;
+% (* sqrt(x) = $\sqrt{x}$ *)
+% function pow(x,y: real): real;
+% (* pow(x,y) = $x^y$ *)
+% \end{programf}
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% \noindent%
+% which leads to the following output
+%
+% \begin{programf}
+% function sqrt(x: integer): integer;
+% (* sqrt(x) = $\sqrt{x}$ *)
+% function pow(x,y: real): real;
+% (* pow(x,y) = $x^y$ *)
+% \end{programf}
+%
+% \fi
+%
+% It is also possible to typeset the same program in a smaller font,
+% enclosed within two horizontal lines, and with the lines unnumbered.
+%
+% \ifnoprogsfile \relax\else
+%
+% \begin{verbatim}
+% \programsurround
+% \begin{programt}*
+% function sqrt(x: integer): integer;
+% (* sqrt(x) = $\sqrt{x}$ *)
+% function pow(x,y: real): real;
+% (* pow(x,y) = $x^y$ *)
+% \end{programt}
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% \noindent%
+% yielding to the following output:\\
+%
+% \programsurround
+% \begin{programt}*
+% function sqrt(x: integer): integer;
+% (* sqrt(x) = $\sqrt{x}$ *)
+% function pow(x,y: real): real;
+% (* pow(x,y) = $x^y$ *)
+% \end{programt}
+%
+% \fi
+%
+% A set of other options is provided, together with two file inclusion
+% capabilities.
+%
+% \ifmulticols\end{multicols}\fi
+%
+% ^^A **********************************************
+% ^^A ** USERS's MANUAL **
+% ^^A **********************************************
+%
+% \section{User's Manual}
+%
+% In this section, we describe the environments and commands provided by
+% this style file (section~\ref{user:program-environments}).
+% We indicate also three sets of control commands:
+%
+% \begin{itemize}
+% \item{} Global commands, i.e. global switches for the
+% commands/environments of section~\ref{user:program-environments}
+% (section~\ref{user:global-commands}).
+% \item{} Commands whose scope is the next program only
+% (section~\ref{user:running-commands}).
+% \item{} Commands that are used {\em{}within\/} a program environment
+% (section~\ref{user:local-commands}).
+% \end{itemize}
+%
+% The user is provided with two {\em{}meta-commands\/} that allow to
+% define new program environments for some other fonts, or to redefine
+% existing program environments.
+%
+% This section terminates by indicating how to proceed for extracting
+% the different archives from the file {\em{}programs.doc}.
+%
+% \subsection{Environments for typesetting programs}
+% \label{user:program-environments}
+%
+% The following environments are provided, every one of them
+% corresponding to one of the \LaTeX\ predefined font sizes:
+%
+% \begin{center}
+% \begin{tabular}{ll}
+% \hline
+% \multicolumn{1}{c}{environments} & \multicolumn{1}{c}{sizes}\\
+% \hline\hline
+% program & normalsize \\
+% programl & large \\
+% programL & Large \\
+% programs & small \\
+% programf & footnotesize \\
+% programsc & scriptsize \\
+% programt & tiny \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% These environments are to be used like the \verb"verbatim"
+% environment. However they work differently, since the usual \LaTeX\
+% escapes are allowable from within the environment. For instance,
+% math mode as well as emphasized characters may be used.
+%
+% By default, lines are numbered. If someone wants to type an
+% unnumbered text, it is necessary to put a \verb"*" just after the
+% beginning of the environment.
+% \ifnoprogsfile \relax\else
+% For instance:
+%
+% \begin{verbatim}
+% \begin{programL}*
+% <unnumbered text>
+% \end{programL}
+% \end{verbatim}
+% \fi
+%
+% Program indentation obey to the variable \verb"\ProgramIndent" (see
+% section~\ref{user:global-commands}). However, it is possible, for
+% one given environment, not to obey to the global indentation of
+% programs. This is done by indicating another indentation between
+% square braces just after entering the environment.
+% \ifnoprogsfile \relax\else
+% For instance, an unnumbered program indented 2cm from the left
+% margin of the text is:
+%
+% \begin{verbatim}
+% \begin{programL}[2cm]*
+% <unnumbered text>
+% \end{programL}
+% \end{verbatim}
+% \fi
+%
+% There is also a set of inclusion commands similar to the
+% \verb"\verbatimfile" (verbatim inclusion of a file) and
+% \verb"\verbatimlisting" (verbatim inclusion of a file, with
+% numbered lines) commands of the ``{\em{}verbatimfiles.sty\/}'' by
+% Chris Rowley.
+% Of course, the files input by these commands are subject to the same
+% permisive syntax as for the environments above (math syntax,
+% emphasized text, {\em{}etc.\/}).
+%
+% \begin{center}
+% \begin{tabular}{lll}
+% \hline
+% \multicolumn{3}{c}{program inclusion commands} \\
+% \hline
+% \multicolumn{1}{c}{unnumbered programs}
+% & \multicolumn{1}{c}{numbered programs}
+% & \multicolumn{1}{c}{sizes}\\
+% \hline\hline
+% \verb"\"fprogram & \verb"\"lprogram & normalsize \\
+% \verb"\"fprograml & \verb"\"lprograml & large \\
+% \verb"\"fprogramL & \verb"\"lProgramL & Large \\
+% \verb"\"fprograms & \verb"\"lprograms & small \\
+% \verb"\"fprogramf & \verb"\"lprogramf & footnotesize \\
+% \verb"\"fprogramsc & \verb"\"lprogramsc & scriptsize \\
+% \verb"\"fprogramt & \verb"\"lprogramt & tiny \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% We describe in section~\ref{user:meta-commands} how to define new
+% program environments.
+%
+% \subsection{Global commands}
+% \label{user:global-commands}
+%
+% \DescribeMacro{\ProgramIndent}
+% This command serves to control the default indentation of the
+% programs.
+% It is used as described below:
+% \begin{verbatim}
+% \ProgramIndent{1cm}
+% \end{verbatim}
+% \vspace{-\baselineskip}
+% and has the effect to make all the programs to be indented by
+% default one centimeter from the left margin, unless this value is
+% changed by another \verb"\ProgramIndent" command.
+% Default is no indentation at all.
+%
+% \DescribeMacro{\programindent}
+% This macro redefines the macro \verb+\ProgramIndent+.
+% It is present here for compatibility with previous versions of the
+% {\em{}programs.sty\/} style.
+%
+% \DescribeMacro{\LeftMarginNumberLine}
+% \DescribeMacro{\RightMarginNumberLine}
+% \DescribeMacro{\BothMarginsNumberLine}
+% \DescribeMacro{\InBodyLeftNumberLine}
+% These four commands are self-explanatory.
+% They allow the user to specify that line numbers must be put in
+% either the left or the right margin, or in both margins, or that lines
+% must appear inside the body of the text on the left of the program.
+% These options may be put anywhere in the text, in the preamble as
+% well as in the body.
+% The effect of one of these commands stands until it is changed by
+% another one of them.
+% Of course, different commands may be put in several parts of the text,
+% if the user wants its programs to be numbered differently.
+% The default is for the lines to appear in the left margin of the
+% text (\verb"\LeftMarginNumberLine").
+%
+% \DescribeMacro{\BothMarginNumberLine}
+% This macro redefines the macro \verb+\BothMarginsNumberLine+.
+% It is present here for compatibility with previous versions of the
+% {\em{}programs.sty\/} style.
+%
+% \DescribeMacro{\ttProgram}
+% \DescribeMacro{\rmProgram}
+% \DescribeMacro{\emProgram}
+% Text of programs are usually typed with a teletype font (like in the
+% \verb"verbatim" environment). The user has the ability to change
+% this default font to one of the three predefined fonts: teletype,
+% roman, italicized roman.
+%
+% \DescribeMacro{\ProgramDefaultFont}
+% The command \verb"\ProgramDefaultFont" serves to reset the printing
+% to the default font.
+%
+% \subsection{Commands to be used before a program environment}
+% \label{user:running-commands}
+%
+% \DescribeMacro{\ProgramSurround}
+% Programs are usually typeset as they are.
+% However a user can specify that the next program to be printed will
+% be surrounded by two horizontal lines, as long as the width of the
+% text.
+% This is done by putting this command in the body of the text before
+% the program appears.
+%
+% \DescribeMacro{\programsurround}
+% This macro redefines the macro \verb+\ProgramSurround+.
+% It is present here for compatibility with previous versions of the
+% {\em{}programs.sty\/} style.
+%
+% \DescribeMacro{\SetProgramCounter}
+% By default, program lines are counted from~$1$.
+% It is possible to change the value of the first line number of the
+% next program by issuing the following command before the program is
+% included:
+%
+% \begin{verbatim}
+% \SetProgramCounter{6}
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}
+% In this example, the lines of the next program will start from~$6$.
+%
+% \DescribeMacro{\setprogramcounter}
+% This macro redefines the macro \verb+\SetProgramCounter+.
+% It is present here for compatibility with previous versions of the
+% {\em{}programs.sty\/} style.
+%
+% \DescribeMacro{\NoResetProgramCounter}
+% If the user desires that the number of the first line of the next
+% program is equal to the number of the last line of the last previous
+% program, he must issue the command \verb"\NoResetProgramCounter"
+% before the next program.
+% This command has no effect if issued before the first program.
+%
+% \DescribeMacro{\noresetprogramcounter}
+% This macro redefines the macro \verb+\NoResetProgramCounter+.
+% It is present here for compatibility with previous versions of the
+% {\em{}programs.sty\/} style.
+%
+% \subsection{Commands to be used inside a program environment}
+% \label{user:local-commands}
+%
+% \DescribeMacro{\UnnumLine}
+% \label{user:unnumline}
+% This command is to be used only {\em{}within\/} programs.
+% It must appear at the end of a line and has the effect not to number
+% the following line.
+% It serves when the user wants to keep only one unique line number for
+% long statements that span accross several lines.
+%
+% \DescribeMacro{\unnumline}
+% This macro redefines the macro \verb+\UnnumLine+.
+% It is present here for compatibility with previous versions of the
+% {\em{}programs.sty\/} style.
+%
+% \subsection{Meta-Commands: how to define new program environments}
+% \label{user:meta-commands}
+%
+% \DescribeMacro{\NewProgram}
+% \DescribeMacro{\RenewProgram}
+% \label{user:newprogram}
+% The \verb"\NewProgram" command serves to define a new program
+% environment.
+% The \verb"\RenewProgram" command is to be used for redefining already
+% defined program environments.
+% These commands must be used as below:
+% \begin{quote}
+% \verb"\NewProgram"\{{\em{}name\/}\}\{{\em{}font\_name\/}\} \\
+% \verb"\RenewProgram"\{{\em{}name\/}\}\{{\em{}font\_name\/}\}
+% \end{quote}
+%
+% The command \verb"\NewProgram" defines one environment and two
+% commands. Let us assume that the user issues the following command:
+%
+% \begin{verbatim}
+% \NewProgram{LittleProg}{smallsize}
+% \end{verbatim}
+%
+% \vspace{-\baselineskip}%
+% then an environment called \verb"LittleProg" will be generated for
+% direct typesetting of programs, and two commands will be created:
+% \verb"fLittleProg" and \verb"lLittleProg" for inclusion of
+% unnumbered (resp. numbered) text.
+%
+% \DescribeMacro{\newprogram}
+% \DescribeMacro{\renewprogram}
+% These two macros are old names present here for compatibility with
+% previous versions of the {\em{}programs.sty\/} style.
+% \verb+\newprogram+ redefines \verb+\NewProgram+, and
+% \verb+\renewprogram+ redefines \verb+\RenewProgram+.
+%
+% \subsection{The Index File}
+%
+% In order for the processing of this file to be complete, an index
+% format file is required. Let us assume that it is named
+% \verb+programs.ist+, then the following command must be run and then
+% another compilation of the current file:
+%
+% \begin{macrocode}
+%<index>
+%<index>%% -----------------------------------------------------------
+%<index>%% Assuming this file is named "programs.ist" (after being
+%<index>%% generated from "programs.doc" by running "latex docstrip"),
+%<index>%% the following command will produce a well formated index:
+%<index>%%
+%<index>%% makeindex -s programs.ist programs.idx
+%<index>%% -----------------------------------------------------------
+%<index>
+% \end{macrocode}
+%
+% Another possibility is to set the environment variable
+% \verb+INDEXSTYLE+ to a directory name where the ``.ist'' files
+% (index format files) may be found.
+%
+% A possible index file is given below\footnote{It can be generated by
+% invoquing the compilation of ``docstrip'' with the ``index''
+% option.}:
+%
+% \begin{macrocode}
+%<index>actual '='
+%<index>quote '!'
+%<index>level '>'
+%<index>preamble
+%<index>"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n"
+%<index>postamble
+%<index>"\n\n \\end{theindex}\n"
+%<index>item_x1 "\\efill \n \\subitem "
+%<index>item_x2 "\\efill \n \\subsubitem "
+%<index>delim_0 "\\pfill "
+%<index>delim_1 "\\pfill "
+%<index>delim_2 "\\pfill "
+%<index>% The next lines will produce some warnings when
+%<index>% running Makeindex as they try to cover two different
+%<index>% versions of the program:
+%<index>lethead_prefix "{\\bf\\hfil "
+%<index>lethead_suffix "\\hfil}\\nopagebreak\n"
+%<index>lethead_flag 1
+%<index>heading_prefix "{\\bf\\hfil "
+%<index>heading_suffix "\\hfil}\\nopagebreak\n"
+%<index>headings_flag 1
+% \end{macrocode}
+%
+% \subsection{The Driver File}
+%
+% There is also a driver file, called {\em{}programs.drv\/}, that is
+% included in the distribution.
+% It is devoted to control the latex compilation of the documentation.
+% Its code is given below.
+%
+% \begin{macrocode}
+%<*driver>
+\newif\ifnoprogsfile
+\openin1 programs.sty
+\ifeof1 \noprogsfiletrue\else\noprogsfilefalse\fi\closein1
+\ifnoprogsfile
+ \typeout{*******************************************************}
+ \typeout{To get a more complete documentation, you should}
+ \typeout{copy the current file into 'programs.sty'}
+ \typeout{*******************************************************}
+\fi
+\ifnoprogsfile
+ \documentstyle[doc]{article}%
+\else
+ \documentstyle[doc,programs]{article}%
+\fi
+\MakePercentIgnore%
+%
+\setlength{\textwidth}{31pc}%
+\setlength{\textheight}{54pc}%
+\setlength{\parindent}{0pt}%
+\setlength{\parskip}{2pt plus 1pt minus 1pt}%
+\setlength{\oddsidemargin}{8pc}%
+\setlength{\marginparwidth}{8pc}%
+\setlength{\topmargin}{-2.5pc}%
+\setlength{\headsep}{20pt}%
+\setlength{\columnsep}{1.5pc}%
+\setlength{\columnwidth}{18.75pc}%
+%%
+\setcounter{IndexColumns}{2}%
+\EnableCrossrefs%
+\RecordChanges
+\CodelineIndex
+%\OldMakeindex % use if your MakeIndex is pre-v2.9%
+\begin{document}%
+ \DocInput{programs.doc}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \subsection{Extracting the documents included in the file programs.doc}
+%
+% There are three documents included in the {\em{}programs.doc\/} file:
+% the style file ({\em{}programs.sty}),
+% the index style file for printing a cross-referenced document
+% ({\em{}programs.ist}),
+% and the driver file for printing the document: {\em{}programs.drv\/}.
+%
+% For file extraction it is necessary to use the \verb"docstrip"
+% utility, which is part of the \verb"doc"
+% distribution~\cite{art:doc}.
+% Normally, a file \verb"docstrip.tex" should exist on the \LaTeX\
+% style files directory.
+% Extraction is performed by typing:
+%
+% \begin{verbatim}
+% latex docstrip
+% \end{verbatim}
+%
+% This is an interactive program, and the dialogue for generating the
+% style file should be:
+%
+% \begin{verbatim}
+% **********************************************************
+% * This program converts documented macro-files into fast *
+% * loadable files by stripping off (nearly) all comments! *
+% **********************************************************
+%
+% ****************************************************
+% * First type the extension of your input file(s): *
+% \infileext=doc
+% ****************************************************
+%
+% ****************************************************
+% * Now type the extension of your output file(s) : *
+% \outfileext=sty
+% ****************************************************
+%
+% ****************************************************
+% * Now type the name(s) of option(s) to include : *
+% \Options=style
+% ****************************************************
+%
+% ****************************************************
+% * Finally give the list of input file(s) without *
+% * extension seperated by commas if necessary : *
+% \filelist=programs
+% ****************************************************
+% \end{verbatim}
+%
+% For generating the index file it suffices to rerun the
+% \verb"docstrip" utility and to answer ``ist/index'' instead of
+% ``sty/style'' int the above steps~2 and~3, and in another run to
+% answer "drv/driver".
+%
+% \medskip
+%
+% The three files may be produced in a single pass, by simply latexing
+% the file {\em{}programs.ins\/} which goes along with the file
+% {\em{}programs.doc\/}.
+%
+% \medskip
+%
+% Generation of the documentation is then simply performed as follows:
+%
+% \begin{verbatim}
+% latex programs.drv
+% latex programs.drv
+% latex programs.drv
+% makeindex -s programs.ist programs.idx
+% latex programs.drv
+% \end{verbatim}
+%
+% \StopEventually{
+% \begin{thebibliography}{1}
+% \bibitem{book:KnuthA} {\sc D.E. Knuth}.
+% \newblock Computers \& Typesetting (The \TeX book).
+% \newblock Addison-Wesley, Vol. A, 1986.
+% \bibitem{lamport86}{\sc L. Lamport}.
+% \newblock {\em {\LaTeX}: a Document Preparation System}.
+% \newblock Addison-Wesley Publishing Company, 1986.
+% \bibitem{art:doc} {\sc F. Mittelbach}.
+% \newblock The {\tt doc}-option.
+% \newblock {\sl TUGboat}, Vol.~10(2), {\it pp}.~245--273, July
+% 1989.
+% \bibitem{art:docstrip} {\sc F. Mittelbach, D. Duchier and
+% J. Braams}.
+% \newblock {\tt docstrip.doc}~.
+% \newblock The file is part of the DOC package.
+% \end{thebibliography}
+%
+% } ^^A end \StopEventually
+%
+% \begin{macrocode}
+%<*style>
+% \end{macrocode}
+%
+
+% ^^A **********************************************
+% ^^A ** TECHNICAL DESCRIPTION **
+% ^^A **********************************************
+
+\typeout{Document style `programs.sty' <1993,1994,1995>}
+
+% \section{Description of Macros}
+%
+% \begin{macro}{\AlreadyDefined@@Programs}
+% This macro can be tested by any style file to know if the file
+% ``{\sf{}programs.sty}'' has been input. But it allows a modular
+% programming style similar to the one used with the C~header
+% files.
+% Hence, the first time the ``{\sf{}programs.sty}'' style file is
+% included all of its body will be included; the second time, the
+% body will not be included.
+% \begin{macrocode}
+\expandafter\ifx\csname AlreadyDefined@@Programs\endcsname\relax%
+\expandafter\def\csname AlreadyDefined@@Programs\endcsname{}%
+\else\endinput\fi
+% \end{macrocode}
+% \end{macro}%
+
+% \subsection{Controlling program indentation}
+%
+% \begin{macro}{\ProgramIndent}
+% \begin{macro}{\@@programindent}
+% \verb"\@@programindent" is the amount of program indentation for
+% the left margin of the text.
+% Initially, it is set to \verb"\z@"\ :
+% \begin{macrocode}
+%<style>%% CONTROLLING PROGRAM INDENTATION
+\newdimen\@@programindent
+\@@programindent=\z@
+% \end{macrocode}
+% \end{macro}
+%
+% The \verb"\ProgramIndent" has the only effect to set the variable
+% of \verb"\@@programindent" to the value indicated by its
+% parameter:
+% \begin{macrocode}
+\def\ProgramIndent#1{\@@programindent=#1}
+% \end{macrocode}
+% \end{macro}
+
+% \subsection{Surrounding programs by rules}
+%
+% \begin{macro}{\ProgramSurround}
+% \begin{macro}{\if@@surround}
+% By default, a program is printed as is, but it is possible to
+% indicate that it is going to be enclosed within two
+% \verb"\hrule":
+% \begin{macrocode}
+%<style>%% SURROUNDING PROGRAMS BY RULES
+\newif\if@@surround\@@surroundfalse
+\def\ProgramSurround{\@@surroundtrue}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@progline}
+% \begin{macro}{\@@noprogline}
+% These two macros define the shape of the surrounding lines.
+% The definition of \verb"\@@progline" is such that the surrounding
+% lines lengths are always equal to the width of the current line
+% (even if it is changed from one program to another).
+% \begin{macrocode}
+\def\@@progline{\def\@@prgln{\rule{\linewidth}{0.1mm}}\@@prgln}
+\def\@@noprogline{\rule{0pt}{0pt}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \subsection{Line numbering}
+%
+% \begin{macro}{\@@defaultindent}
+% The purpose of this macro is to keep space enough for printing
+% the line numbers of the programs.
+% I have defined its length for make it easy printing long
+% programs (thousands of lines).
+% \begin{macrocode}
+%<style>%% LINE NUMBERING
+\newlength{\@@defaultindent}
+\settowidth{\@@defaultindent}{{\tt{}12345}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@@resetlineno}
+% \begin{macro}{\if@@unnumline}
+% \begin{macro}{\if@@CurrentProgIsUnnumbered}
+% These three conditions serve to indicate the printing status of
+% the current program.
+% More precisely, \verb"\if@@resetlineno" is a boolean flag to
+% specify if line numbering must be reset for the next program.
+% It defaults to true.
+% \verb"\if@@unnumline" is a boolean flag to specify that the next
+% line to be printed is not to be numbered.
+% It defaults to false (i.e. every line is numbered, by default).
+% \verb"\if@@CurrentProgIsUnnumbered" is a global flag for the
+% program, that indicates if the program being printed is numbered
+% or not.
+% It defaults to false (i.e. programs are numbered, by default).
+% \begin{macrocode}
+\newif\if@@resetlineno \@@resetlinenotrue \newif\if@@unnumline
+\@@unnumlinefalse
+\newif\if@@CurrentProgIsUnnumbered \@@CurrentProgIsUnnumberedfalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\NoResetProgramCounter}
+% This macro is provided to the user to specify that the first line
+% number of the next program must be equal to the last line number
+% of the previous program.
+% More precisely, lines for the next program will be numbered from
+% \verb"\@@lineno + 1".
+% \begin{macrocode}
+\def\NoResetProgramCounter{\@@resetlinenofalse}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\UnnumLine}
+% As said in section~\ref{user:unnumline}, this macro must appear
+% at the end of a program line.
+% Its effect is to set on the boolean flag \verb"\@@unnumlinetrue"
+% to prevent the macro \verb"\@@xnewprog" from numbering the next line
+% of the program.
+% The ``\verb"\ "'' that appears ahead of the macro serves to make
+% the command valid even if issued on an empty line.
+% \begin{macrocode}
+\def\UnnumLine{\ \@@unnumlinetrue}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{@@lineno}
+% \begin{macro}{\SetProgramCounter}
+% This is the definition of a counter for the program lines.
+% Once the macro \verb"\SetProgramCounter" called, its effect is to
+% make lines starting from the value indicated as param \verb"#1".
+% Of course, if the user issues a \verb"\SetProgramCounter"
+% command, it is implicitly assumed that he wants the lines to be
+% numbered.
+% That is why the condition \verb"\if@@resetlineno" is set to
+% false.
+% \begin{macrocode}
+\newcounter{@@lineno}\setcounter{@@lineno}{1}
+\def\SetProgramCounter#1{\setcounter{@@lineno}{#1}\@@resetlinenofalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{@@dummylineno}
+% This little trick is an internal line counter for the unnumbered
+% programs.
+% It is necessary for making it possible to put labels on
+% lines in unnumbered programs, and refer to them.
+% Internal numbering of unnumbered programs always begins at~$1$.
+% \begin{macrocode}
+\newcounter{@@dummylineno}\setcounter{@@dummylineno}{1}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\LeftMarginNumberLine}
+% \begin{macro}{\RightMarginNumberLine}
+% \begin{macro}{\BothMarginsNumberLine}
+% \begin{macro}{\InBodyLeftNumberLine}
+% \begin{macro}{\@@PlaceOfNumbers}
+% The first four commands are provided to the user for
+% indicating line number placement.
+% They have the only effect to change the value of
+% \verb"\@@PlaceOfNumbers" which is an internal value whose purpose
+% is to define where the line numbers are to appear on the text.
+% It is used by the macro \verb"\@@xnewprog".
+% \begin{macrocode}
+\def\LeftMarginNumberLine{\let\@@PlaceOfNumbers\@@LeftMarginNumberLine}
+\def\RightMarginNumberLine{\let\@@PlaceOfNumbers\@@RightMarginNumberLine}
+\def\BothMarginsNumberLine{\let\@@PlaceOfNumbers\@@BothMarginsNumberLine}
+\def\InBodyLeftNumberLine{\let\@@PlaceOfNumbers\@@InBodyLeftNumberLine}
+\def\@@LeftMarginNumberLine{0} \def\@@RightMarginNumberLine{1}
+\def\@@BothMarginsNumberLine{2}
+\def\@@InBodyLeftNumberLine{3}
+% \end{macrocode}
+%
+% For more readability, a
+% \begin{macrocode}
+\LeftMarginNumberLine
+% \end{macrocode}
+% command is issued, in order to initialize
+% \verb"\@@PlaceOfNumbers".
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+
+% \subsection{Program default fonts}
+%
+% \begin{macro}{\@@DefaultProgramFont}
+% Text of programs is usually typed with a teletype font (like in
+% the \verb"verbatim" environment).
+% Default font printing is controlled by this counter.
+% Its value is used in the macro \verb"\@@astyped" described
+% elsewhere in this document.
+% \begin{macrocode}
+%<style>%% PROGRAM DEFAULT FONTS
+\def\@@DefaultProgramFont{0}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ttProgram}
+% \begin{macro}{\rmProgram}
+% \begin{macro}{\emProgram}
+% \begin{macro}{\ProgramDefaultFont}
+% These commands allow the user to change the default font of the
+% programs. This is performed by redefining the running macros
+% \verb"\@@astyped" and \verb"\@@program".
+% \begin{macrocode}
+\def\ttProgram{\def\@@DefaultProgramFont{0}\def@@astyped\def@@program}
+\def\rmProgram{\def\@@DefaultProgramFont{1}\def@@astyped\def@@program}
+\def\emProgram{\def\@@DefaultProgramFont{2}\def@@astyped\def@@program}
+\def\ProgramDefaultFont{\ttProgram}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+
+% \subsection{The real environment}
+%
+% \begin{macro}{\@@vobeyspaces}
+% \begin{macro}{\@@xobeysp}
+% We first begin by redefining the space character that will be
+% used in the \verb"@@astyped" environment.
+% It is important to let a space after the occurrence of
+% \verb"\let" below, since at this point space characters are
+% become active.
+% If \verb"\@@xobeysp" had been issued on a different line, a risk
+% would have existed to have space redefined to empty space.
+% \begin{macrocode}
+%<style>%% THE REAL ENVIRONMENT
+{\catcode`\ =\active\gdef\@@vobeyspaces{\catcode`\ \active\let \@@xobeysp}}
+\def\@@xobeysp{\leavevmode\penalty10000\ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\def@@astyped}
+% \begin{macro}{\@@astyped}
+% \begin{macro}{\end@@astyped}
+% Then, we define the \verb"@@astyped" environment by the means of
+% its two macros \verb"\@@astyped" and \verb"\end@@astyped".
+% It is very strongly related to the \verb"astyped"
+% environment~\cite{astyped88}. However, rather than directly using
+% the \verb"astyped" environment, I have prefered to make the
+% {\em{}programs.sty\/} style file independent.
+%
+% \verb"\def@@astyped" causes the \verb"@@astyped" environment
+% to be defined. This is because we want a different
+% \verb"@@astyped" environment to be defined for every new
+% \verb"program" environment, because fonts may have changed, hence
+% spacing may differ from one environment to another one.
+% \begin{macrocode}
+\def\def@@astyped{%
+ \def\@@astyped{%
+ \partopsep\z@%
+ \topsep\z@%
+ \trivlist \item[]%
+ \leftskip\@totalleftmargin%
+ \rightskip\z@%
+ \parindent\z@%
+ \parfillskip\@flushglue%
+ \parskip\z@%
+ \@tempswafalse%
+ \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}%
+ \obeylines%
+ \ifcase\@@DefaultProgramFont \tt\or \rm\or \em\else \tt\fi
+ \catcode``=13 \@noligs%
+ \let\do\@makeother \do\ \do\^^K\do\^^A%
+ \frenchspacing\@@vobeyspaces%
+ \noindent\hspace{\parindent}%
+ \if@@surround\@@progline\else\@@noprogline\fi%
+ \nopagebreak%
+ }
+ \def\end@@astyped{%
+ \nopagebreak%
+ \noindent\hspace{\parindent}%
+ \if@@surround\@@progline\else\@@noprogline\fi%
+ \endtrivlist%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+
+% \subsection{Meta-commands for defining new program environments}
+%
+% \begin{macro}{\NewProgram}
+% \begin{macro}{\RenewProgram}
+% \begin{macro}{\@@newprog}
+% The command \verb"\NewProgram" (resp. \verb"\RenewProgram") can
+% be used to define (resp. redefine) new program environments. The
+% first parameter is the name of a program environment to be
+% created, and the second one is the name of a size for the police
+% (e.g. {\em{}smallsize}, {\em{}tiny}, {\em{}etc}.).
+% See section~\ref{user:meta-commands} for an example.
+%
+% I have defined \verb"\RenewProgram" same as \verb"\NewProgram"
+% because I am too lazzy, but it should test if the environment to
+% be redefined has been previously defined.
+% \begin{macrocode}
+%<style>%% META-COMMANDS FOR DEFINING NEW PROGRAM ENVIRONMENTS
+\def\NewProgram#1#2{\@@newprog{#1}{#2}}
+\def\RenewProgram#1#2{\@@newprog{#1}{#2}}
+\def\@@newprog#1#2{%
+ \@namedef{#1}{%
+ \begingroup\def\@@tempa{\@nameuse{#2}}%
+ \def\@@tempb{\baselinestretch}\def\baselinestretch{1}%
+ \@ifundefined{@@tempa}{\normalsize}{\@@tempa}%
+ \def@@astyped\@@astyped%
+ \@ifnextchar[{\@@xnewprog}{\@@xnewprog[\@@programindent]}%
+ }%
+ \@namedef{end#1}{%
+ \everypar{}%
+% \end{macrocode}
+% The little trick below is necessary because \verb"\@@lineno" is
+% incremented by 1 at the beginning of every \verb"program"
+% environment (see \verb"\@@xnewprog" below).
+% Hence, when \verb"\NoResetProgramCounter" is used, the line
+% numbers of the last line of the previous program and the first
+% line of the new program would be the same.
+% The condition below avoids this drawback.
+% \begin{macrocode}
+ \if@@CurrentProgIsUnnumbered \relax%
+ \else%
+ \addtocounter{@@lineno}{1}%
+ \fi%
+ %
+ \end@@astyped%
+ \let\baselinestretch=\@@tempb\endgroup%
+ \global\@@resetlinenotrue%
+ \global\ProgramDefaultFont%
+ \global\@@surroundfalse%
+ }%
+% \end{macrocode}
+% At last, if actual value of parameter \verb+#1+ is \verb+FOO+, we
+% define two file inclusion commands: \verb+\fFOO+ and \verb+lFOO+
+% for inclusion of unnumbered and numbered programs
+% (see section~\ref{user:program-environments}).
+% \begin{macrocode}
+ \@namedef{f#1}##1{\@nameuse{#1}*\par\input##1\@nameuse{end#1}}%
+ \@namedef{l#1}##1{\@nameuse{#1}\par\input##1\@nameuse{end#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+
+% \begin{macro}{\@@numlinelength}
+% \begin{macro}{\@@xnewprog}
+% The macro \verb"\@@xnewprog" performs the printing of the lines.
+% \begin{macrocode}
+\newlength{\@@numlinelength}
+\def\@@xnewprog[#1]{%
+% \end{macrocode}
+% If the first character is the symbol \verb+*+ then no line
+% numbers are printed.
+% \begin{macrocode}
+ \@ifstar{%
+ \@@CurrentProgIsUnnumberedtrue
+ \setcounter{@@dummylineno}{0}%
+ \leavevmode%
+ \everypar{%
+ \refstepcounter{@@dummylineno}%
+ \@@unnumlinefalse%
+ \noindent\hspace{#1}}%
+ }%
+% \end{macrocode}
+% Otherwise, this is the normal case:
+% \begin{macrocode}
+ {%
+ \@@CurrentProgIsUnnumberedfalse
+ \if@@resetlineno%
+ \setcounter{@@lineno}{0}%
+ \else%
+ \addtocounter{@@lineno}{-1}%
+ \fi%
+ \leavevmode%
+ \everypar{%
+ \if@@unnumline%
+% \end{macrocode}
+% I decided to make a default indentation on the left side of the
+% unnumbered program if the user has requested a numbering on the
+% left side of the page for the numbered programs.
+% This is to keep an homogeneous layout.
+% \begin{macrocode}
+ \ifx \@@PlaceOfNumbers\@@InBodyLeftNumberLine%
+ \hspace{\@@defaultindent}%
+ \rule{0pt}{0pt}%
+ \fi
+% \end{macrocode}
+% Otherwise, for numbered programs, we begin by incrementing the
+% line counter and making it possible a reference to the line
+% number to be done (see the {\em{}latex.tex\/}\footnote{This file
+% is part of the \LaTeX\ distribution.} file for explanations on
+% \verb"\refstepcounter").
+% \begin{macrocode}
+ \else%
+ \refstepcounter{@@lineno}%
+% \end{macrocode}
+% Then, we look at the placement of the line numbers, which is
+% controlled by the variable \verb"\@@PlaceOfNumbers":
+% \begin{macrocode}
+ \ifx \@@PlaceOfNumbers\@@LeftMarginNumberLine%
+ \llap{{\rm\the@@lineno\ \ }}%
+ \else \ifx \@@PlaceOfNumbers\@@RightMarginNumberLine%
+ \noindent\hspace{\columnwidth}%
+ \rlap{{\rm\ \ \the@@lineno}}%
+ \noindent\hspace{-\columnwidth}%
+ \else \ifx \@@PlaceOfNumbers\@@BothMarginsNumberLine%
+ \noindent\hspace{\columnwidth}%
+ \rlap{{\rm\ \ \the@@lineno}}%
+ \noindent\hspace{-\columnwidth}%
+ \llap{{\rm\the@@lineno\ \ }}%
+ \else \ifx \@@PlaceOfNumbers\@@InBodyLeftNumberLine%
+ \hspace{\@@defaultindent}%
+ \rule{0pt}{0pt}%
+ \llap{{\rm\the@@lineno\ \ }}%
+ \else
+% \end{macrocode}
+% Otherwise (default case), numbers are printed on the left margin
+% of the page:
+% \begin{macrocode}
+ \llap{{\rm\the@@lineno\ \ }}%
+ \fi\fi\fi\fi
+% \end{macrocode}
+% Then we reset the boolean flag
+% {\makeatletter\verb"\@@unnumlinefalse"} in order
+% to make the next line to be numbered (of course, this is useful
+% only if the program is numbered), and we indent the program
+% according to what was requested by the user.
+% \begin{macrocode}
+ \fi\@@unnumlinefalse%
+ \noindent\hspace{#1}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \subsection{Predefined environments and commands}
+%
+% \begin{macro}{\def@@program}
+% \begin{macro}{\ProgramDefaultFont}
+% This command serves to define the environments and commands
+% described in section~\ref{user:program-environments}.
+% It is invoked by the \verb"\ProgramDefaultFont" command.
+% \begin{macrocode}
+%<style>%% PREDEFINED ENVIRONMENTS AND COMMANDS
+\def\def@@program{%
+ \NewProgram{program}{normalsize}
+ \NewProgram{programl}{large}
+ \NewProgram{programL}{Large}
+ \NewProgram{programs}{small}
+ \NewProgram{programf}{footnotesize}
+ \NewProgram{programsc}{scriptsize}
+ \NewProgram{programt}{tiny}
+}
+% \end{macrocode}
+% Then we terminate by instructing \LaTeX\ to switch to the default
+% font for typing programs (which, in the current implementation is
+% \verb+\tt+ in order to have a behaviour consistent with the
+% \verb+verbatim+ environment).
+% \begin{macrocode}
+\ProgramDefaultFont
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+
+% \subsection{Old macro names present here for compatibility reasons}
+%
+% \begin{macro}{\newprogram}
+% \begin{macro}{\renewprogram}
+% \begin{macro}{\noresetprogramcounter}
+% \begin{macro}{\programindent}
+% \begin{macro}{\programsurround}
+% \begin{macro}{\setprogramcounter}
+% \begin{macro}{\unnumline}
+% \begin{macro}{\BothMarginNumberLine}
+% These macro names are simple redefinitions of macros defined
+% elsewhere in this document style.
+% They are present here because they had been defined in previous
+% versions of this style.
+% \begin{macrocode}
+%<style>%% OLD MACRO NAMES PRESENT HERE FOR COMPATIBILITY REASONS
+\let\newprogram=\NewProgram \let\renewprogram=\RenewProgram
+\let\noresetprogramcounter=\NoResetProgramCounter
+\let\programindent=\ProgramIndent
+\let\programsurround=\ProgramSurround
+\let\setprogramcounter=\SetProgramCounter \let\unnumline=\UnnumLine
+\let\BothMarginNumberLine=\BothMarginsNumberLine
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+
+% \begin{macrocode}
+%</style>
+% \end{macrocode}
+
+% ^^A The four commented lines below may be used to output an index on
+% ^^A a page layout greater than the one used till now.
+% ^^A -----
+% ^^A \newpage
+% ^^A \setlength{\oddsidemargin}{0pt}
+% ^^A \setlength\textwidth{15cm}
+% ^^A \normalsize
+% ^^A -----
+%
+% \IndexPrologue{%
+% \section*{Index}%
+% \markboth{Index}{Index}%
+% {\it{}The italic numbers denote the pages where the
+% corresponding entry is described,
+% numbers underlined point to the definition,
+% all others indicate the places where it is used
+% (ie. the line numbers where it appears).
+% }}
+% \Finale
+% \newpage
+% \PrintIndex \PrintChanges
diff --git a/macros/latex209/contrib/progkeys/programs.ins b/macros/latex209/contrib/progkeys/programs.ins
new file mode 100644
index 0000000000..6212a175d5
--- /dev/null
+++ b/macros/latex209/contrib/progkeys/programs.ins
@@ -0,0 +1,51 @@
+\def\ifToplevel#1{#1}
+
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{programs.ins}
+\input docstrip.tex
+\preamble
+
+Copyright: Miguel Alabau, 1995 \space\space\space Miguel.Alabau@labri.u-bordeaux.fr
+
+\endpreamble
+\keepsilent
+
+\Msg{\space\space\space\space *******************************************}
+\Msg{\space\space\space\space ** programs utility}
+\Msg{\space\space\space\space *******************************************}
+\Msg{}
+
+\Msg{*** Generating the driver files ***}
+\generateFile{programs.drv}{f}{\from{programs.doc}{driver}}
+
+\Msg{*** Generating the document package files ***}
+\generateFile{programs.sty}{f}{\from{programs.doc}{style}}
+
+\Msg{*** Generating the index files for producing the documentation crossrefs ***}
+\generateFile{programs.ist}{f}{\from{programs.doc}{index}}
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space\space\space programs.sty}
+\Msg{*}
+\Msg{* To produce the documentation of the 'programs' utility,}
+\Msg{* perform as follows:}
+\Msg{* \space\space\space\space - run three times programs.drv through LaTeX}
+\Msg{* \space\space\space\space - then run 'makeindex -s programs.ist programs.idx'}
+\Msg{* \space\space\space\space - then run once programs.drv through LaTeX}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+
+\endinput
diff --git a/macros/latex209/contrib/program/program-demo.tex b/macros/latex209/contrib/program/program-demo.tex
new file mode 100644
index 0000000000..9ec8acad5f
--- /dev/null
+++ b/macros/latex209/contrib/program/program-demo.tex
@@ -0,0 +1,306 @@
+\documentstyle[program]{article}
+\setlength{\parskip}{1ex}
+
+% Number algorithms separately:
+%\newtheorem{algorithm}{Algorithm}
+
+% Number algorithms within sections:
+\newtheorem{algorithm}{Algorithm}[section]
+
+% For "floating" algorithms, use:
+% \begin{figure}
+% \begin{program}
+% ...
+% \end{program}
+% \end{figure}
+
+
+\begin{document}
+\title{A demonstration of the {\tt program} environment}
+\author{Martin Ward\\
+Centre for Software Maintenance\\
+University of Durham}
+\maketitle
+
+\tableofcontents
+
+\section{Example with |first_set| and $|first_set|$.}
+
+The {\tt program} style defines two environments, {\tt program} and {\tt
+programbox} for typesetting programs and algorithms. Within the program
+environment:
+\begin{enumerate}
+ \item Newlines are significant;
+ \item Each line is in math mode, so for example spaces in the input
+file are not significant;
+ \item The command \verb:\\: within a line causes an extra
+linebreak in the output;
+ \item The indentation of each line is calculated automatically;
+ \item To cause extra indentation, use the commands \verb:\tab: to
+set a new tab, and \verb:\untab: to remove it (see the examples below);
+ \item Vertical bars are used to delimit long variable names with
+underscores (and other unusual characters).
+\end{enumerate}
+
+
+Here is a small program:
+\( |first_set|:= \set{x | x^2 + y_1 > 0 } \)
+It shows how to typeset mathematics as part of a program. Since each line is
+typeset in maths mode, all spacing is done automatically. The set brackets
+expand automatically, for example in this program (which also demonstrates the
+\verb:\tab: and \verb:\untab: commands):
+\begin{program}
+t := \set{x | \displaystyle\frac{x}{y} = z};
+t := t \setminus u;
+z := a \tab {} + b + c + d
+ {} + e + f + g
+ {} + h + i + j \untab
+\IF x = 0 \THEN y :=0 \FI
+\end{program}
+
+You can use |variable_names| in text or math mode: $|variable_name|^2 = 2$.
+Names can have |odd_characters:!@#$%^&*:;_like_this!|.
+
+Note that \verb:\(: and \verb:\): are redefined to typeset a program in
+a minipage. (This is useful in running text, or to keep a short program all on
+one page). There is some notation for sequences: \( \seq{x_1,x_2,\dots,x_n} \)
+and for universal and existential quantifiers: $ \Forall x. \Exists y. y>x $
+(yes, I use these in my programs!)
+
+I often use bold letters to represent program fragments, formulas etc. so
+I have set up commands \S{}, \R{} etc. for the most common ones. The
+commands have one argument (a subscript, eg \S1, \S2, \S{23}) or a
+sequence of ``prime'' characters: \S', \S''''' etc. If you want both a
+subscript and one or more primes, then you must use maths mode, eg $\S2'$
+Consider the difference between typing \verb:``\S2'': which gives ``\S2'' and
+\verb:``$\S2''$'': which gives ``$\S2''$''. Outside maths mode, \verb:\S:
+assumes any primes after a subscript are either closing quotes or apostrophes.
+
+Here are two program examples with different indentation styles. Note that
+all indentation is calculated automatically in either style:
+
+\noindent
+% programbox keeps the program on one page - like parbox
+\begin{programbox}
+\IF \T1
+ \THEN \IF \T2
+ \THEN \IF \T3
+ \THEN \S4
+ \ELSE \S3
+ \FI
+ \ELSE \S2
+ \FI
+ \ELSE \S1
+\FI;
+% Blank lines are ignored, so you need a ~ on the line
+% to get a blank line in the output:
+~
+\IF \T1 \THEN \IF \T2 \THEN \IF \T3 \THEN \S4
+ \ELSE \S3 \FI
+ \ELSE \S2 \FI
+ \ELSE \S1 \FI;
+\end{programbox}
+
+Note that \keyword{then} and \keyword{else} should be at the {\em start} of
+a line (as in the examples above), not at the end. This is so that you can
+line them up in short \keyword{if} statements, for example:
+\begin{program}
+\IF x=1 \THEN |a_long_procedure_name|(|arg1|, |arg2|, \dots)
+ \ELSE |another_long_procedure_name|(|arg1|, |arg2|, \dots) \FI
+\end{program}
+If the test is long, then you probably want an extra linebreak:
+\begin{program}
+\IF |a_long_boolean_function_name?|(|arg1|, |arg2|, \dots)
+ \THEN |a_long_procedure_name|(|arg1|, |arg2|, \dots)
+ \ELSE |another_long_procedure_name|(|arg1|, |arg2|, \dots) \FI
+\end{program}
+Compare this with the following (which has linebreaks in the ``wrong'' places):
+\begin{program}
+\IF |a_long_boolean_function_name?|(|arg1|, |arg2|, \dots) \THEN
+ |a_long_procedure_name|(|arg1|, |arg2|, \dots)
+ \ELSE
+ |another_long_procedure_name|(|arg1|, |arg2|, \dots) \FI
+\end{program}
+
+
+
+Just to show that {\tt\origbar} still works normally to indicate the
+placing of vertical lines) in the preamble of a tabular
+(or array) environment:
+
+\begin{tabular}{|r|l|} \hline
+\bf Statement & \bf Conditions \\
+\hline
+\S1 & \B1 \\
+\S2 & \B2 \\
+\hline
+\end{tabular}
+
+\section{Procedures and Functions}
+
+Turning on line numbering here. Also using the algoritm enviroment to number
+the algorithms within the sections.
+\NumberProgramstrue
+\begin{algorithm}
+\begin{program}
+\label{one}%
+\mbox{A fast exponentiation function:} \\ % You can use \mbox for comments
+\BEGIN %
+ \FOR i:=1 \TO 10 \STEP 1 \DO
+ |print|(|expt|(2,i)); \\ |newline|() \OD
+\WHERE
+\FUNCT |expt|(x,n) \BODY
+ \EXP z:=1;
+ \WHILE n \ne 0 \DO
+ \WHILE |even|(n) \DO
+ n:=n/2; x:=x*x \OD; \label{foo}
+ n:=n-1; z:=z*x \OD;
+ z \ENDEXP \ENDFUNCT
+\END\label{last}
+\end{program}
+\end{algorithm}
+First line is line~\ref{one}, last is line~\ref{last}.
+Line~\ref{foo} is what makes this function fast!
+
+\begin{algorithm}
+\begin{program}
+\mbox{A fast exponentiation procedure:}
+\BEGIN %
+ \FOR i:=1 \TO 10 \STEP 1 \DO
+ |expt|(2,i); \\ |newline|() \OD %
+\rcomment{This text will be set flush to the right margin}
+\WHERE
+\PROC |expt|(x,n) \BODY
+ z:=1;
+ \DO \IF n=0 \THEN \EXIT \FI;
+ \DO \IF |odd|(n) \THEN \EXIT \FI;
+\COMMENT{This is a comment statement};
+ n:=n/2; x:=x*x \OD;
+ \{ n>0 \};
+ n:=n-1; z:=z*x \OD;
+ |print|(z) \ENDPROC
+\END
+\end{program}
+\end{algorithm}
+
+\noindent An action system equivalent to a \keyword{while} loop:
+\[
+\( \ACTIONS A:
+ A \EQ \IF \B{} \THEN \S{}; \CALL A
+ \ELSE \CALL Z \FI \QE
+ \ENDACTIONS \)
+\EQT
+\( \WHILE \B{} \DO \S{} \OD \)
+\]
+Note the use of \verb:\(: and \verb:\): to enclose the two program boxes.
+Turning off line numbers here.
+\NumberProgramsfalse
+
+\noindent Dijkstra conditionals and loops:
+\begin{program}
+\IF x = 1 \AR y:=y+1
+\BAR x = 2 \AR y:=y^2
+\utdots
+\BAR x = n \AR y:=\displaystyle\sum_{i=1}^n y_i \FI
+
+\DO 2 \origbar x \AND x>0 \AR x:= x/2
+\BAR \NOT 2 \origbar x \AR x:= \modbar{x+3} \OD
+\end{program}
+
+\noindent Loops with multiple \keyword{exit}s:
+\begin{program}
+\DO \DO \IF \B1 \THEN \EXIT \FI;
+ \S1;
+ \IF \B2 \THEN \EXIT(2) \FI \OD;
+ \IF \B1 \THEN \EXIT \FI \OD
+\end{program}
+
+\noindent I hope you get the idea!
+
+\section{A Reverse Engineering Example}
+
+Here's the original program:
+\begin{algorithm}
+\begin{program}
+ \VAR \seq{m := 0, p := 0, |last| := `` ''};
+ \ACTIONS |prog|:
+|prog| \ACTIONEQ %
+ \seq{|line| := `` '', m := 0, i := 1};
+ \CALL |inhere| \ENDACTION
+l \ACTIONEQ %
+ i := i+1;
+ \IF (i=(n+1)) \THEN \CALL |alldone| \FI ;
+ m := 1;
+ \IF |item|[i] \neq |last|
+ \THEN |write|(|line|); |line| := `` ''; m := 0;
+ \CALL |inhere| \FI ;
+ \CALL |more| \ENDACTION
+|inhere| \ACTIONEQ %
+ p := |number|[i]; |line| := |item|[i];
+ |line| := |line| \concat `` '' \concat p;
+ \CALL |more| \ENDACTION
+|more| \ACTIONEQ %
+ \IF (m=1) \THEN p := |number|[i];
+ |line| := |line| \concat ``, '' \concat p \FI ;
+ |last| := |item|[i];
+ \CALL l \ENDACTION
+|alldone| \ACTIONEQ |write|(|line|); \CALL Z \ENDACTION \ENDACTIONS \END
+\end{program}
+\end{algorithm}
+
+And here's the transformed and corrected version:
+\begin{algorithm}
+\begin{program}
+\seq{|line| := `` '', i := 1};
+\WHILE i \neq n+1 \DO
+ |line| := |item|[i] \concat `` '' \concat |number|[i];
+ i := i+1;
+ \WHILE i \neq n+1 \AND |item|[i] = |item|[i-1] \DO
+ |line| := |line| \concat ``, '' \concat |number|[i]);
+ i := i+1 \OD ;
+ |write|(|line|) \OD
+\end{program}
+\end{algorithm}
+
+These are the same programs in a sans-serif style, using the command
+\verb:\sfvariables::
+\sfvariables
+\begin{program}
+ \VAR \seq{m := 0, p := 0, |last| := `` ''};
+ \ACTIONS |prog|:
+|prog| \ACTIONEQ %
+ \seq{|line| := `` '', m := 0, i := 1};
+ \CALL |inhere| \ENDACTION
+l \ACTIONEQ %
+ i := i+1;
+ \IF (i=(n+1)) \THEN \CALL |alldone| \FI ;
+ m := 1;
+ \IF |item|[i] \neq |last|
+ \THEN |write|(|line|); |line| := `` ''; m := 0;
+ \CALL |inhere| \FI ;
+ \CALL |more| \ENDACTION
+|inhere| \ACTIONEQ %
+ p := |number|[i]; |line| := |item|[i];
+ |line| := |line| \concat `` '' \concat p;
+ \CALL |more| \ENDACTION
+|more| \ACTIONEQ %
+ \IF (m=1) \THEN p := |number|[i];
+ |line| := |line| \concat ``, '' \concat p \FI ;
+ |last| := |item|[i];
+ \CALL l \ENDACTION
+|alldone| \ACTIONEQ |write|(|line|); \CALL Z \ENDACTION \ENDACTIONS \END
+\end{program}
+
+\begin{program}
+\seq{|line|:=`` '', i:=1};
+\WHILE i \neq n+1 \DO
+ |line| := |item|[i] \concat `` '' \concat |number|[i];
+ i := i+1;
+ \WHILE i \neq n+1 \AND |item|[i] = |item|[i-1] \DO
+ |line| := |line| \concat ``, '' \concat |number|[i]);
+ i := i+1 \OD ;
+ |write|(|line|) \OD
+\end{program}
+
+\end{document}
+
diff --git a/macros/latex209/contrib/program/program-msg b/macros/latex209/contrib/program/program-msg
new file mode 100644
index 0000000000..2e53855431
--- /dev/null
+++ b/macros/latex209/contrib/program/program-msg
@@ -0,0 +1,22 @@
+
+Here's a copy of my LaTeX style file for typesetting programs and
+algorithms in my favourite style without having to type in endless tabbing
+commands. Each line is set in math mode so all the indentation and spacing
+is done automatically. The notation |variable_name| can be used within
+normal text, maths expressions or programs to indicate a variable name.
+Use \origbar to get a normal | symbol in a program. The commands \A, \B, \R, \T
+and \Z typeset the corresponding bold letter with the next object as a
+substript (eg \S1 typesets {\bf S$_1$} etc). They now cope with primes as
+well, (eg \S'''). The program.sty file can be
+easily edited to reflect your favoured style. See the program-demo.tex file
+for examples.
+
+The file should work with or without AMSLaTeX and the new font selection
+scheme.
+
+ Martin.
+
+JANET: Martin.Ward@uk.ac.durham Internet (eg US): Martin.Ward@durham.ac.uk
+or if that fails: Martin.Ward%uk.ac.durham@nsfnet-relay.ac.uk
+or even: Martin.Ward%DURHAM.AC.UK@CUNYVM.CUNY.EDU
+BITNET: Martin.Ward%durham.ac.uk@UKACRL UUCP:...!ukc!durham!Martin.Ward
diff --git a/macros/latex209/contrib/ps-latex/ps-caveat.txt b/macros/latex209/contrib/ps-latex/ps-caveat.txt
new file mode 100644
index 0000000000..0b8b92a449
--- /dev/null
+++ b/macros/latex209/contrib/ps-latex/ps-caveat.txt
@@ -0,0 +1,8 @@
+Caveat: these files were written by a non-LaTeX user (I am strictly a
+PLAIN user), and may therefore be incomplete, sub-optimal, or even
+wrong. However, they are currently being used in Canada to produced a
+700pp book, and no insurmountable problems have yet arisen. There are
+various afterthoughts, including such features as: Greek majuscules;
+upright minuscule \mu; re-position of maths operators (vertically) which
+have not been subsumed into the PS-* files but which are later appended
+through the .STY file; these could be made available on request.
diff --git a/macros/latex209/contrib/ps-latex/ps-latex.tex b/macros/latex209/contrib/ps-latex/ps-latex.tex
new file mode 100644
index 0000000000..d51fa364b1
--- /dev/null
+++ b/macros/latex209/contrib/ps-latex/ps-latex.tex
@@ -0,0 +1,7107 @@
+% PS-LATEX VERSION 2.09 - RELEASE OF 19th September 1988
+% derived directly from
+% LATEX VERSION 2.09 - RELEASE OF 18 December 1985
+% Copyright (C) 1985 by Leslie Lamport
+
+\everyjob{\typeout{PS-LaTeX Version 2.09 - Released 19 September 1988}}
+\immediate\write10{PS-LaTeX Version 2.09 - Released 19 September 1988}
+
+% TABLE OF CONTENTS
+% COMMAND LIST ....................................... 2
+% GENERAL CONVENTIONS .................................. 6
+% COUNTERS, ETC. ....................................... 7
+% USEFUL HACKS ......................................... 8
+% ERROR HANDLING ....................................... 12
+% \par AND \everypar ................................... 15
+% SPACING / LINE AND PAGE BREAKING ..................... 17
+% PROGRAM CONTROL STRUCTURE MACROS ..................... 21
+% FILE HANDLING ........................................ 24
+% ENVIRONMENT COUNTER MACROS ........................... 27
+% PAGE NUMBERING ....................................... 30
+% CROSS REFERENCING MACROS ............................ 31
+% ENVIRONMENTS ......................................... 33
+% MATH ENVIRONMENTS .................................... 36
+% CENTER, FLUSHRIGHT, FLUSHLEFT, ETC. .................. 39
+% VERBATIM ............................................. 40
+% THE LIST ENVIRONMENT ................................. 41
+% ITEMIZE AND ENUMERATE ................................ 49
+% BOXES ................................................ 51
+% THE TABBING ENVIRONMENT .............................. 57
+% ARRAY AND TABULAR ENVIRONMENTS ....................... 63
+% THE PICTURE ENVIRONMENT .............................. 72
+% THEOREM ENVIRONMENTS ................................. 86
+% LENGTHS .............................................. 88
+% THE TITLE .............................................89
+% SECTIONING ........................................... 90
+% TABLE OF CONTENTS, ETC. .............................. 94
+% INDEX COMMANDS ....................................... 97
+% BIBLIOGRAPHY ......................................... 98
+% FLOATS .............................................. 100
+% FOOTNOTES ........................................... 106
+% INITIAL DECLARATION COMMANDS ........................ 110
+% OUTPUT .............................................. 113
+% DEBUGGING AND TEST INITIALIZATIONS ................. 137
+
+
+\catcode`\~=13 \def~{\penalty\@M \ }
+
+
+% ****************************************
+% * COMMAND LIST *
+% ****************************************
+%
+% DECLARATIONS:
+% PREAMBLE: \nofiles \documentstyle \includeonly
+% \makeindex \makeglossary
+% IN DOCUMENT :
+% FONT SELECTION:
+% SIZE: \normalsize \small \footnotesize \scriptsize \scriptscriptsize
+% \big \Big \BIG
+% STYLE: \bf \it \rm \sl \ss \tt \mit[math mode only]
+% STYLE:
+% PAGE: [all global] \pagestyle \thispagestyle \pagenumbering \head
+% MISC: \raggedright \thicklines \thinlines
+% PARAMETER: \setlength \settowidth \addtolength \setcounter \addtocounter
+% NEW: \newlength \newtheorem \newcommand
+% MISC: \savebox \sbox \obeycr \restorecr
+%
+% ENVIRONMENTS:
+% ? -> PAR: document
+% PAR -> PAR: list enumerate itemize description
+% center flushright flushleft
+% verbatim picture float
+% PAR -> BOX: tabular tabbing
+% PAR -> MATH: math displaymath equation
+% MATH -> MATH: array
+% ANY -> PAR: minipage
+% ANY -> BOX: stack
+%
+% TEXT-PRODUCING:
+% WITH TEXT ARGUMENT:
+% ANY -> BOX: \makebox \mbox \framebox \fbox \dashbox
+% \shortstack \footnotemark \cite[] \raisebox
+% ANY -> PAR: \parbox[inner]
+% PAR -> PAR: \chapter \section ... \footnote \footnotetext
+% \topnewpage \verb
+% MATH: \sqrt \underline \overline
+% PICTURE: \put \multiput
+% LIST: \item
+% WITHOUT TEXT ARGUMENT:
+% ANY MODE:
+% SYMBOLS: \$ \{ \} \_ \@ \& \#
+% ACCENTS: See TeXbook
+% OTHER: \rule \ref \pageref \today \usebox \typein \input \cite
+% MATH: \over
+% PAR MODE: \include \bibliography \tableofcontents \listoffigures ...
+% LIST: \item \arabic \roman \Roman \alph \Alph
+% PICTURE: \line \vector \circle \oval
+% ARRAY & TABULAR: \hline \vline
+%
+% SPACING & BREAKING:
+% ANY : \hfill \hspace
+% PAR : \newpage \newpage \vspace \noindent
+% PAR & INNER MATH
+% : \newpage \clearpage \cleardoublepage
+% : \pagebreak \nopagebreak \linebreak \nolinebreak \newline
+% MATH : \over \; \, \!
+% MULTILINE : \\
+% TABBING : \pushtab \poptab \> \< \+ \- \kill ...
+% ARRAY & TABULAR
+% : \multicolumn \noalign
+%
+% NO DIRECT CHANGES TO DOCUMENT:
+% \index \glossary \typeout \label \tableentry \stop \protect
+%
+% PARAMETERS:
+%
+% \columnsep \skip\footin \intextsep
+% \columnseprule \oddsidemargin
+% \columnwidth \textfloatsep
+% \evensidemargin \footsep \textheight
+% \floatsep \headheight \textwidth
+% \footheight \headsep \topmargin
+
+
+% ALPHABETIZED LIST:
+%
+% ORDINARY COMMANDS:
+%
+% \Alph \include \parbox
+% \Roman \index \put
+% \\ \item \raisebox
+% \alph \label \ref
+% \appendix \line \roman
+% \arabic \linebreak \rule
+% \bibliography \listoffigures \section
+% \chapter \listoftables \shortstack
+% \circle \makebox \stop
+% \cite \mbox \subsection
+% \cite \multicolumn \subsubsection
+% \cleardoublepage \multiput \tableentry
+% \clearpage \tableofcontents
+% \dashbox \newline \today
+% \fbox \newpage \typein
+% \footnotemark \noindent \typeout
+% \footnotetext \nolinebreak \usebox
+% \framebox \nopagebreak \vector
+% \glossary \oval \vline
+% \hline \pagebreak \vspace
+% \hspace \pageref \protect
+%
+%
+% ENVIRONMENTS & DECLARATIONS:
+%
+% For each of these commands, the same command name prefixed by 'end'
+% is also reserved--e.g., \enddocument.
+%
+% \BIG \footnotesize \pagestyle
+% \Big \head \picture
+% \addtocounter \includeonly \raggedright
+% \addtolength \itemize \restorecr
+% \array \list \savebox
+% \big \makeglossary \sbox
+% \center \makeindex \scriptscriptsize
+% \description \math \scriptsize
+% \displaymath \minipage \setcounter
+% \document \newcommand \setlength
+% \documentstyle \newlength \settowidth
+% \enumerate \newtheorem \small
+% \equation \nofiles \shortstack\tabbing
+% \normalsize \tabular
+% \float \obeycr \thicklines
+% \flushleft \pagelayout \thinlines
+% \flushright \pagenumbering \thispagestyle
+% \verb, \verbatim
+%
+% PARAMETERS :
+%
+% \columnsep \footinsertskip \intextsep
+% \columnseprule \oddsidemargin
+% \columnwidth \textfloatsep
+% \evensidemargin \footsep \textheight
+% \floatsep \headheight \textwidth
+% \footheight \headsep \topmargin
+%
+%
+% TABBING COMMANDS:
+%
+% These commannds are defined only within a tabbing environment.
+%
+% \kill \> \-
+% \pushtab \< \=
+% \poptab \+
+
+
+
+
+% ****************************************
+% * GENERAL CONVENTIONS *
+% ****************************************
+%
+% THE \LaTeX LOGO IS DEFINED HERE.
+%
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em
+ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
+
+% SAVED VERSIONS OF TeX PRIMITIVES:
+%
+% The TeX primitive \foo is saved as \@@foo . The following primitives
+% are handled in this way:
+
+\let\@@par=\par
+%\let\@@relax=\relax % This was needed at one time, but seems to be obsolete.
+\let\@@input=\input
+\let\@@end=\end
+
+% SAVED VERSIONS OF TeX PARAMETERS
+%
+% \normalbaselineskip and \normallineskip hold the
+% normal values of \baselineskip and \lineskip
+
+% Any font-changing commands that change the normal value of \lineskip
+% and \baselineskip should change their saved values.
+
+% The following definitions save token space. E.g., using \@height
+% instead of height saves 5 tokens at the cost in time of one macro
+% expansion.
+
+\def\@height{height}
+\def\@depth{depth}
+\def\@width{width}
+
+% The following implements the LaTeX \{ and \} commands.
+
+\def\{{\relax\ifmmode\lbrace\else$\lbrace$\fi}
+\def\}{\relax\ifmmode\rbrace\else$\rbrace$\fi}
+
+ \message{counters,}
+% ****************************************
+% * COUNTERS, ETC. *
+% ****************************************
+%
+% THE FOLLOWING ARE FROM PLAIN:
+% \z@ : A zero dimen or number. It's more efficient to write
+% \parindent\z@ than \parindent 0pt.
+% \@ne : The number 1.
+% \m@ne : The number -1.
+% \tw@ : The number 2.
+% \sixt@@n : The number 16.
+% \@m : The number 1000.
+% \@xxxii : The number 32
+% \@M : The number 10000.
+% \@Mi : The number 10001.
+% \@Mii : The number 10002.
+% \@Miii : The number 10003.
+% \@Miv : The number 10004.
+% \@MM : The number 20000.
+%
+% \@flushglue : Glue used for \right- & \leftskip to = 0pt plus 1fil
+
+\chardef\@xxxii=32
+\mathchardef\@Mi=10001
+\mathchardef\@Mii=10002
+\mathchardef\@Miii=10003
+\mathchardef\@Miv=10004
+
+% Redefine PLAIN.TEX macros not to be \outer
+
+\def\newcount{\alloc@0\count\countdef\insc@unt}
+\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
+\def\newskip{\alloc@2\skip\skipdef\insc@unt}
+\def\newbox{\alloc@4\box\chardef\insc@unt}
+\def\newwrite{\alloc@7\write\chardef\sixt@@n}
+
+\newwrite\@unused
+\newcount\@tempcnta
+\newcount\@tempcntb
+\newif\if@tempswa\@tempswatrue
+
+\newdimen\@tempdima
+\newdimen\@tempdimb
+
+\newbox\@tempboxa
+
+\newskip\@flushglue \@flushglue = 0pt plus 1fil
+\newskip\@tempskipa
+\newskip\@tempskipb
+\newtoks\@temptokena
+
+ \message{hacks,}
+% ****************************************
+% * USEFUL HACKS *
+% ****************************************
+%
+% \@namedef{NAME} : Expands to \def\NAME , except name can contain any
+% characters.
+% \@nameuse{NAME} : Expands to \NAME .
+%
+% \@ifnextchar X{YES}{NO}
+% : Expands to YES if next character is an 'X',
+% and to NO otherwise. (Uses temps a-c.)
+% NOTE: GOBBLES ANY SPACE FOLLOWING IT.
+%
+% \@ifstar{YES}{NO} : Gobbles following spaces and then tests if next the
+% character is a '*'. If it is, then it gobbles the
+% '*' and expands to YES, otherwise it expands to NO.
+%
+% \@dblarg{CMD}{ARG} : \@dblarg{CMD}{ARG} expands to CMD[ARG]{ARG}. Use
+% \@dblarg\CS when \CS takes arguments [ARG1]{ARG2},
+% where default is ARG1 = ARG2.
+%
+% \@ifundefined{NAME}{YES}{NO}
+% : If \NAME is undefined then it executes YES,
+% otherwise it executes NO. More precisely,
+% true if \NAME either undefined or = \relax.
+% \@ifdefinable \NAME {YES}
+% : Executes YES if the user is allowed to define \NAME,
+% otherwise it gives an error. The user can define \NAME
+% if \@ifundefined{NAME} is true, 'NAME' /= 'relax'
+% and the first three letters of 'NAME' are not
+% 'end'.
+% \newcommand{\FOO}[i]{TEXT}
+% : User command to define \FOO to be a macro with
+% i arguments (i = 0 if missing) having the definition
+% TEXT. Produces an error if \FOO already defined.
+%
+% \renewcommand{\FOO}[i]{TEXT} : Same as \newcommand, except it
+% checks if \FOO already defined.
+%
+% \newenvironment{FOO}[i]{DEF1}{DEF2}
+% equivalent to
+% \newcommand{\FOO}[i]{DEF1} \def{\endFOO}{DEF2}
+%
+% \renewenvironment : obvious companion to \newenvironment
+%
+% \@cons : See description of \output routine.
+%
+% \@car T1 T2 ... Tn\@nil == T1 (unexpanded)
+%
+% \@cdr T1 T2 ... Tn\@nil == T2 ... Tn (unexpanded)
+%
+% \typeout{message} : produces a warning message on the terminal
+%
+% \@warning{message}: prints 'LaTeX Warning: message.'
+%
+% \typein{message} : Types message, asks the user to type in a command, then
+% executes it
+%
+% \typein[\CS]{MSG} : Same as above, except defines \CS to be the input
+% instead of executing it.
+
+\def\typein{\let\@typein\relax\@ifnextchar[{\@xtypein}{\@xtypein[\@typein]}}
+\def\@xtypein[#1]#2{\typeout{#2}\read0 to#1\ifx #1\@defpar \def#1{}\else
+ \@iden{\expandafter\@strip\expandafter
+ #1#1\@gobble\@gobble} \@gobble\fi\@typein}
+\def\@strip#1#2 \@gobble{\def #1{#2}}
+\def\@defpar{\par}
+\def\@iden#1{#1}
+
+\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
+\def\@warning#1{\typeout{LaTeX Warning: #1.}}
+\def\@namedef#1{\expandafter\def\csname #1\endcsname}
+\def\@nameuse#1{\csname #1\endcsname}
+
+\def\@cons#1#2{\begingroup\let\@elt\relax\xdef#1{#1\@elt #2}\endgroup}
+
+\def\@car#1#2\@nil{#1}
+\def\@cdr#1#2\@nil{#2}
+
+% \@carcube T1 ... Tn\@nil = T1 T2 T3 , n > 3
+\def\@carcube#1#2#3#4\@nil{#1#2#3}
+
+\def\newcommand#1{\@ifnextchar [{\@argdef#1}{\@argdef#1[0]}}
+
+\def\renewcommand#1{\edef\@tempa{\expandafter\@cdr\string
+ #1\@nil}\@ifundefined{\@tempa}{\@latexerr{\string#1\space undefined}\@ehc
+ }{}\@ifnextchar [{\@reargdef#1}{\@reargdef#1[0]}}
+
+\def\newenvironment#1{\@ifnextchar
+ [{\@newenv{#1}}{\@newenv{#1}[0]}}
+
+\def\@newenv#1[#2]#3{\expandafter\newcommand
+ \csname #1\endcsname[#2]{#3}\expandafter\def\csname end#1\endcsname}
+
+\def\renewenvironment#1{\@ifnextchar
+ [{\@renewenv{#1}}{\@renewenv{#1}[0]}}
+
+\def\@renewenv#1[#2]#3{\expandafter\renewcommand
+ \csname #1\endcsname[#2]{#3}\expandafter\def\csname end#1\endcsname}
+
+\long\def\@argdef#1[#2]#3{\@ifdefinable #1{\@reargdef#1[#2]{#3}}}
+
+\long\def\@reargdef#1[#2]#3{\@tempcnta#2\relax\let#1\relax
+\edef\@tempa{\long\def#1}\@tempcntb \@ne
+\let\@tempb\relax\@whilenum\@tempcnta>0
+\do{\edef\@tempa{\@tempa\@tempb\the\@tempcntb}\advance\@tempcntb \@ne \advance
+\@tempcnta \m@ne}\let\@tempb##\@tempa{#3}}
+
+
+\long\def\@ifdefinable #1#2{\edef\@tempa{\expandafter\@cdr\string #1\@nil}
+\@ifundefined{\@tempa}{\edef\@tempb{\expandafter\@carcube \@tempa xxxx\@nil}%
+\ifx \@tempb\@qend \@notdefinable\else
+\ifx \@tempa\@qrelax \@notdefinable\else #2\fi\fi}{\@notdefinable}}
+
+\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
+ #1\endcsname\relax#2\else#3\fi}
+
+
+% The following define \@qend and \@qrelax to be the strings 'end' and
+% 'relax' with the characters \catcoded 12.
+
+\edef\@qend{\expandafter\@cdr\string\end\@nil}
+\edef\@qrelax{\expandafter\@cdr\string\relax\@nil}
+
+% \@ifnextchar X{YES}{NO}
+% BEGIN
+% \@tempe := X % uses \let
+% \@tempa := YES
+% \@tempb := NO
+% \futurelet\@tempc
+% \@ifnch
+% END
+%
+% \@ifnch ==
+% BEGIN
+% if \@tempc = blank space
+% then \@tempd := def(\@xifnch)
+% else if \@tempc = \@tempe
+% then \@tempd := def(\@tempa)
+% else \@tempd := def(\@tempb)
+% fi
+% fi
+% \@tempd
+% END
+%
+% \@xifnch ==
+% BEGIN
+% gobble blanks
+% \futurelet\@tempc
+% \@ifnch
+% END
+%
+\def\@ifnextchar#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}\futurelet
+ \@tempc\@ifnch}
+\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi
+ \fi \@tempd}
+
+% NOTE: the following hacking must precede the definition of \:
+% as math medium space.
+
+\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token
+
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}
+
+\def\@ifstar#1#2{\@ifnextchar *{\def\@tempa*{#1}\@tempa}{#2}}
+
+\long\def\@dblarg#1{\@ifnextchar[{#1}{\@xdblarg{#1}}}
+\long\def\@xdblarg#1#2{#1[{#2}]{#2}}
+
+% The command \@sanitize changes the catcode of all special characters
+% except for braces to 'other'. It can be used for commands like
+% \index that want to write their arguments verbatim. Needless to
+% say, this command should only be executed within a group, or chaos
+% will ensue.
+
+\def\@sanitize{\@makeother\ \@makeother\\\@makeother\$\@makeother\&%
+\@makeother\#\@makeother\^\@makeother\^^K\@makeother\_\@makeother\^^A%
+\@makeother\%\@makeother\~}
+
+
+ \message{errors,}
+% ****************************************
+% * ERROR HANDLING *
+% ****************************************
+%
+% \@latexerr{MSG}{HLP}: Types a LaTeX error message MSG and gives an error
+% halt with error help message HLP.
+%
+\newlinechar`\^^J
+
+
+\def\@latexerr#1#2{\begingroup
+\edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+\typeout{LaTeX error. \space See LaTeX manual for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}\endgroup}
+
+\def\@spaces{\space\space\space\space}
+
+%% error help message pieces.
+\def\@eha{Your command was ignored.
+^^JType \space I <command> <return> \space to replace it
+ with another command,^^Jor \space <return> \space to continue without it.}
+\def\@ehb{You've lost some text. \space \@ehc}
+\def\@ehc{Try typing \space <return>
+ \space to proceed.^^JIf that doesn't work, type \space X <return> \space to
+ quit.}
+\def\@ehd{You're in trouble here. \space\@ehc}
+
+% Here are all the error message-generating commands of LaTeX.
+%
+% \@notdefinable : Error message generated in \@ifdefinable from calls
+% by \newcommand, \newlength, \newtheorem specifying an
+% already-defined command name.
+%
+% \@nolnerr : Generated by \newline and \\ when called in vertical mode.
+%
+% '\... undefined' : Generated in \renewcommand.
+%
+% \@nocnterr : Generated by \setcounter, \addtocounter or \newcounter
+% for undefined counter.
+%
+% \@ctrerr : Called when trying to print the value of a counter
+% numbered by letters that's greater than 26.
+%
+% 'Environment --- undefined' : Issued by \begin for undefined environment.
+%
+% \@badend : Called by \end that doesn't match its \begin.
+%
+% \@badmath : Called by \[, \], \( or \) when used in wrong mode.
+%
+% \@toodeep : Called by a list environment nested more than six levels
+% deep, or an enumerate or itemize nested more than four
+% levels.
+%
+% \@badpoptabs : Called by \endtabbing when not enough \poptabs have
+% occurred, or by \poptabs when too many have occurred.
+%
+% \@badtab : Called by \>, \+ , \- or \< when stepping to an undefined tab.
+%
+% 'tab overflow' : Occurs in \= when maximum number of tabs exceeded.
+%
+% '\< in mid line' : Occurs in \< when it appears in middle of line.
+%
+% \@preamerr : Occurs in array or tabular environment, or in \multicolumn
+% command, when error in argument detected.
+%
+% \@badlinearg : Occurs in \line and \vector command when a bad slope
+% argument is encountered.
+%
+% \@parmoderr : Occurs in a float environment or a \marginpar when
+% encountered in inner vertical mode.
+%
+% \@fltovf : Occurs in float environment or \marginpar when there
+% are no more free boxes for storing floats.
+%
+% \@latexbug : Occurs in output routine. This is bad news.
+%
+% 'Float(s) lost' : In output routine, caused by a float environment or
+% \marginpar occurring in inner vertical mode.
+%
+% \@nofonterror : Typeface not available. %%% OBSOLETE; DELETED.
+%
+% \@badcrerr : A \\ used where it shouldn't be in a centering or flushing
+% environment.
+%
+% \@noitemerr : \addvspace or \addpenalty was called when not in vmode.
+% Probably caused by a missing \item.
+%
+% \@notprerr : A command that can be used only in the preamble
+% appears after the \begin{document} command.
+
+\def\@notdefinable{\@latexerr{Command name '\@tempa' already used}\@eha}
+
+\def\@nolnerr{\@latexerr{There's no line here to end}\@eha}
+
+\def\@nocnterr{\@latexerr{No such counter}\@eha}
+
+\def\@ctrerr{\@latexerr{Counter too large}\@ehb}
+
+\def\@nodocument{\@latexerr{Missing \string\begin{document}}\@ehd}
+
+\def\@badend#1{\@latexerr{\string\begin{\@currenvir} ended by
+ \string\end{#1}}\@eha}
+
+\def\@badmath{\@latexerr{Bad math environment delimiter}\@eha}
+
+\def\@toodeep{\@latexerr{Too deeply nested}\@ehd}
+
+\def\@badpoptabs{\@latexerr{\string\pushtabs \space and \string\poptabs
+ \space don't match}\@ehd}
+
+\def\@badtab{\@latexerr{Undefined tab position}\@ehd}
+
+\def\@preamerr#1{\@latexerr{\ifcase #1 Illegal character\or
+ Missing @-exp\or Missing p-arg\fi\space
+ in array arg}\@ehd}
+
+\def\@badlinearg{\@latexerr{Bad \string\line\space or \string\vector
+ \space argument}\@ehb}
+
+\def\@parmoderr{\@latexerr{Not in outer par mode}\@ehb}
+
+\def\@fltovf{\@latexerr{Too many unprocessed floats}\@ehb}
+
+\def\@latexbug{\@latexerr{This may be a LaTeX bug}{Call for help}}
+
+% \def\@nofonterror{\@latexerr{Typeface not available}\@eha}
+
+\def\@badcrerr {\@latexerr{Bad use of \string\\}\@ehc}
+
+\def\@noitemerr{\@latexerr{Something's wrong--perhaps a missing
+\string\item}\@ehc}
+
+\def\@notprerr {\@latexerr{Can be used only in preamble}\@eha}
+
+ \message{par,}
+% ****************************************
+% * \par AND \everypar *
+% ****************************************
+%
+% There are two situations in which \par may be changed:
+%
+% - Long-term changes, in which the new value is to remain in effect
+% until the current environment is left. The environments that
+% change \par in this way are the following:
+%
+% * All list environments (itemize, quote, etc.)
+% * Environments that turn \par into a noop:
+% tabbing, array and tabular.
+%
+% - Temporary changes, in which \par is restored to its previous value the
+% next time it is executed. The following are all such uses.
+% * \@endparenv [used inside \endtrivlist]
+% * The mechanism for avoiding page breaks and getting the
+% spacing right after section heads.
+%
+% To permit the proper interaction of these two situations, long-term
+% changes are made by the following command:
+% \@setpar{VAL} : To set \par. It \def's \par and \@par to VAL.
+% Short-term changes are made by the usual \def\par commands.
+% The original values are restored after a short-term change
+% by the \@restorepar commands.
+%
+% NOTE: \@@par always is defined to be the original TeX \par.
+%
+% \everypar is changed only for the short term. Whenever \everypar
+% is set non-null, it should restore itself to null when executed.
+% The following commands change \everypar in this way:
+% * \item
+% * \@endparenv [used inside \endtrivlist]
+% * \minipage
+%
+% WARNING: Commands that make short-term changes to \par and \everypar
+% must take account of the possibility that the new commands and the
+% ones that do the restoration may be executed inside a group. In
+% particular, \everypar is executed inside a group whenever a new paragraph
+% begins with a left brace. The \everypar command that restores its
+% definition should be local to the current group (in case the command
+% is inside a minipage used inside someplace where \everypar has been
+% redefined). Thus, if \everypar is redefined to do an \everypar{}
+% it could take several executions of \everypar before
+% the restoration 'holds'. This usually causes no problem. However, to
+% prevent the extra executions from doing harm, use a global switch
+% to keep anything harmful in the new \everypar from being done twice.
+%
+% WARNING: Commands that change \everypar should remember that \everypar
+% might be supposed to set the following switches false:
+% @nobreak
+% @minipage
+% they should do the setting if necessary.
+
+\def\@par{\let\par=\@@par\par}
+
+\def\@setpar#1{\def\par{#1}\def\@par{#1}}
+\def\@restorepar{\def\par{\@par}}
+
+ \message{spacing,}
+% **********************************************
+% * SPACING / LINE AND PAGE BREAKING *
+% **********************************************
+%
+% USER COMMANDS:
+% \nopagebreak[i] : i = 0,...,4. Default argument = 4. Puts a penalty
+% into the vertical list output as follows:
+% 0 : penalty = 0
+% 1 : penalty = \@lowpenalty
+% 2 : penalty = \@medpenalty
+% 3 : penalty = \@highpenalty
+% 4 : penalty = 10000
+% \pagebreak[i] : same as \nopagebreak except negatives of its penalty
+% \linebreak[i], \nolinebreak[i] : analogs of the above
+% \samepage : inhibits page breaking most places by setting the following
+% penalties to 10000
+% \interlinepenalty
+% \postdisplaypenalty
+% \interdisplaylinepenalty
+% \@beginparpenalty
+% \@endparpenalty
+% \@itempenalty
+% \@secpenalty
+% \interfootnotelinepenalty
+%
+% \obeycr : defines <CR> == \\.
+% \restorecr : restores <CR> to its usual meaning.
+%
+% \\ : initially defined to be \newline
+% \\[LENGTH] : initially defined to be \vspace{LENGTH}\newline
+% Note: \\* adds a \vadjust{\penalty 10000}
+
+\def\nopagebreak{\@ifnextchar[{\@nopgbk}{\@nopgbk[4]}}
+\def\@nopgbk[#1]{\ifvmode \penalty \@getpen{#1}\else
+\@bsphack\vadjust{\penalty \@getpen{#1}}\@esphack\fi}
+
+\def\pagebreak{\@ifnextchar[{\@pgbk}{\@pgbk[4]}}
+\def\@pgbk[#1]{\ifvmode \penalty -\@getpen{#1}\else
+\@bsphack\vadjust{\penalty -\@getpen{#1}}\@esphack\fi}
+
+\def\nolinebreak{\@ifnextchar[{\@nolnbk}{\@nolnbk[4]}}
+\def\@nolnbk[#1]{\ifvmode \@nolnerr\else \@tempskipa\lastskip
+ \unskip \penalty \@getpen{#1}\ifdim \@tempskipa >\z@
+ \hskip\@tempskipa\ignorespaces\fi\fi}
+
+\def\linebreak{\@ifnextchar[{\@lnbk}{\@lnbk[4]}}
+\def\@lnbk[#1]{\ifvmode \@nolnerr\else
+ \unskip\penalty -\@getpen{#1}\fi}
+
+\def\samepage{\interlinepenalty\@M
+ \postdisplaypenalty\@M
+ \interdisplaylinepenalty\@M
+ \@beginparpenalty\@M
+ \@endparpenalty\@M
+ \@itempenalty\@M
+ \@secpenalty\@M
+ \interfootnotelinepenalty\@M}
+
+\def\newline{\ifvmode \@nolnerr \else \unskip\hfil \penalty -\@M\relax\fi}
+
+\def\@normalcr{\@ifstar{\vadjust{\penalty\@M}\@xnewline}{\@xnewline}}
+
+\def\@xnewline{\@ifnextchar[{\@newline}{\newline}}
+
+\def\@newline[#1]{\ifhmode\unskip\fi\vspace{#1}\newline}
+
+\let\\=\@normalcr
+
+\def\@getpen#1{\ifcase #1 0 \or \@lowpenalty\or
+ \@medpenalty \or \@highpenalty
+ \else \@M \fi}
+
+% @nobreak : Switch used to avoid page breaks caused by \label after a section
+% heading, etc. It should be GLOBALLY set true after the \nobreak
+% and GLOBALLY set false by the next invocation of \everypar.
+% Commands that reset \everypar should globally set it false
+% if appropriate.
+%
+\newif\if@nobreak \@nobreakfalse
+
+% \@bsphack ... \@esphack
+% used by macros such as \index and \begin{@float} ... \end{@float}
+% that want to be invisible -- i.e.,
+% not leave any extra space when used in the middle of text. Such
+% a macro should begin with \@bsphack and end with \@esphack
+% The macro in question should not create any text, nor change the
+% mode.
+%
+% \@bsphack ==
+% BEGIN
+% \dimen\@savsk := \lastskip
+% if hmode then \@savsf := \spacefactor fi
+% END
+%
+% \@esphack ==
+% BEGIN
+% if hmode
+% then \spacefactor := \@savsf
+% if \dimen\@savsk > 0pt then \ignorespaces
+% \global\@ignoretrue fi
+% fi
+% END
+%
+
+\newdimen\@savsk
+\newcount\@savsf
+
+\def\@bsphack{\@savsk\lastskip
+ \ifhmode\@savsf\spacefactor\fi}
+
+\def\@esphack{\relax\ifhmode\spacefactor\@savsf
+ {}\ifdim \@savsk >\z@ \global\@ignoretrue \ignorespaces
+ \fi \fi}
+
+% VERTICAL SPACING:
+%
+% LaTeX supports the PLAIN TeX commands \smallskip, \medskip and \bigskip.
+% However, it redefines them using \vspace instead of \vskip.
+%
+% Extra vertical space is added by the command command \addvspace{SKIP},
+% which adds a vertical skip of SKIP to the document. The sequence
+% \addvspace{S1} \addvspace{S2}
+% is equivalent to
+% \addvspace{maximum of S1, S2}.
+% \addvspace should be used only in vertical mode, and gives an error if it's
+% not. The \addvspace command does NOT add vertical space if
+% @minipage = F. The minipage environment uses this to inhibit
+% the addition of extra vertical space at the beginning.
+%
+% Penalties are put into the vertical list with the \addpenalty{PENALTY}
+% command. It works properly when \addpenalty and \addvspace commands
+% are mixed.
+%
+% The @nobreak switch is set true used when in vertical mode and no page
+% break should occur. (Right now, it is used only by the section heading
+% commands to inhibit page breaking after a heading.)
+%
+%
+% \addvspace{SKIP} ==
+% BEGIN
+% if vmode
+% then if @minipage
+% else if \lastskip =0
+% then \vskip SKIP
+% else if \lastskip < SKIP
+% then \vskip -\lastskip
+% \vskip SKIP
+% else if SKIP < 0 and \lastskip >= 0
+% then \vskip -\lastskip
+% \vskip \lastskip + SKIP
+% fi fi fi fi
+% else 'missing \item' error.
+% fi
+% END
+
+\def\addvspace#1{\ifvmode
+ \if@minipage\else
+ \ifdim \lastskip =\z@ \vskip #1\relax
+ \else \@tempskipb#1\relax\@xaddvskip
+ \fi\fi
+ \else\@noitemerr\fi}
+
+\def\@xaddvskip{\ifdim \lastskip <\@tempskipb\vskip-\lastskip\vskip
+ \@tempskipb\relax
+ \else \ifdim \@tempskipb<\z@
+ \ifdim \lastskip <\z@
+ \else \advance\@tempskipb\lastskip
+ \vskip -\lastskip \vskip \@tempskipb
+ \fi\fi\fi}
+
+\def\addpenalty#1{\ifvmode
+ \if@minipage\else\if@nobreak\else
+ \ifdim\lastskip=\z@ \penalty#1\relax
+ \else \@tempskipb\lastskip
+ \vskip -\lastskip \penalty#1\vskip\@tempskipb
+ \fi\fi\fi
+ \else\@noitemerr\fi}
+
+\def\vspace{\@ifstar{\@vspacer}{\@vspace}}
+\def\@vspace#1{\ifvmode
+ \dimen@\prevdepth \expandafter\vskip #1\vskip \z@\prevdepth\dimen@
+ \else
+ \@bsphack\vadjust{\dimen@\prevdepth
+ \expandafter\vskip #1\vskip \z@\prevdepth\dimen@}\@esphack\fi}
+\def\@vspacer#1{\ifvmode \dimen@\prevdepth
+ \hrule height\z@ \nobreak \expandafter\vskip #1\vskip \z@
+ \prevdepth\dimen@
+ \else
+ \@bsphack\vadjust{\dimen@\prevdepth \hrule height\z@ \nobreak
+ \expandafter\vskip #1\vskip \z@ \prevdepth\dimen@}\@esphack\fi}
+
+\def\smallskip{\vspace\smallskipamount}
+\def\medskip{\vspace\medskipamount}
+\def\bigskip{\vspace\bigskipamount}
+
+
+% See list environment for explanation of the following macros.
+
+\def\endtrivlist{\if@newlist\@noitemerr\fi
+ \if@inlabel\indent\fi
+ \ifhmode\unskip \par\fi
+ \if@noparlist \else
+ \ifdim\lastskip >\z@ \@tempskipa\lastskip \vskip -\lastskip
+ \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip
+ \vskip\@tempskipa
+ \fi\@endparenv\fi}
+
+\def\@endparenv{\addpenalty\@endparpenalty
+ \addvspace\@topsepadd
+ \endgroup\def\par{\@restorepar\everypar{}\par}\everypar
+ {\hskip -\parindent \everypar{}}\begingroup}
+
+
+
+% HORIZONTAL SPACE
+%
+% \, : used in paragraph mode produces a \thinspace. It has the ordinary
+% definition in math mode. Useful for quotes inside quotes, as in
+% ``\,`Foo', he said.''
+%
+% \@ : placed before a '.', makes it a sentence-ending period. Does the
+% right thing for other punctuation marks as well. Does this by
+% setting spacefactor to 1000.
+
+\def\,{\protect\pcomma}
+\def\pcomma{\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}
+
+
+\def\@{\spacefactor\@m}
+
+\def\hspace{\protect\phspace}
+\def\phspace{\@ifstar{\@hspacer}{\@hspace}}
+\def\@hspace#1{\leavevmode\expandafter\hskip #1\relax}
+
+\def\@hspacer#1{\leavevmode\vrule width\z@\nobreak\expandafter\hskip
+ #1\hskip \z@} %% extra \hskip 0pt added 12/17/85 to guard
+ %% against a following \unskip
+
+% define \fill to = 0pt plus 1fill
+\newskip\fill \fill = 0pt plus 1fill
+
+% \stretch{N} == 0pt plus N fill
+\def\stretch#1{\z@ plus #1fill\relax}
+
+{\catcode`\^^M=13 \gdef\obeycr{\catcode`\^^M=13 \def^^M{\\}\@gobblecr}%
+\gdef\restorecr{\catcode`\^^M=5 }} %} BRACE MATCHING
+
+
+ \message{control,}
+% **********************************************
+% * PROGRAM CONTROL STRUCTURE MACROS *
+% **********************************************
+%
+% \@whilenum TEST \do {BODY}
+% \@whiledim TEST \do {BODY} : These implement the loop
+% while TEST do BODY od
+% where TEST is a TeX \ifnum or \ifdim test, respectively.
+% They are optimized for the normal case of TEST initially false.
+%
+% \@whilesw SWITCH \fi {BODY} : Implements the loop
+% while SWITCH do BODY od
+% where SWITCH is a command defined by \newswitch.
+% Optimized for normal case of SWITCH initially false.
+%
+% \@for NAME := LIST \do {BODY} : Assumes that LIST expands to A1,A2, ... ,An .
+% Executes BODY n times, with NAME = Ai on the i-th iteration.
+% Optimized for the normal case of n = 1. Works for n=0.
+%
+% \@tfor NAME := LIST \do {BODY}
+% if, before expansion, LIST = T1 ... Tn where each Ti is a
+% token or {...}, then executes BODY n times, with NAME = Ti
+% on the i-th iteration. Works for n=0.
+%
+% NOTES: 1. These macros use no \@temp sequences.
+% 2. These macros do not work if the body contains anything that looks
+% syntactically to TeX like an improperly balanced \if \else \fi.
+%
+% \@whilenum TEST \do {BODY} ==
+% BEGIN
+% if TEST
+% then BODY
+% \@iwhilenum{TEST \relax BODY}
+% END
+%
+% \@iwhilenum {TEST BODY} ==
+% BEGIN
+% if TEST
+% then BODY
+% \@nextwhile = def(\@iwhilenum)
+% else \@nextwhile = def(\@whilenoop)
+% fi
+% \@nextwhile {TEST BODY}
+% END
+%
+% \@whilesw SWITCH \fi {BODY} ==
+% BEGIN
+% if SWITCH
+% then BODY
+% \@iwhilesw {SWITCH BODY}\fi
+% fi
+% END
+%
+% \@iwhilesw {SWITCH BODY} \fi ==
+% BEGIN
+% if SWITCH
+% then BODY
+% \@nextwhile = def(\@iwhilesw)
+% else \@nextwhile = def(\@whileswnoop)
+% fi
+% \@nextwhile {SWITCH BODY} \fi
+% END
+
+\def\@whilenoop#1{}
+\def\@whilenum#1\do #2{\ifnum #1\relax #2\relax\@iwhilenum{#1\relax
+ #2\relax}\fi}
+\def\@iwhilenum#1{\ifnum #1\let\@nextwhile=\@iwhilenum
+ \else\let\@nextwhile=\@whilenoop\fi\@nextwhile{#1}}
+
+\def\@whiledim#1\do #2{\ifdim #1\relax#2\@iwhiledim{#1\relax#2}\fi}
+\def\@iwhiledim#1{\ifdim #1\let\@nextwhile=\@iwhiledim
+ \else\let\@nextwhile=\@whilenoop\fi\@nextwhile{#1}}
+
+\def\@whileswnoop#1\fi{}
+\def\@whilesw#1\fi#2{#1#2\@iwhilesw{#1#2}\fi\fi}
+\def\@iwhilesw#1\fi{#1\let\@nextwhile=\@iwhilesw
+ \else\let\@nextwhile=\@whileswnoop\fi\@nextwhile{#1}\fi}
+
+% \@for NAME := LIST \do {BODY} ==
+% BEGIN \@forloop expand(LIST),\@nil,\@nil \@@ NAME {BODY} END
+%
+% \@forloop CAR, CARCDR, CDRCDR \@@ NAME {BODY} ==
+% BEGIN
+% NAME = CAR
+% if def(NAME) = def(\@nnil)
+% else BODY;
+% NAME = CARCDR
+% if def(NAME) = def(\@nnil)
+% else BODY
+% \@iforloop CDRCDR \@@ NAME \do {BODY}
+% fi
+% fi
+% END
+%
+% \@iforloop CAR, CDR \@@ NAME {BODY} =
+% NAME = CAR
+% if def(NAME) = def(\@nnil)
+% then \@nextwhile = def(\@fornoop)
+% else BODY ;
+% \@nextwhile = def(\@iforloop)
+% fi
+% \@nextwhile name cdr {body}
+%
+% \@tfor NAME := LIST \do {BODY}
+% = \@tforloop LIST \@nil \@@ NAME {BODY}
+%
+% \@tforloop car cdr \@@ name {body} =
+% name = car
+% if def(name) = def(\@nnil)
+% then \@nextwhile == \@fornoop
+% else body ;
+% \@nextwhile == \@forloop
+% fi
+% \@nextwhile name cdr {body}
+%
+
+\def\@nnil{\@nil}
+\def\@empty{}
+\def\@fornoop#1\@@#2#3{}
+
+\def\@for#1:=#2\do#3{\edef\@fortmp{#2}\ifx\@fortmp\@empty \else
+ \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}
+
+\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi}
+
+\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@fornoop \else
+ #4\relax\let\@nextwhile=\@iforloop\fi\@nextwhile#2\@@#3{#4}}
+
+\def\@tfor#1:=#2\do#3{\xdef\@fortmp{#2}\ifx\@fortmp\@empty \else
+ \@tforloop#2\@nil\@nil\@@#1{#3}\fi}
+\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@fornoop \else
+ #4\relax\let\@nextwhile=\@tforloop\fi\@nextwhile#2\@@#3{#4}}
+
+
+ \message{files,}
+% ****************************************
+% * FILE HANDLING *
+% ****************************************
+%
+% THE FOLLOWING USER COMMANDS ARE DEFINED IN THIS PART:
+% \document : Reads in the .AUX files and \catcode's @ to 12.
+% \nofiles : Suppresses all file output by setting \@filesw false.
+% \includeonly{NAME1, ... ,NAMEn}
+% : Causes only parts NAME1, ... ,NAMEn to be read by
+% their \include commands. Works by setting \@partsw true
+% and setting \@partlist to NAME1, ... ,NAMEn.
+% \include{NAME} : Does an \input NAME unless \partsw is true and
+% NAME is not in \@partlist. If \@filesw is true, then
+% it directs .AUX output to NAME.AUX, including a
+% checkpoint at the end.
+% \input{NAME} : The same as TeX's \input, except it allows optional
+% braces around the file name.
+%
+% VARIABLES, SWITCHES AND INTERNAL COMMANDS:
+% \@mainaux : Output file number for main .AUX file.
+% \@partaux : Output file number for current part's .AUX file.
+% \@auxout : Either \@mainout or \@partout, depending on which .AUX
+% file output goes to.
+% \@input{foo} : If file foo exists, then \input's it, otherwise types
+% a warning message.
+% @filesw : Switch -- set false if no .AUX, .TOC, .IDX etc files are
+% to be
+% @partsw : Set true by a \includeonly command.
+% \@partlist : Set to the argument of the \includeonly command.
+%
+% \cp@FOO : The checkpoint for \included file FOO.TEX, written
+% by \@writeckpt at the end of file FOO.AUX
+%
+% \document ==
+% BEGIN
+% \endgroup % cancels \begingroup generated by \begin command
+% \@colht := \@colroom := \vsize := \textheight
+% \columnwidth := \textwidth
+% \@clubpenalty := \clubpenalty % \@clubpenalty saves value.
+% IF @twocolumn = T
+% THEN \columnwidth := (\columnwidth - \columnsep)/2
+% @firstcolumn := T
+% FI
+% \hsize := \linewidth := \columnwidth
+% \begingroup
+% \@floatplacement \@dblfloatplacement
+% \@input{\jobname.aux}
+% \endgroup
+% IF \@filesw = T
+% THEN open file \@mainaux for writing
+% write ``\relax''on file \@mainaux
+% FI
+% \do{COMMAND} == BEGIN \let COMMAND = \@notprerr END
+% \@preamblecmds
+% \do == \noexpand
+% \@normalsize
+% \everypar{}
+% END
+%
+% \includeonly{FILELIST} ==
+% BEGIN
+% \@partsw := T
+% \@partlist := FILELIST
+% END
+%
+% \include{FILE} ==
+% BEGIN
+% \clearpage
+% if \@filesw = T
+% then \immediate\write\@mainaux{\string\@input{FILE.AUX}}
+% fi
+% if \@partsw = T
+% then \@tempswa := F
+% \@tempb == FILE
+% for \@tempa := \@partlist
+% do if eval(\@tempa) = eval(\@tempb)
+% then \@tempswa := T fi
+% od
+% fi
+%
+% if \@tempswa = T
+% then \@auxout := \@partaux
+% if \@filesw = T
+% then \immediate\openout\@partaux{FILE.AUX}
+% \immediate\write\@partaux{\relax}
+% fi
+% \@input{FILE.TEX}
+% \clearpage
+% \@writeckpt{FILE}
+% if @filesw then \closeout \@partaux fi
+
+% \@auxout := \@mainaux
+% else \cp@FILE
+% fi
+% END
+%
+% \@writeckpt{FILE} ==
+% BEGIN
+% if \@filesw = T
+% \immediate\write on file \@partaux:
+% \gdef\cp@FILE{ %% }
+% for \@tempa := \cl@@ckpt
+% do \immediate\write on file \@partaux:
+% \global\string\setcounter
+% {eval(\@tempa)}{eval(\c@eval(\@tempa))}
+% od %% {
+% \immediate\write on file \@partaux: }
+% fi
+% END
+%
+% INITIALIZATION
+% \@tempswa := T
+
+\newif\if@filesw \@fileswtrue
+\newif\if@partsw \@partswfalse
+\newwrite\@mainaux
+\newwrite\@partaux
+
+\newcount\@clubpenalty
+
+\def\document{\endgroup
+ \@colht\textheight \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth \@clubpenalty\clubpenalty
+ \if@twocolumn \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+ \begingroup\@floatplacement\@dblfloatplacement
+ \makeatletter\let\@writefile\@gobbletwo
+ \@input{\jobname.aux}\endgroup
+ \if@filesw \immediate\openout\@mainaux=\jobname.aux
+ \immediate\write\@mainaux{\relax}\fi
+ \def\do##1{\let ##1\@notprerr}
+ \@preamblecmds
+ \let\do\noexpand
+ \@normalsize\everypar{}}
+
+\def\@gobbletwo#1#2{}
+
+\def\nofiles{\@fileswfalse \typeout
+ {No auxiliary output files.}\typeout{}}
+
+\def\@input#1{\openin1 #1 \ifeof1 \typeout
+ {No file #1.}\else\closein1 \relax\@@input #1 \fi}
+\let\@auxout=\@mainaux
+
+\def\includeonly#1{\@partswtrue\edef\@partlist{#1}}
+
+\def\include#1{\clearpage
+\if@filesw \immediate\write\@mainaux{\string\@input{#1.aux}}\fi
+\@tempswatrue\if@partsw \@tempswafalse\def\@tempb{#1}\@for
+\@tempa:=\@partlist\do{\ifx\@tempa\@tempb\@tempswatrue\fi}\fi
+\if@tempswa \if@filesw \let\@auxout=\@partaux
+\immediate\openout\@partaux #1.aux
+\immediate\write\@partaux{\relax}\fi\@input{#1.tex}\clearpage
+\@writeckpt{#1}\if@filesw \immediate\closeout\@partaux \fi
+\let\@auxout=\@mainaux\else\@nameuse{cp@#1}\fi}
+
+\def\@writeckpt#1{\if@filesw
+\immediate\write\@partaux{\string\global\string\@namedef{cp@#1}\@charlb}%
+{\let\@elt\@wckptelt \cl@@ckpt}\immediate\write\@partaux{\@charrb}\fi}
+
+\def\@wckptelt#1{\immediate\write\@partaux
+{\string\setcounter{#1}{\the\@nameuse{c@#1}}}}
+
+\def\input{\@ifnextchar \bgroup{\@iinput}{\@@input }}
+\def\@iinput#1{\@@input #1 }
+
+% The following defines \@charlb and \@charrb to be { and }, respectively
+% with \catcode 11.
+{\catcode`[=1 \catcode`]=2
+\catcode`{=11 \catcode`}=11
+\gdef\@charlb[{]
+\gdef\@charrb[}]
+]% }brace matching
+
+
+ \message{env. counters,}
+% ****************************************
+% * ENVIRONMENT COUNTER MACROS *
+% ****************************************
+%
+% An environment foo has an associated counter defined by the
+% following control sequences:
+% \c@foo : Contains the counter's numerical value. It is defined by
+% \newcount\foocounter.
+% \thefoo : Macro that expands to the printed value of \foocounter.
+% For example, if sections are numbered within chapters,
+% and section headings look like
+% Section II-3. The Nature of Counters
+% then \thesection might be defined by:
+% \def\thesection{\@Roman{\c@chapter}-\@arabic{\c@section}}
+%
+% \p@foo : Macro that expands to a printed 'reference prefix' of
+% counter foo. Any \ref to a value created by counter
+% foo will produce the expansion of \p@foo\thefoo when the
+% the \label command is executed.
+%
+% NOTE: \thefoo and \p@foo MUST BE DEFINED IN SUCH A WAY THAT
+% \edef\bar{\thefoo} OR \edef\bar{\p@foo}
+% DEFINES \bar SO THAT IT WILL EVALUATE TO THE COUNTER VALUE AT THE TIME
+% OF THE \edef, EVEN AFTER \foocounter AND ANY OTHER COUNTERS HAVE BEEN
+% CHANGED. THIS WILL HAPPEN IF YOU USE THE STANDARD COMMANDS \@arabic,
+% \@Roman, ETC.
+%
+% \cl@foo : List of counters to be reset when foo stepped. Has format
+% \@elt{countera}\@elt{counterb}\@elt{counterc}.
+%
+% The following commands are used to define and modify counters.
+% \setcounter{FOO}{VAL} : Globally sets \foocounter equal to VAL.
+% \addtocounter{FOO}{VAL}: Globally increments \foocounter by VAL.
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset when counter OLDCTR is stepped. If
+% NEWCTR already defined produces 'c@NEWCTR
+% already defined' error.
+% \value{CTR} : produces the value of counter CTR, for use with
+% a \setcounter or \addtocounter command.
+% \stepcounter{FOO} : Globally increments counter \c@FOO
+% and resets all subsidiary counters.
+% \refstepcounter{FOO} : Same a \stepcounter, but it also defines
+% \@currentreference so that a subsequent
+% \label{bar} command causes \ref{bar} to
+% generate the current value of counter foo.
+% \@definecounter{FOO} : Initializes counter FOO (with empty reset list),
+% defines \p@FOO and \theFOO to be null.
+% Also adds FOO to \cl@@ckpt -- the reset
+% list of a dummy counter @ckpt used for
+% taking checkpoints.
+% \@addtoreset{FOO}{BAR} : Adds counter FOO to the list of counters
+% \cl@BAR to be reset when counter bar is stepped.
+%
+% NUMBERING MACROS:
+% \arabic{COUNTER} : Representation of COUNTER as arabic numerals.
+% \roman{COUNTER} : Representation of COUNTER as lower-case
+% Roman numerals.
+% \Roman{COUNTER} : Representation of COUNTER as upper-case
+% Roman numerals.
+% \alph{COUNTER} : Representation of COUNTER as a lower-case
+% letter: 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Representation of COUNTER as an upper-case
+% letter: 1 = A, 2 = B, etc.
+% \fnsymbol{COUNTER} : Representation of COUNTER as a footnote
+% symbol: 1 = *, 2 = \dagger, etc. Can be
+% used only in math mode.
+%
+% THE ABOVE ARE IMPLEMENTED IN TERMS OF THE FOLLOWING:
+% \@arabic\FOOcounter : Representation of \FOOcounter as arabic numerals.
+% \@roman\FOOcounter : Representation of \FOOcounter as lower-case
+% Roman numerals.
+% \@Roman\FOOcounter : Representation of \FOOcounter as upper-case
+% Roman numerals.
+% \@alph\FOOcounter : Representation of \FOOcounter as a lower-case
+% letter: 1 = a, 2 = b, etc.
+% \@Alph\FOOcounter : Representation of \FOOcounter as an upper-case
+% letter: 1 = A, 2 = B, etc.
+% \@fnsymbol\FOOcounter : Representation of \FOOcounter as a footnote
+% symbol. Can be used only in math mode.
+
+\def\setcounter#1#2{\@ifundefined{c@#1}{\@nocnterr}%
+{\global\csname c@#1\endcsname#2\relax}}
+
+\def\addtocounter#1#2{\@ifundefined{c@#1}{\@nocnterr}%
+{\global\advance\csname c@#1\endcsname #2\relax}}
+
+\def\newcounter#1{\expandafter\@ifdefinable \csname c@#1\endcsname
+ {\@definecounter{#1}}\@ifnextchar[{\@newctr{#1}}{}}
+
+\def\value#1{\csname c@#1\endcsname}
+
+\def\@newctr#1[#2]{\@ifundefined{c@#2}{\@nocnterr}{\@addtoreset{#1}{#2}}}
+
+\def\stepcounter#1{\global\expandafter\advance\csname c@#1\endcsname
+ \@ne {\let\@elt\@stpelt \csname cl@#1\endcsname}}
+
+\def\@stpelt#1{\global\csname c@#1\endcsname \z@}
+
+\def\cl@@ckpt{\@elt{page}}
+
+\def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname
+ \setcounter{#1}0 \expandafter\gdef\csname cl@#1\endcsname{}\@addtoreset
+ {#1}{@ckpt}\expandafter\gdef\csname p@#1\endcsname{}\expandafter
+ \gdef\csname the#1\endcsname{\arabic{#1}}}
+
+\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}}
+
+% Numbering commands for definitions of \theCOUNTER and \list arguments.
+% \fnsymbol produces the standard footnoting symbols: asterisk, dagger, etc.
+% They can be used only in math mode.
+
+\def\arabic#1{\@arabic{\@nameuse{c@#1}}}
+\def\roman#1{\@roman{\@nameuse{c@#1}}}
+\def\Roman#1{\@Roman{\@nameuse{c@#1}}}
+\def\alph#1{\@alph{\@nameuse{c@#1}}}
+\def\Alph#1{\@Alph{\@nameuse{c@#1}}}
+\def\fnsymbol#1{\@fnsymbol{\@nameuse{c@#1}}}
+
+\def\@arabic#1{\ifnum #1>0 \number #1\fi}
+\def\@roman#1{\romannumeral #1}
+\def\@Roman#1{\expandafter\uppercase\expandafter{\romannumeral #1}}
+\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi}
+\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or
+ z\else\@ctrerr\fi}
+\def\@Alph#1{\ifcase#1\or A\or B\or C\or D\else\@Ialph{#1}\fi}
+\def\@Ialph#1{\ifcase#1\or \or \or \or \or E\or F\or G\or H\or I\or J\or
+ K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or
+ Z\else\@ctrerr\fi}
+\def\@fnsymbol#1{\ifcase#1\or *\or \dagger\or \ddagger\or
+ \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi\relax}
+
+
+
+
+ \message{page nos.,}
+% ****************************************
+% * PAGE NUMBERING *
+% ****************************************
+%
+% Page numbers are produced by a page counter, used just like any other
+% counter. The only difference is that \c@page contains the number of
+% the next page to be output (the one currently being produced), rather
+% than one minus it. Thus, it is normally initialized to 1 rather than
+% 0. \c@page is defined to be \count0, rather than a count assigned by
+% \newcount.
+%
+% The user sets the pagenumber style with the \pagenumbering{FOO}
+% command, which sets the page counter to 1 and defines \thepage to be
+% \FOO. For example, \pagenumbering{roman} causes pages to be numbered
+% i, ii, etc.
+
+
+\countdef\c@page=0 \c@page=1
+\def\cl@page{}
+\def\pagenumbering#1{\global\c@page \@ne \gdef\thepage{\csname @#1\endcsname
+ \c@page}}
+
+
+ \message{x-ref,}
+% ****************************************
+% * CROSS REFERENCING MACROS *
+% ****************************************
+%
+% The user writes \label{foo} to define the following cross-references:
+% \ref{foo} : value of most recently incremented referencable counter.
+% in the current environment. (Chapter, section, theorem
+% and enumeration counters counters are referencable,
+% footnote counters are not.)
+% \pageref{foo} : page number at which \label{foo} command appeared.
+% where foo can be any string of characters not containing '\', '{' or '}'.
+%
+% Note: The scope of the \label command is delimited by environments, so
+% \begin{theorem} \label{foo} ... \end{theorem} \label{bar}
+% defines \ref{foo} to be the theorem number and \ref{bar} to be
+% the current section number.
+%
+% Note: \label does the right thing in terms of spacing -- i.e.,
+% leaving a space on both sides of it is equivalent to leaving
+% a space on either side.
+%
+% This is implemented as follows. A referencable counter CNT is
+% incremented by the command \refstepcounter{CNT} , which sets
+% \@currentlabel == {CNT}{eval(\p@cnt\theCNT)}. The command
+% \label{FOO} then writes the following on file \@auxout :
+% \newlabel{FOO}{{eval(\@currentlabel)}{eval(\thepage)}}
+%
+% \ref{FOO} ==
+% BEGIN
+% if \r@foo undefined
+% then ??
+% Warning: 'reference foo on page ... undefined'
+% else \@car \eval(\r@FOO)\@nil
+% fi
+% END
+%
+% \pageref{foo} =
+% BEGIN
+% if \r@foo undefined
+% then ??
+% Warning: 'reference foo on page ... undefined'
+% else \@cdr \eval(\r@FOO)\@nil
+% fi
+% END
+%
+
+\def\ref#1{\@ifundefined{r@#1}{{\bf ??}\@warning
+ {Reference `#1' on page \thepage \space
+ undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
+ \@car\@tempa \@nil\null}}
+
+\def\pageref#1{\@ifundefined{r@#1}{{\bf ??}\@warning
+ {Reference `#1' on page \thepage \space
+ undefined}}{\edef\@tempa{\@nameuse{r@#1}}\expandafter
+ \@cdr\@tempa\@nil\null}}
+
+\def\label#1{\@bsphack\if@filesw {\let\thepage\relax
+ \xdef\@gtempa{\write\@auxout{\string
+ \newlabel{#1}{{\@currentlabel}{\thepage}}}}}\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack}
+
+\def\newlabel#1#2{\@ifundefined{r@#1}{}{\@warning{Label `#1' multiply
+ defined}}\global\@namedef{r@#1}{#2}}
+
+\def\refstepcounter#1{\stepcounter
+ {#1}\edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}}
+
+\def\@currentlabel{} % For \label commands that come before any environment
+
+ \message{environments,}
+% ****************************************
+% * ENVIRONMENTS *
+% ****************************************
+%
+% \begin{foo} and \end{foo} are used to delimit environment foo.
+% \begin{foo} starts a group and calls \foo if it is defined, otherwise
+% it does nothing. \end{foo} checks to see that it matches the
+% corresponding \begin and if so, it calls \endfoo and does an
+% \endgroup. Otherwise, \end{foo} does nothing.
+%
+% If \end{foo} needs to ignore blanks after it, then \endfoo should
+% globally set the @ignore switch true with \global\@ignoretrue.
+%
+% \@currenvir : the name of the current environment. Initialized to
+% 'document' to make \end{document} work right.
+%
+% \@preamblecmds : a list of commands that can be used only in the
+% preamble (before the \begin{document}), in the
+% form \do \CMDA \do \CMDB ... . These commands
+% are redefined to \@notprerr by \begin{document}
+% to save space. They include the following:
+% \document \documentstyle \@documentstyle
+% \@options \@preamblecmds \@optionlist
+% \@optionfiles \nofiles \includeonly \makeindex
+% \makeglossary
+% The document style can add any other commands to
+% this list by
+% \let\do = \noexpand
+% \edef\@preamblecmds{\@preamblecmds \do ...}
+%
+% NOTE: \@@end is defined to be the \end command of TeX82.
+%
+% \enddocument is the user's command for ending the manuscript file.
+%
+% \stop is a panic button -- to end TeX in the middle.
+%
+% \enddocument ==
+% BEGIN
+% \@checkend{document} %% checks for unmatched \begin
+% \clearpage
+% \begingroup
+% if @filesw = true
+% then close file @mainaux
+% \global \@namedef {ARG1}{ARG2} == null
+% \newlabel{LABEL}{VAL} ==
+% BEGIN
+% \@tempa == VAL
+% if def(\@tempa) = def(\r@LABEL)
+% else @tempswa := true fi
+% END
+% \bibcite{LABEL}{VAL} == null
+% BEGIN
+% \@tempa == VAL
+% if def(\@tempa) = def(\g@LABEL)
+% else @tempswa := true fi
+% END
+% @tempswa := false
+% make @ a letter
+% \input \jobname.AUX
+% if @tempswa = true
+% then LaTeX Warning: 'Label may have changed.
+% Rerun to get cross-references right.'
+% fi fi
+% \endgroup
+% finish up
+% END
+%
+% \@writefile{EXT}{ENTRY} ==
+% if tf@EXT undefined
+% else \write\tf@EXT{ENTRY}
+% fi
+%
+\def\@currenvir{document}
+
+\def\@preamblecmds{\do\document \do\documentstyle \do\@documentstyle
+ \do\@options \do\@preamblecmds \do\@optionlist \do\@optionfiles
+ \do\nofiles \do\includeonly \do\makeindex \do\makeglossary}
+
+\newif\if@ignore
+
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+\def\@testdef #1#2#3{\def\@tempa{#3}\expandafter \ifx \csname #1@#2\endcsname
+ \@tempa \else \@tempswatrue \fi}
+
+\def\@writefile#1#2{\@ifundefined{tf@#1}{}{\expandafter
+ \immediate\write\csname tf@#1\endcsname{#2}}}
+
+\def\stop{\clearpage\deadcycles\z@\let\par\@@par\@@end}
+
+\everypar{\@nodocument} %% To get an error if text appears before the
+\nullfont %% \begin{document}
+
+% \begin{NAME} ==
+% BEGIN
+% IF \NAME undefined THEN \@tempa == BEGIN report error END
+% ELSE \@tempa == \NAME
+% \@currenvir :=L NAME
+% FI
+% \begingroup
+% \NAME
+% END
+
+% \end{NAME} ==
+% BEGIN
+% \endNAME
+% \endgroup
+% \@checkend{NAME}
+% IF @ignore = T
+% THEN @ignore :=G F
+% \ignorespaces
+% FI
+% END
+
+
+% \@checkend{NAME} ==
+% BEGIN
+% IF \@currenvir = NAME
+% ELSE \@badend{NAME}
+% FI
+% \@currenvir :=L document
+% END
+
+\def\begin#1{\@ifundefined{#1}{\def\@tempa{\@latexerr{Environment #1
+ undefined}\@eha}}{\def\@currenvir{#1}\def\@tempa{\csname
+ #1\endcsname}}\begingroup\@tempa}
+
+\def\end#1{\csname end#1\endcsname \endgroup
+ \@checkend{#1}\if@ignore \global\@ignorefalse
+ \ignorespaces\fi}
+
+\def\@checkend#1{\def\@tempa{#1}\ifx
+ \@tempa\@currenvir \else\@badend{#1}\fi
+ \def\@currenvir{document}}
+
+
+ \message{math,}
+% **********************************************
+% * MATH ENVIRONMENTS *
+% **********************************************
+%
+% \( == BEGIN if math mode
+% then error: '\( in math mode'
+% else $
+% fi
+% END
+%
+% \) == BEGIN if math mode
+% then if inner mode
+% then $
+% else error ``\[ closed with \)''
+% else error 'unmatched \)'
+% fi
+% END
+%
+% \[ == BEGIN if math mode
+% then error: '\[ in math mode'
+% else $$
+% fi
+% END
+%
+% \] == BEGIN if math mode
+% then if inner mode
+% then error '\( closed with \]'
+% else $$
+% else error 'unmatched \]'
+% fi
+% END
+%
+% \equation == BEGIN \refstepcounter{equation} $$ END
+%
+% \endequation == BEGIN \eqno (\theequation) $$\ignorespaces END
+%
+% NOTE: The document style must define \theequation etc., and do
+% the appropriate \@addtoreset. It should also redefine \@eqnnum
+% if another format for the equation number is desired other than the
+% standard (...), or to move the equation numbers to the flushleft.
+% (See comment on the \def of \@eqnnum.)
+%
+% \stackrel{TOP}{BOT} == PLAIN TeX's \buildrel {TOP} \over {BOT}
+%
+% \frac{TOP}{BOT} == {TOP \over BOT}
+%
+% \sqrt[N]{EXP} produces an Nth root of EXP formula.
+%
+% \: == \> (medium space)
+
+\def\({\relax\ifmmode\@badmath\else$%%$BRACE MATCH HACK
+\fi}
+
+\def\){\relax\ifmmode\ifinner$\else\@badmath%%$ BRACE MATCH HACK
+\fi\else \@badmath\fi}
+
+\def\[{\relax\ifmmode\@badmath\else
+ \ifvmode \nointerlineskip \makebox[.6\linewidth]\fi$$%%$$ BRACE MATCH HACK
+\fi}
+
+\def\]{\relax\ifmmode\ifinner\@badmath\else$$\fi%%$$ BRACE MATCH HACK
+ \else \@badmath \fi\ignorespaces}
+
+\let\math=\(
+\let\endmath=\)
+\def\displaymath{\[}
+\def\enddisplaymath{\]\global\@ignoretrue}
+
+\@definecounter{equation}
+\def\equation{$$ % $$ BRACE MATCHING HACK
+\refstepcounter{equation}}
+
+\def\endequation{\eqno \@eqnnum % $$ BRACE MATCHING HACK
+$$\global\@ignoretrue}
+
+% \@eqnnum: Produces the equation number for equation and
+% eqnarray environments. The following definition is for
+% flushright numbers; for flushleft numbers, see leqno.doc.
+% The {\rm ... } puts the equation number in roman type even if
+% an eqnarray environment appears in an italic environment.
+%
+\def\@eqnnum{{\rm (\theequation)}}
+
+
+\def\stackrel#1#2{\mathrel{\mathop{#2}\limits^{#1}}}
+\def\frac#1#2{{#1\over #2}}
+
+\let\@@sqrt=\sqrt
+\def\sqrt{\@ifnextchar[{\@sqrt}{\@@sqrt}}
+\def\@sqrt[#1]{\root #1\of}
+
+\let\:=\>
+
+% Here's the eqnarray environment:
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, \let\@eqnsel = \hfil
+
+\newcount\@eqcnt
+\newcount\@eqpen
+\newif\if@eqnsw\@eqnswtrue
+
+\@centering = 0pt plus 1000pt % Changed 11/4/85 to produce warning message
+ % if line extends into margin. Doesn't warn
+ % about formula overprinting equation number.
+
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+$$\halign to \displaywidth\bgroup\@eqnsel\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue}
+
+\let\@eqnsel=\relax
+
+\def\nonumber{\global\@eqnswfalse}
+
+\def\@eqncr{{\ifnum0=`}\fi\@ifstar{\global\@eqpen\@M
+ \@yeqncr}{\global\@eqpen\interdisplaylinepenalty \@yeqncr}}
+
+\def\@yeqncr{\@ifnextchar [{\@xeqncr}{\@xeqncr[\z@]}}
+
+\def\@xeqncr[#1]{\ifnum0=`{\fi}\@@eqncr
+ \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}
+
+\def\@@eqncr{\let\@tempa\relax
+ \ifcase\@eqcnt \def\@tempa{& & &}\or \def\@tempa{& &}
+ \else \def\@tempa{&}\fi
+ \@tempa \if@eqnsw\@eqnnum\stepcounter{equation}\fi
+ \global\@eqnswtrue\global\@eqcnt\z@\cr}
+
+% Here's the eqnarray* environment:
+
+\let\@seqncr=\@eqncr
+\@namedef{eqnarray*}{\def\@eqncr{\nonumber\@seqncr}\eqnarray}
+\@namedef{endeqnarray*}{\nonumber\endeqnarray}
+
+% \lefteqn{FORMULA} typesets FORMULA in display math style
+% flushleft in a box of width zero.
+%
+
+\def\lefteqn#1{\hbox to \z@{$\displaystyle #1$\hss}}
+
+
+ \message{center,}
+% ************************************************
+% * CENTER, FLUSHRIGHT, FLUSHLEFT, ETC. *
+% ************************************************
+%
+%
+% \center, \flushright and \flushleft set
+% \rightskip = 0pt or \@flushglue (as appropriate)
+% \leftskip = 0pt or \@flushglue (as appropriate)
+% \parindent = 0pt
+% \parfillskip = 0pt. (except \flushleft)
+% \\ == \par \vskip -\parskip
+% \\[LENGTH] == \\ \vskip LENGTH
+% \\* == \par \penalty 10000 \vskip -\parskip
+% \\*[LEN] == \\* \vskip LENGTH
+%
+% They invoke the trivlist environment to handle vertical spacing before
+% and after them.
+%
+% \centering, \raggedright and \raggedleft are the declaration analogs
+% of the above.
+%
+% \raggedright has a more universal effect, however. It sets
+% \@rightskip := flushglue. Every environment, like the list environments,
+% that set \rightskip to its 'normal' value set it to \@rightskip
+
+\def\@centercr{\ifhmode \unskip\else \@badcrerr\fi
+ \par\@ifstar{\penalty \@M\@xcentercr}{\@xcentercr}}
+
+\def\@xcentercr{\addvspace{-\parskip}\@ifnextchar
+ [{\@icentercr}{\ignorespaces}}
+
+\def\@icentercr[#1]{\vskip #1\ignorespaces}
+
+\def\center{\trivlist \centering\item[]}
+\def\centering{\let\\=\@centercr\rightskip\@flushglue\leftskip\@flushglue
+\parindent\z@\parfillskip\z@}
+\let\endcenter=\endtrivlist
+
+\newskip\@rightskip \@rightskip \z@
+
+\def\flushleft{\trivlist \raggedright\item[]}
+\def\raggedright{\let\\=\@centercr\@rightskip\@flushglue \rightskip\@rightskip
+ \leftskip\z@
+ \parindent\z@}
+\let\endflushleft=\endtrivlist
+
+\def\flushright{\trivlist \raggedleft\item[]}
+\def\raggedleft{\let\\=\@centercr\rightskip\z@\leftskip\@flushglue
+ \parindent\z@\parfillskip\z@}
+\let\endflushright=\endtrivlist
+
+ \message{verbatim,}
+% ****************************************
+% * VERBATIM *
+% ****************************************
+%
+% The verbatim environment uses the fixed-width \tt font, turns blanks into
+% spaces, starts a new line for each carrige return (or sequence of
+% consecutive carriage returns), and interprets EVERY character literally.
+% I.e., all special characters \, {, $, etc. are \catcode'd to 'other'.
+%
+% The command \verb produces in-line verbatim text, where the argument
+% is delimited by any pair of characters. E.g., \verb #...# takes
+% '...' as its argument, and sets it verbatim in \tt font.
+%
+% The *-variants of these commands is the same, except that spaces
+% print as the TeXbook's space character instead of as blank spaces.
+
+{\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar
+{\@gobble}{\ignorespaces}}}
+
+{\catcode`\ =\active\gdef\@vobeyspaces{\catcode`\ \active \let \@xobeysp}}
+
+\def\@xobeysp{\leavevmode{} }
+
+\begingroup \catcode `|=0 \catcode `[= 1
+\catcode`]=2 \catcode `\{=12 \catcode `\}=12
+\catcode`\\=12 |gdef|@xverbatim#1\end{verbatim}[#1|end[verbatim]]
+|gdef|@sxverbatim#1\end{verbatim*}[#1|end[verbatim*]]
+|endgroup
+
+\def\@sverbatim{\obeyspaces\@verbatim}
+
+\def\@gobble#1{}
+
+\def\@verbatim{\trivlist \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
+\obeylines \tt \let\do\@makeother \dospecials}
+
+\def\verbatim{\@verbatim \frenchspacing\@vobeyspaces \@xverbatim}
+\let\endverbatim=\endtrivlist
+
+\@namedef{verbatim*}{\@verbatim\@sxverbatim}
+\expandafter\let\csname endverbatim*\endcsname =\endtrivlist
+
+
+\def\@makeother#1{\catcode`#112\relax}
+
+\def\verb{\begingroup \tt \let\do\@makeother \dospecials
+\@ifstar{\@sverb}{\@verb}}
+
+\def\@sverb#1{\def\@tempa ##1#1{##1\endgroup}\@tempa}
+
+\def\@verb{\obeyspaces \frenchspacing \@sverb}
+
+
+ \message{list,}
+% ****************************************
+% * THE LIST ENVIRONMENT *
+% ****************************************
+%
+% The generic commands for creating an indented environment -- enumerate,
+% itemize, quote, etc -- are
+% \list{LABEL}{COMMANDS} ... \endlist
+% which can be invoked by the user as the list environment. The LABEL
+% argument specifies item labeling. COMMANDS contains commands for
+% changing the horizontal and vertical spacing parameters.
+%
+% Each item of the environment is begun by the command \item[ITEMLABEL]
+% which produces an item labeled by ITEMLABEL. If the argument is
+% missing, then the LABEL argument of the \list command is used as the
+% item label.
+%
+% The label is formed by putting \makelabel{ITEMLABEL} in an hbox whose
+% width is either its natural width or else \labelwidth, whichever is
+% larger. The \list command defines \makelabel to have the default
+% definition
+% \makelabel{ARG} == BEGIN \hfil ARG END
+% which, for a label of width less than \labelwidth, puts the label
+% flushright, \labelsep to the left of the item's text. However,
+% \makelabel can be \let to another command by the \list's COMMANDS
+% argument.
+%
+% A \usecounter{foo} command in the second argument causes the counter
+% foo to be initialized to zero, and stepped by every \item command
+% without an argument. (\label commands within the list refer to this
+% counter.)
+%
+% When you leave a list environment, returning either to an enclosing
+% list or normal text mode, LaTeX begins a new paragraph if and only if
+% you leave a blank line after the \end command. This is accomplished
+% by the \@endparenv command.
+%
+% Blank lines are ignored every other reasonable place--i.e.:
+% - Between the \begin{list} and the first \item,
+% - Between the \item and the text of that item.
+% - Between the end of the last item and the \end{list}.
+%
+% For an environment like quotation, in which items are not labeled,
+% the entire environment is a single item. It is defined by
+% letting \quotation == \list{}{...}\item[]. (Note the [], there in
+% case the first character in the environment is a '['.) The spacing
+% parameters provide a great deal of flexability in designing the
+% format, including the ability to let the indentation of the first
+% paragraph be different from that of the subsequent ones.
+%
+% The trivlist environment is equivalent to a list environment
+% whose second argument sets the following parameter values:
+% \leftmargin = 0 : causes no indentation of left margin
+% \labelwidth = 0 : see below for precise effect this has.
+% \itemindent = 0 : with a null label, makes first paragraph
+% have no indentation. Succeeding paragraphs have \parindent
+% indentation. To give first paragraph same indentation, set
+% \itemindent = \parindent before the \item[].
+% Every \item in a trivlist environment must have an argument---in many
+% cases, this will be the null argument (\item[]). The trivlist
+% environment is mainly used for paragraphing environments, like
+% verbatim, in which there is no margin change. It provides the same
+% vertical spacing as the list environment, and works reasonably well
+% when it occurs immediately after an \item command in an enclosing list.
+%
+% The following variables are used inside a list environment:
+% \@totalleftmargin : The distance that the prevailing left margin is
+% indented from the outermost left margin,
+% \linewidth : The width of the current line. Must be
+% initialized to \hsize.
+% \@listdepth : A count for holding current list nesting depth.
+% \makelabel : A macro with a single argument, used to generate
+% the label from the argument (given or implied) of the
+% \item command. Initialized to \@mklab by the \list
+% command. This command must produce some stretch--i.e.,
+% an \hfil.
+% @inlabel : A switch that is false except between the time an
+% \item is encountered and the time that TeX actually
+% enters horizontal mode. Should be tested by
+% commands that can be messed up by the list
+% environment's use of \everypar.
+% \box\@labels : When @inlabel = true, it holds the labels
+% to be put out by \everypar.
+% @noparitem : A switch set by \list when @inlabel = true.
+% Handles the case of a \list being the first thing
+% in an item.
+% @noparlist : A switch set true for a list that begins an
+% item. No \topsep space is added before or after
+% such a list.
+% @newlist : Set true by \list, set false by the first \item's
+% text (by \everypar).
+% @noitemarg : Set true when executing an \item with no explicit
+% argument. Used to save space. To save time,
+% make two separate \@item commands.
+% @nmbrlist : Set true by \usecounter command, causes list to
+% be numbered.
+% \@listctr : \def'ed by \usecounter to name of counter.
+% @noskipsec : A switch set true by a sectioning command when it is
+% creating an in-text heading with \everypar.
+%
+% Throughout a list environment, \hsize is the width of the current
+% line, measured from the outermost left margin to the outermost right
+% margin. Environments like tabbing should use \linewidth instead of
+% \hsize.
+%
+% Here are the parameters of a list that can be set by commands in
+% the \list's COMMANDS argument. These parameters are all TeX
+% skips or dimensions (defined by \newskip or \newdimen), so the usual
+% TeX or LaTeX commands can be used to set them. The commands will
+% be executed in vmode if and only if the \list was preceded by a
+% \par (or something like an \end{list}), so the spacing parameters
+% can be set according to whether the list is inside a paragraph
+% or is its own paragraph.
+%
+% VERTICAL SPACING (skips):
+%
+% \topsep : Space between first item and preceding paragraph.
+% \partopsep : Extra space added to \topsep when environment starts
+% a new paragraph (is called in vmode).
+% \itemsep : Space between successive items.
+% \parsep : Space between paragraphs within an item -- the \parskip
+% for this environment.
+%
+% PENALTIES
+% \@beginparpenalty : put at the beginning of a list
+% \@endparpenalty : put at end of list
+% \@itempenalty : put between items.
+%
+% HORIZONTAL SPACING (dimens)
+% \leftmargin : space between left margin of enclosing environment
+% (or of page if top level list) and left margin of
+% this list. Must be nonnegative.
+% \rightmargin : analogous.
+% \listparindent : extra indentation at beginning of every paragraph
+% of a list except the one started by the \item
+% command. May be negative! Usually, labeled lists
+% have \listparindent equal to zero.
+% \itemindent : extra indentation added right BEFORE an item label.
+% \labelwidth : nominal width of box that contains the label.
+% If the natural width of the label < = \labelwidth,
+% then the label is flushed right inside a box
+% of width \labelwidth (with an \hfil). Otherwise,
+% a box of the natural width is employed, which causes
+% an indentation of the text on that line.
+% \labelsep : space between end of label box and text of
+% first item.
+%
+% DEFAULT VALUES:
+% Defaults for the list environment are set as follows.
+% First, \rightmargin, \listparindent and \itemindent are set
+% to 0pt. Then, one of the commands \@listi, \@listii, ... , \@listvi
+% is called, depending upon the current level of the list.
+% The \@list... commands should be defined by the document
+% style. A convention that the document style should follow is
+% to set \leftmargin to \leftmargini, ... , \leftmarginvi for
+% the appropriate level. Items that aren't changed may be left
+% alone, but everything that could possibly be changed must be
+% reset.
+%
+% \list{LABEL}{COMMANDS} ==
+% BEGIN
+% if \@listdepth > 5
+% then LaTeX error: 'Too deeply nested'
+% else \@listdepth :=G \@listdepth + 1
+% fi
+% \rightmargin := 0pt
+% \listparindent := 0pt
+% \itemindent := 0pt
+% \eval(@list \romannumeral\the\@listdepth) %% Set default values:
+% \@itemlabel :=L LABEL
+% \makelabel == \@mklab
+% @nmbrlist :=L false
+% COMMANDS
+%
+% \@trivlist % commands common to \list and \trivlist
+%
+% \parskip :=L \parsep
+% \parindent :=L \listparindent
+% \linewidth :=L \linewidth - \rightmargin -\leftmargin
+% \@totalleftmargin :=L \@totalleftmargin + \leftmargin
+% \parshape 1 \@totalleftmargin \linewidth
+% \ignorespaces % gobble space up to \item
+% END
+%
+% \endlist == BEGIN \@listdepth :=G \@listdepth -1
+% \endtrivlist
+% END
+%
+% \@trivlist ==
+% BEGIN
+% if @newlist = T then \@noitemerr fi %% This command removed for some
+% %% forgotten reason.
+% \@topsepadd :=L \topsep
+% if @noskipsec then leave vertical mode fi %% Added 11 Jun 85
+% if vertical mode
+% then \@topsepadd :=L \@topsepadd + \partopsep
+% else \unskip \par % remove glue from end of last line
+% fi
+% if @inlabel = true
+% then @noparitem :=L true
+% @noparlist :=L true
+% else @noparlist :=L false
+% \@topsep :=L \@topsepadd
+% fi
+% \@topsep :=L \@topsep + \parskip %% Change 4 Sep 85
+% \leftskip :=L 0pt % Restore paragraphing parameters
+% \rightskip :=L \@rightskip
+% \parfillskip :=L 0pt + 1fil
+%
+% NOTE: \@setpar called on every \list in case \par has been temporarily
+% munged before the \list command.
+% \@setpar{if @newlist = false then {\@@par} fi}
+% \@newlist :=G T
+% \@outerparskip :=L \parskip
+% END
+%
+% \trivlist ==
+% BEGIN
+% \parsep := \parskip
+% \@trivlist
+% \labelwidth := 0
+% \leftmargin := 0
+% \itemindent := \parindent
+% \makelabel{LABEL} == LABEL
+% END
+%
+% \endtrivlist ==
+% BEGIN
+% if @inlabel = T then \indent fi
+% if horizontal mode then \unskip \par fi
+% if @noparlist = true
+% else if \lastskip > 0
+% then \@tempskipa := \lastskip
+% \vskip - \lastskip
+% \vskip \@tempskipa -\@outerparskip + \parskip
+% fi
+% \@endparenv
+% fi
+% END
+%
+% \@endparenv ==
+% BEGIN
+% \addpenalty{@endparpenalty}
+% \addvspace{\@topsepadd}
+% \endgroup %% ends the \begin command's \begingroup
+% \par == BEGIN
+% \@restorepar
+% \everypar{}
+% \par
+% END
+% \everypar == BEGIN \hskip - \parindent \everypar{} END
+% \begingroup %% to match the \end commands \endgroup
+% END
+%
+% \item == BEGIN if next char = [
+% then \@item
+% else @noitemarg := true
+% \@item[@itemlabel]
+% END
+%
+% \@item[LAB] ==
+% BEGIN
+% if @noparitem = true
+% then @noparitem := false % NOTE: then clause
+% % hardly every taken,
+% \box\@labels :=G \hbox{\hskip -\leftmargin % so made a macro
+% \box\@labels % \@donoparitem
+% \hskip \leftmargin }
+% if @minipage = false then
+% \@tempskipa := \lastskip
+% \vskip -\lastskip
+% \vskip \@tempskipa + \@outerparskip - \parskip
+% fi
+% else if @inlabel = true
+% then \indent \par % previous item empty.
+% fi
+% if hmode then 2 \unskip's % To remove any space at end of prev.
+% \par % paragraph that could cause a blank
+% fi % line.
+% if @newlist = T
+% then if @nobreak = T % Kludge if list follows \section
+% then \addvspace{\@outerparskip - \parskip}
+% else \addpenalty{\@beginparpenalty}
+% \addvspace{\@topsep}
+% \addvspace{-\parskip} %% added 4 Sep 85
+% fi
+% else \addpenalty{\@itempenalty}
+% \addvspace{\itemsep}
+% fi
+% @inlabel :=G true
+% fi
+%
+% \everypar{ @minipage :=G F
+% @newlist :=G F
+% if @inlabel = true
+% then @inlabel :=G false
+% \hskip -\parindent
+% \box\@labels
+% \penalty 0 %% 3 Oct 85 -- allow line break here
+% \box\@labels :=G null
+% fi
+% \everypar{} }
+% @nobreak :=G false
+% if @noitemarg = true
+% then @noitemarg := false
+% if @nmbrlist
+% then \refstepcounter{\@listctr}
+% fi fi
+% \@tempboxa :=L \hbox{\makelabel{LAB}}
+% \box\@labels :=G \@labels \hskip \itemindent
+% \hskip - (\labelwidth + \labelsep)
+% if \wd \@tempboxa > \labelwidth
+% then \box\@tempboxa
+% else \hbox to \labelwidth {\makelabel{LAB}}
+% fi
+% \hskip\labelsep
+% \ignorespaces %gobble space up to text
+% END
+%
+% \usecounter{CTR} == BEGIN @nmbrlist :=L true
+% \@listctr == CTR
+% \setcounter{CTR}{0}
+% END
+%
+% DEFINE \dimen's and \count
+\newskip\topsep
+\newskip\partopsep
+\newskip\itemsep
+\newskip\parsep
+\newskip\@topsep
+\newskip\@topsepadd
+\newskip\@outerparskip
+
+\newdimen\leftmargin
+\newdimen\rightmargin
+\newdimen\listparindent
+\newdimen\itemindent
+\newdimen\labelwidth
+\newdimen\labelsep
+\newdimen\linewidth
+\newdimen\@totalleftmargin \@totalleftmargin=\z@
+\newdimen\leftmargini
+\newdimen\leftmarginii
+\newdimen\leftmarginiii
+\newdimen\leftmarginiv
+\newdimen\leftmarginv
+\newdimen\leftmarginvi
+
+\newcount\@listdepth \@listdepth=0
+\newcount\@itempenalty
+\newcount\@beginparpenalty
+\newcount\@endparpenalty
+
+\newbox\@labels
+
+\newif\if@inlabel \@inlabelfalse
+\newif\if@newlist \@newlistfalse
+\newif\if@noparitem \@noparitemfalse
+\newif\if@noparlist \@noparlistfalse
+\newif\if@noitemarg \@noitemargfalse
+\newif\if@nmbrlist \@nmbrlistfalse
+
+\def\list#1#2{\ifnum \@listdepth >5\relax \@toodeep
+ \else \global\advance\@listdepth\@ne \fi
+ \rightmargin \z@ \listparindent\z@ \itemindent\z@
+ \csname @list\romannumeral\the\@listdepth\endcsname
+ \def\@itemlabel{#1}\let\makelabel\@mklab \@nmbrlistfalse #2\relax
+ \@trivlist
+ \parskip\parsep \parindent\listparindent
+ \advance\linewidth -\rightmargin \advance\linewidth -\leftmargin
+ \advance\@totalleftmargin \leftmargin
+ \parshape \@ne \@totalleftmargin \linewidth
+ \ignorespaces}
+
+\def\@trivlist{\@topsepadd\topsep
+ \if@noskipsec \leavevmode \fi
+ \ifvmode \advance\@topsepadd\partopsep \else \unskip\par\fi
+ \if@inlabel \@noparitemtrue \@noparlisttrue
+ \else \@noparlistfalse \@topsep\@topsepadd \fi
+ \advance\@topsep \parskip
+ \leftskip\z@\rightskip\@rightskip \parfillskip\@flushglue
+ \@setpar{\if@newlist\else{\@@par}\fi}%
+ \global\@newlisttrue \@outerparskip\parskip}
+
+\def\trivlist{\parsep\parskip
+ \@trivlist \labelwidth\z@ \leftmargin\z@
+ \itemindent\z@ \def\makelabel##1{##1}}
+
+\def\endlist{\global\advance\@listdepth\m@ne
+ \endtrivlist}
+
+% Definition of \endtrivlist moved earlier in file so other commands
+% can be \let = to it.
+
+\def\@mklab#1{\hfil #1}
+
+\def\item{\@ifnextchar [{\@item}{\@noitemargtrue \@item[\@itemlabel]}}
+
+\def\@donoparitem{\@noparitemfalse
+ \global\setbox\@labels\hbox{\hskip -\leftmargin
+ \unhbox\@labels
+ \hskip \leftmargin}\if@minipage\else
+ \@tempskipa\lastskip
+ \vskip -\lastskip \advance\@tempskipa\@outerparskip
+ \advance\@tempskipa -\parskip \vskip\@tempskipa\fi}
+
+\def\@item[#1]{\if@noparitem \@donoparitem
+ \else \if@inlabel \indent \par \fi
+ \ifhmode \unskip\unskip \par \fi
+ \if@newlist \if@nobreak \@nbitem \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep \addvspace{-\parskip}\fi
+ \else \addpenalty\@itempenalty \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+\fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+ \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+ \penalty\z@ \fi
+ \everypar{}}\global\@nobreakfalse
+\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+\setbox\@tempboxa\hbox{\makelabel{#1}}%
+\global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+ \hskip -\labelwidth \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else \hbox to\labelwidth {\makelabel{#1}}\fi
+ \hskip \labelsep}\ignorespaces}
+
+\def\@nbitem{\@tempskipa\@outerparskip \advance\@tempskipa -\parskip
+ \addvspace{\@tempskipa}}
+
+\def\usecounter#1{\@nmbrlisttrue\def\@listctr{#1}\setcounter{#1}\z@}
+
+ \message{itemize,}
+% ****************************************
+% * ITEMIZE AND ENUMERATE *
+% ****************************************
+%
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands
+% \labelenumi ... \labelenumiv, which should be defined by the
+% document style. Note that \p@enumN\theenumN defines the output
+% of a \ref command. A typical definition might be:
+% \def\theenumii{\alph{enumii}}
+% \def\p@enumii{\theenumi\theenumii}
+% \def\labelenumii{(\theenumii)}
+% which will print the labels as '(a)', '(b)', ... and print a \ref as
+% '3a'.
+%
+% The item numbers are moved to the right of the label box, so they are
+% always a distance of \labelsep from the item.
+%
+% \@enumdepth holds the current enumeration nesting depth.
+%
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv. To cause the second-level list to be
+% bulleted, you just define \labelitemii to be $\bullet$. \@itemspacing
+% and \@itemdepth are the analogs of \@enumspacing and \@enumdepth.
+%
+% \enumerate ==
+% BEGIN
+% if \@enumdepth > 3
+% then errormessage: ``Too deeply nested''.
+% else \@enumdepth :=L \@enumdepth + 1
+% \@enumctr :=L eval(enum@\romannumeral\the\@enumdepth)
+% \list{\label(\@enumctr)}
+% {\usecounter{\@enumctr}
+% \makelabel{LABEL} == \hss \llap{LABEL}}
+% fi
+% END
+%
+% \endenumerate == \endlist
+%
+\newcount\@enumdepth \@enumdepth = 0
+
+\@definecounter{enumi}
+\@definecounter{enumii}
+\@definecounter{enumiii}
+\@definecounter{enumiv}
+
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{\hss\llap{##1}}}\fi}
+
+\let\endenumerate =\endlist
+
+
+% \itemize ==
+% BEGIN
+% if \@itemdepth > 3
+% then errormessage: 'Too deeply nested'.
+% else \@itemdepth :=L \@itemdepth + 1
+% \@itemitem == eval(labelitem\romannumeral\the\@itemdepth)
+% \list{\@nameuse{\@itemitem}}
+% {\makelabel{LABEL} == \hss \llap{LABEL}}
+% fi
+% END
+%
+% \enditemize == \endlist
+%
+\newcount\@itemdepth \@itemdepth = 0
+
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne
+\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+\list{\csname\@itemitem\endcsname}{\def\makelabel##1{\hss\llap{##1}}}\fi}
+
+\let\enditemize =\endlist
+
+ \message{boxes,}
+% *********************************************
+% * BOXES *
+% *********************************************
+%
+% USER COMMANDS:
+%
+% \makebox [WID][POS]{OBJ}
+% : puts OBJ in an \hbox of width WID, positioned by POS.
+% POS = l -> flushleft, POS = r -> flushright.
+% Default is centered.
+% If WID is missing, then POS is also missing and OBJ
+% is put in an \hbox of its natural width.
+%
+% \mbox{OBJ} == \makebox{OBJ}, and is more efficient.
+%
+% \makebox (X,Y)[POS]{OBJ}
+% : puts OBJ in an \hbox of width X * \unitlength
+% and height Y * \unitlength. POS arguments are
+% l or r for flushleft, flushright and t or b
+% for top, bottom -- or combinations like tr or rb.
+% Default for horizontal and vertical are centered.
+%
+% \newsavebox{\CMD} : If \CMD is undefined, then defines it
+% to be a TeX box register.
+%
+% \savebox {\CMD} ... : \CMD is defined to be a TeX box register,
+% and the '...' are any \makebox arguments. It is
+% like \makebox, except it doesn't produce text but
+% saves the value in \box \CMD.
+% \sbox N{OBJ} is an efficient abbreviation for
+% \savebox N{OBJ}.
+%
+% \framebox ... : like \makebox, except it puts a 'frame' around
+% the box. The frame is made of lines of thickness
+% \framerule, separated by space \framesep from the
+% text -- except for \framebox(X,Y) ... , where the
+% thickness of the lines is as for the picture environment,
+% and there is no separation added.
+% \fbox{OBJ} is an efficient abbreviation for \framebox{OBJ}
+%
+% \parbox[POS]{WIDTH}{TEXT} : Makes a box with \hsize TEXT, positioned
+% by POS as follows:
+% c : \vcenter (placed in $...$ if not in math mode)
+% b : \vbox
+% t : \vtop
+% default value is c.
+% Sets \hsize := WIDTH and calls \@parboxrestore, which does
+% the following:
+% Restores the original definitions of:
+% \par
+% \\
+% \- \' \` \=
+% Resets the following parameters:
+% \parindent = 0pt
+% \linewidth = \hsize
+% \@totalleftmargin = 0pt
+% \leftskip = 0pt
+% \rightskip = 0pt
+% \@rightskip = 0pt
+% \parfillskip = 0pt plus 1fil
+% \lineskip = \normallineskip
+% \baselineskip = \normalbaselineskip
+% Calls \sloppy
+%
+% Note: \@arrayparboxrestore same as \@parboxrestore
+% but it doesn't restore \\.
+%
+% \minipage : Similar to parbox, except it also
+% makes this look like a page by setting
+% \textwidth == \columnwidth == box width
+% changes footnotes by redefining:
+% \@mpfn == mpfootnote
+% \thempfn == \thempfootnote
+% \@footnotetext == \@mpfootnotetext
+% resets the following list environment parameters
+% \@listdepth == \@mplistdepth
+% where \@mplistdepth is initialized to zero,
+% and executes \@minipagerestore to allow the document
+% style to reset any other parameters it desires.
+% It sets @minipage := T, and resets \everypar to set
+% it false. This switch \addvspace from putting space
+% at the top of a minipage.
+%
+% \rule [RAISED]{WIDTH}{HEIGHT} : Makes a WIDTH X HEIGHT rule, raised
+% RAISED.
+%
+% \underline {TEXT} : Makes an underlined hbox with TEXT in it.
+%
+% \raisebox{DISTANCE}[HEIGHT][DEPTH]{BOX} : Raises BOX up by DISTANCE
+% length (down if DISTANCE negative). Makes TeX think that
+% the new box extends HEIGHT above the line and DEPTH below, for
+% a total vertical length of HEIGHT+DEPTH. Default values of
+% HEIGHT & DEPTH = actual height and depth of box in new position.
+%
+% \makebox ==
+% BEGIN
+% if next char = (
+% then \@makepicbox
+% else if next char = [
+% then \@makebox
+% else \mbox fi
+% fi
+% END
+%
+% \@makebox[LEN] ==
+% BEGIN
+% leave vertical mode
+% if next char '[' then \@imakebox[LEN]
+% else \@imakebox[LEN][x] fi
+% END
+%
+% \@imakebox[LEN][POS]{OBJ} ==
+% BEGIN
+% \hbox to LEN
+% { \mb@l :=L \mb@r :=L \hss
+% \let\mb@POS = \relax
+% \mb@l OBJ \mb@r }
+% END
+%
+% \@makepicbox(X,Y) ==
+% BEGIN
+% leave vertical mode
+% if next char = [ then \@imakepicbox(X,Y)
+% else \@imakepicbox(X,Y)[] fi
+% END
+%
+% \@imakepicbox(X,Y)[POS]{OBJ} ==
+% BEGIN
+% \vbox to Y * \unitlength
+% { \mb@l :=L \mb@r :=L \hss
+% \mb@t :=L \mb@b :=L \hss
+% tfor \@tempa := POS % one iteration for each token in POS
+% do \mb@eval(\@tempa) :=L null od
+% \mb@t
+% \hbox to X * \unitlength
+% {\mb@l OBJ \mb@r }
+% \mb@b}
+% END
+%
+
+\def\makebox{\@ifnextchar ({\@makepicbox}{\@ifnextchar
+ [{\@makebox}{\mbox}}}
+
+\def\mbox#1{\leavevmode\hbox{#1}}
+
+\def\@makebox[#1]{\leavevmode\@ifnextchar [{\@imakebox[#1]}{\@imakebox[#1][x]}}
+
+\long\def\@imakebox[#1][#2]#3{\hbox to#1{\let\mb@l\hss
+\let\mb@r\hss \expandafter\let\csname mb@#2\endcsname\relax
+\mb@l #3\mb@r}}
+
+\def\@makepicbox(#1,#2){\leavevmode\@ifnextchar
+ [{\@imakepicbox(#1,#2)}{\@imakepicbox(#1,#2)[]}}
+
+\long\def\@imakepicbox(#1,#2)[#3]#4{\vbox to#2\unitlength
+ {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss
+ \let\mb@t\vss
+ \@tfor\@tempa :=#3\do{\expandafter\let
+ \csname mb@\@tempa\endcsname\relax}%
+\mb@t\hbox to #1\unitlength{\mb@l #4\mb@r}\mb@b}}
+
+\def\newsavebox#1{\@ifdefinable#1{\newbox#1}}
+
+\def\savebox#1{\@ifnextchar ({\@savepicbox#1}{\@ifnextchar
+ [{\@savebox#1}{\sbox#1}}}
+
+\def\sbox#1#2{\setbox#1\hbox{#2}}
+
+\def\@savebox#1[#2]{\@ifnextchar [{\@isavebox#1[#2]}{\@isavebox#1[#2][x]}}
+
+\long\def\@isavebox#1[#2][#3]#4{\setbox#1 \hbox{\@imakebox[#2][#3]{#4}}}
+
+\def\@savepicbox#1(#2,#3){\@ifnextchar
+ [{\@isavepicbox#1(#2,#3)}{\@isavepicbox#1(#2,#3)[]}}
+
+\long\def\@isavepicbox#1(#2,#3)[#4]#5{\setbox#1 \hbox{\@imakepicbox
+ (#2,#3)[#4]{#5}}}
+
+\def\usebox#1{\leavevmode\copy #1\relax}
+
+%% The following definition of \frame was written by Pavel Curtis
+\long\def\frame#1{\leavevmode
+ \hbox{\hskip-\@wholewidth
+ \vbox{\vskip-\@wholewidth
+ \hrule \@height\@wholewidth
+ \hbox{\vrule \@width\@wholewidth #1\vrule \@width \@wholewidth}
+ \hrule \@height \@wholewidth\vskip -\@halfwidth}
+ \hskip-\@wholewidth}}
+
+\newdimen\fboxrule
+\newdimen\fboxsep
+
+\long\def\fbox#1{\leavevmode\setbox\@tempboxa\hbox{#1}\@tempdima\fboxrule
+ \advance\@tempdima \fboxsep \advance\@tempdima \dp\@tempboxa
+ \hbox{\lower \@tempdima\hbox
+ {\vbox{\hrule \@height \fboxrule
+ \hbox{\vrule \@width \fboxrule \hskip\fboxsep
+ \vbox{\vskip\fboxsep \box\@tempboxa\vskip\fboxsep}\hskip
+ \fboxsep\vrule \@width \fboxrule}
+ \hrule \@height \fboxrule}}}}
+
+\def\framebox{\@ifnextchar ({\@framepicbox}{\@ifnextchar
+ [{\@framebox}{\fbox}}}
+
+\def\@framebox[#1]{\@ifnextchar [{\@iframebox[#1]}{\@iframebox[#1][x]}}
+
+\long\def\@iframebox[#1][#2]#3{\leavevmode
+ \savebox\@tempboxa[#1][#2]{\kern\fboxsep #3\kern\fboxsep}\@tempdima\fboxrule
+ \advance\@tempdima \fboxsep \advance\@tempdima \dp\@tempboxa
+ \hbox{\lower \@tempdima\hbox
+ {\vbox{\hrule \@height \fboxrule
+ \hbox{\vrule \@width \fboxrule \hskip-\fboxrule
+ \vbox{\vskip\fboxsep \box\@tempboxa\vskip\fboxsep}\hskip
+ -\fboxrule\vrule \@width \fboxrule}
+ \hrule \@height \fboxrule}}}}
+
+\def\@framepicbox(#1,#2){\@ifnextchar
+ [{\@iframepicbox(#1,#2)}{\@iframepicbox(#1,#2)[]}}
+
+\long\def\@iframepicbox(#1,#2)[#3]#4{\frame{\@imakepicbox(#1,#2)[#3]{#4}}}
+
+\def\parbox{\@ifnextchar [{\@iparbox}{\@iparbox[c]}}
+
+\long\def\@iparbox[#1]#2#3{\leavevmode \@pboxswfalse
+ \if #1b\vbox
+ \else \if #1t\vtop
+ \else \ifmmode \vcenter
+ \else \@pboxswtrue $\vcenter
+ \fi
+ \fi
+ \fi{\hsize #2\@parboxrestore #3}\if@pboxsw $\fi}
+
+\let\@dischyph=\-
+\let\@acci=\'
+\let\@accii=\`
+\let\@acciii=\=
+
+
+\def\@arrayparboxrestore{\let\par\@@par
+ \let\-\@dischyph
+ \let\'\@acci \let\`\@accii \let\=\@acciii
+ \parindent\z@
+ \everypar{}\linewidth\hsize
+ \@totalleftmargin\z@ \leftskip\z@ \rightskip\z@ \@rightskip\z@
+ \parfillskip\@flushglue \lineskip\normallineskip
+ \baselineskip\normalbaselineskip\sloppy}
+
+\def\@parboxrestore{\@arrayparboxrestore\let\\=\@normalcr}
+
+\newif\if@minipage \@minipagefalse
+
+\def\minipage{\@ifnextchar [{\@iminipage}{\@iminipage[c]}}
+
+\def\@iminipage[#1]#2{\leavevmode \@pboxswfalse
+ \if #1b\vbox
+ \else \if #1t\vtop
+ \else \ifmmode \vcenter
+ \else \@pboxswtrue $\vcenter
+ \fi
+ \fi
+ \fi\bgroup
+ \hsize #2\textwidth\hsize \columnwidth\hsize
+ \@parboxrestore
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
+ \let\@footnotetext\@mpfootnotetext
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \@minipagerestore\@minipagetrue
+ \everypar{\global\@minipagefalse\everypar{}}}
+
+
+\let\@minipagerestore=\relax
+
+\def\endminipage{\par\vskip-\lastskip
+\ifvoid\@mpfootins\else
+\vskip\skip\@mpfootins\footnoterule\unvbox\@mpfootins\fi
+\egroup\if@pboxsw $\fi}
+
+\newcount\@mplistdepth
+\newinsert\@mpfootins
+
+\long\def\@mpfootnotetext#1{\global\setbox\@mpfootins
+ \vbox{\unvbox\@mpfootins
+ \footnotesize
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@mpfootnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces #1}}}
+
+\newif\if@pboxsw
+
+\def\rule{\@ifnextchar[{\@rule}{\@rule[\z@]}}
+
+\def\@rule[#1]#2#3{\@tempdima#3\advance\@tempdima #1\leavevmode\hbox{\vrule
+ \@width#2 \@height\@tempdima \@depth-#1}}
+
+\let\@@underline\underline
+\def\underline#1{\relax\ifmmode
+ \@@underline{#1}\else $\@@underline{\hbox{#1}}$\relax\fi}
+
+\def\raisebox#1{\@ifnextchar[{\@argrsbox{#1}}{\@rsbox{#1}}}
+
+\def\@argrsbox#1[#2]{%
+\@ifnextchar[{\@iirsbox{#1}[#2]}{\@irsbox{#1}[#2]}}
+
+\long\def\@rsbox#1#2{\leavevmode\hbox{\raise #1\hbox{#2}}}
+
+\long\def\@irsbox#1[#2]#3{\setbox\@tempboxa \hbox
+ {\raise #1\hbox{#3}}\ht\@tempboxa#2\leavevmode\box\@tempboxa}
+
+\long\def\@iirsbox#1[#2][#3]#4{\setbox\@tempboxa \hbox
+ {\raise #1\hbox{#4}}\ht\@tempboxa#2\dp\@tempboxa#3\leavevmode\box\@tempboxa}
+
+
+ \message{tabbing,}
+% ****************************************
+% * THE TABBING ENVIRONMENT *
+% ****************************************
+%
+% \dimen(\@firsttab + i) = distance of tab stop i from left margin
+% 0 <= i <= 15 (?).
+%
+% \dimen\@firsttab is initialized to \@totalleftmargin, so it starts
+% at the prevailing left margin.
+%
+% \@maxtab = number of highest defined tab register
+% probably = \@firsttab + 12
+% \@nxttabmar = tab stop number of next line's left margin
+% \@curtabmar = tab stop number of current line's left margin
+% \@curtab = number of the current tab. At start of line,
+% it equals \@curtabmar
+% \@hightab = largest tab number currently defined.
+% \@tabpush = depth of \pushtab's
+%
+% \box\@curline = contents of current line, excluding left margin skip,
+% and excluding contents of current field
+% \box\@curfield = contents of current field
+%
+% @rjfield = switch: T iff the last field of the line should be
+% right-justified at the right margin.
+%
+% \tabbingsep = distance left by the \' command between the current
+% position and the field that is ``left-shifted''.
+%
+% UTILITY MACROS
+% \@stopfield : closes the current field
+% \@addfield : adds the current field to the current line.
+% \@contfield : continues the current field
+% \@startfield : begins the next field
+% \@stopline : closes the current line and outputs it
+% \@startline : starts the next line
+% \@ifatmargin : an \if that is true iff the current line.
+% has width zero
+%
+% \@startline ==
+% BEGIN
+% \@curtabmar :=G \@nxttabmar
+% \@curtab :=G \@curtabmar
+% \box\@curline :=G null
+% \@startfield
+% \strut
+% END
+%
+% \@stopline ==
+% BEGIN
+% \unskip
+% \@stopfield
+% if @rjfield = T
+% then @rjfield :=G F
+% \@tempdima := \@totalleftmargin + \linewidth
+% \hbox to \@tempdima{\@itemfudge
+% \hskip \dimen\@curtabmar
+% \box\@curline
+% \hfil
+% \box\@curfield}
+% else \@addfield
+% \hbox {\@itemfudge
+% \hskip \dimen\@curtabmar
+% \box\@curline}
+% fi
+% END
+%
+% \@startfield ==
+% BEGIN
+% \box\@curfield :=G \hbox {
+% END
+%
+% \@stopfield ==
+% BEGIN
+% }
+% END
+%
+% \@contfield ==
+% BEGIN
+% \box\@curfield :=G \hbox { \unhbox\@currfield %%} brace matching
+% END
+% \@addfield ==
+% BEGIN
+% \box\@curline :=G \unbox\@curline * \unbox\@curfield
+% END
+%
+% \@ifatmargin ==
+% BEGIN
+% if dim of box\@curline = 0pt then
+% END
+%
+%
+% \tabbing ==
+% BEGIN
+% \lineskip :=L 0pt
+% \> == \@rtab
+% \< == \@ltab
+% \= == \@settab
+% \+ == \@tabplus
+% \- == \@tabminus
+% \` == \@tabrj
+% \' == \@tablab
+% \\ == BEGIN \@stopline \@startline END
+% \\[DIST] == BEGIN \@stopline \vskip DIST \@startline\ignorespaces END
+% \\* == BEGIN \@stopline \penalty 10000 \@startline END
+% \\*[DIST] == BEGIN \@stopline \penalty 10000 \vskip DIST
+% \@startline\ignorespaces END
+% \@hightab :=G \@nxttabmar :=G \@firsttab
+% \@tabpush :=G 0
+% \dimen\@firsttab := \@totalleftmargin
+% @rjfield :=G F
+% \trivlist \item[]
+% if @minipage = F then \vskip \parskip fi
+% \box\@tabfbox = \rlap{\indent\the\everypar} % note: \the\everypar sets
+% \@itemfudge == BEGIN \box\@tabfbox END % @inlabel :=G F
+% \@startline
+% \ignorespaces
+% END
+%
+% \@endtabbing ==
+% BEGIN
+% \@stopline
+% if \@tabpush > 0 then error message: ''unmatched \poptabs'' fi
+% \endtrivlist
+% END
+%
+% \@rtab ==
+% BEGIN
+% \@stopfield
+% \@addfield
+% if \@curtab < \@hightab
+% then \@curtab :=G \@curtab + 1
+% else error message ``Undefined Tab'' fi
+% \@tempdima := \dimen\@curtab - \dimen\@curtabmar
+% - width of box \@curline
+% \box\@curline :=G \hbox{\unhbox\@curline + \hskip\@tempdima}
+% \@startfield
+% END
+%
+% \@settab ==
+% BEGIN
+% \@stopfield
+% \@addfield
+% if \@curtab < \@maxtab
+% then \@curtab :=G \@curtab+1
+% else error message: ``Too many tabs'' fi
+% if \@curtab > \@hightab
+% then \@hightab :=L \@curtab fi
+% \dimen\@curtab :=L \dimen\@curtabmar + width of \box\@curline
+% \@startfield
+% END
+%
+% \@ltab ==
+% BEGIN
+% \@ifatmargin
+% then if \@curtabmar > \@firsttab
+% then \@curtab :=G \@curtab - 1
+% \@curtabmar :=G \@curtabmar - 1
+% else error message ``Too many untabs'' fi
+% else error message ``Left tab in middle of line''
+% fi
+% END
+%
+% \@tabplus ==
+% BEGIN
+% if \@nxttabmar < \@hightab
+% then \@nxttabmar :=G \@nxttabmar+1
+% else error message ``Undefined tab''
+% fi
+% END
+%
+% \@tabminus ==
+% BEGIN
+% if \@nxttabmar > \@firsttab
+% then \@nxttabmar :=G \@nxttabmar-1
+% else error message ``Too many untabs''
+% fi
+% END
+%
+% \@tabrj ==
+% BEGIN \@stopfield
+% \@addfield
+% @rjfield :=G T
+% \@startfield
+% END
+%
+% \@tablab ==
+% BEGIN \@stopfield
+% \box\@curline := \hbox{ \box\@curline
+% \hskip - width of \box\@curfield
+% \hskip -\tabbingsep
+% \box\@curfield
+% \hskip \tabbingsep }
+% \@startfield
+% END
+%
+% \pushtabs ==
+% BEGIN
+% \@stopfield
+% \@tabpush :=G \@tabpush + 1
+% \begingroup
+% \@contfield
+% END
+%
+% \poptabs ==
+% BEGIN
+% \@stopfield
+% if \@tabpush > 0
+% then \endgroup
+% \@tabpush :=G \@tabpush - 1
+% else error message: ``Too many \poptabs''
+% fi
+% \@contfield
+% END
+%
+% The accents \` , \' , and \= that have been redefined inside a tabbing
+% environment can be called by typing \a` , \a' , and \a=.
+%
+
+\expandafter \let \csname a`\endcsname = \`
+\expandafter \let \csname a'\endcsname = \'
+\expandafter \let \csname a=\endcsname = \=
+\def\a#1{\csname a#1\endcsname}
+
+\newif\if@rjfield
+\newcount\@firsttab
+\newcount\@maxtab
+\newdimen\@gtempa \@firsttab=\allocationnumber
+\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
+\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
+\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa
+\newdimen\@getempa \@maxtab=\allocationnumber
+\dimen\@firsttab=0pt
+\newcount\@nxttabmar
+\newcount\@curtabmar
+\newcount\@curtab
+\newcount\@hightab
+\newcount\@tabpush
+\newbox\@curline
+\newbox\@curfield
+\newbox\@tabfbox
+
+\def\@startline{\global\@curtabmar\@nxttabmar\relax
+ \global\@curtab\@curtabmar\setbox\@curline\hbox
+ {}\@startfield\strut}
+
+\def\@stopline{\unskip\@stopfield\if@rjfield \global\@rjfieldfalse
+ \@tempdima\@totalleftmargin \advance\@tempdima\linewidth
+\hbox to\@tempdima{\@itemfudge\hskip\dimen\@curtabmar
+ \box\@curline\hfil\box\@curfield}\else\@addfield
+ \hbox{\@itemfudge\hskip\dimen\@curtabmar\box\@curline}\fi}
+
+\def\@startfield{\global\setbox\@curfield\hbox\bgroup}%{ BRACE MATCH HACK
+\let\@stopfield=}
+\def\@contfield{\global\setbox\@curfield\hbox\bgroup\unhbox\@curfield}
+\def\@addfield{\global\setbox\@curline\hbox{\unhbox
+ \@curline\unhbox\@curfield}}
+\def\@ifatmargin{\ifdim \wd\@curline =\z@}
+
+\def\@tabcr{\@stopline \@ifstar{\penalty \@M \@xtabcr}{\@xtabcr}}
+
+\def\@xtabcr{\@ifnextchar[{\@itabcr}{\@startline\ignorespaces}}
+
+\def\@itabcr[#1]{\vskip #1\@startline\ignorespaces}
+
+\def\kill{\@stopfield\@startline\ignorespaces}
+
+% REMOVE \outer FROM PLAIN'S DEF OF \+
+
+\def\+{\tabalign}
+
+
+\def\tabbing{\lineskip \z@\let\>\@rtab\let\<\@ltab\let\=\@settab
+ \let\+\@tabplus\let\-\@tabminus\let\`\@tabrj\let\'\@tablab
+ \let\\=\@tabcr
+ \global\@hightab\@firsttab
+ \global\@nxttabmar\@firsttab
+ \dimen\@firsttab\@totalleftmargin
+ \global\@tabpush0 \global\@rjfieldfalse
+ \trivlist \item[]\if@minipage\else\vskip\parskip\fi
+ \setbox\@tabfbox\hbox{\rlap{\indent\hskip\@totalleftmargin
+ \the\everypar}}\def\@itemfudge{\box\@tabfbox}\@startline\ignorespaces}
+
+\def\endtabbing{\@stopline\ifnum\@tabpush > 0 \@badpoptabs \fi\endtrivlist}
+
+\def\@rtab{\@stopfield\@addfield\ifnum \@curtab<\@hightab
+ \global\advance\@curtab \@ne \else\@badtab\fi
+ \@tempdima\dimen\@curtab
+ \advance\@tempdima -\dimen\@curtabmar
+ \advance\@tempdima -\wd\@curline
+ \setbox\@curline\hbox{\unhbox\@curline\hskip\@tempdima}
+ \@startfield\ignorespaces}
+\def\@settab{\@stopfield\@addfield\ifnum \@curtab < \@maxtab
+ \global\advance\@curtab \@ne \else\@latexerr{Tab overflow}\@ehd\fi
+ \ifnum\@curtab > \@hightab
+ \@hightab\@curtab\fi
+ \dimen\@curtab\dimen\@curtabmar
+ \advance\dimen\@curtab \wd\@curline\@startfield\ignorespaces}
+\def\@ltab{\@ifatmargin\ifnum\@curtabmar > \@firsttab
+ \global\advance\@curtab \m@ne \global\advance\@curtabmar \m@ne \else
+ \@badtab\fi\else
+ \@latexerr{\string\<\space in mid line}\@ehd\fi\ignorespaces}
+\def\@tabplus {\ifnum \@nxttabmar < \@hightab
+ \global\advance\@nxttabmar \@ne \else
+ \@badtab\fi\ignorespaces}
+\def\@tabminus{\ifnum\@nxttabmar > \@firsttab
+ \global\advance\@nxttabmar \m@ne \else
+ \@badtab\fi\ignorespaces}
+\def\@tabrj{\@stopfield\@addfield\global\@rjfieldtrue\@startfield\ignorespaces}
+\def\@tablab{\@stopfield\setbox\@curline\hbox{\box\@curline
+ \hskip -\wd\@curfield \hskip -\tabbingsep \box\@curfield
+ \hskip \tabbingsep}\@startfield\ignorespaces}
+\def\pushtabs{\@stopfield\@addfield\global\advance\@tabpush \@ne \begingroup
+ \@contfield}
+\def\poptabs{\@stopfield\@addfield\ifnum\@tabpush > \z@ \endgroup
+ \global\advance\@tabpush \m@ne \else
+ \@badpoptabs\fi\@contfield}
+
+\newdimen\tabbingsep
+
+ \message{array,}
+% ****************************************
+% * ARRAY AND TABULAR ENVIRONMENTS *
+% ****************************************
+%
+% ARRAY PARMETERS:
+% \arraycolsep : half the width separating columns in an array environment
+% \tabcolsep : half the width separating columns in a tabular environment
+% \arrayrulewidth : width of rules
+% \doublerulesep : space between adjacent rules in array or tabular
+% \arraystretch : line spacing in array and tabular environments is done by
+% placing a strut in every row of height and depth
+% \arraystretch times the height and depth of the strut
+% produced by an ordinary \strut commmand.
+%
+% PREAMBLE:
+% The PREAMBLE argument of an array or tabular environment can contain
+% the following:
+% l,r,c : indicate where entry is to be placed.
+% | : for vertical rule
+% @{EXP} : inserts the text EXP in every column. \arraycolsep or \tabcolsep
+% spacing is suppressed.
+% *{N}{PRE} : equivalent to writing N copies of PRE in the preamble. PRE
+% may contain *{N'}{EXP'} expressions.
+% p{LEN} : makes entry in parbox of width LEN.
+%
+% SPECIAL ARRAY COMMANDS:
+% \multicolumn{N}{FORMAT}{ITEM} : replaces the next N column items by
+% ITEM, formatted according to FORMAT. FORMAT should contain at most
+% one l,r or c. If it contains none, then ITEM is ignored.
+%
+% \vline : draws a vertical line the height of the current row. May
+% appear in an array element entry.
+% \hline : draws a horizontal line between rows. Must appear either
+% before the first entry (to appear above the first row) or right
+% after a \\ command. If followed by another \hline, then adds
+% a \vskip of \doublerulesep.
+%
+% \cline[i-j] : draws horizontal lines between rows covering columns
+% i through j, inclusive. Multiple commands may follow
+% one another to provide lines covering several disjoint
+% columns
+% \extracolsep{WIDTH} : for use inside an @ in the preamble. Causes a WIDTH
+% space to be added between columns for the rest of the
+% columns. This is in addition to the ordinary intercolumn
+% space.
+%
+% \array ==
+% BEGIN
+% \@acol == \@arrayacol
+% \@classz == \@arrayclassz
+% \@classiv == \@arrayclassiv
+% \\ == \@arraycr
+% \@halignto == NULL
+% \@tabarray
+% END
+%
+% \endarray{NAME} == BEGIN \crcr }} END
+%
+% \tabular ==
+% BEGIN
+% \@halignto == NULL
+% \@tabular
+% END
+%
+% \tabular*{WIDTH} ==
+% BEGIN
+% \@halignto == to WIDTH
+% \@tabular
+% END
+%
+% \@tabular ==
+% BEGIN
+% \leavevmode
+% \hbox { $
+% \@acol == \@tabacol
+% \@classz == \@tabclassz
+% \@classiv == \@tabclassiv
+% \\ == \@tabularcr
+% \@tabarray
+% END
+%
+% \endtabular == BEGIN \crcr}} $} END
+%
+% \@tabarray == if next char = [ then \@array else \@array[c] fi
+%
+% \@array[POS]{PREAMBLE} ==
+% BEGIN
+% define \@arstrutbox to make \@arstrut produce strut of height
+% and depth \arraystretch times the height and
+% depth of a normal strut.
+% \@mkpream{PREAMBLE}
+% \@preamble == \halign \@halignto {\tabskip=0pt\@arstrut
+% eval{\@preamble}\tabskip = 0pt\cr %% }
+% \@startpbox == \@@startpbox
+% \@endpbox == \@@endpbox
+% if POS = t then \vtop
+% else if POS = b then \vbox
+% else \vcenter
+% fi fi
+% {
+% \par ==L \relax
+% \@sharp == #
+% \protect == \relax
+% \lineskip :=L 0pt
+% \baselineskip :=L 0pt
+% \@preamble
+% END
+%
+%
+% \@arraycr ==
+% BEGIN
+% $ %% Prevents extra space at end of row's last entry.
+% if next char = [
+% then \@argarraycr
+% else $ \cr %% Needed to balance $
+% END
+%
+% \@argarraycr[LENGTH] ==
+% BEGIN
+% $ %% Needed to balance $ of \@arraycr
+% if LENGTH > 0
+% then \@tempdima := depth of \@arstrutbox + LENGTH
+% \vrule height 0pt width 0pt depth \@tempdima
+% \cr
+% else \cr \noalign{\vskip LENGTH}
+% END
+%
+% \@tabularcr and \@argtabularcr same as \@arraycr and \@argarraycr
+% except without the extra $'s.
+
+\def\extracolsep#1{\tabskip #1\relax}
+
+\def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv \let\\\@arraycr\def\@halignto{}\@tabarray}
+
+\def\endarray{\crcr\egroup\egroup}
+\def\endtabular{\crcr\egroup\egroup $\egroup}
+\expandafter \let \csname endtabular*\endcsname = \endtabular
+
+\def\tabular{\def\@halignto{}\@tabular}
+
+\expandafter \def\csname tabular*\endcsname #1{\def\@halignto{to #1}\@tabular}
+
+\def\@tabular{\leavevmode \hbox \bgroup $\let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray}
+
+\def\@tabarray{\@ifnextchar[{\@array}{\@array[c]}}
+
+\def\@array[#1]#2{\setbox\@arstrutbox=\hbox{\vrule
+ height\arraystretch \ht\strutbox
+ depth\arraystretch \dp\strutbox
+ width\z@}\@mkpream{#2}\edef\@preamble{\halign \noexpand\@halignto
+\bgroup \tabskip\z@ \@arstrut \@preamble \tabskip\z@ \cr}%
+\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
+ \bgroup \let\par\relax
+ \let\@sharp##\let\protect\relax \lineskip\z@\baselineskip\z@\@preamble}
+
+\def\@arraycr{${\ifnum0=`}\fi\@ifstar{\@xarraycr}{\@xarraycr}}
+\def\@xarraycr{\@ifnextchar[{\@argarraycr}{\ifnum0=`{\fi}${}\cr}}
+
+\def\@argarraycr[#1]{\ifnum0=`{\fi}${}\ifdim #1>\z@ \@xargarraycr{#1}\else
+ \@yargarraycr{#1}\fi}
+
+\def\@tabularcr{{\ifnum0=`}\fi\@ifstar{\@xtabularcr}{\@xtabularcr}}
+\def\@xtabularcr{\@ifnextchar[{\@argtabularcr}{\ifnum0=`{\fi}\cr}}
+
+\def\@argtabularcr[#1]{\ifnum0=`{\fi}\ifdim #1>\z@
+ \unskip\@xargarraycr{#1}\else \@yargarraycr{#1}\fi}
+
+\def\@xargarraycr#1{\@tempdima #1\advance\@tempdima \dp \@arstrutbox
+ \vrule \@height\z@ \@depth\@tempdima \@width\z@ \cr}
+
+\def\@yargarraycr#1{\cr\noalign{\vskip #1}}
+
+% \multicolumn{NUMBER}{FORMAT}{ITEM} ==
+% BEGIN
+% \multispan{NUMBER}
+% \begingroup
+% \@addamp == null
+% \@mkpream{FORMAT}
+% \@sharp == ITEM
+% \protect == \relax
+% \@startpbox == \@@startpbox
+% \@endpbox == \@@endpbox
+% \@arstrut
+% \@preamble
+% \endgroup
+% END
+
+\def\multicolumn#1#2#3{\multispan{#1}\begingroup
+ \def\@addamp{}\@mkpream{#2}%
+\def\@sharp{#3}\let\protect\relax
+ \let\@startpbox\@@startpbox\let\@endpbox\@@endpbox
+ \@arstrut \@preamble\endgroup\ignorespaces}
+
+
+% Codes for classes and character numbers of array, tabular and
+% multicolumn arguments.
+%
+% Character Class Number
+% --------- ----- ------
+% c 0 0
+% l 0 1
+% r 0 2
+%
+% | 1 -
+% @ 2 -
+% p 3 -
+% {@-exp} 4 -
+% {p-arg} 5 -
+%
+% \@testpach \foo : expands \foo, which should be an array parameter token,
+% and sets \@chclass and \@chnum to its class and number.
+% Uses \@lastchclass to distinguish 4 and 5
+%
+% Preamble error codes
+% 0: 'illegal character'
+% 1: 'Missing @-exp'
+% 2: 'Missing p-arg'
+%
+% \@addamp ==
+% BEGIN if @firstamp = true then @firstamp := false
+% else & fi
+% END
+%
+% \@mkpream TOKENLIST ==
+% BEGIN
+% @firstamp := T
+% \@lastchclass := 6
+% \@preamble == null
+% \@sharp == \relax
+% \protect == BEGIN \noexpand\protect\noexpand END
+% \@startpbox == \relax
+% \@endpbox == \relax
+% \@expast{TOKENLIST}
+% for \@nextchar := expand(\@tempa)
+% do \@testpach{\@nextchar}
+% case of \@chclass
+% 0 -> \@classz
+% 1 -> \@classi
+% ...
+% 5 -> \@classv
+% end case
+% \@lastchclass := \@chclass
+% od
+% case of \@lastchclass
+% 0 -> \hskip \arraycolsep % lrc
+% 1 -> % |
+% 2 -> \@preamerr1 % 'Missing @-exp' % @
+% 3 -> \@preamerr2 % 'Missing p-arg' % p
+% 4 -> % @-exp
+% 5 -> \hskip \arraycolsep % p-exp
+% end case
+% END
+%
+% \@arrayclassz ==
+% BEGIN
+% \@preamble := \@preamble *
+% case of \@lastchclass
+% 0 -> \hskip \arraycolsep \@addamp \hskip \arraycolsep
+% 1 -> \@addamp \hskip \arraycolsep
+% 2 -> % impossible
+% 3 -> % impossible
+% 4 -> \@addamp
+% 5 -> \hskip \arraycolsep \@addamp \hskip \arraycolsep
+% 6 -> \@addamp \hskip \arraycolsep
+% end case
+% * case of \@chnum
+% 0 -> \hfil$\relax\@sharp$\hfil
+% 1 -> $\relax\@sharp$\hfil
+% 2 -> \hfil$\relax\@sharp$
+% end case
+% END
+%
+% \@tabclassz == similar to \@arrayclassz
+%
+% \@classi ==
+% BEGIN
+% \@preamble := \@preamble *
+% case of \@lastchclass
+% 0 -> \hskip \arraycolsep \@arrayrule
+% 1 -> \hskip \doublerulesep \@arrayrule
+% 2 -> % impossible
+% 3 -> % impossible
+% 4 -> \@arrayrule
+% 5 -> \hskip \arraycolsep \@arrayrule
+% 6 -> \@arrayrule
+% end case
+% END
+%
+% \@classii ==
+% BEGIN
+% \@preamble := \@preamble *
+% case of \@lastchclass
+% 0 ->
+% 1 -> \hskip .5\arrayrulewidth
+% 2 -> % impossible
+% else ->
+% end case
+% END
+%
+% \@classiii ==
+% BEGIN
+% \@preamble := \@preamble *
+% case of \@lastchclass
+% 0 -> \hskip \arraycolsep \@addamp \hskip \arraycolsep
+% 1 -> \@addamp \hskip \arraycolsep
+% 2 -> % impossible
+% 3 -> % impossible
+% 4 -> \@addamp
+% 5 -> \hskip \arraycolsep \@addamp \hskip \arraycolsep
+% 6 -> \@addamp \hskip \arraycolsep
+% end case
+% END
+%
+% \@arrayclassiv == BEGIN \@preamble := \@preamble * $ \@nextchar$ END
+%
+% \@tabclassiv == same as \@arrayclassv except without the $ ... $
+%
+% \@classv ==
+% BEGIN
+% \@preamble := \@preamble * \@startpbox{\@nextchar}\ignorespaces\@sharp
+% \@endpbox
+% END
+%
+% \@expast{S}: Sets \@tempa := S with all instances of *{N}{STRING}
+% replaced by N copies of STRING, where N > 0. An *
+% appearing inside braces is ignored, but *-expressions
+% inside STRING are expanded, so nested *-expressions are
+% handled properly.
+%
+% \@expast{S} == BEGIN \@xexpast S *0x\@@ END
+%
+% \@xexpast S1 *{N}{S2} S3 \@@ ==
+% BEGIN
+% \@tempa := S1
+% \@tempcnta := N
+% if \@tempcnta > 0
+% then while \@tempcnta > 0 do \@tempa := \@tempa S2
+% \@tempcnta := \@tempcnta - 1 od
+% \@tempb == \@xexpast
+% else \@tempb == \@xexnoop
+% fi
+% \expandafter \@tempb \@tempa S3 \@@
+% END
+%
+
+\def\@xexnoop #1\@@{}
+
+\def\@expast#1{\@xexpast #1*0x\@@}
+
+\def\@xexpast#1*#2#3#4\@@{\edef\@tempa{#1}\@tempcnta#2\relax
+ \ifnum\@tempcnta >0 \@whilenum\@tempcnta >0\do
+ {\edef\@tempa{\@tempa#3}\advance\@tempcnta by \m@ne}\let\@tempb\@xexpast
+ \else \let\@tempb\@xexnoop\fi
+ \expandafter\@tempb \@tempa #4\@@}
+
+
+\newif\if@firstamp
+\def\@addamp{\if@firstamp \@firstampfalse \else
+ \edef\@preamble{\@preamble &}\fi}
+\def\@arrayacol{\edef\@preamble{\@preamble \hskip \arraycolsep}}
+\def\@tabacol{\edef\@preamble{\@preamble \hskip \tabcolsep}}
+\def\@ampacol{\@addamp \@acol}
+\def\@acolampacol{\@acol\@addamp\@acol}
+
+\def\@mkpream#1{\@firstamptrue\@lastchclass6
+\def\@preamble{}\def\protect{\noexpand\protect\noexpand}\let\@sharp\relax
+\let\@startpbox\relax\let\@endpbox\relax
+\@expast{#1}\expandafter\@tfor \expandafter
+ \@nextchar \expandafter:\expandafter=\@tempa\do{\@testpach\@nextchar
+ \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii
+ \or \@classiv \or\@classv \fi\@lastchclass\@chclass}%
+\ifcase \@lastchclass \@acol
+ \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi}
+
+\def\@arrayclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+\edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil
+ \or \hfil$\relax\@sharp$\fi}}
+
+\def\@tabclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@firstampfalse \@acol \fi
+\edef\@preamble{\@preamble
+ \ifcase \@chnum
+ \hfil\ignorespaces\@sharp\unskip\hfil
+ \or \ignorespaces\@sharp\unskip\hfil
+ \or \hfil\hskip\z@ \ignorespaces\@sharp\unskip\fi}}
+
+\def\@classi{\ifcase \@lastchclass \@acol \@arrayrule \or
+ \@addtopreamble{\hskip \doublerulesep}\@arrayrule\or
+ \or \or \@arrayrule \or
+ \@acol \@arrayrule \or \@arrayrule \fi}
+
+
+\def\@classii{\ifcase \@lastchclass \or
+ \@addtopreamble{\hskip .5\arrayrulewidth}\fi}
+
+\def\@classiii{\ifcase \@lastchclass \@acolampacol \or
+ \@addamp\@acol \or
+ \or \or \@addamp \or
+ \@acolampacol \or \@ampacol \fi}
+
+\def\@tabclassiv{\@addtopreamble\@nextchar}
+
+\def\@arrayclassiv{\@addtopreamble{$ \@nextchar$}}
+
+\def\@classv{\@addtopreamble{\@startpbox{\@nextchar}\ignorespaces
+\@sharp\@endpbox}}
+
+\def\@addtopreamble#1{\edef\@preamble{\@preamble #1}}
+
+\newcount\@chclass
+\newcount\@lastchclass
+\newcount\@chnum
+
+\newdimen\arraycolsep
+\newdimen\tabcolsep
+\newdimen\arrayrulewidth
+\newdimen\doublerulesep
+
+\def\arraystretch{1} % Default value.
+
+\newbox\@arstrutbox
+\def\@arstrut{\relax\ifmmode\copy\@arstrutbox\else\unhcopy\@arstrutbox\fi}
+
+
+\def\@arrayrule{\@addtopreamble{\hskip -.5\arrayrulewidth
+ \vrule \@width \arrayrulewidth\hskip -.5\arrayrulewidth}}
+
+\def\@testpach#1{\@chclass \ifnum \@lastchclass=\tw@ 4 \else
+ \ifnum \@lastchclass=3 5 \else
+ \z@ \if #1c\@chnum \z@ \else
+ \if #1l\@chnum \@ne \else
+ \if #1r\@chnum \tw@ \else
+ \@chclass \if #1|\@ne \else
+ \if #1@\tw@ \else
+ \if #1p3 \else \z@ \@preamerr 0\fi
+ \fi \fi \fi \fi \fi \fi
+\fi}
+
+\def\hline{\noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet
+ \@tempa\@xhline}
+
+\def\@xhline{\ifx\@tempa\hline\vskip \doublerulesep\fi
+ \ifnum0=`{\fi}}
+
+\def\vline{\vrule \@width \arrayrulewidth}
+
+\newcount\@cla
+\newcount\@clb
+
+\def\cline#1{\@cline[#1]}
+\def\@cline[#1-#2]{\noalign{\global\@cla#1\relax
+\global\advance\@cla\m@ne
+\ifnum\@cla>0\global\let\@gtempa\@clinea\else
+ \global\let\@gtempa\@clineb\fi
+\global\@clb#2\relax
+\global\advance\@clb-\@cla}\@gtempa
+\noalign{\vskip-\arrayrulewidth}}
+
+\def\@clinea{\multispan\@cla&\multispan\@clb
+\unskip\leaders\hrule \@height \arrayrulewidth \hfill
+\cr}
+
+\def\@clineb{\multispan\@clb
+\unskip\leaders\hrule \@height \arrayrulewidth \hfill
+\cr}
+
+% \@startpbox{WIDTH} TEXT \egroup == \parbox{WIDTH}{TEXT}
+% \@endpbox == \par \vskip \dp\@arstrutbox \egroup\hfil
+%
+
+\def\@startpbox#1{\vtop\bgroup \hsize #1\@arrayparboxrestore}
+\def\@endpbox{\par\vskip\dp\@arstrutbox\egroup\hfil}
+
+\let\@@startpbox=\@startpbox
+\let\@@endpbox=\@endpbox
+
+
+ \message{picture,}
+% ****************************************
+% * THE PICTURE ENVIRONMENT *
+% ****************************************
+%
+% \unitlength = value of dimension argument
+% \@wholewidth = current line width
+% \@halfwidth = half of current line width
+% \@linefnt = font for drawing lines
+% \@circlefnt = font for drawing circles
+%
+% \linethickness{DIM} : Sets the width of horizontal and vertical lines
+% in a picture to DIM. Does not change width of slanted lines
+% or circles. Width of all lines reset by \thinlines and
+% \thicklines
+%
+% \picture(XSIZE,YSIZE)(XORG,YORG)
+% BEGIN
+% \@picht :=L YSIZE * \unitlength
+% box \@picbox :=
+% \hbox to XSIZE * \unitlength
+% {\hskip -XORG * \unitlength
+% \lower YORG * \unitlength
+% \hbox{
+% END
+%
+% \endpicture ==
+% BEGIN
+% } \hss }
+% heigth of \@picbox := \@picht
+% depth of \@picbox := 0
+% leavevmode
+% \box\@picbox
+% END
+%
+% \put(X, Y){OBJ} ==
+% BEGIN
+% \@killglue
+% \raise Y * \unitlength \hbox to 0pt { \hskip X * \unitlength
+% OBJ \hss }
+% \ignorespaces
+% END
+%
+% \multiput(X,Y)(DELX,DELY){N}{OBJ} ==
+% BEGIN
+% \@killglue
+% \@multicnt := N
+% \@xdim := X * \unitlength
+% \@ydim := Y * \unitlength
+% while \@multicnt > 0
+% do \raise \@ydim \hbox to 0pt { \hskip \@xdim
+% OBJ \hss }
+% \@multicnt := \@multicnt - 1
+% \@xdim := \@xdim + DELX * \unitlength
+% \@ydim := \@ydim + DELY * \unitlength
+% od
+% \ignorespaces
+% END
+%
+% \shortstack[POS]{TEXT} : Makes a \vbox containing TEXT stacked as
+% a one-column array, positioned l, r or c as indicated by POS.
+
+\newdimen\@wholewidth
+\newdimen\@halfwidth
+\newdimen\unitlength \unitlength =1pt
+\newbox\@picbox
+\newdimen\@picht
+
+\def\picture(#1,#2){\@ifnextchar({\@picture(#1,#2)}{\@picture(#1,#2)(0,0)}}
+
+\def\@picture(#1,#2)(#3,#4){\@picht #2\unitlength
+\setbox\@picbox\hbox to #1\unitlength\bgroup
+\hskip -#3\unitlength \lower #4\unitlength \hbox\bgroup}
+
+\def\endpicture{\egroup\hss\egroup\ht\@picbox\@picht
+\dp\@picbox\z@\leavevmode\box\@picbox}
+
+\long\def\put(#1,#2)#3{\@killglue\raise#2\unitlength\hbox to \z@{\hskip
+#1\unitlength #3\hss}\ignorespaces}
+
+\long\def\multiput(#1,#2)(#3,#4)#5#6{\@killglue\@multicnt=#5\relax
+\@xdim=#1\unitlength
+\@ydim=#2\unitlength
+\@whilenum \@multicnt > 0\do
+{\raise\@ydim\hbox to \z@{\hskip
+\@xdim #6\hss}\advance\@multicnt \m@ne\advance\@xdim
+#3\unitlength\advance\@ydim #4\unitlength}\ignorespaces}
+
+\def\@killglue{\unskip\@whiledim \lastskip >\z@\do{\unskip}}
+
+\def\thinlines{\let\@linefnt\tenln \let\@circlefnt\tencirc
+ \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth}
+\def\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
+ \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth}
+
+\def\linethickness#1{\@wholewidth #1\relax \@halfwidth .5\@wholewidth}
+
+\def\shortstack{\@ifnextchar[{\@shortstack}{\@shortstack[c]}}
+
+\def\@shortstack[#1]{\leavevmode
+\vbox\bgroup\baselineskip-1pt\lineskip 3pt\let\mb@l\hss
+\let\mb@r\hss \expandafter\let\csname mb@#1\endcsname\relax
+\let\\\@stackcr\@ishortstack}
+
+\def\@ishortstack#1{\halign{\mb@l ##\unskip\mb@r\cr #1\crcr}\egroup}
+
+
+\def\@stackcr{\@ifstar{\@ixstackcr}{\@ixstackcr}}
+\def\@ixstackcr{\@ifnextchar[{\@istackcr}{\cr\ignorespaces}}
+
+\def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces}
+
+
+% \line(X,Y){LEN} ==
+% BEGIN
+% \@xarg := X
+% \@yarg := Y
+% \@linelen := LEN * \unitlength
+% if \@xarg = 0
+% then \@vline
+% else if \@yarg = 0
+% then \@hline
+% else \@sline
+% if
+% if
+% END
+%
+% \@sline ==
+% BEGIN
+% if \@xarg < 0
+% then @negarg := T
+% \@xarg := -\@xarg
+% \@yyarg := -\@yarg
+% else @negarg := F
+% \@yyarg := \@yarg
+% fi
+% \@tempcnta := |\@yyarg|
+% if \@tempcnta > 6
+% then error: 'LATEX ERROR: Illegal \line or \vector argument.'
+% \@tempcnta := 0
+% fi
+% \box\@linechar := \hbox{\@linefnt \@getlinechar(\@xarg,\@yyarg) }
+% if \@yarg > 0 then \@upordown = \raise
+% \@clnht := 0
+% else \@upordown = \lower
+% \@clnht := height of \box\@linechar
+% fi
+% \@clnwd := width of \box\@linechar
+% if @negarg
+% then \hskip - width of \box\@linechar
+% \@tempa == \hskip - 2* width of box \@linechar
+% else \@tempa == \relax
+% fi
+% %% Put out integral number of line segments
+% while \@clnwd < \@linelen
+% do \@upordown \@clnht \copy\@linechar
+% \@tempa
+% \@clnht := \@clnht + ht of \box\@linechar
+% \@clnwd := \@clnwd + width of \box\@linechar
+% od
+%
+% %% Put out last segment
+% \@clnht := \@clnht - height of \box\@linechar
+% \@clnwd := \@clnwd - width of \box\@linechar
+% \@tempdima := \@linelen - \@clnwd
+% \@tempdimb := \@tempdima - width of \box\@linechar
+% if @negarg then \hskip -\@tempdimb
+% else \hskip \@tempdimb
+% fi
+% \@tempdima := 1000 * \@tempdima
+% \@tempcnta := \@tempdima / width of \box\@linechar
+% \@tempdima := (\@tempcnta * ht of \box\@linechar)/1000
+% \@clnht := \@clnht + \@tempdima
+% if \@linelen < width of box\@linechar
+% then \hskip width of box\@linechar
+% else \hbox{\@upordown \@clnht \copy\@linechar}
+% fi
+% END
+%
+% \@hline ==
+% BEGIN
+% if \@xarg < 0 then \hskip -\@linelen \fi
+% \vrule height \@halfwidth depth \@halfwidth width \@linelen
+% if \@xarg < 0 then \hskip -\@linelen \fi
+% END
+%
+% \@vline == if \@yarg < 0 \@downline else \@upline fi
+%
+%
+% \@getlinechar(X,Y) ==
+% BEGIN
+% \@tempcnta := 8*X - 9
+% if Y > 0
+% then \@tempcnta := \@tempcnta + Y
+% else \@tempcnta := \@tempcnta - Y + 64
+% fi
+% \char\@tempcnta
+% END
+%
+% \vector(X,Y){LEN} ==
+% BEGIN
+% \@xarg := X
+% \@yarg := Y
+% \@linelen := LEN * \unitlength
+% if \@xarg = 0
+% then \@vvector
+% else if \@yarg = 0
+% then \@hvector
+% else \@svector
+% if
+% if
+% END
+%
+% \@hvector ==
+% BEGIN
+% \@hline
+% {\@linefnt if \@xarg < 0 then \@getlarrow(1,0)
+% else \@getrarrow(1,0)
+% fi}
+% END
+%
+% \@vvector == if \@yarg < 0 \@downvector else \@upvector fi
+%
+% \@svector ==
+% BEGIN
+% \@sline
+% \@tempcnta := |\@yarg|
+% if \@tempcnta < 5
+% then \hskip - width of \box\@linechar
+% \@upordown \@clnht \hbox
+% {\@linefnt
+% if @negarg then \@getlarrow(\@xarg,\@yyarg)
+% else \@getrarrow(\@xarg,\@yyarg)
+% fi }
+% else error: 'LATEX ERROR: Illegal \line or \vector argument.'
+% fi
+% END
+%
+% \@getlarrow(X,Y) ==
+% BEGIN
+% if Y = 0
+% then \@tempcnta := '33
+% else \@tempcnta := 16 * X - 9
+% \@tempcntb := 2 * Y
+% if \@tempcntb > 0
+% then \@tempcnta := \@tempcnta + \@tempcntb
+% else \@tempcnta := \@tempcnta - \@tempcntb + 64
+% fi
+% fi
+% \char\@tempcnta
+% END
+%
+% \@getrarrow(X,Y) ==
+% BEGIN
+% \@tempcntb := |Y|
+% case of \@tempcntb
+% 0 : \@tempcnta := '55
+% 1 : if X < 3
+% then \@tempcnta := 24*X - 6
+% else if X = 3
+% then \@tempcnta := 49
+% else \@tempcnta := 58 fi
+% fi
+% 2 : if X < 3
+% then \@tempcnta := 24*X - 3
+% else \@tempcnta := 51 % X must = 3
+% fi
+% 3 : \@tempcnta := 16*X - 2
+% 4 : \@tempcnta := 16*X + 7
+% endcase
+% if Y < 0
+% then \@tempcnta := \@tempcnta + 64
+% fi
+% \char\@tempcnta
+% END
+
+\newif\if@negarg
+
+\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+\@linelen=#3\unitlength
+\ifnum\@xarg =0 \@vline
+ \else \ifnum\@yarg =0 \@hline \else \@sline\fi
+\fi}
+
+\def\@sline{\ifnum\@xarg< 0 \@negargtrue \@xarg -\@xarg \@yyarg -\@yarg
+ \else \@negargfalse \@yyarg \@yarg \fi
+\ifnum \@yyarg >0 \@tempcnta\@yyarg \else \@tempcnta -\@yyarg \fi
+\ifnum\@tempcnta>6 \@badlinearg\@tempcnta0 \fi
+\setbox\@linechar\hbox{\@linefnt\@getlinechar(\@xarg,\@yyarg)}%
+\ifnum \@yarg >0 \let\@upordown\raise \@clnht\z@
+ \else\let\@upordown\lower \@clnht \ht\@linechar\fi
+\@clnwd=\wd\@linechar
+\if@negarg \hskip -\wd\@linechar \def\@tempa{\hskip -2\wd\@linechar}\else
+ \let\@tempa\relax \fi
+\@whiledim \@clnwd <\@linelen \do
+ {\@upordown\@clnht\copy\@linechar
+ \@tempa
+ \advance\@clnht \ht\@linechar
+ \advance\@clnwd \wd\@linechar}%
+\advance\@clnht -\ht\@linechar
+\advance\@clnwd -\wd\@linechar
+\@tempdima\@linelen\advance\@tempdima -\@clnwd
+\@tempdimb\@tempdima\advance\@tempdimb -\wd\@linechar
+\if@negarg \hskip -\@tempdimb \else \hskip \@tempdimb \fi
+\multiply\@tempdima \@m
+\@tempcnta \@tempdima \@tempdima \wd\@linechar \divide\@tempcnta \@tempdima
+\@tempdima \ht\@linechar \multiply\@tempdima \@tempcnta
+\divide\@tempdima \@m
+\advance\@clnht \@tempdima
+\ifdim \@linelen <\wd\@linechar
+ \hskip \wd\@linechar
+ \else\@upordown\@clnht\copy\@linechar\fi}
+
+\def\@hline{\ifnum \@xarg <0 \hskip -\@linelen \fi
+\vrule \@height \@halfwidth \@depth \@halfwidth \@width \@linelen
+\ifnum \@xarg <0 \hskip -\@linelen \fi}
+
+\def\@getlinechar(#1,#2){\@tempcnta#1\relax\multiply\@tempcnta 8
+\advance\@tempcnta -9 \ifnum #2>0 \advance\@tempcnta #2\relax\else
+\advance\@tempcnta -#2\relax\advance\@tempcnta 64 \fi
+\char\@tempcnta}
+
+\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+\@linelen=#3\unitlength
+\ifnum\@xarg =0 \@vvector
+ \else \ifnum\@yarg =0 \@hvector \else \@svector\fi
+\fi}
+
+\def\@hvector{\@hline\hbox to 0pt{\@linefnt
+\ifnum \@xarg <0 \@getlarrow(1,0)\hss\else
+ \hss\@getrarrow(1,0)\fi}}
+
+\def\@vvector{\ifnum \@yarg <0 \@downvector \else \@upvector \fi}
+
+\def\@svector{\@sline
+\@tempcnta\@yarg \ifnum\@tempcnta <0 \@tempcnta=-\@tempcnta\fi
+\ifnum\@tempcnta <5
+ \hskip -\wd\@linechar
+ \@upordown\@clnht \hbox{\@linefnt \if@negarg
+ \@getlarrow(\@xarg,\@yyarg) \else \@getrarrow(\@xarg,\@yyarg) \fi}%
+\else\@badlinearg\fi}
+
+\def\@getlarrow(#1,#2){\ifnum #2 =\z@ \@tempcnta='33\else
+\@tempcnta=#1\relax\multiply\@tempcnta \sixt@@n \advance\@tempcnta
+-9 \@tempcntb=#2\relax\multiply\@tempcntb \tw@
+\ifnum \@tempcntb >0 \advance\@tempcnta \@tempcntb\relax
+\else\advance\@tempcnta -\@tempcntb\advance\@tempcnta 64
+\fi\fi\char\@tempcnta}
+
+\def\@getrarrow(#1,#2){\@tempcntb=#2\relax
+\ifnum\@tempcntb < 0 \@tempcntb=-\@tempcntb\relax\fi
+\ifcase \@tempcntb\relax \@tempcnta='55 \or
+\ifnum #1<3 \@tempcnta=#1\relax\multiply\@tempcnta
+24 \advance\@tempcnta -6 \else \ifnum #1=3 \@tempcnta=49
+\else\@tempcnta=58 \fi\fi\or
+\ifnum #1<3 \@tempcnta=#1\relax\multiply\@tempcnta
+24 \advance\@tempcnta -3 \else \@tempcnta=51\fi\or
+\@tempcnta=#1\relax\multiply\@tempcnta
+\sixt@@n \advance\@tempcnta -\tw@ \else
+\@tempcnta=#1\relax\multiply\@tempcnta
+\sixt@@n \advance\@tempcnta 7 \fi\ifnum #2<0 \advance\@tempcnta 64 \fi
+\char\@tempcnta}
+
+
+
+\def\@vline{\ifnum \@yarg <0 \@downline \else \@upline\fi}
+
+\def\@upline{\hbox to \z@{\hskip -\@halfwidth \vrule \@width \@wholewidth
+ \@height \@linelen \@depth \z@\hss}}
+
+\def\@downline{\hbox to \z@{\hskip -\@halfwidth \vrule \@width \@wholewidth
+ \@height \z@ \@depth \@linelen \hss}}
+
+\def\@upvector{\@upline\setbox\@tempboxa\hbox{\@linefnt\char'66}\raise
+ \@linelen \hbox to\z@{\lower \ht\@tempboxa\box\@tempboxa\hss}}
+
+\def\@downvector{\@downline\lower \@linelen
+ \hbox to \z@{\@linefnt\char'77\hss}}
+
+% \dashbox{D}(X,Y) ==
+% BEGIN
+% leave vertical mode
+% \hbox to 0pt {
+% \baselineskip := 0pt
+% \lineskip := 0pt
+% %% HORIZONTAL DASHES
+% \@dashdim := X * \unitlength
+% \@dashcnt := \@dashdim + 200 % to prevent roundoff error
+% \@dashdim := D * \unitlength
+% \@dashcnt := \@dashcnt / \@dashdim
+% if \@dashcnt is odd
+% then \@dashdim := 0pt
+% \@dashcnt := (\@dashcnt + 1) / 2
+% else \@dashdim := \@dashdim / 2
+% \@dashcnt := \@dashcnt / 2 - 1
+% \box\@dashbox := \hbox{\vrule height \@halfwidth
+% depth \@halfwidth width \@dashdim}
+% \put(0,0){\copy\@dashbox}
+% \put(0,Y){\copy\@dashbox}
+% \put(X,0){\hskip -\@dashdim\copy\@dashbox}
+% \put(X,Y){\hskip -\@dashdim\box\@dashbox}
+% \@dashdim := 3 * \@dashdim
+% fi
+% \box\@dashbox := \hbox{\vrule height \@halfwidth
+% depth \@halfwidth width D * \unitlength
+% \hskip D * \unitlength}
+% \@tempcnta := 0
+% \put(0,0){\hskip \@dashdim
+% while \@tempcnta < \@dascnt
+% do \copy\@dashbox
+% \@tempcnta := \@tempcnta + 1
+% od
+% }
+% \@tempcnta := 0
+% put(0,Y){\hskip \@dashdim
+% while \@tempcnta < \@dascnt
+% do \copy\@dashbox
+% \@tempcnta := \@tempcnta + 1
+% od
+% }
+%
+% %% vertical dashes
+% \@dashdim := Y * \unitlength
+% \@dashcnt := \@dashdim + 200 % to prevent roundoff error
+% \@dashdim := D * \unitlength
+% \@dashcnt := \@dashcnt / \@dashdim
+% if \@dashcnt is odd
+% then \@dashdim := 0pt
+% \@dashcnt := (\@dashcnt + 1) / 2
+% else \@dashdim := \@dashdim / 2
+% \@dashcnt := \@dashcnt / 2 - 1
+% \box\@dashbox := \hbox{\hskip -\@halfwidth
+% \vrule width \@wholewidth
+% height \@dashdim }
+% \put(0,0){\copy\@dashbox}
+% \put(X,0){\copy\@dashbox}
+% \put(0,Y){\lower\@dashdim\copy\@dashbox}
+% \put(X,Y){\lower\@dashdim\copy\@dashbox}
+% \@dashdim := 3 * \@dashdim
+% fi
+% \box\@dashbox := \hbox{\vrule width \@wholewidth
+% height D * \unitlength }
+% \@tempcnta := 0
+% put(0,0){\hskip -\halfwidth
+% \vbox{while \@tempcnta < \@dashcnt
+% do \vskip D*\unitlength
+% \copy\@dashbox
+% \@tempcnta := \@tempcnta + 1
+% od
+% \vskip \@dashdim
+% } }
+% \@tempcnta := 0
+% put(X,0){\hskip -\halfwidth
+% \vbox{while \@tempcnta < \@dashcnt
+% do \vskip D*\unitlength
+% \copy\@dashbox
+% \@tempcnta := \@tempcnta + 1
+% od
+% \vskip \@dashdim
+% }
+% }
+% } % END DASHES
+%
+% \@imakepicbox(X,Y)
+% END
+
+\def\dashbox#1(#2,#3){\leavevmode\hbox to \z@{\baselineskip \z@%
+\lineskip \z@%
+\@dashdim=#2\unitlength%
+\@dashcnt=\@dashdim \advance\@dashcnt 200
+\@dashdim=#1\unitlength\divide\@dashcnt \@dashdim
+\ifodd\@dashcnt\@dashdim=\z@%
+\advance\@dashcnt \@ne \divide\@dashcnt \tw@
+\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@
+\advance\@dashcnt \m@ne
+\setbox\@dashbox=\hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
+\@width \@dashdim}\put(0,0){\copy\@dashbox}%
+\put(0,#3){\copy\@dashbox}%
+\put(#2,0){\hskip-\@dashdim\copy\@dashbox}%
+\put(#2,#3){\hskip-\@dashdim\box\@dashbox}%
+\multiply\@dashdim 3
+\fi
+\setbox\@dashbox=\hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
+\@width #1\unitlength\hskip #1\unitlength}\@tempcnta=0
+\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
+\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta=0
+\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
+\do{\copy\@dashbox\advance\@tempcnta \@ne }}%
+\@dashdim=#3\unitlength%
+\@dashcnt=\@dashdim \advance\@dashcnt 200
+\@dashdim=#1\unitlength\divide\@dashcnt \@dashdim
+\ifodd\@dashcnt \@dashdim=\z@%
+\advance\@dashcnt \@ne \divide\@dashcnt \tw@
+\else
+\divide\@dashdim \tw@ \divide\@dashcnt \tw@
+\advance\@dashcnt \m@ne
+\setbox\@dashbox\hbox{\hskip -\@halfwidth
+\vrule \@width \@wholewidth
+\@height \@dashdim}\put(0,0){\copy\@dashbox}%
+\put(#2,0){\copy\@dashbox}%
+\put(0,#3){\lower\@dashdim\copy\@dashbox}%
+\put(#2,#3){\lower\@dashdim\copy\@dashbox}%
+\multiply\@dashdim 3
+\fi
+\setbox\@dashbox\hbox{\vrule \@width \@wholewidth
+\@height #1\unitlength}\@tempcnta0
+\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta < \@dashcnt
+\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
+\vskip\@dashdim}}\@tempcnta0
+\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta< \@dashcnt
+\relax\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }%
+\vskip\@dashdim}}}\@makepicbox(#2,#3)}
+
+% CIRCLES AND OVALS
+%
+% USER COMMANDS:
+%
+% \circle{D} : Produces the circle with the diameter as close as
+% possible to D * \unitlength. \put(X,Y){\circle{D}}
+% puts the circle with its center at (X,Y).
+%
+% \oval(X,Y) : Makes an oval as round as possible that fits in the
+% rectangle of width X * \unitlength and height
+% Y * \unitlength. The reference point is the center.
+%
+% \oval(X,Y)[POS] : Save as \oval(X,Y) except it draws only the
+% half or quadrant of the oval indicated by POS.
+% E.G., \oval(X,Y)[t] draws just the top half
+% and \oval(X,Y)[br] draws just the bottom right
+% quadrant. In all cases, the reference point is
+% the same as the unqualified \oval(X,Y) command.
+%
+% \@ovvert {DELTA1} {DELTA2} : Makes a vbox containing either the left side
+% or the right side of the oval being constructed. The baseline
+% will coincide with the outside bottom edge of the oval; the left
+% side of the box will coincide with the left edge of the vertical
+% rule. The width of the box will be \@tempdima.
+% DELTA1 and DELTA2 are added to the character number in \@tempcnta
+% to get the characters for the top and bottom quarter circle pieces.
+%
+% \@ovhorz : Makes an hbox containing the straight rule for either the
+% top or the bottom of the oval being constructed. The baseline
+% will coincide with bottom edge of the rule; the left side of
+% the box will coincide with the left side of the oval.
+% The width of the box will be \@ovxx.
+%
+% \@getcirc {DIAM} : Sets \@tempcnta to the character number
+% of the top-right quarter circle with the largest
+% diameter less than or equal to DIAM.
+% Sets \@tempboxa to an hbox containing that character.
+% Sets \@tempdima to \wd \@tempboxa, which is the distance
+% from the circle's left outside edge to its right
+% inside edge.
+% (These characters are like those described in the
+% TeXbook, pp. 389-90.)
+%
+% \@getcirc {DIAM} ==
+% BEGIN
+% \@tempcnta := integer coercion of DIAM
+% \@tempcnta := \@tempcnta / integer coercion of 4pt
+% if \@tempcnta > 10
+% then \@tempcnta := 10 fi
+% if \@tempcnta > 0
+% then \@tempcnta := \@tempcnta-1
+% else LaTeX Warning: Oval too small.
+% fi
+% \@tempcnta := 4 * \@tempcnta
+% \@tempboxa := \hbox{\@circlefnt \char \@tempcnta}
+% \@tempdima := \wd \@tempboxa
+% END
+%
+% \@put{X}{Y}{OBJ} ==
+% BEGIN
+% \raise Y \hbox to 0pt{\hskip X OBJ \hss}
+% END
+%
+% \@oval(X,Y)[POS] ==
+% BEGIN
+% \begingroup
+% \boxmaxdepth := \maxdimen
+% @ovt := @ovb := @ovl := @ovr := true
+% for all E in POS
+% do @ovE := false od
+% \@ovxx := X * \unitlength
+% \@ovyy := Y * \unitlength
+% \@tempdimb := min(\@ovxx,\@ovyy)
+% \@getcirc{\@tempdimb}
+% \@ovro := \ht \@tempboxa
+% \@ovri := \dp \@tempboxa
+% \@ovdx := \@ovxx - \@tempdima
+% \@ovdx := \@ovdx/2
+% \@ovdy := \@ovyy - \@tempdima
+% \@ovdy := \@ovyy/2
+% \@circlefnt
+% \@tempboxa :=
+% \hbox{
+% if @ovr
+% then \@ovvert{3}{2} \kern -\@tempdima
+% fi
+% if @ovl
+% then \kern \@ovxx \@ovvert{0}{1} \kern -\@tempdima
+% \kern -\@ovxx
+% fi
+% if @ovt
+% then \@ovhorz \kern -\@ovxx
+% fi
+% if @ovb
+% then \raise \@ovyy \@ovhorz
+% fi
+% }
+% \@ovdx := \@ovdx + \@ovro
+% \@ovdy := \@ovdy + \@ovro
+% \ht\@tempboxa := \dp\@tempboxa := 0
+% \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}
+% \endgroup
+% END
+%
+% \@ovvert {DELTA1} {DELTA2} ==
+% BEGIN
+% \vbox to \@ovyy {
+% if @ovb
+% then \@tempcntb := \@tempcnta + DELTA1
+% \kern -\@ovro
+% \hbox { \char \@tempcntb }
+% \nointerlineskip
+% else \kern \@ovri \kern \@ovdy
+% fi
+% \leaders \vrule width \@wholewidth \vfil
+% \nointerlineskip
+% if @ovt
+% then \@tempcntb := \@tempcnta + DELTA2
+% \hbox { \char \@tempcntb }
+% else \kern \@ovdy \kern \@ovro
+% fi
+% }
+% END
+%
+% \@ovhorz ==
+% BEGIN
+% \hbox to \@ovxx{
+% \kern \@ovro
+% if @ovr
+% then
+% else \kern \@ovdx
+% fi
+% \leaders \hrule height \@wholewidth \hfil
+% if @ovl
+% then
+% else \kern \@ovdx
+% fi
+% \kern \@ovri
+% }
+% END
+%
+% \circle{DIAM} ==
+% BEGIN
+% \begingroup
+% \boxmaxdepth := maxdimen
+% \@tempdimb := DIAM *\unitlength
+% if \@tempdimb > 15.5pt
+% then \@getcirc{\@tempdimb}
+% \@ovro := \ht \@tempboxa
+% \@tempboxa := \hbox{
+% \@circlefnt
+% \@tempcnta := \@tempcnta + 2
+% \char \@tempcnta
+% \@tempcnta := \@tempcnta - 1
+% \char \@tempcnta
+% \kern -2\@tempdima
+% \@tempcnta := \@tempcnta + 2
+% \raise \@tempdima \hbox { \char \@tempcnta }
+% \raise \@tempdima \box\@tempboxa
+% }
+% \ht\@tempboxa := \dp\@tempboxa := 0
+% \@put{-\@ovro}{-\@ovro}{\@tempboxa}
+% else
+% \@circ{\@tempdimb}{96}
+% fi
+% \endgroup
+% END
+%
+% \circle*{DIAM} == \@dot{DIAM} == \@circ{DIAM*\unitlength}{112}
+%
+% \@circ{DIAM}{CHAR} ==
+% BEGIN
+% \@tempcnta := integer coercion of (DIAM + .5pt)/1pt.
+% if \@tempcnta > 15 then \@tempcnta := 15 fi
+% if \@tempcnta > 1 then \@tempcnta := \@tempcnta - 1 fi
+% \@tempcnta := \@tempcnta + CHAR
+% \@circlefnt
+% \char \@tempcnta
+% END
+%
+
+\newif\if@ovt
+\newif\if@ovb
+\newif\if@ovl
+\newif\if@ovr
+\newdimen\@ovxx
+\newdimen\@ovyy
+\newdimen\@ovdx
+\newdimen\@ovdy
+\newdimen\@ovro
+\newdimen\@ovri
+
+\def\@getcirc#1{\@tempdima #1\relax \@tempcnta\@tempdima
+ \@tempdima 4pt\relax \divide\@tempcnta\@tempdima
+ \ifnum \@tempcnta > 10\relax \@tempcnta 10\relax\fi
+ \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne
+ \else \@warning{Oval too small}\fi
+ \multiply\@tempcnta 4\relax
+ \setbox \@tempboxa \hbox{\@circlefnt
+ \char \@tempcnta}\@tempdima \wd \@tempboxa}
+
+\def\@put#1#2#3{\raise #2\hbox to \z@{\hskip #1#3\hss}}
+
+\def\oval(#1,#2){\@ifnextchar[{\@oval(#1,#2)}{\@oval(#1,#2)[]}}
+
+\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
+ \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
+ \@tfor\@tempa :=#3\do{\csname @ov\@tempa false\endcsname}\@ovxx
+ #1\unitlength \@ovyy #2\unitlength
+ \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
+ \@getcirc \@tempdimb
+ \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
+ \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
+ \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
+ \@circlefnt \setbox\@tempboxa
+ \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi
+ \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi
+ \if@ovt \@ovhorz \kern -\@ovxx \fi
+ \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
+ \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
+ \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
+ \endgroup}
+
+\def\@ovvert#1#2{\vbox to \@ovyy{%
+ \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb by #1\relax
+ \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip
+ \else \kern \@ovri \kern \@ovdy \fi
+ \leaders\vrule width \@wholewidth\vfil \nointerlineskip
+ \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb by #2\relax
+ \hbox{\char \@tempcntb}%
+ \else \kern \@ovdy \kern \@ovro \fi}}
+
+\def\@ovhorz{\hbox to \@ovxx{\kern \@ovro
+ \if@ovr \else \kern \@ovdx \fi
+ \leaders \hrule height \@wholewidth \hfil
+ \if@ovl \else \kern \@ovdx \fi
+ \kern \@ovri}}
+
+\def\circle{\@ifstar{\@dot}{\@circle}}
+\def\@circle#1{\begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength
+ \ifdim \@tempdimb >15.5pt\relax \@getcirc\@tempdimb
+ \@ovro\ht\@tempboxa
+ \setbox\@tempboxa\hbox{\@circlefnt
+ \advance\@tempcnta\tw@ \char \@tempcnta
+ \advance\@tempcnta\m@ne \char \@tempcnta \kern -2\@tempdima
+ \advance\@tempcnta\tw@
+ \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima
+ \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@
+ \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}%
+ \else \@circ\@tempdimb{96}\fi\endgroup}
+
+\def\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}}
+
+\def\@circ#1#2{\@tempdima #1\relax \advance\@tempdima .5pt\relax
+ \@tempcnta\@tempdima \@tempdima 1pt\relax
+ \divide\@tempcnta\@tempdima
+ \ifnum\@tempcnta > 15\relax \@tempcnta 15\relax \fi
+ \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne\fi
+ \advance\@tempcnta #2\relax
+ \@circlefnt \char\@tempcnta}
+
+
+%INITIALIZATION
+\thinlines
+
+\newcount\@xarg
+\newcount\@yarg
+\newcount\@yyarg
+\newcount\@multicnt
+\newdimen\@xdim
+\newdimen\@ydim
+\newbox\@linechar
+\newdimen\@linelen
+\newdimen\@clnwd
+\newdimen\@clnht
+\newdimen\@dashdim
+\newbox\@dashbox
+\newcount\@dashcnt
+
+
+ \message{theorem,}
+% ****************************************
+% * THEOREM ENVIRONMENTS *
+% ****************************************
+%
+% The user creates his own theorem-like environments with the command
+% \newtheorem{NAME}{TEXT}[COUNTER] or
+% \newtheorem{NAME}[OLDNAME]{TEXT}
+% This defines the environment NAME to be just as one would expect a
+% theorem environment to be, except that it prints ``TEXT'' instead of
+% ``Theorem''.
+%
+% If OLDNAME is given, then environments NAME and OLDNAME use the same
+% counter, so using a NAME environment advances the number of the next
+% NAME environment, and vice-versa.
+%
+% If COUNTER is given, then environment NAME is numbered within COUNTER.
+% E.g., if COUNTER = subsection, then the first NAME in subsection 7.2
+% is numbered TEXT 7.2.1.
+%
+% The way NAME environments are numbered can be changed by redefining
+% \theNAME.
+%
+% DOCUMENT STYLE PARAMETERS
+%
+% \@thmcounter{COUNTER} : A command such that
+% \edef\theCOUNTER{\@thmcounter{COUNTER}}
+% defines \theCOUNTER to produce a number for a theorem environment.
+% The default is:
+% BEGIN \noexpand\arabic{COUNTER} END
+%
+% \@thmcountersep : A separator placed between a theorem number and
+% the number of the counter within which it is numbered.
+% E.g., to make the third theorem of section 7.2 be numbered
+% 7.2-3, \@thmcountersep should be \def'ed to '-'. Its
+% default is '.'.
+%
+% \@begintheorem{NAME}{NUMBER} : A command that begins a theorem
+% environment for a 'theorem' named 'NAME NUMBER' --
+% e.g., \@begintheorem{Lemma}{3.7} starts Lemma 3.7.
+%
+% \@opargbegintheorem{NAME}{NUMBER}{OPARG} : A command that begins a theorem
+% environment for a 'theorem' named 'NAME NUMBER' with optional
+% argument OPARG -- e.g., \@begintheorem{Lemma}{3.7}{Jones}
+% starts `Lemma 3.7 (Jones):'.
+%
+% \@endtheorem : A command that ends a theorem environment.
+%
+% \newtheorem{NAME}{TEXT}[COUNTER] ==
+% BEGIN
+% if \NAME is definable
+% then \@definecounter{NAME}
+% if COUNTER present
+% then \@addtoreset{NAME}{COUNTER} fi
+% \theNAME == BEGIN \theCOUNTER \@thmcountersep
+% eval\@thmcounter{NAME} END
+% else \theNAME == BEGIN eval\@thmcounter{NAME} END
+% \NAME == \@thm{NAME}{TEXT}
+% \endNAME == \@endtheorem
+% else error
+% fi
+% END
+%
+% \newtheorem{NAME}[OLDNAME]{TEXT}==
+% BEGIN
+% if \NAME is definable
+% then \theNAME == \theOLDNAME
+% \NAME == \@thm{OLDNAME}{TEXT}
+% \endNAME == \@endtheorem
+% else error
+% fi
+% END
+%
+% \@thm{NAME}{TEXT} ==
+% BEGIN
+% \refstepcounter{NAME}
+% if next char = [
+% then \@ythm{NAME}{TEXT}
+% else \@xthm{NAME}{TEXT}
+% fi
+% END
+%
+% \@xthm{NAME}{TEXT} ==
+% BEGIN
+% \@begintheorem{TEXT}{\theNAME}
+% \ignorespaces
+% END
+%
+% \@ythm{NAME}{TEXT}[OPARG] ==
+% BEGIN
+% \@opargbegintheorem{TEXT}{\theNAME}{OPARG}
+% \ignorespaces
+% END
+%
+\def\newtheorem#1{\@ifnextchar[{\@othm{#1}}{\@nthm{#1}}}
+
+\def\@nthm#1#2{%
+\@ifnextchar[{\@xnthm{#1}{#2}}{\@ynthm{#1}{#2}}}
+
+\def\@xnthm#1#2[#3]{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}\@addtoreset{#1}{#3}%
+\expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+ \csname the#3\endcsname \@thmcountersep \@thmcounter{#1}}%
+\global\@namedef{#1}{\@thm{#1}{#2}}\global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@ynthm#1#2{\expandafter\@ifdefinable\csname #1\endcsname
+{\@definecounter{#1}%
+\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+\global\@namedef{#1}{\@thm{#1}{#2}}\global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@othm#1[#2]#3{\expandafter\@ifdefinable\csname #1\endcsname
+ {\global\@namedef{the#1}{\@nameuse{the#2}}%
+\global\@namedef{#1}{\@thm{#2}{#3}}%
+\global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@thm#1#2{\refstepcounter
+ {#1}\@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}}
+
+\def\@xthm#1#2{\@begintheorem{#2}{\csname the#1\endcsname}\ignorespaces}
+\def\@ythm#1#2[#3]{\@opargbegintheorem{#2}{\csname
+ the#1\endcsname}{#3}\ignorespaces}
+
+%DEFAULT VALUES
+\def\@thmcounter#1{\noexpand\arabic{#1}}
+\def\@thmcountersep{.}
+\def\@makethmnumber#1#2{\bf #1 #2:}
+\def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+\def\@opargbegintheorem#1#2#3{\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+\def\@endtheorem{\endtrivlist}
+
+
+ \message{lengths,}
+% ****************************************
+% * LENGTHS *
+% ****************************************
+%
+% USER COMMANDS:
+%
+% \newlength{\NAME} == \newskip\NAME
+% \setlength{\NAME}{VALUE} == \NAME :=L VALUE
+% \addtolength{\NAME}{VALUE} == \NAME :=L \NAME + VALUE
+% \settowidth{\NAME}{TEXT} == \NAME :=L width of \hbox{TEXT}
+%
+\def\newlength#1{\@ifdefinable#1{\newskip#1}}
+\def\setlength#1#2{#1#2\relax}
+\def\addtolength#1#2{\advance#1 #2\relax}
+\def\settowidth#1#2{\setbox\@tempboxa\hbox{#2}#1\wd\@tempboxa}
+
+
+ \message{title,}
+% *****************************************
+% * THE TITLE *
+% *****************************************
+%
+% The user defines the title, author, date by the declarations \title{NAME},
+% \author{NAME} and \date{DATE}. Inside these, he can use the \thanks
+% command to make footnoted acknowledgements, notice of address, etc.
+% The \maketitle command produces the actual title. Note: multiple authors
+% are separated with the \and command.
+
+\def\title#1{\gdef\@title{#1}}
+
+\def\author#1{\gdef\@author{#1}}
+
+\def\date#1{\gdef\@date{#1}}
+\gdef\@date{\today} %Default is today's date
+
+\def\thanks#1{\footnotemark\begingroup
+\def\protect{\noexpand\protect\noexpand}\xdef\@thanks{\@thanks
+ \protect\footnotetext[\the\c@footnote]{#1}}\endgroup}
+
+\def\@thanks{}
+
+\def\and{%% % \begin{tabular}
+\end{tabular}\hskip 1em plus .17fil\begin{tabular}[t]{c}%% \end{tabular}
+}
+
+
+
+ \message{sectioning,}
+% *****************************************
+% * SECTIONING *
+% *****************************************
+%
+%
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading, else
+% negative of skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument.
+% Uses the counter 'secnumdepth' whose value is the highest section
+% level that is to be numbered.
+%
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} ==
+% BEGIN
+% IF @noskipsec = T THEN \leavevmode FI % true if previous section
+% % had no body.
+% \par
+% \@tempskipa := BEFORESKIP
+% @afterindent := T
+% IF \@tempskipa < 0 THEN \@tempskipa := -\@tempskipa
+% @afterindent := F
+% FI
+% IF @nobreak = true
+% THEN \everypar == null
+% ELSE \addpenalty{\@secpenalty}
+% \addvspace{\@tempskipa}
+% FI
+% IF * next
+% THEN \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% ELSE \@dblarg{\@sect
+% {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}}
+% FI
+% END
+%
+% \@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[ARG1]{ARG2} ==
+% BEGIN
+% IF LEVEL > \c@secnumdepth
+% THEN \@svsec :=L null
+% ELSE \refstepcounter{NAME}
+% \@svsec :=L BEGIN \theNAME END
+% FI
+% IF AFTERSKIP > 0
+% THEN \begingroup
+% STYLE
+% \@hangfrom{\hskip INDENT\@svsec}
+% {\interlinepenalty 10000 ARG2\par}
+% \endgroup
+% \NAMEmark{ARG1}
+% \addcontentsline{toc}{NAME}
+% { IF LEVEL > \c@secnumdepth
+% ELSE \protect\numberline{\theNAME} FI
+% ARG1 }
+% ELSE \@svsechd == BEGIN STYLE
+% \hskip INDENT\@svsec
+% ARG2
+% \NAMEmark{ARG1}
+% \addcontentsline{toc}{NAME}
+% { IF LEVEL > \c@secnumdepth
+% ELSE \protect\numberline{\theNAME} FI
+% ARG1 }
+% END
+% FI
+% \@xsect{AFTERSKIP}
+% END
+%
+% \@xsect{AFTERSKIP} ==
+% BEGIN
+% IF AFTERSKIP > 0
+% THEN \par \nobreak
+% \vskip AFTERSKIP
+% \@afterheading
+% ELSE @nobreak :=G F
+% @noskipsec :=G T
+% \everypar{ IF @noskipsec = T
+% THEN @noskipsec :=G F
+% \clubpenalty :=G 10000
+% \hskip -\parindent
+% \begingroup
+% \@svsechd
+% \endgroup
+% \unskip
+% \hskip -AFTERSKIP
+% ELSE \clubpenalty :=G \@clubpenalty
+% \everypar := NULL
+% FI
+% }
+% FI
+%
+% END
+%
+% \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{ARG} ==
+% BEGIN
+% IF AFTERSKIP > 0
+% THEN \begingroup
+% STYLE
+% \@hangfrom{\hskip INDENT}{\interlinepenalty 10000 ARG\par}
+% \endgroup
+% ELSE \@svsechd == BEGIN STYLE
+% \hskip INDENT
+% ARG
+% END
+% FI
+% \@xsect{AFTERSKIP}
+% END
+%
+% \@afterheading ==
+% BEGIN
+% @nobreak :=G true
+% \everypar := BEGIN IF @nobreak = T
+% THEN @nobreak :=G false
+% \clubpenalty :=G 10000
+% IF @afterindent = F
+% THEN \hskip -\parindent
+% FI
+% ELSE \clubpenalty :=G \@clubpenalty
+% \everypar := NULL
+% FI
+% END
+% END
+%
+% \@secpenalty : The penalty (usually negative) put before a section
+% heading unless it immediately follows another one.
+%
+\newcount\@secpenalty
+\@secpenalty = -300
+
+
+\newif\if@noskipsec \@noskipsecfalse
+
+\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\par}
+ \endgroup
+ \csname #1mark\endcsname{#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}\else
+ \def\@svsechd{#6\hskip #3\@svsec #8\csname #1mark\endcsname
+ {#7}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #7}}\fi
+ \@xsect{#5}}
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \else \global\@nobreakfalse \global\@noskipsectrue
+ \everypar{\if@noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd \endgroup \unskip
+ \hskip -#1
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}\fi\ignorespaces}
+
+\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #5}\fi
+ \@xsect{#3}}
+
+\newif\if@afterindent \@afterindenttrue
+
+\def\@afterheading{\global\@nobreaktrue
+ \everypar{\if@nobreak
+ \global\@nobreakfalse
+ \clubpenalty \@M
+ \if@afterindent \else \hskip -\parindent\fi
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}}
+
+
+% \@hangfrom{TEXT} : Puts TEXT in a box, and makes a hanging indentation
+% of the following material up to the first \par. Should be used
+% in vertical mode.
+%
+\def\@hangfrom#1{\setbox\@tempboxa=\hbox{#1}
+ \hangindent 1\wd\@tempboxa\noindent\box\@tempboxa}
+
+\newcount\c@secnumdepth
+\newcount\c@tocdepth
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a \chapter or \section command without using
+% \@startsection, you can use \secdef as follows:
+% \def\chapter { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \chapter[...]{...}
+% \def\CMDB #1{ ... } % Command to define \chapter*{...}
+
+\def\secdef#1#2{\@ifstar{#2}{\@dblarg{#1}}}
+
+% Initializations
+%
+\def\sectionmark#1{}
+\def\subsectionmark#1{}
+\def\subsubsectionmark#1{}
+\def\paragraphmark#1{}
+\def\subparagraphmark#1{}
+
+ \message{contents,}
+% *****************************************
+% * TABLE OF CONTENTS, ETC. *
+% *****************************************
+%
+% CONVENTIONS:
+% \tf@foo = file number for output for table foo. The file is
+% opened only if @filesw = true.
+%
+% \contentsline{TYPE}{ENTRY}{PAGE}
+% Macro to produce a TYPE entry in a table of contents, etc.
+% It will appear in the .TOC or other file. For example,
+% The entry for subsection 1.4.3 in the table of contents might
+% be produced by:
+% \contentsline{subsection}{\makebox{30pt}[r]{1.4.3} Gnats and Gnus}{22}
+% The \protect command causes command sequences to be written
+% without expanding them.
+%
+% \l@TYPE{ENTRY}{PAGE}
+% Macro defined by document style for making an entry of
+% type TYPE in a table of contents, etc. E.g., the document
+% style should define \l@chapter, \l@section, etc.
+%
+% \addcontentsline{TABLE}{TYPE}{ENTRY}
+% User command for adding his own entry to a table of contents, etc.
+% It adds the entry
+% \contentsline{TYPE}{ENTRY}{page}
+% to the .TABLE file.
+%
+% \addtocontents{TABLE}{TEXT} : Adds TEXT to the .TABLE file, with no
+% page number.
+%
+% Note: When used in the ENTRY or TEXT of one of the above commands,
+% \protect causes the following control sequence to be written
+% on the file without being expanded. The sequence will be expanded
+% when the table of contents entry is processed.
+%
+% SURPRISE: \index and \label are no-ops inside an \addcontentsline
+% or \addtocontents command argument. This could cause a problem if
+% the user puts an \index or \label into one of the commands he writes,
+% or into the optional 'short version' argument of a \section or
+% \caption command.
+%
+% \addcontentsline{TABLE}{TYPE}{ENTRY} ==
+% BEGIN
+% if @filesw = true
+% then \begingroup
+% \index == \label == \@gobble
+% \protect{ARG} == \string\string\string ARG \string\space\space
+% \@temptokena := \thepage
+% \@tempa == write \string\contentsline
+% {TYPE}{ENTRY}{\the\@temptokena}
+% \@tempa
+% IF vmode and @nobreak = true THEN \nobreak FI
+% \endgroup
+% fi
+% END
+%
+% \@starttoc{EXT} : Used to define \tableofcontents, \listoffigures, etc.--
+% e.g., \@starttoc{lof} is used in \listoffigures. This command reads
+% the .EXT file and sets up to write the new .EXT file.
+%
+% \@starttoc{EXT} ==
+% BEGIN
+% \begingroup
+% \makeatletter
+% read file \jobname.EXT
+% IF @filesw = true
+% THEN open \jobname.EXT as file \tf@EXT
+% FI
+% \endgroup
+% END
+
+\def\@starttoc#1{\begingroup
+ \makeatletter
+ \@input{\jobname.#1}\if@filesw \expandafter\newwrite\csname tf@#1\endcsname
+ \expandafter\openout \csname tf@#1\endcsname \jobname.#1\relax
+ \fi \endgroup}
+
+
+\let\protect=\relax
+
+\def\addcontentsline#1#2#3{\if@filesw \begingroup
+\let\label\@gobble \let\index\@gobble
+\def\protect##1{\string\string\string##1\string\space
+ \space}\@temptokena{\thepage}%
+\edef\@tempa{\write \@auxout{\string\@writefile{#1}{\protect
+ \contentsline{#2}{#3}{\the\@temptokena}}}}\@tempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+
+\long\def\addtocontents#1#2{\if@filesw \begingroup
+\let\label\@gobble \let\index\@gobble
+\def\protect##1{\string\string\string##1\string\space\space}%
+\edef\@tempa{\write \@auxout {\string\@writefile{#1}{#2}}}\@tempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+
+\def\contentsline#1{\csname l@#1\endcsname}
+
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE} :
+% Macro to produce a table of contents line with the following
+% parameters:
+% LEVEL : If LEVEL > \c@tocdepth, then no line produced.
+% INDENT : Total indentation from the left margin.
+% NUMWIDTH : Width of box for number if the TITLE has a
+% \numberline command.
+% TITLE : Contents of entry.
+% PAGE : Page number.
+% Uses the following parameters, which must be set by the document style.
+% They should be defined with \def's.
+% \@pnumwidth : Width of box in which page number is set.
+% \@tocrmarg : Right margin indentation for all but last line of
+% multiple-line entries.
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+%
+
+\def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else
+ \vskip \z@ plus .2pt
+ {\hangindent #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax
+ #4\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep mu$}\hfill
+ \hbox to\@pnumwidth{\hfil\rm #5}\par}\fi}
+
+
+% \numberline{NUMBER} : For use in a \contentsline command.
+% It puts NUMBER flushleft in a box of width \@tempdima and adds
+% \@tempdima to the hanging indentation.
+
+\def\numberline#1{\advance\hangindent\@tempdima \hbox to\@tempdima{#1\hfil}}
+
+
+
+ \message{index,}
+% ****************************************
+% * INDEX COMMANDS *
+% ****************************************
+%
+% \makeindex ==
+% BEGIN
+% if \@filesw = T
+% then open file \jobname.IDX as \@indexfile
+% \index == BEGIN \@bsphack
+% \begingroup
+% re-\catcode special characters to 'other'
+% \@wrindex
+% fi
+% END
+%
+% \@wrindex{ITEM} ==
+% BEGIN
+% write of {\indexentry{ITEM}{page number}}
+% \endgroup
+% \@esphack
+% END
+
+% INITIALIZATION:
+%
+% \index == BEGIN \@bsphack
+% \begingroup
+% re-\catcode special characters (in case '%' there)
+% \@index
+% END
+%
+% \@index{ITEM} == BEGIN \endgroup \@esphack END
+%
+\def\makeindex{\if@filesw \newwrite\@indexfile
+ \immediate\openout\@indexfile=\jobname.idx
+ \def\index{\@bsphack\begingroup\@sanitize\@wrindex\@indexfile}\typeout
+ {Writing index file \jobname.idx }\fi}
+
+\def\@wrindex#1#2{\let\thepage\relax
+ \xdef\@gtempa{\write#1{\string
+ \indexentry{#2}{\thepage}}}\endgroup\@gtempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\index{\@bsphack\begingroup\@sanitize\@index}
+
+\def\@index#1{\endgroup\@esphack}
+
+\def\makeglossary{\if@filesw \newwrite\@glossaryfile
+ \immediate\openout\@glossaryfile=\jobname.glo
+ \def\glossary{\@bsphack\begingroup\@sanitize\@wrindex\@glossaryfile}\typeout
+ {Writing glossary file \jobname.glo }\fi}
+
+\def\glossary{\@bsphack\begingroup\@sanitize\@index}
+
+ \message{bibliography,}
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% A bibliography is created by the bibliography environment, which
+% generates a title such as ``References'', and a list of entries.
+% The BIBTeX program will create a file containing such an environment,
+% which will be read in by the \bibliography command. With
+% BIBTeX, the following commands will be used.
+%
+% \bibliography{FILE1,FILE2, ... ,FILEn} : specifies
+% the bibdata files. Writes a \bibdata entry on the .aux file
+% and tries to read in mainfile.BBL.
+%
+% \bibliographystyle{STYLE} : Writes a \bibstyle entry on the .aux file.
+%
+% The thebibliography environment is a list environment. To save the
+% use of an extra counter, it should use enumiv as the item counter.
+% Instead of using \item, items in the bibliography are produced by the
+% following commands:
+% \bibitem{NAME} : Produces a numbered entry cited as NAME.
+% \bibitem[LABEL]{NAME} : Produces an entry labeled by LABEL and
+% cited by NAME.
+% The former is used for bibliographies with citations like [1], [2], etc.;
+% the latter is used for citations like [Knuth82].
+%
+% The document style must define the thebibliography environment. This
+% environment has a single argument, which is the widest bibliography
+% label-- e.g., if the [Knuth67] is the widest entry, then thist argument
+% will be Knuth67. The \thebibliography command must begin a list
+% environment, which the \endthebibliography command ends.
+%
+% Entries are cited by the command \cite{NAME}.
+%
+% PARAMETERS
+%
+% \@cite : A macro such that \@cite{LABEL1,LABEL2}{NOTE}
+% produces the output for a \cite[NOTE]{FOO1,FOO2} command,
+% where entry FOOi is defined by \bibitem[LABELi]{FOOi}.
+% The switch @tempswa is true if the optional NOTE argument
+% is present.
+% The default definition is :
+% \@cite{LABELS}{NOTE} ==
+% BEGIN [LABELS
+% IF @tempswa = T THEN , NOTE FI
+% ]
+% END
+%
+% \@biblabel : A macro to produce the label in the bibliography
+% entry. For \bibitem[LABEL]{NAME}, the label is
+% generated by \@biblabel{LABEL}. It has the default
+% definition \@biblabel{LABEL} -> [LABEL].
+% CONVENTION
+%
+% \b@FOO : The name or number of the reference created by \cite{FOO}
+% E.g., if \cite{FOO} -> [17] , then \b@FOO -> 17.
+%
+%
+
+\def\bibitem{\@ifnextchar[{\@lbibitem}{\@bibitem}}
+
+\def\@lbibitem[#1]#2{\item[\@biblabel{#1}]\if@filesw
+ { \def\protect##1{\string ##1\space}\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}\fi\ignorespaces}}
+
+\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
+ {\string\bibcite{#1}{\the\c@enumi}}\fi\ignorespaces}
+
+\def\bibcite#1#2{\global\@namedef{b@#1}{#2}}
+
+\let\citation\@gobble
+
+\def\cite{\@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+ \def\@citea{}\@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,}\@ifundefined
+ {b@\@citeb}{{\bf ?}\@warning
+ {Citation `\@citeb' on page \thepage \space undefined}}%
+\hbox{\csname b@\@citeb\endcsname}}}{#1}}
+
+\let\bibdata=\@gobble
+\let\bibstyle=\@gobble
+
+\def\bibliography#1{\if@filesw\immediate\write\@auxout{\string\bibdata{#1}}\fi
+ \@input{\jobname.bbl}}
+
+\def\bibliographystyle#1{\if@filesw\immediate\write\@auxout
+ {\string\bibstyle{#1}}\fi}
+
+% \nocite{CITATIONS} : puts information on .AUX file to cause
+% BibTeX to include the CITATIONS list in the bibliography,
+% but puts nothing in the text. (Added 14 Jun 85)
+
+\def\nocite#1{\@bsphack
+ \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi
+ \@esphack}
+
+
+
+%DEFAULT DEFINITIONS
+
+\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
+\def\@biblabel#1{[#1]\hfill}
+
+ \message{floats,}
+% ****************************************
+% * FLOATS *
+% ****************************************
+%
+% The different types of floats are identified by a TYPE name, which is
+% the name of the counter for that kind of float. For example, figures
+% are of type 'figure' and tables are of type 'table'. Each TYPE has
+% associated a positive TYPE NUMBER, which is a power of two. E.g.,
+% figures might be have type number 1, tables type number 2, programs
+% type number 4, etc.
+%
+% The locations where a float can go are specified by a PLACEMENT
+% SPECIFIER, which is a list of the possible locations, each denoted
+% by a letter as follows:
+% h : here - at the current location in the text.
+% t : top - at the top of a text page.
+% b : bottom - at the bottom of a text page.
+% p : page - on a separate float page.
+% For example, 'pht' specifies that the float can appear in any of three
+% locations: page, here or top.
+%
+% Where floats may appear on a page, and how many may appear there
+% are specified by the following float placement parameters. The
+% numbers are named like counters so the user can set them with
+% the ordinary counter-setting commands.
+%
+% \c@topnumber : Number of floats allowed at the top of a column.
+% \topfraction : Fraction of column that can be devoted to floats.
+% \c@dbltopnumber, \dbltopfraction : Same as above, but for double-column
+% floats.
+% \c@bottomnumber, \bottomfraction : Same as above for bottom of page.
+% \c@totalnumber : Number of floats allowed in a single column,
+% including in-text floats.
+% \textfraction : Minimum fraction of column that must contain text.
+% \floatpagefraction : Minimum fraction of page that must be taken
+% up by float page.
+% \dblfloatpagefraction : Same as above, for double-column floats.
+%
+% The document style must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% \@makecaption{NUM}{TEXT} : A macro to make a caption, with NUM the value
+% produced by \fnum@... and TEXT the text of the caption.
+% It can assume it's in a \parbox of the appropriate width.
+%
+% \@float{TYPE}[PLACEMENT] : This macro begins a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+%
+% \caption ==
+% BEGIN
+% \refstepcounter{\@captype}
+% \@dblarg{\@caption{\@captype}}
+% END
+%
+% \@caption{TYPE}[STEXT]{TEXT} ==
+% BEGIN
+% \addcontentsline{\ext@TYPE}{TYPE}{\numberline{\theTYPE}{STEXT}}
+% \par
+% \begingroup
+% \@parboxrestore
+% \normalsize
+% \@makecaption{\fnum@TYPE}{TEXT}
+% \par
+% \endgroup
+% END
+%
+% \@float{TYPE}[PLACEMENT] ==
+% BEGIN
+% if hmode then \@bsphack
+% \@floatpenalty := -10002
+% else \@floatpenalty := -10003
+% fi
+% \@captype ==L TYPE
+% if inner
+% then LaTeX Error: 'Not in outer paragraph mode.'
+% \@floatpenalty := 0
+% else if \@freelist nonempty
+% then \@currbox :=L head of \@freelist
+% \@freelist :=G tail of \@freelist
+% \count\@currbox :=G 32*\ftype@TYPE + 16 +
+% bits determined by PLACEMENT
+% else \@floatpenalty := 0
+% LaTeX Error: 'Too many unprocessed floats'
+% fi
+% fi
+% \@currbox :=G \vbox{
+% \boxmaxdepth :=L 0pt %% to make a 0 depth box
+% \hsize = \columnwidth
+% \@parboxrestore
+% END
+%
+% \end@float ==
+% BEGIN
+% }
+% if \@floatpenalty < 0
+% then add \@currbox to \@currlist
+% if \ht\@currbox > \textheight
+% then \ht\@currbox :=G \textheight fi
+% if \@floatpenalty < -10002
+% then \penalty -10004
+% \vbox{}
+% \penalty \@floatpenalty
+% else \vadjust{\penalty -10004
+% \vbox{}
+% \penalty \@floatpenalty}
+% \@esphack
+% fi fi
+% END
+%
+% \@dblfloat{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% double-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is 'tp'
+% The environment is ended by \end@dblfloat.
+% E.g., \figure* == \@dblfloat{figure}, \endfigure* == \end@dblfloat.
+%
+% \@dblfloat{TYPE}[PLACEMENT] ==
+% Identical to \@float{TYPE}[PLACEMENT] except \hsize and \linewidth
+% are set to \textwidth.
+%
+% \end@dblfloat ==
+% BEGIN %%% { BRACE MATCHING
+% }
+% if \@floatpenalty < 0
+% then \@dbldeferlist :=G \@dbldeferlist * \@currbox
+% fi
+% if \@floatpenalty = -10002 then \@esphack fi
+% END
+%
+\newcount\@floatpenalty
+
+\def\caption{\refstepcounter\@captype \@dblarg{\@caption\@captype}}
+
+\long\def\@caption#1[#2]#3{\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\par
+ \begingroup
+ \@parboxrestore
+ \normalsize
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+
+\def\@float#1{\@ifnextchar[{\@xfloat{#1}}{\edef\@tempa{\noexpand\@xfloat
+ {#1}[\csname fps@#1\endcsname]}\@tempa}}
+
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+ \boxmaxdepth\z@
+ \hsize\columnwidth \@parboxrestore}
+
+\def\end@float{\egroup
+ \ifnum\@floatpenalty <\z@
+ \@cons\@currlist\@currbox
+ \ifdim \ht\@currbox >\textheight
+ \ht\@currbox\textheight \fi
+ \ifnum\@floatpenalty < -\@Mii
+ \penalty -\@Miv \vbox{}\penalty\@floatpenalty
+ \else \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@esphack
+ \fi\fi}
+
+\def\@dblfloat{\if@twocolumn\let\@tempa\@dbflt\else\let\@tempa\@float\fi
+ \@tempa}
+
+\def\@dbflt#1{\@ifnextchar[{\@xdblfloat{#1}}{\@xdblfloat{#1}[tp]}}
+
+\def\@xdblfloat#1[#2]{\@xfloat{#1}[#2]\hsize\textwidth\linewidth\textwidth}
+
+\def\end@dblfloat{\if@twocolumn\egroup
+ \ifnum\@floatpenalty <\z@ \@cons\@dbldeferlist\@currbox\fi
+ \ifnum \@floatpenalty =-\@Mii \@esphack\fi\else\end@float\fi}
+
+\newcount\c@topnumber
+\newcount\c@dbltopnumber
+\newcount\c@bottomnumber
+\newcount\c@totalnumber
+
+\def\@floatplacement{\global\@topnum\c@topnumber
+ \global\@toproom \topfraction\@colht
+ \global\@botnum \c@bottomnumber
+ \global\@botroom \bottomfraction\@colht
+ \global\@colnum \c@totalnumber
+ \@fpmin \floatpagefraction\@colht}
+
+\def\@dblfloatplacement{\global\@dbltopnum\c@dbltopnumber
+ \global\@dbltoproom \dbltopfraction\@colht
+ \@fpmin \dblfloatpagefraction\textheight
+ \@fptop \@dblfptop
+ \@fpsep \@dblfpsep
+ \@fpbot \@dblfpbot}
+
+% MARGINAL NOTES:
+%
+% Marginal notes use the same mechanism as floats to communicate
+% with the \output routine. Marginal notes are distinguished from
+% floats by having a negative placement specification. The command
+% \marginpar [LTEXT]{RTEXT} generates a marginal note in a parbox,
+% using LTEXT if it's on the left and RTEXT if it's on the right.
+% (Default is RTEXT = LTEXT.) It uses the following parameters.
+%
+% \marginparwidth : Width of marginal notes.
+% \marginparsep : Distance between marginal note and text.
+% the page layout to determine how to move the marginal
+% note into the margin. E.g., \@leftmarginskip ==
+% \hskip -\marginparwidth \hskip -\marginparsep .
+% \marginparpush : Minimum vertical separation between \marginpar's
+%
+% Marginal notes are normally put on the outside of the page
+% if @mparswitch = true, and on the right if @mparswitch = false.
+% The command \reversemarginpar reverses the side where they
+% are put. \normalmarginpar undoes \reversemarginpar.
+% These commands have no effect for two-column output.
+%
+% SURPRISE: if two marginal notes appear on the same line of
+% text, then the second one could appear on the next page, in
+% a funny position.
+%
+%
+% \marginpar [LTEXT]{RTEXT} ==
+% BEGIN
+% if hmode then \@bsphack
+% \@floatpenalty := -10002
+% else \@floatpenalty := -10003
+% fi
+% if inner
+% then LaTeX Error: 'Not in outer paragraph mode.'
+% \@floatpenalty := 0
+% else if \@freelist has two elements:
+% then get \@marbox, \@currbox from \@freelist
+% \count\@marbox :=G -1
+% else \@floatpenalty := 0
+% LaTeX Error: 'Too many unprocessed floats'
+% \@currbox, \@marbox := \@tempboxa %%use \def
+% fi
+% fi
+% if optional argument
+% then %% \@xmpar ==
+% \@savemarbox\@marbox{LTEXT}
+% \@savemarbox\@currbox{RTEXT}
+% else %% \@ympar ==
+% \@savemarbox\@marbox{RTEXT}
+% \box\@currbox :=G \box\@marbox
+% fi
+% %% \@xympar ==
+% if \@floatpenalty < 0 then add \@marbox to \@currlist fi
+% { \end@float %%%% BRACE MATCHING}
+% END
+%
+% \@savemarbox\BOX{TEXT} ==
+% BEGIN
+% \BOX :=G \vtop{ \hsize = \marginparwidth
+% \@parboxrestore
+% TEXT
+% }
+% END
+%
+% \reversemarginpar == BEGIN \@mparbottom :=G 0
+% @reversemargin :=G true
+% END
+%
+% \normalmarginpar == BEGIN \@mparbottom :=G 0
+% @reversemargin :=G false
+% END
+%
+
+\def\marginpar{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{}{}\@next\@marbox\@freelist{\global
+ \count\@marbox\m@ne}{\@floatpenalty\z@ \@fltovf\def\@currbox{\@tempboxa
+ }\def\@marbox{\@tempboxa}}\fi
+ \@ifnextchar [{\@xmpar}{\@ympar}}
+
+\long\def\@xmpar[#1]#2{\@savemarbox\@marbox{#1}\@savemarbox\@currbox
+ {#2}\@xympar}
+
+\long\def\@ympar#1{\@savemarbox\@marbox{#1}\global\setbox\@currbox
+ \copy\@marbox\@xympar}
+
+\long\def\@savemarbox#1#2{\global\setbox#1\vtop{\hsize\marginparwidth
+ \@parboxrestore #2}}
+
+\def\@xympar{\ifnum\@floatpenalty <\z@\@cons\@currlist\@marbox\fi
+ \bgroup\end@float\@esphack}
+
+\def\reversemarginpar{\global\@mparbottom\z@ \@reversemargintrue}
+\def\normalmarginpar{\global\@mparbottom\z@ \@reversemarginfalse}
+
+
+ \message{footnotes,}
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnote{NOTE} : User command to insert a footnote.
+%
+% \footnote[NUM]{NOTE} : User command to insert a footnote numbered
+% NUM, where NUM is a number -- 1, 2,
+% etc. For example, if footnotes are numbered
+% *, **, etc. within pages, then \footnote[2]{...}
+% produces footnote '**'. This command does not
+% step the footnote counter.
+%
+% \footnotemark[NUM] : Command to produce just the footnote mark in
+% the text, but no footnote. With no argument,
+% it steps the footnote counter before generating
+% the mark.
+%
+% \footnotetext[NUM]{TEXT} : Command to produce the footnote but no
+% mark. \footnote is equivalent to
+% \footnotemark \footnotetext .
+%
+% As in PLAIN, footnotes use \insert\footins, and the following parameters:
+%
+% \footnotesize : Size-changing command for footnotes.
+%
+% \footnotesep : The height of a strut placed at the beginning of
+% every footnote.
+% \skip\footins : Space between main text and footnotes. The rule
+% separating footnotes from text occurs in this space.
+% This space lies above the strut of height \footnotesep
+% which is at the beginning of the first footnote.
+% \footnoterule : Macro to draw the rule separating footnotes from text.
+% It should take zero vertical space--i.e., it should to
+% a negative skip to compensate for any positive space
+% it occupies. (See PLAIN.TEX.)
+%
+% \interfootnotelinepenalty : Interline penalty for footnotes.
+%
+% \thefootnote : In usual LaTeX style, produces the footnote number.
+% If footnotes are to be numbered within pages, then the
+% document style file must include an \@addtoreset command
+% to cause the footnote counter to be reset when the page
+% counter is stepped. This is not a good idea, though,
+% because the counter will not always be reset in time
+% to ensure that the first footnote on a page is footnote
+% number one.
+%
+% \@thefnmark : Holds the current footnote's mark--e.g., \dag or '1' or 'a'.
+%
+% \@mpfnnumber : A macro that generates the numbers for \footnote
+% and \footnotemark commands. It == \thefootnote
+% outside a minipage environment, but can be changed
+% inside to generate numbers for \footnote's.
+%
+% \@makefnmark : A macro to generate the footnote marker from \@thefnmark
+% The default definition is \hbox{$^\@thefnmark$}.
+%
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox, with \hsize = \columnwidth. For example, it might
+% be as simple as
+% $^{\@thefnmark}$ NOTE
+%
+% In a minipage environment, \footnote and \footnotetext are redefined
+% so that
+% (a) they use the counter mpfootnote
+% (b) the footnotes they produce go at the bottom of the minipage.
+% The switch is accomplished by letting \@mpfn == footnote or mpfootnote
+% and \thempfn == \thefootnote or \thempfootnote, and by redefining
+% \@footnotetext to be \@mpfootnotetext in the minipage.
+%
+% \footnote{NOTE} ==
+% BEGIN
+% \stepcounter{\@mpfn}
+% \@thefnmark :=G eval (\thempfn)
+% \@footnotemark
+% \@footnotetext{NOTE}
+% END
+%
+% \footnote[NUM]{NOTE} ==
+% BEGIN
+% begingroup
+% counter \@mpfn :=L NUM
+% \@thefnmark :=G eval (\thempfn)
+% endgroup
+% \@footnotemark
+% \@footnotetext{NOTE}
+% END
+%
+% \@footnotetext{NOTE} ==
+% BEGIN
+% \insert into \footins
+% {\footnotesize
+% \interlinepenalty :=L \interfootnotelinepenalty
+% \splittopskip :=L \footnotesep
+% \splitmaxdepth :=L \dp\strutbox
+% \floatingpenalty :=L 20000
+% \hsize :=L \columnwidth
+% \@parboxrestore
+% set \@currentlabel to make \label command work right
+% \@makefntext{\rule{0pt}{\footnotesep} NOTE}
+% }
+% END
+%
+% \footnotemark ==
+% BEGIN \stepcounter{footnote}
+% \@thefnmark :=G eval(\thefootnote)
+% \@footnotemark
+% END
+%
+% \footnotemark[NUM] ==
+% BEGIN
+% begingroup
+% footnote counter :=L NUM
+% \@thefnmark :=G eval(\thefootnote)
+% endgroup
+% \@footnotemark
+% END
+%
+% \@footnotemark ==
+% BEGIN
+% \leavevmode
+% IF hmode THEN \@x@sf := \the\spacefactor FI
+% \@makefnmark % put number in main text
+% IF hmode THEN \spacefactor := \@x@sf FI
+% END
+%
+% \footnotetext ==
+% BEGIN \@thefnmark :=G eval (\thempfn)
+% \@footnotetext
+% END
+%
+% \footnotetext[NUM] ==
+% BEGIN begingroup counter \@mpfn :=L NUM
+% \@thefnmark :=G eval (\thempfn)
+% endgroup
+% \@footnotetext
+% END
+%
+
+\@definecounter{footnote}
+\def\thefootnote{\arabic{footnote}}
+
+\@definecounter{mpfootnote}
+\def\thempfootnote{\alph{mpfootnote}}
+
+% Default definition
+\def\@makefnmark{\hbox{$^{\@thefnmark}$}}
+
+\newdimen\footnotesep
+
+\def\footnote{\@ifnextchar[{\@xfootnote}{\stepcounter
+ {\@mpfn}\xdef\@thefnmark{\thempfn}\@footnotemark\@footnotetext}}
+
+\def\@xfootnote[#1]{\begingroup \csname c@\@mpfn\endcsname #1\relax
+ \xdef\@thefnmark{\thempfn}\endgroup
+ \@footnotemark\@footnotetext}
+
+\long\def\@footnotetext#1{\insert\footins{\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+\def\footnotemark{\@ifnextchar[{\@xfootnotemark
+ }{\stepcounter{footnote}\xdef\@thefnmark{\thefootnote}\@footnotemark}}
+
+\def\@xfootnotemark[#1]{\begingroup \c@footnote #1\relax
+ \xdef\@thefnmark{\thefootnote}\endgroup \@footnotemark}
+
+\def\@footnotemark{\leavevmode\ifhmode
+ \edef\@x@sf{\the\spacefactor}\fi \@makefnmark
+ \ifhmode\spacefactor\@x@sf\fi\relax}
+
+\def\footnotetext{\@ifnextchar
+ [{\@xfootnotenext}{\xdef\@thefnmark{\thempfn}\@footnotetext}}
+
+\def\@xfootnotenext[#1]{\begingroup \csname c@\@mpfn\endcsname #1\relax
+ \xdef\@thefnmark{\thempfn}\endgroup \@footnotetext}
+
+\def\@mpfn{footnote}
+\def\thempfn{\thefootnote}
+
+ \message{initial,}
+% ****************************************
+% * INITIAL DECLARATION COMMANDS *
+% ****************************************
+%
+% DOCUMENT STYLE
+% --------------
+%
+% The user starts his file with the command
+% \documentstyle [OPTION1, ... ,OPTIONk]{STYLE}
+% which saves the OPTION's and \input's the file STYLE.STY. When the
+% STYLE.STY file issues the command \@options, the following happens
+% for each i :
+% IF \ds@OPTIONi is defined
+% THEN execute \ds@OPTIONi
+% ELSE save OPTIONi on a list of unprocessed options.
+% FI
+% After STYLE.STY has been executed, the file OPTIONi.STY is read for
+% each OPTIONi on the list of unprocessed options.
+%
+% \documentstyle ==
+% BEGIN
+% IF next char = [
+% THEN \@documentstyle
+% ELSE \@documentstyle[]
+% FI
+% END
+%
+% \@documentstyle[OPTIONS]{STYLE} ==
+% BEGIN
+% \makeatletter
+% \@optionlist := OPTIONS
+% \@optionfiles :=G null
+% \input STYLE.STY
+% \@elt == \input
+% \@optionfiles
+% \@elt == \relax
+% \makeatother
+% END
+%
+% \@options ==
+% BEGIN
+% \@elt := \relax
+% FOR \@tempa := \@optionlist
+% DO IF \ds@[eval(\@tempa)] defined
+% THEN \ds@[eval(\@tempa)]
+% ELSE \@optionfiles :=G \@optionfiles *
+% \@elt eval(\@tempa) \relax
+% OD FI
+% END
+%
+% PAGE STYLE COMMANDS
+% -------------------
+% \pagestyle{STYLE} : sets the page style of the current and succeeding
+% pages to STYLE
+%
+% \thispagestyle{STYLE} : sets the page style of the current page only
+% to STYLE
+%
+% To define a page style STYLE, you must define \ps@STYLE to set the page
+% style parameters.
+%
+% HOW A PAGE STYLE MAKES RUNNING HEADS AND FEET:
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and feet.
+% (See output routine.) To make headings determined by the sectioning
+% commands, the page style defines the commands \chaptermark,
+% \sectionmark, etc., where \chaptermark{TEXT} is called by \chapter to
+% set a mark. The \...mark commands and the \...head macros are defined
+% with the help of the following macros. (All the \...mark commands
+% should be initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the output routine, gets the current 'left' mark.
+% Works like TeX's \botmark.
+% \rightmark : Used in the output routine, gets the current 'right' mark.
+% Works like TeX's \firstmark.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \chapter command and
+% the right mark is changed by a \section command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+% Commands like \tableofcontents that should set the marks in some page styles
+% use a \@mkboth command, which is \let by the pagestyle command (\ps@...)
+% to \markboth for setting the heading or to \@gobbletwo to do nothing.
+
+\def\documentstyle{\@ifnextchar[{\@documentstyle}{\@documentstyle[]}}
+
+\def\@documentstyle[#1]#2{\makeatletter
+ \def\@optionlist{#1}\gdef\@optionfiles{}\input #2.sty\relax
+ \let\@elt\input \@optionfiles \let\@elt\relax \makeatother}
+
+\def\@options{\let\@elt\relax
+ \@for\@tempa:=\@optionlist\do
+ {\@ifundefined{ds@\@tempa}{\xdef\@optionfiles{\@optionfiles
+ \@elt \@tempa.sty\relax}}{\csname ds@\@tempa\endcsname}}}
+
+\def\pagestyle#1{\@nameuse{ps@#1}}
+\def\thispagestyle#1{\global\@specialpagetrue\gdef\@specialstyle{#1}}
+
+% \head : An obsolete command that was used in the `myheadings'
+% page style. (Removed 14 Jun 85)
+% \def\head{\@ifnextchar[{\@xhead}{\@yhead}}
+% \def\@xhead[#1]#2{\if #1l \def\@lhead{#2}\else \def\@rhead{#2}\fi}
+% \def\@yhead#1{\def\@lhead{#1}\def\@rhead{#1}}
+
+% Initialization
+%
+\def\@lhead{}
+\def\@rhead{}
+
+
+% Default Initializations
+%
+\def\ps@empty{\let\@mkboth\@gobbletwo\def\@oddhead{}\def\@oddfoot{}%
+\def\@evenhead{}\def\@evenfoot{}}
+
+\def\ps@plain{\let\@mkboth\@gobbletwo
+ \def\@oddhead{}\def\@oddfoot{\rm\hfil\thepage
+ \hfil}\def\@evenhead{}\let\@evenfoot\@oddfoot}
+
+\def\@leftmark#1#2{#1}
+\def\@rightmark#1#2{#2}
+\def\markboth#1#2{\gdef\@themark{{#1}{#2}}{\let\protect\noexpand
+ \mark{\@themark}}}
+\def\markright#1{{\let\protect\noexpand\expandafter\@markright\@themark
+ {#1}\mark{\@themark}}}
+\def\@markright#1#2#3{\gdef\@themark{{#1}{#3}}}
+\def\leftmark{\expandafter\@leftmark\botmark}
+\def\rightmark{\expandafter\@rightmark\firstmark}
+
+% Initialization
+%
+\def\@themark{{}{}}
+
+
+% OTHER
+% -----
+%
+% \raggedbottom : Typesets pages with no vertical stretch, so they have
+% their natural height instead of all being exactly the
+% same height. (Uses a space of .0001fil to avoid
+% interfering with the 1fil space of \newpage.)
+%
+% \flushbottom : Inverse of \raggedbottom - makes all pages the same
+% height.
+%
+% \sloppy : Resets TeX's parameters so it accepts worse line and page
+% breaks, and slightly more overfull boxes.
+%
+% \fussy : Resets TeX's parameters to their normal finnicky values.
+%
+
+\def\raggedbottom{\def\@textbottom{\vskip \z@ plus.0001fil}\let\@texttop\relax}
+\def\flushbottom{\let\@textbottom\relax \let\@texttop\relax}
+
+% Default definitions
+% \sloppy will never (well, hardly ever) produce overfull boxes, but may
+% produce underfull ones. (14 June 85)
+% A sloppypar environment is equivalent to {\par \sloppy ... \par}.
+\def\sloppy{\tolerance 10000 \hfuzz .5\p@ \vfuzz .5\p@}
+\def\sloppypar{\par\sloppy}
+\def\endsloppypar{\par}
+\def\fussy{\tolerance 200 \hfuzz .1\p@ \vfuzz .1\p@}
+
+
+
+% LaTeX default is no overfull box rule. Changed by document
+% style option
+
+\overfullrule 0pt
+
+ \message{output,}
+% ****************************************
+% * OUTPUT *
+% ****************************************
+%
+%
+% PAGE LAYOUT PARAMETERS
+%
+% \topmargin : Extra space added to top of page.
+% @twoside : boolean. T if two-sided printing
+% \oddsidemargin : IF @twoside = T
+% THEN extra space added to left of odd-numbered
+% pages.
+% ELSE extra space added to left of all pages.
+% \evensidemargin : IF @twoside = T
+% THEN extra space added to left of even-numbered
+% pages.
+% \headheight : height of head
+% \headsep : separation between head and text
+% \footheight : height of foot
+% \footskip : distance separation between baseline of last
+% line of text and baseline of foot.
+% Note difference between \footSKIP and \headSEP.
+% \textheight : height of text on page, excluding head and foot
+% \textwidth : width of printing on page
+% \columnsep : IF @twocolumn = T
+% THEN width of space between columns
+% \columnseprule : IF @twocolumn = T
+% THEN width of rule between columns (0 if none).
+% \columnwidth : IF @twocolumn = T
+% THEN (\textwidth - \columnsep)/2
+% ELSE \textwidth
+% It is set by the \@maketwocolumn and \@makeonecolumn
+% commands.
+% \@textbottom : Command executed at bottom of vbox holding text of page
+% (including figures). The \raggedbottom command
+% simply \let's this to \vfil.
+%
+% \@texttop : Command executed at top of vbox holding text of page
+% (including figures). Used by letter style; can also
+% be used to produce centered pages. Is \let to \relax
+% by \raggedbottom and \flushbottom.
+%
+% Page layout must also initialize \@colht and \@colroom to \textheight.
+%
+% PAGE STYLE PARAMETERS:
+%
+% \floatsep : Space left between floats.
+% \textfloatsep : Space between last top float or first bottom float
+% and the text.
+% \topfigrule : Command to place rule (or whatever) between floats
+% at top of page and text. Executed in inner vertical
+% mode right before the \textfloatsep skip separating
+% the floats from the text. Must occupy zero vertical
+% space. (See \footnoterule.)
+% \botfigrule : Same as \topfigrule, but put after the \textfloatsep
+% skip separating text from the floats at bottom of page.
+% \intextsep : Space left on top and bottom of an in-text float.
+% \@maxsep : The maximum of \floatsep, \textfloatsep and \intextsep
+% \dblfloatsep : Space between double-column floats.
+% \dbltextfloatsep : Space between top or bottom double-column floats
+% and text.
+% \dblfigrule : Similar to \topfigrule, but for double-column floats.
+% \@dblmaxsep : The maximum of \dblfloatsep and \dbltexfloatsep
+% \@fptop : Glue to go at top of float column -- must be 0pt +
+% stretch
+% \@fpsep : Glue to go between floats in a float column.
+% \@fpbot : Glue to go at bottom of float column -- must be 0pt +
+% stretch
+% \@dblfptop, \@dblfpsep, \@dblfpbot
+% : Analogous for double-column float page in two-column
+% format.
+%
+% FOOTNOTES: As in PLAIN, footnotes use \insert\footins.
+%
+% PAGE LAYOUT SWITCHES AND MACROS
+%
+% @twocolumn : Boolean. T if two columns per page.
+%
+% PAGE STYLE MACROS AND SWITCHES
+%
+% \@oddhead : IF @twoside = T
+% THEN macro to generate head of odd-numbered pages.
+% ELSE macro to generate head of all pages.
+% \@evenhead : IF @twoside = T
+% THEN macro to generate head of even-numbered pages.
+% \@oddfoot : IF @twoside = T
+% THEN macro to generate foot of odd-numbered pages.
+% ELSE macro to generate foot of all pages.
+% \@evenfoot : IF @twoside = T
+% THEN macro to generate foot of even-numbered pages.
+% @specialpage : boolean. T if current page is to have a special format.
+% \@specialstyle : If its value is foo then
+% IF @specialpage = T
+% THEN the command \ps@foo is executed to temporarily
+% reset the page style parameters before composing
+% the current page. This command should execute
+% only \def's and \edef's, making only local
+% definitions.
+%
+%
+% FLOAT PLACEMENT PARAMETERS
+%
+% The following parameters are set by the macro \@floatplacement, which is
+% defined by the \floatstyle command. When \@floatplacement is called,
+% \@colht is the height of the page or column being built. I.e.:
+% * For single-column page it equals \textheight.
+% * For double-column page it equals \textheight - height
+% of double-column floats on page.
+% Note that some are set globally and some locally:
+% \@topnum :=G Maximum number of floats allowed on the top of a column.
+% \@toproom :=G Maximum amount of top of column devoted to floats--
+% excluding \textfloatsep separation below the floats and
+% \floatsep separation between them. For two-column
+% output, should be computed as a function of \@colht.
+% \@botnum, \@botroom
+% : Analogous to above.
+% \@colnum :=G Maximum number of floats allowed in a column, including
+% in-text floats.
+% \@textmin :=L Minimum amount of text (excluding footnotes) that must
+% appear on a text page. %% 27 Sep 85 : made local to
+% %% \@addtocurcol and \@addtonextcol
+% \@fpmin :=L Minimum height of floats in a float column.
+%
+% The macro \@dblfloatplacement sets the following parameters. This macro
+% is also defined by the \floatstyle command.
+% \@dbltopnum :=G Maximum number of double-column floats allowed at the
+% top of a two-column page.
+% \@dbltoproom :=G Maximum height of double-column floats allowed at
+% top of two-column page.
+% \@fpmin :=L Minimum height of floats in a float column.
+% It should also perform the following local assignments where necessary
+% -- i.e., where the new value differs from the old one:
+% \@fptop :=L \@dblfptop
+% \@fpsep :=L \@dblfpsep
+% \@fpbot :=L \@dblfpbot
+%
+% OUTPUT ROUTINE VARIABLES
+%
+% \@colht : The total height of the current column. In single column
+% style, it equals \textheight. In two-column style, it is
+% \textheight minus the height of the double-column floats
+% on the current page. MUST BE INITIALIZED TO \textheight.
+%
+% \@colroom : The height available in the current column for text and
+% footnotes. It equals \@colht minus the height of all
+% floats committed to the top and bottom of the current
+% column.
+%
+% \footins : Footnote insertion number.
+%
+% \@maxdepth : Saved value of TeX's \maxdepth. Must be set
+% when any routine sets \maxdepth.
+%
+% CALLING THE OUTPUT ROUTINE
+% --------------------------
+%
+% The output routine is called either by TeX's normal page-breaking
+% mechanism, or by a macro putting a penalty < or = -10000 in the output
+% list. In the latter case, the penalty indicates why the output
+% routine was called, using the following code.
+%
+% penalty reason
+% ------- ------
+% -10000 \pagebreak
+% \newpage
+% -10001 \clearpage (called with \penalty -10000 \vbox{} \penalty -10001
+% -10002 float insertion, called from horizontal mode
+% -10003 float insertion, called from vertical mode.
+% -10004 float insertion.
+%
+% Note: A float or marginpar puts the following sequence in the output
+% list: (i) a penalty of -10004,
+% (ii) a null \vbox
+% (iii) a penalty of -10002 or -10003.
+% This solves two special problems:
+% 1. If the float comes right after a \newpage or \clearpage,
+% then the first penalty is ignored, but the second one
+% invokes the output routine.
+% 2. If there is a split footnote on the page, the second 'page'
+% puts out the rest of the footnote.
+%
+% THE OUTPUT ROUTINE
+% ------------------
+%
+% FUNCTIONS USED IN THE OUTPUT ROUTINE:
+%
+% \@outputpage : Produces an output page with the contents of box
+% \@outputbox as the text part. Also sets
+% \@colht :=G \textheight. The page style is determined
+% as follows.
+% IF @thispagestyle = true
+% THEN use \thispagestyle style
+% ELSE use ordinary page style.
+%
+% \@tryfcolumn\FLIST : Tries to form a float column composed of floats from
+% \FLIST with with the following parameters:
+% \@colht : height of box
+% \@fpmin : minimum height of floats in the box
+% \@fpsep : interfloat space
+% \@fptop : glue at top of box
+% \@fpbot : glue at bottom of box.
+% If it succeeds, then it does the following:
+% * \@outputbox :=L the composed float box.
+% * @fcolmade :=L true
+% * \FLIST :=G \FLIST - floats put in box
+% * \@freelist :=G \@freelist + floats put in box
+% If it fails, then:
+% * @fcolmade :=L false
+% NOTE: BIT MUST BE A SINGLE TOKEN!
+%
+% \@makefcolumn \FLIST : Same as \@tryfcolumn except that it
+% fails to make a float column only if \FLIST is empty.
+% Otherwise, it makes a float column containing at least
+% the first box in \FLIST, disregarding \@fpmin.
+%
+% \@startcolumn :
+% Calls \@tryfcolumn\@deferlist{8}. If \@tryfcolumn returns with
+% @fcolmade = false, then:
+% * Globally sets \@toplist and \@botlist to floats
+% from \@deferlist to go at top and bottom of column,
+% deleting them from \@deferlist. It does
+% this using \@colht as the total height, the page
+% style parameters \@floatsep and \@textfloatsep, and
+% the float placement parameters \@topnum, \@toproom,
+% \@botnum, \@botroom, \@colnum and \textfraction.
+% * Globally sets \@colroom to \@colht minus the height
+% of the added floats.
+%
+% \@startdblcolumn :
+% Calls \@tryfcolumn\@dbldeferlist{8}. If \@tryfcolumn returns
+% with @fcolmade = false, then:
+% * Globally sets \@dbltoplist to floats from \@dbldeferlist
+% to go at top and bottom of column, deleting them from
+% \@dbldeferlist. It does this using \textheight as the
+% total height, and the parameters \@dblfloatsep, etc.
+% * Globally sets \@colht to \textheight minus the height
+% of the added floats.
+%
+% \@combinefloats : Combines the text from box
+% \@outputbox with the floats from \@toplist and \@botlist,
+% putting the new box in \@outputbox. It uses \floatsep and
+% \textfloatsep for the appropriate separations. It puts the
+% elements of \TOPLIST and \BOTLIST onto \@freelist, and makes
+% those lists null.
+%
+% \@makecol : Makes the contents of \box255 plus the accumulated
+% footnotes, plus the floats in \@toplist and \@botlist,
+% into a single column of height \@colht, which it puts
+% into box \@outputbox. It puts boxes in \@midlist back
+% onto \@freelist and restores \maxdepth.
+%
+% \@opcol : Outputs a column whose text is in box \@outputbox
+% If @twocolumn = false, then it calls \@outputpage,
+% sets \@colht :=G \textheight, and calls \@floatplacement.
+%
+% If @twocolumn = true, then:
+% If @firstcolumn = true, then it puts box \@outputbox
+% into \@leftcolumn and sets @firstcolumn :=G false.
+%
+% If @firstcolumn = false, then it puts out the current
+% two-column page, any possible two-column float pages,
+% and determines \@dbltoplist for the next page.
+%
+% \@opcol ==
+% BEGIN
+% \@mparbottom :=G 0pt
+% if @twocolumn = true
+% then %% \@outputdblcol ==
+% if @firstcolumn = true
+% then @firstcolumn :=G false
+% \@leftcolumn :=G \@outputbox
+% else @firstcolumn :=G true
+% \@outputbox := \vbox{
+% \hbox to \textwidth{
+% \hbox to\columnwidth{\box\@leftcolumn
+% \hss}
+% \hfil \vrule width \columnseprule \hfil
+% \hbox to\columnwidth{\box\@outputbox}
+% \hss} }
+% \@combinedblfloats
+% \@outputpage
+% \begingroup
+% \@dblfloatplacement
+% \@startdblcolumn
+% while @fcolmade = true
+% do \@outputpage
+% \@startdblcolumn od
+% \endgroup
+% fi
+% else
+% \@outputpage
+% \@colht :=G \textheight
+% fi
+% END
+%
+% \@makecol ==
+% BEGIN
+% ifvoid \insert\footins
+% then \@outputbox := \box255
+% else \@outputbox := \vbox {\unvbox255
+% \vskip \skip\footins
+% \footnoterule
+% \unvbox\@footinsert
+% }
+% fi
+% \@freelist :=G \@freelist * \@midlist
+% \@midlist :=G empty
+% \@combinefloats
+% \@outputbox := \vbox to \@colht{\boxmaxdepth := \maxdepth
+% \@texttop
+% \unvbox\@outputbox
+% \@textbottom}
+% \maxdepth :=G \@maxdepth
+% END
+%
+% \@outputpage ==
+% BEGIN
+% \begingroup %%% added 11 Jun 85 to keep special page
+% %%% declarations local to this output page
+% \catcode`\ := 10 %%make sure space is really a space
+% if @specialpage = T
+% then @specialpage :=G F
+% execute \@ps@[eval(\@specialstyle)] fi
+% if \@twoside = T
+% then if \count0 odd
+% \@thehead ==L \@oddhead
+% \@thefoot ==L \@oddfoot
+% \@themargin ==L \oddsidemargin
+% else \@oddhead ==L \@evenhead
+% \@oddfoot ==L \@evenfoot
+% \@themargin ==L \evensidemargin fi fi
+% \shipout\vbox
+% {\normalsize % set fonts size for head and foot
+% \baselineskip :=L \lineskip :=L 0pt
+% \vskip \topmargin
+% \moveright\@themargin\vbox
+% { \box\@tempboxa := \vbox to \headheight{\vfil
+% \hbox to \textwidth
+% {\@thehead}}
+% \dp\@tempboxa := 0pt % Don't skip space for descenders in
+% \box\@tempboxa % running head.
+% \vskip \headsep
+% \box\@outputbox
+% \baselineskip\footskip
+% \hbox to \textwidth{\@thefoot}
+% }
+% }
+% \@colht :=G \textheight
+% \endgroup %% added 11 Jun 85
+% \stepcounter{page}
+% \firstmark ==L \botmark %% So marks work properly on float
+% %% pages. (14 Jun 85)
+% END
+%
+% \@startcolumn ==
+% BEGIN
+% \@colroom :=G \@colht
+% if \@deferlist is empty
+% then @fcolmade := false
+% else \@tryfcolumn\@deferlist %% else clause == \@xstartcol
+% if @fcolmade = false
+% then \begingroup
+% \@tempb :=L \@deferlist
+% \@deferlist :=G empty
+% \@elt \BOX == BEGIN \@currbox == \BOX % use \gdef
+% \@addtonextcol
+% END == \@scolelt
+% \@tempb
+% \endgroup
+% fi fi
+% END
+%
+% \@startdblcolumn ==
+% BEGIN
+% \@colht :=G \textheight
+% \@tryfcolumn\@dbldeferlist %% else clause == \@xstartcol
+% if @fcolmade = false
+% then \begingroup
+% \@tempb :=L \@dbldeferlist
+% \@dbldeferlist :=G empty
+% \@elt \BOX == BEGIN \@currbox == \BOX % use \gdef
+% \@addtodblcol
+% END == \@sdblcolelt
+% \@tempb
+% \endgroup
+% fi fi
+% END
+%
+% \output ==
+% BEGIN
+% case of \outputpenalty
+% > -10001 -> \@makecol
+% \@opcol
+% \@floatplacement
+% \@startcolumn
+% while @fcolmade = true
+% do \@opcol
+% \@startcolumn
+% od
+%
+% %%% \@specialoutput ==
+%
+% -10001 -> %% \@doclearpage ==
+% if there are no footnote insertions
+% then unbox the \writes at the head of \box255
+% and throw away the rest
+% \@deferlist :=G \@toplist * \@botlist
+% * \@deferlist
+% \@toplist :=G \@botlist :=G empty
+% \@colroom :=G \@colht
+% if \@currlist not empty
+% then LaTeX error: float(s) lost
+% \@currlist :=G empty
+% fi
+% \@makefcolumn\@deferlist
+% while @fcolmade = true
+% do \@opcol
+% \@makefcolumn\@deferlist
+% od
+% if @twocolumn
+% then
+% if @firstcolumn = true
+% then \@dbldeferlist :=G \@dbltoplist *
+% \@dbldeferlist
+% \@dbltoplist :=G empty
+% \@colht :=G \textheight
+% \begingroup
+% \@dblfloatplacement
+% \@makefcolumn\@dbldeferlist
+% while @fcolmade = true
+% do \@outputpage
+% \@makefcolumn\@dbldeferlist
+% od
+% \endgroup
+% else \vbox{} \clearpage
+% fi fi
+% else \box255 := \vbox{\box255\vfil}
+% \@makecol
+% \@opcol
+% \clearpage
+% fi
+% < -10001 ->
+% if \outputpenalty < -10003
+% then if \outputpenalty <-20000 %% true only at end
+% then \deadcycles := 0
+% fi
+% box \@holdpg :=G box255
+% else throw away box 255
+% \@pagedp :=L natural depth of box \@holdpg
+% \@pageht :=L natural ht of box \@holdpg
+% \unvbox box \@holdpg %% put text back
+% if there are footnote insertions
+% then advance \@pageht and \@pagedp and
+% reinsert footnotes fi
+% if \@currlist nonempty
+% then \@currbox :=L head of \@currlist
+% \@currlist :=G tail of \@currlist
+% if \count\@currbox > 0
+% then \@addtocurcol %% this is a float
+% else \@addmarginpar %% this is a marginal note
+% fi
+% else THIS SHOULDN'T HAPPEN
+% fi
+% if \outputpenalty < 0 %% TO PERMIT PAGE BREAK
+% then \penalty 0 fi %% IF \@addtocurcol DIDN'T
+% %% INSERT A PENALTY
+% fi
+% end case
+% \vsize :=G if \outputpenalty > -10004 then \@colroom %%normal case
+% else \maxdimen %%processing float
+% fi
+% END
+%
+% \@combinefloats ==
+% BEGIN
+% if \@toplist nonempty
+% then %%\@cfla ==
+% \@elt\BOX == BEGIN \@tempbox := \vbox{\unvbox\@tempbox
+% \box\BOX
+% \vskip \floatsep}
+% END == \@comflelt
+% \@tempbox := null
+% \@toplist
+% \@outputbox := \vbox{\unvbox\@tempbox
+% \vskip - \floatsep
+% \topfigrule
+% \vskip \textfloatsep
+% \unvbox\@outputbox }
+% \@elt == \relax
+% \@freelist :=G \@freelist * \@toplist
+% \@toplist :=G null
+% fi
+% if \@botlist nonempty
+% then %%\@cflb ==
+% \@elt == \@comflelt
+% \@tempbox := null
+% \@botlist
+% \@outputbox := \vbox{ \unvbox\@outputbox
+% \vskip \textfloatsep
+% \botfigrule
+% \unvbox\@tempbox
+% \vskip - \floatsep }
+% \@elt == \relax
+% \@freelist :=G \@freelist * \@botlist
+% \@botlist :=G null
+% fi
+% END
+%
+% \@combinedblfloats ==
+% BEGIN
+% if \@dbltoplist nonempty
+% then \@elt == \@comdblflelt
+% \@tempbox := null
+% \@dbltoplist
+% \@outputbox := \vbox to \textheight
+% {\boxmaxdepth :=L \maxdepth
+% \unvbox\@tempbox
+% \vskip - \dblfloatsep
+% \dblfigrule
+% \vskip \dbltextfloatsep
+% \box\@outputbox }
+% \@elt == \relax
+% \@freelist :=G \@freelist * \@dbltoplist
+% \@dbltoplist :=G null
+% fi
+% END
+%
+%
+% USER COMMANDS THAT CALL OR AFFECT THE OUTPUT ROUTINE
+% ----------------------------------------------------
+%
+% \newpage == BEGIN \par\vfil\penalty -10000 END
+%
+% \clearpage == BEGIN \newpage
+% \write -1{} % Part of hack to make sure no
+% \vbox{} % \write's get lost.
+% \penalty -10001
+% END
+%
+% \cleardoublepage == BEGIN \clearpage
+% if @twoside = true and c@page is even
+% then \hbox{} \newpage fi
+% END
+%
+% \twocolumn ==
+% BEGIN
+% \clearpage
+% \columnwidth :=G .5(\textwidth - \columnsep)
+% \hsize :=G \columnwidth
+% @twoside :=G true
+% @firstcolumn :=G true
+% \@dblfloatplacement
+% END
+%
+% \onecolumn ==
+% BEGIN
+% \clearpage
+% \columnwidth :=G \textwidth
+% \hsize :=G \columnwidth
+% @twoside :=G false
+% \@floatplacement
+% END
+%
+%
+% \topnewpage{BOX} : starts a new page and puts BOX in a parbox of width
+% \textwidth across the top. Useful for full-width titles for
+% double-column pages.
+% SURPRISE: The stretch from \@dbltextfloatsep will be inserted
+% between the BOX and the top of the two columns.
+%
+% \topnewpage{BOX} ==
+% BEGIN
+% \clearpage
+% Take \@currbox from \@freelist
+% \box\@currbox :=G \parbox{BOX \par
+% \vskip - \@dbltextfloatsep}
+% \count\@currbox :=G 2
+% \@dbltopnum :=G 1
+% \@dbltoproom :=G maxdimension
+% \@addtodblcol
+% \vsize :=G \@colht
+% \@colroom :=G \@colht
+% END
+
+
+% FLOAT-HANDLING MECHANISMS
+% -------------------------
+%
+% The float environment obtains an insertion number B from the
+% \@freelist (see below for a description of list manipulation), puts
+% the float into box B and sets \count B to a FLOAT SPECIFIER. For
+% a normal (not double-column) float, it then causes a page break
+% in one of the following two ways:
+% - In outer hmode: \vadjust{\penalty -10002}
+% - In vmode : \penalty -10003.
+% For a double-column float, it puts B onto the \@dbldeferlist.
+% The float specifier has two components:
+% * A PLACEMENT SPECIFICATION, describing where the float may
+% be placed.
+% * A TYPE, which is a power of two--e.g., figures might be
+% type 1 floats, tables type 2 floats, programs type 4 floats, etc.
+% The float specifier is encoded as follows, where bit 0 is the least
+% significant bit.
+%
+% Bit Meaning
+% --- -------
+% 0 1 iff the float may go where it appears in the text.
+% 1 1 iff the float may go on the top of a page.
+% 2 1 iff the float may go on the bottom of a page.
+% 3 1 iff the float may go on a float page.
+% 4 always 1
+% 5 1 iff a type 1 float
+% 6 1 iff a type 2 float
+% etc.
+%
+% A negative float specifier is used to indicate a marginal note.
+%
+% MACROS AND DATA STRUCTURES FOR PROCESSING FLOATS
+% ------------------------------------------------
+%
+% A FLOAT LIST consisting of the floats in boxes \boxa ... \boxN has the form:
+% \@elt \boxa ... \@elt \boxN
+% where \boxI is defined by
+% \newinsert\boxI
+% Normally, \@elt is \let to \relax. A test can be performed on the entire
+% float list by locally \def'ing \@elt appropriately and executing
+% the list. This is a lot more efficient than looping through the list.
+%
+% The following macros are used for manipulating float lists.
+%
+% \@next \CS \LIST {NONEMPTY}{EMPTY} == %% NOTE: ASSUME \@elt = \relax
+% BEGIN assume that \LIST == \@elt \B1 ... \@elt \Bn
+% if n = 0
+% then EMPTY
+% else \CS :=L \B1
+% \LIST :=G \@elt \B2 ... \@elt \Bn
+% NONEMPTY
+% fi
+% END
+%
+%
+% \@bitor\NUM\LIST : Globally sets switch @test to the disjunction for all I
+% of bit log2 \NUM of the float specifiers of all the floats in
+% \LIST. I.e., @test is set to true iff there is at least one
+% float in \LIST having bit log2 \NUM of its float specifier
+% equal to 1.
+%
+% Note: log2 [(\count I)/32] is the bit number corresponding to the
+% type of float I. To see if there is any float in \LIST having
+% the same type as float I, you run \@bitor with \NUM = [(\count I)/32] * 32.
+%
+% \@bitor\NUM\LIST ==
+% BEGIN
+% @test :=G false
+% { \@elt \CTR == if \count\CTR / \NUM is odd
+% then @test := true fi
+% \LIST
+% }
+% END
+%
+%
+% \@cons\LIST\NUM : Globally sets \LIST := \LIST * \@elt \NUM
+%
+% \@cons\LIST\NUM ==
+% BEGIN { \@elt == \relax
+% \LIST :=G \LIST \@elt \NUM
+% }
+%
+% BOX LISTS FOR FLOAT-PLACEMENT ALGORITHMS
+%
+% \@freelist : List of empty boxes for placing new floats.
+% \@toplist : List of floats to go at top of current column.
+% \@midlist : List of floats in middle of current column.
+% \@botlist : List of floats to go at bottom of current column.
+% \@deferlist : List of floats to go after current column.
+% \@dbltoplist : List of double-col. floats to go at top of current page.
+% \@dbldeferlist : List of double-column floats to go on subsequent pages.
+%
+% FLOAT-PLACEMENT ALGORITHMS
+%
+% \@tryfcolumn \FLIST ==
+% BEGIN
+% @fcolmade :=G false
+% \@trylist :=G \FLIST
+% \@failedlist :=G empty
+% \begingroup
+% \@elt == \@xtryfc
+% \@trylist
+% \endgroup
+% if @fcolmade = true
+% then \@vtryfc \FLIST
+% fi
+% END
+%
+% \@vtryfc ==
+% BEGIN
+% \@outputbox :=G \vbox{}
+% \@elt\BOX == BEGIN
+% \@outputbox :=L \vbox{ \unvbox \@outputbox
+% \vskip \@fpsep
+% \box\BOX }
+% END == \@wtryfc
+% \@flsucceed
+% \@outputbox :=G \vbox to \@colht{ \vskip \@fptop
+% \vskip -\@fpsep
+% \unvbox \@outputbox
+% \vskip \@fpbot }
+% \@elt == \relax
+% \@freelist :=G \@freelist * \@flsucceed
+% \FLIST :=G \@failedlist * \@flfail
+% END
+%
+% \@xtryfc \BOX ==
+% BEGIN
+% remove first element from \@trylist
+% \@currtype := (\count\BOX / 32) * 32
+% \@bitor \@currtype \@failedlist % @test := true if type on list
+% \@testfp \BOX % @test := true if no p-option
+% if ht of \BOX > \@colht
+% then @test :=G true
+% fi
+% if @test = true
+% then add \BOX to \@failedlist
+% else \@ytryfc \BOX
+% fi
+% END
+%
+% \@ytryfc ==
+% BEGIN
+% \begingroup
+% \@flsucceed :=G \@elt\BOX
+% \@flfail :=G empty
+% \@tempdima := \ht\BOX
+% \@elt == \@ztryfc
+% \@trylist
+% if \@tempdima > \@fpmin
+% then @fcolmade :=G true
+% else add \BOX to \@failedlist
+% fi
+% \endgroup
+% if @fcolmade = true then \@elt == \@gobble fi
+% END
+%
+% \@ztryfc \BOX ==
+% BEGIN
+% \@tempcnta := (\count\BOX / 32) * 32
+% \@bitor \@tempcnta {\@failedlist \@flfail} % @test := true if on a list
+% \@testfp \BOX % @test := true if not p-option
+% \@tempdimb := \@tempdima + ht of \BOX + \@fpsep
+% if \@tempdimb > \@colht
+% then @test :=G true
+% fi
+% if @test = true
+% then add \BOX to \@flfail
+% else add \BOX to \@flsucceed
+% \@tempdima := \@tempdimb
+% fi
+% END
+%
+% \@testfp \BOX == BEGIN if bit 3 of \count\BOX = 0
+% then @test :=G true fi
+% END
+%
+% \@makefcolumn \FLIST ==
+% BEGIN
+% \begingroup
+% \@fpmin =:L 0
+% \@testfp == \@gobble
+% \@tryfcolumn \FLIST
+% \endgroup
+% END
+%
+% \@addtobot : Tries to put insert \@currbox on \@botlist. Called only when:
+% * \ht BOX + \@maxsep < \@colroom
+% * type of \@currbox not on \@deferlist
+% * \@colnum > 0
+% * @insert = false
+% If it succeeds, then:
+% * sets @insert true
+% * decrements \@botroom by \ht BOX
+% * decrements \@botnum and \@colnum by 1
+% * decrements \@colroom by \ht BOX + either \floatsep
+% or \textfloatsep, as appropriate.
+% * sets \maxdepth to 0pt
+%
+% \@addtotoporbot : Tries to put insert \@currbox on \@toplist or \@botlist.
+% Called only under same conditions as \@addtobot.
+% If it succeeds, then:
+% * sets @insert true
+% * decrements either \@toproom or \@botroom by \ht BOX
+% * decrements \@colnum and either \@topnum or
+% \@botnum by 1
+% * decrements \@colroom by \ht BOX + either \floatsep
+% or \textfloatsep, as appropriate.
+%
+% \@addtocurcol : Tries to add \@currbox to current column, setting @insert
+% true if it succeeds, false otherwise. It will add
+% \@currbox to top only if bit 0 of \count \@currbox is 0, and
+% to the bottom only if bit 0 = 0 or an earlier float of
+% the same type is put on the bottom.
+% If the float is put in the text, then \penalty 0 is put
+% right after the float, before the following \vskip, and
+% \outputpenalty :=L 0.
+%
+% \@addtonextcol : Tries to add \@currbox to the next column, setting @insert
+% true if it succeeds, false otherwise.
+%
+% \@addtodblcol : Tries to add \@currbox to the next double-column page,
+% adding it to \@dbltoplist if it succeeds and \@dbldeferlist
+% if it fails.
+%
+% \@addtobot ==
+% BEGIN
+% if bit 2 of \count \@currbox = 1
+% then if \@botnum > 0
+% then if \@botroom > \ht \@currbox
+% then \@botnum :=G \botnum - 1
+% \@colnum :=G \@colnum - 1
+% \@tempdima :=L - \ht\@currbox -
+% if \@botlist empty
+% then \textfloatsep
+% else \floatsep
+% fi
+% \@botroom :=G \@botroom + \@tempdima
+% \@colroom :=G \@colroom + \@tempdima
+% add \@currbox to \@botlist
+% \maxdepth :=G 0pt
+% @insert :=L true
+% fi fi fi
+% END
+%
+% \@addtotoporbot ==
+% BEGIN
+% if bit 1 of \count \@currbox = 1
+% then if \@topnum > 0
+% then if \@toproom > \ht \@currbox
+% then if \@currtype not on \@midlist or \@botlist
+% then \@topnum :=G \topnum - 1
+% \@colnum :=G \@colnum - 1
+% \@tempdima :=L - \ht\@currbox -
+% if \@toplist empty
+% then \textfloatsep
+% else \floatsep
+% fi
+% \@toproom :=G \@toproom + \@tempdima
+% \@colroom :=G \@colroom + \@tempdima
+% add \@currbox to \@toplist
+% @insert :=L true
+% fi fi fi fi
+% if @insert = false then \@addtobot fi
+% END
+%
+% \@addtocurcol ==
+% BEGIN
+% @insert :=L false
+% \@textmin := \textfraction\@colht %% added 27 Sep 85
+% if \@colroom > \ht \@currbox + max(\@pageht+\@pagedp, \@textmin)
+% + \@maxsep
+% then if \@colnum > 0
+% then \@currtype := type of \@currbox
+% if \@currtype not on \@deferlist
+% then if \@currtype on \@botlist
+% then \@addtobot
+% else if bit0 of \count \@currbox = 1
+% then decrement \@colnum
+% put \@currbox on \@midlist
+% add \@currbox + space
+% + a \penalty 0 to text
+% \outputpenalty :=L 0
+% @insert := true
+% else \@addtotoporbot
+% fi fi fi fi fi
+% if @insert = false
+% then add \@currbox to \@deferlist
+% fi
+% END
+%
+% \@addtonextcol ==
+% BEGIN
+% @insert :=L false
+% \@textmin := \textfraction\@colht %% added 27 Sep 85
+% if \@colroom > \ht \@currbox + \@textmin + \@maxsep
+% then if \@colnum > 0
+% \@currtype := type of \@currbox
+% then if \@currtype not on \@deferlist
+% then \@addtotoporbot
+% fi fi fi
+% if @insert = false
+% then add \@currbox to \@deferlist
+% fi
+% END
+%
+% \@addtodblcol ==
+% BEGIN
+% @insert :=L false
+% if bit 1 of \count \@currbox = 1
+% then if \@dbltopnum > 0
+% then if \@dbltoproom > \ht \@currbox
+% then if type of \@currbox not on \@dbldeferlist
+% then \@dbltopnum :=G \@dbltopnum - 1
+% \@tempdima := -\ht\@currbox -
+% if \@dbltoplist empty
+% then \dbltextfloatsep
+% else \dblfloatsep
+% fi
+% \@dbltoproom :=G \@dbltoproom+\@tempdima
+% \@colht :=G \@colht+\@tempdima
+% add \@currbox to \@dbltoplist
+% @insert :=L true
+% fi fi fi fi
+% if @insert = false then add \@currbox to \@dbldeferlist
+% END
+%
+% \@addmarginpar ==
+% BEGIN
+% if \@currlist nonempty
+% then remove \@marbox from \@currlist %% NOTE: \@currbox = left box
+% add \@marbox and \@currbox to \@freelist
+% else LaTeX error: ? %% shouldn't happen
+% fi
+% \@tempcnta := 1 %% 1 = right, -1 = left
+% if @twocolumn = true
+% then if @firstcolumn = true
+% then \@tempcnta := -1
+% fi
+% else if @mparswitch = true
+% then if count0 odd
+% else \@tempcnta := -1
+% fi
+% fi
+% if @reversemargin = true
+% then \@tempcnta := -\@tempcnta
+% fi
+% fi
+% if \@tempcnta < 0 then \box\@marbox :=G \box\@currbox fi
+% \@tempdima :=L maximum(\@mparbottom - \@pageht + ht of \@marbox, 0)
+% if \@tempdima > 0 then LaTeX warning: 'marginpar moved' fi
+% \@mparbottom :=G \@pageht + \@tempdima + depth of \@marbox
+% + \marginparpush
+% \@tempdima :=L \@tempdima - ht of \@marbox
+% height of \@marbox :=G depth of \@marbox :=G 0
+% \vskip -\@pagedp
+% \vskip \@tempdima
+% \nointerlineskip
+% \hbox{ if @tempcnta > 0 then \hskip \columnwidth
+% \hskip \marginparsep
+% else \hskip -\marginparsep
+% \hskip -\marginparwidth
+% fi
+% \box\@marbox
+% \hss
+% }
+% \vskip -\@tempdima
+% \nointerlineskip
+% \hbox{\vrule height 0 width 0 depth \@pagedp}
+% END
+
+
+\maxdeadcycles = 100 % floats and \marginpar's add a lot of dead cycles
+
+\let\@elt\relax
+
+\def\@next#1#2#3#4{\ifx#2\@empty #4\else
+ \expandafter\@xnext #2\@@#1#2#3\fi}
+
+\def\@xnext \@elt #1#2\@@#3#4{\def#3{#1}\gdef#4{#2}}
+
+\newif\if@test
+
+\def\@bitor#1#2{\global\@testfalse {\let\@elt\@xbitor
+ \@tempcnta #1\relax #2}}
+
+\def\@xbitor #1{\@tempcntb \count#1\divide\@tempcntb\@tempcnta
+ \ifodd\@tempcntb \global\@testtrue\fi}
+
+% DEFINITION OF FLOAT BOXES:
+\newinsert\bx@A
+\newinsert\bx@B
+\newinsert\bx@C
+\newinsert\bx@D
+\newinsert\bx@E
+\newinsert\bx@F
+\newinsert\bx@G
+\newinsert\bx@H
+\newinsert\bx@I
+\newinsert\bx@J
+\newinsert\bx@K
+\newinsert\bx@L
+\newinsert\bx@M
+\newinsert\bx@N
+\newinsert\bx@O
+\newinsert\bx@P
+\newinsert\bx@Q
+\newinsert\bx@R
+
+
+
+\gdef\@freelist{\@elt\bx@A\@elt\bx@B\@elt\bx@C\@elt\bx@D\@elt\bx@E
+ \@elt\bx@F\@elt\bx@G\@elt\bx@H\@elt\bx@I\@elt\bx@J
+ \@elt\bx@K\@elt\bx@L\@elt\bx@M\@elt\bx@N
+ \@elt\bx@O\@elt\bx@P\@elt\bx@Q\@elt\bx@R}
+
+\gdef\@toplist{}
+\gdef\@botlist{}
+\gdef\@midlist{}
+\gdef\@currlist{}
+\gdef\@deferlist{}
+\gdef\@dbltoplist{}
+\gdef\@dbldeferlist{}
+
+% PAGE LAYOUT PARAMETERS
+\newdimen\topmargin
+\newdimen\oddsidemargin
+\newdimen\evensidemargin
+\let\@themargin=\oddsidemargin
+\newdimen\headheight
+\newdimen\headsep
+\newdimen\footheight
+\newdimen\footskip
+\newdimen\textheight
+\newdimen\textwidth
+\newdimen\columnwidth
+\newdimen\columnsep
+\newdimen\columnseprule
+\newdimen\@maxdepth \@maxdepth = \maxdepth
+\newdimen\marginparwidth
+\newdimen\marginparsep
+\newdimen\marginparpush
+
+% PAGE STYLE PARAMETERS
+\newskip\floatsep
+\newskip\textfloatsep
+\newskip\intextsep
+\newdimen\@maxsep
+\newskip\dblfloatsep
+\newskip\dbltextfloatsep
+\newdimen\@dblmaxsep
+\newskip\@fptop
+\newskip\@fpsep
+\newskip\@fpbot
+\newskip\@dblfptop
+\newskip\@dblfpsep
+\newskip\@dblfpbot
+\let\topfigrule=\relax
+\let\botfigrule=\relax
+\let\dblfigrule=\relax
+
+% INTERNAL REGISTERS
+
+\newcount\@topnum
+\newdimen\@toproom
+\newcount\@dbltopnum
+\newdimen\@dbltoproom
+\newcount\@botnum
+\newdimen\@botroom
+\newcount\@colnum
+\newdimen\@textmin
+\newdimen\@fpmin
+\newdimen\@colht
+\newdimen\@colroom
+\newdimen\@pageht
+\newdimen\@pagedp
+\newdimen\@mparbottom \@mparbottom\z@
+\newcount\@currtype
+\newbox\@outputbox
+\newbox\@leftcolumn
+\newbox\@holdpg
+
+\newif\if@insert
+\newif\if@fcolmade
+\newif\if@specialpage \@specialpagefalse
+\newif\if@twoside \@twosidefalse
+\newif\if@firstcolumn \@firstcolumntrue
+\newif\if@twocolumn \@twocolumnfalse
+\newif\if@reversemargin \@reversemarginfalse
+\newif\if@mparswitch \@mparswitchfalse
+
+\def\@thehead{\@oddhead} % initialization
+\def\@thefoot{\@oddfoot}
+
+\def\newpage{\par\vfil\penalty -\@M}
+
+\def\clearpage{\newpage \write\m@ne{}\vbox{}\penalty -\@Mi}
+
+\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
+ \hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
+
+\def\twocolumn{\clearpage \global\columnwidth\textwidth
+ \global\advance\columnwidth -\columnsep \global\divide\columnwidth\tw@
+ \global\hsize\columnwidth \global\linewidth\columnwidth
+ \global\@twocolumntrue \global\@firstcolumntrue
+ \@dblfloatplacement\@ifnextchar[{\@topnewpage}{}}
+
+\def\onecolumn{\clearpage\global\columnwidth\textwidth
+ \global\hsize\columnwidth \global\linewidth\columnwidth
+ \global\@twocolumnfalse \@floatplacement}
+
+\long\def\@topnewpage[#1]{\@next\@currbox\@freelist{}{}
+ \global\setbox\@currbox\vbox{\hsize\textwidth \@parboxrestore
+ #1\par\vskip -\dbltextfloatsep}\global\count\@currbox\tw@
+ \global\@dbltopnum\@ne \global\@dbltoproom\maxdimen\@addtodblcol
+ \global\vsize\@colht \global\@colroom\@colht}
+
+\output{\ifnum\outputpenalty <-\@M\@specialoutput\else
+ \@makecol\@opcol\@floatplacement\@startcolumn
+ \@whilesw\if@fcolmade \fi{\@opcol\@startcolumn}\fi
+ \global\vsize\ifnum\outputpenalty >-\@Miv \@colroom
+ \else \maxdimen\fi}
+
+\def\@specialoutput{\ifnum\outputpenalty > -\@Mii
+ \@doclearpage
+ \else
+ \ifnum \outputpenalty <-\@Miii
+ \ifnum\outputpenalty<-\@MM \deadcycles\z@\fi
+ \global\setbox\@holdpg\vbox{\unvbox\@cclv}
+ \else \setbox\@tempboxa\box\@cclv
+ \@pagedp\dp\@holdpg \@pageht\ht\@holdpg
+ \unvbox\@holdpg
+ \ifvoid\footins\else\advance\@pageht\ht\footins
+ \advance\@pageht\skip\footins \advance\@pagedp\dp\footins
+ \insert\footins{\unvbox\footins}\fi
+ \@next\@currbox\@currlist{\ifnum\count\@currbox >\z@
+ \@addtocurcol\else\@addmarginpar\fi}\@latexbug
+ \ifnum \outputpenalty <\z@ \penalty \z@ \fi
+ \fi\fi}
+
+\def\@doclearpage{\ifvoid\footins
+ \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
+ \setbox\@tempboxa\box\@cclv
+ \xdef\@deferlist{\@toplist\@botlist
+ \@deferlist}\gdef\@toplist{}\gdef\@botlist{}\global\@colroom\@colht
+ \ifx\@currlist
+ \@empty\else\@latexerr{Float(s)
+ lost}\@ehb\gdef\@currlist{}\fi
+ \@makefcolumn\@deferlist
+ \@whilesw\if@fcolmade \fi{\@opcol
+ \@makefcolumn\@deferlist}\if@twocolumn
+ \if@firstcolumn
+ \xdef\@dbldeferlist{\@dbltoplist
+ \@dbldeferlist}\gdef\@dbltoplist{}\global\@colht\textheight
+ \begingroup \@dblfloatplacement \@makefcolumn\@dbldeferlist
+ \@whilesw\if@fcolmade \fi{\@outputpage
+ \@makefcolumn\@dbldeferlist}\endgroup
+ \else \vbox{}\clearpage
+ \fi\fi
+ \else\setbox\@cclv\vbox{\box\@cclv\vfil}\@makecol\@opcol
+ \clearpage
+ \fi}
+
+\def\@opcol{\global\@mparbottom\z@\if@twocolumn\@outputdblcol\else
+ \@outputpage \global\@colht\textheight \fi}
+
+\def\@outputdblcol{\if@firstcolumn \global\@firstcolumnfalse
+ \global\setbox\@leftcolumn\box\@outputbox
+ \else \global\@firstcolumntrue
+ \setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
+ {\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil
+ \hbox to\columnwidth{\box\@outputbox \hss}}}\@combinedblfloats
+ \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+ \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup
+ \fi}
+
+\def\@makecol{\ifvoid\footins \setbox\@outputbox\box\@cclv
+ \else\setbox\@outputbox
+ \vbox{\unvbox\@cclv\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\unvbox\@outputbox \@textbottom}\global\maxdepth\@maxdepth}
+
+\let\@texttop=\relax
+\let\@textbottom=\relax
+
+\def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+ \fi\fi
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth{\@thehead}}
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+
+
+\def\@combinefloats{\ifx\@toplist\@empty\else\@cfla\fi
+ \ifx\@botlist\@empty\else\@cflb\fi}
+
+\def\@cfla{\let\@elt\@comflelt \setbox\@tempboxa\vbox{}\@toplist
+ \setbox\@outputbox\vbox{\unvbox\@tempboxa\vskip-\floatsep
+ \topfigrule\vskip\textfloatsep \unvbox\@outputbox}\let\@elt\relax
+ \xdef\@freelist{\@freelist\@toplist}\gdef\@toplist{}}
+
+\def\@cflb{\let\@elt\@comflelt \setbox\@tempboxa\vbox{}\@botlist
+ \setbox\@outputbox\vbox{\unvbox\@outputbox \vskip\textfloatsep
+ \botfigrule\unvbox\@tempboxa \vskip-\floatsep}\let\@elt\relax
+ \xdef\@freelist{\@freelist\@botlist}\gdef\@botlist{}}
+
+\def\@comflelt#1{\setbox\@tempboxa
+ \vbox{\unvbox\@tempboxa\box #1\vskip\floatsep}}
+
+\def\@combinedblfloats{\ifx\@dbltoplist\@empty\else
+ \let\@elt\@comdblflelt \setbox\@tempboxa\vbox{}\@dbltoplist
+ \setbox\@outputbox\vbox to\textheight
+ {\boxmaxdepth\maxdepth
+ \unvbox\@tempboxa\vskip-\dblfloatsep
+ \dblfigrule\vskip\dbltextfloatsep \box\@outputbox}\let\@elt\relax
+ \xdef\@freelist{\@freelist\@dbltoplist}\gdef\@dbltoplist{}\fi}
+
+
+\def\@comdblflelt#1{\setbox\@tempboxa
+ \vbox{\unvbox\@tempboxa\box #1\vskip\dblfloatsep}}
+
+
+\def\@startcolumn{\global\@colroom\@colht
+ \ifx\@deferlist\@empty\global\@fcolmadefalse\else\@xstartcol\fi}
+
+\def\@xstartcol{\@tryfcolumn\@deferlist \if@fcolmade\else
+ \begingroup\edef\@tempb{\@deferlist}\gdef\@deferlist{}\let\@elt\@scolelt
+ \@tempb\endgroup\fi}
+
+\def\@scolelt#1{\def\@currbox{#1}\@addtonextcol}
+
+\def\@startdblcolumn{\global\@colht\textheight
+ \@tryfcolumn\@dbldeferlist \if@fcolmade\else
+ \begingroup
+ \edef\@tempb{\@dbldeferlist}\gdef\@dbldeferlist{}\let\@elt\@sdblcolelt
+ \@tempb\endgroup\fi}
+
+\def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol}
+
+\def\@tryfcolumn #1{\global\@fcolmadefalse \xdef\@trylist{#1}\xdef\@failedlist
+ {}\begingroup \let\@elt\@xtryfc \@trylist \endgroup
+ \if@fcolmade \@vtryfc #1\fi}
+
+\def\@vtryfc #1{\global\setbox\@outputbox\vbox{}\let\@elt\@wtryfc
+ \@flsucceed \global\setbox\@outputbox\vbox to\@colht{\vskip \@fptop
+ \vskip -\@fpsep \unvbox \@outputbox \vskip \@fpbot}\let\@elt\relax
+ \xdef #1{\@failedlist\@flfail}\xdef\@freelist{\@freelist\@flsucceed}}
+
+\def\@wtryfc #1{\global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \vskip\@fpsep\box #1}}
+
+
+\def\@xtryfc #1{\@next\@tempa\@trylist{}{}\@currtype
+ \count #1\divide\@currtype\@xxxii \multiply\@currtype\@xxxii
+ \@bitor \@currtype \@failedlist \@testfp #1\ifdim
+ \ht #1>\@colht \global\@testtrue\fi
+ \if@test \@cons\@failedlist #1\else \@ytryfc #1\fi}
+
+\def\@ytryfc #1{\begingroup \gdef\@flsucceed{\@elt #1}\gdef\@flfail
+ {}\@tempdima\ht #1\let\@elt\@ztryfc \@trylist \ifdim \@tempdima >\@fpmin
+ \global\@fcolmadetrue \else \@cons\@failedlist #1\fi
+ \endgroup \if@fcolmade \let\@elt\@gobble \fi}
+
+\def\@ztryfc #1{\@tempcnta\count #1\divide\@tempcnta\@xxxii
+ \multiply\@tempcnta\@xxxii \@bitor \@tempcnta {\@failedlist
+ \@flfail}\@testfp #1\@tempdimb\@tempdima \advance\@tempdimb\ht #1\advance
+ \@tempdimb\@fpsep \ifdim \@tempdimb >\@colht \global\@testtrue\fi
+ \if@test \@cons\@flfail #1\else \@cons\@flsucceed #1\@tempdima\@tempdimb
+ \fi}
+
+\def\@testfp #1{\@tempcnta\count #1\divide\@tempcnta 8\relax
+ \ifodd\@tempcnta \else \global\@testtrue\fi}
+
+\def\@makefcolumn #1{\begingroup \@fpmin\z@ \let\@testfp\@gobble
+ \@tryfcolumn #1\endgroup}
+
+\def\@addtobot{\@tempcnta\count\@currbox\divide\@tempcnta4 \ifodd\@tempcnta
+ \ifnum \@botnum >\z@ \ifdim \@botroom >\ht\@currbox
+ \global\advance\@botnum\m@ne
+ \global\advance\@colnum\m@ne
+ \@tempdima -\ht\@currbox
+ \advance\@tempdima -\ifx\@botlist\@empty \textfloatsep
+ \else\floatsep\fi
+ \global\advance\@botroom \@tempdima
+ \global\advance\@colroom \@tempdima
+ \@cons\@botlist\@currbox \global\maxdepth\z@
+ \@inserttrue\fi\fi\fi}
+
+\def\@addtotoporbot{\@tempcnta\count\@currbox \divide\@tempcnta\tw@
+ \ifodd\@tempcnta \ifnum \@topnum >\z@ \ifdim\@toproom >\ht\@currbox
+ \@bitor\@currtype{\@midlist\@botlist}\if@test\else
+ \global\advance\@topnum\m@ne
+ \global\advance\@colnum\m@ne
+ \@tempdima-\ht\@currbox
+ \advance\@tempdima
+ -\ifx\@toplist\@empty \textfloatsep \else\floatsep\fi
+ \global\advance\@toproom \@tempdima
+ \global\advance\@colroom \@tempdima
+ \@cons\@toplist\@currbox
+ \@inserttrue
+\fi\fi\fi\fi
+\if@insert\else\@addtobot \fi}
+
+\def\@addtonextcol{\@insertfalse \@textmin \textfraction\@colht
+ \@tempdima\ht\@currbox
+ \advance\@tempdima\@textmin\advance\@tempdima\@maxsep
+ \ifdim\@colroom >\@tempdima
+ \ifnum\@colnum >\z@
+ \@currtype\count\@currbox \divide\@currtype\@xxxii
+ \multiply\@currtype\@xxxii
+ \@bitor\@currtype\@deferlist
+ \if@test\else
+ \@addtotoporbot
+ \fi\fi\fi
+ \if@insert\else \@cons\@deferlist\@currbox\fi}
+
+\def\@addtodblcol{\@insertfalse
+ \@tempcnta\count\@currbox \divide\@tempcnta\tw@
+ \ifodd\@tempcnta
+ \ifnum\@dbltopnum >\z@
+ \ifdim\@dbltoproom >\ht\@currbox
+ \@currtype\count\@currbox \divide\@currtype\@xxxii
+ \multiply\@currtype\@xxxii
+ \@bitor\@currtype\@dbldeferlist
+ \if@test\else
+ \global\advance\@dbltopnum\m@ne
+ \@tempdima -\ht\@currbox
+ \advance\@tempdima -\ifx\@dbltoplist\@empty
+ \dbltextfloatsep\else\dblfloatsep\fi
+ \global\advance\@dbltoproom \@tempdima
+ \global\advance\@colht \@tempdima
+ \@cons\@dbltoplist\@currbox
+ \@inserttrue
+ \fi\fi\fi\fi
+ \if@insert\else \@cons\@dbldeferlist\@currbox \fi}
+
+\def\@addtocurcol{\@insertfalse \@textmin \textfraction\@colht
+ \@tempdima\@pageht \advance\@tempdima\@pagedp
+ \ifdim \@textmin > \@tempdima \@tempdima\@textmin \fi
+ \advance\@tempdima\ht\@currbox \advance\@tempdima\@maxsep
+ \ifdim\@colroom >\@tempdima
+ \ifnum\@colnum >\z@
+ \@currtype\count\@currbox \divide\@currtype\@xxxii
+ \multiply\@currtype\@xxxii
+ \@bitor\@currtype\@deferlist
+ \if@test\else
+ \@bitor\@currtype\@botlist
+ \if@test \@addtobot \else
+ \ifodd\count\@currbox
+ \global\advance\@colnum\m@ne
+ \@cons\@midlist\@currbox
+ \vskip\intextsep \box\@currbox
+ \penalty\z@ \vskip\intextsep
+ \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+ \outputpenalty\z@
+ \@inserttrue
+ \else \@addtotoporbot
+ \fi\fi\fi\fi\fi
+ \if@insert\else\@cons\@deferlist\@currbox\fi}
+
+\def\@addmarginpar{\@next\@marbox\@currlist{\@cons\@freelist\@marbox
+ \@cons\@freelist\@currbox}\@latexbug\@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \ifnum\@tempcnta <\z@ \global\setbox\@marbox\box\@currbox \fi
+ \@tempdima\@mparbottom \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox \ifdim\@tempdima >\z@
+ \@warning{Marginpar on page \thepage\space moved}\else\@tempdima\z@ \fi
+ \global\@mparbottom\@pageht \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\ht\@marbox\z@ \global\dp\@marbox\z@
+ \vskip -\@pagedp \vskip\@tempdima\nointerlineskip
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\marginparsep
+ \else \hskip -\marginparsep \hskip -\marginparwidth \fi
+ \box\@marbox \hss}
+ \vskip -\@tempdima
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}}
+
+ \message{debugging}
+% ****************************************
+% * DEBUGGING AND TEST INITIALIZATIONS *
+% ****************************************
+%
+% DEBUGGING
+\def\showoverfull{\tracingonline=1}
+\tracingstats1 % SHOWS HOW MUCH STUFF TeX HAS USED
+\def\showoutput{\tracingonline1\tracingoutput1
+ \showboxbreadth99999\showboxdepth99999\errorstopmode}
+\def\makeatletter{\catcode`\@=11\relax}
+\def\makeatother{\catcode`\@=12\relax}
+
+\newcount\@lowpenalty
+\newcount\@medpenalty
+\newcount\@highpenalty
+
+% LIST
+
+% ENUMERATION
+
+% ITEMIZE
+
+% ARRAY AND TABULAR
+
+% THE PICTURE ENVIRONMENT
+
+\unitlength = 1pt
+\fboxsep = 3pt
+\fboxrule = .4pt
+
+%% FOOTNOTES
+
+%\def\footnoterule{} % INITIALIZED BY PLAIN
+%\skip\footins{} % INITIALIZED BY PLAIN
+%\interfootnotelinepenalty % INITIALIZED BY PLAIN
+
+\@maxdepth = \maxdepth
+
+% \vsize initialized because a \clearpage with \vsize < \topskip
+% causes trouble.
+% \@colroom and \@colht also initialized because \vsize may be
+% set to them if a \clearpage is done before the \begin{document}
+
+\vsize = 1000pt
+\@colroom = \vsize
+\@colht = \vsize
+
+
diff --git a/macros/latex209/contrib/ps-latex/ps-lfonts.tex b/macros/latex209/contrib/ps-latex/ps-lfonts.tex
new file mode 100644
index 0000000000..3af0671a8b
--- /dev/null
+++ b/macros/latex209/contrib/ps-latex/ps-lfonts.tex
@@ -0,0 +1,824 @@
+% File PS-LFONTS - Version of 18 December 1985
+%
+% FONT CONVENTIONS
+%
+% A TYPESTYLE COMMAND is something like \it that defines a type style.
+% Each style command \xx is defined to be \protect\pxx, where
+% \pxx is defined to choose the correct font for the current size.
+% This allows style commands to appear in 'unsafe' arguments where
+% protection is required.
+%
+% A SIZE COMMAND is something like \normalsize that defines a type size.
+% It is defined by the document style. However, \normalsize is handled
+% somewhat differently because it is called so often--e.g., on every
+% page by the output routine. The document style defines \@normalsize
+% instead of \normalsize.
+%
+% A ONE-SIZE typestyle is one that exists only in the \normalsize size.
+%
+% A FONT-SIZE COMMAND is one that defines \textfont, \scriptfont and
+% \scriptscriptfont for the font families corresponding to preloaded fonts,
+% as well as the typestyle commands for the preloaded fonts. Each
+% font-size command has an associated @fontsize command, having the same
+% name except for an '@' at the front. All font-size commands are defined
+% in LFONTS. The naming convention is that a fifteenpt font has a font-size
+% name \xvpt, and so on.
+%
+% Each size command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% which does the following.
+% 0. Executes \@nomath\SIZE to issue warning if in math mode.
+% 1. \let \@currsize = \SIZE
+% 2. Sets \strutbox to a strut of height .7 * BASELINESKIP and
+% depth .3 * BASELINESKIP
+% 3. Sets \baselineskip to \baselinestretch * BASELINESKIP
+% and
+% 4. Calls \FONTSIZE
+% 5. Executes the \@FONTSIZE command.
+% It should then define all the typestyle commands not defined by the font-size
+% command, except for the one-size type styles. A typestyle command for which
+% the corresponding font exists but is not preloaded is defined to expand to a
+% \@getfont command. A typestyle whose font does not exist is defined to
+% expand to a \@subfont command.
+%
+% A one-size typestyle whose font is not preloaded is defined to expand to
+% a \@onesizefont command.
+%
+% \em is defined to be \it inside an unslanted style and \rm inside a
+% slanted style. An \em command in a section title will produce a \pem
+% command in the table of contents.
+%
+
+\def\em{\protect\pem{}}
+\def\pem{\ifdim \fontdimen\@ne\font >\z@ \rm \else \it \fi}
+
+\def\normalsize{\ifx\@currsize\normalsize \rm \else \@normalsize\fi}
+
+% \load{SIZE}{STYLE} : Solves anomaly of loaded-on-demand font
+% used for first time in math mode. Give this command outside math
+% mode, before formula using it for first time.
+\def\load#1#2{\let\@tempa\@currsize \let\@currsize\relax #1#2\@tempa}
+
+% \newfont{\CMD}{FONT} defines \CMD to be the font FONT.
+% It is equivalent to \font \CMD = FONT
+% \symbol{NUM} == \char NUM
+
+\def\newfont#1#2{\@ifdefinable #1{\font #1=#2\relax}}
+\def\symbol#1{\char #1\relax}
+
+
+
+% \@getfont \STYLE \FAM \@FONTSIZE{LOADING.INFO}
+% \STYLE = style command
+% \FAM = a control sequence defined by \newfam\FAM
+% \@FONTSIZE = the @fontsize command for the current size.
+% LOADING.INFO = information needed to load the font--e.g.,
+% cmtti10 \magstep 2
+% Does the following, where \FONTNAME denotes a new unique, untypeable
+% font name:
+% 1. Executes \font \FONTNAME = LOADING.INFO
+% 2. Appends '\textfont FAM \FONTNAME \def\STYLE{\fam \FAM \FONTNAME}'
+% to the definition of \@FONTSIZE.
+% 3. Executes \@FONTSIZE \STYLE.
+%
+% \@nohyphens\STYLE\@FONTSIZE
+% Used right after \@getfont to set \hyphenchar of the new font to -1,
+% thereby prohibiting hyphenation. It is used with \tt fonts.
+% (\@nohyphens was added on 12/18/85)
+%
+% \@subfont \STYLE \REPSTYLE
+% \STYLE, \REPSTYLE = type style commands.
+% Types warning message and defines uses \REPSTYLE.
+%
+% \@onesizefont \STYLE {LOADING.INFO}
+% Defines \STYLE to be a typestyle that exists only for the \normalsize
+% size. It produces the font specified by LOADING.INFO
+%
+% \@addfontinfo\@FONTSIZE{DEFS}
+% Expands DEFS and adds to the definition of \@FONTSIZE. Items that should
+% not be expanded should be protected with \@prtct---except no protection
+% is needed for '\def\foo', only for the contents of the definition.
+%
+% \@nomath\CS : Types a warning '\CS used in math mode' if encountered
+% in math mode.
+
+% Remove \outer from definition of \newfam
+\def\newfam{\alloc@8\fam\chardef\sixt@@n}
+
+\def\@setsize#1#2#3#4{\@nomath#1\let\@currsize#1\baselineskip
+ #2\setbox\strutbox\hbox{\vrule height.7\baselineskip
+ depth.3\baselineskip width\z@}\baselineskip\baselinestretch\baselineskip
+ \normalbaselineskip\baselineskip#3#4}
+
+\newif\if@bold
+
+\let\@prtct=\relax
+
+\def\@addfontinfo#1#2{{\def\@prtct{\noexpand\@prtct\noexpand}\def\def{\noexpand
+ \def\noexpand}\xdef#1{#1#2}}}
+
+\def\@getfont#1#2#3#4{\@ifundefined{\string #1\string #3}{\global\expandafter
+ \font \csname \string #1\string #3\endcsname #4\relax
+ \@addfontinfo#3{\textfont #2\csname \string #1\string #3\endcsname
+ \scriptfont #2\csname \string #1\string #3\endcsname
+ \scriptscriptfont #2\csname \string #1\string #3\endcsname
+ \def#1{\fam #2\csname\string #1\string #3\endcsname}}}{}#3#1}
+
+\def\@nohyphens#1#2{\global\expandafter \hyphenchar\csname
+ \string #1\string #2\endcsname \m@ne}
+
+\def\@subfont#1#2{\@warning{No \string#1\space typeface in
+ this size, using \string#2}#2}
+
+\def\@onesizefont#1#2{\expandafter\newfam\csname fm\string#1\endcsname
+ \global\expandafter\font\csname ft\string#1\endcsname #2\relax
+ \gdef#1{\ifx \@currsize\normalsize \@ftfam#1\else
+ \@warning{Typeface \string#1\space available only in
+ \string\normalsize, using \string\rm}\gdef #1{\ifx \@currsize\normalsize
+ \textfont\@fontfam#1 \scriptfont\@fontfam#1 \scriptscriptfont
+ \@fontfam#1\@ftfam#1\else \rm\fi}#1\fi}#1}
+
+\def\@ftfam#1{\fam\csname fm\string#1\endcsname\csname ft\string#1\endcsname}
+
+\def\@nomath#1{\ifmmode \@warning{\string#1\space in math mode.}\fi}
+\def\@nomathbold{\ifmmode \@warning{\string\mathbold\space in math mode.}\fi}
+
+% The following definitions save token space. E.g., using \@height
+% instead of height saves 5 tokens at the cost in time of one macro
+% expansion.
+
+\def\@height{height}
+\def\@depth{depth}
+\def\@width{width}
+
+\def\@magscale#1{ scaled \magstep #1}
+\def\@halfmag{ scaled \magstephalf}
+\def\@ptscale#1{ scaled #100}
+
+% five point
+ \font\fivrm = psmtimr \@ptscale5 % roman
+ \font\fivmi = cmmi5 % math italic
+ \skewchar\fivmi ='177 % for placement of accents
+%\font\fivmib = cmmib10 \@ptscale5 % bold math italic
+ \font\fivsy = cmsy5 % math symbols
+ \skewchar\fivsy ='60 % for placement of math accents
+%\font\fivsyb = cmbsy10 \@ptscale5 % bold math symbols
+%\font\fivit = psmtimi \@ptscale7 % text italic
+%\font\fivsl = psmtimi \@ptscale5 % slanted
+%\font\fivbf = psmtimb \@ptscale5 % extended bold
+%\font\fivbfs = psmtimbi\@ptscale5 % extended bold slanted
+%\font\fivtt = psmcou \@ptscale5 % typewriter
+%\font\fivtti = psmcouo \@ptscale5 % italic typewriter
+%\font\fivtts = psmcouo\@ptscale5 % slanted typewriter
+%\font\fivsf = psmhlv \@ptscale5 % sans serif
+%\font\fivsfi = psmhlvo \@ptscale5 % italic sans serif
+%\font\fivsfb = psmhlvb\@ptscale5 % bold sans serif
+%\font\fivsc = cmcsc10 \@ptscale5 % small caps
+ \font\fivly = lasy5 % LaTeX symbols
+%\font\fivlyb = lasyb10 \@ptscale5 % LaTeX symbols
+%\font\fivuit = cmu10 \@ptscale5 % unslanted italic
+
+% six point
+ \font\sixrm = psmtimr \@ptscale6 % roman
+ \font\sixmi = cmmi6 % math italic
+ \skewchar\sixmi ='177 % for placement of accents
+%\font\sixmib = cmmib10 \@ptscale6 % bold math italic
+ \font\sixsy = cmsy6 % math symbols
+ \skewchar\sixsy ='60 % for placement of math accents
+%\font\sixsyb = cmbsy10 \@ptscale6 % bold math symbols
+%\font\sixit = psmtimi \@ptscale7 % text italic
+%\font\sixsl = psmtimi \@ptscale6 % slanted
+%\font\sixbf = cmbx7 scaled 857 % extended bold
+%\font\sixbfs = psmtimbi\@ptscale6 % extended bold slanted
+%\font\sixtt = psmcou \@ptscale6 % typewriter
+%\font\sixtti = psmcouo \@ptscale6 % italic typewriter
+%\font\sixtts = psmcouo\@ptscale6 % slanted typewriter
+%\font\sixsf = psmhlv \@ptscale6 % sans serif
+%\font\sixsfi = psmhlvo \@ptscale6 % italic sans serif
+%\font\sixsfb = psmhlvb\@ptscale6 % bold sans serif
+%\font\sixsc = cmcsc10 \@ptscale6 % small caps
+ \font\sixly = lasy6 % LaTeX symbols
+%\font\sixlyb = lasyb10 \@ptscale6 % LaTeX symbols
+%\font\sixuit = cmu10 \@ptscale6 % unslanted italic
+
+% seven point
+ \font\sevrm = psmtimr \@ptscale7 % roman
+ \font\sevmi = cmmi7 % math italic
+ \skewchar\sevmi ='177 % for placement of accents
+%\font\sevmib = cmmib10 \@ptscale7 % bold math italic
+ \font\sevsy = cmsy7 % math symbols
+ \skewchar\sevsy ='60 % for placement of math accents
+%\font\sevsyb = cmbsy10 \@ptscale7 % bold math symbols
+ \font\sevit = psmtimi \@ptscale7 % text italic
+%\font\sevsl = psmtimi \@ptscale7 % slanted
+%\font\sevbf = psmtimb \@ptscale7 % extended bold
+%\font\sevbfs = psmtimbi\@ptscale7 % extended bold slanted
+%\font\sevtt = psmcou \@ptscale7 % typewriter
+%\font\sevtti = psmcouo \@ptscale7 % italic typewriter
+%\font\sevtts = psmcouo\@ptscale7 % slanted typewriter
+%\font\sevsf = psmhlv \@ptscale7 % sans serif
+%\font\sevsfi = psmhlvo \@ptscale7 % italic sans serif
+%\font\sevsfb = psmhlvb\@ptscale7 % bold sans serif
+%\font\sevsc = cmcsc10 \@ptscale7 % small caps
+ \font\sevly = lasy7 % LaTeX symbols
+%\font\sevlyb = lasyb10 \@ptscale7 % LaTeX symbols
+%\font\sevuit = cmu10 \@ptscale7 % unslanted italic
+
+% eight point
+ \font\egtrm = psmtimr \@ptscale8 % roman
+ \font\egtmi = cmmi8 % math italic
+ \skewchar\egtmi ='177 % for placement of accents
+%\font\egtmib = cmmib10 \@ptscale8 % bold math italic
+ \font\egtsy = cmsy8 % math symbols
+ \skewchar\egtsy ='60 % for placement of math accents
+%\font\egtsyb = cmbsy10 \@ptscale8 % bold math symbols
+ \font\egtit = psmtimi \@ptscale8 % text italic
+%\font\egtsl = psmtimi \@ptscale8 % slanted
+%\font\egtbf = psmtimb \@ptscale8 % extended bold
+%\font\egtbfs = psmtimbi\@ptscale8 % extended bold slanted
+%\font\egttt = psmcou \@ptscale8 % typewriter
+%\font\egttti = psmcouo \@ptscale8 % italic typewriter
+%\font\egttts = psmcouo\@ptscale8 % slanted typewriter
+%\font\egtsf = psmhlv \@ptscale8 % sans serif
+%\font\egtsfi = psmhlvo \@ptscale8 % italic sans serif
+%\font\egtsfb = psmhlvb\@ptscale8 % bold sans serif
+%\font\egtsc = cmcsc10 \@ptscale8 % small caps
+ \font\egtly = lasy8 % LaTeX symbols
+%\font\egtlyb = lasyb10 \@ptscale8 % LaTeX symbols
+%\font\egtuit = cmu10 \@ptscale8 % unslanted italic
+
+
+% nine point
+ \font\ninrm = psmtimr \@ptscale9 % roman
+ \font\ninmi = cmmi9 % math italic
+ \skewchar\ninmi ='177 % for placement of accents
+%\font\ninmib = cmmib10 \@ptscale9 % bold math italic
+ \font\ninsy = cmsy9 % math symbols
+ \skewchar\ninsy ='60 % for placement of math accents
+%\font\ninsyb = cmbsy10 \@ptscale9 % bold math symbols
+ \font\ninit = psmtimi \@ptscale9 % text italic
+%\font\ninsl = psmtimi \@ptscale9 % slanted
+ \font\ninbf = psmtimb \@ptscale9 % extended bold
+%\font\ninbfs = psmtimbi\@ptscale9 % extended bold slanted
+ \font\nintt = psmcou \@ptscale9 % typewriter
+ \hyphenchar\nintt = -1 % suppress hyphenation in \tt font
+%\font\nintti = psmcouo \@ptscale9 % italic typewriter
+%\font\nintts = psmcouo\@ptscale9 % slanted typewriter
+%\font\ninsf = psmhlv \@ptscale9 % sans serif
+%\font\ninsfi = psmhlvo \@ptscale9 % italic sans serif
+%\font\ninsfb = psmhlvb\@ptscale9 % bold sans serif
+%\font\ninsc = cmcsc10 \@ptscale9 % small caps
+ \font\ninly = lasy9 % LaTeX symbols
+%\font\ninlyb = lasyb10 \@ptscale9 % LaTeX symbols
+%\font\ninuit = cmu10 \@ptscale9 % unslanted italic
+
+% ten point
+ \font\tenrm = psmtimr % roman
+ \font\tenmi = cmmi10 % math italic
+ \skewchar\tenmi ='177 % for placement of accents
+%\font\tenmib = cmmib10 % bold math italic
+ \font\tensy = cmsy10 % math symbols
+ \skewchar\tensy ='60 % for placement of math accents
+%\font\tensyb = cmbsy10 % bold symbols
+ \font\tenit = psmtimi % text italic
+ \font\tensl = psmtimi % slanted
+ \font\tenbf = psmtimb % extended bold
+%\font\tenbfs = psmtimbi % extended bold slanted
+ \font\tentt = psmcou % typewriter
+ \hyphenchar\tentt = -1 % suppress hyphenation in \tt font
+%\font\tentti = psmcouo % italic typewriter
+%\font\tentts = psmcouo % slanted typewriter
+ \font\tensf = psmhlv % sans serif
+%\font\tensfi = psmhlvo % italic sans serif
+%\font\tensfb = psmhlvb % bold sans serif
+%\font\tensc = cmcsc10 % small caps
+ \font\tenly = lasy10 % LaTeX symbols
+%\font\tenlyb = lasyb10 % bold LaTeX symbols
+%\font\tenuit = cmu10 % unslanted italic
+
+% eleven point
+ \font\elvrm = psmtimr \@halfmag % roman
+ \font\elvmi = cmmi10 \@halfmag % math italic
+ \skewchar\elvmi ='177 % for placement of accents
+%\font\elvmib = cmmib10 \@halfmag % bold math italic
+ \font\elvsy = cmsy10 \@halfmag % math symbols
+ \skewchar\elvsy ='60 % for placement of math accents
+%\font\elvsyb = cmbsy10 \@halfmag % bold symbols
+ \font\elvit = psmtimi \@halfmag % text italic
+ \font\elvsl = psmtimi \@halfmag % slanted
+ \font\elvbf = psmtimb \@halfmag % exelvded bold
+%\font\elvbfs = psmtimbi \@halfmag % exelvded bold slanted
+ \font\elvtt = psmcou \@halfmag % typewriter
+ \hyphenchar\elvtt = -1 % suppress hyphenation in \tt font
+%\font\elvtti = psmcouo \@halfmag % italic typewriter
+%\font\elvtts = psmcouo \@halfmag % slanted typewriter
+ \font\elvsf = psmhlv \@halfmag % sans serif
+%\font\elvsfi = psmhlvo \@halfmag % italic sans serif
+%\font\elvsfb = psmhlvb \@halfmag % bold sans serif
+%\font\elvsc = cmcsc10 \@halfmag % small caps
+ \font\elvly = lasy10 \@halfmag % LaTeX symbols
+%\font\elvlyb = lasyb10 \@halfmag % bold LaTeX symbols
+%\font\elvuit = cmu10 \@halfmag % unslanted italic
+
+% twelve point
+ \font\twlrm = psmtimr \@magscale1 % roman
+ \font\twlmi = cmmi10 \@magscale1 % math italic
+ \skewchar\twlmi ='177 % for placement of accents
+%\font\twlmib = cmmib10 \@magscale1 % bold math italic
+ \font\twlsy = cmsy10 \@magscale1 % math symbols
+ \skewchar\twlsy ='60 % for placement of math accents
+%\font\twlsyb = cmbsy10 \@magscale1 % bold symbols
+ \font\twlit = psmtimi \@magscale1 % text italic
+ \font\twlsl = psmtimi \@magscale1 % slanted
+ \font\twlbf = psmtimb \@magscale1 % extended bold
+%\font\twlbfs = psmtimbi \@magscale1 % extended bold slanted
+ \font\twltt = psmcou \@magscale1 % typewriter
+ \hyphenchar\twltt = -1 % suppress hyphenation in \tt font
+%\font\twltti = psmcouo \@magscale1 % italic typewriter
+%\font\twltts = psmcouo \@magscale1 % slanted typewriter
+ \font\twlsf = psmhlv \@magscale1 % sans serif
+%\font\twlsfi = psmhlvo \@magscale1 % italic sans serif
+%\font\twlsfb = psmhlvb \@magscale1 % bold sans serif
+%\font\twlsc = cmcsc10 \@magscale1 % small caps
+ \font\twlly = lasy10 \@magscale1 % LaTeX symbols
+%\font\twllyb = lasyb10 \@magscale1 % bold LaTeX symbols
+%\font\twluit = cmu10 \@magscale1 % unslanted italic
+
+% fourteen point
+ \font\frtnrm = psmtimr \@magscale2 % roman
+ \font\frtnmi = cmmi10 \@magscale2 % math italic
+ \skewchar\frtnmi ='177 % for placement of accents
+%\font\frtnmib = cmmib10 \@magscale2 % bold math italic
+ \font\frtnsy = cmsy10 \@magscale2 % math symbols
+ \skewchar\frtnsy ='60 % for placement of math accents
+%\font\frtnsyb = cmbsy10 \@magscale2 % bold symbols
+%\font\frtnit = psmtimi \@magscale2 % text italic
+%\font\frtnsl = psmtimi \@magscale2 % slanted
+ \font\frtnbf = psmtimb \@magscale2 % extended bold
+%\font\frtnbfs = psmtimbi \@magscale2 % extended bold slanted
+%\font\frtntt = psmcou \@magscale2 % typewriter
+%\font\frtntti = psmcouo \@magscale2 % italic typewriter
+%\font\frtntts = psmcouo \@magscale2 % slanted typewriter
+%\font\frtnsf = psmhlv \@magscale2 % sans serif
+%\font\frtnsfi = psmhlvo \@magscale2 % italic sans serif
+%\font\frtnsfb = psmhlvb \@magscale2 % bold sans serif
+%\font\frtnsc = cmcsc10 \@magscale2 % small caps
+ \font\frtnly = lasy10 \@magscale2 % LaTeX symbols
+%\font\frtnlyb = lasyb10 \@magscale2 % bold LaTeX symbols
+%\font\frtnuit = cmu10 \@magscale2 % unslanted italic
+
+% seventeen point
+ \font\svtnrm = psmtimr \@magscale3 % roman
+ \font\svtnmi = cmmi10 \@magscale3 % math italic
+ \skewchar\svtnmi ='177 % for placement of accents
+%\font\svtnmib = cmmib10 \@magscale3 % bold math italic
+ \font\svtnsy = cmsy10 \@magscale3 % math symbols
+ \skewchar\svtnsy ='60 % for placement of math accents
+%\font\svtnsyb = cmbsy10 \@magscale3 % bold symbols
+%\font\svtnit = psmtimi \@magscale3 % text italic
+%\font\svtnsl = psmtimi \@magscale3 % slanted
+ \font\svtnbf = psmtimb \@magscale3 % extended bold
+%\font\svtnbfs = psmtimbi \@magscale3 % extended bold slanted
+%\font\svtntt = psmcou \@magscale3 % typewriter
+%\font\svtntti = psmcouo \@magscale3 % italic typewriter
+%\font\svtntts = psmcouo \@magscale3 % slanted typewriter
+%\font\svtnsf = psmhlv \@magscale3 % sans serif
+%\font\svtnsfi = psmhlvo \@magscale3 % italic sans serif
+%\font\svtnsfb = psmhlvb \@magscale3 % bold sans serif
+%\font\svtnsc = cmcsc10 \@magscale3 % small caps
+ \font\svtnly = lasy10 \@magscale3 % LaTeX symbols
+%\font\svtnlyb = lasyb10 \@magscale3 % bold LaTeX symbols
+%\font\svtnuit = cmu10 \@magscale3 % unslanted italic
+
+% twenty point
+ \font\twtyrm = psmtimr \@magscale4 % roman
+ \font\twtymi = cmmi10 \@magscale4 % math italic
+ \skewchar\twtymi ='177 % for placement of accents
+%\font\twtymib = cmmib10 \@magscale4 % bold math italic
+ \font\twtysy = cmsy10 \@magscale4 % math symbols
+ \skewchar\twtysy ='60 % for placement of math accents
+%\font\twtysyb = cmbsy10 \@magscale4 % bold symbols
+%\font\twtyit = psmtimi \@magscale4 % text italic
+%\font\twtysl = psmtimi \@magscale4 % slanted
+%\font\twtybf = psmtimb \@magscale4 % extended bold
+%\font\twtybfs = psmtimbi \@magscale4 % extended bold slanted
+%\font\twtytt = psmcou \@magscale4 % typewriter
+%\font\twtytti = psmcouo \@magscale4 % italic typewriter
+%\font\twtytts = psmcouo \@magscale4 % slanted typewriter
+%\font\twtysf = psmhlv \@magscale4 % sans serif
+%\font\twtysfi = psmhlvo \@magscale4 % italic sans serif
+%\font\twtysfb = psmhlvb \@magscale4 % bold sans serif
+%\font\twtysc = cmcsc10 \@magscale4 % small caps
+ \font\twtyly = lasy10 \@magscale4 % LaTeX symbols
+%\font\twtylyb = lasyb10 \@magscale4 % bold LaTeX symbols
+%\font\twtyuit = cmu10 \@magscale4 % unslanted italic
+
+% twenty-five point
+ \font\twfvrm = psmtimr \@magscale5 % roman
+%\font\twfvmi = cmmi10 \@magscale5 % math italic
+%\font\twfvmib = cmmib10 \@magscale5 % bold math italic
+%\font\twfvsy = cmsy10 \@magscale5 % math symbols
+%\font\twfvsyb = cmbsy10 \@magscale5 % bold symbols
+%\font\twfvit = psmtimi \@magscale5 % text italic
+%\font\twfvsl = psmtimi \@magscale5 % slanted
+%\font\twfvbf = psmtimb \@magscale5 % extended bold
+%\font\twfvbfs = psmtimbi \@magscale5 % extended bold slanted
+%\font\twfvtt = psmcou \@magscale5 % typewriter
+%\font\twfvtti = psmcouo \@magscale5 % italic typewriter
+%\font\twfvtts = psmcouo \@magscale5 % slanted typewriter
+%\font\twfvsf = psmhlv \@magscale5 % sans serif
+%\font\twfvsfi = psmhlvo \@magscale5 % italic sans serif
+%\font\twfvsfb = psmhlvb \@magscale5 % bold sans serif
+%\font\twfvsc = cmcsc10 \@magscale5 % small caps
+%\font\twfvly = lasy10 \@magscale5 % LaTeX symbols
+%\font\twfvlyb = lasyb10 \@magscale5 % bold LaTeX symbols
+%\font\twfvuit = cmu10 \@magscale5 % unslanted italic
+
+% Math extension
+ \font\tenex = cmex10
+
+% line & circle fonts
+\font\tenln = line10
+\font\tenlnw = linew10
+\font\tencirc = circle10
+\font\tencircw = circlew1%0
+
+\ifnum\fontdimen8\tenln=\fontdimen8\tencirc \else
+ \@warning{Incompatible thin line and circle fonts}\fi
+\ifnum\fontdimen8\tenlnw=\fontdimen8\tencircw \else
+ \@warning{Incompatible thick line and circle fonts}\fi
+
+
+% protected font names
+\def\rm{\protect\prm}
+\def\it{\protect\pit}
+\def\bf{\protect\pbf}
+\def\sl{\protect\psl}
+\def\sf{\protect\psf}
+\def\sc{\protect\psc}
+\def\tt{\protect\ptt}
+
+% font abbreviations
+\def\@mbi{cmmib10}
+\def\@mbsy{cmbsy10}
+\def\@mcsc{cmcsc10}
+\def\@mss{psmhlv}
+\def\@lasyb{lasyb10}
+
+% families
+
+\newfam\itfam % \it is family 4
+\newfam\slfam % \sl is family 5
+\newfam\bffam % \bf is family 6
+\newfam\ttfam % \tt is family 7
+\newfam\sffam % \sf is family 8
+\newfam\scfam % \sf is family 9
+\newfam\lyfam % \ly is family 10
+
+\def\cal{\fam\tw@}
+\def\mit{\fam\@ne}
+
+\def\@setstrut{\setbox\strutbox=\hbox{\vrule \@height .7\baselineskip
+ \@depth .3\baselineskip \@width\z@}}
+
+\def\vpt{\textfont\z@\fivrm
+ \scriptfont\z@\fivrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\fivmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\fivsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\fivrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\fam\@ne\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\@getfont\pit\itfam\@vpt{psmtimi \@ptscale5}}%
+\def\psl{\@subfont\sl\it}%
+\def\pbf{\@getfont\pbf\bffam\@vpt{psmtimb \@ptscale5}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\fivly}\textfont\lyfam\fivly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut\rm}
+
+\def\@vpt{}
+
+\def\vipt{\textfont\z@\sixrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\sixmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\sixsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\sixrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+ \unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\@subfont\it\rm}%
+\def\psl{\@subfont\sl\rm}%
+\def\pbf{\@getfont\pbf\bffam\@vipt{psmtimb \@ptscale6}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\sixly}\textfont\lyfam\sixly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\sixly
+\@setstrut\rm}
+
+\def\@vipt{}
+
+\def\viipt{\textfont\z@\sevrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\sevmi \scriptfont\@ne\fivmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\sevsy \scriptfont\tw@\fivsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\sevrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\sevit}\textfont\itfam\sevit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@subfont\sl\it}%
+\def\pbf{\@getfont\pbf\bffam\@viipt{psmtimb \@ptscale7}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\sevly}\textfont\lyfam\sevly
+ \scriptfont\lyfam\fivly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@viipt{}
+
+\def\viiipt{\textfont\z@\egtrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\egtmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\egtsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\egtrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath
+\unboldmath\@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\egtit}\textfont\itfam\egtit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@getfont\psl\slfam\@viiipt{psmtimi \@ptscale8}}%
+\def\pbf{\@getfont\pbf\bffam\@viiipt{psmtimb \@ptscale8}}%
+\def\ptt{\@getfont\ptt\ttfam\@viiipt{psmcou \@ptscale8}\@nohyphens\ptt\@viiipt}%
+\def\psf{\@getfont\psf\sffam\@viiipt{cmss8}}%
+\def\psc{\@getfont\psc\scfam\@viiipt{\@mcsc\@ptscale8}}%
+\def\ly{\fam\lyfam\egtly}\textfont\lyfam\egtly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@viiipt{}
+
+\def\ixpt{\textfont\z@\ninrm
+ \scriptfont\z@\sixrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\ninmi \scriptfont\@ne\sixmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\ninsy \scriptfont\tw@\sixsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\prm{\fam\z@\ninrm}%
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\pit{\fam\itfam\ninit}\textfont\itfam\ninit
+ \scriptfont\itfam\sevit \scriptscriptfont\itfam\sevit
+\def\psl{\@getfont\psl\slfam\@ixpt{psmtimi \@ptscale9}}%
+\def\pbf{\fam\bffam\ninbf}\textfont\bffam\ninbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\nintt}\textfont\ttfam\nintt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+\def\psf{\@getfont\psf\sffam\@ixpt{cmss9}}%
+\def\psc{\@getfont\psc\scfam\@ixpt{\@mcsc\@ptscale9}}%
+\def\ly{\fam\lyfam\ninly}\textfont\lyfam\ninly
+ \scriptfont\lyfam\sixly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@ixpt{}
+
+\def\xpt{\textfont\z@\tenrm
+ \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
+\textfont\@ne\tenmi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
+\textfont\tw@\tensy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\tenmi
+ \textfont\tw@\tensy \textfont\lyfam\tenly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{tenmib}{\global\font\tenmib\@mbi
+ \global\font\tensyb\@mbsy
+ \global\font\tenlyb\@lasyb\relax\@addfontinfo\@xpt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\tenmib \textfont\tw@\tensyb
+ \textfont\lyfam\tenlyb \@prtct\@boldtrue}}}{}\@xpt\boldmath}%
+\def\prm{\fam\z@\tenrm}%
+\def\pit{\fam\itfam\tenit}\textfont\itfam\tenit \scriptfont\itfam\sevit
+ \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\tensl}\textfont\slfam\tensl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+\def\pbf{\fam\bffam\tenbf}\textfont\bffam\tenbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\tenbf
+\def\ptt{\fam\ttfam\tentt}\textfont\ttfam\tentt
+ \scriptfont\ttfam\tentt \scriptscriptfont\ttfam\tentt
+\def\psf{\fam\sffam\tensf}\textfont\sffam\tensf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+\def\psc{\@getfont\psc\scfam\@xpt{\@mcsc}}%
+\def\ly{\fam\lyfam\tenly}\textfont\lyfam\tenly
+ \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
+\@setstrut \rm}
+
+\def\@xpt{}
+
+\def\xipt{\textfont\z@\elvrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\elvmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\elvsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\elvmi \textfont\tw@\elvsy
+ \textfont\lyfam\elvly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{elvmib}{\global\font\elvmib\@mbi\@halfmag
+ \global\font\elvsyb\@mbsy\@halfmag
+ \global\font\elvlyb\@lasyb\@halfmag\relax\@addfontinfo\@xipt
+ {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\elvmib \textfont\tw@\elvsyb
+ \textfont\lyfam\elvlyb\@prtct\@boldtrue}}}{}\@xipt\boldmath}%
+\def\prm{\fam\z@\elvrm}%
+\def\pit{\fam\itfam\elvit}\textfont\itfam\elvit
+ \scriptfont\itfam\egtit \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\elvsl}\textfont\slfam\elvsl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+\def\pbf{\fam\bffam\elvbf}\textfont\bffam\elvbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\elvtt}\textfont\ttfam\elvtt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+\def\psf{\fam\sffam\elvsf}\textfont\sffam\elvsf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+\def\psc{\@getfont\psc\scfam\@xipt{\@mcsc\@halfmag}}%
+\def\ly{\fam\lyfam\elvly}\textfont\lyfam\elvly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+\@setstrut \rm}
+
+\def\@xipt{}
+
+\def\xiipt{\textfont\z@\twlrm
+ \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
+\textfont\@ne\twlmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
+\textfont\tw@\twlsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twlmi
+ \textfont\tw@\twlsy \textfont\lyfam\twlly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{twlmib}{\global\font\twlmib\@mbi\@magscale1\global
+ \font\twlsyb\@mbsy \@magscale1\global\font
+ \twllyb\@lasyb\@magscale1\relax\@addfontinfo\@xiipt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\twlmib \textfont\tw@\twlsyb
+ \textfont\lyfam\twllyb\@prtct\@boldtrue}}}{}\@xiipt\boldmath}%
+\def\prm{\fam\z@\twlrm}%
+\def\pit{\fam\itfam\twlit}\textfont\itfam\twlit \scriptfont\itfam\egtit
+ \scriptscriptfont\itfam\sevit
+\def\psl{\fam\slfam\twlsl}\textfont\slfam\twlsl
+ \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
+\def\pbf{\fam\bffam\twlbf}\textfont\bffam\twlbf
+ \scriptfont\bffam\ninbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\fam\ttfam\twltt}\textfont\ttfam\twltt
+ \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
+\def\psf{\fam\sffam\twlsf}\textfont\sffam\twlsf
+ \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
+\def\psc{\@getfont\psc\scfam\@xiipt{\@mcsc\@magscale1}}%
+\def\ly{\fam\lyfam\twlly}\textfont\lyfam\twlly
+ \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
+ \@setstrut \rm}
+
+\def\@xiipt{}
+
+\def\xivpt{\textfont\z@\frtnrm
+ \scriptfont\z@\tenrm \scriptscriptfont\z@\sevrm
+\textfont\@ne\frtnmi \scriptfont\@ne\tenmi \scriptscriptfont\@ne\sevmi
+\textfont\tw@\frtnsy \scriptfont\tw@\tensy \scriptscriptfont\tw@\sevsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\frtnmi \textfont\tw@\frtnsy
+ \textfont\lyfam\frtnly \@boldfalse}\@boldfalse
+\def\boldmath{\@ifundefined{frtnmib}{\global\font
+ \frtnmib\@mbi\@magscale2\global\font\frtnsyb\@mbsy\@magscale2
+ \global\font\frtnlyb\@lasyb\@magscale2\relax\@addfontinfo\@xivpt
+ {\def\boldmath{\everymath
+ {\mit}\everydisplay{\mit}\@prtct\@nomathbold
+ \textfont\@ne\frtnmib \textfont\tw@\frtnsyb
+ \textfont\lyfam\frtnlyb\@prtct\@boldtrue}}}{}\@xivpt\boldmath}%
+\def\prm{\fam\z@\frtnrm}%
+\def\pit{\@getfont\pit\itfam\@xivpt{psmtimi\@magscale2}}%
+\def\psl{\@getfont\psl\slfam\@xivpt{psmtimi\@magscale2}}%
+\def\pbf{\fam\bffam\frtnbf}\textfont\bffam\frtnbf
+ \scriptfont\bffam\tenbf \scriptscriptfont\bffam\ninbf
+\def\ptt{\@getfont\ptt\ttfam\@xivpt{psmcou\@magscale2}\@nohyphens\ptt\@xivpt}%
+\def\psf{\@getfont\psf\sffam\@xivpt{\@mss\@magscale2}}%
+\def\psc{\@getfont\psc\scfam\@xivpt{\@mcsc\@magscale2}}%
+\def\ly{\fam\lyfam\frtnly}\textfont\lyfam\frtnly
+ \scriptfont\lyfam\tenly \scriptscriptfont\lyfam\sevly
+\@setstrut \rm}
+
+\def\@xivpt{}
+
+\def\xviipt{\textfont\z@\svtnrm
+ \scriptfont\z@\twlrm \scriptscriptfont\z@\tenrm
+\textfont\@ne\svtnmi \scriptfont\@ne\twlmi \scriptscriptfont\@ne\tenmi
+\textfont\tw@\svtnsy \scriptfont\tw@\twlsy \scriptscriptfont\tw@\tensy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\svtnmi \textfont\tw@\svtnsy \textfont\lyfam\svtnly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\svtnrm}%
+\def\pit{\@getfont\pit\itfam\@xviipt{psmtimi\@magscale3}}%
+\def\psl{\@getfont\psl\slfam\@xviipt{psmtimi\@magscale3}}%
+\def\pbf{\fam\bffam\svtnbf}\textfont\bffam\svtnbf
+ \scriptfont\bffam\twlbf \scriptscriptfont\bffam\tenbf
+\def\ptt{\@getfont\ptt\ttfam\@xviipt{psmcou\@magscale3}\@nohyphens
+ \ptt\@xviipt}%
+\def\psf{\@getfont\psf\sffam\@xviipt{\@mss\@magscale3}}%
+\def\psc{\@getfont\psc\scfam\@xviipt{\@mcsc\@magscale3}}%
+\def\ly{\fam\lyfam\svtnly}\textfont\lyfam\svtnly
+ \scriptfont\lyfam\twlly \scriptscriptfont\lyfam\tenly
+\@setstrut \rm}
+
+\def\@xviipt{}
+
+\def\xxpt{\textfont\z@\twtyrm
+ \scriptfont\z@\frtnrm \scriptscriptfont\z@\twlrm
+\textfont\@ne\twtymi \scriptfont\@ne\frtnmi \scriptscriptfont\@ne\twlmi
+\textfont\tw@\twtysy \scriptfont\tw@\frtnsy \scriptscriptfont\tw@\twlsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\twtyrm}%
+\def\pit{\@getfont\pit\itfam\@xxpt{psmtimi\@magscale4}}%
+\def\psl{\@getfont\psl\slfam\@xxpt{psmtimi\@magscale4}}%
+\def\pbf{\@getfont\pbf\bffam\@xxpt{psmtimb\@magscale4}}%
+\def\ptt{\@getfont\ptt\ttfam\@xxpt{psmcou\@magscale4}\@nohyphens\ptt\@xxpt}%
+\def\psf{\@getfont\psf\sffam\@xxpt{\@mss\@magscale4}}%
+\def\psc{\@getfont\psc\scfam\@xxpt{\@mcsc\@magscale4}}%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\frtnly \scriptscriptfont\lyfam\twlly
+\@setstrut \rm}
+
+\def\@xxpt{}
+
+\def\xxvpt{\textfont\z@\twfvrm
+ \scriptfont\z@\twtyrm \scriptscriptfont\z@\svtnrm
+\textfont\@ne\twtymi \scriptfont\@ne\twtymi \scriptscriptfont\@ne\svtnmi
+\textfont\tw@\twtysy \scriptfont\tw@\twtysy \scriptscriptfont\tw@\svtnsy
+\textfont\thr@@\tenex \scriptfont\thr@@\tenex \scriptscriptfont\thr@@\tenex
+\def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
+ \textfont\@ne\twtymi \textfont\tw@\twtysy \textfont\lyfam\twtyly
+ \@boldfalse}\@boldfalse
+\def\boldmath{\@subfont\boldmath\unboldmath}%
+\def\prm{\fam\z@\twfvrm}%
+\def\pit{\@subfont\it\rm}%
+\def\psl{\@subfont\sl\rm}%
+\def\pbf{\@getfont\pbf\bffam\@xxvpt{psmtimb\@magscale5}}%
+\def\ptt{\@subfont\tt\rm}%
+\def\psf{\@subfont\sf\rm}%
+\def\psc{\@subfont\sc\rm}%
+\def\ly{\fam\lyfam\twtyly}\textfont\lyfam\twtyly
+ \scriptfont\lyfam\twtyly \scriptscriptfont\lyfam\svtnly
+\@setstrut \rm}
+
+\def\@xxvpt{}
+
+% SPECIAL LaTeX character definitions
+
+% Definitions of math operators added by LaTeX
+\mathchardef\mho"0A30
+\mathchardef\Join"3A31
+\mathchardef\Box"0A32
+\mathchardef\Diamond"0A33
+\mathchardef\leadsto"3A3B
+\mathchardef\sqsubset"3A3C
+\mathchardef\sqsupset"3A3D
+\def\lhd{\mathbin{< \hbox to -.43em{}\hbox{\vrule
+ \@width .065em \@height .55em \@depth .05em}\hbox to .2em{}}}
+\def\rhd{\mathbin{\hbox to .3em{}\hbox{\vrule \@width .065em \@height
+ .55em \@depth .05em}\hbox to -.43em{}>}}
+\def\unlhd{\mathbin{\leq \hbox to -.43em{}\hbox
+ {\vrule \@width .065em \@height .63em \@depth -.08em}\hbox to .2em{}}}
+\def\unrhd{\mathbin{ \hbox to .3em{}\hbox
+ {\vrule \@width .065em \@height .63em \@depth -.08em}\hbox to -.43em{}\geq}}
+
+% Definition of \$ to work in italic font (since it produces a pound sterling
+% sign in the cmit font.
+
+\def\${\protect\pdollar}
+\def\pdollar{{\ifdim \fontdimen\@ne\font >\z@ \sl \fi\char`\$}}
+
+% Definition of pound sterling sign.
+
+\def\pounds{{\it \char'44}}
+
+% Definition of \copyright changed so it works in other type styles,
+% and so it is robust
+\def\copyright{\protect\pcopyright}
+\def\pcopyright{{\rm\ooalign{\hfil
+ \raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}
+
diff --git a/macros/latex209/contrib/ps-latex/ps-lplain.tex b/macros/latex209/contrib/ps-latex/ps-lplain.tex
new file mode 100644
index 0000000000..2dd373512d
--- /dev/null
+++ b/macros/latex209/contrib/ps-latex/ps-lplain.tex
@@ -0,0 +1,1308 @@
+% File PS-LPLAIN, created 19th September 1988 from
+% File LPLAIN - Created 29 October 1985 from plain version 1.5CM
+%
+% This is the PS-LaTeX (PostScript-LaTeX) version of the plain TeX format
+% that's described in The TeXbook. All modifications can be found by searching
+% for the words 'LaTeX' or 'PS-LaTeX'.
+% N.B.: A version number is defined at the very end of this file;
+% please change that number whenever the file is modified!
+% And don't modify the file under any circumstances.
+
+\catcode`\{=1 % left brace is begin-group character
+\catcode`\}=2 % right brace is end-group character
+\catcode`\$=3 % dollar sign is math shift
+\catcode`\&=4 % ampersand is alignment tab
+\catcode`\#=6 % hash mark is macro parameter character
+\catcode`\^=7 \catcode`\^^K=7 % circumflex and uparrow are for superscripts
+\catcode`\_=8 \catcode`\^^A=8 % underline and downarrow are for subscripts
+\catcode`\^^I=10 % ascii tab is a blank space
+\chardef\active=13 \catcode`\~=\active % tilde is active
+\catcode`\^^L=\active \outer\def^^L{\par} % ascii form-feed is "\outer\par"
+
+\message{Preloading the plain format: codes,}
+
+% We had to define the \catcodes right away, before the message line,
+% since \message uses the { and } characters.
+% When INITEX (the TeX initializer) starts up,
+% it has defined the following \catcode values:
+% \catcode`\^^@=9 % ascii null is ignored
+% \catcode`\^^M=5 % ascii return is end-line
+% \catcode`\\=0 % backslash is TeX escape character
+% \catcode`\%=14 % percent sign is comment character
+% \catcode`\ =10 % ascii space is blank space
+% \catcode`\^^?=15 % ascii delete is invalid
+% \catcode`\A=11 ... \catcode`\Z=11 % uppercase letters
+% \catcode`\a=11 ... \catcode`\z=11 % lowercase letters
+% all others are type 12 (other)
+
+% Here is a list of the characters that have been specially catcoded:
+\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+% (not counting ascii null, tab, linefeed, formfeed, return, delete)
+% Each symbol in the list is preceded by \do, which can be defined
+% if you want to do something to every item in the list.
+
+% We make @ signs act like letters, temporarily, to avoid conflict
+% between user names and internal control sequences of plain format.
+\catcode`@=11
+
+% INITEX sets up \mathcode x=x, for x=0..127, except that
+% \mathcode x=x+"7100, for x = `A to `Z and `a to `z;
+% \mathcode x=x+"7000, for x = `0 to `9.
+% The following changes define internal codes as recommended
+% in Appendix C of The TeXbook:
+\mathcode`\^^@="2201 % \cdot
+\mathcode`\^^A="3223 % \downarrow
+\mathcode`\^^B="010B % \alpha
+\mathcode`\^^C="010C % \beta
+\mathcode`\^^D="225E % \land
+\mathcode`\^^E="023A % \lnot
+\mathcode`\^^F="3232 % \in
+\mathcode`\^^G="0119 % \pi
+\mathcode`\^^H="0115 % \lambda
+\mathcode`\^^I="010D % \gamma
+\mathcode`\^^J="010E % \delta
+\mathcode`\^^K="3222 % \uparrow
+\mathcode`\^^L="2206 % \pm
+\mathcode`\^^M="2208 % \oplus
+\mathcode`\^^N="0231 % \infty
+\mathcode`\^^O="0140 % \partial
+\mathcode`\^^P="321A % \subset
+\mathcode`\^^Q="321B % \supset
+\mathcode`\^^R="225C % \cap
+\mathcode`\^^S="225B % \cup
+\mathcode`\^^T="0238 % \forall
+\mathcode`\^^U="0239 % \exists
+\mathcode`\^^V="220A % \otimes
+\mathcode`\^^W="3224 % \leftrightarrow
+\mathcode`\^^X="3220 % \leftarrow
+\mathcode`\^^Y="3221 % \rightarrow
+\mathcode`\^^Z="8000 % \ne
+\mathcode`\^^[="2205 % \diamond
+\mathcode`\^^\="3214 % \le
+\mathcode`\^^]="3215 % \ge
+\mathcode`\^^^="3211 % \equiv
+\mathcode`\^^_="225F % \lor
+\mathcode`\ ="8000 % \space
+\mathcode`\!="5021
+\mathcode`\'="8000 % ^\prime
+\mathcode`\(="4028
+\mathcode`\)="5029
+\mathcode`\*="2203 % \ast
+\mathcode`\+="202B
+\mathcode`\,="613B
+\mathcode`\-="2200
+\mathcode`\.="013A
+\mathcode`\/="013D
+\mathcode`\:="303A
+\mathcode`\;="603B
+\mathcode`\<="313C
+\mathcode`\=="303D
+\mathcode`\>="313E
+\mathcode`\?="503F
+\mathcode`\[="405B
+\mathcode`\\="026E % \backslash
+\mathcode`\]="505D
+\mathcode`\_="8000 % \_
+\mathcode`\{="4266
+\mathcode`\|="026A
+\mathcode`\}="5267
+\mathcode`\^^?="1273 % \smallint
+
+% INITEX sets \uccode`x=`X and \uccode `X=`X for all letters x,
+% and \lccode`x=`x, \lccode`X=`x; all other values are zero.
+% No changes to those tables are needed in plain TeX format.
+
+% INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999
+% for uppercase letters. The following changes are needed:
+\sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0
+% The \nonfrenchspacing macro will make further changes to \sfcode values.
+
+% Finally, INITEX sets all \delcode values to -1, except \delcode`.=0
+\delcode`\(="028300
+\delcode`\)="029301
+\delcode`\[="05B302
+\delcode`\]="05D303
+\delcode`\<="26830A
+\delcode`\>="26930B
+\delcode`\/="02F30E
+\delcode`\|="26A30C
+\delcode`\\="26E30F
+% N.B. { and } should NOT get delcodes; otherwise parameter grouping fails!
+
+% To make the plain macros more efficient in time and space,
+% several constant values are declared here as control sequences.
+% If they were changed, anything could happen; so they are private symbols.
+\chardef\@ne=1
+\chardef\tw@=2
+\chardef\thr@@=3
+\chardef\sixt@@n=16
+\chardef\@cclv=255
+\mathchardef\@cclvi=256
+\mathchardef\@m=1000
+\mathchardef\@M=10000
+\mathchardef\@MM=20000
+
+% Allocation of registers
+
+% Here are macros for the automatic allocation of \count, \box, \dimen,
+% \skip, \muskip, and \toks registers, as well as \read and \write
+% stream numbers, \fam codes, and \insert numbers.
+
+\message{registers,}
+
+% When a register is used only temporarily, it need not be allocated;
+% grouping can be used, making the value previously in the register return
+% after the close of the group. The main use of these macros is for
+% registers that are defined by one macro and used by others, possibly at
+% different nesting levels. All such registers should be defined through
+% these macros; otherwise conflicts may occur, especially when two or more
+% more macro packages are being used at once.
+
+% The following counters are reserved:
+% 0 to 9 page numbering
+% 10 count allocation
+% 11 dimen allocation
+% 12 skip allocation
+% 13 muskip allocation
+% 14 box allocation
+% 15 toks allocation
+% 16 read file allocation
+% 17 write file allocation
+% 18 math family allocation
+% 19 insert allocation
+% 20 the most recently allocated number
+% 21 constant -1
+% New counters are allocated starting with 22, 23, etc. Other registers are
+% allocated starting with 10. This leaves 0 through 9 for the user to play
+% with safely, except that counts 0 to 9 are considered to be the page and
+% subpage numbers (since they are displayed during output). In this scheme,
+% \count 10 always contains the number of the highest-numbered counter that
+% has been allocated, \count 14 the highest-numbered box, etc.
+% Inserts are given numbers 254, 253, etc., since they require a \count,
+% \dimen, \skip, and \box all with the same number; \count 19 contains the
+% lowest-numbered insert that has been allocated. Of course, \box255 is
+% reserved for \output; \count255, \dimen255, and \skip255 can be used freely.
+
+% It is recommends that macro designers always use
+% \global assignments with respect to registers numbered 1, 3, 5, 7, 9, and
+% always non-\global assignments with respect to registers 0, 2, 4, 6, 8, 255.
+% This will prevent ``save stack buildup'' that might otherwise occur.
+
+\count10=21 % allocates \count registers 22, 23, ...
+\count11=9 % allocates \dimen registers 10, 11, ...
+\count12=9 % allocates \skip registers 10, 11, ...
+\count13=9 % allocates \muskip registers 10, 11, ...
+\count14=9 % allocates \box registers 10, 11, ...
+\count15=9 % allocates \toks registers 10, 11, ...
+\count16=-1 % allocates input streams 0, 1, ...
+\count17=-1 % allocates output streams 0, 1, ...
+\count18=3 % allocates math families 4, 5, ...
+\count19=255 % allocates insertions 254, 253, ...
+\countdef\insc@unt=19 % the insertion counter
+\countdef\allocationnumber=20 % the most recent allocation
+\countdef\m@ne=21 \m@ne=-1 % a handy constant
+\def\wlog{\immediate\write\m@ne} % write on log file (only)
+
+% Here are abbreviations for the names of scratch registers
+% that don't need to be allocated.
+
+\countdef\count@=255
+\dimendef\dimen@=0
+\dimendef\dimen@i=1 % global only
+\dimendef\dimen@ii=2
+\skipdef\skip@=0
+\toksdef\toks@=0
+
+% Now, we define \newcount, \newbox, etc. so that you can say \newcount\foo
+% and \foo will be defined (with \countdef) to be the next counter.
+% To find out which counter \foo is, you can look at \allocationnumber.
+% Since there's no \boxdef command, \chardef is used to define a \newbox,
+% \newinsert, \newfam, and so on.
+
+\outer\def\newcount{\alloc@0\count\countdef\insc@unt}
+\outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
+\outer\def\newskip{\alloc@2\skip\skipdef\insc@unt}
+\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi}
+\outer\def\newbox{\alloc@4\box\chardef\insc@unt}
+\let\newtoks=\relax % we do this to allow plain.tex to be read in twice
+\outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}}
+\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi}
+\outer\def\newread{\alloc@6\read\chardef\sixt@@n}
+\outer\def\newwrite{\alloc@7\write\chardef\sixt@@n}
+\outer\def\newfam{\alloc@8\fam\chardef\sixt@@n}
+\def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne
+ \ch@ck#1#4#2% make sure there's still room
+ \allocationnumber=\count1#1%
+ \global#3#5=\allocationnumber
+ \wlog{\string#5=\string#2\the\allocationnumber}}
+\outer\def\newinsert#1{\global\advance\insc@unt by\m@ne
+ \ch@ck0\insc@unt\count
+ \ch@ck1\insc@unt\dimen
+ \ch@ck2\insc@unt\skip
+ \ch@ck4\insc@unt\box
+ \allocationnumber=\insc@unt
+ \global\chardef#1=\allocationnumber
+ \wlog{\string#1=\string\insert\the\allocationnumber}}
+\def\ch@ck#1#2#3{\ifnum\count1#1<#2%
+ \else\errmessage{No room for a new #3}\fi}
+
+% Here are some examples of allocation.
+\newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen>
+\newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow
+
+% LaTeX change: the PLAIN \centering dimension conflicts with
+% LaTeX's \centering command, so it is redefined to \@centering.
+% This dimension is used by LaTeX.
+
+\newskip\@centering \@centering=0pt plus 1000pt minus 1000pt
+
+\newdimen\p@ \p@=1pt % this saves macro space and time
+\newdimen\z@ \z@=0pt % can be used both for 0pt and 0
+\newskip\z@skip \z@skip=0pt plus0pt minus0pt
+\newbox\voidb@x % permanently void box register
+
+% And here's a different sort of allocation:
+% For example, \newif\iffoo creates \footrue, \foofalse to go with \iffoo.
+\outer\def\newif#1{\count@\escapechar \escapechar\m@ne
+ \expandafter\expandafter\expandafter
+ \edef\@if#1{true}{\let\noexpand#1=\noexpand\iftrue}%
+ \expandafter\expandafter\expandafter
+ \edef\@if#1{false}{\let\noexpand#1=\noexpand\iffalse}%
+ \@if#1{false}\escapechar\count@} % the condition starts out false
+\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}
+{\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required
+
+% Assign initial values to TeX's parameters
+
+\message{parameters,}
+
+% All of TeX's numeric parameters are listed here,
+% but the code is commented out if no special value needs to be set.
+% INITEX makes all parameters zero except where noted.
+
+\pretolerance=100
+\tolerance=200 % INITEX sets this to 10000
+\hbadness=1000
+\vbadness=1000
+\linepenalty=10
+\hyphenpenalty=50
+\exhyphenpenalty=50
+\binoppenalty=700
+\relpenalty=500
+\clubpenalty=150
+\widowpenalty=150
+\displaywidowpenalty=50
+\brokenpenalty=100
+\predisplaypenalty=10000
+% \postdisplaypenalty=0
+% \interlinepenalty=0
+% \floatingpenalty=0, set during \insert
+% \outputpenalty=0, set before TeX enters \output
+\doublehyphendemerits=10000
+\finalhyphendemerits=5000
+\adjdemerits=10000
+% \looseness=0, cleared by TeX after each paragraph
+% \pausing=0
+% \tracingonline=0
+% \tracingmacros=0
+% \tracingstats=0
+% \tracingparagraphs=0
+% \tracingpages=0
+% \tracingoutput=0
+\tracinglostchars=1
+% \tracingcommands=0
+% \tracingrestores=0
+\uchyph=1
+% \globaldefs=0
+% \maxdeadcycles=25 % INITEX does this
+% \hangafter=1 % INITEX does this, also TeX after each paragraph
+% \fam=0
+% \mag=1000 % INITEX does this
+% \escapechar=`\\ % INITEX does this
+\defaulthyphenchar=`\-
+\defaultskewchar=-1
+% \endlinechar=`\^^M % INITEX does this
+\newlinechar=-1
+\delimiterfactor=901
+% \time=now % TeX does this at beginning of job
+% \day=now % TeX does this at beginning of job
+% \month=now % TeX does this at beginning of job
+% \year=now % TeX does this at beginning of job
+\showboxbreadth=5
+\showboxdepth=3
+
+\hfuzz=0.1pt
+\vfuzz=0.1pt
+\overfullrule=5pt
+\hsize=6.5in
+\vsize=8.9in
+\maxdepth=4pt
+\splitmaxdepth=\maxdimen
+\boxmaxdepth=\maxdimen
+% \lineskiplimit=0pt, changed by \normalbaselines
+\delimitershortfall=5pt
+\nulldelimiterspace=1.2pt
+\scriptspace=0.5pt
+% \mathsurround=0pt
+% \predisplaysize=0pt, set before TeX enters $$
+% \displaywidth=0pt, set before TeX enters $$
+% \displayindent=0pt, set before TeX enters $$
+\parindent=20pt
+% \hangindent=0pt, zeroed by TeX after each paragraph
+% \hoffset=0pt
+% \voffset=0pt
+
+% \baselineskip=0pt, changed by \normalbaselines
+% \lineskip=0pt, changed by \normalbaselines
+\parskip=0pt plus 1pt
+\abovedisplayskip=12pt plus 3pt minus 9pt
+\abovedisplayshortskip=0pt plus 3pt
+\belowdisplayskip=12pt plus 3pt minus 9pt
+\belowdisplayshortskip=7pt plus 3pt minus 4pt
+% \leftskip=0pt
+% \rightskip=0pt
+\topskip=10pt
+\splittopskip=10pt
+% \tabskip=0pt
+% \spaceskip=0pt
+% \xspaceskip=0pt
+\parfillskip=0pt plus 1fil
+
+\thinmuskip=3mu
+\medmuskip=4mu plus 2mu minus 4mu
+\thickmuskip=5mu plus 5mu
+
+% We also define special registers that function like parameters:
+\newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt
+\newskip\medskipamount \medskipamount=6pt plus 2pt minus 2pt
+\newskip\bigskipamount \bigskipamount=12pt plus 4pt minus 4pt
+\newskip\normalbaselineskip \normalbaselineskip=12pt
+\newskip\normallineskip \normallineskip=1pt
+\newdimen\normallineskiplimit \normallineskiplimit=0pt
+\newdimen\jot \jot=3pt
+\newcount\interdisplaylinepenalty \interdisplaylinepenalty=100
+\newcount\interfootnotelinepenalty \interfootnotelinepenalty=100
+
+% Definitions for preloaded fonts
+
+\def\magstephalf{1095 }
+\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax}
+
+% Fonts assigned to \preloaded are not part of "plain TeX",
+% but they are preloaded so that other format packages can use them.
+% For example, if another set of macros says "\font\ninerm=cmr9",
+% TeX will not have to reload the font metric information for cmr9.
+
+% PS-LaTeX font definitions are taken from the file PSLFONTS.TEX,
+% so all of PLAIN's font definitions are commented out.
+
+%\message{fonts,}
+%
+%\font\tenrm=cmr10 % roman text
+%\font\preloaded=cmr9
+%\font\preloaded=cmr8
+%\font\sevenrm=cmr7
+%\font\preloaded=cmr6
+%\font\fiverm=cmr5
+%
+%\font\teni=cmmi10 % math italic
+%\font\preloaded=cmmi9
+%\font\preloaded=cmmi8
+%\font\seveni=cmmi7
+%\font\preloaded=cmmi6
+%\font\fivei=cmmi5
+%
+%\font\tensy=cmsy10 % math symbols
+%\font\preloaded=cmsy9
+%\font\preloaded=cmsy8
+%\font\sevensy=cmsy7
+%\font\preloaded=cmsy6
+%\font\fivesy=cmsy5
+%
+%\font\tenex=cmex10 % math extension
+%
+%\font\preloaded=cmss10 % sans serif
+%\font\preloaded=cmssq8
+%
+%\font\preloaded=cmssi10 % sans serif italic
+%\font\preloaded=cmssqi8
+%
+%\font\tenbf=cmbx10 % boldface extended
+%\font\preloaded=cmbx9
+%\font\preloaded=cmbx8
+%\font\sevenbf=cmbx7
+%\font\preloaded=cmbx6
+%\font\fivebf=cmbx5
+%
+%\font\tentt=cmtt10 % typewriter
+%\font\preloaded=cmtt9
+%\font\preloaded=cmtt8
+%
+%\font\preloaded=cmsltt10 % slanted typewriter
+%
+%\font\tensl=cmsl10 % slanted roman
+%\font\preloaded=cmsl9
+%\font\preloaded=cmsl8
+%
+%\font\tenit=cmti10 % text italic
+%\font\preloaded=cmti9
+%\font\preloaded=cmti8
+%\font\preloaded=cmti7
+%
+%\message{more fonts,}
+%\font\preloaded=cmu10 % unslanted text italic
+%
+%\font\preloaded=cmmib10 % bold math italic
+%\font\preloaded=cmbsy10 % bold math symbols
+%
+%\font\preloaded=cmcsc10 % caps and small caps
+%
+%\font\preloaded=cmssbx10 % sans serif bold extended
+%
+%\font\preloaded=cmdunh10 % Dunhill style
+%
+%\font\preloaded=cmr7 scaled \magstep4 % for titles
+%\font\preloaded=cmtt10 scaled \magstep2
+%\font\preloaded=cmssbx10 scaled \magstep2
+%
+%\font\preloaded=manfnt % METAFONT logo and dragon curve and special symbols
+%
+%% Additional \preloaded fonts can be specified here.
+%% (And those that were \preloaded above can be eliminated.)
+%
+%\let\preloaded=\undefined % preloaded fonts must be declared anew later.
+%
+%\skewchar\teni='177 \skewchar\seveni='177 \skewchar\fivei='177
+%\skewchar\tensy='60 \skewchar\sevensy='60 \skewchar\fivesy='60
+%
+%\textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
+%\def\rm{\fam\z@\tenrm}
+%\textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
+%\def\mit{\fam\@ne} \def\oldstyle{\fam\@ne\teni}
+%\textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
+%\def\cal{\fam\tw@}
+%\textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
+%\newfam\itfam \def\it{\fam\itfam\tenit} % \it is family 4
+%\textfont\itfam=\tenit
+%\newfam\slfam \def\sl{\fam\slfam\tensl} % \sl is family 5
+%\textfont\slfam=\tensl
+%\newfam\bffam \def\bf{\fam\bffam\tenbf} % \bf is family 6
+%\textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
+%\scriptscriptfont\bffam=\fivebf
+%\newfam\ttfam \def\tt{\fam\ttfam\tentt} % \tt is family 7
+%\textfont\ttfam=\tentt
+
+% Macros for setting ordinary text
+\message{macros,}
+
+\def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
+ \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
+\def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }
+
+\def\normalbaselines{\lineskip\normallineskip
+ \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit}
+
+\def\^^M{\ } % control <return> = control <space>
+\def\^^I{\ } % same for <tab>
+
+\def\lq{`} \def\rq{'}
+\def\lbrack{[} \def\rbrack{]}
+
+\let\endgraf=\par \let\endline=\cr
+
+\def\space{ }
+\def\empty{}
+\def\null{\hbox{}}
+
+\let\bgroup={ \let\egroup=}
+
+% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}'
+% since this allows, for example, `\let\par=\cr \obeylines \halign{...'
+{\catcode`\^^M=\active % these lines must end with %
+ \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
+ \global\let^^M\par} % this is in case ^^M appears in a \write
+\def\obeyspaces{\catcode`\ \active}
+{\obeyspaces\global\let =\space}
+
+\def\loop#1\repeat{\def\body{#1}\iterate}
+\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
+\let\repeat=\fi % this makes \loop...\if...\repeat skippable
+
+\def\thinspace{\kern .16667em }
+\def\negthinspace{\kern-.16667em }
+\def\enspace{\kern.5em }
+
+\def\enskip{\hskip.5em\relax}
+\def\quad{\hskip1em\relax}
+\def\qquad{\hskip2em\relax}
+
+\def\smallskip{\vskip\smallskipamount}
+\def\medskip{\vskip\medskipamount}
+\def\bigskip{\vskip\bigskipamount}
+
+\def\nointerlineskip{\prevdepth-1000\p@}
+\def\offinterlineskip{\baselineskip-1000\p@
+ \lineskip\z@ \lineskiplimit\maxdimen}
+
+\def\vglue{\afterassignment\vgl@\skip@=}
+\def\vgl@{\par \dimen@\prevdepth \hrule height\z@
+ \nobreak\vskip\skip@ \prevdepth\dimen@}
+\def\hglue{\afterassignment\hgl@\skip@=}
+\def\hgl@{\leavevmode \count@\spacefactor \vrule width\z@
+ \nobreak\hskip\skip@ \spacefactor\count@}
+
+\def~{\penalty\@M \ } % tie
+\def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-'
+
+\def\break{\penalty-\@M}
+\def\nobreak{\penalty \@M}
+\def\allowbreak{\penalty \z@}
+
+\def\filbreak{\par\vfil\penalty-200\vfilneg}
+\def\goodbreak{\par\penalty-500 }
+\def\eject{\par\break}
+\def\supereject{\par\penalty-\@MM}
+
+\def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi}
+\def\smallbreak{\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi}
+\def\medbreak{\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi}
+\def\bigbreak{\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi}
+
+% \line changed to \@@line because LaTeX redefines \line
+\def\@@line{\hbox to\hsize}
+\def\leftline#1{\@@line{#1\hss}}
+\def\rightline#1{\@@line{\hss#1}}
+\def\centerline#1{\@@line{\hss#1\hss}}
+% end of LaTeX \line -> \@@line change
+
+\def\rlap#1{\hbox to\z@{#1\hss}}
+\def\llap#1{\hbox to\z@{\hss#1}}
+
+\def\m@th{\mathsurround=\z@}
+\def\underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@
+ \m@th \underline{\box\z@}$}
+
+\newbox\strutbox
+\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}
+\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
+
+\def\hidewidth{\hskip\hideskip} % for alignment entries that can stick out
+\def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign
+\newcount\mscount
+\def\multispan#1{\omit \mscount#1
+ \loop\ifnum\mscount>\@ne \sp@n\repeat}
+\def\sp@n{\span\omit\advance\mscount\m@ne}
+
+% LaTeX has its own tabbing environment, so PLAIN's is disabled.
+%
+%\newif\ifus@ \newif\if@cr
+%\newbox\tabs \newbox\tabsyet \newbox\tabsdone
+%
+%\def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null}
+%\def\settabs{\setbox\tabs\null \futurelet\next\sett@b}
+%\let\+=\relax % in case this file is being read in twice
+%\def\sett@b{\ifx\next\+\let\next\relax
+% \def\next{\afterassignment\s@tt@b\let\next}%
+% \else\let\next\s@tcols\fi\next}
+%\def\s@tt@b{\let\next\relax\us@false\m@ketabbox}
+%\def\tabalign{\us@true\m@ketabbox} % non-\outer version of \+
+%\outer\def\+{\tabalign}
+%\def\s@tcols#1\columns{\count@#1 \dimen@\hsize
+% \loop\ifnum\count@>\z@ \@nother \repeat}
+%\def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@
+% \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}%
+% \advance\dimen@-\dimen@ii \advance\count@\m@ne}
+%
+%\def\m@ketabbox{\begingroup
+% \global\setbox\tabsyet\copy\tabs
+% \global\setbox\tabsdone\null
+% \def\cr{\@crtrue\crcr\egroup\egroup
+% \ifus@\unvbox\z@\lastbox\fi\endgroup
+% \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}%
+% \setbox\z@\vbox\bgroup\@crfalse
+% \ialign\bgroup&\t@bbox##\t@bb@x\crcr}
+%
+%\def\t@bbox{\setbox\z@\hbox\bgroup}
+%\def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column
+% \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet
+% \global\setbox\@ne\lastbox}% now \box\@ne holds its size
+% \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}%
+% \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi
+% \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi
+% \box\z@}
+
+\def\hang{\hangindent\parindent}
+\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
+\def\item{\par\hang\textindent}
+\def\itemitem{\par\indent \hangindent2\parindent \textindent}
+\def\narrower{\advance\leftskip\parindent
+ \advance\rightskip\parindent}
+
+% LaTeX has its own sectioning macros
+%\outer\def\beginsection#1\par{\filbreak\bigskip
+% \message{#1}\leftline{\bf#1}\nobreak\smallskip\vskip-\parskip
+% \noindent}
+
+\outer\def\proclaim #1. #2\par{\medbreak
+ \noindent{\bf#1.\enspace}{\sl#2}\par
+ \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}
+
+\def\raggedright{\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em }
+\def\ttraggedright{\tt\rightskip\z@ plus2em } % for use with \tt only
+
+\chardef\%=`\%
+\chardef\&=`\&
+\chardef\#=`\#
+\chardef\$=`\$
+\chardef\ss="19
+\chardef\ae="1A
+\chardef\oe="1B
+\chardef\o="1C
+\chardef\AE="1D
+\chardef\OE="1E
+\chardef\O="1F
+\chardef\i="10 \chardef\j="11 % dotless letters
+\def\aa{\accent23a}
+\def\l{\char32l}
+\def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}
+
+\def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary
+\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}}
+\def\AA{\leavevmode\setbox0\hbox{h}\dimen@\ht0\advance\dimen@-1ex%
+ \rlap{\raise.67\dimen@\hbox{\char'27}}A}
+
+\def\mathhexbox#1#2#3{\leavevmode
+ \hbox{$\m@th \mathchar"#1#2#3$}}
+\def\dag{\mathhexbox279}
+\def\ddag{\mathhexbox27A}
+\def\S{\mathhexbox278}
+\def\P{\mathhexbox27B}
+
+\def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex%
+ \ialign{##\crcr#1\crcr}}} % put characters over each other
+\def\ooalign{\lineskiplimit-\maxdimen \oalign}
+
+% LaTeX change: \d, \b, \c redefined to work in a moving argument.
+\def\pd#1{\oalign{#1\crcr\hidewidth.\hidewidth}}
+\def\d{\protect\pd}
+
+\def\pb#1{\oalign{#1\crcr\hidewidth
+ \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}
+\def\b{\protect\pb}
+
+\def\pc#1{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
+ \else{\ooalign{\hidewidth\char24\hidewidth\crcr\unhbox\z@}}\fi}
+\def\c{\protect\pc}
+% end of LaTeX change to \d, \b, \c
+
+\def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\mathhexbox20D}}}
+
+% LaTeX change: \ldots is redefined to do essentially what Plain's \dots does,
+% so ...
+\def\dots{\ldots}
+
+\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}
+
+\def\`#1{{\accent18 #1}}
+\def\'#1{{\accent19 #1}}
+\def\v#1{{\accent20 #1}} \let\^^_=\v
+\def\u#1{{\accent21 #1}} \let\^^S=\u
+\def\=#1{{\accent22 #1}}
+\def\^#1{{\accent94 #1}} \let\^^D=\^
+\def\.#1{{\accent95 #1}}
+\def\H#1{{\accent"7D #1}}
+\def\~#1{{\accent"7E #1}}
+\def\"#1{{\accent"7F #1}}
+
+% LaTeX change: Make \t work in a moving argument.
+\def\pt#1{{\edef\next{\the\font}\the\textfont1\accent"7F\next#1}}
+\def\t{\protect\pt}
+
+\def\hrulefill{\leaders\hrule\hfill}
+\def\dotfill{\cleaders\hbox{$\m@th \mkern1.5mu.\mkern1.5mu$}\hfill}
+\def\rightarrowfill{$\m@th\mathord-\mkern-6mu%
+ \cleaders\hbox{$\mkern-2mu\mathord-\mkern-2mu$}\hfill
+ \mkern-6mu\mathord\rightarrow$}
+\def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-6mu%
+ \cleaders\hbox{$\mkern-2mu\mathord-\mkern-2mu$}\hfill
+ \mkern-6mu\mathord-$}
+\mathchardef\braceld="37A \mathchardef\bracerd="37B
+\mathchardef\bracelu="37C \mathchardef\braceru="37D
+\def\downbracefill{$\m@th\braceld\leaders\vrule\hfill\braceru
+ \bracelu\leaders\vrule\hfill\bracerd$}
+\def\upbracefill{$\m@th\bracelu\leaders\vrule\hfill\bracerd
+ \braceld\leaders\vrule\hfill\braceru$}
+
+% LaTeX change: \bye is eliminated.
+%\outer\def\bye{\par\vfill\supereject\end}
+
+% Macros for math setting
+\message{math definitions,}
+
+\let\sp=^ \let\sb=_
+\def\,{\mskip\thinmuskip}
+\def\>{\mskip\medmuskip}
+\def\;{\mskip\thickmuskip}
+\def\!{\mskip-\thinmuskip}
+\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}}
+{\catcode`\'=\active \gdef'{^\bgroup\prim@s}}
+\def\prim@s{\prime\futurelet\next\pr@m@s}
+\def\pr@m@s{\ifx'\next\let\next\pr@@@s \else\ifx^\next\let\next\pr@@@t
+ \else\let\next\egroup\fi\fi \next}
+\def\pr@@@s#1{\prim@s} \def\pr@@@t#1#2{#2\egroup}
+{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math
+{\catcode`\_=\active \let_=\_} % _ is like \_ if not used for subscripts
+
+\mathchardef\alpha="010B
+\mathchardef\beta="010C
+\mathchardef\gamma="010D
+\mathchardef\delta="010E
+\mathchardef\epsilon="010F
+\mathchardef\zeta="0110
+\mathchardef\eta="0111
+\mathchardef\theta="0112
+\mathchardef\iota="0113
+\mathchardef\kappa="0114
+\mathchardef\lambda="0115
+\mathchardef\mu="0116
+\mathchardef\nu="0117
+\mathchardef\xi="0118
+\mathchardef\pi="0119
+\mathchardef\rho="011A
+\mathchardef\sigma="011B
+\mathchardef\tau="011C
+\mathchardef\upsilon="011D
+\mathchardef\phi="011E
+\mathchardef\chi="011F
+\mathchardef\psi="0120
+\mathchardef\omega="0121
+\mathchardef\varepsilon="0122
+\mathchardef\vartheta="0123
+\mathchardef\varpi="0124
+\mathchardef\varrho="0125
+\mathchardef\varsigma="0126
+\mathchardef\varphi="0127
+\mathchardef\Gamma="7000
+\mathchardef\Delta="7001
+\mathchardef\Theta="7002
+\mathchardef\Lambda="7003
+\mathchardef\Xi="7004
+\mathchardef\Pi="7005
+\mathchardef\Sigma="7006
+\mathchardef\Upsilon="7007
+\mathchardef\Phi="7008
+\mathchardef\Psi="7009
+\mathchardef\Omega="700A
+
+\mathchardef\aleph="0240
+\def\hbar{{\mathchar'26\mkern-9muh}}
+\mathchardef\imath="017B
+\mathchardef\jmath="017C
+\mathchardef\ell="0160
+\mathchardef\wp="017D
+\mathchardef\Re="023C
+\mathchardef\Im="023D
+\mathchardef\partial="0140
+\mathchardef\infty="0231
+\mathchardef\prime="0230
+\mathchardef\emptyset="023B
+\mathchardef\nabla="0272
+\def\surd{{\mathchar"1270}}
+\mathchardef\top="023E
+\mathchardef\bot="023F
+\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr
+ \not\mathrel{\mkern14mu}\crcr
+ \noalign{\nointerlineskip}
+ \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}}
+\mathchardef\triangle="0234
+\mathchardef\forall="0238
+\mathchardef\exists="0239
+\mathchardef\neg="023A \let\lnot=\neg
+\mathchardef\flat="015B
+\mathchardef\natural="015C
+\mathchardef\sharp="015D
+\mathchardef\clubsuit="027C
+\mathchardef\diamondsuit="027D
+\mathchardef\heartsuit="027E
+\mathchardef\spadesuit="027F
+
+\mathchardef\coprod="1360
+\mathchardef\bigvee="1357
+\mathchardef\bigwedge="1356
+\mathchardef\biguplus="1355
+\mathchardef\bigcap="1354
+\mathchardef\bigcup="1353
+\mathchardef\intop="1352 \def\int{\intop\nolimits}
+\mathchardef\prod="1351
+\mathchardef\sum="1350
+\mathchardef\bigotimes="134E
+\mathchardef\bigoplus="134C
+\mathchardef\bigodot="134A
+\mathchardef\ointop="1348 \def\oint{\ointop\nolimits}
+\mathchardef\bigsqcup="1346
+\mathchardef\smallint="1273
+
+\mathchardef\triangleleft="212F
+\mathchardef\triangleright="212E
+\mathchardef\bigtriangleup="2234
+\mathchardef\bigtriangledown="2235
+\mathchardef\wedge="225E \let\land=\wedge
+\mathchardef\vee="225F \let\lor=\vee
+\mathchardef\cap="225C
+\mathchardef\cup="225B
+\mathchardef\ddagger="227A
+\mathchardef\dagger="2279
+\mathchardef\sqcap="2275
+\mathchardef\sqcup="2274
+\mathchardef\uplus="225D
+\mathchardef\amalg="2271
+\mathchardef\diamond="2205
+\mathchardef\bullet="220F
+\mathchardef\wr="226F
+\mathchardef\div="2204
+\mathchardef\odot="220C
+\mathchardef\oslash="220B
+\mathchardef\otimes="220A
+\mathchardef\ominus="2209
+\mathchardef\oplus="2208
+\mathchardef\mp="2207
+\mathchardef\pm="2206
+\mathchardef\circ="220E
+\mathchardef\bigcirc="220D
+\mathchardef\setminus="226E % for set difference A\setminus B
+\mathchardef\cdot="2201
+\mathchardef\ast="2203
+\mathchardef\times="2202
+\mathchardef\star="213F
+
+\mathchardef\propto="322F
+\mathchardef\sqsubseteq="3276
+\mathchardef\sqsupseteq="3277
+\mathchardef\parallel="326B
+\mathchardef\mid="326A
+\mathchardef\dashv="3261
+\mathchardef\vdash="3260
+\mathchardef\nearrow="3225
+\mathchardef\searrow="3226
+\mathchardef\nwarrow="322D
+\mathchardef\swarrow="322E
+\mathchardef\Leftrightarrow="322C
+\mathchardef\Leftarrow="3228
+\mathchardef\Rightarrow="3229
+\def\neq{\not=} \let\ne=\neq
+\mathchardef\leq="3214 \let\le=\leq
+\mathchardef\geq="3215 \let\ge=\geq
+\mathchardef\succ="321F
+\mathchardef\prec="321E
+\mathchardef\approx="3219
+\mathchardef\succeq="3217
+\mathchardef\preceq="3216
+\mathchardef\supset="321B
+\mathchardef\subset="321A
+\mathchardef\supseteq="3213
+\mathchardef\subseteq="3212
+\mathchardef\in="3232
+\mathchardef\ni="3233 \let\owns=\ni
+\mathchardef\gg="321D
+\mathchardef\ll="321C
+\mathchardef\not="3236
+\mathchardef\leftrightarrow="3224
+\mathchardef\leftarrow="3220 \let\gets=\leftarrow
+\mathchardef\rightarrow="3221 \let\to=\rightarrow
+\mathchardef\mapstochar="3237 \def\mapsto{\mapstochar\rightarrow}
+\mathchardef\sim="3218
+\mathchardef\simeq="3227
+\mathchardef\perp="323F
+\mathchardef\equiv="3211
+\mathchardef\asymp="3210
+\mathchardef\smile="315E
+\mathchardef\frown="315F
+\mathchardef\leftharpoonup="3128
+\mathchardef\leftharpoondown="3129
+\mathchardef\rightharpoonup="312A
+\mathchardef\rightharpoondown="312B
+
+\def\joinrel{\mathrel{\mkern-3mu}}
+\def\relbar{\mathrel{\smash-}} % \smash, because - has the same height as +
+\def\Relbar{\mathrel=}
+\mathchardef\lhook="312C \def\hookrightarrow{\lhook\joinrel\rightarrow}
+\mathchardef\rhook="312D \def\hookleftarrow{\leftarrow\joinrel\rhook}
+\def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft}
+\def\models{\mathrel|\joinrel=}
+\def\Longrightarrow{\Relbar\joinrel\Rightarrow}
+
+% LaTeX Change: \longrightarrow and \longleftarrow redefined to make
+% then robust.
+\def\longrightarrow{\protect\@lra}
+ \def\@lra{\relbar\joinrel\rightarrow}
+\def\longleftarrow{\protect\@lla}
+ \def\@lla{\leftarrow\joinrel\relbar}
+% End of LaTeX change to \longrightarrow and \longleftarrow
+
+\def\Longleftarrow{\Leftarrow\joinrel\Relbar}
+\def\longmapsto{\mapstochar\longrightarrow}
+\def\longleftrightarrow{\leftarrow\joinrel\rightarrow}
+\def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow}
+\def\iff{\;\Longleftrightarrow\;}
+
+\mathchardef\ldotp="602E % ldot as a punctuation mark
+\mathchardef\cdotp="6201 % cdot as a punctuation mark
+\mathchardef\colon="603A % colon as a punctuation mark
+
+% LaTeX change: make \ldots work outside math mode too.
+\def\@ldots{\mathinner{\ldotp\ldotp\ldotp}}
+\def\ldots{\protect\pldots}
+\def\pldots{\relax\ifmmode\@ldots\else\mbox{$\@ldots\,$}\fi}
+% End of LaTeX change to \ldots
+
+\def\cdots{\mathinner{\cdotp\cdotp\cdotp}}
+\def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@
+ \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
+\def\ddots{\mathinner{\mkern1mu\raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu
+ \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}}
+
+\def\acute{\mathaccent"7013 }
+\def\grave{\mathaccent"7012 }
+\def\ddot{\mathaccent"707F }
+\def\tilde{\mathaccent"707E }
+\def\bar{\mathaccent"7016 }
+\def\breve{\mathaccent"7015 }
+\def\check{\mathaccent"7014 }
+\def\hat{\mathaccent"705E }
+\def\vec{\mathaccent"017E }
+\def\dot{\mathaccent"705F }
+\def\widetilde{\mathaccent"0365 }
+\def\widehat{\mathaccent"0362 }
+\def\overrightarrow#1{\vbox{\ialign{##\crcr
+ \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}
+\def\overleftarrow#1{\vbox{\ialign{##\crcr
+ \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}
+\def\overbrace#1{\mathop{\vbox{\ialign{##\crcr\noalign{\kern3\p@}
+ \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits}
+\def\underbrace#1{\mathop{\vtop{\ialign{##\crcr
+ $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip}
+ \upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
+\def\skew#1#2#3{{#2{#3\mkern#1mu}\mkern-#1mu}{}}
+
+\def\lmoustache{\delimiter"4000340 } % top from (, bottom from )
+\def\rmoustache{\delimiter"5000341 } % top from ), bottom from (
+\def\lgroup{\delimiter"400033A } % extensible ( with sharper tips
+\def\rgroup{\delimiter"500033B } % extensible ) with sharper tips
+\def\arrowvert{\delimiter"33C } % arrow without arrowheads
+\def\Arrowvert{\delimiter"33D } % double arrow without arrowheads
+\def\bracevert{\delimiter"33E } % the vertical bar that extends braces
+\def\Vert{\delimiter"26B30D } \let\|=\Vert
+\def\vert{\delimiter"26A30C }
+\def\uparrow{\delimiter"3222378 }
+\def\downarrow{\delimiter"3223379 }
+\def\updownarrow{\delimiter"326C33F }
+\def\Uparrow{\delimiter"322A37E }
+\def\Downarrow{\delimiter"322B37F }
+\def\Updownarrow{\delimiter"326D377 }
+\def\backslash{\delimiter"26E30F } % for double coset G\backslash H
+\def\rangle{\delimiter"526930B }
+\def\langle{\delimiter"426830A }
+\def\rbrace{\delimiter"5267309 } \let\}=\rbrace
+\def\lbrace{\delimiter"4266308 } \let\{=\lbrace
+\def\rceil{\delimiter"5265307 }
+\def\lceil{\delimiter"4264306 }
+\def\rfloor{\delimiter"5263305 }
+\def\lfloor{\delimiter"4262304 }
+
+\def\bigl{\mathopen\big}
+\def\bigm{\mathrel\big}
+\def\bigr{\mathclose\big}
+\def\Bigl{\mathopen\Big}
+\def\Bigm{\mathrel\Big}
+\def\Bigr{\mathclose\Big}
+\def\biggl{\mathopen\bigg}
+\def\biggm{\mathrel\bigg}
+\def\biggr{\mathclose\bigg}
+\def\Biggl{\mathopen\Bigg}
+\def\Biggm{\mathrel\Bigg}
+\def\Biggr{\mathclose\Bigg}
+\def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}
+\def\n@space{\nulldelimiterspace\z@ \m@th}
+
+\def\choose{\atopwithdelims()}
+\def\brack{\atopwithdelims[]}
+\def\brace{\atopwithdelims\{\}}
+
+\def\sqrt{\radical"270370 }
+
+\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}%
+ {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}}
+\newbox\rootbox
+\def\root#1\of{\setbox\rootbox\hbox{$\m@th\scriptscriptstyle{#1}$}
+ \mathpalette\r@@t}
+\def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}
+ \dimen@\ht\z@ \advance\dimen@-\dp\z@
+ \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-10mu \box\z@}
+\newif\ifv@ \newif\ifh@
+\def\vphantom{\v@true\h@false\ph@nt}
+\def\hphantom{\v@false\h@true\ph@nt}
+\def\phantom{\v@true\h@true\ph@nt}
+\def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}%
+ \else\let\next\makeph@nt\fi\next}
+\def\makeph@nt#1{\setbox\z@\hbox{#1}\finph@nt}
+\def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
+\def\finph@nt{\setbox\tw@\null
+ \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
+ \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
+\def\mathstrut{\vphantom(}
+\def\smash{\relax % \relax, in case this comes first in \halign
+ \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh
+ \fi\next}
+\def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh}
+\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh}
+\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
+
+\def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign
+\def\@vereq#1#2{\lower.5\p@\vbox{\baselineskip\z@skip\lineskip-.5\p@
+ \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}}
+\def\notin{\mathrel{\mathpalette\c@ncel\in}}
+\def\c@ncel#1#2{\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}}
+\def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}}
+\def\rlh@#1{\vcenter{\hbox{\ooalign{\raise2pt
+ \hbox{$#1\rightharpoonup$}\crcr
+ $#1\leftharpoondown$}}}}
+\def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
+\def\doteq{\buildrel\textstyle.\over=}
+
+\def\log{\mathop{\rm log}\nolimits}
+\def\lg{\mathop{\rm lg}\nolimits}
+\def\ln{\mathop{\rm ln}\nolimits}
+\def\lim{\mathop{\rm lim}}
+\def\limsup{\mathop{\rm lim\,sup}}
+\def\liminf{\mathop{\rm lim\,inf}}
+\def\sin{\mathop{\rm sin}\nolimits}
+\def\arcsin{\mathop{\rm arcsin}\nolimits}
+\def\sinh{\mathop{\rm sinh}\nolimits}
+\def\cos{\mathop{\rm cos}\nolimits}
+\def\arccos{\mathop{\rm arccos}\nolimits}
+\def\cosh{\mathop{\rm cosh}\nolimits}
+\def\tan{\mathop{\rm tan}\nolimits}
+\def\arctan{\mathop{\rm arctan}\nolimits}
+\def\tanh{\mathop{\rm tanh}\nolimits}
+\def\cot{\mathop{\rm cot}\nolimits}
+\def\coth{\mathop{\rm coth}\nolimits}
+\def\sec{\mathop{\rm sec}\nolimits}
+\def\csc{\mathop{\rm csc}\nolimits}
+\def\max{\mathop{\rm max}}
+\def\min{\mathop{\rm min}}
+\def\sup{\mathop{\rm sup}}
+\def\inf{\mathop{\rm inf}}
+\def\arg{\mathop{\rm arg}\nolimits}
+\def\ker{\mathop{\rm ker}\nolimits}
+\def\dim{\mathop{\rm dim}\nolimits}
+\def\hom{\mathop{\rm hom}\nolimits}
+\def\det{\mathop{\rm det}}
+\def\exp{\mathop{\rm exp}\nolimits}
+\def\Pr{\mathop{\rm Pr}}
+\def\gcd{\mathop{\rm gcd}}
+\def\deg{\mathop{\rm deg}\nolimits}
+
+\def\bmod{\mskip-\medmuskip\mkern5mu
+ \mathbin{\rm mod}\penalty900\mkern5mu\mskip-\medmuskip}
+\def\pmod#1{\allowbreak\mkern18mu({\rm mod}\,\,#1)}
+
+\def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th
+ \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.}
+\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
+ \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
+ \mathstrut\crcr\noalign{\kern-\baselineskip}
+ #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
+\def\pmatrix#1{\left(\matrix{#1}\right)}
+\newdimen\p@renwd
+
+% PS-LaTeX: following command is moved after the \tenex font is defined
+% by PSLFONTS
+%\setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left (
+
+\def\bordermatrix#1{\begingroup \m@th
+ \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}%
+ \ialign{$##$\hfil\kern2\p@\kern\p@renwd&\thinspace\hfil$##$\hfil
+ &&\quad\hfil$##$\hfil\crcr
+ \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}%
+ #1\crcr\omit\strut\cr}}%
+ \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}%
+ \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}%
+ \setbox\tw@\hbox{$\kern\wd\@ne\kern-\p@renwd\left(\kern-\wd\@ne
+ \global\setbox\@ne\vbox{\box\@ne\kern2\p@}%
+ \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}%
+ \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup}
+
+\def\openup{\afterassignment\@penup\dimen@=}
+\def\@penup{\advance\lineskip\dimen@
+ \advance\baselineskip\dimen@
+ \advance\lineskiplimit\dimen@}
+
+% LaTeX change: \eqalign eliminated, since it is replaced by the
+% eqnarray environment.
+%
+%\def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
+% \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
+% \crcr#1\crcr}}\,}
+
+\newif\ifdt@p
+\def\displ@y{\global\dt@ptrue\openup\jot\m@th
+ \everycr{\noalign{\ifdt@p \global\dt@pfalse
+ \vskip-\lineskiplimit \vskip\normallineskiplimit
+ \else \penalty\interdisplaylinepenalty \fi}}}
+\def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y
+\def\displaylines#1{\displ@y
+ \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr
+ #1\crcr}}
+
+% LaTeX: The following \eqalign type macros are eliminated, since
+% they are replaced by the eqnarray environment.
+%
+%\def\eqalignno#1{\displ@y \tabskip\centering
+% \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
+% &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
+% &\llap{$\@lign##$}\tabskip\z@skip\crcr
+% #1\crcr}}
+%\def\leqalignno#1{\displ@y \tabskip\centering
+% \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip
+% &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering
+% &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr
+% #1\crcr}}
+
+% Definitions related to output
+
+% LaTeX uses its own output routine
+%
+%\message{output routines,}
+%
+%\countdef\pageno=0 \pageno=1 % first page is number 1
+%\newtoks\headline \headline={\hfil} % headline is normally blank
+%\newtoks\footline \footline={\hss\tenrm\folio\hss}
+% % footline is normally a centered page number in font \tenrm
+%\newif\ifr@ggedbottom
+%\def\raggedbottom{\topskip 10\p@ plus60\p@ \r@ggedbottomtrue}
+%\def\normalbottom{\topskip 10\p@ \r@ggedbottomfalse} % undoes \raggedbottom
+%\def\folio{\ifnum\pageno<\z@ \romannumeral-\pageno \else\number\pageno \fi}
+%\def\nopagenumbers{\footline{\hfil}} % blank out the footline
+%\def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne
+% \else\global\advance\pageno\@ne \fi} % increase |pageno|
+
+% LaTeX does use the same insert for footnotes as PLAIN
+\newinsert\footins
+
+%\def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later
+% \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+% #1\@sf\vfootnote{#1}}
+%\def\vfootnote#1{\insert\footins\bgroup
+% \interlinepenalty\interfootnotelinepenalty
+% \splittopskip\ht\strutbox % top baseline for broken footnotes
+% \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
+% \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
+% \textindent{#1}\footstrut\futurelet\next\fo@t}
+%\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t
+% \else\let\next\f@t\fi \next}
+%\def\f@@t{\bgroup\aftergroup\@foot\let\next}
+%\def\f@t#1{#1\@foot}
+%\def\@foot{\strut\egroup}
+%\def\footstrut{\vbox to\splittopskip{}}
+
+% LaTeX leaves these initializations for the \footins insert.
+%
+\skip\footins=\bigskipamount % space added when footnote is present
+\count\footins=1000 % footnote magnification factor (1 to 1)
+\dimen\footins=8in % maximum footnotes per page
+
+%\newinsert\topins
+%\newif\ifp@ge \newif\if@mid
+%\def\topinsert{\@midfalse\p@gefalse\@ins}
+%\def\midinsert{\@midtrue\@ins}
+%\def\pageinsert{\@midfalse\p@getrue\@ins}
+%\skip\topins=\z@skip % no space added when a topinsert is present
+%\count\topins=1000 % magnification factor (1 to 1)
+%\dimen\topins=\maxdimen % no limit per page
+%\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox
+%\def\endinsert{\egroup % finish the \vbox
+% \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@
+% \advance\dimen@12\p@ \advance\dimen@\pagetotal
+% \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
+% \if@mid \bigskip\box\z@\bigbreak
+% \else\insert\topins{\penalty100 % floating insertion
+% \splittopskip\z@skip
+% \splitmaxdepth\maxdimen \floatingpenalty\z@
+% \ifp@ge \dimen@\dp\z@
+% \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero
+% \else \box\z@\nobreak\bigskip\fi}\fi\endgroup}
+
+%\output{\plainoutput}
+%\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
+% \advancepageno
+% \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+%\def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}}
+%\def\makeheadline{\vbox to\z@{\vskip-22.5\p@
+% \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip}
+%\def\makefootline{\baselineskip24\p@\line{\the\footline}}
+%\def\dosupereject{\ifnum\insertpenalties>\z@ % something is being held over
+% \line{}\kern-\topskip\nobreak\vfill\supereject\fi}
+%
+%\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi
+% \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255
+% \ifvoid\footins\else % footnote info is present
+% \vskip\skip\footins
+% \footnoterule
+% \unvbox\footins\fi
+% \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+
+% LaTeX keeps PLAIN TeX's \footnoterule as the default
+%
+\def\footnoterule{\kern-3\p@
+ \hrule width 2truein \kern 2.6\p@} % the \hrule is .4pt high
+
+% Hyphenation, miscellaneous macros, and initial values for standard layout
+\message{hyphenation}
+
+\input hyphen
+
+% \magnification doesn't work in LaTeX
+%
+%\def\magnification{\afterassignment\m@g\count@}
+%\def\m@g{\mag\count@
+% \hsize6.5truein\vsize8.9truein\dimen\footins8truein}
+
+\def\tracingall{\tracingonline\@ne\tracingcommands\tw@\tracingstats\tw@
+ \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne
+ \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
+ \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode}
+
+\def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen\tenrm
+ \pretolerance\m@ne\tolerance\m@ne\hbadness0\showboxdepth0\ #1}}
+
+% input LaTeX fonts and commands
+
+\input ps-lfonts
+\input ps-latex
+
+% LaTeX change: moved from above.
+\setbox0=\hbox{\tenex B} \p@renwd=\wd0 % width of the big left (
+
+% LaTeX: default values
+\normalbaselines
+% LaTeX: select 10pt font size and \rm style
+\xpt
+
+\nonfrenchspacing % punctuation affects the spacing
+\catcode`@=12 % at signs are no longer letters
+
+% PS-LaTeX: File called PSLPLAIN
+\def\fmtname{pslplain}
+\def\fmtversion{2.09PS-19-Sep-1988} % identifies the current format
+\typeout{Input any local modifications here.}
diff --git a/macros/latex209/contrib/rus/ruspaper.sty b/macros/latex209/contrib/rus/ruspaper.sty
new file mode 100644
index 0000000000..9d0d595409
--- /dev/null
+++ b/macros/latex209/contrib/rus/ruspaper.sty
@@ -0,0 +1,320 @@
+
+% *****************************************
+% * RUSpaper OPTION *
+% *****************************************
+% * USUS DOCUMENT STYLE *
+% *****************************************
+%
+
+\typeout{USUS - Document Style Option 'RUSpaper'. Released 3 May 1988}
+\makeatletter % make @ a letter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This was made from:
+%
+% ARTICLE DOCUMENT STYLE -- released 17 December 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+% EQUATION and EQNARRAY
+%
+% \newcounter{equation}
+% Default is for left-hand side of equations to be flushleft.
+% To make them flushright, do:
+% \let\@eqnsel = \hfil
+%
+\def\theequation{\arabic{equation}}
+
+
+% ****************************************
+% * SECTION HEADINGS *
+% ****************************************
+%
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+%
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+%
+\def\section{\@startsection {section}{1}{\z@}
+ {-3.5ex plus -1ex minus -.2ex}
+ {2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection {subsection}{2}{\z@}
+ {-3.25ex plus -1ex minus -.2ex}
+ {1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection {subsubsection}{3}{\z@}
+ {-3.25ex plus -1ex minus -.2ex}
+ {1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection {paragraph}{4}{\z@}
+ {3.25ex plus 1ex minus .2ex}
+ {-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection {subparagraph}{4}{\parindent}
+ {3.25ex plus 1ex minus .2ex}
+ {-1em}{\normalsize\bf}}
+
+% ****************************************
+% * SECTION NUMBERING *
+% ****************************************
+%
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+\def\thepart {\Roman{part}} % Roman numeral part numbers.
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+% ****************************************
+% * TABLE OF CONTENTS ENTRIES *
+% ****************************************
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note, \chapter is level 0, \section
+% is level 1, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+\def\l@section#1#2{
+ \pagebreak [3]
+ \addvspace{2\parskip}
+ \begingroup
+ { \bf
+ \parindent \z@
+ \@tempdima \@pnumwidth
+ \rightskip \@tocrmarg
+ \parfillskip -\@tocrmarg
+ \leavevmode #1\hfill#2\par}
+ \endgroup}
+
+\def\l@subsection {\@dottedtocline{2} {1.5em} {2.3em}}
+\def\l@subsubsection {\@dottedtocline{3} {3.8em} {3.2em}}
+\def\l@paragraph {\@dottedtocline{4} {7.0em} {4.1em}}
+\def\l@subparagraph {\@dottedtocline{5} {10em} {5em}}
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+\setcounter{tocdepth}{4}
+
+% TABLEOFCONTENTS
+%
+\def\tableofcontents{
+ \section*{\@headtoc\@mkboth{\uppercase{\@headtoc}}{\uppercase{\@headtoc}}}
+ \@starttoc{toc}}
+
+% LIST OF FIGURES
+%
+\def\listoffigures{
+ \section*{\@headlof\@mkboth{\uppercase{\@headlof}}{\uppercase{\@headlof}}}
+ \@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+% LIST OF TABLES
+%
+\def\listoftables{
+ \section*{\@headlot\@mkboth{\uppercase{\@headlot}}{\uppercase{\@headlot}}}
+ \@starttoc{lot}}
+\let\l@table\l@figure
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus -.07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+
+\def\thebibliography#1{
+ \section*{\@headbib\@mkboth{\uppercase{\@headbib}}{\uppercase{\@headbib}}}
+ \list {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sloppy
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+
+\def\theindex{
+ \@restonecoltrue
+ \if@twocolumn\@restonecolfalse\fi
+ \columnseprule \z@
+ \columnsep 35pt
+ \twocolumn
+ \section*{\@headidx\@mkboth{\uppercase{\@headidx}}{\uppercase{\@headidx}}}
+ \thispagestyle{plain}
+ \parindent\z@
+ \parskip\z@ plus .3pt
+ \relax
+ \let\item\@idxitem}
+
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% FIGURE % TABLE
+% %
+\def\thefigure{\@arabic\c@figure} \def\thetable{\@arabic\c@table}
+
+
+% ****************************************
+% * TITLE AND ABSTRACT *
+% ****************************************
+%
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero.
+%
+\def\titlepage{
+ \@restonecolfalse
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \else
+ \newpage
+ \fi
+ \thispagestyle{empty}
+ \c@page\z@}
+\def\endtitlepage{
+ \if@restonecol
+ \twocolumn
+ \else
+ \newpage
+ \fi}
+
+% MAKETITLE
+%
+% \maketitle ==
+% BEGIN
+% \par
+% \begingroup
+% redefine \@makefnmark so footnote marks take zero space (this make
+% centering look better)
+% \thefootnote == \fnsymbol{footnote} % to number by *, dagger, etc.
+% if @twocolumn = true
+% then \twocolumn[\@maketitle]
+% else \@maketitle
+% fi
+% \thispagestyle{plain}
+% \@thanks % \thanks defines \@thanks to have \footnotetext commands for
+% % producing footnotes.
+% \endgroup
+% END
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle
+ \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}
+ \gdef\@author{}
+ \gdef\@title{}
+ \let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em % Vertical space above title.
+ \begin{center}
+ {\LARGE \@title \par} % Title set in \LARGE size.
+ \vskip 1.5em % Vertical space after title.
+ { \large % each author set in \large, in a
+ \lineskip .5em % tabular environment
+ \begin{tabular}[t]{c}
+ \@author
+ \end{tabular}\par}
+ \vskip 1em % Vertical space after author.
+ {\large \@date} % Date set in \large size.
+ \end{center}
+ \par
+ \vskip 1.5em} % Vertical space after date.
+
+\def\abstract{
+ \if@twocolumn
+ \section*{\@headabstract
+ \@mkboth{\uppercase{\@headabstract}}{\uppercase{\@headabstract}}}
+ \else
+ \small
+ \begin{center}
+ {\bf \@headabstract\vspace{-.5em}\vspace{0pt}}
+ \end{center}
+ \quotation
+ \fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\if@twoside\else\raggedbottom\fi % Ragged bottom unless twoside option.
+\makeatother % re-make @ a special character
diff --git a/macros/latex209/contrib/rus/rustitel.sty b/macros/latex209/contrib/rus/rustitel.sty
new file mode 100644
index 0000000000..3e4f09d951
--- /dev/null
+++ b/macros/latex209/contrib/rus/rustitel.sty
@@ -0,0 +1,240 @@
+
+% *****************************************
+% * RUSTITEL OPTION *
+% *****************************************
+% * USUS DOCUMENT STYLE *
+% * Rechenzentrum Uni Stuttgart *
+% *****************************************
+%
+% Titelblaetter für kleine und große Studienarbeiten, Diplomarbeiten,
+% Dissertationen (inneres und äußeres Blatt), allgemeine Berichte
+%
+%
+
+\typeout{USUS - Document Style Option 'RUStitel'. Released February 1988}
+
+% modified 12. März 1990 I. Loebich: Rücksetzen der Texthöhe (leider nur
+% teilweise erfolgreich), FE-Bericht ohne Diss-Teile
+% modified 5. April 1990 I. Loebich: ISSN-Nummer auf Aussentitel
+
+\makeatletter % make @ a letter
+
+
+% *****************************************
+% * Makros zur Vereinfachung der Arbeit *
+% *****************************************
+
+%
+\def\pspace#1{\par \vspace{#1}}
+\def\hb#1{\hbox to \hsize{#1}}
+\def\pb#1{\parbox{\hsize}{#1}}
+\def\DrIng{Dr.--\,Ing. }
+
+% *****************************************
+% * RUS Leitung und Anschrift *
+% *****************************************
+%
+ \def\RUS {RECHENZENTRUM DER UNIVERSIT\"AT STUTTGART \hfill}
+ \def\RUSlehrstuhl {ANWENDUNGEN DER INFORMATIK IM MASCHINENWESEN
+ \hspace {1.5cm}}
+ \def\RUSleitung {PROF. DR.--\,ING. R. R\"UHLE \hfill}
+ \def\RUSanschrift {RUS, ALLMANDRING 30, 7000 STUTTGART 80 \hfill}
+ \def\FE {FORSCHUNGS- UND ENTWICKLUNGSBERICHTE \hfill}
+%
+% *****************************************
+% * Abteilungen und deren Leiter *
+% *****************************************
+%
+% \input RUSabtei.sty (wird z.Zt. nicht ben\"otigt)
+%
+% *****************************************
+% * Makros zur Uebergabe der Parameter *
+% *****************************************
+%
+\def\Titel#1 {\gdef\@titel{#1}} \let\title=\Titel
+\def\Autor#1 {\gdef\@autor{#1}} \let\author=\Autor
+\def\Datum#1 {\gdef\@datum{#1}} \let\date=\Datum
+\def\Dokumentnummer#1 {\gdef\@nummer{#1}}
+\def\Projektlaufzeit#1 {\gdef\@plaufzeit{#1}}
+\def\Projektleiter#1 {\gdef\@pleiter{#1}}
+\def\Geburtsort#1 {\gdef\@gebort{#1}}
+\def\Hauptberichter#1 {\gdef\@haupt{#1}}
+\def\Mitberichter#1 {\gdef\@mit{#1}}
+\def\Einreichung#1 {\gdef\@einreichung{#1}}
+\def\Pruefung#1 {\gdef\@pruef{#1}}
+%\def\Abteilung#1 {\csname#1\endcsname}
+\def\Typ#1 {\gdef\@typ{#1}}
+\def\Betreuer#1 {\gdef\@betreuer{#1}}
+%\def\Betreuer#1 {\gdef\@betreuer{#1}}
+%
+%
+%
+% *****************************************
+% * Makros zur Definition der Schriften *
+% *****************************************
+%
+\def\temp{2} % 12pt
+\ifx \@ptsize \temp
+ \gdef\normalfont{\large}
+ \gdef\titelfont {\Large\bf}
+\else
+ \gdef\normalfont{\Large}
+ \gdef\titelfont {\LARGE\bf}
+\fi
+
+
+% *****************************************
+% * Seitenlayout der Titelseite *
+% *****************************************
+%
+\def\layout#1{\begin{titlepage} \normalfont
+ \settowidth{\hsize}{#1} \textheight 250mm
+ \headheight 0mm \headsep 0mm
+ \footheight 0mm \footskip 0mm
+ \topmargin 0mm \topskip 0mm}
+\def\endlayout{\end{titlepage}
+ \setcounter{footnote}{0} \setcounter{page}{1}
+ \textheight 225mm}
+%
+%
+%
+% *****************************************
+% * Kleine, grosse Studienarbeit *
+% * und Diplomarbeit (RUS) *
+% *****************************************
+%
+%
+\textheight 25cm
+\def\Arbeit{
+ \begin{layout}{\RUSlehrstuhl}
+ \vspace*{35mm}
+ \pb {\titelfont \@titel} \pspace{10mm}
+ \pb {\@autor \hfill} \pspace{33mm}
+ \pb {\@typ \hfill} \pspace{10mm}
+ \begin{tabular}{@{}l p{10cm}}
+ Betreuer: & {\@betreuer}\\
+% Betreuer: & {\@1betreuer}\\
+% & \@2betreuer
+ \end{tabular}
+ \vfill
+ \hb {\@datum\hfill Interner Bericht \@nummer} \pspace{25mm}
+ \hb {\RUS}
+ \hb {\RUSlehrstuhl}
+ \hb {\RUSleitung}
+%** \hb {Abteilung \@abtname \hfill}
+%** \hb {\@abtleiter \hfill} \pspace{7mm}
+ \hb {\RUSanschrift \hfill}
+ \end{layout}
+ \let\Arbeit\relax}
+
+
+% *****************************************
+% * Dissertation (IKE) *
+% * Universitaet Stuttgart *
+% *****************************************
+
+\textheight 25cm
+%
+ \def\Diss{
+ \begin{layout}{\RUSlehrstuhl}
+ \vspace*{35mm}
+ \pb {\titelfont \@titel}
+ \pspace{10mm}
+ Von der Universit\"at Stuttgart zur Erlangung der W\"urde eines \\
+ Doktor\,--\,Ingenieurs (Dr.--\,Ing.) genehmigte Abhandlung \\
+%** Von der Fakult\"at f\"ur Mathematik und Informatik der Universit\"at
+%** \\ Stuttgart zur Erlangung der W\"urde eines Doktors der
+%** Natur\-wissenschaften (Dr. rer.nat.) genehmigte Abhandlung
+ \vfill
+ \hb {vorgelegt von \hfill} % \\
+ \hb {\bf \@autor \hfill} % \\
+ \hb {geboren in \@gebort\hfill} % \\
+ \vfill
+ \newlength\widtha\settowidth{\widtha}
+ {Tag der m\"undlichen Pr\"ufung:}
+ \begin{tabular}{@{} p{\widtha} l}
+ Hauptberichter: & \@haupt \\
+ Mitberichter: & \@mit \\
+ Tag der Einreichung: & \@einreichung \\
+ Tag der m\"undlichen Pr\"ufung: & \@pruef \\
+ \end{tabular} \pspace{17mm}
+
+ \hb {\@datum \hfill \@nummer} \pspace{17mm}
+ \hb {\RUS}
+ \hb {\RUSlehrstuhl}
+ \hb {\RUSleitung}
+%** \hb {Abteilung \@abtname \hfill}
+%** \hb {\@abtleiter \hfill} \pspace{7mm}
+ \hb {\RUSanschrift} \pspace{7mm}
+ \hb {ISSN 0934-0602 \hfill}
+ \end{layout}
+ \let\Diss\relax}
+%
+%
+% *********************************************************
+% * Forschungs- und Entwicklungsbericht RUS/Innenblatt *
+% *********************************************************
+%
+\textheight 25cm
+%
+ \def\FEInnen{
+ \begin{layout}{\RUSlehrstuhl}
+ \vspace*{35mm}
+ \pb {\titelfont \@titel} \pspace{23mm}
+% Von der Fakult\"at f\"ur Mathematik und Informatik der Universit\"at
+% \\ Stuttgart zur Erlangung der W\"urde eines Doktors der
+% Natur\-wissenschaften (Dr. rer.nat.) genehmigte Abhandlung
+% \vfill
+% \hb {vorgelegt von \hfill} % \\
+ \hb {\@autor \hfill} % \\
+% \hb {geboren in \@gebort\hfill} % \\
+ \vfill
+% \newlength\widtha\settowidth{\widtha}
+% {Tag der m\"undlichen Pr\"ufung:}
+% \begin{tabular}{@{} p{\widtha} l}
+% Hauptberichter: & \@haupt \\
+% Mitberichter: & \@mit \\
+% Tag der Einreichung: & \@einreichung \\
+% Tag der m\"undlichen Pr\"ufung: & \@pruef \\
+% \end{tabular} \pspace{17mm}
+% \hb {\@autor \hfill} \vfill
+ \hb {\@datum\hfill \@nummer} \pspace{23mm}
+ \hb {\RUS}
+ \hb {\RUSlehrstuhl}
+ \hb {\RUSleitung}
+%* \hb {Abteilung \@abtname \hfill}
+%* \hb {\@abtleiter \hfill} \pspace{7mm}
+ \hb {\RUSanschrift} \pspace{5mm}
+ \hb {ISSN 0934-0602 \hfill}
+ \end{layout}
+ \textheight 225mm
+ \let\FEInnen\relax}
+
+
+% *********************************************************
+% * Forschungs- und Entwicklungsbericht RUS/Aussenblatt *
+% *********************************************************
+%
+%
+\newfont{\inhead}{cmss17 scaled 2488}
+\textheight 25cm
+%
+\def\FEAussen{
+ \begin{layout}{\RUSlehrstuhl}
+ \begin {flushright}{\inhead RUS}\end {flushright} \pspace{15mm}
+ \rule {15.7cm}{0.5mm} \pspace{25mm}
+ \pb {\titelfont \@titel} \pspace{23mm}
+ \hb {\@autor \hfill} \vfill
+ \hb {\@datum\hfill \@nummer} \pspace{13mm}
+ \rule {15.7cm}{0.5mm} \pspace{5mm}
+ \hb {\RUS}
+ \hb {\RUSlehrstuhl} \pspace{7mm}
+ \hb {\FE} \pspace{5mm}
+ \hb {ISSN 0934-0602 \hfill}
+ \end{layout}
+ \textheight 225mm
+ \let\FEAussen\relax}
+
+%
+%
+\makeatother % re-make @ a special character
diff --git a/macros/latex209/contrib/rus/uni.sty b/macros/latex209/contrib/rus/uni.sty
new file mode 100644
index 0000000000..ca2d6367d7
--- /dev/null
+++ b/macros/latex209/contrib/rus/uni.sty
@@ -0,0 +1,1384 @@
+
+% ********************************************
+% * Universtity of Stuttgart Universal Style *
+% ********************************************
+% * USUS DOCUMENT STYLE *
+% * R.Harscheidt, IKE/UNI Stuttgart *
+% ********************************************
+%
+% All macros like in the usplain format. This
+% file can also be used to make this format
+% by INITEX. In the loading INITEX-file the
+% definition "\def\initex{INITEX}" should be
+% included.
+%
+\makeatletter % make at a letter
+
+% ****************************************
+% * BANNER *
+% ****************************************
+%
+\def\@usname {USUS - University of Stuttgart Universal Style }
+\def\@usdate {14. July 1988}
+\def\@usversion {RUS1.0}
+\everyjob{\typeout{\@usname \@usversion\space- Released \@usdate}}
+\immediate\write10{\@usname \@usversion\space- Released \@usdate}
+
+%%%%% The following comes from usgerman.sty %%%%%%%%%%%%
+
+% *****************************************
+% * HEADERS *
+% *****************************************
+%
+\gdef\@headabstract {\"Ubersicht}
+\gdef\@headpreface {Vorwort}
+\gdef\@headappendix {Anhang}
+\gdef\@headpart {Teil}
+\gdef\@headchapter {}
+\gdef\@headtoc {Inhalt}
+\gdef\@headloa {Abk\"urzungen}
+\gdef\@headlof {Abbildungen}
+\gdef\@headlos {Formelzeichen}
+\gdef\@headlot {Tabellen}
+\gdef\@headglo {Erkl\"arungen}
+\gdef\@headidx {Index}
+\gdef\@headbib {Literatur}
+
+% *****************************************
+% * CAPTIONS *
+% *****************************************
+%
+\gdef\@capfigure {Abbildung}
+\gdef\@captable {Tabelle}
+
+% *****************************************
+% * DATE *
+% *****************************************
+%
+\gdef\monthname{
+ \ifcase\month\or
+ Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
+ Juli\or August\or September\or Oktober\or November\or Dezember
+ \fi}
+\gdef\thismonth{\monthname\space\number\year}
+\gdef\today{\number\day.\thismonth}
+
+%%%%% Here the original ususall.sty goes on %%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This was made from:
+%
+% BOOK DOCUMENT STYLE -- Released 23 September 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% ****************************************
+% * TWO-COLUMN OPTION *
+% ****************************************
+%
+% \@twocolumnfalse % Default is one column.
+\def\ds@twocolumn{ % Defines two column option.
+ \@twocolumntrue}
+
+% ****************************************
+% * TWO-SIDE OPTION *
+% ****************************************
+%
+% \twosidefalse % Default is single sided.
+\def\ds@twoside{ % Defines twoside option.
+ \@twosidetrue
+ \@mparswitchtrue} % Marginpars go on outside of page.
+
+% ****************************************
+% * DRAFT OPTION *
+% ****************************************
+%
+% \overfullrule = 0em % Default is don't mark overfull hboxes.
+\def\ds@draft{ % Causes overfull hboxes to be marked.
+ \overfullrule .5em}
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+\lineskip .1em % \lineskip is 0.1em for all font sizes.
+\normallineskip .1em
+\def\baselinestretch{1} % 1=1-zeilig, 1.33=1.5-zeilig, 1.66=2-zeilig
+
+% The font size option is handled by reading a different file for each
+% size, as follows, to define font size-specific commands:
+% 10pt : US10, 11pt : US11, 12pt : US12
+% Implemented by \def'ing \@fontload to the nesessary input command.
+%
+% in 10pt type size : 1em = 10pt
+% in 11pt type size : 1em = 11pt
+% in 12pt type size : 1em = 12pt
+%
+\def\definefont#1{%
+ \def\@ptsize{#1} % define ptsize used by some macros
+ \def\@fontload{%
+ \input us1\@ptsize.sty % input fontfile
+ \let\@fontload\relax}} % load only once
+
+\definefont{2} % 12pt is default
+\@namedef{ds@12pt}{} % 12pt option does nothing
+\@namedef{ds@11pt}{\definefont{1}} % 11pt option loads us11.sty
+\@namedef{ds@10pt}{\definefont{0}} % 10pt option loads us10.sty
+
+% The sans serif option must be set before the optionfiles are loaded. Some of
+% these files use the \@fontstyle.
+%
+\def\@fontstyle{} % default is roman
+\@namedef{ds@sf}{\let\@fontstyle\sf} % sf option sans serif
+
+% ****************************************
+% * LOAD OPTIONFILES *
+% ****************************************
+%
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the present
+% (main) .STY file is executed.
+%
+\def\@options{\let\@elt\relax
+ \@for\@tempa:=\@optionlist\do
+ {\@ifundefined{ds@\@tempa} % option command ?
+ {\xdef\@optionfiles{\@optionfiles % load option file
+ \catcode`@=11\@elt\@tempa.sty\relax}}
+ {\csname ds@\@tempa\endcsname}}} % execute command
+
+\ifx \initex \undefined % do not load option- and fontfiles
+ \@options % when this is used to make a format.
+ \relax % that must then be done by 'usus.sty'
+\fi
+
+\@fontload % load default fontsize
+%\input logos.sty % logo makros
+%\input quotes.sty % quote makros
+%
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+% SIDE MARGINS:
+%
+\if@twoside
+ \oddsidemargin 5mm % rh % Left margin on odd-numbered pages.
+ \evensidemargin -5mm % rh % Left margin on even-numbered pages.
+\else
+ \oddsidemargin 5mm % rh % Left margin on odd-numbered pages.
+ \evensidemargin 5mm % rh % Left margin on even-numbered pages.
+\fi
+
+% VERTICAL SPACING:
+% % Top of page:
+\topmargin -5mm % rh % Nominal distance from top of page to
+ % top of box containing running head.
+\headheight 5mm % rh % Height of box containing running head.
+\headsep 10mm % rh % Space between running head and text.
+\topskip 4mm % rh % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footheight 5mm % rh % Height of box containing running foot.
+\footskip 10mm % rh % Distance from baseline of box containing
+ % foot to baseline of last line of text.
+% DIMENSION OF TEXT:
+%
+\textheight 225mm % rh % Height of text (including footnotes and
+ % figures, excluding running head and foot).
+\textwidth 150mm % rh % Width of text line.
+ % For two-column mode:
+\columnsep 1em % rh % Space between columns
+\columnseprule 0mm % rh % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+% FOOTNOTES:
+%
+\footnotesep 3mm % rh % Height of strut placed at the beginning of
+ % every footnote = height of normal
+ % \footnotesize strut, so no extra space
+ % between footnotes.
+\skip\footins 4mm plus .4em minus .2em % Space between last line of text
+ % text and top of first footnote.
+
+% ****************************************
+% * FLOATS *
+% ****************************************
+%
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+%
+\floatsep 1.2em plus .2em minus .2em % Space between adjacent floats moved
+ % to top or bottom of text page.
+\intextsep 1.2em plus .2em minus .2em % Space between in-text figures and
+ % text.
+\textfloatsep 2em plus .2em minus .4em % Space between main text and floats
+ % at top or bottom of page.
+\@maxsep 2em % The maximum of \floatsep,
+ % \textfloatsep and \intextsep (minus
+ % the stretch and shrink).
+
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+%
+\dblfloatsep 1.2em plus .2em minus .2em % Same as \floatsep for double-column
+ % figures in two-column mode.
+\dbltextfloatsep 2em plus .2em minus .4em % \textfloatsep for double-column
+ % floats.
+\@dblmaxsep 2em % The maximum of \dblfloatsep and
+ % \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+%
+\@fptop 0em plus 1fil % Stretch at top of float page/column.
+ % (Must be 0em plus ...)
+\@fpbot 0em plus 1fil % Stretch at bottom of float page/column.
+ % (Must be 0em plus ... )
+\@fpsep .8em plus 2fil % Space between floats on float page/column.
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+%
+\@dblfptop 0em plus 1fil % Stretch at top of float page.
+ % (Must be 0em plus ...)
+\@dblfpbot 0em plus 1fil % Stretch at bottom of float page.
+ % (Must be 0em plus ...)
+\@dblfpsep .8em plus 2fil % Space between floats on float page.
+
+% MARGINAL NOTES:
+%
+\marginparwidth 20mm % rh % Width of marginal notes.
+\marginparsep .5em % rh % Horizontal space between outer margin
+ % and marginal note
+\marginparpush .5em % Minimum vertical separation between two
+ % marginal notes.
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parindent 0em % Width of paragraph indentation.
+\parskip .8em plus .2em minus .2em % Extra vertical space between
+ % paragraphs.
+\topsep .4em plus .2em minus .1em % Extra vertical space, in addition to
+ % \parskip, added above and below list
+ % and paragraphing environments.
+\partopsep .2em plus .1em minus .1em % Extra vertical space, in addition to
+ % \parskip and \topsep, added when
+ % user leaves blank line before the
+ % environment.
+\itemsep .2em plus .1em minus .1em % Extra vertical space, in addition to
+ % \parskip, added between list items.
+\newskip \tocparskip
+\tocparskip .4em plus .2em minus .1em % Extra vertical space between lines
+ % in the content tables
+
+% ****************************************
+% * PENALTIES *
+% ****************************************
+%
+% The following page-breaking penalties are defined
+%
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph environment.
+\@itempenalty -\@lowpenalty % Between list items.
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+% ****************************************
+% * PARTS, CHAPTERS AND SECTIONS *
+% ****************************************
+%
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a \chapter or \section command without using
+% \@startsection, you can use \secdef as follows:
+% \def\chapter { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define \chapter[...]{...}
+% \def\CMDB #1{ ... } % Command to define \chapter*{...}
+%
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+\setcounter{secnumdepth}{3}
+\def\part{
+ \cleardoublepage % Starts new page.
+ \thispagestyle{usplain} % rh Page style of part page is 'usplain'
+ \if@twocolumn % IF two-column style THEN
+ \onecolumn % \onecolumn
+ \@tempswatrue % @tempswa := true
+ \else % ELSE
+ \@tempswafalse % @tempswa := false
+ \fi % FI
+ \hbox{} \vfil % Add fil glue to center title
+ \bgroup \centering % BEGIN centering
+ \secdef\@part\@spart}
+
+\def\@part[#1]#2{
+ \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2 THEN
+ \refstepcounter{part} % step part counter
+ \addcontentsline{toc}{part} % add toc numbered line
+ {\protect\numberline{\thepart}{#1}}
+ \LARGE\bf\@headpart\ \thepart % Print 'Part' and number
+ \par % in \LARGE bold.
+ \vskip 2em % Add space before title.
+ \else % ELSE
+ \addcontentsline{toc}{part}{#1} % add toc unnumbered line
+ \fi % FI
+ \markboth{}{}
+ \huge \bf #1\@endpart % Print Title in \huge bold.
+ \addtocontents{lof}{\protect\addvspace{4\parskip}} % rh
+ \addtocontents{lot}{\protect\addvspace{4\parskip}}} % rh
+
+\def\@spart#1{
+ \huge \bf #1\@endpart} % Print title in \huge boldface
+
+% \@endpart finishes the part page
+%
+\def\@endpart{
+ \par\egroup % END centering
+ \vfil\newpage % End page with 1fil glue.
+ \if@twoside % IF twoside printing THEN
+ \hbox{} % Produce totally blank page
+ \thispagestyle{empty}
+ \newpage
+ \fi % FI
+ \if@tempswa % IF @tempswa = true THEN
+ \twocolumn % \twocolumn
+ \fi} % FI
+
+\def\chapter{
+ \cleardoublepage % Starts new right-hand page.
+ \thispagestyle{usplain} % rh Page style of chapter page is 'usplain'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindentfalse % Suppresses indent in first paragraph.
+ \secdef\@chapter\@schapter} % Change to \@afterindenttrue to have indent.
+
+\def\@chapter[#1]#2{
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -2 THEN
+ \refstepcounter{chapter} % step chapter counter
+ \typeout{\@chapapp\space\thechapter.} %
+ \addcontentsline{toc}{chapter} % add toc numbered line
+ {\protect\numberline{\thechapter}{#1}}
+ \else % ELSE
+ \addcontentsline{toc}{chapter}{#1} % add toc unnumbered line
+ \fi % FI
+ \chaptermark{#1}
+ \if@twocolumn % Tests for two-column mode.
+ \@topnewpage[\@makechapterhead{#2}]
+ \else
+ \@makechapterhead{#2}
+ \@afterheading % Routine called after
+ % chapter and section
+ % heading.
+ \fi
+ \addtocontents{lof}{\protect\addvspace{2\parskip}} % Adds between-chapter
+ \addtocontents{lot}{\protect\addvspace{2\parskip}}}% space to lists of
+ % figs & tables.
+
+\def\@schapter#1{
+ \if@twocolumn
+ \@topnewpage[\@makeschapterhead{#1}]
+ \else
+ \@makeschapterhead{#1}
+ \@afterheading
+ \fi}
+
+% \@makechapterhead {TEXT} : Makes the heading for the \chapter command.
+%
+\def\@makechapterhead#1{ % Heading for \chapter command
+ \vspace{40pt}
+ { \Large \bf
+ \parindent \z@
+ \hangindent \@pnumwidth
+ \makebox[\hangindent][l]{\thechapter}#1\par}
+ \nobreak
+ \vspace{25pt}}
+
+% \@makeschapterhead {TEXT} : Makes the heading for the \chapter* command.
+%
+\def\@makeschapterhead#1{ % Heading for \chapter* command
+ \vspace{40pt}
+ { \Large \bf
+ \parindent \z@
+ #1\par}
+ \nobreak
+ \vspace{25pt}}
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g., chapter=1,
+% section = 2, etc. A section number will be printed if
+% and only if LEVEL < or = the value of the secnumdepth
+% counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+%
+\def\section{\@startsection {section}{1}{\z@}
+ {-3.5ex plus -1ex minus -.2ex}
+ {2.3ex plus .2ex}{\large\bf}}
+\def\subsection{\@startsection {subsection}{2}{\z@}
+ {-3.25ex plus -1ex minus -.2ex}
+ {1.5ex plus .2ex}{\normalsize\bf}}
+\def\subsubsection{\@startsection {subsubsection}{3}{\z@}
+ {-3.25ex plus -1ex minus -.2ex}
+ {1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection {paragraph}{4}{\z@}
+ {3.25ex plus 1ex minus .2ex}
+ {-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection {subparagraph}{4}{\parindent}
+ {3.25ex plus 1ex minus .2ex}
+ {-1em}{\normalsize\bf}}
+
+% Default initializations of \...mark commands. (See below for their
+% use in defining page styles.
+%
+\def\chaptermark#1{}
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% ****************************************
+% * DOCUMENT-SECTIONS *
+% ****************************************
+%
+% FRONT % rh
+%
+% The \front command must do the following:
+% -- begin a new page
+% -- set \@chapapp empty (for messages)
+% -- set the page counter to one
+% -- reset the chapter counter to zero
+% -- reset the section counter to zero
+% -- redefine the page counter to produce roman numbers
+%
+\def\front{
+ \clearpage
+ \def\@chapapp{}
+ \setcounter{page}{1}
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \setcounter{footnote}{0}
+ \def\thepage{\Roman{page}}}
+
+% BODY % rh
+%
+% The \body command must do the following:
+% -- begin a new page
+% -- set \@chapapp empty (for messages)
+% -- reset the page counter to one
+% -- reset the chapter counter to zero
+% -- reset the section counter to zero
+% -- redefine the page counter to produce arabic numbers
+% -- redefine the chapter counter to produce arabic numbers
+%
+\def\body{
+ \clearpage
+ \def\@chapapp{\@headchapter}
+ \setcounter{page}{1}
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\thepage{\arabic{page}}
+ \def\thechapter{\arabic{chapter}}}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- begin a new unnumbered part
+% -- set \@chapapp to Appendix (for messages)
+% -- reset the chapter counter to zero
+% -- redefine the chapter counter to produce appendix numbers
+% -- reset the section counter to zero
+%
+\def\appendix{
+ \part*{\@headappendix}
+ \def\@chapapp{\@headappendix}
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\thechapter{\Alph{chapter}}
+ \addtocontents{toc}{\protect\addvspace{4\parskip}}}
+ \addtocontents{lof}{\protect\addvspace{4\parskip}}
+ \addtocontents{lot}{\protect\addvspace{4\parskip}}
+
+% ****************************************
+% * PART, CHAPTER AND SECTION NUMBERING *
+% ****************************************
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is stepped.
+% Counter OLDCTR must already be defined.
+%
+\newcounter {part}
+\newcounter {chapter}
+\newcounter {section}[chapter]
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+% For any counter CTR, \theCTR is a macro that defines the printed version
+% of counter CTR. It is defined in terms of the following macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+\def\thepart {\Roman{part}}
+\def\thechapter {\arabic{chapter}}
+\def\thesection {\thechapter.\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+% \@chapapp is initially defined to be 'Chapter'. The \appendix
+% command redefines it to be 'Appendix'.
+%
+\def\@chapapp{\@headchapter}
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \subsection command writes a
+% \contentsline{subsection}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If subsections are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \thesubsection. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table' environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@chapter, \l@section,
+% \l@subsection, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note, \chapter is level 0, \section
+% is level 1, etc.
+% INDENT : The indentation from the outer left margin of the start of
+% the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be \def'd to
+% a number like 2 or 1.7
+%
+% TABLEOFCONTENTS
+% In report style, \tableofcontents, \listoffigures, etc. are always
+% set in single-column style. @restonecol
+%
+\def\tableofcontents{
+ \@restonecolfalse
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \fi
+ \chapter*{\@headtoc
+ \@mkboth{\uppercase{\@headtoc}}
+ {\uppercase{\@headtoc}}}
+ {\parskip \tocparskip \@starttoc{toc}}
+ \if@restonecol
+ \twocolumn
+ \fi}
+
+% ****************************************
+% * TABLE OF CONTENTS ENTRIES *
+% ****************************************
+%
+\setcounter{tocdepth}{3}
+\def\@dotsep {4.5}
+\def\@tocrmarg {2.55em}
+\def\@pnumwidth {1.55em}
+
+\def\l@part#1#2{
+ \addpenalty{-\@highpenalty}
+ \addvspace{4\parskip}
+ \begingroup
+ { \large\bf
+ \parindent \z@
+ \@tempdima \@pnumwidth
+ \rightskip \@tocrmarg
+ \parfillskip -\@tocrmarg
+ \leavevmode #1\hfill#2\par}
+ \nobreak
+ \endgroup}
+
+\def\l@chapter#1#2{
+ \pagebreak [3]
+ \addvspace{2\parskip}
+ \begingroup
+ { \bf
+ \parindent \z@
+ \@tempdima \@pnumwidth
+ \rightskip \@tocrmarg
+ \parfillskip -\@tocrmarg
+ \leavevmode #1\hfill#2\par}
+ \endgroup}
+
+\def\l@section {\@dottedtocline{1} {\@pnumwidth} {2.3em}}
+\def\l@subsection {\@dottedtocline{2} {3.8em} {3.2em}}
+\def\l@subsubsection {\@dottedtocline{3} {7.0em} {4.1em}}
+\def\l@paragraph {\@dottedtocline{4} {10em} {5em}}
+\def\l@subparagraph {\@dottedtocline{5} {12em} {6em}}
+
+% ****************************************
+% * LIST OF FIGURES *
+% ****************************************
+%
+\def\listoffigures{
+ \@restonecolfalse
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \fi
+ \chapter*{\@headlof
+ \@mkboth{\uppercase{\@headlof}}
+ {\uppercase{\@headlof}}}
+ {\parskip \tocparskip \@starttoc{lof}}
+ \if@restonecol
+ \twocolumn
+ \fi}
+\def\l@figure{\@dottedtocline{1}{\@pnumwidth}{2.3em}}
+
+% ****************************************
+% * LIST OF TABLES *
+% ****************************************
+%
+\def\listoftables{
+ \@restonecolfalse
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \fi
+ \chapter*{\@headlot
+ \@mkboth{\uppercase{\@headlot}}
+ {\uppercase{\@headlot}}}
+ {\parskip \tocparskip \@starttoc{lot}}
+ \if@restonecol
+ \twocolumn
+ \fi}
+\let\l@table\l@figure
+
+% ****************************************
+% * LIST OF ABBREVIATIONS *
+% ****************************************
+%
+\def\listofabbrev{\@ifnextchar[{\@listofabbrev}{\@listofabbrev[MMMM]}}
+\def\@listofabbrev[#1]{
+ \@restonecolfalse
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \fi
+ \chapter*{\@headloa
+ \@mkboth{\uppercase{\@headloa}}
+ {\uppercase{\@headloa}}}
+ \begin{list}{}{
+ \labelsep 1em
+ \settowidth\labelwidth{#1}
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep}
+ {\parskip \tocparskip \@starttoc{loa}}
+ \item [~] ~ % Dummy
+ \end{list}
+ \if@restonecol \twocolumn \fi}
+\def\abbrev#1#2{\addtocontents{loa}{\protect{\item [#1] #2 }}}
+
+\let\listofshortcuts=\listofabbrev
+\let\shortcut =\abbrev
+
+% ****************************************
+% * LIST OF SYMBOLS *
+% ****************************************
+%
+\def\listofsymbols{\@ifnextchar[{\@listofsymbols}{\@listofsymbols[MMMM]}}
+\def\@listofsymbols[#1]{
+ \@restonecolfalse
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \fi
+ \chapter*{\@headlos
+ \@mkboth{\uppercase{\@headlos}}
+ {\uppercase{\@headlos}}}
+ \begin{list}{}{
+ \settowidth\labelwidth{#1}
+ \labelsep 1em
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep}
+ {\parskip \tocparskip \@starttoc{los}}
+ \item [~] ~ % Dummy
+ \end{list}
+ \if@restonecol \twocolumn \fi}
+\def\symbol#1#2{\addtocontents{los}{\protect{\item [#1] #2 }}}
+
+% ****************************************
+% * ABSTRACT *
+% ****************************************
+%
+\def\abstract{\@ifnextchar[{\@abstract}{\@abstract[d]}}
+\def\@abstract[#1]{\def\temp{#1}
+ \if \temp d \chapter*{\@headabstract % default
+ \@mkboth{\uppercase{\@headabstract}}
+ {\uppercase{\@headabstract}}} \fi
+ \if \temp g \chapter*{Zusammenfassung % german
+ \@mkboth{ZUSAMMENFASSUNG}
+ {ZUSAMMENFASSUNG}} \fi
+ \if \temp e \chapter*{Abstract % english
+ \@mkboth{ABSTRACT}
+ {ABSTRACT}} \fi}
+\def\endabstract{}
+
+% ****************************************
+% * PREFACE *
+% ****************************************
+%
+\def\preface{\chapter*{\@headpreface
+ \@mkboth{\uppercase{\@headpreface}}
+ {\uppercase{\@headpreface}}}}
+\def\endpreface{}
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus -.07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+%
+\def\thebibliography#1{
+ \chapter*{\@headbib
+ \@mkboth{\uppercase{\@headbib}}
+ {\uppercase{\@headbib}}}
+ \def\newblock{\hskip .11em plus .33em minus -.07em}
+ \sfcode`\.=1000\relax
+ \sloppy
+ \list{[\arabic{enumi}]}{
+ \settowidth\labelwidth{[#1]}
+ \labelsep 1em
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}}
+\let\endthebibliography=\endlist
+
+% \def\@biblabel#1{[#1]\hfill} % Produces the label for a \bibitem[...]
+ % command.
+% \def\@cite#1{[#1]} % Produces the output of the \cite command.
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+%
+\newif\if@restonecol
+\def\theindex{
+ \@restonecoltrue
+ \if@twocolumn
+ \@restonecolfalse
+ \fi
+ \columnseprule \z@
+ \columnsep 3.5em
+ \twocolumn
+ \chapter{\@headidx
+ \@mkboth{\uppercase{\@headidx}}
+ {\uppercase{\@headidx}}}
+ \thispagestyle{usplain} % rh
+ \parindent\z@
+ \parskip \z@ plus .03em
+ \relax
+ \let\item\@idxitem}
+
+\def\endtheindex{
+ \if@restonecol
+ \onecolumn
+ \else
+ \clearpage
+ \fi}
+
+\def\@idxitem{\par\hangindent 4em}
+\def\subitem{\par\hangindent 4em \hspace*{2em}}
+\def\subsubitem{\par\hangindent 4em \hspace*{3em}}
+\def\indexspace{\par \vskip 1em plus .5em minus .3em\relax}
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+% In two-column format the indentations for level i, v and vi are smaller
+% than in one-column format.
+%
+\if@twocolumn
+ \leftmargini 2em
+ \leftmarginii 2.2em % > \labelsep + width of '(m)'
+ \leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+ \leftmarginiv 1.7em % > \labelsep + width of 'M.'
+ \leftmarginv 0.5em
+ \leftmarginvi 0.5em
+\else
+ \leftmargini 2.5em
+ \leftmarginii 2.2em % > \labelsep + width of '(m)'
+ \leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+ \leftmarginiv 1.7em % > \labelsep + width of 'M.'
+ \leftmarginv 1.0em
+ \leftmarginvi 1.0em
+\fi
+
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\labelsep .5em
+\parsep .4em plus .2em minus .1em
+
+\def\@listi{\leftmargin\leftmargini}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep .4em plus .2em minus .1em
+ \parsep .2em plus .1em minus .1em
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep .2em plus .1em minus .1em
+ \parsep \z@
+ \partopsep .1em plus 0em minus .1em
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep}
+
+% ****************************************
+% * LIST ENVIRONMENTS *
+% ****************************************
+%
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+%
+\def\theenumi {\arabic{enumi}}
+\def\theenumii {\alph{enumii}}
+\def\theenumiii {\roman{enumiii}}
+\def\theenumiv {\Alph{enumiv}}
+\def\labelenumi {\theenumi.} % rh {\arabic{enumi}.}
+\def\labelenumii {(\theenumii)} % rh {(\alph{enumii})}
+\def\labelenumiii {\theenumiii.} % rh {\roman{enumiii}.}
+\def\labelenumiv {\theenumiv.} % rh {\Alph{enumiv}.}
+\def\p@enumii {\theenumi}
+\def\p@enumiii {\theenumi(\theenumii)}
+\def\p@enumiv {\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the various
+% itemization levels.
+%
+\def\labelitemi {$\bullet$}
+\def\labelitemii {\bf --}
+\def\labelitemiii {$\circ$}
+\def\labelitemiv {$\cdot$}
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{
+ \let\\=\@centercr
+ \list{}{\itemsep \z@
+ \itemindent -1.5em
+ \listparindent \itemindent
+ \rightmargin \leftmargin
+ \advance\leftmargin 1.5em}
+ \item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{
+ \list{}{\itemindent 1.5em
+ \listparindent \itemindent
+ \rightmargin \leftmargin
+ \parsep 0em plus .1em}
+ \item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{
+ \list{}{\rightmargin\leftmargin}
+ \item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+%
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{
+ \list{}{\labelwidth \z@
+ \itemindent -\leftmargin
+ \let\makelabel \descriptionlabel}}
+\let\enddescription\endlist
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+
+% DEFLIST
+%
+%\def\deflabel#1{\bf #1\hfill}
+\def\deflabel#1{#1\hfill}
+\def\deflist#1{
+% \list{}{\settowidth{\labelwidth}{\bf #1}
+ \list{}{\settowidth{\labelwidth}{#1}
+ \setlength{\leftmargin}{\labelwidth}
+ \addtolength{\leftmargin}{\labelsep}
+ \let\makelabel \deflabel}}
+\let\enddeflist\endlist
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+% THEOREM
+%
+% \@begintheorem ... \@endtheorem are the commands executed at the
+% beginning and end of a (user-defined) theorem-like environment.
+% Except \@opargbegintheorem is executed when an optional argument is
+% given. Cf. LATEX.TEX.
+%
+% \def\@begintheorem#1#2{
+% \it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
+% \def\@opargbegintheorem#1#2#3{
+% \it \trivlist \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
+% \def\@endtheorem{\endtrivlist}
+% TITLEPAGE
+% In the normal environments, the titlepage environment does nothing but
+% start and end a page, and inhibit page numbers. It also resets the
+% page number to zero. In two-column style, it still makes a one-column
+% page.
+%
+\def\titlepage{
+ \if@twocolumn
+ \@restonecoltrue
+ \onecolumn
+ \else
+ \@restonecolfalse
+ \newpage
+ \fi
+ \thispagestyle{empty}
+ \c@page\z@}
+
+\def\endtitlepage{
+ \if@restonecol
+ \twocolumn
+ \else
+ \newpage
+ \fi}
+
+% ARRAY AND TABULAR
+%
+\arraycolsep .5em % Half the space between columns in array environment.
+\tabcolsep .6em % Half the space between columns in tabular environment.
+\arrayrulewidth .04em % Width of rules in array and tabular environment.
+\doublerulesep .2em % Space between adjacent rules in array or tabular env.
+
+% TABBING
+%
+\tabbingsep\labelsep % Space used by the \' command. (See LaTeX manual.)
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+%
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+%
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep .3em % Space left between box and text by \fbox and \framebox.
+\fboxrule .04em % Width of rules in box made by \fbox and \framebox.
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes from
+% the text. It should take zero vertical space, so it needs a negative
+% skip to compensate for any positive space taken by the rule. (See
+% PLAIN.TEX.)
+%
+\def\footnoterule{
+ \kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@} % The \hrule has default height of .04em .
+
+% \newcounter{footnote}
+\@addtoreset{footnote}{chapter} % Numbers footnotes within chapters
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when effectively
+% inside a \parbox of width \columnwidth (i.e., with \hsize =
+% \columnwidth).
+%
+% The following macro indents all lines of the footnote by 1em, and
+% indents the first line of a new paragraph by 1em. To change these
+% dimensions, just substitute the desired value for '10pt' [in both
+% places] or '1em'. The mark is flushright against the footnote.
+% \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-10pt\parshape \@ne 1em \@tempdima}\par
+% \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
+%
+% A simpler macro is used, in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. Thus, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+\long\def\@makefntext#1{
+ \parindent 0em
+ \hangindent 1.8em
+ \makebox[\hangindent][r]{$^{\@thefnmark}$}#1}
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default used.
+%
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+%****
+%\setcounter{topnumber} {2}
+\setcounter{topnumber} {1}
+%***
+%\setcounter{bottomnumber} {1}
+\setcounter{bottomnumber} {2}
+%***
+\setcounter{totalnumber} {3}
+%***
+\setcounter{dbltopnumber} {2}
+%***
+%\def\topfraction {.7}
+\def\topfraction {.8}
+%***
+%\def\bottomfraction {.3}
+\def\bottomfraction {.8}
+%***
+%\def\textfraction {.2}
+\def\textfraction {.1}
+%***
+%\def\floatpagefraction {.5}
+\def\floatpagefraction {.2}
+%***
+\def\dbltopfraction {.7}
+%***
+\def\dblfloatpagefraction {.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with \normalsize.
+%
+\long\def\@makecaption#1#2{
+ \vskip 1em
+ \setbox\@tempboxa\hbox{{\normalsize \sf #1: #2}}
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line THEN
+ \parindent 0em
+ \settowidth{\hangindent}{{\normalsize \sf #1: }}
+ \makebox[\hangindent][r]{{\normalsize \sf #1: }}{\normalsize \sf #2}
+% \unhbox\@tempboxa\par % set as ordinary paragraph.
+ \else % ELSE
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil} % center.
+ \fi}
+% To define a float of type TYPE (e.g., TYPE = figure), the document style
+% must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE has
+% associated a unique positive TYPE NUMBER, which is a power
+% of two. E.g., figures might have type number 1, tables type
+% number 2, programs type number 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For example,
+% \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by \fps@TYPE.
+% The environment is ended by \end@float.
+% E.g., \figure == \@float{figure}, \endfigure == \end@float.
+
+% FIGURE
+%
+\newcounter{figure}[chapter]
+\def\thefigure{\thechapter.\@arabic\c@figure}
+\def\ext@figure{lof}
+\def\ftype@figure{1}
+\def\fps@figure{htbp}
+\def\fnum@figure{{\sf \@capfigure\ \thefigure}}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}[chapter]
+\def\thetable{\thechapter.\@arabic\c@table}
+\def\ext@table{lot}
+\def\ftype@table{2}
+\def\fps@table{htbp}
+\def\fnum@table{\@captable\ \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+% ****************************************
+% * TITLE *
+% ****************************************
+%
+% Uses same title and abstract format as the article style's
+% titlepage option.
+%
+\def\maketitle{
+ \begin{titlepage}
+ \let\footnotesize\small % Local definitions to make \thanks produce
+ \let\footnoterule\relax % \normalsize footnotes with no separating rule.
+ \setcounter{page}{0}
+ \null
+ \vfil
+ \vskip 6em % To adjust centering.
+ \begin{center}
+ {\LARGE\@title\par} % Set title in \LARGE size.
+ \vskip 3em % Vertical space after title.
+ { \large % Set author in \large size.
+ \lineskip .75em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1.5em % Vertical space after author.
+ {\large \@date \par} % Set date in \large size.
+ \end{center}\par
+ \@thanks
+ \vfil
+ \null
+ \end{titlepage}
+ \setcounter{footnote}{0} % Footnotes start at zero again.
+ \let\thanks\relax
+ \gdef\@thanks{}
+ \gdef\@author{}
+ \gdef\@title{}
+ \let\maketitle\relax}
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \chaptermark, \sectionmark, ... , where
+% \chaptermark{TEXT} is called by \chapter to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'left' mark. Works like TeX's
+% \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
+% macro, gets the current 'right' mark. Works like TeX's
+% \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \chapter command and
+% the right mark is changed by a \section command. However, it does
+% produce somewhat anomalous results if two \bothmark's occur on the same page.
+%
+% Commands like \tableofcontents that should set the marks in some page styles
+% use a \@mkboth command, which is \let by the pagestyle command (\ps@...)
+% to \markboth for setting the heading or \@gobbletwo to do nothing.
+%
+\mark{{}{}} % Initializes TeX's marks
+% \ps@empty and \ps@plain defined in LATEX.TEX
+
+% Definition of 'headings' page style
+%
+% Note the use of ##1 for parameter of \def\chaptermark inside the
+% \def\ps@headings.
+%
+\def\ps@headings{
+ \let\@mkboth\markboth
+ \def\@evenhead{\rm\thepage\hfil \sl\leftmark\hbox{}}% Left heading.
+ \def\@oddhead{\hbox{}\sl\rightmark \hfil\rm\thepage}% Right heading.
+ \def\@oddfoot{}
+ \def\@evenfoot{}
+ \def\chaptermark##1{
+ \markboth{\uppercase{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ \thechapter. \
+ \fi ##1}}{}}%
+ \def\sectionmark##1{\markright{\uppercase{ \ifnum \c@secnumdepth >\z@
+ \thesection. \
+ \fi ##1}}}}
+% Definition of 'myheadings' page style.
+%
+\def\ps@myheadings{
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{\hbox{}\sl\rightmark \hfil\rm\thepage}
+ \def\@evenhead{\rm\thepage\hfil \sl\leftmark\hbox{}}
+ \def\@oddfoot{}
+ \def\@evenfoot{}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+% Definition of 'usplain' page style.
+%
+\def\ps@usplain{
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead {\hfil \thepage \hfil }
+ \def\@evenhead{\hfil \thepage \hfil }
+ \def\@oddfoot{}
+ \def\@evenfoot{}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}}
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% EQUATION and EQNARRAY -- put here because it must follow \chapter definition
+%
+% \newcounter{equation}
+%
+\@addtoreset{equation}{chapter} % Makes \chapter reset 'equation' counter.
+\def\theequation{\thechapter.\arabic{equation}}
+
+% \jot = 0.3em % Extra space added between lines of an eqnarray environment
+% The macro \@eqnnum defines how equation numbers are to appear in equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+\def\bs{$\backslash$}
+\let\3\ss
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+%
+\if@twocolumn \twocolumn \sloppy % Two-column.
+\else \onecolumn \fussy % Single-column.
+\fi
+\pagenumbering{arabic} % Arabic page numbers
+\pagestyle{usplain} % `usplain' page style
+\makeatother % re-make at a special character
diff --git a/macros/latex209/contrib/rus/us10.sty b/macros/latex209/contrib/rus/us10.sty
new file mode 100644
index 0000000000..77eb799621
--- /dev/null
+++ b/macros/latex209/contrib/rus/us10.sty
@@ -0,0 +1,105 @@
+
+% *****************************************
+% * FONTS 10pt (rm or sf) OPTION *
+% *****************************************
+% * USUS DOCUMENT STYLE *
+% * R.Harscheidt, IKE/UNI Stuttgart *
+% *****************************************
+%
+
+\typeout{USUS - Document Style Option 'FONTS 10 pt'. Released 4 September 1987}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This was made from:
+%
+% BOOK DOCUMENT STYLE -- Released 23 September 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\sfload#1#2#3{
+ \ifx\@fontstyle\sf
+ \sf
+ \def\bf{\@getfont\pbf\bffam #1 {#2}}
+ \def\it{\@getfont\pit\itfam #1 {#3}}
+ \let\em\it
+ \fi}
+
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt\@fontstyle}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt\@fontstyle}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt\@fontstyle
+ \abovedisplayskip 6pt plus 2pt minus 4pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 3pt plus 1pt minus 2pt%
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\topsep 3pt plus 1pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}}
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt\@fontstyle
+ \abovedisplayskip 8.5pt plus 3pt minus 4pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 4pt plus 2pt minus 2pt%
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\topsep 4pt plus 2pt minus 2pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+ \sfload{\@xpt}
+ {cmssbx10 \@magscale0}
+ {cmssi10 \@magscale0}
+ \abovedisplayskip 10pt plus 2pt minus 5pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 6pt plus 3pt minus 3pt%
+ \belowdisplayshortskip \abovedisplayshortskip}
+
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt
+ \sfload{\@xiipt}
+ {cmssbx10 \@magscale1}
+ {cmssi10 \@magscale1}}
+
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt
+ \sfload{\@xivpt}
+ {cmssbx10 \@magscale2}
+ {cmssi10 \@magscale2}}
+
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt
+ \sfload{\@xviipt}
+ {cmssbx10 \@magscale3}
+ {cmssi10 \@magscale3}}
+
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt
+ \sfload{\@xxpt}
+ {cmssbx10 \@magscale4}
+ {cmssi10 \@magscale4}}
+
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt
+ \sfload{\xxvpt}
+ {cmssbx10 \@magscale5}
+ {cmssi10 \@magscale5}}
+
+\normalsize % Choose the normalsize font.
+
diff --git a/macros/latex209/contrib/rus/us11.sty b/macros/latex209/contrib/rus/us11.sty
new file mode 100644
index 0000000000..0f725bfd65
--- /dev/null
+++ b/macros/latex209/contrib/rus/us11.sty
@@ -0,0 +1,108 @@
+
+% *****************************************
+% * FONTS 11pt (rm or sf) OPTION *
+% *****************************************
+% * USUS DOCUMENT STYLE *
+% * R.Harscheidt, IKE/UNI Stuttgart *
+% *****************************************
+%
+
+\typeout{USUS - Document Style Option 'FONTS 11 pt'. Released 4 September 1987}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This was made from:
+%
+% BOOK DOCUMENT STYLE -- Released 23 September 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\sfload#1#2#3{
+ \ifx\@fontstyle\sf
+ \sf
+ \def\bf{\@getfont\pbf\bffam #1 {#2}}
+ \def\it{\@getfont\pit\itfam #1 {#3}}
+ \let\em\it
+ \fi}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt\@fontstyle}
+
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt\@fontstyle}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt\@fontstyle
+ \abovedisplayskip 8pt plus 2pt minus 4pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 4pt plus 2pt minus 2pt%
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\topsep 4pt plus 2pt minus 2pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}}
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+ \sfload{\@xpt}
+ {cmssbx10 \@magscale0}
+ {cmssi10 \@magscale0}
+ \abovedisplayskip 10pt plus 2pt minus 5pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 6pt plus 3pt minus 3pt%
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\topsep 6pt plus 2pt minus 2pt
+ \parsep 3pt plus 2pt minus 1pt
+ \itemsep \parsep}}
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+ \sfload{\@xpt}
+ {cmssbx10 \@halfmag}
+ {cmssi10 \@halfmag}
+ \abovedisplayskip 11pt plus 3pt minus 6pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 6.5pt plus 3.5pt minus 3pt%
+ \belowdisplayshortskip \abovedisplayshortskip}
+
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt
+ \sfload{\@xiipt}
+ {cmssbx10 \@magscale1}
+ {cmssi10 \@magscale1}}
+
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt
+ \sfload{\@xivpt}
+ {cmssbx10 \@magscale2}
+ {cmssi10 \@magscale2}}
+
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt
+ \sfload{\@xviipt}
+ {cmssbx10 \@magscale3}
+ {cmssi10 \@magscale3}}
+
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt
+ \sfload{\@xxpt}
+ {cmssbx10 \@magscale4}
+ {cmssi10 \@magscale4}}
+
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt
+ \sfload{\@xxvpt}
+ {cmssbx10 \@magscale5}
+ {cmssi10 \@magscale5}}
+
+\normalsize % Choose the normalsize font.
+
diff --git a/macros/latex209/contrib/rus/us12.sty b/macros/latex209/contrib/rus/us12.sty
new file mode 100644
index 0000000000..79cc61b4b5
--- /dev/null
+++ b/macros/latex209/contrib/rus/us12.sty
@@ -0,0 +1,111 @@
+
+% *****************************************
+% * FONTS 12pt (rm or sf) OPTION *
+% *****************************************
+% * USUS DOCUMENT STYLE *
+% * R.Harscheidt, IKE/UNI Stuttgart *
+% *****************************************
+%
+
+\typeout{USUS - Document Style Option 'FONTS 12 pt'. Released 4 September 1987}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This was made from:
+%
+% BOOK DOCUMENT STYLE -- Released 23 September 1985
+% for LaTeX version 2.09
+% Copyright (C) 1985 by Leslie Lamport
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize . This is
+% done only for \normalsize, not for any other size-changing commands.
+
+\def\sfload#1#2#3{
+ \ifx\@fontstyle\sf
+ \sf
+ \def\bf{\@getfont\pbf\bffam #1 {#2}}
+ \def\it{\@getfont\pit\itfam #1 {#3}}
+ \let\em\it
+ \fi}
+
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt\@fontstyle}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt\@fontstyle}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+ \sfload{\@xpt}
+ {cmssbx10\@magscale0}
+ {cmssi10\@magscale0}
+ \abovedisplayskip 10pt plus 2pt minus 5pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 6pt plus 3pt minus 3pt%
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\topsep 6pt plus 2pt minus 2pt
+ \parsep 3pt plus 2pt minus 1pt
+ \itemsep \parsep}}
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+ \sfload{\@xipt}
+ {cmssbx10 \@halfmag}
+ {cmssi10 \@halfmag}
+ \abovedisplayskip 11pt plus 3pt minus 6pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 6.5pt plus 3.5pt minus 3pt%
+ \belowdisplayshortskip \abovedisplayshortskip
+ \def\@listi{\parsep 4.5pt plus 2pt minus 1pt
+ \topsep 9pt plus 3pt minus 5pt
+ \itemsep \parsep}}
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+ \sfload{\@xiipt}
+ {cmssbx10 \@magscale1}
+ {cmssi10 \@magscale1}
+ \abovedisplayskip 12pt plus 3pt minus 7pt%
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip 6.5pt plus 3.5pt minus 3pt%
+ \belowdisplayshortskip \abovedisplayshortskip}
+
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt
+ \sfload{\@xivpt}
+ {cmssbx10 \@magscale2}
+ {cmssi10 \@magscale2}}
+
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt
+ \sfload{\@xviipt}
+ {cmssbx10 \@magscale3}
+ {cmssi10 \@magscale3}}
+
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt
+ \sfload{\@xxpt}
+ {cmssbx10 \@magscale4}
+ {cmssi10 \@magscale4}}
+
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt
+ \sfload{\@xxvpt}
+ {cmssbx10 \@magscale5}
+ {cmssi10 \@magscale5}}
+
+\def\Huge{\@setsize\Huge{36pt}\xxxpt\@xxxpt
+ \sfload{\@xxxpt}
+ {cmssbx10 scaled 2986}
+ {cmssi10 scaled 2986}}
+
+\normalsize % Choose the normalsize font.
+
diff --git a/macros/latex209/contrib/rus/usus.readme b/macros/latex209/contrib/rus/usus.readme
new file mode 100644
index 0000000000..bff93e4abc
--- /dev/null
+++ b/macros/latex209/contrib/rus/usus.readme
@@ -0,0 +1,5 @@
+Der uni.sty ist eine Anpassung von book und article an
+die Beduerfnisse des Rechenzentrums.
+
+Wenn Sie Fragen haben: B. Burr, 685-5811
+
diff --git a/macros/latex209/contrib/schulzrinne/schulzrinne.sty b/macros/latex209/contrib/schulzrinne/schulzrinne.sty
new file mode 100644
index 0000000000..2f16fc922a
--- /dev/null
+++ b/macros/latex209/contrib/schulzrinne/schulzrinne.sty
@@ -0,0 +1,17 @@
+%%%%%%%%%%%%%%%%% cut here--start of Schulzrinne.sty %%%%%%%%%%%%%%%%
+% Schulzrinne.sty--provide for blank pages between chapters
+% This redefinition of the \cleardoublepage command provides
+% for a special pagestyle for the "extra" pages which are generated
+% to ensure that the chapter opener is on a recto page.
+% The pagestyle is "chapterverso"; for many publishers, this should be
+% identical to "empty", so that's the default.
+\def\cleardoublepage{\clearpage
+ \if@twoside
+ \ifodd\c@page\else
+ \null\thispagestyle{chapterverso}\newpage
+ \if@twocolumn\null\newpage\fi
+ \fi
+ \fi
+ }%
+\def\ps@chapterverso{\ps@empty}%
+%%%%%%%%%%%%%%%%% cut here--end of Schulzrinne.sty %%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/schulzrinne/schulzrinne.tex b/macros/latex209/contrib/schulzrinne/schulzrinne.tex
new file mode 100644
index 0000000000..41d187ae3e
--- /dev/null
+++ b/macros/latex209/contrib/schulzrinne/schulzrinne.tex
@@ -0,0 +1,11 @@
+%%%%%%%%%%%%%%%%% cut here--start of Schulzrinne.tex %%%%%%%%%%%%%%%%
+% Schulzrinne.tex--test for blank pages between chapters
+\documentstyle{book}%
+\documentstyle{Schultzrinne}%
+\begin{document}%
+\null\newpage
+
+\chapter{test}%
+
+\end{document}%
+%%%%%%%%%%%%%%%%% cut here--end of Schulzrinne.tex %%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/seminar b/macros/latex209/contrib/seminar
new file mode 120000
index 0000000000..308de1fc04
--- /dev/null
+++ b/macros/latex209/contrib/seminar
@@ -0,0 +1 @@
+../../latex/contrib/seminar \ No newline at end of file
diff --git a/macros/latex209/contrib/sfarticle/sfart10.sty b/macros/latex209/contrib/sfarticle/sfart10.sty
new file mode 100644
index 0000000000..3a16bbc669
--- /dev/null
+++ b/macros/latex209/contrib/sfarticle/sfart10.sty
@@ -0,0 +1,143 @@
+% art10.sty 22-Dec-87
+% Modified by B.Simon (SIM-RZ TU Wien) + H.Partl (DIG-RZ TU Wien)
+% last change: 29-Sep-88
+% Modifications:
+% - Part replaced by \partname
+% - \partname defined to contain the original text
+% - Ctrl-L removed
+% - long lines (>80) split
+
+\def\partname{Part}
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+% *** Ergaenzung von art10.sty, um optional das Laden von sans serif Fonts
+% *** zu ermoeglichen - I. Loebich 01.01.1990
+
+\def\sfload#1#2#3{
+ \ifx\@fontstyle\sf
+ \sf
+ \def\bf{\@getfont\pbf\bffam #1 {#2}}
+ \def\it{\@getfont\pit\itfam #1 {#3}}
+ \let\em\it
+ \fi}
+
+% *** Ende der Ergaenzung
+% *** Alle weiteren Aenderungen befinden sich in dem Abschnitt bis zum
+% *** Kommando \normalsize
+% *** Ergaenzt wurde entweder \@fontstyle oder \sfload{...}{...}{...}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\sfload{\@xpt}{cmssbx10 \@magscale0}{cmssi10 \@magscale0}
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt\@fontstyle
+\abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt\@fontstyle
+\abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+2pt
+\def\@listi{\leftmargin\leftmargini \topsep 3pt plus 1pt minus 1pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt\@fontstyle}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt\@fontstyle}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt
+\sfload{\@xiipt}{cmssbx10 \@magscale1}{cmssi10 \@magscale1}}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt
+\sfload{\@xivpt}{cmssbx10 \@magscale2}{cmssi10 \@magscale2}}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt
+\sfload{\@xviipt}{cmssbx10 \@magscale3}{cmssi10 \@magscale3}}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt
+\sfload{\@xxpt}{cmssbx10 \@magscale4}{cmssi10 \@magscale4}}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt
+\sfload{\xxvpt}{cmssbx10 \@magscale5}{cmssi10 \@magscale5}}
+\normalsize
+
+\if@twoside \oddsidemargin 44pt \evensidemargin 82pt \marginparwidth 107pt
+\else \oddsidemargin 63pt \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt
+ \topmargin 27pt \headheight 12pt \headsep 25pt \footskip 30pt
+
+\textheight = 43\baselineskip
+\advance\textheight by \topskip
+\textwidth 345pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 6.65pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 15pt \partopsep 2pt plus 1pt minus 1pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf \partname\ \thepart \par \nobreak \fi
+ \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+\leftmargini 25pt
+\leftmarginii 22pt \leftmarginiii 18.7pt \leftmarginiv 17pt \leftmarginv 10pt
+\leftmarginvi 10pt
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 4pt plus 2pt minus 1pt\topsep 8pt
+plus 2pt minus 4pt\itemsep 4pt plus 2pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/sfarticle/sfart11.sty b/macros/latex209/contrib/sfarticle/sfart11.sty
new file mode 100644
index 0000000000..4e48f9e733
--- /dev/null
+++ b/macros/latex209/contrib/sfarticle/sfart11.sty
@@ -0,0 +1,144 @@
+% art11.sty 22-Dec-87
+% Modified by B.Simon (SIM-RZ TU Wien) + H.Partl (DIG-RZ TU Wien)
+% last change: 29-Sep-88
+% Modifications:
+% - Part replaced by \partname
+% - \partname defined to contain the original text
+% - Ctrl-L removed
+% - long lines (>80) split
+
+\def\partname{Part}
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+% *** Ergaenzung von art11.sty, um optional das Laden von sans serif Fonts
+% *** zu ermoeglichen - I. Loebich 01.01.1990
+
+\def\sfload#1#2#3{
+ \ifx\@fontstyle\sf
+ \sf
+ \def\bf{\@getfont\pbf\bffam #1 {#2}}
+ \def\it{\@getfont\pit\itfam #1 {#3}}
+ \let\em\it
+ \fi}
+
+% *** Ende der Ergaenzung
+% *** Alle weiteren Aenderungen befinden sich in dem Abschnitt bis zum
+% *** Kommando \normalsize
+% *** Ergaenzt wurde entweder \@fontstyle oder \sfload{...}{...}{...}
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\sfload{\@xpt}{cmssbx10 \@halfmag}{cmssi10 \@halfmag}
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\sfload{\@xpt}{cmssbx10 \@magscale0}{cmssi10 \@magscale0}
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\leftmargin\leftmargini \topsep 6pt plus 2pt minus 2pt\parsep 3pt
+plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt\@fontstyle
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt
+\def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt\@fontstyle}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt\@fontstyle}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt
+\sfload{\@xiipt}{cmssbx10 \@magscale1}{cmssi10 \@magscale1}}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt
+\sfload{\@xivpt}{cmssbx10 \@magscale2}{cmssi10 \@magscale2}}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt
+\sfload{\@xviipt}{cmssbx10 \@magscale3}{cmssi10 \@magscale3}}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt
+\sfload{\@xxpt}{cmssbx10 \@magscale4}{cmssi10 \@magscale4}}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt
+\sfload{\@xxvpt}{cmssbx10 \@magscale5}{cmssi10 \@magscale5}}
+\normalsize
+
+\if@twoside \oddsidemargin 36pt \evensidemargin 74pt \marginparwidth 100pt
+\else \oddsidemargin 54pt \evensidemargin 54pt
+ \marginparwidth 83pt
+\fi
+\marginparsep 10pt
+ \topmargin 27pt
+\headheight 12pt \headsep 25pt \footskip 30pt
+\textheight = 38\baselineskip
+\advance\textheight by \topskip
+\textwidth 360pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 7.7pt
+\skip\footins 10pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt \parindent 17pt \partopsep 3pt plus 1pt minus 2pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf \partname\ \thepart \par\nobreak \fi
+ \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 4.5pt plus 2pt minus 1pt\topsep
+9pt plus 3pt minus 5pt\itemsep 4.5pt plus 2pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5pt plus 2pt minus 1pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/sfarticle/sfart12.sty b/macros/latex209/contrib/sfarticle/sfart12.sty
new file mode 100644
index 0000000000..396b76a308
--- /dev/null
+++ b/macros/latex209/contrib/sfarticle/sfart12.sty
@@ -0,0 +1,148 @@
+% art12.sty 22-Dec-87
+% Modified by B.Simon (SIM-RZ TU Wien) + H.Partl (DIG-RZ TU Wien)
+% last change: 29-Sep-88
+% Modifications:
+% - Part replaced by \partname
+% - \partname defined to contain the original text
+% - Ctrl-L removed
+% - long lines (>80) split
+
+% Modified by B.Simon (SIM-RZ TU Wien) [captions]
+
+\def\partname{Part}
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+% *** Ergaenzung von art12.sty, um optional das Laden von sans serif Fonts
+% *** zu ermoeglichen - I. Loebich 01.01.1990
+
+\def\sfload#1#2#3{
+ \ifx\@fontstyle\sf
+ \sf
+ \def\bf{\@getfont\pbf\bffam #1 {#2}}
+ \def\it{\@getfont\pit\itfam #1 {#3}}
+ \let\em\it
+ \fi}
+
+% *** Ende der Ergaenzung
+% *** Alle weiteren Aenderungen befinden sich in dem Abschnitt bis zum
+% *** Kommando \normalsize
+% *** Ergaenzt wurde entweder \@fontstyle oder \sfload{...}{...}{...}
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+\sfload{\@xiipt}{cmssbx10 \@magscale1}{cmssi10 \@magscale1}
+\abovedisplayskip 12pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\sfload{\@xipt}{cmssbx10 \@halfmag}{cmssi10 \@halfmag}
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt
+\def\@listi{\leftmargin\leftmargini \parsep 4.5pt plus 2pt minus 1pt \itemsep
+\parsep
+ \topsep 9pt plus 3pt minus 5pt}}
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\sfload{\@xpt}{cmssbx10\@magscale0}{cmssi10 \@magscale0}
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\leftmargin\leftmargini \topsep 6pt plus 2pt minus 2pt\parsep 3pt
+plus 2pt minus 1pt
+\itemsep \parsep}}
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt\@fontstyle}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt\@fontstyle}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt
+\sfload{\@xivpt}{cmssbx10 \@magscale2}{cmssi10 \@magscale2}}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt
+\sfload{\@xviipt}{cmssbx10 \@magscale3}{cmssi10 \@magscale3}}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt
+\sfload{\@xxpt}{cmssbx10 \@magscale4}{cmssi10 \@magscale4}}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt
+\sfload{\@xxvpt}{cmssbx10 \@magscale5}{cmssi10 \@magscale5}}
+% \def\Huge{\@setsize\Huge{36pt}\xxxpt\@xxxpt
+% \sfload{\@xxxpt}{cmssbx10 scaled 2986}{cmssi10 scaled 2986}}
+\let\Huge=\huge
+\normalsize
+
+\if@twoside \oddsidemargin 21pt \evensidemargin 59pt \marginparwidth 85pt
+\else \oddsidemargin 39.5pt \evensidemargin 39.5pt
+ \marginparwidth 68pt
+\fi
+\marginparsep 10pt
+ \topmargin 27pt \headheight 12pt \headsep 25pt \footskip 30pt
+
+\textheight = 36\baselineskip
+\advance\textheight by \topskip
+\textwidth 390pt \columnsep 10pt \columnseprule 0pt
+
+\footnotesep 8.4pt
+\skip\footins 10.8pt plus 4pt minus 2pt
+\floatsep 14pt plus 2pt minus 4pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt \@maxsep 20pt \dblfloatsep 14pt plus 2pt
+minus 4pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 10pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 10pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 7pt
+
+\parskip 0pt plus 1pt \parindent 1.5em \partopsep 3pt plus 2pt minus 2pt
+\@lowpenalty 51 \@medpenalty 151 \@highpenalty 301
+\@beginparpenalty -\@lowpenalty \@endparpenalty -\@lowpenalty \@itempenalty
+-\@lowpenalty
+
+\def\part{\par \addvspace{4ex} \@afterindentfalse \secdef\@part\@spart}
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne \refstepcounter{part}
+\addcontentsline{toc}{part}{\thepart \hspace{1em}#1}\else
+\addcontentsline{toc}{part}{#1}\fi { \parindent 0pt \raggedright
+ \ifnum \c@secnumdepth >\m@ne \Large \bf \partname\ \thepart \par\nobreak \fi
+ \huge
+\bf #2\markboth{}{}\par } \nobreak \vskip 3ex \@afterheading }
+\def\@spart#1{{\parindent 0pt \raggedright
+ \huge \bf
+ #1\par} \nobreak \vskip 3ex \@afterheading }
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus
+ .2ex}{-1em}{\normalsize\bf}}
+
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+\leftmargini 2.5em
+\leftmarginii 2.2em \leftmarginiii 1.87em \leftmarginiv 1.7em \leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini \parsep 5pt plus 2.5pt minus 1pt\topsep
+10pt plus 4pt minus 6pt\itemsep 5pt plus 2.5pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5pt plus 2.5pt minus 1pt
+ \parsep 2.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
diff --git a/macros/latex209/contrib/sfarticle/sfarticle.sty b/macros/latex209/contrib/sfarticle/sfarticle.sty
new file mode 100644
index 0000000000..6a63bac341
--- /dev/null
+++ b/macros/latex209/contrib/sfarticle/sfarticle.sty
@@ -0,0 +1,261 @@
+% article.sty 5-Feb-88
+% Modified by B.Simon (SIM-RZ TU Wien) + H.Partl (DIG-RZ TU Wien)
+% last change: 29-Sep-88
+% Modifications:
+% - Contents etc. replaced by \contentsname etc.
+% - CONTENTS etc. replaced by \uppercase{\contentsname} etc.
+% - \contentsname etc. defined to contain the original texts
+% - typeout message changed
+% - Ctrl-L removed
+% - long lines (>80) split
+
+
+\def\contentsname{Contents}
+\def\listfigurename{List of Figures}
+\def\listtablename{List of Tables}
+\def\refname{References}
+\def\indexname{Index}
+\def\figurename{Figure}
+\def\tablename{Table}
+\def\abstractname{Abstract}
+
+\typeout{Document Style `article' <5 Feb 88>, modified at TUW <29 Sep 88>}
+
+% *** Ergaenzung fuer optionale Verwendung von sans serif Fonts
+% *** I. Loebich 28.12.1989
+\typeout{ modified at RUS <28 Dec 89>}
+
+\def\@fontstyle{} % default is roman
+\@namedef{ds@sf}{\let\@fontstyle\sf} % sf option sans serif
+
+% *** Ende der Ergaenzung
+
+\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\@namedef{ds@12pt}{\def\@ptsize{2}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+\input sfart1\@ptsize.sty\relax
+
+\def\labelenumi{\arabic{enumi}.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\alph{enumii})}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\roman{enumiii}.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\Alph{enumiv}.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{\contentsname
+ \@mkboth{\uppercase{\contentsname}}{\uppercase{\contentsname}}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{\listfigurename\@mkboth
+ {\uppercase{\listfigurename}}{\uppercase{\listfigurename}}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{\listtablename\@mkboth
+ {\uppercase{\listtablename}}{\uppercase{\listtablename}}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+\def\thebibliography#1{\section*{\refname\@mkboth
+ {\uppercase{\refname}}{\uppercase{\refname}}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{\indexname}]
+ \@mkboth{\uppercase{\indexname}}{\uppercase{\indexname}}\thispagestyle
+ {plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize #1: #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename\ \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename\ \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em \begin{center}
+ {\LARGE \@title \par} \vskip 1.5em {\large \lineskip .5em
+\begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em {\large \@date} \end{center}
+ \par
+ \vskip 1.5em}
+\def\abstract{\if@twocolumn
+\section*{\abstractname}
+\else \small
+\begin{center}
+{\bf \abstractname\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
diff --git a/macros/latex209/contrib/shading/shading.sty b/macros/latex209/contrib/shading/shading.sty
new file mode 100644
index 0000000000..10e864aa1b
--- /dev/null
+++ b/macros/latex209/contrib/shading/shading.sty
@@ -0,0 +1,232 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% filename = "shading.sty",
+%%% version = "1.3",
+%%% date = "29 September 1992",
+%%% time = "08:23:05 MDT",
+%%% author = "Art Mulder",
+%%% address = "Department of Computing Science
+%%% 615 General Services Building
+%%% University of Alberta
+%%% Edmonton, Alberta
+%%% T6G 2H1, Canada.",
+%%% telephone = "n/a",
+%%% FAX = "(403) 492-1071",
+%%% checksum = "06606 232 1004 9082",
+%%% email = "art@cs.ualberta.ca",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX style option, shaded background",
+%%% supported = "yes",
+%%% docstring = "A LaTeX Style file for putting text on a
+%%% shaded background. Requires a PostScript
+%%% printer and dvi-file converter.
+%%%
+%%% NOTE: Art Mulder is not the author
+%%% of this file, just the most recent
+%%% modifier.
+%%%
+%%% The style file is based upon ideas by
+%%% Je'ro^me Maillot, maillot@bora.inria.fr
+%%% which where turned into TeX code by
+%%% Leo, LEO@vaxc.cc.monash.edu.au.
+%%% That TeX code was converted into a LaTeX
+%%% style file by M.A.R. ( mroth@afit.af.mil )",
+%%% }
+%%% ====================================================================
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 'Shading.sty'
+%
+% Art Mulder ( art@cs.ualberta.ca ) 28-Sept-1992
+% - Changed name of "linewidth" variable to "outlineboxwidth".
+% That variable name conflicted with another variable of the same
+% name in "latex.tex" when doing miniparagraphs.
+% - Wrote accompanying document ``shading.tex'', brief instructions
+% in the use of this style file, together with several examples.
+%
+% M.A.R. ( mroth@afit.af.mil ) 22 Jan 92
+% - Modified to work as a LaTeX style:
+% - added setting the grayscale as an optional argument.
+% - allowed multiple paragraphs in the \parashade command
+%
+% Leo ?? ( LEO@vaxc.cc.monash.edu.au )
+% - Wrote the original TeX code, based upon some ideas
+% from Je'ro^me Maillot ( maillot@bora.inria.fr ).
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% USAGE: \textshade[grayscale]{corneroption}{text to be shaded}
+% \parashade[grayscale]{corneroption}{paragraph(s) to be shaded}
+% where
+% grayscale is a number from 0 to 1, the higher the number the
+% lighter the shading, if missing it is set to 0.95
+% corneroption is either sharpcorners or roundcorners
+%
+% LIMITATIONS: --can not break the shaded text across lines (\textshade) or
+% across pages (both)
+% --can not specify the line width of the surrounding box or
+% the amount of space between the surrounding
+% box and the text to be shaded as arguments
+% (Actually you can, see the use of "\gdef" in the example)
+% --modifying the xgrayspace and ygrayspace in the argument
+% will only affect the space added to the right and
+% bottom of the box, respectively
+%
+% EXAMPLES:
+% This is a test of a\ \textshade[1]{roundcorners}{shaded box} routine.
+% With a grayscale of 1, we essentially get no shading, and just a box.
+%
+% This is another test of a\ \textshade{sharpcorners}{shaded box} routine.
+% The default shading of .95 is used here.
+%
+% \parashade[.995]{roundcorners}{\gdef\outlineboxwidth{.5}%
+% This is one very long line which I expect will be broken over one or more
+% lines. The idea is to have this paragraph enclosed in a shaded box. I'll
+% just keep on typing until I can be sure that there are more than two lines
+% in this paragraph. I expect that this should be well and truely sufficient
+% to test this macro.
+% } %This shows an example of changing the outlineboxwidth used, without
+% %changing the style
+%
+% The field equations of General Relativity are\ %
+%%
+% \textshade{roundcorners}{\hbox{$G_{\mu\nu} = kT_{\mu\nu}$}}
+%
+% They can also be written as
+%
+% \parashade{sharpcorners}{$$R_{\mu\nu}-{1\over2}g_{\mu\nu}R = kT_{\mu\nu}$$}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newbox\graybox
+\newdimen\xgrayspace
+\newdimen\ygrayspace
+
+%----------------------------------------------------------------------------
+%
+% The following \TeX code was based on previous work by
+%
+% Je'ro^me Maillot, maillot@bora.inria.fr
+%
+%----------------------------------------------------------------------------
+%
+% Use the following for one or more words within a line.
+%
+%MAR-added ability for optional argument for user to set grayscale
+\def\textshade{\@ifnextchar[{\@textshade}{\@textshade[0.95]}}
+\def\@textshade[#1]#2#3{%
+ \xgrayspace=4pt%
+ \ygrayspace=4pt%
+ \def\grayshade{#1}%
+ \def\outlineboxwidth{1}%
+ \def\theradius{5}%
+ \setbox\graybox=\hbox{\surroundboxa{#3}}%
+ \hbox{%
+ \hbox to 0pt{%
+ \special{"gsave newpath 0 0 moveto %
+ 0 1 copy /xmin exch store %
+ \number\dp\graybox \space -65536 div 1 copy /ymin exch store %
+ \number\wd\graybox \space 65536 div 1 copy /xmax exch store %
+ \number\ht\graybox \space 65536 div 1 copy /ymax exch store %
+ \theradius\space /radius exch store
+ \outlineboxwidth\space /linewidth exch store
+ \grayshade\space /grayshade exch store
+ #2 grestore}}%
+ \box\graybox}}%
+%
+% Use the following for paragraphs.
+%
+%MAR-added ability for optional argument for user to set grayscale
+\def\parashade{\@ifnextchar[{\@parashade}{\@parashade[0.95]}}
+%MAR-added \long to allow multiple paragraphs in one shaded block
+\long\def\@parashade[#1]#2#3{%
+ \xgrayspace=10pt%
+ \ygrayspace=10pt%
+ \def\grayshade{#1}%
+ \def\outlineboxwidth{2}%
+ \def\theradius{10}%
+ \def\thevskip{15pt}%
+ \setbox\graybox=\hbox{\surroundboxb{#3}}%
+ \vskip\thevskip
+ \hbox{%
+ \hbox to 0pt{%
+ \special{"gsave newpath 0 0 moveto %
+ 0 1 copy /xmin exch store %
+ \number\dp\graybox \space -65536 div 1 copy /ymin exch store %
+ \number\wd\graybox \space 65536 div 1 copy /xmax exch store %
+ \number\ht\graybox \space 65536 div 1 copy /ymax exch store %
+ \theradius\space /radius exch store
+ \outlineboxwidth\space /linewidth exch store
+ \grayshade\space /grayshade exch store
+ #2 grestore}}%
+ \box\graybox}%
+ \vskip\thevskip%
+}%
+%----------------------------------------------------------------------------
+%
+% A pair of box macros. Each builds a slightly oversized box
+% containing the text. The text is centred both in the vertical
+% horizontal directions.
+%
+% Use the following for one or more words within a line.
+%
+\long\def\surroundboxa#1{\leavevmode\hbox{\vtop{%
+\vbox{\kern\ygrayspace%
+\hbox{\kern\xgrayspace#1%
+ \kern\xgrayspace}}\kern\ygrayspace}}}
+%
+% Use the following for a paragraphs.
+%
+\long\def\surroundboxb#1{\leavevmode\hbox{\vtop{%
+\vbox{\kern\ygrayspace%
+\hbox{\kern\xgrayspace\vbox{\advance\hsize-2\xgrayspace#1}%
+ \kern\xgrayspace}}\kern\ygrayspace}}}
+%----------------------------------------------------------------------------
+%
+% Here are some simple PostScript routines.
+%
+% The TeX command \PScommands must be called before any of the
+% shading routines can be used.
+%
+\long\def\PScommands{\special{! TeXDict begin
+%
+/sharpbox{%
+ newpath
+ xmin ymin moveto
+ xmin ymax lineto
+ xmax ymax lineto
+ xmax ymin lineto
+ xmin ymin lineto
+ closepath
+ }bind def
+%
+/roundbox{%
+ newpath
+ xmin radius add ymin moveto
+ xmax ymin xmax ymax radius arcto
+ xmax ymax xmin ymax radius arcto
+ xmin ymax xmin ymin radius arcto
+ xmin ymin xmax ymin radius arcto 16 {pop} repeat
+ closepath
+ }bind def
+%
+/sharpcorners{%
+ sharpbox gsave grayshade setgray fill grestore
+ linewidth setlinewidth stroke
+ }bind def
+%
+/plainbox{%
+ sharpbox grayshade setgray fill
+ }bind def
+%
+/roundcorners{%
+ roundbox gsave grayshade setgray fill grestore
+ linewidth setlinewidth stroke
+ }bind def
+%
+end}% Closes dictionnary
+}%
+
+\PScommands
+
+\endinput
diff --git a/macros/latex209/contrib/shading/shading.tex b/macros/latex209/contrib/shading/shading.tex
new file mode 100644
index 0000000000..d6c0feb4a5
--- /dev/null
+++ b/macros/latex209/contrib/shading/shading.tex
@@ -0,0 +1,227 @@
+%%% ====================================================================
+%%% @LaTeX-file{
+%%% filename = "shading.tex",
+%%% version = "1.1",
+%%% date = "29 September 1992",
+%%% time = "08:30:45 MDT",
+%%% author = "Art Mulder",
+%%% address = "Department of Computing Science
+%%% 615 General Services Building
+%%% University of Alberta
+%%% Edmonton, Alberta
+%%% T6G 2H1, Canada.",
+%%% telephone = "n/a",
+%%% FAX = "(403) 492-1071",
+%%% checksum = "49623 227 1018 8613",
+%%% email = "art@cs.ualberta.ca",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "documentation",
+%%% supported = "yes",
+%%% docstring = "The LaTeX document briefly describes the
+%%% LaTeX style file ``shading.sty''.
+%%% Shading.sty is a style file for putting
+%%% text on a shaded background in LaTeX.
+%%%
+%%% Requires a Postscript printer and
+%%% dvi converter",
+%%% }
+%%% ====================================================================
+\documentstyle[12pt, moretext, shading]{article}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% shading.tex Art Mulder ( art@cs.ualberta.ca )
+% 25 September, 1992
+%
+% A brief manual on the use of the "shading.sty" LaTeX style file.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Usage:
+% - Process this file with latex. (The file "shading.sty" must either
+% be in a standard location with the other LaTeX style files, or in
+% the same directory as this file).
+% - Convert to postscript, via a tool such as "dvips"
+% - either view with a Postscript previewer (like ghostview) or
+% print to a postscript printer.
+%
+% In the above \documentstyle command, the style file ``moretext'' is
+% optional. It simply shrinks the margins to something that I like a
+% bit better than the default values for article.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Help yourself to whatever you want from this file.
+% Caveat Emptor.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{document}
+
+% Title "Page"
+%---------------------------------------------------------------------------
+\title{The {\tt shading.sty} document style}
+\author{Arthur E. Mulder\thanks{Author of this document only. The
+ style file itself has had several authors / contributors:
+ J\'{e}r\^{o}me Maillot ({\tt maillot@bora.inria.fr}),
+ Leo ?? ({\tt LEO@vaxc.cc.monash.edu.au}), and
+ M.A.R. ({\tt mroth@afit.af.mil}).}
+\date{29 September 1992 \\
+Version 1.01}
+\maketitle
+
+%---------------------------------------------------------------------------
+
+\section{Introduction}
+ The purpose of this style file is to permit you, in LaTeX, to place text
+ in a box with a shaded background. This particular solution uses
+ Postscript to do so, and is therefore of no use to you if you do not have
+ a postscript printer. Furthermore, if you wish to be able to preview your
+ document before printing, you will also need a Postscript viewer, such as
+ {\tt Ghostview}.
+
+%---------------------------------------------------------------------------
+\section{Usage}
+ To use this style option, you must add the name of the style file, {\tt
+ shading} to the {\tt documentstyle} command in your document:
+
+ \begin{quote}
+ \verb|\documentstyle[... shading ...]{article}|
+ \end{quote}
+
+ Note that this should also work with teh {\tt report} and {\tt book}
+ styles. You are not restricted to using the {\tt article} style.
+
+\subsection{Shading Commands}
+ There are two commands provided by this style:
+
+ \begin{quote}
+ \verb|\textshade|[{\em grayscale}]\{{\em corneroption}\}\{{\em text
+ to be shaded}\}
+
+ \verb|\parashade|[{\em grayscale}]\{{\em corneroption}\}\{{\em paragraph
+ to be shaded}\}
+ \end{quote}
+
+
+ \begin{tabular}{lp{4.5in}}
+ {\tt grayscale} & This is a number from 0 to 1. The higher the number,
+ the {\em lighter} the resulting shading. With a value
+ of 1, there is essentially no shading, and you end up
+ with just a box. A value of 0 is probably of little
+ practical use. If this value is omitted, a default
+ value of .95 is used. \\
+ {\tt corneroption} & This is either the {\tt sharpcorners} or
+ {\tt roundcorners}, with obvious effects upon the box
+ that is drawn. \\
+ \end{tabular}
+
+
+\subsection{Limitations}
+ There are a number of limitations that go along with this style:
+
+ \begin{itemize}
+
+ \item You can not break text across lines within the \verb|\textshade|
+ command.
+
+ \item You can not break text across pages with either command.
+
+ \item You can not specify the line width of the surrounding box, or
+ the amount of space between the surrounding box and the text to
+ be shaded {\em as arguments}.
+
+ See the examples below for how you {\em can}
+ fiddle with the line width of the surrounding box.
+
+ \item Modifying the xgrayspace and ygrayspace in the argument
+ will only affect the space added to the right and
+ bottom of the box, respectively.
+
+ \end{itemize}
+
+%---------------------------------------------------------------------------
+\section{Examples of Usage}
+
+%
+%% 1)
+%
+\subsection{}
+ \noindent\begin{minipage}{3in}
+ This is a test of a\ \textshade[1]{roundcorners}{shaded box} routine.
+ With a grayscale of 1, we essentially get no shading, and just a box.
+ \end{minipage}\hspace{.25in}\begin{minipage}{3in}
+ \begin{verbatim}
+This is a test of a\
+\textshade[1]{roundcorners}{shaded box}
+routine. With a ...
+ \end{verbatim}\end{minipage}
+
+%
+%% 2)
+%
+\subsection{}
+ \noindent\begin{minipage}{3in}
+ This is another test of a\ \textshade{sharpcorners}{shaded box}
+ routine. The default shading of .95 is used here. Note also the
+ difference between a ``sharpcorners'' and a ``roundcorners'' box.
+ \end{minipage}\hspace{.25in}\begin{minipage}{3in}
+\begin{verbatim}
+...
+\textshade{sharpcorners}{shaded box}
+...
+\end{verbatim}
+\end{minipage}
+
+%
+%% 3)
+%
+\subsection{}
+\noindent\begin{minipage}{3in}
+ \parashade[.995]{roundcorners}{\gdef\outlineboxwidth{.5}%
+ This is one very long line which I expect will be broken over one or more
+ lines. The idea is to have this paragraph enclosed in a shaded box. I'll
+ just keep on typing until I can be sure that there are more than two lines
+ in this paragraph.
+ }
+ \end{minipage}\hspace{.25in}
+\begin{minipage}{3in}
+
+\begin{verbatim}
+\parashade[.995]{roundcorners}
+{\gdef\outlineboxwidth{.5}%
+This is one very ... paragraph.}
+\end{verbatim}\end{minipage}
+
+ \smallskip
+ In the prior example, take note of how the width of the box surrounding
+ the paragraph was changed from it's default of 2 (points?) to .5,
+ through the use of the \verb|\gdef\outlineboxwidth{.5}| command.
+
+ This is probably a pretty kludgey way of doing it, but it works well
+ enough for now. If you feel like fixing it up, you're welcome to give
+ it a try!
+
+%
+%% 4)
+%
+\subsection{}
+ \noindent\begin{minipage}{3in}
+ So, let's try fiddling with the linewidth to get
+ \textshade[.8]{sharpcorners}{\gdef\outlineboxwidth{0}no box}
+ around this text. Not bad, eh?
+ \end{minipage}\hspace{.25in}\begin{minipage}{3in}
+\begin{verbatim}
+...
+\textshade[.8]{sharpcorners}
+{\gdef\outlineboxwidth{0}no box}
+...
+\end{verbatim}\end{minipage}
+
+%---------------------------------------------------------------------------
+\section{Moving On\ldots}
+ For further information about ways that you can tweak this style to serve
+ you better, please see the source code for the style: {\tt shading.sty}
+
+%---------------------------------------------------------------------------
+\section{Caveat Emptor}
+ I did not write or design this document style option. I simply wrote this
+ document, first as an exercise in trying out the shading document style,
+ and secondly as a service to any others whom I might pass this on to.
+ A fair amount of the content of this file came from the contents of the
+ style file {\tt shading.sty}. \hfill {\em \ldots Art Mulder, 9/25/92}
+%---------------------------------------------------------------------------
+\end{document}
diff --git a/macros/latex209/contrib/stickers/stickerdoc.tex b/macros/latex209/contrib/stickers/stickerdoc.tex
new file mode 100644
index 0000000000..7981f20c12
--- /dev/null
+++ b/macros/latex209/contrib/stickers/stickerdoc.tex
@@ -0,0 +1,69 @@
+
+\documentstyle[12pt,a4]{article}
+\sloppy
+\pagestyle{empty}
+\title{Stickers maken met \LaTeX}
+\author{Mark Overmars}
+\begin{document}
+\maketitle
+
+Er zijn nu een paar eenvoudige macro's om stickers te maken met \LaTeX\ op de
+laserprinter. Deze kan men als volgt gebruiken:
+
+\begin{verbatim}
+
+\documentstyle[stickers]{article}
+\begin{document}
+\begin{stickers}
+\Label{regel1}{regel2}{regel3}{regel4}{regel5}{regel6}
+\Label{regel1}{regel2}{regel3}{regel4}{regel5}{regel6}
+\Label{regel1}{regel2}{regel3}{regel4}{regel5}{regel6}
+\Sticker{Doe het zelf}
+\Sticker{Doe het zelf}
+\Sticker{Doe het zelf}
+ etc...
+\end{stickers}
+\end{document}
+
+\end{verbatim}
+
+Het afdrukken van de stickers dient binnen een environment \verb+stickers+ te
+geschieden. Dus tussen \verb+\begin{stickers}+ en \verb+\end{stickers}+.
+Er zijn twee verschillende commando's om stickers af te drukken: \verb+Label+
+en \verb+Sticker+. Bij \verb+Label+ moet men 6 argumenten meegeven die de 6
+regels van de sticker vormen. \verb+Sticker+ krijgt slechts 1 argument mee dat
+de inhoud van de sticker beschrijft. Hierin kan met \verb+\\+ op nieuwe regels
+overgegaan worden. De commando's zorgen er zelf voor dat de informatie van een
+sticker op de sticker blijft en niet doorloopt in andere stickers.
+Zet geen andere tekst in de file. Dit verstoort de positionering van de
+stickers.
+
+Nadat u de file hebt afgedrukt kunt u hem met de copieermachine op speciaal
+sticker papier copieren.
+
+Indien er problemen optreden met het formaat van de stickers
+of de positie van de
+stickers op het papier kunt u dit wijzigen met de commando's \verb+\SetTop+ en
+\verb+\SetSticker+:
+Het commando \verb+\SetTop+ krijgt twee argumenten die de positie van de
+linkerbovenhoek aangeven (in mm). Het commando \verb+\SetSticker+ krijgt 5
+argumenten. De eerste twee geven het aantal stickers in de x- en in de
+y-richting aan. De volgende twee geven de afmeting van de sticker aan (in
+mm). Het laatste argument geeft de breedte van de text op de sticker aan (in
+mm). De default settings zijn:
+
+\begin{center}
+\begin{tabular} {l r}
+x-top & 0\\
+y-top & 0\\
+x-aantal & 3\\
+y-aantal & 8\\
+x-lengte & 68\\
+y-lengte & 36\\
+text-breedte & 60\\
+\end{tabular}
+\end{center}
+
+De commando's dienen voor \verb+\begin{stickers}+ gegeven te worden!
+
+\end{document}
diff --git a/macros/latex209/contrib/stickers/stickers.sty b/macros/latex209/contrib/stickers/stickers.sty
new file mode 100644
index 0000000000..01fd0943bd
--- /dev/null
+++ b/macros/latex209/contrib/stickers/stickers.sty
@@ -0,0 +1,78 @@
+
+\input{ifthen.sty}
+\evensidemargin -20mm
+\oddsidemargin -20mm
+\topmargin -14mm
+%
+\sloppy
+\raggedright
+\pagestyle{empty}
+%
+\newcounter{count1}
+\newcounter{count2}
+\newcounter{xpos}
+\newcounter{ypos}
+\newcommand{\xsep}{68}
+\newcommand{\ysep}{35}
+\newcommand{\xbox}{60}
+\newcommand{\xnumb}{3}
+\newcommand{\ynumb}{8}
+\newcommand{\xtop}{0}
+\newcommand{\ytop}{0}
+%
+\newcommand{\StartPage}{
+\setcounter{count1}{0}
+\setcounter{count2}{0}
+\setcounter{xpos}{0}
+\setcounter{ypos}{0}
+\setlength{\unitlength}{1mm}
+\begin{picture}(0,0)(-\xtop,\ytop)
+}
+%
+\newcommand{\EndPage}{ \end{picture} }
+%
+\newcommand{\NextSticker}{
+\addtocounter{xpos}{\xsep}
+\addtocounter{count1}{1}
+\ifthenelse{\value{count1}=\xnumb}
+ {\setcounter{count1}{0}
+ \setcounter{xpos}{0}
+ \addtocounter{count2}{1}
+ \addtocounter{ypos}{\ysep}
+ }{}
+\ifthenelse{\value{count2}=\ynumb}
+ {\EndPage
+ \newpage
+ \StartPage
+ }{}
+}
+%
+% NOW FOLLOW THE REAL COMMANDS FOR THE USER
+%
+\newenvironment{stickers}{\StartPage}{\EndPage}
+%
+\newcommand{\Sticker}[1]{
+\put (\value{xpos},-\value{ypos})
+ {\parbox{\xbox mm}{#1}}
+\NextSticker
+}
+%
+\newcommand{\Label}[6]{
+\put (\value{xpos},-\value{ypos})
+ {\parbox{\xbox mm}{\raggedright#1\mbox{}\\#2\mbox{}\\#3\mbox{}\\#4\mbox{}\\
+ #5\mbox{}\\#6}}
+\NextSticker
+}
+%
+\newcommand{\SetTop}[2]{
+\renewcommand{\xtop}{#1}
+\renewcommand{\ytop}{#2}
+}
+%
+\newcommand{\SetSticker}[5]{
+\renewcommand{\xnumb}{#1}
+\renewcommand{\ynumb}{#2}
+\renewcommand{\xsep}{#3}
+\renewcommand{\ysep}{#4}
+\renewcommand{\xbox}{#5}
+}
diff --git a/macros/latex209/contrib/systcontrolletters/scl.bst b/macros/latex209/contrib/systcontrolletters/scl.bst
new file mode 100644
index 0000000000..3266b58c41
--- /dev/null
+++ b/macros/latex209/contrib/systcontrolletters/scl.bst
@@ -0,0 +1,1272 @@
+% BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ {year
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.year.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ {"(" * format.date * ")" *}
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { " (" * format.date * ") " * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.year.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ "(" format.date * ")" * output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #6 >
+ { #5 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ { s nameptr "{v{}}{ll}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{ll}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #6 >
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #8 <
+ { pop$ s #1 "{ll}" format.name$ #9 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #20 substring$
+ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{ et.al.char.used
+ { "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
+ 'skip$
+ if$
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{99}" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/macros/latex209/contrib/systcontrolletters/scl10.sty b/macros/latex209/contrib/systcontrolletters/scl10.sty
new file mode 100644
index 0000000000..f96726a651
--- /dev/null
+++ b/macros/latex209/contrib/systcontrolletters/scl10.sty
@@ -0,0 +1,84 @@
+% SCL10.sty
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\footnotesep 6.65pt
+\skip\footins 9pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+\partopsep 2pt plus 1pt minus 1pt
+
+
+
+\marginparsep 11pt
+ \topmargin 27pt \headheight 12pt \headsep 25pt \footskip 30pt
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}
+}
+
+
+\leftmargini 25pt
+\leftmarginii 22pt
+\leftmarginiii 18.7pt
+\leftmarginiv 17pt
+\leftmarginv 10pt
+\leftmarginvi 10pt
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini
+ \topsep 6pt plus 2pt minus 2pt
+ \parsep 1pt plus 1pt minus 1pt
+ \itemsep 1pt plus 1pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep 1pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+ \abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt
+ minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+ \abovedisplayskip 8.5pt plus 3pt minus 4pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus2pt\belowdisplayshortskip 4pt plus2pt minus 2pt
+ \def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus 2pt\parsep 1pt
+ plus 1pt minus 1pt\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+ \abovedisplayskip 6pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 3pt plus 1pt minus
+ 2pt \def\@listi{\leftmargin\leftmargini \topsep 3pt plus 1pt minus
+ 1pt\parsep 1pt plus 1pt minus 1pt\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
diff --git a/macros/latex209/contrib/systcontrolletters/scl11.sty b/macros/latex209/contrib/systcontrolletters/scl11.sty
new file mode 100644
index 0000000000..f368082628
--- /dev/null
+++ b/macros/latex209/contrib/systcontrolletters/scl11.sty
@@ -0,0 +1,84 @@
+% SCL11.sty - created 7/15/89
+
+\lineskip 1pt \normallineskip 1pt
+\def\baselinestretch{1}
+
+\footnotesep 7.7pt
+\skip\footins 10pt plus 4pt minus 2pt
+\floatsep 12pt plus 2pt minus 2pt \textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt \@maxsep 20pt \dblfloatsep 12pt plus 2pt
+minus 2pt \dbltextfloatsep 20pt plus 2pt minus 4pt \@dblmaxsep 20pt
+\@fptop 0pt plus 1fil \@fpsep 8pt plus 2fil \@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil \@dblfpsep 8pt plus 2fil \@dblfpbot 0pt plus 1fil
+\marginparpush 5pt
+\marginparsep 10pt
+\topmargin 27pt
+\headheight 12pt \headsep 25pt \footskip 30pt
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\def\@listI{\leftmargin\leftmargini
+ \topsep 7pt plus 3pt minus 3pt
+ \parsep 2pt plus 1pt minus 1pt
+ \itemsep 2pt plus 1pt minus 1pt}
+\let\@listi\@listI
+\@listi
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5pt plus 2pt minus 1pt
+ \parsep 1.5pt plus 1pt minus 1pt
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
+ \itemsep \topsep}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11pt plus3pt minus6pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6.5pt plus3.5pt
+minus3pt\let\@listi\@listI}
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 6pt plus3pt minus3pt
+\def\@listi{\leftmargin\leftmargini \topsep 6pt plus 2pt minus 2pt\parsep 2pt
+plus 1pt minus 1pt
+\itemsep \parsep}}
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8pt plus 2pt minus 4pt\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt\belowdisplayshortskip 4pt plus 2pt minus
+2pt \def\@listi{\leftmargin\leftmargini \topsep 4pt plus 2pt minus
+2pt\parsep 1pt plus 1pt minus 1pt\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\small{\@setsize\small{10pt}\xpt\@xpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+\normalsize
+
+
diff --git a/macros/latex209/contrib/systcontrolletters/scletters.sty b/macros/latex209/contrib/systcontrolletters/scletters.sty
new file mode 100644
index 0000000000..9e13398838
--- /dev/null
+++ b/macros/latex209/contrib/systcontrolletters/scletters.sty
@@ -0,0 +1,427 @@
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% author = "Silvano Balemi & Werner Truoel",
+%%% version = "1.1",
+%%% date = "2-June-1993",
+%%% filename = "SCLetters.sty",
+%%% address = "Automatic Control Laboratory
+%%% Swiss Federal Institute of Technology (ETH)
+%%% 8092 Zurich, Switzerland",
+%%% telephone = "+41 (1) 256.55.35",
+%%% FAX = "+41 (1) 262.43.62",
+%%% email = "{balemi,truoel}@aut.ee.ethz.ch (Internet)",
+%%% keywords = "LaTeX, Systems and Control Letters
+%%% proceedings Camera ready,
+%%% publisher style",
+%%% supported = "yes",
+%%% mainserver = "ifa.ethz.ch"
+%%% docstring = "This is a LaTeX style file for camera ready
+%%% articles according to instructions of the
+%%% Systems and Control Letters Journal
+%%% The default font size is 11 points,
+%%% (SCL11.sty) but can be used with 10pt
+%%% points too.
+%%%
+%%% Usage:
+%%% \documentstyle[]{SCLetter}
+%%% \author{}
+%%% \title{}
+%%% \abstract{}
+%%% \keywords{}
+%%% \maketitle
+%%%
+%%% The command "\markboth{leftTEXT}{rightTEXT}"
+%%% puts the text "leftTEXT" and "rightTEXT"
+%%% with the page number on the even resp. odd
+%%% headers. The head on the title page is defined by
+%%% "\head{firstHEAD}".
+%%% In order to remove headers, insert
+%%% \thispagestyle{empty}\pagestyle{empty} or
+%%% \thispagestyle{plain}\pagestyle{plain}
+%%% right after the \maketitle command!!
+%%% See also SCL.bst, SCL10.sty, SCL11.sty",
+%%% }
+%%% ====================================================================
+\typeout{Document Style `SCLetters' <2-JUNE-93>.}
+
+
+\def\title#1{\gdef\@title{#1}}
+\def\abstract#1{\gdef\@abstract{#1}}
+\def\keywords#1{\gdef\@keywords{#1}}
+
+\def\@ptsize{1}
+\@namedef{ds@10pt}{\def\@ptsize{0}}
+\@namedef{ds@11pt}{\def\@ptsize{1}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+\input SCL1\@ptsize.sty\relax
+
+
+\ds@twoside % Left- and right heads different
+
+\parindent 4mm
+\textheight 214mm
+\textwidth 160mm
+\oddsidemargin 0mm
+\evensidemargin 0mm
+\newdimen\headwidth
+\newdimen\headrulewidth
+\headrulewidth 0.4pt
+\headwidth \textwidth
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\section{\@startsection {section}{1}{\z@}{3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\normalsize\bf}{ }}
+\def\subsection{\@startsection{subsection}{2}{\z@}{3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\normalsize\it}{}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{3.25ex plus
+ -1ex minus -.2ex}{0ex plus 0ex}{\normalsize\it}{. }}
+
+% Redefinition of startsection to allow an additional argument to
+% allow for instance ". " after the subsubsection name.
+\def\@startsection#1#2#3#4#5#6#7{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi
+ \vskip -\parskip\@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}{#7}}
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}{}{#7}}}}
+
+\def\@sect#1#2#3#4#5#6#7[#8]#9{\ifnum #2>\c@secnumdepth
+ \def\@svsec{}\else
+ \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname\hskip 1em }\fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #6\relax
+ \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M #9#7\par}%
+ \endgroup
+ \csname #1mark\endcsname{#8}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #8}\else
+ \def\@svsechd{#6\hskip #3\@svsec #9#7\csname #1mark\endcsname
+ {#8}\addcontentsline
+ {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}\fi
+ #8}}\fi
+ \@xsect{#5}}
+
+\def\@ssect#1#2#3#4#5#6{\@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M
+ #6#5\par}\endgroup
+ \else \def\@svsechd{#4\hskip #1\relax #6#5}\fi
+ \@xsect{#3}}
+
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}.}
+\def\thesubsection {\thesection\arabic{subsection}.}
+\def\thesubsubsection {\thesubsection\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{{\small
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{{\rm #1.} #2}
+ \ifdim \wd\@tempboxa >\hsize {\rm #1.} #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Fig. \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{
+\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi
+ \thispagestyle{titlepagestyle}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}
+%\gdef\@author{}
+%\gdef\@title{}
+\gdef\@abstract{}
+\gdef\@keywords{}
+\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 0.5em
+\noindent
+ {\huge \@title \par} \vskip 2.5em { \lineskip .5em
+\noindent
+{\small \it \@author }
+\par}
+ \vskip 1em \noindent {\small {\it {Abstract}: }\@abstract\par}
+ \vskip 1em \noindent {\small {\it {Keywords}: }\@keywords\par}
+ \par
+ \vskip 2.5em}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\hbox{}\hfil{\footnotesize\it \rightmark }\hfil \thepage}
+ \def\@oddfoot{}
+ \def\@evenhead{\thepage \hfil{\footnotesize\it \leftmark}\hfil\hbox{}}
+ \def\@evenfoot{}
+ \def\sectionmark##1{}
+ \def\subsectionmark##1{}
+}
+\def\ps@titlepagestyle{\let\@mkboth\@gobbletwo
+ \def\@oddhead{\hfil\@head\hfil}
+ \def\@oddfoot{} %\def\@oddfoot{\rm\hfil\thepage\hfil}
+ \def\@evenhead{\hfil\@head\hfil}
+ \let\@evenfoot\@oddfoot
+}
+\def\head#1{\def\@head{\small #1}}
+\head{\parbox{\textwidth}{Systems \& Control Letters\\North Holland}}
+\def\rightmark{}\def\leftmark{}
+
+%% defines the command for putting the header
+%% \footernote{TEXT} is the same as \markboth{TEXT}{TEXT}. Here for
+%% compatibility with other style files.
+\def\markboth#1#2{\def\leftmark{#1}\def\rightmark{#2}}
+\def\footernote#1{\markboth{#1}{#1}\head{#1}}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .0\columnwidth
+ \kern 2.6\p@}
+
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@myheadings
+\pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
+
+\def\QED{~\rule[-1pt]{6pt}{6pt}\par\medskip}
+\newenvironment{proof}{\noindent{\it Proof.\ }}{ \hspace*{\fill} $\Box$}
+\def\@begintheorem#1#2{\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2.}]}
+\def\@opargbegintheorem#1#2#3{\it \trivlist
+ \item[\hskip \labelsep{\bf #1\ #2\ \rm(#3).}]}
+
+\def\thebibliography#1{\section*{References\@mkboth
+ {References}{References}}
+\small
+\list
+ {[\arabic{enumi}]}{\labelwidth 3mm \leftmargin\labelwidth
+ \itemindent 0mm
+\advance\leftmargin 3mm
+\itemsep -1mm
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+\input{fleqn.sty}
+%left term of eqnarray is flushed left
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+$$\halign to \displaywidth\bgroup\hskip\@centering
+ $\displaystyle\tabskip\z@{##}$\hfil&\global\@eqcnt\@ne
+ \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle\tabskip\z@{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+
+\def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+\global\@eqnswtrue
+\global\@eqcnt\z@\tabskip\mathindent\let\\=\@eqncr
+\abovedisplayskip\topsep\ifvmode\advance\abovedisplayskip\partopsep\fi
+\belowdisplayskip\abovedisplayskip
+\belowdisplayshortskip\abovedisplayskip
+\abovedisplayshortskip\abovedisplayskip
+$$\halign to
+\linewidth\bgroup\hskip\@centering$\displaystyle\tabskip\z@
+ {##}$\hfill&\global\@eqcnt\@ne \hskip 2\arraycolsep \hfil${##}$\hfil
+ &\global\@eqcnt\tw@ \hskip 2\arraycolsep $\displaystyle{##}$\hfil
+ \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+\def\endeqnarray{\@@eqncr\egroup
+ \global\advance\c@equation\m@ne$$\global\@ignoretrue }
+
+% labels flushed left
+\def\@mklab#1{#1\hfil}
+
+\mathindent = 8mm
+
+
+
diff --git a/macros/latex209/contrib/systcontrolletters/sclsample.tex b/macros/latex209/contrib/systcontrolletters/sclsample.tex
new file mode 100644
index 0000000000..a3f655fd5a
--- /dev/null
+++ b/macros/latex209/contrib/systcontrolletters/sclsample.tex
@@ -0,0 +1,124 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SCLsample.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%% More information: see the header of SCLetters.sty %%%%%%%%%%%%%
+%%%%%%%%%% %%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentstyle[]{SCLetters}
+
+\begin{document}
+
+\markboth{Silvano Balemi / Sample file for Systems and Control Letters}
+{Silvano Balemi / Sample file for Systems and Control Letters}
+
+\head{\parbox{\textwidth}{Systems \& Control Letters\hfill{\normalsize\thepage}
+\\North Holland}}
+
+\title{Sample file for Systems and Control Letters}
+
+\author{{\Large\rm Silvano Balemi}\\
+Automatic Control Laboratory, Swiss Federal Institute of Technology
+(ETH), Zurich, Switzerland\\[-1mm] E-mail: balemi@aut.ee.ethz.ch
+}
+
+\abstract{Sample \LaTeX\ article using Latex Style file created
+for proceedings according to formatting directions of the Systems and
+Control Letters Journal}
+
+\keywords{\LaTeX\ style files, Bibliography style files, Systems and
+Control Letters}
+
+\maketitle
+
+\section{Introduction}
+This paper uses two style files created for \LaTeX\ in order to
+format an article according to the ``Instructions to Authors for the
+Preparation of Camera-Ready Manuscripts''.
+
+\begin{table}[h]
+\caption{The caption comes before the table.}
+\begin{center}
+\begin{tabular}{|c||c|c|}\hline
+$\otimes$&0&1\\\hline\hline
+0&0&1\\\hline
+1&1&0\\\hline
+\end{tabular}
+\end{center}
+\end{table}
+
+The style files used are {\tt SCLetters.sty},
+{\tt SCL10.sty} and {\tt SCL11.sty}
+and should be in a path known by \LaTeX. The default font size is 11
+points, and {\tt SCL11.sty} will be used; the only other font size
+available is 10 points, which is defined by {\tt SCL10.sty}.
+12 point fonts are not available.
+
+
+The main differences with the usual {\tt article.sty} pertain to some
+definitions in the titlepage.
+\begin{itemize}
+\item the syntax for abstract is \verb+\abstract{...}+ and not
+ \verb+\begin{abstract}...\end{abstract}+
+\item the syntax for keywords follows the same syntax as that of the
+ abstract: \verb+\keywords{...}+
+\item \verb+\maketitle+ comes after title, abstract
+ and keywords.
+\end{itemize}
+
+The article is formatted for A4 mats provided by SCL publications.
+
+\begin{figure}
+\begin{center}
+\setlength{\unitlength}{0.0125in}%
+\begin{picture}(242,150)(73,660)
+\put( 75,660){\framebox(240,150){}}
+\put(105,741){\vector( 0, 1){ 66}}
+\put(105,675){\vector( 0, 1){ 57}}
+\put( 96,759){\vector( 1, 0){204}}
+\put(105,789){\line( 1, 0){ 90}}
+\put(195,789){\line( 2,-1){ 90}}
+\put(105,711){\line( 1, 0){ 60}}
+\put(165,711){\line( 5,-3){ 60}}
+\put(225,675){\line( 1, 0){ 72}}
+\put( 96,714){\vector( 1, 0){204}}
+\put( 99,725){\makebox(0,0)[rb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\varphi$}}}
+\put(291,747){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\omega$}}}
+\put(291,702){\makebox(0,0)[lb]{\raisebox{0pt}[0pt][0pt]{\tenrm $\omega$}}}
+\put( 99,795){\makebox(0,0)[rb]{\raisebox{0pt}[0pt][0pt]{\tenrm $M$}}}
+\end{picture}
+\end{center}
+\caption{This is a sample figure. The caption comes after the figure.}
+\end{figure}
+\nocite{TeX}
+
+The captions for figures and tables have been modified; the caption of
+the tables must come before the table.
+
+The bibliography style file {\tt SCL\-.bst} formats with BibTeX the
+references from the bibliography file according to the instructions
+of the publisher of the journal.
+
+\subsection{Running headers}
+The running heads can be set with the command
+\verb+\markboth{leftTEXT}{rightTEXT}+.
+Then, odd page headers will display \verb+rightTEXT+ while even page
+headers will display \verb+leftTEXT+ together with the page number.
+The command \verb+\head{headTEXT}+ will put the string \verb+headTEXT+
+on the header of the title page.
+
+Inserting the commands \verb+\thispagestyle{empty}+ and
+\verb+\pagestyle{empty}+
+just after the \verb+\maketitle+ command removes any text from the
+headers, leaving them empty.
+
+\section{Conclusions}
+A sample article for publication in the SCL Proceedings has been
+presented. It uses some \LaTeX\ style files which format
+the article automatically according to SCL instructions.
+
+
+\nocite{LaTeXD,LaTeX,TeX}
+\bibliographystyle{SCL}
+\bibliography{bib-file}
+\end{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of SCLsample.tex %%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/latex209/contrib/tables/tables-doc.pdf b/macros/latex209/contrib/tables/tables-doc.pdf
new file mode 100644
index 0000000000..4666e87275
--- /dev/null
+++ b/macros/latex209/contrib/tables/tables-doc.pdf
Binary files differ
diff --git a/macros/latex209/contrib/tables/tables-doc.tex b/macros/latex209/contrib/tables/tables-doc.tex
new file mode 100644
index 0000000000..85c52e3d5a
--- /dev/null
+++ b/macros/latex209/contrib/tables/tables-doc.tex
@@ -0,0 +1,258 @@
+\documentstyle[tables]{article}
+% Note : This is not the original document TABLEDOC.TEX. It has been
+% re-typed using a hardcopy of the original by Atul Kacker
+%
+\def\bs{\char'134}
+\def\vbar{\char'174}
+\def\and{\char'046}
+\def\tc#1{\hbox{\tt \bs #1}}
+\def\ctr#1{\quad #1 \hfil}
+\font\sl=cmsl10
+\setlength{\textwidth}{433pt}
+\setlength{\oddsidemargin}{0pt}
+\setlength{\marginparwidth}{72pt}
+\setlength{\topmargin}{0pt}
+\setlength{\textheight}{555pt}
+%
+\begin{document}
+\centerline{\framebox{\large Making Tables with Macros}}
+\vbox{\vskip 0.5in}
+\centerline{Ray F. Cowan}
+\centerline{22 February 1985}
+\vbox{\vskip 0.5in}
+Tables have traditionally been difficult to make using \TeX\ -- especially
+ruled tables. The file {\tt \hbox{TABLES.TEX}} contains macros designed to
+prepare both ruled and unruled tables with considerably less effort. Note that
+\hbox{\tt TABLES.TEX} can be used with any macro set; it does not depend on
+prior loading of \hbox{\tt PHYZZX} or any other macro set, for example. One of
+the main advantages of this macro set is that you no longer need to design a
+preamble for the table; the macros will scan your table entries and construct a
+suitable preamble for you. To access the macros, say \hbox{\tt `\bs input
+TABLES'} in your \TeX\ file, somewhere before you first use them. The macros
+available are listed in Table~\ref{tab:one} and Table~\ref{tab:two}.
+
+\vbox{\vskip 0.5in}
+\begin{table}[h]
+\begintable
+{\sl Macro name} | {\sl Description} \cr
+\tc{begintable} | \para{Indicates the start of a new table} \cr
+\tc{endtable} | \para{Ends the current table. Must be used in
+ the place of the last \tc{cr}.}\cr
+\tc{cr} | \para{Ends the current row, and starts the next
+ one. The completed row will be separated
+ from the next with a thin horizontal rule.}\cr
+\tc{crthick} | \para{Similar to \tc{cr}, but the rows will be
+ separated with a thick horizontal rule.} \cr
+\tc{crnorule} or \tc{nr}
+ | \para{Similar to \tc{cr}, but the rows will not be
+ separated by any rule.}\cr
+{\tt \hbox{\vbar}} (vertical bar) or \tc{vb}
+ | \para{Separates one column from the next, and
+ puts a vertical rule between them.} \cr
+{\tt \hbox{\and}} or \tc{novb}
+ | \para{Same as {\tt \hbox{\vbar}}, but does not
+ put in the vertical rule between the columns.} \cr
+{\tt \hbox{\vbar}}
+ | \para{Same as {\tt \hbox{\vbar}}, but puts in a
+ thick vertical rule.}
+\endtable
+\caption{Description of simple table macros}\label{tab:one}
+\end{table}
+\clearpage
+\begin{table}[h]
+\begintable
+\tc{thicksize}={\em dimen}
+ | \para{This dimension specifies the thickness of the thick
+ rules in the table. The default size is 1.5
+ points.} \cr
+\tc{thinsize}={\em dimen}
+ | \para{This dimension specifies the thickness of thin rules
+ in the table. The default size is 0.8 points.} \cr
+\tc{tablewidth}={\em dimen}
+ | \para{Specifies how wide to make the next table. If not
+ specified, the table is made to its natural width.
+ This value is reset following the construction of
+ each table.} \cr
+\tc{multispan}{\tt \{}{\em n}{\tt \}}
+ | \para{Makes the next entry span the next {\em n} columns,
+ where {\em n} is an integer, {\em n} $>$ 0. See other
+ notes on \tc{multispan} below.} \cr
+\tc{omit} | \para{This \TeX\ primitive causes the normal template for
+ its entry to be omitted, allowing the user to do
+ something else with this entry.} \cr
+\tc{para}{\tt \{}{\em paragraph text}{\tt \}}
+ | \para{Turns an entry into a neat little paragraph like this
+ one. The width of the paragraph is determined by the
+ dimension \tc{parasize}. The default is 4 inches.} \cr
+\tc{parasize}={\em dimen}
+ | \para{Sets the width of paragraphs produced with the \tc{para}
+ macro.} \cr
+\tc{ctr}{\tt \{\#\}}
+ | \para{Used in the standard template, this macro centers
+ its argument in the column. The user can redefine it
+ for special effects. The default definition is}
+ \crnorule
+ | \qquad\tc{def}\tc{ctr}{\tt \#1\{}\tc{hfil}{\tt
+ \bs\ \#1\bs\ }\tc{hfil}{\tt \}}\cr
+\tc{vctr}{\tt \{\#\}}
+ | \para{Centers an entry vertically. The vertical center of the
+ entry is placed on the baseline of the row containing
+ it. The intended use is to center an entry between two
+ rows.} \cr
+\tc{centeredtables}
+ | \para{Turns table centering on. Each table will be centered
+ left-to-right on the page. This is the default.} \cr
+\tc{noncenteredtables}
+ | \para{Turns table centering off. Each table is returned as an
+ \tc{hbox}, and it is up to the user to place it as
+ desired.} \cr
+\tc{tableinfotrue}
+ | \para{Turns on the diagnostic message telling you how many
+ rows and columns were found in the table. This is the
+ default.} \cr
+\tc{tableinfofalse}
+ | \para{Turns off the diagnostic messages concerning rows and
+ columns.}
+\endtable
+\caption{Description of extended table macros}\label{tab:two}
+\end{table}
+\clearpage
+The general idea is that you start your table with the command \tc{begintable},
+type your entries in one row at a time, then finish with the command
+\tc{endtable}. To specify a row, enter the individual entries into your \TeX\
+file, separating each column entry with a {\tt \hbox{\vbar}}, an {\tt
+\hbox{\and}}, or a {\tt \hbox{\bs\vbar}}. A {\tt \hbox{\vbar}} will separate
+the adjoining columns with a thin vertical rule, an {\tt \hbox{\and}} will
+leave out the vertical rule, and a {\tt \hbox{\bs\vbar}} will separate the
+columns with a thick vertical rule. To end one row and start another, use
+either a \tc{cr}, a \tc{crnorule}, or a \tc{crthick}. A \tc{cr} separates the
+rows with a thin horizontal rule; a \tc{crnorule} leaves out the horizontal
+rule, while \tc{crthick} inserts a thick horizontal rule. Then end the last
+row with an \tc{endtable}.
+
+Each row of the table must contain the same number of columns, otherwise
+unpredictable things will happen. Again the {\em last row} must {\em not}
+end with \tc{cr...}, but {\em must} end with an \tc{endtable}. If you put a
+\tc{cr} and an \tc{endtable} both on the last row, you won't like what
+happens.
+
+Each entry will be centered in it's column (unless you use \tc{omit}, a
+\TeX\ primitive, or \tc{multispan}. See notes below). The table will be
+centered in a \tc{hbox} of width \tc{hsize}, unless you have turned table
+centering off (see the commands \tc{centeredtables} and
+\tc{noncenteredtables}).
+
+Each time a new table is encountered, a message similar to {\tt `[Nrows=xx,
+Ncols=yy]'} is printed on your terminal, where {\tt xx} is the number of rows
+and {\tt yy} the number of columns discovered in your table. If you think they
+are incorrect, you may have left out some {\tt \hbox{\vbar}}'s or {\tt
+\hbox{\and}}'s or \tc{cr}'s. This diagnostic feature can be disabled by saying
+\tc{tableinfofalse} (and restarted by saying \tc{tableinfotrue}).
+
+\vbox{\vskip 0.3truein}
+{\em An example}
+
+A simple 3-row, 2-column table with a header spanning two columns could be
+specified as (see notes 3 and 4 below on the use of \tc{multispan}):
+\begin{verbatim}
+ \begintable
+ \multispan{2}\tstrut\hfil The Top Line\hfil\crthick
+ Entry 1 | Entry 2 \cr
+ Entry 3 | Entry 4 \endtable
+\end{verbatim}
+These commands produce Table~\ref{tab:three}.
+\begin{table}[h]
+ \begintable
+ \multispan{2}\tstrut\hfill The Top Line\hfill\crthick
+ Entry 1 | Entry 2 \cr
+ Entry 3 | Entry 4 \endtable
+\caption{A sample table}\label{tab:three}
+\end{table}
+\clearpage
+
+\vbox{\vskip 0.3truein}
+{\em An example of non-centered tables}
+
+Two or more tables can be placed side-by-side by using the
+\tc{noncenteredtables} command. Consider the two tables here
+(Table~\ref{tab:four}):
+
+\begin{table}[h]
+ \noncenteredtables
+ \tableline{
+ \begintable
+ Item ABC | Item DEF \cr
+ Item GHI | Item JKL \endtable
+ \hfil
+ \begintable
+ Data 111 | Data 222 \cr
+ Data 333 | Data 444 \cr
+ Data 555 | Data 666 \endtable
+ }
+\caption{Two non-centered tables aligned side-by-side}\label{tab:four}
+\end{table}
+
+These were produced by saying
+\begin{verbatim}
+ \noncenteredtables
+ \line{
+ \begintable
+ Item ABC | Item DEF \cr
+ Item GHI | Item JKL \endtable
+ \hfil
+ \begintable
+ Data 111 | Data 222 \cr
+ Data 333 | Data 444 \cr
+ Data 555 | Data 666 \endtable
+ }
+\end{verbatim}
+Notice that tables of unequal height are aligned at the bottom.
+
+\vbox{\vskip 0.5truein}
+{\large Usage notes:}
+
+\begin{enumerate}
+\item[1.] Vertical spacing is done with a strut, called \tc{tstrut}, which
+is initially defined as 3.1ex high and 1.2ex deep. If you don't like the
+way it looks, you can redefine \tc{tstrut} to your own liking:
+\begin{verbatim}
+ \def\tstrut{\vrule height hh depth dd width 0pt}
+\end{verbatim}
+where you specify your desired height {\tt hh} and depth {\tt dd}.
+\item[2.] You can control the thickness of the thin and thick rules through
+the use of \tc{thicksize} and \tc{thinsize}. You can turn off the rules
+entirely by saying
+\begin{verbatim}
+ \thinsize=0pt
+ \thicksize=0pt
+\end{verbatim}
+for example
+\item[3.] If you use a \tc{multispan} or an \tc{omit} in the first column of
+a row, you will lose the effect of the \tc{tstrut} within that row and must
+specify it yourself. See the example above.
+\item[4.] Use of \tc{multispan} and \tc{omit} will cause the default
+centering of the entry to be lost; if you want it centered, put an \tc{hfil}
+on each side of the entry, as in the example above.
+\item[5.] To override the default centering action, include an \tc{hfill} on
+the left or right as desired; the \tc{hfill} will override the default
+\tc{hfil}.
+\end{enumerate}
+
+\vbox{\vskip 0.3truein}
+{\large Local modifications for use with \LaTeX :}
+
+\vbox{\vskip 0.1truein}
+This macro package was originally written for use with plain \TeX. Bob Taylor
+has made changes for it to be used as a style option in \LaTeX. The plain
+\TeX\ command \tc{line} has been replaced with \tc{tableline}, with
+\tc{tableline} being defined as
+\begin{verbatim}
+ \def\tableline{\hbox to \hsize}
+\end{verbatim}
+
+The \tc{documentstyle} command in your \LaTeX\ file should look something like:
+\begin{verbatim}
+ \documentstyle[tables]{article}
+\end{verbatim}
+
+\end{document}
diff --git a/macros/latex209/contrib/tables/tables.sty b/macros/latex209/contrib/tables/tables.sty
new file mode 100644
index 0000000000..0b40afab6e
--- /dev/null
+++ b/macros/latex209/contrib/tables/tables.sty
@@ -0,0 +1,601 @@
+% modified by Bob Taylor for University of Rochester 20-Mar-87:
+% \line macro in Cowan's code is disabled by LaTeX, so I've
+% changed all instances of \line in Cowan's code to the new
+% definition \tableline as defined right after this comment.
+%
+ \def\tableline{\hbox to \hsize}
+%
+% +--------------------------------------------------------------------+
+% ] ]
+% ] TABLES.TEX ]
+% ] ]
+% ] Ray F. Cowan 15-Feb-85 ]
+% ] ]
+% ] Princeton University ]
+% ] ]
+% ] Last Revision: 21-Nov-85 ]
+% ] ]
+% ] Macros I find handy for making tables. See TABLEDOC TEX for ]
+% ] a longer description. The token-counting macros are straight ]
+% ] from the TeXbook's "Dirty Tricks" appendix. ]
+% ] ]
+% +--------------------------------------------------------------------+
+%
+\newbox\hdbox%
+\newcount\hdrows%
+\newcount\multispancount%
+\newcount\ncase%
+\newcount\ncols% This is the number of primary text columns in the table.
+\newcount\nrows%
+\newcount\nspan%
+\newcount\ntemp%
+\newdimen\hdsize%
+\newdimen\newhdsize%
+\newdimen\parasize%
+\newdimen\spreadwidth%
+\newdimen\thicksize%
+\newdimen\thinsize%
+\newdimen\tablewidth%
+\newif\ifcentertables%
+\newif\ifendsize%
+\newif\iffirstrow%
+\newif\iftableinfo%
+\newtoks\dbt%
+\newtoks\hdtks%
+\newtoks\savetks%
+\newtoks\tableLETtokens%
+\newtoks\tabletokens%
+\newtoks\widthspec%
+%
+% Book-keeping stuff--see how often these macros are called.
+%
+%\immediate\write15{%
+%CP SMSG GJMSINK TEXTABLE --> TABLE MACROS V. 851121 JOB = \jobname%
+%}%
+%
+% Turn on table diagnostics.
+%
+\tableinfotrue%
+\catcode`\@=11% Allows use of "@" in macro names, like PLAIN.TEX does.
+\def\out#1{\immediate\write16{#1}}% Debugging aid. Writes #1 on the
+% user's terminal and in the log file.
+%
+% Define the \tstrut height, depth in terms of the x_height parameter.
+%
+\def\tstrut{\vrule height3.1ex depth1.2ex width0pt}%
+\def\and{\char`\&}% Allows us to get an `&' in the text. This is the
+% same as using the PLAIN TeX macro \&.
+\def\tablerule{\noalign{\hrule height\thinsize depth0pt}}%
+\thicksize=1.5pt% Default thickness for fat rules. The user should feel
+% free to change this to his preference.
+\thinsize=0.6pt% Default thickness for thin rules.
+\def\thickrule{\noalign{\hrule height\thicksize depth0pt}}%
+\def\hrulefill{\leaders\hrule\hfill}%
+\def\bigrulefill{\leaders\hrule height\thicksize depth0pt \hfill}%
+\def\ctr#1{\hfil\ #1\hfil}%
+\def\altctr#1{\hfil #1\hfil}%
+\def\vctr#1{\hfil\vbox to0pt{\vss\hbox{#1}\vss}\hfil}%
+%
+% Here are things for controlling the width of the finished table.
+%
+\tablewidth=-\maxdimen%
+\spreadwidth=-\maxdimen%
+\def\tabskipglue{0pt plus 1fil minus 1fil}%
+%
+% Stuff for centering or not.
+%
+\centertablestrue%
+\def\centeredtables{%
+ \centertablestrue%
+}%
+\def\noncenteredtables{%
+ \centertablesfalse%
+}%
+%
+% \vctr vertically centers its argument in the row.
+%
+\parasize=4in%
+\long\def\para#1{% Used to make little paragraphs out of one entry.
+ {%
+ \vtop{%
+ \hsize=\parasize%
+ \baselineskip14pt%
+ \lineskip1pt%
+ \lineskiplimit1pt%
+ \noindent #1%
+ \vrule width0pt depth6pt%
+ }%
+ }%
+}%
+%
+\gdef\ARGS{########}% Produces the correct number of #'s in the preamble
+% by the time eveything is expanded and \halign sees
+% it.
+\gdef\headerARGS{####}% Same as \ARGS, but used in \header macros.
+\def\@mpersand{&}% Allows us to get alignment tab characters later
+% when we have made the character "&" an active macro.
+{\catcode`\|=13% Make |'s locally active.
+\gdef\letbarzero{\let|0}% Globally define a macro that allows us to
+% keep active |'s from being expanded in edef's.
+\gdef\letbartab{\def|{&&}}%
+\gdef\letvbbar{\let\vb|}%
+% This \def will cause active |'s read by
+% \ruledtable to be converted into double
+% alignment tabs.
+}% End of locally active |'s.
+%
+{\catcode`\&=4% Make these alignment tabs.
+\def\ampskip{&\omit\hfil&}% This local macro skips a vertical rule.
+\catcode`\&=13% Now make &'s into active macros.
+\let&0% This allows us to expand \ampskip in the next \xdef without
+% attempting to expand the & and getting an "undefined control
+% sequence" error.
+\xdef\letampskip{\def&{\ampskip}}%
+\gdef\letnovbamp{\let\novb&\let\tab&}
+% This will cause active &'s read by
+% \ruledtable to be converted into
+% double tabs and an \omit'ted \vrule.
+}% End of locally active &'s.
+%
+\def\begintable{% Here we make |'s and &'s active characters so we can
+% interpret them as macros. Note that this action is
+% true only until we encounter the matching \endgroup
+% token later at the end of the \ruledtable macro.
+ \begingroup%
+ \catcode`\|=13\letbartab\letvbbar%
+ \catcode`\&=13\letampskip\letnovbamp%
+ \def\multispan##1{% We must redefine \multispan to count the number
+% of primary columns, not physical columns.
+ \omit \mscount##1%
+ \multiply\mscount\tw@\advance\mscount\m@ne%
+ \loop\ifnum\mscount>\@ne \sp@n\repeat%
+ }% End of \multispan macro.
+ \def\|{%
+ &\omit\widevline&%
+ }%
+ \ruledtable% Now we call \ruledtable to do the real work.
+}% End of \begintable macro.
+%
+\long\def\ruledtable#1\endtable{%
+%
+% This macro reads in the user's data entries
+% and converts them into a ruled table.
+%
+% Important note: Many macros and parameters are re-defined here, and
+% these must be kept local to the table macros to avoid conflict with
+% their use outside of tables. This is done by the \begingroup token
+% macro \begintable and the \endgroup token at the end of
+% this macro.
+%
+ \offinterlineskip% Needed to make rules touch each other.
+ \tabskip 0pt% Needed for same reason as \offinterlineskip.
+ \def\widevline{\vrule width\thicksize}% Make outer \vrule's wider.
+ \def\endrow{\@mpersand\omit\hfil\crnorm\@mpersand}%
+ \def\crthick{\@mpersand\crnorm\thickrule\@mpersand}%
+ \def\crnorule{\@mpersand\crnorm\@mpersand}%
+ \let\nr=\crnorule% A shorter abbreviation.
+ \def\endtable{\@mpersand\crnorm\thickrule}%
+%
+ \let\crnorm=\cr% Allows us to use \cr for our own purposes.
+%
+% Cause user-typed \cr's to follow a row with a \tablerule.
+%
+ \edef\cr{\@mpersand\crnorm\tablerule\@mpersand}%
+%
+ \the\tableLETtokens% Get the user's extra \let's, if any.
+%
+% Put the data entries into a token register so we can scan through them
+% and see what the user is asking us to do.
+%
+ \tabletokens={&#1}% We add an extra alignment tab to the beginning
+% of the first row to allow for the first \vrule.
+%
+% Now count how many rows are in the table and return the result in
+% count register \nrows; do the same for columns, and return that
+% in register \ncols.
+%
+ \countROWS\tabletokens\into\nrows%
+ \countCOLS\tabletokens\into\ncols%
+%
+% Now do a little arithmetic to convert the number of primary columns
+% into the number of physical columns that the alignment preamble must
+% prepare for; similarly for rows.
+%
+ \advance\ncols by -1%
+ \divide\ncols by 2%
+ \advance\nrows by 1%
+%
+% Tell the user how many rows and columns we found in his data, if he
+% wants to know.
+%
+ \iftableinfo %
+ \immediate\write16{[Nrows=\the\nrows, Ncols=\the\ncols]}%
+ \fi%
+%
+% Now we actually go ahead and produce the table.
+%
+ \ifcentertables
+ \ifhmode \par\fi% Make sure we are in vertical mode.
+ \tableline{% The final table comes out as an \hbox of width the \hsize.
+ \hss% The final table will be centered left-to-right.
+ \else %
+ \hbox{%
+ \fi
+ \vbox{%
+ \makePREAMBLE{\the\ncols}% Generate the preamble.
+ \edef\next{\preamble}% This line and the next line force the
+ \let\preamble=\next% expansion of all \ARGS tokens into the
+% appropriate number of #'s.
+ \makeTABLE{\preamble}{\tabletokens}% Go do the \halign here.
+ }% End of \vbox.
+ \ifcentertables \hss}\else }\fi% Finish the centering effect.
+% It is important that no spaces
+% follow the two `}' here.
+% }% End of \tableline
+ \endgroup% Return all local macros and parameters to their outside
+% values.
+ \tablewidth=-\maxdimen% Reset \tablewidth to normal.
+ \spreadwidth=-\maxdimen% Same for \spreadwidth.
+}% End of macro \ruledtable.
+%
+\def\makeTABLE#1#2{% Does an \halign for the \ruledtable macro.
+ {% Start of local parameter values.
+%
+ \let\ifmath0% These macros would cause trouble if they were to be
+ \let\header0% expanded in the following \xdef; we \let them be
+ \let\multispan0% equal to a digit, because digits can't be expanded.
+%
+% Set up the width specification here.
+%
+ \ncase=0%
+ \ifdim\tablewidth>-\maxdimen \ncase=1\fi%
+ \ifdim\spreadwidth>-\maxdimen \ncase=2\fi%
+ \relax% This \relax is absolutely necessary, without it the following
+% \ifcase will always take \ncase=0.
+%
+ \ifcase\ncase %
+ \widthspec={}%
+ \or %
+ \widthspec=\expandafter{\expandafter t\expandafter o%
+ \the\tablewidth}%
+ \else %
+ \widthspec=\expandafter{\expandafter s\expandafter p\expandafter r%
+ \expandafter e\expandafter a\expandafter d%
+ \the\spreadwidth}%
+ \fi %
+%\out{Widthspec=O\the\widthspecE}%
+%\out{Preamble=O\preambleE}%
+ \xdef\next{% We must force the preamble to be expanded BEFORE the
+ \halign\the\widthspec{%
+% \halign is done; this \edef\next{...}\next construction
+% does the trick.
+ #1% This is the preamble text.
+%
+ \noalign{\hrule height\thicksize depth0pt}% Makes the top \hrule.
+%
+ \the#2\endtable% This is the main body.
+%
+% \noalign{\hrule height0.7pt depth0pt}% Makes the last \hrule.
+ }% End of \halign.
+ }% End of \next.
+ }% End of local values.
+ \next% This \next must be outside of the local values, because now
+% we want those troublesome macros in the \let's above to have
+% their normal actions.
+}% End of macro \makeTABLE.
+%
+\def\makePREAMBLE#1{% This macro generates the necessary preamble for a
+% ruled table with #1 primary columns.
+% (Primary columns means the number of columns NOT
+% counting those used for vertical rules.)
+ \ncols=#1% Get the number of columns desired.
+ \begingroup% Start local parameter definitions.
+ \let\ARGS=0% This is the key to the whole thing; it prevents \ARGS
+% from being expanded in the following \edef's.
+ \edef\xtp{\widevline\ARGS\tabskip\tabskipglue%
+ &\ctr{\ARGS}\tstrut}% A 1-column preamble. Gets the sizing right.
+ \advance\ncols by -1% One column has been generated; decrement the
+% counter.
+ \loop% Append as many further columns as needed to the preamble.
+ \ifnum\ncols>0 %
+ \advance\ncols by -1%
+ \edef\xtp{\xtp&\vrule width\thinsize\ARGS&\ctr{\ARGS}}%
+ \repeat
+ \xdef\preamble{\xtp&\widevline\ARGS\tabskip0pt%
+ \crnorm}% Adds the last \vrule.
+ \endgroup% End of local parameters.
+}% End of macro \makePREAMBLE.
+%
+\def\countROWS#1\into#2{% This counts the number of rows in #1 by
+% looking for control sequences that end a row,
+% e.g., \cr, \crthick, etc., and puts the result
+% into count register #2.
+ \let\countREGISTER=#2%
+ \countREGISTER=0%
+% \out{In countROWS: tokens are O\the#1E}%
+ \expandafter\ROWcount\the#1\endcount%
+}%
+%
+\def\ROWcount{%
+ \afterassignment\subROWcount\let\next= %
+}%
+\def\subROWcount{%
+% \out{In subROWcount: next is O\meaning\nextE}% Debugging aid.
+ \ifx\next\endcount %
+ \let\next=\relax%
+ \else%
+ \ncase=0%
+ \ifx\next\cr %
+ \global\advance\countREGISTER by 1%
+ \ncase=0%
+ \fi%
+ \ifx\next\endrow %
+ \global\advance\countREGISTER by 1%
+ \ncase=0%
+ \fi%
+ \ifx\next\crthick %
+ \global\advance\countREGISTER by 1%
+ \ncase=0%
+ \fi%
+ \ifx\next\crnorule %
+ \global\advance\countREGISTER by 1%
+ \ncase=0%
+ \fi%
+ \ifx\next\header %
+% \out{In subROWcount: next=header, ncase set=1}%
+ \ncase=1%
+ \fi%
+% \out{In subROWcount: ncase is O\the\ncaseE}%
+ \relax%
+ \ifcase\ncase %
+ \let\next\ROWcount%
+% \out{subROWcount---> ncase=\the\ncase}%
+ \or %
+ \let\next\argROWskip%
+% \out{subROWcount---> ncase=\the\ncase}%
+ \else %
+ \fi%
+ \fi%
+% \out{subROWcount---> NEXT=\meaning\next}%
+ \next%
+}% End of macro \subROWcount.
+%
+\def\counthdROWS#1\into#2{%
+\dvr{10}%
+ \let\countREGISTER=#2%
+ \countREGISTER=0%
+\dvr{11}%
+% \out{In counthdROWS: tokens are O\the#1E}%
+\dvr{13}%
+ \expandafter\hdROWcount\the#1\endcount%
+\dvr{12}%
+}%
+%
+\def\hdROWcount{%
+ \afterassignment\subhdROWcount\let\next= %
+}%
+\def\subhdROWcount{%
+%\out{In subhdROWcount: next is O\meaning\nextE}%
+ \ifx\next\endcount %
+ \let\next=\relax%
+ \else%
+ \ncase=0%
+ \ifx\next\cr %
+ \global\advance\countREGISTER by 1%
+ \ncase=0%
+ \fi%
+ \ifx\next\endrow %
+ \global\advance\countREGISTER by 1%
+ \ncase=0%
+ \fi%
+ \ifx\next\crthick %
+ \global\advance\countREGISTER by 1%
+ \ncase=0%
+ \fi%
+ \ifx\next\crnorule %
+ \global\advance\countREGISTER by 1%
+ \ncase=0%
+ \fi%
+ \ifx\next\header %
+%\out{In subhdROWcount: next=header, ncase set=1}%
+ \ncase=1%
+ \fi%
+%\out{In subhdROWcount: ncase is O\the\ncaseE}%
+\relax%
+ \ifcase\ncase %
+ \let\next\hdROWcount%
+%\out{subhdROWcount---> ncase=\the\ncase}%
+ \or%
+ \let\next\arghdROWskip%
+%\out{subhdROWcount---> ncase=\the\ncase}%
+ \else %
+ \fi%
+ \fi%
+%\out{subhdROWcount---> NEXT=\meaning\next}%
+ \next%
+}%
+%
+{\catcode`\|=13\letbartab
+\gdef\countCOLS#1\into#2{%
+% \out{In countCOLS: tokens are O\the#1E}
+ \let\countREGISTER=#2%
+ \global\countREGISTER=0%
+ \global\multispancount=0%
+ \global\firstrowtrue
+ \expandafter\COLcount\the#1\endcount%
+ \global\advance\countREGISTER by 3%
+ \global\advance\countREGISTER by -\multispancount
+% \out{countCOLS-->O\the\countREGISTERE}
+}%
+%
+\gdef\COLcount{%
+ \afterassignment\subCOLcount\let\next= %
+}%
+{\catcode`\&=13%
+\gdef\subCOLcount{%
+%\out{In subCOLcount: next is O\meaning\nextE}
+ \ifx\next\endcount %
+ \let\next=\relax%
+ \else%
+ \ncase=0%
+ \iffirstrow
+ \ifx\next& %
+ \global\advance\countREGISTER by 2%
+ \ncase=0%
+ \fi%
+ \ifx\next\span %
+ \global\advance\countREGISTER by 1%
+ \ncase=0%
+ \fi%
+ \ifx\next| %
+ \global\advance\countREGISTER by 2%
+ \ncase=0%
+ \fi
+ \ifx\next\|
+ \global\advance\countREGISTER by 2%
+ \ncase=0%
+ \fi
+ \ifx\next\multispan
+ \ncase=1%
+ \global\advance\multispancount by 1%
+ \fi
+ \ifx\next\header
+ \ncase=2%
+ \fi
+ \ifx\next\cr \global\firstrowfalse \fi
+ \ifx\next\endrow \global\firstrowfalse \fi
+ \ifx\next\crthick \global\firstrowfalse \fi
+ \ifx\next\crnorule \global\firstrowfalse \fi
+ \fi% End of \iffirstrow.
+\relax%\out{subCOL--> ncase=O\the\ncaseE}
+% \out{subCOL--> next=\meaning\next}
+ \ifcase\ncase %
+ \let\next\COLcount%
+ \or %
+ \let\next\spancount%
+ \or %
+ \let\next\argCOLskip%
+ \else %
+ \fi %
+ \fi%
+% \out{subCOL--> countREGISTER=O\the\countREGISTERE}
+ \next%
+}%
+\gdef\argROWskip#1{%
+% Deletes the next balanced, undelimited argument from a
+% token list.
+% \out{---> Entering argROWskip <---}
+% \out{In argROWskip: deleted arg is O#1E}%
+ \let\next\ROWcount \next%
+}% End of macro \argskip.
+\gdef\arghdROWskip#1{%
+% Deletes the next balanced, undelimited argument from a
+% token list.
+% \out{---> Entering arghdROWskip <---}
+% \out{In arghdROWskip: deleted arg is O#1E}%
+ \let\next\ROWcount \next%
+}% End of macro \arghdROWskip.
+\gdef\argCOLskip#1{%
+% Deletes the next balanced, undelimited argument from a
+% token list.
+% \out{---> Entering argCOLskip <---}
+% \out{In argCOLskip: deleted arg is O#1E}%
+ \let\next\COLcount \next%
+}% End of macro \argskip.
+}% End of active &'s.
+}% End of active |'s.
+\def\spancount#1{%\out{spancount--->\meaning#1}
+ \nspan=#1\multiply\nspan by 2\advance\nspan by -1%
+ \global\advance \countREGISTER by \nspan
+% \out{number spancount--->\the\nspan; \the\countREGISTER}
+ \let\next\COLcount \next}%
+%
+%\def\dvr#1{\vrule width 1.0pt depth 0pt height 12pt$_{#1}$}
+\def\dvr#1{\relax}%
+% \omit\hfil%
+% \parindent=0pt\hsize=1.1in\valign{%
+% \vfil#\vfil&\vfil#\vfil\cr\hfil\hbox{\ Added to\ }\hfil&%
+% \hfil\hbox{\ empty events\ }\hfil\cr}\hfil%
+\def\header#1{%
+\dvr{1}{\let\cr=\@mpersand%
+\hdtks={#1}%
+%\out{In header: hdtks=O\the\hdtksE}%
+\counthdROWS\hdtks\into\hdrows%
+\advance\hdrows by 1%
+\ifnum\hdrows=0 \hdrows=1 \fi%
+%\out{In header: Nhdrows=O\the\hdrowsE}%
+\dvr{5}\makehdPREAMBLE{\the\hdrows}%
+%\out{In header: headerpreamble=O\headerpreambleE}%
+\dvr{6}\getHDdimen{#1}%
+%\out{In header: hdsize=O\the\hdsizeE}%
+%\striplastCR{#1}%
+{\parindent=0pt\hsize=\hdsize{\let\ifmath0%
+\xdef\next{\valign{\headerpreamble #1\crnorm}}}\dvr{7}\next\dvr{8}%
+}%
+}\dvr{2}}% End of macro \header.
+%\def\striplastCR#1\cr{\xdef\headerbody{#1}}%
+\def\makehdPREAMBLE#1{%This macro generates the necessary preamble for a
+\dvr{3}%
+% ruled table with \ncols primary columns.
+% (Primary columns means the number of columns NOT
+% counting those used for vertical rules.
+\hdrows=#1% Get the number of columns desired.
+{% Start local parameter definitions.
+\let\headerARGS=0%
+% This is the key to the whole thing; it prevents \ARGS
+\let\cr=\crnorm%
+% from being expanded in the followin \edef's.
+\edef\xtp{\vfil\hfil\hbox{\headerARGS}\hfil\vfil}%
+\advance\hdrows by -1% One row has been generated; decrement the
+% counter.
+\loop% Append as many further rows as needed to the preamble.
+\ifnum\hdrows>0%
+\advance\hdrows by -1%
+\edef\xtp{\xtp&\vfil\hfil\hbox{\headerARGS}\hfil\vfil}%
+\repeat%
+\xdef\headerpreamble{\xtp\crcr}%
+}% End of local parameters.
+\dvr{4}}% End of \makehdPREAMBLE.
+%
+\def\getHDdimen#1{%
+%\out{In getHDdimen: Arg 1=O#1E}%
+\hdsize=0pt%
+\getsize#1\cr\end\cr%
+}% End of macro getHDdimen.
+\def\getsize#1\cr{%
+%\out{In getsize: Arg 1=O#1E}%
+% Here we have to check arg#1 and see if the first token in #1 is an
+% \end; if so, we stop, else we check the width of arg#1.
+% We recall that each arg#1 will be terminated with a \cr token.
+\endsizefalse\savetks={#1}%
+%\out{In getsize: the savetks = O\the\savetksE}%
+\expandafter\lookend\the\savetks\cr%
+%\out{In getsize: ifendsize = O\meaning\ifendsizeE}%
+\relax \ifendsize \let\next\relax \else%
+\setbox\hdbox=\hbox{#1}\newhdsize=1.0\wd\hdbox%
+\ifdim\newhdsize>\hdsize \hdsize=\newhdsize \fi%
+%\out{In getsize: hdsize=O\the\hdsizeE}%
+%\out{In getsize: newhdsize=O\the\newhdsizeE}%
+\let\next\getsize \fi%
+\next%
+}%
+\def\lookend{\afterassignment\sublookend\let\looknext= }%
+\def\sublookend{\relax%
+%\out{In sublookend: looknext = O\looknextE}%
+\ifx\looknext\cr %
+%\out{In sublooknext: looknext=cr}%
+\let\looknext\relax \else %
+%\out{In sublooknext: looknext/=cr}%
+ \relax
+ \ifx\looknext\end \global\endsizetrue \fi%
+ \let\looknext=\lookend%
+ \fi \looknext%
+}%
+%
+% Allow the user to make his own names for crthick, etc.
+%
+\def\tablelet#1{%
+ \tableLETtokens=\expandafter{\the\tableLETtokens #1}%
+}%
+\catcode`\@=12% Change @'s back to their normal category code.
+%
diff --git a/macros/latex209/contrib/tape/tape-doc.tex b/macros/latex209/contrib/tape/tape-doc.tex
new file mode 100644
index 0000000000..c453003750
--- /dev/null
+++ b/macros/latex209/contrib/tape/tape-doc.tex
@@ -0,0 +1,241 @@
+\documentstyle[tape]{article}
+\setlength{\textwidth}{6.5in}
+\setlength{\textheight}{9in}
+\setlength{\oddsidemargin}{1in}
+\renewcommand{\baselinestretch}{1.25}
+\parindent=15pt
+\parskip=6pt plus 1pt
+\pagestyle{plain}
+\begin{document}
+
+\section*{Making Casette Tape Labels using \LaTeX}
+\begin{flushright}
+\begin{tabular}{@{}l@{}}
+Sunil Podar (podar@sbcs)\\
+S.U.N.Y.\ at Stony Brook.\\
+
+\end{tabular}
+\end{flushright}
+
+\vspace*{8mm}
+This document describes a way to maintain a simple ``album database'' and
+susequently print formatted casette tape labels. The commands to accomplish
+this have been implemented as a documentstyle option {\tt tape} and should be
+used with the {\it article} documentstyle, i.e., it should be invoked with
+the command:
+
+\verb|\documentstyle[tape]{article}|
+
+A casette has two sides and each side is assumed to hold one {\it album}.
+Each side of a casette tape label has three major fields of information,
+depicted in Figure 1.:
+
+\begin{description}
+\item[side\hfill] the textual information that goes on the front-flap. This
+is where most of the information goes.
+\item[title\hfill] the title given to the {\it side} that goes on the side
+face of the casette cover.
+\item[addendum\hfill] the textual information that goes on the back-flap of
+the casette tape cover.
+\end{description}
+
+\album{1}{\it side--1}{\it title--1}{\it addendum--1}
+\album{2}{\it side--2}{\it title--2}{\it addendum--2}
+\begin{figure}[hb]
+\begin{center}
+\renewcommand{\globaltapeid}{\footnotesize global\\tapeid}
+\small
+\maketape[tapeid]{1}{2}%
+\caption[]{The Layout of a Casette Tape Label and the Terminology Used}
+\end{center}
+\end{figure}
+
+\newpage
+Each side of the tape in the database is defined using the following
+command:
+
+{\it
+\verb|\album{|album-id\verb|}{|side\verb|}{|title\verb|}{|addendum\verb|}|}
+
+\verb|\album| command defines an album. More precisely, it defines one side
+of a casette tape. It takes four arguements: first one
+is a unique label assigned to every album, the other three being {\it side},
+{\it title} and {\it addendum}.
+
+A tape label holds information for two sides. Following command produces the tape label:
+
+{\it \verb|\maketape[|tape-id\verb|]{|album1-id\verb|}{|album2-id\verb|}[|optional tape title\verb|]|}
+
+The album entry corresponding to {\it album1-id} goes on the left side of the
+tape label and those corresponding to {\it album2-id} on the right side. By
+default, individual titles are picked up from the album definition and
+formatted to appear under their own sides. If it is desired to have a single
+title as the case may be if both sides of a tape are by the same composer or
+group, then a title may be explicitly specified as the last arguement in
+which case individual titles of the two albums, as specified in their
+respective \verb|\album| definitions, are ignored.
+
+A tape label also has two minor
+fields of information, that go on the side face of the tape label, on either
+side of the title. They are:
+\begin{description}
+\item[globaltapeid\hfill] This goes on the left side of the title, almost
+flush with the left edge. This may hold information such as the owner's name.
+By default, it is empty and may be changed using a \verb|\renewcommand|.
+
+\item[tapeid\hfill] This is an identification for individual tapes and goes
+to the right of the title almost flush with the right edge.
+\end{description}
+
+The width of the box in which the two fields described above are printed, is
+controlled by a variable \verb|\tapeidwidth| and may be changed using a
+\verb|\setlength| command. Also, by default, a vertical line is drawn
+separating the two boxes from the title region. It may be changed by a
+\verb|\renewcommand| on the parameter \verb|\tapeidmarker| --- one may
+prefer a $\bullet$ (\verb|$\bullet$|) as the demarcator.
+
+The {\it side} and the {\it addendum} fields are set in a \verb|minipage|
+environment, thus any of the regular paragraph formatting commands of \LaTeX\
+may be used; various formatting environments, such as {\tt tabbing}, {\tt
+tabular}, {\tt itemize}, {\tt enumerate}, etc., can also be used. The other
+fields, i.e., {\it title}, {\it globaltapeid} and {\it tapeid} are set in a
+\verb|\parbox| thus only \verb|\\| command may be used with no blank lines in
+the fields -- a parbox permits only one simple paragraph. Just a reminder: to
+get indentation on a line following a \verb|\\| command, use \verb|\hspace*|
+instead of \verb|\hspace|; according to the manual, any \verb|\hspace| after
+a \verb|\\| is ignored.
+
+On the outside of the left hand edge of the tape label, three vertical lines
+are shown. In addition to enforcing a correct height for each of the three
+regions, they also serve as an indicator. Their height is invariant and in
+the case when more text has been typed in a region than will fit on the
+label, they indicate precisely by how much has the height been overshot. They
+should, of course, be left out when the label is cut.
+
+No choice of fonts or fontsizes is enforced and one is completely free to
+choose these, although it is suggested that a small-sized font (such as those
+obtained by \verb|\small|, \verb|\footnotesize| or \verb|\tiny| declarations)
+be used since the width of the paragraphs is rather small. Also, if more
+information need to be put than will fit, the inter-line spacing may be
+reduced using a \verb|\renewcommand| on the parameter \verb|\baselinestretch|.
+
+Two tape labels can be fit on a page, and a \verb|\newpage| declaration ought
+to be placed after every two \verb|\maketape| commands.
+
+It is assumed that each \verb|\album| describes one {\it side} of the tape
+label, which is also usually the case. If one side of a tape contains more
+than one album then one will have to declare it as a single \verb|\album|
+description. On the other hand, if a single album, or piece of music spans
+both sides of a casette tape, its description will have to be broken
+into two \verb|\album| declarations.
+
+The label can be cut out along the outer boundary -- the border lines are
+meant to be part of the label so the cut should be just along the outer edge
+of the lines.
+
+\section*{General Comments}
+
+The tape database is implemented by storing all fields as control sequences,
+thus it is suggested that the database be constructed using reasonable-sized
+files; subsequently to make tape labels, only the necessary files be
+\verb|\input|, otherwise \TeX\ may run out of memory.
+
+The tape database has been implemented with the aim that the database
+files be sharable amongst various users so long as every album has a unique
+{\it album-id}. In order to load a tape database, all one needs to do is
+\verb|\input| the appropriate files and subsequently type the
+\verb|\maketape| commands for each desired pair of albums.
+Following suggestions are made for conventions to be adopted
+so as to enable a large community to share files without much effort:
+\begin{itemize}
+\item Each album database file have a ``{\tt .bum}'' file-name
+extension\footnote{music album $\Leftrightarrow$ musical bum --- Benny Hill}.
+For such files, the extension will have to be explicitly specified in the
+\verb|\input| statement, otherwise \TeX\ will look for a file with a {\tt
+.tex} extension.
+
+\item Separate files be maintained for different composers or groups.
+
+\item Any character can be used in the {\it album-id}, thus following
+formats are suggested for {\it album-id}'s\\[1mm]
+\hspace*{0.5in}\verb|filename.#|, or\\
+\hspace*{0.5in}\verb|filename[#]|, where {\tt \#} is an integer.
+
+For example, one may have a file {\tt mozart1.bum} with various album
+descriptions of Mozart's compositions, each having an album-id of the form
+{\tt mozart1.1}, {\tt mozart1.2}, and so on. If a single piece of music
+spans both sides then we might label the two parts using another level of
+subscripts, for example {\tt mozart.12.1} and {\tt mozart.12.2}.
+\end{itemize}
+
+The only problem with above conventions is that if two users have a file with
+identical album-id's then the file will have to be
+copied and the album-id's changed.
+
+Following page contains an example. Commands used to generate the label would
+be:
+\leftmargini 25pt
+\begin{quote}
+\begin{verbatim}
+\documentstyle[tape]{article}
+\renewcommand{\globaltapeid}{\footnotesize\sf Sunil\\Podar}
+\begin{document}
+\input{example.bum}
+\maketape[\sf WC\\12]{vivaldi.1}{vivaldi.2}
+\end{document}
+\end{verbatim}
+\end{quote}
+
+\newpage
+\vspace*{-4mm}
+{%
+\input{tape.sty}
+\input{example.bum}
+\renewcommand{\globaltapeid}{\footnotesize\sf Sunil\\Podar}
+\begin{center}
+\small
+\maketape[\sf WC\\12]{vivaldi.1}{vivaldi.2}
+\end{center}%
+}
+
+\renewcommand{\baselinestretch}{0.85}
+\small\normalsize
+
+\noindent The file {\tt example.bum} contains:
+\begin{quote}
+\begin{verbatim}
+\album{vivaldi.1}{\small Vivaldi, Antonio\hfill (1678-1741)\\
+\begin{enumerate}
+\item Concerto in G Major for Two Mandolins, Strings \& Basso Continuo
+\item Concerto in C Major for Mandolin, Strings \& Basso Continuo
+\item Concerto in C Major for Two Mandolins, Two Theorboes, Two flutes,
+Two ``Salmoe'', Two Violins, Cello, Strings \& Basso Continuo
+\item Concerto a dve Chori in B flat Major, ``Con Violino Discordato'',
+Strings \& Basso Continuo
+\end{enumerate}
+}%
+{\normalsize\sf Vivaldi\\Mandolin Concertos}%
+{\small {\it I Solisti Veneti} --- Claudio Scimone\\[1mm]
+Bonifacio Bianchi, Alessandro Pitrelli --- Mandolins
+}
+%%-----------------------------------------------------------
+\album{vivaldi.2}{\small Vivaldi, Antonio\\[1mm]
+{\bf \underline{The Four Seasons\rule[-0.7mm]{0mm}{1mm}}}
+
+\begin{enumerate}
+\item SPRING, Concerto No. 1 in E Major
+\item SUMMER, Concerto No. 2 in G Minor
+\item AUTUMN, Concerto No. 3 in F Major
+\item WINTER, Concerto No. 4 in F Minor
+\end{enumerate}
+
+Simon Standage --- Violin\\
+Trevor Pinnock --- Harpsichord\\[1mm]
+{\it The English Chamber Orchestra} on authentic instruments.
+}%
+{\normalsize\sf Vivaldi\\The Four Seasons}{}
+%%-----------------------------------------------------------
+\end{verbatim}
+\end{quote}
+
+\end{document}
diff --git a/macros/latex209/contrib/tape/tape.example b/macros/latex209/contrib/tape/tape.example
new file mode 100644
index 0000000000..fa0d73eac9
--- /dev/null
+++ b/macros/latex209/contrib/tape/tape.example
@@ -0,0 +1,31 @@
+\album{vivaldi.1}{\small Vivaldi, Antonio\hfill (1678-1741)\\
+\begin{enumerate}
+\item Concerto in G Major for Two Mandolins, Strings \& Basso Continuo
+\item Concerto in C Major for Mandolin, Strings \& Basso Continuo
+\item Concerto in C Major for Two Mandolins, Two Theorboes, Two flutes,
+Two ``Salmoe'', Two Violins, Cello, Strings \& Basso Continuo
+\item Concerto a dve Chori in B flat Major, ``Con Violino Discordato'',
+Strings \& Basso Continuo
+\end{enumerate}
+}%
+{\normalsize\sf Vivaldi\\Mandolin Concertos}%
+{\small {\it I Solisti Veneti} --- Claudio Scimone\\[1mm]
+Bonifacio Bianchi, Alessandro Pitrelli --- Mandolins
+}
+%%-----------------------------------------------------------
+\album{vivaldi.2}{\small Vivaldi, Antonio\\[1mm]
+{\bf \underline{The Four Seasons\rule[-0.7mm]{0mm}{1mm}}}
+
+\begin{enumerate}
+\item SPRING, Concerto No. 1 in E Major
+\item SUMMER, Concerto No. 2 in G Minor
+\item AUTUMN, Concerto No. 3 in F Major
+\item WINTER, Concerto No. 4 in F Minor
+\end{enumerate}
+
+Simon Standage --- Violin\\
+Trevor Pinnock --- Harpsichord\\[1mm]
+{\it The English Chamber Orchestra} on authentic instruments.
+}%
+{\normalsize\sf Vivaldi\\The Four Seasons}{}
+%%-----------------------------------------------------------
diff --git a/macros/latex209/contrib/tape/tape.readme b/macros/latex209/contrib/tape/tape.readme
new file mode 100644
index 0000000000..73ab81ba8a
--- /dev/null
+++ b/macros/latex209/contrib/tape/tape.readme
@@ -0,0 +1,40 @@
+This file is a "Readme" for the "tape" documentstyle option that implements
+commands to maintain a primitive database of albums from which subsequently
+casette tape labels can be printed with minimal effort. A significant
+attraction is the fact that the album database can be shared among users.
+
+The author hopes that from time to time netters make their databases
+available to general public.
+
+Installation:
+In order for the 'tape' style option to be loaded, one of the two things will have to be done:
+
+1. A copy of the macro file 'tape.sty' be put in the standard place for
+such macros (typically /usr/lib/tex/macros), or
+
+2. If you do not wish to install it as in step 1. or if you do not have
+such priviledges, then a copy of 'tape.sty' may be put in some other
+directory, and the path declared in the environment variable TEXINPUTS;
+e.g. for C-shell on unix systems, put a command similar to the following in
+the .cshrc file:
+
+setenv TEXINPUTS .:/usr/lib/tex/macros:/users/podar/texlib}
+
+Caveat: I should really have made "tape" a standalone document style, but
+was lazy. I suggest that the following command be used for its invocation:
+\documentstyle[tape]{article}
+without any other options. Also some of the list making environments, etc.
+are redefined, hence if you try printing some regular text besides the
+tape label, things may not come out right.
+
+As always, comments, suggestions, bugs etc., are welcome. Also, please let me
+know if any worthwhile modifications are made.
+
+enjoy.
+
+Sunil Podar
+SUNY at Stony Brook
+
+CSNET: podar@sbcs.csnet
+ARPA: podar%suny-sb.csnet@csnet-relay.arpa
+UUCP: {allegra, hocsd, philabs, ogcvax}!sbcs!podar
diff --git a/macros/latex209/contrib/tape/tape.sty b/macros/latex209/contrib/tape/tape.sty
new file mode 100644
index 0000000000..3904c0e7dc
--- /dev/null
+++ b/macros/latex209/contrib/tape/tape.sty
@@ -0,0 +1,138 @@
+% tape document style for LaTeX 2.09
+% podar@sbcs (Sunil Podar) June 20,1986
+% Dept. of Applied Math., SUNY at Stony Brook
+% You may use this file for whatever purpose you wish. Please leave this
+% notice, identifying original author, intact.
+
+\typeout{Document Style 'tape'. Released 20 June 1986}
+
+% This documentstyle is for making casette tape labels. Two labels can be
+% fit on a page with a \newpage command after every two labels.
+% It should be invoked with \documentstyle[tape]{article}.
+% --- should have made a standalone documentstyle, but was lazy; would
+% involve unnecessary dirty work.
+% If more stuff needs to be fit on a label, reduce the \baselinestretch in
+% the document and/or use smaller fonts.
+% Two commands are implemented:
+% \album{album-id}{stuff for the side}{title}{addendum that goes on backflap}
+% \maketape[tape-id]{album-id}{album-id}[optional explicit title]
+%---------------------------------------------------------------------------
+\makeatletter
+\textwidth 5in
+\textheight 9in
+\pagestyle{empty}
+\renewcommand{\baselinestretch}{0.85}
+\parskip 0pt plus 1pt
+%\parindent=0pt %% done inside \maketape
+\hbadness=3000% will not complain about every little underfull hbox.
+%
+\leftmargini 12pt
+\leftmarginii 10pt % more than two level deep not expected!
+\labelsep 3pt
+\leftmargin\leftmargini
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\topsep 2pt plus 1pt minus 1pt
+\partopsep 2pt plus 1pt minus 1pt
+\parsep 1pt
+\itemsep 1pt
+
+%% many paragraphing environments use list's and fiddle with the parameter
+%% values, thus need to include them in the \def of \@listi.
+\def\@listi{\leftmargin\leftmargini
+ \labelwidth\leftmargini\advance\labelwidth-\labelsep
+ \topsep 2pt plus 1pt minus 1pt
+ \partopsep 2pt plus 1pt minus 1pt
+ \parsep 1pt
+ \itemsep 1pt}
+
+%%removed the \def of \@listi from \small and \footnotesize
+%% --- causes problems when used in center environment.
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt%------
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt}
+%
+%% following two redefined to get the label flushleft.
+\def\enumerate{\ifnum \@enumdepth >3 \@toodeep\else
+ \advance\@enumdepth \@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
+ {\csname label\@enumctr\endcsname}{\usecounter
+ {\@enumctr}\def\makelabel##1{\rlap{##1}\hss}}\fi}
+
+\def\itemize{\ifnum \@itemdepth >3 \@toodeep\else \advance\@itemdepth \@ne
+\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+\list{\csname\@itemitem\endcsname}{\def\makelabel##1{\rlap{##1}\hss}}\fi}
+
+%----------------
+\setlength{\doublerulesep}{1mm}
+\setlength{\arrayrulewidth}{0.8pt}
+\newdimen\tapeidwidth
+\newdimen\@titlewidth
+%------------------------------------------------------------------------
+% Here are the user controllable parameters, specific to \makelabel:
+% \globaltapeid goes on the little box on the left side of title. Typical
+% thing to put there would be name. e.g.
+% \renewcommand{\globaltapeid}{\footnotesize\sf Sunil\\Podar}
+\def\globaltapeid{} %changed via a \renewcommand
+\def\tapeidmarker{\vline} %changed via a \renewcommand
+\tapeidwidth=0.35in %changed via a \setlength{\tapeidwidth}{..} command
+% We put a \rule of 0in width and appropriate height along with the
+% \tapeidmarker for the \vline to work since it is in a makebox[0in].
+%-----------------------------------------------------------------------
+% \album{5}{side}{title}{addendum} => defines \album@v@s = side and
+% \album@v@t = title and \album@v@a = addendum
+% the title is the one used by \maketape as default.
+%
+\long\def\album#1#2#3#4{%
+\@namedef{album.#1.s}{#2}% side
+\@namedef{album.#1.t}{#3}% title
+\@namedef{album.#1.a}{#4}}% addendum
+%------------------------------------------------------------------
+%\maketape[tape-id]{album-id1}{album-id2}[explicit title formatted as a centered one entry]
+% -- makes a tape label of albums identified by album-id1 andalbum-id2. The
+% titles are picked up from the \album definition; if an explicit centered
+% label is desired then specify it as the third (optional) argument.
+%
+\def\maketape{\@ifnextchar[{\@maketape}{\@maketape[]}}
+\def\@maketape[#1]#2#3{\@ifnextchar[%
+{\@imaketape[#1]{#2}{#3}}{\@imaketape[#1]{#2}{#3}[@]}}
+%
+\def\@imaketape[#1]#2#3[#4]{{\parindent=0pt
+\tabcolsep=1pt %want explicit control on spacing
+\begin{tabular}{|l@{\hspace{0.1in}}|@{\hspace{0.1in}}l|}
+\hline
+\makebox[0in][l]{\hskip-2mm\rule[-2.32in]{0.4mm}{2.5in}}%
+\ \minipage[t]{1.84in}\@nameuse{album.#2.s}\endminipage &%
+\minipage[t]{1.84in}\@nameuse{album.#3.s}\endminipage\ \\
+\hline\hline
+%
+\multicolumn{2}{|@{}l@{}|}{%
+\makebox[0in][l]{\hskip-1.8mm\rule[-0.2in]{0.4mm}{0.46in}}%
+\,\parbox{\tapeidwidth}{\raggedright\globaltapeid\ }%
+\makebox[0in]{\tapeidmarker\rule[-0.2in]{0in}{0.46in}}%
+\@titlewidth=1.97in \advance\@titlewidth by-\tapeidwidth%
+\ifx#4@%
+\parbox{\@titlewidth}{\centering \@nameuse{album.#2.t}\ }%
+\parbox{\@titlewidth}{\centering \@nameuse{album.#3.t}\ }%
+\else\@titlewidth=2\@titlewidth\parbox{\@titlewidth}{\centering #4\ }%
+\fi%
+\makebox[0in]{\tapeidmarker\rule[-0.2in]{0in}{0.46in}}%
+\parbox{\tapeidwidth}{\raggedleft #1\ }\,}\\
+%
+\hline\hline
+\makebox[0in][l]{\hskip-2mm\rule[-0.72in]{0.4mm}{0.9in}}%
+\ \minipage[t]{1.84in}\@nameuse{album.#2.a}\ \endminipage &%
+% need \ in minipage to enforce size in case any of the minipage args are null
+\minipage[t]{1.84in}\@nameuse{album.#3.a}\endminipage\ \\
+\hline
+\end{tabular}%
+\par\vspace*{0.2in}}}
+%------------------------------------------------------------------
+\makeatother
diff --git a/macros/latex209/contrib/tengtex/README b/macros/latex209/contrib/tengtex/README
new file mode 100644
index 0000000000..5895793e22
--- /dev/null
+++ b/macros/latex209/contrib/tengtex/README
@@ -0,0 +1,19 @@
+The files in this directory are by Ivan A Derzhanski
+ <iad@cogsci.ed.ac.uk>
+
+His notice of the files said:
+
+I've just put the five files making up the TengTeX 1.00 package
+on ftp.tex.ac.uk in the directory incoming. (The package is a
+collection of macros for the (La)TeX typesetting in JRR Tolkien's
+Elvish languages.)
+
+The five files are:
+
+Tira_ni Description.
+tengtex.tex TeX style sheet.
+tengtex.sty LaTeX style sheet.
+tengdoc.tex User's manual in LaTeX.
+vanda.tex Quasi-copyright oath.
+
+--Ivan A Derzhanski
diff --git a/macros/latex209/contrib/tengtex/Tira_ni b/macros/latex209/contrib/tengtex/Tira_ni
new file mode 100644
index 0000000000..cc8b18f178
--- /dev/null
+++ b/macros/latex209/contrib/tengtex/Tira_ni
@@ -0,0 +1,23 @@
+tengtex.tex -- TengTeX for the TeX typesetting of Eldarin text
+tengtex.sty -- TengTeX for the LaTeX typesetting of Eldarin text
+----------------------------------------------------------------
+Version 1.00, 22 September 1994
+
+The package contains the following files:
+
+Tira_ni This file.
+tengtex.tex TeX style sheet.
+tengtex.sty LaTeX style sheet.
+tengdoc.tex User's manual in LaTeX.
+vanda.tex Quasi-copyright oath (in English and Quenya).
+
+
+Make sure you have either Julian C Bradfield's fount teng10
+or Michael P Urban's fount tengwar where LaTeX can see it.
+Run LaTeX on tengdoc. You'll be prompted to choose a fount
+by entering either `\jcb' or `\mpu'. Do it and print and/or
+preview the manual.
+
+
+Ivan A Derzhanski (iad@cogsci.ed.ac.uk; iad@chaos.cs.brandeis.edu)
+* Centre for Cognitive Science, 2 Buccleuch Place, Edinburgh EH8 9LW, UK
diff --git a/macros/latex209/contrib/tengtex/tengdoc.tex b/macros/latex209/contrib/tengtex/tengdoc.tex
new file mode 100644
index 0000000000..ec43fec67b
--- /dev/null
+++ b/macros/latex209/contrib/tengtex/tengdoc.tex
@@ -0,0 +1,431 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% tengdoc.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\language\english
+\documentstyle[tengtex]{article}
+\title{\TengTeX: \TeX\ Spells for Eldarin Text\\
+User's Manual\\ Version 1.00%
+\thanks{Inspiration has been drawn from the package Arab\TeX\ by Klaus
+ Lagally. I give thanks to Dirk Thierbach for his comments and to
+ Michael Urban for adapting the spell sheet for the revised version
+ of his fount.}}
+%
+\author{Ivan A Derzhanski} \date{22 September 1994}
+
+\newcommand\book[1]{{\sl#1}\/}
+\newcommand\word[1]{{\it#1}\/}
+\newcommand\que[1]{{\tt #1} & \quetta{#1}}
+\newcommand\queng[1]{{\tt#1} \quetta{#1}}
+\newcommand\sintable{%
+\begin{tabular}{*{6}{|cc|}}\hline
+\que {bh} &{\tt c}, \que k &{\tt ch}, \que {kh} &\que d &\que {dh} &\que f \\
+\que g & \que {gh} & \que h & \que {hw} &&& \que j \\
+\que l & \que {lh} &&& \que m & \que {mh} & \que {mm} \\
+\que n & \que {nn} & \que N &&& \que p & \que {ph} \\
+\que r & \que {rh} &&& \que s & \que {ss} & \que {sh}\\
+\que t & \que {th} & \que v & \que w & \que z & \que {zh} \\\hline
+\end{tabular}}
+\newcommand\qsdth[4]{Diphthongs with~{\tt #1} as second element are
+ written as #2 bearing the tehta for the first element (\queng{#3} `#4')}
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+
+This document describes the use of \TengTeX\ ({\tt
+ tengtex.tex}\,/\,{\tt tengtex.sty}) for the \TeX\,/\,\LaTeX\
+typesetting of text in Eldarin languages in F\"eanorian tengwar, using
+either the fount {\tt teng10} by Julian~C Bradfield or the revised
+fount {\tt tengwar} by Michael~P Urban (or any combination of the
+two).
+%
+\begin{quote}
+ Perhaps it is worth reminding that the name \word{\TeX} is derived
+ from the Greek word \word{tekhn\=e} `art', which (along with the
+ Latin \word{tex\=o} `weave', \word{textum} `web, fabric, texture',
+ \word{textus} `text') goes back to the Proto-Indo-European root
+ *\word{te\'k\b s-} `create, frame, carve', no doubt from a Lemberin
+ cognate of the Proto-Eldarin base {\sc tek-} `write', whence also
+ \quenya Quenya \quetta{teke} `writes', \sindarin Sindarin
+ \quetta{teitho} `write!'.
+\end{quote}
+%
+The input of \TengTeX\ is essentially an {\sc ascii}sation of the
+R\'omen\'orean spelling adopted by J~R~R Tolkien and described in
+Section~{\sc i} of Appendix~E to \book{The~Lord of the Rings}. (One
+difference is that capital letters are used for increasing the total
+number of~letters available for the input, instead of singling out
+sentence-initial words and proper names, a device which has no
+counterpart in the F\"eanorian script; another is that no accent marks
+are used, because of the unfortunate limitations of~{\sc ascii}.) Its
+output strives to~follow the orthographic conventions of the Third
+Age, discussed in Section~{\sc ii} of the same Appendix and
+illustrated in the few surviving samples of Eldarin text in tengwar%
+\footnote{One of these sources, Aragorn's letter to Master Samwise, is
+ in fact an early Fourth Age document, but it can be taken as
+ representative of Third Age Sindarin writing, since it was during
+ the Third Age that the author received his Elvish education.---Some
+ archaic (pre-Third\_Age) conventions, in particular regarding
+ Quenya, are also supported.}%
+; on those occasions on which the sources disagree, the evidence from
+the corpus takes precedence over the description in the Appendix. In
+its current version \TengTeX\ is intended for processing text in
+Quenya, Sindarin and their close relatives, and it also provides some
+support for Westron and the Black Speech, but not for any other
+languages, although it may work by~accident for some post-Third\_Age
+Mannish tongues (such as Irish in Sindarin mode).
+
+\TengTeX\ is not copyrighted, but its use is protected by an oath, the
+text of~which (in~English and~Quenya) is to be found in the file~{\tt
+ vanda.tex} in this distribution.
+
+\section{Generalia}
+
+To activate \TengTeX, load it by \verb!\input tengtex! into a \TeX\
+source file or include the option {\tt tengtex} into the document
+header of a \LaTeX\ document.
+
+The~fount used is selected by the spells \verb!\jcb! (J~Bradfield's
+{\tt teng10}) and \verb!\mpu! (M~Urban's {\tt tengwar}). There is no
+default fount, so you have to specify one or the other before the
+first occasion on~which Eldarin text is typeset, or else be asked
+about~it interactively. (In the latter case \TengTeX\ won't let you go
+until you choose a fount.)
+
+Three major modes are available: Quenya, Classical Sindarin and
+Beleriandic Sindarin. The appropriate mode is selected by the spells
+\verb!\quenya!, \verb!\sindarin! and~\verb!\beleriand!. There are also
+some options within each of the modes.
+
+The typesetting of text in tengwar, particularly of longer passages,
+is done by the environment {\tt elvish}. For the inclusion of short
+quotations in tengwar into text written in other scripts the macro
+\verb!\quetta! is also available.%
+\footnote{All the macro does is send its parameter to the environment
+ for processing; it thus uses more of \TeX's memory, but it is
+ shorter to type.}
+%
+An~Elvish environment, but not an Elvish quotation, may consist of
+two or more paragraphs separated by blank lines.
+
+In an Elvish environment or quotation continuous strings of letters
+(in the \TeX\ sense) are recognised as words and written in tengwar in
+the output, following the orthographic conventions of the mode (and
+ignoring letters to~which a value is not assigned); continuous strings
+of digits are recognised as numbers, and are inverted in the output.%
+\footnote{Numbers are not explicitly marked as such with a dot or line
+ above them, since the digits in our founts are already sufficiently
+ distinct from tengwar, in any case more so than a dot would be from
+ an overdot tehta.}
+%
+Numbers may form part of words.
+%
+\begin{quote}
+\quenya\queng{\lightvocalise Sauron ataltane 3019sse.}
+
+[Quenya] `Sauron fell in 3019.'
+\end{quote}
+%
+Any other characters (such as punctuation marks), blank space and
+\TeX, \LaTeX\ or~\TengTeX\ parameterless commands are let~through
+unchanged, and it is your respons\-ibility to ensure that their
+visible output, if any, makes sense in the chosen fount (for~example,
+a hyphen, `{\tt -}', yields a tengwa number 11 in J~Bradfield's fount
+and a dash in M~Urban's). Empty pairs of curly brackets can be used to
+break ligatures, as they make \TengTeX\ think that the word ends there
+and a new one begins.
+
+\section{Quenya}\quenya
+
+\subsection{Vowels}
+
+In Quenya mode you have the option of choosing between heavy (default)
+and light vocalisation, using the words \verb!\heavyvocalise! and
+\verb!\lightvocalise! for~switching back and~forth.
+
+Short vowels are written as tehtar over the preceding consonant or
+(when syllable-initial) over a short carrier. When light vocalisation
+(a glimpse of which is to be seen in \book{J~R~R Tolkien, Life
+ and~Legend (Catalogue of the Bodleian Library Exhibition, Oxford,
+ 1992)}, Plate~218) is selected, the tehta for~{\tt a} is not
+written, but all tengwar standing for syllable-final consonants
+receive a subscript~dot tehta, ({\tt falmar} `waves' is set as
+\quetta{\lightvocalise falmar} if vocalised lightly and
+\quetta{falmar} if vocalised heavily).
+
+Long vowels can be either doubled in the input, and then the tehta is
+also doubled (\queng{yeen} `year', \queng{mool} `slave, thrall',
+\queng{uur} `fire'; note that this only works with {\tt e}, {\tt o}
+and {\tt u}), or capitalised, and then the single tehta is written
+over a long carrier (\queng{yAr} `blood').
+
+\qsdth i{yanta}{oire} {everlasting age}. \qsdth u{\'ure}{leuke}{snake}.
+
+\subsection{Consonants}
+
+The following consonants and consonant clusters are available:
+
+\medskip
+
+\begin{tabular}{*{5}{|cc|}}\hline
+{\tt c}, \que k & \que f & \que G & \que h & \que {hl} \\
+\que {hr} & \que {ht} & \que {hw} & \que H & \que l \\
+\que {lb} & \que {ld} & \que m & \que {mb} & \que {mp} \\
+\que n & {\tt nc}, \que {nk} & \que {nd} & \que {ng} & \que {ngw} \\
+{\tt nq}, \que {nqu} & \que {nt} &&& \que N & \que {Nw} \\
+\que p & {\tt q}, \que {qu} &&& \que r & \que {rd} \\
+\que s & \que {ss} &&& \que S & \que t \\
+\que v & \que w & \que x & \que y & \que z \\\hline
+\end{tabular}
+\medskip\\\lightvocalise
+%
+Double consonants are written with an under\-bar tehta
+(\queng{quetta}%
+\footnote{The examples in this section are vocalised lightly.}
+%
+`word', \queng{tyelle} `grade'). The only exception is {\tt ss}, which
+is written as esse (\queng{Gassa} `hole, opening, mouth').
+%
+\begin{itemize}
+\item[\vbox{\hbox{{\tt G}, {\tt H}, {\tt S},}\hbox{{\tt N}, {\tt
+ Nw}}}] yield tengwar which had lost their original phonetic
+ values by the Third Age. They are meant for writers concerned with
+ etymology (\queng{Galda} `tree', \queng{HOn} `heart', \queng{Noola}
+ `wise, learned', \queng{Sinde} `grey').%
+ \footnote{The first notation is suggested by the fact that
+ Proto-Eldarin \word{g}, preserved in Sindarin, became zero in
+ Quenya, presumably going through a stage where it was an
+ approximant, such as might have been denoted by anna. The
+ remaining four tengwar are pronounced as the ones input by the
+ corresponding lowercase Roman letters.}
+\item[\tt q]may be used without the following {\tt u}, so {\tt qetta}
+ also yields \quetta{quetta}.
+\item[\tt r]is written as r\'omen when followed by a vowel or by {\tt
+ y} (\queng{rOmen} `east', \queng{hrIve} `winter', \queng{kirya}
+ `ship') and as \'ore elsewhere (\queng{kirkar} `sickles').
+\item[\tt R]is always written as \'ore (\queng{ORe} `heart, inner mind').
+\item[\tt s]is written as an underhook tehta when following another
+ consonant (\queng{otso} `seven', \queng{aksa} `ravine',
+ \queng{norsa} `giant').
+\item[\tt y]is written as an under-di\ae resis tehta when following
+ another consonant (\queng{Nwalya} `torment').
+\end{itemize}
+%
+When silme and~esse bear a tehta for a following vowel, their nuquerna
+shapes are automatically substituted (\queng{silme} `starlight',
+\queng{esse} `name').
+
+\subsection{Galadriel's lament in~L\'orien}\heavyvocalise
+
+(From \book{The Road Goes Ever On}.)
+
+\medskip\begin{elvish}
+ai! laurie lantar lassi sUrinen,
+yeeni UnOtime ve rAmar aldaron!.
+yEni ve linte yuldar avAnier
+mI oromardi lisse,miruvOreva,
+andUne pella, vardo tellumar
+nu luini yassen tintilar i eleni
+Omaryo airetAri,lIrinen.
+
+sI man i yulma nin enquantuva?.
+
+an sI tintalle varda oiolosseo
+ve fanyar mAryat elentAri ortane,
+ar ilye tier undulAve lumbule;
+ar sindanOriello caita mornie
+i falmalinnar imbe met, ar hIsie
+untUpa calaciryo mIri oiale.
+sI vanwa nA, rOmello vanwa, valimar!.
+
+namArie! nai hiruvalye valimar.
+nai elye hiruva. namArie!.
+\end{elvish}
+
+\section{Sindarin}\sindarin
+
+\subsection{Vowels}
+
+Short vowels are written as tehtar over the following consonant or
+(when none follows) over a short carrier. By default {\tt o} is
+written as a curl open to the right and~{\tt u} as a curl open to the
+left, but their r\^oles can be swapped by specifying~\verb!\oleft!
+(Black Speech \queng{\oleft\vaswestron uruk} `great soldier-orc,
+Uruk-hai') and restored by specifying~\verb!\oright!.
+
+Long vowels can be either doubled in the input, and then the tehta is
+also doubled (\queng{eel} `star', \queng{too} `thither', \queng{uur}
+`fire'; note that this only works with {\tt e}, {\tt o} and {\tt u}),
+or capitalised, and then the single tehta is written over a long
+carrier (\queng{Ar} `king, chieftain', \queng{gwI} `net, web',
+\queng{rhYn} `hound of chase', Black Speech \queng{shaRkU} `old man').
+No distinction is made between long and overlong vowels.
+
+\qsdth e{yanta}{oer}{sea}. \qsdth i{anna}{uir}{eternity}.
+\qsdth u{\'ure}{naug}{dwarf}.
+
+\subsection{Consonants}
+
+In either of the two Sindarin modes you have the option of choosing
+whether the calmat\'ema or the quesset\'ema is to be used for velar
+consonants (and, in the latter case, whether the calmat\'ema is to be
+used for palatal consonants) and whether the \'oretyelle or the
+n\'umetyelle is to be used for single nasal consonants. The selection
+of the Classical Sindarin mode automatically allocates the velars in
+the quesset\'ema, though \verb!\vaswestron! makes {\tt c} available
+for calma (English \queng{\vaswestron cek} `cheque') and
+\verb!\vincalma! transfers the rest of the velars into the
+calmat\'ema. Also, the the nasal consonants are allocated in the
+n\'umetyelle, though this setting can be altered by specifying
+\verb!\ninOre!. The following consonants and consonant clusters are
+available in the default setting:
+
+\medskip
+
+\sintable
+\medskip\\
+%
+Double consonants are written with an under\-bar tehta (\queng{tellen}
+`footprint'). The only exceptions are {\tt ss}, which is written as
+esse, and {\tt mm} and {\tt nn}, which are written as malta and
+n\'umen with or without an overbar or overtilde tehta.
+%
+\begin{itemize}
+\item[\tt bh]is provided for the sake of completeness, as an
+ alternative to {\tt v}.
+\item[\tt f]is written as formen in initial and medial position
+ (\queng{farn} `enough', \queng{tofn} `deep') and as ampa in final
+ position (\queng{tif} `flute').
+\item[\vbox{\hbox{{\tt gh}, {\tt j},}\hbox{{\tt sh}, {\tt z}, {\tt
+ zh}}}] are provided in order to make possible the typesetting
+ of text in Westron (\queng{zIr} `wise') or the Black Speech
+ (\queng{ghAsh} `fire').
+\item[\tt H]is always written as hyarmen, without forming a digraph
+ with a preceding consonant letter.
+\item[\tt i]is written as yanta when it appears as a glide in initial
+ position (\queng{iAr} `blood').
+\item[\tt m]is written as an overbar or overtilde tehta when preceding
+ a labial consonant (\queng{hamp} `garment', \queng{ammarth} `doom,
+ fate').
+\item[\tt n]is written as an overbar or overtilde tehta when preceding
+ a dental or velar consonant (\queng{rhink} `sudden move',
+ \queng{lhann} `wide').
+\item[\tt ph]is written as formen in initial and final position
+ (\queng{alph} `swan') and as formen with an underbar tehta in medial
+ position (\queng{ephel} `outer fence').
+\item[\tt r]is written as \'ore when it occurs word-finally
+ (\queng{bar} `home') and as r\'omen elsewhere (\queng{rAd} `path,
+ track', \queng{arth} `region, realm'). It is, however, always
+ written as r\'omen if {\tt n} is \'ore.
+\item[\tt R]is written as \'ore if {\tt n} is n\'umen, and as r\'omen
+ otherwise.
+\item[\tt w]is written as a squiggle tehta when following another
+ consonant other than~{\tt h} (\queng{gwelw} `air'). A tengwa can
+ bear no more than one consonant superscript tehta, however, so {\tt
+ w} following a consonant preceded by a homorganic nasal is written
+ separately as a wilya (\queng{angwedh} `chain', \queng{glentweth}
+ `thinness'), unless the etymology suggests a different spelling (as
+ in the case of \verb!thurin{}gwethil! \quetta{thurin{}gwethil}
+ `secret shadow woman').
+\end{itemize}
+%
+When silme and esse bear a tehta for a preceding vowel (which is,
+in~fact, always the case with esse), their nuquerna shapes are
+automatically substituted (\queng{kost} `quarrel', \queng{bess}
+`woman').
+
+\subsection{The King's letter to Samwise Gamgee}
+
+(From \book{Sauron Defeated}.)
+
+\medskip\begin{elvish}
+ elessar telcontar; aragorn arathornion edhelHarn, aran gondor ar
+ hIr i mbair annui, anglennatha i varanduiniant erin dolothen ethuil,
+ egor ben genediad drannail erin gwirith edwen. ar e anIra ennas
+ suilannad mhellyn In phain; edregol e anIra tIrad i cheRdir
+ peRHael (i sennui pant{}hael estathar aen) condir i drann, ar
+ meril bess dIn, ar elanor, meril, glorfinniel, ar eirien sellath
+ dIn; ar iorHael, gelir, cordof, ar baravorn, ionnath dIn.
+
+ a pherHael ar am meril suilad uin aran o minas tirith nelchaenen
+ uin echuir.
+\end{elvish}
+
+\subsection{The Ring inscription}\oleft \vaswestron
+
+(From \book{The Lord of the Rings}.)
+
+\medskip
+\quetta{ash nazg duRbatuluuk,} \quetta{ash nazg gimbatul,}
+
+\quetta{ash nazg thrakatuluuk,} \quetta{agh buRzumishi krimpatul}
+
+\section{Beleriandic}\beleriand
+
+\subsection{Vowels}
+
+Short vowels are written as tengwar. Long vowels, written double (if
+they could be doubled in the Classical Sindarin mode) or represented
+as capitals in the input, are written as the corresponding tengwar
+with an~andaith (\queng{eel} `star', \queng{too} `thither',
+\queng{uur} `fire'; \queng{Ar} `king, chieftain', \queng{gwI} `net,
+web', \queng{rhYn} `hound of chase').
+
+Diphthongs with {\tt e} as second element are written in~full
+(\queng{oer} `sea'). Diphthongs with {\tt i} as second element are
+written as the tengwa for the first element bearing a di\ae resis
+tehta (\queng{uir} `eternity'). Diphthongs with {\tt u} as second
+element are written the tengwa for the first element bearing a
+squiggle tehta (\queng{naug} `dwarf').
+
+\subsection{Consonants}
+
+The selection of the Beleriandic mode automatically allocates the
+velars in the calmat\'ema and the single nasal consonants in the
+\'oretyelle, though this setting can be altered by specifying
+\verb!\vinquesse! or \verb!\vincalma! for the former and/or
+\verb!\ninnUmen! for the latter. The following consonants and
+consonant clusters are available in the default setting:
+
+\medskip
+
+\sintable
+\medskip\\
+%
+The glide {\tt i} in initial position is written as a long carrier
+(\queng{iAr} `blood'). The remaining input conventions are the same as
+in the Classical Sindarin mode.
+
+Since there are no vowel tehtar in this mode, silme and esse always
+appear in their upright (not nuquerna) shapes.
+
+\subsection{The hymn of the Rivendell elves}
+
+(From \book{The Road Goes Ever On}.)
+
+\medskip\begin{elvish}
+a elbereth! gilthoniel!
+silivren penna mIriel,
+o menel aglar elenath!
+
+na,chaered palan,dIriel
+o galadhremmin ennorath;
+fanuilos, le linnathon,
+nef aear, sI nef aearon!
+\end{elvish}
+
+\subsection{The inscription on the Moria Gate}
+
+(From \book{The Lord of the Rings}. Observe the spelling
+\verb!mel{}lon! \quetta{mel{}lon} instead of \queng{mellon}.)
+
+\medskip\begin{elvish}
+ennyn durin aran moria; pedo mel{}lon a minno.
+
+im narvi hain echant; celebrimbor o eregion teithant i thIw hin.
+\end{elvish}
+
+\end{document}
diff --git a/macros/latex209/contrib/tengtex/tengtex.sty b/macros/latex209/contrib/tengtex/tengtex.sty
new file mode 100644
index 0000000000..45644b6ed1
--- /dev/null
+++ b/macros/latex209/contrib/tengtex/tengtex.sty
@@ -0,0 +1,889 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% tengtex.sty (TengTeX for LaTeX)
+% 22 September 1994
+% Version 1.00
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Ivan A Derzhanski
+% Centre for Cognitive Science
+% University of Edinburgh
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \TengTeX {T\ama@tehta {\char19}{\~g}\TeX }
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% fount selection %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif \if@nofount
+
+\def \@jcb{\jcb} \def \@mpu{\mpu}
+
+\def \mere@tengwanda{%
+ \loop
+ \ifx \@tengwanda \undefined
+ \message{Choose a tengwar fount (\string\jcb\space or \string\mpu): }%
+ \read-1 to\@answer
+ \ifx \@answer \@jcb \jcb \else \ifx \@answer \@mpu \mpu%
+ \else \message{None of these Orkish jokes, please.^^J}\fi\fi
+ \repeat}
+
+
+%%%%%%%%%%%%% character definitions common to both founts %%%%%%%%%%%%%
+
+\def\l@p#1#2{\setbox0=\hbox{#2}\ooalign{\box0\crcr\hidewidth#1\hidewidth}}%
+
+\chardef \tanta@Oman="80
+
+\chardef \@tinco=`t \chardef \@TUle=`T \chardef \@Ore=`R
+\chardef \@ando=`d \chardef \@anto=`D \chardef \@nUmen=`n
+
+\chardef \@parma=`p \chardef \@formen=`f \chardef \@vala=`w
+\chardef \@umbar=`b \chardef \@ampa=`v \chardef \@malta=`m
+
+\chardef \@quesse=`k \chardef \@hwesta=`K \chardef \@Noldo=`Y
+\chardef \@ungwe=`g \chardef \@unque=`G \chardef \@Nwalme=`N
+
+\chardef \@lambe=`l \chardef \@alda=`L \chardef \@rOmen=`r
+\chardef \@anga=`j \chardef \@silme=`s \chardef \@esse=`z
+
+\chardef \@quessiEva="80 % Quenya: _q_ expecting _u_
+\chardef \@unquiEva="81 % Quenya: _nq_ expecting _u_
+
+\chardef \@phormen="82 % Sindarin: _ph_
+
+\chardef \i@iEva="83 % Beleriandic Sindarin: sentence-initial _i_
+
+
+%%%%%%%%%%%%%%%%%%%%% Julian Bradfield's tengwar %%%%%%%%%%%%%%%%%%%%%
+
+\def \jcb{\globaldefs=1%
+\font \jcb@tengwar=teng10\let \@tengwanda \jcb@tengwar
+\hyphenchar\jcb@tengwar=-1 % hyphenation in tengwar suppressed
+\emergencystretch=2em % but we can do some extra stretching
+%
+\chardef \a@tehta=`a
+\chardef \e@tehta=`e \let \@E@tehta \tanta@Oman
+\chardef \i@tehta=`i
+\chardef \o@tehta=`o \let \@O@tehta \tanta@Oman
+\chardef \u@tehta=`u \let \@U@tehta \tanta@Oman
+%
+\def \E@tehta {e\kern-.15eme}%
+\def \O@tehta {o\kern-.25emo}%
+\def \U@tehta {u\kern-.35emu}%
+%
+\chardef \sinta@kolindo=`@
+\chardef \anda@kolindo=`*
+%
+\chardef \@calma=`c
+\chardef \@Harma=`C \chardef \@anna=`y
+\chardef \@anca=`J \chardef \@wilya=`W
+%
+\chardef \@arda=`\& \chardef \@hyarmen=`h
+\chardef \@silme@nuquerna=`S \chardef \@esse@nuquerna=`Z
+\chardef \@yanta=`I \chardef \@Ure=`U
+\chardef \@hwesta@sindarinwa=`H
+\chardef \@halla=`|
+%
+\def \uOman@tehta ##1##2{% no following vowel
+ \ifx ##2\@lambe {\l@p {\raise.5ex\hbox{^^E}}{##1}}\else {\l@p ^^E{##1}}\fi}%
+%
+\def \T@nun@tehta ##1{{\l@p ^^B{##1}}}% doubling a narrow tengwa
+\let \D@nun@tehta \T@nun@tehta % doubling a wide tengwa
+\def \L@nun@tehta ##1{##1\raise.75ex\hbox to 0pt{\hss^^B}}% doubling _l_
+%
+\def \y@nun@tehta ##1{{\l@p ^^Y{##1}}}% _y_ following something
+\def \l@nun@tehta ##1{##1\raise.75ex\hbox to 0pt{\hss^^Y}}% _y_ following _l_
+\def \r@nun@tehta ##1{\raise.2ex\hbox to 0pt{^^Y\hss}##1}% _y_ following _r_
+%
+\def \s@nun@tehta ##1{##1\kern-0.3em^^T}% _s_ following something
+\def \x@nun@tehta ##1{##1\kern-0.05em^^T}% _s_ following _c_ or _l_
+%
+\chardef \y@tehta="22
+%
+\chardef \arka@ama@falma="0F % prenasalisation for a narrow tengwa
+\chardef \landa@ama@falma="0F % prenasalisation for a wide tengwa
+\chardef \w@tehta="16
+%
+\chardef \a@tengwa=`A \chardef \o@tengwa=`y \chardef \y@tengwa=`S
+%
+\chardef \@andaith=`e
+%
+\globaldefs=0}
+
+
+%%%%%%%%%%%%%%%%%%%%%%% Michael Urban's tengwar %%%%%%%%%%%%%%%%%%%%%%%
+
+\def \mpu{\globaldefs=1%
+\font \mpu@tengwar=tengwar\global \let \@tengwanda \mpu@tengwar
+\hyphenchar\mpu@tengwar=-1 % hyphenation in tengwar suppressed
+\emergencystretch=2em % but we can do some extra stretching
+%
+\chardef \a@tehta="5E
+\chardef \e@tehta="13
+\chardef \i@tehta="5F
+\chardef \o@tehta="14
+\chardef \u@tehta="15
+\chardef \E@tehta="7D
+\chardef \O@tehta="16
+\chardef \U@tehta="17
+%
+\chardef \sinta@kolindo=`i
+\chardef \anda@kolindo="10
+%
+\chardef \@calma=`C \chardef \@Harma=`S \chardef \@anna=`O
+\chardef \@anca=`Z \chardef \@wilya=`A
+%
+\chardef \@arda="12 \chardef \@hyarmen=`h
+\chardef \@silme@nuquerna="03 \chardef \@esse@nuquerna="1A
+\chardef \@yanta=`e \chardef \@Ure=`u
+\chardef \@hwesta@sindarinwa="0F
+\chardef \@halla="11
+%
+\def \uOman@tehta ##1##2{\l@p ^^Y{##1}}% no following vowel
+%
+\def \T@nun@tehta ##1{\l@p ^^H{##1}}% doubling a narrow tengwa
+\def \D@nun@tehta ##1{\l@p {\char9}{##1}}% doubling a wide tengwa
+\def \L@nun@tehta ##1{##1\llap ^^H}% doubling lambe
+%
+\def \y@nun@tehta ##1{\l@p ^^X{##1}}% _y_ following something
+\let \l@nun@tehta \y@nun@tehta
+\def \r@nun@tehta ##1{##1\lower.2ex\hbox to1.5pt{\hss^^X}}% _y_ following _r_
+%
+\def \s@nun@tehta ##1{##1\kern-0.3em\char28}% _s_ following something
+\def \x@nun@tehta ##1{##1\kern-0.05em\char28}% _s_ following _c_ or _l_
+%\def \s@nun@tehta ##1{##1\lower1.5ex\hbox to3pt{\hss^^U}}% _s_ after something
+%\def \x@nun@tehta ##1{##1\lower1.5ex\hbox to3pt{\hss^^U}}% _s_ after _c_ or _l_
+%
+\chardef \y@tehta="7F
+%
+\chardef \arka@ama@falma="0A % prenasalisation for a narrow tengwa
+\chardef \landa@ama@falma="0B % prenasalisation for a wide tengwa
+\chardef \w@tehta="1E
+%\def\w@tehta##1{##1\raise .9ex\hbox to 0pt{\hss\char"2D}}
+%
+\chardef \a@tengwa=`a \chardef \o@tengwa=`o \chardef \y@tengwa=`y
+%
+\chardef \@andaith="13
+%
+\globaldefs=0}
+
+
+%%%%%%%%%%%%%%%% macro definitions common to all modes %%%%%%%%%%%%%%%%
+
+\long \def \kara@Ukerta #1{%
+ \ifcase \nato@nostale \or \quetto@metta \or \m@m \fi
+ \ifx \@sptoken \hilde@kerta \space \fi
+ #1\nato@nostale=0}
+
+\newcount \nato@nostale % class of input token
+ % 0: waiting, 1: word, 2: number
+
+\long \def \tUva@kerta #1{%
+ \ifx #1\end\relax
+ \ifcase \nato@nostale \or \quetto@metta \or \m@m \fi
+ \let \next \end
+ \else \ifcat z\noexpand#1\relax
+ \ifnum 1=\nato@nostale
+ \ifx \@sptoken \hilde@kerta
+ \quetto@metta \space \vinya@quetta
+ \fi
+ \else
+ \ifnum 2=\nato@nostale \m@m \fi
+ \ifx \@sptoken \hilde@kerta \space \fi
+ \vinya@quetta
+ \fi
+ \expandafter \kara@kerta \m@m >#1%
+ \nato@nostale=1%
+ \else \ifcat .\noexpand#1\relax
+ \chardef \@ch=`#1\relax
+ \ifnum \@ch<48 \kara@Ukerta #1%
+ \else \ifnum \@ch<58
+ \ifnum 2=\nato@nostale
+ \ifx \@sptoken \hilde@kerta
+ \m@m \space \def \m@m {}%
+ \fi
+ \else
+ \ifnum 1=\nato@nostale \quetto@metta \fi
+ \ifx \@sptoken \hilde@kerta \space \fi
+ \def \m@m {}%
+ \fi
+ \edef \m@m {#1\m@m}%
+ \nato@nostale=2%
+ \else \kara@Ukerta #1%
+ \fi\fi
+ \else \kara@Ukerta #1%
+ \fi\fi
+ \def \next {\futurelet \hilde@kerta \tUva@kerta}%
+ \fi
+ \next}
+
+\def \elvish {% Elvish environment
+ \mere@tengwanda%
+ \@tengwanda%
+ \nato@nostale=0%
+ \tUva@kerta }
+\def \endelvish {}
+
+\def \quetta #1{\begin{elvish}#1 \end{elvish}} % short quotation
+
+\def \ama@tehta #1#2{% allocate superscript tehta
+ \leavevmode \vbox \bgroup
+ \baselineskip 0pt\lineskip 0pt%
+ \halign {\hss ##\unskip \hss \cr #1\vadjust {\vskip -1ex}\cr #2\cr }%
+ \egroup }
+
+\def \Oman@tengwa #1#2{% put vowel tehta over tengwa, inverting silme and esse
+ \ifx #1\@silme \@Oman@tengwa #2\@silme@nuquerna
+ \else \ifx #1\@esse \@Oman@tengwa #2\@esse@nuquerna
+ \else \@Oman@tengwa #2#1%
+ \fi\fi}
+
+\def \@Oman@tengwa #1#2{% put vowel tehta over tengwa
+ \expandafter \ifx \csname @#1@tehta\endcsname \tanta@Oman
+ \expandafter \ama@tehta \csname #1@tehta\endcsname #2%
+ \else \expandafter \accent \csname #1@tehta\endcsname #2\fi}
+
+\def \tehta@tengwa #1#2{% put consonant tehta over tengwa,
+ % inverting silme and esse
+ \ifx #1\@silme \accent #2\@silme@nuquerna
+ \else \ifx #1\@esse \accent #2\@esse@nuquerna
+ \else \accent #2#1%
+ \fi\fi}
+
+\def \nun@tehta #1#2{% allocate subscript consonant tehta
+ \ifx #2:#1\else \expandafter \csname #2@nun@tehta\endcsname {#1}\fi}
+
+
+%%%%%%%%%%%%%%%%%%%% macro definitions for Quenya %%%%%%%%%%%%%%%%%%%%
+
+\newif \if@light
+\let \heavyvocalise \@lightfalse
+\let \lightvocalise \@lighttrue
+
+\def \quenya {%
+ \let \kara@kerta \q@kerta
+ \def \vinya@quetta {\def \m@m {\sinta@kolindo ::}}%
+ \def \quetto@metta {\expandafter \@@teka \m@m>}}
+
+\def \@@teka #1#2#3#4>{%
+ \ifx #1\sinta@kolindo \ifx #3:\ifx \relax #4\relax \else \@teka #4<>\fi
+ \else \@teka #4#1#2#3<>\fi \else \@teka #4#1#2#3<>\fi}
+
+\def \@teka #1#2#3#4#5>{%
+ \ifx #3:%
+ \ifx #1\@halla \@halla
+ \else \ifx #4\anda@kolindo \nun@tehta #1#2%
+ \else \ifx #4\@yanta \nun@tehta #1#2%
+ \else \ifx #4\@Ure \nun@tehta #1#2%
+ \else
+ \def \q@c@n {\ifx #1\@rOmen \@Ore \else #1\fi}%
+ \if@light \expandafter \uOman@tehta {\nun@tehta \q@c@n #2}#1%
+ \else \nun@tehta \q@c@n #2\fi
+ \fi\fi\fi\fi
+ \else \ifx #1\@rOmen
+ \ifx #2s\s@nun@tehta {\q@c@v \@Ore #3}%
+ \else \nun@tehta {\q@c@v \@rOmen #3}#2%
+ \fi
+ \else \ifx #1\@quessiEva \nun@tehta {\q@c@v \@quesse #3}#2%
+ \else \ifx #1\@unquiEva \nun@tehta {\q@c@v \@unque #3}#2%
+ \else \nun@tehta {\q@c@v #1#3}#2%
+ \fi\fi\fi\fi
+ \ifx <#4\let \next \relax \else \def \next {\@teka #4#5>}\fi
+ \next}
+
+\def \q@c@v #1#2{% choosing whether to use vowel tehta
+ % depending on vocalisation
+ \ifx #2a\if@light #1\else \Oman@tengwa #1a\fi
+ \else \Oman@tengwa #1#2%
+ \fi}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% Quenya scanner %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \q@kerta #1>#2{%
+ \ifcat #2a\csname #2@q\endcsname #1>%
+ \else \ifcat #2.\expandafter \@@teka \m@m>#2\def \m@m {\sinta@kolindo ::}%
+ \fi\fi}
+
+\def \a@q #1#2#3#4>{%
+ \ifx #3:\def \m@m {#1#2a#4}%
+ \else \def \m@m {\sinta@kolindo :a#4#1#2#3}%
+ \fi}
+
+\def \e@q #1>{\q@quanta@Oman #1>eE}
+\def \o@q #1>{\q@quanta@Oman #1>oO}
+
+\def \q@quanta@Oman #1#2#3#4>#5#6{%
+ \ifx #3:\def \m@m {#1#2#5#4}%
+ \else \ifx #3#5\def \m@m {#1#2#6#4}%
+ \else \def \m@m {\sinta@kolindo :#5#4#1#2#3}%
+ \fi\fi}
+
+\def \i@q #1#2#3#4>{%
+ \ifx #3:\def \m@m {#1#2i#4}%
+ \else
+ \edef \m@m {%
+ \sinta@kolindo ::#4\ifx #1\sinta@kolindo \else #1::\fi \@yanta :#3}%
+ \fi}
+
+\def \u@q #1#2#3#4>{%
+ \ifx #3:%
+ \ifx #1\@quessiEva \def \m@m {\@quesse #2#3#4}%
+ \else \ifx #1\@unquiEva \def \m@m {\@unque #2#3#4}%
+ \else \def \m@m {#1#2u#4}%
+ \fi\fi
+ \else \ifx #3u\def \m@m {#1#2U#4}%
+ \else
+ \edef \m@m
+ {\sinta@kolindo ::#4\ifx #1\sinta@kolindo \else #1::\fi \@Ure :#3}%
+ \fi\fi}
+
+\def \A@q #1>{\q@anda@Oman #1>a}
+\def \E@q #1>{\q@anda@Oman #1>e}
+\def \I@q #1>{\q@anda@Oman #1>i}
+\def \O@q #1>{\q@anda@Oman #1>o}
+\def \U@q #1>{\q@anda@Oman #1>u}
+
+\def \q@anda@Oman #1#2#3#4>#5{%
+ \edef \m@m
+ {\sinta@kolindo ::#4%
+ \ifx #1\sinta@kolindo
+ \ifx #3:\else ::#3\fi
+ \else #1#2#3\fi \anda@kolindo :#5}}
+
+\def \b@q #1#2#3#4>{\edef \m@m {\@umbar ::#4\ifx #1\@lambe l::\fi}}
+
+\def \d@q #1#2#3#4>{%
+ \edef \m@m
+ {\ifx #1\@lambe \@alda
+ \else \ifx #1\@rOmen \@arda
+ \else \@ando \fi\fi ::#4}}
+
+\def \g@q #1#2#3#4>{\def \m@m {\@anga ::#4}}
+
+\def \h@q #1#2#3#4>{%
+ \ifx #3:%
+ \ifx #1\sinta@kolindo \def \m@m {\@hyarmen ::#4}%
+ \else \edef \m@m {\@hyarmen ::#4#1::}%
+ \fi
+ \else \def \m@m {\hyarmen ::#4#1#2#3}%
+ \fi}
+
+\def \f@q #1>{\q@Upunta #1>\@formen T}
+\def \G@q #1>{\q@Upunta #1>\@anna T}
+\def \H@q #1>{\q@Upunta #1>\@Harma T}
+\def \l@q #1>{\q@Upunta #1>\@lambe L}
+\def \m@q #1>{\q@Upunta #1>\@malta D}
+\def \n@q #1>{\q@Upunta #1>\@nUmen D}
+\def \N@q #1>{\q@Upunta #1>\@Noldo D}
+\def \r@q #1>{\q@Upunta #1>\@rOmen T}
+\def \R@q #1>{\q@Upunta #1>\@Ore T}
+\def \S@q #1>{\q@Upunta #1>\@TUle T}
+\def \v@q #1>{\q@Upunta #1>\@vala T}
+\def \z@q #1>{\q@Upunta #1>\@esse T}
+
+\def \q@Upunta #1#2#3#4>#5#6{%
+ \ifx #3:%
+ \ifx #1\sinta@kolindo \def \m@m {#5::#4}%
+ \else \ifx #1#5\def \m@m {#5#6:#4}%
+ \else \edef \m@m {#5::#4\ifx #1\@hyarmen \@halla \else #1\fi ::}%
+ \fi\fi
+ \else \def \m@m {#5::#4#1#2#3}%
+ \fi}
+
+\def \s@q #1#2#3#4>{%
+ \ifx #3:%
+ \ifx #1\sinta@kolindo \def \m@m {\@silme ::#4}%
+ \else \ifx #1\@silme \def \m@m {\@esse ::#4}%
+ \else
+ \edef \m@m
+ {#1\ifx #1\@calma x\else \ifx #1\@lambe x\else s\fi\fi :#4}%
+ \fi\fi
+ \else \def \m@m {\@silme ::#4#1#2#3}%
+ \fi}
+
+\def \w@q #1#2#3#4>{%
+ \ifx #3:%
+ \ifx #1\sinta@kolindo \def \m@m {\@wilya ::#4}%
+ \else \ifx #1\@anga \def \m@m {\@ungwe ::#4}%
+ \else \ifx #1\@harma \def \m@m {\@hwesta ::#4}%
+ \else \ifx #1\@hyarmen \def \m@m {\@hwesta ::#4}%
+ \else \ifx #1\@Noldo \def \m@m {\@Nwalme ::#4}%
+ \else \def \m@m {\@wilya ::#4#1::}%
+ \fi\fi\fi\fi\fi
+ \else \def \m@m {\@wilya ::#4#1#2#3}%
+ \fi}
+
+\def \x@q #1#2#3#4>{%
+ \edef \m@m{%
+ \@calma x:#4%
+ \ifx #3:\ifx #1\sinta@kolindo \else #1::\fi\else #1#2#3\fi }}
+
+\def \y@q #1#2#3#4>{%
+ \ifx #3:%
+ \edef \m@m {%
+ \ifx #1\sinta@kolindo \@anna \else #1\fi
+ \ifx #1\@rOmen r\else \ifx #1\@lambe l\else y\fi\fi :#4}%
+ \else \def \m@m {\@anna y:#4#1#2#3}%
+ \fi}
+
+\def \c@q #1>{\q@punta #1>\@calma \@nUmen \@anca}
+\let \k@q \c@q
+\def \p@q #1>{\q@punta #1>\@parma \@malta \@ampa}
+\def \q@q #1>{\q@punta #1>\@quessiEva \@nUmen \@unquiEva}
+
+\def \q@punta #1#2#3#4>#5#6#7{%
+ \ifx #3:%
+ \ifx #1\sinta@kolindo \def \m@m {#5::#4}%
+ \else \ifx #1#5\def \m@m {#5T:#4}%
+ \else \ifx #1#6\def \m@m {#7::#4}%
+ \else \def \m@m {#5::#4#1::}%
+ \fi\fi\fi
+ \else \def \m@m {#5::#4#1#2#3}%
+ \fi}
+
+\def \t@q #1#2#3#4>{%
+ \ifx #3:%
+ \ifx #1\sinta@kolindo \def \m@m {\@tinco ::#4}%
+ \else \ifx #1\@hyarmen \def \m@m {\@tinco ::#4\@Harma ::}%
+ \else \ifx #1\@tinco \def \m@m {\@tinco T:#4}%
+ \else \ifx #1\@nUmen \def \m@m {\@anto ::#4}%
+ \else \def \m@m {\@tinco ::#4#1::}%
+ \fi\fi\fi\fi
+ \else \def \m@m {\@tinco ::#4#1#2#3}%
+ \fi}
+
+
+%%%%%%%%%%%%%%%%%%% macro definitions for Sindarin %%%%%%%%%%%%%%%%%%%
+
+\def \oright {\def \o@sind {o}\def \u@sind {u}\def \O@sind {O}\def \U@sind {U}}
+\def \oleft {\def \o@sind {u}\def \u@sind {o}\def \O@sind {U}\def \U@sind {O}}
+
+\newif \if@ninOre
+\def \ninnUmen {%
+ \@ninOrefalse
+ \let \n@sind \@nUmen \let \m@sind \@malta \def \n@gem {N}}
+\def \ninOre {%
+ \@ninOretrue
+ \let \n@sind \@Ore \let \m@sind \@vala \def \n@gem {:}}
+
+\def \vinquesse{% use only the quessetEma
+ \let \c@sind \@quesse \let \k@sind \@quesse \let \g@sind \@ungwe
+ \let \ch@sind \@hwesta \let \kh@sind \@hwesta \let \gh@sind \@unque
+ \let \N@sind \@Nwalme}
+\def \vaswestron{% use both the calmatEma and the quessetEma
+ \let \c@sind \@calma \let \k@sind \@quesse \let \g@sind \@ungwe
+ \let \ch@sind \@hwesta \let \kh@sind \@hwesta \let \gh@sind \@unque
+ \let \N@sind \@Nwalme}
+\def \vincalma{% use only the calmatEma
+ \let \c@sind \@calma \let \k@sind \@calma \let \g@sind \@anga
+ \let \ch@sind \@Harma \let \kh@sind \@Harma \let \gh@sind \@anca
+ \let \N@sind \@Noldo}
+
+\def \sindarin {%
+ \let \kara@kerta \s@kerta
+ \oright \ninnUmen \vinquesse
+ \def \vinya@quetta {\def \m@m {::\sinta@kolindo :}}%
+ \def \quetto@metta {\expandafter \@@teitho \m@m>}}
+
+\def \@@teitho #1#2#3#4#5>{%
+ \ifx #1:\ifx #3\sinta@kolindo \ifx \relax #5\relax \else \@teithoi #5<>\fi
+ \else \@teithoi #5#1#2#3#4<>\fi \else \@teithoi #5#1#2#3#4<>\fi}
+
+\def \@teithoi #1#2#3#4#5#6>{%
+ \ifx #3\@phormen
+ \ifx #5<\s@v@t@c@t #1#2\@formen #4%
+ \else \ifx #1:\s@v@t@c@t #1#2\@formen #4%
+ \else \s@v@t@c@t #1#2\@formen T%
+ \fi\fi
+ \else \ifx #3\sinta@kolindo
+ \ifx #5<\@Oman@tengwa #1\sinta@kolindo
+ \else \ifx #1i\@yanta
+ \else \@Oman@tengwa #1\sinta@kolindo
+ \fi\fi
+ \else \@teithoo #1#2#3#4#5%
+ \fi\fi
+ \ifx <#5\let \next \relax \else \def \next {\@teithoii #5#6>}\fi
+ \next}
+
+\def \@teithoii #1#2#3#4#5#6>{%
+ \ifx #3\@phormen
+ \ifx #5<\s@v@t@c@t #1#2\@formen #4\else \s@v@t@c@t #1#2\@formen T\fi
+ \else \@teithoo #1#2#3#4#5%
+ \fi
+ \ifx <#5\let \next \relax \else \def \next {\@teithoii #5#6>}\fi
+ \next}
+
+\def \@teithoo #1#2#3#4#5{%
+ \ifx #3\@formen
+ \ifx #5<\s@v@t@c@t #1#2\@ampa #4\else \s@v@t@c@t #1#2\@formen #4\fi
+ \else \ifx #3\@rOmen
+ \if@ninOre
+ \s@v@t@c@t #1#2#3#4%
+ \else
+ \ifx #5<\s@v@t@c@t #1#2\@Ore #4%
+ \else \s@v@t@c@t #1#2\@rOmen #4%
+ \fi
+ \fi
+ \else \s@v@t@c@t #1#2#3#4%
+ \fi\fi}
+
+\def \s@v@t@c@t #1#2#3#4{%
+ \nun@tehta {%
+ \ifx #1:\ifx #2:#3%
+ \else \tehta@tengwa #3#2%
+ \fi
+ \else\ifx #2:\Oman@tengwa #3#1%
+ \else
+ \expandafter \ama@tehta \csname #1@tehta\endcsname
+ {\tehta@tengwa #3#2}%
+ \fi
+ \fi}%
+ #4}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% Sindarin scanner %%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \s@kerta #1>#2{%
+ \ifcat #2a\csname #2@s\endcsname #1>%
+ \else \ifcat #2.%
+ \expandafter \@@teitho \m@m>#2\def \m@m {::\sinta@kolindo :}%
+ \fi\fi}
+
+\def \a@s #1>{\s@quanta@Oman #1>a}
+\def \y@s #1>{\s@quanta@Oman #1>y}
+
+\def \s@quanta@Oman #1#2#3#4#5>#6{%
+ \ifx #3\sinta@kolindo
+ \edef \m@m {#6:\sinta@kolindo :#5\ifx #1:\else #1:\sinta@kolindo :\fi}%
+ \else \def \m@m {#6:\sinta@kolindo :#5#1#2#3#4}%
+ \fi}
+
+\def \e@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo
+ \ifx #1a\def \m@m {::\sinta@kolindo :#5a:\@yanta :}%
+ \else \ifx #1o\def \m@m {::\sinta@kolindo :#5o:\@yanta :}%
+ \else \ifx #1e\def \m@m {E:\sinta@kolindo :#5}%
+ \else
+ \edef \m@m {e:\sinta@kolindo :#5\ifx #1:\else #1:\sinta@kolindo :\fi}%
+ \fi\fi\fi
+ \else \def \m@m {e:\sinta@kolindo :#5#1#2#3#4}%
+ \fi}
+
+\def \i@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo
+ \ifx #1:\def \m@m {i:\sinta@kolindo :#5}%
+ \else \def \m@m{::\sinta@kolindo :#5#1:\@anna :}%
+ \fi
+ \else \def \m@m {i:\sinta@kolindo :#5#1#2#3#4}%
+ \fi}
+
+\def \o@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo
+ \ifx #1\o@sind \edef \m@m {\O@sind:\sinta@kolindo :#5}%
+ \else
+ \edef \m@m
+ {\o@sind :\sinta@kolindo :#5\ifx #1:\else #1:\sinta@kolindo :\fi}%
+ \fi
+ \else \edef \m@m {\o@sind :\sinta@kolindo :#5#1#2#3#4}%
+ \fi}
+
+\def \u@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo
+ \ifx #1:\def \m@m {\u@sind :\sinta@kolindo :#5}%
+ \else \ifx #1\u@sind \edef \m@m {\U@sind:\sinta@kolindo :#5}%
+ \else \def \m@m{::\sinta@kolindo :#5#1:\@Ure :}%
+ \fi\fi
+ \else \def \m@m {\u@sind :\sinta@kolindo :#5#1#2#3#4}%
+ \fi}
+
+\def \A@s #1>{\s@anda@Oman #1>a}
+\def \E@s #1>{\s@anda@Oman #1>e}
+\def \I@s #1>{\s@anda@Oman #1>i}
+\def \O@s #1>{\s@anda@Oman #1>o}
+\def \U@s #1>{\s@anda@Oman #1>u}
+\def \Y@s #1>{\s@anda@Oman #1>y}
+
+\def \s@anda@Oman #1#2#3#4#5>#6{%
+ \edef \m@m
+ {::\sinta@kolindo :#5%
+ \ifx #1:\ifx #3\sinta@kolindo \else :#2#3:\fi \else #1#2#3#4\fi
+ #6:\anda@kolindo :}}
+
+\def \f@s #1>{\s@surya #1>\@formen T}
+\def \l@s #1>{\s@surya #1>\@lambe L}
+\def \r@s #1>{\s@surya #1>\@rOmen T}
+\def \R@s #1>{\if@ninOre \s@surya #1>\@rOmen T\else \s@surya #1>\@Ore T\fi}
+\def \v@s #1>{\s@surya #1>\@ampa D}
+
+\def \s@surya #1#2#3#4#5>#6#7{%
+ \ifx #3\sinta@kolindo \def \m@m {#1:#6:#5}%
+ \else \ifx #3#6\def \m@m {#1#2#6#7#5}%
+ \else \def \m@m {::#6:#5#1#2#3#4}%
+ \fi\fi}
+
+\def \b@s #1>{\s@punta #1>\@umbar \m@sind \landa@ama@falma D}
+\def \c@s #1>{\s@punta #1>\c@sind \n@sind \arka@ama@falma T}
+\def \d@s #1>{\s@punta #1>\@ando \n@sind \landa@ama@falma D}
+\def \g@s #1>{\s@punta #1>\g@sind \n@sind \landa@ama@falma D}
+\def \j@s #1>{\s@punta #1>\@anca \n@sind \landa@ama@falma D}
+\def \k@s #1>{\s@punta #1>\k@sind \n@sind \arka@ama@falma T}
+\def \p@s #1>{\s@punta #1>\@parma \m@sind \arka@ama@falma T}
+\def \t@s #1>{\s@punta #1>\@tinco \n@sind \arka@ama@falma T}
+
+\def \s@punta #1#2#3#4#5>#6#7#8#9{%
+ \ifx #3\sinta@kolindo \def \m@m {#1:#6:#5}%
+ \else \ifx #3#6\def \m@m {#1#2#6#9#5}%
+ \else \ifx #3#7\def \m@m {#1#8#6:#5}%
+ \else \def \m@m {::#6:#5#1#2#3#4}%
+ \fi\fi\fi}
+
+\def \m@s #1>{\s@nengwea #1>\m@sind \@malta }
+\def \n@s #1>{\s@nengwea #1>\n@sind \@nUmen }
+
+\def \s@nengwea #1#2#3#4#5>#6#7{%
+ \ifx #3\sinta@kolindo \def \m@m {#1:#6:#5}%
+ \else \ifx #3#6\edef \m@m {#1\if@ninOre :\else \landa@ama@falma \fi #7:#5}%
+ \else \def \m@m {::#6:#5#1#2#3#4}%
+ \fi\fi}
+
+\def \N@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo \def \m@m {#1:\N@sind :#5}%
+ \else \ifx #3\N@sind \edef \m@m {#1\landa@ama@falma \N@sind :#5}%
+ \else \def \m@m {::\N@sind :#5#1#2#3#4}%
+ \fi\fi}
+
+\def \h@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo \def \m@m {#1:\@hyarmen :#5}%
+ \else \ifx #3\@tinco \def \m@m {#1#2\@TUle :#5}%
+ \else \ifx #3\@ando \def \m@m {#1#2\@anto :#5}%
+ \else \ifx #3\@parma \def \m@m {#1#2\@phormen :#5}%
+ \else \ifx #3\@umbar \def \m@m {#1#2\@ampa :#5}%
+ \else \ifx #3\@malta \def \m@m {#1\landa@ama@falma \@ampa :#5}%
+ \else \ifx #3\c@sind \def \m@m {#1#2\ch@sind :#5}%
+ \else \ifx #3\g@sind \def \m@m {#1#2\gh@sind :#5}%
+ \else \ifx #3\@lambe \def \m@m {#1#2\@alda :#5}%
+ \else \ifx #3\@rOmen \def \m@m {#1#2\@arda :#5}%
+ \else \ifx #3\@silme \def \m@m {#1#2\@Harma :#5}%
+ \else \ifx #3\@esse \def \m@m {#1#2\@anca :#5}%
+ \else \def \m@m {::\@hyarmen :#5#1#2#3#4}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+\def \H@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo \def \m@m {#1:\@hyarmen :#5}%
+ \else \def \m@m {::\@hyarmen :#5#1#2#3:}%
+ \fi}
+
+\def \s@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo \def \m@m {#1:\@silme :#5}%
+ \else \ifx #3\@silme \def \m@m {#1#2\@esse :#5}%
+ \else \def \m@m {#1#2#3s#5}%
+ \fi\fi}
+
+\def \w@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo \def \m@m {#1:\@wilya :#5}%
+ \else \ifx #3\@hyarmen \def \m@m {#1#2\@hwesta@sindarinwa :#5}%
+ \else \ifx #2:\def \m@m {#1\w@tehta #3:#5}%
+ \else \def \m@m {::\@wilya :#5#1#2#3:}%
+ \fi\fi\fi}
+
+\def \z@s #1#2#3#4#5>{%
+ \ifx #3\sinta@kolindo \def \m@m {#1:\@esse :#5}%
+ \else \def \m@m {::\@esse :#5#1#2#3:}%
+ \fi}
+
+
+%%%%%%%%%%%%%%%%%% macro definitions for Beleriandic %%%%%%%%%%%%%%%%%%
+
+\newif \ifsinta@Oman % short vowel just read
+\newif \if@thegra % first letter of a word
+
+\def \beleriand {%
+ \let \kara@kerta \b@kerta
+ \ninOre \vincalma
+ \def \vinya@quetta {\def \m@m {:::}\sinta@Omanfalse \@thegratrue }%
+ \def \quetto@metta {\expandafter \tEw@mhedui \m@m }}
+
+\def \@garo #1{\def \m@m {#1}\@thegrafalse }
+
+\def \@teitho #1#2#3>{%
+ \ifx #2:%
+ \else \ifx #2\@phormen
+ \if@thegra \b@t@c@t #1\@formen#3\else \b@t@c@t #1\@formen T\fi
+ \else \ifx #2\i@iEva
+ \b@t@c@t #1\sinta@kolindo#3%
+ \else \b@t@c@t #1#2#3%
+ \fi\fi\fi }
+
+\def \@teithov #1#2#3>{%
+ \ifx #2\i@iEva \anda@kolindo\else \@teitho #1#2#3>\fi }
+
+\def \tEw@mhedui #1#2#3{%
+ \ifx #2\i@iEva \sinta@kolindo
+ \else \ifx #2\@formen \b@t@c@t #1\@ampa #3%
+ \else \ifx #2\@phormen \b@t@c@t #1\@formen#3%
+ \else \ifx #2\@rOmen%
+ \if@ninOre \b@t@c@t #1\@rOmen #3\else \b@t@c@t #1\@Ore #3\fi
+ \else \b@t@c@t #1#2#3%
+ \fi\fi\fi\fi }
+
+\def \b@t@c@t #1#2#3{%
+ \nun@tehta {\ifx #1:#2\else \tehta@tengwa #2#1\fi }#3}
+
+%%%%%%%%%%%%%%%%%%%%%%%%% Beleriandic scanner %%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \b@kerta #1>#2{%
+ \ifcat #2a\csname #2@b\endcsname #1>%
+ \else \ifcat #2.\m@m
+ \fi\fi }
+
+\def \a@b #1>{\b@quanta@Oman #1>\a@tengwa }
+\def \y@b #1>{\b@quanta@Oman #1>\y@tengwa }
+
+\def \b@quanta@Oman #1#2#3>#4{%
+ \ifx #2:\else \@teithov #1#2#3>\fi
+ \@garo {:#4:}\sinta@Omantrue }
+
+\def \e@b #1>{\b@tanta@Oman #1>\@yanta }
+\def \o@b #1>{\b@tanta@Oman #1>\o@tengwa }
+
+\def \b@tanta@Oman #1#2#3>#4{%
+ \ifx #2#4\@garo {\@andaith #4:}\sinta@Omanfalse
+ \else
+ \ifx #2:\else \@teithov #1#2#3>\fi
+ \@garo {:#4:}\sinta@Omantrue
+ \fi}
+
+\def \i@b #1>{%
+ \if@thegra \b@per@Oman #1>\i@iEva \y@tehta
+ \else \b@per@Oman #1>\sinta@kolindo \y@tehta
+ \fi }
+\def \u@b #1#2#3>{%
+ \ifx #2\@Ure \@garo {\@andaith \@Ure :}\sinta@Omanfalse
+ \else \b@per@Oman #1#2#3>\@Ure \w@tehta
+ \fi }
+
+\def \b@per@Oman #1#2#3>#4#5{%
+ \ifsinta@Oman \@garo {#5#2:}\sinta@Omanfalse
+ \else
+ \ifx #2:\else \@teithov #1#2#3>\fi
+ \@garo {:#4:}\sinta@Omantrue
+ \fi}
+
+\def \b@per@Oman #1#2#3>#4#5{%
+ \ifx #2#4\@garo {\@andaith #4:}\sinta@Omanfalse
+ \else \ifsinta@Oman \@garo {#5#2:}\sinta@Omanfalse
+ \else
+ \ifx #2:\else \@teithov #1#2#3>\fi
+ \@garo {:#4:}\sinta@Omantrue
+ \fi\fi}
+
+\def \A@b #1>{\b@anda@Oman #1>\a@tengwa }
+\def \E@b #1>{\b@anda@Oman #1>\@yanta}
+\def \I@b #1>{\b@anda@Oman #1>\sinta@kolindo }
+\def \O@b #1>{\b@anda@Oman #1>\o@tengwa }
+\def \U@b #1>{\b@anda@Oman #1>\@Ure }
+\def \Y@b #1>{\b@anda@Oman #1>\y@tengwa }
+
+\def \b@anda@Oman #1#2#3>#4{%
+ \ifx #2:\else \@teithov #1#2#3>\fi
+ \@garo {\@andaith #4:}\sinta@Omanfalse }
+
+\def \f@b #1>{\b@surya #1>\@formen D}
+\def \l@b #1>{\b@surya #1>\@lambe L}
+\def \r@b #1>{\b@surya #1>\@rOmen T}
+\def \R@b #1>{\if@ninOre \b@surya #1>\@rOmen T\else \b@surya #1>\@Ore T\fi}
+\def \v@b #1>{\b@surya #1>\@ampa D}
+
+\def \b@surya #1#2#3>#4#5{%
+ \ifx #2#4\@garo {#1#2#5}%
+ \else
+ \ifx #2:\else \@teitho #1#2#3>\fi
+ \@garo {:#4:}%
+ \fi \sinta@Omanfalse }
+
+\def \s@b #1#2#3>{%
+ \ifx #2\@silme \@garo {:\@esse :}%
+ \else
+ \ifx #2:\else \@teitho #1#2#3>\fi
+ \@garo {:\@silme :}%
+ \fi \sinta@Omanfalse }
+
+\def \c@b #1>{\b@punta #1>\c@sind \n@sind \arka@ama@falma T}
+\def \b@b #1>{\b@punta #1>\@umbar \m@sind \landa@ama@falma D}
+\def \d@b #1>{\b@punta #1>\@ando \n@sind \landa@ama@falma D}
+\def \g@b #1>{\b@punta #1>\g@sind \n@sind \landa@ama@falma D}
+\def \j@b #1>{\b@punta #1>\@anca \n@sind \landa@ama@falma D}
+\def \k@b #1>{\b@punta #1>\k@sind \n@sind \arka@ama@falma T}
+\def \p@b #1>{\b@punta #1>\@parma \m@sind \arka@ama@falma T}
+\def \t@b #1>{\b@punta #1>\@tinco \n@sind \arka@ama@falma T}
+
+\def \b@punta #1#2#3>#4#5#6#7{%
+ \ifx #2#4\@garo {#1#2#7}%
+ \else \ifx #2#5\@garo {#6#4:}%
+ \else
+ \ifx #2:\else \@teitho #1#2#3>\fi
+ \@garo {:#4:}%
+ \fi\fi \sinta@Omanfalse }
+
+\def \m@b #1>{\b@nengwea #1>\m@sind \@malta \landa@ama@falma }
+\def \n@b #1>{\b@nengwea #1>\n@sind \@nUmen \arka@ama@falma }
+
+\def \b@nengwea #1#2#3>#4#5#6{%
+ \ifx #2#4%
+ \if@ninOre \@garo {:#5:}\else \@garo {#6#2:}\fi
+ \else
+ \ifx #2:\else \@teitho #1#2#3>\fi
+ \@garo {:#4:}%
+ \fi \sinta@Omanfalse }
+
+\def \N@b #1#2#3>{%
+ \ifx #2\N@sind
+ \@garo {\landa@ama@falma \N@sind :}%
+ \else
+ \ifx #2:\else \@teitho #1#2#3>\fi
+ \@garo {:\N@sind :}%
+ \fi \sinta@Omanfalse }
+
+\def \h@b #1#2#3>{%
+ \ifx #2\@tinco \@garo {#1\@TUle :}%
+ \else \ifx #2\@ando \@garo {#1\@anto :}%
+ \else \ifx #2\@parma \@garo {#1\@phormen :}%
+ \else \ifx #2\@umbar \@garo {#1\@ampa :}%
+ \else \ifx #2\m@sind \@garo {\landa@ama@falma \@ampa :}%
+ \else \ifx #2\c@sind \@garo {#1\ch@sind :}%
+ \else \ifx #2\g@sind \@garo {#1\gh@sind :}%
+ \else \ifx #2\@lambe \@garo {#1\@alda :}%
+ \else \ifx #2\@rOmen \@garo {#1\@arda :}%
+ \else \ifx #2\@silme \@garo {#1\@Harma :}%
+ \else \ifx #2\@esse \@garo {#1\@anca :}%
+ \else
+ \ifx #2:\else \@teitho #1#2#3>\fi
+ \@garo {:\@hyarmen :}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \sinta@Omanfalse }
+
+\def \H@b #1#2#3>{%
+ \ifx #2:\else \@teitho #1#2#3>\fi
+ \@garo {:\@hyarmen :}%
+ \sinta@Omanfalse }
+
+\def \w@b #1#2#3>{%
+ \ifx #2\@hyarmen \@garo {:\@hwesta@sindarinwa :}%
+ \else
+ \ifx #2:\@garo {:\@wilya :}%
+ \else \ifx #1:\@garo {\w@tehta #2:}%
+ \else \@teitho #1#2#3>\@garo {:\@wilya :}%
+ \fi\fi
+ \fi \sinta@Omanfalse }
+
+\def \z@b #1#2#3>{%
+ \ifx #2:\else \@teitho #1#2#3>\fi
+ \@garo {:\@esse :}%
+ \sinta@Omanfalse }
+
+
+%%%%%%%%%%%%%%%%%%%%%% ignore all other letters %%%%%%%%%%%%%%%%%%%%%%
+
+\@tfor\ch@r:={BCDFJKLMPQTVWXYZj}\do{%
+ \expandafter \def \csname \ch@r @q\endcsname #1#2#3#4>{}}
+
+\@tfor\ch@r:={BCDFGJKLMPQSTVWXZqx}\do{%
+ \expandafter \def \csname \ch@r @s\endcsname #1#2#3#4>{}%
+ \expandafter \def \csname \ch@r @b\endcsname #1#2#3#4>{}}
diff --git a/macros/latex209/contrib/tengtex/tengtex.tex b/macros/latex209/contrib/tengtex/tengtex.tex
new file mode 100644
index 0000000000..5f2281dc48
--- /dev/null
+++ b/macros/latex209/contrib/tengtex/tengtex.tex
@@ -0,0 +1,46 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% tengtex.tex (TengTeX for Plain TeX)
+% 22 September 1994
+% Version 1.00
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Ivan A Derzhanski
+% Centre for Cognitive Science
+% University of Edinburgh
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\def \makeatletter {\catcode `\@ = 11 }
+\def \makeatother {\catcode `\@ = 12 }
+
+\makeatletter
+
+%%% hacks from latex.tex
+
+\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}
+
+\def\@nnil{\@nil}
+\def\@fornoop#1\@@#2#3{}
+\def\@tfor#1:=#2\do#3{\def\@fortmp{#2}\ifx\@fortmp\@empty \else
+ \@tforloop#2\@nil\@nil\@@#1{#3}\fi}
+\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile\@fornoop \else
+ #4\relax\let\@nextwhile\@tforloop\fi\@nextwhile#2\@@#3{#4}}
+
+%%% hacks from arabtex.tex
+
+\newif \if@ignore % ignore spaces after environment?
+
+\def \begin #1{% small version without checks
+\begingroup
+ \long \def \end ##1{% local version for \end{elvish} and \end \end
+ \ifx ##1\par \endelvish \endgroup
+ \else \csname end\string ##1\endcsname \endgroup \fi
+ \if@ignore \global\@ignorefalse \ignorespaces \fi }%
+\csname #1\endcsname }
+
+\input tengtex.sty
+
+\makeatother
+
+\endinput
diff --git a/macros/latex209/contrib/tengtex/vanda.tex b/macros/latex209/contrib/tengtex/vanda.tex
new file mode 100644
index 0000000000..e3cf871363
--- /dev/null
+++ b/macros/latex209/contrib/tengtex/vanda.tex
@@ -0,0 +1,34 @@
+\documentstyle[tengtex]{article}
+\pagestyle{empty}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{6pt}
+\begin{document}
+\quenya
+
+I hereby offer these spells to all who would have them, for toil or
+for~mirth, and I grant them leave to copy them. But credit they shall
+give in their hearts to me, Tolkien, F\"eanor, Aul\"e and Eru, and
+they shall not trade the spells, nor any thing wrought therewith, for
+gold, silver and jewels. Death in torment and darkness shall be the
+doom of the greedy who heed not this oath, and their names shall not
+be~uttered, but shall be forgotten for~ever between the borders of the
+world and beyond them.
+
+\begin{elvish}
+ sinome antanye kuruquettar sine ilyain i merer te mootien ar
+ tyalien, ar lavanye ten neunakarie te. nan hantale antuvante
+ indontassen nin, tolkInen, feanAron, aulen ar iluuvataren, ar
+ Umankuvante an malta, tyelpe ar mIri i kuruquettar ar ilya karna
+ tenen. qualme i morniesse yeeva umbar i milkaron i Utirar sina
+ vanda, ar UquentiEvar essentar, nA oiale vanwievante enyaliello imbe
+ rInar ardo ar pella te.
+\end{elvish}
+
+\it Sinome antanye kuruquettar sine ilyain i merer te m\'otien ar
+tyalien, ar lavanye ten neunakarie te. Nan hantale antuvante
+indontassen nin, Tolk\'\i nen, Fean\'aron, Aulen ar Il\'uvataren, ar
+\'umankuvante an malta, tyelpe ar m\'\i ri i kuruquettar ar ilya karna
+tenen. Qualme i morniesse y\'eva umbar i milkaron i \'utirar sina
+vanda, ar \'uquenti\'evar essentar, n\'a oiale vanwievante enyaliello
+imbe r\'\i mar Ardo ar pella~te.
+\end{document}
diff --git a/macros/latex209/contrib/tesla/eng-form.sty b/macros/latex209/contrib/tesla/eng-form.sty
new file mode 100644
index 0000000000..6b61825b28
--- /dev/null
+++ b/macros/latex209/contrib/tesla/eng-form.sty
@@ -0,0 +1,108 @@
+%
+% eng-form.sty
+%
+% This is part of the TeSLa package that is the subject of the paper
+% entitled "An Example Special Purpose Input Language to LaTeX" that
+% was (will be) presented to the TUG94 conference in Santa Barabara.
+%
+% Please see tesla.sty for more details.
+% ======================================
+%
+
+%
+% Customization Required for [tvar.
+% =================================
+%
+% The English form is the second "form" used by TeSLa. That is, the
+% tabular form (the first "form") is ignored when the English form is
+% used. This is implemented with the \xform command, whose arguments
+% are:
+% #1 - The tabular form
+% #2 - The English form; IGNORED in this style
+%
+% See the "The [tvar command" subsection of "The Implementation" section
+% in the paper for more details.
+%
+\gdef\xform #1#2{#2}
+
+%
+% Customization Required for [tgroup.
+% ===================================
+%
+% The \xbegin command defines the TeX formatting to be inserted at the
+% begining of a group of rules. Its arguments are:
+% #1 - TeX command to be used for the \trule command
+% #2 - the number of conditions in each rule
+% #3 - the number of columns in the table (#2 + 1)
+% #4 - the width of each column
+% #5 - the title for the group of rules
+% In this English form, we start a new LaTeX subsection.
+%
+% The \sep command defines the TeX formatting to be inserted to add
+% some extra separation between subgroups of a group of rules. In
+% this English form, it does nothing.
+%
+% The \xend command defines the TeX formatting to be inserted at the
+% end of a group of rules. In this English form, it does nothing.
+%
+% See the "The [tgroup command" subsection of "The Implementation" section
+% in the paper for more details.
+%
+\gdef\xbegin#1#2#3#4#5{
+ \gdef\trule{\csname #1\endcsname}
+ \subsection*{#5 Rules}
+ }
+\gdef\xsep{}
+\gdef\xend{}
+
+%
+% Customization Required for [trule.
+% ==================================
+%
+% The \xpre command defines the TeX formatting to be inserted for an
+% empty KB-condition. In this English form, it does nothing.
+%
+% The \xif command defines the TeX formatting to be inserted for the
+% first non-empty KB-condition. It takes one argument:
+% #1 - The first non-empty KB-condition
+% In this English form, it inserts an "If" and columns) and the
+% KB-condition.
+%
+% The \xand command defines the TeX formatting to be inserted for the
+% rest of the KB-conditions. It takes one argument:
+% #1 - The KB-condition
+% In this English form, it insert an "and" and the KB-condition, if it
+% is non-empty.
+%
+% The \xthen command defines the TeX formatting to be inserted for the
+% KB-consequence. It takes one argument:
+% #1 - The KB-consequence
+% In this English form, it inserts a "then", the KB-consequence and a
+% period (.).
+%
+% See the "The [trule command" subsection of "The Implementation" section
+% in the paper for more details.
+%
+\gdef\xpre{}
+\gdef\xif#1{\par {\bf If} \xrel #1}
+\gdef\xand#1{\ifx#1\empty\else{\bf and} \xrel #1 \fi }
+\gdef\xthen#1{{\bf then} \xrel #1.}
+
+%
+% Customization Required for [ttext and [trem.
+% ============================================
+%
+% The \xtext command defines the TeX formatting to be inserted for
+% arbitrary explanatory text. It takes one argument:
+% #1 - The explantory text
+% In this English form, it prints the text---in italics---as a separate
+% paragraph.
+%
+% The \xrem command defines the TeX formatting to be inserted for
+% extra explanatory text into the tabular form. It takes one argument:
+% #1 - The extra explantory text
+% In this English form, it does nothing.
+%
+\gdef\xtext#1{\par{\em #1}}
+\gdef\xrem#1{}
+
diff --git a/macros/latex209/contrib/tesla/goldilocks.tex b/macros/latex209/contrib/tesla/goldilocks.tex
new file mode 100644
index 0000000000..a8ff46941a
--- /dev/null
+++ b/macros/latex209/contrib/tesla/goldilocks.tex
@@ -0,0 +1,85 @@
+%
+% goldilocks.tex
+%
+%
+% This is the Goldilocks example that uses the TeSLa package that is the
+% subject of the paper entitled "An Example Special Purpose Input Language
+% to LaTeX" that was (will be) presented to the TUG94 conference in
+% Santa Barabara.
+%
+% Please see tesla.sty for more details.
+% ======================================
+%
+% Note that this example CHEATS! It has only one main file instead of
+% the three described in the paper and in tesla.sty. Instead, it queries
+% user for the which form to use---tab or eng--- when it is LaTeX'ed.
+%
+
+%
+% Query the user for the form (\form):
+% tab - for the tab-form for the tabular form
+% eng - for the eng-form for the English form
+%
+\typein[\form]{Which form would you like?
+ 'tab' for tabular or 'eng' for English:}
+
+%
+% Now that we know the form (\form), specify the documentstyle
+%
+\documentstyle[11pt,tesla,\form-form]{article}
+
+\begin{document}
+
+\title{The Goldilocks Example\\That Uses the {\tt \form-form} Style\\of \TeSLa{}}
+\author{Henry Baragar \\
+ Instantiated Software Inc. \\
+ henry@instantiated.on.ca
+ \and
+ Gail E. Harris \\
+ RES Policy Research Inc. \\
+ ak753@freenet.carleton.ca
+ }
+\maketitle
+
+This is the Goldilocks example that was presented in the paper entitled
+``An Example Special Purpose Input Language to LaTeX'' that was (will be)
+presented to the TUG '94 conference in Santa Barabara. There are two things
+which this paper illustrates:
+\begin{enumerate}
+\item It illustrates how documentation for use by two audiences with vastly
+ different expectations can be generated from the same source file.
+ In our case, the two audiences are:
+ \begin{description}
+ \item[Expert System Programmers] who expect the documentation in a
+ tabular form where rules are grouped into tables of
+ related rules that incorporate the names of the
+ Knowledge Base variables
+ \item[Domain Experts (or system user)] who expect the
+ documentation in an English form where rules are
+ grouped into subsections of related rules, each of
+ which is a sentence (and paragraph) that
+ incorporates the meanings of the Knowledge Base
+ variables
+ \end{description}
+ A \TeSLa{} document formatted with the {\tt tab-form.sty} will
+ generate the documentation in a form suitable for Expert System
+ Programmers, whereas a \TeSLa{} document formatted with the
+ {\tt eng-form.sty} will generate the documentation in a form
+ suitable for Domain Experts. This document was formatted with the
+ {\tt \form-form} style.
+\item A method of inputing (or marking up) the rules in a manner such
+ that the structure of the rules is visually apparent to the Expert
+ System Analyst (the author of the documentation) and such that the
+ likelyhood of errors is reduced (since the Expert System Analyst
+ might not be comfortable with \LaTeX{} or \TeX{}). Please see the
+ {\tt goldirules.tex} file for the Goldilocks example presented at
+ the end of this document.
+\end{enumerate}
+
+Please see tesla.sty for more details. The rest of this document is the
+example that was presented in the paper.
+
+\inputrulefile{goldirules}
+
+\end{document}
+
diff --git a/macros/latex209/contrib/tesla/goldirules.tex b/macros/latex209/contrib/tesla/goldirules.tex
new file mode 100644
index 0000000000..c489a1131b
--- /dev/null
+++ b/macros/latex209/contrib/tesla/goldirules.tex
@@ -0,0 +1,34 @@
+;
+; goldilocks.tex
+;
+;
+; This is the Goldilocks example that uses the TeSLa package that is the
+; subject of the paper entitled "An Example Special Purpose Input Language
+; to LaTeX" that was (will be) presented to the TUG94 conference in
+; Santa Barabara.
+;
+; Please see goldilocks.tex and tesla.sty for more details.
+; =========================================================
+;
+
+;
+; Define the Knowledge Base variables to be documented
+;
+[tvar | min | the minimum acceptable temperature ]
+[tvar | max | the maximum acceptable temperature ]
+[tvar | T | the temperature ]
+[tvar | too-cold | the porridge is too cold ]
+[tvar | too-hot | the porridge is too hot ]
+[tvar | just-right | the porridge is just right ]
+
+;
+; Now document the rules
+;
+[tgroup | Goldilocks' | 2 ]
+[ttext | These are the rules that model Goldilocks' decision process. ]
+[trule | T < min | | too-cold _ _ ]
+[trule | _ | T > max | too-hot _ _ ]
+[trule | min <= T | T <= max | just-right _ _ ]
+[tgroup | Goldilocks' | e ]
+
+
diff --git a/macros/latex209/contrib/tesla/tab-form.sty b/macros/latex209/contrib/tesla/tab-form.sty
new file mode 100644
index 0000000000..d6845a40a7
--- /dev/null
+++ b/macros/latex209/contrib/tesla/tab-form.sty
@@ -0,0 +1,139 @@
+%
+% tab-form.sty
+%
+% This is part of the TeSLa package that is the subject of the paper
+% entitled "An Example Special Purpose Input Language to LaTeX" that
+% was (will be) presented to the TUG94 conference in Santa Barabara.
+%
+% Please see tesla.sty for more details.
+% ======================================
+%
+
+%
+% Customization Required for [tvar.
+% =================================
+%
+% The tabular form is the first "form" used by TeSLa. That is, the
+% English form (the second "form") is ignored when the tabular form is
+% used. This is implemented with the \xform command, whose arguments
+% are:
+% #1 - The tabular form
+% #2 - The English form; IGNORED in this style
+%
+% See the "The [tvar command" subsection of "The Implementation" section
+% in the paper for more details.
+%
+\gdef\xform#1#2{#1}
+
+%
+% Customization Required for [tgroup.
+% ===================================
+%
+% The \xbegin command defines the TeX formatting to be inserted at the
+% begining of a group of rules. Its arguments are:
+% #1 - TeX command to be used for the \trule command
+% #2 - the number of KB-conditions in each rule
+% #3 - the number of columns in the table (#2 + 1)
+% #4 - the width of each column
+% #5 - the title for the group of rules
+% In this tabular form, we create a table using the LaTeX tabular
+% environment. Note that a fancier tabular style, such as one that
+% handle page breaks gracefully could be used instead.
+%
+% The \sep command defines the TeX formatting to be inserted to add
+% some extra separation between subgroups of a group of rules. In
+% this tabular form, it inserts a horizontal line in the table.
+%
+% The \xend command defines the TeX formatting to be inserted at the
+% end of a group of rules. In this tabular form, it closes the LaTeX
+% tabular environment.
+%
+% See the "The [tgroup command" subsection of "The Implementation" section
+% in the paper for more details.
+%
+\gdef\xbegin#1#2#3#4#5{
+ \gdef\trule{\csname #1\endcsname}
+ \gdef\numcols{#3}
+ \par\begin{tabular}{*{#3}{|p{#4\textwidth}}|}
+ \hline
+ \multicolumn{#3}{|c|}{\rule{0pt}{2.8ex}\large\bf #5 Rules}\\
+ \hline
+ \multicolumn{#2}{|c|}{\rule{0pt}{2.8ex}\large Conditions}
+ & \large Conclu\-sion \\
+ \hline\hline
+ }
+\gdef\xsep{\hline}
+\gdef\xend{\hline\end{tabular}}
+
+%
+% Customization Required for [trule.
+% ==================================
+%
+% The \xpre command defines the TeX formatting to be inserted for an
+% empty KB-condition. In this tabular form, it inserts a column
+% separator (&).
+%
+% The \xif command defines the TeX formatting to be inserted for the
+% first non-empty KB-condition. It takes one argument:
+% #1 - The first non-empty KB-condition
+% In this tabular form, it inserts the TeX codes to be "very relaxed"
+% about formatting (particularly in narrow columns) and the
+% KB-condition.
+%
+% The \xand command defines the TeX formatting to be inserted for the
+% rest of the KB-conditions. It takes one argument:
+% #1 - The KB-condition
+% In this tabular form, it inserts the TeX codes to be "very relaxed"
+% about formatting (particularly in narrow columns) and the
+% KB-condition, if it is non-empty.
+%
+% The \xthen command defines the TeX formatting to be inserted for the
+% KB-consequence. It takes one argument:
+% #1 - The KB-consequence
+% In this tabular form, it inserts the column separator (&), the TeX codes
+% to be "very relaxed" about formatting (particularly in narrow columns)
+% the KB-consequence and the row terminator (\\).
+%
+% See the "The [trule command" subsection of "The Implementation" section
+% in the paper for more details.
+%
+\gdef\xpre{&}
+\gdef\xif#1{\RS\xrel #1}
+\gdef\xand#1{& \RS\ifx#1\empty\else\xrel #1\fi}
+\gdef\xthen#1{& \PBS\RS\xrel #1 \\}
+
+%
+% Customization Required for [ttext and [trem.
+% ============================================
+%
+% The \xtext command defines the TeX formatting to be inserted for
+% arbitrary explanatory text. It takes one argument:
+% #1 - The explantory text
+% In this tabular form, it prints the text---in italics---spanned across
+% all the columns.
+%
+% The \xrem command defines the TeX formatting to be inserted for
+% extra explanatory text into the tabular form. It takes one argument:
+% #1 - The extra explantory text
+% In this tabular form, it prints the text like \ttext, except the text
+% is printed in SmallCaps.
+%
+\gdef\xtext#1{\multicolumn{\numcols}{|p{.9\textwidth}|}{\em #1}\\
+ \hline}
+\gdef\xrem#1{\xtext{\sc #1}}
+
+%
+% Support commands.
+% =================
+%
+% The \RS command is the TeX code to be "very relaxed" about formatting;
+% see The LaTeX Companion, page 132 (for \hspace{0pt})
+%
+% The \PBS command is an abbreviation for the \PreserveBackslash command
+% which allows us to bend the rules about where the LaTeX tabular row
+% terminator (\\) must be placed (ie. in a command which does not contain
+% the whole row); see The LaTeX Companion, page 108
+%
+\gdef\RS{\raggedright\sloppy\hspace{0pt}}
+\gdef\PreserveBackslash#1{\let\temp=\\#1\let\\=\temp}
+\let\PBS=\PreserveBackslash
diff --git a/macros/latex209/contrib/tesla/tesla.sty b/macros/latex209/contrib/tesla/tesla.sty
new file mode 100644
index 0000000000..bbfdfb175e
--- /dev/null
+++ b/macros/latex209/contrib/tesla/tesla.sty
@@ -0,0 +1,361 @@
+%
+% tesla.sty
+%
+% Henry Baragar Gail E. Harris
+% Instantiated Software Inc. and RES Policy Research Inc.
+% henry@instantiated.on.ca ak753@freenet.carleton.ca
+%
+% This is the TeSLa style package that is the subject of the paper
+% entitled "An Example Special Purpose Input Language to LaTeX" that
+% was (will be) presented to the TUG94 conference in Santa Barabara.
+% The paper contains a complete description of this package and should
+% be consulted when documentation in this file is unclear or incomplete.
+%
+%
+% Introduction.
+% =============
+%
+% This style file is used for documenting the rules of a knowledge base.
+% There are two reasons for using a style like the one defined here:
+% 1. To generate, from the same source file, documentation for
+% use by two audiences with vastly different expectations,
+% namely:
+% - the Expert System Programmer, who expects
+% the documentation in a tabular form where rules
+% are grouped into tables of related rules that
+% incorporate the names of the Knowledge Base
+% variables
+% - the Domain Expert (or system user), who expects the
+% documentation in an English form where rules are
+% grouped into subsections of related rules, each of
+% which is a sentence (and paragraph) that
+% incorporates the meanings of the Knowledge Base
+% variables
+% 2. To input (or mark up) the rules in a manner such that the
+% structure of the rules is visually apparent to the Expert
+% System Analyst (the author of the documentation) and such
+% that the likelyhood of errors is reduced (since the Expert
+% System Analyst might not be comfortable with LaTeX or TeX).
+%
+%
+% Background Terminology.
+% =======================
+%
+% A Knowledge Base in an Expert System is a set of rules that defines the
+% logic used to make decisions in a particular Domain (area of expertise).
+% Each rule is composed of a number of conditions and a conclusion. Each
+% condition is a relation that evaluates to true or false. If all
+% conditions evaluate to true, then the conclusion is deemed true. For
+% example:
+% if the temperature of the porridge is greater than 40 degrees celsius
+% and the temperature of the porridge is less than 50 degrees celsius
+% then the porridge is just right.
+% which says that the conclusion---"the porridge is just right"---is deemed
+% to be true if the temperature of the porridge falls within the range
+% indicated by the two conditions.
+%
+%
+%
+% Usage:
+% ======
+%
+% The TeSLa package defines five primary commands for use in a rule file:
+% [tvar
+% to define a mapping between a Knowledge Base variable
+% and the English phrase that describes it
+% [tgroup
+% to group rules
+% [trule
+% to display rules
+% [ttext
+% to input explanatory text
+% [trem
+% to input additional remarks into the tabular form.
+% The syntax for these commands is defined in the paper. In addition,
+% the TeSLa package also predefines many of the relational operators that
+% would be used in rules. See below for the list of such operators.
+%
+% See the file goldilocks.tex for an example of how TeSLa is used.
+%
+%
+% Structure of the TeSLa Package:
+% ===============================
+%
+% The TeSLa package is structured as three files:
+% tesla.sty
+% (this file) which contains the TeX code to parse the
+% input file as well as code common to both the tabular
+% and English forms
+% tab-form.sty
+% which contains the code to customize the documentation
+% for the Expert System Programmer
+% eng-form.sty
+% which contains the code to customize the documentation
+% for the Domain Expert.
+% Please see the tab-form.sty and eng-form.sty files for the details on how
+% the customization was implemented for the tabular and English forms.
+%
+%
+
+%
+% The structure of TeSLa documents.
+% =================================
+%
+% A document which uses the TeSLa package is usually implemented as three
+% main files and one or more rule files. The main files are:
+% main.tex
+% which contains non-rule text and lines of the form:
+% \inputrulefile{rule-file}
+% to input a file of rules name "rule-file"
+% main-tab.tex
+% which simply contains:
+% \documentstyle[tesla,tab-form]{article}
+% \input{main}
+% and is the file LaTeX'ed when the tabular form is desired.
+% main-eng.tex
+% which simply contains:
+% \documentstyle[tesla,eng-form]{article}
+% \input{main}
+% and is the file LaTeX'ed when the English form is desired.
+%
+% The \inputrulefile command takes one argument:
+% #1 - The name of the input file, with or without a .tex extension
+% This command removes the special meaning (to TeX) of many characters that
+% are heavily used in TeSLa documents and inputs the rule file.
+%
+% Note that two characters are given special meaning in TeSLa:
+% [ - is set to be the TeX escape character (like \ in LaTeX)
+% ; - is set to be the TeX comment character (like % in LaTeX)
+%
+\newcommand{\inputrulefile}[1]{%
+ \changecatcodes
+ \input{#1}
+ }
+\newcommand{\changecatcodes}{ %Change mostly to alphabetic
+ \catcode`\+=11 \catcode`\0=11
+ \catcode`\-=11 \catcode`\1=11
+ \catcode`\*=11 \catcode`\2=11
+ \catcode`\(=11 \catcode`\3=11
+ \catcode`\)=11 \catcode`\4=11
+ \catcode`\<=11 \catcode`\5=11
+ \catcode`\!=11 \catcode`\6=11
+ \catcode`\>=11 \catcode`\7=11
+ \catcode`\:=11 \catcode`\8=11
+ \catcode`\==11 \catcode`\9=11
+ \catcode`\_=11 \catcode`\%=11
+ \catcode`\[=0 % Give [ the same meaning as \ in TeX
+ \catcode`\;=14 % Give ; the same meaning as % in TeX
+ }
+
+%
+% [tvar.
+% ======
+%
+% The [tvar command maps a Knowledge Base variable to its English language
+% description. Its arguments are:
+% #1 - the Knowledge Base variable name
+% #2 - the English phrase that descibes the Knowledge Base
+% variable
+% It is implemented by defining a new TeX command for the Knowledge Base
+% variable whose definition is selected by the \xform command, which is
+% as "#1" in tab-form.sty and as "#2" in eng-form.sty.
+%
+% The \xvar command is used to expand a Knowledge Base variable defined by
+% [tvar. It takes one argument:
+% #1 - the Knowledge Base variable name to be expanded
+% If the argument has not been [tvar'ed, then \xvar prints out its argument
+% in italics, to indicate that the argument has not yet been defined.
+%
+% See the "Definitions" subsection of the "The New Input Language" section
+% and "The [tvar command" subsection of "The Implementation" section in the
+% paper for more details.
+%
+\gdef\tvar | #1 | #2 ]{%
+ \expandafter\gdef\csname #1\endcsname{\xform{#1}{#2}}%
+ }
+\gdef\xvar#1{%
+ \expandafter
+ \ifx\csname #1\endcsname\relax{\it #1}%
+ \else \csname #1\endcsname%
+ \fi
+ }
+
+%
+% [tgroup.
+% ========
+%
+% The [tgroup command delineates groups of rules. Its arguments are:
+% #1 - the group name
+% #2 - the action, which can be one of:
+% n - to begin a group of rules with n conditions,
+% where n is an integer in the range 1 to 6
+% - - to delineate subgroups within a group of rules
+% e - to end a group of rules
+%
+% It is implemented as a switch statement based on the action, \xbegin,
+% \xsep and \xend specify what formatting is to be done, and are defined
+% differently in tab-form.sty and eng-form.sty.
+%
+% See the "Groups of Rules" subsection of the "The New Input Language"
+% section and "The [tgroup command" subsection of "The Implementation"
+% section in the paper for more details.
+%
+\gdef\tgroup | #1 | #2 ]{%
+ \if 1#2 \xbegin{xone}{1}{2}{.466}{#1}\fi
+ \if 2#2 \xbegin{xtwo}{2}{3}{.300}{#1}\fi
+ \if 3#2 \xbegin{xthree}{3}{4}{.216}{#1}\fi
+ \if 4#2 \xbegin{xfour}{4}{5}{.166}{#1}\fi
+ \if 5#2 \xbegin{xfive}{5}{6}{.133}{#1}\fi
+ \if 6#2 \xbegin{xsix}{6}{7}{.1095}{#1}\fi
+ \if -#2 \xsep\fi
+ \if e#2 \xend\fi
+ }
+
+%
+% [trule.
+% =======
+%
+% The [trule command documents a Knowledge Base rule. Since the number of
+% conditions expected by [trule command is governed by which group the rule
+% is in, [trule must be defined in the \xbegin command called by [tgroup.
+% That is, the definition of \xbegin in tab-form.sty and eng-form.sty must
+% include a definition of [trule. However, [trule must be defined as one
+% of \xone through \xsix defined here.
+%
+% \xone through \xsix all have the same structure. If the first condition
+% of the rule is empty (denoted by a "_"), then do something defined by
+% \xpre (which is defined in tab-form.sty and eng-form.sty) and then pretend
+% this is a rule with one less condition. If the first condition is not
+% empty, then do something defined by \xif on the first condition, by
+% \xand on each of the following conditions, and by \xthen on the conclusion.
+% \xif, \xand and \xthen are defined differently by tab-form.sty and
+% eng-form.sty.
+%
+% The \if, \xand and \xthen commands in tab-form.sty and eng-form.sty have
+% the responsibility of expanding each relation that makes up a condition or
+% conclusion. This is accomplished with the \xrel command. Since a
+% condition has one of the following three forms:
+% 1. lhs rel rhs
+% 2. rel rhs _
+% 3. rhs _ _
+% \rel must check each part for a "_" to determine if the part should be
+% expanded by \xvar. Note that the "rel" operators must be [tvar'ed (or
+% the equivalent) so that they can be expanded by \xvar. See below for
+% the list of predefined relational operators.
+%
+% See the "Groups of Rules" subsection of the "The New Input Language"
+% section and "The [trule command" subsection of "The Implementation"
+% section in the paper for more details.
+%
+\gdef\xone | #1| #2]{%
+ \xif{#1} \xthen{#2}
+ }
+\gdef\xtwo | #1| #2| #3]{%
+ \if_#1 \xpre \xone | #2| #3]%
+ \else\xif{#1} \xand{#2}\xthen{#3}
+ \fi
+ }
+\gdef\xthree | #1| #2| #3| #4]{%
+ \if_#1 \xpre \xtwo | #2| #3| #4]%
+ \else\xif{#1} \xand{#2}\xand{#3}\xthen{#4}
+ \fi
+ }
+\gdef\xfour | #1| #2| #3| #4| #5]{%
+ \if_#1 \xpre \xthree | #2| #3| #4| #5]%
+ \else\xif{#1} \xand{#2}\xand{#3}\xand{#4}\xthen{#5}
+ \fi
+ }
+\gdef\xfive | #1| #2| #3| #4| #5| #6]{%
+ \if_#1 \xpre \xfour | #2| #3| #4| #5| #6]%
+ \else\xif{#1} \xand{#2}\xand{#3}\xand{#4}\xand{#5}\xthen{#6}
+ \fi
+ }
+\gdef\xsix | #1| #2| #3| #4| #5| #6| #7]{%
+ \if_#1 \xpre \xfive | #2| #3| #4| #5| #6| #7]%
+ \else\xif{#1} \xand{#2}\xand{#3}\xand{#4}\xand{#5}%
+ \xand{#6}\xthen{#7}
+ \fi
+ }
+\gdef\xrel #1 #2 #3 {%
+ \if_#3\if_#2\xvar{#1}\else\xvar{#1} \xvar{#2}\fi
+ \else\xvar{#1} \xvar{#2} \xvar{#3}%
+ \fi
+ }
+
+%
+% The [ttext and [trem commands.
+% ==============================
+%
+% The [ttext and [trem commands insert arbitrary text into the
+% documentation. [ttext is intended for text that is to be inserted in
+% both forms, while [trem is for text to be inserted into the tabular
+% form, but not the English form. There has yet to be a need to insert
+% text into the English form, but not the tabular form.
+%
+% Both [ttext and [trem take one argument:
+% #1 - The text to be inserted
+% [ttext and [trem are implemented by \xtext and \xrem, respectively, in
+% tab-form.sty and eng-form.sty.
+%
+% See the "Other Commands" subsection of the "The New Input Language" section
+% and "The [ttext command" and "The [trem command" subsections of "The
+% Implementation" section in the paper for more details.
+%
+\gdef\ttext | #1 ]{\xtext{#1}}
+\gdef\trem | #1 ]{\xrem{#1}}
+
+%
+% Predefined relational operators.
+% ================================
+%
+% The relational operators that follow are predefined for use in TeSLa.
+%
+% Note that we are essentially [tvar'ing these operators so that they can
+% be treated like TeSLa definitions. Also note that the first thing we
+% do is \changecatcodes so that the special meaning (to TeX) of any
+% character that might be used in the relational operator is removed.
+%
+{
+\changecatcodes
+\gdef\<{\xform{$<$}{is less than}}
+\gdef\>{\xform{$>$}{is greater than}}
+\gdef\!={\xform{$\neq$}{is not equal to}}
+\gdef\=={\xform{$=$}{is equal to}}
+\gdef\<={\xform{$\leq$}{is less than or equal to}}
+\gdef\>={\xform{$\geq$}{is greater than or equal to}}
+\gdef\:={\xform{$\leftarrow$}{is assigned}}
+\gdef\+{\xform{$+$}{added to}}
+\gdef\+={\xform{$+$$=$}{is incremented by}}
+\gdef\decrement{\xform{$-$$=$}{is decremented by}}
+\gdef\minus{\xform{$-$}{less}}
+\gdef\*{\xform{$*$}{multiplied by}}
+\gdef\memberOf{\xform{$\in$}{is one of}}
+\gdef\notMemberOf{\xform{$\not\in$}{is not one of}}
+\gdef\isnot{\xform{$\neg$}{not}}
+}
+
+%
+% Default formatting.
+% ===================
+%
+% Use block formatting as the default for paragraphs.
+%
+\setlength{\parskip}{\baselineskip}
+\setlength{\parindent}{0pt}
+
+%
+% Etc.
+% ===
+%
+% We need an "empty" command to do certain comparisons.
+%
+\gdef\empty{}
+
+%
+% Post Script.
+% ============
+%
+% The TeSLa logo is defined here, just in case you need it;-)
+%
+\def\TeSLa{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emS\kern-.10em\La}
+\def\La{{\reset@font\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em}}
diff --git a/macros/latex209/contrib/tex-bnf/bnf.README b/macros/latex209/contrib/tex-bnf/bnf.README
new file mode 100644
index 0000000000..bd804bf4cc
--- /dev/null
+++ b/macros/latex209/contrib/tex-bnf/bnf.README
@@ -0,0 +1,23 @@
+The bnf.sty file provides a mechanism for pretty printing context free
+grammars. To use it, include it in one of the TEXINPUTS directories ---
+if you can't get it installed in your standard TeX macro directory, your
+current working directory should do. To make the macros available,
+include it (bnf) as an optional parameter of the \documentstyle command.
+
+The bnf.tex file is the documentation. You should be able to LaTeX this
+without problems.
+
+Known bugs are reported in bnf.bugs.
+
+Please report any new bugs to hugh@cs.kun.nl, or
+ Hugh Osborne,
+ Department of Informatics,
+ University of Nijmegen,
+ 6525GT Nijmegen,
+ The Netherlands.
+
+If you have not received this file directly from me, please let me know.
+I like to have an idea of how widespread its use is.
+Thanks,
+ Hugh.
+
diff --git a/macros/latex209/contrib/tex-bnf/bnf.bugs b/macros/latex209/contrib/tex-bnf/bnf.bugs
new file mode 100644
index 0000000000..cde30e32a7
--- /dev/null
+++ b/macros/latex209/contrib/tex-bnf/bnf.bugs
@@ -0,0 +1,187 @@
+1). The BNF macros cannot deal with environments that are started by one of
+the optional parameters and ended by another. For example the following
+example (due to Florence Maraninchi of LGI-IMAG Campus, BP 53X, 38041
+Grenoble cedex, FRANCE) does not work.
+
+This is a structural problem, that I do not have time to consider at the
+moment. If anyone else solves it, will they please let me know?
+
+________________________________________________________________________________
+\newenvironment{tabu}{\begin{tabular}{ll}[t]}{\end{tabular}}
+
+\begin{grammar}
+ [(colon){\begin{tabu} : & }]
+ [(period){\end{tabu}}]
+ [(semicolon){\\ $\mid$ & }]
+ [(comma){ }]
+ [(quote){\begin{bf}}{\end{bf}}]
+
+ toto : expression.
+
+ expression: constante; idf;expression operateur expression.
+
+ operateur: "+" ; "-" ; "*" ; "/".
+
+ constante: "0" ; "1" ; "2" ; "3" ; "4".
+
+\end{grammar}
+
+________________________________________________________________________________
+
+2). The above example also made me aware of another problem that has
+not yet been reported. If you try and include a command with an optional
+parameter in one of the optional parameters of the grammar environment,
+LaTeX will get horribly confused. For example, a grammar environment
+such as
+
+--------------------------------------------------------------------------------
+
+\begin{grammar}
+ [(colon){\rule[.5\lineskip]{10pt}{\lineskip}}]
+ wrong : won't work.
+\end{grammar}
+
+won't work. This is due to TeX' macro expansion mechanism, and an
+elegant solution would require a fairly major overhaul, which I don't
+have time for at the moment.
+
+A hack is to change the syntax of the optional commands of the grammar
+environment so that the optional commands are delimited by some other
+symbol than "[" and "]". If, for example, we were to choose "!" as our
+(left _and_ right) delimiter, then lines 63, 65, 66 and 69 of the
+original BNF macros would have to be changed. They are currently
+...............................................................................
+
+\def\@dogrammarchars{
+ \@ifnextchar [{\@getchardef}{\@defaultchardefs}}
+
+\def\@getchardef[(#1)#2]{
+ \@dogrammarchar{#1}[#2]
+ \@dogrammarchars}
+
+\def\@dogrammarchar#1[#2]{
+ \csname if@#1\endcsname\else
+ \csname @def#1\endcsname{#2}\csname @#1true\endcsname\fi}
+...............................................................................
+
+and would have to become
+................................................................................
+
+\def\@dogrammarchars{
+ \@ifnextchar !{\@getchardef}{\@defaultchardefs}}
+% ^
+
+\def\@getchardef!(#1)#2!{
+% ^ ^
+ \@dogrammarchar{#1}!#2!
+% ^ ^
+ \@dogrammarchars}
+
+\def\@dogrammarchar#1!#2!{
+% ^ ^
+ \csname if@#1\endcsname\else
+ \csname @def#1\endcsname{#2}\csname @#1true\endcsname\fi}
+................................................................................
+
+(sorry to belabour the obvious, but to be on the safe side, the "^" are
+only to indicate where the changes have taken place)
+
+The optional parameters may not now contain any "!" symbols, or else
+we're back where we started from.
+
+3). Thanks to David Wright (wright@tasis.eecs.utas.edu.au) and Arto
+Viitanen (av@uta.fi) for the next one.
+
+I included a couple of spaces in the BNF macros, where I shouldn't have,
+which leads to spurious spaces being produced in the output. (Dave
+Wright's example was "->" appearing as "- >", and Arto Viitanen's was
+"<terminal>" appearing as "<terminal >". The solution is to remove the
+extra spaces, on lines 22 and 24. These were
+................................................................................
+ \catcode`\<\active
+ \def<{{\@deactifygrammarchars \@first#1}}
+% ^
+ \catcode`\>\active
+ \def>{{\@deactifygrammarchars \@second#1}}}
+% ^
+\endgroup
+................................................................................
+
+The "^" symbols indicate the spaces that should be removed.
+
+4) The following is due to Craig Brown (cmb@research.canon.oz.au) at
+Canon Information Systems Research Australia. This bug was the result
+of my ignorance of the subtleties of TeX's input mechanism.
+
+Just another comment regarding your Context Free Grammar.
+
+This works:
+
+\newenvironment{tligrammar}%
+{\begin{grammar}%
+[(nonterminal){\begin{bf}}{\end{bf}}]%
+[(colon){ ::=}]%
+[(comma){~}]%
+[(semicolon){ $|$}]}%
+{\end{grammar}}
+
+\begin{tligrammar}
+<A>: <B>, <C>, <D>.
+\end{tligrammar}
+
+and this does not:
+
+\begin{grammar}
+[(nonterminal){\begin{bf}}{\end{bf}}]
+[(colon){ ::=}]
+[(comma){~}]
+[(semicolon){ $|$}]
+<A>: <B>, <C>, <D>.
+\end{grammar}
+
+Conclusion: Latex is black magic!
+
+Regards, Craig Brown.
+
+Craig Brown | cmb@research.canon.oz.au
+Canon Information Systems Research Australia | Phone +61-2-805-2900
+PO Box 313 NORTH RYDE NSW 2113 | Fax +61-2-805-2929
+
+5) The following major bug (what an embarassment) was found by Mark van
+den Brand at the University of Nijmegen. I can't understand that nobody,
+including myself, found it earlier.
+
+If the left hand side is repeated in alternative production rules
+seperated by semicolons, the result is not what one would want.
+
+For example;
+
+\begin{grammar}
+rule:
+ first alternative;
+rule:
+ second alternative.
+\end{grammar}
+
+is printed more or less as
+
+rule:
+ first alternative;
+ rule:
+ second alternative.
+
+Although this sort of construction may not be used very often when
+writing context free grammars, it is more common in attribute grammars
+(different alternatives have different attributes) and unavoidable in
+affix grammars (some affixes are an inherent part of the left hand
+side). I'm afraid an ugly hack might be necessary to repair this.
+
+6) From Andreas Maassen (maassen@zeus.informatik.rwth-aachen.de)
+The default value for nonterminal didn't work. The problem was that an
+initial "<" was read before the default values were initialised, so that
+it was read as a character, and not as a command. This has now been
+repaired.
+
+I had also forgotten to put "$"'s round the default values, so rather
+than producing "<" and ">", the default was an upside down "!" and an
+upside down "?". This has also been repaired.
diff --git a/macros/latex209/contrib/tex-bnf/bnf.pdf b/macros/latex209/contrib/tex-bnf/bnf.pdf
new file mode 100644
index 0000000000..0bb907ec82
--- /dev/null
+++ b/macros/latex209/contrib/tex-bnf/bnf.pdf
Binary files differ
diff --git a/macros/latex209/contrib/tex-bnf/bnf.sty b/macros/latex209/contrib/tex-bnf/bnf.sty
new file mode 100644
index 0000000000..c735d8870d
--- /dev/null
+++ b/macros/latex209/contrib/tex-bnf/bnf.sty
@@ -0,0 +1,123 @@
+%This _sty_ file was developed by Hugh Osborne at the University of
+%Nijmegen, The Netherlands. It may be freely distributed under
+%condition that this notice is always included in any copy distributed.
+%No charge may be made for (copies of) this file, nor may any other
+%remuneration be requested.
+
+\typeout{Style-Option: `bnf' v1.1a <92/01/30> (Hugh Osborne/br)}
+
+\def\@actifygrammarchars{%
+ \catcode`\"\active%
+ \catcode`\:\active%
+ \catcode`\,\active%
+ \catcode`\;\active%
+ \catcode`\.\active%
+ \catcode`\<\active%
+ \catcode`\>\active}
+
+\def\@deactifygrammarchars{%
+ \@makeother\"%
+ \@makeother\:%
+ \@makeother\,%
+ \@makeother\;%
+ \@makeother\.%
+ \@makeother\<%
+ \@makeother\>}
+
+\let\escapegrammar=\@deactifygrammarchars
+
+\begingroup
+ \@deactifygrammarchars
+ \global\let\quotesymbol="
+ \global\let\lessthan=<
+ \global\let\greaterthan=>
+\endgroup
+
+\newif\if@outsidestring \@outsidestringtrue
+
+\def\@first#1#2{#1}
+\def\@second#1#2{#2}
+
+\begingroup
+
+\@actifygrammarchars
+
+ \gdef\@defcolon#1{
+ \catcode`\:\active
+ \def:{\def\newline{\hfill\break\hspace*{2em}}{\@deactifygrammarchars #1}}
+ \@makeother\:}
+
+ \gdef\@defcomma#1{
+ \catcode`\,\active
+ \def,{\def\newline{\hfill\break\hspace*{4em}}{\@deactifygrammarchars #1}}
+ \@makeother\,}
+
+ \gdef\@defsemicolon#1{
+ \catcode`\;\active
+ \def;{\def\newline{\hfill\break\hspace*{2em}}{\@deactifygrammarchars #1}}
+ \@makeother\;}
+
+ \gdef\@defperiod#1{
+ \catcode`\.\active
+ \def.{\def\newline{\vskip10pt plus10pt minus5pt}{\@deactifygrammarchars #1}}
+ \@makeother\.}
+
+ \gdef\@defnonterminal#1{
+ \catcode`\<\active
+ \catcode`\>\active
+ \def<{%
+ \begingroup%
+ \@first#1%
+ \@deactifygrammarchars%
+ \catcode`\>\active}
+ \def>{%
+ \@second#1%
+ \endgroup}
+ \@makeother\<
+ \@makeother\>}
+
+ \gdef\@defquote#1{
+ \catcode`\"\active
+ \def"{%
+ \if@outsidestring%
+ \@outsidestringfalse%
+ \begingroup%
+ \@deactifygrammarchars%
+ \catcode`\"\active%
+ \@first#1%
+ \else%
+ \@second#1%
+ \endgroup%
+ \@outsidestringtrue%
+ \fi}
+ \@makeother\"}
+
+\endgroup
+
+\let\@defterminal=\@defquote
+
+\newenvironment{grammar}%
+ {\begin{quote}%
+ \@defaultchardefs%
+ \@dogrammarchars}%
+ {\@deactifygrammarchars%
+ \end{quote}}
+
+\def\@dogrammarchars{
+ \@actifygrammarchars
+ \@ifnextchar [{\@deactifygrammarchars\@getchardef}{}}
+
+\def\@getchardef[(#1)#2]{
+ \@dogrammarchar{#1}[#2]
+ \@dogrammarchars}
+
+\def\@dogrammarchar#1[#2]{
+ \csname @def#1\endcsname{#2}}
+
+\def\@defaultchardefs{
+ \@defquote{{``}{''}}%
+ \@defnonterminal{{$<$}{$>$}}%
+ \@defcolon{:\\}%
+ \@defsemicolon{;\\}%
+ \@defperiod{.\\}%
+ \@defcomma{, }}%
diff --git a/macros/latex209/contrib/tex-bnf/bnf.tex b/macros/latex209/contrib/tex-bnf/bnf.tex
new file mode 100644
index 0000000000..9cb02cf777
--- /dev/null
+++ b/macros/latex209/contrib/tex-bnf/bnf.tex
@@ -0,0 +1,238 @@
+\documentstyle[bnf]{article}
+\title{Pretty Printing Context Free Grammars}
+\author{Hugh Osborne\\
+ Department of Informatics,\\
+ Faculty of Mathematics and Informatics,\\
+ University of Nijmegen,\\
+ Toernooiveld,\\
+ 6525 ED Nijmegen,\\
+ The Netherlands.\\
+ tel. +31.(0)80.652599\\
+ email {\tt hugh@cs.kun.nl}}
+
+\begin{document}
+\maketitle
+\section{The grammar Environment}
+The {\tt grammar}
+environment will take a context free grammar, written using the notation
+used in~LP81\footnote{Harry R.\ Lewis and Christos H.\
+Papadimitriou, {\sl Elements of the Theory of Computation,}
+Prentice-Hall, 1981} and pretty print the grammar. The {\tt grammar}
+environment has up to five optional parameters, which specify the notation to
+be used to print the grammar. Note that whichever notation is chosen for
+the output, the {\tt grammar} environment only recognises the LP81~notation in the input.
+
+A short summary of the notation used in~LP81 is presented here for
+those readers not familiar with it. It is assumed that the reader is
+familiar with context free grammars.
+\begin{itemize}
+ \item There is a ``:'' between the left hand side of a rule and its right hand side
+ \item Two alternatives within a rule are separated by a ``;''
+ \item A ``,'' is placed between members of the same alternative
+ \item Each rule ends with a ``.''
+\end{itemize}
+
+The optional parameters of the {\tt grammar} environment are all of the
+form \verb![(!{\sc symbol name}\verb!)!{\sc replacement}\verb!]!, where
+{\sc symbol name} is one of ``{\tt colon}'', ``{\tt semicolon}'', ``{\tt
+period}'', ``{\tt comma}'' and ``{\tt quote}''. {\sc replacement} is then the text\footnote{In the case of ``{\tt quote}'', the texts --- the first text
+is the replacement for an opening quote, the second for a closing quote.} that
+will replace the symbol specified by {\sc symbol name}. Note that a new
+line (\verb!\\!) can be included in the replacement text, in which case
+the output will automatically start on a new line after each occurrence
+of the symbol specified. The default values are
+\begin{itemize}
+ \item \verb![(!colon\verb!){:\\}]!
+ \item \verb![(!semicolon\verb!){;\\}]!
+ \item \verb![(!period\verb!){.\\}]!
+ \item \verb![(!comma\verb!){,}]!
+ \item \verb![(!quote\verb!){``}{''}]!
+\end{itemize}
+
+Strings in the grammar environment are indicated by double-quote symbols
+(\verb!"!). The colon, semicolon, period and comma have no special
+significance within a string, but are the same simple characters they
+are outside the grammar environment. A double-quote symbol can be
+produced by using the \verb!\quotesymbol! command.
+
+All of these features are demonstrated below. The text:
+\begin{verbatim}
+\begin{grammar}
+ [(colon){::$\Rightarrow$}]
+ [(semicolon){ $|$}]
+ [(period){ \rule{1ex}{1ex}\\}]
+ [(quote){`}{'}]
+grammar environment:\\
+ "\verb!\begin{grammar}!",\\
+ optional parameters,\\
+ context free grammar,\\
+ "\verb!\end{grammar}!".
+optional parameters:\\
+ "[",optional parameter,"]",\\
+ optional parameters;.
+optional parameter:\\
+ "(", specification, ")",\\
+ \LaTeX\ strings.
+\LaTeX\ strings:\\
+ \LaTeX\ string;\\
+ "\{",\LaTeX\ string,"\}",\\
+ \LaTeX\ strings.
+specification:\\
+ "{\tt colon}";\\
+ "{\tt semicolon}";\\
+ "{\tt period}";\\
+ "{\tt comma}";\\
+ "{\tt quote}".
+context free grammar:\\
+ rule,\\
+ context free grammar;.
+rule:\\
+ nonterminal,":",\\
+ alternatives,".".
+alternatives:\\
+ alternative,";",\\
+ alternatives;.
+alternative:
+ members;.
+members:\\
+ member,",",members;\\
+ member.
+member:\LaTeX\ string,string.
+string:"{\tt \quotesymbol}",
+ \LaTeX\ string ,
+ "{\tt \quotesymbol}".
+\end{grammar}
+\end{verbatim}
+produces the following output:
+\begin{grammar}
+ [(colon){::$\Rightarrow$}]
+ [(semicolon){ $|$}]
+ [(period){ \rule{1ex}{1ex}\\}]
+ [(quote){`}{'}]
+grammar environment:\\
+ "\verb!\begin{grammar}!",\\
+ optional parameters,\\
+ context free grammar,\\
+ "\verb!\end{grammar}!".
+optional parameters:\\
+ "[",optional parameter,"]",\\
+ optional parameters;.
+optional parameter:\\
+ "(", specification, ")",\\
+ \LaTeX\ strings.
+\LaTeX\ strings:\\
+ \LaTeX\ string;\\
+ "\{",\LaTeX\ string,"\}",\\
+ \LaTeX\ strings.
+specification:\\
+ "{\tt colon}";\\
+ "{\tt semicolon}";\\
+ "{\tt period}";\\
+ "{\tt comma}";\\
+ "{\tt quote}".
+context free grammar:\\
+ rule,\\
+ context free grammar;.
+rule:\\
+ nonterminal,":",\\
+ alternatives,".".
+alternatives:\\
+ alternative,";",\\
+ alternatives;.
+alternative:
+ members;.
+members:\\
+ member,",",members;\\
+ member.
+member:\LaTeX\ string,string.
+string:"{\tt \quotesymbol}",
+ \LaTeX\ string ,
+ "{\tt \quotesymbol}".
+\end{grammar}
+\section{Update}
+The {\tt grammar} environment has been extended to allow the use of the
+`\verb!<!' and `\verb!>!' symbols to delimit nonterminals in the grammar
+(in a manner reminiscent of Backus-Naur form). These symbols can then be
+redefined in the same way as the `\verb!"!' symbol by means of an
+optional paramter at the start of the environment. The {\sc symbol name}
+part is then ``\verb!nonterminal!''. The default value is to use the
+symbols themselves. If the symbols have been redefined, the `\verb!<!'
+and `\verb!>!' symbols can be produced using \verb!\lessthan! and
+\verb!\greaterthan! respectively.
+\begin{verbatim}
+\begin{grammar}
+ [(colon){$\rightarrow$}]
+ [(semicolon)$|$]
+ [(comma){}]
+ [(period){\\}]
+ [(quote){\begin{bf}}{\end{bf}}]
+ [(nonterminal){$\langle$}{$\rangle$}]
+<expression>:<number>;\\
+ <number>, <relational operator>, <number>.
+<number>:<digit>;<digit>,<number>.
+<digit>:"0";"1";"2";"3";"4";"5";"6";"7";"8";"9".
+<relational operator>:"$=$";"$\lessthan\greaterthan$";
+ "$\lessthan$";"$\greaterthan$";
+ "$\lessthan=$";"$\greaterthan=$";"in".
+\end{grammar}
+\end{verbatim}
+gives
+\begin{grammar}
+ [(colon){$\rightarrow$}]
+ [(semicolon)$|$]
+ [(comma){}]
+ [(period){\\}]
+ [(quote){\begin{bf}}{\end{bf}}]
+ [(nonterminal){$\langle$}{$\rangle$}]
+<expression>:<number>;\\
+ <number>, <relational operator>, <number>.
+<number>:<digit>;<digit>,<number>.
+<digit>:"0";"1";"2";"3";"4";"5";"6";"7";"8";"9".
+<relational operator>:"$=$";"$\lessthan\greaterthan$";
+ "$\lessthan$";"$\greaterthan$";
+ "$\lessthan=$";"$\greaterthan=$";"in".
+\end{grammar}
+There is one feature of the {\tt grammar} environment which could be
+considered a bug. The normal line breaking routine is still in force
+inside a {\tt grammar} environment but a new line produced by \LaTeX\
+will {\em not} use the {\tt grammar} environment's layout. {\em Only
+newlines given explicitly with a \verb!\\! or \verb!\newline! command,
+or implicitly by means of one the redefined symbols (`\verb!:!',
+`\verb!;!' etc.) will use the {\tt grammar} layout!}\/ It is therefore
+recommended that you avoid this situation by providing the layout
+explicitly.
+\section{Second Update}
+Some bugs have been reported. Most of these have been corrected. See the
+{\tt bnf.bugs} file accompanying this package. Two additions have been
+made to the grammar environment.
+
+Firstly the (font type) command
+\verb!\escapegrammar! has been provided. This declares a non-grammar
+``font'' to be in effect, so that the ``\verb!:;.,"<>!'' characters all
+have their normal meaning. Be careful to enclose uses of
+\verb!\escapegrammar! in braces, as you would an ordinary font command,
+otherwise the rest of your grammar will not be pretty printed.
+
+The second addition is to the optional parameter declarations. For the
+sake of consisitency with the {\tt [(nonterminal)\ldots]} declaration, a
+{\tt [(terminal)\ldots]} declaration has been provided. In order to maintain
+compatability, the old {\tt [(quote)\ldots]} declaration remains
+possible.
+
+A short example using both of these innovations is
+\begin{verbatim}
+\begin{grammar}[(terminal){(}{)}]
+{\escapegrammar This grammar only uses the `{\tt :}', `{\tt "}'
+and `{\tt .}' ``grammar symbols''.}
+
+S:"a".
+\end{grammar}
+\end{verbatim}
+produces
+\begin{grammar}[(terminal){(}{)}]
+{\escapegrammar This grammar only uses the `{\tt :}', `{\tt "}'
+and `{\tt .}' ``grammar symbols''.}
+
+S:"a".
+\end{grammar}
+\end{document}
diff --git a/macros/latex209/contrib/textfit/textfit.ctn b/macros/latex209/contrib/textfit/textfit.ctn
new file mode 100644
index 0000000000..f0fada900d
--- /dev/null
+++ b/macros/latex209/contrib/textfit/textfit.ctn
@@ -0,0 +1,10 @@
+Name=textfit
+Author=Sebastian Rahtz <spqr@ftp.tex.ac.uk> and Philip Taylor
+Date=1994/01/15
+Version=3
+Supported=yes
+Checked=1994/01/15
+Summary= LaTeX package for scaling up text to a desired size.
+
+
+
diff --git a/macros/latex209/contrib/textfit/textfit.dtx b/macros/latex209/contrib/textfit/textfit.dtx
new file mode 100644
index 0000000000..1e59c3247b
--- /dev/null
+++ b/macros/latex209/contrib/textfit/textfit.dtx
@@ -0,0 +1,299 @@
+% \iffalse meta-comment
+% File `textfit.dtx'.
+%
+% Copyright (C) 1994 by Sebastian Rahtz and Phil Taylor
+% All rights reserved.
+%
+% @LaTeX-style-file{
+% author = "Sebastian Rahtz and Phil Taylor",
+% version = "3",
+% date = "10th January 1994",
+% filename = "textfit.sty",
+% email = "spqr@ftp.tex.ac.uk (Internet)",
+% keywords = "LaTeX, scaling",
+% supported = "yes",
+% docstring = "
+%
+% textfit.sty
+%
+% LaTeX style option for scaling up text to a desired size. Requires LaTeX2e
+% "}
+% You are not allowed to change this file. You may however copy
+% this file to a file with a different name and then change the copy.
+%
+% \fi
+\def\fileversion{3}
+\def\filedate{1994/01/10}
+\def\docdate{1994/01/10}
+% \CheckSum{310}
+%
+% \iffalse This is a META comment
+%
+% Copying of this file is authorized only if either
+% (1) you make absolutely no changes to your copy, including name, or
+% (2) if you do make changes, you name it something other than
+% textfit.dtx.
+% Please send bug reports to:
+%
+% S Rahtz
+% 12 Cygnet Street
+% York Y02 1AG
+% UK
+% email: spqr@ftp.tex.ac.uk
+% \fi
+%
+%
+% \title{The \texttt{textfit.dtx} file\thanks
+% {This file has version number \fileversion, dated \filedate.
+% The documentation was last revised on \docdate}\\
+% }
+% \author{Sebastian Rahtz and Phil Taylor}
+%
+% \MakeShortVerb{\|}
+% \def\dst{{\csname mediumseries\endcsname\sc docstrip}}
+% \setcounter{StandardModuleDepth}{1}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% The user needs to be able to specify the width or height for text, and
+% use the largest size necessary to fill that width or height. You
+% can choose whether to have the size increased by simple points, or
+% by using magsteps.
+% Usage:
+% \verb|\scaletowidth{3in}{This is the way of the world}|
+% \verb|\scaletoheight{7mm}{This is the way of the world}|
+% Details are controlled by two options: `magstep' will
+% make the system use magsteps, not points, and `noisy'
+% will produce useful messages.
+% \changes{1}{5/2/93}{Worked out point size by trial and error, increasing
+% it in increments of 1pt until result reached desired size}
+% \changes{2}{9/2/93}{Final point size calculated by comparison of size at
+% 10pt. faster, and takes less TeX memory for intermediate fonts}
+% \changes{3}{10/1/94}{Revised to make it a \LaTeXe\ package}
+%
+%Examples; note that the base font is taken from the current state when
+%you enter the macros. so if you start off with a large font (eg
+%cmr17), it will give a different result from that obtained by scaling
+%up cmr5.
+%
+%\scaletowidth{1in}{This is the way of the world}
+%
+%{\Huge \scaletowidth{1in}{This is the way of the world}}
+%
+%{\Huge \scaletowidth{5in}{This is the way of the world}}
+%
+%\scaletowidth{5in}{This is the way of the world}
+%
+%{\Huge \scaletoheight{1.3in}{Cowabunga!} }
+%
+% \scaletowidth{5in}{Gloucestershire Warwickshire Railway}
+%
+%\ScalebyMagstepstrue
+%
+%\scaletowidth{1in}{This is the way of the world}
+%
+%{\Huge \scaletowidth{1in}{This is the way of the world}}
+%
+%{\Huge \scaletowidth{5in}{This is the way of the world}}
+%
+%\scaletowidth{5in}{This is the way of the world}
+%
+%{\Huge \scaletoheight{1.3in}{Cowabunga!} }
+% \StopEventually{}
+% \begin{macrocode}
+%<*textfit>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{textfit}[\filedate]
+\newif\ifScalebyMagsteps
+\newif\ifNoisyFitting
+\NoisyFittingfalse
+\ScalebyMagstepsfalse
+\DeclareOption{noisy}{\NoisyFittingtrue}
+\DeclareOption{magstep}{\ScalebyMagstepstrue}
+\ProcessOptions
+\newcount \mags@f@r
+\newdimen \desired@size
+\newcount \r@mainder
+\newcount \m@gstepcount
+\newcount \m@gsteplimit
+\newcount \m@gstepvalue
+\newdimen \m@gstepdimen
+% \end{macrocode}
+% Code for working out the right magstep (this is Phil's bit).
+% \begin{macrocode}
+\def \magsteps {\afterassignment \m@gsteps \m@gsteplimit = }
+\def \m@gsteps
+ {\let \@r = \or
+ \def \or {\noexpand \or}%
+ \m@gstepdimen = 0.166667 \maxdimen
+ \m@gstepvalue = 1000
+ \m@gstepcount = 0
+ \def \magstep {}%
+ \loop
+ \ifnum \m@gstepcount < \m@gsteplimit
+ \advance \m@gstepcount by 1
+ \ifnum \m@gstepvalue > \m@gstepdimen
+ \advance \m@gstepcount by -1
+ \message {Sorry --- integer overflow would occur if
+ I went any further; stopped at
+ \the \m@gstepcount.}
+ \m@gsteplimit = \m@gstepcount
+ \else
+ \multiply \m@gstepvalue by 12
+ \multiply \r@mainder by 12
+ \divide \r@mainder by 10
+ \advance \m@gstepvalue by \r@mainder
+ \r@mainder = \m@gstepvalue
+ \divide \m@gstepvalue by 10
+ \multiply \m@gstepvalue by 10
+ \advance \r@mainder by -\m@gstepvalue
+ \divide \m@gstepvalue by 10
+ \ifnum \r@mainder < 5
+ \edef \magstep {\magstep \or \the \m@gstepvalue}%
+ \else
+ \advance \m@gstepvalue by 1
+ \edef \magstep {\magstep \or \the \m@gstepvalue}%
+ \advance \m@gstepvalue by -1
+ \fi
+ \fi
+ \repeat
+ \edef \magstep ##1%
+ {\noexpand \ifcase ##1
+ 1000\magstep
+ \noexpand \else 0%
+ \noexpand \message
+ {Sorry --- \string \magstep \space ##1
+ is not in range 0 .. \the \m@gsteplimit}%
+ \noexpand \fi
+ \noexpand \relax
+ }%
+ \let \or = \@r
+ }
+\magsteps 63
+\def \Fontname #1{\expandafter \strip@size \fontname #1 }
+\def \strip@size #1 #2#{#1\void@@@}
+\def \void@@@ #1{}
+\gdef\n@d#1.#2:{#1}
+\def \@scaletofit[#1]#2#3{%
+ \def\Hb@x{h}\def\H@rV{#1}%
+ \ifx\H@rV\Hb@x\def\C@mpare{\wd}\else\def\C@mpare{\ht}\fi
+ \desired@size #2
+ \def\curr@fontname{\Fontname \font {} }%
+ \ifScalebyMagsteps
+ \mags@f@r \z@
+ \setbox 0 = \hbox{#3}%
+ \def\@increment{1}%
+ \def\@test{<}%
+ \ifdim \C@mpare 0 > \desired@size
+ \message{When scaling by Magsteps, you cannot go downwards!}%
+ \fi
+ \loop
+ \font \temp@font = \curr@fontname scaled \magstep \mags@f@r
+ \setbox 0 = \hbox{{\temp@font #3}}%
+ \ifNoisyFitting
+ \message {Trying \noexpand \magstep \the \mags@f@r...}%
+ \fi
+ \ifdim \C@mpare 0 \@test \desired@size
+ \advance \mags@f@r by \@increment
+ \repeat
+ \ifnum \mags@f@r=\z@
+ \mags@f@r1
+ \fi
+ \advance \mags@f@r by -\@increment
+ \else
+ \font\temp@font=\curr@fontname at1pt
+ \setbox 0 = \hbox{{\temp@font #3}}%
+ \@tempdima\C@mpare0
+ \multiply\@tempdima by 500 %\@m
+ \def\foo@@{\expandafter\n@d\the\@tempdima:}%
+ \@tempdimb\desired@size
+ \divide\@tempdimb by \foo@@
+ \multiply\@tempdimb by 500 %\@m
+ \fi
+ \ifNoisyFitting
+ \ifScalebyMagsteps
+ \message {The calculated font is \curr@fontname
+ scaled \noexpand \magstep \the \mags@f@r}%
+ \font \temp@font = \curr@fontname scaled \magstep \mags@f@r
+ \else
+ \message {The calculated font is \curr@fontname ->\the\@tempdimb}%
+ \font\temp@font=\curr@fontname at \the\@tempdimb
+ \fi
+ \fi
+ \ifx\H@rV\Hb@x
+ \hbox to \desired@size {\hss{\temp@font #3}\hss}%
+ \else
+ \hbox {{\temp@font #3}}%
+ \fi
+ }
+% user interface
+\def\scaletowidth{\@scaletofit[h]}
+\def\scaletoheight{\@scaletofit[v]}
+%</textfit>
+% \Finale
+% \end{macrocode}
+% \section{A driver for this document}
+%
+% The next bit of code contains the documentation driver file for
+% \TeX{}, i.e., the file that will produce the documentation you are
+% currently reading. It will be extracted from this file by the
+% \dst{} program.
+% \begin{macrocode}
+%<*driver>
+\documentclass{article}
+\usepackage{doc}
+\usepackage[noisy]{textfit}
+% dimensions from ltugboat.sty:
+\setlength\textwidth{31pc}
+\setlength\textheight{54pc}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{2pt plus 1pt minus 1pt}
+\setlength{\oddsidemargin}{8pc}
+\setlength{\marginparwidth}{8pc}
+\setlength{\topmargin}{-2.5pc}
+\setlength{\headsep}{20pt}
+\setlength{\columnsep}{1.5pc}
+\setlength{\columnwidth}{18.75pc}
+
+\DisableCrossrefs
+
+\CodelineIndex % Index code by line number
+
+%\OnlyDescription % comment out for implementation details
+
+\begin{document}
+ \DocInput{textfit.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+%
+% The next line goes into all files and in addition prevents \dst{}
+% from adding any further code from the main source file (such as a
+% character table.
+% \begin{macrocode}
+\endinput
+% \end{macrocode}
+%
+% \DeleteShortVerb{\|}
+%
+% \Finale
+%
+%% \CharacterTable
+%% {Upper-case \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
+%% Lower-case \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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+
diff --git a/macros/latex209/contrib/textfit/textfit.ins b/macros/latex209/contrib/textfit/textfit.ins
new file mode 100644
index 0000000000..d4ff816dfd
--- /dev/null
+++ b/macros/latex209/contrib/textfit/textfit.ins
@@ -0,0 +1,53 @@
+\def\fileversion{1}
+\def\filedate{1994/01/10}
+%
+% \StopEventually{}
+%
+% As always we begin by identifying the latest version of this file
+% on the VDU and in the {\sf log} file.
+% \begin{macrocode}
+\def\batchfile{textfit.ins}
+\input docstrip.tex
+\preamble
+
+Copyright (C) 1993,94 by Sebastian Rahtz, Phil Taylor
+All rights reserved.
+
+\endpreamble
+
+\def\batchfile{textfit.dst} % ignored in distribution
+\input docstrip.tex % ignored in distribution
+
+\keepsilent
+
+\preamble
+Copyright (C) 1993,94 Sebastian Rahtz and Phil Taylor.
+All rights reserved. Permission is granted to to
+customize the declarations in this file to serve the needs of your
+installation. However, no permission is granted to distribute a
+modified version of this file under its original name.
+
+\endpreamble
+
+\Msg{*** Generating style file for Textfit ***}
+
+\generateFile{textfit.sty}{f}{
+ \from{textfit.dtx}{textfit}}
+
+\Msg{*** Generating driver file to print code ***}
+
+\generateFile{textfit.drv}{f}{
+ \from{textfit.dtx}{driver}}
+
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* file textfit.sty into a directory searched by TeX}
+\Msg{*}
+\Msg{***********************************************************}
+
+
+\endinput
+
+
+
diff --git a/macros/latex209/contrib/textyl/README b/macros/latex209/contrib/textyl/README
new file mode 100644
index 0000000000..659d399050
--- /dev/null
+++ b/macros/latex209/contrib/textyl/README
@@ -0,0 +1,84 @@
+
+
+This is TeXtyl, a post-processor for TeX, which
+allows you to typeset graphic line-drawings in
+a device-independent manner. It makes use of the \special
+facility of TeX to insert commands into the original
+ .DVI file produced by TeX, and post-processes that
+file, producing another .DVI file for spooling to
+your favorite printer.
+
+TeXtyl is written in Pascal because of portability
+requirements while under development at Ohio State. For that
+reason, the main portion is one monolithic file, with hooks
+into Unix (in a manner similar to that of "dvitype"). The
+original TeXtyl has/had the ability to typeset musical beams.
+The enclosed version does not have that ability for reasons of
+space and utility. If you feel that you really need it, write
+to me at the address below. Positive suggestions and
+ideas for improvements are welcomed, as are actual
+improvements to the code.
+
+Also included is the TeXtyl manual, describing
+how to use TeXtyl. It is a LaTeX document, using
+TeXtyl-commands for examples. It is also available
+as a technical report from Ohio State University's
+Computer & Information Sciences Dept. at
+1036 Neil Avenue, Columbus, OH 43210.
+TR #OSU-CISRC-4/87-TR9. The current version has the
+added flexiblity of patterned lines, which is not
+reflected in the OSU report.
+
+Finally, in a subsequent posting, are the vector fonts
+for actually typesetting the graphic figures. Although
+given at a 300dpi resolution, the fonts were created
+for device-independence. The file "vecbase.mf" is
+included, but has not been translated to the newer
+version of Metafont. See the TeXtyl manual for
+implementation details of the vector fonts.
+
+This posting comes in several pieces. The directory
+stucture currently looks like:
+./TeXtyl
+README doc/ src/ vecfonts/
+
+./TeXtyl/doc:
+Makefile TYLMAN.02 TYLMAN.05 TYLMAN.08 TYLMAN.11
+TYLMAN.00 TYLMAN.03 TYLMAN.06 TYLMAN.09 TYLMAN.12
+TYLMAN.01 TYLMAN.04 TYLMAN.07 TYLMAN.10 TYLMAN.13
+textyl.tex
+
+./TeXtyl/src:
+h00vars.h textyl.pas.aa textyl.pas.ad textyl.pas.ag
+makefile textyl.pas.ab textyl.pas.ae textyl.pas.ah
+texpaths.h textyl.pas.ac textyl.pas.af tylext.c tylext.h
+
+./TeXtyl/vecfonts:
+vecfonts.shar.aa vecfonts.shar.ab
+vecfonts.shar.ac vecfonts.shar.ad
+
+
+NOTICES:
+TeXtyl was written by John Renner between 1984-1987
+while at the Ohio State University, and elsewhere/when.
+These files and the TeXtyl system are Copyright (c) 1987 by
+John S. Renner, All rights reserved. You may
+freely use this program, as long as you do no
+sell it (nor any derivatives of it),
+and as long as I receive a copy of all modifications.
+This copyright notice must stay intact and accompany
+the TeXtyl sources and manual.
+
+The program, TeXtyl, and the vector fonts were
+derived either independently or from sources noted
+in the TeXtyl manual. There is absolutely NO relationship
+between this work and the work done by Adobe Systems, Inc.,
+as TeXtyl was written entirely and independently by
+John Renner prior to association with that company.
+
+Current Address: John Renner
+ 100 N Whisman #211
+ Mountain View, CA 94043
+
+ adobe!renner@decwrl.dec.com
+
diff --git a/macros/latex209/contrib/textyl/README.27aug91 b/macros/latex209/contrib/textyl/README.27aug91
new file mode 100644
index 0000000000..11208d832c
--- /dev/null
+++ b/macros/latex209/contrib/textyl/README.27aug91
@@ -0,0 +1,29 @@
+This is a beta test version of a C port of Renner's TeXtyl, done using
+Dave Gillespie's p2c and some manual touchup. I hope users will report
+problems they encounter with getting it working it on various systems
+so that I can improve the portability of this code.
+
+There are a couple of differences in usage from the manual. This
+version takes arguments from the command line this way:
+
+ textyl dvi-in dvi-out
+
+Messages are sent to standard output. No tlog file is generated.
+
+To compile for your machine, edit the font path in defs.h (DEFTEXFONTS)
+before doing a make. If the environment variable TEXFONTS is defined at
+runtime, textyl will use that path.
+
+The original Pascal source is in psrc/ in case you want to check how it
+was done. doc/ contains the source for the manual. DVI files of the
+manual, both in TeXtyl form and post-processed form are included for
+regression testing, and for printing. The VMS part of the original
+distribution is not included. If you still want that, contact me
+directly.
+
+A contributed MF84 version of the vector fonts is in vecfonts/mf. Now
+it is possible to generate fonts for non-300 dpi devices.
+
+Send all bug reports on this beta version to ken@syd.dit.csiro.au.
+
+27 August 1991
diff --git a/macros/latex209/contrib/textyl/TODO.27aug91 b/macros/latex209/contrib/textyl/TODO.27aug91
new file mode 100644
index 0000000000..1632abbded
--- /dev/null
+++ b/macros/latex209/contrib/textyl/TODO.27aug91
@@ -0,0 +1,5 @@
+Clean up code a bit.
+Improve portability.
+Add tpic special handling.
+
+27 August 1991
diff --git a/macros/latex209/contrib/textyl/doc/textyl.tex b/macros/latex209/contrib/textyl/doc/textyl.tex
new file mode 100644
index 0000000000..d5059491c6
--- /dev/null
+++ b/macros/latex209/contrib/textyl/doc/textyl.tex
@@ -0,0 +1,42 @@
+% Inclusion file for TeXtyl
+% This is textyl.tex
+%
+% John Renner (jsr@ohio-state.arpa)
+%
+% macros for figures for Tyling
+% specify :
+% \begintyl{vert_dimen}[optional_horiz_dimen]
+% (with NO intervening space between the } and the [ chars)
+% then the \special{tyl ...} strings
+% then you must finish environment with \endtyl
+%
+% \begintyl and \endtyl are the only
+% user-callable macros
+% See the TeXtyl manual for a complete explanation.
+\def\begintyl#1{\begingroup\endlinechar=-1\catcode `\^^I=9
+ \dimen120=#1
+ \ifhmode\toks0={\futurelet\tyltempb\begHtyl}
+ \let\endtyl=\endHtyl
+ \else\toks0={\futurelet\tyltempb\begVtyl}
+ \let\endtyl=\endVtyl\fi
+ \the\toks0}
+%
+%-------the rest are internal------
+\def\begHtyl{\ifx [\tyltempb \let\tylh=\tylHspace
+ \else\let\tylh=\tylHnospace\fi\tylh}
+%
+\def\tylHspace[#1]{\setbox0=\hbox to #1\bgroup
+ \vbox to \dimen120\bgroup\vss}
+\def\tylHnospace{\setbox0=\hbox\bgroup
+ \vbox to \dimen120\bgroup\vss}
+%
+\def\begVtyl{\ifx [\tyltempb \let\tylv=\tylVspace
+ \else\let\tylv=\tylVnospace\fi\tylv}
+%
+\def\tylVspace[#1]{\setbox0=\vbox to \dimen120\bgroup\vss
+ \hbox to #1\bgroup}
+\def\tylVnospace{\setbox0=\vbox to \dimen120\bgroup\vss
+ \hbox\bgroup}
+%
+\def\endHtyl{\egroup\hss\egroup\box0\endgroup}
+\def\endVtyl{\hss\egroup\egroup\box0\endgroup}
diff --git a/macros/latex209/contrib/textyl/doc/tylman.dvi b/macros/latex209/contrib/textyl/doc/tylman.dvi
new file mode 100644
index 0000000000..7bfac681a8
--- /dev/null
+++ b/macros/latex209/contrib/textyl/doc/tylman.dvi
Binary files differ
diff --git a/macros/latex209/contrib/textyl/doc/tylman.tex b/macros/latex209/contrib/textyl/doc/tylman.tex
new file mode 100644
index 0000000000..071cf945ed
--- /dev/null
+++ b/macros/latex209/contrib/textyl/doc/tylman.tex
@@ -0,0 +1,3144 @@
+%
+% LaTeX file for the TeXtyl Manual
+% Copyright (c) 1986, 1987 John S. Renner
+%
+
+\documentstyle[twoside,12pt]{report}
+\makeindex
+\pagestyle{plain}
+\pagenumbering{roman}
+\begin{document}
+\bibliographystyle{plain}
+\hfuzz 5pt
+\vfuzz 3pt
+%\hoffset 1in
+%\voffset 1in
+\hyphenchar\tentt=-1
+% big tt font
+\font\btt=cmtt10 scaled \magstep2
+\hyphenchar\btt=-1
+% font for small caps
+\font\smallrm=cmr10
+
+% special comma
+\def\Coma{$\raise 2.5pt\hbox{\btt ,}$}
+% macro for specifying a parameter
+\def\Prm#1{\leavevmode \hbox{$\>\langle${\it #1\/}$\rangle\,$}}
+% macro for specifying an optional parameter
+\def\Opt#1{\leavevmode \hbox{$\>\lbrack\langle${\it #1\/}$\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\rbrack\,$}}
+% optional parameter without large comma
+\def\sOpt#1{\leavevmode \hbox{$\>\lbrack\langle${\it #1\/}$\rangle\,
+\rbrack\,$}}
+% used for simple verbatim environment using | | delimiters
+% taken from TeXbook
+\chardef\other=12
+\def\ttverbatim{\begingroup \catcode`\\=\other \catcode`\{=\other
+ \catcode`\}=\other \catcode`\$=\other \catcode`\&=\other
+ \catcode`\~=\other \catcode`\%=\other \catcode`\#=\other
+ \obeyspaces \obeylines \tt}
+{\obeyspaces\gdef {\ }}
+\outer\def\begintt{$$\let\par=\endgraf \ttverbatim \parskip=0pt
+ catcode`\|=0 \rightskip=-5pc \ttfinish}
+{\catcode`\|=0 |catcode`|\=\other
+ |obeylines
+ |gdef|ttfinish#1^^M#2\endtt{#1|vbox{#2}|endgroup$$}}
+\catcode`\|=\active
+{\obeylines\gdef|{\ttverbatim\spaceskip=.5em plus .25em minus .15em\let^^M=\ \let|=\endgroup}}
+%
+% macro for figures for Tyling
+\input{textyl}
+
+\newcommand{\TT}{{\it\TeX tyl\/} }
+\newcommand{\TTN}{{\it\TeX tyl}}
+\newcommand{\DVI}{{\smallrm DVI}}
+\newcommand{\Makeodd}{{\ifodd\count0{\newpage\mbox{\ }\newpage}\fi}}
+
+\title{\TeX tyl: a line-drawing interface for \TeX}
+\author{John S. Renner}
+\date{14 March 1987
+\thanks{Copyright \copyright 1987~John~S.~Renner All rights reserved.}}
+\maketitle
+\clearpage %end page 0
+\begin{verse}
+\it Geometry can produce legible letters,\\
+ but art alone makes them beautiful.\\
+\end{verse}\par
+\noindent\begintyl{260 pt}[1in]
+\special{tyl beginfigure "zapf"}
+\special{tyl line m 2 1,92; 45,92}
+\special{tyl line m 2 1,92; 1,48}
+\special{tyl line m 2 1,48; 111,48}
+\special{tyl line m 2 45,92; 45,4}
+\special{tyl line m 2 12,48; 12,92}
+\special{tyl line m 2 23,48; 23,92}
+\special{tyl line m 2 34,48;34,92}
+\special{tyl line m 2 1,70;45,70}
+\special{tyl line m 2 1,92; 23,48}
+\special{tyl line m 2 1,92; 89,4}
+\special{tyl line m 2 23,92;1,70}
+\special{tyl line m 2 23,92;1,48}
+\special{tyl line m 2 23,92; 45,48}
+\special{tyl line m 2 45,92;1,48}
+\special{tyl line m 2 45,92; 23,48}
+\special{tyl line m 2 1,70,23,48}
+\special{tyl arc m 2 11 @ 12,81 270,90}
+\special{tyl arc m 2 11 @ 34,81 10 10}
+\special{tyl arc m 2 11 @ 34,59 10 10}
+\special{tyl arc m 2 11 @ 12,59 270 90}
+\special{tyl arc m 2 22 @ 23,70 10 10}
+
+\special{tyl line m 2 45,92; 111,26}
+\special{tyl line m 2 1,48; 45,4}
+\special{tyl line m 2 45,4;100,60}
+\special{tyl arc m 2 32 @ 45,48 10 10}
+\special{tyl line m 2 45,4; 89,4}
+\special{tyl line m 2 89,4; 89,60}
+\special{tyl line m 2 89,4 111 26}
+\special{tyl arc m 2 22 @ 67,26 10 10}
+\special{tyl line m 2 67 26; 111 26}
+\special{tyl arc m 2 16 @ 89,26 10 10}
+\special{tyl line m 2 89,26; 111,48}
+\special{tyl arc m 2 11 @ 100,37 10 10}
+\special{tyl line m 2 100,37;100,60}
+\special{tyl line m 2 111,26;111,48}
+\special{tyl line m 2 111,48; 100,60}
+\special{tyl arc m 2 8 @ 100 48 10 10}
+\special{tyl arc m 2 6 @ 94 54 10 10}
+\special{tyl line m 2 89,60; 100 48}
+\special{tyl line m 2 95,54; 83 54}
+\special{tyl arc m 2 4 @ 89 54 10 10}
+\special{tyl line m 2 89 54; 100 54}
+\special{tyl line m 2 89,60;83,54}
+\special{tyl line m 2 89, 60; 100 60}
+\special{tyl line m 2 83,54; 83,48}
+\special{tyl line m 2 84,48; 89,54}
+\special{tyl arc m 2 3 @ 86 51 10 10}
+\special{tyl endfigure "zapf"}
+\endtyl
+\par
+\nobreak
+\begin{verse}
+\it Art begins where geometry ends,\\*
+and imparts to letters a character\\*
+transcending mere measurement.\\*
+\hskip 2in\hbox{\smallrm Paul Standard}
+\end{verse}\index{Zapf{,} Hermann}\index{Standard{,} Paul}
+\newpage %end page 1
+\mbox{ }
+\newpage %clear page 2
+\tableofcontents
+
+\Makeodd
+\chapter*{ Introduction}
+\label{introduction}
+\TT\index{{\TT}} is a prototype post-processing system to be used in
+conjuction with {\TeX}\index{{\TeX}}\cite{knuth-tex82}, the typesetting program by Donald
+Knuth. The purpose of \TT is to ``draw'' lines and curves in a
+device-independent manner. \TT is a post-processor that
+interprets certain commands in a {\DVI}\index{DVI}
+({\underline d}e{\underline v}ice-{\underline i}ndependent)
+file that is the
+output of {\TeX} and contains the actual typesetting commands.
+\TT will produce as its output another
+{\DVI} file that contains the commands to typeset the lines and
+curves on a printer or output device.\par
+
+In the current version of \TT (version 1.2 of March 1987), the simple line drawing
+capabilities\index{capabilities} include several general types of straight lines, arcs, and
+spline curves. Advanced features of \TT are for {\it MusiCopy}\index{MusiCopy}, the
+music-typesetting\index{music} project at the Ohio State
+University\cite{gourlay}, namely typesetting ties, slurs, and beams.\par
+
+The name\index{{\TT}, name} for \TT comes from three ideas: (1) a proper computer graphics
+term for rendering images is called ``tiling,'' (2) the
+mis-pro\-noun\-ci\-ation of the name sounds like ``textile,'' which evokes an image
+of lines and bargello effects from weaving, and (3) this process of ``tyl''-ing\index{tyling} comes after {\TeX}.\par
+
+The main design goals\index{design goals} of \TT were (1) the minimization of data required
+to typeset graphics on printers capable of setting only characters at
+arbitrary positions on a page,
+(2) the adherence to the {\DVI} format of {\TeX} output for specifying the
+way to typeset a document in a device-independent manner, (3)
+ a simple, portable interface that would not require a change to the
+functionality or design of {\TeX}, and (4) a user interface that is easy to
+use by people and programs alike.\par
+
+\TT was not intended to mimic nor replace sexy programs like
+{\it Ideal\/}\index{Ideal}\cite{vanwyk}, which know about constraints
+and alignment niceties.
+Rather, \TT is designed to
+take care of medium-level details for {\TeX} for use on printing devices not
+capable of directly accessing and
+loading full bitmaps\index{bitmaps} produced by such systems as {\it
+PostScript\/}\index{PostScript}\cite{adobe}. It is clear that {\DVI}-format is a subset of {\it
+PostScript}, but a large community of users are not able to make use of such
+a super-set, and \TT is intended to provide line-drawing
+capabilities\index{capabilities} for them.\par
+
+Probably the best way to read this manual\index{{\TT}, how to read manual}
+ is to read the first four (4)
+chapters, and skip right to the chapter entitled {\it Future Extensions},
+for a good introduction to \TTN. The other chapters deal with details of
+the innards of \TTN, and describe the design in successively finer
+detail.\par
+
+I would like to thank John Gourlay, and Clayton Elwell for their support,
+comments, reminders, and good ideas during this three-year labor, and the
+{\smallrm CGRG} for not hassling me about this.\par
+
+\Makeodd
+\chapter{The Basics}
+\pagenumbering{arabic}
+\label{getting-started}So, let's draw.
+I will assume that the reader has a reasonably good working knowledge of how to
+use {\TeX}\index{{\TeX}} and/or {\LaTeX}\index{{\LaTeX}}, and sort of understands
+ Knuth's\index{Knuth{,} Donald} concept of ``boxes,''\index{boxes} and their
+attributes of height, width, and current position\index{current position}. We need these concepts
+because our direct interface is with {\TeX}, in the form of a {\tt .tex}
+text-file\index{{\tt .tex} text file}. To typeset the line-drawings, we ask {\TeX} to place our drawing
+at the current position on the page. Throughout this manual, I will provide
+some examples of drawings to illustrate ideas. These figures are thumb-nail
+size, but should be sufficient to get the idea across without using up lots
+of space on a page.
+ Let's look at a simple example: After typing |\input{textyl}| \index{{\tt
+textyl.tex} file}\index{{\tt input}}
+near the
+beginning of your file, but after any required preamble\index{preamble}, we
+can obtain a trivial drawing like:
+\index{line example}\par
+\noindent\hskip 2in\begintyl{2truecm}[1in]
+\special{tyl line 4 20, 0; 80,30}
+\endtyl\par
+\noindent Simple, but we achieved this
+ line by typing
+\begin{verbatim}
+...a trivial drawing like:\par
+\noindent\hskip 2in\begintyl{2cm}[1in]
+\special{tyl line 4 20, 0; 80,30}
+\endtyl\par
+\end{verbatim}
+
+The |\begintyl{2cm}[2in]| and |\endtyl| commands\index{macros}\index{space macros} were
+\index{{\tt begintyl}}\index{{\tt endtyl}}\index{macros, {\it see} {\tt begintyl}}to give us some
+space\index{space} to ``paste'' the picture in
+(about 2 centimeters of vertical space, 1 inch of horizontal space,
+and offset from the left-most margin by 2 inches),\footnote{See also Appendix~\ref{secapp}}
+ and the |\special...|\index{{\tt special}} is our way of asking for the above drawn line.
+ Here, we must use a ``|\special|'' to talk to {\TeX}
+at this level. Later, \TT will actually do the work involved in
+typesetting that line that {\TeX} recorded as being at this place on the
+page. The |\special|\index{specials} is a way to make a kind of note or memo that {\TeX}
+will write into the {\DVI} file for some other program like
+\TT to work with, or choose to ignore, like most {\DVI}
+filters do. \par
+
+Let's look at what |\special{tyl line 4 20, 0; 80,30}| is all about. First,
+|tyl| is a name-string\index{{\tt tyl} name-string} asserting that this command
+ should make sense to \TTN.
+Next, |line| is the name of the graphic
+primitive\index{primitive}
+ to typeset: a
+line segment (we will get to the other primitives later). The rest of the ``special''
+notes that the thickness\index{line thickness} of the line is $4$, and to draw the line from a
+mark 20 printer's-points\index{printer's points, measurement} to the
+ right of the current position to a mark 80
+points over and 30 points higher from that current position. Mathematically,
+we are using a {\bf first-quadrant} cartesian
+ coordinate-space\index{cartesian-space}\index{coordinates}
+ whose origin\index{origin}\index{coordinates, origin} is at the
+current position\index{current position} on the page, and we are drawing a line from $(20,0)$ to
+$(80,30)$ in integer units\index{measurement, units} of printer's-points in that space. It looks like this (magnified):\par
+\noindent\hskip 1in\begintyl{130 pt}
+\special{tyl beginfigure}
+\special{tyl line m 2 0,0 0,40}
+\special{tyl label m 1 0 43 "+Y"}
+\special{tyl line m 2 0 0 90 0}
+\special{tyl label m 1 93 0 "+X"}
+\special{tyl arc m 1 2 10 10}
+\special{tyl line m 8 20,0;80,30}
+\special{tyl line m 1 0 10, -2,10}
+\special{tyl line m 1 0 20, -2 20}
+\special{tyl line m 1 0 30 -2 30}
+\special{tyl line m 1 0 40 -2,38}
+\special{tyl line m 1 0 40 2 38}
+
+\special{tyl line m 1 10 0 10 -2}
+\special{tyl line m 1 20 0 20 -2}
+\special{tyl line m 1 30 0 30 -2}
+\special{tyl line m 1 40 0 40 -2}
+\special{tyl line m 1 50 0 50 -2}
+\special{tyl line m 1 60 0 60 -2}
+\special{tyl line m 1 70 0 70 -2}
+\special{tyl line m 1 80 0 80 -2}
+\special{tyl line m 1 90 0 88 2}
+\special{tyl line m 1 90 0 88 -2}
+\special{tyl endfigure}
+\endtyl
+\par
+\vskip 10pt
+\noindent where we have emphasized the origin of the quadrant, and used
+tick-marks for every ten printer's-points. In reality, someone preparing a
+figure would sketch\index{figures, preparation}
+\index{preparing a figure} something out on grid paper, and then use those
+coordinates for use in the |\special|. If he were really in luck, he
+could use a graphic editor that would take care of such numeric details, and
+maybe even output the |\special| strings for direct insertion into the
+{\tt .tex} file. Maybe. For now, we will have to stick to the grid-paper
+method. The only things that we have to remember are that the origin\index{grid-origin} of our
+quadrant is placed at the position\index{current position} on the page where we invoke the
+|\special| of {\TeX}, and that we may want to leave white space\index{space}\index{leaving white space} for our
+graphic to be drawn in. This last constraint is because {\TeX} does not
+really know about the size of our drawing, it thinks that the |\special| is
+a ``box''\index{boxes} with zero height and width placed at the current position on the
+page. It is up to us to decide how much {\it real\/} space to tell {\TeX} to
+leave for our drawing to be put into later by \TTN.\par
+In the example above,
+and the following examples, we will put our |\special| strings within an
+environment that makes it easy to specify where the origin of our quadrant
+should be placed. For example, |\begintyl{4cm}[1in]| \index{{\tt begintyl}}
+ tells {\TeX} to place
+our origin 4 centimeters down from where it was just sitting.
+A horizontal width is an optional second parameter to |\begintyl|,
+and is enclosed in square braces immediately following the vertical
+displacement parameter (with no spaces in-between). So |\begintyl{5cm}|
+would place our origin 5 centimeters below the current position, with no
+relative horizontal width. Other spacing requirements have to be done by
+hand (e.g., like typing |\hskip 1in| before the |\begintyl|), or by putting the whole
+|\begintyl| \ldots |\endtyl| group within a containing environment (e.g.,
+\LaTeX's |figure| environment).
+ We could, if
+we wanted,
+leave no extra white-space\index{leaving no space} and have the drawing extend into
+ and over any text that {\TeX} may typeset
+before {\it or\/} after we invoke a |\special{tyl ...}| command. We would,
+of course, start that tyling-environment with a
+ |\begintyl{0pt}| command, and finish with the |\endtyl| command, and it
+might do something
+ like \begintyl{0pt}\special{tyl arc m 3 5 @4 0;5 5}\endtyl this.
+\par
+
+\goodbreak Once we are satisfied with our {\tt .tex}\index{{\tt .tex} text file}
+ file containing |\special| strings
+requesting line-drawings, we run the {\tt .tex} file through
+ {\TeX}\index{{\TeX}} or {\LaTeX}\index{{\LaTeX}}, and
+(barring any fatal errors) end up with a {\tt .dvi} file\index{{\tt .dvi} file}.
+We now run\index{running {\TT}}
+ this {\tt .dvi} file through \TT which goes through the file and converts our
+|\special| strings left-over from {\TeX} into commands to actually typeset
+the line-drawing. The whole process might look something like this:\par
+
+\bgroup\small
+{\it prompt:}\underbar{\tt tex}\par
+{\tt This is TeX, Version mumble...}\par
+{\tt **}\underbar{\tt myfile.tex}\par
+\hspace*{6em}$\ldots$ {\it output from \TeX}\par
+{\tt Output written on myfile.dvi ( n pages , m bytes).}\par
+{\it prompt:}\underbar{\tt textyl}\par
+{\tt This is TeXtyl, Version blah...}\par
+{\tt DVI-input File Name:}\underbar{\tt myfile.dvi}\par
+{\tt DVI-output File Name}\par
+{\tt (different than input name)[default of myfile.tyl]:}
+\underbar{\tt myfile2.dvi}\par
+\hspace*{6em}$\ldots$ {\it output from \TT}\par
+{\tt Output written on myfile2.dvi}\par
+{\tt Log written on myfile2.tlog}\par
+
+\egroup
+\noindent So there you have it. All we have to do is give this
+new {\tt .dvi} (or {\tt .tyl}) file to
+a favorite {\DVI} filter\index{DVI-filters}, and look at the document with the
+line-drawing results on that particular filter's output device\index{output
+device}
+(usually paper or a bitmapped screen). You should
+contact your local maintainer\index{local maintainer} if \TT or the filter
+ cannot find the right fonts, and try again.\par
+By the way, the {\tt .tlog} file is useful for finding out about the
+``tyling'' of the {\tt .dvi} file. Besides noting any errors, the log file
+contains the approximate height and depth of each non-trivial figure. A
+portion of the {\tt .tlog}\index{{\tt .tlog} file} file for this document
+might look like:
+\vspace*{-20pt}
+
+{\footnotesize\begin{verbatim}
+17] [
+Figure #1 on page 18 is approx. 33 pts high and 47 pts wide
+
+Figure #2 on page 18 is approx. 32 pts high and 51 pts wide
+
+Figure #3 on page 18 is approx. 27 pts high and 45 pts wide
+
+Figure #4 on page 18 is approx. 31 pts high and 82 pts wide
+18] [19] [20] [
+\end{verbatim}
+
+}
+This information allows you to re-edit the parameters to |\begintyl| so that
+\index{{\tt begintyl}} they can better approximate the actual sizes of the figures.\par
+\medskip\filbreak
+Let's try a slightly more complicated example: drawing a spline.\index{spline, example}
+\TT understands drawing smooth spline curves\index{spline curves}\index{curves} through
+in\-teger co\-ordinate points (both positive and negative)\index{spline, coordinates}
+ on our grid. For example:
+\vspace*{-10pt}
+\begin{verbatim}
+\begintyl{3cm}[1in]
+\special{tyl spline m 4 K 7 5,10; 9,14; 15,7;22,13;
+ 17,14;12,5;7,0;}
+\endtyl\par
+\end{verbatim}
+yields\par
+\noindent\hskip 1in\begintyl{2cm}[1in]
+\special{tyl spline m 4 K 7 5,10; 9,14; 15,7; 22,13;17,14;12,5; 7,0; }
+\endtyl
+\par\filbreak
+\noindent Here, we are using units of millimeters for measurement (denoted
+by an |m| or |M|,\index{{\tt M}-marker}\index{millimeters, measurement} a line thickness of $4$, and we
+ want to use a Catmull-Rom type spline\index{spline,
+Catmull-Rom}\index{Catmull-Rom splines}
+(denoted by |k| or |K|\index{{\tt K}-marker}---also the default type\index{spline,
+default}
+ if none is specified). We
+ specify that there are $7$ control points\index{spline, control-points}
+to interpolate through, and then
+list those $x, y$ pairs. Some things are optional
+\index{defaulting values}\index{optional values}
+ for you (like the spline type, or the units of measure), but
+some are {\it not\/} (notably the line-thickness and the number of control points).
+As we go through these examples, I will point out the minimum that we
+need to specify a graphic primitive, and note other options or features that
+we might want to use. For a detailed look at the specifications of the
+primitives, please refer to the \underbar{\it User-Level
+Details} in chapter~\ref{user-level}.\par\filbreak
+
+Let's try one more type of spline-primitive: the thick-n-thin
+spline\index{ttspline}\index{Thick-n-thin spline}\index{spline, ttspline}. This
+is a primitive that lets us specify a spline of varying line thickness along
+the spline. An example\index{ttspline, example} invocation might be:
+\begin{verbatim}
+\special{TYL ttspline m 5 4,6; 14,25; 18,19; 21,15; 24,8;
+ 10; 2; 6; 3; 8}
+\end{verbatim}\par
+\noindent\hskip 1in
+\begintyl{4cm}[2in]
+\special{tyl ttspline m 5 4,6; 14,25; 18,19; 21,15; 24,8;
+ 10; 2; 6; 3; 8}
+\endtyl\par
+\noindent It looks similar to the |spline| primitive, but here we did not
+specify a single line thickness right after the |m|\index{{\tt M}-marker}
+ measure-marker. The |5|
+refers to the number of control-points as before, then is followed by the
+$(x,y)$ coordinate pairs, and then the line-thicknesses\index{ttspline, thicknesses}. The first
+number (here, |10|) refers to the line thickness at the first control-point
+(here, $(4,6)$ ); the next for the second control-point, etc. We did not
+need to align the thicknesses under the control-points, but it
+makes the correspondence more apparent. We did not
+specify the type of spline to use, so the Catmull-Rom interpolating spline
+was used by default\index{ttspline, defaults}. We could have inserted a
+ |b| marker\index{{\tt B}-marker}
+ directly before the number of control-points,\label{thebases}
+and gotten a spline using the B-spline basis\index{B-spline
+basis}.\index{spline, B-spline}
+ Using
+a |d| marker\index{{\tt D}-marker} yields a spline with the Cardinal
+basis\index{Cardinal basis},\index{spline, Cardinal} and
+an |i|\index{{\tt I}-marker} would indicate an
+Interpolating B-spline\index{B-splines, interpolating-type}\index{spline,
+Interpolating B-spline}
+ (which is a little different)\index{interpolating B-spline}. We will
+look closer at these spline-types on page~\pageref{diffsplines}.
+\par\filbreak
+
+If you've been very observant, you may have noticed that the way we type in
+the |\special| strings\index{typing in special
+strings}\index{specials, typing in}
+ (the letters and numbers within the |{| -- |}| pair)
+has been rather indiscriminant about upper vs. lower-case\index{specials, case insensitivity}.
+ That's okay. \TT
+ has only a few things to worry about, and so it will try to
+figure things out for you. It is pretty lenient about how you
+punctuate\index{specials, punctuation}
+ and
+separate (``delimit'')\index{delimiters} keywords\index{keywords}
+ and markers\index{markers}.\goodbreak\filbreak We only have to remember
+\begin{enumerate}
+\item the relative ordering of the keywords and integers,
+\item being careful to avoid
+mis-using the word markers\footnote{See the index for a list of markers} in
+the wrong places, and
+\item supplying enough parameters that are expected.
+\end{enumerate}
+Other than its own macro-expansions, {\TeX} really
+ doesn't care about the ``meaning'' of the final strings that
+ goes inside the curly braces of the
+|\special{...}| command-strings, only \TT does.\par
+
+We'll briefly look at an example of one more graphic primitive, and then get
+on to more advanced topics. \TT has the ability to draw arcs and
+circles like\index{arcs}\index{circles}:\par
+\noindent\hskip 2in\begintyl{7truecm}[2in]
+% 15-Mar-87 15:51:23
+% TeXtyl figure written with width= 198 mm and height= 206 mm
+% you may have to scale it with Transform or Fit operators in beginfigure
+\special{tyl beginfigure m W 198 206 F 50 50}
+\special{tyl arc m 3 c 64 @(134 114) 357 54}
+\special{tyl arc m (T 120 80 0 0 0) 3 c 31 @(36 31) 10 10}
+\special{tyl arc m 3 c 53 @(129 77) 94 58}
+\special{tyl arc m 3 c 66 @(85 140) 27 323}
+\special{tyl arc m 1 c 57 @(57 100) 10 10}
+\special{tyl endfigure}
+\endtyl\par\filbreak
+\noindent Arcs are drawn from an initial angle (measured
+from the horizontal (positive x-axis) in integer degrees) counter-clockwise
+to a final angle with
+the arc centered about the origin.\index{arcs, angles}\index{arcs, center}
+ If the
+initial angle is the same as the final angle, we get a full circle\index{circles}\index{arcs, circles}.
+A simple arc invocation might look like\index{arcs, example}:\par
+|\special{tyl arc m 2 3, 48, 280}|\par
+\noindent which would draw an arc of line thickness $2$, a radius\index{arcs, radius} of $3$
+millimeters, from an initial angle of 48 degrees until the final angle of 280
+degrees centered about the origin. We could specify that the arc is to be
+centered\index{arcs, centering}
+elsewhere by using a special |@|\index{{\tt @}-marker} marker. So,\par
+|\special{tyl arc m 2 3, @ 7,7; 10 10 }|\par
+\noindent would draw an arc of line-thickness $2$, radius of $3$ mm as before,
+but centered at $(7,\, 7)$ from the origin. Also, since the initial and final
+angles are the same in this example (|10|), we would get a full circle.
+\par\vfill\pagebreak[4]
+%\Makeodd
+\chapter{Advanced Features}
+\label{advanced-features}In the previous chapter, we saw basic examples of most of the graphic
+primitives available in \TTN, how to invoke them\index{primitives, invoking}, and some of
+the parameters\index{primitives, parameters} to the primitives. We also saw examples of how we interface
+with {\TeX} using the |\special| command strings, and how the origin of our
+drawing quadrant is placed at the reference point of the ``box'' containing
+the |\special| (usually the lower-left corner of the box created with the
+|\begintyl| and |\endtyl| macros.\index{macros}\index{boxes}
+ (see the {\TeX book}\cite{knuth-tex82}\index{\TeX book} for a better explaination of
+``specials''). The rest of this chapter will look more at
+the parameters available for the primitives, and how we can
+combine\index{primitives, combining}\index{combining primitives}
+primitives and manipulate them.\par
+
+\section{Transforms}
+\label{transforms}\index{transforms}
+The most interesting additional parameter for the primitives is a transform
+operation. It allows us to modify an already-exisiting definition of a
+primitive without our having to totally re-edit the |\special|
+string, nor having
+to explicitly re-compute the coordinates of the line/spline points.
+Thus we can take a simple definition similar as before, like:\par
+|\special{tyl line m 4 0,8; 39,44}|\par
+\noindent and change its size, or rotate it, or translate (shift)
+its position\index{scaling}\index{rotation}%
+\index{translating}\index{primitives, scaling; rot\-ating; trans\-lating}
+without completely changing the actual text of the
+ specification of the control points (this is really useful
+when dealing with splines having many control points).
+\index{transforms, scaling}\index{transforms, rotating}
+\index{transforms, translation}
+\filbreak
+ Let's look at an
+example, and then go into more detail about the transform. For example, to
+rotate the above definition about its center by 60 degrees
+counter-clockwise, all we have to specify is
+|\special{tyl line m T (100, 100, 0, 0, 60) 4 0,8; 39, 44}|
+ which yields\index{transforms, example}\par
+\noindent\hskip 1in\begintyl{1in}[2in]
+% 15-Mar-87 15:47:50
+% TeXtyl figure written with width= 196 mm and height= 71 mm
+% you may have to scale it with Transform or Fit operators in beginfigure
+\special{tyl beginfigure m W 196 71 F 51 51}
+\special{tyl line m 4 c 170 0 154 71}
+\special{tyl line m 4 c 54 61 0 11}
+\special{tyl line m 1 c 109 28 114 37}
+\special{tyl line m 1 c 107 45 114 37}
+\special{tyl line m 1 c 110 34 87 34}
+\special{tyl line m 1 c 111 37 89 37}
+\special{tyl line m 1 c 110 39 87 39}
+\special{tyl endfigure}
+\endtyl\par
+\noindent as expected. We use the |T|\index{{\tt T}-marker} marker to note the need for a
+transformation, and follow it by five numbers\index{transforms, parameters}.
+ The first two are for
+scaling, the next two for translation, and the last (here, |60|) is for our
+rotation. In general, the
+format for specifying some transformation on the currently-specified points
+is:\par
+\qquad{\btt T}\ \Prm{Sx}\Coma\Prm{Sy}\Coma\Prm{Tx}\Coma\Prm{Ty}\Coma\Prm{Rot}\Coma\par
+\noindent where \Prm{Tx} and \Prm{Ty} are translations of the object in
+ the $X$ or $Y$ direction, respectively, by some signed distance according to the
+current units of \Prm{measure} (|m|\index{{\tt M}-marker} still means millimeters in the above example).
+ \Prm{Rot} is a signed integer angle (in degrees) \index{rotation}
+by which\index{rotation, using degrees measurement}
+to rotate the primitive counter-clockwise about its center.
+ \Prm{Sx} and \Prm{Sy} are\index{transforms, parameters}
+integer scale parameters representing the real values of the
+transform multiplied by 100. For example, if you wanted to scale the drawing
+in the $X$ direction (relative to the drawing's center)
+ by an additional 50\% (i.e., scale by 1.5),
+\Prm{Sx} would be 150. Negative values are usuable, too, so
+mirroring\index{transforms, mirroring} about the $Y$ axis is achievable by
+scaling in the negative $X$ direction, like $\Prm{Sx} = -100$.
+To obtain any transform, {\it all\/} the transform parameters must be
+specified. A no-op transform\index{transforms, no-op} would look kind of like
+{\tt T~(100,~100,~\kern-1pt0,~\kern-1pt0,~\kern-1pt0)} in the middle of
+the |\special|. \par
+
+\section{Figures}
+\label{figures}
+The last major \TT concept is the idea of combining
+several primitives\index{primitives, combining} into what we call a
+``figure.''\index{figures}\index{combining primitives}
+This figure can be manipulated either as a single entity or in parts
+by
+using the \Prm{transform} operations\index{figures, transforms} described
+in the previous section.
+These optional figure-level transformations
+will transform all the figure's primitives (which may have local
+transformations of their own). The result is a nested symbol definition
+\index{nested symbols}\index{figures, nested symbols}
+that has concatenatable transformations\index{transforms, concatenation}.
+This is useful for defining some
+ symbol, created from various primitives, and dealing with it
+as a unit. For example, a basic logotype can be defined, and then moved
+about, scaled, or rotated as desired {\it without\/} having to change the
+original definition of the logotype or its parts from scratch.
+These commands are:\par
+\medskip
+{\btt\char'134 special\char'173 tyl beginfigure}
+{\leavevmode \hbox{$\>\lbrack\langle${\it transform\/}$\rangle\,
+\rbrack\,$}}{\btt\char'175}\par
+\noindent which opens a level of definition\index{{\bf beginfigure}}\index{figures, defining},
+and\par
+\medskip
+{\btt\char'134 special\char'173 tyl endfigure}{\btt\char'175}\par
+\noindent which closes that level of definition\index{{\bf endfigure}}.
+ Any calls to a
+|\special{tyl ...| primitive within a |beginfigure| -- |endfigure| pair
+become part of that figure's definition\index{figures, sub-figures}.
+Note the definition of |beginfigure| allows the ability to apply a
+transformation at the outer level. A simple example might be:\index{figures,
+examples}\vspace*{-10pt}
+\begin{verbatim}
+\begintyl{2in}
+\special{tyl beginfigure}
+ \special{tyl line m 2 5,10; 15,15 }
+ \special{tyl line m 4 10,20; 16,1 }
+ \special{tyl line m 8 15,10; 25,10 }
+\special{tyl endfigure}
+\endtyl
+\end{verbatim}
+giving a figure of three lines:\par
+\noindent\hskip 2in\begintyl{1truein}[2in]
+\special{tyl beginfigure "oflines"}
+\special{tyl line m 2 5,10; 15,15 }
+\special{tyl line m 4 10,20; 16,1 }
+\special{tyl line m 8 15,10; 25,10 }
+\special{tyl endfigure "oflines" }
+\endtyl\par
+\noindent We can also define sub-figures\index{sub-figures} within figures
+and apply\label{sub-figures}
+transformations\index{transforms, sub-figures} to those, too. The idea looks like:\par
+|\begintyl{down-distance}[optional-width]|\par
+|\special{tyl beginfigure}|\par
+\qquad $\ldots$\par
+\qquad|\special{tyl beginfigure}| {\it \% Some sub-figure }\par
+\qquad $\ldots$\hbox{\hskip 2in} {\it \% of other primitives}\par
+\qquad|\special{tyl endfigure}|\par
+\qquad $\ldots$\par
+|\special{tyl endfigure}|\par
+|\endtyl|\par
+\noindent Where ``$\ldots$'' means possible other invocations of
+primitives with |\special{tyl...}| strings. We are
+able to use spacing and tabbing to nicely indent our |\special| strings,
+since {\TeX} considers all that white space to be non-existent within the
+|\begintyl| -- |\endtyl| environment.\index{{\tt begintyl}}\index{{\tt
+endtyl}}
+\par\filbreak
+
+We'll look at a basic figure\index{figures, example}, and apply some
+transforms to parts of it.
+ For the basic figure, we have:\par
+\noindent\hskip 2in\begintyl{1in}[2in]
+\special{tyl beginfigure "TeXtyl-logo-1"}
+ \special{tyl beginfigure "tex-logo"}
+ \special{tyl line m 3 2,13; 10,13}
+ \special{tyl line m 3 6,13; 6,6}
+
+ \special{tyl line m 3 8,11;8,4}
+ \special{tyl line m 3 8,11;12,11}
+ \special{tyl line m 3 8,8; 11,8}
+ \special{tyl line m 3 8,4;12,4}
+
+ \special{tyl line m 3 13,13;18,6}
+ \special{tyl line m 3 13,6;18,13}
+ \special{tyl endfigure}
+ \special{tyl beginfigure "tyl-logo"}
+ \special{tyl line m 3 20,10;24,10}
+ \special{tyl line m 3 22,12;22,6}
+
+ \special{tyl line m 3 25,10;27,6}
+ \special{tyl line m 3 29,10;26,2}
+
+ \special{tyl line m 3 31,13;31,6}
+ \special{tyl endfigure}
+\special{tyl endfigure}\endtyl\par\filbreak
+\noindent Now let's scale a sub-figure by using a |T|\index{{\tt T}-marker}
+ transform at the
+|beginfigure| level; i.e., something like
+\verb+\special{tyl beginfigure T 60 60 0 0 0}+ :\par
+\noindent\hskip 2in\begintyl{ 1in}[2in]
+\special{tyl beginfigure "TeXtyl-logo-2"}
+ \special{tyl beginfigure "tex-logo"}
+ \special{tyl line m 3 2,13; 10,13}
+ \special{tyl line m 3 6,13; 6,6}
+
+ \special{tyl line m 3 8,11;8,4}
+ \special{tyl line m 3 8,11;12,11}
+ \special{tyl line m 3 8,8; 11,8}
+ \special{tyl line m 3 8,4;12,4}
+
+ \special{tyl line m 3 13,13;18,6}
+ \special{tyl line m 3 13,6;18,13}
+ \special{tyl endfigure}
+ \special{tyl beginfigure T 60 60 0 0 0 "tyl-logo"}
+ \special{tyl line m 3 20,10;24,10}
+ \special{tyl line m 3 22,12;22,6}
+
+ \special{tyl line m 3 25,10;27,6}
+ \special{tyl line m 3 29,10;26,2}
+
+ \special{tyl line m 3 31,13;31,6}
+ \special{tyl endfigure}
+\special{tyl endfigure}\endtyl\par\filbreak
+\noindent We can rotate, and then also translate that same
+sub-figure and achieve the next two examples. First, a rotation about
+the sub-figure's center:\par
+\noindent\hskip 2in\begintyl{ 1in}[2in]
+\special{tyl beginfigure "TeXtyl-logo-3"}
+ \special{tyl beginfigure "tex-logo"}
+ \special{tyl line m 3 2,13; 10,13}
+ \special{tyl line m 3 6,13; 6,6}
+
+ \special{tyl line m 3 8,11;8,4}
+ \special{tyl line m 3 8,11;12,11}
+ \special{tyl line m 3 8,8; 11,8}
+ \special{tyl line m 3 8,4;12,4}
+
+ \special{tyl line m 3 13,13;18,6}
+ \special{tyl line m 3 13,6;18,13}
+ \special{tyl endfigure}
+ \special{tyl beginfigure T 60 60 0 0 -35 "tyl-logo"}
+ \special{tyl line m 3 20,10;24,10}
+ \special{tyl line m 3 22,12;22,6}
+
+ \special{tyl line m 3 25,10;27,6}
+ \special{tyl line m 3 29,10;26,2}
+
+ \special{tyl line m 3 31,13;31,6}
+ \special{tyl endfigure}
+\special{tyl endfigure}\endtyl\par\filbreak
+\noindent and now also translated {\it after\/} the rotation:\par
+\noindent\hskip 2in\begintyl{1in}[2in]
+\special{tyl beginfigure "TeXtyl-logo-4"}
+ \special{tyl beginfigure "tex-logo"}
+ \special{tyl line m 3 2,13; 10,13}
+ \special{tyl line m 3 6,13; 6,6}
+
+ \special{tyl line m 3 8,11;8,4}
+ \special{tyl line m 3 8,11;12,11}
+ \special{tyl line m 3 8,8; 11,8}
+ \special{tyl line m 3 8,4;12,4}
+
+ \special{tyl line m 3 13,13;18,6}
+ \special{tyl line m 3 13,6;18,13}
+ \special{tyl endfigure}
+ \special{tyl beginfigure T 60 60 -8 -8 -35 "tyl-logo"}
+ \special{tyl line m 3 20,10;24,10}
+ \special{tyl line m 3 22,12;22,6}
+
+ \special{tyl line m 3 25,10;27,6}
+ \special{tyl line m 3 29,10;26,2}
+
+ \special{tyl line m 3 31,13;31,6}
+ \special{tyl endfigure}
+\special{tyl endfigure}\endtyl\par\filbreak
+\noindent Finally, we can take the whole figure, and perform a scale and a
+then a rotation on it (we evaluate scaling first, then rotations and finally
+translations):\par
+\noindent\hskip 2in\begintyl{3cm}[2in]
+\special{tyl beginfigure T 80 80 0 0 60 "TeXtyl-logo-5"}
+ \special{tyl beginfigure "tex-logo"}
+ \special{tyl line m 3 2,13; 10,13}
+ \special{tyl line m 3 6,13; 6,6}
+
+ \special{tyl line m 3 8,11;8,4}
+ \special{tyl line m 3 8,11;12,11}
+ \special{tyl line m 3 8,8; 11,8}
+ \special{tyl line m 3 8,4;12,4}
+
+ \special{tyl line m 3 13,13;18,6}
+ \special{tyl line m 3 13,6;18,13}
+ \special{tyl endfigure}
+ \special{tyl beginfigure "tyl-logo"}
+ \special{tyl line m 3 20,10;24,10}
+ \special{tyl line m 3 22,12;22,6}
+
+ \special{tyl line m 3 25,10;27,6}
+ \special{tyl line m 3 29,10;26,2}
+
+ \special{tyl line m 3 31,13;31,6}
+ \special{tyl endfigure}
+\special{tyl endfigure}\endtyl
+\par\filbreak
+
+\section{Others}
+We'll finish off this section with a couple more primitives: a simple spline
+example, and the primitives for a music-typesetting project underway at Ohio
+State University\cite{gourlay}\index{OSU}. The first example is not really that different from our
+first spline example, except that in this case, we have a ``closed''
+spline:\index{splines, closed}\index{closed splines} one whose
+ first control-point will coincide with its last control-point.
+We can type something that looks like:
+\begin{verbatim}
+\special{tyl spline m 3 b O 8 (10,9) (4,16) (8,23)
+ (11,21) (13,17) (20,16) (22,13) (19,8)}
+\end{verbatim}\par
+\noindent The |O| (letter ``Oh'')\index{{\tt O}-marker}
+ marker denotes a closed spline\index{closed splines}. The default
+option is an ``open'' spline\index{open spline}\index{splines, open},
+ and can be marked with a |U|\index{{\tt U}-marker} instead of the
+|O| if you wish to be explicit.
+The difference is in the way that \TT
+manipulates the control points when doing the interpolation.
+ In this example, we used a B-spline, as marked with a
+|b|\index{{\tt B}-marker}, and we listed {\it only\/} the unique
+coordinates to get this nice bean-shape:\par
+\noindent\begintyl{3cm}[2in]
+\special{tyl spline m 3 b O 8 10,9;4,16;8,23;11,21;13,17;20,16;22,13;19,8}
+\endtyl\par
+
+\label{diffsplines}\TT provides three types of spline interpolation which I alluded to on
+page~\pageref{thebases}. The Catmull-Rom basis is probably the most
+intuitively useful spline for users. It produces a smooth curve that goes
+\index{splines, Catmull-Rom, example}
+through the control points (which we can mark with dots):\par
+\noindent\hskip 1in\begintyl{1in}[1in]
+\special{tyl spline m 2 K X 8 7 5,10; 9,14; 15,7; 22,13;17,14;12,5; 7,0;}
+\endtyl\par
+The Cardinal basis\index{splines, Cardinal, example} is of the same family
+as the Catmull-Rom. It, too, interpolates through the control points, and is
+included for convenience and as an alternative to the Catmull-Rom. For
+example:\par
+\noindent\hskip 1in\begintyl{1in}[1in]
+\special{tyl spline m 2 D X 8 7 5,10; 9,14; 15,7; 22,13;17,14;12,5; 7,0;}
+\endtyl\par
+The B-spline\index{splines, B-spline, example} is a little different in that
+the curve {\it approximates\/} the control points. Using the same control points as
+the above example, but using the B-spline basis, we see:\par
+\noindent\hskip 1in\begintyl{1in}[1in]
+\special{tyl spline m 3 B X 8 7 5,10; 9,14; 15,7; 22,13;17,14;12,5; 7,0;}
+\endtyl\par
+For the most part, you will probably want to draw curves through the control
+points that you specify, and so the Catmull-Rom basis is the
+convenient default. The B-spline type is provided for completeness for users
+who might have data using that basis.\par
+
+ There {\it are\/} times when the Catmull-Rom or Cardinal bases give flakey
+curves and the B-spline basis is not appropriate either. \TT provides a
+fourth type of spline for these situations: an interpolating B-spline
+curve.\index{splines, Interpolating B-spline, example} It has the advantages
+of Catmull-Rom's interpolation, and the special flexibilities of the
+B-spline, but is computationally more expensive. See \cite{wu-abel} or \cite{barsky} for a
+complete explanation. Here is an example using the same control points as
+the above examples, but using the interpolating B-spline:\par
+\noindent\hskip 1in\begintyl{1in}[1in]
+\special{tyl spline m 3 I X 8 7 5,10; 9,14; 15,7; 22,13;17,14;12,5; 7,0;}
+\endtyl\par
+
+For the {\it MusiCopy\/}\index{MusiCopy} project, we have the ability to draw ties and slurs
+\index{ties}\index{slurs}---the long arcs connecting groups of notes. For the most part, I assume
+that there is a program that is going to take care of the details of knowing where these
+graphic elements are to be placed, and will produce the correct |\special|
+string for inclusion in the {\tt .tex} file, but I will give an example for
+completeness.\filbreak This graceful arc is produced by specifying a minimum and
+\index{ties, {\it see also} slurs}\index{slurs, {\it see also} ties}
+\index{ties, example} maximum thickness, and the five control points for the shape.\par
+\noindent\begintyl{4truecm}[2in]
+\special{tyl tieslur m 2 8 5 5,10; 7,13;15,16;24,17; 28,15 }
+\endtyl\par\filbreak
+
+\noindent The call looked like\index{tieslur, example}:\par
+|\special{tyl tieslur m 2 8 5 (5,10)(7,13);[15,16];(24,17); 28,15 }| \par
+\noindent where |2| and |8| are the min and\index{tieslur, thicknesses}
+max thicknesses at the endpoints and the middle, respectively. The following
+|5| is for the number of control points, and the five pairs of integers
+following that are the coordinates of the points. We use a special way of
+producing a smooth and gradual thin to thick to thin line-thickness,
+but will discuss it in a later chapter.\index{ties, and ttsplines}\par\filbreak
+
+The last example is the most specialized for the music project: beams\index{beams}. We'll
+just look at an example of how they are called and appear, and leave the
+details for the next chapter.\par
+\noindent\begintyl{3truecm}[2in]
+\special{tyl beginfigure "beams" }
+ \special{tyl beam m 0 3,20; 15,23 }
+ \special{tyl beam m 0 g 3,10;11,7 }
+\special{tyl endfigure }\endtyl\par
+\noindent The basic order of the parameters looks something like:\par
+|\special{tyl beam m 0 g 3,10;11,7 }|\par
+\noindent where |0| (zero) is the ``staff-size,''\index{staff-size}
+ |g|\index{{\tt G}-marker} indicates a beam size for
+``grace'' notes\index{grace-notes} (|r|\index{{\tt R}-marker}
+is the default for ``regular'' sized notes), and the
+last two pairs are the coordinates of the line-segment that the beam is to be
+centered over.\par
+
+\Makeodd
+\chapter{User-Level Details}
+\label{user-level}
+From the user's point of view\index{user's view} using {\TeX}\index{{\TeX}},
+ commands\index{{\TeX} commands}\index{specials} that \TT
+interprets will look like the word ``|tyl|'', followed by
+ the name of the graphic to typeset, then a
+list of parameters\index{parameters to {\TT}}\index{{\TT}, parameters}
+all enclosed within the curly
+braces of a \hbox{|\special{...}|} command.
+This use of a |\special| could be produced
+by some other program (a graphic editor, for example),
+\index{graphic editors} and the text strings merely
+inserted into the {\tt .tex} text-file. \par
+
+As far as the user is concerned, he is pasting in a picture at the current
+position\index{current position} on the page where he invokes the |\special|. The user should
+think of this picture as being a box just big enough to contain all the
+lines of his graphic image, and whose first-quadrant cartesian
+ origin is the reference\index{origin of quadrant}\index{reference point}
+point that will be placed at the current position on the page. Thus, he
+might want to make sure that there is enough blank space \index{blank space}around the current
+position on the page to contain the
+image before he tries to ``paste it in.'' Space can be created by using
+\TeX's |\hskip| or |\vskip|, or \LaTeX's |\hspace| and |\vspace| commands,
+\index{{\TeX}}\index{{\LaTeX}} or hoping for the best with \LaTeX's
+|figure| environment \index{{\LaTeX}, {\tt figure } environment} surrounding
+the box created by |\begintyl| and |\endtyl|.
+\par
+
+The kinds of graphic primitives\index{primitives}\index{capabilities}
+that \TT knows how to typeset are
+uniform-thickness line segments, uniform-thickness splines,
+uniform-thickness arcs, variable-thickness
+splines, music beams, and music ties/slurs. Line segments are
+merely a subset of splines, and so variable-thickness lines are available by
+specifying a spline of just two control points with a thickness at one end
+point,\index{primitives, built-up}
+ and another thickness at the other end point. The feature here is to have
+several primitives available, and allow for other graphic elements
+ to be built using them.\par\filbreak
+
+We'll look at the basic syntax for the primitives, and then discuss what
+each parameter really means and how to specify what you want.
+The parameters\index{primitives, parameters}\label{parameters} for each
+of the graphic types are as follows: literals are
+in a {\btt typewriter} face, any required parameters for the primitive are
+in \mbox{$\langle$ angle $\rangle$} brackets,
+ and any {\it optional\/} parameters are within
+\mbox{$\lbrack$ square $\rbrack$}
+brackets. Please note that the relative ordering of the parameters
+ {\it is\/} important, even
+if you do not use any or all optional parameters. Also, it is does not
+matter if you use upper- or lower-case letters for the primitives or markers.
+\par\filbreak
+\medskip
+{\btt\char'134 special\char'173 tyl line}
+ \Opt{measure}
+\Opt{transform} \Prm{thick}\Coma\par
+\hfil \Opt{vector}{\leavevmode\hbox{$\>\lbrack${\btt L}$\>\langle style\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\rbrack$}} $ x_{\rm left}\,\Coma\>
+y_{\rm bottom}\,\Coma\>
+x_{\rm right}\, \Coma\> y_{\rm top}${\btt\char'175} \par
+
+\noindent draws a line\index{{\bf line}} segment\index{line segments}
+ from the point $\left( x_{\rm left}\, , \; y_{\rm
+bottom}\right)$ to the point
+$\left( x_{\rm right}\, ,\; y_{\rm top}\right)$ using a line of
+thickness\index{line thickness}
+\Prm{thick}.\par\filbreak
+
+\medskip
+{\btt\char'134 special\char'173 tyl spline}
+ \Opt{measure}\Opt{transform}\Prm{thick}\Coma\par
+\hfil \Opt{vector}
+{\leavevmode\hbox{$\>\lbrack${\btt L}$\>\langle style\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\rbrack$}}
+\Opt{s-type}\Opt{closure}\par
+\hfil{\leavevmode\hbox{$\>\lbrack${\btt X}$\>\langle dotsize\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\rbrack$}}
+\Prm{numpts}\Coma $x_1\, \Coma\> y_1\, \Coma\> \ldots\>\Coma\>
+ x_{\rm numpts}\, \Coma\> y_{\rm numpts}$ {\btt \char'175} \par
+
+\noindent draws a smooth spline\index{{\bf spline}} curve through the integer points
+ $x_1\, , \; y_1 ,\; \ldots$ \linebreak[4]
+ $\; x_{\rm numpts}\, ,\; y_{\rm numpts}$
+using a line of thickness \Prm{thick}. If the optional {\btt X} marker
+\index{{\tt X}-marker} is specified, dots of diameter \Prm{dotsize} are
+placed to mark the positon of the control points specified. This
+may be useful for checking your data.\par\filbreak
+
+\medskip
+{\btt\char'134 special\char'173 tyl ttspline} \Opt{measure}
+\Opt{transform}\par
+\hfil \Opt{vector}\Opt{s-type}\Opt{closure}
+{\leavevmode\hbox{$\>\lbrack${\btt L}$\>\langle style\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\rbrack$}} \par
+\hfil{\leavevmode\hbox{$\>\lbrack${\btt X}$\>\langle dotsize\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\rbrack$}}
+\Prm{numpts}\Coma
+$x_1\, \Coma\> y_1\, \Coma\>\ldots\>\Coma\>
+x_{\rm numpts}\,\Coma\> y_{\rm numpts}\,\Coma\>$\par
+\hfil $thick_1\, \Coma\>\ldots\>
+\Coma\> thick_{\rm numpts}$ {\btt \char'175} \par
+
+\noindent draws a smooth spline through the integer points $x_1 , \; y_1 ,\;
+\ldots$ using a\index{{\bf ttspline}}
+line of varying thickness defined by $thick_i$ at each control point\index{ttspline, thicknesses}
+$\left( x_i,\; y_i\right)$ (ergo {\underbar t}hick-{\underbar t}hin
+splines). The {\btt X} marker is also available for marking the positions
+of the specified control points. \par\filbreak
+
+\medskip
+{\btt\char'134 special\char'173 tyl arc} \Opt{measure}
+\Opt{transform} \Prm{thick}\Coma\par
+\hfil \Opt{vector}
+{\leavevmode\hbox{$\>\lbrack${\btt L}$\>\langle style\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\rbrack$}}\Prm{radius}\Coma
+{\leavevmode\hbox{$\>\lbrack${\btt @}$\>\langle cent_x\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\langle cent_y\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\rbrack$}}\par
+\hfil\Prm{$angle_1$}\Coma \Prm{$angle_2$}{\btt \char'175} \par
+
+\noindent draws an arc\index{{\bf arc}} of radius \Prm{arc-radius} going counter-clockwise
+starting from \Prm{$angle_1$} degrees from zero, and \index{arcs, angles}
+finishing at \Prm{$angle_2$} degrees around from zero. If the center point is not specified with
+the {\btt @} marker\index{{\tt @}-marker}, the arc is assumed to be centered
+at $(0,\, 0)$.\index{arcs, centering}
+ Ellipses\index{ellipses} can be achieved by a simple scaling
+ of a closed arc\index{oval, {\it see} ellipse}
+since scaling and rotational transformations
+ are about the {\it center\/} of the primitive.\par\filbreak
+
+\medskip
+{\btt\char'134 special\char'173 tyl label} \Opt{measure}
+\Prm{face}\Coma $\;x\, \Coma\> y$\Coma {\btt "}\Prm{string}{\btt "}
+{\btt\char'175}\par
+
+\noindent places a simple label\index{{\bf label}} at $(x,\, y)$ using
+ a font style\index{labels, font style}\index{labels, face} of
+\Prm{face} (currently selectable by an integer: e.g.,
+ |1| is amtt10. See page~\pageref{labelfonts} for a better list).
+\Prm{String} is a simple sequence of letters and spaces contained
+within matching double quotes ({\btt "}).\index{{\tt "}-marker}
+Here, the case of the letters of \Prm{string} is taken verbatim,
+and it is {\it not}
+interpreted; {\TeX} macros or typesetting commands are not
+usable here.\index{labels, strings} If you want to typeset fancier
+labels, \TT is too late in the game.\par\filbreak
+
+The optional parameter
+\Prm{measure}\index{measurement}\index{units of measure} is any
+of {\btt S}\index{{\tt S}-measure},
+ {\btt P}\index{{\tt P}-measure},
+or {\btt M}\index{{\tt M}-measure}
+denoting that the integer
+points, like $x_1,\; y_1,\;\ldots $ are measured in
+scaled-points,\index{scaled points}
+printer's-points\index{printer's points}, or millimeters\index{millimeters}
+respectively. If none is specified, the measurement
+of\index{measurement, default}
+printer's-points is assumed. Just to refresh how big each of those units is:
+\begin{itemize}
+\item there are 72.27 printer's points {\it (pp)\/} per inch
+\item and 65536 scaled-points {\it (sp)\/} per printer's point
+\item and 25.4 millimeters {\it (mm)\/} per inch
+\end{itemize}\par
+ Also remember that the coordinates for the above
+control points (like $x_{left}$ or $x_i$) are in {\it first quadrant}
+cartesian coordinate-space\index{coordinate space system}. It is useful not to have to remember some
+other coordinate systems, and makes things easier for
+the user and user programs to interact with \TTN, which takes care
+of such details.\par\filbreak
+
+\Prm{Thick} is the pixel-thickness\index{line thickness}
+\index{pixel thickness} of the vector font\index{vector font} to use. Currently
+the range is from about 1 to 12 pixels thick (we'll talk more about these
+sizes later). Here are some examples of lines having from 2 to 10 ``pixels''
+ in even thicknesses.\index{line thickness, example}\par
+\noindent\hskip 1in\begintyl{3truecm}[1in]
+\special{tyl beg}
+\special{tyl line m 2 2 4 11 26}
+\special{tyl line m 4 12 23 15 10}
+\special{tyl line m 6 15 20 25 13}
+\special{tyl line m 8 26 9 31 23}
+\special{tyl line m 10 33 2 33 16}
+\special{tyl end}\endtyl
+\par\filbreak
+ \Prm{Vector} refers to the {\it
+type\/} of vector\index{vector-types}\index{pens} to use,
+ namely {\btt C}\index{{\tt C}-marker} for vectors that look as if they are
+ drawn with a {\it circular\/} ``pen,''\index{circular pen}
+ {\btt H}\index{{\tt H}-marker} for a {\it horizontal\/}
+pen,\index{horizontal pen}
+ and {\btt V}\index{{\tt V}-marker} for
+{\it vertical\/} pen appearance\index{vertical pen}.
+ A circular pen vector-type is the default\index{vector-types, default}. See also
+section~\ref{vect-pens} for examples and a better description.\par\filbreak
+
+\Prm{Style} \index{line style}\index{{\tt L}-marker}is the
+ line-style to use when drawing. Currently, \TT is able to
+provide solid (style |0|), dotted (style |1|), dashed (|2|), and dot-dashed (|3|)
+line-styles.\index{line style, dotted}\index{line style, dashed}
+\index{line style, solid}\index{line style, dot-dashed} The solid line-style is
+the default. Here are some simple examples of the styles:\index{line styles, examples}\par
+\begintyl{3truecm}[1in]
+\special{tyl beg}
+\special{tyl line m 2 L 0 (2 4 11 26)}
+\special{tyl line m 2 L 1 (12 23 15 10)}
+\special{tyl line m 2 L 2 (15 20 25 13)}
+\special{tyl line m 2 L 3 (26 9 31 23)}
+\special{tyl end}\endtyl
+\par\filbreak
+
+\Prm{S-type} is the kind of spline-basis\index{splines, types}\index{splines, basis}
+to use when interpolating the spline
+through the control points. Currently, {\btt B}\index{{\tt B}-marker}
+ indicates the {\underbar b}-spline basis\index{B-spline basis}
+(which interpolates a spline within the convex hull of the control points),
+{\btt I}\index{{\tt I}-marker} indicates an
+ {\underbar i}nterpolating B-spline\index{interpolating B-spline, basis} (goes through the points
+specified), {\btt D}\index{{\tt D}-marker} for the Cardinal
+basis,\index{Cardinal basis}
+and {\btt K}\index{{\tt K}-marker} which
+indicates the Catmull-Rom basis\index{Catmull-Rom basis} (which also
+ interpolates a spline {\it through\/} the control points). The
+Catmull basis is the default\index{splines, default basis} spline type in the current
+implementation.\par\filbreak
+
+\Prm{Closure}\index{closure}\index{splines, closure} is used to
+indicate whether the spline is a closed \index{closed splines}
+curve (the endpoints overlap), or an open curve\index{open spline} (the
+default)\index{splines, default closure}. We use
+the iconography of {\btt O}\index{{\tt O}-marker} for a closed curve,
+ and {\btt U}\index{{\tt U}-marker} for an
+open-ended curve.\par\filbreak
+
+Now we come to describe what \Prm{transform} is all about. \TT
+allows the user to modify the coordinates of the control points without
+having to re-calculate their new positions by himself.
+\index{design decisions}I tried to make the specification and modification
+of {\it \TeX tyl's\/} primitives as painless and intuitive\index{user intuition} as possible. We
+usually think more in terms of connecting dots and placing graphic elements,
+ and not in terms of slopes, tangents and velocites which are messy at best,
+and get more cumbersome from there.\par\filbreak
+
+Geometric transforms\index{transformations, {\it see } transforms}
+\index{geometric transforms} like scaling
+(independently in the $X$ and $Y$ directions), rotating about the ``center''
+of the graphic object (a primitive or a figure), and translating in the $X$ and $Y$ directions are
+available for most of the primitives. The
+format\index{{\bf transform}} for specifying some transformation on
+the currently-specified points\index{transforms, parameters, format}
+is:\par
+\qquad{\btt T}\Coma\Prm{Sx}\Coma\Prm{Sy}\Coma\Prm{Tx}\Coma\Prm{Ty}\Coma\Prm{Rot}\Coma\par
+\noindent where \Prm{Tx} and \Prm{Ty} are translations of the object in
+ the $X$ and $Y$ direction by some signed distance according to the
+current units of \Prm{measure}. \Prm{Rot} is a signed integer angle (in
+degrees) by which
+to rotate the primitive or figure counter-clockwise about its center.
+ \Prm{Sx} and \Prm{Sy} are\index{transforms, parameters}
+{\it integer\/} scale parameters representing the {\it floating-point\/} values of the
+transform multiplied by 100 and truncated.
+To obtain any transform, {\it all\/} the transform parameters must be
+specified\index{transforms, parameters, requirement}.\par\filbreak
+
+Two other special types of graphics capabilities are meant to be utilized
+ by a
+knowledgeable program, such as the music-typesetting\index{music} system being written at
+the Ohio State University. These are:\par
+\medskip
+{\btt\char'134 special\char'173 tyl tieslur} \Opt{measure}
+ \Prm{minthick}\Coma \Prm{maxthick}\Coma\par
+\hfil \Prm{numpts}\Coma
+$ x_1\, \Coma\> y_1\, \Coma\>\ldots\>\Coma\>
+x_{\rm numpts}\,\Coma\> y_{\rm numpts}${\btt\char'175}\par
+
+\noindent which draws a smooth spline curve through the
+ points\index{{\bf tieslur}}\index{slurs}\index{ties}
+$\left(x_i,\;y_i\right)$,
+and uses a built-in algorithm to figure out the correct thicknesses of the
+tie/slur between \Prm{minthick} and \Prm{maxthick}. These control points
+ are also in first quadrant cartesian coordinates, and a circular-pen
+vector-type is used to draw the
+spline.\index{tieslur, pen type}\index{tieslur, thicknesses}\index{tieslur,
+vector type}\par\filbreak
+
+\medskip
+{\btt\char'134 special\char'173 tyl beam} \Opt{measure} \Prm{staffsize}\Coma
+\Opt{beamtype}\par
+\hfil $x_1\, \Coma\> y_1\, \Coma\> x_2\, \Coma\> y_2${\btt\char'175} \par
+
+\noindent draws a music beam\index{{\bf beam}} from $\left(x_1,\;y_1\right)$ to
+ $\left(x_2,\;y_2\right)$ (also in first quadrant space)
+using a beam of \Prm{beamtype}\index{beam-types}
+ {\btt G}\index{{\tt G}-marker} for a {\it grace\/}-note sized
+beam,\index{beams, sizes}
+ or {\btt R}\index{{\tt R}-marker}\index{beams, default size} (the default) for
+{\it regular} sized beams in the specified
+staff-size\index{beams, staff size}.
+ For a description of staff sizes, see \cite{ross}.\par\filbreak
+
+Finally, there are two more |\special|s that \TT can
+understand. These are used to group any of the above graphic primitives together
+into a ``symbol.''\index{symbol, {\it see} figure} The commands are:\par
+\medskip
+{\btt\char'134 special\char'173 tyl beginfigure} \Opt{measure}
+\Opt{transform}\par
+\hfil{\leavevmode\hbox{$\>\lbrack${\btt W}$\>\langle width\/\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\langle height\rangle\,\rbrack\,$}}
+{\leavevmode\hbox{$\>\lbrack${\btt F}$\>\langle width\/\rangle\,
+\raise 2.5pt\hbox{\btt ,}\,\langle height\rangle\,\rbrack\,$}}
+{\btt\char'175}\par
+\noindent which opens a level of definition\index{{\bf beginfigure}},
+and\par
+\medskip
+{\btt\char'134 special\char'173 tyl endfigure}{\btt\char'175}\par
+\noindent which closes that level of definition\index{{\bf endfigure}}. These are analagous to
+{\it push} and {\it pop} kinds of operations, with many levels of
+recursive definition available. The optional {\btt F}
+marker\index{{\tt F}-marker} specifies the final optimal
+ width and height of the figure,\index{figures, fitting to size}
+in terms of units of \Prm{measure}. This is useful for fitting a figure to a
+specific size, so that you do not have to compute the scaling parameters
+by yourself. This ability is often desireable if the figure was created by
+some program that output the figure at a different scaling factor than you
+require on the page. The {\btt W} marker\index{{\tt W}-marker} indicates the
+width and height of the figure at the size that it was originally written,
+which we assume the figure-making program output along with the definition
+of the figure elements.\index{programs making figures}\index{graphic editors}
+ For most
+ practical purposes, you can let \TT\
+compute the size of the figure as it was originally created, and then let it
+fit the figure to the sizes requested by the {\btt F} marker.\par
+
+Besides the implicit transform parameters created by using the {\btt F}
+and/or {\btt W} markers, an explicit figure-level
+tranformations\index{tranforms, figure-level}\index{figures, tranforms}
+can be specified using the \Prm{transform} capability using units of
+\Prm{measure} (or the default units of printer's
+points).\index{measurement,default}
+ Also, any transforms applied at a level of
+definition are additive\index{transforms, additiveness}
+over the lower-level definitions\index{figure definitions} and any
+transformations that they may have
+locally\index{figures, transforms}.\par\filbreak
+%\vskip 10pt
+%If this were the {\TeX book}, this paragraph would have three ``dangerous
+%bend'' signs in front. \TT currently has a temporary
+% ability to alter certain internal global
+%variables from the |\special| level. This is meant mostly for debugging,
+%hacking, and generally limited use. You are on your own with these, and
+% I would discourage much use of it (since it may disappear soon).
+% The basic call is\par
+%{\btt\char'134 special\char'173 tyl param} \Prm{param-num} \Prm{value}{\btt\char'175}\par
+%\noindent where \Prm{param-num} is currently one of\index{{\bf param}}
+%\begin{itemize}
+%\item {\tt 1}: for changing the current minimum number of intervals per
+%spline span
+%\item {\tt 2}: for changing the minimum number of intervals per arc
+%spline-span
+%\item {\tt 3}: for debugging the tie/slur clamping mechanism (skip it or not).
+%\end{itemize}
+% and \Prm{value} is the new value. For example,
+%\begin{verbatim}
+% \special{tyl param 1 4}
+% \special{tyl param 3 = -1}
+%\end{verbatim}
+%the first sets the minimum number of intervals per spline span to $4$, and the
+%second call says to {\it not\/} skip the clamping mechanism (the |=| sign
+%is optional, of course). Once these
+%variables are set, they are in effect for the rest of the document, or until
+%changed with a matching |\special{tyl param...| invocation.
+%See later chapters to understand these terms.\par
+
+\Makeodd
+\chapter{When Things Go Wrong}
+Despite the best of examples and directions about careful typing of
+\hbox{|\special|} strings, there are times when \TT will
+get upset and complain about some situation or input. Fortunately, \TT can
+continue from most of them (like missing or incorrect parameters), and
+just report them in the |.tlog| log-file\index{{\tt .tlog}
+file}\index{{\TT}, {\tt .tlog} log-file}
+for you.\index{{\TT}, error handling} An example run of \TT might look
+like:\filbreak
+\begin{verbatim}
+ >textyl
+ This is TeXtyl, version ...
+ DVI-input File Name: myfile.dvi
+ DVI-output File Name :
+ (different than input name)[default of myfile.tyl]
+ [1] [?2]
+ Output written on myfile.tyl
+ Log written on myfile.tlog
+ Some error(s) occurred. Please check Logfile for details.
+ Assume that the outputfile is incorrect
+\end{verbatim}\filbreak
+Rather than annoy you at the terminal with long error messages, \TT puts a
+|?|\index{{\tt ?} flag} mark to indicate that some error happened. Since it wrote the
+|.tyl|\index{{\tt .tyl} file} output file, \TT must have recovered\index{{\TT}, error recovering}
+well enough to finish its job,
+but the output probably does not look right. The |.tlog| file might look
+like\filbreak
+\begin{verbatim}
+This is TeXtyl, Version blah...
+Reading File: myfile.dvi
+ [1] [
+Error in fig# 1 on page 2
+Arc Thickness not found. Setting to 1
+2]
+Output written on myfile.tyl
+Log written on myfile.tlog
+\end{verbatim}\filbreak
+\noindent which was just a missing parameter to the |\special{tyl arc ...}| string.
+You will have to re-edit the file and insert the correct thickness.
+\index{{\TT}, error messages}
+All the error messages that are written to the |.tlog| file try to pin down
+the error to the figure number on the error-containing page. These
+references to the position of the error
+come from the $n^{\rm th}$ figure on the page (the $n$ count is relative to
+each page, and starts from 1), and the page number is from {\TeX}'s
+|\count0| register that enumerates pages.
+ Sometimes \TT
+cannot always determine the exact figure on the page
+(e.g., if we forget to close a figure definition with an
+|endfigure|), and so estimates at least the bad page in question. For the most
+part, the error is a just missing parameter,
+ or a bad parameter to a |\special| string being read by \TTN.\par\filbreak
+
+ However, there are a larger number of errors that \TT
+found ``surprising'' \index{errors, internal}\index{surprise errors}
+and so marks these errors on your screen as |?! |.\index{{\tt ?!} flag} Most
+of these internal errors are based on the functionality of {\DVI}type
+concerning {\smallrm TFM} information, and the structure and commands
+of the {\DVI} file being read. \TTN, like {\DVI}type, will complain, and
+possibly roll over and die gracefully.\par\filbreak
+
+The other ``surprising'' errors that \TT might complain about are really
+internal to \TTN, and constitute a bug,\index{{\TT}, simple problem} or just a
+compile-time constant that is too small. These easily-fixed surprises are
+\begin{itemize}
+\item |too many dvistrings|. This page required more {\DVI} bytes than usual.
+ Have your local maintainer\index{local
+maintainer} increase the size of the internal buffer used for storing a
+page's {\DVI} bytes.
+\item |too many spline segments required|. The spline you tried to set might
+be too large/long for the space allocated for a spline's description.
+That size is also a compile-time constant. \TT
+will reduce the number of control points that it interpolates so that you
+can at least get the output, and so that it does not die ungracefully.
+\item |figure definition not closed at end of page|. You forgot a
+|\special{tyl endfigure}| command in some figure definition on the page. \TT
+will not typeset that figure, and will go on to the next page.
+\end{itemize}\par\filbreak
+There are also some down-deep errors that could potentially (although
+doubtfully) show up. These
+are probably some error in the vector fonts being referenced by
+\TTN.\index{{\TT}, serious problems}
+\begin{itemize}
+\item |min radius of vector font is zero|. The referenced vector font's
+{\smallrm TFM} information reported that the font's radius size
+is smaller than it was designed to be.
+ \TT will make a temporary fix so that it can
+continue, but the output figure will be wrong. Have the local maintainer
+re-check the vector fonts.
+\item |bad dydx|. This is a rare problem. Somewhere, the code to typeset a
+diagonal line segment referenced an impossible $dy/dx$ combination, and cannot find
+any vector character to fit. \TT will continue, but you may see a
+tiny glitch in your figure.
+\item |dx is too big/small|, |dy is too big/small|. This is a problem. For
+some reason, a distance was referenced that is out of the range of the
+32-bit representation of integers. This really should never happen.
+\end{itemize}
+
+For the most part, \TT can recover from errors that it encounters, and give
+a brief summary in the |.tlog| file. Other errors have to do with {\smallrm
+TFM} file information, and are outside the scope of \TT to handle
+gracefully. The most serious ``surprise'' errors are bugs, and you should
+report them directly to me with a copy of the |.tex| file, or at least a
+detailed printout from {\DVI}type of the |.dvi| file processed by \TTN.\par
+
+\Makeodd
+\chapter{Design Details}
+ The top-level of \TT is taken directly from the
+ {\DVI}type\cite{dvitype}\index{DVItype}
+ program, with a few
+modifications. Most of the diagnostic functionality of {\DVI}type is
+maintained, but without the user interface (\TT assumes it is supposed to
+process all the pages).
+ A ``hook'' was inserted into
+the program to handle the {\TeX}
+|\special|s\index{handling specials}\index{specials, handling by {\TT}}
+that \TT understands
+(hereafter, ``special'' will refer only to those commands that
+\TT understands---other |\special|s are ignored, and simply output
+to the {\DVI} file without\index{specials}
+modification).\index{DVI file}
+ The {\DVI}type code was used mostly for its keeping\index{DVI
+position coordinates}
+track of the current {\DVI}\ {\bf h} and {\bf v} position coordinates
+on a page, and handling {\smallrm TFM} information\index{TFM information}.\par
+
+Basically, as \TT slurps in a {\DVI} file, it processes
+``normal'' commands
+in a normal way (i.e., just keeping track of positions and counters).
+ When it reads a |\special| string, it tries to interpret the parameters
+and expand the special, producing
+ commands to typeset the graphic using characters from special fonts.
+
+The result is a transformed {\DVI} file that now contains
+``normal'' (i.e., non-special, `put-that-character-there') dvi-commands
+as far as \TT can tell, after taking care of new font definitions
+and doing any bookkeeping of counters and internal references.\par
+
+\section{Vectors}
+\label{vectors}
+Several design decisions\index{design decisions} were made to give \TT the ability to
+typeset the graphics of the complexity that we desire. This ability is
+intrinsically bound to the fonts to be used, and the way that we use them.
+For this project, I had to create a font of short, oriented line segments\index{vector font}.
+This was to minimize the amount of information required to typeset a
+curve. One could address each pixel of the virtual device to draw the graphic
+(putting hundreds of periods from a font), but that is not
+device-independent, and the
+amount of data is huge in comparison to using line segments.
+ These line
+segments can be connected together rather smoothly to give the appearance of
+a continuous line segment or curve.\par
+ Using this scheme, described by Nelson
+and Saxe\index{Nelson{,} Bruce}\index{Saxe{,} James}
+ at Carnegie-Mellon University\cite{nelson-saxe}, I am able to typeset the correct
+character corresponding to the desired length and angle. I modified their
+font those
+angles cover the first and fourth cartesian quadrant system,
+\index{vector font, range of angles}
+and whose vectors are from the origin to points clockwise along the perimeters
+of semisquares of decreasing radii\label{semisquare}. They use this scheme in order to use the
+longest vectors\index{vector font}\index{vectors, typesetting with}
+ possible for a given distance (thus minimizing the number of
+characters to typeset), and also have shorter vectors for use in tightly
+curving lines. They use a semisquare (rather than a semicircle)
+ for a quick line-tangent intersection test in their algorithm to decide the maximum
+length vector to use that has a satisfactory variance from the tangent to the
+line.
+I really must give correct thanks to Dario Giuse\index{Giuse{,} Dario}
+ at C-MU\cite{dario} for first
+implementing the vector-font typesetting code that I subsequently modified
+for \TTN.\par
+
+ I modified the vector font for use with
+Metafont~79\cite{knuth-mf}, and was able to describe it
+in a device-independent manner. Because of the limitations
+of\index{Metafont, limitations}
+Metafont~79's\index{Metafont}\index{vector font, dimensions}
+and {\TeX}'s representation of character heights and depths, I could not accurately
+describe the character dimensions in such a way that I could leave the
+low-level typesetting details to {\TeX}
+through its idea of {\smallrm TFM} information. Thus, \TT has to take
+care of the details of calculating the correct dimensions for each character
+of each vector font. This calculation is done,
+ however, only as a particular font is first
+required, and the dimensions\index{vector font, computing dimensions}
+ are computed on-the-fly using the group of
+parameters found in the {\smallrm TFM} file that we have defined for our own
+use. After this initial parameter calculation, subsequent references to that
+font's {\smallrm TFM} information is accessible via a caching scheme.
+ The fonts contain such information as the measure of the maximum-length
+vector of the font, and the height and width of the pen used to draw the
+font ({\it all in scaled points}). \par
+
+Current plans for the vector fonts are for sizes in the range from about 1
+to 12 ``pixels'' for each of the three types of Metafont pens (circular,
+flat horizontal, and flat vertical).\index{vector font, sizes}\index{vector
+font, types} The fonts are
+actually device-independent in size, as our ``pixel'' is measured in
+absolute units of 16384 $(2^{14})$
+scaled-points\index{vector font, pixelsize}. However, there is a step within
+Metafont~79 that insures that the vector size is an odd-number of
+physical pixels computed at the final output-resolution. This is to avoid
+some discretization errors and the accompanying aliasing artifacts.
+ I expect the vectors drawn \index{vector font, pen-types}
+with circular pens (the ``cvec'' fonts)\index{vector font, cvec} to be the
+most utilized. Their
+endpoints are rounded and are positioned to coincide
+ so that the segments overlap slightly and
+meet up gracefully producing a smoother curve. Here are some examples of
+circular, horizontal, and vertical pens that can be used for
+different effects:\label{vect-pens}\index{vector font, pens, example}\par
+\noindent\hskip 1in\begintyl{35mm}[1in]
+\special{tyl beginfigure}
+\special{tyl line m 10 c 5 5 10 30}
+\special{tyl line m 10 h 15 5 27 30}
+\special{tyl line m 10 v 30 15 45 23}
+\special{tyl endfigure}
+\endtyl\par
+
+\medskip
+{\bf Beams}\par
+A similar scheme is used for the beam characters found within the music
+fonts\index{beam font}\index{music font}. The beam characters are in two types
+ (those for grace notes, and\index{beam font, types}
+those for regular notes) for the staff sizes\index{staff sizes} of music (numbered 0
+down to 8). See also \cite{ross}.\index{beam font, sizes}\label{beam-chars-sizes}
+ The font is also a set of short line-segments that will be
+connected to create a beam (some other program will have to know about the
+details of describing how to attach stems from the beams down to the notes).
+However, the beam characters are different\index{beam font, difference from vector font} from the vector fonts in that
+each staff size of music has one particular size of beam
+characters\index{beam font, relation to staff size}
+associated with it.\par
+
+ The beams are designed\index{beam font, design} to appear as if they are drawn
+with a flat-edged pen held perpendicular to a ruler (at all orientations).
+When a vertical pen is drawn along a path, the actual cross sectional
+distance of the line segment decreases with the angle (i.e., it is thickest
+when drawn along a line at zero degrees from the horizontal, and thinnest as
+it is drawn along a line approaching $\pm 90$ degrees). The way to maintain
+the appearance of consistent thickness of the line segments at all drawn
+angles is to actually {\it increase\/} the ``height'' of the vertical pen as
+a function of the angle from the horizontal. This function was geometrically
+derived to be the {\it secant\/} of the angle, which yielded in a scaling
+factor to apply to the original definition of the vertical pen's height.\par
+
+Another difference from the vector fonts is that the beam characters do not
+have to cover as large a angular range. The angles from the horizontal are
+less than 45 degrees on the average,\index{beam font, range of angles}
+ and the lengths of the beam characters\label{beamsizes}
+are no smaller than the width of a quarter note for that staff size. The
+current implementation defines the beam characters in four groups per staff
+size: regular beams in lengths\index{beam font, lengths}
+ of 1.0 and 1.5 quarter-note-lengths, and
+grace-note beams in lengths of 0.5 and 0.66 grace-note-lengths.\par
+
+ The scheme
+of typesetting is similar to that of the vectors, but an added constraint is
+resolved. Since the beam characters use a slightly smaller set of fixed angles from
+the horizontal,\index{beam font, constraints}
+we have to choose the best beam character to use such that we use
+the maximum length beam character {\it and\/} try to obtain the least
+deviation from the angle requested to fit the beam font.
+ The dimensions of these beam characters
+are computed only as each music font is required, and a caching scheme
+is maintained to avoid unnecessary re-loading of font information and
+subsequent definition in the {\DVI} file. \par
+
+\section{Splines}
+\label{splines}\index{splines, families}A second decision\index{design decisions} that I made
+ for the current implementation of this system
+was to use Catmull-Rom\cite{cagd} splines as the default instead of B-splines.\index{splines, default type} The
+reasons for this are two-fold: (1) Catmull-Rom splines\index{Catmull-Rom splines} are of the same
+family as B-splines, but are {\it guaranteed} to produce a smooth curve {\it
+through} the control points, whereas B-splines only approximate within the
+convex-hull described by the control points. Therefore, Catmull-Rom splines
+are a true interpolant; and (2) when dealing with the ties and slurs,\index{ties}\index{slurs} the
+user wants the curve to go through the five points that he specifies (left,
+middle and right points). With B-splines, he would have to {\it estimate}
+the position of the middle control points in order to get the curve to be
+in the correct position. Catmull-Rom and Cardinal splines are just
+as easy to calculate, and usually achieve the effects that we need.\par
+
+I have also experimented with operations on the B-splines to achieve true
+interpolation. This method was described by Barsky and Greenberg\cite{barsky}
+ describing how to re-compute B-spline control-points
+so\index{B-splines, recomputing points}
+that the resulting spline would interpolate through desired points (inverse
+interpolation)\index{splines, inversion}\index{splines, interpolation}.
+ It actually does not require very hairy mathematics.
+Arcs and circles are implemented\index{arcs, representation}
+ using this spline primitive. The arc\index{arcs, control points}
+control-points are computed (or pre-computed in the case of circles,
+\index{circles, control points} and\index{circles, representation}
+ellipses\index{ellipses} which are just scaled circles)
+and then are used in the inversion
+procedure so that the resulting B-spline passes smoothly {\it through\/}
+those original points. We will later describe further this usefulness of
+implementing various graphic objects using lower-level primitives.\par
+
+I also use the Catmull-Rom interpolation when computing the different
+thick\-nes\-ses\index{line thickness} along both the tie/slurs and the var\-iable-thick\-ness splines
+(``ttsplines'')\index{ttspline}\index{ttspline, line thicknesses}.
+ I need to interpolate from the current control-point's
+thickness along the curve to the next control-point's thickness, and can do
+this smoothly by using the interpolation methods available when computing
+the splines anyway.\par
+
+Since we have the ability to draw splines of varying thickness, we can
+easily implement ties and slurs\index{slurs} (those long
+ arcs connecting groups of notes\index{tieslur, implementation}
+on a musical score), since they are splines of usually five control points,
+having the specified {\it minthick\/} thickness at the left and right, and
+{\it maxthick\/} thickness in the middle. \par
+
+\Makeodd
+\chapter{The Implementation}
+\section{Overview}
+\TT is currently nearly 9000 lines of Pascal code (not {\smallrm WEB}). It is
+a prototype, and {\it not} a product.
+Testing was simplified by the ability to pre-view\index{DVI file, previewing} the contents of the
+{\DVI} file on Sun workstations using the {\smallrm DVISUN}
+\index{DVISUN}\cite{dvisun} program. It was written using
+Berkeley Unix\footnote{Unix is a trademark of Bell Laboratories}\index{Unix}
+ Pascal\index{Pascal}, but is not dependent on that operating system
+except for
+differences in I/O. There are also differences in
+efficiency/ease of reading from files---{\tt read}s versus {\tt get}s. I/O
+routines for both byte types (signed and unsigned)
+ are written and available, and have been set up
+for easy porting to other machines.\par
+
+The idea for handling {\DVI} files is to read each byte
+into a buffer until we read an {\tt eop} (end-of-page marker), when we will
+write that buffer out into a file, and start a fresh buffer with the next
+page. If we encounter a |\special| in our reading, we treat it as a
+\index{specials, handling}\index{macro-expansion}
+macro-expansion---substituting {\it our} byte-string for the byte-string
+that represented the invoked special, and put this ``tyled''\index{tyling} string into the
+buffer for subsequent output. A nice feature of this slurping is the parser
+for the specials. It is simple and extensible enough to easily accommodate
+new \TT primitives, and different or additional parameters.\par
+
+Besides being careful about the expansion of the |\special| string, \TT
+has to keep track of any newly-defined fonts for insertion into the
+{\tt postamble} in the {\DVI} file, and do some bookkeeping for
+{\tt bop} backpointers, and file byte-length.\par
+
+Most of this chapter discusses the
+algorithms and data-structures of \TT at various levels.
+We'll start with the high-level and user concepts, and work our way down
+into the details of outputting the actual bytes into the {\tt .dvi} file.\par
+
+\section{Primitives}
+The user's interface to \TT is through |.tex| text files.\index{{\tt .tex}
+text file}
+He types in the |\special| strings for {\TeX},\index{{\TeX}}
+and fills in the name of the primitive to typeset
+and any parameters to modify the attributes of the
+primitive. This |.tex| file is converted by {\TeX} into a |.dvi| file which
+is then given to \TTN.
+\index{primitives, modifying attributes}
+For the most part, all of the graphic primitives\index{primitives}
+ in \TT have common attributes
+of\index{primitives, attributes}\label{prims-attribs}
+\begin{itemize}
+\item bounding-box\index{bounding box},
+\item line thickness,
+\item pen-type (see section~\ref{vect-pens}),
+\item line style\index{line style}
+\end{itemize}
+that describe basic appearances of an item. A ``bounding-box''
+\index{bounding box} describes the
+minimum and maximum $X$ and $Y$ values of a minimum-sized
+orthogonal rectangle that encloses the primitive.
+I'll describe the primitives and
+point out their additional or modified attributes to those above. My plan
+was to provide a number of primitives that were conceptually built upon
+lower-level primitives, and share similar representations wherever possible.
+For example, a |tieslur| is clearly built upon the representation\index{tieslur, representation} of a
+spline primitive. With this concept, I was able to represent the following
+primitives and effectively ``draw'' them by reducing to easier primitives,
+\index{primitives, reduction of} down to the vector-font level.\par\filbreak
+\medskip
+\noindent{\bf Line}\par
+The most basic primitive is the |line|, as all other non-figure
+primitives\index{line segments}\index{{\tt line}}
+reduce to the same routines that produce line-segments. A line has
+ attributes of bottom-left and upper-right endpoints,
+and is drawn from left to right in {\DVI}-space, which is similar to
+fourth-quadrant cartesian space, but $y$-values are positive-increasing going down the
+y-axis\index{DVI-space}. In section~\ref{vect-setting} I will describe how the line is
+``drawn'' on the virtual page using the vector-font characters.\par
+\medskip
+\noindent{\bf Spline}\par
+The spline primitives (|spline| and |ttspline|) have the attributes of a
+\index{splines, attributes}
+line, and in addition:\index{{\tt spline}}\index{{\tt ttspline}}
+\begin{itemize}
+\item spline type (see section~\ref{splines}),
+\item openness,
+\item a count, and a list of control-points.
+\end{itemize}
+The spline primitives all use the same basic algorithm for interpolation of
+its control-points (``knots'') using one of three spline bases: the B-spline
+basis, the Cardinal basis, and the Catmull-Rom basis. The difference is mainly
+in the choice of basis matrix.\index{splines, basis}\index{splines, B-spline}
+\index{splines, Catmull-Rom}\index{splines, Cardinal}\par
+
+|Ttspline|s have an additional attribute that describes the thickness of the
+spline at each control point. \TT uses the same method of
+spline\index{{\tt ttspline}}
+interpolation for computing the varying thicknesses over the length of the
+spline as for computing the position of the line-segment positions over the
+spline.\par
+\medskip
+\noindent{\bf Ties}\par
+A |tieslur|\index{{\tt tieslur}} is just a subset of
+ttsplines\index{tieslur, relation to ttsplines}. It has exactly $5$
+control-points,\index{tieslur, attributes}
+which is sufficient to describe even the longest slur. It needs two
+specified line thicknesses: (1) a minimum thickness value at the far end points,
+and (2) a maximum thickness in the middle of the slur. \TT uses an internal
+algorithm to figure the other thicknesses of the control points. This then
+reduces to a ttspline of five control points for interpolation. The only
+other difference from a |ttspline| is in the
+``clamping'' mechanism\index{splines, clamping}\index{clamping}\index{ttspline, clamping}\index{tieslur, clamping}.
+ Let me explain: optimally, we would like the smoothest possible transitions
+of line thicknesses along a varying thickness spline, but this is still
+subject to the aliasing artifacts
+(``stair-steps'',\ ``jaggies'')\index{jaggies} of the printing device's
+resolution (you can't have 3.3 pixels in black and white). We could have a
+vector font for every possible pixel-size of the printer, and thus be able
+to achieve as smooth a line as the printer is capable. This could easily
+require the printer to use dozens of different fonts per page (imagine a
+page of math, text, and a complex figure) which most printers' limited font
+memories\index{output device, font memory} cannot handle\par
+We are faced with either not being able to print the page (sort of
+defeating the whole purpose), or to reduce the number of fonts required to
+set that particular figure. This reduction is called ``clamping.'' We make
+sure that a requested vector size is in a pre-selected set of fonts, and
+then modify that size if it is not in that set. Usually this involves just
+adding/subtracting a vector-pixel unit and iterating again through the test-modify
+loop until the size fits.\par
+
+Ties and slurs use the same basic clamping mechanism as |ttspline|s
+(described above), but also have a built-in way to select and compute the
+thicknesses along the length of the spline. This means that \TT decides the
+ thicknesses for the tie/slur using its own algorithm based on the user
+specifying the maximum and minimum thicknesses.\par
+
+\medskip
+\noindent{\bf Arcs}\par
+|Arc|s \index{{\tt arc}} are described\index{arcs, attributes} in terms of a radius, an initial and
+final angle, and an optional center coordinate. Internally, this is
+transformed into a uniform-thickness spline.\index{arcs, representation}
+ Closed circles are a special
+case\index{circles} of arcs,\index{circles, relation to arcs}
+\index{arcs, circles} and so we can pre-compute
+the control points of the closed spline\index{arcs, closed splines} to describe the
+circle,\index{circles, control points} and then just scale to fit the desired
+radius and translate its center to the required coordinate. Ellipses,
+\index{arcs, ellipses} \index{ellipses} although not a named primitive, can
+be simulated effectively by specifying a closed arc (a.k.a\ circle) and
+\index{ellipses, relation to circles}
+transform it by scaling as desired in either $X$ and/or $Y$, since circles are a
+special case of ellipses.\par
+
+Open arcs are represented by an open spline\index{arcs, open}\index{arcs, open spline} whose control
+points were computed\index{arcs, control points} by sampling along the length
+of the arc. We do this sampling in 16 places using the parametric
+representation of the arc:
+$$x = r \cos\theta \> {,}\>\> y = r \sin\theta \qquad
+{\rm\ for\ } \alpha_1 \le \theta \le \alpha_2 $$ and
+$\theta$ is a multiple of ${1\over 16} (\alpha_2 - \alpha_1)$. After we obtain
+these control points, we can interpolate over the knots and obtain the
+spline segments.\par
+
+In reality, we have to treat arcs with a little more special care
+than simple splines. In computing open splines, we have to do some tricks
+with the list of control points. We introduce ``phantom'' control
+points
+which help the endpoints look nicer. See \cite{wu-abel} for a better explanation
+of phantoms\index{phantom control points}. The problem with arcs is that the
+\index{arcs, phantoming}endpoints would look too ``flat'' if we used the normal phantom-ing method\index{phantoming}.
+What I do is to create two extra control points (one before the start of the
+actual arc, and one after) so that we preserve roundness by continuing
+around the arc with the same parameters to the representation. Then I {\it
+lie\/} to \TT 's innards, saying, ``these extra points are not really part
+of the arc to typeset. They are the phantoms, so don't compute any for
+us.''\index{lies} After that, everything else works pretty much the same as
+regular open-splines in ``tyl''-ing\index{tyling}. It should be apparent that splines are
+the largest class of primitive types that \TT deals with, since they are
+capable of simulating/representing most graphical objects that we ususally
+work with.\index{splines, use in simulating}\par
+\medskip
+\noindent{\bf Beams}\par
+The last basic primitive that \TT offers is the |beam|. Beams\index{{\tt beam}} are
+graphically equivalent to straight line-segments. The only difference
+is\index{beams, difference from lines}
+that they have a different font that they use. This font and the particular
+characters from it are determined by the beam's two attributes:\index{beams, attributes} staffsize
+and beam-type. Staff size refers to the spacing of the staff lines of
+a\index{staff sizes}\index{staff lines}
+music score, which also determines the size of the music symbols to use. It
+is analagous to defining the point size of a character given the interline
+spacing measure. See \cite{ross} for examples of each size, also the
+discussion of the beam characters on page~\pageref{beam-chars-sizes}. The
+beam-type attribute refers to the size of notes that the beam connects:
+regular or grace notes. More will be said about beams in
+section~\ref{beam-setting}.\par
+\medskip
+\noindent{\bf Labels}\par
+|Label|s\index{{\tt label}} are not really considered primitives, but are included
+here for convenience and completeness. They have no correspondence
+with any of the other graphic-primitives described above, but may be
+included in figure definitions.
+Labels have the attributes of starting position, font-style, and
+the string-body of the label. They are not transformable at the
+local level (but are affected by figure-level transforms),
+ and are basically pretty simple in nature. {\TeX} macros are not expanded
+within the string-body by \TTN; you should use {\TeX} do to any
+smarter label-typesetting.\par
+Currently, the built-in list of fonts selectable for
+ use\index{fonts, for labels}\index{labels, font face-styles} in placing
+labels is:\label{labelfonts}
+\begin{itemize}
+\item amtt10 (selectable by specifying face |1|)
+\item amb10 (face |2|)
+\item amsl10 (|3|)
+\item amtt8 (|4|)
+\item and amsl8 (|5|)
+\end{itemize}
+The characters from these fonts are simply set, as \TT does not
+worry about kerning or ligatures, and spacing is done with
+information found in the parameter section of the |.tfm| file.
+ This font mapping list is only temporary, and
+can be changed within the \TT source program.\par
+
+\section{Procedural Handling}\label{proc-handling}
+After \TT picks apart the |\special| strings\index{special} from the {\DVI} file,
+and determines the parameters (both specified and defaulted) for the specified
+primitive, \TT makes a note about where in the file the start of the special
+occurs, and passes the data to a {\it handler}.\index{handlers} A handler is
+a procedure that is specific to each primitive (e.g., there is a
+|linehandle|,\index{handlers, linehandle} and a |ttsplinehandle|
+procedure\index{handlers, ttsplinehandle}) that knows about the internal
+representation of each primitive, and how to ``handle'' the data passed to
+it. We'll talk more about the internal representation in the next
+section.\par
+
+The handlers' primary responsibility is to take care of primitive-level
+geometric transformations, and then to decide what to do with the data,
+ depending on the context of\index{handlers, functionality}
+the primitive being dealt with. This context is determined by whether the
+primitive is contained in a figure, or is by itself. If the primitive is
+{\it not}
+contained in a figure (i.e., the |\special| string was not within a
+|beginfigure| -- |endfigure| pair), the handler
+\begin{enumerate}
+\item computes the bounding box for the primitive\index{bounding box},
+\item transforms the
+coordinates of the primitive into {\DVI}-space\index{DVI-space},
+\item offsets them by the current position on the page,
+\item outputs a {\DVI} |push| command,\index{{\tt push}}
+\item calls an appropriate procedure to actually typeset the primitive,
+\item and finishes with a |pop| command.\index{{\tt pop}}
+\end{enumerate}
+We need to transform coordinates from our first-quadrant cartesian space
+into {\DVI}-space because the lower-level procedures that actually
+typeset and output the vector characters assume that they are putting the
+characters onto a page of the {\DVI} file.\index{transform to DVI space}\par
+
+If the primitive's definition is part of an enclosing figure definition, we
+delay output of this primitive until the figure is completely defined. The
+handler does any simple geometric transformations required, and then
+ simply packs the data into another structure, and sort of ``stacks'' this
+new structure (let's call it an {\it item}\index{item}) onto a list of items
+that are contained in this figure. Our reference to ``figure''
+here could also be a sub-figure within an enclosing figure, but for now
+we'll just deal with primitives in terms of simple, one-level figures. When
+the figure definition is complete, the |figurehandle|
+procedure\index{handlers, figurehandle} is called. We will get into figures
+more in the next section, but for now, we'll say that this handler
+\begin{enumerate}
+\item computes the bounding box of all the sub-items of this figure,
+taking care of necessary transformations,
+\item outputs a |push| command,
+\item unpacks each sub-item, and transforms its coordinates into {\smallrm
+DVI}-space,
+\item calls the item's particular primitive handler with a special flag
+that says to simply call the appropriate procedure for immediate typesetting
+without doing any further transforms,
+\item and finishes with outputting a |pop| command to the {\DVI}
+file.
+\end{enumerate}
+The design of these handlers was to maintain the idea
+of\index{handlers, design idea}
+``information-hiding'' such that each handler (primitive- or figure-level)
+would know only about one level of abstraction below it.\par
+
+\section{Figures}
+Let's look more closely at what we called ``items'' \index{item}in the previous section,
+and how we really represent figures. Up to this point, I have been rather
+ambiguous when referring to ``primitives.''\index{primitives, definition of} In some cases, it meant
+{\it graphic-primitives\/} (like lines and splines); in other cases it meant
+{\it the things that we can make pictures with\/} (like figures, sub-figures,
+and graphic-primitives). Well, now the ambiguity gets worse. I'll try to be
+careful about distinguishing ``graphic-primitives'' when I mean primitives that
+are reducible to vector characters, and use ``primitives'' when I mean
+graphic-primitives {\it and\/} figures. The reason for
+the difference is that since we have the ability to do recursive sub-figure
+definitions, a ``figure'' (as denoted by a |beginfigure|--|endfigure| pair)
+becomes a building block (just like graphic-primitives) for
+that enclosing figure's definition. It is analagous to the programming
+language concept of \Prm{block}, where (in BNF notation)
+\vspace*{-10pt}\begin{verbatim}
+ <figure> ::= <primitive> / <primlist>
+ <primlist> ::= <beginfigure> <primlist> <endfigure> /
+ <primitive> <primlist> / <empty>
+\end{verbatim}
+where \Prm{primitive} is what we previously referred
+ to as an ``item,''\Prm{beginfigure} is
+ denoted by |\special{tyl beginfigure}|, and
+\Prm{endfigure} is denoted by |\special{tyl endfigure}|. Refer back
+to page~\pageref{sub-figures} for an example of sub-figures.\par
+
+\medskip
+\noindent{\bf Items}\par
+The ``item'' data structure contains the attributes for graphic-primitives,
+as outlined in section~\ref{prims-attribs}, and also contains
+attributes for a figure like:
+\begin{itemize}
+\item any figure-level transformation parameters,
+\item a ``name,''
+\item and the list of items contained in this figure.
+\end{itemize}
+As you may surmise, this can yield a linked-list of linked-lists when built
+to represent a complex nested figure. In our previous discussion of
+handlers, one mode of their operation was to ``pack and stack'' the data
+into an item. Packing\index{item, packing} is easy enough to understand, but putting this
+structure in the correct place is tricky. When an item is created and filled
+with the appropriate parameters in a graphic-primitive's handler, there is a
+notion of ``context''\index{figures, context} which refers to the depth of recursion
+of sub-figures. A depth of $0$ means that there is no higher-level figure, a
+depth of $1$ means that any primitives encountered will belong to an
+outermost level figure, etc. When \TT comes across a |beginfigure| special
+string, it changes the recursive-definition context, and names that figure
+with that depth number. After that, any graphic-primitives that are
+encountered belong to that named figure in that context. An |endfigure|
+special will decrement the depth of recursion, and thus will change context
+back to the previous context. If this new context has a depth of $0$, then
+we know we have closed the outermost level of figure definition, and thus
+we are ready to typeset the entire figure.\par
+
+Let's look at how items are inserted\index{item, inserting} onto our data structure so that context
+is maintained. \TT uses a procedure called |pushItem| that takes an item and
+puts it on the correct list (or sub-list) according to the current figure
+context. Roughly, the algorithm is a simple insert, based on a key of
+depth-name.
+\begin{tabbing}
+\hskip 1cm \= Start from the front of the list of this figure\\
+ \> while \= the list is not empty\\
+\> \> Look \= at the item\\
+\> \> \> if it is \= a figure of the current context\\
+\> \> \>\> then we are done searching. do an insert\\
+\> \> \> otherwise {\it there must be a sub-figure lower on the
+list}\\
+\> \> \> \> look for the next item on the list that is a figure\\
+\> \> \> \> and start the next search from its list
+\end{tabbing}
+I really simplified the explanation of the
+insertion scheme here, but the important idea is that of looking for the
+correctly labelled figure-list and inserting the item there.\par
+
+Once the structure is built, and \TT determines that it is ready to typeset
+the entire figure, it traverses\index{item, traversing} the structure to compute and note the
+bounding boxes of the sub-figures (and their bounding boxes, too).\index{bounding
+box}
+ We need to do this in case there are any\index{transforms, figure-level}
+figure-level scaling or rotations of graphic-primitives which are performed relative
+to the center of the bounding box of the primitives contained in the
+figure. As we traverse the sub-figures, we do any required sub-figure
+transforms, record the dimensions of the bounding box, and pop up a level.
+When our traversal has reached the top level, all the figure's primitives
+have been transformed according to the recursive definition's specifications
+(i.e., the transforms are additive as we descend in recursive
+depth).\index{transforms, additiveness} If there are any top-level transforms
+to be taken care of,\index{transforms, top-level} we revisit the lists of
+primitives, performing the transforms.
+Finally, at
+this point we are ready to re-traverse the structure, grab each
+graphic-primitive, unpack it, transform it into {\DVI}-space,
+and give control to its handler for immediate typesetting.\par
+
+If you really want to get picky, the contents of a figure are not
+typeset and output until the last balancing |endfigure|\index{{\tt endfigure}} is encountered. It
+is at the current position on the page where this |endfigure| is set that
+the origin of our figure is placed. We can get away with this condition
+because specials are viewed by {\TeX} as ``boxes'' of zero width, and so a consecutive series of
+|\special|s do not change the current position on the page relative to the
+first invocation of the list. If, however, the user types in normal
+{\TeX}-typesettable text in the middle of a list of |\special|s defining a
+figure, the current position will move, and our figure will be shifted down
+to the position where the final |endfigure| is invoked. This might make him
+unhappy. My advice is to think of the figure/picture as an atomic entity,
+whose contents is strictly a list of |\special| strings defining that
+figure.\par
+
+
+\section{The Fonts}
+The whole basis of this program lies in the ability to typeset graphics with
+characters. Thus we have two families of fonts: the vector fonts (originally
+designed at C-MU\cite{nelson-saxe} by Bruce Lucas\index{Lucas{,} Bruce}),
+ and the beam fonts (part of the music
+fonts for the {\it MusiCopy\/}\index{MusiCopy} project).\par
+
+\TT converts the requests for line-drawings into commands to typeset these
+characters of line segments. See Appendix~\ref{font-examples}
+for examples of these characters. Since Metafont~79\index{Metafont} limits the {\smallrm
+TFM} information to 16 heights and depths, we have to do the computations of
+the character dimensions ourselves.\index{fonts, computing dimensions of}
+ This is easy to do as \TT has the
+correct dimensions for each character described in Pascal code in such a way
+that only a couple parameters from the {\tt .tfm} file need to be accessed
+in order for the code to define the exact (internal) dimensions for a font.
+In essence, the basic description of the vector and beam fonts are
+hard-coded in \TTN , in a manner independent of the actual size of the
+pens used to draw them.
+This ``on-the-fly'' font calculation is done only as needed, and then the
+font information is cached and noted so that future requests for that font
+will not require us to re-compute these dimensions.\par
+
+Within the modified {\DVI} file,
+\TT defines these new fonts and begins numbering from 300,\index{fonts,
+numbering} as a sort of
+``signature.''\index{{\TT}, signatures} So if you look at this new
+{\DVI} file with {\smallrm DVI}type, you can tell the parts that are typeset
+figures by noting the places in the listing that reference a font numbered
+above 300.\par
+
+\subsection{Vector Setting}\label{vect-setting} The vector fonts themselves,
+as described in section~\ref{vectors}, are typeset using the method
+described by Nelson\cite{nelson-saxe}, and I'll describe how \TT does it. In
+section~\ref{proc-handling}, we made mention that a graphic-primitive's
+handler call an ``appropriate procedure to actually typeset the primitive.''
+This typesetting procedure is actually the ``hook''\index{programmer's hook}
+for a programmer to get right to the typesetting code. The procedures look
+like |Tyl|$x$, where $x$ is a graphic primitive (e.g., |TylSpline|,
+|TylArc|, etc.), and take as parameters the information equivalent to the
+unpacked representation of an item. The coordinates of any points
+used are in {\DVI}-space, \index{DVI-space} and in units of
+scaled-points. Refer to the code for the formal parameter
+list of each |Tyl|$x$ procedure. These hooks call procedures to ``lay''
+line-segments
+on the page, after doing some work of clamping\index{clamping}, and opening
+the correct font files for the requested
+line-thickness\index{line thickness} (thickness{\underbar es} in the case
+of |ttspline|s). These procedures, in turn, call |layline|,\index{{\tt
+layline}} a procedure that determines the best way to typeset the
+line-segment. |Layline| checks to see if the line is strictly horizonal or
+vertical so that it can reduce the line to typsetting a {\TeX} rule, and
+then just add endpoints for smooth overlap. However, if the line is more
+diagonal, we have to go through more work.\par
+
+Diagonal lines, and certain cases where we think using {\TeX} rules
+inappropriate, require potentially using the full set of vector characters.
+The |diagonal| procedure intersects the line-segment with the origin of
+the semi-square
+of the vector font (see also page~\pageref{semisquare}). In essence, it
+implements a greedy method by scaling down the radius of the semi-square to find
+the longest possible radius of the vector characters such that the far point
+of the line-segment lies just outside that radius.\par
+\noindent
+\begin{figure}[h]\hskip 4cm\begintyl{8cm}[1in]
+\special{tyl beginfigure}
+\special{tyl line m 2 0 70 32 70}
+\special{tyl line m 2 32 70 32 6}
+\special{tyl line m 2 0 6 32 6}
+\special{tyl line m 2 0 55 16 55}
+\special{tyl line m 2 16 55 16 22}
+\special{tyl line m 2 16 22 0 22}
+\special{tyl line m 2 0 46 8 46}
+\special{tyl line m 2 8 46 8 30}
+\special{tyl line m 2 0 30 8 30}
+\special{tyl line m 2 0 42 4 42}
+\special{tyl line m 2 4 42 4 34}
+\special{tyl line m 2 0 34 4 34}
+\special{tyl line m 2 0 40 2 40}
+\special{tyl line m 2 2 40 2 36}
+\special{tyl line m 2 0 36 2 36}
+\special{tyl line m 2 0 38 32 38}
+\special{tyl line m 8 0 38 25 54}
+\special{tyl endfigure}\endtyl
+\caption{Semi-squares of the Vector Fonts}
+\end{figure}
+\noindent Then |diagonal|
+determines the $dy$ and $dx$ from the current position to that intersection
+point on the line.\footnote{Thus $dx$ and $abs(dy)$ are integer powers of 2
+between 0 and 16 inclusive.}
+ We use the mapping \index{vector font, mapping function}
+function similar to \cite{nelson-saxe} to determine character code corresponding to these
+$dy$ and $dx$ values:\goodbreak
+\vspace*{-10pt}
+$$ code = 160 + dy + dx - 9*{\rm max}\,(dx,\, -dy)\qquad {\rm\ for\ } dy < 0 \> {,
+}\>\> dx \geq 0$$
+$$ code = 160 + dy - dx - 7*{\rm max}\,(dx,\, dy)\qquad {\rm\ for\ } dy \geq 0 \> {,
+}\>\> dx \geq 0$$
+but this scheme assumes that our font has at least 160 characters (i.e.,
+256), but most fonts have only 128 characters. We have to re-map this
+discontinuous set of codes to fit with a range of $0 \ldots 127$, and in doing so,
+we have to lie\index{lies} about two of the characters by pretending that
+the two longest vertical vectors do not exist, but each is
+ to be replaced by {\it two\/} vectors of half that length.\par
+
+Once we have determined the vector character, all we have to do is move to the
+current-position, set the character, increment our position,
+and finish setting the rest of this line-segment. The
+thickness of the vector theoretically does not matter, as the path followed
+by the vector character is invariant over the thickness (at least to the
+resolution of the printer).\index{vector font, path invariance}\par
+
+\subsection{Beam Setting}\label{beam-setting}
+The way that \TT typesets beam is similar to typesetting
+line-segments.\index{beams, typesetting}
+ The
+|TylBeam| procedure takes care of determining the correct beam character to
+use. Recall from section~\ref{beam-chars-sizes} that there are two lengths
+for each type of quarternote (i.e., regular notes and grace notes). When \TT
+tries to typeset the beam, it uses the beam character whose length is
+longest {\it and\/} whose angle is closest to that required.\par
+
+ Given a music font of beam characters with their lengths, heights, depths,
+and angles from horizontal computed, we try to set the whole beam at once by
+the following method:
+\begin{enumerate}
+\item Compute the $dy$ and $dx$ of the beam, as well as its length and
+actual angle from horizontal
+\item compute the fractional number of characters needed to typset the beam
+for both sizes of beam characters (this is
+${{\rm length}_{\rm beam}\over {{\rm length}_{\rm beamchar}}}$)
+\item try to bracket a pair of beam characters whose angles are nearest the
+actual angle of the beam
+\item use the beam character that has the smallest angular deviation from
+that of the actual beam
+\item typeset the characters along the line from the left
+endpoint of the beam to as close to the right endpoint as possible. Then
+typeset the last character such that the right-hand-side of the character
+coincides with the right endpoint of the beam.
+\end{enumerate}
+ We only need to select one character to use for typesetting as the
+slope of the beam is constant over its length, and the character used has a
+``slope'' (angle from horizontal) that is as close as possible to the
+beam.\par
+This juggling of ``best-length'' versus ``best-slope'' is only necessary
+because of the need to keep the set of characters to a reasonable size, and
+also because the angles required for beams is not as broad as for the
+requirements of the more-general vector line-segments.\par
+
+\section{Buffering}
+As \TT reads in bytes from the {\DVI} file for subsequent interpretation, it
+ copies them
+into an internal buffer. At a simple level, this buffer is used to simply
+copy the {\DVI} bytes used on a {\DVI} page (delimited by |bop| and |eop|
+bytes). Thus, \TT would act simply as a mechanism that copies its input to
+its output, verbatim. At the level that {\it we} are interested in, this
+buffer will hold all the bytes up to, and including a |tyl| special string.
+On page~\pageref{proc-handling}, we made mention of a ``note about where the
+start of the special occurred'' in the {\DVI} file. When we read
+a\index{specials}\index{tyling}
+|special|, we mark the position of the beginning byte of the special, as
+found in our buffer. If we find that the special is ``tyl''-able, we back up
+the current place in the buffer to the start of the special, and proceed
+with the tyling. \TT will output typesetting command bytes, and effectively
+over-write the previous |special| string in the buffer, achieving a kind of
+in-line macro-expansion of the special.\index{macro-expansion}\par
+
+A tricky part of this macro-expansion approach is taking care of defining
+new fonts that were used during tyling on a page. As \TT ``tyl''s a figure,
+it records the used font names (here, only vector or beam fonts) in a list
+of ``fonts-to-be-defined.''\index{fonts, to be defined}\index{fonts, defining}
+ At the end of a page, we formally define these
+as yet undefined fonts within the {\DVI} file, and then mark them as having
+been {\DVI}-defined to avoid re-definition before the postamble. Even
+this scheme needs cleverness since we do not know all the fonts used to
+typeset any primitive until the end of the page, but we have to define the
+font within the {\DVI} file before the first actual use of the font to typeset
+those graphic primitives.\par
+
+The way we get around this ``Catch-22''-ish situation is to have an internal
+flag (a ``font-flag'')\index{fonts, font flag}
+inserted into the buffer before the first commands to typeset a graphic
+primitive. Since the {\DVI} format\index{DVI format} allows us to
+ define fonts\index{defining fonts} between any two
+{\DVI} commands in a file, we can define them mid-stream.
+As \TT parses a graphic primitive's
+|special| string, it backs up in the buffer to the start of the special,
+outputs the font-flag and then continues to insert the tyling commands into
+the buffer until the next special, or the end of page. At the end of a page,
+all the tyl-able |specials| have been expanded, we have buffer full of {\DVI}
+commands and font-flags for this page, and a list of fonts ready for initial
+definition in the {\DVI} file. We are now ready to write the buffer to the
+actual file. As \TT writes each byte of the buffer to the disk file, it
+first looks at the byte. If it is ``normal'' (i.e., $0\ldots 255$), it
+converts the byte to the proper system-dependent format (if necessary) and
+outputs it to the disk file. However, if the byte is our font-flag, it
+treats this flag as a macro, too, and writes out to the file the formal {\DVI}
+definitions of the new fonts. \TT does this expansion only once per page,
+and ignores any other font-flags for the rest of the page (well, it actually
+outputs them as |nop|s). After these new fonts have been defined, \TT
+continues to output each byte of the page buffer, and when done, starts
+processing on the next {\DVI} page for tyling.\par
+
+\section{Odds 'n Sods}
+This section contains down-deep information in \TT that really does not fit nicely
+anywhere else.\par
+As I discussed before, \TT is built on top of the {\DVI}type\index{DVItype}
+program\cite{dvitype} and was modified in following ways:
+\begin{itemize}
+\item The |specialcases| and |skippages| procedures were modified to call
+{\TTN}'s |mainhandlespecials| procedure to handle any |\special| strings,
+instead of throwing those bytes out.
+\item The |readpostamble| procedure was changed so that we can insert all
+the font definitions of the new fonts that we used during any tyling. \TT
+simply copies to the internal buffer any font definitons already in the
+postamble\index{postamble}, until it reaches a |postpost|. Here \TT backs up one byte (over
+the |postpost|), outputs all its new fonts, and then inserts the new
+|postpost|.
+\item The |main| loop was modified so that at each end-of-page, we write out
+the internal buffer, clear it, and reset any internal counters for the page
+(like figure-depth context, figure-number, and counts of
+fonts-to-be-defined).
+\end{itemize}\par
+\medskip
+\noindent{\bf Other Notes}\par
+I have implemented an adaptive sub-division method for determining an
+optimal number of vector characters with which to typeset a splines.
+\index{splines, typesetting}
+The method uses a simple quadrature\index{subdivision of splines}
+ sub-division on each span of the spline until a linear-distance criterion
+is met. If we let the number of sub-divisions be $N$,
+we can determine the near-optimum number of
+intervals with which to actually sample the spline when we do the
+interpolation as $2^N$.
+ This is ``optimal'' in that we use the fewest vectors for long
+spans, and do not under-sample shorter, tighter spans, and achieve a spline
+that is very smooth.\par
+The names of the primtives\index{primitives, names} within the |\special|
+strings need be unique only to the first three letters. Thus
+|\special{tyl beg}| is equivalent to
+|\special{tyl beginfigure}|. This can make input easier and
+shorter.\par
+
+Also, we can be pretty lenient about how we delimit\index{delimiters} our
+keywords\index{keywords} and makers. In most of the examples, commas or
+spaces were used to separate the markers and integers. In actuality, we can
+use almost anything for keyword and marker delimiting {\it other} than:
+\begin{itemize}
+\item other alphabetic letters
+\item other marker characters (like |@| and |"|)\index{{\tt "}-marker}
+\item {\tt\%}, |~|, |\| and those other reserved characters
+ which might upset {\TeX}, as it
+tries to expand macros inside the body of the |special| string before
+outputting it to the {\DVI} file.
+\end{itemize}
+For example,
+\hbox{|\special{tyl line *()(]!::4... 3** 4&&12[5}|}
+is lexically equivalent to the nicely typed
+\hbox{|\special{tyl line m 4 (3,4)(12,5)}|} or the tersely typed
+\hbox{|\special{tyl lin m 4 3 4 12 5}|}.\par
+
+Another ``signature''\index{{\TT}, signatures} of \TT is whenever we output the
+commands to typset a line-drawing, we preceed the |push| command with
+{\it two} |nop|s. This easily identifies the sections that have been
+``tyl''-ed.\par
+
+\Makeodd
+\chapter{Future Extensions}
+Given a little time, one could extend\index{extensions} the current set of graphic
+primitives in \TTN, such as:
+\begin{itemize}
+\item simpler-appearing macros,
+\item regular polygons (all
+easily built upon currently-existing primitives),
+\item oriented arrows
+\item line-pattern filled figures,
+\item a more general method of defining and instancing symbol definitions.
+\end{itemize}
+ I am still experimenting with two
+methods of adequately computing the smoothest interpolation of thicknesses
+along the length of the slur. When the thickness for a particular segment
+of the curve have been determined, we check to see if that thickness is in a
+subset of vector-font sizes. If so, we can use it as-is; otherwise, we have
+to clamp\index{clamping} that thickness to fit in the subset. The only problem is that
+achieving a super-smooth interpolation along the curve's thicknesses might
+require a large number of vector fonts to be loaded---sometimes stressing
+the printing\index{output device} device's capabilities. I still have to experiment to find a
+reasonable subset of these sizes that can be used and still achieve adequate
+results.\par
+
+ I wrote this program with the intention of ease
+of extensibility for additional ``primitives'' to be built on top of the
+functionality provided by \TTN.
+ I have also interfaced \TT with
+ Dario Giuse's\index{Giuse{,} Dario} graphic drawing program
+ {\it DP\/} that he
+wrote at C-MU\cite{dario}. It is smart enough to represent its graphics primitives
+in files as a list of text-strings, and is now able to output the |\special|
+strings, specifying the width and height of the created figure.
+ Converting the files of the MacDraw program to yield
+{\smallrm ASCII} strings is potentially possible, too.
+In either case, such strings are be easily converted to
+|\special| command strings for \TT to work on.\par
+\Makeodd
+\appendix
+\chapter{{\TeX}tyl Summary}
+Let's summarize the abilities and requirements of \TTN . First of all, we
+have to put an |\input{textyl}| near the start of the document (at least
+before our first invocation of a |\special{tyl ...| command). This loads the
+macros that we need to create space for our figure, and to set up the right
+environment for \TTN .\par
+
+Once the macros have been loaded, when we want to set a figure (or even a
+single \TT primitive), we must place the primitives within an environment
+started by
+\hbox{|\begintyl{|\Prm{vertsize}|}[|\Prm{horizsize}|]|}
+ and finished by |\endtyl|. Here,
+the required parameter,\Prm{vertsize}, determines the vertical
+size of the box that \TT will create for our figure to be placed in. If we
+do not need extra space, we put in |0pt| or some similar zero-length
+dimension. The optional parameter,\Prm{horizsize}, will add a non-zero width
+to the box that |\begintyl| creates for us. It is {\it crucial\/} that there
+is {\it no\/} space between the |}| and |[| characters of the |\begintyl|
+invocation if we decide to use the optional horizontal width specification.
+Otherwise, things may go awry for this figure. Also, we are responsible for
+any offsets that we may need before the figure is placed. We can achieve
+this through |\hskip| and |\vskip| calls in \TeX\ , or |\hspace| and
+|\vspace| calls in \LaTeX.\index{space}
+\index{{\TeX}}\index{{\LaTeX}}\index{{\TeX} commands}\par
+
+The types of primitives that we may place within the |\begintyl| and
+|\endtyl| pair are summarized here, without their surrounding
+ |\special{tyl | -- |}|, nor any extra delimiting punctuation (like commas).
+\begin{verse}
+{\tt beginfigure} \sOpt{meas} \sOpt{xfm}\
+{\leavevmode\hbox{$\>\lbrack${\tt W}$\>\langle wid\/\rangle\,
+\langle ht\rangle\,\rbrack\,$}}
+{\leavevmode\hbox{$\>\lbrack${\tt F}$\>\langle wid\/\rangle\,
+\langle ht\rangle\,\rbrack\,$}} \mbox{\it which opens the environment}
+
+{\tt endfigure}\mbox{\it \ \ which closes the environment}
+
+{\tt line} \sOpt{meas}\sOpt{xfm} \Prm{thick}
+\sOpt{vect}{\leavevmode\hbox{$\>\lbrack${\tt L}$\>\langle style\rangle\,\rbrack$}}
+ $ x_{\rm l}\> y_{\rm b}\> x_{\rm r}\> y_{\rm t}$
+
+{\tt spline} \sOpt{meas}\sOpt{xfm}\Prm{thick}
+\sOpt{vect}{\leavevmode\hbox{$\>\lbrack${\tt L}$\>\langle style\rangle\,\rbrack$}}
+\sOpt{spltype}\\
+\hspace*{2em}\sOpt{closure}
+{\leavevmode\hbox{$\>\lbrack${\tt X}$\>\langle thick\rangle\,\rbrack$}}
+\Prm{numpts}\mbox{\it the x-y points}
+
+{\tt ttspline} \sOpt{meas}\sOpt{xfm}
+\sOpt{vect}{\leavevmode\hbox{$\>\lbrack${\tt L}$\>\langle style\rangle\,\rbrack$}}
+\sOpt{spltype}\\
+\hspace*{2em}\sOpt{closure}
+{\leavevmode\hbox{$\>\lbrack${\tt X}$\>\langle thick\rangle\,\rbrack$}}
+\Prm{numpts} \mbox{\it points} \mbox{\it thicknesses}
+
+{\tt arc} \sOpt{meas}\sOpt{xfm} \Prm{thick}\sOpt{vect}
+{\leavevmode\hbox{$\>\lbrack${\tt L}$\>\langle style\rangle\,\rbrack$}}\Prm{radius}\\
+\hspace*{2em}{\leavevmode\hbox{$\>\lbrack${\tt @}$\>\langle cent_x\rangle\,
+\langle cent_y\rangle\,\rbrack$}}\Prm{startAng} \Prm{stopAng}
+
+{\tt label} \sOpt{meas}
+\Prm{face}$\;x \> y$ \mbox{{\tt "}\Prm{string}{\tt "}}
+
+{\tt tieslur} \sOpt{meas} \Prm{minthick}\Prm{maxthick}
+\Prm{numpts}\mbox{\it points}
+
+{\tt beam} \sOpt{meas} \Prm{staffsize}
+\sOpt{beamtype} $x_1 \> y_1\> x_2\> y_2$
+
+where:
+\end{verse}
+\begin{description}
+\item[meas] specifies units of length for this primitive. One of |S|,|P|, or
+|M| indicates scaled-points, printers-points, and millimeters, respectively.
+Defaults to printers-points.
+
+\item[xfm] specifies a transformation to be applied. It is of the form\\
+\mbox{{\tt T}\Prm{sx}\Prm{sy}\Prm{tx}\Prm{ty}\Prm{rot}}, where {\it sx\/} and
+{\it sy\/} are for scaling, {\it tx\/} and {\it ty\/} are for translation,
+and {\it rot\/} is for counter-clockwise rotation (in degrees).
+
+\item[thick] is the integer thickness of the line. Usually between 1 and 12.
+
+\item[vect] is the type of vector font to use. One of |C|, |H|, or |V|
+indicates circular, horizontal-flat, or vertical-flat pen type. Defaults to
+circular pen.
+
+\item[style] is the line-style to use. One of |0|, |1|, |2|, or |3| indicates
+a solid, dotted, dashed, or dot-dashed line-style. Defaults to solid line.
+
+\item[spltype] is the kind of spline to use through the control points. One of
+|B|, |D|, |K|, or |I| indicates the B-spline, Cardinal, Catmull-Rom, or
+Interpolating b-spline basis to use, respectively. Defaults to Catmull-Rom.
+
+\item[closure] is one of |O| (``oh'') or |U| which indicates that the spline
+is closed or open, respectively. Defaults to open.
+
+\item[numpts] is the integer number of control points for this spline.
+
+\item[radius] is the length of the radius in units specified by \Prm{meas}.
+
+\item[centx] and {\bf centy} are the center-point coordinates
+ of the arc/circle.
+
+\item[startAng] and {\bf stopAng} are the initial and final angles,
+respectively, for the arc as measured in degrees counter-clockwise from the
+positive x-axis. If they are the same number, a closed circle is indicated.
+
+\item[face] refers to the style of typeface for the label.
+See page~\pageref{labelfonts} for the list.
+
+\item[string] is the string-body of the label to typeset at the specified
+position.
+
+\item[staffsize] refers to the staff note-size for beams. It is between 0
+and 8, inclusive.
+
+\item[beamtype] is the type of beam to use. One of |G| or |R| indicates
+grace-note size, or regular size beams, respectively. Defaults to regular.
+
+\item[wid] and {\bf ht} refer to the width and height of a figure, in units
+specified by \Prm{meas}. Mainly used in conjuction with |F| (``Fitting''
+size operator) and |W| (``Written'' size marker).
+\end{description}
+\Makeodd
+\chapter{Font Example}\label{font-examples}
+% macros for font tables
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
+\def\oddline#1{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 4pt\hbox{\hex{#1x}}}\smash{\box0}\cr%was 2.3pt
+ \noalign{\nointerlineskip}}
+\def\evenline{\cr\noalign{\hrule}}
+\def\chartstrut{\lower4.5pt\vbox to20pt{}}%was 14pt
+\def\beginchart#1{$$\postdisplaypenalty=-10000 \global\count222=0 #1
+ \halign to\hsize\bgroup
+ \chartstrut##\tabskip0pt plus10pt&
+ &\hfil##\hfil&\vrule##\cr
+ \lower6.5pt\null
+ &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}
+\def\endchart{\raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
+ &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$}
+\def\:{\setbox0=\hbox{\char\count222}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\count222 by1 }
+\def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}
+\def\normalchart{%
+ &\oct{00x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline0
+ &\oct{01x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
+ &\oct{02x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline1
+ &\oct{03x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
+ &\oct{04x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline2
+ &\oct{05x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
+ &\oct{06x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline3
+ &\oct{07x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
+ &\oct{10x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline4
+ &\oct{11x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
+ &\oct{12x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline5
+ &\oct{13x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
+ &\oct{14x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline6
+ &\oct{15x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline
+ &\oct{16x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\oddline7
+ &\oct{17x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&\evenline}
+\font\cv=cvec3
+\vfill\eject
+\centerline{Example of |cvec3|}\par
+\beginchart{\cv}
+\normalchart
+\endchart
+%\vfill\eject
+%\Makeodd
+\chapter{Macros and Extended Examples}\label{secapp}
+All of the thumbnail figures in this manual were created using the
+|\special{tyl...| strings\index{specials} as described, and were placed within an
+environment delimited by |\begintyl| and |\endtyl|.\index{{\tt
+begintyl}}\index{{\tt endtyl}} This environment allows
+the user to specify a vertical and optional horizontal offset from the
+``current-position'' on the page. This determines where the origin of the
+user's coordinate system is to be placed. Also, this environment sets
+parameters so that the user can use tabbing and spacing to align the
+\hbox{|\special|} strings as he desires (e.g., to better show the nesting of
+figures and graphic-primitives). The macros\index{macros} used are defined
+below:
+\vspace*{-20pt}
+
+\bgroup\footnotesize
+\begin{verbatim}
+ % This is textyl.tex
+ %
+ % macros for figures for Tyling
+ % specify :
+ % \begintyl{vert_dimen}[optional_horiz_dimen]
+ % (with NO intervening space between the } and the [ chars)
+ % then the \special{tyl ...} strings
+ % then you must finish environment with \endtyl
+ %
+\def\begintyl#1{\begingroup\endlinechar=-1\catcode `\^^I=9
+ \dimen120=#1
+ \ifhmode\toks0={\futurelet\tyltempb\begHtyl}
+ \let\endtyl=\endHtyl
+ \else\toks0={\futurelet\tyltempb\begVtyl}
+ \let\endtyl=\endVtyl\fi
+ \the\toks0}
+\def\begHtyl{\ifx [\tyltempb \let\tylh=\tylHspace
+ \else\let\tylh=\tylHnospace\fi\tylh}
+%
+\def\tylHspace[#1]{\setbox0=\hbox to #1\bgroup
+ \vbox to \dimen120\bgroup\vss}
+\def\tylHnospace{\setbox0=\hbox\bgroup
+ \vbox to \dimen120\bgroup\vss}
+%
+\def\begVtyl{\ifx [\tyltempb \let\tylv=\tylVspace
+ \else\let\tylv=\tylVnospace\fi\tylv}
+%
+\def\tylVspace[#1]{\setbox0=\vbox to \dimen120\bgroup\vss
+ \hbox to #1\bgroup}
+\def\tylVnospace{\setbox0=\vbox to \dimen120\bgroup\vss
+ \hbox\bgroup}
+%
+\def\endHtyl{\egroup\hss\egroup\box0\endgroup}
+\def\endVtyl{\hss\egroup\egroup\box0\endgroup}
+\end{verbatim}
+
+\egroup
+\par
+Let's look at a non-trivial example of frequently-used figures. The
+original figure is from \cite{ahu}, page 325. I'll give the diagram, and then
+the annotated |\special| commands.\par
+\begintyl{9cm}
+\special{tyl begin /AHU=fig=9.7/}
+ \special{tyl arc m 2 6 @ 10 46 10 10 /state=s1/}
+ \special{tyl label m 5 9 46 "s1"}
+ \special{tyl arc m 2 6 @ 62 20 10 10 /state=s2/}
+ \special{tyl lab m 5 61 20 "s2"}
+ \special{tyl arc m 2 6 @ 62 60 10 10 /state=s3/}
+ \special{tyl lab m 5 61 60 "s3"}
+ \special{tyl arc m 2 6 @ 104 34 10 10 /finalstate=s4/}
+ \special{tyl arc m 2 8 @ 104 34 10 10}
+ \special{tyl lab m 5 103 34 "s4"}
+%now draw the connectors
+ \special{tyl line m 3 16 48 56 59 /s1-s2/}
+ \special{tyl lab m 1 30 53 "a"}
+ \special{tyl line m 3 56 59 53 60}% and the arrow
+ \special{tyl line m 3 56 59 54 57}
+ \special{tyl line m 3 53 60 54 57}
+
+ \special{tyl line m 3 15 43 56 23 /s1-s3/}
+ \special{tyl lab m 1 32 30 "e"}
+ \special{tyl line m 3 56 23 55 25}
+ \special{tyl line m 3 56 23 53 23}
+ \special{tyl line m 3 55 25 53 23}
+
+ \special{tyl spline m 3 4 12 52; 62 76; 90,63; 105,44 /s1-s4/}
+ \special{tyl lab m 1 70 78 "b"}
+ \special{tyl line m 3 105,42 106 44}
+ \special{tyl line m 3 105 42 104 44}
+ \special{tyl line m 3 104 44 106 44}
+
+ \special{tyl line m 3 62 26 62 54 /s3-s2/}
+ \special{tyl lab m 1 64 38 "b"}
+ \special{tyl line m 3 62 54 64 52}
+ \special{tyl line m 3 62 54 60 52}
+ \special{tyl line m 3 60 52 64 52}
+
+ \special{tyl spline m 3 3 67 55; 80 42; 96 36 /s3-s4/}
+ \special{tyl lab m 1 76 40 "e"}
+ \special{tyl line m 3 96 36 95 38}
+ \special{tyl line m 3 96 36 95 35}
+ \special{tyl line m 3 95 35 95 38}
+
+ \special{tyl spline m 3 3 69 61; 86 52; 98 40 /s4-s3/}
+ \special{tyl lab m 1 89 51 "a"}
+ \special{tyl line m 3 69 61 71 62}
+ \special{tyl line m 3 69 61 70 59}
+ \special{tyl line m 3 70 59 71 62}
+
+ \special{tyl line m 3 69 22 96 32 /s2-s4/}
+ \special{tyl lab m 1 82 24 "e"}
+ \special{tyl line m 3 96 32, 94 33}
+ \special{tyl line m 3 96 32 95 30}
+ \special{tyl line m 3 94 33 95 30}
+\special{tyl endfigure}
+\endtyl\par
+And the text to produce this is:
+
+\bgroup\footnotesize
+\begin{verbatim}
+\begintyl{9cm}
+\special{tyl begin /AHU=fig=9.7/}
+ \special{tyl arc m 2 6 @ 10 46 10 10 /state=s1/}
+ \special{tyl label m 5 9 46 "s1"}
+ \special{tyl arc m 2 6 @ 62 20 10 10 /state=s2/}
+ \special{tyl lab m 5 61 20 "s2"}
+ \special{tyl arc m 2 6 @ 62 60 10 10 /state=s3/}
+ \special{tyl lab m 5 61 60 "s3"}
+ \special{tyl arc m 2 6 @ 104 34 10 10 /finalstate=s4/}
+ \special{tyl arc m 2 8 @ 104 34 10 10}
+ \special{tyl lab m 5 103 34 "s4"}
+%now draw the connectors
+ \special{tyl line m 3 16 48 56 59 /s1-s2/}
+ \special{tyl lab m 1 30 53 "a"}
+ \special{tyl line m 3 56 59 53 60}% and the arrow
+ \special{tyl line m 3 56 59 54 57}
+ \special{tyl line m 3 53 60 54 57}
+
+ \special{tyl line m 3 15 43 56 23 /s1-s3/}
+ \special{tyl lab m 1 32 30 "e"}
+ \special{tyl line m 3 56 23 55 25}
+ \special{tyl line m 3 56 23 53 23}
+ \special{tyl line m 3 55 25 53 23}
+
+ \special{tyl spline m 3 4 12 52; 62 76; 90,63; 105,44 /s1-s4/}
+ \special{tyl lab m 1 70 78 "b"}
+ \special{tyl line m 3 105,42 106 44}
+ \special{tyl line m 3 105 42 104 44}
+ \special{tyl line m 3 104 44 106 44}
+
+ \special{tyl line m 3 62 26 62 54 /s3-s2/}
+ \special{tyl lab m 1 64 38 "b"}
+ \special{tyl line m 3 62 54 64 52}
+ \special{tyl line m 3 62 54 60 52}
+ \special{tyl line m 3 60 52 64 52}
+
+ \special{tyl spline m 3 3 67 55; 80 42; 96 36 /s3-s4/}
+ \special{tyl lab m 1 76 40 "e"}
+ \special{tyl line m 3 96 36 95 38}
+ \special{tyl line m 3 96 36 95 35}
+ \special{tyl line m 3 95 35 95 38}
+
+ \special{tyl spline m 3 3 69 61; 86 52; 98 40 /s4-s3/}
+ \special{tyl lab m 1 89 51 "a"}
+ \special{tyl line m 3 69 61 71 62}
+ \special{tyl line m 3 69 61 70 59}
+ \special{tyl line m 3 70 59 71 62}
+
+ \special{tyl line m 3 69 22 96 32 /s2-s4/}
+ \special{tyl lab m 1 82 24 "e"}
+ \special{tyl line m 3 96 32, 94 33}
+ \special{tyl line m 3 96 32 95 30}
+ \special{tyl line m 3 94 33 95 30}
+\special{tyl endfigure}
+\endtyl\par
+\end{verbatim}
+
+\egroup
+\vfill
+\Makeodd
+\begin{thebibliography}{99}
+\typeout{bib}
+\bibitem{adobe}Adobe Systems Inc., {\it PostScript Language Reference Manual.}
+Addison-Wesley, Reading, MA, 1985.
+
+\bibitem{ahu}Alfred V. Aho, John E. Hopcroft, and Jeffrey D. Ullman, {\it
+The Design and Analysis of Computer Algorithms.} Addison-Wesley, Reading,
+Mass. 1974.
+
+\bibitem{barsky}Brian A. Barsky, and Donald P. Greenberg, ``Determining a
+Set of B-spline Control Vertices to Generate an Interpolating Surface.''
+{\it Computer Graphics and Image Processing.} {\bf 14} 3, (Nov. 1980), pp.203--226.
+
+\bibitem{cagd}Edwin E. Catmull, and Raphael J. Rom, ``A Class of Local
+Interpolating Splines.'' {\it Computer Aided Geometric Design.}
+Robert E. Barnhill and Richard F. Riesenfeld, eds.
+ Academic Press, New York, NY, 1974, pp. 317--326.
+
+\bibitem{dvitype}David R. Fuchs, Howard Trickey, {\it The DVI$\,$type processor.} Program
+documentation, 1983--4.
+
+\bibitem{dario}Dario Giuse, {\it DP---Format of the drawing files.}
+Technical Report. Car\-negie -Mellon University Robotics Institute, 1983.
+
+\bibitem{gourlay}John S. Gourlay, ``A Language for Music Printing.''
+{\it Communications of the ACM\/} {\bf 29} 5, (May 1986), pp. 388--401.
+
+\bibitem{dvisun}Norm Hutchinson, et al. {\smallrm DVISUN} Program. 1983.
+
+\bibitem{knuth-tex82}Donald E. Knuth, {\it The \TeX book.} Addison-Wesley,
+Reading, Mass. 1984.
+
+\bibitem{knuth-mf}Donald E. Knuth, {\it \TeX\ and METAFONT: New Directions in
+Typesetting.} Digital Press, Bedford, MA, 1979.
+
+\bibitem{nelson-saxe}Bruce Nelson, and James Saxe, ``Drawing Splines with a
+Vector Font.''
+Unpublished technical report. Carnegie-Mellon University, 1980.
+
+\bibitem{ross}Ted Ross, {\it The Art of Music Engraving and Processing.}
+Hansen Books, 1970.
+
+\bibitem{updike}Daniel Berkeley Updike, {\it Printing Types: Their History,
+Forms, and Use.} Harvard University Press, Cambridge, MA, 1937.
+
+\bibitem{wu-abel}Sheng-Chuan Wu, John F. Abel, and Donald Greenberg,
+ ``An Interactive Computer
+Graphics Approach to Surface Representation.''
+ {\it Communications of the ACM\/} {\bf 20} 10, (Oct. 1977), pp. 703--712.
+
+\bibitem{vanwyk}Christopher J. Van Wyk, {\it A Language for Typesetting
+Graphics.} Ph.D. dissertation. Stanford University, 1980.
+
+\bibitem{zapf}Hermann Zapf, {\it The Printing Salesman's Herald.} Book 39.
+Champion Papers, New York, NY, 1978.
+\end{thebibliography}
+\Makeodd
+\begin{theindex}
+\newcommand{\largeletter}[1]{{\pagebreak[2]\Large\hspace{-.5in}\parbox[t]{.5in}{\makebox[.35in][r]{\uppercase{#1}}}\nopagebreak[4]\vspace{-1.5ex}}}
+\item {\tt "}-marker 19, 48
+\item {\tt .dvi} file 3
+\item {\tt .tex} text file 1, 3, 34
+\item {\tt .tlog} file 4, 23
+\item {\tt .tyl} file 23
+\item {\tt ?!} flag 24
+\item {\tt ?} flag 23
+\item {\tt @}-marker 8, 19
+\indexspace
+\largeletter{a}
+\item {\tt arc} 36
+\item {\bf arc} 19
+\item arcs 7
+ \subitem angles 8, 19
+ \subitem attributes 36
+ \subitem center 8
+ \subitem centering 8, 19
+ \subitem circles 8, 36
+ \subitem closed splines 36
+ \subitem control points 31, 36
+ \subitem ellipses 36
+ \subitem example 8
+ \subitem open 36
+ \subitem open spline 36
+ \subitem phantoming 37
+ \subitem radius 8
+ \subitem representation 31, 36
+\indexspace
+\largeletter{b}
+\item {\tt B}-marker 6, 14, 20
+\item B-spline basis 6, 20
+\item B-splines
+ \subitem interpolating-type 6
+ \subitem recomputing points 30
+\item {\bf beam} 22
+\item {\tt beam} 37
+\item beam-types 22
+\item beam font 29
+ \subitem constraints 30
+ \subitem design 29
+ \subitem difference from vector font 29
+ \subitem lengths 30
+ \subitem range of angles 30
+ \subitem relation to staff size 29
+ \subitem sizes 29
+ \subitem types 29
+\item beams 16
+ \subitem attributes 37
+ \subitem default size 22
+ \subitem difference from lines 37
+ \subitem sizes 22
+ \subitem staff size 22
+ \subitem typesetting 45
+\item {\bf beginfigure} 11, 22
+\item {\tt begintyl} 1, 3, 4, 12, 57
+\item bitmaps {\it\romannumeral 6}
+\item blank space 17
+\item bounding box 34, 38, 41
+\item boxes 1, 3, 9
+\indexspace
+\largeletter{c}
+\item {\tt C}-marker 20
+\item capabilities {\it\romannumeral 5}, {\it\romannumeral 6}, 17
+\item Cardinal basis 6, 20
+\item cartesian-space 2
+\item Catmull-Rom basis 20
+\item Catmull-Rom splines 5, 30
+\item circles 7, 8, 36
+ \subitem control points 31, 36
+ \subitem relation to arcs 36
+ \subitem representation 31
+\item circular pen 20
+\item clamping 35, 43, 49
+\item closed splines 14, 20
+\item closure 20
+\item combining primitives 9, 10
+\item coordinates 2
+ \subitem origin 2
+\item coordinate space system 19
+\item current position 1, 2, 3, 17
+\item curves 5
+\indexspace
+\largeletter{d}
+\item {\tt D}-marker 6, 20
+\item defaulting values 5
+\item defining fonts 46
+\item delimiters 6, 48
+\item design decisions 21, 27, 30
+\item design goals {\it\romannumeral 5}
+\item DVI {\it\romannumeral 5}
+\item DVI-filters 4
+\item DVI-space 35, 38, 43
+\item DVI file 27
+ \subitem previewing 33
+\item DVI format 46
+\item DVI position coordinates 27
+\item DVISUN 33
+\item DVItype 27, 47
+\indexspace
+\largeletter{e}
+\item ellipses 19, 31, 36
+ \subitem relation to circles 36
+\item {\tt endfigure} 42
+\item {\bf endfigure} 11, 22
+\item {\tt endtyl} 1, 12, 57
+\item errors
+ \subitem internal 24
+\item extensions 49
+\indexspace
+\largeletter{f}
+\item {\tt F}-marker 22
+\item figure definitions 22
+\item figures 10
+ \subitem context 41
+ \subitem defining 11
+ \subitem example 12
+ \subitem examples 11
+ \subitem fitting to size 22
+ \subitem nested symbols 11
+ \subitem preparation 2
+ \subitem sub-figures 11
+ \subitem tranforms 22
+ \subitem transforms 10, 22
+\item fonts
+ \subitem computing dimensions of 42
+ \subitem defining 46
+ \subitem font flag 46
+ \subitem for labels 38
+ \subitem numbering 43
+ \subitem to be defined 46
+\indexspace
+\largeletter{g}
+\item {\tt G}-marker 16, 22
+\item geometric transforms 21
+\item Giuse{,} Dario 28, 49
+\item grace-notes 16
+\item graphic editors 17, 22
+\item grid-origin 3
+\indexspace
+\largeletter{h}
+\item {\tt H}-marker 20
+\item handlers 38
+ \subitem design idea 39
+ \subitem figurehandle 39
+ \subitem functionality 38
+ \subitem linehandle 38
+ \subitem ttsplinehandle 38
+\item handling specials 27
+\item horizontal pen 20
+\indexspace
+\largeletter{i}
+\item {\tt I}-marker 6, 20
+\item Ideal {\it\romannumeral 5}
+\item {\tt input} 1
+\item interpolating B-spline 6
+ \subitem basis 20
+\item item 39, 40
+ \subitem inserting 41
+ \subitem packing 40
+ \subitem traversing 41
+\indexspace
+\largeletter{j}
+\item jaggies 36
+\indexspace
+\largeletter{k}
+\item {\tt K}-marker 5, 20
+\item keywords 6, 48
+\item Knuth{,} Donald 1
+\indexspace
+\largeletter{l}
+\item {\tt L}-marker 20
+\item {\tt label} 37
+\item {\bf label} 19
+\item labels
+ \subitem face 19
+ \subitem font face-styles 38
+ \subitem font style 19
+ \subitem strings 19
+\item {\LaTeX} 1, 3, 17, 51
+ \subitem {\tt figure } environment 17
+\item {\tt layline} 43
+\item leaving no space 3
+\item leaving white space 3
+\item lies 37, 44
+\item {\tt line} 35
+\item {\bf line} 18
+\item line example 1
+\item line segments 18, 35
+\item line style 20, 34
+ \subitem dashed 20
+ \subitem dot-dashed 20
+ \subitem dotted 20
+ \subitem solid 20
+\item line styles
+ \subitem examples 20
+\item line thickness 2, 18, 20, 31, 43
+ \subitem example 20
+\item local maintainer 4, 25
+\item Lucas{,} Bruce 42
+\indexspace
+\largeletter{m}
+\item {\tt M}-marker 5, 6, 10
+\item {\tt M}-measure 19
+\item macro-expansion 33, 46
+\item macros 1, 9, 57
+ \subitem {\it see} {\tt begintyl} 1
+\item markers 6
+\item measurement 19
+ \subitem default 19
+ \subitem default 22
+ \subitem units 2
+\item Metafont 28, 42
+ \subitem limitations 28
+\item millimeters 19
+ \subitem measurement 5
+\item music {\it\romannumeral 5}, 21
+\item music font 29
+\item MusiCopy {\it\romannumeral 5}, 15, 42
+\indexspace
+\largeletter{n}
+\item Nelson{,} Bruce 28
+\item nested symbols 11
+\indexspace
+\largeletter{o}
+\item {\tt O}-marker 14, 20
+\item open spline 14, 20
+\item optional values 5
+\item origin 2
+\item origin of quadrant 17
+\item OSU 14
+\item output device 4, 49
+ \subitem font memory 36
+\item oval
+ \subitem {\it see} ellipse 19
+\indexspace
+\largeletter{p}
+\item {\tt P}-measure 19
+\item parameters to {\TT} 17
+\item Pascal 33
+\item pens 20
+\item phantom control points 37
+\item phantoming 37
+\item pixel thickness 20
+\item {\tt pop} 39
+\item postamble 47
+\item PostScript {\it\romannumeral 6}
+\item preamble 1
+\item preparing a figure 2
+\item primitive 2
+\item primitives 17, 34
+ \subitem attributes 34
+ \subitem built-up 17
+ \subitem combining 9, 10
+ \subitem definition of 40
+ \subitem invoking 9
+ \subitem modifying attributes 34
+ \subitem names 48
+ \subitem parameters 9, 18
+ \subitem reduction of 34
+ \subitem scaling; rot\-ating; trans\-lating 9
+\item printer's points 19
+ \subitem measurement 2
+\item programmer's hook 43
+\item programs making figures 22
+\item {\tt push} 39
+\indexspace
+\largeletter{r}
+\item {\tt R}-marker 16, 22
+\item reference point 17
+\item rotation 9, 10
+ \subitem using degrees measurement 10
+\item running {\TT} 3
+\indexspace
+\largeletter{s}
+\item {\tt S}-measure 19
+\item Saxe{,} James 28
+\item scaled points 19
+\item scaling 9
+\item slurs 15, 21, 30, 31
+ \subitem {\it see also} ties 16
+\item space 1, 3, 51
+\item space macros 1
+\item special 38
+\item {\tt special} 2
+\item specials 2, 17, 27, 46, 57
+ \subitem case insensitivity 6
+ \subitem handling 33
+ \subitem handling by {\TT} 27
+ \subitem punctuation 6
+ \subitem typing in 6
+\item {\tt spline} 35
+\item {\bf spline} 18
+\item spline
+ \subitem B-spline 6
+ \subitem Cardinal 6
+ \subitem Catmull-Rom 5
+ \subitem control-points 5
+ \subitem coordinates 5
+ \subitem default 5
+ \subitem example 5
+ \subitem Interpolating B-spline 6
+ \subitem ttspline 6
+\item spline curves 5
+\item splines
+ \subitem attributes 35
+ \subitem B-spline 35
+ \subsubitem example 15
+ \subitem basis 20, 35
+ \subitem Cardinal 35
+ \subsubitem example 14
+ \subitem Catmull-Rom 35
+ \subsubitem example 14
+ \subitem clamping 35
+ \subitem closed 14
+ \subitem closure 20
+ \subitem default basis 20
+ \subitem default closure 20
+ \subitem default type 30
+ \subitem families 30
+ \subitem Interpolating B-spline
+ \subsubitem example 15
+ \subitem interpolation 30
+ \subitem inversion 30
+ \subitem open 14
+ \subitem types 20
+ \subitem typesetting 47
+ \subitem use in simulating 37
+\item staff-size 16
+\item staff lines 37
+\item staff sizes 29, 37
+\item Standard{,} Paul {\it\romannumeral 1}
+\item sub-figures 11
+\item subdivision of splines 47
+\item surprise errors 24
+\item symbol
+ \subitem {\it see} figure 22
+\indexspace
+\largeletter{t}
+\item {\tt T}-marker 10, 12
+\item {\TeX} {\it\romannumeral 5}, 1, 3, 17, 34, 51
+\item \TeX book 9
+\item {\TeX} commands 17, 51
+\item {\TT} {\it\romannumeral 5}
+ \subitem {\tt .tlog} log-file 23
+ \subitem error handling 23
+ \subitem error messages 24
+ \subitem error recovering 23
+ \subitem how to read manual {\it\romannumeral 6}
+ \subitem name {\it\romannumeral 5}
+ \subitem parameters 17
+ \subitem serious problems 26
+ \subitem signatures 43, 48
+ \subitem simple problem 25
+\item {\tt textyl.tex} file 1
+\item TFM information 27
+\item Thick-n-thin spline 6
+\item ties 15, 21, 30
+ \subitem and ttsplines 16
+ \subitem example 16
+ \subitem {\it see also} slurs 16
+\item {\bf tieslur} 21
+\item {\tt tieslur} 35
+\item tieslur
+ \subitem attributes 35
+ \subitem clamping 35
+ \subitem example 16
+ \subitem implementation 31
+ \subitem pen type 21
+ \subitem relation to ttsplines 35
+ \subitem representation 34
+ \subitem thicknesses 16, 21
+ \subitem vector type 21
+\item tranforms
+ \subitem figure-level 22
+\item {\bf transform} 21
+\item transformations
+ \subitem {\it see } transforms 21
+\item transforms 9
+ \subitem additiveness 22, 42
+ \subitem concatenation 11
+ \subitem example 10
+ \subitem figure-level 41
+ \subitem mirroring 10
+ \subitem no-op 10
+ \subitem parameters 10, 21
+ \subsubitem format 21
+ \subsubitem requirement 21
+ \subitem rotating 9
+ \subitem scaling 9
+ \subitem sub-figures 11
+ \subitem top-level 42
+ \subitem translation 9
+\item transform to DVI space 39
+\item translating 9
+\item {\tt ttspline} 35
+\item ttspline 6, 31
+ \subitem clamping 35
+ \subitem defaults 6
+ \subitem example 6
+ \subitem line thicknesses 31
+ \subitem thicknesses 6, 18
+\item {\bf ttspline} 18
+\item tyling {\it\romannumeral 5}, 33, 37, 46
+\item {\tt tyl} name-string 2
+\item typing in special strings 6
+\indexspace
+\largeletter{u}
+\item {\tt U}-marker 14, 20
+\item units of measure 19
+\item Unix 33
+\item user's view 17
+\item user intuition 21
+\indexspace
+\largeletter{v}
+\item {\tt V}-marker 20
+\item vector-types 20
+ \subitem default 20
+\item vector font 20, 28
+ \subitem computing dimensions 28
+ \subitem cvec 29
+ \subitem dimensions 28
+ \subitem mapping function 44
+ \subitem path invariance 45
+ \subitem pen-types 29
+ \subitem pens
+ \subsubitem example 29
+ \subitem pixelsize 29
+ \subitem range of angles 28
+ \subitem sizes 29
+ \subitem types 29
+\item vectors
+ \subitem typesetting with 28
+\item vertical pen 20
+\indexspace
+\largeletter{w}
+\item {\tt W}-marker 22
+\indexspace
+\largeletter{x}
+\item {\tt X}-marker 18
+\indexspace
+\largeletter{z}
+\item Zapf{,} Hermann {\it\romannumeral 1}
+\end{theindex}
+
+\end{document}
diff --git a/macros/latex209/contrib/textyl/doc/tylout.dvi b/macros/latex209/contrib/textyl/doc/tylout.dvi
new file mode 100644
index 0000000000..839e64b1f8
--- /dev/null
+++ b/macros/latex209/contrib/textyl/doc/tylout.dvi
Binary files differ
diff --git a/macros/latex209/contrib/textyl/psrc/h00vars.h b/macros/latex209/contrib/textyl/psrc/h00vars.h
new file mode 100644
index 0000000000..e24f051139
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/h00vars.h
@@ -0,0 +1,252 @@
+/* Copyright (c) 1979 Regents of the University of California */
+
+/* static char sccsid[] = "@(#)vars.h 1.12 1/22/83"; */
+
+#include <stdio.h>
+
+/*
+ * px - Berkeley Pascal interpreter
+ *
+ * Version 4.0, January 1981
+ *
+ * Original version by Ken Thompson
+ *
+ * Substantial revisions by Bill Joy and Chuck Haley
+ * November-December 1976
+ *
+ * Rewritten for VAX 11/780 by Kirk McKusick
+ * Fall 1978
+ *
+ * Rewritten in ``C'' using libpc by Kirk McKusick
+ * Winter 1981
+ *
+ * Px is described in detail in the "PX 4.0 Implementation Notes"
+ * The source code for px is in several major pieces:
+ *
+ * int.c C main program which reads in interpreter code
+ * interp.c Driver including main interpreter loop and
+ * the interpreter instructions grouped by their
+ * positions in the interpreter table.
+ * utilities.c Interpreter exit, backtrace, and runtime statistics.
+ *
+ * In addition there are several headers defining mappings for panic
+ * names into codes, and a definition of the interpreter transfer
+ * table. These are made by the script make.ed1 in this directory and
+ * the routine opc.c from ${PASCALDIR}. (see the makefile for details)
+ */
+#define PXPFILE "pmon.out"
+#define BITSPERBYTE 8
+#define BITSPERLONG (BITSPERBYTE * sizeof(long))
+#define HZ 100
+#define NAMSIZ 76
+#define MAXFILES 32
+#define PREDEF 2
+#ifdef ADDR32
+#define STDLVL ((struct iorec *)(0x7ffffff1))
+#define GLVL ((struct iorec *)(0x7ffffff0))
+#endif ADDR32
+#ifdef ADDR16
+#define STDLVL ((struct iorec *)(0xfff1))
+#define GLVL ((struct iorec *)(0xfff0))
+#endif ADDR16
+#define FILNIL ((struct iorec *)(0))
+#define INPUT ((struct iorec *)(&input))
+#define OUTPUT ((struct iorec *)(&output))
+#define ERR ((struct iorec *)(&_err))
+#define PX 0 /* normal run of px */
+#define PIX 1 /* load and go */
+#define PIPE 2 /* bootstrap via a pipe */
+#define PDX 3 /* invoked by the debugger "pdx" */
+#define releq 0
+#define relne 2
+#define rellt 4
+#define relgt 6
+#define relle 8
+#define relge 10
+typedef enum {FALSE, TRUE} bool;
+
+/*
+ * interrupt and allocation routines
+ */
+extern long createtime;
+extern char *PALLOC();
+extern char *malloc();
+extern long time();
+extern intr();
+extern memsize();
+extern syserr();
+extern liberr();
+
+/*
+ * stack routines and structures
+ */
+struct sze8 {
+ char element[8];
+};
+extern short pop2();
+extern long pop4();
+extern double pop8();
+extern struct sze8 popsze8();
+extern char *pushsp();
+
+/*
+ * emulated pc types
+ */
+union progcntr {
+ char *cp;
+ unsigned char *ucp;
+ short *sp;
+ unsigned short *usp;
+ long *lp;
+ double *dbp;
+ struct hdr *hdrp;
+};
+
+/*
+ * THE RUNTIME DISPLAY
+ *
+ * The entries in the display point to the active static block marks.
+ * The first entry in the display is for the global variables,
+ * then the procedure or function at level one, etc.
+ * Each display entry points to a stack frame as shown:
+ *
+ * base of stack frame
+ * ---------------
+ * | |
+ * | block mark |
+ * | |
+ * --------------- <-- display entry "stp" points here
+ * | | <-- display entry "locvars" points here
+ * | local |
+ * | variables |
+ * | |
+ * ---------------
+ * | |
+ * | expression |
+ * | temporary |
+ * | storage |
+ * | |
+ * - - - - - - - -
+ *
+ * The information in the block mark is thus at positive offsets from
+ * the display.stp pointer entries while the local variables are at negative
+ * offsets from display.locvars. The block mark actually consists of
+ * two parts. The first part is created at CALL and the second at entry,
+ * i.e. BEGIN. Thus:
+ *
+ * -------------------------
+ * | |
+ * | Saved lino |
+ * | Saved lc |
+ * | Saved dp |
+ * | |
+ * -------------------------
+ * | |
+ * | Saved (dp) |
+ * | |
+ * | Pointer to current |
+ * | routine header info |
+ * | |
+ * | Saved value of |
+ * | "curfile" |
+ * | |
+ * | Empty tos value |
+ * | |
+ * -------------------------
+ */
+
+/*
+ * program variables
+ */
+extern union display _display; /* runtime display */
+extern struct dispsave *_dp; /* ptr to active frame */
+extern long _lino; /* current line number */
+extern int _argc; /* number of passed args */
+extern char **_argv; /* values of passed args */
+extern bool _nodump; /* TRUE => no post mortum dump */
+extern long _runtst; /* TRUE => runtime tests */
+extern long _mode; /* execl by PX, PIPE, or PIX */
+extern long _stlim; /* statement limit */
+extern long _stcnt; /* statement count */
+extern long _seed; /* random number seed */
+extern char *_maxptr; /* maximum valid pointer */
+extern char *_minptr; /* minimum valid pointer */
+extern long *_pcpcount; /* pointer to pxp buffer */
+extern long _cntrs; /* number of counters */
+extern long _rtns; /* number of routine cntrs */
+
+/*
+ * The file i/o routines maintain a notion of a "current file".
+ * A pointer to this file structure is kept in "curfile".
+ *
+ * file structures
+ */
+struct iorechd {
+ char *fileptr; /* ptr to file window */
+ long lcount; /* number of lines printed */
+ long llimit; /* maximum number of text lines */
+ FILE *fbuf; /* FILE ptr */
+ struct iorec *fchain; /* chain to next file */
+ struct iorec *flev; /* ptr to associated file variable */
+ char *pfname; /* ptr to name of file */
+ short funit; /* file status flags */
+ short fblk; /* index into active file table */
+ long fsize; /* size of elements in the file */
+ char fname[NAMSIZ]; /* name of associated UNIX file */
+};
+
+struct iorec {
+ char *fileptr; /* ptr to file window */
+ long lcount; /* number of lines printed */
+ long llimit; /* maximum number of text lines */
+ FILE *fbuf; /* FILE ptr */
+ struct iorec *fchain; /* chain to next file */
+ struct iorec *flev; /* ptr to associated file variable */
+ char *pfname; /* ptr to name of file */
+ short funit; /* file status flags */
+ short fblk; /* index into active file table */
+ long fsize; /* size of elements in the file */
+ char fname[NAMSIZ]; /* name of associated UNIX file */
+ char buf[BUFSIZ]; /* I/O buffer */
+ char window[1]; /* file window element */
+};
+
+/*
+ * unit flags
+ */
+#define FDEF 0x80 /* 1 => reserved file name */
+#define FTEXT 0x40 /* 1 => text file, process EOLN */
+#define FWRITE 0x20 /* 1 => open for writing */
+#define FREAD 0x10 /* 1 => open for reading */
+#define TEMP 0x08 /* 1 => temporary file */
+#define SYNC 0x04 /* 1 => window is out of sync */
+#define EOLN 0x02 /* 1 => at end of line */
+#define EOFF 0x01 /* 1 => at end of file */
+
+/*
+ * file routines
+ */
+extern struct iorec *GETNAME();
+extern char *MKTEMP();
+
+/*
+ * file record variables
+ */
+extern struct iorechd _fchain; /* head of active file chain */
+extern struct iorec *_actfile[]; /* table of active files */
+extern long _filefre; /* last used entry in _actfile */
+
+/*
+ * standard files
+ */
+extern struct iorechd input;
+extern struct iorechd output;
+extern struct iorechd _err;
+
+/*
+ * Px execution profile array
+ */
+#ifdef PROFILE
+#define NUMOPS 256
+extern long _profcnts[NUMOPS];
+#endif PROFILE
diff --git a/macros/latex209/contrib/textyl/psrc/makefile b/macros/latex209/contrib/textyl/psrc/makefile
new file mode 100644
index 0000000000..3d8c3a4f25
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/makefile
@@ -0,0 +1,23 @@
+# Makefile for TeXtyl
+# Tue May 26 1987 John S. Renner
+# be sure to edit texpaths.h to reflect local directory conventions
+# before compiling
+textyl: textyl.pas tylext.o tylext.h
+ /lib/cpp -P textyl.pas textyl.p
+ pc -w -c textyl.p
+ rm -f textyl.p
+ pc -o textyl textyl.o tylext.o
+
+SRCS = textyl.pas.aa textyl.pas.ab textyl.pas.ac \
+ textyl.pas.ad textyl.pas.ae textyl.pas.af \
+ textyl.pas.ag textyl.pas.ah
+
+textyl.pas: $(SRCS)
+ cat $(SRCS) > textyl.pas
+
+tylext.o: tylext.c texpaths.h h00vars.h
+ cc -c tylext.c
+
+clean:
+ /bin/rm -f *.o textyl.p
+
diff --git a/macros/latex209/contrib/textyl/psrc/texpaths.h b/macros/latex209/contrib/textyl/psrc/texpaths.h
new file mode 100644
index 0000000000..17c3a01e2c
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/texpaths.h
@@ -0,0 +1,32 @@
+/*
+ * This file defines the default paths that will be used for TeX software.
+ * (These paths are used if the user's environment doesn't specify paths.)
+ *
+ * Paths should be colon-separated and no longer than MAXINPATHCHARS-1
+ * (for defaultinputpath) or MAXOTHPATHCHARS (for other default paths).
+ */
+
+#define MAXINPATHCHARS 700 /* maximum number of chars in an input path */
+
+#define defaultinputpath ".:/usr/lib/tex/macros"
+ /* this should always start with "." */
+
+#define MAXOTHPATHCHARS 100 /* other paths should be much shorter */
+
+#define defaultfontpath "/usr/lib/tex/fonts"
+ /* it is probably best not to include "." here to prevent confusion
+ by spooled device drivers that think they know where the fonts
+ really are */
+#define defaultformatpath ".:/usr/lib/tex/ctex/macros"
+#define defaultpoolpath ".:/usr/lib/tex"
+
+/*---------------------------------------------------------
+ The following is for TeXtyl: the default directory where
+ the .tfm files for the vector fonts can be found.
+ it needs the trailing slash , and must be *single*
+ quoted since Pascal delimits strings that way.
+*/
+
+#define TYLPATH '/usr/lib/tex/fonts/'
+ /* The length of the above TYLPATH string */
+#define TYLPATHLEN 19
diff --git a/macros/latex209/contrib/textyl/psrc/textyl.pas b/macros/latex209/contrib/textyl/psrc/textyl.pas
new file mode 100644
index 0000000000..ec97c687f6
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/textyl.pas
@@ -0,0 +1,7873 @@
+
+(*$b0*)
+
+program tyldvidvi(input,output);
+(* ----------------------------------------------------------
+ TeXtyl line-drawing interface for TeX.
+ copyright (c) 1987 John S. Renner
+ All rights reserved.
+
+ABSTRACT: TeXtyl reads in a DVI file, and processes 'specials'
+ that refer to graphics capabilities that it knows about,
+ like line, spline, ThickThinSpline, and musical
+ beams and slurs. TeXtyl then outputs a new DVI file,
+ with the special-macros expanded and converted to
+ DVI-commands for character setting.
+
+DEPENDENCIES: Few assumptions about Pascal are assumed. All
+ identifiers are unique to eight characters. There are
+ notes to indicate system-dependencies.
+ I assume the standard definition of "READ(fil, x)" to be
+ equivalent to "x := fil^; GET(fil)" , and
+ "WRITE(fil, x)" == "fil^ := x; PUT(fil)" .
+ Arrays are passed by reference (VAR) for efficiency.
+ See also the "sysdependent" procedure;
+ Problem areas, or areas for expansion are marked with ###
+
+-------------------------------------------------------------*)
+(* Revision History:
+ Jun. 1986 v1.0 Basic version of TeXtyl
+ Dec. 1986 v1.1 Added adaptive subdivision for spline
+ interpolation. Added Cardinal basis.
+ Mar. 1987 v1.2 Added F and W flags for beginfigure
+ to allow required and/or actual dimensions
+ to interface with files output by the
+ DP drawing program from Carnegie-Mellon
+ also various fixes
+ Apr. 1987 v1.3 Added linestyles (dotted, dashed, dotdashed)
+
+*)
+
+label
+ 666, 30;
+(*=====================CONST============================*)
+#include "tylext.h"
+#include "texpaths.h"
+
+const
+ TylVersion = 'This is TeXtyl, Version 1.30';
+ (* for dvi-commands *)
+ PUT1 = 133;
+ SET1 = 128;
+ PUTRULE = 137;
+ NOP = 138;
+ PUSH = 141;
+ POP = 142;
+ RIGHTLEFT = 143;
+ DOWNUP = 157;
+ FONTDEF = 244;
+ USEFONT = 236;
+ OURFONTFLAG = 256; (* our special 'byte' value flag *)
+
+ USESTDAREA = 0; (* flag to use the 'standard' area to find .tfm files *)
+
+ (* some conversions and numbers *)
+ SPPERPT = 65536; (* scaled points per printers point *)
+ SPPERMM = 186468; (* scaled pts per millimetre *)
+
+ RADTODEG = 57.29577952; (* degrees per radian *)
+ DEGTORAD = 0.0174532925; (* radians per degree *)
+ PI = 3.141592654;
+
+ TWO16 = 65536; (* 2 ^ 16 *)
+ TWO20 = 1048576; (* 2 ^ 20 *)
+ TWO23 = 8388608;
+ TWO24 = 16777216;
+ TWO27 = 134217728;
+ TWO31 = 2147483647; (* 2^31 - 1 *)
+
+ BIGREAL = 1.0e30;
+ MAXVECLENsp = 262144; (* Normal maximum length of longest
+ * vector-font character in scaled points
+ *)
+ (* Music Font dependent constants *)
+ DOTCHAR = 127; (* ascii number of char that is a dot *)
+ QNOTEGHUS = 18.0; (* MF: Global Horizontal Units for a Quarternote *)
+ QNOTEGVUS = 16.0; (* MF: Global Vertical units for a quarternote *)
+ GBMGHUS = 12.0; (* MF: horizontal units for a grace beam *)
+ GBMGVUS = 9.0;
+
+ BMSTART = 0; BMEND = 69; (* indices for start/end of the beam chars *)
+ LOBM1 = 0; (* indices for the regular beam chars that *)
+ HIBM1 = 34; (* are 1 quarternote long, and *)
+ LOBM1p5 = 35; (* for those that are 1.5 quarternotes long *)
+ HIBM1p5 = 69;
+
+ GBMSTART = 70; GBMEND = 105; (* indices for the grace beams *)
+ LOGBMp5 = 70; (* indices for grace beam chars that *)
+ HIGBMp5 = 87; (* are 0.5 grace quarternote long, and *)
+ LOGBMp66 = 88; (* 0.66 grace quarternotes long *)
+ HIGBMp66 = 105;
+
+ LoVThick = 1; (* Bounds for Vector char thicknesses *)
+ HiVThick = 13;
+
+ SizVFontTable = 39; (* size of the Vector Font Table *) { 3*HiVThick }
+ SizMFontTable = 18;(* size of the Music Font Table *)
+ MAXLABELFONTS = 5;
+ SizLFontTable = MAXLABELFONTS; (* size of the Label Font Table *)
+
+ MAXCTLPTS = 63; (* max number of control points *)
+ MAXCTLPTSp3 = 66; (* max control points + 3 *)
+ ARRLIMIT = 100; (* limit for strings and other arrays *)
+ MAXSPLINESEGS = 480; (* max number of spline segments *)
+ MAXOLEN = 128; (* max length of Ostring that holds bytes of dvi cmds *)
+ MAXTBDs = 50; (* max number of Fonts-to-be-Defined *)
+
+ MAXDVISTRINGS = 600; (* max number of DVI Ostrings per page *)
+ TFMSIZE = 8000; (* size of TFM array to hold .tfm file info *)
+
+ (* Numeric names for the TeXtyl primitives *)
+ Aline = 1; (* should be first *)
+ Aspline = 2;
+ Attspline = 3;
+ Abeam = 4;
+ Atieslur = 5;
+ Aarc = 6;
+ Alabel = 7;
+ Afigure = 8; (* should be last one *)
+
+ MAXFONTS = 60; (* number of TeX fonts to keep track of *)
+ STACKSIZE = 50; (* size of stack for pushes and pops *)
+ AREALENGTH = TYLPATHLEN; (* see also "sysdependent" proc for this value*)
+
+ CR = 13; (* numbers of certain ascii characters *)
+ LF = 10;
+ HT = 9;
+ FF = 12;
+ ERRSIGNAL = '?';
+ ERRNOTBAD = 0;
+ ERRBAD = 1;
+ ERRREALBAD = 2;
+
+
+ READACCESS = 4;
+ WRITEACCESS = 2;
+ NOPATH = 0;
+ FONTPATH = 3;
+
+
+
+(*===========================TYPES=============================*)
+type
+ (* ---- Bytes ---- *)
+
+ Inbyt = -128 .. 127;
+
+ OctByt = 0 .. 256; (* DVI commands are 0..255, but we need
+ one more for an internal flag *)
+ bytefile = packed file of Inbyt;
+
+ (* ---- Strings ---- *)
+ asciicode = 32 .. 126;
+ charstring = packed array [1 .. ARRLIMIT] of char;
+ ascstring = packed array [1 .. ARRLIMIT] of asciicode;
+ (* rep for character strings *)
+ strng = record
+ len: 0 .. ARRLIMIT;
+ str:charstring;
+ end;
+ (* rep for ascii strings *)
+ astrng = record
+ len: 0 .. ARRLIMIT;
+ str: ascstring;
+ end;
+ (* byte strings *)
+ pOstring = ^Ostring;
+ Ostring = packed array[1 .. MAXOLEN] of OctByt;
+
+ (* ---- PUBLIC types ---- *)
+ VThickness = LoVThick .. HiVThick;
+ VectKind = (VKCirc, VKVert, VKHort);
+ BeamKind = (regular, grace);
+ SplineKind = (BSPL, INTBSPL, CATROM, CARD);
+ LineStyle = (solid, dotted, dashed, dotdash);
+ ScaledPts = integer;
+ MusIndex = integer;
+ VecIndex = integer;
+
+ ThickAryType = array[0 .. MAXSPLINESEGS] of VThickness;
+ SplineSegments = array[1 .. MAXSPLINESEGS, 1 .. 2] of ScaledPts;
+ ControlPoints = array [0 .. MAXCTLPTSp3, 1 .. 2] of ScaledPts;
+
+
+ (* ----- Private Types ---- *)
+ FontInfRec = record
+ Cht, Cdp, Cwd : ScaledPts;
+ Angle : real;
+ end;
+
+ pVectFontInfRec = ^VectFontInfRec; (* vector font info *)
+ VectFontInfRec = record
+ vkind : VectKind;
+ DesSize : ScaledPts;
+ PenSize : ScaledPts;
+ psize : VThickness;
+ MaxVectLen : ScaledPts;
+ FontName : strng;
+ Cksum : integer;
+ Isdefined : boolean;
+ DVIFontNum: integer;
+ FontInfo : array [0 .. 127] of FontInfRec;
+ end;
+
+ pMusFontInfRec = ^MusFontInfRec; (* music font info *)
+ MusFontInfRec = record
+ DesSize : ScaledPts;
+ Family : integer;
+ FontName : strng;
+ Cksum : integer;
+ Isdefined : boolean;
+ DVIFontNum: integer;
+ Staffsize : integer;
+ ghu : ScaledPts;
+ gvu : ScaledPts;
+ FontInfo : array [0 .. 127] of FontInfRec;
+ end;
+
+ pLabFontInfRec = ^LabFontInfRec; (* label fonts info *)
+ LabFontInfRec = record
+ DesSize : ScaledPts;
+ FontName : strng;
+ Cksum : integer;
+ Isdefined : boolean;
+ DVIFontNum : integer;
+ internalnumber : integer;
+ spacewidth : ScaledPts;
+ end;
+
+
+ (* list of dvi-strings *)
+ dvistary = array[1 .. MAXDVISTRINGS] of pOstring;
+
+ DVIBuftype = record
+ TotByteLen : integer;
+ Numstrings : integer;
+ curstrindex : integer;
+ Dstrings : dvistary;
+ end;
+
+ (* representation of list of fonts that have to be defined
+ * before we output the BOP of the page we
+ * just scanned
+ *)
+ ToBeDefinedRec = record
+ which : char;
+ indx : integer;
+ end;
+
+ stackrec = record
+ sh, sv, sw, sx, sy, sz: integer;
+ end;
+
+ Stacktype = array [0 .. STACKSIZE] of stackrec;
+
+ Oneby4Vector = array[1 .. 4] of real;
+ Fourby4Matrix = array[1 .. 4, 1 .. 4] of real;
+ Oneby5Vector = array[1 .. 5] of real;
+
+ Primitive = Aline .. Afigure;
+
+ pItem = ^Item;
+ figptr = ^Figure;
+
+ Item = packed record
+ nextitem : pItem;
+ BBlx, BBby, BBrx, BBty : ScaledPts; (* Bounding box *)
+ itemthick : VThickness;
+ itemvec : VectKind;
+ itempatt : LineStyle;
+ case kind : Primitive of
+ Aline : ( lx1, ly1, lx2, ly2 : ScaledPts;
+ );
+ Aspline : ( spltype : SplineKind;
+ sclosed : boolean;
+ dosmarks : integer;
+ nsplknots : integer;
+ spts : ControlPoints;
+ );
+ Attspline : ( tspltype : SplineKind;
+ tclosed : boolean;
+ dottmarks : integer;
+ nttknots : integer;
+ ttpts : ControlPoints;
+ ttarry : ThickAryType;
+ );
+ Abeam : ( bx1, by1, bx2, by2 : ScaledPts;
+ staf : integer;
+ bkind : BeamKind;
+ );
+ Atieslur : ( ntknots : integer;
+ minth, maxth : VThickness;
+ tspts : ControlPoints;
+ );
+ Aarc : ( acentx, acenty : ScaledPts;
+ aradius : ScaledPts;
+ firstang, lastang : integer;
+ narcknots : integer;
+ arcpts : ControlPoints;
+ );
+ Alabel : ( labx, laby : ScaledPts;
+ fontstyle : integer;
+ labeltext : strng;
+ );
+ Afigure : ( figtheta : real;
+ fsx, fsy : real;
+ fdx, fdy : ScaledPts;
+ preWid, preHt : ScaledPts;
+ postWid, postHt : ScaledPts;
+ depthnumber : integer;
+ body : figptr;
+ );
+ end;
+
+
+ Figure = record
+ things : pItem;
+ end;
+
+
+(*==============================VARS============================*)
+var
+ (* ----- Private vars *)
+ catrommtx : Fourby4Matrix; (* basis matrix for catmul-rom splines*)
+ bsplmtx : Fourby4Matrix; (* basis matrix for B-splines *)
+ cardmtx : Fourby4Matrix; (* Cardinal spline matrix *)
+ lastPoint : integer; (* num of output points *)
+ intervals : integer; (* count of spline interval we are on *)
+ ourxpos, (* internal x-position on page *)
+ ourypos, (* internal y-position on page *)
+ ourfontnum : integer; (* internal number of TeX font currently in use*)
+ ourpushdepth : integer; (* depth of internal pushes *)
+ origTexfont : integer; (* number of TeX font in use before tyling *)
+
+ GDVIBuf : DVIBuftype; (* Global DVI buffer that contains a list of
+ * dvi commands for this page. All dvi-cmds
+ * parsed are put here and possibly modified
+ * before being written to the output file
+ *)
+
+ VFontTable : array [1 .. SizVFontTable] of pVectFontInfRec;
+ MFontTable : array [1 .. SizMFontTable] of pMusFontInfRec;
+ LFontTable : array [1 .. SizLFontTable] of pLabFontInfRec;
+ (* the font tables, and the number of fonts defined in each *)
+ VFontsDefd,
+ MFontsDefd,
+ LFontsDefd : integer;
+
+ GDVIFN : integer; (* dvi font number currently in use *)
+
+ (* table of fonts yet To-Be-Defined *)
+ TBD : array[1 .. MAXTBDs] of ToBeDefinedRec;
+ FTBDs : integer; (* number of fonts to be defined for current page *)
+
+ pageitems : pItem; (* list of primitives in current use in the current
+ * figure on the current page
+ *)
+
+ TotBytesWritten : integer;
+ ourq : integer; (* the 'q' for the postpost *)
+ specstart: integer; (* the place in the DVI buffer where the
+ * start of the special begins.
+ * this is so that we know how far to back up
+ * and over-write the old \special macro string
+ * with the cmds of our 'macro-expansion'
+ *)
+
+ multifigure : integer; (* depth of definition recursion of figures *)
+ didnewfonts : boolean; (* did we define the new fonts for this page? *)
+ prevfont : integer; (* to keep track of prev font before the
+ * PUSH and expansion of the special
+ *)
+
+ pgfigurenum : integer; (* figure number for this page *)
+ currpagenum : integer; (* number of page we are on *)
+ skiptsclamp : boolean; (* DEBUG: should we skip post-clamping ties *)
+ dviBBlx, dviBBrx, (* Bounding box of figure in DVI space *)
+ dviBBby, dviBBty : ScaledPts;
+ ErrorOccurred : boolean; (* global flag in case some error happened *)
+
+
+ thefilename, realnameoffile : charstring; (* used externally *)
+
+ (* ----- End private vars *)
+
+
+ tfmbyte : Inbyt;
+
+ vaxbyt : Inbyt;
+
+ tfm: array[-100 .. TFMSIZE] of OctByt;
+
+ xord: array [char] of asciicode;
+ xchr: array [0 .. 255] of char;
+ outname: strng; (* name of output file *)
+ tfmname : strng; (* name of a .tfm file *)
+ dvifname : strng; (* name of the input dvi file *)
+ logfilnam: strng; (* name of the log file *)
+
+ dvifile: bytefile;
+ tfmfile: bytefile;
+ outputfil: bytefile;
+ logfile : text;
+
+ curfont: integer;
+ s : 0 .. STACKSIZE;
+ h, v, w, x, y, z: integer;
+ stack: Stacktype;
+
+ font: array [0 .. MAXFONTS] of
+ record
+ num: integer;
+ name: astrng;
+ checksum: integer;
+ scaledsize: integer;
+ designsize: integer;
+ space: integer;
+ bc: integer;
+ ec: integer;
+ widths: array [0 .. 127] of ScaledPts
+ end;
+ nf : 0 .. MAXFONTS;
+
+ MINREAL : real; (* a system-dependent 'constant' *)
+ b0, b1, b2, b3: OctByt;
+ inwidth: array [0 .. 255] of integer;
+ tfmchecksum: integer;
+ conv: real;
+ trueconv: real;
+ numerator,
+ denominator: integer;
+ defaultdirectory: strng;
+ mag,
+ magfactor: real;
+ maxv, maxh, maxs : integer;
+ maxpages,
+ totalpages : integer;
+ resolution: real;
+ inpostamble : boolean;
+ newbackptr,
+ oldbackptr : integer;
+ p, k : integer;
+ waste : integer;
+
+
+(* ==================forward declarations============================ *)
+
+{ These hooks assume that the parameters are filled "correctly",
+ and are already transformed into 4th Quadrant DVI-space }
+
+
+procedure TylTieSlur (var KnotArray: ControlPoints;
+ numknots: integer;
+ minthick, maxthick: VThickness); forward;
+
+procedure TylThickThinSpline (thetype : SplineKind;
+ isclosed : boolean;
+ var KnotArray: ControlPoints;
+ var ThikThinAry: ThickAryType;
+ numknots: integer;
+ vec: VectKind;
+ patt: LineStyle;
+ domarks : integer); forward;
+
+procedure TylSpline (thetype : SplineKind;
+ isclosed : boolean;
+ var KnotArray: ControlPoints;
+ numknots: integer;
+ thick: VThickness;
+ vec: VectKind;
+ patt: LineStyle;
+ domarks : integer); forward;
+
+procedure TylLine (xl, yb, xr, yt: ScaledPts;
+ thickness: VThickness;
+ vec: VectKind;
+ patt: LineStyle); forward;
+
+procedure TylBeam (fromx, fromy, tox, toy: ScaledPts;
+ staffsize : integer;
+ kind : BeamKind); forward;
+
+procedure TylArc (radius : ScaledPts;
+ centx, centy : ScaledPts;
+ firstangle, secondangle : integer;
+ thick : VThickness;
+ vec : VectKind;
+ patt: LineStyle); forward;
+
+procedure TylLabel (xpos, ypos : ScaledPts;
+ fontstyle : integer;
+ phrase : charstring;
+ phraselen : integer); forward;
+
+(* private procedures *)
+procedure definebeams (var M : pMusFontInfRec); forward;
+procedure definevectors (var Vec: pVectFontInfRec); forward;
+procedure defineNewfonts; forward;
+procedure doTylArc (iscircle : boolean; var apts : ControlPoints;
+ numknots : integer; thick : VThickness;
+ vec : VectKind; patt : LineStyle); forward;
+procedure strcopy (src : charstring; var dest : charstring;
+ len : integer); forward;
+procedure writestrng (s :strng; tologfile : boolean); forward;
+(* end private procs *)
+
+{------------------------------------------------------}
+procedure jumpout;
+begin
+ goto 666; (* global label *)
+end;
+
+
+(*-------------- System Dependent stuff ----------------------*)
+(* the default-directory should be where the .tfm files are
+ * to be found. the string len should reflect this name.
+ * Check with the local site maintainer about any necessary
+ * additions to the reset and rewrite procedures for opening
+ * 8-bit binary files.
+ *)
+
+
+
+
+
+procedure sysdependent;
+ begin
+
+
+ setpaths;
+
+ defaultdirectory.str := TYLPATH;
+ defaultdirectory.len := TYLPATHLEN; (* AREALENGTH const should be this, too *)
+ writeln(TylVersion,' for Berkeley Unix');
+
+ resolution := 300.0; (* just a number *)
+ MINREAL := 1.0e-20; (* so that we avoid some underflows *)
+ end;
+
+{------------------------------------------------------------}
+procedure complain (severity :integer);
+begin
+ writeln(logfile,'Error in fig#',pgfigurenum:0,' on page ',currpagenum:0);
+ case severity of
+ ERRNOTBAD : begin
+ write (ERRSIGNAL);
+ end;
+ ERRBAD : begin
+ write (ERRSIGNAL);
+ ErrorOccurred := true;
+ end;
+ ERRREALBAD : begin
+ write (ERRSIGNAL,'! ');
+ ErrorOccurred := true;
+ end;
+
+ end; (* case *)
+end;
+
+function opendvifile : boolean;
+begin
+
+ strcopy (dvifname.str, thefilename, dvifname.len);
+ thefilename[dvifname.len + 1] := ' ';
+ if (testaccess (READACCESS, NOPATH)) then
+ begin
+ reset (dvifile, realnameoffile);
+ opendvifile := true;
+ end
+ else
+ begin
+ writestrng(dvifname, false);
+ writeln(' : DVI file not found/readable ');
+ opendvifile := false;
+ end;
+
+end;
+
+function opentfmfile : boolean;
+begin
+
+ strcopy (tfmname.str, thefilename, tfmname.len);
+ thefilename[tfmname.len + 1] := ' ';
+ if (testaccess (READACCESS, FONTPATH)) then
+ begin
+ reset(tfmfile, realnameoffile);
+ opentfmfile := true;
+ end
+ else
+ begin
+ writestrng(tfmname, false);
+ writeln(' : TFM file not fount/readable ');
+ opentfmfile := false;
+ end;
+
+end;
+
+procedure openoutputfile;
+begin
+
+ strcopy (outname.str, thefilename, outname.len);
+ thefilename[outname.len + 1] := ' ';
+ if (testaccess (WRITEACCESS, NOPATH)) then
+ rewrite (outputfil, realnameoffile)
+ else
+ begin
+ writestrng(outname, false);
+ writeln(' : Output file not writable');
+ jumpout;
+ end;
+
+end;
+
+procedure openlogfile;
+begin
+
+ strcopy (logfilnam.str, thefilename, logfilnam.len);
+ thefilename[logfilnam.len + 1] := ' ';
+ if (testaccess (WRITEACCESS, NOPATH)) then
+ rewrite (logfile, realnameoffile)
+ else
+ begin
+ writestrng(logfilnam, false);
+ writeln(' : Log file not writable');
+ jumpout;
+ end;
+
+end;
+
+
+(* &&Module Tylsupport *)
+
+
+{---------------------------------------------------}
+procedure ClearBufString (var s : pOstring);
+(* clear a DVI buffer string to contain no-ops*)
+var i : integer;
+begin
+ for i := 1 to MAXOLEN do
+ s^[i] := NOP;
+end;
+
+{---------------------------------------------------}
+function NewBufString : pOstring;
+var s : pOstring;
+begin
+ new (s);
+ ClearBufString (s);
+ NewBufString := s;
+end;
+
+
+
+(* NOTATION::
+ * All procedures that put a dvi-command into the
+ * temporary buffer are prefixed with "cmd"...
+ * Functions that deal with reading .tfm files are prefixed
+ * with "T" or have "tfm" in their names.
+ * Functions that deal with reading DVI files are
+ * prefixed with a "D".
+ *)
+
+{--------------------------------------------}
+procedure cmd1byte (cmd : OctByt);
+begin
+ with GDVIBuf do
+ begin
+ if (Numstrings > MAXDVISTRINGS) then (* buffer full *)
+ begin
+ complain (ERRREALBAD);
+ writeln (logfile,'error: too many dvistrings. Totbytes = ',TotByteLen);
+ jumpout;
+ end;
+ if (curstrindex > MAXOLEN) then (* current string full *)
+ begin
+ Numstrings := Numstrings + 1;
+ if (Dstrings[Numstrings] <> nil) then
+ dispose (Dstrings[Numstrings]);
+ Dstrings[Numstrings] := NewBufString;
+ ClearBufString(Dstrings[Numstrings]);
+ curstrindex := 1;
+ end;
+ Dstrings[Numstrings]^[curstrindex] := cmd; (* insert command byte *)
+ TotByteLen := TotByteLen + 1;
+ curstrindex := curstrindex + 1;
+ end;
+end;
+
+
+{---------------------------------------------------}
+procedure cmd2byte (cmd : integer);
+begin
+ cmd1byte (cmd div 256);
+ cmd1byte (cmd mod 256);
+end;
+
+{---------------------------------------------------}
+procedure cmd3byte (cmd : integer);
+begin
+ cmd1byte (cmd div TWO16);
+ cmd1byte ((cmd div 256) mod 256);
+ cmd1byte (cmd mod 256);
+end;
+
+{---------------------------------------------------}
+procedure cmd4byte (cmd : integer);
+var tmp : integer;
+begin
+ tmp := cmd;
+ if (tmp >= 0) then
+ begin
+ cmd1byte (tmp div TWO24);
+ end
+ else
+ begin
+ tmp := tmp + TWO31 + 1; (* need the +1 *)
+ cmd1byte (tmp div TWO24 + 128);
+ end;
+ tmp := tmp mod TWO24;
+ cmd1byte (tmp div TWO16);
+ tmp := tmp mod TWO16;
+ cmd1byte (tmp div 256);
+ cmd1byte (tmp mod 256);
+end;
+
+{---------------------------------------------------}
+(* ### may be system dependent as integers are assumed
+ to be signed 32-bits *)
+
+procedure cmdSigned (i : integer; numbytes: integer);
+var tmp : integer;
+begin
+ if (numbytes = 4) then
+ cmd4byte (i)
+ else
+ begin (* <= 3 bytes *)
+ tmp := i;
+ if (numbytes = 3) then
+ begin
+ if (tmp < 0) then
+ tmp := tmp + TWO24;
+ cmd1byte (tmp div TWO16);
+ tmp := tmp mod TWO16;
+ cmd1byte (tmp div 256);
+ end;
+ if (numbytes = 2) then
+ begin
+ if (tmp < 0) then
+ tmp := tmp + TWO16;
+ cmd1byte (tmp div 256);
+ end;
+ if (numbytes = 1) then
+ begin
+ if (tmp < 0) then
+ tmp := tmp + 256;
+ end;
+ cmd1byte (tmp mod 256); (* for all *)
+ end;
+end;
+
+
+
+{---------------------------------------------------}
+function Tgetvaxbyte : OctByt;
+label 9999;
+begin
+ tfmbyte := tfmfile^;
+ if (tfmbyte < 0) then
+ Tgetvaxbyte := tfmbyte + 256
+ else
+ Tgetvaxbyte := tfmbyte;
+ if (eof (tfmfile)) then
+ begin
+ complain (ERRREALBAD);
+ writeln (logfile,' early EOF of tfm file! ');
+ goto 9999;
+ end;
+ get (tfmfile);
+9999:
+end;
+
+
+{---------------------------------------------------}
+procedure readtfmword;
+
+begin
+
+ b0 := Tgetvaxbyte;
+ b1 := Tgetvaxbyte;
+ b2 := Tgetvaxbyte;
+ b3 := Tgetvaxbyte;
+
+end;
+
+
+{---------------------------------------------------}
+function DVaxByte : OctByt;
+label 99;
+begin
+ vaxbyt := dvifile^;
+ if (eof (dvifile)) then
+ begin
+ DVaxByte := 0;
+ goto 99;
+ end;
+ if (vaxbyt < 0) then
+ DVaxByte := vaxbyt + 256
+ else
+ DVaxByte := vaxbyt;
+ get (dvifile);
+99:
+end;
+
+
+
+{---------------------------------------------------}
+(* get a byte from the DVI file, but do not copy it into the DVIbuffer *)
+function Dgrabbyte : integer;
+var
+ b: OctByt;
+begin
+ if eof(dvifile) then
+ Dgrabbyte := 0
+ else
+ begin
+
+ b := DVaxByte;
+
+ Dgrabbyte := b;
+ end;
+end;
+
+
+{---------------------------------------------------}
+function Dget1byte : integer;
+var
+ b: OctByt;
+begin
+ if eof(dvifile) then
+ Dget1byte := 0
+ else
+ begin
+
+ b := DVaxByte;
+
+ Dget1byte := b
+ end;
+ cmd1byte(b);
+end;
+
+{---------------------------------------------------}
+function Dsign1byte : integer;
+var
+ b: OctByt;
+begin
+
+ b := DVaxByte;
+
+ if b < 128 then
+ Dsign1byte := b
+ else
+ Dsign1byte := b - 256;
+ cmd1byte(b);
+end;
+
+{---------------------------------------------------}
+function Dget2byte : integer;
+var
+ a, b: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+
+ Dget2byte := a * 256 + b;
+ cmd1byte(a);
+ cmd1byte(b);
+end;
+
+{---------------------------------------------------}
+function Dsign2byte : integer;
+var
+ a, b: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+
+ if a < 128 then
+ Dsign2byte := a * 256 + b
+ else
+ Dsign2byte := (a - 256) * 256 + b;
+ cmd1byte(a);
+ cmd1byte(b);
+end;
+
+{---------------------------------------------------}
+function Dget3byte : integer;
+var
+ a, b, c: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+ c := DVaxByte;
+
+ Dget3byte := (a * 256 + b) * 256 + c;
+ cmd1byte(a);
+ cmd1byte(b);
+ cmd1byte(c);
+end;
+
+{---------------------------------------------------}
+function Dsign3byte : integer;
+var
+ a, b, c: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+ c := DVaxByte;
+
+ if a < 128 then
+ Dsign3byte := (a * 256 + b) * 256 + c
+ else
+ Dsign3byte := ((a - 256) * 256 + b) * 256 + c;
+ cmd1byte(a);
+ cmd1byte(b);
+ cmd1byte(c);
+end;
+
+{---------------------------------------------------}
+function Dsign4byte : integer;
+var
+ a, b, c, d: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+ c := DVaxByte;
+ d := DVaxByte;
+
+ if a < 128 then
+ Dsign4byte := ((a * 256 + b) * 256 + c) * 256 + d
+ else
+ Dsign4byte := (((a - 256) * 256 + b) * 256 + c) * 256 + d;
+ cmd1byte(a);
+ cmd1byte(b);
+ cmd1byte(c);
+ cmd1byte(d);
+end;
+
+
+{---------------------------------------------------}
+(* write a byte out to the ouput file, but if we
+ * encounter the font flag, define the new fonts, and
+ * continue
+ *)
+procedure OutputByte (b : OctByt);
+var x : Inbyt;
+ n : integer;
+begin
+ n := b;
+ if (n = OURFONTFLAG) then
+ begin (* our special macro-flag *)
+ n := NOP; (* nullify it *)
+ if (not didnewfonts) then
+ begin
+ didnewfonts := true;
+ defineNewfonts; (* expand the defns in the outfile itself *)
+ end;
+ end; (* if *)
+
+ if (n > 127) then
+ begin
+ x := n - 256;
+ end
+ else
+ x := n;
+ outputfil^ := x;
+ put (outputfil);
+
+ TotBytesWritten := TotBytesWritten + 1; (* keep count of all bytes *)
+end;
+
+{---------------------------------------------------}
+procedure Output2Byte (i : integer);
+begin
+ OutputByte (i div 256);
+ OutputByte (i mod 256);
+end;
+
+{---------------------------------------------------}
+procedure Output4Byte (i : integer);
+var tmp : integer;
+begin
+ tmp := i;
+ if (tmp >= 0) then
+ begin
+ OutputByte (tmp div TWO24);
+ end
+ else
+ begin
+ tmp := tmp + TWO31 + 1; (* need the +1 *)
+ OutputByte (tmp div TWO24 + 128);
+ end;
+ tmp := tmp mod TWO24;
+ OutputByte (tmp div TWO16);
+ tmp := tmp mod TWO16;
+ OutputByte (tmp div 256);
+ OutputByte (tmp mod 256);
+end;
+
+
+{---------------------------------------------------}
+
+function rtan (ang : real) : real;
+var rads : real;
+ cosrads : real;
+begin
+ rads := ang * DEGTORAD;
+ cosrads := cos (rads);
+ if (cosrads = 0.0) then { this happens at 90 and 270 }
+ cosrads := cos ((ang - 0.01) * DEGTORAD);
+ rtan := (sin (rads)) / (cosrads);
+end;
+
+{---------------------------------------------------}
+function float (i : integer) : real;
+begin
+ float := i + 0.00;
+end;
+
+
+{---------------------------------------------------}
+function tolowercase (let: char) : char;
+const Diff = 32; (* xord['a'] - xord['A'] *)
+var olet : integer;
+begin
+ olet := xord[let];
+ if (olet >= xord['A']) then
+ begin
+ if (olet <= xord['Z']) then
+ begin
+ let := xchr[olet + Diff];
+ end;
+ end;
+ tolowercase := let;
+end;
+
+{---------------------------------------------------}
+(* decide if the first string is the same as the second --
+ * at least the first 'len' characters
+ * We need this since most Pascal impls. are brain-dead
+ * when it comes to string comparisons
+ *)
+function streq (a, b : charstring; len : integer) : boolean;
+label 1;
+var i : integer;
+ same : boolean;
+begin
+ same := true;
+ for i := 1 to len do
+ begin
+ if (a[i] <> b[i]) then
+ begin
+ same := false;
+ goto 1;
+ end; (* if *)
+ end; (* for *)
+1:
+ streq := same;
+end; (* streq *)
+
+{-------------------------------------------------------}
+procedure strcopy (* src : charstring; var dest : charstring; len : integer *);
+var i : integer;
+ begin
+ for i := 1 to len do
+ dest[i] := src[i];
+ end;
+
+{-------------------------------------------------------}
+procedure writestrng (* s :strng; tologfile : boolean *);
+var i : integer;
+begin
+if (tologfile) then
+ begin
+ for i := 1 to s.len do
+ write (logfile, s.str[i]);
+ end
+else
+ begin
+ for i := 1 to s.len do
+ write (s.str[i]);
+ end;
+end;
+
+
+{---------------------------------------------------}
+(* Move the current DVI position to posx, posy by
+ * moving relatively from our current position
+ * and store the new position
+ *)
+
+procedure isetpos (posx, posy : integer);
+var dy, dx: ScaledPts;
+ numbytes : integer;
+begin
+ dx := posx - ourxpos;
+ dy := posy - ourypos;
+
+ numbytes := 1;
+ if ((dx < 128) and (dx >= -128)) then
+ numbytes := 1
+ else if ((dx < 32768) and (dx >= -32768)) then
+ numbytes := 2
+ else if ((dx < TWO23) and (dx >= - TWO23))then
+ numbytes := 3
+ else if ((dx < TWO31) and (dx >= - TWO31))then
+ numbytes := 4
+ else
+ begin
+ complain (ERRREALBAD);
+ writeln('Panic: dx is too big/small in isetpos: ',dx);
+ writeln(logfile,'Panic: dx is too big/small in isetpos: ',dx);
+ end;
+
+ cmd1byte (RIGHTLEFT + numbytes -1); (* number of bytes in its arg list *)
+ cmdSigned (dx, numbytes);
+
+ numbytes := 1;
+ if ((dy < 128) and (dy >= -128)) then
+ numbytes := 1
+ else if ((dy < 32768) and (dy >= -32768)) then
+ numbytes := 2
+ else if ((dy < TWO23) and (dy >= - TWO23))then
+ numbytes := 3
+ else if ((dy < TWO31) and (dy >= - TWO31))then
+ numbytes := 4
+ else
+ begin
+ complain (ERRREALBAD);
+ writeln('Panic: dy is too big/small in isetpos: ',dy);
+ writeln(logfile,'Panic: dy is too big/small in isetpos: ',dy);
+ end;
+
+ cmd1byte (DOWNUP + numbytes -1);
+
+ cmdSigned (dy, numbytes);
+
+ ourxpos := posx;
+ ourypos := posy;
+end;
+
+{---------------------------------------------------}
+(* put out a character *)
+procedure iputchar (charno : OctByt);
+begin
+ cmd1byte (PUT1);
+ cmd1byte (charno);
+end;
+
+
+{---------------------------------------------------}
+(* set the font number, but only if it is different than
+ * the last one we accessed.
+ *)
+procedure isetfont (DVINum : integer);
+begin
+ if (ourfontnum <> DVINum) then
+ begin
+ cmd1byte (USEFONT);
+ cmd2byte (DVINum);
+ ourfontnum := DVINum;
+ end;
+end;
+
+
+procedure IPUSH;
+begin
+ if (ourpushdepth = 0) then
+ begin (* first push --> start tyling *)
+ origTexfont := font[curfont].num;
+ end
+ else
+ begin
+ prevfont := ourfontnum; (* store the internal font number in use at this time *)
+ end;
+ cmd1byte (NOP);
+ cmd1byte (NOP); (* our greeting *)
+ cmd1byte (PUSH);
+ ourpushdepth := ourpushdepth + 1;
+end;
+
+procedure IPOP;
+begin
+ cmd1byte (POP);
+ cmd1byte(NOP);
+ cmd1byte(NOP); (* our signature *)
+ ourpushdepth := ourpushdepth - 1;
+ if (ourpushdepth < 0) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Error: too many internal pops');
+ end;
+ if (ourpushdepth = 0) then
+ begin (* we are totally done with tyling for now *)
+ if (nf > 0) then
+ isetfont (origTexfont); (* only if it is valid *)
+ end
+ else
+ begin
+ if (prevfont >= 0) then
+ isetfont(prevfont); (* restore that internal font previously in use *)
+ end;
+end;
+
+{---------------------------------------------------}
+(* Assumes that the correct font is currently set *)
+procedure Tyldot (dotx, doty : ScaledPts);
+begin
+ if (dotx <> 0) and (doty <> 0) then
+ isetpos (dotx, doty);
+ iputchar (DOTCHAR);
+end;
+
+{---------------------------------------------------}
+procedure InitDVIBuf;
+var i: integer;
+begin
+ with GDVIBuf do
+ begin
+ TotByteLen := 0;
+ Numstrings := 0;
+ for i := 1 to MAXDVISTRINGS do
+ Dstrings[i] := nil;
+ curstrindex := MAXOLEN + 1;
+ end;
+end;
+
+{---------------------------------------------------}
+procedure ClearDVIBuf;
+var i : integer;
+begin
+ with GDVIBuf do
+ begin
+ for i := 1 to Numstrings do
+ begin
+ dispose (Dstrings[i]);
+ Dstrings[i] := nil;
+ end;
+ TotByteLen := 0;
+ Numstrings := 0;
+ curstrindex := MAXOLEN + 1;
+ end;
+end;
+
+{---------------------------------------------------}
+procedure WriteDVIBuf;
+var i: integer;
+ curstr: integer;
+ b : OctByt;
+begin
+ curstr := 1;
+ with GDVIBuf do
+ begin
+ while (curstr < Numstrings) do
+ begin
+ for i := 1 to MAXOLEN do
+ begin
+ b := Dstrings[curstr]^[i];
+ OutputByte (b);
+ end;
+ curstr := curstr + 1;
+ end; (* while *)
+
+(* now do the last string *)
+ for i := 1 to (curstrindex - 1) do
+ begin
+ b := Dstrings[Numstrings]^[i];
+ OutputByte(b);
+ end; (* for *)
+ end; (* with *)
+ ClearDVIBuf;
+end;
+
+{---------------------------------------------------}
+procedure BackupInBuf (nbytes : integer);
+var nstrs, rem : integer;
+begin
+ with GDVIBuf do
+ begin
+ nstrs := (TotByteLen - nbytes) div MAXOLEN;
+ rem := (TotByteLen - nbytes) mod MAXOLEN;
+ Numstrings := nstrs + 1;
+ curstrindex := rem + 1; (* points to position to-be-filled *)
+ if (curstrindex = 0) then
+ curstrindex := MAXOLEN;
+ TotByteLen := TotByteLen - nbytes;
+ end;
+end;
+
+{-----------------------------------------------------}
+function DVIMark : integer;
+begin
+ DVIMark := GDVIBuf.TotByteLen;
+end;
+
+
+
+{---------------------------------------------}
+function NewItem (what : Primitive): pItem;
+var i : pItem;
+ f : figptr;
+begin
+
+ new (i);
+ with i^ do
+ begin
+ nextitem := nil;
+ BBlx := 0;
+ BBby := 0;
+ BBrx := 0;
+ BBty := 0;
+ itemthick := LoVThick;
+ itemvec := VKCirc;
+ itempatt := solid;
+ kind := what;
+ case (what) of (* give defaults *)
+ Aline : ;
+ Aspline: begin
+ nsplknots := 0;
+ dosmarks := 0;
+ sclosed := false;
+ spltype := BSPL;
+ end;
+ Attspline: begin
+ nttknots := 0;
+ dottmarks := 0;
+ tspltype := BSPL;
+ tclosed := false;
+ end;
+ Abeam : ;
+ Atieslur: begin
+ ntknots := 0;
+ end;
+ Aarc: begin
+ narcknots := 0;
+ end;
+ Alabel: begin
+ fontstyle := -1; (* undefined *)
+ labeltext.len := 0;
+ end;
+ Afigure: begin
+ figtheta := 0.0;
+ fsx := 1.0; fsy := 1.0;
+ fdx := 0; fdy := 0;
+ preWid := 0; preHt := 0;
+ postWid := 0; postHt := 0;
+ depthnumber := 0; (* for now *)
+ new (f); (* a new figure *)
+ body := f;
+ body^.things := nil;
+ end;
+ end; (*case *)
+ end; (* with *)
+ NewItem := i;
+end; (* NewItem *)
+
+{ ### Note: "pageitems" could be extended to be a list
+{ of macrodefinitions which contain primitives , and
+{ then could be instanced. E.g., a library of common
+{ figures callable from \special level }
+
+
+{------------------------------------------------------}
+procedure pushItem (depth : integer; newthing : pItem);
+label 101;
+var i, p : pItem;
+ dun : boolean;
+begin
+ if (pageitems = nil) then
+ begin
+ if (newthing^.kind = Afigure) then
+ begin
+ pageitems := newthing;
+ goto 101;
+ end
+ else
+ begin
+ pageitems := NewItem (Afigure);
+ pageitems^.depthnumber := depth;
+ end;
+ end;
+
+ (* Assume that pageitems points to Afigure *)
+
+ (* traverse the list *)
+ i := pageitems; (* point to front of list for now *)
+ p := i^.body^.things;
+ dun := false;
+ while ((p <> nil) and not dun) do
+ begin
+ if (depth = i^.depthnumber) then
+ begin (* simple push *)
+ dun := true;
+ (* Note: this is the case when pushing another figure item
+ onto an already-existing list. We push the newfigure
+ with a depth of (fig^.depthnumber - 1) because it
+ really is part of the higer-level figure
+ *)
+ end
+ else if (depth > i^.depthnumber) then
+ begin
+ (* there MUST be a figure with a higher number deeper *)
+ while ((p^.kind <> Afigure) and (p^.nextitem <> nil)) do
+ begin
+ p := p^.nextitem;
+ end;
+
+ if (p^.kind = Afigure) then
+ begin
+ i := p;
+ p := i^.body^.things;
+ end
+ else
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'OOPS p^.kind isnt a figure. It must be near endoflist');
+ end;
+ end;
+ end; (* while *)
+
+ (* we have the correct front of list-list,
+ and i points to Afigure item *)
+ newthing^.nextitem := p;
+ i^.body^.things := newthing;
+101:
+end; (* pushItem *)
+
+
+
+{---------------------------------------------}
+function Tgetfixword (k: integer) : real;
+var a : 0 .. 4096;
+ f : integer;
+begin
+ a := (tfm[k] * 16) + (tfm[k + 1] div 16);
+ f := ((((tfm[k + 1] mod 16) * 256)
+ + tfm[k + 2]) * 256)
+ + tfm[k + 3];
+ if (a > 2047) then
+ begin
+ a := 4096 - a;
+ if (f > 0) then
+ begin
+ f := TWO20 - f;
+ a := a - 1;
+ end;
+ end;
+ Tgetfixword := a + f / TWO20;
+end;
+
+{-----------------------------------------------------}
+function TgetSigned (k: integer): integer;
+var i: integer;
+begin
+ i := tfm[k];
+ if (i < 128) then
+ i := i - 256;
+ TgetSigned := (((((i * 256) + tfm[k + 1]) * 256) +
+ tfm[k + 2]) * 256) + tfm[k + 3];
+end;
+
+
+
+{-----------------------------------------------------------}
+(* open a .tfm file and return the parameters in it.
+ * Used only in conjuction with the vector and music fonts
+ *)
+procedure gettfm (tfmfilnam: strng;
+ var dessize, p1, p2, p3, p4, p5, p6, p7 : ScaledPts;
+ var cksum : integer);
+label 9999;
+var tfmptr: integer;
+ lf, lh, bc, ec, nw, nh, nd, ni, nl, nk, ne, np: integer;
+ charbase, widthbase, heightbase, depthbase,
+ italicbase, ligkernbase, kernbase, extenbase,
+ parambase : integer;
+ tempdesignsize : ScaledPts;
+begin
+ p1 := 0; p2 := 0; p3 := 0; p4 := 0;
+ p5 := 0; p6 := 0; p7 := 0;
+ cksum := -1;
+
+ strcopy(tfmfilnam.str, tfmname.str, tfmfilnam.len);
+ tfmname.len := tfmfilnam.len;
+
+ tfmname.str[tfmname.len + 1] := chr(32);
+
+ if (not opentfmfile) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, TFM file can''t be opened!');
+ writestrng(tfmname,false);
+ writeln(' cannot be opened. Aborting');
+ jumpout;
+ end;
+
+
+ tfm[0] := Tgetvaxbyte;
+ tfm[1] := Tgetvaxbyte;
+
+
+ lf := (tfm[0] * 256) + tfm[1];
+ if ((4 * lf - 1) > TFMSIZE) then
+ begin
+ complain (ERRREALBAD);
+ write(logfile,'The tfm file:');
+ writestrng(tfmfilnam, true);
+ writeln(logfile,' is bigger than I can handle!');
+ goto 9999;
+ end;
+
+ for tfmptr := 2 to (4 * lf) - 1 do
+ begin
+
+ tfm[tfmptr] := Tgetvaxbyte;
+
+ end; (* for *)
+
+ tfmptr := 2;
+ lh := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ bc := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ ec := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nw := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nh := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nd := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ ni := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nl := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nk := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ ne := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ np := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ if (lf <> (6 + lh + ((ec - bc) + 1) + nw + nh
+ + nd + ni + nl + nk + ne + np)) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmfilnam, true);
+ writeln(logfile,': subfile sizes don''t add up to the stated total!');
+ writeln(logfile,'Sorry, but I can''t go on; are you sure this is a TFM?');
+ goto 9999
+ end;
+ if (bc > (ec + 1)) or (ec > 255) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'The character code range ', bc: 1, '..', ec: 1, 'is illegal!');
+ writeln(logfile,'Sorry, but I can''t go on; are you sure this is a TFM?');
+ goto 9999;
+ end;
+ charbase := (6 + lh) - bc;
+ widthbase := (charbase + ec) + 1;
+ heightbase := widthbase + nw;
+ depthbase := heightbase + nh;
+ italicbase := depthbase + nd;
+ ligkernbase := italicbase + ni;
+ kernbase := ligkernbase + nl;
+ extenbase := kernbase + nk;
+ parambase := (extenbase + ne) - 1;
+
+ dessize := round (Tgetfixword (28) * SPPERPT); (* now in ScaledPts *)
+ tempdesignsize := round (dessize * magfactor);
+ cksum := TgetSigned (24);
+ (* return the special 7 parameters for the font *)
+ p1 := round (Tgetfixword (4 * (parambase + 1)) * tempdesignsize);
+ p2 := round (Tgetfixword (4 * (parambase + 2)) * tempdesignsize);
+ p3 := round (Tgetfixword (4 * (parambase + 3)) * tempdesignsize);
+ p4 := round (Tgetfixword (4 * (parambase + 4)) * tempdesignsize);
+ p5 := round (Tgetfixword (4 * (parambase + 5)) * tempdesignsize);
+ p6 := round (Tgetfixword (4 * (parambase + 6)) * tempdesignsize);
+ p7 := round (Tgetfixword (4 * (parambase + 7)) * tempdesignsize);
+
+9999:
+end;
+
+
+{---------------------------------------------------}
+procedure initVnMnLtables;
+var i: integer;
+begin
+ for i := 1 to SizVFontTable do
+ VFontTable[i] := nil;
+ for i := 1 to SizMFontTable do
+ MFontTable[i] := nil;
+ for i := 1 to SizLFontTable do
+ LFontTable[i] := nil;
+ VFontsDefd := 0;
+ MFontsDefd := 0;
+ LFontsDefd := 0;
+ GDVIFN := 300; (* starting number for any new fonts that we define *)
+end;
+
+
+{-------------------------------------------------------}
+procedure fonttobedefined (kind : char; findex : integer);
+begin
+ FTBDs := FTBDs + 1;
+(* reset this to zero after outputting
+ 1. fontdefs
+ 2. bop
+ 3. contents of dvi page
+ 4. eop
+*)
+ TBD[FTBDs].which := kind;
+ TBD[FTBDs].indx := findex;
+end;
+
+
+{-----------------------------------------------------}
+procedure enterfont (fontnum : integer; ck : integer;
+ scalefact, dessiz : ScaledPts;
+ nam : strng);
+var n: integer;
+ len : integer;
+begin
+ cmd1byte(FONTDEF);
+ cmd2byte(fontnum);
+ cmd4byte(ck);
+ cmd4byte(scalefact);
+ cmd4byte(dessiz);
+ cmd1byte(USESTDAREA);
+
+ len := nam.len;
+
+
+ cmd1byte(len - 4); (* skip the length of the .tfm suffix *)
+
+
+ for n := 1 to (nam.len - 4) do
+
+ begin (* skip the .tfm suffix *)
+ cmd1byte (xord [ nam.str[n] ]);
+ end;
+end;
+
+
+{-----------------------------------------------------}
+procedure Outputfont (fontnum : integer; ck : integer;
+ scalefact, dessiz : ScaledPts;
+ nam : strng);
+var n: integer;
+ len : integer;
+begin
+ OutputByte(FONTDEF);
+ Output2Byte(fontnum);
+ Output4Byte(ck);
+ Output4Byte(scalefact);
+ Output4Byte(dessiz);
+ OutputByte(USESTDAREA);
+
+ len := nam.len;
+
+
+ OutputByte(len - 4);
+
+
+ for n := 1 to (nam.len - 4) do
+
+ begin (* dont output the default dir prefix, nor the .tfm suffix *)
+ OutputByte(xord [ nam.str[n] ]);
+ end;
+end;
+
+{-----------------------------------------------------}
+procedure defineNewfonts;
+(* this needs to be done before first access to a font on a page
+ later someone else will have to re-define all of them in the postamble *)
+label 99;
+var i, n : integer;
+ f : integer;
+begin
+ for i := 1 to FTBDs do
+ begin
+ if (TBD[i].which = 'V') then
+ begin
+ f := TBD[i].indx;
+ with VFontTable[f]^ do
+ begin
+ if (Isdefined) then
+ goto 99;
+ Outputfont (DVIFontNum, Cksum, DesSize, DesSize,
+ FontName);
+ Isdefined := true;
+ end; (*with *)
+ end (* if *)
+ else if (TBD[i].which = 'M') then
+ begin (* music font *)
+ f := TBD[i].indx;
+ with MFontTable[f]^ do
+ begin
+ if (Isdefined) then
+ goto 99;
+ Outputfont (DVIFontNum, Cksum, DesSize, DesSize,
+ FontName);
+ Isdefined := true;
+ end; (* with *)
+ end (* else *)
+ else if (TBD[i].which = 'L') then
+ begin (* label font *)
+ f := TBD[i].indx;
+ with LFontTable[f]^ do
+ begin
+ if (Isdefined) then
+ goto 99;
+ Outputfont (DVIFontNum, Cksum, DesSize, DesSize, {### is this right?}
+ FontName);
+ Isdefined := true;
+ end; (* with *)
+ end
+ else
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Unknown type of font to be defined:"',TBD[i].which,'"');
+ end; (* else *)
+99:
+ end; (* for *)
+end;
+
+
+{---------------------------------------------------}
+function GetMusFont (stfsiz, fam : integer) : MusIndex;
+label 20, 99;
+var mustfmnam : strng;
+ found, i : MusIndex;
+ design, p1, p2, p3, p4, linesp, gwidth, p7 : ScaledPts;
+ cksm, r, k : integer;
+begin
+ (* see if it already exists *)
+ found := 0;
+ for i := 1 to MFontsDefd do (* loop through since there are few *)
+ with MFontTable[i]^ do
+ begin
+ if (Staffsize = stfsiz) and
+ (Family = fam) then
+ begin
+ found := i;
+ goto 20;
+ end;
+ end; (* with *)
+
+20: if (found <> 0) then
+ begin
+ GetMusFont := found;
+ goto 99;
+ end;
+
+ (* Not here already--go get it *)
+ for k := 1 to ARRLIMIT do
+ mustfmnam.str[k] := ' ';
+
+ r := 0;
+
+ mustfmnam.str[r+1] := 'm';
+ mustfmnam.str[r+2] := 'u';
+ mustfmnam.str[r+3] := 's';
+ mustfmnam.str[r+4] := xchr[stfsiz + xord['0']];
+ mustfmnam.str[r+5] := xchr[fam + xord['0']];
+ mustfmnam.str[r+6] := '.';
+ mustfmnam.str[r+7] := 't';
+ mustfmnam.str[r+8] := 'f';
+ mustfmnam.str[r+9] := 'm';
+
+ mustfmnam.str[r+10] := chr(32);
+
+ mustfmnam.len := 9 + r;
+ gettfm (mustfmnam, design, p1, p2, p3, p4, linesp, gwidth, p7, cksm);
+
+ MFontsDefd := MFontsDefd + 1;
+ if (MFontsDefd > SizMFontTable) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(mustfmnam, true);
+ writeln(logfile,'---not loadable. Size of Music Font table too small');
+ writestrng(mustfmnam,false);
+ writeln(' cannot be loaded. Too many music fonts. Table too small.');
+ jumpout;
+ end;
+
+ i := MFontsDefd;
+ new (MFontTable[i]);
+ with MFontTable[i]^ do
+ begin
+ Staffsize := stfsiz;
+ Family := fam;
+ DesSize := design;
+ strcopy (mustfmnam.str, FontName.str, mustfmnam.len);
+ FontName.len := mustfmnam.len;
+ Cksum := cksm;
+ ghu := round (gwidth / QNOTEGHUS);
+ gvu := round (linesp / QNOTEGVUS);
+ DVIFontNum := GDVIFN + 1;
+ Isdefined := false;
+ end;
+
+ GDVIFN := GDVIFN + 1;
+(* call someone to do the defns of cdp, cht, cwd foreach beam *)
+ definebeams (MFontTable[i]);
+ fonttobedefined ('M', i);
+ GetMusFont := i;
+99:
+end;
+
+
+{---------------------------------------------------}
+function GetVectFont (size : VThickness; vk : VectKind) : VecIndex;
+label 20, 99;
+var vectfmnam : strng;
+ found, i : VecIndex;
+ design, p1, p2, w0, w1, maxveclen, p6, p7 : ScaledPts;
+ cksm, r, k : integer;
+begin
+ (* see if it already exists *)
+ found := 0;
+
+ for i := 1 to VFontsDefd do
+ with VFontTable[i]^ do
+ begin
+ if ((psize = size) and
+ (vkind = vk)) then
+ begin
+ found := i;
+ goto 20;
+ end;
+ end; (* with *)
+
+20:
+ if (found <> 0) then
+ begin
+ GetVectFont := found;
+ goto 99;
+ end;
+
+ (* Not here--go get it *)
+ for k := 1 to ARRLIMIT do
+ vectfmnam.str[k] := ' ';
+
+ r := 0;
+
+ case (vk) of
+ VKCirc : vectfmnam.str[r+1] := 'c';
+ VKVert : vectfmnam.str[r+1] := 'v';
+ VKHort : vectfmnam.str[r+1] := 'h';
+ end; (*case *)
+ vectfmnam.str[r+2] := 'v';
+ vectfmnam.str[r+3] := 'e';
+ vectfmnam.str[r+4] := 'c';
+ if (size <= 9) then
+ begin
+ vectfmnam.str[r+5] := xchr[size + xord['0']];
+ vectfmnam.str[r+6] := '.';
+ vectfmnam.str[r+7] := 't';
+ vectfmnam.str[r+8] := 'f';
+ vectfmnam.str[r+9] := 'm';
+
+ vectfmnam.str[r+10] := chr(32);
+
+ vectfmnam.len := 9 + r;
+ end
+ else
+ begin
+ vectfmnam.str[r+5] := xchr[(size div 10) + xord['0']];
+ vectfmnam.str[r+6] := xchr[(size - ((size div 10)*10)) + xord['0']];
+ vectfmnam.str[r+7] := '.';
+ vectfmnam.str[r+8] := 't';
+ vectfmnam.str[r+9] := 'f';
+ vectfmnam.str[r+10] := 'm';
+
+ vectfmnam.str[r+11] := chr(32);
+
+ vectfmnam.len := 10 + r;
+ end;
+
+ gettfm (vectfmnam, design, p1, p2, w0, w1, maxveclen, p6, p7, cksm);
+ VFontsDefd := VFontsDefd + 1;
+ if (VFontsDefd > SizVFontTable) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(vectfmnam, true);
+ writeln(logfile,'---not loadable. Size of Vector Font table too small');
+ writestrng(vectfmnam,false);
+ writeln(' cannot be loaded. Too many vector fonts. Table too small.');
+ jumpout;
+ end;
+
+ i := VFontsDefd;
+ new (VFontTable[i]);
+ with VFontTable[i]^ do
+ begin
+ vkind := vk;
+ psize := size;
+ DesSize := design;
+ if (vk = VKVert) then
+ PenSize := w1
+ else
+ PenSize := w0;
+ PenSize := round (size * (MAXVECLENsp / 16.0));
+ MaxVectLen := maxveclen;
+ strcopy (vectfmnam.str, FontName.str, vectfmnam.len);
+ FontName.len := vectfmnam.len;
+ Cksum := cksm;
+ Isdefined := false;
+ DVIFontNum := GDVIFN + 1;
+ end;
+
+ GDVIFN := GDVIFN + 1;
+
+ definevectors (VFontTable[i]);
+(* someone asked for it, so they must want it, and we should fntdef it *)
+ fonttobedefined ('V', i);
+ GetVectFont := i;
+99:
+end;
+
+{----------------------------------------------------------}
+function GetLabFont (style : integer) : integer;
+label 30, 99;
+var labtfmnam : strng;
+ found, i : integer;
+ design, p1, space, p3, p4, p5, p6, p7 : ScaledPts;
+ cksm, r, k : integer;
+begin
+if (style > MAXLABELFONTS) then
+ style := 1;
+ found := 0;
+ for i := 1 to LFontsDefd do
+ with LFontTable[i]^ do
+ begin
+ if (internalnumber = style) then
+ begin
+ found := i;
+ goto 30;
+ end;
+ end;
+30:
+ if (found <> 0) then
+ begin
+ GetLabFont := found;
+ goto 99;
+ end;
+ for k := 1 to ARRLIMIT do
+ labtfmnam.str[k] := ' ';
+
+ r := 0;
+
+ labtfmnam.str[r + 1] := 'c';
+ labtfmnam.str[r + 2] := 'm';
+ case style of
+ 1: begin (* cmtt10 *)
+ labtfmnam.str[r + 3] := 't';
+ labtfmnam.str[r + 4] := 't';
+ labtfmnam.str[r + 5] := '1';
+ labtfmnam.str[r + 6] := '0';
+ k := r + 6;
+ end;
+ 2: begin (* cmb10 *)
+ labtfmnam.str[r + 3] := 'b';
+ labtfmnam.str[r + 4] := '1';
+ labtfmnam.str[r + 5] := '0';
+ k := r + 5;
+ end;
+ 3: begin (* cmsl10 *)
+ labtfmnam.str[r + 3] := 's';
+ labtfmnam.str[r + 4] := 'l';
+ labtfmnam.str[r + 5] := '1';
+ labtfmnam.str[r + 6] := '0';
+ k := r + 6;
+ end;
+ 4: begin (* cmtt8 *)
+ labtfmnam.str[r + 3] := 't';
+ labtfmnam.str[r + 4] := 't';
+ labtfmnam.str[r + 5] := '8';
+ k := r + 5;
+ end;
+ 5: begin (* cmsl8 *)
+ labtfmnam.str[r + 3] := 's';
+ labtfmnam.str[r + 4] := 'l';
+ labtfmnam.str[r + 5] := '8';
+ k := r + 5;
+ end;
+ end; (* case *)
+ labtfmnam.str[k + 1] := '.';
+ labtfmnam.str[k + 2] := 't';
+ labtfmnam.str[k + 3] := 'f';
+ labtfmnam.str[k + 4] := 'm';
+
+ labtfmnam.str[k+5] := chr(32);
+
+ labtfmnam.len := k + 4;
+
+ gettfm (labtfmnam, design, p1, space, p3, p4, p5, p6, p7, cksm);
+
+ LFontsDefd := LFontsDefd + 1;
+
+ if (LFontsDefd > SizLFontTable) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(labtfmnam, true);
+ writeln(logfile,'---not loadable. Size of Label Font table too small');
+ writestrng(labtfmnam,false);
+ writeln(' cannot be loaded. Too many label fonts. Table too small.');
+ jumpout;
+ end;
+
+ i := LFontsDefd;
+ new (LFontTable[i]);
+ with LFontTable[i]^ do
+ begin
+ strcopy (labtfmnam.str, FontName.str, labtfmnam.len);
+ FontName.len := labtfmnam.len;
+ Cksum := cksm;
+ DesSize := design;
+ internalnumber := style;
+ spacewidth := space;
+ DVIFontNum := GDVIFN +1;
+ Isdefined := false;
+ end; (* with *)
+
+ GDVIFN := GDVIFN + 1;
+ fonttobedefined ('L', i);
+ GetLabFont := i;
+99:
+end;
+
+
+{------------------------------------------------}
+function vectangle (dx, dy : integer) :real;
+begin
+ if (dx <> 0) then
+ vectangle := arctan (dy / (dx * 1.0)) * RADTODEG
+ else
+ begin
+ if (dy > 0) then
+ vectangle := 90.0
+ else
+ vectangle := -90.0;
+ end;
+end;
+
+
+{-----------------------------------------------------------}
+procedure definevectors (* var Vec: pVectFontInfRec *);
+var units : real;
+begin
+ units := Vec^.MaxVectLen / 16.0;
+with Vec^.FontInfo[ 0] do begin
+ Cht := round( 15.9688 * units);
+ Cdp := 0;
+ Cwd := round( 0.9981 * units);
+ Angle := 86.4237;
+end;
+
+with Vec^.FontInfo[ 1] do begin
+ Cht := round( 15.8764 * units);
+ Cdp := 0;
+ Cwd := round( 1.9846 * units);
+ Angle := 82.8750;
+end;
+
+with Vec^.FontInfo[ 2] do begin
+ Cht := round( 15.7260 * units);
+ Cdp := 0;
+ Cwd := round( 2.9486 * units);
+ Angle := 79.3803;
+end;
+
+with Vec^.FontInfo[ 3] do begin
+ Cht := round( 15.5223 * units);
+ Cdp := 0;
+ Cwd := round( 3.8806 * units);
+ Angle := 75.9638;
+end;
+
+with Vec^.FontInfo[ 4] do begin
+ Cht := round( 15.2717 * units);
+ Cdp := 0;
+ Cwd := round( 4.7724 * units);
+ Angle := 72.6460;
+end;
+
+with Vec^.FontInfo[ 5] do begin
+ Cht := round( 14.9813 * units);
+ Cdp := 0;
+ Cwd := round( 5.6180 * units);
+ Angle := 69.4440;
+end;
+
+with Vec^.FontInfo[ 6] do begin
+ Cht := round( 14.6585 * units);
+ Cdp := 0;
+ Cwd := round( 6.4131 * units);
+ Angle := 66.3706;
+end;
+
+with Vec^.FontInfo[ 7] do begin
+ Cht := round( 14.3108 * units);
+ Cdp := 0;
+ Cwd := round( 7.1554 * units);
+ Angle := 63.4349;
+end;
+
+with Vec^.FontInfo[ 8] do begin
+ Cht := round( 13.9452 * units);
+ Cdp := 0;
+ Cwd := round( 7.8442 * units);
+ Angle := 60.6422;
+end;
+
+with Vec^.FontInfo[ 9] do begin
+ Cht := round( 13.5680 * units);
+ Cdp := 0;
+ Cwd := round( 8.4800 * units);
+ Angle := 57.9946;
+end;
+
+with Vec^.FontInfo[ 10] do begin
+ Cht := round( 13.1847 * units);
+ Cdp := 0;
+ Cwd := round( 9.0645 * units);
+ Angle := 55.4915;
+end;
+
+with Vec^.FontInfo[ 11] do begin
+ Cht := round( 12.8000 * units);
+ Cdp := 0;
+ Cwd := round( 9.6000 * units);
+ Angle := 53.1301;
+end;
+
+with Vec^.FontInfo[ 12] do begin
+ Cht := round( 12.4178 * units);
+ Cdp := 0;
+ Cwd := round( 10.0895 * units);
+ Angle := 50.9061;
+end;
+
+with Vec^.FontInfo[ 13] do begin
+ Cht := round( 12.0412 * units);
+ Cdp := 0;
+ Cwd := round( 10.5361 * units);
+ Angle := 48.8141;
+end;
+
+with Vec^.FontInfo[ 14] do begin
+ Cht := round( 11.6726 * units);
+ Cdp := 0;
+ Cwd := round( 10.9431 * units);
+ Angle := 46.8476;
+end;
+
+with Vec^.FontInfo[ 15] do begin
+ Cht := round( 11.3137 * units);
+ Cdp := 0;
+ Cwd := round( 11.3137 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[ 16] do begin
+ Cht := round( 10.9431 * units);
+ Cdp := 0;
+ Cwd := round( 11.6726 * units);
+ Angle := 43.1524;
+end;
+
+with Vec^.FontInfo[ 17] do begin
+ Cht := round( 10.5361 * units);
+ Cdp := 0;
+ Cwd := round( 12.0412 * units);
+ Angle := 41.1859;
+end;
+
+with Vec^.FontInfo[ 18] do begin
+ Cht := round( 10.0895 * units);
+ Cdp := 0;
+ Cwd := round( 12.4178 * units);
+ Angle := 39.0939;
+end;
+
+with Vec^.FontInfo[ 19] do begin
+ Cht := round( 9.6000 * units);
+ Cdp := 0;
+ Cwd := round( 12.8000 * units);
+ Angle := 36.8699;
+end;
+
+with Vec^.FontInfo[ 20] do begin
+ Cht := round( 9.0645 * units);
+ Cdp := 0;
+ Cwd := round( 13.1847 * units);
+ Angle := 34.5085;
+end;
+
+with Vec^.FontInfo[ 21] do begin
+ Cht := round( 8.4800 * units);
+ Cdp := 0;
+ Cwd := round( 13.5680 * units);
+ Angle := 32.0054;
+end;
+
+with Vec^.FontInfo[ 22] do begin
+ Cht := round( 7.8442 * units);
+ Cdp := 0;
+ Cwd := round( 13.9452 * units);
+ Angle := 29.3578;
+end;
+
+with Vec^.FontInfo[ 23] do begin
+ Cht := round( 7.1554 * units);
+ Cdp := 0;
+ Cwd := round( 14.3108 * units);
+ Angle := 26.5651;
+end;
+
+with Vec^.FontInfo[ 24] do begin
+ Cht := round( 6.4131 * units);
+ Cdp := 0;
+ Cwd := round( 14.6585 * units);
+ Angle := 23.6294;
+end;
+
+with Vec^.FontInfo[ 25] do begin
+ Cht := round( 5.6180 * units);
+ Cdp := 0;
+ Cwd := round( 14.9813 * units);
+ Angle := 20.5560;
+end;
+
+with Vec^.FontInfo[ 26] do begin
+ Cht := round( 4.7724 * units);
+ Cdp := 0;
+ Cwd := round( 15.2717 * units);
+ Angle := 17.3540;
+end;
+
+with Vec^.FontInfo[ 27] do begin
+ Cht := round( 3.8806 * units);
+ Cdp := 0;
+ Cwd := round( 15.5223 * units);
+ Angle := 14.0362;
+end;
+
+with Vec^.FontInfo[ 28] do begin
+ Cht := round( 2.9486 * units);
+ Cdp := 0;
+ Cwd := round( 15.7260 * units);
+ Angle := 10.6197;
+end;
+
+with Vec^.FontInfo[ 29] do begin
+ Cht := round( 1.9846 * units);
+ Cdp := 0;
+ Cwd := round( 15.8764 * units);
+ Angle := 7.1250;
+end;
+
+with Vec^.FontInfo[ 30] do begin
+ Cht := round( 0.9981 * units);
+ Cdp := 0;
+ Cwd := round( 15.9688 * units);
+ Angle := 3.5763;
+end;
+
+with Vec^.FontInfo[ 31] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 16.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[ 32] do begin
+ Cdp := round( 0.9981 * units);
+ Cht := 0;
+ Cwd := round( 15.9688 * units);
+ Angle := -3.5763;
+end;
+
+with Vec^.FontInfo[ 33] do begin
+ Cdp := round( 1.9846 * units);
+ Cht := 0;
+ Cwd := round( 15.8764 * units);
+ Angle := -7.1250;
+end;
+
+with Vec^.FontInfo[ 34] do begin
+ Cdp := round( 2.9486 * units);
+ Cht := 0;
+ Cwd := round( 15.7260 * units);
+ Angle := -10.6197;
+end;
+
+with Vec^.FontInfo[ 35] do begin
+ Cdp := round( 3.8806 * units);
+ Cht := 0;
+ Cwd := round( 15.5223 * units);
+ Angle := -14.0362;
+end;
+
+with Vec^.FontInfo[ 36] do begin
+ Cdp := round( 4.7724 * units);
+ Cht := 0;
+ Cwd := round( 15.2717 * units);
+ Angle := -17.3540;
+end;
+
+with Vec^.FontInfo[ 37] do begin
+ Cdp := round( 5.6180 * units);
+ Cht := 0;
+ Cwd := round( 14.9813 * units);
+ Angle := -20.5560;
+end;
+
+with Vec^.FontInfo[ 38] do begin
+ Cdp := round( 6.4131 * units);
+ Cht := 0;
+ Cwd := round( 14.6585 * units);
+ Angle := -23.6294;
+end;
+
+with Vec^.FontInfo[ 39] do begin
+ Cdp := round( 7.1554 * units);
+ Cht := 0;
+ Cwd := round( 14.3108 * units);
+ Angle := -26.5651;
+end;
+
+with Vec^.FontInfo[ 40] do begin
+ Cdp := round( 7.8442 * units);
+ Cht := 0;
+ Cwd := round( 13.9452 * units);
+ Angle := -29.3578;
+end;
+
+with Vec^.FontInfo[ 41] do begin
+ Cdp := round( 8.4800 * units);
+ Cht := 0;
+ Cwd := round( 13.5680 * units);
+ Angle := -32.0054;
+end;
+
+with Vec^.FontInfo[ 42] do begin
+ Cdp := round( 9.0645 * units);
+ Cht := 0;
+ Cwd := round( 13.1847 * units);
+ Angle := -34.5085;
+end;
+
+with Vec^.FontInfo[ 43] do begin
+ Cdp := round( 9.6000 * units);
+ Cht := 0;
+ Cwd := round( 12.8000 * units);
+ Angle := -36.8699;
+end;
+
+with Vec^.FontInfo[ 44] do begin
+ Cdp := round( 10.0895 * units);
+ Cht := 0;
+ Cwd := round( 12.4178 * units);
+ Angle := -39.0939;
+end;
+
+with Vec^.FontInfo[ 45] do begin
+ Cdp := round( 10.5361 * units);
+ Cht := 0;
+ Cwd := round( 12.0412 * units);
+ Angle := -41.1859;
+end;
+
+with Vec^.FontInfo[ 46] do begin
+ Cdp := round( 10.9431 * units);
+ Cht := 0;
+ Cwd := round( 11.6726 * units);
+ Angle := -43.1524;
+end;
+
+with Vec^.FontInfo[ 47] do begin
+ Cdp := round( 11.3137 * units);
+ Cht := 0;
+ Cwd := round( 11.3137 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[ 48] do begin
+ Cdp := round ( 11.6726 * units);
+ Cht := 0;
+ Cwd := round( 10.9431 * units);
+ Angle := -46.8476;
+end;
+
+with Vec^.FontInfo[ 49] do begin
+ Cdp := round ( 12.0412 * units);
+ Cht := 0;
+ Cwd := round( 10.5361 * units);
+ Angle := -48.8141;
+end;
+
+with Vec^.FontInfo[ 50] do begin
+ Cdp := round ( 12.4178 * units);
+ Cht := 0;
+ Cwd := round( 10.0895 * units);
+ Angle := -50.9061;
+end;
+
+with Vec^.FontInfo[ 51] do begin
+ Cdp := round ( 12.8000 * units);
+ Cht := 0;
+ Cwd := round( 9.6000 * units);
+ Angle := -53.1301;
+end;
+
+with Vec^.FontInfo[ 52] do begin
+ Cdp := round ( 13.1847 * units);
+ Cht := 0;
+ Cwd := round( 9.0645 * units);
+ Angle := -55.4915;
+end;
+
+with Vec^.FontInfo[ 53] do begin
+ Cdp := round ( 13.5680 * units);
+ Cht := 0;
+ Cwd := round( 8.4800 * units);
+ Angle := -57.9946;
+end;
+
+with Vec^.FontInfo[ 54] do begin
+ Cdp := round ( 13.9452 * units);
+ Cht := 0;
+ Cwd := round( 7.8442 * units);
+ Angle := -60.6422;
+end;
+
+with Vec^.FontInfo[ 55] do begin
+ Cdp := round ( 14.3108 * units);
+ Cht := 0;
+ Cwd := round( 7.1554 * units);
+ Angle := -63.4349;
+end;
+
+with Vec^.FontInfo[ 56] do begin
+ Cdp := round ( 14.6585 * units);
+ Cht := 0;
+ Cwd := round( 6.4131 * units);
+ Angle := -66.3706;
+end;
+
+with Vec^.FontInfo[ 57] do begin
+ Cdp := round ( 14.9813 * units);
+ Cht := 0;
+ Cwd := round( 5.6180 * units);
+ Angle := -69.4440;
+end;
+
+with Vec^.FontInfo[ 58] do begin
+ Cdp := round ( 15.2717 * units);
+ Cht := 0;
+ Cwd := round( 4.7724 * units);
+ Angle := -72.6460;
+end;
+
+with Vec^.FontInfo[ 59] do begin
+ Cdp := round ( 15.5223 * units);
+ Cht := 0;
+ Cwd := round( 3.8806 * units);
+ Angle := -75.9638;
+end;
+
+with Vec^.FontInfo[ 60] do begin
+ Cdp := round ( 15.7260 * units);
+ Cht := 0;
+ Cwd := round( 2.9486 * units);
+ Angle := -79.3803;
+end;
+
+with Vec^.FontInfo[ 61] do begin
+ Cdp := round ( 15.8764 * units);
+ Cht := 0;
+ Cwd := round( 1.9846 * units);
+ Angle := -82.8750;
+end;
+
+with Vec^.FontInfo[ 62] do begin
+ Cdp := round ( 15.9688 * units);
+ Cht := 0;
+ Cwd := round( 0.9981 * units);
+ Angle := -86.4237;
+end;
+
+with Vec^.FontInfo[ 63] do begin
+ Cht := round( 8.0000 * units);
+ Cdp := 0;
+ Cwd := 0;
+ Angle := 90.0000;
+end;
+
+with Vec^.FontInfo[ 64] do begin
+ Cht := round( 7.9382 * units);
+ Cdp := 0;
+ Cwd := round( 0.9923 * units);
+ Angle := 82.8750;
+end;
+
+with Vec^.FontInfo[ 65] do begin
+ Cht := round( 7.7611 * units);
+ Cdp := 0;
+ Cwd := round( 1.9403 * units);
+ Angle := 75.9638;
+end;
+
+with Vec^.FontInfo[ 66] do begin
+ Cht := round( 7.4906 * units);
+ Cdp := 0;
+ Cwd := round( 2.8090 * units);
+ Angle := 69.4440;
+end;
+
+with Vec^.FontInfo[ 67] do begin
+ Cht := round( 7.1554 * units);
+ Cdp := 0;
+ Cwd := round( 3.5777 * units);
+ Angle := 63.4349;
+end;
+
+with Vec^.FontInfo[ 68] do begin
+ Cht := round( 6.7840 * units);
+ Cdp := 0;
+ Cwd := round( 4.2400 * units);
+ Angle := 57.9946;
+end;
+
+with Vec^.FontInfo[ 69] do begin
+ Cht := round( 6.4000 * units);
+ Cdp := 0;
+ Cwd := round( 4.8000 * units);
+ Angle := 53.1301;
+end;
+
+with Vec^.FontInfo[ 70] do begin
+ Cht := round( 6.0206 * units);
+ Cdp := 0;
+ Cwd := round( 5.2680 * units);
+ Angle := 48.8141;
+end;
+
+with Vec^.FontInfo[ 71] do begin
+ Cht := round( 5.6569 * units);
+ Cdp := 0;
+ Cwd := round( 5.6569 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[ 72] do begin
+ Cht := round( 5.2680 * units);
+ Cdp := 0;
+ Cwd := round( 6.0206 * units);
+ Angle := 41.1859;
+end;
+
+with Vec^.FontInfo[ 73] do begin
+ Cht := round( 4.8000 * units);
+ Cdp := 0;
+ Cwd := round( 6.4000 * units);
+ Angle := 36.8699;
+end;
+
+with Vec^.FontInfo[ 74] do begin
+ Cht := round( 4.2400 * units);
+ Cdp := 0;
+ Cwd := round( 6.7840 * units);
+ Angle := 32.0054;
+end;
+
+with Vec^.FontInfo[ 75] do begin
+ Cht := round( 3.5777 * units);
+ Cdp := 0;
+ Cwd := round( 7.1554 * units);
+ Angle := 26.5651;
+end;
+
+with Vec^.FontInfo[ 76] do begin
+ Cht := round( 2.8090 * units);
+ Cdp := 0;
+ Cwd := round( 7.4906 * units);
+ Angle := 20.5560;
+end;
+
+with Vec^.FontInfo[ 77] do begin
+ Cht := round( 1.9403 * units);
+ Cdp := 0;
+ Cwd := round( 7.7611 * units);
+ Angle := 14.0362;
+end;
+
+with Vec^.FontInfo[ 78] do begin
+ Cht := round( 0.9923 * units);
+ Cdp := 0;
+ Cwd := round( 7.9382 * units);
+ Angle := 7.1250;
+end;
+
+with Vec^.FontInfo[ 79] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 8.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[ 80] do begin
+ Cdp := round( 0.9923 * units);
+ Cht := 0;
+ Cwd := round( 7.9382 * units);
+ Angle := -7.1250;
+end;
+
+with Vec^.FontInfo[ 81] do begin
+ Cdp := round( 1.9403 * units);
+ Cht := 0;
+ Cwd := round( 7.7611 * units);
+ Angle := -14.0362;
+end;
+
+with Vec^.FontInfo[ 82] do begin
+ Cdp := round( 2.8090 * units);
+ Cht := 0;
+ Cwd := round( 7.4906 * units);
+ Angle := -20.5560;
+end;
+
+with Vec^.FontInfo[ 83] do begin
+ Cdp := round( 3.5777 * units);
+ Cht := 0;
+ Cwd := round( 7.1554 * units);
+ Angle := -26.5651;
+end;
+
+with Vec^.FontInfo[ 84] do begin
+ Cdp := round( 4.2400 * units);
+ Cht := 0;
+ Cwd := round( 6.7840 * units);
+ Angle := -32.0054;
+end;
+
+with Vec^.FontInfo[ 85] do begin
+ Cdp := round( 4.8000 * units);
+ Cht := 0;
+ Cwd := round( 6.4000 * units);
+ Angle := -36.8699;
+end;
+
+with Vec^.FontInfo[ 86] do begin
+ Cdp := round( 5.2680 * units);
+ Cht := 0;
+ Cwd := round( 6.0206 * units);
+ Angle := -41.1859;
+end;
+
+with Vec^.FontInfo[ 87] do begin
+ Cdp := round( 5.6569 * units);
+ Cht := 0;
+ Cwd := round( 5.6569 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[ 88] do begin
+ Cdp := round ( 6.0206 * units);
+ Cht := 0;
+ Cwd := round( 5.2680 * units);
+ Angle := -48.8141;
+end;
+
+with Vec^.FontInfo[ 89] do begin
+ Cdp := round ( 6.4000 * units);
+ Cht := 0;
+ Cwd := round( 4.8000 * units);
+ Angle := -53.1301;
+end;
+
+with Vec^.FontInfo[ 90] do begin
+ Cdp := round ( 6.7840 * units);
+ Cht := 0;
+ Cwd := round( 4.2400 * units);
+ Angle := -57.9946;
+end;
+
+with Vec^.FontInfo[ 91] do begin
+ Cdp := round ( 7.1554 * units);
+ Cht := 0;
+ Cwd := round( 3.5777 * units);
+ Angle := -63.4349;
+end;
+
+with Vec^.FontInfo[ 92] do begin
+ Cdp := round ( 7.4906 * units);
+ Cht := 0;
+ Cwd := round( 2.8090 * units);
+ Angle := -69.4440;
+end;
+
+with Vec^.FontInfo[ 93] do begin
+ Cdp := round ( 7.7611 * units);
+ Cht := 0;
+ Cwd := round( 1.9403 * units);
+ Angle := -75.9638;
+end;
+
+with Vec^.FontInfo[ 94] do begin
+ Cdp := round ( 7.9382 * units);
+ Cht := 0;
+ Cwd := round( 0.9923 * units);
+ Angle := -82.8750;
+end;
+
+with Vec^.FontInfo[ 95] do begin
+ Cdp := round ( 8.0000 * units);
+ Cht := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+with Vec^.FontInfo[ 96] do begin
+ Cht := round( 4.0000 * units);
+ Cdp := 0;
+ Cwd := 0;
+ Angle := 90.0000;
+end;
+
+with Vec^.FontInfo[ 97] do begin
+ Cht := round( 3.8806 * units);
+ Cdp := 0;
+ Cwd := round( 0.9701 * units);
+ Angle := 75.9638;
+end;
+
+with Vec^.FontInfo[ 98] do begin
+ Cht := round( 3.5777 * units);
+ Cdp := 0;
+ Cwd := round( 1.7889 * units);
+ Angle := 63.4349;
+end;
+
+with Vec^.FontInfo[ 99] do begin
+ Cht := round( 3.2000 * units);
+ Cdp := 0;
+ Cwd := round( 2.4000 * units);
+ Angle := 53.1301;
+end;
+
+with Vec^.FontInfo[100] do begin
+ Cht := round( 2.8284 * units);
+ Cdp := 0;
+ Cwd := round( 2.8284 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[101] do begin
+ Cht := round( 2.4000 * units);
+ Cdp := 0;
+ Cwd := round( 3.2000 * units);
+ Angle := 36.8699;
+end;
+
+with Vec^.FontInfo[102] do begin
+ Cht := round( 1.7889 * units);
+ Cdp := 0;
+ Cwd := round( 3.5777 * units);
+ Angle := 26.5651;
+end;
+
+with Vec^.FontInfo[103] do begin
+ Cht := round( 0.9701 * units);
+ Cdp := 0;
+ Cwd := round( 3.8806 * units);
+ Angle := 14.0362;
+end;
+
+with Vec^.FontInfo[104] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 4.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[105] do begin
+ Cdp := round( 0.9701 * units);
+ Cht := 0;
+ Cwd := round( 3.8806 * units);
+ Angle := -14.0362;
+end;
+
+with Vec^.FontInfo[106] do begin
+ Cdp := round( 1.7889 * units);
+ Cht := 0;
+ Cwd := round( 3.5777 * units);
+ Angle := -26.5651;
+end;
+
+with Vec^.FontInfo[107] do begin
+ Cdp := round( 2.4000 * units);
+ Cht := 0;
+ Cwd := round( 3.2000 * units);
+ Angle := -36.8699;
+end;
+
+with Vec^.FontInfo[108] do begin
+ Cdp := round( 2.8284 * units);
+ Cht := 0;
+ Cwd := round( 2.8284 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[109] do begin
+ Cdp := round ( 3.2000 * units);
+ Cht := 0;
+ Cwd := round( 2.4000 * units);
+ Angle := -53.1301;
+end;
+
+with Vec^.FontInfo[110] do begin
+ Cdp := round ( 3.5777 * units);
+ Cht := 0;
+ Cwd := round( 1.7889 * units);
+ Angle := -63.4349;
+end;
+
+with Vec^.FontInfo[111] do begin
+ Cdp := round ( 3.8806 * units);
+ Cht := 0;
+ Cwd := round( 0.9701 * units);
+ Angle := -75.9638;
+end;
+
+with Vec^.FontInfo[112] do begin
+ Cdp := round ( 4.0000 * units);
+ Cht := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+with Vec^.FontInfo[113] do begin
+ Cht := round( 2.0000 * units);
+ Cdp := 0;
+ Cwd := 0;
+ Angle := 90.0000;
+end;
+
+with Vec^.FontInfo[114] do begin
+ Cht := round( 1.7889 * units);
+ Cdp := 0;
+ Cwd := round( 0.8944 * units);
+ Angle := 63.4349;
+end;
+
+with Vec^.FontInfo[115] do begin
+ Cht := round( 1.4142 * units);
+ Cdp := 0;
+ Cwd := round( 1.4142 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[116] do begin
+ Cht := round( 0.8944 * units);
+ Cdp := 0;
+ Cwd := round( 1.7889 * units);
+ Angle := 26.5651;
+end;
+
+with Vec^.FontInfo[117] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 2.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[118] do begin
+ Cdp := round( 0.8944 * units);
+ Cht := 0;
+ Cwd := round( 1.7889 * units);
+ Angle := -26.5651;
+end;
+
+with Vec^.FontInfo[119] do begin
+ Cdp := round( 1.4142 * units);
+ Cht := 0;
+ Cwd := round( 1.4142 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[120] do begin
+ Cdp := round ( 1.7889 * units);
+ Cht := 0;
+ Cwd := round( 0.8944 * units);
+ Angle := -63.4349;
+end;
+
+with Vec^.FontInfo[121] do begin
+ Cdp := round ( 2.0000 * units);
+ Cht := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+with Vec^.FontInfo[122] do begin
+ Cht := round( 1.0000 * units);
+ Cdp := 0;
+ Cwd := 0;
+ Angle := 90.0000;
+end;
+
+with Vec^.FontInfo[123] do begin
+ Cht := round( 0.7071 * units);
+ Cdp := 0;
+ Cwd := round( 0.7071 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[124] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 1.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[125] do begin
+ Cdp := round( 0.7071 * units);
+ Cht := 0;
+ Cwd := round( 0.7071 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[126] do begin
+ Cdp := round ( 1.0000 * units);
+ Cht := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+with Vec^.FontInfo[127] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+end; (* define vectors *)
+
+
+
+
+{-------------------------------------------------}
+(* If, for some reason, you do not want to deal with
+ music capabilities, replace the body of this procedure
+ with just a begin end; pair and also the TylBeam proc.
+*)
+procedure definebeams (* var M : pMusFontInfRec *);
+var i : integer;
+ begin
+
+end;
+
+{----------------------------------------------------------}
+(* use pre-calculated coordinates of a circle that has a
+ * given unit-radius. Scale those points to fit the desired radius
+ *)
+procedure defineCircleCpts (rad : ScaledPts; centx, centy : ScaledPts;
+ var CircleCpt : ControlPoints;
+ var numpts : integer);
+const UnitRadius = 16777216; (* TWO24 scaledpts *)
+var ratio : real;
+begin
+ if (rad = 0) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Error in fig#',pgfigurenum:0,' on page ',currpagenum:0);
+ writeln(logfile,'Zero length radius for circle! Setting to 1 sp');
+ rad := 1;
+ end;
+ ratio := float(rad) / float(UnitRadius);
+ numpts := 16;
+ CircleCpt[1,1] := round (ratio * 16777216.00000) + centx;
+ CircleCpt[1,2] := 0 + centy; {round (ratio * 0.00000)}
+ CircleCpt[2,1] := round (ratio * 15500126.47492) + centx;
+ CircleCpt[2,2] := round (ratio * 6420362.60441) + centy;
+ CircleCpt[3,1] := round (ratio * 11863283.20303) + centx;
+ CircleCpt[3,2] := round (ratio * 11863283.20303) + centy;
+ CircleCpt[4,1] := round (ratio * 6420362.60441) + centx;
+ CircleCpt[4,2] := round (ratio * 15500126.47492) + centy;
+ CircleCpt[5,1] := 0 + centx; {round (ratio * -0.00000) }
+ CircleCpt[5,2] := round (ratio * 16777216.00000) + centy;
+ CircleCpt[6,1] := round (ratio * -6420362.60441) + centx;
+ CircleCpt[6,2] := round (ratio * 15500126.47492) + centy;
+ CircleCpt[7,1] := round (ratio * -11863283.20303) + centx;
+ CircleCpt[7,2] := round (ratio * 11863283.20303) + centy;
+ CircleCpt[8,1] := round (ratio * -15500126.47492) + centx;
+ CircleCpt[8,2] := round (ratio * 6420362.60441) + centy;
+ CircleCpt[9,1] := round (ratio * -16777216.00000) + centx;
+ CircleCpt[9,2] := 0 + centy; {round (ratio * -0.00000)}
+ CircleCpt[10,1] := round (ratio * -15500126.47492) + centx;
+ CircleCpt[10,2] := round (ratio * -6420362.60441) + centy;
+ CircleCpt[11,1] := round (ratio * -11863283.20303) + centx;
+ CircleCpt[11,2] := round (ratio * -11863283.20303) + centy;
+ CircleCpt[12,1] := round (ratio * -6420362.60441) + centx;
+ CircleCpt[12,2] := round (ratio * -15500126.47492) + centy;
+ CircleCpt[13,1] := 0 + centx; {round (ratio * 0.00000) }
+ CircleCpt[13,2] := round (ratio * -16777216.00000) + centy;
+ CircleCpt[14,1] := round (ratio * 6420362.60441) + centx;
+ CircleCpt[14,2] := round (ratio * -15500126.47492) + centy;
+ CircleCpt[15,1] := round (ratio * 11863283.20303) + centx;
+ CircleCpt[15,2] := round (ratio * -11863283.20303) + centy;
+ CircleCpt[16,1] := round (ratio * 15500126.47492) + centx;
+ CircleCpt[16,2] := round (ratio * -6420362.60441) + centy;
+ (* create the pre-list phantom *)
+ CircleCpt[0,1] := CircleCpt[16,1];
+ CircleCpt[0,2] := CircleCpt[16,2];
+end;
+
+
+{---------------------------------------------------------------}
+(* compute control points for an arc going from startangle to
+ * stopangle, centered at (centx, centy)
+ *)
+procedure definearcpts (rad : ScaledPts; centx, centy : ScaledPts;
+ startang, stopang : integer;
+ var cpts : ControlPoints;
+ var nknots : integer);
+var n : integer;
+ a, b, curr, delta: real;
+ i : integer;
+begin
+ a := startang * DEGTORAD;
+ b := stopang * DEGTORAD;
+ n := 16;
+
+ if (a > b) then
+ begin
+ a := a - (2 * PI);
+ end;
+
+ delta := abs(b - a) / n;
+
+ if (a = b) then
+ begin
+ complain (ERRNOTBAD);
+ writeln(logfile,'Error in compute arc points:: should be a circle');
+ end;
+ curr := a;
+ i := 1;
+ while ((curr <= b)) do
+ begin (* make arc about (centx,centy) *)
+ cpts[i,1] := round (rad * cos (curr)) + centx;
+ cpts[i,2] := round (rad * sin (curr)) + centy;
+ i := i + 1;
+ curr := curr + delta;
+ end; (* while *)
+
+(* go one point beyond --
+ * around the arc so that we can have good smoothness
+ * for this phantom point
+ *)
+
+ cpts[i,1] := round (rad * cos (b + delta)) + centx;
+ cpts[i,2] := round (rad * sin (b + delta)) + centy;
+
+(* and one phantom point before the list *)
+ cpts[0,1] := round (rad * cos (a - delta)) + centx;
+ cpts[0,2] := round (rad * sin (a - delta)) + centy;
+
+
+ nknots := i-1;
+end;
+
+
+
+(* &&Module spline.p *)
+(*
+ Procedures below may make free use of the global variables
+ arrayXY [list of control points]
+ pointmatrix [list of spline segments]
+ knot [list of spline knots]
+ catrommtx [matrix for Catmull-Rom splines]
+ bsplmtx [matrix for B-splines]
+ lastPoint, intervals
+*)
+
+
+{-----------------------------------------------------}
+function max (a, b: integer):integer;
+begin
+ if (a > b) then
+ max := a
+ else
+ max := b;
+end;
+
+{-----------------------------------------------------}
+function min (a, b: integer):integer;
+begin
+ if (a < b) then
+ min := a
+ else
+ min := b;
+end;
+
+{---------------------------------------------------------------------}
+(* initialize the Catmull-Rom basis matrix *)
+
+procedure initcrmatrix;
+begin
+ catrommtx[1,1] := -0.5; catrommtx[1,2] := 1.5;
+ catrommtx[1,3] := -1.5; catrommtx[1,4] := 0.5;
+ catrommtx[2,1] := 1.0; catrommtx[2,2] := -2.5;
+ catrommtx[2,3] := 2.0; catrommtx[2,4] := -0.5;
+ catrommtx[3,1] := -0.5; catrommtx[3,2] := 0.0;
+ catrommtx[3,3] := 0.5; catrommtx[3,4] := 0.0;
+ catrommtx[4,1] := 0.0; catrommtx[4,2] := 1.0;
+ catrommtx[4,3] := 0.0; catrommtx[4,4] := 0.0;
+end;
+
+{-----------------------------------------------------}
+procedure initbsplmatrix;
+begin
+ bsplmtx[1,1] := -1.0/6.0; bsplmtx[1,2] := 0.5;
+ bsplmtx[1,3] := -0.5; bsplmtx[1,4] := 1.0/6.0;
+ bsplmtx[2,1] := 0.5; bsplmtx[2,2] := -1.0;
+ bsplmtx[2,3] := 0.5; bsplmtx[2,4] := 0.0;
+ bsplmtx[3,1] := -0.5; bsplmtx[3,2] := 0.0;
+ bsplmtx[3,3] := 0.5; bsplmtx[3,4] := 0.0;
+ bsplmtx[4,1] := 1.0/6.0; bsplmtx[4,2] := 2.0/3.0;
+ bsplmtx[4,3] := 1.0/6.0; bsplmtx[4,4] := 0.0;
+end;
+
+{--------------------------------------------------------}
+(* init the Cardinal Spline Matrix *)
+procedure initcardmatrix;
+begin
+ cardmtx[1,1] := -1.0; cardmtx[1,2] := 1.0;
+ cardmtx[1,3] := -1.0; cardmtx[1,4] := 1.0;
+ cardmtx[2,1] := 2.0; cardmtx[2,2] := -2.0;
+ cardmtx[2,3] := 1.0; cardmtx[2,4] := -1.0;
+ cardmtx[3,1] := -1.0; cardmtx[3,2] := 0.0;
+ cardmtx[3,3] := 1.0; cardmtx[3,4] := 0.0;
+ cardmtx[4,1] := 0.0; cardmtx[4,2] := 1.0;
+ cardmtx[4,3] := 0.0; cardmtx[4,4] := 0.0;
+end;
+
+{--------------------------------------------------------}
+procedure initallspline;
+ begin
+ initcrmatrix;
+ initbsplmatrix;
+ initcardmatrix;
+ end;
+
+
+{-----------------------------------------------------}
+procedure matXvector (var m: Fourby4Matrix; (* IN *)
+ var v: Oneby4Vector; (* IN *)
+ var result: Oneby4Vector); (* OUT *)
+var t: Oneby4Vector;
+begin
+ t[1] := v[1]*m[1,1] + v[2]*m[1,2] + v[3]*m[1,3] + v[4]*m[1,4];
+ t[2] := v[1]*m[2,1] + v[2]*m[2,2] + v[3]*m[2,3] + v[4]*m[2,4];
+ t[3] := v[1]*m[3,1] + v[2]*m[3,2] + v[3]*m[3,3] + v[4]*m[3,4];
+ t[4] := v[1]*m[4,1] + v[2]*m[4,2] + v[3]*m[4,3] + v[4]*m[4,4];
+ result[1] := t[1]; result[2] := t[2];
+ result[3] := t[3]; result[4] := t[4];
+end;
+
+{-----------------------------------------------------}
+(* actually the dot-product *)
+function vecXvec (var v1, v2: Oneby4Vector) : real;
+begin
+ vecXvec := v1[1]*v2[1] + v1[2]*v2[2] + v1[3]*v2[3] + v1[4]*v2[4];
+end;
+
+
+{------------------------------------------------------}
+(* basXctl is the pre-computed BasisMatrix times the control-point vector *)
+
+function splinePosition (var basXctl : Oneby4Vector; (* IN *)
+ t : real ) : real;
+var tvect : Oneby4Vector; { vector of t values for spline matrix}
+begin
+ tvect[4] := 1.0;
+ tvect[3] := t;
+ tvect[2] := t * t;
+ if (tvect[2] <= MINREAL) then
+ begin (* avoid underflow problems *)
+ tvect[2] := 0.0;
+ end;
+ tvect[1] := t * tvect[2]; (* t^3 *)
+ splinePosition := vecXvec (tvect, basXctl);
+end;
+
+{-------------------------------------------------}
+function TwoToThe (n : integer) : integer;
+label 78;
+var i : integer;
+ tmp : integer;
+begin
+tmp := 1;
+if (n <= 0) then
+ goto 78;
+if (n < 6) then
+ begin
+ case n of
+ 1 : tmp := 2;
+ 2 : tmp := 4;
+ 3 : tmp := 8;
+ 4 : tmp := 16;
+ 5 : tmp := 32;
+ end; (* case *)
+ end (* if *)
+else
+ begin
+ tmp := 32;
+ for i := 6 to n do
+ tmp := tmp * 2;
+ end;
+78:
+ TwoToThe := tmp;
+end;
+
+{------------------------------------------------------}
+function distance (x0, y0, x1, y1 : real) : real;
+var res : real;
+begin
+ res := sqrt ( (x1 - x0)*(x1 - x0) + (y1 - y0)*(y1 - y0));
+ distance := res;
+end;
+
+
+{------------------------------------------------------}
+(* compute the number of subdivisions for this span.
+ We do this by a quadrature method and a simple linear-distance
+ metric. This is not optimal in the number of subdivisions actually
+ required, but is computationally efficient and accurate to the
+ nearest power of 2 .
+ *)
+function numsubdivisions (var XtimesBas, YtimesBas : Oneby4Vector;
+ resolution : ScaledPts): integer;
+var n : integer;
+ d : integer;
+ t : real;
+ x0, y0, xt, yt : real;
+begin
+ x0 := splinePosition (XtimesBas, 0.0);
+ y0 := splinePosition (YtimesBas, 0.0);
+
+ t := 1.0;
+ n := 0;
+ xt := splinePosition (XtimesBas, t);
+ yt := splinePosition (YtimesBas, t);
+
+ while ((round (distance (x0, y0, xt, yt)) > resolution) or
+ (n < 1)) do
+ begin
+ t := t / 2.0; (* perform the quadrature *)
+ n := n + 1;
+ xt := splinePosition (XtimesBas, t);
+ yt := splinePosition (YtimesBas, t);
+ end; (* while *)
+ numsubdivisions := TwoToThe (n);
+end;
+
+{------------------------------------------------------------------------}
+(* compute new control vertices such that the resulting spline
+ * will interpolate through the old control points.
+ * This will work as long as the actual arc length
+ * between consecutive nodes does not vary from span to span.
+ * The method is noted in Wu and Abel's CACM 20(10) Oct 77 paper
+ * but the actual working method is from
+ * Barsky and Greenberg's paper in
+ * CG&IP 14(3) Nov 1980 pp.203-226
+ *)
+procedure invertsplvertices (numpts : integer;
+ isclosed : boolean;
+ var xys : ControlPoints); (* INOUT *)
+var i : integer;
+ beta, Xrprime, Yrprime : array[0..MAXCTLPTS] of real;
+ tempxys : ControlPoints;
+begin
+ (* compute the values of beta *)
+ beta[1] := 0.25;
+ for i := 2 to numpts + 1 do
+ beta[i] := 1.0 / (4.0 - beta[i - 1]);
+
+ (* and the r primes from the original vertices *)
+ Xrprime[1] := beta[1] * xys[1,1] * 5.0;
+ Yrprime[1] := beta[1] * xys[1,2] * 5.0;
+ for i := 2 to numpts -1 do
+ begin
+ Xrprime[i] := beta[i] * (6.0 * xys[i,1] - Xrprime[i - 1]);
+ Yrprime[i] := beta[i] * (6.0 * xys[i,2] - Yrprime[i - 1]);
+ end; (* for *)
+ Xrprime[numpts] := beta[numpts] * (5.0 * xys[numpts,1] - Xrprime[numpts - 1]);
+ Yrprime[numpts] := beta[numpts] * (5.0 * xys[numpts,2] - Yrprime[numpts - 1]);
+
+(* Now perform the back-substitution from the bottom up *)
+ tempxys[numpts,1] := round (Xrprime[numpts]);
+ tempxys[numpts,2] := round (Yrprime[numpts]);
+ for i := numpts - 1 downto 1 do
+ begin
+ tempxys[i,1] := round (Xrprime[i] - beta[i] * tempxys[i + 1, 1]);
+ tempxys[i,2] := round (Yrprime[i] - beta[i] * tempxys[i + 1, 2]);
+ end;
+
+if (isclosed) then
+ begin
+ (* at this point, we've probably been through one control-point
+ * adjustment, so let's not muck it up
+ *)
+ tempxys[numpts+1,1] := tempxys[1,1];
+ tempxys[numpts+1,2] := tempxys[1,2];
+ tempxys[numpts+2,1] := tempxys[2,1];
+ tempxys[numpts+2,2] := tempxys[2,2];
+ tempxys[0,1] := tempxys[numpts,1];
+ tempxys[0,2] := tempxys[numpts,2];
+ (* copy them back *)
+ for i := 0 to (numpts+2) do
+ begin
+ xys[i,1] := tempxys[i,1];
+ xys[i,2] := tempxys[i,2];
+ end;
+ end (* closed *)
+else
+ begin
+ (* copy back *)
+ for i := 2 to numpts -1 do
+ begin
+ xys[i,1] := tempxys[i,1];
+ xys[i,2] := tempxys[i,2];
+ end;
+ end; (* open*)
+end;
+
+
+{-----------------------------------------------------}
+(* adjust the list of control points so that we can use
+ * it for B-spline interpolation.
+ * Add any "phantom" vertices necessary so that the end
+ * conditions will be correct for interpolation
+ *)
+procedure Bctlptadjust (isclosed : boolean; isarc : boolean;
+ var n: integer; (* INOUT *)
+ var xys: ControlPoints; (* INOUT *)
+ var thx: ThickAryType); (* INOUT *)
+var j : integer;
+ tmp : ControlPoints;
+ tmpthx : ThickAryType;
+begin (* ctlpt adjust*)
+
+if (isclosed) then
+ begin
+(* here, we have to supply the last 'real' point for the user,
+ and add three phantoms-- one before, and two after *)
+
+ if (n = 2) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'A closed spline requires more than 2 control points ');
+ writeln(logfile,'making a temporary fix in order to continue...');
+ xys[3,1] := xys[1,1];
+ xys[3,2] := xys[1,2];
+ end;
+
+ for j := 1 to (n) do
+ begin
+ tmp[j, 1] := xys[j, 1];
+ tmp[j, 2] := xys[j, 2];
+ tmpthx[j] := thx[j];
+ end;
+ (* Now take care of the 'phantom' vertices *)
+ tmp[n+1, 1] := xys[1, 1];
+ tmp[n+1, 2] := xys[1, 2];
+ tmpthx[n+1] := thx[1];
+ tmp[n+2, 1] := xys[2, 1];
+ tmp[n+2, 2] := xys[2, 2];
+ tmpthx[n+2] := thx[2];
+ tmp[n+3, 1] := xys[3, 1];
+ tmp[n+3, 2] := xys[3, 2];
+ tmpthx[n+3] := thx[3];
+
+ if (not isarc) then
+ begin
+ tmp[0,1] := xys[n, 1]; (* wrap around to the real last point *)
+ tmp[0,2] := xys[n, 2];
+ tmpthx[0] := thx[n];
+ end
+ else
+ begin
+ tmp[0,1] := xys[0,1];
+ tmp[0,2] := xys[0,2];
+ tmpthx[0] := thx[0];
+ end;
+
+ n := n + 1; (* we supplied the 'last' point for the user *)
+
+ for j := 0 to n+2 do
+ begin
+ xys[j,1] := tmp[j,1];
+ xys[j,2] := tmp[j,2];
+ thx[j] := tmpthx[j];
+ end; (* for *)
+ end (* if closed *)
+else
+ begin (* OPEN SPLINE *)
+ if (not isarc) then
+ begin
+ tmp[0,1] := 2 * xys[1, 1] - xys[2,1];
+ tmp[0,2] := 2 * xys[1, 2] - xys[2,2];
+ end
+ else
+ begin
+ tmp[0,1] := xys[0,1];
+ tmp[0,2] := xys[0,2];
+ end;
+ tmpthx[0] := thx[1];
+
+ for j := 1 to (n) do
+ begin
+ tmp[j, 1] := xys[j, 1];
+ tmp[j, 2] := xys[j, 2];
+ tmpthx[j] := thx[j];
+ end;
+
+ tmp[n+1, 1] := 2 * xys[n, 1] - xys[n-1,1];
+ tmp[n+1, 2] := 2 * xys[n, 2] - xys[n-1,2];
+ tmpthx[n+1] := thx[n];
+
+ tmp[n+2, 1] := tmp[n+1, 1];
+ tmp[n+2, 2] := tmp[n+1, 2];
+ tmpthx[n+2] := thx[n];
+
+ for j := 0 to n+2 do
+ begin
+ xys[j,1] := tmp[j,1];
+ xys[j,2] := tmp[j,2];
+ thx[j] := tmpthx[j];
+ end; (* for *)
+ end; (* if open *)
+
+end;
+
+
+
+{-----------------------------------------------------}
+(* adjust the list of control points so that we can use
+ * it for simple Catmull-Rom spline interpolation.
+ * Add any "phantom" vertices necessary so that the end
+ * conditions will be correct for interpolation
+ *)
+procedure CRctlptadjust (isclosed : boolean; isarc : boolean;
+ var n: integer; (* INOUT *)
+ var xys: ControlPoints; (* INOUT *)
+ var thx: ThickAryType); (* INOUT *)
+var j : integer;
+ tmp : ControlPoints;
+ tmpthx : ThickAryType;
+begin (* ctlpt adjust*)
+if (isclosed) then
+ begin
+(* here, we have to supply the last 'real' point for the user,
+ and add three phantoms-- one before, and two after *)
+
+ if (n = 2) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'A closed spline requires more than 2 control points ');
+ writeln(logfile,'making a temporary fix in order to continue...');
+ xys[3,1] := xys[1,1];
+ xys[3,2] := xys[1,2];
+ end;
+
+
+ for j := 1 to (n) do
+ begin
+ tmp[j, 1] := xys[j, 1];
+ tmp[j, 2] := xys[j, 2];
+ tmpthx[j] := thx[j];
+ end;
+ (* the phantom vertices *)
+ tmp[n+1, 1] := xys[1, 1];
+ tmp[n+1, 2] := xys[1, 2];
+ tmpthx[n+1] := thx[1];
+ tmp[n+2, 1] := xys[2, 1];
+ tmp[n+2, 2] := xys[2, 2];
+ tmpthx[n+2] := thx[2];
+ tmp[n+3, 1] := xys[3, 1];
+ tmp[n+3, 2] := xys[3, 2];
+ tmpthx[n+3] := thx[3];
+
+ if (not isarc) then
+ begin
+ tmp[0,1] := xys[n, 1]; (* wrap around to the real last point *)
+ tmp[0,2] := xys[n, 2];
+ tmpthx[0] := thx[n];
+ end
+ else
+ begin
+ tmp[0,1] := xys[0,1];
+ tmp[0,2] := xys[0,2];
+ tmpthx[0] := thx[0];
+ end;
+ n := n + 1; (* we supplied the 'last' point for the user *)
+
+ for j := 0 to n+2 do
+ begin
+ xys[j,1] := tmp[j,1];
+ xys[j,2] := tmp[j,2];
+ thx[j] := tmpthx[j];
+ end; (* for *)
+ end (* if closed *)
+else
+ begin (* OPEN SPLINE *)
+ if (not isarc) then
+ begin
+ tmp[0,1] := xys[1, 1]; (* double the first point *)
+ tmp[0,2] := xys[1, 2];
+ end
+ else
+ begin
+ tmp[0,1] := xys[0,1];
+ tmp[0,2] := xys[0,2];
+ end;
+ tmpthx[0] := thx[1];
+
+ for j := 1 to (n) do
+ begin
+ tmp[j, 1] := xys[j, 1];
+ tmp[j, 2] := xys[j, 2];
+ tmpthx[j] := thx[j];
+ end;
+
+ tmp[n+1, 1] := xys[n, 1]; (* and triple the last *)
+ tmp[n+1, 2] := xys[n, 2];
+ tmpthx[n+1] := thx[n];
+ tmp[n+2, 1] := xys[n, 1];
+ tmp[n+2, 2] := xys[n, 2];
+ tmpthx[n+2] := thx[n];
+
+ for j := 0 to n+2 do
+ begin
+ xys[j,1] := tmp[j,1];
+ xys[j,2] := tmp[j,2];
+ thx[j] := tmpthx[j];
+ end; (* for *)
+ end; (* if open *)
+end; (* ctlpt adjust *)
+
+
+
+{----------------------------------------------------------}
+
+procedure interpsplines (splinetype: SplineKind;
+ isclosed: boolean;
+ isanArc: boolean;
+ linepatt : LineStyle;
+ var basismatrix : Fourby4Matrix; (* IN *)
+ numctls: integer;
+ var arrayXY: ControlPoints; (* IN *)
+ var pointmatrix: SplineSegments; (* OUT *)
+ varythicks: boolean;
+ var thickmatrix: ThickAryType; (* IN *)
+ var TTmatrix: ThickAryType); (* OUT *)
+label 32;
+var xctl, yctl, { vectors of x, y posits of control points}
+ wctl : Oneby4Vector; {vector of thicknesses at each ctl pt}
+ t, incr: real;
+ Pi: integer; { P sub i }
+ i, currpt : integer;
+ theresolution : ScaledPts;
+
+begin (* interp splines*)
+ if ((not isclosed) and (isanArc)) then
+ numctls := numctls + 1; (* lie a little *)
+
+ case (splinetype) of
+
+ BSPL: Bctlptadjust (isclosed, isanArc, numctls, arrayXY, thickmatrix);
+
+ CARD,
+ CATROM: CRctlptadjust (isclosed, isanArc, numctls, arrayXY, thickmatrix);
+
+ INTBSPL: begin
+ if (isclosed) then
+ begin
+ Bctlptadjust (true, isanArc, numctls, arrayXY, thickmatrix);
+ invertsplvertices (numctls, true, arrayXY);
+ end
+ else
+ begin
+ invertsplvertices (numctls, false, arrayXY);
+ Bctlptadjust (false, isanArc, numctls, arrayXY, thickmatrix);
+ end; (* else *)
+ end; (* Interpolating Bsplines *)
+ end;
+
+ if ((not isclosed) and (isanArc)) then
+ numctls := numctls - 1; (* UN-lie a little *)
+
+
+(* this is the scheme:
+ * val := t-vector * Basis matrix * point matrix
+ * [t^3 t^2 t 1] * [[Ms]] * [Pi-1 Pi Pi+1 Pi+2]
+ * where "Pi-1" is "P sub (i-1)", etc.
+ *
+ * But we do this in a round about way:
+ * Point matrix * basis
+ * then * t-vector will yield the single value
+ *
+ * there are certainly faster ways to do this,
+ * but this is the easiest to understand
+ *)
+
+ currpt := 1;
+ case linepatt of
+ solid : theresolution := MAXVECLENsp;
+ dotted,
+ dashed,
+ dotdash : theresolution := 3 * MAXVECLENsp; {###}
+ end;
+
+ for Pi := 1 to (numctls - 1) do
+ begin
+ xctl[1] := float(arrayXY[Pi-1, 1]);
+ xctl[2] := float(arrayXY[Pi, 1]);
+ xctl[3] := float(arrayXY[Pi+1, 1]);
+ xctl[4] := float(arrayXY[Pi+2, 1]);
+ yctl[1] := float(arrayXY[Pi-1, 2]);
+ yctl[2] := float(arrayXY[Pi, 2]);
+ yctl[3] := float(arrayXY[Pi+1, 2]);
+ yctl[4] := float(arrayXY[Pi+2, 2]);
+ matXvector (basismatrix, xctl, xctl);
+ matXvector (basismatrix, yctl, yctl);
+
+ (* compute the delta-t increment for this segment
+ based on a metric for subdivision *)
+ intervals := numsubdivisions (xctl, yctl, theresolution);
+ if ((linepatt = solid) and (intervals <= 2)) then
+ intervals := intervals * 2;
+ incr := 1.0 / intervals;
+
+ (* avoid over-flowing the "pointmatrix" *)
+ if ((currpt + intervals - 1) >= MAXSPLINESEGS) then
+ begin
+ complain (ERRREALBAD);
+ writeln (logfile,'error: Too many spline segments required.');
+ writeln (logfile,' Reducing the number of control points to get output.');
+ goto 32;
+ end;
+
+ t := 0.0;
+ while (t < 0.999999999) do
+ begin
+ pointmatrix[currpt, 1] := round (splinePosition (xctl, t));
+ pointmatrix[currpt, 2] := round (splinePosition (yctl, t));
+
+ if (varythicks) then
+ begin
+ wctl[1] := float(thickmatrix[Pi-1]);
+ wctl[2] := float(thickmatrix[Pi ]);
+ wctl[3] := float(thickmatrix[Pi+1]);
+ wctl[4] := float(thickmatrix[Pi+2]);
+ matXvector (catrommtx, wctl, wctl); (* requires using Catmull-Rom *)
+ TTmatrix[currpt] := round (splinePosition (wctl, t));
+ end;
+
+ t := t + incr;
+ currpt := currpt + 1;
+ end; (* while loop *)
+
+
+ end; (* for loop *)
+
+32:
+ (* the END-condtion *)
+ pointmatrix[currpt, 1] := round (splinePosition (xctl, 1.0));
+ pointmatrix[currpt, 2] := round (splinePosition (yctl, 1.0));
+ if (varythicks) then
+ begin
+ wctl[1] := thickmatrix[numctls-2];
+ wctl[2] := thickmatrix[numctls-1];
+ wctl[3] := thickmatrix[numctls];
+ wctl[4] := thickmatrix[numctls+1];
+ matXvector (catrommtx, wctl, wctl); (* requires using Catmull-Rom *)
+ TTmatrix[currpt] := round (splinePosition (wctl, 1.0));
+ end;
+
+ lastPoint := currpt;
+
+end; (* interpsplines *)
+
+
+{----------------------------------------------------------------}
+procedure drawSpline (splinetype : SplineKind;
+ isclosed: boolean;
+ isanArc: boolean;
+ patt : LineStyle;
+ numctls: integer;
+ var arrayXY: ControlPoints; (* IN *)
+ var pointmatrix: SplineSegments; (* OUT *)
+ varythicks: boolean;
+ var thickmatrix: ThickAryType; (* IN *)
+ var TTmatrix: ThickAryType); (* OUT *)
+begin
+ lastPoint := 0;
+
+
+ case (splinetype) of
+ CATROM : interpsplines (splinetype, isclosed, isanArc, patt, catrommtx,
+ numctls, arrayXY, pointmatrix,
+ varythicks, thickmatrix, TTmatrix);
+
+ CARD : interpsplines (splinetype, isclosed, isanArc, patt, cardmtx,
+ numctls, arrayXY, pointmatrix,
+ varythicks, thickmatrix, TTmatrix);
+
+ BSPL : interpsplines (splinetype, isclosed, isanArc, patt, bsplmtx,
+ numctls, arrayXY, pointmatrix,
+ varythicks, thickmatrix, TTmatrix);
+
+ INTBSPL : interpsplines (splinetype, isclosed, isanArc, patt, bsplmtx,
+ numctls, arrayXY, pointmatrix,
+ varythicks, thickmatrix, TTmatrix);
+ end; (*Case *)
+end;
+
+
+(* &&module TeXtyl *)
+{----------------------------------------------------------------}
+(* rotate a (x,y) point about mx, my *)
+procedure ptrotate (var x, y : integer;
+ mx, my: integer;
+ angle : real);
+var tmpx, tmpy : integer;
+ cosa, sina : real;
+begin
+ tmpx := x - mx;
+ tmpy := y - my;
+ cosa := cos(angle * DEGTORAD);
+ sina := sin(angle * DEGTORAD);
+ x := round(tmpx * cosa - tmpy * sina) + mx;
+ y := round(tmpx * sina + tmpy * cosa) + my;
+end;
+
+{----------------------------------------------------------------}
+(* transform two line points: scale, rotate and translate
+*)
+procedure xfmlinepts (var x1, y1, x2, y2 : ScaledPts;
+ offh, offv : ScaledPts;
+ midx, midy : ScaledPts;
+ scalefact : real;
+ theta : real;
+ dx, dy : ScaledPts;
+ sx, sy : real);
+begin
+ if ((sx = 0.0) or (sy = 0.0)) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'?? Some scale factor is Zero... continuing anyway');
+ end;
+ (* scale about center of item*)
+ if ((sx <> 1.0) or (sy <> 1.0)) then
+ begin
+ x1 := round((x1 - midx) * sx) + midx;
+ x2 := round((x2 - midx) * sx) + midx;
+ y1 := round((y1 - midy) * sy) + midy;
+ y2 := round((y2 - midy) * sy) + midy;
+ end;
+ (* rotate if necessary *)
+ if (theta <> 0.0) then
+ begin (* rotate about the midpoint *)
+ ptrotate(x1, y1, midx, midy, theta);
+ ptrotate(x2, y2, midx, midy, theta);
+ end;
+ (* translate *)
+ x1 := (x1 + round(dx * scalefact) + offh);
+ x2 := (x2 + round(dx * scalefact) + offh);
+ y1 := (y1 + round(dy * scalefact) + offv);
+ y2 := (y2 + round(dy * scalefact) + offv);
+end; (* xfmlinepts *)
+
+{----------------------------------------------------------------}
+procedure xfmcontpts (var xpts : ControlPoints; xknots : integer;
+ offh, offv : ScaledPts; midx, midy : ScaledPts;
+ scalefact : real;
+ theta : real; dx, dy : ScaledPts; sx, sy : real);
+var i : integer;
+begin
+ (* scale about center of item *)
+ if ((sx <> 1.0) or (sy <> 1.0)) then
+ for i := 0 to xknots do
+ begin
+ xpts[i,1] := round((xpts[i,1] - midx) * sx) + midx;
+ xpts[i,2] := round((xpts[i,2] - midy) * sy) + midy;
+ end;
+
+ if (theta <> 0.0) then
+ begin (* rotate about center *)
+ for i := 0 to xknots do
+ begin
+ ptrotate (xpts[i,1], xpts[i,2], midx, midy, theta);
+ end;
+ end;
+ (* translate *)
+ for i := 0 to xknots do
+ begin
+ xpts[i,1] := (xpts[i,1] + round(dx * scalefact) + offh);
+ xpts[i,2] := (xpts[i,2] + round(dy * scalefact) + offv);
+ end;
+end; (* xfmcontpts *)
+
+
+{----------------------------------------------------------------}
+(* convert into DVI space and offset by H & V *)
+procedure dvilinepts (var x1, y1, x2, y2 : ScaledPts;
+ offh, offv : ScaledPts);
+begin
+ x1 := (x1 + offh);
+ x2 := (x2 + offh);
+ y1 := (y1 * (-1) + offv);
+ y2 := (y2 * (-1) + offv);
+end;
+
+{----------------------------------------------------------------}
+(* convert into DVI space and offset by H & V *)
+procedure dvicontpts (var xpts : ControlPoints; xknots : integer;
+ offh, offv : ScaledPts);
+var i : integer;
+begin
+ for i := 0 to xknots do
+ begin
+ xpts[i,1] := (xpts[i,1] + offh);
+ xpts[i,2] := (xpts[i,2] * (-1) + offv);
+ end;
+end;
+
+{----------------------------------------------------------------}
+(* transform all the figure's elements according to the
+ top-level tranformation requirements in 1st Quadrant space.
+ then reset the toplevel's xfms.
+*)
+procedure toplevelxfm (toplev, curfig : pItem; recurlevel : integer);
+var pi : pItem;
+ null1, null2 : ScaledPts;
+ old1, old2 : ScaledPts;
+ midx, midy : ScaledPts;
+begin
+ with toplev^ do
+ begin
+ midy := (BBty - BBby) div 2;
+ midx := (BBrx - BBlx) div 2;
+ end;
+ pi := curfig^.body^.things; { if recur==0, this is same as toplev }
+ while (pi <> nil) do
+ begin
+ with pi^ do
+ begin
+ case (kind) of
+ Aline : begin
+ xfmlinepts (lx1, ly1, lx2, ly2, 0, 0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Aspline : begin
+ xfmcontpts (spts, nsplknots, 0, 0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Attspline : begin
+ xfmcontpts (ttpts, nttknots, 0, 0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Aarc : begin
+ null1 := 0; null2 := 0;
+ old1 := acentx; old2 := acenty;
+ xfmlinepts (acentx, acenty, null1, null2, 0,0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+
+ xfmcontpts (arcpts, narcknots + 1, 0, 0, old1, old2, 1.0,
+ toplev^.figtheta,
+ toplev^.fdx + (acentx - old1),
+ toplev^.fdy + (acenty - old2),
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Alabel : begin
+ null1 := 0; null2 := 0;
+ xfmlinepts (labx, laby, null1, null2, 0, 0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Abeam : ; (* not transformable *)
+
+ Atieslur: ; (* not transformable *)
+
+ Afigure : begin
+ toplevelxfm (toplev, pi, recurlevel + 1);
+ end;
+ end; (* case *)
+ end; (* with *)
+ pi := pi^.nextitem;
+ end; (* while *)
+ if (recurlevel = 0) then
+ begin (* reset the toplevel's xfms *)
+ with toplev^ do
+ begin
+ figtheta := 0.0;
+ fsx := 1.0; fsy := 1.0;
+ fdx := 0; fdy := 0;
+ end;
+ end;
+end;
+
+
+{----------------------------------------------------------------}
+function scalefitfactor (actualwid, actualht,
+ goalwid, goalht: ScaledPts): real;
+var sx, sy : real;
+begin
+ sx := goalwid/actualwid;
+ sy := goalht/actualht;
+ if (sx < sy) then
+ scalefitfactor := sx
+ else
+ scalefitfactor := sy;
+end;
+
+
+
+(* ---- The handlers for each primitive ----
+ * The result of calling each handler is either immediate
+ * output to the buffer of the commands to produce the
+ * primitive, OR the primitive gets pushed onto a stack/list
+ * that defines a current 'figure' (set of prims) for
+ * output at a later time
+ *
+ * Look at linehandle for a basic idea of how the handlers
+ * work. the others follow pretty closely.
+ *)
+
+
+{------------------------------------------------------------}
+procedure linehandle (figdepth : integer; scalefact: real;
+ x1, y1, x2, y2 : ScaledPts;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ thk : VThickness; vk : VectKind;
+ patt : LineStyle;
+ minx, maxx, miny, maxy : ScaledPts;
+ tx, ty: ScaledPts; sx, sy, r : real);
+var midx, midy : ScaledPts;
+ lineitem : pItem;
+begin
+ midx := (minx + maxx) div 2;
+ midy := (miny + maxy) div 2;
+
+ (* do local primitive -level transformations *)
+ xfmlinepts (x1, y1, x2, y2, dvih, dviv,
+ midx, midy, scalefact, r, tx, ty, sx, sy);
+
+ if (figdepth = 0) then
+ begin (* ---- do the primitive by itself *)
+ (* re-transform it to the 4th Quadrant *)
+ dvilinepts (x1, y1, x2, y2, h, v); (* global h and v posit *)
+ IPUSH;
+ TylLine (x1, y1, x2, y2, thk, vk, patt);
+ IPOP;
+ end
+ else if (figdepth > 0) then
+ begin (* ---- Pack it and stack it *)
+ lineitem := NewItem (Aline);
+ with lineitem^ do
+ begin
+ BBlx := minx; BBby := miny;
+ BBrx := maxx; BBty := maxy;
+ lx1 := x1; ly1 := y1;
+ lx2 := x2; ly2 := y2;
+ itemthick := thk;
+ itemvec := vk;
+ itempatt := patt;
+ end;
+ pushItem (figdepth, lineitem);
+ end
+ else if (figdepth < 0) then
+ begin (* ---- just do it right away without any PUSH/POP pair *)
+ (* this is the case when we are unpacking a figure for
+ * immediate output
+ *)
+ TylLine (x1, y1, x2, y2, thk, vk, patt);
+ end;
+end; (* linehandle *)
+
+
+(* --- Simple Splines -----*)
+{-----------------------------------------------------}
+procedure splinehandle (figdepth : integer; scalefact : real;
+ thetype : SplineKind; isclosed : boolean;
+ markdiam : integer;
+ var contpts : ControlPoints;
+ nknots : integer;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ thk : VThickness; vec : VectKind;
+ patt : LineStyle;
+ minx, maxx, miny, maxy : ScaledPts;
+ tx, ty : ScaledPts; sx, sy, r : real);
+var midx, midy : ScaledPts;
+ splineitem : pItem;
+ i : integer;
+begin
+ midx := (minx + maxx) div 2;
+ midy := (miny + maxy) div 2;
+
+ xfmcontpts (contpts, nknots, dvih, dviv, midx, midy,
+ scalefact, r, tx, ty, sx, sy);
+
+ if (figdepth = 0) then
+ begin (* ---- do the primitive *)
+ (* transform to 4th quad *)
+ dvicontpts (contpts, nknots, h, v);
+ IPUSH;
+ TylSpline (thetype, isclosed, contpts, nknots, thk, vec, patt, markdiam);
+ IPOP;
+ end
+ else if (figdepth > 0) then
+ begin
+ splineitem := NewItem (Aspline);
+ with splineitem^ do
+ begin
+ BBlx := minx; BBby := miny;
+ BBrx := maxx; BBty := maxy;
+ itemthick := thk;
+ itemvec := vec;
+ itempatt := patt;
+ nsplknots := nknots;
+ spltype := thetype;
+ sclosed := isclosed;
+ dosmarks := markdiam;
+ for i := 1 to nknots do
+ begin
+ spts[i,1] := contpts[i,1];
+ spts[i,2] := contpts[i,2];
+ end;
+ end;
+ pushItem (figdepth, splineitem);
+ end
+ else if (figdepth < 0) then
+ begin
+ TylSpline (thetype, isclosed, contpts, nknots, thk, vec, patt, markdiam);
+ end;
+end; (* splinehandle *)
+
+
+(* --- Variable thickness splines ----- *)
+{-----------------------------------------------------}
+procedure ttsplhandle (figdepth : integer; scalefact : real;
+ thetype : SplineKind; isclosed : boolean;
+ markdiam : integer;
+ contpts : ControlPoints;
+ ttks : ThickAryType;
+ nknots : integer;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ vec : VectKind;
+ patt : LineStyle;
+ minx, maxx, miny, maxy : ScaledPts;
+ tx, ty : ScaledPts; sx, sy, r : real);
+var midx, midy : ScaledPts;
+ ttsplitem : pItem;
+ i : integer;
+begin
+ midx := (minx + maxx) div 2;
+ midy := (miny + maxy) div 2;
+
+ xfmcontpts (contpts, nknots, dvih, dviv, midx, midy,
+ scalefact, r, tx, ty, sx, sy);
+
+ if (figdepth = 0) then
+ begin
+ (* transform to 4th quad *)
+ dvicontpts (contpts, nknots, h, v);
+ IPUSH;
+ TylThickThinSpline (thetype, isclosed, contpts, ttks, nknots, vec, patt, markdiam);
+ IPOP;
+ end
+ else if (figdepth > 0) then
+ begin
+ ttsplitem := NewItem (Attspline);
+ with ttsplitem^ do
+ begin
+ BBlx := minx; BBby := miny;
+ BBrx := maxx; BBty := maxy;
+ itemvec := vec;
+ itempatt := patt;
+ nttknots := nknots;
+ tspltype := thetype;
+ dottmarks := markdiam;
+ tclosed := isclosed;
+ for i := 1 to nknots do
+ begin
+ ttpts[i,1] := contpts[i,1];
+ ttpts[i,2] := contpts[i,2];
+ ttarry[i] := ttks[i];
+ end;
+ end; (* ttsplitem *)
+ pushItem (figdepth, ttsplitem);
+ end
+ else if (figdepth < 0) then
+ begin
+ TylThickThinSpline (thetype, isclosed, contpts, ttks, nknots, vec, patt, markdiam);
+ end;
+
+end; (* ttsplhandle *)
+
+
+(* ---- Musical Beams ---- *)
+{-----------------------------------------------------}
+procedure beamhandle (depth, siz : integer; bk : BeamKind;
+ x1, y1, x2, y2 : ScaledPts);
+var bmitem : pItem;
+begin
+ if (depth = 0) then
+ begin
+ dvilinepts (x1, y1, x2, y2, h, v);
+ IPUSH;
+ TylBeam (x1, y1, x2, y2, siz, bk);
+ IPOP;
+ end
+ else if (depth > 0) then
+ begin
+ bmitem := NewItem (Abeam);
+ with bmitem^ do
+ begin
+ BBlx := min(x1, x2); BBby := min(y1, y2);
+ BBrx := max(x1, x2); BBty := max(y1, y2);
+ bx1 := x1; by1 := y1;
+ bx2 := x2; by2 := y2;
+ staf := siz;
+ bkind := bk;
+ end; (* with *)
+ pushItem (depth, bmitem);
+ end
+ else if (depth < 0) then
+ begin
+ TylBeam (x1, y1, x2, y2, siz, bk);
+ end; (* else *)
+end; (* beamhandle *)
+
+
+(* ---- Musical Ties and Slurs ----- *)
+{-----------------------------------------------------}
+procedure tieslurhandle (depth: integer; pts : ControlPoints;
+ numk : integer; minthick, maxthick : VThickness);
+var tsitem : pItem;
+ i : integer;
+begin
+if (depth = 0) then
+ begin
+ dvicontpts (pts, numk, h, v);
+ IPUSH;
+ TylTieSlur (pts, numk, minthick, maxthick);
+ IPOP;
+ end
+else if (depth > 0) then
+ begin
+ tsitem := NewItem (Atieslur);
+ with tsitem^ do
+ begin
+ ntknots := numk;
+ for i := 1 to numk do
+ begin
+ tspts[i,1] := pts[i,1];
+ tspts[i,2] := pts[i,2];
+ end;
+ minth := minthick;
+ maxth := maxthick;
+ end; (* with *)
+ pushItem (depth, tsitem);
+ end
+else if (depth < 0) then
+ begin
+ TylTieSlur (pts, numk, minthick, maxthick);
+ end; (* else *)
+end; (* tieslurhandle *)
+
+
+{---------------------------------------------------------}
+procedure arccirclehandle (figdepth : integer; scalefact : real;
+ cx, cy : ScaledPts;
+ radius : ScaledPts;
+ ang1, ang2 : integer;
+ var contpts : ControlPoints; (* IN *)
+ nknots : integer;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ thk : VThickness; vec : VectKind;
+ patt : LineStyle;
+ minx, maxx, miny, maxy : ScaledPts;
+ tx, ty : ScaledPts; sx, sy, r : real);
+
+var midx, midy : ScaledPts;
+ middlex, middley : ScaledPts;
+ arcitem : pItem;
+ i : integer;
+ isclosedarc : boolean;
+
+begin
+ midx := cx; middlex := (minx + maxx) div 2;
+ midy := cy; middley := (miny + maxy) div 2;
+ isclosedarc := (ang1 = ang2);
+{
+ if (isclosedarc) then
+ maxspanlen := round ((360.0 / 16.0) * DEGTORAD * radius)
+ else
+ maxspanlen := round ((abs(ang2 - ang1) / 16.0) * DEGTORAD * radius);
+{ }
+
+
+ xfmcontpts (contpts, nknots+1, dvih, dviv, midx, midy,
+ scalefact, r, tx, ty, sx, sy);
+
+ if (figdepth = 0) then
+ begin (* ---- just do the primitive *)
+ (* transform to 4th quad *)
+ dvicontpts (contpts, nknots+1, h, v);
+ IPUSH;
+ doTylArc (isclosedarc,
+ contpts, nknots, thk, vec, patt);
+ IPOP;
+ end
+ else if (figdepth > 0) then
+ begin
+ arcitem := NewItem (Aarc);
+ with arcitem^ do
+ begin
+ BBlx := minx; BBby := miny;
+ BBrx := maxx; BBty := maxy;
+ itemthick := thk;
+ itemvec := vec;
+ itempatt := patt;
+ narcknots := nknots;
+ acentx := cx;
+ acenty := cy;
+ aradius := radius;
+ firstang := ang1;
+ lastang := ang2;
+ for i := 0 to nknots+1 do
+ begin
+ arcpts[i,1] := contpts[i,1];
+ arcpts[i,2] := contpts[i,2];
+ end;
+ end;
+ pushItem (figdepth, arcitem);
+ end
+ else if (figdepth < 0) then
+ begin
+ doTylArc (isclosedarc, contpts, nknots, thk, vec, patt);
+ end;
+end; (* arccirclehandle *)
+
+
+
+{---------------------------------------------------------}
+procedure labelhandle (depth : integer; scalefact: real;
+ lax, lay : ScaledPts;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ style : integer;
+ phrase : strng;
+ tx, ty : ScaledPts);
+var labitem : pItem;
+ null1, null2 : ScaledPts;
+begin
+(* xfm the label point if necessary *)
+ lax := lax + round(tx * scalefact);
+ lay := lay + round(ty * scalefact);
+
+ if (depth = 0) then
+ begin
+ null1 := 0; null2 := 0;
+ dvilinepts (lax, lay, null1, null2, h, v);
+ IPUSH;
+ TylLabel (lax, lay, style, phrase.str, phrase.len);
+ IPOP;
+ end
+ else if (depth > 0) then
+ begin
+ labitem := NewItem (Alabel);
+ with labitem^ do
+ begin
+ labx := lax;
+ laby := lay;
+ fontstyle := style;
+ strcopy (phrase.str, labeltext.str, phrase.len);
+ labeltext.len := phrase.len;
+ end;
+ pushItem (depth, labitem);
+ end
+ else if (depth < 0) then
+ begin
+ TylLabel (lax, lay, style, phrase.str, phrase.len);
+ end;
+end;
+
+
+(* #### Insert new handlers here for new "primitives"
+ i.e., names callable from the \special[tyl ...] level
+*)
+
+
+
+{----------------------------------------------------------------}
+(* transform the current bbox coordinates, and output the new one *)
+procedure newbbox (var minx, maxx, miny, maxy : ScaledPts;
+ midx, midy : ScaledPts;
+ sx, sy, rot : real; tx, ty : ScaledPts);
+var
+ (* coords of full bbox for transformation [n/s][e/w][x/y] *)
+ nex, ney, sex, sey, swx, swy, nwx, nwy: ScaledPts;
+ temp1, temp2 : integer;
+begin
+ (* describe and transform the bbox *)
+ nwx := round (minx * sx); nex := round (maxx * sx);
+ sex := round (maxx * sx); swx := round (minx * sx);
+ ney := round (maxy * sy); nwy := round (maxy * sy);
+ swy := round (miny * sy); sey := round (miny * sy);
+
+ ptrotate (nex, ney, midx, midy, rot);
+ ptrotate (sex, sey, midx, midy, rot);
+ ptrotate (swx, swy, midx, midy, rot);
+ ptrotate (nwx, nwy, midx, midy, rot);
+
+ nex := nex + tx; sex := sex + tx;
+ swx := swx + tx; nwx := nwx + tx;
+ ney := ney + ty; sey := sey + ty;
+ swy := swy + ty; nwy := nwy + ty;
+ (* now find the actual extents of the bbox *)
+ temp1 := min (nex, nwx);
+ temp2 := min (swx, sex);
+ minx := min (temp1, temp2);
+
+ temp1 := min (ney, nwy);
+ temp2 := min (swy, sey);
+ miny := min (temp1, temp2);
+
+ temp1 := max (nex, nwx);
+ temp2 := max (swx, sex);
+ maxx := max (temp1, temp2);
+
+ temp1 := max (ney, nwy);
+ temp2 := max (swy, sey);
+ maxy := max (temp1, temp2);
+end;
+
+
+{-----------------------------------------------}
+(* find the bounding box of the list of primitives
+ and/or sub-figures in this Item *)
+
+procedure findBBox (blot : pItem;
+ var mnx, mxx, mny, mxy : ScaledPts);
+var
+ pi : pItem;
+ bmnx, bmxx, bmny, bmxy, midx, midy : ScaledPts; (* bbox [min/max][x/y] *)
+ tmnx, tmxx, tmny, tmxy : ScaledPts; (* temporary, in case of recursion *)
+ null1, null2 : ScaledPts;
+ prescale, postscale : real;
+ old1, old2 : ScaledPts;
+begin
+ bmnx := TWO24; bmny := TWO24;
+ bmxx := -TWO24; bmxy :=-TWO24;
+ if (blot^.kind = Afigure) then
+ begin (* afigure *)
+ pi := blot^.body^.things;
+ while (pi <> nil) do
+ begin (* find the current bbox of the list of items here *)
+ if (pi^.kind = Afigure) then
+ begin (* recur *)
+ findBBox (pi, tmnx, tmxx, tmny, tmxy);
+ bmnx := min (bmnx, tmnx);
+ bmny := min (bmny, tmny);
+ bmxx := max (bmxx, tmxx);
+ bmxy := max (bmxy, tmxy);
+ end
+ else
+ begin
+ bmnx := min (bmnx, pi^.BBlx);
+ bmny := min (bmny, pi^.BBby);
+ bmxx := max (bmxx, pi^.BBrx);
+ bmxy := max (bmxy, pi^.BBty);
+ end;
+ pi := pi^.nextitem;
+ end; (* while *)
+ (* now transform the items inside, AND the bbox *)
+ pi := blot^.body^.things;
+ midx := (bmnx + bmxx) div 2;
+ midy := (bmny + bmxy) div 2;
+ (* now take care of any pre and post size requirements *)
+ (* see also the "figurehandle" proc. *)
+ with blot^ do
+ begin
+(* ### Keep this scaling biz here, too, for now. May blast it later *)
+ if ((preWid <> 0) and (preHt <> 0)) then
+ begin
+ prescale := scalefitfactor ((bmxx - bmnx), (bmxy - bmny), preWid, preHt);
+ fsx := fsx * prescale;
+ fsy := fsy * prescale;
+ end;
+ if ((postWid <> 0) and (postHt <> 0)) then
+ begin
+ postscale := scalefitfactor ((bmxx - bmnx), (bmxy - bmny), postWid, postHt);
+ fsx := fsx * postscale;
+ fsy := fsy * postscale;
+ end;
+
+(* the actual scale-up is taken care of later in this proc. *)
+ end; (* with *)
+ while (pi <> nil) do
+ begin
+ with pi^ do
+ begin
+ case (kind) of
+ Aline : begin
+ xfmlinepts (lx1, ly1, lx2, ly2, 0, 0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ end;
+ Aspline : begin
+ xfmcontpts (spts, nsplknots, 0, 0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ end;
+ Attspline : begin
+ xfmcontpts (ttpts, nttknots, 0, 0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ end;
+ Aarc : begin
+ null1 := 0; null2 := 0;
+ old1 := acentx; old2 := acenty;
+ xfmlinepts (acentx, acenty, null1, null2, 0,0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ xfmcontpts (arcpts, narcknots + 1, 0, 0, old1, old2, 1.0,
+ blot^.figtheta,
+ blot^.fdx + (acentx - old1),
+ blot^.fdy + (acenty - old2),
+ blot^.fsx, blot^.fsy);
+ end;
+ Alabel : begin
+ null1 := 0; null2 := 0;
+ xfmlinepts (labx, laby, null1, null2, 0,0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ end;
+ Abeam : ; (* not transformable *)
+
+ Atieslur: ; (* not transformable *)
+ Afigure : ; (* do not need to re-transform *)
+ end; (* case *)
+ end; (* with *)
+ pi := pi^.nextitem;
+ end; (* while *)
+ (* transform the bbox, and re-find the new bbox *)
+ newbbox (bmnx, bmxx, bmny, bmxy, midx, midy, blot^.fsx, blot^.fsy,
+ blot^.figtheta, blot^.fdx, blot^.fdy);
+ mnx := bmnx; mny := bmny;
+ mxx := bmxx; mxy := bmxy;
+ end (* if *)
+ else (* some other primitive *)
+ begin
+ mnx := blot^.BBlx; mny := blot^.BBby;
+ mxx := blot^.BBrx; mxy := blot^.BBty;
+ end; (* else *)
+end; (* findBBox *)
+
+
+{---------------------------------------------------------}
+(* traverse the list, determining the current bounding box for
+ * the items. We need this to find the mid-point
+ * for doing any remaining rotations
+ *)
+procedure traverse (thefig, theitem : pItem);
+var
+ minx, maxx, miny, maxy : ScaledPts;
+ curminx, curmaxx, curminy, curmaxy : ScaledPts;
+begin
+ minx := TWO24; maxx := -TWO24;
+ miny := TWO24; maxy := -TWO24;
+
+ while (theitem <> nil) do
+ begin
+ if (theitem^.kind = Afigure) then
+ begin (* recur *)
+ findBBox (theitem, curminx, curmaxx, curminy, curmaxy);
+ with theitem^ do
+ begin
+ BBlx := curminx; BBby := curminy;
+ BBrx := curmaxx; BBty := curmaxy;
+ (* reset the symbol's parameters since all the
+ primitives in it have now been transformed
+ according to the previous specifications *)
+ figtheta := 0.0;
+ fsx := 1.0; fsy := 1.0;
+ fdx := 0; fdy := 0;
+ preWid := 0; preHt := 0;
+ postWid := 0; postHt := 0;
+ end; (* with *)
+ minx := min (minx, curminx); miny := min (miny, curminy);
+ maxx := max (maxx, curmaxx); maxy := max (maxy, curmaxy);
+ end (* if a figure/symbol*)
+ else
+ begin (* a primitive *)
+ with theitem^ do
+ begin
+ minx := min (minx, BBlx); miny := min (miny, BBby);
+ maxx := max (maxx, BBrx); maxy := max (maxy, BBty);
+ end; (* with *)
+ end; (* else *)
+ theitem := theitem^.nextitem;
+ end; (* while *)
+
+ with thefig^ do
+ begin (* set the bounding box for this upper-level symbol defn *)
+ BBlx := minx;
+ BBby := miny;
+ BBrx := maxx;
+ BBty := maxy;
+ end; (* with *)
+end; (* traverse *)
+
+(* ----- Figure symbols ----- *)
+{---------------------------------------------------}
+procedure figurehandle (globalsymlist, symbollist : pItem; dopush : integer);
+const DoItNow = -1;
+ NoScale = 1;
+var pi, curfig : pItem;
+ midx, midy : ScaledPts;
+ null1, null2 : ScaledPts;
+ prescale, postscale : real;
+ tmnx, tmny, tmxx, tmxy : ScaledPts;
+begin (* figurehandle *)
+
+ (* PUSH. traverse the lists (recursively if necessary) and
+ * compute the transformed points.
+ * Convert to 4th quadrant and offset by H & V.
+ * We can do this destructively here
+ * since we're going to output them right away anyhow.
+ * Then call each respective primitive handler with a level
+ * of -1 to indicate to do its job immediately.
+ * POP.
+ *)
+ curfig := symbollist;
+ pi := curfig^.body^.things;
+ (* find and set the bounding box for
+ the figure's sub-symbols and primitives *)
+ if (dopush > 0) then
+ traverse (curfig, pi);
+
+ (* We eventually transform the items
+ to 4th Quadrant DVI space and output them! *)
+
+ pi := curfig^.body^.things;
+
+ midy := (globalsymlist^.BBby + globalsymlist^.BBty) div 2;
+ midx := (globalsymlist^.BBlx + globalsymlist^.BBrx) div 2;
+
+ if (dopush > 0) then
+ begin (* the top-level figure for outputting *)
+
+ (* convert the bounding box because we are about to enter
+ into DVI space, and all calls to handlers hereafter
+ are in terms of DVI coordinates *)
+
+ with globalsymlist^ do
+ begin
+
+(* Since there were external specifications about this figure,
+ fit the current figure's actual size to the
+ "pre" size (specified by W marker) and/or to the
+ "post" size (specified by the F marker).
+ We do this by simple scaling, *without* changing the midpoint
+ of the bounding box, just its extents
+ *)
+ if ((preWid <> 0) and (preHt <> 0)) then
+ begin
+ prescale := scalefitfactor ((BBrx - BBlx), (BBty - BBby), preWid, preHt);
+ fsx := fsx * prescale;
+ fsy := fsy * prescale;
+ end;
+ if ((postWid <> 0) and (postHt <> 0)) then
+ begin
+ postscale := scalefitfactor ((BBrx - BBlx), (BBty - BBby), postWid, postHt);
+ fsx := fsx * postscale;
+ fsy := fsy * postscale;
+ end;
+ tmnx := BBlx; tmny := BBby; tmxx := BBrx; tmxy := BBty;
+ xfmlinepts (tmnx, tmny, tmxx, tmxy, 0,0, midx, midy, 1.0,
+ 0.0, 0, 0, fsx, fsy);
+
+ toplevelxfm (globalsymlist, globalsymlist, 0);
+
+ dviBBlx := tmnx;
+ dviBBrx := tmxx;
+ dviBBby := tmny;
+ dviBBty := tmxy;
+
+ xfmlinepts (dviBBlx, dviBBby, dviBBrx, dviBBty, 0,0,
+ midx, midy, 1.0, 0.0,
+ - (tmnx - BBlx), - (tmny - BBby),
+ 1.0, 1.0);
+
+ fdx := fdx - (tmnx - BBlx);
+ fdy := fdy - (tmny - BBby);
+ end;
+
+ dvilinepts (dviBBlx, dviBBby, dviBBrx, dviBBty, h, v);
+ pgfigurenum := pgfigurenum + 1;
+
+ (* We are ready to output the figure to the page *)
+ writeln(logfile);
+ write(logfile,'Figure #',pgfigurenum:0,' on page ',currpagenum:0,' is approx. ');
+{ write(logfile,((globalsymlist^.BBty - globalsymlist^.BBby) div SPPERPT):0,' pts high and ');
+ writeln(logfile,((globalsymlist^.BBrx - globalsymlist^.BBlx) div SPPERPT):0,' pts wide (actual size)');
+}
+ write(logfile,((tmxy - tmny) div SPPERPT):0,' pts high and ');
+ writeln(logfile,((tmxx - tmnx) div SPPERPT):0,' pts wide (actual size)');
+ IPUSH;
+
+ end;
+
+ while (pi <> nil) do
+ begin
+ with pi^ do
+ begin
+ case (kind) of
+ Aline : begin
+ dvilinepts (lx1, ly1, lx2, ly2, h, v); (* DVI h and v posit *)
+ with globalsymlist^ do
+ linehandle (DoItNow, NoScale,
+ pi^.lx1, pi^.ly1, pi^.lx2, pi^.ly2,
+ 0, 0,
+ pi^.itemthick, pi^.itemvec, pi^.itempatt,
+ dviBBlx, dviBBrx, dviBBby, dviBBty,
+ fdx, -fdy, fsx, fsy, -figtheta);
+ end; (* Aline *)
+
+ Aspline : begin
+ dvicontpts (spts, nsplknots, h, v);
+ with globalsymlist^ do
+ splinehandle (DoItNow, NoScale, pi^.spltype,
+ pi^.sclosed, pi^.dosmarks,
+ pi^.spts, pi^.nsplknots,
+ 0, 0,
+ pi^.itemthick, pi^.itemvec, pi^.itempatt,
+ dviBBlx, dviBBrx, dviBBby, dviBBty,
+ fdx, -fdy, fsx, fsy, -figtheta);
+ end; (* Aspline *)
+
+ Attspline : begin
+ dvicontpts (ttpts, nttknots, h, v);
+ with globalsymlist^ do
+ ttsplhandle (DoItNow, NoScale, pi^.tspltype,
+ pi^.tclosed, pi^.dottmarks,
+ pi^.ttpts, pi^.ttarry, pi^.nttknots,
+ 0, 0,
+ pi^.itemvec, pi^.itempatt,
+ dviBBlx, dviBBrx, dviBBby, dviBBty,
+ fdx, -fdy, fsx, fsy, -figtheta);
+ end; (* Attspline *)
+
+ Abeam : begin
+ dvilinepts (bx1, by1, bx2, by2, h, v);
+ beamhandle (DoItNow, staf, bkind, bx1, by1, bx2, by2);
+ end; (* Abeam *)
+
+ Atieslur : begin
+ dvicontpts (tspts, ntknots, h, v);
+ tieslurhandle (DoItNow, tspts, ntknots, minth, maxth);
+ end; (* a tie or slur *)
+
+ Aarc : begin
+ dvicontpts (arcpts, narcknots + 1, h, v);
+ with globalsymlist^ do
+ arccirclehandle (DoItNow, NoScale,
+ pi^.acentx, pi^.acenty,
+ pi^.aradius,
+ pi^.firstang, pi^.lastang,
+ pi^.arcpts, pi^.narcknots,
+ 0, 0,
+ pi^.itemthick, pi^.itemvec, pi^.itempatt,
+ dviBBlx, dviBBrx, dviBBby, dviBBty,
+ fdx, -fdy, fsx, fsy, -figtheta);
+ end; (* arc *)
+ Alabel : begin
+ null1 := 0; null2 := 0;
+ dvilinepts (labx, laby, null1, null2, h, v);
+ with globalsymlist^ do
+ labelhandle (DoItNow, NoScale,
+ pi^.labx, pi^.laby,
+ 0, 0,
+ pi^.fontstyle, pi^.labeltext,
+ fdx, -fdy);
+ end; (* label *)
+
+ Afigure : begin (* recur *)
+ figurehandle (globalsymlist, pi, 0);
+ end; (* another symbol *)
+
+ end; (* case *)
+ end; (* with *)
+ pi := pi^.nextitem;
+ end; (* while *)
+ if (dopush > 0) then
+ begin
+ IPOP;
+ end;
+end; (* figurehandle *)
+
+
+
+(* %%% *)
+{-----------------------------------------------------}
+procedure mainhandlespecials (specnum, numpbytes : integer);
+(* specnum is the DVI-number of the special
+ * numpbytes is the number of parameter bytes
+ *)
+label 888;
+const PARSLEN = 50; (* Length of the byte-string-cache *)
+ EMPTY = 0;
+type charset = set of char;
+var siz, numknots : integer; (* Lots of temp vars that we use *)
+ x1, y1, x2, y2 : integer;
+ sx100, sy100 : real;
+ transx, transy : ScaledPts;
+ rot : real;
+ SPscale : real;
+ cpts : ControlPoints;
+ thk : VThickness;
+ patt : LineStyle;
+ TTary : ThickAryType;
+ vk : VectKind;
+ bk : BeamKind;
+ markdiam : integer;
+ radius, ang1, ang2 : integer;
+ phrase : strng;
+ style : integer;
+ nam : strng;
+ sysnam : strng; (* the first parameter of the \special *)
+ let : char;
+ i, gotten : integer;
+ b : OctByt;
+ pi : pItem;
+ minx, miny, maxx, maxy : ScaledPts;
+ maxthk, minthk : integer;
+
+ tylnam,
+ beginfigurenam, (* names used for string to string comparisons *)
+ endfigurenam,
+ linenam,
+ splinenam,
+ ttsplnam,
+ beamnam,
+ tieslurnam,
+ arcnam,
+ labelnam,
+ paramnam {internal} : charstring;
+
+ splinetype : SplineKind;
+ isclosedspline : boolean;
+
+ parsearray : array [1..PARSLEN] of OctByt; (* cache of bytes to run through *)
+ parsposit, parsmax : integer; (* current and max position in cache *)
+ usingstream : boolean; (* whether we read/parse using cache or from file *)
+
+
+(*--------------------------------------------------------------
+ These procedures depend on the correct ordering of
+ GETs with respect to the number of bytes read in so far.
+ precond: byte "b" has been read and gotten < numpbytes
+ postcond: byte "b" has been read iff gotten < numpbytes.
+ If your impl. definition of READ is non-standard, you will
+ have to dink with the ordering and be really careful of
+ keeping track of 'gotten' and 'numpbytes' variables
+--------------------------------------------------------------*)
+
+ function nextpbyte : integer;
+ begin
+ if (usingstream) then
+ begin
+ if (gotten < numpbytes) then
+ begin
+ nextpbyte := Dget1byte;
+ gotten := gotten + 1;
+ end
+ else
+ nextpbyte := EMPTY;
+ end
+ else
+ begin (* not using stream *)
+ if (parsposit <= parsmax) then
+ begin
+ nextpbyte := parsearray[parsposit];
+ parsposit := parsposit + 1;
+ end
+ else
+ begin (* at end of parse array, so read from stream now *)
+ usingstream := true;
+ if (gotten < numpbytes) then
+ begin
+ nextpbyte := Dget1byte;
+ gotten := gotten + 1;
+ end
+ else
+ nextpbyte := EMPTY;
+ end;
+ end; (* else *)
+ end;
+
+(* !!!!! Make sure all these predicates jive correctly with
+ the key-letter definitions *)
+{__________________________________________________________________}
+ function isanumber (b : integer) : boolean;
+ begin
+ isanumber := ((b >= xord['0']) and (b <= xord['9']));
+ end;
+
+ function isaletter (b : integer) : boolean;
+ begin
+ isaletter := (((b >= xord['A']) and (b <= xord['Z'])) or
+ ((b >= xord['a']) and (b <= xord['z'])) or
+ (b = xord['@']) or
+ (b = xord['"']) );
+ end;
+
+ function isaspace (b : integer) : boolean;
+ begin
+ isaspace := ((b = xord[' ']) or
+ (b = CR) or
+ (b = LF) or
+ (b = HT) or
+ (b = FF));
+ end;
+
+ function isdelimiter (b : integer) : boolean;
+ begin
+ (* not a key-letter *)
+ isdelimiter := (((b < xord['A']) or (b > xord['Z'])) and
+ ((b < xord['a']) or (b > xord['z'])) and
+ (b <> xord['@']) and
+ (b <> xord['"']) );
+ end;
+
+ function isnotnull (b : integer) : boolean;
+ begin
+ isnotnull := (b <> EMPTY);
+ end;
+
+
+{__________________________________________________________________}
+ function getnumber : integer;
+ var n : integer;
+ isneg : boolean;
+ begin
+ n := 0;
+ isneg := false;
+ while ( (isnotnull (b)) and
+ (not (isanumber (b)))) do
+ begin (* not a numeral *)
+ if (b = xord['-']) then
+ isneg := true;
+ b := nextpbyte;
+ end;
+
+ while (isaspace (b)) do (* Skip spaces *)
+ b := nextpbyte;
+
+ while ( (isnotnull (b)) and
+ isanumber (b)) do
+ begin (* a numeral *)
+ n := n * 10 + (b - xord['0']);
+ b := nextpbyte;
+ end;
+
+ if ((gotten = numpbytes) and
+ isanumber (b)) then
+ begin (* end condition *)
+ n := n * 10 + (b - xord['0']);
+ end;
+
+ if (isneg) then
+ getnumber := -(n)
+ else
+ getnumber := n;
+ end;
+{__________________________________________________________________}
+
+ function getletter : char;
+ var k : char;
+ begin
+ k := ' ';
+ while ( (isnotnull (b)) and
+ (isdelimiter (b) and not (isaspace (b)))) do
+ begin (* non letter *)
+ b := nextpbyte;
+ end;
+
+ if ( (isnotnull (b)) and
+ ( isaletter (b) or isaspace (b)
+ and not (isanumber (b)))) then
+ begin
+ k := xchr[b];
+ b := nextpbyte;
+ end;
+ getletter := k;
+ end;
+{__________________________________________________________________}
+
+ function getanything : char;
+ var k : char;
+ begin
+ k := ' ';
+ while (not (isnotnull (b))) do
+ begin (* not usable *)
+ b := nextpbyte;
+ end;
+
+ if (isnotnull (b)) then
+ begin
+ k := xchr[b];
+ b := nextpbyte;
+ end;
+ getanything := k;
+ end;
+
+{****************************************************
+ The following routines look for key - letter tokens
+ that indicate certain attributes for a primitive.
+
+Currently, the letters used are:
+ S for scaled-points measurement
+ P for printers points
+ M millimeters measurement
+ C use a Circular vector for drawing
+ H Horizontal-pen vector
+ V Vertical vector
+ B B-spline
+ I Interpolating B-spline
+ K Catmull-Rom spline
+ D Cardinal spline
+ U Open spline
+ O closed spline
+ X put marks on spline control pts
+ T Transformation marker
+ R Regular beam characters
+ G Grace Beam characters
+ @ Specify center-point for arc/circle
+ L Line-style
+ F for beginfigure: Fit figure to wid/ht
+ W for beginfigure: figure was created at this wid & ht
+**************************************************}
+
+
+{__________________________________________________________________}
+ procedure gettransforms (var sc1, sc2, r : real;
+ var tr1, tr2 : integer);
+ label 22;
+ var i : integer;
+ dun : boolean;
+ begin
+ sc1 := 1.0; sc2 := 1.0;
+ tr1 := 0; tr2 := 0;
+ r := 0.0;
+ i := parsposit - 1;
+ if (i < 1) then
+ begin
+ goto 22; (* exit with defaults *)
+ end;
+ dun := false;
+ while ((i < parsmax) and not dun) do
+ begin
+ if (isaletter(parsearray[i])) then
+ begin
+ if ((parsearray[i] = xord['t']) or
+ (parsearray[i] = xord['T'])) then
+ begin
+ if (isdelimiter(parsearray[i+1]) and
+ isdelimiter(parsearray[i-1])) then
+ begin (* get transform parameters *)
+ sc1 := getnumber / 100.0;
+ sc2 := getnumber / 100.0;
+ tr1 := getnumber;
+ tr2 := getnumber;
+ r := float(getnumber); (* degrees about primitive center *)
+ if (r < 0.0) then
+ r := r + 360.0;
+ dun := true;
+ end;
+ end;
+ end;
+ i := i + 1;
+ end; (* while *)
+22:
+ end; (* gettransforms *)
+
+{__________________________________________________________________}
+ function findmarker (markset : charset) : integer;
+ label 1111;
+ var i, sym : integer;
+ dun : boolean;
+ begin
+ i := parsposit - 1;
+ sym := EMPTY;
+ if (i < 1) then
+ goto 1111;
+ dun := false;
+ while ((i < parsmax) and not dun) do
+ begin
+ if (isaletter(parsearray[i])) then
+ begin
+ if (xchr[ parsearray[i] ] in markset) then
+ begin
+ if (isdelimiter (parsearray[i+1]) and
+ isdelimiter (parsearray[i-1])) then
+ begin
+ sym := xord[tolowercase(xchr[parsearray[i]])];
+ dun := true;
+ end;
+ end;
+ end; (* if a letter *)
+ i := i + 1;
+ end; (* while *)
+1111: findmarker := sym;
+ end;
+
+
+
+ function findscale : integer;
+ begin
+ findscale := findmarker(['s','S','p','P','m','M']);
+ end;
+
+ function findvectkind : integer;
+ begin
+ findvectkind := findmarker(['c','C','h','H','v','V']);
+ end;
+
+ function findlinestyle : integer;
+ begin
+ findlinestyle := findmarker(['l','L']);
+ end;
+
+ function findbeamkind : integer;
+ begin
+ findbeamkind := findmarker(['r','R','g','G']);
+ end;
+
+ function findsplinekind : integer;
+ begin
+ findsplinekind := findmarker(['b','B','i','I','k','K','d','D']);
+ end;
+
+ function findsplclosure : integer;
+ begin
+ findsplclosure := findmarker(['o','O','u','U']);
+ end;
+
+ function findatsign : integer;
+ begin
+ findatsign := findmarker(['@']);
+ end;
+
+ function finddotmark : integer;
+ begin
+ finddotmark := findmarker(['x','X']);
+ end;
+
+ function findfigdimens : integer;
+ begin
+ findfigdimens := findmarker(['w','W']);
+ end;
+
+ function findfitsizes : integer;
+ begin
+ findfitsizes := findmarker(['f','F']);
+ end;
+
+
+ {_________________________________________________}
+ function thescaleof (scal : integer) : real;
+ begin
+ if (scal = xord['s']) then
+ thescaleof := 1 * magfactor
+ else if (scal = xord['p']) then
+ thescaleof := SPPERPT * magfactor
+ else if (scal = xord['m']) then
+ thescaleof := SPPERMM * magfactor
+ else if (scal = EMPTY) then
+ thescaleof := SPPERPT * magfactor;
+ end;
+
+
+ function thevectorof (vkin : integer) : VectKind;
+ begin
+ if (vkin = xord['c']) then
+ thevectorof := VKCirc
+ else if (vkin = xord['v']) then
+ thevectorof := VKVert
+ else if (vkin = xord['h']) then
+ thevectorof := VKHort
+ else if (vkin = EMPTY) then
+ thevectorof := VKCirc;
+ end;
+
+ function thestyleof (linest : integer) : LineStyle;
+ begin
+ if ((linest > 3) or
+ (linest < 0)) then linest := 0;
+ case linest of
+ 0 : thestyleof := solid;
+ 1 : thestyleof := dotted;
+ 2 : thestyleof := dashed;
+ 3 : thestyleof := dotdash;
+ end;
+ end;
+
+
+
+
+(* -----!!!!!!!!!!!! HandleSpecials !!!!!!!!!!!!!------ *)
+begin
+ tylnam := 'tyl';
+ beginfigurenam := 'beginfigure';
+ endfigurenam := 'endfigure';
+ linenam := 'line';
+ splinenam := 'spline';
+ ttsplnam := 'ttspline';
+ beamnam := 'beam';
+ tieslurnam := 'tieslur';
+ arcnam := 'arc';
+ labelnam := 'label';
+ paramnam := 'param';
+ usingstream := true; (* getting bytes from dvifile *)
+
+ specstart := DVIMark - (specnum - 239 + 1) - 1;
+
+ ourxpos := h; ourypos := v; (* note the global DVI (h,v) coords *)
+ i := 1;
+
+ b := Dget1byte; (* prime the reading scheme *)
+ gotten := (specnum - 239 + 1);
+
+ while (isaspace(b)) do
+ b := nextpbyte;
+
+ let := getletter;
+ while (let <> ' ') do (* get the name of the system --- Hopefully 'tyl' *)
+ begin
+ sysnam.str[i] := tolowercase(let);
+ sysnam.len := i;
+ i := i + 1;
+ let := getletter;
+ end;
+
+ sysnam.str[i] := chr(32); (* end of string *)
+
+ if (not streq (sysnam.str, tylnam, 3)) then (* TeXtyl doesnt know about this special *)
+ begin
+ write (logfile,'The special: ');
+ writestrng(sysnam,true);
+ writeln(logfile,' is not tyl-able. Skipping...');
+ while (gotten < numpbytes) do
+ b := nextpbyte;
+ goto 888;
+ end;
+
+(* OTHERWISE: all is okay. Lets look for a primitive to tyl *)
+
+ while (isdelimiter(b)) do
+ begin
+ b := nextpbyte;
+ end;
+ i := 1;
+ let := getletter; {xchr[b];}
+ while (not (isdelimiter(xord[let]))) do (* get the name of the primitive *)
+ begin
+ nam.str[i] := tolowercase(let);
+ nam.len := i;
+ i := i + 1;
+ let := getletter;
+ end;
+
+ nam.str[i] := chr(32); (* end of string *)
+
+
+ let := xchr[b];
+
+(* Now, fill the parse array with bytes so that we can get
+ the given parameters, and infer the defaulted params *)
+
+ parsmax := min (PARSLEN, ((numpbytes - gotten) + 1));
+
+ if (parsmax > 1) then
+ begin
+ parsearray[1] := xord[' ']; (* we need this *)
+ parsearray[2] := b; (* start filling *)
+ for i := 3 to parsmax do
+ begin (* fill rest *)
+ parsearray[i] := nextpbyte;
+ end;
+ parsposit := 1;
+ usingstream := false; (* now we look at bytes in parse array *)
+ b := nextpbyte; (* start it *)
+ end
+ else
+ begin
+ usingstream := true;
+ parsposit := -1; (* undefined *)
+ end;
+
+ (* --- BEGINFIGURE ---- *)
+ if streq(nam.str, beginfigurenam, 3) then
+ begin
+ multifigure := multifigure + 1;
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ gettransforms (sx100, sy100, rot, transx, transy);
+ (* store all the primitives on pageitems, and dont output
+ them until we get a endfigure. this way, we can take
+ care of dealing with all the primitives according to
+ some global tranformation for the whole figure *)
+ pi := NewItem (Afigure);
+ with pi^ do
+ begin
+ figtheta := rot;
+ fsx := sx100; fsy := sy100;
+ fdx := round (transx * SPscale);
+ fdy := round (transy * SPscale);
+ depthnumber := multifigure; (* we're at a new level *)
+ i := findfigdimens;
+ if (i <> EMPTY) then
+ begin
+ preWid := round (getnumber * SPscale);
+ preHt := round (getnumber * SPscale);
+ end;
+ i := findfitsizes;
+ if (i <> EMPTY) then
+ begin
+ postWid := round (getnumber * SPscale);
+ postHt := round (getnumber * SPscale);
+ end;
+ end; (* with *)
+ BackupInBuf (DVIMark - specstart);
+ pushItem (multifigure - 1, pi);
+ goto 888;
+ end;
+ (* ---- ENDFIGURE ---- *)
+ if streq(nam.str, endfigurenam, 3) then
+ begin
+ multifigure := multifigure - 1;
+ if (multifigure < 0) then
+ begin
+ complain (ERRBAD);
+ write(logfile,'Warning: Too many "endfigure"s !');
+ multifigure := 0;
+ end;
+ BackupInBuf (DVIMark - specstart);
+
+ if (multifigure = 0) then
+ begin
+ (* go do our set of figures (within figures...) *)
+ figurehandle (pageitems, pageitems, 1);
+ dispose (pageitems); (* ### should maybe garbage collect here *)
+ pageitems := nil;
+ end; (* if *)
+ goto 888;
+ end;
+
+ (* --- LINE --- *)
+ if streq(nam.str, linenam, 3) then
+ begin
+ i := findscale;
+ SPscale := thescaleof(i);
+
+ gettransforms (sx100, sy100, rot, transx, transy);
+ thk := getnumber; (* get the vector thickness *)
+ if (thk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'?? Thickness not found. Setting to 1');
+ thk := 1;
+ end;
+ i := findvectkind;
+ vk := thevectorof (i);
+
+ i := findlinestyle;
+ if (i <> EMPTY) then
+ patt := thestyleof (getnumber)
+ else
+ patt := solid;
+
+ x1 := round (getnumber * SPscale);
+ y1 := round (getnumber * SPscale);
+ x2 := round (getnumber * SPscale);
+ y2 := round (getnumber * SPscale);
+
+ minx := min (x1, x2);
+ maxx := max (x1, x2);
+ miny := min (y1, y2);
+ maxy := max (y1, y2);
+
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+ linehandle (multifigure, SPscale, x1, y1, x2, y2, 0, 0, thk, vk, patt,
+ minx, maxx, miny, maxy,
+ transx, transy, sx100, sy100, rot);
+ end (* line *)
+ (* ---- THE SPLINES ---- *)
+else if (streq(nam.str, splinenam, 3) or
+ streq(nam.str, ttsplnam,3)) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ gettransforms (sx100, sy100, rot, transx, transy);
+
+ if streq(nam.str, splinenam, 3) then
+ begin
+ thk := getnumber;
+ if (thk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Spline Thickness not found. Setting to 1');
+ thk := 1;
+ end;
+ end;
+ i := findvectkind;
+ vk := thevectorof (i);
+
+ i := findlinestyle;
+ if (i <> EMPTY) then
+ patt := thestyleof (getnumber)
+ else
+ patt := solid;
+
+ i := findsplinekind;
+ if (i = xord['b']) then
+ splinetype := BSPL
+ else if (i = xord['i']) then
+ splinetype := INTBSPL
+ else if (i = xord['k']) then
+ splinetype := CATROM
+ else if (i = xord['d']) then
+ splinetype := CARD
+ else if (i = EMPTY) then
+ splinetype := CATROM;
+
+ i := findsplclosure;
+ if (i = xord['o']) then
+ isclosedspline := true
+ else if (i = xord['u']) then
+ isclosedspline := false
+ else if (i = EMPTY) then
+ isclosedspline := false;
+
+ i := finddotmark;
+ if (i = xord['x']) then
+ markdiam := getnumber
+ else if (i = EMPTY) then
+ markdiam := 0;
+
+ numknots := min (getnumber, MAXCTLPTS);
+ if (numknots < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Number of spline/ttspline knot points not found. Setting to 1');
+ numknots := 1;
+ end;
+
+ minx := TWO24; miny := TWO24;
+ maxx := -TWO24; maxy := -TWO24;
+
+ for i := 0 to (numknots + 3) do
+ begin
+ cpts[i,1] := 0;
+ cpts[i,2] := 0;
+ end; (* for *)
+
+ for i := 1 to numknots do
+ begin
+ x1 := round (getnumber * SPscale);
+ cpts[i,1] := x1;
+ if (x1 < minx) then
+ minx := x1;
+ if (x1 > maxx) then
+ maxx := x1;
+ y1 := round (getnumber * SPscale);
+ cpts[i,2] := y1;
+ if (y1 < miny) then
+ miny := y1;
+ if (y1 > maxy) then
+ maxy := y1;
+ end; (* for *)
+
+ if streq(nam.str, ttsplnam, 3) then
+ begin
+ for i := 1 to numknots do
+ begin
+ TTary[i] := getnumber;
+ end;
+ end;
+
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+
+ if streq(nam.str, splinenam, 3) then
+ splinehandle (multifigure, SPscale, splinetype, isclosedspline,
+ markdiam, cpts, numknots,
+ 0, 0, thk, vk, patt, minx, maxx, miny, maxy,
+ transx, transy, sx100, sy100, rot)
+ else
+ ttsplhandle (multifigure, SPscale, splinetype, isclosedspline,
+ markdiam, cpts, TTary, numknots,
+ 0, 0, vk, patt, minx, maxx, miny, maxy,
+ transx, transy, sx100, sy100, rot);
+ end (* splines *)
+ (* --- BEAMS ---- *)
+ else if streq(nam.str, beamnam, 4) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ (* no transforms *)
+
+ siz := getnumber; (* the staffsize *)
+ i := findbeamkind;
+ if (i = xord['g']) then
+ bk := grace
+ else if (i = xord['r']) then
+ bk := regular
+ else if (i = EMPTY) then
+ bk := regular;
+
+ x1 := round (getnumber * SPscale);
+ y1 := round (getnumber * SPscale);
+ x2 := round (getnumber * SPscale);
+ y2 := round (getnumber * SPscale);
+
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+
+ beamhandle (multifigure, siz, bk, x1, y1, x2, y2);
+ end (* beam *)
+ (* ---- TIES AND SLURS ---- *)
+ else if streq(nam.str, tieslurnam, 3) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ minthk := getnumber;
+ if (minthk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Tie/Slur Min Thickness not found. Setting to 1');
+ minthk := 1;
+ end;
+
+ maxthk := getnumber;
+ if (maxthk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Tie/Slur MaxThickness not found. Setting to 1');
+ maxthk := 1;
+ end;
+
+ numknots := min (getnumber, MAXCTLPTS);
+ if (numknots < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Tie/Slur Number of knot points not found. Setting to 1. Should be 5');
+ numknots := 1;
+ end;
+ for i := 1 to numknots do
+ begin
+ cpts[i,1] := round (getnumber * SPscale);
+ cpts[i,2] := round (getnumber * SPscale);
+ end; (* for *)
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+
+ tieslurhandle (multifigure, cpts, numknots, minthk, maxthk);
+ end (* ties and slurs *)
+ (* --------- ARCS and CIRCLES --------- *)
+ else if streq (nam.str, arcnam, 3) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ gettransforms (sx100, sy100, rot, transx, transy);
+
+ thk := getnumber;
+ if (thk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Arc Thickness not found. Setting to 1');
+ thk := 1;
+ end;
+ i := findvectkind;
+ vk := thevectorof (i);
+
+ i := findlinestyle;
+ if (i <> EMPTY) then
+ patt := thestyleof (getnumber)
+ else
+ patt := solid;
+
+ radius := round (getnumber * SPscale);
+ if (radius = 0) then
+ radius := round(1 * SPscale);
+ i := findatsign;
+ if (i <> EMPTY) then
+ begin
+ x2 := round (getnumber * SPscale);
+ y2 := round (getnumber * SPscale);
+ end
+ else
+ begin
+ x2 := 0; y2 := 0; (* assume center at origin *)
+ end;
+
+ ang1 := getnumber;
+ if (abs(ang1) > 360) then
+ ang1 := ang1 mod 360;
+ ang2 := getnumber;
+ if (abs(ang2) > 360) then
+ ang2 := ang2 mod 360;
+
+ minx := TWO24; miny := TWO24;
+ maxx := -TWO24; maxy := -TWO24;
+
+ if (ang1 = ang2) then
+ begin (* a circle *)
+ defineCircleCpts (radius,x2,y2, cpts, numknots);
+ end
+ else
+ begin (* a real arc *)
+ definearcpts (radius, x2,y2, ang1, ang2, cpts, numknots);
+ end;
+
+ for i := 1 to numknots do
+ begin
+ x1 := cpts[i,1];
+ if (x1 < minx) then
+ minx := x1;
+ if (x1 > maxx) then
+ maxx := x1;
+
+ y1 := cpts[i,2];
+ if (y1 < miny) then
+ miny := y1;
+ if (y1 > maxy) then
+ maxy := y1;
+ end; (* for *)
+
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+
+ arccirclehandle (multifigure, SPscale, x2, y2,
+ radius, ang1, ang2,
+ cpts, numknots,
+ 0, 0, thk, vk, patt, minx, maxx, miny, maxy,
+ transx, transy, sx100, sy100, rot)
+
+ end (* arc and circle *)
+ (* ---------- LABELS --------------*)
+ else if streq (nam.str, labelnam, 3) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ style := getnumber; (* font style number *)
+ if ((style < 1) or (style > MAXLABELFONTS)) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Label style bad? Setting to Style 1');
+ style := 1;
+ end;
+
+ x1 := round (getnumber * SPscale);
+ y1 := round (getnumber * SPscale);
+
+ let := getletter;
+ while (let <> '"') do
+ begin
+ let := getletter;
+ end;
+ i := 0;
+ let := getanything; (* get next letter or whatever *)
+ while (let <> '"') do
+ begin (* get the label phrase *)
+ i := i + 1;
+ phrase.str[i] := let;
+ let := getanything; (* getletter;*)
+ end;
+
+ phrase.str[i+1] := chr(32);
+
+ phrase.len := i;
+
+ BackupInBuf (DVIMark - specstart);
+ cmd1byte (OURFONTFLAG);
+ labelhandle (multifigure, SPscale, x1, y1, 0, 0, style, phrase, 0, 0);
+ end (* label *)
+
+ (* --------- INTERNAL PARAM -------*)
+ else if streq (nam.str, paramnam, 3) then
+ begin
+ i := getnumber; (* addressable param number *)
+
+ begin
+ writeln (logfile,' I do not know what internal parameter #',i:0,' is');
+ end; (* else *)
+ BackupInBuf (DVIMark - (specstart));
+ end (* Internal param *)
+
+ (* ============== NONE OF THE ABOVE ============== *)
+ else
+ begin
+ complain (ERRNOTBAD);
+ write (logfile,'Sorry, I don''t know how to tyl ');
+ writestrng (nam,true);
+
+ while (gotten < numpbytes) do
+ begin
+ b := nextpbyte;
+ end;
+ end;
+ 888:
+ (* make sure that we used up all the bytes in this special *)
+ if (gotten < numpbytes) then
+ begin
+ while (gotten < numpbytes) do
+ begin (* slurp up excess *)
+ b := Dgrabbyte;
+ gotten := gotten + 1;
+ end;
+ end; (* if *)
+ end; (* mainhandlespecials *)
+
+
+ (* ==================================================
+
+ The routines below assume coordinates are already in
+ 4th Quadrant DVI-space
+
+ =====================================================*)
+
+
+
+ {-----------------------------------------------------}
+ (* returns 0 if dy.dx not in font
+ 1 if ok
+ 2 if ok and caller should use two of the "code"s
+ coding scheme requires 0<= [dx, dy] <= 16
+ AND that max(dx, abs(dy)) is in [0,1,2,4,8,16]
+ *)
+function outvector (dx, dy : integer; var code : integer) : integer;
+ label 99;
+ var c : integer;
+ result : integer;
+ begin
+ if (dx < 0) then
+ begin
+ outvector := 0;
+ goto 99;
+ end;
+
+ result := 0; (* init for potential failure *)
+ code := (-1);
+ if (dy < 0) then
+ begin
+ c := 160 + dy + dx - 9*max (dx, -dy);
+ end
+ else
+ begin
+ c := 160 + dy - dx - 7*max (dx, dy);
+ end;
+
+ (* here translate to OUR coding scheme
+ and return the correct number
+ this is needed because "c" thinks the char range
+ is 0 to 160, while we have only 128 chars *)
+
+ if (c = 0) then (* special cases *)
+ begin
+ code := 63;
+ result := 2;
+ end
+ else if (c = 64) then
+ begin
+ code := 95;
+ result := 2;
+ end
+ else
+ begin (* regular ones *)
+ result := 1; (* just one char is fine *)
+ if (c in [1..63]) then
+ code := c - 1
+ else if (c in [80..112]) then
+ code := c - 17
+ else if (c in [120..136]) then
+ code := c - 24
+ else if (c in [140..148]) then
+ code := c - 27
+ else if (c in [150..154]) then
+ code := c - 28
+ else if (c = 160) then
+ code := 127; (* c - 33 *)
+ end;
+ 99:
+ outvector := result;
+ end;
+
+
+
+ (* take care of a Manhattan (horizontal /vertical) line *)
+ {----------------------------------------------------------}
+procedure hvline (lx, by, rx, ty, fontindex : integer);
+ var t, rth, x, y, width, height : integer;
+ begin
+ rth := VFontTable[fontindex]^.PenSize; (* thickness of vector in sp *)
+ if (lx = rx) then
+ begin (* Vertical line *)
+ if (ty > by) then
+ begin
+ t := by; by := ty; ty := t; (* swap *)
+ end;
+ x := round (lx - (rth / 2.0));
+ y := by;
+ width := rth;
+ height := by - ty;
+ end
+ else
+ begin (* Horizontal line *)
+ if (ty < by) then
+ begin
+ t := by; by := ty; ty := t; (* swap *)
+ end;
+ if (lx > rx) then
+ begin
+ t := lx; lx := rx; rx := t; (* swap *)
+ end;
+ x := lx;
+
+ y := (by + (rth div 2)); (* + rth for {h,v}-space *)
+ width := rx - lx;
+ height := rth;
+ end;
+
+ isetpos (x, y);
+ cmd1byte (PUTRULE);
+ cmd4byte (height);
+ cmd4byte (width);
+
+ (* output two dots on ends of the rules
+ at lx, by and rx, ty *)
+ (* the font has already been set before these calls *)
+ Tyldot (lx, by);
+ Tyldot (rx, ty);
+ isetpos (rx, ty);
+ end;
+
+
+ {------------------------------------------------------------}
+procedure diagonal (xl, yb, xr, yt : ScaledPts; fontindex: integer);
+ var t, curx, cury, dx, dy, code : integer;
+ slope : real;
+ mxveclen : ScaledPts;
+ sptovecs : real;
+ rho : ScaledPts;
+
+ {......................................}
+ (* compute maximum length vector character that we can use *)
+
+ procedure getincr (var outdx, outdy : integer);
+ label 99;
+ var radius, x, y : integer;
+ sign : integer;
+ q : real;
+
+ begin (* getincr *)
+ radius := mxveclen; (* radius of semi-square *)
+ (* make sure the pt is outside of the semi-square,
+ scaling down radius if necessary *)
+ while ( ((xr - curx) < radius) and
+ (abs (yt - cury) < radius)) do
+ begin
+ radius := radius div 2;
+ end;
+ if (slope < 0.0) then (* <0 since in 4th quad by now*)
+ sign := -1
+ else
+ sign := +1;
+ if (xr = curx) then
+ begin
+ outdx := 0;
+ outdy := sign * radius;
+ goto 99;
+ end;
+ if (yt = cury) then
+ begin
+ outdx := abs (radius);
+ outdy := 0;
+ goto 99;
+ end;
+
+ (* compute the intersection with the semi-square,
+ choose whichever slope is best *)
+ if (abs (slope) < 1.0) then
+ begin (* mostly horizontal *)
+ outdx := abs (radius);
+ y := yb + round ((curx + abs(radius) - xl) * slope);
+ outdy := y - cury;
+ end
+ else
+ begin (* mostly vertical *)
+ x := xl + round ((cury + (sign * radius) - yb) / slope);
+ outdx := x - curx;
+ outdy := sign * radius;
+ end;
+
+ if (abs (outdy) > abs (yt - cury)) then
+ begin (* truncate *)
+ outdy := yt - cury;
+ end;
+ if (outdx > (xr - curx)) then
+ begin (* truncate *)
+ outdx := xr - curx;
+ end;
+ if (outdx < 0) then
+ begin
+ outdx := 0;
+ end;
+
+ (* method to find the exact intersection of the line segment
+ with the semi-circle, used
+ to determine the x and y values::
+ we do this by using the arctangent of the slope as
+ the angle 'a' from the x-axis. Then use the relation
+ y = r cos a, and x = r sin a
+ we can be smart about all this trig stuff by using
+ the relation :
+ sin (arctan a) = 1/sqrt(1 + a^2)
+ cos (arctan a) = a/sqrt(1 + a^2)
+ Thus:
+ q := (1.0 / sqrt (slope * slope + 1.0));
+ outdx := round (q * radius);
+ outdy := round (q * radius * slope);
+
+ Unfortunately, we cannot access the Vector Font
+ coding scheme because the outdx, outdy 's produced
+ here do no conform to the condition
+ max (dx, abs(dy)) in [0,1,2,4,8,16]
+ when converted to vector-font sizes with
+ sptovecs (see the 'diagonal' proc.).
+ *)
+
+ 99:
+ end; (* getincr *)
+ {.......................................}
+
+ begin (* DIAGONAL *)
+ if (xr <> xl) then
+ slope := (yt - yb) / (xr - xl)
+ else
+ slope := BIGREAL; (* some illegal value *)
+
+ if (xl > xr) then
+ begin
+ t := xl; xl := xr; xr := t;
+ t := yb; yb := yt; yt := t;
+ end; (* swap *)
+
+ curx := xl;
+ cury := yb;
+ mxveclen := (VFontTable[fontindex]^.MaxVectLen);
+ rho := mxveclen div 16; (* minimum radius of vector fonts *)
+ if (rho = 0) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Diagonal: Min radius of vector font is zero. setting to 1');
+ rho := 1;
+ end;
+
+ if ((abs(xl - xr) <= rho) and
+ (abs(yb - yt) <= rho)) then
+ begin (* pretty much a null line *)
+ Tyldot (xl, yb);
+ end
+ else
+ begin
+ sptovecs := 1.0 / rho; (* conversion for scaled pts to vectorfont units *)
+
+ code := -1; (* initialize to a bogus number *)
+
+ (* this conditional really has to have "or"
+ instead of "and", because of lines that are
+ *nearly* horizontal or vertical
+ *)
+ while (((xr - curx) >= rho) or (abs(yt - cury) >= rho)) do
+ begin
+ (* Get the approximate incremental amount. We use this dy/dx
+ pair in order to index into our vector font coding scheme *)
+
+ getincr (dx, dy);
+
+ (* Get the vector character code corresponding to this
+ approximate incremental amount *)
+ t := outvector (round (dx * sptovecs),
+ round (dy * sptovecs),
+ code);
+ (* Now that we have the character code, go find out its actual
+ physical dimensions for the real dy/dx amounts *)
+ if (dy > 0) then
+ dy := VFontTable[fontindex]^.FontInfo[code].Cdp
+ else
+ dy := -(VFontTable[fontindex]^.FontInfo[code].Cht);
+
+ dx := VFontTable[fontindex]^.FontInfo[code].Cwd;
+
+ case (t) of
+ 0: begin
+ complain (ERRREALBAD);
+ writeln (logfile,'Error in Diagonal:: bad dydx');
+ end;
+
+ 1: begin
+ isetpos (curx, cury);
+ iputchar (code);
+ end;
+
+ 2: begin
+ isetpos (curx, cury);
+ iputchar (code);
+ isetpos (curx + (dx div 2), cury + (dy div 2));
+ iputchar (code);
+ end;
+ end; (* case *)
+
+ curx := curx + dx;
+ cury := cury + dy;
+ end; (* while *)
+
+ if ((code >= 0) and
+ (((xr - curx) >= rho) and (abs(yt - cury) >= rho))) then
+ begin
+ iputchar (code);
+ end;
+ end; (* not null line *)
+ end;
+
+
+{-------------------------------------------------------}
+procedure tylBrokenLine (x0, y0, x1, y1, fontindex : integer;
+ line_type: LineStyle);
+label 10;
+var useXaxis: boolean;
+ a0, b0, a1, b1: integer;
+ a2, a3, b2, b3, K, gap, dot, dash: integer;
+ s, z, fit: real;
+ J, frame, T: integer;
+ Dotgap, Dotdot: integer;
+ Dashgap, Dashdash: integer;
+ DDotgap, DDotdot, DDotdash: integer;
+ a1ma0 : integer;
+
+{.........................................................}
+ procedure spread (lt : LineStyle; extra, T : integer);
+ label 20;
+ begin
+ if (T = 0) then
+ begin { only partial frame fits }
+ if (useXaxis) then
+ diagonal (a0, b0, a1, b1, fontindex)
+ else
+ diagonal (b0, a0, b1, a1, fontindex);
+ goto 20; { exit }
+ end;
+ J := 0;
+ s := float (b1 - b0)/float(a1 - a0);
+ z := float (extra)/float(T);
+ case lt of
+ dotted : repeat a2 := a0 + J*frame;
+ if (extra > 0) then a2 := a2 + round(J*z);
+ a3 := a2 + dot;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ dashed : repeat a2 := a0 + J*frame;
+ if (extra > 0) then a2 := a2 + round(J*z);
+ a3 := a2 + dash;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ dotdash : repeat a2 := a0 + J*frame;
+ if (extra > 0) then a2 := a2 + round(J*z);
+ a3 := a2 + dash;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ a2 := a3 + gap;
+ if (extra > 0) then a2 := a2 + round(z*0.5);
+ a3 := a2 + dot;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ end;
+ 20:
+ end; { spread }
+
+{......................................................}
+ procedure balance (lt : LineStyle; extra, T : integer);
+ label 30;
+ begin
+ if (T = 0) then
+ begin { only partial frame fits }
+ if (useXaxis) then
+ diagonal (a0, b0, a1, b1, fontindex)
+ else
+ diagonal (b0, a0, b1, a1, fontindex);
+ goto 30; { exit }
+ end;
+ J := 0;
+ s := float(b1 - b0)/float(a1 - a0);
+ case lt of
+ dashed : repeat a2 := a0 + J*frame - extra div 2;
+ a3 := a2 + dash;
+ if (J = 0) then a2 := a0;
+ if (a3 > a1) then a3 := a1;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ dotdash : repeat a2 := a0 + J*frame - extra div 2;
+ a3 := a2 + dash;
+ if (J = 0) then a2 := a0;
+ if (a3 > a1) then a3 := a1;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ a2 := a3 + gap;
+ a3 := a2 + dot;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ end;
+ 30:
+ end; { balance }
+
+{......................................................}
+ function project (I : integer) : integer;
+ var K : integer; { gives the projection of lengths onto axes }
+ begin
+ K := round(I*float(abs(a1-a0))/s);
+ if K = 0 then K := 1;
+ project := K;
+ end;
+{......................................................}
+ procedure setlengths (findex :integer);
+ (* sets the "optimal" sizes for textured lines *)
+ var penrad : integer;
+ siz : VThickness;
+ begin
+ penrad := VFontTable[findex]^.PenSize;
+ siz := VFontTable[findex]^.psize;
+
+ Dotdot := penrad div siz; Dotgap := 6 * penrad;
+ Dashdash := 6 * penrad; Dashgap := 6 * penrad;
+ DDotdash := 6 * penrad; DDotgap := 4 * penrad;
+ DDotdot := penrad div siz;
+ end;
+{........................................}
+procedure setframesize;
+begin
+ case line_type of { length of frame depends on type of broken line }
+ solid : frame := 0;
+ dotted : frame := gap + dot;
+ dashed : frame := gap + dash;
+ dotdash : frame := 2*gap + dot + dash;
+ end;
+end;
+
+{.................................................}
+begin (* TylBrokenLine *)
+if ((x0 = x1) and (y0 = y1)) then
+ begin
+ diagonal (x0, y0, x1, y1, fontindex); { null line }
+ goto 10;
+ end;
+
+ setlengths (fontindex);
+
+if (abs (y1-y0) > abs(x1-x0)) then { longer axis is used as base }
+ begin
+ useXaxis := false;
+ a0 := y0; b0 := x0;
+ a1 := y1; b1 := x1;
+ end
+else
+ begin
+ useXaxis := true;
+ a0 := x0; b0 := y0;
+ a1 := x1; b1 := y1;
+ end;
+{ the distance between a0 and a1 is now greater than that between b0 and b1. }
+
+{ redefine distances as integral units along axes }
+ s := distance (float(a0),float(b0),float(a1),float(b1));
+
+ case line_type of
+ solid: ;
+ dotted:
+ begin
+ gap := project(Dotgap);
+ dot := project(Dotdot);
+ end;
+ dashed:
+ begin
+ gap := project(Dashgap);
+ dash := project(Dashdash);
+ end;
+ dotdash:
+ begin
+ gap := project(DDotgap);
+ dot := project(DDotdot);
+ dash := project(DDotdash);
+ end;
+ end;
+
+ { ensure direction of line is from smaller to
+ larger along the longer axis }
+ if (a0 > a1) then
+ begin
+ J := a0; a0 := a1; a1 := J;
+ J := b0; b0 := b1; b1 := J;
+ end;
+
+ setframesize;
+
+ a1ma0 := a1 - a0;
+
+ { fit is the number of frames that fit in line }
+ if (frame <> 0) then
+ begin
+ fit := (float(a1ma0) / float(frame));
+ end
+ else
+ fit := 1.0;
+
+ if (fit >= 1.0) then
+ T := round (fit)
+ else
+ begin
+ (* change frame elements (dot, dash, gap) since frame is too large *)
+ case line_type of
+ dotted : begin
+ gap := gap - (frame - a1ma0);
+ if (gap < dot) then
+ begin
+ goto 10; (* exit *)
+ end;
+ setframesize;
+ end;
+
+ dashed,
+ dotdash : begin
+ (* idea:decrease gap; if too small then shrink dash and refigure gap*)
+ if ((frame - a1ma0) > (gap div 2)) then
+ begin
+ dash := round (dash * fit * 0.80);
+ gap := round (gap * fit);
+ setframesize;
+ end;
+ gap := gap - (frame - a1ma0);
+ if (line_type = dotdash) then
+ gap := gap div 2;
+ if (gap < dot) then
+ begin
+ goto 10; (* exit *)
+ end;
+ setframesize;
+ end;
+ end; (* case *)
+ T := 1; (* NOW it will fit *)
+ end; (* else *)
+
+
+ case line_type of
+ solid : begin
+ if (useXaxis) then
+ diagonal (a0, b0, a1, b1, fontindex)
+ else
+ diagonal (b0, a0, b1, a1, fontindex);
+ end;
+
+ dotted : begin { dotted lines begin and end on a dot }
+ if ((T*frame + dot) = a1ma0) then
+ spread(dotted, 0, T)
+ else if ((T*frame + dot) > a1ma0) then
+ begin
+{ gap := gap - ((T*frame+dot)-a1ma0);
+{}
+ spread(dotted, a1ma0 - T*frame - dot, T);
+
+{ spread(dotted, a1ma0 - (T-1)*frame - dot, T-1);
+{}
+ end
+ else
+ spread(dotted, a1ma0 - T*frame - dot, T);
+ end;
+
+ dashed : begin
+ { dashed lines begin and end on dash :
+ the beginning and ending dashes are at least half
+ the dash length long. }
+ if ((T*frame + dash) = a1ma0) then
+ spread(dashed, 0, T)
+ else if ((T*frame + dash) > a1ma0) then
+ balance(dashed, T*frame + dash - a1ma0, T)
+ else spread(dashed, a1ma0 - T*frame - dash, T);
+ end;
+
+ dotdash : begin { if ending on a dash then beginning and ending
+ dashes are half the dash length long - final
+ dots are full dot length }
+ if ((T*frame + dash) = a1ma0) then
+ spread(dotdash, 0, T)
+ else if ((T*frame + dash + gap + dot) = a1ma0) then
+ spread(dotdash, 0, T)
+ else if ((T*frame + dash) > a1ma0) then
+ balance(dotdash, T*frame + dash - a1ma0, T)
+ else if ((T*frame + dash + gap + dot) > a1ma0) then
+ spread(dotdash, a1ma0 - T*frame - dash, T)
+ else spread(dotdash, a1ma0 - T*frame - dash - gap - dot, T);
+ end;
+ end;
+10:
+ end;
+
+
+
+{-------------------------------------------------------}
+procedure clampthickness (var thic : VThickness);
+ begin
+ (* #### this is just a simple clamp
+ really should be something like:
+ while not (thic in set_of_appropriate_thicknesses) do
+ modify thic and try again
+ *)
+ if (thic <= LoVThick ) then
+ thic := LoVThick + 1;
+ while ((not (thic in [1,2,3,4,5,6,7,8,9,10,11,12])) and
+ (thic <= HiVThick)) do
+ thic := thic + 1;
+
+ if (thic > HiVThick) then
+ thic := HiVThick;
+ end;
+
+{----------------------------------------------------------}
+procedure slurclamp (var thic : ThickAryType; totpts : integer);
+ (* this post-clamps the sampled thicknesses calculated over the
+ whole of the spline *)
+
+ var i : integer;
+ oneseventh : integer;
+ middle : integer;
+ startval, endval: integer;
+ deltaval, val, incrval, alpha, alphaincr: real;
+
+ begin
+ { $$ NOTE:: How does the ttspline interpolation of thicknesses
+ compare to the below results?? Can we avoid having it done
+ elsewhere and concentrate on it here?? }
+
+ oneseventh := round (totpts / 7.0);
+ for i := 1 to oneseventh do
+ begin
+ thic[i] := thic[1];
+ end;
+ for i := 6*oneseventh to totpts do
+ begin
+ thic[i] := thic[totpts];
+ end;
+
+ middle := round (totpts / 2.0);
+ for i := 3*oneseventh to 4*oneseventh do
+ begin
+ thic[i] := thic[middle];
+ end;
+
+ startval := thic[oneseventh - 1];
+ endval := thic[3*oneseventh + 1];
+ deltaval := (2*(endval - startval))/(2*oneseventh);
+ alphaincr := PI / (2 * oneseventh + 1);
+ alpha := PI;
+ val := float(startval);
+ for i := oneseventh to (3*oneseventh - 1) do
+ begin (* interpolate: ease in from minthick to middlethickness *)
+ alpha := alpha + alphaincr;
+ incrval := ((cos (alpha) + 1.0) / 2.0) * deltaval;
+ val := val + incrval;
+ thic[i] := round(val);
+ end;
+
+ startval := thic[4*oneseventh - 1];
+ endval := thic[6*oneseventh + 1];
+ deltaval := (2*(endval - startval))/(2*oneseventh);
+ alphaincr := PI / (2 * oneseventh + 1);
+ alpha := 0.0;
+ val := float(startval);
+ for i := (4*oneseventh + 1) to 6*oneseventh do
+ begin (* ease out from middle thickness to min thick at far end *)
+ alpha := alpha + alphaincr;
+ incrval := ((cos (alpha) + 1.0) / 2.0) * deltaval;
+ val := val + incrval;
+ thic[i] := round(val);
+ end;
+ end;
+
+{-------------------------------------------------------}
+procedure layline (xl, yb, xr, yt, fontindex : integer;
+ pattern : LineStyle; useVecfontOnly : boolean);
+ var t: integer;
+ begin
+ if (xr < xl) then
+ begin
+ t := xr; xr := xl; xl := t;
+ t := yb; yb := yt; yt := t;
+ end;
+
+ isetfont (VFontTable[fontindex]^.DVIFontNum);
+
+ (* we may want to require using a vector font only,
+ instead of a combination of vectors and TeX-rules.
+ It may look better this way.
+ *)
+ if (useVecfontOnly) then
+ begin
+ tylBrokenLine (xl, yb, xr, yt, fontindex, pattern);
+ end
+ else
+ begin (* be smart about the lines *)
+ if ((xl = xr) and (yb = yt)) or
+ ((xl <> xr) and (yb <> yt)) then (* Null or diagonal lines *)
+ begin
+ if (pattern = solid) then
+ diagonal (xl, yb, xr, yt, fontindex)
+ else
+ tylBrokenLine (xl, yb, xr, yt, fontindex, pattern);
+ end
+ else
+ begin
+{ if (pattern = solid) then
+ hvline (xl, yb, xr, yt, fontindex) (* make use of rules *)
+ else
+USENORULES }
+ tylBrokenLine (xl, yb, xr, yt, fontindex, pattern);
+ end
+ end;
+
+ end;
+
+
+
+{------------------------------------------------------}
+procedure layAspline (thetype : SplineKind;
+ isclosed : boolean;
+ isanArc: boolean;
+ domarks : integer;
+ var cpts : ControlPoints;
+ numpts : integer;
+ thick: VThickness;
+ vkind : VectKind;
+ patt : LineStyle);
+ const DontDoThicks = false;
+ VectorsOnly = true;
+ var pointList: SplineSegments;
+ i, xs, ys : integer;
+ tt1, tt2 : ThickAryType;
+ F: VecIndex;
+ begin
+
+ clampthickness (thick);
+ for i := 0 to (numpts + 3) do
+ tt1[i] := thick;
+
+ (* do any marks if necessary to show the control points *)
+ if (domarks > 0) then
+ begin
+ F := GetVectFont (domarks, VKCirc);
+ isetfont (VFontTable[F]^.DVIFontNum);
+ for i := 1 to numpts do
+ begin
+ Tyldot (cpts[i,1], cpts[i,2]);
+ end;
+ end;
+
+ drawSpline (thetype, isclosed, isanArc, patt,
+ numpts, cpts, pointList, DontDoThicks, tt1, tt2);
+
+
+ F := GetVectFont (thick, vkind);
+ xs := pointList[1, 1];
+ ys := pointList[1, 2];
+
+ for i := 2 to lastPoint do
+ begin
+ layline (xs, ys, pointList[i, 1], pointList[i, 2], F, patt, VectorsOnly);
+ xs := pointList[i, 1];
+ ys := pointList[i, 2];
+ end;
+ if (isclosed) then (* complete the motion *)
+ layline (pointList[lastPoint,1], pointList[lastPoint,2],
+ pointList[1,1], pointList[1,2], F, patt, VectorsOnly);
+ end;
+
+
+{-----------------------------------------------------}
+procedure layNspline (thetype : SplineKind;
+ isclosed : boolean;
+ isitaslur : boolean;
+ domarks : integer;
+ var cpts : ControlPoints;
+ numpts : integer;
+ var thickmatrix : ThickAryType;
+ vkind : VectKind;
+ patt : LineStyle);
+ const NotAnArc = false;
+ DoThicksToo = true;
+ VectorsOnly = true;
+ var pointList: SplineSegments;
+ i, xs, ys : integer;
+ ts : VThickness;
+ tt : ThickAryType;
+ F : VecIndex;
+ begin
+ (* do any marks if necessary to show the control points *)
+ if (domarks > 0) then
+ begin
+ F := GetVectFont (domarks, VKCirc);
+ isetfont (VFontTable[F]^.DVIFontNum);
+ for i := 1 to numpts do
+ begin
+ Tyldot (cpts[i,1], cpts[i,2]);
+ end;
+ end;
+
+ drawSpline (thetype, isclosed, NotAnArc, patt,
+ numpts, cpts, pointList,
+ DoThicksToo, thickmatrix, tt);
+ if ((isitaslur) and (not skiptsclamp)) then
+ begin
+ slurclamp(tt, lastPoint); (* which kind of clamping to use *)
+ end;
+
+ xs := pointList[1, 1];
+ ys := pointList[1, 2];
+ ts := tt[1];
+
+ for i := 2 to lastPoint do
+ begin
+ clampthickness (ts);
+ F := GetVectFont (ts, vkind);
+ layline (xs, ys, pointList[i, 1], pointList[i, 2], F, patt, VectorsOnly);
+ xs := pointList[i, 1];
+ ys := pointList[i, 2];
+ ts := tt[i];
+ end;
+ if (isclosed) then
+ begin
+ ts := tt[lastPoint];
+ clampthickness(ts);
+ F := GetVectFont (ts, vkind);
+ layline (pointList[lastPoint,1], pointList[lastPoint,2],
+ pointList[1,1], pointList[1,2], F, patt, VectorsOnly);
+ end;
+ end;
+
+
+
+{-----------------------------------------------------}
+procedure TylBeam (* fromx, fromy, tox, toy: ScaledPts;
+ staffsize : integer; kind : BeamKind *);
+
+ begin
+
+ end; (* TylBeam *)
+
+
+{-------------------------------------------------------}
+procedure TylLine (* xl, yb, xr, yt: ScaledPoints;
+ thickness: VThickness;
+ vec: VectKind; patt : LineStyle *);
+ const dontCare = false;
+ var findex: VecIndex;
+ begin
+ clampthickness (thickness);
+ findex := GetVectFont (thickness, vec);
+ layline (xl, yb, xr, yt, findex, patt, dontCare);
+ end;
+
+
+{-----------------------------------------------------}
+procedure TylThickThinSpline (* thetype : SplineKind; isclosed : boolean;
+ var KnotArray: ControlPoints;
+ var ThikThinAry: ThickAryType;
+ numknots: integer;
+ vec: VectKind;
+ patt : LineStyle; domarks : integer *);
+ const NotAnArc = false;
+ begin
+ layNspline (thetype, isclosed, NotAnArc, domarks, KnotArray, numknots,
+ ThikThinAry, vec, patt);
+ end;
+
+{----------------------------------------------------}
+procedure TylSpline (* thetype : SplineKind; isclosed : boolean;
+ var KnotArray: ControlPoints; numknots: integer;
+ thick: VThickness; vec: VectKind; patt : LineStyle; domarks : integer*);
+ const NotAnArc = false;
+ begin
+ layAspline (thetype, isclosed, NotAnArc, domarks, KnotArray, numknots,
+ thick, vec, patt);
+ end;
+
+{-----------------------------------------------------}
+procedure TylTieSlur (* KnotArray: ControlPoints;
+ numknots: integer;
+ minthick, maxthick: VThickness *);
+ const ItsASlur = true;
+ NotClosed = false;
+ var ourttarray : ThickAryType;
+ one7th : real;
+ val : VThickness;
+ begin
+
+ clampthickness (minthick);
+ clampthickness (maxthick);
+ if (numknots <> 5) then
+ writeln ('TieSlur needs 5 control points ');
+ one7th := 1.0/7.0;
+ val := round (one7th * (maxthick - minthick));
+ ourttarray[1] := minthick;
+ ourttarray[2] := minthick + val;
+ ourttarray[3] := maxthick;
+ ourttarray[4] := minthick + val;
+ ourttarray[5] := minthick;
+
+ layNspline (CATROM, NotClosed, ItsASlur, 0, KnotArray, numknots, ourttarray,
+ VKCirc, solid);
+ end;
+
+
+{-------------------------------------------------------}
+procedure doTylArc (* iscircle : boolean;
+ var apts : ControlPoints;
+ numknots : integer;
+ thick : VThickness;
+ vec : VectKind;
+ patt : LineStyle *);
+
+ const ItsAnArc = true;
+ begin
+
+ layAspline (BSPL, iscircle, ItsAnArc, 0, apts, numknots, thick, vec, patt);
+ end;
+
+{-----------------------------------------------------------}
+procedure TylArc (* radius : ScaledPts; centx, centy : ScaledPts;
+ firstangle, secondangle : integer;
+ thick : VThickness; vec : VectKind; patt : LineStyle *);
+ var apts : ControlPoints;
+ numknots : integer;
+ iscircle : boolean;
+ begin
+ iscircle := (firstangle = secondangle);
+ if iscircle then
+ begin
+ { maxspan := round ((360.0 / 16.0) * DEGTORAD * radius);
+ {}
+ defineCircleCpts (radius, centx, centy, apts, numknots);
+ end
+ else
+ begin
+ { maxspan := round ((abs (secondangle - firstangle) / 16.0) * DEGTORAD * radius);
+{ }
+ definearcpts (radius, centx, centy,
+ firstangle, secondangle, apts, numknots);
+ end;
+
+ doTylArc (iscircle, apts, numknots, thick, vec, patt);
+
+ end;
+
+{-----------------------------------------------------------}
+procedure TylLabel (* xpos, ypos : ScaledPts;
+ fontstyle : integer;
+ phrase : charstring;
+ phraselen : integer *);
+var findex : integer;
+ c : integer;
+ spaceover : integer;
+
+begin
+if ((fontstyle < 1) or (fontstyle > MAXLABELFONTS)) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Unexpected bad fontstyle in TylLabel: ',fontstyle:0,'?');
+ jumpout;
+ end;
+findex := GetLabFont (fontstyle);
+isetpos (xpos, ypos);
+IPUSH;
+isetfont (LFontTable[findex]^.DVIFontNum);
+spaceover := LFontTable[findex]^.spacewidth;
+for c := 1 to phraselen do
+ begin
+ if (phrase[c] <> xchr[32]) then
+ begin
+ cmd1byte (SET1);
+ cmd1byte (xord[ phrase[ c ]]);
+ end
+ else
+ begin (* move over *)
+ cmd1byte (RIGHTLEFT + 2); (* assume distance is less than 3 bytes *)
+ cmdSigned (spaceover, 3);
+ end;
+ end;
+IPOP;
+end;
+
+
+(* && start dvidvi section *)
+{-----------------------------------------------------}
+procedure initialize;
+ var
+ i: integer;
+ begin
+ for i := 0 to 31 do
+ xchr[i] := '?';
+ xchr[32] := ' ';
+ xchr[33] := '!';
+ xchr[34] := '"';
+ xchr[35] := '#';
+ xchr[36] := '$';
+ xchr[37] := '%';
+ xchr[38] := '&';
+ xchr[39] := '''';
+ xchr[40] := '(';
+ xchr[41] := ')';
+ xchr[42] := '*';
+ xchr[43] := '+';
+ xchr[44] := ',';
+ xchr[45] := '-';
+ xchr[46] := '.';
+ xchr[47] := '/';
+ xchr[48] := '0';
+ xchr[49] := '1';
+ xchr[50] := '2';
+ xchr[51] := '3';
+ xchr[52] := '4';
+ xchr[53] := '5';
+ xchr[54] := '6';
+ xchr[55] := '7';
+ xchr[56] := '8';
+ xchr[57] := '9';
+ xchr[58] := ':';
+ xchr[59] := ';';
+ xchr[60] := '<';
+ xchr[61] := '=';
+ xchr[62] := '>';
+ xchr[63] := '?';
+ xchr[64] := '@';
+ xchr[65] := 'A';
+ xchr[66] := 'B';
+ xchr[67] := 'C';
+ xchr[68] := 'D';
+ xchr[69] := 'E';
+ xchr[70] := 'F';
+ xchr[71] := 'G';
+ xchr[72] := 'H';
+ xchr[73] := 'I';
+ xchr[74] := 'J';
+ xchr[75] := 'K';
+ xchr[76] := 'L';
+ xchr[77] := 'M';
+ xchr[78] := 'N';
+ xchr[79] := 'O';
+ xchr[80] := 'P';
+ xchr[81] := 'Q';
+ xchr[82] := 'R';
+ xchr[83] := 'S';
+ xchr[84] := 'T';
+ xchr[85] := 'U';
+ xchr[86] := 'V';
+ xchr[87] := 'W';
+ xchr[88] := 'X';
+ xchr[89] := 'Y';
+ xchr[90] := 'Z';
+ xchr[91] := '[';
+ xchr[92] := '\';
+ xchr[93] := ']';
+ xchr[94] := '^';
+ xchr[95] := '_';
+ xchr[96] := '`';
+ xchr[97] := 'a';
+ xchr[98] := 'b';
+ xchr[99] := 'c';
+ xchr[100] := 'd';
+ xchr[101] := 'e';
+ xchr[102] := 'f';
+ xchr[103] := 'g';
+ xchr[104] := 'h';
+ xchr[105] := 'i';
+ xchr[106] := 'j';
+ xchr[107] := 'k';
+ xchr[108] := 'l';
+ xchr[109] := 'm';
+ xchr[110] := 'n';
+ xchr[111] := 'o';
+ xchr[112] := 'p';
+ xchr[113] := 'q';
+ xchr[114] := 'r';
+ xchr[115] := 's';
+ xchr[116] := 't';
+ xchr[117] := 'u';
+ xchr[118] := 'v';
+ xchr[119] := 'w';
+ xchr[120] := 'x';
+ xchr[121] := 'y';
+ xchr[122] := 'z';
+ xchr[123] := '{';
+ xchr[124] := '|';
+ xchr[125] := '}';
+ xchr[126] := '~';
+ for i := 127 to 255 do
+ xchr[i] := '?';
+ for i := 0 to 127 do
+ xord[chr(i)] := 32;
+ for i := 32 to 126 do
+ xord[xchr[i]] := i;
+ initallspline;
+ initVnMnLtables;
+ multifigure := 0;
+ pgfigurenum := 0;
+ TotBytesWritten := 0;
+ ourq := 0;
+ specstart := 0;
+ currpagenum := 0;
+ newbackptr := (-1);
+ oldbackptr := (-1);
+ ourfontnum := (-1); (* undefined *)
+ origTexfont := (-1);
+ ourpushdepth := 0;
+ FTBDs := 0;
+ InitDVIBuf;
+ nf := 0;
+ inpostamble := false;
+ didnewfonts := false;
+ maxpages := 10000;
+ sysdependent;
+ s := 0;
+ skiptsclamp := false;
+ ErrorOccurred := false;
+ end;
+
+
+
+procedure inputln (var buffer : strng);
+var
+ k: 0..ARRLIMIT;
+begin
+
+ flush(output);
+
+ if eoln(input) then
+ readln(input);
+ k := 1;
+ while (k < ARRLIMIT) and (not eoln(input)) do
+ begin
+ buffer.str[k] := input^;
+ k := k + 1;
+ get(input)
+ end;
+ buffer.str[k] := ' ';
+ buffer.len := k - 1;
+end;
+
+function revindex (st : strng; let : char) : integer;
+label 2;
+var posit,i : integer;
+begin
+ posit := 0;
+ for i := st.len downto 1 do
+ begin
+ if (st.str[i] = let) then
+ begin
+ posit := i;
+ goto 2;
+ end;
+ end;
+2:
+ revindex := posit;
+end;
+
+
+procedure stripblanks (var st : strng);
+var i,j,k: integer;
+ temp : charstring;
+ begin
+ j := 1;
+ i := 1;
+ while ((i <= st.len) and
+ ((st.str[i] = ' ') or (st.str[i] = xchr[HT]))) do
+ begin
+ j := j + 1;
+ i := i + 1;
+ end;
+
+(* j now points to the first non-blank character in st.str *)
+ i := 1;
+ for k := j to st.len do
+ begin
+ if ((st.str[k] <> ' ') and (st.str[k] <> xchr[HT])) then
+ begin
+ temp[i] := st.str[k];
+ i := i + 1;
+ end;
+ end;
+ (* now copy it back *)
+ if (i <> 1) then
+ begin (* there was blankspace *)
+ for k := 1 to (i- 1) do
+ st.str[k] := temp[k];
+ st.len := i - 1;
+
+ st.str[i] := chr(32); (* end of string *)
+
+ end;
+ end;
+
+
+{-----------------------------------------------------}
+procedure AskandOpenFiles;
+var isok : boolean;
+ i : integer;
+ rp : integer;
+ tempname : strng;
+begin
+ isok := false;
+ while (not isok) do
+ begin
+ write (' DVI-input File Name: ');
+ inputln (dvifname);
+ stripblanks (dvifname);
+
+ rp := revindex (dvifname, '.');
+ if (rp = 0) then
+ begin
+ (* add a ".dvi" extension *)
+ i := dvifname.len;
+ dvifname.str[i + 1] := '.';
+ dvifname.str[i + 2] := 'd';
+ dvifname.str[i + 3] := 'v';
+ dvifname.str[i + 4] := 'i';
+ dvifname.len := i + 4;
+ end;
+ if (not opendvifile) then
+ begin
+ isok := false; (* it is empty *)
+ writestrng(dvifname,false);
+ writeln(': Empty File?? Try another name.');
+ end
+ else
+ isok := true;
+ end; (* while *)
+
+ (* and ask for the name of the output file *)
+ (* default it to be the same prefix, but with a ".tyl" suffix *)
+ strcopy (dvifname.str, outname.str, dvifname.len);
+ outname.len := dvifname.len;
+ rp := revindex (outname, '.');
+ i := rp - 1;
+ outname.str[i + 1] := '.';
+ outname.str[i + 2] := 't';
+ outname.str[i + 3] := 'y';
+ outname.str[i + 4] := 'l';
+ outname.len := i + 4;
+
+ writeln (' DVI-output File Name :');
+ write('(different than input name)[default of ');
+ writestrng (outname,false);
+ write(']');
+ inputln (tempname);
+ if (tempname.len > 1) then
+ begin (* a filename was typed in *)
+
+ strcopy (tempname.str, outname.str, tempname.len);
+ end;
+
+ openoutputfile;
+
+ strcopy (dvifname.str, logfilnam.str, dvifname.len);
+ logfilnam.len := dvifname.len;
+ rp := revindex (logfilnam, '.');
+ (* add a ".tlog" extension *)
+ i := rp - 1;
+ logfilnam.str[i + 1] := '.';
+ logfilnam.str[i + 2] := 't';
+ logfilnam.str[i + 3] := 'l';
+ logfilnam.str[i + 4] := 'o';
+ logfilnam.str[i + 5] := 'g';
+ logfilnam.len := i + 5;
+
+ openlogfile;
+end;
+
+
+{-----------------------------------------------------}
+ function inTFM (z: integer): boolean;
+ label
+ 9997, 9998, 9999;
+ var
+ k: integer;
+ lh: integer;
+ nw: integer;
+ alpha, beta: integer;
+ begin
+ readtfmword;
+ lh := b2 * 256 + b3;
+ readtfmword;
+ font[nf].bc := b0 * 256 + b1;
+ font[nf].ec := b2 * 256 + b3;
+ if (font[nf].ec < font[nf].bc) then
+ font[nf].bc := font[nf].ec + 1;
+ readtfmword;
+ nw := b0 * 256 + b1;
+ if ((nw = 0) or (nw > 256)) then
+ goto 9997;
+ for k := 1 to 3 + lh do
+ begin
+ if eof(tfmfile) then
+ goto 9997;
+ readtfmword;
+ if (k = 4) then
+ if (b0 < 128) then
+ tfmchecksum := ((b0 * 256 + b1) * 256 + b2) * 256 + b3
+ else
+ tfmchecksum := (((b0 - 256) * 256 + b1) * 256 + b2) * 256 + b3
+ end;
+
+ for k := 0 to (font[nf].ec - font[nf].bc) do
+ begin
+ readtfmword;
+ if (b0 > nw) then
+ goto 9997;
+ font[nf].widths[k] := b0
+ end;
+ alpha := 16 * z;
+ beta := 16;
+ while z >= TWO23 do
+ begin
+ z := z div 2;
+ beta := beta div 2
+ end;
+ for k := 0 to nw - 1 do
+ begin
+ readtfmword;
+ inwidth[k] := (((b3 * z) div 256 + b2 * z) div 256 + b1 * z) div beta;
+ if b0 > 0 then
+ if b0 < 255 then
+ goto 9997
+ else
+ inwidth[k] := inwidth[k] - alpha;
+ end;
+ if inwidth[0] <> 0 then
+ goto 9997;
+ with font[nf] do
+ begin
+ for k := 0 to (ec - bc) do
+ if widths[k] = 0 then
+ begin
+ widths[k + bc] := TWO31;
+{ pixelwidths[k + bc] := 0;}
+ end
+ else
+ begin
+ widths[k + bc] := inwidth[widths[k]];
+{ pixelwidths[k + bc] := round(conv * widths[k]);}
+ end;
+ end; (* with *)
+ inTFM := true;
+ goto 9999;
+9997:
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, TFM file is bad');
+
+9998:
+ inTFM := false;
+9999:
+
+ end;
+
+
+
+{-----------------------------------------------------}
+procedure Fastdefinefont (fn: integer);
+var p, k: integer;
+ n, waste: integer;
+ c, q, d: integer;
+
+begin { Fastdefinefont }
+ c := Dsign4byte;
+ q := Dsign4byte;
+ d := Dsign4byte;
+ p := Dget1byte;
+ n := Dget1byte;
+ for k := 1 to (p + n) do
+ waste := Dget1byte;
+end; { Fastdefinefont }
+
+
+{-----------------------------------------------------}
+ procedure definefont (e: integer);
+ var
+ f: 0..MAXFONTS;
+ p, k: integer;
+ n: integer;
+ c, q, d: integer;
+ r: integer;
+ begin
+ if (nf = MAXFONTS) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'TeXtyl capacity exceeded (max fonts=', MAXFONTS: 1, ')!');
+ writeln('TeXtyl capacity exceeded (max fonts=', MAXFONTS: 1, ')!');
+ jumpout
+ end;
+ font[nf].num := e;
+ f := 0;
+ while font[f].num <> e do (* find first occurrence *)
+ f := f + 1;
+ c := Dsign4byte;
+ font[nf].checksum := c;
+ q := Dsign4byte;
+ font[nf].scaledsize := q;
+ d := Dsign4byte;
+ font[nf].designsize := d;
+ p := Dget1byte;
+ n := Dget1byte;
+ font[nf].name.len := p + n;
+ for k := 1 to (p + n) do
+ font[nf].name.str[k] := Dget1byte;
+
+ if (f = nf) then
+ begin (* f = nf *)
+ for k := 1 to AREALENGTH do
+ tfmname.str[k] := ' ';
+
+ r := 0;
+
+ for k := 1 to font[nf].name.len do
+ begin
+ r := r + 1;
+ tfmname.str[r] := xchr[font[nf].name.str[k]]
+ end;
+ tfmname.str[r + 1] := '.';
+ tfmname.str[r + 2] := 't';
+ tfmname.str[r + 3] := 'f';
+ tfmname.str[r + 4] := 'm';
+
+ tfmname.str[r + 5] := chr(32);
+
+ tfmname.len := r + 4;
+
+ if (not opentfmfile) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, TFM file can''t be opened!');
+ writestrng(tfmname, false);
+ writeln(' cannot be opened. Aborting.');
+ jumpout;
+ end
+ else
+ begin
+ if (q <= 0) or (q >= TWO27) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, bad scale (', q: 1, ')!');
+ end
+ else if (d <= 0) or (d >= TWO27) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, bad design size (', d: 1, ')!');
+ end
+ else
+ if inTFM(q) then
+ begin (* intfm *)
+ font[nf].space := q div 6;
+ if (c <> 0) and (tfmchecksum <> 0) and (c <> tfmchecksum) then
+ begin
+ writeln(logfile,'Problem in fig#',pgfigurenum:0,' on page ',currpagenum:0);
+ writestrng(tfmname,true);
+ writeln(logfile,'---beware: check sums do not agree!');
+ writeln(logfile,' (', c: 1, ' vs. ', tfmchecksum: 1, ')');
+ end;
+ d := round(100.0 * conv * q / (trueconv * d));
+ nf := nf + 1;
+ font[nf].space := 0;
+ end (* intfm *)
+ end;
+ end;
+ end;
+
+{-----------------------------------------------------}
+ function firstpar (o: OctByt): integer;
+ var fpar : integer;
+ begin
+ case (o) of
+ 0, 1, 2, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125,
+ 126, 127:
+ fpar := o - 0;
+ 128, 133, 235, 239, 243:
+ fpar := Dget1byte;
+ 129, 134, 236, 240, 244:
+ fpar := Dget2byte;
+ 130, 135, 237, 241, 245:
+ fpar := Dget3byte;
+ 143, 148, 153, 157, 162, 167:
+ fpar := Dsign1byte;
+ 144, 149, 154, 158, 163, 168:
+ fpar := Dsign2byte;
+ 145, 150, 155, 159, 164, 169:
+ fpar := Dsign3byte;
+ 131, 132, 136, 137, 146, 151, 156,
+ 160, 165, 170, 238, 242, 246:
+ fpar := Dsign4byte;
+ 138, 139, 140, 141, 142, 247, 248,
+ 249, 250, 251, 252, 253, 254, 255:
+ fpar := 0;
+ 147:
+ fpar := w;
+ 152:
+ fpar := x;
+ 161:
+ fpar := y;
+ 166:
+ fpar := z;
+ 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184,
+ 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226,
+ 227, 228, 229, 230, 231, 232, 233,
+ 234:
+ fpar := o - 171
+ end;
+ firstpar := fpar;
+ end;
+
+{-----------------------------------------------------}
+ function specialcases (o: OctByt; p: integer): boolean;
+ label
+ 46, 44, 30, 9998;
+ var
+ pure: boolean;
+
+ begin
+ pure := true;
+ if ((o < 157) or (o > 249)) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile, 'undefined command ', o: 1, '!');
+ goto 30;
+ end;
+ case (o) of
+ 157, 158, 159, 160:
+ begin
+ goto 44;
+ end;
+ 161, 162, 163, 164, 165:
+ begin
+ y := p;
+ goto 44;
+ end;
+ 166, 167, 168, 169, 170:
+ begin
+ z := p;
+ goto 44;
+ end;
+ 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184,
+ 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226,
+ 227, 228, 229, 230, 231, 232, 233,
+ 234:
+ begin
+ goto 46;
+ end;
+ 235, 236, 237, 238:
+ begin
+ goto 46;
+ end;
+ 243, 244, 245, 246:
+ begin
+ definefont(p);
+ goto 30;
+ end;
+
+ 239, 240, 241, 242:
+ begin (* =========specials============= *)
+ mainhandlespecials (o, p);
+ goto 30;
+ end;
+ 247:
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'preamble command within a page!');
+ goto 9998;
+ end;
+ 248, 249:
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'postamble command within a page!');
+ goto 9998;
+ end;
+ (* others:
+ begin
+ write(' ', 'undefined command ', o: 1, '!');
+ goto 30;
+ end
+ *)
+ end;
+44: (* label *)
+ if (v > 0) and (p > 0) then
+ if (v > TWO31 - p) then
+ begin
+ p := TWO31 - v
+ end;
+ if (v < 0) and (p < 0) then
+ if ((-v) > (p + TWO31)) then
+ begin
+ p := -v - TWO31
+ end;
+
+ v := v + p;
+
+ goto 30;
+46: (* label *)
+ font[nf].num := p;
+ curfont := 0;
+ while font[curfont].num <> p do
+ curfont := curfont + 1;
+ goto 30 ;
+9998:
+ pure := false;
+30:
+ specialcases := pure;
+ end;
+
+
+{-----------------------------------------------------}
+ function dopage : boolean;
+ label
+ 41, 42, 43, 30, 9998, 9999;
+ var
+ o: OctByt;
+ p, q: integer;
+
+ begin
+ curfont := nf;
+ s := 0;
+ h := 0;
+ v := 0;
+ w := 0;
+ x := 0;
+ y := 0;
+ z := 0;
+
+ ourxpos := 0;
+ ourypos := 0;
+ ourfontnum := (-1);
+ while true do
+ begin
+ o := Dget1byte;
+ p := firstpar(o);
+ if eof(dvifile) then begin
+ writeln(logfile, 'Bad DVI file: ', 'the file ended prematurely', '!');
+ writeln('Bad DVI file: ', 'the file ended prematurely', '!');
+ jumpout
+ end;
+ if o <= 131 then
+ begin
+ goto 41;
+ end
+ else
+ begin
+ if (o > 156) then
+ begin
+ if specialcases(o, p) then
+ goto 30
+ else
+ goto 9998;
+ end;
+
+ case (o) of
+ 133, 134, 135, 136:
+ begin
+ goto 41;
+ end;
+ 132, 137:
+ begin
+ goto 42
+ end;
+ 138:
+ begin
+ goto 30;
+ end;
+ 139:
+ begin (* BOP *)
+ complain (ERRREALBAD);
+ writeln(logfile, 'bop occurred before eop');
+ goto 9998; (* Fail *)
+ end;
+ 140:
+ begin (* EOP *)
+ if (s <> 0) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile, 'stack not empty at end of page (level ', s: 1, ')!');
+ end;
+ if (multifigure <> 0) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Some figure definition not closed at end of page ', currpagenum:0,'!');
+ end;
+
+ write (currpagenum:0,']');
+ write (logfile,currpagenum:0,']');
+ if ((currpagenum mod 10) = 0) then
+ writeln;
+ dopage := true;
+ goto 9999;
+ end;
+ 141:
+ begin (* PUSH *)
+ with stack[s] do
+ begin
+ sh := h;
+ sv := v;
+ sw := w;
+ sx := x;
+ sy := y;
+ sz := z;
+ end; (* with *)
+ s := s + 1;
+ goto 30;
+ end;
+ 142:
+ begin (* POP *)
+ if s = 0 then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'illegal pop at level zero!');
+ end
+ else
+ begin
+ s := s - 1;
+ with stack[s] do
+ begin
+ h := sh;
+ v := sv;
+ w := sw;
+ x := sx;
+ y := sy;
+ z := sz;
+ end;
+ end;
+ goto 30;
+ end;
+ 143, 144, 145, 146:
+ begin
+ q := p;
+ goto 43
+ end;
+ 147, 148, 149, 150, 151:
+ begin
+ w := p;
+ q := p;
+ goto 43
+ end;
+ 152, 153, 154, 155, 156:
+ begin
+ x := p;
+ q := p;
+ goto 43
+ end;
+ (* others:
+ if specialcases(o, p) then
+ goto 30
+ else
+ goto 9998;
+ *)
+ end; (* case *)
+ end; (* else *)
+41: (* finish cmd to set/put a char *)
+ if p < 0 then
+ p := 255 - (-1 - p) mod 256
+ else if p >= 256 then
+ p := p mod 256;
+ if (p < font[curfont].bc) or (p > font[curfont].ec) then
+ q := TWO31
+ else
+ q := font[curfont].widths[p];
+ if (q = TWO31) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Character ', p:1,' invalid in font #',curfont:0);
+ end;
+ if o >= 133 then
+ goto 30;
+ if q = TWO31 then
+ q := 0;
+ goto 43;
+
+42: (* finish cmd to set/put rule *)
+ q := Dsign4byte;
+ if o = 137 then
+ goto 30;
+ goto 43 ;
+
+43: (*finish cmd that sets h += q *)
+ if (h > 0) and (q > 0) then
+ if (h > (TWO31 - q)) then
+ begin
+ q := TWO31 - h
+ end;
+ if (h < 0) and (q < 0) then
+ if ((-h) > (q + TWO31)) then
+ begin
+ q := (-h) - TWO31
+ end;
+
+ h := h + q;
+30:
+ end;
+9998:
+ dopage := false;
+9999:
+
+ end;
+
+{-----------------------------------------------------}
+ procedure skippages;
+ label
+ 9999;
+ var
+ p: integer;
+ k: 0..255;
+ downthedrain: integer;
+ begin
+ while true do
+ begin
+ if eof(dvifile) then
+ begin
+ writeln(logfile, 'Bad DVI file: ', 'the file ended prematurely', '!');
+ write(' ', 'Bad DVI file: ', 'the file ended prematurely', '!');
+ jumpout
+ end;
+ k := Dget1byte;
+ p := firstpar(k);
+ case (k) of
+ 139:
+ begin (* BOP *)
+ newbackptr := DVIMark + TotBytesWritten - 1;
+ currpagenum := Dsign4byte; (* count[0] *)
+ for k := 1 to 9 do
+ waste := Dsign4byte; (* WAS count[k] := *)
+ downthedrain := Dsign4byte;
+ BackupInBuf (4);
+ cmdSigned (oldbackptr, 4);
+ oldbackptr := newbackptr;
+ write(' [');
+ write(logfile,' [');
+ goto 9999;
+ end;
+ 132, 137: (* RULE *)
+ downthedrain := Dsign4byte;
+ 243, 244, 245, 246:
+ begin
+ definefont(p);
+ end;
+ 239, 240, 241, 242: (* specials *)
+ begin
+ mainhandlespecials (k, p);
+ end;
+ 248:
+ begin (* POST *)
+ ourq := DVIMark + TotBytesWritten - 1;
+ inpostamble := true;
+ goto 9999
+ end;
+ (* others:
+ null
+ *)
+ end
+ end;
+ 9999:
+
+ end;
+
+{-----------------------------------------------------}
+ procedure readpostamble;
+ var
+ k: integer;
+ p, q, m: integer;
+ indx : integer;
+ begin
+ if (Dsign4byte <> numerator) then
+ writeln(logfile,'Postamble',' numerator',' doesn''t match the preamble!');
+ if (Dsign4byte <> denominator) then
+ writeln(logfile,'Postamble',' denominator',' doesn''t match the preamble!');
+ if (Dsign4byte <> mag) then
+ begin
+ writeln(logfile,'Postamble',' magnification',' doesn''t match the preamble!');
+ end;
+ maxv := Dsign4byte;
+ maxh := Dsign4byte;
+ maxs := Dget2byte;
+ BackupInBuf (2);
+ cmd2byte (maxs + 2); (* pretend the stack depth
+ * does not increase by
+ * more than two
+ *)
+
+ totalpages := Dget2byte;
+ repeat
+ k := Dget1byte;
+ if (k >= 243) and (k < 247) then
+ begin
+ p := firstpar(k);
+ Fastdefinefont(p);
+ k := 138;
+ end
+ until k <> 138; (* NOP *)
+
+ (* here, backup 1, enter all our fonts and
+ then output the 249 that we backed over *)
+ BackupInBuf (1);
+ for indx := 1 to MFontsDefd do
+ begin
+ with MFontTable[indx]^ do
+ enterfont (DVIFontNum, Cksum, DesSize,
+ DesSize, FontName );
+ end; (* for *)
+ for indx := 1 to VFontsDefd do
+ begin
+ with VFontTable[indx]^ do
+ enterfont (DVIFontNum, Cksum, DesSize,
+ DesSize, FontName);
+ end; (* for *)
+ for indx := 1 to LFontsDefd do
+ begin
+ with LFontTable[indx]^ do
+ enterfont (DVIFontNum, Cksum, DesSize,
+ DesSize, FontName);
+ end;
+ cmd1byte(249); (* post post *)
+
+ if (k <> 249) then
+ writeln(logfile,'byte ',k:0,' is not postpost!');
+ q := Dsign4byte;
+ BackupInBuf (4);
+ cmd4byte (ourq);
+ m := Dget1byte;
+ if (m <> 2) then
+ writeln(logfile,'identification should be ', 2: 1, '!');
+ m := 223;
+ while (m = 223) and not eof(dvifile) do
+ m := Dget1byte;
+ if not eof(dvifile) then
+ begin
+ writeln(' ', 'Bad DVI file: ', 'signature in should be 223', '!');
+ writeln(logfile, 'Bad DVI file: ', 'signature in should be 223', '!');
+ jumpout
+ end;
+ end;
+
+
+(* MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN *)
+begin (* main *)
+ initialize;
+ AskandOpenFiles; (* ask for filenames of inputdvi and outputfil *)
+
+ writeln(logfile, TylVersion,' for Berkeley Unix');
+
+ write(logfile,'Reading File: ');
+ writestrng(dvifname,true);
+ writeln(logfile);
+
+
+ p := Dget1byte;
+ if (p <> 247) then
+ begin
+ write(' ', 'Bad DVI file: ', 'First byte isn''t start of preamble!', '!');
+ writeln(logfile,'Bad DVI file: ', 'First byte isn''t start of preamble!', '!');
+ jumpout
+ end;
+ p := Dget1byte;
+ if (p <> 2) then
+ writeln(logfile,'identification in byte 1 should be ', 2: 1, '!');
+ numerator := Dsign4byte;
+ denominator := Dsign4byte;
+ if (numerator <= 0) then
+ begin
+ write(' ', 'Bad DVI file: ', 'numerator is ', numerator: 1, '!');
+ writeln(logfile, 'Bad DVI file: ', 'numerator is ', numerator: 1, '!');
+ jumpout
+ end;
+ if (denominator <= 0) then
+ begin
+ write(' ', 'Bad DVI file: ', 'denominator is ', denominator: 1, '!');
+ writeln(logfile, 'Bad DVI file: ', 'denominator is ', denominator: 1, '!');
+ jumpout
+ end;
+ conv := numerator / 254000.0 * (resolution / denominator);
+ mag := Dsign4byte;
+ if (mag <= 0) then
+ begin
+ write(' ', 'Bad DVI file: ', 'magnification is ', mag: 1, '!');
+ writeln(logfile, 'Bad DVI file: ', 'magnification is ', mag: 1, '!');
+ jumpout
+ end;
+ magfactor := mag / 1000.0;
+ trueconv := conv;
+ conv := trueconv * magfactor;
+ p := Dget1byte; (* the 'k' of the preamble *)
+ while p > 0 do
+ begin
+ p := p - 1;
+ waste := Dget1byte;
+ end;
+
+ skippages;
+ if not inpostamble then
+ begin
+ while (maxpages > 0) do
+ begin (* while *)
+ maxpages := maxpages - 1;
+ if (not dopage) then
+ begin
+ write(' ', 'Bad DVI file: ', 'page ended unexpectedly', '!');
+ writeln(logfile, 'Bad DVI file: ', 'page ended unexpectedly', '!');
+ jumpout
+ end;
+ (* now we are at an EOP ---end of page *)
+ (* flushout GDVIbuffer, and reset counters *)
+{ writeln('EOP: bytes used= ',GDVIBuf.TotByteLen:0); }
+ WriteDVIBuf;
+ ClearDVIBuf;
+ multifigure := 0;
+ pgfigurenum := 0;
+ FTBDs := 0;
+ didnewfonts := false;
+ repeat
+ k := Dget1byte;
+ if (k >= 243) and (k < 247) then
+ begin (* fontdefs *)
+ p := firstpar(k);
+ definefont(p);
+ k := 138
+ end;
+ until (k <> 138); (* nop *)
+
+ if (k = 248) then
+ begin
+ inpostamble := true;
+ ourq := DVIMark + TotBytesWritten - 1;
+ goto 30
+ end;
+
+ if (k = 139) then (* BOP *)
+ begin
+ newbackptr := DVIMark + TotBytesWritten - 1;
+ currpagenum := Dsign4byte; (* Count[0] *)
+ for k := 1 to 9 do
+ waste := Dsign4byte; (* WAS count[k] := *)
+ waste := Dsign4byte; (* backpointer *)
+ BackupInBuf (4);
+ cmdSigned (oldbackptr, 4);
+ oldbackptr := newbackptr;
+ write(' [');
+ write(logfile,' [');
+ end
+ else
+ begin (* NOT bop?? *)
+ writeln('We did not find BOP when expected');
+ writeln(logfile,'We did not find BOP when expected');
+ jumpout;
+ end;
+
+ end; (* while *)
+30:
+ end; (* if not inpostamble *)
+ if (not inpostamble) then
+ skippages;
+ waste := Dsign4byte; (* ptr to the last bop in file *)
+ BackupInBuf (4);
+ cmdSigned (oldbackptr, 4);
+ readpostamble;
+ WriteDVIBuf;
+
+ while ((TotBytesWritten mod 4) <> 0) do
+ OutputByte(223); (* final signatures *)
+
+ writeln;
+ writeln(logfile);
+ write ('Output written on ');
+ writestrng(outname, false);
+ write(' (',currpagenum:0,' page');
+ if (currpagenum > 1) then
+ write('s');
+ writeln(', ',TotBytesWritten:0,' bytes).');
+
+ write (logfile,'Output written on ');
+ writestrng(outname, true);
+ write(logfile,' (',currpagenum:0,' page');
+ if (currpagenum > 1) then
+ write(logfile,'s');
+ writeln(logfile,', ',TotBytesWritten:0,' bytes).');
+
+ write ('Log written on ');
+ writestrng(logfilnam, false); writeln;
+ write (logfile,'Log written on ');
+ writestrng(logfilnam, true); writeln (logfile);
+ writeln;
+ writeln(logfile);
+666:
+ if (ErrorOccurred) then
+ begin
+ writeln;
+ writeln('Some error(s) occurred. Please check Logfile for details');
+ writeln('Assume that the outputfile is incorrect');
+ end;
+end.
+
diff --git a/macros/latex209/contrib/textyl/psrc/textyl.pas.aa b/macros/latex209/contrib/textyl/psrc/textyl.pas.aa
new file mode 100644
index 0000000000..2001f83217
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/textyl.pas.aa
@@ -0,0 +1,1000 @@
+
+(*$b0*)
+
+program tyldvidvi(input,output);
+(* ----------------------------------------------------------
+ TeXtyl line-drawing interface for TeX.
+ copyright (c) 1987 John S. Renner
+ All rights reserved.
+
+ABSTRACT: TeXtyl reads in a DVI file, and processes 'specials'
+ that refer to graphics capabilities that it knows about,
+ like line, spline, ThickThinSpline, and musical
+ beams and slurs. TeXtyl then outputs a new DVI file,
+ with the special-macros expanded and converted to
+ DVI-commands for character setting.
+
+DEPENDENCIES: Few assumptions about Pascal are assumed. All
+ identifiers are unique to eight characters. There are
+ notes to indicate system-dependencies.
+ I assume the standard definition of "READ(fil, x)" to be
+ equivalent to "x := fil^; GET(fil)" , and
+ "WRITE(fil, x)" == "fil^ := x; PUT(fil)" .
+ Arrays are passed by reference (VAR) for efficiency.
+ See also the "sysdependent" procedure;
+ Problem areas, or areas for expansion are marked with ###
+
+-------------------------------------------------------------*)
+(* Revision History:
+ Jun. 1986 v1.0 Basic version of TeXtyl
+ Dec. 1986 v1.1 Added adaptive subdivision for spline
+ interpolation. Added Cardinal basis.
+ Mar. 1987 v1.2 Added F and W flags for beginfigure
+ to allow required and/or actual dimensions
+ to interface with files output by the
+ DP drawing program from Carnegie-Mellon
+ also various fixes
+ Apr. 1987 v1.3 Added linestyles (dotted, dashed, dotdashed)
+
+*)
+
+label
+ 666, 30;
+(*=====================CONST============================*)
+#include "tylext.h"
+#include "texpaths.h"
+
+const
+ TylVersion = 'This is TeXtyl, Version 1.30';
+ (* for dvi-commands *)
+ PUT1 = 133;
+ SET1 = 128;
+ PUTRULE = 137;
+ NOP = 138;
+ PUSH = 141;
+ POP = 142;
+ RIGHTLEFT = 143;
+ DOWNUP = 157;
+ FONTDEF = 244;
+ USEFONT = 236;
+ OURFONTFLAG = 256; (* our special 'byte' value flag *)
+
+ USESTDAREA = 0; (* flag to use the 'standard' area to find .tfm files *)
+
+ (* some conversions and numbers *)
+ SPPERPT = 65536; (* scaled points per printers point *)
+ SPPERMM = 186468; (* scaled pts per millimetre *)
+
+ RADTODEG = 57.29577952; (* degrees per radian *)
+ DEGTORAD = 0.0174532925; (* radians per degree *)
+ PI = 3.141592654;
+
+ TWO16 = 65536; (* 2 ^ 16 *)
+ TWO20 = 1048576; (* 2 ^ 20 *)
+ TWO23 = 8388608;
+ TWO24 = 16777216;
+ TWO27 = 134217728;
+ TWO31 = 2147483647; (* 2^31 - 1 *)
+
+ BIGREAL = 1.0e30;
+ MAXVECLENsp = 262144; (* Normal maximum length of longest
+ * vector-font character in scaled points
+ *)
+ (* Music Font dependent constants *)
+ DOTCHAR = 127; (* ascii number of char that is a dot *)
+ QNOTEGHUS = 18.0; (* MF: Global Horizontal Units for a Quarternote *)
+ QNOTEGVUS = 16.0; (* MF: Global Vertical units for a quarternote *)
+ GBMGHUS = 12.0; (* MF: horizontal units for a grace beam *)
+ GBMGVUS = 9.0;
+
+ BMSTART = 0; BMEND = 69; (* indices for start/end of the beam chars *)
+ LOBM1 = 0; (* indices for the regular beam chars that *)
+ HIBM1 = 34; (* are 1 quarternote long, and *)
+ LOBM1p5 = 35; (* for those that are 1.5 quarternotes long *)
+ HIBM1p5 = 69;
+
+ GBMSTART = 70; GBMEND = 105; (* indices for the grace beams *)
+ LOGBMp5 = 70; (* indices for grace beam chars that *)
+ HIGBMp5 = 87; (* are 0.5 grace quarternote long, and *)
+ LOGBMp66 = 88; (* 0.66 grace quarternotes long *)
+ HIGBMp66 = 105;
+
+ LoVThick = 1; (* Bounds for Vector char thicknesses *)
+ HiVThick = 13;
+
+ SizVFontTable = 39; (* size of the Vector Font Table *) { 3*HiVThick }
+ SizMFontTable = 18;(* size of the Music Font Table *)
+ MAXLABELFONTS = 5;
+ SizLFontTable = MAXLABELFONTS; (* size of the Label Font Table *)
+
+ MAXCTLPTS = 63; (* max number of control points *)
+ MAXCTLPTSp3 = 66; (* max control points + 3 *)
+ ARRLIMIT = 100; (* limit for strings and other arrays *)
+ MAXSPLINESEGS = 480; (* max number of spline segments *)
+ MAXOLEN = 128; (* max length of Ostring that holds bytes of dvi cmds *)
+ MAXTBDs = 50; (* max number of Fonts-to-be-Defined *)
+
+ MAXDVISTRINGS = 600; (* max number of DVI Ostrings per page *)
+ TFMSIZE = 8000; (* size of TFM array to hold .tfm file info *)
+
+ (* Numeric names for the TeXtyl primitives *)
+ Aline = 1; (* should be first *)
+ Aspline = 2;
+ Attspline = 3;
+ Abeam = 4;
+ Atieslur = 5;
+ Aarc = 6;
+ Alabel = 7;
+ Afigure = 8; (* should be last one *)
+
+ MAXFONTS = 60; (* number of TeX fonts to keep track of *)
+ STACKSIZE = 50; (* size of stack for pushes and pops *)
+ AREALENGTH = TYLPATHLEN; (* see also "sysdependent" proc for this value*)
+
+ CR = 13; (* numbers of certain ascii characters *)
+ LF = 10;
+ HT = 9;
+ FF = 12;
+ ERRSIGNAL = '?';
+ ERRNOTBAD = 0;
+ ERRBAD = 1;
+ ERRREALBAD = 2;
+
+
+ READACCESS = 4;
+ WRITEACCESS = 2;
+ NOPATH = 0;
+ FONTPATH = 3;
+
+
+
+(*===========================TYPES=============================*)
+type
+ (* ---- Bytes ---- *)
+
+ Inbyt = -128 .. 127;
+
+ OctByt = 0 .. 256; (* DVI commands are 0..255, but we need
+ one more for an internal flag *)
+ bytefile = packed file of Inbyt;
+
+ (* ---- Strings ---- *)
+ asciicode = 32 .. 126;
+ charstring = packed array [1 .. ARRLIMIT] of char;
+ ascstring = packed array [1 .. ARRLIMIT] of asciicode;
+ (* rep for character strings *)
+ strng = record
+ len: 0 .. ARRLIMIT;
+ str:charstring;
+ end;
+ (* rep for ascii strings *)
+ astrng = record
+ len: 0 .. ARRLIMIT;
+ str: ascstring;
+ end;
+ (* byte strings *)
+ pOstring = ^Ostring;
+ Ostring = packed array[1 .. MAXOLEN] of OctByt;
+
+ (* ---- PUBLIC types ---- *)
+ VThickness = LoVThick .. HiVThick;
+ VectKind = (VKCirc, VKVert, VKHort);
+ BeamKind = (regular, grace);
+ SplineKind = (BSPL, INTBSPL, CATROM, CARD);
+ LineStyle = (solid, dotted, dashed, dotdash);
+ ScaledPts = integer;
+ MusIndex = integer;
+ VecIndex = integer;
+
+ ThickAryType = array[0 .. MAXSPLINESEGS] of VThickness;
+ SplineSegments = array[1 .. MAXSPLINESEGS, 1 .. 2] of ScaledPts;
+ ControlPoints = array [0 .. MAXCTLPTSp3, 1 .. 2] of ScaledPts;
+
+
+ (* ----- Private Types ---- *)
+ FontInfRec = record
+ Cht, Cdp, Cwd : ScaledPts;
+ Angle : real;
+ end;
+
+ pVectFontInfRec = ^VectFontInfRec; (* vector font info *)
+ VectFontInfRec = record
+ vkind : VectKind;
+ DesSize : ScaledPts;
+ PenSize : ScaledPts;
+ psize : VThickness;
+ MaxVectLen : ScaledPts;
+ FontName : strng;
+ Cksum : integer;
+ Isdefined : boolean;
+ DVIFontNum: integer;
+ FontInfo : array [0 .. 127] of FontInfRec;
+ end;
+
+ pMusFontInfRec = ^MusFontInfRec; (* music font info *)
+ MusFontInfRec = record
+ DesSize : ScaledPts;
+ Family : integer;
+ FontName : strng;
+ Cksum : integer;
+ Isdefined : boolean;
+ DVIFontNum: integer;
+ Staffsize : integer;
+ ghu : ScaledPts;
+ gvu : ScaledPts;
+ FontInfo : array [0 .. 127] of FontInfRec;
+ end;
+
+ pLabFontInfRec = ^LabFontInfRec; (* label fonts info *)
+ LabFontInfRec = record
+ DesSize : ScaledPts;
+ FontName : strng;
+ Cksum : integer;
+ Isdefined : boolean;
+ DVIFontNum : integer;
+ internalnumber : integer;
+ spacewidth : ScaledPts;
+ end;
+
+
+ (* list of dvi-strings *)
+ dvistary = array[1 .. MAXDVISTRINGS] of pOstring;
+
+ DVIBuftype = record
+ TotByteLen : integer;
+ Numstrings : integer;
+ curstrindex : integer;
+ Dstrings : dvistary;
+ end;
+
+ (* representation of list of fonts that have to be defined
+ * before we output the BOP of the page we
+ * just scanned
+ *)
+ ToBeDefinedRec = record
+ which : char;
+ indx : integer;
+ end;
+
+ stackrec = record
+ sh, sv, sw, sx, sy, sz: integer;
+ end;
+
+ Stacktype = array [0 .. STACKSIZE] of stackrec;
+
+ Oneby4Vector = array[1 .. 4] of real;
+ Fourby4Matrix = array[1 .. 4, 1 .. 4] of real;
+ Oneby5Vector = array[1 .. 5] of real;
+
+ Primitive = Aline .. Afigure;
+
+ pItem = ^Item;
+ figptr = ^Figure;
+
+ Item = packed record
+ nextitem : pItem;
+ BBlx, BBby, BBrx, BBty : ScaledPts; (* Bounding box *)
+ itemthick : VThickness;
+ itemvec : VectKind;
+ itempatt : LineStyle;
+ case kind : Primitive of
+ Aline : ( lx1, ly1, lx2, ly2 : ScaledPts;
+ );
+ Aspline : ( spltype : SplineKind;
+ sclosed : boolean;
+ dosmarks : integer;
+ nsplknots : integer;
+ spts : ControlPoints;
+ );
+ Attspline : ( tspltype : SplineKind;
+ tclosed : boolean;
+ dottmarks : integer;
+ nttknots : integer;
+ ttpts : ControlPoints;
+ ttarry : ThickAryType;
+ );
+ Abeam : ( bx1, by1, bx2, by2 : ScaledPts;
+ staf : integer;
+ bkind : BeamKind;
+ );
+ Atieslur : ( ntknots : integer;
+ minth, maxth : VThickness;
+ tspts : ControlPoints;
+ );
+ Aarc : ( acentx, acenty : ScaledPts;
+ aradius : ScaledPts;
+ firstang, lastang : integer;
+ narcknots : integer;
+ arcpts : ControlPoints;
+ );
+ Alabel : ( labx, laby : ScaledPts;
+ fontstyle : integer;
+ labeltext : strng;
+ );
+ Afigure : ( figtheta : real;
+ fsx, fsy : real;
+ fdx, fdy : ScaledPts;
+ preWid, preHt : ScaledPts;
+ postWid, postHt : ScaledPts;
+ depthnumber : integer;
+ body : figptr;
+ );
+ end;
+
+
+ Figure = record
+ things : pItem;
+ end;
+
+
+(*==============================VARS============================*)
+var
+ (* ----- Private vars *)
+ catrommtx : Fourby4Matrix; (* basis matrix for catmul-rom splines*)
+ bsplmtx : Fourby4Matrix; (* basis matrix for B-splines *)
+ cardmtx : Fourby4Matrix; (* Cardinal spline matrix *)
+ lastPoint : integer; (* num of output points *)
+ intervals : integer; (* count of spline interval we are on *)
+ ourxpos, (* internal x-position on page *)
+ ourypos, (* internal y-position on page *)
+ ourfontnum : integer; (* internal number of TeX font currently in use*)
+ ourpushdepth : integer; (* depth of internal pushes *)
+ origTexfont : integer; (* number of TeX font in use before tyling *)
+
+ GDVIBuf : DVIBuftype; (* Global DVI buffer that contains a list of
+ * dvi commands for this page. All dvi-cmds
+ * parsed are put here and possibly modified
+ * before being written to the output file
+ *)
+
+ VFontTable : array [1 .. SizVFontTable] of pVectFontInfRec;
+ MFontTable : array [1 .. SizMFontTable] of pMusFontInfRec;
+ LFontTable : array [1 .. SizLFontTable] of pLabFontInfRec;
+ (* the font tables, and the number of fonts defined in each *)
+ VFontsDefd,
+ MFontsDefd,
+ LFontsDefd : integer;
+
+ GDVIFN : integer; (* dvi font number currently in use *)
+
+ (* table of fonts yet To-Be-Defined *)
+ TBD : array[1 .. MAXTBDs] of ToBeDefinedRec;
+ FTBDs : integer; (* number of fonts to be defined for current page *)
+
+ pageitems : pItem; (* list of primitives in current use in the current
+ * figure on the current page
+ *)
+
+ TotBytesWritten : integer;
+ ourq : integer; (* the 'q' for the postpost *)
+ specstart: integer; (* the place in the DVI buffer where the
+ * start of the special begins.
+ * this is so that we know how far to back up
+ * and over-write the old \special macro string
+ * with the cmds of our 'macro-expansion'
+ *)
+
+ multifigure : integer; (* depth of definition recursion of figures *)
+ didnewfonts : boolean; (* did we define the new fonts for this page? *)
+ prevfont : integer; (* to keep track of prev font before the
+ * PUSH and expansion of the special
+ *)
+
+ pgfigurenum : integer; (* figure number for this page *)
+ currpagenum : integer; (* number of page we are on *)
+ skiptsclamp : boolean; (* DEBUG: should we skip post-clamping ties *)
+ dviBBlx, dviBBrx, (* Bounding box of figure in DVI space *)
+ dviBBby, dviBBty : ScaledPts;
+ ErrorOccurred : boolean; (* global flag in case some error happened *)
+
+
+ thefilename, realnameoffile : charstring; (* used externally *)
+
+ (* ----- End private vars *)
+
+
+ tfmbyte : Inbyt;
+
+ vaxbyt : Inbyt;
+
+ tfm: array[-100 .. TFMSIZE] of OctByt;
+
+ xord: array [char] of asciicode;
+ xchr: array [0 .. 255] of char;
+ outname: strng; (* name of output file *)
+ tfmname : strng; (* name of a .tfm file *)
+ dvifname : strng; (* name of the input dvi file *)
+ logfilnam: strng; (* name of the log file *)
+
+ dvifile: bytefile;
+ tfmfile: bytefile;
+ outputfil: bytefile;
+ logfile : text;
+
+ curfont: integer;
+ s : 0 .. STACKSIZE;
+ h, v, w, x, y, z: integer;
+ stack: Stacktype;
+
+ font: array [0 .. MAXFONTS] of
+ record
+ num: integer;
+ name: astrng;
+ checksum: integer;
+ scaledsize: integer;
+ designsize: integer;
+ space: integer;
+ bc: integer;
+ ec: integer;
+ widths: array [0 .. 127] of ScaledPts
+ end;
+ nf : 0 .. MAXFONTS;
+
+ MINREAL : real; (* a system-dependent 'constant' *)
+ b0, b1, b2, b3: OctByt;
+ inwidth: array [0 .. 255] of integer;
+ tfmchecksum: integer;
+ conv: real;
+ trueconv: real;
+ numerator,
+ denominator: integer;
+ defaultdirectory: strng;
+ mag,
+ magfactor: real;
+ maxv, maxh, maxs : integer;
+ maxpages,
+ totalpages : integer;
+ resolution: real;
+ inpostamble : boolean;
+ newbackptr,
+ oldbackptr : integer;
+ p, k : integer;
+ waste : integer;
+
+
+(* ==================forward declarations============================ *)
+
+{ These hooks assume that the parameters are filled "correctly",
+ and are already transformed into 4th Quadrant DVI-space }
+
+
+procedure TylTieSlur (var KnotArray: ControlPoints;
+ numknots: integer;
+ minthick, maxthick: VThickness); forward;
+
+procedure TylThickThinSpline (thetype : SplineKind;
+ isclosed : boolean;
+ var KnotArray: ControlPoints;
+ var ThikThinAry: ThickAryType;
+ numknots: integer;
+ vec: VectKind;
+ patt: LineStyle;
+ domarks : integer); forward;
+
+procedure TylSpline (thetype : SplineKind;
+ isclosed : boolean;
+ var KnotArray: ControlPoints;
+ numknots: integer;
+ thick: VThickness;
+ vec: VectKind;
+ patt: LineStyle;
+ domarks : integer); forward;
+
+procedure TylLine (xl, yb, xr, yt: ScaledPts;
+ thickness: VThickness;
+ vec: VectKind;
+ patt: LineStyle); forward;
+
+procedure TylBeam (fromx, fromy, tox, toy: ScaledPts;
+ staffsize : integer;
+ kind : BeamKind); forward;
+
+procedure TylArc (radius : ScaledPts;
+ centx, centy : ScaledPts;
+ firstangle, secondangle : integer;
+ thick : VThickness;
+ vec : VectKind;
+ patt: LineStyle); forward;
+
+procedure TylLabel (xpos, ypos : ScaledPts;
+ fontstyle : integer;
+ phrase : charstring;
+ phraselen : integer); forward;
+
+(* private procedures *)
+procedure definebeams (var M : pMusFontInfRec); forward;
+procedure definevectors (var Vec: pVectFontInfRec); forward;
+procedure defineNewfonts; forward;
+procedure doTylArc (iscircle : boolean; var apts : ControlPoints;
+ numknots : integer; thick : VThickness;
+ vec : VectKind; patt : LineStyle); forward;
+procedure strcopy (src : charstring; var dest : charstring;
+ len : integer); forward;
+procedure writestrng (s :strng; tologfile : boolean); forward;
+(* end private procs *)
+
+{------------------------------------------------------}
+procedure jumpout;
+begin
+ goto 666; (* global label *)
+end;
+
+
+(*-------------- System Dependent stuff ----------------------*)
+(* the default-directory should be where the .tfm files are
+ * to be found. the string len should reflect this name.
+ * Check with the local site maintainer about any necessary
+ * additions to the reset and rewrite procedures for opening
+ * 8-bit binary files.
+ *)
+
+
+
+
+
+procedure sysdependent;
+ begin
+
+
+ setpaths;
+
+ defaultdirectory.str := TYLPATH;
+ defaultdirectory.len := TYLPATHLEN; (* AREALENGTH const should be this, too *)
+ writeln(TylVersion,' for Berkeley Unix');
+
+ resolution := 300.0; (* just a number *)
+ MINREAL := 1.0e-20; (* so that we avoid some underflows *)
+ end;
+
+{------------------------------------------------------------}
+procedure complain (severity :integer);
+begin
+ writeln(logfile,'Error in fig#',pgfigurenum:0,' on page ',currpagenum:0);
+ case severity of
+ ERRNOTBAD : begin
+ write (ERRSIGNAL);
+ end;
+ ERRBAD : begin
+ write (ERRSIGNAL);
+ ErrorOccurred := true;
+ end;
+ ERRREALBAD : begin
+ write (ERRSIGNAL,'! ');
+ ErrorOccurred := true;
+ end;
+
+ end; (* case *)
+end;
+
+function opendvifile : boolean;
+begin
+
+ strcopy (dvifname.str, thefilename, dvifname.len);
+ thefilename[dvifname.len + 1] := ' ';
+ if (testaccess (READACCESS, NOPATH)) then
+ begin
+ reset (dvifile, realnameoffile);
+ opendvifile := true;
+ end
+ else
+ begin
+ writestrng(dvifname, false);
+ writeln(' : DVI file not found/readable ');
+ opendvifile := false;
+ end;
+
+end;
+
+function opentfmfile : boolean;
+begin
+
+ strcopy (tfmname.str, thefilename, tfmname.len);
+ thefilename[tfmname.len + 1] := ' ';
+ if (testaccess (READACCESS, FONTPATH)) then
+ begin
+ reset(tfmfile, realnameoffile);
+ opentfmfile := true;
+ end
+ else
+ begin
+ writestrng(tfmname, false);
+ writeln(' : TFM file not fount/readable ');
+ opentfmfile := false;
+ end;
+
+end;
+
+procedure openoutputfile;
+begin
+
+ strcopy (outname.str, thefilename, outname.len);
+ thefilename[outname.len + 1] := ' ';
+ if (testaccess (WRITEACCESS, NOPATH)) then
+ rewrite (outputfil, realnameoffile)
+ else
+ begin
+ writestrng(outname, false);
+ writeln(' : Output file not writable');
+ jumpout;
+ end;
+
+end;
+
+procedure openlogfile;
+begin
+
+ strcopy (logfilnam.str, thefilename, logfilnam.len);
+ thefilename[logfilnam.len + 1] := ' ';
+ if (testaccess (WRITEACCESS, NOPATH)) then
+ rewrite (logfile, realnameoffile)
+ else
+ begin
+ writestrng(logfilnam, false);
+ writeln(' : Log file not writable');
+ jumpout;
+ end;
+
+end;
+
+
+(* &&Module Tylsupport *)
+
+
+{---------------------------------------------------}
+procedure ClearBufString (var s : pOstring);
+(* clear a DVI buffer string to contain no-ops*)
+var i : integer;
+begin
+ for i := 1 to MAXOLEN do
+ s^[i] := NOP;
+end;
+
+{---------------------------------------------------}
+function NewBufString : pOstring;
+var s : pOstring;
+begin
+ new (s);
+ ClearBufString (s);
+ NewBufString := s;
+end;
+
+
+
+(* NOTATION::
+ * All procedures that put a dvi-command into the
+ * temporary buffer are prefixed with "cmd"...
+ * Functions that deal with reading .tfm files are prefixed
+ * with "T" or have "tfm" in their names.
+ * Functions that deal with reading DVI files are
+ * prefixed with a "D".
+ *)
+
+{--------------------------------------------}
+procedure cmd1byte (cmd : OctByt);
+begin
+ with GDVIBuf do
+ begin
+ if (Numstrings > MAXDVISTRINGS) then (* buffer full *)
+ begin
+ complain (ERRREALBAD);
+ writeln (logfile,'error: too many dvistrings. Totbytes = ',TotByteLen);
+ jumpout;
+ end;
+ if (curstrindex > MAXOLEN) then (* current string full *)
+ begin
+ Numstrings := Numstrings + 1;
+ if (Dstrings[Numstrings] <> nil) then
+ dispose (Dstrings[Numstrings]);
+ Dstrings[Numstrings] := NewBufString;
+ ClearBufString(Dstrings[Numstrings]);
+ curstrindex := 1;
+ end;
+ Dstrings[Numstrings]^[curstrindex] := cmd; (* insert command byte *)
+ TotByteLen := TotByteLen + 1;
+ curstrindex := curstrindex + 1;
+ end;
+end;
+
+
+{---------------------------------------------------}
+procedure cmd2byte (cmd : integer);
+begin
+ cmd1byte (cmd div 256);
+ cmd1byte (cmd mod 256);
+end;
+
+{---------------------------------------------------}
+procedure cmd3byte (cmd : integer);
+begin
+ cmd1byte (cmd div TWO16);
+ cmd1byte ((cmd div 256) mod 256);
+ cmd1byte (cmd mod 256);
+end;
+
+{---------------------------------------------------}
+procedure cmd4byte (cmd : integer);
+var tmp : integer;
+begin
+ tmp := cmd;
+ if (tmp >= 0) then
+ begin
+ cmd1byte (tmp div TWO24);
+ end
+ else
+ begin
+ tmp := tmp + TWO31 + 1; (* need the +1 *)
+ cmd1byte (tmp div TWO24 + 128);
+ end;
+ tmp := tmp mod TWO24;
+ cmd1byte (tmp div TWO16);
+ tmp := tmp mod TWO16;
+ cmd1byte (tmp div 256);
+ cmd1byte (tmp mod 256);
+end;
+
+{---------------------------------------------------}
+(* ### may be system dependent as integers are assumed
+ to be signed 32-bits *)
+
+procedure cmdSigned (i : integer; numbytes: integer);
+var tmp : integer;
+begin
+ if (numbytes = 4) then
+ cmd4byte (i)
+ else
+ begin (* <= 3 bytes *)
+ tmp := i;
+ if (numbytes = 3) then
+ begin
+ if (tmp < 0) then
+ tmp := tmp + TWO24;
+ cmd1byte (tmp div TWO16);
+ tmp := tmp mod TWO16;
+ cmd1byte (tmp div 256);
+ end;
+ if (numbytes = 2) then
+ begin
+ if (tmp < 0) then
+ tmp := tmp + TWO16;
+ cmd1byte (tmp div 256);
+ end;
+ if (numbytes = 1) then
+ begin
+ if (tmp < 0) then
+ tmp := tmp + 256;
+ end;
+ cmd1byte (tmp mod 256); (* for all *)
+ end;
+end;
+
+
+
+{---------------------------------------------------}
+function Tgetvaxbyte : OctByt;
+label 9999;
+begin
+ tfmbyte := tfmfile^;
+ if (tfmbyte < 0) then
+ Tgetvaxbyte := tfmbyte + 256
+ else
+ Tgetvaxbyte := tfmbyte;
+ if (eof (tfmfile)) then
+ begin
+ complain (ERRREALBAD);
+ writeln (logfile,' early EOF of tfm file! ');
+ goto 9999;
+ end;
+ get (tfmfile);
+9999:
+end;
+
+
+{---------------------------------------------------}
+procedure readtfmword;
+
+begin
+
+ b0 := Tgetvaxbyte;
+ b1 := Tgetvaxbyte;
+ b2 := Tgetvaxbyte;
+ b3 := Tgetvaxbyte;
+
+end;
+
+
+{---------------------------------------------------}
+function DVaxByte : OctByt;
+label 99;
+begin
+ vaxbyt := dvifile^;
+ if (eof (dvifile)) then
+ begin
+ DVaxByte := 0;
+ goto 99;
+ end;
+ if (vaxbyt < 0) then
+ DVaxByte := vaxbyt + 256
+ else
+ DVaxByte := vaxbyt;
+ get (dvifile);
+99:
+end;
+
+
+
+{---------------------------------------------------}
+(* get a byte from the DVI file, but do not copy it into the DVIbuffer *)
+function Dgrabbyte : integer;
+var
+ b: OctByt;
+begin
+ if eof(dvifile) then
+ Dgrabbyte := 0
+ else
+ begin
+
+ b := DVaxByte;
+
+ Dgrabbyte := b;
+ end;
+end;
+
+
+{---------------------------------------------------}
+function Dget1byte : integer;
+var
+ b: OctByt;
+begin
+ if eof(dvifile) then
+ Dget1byte := 0
+ else
+ begin
+
+ b := DVaxByte;
+
+ Dget1byte := b
+ end;
+ cmd1byte(b);
+end;
+
+{---------------------------------------------------}
+function Dsign1byte : integer;
+var
+ b: OctByt;
+begin
+
+ b := DVaxByte;
+
+ if b < 128 then
+ Dsign1byte := b
+ else
+ Dsign1byte := b - 256;
+ cmd1byte(b);
+end;
+
+{---------------------------------------------------}
+function Dget2byte : integer;
+var
+ a, b: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+
+ Dget2byte := a * 256 + b;
+ cmd1byte(a);
+ cmd1byte(b);
+end;
+
+{---------------------------------------------------}
+function Dsign2byte : integer;
+var
+ a, b: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+
+ if a < 128 then
+ Dsign2byte := a * 256 + b
+ else
+ Dsign2byte := (a - 256) * 256 + b;
+ cmd1byte(a);
+ cmd1byte(b);
+end;
+
+{---------------------------------------------------}
+function Dget3byte : integer;
+var
+ a, b, c: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+ c := DVaxByte;
+
+ Dget3byte := (a * 256 + b) * 256 + c;
+ cmd1byte(a);
+ cmd1byte(b);
+ cmd1byte(c);
+end;
+
+{---------------------------------------------------}
+function Dsign3byte : integer;
+var
+ a, b, c: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+ c := DVaxByte;
+
+ if a < 128 then
+ Dsign3byte := (a * 256 + b) * 256 + c
+ else
+ Dsign3byte := ((a - 256) * 256 + b) * 256 + c;
+ cmd1byte(a);
+ cmd1byte(b);
+ cmd1byte(c);
+end;
+
+{---------------------------------------------------}
+function Dsign4byte : integer;
+var
+ a, b, c, d: OctByt;
+begin
+
+ a := DVaxByte;
+ b := DVaxByte;
+ c := DVaxByte;
+ d := DVaxByte;
+
+ if a < 128 then
+ Dsign4byte := ((a * 256 + b) * 256 + c) * 256 + d
+ else
+ Dsign4byte := (((a - 256) * 256 + b) * 256 + c) * 256 + d;
+ cmd1byte(a);
+ cmd1byte(b);
+ cmd1byte(c);
+ cmd1byte(d);
+end;
+
+
+{---------------------------------------------------}
+(* write a byte out to the ouput file, but if we
+ * encounter the font flag, define the new fonts, and
+ * continue
+ *)
+procedure OutputByte (b : OctByt);
+var x : Inbyt;
+ n : integer;
+begin
+ n := b;
+ if (n = OURFONTFLAG) then
+ begin (* our special macro-flag *)
+ n := NOP; (* nullify it *)
+ if (not didnewfonts) then
+ begin
+ didnewfonts := true;
+ defineNewfonts; (* expand the defns in the outfile itself *)
+ end;
+ end; (* if *)
+
+ if (n > 127) then
+ begin
+ x := n - 256;
+ end
+ else
+ x := n;
+ outputfil^ := x;
+ put (outputfil);
+
+ TotBytesWritten := TotBytesWritten + 1; (* keep count of all bytes *)
+end;
+
+{---------------------------------------------------}
+procedure Output2Byte (i : integer);
+begin
+ OutputByte (i div 256);
+ OutputByte (i mod 256);
+end;
diff --git a/macros/latex209/contrib/textyl/psrc/textyl.pas.ab b/macros/latex209/contrib/textyl/psrc/textyl.pas.ab
new file mode 100644
index 0000000000..8240ef5a81
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/textyl.pas.ab
@@ -0,0 +1,1000 @@
+
+{---------------------------------------------------}
+procedure Output4Byte (i : integer);
+var tmp : integer;
+begin
+ tmp := i;
+ if (tmp >= 0) then
+ begin
+ OutputByte (tmp div TWO24);
+ end
+ else
+ begin
+ tmp := tmp + TWO31 + 1; (* need the +1 *)
+ OutputByte (tmp div TWO24 + 128);
+ end;
+ tmp := tmp mod TWO24;
+ OutputByte (tmp div TWO16);
+ tmp := tmp mod TWO16;
+ OutputByte (tmp div 256);
+ OutputByte (tmp mod 256);
+end;
+
+
+{---------------------------------------------------}
+
+function rtan (ang : real) : real;
+var rads : real;
+ cosrads : real;
+begin
+ rads := ang * DEGTORAD;
+ cosrads := cos (rads);
+ if (cosrads = 0.0) then { this happens at 90 and 270 }
+ cosrads := cos ((ang - 0.01) * DEGTORAD);
+ rtan := (sin (rads)) / (cosrads);
+end;
+
+{---------------------------------------------------}
+function float (i : integer) : real;
+begin
+ float := i + 0.00;
+end;
+
+
+{---------------------------------------------------}
+function tolowercase (let: char) : char;
+const Diff = 32; (* xord['a'] - xord['A'] *)
+var olet : integer;
+begin
+ olet := xord[let];
+ if (olet >= xord['A']) then
+ begin
+ if (olet <= xord['Z']) then
+ begin
+ let := xchr[olet + Diff];
+ end;
+ end;
+ tolowercase := let;
+end;
+
+{---------------------------------------------------}
+(* decide if the first string is the same as the second --
+ * at least the first 'len' characters
+ * We need this since most Pascal impls. are brain-dead
+ * when it comes to string comparisons
+ *)
+function streq (a, b : charstring; len : integer) : boolean;
+label 1;
+var i : integer;
+ same : boolean;
+begin
+ same := true;
+ for i := 1 to len do
+ begin
+ if (a[i] <> b[i]) then
+ begin
+ same := false;
+ goto 1;
+ end; (* if *)
+ end; (* for *)
+1:
+ streq := same;
+end; (* streq *)
+
+{-------------------------------------------------------}
+procedure strcopy (* src : charstring; var dest : charstring; len : integer *);
+var i : integer;
+ begin
+ for i := 1 to len do
+ dest[i] := src[i];
+ end;
+
+{-------------------------------------------------------}
+procedure writestrng (* s :strng; tologfile : boolean *);
+var i : integer;
+begin
+if (tologfile) then
+ begin
+ for i := 1 to s.len do
+ write (logfile, s.str[i]);
+ end
+else
+ begin
+ for i := 1 to s.len do
+ write (s.str[i]);
+ end;
+end;
+
+
+{---------------------------------------------------}
+(* Move the current DVI position to posx, posy by
+ * moving relatively from our current position
+ * and store the new position
+ *)
+
+procedure isetpos (posx, posy : integer);
+var dy, dx: ScaledPts;
+ numbytes : integer;
+begin
+ dx := posx - ourxpos;
+ dy := posy - ourypos;
+
+ numbytes := 1;
+ if ((dx < 128) and (dx >= -128)) then
+ numbytes := 1
+ else if ((dx < 32768) and (dx >= -32768)) then
+ numbytes := 2
+ else if ((dx < TWO23) and (dx >= - TWO23))then
+ numbytes := 3
+ else if ((dx < TWO31) and (dx >= - TWO31))then
+ numbytes := 4
+ else
+ begin
+ complain (ERRREALBAD);
+ writeln('Panic: dx is too big/small in isetpos: ',dx);
+ writeln(logfile,'Panic: dx is too big/small in isetpos: ',dx);
+ end;
+
+ cmd1byte (RIGHTLEFT + numbytes -1); (* number of bytes in its arg list *)
+ cmdSigned (dx, numbytes);
+
+ numbytes := 1;
+ if ((dy < 128) and (dy >= -128)) then
+ numbytes := 1
+ else if ((dy < 32768) and (dy >= -32768)) then
+ numbytes := 2
+ else if ((dy < TWO23) and (dy >= - TWO23))then
+ numbytes := 3
+ else if ((dy < TWO31) and (dy >= - TWO31))then
+ numbytes := 4
+ else
+ begin
+ complain (ERRREALBAD);
+ writeln('Panic: dy is too big/small in isetpos: ',dy);
+ writeln(logfile,'Panic: dy is too big/small in isetpos: ',dy);
+ end;
+
+ cmd1byte (DOWNUP + numbytes -1);
+
+ cmdSigned (dy, numbytes);
+
+ ourxpos := posx;
+ ourypos := posy;
+end;
+
+{---------------------------------------------------}
+(* put out a character *)
+procedure iputchar (charno : OctByt);
+begin
+ cmd1byte (PUT1);
+ cmd1byte (charno);
+end;
+
+
+{---------------------------------------------------}
+(* set the font number, but only if it is different than
+ * the last one we accessed.
+ *)
+procedure isetfont (DVINum : integer);
+begin
+ if (ourfontnum <> DVINum) then
+ begin
+ cmd1byte (USEFONT);
+ cmd2byte (DVINum);
+ ourfontnum := DVINum;
+ end;
+end;
+
+
+procedure IPUSH;
+begin
+ if (ourpushdepth = 0) then
+ begin (* first push --> start tyling *)
+ origTexfont := font[curfont].num;
+ end
+ else
+ begin
+ prevfont := ourfontnum; (* store the internal font number in use at this time *)
+ end;
+ cmd1byte (NOP);
+ cmd1byte (NOP); (* our greeting *)
+ cmd1byte (PUSH);
+ ourpushdepth := ourpushdepth + 1;
+end;
+
+procedure IPOP;
+begin
+ cmd1byte (POP);
+ cmd1byte(NOP);
+ cmd1byte(NOP); (* our signature *)
+ ourpushdepth := ourpushdepth - 1;
+ if (ourpushdepth < 0) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Error: too many internal pops');
+ end;
+ if (ourpushdepth = 0) then
+ begin (* we are totally done with tyling for now *)
+ if (nf > 0) then
+ isetfont (origTexfont); (* only if it is valid *)
+ end
+ else
+ begin
+ if (prevfont >= 0) then
+ isetfont(prevfont); (* restore that internal font previously in use *)
+ end;
+end;
+
+{---------------------------------------------------}
+(* Assumes that the correct font is currently set *)
+procedure Tyldot (dotx, doty : ScaledPts);
+begin
+ if (dotx <> 0) and (doty <> 0) then
+ isetpos (dotx, doty);
+ iputchar (DOTCHAR);
+end;
+
+{---------------------------------------------------}
+procedure InitDVIBuf;
+var i: integer;
+begin
+ with GDVIBuf do
+ begin
+ TotByteLen := 0;
+ Numstrings := 0;
+ for i := 1 to MAXDVISTRINGS do
+ Dstrings[i] := nil;
+ curstrindex := MAXOLEN + 1;
+ end;
+end;
+
+{---------------------------------------------------}
+procedure ClearDVIBuf;
+var i : integer;
+begin
+ with GDVIBuf do
+ begin
+ for i := 1 to Numstrings do
+ begin
+ dispose (Dstrings[i]);
+ Dstrings[i] := nil;
+ end;
+ TotByteLen := 0;
+ Numstrings := 0;
+ curstrindex := MAXOLEN + 1;
+ end;
+end;
+
+{---------------------------------------------------}
+procedure WriteDVIBuf;
+var i: integer;
+ curstr: integer;
+ b : OctByt;
+begin
+ curstr := 1;
+ with GDVIBuf do
+ begin
+ while (curstr < Numstrings) do
+ begin
+ for i := 1 to MAXOLEN do
+ begin
+ b := Dstrings[curstr]^[i];
+ OutputByte (b);
+ end;
+ curstr := curstr + 1;
+ end; (* while *)
+
+(* now do the last string *)
+ for i := 1 to (curstrindex - 1) do
+ begin
+ b := Dstrings[Numstrings]^[i];
+ OutputByte(b);
+ end; (* for *)
+ end; (* with *)
+ ClearDVIBuf;
+end;
+
+{---------------------------------------------------}
+procedure BackupInBuf (nbytes : integer);
+var nstrs, rem : integer;
+begin
+ with GDVIBuf do
+ begin
+ nstrs := (TotByteLen - nbytes) div MAXOLEN;
+ rem := (TotByteLen - nbytes) mod MAXOLEN;
+ Numstrings := nstrs + 1;
+ curstrindex := rem + 1; (* points to position to-be-filled *)
+ if (curstrindex = 0) then
+ curstrindex := MAXOLEN;
+ TotByteLen := TotByteLen - nbytes;
+ end;
+end;
+
+{-----------------------------------------------------}
+function DVIMark : integer;
+begin
+ DVIMark := GDVIBuf.TotByteLen;
+end;
+
+
+
+{---------------------------------------------}
+function NewItem (what : Primitive): pItem;
+var i : pItem;
+ f : figptr;
+begin
+
+ new (i);
+ with i^ do
+ begin
+ nextitem := nil;
+ BBlx := 0;
+ BBby := 0;
+ BBrx := 0;
+ BBty := 0;
+ itemthick := LoVThick;
+ itemvec := VKCirc;
+ itempatt := solid;
+ kind := what;
+ case (what) of (* give defaults *)
+ Aline : ;
+ Aspline: begin
+ nsplknots := 0;
+ dosmarks := 0;
+ sclosed := false;
+ spltype := BSPL;
+ end;
+ Attspline: begin
+ nttknots := 0;
+ dottmarks := 0;
+ tspltype := BSPL;
+ tclosed := false;
+ end;
+ Abeam : ;
+ Atieslur: begin
+ ntknots := 0;
+ end;
+ Aarc: begin
+ narcknots := 0;
+ end;
+ Alabel: begin
+ fontstyle := -1; (* undefined *)
+ labeltext.len := 0;
+ end;
+ Afigure: begin
+ figtheta := 0.0;
+ fsx := 1.0; fsy := 1.0;
+ fdx := 0; fdy := 0;
+ preWid := 0; preHt := 0;
+ postWid := 0; postHt := 0;
+ depthnumber := 0; (* for now *)
+ new (f); (* a new figure *)
+ body := f;
+ body^.things := nil;
+ end;
+ end; (*case *)
+ end; (* with *)
+ NewItem := i;
+end; (* NewItem *)
+
+{ ### Note: "pageitems" could be extended to be a list
+{ of macrodefinitions which contain primitives , and
+{ then could be instanced. E.g., a library of common
+{ figures callable from \special level }
+
+
+{------------------------------------------------------}
+procedure pushItem (depth : integer; newthing : pItem);
+label 101;
+var i, p : pItem;
+ dun : boolean;
+begin
+ if (pageitems = nil) then
+ begin
+ if (newthing^.kind = Afigure) then
+ begin
+ pageitems := newthing;
+ goto 101;
+ end
+ else
+ begin
+ pageitems := NewItem (Afigure);
+ pageitems^.depthnumber := depth;
+ end;
+ end;
+
+ (* Assume that pageitems points to Afigure *)
+
+ (* traverse the list *)
+ i := pageitems; (* point to front of list for now *)
+ p := i^.body^.things;
+ dun := false;
+ while ((p <> nil) and not dun) do
+ begin
+ if (depth = i^.depthnumber) then
+ begin (* simple push *)
+ dun := true;
+ (* Note: this is the case when pushing another figure item
+ onto an already-existing list. We push the newfigure
+ with a depth of (fig^.depthnumber - 1) because it
+ really is part of the higer-level figure
+ *)
+ end
+ else if (depth > i^.depthnumber) then
+ begin
+ (* there MUST be a figure with a higher number deeper *)
+ while ((p^.kind <> Afigure) and (p^.nextitem <> nil)) do
+ begin
+ p := p^.nextitem;
+ end;
+
+ if (p^.kind = Afigure) then
+ begin
+ i := p;
+ p := i^.body^.things;
+ end
+ else
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'OOPS p^.kind isnt a figure. It must be near endoflist');
+ end;
+ end;
+ end; (* while *)
+
+ (* we have the correct front of list-list,
+ and i points to Afigure item *)
+ newthing^.nextitem := p;
+ i^.body^.things := newthing;
+101:
+end; (* pushItem *)
+
+
+
+{---------------------------------------------}
+function Tgetfixword (k: integer) : real;
+var a : 0 .. 4096;
+ f : integer;
+begin
+ a := (tfm[k] * 16) + (tfm[k + 1] div 16);
+ f := ((((tfm[k + 1] mod 16) * 256)
+ + tfm[k + 2]) * 256)
+ + tfm[k + 3];
+ if (a > 2047) then
+ begin
+ a := 4096 - a;
+ if (f > 0) then
+ begin
+ f := TWO20 - f;
+ a := a - 1;
+ end;
+ end;
+ Tgetfixword := a + f / TWO20;
+end;
+
+{-----------------------------------------------------}
+function TgetSigned (k: integer): integer;
+var i: integer;
+begin
+ i := tfm[k];
+ if (i < 128) then
+ i := i - 256;
+ TgetSigned := (((((i * 256) + tfm[k + 1]) * 256) +
+ tfm[k + 2]) * 256) + tfm[k + 3];
+end;
+
+
+
+{-----------------------------------------------------------}
+(* open a .tfm file and return the parameters in it.
+ * Used only in conjuction with the vector and music fonts
+ *)
+procedure gettfm (tfmfilnam: strng;
+ var dessize, p1, p2, p3, p4, p5, p6, p7 : ScaledPts;
+ var cksum : integer);
+label 9999;
+var tfmptr: integer;
+ lf, lh, bc, ec, nw, nh, nd, ni, nl, nk, ne, np: integer;
+ charbase, widthbase, heightbase, depthbase,
+ italicbase, ligkernbase, kernbase, extenbase,
+ parambase : integer;
+ tempdesignsize : ScaledPts;
+begin
+ p1 := 0; p2 := 0; p3 := 0; p4 := 0;
+ p5 := 0; p6 := 0; p7 := 0;
+ cksum := -1;
+
+ strcopy(tfmfilnam.str, tfmname.str, tfmfilnam.len);
+ tfmname.len := tfmfilnam.len;
+
+ tfmname.str[tfmname.len + 1] := chr(32);
+
+ if (not opentfmfile) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, TFM file can''t be opened!');
+ writestrng(tfmname,false);
+ writeln(' cannot be opened. Aborting');
+ jumpout;
+ end;
+
+
+ tfm[0] := Tgetvaxbyte;
+ tfm[1] := Tgetvaxbyte;
+
+
+ lf := (tfm[0] * 256) + tfm[1];
+ if ((4 * lf - 1) > TFMSIZE) then
+ begin
+ complain (ERRREALBAD);
+ write(logfile,'The tfm file:');
+ writestrng(tfmfilnam, true);
+ writeln(logfile,' is bigger than I can handle!');
+ goto 9999;
+ end;
+
+ for tfmptr := 2 to (4 * lf) - 1 do
+ begin
+
+ tfm[tfmptr] := Tgetvaxbyte;
+
+ end; (* for *)
+
+ tfmptr := 2;
+ lh := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ bc := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ ec := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nw := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nh := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nd := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ ni := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nl := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ nk := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ ne := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ np := (tfm[tfmptr] * 256) + tfm[tfmptr + 1];
+ tfmptr := tfmptr + 2;
+
+ if (lf <> (6 + lh + ((ec - bc) + 1) + nw + nh
+ + nd + ni + nl + nk + ne + np)) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmfilnam, true);
+ writeln(logfile,': subfile sizes don''t add up to the stated total!');
+ writeln(logfile,'Sorry, but I can''t go on; are you sure this is a TFM?');
+ goto 9999
+ end;
+ if (bc > (ec + 1)) or (ec > 255) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'The character code range ', bc: 1, '..', ec: 1, 'is illegal!');
+ writeln(logfile,'Sorry, but I can''t go on; are you sure this is a TFM?');
+ goto 9999;
+ end;
+ charbase := (6 + lh) - bc;
+ widthbase := (charbase + ec) + 1;
+ heightbase := widthbase + nw;
+ depthbase := heightbase + nh;
+ italicbase := depthbase + nd;
+ ligkernbase := italicbase + ni;
+ kernbase := ligkernbase + nl;
+ extenbase := kernbase + nk;
+ parambase := (extenbase + ne) - 1;
+
+ dessize := round (Tgetfixword (28) * SPPERPT); (* now in ScaledPts *)
+ tempdesignsize := round (dessize * magfactor);
+ cksum := TgetSigned (24);
+ (* return the special 7 parameters for the font *)
+ p1 := round (Tgetfixword (4 * (parambase + 1)) * tempdesignsize);
+ p2 := round (Tgetfixword (4 * (parambase + 2)) * tempdesignsize);
+ p3 := round (Tgetfixword (4 * (parambase + 3)) * tempdesignsize);
+ p4 := round (Tgetfixword (4 * (parambase + 4)) * tempdesignsize);
+ p5 := round (Tgetfixword (4 * (parambase + 5)) * tempdesignsize);
+ p6 := round (Tgetfixword (4 * (parambase + 6)) * tempdesignsize);
+ p7 := round (Tgetfixword (4 * (parambase + 7)) * tempdesignsize);
+
+9999:
+end;
+
+
+{---------------------------------------------------}
+procedure initVnMnLtables;
+var i: integer;
+begin
+ for i := 1 to SizVFontTable do
+ VFontTable[i] := nil;
+ for i := 1 to SizMFontTable do
+ MFontTable[i] := nil;
+ for i := 1 to SizLFontTable do
+ LFontTable[i] := nil;
+ VFontsDefd := 0;
+ MFontsDefd := 0;
+ LFontsDefd := 0;
+ GDVIFN := 300; (* starting number for any new fonts that we define *)
+end;
+
+
+{-------------------------------------------------------}
+procedure fonttobedefined (kind : char; findex : integer);
+begin
+ FTBDs := FTBDs + 1;
+(* reset this to zero after outputting
+ 1. fontdefs
+ 2. bop
+ 3. contents of dvi page
+ 4. eop
+*)
+ TBD[FTBDs].which := kind;
+ TBD[FTBDs].indx := findex;
+end;
+
+
+{-----------------------------------------------------}
+procedure enterfont (fontnum : integer; ck : integer;
+ scalefact, dessiz : ScaledPts;
+ nam : strng);
+var n: integer;
+ len : integer;
+begin
+ cmd1byte(FONTDEF);
+ cmd2byte(fontnum);
+ cmd4byte(ck);
+ cmd4byte(scalefact);
+ cmd4byte(dessiz);
+ cmd1byte(USESTDAREA);
+
+ len := nam.len;
+
+
+ cmd1byte(len - 4); (* skip the length of the .tfm suffix *)
+
+
+ for n := 1 to (nam.len - 4) do
+
+ begin (* skip the .tfm suffix *)
+ cmd1byte (xord [ nam.str[n] ]);
+ end;
+end;
+
+
+{-----------------------------------------------------}
+procedure Outputfont (fontnum : integer; ck : integer;
+ scalefact, dessiz : ScaledPts;
+ nam : strng);
+var n: integer;
+ len : integer;
+begin
+ OutputByte(FONTDEF);
+ Output2Byte(fontnum);
+ Output4Byte(ck);
+ Output4Byte(scalefact);
+ Output4Byte(dessiz);
+ OutputByte(USESTDAREA);
+
+ len := nam.len;
+
+
+ OutputByte(len - 4);
+
+
+ for n := 1 to (nam.len - 4) do
+
+ begin (* dont output the default dir prefix, nor the .tfm suffix *)
+ OutputByte(xord [ nam.str[n] ]);
+ end;
+end;
+
+{-----------------------------------------------------}
+procedure defineNewfonts;
+(* this needs to be done before first access to a font on a page
+ later someone else will have to re-define all of them in the postamble *)
+label 99;
+var i, n : integer;
+ f : integer;
+begin
+ for i := 1 to FTBDs do
+ begin
+ if (TBD[i].which = 'V') then
+ begin
+ f := TBD[i].indx;
+ with VFontTable[f]^ do
+ begin
+ if (Isdefined) then
+ goto 99;
+ Outputfont (DVIFontNum, Cksum, DesSize, DesSize,
+ FontName);
+ Isdefined := true;
+ end; (*with *)
+ end (* if *)
+ else if (TBD[i].which = 'M') then
+ begin (* music font *)
+ f := TBD[i].indx;
+ with MFontTable[f]^ do
+ begin
+ if (Isdefined) then
+ goto 99;
+ Outputfont (DVIFontNum, Cksum, DesSize, DesSize,
+ FontName);
+ Isdefined := true;
+ end; (* with *)
+ end (* else *)
+ else if (TBD[i].which = 'L') then
+ begin (* label font *)
+ f := TBD[i].indx;
+ with LFontTable[f]^ do
+ begin
+ if (Isdefined) then
+ goto 99;
+ Outputfont (DVIFontNum, Cksum, DesSize, DesSize, {### is this right?}
+ FontName);
+ Isdefined := true;
+ end; (* with *)
+ end
+ else
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Unknown type of font to be defined:"',TBD[i].which,'"');
+ end; (* else *)
+99:
+ end; (* for *)
+end;
+
+
+{---------------------------------------------------}
+function GetMusFont (stfsiz, fam : integer) : MusIndex;
+label 20, 99;
+var mustfmnam : strng;
+ found, i : MusIndex;
+ design, p1, p2, p3, p4, linesp, gwidth, p7 : ScaledPts;
+ cksm, r, k : integer;
+begin
+ (* see if it already exists *)
+ found := 0;
+ for i := 1 to MFontsDefd do (* loop through since there are few *)
+ with MFontTable[i]^ do
+ begin
+ if (Staffsize = stfsiz) and
+ (Family = fam) then
+ begin
+ found := i;
+ goto 20;
+ end;
+ end; (* with *)
+
+20: if (found <> 0) then
+ begin
+ GetMusFont := found;
+ goto 99;
+ end;
+
+ (* Not here already--go get it *)
+ for k := 1 to ARRLIMIT do
+ mustfmnam.str[k] := ' ';
+
+ r := 0;
+
+ mustfmnam.str[r+1] := 'm';
+ mustfmnam.str[r+2] := 'u';
+ mustfmnam.str[r+3] := 's';
+ mustfmnam.str[r+4] := xchr[stfsiz + xord['0']];
+ mustfmnam.str[r+5] := xchr[fam + xord['0']];
+ mustfmnam.str[r+6] := '.';
+ mustfmnam.str[r+7] := 't';
+ mustfmnam.str[r+8] := 'f';
+ mustfmnam.str[r+9] := 'm';
+
+ mustfmnam.str[r+10] := chr(32);
+
+ mustfmnam.len := 9 + r;
+ gettfm (mustfmnam, design, p1, p2, p3, p4, linesp, gwidth, p7, cksm);
+
+ MFontsDefd := MFontsDefd + 1;
+ if (MFontsDefd > SizMFontTable) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(mustfmnam, true);
+ writeln(logfile,'---not loadable. Size of Music Font table too small');
+ writestrng(mustfmnam,false);
+ writeln(' cannot be loaded. Too many music fonts. Table too small.');
+ jumpout;
+ end;
+
+ i := MFontsDefd;
+ new (MFontTable[i]);
+ with MFontTable[i]^ do
+ begin
+ Staffsize := stfsiz;
+ Family := fam;
+ DesSize := design;
+ strcopy (mustfmnam.str, FontName.str, mustfmnam.len);
+ FontName.len := mustfmnam.len;
+ Cksum := cksm;
+ ghu := round (gwidth / QNOTEGHUS);
+ gvu := round (linesp / QNOTEGVUS);
+ DVIFontNum := GDVIFN + 1;
+ Isdefined := false;
+ end;
+
+ GDVIFN := GDVIFN + 1;
+(* call someone to do the defns of cdp, cht, cwd foreach beam *)
+ definebeams (MFontTable[i]);
+ fonttobedefined ('M', i);
+ GetMusFont := i;
+99:
+end;
+
+
+{---------------------------------------------------}
+function GetVectFont (size : VThickness; vk : VectKind) : VecIndex;
+label 20, 99;
+var vectfmnam : strng;
+ found, i : VecIndex;
+ design, p1, p2, w0, w1, maxveclen, p6, p7 : ScaledPts;
+ cksm, r, k : integer;
+begin
+ (* see if it already exists *)
+ found := 0;
+
+ for i := 1 to VFontsDefd do
+ with VFontTable[i]^ do
+ begin
+ if ((psize = size) and
+ (vkind = vk)) then
+ begin
+ found := i;
+ goto 20;
+ end;
+ end; (* with *)
+
+20:
+ if (found <> 0) then
+ begin
+ GetVectFont := found;
+ goto 99;
+ end;
+
+ (* Not here--go get it *)
+ for k := 1 to ARRLIMIT do
+ vectfmnam.str[k] := ' ';
+
+ r := 0;
+
+ case (vk) of
+ VKCirc : vectfmnam.str[r+1] := 'c';
+ VKVert : vectfmnam.str[r+1] := 'v';
+ VKHort : vectfmnam.str[r+1] := 'h';
+ end; (*case *)
+ vectfmnam.str[r+2] := 'v';
+ vectfmnam.str[r+3] := 'e';
+ vectfmnam.str[r+4] := 'c';
+ if (size <= 9) then
+ begin
+ vectfmnam.str[r+5] := xchr[size + xord['0']];
+ vectfmnam.str[r+6] := '.';
+ vectfmnam.str[r+7] := 't';
+ vectfmnam.str[r+8] := 'f';
+ vectfmnam.str[r+9] := 'm';
+
+ vectfmnam.str[r+10] := chr(32);
+
+ vectfmnam.len := 9 + r;
+ end
+ else
+ begin
+ vectfmnam.str[r+5] := xchr[(size div 10) + xord['0']];
+ vectfmnam.str[r+6] := xchr[(size - ((size div 10)*10)) + xord['0']];
+ vectfmnam.str[r+7] := '.';
+ vectfmnam.str[r+8] := 't';
+ vectfmnam.str[r+9] := 'f';
+ vectfmnam.str[r+10] := 'm';
+
+ vectfmnam.str[r+11] := chr(32);
+
+ vectfmnam.len := 10 + r;
+ end;
+
+ gettfm (vectfmnam, design, p1, p2, w0, w1, maxveclen, p6, p7, cksm);
+ VFontsDefd := VFontsDefd + 1;
+ if (VFontsDefd > SizVFontTable) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(vectfmnam, true);
+ writeln(logfile,'---not loadable. Size of Vector Font table too small');
+ writestrng(vectfmnam,false);
+ writeln(' cannot be loaded. Too many vector fonts. Table too small.');
+ jumpout;
+ end;
+
+ i := VFontsDefd;
+ new (VFontTable[i]);
+ with VFontTable[i]^ do
+ begin
+ vkind := vk;
+ psize := size;
+ DesSize := design;
+ if (vk = VKVert) then
+ PenSize := w1
+ else
+ PenSize := w0;
+ PenSize := round (size * (MAXVECLENsp / 16.0));
+ MaxVectLen := maxveclen;
+ strcopy (vectfmnam.str, FontName.str, vectfmnam.len);
+ FontName.len := vectfmnam.len;
+ Cksum := cksm;
+ Isdefined := false;
+ DVIFontNum := GDVIFN + 1;
+ end;
+
+ GDVIFN := GDVIFN + 1;
+
+ definevectors (VFontTable[i]);
+(* someone asked for it, so they must want it, and we should fntdef it *)
+ fonttobedefined ('V', i);
+ GetVectFont := i;
+99:
+end;
+
+{----------------------------------------------------------}
+function GetLabFont (style : integer) : integer;
+label 30, 99;
+var labtfmnam : strng;
+ found, i : integer;
+ design, p1, space, p3, p4, p5, p6, p7 : ScaledPts;
+ cksm, r, k : integer;
+begin
+if (style > MAXLABELFONTS) then
+ style := 1;
+ found := 0;
+ for i := 1 to LFontsDefd do
+ with LFontTable[i]^ do
+ begin
+ if (internalnumber = style) then
+ begin
+ found := i;
+ goto 30;
+ end;
+ end;
+30:
+ if (found <> 0) then
+ begin
+ GetLabFont := found;
+ goto 99;
+ end;
+ for k := 1 to ARRLIMIT do
+ labtfmnam.str[k] := ' ';
+
+ r := 0;
+
+ labtfmnam.str[r + 1] := 'c';
+ labtfmnam.str[r + 2] := 'm';
+ case style of
+ 1: begin (* cmtt10 *)
+ labtfmnam.str[r + 3] := 't';
+ labtfmnam.str[r + 4] := 't';
+ labtfmnam.str[r + 5] := '1';
+ labtfmnam.str[r + 6] := '0';
+ k := r + 6;
+ end;
+ 2: begin (* cmb10 *)
+ labtfmnam.str[r + 3] := 'b';
+ labtfmnam.str[r + 4] := '1';
+ labtfmnam.str[r + 5] := '0';
diff --git a/macros/latex209/contrib/textyl/psrc/textyl.pas.ac b/macros/latex209/contrib/textyl/psrc/textyl.pas.ac
new file mode 100644
index 0000000000..0ec7bacff5
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/textyl.pas.ac
@@ -0,0 +1,1000 @@
+ k := r + 5;
+ end;
+ 3: begin (* cmsl10 *)
+ labtfmnam.str[r + 3] := 's';
+ labtfmnam.str[r + 4] := 'l';
+ labtfmnam.str[r + 5] := '1';
+ labtfmnam.str[r + 6] := '0';
+ k := r + 6;
+ end;
+ 4: begin (* cmtt8 *)
+ labtfmnam.str[r + 3] := 't';
+ labtfmnam.str[r + 4] := 't';
+ labtfmnam.str[r + 5] := '8';
+ k := r + 5;
+ end;
+ 5: begin (* cmsl8 *)
+ labtfmnam.str[r + 3] := 's';
+ labtfmnam.str[r + 4] := 'l';
+ labtfmnam.str[r + 5] := '8';
+ k := r + 5;
+ end;
+ end; (* case *)
+ labtfmnam.str[k + 1] := '.';
+ labtfmnam.str[k + 2] := 't';
+ labtfmnam.str[k + 3] := 'f';
+ labtfmnam.str[k + 4] := 'm';
+
+ labtfmnam.str[k+5] := chr(32);
+
+ labtfmnam.len := k + 4;
+
+ gettfm (labtfmnam, design, p1, space, p3, p4, p5, p6, p7, cksm);
+
+ LFontsDefd := LFontsDefd + 1;
+
+ if (LFontsDefd > SizLFontTable) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(labtfmnam, true);
+ writeln(logfile,'---not loadable. Size of Label Font table too small');
+ writestrng(labtfmnam,false);
+ writeln(' cannot be loaded. Too many label fonts. Table too small.');
+ jumpout;
+ end;
+
+ i := LFontsDefd;
+ new (LFontTable[i]);
+ with LFontTable[i]^ do
+ begin
+ strcopy (labtfmnam.str, FontName.str, labtfmnam.len);
+ FontName.len := labtfmnam.len;
+ Cksum := cksm;
+ DesSize := design;
+ internalnumber := style;
+ spacewidth := space;
+ DVIFontNum := GDVIFN +1;
+ Isdefined := false;
+ end; (* with *)
+
+ GDVIFN := GDVIFN + 1;
+ fonttobedefined ('L', i);
+ GetLabFont := i;
+99:
+end;
+
+
+{------------------------------------------------}
+function vectangle (dx, dy : integer) :real;
+begin
+ if (dx <> 0) then
+ vectangle := arctan (dy / (dx * 1.0)) * RADTODEG
+ else
+ begin
+ if (dy > 0) then
+ vectangle := 90.0
+ else
+ vectangle := -90.0;
+ end;
+end;
+
+
+{-----------------------------------------------------------}
+procedure definevectors (* var Vec: pVectFontInfRec *);
+var units : real;
+begin
+ units := Vec^.MaxVectLen / 16.0;
+with Vec^.FontInfo[ 0] do begin
+ Cht := round( 15.9688 * units);
+ Cdp := 0;
+ Cwd := round( 0.9981 * units);
+ Angle := 86.4237;
+end;
+
+with Vec^.FontInfo[ 1] do begin
+ Cht := round( 15.8764 * units);
+ Cdp := 0;
+ Cwd := round( 1.9846 * units);
+ Angle := 82.8750;
+end;
+
+with Vec^.FontInfo[ 2] do begin
+ Cht := round( 15.7260 * units);
+ Cdp := 0;
+ Cwd := round( 2.9486 * units);
+ Angle := 79.3803;
+end;
+
+with Vec^.FontInfo[ 3] do begin
+ Cht := round( 15.5223 * units);
+ Cdp := 0;
+ Cwd := round( 3.8806 * units);
+ Angle := 75.9638;
+end;
+
+with Vec^.FontInfo[ 4] do begin
+ Cht := round( 15.2717 * units);
+ Cdp := 0;
+ Cwd := round( 4.7724 * units);
+ Angle := 72.6460;
+end;
+
+with Vec^.FontInfo[ 5] do begin
+ Cht := round( 14.9813 * units);
+ Cdp := 0;
+ Cwd := round( 5.6180 * units);
+ Angle := 69.4440;
+end;
+
+with Vec^.FontInfo[ 6] do begin
+ Cht := round( 14.6585 * units);
+ Cdp := 0;
+ Cwd := round( 6.4131 * units);
+ Angle := 66.3706;
+end;
+
+with Vec^.FontInfo[ 7] do begin
+ Cht := round( 14.3108 * units);
+ Cdp := 0;
+ Cwd := round( 7.1554 * units);
+ Angle := 63.4349;
+end;
+
+with Vec^.FontInfo[ 8] do begin
+ Cht := round( 13.9452 * units);
+ Cdp := 0;
+ Cwd := round( 7.8442 * units);
+ Angle := 60.6422;
+end;
+
+with Vec^.FontInfo[ 9] do begin
+ Cht := round( 13.5680 * units);
+ Cdp := 0;
+ Cwd := round( 8.4800 * units);
+ Angle := 57.9946;
+end;
+
+with Vec^.FontInfo[ 10] do begin
+ Cht := round( 13.1847 * units);
+ Cdp := 0;
+ Cwd := round( 9.0645 * units);
+ Angle := 55.4915;
+end;
+
+with Vec^.FontInfo[ 11] do begin
+ Cht := round( 12.8000 * units);
+ Cdp := 0;
+ Cwd := round( 9.6000 * units);
+ Angle := 53.1301;
+end;
+
+with Vec^.FontInfo[ 12] do begin
+ Cht := round( 12.4178 * units);
+ Cdp := 0;
+ Cwd := round( 10.0895 * units);
+ Angle := 50.9061;
+end;
+
+with Vec^.FontInfo[ 13] do begin
+ Cht := round( 12.0412 * units);
+ Cdp := 0;
+ Cwd := round( 10.5361 * units);
+ Angle := 48.8141;
+end;
+
+with Vec^.FontInfo[ 14] do begin
+ Cht := round( 11.6726 * units);
+ Cdp := 0;
+ Cwd := round( 10.9431 * units);
+ Angle := 46.8476;
+end;
+
+with Vec^.FontInfo[ 15] do begin
+ Cht := round( 11.3137 * units);
+ Cdp := 0;
+ Cwd := round( 11.3137 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[ 16] do begin
+ Cht := round( 10.9431 * units);
+ Cdp := 0;
+ Cwd := round( 11.6726 * units);
+ Angle := 43.1524;
+end;
+
+with Vec^.FontInfo[ 17] do begin
+ Cht := round( 10.5361 * units);
+ Cdp := 0;
+ Cwd := round( 12.0412 * units);
+ Angle := 41.1859;
+end;
+
+with Vec^.FontInfo[ 18] do begin
+ Cht := round( 10.0895 * units);
+ Cdp := 0;
+ Cwd := round( 12.4178 * units);
+ Angle := 39.0939;
+end;
+
+with Vec^.FontInfo[ 19] do begin
+ Cht := round( 9.6000 * units);
+ Cdp := 0;
+ Cwd := round( 12.8000 * units);
+ Angle := 36.8699;
+end;
+
+with Vec^.FontInfo[ 20] do begin
+ Cht := round( 9.0645 * units);
+ Cdp := 0;
+ Cwd := round( 13.1847 * units);
+ Angle := 34.5085;
+end;
+
+with Vec^.FontInfo[ 21] do begin
+ Cht := round( 8.4800 * units);
+ Cdp := 0;
+ Cwd := round( 13.5680 * units);
+ Angle := 32.0054;
+end;
+
+with Vec^.FontInfo[ 22] do begin
+ Cht := round( 7.8442 * units);
+ Cdp := 0;
+ Cwd := round( 13.9452 * units);
+ Angle := 29.3578;
+end;
+
+with Vec^.FontInfo[ 23] do begin
+ Cht := round( 7.1554 * units);
+ Cdp := 0;
+ Cwd := round( 14.3108 * units);
+ Angle := 26.5651;
+end;
+
+with Vec^.FontInfo[ 24] do begin
+ Cht := round( 6.4131 * units);
+ Cdp := 0;
+ Cwd := round( 14.6585 * units);
+ Angle := 23.6294;
+end;
+
+with Vec^.FontInfo[ 25] do begin
+ Cht := round( 5.6180 * units);
+ Cdp := 0;
+ Cwd := round( 14.9813 * units);
+ Angle := 20.5560;
+end;
+
+with Vec^.FontInfo[ 26] do begin
+ Cht := round( 4.7724 * units);
+ Cdp := 0;
+ Cwd := round( 15.2717 * units);
+ Angle := 17.3540;
+end;
+
+with Vec^.FontInfo[ 27] do begin
+ Cht := round( 3.8806 * units);
+ Cdp := 0;
+ Cwd := round( 15.5223 * units);
+ Angle := 14.0362;
+end;
+
+with Vec^.FontInfo[ 28] do begin
+ Cht := round( 2.9486 * units);
+ Cdp := 0;
+ Cwd := round( 15.7260 * units);
+ Angle := 10.6197;
+end;
+
+with Vec^.FontInfo[ 29] do begin
+ Cht := round( 1.9846 * units);
+ Cdp := 0;
+ Cwd := round( 15.8764 * units);
+ Angle := 7.1250;
+end;
+
+with Vec^.FontInfo[ 30] do begin
+ Cht := round( 0.9981 * units);
+ Cdp := 0;
+ Cwd := round( 15.9688 * units);
+ Angle := 3.5763;
+end;
+
+with Vec^.FontInfo[ 31] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 16.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[ 32] do begin
+ Cdp := round( 0.9981 * units);
+ Cht := 0;
+ Cwd := round( 15.9688 * units);
+ Angle := -3.5763;
+end;
+
+with Vec^.FontInfo[ 33] do begin
+ Cdp := round( 1.9846 * units);
+ Cht := 0;
+ Cwd := round( 15.8764 * units);
+ Angle := -7.1250;
+end;
+
+with Vec^.FontInfo[ 34] do begin
+ Cdp := round( 2.9486 * units);
+ Cht := 0;
+ Cwd := round( 15.7260 * units);
+ Angle := -10.6197;
+end;
+
+with Vec^.FontInfo[ 35] do begin
+ Cdp := round( 3.8806 * units);
+ Cht := 0;
+ Cwd := round( 15.5223 * units);
+ Angle := -14.0362;
+end;
+
+with Vec^.FontInfo[ 36] do begin
+ Cdp := round( 4.7724 * units);
+ Cht := 0;
+ Cwd := round( 15.2717 * units);
+ Angle := -17.3540;
+end;
+
+with Vec^.FontInfo[ 37] do begin
+ Cdp := round( 5.6180 * units);
+ Cht := 0;
+ Cwd := round( 14.9813 * units);
+ Angle := -20.5560;
+end;
+
+with Vec^.FontInfo[ 38] do begin
+ Cdp := round( 6.4131 * units);
+ Cht := 0;
+ Cwd := round( 14.6585 * units);
+ Angle := -23.6294;
+end;
+
+with Vec^.FontInfo[ 39] do begin
+ Cdp := round( 7.1554 * units);
+ Cht := 0;
+ Cwd := round( 14.3108 * units);
+ Angle := -26.5651;
+end;
+
+with Vec^.FontInfo[ 40] do begin
+ Cdp := round( 7.8442 * units);
+ Cht := 0;
+ Cwd := round( 13.9452 * units);
+ Angle := -29.3578;
+end;
+
+with Vec^.FontInfo[ 41] do begin
+ Cdp := round( 8.4800 * units);
+ Cht := 0;
+ Cwd := round( 13.5680 * units);
+ Angle := -32.0054;
+end;
+
+with Vec^.FontInfo[ 42] do begin
+ Cdp := round( 9.0645 * units);
+ Cht := 0;
+ Cwd := round( 13.1847 * units);
+ Angle := -34.5085;
+end;
+
+with Vec^.FontInfo[ 43] do begin
+ Cdp := round( 9.6000 * units);
+ Cht := 0;
+ Cwd := round( 12.8000 * units);
+ Angle := -36.8699;
+end;
+
+with Vec^.FontInfo[ 44] do begin
+ Cdp := round( 10.0895 * units);
+ Cht := 0;
+ Cwd := round( 12.4178 * units);
+ Angle := -39.0939;
+end;
+
+with Vec^.FontInfo[ 45] do begin
+ Cdp := round( 10.5361 * units);
+ Cht := 0;
+ Cwd := round( 12.0412 * units);
+ Angle := -41.1859;
+end;
+
+with Vec^.FontInfo[ 46] do begin
+ Cdp := round( 10.9431 * units);
+ Cht := 0;
+ Cwd := round( 11.6726 * units);
+ Angle := -43.1524;
+end;
+
+with Vec^.FontInfo[ 47] do begin
+ Cdp := round( 11.3137 * units);
+ Cht := 0;
+ Cwd := round( 11.3137 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[ 48] do begin
+ Cdp := round ( 11.6726 * units);
+ Cht := 0;
+ Cwd := round( 10.9431 * units);
+ Angle := -46.8476;
+end;
+
+with Vec^.FontInfo[ 49] do begin
+ Cdp := round ( 12.0412 * units);
+ Cht := 0;
+ Cwd := round( 10.5361 * units);
+ Angle := -48.8141;
+end;
+
+with Vec^.FontInfo[ 50] do begin
+ Cdp := round ( 12.4178 * units);
+ Cht := 0;
+ Cwd := round( 10.0895 * units);
+ Angle := -50.9061;
+end;
+
+with Vec^.FontInfo[ 51] do begin
+ Cdp := round ( 12.8000 * units);
+ Cht := 0;
+ Cwd := round( 9.6000 * units);
+ Angle := -53.1301;
+end;
+
+with Vec^.FontInfo[ 52] do begin
+ Cdp := round ( 13.1847 * units);
+ Cht := 0;
+ Cwd := round( 9.0645 * units);
+ Angle := -55.4915;
+end;
+
+with Vec^.FontInfo[ 53] do begin
+ Cdp := round ( 13.5680 * units);
+ Cht := 0;
+ Cwd := round( 8.4800 * units);
+ Angle := -57.9946;
+end;
+
+with Vec^.FontInfo[ 54] do begin
+ Cdp := round ( 13.9452 * units);
+ Cht := 0;
+ Cwd := round( 7.8442 * units);
+ Angle := -60.6422;
+end;
+
+with Vec^.FontInfo[ 55] do begin
+ Cdp := round ( 14.3108 * units);
+ Cht := 0;
+ Cwd := round( 7.1554 * units);
+ Angle := -63.4349;
+end;
+
+with Vec^.FontInfo[ 56] do begin
+ Cdp := round ( 14.6585 * units);
+ Cht := 0;
+ Cwd := round( 6.4131 * units);
+ Angle := -66.3706;
+end;
+
+with Vec^.FontInfo[ 57] do begin
+ Cdp := round ( 14.9813 * units);
+ Cht := 0;
+ Cwd := round( 5.6180 * units);
+ Angle := -69.4440;
+end;
+
+with Vec^.FontInfo[ 58] do begin
+ Cdp := round ( 15.2717 * units);
+ Cht := 0;
+ Cwd := round( 4.7724 * units);
+ Angle := -72.6460;
+end;
+
+with Vec^.FontInfo[ 59] do begin
+ Cdp := round ( 15.5223 * units);
+ Cht := 0;
+ Cwd := round( 3.8806 * units);
+ Angle := -75.9638;
+end;
+
+with Vec^.FontInfo[ 60] do begin
+ Cdp := round ( 15.7260 * units);
+ Cht := 0;
+ Cwd := round( 2.9486 * units);
+ Angle := -79.3803;
+end;
+
+with Vec^.FontInfo[ 61] do begin
+ Cdp := round ( 15.8764 * units);
+ Cht := 0;
+ Cwd := round( 1.9846 * units);
+ Angle := -82.8750;
+end;
+
+with Vec^.FontInfo[ 62] do begin
+ Cdp := round ( 15.9688 * units);
+ Cht := 0;
+ Cwd := round( 0.9981 * units);
+ Angle := -86.4237;
+end;
+
+with Vec^.FontInfo[ 63] do begin
+ Cht := round( 8.0000 * units);
+ Cdp := 0;
+ Cwd := 0;
+ Angle := 90.0000;
+end;
+
+with Vec^.FontInfo[ 64] do begin
+ Cht := round( 7.9382 * units);
+ Cdp := 0;
+ Cwd := round( 0.9923 * units);
+ Angle := 82.8750;
+end;
+
+with Vec^.FontInfo[ 65] do begin
+ Cht := round( 7.7611 * units);
+ Cdp := 0;
+ Cwd := round( 1.9403 * units);
+ Angle := 75.9638;
+end;
+
+with Vec^.FontInfo[ 66] do begin
+ Cht := round( 7.4906 * units);
+ Cdp := 0;
+ Cwd := round( 2.8090 * units);
+ Angle := 69.4440;
+end;
+
+with Vec^.FontInfo[ 67] do begin
+ Cht := round( 7.1554 * units);
+ Cdp := 0;
+ Cwd := round( 3.5777 * units);
+ Angle := 63.4349;
+end;
+
+with Vec^.FontInfo[ 68] do begin
+ Cht := round( 6.7840 * units);
+ Cdp := 0;
+ Cwd := round( 4.2400 * units);
+ Angle := 57.9946;
+end;
+
+with Vec^.FontInfo[ 69] do begin
+ Cht := round( 6.4000 * units);
+ Cdp := 0;
+ Cwd := round( 4.8000 * units);
+ Angle := 53.1301;
+end;
+
+with Vec^.FontInfo[ 70] do begin
+ Cht := round( 6.0206 * units);
+ Cdp := 0;
+ Cwd := round( 5.2680 * units);
+ Angle := 48.8141;
+end;
+
+with Vec^.FontInfo[ 71] do begin
+ Cht := round( 5.6569 * units);
+ Cdp := 0;
+ Cwd := round( 5.6569 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[ 72] do begin
+ Cht := round( 5.2680 * units);
+ Cdp := 0;
+ Cwd := round( 6.0206 * units);
+ Angle := 41.1859;
+end;
+
+with Vec^.FontInfo[ 73] do begin
+ Cht := round( 4.8000 * units);
+ Cdp := 0;
+ Cwd := round( 6.4000 * units);
+ Angle := 36.8699;
+end;
+
+with Vec^.FontInfo[ 74] do begin
+ Cht := round( 4.2400 * units);
+ Cdp := 0;
+ Cwd := round( 6.7840 * units);
+ Angle := 32.0054;
+end;
+
+with Vec^.FontInfo[ 75] do begin
+ Cht := round( 3.5777 * units);
+ Cdp := 0;
+ Cwd := round( 7.1554 * units);
+ Angle := 26.5651;
+end;
+
+with Vec^.FontInfo[ 76] do begin
+ Cht := round( 2.8090 * units);
+ Cdp := 0;
+ Cwd := round( 7.4906 * units);
+ Angle := 20.5560;
+end;
+
+with Vec^.FontInfo[ 77] do begin
+ Cht := round( 1.9403 * units);
+ Cdp := 0;
+ Cwd := round( 7.7611 * units);
+ Angle := 14.0362;
+end;
+
+with Vec^.FontInfo[ 78] do begin
+ Cht := round( 0.9923 * units);
+ Cdp := 0;
+ Cwd := round( 7.9382 * units);
+ Angle := 7.1250;
+end;
+
+with Vec^.FontInfo[ 79] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 8.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[ 80] do begin
+ Cdp := round( 0.9923 * units);
+ Cht := 0;
+ Cwd := round( 7.9382 * units);
+ Angle := -7.1250;
+end;
+
+with Vec^.FontInfo[ 81] do begin
+ Cdp := round( 1.9403 * units);
+ Cht := 0;
+ Cwd := round( 7.7611 * units);
+ Angle := -14.0362;
+end;
+
+with Vec^.FontInfo[ 82] do begin
+ Cdp := round( 2.8090 * units);
+ Cht := 0;
+ Cwd := round( 7.4906 * units);
+ Angle := -20.5560;
+end;
+
+with Vec^.FontInfo[ 83] do begin
+ Cdp := round( 3.5777 * units);
+ Cht := 0;
+ Cwd := round( 7.1554 * units);
+ Angle := -26.5651;
+end;
+
+with Vec^.FontInfo[ 84] do begin
+ Cdp := round( 4.2400 * units);
+ Cht := 0;
+ Cwd := round( 6.7840 * units);
+ Angle := -32.0054;
+end;
+
+with Vec^.FontInfo[ 85] do begin
+ Cdp := round( 4.8000 * units);
+ Cht := 0;
+ Cwd := round( 6.4000 * units);
+ Angle := -36.8699;
+end;
+
+with Vec^.FontInfo[ 86] do begin
+ Cdp := round( 5.2680 * units);
+ Cht := 0;
+ Cwd := round( 6.0206 * units);
+ Angle := -41.1859;
+end;
+
+with Vec^.FontInfo[ 87] do begin
+ Cdp := round( 5.6569 * units);
+ Cht := 0;
+ Cwd := round( 5.6569 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[ 88] do begin
+ Cdp := round ( 6.0206 * units);
+ Cht := 0;
+ Cwd := round( 5.2680 * units);
+ Angle := -48.8141;
+end;
+
+with Vec^.FontInfo[ 89] do begin
+ Cdp := round ( 6.4000 * units);
+ Cht := 0;
+ Cwd := round( 4.8000 * units);
+ Angle := -53.1301;
+end;
+
+with Vec^.FontInfo[ 90] do begin
+ Cdp := round ( 6.7840 * units);
+ Cht := 0;
+ Cwd := round( 4.2400 * units);
+ Angle := -57.9946;
+end;
+
+with Vec^.FontInfo[ 91] do begin
+ Cdp := round ( 7.1554 * units);
+ Cht := 0;
+ Cwd := round( 3.5777 * units);
+ Angle := -63.4349;
+end;
+
+with Vec^.FontInfo[ 92] do begin
+ Cdp := round ( 7.4906 * units);
+ Cht := 0;
+ Cwd := round( 2.8090 * units);
+ Angle := -69.4440;
+end;
+
+with Vec^.FontInfo[ 93] do begin
+ Cdp := round ( 7.7611 * units);
+ Cht := 0;
+ Cwd := round( 1.9403 * units);
+ Angle := -75.9638;
+end;
+
+with Vec^.FontInfo[ 94] do begin
+ Cdp := round ( 7.9382 * units);
+ Cht := 0;
+ Cwd := round( 0.9923 * units);
+ Angle := -82.8750;
+end;
+
+with Vec^.FontInfo[ 95] do begin
+ Cdp := round ( 8.0000 * units);
+ Cht := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+with Vec^.FontInfo[ 96] do begin
+ Cht := round( 4.0000 * units);
+ Cdp := 0;
+ Cwd := 0;
+ Angle := 90.0000;
+end;
+
+with Vec^.FontInfo[ 97] do begin
+ Cht := round( 3.8806 * units);
+ Cdp := 0;
+ Cwd := round( 0.9701 * units);
+ Angle := 75.9638;
+end;
+
+with Vec^.FontInfo[ 98] do begin
+ Cht := round( 3.5777 * units);
+ Cdp := 0;
+ Cwd := round( 1.7889 * units);
+ Angle := 63.4349;
+end;
+
+with Vec^.FontInfo[ 99] do begin
+ Cht := round( 3.2000 * units);
+ Cdp := 0;
+ Cwd := round( 2.4000 * units);
+ Angle := 53.1301;
+end;
+
+with Vec^.FontInfo[100] do begin
+ Cht := round( 2.8284 * units);
+ Cdp := 0;
+ Cwd := round( 2.8284 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[101] do begin
+ Cht := round( 2.4000 * units);
+ Cdp := 0;
+ Cwd := round( 3.2000 * units);
+ Angle := 36.8699;
+end;
+
+with Vec^.FontInfo[102] do begin
+ Cht := round( 1.7889 * units);
+ Cdp := 0;
+ Cwd := round( 3.5777 * units);
+ Angle := 26.5651;
+end;
+
+with Vec^.FontInfo[103] do begin
+ Cht := round( 0.9701 * units);
+ Cdp := 0;
+ Cwd := round( 3.8806 * units);
+ Angle := 14.0362;
+end;
+
+with Vec^.FontInfo[104] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 4.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[105] do begin
+ Cdp := round( 0.9701 * units);
+ Cht := 0;
+ Cwd := round( 3.8806 * units);
+ Angle := -14.0362;
+end;
+
+with Vec^.FontInfo[106] do begin
+ Cdp := round( 1.7889 * units);
+ Cht := 0;
+ Cwd := round( 3.5777 * units);
+ Angle := -26.5651;
+end;
+
+with Vec^.FontInfo[107] do begin
+ Cdp := round( 2.4000 * units);
+ Cht := 0;
+ Cwd := round( 3.2000 * units);
+ Angle := -36.8699;
+end;
+
+with Vec^.FontInfo[108] do begin
+ Cdp := round( 2.8284 * units);
+ Cht := 0;
+ Cwd := round( 2.8284 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[109] do begin
+ Cdp := round ( 3.2000 * units);
+ Cht := 0;
+ Cwd := round( 2.4000 * units);
+ Angle := -53.1301;
+end;
+
+with Vec^.FontInfo[110] do begin
+ Cdp := round ( 3.5777 * units);
+ Cht := 0;
+ Cwd := round( 1.7889 * units);
+ Angle := -63.4349;
+end;
+
+with Vec^.FontInfo[111] do begin
+ Cdp := round ( 3.8806 * units);
+ Cht := 0;
+ Cwd := round( 0.9701 * units);
+ Angle := -75.9638;
+end;
+
+with Vec^.FontInfo[112] do begin
+ Cdp := round ( 4.0000 * units);
+ Cht := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+with Vec^.FontInfo[113] do begin
+ Cht := round( 2.0000 * units);
+ Cdp := 0;
+ Cwd := 0;
+ Angle := 90.0000;
+end;
+
+with Vec^.FontInfo[114] do begin
+ Cht := round( 1.7889 * units);
+ Cdp := 0;
+ Cwd := round( 0.8944 * units);
+ Angle := 63.4349;
+end;
+
+with Vec^.FontInfo[115] do begin
+ Cht := round( 1.4142 * units);
+ Cdp := 0;
+ Cwd := round( 1.4142 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[116] do begin
+ Cht := round( 0.8944 * units);
+ Cdp := 0;
+ Cwd := round( 1.7889 * units);
+ Angle := 26.5651;
+end;
+
+with Vec^.FontInfo[117] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 2.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[118] do begin
+ Cdp := round( 0.8944 * units);
+ Cht := 0;
+ Cwd := round( 1.7889 * units);
+ Angle := -26.5651;
+end;
+
+with Vec^.FontInfo[119] do begin
+ Cdp := round( 1.4142 * units);
+ Cht := 0;
+ Cwd := round( 1.4142 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[120] do begin
+ Cdp := round ( 1.7889 * units);
+ Cht := 0;
+ Cwd := round( 0.8944 * units);
+ Angle := -63.4349;
+end;
+
+with Vec^.FontInfo[121] do begin
+ Cdp := round ( 2.0000 * units);
+ Cht := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+with Vec^.FontInfo[122] do begin
+ Cht := round( 1.0000 * units);
+ Cdp := 0;
+ Cwd := 0;
+ Angle := 90.0000;
+end;
+
+with Vec^.FontInfo[123] do begin
+ Cht := round( 0.7071 * units);
+ Cdp := 0;
+ Cwd := round( 0.7071 * units);
+ Angle := 45.0000;
+end;
+
+with Vec^.FontInfo[124] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := round( 1.0000 * units);
+ Angle := 0.0000;
+end;
+
+with Vec^.FontInfo[125] do begin
+ Cdp := round( 0.7071 * units);
+ Cht := 0;
+ Cwd := round( 0.7071 * units);
+ Angle := -45.0000;
+end;
+
+with Vec^.FontInfo[126] do begin
+ Cdp := round ( 1.0000 * units);
+ Cht := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+with Vec^.FontInfo[127] do begin
+ Cht := 0;
+ Cdp := 0;
+ Cwd := 0;
+ Angle := -90.0000;
+end;
+
+end; (* define vectors *)
+
+
+
+
+{-------------------------------------------------}
+(* If, for some reason, you do not want to deal with
+ music capabilities, replace the body of this procedure
+ with just a begin end; pair and also the TylBeam proc.
+*)
+procedure definebeams (* var M : pMusFontInfRec *);
+var i : integer;
+ begin
+
+end;
+
+{----------------------------------------------------------}
+(* use pre-calculated coordinates of a circle that has a
diff --git a/macros/latex209/contrib/textyl/psrc/textyl.pas.ad b/macros/latex209/contrib/textyl/psrc/textyl.pas.ad
new file mode 100644
index 0000000000..e7f93892da
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/textyl.pas.ad
@@ -0,0 +1,1000 @@
+ * given unit-radius. Scale those points to fit the desired radius
+ *)
+procedure defineCircleCpts (rad : ScaledPts; centx, centy : ScaledPts;
+ var CircleCpt : ControlPoints;
+ var numpts : integer);
+const UnitRadius = 16777216; (* TWO24 scaledpts *)
+var ratio : real;
+begin
+ if (rad = 0) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Error in fig#',pgfigurenum:0,' on page ',currpagenum:0);
+ writeln(logfile,'Zero length radius for circle! Setting to 1 sp');
+ rad := 1;
+ end;
+ ratio := float(rad) / float(UnitRadius);
+ numpts := 16;
+ CircleCpt[1,1] := round (ratio * 16777216.00000) + centx;
+ CircleCpt[1,2] := 0 + centy; {round (ratio * 0.00000)}
+ CircleCpt[2,1] := round (ratio * 15500126.47492) + centx;
+ CircleCpt[2,2] := round (ratio * 6420362.60441) + centy;
+ CircleCpt[3,1] := round (ratio * 11863283.20303) + centx;
+ CircleCpt[3,2] := round (ratio * 11863283.20303) + centy;
+ CircleCpt[4,1] := round (ratio * 6420362.60441) + centx;
+ CircleCpt[4,2] := round (ratio * 15500126.47492) + centy;
+ CircleCpt[5,1] := 0 + centx; {round (ratio * -0.00000) }
+ CircleCpt[5,2] := round (ratio * 16777216.00000) + centy;
+ CircleCpt[6,1] := round (ratio * -6420362.60441) + centx;
+ CircleCpt[6,2] := round (ratio * 15500126.47492) + centy;
+ CircleCpt[7,1] := round (ratio * -11863283.20303) + centx;
+ CircleCpt[7,2] := round (ratio * 11863283.20303) + centy;
+ CircleCpt[8,1] := round (ratio * -15500126.47492) + centx;
+ CircleCpt[8,2] := round (ratio * 6420362.60441) + centy;
+ CircleCpt[9,1] := round (ratio * -16777216.00000) + centx;
+ CircleCpt[9,2] := 0 + centy; {round (ratio * -0.00000)}
+ CircleCpt[10,1] := round (ratio * -15500126.47492) + centx;
+ CircleCpt[10,2] := round (ratio * -6420362.60441) + centy;
+ CircleCpt[11,1] := round (ratio * -11863283.20303) + centx;
+ CircleCpt[11,2] := round (ratio * -11863283.20303) + centy;
+ CircleCpt[12,1] := round (ratio * -6420362.60441) + centx;
+ CircleCpt[12,2] := round (ratio * -15500126.47492) + centy;
+ CircleCpt[13,1] := 0 + centx; {round (ratio * 0.00000) }
+ CircleCpt[13,2] := round (ratio * -16777216.00000) + centy;
+ CircleCpt[14,1] := round (ratio * 6420362.60441) + centx;
+ CircleCpt[14,2] := round (ratio * -15500126.47492) + centy;
+ CircleCpt[15,1] := round (ratio * 11863283.20303) + centx;
+ CircleCpt[15,2] := round (ratio * -11863283.20303) + centy;
+ CircleCpt[16,1] := round (ratio * 15500126.47492) + centx;
+ CircleCpt[16,2] := round (ratio * -6420362.60441) + centy;
+ (* create the pre-list phantom *)
+ CircleCpt[0,1] := CircleCpt[16,1];
+ CircleCpt[0,2] := CircleCpt[16,2];
+end;
+
+
+{---------------------------------------------------------------}
+(* compute control points for an arc going from startangle to
+ * stopangle, centered at (centx, centy)
+ *)
+procedure definearcpts (rad : ScaledPts; centx, centy : ScaledPts;
+ startang, stopang : integer;
+ var cpts : ControlPoints;
+ var nknots : integer);
+var n : integer;
+ a, b, curr, delta: real;
+ i : integer;
+begin
+ a := startang * DEGTORAD;
+ b := stopang * DEGTORAD;
+ n := 16;
+
+ if (a > b) then
+ begin
+ a := a - (2 * PI);
+ end;
+
+ delta := abs(b - a) / n;
+
+ if (a = b) then
+ begin
+ complain (ERRNOTBAD);
+ writeln(logfile,'Error in compute arc points:: should be a circle');
+ end;
+ curr := a;
+ i := 1;
+ while ((curr <= b)) do
+ begin (* make arc about (centx,centy) *)
+ cpts[i,1] := round (rad * cos (curr)) + centx;
+ cpts[i,2] := round (rad * sin (curr)) + centy;
+ i := i + 1;
+ curr := curr + delta;
+ end; (* while *)
+
+(* go one point beyond --
+ * around the arc so that we can have good smoothness
+ * for this phantom point
+ *)
+
+ cpts[i,1] := round (rad * cos (b + delta)) + centx;
+ cpts[i,2] := round (rad * sin (b + delta)) + centy;
+
+(* and one phantom point before the list *)
+ cpts[0,1] := round (rad * cos (a - delta)) + centx;
+ cpts[0,2] := round (rad * sin (a - delta)) + centy;
+
+
+ nknots := i-1;
+end;
+
+
+
+(* &&Module spline.p *)
+(*
+ Procedures below may make free use of the global variables
+ arrayXY [list of control points]
+ pointmatrix [list of spline segments]
+ knot [list of spline knots]
+ catrommtx [matrix for Catmull-Rom splines]
+ bsplmtx [matrix for B-splines]
+ lastPoint, intervals
+*)
+
+
+{-----------------------------------------------------}
+function max (a, b: integer):integer;
+begin
+ if (a > b) then
+ max := a
+ else
+ max := b;
+end;
+
+{-----------------------------------------------------}
+function min (a, b: integer):integer;
+begin
+ if (a < b) then
+ min := a
+ else
+ min := b;
+end;
+
+{---------------------------------------------------------------------}
+(* initialize the Catmull-Rom basis matrix *)
+
+procedure initcrmatrix;
+begin
+ catrommtx[1,1] := -0.5; catrommtx[1,2] := 1.5;
+ catrommtx[1,3] := -1.5; catrommtx[1,4] := 0.5;
+ catrommtx[2,1] := 1.0; catrommtx[2,2] := -2.5;
+ catrommtx[2,3] := 2.0; catrommtx[2,4] := -0.5;
+ catrommtx[3,1] := -0.5; catrommtx[3,2] := 0.0;
+ catrommtx[3,3] := 0.5; catrommtx[3,4] := 0.0;
+ catrommtx[4,1] := 0.0; catrommtx[4,2] := 1.0;
+ catrommtx[4,3] := 0.0; catrommtx[4,4] := 0.0;
+end;
+
+{-----------------------------------------------------}
+procedure initbsplmatrix;
+begin
+ bsplmtx[1,1] := -1.0/6.0; bsplmtx[1,2] := 0.5;
+ bsplmtx[1,3] := -0.5; bsplmtx[1,4] := 1.0/6.0;
+ bsplmtx[2,1] := 0.5; bsplmtx[2,2] := -1.0;
+ bsplmtx[2,3] := 0.5; bsplmtx[2,4] := 0.0;
+ bsplmtx[3,1] := -0.5; bsplmtx[3,2] := 0.0;
+ bsplmtx[3,3] := 0.5; bsplmtx[3,4] := 0.0;
+ bsplmtx[4,1] := 1.0/6.0; bsplmtx[4,2] := 2.0/3.0;
+ bsplmtx[4,3] := 1.0/6.0; bsplmtx[4,4] := 0.0;
+end;
+
+{--------------------------------------------------------}
+(* init the Cardinal Spline Matrix *)
+procedure initcardmatrix;
+begin
+ cardmtx[1,1] := -1.0; cardmtx[1,2] := 1.0;
+ cardmtx[1,3] := -1.0; cardmtx[1,4] := 1.0;
+ cardmtx[2,1] := 2.0; cardmtx[2,2] := -2.0;
+ cardmtx[2,3] := 1.0; cardmtx[2,4] := -1.0;
+ cardmtx[3,1] := -1.0; cardmtx[3,2] := 0.0;
+ cardmtx[3,3] := 1.0; cardmtx[3,4] := 0.0;
+ cardmtx[4,1] := 0.0; cardmtx[4,2] := 1.0;
+ cardmtx[4,3] := 0.0; cardmtx[4,4] := 0.0;
+end;
+
+{--------------------------------------------------------}
+procedure initallspline;
+ begin
+ initcrmatrix;
+ initbsplmatrix;
+ initcardmatrix;
+ end;
+
+
+{-----------------------------------------------------}
+procedure matXvector (var m: Fourby4Matrix; (* IN *)
+ var v: Oneby4Vector; (* IN *)
+ var result: Oneby4Vector); (* OUT *)
+var t: Oneby4Vector;
+begin
+ t[1] := v[1]*m[1,1] + v[2]*m[1,2] + v[3]*m[1,3] + v[4]*m[1,4];
+ t[2] := v[1]*m[2,1] + v[2]*m[2,2] + v[3]*m[2,3] + v[4]*m[2,4];
+ t[3] := v[1]*m[3,1] + v[2]*m[3,2] + v[3]*m[3,3] + v[4]*m[3,4];
+ t[4] := v[1]*m[4,1] + v[2]*m[4,2] + v[3]*m[4,3] + v[4]*m[4,4];
+ result[1] := t[1]; result[2] := t[2];
+ result[3] := t[3]; result[4] := t[4];
+end;
+
+{-----------------------------------------------------}
+(* actually the dot-product *)
+function vecXvec (var v1, v2: Oneby4Vector) : real;
+begin
+ vecXvec := v1[1]*v2[1] + v1[2]*v2[2] + v1[3]*v2[3] + v1[4]*v2[4];
+end;
+
+
+{------------------------------------------------------}
+(* basXctl is the pre-computed BasisMatrix times the control-point vector *)
+
+function splinePosition (var basXctl : Oneby4Vector; (* IN *)
+ t : real ) : real;
+var tvect : Oneby4Vector; { vector of t values for spline matrix}
+begin
+ tvect[4] := 1.0;
+ tvect[3] := t;
+ tvect[2] := t * t;
+ if (tvect[2] <= MINREAL) then
+ begin (* avoid underflow problems *)
+ tvect[2] := 0.0;
+ end;
+ tvect[1] := t * tvect[2]; (* t^3 *)
+ splinePosition := vecXvec (tvect, basXctl);
+end;
+
+{-------------------------------------------------}
+function TwoToThe (n : integer) : integer;
+label 78;
+var i : integer;
+ tmp : integer;
+begin
+tmp := 1;
+if (n <= 0) then
+ goto 78;
+if (n < 6) then
+ begin
+ case n of
+ 1 : tmp := 2;
+ 2 : tmp := 4;
+ 3 : tmp := 8;
+ 4 : tmp := 16;
+ 5 : tmp := 32;
+ end; (* case *)
+ end (* if *)
+else
+ begin
+ tmp := 32;
+ for i := 6 to n do
+ tmp := tmp * 2;
+ end;
+78:
+ TwoToThe := tmp;
+end;
+
+{------------------------------------------------------}
+function distance (x0, y0, x1, y1 : real) : real;
+var res : real;
+begin
+ res := sqrt ( (x1 - x0)*(x1 - x0) + (y1 - y0)*(y1 - y0));
+ distance := res;
+end;
+
+
+{------------------------------------------------------}
+(* compute the number of subdivisions for this span.
+ We do this by a quadrature method and a simple linear-distance
+ metric. This is not optimal in the number of subdivisions actually
+ required, but is computationally efficient and accurate to the
+ nearest power of 2 .
+ *)
+function numsubdivisions (var XtimesBas, YtimesBas : Oneby4Vector;
+ resolution : ScaledPts): integer;
+var n : integer;
+ d : integer;
+ t : real;
+ x0, y0, xt, yt : real;
+begin
+ x0 := splinePosition (XtimesBas, 0.0);
+ y0 := splinePosition (YtimesBas, 0.0);
+
+ t := 1.0;
+ n := 0;
+ xt := splinePosition (XtimesBas, t);
+ yt := splinePosition (YtimesBas, t);
+
+ while ((round (distance (x0, y0, xt, yt)) > resolution) or
+ (n < 1)) do
+ begin
+ t := t / 2.0; (* perform the quadrature *)
+ n := n + 1;
+ xt := splinePosition (XtimesBas, t);
+ yt := splinePosition (YtimesBas, t);
+ end; (* while *)
+ numsubdivisions := TwoToThe (n);
+end;
+
+{------------------------------------------------------------------------}
+(* compute new control vertices such that the resulting spline
+ * will interpolate through the old control points.
+ * This will work as long as the actual arc length
+ * between consecutive nodes does not vary from span to span.
+ * The method is noted in Wu and Abel's CACM 20(10) Oct 77 paper
+ * but the actual working method is from
+ * Barsky and Greenberg's paper in
+ * CG&IP 14(3) Nov 1980 pp.203-226
+ *)
+procedure invertsplvertices (numpts : integer;
+ isclosed : boolean;
+ var xys : ControlPoints); (* INOUT *)
+var i : integer;
+ beta, Xrprime, Yrprime : array[0..MAXCTLPTS] of real;
+ tempxys : ControlPoints;
+begin
+ (* compute the values of beta *)
+ beta[1] := 0.25;
+ for i := 2 to numpts + 1 do
+ beta[i] := 1.0 / (4.0 - beta[i - 1]);
+
+ (* and the r primes from the original vertices *)
+ Xrprime[1] := beta[1] * xys[1,1] * 5.0;
+ Yrprime[1] := beta[1] * xys[1,2] * 5.0;
+ for i := 2 to numpts -1 do
+ begin
+ Xrprime[i] := beta[i] * (6.0 * xys[i,1] - Xrprime[i - 1]);
+ Yrprime[i] := beta[i] * (6.0 * xys[i,2] - Yrprime[i - 1]);
+ end; (* for *)
+ Xrprime[numpts] := beta[numpts] * (5.0 * xys[numpts,1] - Xrprime[numpts - 1]);
+ Yrprime[numpts] := beta[numpts] * (5.0 * xys[numpts,2] - Yrprime[numpts - 1]);
+
+(* Now perform the back-substitution from the bottom up *)
+ tempxys[numpts,1] := round (Xrprime[numpts]);
+ tempxys[numpts,2] := round (Yrprime[numpts]);
+ for i := numpts - 1 downto 1 do
+ begin
+ tempxys[i,1] := round (Xrprime[i] - beta[i] * tempxys[i + 1, 1]);
+ tempxys[i,2] := round (Yrprime[i] - beta[i] * tempxys[i + 1, 2]);
+ end;
+
+if (isclosed) then
+ begin
+ (* at this point, we've probably been through one control-point
+ * adjustment, so let's not muck it up
+ *)
+ tempxys[numpts+1,1] := tempxys[1,1];
+ tempxys[numpts+1,2] := tempxys[1,2];
+ tempxys[numpts+2,1] := tempxys[2,1];
+ tempxys[numpts+2,2] := tempxys[2,2];
+ tempxys[0,1] := tempxys[numpts,1];
+ tempxys[0,2] := tempxys[numpts,2];
+ (* copy them back *)
+ for i := 0 to (numpts+2) do
+ begin
+ xys[i,1] := tempxys[i,1];
+ xys[i,2] := tempxys[i,2];
+ end;
+ end (* closed *)
+else
+ begin
+ (* copy back *)
+ for i := 2 to numpts -1 do
+ begin
+ xys[i,1] := tempxys[i,1];
+ xys[i,2] := tempxys[i,2];
+ end;
+ end; (* open*)
+end;
+
+
+{-----------------------------------------------------}
+(* adjust the list of control points so that we can use
+ * it for B-spline interpolation.
+ * Add any "phantom" vertices necessary so that the end
+ * conditions will be correct for interpolation
+ *)
+procedure Bctlptadjust (isclosed : boolean; isarc : boolean;
+ var n: integer; (* INOUT *)
+ var xys: ControlPoints; (* INOUT *)
+ var thx: ThickAryType); (* INOUT *)
+var j : integer;
+ tmp : ControlPoints;
+ tmpthx : ThickAryType;
+begin (* ctlpt adjust*)
+
+if (isclosed) then
+ begin
+(* here, we have to supply the last 'real' point for the user,
+ and add three phantoms-- one before, and two after *)
+
+ if (n = 2) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'A closed spline requires more than 2 control points ');
+ writeln(logfile,'making a temporary fix in order to continue...');
+ xys[3,1] := xys[1,1];
+ xys[3,2] := xys[1,2];
+ end;
+
+ for j := 1 to (n) do
+ begin
+ tmp[j, 1] := xys[j, 1];
+ tmp[j, 2] := xys[j, 2];
+ tmpthx[j] := thx[j];
+ end;
+ (* Now take care of the 'phantom' vertices *)
+ tmp[n+1, 1] := xys[1, 1];
+ tmp[n+1, 2] := xys[1, 2];
+ tmpthx[n+1] := thx[1];
+ tmp[n+2, 1] := xys[2, 1];
+ tmp[n+2, 2] := xys[2, 2];
+ tmpthx[n+2] := thx[2];
+ tmp[n+3, 1] := xys[3, 1];
+ tmp[n+3, 2] := xys[3, 2];
+ tmpthx[n+3] := thx[3];
+
+ if (not isarc) then
+ begin
+ tmp[0,1] := xys[n, 1]; (* wrap around to the real last point *)
+ tmp[0,2] := xys[n, 2];
+ tmpthx[0] := thx[n];
+ end
+ else
+ begin
+ tmp[0,1] := xys[0,1];
+ tmp[0,2] := xys[0,2];
+ tmpthx[0] := thx[0];
+ end;
+
+ n := n + 1; (* we supplied the 'last' point for the user *)
+
+ for j := 0 to n+2 do
+ begin
+ xys[j,1] := tmp[j,1];
+ xys[j,2] := tmp[j,2];
+ thx[j] := tmpthx[j];
+ end; (* for *)
+ end (* if closed *)
+else
+ begin (* OPEN SPLINE *)
+ if (not isarc) then
+ begin
+ tmp[0,1] := 2 * xys[1, 1] - xys[2,1];
+ tmp[0,2] := 2 * xys[1, 2] - xys[2,2];
+ end
+ else
+ begin
+ tmp[0,1] := xys[0,1];
+ tmp[0,2] := xys[0,2];
+ end;
+ tmpthx[0] := thx[1];
+
+ for j := 1 to (n) do
+ begin
+ tmp[j, 1] := xys[j, 1];
+ tmp[j, 2] := xys[j, 2];
+ tmpthx[j] := thx[j];
+ end;
+
+ tmp[n+1, 1] := 2 * xys[n, 1] - xys[n-1,1];
+ tmp[n+1, 2] := 2 * xys[n, 2] - xys[n-1,2];
+ tmpthx[n+1] := thx[n];
+
+ tmp[n+2, 1] := tmp[n+1, 1];
+ tmp[n+2, 2] := tmp[n+1, 2];
+ tmpthx[n+2] := thx[n];
+
+ for j := 0 to n+2 do
+ begin
+ xys[j,1] := tmp[j,1];
+ xys[j,2] := tmp[j,2];
+ thx[j] := tmpthx[j];
+ end; (* for *)
+ end; (* if open *)
+
+end;
+
+
+
+{-----------------------------------------------------}
+(* adjust the list of control points so that we can use
+ * it for simple Catmull-Rom spline interpolation.
+ * Add any "phantom" vertices necessary so that the end
+ * conditions will be correct for interpolation
+ *)
+procedure CRctlptadjust (isclosed : boolean; isarc : boolean;
+ var n: integer; (* INOUT *)
+ var xys: ControlPoints; (* INOUT *)
+ var thx: ThickAryType); (* INOUT *)
+var j : integer;
+ tmp : ControlPoints;
+ tmpthx : ThickAryType;
+begin (* ctlpt adjust*)
+if (isclosed) then
+ begin
+(* here, we have to supply the last 'real' point for the user,
+ and add three phantoms-- one before, and two after *)
+
+ if (n = 2) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'A closed spline requires more than 2 control points ');
+ writeln(logfile,'making a temporary fix in order to continue...');
+ xys[3,1] := xys[1,1];
+ xys[3,2] := xys[1,2];
+ end;
+
+
+ for j := 1 to (n) do
+ begin
+ tmp[j, 1] := xys[j, 1];
+ tmp[j, 2] := xys[j, 2];
+ tmpthx[j] := thx[j];
+ end;
+ (* the phantom vertices *)
+ tmp[n+1, 1] := xys[1, 1];
+ tmp[n+1, 2] := xys[1, 2];
+ tmpthx[n+1] := thx[1];
+ tmp[n+2, 1] := xys[2, 1];
+ tmp[n+2, 2] := xys[2, 2];
+ tmpthx[n+2] := thx[2];
+ tmp[n+3, 1] := xys[3, 1];
+ tmp[n+3, 2] := xys[3, 2];
+ tmpthx[n+3] := thx[3];
+
+ if (not isarc) then
+ begin
+ tmp[0,1] := xys[n, 1]; (* wrap around to the real last point *)
+ tmp[0,2] := xys[n, 2];
+ tmpthx[0] := thx[n];
+ end
+ else
+ begin
+ tmp[0,1] := xys[0,1];
+ tmp[0,2] := xys[0,2];
+ tmpthx[0] := thx[0];
+ end;
+ n := n + 1; (* we supplied the 'last' point for the user *)
+
+ for j := 0 to n+2 do
+ begin
+ xys[j,1] := tmp[j,1];
+ xys[j,2] := tmp[j,2];
+ thx[j] := tmpthx[j];
+ end; (* for *)
+ end (* if closed *)
+else
+ begin (* OPEN SPLINE *)
+ if (not isarc) then
+ begin
+ tmp[0,1] := xys[1, 1]; (* double the first point *)
+ tmp[0,2] := xys[1, 2];
+ end
+ else
+ begin
+ tmp[0,1] := xys[0,1];
+ tmp[0,2] := xys[0,2];
+ end;
+ tmpthx[0] := thx[1];
+
+ for j := 1 to (n) do
+ begin
+ tmp[j, 1] := xys[j, 1];
+ tmp[j, 2] := xys[j, 2];
+ tmpthx[j] := thx[j];
+ end;
+
+ tmp[n+1, 1] := xys[n, 1]; (* and triple the last *)
+ tmp[n+1, 2] := xys[n, 2];
+ tmpthx[n+1] := thx[n];
+ tmp[n+2, 1] := xys[n, 1];
+ tmp[n+2, 2] := xys[n, 2];
+ tmpthx[n+2] := thx[n];
+
+ for j := 0 to n+2 do
+ begin
+ xys[j,1] := tmp[j,1];
+ xys[j,2] := tmp[j,2];
+ thx[j] := tmpthx[j];
+ end; (* for *)
+ end; (* if open *)
+end; (* ctlpt adjust *)
+
+
+
+{----------------------------------------------------------}
+
+procedure interpsplines (splinetype: SplineKind;
+ isclosed: boolean;
+ isanArc: boolean;
+ linepatt : LineStyle;
+ var basismatrix : Fourby4Matrix; (* IN *)
+ numctls: integer;
+ var arrayXY: ControlPoints; (* IN *)
+ var pointmatrix: SplineSegments; (* OUT *)
+ varythicks: boolean;
+ var thickmatrix: ThickAryType; (* IN *)
+ var TTmatrix: ThickAryType); (* OUT *)
+label 32;
+var xctl, yctl, { vectors of x, y posits of control points}
+ wctl : Oneby4Vector; {vector of thicknesses at each ctl pt}
+ t, incr: real;
+ Pi: integer; { P sub i }
+ i, currpt : integer;
+ theresolution : ScaledPts;
+
+begin (* interp splines*)
+ if ((not isclosed) and (isanArc)) then
+ numctls := numctls + 1; (* lie a little *)
+
+ case (splinetype) of
+
+ BSPL: Bctlptadjust (isclosed, isanArc, numctls, arrayXY, thickmatrix);
+
+ CARD,
+ CATROM: CRctlptadjust (isclosed, isanArc, numctls, arrayXY, thickmatrix);
+
+ INTBSPL: begin
+ if (isclosed) then
+ begin
+ Bctlptadjust (true, isanArc, numctls, arrayXY, thickmatrix);
+ invertsplvertices (numctls, true, arrayXY);
+ end
+ else
+ begin
+ invertsplvertices (numctls, false, arrayXY);
+ Bctlptadjust (false, isanArc, numctls, arrayXY, thickmatrix);
+ end; (* else *)
+ end; (* Interpolating Bsplines *)
+ end;
+
+ if ((not isclosed) and (isanArc)) then
+ numctls := numctls - 1; (* UN-lie a little *)
+
+
+(* this is the scheme:
+ * val := t-vector * Basis matrix * point matrix
+ * [t^3 t^2 t 1] * [[Ms]] * [Pi-1 Pi Pi+1 Pi+2]
+ * where "Pi-1" is "P sub (i-1)", etc.
+ *
+ * But we do this in a round about way:
+ * Point matrix * basis
+ * then * t-vector will yield the single value
+ *
+ * there are certainly faster ways to do this,
+ * but this is the easiest to understand
+ *)
+
+ currpt := 1;
+ case linepatt of
+ solid : theresolution := MAXVECLENsp;
+ dotted,
+ dashed,
+ dotdash : theresolution := 3 * MAXVECLENsp; {###}
+ end;
+
+ for Pi := 1 to (numctls - 1) do
+ begin
+ xctl[1] := float(arrayXY[Pi-1, 1]);
+ xctl[2] := float(arrayXY[Pi, 1]);
+ xctl[3] := float(arrayXY[Pi+1, 1]);
+ xctl[4] := float(arrayXY[Pi+2, 1]);
+ yctl[1] := float(arrayXY[Pi-1, 2]);
+ yctl[2] := float(arrayXY[Pi, 2]);
+ yctl[3] := float(arrayXY[Pi+1, 2]);
+ yctl[4] := float(arrayXY[Pi+2, 2]);
+ matXvector (basismatrix, xctl, xctl);
+ matXvector (basismatrix, yctl, yctl);
+
+ (* compute the delta-t increment for this segment
+ based on a metric for subdivision *)
+ intervals := numsubdivisions (xctl, yctl, theresolution);
+ if ((linepatt = solid) and (intervals <= 2)) then
+ intervals := intervals * 2;
+ incr := 1.0 / intervals;
+
+ (* avoid over-flowing the "pointmatrix" *)
+ if ((currpt + intervals - 1) >= MAXSPLINESEGS) then
+ begin
+ complain (ERRREALBAD);
+ writeln (logfile,'error: Too many spline segments required.');
+ writeln (logfile,' Reducing the number of control points to get output.');
+ goto 32;
+ end;
+
+ t := 0.0;
+ while (t < 0.999999999) do
+ begin
+ pointmatrix[currpt, 1] := round (splinePosition (xctl, t));
+ pointmatrix[currpt, 2] := round (splinePosition (yctl, t));
+
+ if (varythicks) then
+ begin
+ wctl[1] := float(thickmatrix[Pi-1]);
+ wctl[2] := float(thickmatrix[Pi ]);
+ wctl[3] := float(thickmatrix[Pi+1]);
+ wctl[4] := float(thickmatrix[Pi+2]);
+ matXvector (catrommtx, wctl, wctl); (* requires using Catmull-Rom *)
+ TTmatrix[currpt] := round (splinePosition (wctl, t));
+ end;
+
+ t := t + incr;
+ currpt := currpt + 1;
+ end; (* while loop *)
+
+
+ end; (* for loop *)
+
+32:
+ (* the END-condtion *)
+ pointmatrix[currpt, 1] := round (splinePosition (xctl, 1.0));
+ pointmatrix[currpt, 2] := round (splinePosition (yctl, 1.0));
+ if (varythicks) then
+ begin
+ wctl[1] := thickmatrix[numctls-2];
+ wctl[2] := thickmatrix[numctls-1];
+ wctl[3] := thickmatrix[numctls];
+ wctl[4] := thickmatrix[numctls+1];
+ matXvector (catrommtx, wctl, wctl); (* requires using Catmull-Rom *)
+ TTmatrix[currpt] := round (splinePosition (wctl, 1.0));
+ end;
+
+ lastPoint := currpt;
+
+end; (* interpsplines *)
+
+
+{----------------------------------------------------------------}
+procedure drawSpline (splinetype : SplineKind;
+ isclosed: boolean;
+ isanArc: boolean;
+ patt : LineStyle;
+ numctls: integer;
+ var arrayXY: ControlPoints; (* IN *)
+ var pointmatrix: SplineSegments; (* OUT *)
+ varythicks: boolean;
+ var thickmatrix: ThickAryType; (* IN *)
+ var TTmatrix: ThickAryType); (* OUT *)
+begin
+ lastPoint := 0;
+
+
+ case (splinetype) of
+ CATROM : interpsplines (splinetype, isclosed, isanArc, patt, catrommtx,
+ numctls, arrayXY, pointmatrix,
+ varythicks, thickmatrix, TTmatrix);
+
+ CARD : interpsplines (splinetype, isclosed, isanArc, patt, cardmtx,
+ numctls, arrayXY, pointmatrix,
+ varythicks, thickmatrix, TTmatrix);
+
+ BSPL : interpsplines (splinetype, isclosed, isanArc, patt, bsplmtx,
+ numctls, arrayXY, pointmatrix,
+ varythicks, thickmatrix, TTmatrix);
+
+ INTBSPL : interpsplines (splinetype, isclosed, isanArc, patt, bsplmtx,
+ numctls, arrayXY, pointmatrix,
+ varythicks, thickmatrix, TTmatrix);
+ end; (*Case *)
+end;
+
+
+(* &&module TeXtyl *)
+{----------------------------------------------------------------}
+(* rotate a (x,y) point about mx, my *)
+procedure ptrotate (var x, y : integer;
+ mx, my: integer;
+ angle : real);
+var tmpx, tmpy : integer;
+ cosa, sina : real;
+begin
+ tmpx := x - mx;
+ tmpy := y - my;
+ cosa := cos(angle * DEGTORAD);
+ sina := sin(angle * DEGTORAD);
+ x := round(tmpx * cosa - tmpy * sina) + mx;
+ y := round(tmpx * sina + tmpy * cosa) + my;
+end;
+
+{----------------------------------------------------------------}
+(* transform two line points: scale, rotate and translate
+*)
+procedure xfmlinepts (var x1, y1, x2, y2 : ScaledPts;
+ offh, offv : ScaledPts;
+ midx, midy : ScaledPts;
+ scalefact : real;
+ theta : real;
+ dx, dy : ScaledPts;
+ sx, sy : real);
+begin
+ if ((sx = 0.0) or (sy = 0.0)) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'?? Some scale factor is Zero... continuing anyway');
+ end;
+ (* scale about center of item*)
+ if ((sx <> 1.0) or (sy <> 1.0)) then
+ begin
+ x1 := round((x1 - midx) * sx) + midx;
+ x2 := round((x2 - midx) * sx) + midx;
+ y1 := round((y1 - midy) * sy) + midy;
+ y2 := round((y2 - midy) * sy) + midy;
+ end;
+ (* rotate if necessary *)
+ if (theta <> 0.0) then
+ begin (* rotate about the midpoint *)
+ ptrotate(x1, y1, midx, midy, theta);
+ ptrotate(x2, y2, midx, midy, theta);
+ end;
+ (* translate *)
+ x1 := (x1 + round(dx * scalefact) + offh);
+ x2 := (x2 + round(dx * scalefact) + offh);
+ y1 := (y1 + round(dy * scalefact) + offv);
+ y2 := (y2 + round(dy * scalefact) + offv);
+end; (* xfmlinepts *)
+
+{----------------------------------------------------------------}
+procedure xfmcontpts (var xpts : ControlPoints; xknots : integer;
+ offh, offv : ScaledPts; midx, midy : ScaledPts;
+ scalefact : real;
+ theta : real; dx, dy : ScaledPts; sx, sy : real);
+var i : integer;
+begin
+ (* scale about center of item *)
+ if ((sx <> 1.0) or (sy <> 1.0)) then
+ for i := 0 to xknots do
+ begin
+ xpts[i,1] := round((xpts[i,1] - midx) * sx) + midx;
+ xpts[i,2] := round((xpts[i,2] - midy) * sy) + midy;
+ end;
+
+ if (theta <> 0.0) then
+ begin (* rotate about center *)
+ for i := 0 to xknots do
+ begin
+ ptrotate (xpts[i,1], xpts[i,2], midx, midy, theta);
+ end;
+ end;
+ (* translate *)
+ for i := 0 to xknots do
+ begin
+ xpts[i,1] := (xpts[i,1] + round(dx * scalefact) + offh);
+ xpts[i,2] := (xpts[i,2] + round(dy * scalefact) + offv);
+ end;
+end; (* xfmcontpts *)
+
+
+{----------------------------------------------------------------}
+(* convert into DVI space and offset by H & V *)
+procedure dvilinepts (var x1, y1, x2, y2 : ScaledPts;
+ offh, offv : ScaledPts);
+begin
+ x1 := (x1 + offh);
+ x2 := (x2 + offh);
+ y1 := (y1 * (-1) + offv);
+ y2 := (y2 * (-1) + offv);
+end;
+
+{----------------------------------------------------------------}
+(* convert into DVI space and offset by H & V *)
+procedure dvicontpts (var xpts : ControlPoints; xknots : integer;
+ offh, offv : ScaledPts);
+var i : integer;
+begin
+ for i := 0 to xknots do
+ begin
+ xpts[i,1] := (xpts[i,1] + offh);
+ xpts[i,2] := (xpts[i,2] * (-1) + offv);
+ end;
+end;
+
+{----------------------------------------------------------------}
+(* transform all the figure's elements according to the
+ top-level tranformation requirements in 1st Quadrant space.
+ then reset the toplevel's xfms.
+*)
+procedure toplevelxfm (toplev, curfig : pItem; recurlevel : integer);
+var pi : pItem;
+ null1, null2 : ScaledPts;
+ old1, old2 : ScaledPts;
+ midx, midy : ScaledPts;
+begin
+ with toplev^ do
+ begin
+ midy := (BBty - BBby) div 2;
+ midx := (BBrx - BBlx) div 2;
+ end;
+ pi := curfig^.body^.things; { if recur==0, this is same as toplev }
+ while (pi <> nil) do
+ begin
+ with pi^ do
+ begin
+ case (kind) of
+ Aline : begin
+ xfmlinepts (lx1, ly1, lx2, ly2, 0, 0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Aspline : begin
+ xfmcontpts (spts, nsplknots, 0, 0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Attspline : begin
+ xfmcontpts (ttpts, nttknots, 0, 0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Aarc : begin
+ null1 := 0; null2 := 0;
+ old1 := acentx; old2 := acenty;
+ xfmlinepts (acentx, acenty, null1, null2, 0,0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+
+ xfmcontpts (arcpts, narcknots + 1, 0, 0, old1, old2, 1.0,
+ toplev^.figtheta,
+ toplev^.fdx + (acentx - old1),
+ toplev^.fdy + (acenty - old2),
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Alabel : begin
+ null1 := 0; null2 := 0;
+ xfmlinepts (labx, laby, null1, null2, 0, 0, midx, midy, 1.0,
+ toplev^.figtheta, toplev^.fdx, toplev^.fdy,
+ toplev^.fsx, toplev^.fsy);
+ end;
+ Abeam : ; (* not transformable *)
+
+ Atieslur: ; (* not transformable *)
+
+ Afigure : begin
+ toplevelxfm (toplev, pi, recurlevel + 1);
+ end;
+ end; (* case *)
+ end; (* with *)
+ pi := pi^.nextitem;
+ end; (* while *)
+ if (recurlevel = 0) then
+ begin (* reset the toplevel's xfms *)
+ with toplev^ do
+ begin
+ figtheta := 0.0;
+ fsx := 1.0; fsy := 1.0;
+ fdx := 0; fdy := 0;
+ end;
+ end;
+end;
+
+
+{----------------------------------------------------------------}
+function scalefitfactor (actualwid, actualht,
+ goalwid, goalht: ScaledPts): real;
+var sx, sy : real;
+begin
+ sx := goalwid/actualwid;
+ sy := goalht/actualht;
+ if (sx < sy) then
+ scalefitfactor := sx
+ else
+ scalefitfactor := sy;
+end;
+
+
+
+(* ---- The handlers for each primitive ----
+ * The result of calling each handler is either immediate
+ * output to the buffer of the commands to produce the
+ * primitive, OR the primitive gets pushed onto a stack/list
+ * that defines a current 'figure' (set of prims) for
+ * output at a later time
+ *
+ * Look at linehandle for a basic idea of how the handlers
+ * work. the others follow pretty closely.
+ *)
+
+
+{------------------------------------------------------------}
+procedure linehandle (figdepth : integer; scalefact: real;
+ x1, y1, x2, y2 : ScaledPts;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ thk : VThickness; vk : VectKind;
+ patt : LineStyle;
+ minx, maxx, miny, maxy : ScaledPts;
+ tx, ty: ScaledPts; sx, sy, r : real);
+var midx, midy : ScaledPts;
+ lineitem : pItem;
+begin
+ midx := (minx + maxx) div 2;
+ midy := (miny + maxy) div 2;
+
+ (* do local primitive -level transformations *)
+ xfmlinepts (x1, y1, x2, y2, dvih, dviv,
+ midx, midy, scalefact, r, tx, ty, sx, sy);
+
diff --git a/macros/latex209/contrib/textyl/psrc/textyl.pas.ae b/macros/latex209/contrib/textyl/psrc/textyl.pas.ae
new file mode 100644
index 0000000000..bce0805fb6
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/textyl.pas.ae
@@ -0,0 +1,1000 @@
+ if (figdepth = 0) then
+ begin (* ---- do the primitive by itself *)
+ (* re-transform it to the 4th Quadrant *)
+ dvilinepts (x1, y1, x2, y2, h, v); (* global h and v posit *)
+ IPUSH;
+ TylLine (x1, y1, x2, y2, thk, vk, patt);
+ IPOP;
+ end
+ else if (figdepth > 0) then
+ begin (* ---- Pack it and stack it *)
+ lineitem := NewItem (Aline);
+ with lineitem^ do
+ begin
+ BBlx := minx; BBby := miny;
+ BBrx := maxx; BBty := maxy;
+ lx1 := x1; ly1 := y1;
+ lx2 := x2; ly2 := y2;
+ itemthick := thk;
+ itemvec := vk;
+ itempatt := patt;
+ end;
+ pushItem (figdepth, lineitem);
+ end
+ else if (figdepth < 0) then
+ begin (* ---- just do it right away without any PUSH/POP pair *)
+ (* this is the case when we are unpacking a figure for
+ * immediate output
+ *)
+ TylLine (x1, y1, x2, y2, thk, vk, patt);
+ end;
+end; (* linehandle *)
+
+
+(* --- Simple Splines -----*)
+{-----------------------------------------------------}
+procedure splinehandle (figdepth : integer; scalefact : real;
+ thetype : SplineKind; isclosed : boolean;
+ markdiam : integer;
+ var contpts : ControlPoints;
+ nknots : integer;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ thk : VThickness; vec : VectKind;
+ patt : LineStyle;
+ minx, maxx, miny, maxy : ScaledPts;
+ tx, ty : ScaledPts; sx, sy, r : real);
+var midx, midy : ScaledPts;
+ splineitem : pItem;
+ i : integer;
+begin
+ midx := (minx + maxx) div 2;
+ midy := (miny + maxy) div 2;
+
+ xfmcontpts (contpts, nknots, dvih, dviv, midx, midy,
+ scalefact, r, tx, ty, sx, sy);
+
+ if (figdepth = 0) then
+ begin (* ---- do the primitive *)
+ (* transform to 4th quad *)
+ dvicontpts (contpts, nknots, h, v);
+ IPUSH;
+ TylSpline (thetype, isclosed, contpts, nknots, thk, vec, patt, markdiam);
+ IPOP;
+ end
+ else if (figdepth > 0) then
+ begin
+ splineitem := NewItem (Aspline);
+ with splineitem^ do
+ begin
+ BBlx := minx; BBby := miny;
+ BBrx := maxx; BBty := maxy;
+ itemthick := thk;
+ itemvec := vec;
+ itempatt := patt;
+ nsplknots := nknots;
+ spltype := thetype;
+ sclosed := isclosed;
+ dosmarks := markdiam;
+ for i := 1 to nknots do
+ begin
+ spts[i,1] := contpts[i,1];
+ spts[i,2] := contpts[i,2];
+ end;
+ end;
+ pushItem (figdepth, splineitem);
+ end
+ else if (figdepth < 0) then
+ begin
+ TylSpline (thetype, isclosed, contpts, nknots, thk, vec, patt, markdiam);
+ end;
+end; (* splinehandle *)
+
+
+(* --- Variable thickness splines ----- *)
+{-----------------------------------------------------}
+procedure ttsplhandle (figdepth : integer; scalefact : real;
+ thetype : SplineKind; isclosed : boolean;
+ markdiam : integer;
+ contpts : ControlPoints;
+ ttks : ThickAryType;
+ nknots : integer;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ vec : VectKind;
+ patt : LineStyle;
+ minx, maxx, miny, maxy : ScaledPts;
+ tx, ty : ScaledPts; sx, sy, r : real);
+var midx, midy : ScaledPts;
+ ttsplitem : pItem;
+ i : integer;
+begin
+ midx := (minx + maxx) div 2;
+ midy := (miny + maxy) div 2;
+
+ xfmcontpts (contpts, nknots, dvih, dviv, midx, midy,
+ scalefact, r, tx, ty, sx, sy);
+
+ if (figdepth = 0) then
+ begin
+ (* transform to 4th quad *)
+ dvicontpts (contpts, nknots, h, v);
+ IPUSH;
+ TylThickThinSpline (thetype, isclosed, contpts, ttks, nknots, vec, patt, markdiam);
+ IPOP;
+ end
+ else if (figdepth > 0) then
+ begin
+ ttsplitem := NewItem (Attspline);
+ with ttsplitem^ do
+ begin
+ BBlx := minx; BBby := miny;
+ BBrx := maxx; BBty := maxy;
+ itemvec := vec;
+ itempatt := patt;
+ nttknots := nknots;
+ tspltype := thetype;
+ dottmarks := markdiam;
+ tclosed := isclosed;
+ for i := 1 to nknots do
+ begin
+ ttpts[i,1] := contpts[i,1];
+ ttpts[i,2] := contpts[i,2];
+ ttarry[i] := ttks[i];
+ end;
+ end; (* ttsplitem *)
+ pushItem (figdepth, ttsplitem);
+ end
+ else if (figdepth < 0) then
+ begin
+ TylThickThinSpline (thetype, isclosed, contpts, ttks, nknots, vec, patt, markdiam);
+ end;
+
+end; (* ttsplhandle *)
+
+
+(* ---- Musical Beams ---- *)
+{-----------------------------------------------------}
+procedure beamhandle (depth, siz : integer; bk : BeamKind;
+ x1, y1, x2, y2 : ScaledPts);
+var bmitem : pItem;
+begin
+ if (depth = 0) then
+ begin
+ dvilinepts (x1, y1, x2, y2, h, v);
+ IPUSH;
+ TylBeam (x1, y1, x2, y2, siz, bk);
+ IPOP;
+ end
+ else if (depth > 0) then
+ begin
+ bmitem := NewItem (Abeam);
+ with bmitem^ do
+ begin
+ BBlx := min(x1, x2); BBby := min(y1, y2);
+ BBrx := max(x1, x2); BBty := max(y1, y2);
+ bx1 := x1; by1 := y1;
+ bx2 := x2; by2 := y2;
+ staf := siz;
+ bkind := bk;
+ end; (* with *)
+ pushItem (depth, bmitem);
+ end
+ else if (depth < 0) then
+ begin
+ TylBeam (x1, y1, x2, y2, siz, bk);
+ end; (* else *)
+end; (* beamhandle *)
+
+
+(* ---- Musical Ties and Slurs ----- *)
+{-----------------------------------------------------}
+procedure tieslurhandle (depth: integer; pts : ControlPoints;
+ numk : integer; minthick, maxthick : VThickness);
+var tsitem : pItem;
+ i : integer;
+begin
+if (depth = 0) then
+ begin
+ dvicontpts (pts, numk, h, v);
+ IPUSH;
+ TylTieSlur (pts, numk, minthick, maxthick);
+ IPOP;
+ end
+else if (depth > 0) then
+ begin
+ tsitem := NewItem (Atieslur);
+ with tsitem^ do
+ begin
+ ntknots := numk;
+ for i := 1 to numk do
+ begin
+ tspts[i,1] := pts[i,1];
+ tspts[i,2] := pts[i,2];
+ end;
+ minth := minthick;
+ maxth := maxthick;
+ end; (* with *)
+ pushItem (depth, tsitem);
+ end
+else if (depth < 0) then
+ begin
+ TylTieSlur (pts, numk, minthick, maxthick);
+ end; (* else *)
+end; (* tieslurhandle *)
+
+
+{---------------------------------------------------------}
+procedure arccirclehandle (figdepth : integer; scalefact : real;
+ cx, cy : ScaledPts;
+ radius : ScaledPts;
+ ang1, ang2 : integer;
+ var contpts : ControlPoints; (* IN *)
+ nknots : integer;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ thk : VThickness; vec : VectKind;
+ patt : LineStyle;
+ minx, maxx, miny, maxy : ScaledPts;
+ tx, ty : ScaledPts; sx, sy, r : real);
+
+var midx, midy : ScaledPts;
+ middlex, middley : ScaledPts;
+ arcitem : pItem;
+ i : integer;
+ isclosedarc : boolean;
+
+begin
+ midx := cx; middlex := (minx + maxx) div 2;
+ midy := cy; middley := (miny + maxy) div 2;
+ isclosedarc := (ang1 = ang2);
+{
+ if (isclosedarc) then
+ maxspanlen := round ((360.0 / 16.0) * DEGTORAD * radius)
+ else
+ maxspanlen := round ((abs(ang2 - ang1) / 16.0) * DEGTORAD * radius);
+{ }
+
+
+ xfmcontpts (contpts, nknots+1, dvih, dviv, midx, midy,
+ scalefact, r, tx, ty, sx, sy);
+
+ if (figdepth = 0) then
+ begin (* ---- just do the primitive *)
+ (* transform to 4th quad *)
+ dvicontpts (contpts, nknots+1, h, v);
+ IPUSH;
+ doTylArc (isclosedarc,
+ contpts, nknots, thk, vec, patt);
+ IPOP;
+ end
+ else if (figdepth > 0) then
+ begin
+ arcitem := NewItem (Aarc);
+ with arcitem^ do
+ begin
+ BBlx := minx; BBby := miny;
+ BBrx := maxx; BBty := maxy;
+ itemthick := thk;
+ itemvec := vec;
+ itempatt := patt;
+ narcknots := nknots;
+ acentx := cx;
+ acenty := cy;
+ aradius := radius;
+ firstang := ang1;
+ lastang := ang2;
+ for i := 0 to nknots+1 do
+ begin
+ arcpts[i,1] := contpts[i,1];
+ arcpts[i,2] := contpts[i,2];
+ end;
+ end;
+ pushItem (figdepth, arcitem);
+ end
+ else if (figdepth < 0) then
+ begin
+ doTylArc (isclosedarc, contpts, nknots, thk, vec, patt);
+ end;
+end; (* arccirclehandle *)
+
+
+
+{---------------------------------------------------------}
+procedure labelhandle (depth : integer; scalefact: real;
+ lax, lay : ScaledPts;
+ dvih, dviv : ScaledPts; (* possible dvi-offsets *)
+ style : integer;
+ phrase : strng;
+ tx, ty : ScaledPts);
+var labitem : pItem;
+ null1, null2 : ScaledPts;
+begin
+(* xfm the label point if necessary *)
+ lax := lax + round(tx * scalefact);
+ lay := lay + round(ty * scalefact);
+
+ if (depth = 0) then
+ begin
+ null1 := 0; null2 := 0;
+ dvilinepts (lax, lay, null1, null2, h, v);
+ IPUSH;
+ TylLabel (lax, lay, style, phrase.str, phrase.len);
+ IPOP;
+ end
+ else if (depth > 0) then
+ begin
+ labitem := NewItem (Alabel);
+ with labitem^ do
+ begin
+ labx := lax;
+ laby := lay;
+ fontstyle := style;
+ strcopy (phrase.str, labeltext.str, phrase.len);
+ labeltext.len := phrase.len;
+ end;
+ pushItem (depth, labitem);
+ end
+ else if (depth < 0) then
+ begin
+ TylLabel (lax, lay, style, phrase.str, phrase.len);
+ end;
+end;
+
+
+(* #### Insert new handlers here for new "primitives"
+ i.e., names callable from the \special[tyl ...] level
+*)
+
+
+
+{----------------------------------------------------------------}
+(* transform the current bbox coordinates, and output the new one *)
+procedure newbbox (var minx, maxx, miny, maxy : ScaledPts;
+ midx, midy : ScaledPts;
+ sx, sy, rot : real; tx, ty : ScaledPts);
+var
+ (* coords of full bbox for transformation [n/s][e/w][x/y] *)
+ nex, ney, sex, sey, swx, swy, nwx, nwy: ScaledPts;
+ temp1, temp2 : integer;
+begin
+ (* describe and transform the bbox *)
+ nwx := round (minx * sx); nex := round (maxx * sx);
+ sex := round (maxx * sx); swx := round (minx * sx);
+ ney := round (maxy * sy); nwy := round (maxy * sy);
+ swy := round (miny * sy); sey := round (miny * sy);
+
+ ptrotate (nex, ney, midx, midy, rot);
+ ptrotate (sex, sey, midx, midy, rot);
+ ptrotate (swx, swy, midx, midy, rot);
+ ptrotate (nwx, nwy, midx, midy, rot);
+
+ nex := nex + tx; sex := sex + tx;
+ swx := swx + tx; nwx := nwx + tx;
+ ney := ney + ty; sey := sey + ty;
+ swy := swy + ty; nwy := nwy + ty;
+ (* now find the actual extents of the bbox *)
+ temp1 := min (nex, nwx);
+ temp2 := min (swx, sex);
+ minx := min (temp1, temp2);
+
+ temp1 := min (ney, nwy);
+ temp2 := min (swy, sey);
+ miny := min (temp1, temp2);
+
+ temp1 := max (nex, nwx);
+ temp2 := max (swx, sex);
+ maxx := max (temp1, temp2);
+
+ temp1 := max (ney, nwy);
+ temp2 := max (swy, sey);
+ maxy := max (temp1, temp2);
+end;
+
+
+{-----------------------------------------------}
+(* find the bounding box of the list of primitives
+ and/or sub-figures in this Item *)
+
+procedure findBBox (blot : pItem;
+ var mnx, mxx, mny, mxy : ScaledPts);
+var
+ pi : pItem;
+ bmnx, bmxx, bmny, bmxy, midx, midy : ScaledPts; (* bbox [min/max][x/y] *)
+ tmnx, tmxx, tmny, tmxy : ScaledPts; (* temporary, in case of recursion *)
+ null1, null2 : ScaledPts;
+ prescale, postscale : real;
+ old1, old2 : ScaledPts;
+begin
+ bmnx := TWO24; bmny := TWO24;
+ bmxx := -TWO24; bmxy :=-TWO24;
+ if (blot^.kind = Afigure) then
+ begin (* afigure *)
+ pi := blot^.body^.things;
+ while (pi <> nil) do
+ begin (* find the current bbox of the list of items here *)
+ if (pi^.kind = Afigure) then
+ begin (* recur *)
+ findBBox (pi, tmnx, tmxx, tmny, tmxy);
+ bmnx := min (bmnx, tmnx);
+ bmny := min (bmny, tmny);
+ bmxx := max (bmxx, tmxx);
+ bmxy := max (bmxy, tmxy);
+ end
+ else
+ begin
+ bmnx := min (bmnx, pi^.BBlx);
+ bmny := min (bmny, pi^.BBby);
+ bmxx := max (bmxx, pi^.BBrx);
+ bmxy := max (bmxy, pi^.BBty);
+ end;
+ pi := pi^.nextitem;
+ end; (* while *)
+ (* now transform the items inside, AND the bbox *)
+ pi := blot^.body^.things;
+ midx := (bmnx + bmxx) div 2;
+ midy := (bmny + bmxy) div 2;
+ (* now take care of any pre and post size requirements *)
+ (* see also the "figurehandle" proc. *)
+ with blot^ do
+ begin
+(* ### Keep this scaling biz here, too, for now. May blast it later *)
+ if ((preWid <> 0) and (preHt <> 0)) then
+ begin
+ prescale := scalefitfactor ((bmxx - bmnx), (bmxy - bmny), preWid, preHt);
+ fsx := fsx * prescale;
+ fsy := fsy * prescale;
+ end;
+ if ((postWid <> 0) and (postHt <> 0)) then
+ begin
+ postscale := scalefitfactor ((bmxx - bmnx), (bmxy - bmny), postWid, postHt);
+ fsx := fsx * postscale;
+ fsy := fsy * postscale;
+ end;
+
+(* the actual scale-up is taken care of later in this proc. *)
+ end; (* with *)
+ while (pi <> nil) do
+ begin
+ with pi^ do
+ begin
+ case (kind) of
+ Aline : begin
+ xfmlinepts (lx1, ly1, lx2, ly2, 0, 0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ end;
+ Aspline : begin
+ xfmcontpts (spts, nsplknots, 0, 0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ end;
+ Attspline : begin
+ xfmcontpts (ttpts, nttknots, 0, 0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ end;
+ Aarc : begin
+ null1 := 0; null2 := 0;
+ old1 := acentx; old2 := acenty;
+ xfmlinepts (acentx, acenty, null1, null2, 0,0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ xfmcontpts (arcpts, narcknots + 1, 0, 0, old1, old2, 1.0,
+ blot^.figtheta,
+ blot^.fdx + (acentx - old1),
+ blot^.fdy + (acenty - old2),
+ blot^.fsx, blot^.fsy);
+ end;
+ Alabel : begin
+ null1 := 0; null2 := 0;
+ xfmlinepts (labx, laby, null1, null2, 0,0, midx, midy, 1.0,
+ blot^.figtheta, blot^.fdx, blot^.fdy,
+ blot^.fsx, blot^.fsy);
+ end;
+ Abeam : ; (* not transformable *)
+
+ Atieslur: ; (* not transformable *)
+ Afigure : ; (* do not need to re-transform *)
+ end; (* case *)
+ end; (* with *)
+ pi := pi^.nextitem;
+ end; (* while *)
+ (* transform the bbox, and re-find the new bbox *)
+ newbbox (bmnx, bmxx, bmny, bmxy, midx, midy, blot^.fsx, blot^.fsy,
+ blot^.figtheta, blot^.fdx, blot^.fdy);
+ mnx := bmnx; mny := bmny;
+ mxx := bmxx; mxy := bmxy;
+ end (* if *)
+ else (* some other primitive *)
+ begin
+ mnx := blot^.BBlx; mny := blot^.BBby;
+ mxx := blot^.BBrx; mxy := blot^.BBty;
+ end; (* else *)
+end; (* findBBox *)
+
+
+{---------------------------------------------------------}
+(* traverse the list, determining the current bounding box for
+ * the items. We need this to find the mid-point
+ * for doing any remaining rotations
+ *)
+procedure traverse (thefig, theitem : pItem);
+var
+ minx, maxx, miny, maxy : ScaledPts;
+ curminx, curmaxx, curminy, curmaxy : ScaledPts;
+begin
+ minx := TWO24; maxx := -TWO24;
+ miny := TWO24; maxy := -TWO24;
+
+ while (theitem <> nil) do
+ begin
+ if (theitem^.kind = Afigure) then
+ begin (* recur *)
+ findBBox (theitem, curminx, curmaxx, curminy, curmaxy);
+ with theitem^ do
+ begin
+ BBlx := curminx; BBby := curminy;
+ BBrx := curmaxx; BBty := curmaxy;
+ (* reset the symbol's parameters since all the
+ primitives in it have now been transformed
+ according to the previous specifications *)
+ figtheta := 0.0;
+ fsx := 1.0; fsy := 1.0;
+ fdx := 0; fdy := 0;
+ preWid := 0; preHt := 0;
+ postWid := 0; postHt := 0;
+ end; (* with *)
+ minx := min (minx, curminx); miny := min (miny, curminy);
+ maxx := max (maxx, curmaxx); maxy := max (maxy, curmaxy);
+ end (* if a figure/symbol*)
+ else
+ begin (* a primitive *)
+ with theitem^ do
+ begin
+ minx := min (minx, BBlx); miny := min (miny, BBby);
+ maxx := max (maxx, BBrx); maxy := max (maxy, BBty);
+ end; (* with *)
+ end; (* else *)
+ theitem := theitem^.nextitem;
+ end; (* while *)
+
+ with thefig^ do
+ begin (* set the bounding box for this upper-level symbol defn *)
+ BBlx := minx;
+ BBby := miny;
+ BBrx := maxx;
+ BBty := maxy;
+ end; (* with *)
+end; (* traverse *)
+
+(* ----- Figure symbols ----- *)
+{---------------------------------------------------}
+procedure figurehandle (globalsymlist, symbollist : pItem; dopush : integer);
+const DoItNow = -1;
+ NoScale = 1;
+var pi, curfig : pItem;
+ midx, midy : ScaledPts;
+ null1, null2 : ScaledPts;
+ prescale, postscale : real;
+ tmnx, tmny, tmxx, tmxy : ScaledPts;
+begin (* figurehandle *)
+
+ (* PUSH. traverse the lists (recursively if necessary) and
+ * compute the transformed points.
+ * Convert to 4th quadrant and offset by H & V.
+ * We can do this destructively here
+ * since we're going to output them right away anyhow.
+ * Then call each respective primitive handler with a level
+ * of -1 to indicate to do its job immediately.
+ * POP.
+ *)
+ curfig := symbollist;
+ pi := curfig^.body^.things;
+ (* find and set the bounding box for
+ the figure's sub-symbols and primitives *)
+ if (dopush > 0) then
+ traverse (curfig, pi);
+
+ (* We eventually transform the items
+ to 4th Quadrant DVI space and output them! *)
+
+ pi := curfig^.body^.things;
+
+ midy := (globalsymlist^.BBby + globalsymlist^.BBty) div 2;
+ midx := (globalsymlist^.BBlx + globalsymlist^.BBrx) div 2;
+
+ if (dopush > 0) then
+ begin (* the top-level figure for outputting *)
+
+ (* convert the bounding box because we are about to enter
+ into DVI space, and all calls to handlers hereafter
+ are in terms of DVI coordinates *)
+
+ with globalsymlist^ do
+ begin
+
+(* Since there were external specifications about this figure,
+ fit the current figure's actual size to the
+ "pre" size (specified by W marker) and/or to the
+ "post" size (specified by the F marker).
+ We do this by simple scaling, *without* changing the midpoint
+ of the bounding box, just its extents
+ *)
+ if ((preWid <> 0) and (preHt <> 0)) then
+ begin
+ prescale := scalefitfactor ((BBrx - BBlx), (BBty - BBby), preWid, preHt);
+ fsx := fsx * prescale;
+ fsy := fsy * prescale;
+ end;
+ if ((postWid <> 0) and (postHt <> 0)) then
+ begin
+ postscale := scalefitfactor ((BBrx - BBlx), (BBty - BBby), postWid, postHt);
+ fsx := fsx * postscale;
+ fsy := fsy * postscale;
+ end;
+ tmnx := BBlx; tmny := BBby; tmxx := BBrx; tmxy := BBty;
+ xfmlinepts (tmnx, tmny, tmxx, tmxy, 0,0, midx, midy, 1.0,
+ 0.0, 0, 0, fsx, fsy);
+
+ toplevelxfm (globalsymlist, globalsymlist, 0);
+
+ dviBBlx := tmnx;
+ dviBBrx := tmxx;
+ dviBBby := tmny;
+ dviBBty := tmxy;
+
+ xfmlinepts (dviBBlx, dviBBby, dviBBrx, dviBBty, 0,0,
+ midx, midy, 1.0, 0.0,
+ - (tmnx - BBlx), - (tmny - BBby),
+ 1.0, 1.0);
+
+ fdx := fdx - (tmnx - BBlx);
+ fdy := fdy - (tmny - BBby);
+ end;
+
+ dvilinepts (dviBBlx, dviBBby, dviBBrx, dviBBty, h, v);
+ pgfigurenum := pgfigurenum + 1;
+
+ (* We are ready to output the figure to the page *)
+ writeln(logfile);
+ write(logfile,'Figure #',pgfigurenum:0,' on page ',currpagenum:0,' is approx. ');
+{ write(logfile,((globalsymlist^.BBty - globalsymlist^.BBby) div SPPERPT):0,' pts high and ');
+ writeln(logfile,((globalsymlist^.BBrx - globalsymlist^.BBlx) div SPPERPT):0,' pts wide (actual size)');
+}
+ write(logfile,((tmxy - tmny) div SPPERPT):0,' pts high and ');
+ writeln(logfile,((tmxx - tmnx) div SPPERPT):0,' pts wide (actual size)');
+ IPUSH;
+
+ end;
+
+ while (pi <> nil) do
+ begin
+ with pi^ do
+ begin
+ case (kind) of
+ Aline : begin
+ dvilinepts (lx1, ly1, lx2, ly2, h, v); (* DVI h and v posit *)
+ with globalsymlist^ do
+ linehandle (DoItNow, NoScale,
+ pi^.lx1, pi^.ly1, pi^.lx2, pi^.ly2,
+ 0, 0,
+ pi^.itemthick, pi^.itemvec, pi^.itempatt,
+ dviBBlx, dviBBrx, dviBBby, dviBBty,
+ fdx, -fdy, fsx, fsy, -figtheta);
+ end; (* Aline *)
+
+ Aspline : begin
+ dvicontpts (spts, nsplknots, h, v);
+ with globalsymlist^ do
+ splinehandle (DoItNow, NoScale, pi^.spltype,
+ pi^.sclosed, pi^.dosmarks,
+ pi^.spts, pi^.nsplknots,
+ 0, 0,
+ pi^.itemthick, pi^.itemvec, pi^.itempatt,
+ dviBBlx, dviBBrx, dviBBby, dviBBty,
+ fdx, -fdy, fsx, fsy, -figtheta);
+ end; (* Aspline *)
+
+ Attspline : begin
+ dvicontpts (ttpts, nttknots, h, v);
+ with globalsymlist^ do
+ ttsplhandle (DoItNow, NoScale, pi^.tspltype,
+ pi^.tclosed, pi^.dottmarks,
+ pi^.ttpts, pi^.ttarry, pi^.nttknots,
+ 0, 0,
+ pi^.itemvec, pi^.itempatt,
+ dviBBlx, dviBBrx, dviBBby, dviBBty,
+ fdx, -fdy, fsx, fsy, -figtheta);
+ end; (* Attspline *)
+
+ Abeam : begin
+ dvilinepts (bx1, by1, bx2, by2, h, v);
+ beamhandle (DoItNow, staf, bkind, bx1, by1, bx2, by2);
+ end; (* Abeam *)
+
+ Atieslur : begin
+ dvicontpts (tspts, ntknots, h, v);
+ tieslurhandle (DoItNow, tspts, ntknots, minth, maxth);
+ end; (* a tie or slur *)
+
+ Aarc : begin
+ dvicontpts (arcpts, narcknots + 1, h, v);
+ with globalsymlist^ do
+ arccirclehandle (DoItNow, NoScale,
+ pi^.acentx, pi^.acenty,
+ pi^.aradius,
+ pi^.firstang, pi^.lastang,
+ pi^.arcpts, pi^.narcknots,
+ 0, 0,
+ pi^.itemthick, pi^.itemvec, pi^.itempatt,
+ dviBBlx, dviBBrx, dviBBby, dviBBty,
+ fdx, -fdy, fsx, fsy, -figtheta);
+ end; (* arc *)
+ Alabel : begin
+ null1 := 0; null2 := 0;
+ dvilinepts (labx, laby, null1, null2, h, v);
+ with globalsymlist^ do
+ labelhandle (DoItNow, NoScale,
+ pi^.labx, pi^.laby,
+ 0, 0,
+ pi^.fontstyle, pi^.labeltext,
+ fdx, -fdy);
+ end; (* label *)
+
+ Afigure : begin (* recur *)
+ figurehandle (globalsymlist, pi, 0);
+ end; (* another symbol *)
+
+ end; (* case *)
+ end; (* with *)
+ pi := pi^.nextitem;
+ end; (* while *)
+ if (dopush > 0) then
+ begin
+ IPOP;
+ end;
+end; (* figurehandle *)
+
+
+
+(* %%% *)
+{-----------------------------------------------------}
+procedure mainhandlespecials (specnum, numpbytes : integer);
+(* specnum is the DVI-number of the special
+ * numpbytes is the number of parameter bytes
+ *)
+label 888;
+const PARSLEN = 50; (* Length of the byte-string-cache *)
+ EMPTY = 0;
+type charset = set of char;
+var siz, numknots : integer; (* Lots of temp vars that we use *)
+ x1, y1, x2, y2 : integer;
+ sx100, sy100 : real;
+ transx, transy : ScaledPts;
+ rot : real;
+ SPscale : real;
+ cpts : ControlPoints;
+ thk : VThickness;
+ patt : LineStyle;
+ TTary : ThickAryType;
+ vk : VectKind;
+ bk : BeamKind;
+ markdiam : integer;
+ radius, ang1, ang2 : integer;
+ phrase : strng;
+ style : integer;
+ nam : strng;
+ sysnam : strng; (* the first parameter of the \special *)
+ let : char;
+ i, gotten : integer;
+ b : OctByt;
+ pi : pItem;
+ minx, miny, maxx, maxy : ScaledPts;
+ maxthk, minthk : integer;
+
+ tylnam,
+ beginfigurenam, (* names used for string to string comparisons *)
+ endfigurenam,
+ linenam,
+ splinenam,
+ ttsplnam,
+ beamnam,
+ tieslurnam,
+ arcnam,
+ labelnam,
+ paramnam {internal} : charstring;
+
+ splinetype : SplineKind;
+ isclosedspline : boolean;
+
+ parsearray : array [1..PARSLEN] of OctByt; (* cache of bytes to run through *)
+ parsposit, parsmax : integer; (* current and max position in cache *)
+ usingstream : boolean; (* whether we read/parse using cache or from file *)
+
+
+(*--------------------------------------------------------------
+ These procedures depend on the correct ordering of
+ GETs with respect to the number of bytes read in so far.
+ precond: byte "b" has been read and gotten < numpbytes
+ postcond: byte "b" has been read iff gotten < numpbytes.
+ If your impl. definition of READ is non-standard, you will
+ have to dink with the ordering and be really careful of
+ keeping track of 'gotten' and 'numpbytes' variables
+--------------------------------------------------------------*)
+
+ function nextpbyte : integer;
+ begin
+ if (usingstream) then
+ begin
+ if (gotten < numpbytes) then
+ begin
+ nextpbyte := Dget1byte;
+ gotten := gotten + 1;
+ end
+ else
+ nextpbyte := EMPTY;
+ end
+ else
+ begin (* not using stream *)
+ if (parsposit <= parsmax) then
+ begin
+ nextpbyte := parsearray[parsposit];
+ parsposit := parsposit + 1;
+ end
+ else
+ begin (* at end of parse array, so read from stream now *)
+ usingstream := true;
+ if (gotten < numpbytes) then
+ begin
+ nextpbyte := Dget1byte;
+ gotten := gotten + 1;
+ end
+ else
+ nextpbyte := EMPTY;
+ end;
+ end; (* else *)
+ end;
+
+(* !!!!! Make sure all these predicates jive correctly with
+ the key-letter definitions *)
+{__________________________________________________________________}
+ function isanumber (b : integer) : boolean;
+ begin
+ isanumber := ((b >= xord['0']) and (b <= xord['9']));
+ end;
+
+ function isaletter (b : integer) : boolean;
+ begin
+ isaletter := (((b >= xord['A']) and (b <= xord['Z'])) or
+ ((b >= xord['a']) and (b <= xord['z'])) or
+ (b = xord['@']) or
+ (b = xord['"']) );
+ end;
+
+ function isaspace (b : integer) : boolean;
+ begin
+ isaspace := ((b = xord[' ']) or
+ (b = CR) or
+ (b = LF) or
+ (b = HT) or
+ (b = FF));
+ end;
+
+ function isdelimiter (b : integer) : boolean;
+ begin
+ (* not a key-letter *)
+ isdelimiter := (((b < xord['A']) or (b > xord['Z'])) and
+ ((b < xord['a']) or (b > xord['z'])) and
+ (b <> xord['@']) and
+ (b <> xord['"']) );
+ end;
+
+ function isnotnull (b : integer) : boolean;
+ begin
+ isnotnull := (b <> EMPTY);
+ end;
+
+
+{__________________________________________________________________}
+ function getnumber : integer;
+ var n : integer;
+ isneg : boolean;
+ begin
+ n := 0;
+ isneg := false;
+ while ( (isnotnull (b)) and
+ (not (isanumber (b)))) do
+ begin (* not a numeral *)
+ if (b = xord['-']) then
+ isneg := true;
+ b := nextpbyte;
+ end;
+
+ while (isaspace (b)) do (* Skip spaces *)
+ b := nextpbyte;
+
+ while ( (isnotnull (b)) and
+ isanumber (b)) do
+ begin (* a numeral *)
+ n := n * 10 + (b - xord['0']);
+ b := nextpbyte;
+ end;
+
+ if ((gotten = numpbytes) and
+ isanumber (b)) then
+ begin (* end condition *)
+ n := n * 10 + (b - xord['0']);
+ end;
+
+ if (isneg) then
+ getnumber := -(n)
+ else
+ getnumber := n;
+ end;
+{__________________________________________________________________}
+
+ function getletter : char;
+ var k : char;
+ begin
+ k := ' ';
+ while ( (isnotnull (b)) and
+ (isdelimiter (b) and not (isaspace (b)))) do
+ begin (* non letter *)
+ b := nextpbyte;
+ end;
+
+ if ( (isnotnull (b)) and
+ ( isaletter (b) or isaspace (b)
+ and not (isanumber (b)))) then
+ begin
+ k := xchr[b];
+ b := nextpbyte;
+ end;
+ getletter := k;
+ end;
+{__________________________________________________________________}
+
+ function getanything : char;
+ var k : char;
+ begin
+ k := ' ';
+ while (not (isnotnull (b))) do
+ begin (* not usable *)
+ b := nextpbyte;
+ end;
+
+ if (isnotnull (b)) then
+ begin
+ k := xchr[b];
+ b := nextpbyte;
+ end;
+ getanything := k;
+ end;
+
+{****************************************************
+ The following routines look for key - letter tokens
+ that indicate certain attributes for a primitive.
+
+Currently, the letters used are:
+ S for scaled-points measurement
+ P for printers points
+ M millimeters measurement
+ C use a Circular vector for drawing
+ H Horizontal-pen vector
+ V Vertical vector
+ B B-spline
+ I Interpolating B-spline
+ K Catmull-Rom spline
+ D Cardinal spline
+ U Open spline
+ O closed spline
+ X put marks on spline control pts
+ T Transformation marker
+ R Regular beam characters
+ G Grace Beam characters
+ @ Specify center-point for arc/circle
+ L Line-style
+ F for beginfigure: Fit figure to wid/ht
+ W for beginfigure: figure was created at this wid & ht
+**************************************************}
+
+
+{__________________________________________________________________}
diff --git a/macros/latex209/contrib/textyl/psrc/textyl.pas.af b/macros/latex209/contrib/textyl/psrc/textyl.pas.af
new file mode 100644
index 0000000000..76ecf19c0a
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/textyl.pas.af
@@ -0,0 +1,1000 @@
+ procedure gettransforms (var sc1, sc2, r : real;
+ var tr1, tr2 : integer);
+ label 22;
+ var i : integer;
+ dun : boolean;
+ begin
+ sc1 := 1.0; sc2 := 1.0;
+ tr1 := 0; tr2 := 0;
+ r := 0.0;
+ i := parsposit - 1;
+ if (i < 1) then
+ begin
+ goto 22; (* exit with defaults *)
+ end;
+ dun := false;
+ while ((i < parsmax) and not dun) do
+ begin
+ if (isaletter(parsearray[i])) then
+ begin
+ if ((parsearray[i] = xord['t']) or
+ (parsearray[i] = xord['T'])) then
+ begin
+ if (isdelimiter(parsearray[i+1]) and
+ isdelimiter(parsearray[i-1])) then
+ begin (* get transform parameters *)
+ sc1 := getnumber / 100.0;
+ sc2 := getnumber / 100.0;
+ tr1 := getnumber;
+ tr2 := getnumber;
+ r := float(getnumber); (* degrees about primitive center *)
+ if (r < 0.0) then
+ r := r + 360.0;
+ dun := true;
+ end;
+ end;
+ end;
+ i := i + 1;
+ end; (* while *)
+22:
+ end; (* gettransforms *)
+
+{__________________________________________________________________}
+ function findmarker (markset : charset) : integer;
+ label 1111;
+ var i, sym : integer;
+ dun : boolean;
+ begin
+ i := parsposit - 1;
+ sym := EMPTY;
+ if (i < 1) then
+ goto 1111;
+ dun := false;
+ while ((i < parsmax) and not dun) do
+ begin
+ if (isaletter(parsearray[i])) then
+ begin
+ if (xchr[ parsearray[i] ] in markset) then
+ begin
+ if (isdelimiter (parsearray[i+1]) and
+ isdelimiter (parsearray[i-1])) then
+ begin
+ sym := xord[tolowercase(xchr[parsearray[i]])];
+ dun := true;
+ end;
+ end;
+ end; (* if a letter *)
+ i := i + 1;
+ end; (* while *)
+1111: findmarker := sym;
+ end;
+
+
+
+ function findscale : integer;
+ begin
+ findscale := findmarker(['s','S','p','P','m','M']);
+ end;
+
+ function findvectkind : integer;
+ begin
+ findvectkind := findmarker(['c','C','h','H','v','V']);
+ end;
+
+ function findlinestyle : integer;
+ begin
+ findlinestyle := findmarker(['l','L']);
+ end;
+
+ function findbeamkind : integer;
+ begin
+ findbeamkind := findmarker(['r','R','g','G']);
+ end;
+
+ function findsplinekind : integer;
+ begin
+ findsplinekind := findmarker(['b','B','i','I','k','K','d','D']);
+ end;
+
+ function findsplclosure : integer;
+ begin
+ findsplclosure := findmarker(['o','O','u','U']);
+ end;
+
+ function findatsign : integer;
+ begin
+ findatsign := findmarker(['@']);
+ end;
+
+ function finddotmark : integer;
+ begin
+ finddotmark := findmarker(['x','X']);
+ end;
+
+ function findfigdimens : integer;
+ begin
+ findfigdimens := findmarker(['w','W']);
+ end;
+
+ function findfitsizes : integer;
+ begin
+ findfitsizes := findmarker(['f','F']);
+ end;
+
+
+ {_________________________________________________}
+ function thescaleof (scal : integer) : real;
+ begin
+ if (scal = xord['s']) then
+ thescaleof := 1 * magfactor
+ else if (scal = xord['p']) then
+ thescaleof := SPPERPT * magfactor
+ else if (scal = xord['m']) then
+ thescaleof := SPPERMM * magfactor
+ else if (scal = EMPTY) then
+ thescaleof := SPPERPT * magfactor;
+ end;
+
+
+ function thevectorof (vkin : integer) : VectKind;
+ begin
+ if (vkin = xord['c']) then
+ thevectorof := VKCirc
+ else if (vkin = xord['v']) then
+ thevectorof := VKVert
+ else if (vkin = xord['h']) then
+ thevectorof := VKHort
+ else if (vkin = EMPTY) then
+ thevectorof := VKCirc;
+ end;
+
+ function thestyleof (linest : integer) : LineStyle;
+ begin
+ if ((linest > 3) or
+ (linest < 0)) then linest := 0;
+ case linest of
+ 0 : thestyleof := solid;
+ 1 : thestyleof := dotted;
+ 2 : thestyleof := dashed;
+ 3 : thestyleof := dotdash;
+ end;
+ end;
+
+
+
+
+(* -----!!!!!!!!!!!! HandleSpecials !!!!!!!!!!!!!------ *)
+begin
+ tylnam := 'tyl';
+ beginfigurenam := 'beginfigure';
+ endfigurenam := 'endfigure';
+ linenam := 'line';
+ splinenam := 'spline';
+ ttsplnam := 'ttspline';
+ beamnam := 'beam';
+ tieslurnam := 'tieslur';
+ arcnam := 'arc';
+ labelnam := 'label';
+ paramnam := 'param';
+ usingstream := true; (* getting bytes from dvifile *)
+
+ specstart := DVIMark - (specnum - 239 + 1) - 1;
+
+ ourxpos := h; ourypos := v; (* note the global DVI (h,v) coords *)
+ i := 1;
+
+ b := Dget1byte; (* prime the reading scheme *)
+ gotten := (specnum - 239 + 1);
+
+ while (isaspace(b)) do
+ b := nextpbyte;
+
+ let := getletter;
+ while (let <> ' ') do (* get the name of the system --- Hopefully 'tyl' *)
+ begin
+ sysnam.str[i] := tolowercase(let);
+ sysnam.len := i;
+ i := i + 1;
+ let := getletter;
+ end;
+
+ sysnam.str[i] := chr(32); (* end of string *)
+
+ if (not streq (sysnam.str, tylnam, 3)) then (* TeXtyl doesnt know about this special *)
+ begin
+ write (logfile,'The special: ');
+ writestrng(sysnam,true);
+ writeln(logfile,' is not tyl-able. Skipping...');
+ while (gotten < numpbytes) do
+ b := nextpbyte;
+ goto 888;
+ end;
+
+(* OTHERWISE: all is okay. Lets look for a primitive to tyl *)
+
+ while (isdelimiter(b)) do
+ begin
+ b := nextpbyte;
+ end;
+ i := 1;
+ let := getletter; {xchr[b];}
+ while (not (isdelimiter(xord[let]))) do (* get the name of the primitive *)
+ begin
+ nam.str[i] := tolowercase(let);
+ nam.len := i;
+ i := i + 1;
+ let := getletter;
+ end;
+
+ nam.str[i] := chr(32); (* end of string *)
+
+
+ let := xchr[b];
+
+(* Now, fill the parse array with bytes so that we can get
+ the given parameters, and infer the defaulted params *)
+
+ parsmax := min (PARSLEN, ((numpbytes - gotten) + 1));
+
+ if (parsmax > 1) then
+ begin
+ parsearray[1] := xord[' ']; (* we need this *)
+ parsearray[2] := b; (* start filling *)
+ for i := 3 to parsmax do
+ begin (* fill rest *)
+ parsearray[i] := nextpbyte;
+ end;
+ parsposit := 1;
+ usingstream := false; (* now we look at bytes in parse array *)
+ b := nextpbyte; (* start it *)
+ end
+ else
+ begin
+ usingstream := true;
+ parsposit := -1; (* undefined *)
+ end;
+
+ (* --- BEGINFIGURE ---- *)
+ if streq(nam.str, beginfigurenam, 3) then
+ begin
+ multifigure := multifigure + 1;
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ gettransforms (sx100, sy100, rot, transx, transy);
+ (* store all the primitives on pageitems, and dont output
+ them until we get a endfigure. this way, we can take
+ care of dealing with all the primitives according to
+ some global tranformation for the whole figure *)
+ pi := NewItem (Afigure);
+ with pi^ do
+ begin
+ figtheta := rot;
+ fsx := sx100; fsy := sy100;
+ fdx := round (transx * SPscale);
+ fdy := round (transy * SPscale);
+ depthnumber := multifigure; (* we're at a new level *)
+ i := findfigdimens;
+ if (i <> EMPTY) then
+ begin
+ preWid := round (getnumber * SPscale);
+ preHt := round (getnumber * SPscale);
+ end;
+ i := findfitsizes;
+ if (i <> EMPTY) then
+ begin
+ postWid := round (getnumber * SPscale);
+ postHt := round (getnumber * SPscale);
+ end;
+ end; (* with *)
+ BackupInBuf (DVIMark - specstart);
+ pushItem (multifigure - 1, pi);
+ goto 888;
+ end;
+ (* ---- ENDFIGURE ---- *)
+ if streq(nam.str, endfigurenam, 3) then
+ begin
+ multifigure := multifigure - 1;
+ if (multifigure < 0) then
+ begin
+ complain (ERRBAD);
+ write(logfile,'Warning: Too many "endfigure"s !');
+ multifigure := 0;
+ end;
+ BackupInBuf (DVIMark - specstart);
+
+ if (multifigure = 0) then
+ begin
+ (* go do our set of figures (within figures...) *)
+ figurehandle (pageitems, pageitems, 1);
+ dispose (pageitems); (* ### should maybe garbage collect here *)
+ pageitems := nil;
+ end; (* if *)
+ goto 888;
+ end;
+
+ (* --- LINE --- *)
+ if streq(nam.str, linenam, 3) then
+ begin
+ i := findscale;
+ SPscale := thescaleof(i);
+
+ gettransforms (sx100, sy100, rot, transx, transy);
+ thk := getnumber; (* get the vector thickness *)
+ if (thk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'?? Thickness not found. Setting to 1');
+ thk := 1;
+ end;
+ i := findvectkind;
+ vk := thevectorof (i);
+
+ i := findlinestyle;
+ if (i <> EMPTY) then
+ patt := thestyleof (getnumber)
+ else
+ patt := solid;
+
+ x1 := round (getnumber * SPscale);
+ y1 := round (getnumber * SPscale);
+ x2 := round (getnumber * SPscale);
+ y2 := round (getnumber * SPscale);
+
+ minx := min (x1, x2);
+ maxx := max (x1, x2);
+ miny := min (y1, y2);
+ maxy := max (y1, y2);
+
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+ linehandle (multifigure, SPscale, x1, y1, x2, y2, 0, 0, thk, vk, patt,
+ minx, maxx, miny, maxy,
+ transx, transy, sx100, sy100, rot);
+ end (* line *)
+ (* ---- THE SPLINES ---- *)
+else if (streq(nam.str, splinenam, 3) or
+ streq(nam.str, ttsplnam,3)) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ gettransforms (sx100, sy100, rot, transx, transy);
+
+ if streq(nam.str, splinenam, 3) then
+ begin
+ thk := getnumber;
+ if (thk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Spline Thickness not found. Setting to 1');
+ thk := 1;
+ end;
+ end;
+ i := findvectkind;
+ vk := thevectorof (i);
+
+ i := findlinestyle;
+ if (i <> EMPTY) then
+ patt := thestyleof (getnumber)
+ else
+ patt := solid;
+
+ i := findsplinekind;
+ if (i = xord['b']) then
+ splinetype := BSPL
+ else if (i = xord['i']) then
+ splinetype := INTBSPL
+ else if (i = xord['k']) then
+ splinetype := CATROM
+ else if (i = xord['d']) then
+ splinetype := CARD
+ else if (i = EMPTY) then
+ splinetype := CATROM;
+
+ i := findsplclosure;
+ if (i = xord['o']) then
+ isclosedspline := true
+ else if (i = xord['u']) then
+ isclosedspline := false
+ else if (i = EMPTY) then
+ isclosedspline := false;
+
+ i := finddotmark;
+ if (i = xord['x']) then
+ markdiam := getnumber
+ else if (i = EMPTY) then
+ markdiam := 0;
+
+ numknots := min (getnumber, MAXCTLPTS);
+ if (numknots < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Number of spline/ttspline knot points not found. Setting to 1');
+ numknots := 1;
+ end;
+
+ minx := TWO24; miny := TWO24;
+ maxx := -TWO24; maxy := -TWO24;
+
+ for i := 0 to (numknots + 3) do
+ begin
+ cpts[i,1] := 0;
+ cpts[i,2] := 0;
+ end; (* for *)
+
+ for i := 1 to numknots do
+ begin
+ x1 := round (getnumber * SPscale);
+ cpts[i,1] := x1;
+ if (x1 < minx) then
+ minx := x1;
+ if (x1 > maxx) then
+ maxx := x1;
+ y1 := round (getnumber * SPscale);
+ cpts[i,2] := y1;
+ if (y1 < miny) then
+ miny := y1;
+ if (y1 > maxy) then
+ maxy := y1;
+ end; (* for *)
+
+ if streq(nam.str, ttsplnam, 3) then
+ begin
+ for i := 1 to numknots do
+ begin
+ TTary[i] := getnumber;
+ end;
+ end;
+
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+
+ if streq(nam.str, splinenam, 3) then
+ splinehandle (multifigure, SPscale, splinetype, isclosedspline,
+ markdiam, cpts, numknots,
+ 0, 0, thk, vk, patt, minx, maxx, miny, maxy,
+ transx, transy, sx100, sy100, rot)
+ else
+ ttsplhandle (multifigure, SPscale, splinetype, isclosedspline,
+ markdiam, cpts, TTary, numknots,
+ 0, 0, vk, patt, minx, maxx, miny, maxy,
+ transx, transy, sx100, sy100, rot);
+ end (* splines *)
+ (* --- BEAMS ---- *)
+ else if streq(nam.str, beamnam, 4) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ (* no transforms *)
+
+ siz := getnumber; (* the staffsize *)
+ i := findbeamkind;
+ if (i = xord['g']) then
+ bk := grace
+ else if (i = xord['r']) then
+ bk := regular
+ else if (i = EMPTY) then
+ bk := regular;
+
+ x1 := round (getnumber * SPscale);
+ y1 := round (getnumber * SPscale);
+ x2 := round (getnumber * SPscale);
+ y2 := round (getnumber * SPscale);
+
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+
+ beamhandle (multifigure, siz, bk, x1, y1, x2, y2);
+ end (* beam *)
+ (* ---- TIES AND SLURS ---- *)
+ else if streq(nam.str, tieslurnam, 3) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ minthk := getnumber;
+ if (minthk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Tie/Slur Min Thickness not found. Setting to 1');
+ minthk := 1;
+ end;
+
+ maxthk := getnumber;
+ if (maxthk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Tie/Slur MaxThickness not found. Setting to 1');
+ maxthk := 1;
+ end;
+
+ numknots := min (getnumber, MAXCTLPTS);
+ if (numknots < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Tie/Slur Number of knot points not found. Setting to 1. Should be 5');
+ numknots := 1;
+ end;
+ for i := 1 to numknots do
+ begin
+ cpts[i,1] := round (getnumber * SPscale);
+ cpts[i,2] := round (getnumber * SPscale);
+ end; (* for *)
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+
+ tieslurhandle (multifigure, cpts, numknots, minthk, maxthk);
+ end (* ties and slurs *)
+ (* --------- ARCS and CIRCLES --------- *)
+ else if streq (nam.str, arcnam, 3) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ gettransforms (sx100, sy100, rot, transx, transy);
+
+ thk := getnumber;
+ if (thk < 1) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Arc Thickness not found. Setting to 1');
+ thk := 1;
+ end;
+ i := findvectkind;
+ vk := thevectorof (i);
+
+ i := findlinestyle;
+ if (i <> EMPTY) then
+ patt := thestyleof (getnumber)
+ else
+ patt := solid;
+
+ radius := round (getnumber * SPscale);
+ if (radius = 0) then
+ radius := round(1 * SPscale);
+ i := findatsign;
+ if (i <> EMPTY) then
+ begin
+ x2 := round (getnumber * SPscale);
+ y2 := round (getnumber * SPscale);
+ end
+ else
+ begin
+ x2 := 0; y2 := 0; (* assume center at origin *)
+ end;
+
+ ang1 := getnumber;
+ if (abs(ang1) > 360) then
+ ang1 := ang1 mod 360;
+ ang2 := getnumber;
+ if (abs(ang2) > 360) then
+ ang2 := ang2 mod 360;
+
+ minx := TWO24; miny := TWO24;
+ maxx := -TWO24; maxy := -TWO24;
+
+ if (ang1 = ang2) then
+ begin (* a circle *)
+ defineCircleCpts (radius,x2,y2, cpts, numknots);
+ end
+ else
+ begin (* a real arc *)
+ definearcpts (radius, x2,y2, ang1, ang2, cpts, numknots);
+ end;
+
+ for i := 1 to numknots do
+ begin
+ x1 := cpts[i,1];
+ if (x1 < minx) then
+ minx := x1;
+ if (x1 > maxx) then
+ maxx := x1;
+
+ y1 := cpts[i,2];
+ if (y1 < miny) then
+ miny := y1;
+ if (y1 > maxy) then
+ maxy := y1;
+ end; (* for *)
+
+ BackupInBuf (DVIMark - (specstart));
+ cmd1byte (OURFONTFLAG);
+
+ arccirclehandle (multifigure, SPscale, x2, y2,
+ radius, ang1, ang2,
+ cpts, numknots,
+ 0, 0, thk, vk, patt, minx, maxx, miny, maxy,
+ transx, transy, sx100, sy100, rot)
+
+ end (* arc and circle *)
+ (* ---------- LABELS --------------*)
+ else if streq (nam.str, labelnam, 3) then
+ begin
+ i := findscale;
+ SPscale := thescaleof (i);
+
+ style := getnumber; (* font style number *)
+ if ((style < 1) or (style > MAXLABELFONTS)) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Label style bad? Setting to Style 1');
+ style := 1;
+ end;
+
+ x1 := round (getnumber * SPscale);
+ y1 := round (getnumber * SPscale);
+
+ let := getletter;
+ while (let <> '"') do
+ begin
+ let := getletter;
+ end;
+ i := 0;
+ let := getanything; (* get next letter or whatever *)
+ while (let <> '"') do
+ begin (* get the label phrase *)
+ i := i + 1;
+ phrase.str[i] := let;
+ let := getanything; (* getletter;*)
+ end;
+
+ phrase.str[i+1] := chr(32);
+
+ phrase.len := i;
+
+ BackupInBuf (DVIMark - specstart);
+ cmd1byte (OURFONTFLAG);
+ labelhandle (multifigure, SPscale, x1, y1, 0, 0, style, phrase, 0, 0);
+ end (* label *)
+
+ (* --------- INTERNAL PARAM -------*)
+ else if streq (nam.str, paramnam, 3) then
+ begin
+ i := getnumber; (* addressable param number *)
+
+ begin
+ writeln (logfile,' I do not know what internal parameter #',i:0,' is');
+ end; (* else *)
+ BackupInBuf (DVIMark - (specstart));
+ end (* Internal param *)
+
+ (* ============== NONE OF THE ABOVE ============== *)
+ else
+ begin
+ complain (ERRNOTBAD);
+ write (logfile,'Sorry, I don''t know how to tyl ');
+ writestrng (nam,true);
+
+ while (gotten < numpbytes) do
+ begin
+ b := nextpbyte;
+ end;
+ end;
+ 888:
+ (* make sure that we used up all the bytes in this special *)
+ if (gotten < numpbytes) then
+ begin
+ while (gotten < numpbytes) do
+ begin (* slurp up excess *)
+ b := Dgrabbyte;
+ gotten := gotten + 1;
+ end;
+ end; (* if *)
+ end; (* mainhandlespecials *)
+
+
+ (* ==================================================
+
+ The routines below assume coordinates are already in
+ 4th Quadrant DVI-space
+
+ =====================================================*)
+
+
+
+ {-----------------------------------------------------}
+ (* returns 0 if dy.dx not in font
+ 1 if ok
+ 2 if ok and caller should use two of the "code"s
+ coding scheme requires 0<= [dx, dy] <= 16
+ AND that max(dx, abs(dy)) is in [0,1,2,4,8,16]
+ *)
+function outvector (dx, dy : integer; var code : integer) : integer;
+ label 99;
+ var c : integer;
+ result : integer;
+ begin
+ if (dx < 0) then
+ begin
+ outvector := 0;
+ goto 99;
+ end;
+
+ result := 0; (* init for potential failure *)
+ code := (-1);
+ if (dy < 0) then
+ begin
+ c := 160 + dy + dx - 9*max (dx, -dy);
+ end
+ else
+ begin
+ c := 160 + dy - dx - 7*max (dx, dy);
+ end;
+
+ (* here translate to OUR coding scheme
+ and return the correct number
+ this is needed because "c" thinks the char range
+ is 0 to 160, while we have only 128 chars *)
+
+ if (c = 0) then (* special cases *)
+ begin
+ code := 63;
+ result := 2;
+ end
+ else if (c = 64) then
+ begin
+ code := 95;
+ result := 2;
+ end
+ else
+ begin (* regular ones *)
+ result := 1; (* just one char is fine *)
+ if (c in [1..63]) then
+ code := c - 1
+ else if (c in [80..112]) then
+ code := c - 17
+ else if (c in [120..136]) then
+ code := c - 24
+ else if (c in [140..148]) then
+ code := c - 27
+ else if (c in [150..154]) then
+ code := c - 28
+ else if (c = 160) then
+ code := 127; (* c - 33 *)
+ end;
+ 99:
+ outvector := result;
+ end;
+
+
+
+ (* take care of a Manhattan (horizontal /vertical) line *)
+ {----------------------------------------------------------}
+procedure hvline (lx, by, rx, ty, fontindex : integer);
+ var t, rth, x, y, width, height : integer;
+ begin
+ rth := VFontTable[fontindex]^.PenSize; (* thickness of vector in sp *)
+ if (lx = rx) then
+ begin (* Vertical line *)
+ if (ty > by) then
+ begin
+ t := by; by := ty; ty := t; (* swap *)
+ end;
+ x := round (lx - (rth / 2.0));
+ y := by;
+ width := rth;
+ height := by - ty;
+ end
+ else
+ begin (* Horizontal line *)
+ if (ty < by) then
+ begin
+ t := by; by := ty; ty := t; (* swap *)
+ end;
+ if (lx > rx) then
+ begin
+ t := lx; lx := rx; rx := t; (* swap *)
+ end;
+ x := lx;
+
+ y := (by + (rth div 2)); (* + rth for {h,v}-space *)
+ width := rx - lx;
+ height := rth;
+ end;
+
+ isetpos (x, y);
+ cmd1byte (PUTRULE);
+ cmd4byte (height);
+ cmd4byte (width);
+
+ (* output two dots on ends of the rules
+ at lx, by and rx, ty *)
+ (* the font has already been set before these calls *)
+ Tyldot (lx, by);
+ Tyldot (rx, ty);
+ isetpos (rx, ty);
+ end;
+
+
+ {------------------------------------------------------------}
+procedure diagonal (xl, yb, xr, yt : ScaledPts; fontindex: integer);
+ var t, curx, cury, dx, dy, code : integer;
+ slope : real;
+ mxveclen : ScaledPts;
+ sptovecs : real;
+ rho : ScaledPts;
+
+ {......................................}
+ (* compute maximum length vector character that we can use *)
+
+ procedure getincr (var outdx, outdy : integer);
+ label 99;
+ var radius, x, y : integer;
+ sign : integer;
+ q : real;
+
+ begin (* getincr *)
+ radius := mxveclen; (* radius of semi-square *)
+ (* make sure the pt is outside of the semi-square,
+ scaling down radius if necessary *)
+ while ( ((xr - curx) < radius) and
+ (abs (yt - cury) < radius)) do
+ begin
+ radius := radius div 2;
+ end;
+ if (slope < 0.0) then (* <0 since in 4th quad by now*)
+ sign := -1
+ else
+ sign := +1;
+ if (xr = curx) then
+ begin
+ outdx := 0;
+ outdy := sign * radius;
+ goto 99;
+ end;
+ if (yt = cury) then
+ begin
+ outdx := abs (radius);
+ outdy := 0;
+ goto 99;
+ end;
+
+ (* compute the intersection with the semi-square,
+ choose whichever slope is best *)
+ if (abs (slope) < 1.0) then
+ begin (* mostly horizontal *)
+ outdx := abs (radius);
+ y := yb + round ((curx + abs(radius) - xl) * slope);
+ outdy := y - cury;
+ end
+ else
+ begin (* mostly vertical *)
+ x := xl + round ((cury + (sign * radius) - yb) / slope);
+ outdx := x - curx;
+ outdy := sign * radius;
+ end;
+
+ if (abs (outdy) > abs (yt - cury)) then
+ begin (* truncate *)
+ outdy := yt - cury;
+ end;
+ if (outdx > (xr - curx)) then
+ begin (* truncate *)
+ outdx := xr - curx;
+ end;
+ if (outdx < 0) then
+ begin
+ outdx := 0;
+ end;
+
+ (* method to find the exact intersection of the line segment
+ with the semi-circle, used
+ to determine the x and y values::
+ we do this by using the arctangent of the slope as
+ the angle 'a' from the x-axis. Then use the relation
+ y = r cos a, and x = r sin a
+ we can be smart about all this trig stuff by using
+ the relation :
+ sin (arctan a) = 1/sqrt(1 + a^2)
+ cos (arctan a) = a/sqrt(1 + a^2)
+ Thus:
+ q := (1.0 / sqrt (slope * slope + 1.0));
+ outdx := round (q * radius);
+ outdy := round (q * radius * slope);
+
+ Unfortunately, we cannot access the Vector Font
+ coding scheme because the outdx, outdy 's produced
+ here do no conform to the condition
+ max (dx, abs(dy)) in [0,1,2,4,8,16]
+ when converted to vector-font sizes with
+ sptovecs (see the 'diagonal' proc.).
+ *)
+
+ 99:
+ end; (* getincr *)
+ {.......................................}
+
+ begin (* DIAGONAL *)
+ if (xr <> xl) then
+ slope := (yt - yb) / (xr - xl)
+ else
+ slope := BIGREAL; (* some illegal value *)
+
+ if (xl > xr) then
+ begin
+ t := xl; xl := xr; xr := t;
+ t := yb; yb := yt; yt := t;
+ end; (* swap *)
+
+ curx := xl;
+ cury := yb;
+ mxveclen := (VFontTable[fontindex]^.MaxVectLen);
+ rho := mxveclen div 16; (* minimum radius of vector fonts *)
+ if (rho = 0) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Diagonal: Min radius of vector font is zero. setting to 1');
+ rho := 1;
+ end;
+
+ if ((abs(xl - xr) <= rho) and
+ (abs(yb - yt) <= rho)) then
+ begin (* pretty much a null line *)
+ Tyldot (xl, yb);
+ end
+ else
+ begin
+ sptovecs := 1.0 / rho; (* conversion for scaled pts to vectorfont units *)
+
+ code := -1; (* initialize to a bogus number *)
+
+ (* this conditional really has to have "or"
+ instead of "and", because of lines that are
+ *nearly* horizontal or vertical
+ *)
+ while (((xr - curx) >= rho) or (abs(yt - cury) >= rho)) do
+ begin
+ (* Get the approximate incremental amount. We use this dy/dx
+ pair in order to index into our vector font coding scheme *)
+
+ getincr (dx, dy);
+
+ (* Get the vector character code corresponding to this
+ approximate incremental amount *)
+ t := outvector (round (dx * sptovecs),
+ round (dy * sptovecs),
+ code);
+ (* Now that we have the character code, go find out its actual
+ physical dimensions for the real dy/dx amounts *)
+ if (dy > 0) then
+ dy := VFontTable[fontindex]^.FontInfo[code].Cdp
+ else
+ dy := -(VFontTable[fontindex]^.FontInfo[code].Cht);
+
+ dx := VFontTable[fontindex]^.FontInfo[code].Cwd;
+
+ case (t) of
+ 0: begin
+ complain (ERRREALBAD);
+ writeln (logfile,'Error in Diagonal:: bad dydx');
+ end;
+
+ 1: begin
+ isetpos (curx, cury);
+ iputchar (code);
+ end;
+
+ 2: begin
+ isetpos (curx, cury);
+ iputchar (code);
+ isetpos (curx + (dx div 2), cury + (dy div 2));
+ iputchar (code);
+ end;
+ end; (* case *)
+
+ curx := curx + dx;
+ cury := cury + dy;
+ end; (* while *)
+
+ if ((code >= 0) and
+ (((xr - curx) >= rho) and (abs(yt - cury) >= rho))) then
+ begin
+ iputchar (code);
+ end;
+ end; (* not null line *)
+ end;
+
+
+{-------------------------------------------------------}
diff --git a/macros/latex209/contrib/textyl/psrc/textyl.pas.ag b/macros/latex209/contrib/textyl/psrc/textyl.pas.ag
new file mode 100644
index 0000000000..1a6d2731ef
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/textyl.pas.ag
@@ -0,0 +1,1000 @@
+procedure tylBrokenLine (x0, y0, x1, y1, fontindex : integer;
+ line_type: LineStyle);
+label 10;
+var useXaxis: boolean;
+ a0, b0, a1, b1: integer;
+ a2, a3, b2, b3, K, gap, dot, dash: integer;
+ s, z, fit: real;
+ J, frame, T: integer;
+ Dotgap, Dotdot: integer;
+ Dashgap, Dashdash: integer;
+ DDotgap, DDotdot, DDotdash: integer;
+ a1ma0 : integer;
+
+{.........................................................}
+ procedure spread (lt : LineStyle; extra, T : integer);
+ label 20;
+ begin
+ if (T = 0) then
+ begin { only partial frame fits }
+ if (useXaxis) then
+ diagonal (a0, b0, a1, b1, fontindex)
+ else
+ diagonal (b0, a0, b1, a1, fontindex);
+ goto 20; { exit }
+ end;
+ J := 0;
+ s := float (b1 - b0)/float(a1 - a0);
+ z := float (extra)/float(T);
+ case lt of
+ dotted : repeat a2 := a0 + J*frame;
+ if (extra > 0) then a2 := a2 + round(J*z);
+ a3 := a2 + dot;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ dashed : repeat a2 := a0 + J*frame;
+ if (extra > 0) then a2 := a2 + round(J*z);
+ a3 := a2 + dash;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ dotdash : repeat a2 := a0 + J*frame;
+ if (extra > 0) then a2 := a2 + round(J*z);
+ a3 := a2 + dash;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ a2 := a3 + gap;
+ if (extra > 0) then a2 := a2 + round(z*0.5);
+ a3 := a2 + dot;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ end;
+ 20:
+ end; { spread }
+
+{......................................................}
+ procedure balance (lt : LineStyle; extra, T : integer);
+ label 30;
+ begin
+ if (T = 0) then
+ begin { only partial frame fits }
+ if (useXaxis) then
+ diagonal (a0, b0, a1, b1, fontindex)
+ else
+ diagonal (b0, a0, b1, a1, fontindex);
+ goto 30; { exit }
+ end;
+ J := 0;
+ s := float(b1 - b0)/float(a1 - a0);
+ case lt of
+ dashed : repeat a2 := a0 + J*frame - extra div 2;
+ a3 := a2 + dash;
+ if (J = 0) then a2 := a0;
+ if (a3 > a1) then a3 := a1;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ dotdash : repeat a2 := a0 + J*frame - extra div 2;
+ a3 := a2 + dash;
+ if (J = 0) then a2 := a0;
+ if (a3 > a1) then a3 := a1;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ a2 := a3 + gap;
+ a3 := a2 + dot;
+ b2 := round(s*(a2-a0) + b0);
+ b3 := round(s*(a3-a0) + b0);
+ if (a3 <= a1) then
+ begin
+ if (useXaxis) then
+ diagonal (a2, b2, a3, b3, fontindex)
+ else
+ diagonal (b2, a2, b3, a3, fontindex);
+ end;
+ end;
+ J := J + 1;
+ until (a3 >= a1);
+ end;
+ 30:
+ end; { balance }
+
+{......................................................}
+ function project (I : integer) : integer;
+ var K : integer; { gives the projection of lengths onto axes }
+ begin
+ K := round(I*float(abs(a1-a0))/s);
+ if K = 0 then K := 1;
+ project := K;
+ end;
+{......................................................}
+ procedure setlengths (findex :integer);
+ (* sets the "optimal" sizes for textured lines *)
+ var penrad : integer;
+ siz : VThickness;
+ begin
+ penrad := VFontTable[findex]^.PenSize;
+ siz := VFontTable[findex]^.psize;
+
+ Dotdot := penrad div siz; Dotgap := 6 * penrad;
+ Dashdash := 6 * penrad; Dashgap := 6 * penrad;
+ DDotdash := 6 * penrad; DDotgap := 4 * penrad;
+ DDotdot := penrad div siz;
+ end;
+{........................................}
+procedure setframesize;
+begin
+ case line_type of { length of frame depends on type of broken line }
+ solid : frame := 0;
+ dotted : frame := gap + dot;
+ dashed : frame := gap + dash;
+ dotdash : frame := 2*gap + dot + dash;
+ end;
+end;
+
+{.................................................}
+begin (* TylBrokenLine *)
+if ((x0 = x1) and (y0 = y1)) then
+ begin
+ diagonal (x0, y0, x1, y1, fontindex); { null line }
+ goto 10;
+ end;
+
+ setlengths (fontindex);
+
+if (abs (y1-y0) > abs(x1-x0)) then { longer axis is used as base }
+ begin
+ useXaxis := false;
+ a0 := y0; b0 := x0;
+ a1 := y1; b1 := x1;
+ end
+else
+ begin
+ useXaxis := true;
+ a0 := x0; b0 := y0;
+ a1 := x1; b1 := y1;
+ end;
+{ the distance between a0 and a1 is now greater than that between b0 and b1. }
+
+{ redefine distances as integral units along axes }
+ s := distance (float(a0),float(b0),float(a1),float(b1));
+
+ case line_type of
+ solid: ;
+ dotted:
+ begin
+ gap := project(Dotgap);
+ dot := project(Dotdot);
+ end;
+ dashed:
+ begin
+ gap := project(Dashgap);
+ dash := project(Dashdash);
+ end;
+ dotdash:
+ begin
+ gap := project(DDotgap);
+ dot := project(DDotdot);
+ dash := project(DDotdash);
+ end;
+ end;
+
+ { ensure direction of line is from smaller to
+ larger along the longer axis }
+ if (a0 > a1) then
+ begin
+ J := a0; a0 := a1; a1 := J;
+ J := b0; b0 := b1; b1 := J;
+ end;
+
+ setframesize;
+
+ a1ma0 := a1 - a0;
+
+ { fit is the number of frames that fit in line }
+ if (frame <> 0) then
+ begin
+ fit := (float(a1ma0) / float(frame));
+ end
+ else
+ fit := 1.0;
+
+ if (fit >= 1.0) then
+ T := round (fit)
+ else
+ begin
+ (* change frame elements (dot, dash, gap) since frame is too large *)
+ case line_type of
+ dotted : begin
+ gap := gap - (frame - a1ma0);
+ if (gap < dot) then
+ begin
+ goto 10; (* exit *)
+ end;
+ setframesize;
+ end;
+
+ dashed,
+ dotdash : begin
+ (* idea:decrease gap; if too small then shrink dash and refigure gap*)
+ if ((frame - a1ma0) > (gap div 2)) then
+ begin
+ dash := round (dash * fit * 0.80);
+ gap := round (gap * fit);
+ setframesize;
+ end;
+ gap := gap - (frame - a1ma0);
+ if (line_type = dotdash) then
+ gap := gap div 2;
+ if (gap < dot) then
+ begin
+ goto 10; (* exit *)
+ end;
+ setframesize;
+ end;
+ end; (* case *)
+ T := 1; (* NOW it will fit *)
+ end; (* else *)
+
+
+ case line_type of
+ solid : begin
+ if (useXaxis) then
+ diagonal (a0, b0, a1, b1, fontindex)
+ else
+ diagonal (b0, a0, b1, a1, fontindex);
+ end;
+
+ dotted : begin { dotted lines begin and end on a dot }
+ if ((T*frame + dot) = a1ma0) then
+ spread(dotted, 0, T)
+ else if ((T*frame + dot) > a1ma0) then
+ begin
+{ gap := gap - ((T*frame+dot)-a1ma0);
+{}
+ spread(dotted, a1ma0 - T*frame - dot, T);
+
+{ spread(dotted, a1ma0 - (T-1)*frame - dot, T-1);
+{}
+ end
+ else
+ spread(dotted, a1ma0 - T*frame - dot, T);
+ end;
+
+ dashed : begin
+ { dashed lines begin and end on dash :
+ the beginning and ending dashes are at least half
+ the dash length long. }
+ if ((T*frame + dash) = a1ma0) then
+ spread(dashed, 0, T)
+ else if ((T*frame + dash) > a1ma0) then
+ balance(dashed, T*frame + dash - a1ma0, T)
+ else spread(dashed, a1ma0 - T*frame - dash, T);
+ end;
+
+ dotdash : begin { if ending on a dash then beginning and ending
+ dashes are half the dash length long - final
+ dots are full dot length }
+ if ((T*frame + dash) = a1ma0) then
+ spread(dotdash, 0, T)
+ else if ((T*frame + dash + gap + dot) = a1ma0) then
+ spread(dotdash, 0, T)
+ else if ((T*frame + dash) > a1ma0) then
+ balance(dotdash, T*frame + dash - a1ma0, T)
+ else if ((T*frame + dash + gap + dot) > a1ma0) then
+ spread(dotdash, a1ma0 - T*frame - dash, T)
+ else spread(dotdash, a1ma0 - T*frame - dash - gap - dot, T);
+ end;
+ end;
+10:
+ end;
+
+
+
+{-------------------------------------------------------}
+procedure clampthickness (var thic : VThickness);
+ begin
+ (* #### this is just a simple clamp
+ really should be something like:
+ while not (thic in set_of_appropriate_thicknesses) do
+ modify thic and try again
+ *)
+ if (thic <= LoVThick ) then
+ thic := LoVThick + 1;
+ while ((not (thic in [1,2,3,4,5,6,7,8,9,10,11,12])) and
+ (thic <= HiVThick)) do
+ thic := thic + 1;
+
+ if (thic > HiVThick) then
+ thic := HiVThick;
+ end;
+
+{----------------------------------------------------------}
+procedure slurclamp (var thic : ThickAryType; totpts : integer);
+ (* this post-clamps the sampled thicknesses calculated over the
+ whole of the spline *)
+
+ var i : integer;
+ oneseventh : integer;
+ middle : integer;
+ startval, endval: integer;
+ deltaval, val, incrval, alpha, alphaincr: real;
+
+ begin
+ { $$ NOTE:: How does the ttspline interpolation of thicknesses
+ compare to the below results?? Can we avoid having it done
+ elsewhere and concentrate on it here?? }
+
+ oneseventh := round (totpts / 7.0);
+ for i := 1 to oneseventh do
+ begin
+ thic[i] := thic[1];
+ end;
+ for i := 6*oneseventh to totpts do
+ begin
+ thic[i] := thic[totpts];
+ end;
+
+ middle := round (totpts / 2.0);
+ for i := 3*oneseventh to 4*oneseventh do
+ begin
+ thic[i] := thic[middle];
+ end;
+
+ startval := thic[oneseventh - 1];
+ endval := thic[3*oneseventh + 1];
+ deltaval := (2*(endval - startval))/(2*oneseventh);
+ alphaincr := PI / (2 * oneseventh + 1);
+ alpha := PI;
+ val := float(startval);
+ for i := oneseventh to (3*oneseventh - 1) do
+ begin (* interpolate: ease in from minthick to middlethickness *)
+ alpha := alpha + alphaincr;
+ incrval := ((cos (alpha) + 1.0) / 2.0) * deltaval;
+ val := val + incrval;
+ thic[i] := round(val);
+ end;
+
+ startval := thic[4*oneseventh - 1];
+ endval := thic[6*oneseventh + 1];
+ deltaval := (2*(endval - startval))/(2*oneseventh);
+ alphaincr := PI / (2 * oneseventh + 1);
+ alpha := 0.0;
+ val := float(startval);
+ for i := (4*oneseventh + 1) to 6*oneseventh do
+ begin (* ease out from middle thickness to min thick at far end *)
+ alpha := alpha + alphaincr;
+ incrval := ((cos (alpha) + 1.0) / 2.0) * deltaval;
+ val := val + incrval;
+ thic[i] := round(val);
+ end;
+ end;
+
+{-------------------------------------------------------}
+procedure layline (xl, yb, xr, yt, fontindex : integer;
+ pattern : LineStyle; useVecfontOnly : boolean);
+ var t: integer;
+ begin
+ if (xr < xl) then
+ begin
+ t := xr; xr := xl; xl := t;
+ t := yb; yb := yt; yt := t;
+ end;
+
+ isetfont (VFontTable[fontindex]^.DVIFontNum);
+
+ (* we may want to require using a vector font only,
+ instead of a combination of vectors and TeX-rules.
+ It may look better this way.
+ *)
+ if (useVecfontOnly) then
+ begin
+ tylBrokenLine (xl, yb, xr, yt, fontindex, pattern);
+ end
+ else
+ begin (* be smart about the lines *)
+ if ((xl = xr) and (yb = yt)) or
+ ((xl <> xr) and (yb <> yt)) then (* Null or diagonal lines *)
+ begin
+ if (pattern = solid) then
+ diagonal (xl, yb, xr, yt, fontindex)
+ else
+ tylBrokenLine (xl, yb, xr, yt, fontindex, pattern);
+ end
+ else
+ begin
+{ if (pattern = solid) then
+ hvline (xl, yb, xr, yt, fontindex) (* make use of rules *)
+ else
+USENORULES }
+ tylBrokenLine (xl, yb, xr, yt, fontindex, pattern);
+ end
+ end;
+
+ end;
+
+
+
+{------------------------------------------------------}
+procedure layAspline (thetype : SplineKind;
+ isclosed : boolean;
+ isanArc: boolean;
+ domarks : integer;
+ var cpts : ControlPoints;
+ numpts : integer;
+ thick: VThickness;
+ vkind : VectKind;
+ patt : LineStyle);
+ const DontDoThicks = false;
+ VectorsOnly = true;
+ var pointList: SplineSegments;
+ i, xs, ys : integer;
+ tt1, tt2 : ThickAryType;
+ F: VecIndex;
+ begin
+
+ clampthickness (thick);
+ for i := 0 to (numpts + 3) do
+ tt1[i] := thick;
+
+ (* do any marks if necessary to show the control points *)
+ if (domarks > 0) then
+ begin
+ F := GetVectFont (domarks, VKCirc);
+ isetfont (VFontTable[F]^.DVIFontNum);
+ for i := 1 to numpts do
+ begin
+ Tyldot (cpts[i,1], cpts[i,2]);
+ end;
+ end;
+
+ drawSpline (thetype, isclosed, isanArc, patt,
+ numpts, cpts, pointList, DontDoThicks, tt1, tt2);
+
+
+ F := GetVectFont (thick, vkind);
+ xs := pointList[1, 1];
+ ys := pointList[1, 2];
+
+ for i := 2 to lastPoint do
+ begin
+ layline (xs, ys, pointList[i, 1], pointList[i, 2], F, patt, VectorsOnly);
+ xs := pointList[i, 1];
+ ys := pointList[i, 2];
+ end;
+ if (isclosed) then (* complete the motion *)
+ layline (pointList[lastPoint,1], pointList[lastPoint,2],
+ pointList[1,1], pointList[1,2], F, patt, VectorsOnly);
+ end;
+
+
+{-----------------------------------------------------}
+procedure layNspline (thetype : SplineKind;
+ isclosed : boolean;
+ isitaslur : boolean;
+ domarks : integer;
+ var cpts : ControlPoints;
+ numpts : integer;
+ var thickmatrix : ThickAryType;
+ vkind : VectKind;
+ patt : LineStyle);
+ const NotAnArc = false;
+ DoThicksToo = true;
+ VectorsOnly = true;
+ var pointList: SplineSegments;
+ i, xs, ys : integer;
+ ts : VThickness;
+ tt : ThickAryType;
+ F : VecIndex;
+ begin
+ (* do any marks if necessary to show the control points *)
+ if (domarks > 0) then
+ begin
+ F := GetVectFont (domarks, VKCirc);
+ isetfont (VFontTable[F]^.DVIFontNum);
+ for i := 1 to numpts do
+ begin
+ Tyldot (cpts[i,1], cpts[i,2]);
+ end;
+ end;
+
+ drawSpline (thetype, isclosed, NotAnArc, patt,
+ numpts, cpts, pointList,
+ DoThicksToo, thickmatrix, tt);
+ if ((isitaslur) and (not skiptsclamp)) then
+ begin
+ slurclamp(tt, lastPoint); (* which kind of clamping to use *)
+ end;
+
+ xs := pointList[1, 1];
+ ys := pointList[1, 2];
+ ts := tt[1];
+
+ for i := 2 to lastPoint do
+ begin
+ clampthickness (ts);
+ F := GetVectFont (ts, vkind);
+ layline (xs, ys, pointList[i, 1], pointList[i, 2], F, patt, VectorsOnly);
+ xs := pointList[i, 1];
+ ys := pointList[i, 2];
+ ts := tt[i];
+ end;
+ if (isclosed) then
+ begin
+ ts := tt[lastPoint];
+ clampthickness(ts);
+ F := GetVectFont (ts, vkind);
+ layline (pointList[lastPoint,1], pointList[lastPoint,2],
+ pointList[1,1], pointList[1,2], F, patt, VectorsOnly);
+ end;
+ end;
+
+
+
+{-----------------------------------------------------}
+procedure TylBeam (* fromx, fromy, tox, toy: ScaledPts;
+ staffsize : integer; kind : BeamKind *);
+
+ begin
+
+ end; (* TylBeam *)
+
+
+{-------------------------------------------------------}
+procedure TylLine (* xl, yb, xr, yt: ScaledPoints;
+ thickness: VThickness;
+ vec: VectKind; patt : LineStyle *);
+ const dontCare = false;
+ var findex: VecIndex;
+ begin
+ clampthickness (thickness);
+ findex := GetVectFont (thickness, vec);
+ layline (xl, yb, xr, yt, findex, patt, dontCare);
+ end;
+
+
+{-----------------------------------------------------}
+procedure TylThickThinSpline (* thetype : SplineKind; isclosed : boolean;
+ var KnotArray: ControlPoints;
+ var ThikThinAry: ThickAryType;
+ numknots: integer;
+ vec: VectKind;
+ patt : LineStyle; domarks : integer *);
+ const NotAnArc = false;
+ begin
+ layNspline (thetype, isclosed, NotAnArc, domarks, KnotArray, numknots,
+ ThikThinAry, vec, patt);
+ end;
+
+{----------------------------------------------------}
+procedure TylSpline (* thetype : SplineKind; isclosed : boolean;
+ var KnotArray: ControlPoints; numknots: integer;
+ thick: VThickness; vec: VectKind; patt : LineStyle; domarks : integer*);
+ const NotAnArc = false;
+ begin
+ layAspline (thetype, isclosed, NotAnArc, domarks, KnotArray, numknots,
+ thick, vec, patt);
+ end;
+
+{-----------------------------------------------------}
+procedure TylTieSlur (* KnotArray: ControlPoints;
+ numknots: integer;
+ minthick, maxthick: VThickness *);
+ const ItsASlur = true;
+ NotClosed = false;
+ var ourttarray : ThickAryType;
+ one7th : real;
+ val : VThickness;
+ begin
+
+ clampthickness (minthick);
+ clampthickness (maxthick);
+ if (numknots <> 5) then
+ writeln ('TieSlur needs 5 control points ');
+ one7th := 1.0/7.0;
+ val := round (one7th * (maxthick - minthick));
+ ourttarray[1] := minthick;
+ ourttarray[2] := minthick + val;
+ ourttarray[3] := maxthick;
+ ourttarray[4] := minthick + val;
+ ourttarray[5] := minthick;
+
+ layNspline (CATROM, NotClosed, ItsASlur, 0, KnotArray, numknots, ourttarray,
+ VKCirc, solid);
+ end;
+
+
+{-------------------------------------------------------}
+procedure doTylArc (* iscircle : boolean;
+ var apts : ControlPoints;
+ numknots : integer;
+ thick : VThickness;
+ vec : VectKind;
+ patt : LineStyle *);
+
+ const ItsAnArc = true;
+ begin
+
+ layAspline (BSPL, iscircle, ItsAnArc, 0, apts, numknots, thick, vec, patt);
+ end;
+
+{-----------------------------------------------------------}
+procedure TylArc (* radius : ScaledPts; centx, centy : ScaledPts;
+ firstangle, secondangle : integer;
+ thick : VThickness; vec : VectKind; patt : LineStyle *);
+ var apts : ControlPoints;
+ numknots : integer;
+ iscircle : boolean;
+ begin
+ iscircle := (firstangle = secondangle);
+ if iscircle then
+ begin
+ { maxspan := round ((360.0 / 16.0) * DEGTORAD * radius);
+ {}
+ defineCircleCpts (radius, centx, centy, apts, numknots);
+ end
+ else
+ begin
+ { maxspan := round ((abs (secondangle - firstangle) / 16.0) * DEGTORAD * radius);
+{ }
+ definearcpts (radius, centx, centy,
+ firstangle, secondangle, apts, numknots);
+ end;
+
+ doTylArc (iscircle, apts, numknots, thick, vec, patt);
+
+ end;
+
+{-----------------------------------------------------------}
+procedure TylLabel (* xpos, ypos : ScaledPts;
+ fontstyle : integer;
+ phrase : charstring;
+ phraselen : integer *);
+var findex : integer;
+ c : integer;
+ spaceover : integer;
+
+begin
+if ((fontstyle < 1) or (fontstyle > MAXLABELFONTS)) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Unexpected bad fontstyle in TylLabel: ',fontstyle:0,'?');
+ jumpout;
+ end;
+findex := GetLabFont (fontstyle);
+isetpos (xpos, ypos);
+IPUSH;
+isetfont (LFontTable[findex]^.DVIFontNum);
+spaceover := LFontTable[findex]^.spacewidth;
+for c := 1 to phraselen do
+ begin
+ if (phrase[c] <> xchr[32]) then
+ begin
+ cmd1byte (SET1);
+ cmd1byte (xord[ phrase[ c ]]);
+ end
+ else
+ begin (* move over *)
+ cmd1byte (RIGHTLEFT + 2); (* assume distance is less than 3 bytes *)
+ cmdSigned (spaceover, 3);
+ end;
+ end;
+IPOP;
+end;
+
+
+(* && start dvidvi section *)
+{-----------------------------------------------------}
+procedure initialize;
+ var
+ i: integer;
+ begin
+ for i := 0 to 31 do
+ xchr[i] := '?';
+ xchr[32] := ' ';
+ xchr[33] := '!';
+ xchr[34] := '"';
+ xchr[35] := '#';
+ xchr[36] := '$';
+ xchr[37] := '%';
+ xchr[38] := '&';
+ xchr[39] := '''';
+ xchr[40] := '(';
+ xchr[41] := ')';
+ xchr[42] := '*';
+ xchr[43] := '+';
+ xchr[44] := ',';
+ xchr[45] := '-';
+ xchr[46] := '.';
+ xchr[47] := '/';
+ xchr[48] := '0';
+ xchr[49] := '1';
+ xchr[50] := '2';
+ xchr[51] := '3';
+ xchr[52] := '4';
+ xchr[53] := '5';
+ xchr[54] := '6';
+ xchr[55] := '7';
+ xchr[56] := '8';
+ xchr[57] := '9';
+ xchr[58] := ':';
+ xchr[59] := ';';
+ xchr[60] := '<';
+ xchr[61] := '=';
+ xchr[62] := '>';
+ xchr[63] := '?';
+ xchr[64] := '@';
+ xchr[65] := 'A';
+ xchr[66] := 'B';
+ xchr[67] := 'C';
+ xchr[68] := 'D';
+ xchr[69] := 'E';
+ xchr[70] := 'F';
+ xchr[71] := 'G';
+ xchr[72] := 'H';
+ xchr[73] := 'I';
+ xchr[74] := 'J';
+ xchr[75] := 'K';
+ xchr[76] := 'L';
+ xchr[77] := 'M';
+ xchr[78] := 'N';
+ xchr[79] := 'O';
+ xchr[80] := 'P';
+ xchr[81] := 'Q';
+ xchr[82] := 'R';
+ xchr[83] := 'S';
+ xchr[84] := 'T';
+ xchr[85] := 'U';
+ xchr[86] := 'V';
+ xchr[87] := 'W';
+ xchr[88] := 'X';
+ xchr[89] := 'Y';
+ xchr[90] := 'Z';
+ xchr[91] := '[';
+ xchr[92] := '\';
+ xchr[93] := ']';
+ xchr[94] := '^';
+ xchr[95] := '_';
+ xchr[96] := '`';
+ xchr[97] := 'a';
+ xchr[98] := 'b';
+ xchr[99] := 'c';
+ xchr[100] := 'd';
+ xchr[101] := 'e';
+ xchr[102] := 'f';
+ xchr[103] := 'g';
+ xchr[104] := 'h';
+ xchr[105] := 'i';
+ xchr[106] := 'j';
+ xchr[107] := 'k';
+ xchr[108] := 'l';
+ xchr[109] := 'm';
+ xchr[110] := 'n';
+ xchr[111] := 'o';
+ xchr[112] := 'p';
+ xchr[113] := 'q';
+ xchr[114] := 'r';
+ xchr[115] := 's';
+ xchr[116] := 't';
+ xchr[117] := 'u';
+ xchr[118] := 'v';
+ xchr[119] := 'w';
+ xchr[120] := 'x';
+ xchr[121] := 'y';
+ xchr[122] := 'z';
+ xchr[123] := '{';
+ xchr[124] := '|';
+ xchr[125] := '}';
+ xchr[126] := '~';
+ for i := 127 to 255 do
+ xchr[i] := '?';
+ for i := 0 to 127 do
+ xord[chr(i)] := 32;
+ for i := 32 to 126 do
+ xord[xchr[i]] := i;
+ initallspline;
+ initVnMnLtables;
+ multifigure := 0;
+ pgfigurenum := 0;
+ TotBytesWritten := 0;
+ ourq := 0;
+ specstart := 0;
+ currpagenum := 0;
+ newbackptr := (-1);
+ oldbackptr := (-1);
+ ourfontnum := (-1); (* undefined *)
+ origTexfont := (-1);
+ ourpushdepth := 0;
+ FTBDs := 0;
+ InitDVIBuf;
+ nf := 0;
+ inpostamble := false;
+ didnewfonts := false;
+ maxpages := 10000;
+ sysdependent;
+ s := 0;
+ skiptsclamp := false;
+ ErrorOccurred := false;
+ end;
+
+
+
+procedure inputln (var buffer : strng);
+var
+ k: 0..ARRLIMIT;
+begin
+
+ flush(output);
+
+ if eoln(input) then
+ readln(input);
+ k := 1;
+ while (k < ARRLIMIT) and (not eoln(input)) do
+ begin
+ buffer.str[k] := input^;
+ k := k + 1;
+ get(input)
+ end;
+ buffer.str[k] := ' ';
+ buffer.len := k - 1;
+end;
+
+function revindex (st : strng; let : char) : integer;
+label 2;
+var posit,i : integer;
+begin
+ posit := 0;
+ for i := st.len downto 1 do
+ begin
+ if (st.str[i] = let) then
+ begin
+ posit := i;
+ goto 2;
+ end;
+ end;
+2:
+ revindex := posit;
+end;
+
+
+procedure stripblanks (var st : strng);
+var i,j,k: integer;
+ temp : charstring;
+ begin
+ j := 1;
+ i := 1;
+ while ((i <= st.len) and
+ ((st.str[i] = ' ') or (st.str[i] = xchr[HT]))) do
+ begin
+ j := j + 1;
+ i := i + 1;
+ end;
+
+(* j now points to the first non-blank character in st.str *)
+ i := 1;
+ for k := j to st.len do
+ begin
+ if ((st.str[k] <> ' ') and (st.str[k] <> xchr[HT])) then
+ begin
+ temp[i] := st.str[k];
+ i := i + 1;
+ end;
+ end;
+ (* now copy it back *)
+ if (i <> 1) then
+ begin (* there was blankspace *)
+ for k := 1 to (i- 1) do
+ st.str[k] := temp[k];
+ st.len := i - 1;
+
+ st.str[i] := chr(32); (* end of string *)
+
+ end;
+ end;
+
+
+{-----------------------------------------------------}
+procedure AskandOpenFiles;
+var isok : boolean;
+ i : integer;
+ rp : integer;
+ tempname : strng;
+begin
+ isok := false;
+ while (not isok) do
+ begin
+ write (' DVI-input File Name: ');
+ inputln (dvifname);
+ stripblanks (dvifname);
+
+ rp := revindex (dvifname, '.');
+ if (rp = 0) then
+ begin
+ (* add a ".dvi" extension *)
+ i := dvifname.len;
+ dvifname.str[i + 1] := '.';
+ dvifname.str[i + 2] := 'd';
+ dvifname.str[i + 3] := 'v';
+ dvifname.str[i + 4] := 'i';
+ dvifname.len := i + 4;
+ end;
+ if (not opendvifile) then
+ begin
+ isok := false; (* it is empty *)
+ writestrng(dvifname,false);
+ writeln(': Empty File?? Try another name.');
+ end
+ else
+ isok := true;
+ end; (* while *)
+
+ (* and ask for the name of the output file *)
+ (* default it to be the same prefix, but with a ".tyl" suffix *)
+ strcopy (dvifname.str, outname.str, dvifname.len);
+ outname.len := dvifname.len;
+ rp := revindex (outname, '.');
+ i := rp - 1;
+ outname.str[i + 1] := '.';
+ outname.str[i + 2] := 't';
+ outname.str[i + 3] := 'y';
+ outname.str[i + 4] := 'l';
+ outname.len := i + 4;
+
+ writeln (' DVI-output File Name :');
+ write('(different than input name)[default of ');
+ writestrng (outname,false);
+ write(']');
+ inputln (tempname);
+ if (tempname.len > 1) then
+ begin (* a filename was typed in *)
+
+ strcopy (tempname.str, outname.str, tempname.len);
+ end;
+
+ openoutputfile;
diff --git a/macros/latex209/contrib/textyl/psrc/textyl.pas.ah b/macros/latex209/contrib/textyl/psrc/textyl.pas.ah
new file mode 100644
index 0000000000..484c45dbb4
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/textyl.pas.ah
@@ -0,0 +1,873 @@
+
+ strcopy (dvifname.str, logfilnam.str, dvifname.len);
+ logfilnam.len := dvifname.len;
+ rp := revindex (logfilnam, '.');
+ (* add a ".tlog" extension *)
+ i := rp - 1;
+ logfilnam.str[i + 1] := '.';
+ logfilnam.str[i + 2] := 't';
+ logfilnam.str[i + 3] := 'l';
+ logfilnam.str[i + 4] := 'o';
+ logfilnam.str[i + 5] := 'g';
+ logfilnam.len := i + 5;
+
+ openlogfile;
+end;
+
+
+{-----------------------------------------------------}
+ function inTFM (z: integer): boolean;
+ label
+ 9997, 9998, 9999;
+ var
+ k: integer;
+ lh: integer;
+ nw: integer;
+ alpha, beta: integer;
+ begin
+ readtfmword;
+ lh := b2 * 256 + b3;
+ readtfmword;
+ font[nf].bc := b0 * 256 + b1;
+ font[nf].ec := b2 * 256 + b3;
+ if (font[nf].ec < font[nf].bc) then
+ font[nf].bc := font[nf].ec + 1;
+ readtfmword;
+ nw := b0 * 256 + b1;
+ if ((nw = 0) or (nw > 256)) then
+ goto 9997;
+ for k := 1 to 3 + lh do
+ begin
+ if eof(tfmfile) then
+ goto 9997;
+ readtfmword;
+ if (k = 4) then
+ if (b0 < 128) then
+ tfmchecksum := ((b0 * 256 + b1) * 256 + b2) * 256 + b3
+ else
+ tfmchecksum := (((b0 - 256) * 256 + b1) * 256 + b2) * 256 + b3
+ end;
+
+ for k := 0 to (font[nf].ec - font[nf].bc) do
+ begin
+ readtfmword;
+ if (b0 > nw) then
+ goto 9997;
+ font[nf].widths[k] := b0
+ end;
+ alpha := 16 * z;
+ beta := 16;
+ while z >= TWO23 do
+ begin
+ z := z div 2;
+ beta := beta div 2
+ end;
+ for k := 0 to nw - 1 do
+ begin
+ readtfmword;
+ inwidth[k] := (((b3 * z) div 256 + b2 * z) div 256 + b1 * z) div beta;
+ if b0 > 0 then
+ if b0 < 255 then
+ goto 9997
+ else
+ inwidth[k] := inwidth[k] - alpha;
+ end;
+ if inwidth[0] <> 0 then
+ goto 9997;
+ with font[nf] do
+ begin
+ for k := 0 to (ec - bc) do
+ if widths[k] = 0 then
+ begin
+ widths[k + bc] := TWO31;
+{ pixelwidths[k + bc] := 0;}
+ end
+ else
+ begin
+ widths[k + bc] := inwidth[widths[k]];
+{ pixelwidths[k + bc] := round(conv * widths[k]);}
+ end;
+ end; (* with *)
+ inTFM := true;
+ goto 9999;
+9997:
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, TFM file is bad');
+
+9998:
+ inTFM := false;
+9999:
+
+ end;
+
+
+
+{-----------------------------------------------------}
+procedure Fastdefinefont (fn: integer);
+var p, k: integer;
+ n, waste: integer;
+ c, q, d: integer;
+
+begin { Fastdefinefont }
+ c := Dsign4byte;
+ q := Dsign4byte;
+ d := Dsign4byte;
+ p := Dget1byte;
+ n := Dget1byte;
+ for k := 1 to (p + n) do
+ waste := Dget1byte;
+end; { Fastdefinefont }
+
+
+{-----------------------------------------------------}
+ procedure definefont (e: integer);
+ var
+ f: 0..MAXFONTS;
+ p, k: integer;
+ n: integer;
+ c, q, d: integer;
+ r: integer;
+ begin
+ if (nf = MAXFONTS) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'TeXtyl capacity exceeded (max fonts=', MAXFONTS: 1, ')!');
+ writeln('TeXtyl capacity exceeded (max fonts=', MAXFONTS: 1, ')!');
+ jumpout
+ end;
+ font[nf].num := e;
+ f := 0;
+ while font[f].num <> e do (* find first occurrence *)
+ f := f + 1;
+ c := Dsign4byte;
+ font[nf].checksum := c;
+ q := Dsign4byte;
+ font[nf].scaledsize := q;
+ d := Dsign4byte;
+ font[nf].designsize := d;
+ p := Dget1byte;
+ n := Dget1byte;
+ font[nf].name.len := p + n;
+ for k := 1 to (p + n) do
+ font[nf].name.str[k] := Dget1byte;
+
+ if (f = nf) then
+ begin (* f = nf *)
+ for k := 1 to AREALENGTH do
+ tfmname.str[k] := ' ';
+
+ r := 0;
+
+ for k := 1 to font[nf].name.len do
+ begin
+ r := r + 1;
+ tfmname.str[r] := xchr[font[nf].name.str[k]]
+ end;
+ tfmname.str[r + 1] := '.';
+ tfmname.str[r + 2] := 't';
+ tfmname.str[r + 3] := 'f';
+ tfmname.str[r + 4] := 'm';
+
+ tfmname.str[r + 5] := chr(32);
+
+ tfmname.len := r + 4;
+
+ if (not opentfmfile) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, TFM file can''t be opened!');
+ writestrng(tfmname, false);
+ writeln(' cannot be opened. Aborting.');
+ jumpout;
+ end
+ else
+ begin
+ if (q <= 0) or (q >= TWO27) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, bad scale (', q: 1, ')!');
+ end
+ else if (d <= 0) or (d >= TWO27) then
+ begin
+ complain (ERRREALBAD);
+ writestrng(tfmname,true);
+ writeln(logfile,'---not loaded, bad design size (', d: 1, ')!');
+ end
+ else
+ if inTFM(q) then
+ begin (* intfm *)
+ font[nf].space := q div 6;
+ if (c <> 0) and (tfmchecksum <> 0) and (c <> tfmchecksum) then
+ begin
+ writeln(logfile,'Problem in fig#',pgfigurenum:0,' on page ',currpagenum:0);
+ writestrng(tfmname,true);
+ writeln(logfile,'---beware: check sums do not agree!');
+ writeln(logfile,' (', c: 1, ' vs. ', tfmchecksum: 1, ')');
+ end;
+ d := round(100.0 * conv * q / (trueconv * d));
+ nf := nf + 1;
+ font[nf].space := 0;
+ end (* intfm *)
+ end;
+ end;
+ end;
+
+{-----------------------------------------------------}
+ function firstpar (o: OctByt): integer;
+ var fpar : integer;
+ begin
+ case (o) of
+ 0, 1, 2, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104,
+ 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125,
+ 126, 127:
+ fpar := o - 0;
+ 128, 133, 235, 239, 243:
+ fpar := Dget1byte;
+ 129, 134, 236, 240, 244:
+ fpar := Dget2byte;
+ 130, 135, 237, 241, 245:
+ fpar := Dget3byte;
+ 143, 148, 153, 157, 162, 167:
+ fpar := Dsign1byte;
+ 144, 149, 154, 158, 163, 168:
+ fpar := Dsign2byte;
+ 145, 150, 155, 159, 164, 169:
+ fpar := Dsign3byte;
+ 131, 132, 136, 137, 146, 151, 156,
+ 160, 165, 170, 238, 242, 246:
+ fpar := Dsign4byte;
+ 138, 139, 140, 141, 142, 247, 248,
+ 249, 250, 251, 252, 253, 254, 255:
+ fpar := 0;
+ 147:
+ fpar := w;
+ 152:
+ fpar := x;
+ 161:
+ fpar := y;
+ 166:
+ fpar := z;
+ 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184,
+ 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226,
+ 227, 228, 229, 230, 231, 232, 233,
+ 234:
+ fpar := o - 171
+ end;
+ firstpar := fpar;
+ end;
+
+{-----------------------------------------------------}
+ function specialcases (o: OctByt; p: integer): boolean;
+ label
+ 46, 44, 30, 9998;
+ var
+ pure: boolean;
+
+ begin
+ pure := true;
+ if ((o < 157) or (o > 249)) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile, 'undefined command ', o: 1, '!');
+ goto 30;
+ end;
+ case (o) of
+ 157, 158, 159, 160:
+ begin
+ goto 44;
+ end;
+ 161, 162, 163, 164, 165:
+ begin
+ y := p;
+ goto 44;
+ end;
+ 166, 167, 168, 169, 170:
+ begin
+ z := p;
+ goto 44;
+ end;
+ 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184,
+ 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226,
+ 227, 228, 229, 230, 231, 232, 233,
+ 234:
+ begin
+ goto 46;
+ end;
+ 235, 236, 237, 238:
+ begin
+ goto 46;
+ end;
+ 243, 244, 245, 246:
+ begin
+ definefont(p);
+ goto 30;
+ end;
+
+ 239, 240, 241, 242:
+ begin (* =========specials============= *)
+ mainhandlespecials (o, p);
+ goto 30;
+ end;
+ 247:
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'preamble command within a page!');
+ goto 9998;
+ end;
+ 248, 249:
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'postamble command within a page!');
+ goto 9998;
+ end;
+ (* others:
+ begin
+ write(' ', 'undefined command ', o: 1, '!');
+ goto 30;
+ end
+ *)
+ end;
+44: (* label *)
+ if (v > 0) and (p > 0) then
+ if (v > TWO31 - p) then
+ begin
+ p := TWO31 - v
+ end;
+ if (v < 0) and (p < 0) then
+ if ((-v) > (p + TWO31)) then
+ begin
+ p := -v - TWO31
+ end;
+
+ v := v + p;
+
+ goto 30;
+46: (* label *)
+ font[nf].num := p;
+ curfont := 0;
+ while font[curfont].num <> p do
+ curfont := curfont + 1;
+ goto 30 ;
+9998:
+ pure := false;
+30:
+ specialcases := pure;
+ end;
+
+
+{-----------------------------------------------------}
+ function dopage : boolean;
+ label
+ 41, 42, 43, 30, 9998, 9999;
+ var
+ o: OctByt;
+ p, q: integer;
+
+ begin
+ curfont := nf;
+ s := 0;
+ h := 0;
+ v := 0;
+ w := 0;
+ x := 0;
+ y := 0;
+ z := 0;
+
+ ourxpos := 0;
+ ourypos := 0;
+ ourfontnum := (-1);
+ while true do
+ begin
+ o := Dget1byte;
+ p := firstpar(o);
+ if eof(dvifile) then begin
+ writeln(logfile, 'Bad DVI file: ', 'the file ended prematurely', '!');
+ writeln('Bad DVI file: ', 'the file ended prematurely', '!');
+ jumpout
+ end;
+ if o <= 131 then
+ begin
+ goto 41;
+ end
+ else
+ begin
+ if (o > 156) then
+ begin
+ if specialcases(o, p) then
+ goto 30
+ else
+ goto 9998;
+ end;
+
+ case (o) of
+ 133, 134, 135, 136:
+ begin
+ goto 41;
+ end;
+ 132, 137:
+ begin
+ goto 42
+ end;
+ 138:
+ begin
+ goto 30;
+ end;
+ 139:
+ begin (* BOP *)
+ complain (ERRREALBAD);
+ writeln(logfile, 'bop occurred before eop');
+ goto 9998; (* Fail *)
+ end;
+ 140:
+ begin (* EOP *)
+ if (s <> 0) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile, 'stack not empty at end of page (level ', s: 1, ')!');
+ end;
+ if (multifigure <> 0) then
+ begin
+ complain (ERRBAD);
+ writeln(logfile,'Some figure definition not closed at end of page ', currpagenum:0,'!');
+ end;
+
+ write (currpagenum:0,']');
+ write (logfile,currpagenum:0,']');
+ if ((currpagenum mod 10) = 0) then
+ writeln;
+ dopage := true;
+ goto 9999;
+ end;
+ 141:
+ begin (* PUSH *)
+ with stack[s] do
+ begin
+ sh := h;
+ sv := v;
+ sw := w;
+ sx := x;
+ sy := y;
+ sz := z;
+ end; (* with *)
+ s := s + 1;
+ goto 30;
+ end;
+ 142:
+ begin (* POP *)
+ if s = 0 then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'illegal pop at level zero!');
+ end
+ else
+ begin
+ s := s - 1;
+ with stack[s] do
+ begin
+ h := sh;
+ v := sv;
+ w := sw;
+ x := sx;
+ y := sy;
+ z := sz;
+ end;
+ end;
+ goto 30;
+ end;
+ 143, 144, 145, 146:
+ begin
+ q := p;
+ goto 43
+ end;
+ 147, 148, 149, 150, 151:
+ begin
+ w := p;
+ q := p;
+ goto 43
+ end;
+ 152, 153, 154, 155, 156:
+ begin
+ x := p;
+ q := p;
+ goto 43
+ end;
+ (* others:
+ if specialcases(o, p) then
+ goto 30
+ else
+ goto 9998;
+ *)
+ end; (* case *)
+ end; (* else *)
+41: (* finish cmd to set/put a char *)
+ if p < 0 then
+ p := 255 - (-1 - p) mod 256
+ else if p >= 256 then
+ p := p mod 256;
+ if (p < font[curfont].bc) or (p > font[curfont].ec) then
+ q := TWO31
+ else
+ q := font[curfont].widths[p];
+ if (q = TWO31) then
+ begin
+ complain (ERRREALBAD);
+ writeln(logfile,'Character ', p:1,' invalid in font #',curfont:0);
+ end;
+ if o >= 133 then
+ goto 30;
+ if q = TWO31 then
+ q := 0;
+ goto 43;
+
+42: (* finish cmd to set/put rule *)
+ q := Dsign4byte;
+ if o = 137 then
+ goto 30;
+ goto 43 ;
+
+43: (*finish cmd that sets h += q *)
+ if (h > 0) and (q > 0) then
+ if (h > (TWO31 - q)) then
+ begin
+ q := TWO31 - h
+ end;
+ if (h < 0) and (q < 0) then
+ if ((-h) > (q + TWO31)) then
+ begin
+ q := (-h) - TWO31
+ end;
+
+ h := h + q;
+30:
+ end;
+9998:
+ dopage := false;
+9999:
+
+ end;
+
+{-----------------------------------------------------}
+ procedure skippages;
+ label
+ 9999;
+ var
+ p: integer;
+ k: 0..255;
+ downthedrain: integer;
+ begin
+ while true do
+ begin
+ if eof(dvifile) then
+ begin
+ writeln(logfile, 'Bad DVI file: ', 'the file ended prematurely', '!');
+ write(' ', 'Bad DVI file: ', 'the file ended prematurely', '!');
+ jumpout
+ end;
+ k := Dget1byte;
+ p := firstpar(k);
+ case (k) of
+ 139:
+ begin (* BOP *)
+ newbackptr := DVIMark + TotBytesWritten - 1;
+ currpagenum := Dsign4byte; (* count[0] *)
+ for k := 1 to 9 do
+ waste := Dsign4byte; (* WAS count[k] := *)
+ downthedrain := Dsign4byte;
+ BackupInBuf (4);
+ cmdSigned (oldbackptr, 4);
+ oldbackptr := newbackptr;
+ write(' [');
+ write(logfile,' [');
+ goto 9999;
+ end;
+ 132, 137: (* RULE *)
+ downthedrain := Dsign4byte;
+ 243, 244, 245, 246:
+ begin
+ definefont(p);
+ end;
+ 239, 240, 241, 242: (* specials *)
+ begin
+ mainhandlespecials (k, p);
+ end;
+ 248:
+ begin (* POST *)
+ ourq := DVIMark + TotBytesWritten - 1;
+ inpostamble := true;
+ goto 9999
+ end;
+ (* others:
+ null
+ *)
+ end
+ end;
+ 9999:
+
+ end;
+
+{-----------------------------------------------------}
+ procedure readpostamble;
+ var
+ k: integer;
+ p, q, m: integer;
+ indx : integer;
+ begin
+ if (Dsign4byte <> numerator) then
+ writeln(logfile,'Postamble',' numerator',' doesn''t match the preamble!');
+ if (Dsign4byte <> denominator) then
+ writeln(logfile,'Postamble',' denominator',' doesn''t match the preamble!');
+ if (Dsign4byte <> mag) then
+ begin
+ writeln(logfile,'Postamble',' magnification',' doesn''t match the preamble!');
+ end;
+ maxv := Dsign4byte;
+ maxh := Dsign4byte;
+ maxs := Dget2byte;
+ BackupInBuf (2);
+ cmd2byte (maxs + 2); (* pretend the stack depth
+ * does not increase by
+ * more than two
+ *)
+
+ totalpages := Dget2byte;
+ repeat
+ k := Dget1byte;
+ if (k >= 243) and (k < 247) then
+ begin
+ p := firstpar(k);
+ Fastdefinefont(p);
+ k := 138;
+ end
+ until k <> 138; (* NOP *)
+
+ (* here, backup 1, enter all our fonts and
+ then output the 249 that we backed over *)
+ BackupInBuf (1);
+ for indx := 1 to MFontsDefd do
+ begin
+ with MFontTable[indx]^ do
+ enterfont (DVIFontNum, Cksum, DesSize,
+ DesSize, FontName );
+ end; (* for *)
+ for indx := 1 to VFontsDefd do
+ begin
+ with VFontTable[indx]^ do
+ enterfont (DVIFontNum, Cksum, DesSize,
+ DesSize, FontName);
+ end; (* for *)
+ for indx := 1 to LFontsDefd do
+ begin
+ with LFontTable[indx]^ do
+ enterfont (DVIFontNum, Cksum, DesSize,
+ DesSize, FontName);
+ end;
+ cmd1byte(249); (* post post *)
+
+ if (k <> 249) then
+ writeln(logfile,'byte ',k:0,' is not postpost!');
+ q := Dsign4byte;
+ BackupInBuf (4);
+ cmd4byte (ourq);
+ m := Dget1byte;
+ if (m <> 2) then
+ writeln(logfile,'identification should be ', 2: 1, '!');
+ m := 223;
+ while (m = 223) and not eof(dvifile) do
+ m := Dget1byte;
+ if not eof(dvifile) then
+ begin
+ writeln(' ', 'Bad DVI file: ', 'signature in should be 223', '!');
+ writeln(logfile, 'Bad DVI file: ', 'signature in should be 223', '!');
+ jumpout
+ end;
+ end;
+
+
+(* MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN *)
+begin (* main *)
+ initialize;
+ AskandOpenFiles; (* ask for filenames of inputdvi and outputfil *)
+
+ writeln(logfile, TylVersion,' for Berkeley Unix');
+
+ write(logfile,'Reading File: ');
+ writestrng(dvifname,true);
+ writeln(logfile);
+
+
+ p := Dget1byte;
+ if (p <> 247) then
+ begin
+ write(' ', 'Bad DVI file: ', 'First byte isn''t start of preamble!', '!');
+ writeln(logfile,'Bad DVI file: ', 'First byte isn''t start of preamble!', '!');
+ jumpout
+ end;
+ p := Dget1byte;
+ if (p <> 2) then
+ writeln(logfile,'identification in byte 1 should be ', 2: 1, '!');
+ numerator := Dsign4byte;
+ denominator := Dsign4byte;
+ if (numerator <= 0) then
+ begin
+ write(' ', 'Bad DVI file: ', 'numerator is ', numerator: 1, '!');
+ writeln(logfile, 'Bad DVI file: ', 'numerator is ', numerator: 1, '!');
+ jumpout
+ end;
+ if (denominator <= 0) then
+ begin
+ write(' ', 'Bad DVI file: ', 'denominator is ', denominator: 1, '!');
+ writeln(logfile, 'Bad DVI file: ', 'denominator is ', denominator: 1, '!');
+ jumpout
+ end;
+ conv := numerator / 254000.0 * (resolution / denominator);
+ mag := Dsign4byte;
+ if (mag <= 0) then
+ begin
+ write(' ', 'Bad DVI file: ', 'magnification is ', mag: 1, '!');
+ writeln(logfile, 'Bad DVI file: ', 'magnification is ', mag: 1, '!');
+ jumpout
+ end;
+ magfactor := mag / 1000.0;
+ trueconv := conv;
+ conv := trueconv * magfactor;
+ p := Dget1byte; (* the 'k' of the preamble *)
+ while p > 0 do
+ begin
+ p := p - 1;
+ waste := Dget1byte;
+ end;
+
+ skippages;
+ if not inpostamble then
+ begin
+ while (maxpages > 0) do
+ begin (* while *)
+ maxpages := maxpages - 1;
+ if (not dopage) then
+ begin
+ write(' ', 'Bad DVI file: ', 'page ended unexpectedly', '!');
+ writeln(logfile, 'Bad DVI file: ', 'page ended unexpectedly', '!');
+ jumpout
+ end;
+ (* now we are at an EOP ---end of page *)
+ (* flushout GDVIbuffer, and reset counters *)
+{ writeln('EOP: bytes used= ',GDVIBuf.TotByteLen:0); }
+ WriteDVIBuf;
+ ClearDVIBuf;
+ multifigure := 0;
+ pgfigurenum := 0;
+ FTBDs := 0;
+ didnewfonts := false;
+ repeat
+ k := Dget1byte;
+ if (k >= 243) and (k < 247) then
+ begin (* fontdefs *)
+ p := firstpar(k);
+ definefont(p);
+ k := 138
+ end;
+ until (k <> 138); (* nop *)
+
+ if (k = 248) then
+ begin
+ inpostamble := true;
+ ourq := DVIMark + TotBytesWritten - 1;
+ goto 30
+ end;
+
+ if (k = 139) then (* BOP *)
+ begin
+ newbackptr := DVIMark + TotBytesWritten - 1;
+ currpagenum := Dsign4byte; (* Count[0] *)
+ for k := 1 to 9 do
+ waste := Dsign4byte; (* WAS count[k] := *)
+ waste := Dsign4byte; (* backpointer *)
+ BackupInBuf (4);
+ cmdSigned (oldbackptr, 4);
+ oldbackptr := newbackptr;
+ write(' [');
+ write(logfile,' [');
+ end
+ else
+ begin (* NOT bop?? *)
+ writeln('We did not find BOP when expected');
+ writeln(logfile,'We did not find BOP when expected');
+ jumpout;
+ end;
+
+ end; (* while *)
+30:
+ end; (* if not inpostamble *)
+ if (not inpostamble) then
+ skippages;
+ waste := Dsign4byte; (* ptr to the last bop in file *)
+ BackupInBuf (4);
+ cmdSigned (oldbackptr, 4);
+ readpostamble;
+ WriteDVIBuf;
+
+ while ((TotBytesWritten mod 4) <> 0) do
+ OutputByte(223); (* final signatures *)
+
+ writeln;
+ writeln(logfile);
+ write ('Output written on ');
+ writestrng(outname, false);
+ write(' (',currpagenum:0,' page');
+ if (currpagenum > 1) then
+ write('s');
+ writeln(', ',TotBytesWritten:0,' bytes).');
+
+ write (logfile,'Output written on ');
+ writestrng(outname, true);
+ write(logfile,' (',currpagenum:0,' page');
+ if (currpagenum > 1) then
+ write(logfile,'s');
+ writeln(logfile,', ',TotBytesWritten:0,' bytes).');
+
+ write ('Log written on ');
+ writestrng(logfilnam, false); writeln;
+ write (logfile,'Log written on ');
+ writestrng(logfilnam, true); writeln (logfile);
+ writeln;
+ writeln(logfile);
+666:
+ if (ErrorOccurred) then
+ begin
+ writeln;
+ writeln('Some error(s) occurred. Please check Logfile for details');
+ writeln('Assume that the outputfile is incorrect');
+ end;
+end.
+
diff --git a/macros/latex209/contrib/textyl/psrc/tylext.c b/macros/latex209/contrib/textyl/psrc/tylext.c
new file mode 100644
index 0000000000..9bbd057893
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/tylext.c
@@ -0,0 +1,138 @@
+/* External procedures for dvitype */
+/* Written by: H. Trickey, 2/19/83 (adapted from TeX's ext.c) */
+
+#include "texpaths.h" /* defines default TEXFONTS path */
+#include "h00vars.h" /* defines Pascal I/O structure */
+
+char *fontpath;
+
+char *getenv();
+
+/*
+ * setpaths is called to set up the pointer fontpath
+ * as follows: if the user's environment has a value for TEXFONTS
+ * then use it; otherwise, use defaultfontpath.
+ */
+setpaths()
+{
+ register char *envpath;
+
+ if ((envpath = getenv("TEXFONTS")) != NULL)
+ fontpath = envpath;
+ else
+ fontpath = defaultfontpath;
+}
+
+#define namelength 100 /* should agree with defn in textyl program*/
+extern char thefilename[],realnameoffile[]; /* these have size namelength */
+
+/*
+ * testaccess(amode,filepath)
+ *
+ * Test whether or not the file whose name is in the global thefilename
+ * can be opened for reading (if mode=READACCESS)
+ * or writing (if mode=WRITEACCESS).
+ *
+ * The filepath argument is one of the ...FILEPATH constants defined below.
+ * If the filename given in thefilename does not begin with '/', we try
+ * prepending all the ':'-separated areanames in the appropriate path to the
+ * filename until access can be made, if it ever can.
+ *
+ * The realnameoffile global array will contain the name that yielded an
+ * access success.
+ */
+
+#define READACCESS 4
+#define WRITEACCESS 2
+
+#define NOFILEPATH 0
+#define FONTFILEPATH 3
+
+bool
+testaccess(amode,filepath)
+ int amode,filepath;
+{
+ register bool ok;
+ register char *p;
+ char *curpathplace;
+ int f;
+
+ switch (filepath) {
+ case NOFILEPATH:
+ curpathplace = NULL;
+ break;
+ case FONTFILEPATH:
+ curpathplace = fontpath;
+ break;
+ }
+ if (thefilename[0] == '/') /* file name has absolute path */
+ curpathplace = NULL;
+ do {
+ packrealnameoffile (&curpathplace);
+ if (amode == READACCESS)/* use system call "access" to see if we
+ could read it */
+ if (access (realnameoffile, READACCESS) == 0)
+ ok = TRUE;
+ else
+ ok = FALSE;
+ else {
+ /* WRITEACCESS: use creat to see if we could create it, but close
+ the file again if we''re OK, to let pc open it for real */
+ f = creat (realnameoffile, 0666);
+ if (f >= 0)
+ ok = TRUE;
+ else
+ ok = FALSE;
+ if (ok)
+ close (f);
+ }
+ } while (!ok && curpathplace != NULL);
+ if (ok) { /* pad realnameoffile with blanks, as
+ Pascal wants */
+ for (p = realnameoffile; *p != '\0'; p++)
+ /* nothing: find end of string */
+ ;
+ while (p < &(realnameoffile[namelength]))
+ *p++ = ' ';
+ }
+ return (ok);
+}
+
+/*
+ * packrealnameoffile(cpp) makes realnameoffile contain the directory at *cpp,
+ * followed by '/', followed by the characters in thefilename up until the
+ * first blank there, and finally a '\0'. The cpp pointer is left pointing
+ * at the next directory in the path.
+ * But: if *cpp == NULL, then we are supposed to use thefilename as is.
+ */
+packrealnameoffile(cpp)
+ char **cpp;
+{
+ register char *p,
+ *realname;
+
+ realname = realnameoffile;
+ if ((p = *cpp) != NULL) {
+ while ((*p != ':') && (*p != '\0')) {
+ *realname++ = *p++;
+ if (realname == &(realnameoffile[namelength - 1]))
+ break;
+ }
+ if (*p == '\0')
+ *cpp = NULL; /* at end of path now */
+ else
+ *cpp = p + 1; /* else get past ':' */
+ *realname++ = '/'; /* separate the area from the name to
+ follow */
+ }
+ /* now append thefilename to realname... */
+ p = thefilename;
+ while (*p != ' ') {
+ if (realname >= &(realnameoffile[namelength - 1])) {
+ fprintf (stderr, "! Full file name is too long\n");
+ break;
+ }
+ *realname++ = *p++;
+ }
+ *realname = '\0';
+}
diff --git a/macros/latex209/contrib/textyl/psrc/tylext.h b/macros/latex209/contrib/textyl/psrc/tylext.h
new file mode 100644
index 0000000000..6025e920cc
--- /dev/null
+++ b/macros/latex209/contrib/textyl/psrc/tylext.h
@@ -0,0 +1,5 @@
+procedure setpaths;
+ external;
+
+function testaccess(accessmode:integer; filepath:integer): boolean;
+ external;
diff --git a/macros/latex209/contrib/textyl/src/Makefile b/macros/latex209/contrib/textyl/src/Makefile
new file mode 100644
index 0000000000..1ab9ce2598
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/Makefile
@@ -0,0 +1,23 @@
+textyl: textyl.o tyl.o spline.o io.o tables.o globals.o
+ $(CC) -g -o textyl textyl.o tyl.o spline.o io.o globals.o tables.o -lm
+
+textyl.o: defs.h globals.h tables.h textyl.c
+ $(CC) -g -c textyl.c
+
+tyl.o: defs.h globals.h tyl.c
+ $(CC) -g -c tyl.c
+
+spline.o: defs.h globals.h spline.c
+ $(CC) -g -c spline.c
+
+io.o: defs.h globals.h io.c
+ $(CC) -g -c io.c
+
+globals.o: defs.h globals.h globals.c
+ $(CC) -c globals.c
+
+tables.o: defs.h tables.h tables.c
+ $(CC) -c tables.c
+
+clean:
+ rm -f *.o textyl
diff --git a/macros/latex209/contrib/textyl/src/defs.h b/macros/latex209/contrib/textyl/src/defs.h
new file mode 100644
index 0000000000..6f8bec0fde
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/defs.h
@@ -0,0 +1,208 @@
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <setjmp.h>
+
+#ifdef __STDC__
+#define PP(x) x
+#else
+#define PP(x) ()
+#endif
+
+#define false 0
+#define true 1
+
+#define TylVersion "This is TeXtyl, Version 1.30"
+/* for dvi-commands */
+
+#define DEFTEXFONTS "/n/l/u/kin/lib/tex/tfm"
+
+#define SET1 128
+#define PUT1 133
+#define PUTRULE 137
+#define NOP 138
+#define PUSH 141
+#define POP 142
+#define RIGHTLEFT 143
+#define DOWNUP 157
+#define FONTDEF 244
+#define USEFONT 236
+
+#define USESTDAREA 0
+ /* flag to use the 'standard' area to find .tfm files */
+
+/* some conversions and numbers */
+
+#define TWO16 65536 /* 2 ^ 16 */
+#define TWO20 1048576 /* 2 ^ 20 */
+#define TWO23 8388608
+#define TWO24 16777216
+#define TWO27 134217728
+#define TWO31 2147483647 /* 2^31 - 1 */
+
+#define SPPERPT 65536 /* scaled points per printers point */
+#define SPPERMM 186468 /* scaled pts per millimetre */
+
+#define RADTODEG 57.29577952 /* degrees per radian */
+#define DEGTORAD 0.0174532925 /* radians per degree */
+#define PI 3.141592654
+
+#define BIGREAL 1.0e30
+
+#define MAXCTLPTS 63 /* max number of control points */
+#define MAXCTLPTSp3 66 /* max control points + 3 */
+#define ARRLIMIT 100 /* limit for strings and other arrays */
+#define MAXSPLINESEGS 480 /* max number of spline segments */
+#define MAXTBDs 50 /* max number of Fonts-to-be-Defined */
+#define MAXVECLENsp 262144
+/* Normal maximum length of longest
+ * vector-font character in scaled points
+ */
+
+#define OURFONTFLAG 256 /* our special 'byte' value flag */
+/* Music Font dependent constants */
+
+#define DOTCHAR 127 /* ascii number of char that is a dot */
+
+#define QNOTEGHUS 18.0
+ /* MF: Global Horizontal Units for a Quarternote */
+#define QNOTEGVUS 16.0
+ /* MF: Global Vertical units for a quarternote */
+#define GBMGHUS 12.0 /* MF: horizontal units for a grace beam */
+#define GBMGVUS 9.0
+
+#define BMSTART 0
+#define BMEND 69 /* indices for start/end of the beam chars */
+#define LOBM1 0 /* indices for the regular beam chars that */
+#define HIBM1 34 /* are 1 quarternote long, and */
+#define LOBM1p5 35 /* for those that are 1.5 quarternotes long */
+#define HIBM1p5 69
+
+#define GBMSTART 70
+#define GBMEND 105 /* indices for the grace beams */
+#define LOGBMp5 70 /* indices for grace beam chars that */
+#define HIGBMp5 87 /* are 0.5 grace quarternote long, and */
+#define LOGBMp66 88 /* 0.66 grace quarternotes long */
+#define HIGBMp66 105
+
+#define LoVThick 1 /* Bounds for Vector char thicknesses */
+#define HiVThick 13
+
+#define SizVFontTable 39
+/* size of the Vector Font Table */
+/* 3*HiVThick */
+#define SizMFontTable 18 /* size of the Music Font Table */
+#define MAXLABELFONTS 5
+#define SizLFontTable MAXLABELFONTS /* size of the Label Font Table */
+
+#define TFMSIZE 8000 /* size of TFM array to hold .tfm file info */
+
+/* Numeric names for the TeXtyl primitives */
+#define Aline 1 /* should be first */
+#define Aspline 2
+#define Attspline 3
+#define Abeam 4
+#define Atieslur 5
+#define Aarc 6
+#define Alabel 7
+#define Afigure 8 /* should be last one */
+
+#define MAXFONTS 60 /* number of TeX fonts to keep track of */
+#define STACKSIZE 50 /* size of stack for pushes and pops */
+#define AREALENGTH 19 /* see also "sysdependent" proc for this value*/
+
+#define ERRSIGNAL '?'
+#define ERRNOTBAD 0
+#define ERRBAD 1
+#define ERRREALBAD 2
+
+typedef int int32;
+typedef int ScaledPts;
+typedef int ControlPoints[MAXCTLPTSp3 + 1][2];
+typedef int VecIndex;
+typedef char VThickness;
+typedef VThickness ThickAryType[MAXSPLINESEGS + 1];
+typedef enum {
+ VKCirc, VKVert, VKHort
+} VectKind;
+typedef enum {
+ regular, grace
+} BeamKind;
+typedef enum {
+ BSPL, INTBSPL, CATROM, CARD
+} SplineKind;
+typedef enum {
+ solid, dotted, dashed, dotdash
+} LineStyle;
+
+typedef char charstring[ARRLIMIT];
+
+typedef struct Item {
+ struct Item *nextitem;
+ int32 BBlx, BBby, BBrx, BBty; /* Bounding box */
+ int itemthick, itemvec;
+ int itempatt;
+ int kind;
+ union {
+ struct {
+ int32 lx1, ly1, lx2, ly2;
+ } U1;
+ struct {
+ int spltype;
+ int sclosed;
+ int32 dosmarks, nsplknots;
+ ControlPoints spts;
+ } U2;
+ struct {
+ int tspltype;
+ int tclosed;
+ int32 dottmarks, nttknots;
+ ControlPoints ttpts;
+ ThickAryType ttarry;
+ } U3;
+ struct {
+ int32 bx1, by1, bx2, by2, staf;
+ int bkind;
+ } U4;
+ struct {
+ int32 ntknots;
+ int minth, maxth;
+ ControlPoints tspts;
+ } U5;
+ struct {
+ int32 acentx, acenty, aradius, firstang, lastang, narcknots;
+ ControlPoints arcpts;
+ } U6;
+ struct {
+ int32 labx, laby, fontstyle;
+ charstring labeltext;
+ } U7;
+ struct {
+ double figtheta, fsx, fsy;
+ int32 fdx, fdy, preWid, preHt, postWid, postHt, depthnumber;
+ struct Figure *body;
+ } U8;
+ } UU;
+} Item;
+
+typedef struct Figure {
+ Item *things;
+} Figure;
+
+typedef struct {
+ int32 num;
+ char name[32];
+ int32 checksum, scaledsize, designsize, space, bc, ec;
+ ScaledPts widths[128];
+} fontinfo;
+
+/* label fonts info */
+
+typedef struct {
+ int32 DesSize;
+ charstring FontName;
+ int32 Cksum;
+ int Isdefined;
+ int32 DVIFontNum, internalnumber, spacewidth;
+} LabFontInfRec;
diff --git a/macros/latex209/contrib/textyl/src/globals.c b/macros/latex209/contrib/textyl/src/globals.c
new file mode 100644
index 0000000000..2e0042368c
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/globals.c
@@ -0,0 +1,22 @@
+#include "defs.h"
+#include "globals.h"
+
+int32 intervals; /* count of spline interval we are on */
+int32 lastPoint; /* num of output points */
+int32 TotBytesWritten, ourq; /* the 'q' for the postpost */
+int didnewfonts; /* did we define the new fonts for this page? */
+char nf = 0;
+fontinfo font[MAXFONTS + 1];
+int32 ourfontnum = -1;/* internal number of TeX font currently in use */
+int32 curfont;
+LabFontInfRec *LFontTable[SizLFontTable];
+int32 pgfigurenum; /* figure number for this page */
+int32 currpagenum; /* number of page we are on */
+
+FILE *dvifile, *tfmfile, *outputfil;
+FILE *logfile;
+
+int32 h, v, w, x, y, z;
+
+double MINREAL = 1.0e-20; /* a system-dependent 'constant' */
+short b0, b1, b2, b3;
diff --git a/macros/latex209/contrib/textyl/src/globals.h b/macros/latex209/contrib/textyl/src/globals.h
new file mode 100644
index 0000000000..37b4e76a8a
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/globals.h
@@ -0,0 +1,208 @@
+extern int32 h, v, w, x, y, z;
+extern double MINREAL; /* a system-dependent 'constant' */
+extern FILE *dvifile, *outputfil, *tfmfile, *logfile;
+extern int32 lastPoint; /* num of output points */
+extern int32 intervals; /* count of spline interval we are on */
+extern short b0, b1, b2, b3;
+extern int didnewfonts; /* did we define the new fonts for this page? */
+extern char nf;
+extern fontinfo font[MAXFONTS + 1];
+extern int32 ourfontnum; /* internal number of TeX font currently in use*/
+extern int32 curfont;
+extern LabFontInfRec *LFontTable[SizLFontTable];
+extern int32 pgfigurenum; /* figure number for this page */
+extern int32 currpagenum; /* number of page we are on */
+extern int32 TotBytesWritten, ourq;
+
+extern void jumpout PP((void));
+extern void complain PP((int severity));
+extern double float_ PP((int32 i));
+extern int min PP((int a, int b));
+extern int max PP((int a, int b));
+extern double distance PP((double x0, double y0, double x1, double y1));
+extern void drawSpline PP((SplineKind splinetype,
+ int isclosed,
+ int isanArc,
+ LineStyle patt,
+ int32 numctls,
+ int32 (*arrayXY)[2],
+ int32 (*pointmatrix)[2],
+ int varythicks,
+ VThickness *thickmatrix,
+ VThickness *TTmatrix));
+extern int GetVectFont PP((int size, VectKind vk));
+extern int GetLabFont PP((int32 style));
+extern void defineNewfonts PP((void));
+extern void InitDVIBuf PP((void));
+extern void ClearDVIBuf PP((void));
+extern void BackupInBuf PP((int nbytes));
+extern void WriteDVIBuf PP((void));
+extern int32 DVIMark PP((void));
+extern int32 Dgetc PP((void));
+extern int32 Dget1byte PP((void));
+extern int32 Dget2byte PP((void));
+extern int32 Dget3byte PP((void));
+extern int32 Dsign1byte PP((void));
+extern int32 Dsign2byte PP((void));
+extern int32 Dsign3byte PP((void));
+extern int32 Dsign4byte PP((void));
+extern int Tgetc PP((void));
+extern void readtfmword PP((void));
+extern void cmd1byte PP((int32 cmd));
+extern void cmd2byte PP((int32 cmd));
+extern void cmd4byte PP((int32 cmd));
+extern void cmdSigned PP((int32 cmd, int32 numbytes));
+extern void OutputByte PP((int32 b));
+extern void Output2Byte PP((int32 i));
+extern void Output4Byte PP((int32 i));
+extern char *xmalloc PP((unsigned int size));
+extern Item *NewItem PP((int what));
+extern void pushItem PP((int depth, Item *newthing));
+extern void arccirclehandle PP((int32 figdepth,
+ double scalefact,
+ int32 cx,
+ int32 cy,
+ int32 radius,
+ int32 ang1,
+ int32 ang2,
+ int32 (*contpts)[2],
+ int32 nknots,
+ int32 dvih,
+ int32 dviv,
+ int thk,
+ VectKind vec,
+ LineStyle patt,
+ int32 minx,
+ int32 maxx,
+ int32 miny,
+ int32 maxy,
+ int32 tx,
+ int32 ty,
+ double sx,
+ double sy,
+ double r));
+extern void beamhandle PP((int32 depth,
+ int32 siz,
+ BeamKind bk,
+ int32 x1,
+ int32 y1,
+ int32 x2,
+ int32 y2));
+extern void figurehandle PP((Item *globalsymlist, Item *symbollist, int32 dopush));
+extern void labelhandle PP((int32 depth,
+ double scalefact,
+ int32 lax,
+ int32 lay,
+ int32 dvih,
+ int32 dviv,
+ int32 style,
+ char *phrase,
+ int32 tx,
+ int32 ty));
+extern void linehandle PP((int32 figdepth,
+ double scalefact,
+ int32 x1,
+ int32 y1,
+ int32 x2,
+ int32 y2,
+ int32 dvih,
+ int32 dviv,
+ int thk,
+ VectKind vk,
+ LineStyle patt,
+ int32 minx,
+ int32 maxx,
+ int32 miny,
+ int32 maxy,
+ int32 tx,
+ int32 ty,
+ double sx,
+ double sy,
+ double r));
+extern void splinehandle PP((int32 figdepth,
+ double scalefact,
+ SplineKind thetype,
+ int isclosed,
+ int32 markdiam,
+ int32 (*contpts)[2],
+ int32 nknots,
+ int32 dvih,
+ int32 dviv,
+ int thk,
+ VectKind vec,
+ LineStyle patt,
+ int32 minx,
+ int32 maxx,
+ int32 miny,
+ int32 maxy,
+ int32 tx,
+ int32 ty,
+ double sx,
+ double sy,
+ double r));
+extern void tieslurhandle PP((int32 depth,
+ int32 (*pts_)[2],
+ int32 numk,
+ int minthick,
+ int maxthick));
+extern void ttsplhandle PP((int32 figdepth,
+ double scalefact,
+ SplineKind thetype,
+ int isclosed,
+ int32 markdiam,
+ int32 (*contpts_)[2],
+ VThickness *ttks_,
+ int32 nknots,
+ int32 dvih,
+ int32 dviv,
+ VectKind vec,
+ LineStyle patt,
+ int32 minx,
+ int32 maxx,
+ int32 miny,
+ int32 maxy,
+ int32 tx,
+ int32 ty,
+ double sx,
+ double sy,
+ double r));
+extern void defineCircleCpts PP((int32 rad,
+ int32 centx,
+ int32 centy,
+ int32 (*CircleCpt)[2],
+ int32 *numpts));
+extern void definearcpts PP((int32 rad,
+ int32 centx,
+ int32 centy,
+ int32 startang,
+ int32 stopang,
+ int32 (*cpts)[2],
+ int32 *nknots));
+extern void layline PP((int32 xl,
+ int32 yb,
+ int32 xr,
+ int32 yt,
+ int32 fontindex,
+ LineStyle pattern,
+ int useVecfontOnly));
+extern void layAspline PP((SplineKind thetype,
+ int isclosed,
+ int isanArc,
+ int32 domarks,
+ int32 (*cpts)[2],
+ int32 numpts,
+ int thick_,
+ VectKind vkind,
+ LineStyle patt));
+extern void layNspline PP((SplineKind thetype,
+ int isclosed,
+ int isitaslur,
+ int32 domarks,
+ int32 (*cpts)[2],
+ int32 numpts,
+ VThickness *thickmatrix,
+ VectKind vkind,
+ LineStyle patt));
+extern void clampthickness PP((VThickness *thic));
+extern void isetpos PP((int posx, int posy));
+extern void isetfont PP((int DVINum));
diff --git a/macros/latex209/contrib/textyl/src/io.c b/macros/latex209/contrib/textyl/src/io.c
new file mode 100644
index 0000000000..c2102bde17
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/io.c
@@ -0,0 +1,347 @@
+#include "defs.h"
+#include "globals.h"
+
+static struct DVIBuftype
+{
+ int32 TotByteLen, curstrindex;
+ int32 maxlen;
+ short *Dstring;
+} GDVIBuf;
+
+/*
+ * NOTATION:: All procedures that put a dvi-command into the temporary buffer are prefixed with "cmd"... Functions that deal
+ * with reading .tfm files are prefixed with "T" or have "tfm" in their names. Functions that deal with reading DVI files are
+ * prefixed with a "D".
+ */
+
+/*--------------------------------------------*/
+void
+cmd1byte(cmd)
+ int32 cmd;
+{
+ char *realloc PP((char *, unsigned));
+
+ if (GDVIBuf.curstrindex >= GDVIBuf.maxlen)
+ { /* buffer full */
+ GDVIBuf.maxlen *= 2;
+ GDVIBuf.Dstring = (short *) realloc((char *)GDVIBuf.Dstring, (unsigned)sizeof(*GDVIBuf.Dstring) * GDVIBuf.maxlen);
+ }
+ GDVIBuf.Dstring[GDVIBuf.curstrindex] = cmd;
+ /* insert command byte */
+ GDVIBuf.TotByteLen++;
+ GDVIBuf.curstrindex++;
+}
+
+
+/*---------------------------------------------------*/
+void
+cmd2byte(cmd)
+ int32 cmd;
+{
+ cmd1byte((cmd >> 8) & 0xff);
+ cmd1byte(cmd & 0xff);
+}
+
+/*---------------------------------------------------*/
+void
+cmd4byte(cmd)
+ int32 cmd;
+{
+ cmd1byte((cmd >> 24) & 0xff);
+ cmd1byte((cmd >> 16) & 0xff);
+ cmd1byte((cmd >> 8) & 0xff);
+ cmd1byte(cmd & 0xff);
+}
+
+
+/*---------------------------------------------------*/
+/*
+ * ### may be system dependent as integers are assumed to be signed 32-bits
+ */
+
+void
+cmdSigned(i, numbytes)
+ int32 i, numbytes;
+{
+ int32 tmp;
+
+ if (numbytes == 4)
+ {
+ cmd4byte(i);
+ return;
+ }
+ tmp = i;
+ if (numbytes == 3)
+ {
+ if (tmp < 0)
+ tmp += TWO24;
+ cmd1byte(tmp / TWO16);
+ tmp &= TWO16 - 1;
+ cmd1byte(tmp / 256);
+ }
+ if (numbytes == 2)
+ {
+ if (tmp < 0)
+ tmp += TWO16;
+ cmd1byte(tmp / 256);
+ }
+ if (numbytes == 1)
+ {
+ if (tmp < 0)
+ tmp += 256;
+ }
+ cmd1byte(tmp & 255); /* for all */
+
+ /* <= 3 bytes */
+}
+
+/*---------------------------------------------------*/
+int
+Tgetc()
+{
+ int c;
+
+ if ((c = getc(tfmfile)) == EOF)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, " early EOF of tfm file! \n");
+ return (0);
+ }
+ return (c & 0xff);
+}
+
+
+/*---------------------------------------------------*/
+void
+readtfmword()
+{
+ b0 = Tgetc();
+ b1 = Tgetc();
+ b2 = Tgetc();
+ b3 = Tgetc();
+}
+
+
+/*---------------------------------------------------*/
+int32
+Dgetc()
+{
+ int c;
+
+ if ((c = getc(dvifile)) == EOF)
+ return (0);
+ return (c & 0xff);
+}
+
+/*---------------------------------------------------*/
+int32
+Dget1byte()
+{
+ int c;
+
+ if ((c = getc(dvifile)) == EOF)
+ return (0);
+ else
+ {
+ cmd1byte(c);
+ return (c & 0xff);;
+ }
+}
+
+
+/*---------------------------------------------------*/
+int32
+Dsign1byte()
+{
+ int32 c;
+
+ c = Dgetc();
+ if (c >= 128)
+ c -= 256;
+ cmd1byte(c);
+ return (c);
+}
+
+
+/*---------------------------------------------------*/
+int32
+Dget2byte()
+{
+ int32 a, b;
+
+ a = Dgetc();
+ b = Dgetc();
+ cmd1byte(a);
+ cmd1byte(b);
+ return ((a << 8) | b);
+}
+
+
+/*---------------------------------------------------*/
+int32
+Dsign2byte()
+{
+ int32 a, b;
+
+ a = Dgetc();
+ b = Dgetc();
+ cmd1byte(a);
+ cmd1byte(b);
+ if (a < 128)
+ return ((a >> 8) | b);
+ else
+ return ((a - 256) * 256 + b);
+}
+
+
+/*---------------------------------------------------*/
+int32
+Dget3byte()
+{
+ int32 a, b, c;
+
+ a = Dgetc();
+ b = Dgetc();
+ c = Dgetc();
+ cmd1byte(a);
+ cmd1byte(b);
+ cmd1byte(c);
+ return ((a << 16) | (b << 8) | c);
+}
+
+
+/*---------------------------------------------------*/
+int32
+Dsign3byte()
+{
+ int32 a, b, c;
+
+ a = Dgetc();
+ b = Dgetc();
+ c = Dgetc();
+ cmd1byte(a);
+ cmd1byte(b);
+ cmd1byte(c);
+ if (a < 128)
+ return ((a << 16) | (b << 8) | c);
+ else
+ return ((a - 256) * 256 + b) * 256 + c;
+}
+
+
+/*---------------------------------------------------*/
+int32
+Dsign4byte()
+{
+ int32 a, b, c, d;
+
+ a = Dgetc();
+ b = Dgetc();
+ c = Dgetc();
+ d = Dgetc();
+ cmd1byte(a);
+ cmd1byte(b);
+ cmd1byte(c);
+ cmd1byte(d);
+ if (a < 128)
+ return (((a * 256 + b) * 256 + c) * 256 + d);
+ else
+ return ((((a - 256) * 256 + b) * 256 + c) * 256 + d);
+}
+
+
+/*---------------------------------------------------*/
+/*
+ * write a byte out to the ouput file, but if we encounter the font flag, define the new fonts, and continue
+ */
+void
+OutputByte(b)
+ int32 b;
+{
+ if (b == OURFONTFLAG)
+ { /* our special macro-flag */
+ b = NOP; /* nullify it */
+ if (!didnewfonts)
+ {
+ didnewfonts = true;
+ defineNewfonts(); /* expand the defns in the outfile itself */
+ }
+ } /* if */
+ putc(b, outputfil);
+ TotBytesWritten++; /* keep count of all bytes */
+}
+
+
+/*---------------------------------------------------*/
+void
+Output2Byte(i)
+ int32 i;
+{
+ OutputByte((i >> 8) & 0xff);
+ OutputByte(i & 0xff);
+}
+
+
+/*---------------------------------------------------*/
+void
+Output4Byte(i)
+ int32 i;
+{
+ OutputByte((i >> 24) & 0xff);
+ OutputByte((i >> 16) & 0xff);
+ OutputByte((i >> 8) & 0xff);
+ OutputByte(i & 0xff);
+}
+
+/*---------------------------------------------------*/
+void
+InitDVIBuf()
+{
+ GDVIBuf.maxlen = 2048;
+ GDVIBuf.Dstring = (short *) xmalloc(sizeof(*GDVIBuf.Dstring) * 2048);
+ GDVIBuf.TotByteLen = 0;
+ GDVIBuf.curstrindex = 0;
+}
+
+
+/*---------------------------------------------------*/
+void
+ClearDVIBuf()
+{
+ GDVIBuf.TotByteLen = 0;
+ GDVIBuf.curstrindex = 0;
+}
+
+
+/*---------------------------------------------------*/
+void
+WriteDVIBuf()
+{
+ int32 i;
+ int32 b;
+
+ for (i = 0; i < GDVIBuf.curstrindex; i++)
+ {
+ b = GDVIBuf.Dstring[i];
+ OutputByte(b);
+ }
+ ClearDVIBuf();
+}
+
+
+/*---------------------------------------------------*/
+void
+BackupInBuf(nbytes)
+ int nbytes;
+{
+ GDVIBuf.curstrindex -= nbytes; /* points to position to-be-filled */
+ GDVIBuf.TotByteLen -= nbytes;
+}
+
+
+/*-----------------------------------------------------*/
+int32
+DVIMark()
+{
+ return (GDVIBuf.TotByteLen);
+}
diff --git a/macros/latex209/contrib/textyl/src/spline.c b/macros/latex209/contrib/textyl/src/spline.c
new file mode 100644
index 0000000000..6ac8c744e5
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/spline.c
@@ -0,0 +1,660 @@
+#include "defs.h"
+#include "globals.h"
+#include "tables.h"
+
+/* &&Module spline.p */
+/*
+ * Procedures below may make free use of the global variables arrayXY [list of control points] pointmatrix [list of spline
+ * segments] knot [list of spline knots] catrommtx [matrix for Catmull-Rom splines] bsplmtx [matrix for B-splines]
+ * lastPoint, intervals
+ */
+
+
+/*-----------------------------------------------------*/
+int
+max(a, b)
+ int a, b;
+{
+ if (a > b)
+ return a;
+ else
+ return b;
+}
+
+
+/*-----------------------------------------------------*/
+int
+min(a, b)
+ int a, b;
+{
+ if (a < b)
+ return a;
+ else
+ return b;
+}
+
+/*-----------------------------------------------------*/
+static void
+matXvector(m, v, result)
+ double (*m)[4];
+ double *v, *result;
+{
+ /* IN */
+ /* IN */
+ /* OUT */
+ double t[4];
+
+ t[0] = v[0] * m[0][0] + v[1] * m[0][1] + v[2] * m[0][2] + v[3] * m[0][3];
+ t[1] = v[0] * m[1][0] + v[1] * m[1][1] + v[2] * m[1][2] + v[3] * m[1][3];
+ t[2] = v[0] * m[2][0] + v[1] * m[2][1] + v[2] * m[2][2] + v[3] * m[2][3];
+ t[3] = v[0] * m[3][0] + v[1] * m[3][1] + v[2] * m[3][2] + v[3] * m[3][3];
+ result[0] = t[0];
+ result[1] = t[1];
+ result[2] = t[2];
+ result[3] = t[3];
+}
+
+
+/*-----------------------------------------------------*/
+/* actually the dot-product */
+static double
+vecXvec(v1, v2)
+ double *v1, *v2;
+{
+ return (v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2] + v1[3] * v2[3]);
+}
+
+
+/*------------------------------------------------------*/
+/* basXctl is the pre-computed BasisMatrix times the control-point vector */
+
+static double
+splinePosition(basXctl, t)
+ double *basXctl;
+ double t;
+{
+ /* IN */
+ double tvect[4]; /* vector of t values for spline matrix */
+
+ tvect[3] = 1.0;
+ tvect[2] = t;
+ tvect[1] = t * t;
+ if (tvect[1] <= MINREAL)/* avoid underflow problems */
+ tvect[1] = 0.0;
+ tvect[0] = t * tvect[1];/* t^3 */
+ return (vecXvec(tvect, basXctl));
+}
+
+
+/*-------------------------------------------------*/
+static int
+TwoToThe(n)
+ int n;
+{
+ int i, tmp;
+
+ for (i = 0, tmp = 1; i < n; i++)
+ tmp *= 2;
+ return (tmp);
+}
+
+/*------------------------------------------------------*/
+double
+distance(x0, y0, x1, y1)
+ double x0, y0, x1, y1;
+{
+ return (sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)));
+}
+
+
+/*------------------------------------------------------*/
+/*
+ * compute the number of subdivisions for this span. We do this by a quadrature method and a simple linear-distance metric.
+ * This is not optimal in the number of subdivisions actually required, but is computationally efficient and accurate to the
+ * nearest power of 2 .
+ */
+static int32
+numsubdivisions(XtimesBas, YtimesBas, resolution)
+ double *XtimesBas, *YtimesBas;
+ int32 resolution;
+{
+ int32 n;
+ double t, x0, y0, xt, yt;
+
+ x0 = splinePosition(XtimesBas, 0.0);
+ y0 = splinePosition(YtimesBas, 0.0);
+
+ t = 1.0;
+ n = 0;
+ xt = splinePosition(XtimesBas, t);
+ yt = splinePosition(YtimesBas, t);
+
+ while ((int32) floor(distance(x0, y0, xt, yt) + 0.5) > resolution || n < 1)
+ {
+ t /= 2.0; /* perform the quadrature */
+ n++;
+ xt = splinePosition(XtimesBas, t);
+ yt = splinePosition(YtimesBas, t);
+ } /* while */
+ return (TwoToThe(n));
+}
+
+
+/*------------------------------------------------------------------------*/
+/*
+ * compute new control vertices such that the resulting spline will interpolate through the old control points. This will work
+ * as int32 as the actual arc length between consecutive nodes does not vary from span to span. The method is noted in Wu and
+ * Abel's CACM 20(10) Oct 77 paper but the actual working method is from Barsky and Greenberg's paper in CG&IP 14(3) Nov 1980
+ * pp.203-226
+ */
+static void
+invertsplvertices(numpts, isclosed, xys)
+ int32 numpts;
+ int isclosed;
+int32(*xys)[2];
+{
+ /* INOUT */
+ int32 i;
+ double beta[MAXCTLPTS + 1], Xrprime[MAXCTLPTS + 1], Yrprime[MAXCTLPTS + 1];
+ ControlPoints tempxys;
+
+ /* compute the values of beta */
+ beta[1] = 0.25;
+ for (i = 2; i <= numpts + 1; i++)
+ beta[i] = 1.0 / (4.0 - beta[i - 1]);
+
+ /* and the r primes from the original vertices */
+ Xrprime[1] = beta[1] * xys[1][0] * 5.0;
+ Yrprime[1] = beta[1] * xys[1][1] * 5.0;
+ for (i = 2; i < numpts; i++)
+ {
+ Xrprime[i] = beta[i] * (6.0 * xys[i][0] - Xrprime[i - 1]);
+ Yrprime[i] = beta[i] * (6.0 * xys[i][1] - Yrprime[i - 1]);
+ } /* for */
+ Xrprime[numpts] = beta[numpts] * (5.0 * xys[numpts][0] - Xrprime[numpts - 1]);
+ Yrprime[numpts] = beta[numpts] * (5.0 * xys[numpts][1] - Yrprime[numpts - 1]);
+
+ /* Now perform the back-substitution from the bottom up */
+ tempxys[numpts][0] = (int32) floor(Xrprime[numpts] + 0.5);
+ tempxys[numpts][1] = (int32) floor(Yrprime[numpts] + 0.5);
+ for (i = numpts - 1; i >= 1; i--)
+ {
+ tempxys[i]
+ [0] = (int32) floor(Xrprime[i] - beta[i] * tempxys[i + 1][0] + 0.5);
+ tempxys[i]
+ [1] = (int32) floor(Yrprime[i] - beta[i] * tempxys[i + 1][1] + 0.5);
+ }
+
+ if (isclosed)
+ {
+ /*
+ * at this point, we've probably been through one control-point adjustment, so let's not muck it up
+ */
+ tempxys[numpts + 1][0] = tempxys[1][0];
+ tempxys[numpts + 1][1] = tempxys[1][1];
+ tempxys[numpts + 2][0] = tempxys[2][0];
+ tempxys[numpts + 2][1] = tempxys[2][1];
+ tempxys[0][0] = tempxys[numpts][0];
+ tempxys[0][1] = tempxys[numpts][1];
+ /* copy them back */
+ for (i = 0; i <= numpts + 2; i++)
+ {
+ xys[i][0] = tempxys[i][0];
+ xys[i][1] = tempxys[i][1];
+ }
+ return;
+ } /* closed */
+ /* copy back */
+ for (i = 2; i < numpts; i++)
+ {
+ xys[i][0] = tempxys[i][0];
+ xys[i][1] = tempxys[i][1];
+ }
+
+ /* open */
+}
+
+
+/*-----------------------------------------------------*/
+/*
+ * adjust the list of control points so that we can use it for B-spline interpolation. Add any "phantom" vertices necessary so
+ * that the end conditions will be correct for interpolation
+ */
+static void
+Bctlptadjust(isclosed, isarc, n, xys, thx)
+ int isclosed, isarc;
+ int32 *n;
+int32(*xys)[2];
+ VThickness *thx;
+{ /* ctlpt adjust */
+ /* INOUT */
+ /* INOUT */
+ /* INOUT */
+ int32 j;
+ ControlPoints tmp;
+ ThickAryType tmpthx;
+ int32 FORLIM;
+
+ if (isclosed)
+ {
+ if (*n == 2)
+ {
+ complain(ERRBAD);
+ fprintf(logfile,
+ "A closed spline requires more than 2 control points \n");
+ fprintf(logfile, "making a temporary fix in order to continue...\n");
+ xys[3][0] = xys[1][0];
+ xys[3][1] = xys[1][1];
+ }
+
+ FORLIM = *n;
+ for (j = 1; j <= FORLIM; j++)
+ {
+ tmp[j][0] = xys[j][0];
+ tmp[j][1] = xys[j][1];
+ tmpthx[j] = thx[j];
+ }
+ /* Now take care of the 'phantom' vertices */
+ tmp[*n + 1][0] = xys[1][0];
+ tmp[*n + 1][1] = xys[1][1];
+ tmpthx[*n + 1] = thx[1];
+ tmp[*n + 2][0] = xys[2][0];
+ tmp[*n + 2][1] = xys[2][1];
+ tmpthx[*n + 2] = thx[2];
+ tmp[*n + 3][0] = xys[3][0];
+ tmp[*n + 3][1] = xys[3][1];
+ tmpthx[*n + 3] = thx[3];
+
+ if (!isarc)
+ {
+ tmp[0][0] = xys[*n][0]; /* wrap around to the real last point */
+ tmp[0][1] = xys[*n][1];
+ tmpthx[0] = thx[*n];
+ }
+ else
+ {
+ tmp[0][0] = xys[0][0];
+ tmp[0][1] = xys[0][1];
+ tmpthx[0] = thx[0];
+ }
+
+ (*n)++; /* we supplied the 'last' point for the user */
+
+ FORLIM = *n + 2;
+ for (j = 0; j <= FORLIM; j++)
+ {
+ xys[j][0] = tmp[j][0];
+ xys[j][1] = tmp[j][1];
+ thx[j] = tmpthx[j];
+ } /* for */
+ return;
+ } /* if closed */
+ /*
+ * here, we have to supply the last 'real' point for the user, and add three phantoms-- one before, and two after
+ */
+
+
+ if (!isarc)
+ {
+ tmp[0][0] = xys[1][0] * 2 - xys[2][0];
+ tmp[0][1] = xys[1][1] * 2 - xys[2][1];
+ }
+ else
+ {
+ tmp[0][0] = xys[0][0];
+ tmp[0][1] = xys[0][1];
+ }
+ tmpthx[0] = thx[1];
+
+ FORLIM = *n;
+ for (j = 1; j <= FORLIM; j++)
+ {
+ tmp[j][0] = xys[j][0];
+ tmp[j][1] = xys[j][1];
+ tmpthx[j] = thx[j];
+ }
+
+ tmp[*n + 1][0] = xys[*n][0] * 2 - xys[*n - 1][0];
+ tmp[*n + 1][1] = xys[*n][1] * 2 - xys[*n - 1][1];
+ tmpthx[*n + 1] = thx[*n];
+
+ tmp[*n + 2][0] = tmp[*n + 1][0];
+ tmp[*n + 2][1] = tmp[*n + 1][1];
+ tmpthx[*n + 2] = thx[*n];
+
+ FORLIM = *n + 2;
+ for (j = 0; j <= FORLIM; j++)
+ {
+ xys[j][0] = tmp[j][0];
+ xys[j][1] = tmp[j][1];
+ thx[j] = tmpthx[j];
+ } /* for */
+
+ /* OPEN SPLINE */
+ /* if open */
+}
+
+
+
+/*-----------------------------------------------------*/
+/*
+ * adjust the list of control points so that we can use it for simple Catmull-Rom spline interpolation. Add any "phantom"
+ * vertices necessary so that the end conditions will be correct for interpolation
+ */
+static void
+CRctlptadjust(isclosed, isarc, n, xys, thx)
+ int isclosed, isarc;
+ int32 *n;
+int32(*xys)[2];
+ VThickness *thx;
+{ /* ctlpt adjust */
+ /* INOUT */
+ /* INOUT */
+ /* INOUT */
+ int32 j;
+ ControlPoints tmp;
+ ThickAryType tmpthx;
+ int32 FORLIM;
+
+ if (isclosed)
+ {
+ if (*n == 2)
+ {
+ complain(ERRBAD);
+ fprintf(logfile,
+ "A closed spline requires more than 2 control points \n");
+ fprintf(logfile, "making a temporary fix in order to continue...\n");
+ xys[3][0] = xys[1][0];
+ xys[3][1] = xys[1][1];
+ }
+
+
+ FORLIM = *n;
+ for (j = 1; j <= FORLIM; j++)
+ {
+ tmp[j][0] = xys[j][0];
+ tmp[j][1] = xys[j][1];
+ tmpthx[j] = thx[j];
+ }
+ /* the phantom vertices */
+ tmp[*n + 1][0] = xys[1][0];
+ tmp[*n + 1][1] = xys[1][1];
+ tmpthx[*n + 1] = thx[1];
+ tmp[*n + 2][0] = xys[2][0];
+ tmp[*n + 2][1] = xys[2][1];
+ tmpthx[*n + 2] = thx[2];
+ tmp[*n + 3][0] = xys[3][0];
+ tmp[*n + 3][1] = xys[3][1];
+ tmpthx[*n + 3] = thx[3];
+
+ if (!isarc)
+ {
+ tmp[0][0] = xys[*n][0]; /* wrap around to the real last point */
+ tmp[0][1] = xys[*n][1];
+ tmpthx[0] = thx[*n];
+ }
+ else
+ {
+ tmp[0][0] = xys[0][0];
+ tmp[0][1] = xys[0][1];
+ tmpthx[0] = thx[0];
+ }
+ (*n)++; /* we supplied the 'last' point for the user */
+
+ FORLIM = *n + 2;
+ for (j = 0; j <= FORLIM; j++)
+ {
+ xys[j][0] = tmp[j][0];
+ xys[j][1] = tmp[j][1];
+ thx[j] = tmpthx[j];
+ } /* for */
+ return;
+ } /* if closed */
+ /*
+ * here, we have to supply the last 'real' point for the user, and add three phantoms-- one before, and two after
+ */
+
+ if (!isarc)
+ {
+ tmp[0][0] = xys[1][0]; /* double the first point */
+ tmp[0][1] = xys[1][1];
+ }
+ else
+ {
+ tmp[0][0] = xys[0][0];
+ tmp[0][1] = xys[0][1];
+ }
+ tmpthx[0] = thx[1];
+
+ FORLIM = *n;
+ for (j = 1; j <= FORLIM; j++)
+ {
+ tmp[j][0] = xys[j][0];
+ tmp[j][1] = xys[j][1];
+ tmpthx[j] = thx[j];
+ }
+
+ tmp[*n + 1][0] = xys[*n][0]; /* and triple the last */
+ tmp[*n + 1][1] = xys[*n][1];
+ tmpthx[*n + 1] = thx[*n];
+ tmp[*n + 2][0] = xys[*n][0];
+ tmp[*n + 2][1] = xys[*n][1];
+ tmpthx[*n + 2] = thx[*n];
+
+ FORLIM = *n + 2;
+ for (j = 0; j <= FORLIM; j++)
+ {
+ xys[j][0] = tmp[j][0];
+ xys[j][1] = tmp[j][1];
+ thx[j] = tmpthx[j];
+ } /* for */
+
+ /* OPEN SPLINE */
+ /* if open */
+} /* ctlpt adjust */
+
+
+
+/*----------------------------------------------------------*/
+
+static void
+interpsplines(splinetype, isclosed, isanArc, linepatt,
+ basismatrix, numctls, arrayXY, pointmatrix,
+ varythicks, thickmatrix, TTmatrix)
+ SplineKind splinetype;
+ int isclosed, isanArc;
+ LineStyle linepatt;
+ double (*basismatrix)[4];
+ int32 numctls;
+int32(*arrayXY)[2];
+int32(*pointmatrix)[2];
+ int varythicks;
+ VThickness *thickmatrix, *TTmatrix;
+{ /* interp splines */
+ /* IN */
+ /* IN */
+ /* OUT */
+ /* IN */
+ /* OUT */
+ double xctl[4], yctl[4]; /* vectors of x, y posits of control points */
+ double wctl[4];/* vector of thicknesses at each ctl pt */
+ double t, incr;
+ int32 Pi; /* P sub i */
+ int32 currpt;
+ ScaledPts theresolution;
+
+ if (!isclosed && isanArc) /* lie a little */
+ numctls++;
+
+ switch (splinetype)
+ {
+
+ case BSPL:
+ Bctlptadjust(isclosed, isanArc, &numctls, arrayXY, thickmatrix);
+ break;
+
+ case CARD:
+ case CATROM:
+ CRctlptadjust(isclosed, isanArc, &numctls, arrayXY, thickmatrix);
+ break;
+
+ case INTBSPL:
+ if (isclosed)
+ {
+ Bctlptadjust(true, isanArc, &numctls, arrayXY, thickmatrix);
+ invertsplvertices(numctls, true, arrayXY);
+ }
+ else
+ {
+ invertsplvertices(numctls, false, arrayXY);
+ Bctlptadjust(false, isanArc, &numctls, arrayXY, thickmatrix);
+ } /* else */
+ break;
+ /* Interpolating Bsplines */
+ }
+
+ if (!isclosed && isanArc) /* UN-lie a little */
+ numctls--;
+
+
+ /*
+ * this is the scheme: val := t-vector * Basis matrix * point matrix [t^3 t^2 t 1] * [[Ms]] * [Pi-1
+ * Pi Pi+1 Pi+2] where "Pi-1" is "P sub (i-1)", etc.
+ *
+ * But we do this in a round about way: Point matrix * basis then * t-vector will yield the single value
+ *
+ * there are certainly faster ways to do this, but this is the easiest to understand
+ */
+
+ currpt = 1;
+ switch (linepatt)
+ {
+
+ case solid:
+ theresolution = MAXVECLENsp;
+ break;
+
+ case dotted:
+ case dashed:
+ case dotdash: /* ### */
+ theresolution = MAXVECLENsp * 3;
+ break;
+ }
+
+ for (Pi = 1; Pi < numctls; Pi++)
+ {
+ xctl[0] = float_(arrayXY[Pi - 1][0]);
+ xctl[1] = float_(arrayXY[Pi][0]);
+ xctl[2] = float_(arrayXY[Pi + 1][0]);
+ xctl[3] = float_(arrayXY[Pi + 2][0]);
+ yctl[0] = float_(arrayXY[Pi - 1][1]);
+ yctl[1] = float_(arrayXY[Pi][1]);
+ yctl[2] = float_(arrayXY[Pi + 1][1]);
+ yctl[3] = float_(arrayXY[Pi + 2][1]);
+ matXvector(basismatrix, xctl, xctl);
+ matXvector(basismatrix, yctl, yctl);
+
+ /*
+ * compute the delta-t increment for this segment based on a metric for subdivision
+ */
+ intervals = numsubdivisions(xctl, yctl, theresolution);
+ if (linepatt == solid && intervals <= 2)
+ intervals *= 2;
+ incr = 1.0 / intervals;
+
+ /* avoid over-flowing the "pointmatrix" */
+ if (currpt + intervals - 1 >= MAXSPLINESEGS)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "error: Too many spline segments required.\n");
+ fprintf(logfile,
+ " Reducing the number of control points to get output.\n");
+ goto _L32;
+ }
+
+ t = 0.0;
+ while (t < 0.999999999)
+ {
+ pointmatrix[currpt - 1][0] = (int32) floor(splinePosition(xctl, t) + 0.5);
+ pointmatrix[currpt - 1][1] = (int32) floor(splinePosition(yctl, t) + 0.5);
+
+ if (varythicks)
+ {
+ wctl[0] = float_((int32) thickmatrix[Pi - 1]);
+ wctl[1] = float_((int32) thickmatrix[Pi]);
+ wctl[2] = float_((int32) thickmatrix[Pi + 1]);
+ wctl[3] = float_((int32) thickmatrix[Pi + 2]);
+ matXvector(catrommtx, wctl, wctl); /* requires using Catmull-Rom */
+ TTmatrix[currpt] = (int32) floor(splinePosition(wctl, t) + 0.5);
+ }
+
+ t += incr;
+ currpt++;
+ } /* while loop */
+
+
+ } /* for loop */
+
+_L32:
+ /* the END-condtion */
+ pointmatrix[currpt - 1][0] = (int32) floor(splinePosition(xctl, 1.0) + 0.5);
+ pointmatrix[currpt - 1][1] = (int32) floor(splinePosition(yctl, 1.0) + 0.5);
+ if (varythicks)
+ {
+ wctl[0] = thickmatrix[numctls - 2];
+ wctl[1] = thickmatrix[numctls - 1];
+ wctl[2] = thickmatrix[numctls];
+ wctl[3] = thickmatrix[numctls + 1];
+ matXvector(catrommtx, wctl, wctl); /* requires using Catmull-Rom */
+ TTmatrix[currpt] = (int32) floor(splinePosition(wctl, 1.0) + 0.5);
+ }
+
+ lastPoint = currpt;
+
+} /* interpsplines */
+
+
+/*----------------------------------------------------------------*/
+void
+drawSpline(splinetype, isclosed, isanArc, patt, numctls, arrayXY,
+ pointmatrix, varythicks, thickmatrix, TTmatrix)
+ SplineKind splinetype;
+ int isclosed, isanArc;
+ LineStyle patt;
+ int32 numctls;
+int32(*arrayXY)[2];
+int32(*pointmatrix)[2];
+ int varythicks;
+ VThickness *thickmatrix, *TTmatrix;
+{
+ /* IN */
+ /* OUT */
+ /* IN */
+ /* OUT */
+ lastPoint = 0;
+
+
+ switch (splinetype)
+ {
+
+ case CATROM:
+ interpsplines(splinetype, isclosed, isanArc, patt, catrommtx, numctls,
+ arrayXY, pointmatrix, varythicks, thickmatrix, TTmatrix);
+ break;
+
+ case CARD:
+ interpsplines(splinetype, isclosed, isanArc, patt, cardmtx, numctls,
+ arrayXY, pointmatrix, varythicks, thickmatrix, TTmatrix);
+ break;
+
+ case BSPL:
+ interpsplines(splinetype, isclosed, isanArc, patt, bsplmtx, numctls,
+ arrayXY, pointmatrix, varythicks, thickmatrix, TTmatrix);
+ break;
+
+ case INTBSPL:
+ interpsplines(splinetype, isclosed, isanArc, patt, bsplmtx, numctls,
+ arrayXY, pointmatrix, varythicks, thickmatrix, TTmatrix);
+ break;
+ } /* Case */
+}
diff --git a/macros/latex209/contrib/textyl/src/tables.c b/macros/latex209/contrib/textyl/src/tables.c
new file mode 100644
index 0000000000..382dd8ce17
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/tables.c
@@ -0,0 +1,157 @@
+#include "tables.h"
+
+struct vecinfo vectab[] =
+{
+ {15.9688, 0.0, 0.9981, 86.4237},
+ {15.8764, 0.0, 1.9846, 82.8750},
+ {15.7260, 0.0, 2.9486, 79.3803},
+ {15.5223, 0.0, 3.8806, 75.9638},
+ {15.2717, 0.0, 4.7724, 72.6460},
+ {14.9813, 0.0, 5.6180, 69.4440},
+ {14.6585, 0.0, 6.4131, 66.3706},
+ {14.3108, 0.0, 7.1554, 63.4349},
+ {13.9452, 0.0, 7.8442, 60.6422},
+ {13.5680, 0.0, 8.4800, 57.9946},
+ {13.1847, 0.0, 9.0645, 55.4915},
+ {12.8000, 0.0, 9.6000, 53.1301},
+ {12.4178, 0.0, 10.0895, 50.9061},
+ {12.0412, 0.0, 10.5361, 48.8141},
+ {11.6726, 0.0, 10.9431, 46.8476},
+ {11.3137, 0.0, 11.3137, 45.0000},
+ {10.9431, 0.0, 11.6726, 43.1524},
+ {10.5361, 0.0, 12.0412, 41.1859},
+ {10.0895, 0.0, 12.4178, 39.0939},
+ {9.6000, 0.0, 12.8000, 36.8699},
+ {9.0645, 0.0, 13.1847, 34.5085},
+ {8.4800, 0.0, 13.5680, 32.0054},
+ {7.8442, 0.0, 13.9452, 29.3578},
+ {7.1554, 0.0, 14.3108, 26.5651},
+ {6.4131, 0.0, 14.6585, 23.6294},
+ {5.6180, 0.0, 14.9813, 20.5560},
+ {4.7724, 0.0, 15.2717, 17.3540},
+ {3.8806, 0.0, 15.5223, 14.0362},
+ {2.9486, 0.0, 15.7260, 10.6197},
+ {1.9846, 0.0, 15.8764, 7.1250},
+ {0.9981, 0.0, 15.9688, 3.5763},
+ {0.0, 0.0, 16.0000, 0.0000},
+ {0.0, 0.9981, 15.9688, -3.5763},
+ {0.0, 1.9846, 15.8764, -7.1250},
+ {0.0, 2.9486, 15.7260, -10.6197},
+ {0.0, 3.8806, 15.5223, -14.0362},
+ {0.0, 4.7724, 15.2717, -17.3540},
+ {0.0, 5.6180, 14.9813, -20.5560},
+ {0.0, 6.4131, 14.6585, -23.6294},
+ {0.0, 7.1554, 14.3108, -26.5651},
+ {0.0, 7.8442, 13.9452, -29.3578},
+ {0.0, 8.4800, 13.5680, -32.0054},
+ {0.0, 9.0645, 13.1847, -34.5085},
+ {0.0, 9.6000, 12.8000, -36.8699},
+ {0.0, 10.0895, 12.4178, -39.0939},
+ {0.0, 10.5361, 12.0412, -41.1859},
+ {0.0, 10.9431, 11.6726, -43.1524},
+ {0.0, 11.3137, 11.3137, -45.0000},
+ {0.0, 11.6726, 10.9431, -46.8476},
+ {0.0, 12.0412, 10.5361, -48.8141},
+ {0.0, 12.4178, 10.0895, -50.9061},
+ {0.0, 12.8000, 9.6000, -53.1301},
+ {0.0, 13.1847, 9.0645, -55.4915},
+ {0.0, 13.5680, 8.4800, -57.9946},
+ {0.0, 13.9452, 7.8442, -60.6422},
+ {0.0, 14.3108, 7.1554, -63.4349},
+ {0.0, 14.6585, 6.4131, -66.3706},
+ {0.0, 14.9813, 5.6180, -69.4440},
+ {0.0, 15.2717, 4.7724, -72.6460},
+ {0.0, 15.5223, 3.8806, -75.9638},
+ {0.0, 15.7260, 2.9486, -79.3803},
+ {0.0, 15.8764, 1.9846, -82.8750},
+ {0.0, 15.9688, 0.9981, -86.4237},
+ {8.0000, 0.0, 0.0, 90.0000},
+ {7.9382, 0.0, 0.9923, 82.8750},
+ {7.7611, 0.0, 1.9403, 75.9638},
+ {7.4906, 0.0, 2.8090, 69.4440},
+ {7.1554, 0.0, 3.5777, 63.4349},
+ {6.7840, 0.0, 4.2400, 57.9946},
+ {6.4000, 0.0, 4.8000, 53.1301},
+ {6.0206, 0.0, 5.2680, 48.8141},
+ {5.6569, 0.0, 5.6569, 45.0000},
+ {5.2680, 0.0, 6.0206, 41.1859},
+ {4.8000, 0.0, 6.4000, 36.8699},
+ {4.2400, 0.0, 6.7840, 32.0054},
+ {3.5777, 0.0, 7.1554, 26.5651},
+ {2.8090, 0.0, 7.4906, 20.5560},
+ {1.9403, 0.0, 7.7611, 14.0362},
+ {0.9923, 0.0, 7.9382, 7.1250},
+ {0.0, 0.0, 8.0000, 0.0000},
+ {0.0, 0.9923, 7.9382, -7.1250},
+ {0.0, 1.9403, 7.7611, -14.0362},
+ {0.0, 2.8090, 7.4906, -20.5560},
+ {0.0, 3.5777, 7.1554, -26.5651},
+ {0.0, 4.2400, 6.7840, -32.0054},
+ {0.0, 4.8000, 6.4000, -36.8699},
+ {0.0, 5.2680, 6.0206, -41.1859},
+ {0.0, 5.6569, 5.6569, -45.0000},
+ {0.0, 6.0206, 5.2680, -48.8141},
+ {0.0, 6.4000, 4.8000, -53.1301},
+ {0.0, 6.7840, 4.2400, -57.9946},
+ {0.0, 7.1554, 3.5777, -63.4349},
+ {0.0, 7.4906, 2.8090, -69.4440},
+ {0.0, 7.7611, 1.9403, -75.9638},
+ {0.0, 7.9382, 0.9923, -82.8750},
+ {0.0, 8.0000, 0.0, -90.0000},
+ {4.0000, 0.0, 0.0, 90.0000},
+ {3.8806, 0.0, 0.9701, 75.9638},
+ {3.5777, 0.0, 1.7889, 63.4349},
+ {3.2000, 0.0, 2.4000, 53.1301},
+ {2.8284, 0.0, 2.8284, 45.0000},
+ {2.4000, 0.0, 3.2000, 36.8699},
+ {1.7889, 0.0, 3.5777, 26.5651},
+ {0.9701, 0.0, 3.8806, 14.0362},
+ {0.0, 0.0, 4.0000, 0.0000},
+ {0.0, 0.9701, 3.8806, -14.0362},
+ {0.0, 1.7889, 3.5777, -26.5651},
+ {0.0, 2.4000, 3.2000, -36.8699},
+ {0.0, 2.8284, 2.8284, -45.0000},
+ {0.0, 3.2000, 2.4000, -53.1301},
+ {0.0, 3.5777, 1.7889, -63.4349},
+ {0.0, 3.8806, 0.9701, -75.9638},
+ {0.0, 4.0000, 0.0, -90.0000},
+ {2.0000, 0.0, 0.0, 90.0000},
+ {1.7889, 0.0, 0.8944, 63.4349},
+ {1.4142, 0.0, 1.4142, 45.0000},
+ {0.8944, 0.0, 1.7889, 26.5651},
+ {0.0, 0.0, 2.0000, 0.0000},
+ {0.0, 0.8944, 1.7889, -26.5651},
+ {0.0, 1.4142, 1.4142, -45.0000},
+ {0.0, 1.7889, 0.8944, -63.4349},
+ {0.0, 2.0000, 0.0, -90.0000},
+ {1.0000, 0.0, 0.0, 90.0000},
+ {0.7071, 0.0, 0.7071, 45.0000},
+ {0.0, 0.0, 1.0000, 0.0000},
+ {0.0, 0.7071, 0.7071, -45.0000},
+ {0.0, 1.0000, 0.0, -90.0000},
+ {0.0, 0.0, 0.0, -90.0000},
+};
+
+double catrommtx[4][4] =
+{
+ -0.5, 1.5, -1.5, 0.5,
+ 1.0, -2.5, 2.0, -0.5,
+ -0.5, 0.0, 0.5, 0.0,
+ 0.0, 1.0, 0.0, 0.0,
+};
+
+double bsplmtx[4][4] =
+{
+ -1.0 / 6.0, 0.5, -0.5, 1.0 / 6.0,
+ 0.5, -1.0, 0.5, 0.0,
+ -0.5, 0.0, 0.5, 0.0,
+ 1.0 / 6.0, 2.0 / 3.0, 1.0 / 6.0, 0.0,
+};
+
+double cardmtx[4][4] =
+{
+ -1.0, 1.0, -1.0, 1.0,
+ 2.0, -2.0, 1.0, -1.0,
+ -1.0, 0.0, 1.0, 0.0,
+ 0.0, 1.0, 0.0, 0.0,
+};
diff --git a/macros/latex209/contrib/textyl/src/tables.h b/macros/latex209/contrib/textyl/src/tables.h
new file mode 100644
index 0000000000..ba62559e58
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/tables.h
@@ -0,0 +1,10 @@
+struct vecinfo
+{
+ double Cht, Cdp, Cwd, Angle;
+};
+
+extern struct vecinfo vectab[];
+
+extern double catrommtx[4][4];
+extern double bsplmtx[4][4];
+extern double cardmtx[4][4];
diff --git a/macros/latex209/contrib/textyl/src/textyl.c b/macros/latex209/contrib/textyl/src/textyl.c
new file mode 100644
index 0000000000..0f94cac1f7
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/textyl.c
@@ -0,0 +1,3422 @@
+/* Output from p2c, the Pascal-to-C translator */
+/* From input file "textyl.p" */
+
+#include "defs.h"
+#include "globals.h"
+#include "tables.h"
+
+extern int abs PP((int));
+
+/*----------------------------------------------------------
+ TeXtyl line-drawing interface for TeX.
+ copyright (c) 1987 John S. Renner
+ All rights reserved.
+
+ABSTRACT: TeXtyl reads in a DVI file, and processes 'specials'
+ that refer to graphics capabilities that it knows about,
+ like line, spline, ThickThinSpline, and musical
+ beams and slurs. TeXtyl then outputs a new DVI file,
+ with the special-macros expanded and converted to
+ DVI-commands for character setting.
+
+DEPENDENCIES: Few assumptions about Pascal are assumed. All
+ identifiers are unique to eight characters. There are
+ notes to indicate system-dependencies.
+ I assume the standard definition of "READ(fil, x)" to be
+ equivalent to "x := fil^; GET(fil)" , and
+ "WRITE(fil, x)" == "fil^ := x; PUT(fil)" .
+ Arrays are passed by reference (VAR) for efficiency.
+ See also the "sysdependent" procedure;
+ Problem areas, or areas for expansion are marked with ###
+
+-------------------------------------------------------------*/
+/*-Revision History:
+ Jun. 1986 v1.0 Basic version of TeXtyl
+ Dec. 1986 v1.1 Added adaptive subdivision for spline
+ interpolation. Added Cardinal basis.
+ Mar. 1987 v1.2 Added F and W flags for beginfigure
+ to allow required and/or actual dimensions
+ to interface with files output by the
+ DP drawing program from Carnegie-Mellon
+ also various fixes
+ Apr. 1987 v1.3 Added linestyles (dotted, dashed, dotdashed)
+ Aug. 1991 Translated to C with p2c, then hacked a bit. (Ken Yap)
+*/
+
+/* ===========================TYPES============================= */
+
+/* ---- PUBLIC types ---- */
+
+typedef int MusIndex;
+typedef int SplineSegments[MAXSPLINESEGS][2];
+
+/* ----- Private Types ---- */
+
+typedef struct FontInfRec
+{
+ int32 Cht, Cdp, Cwd;
+ double Angle;
+} FontInfRec;
+
+/* vector font info */
+
+typedef struct VectFontInfRec
+{
+ VectKind vkind;
+ int32 DesSize, PenSize;
+ VThickness psize;
+ int32 MaxVectLen;
+ charstring FontName;
+ int32 Cksum;
+ int Isdefined;
+ int32 DVIFontNum;
+ FontInfRec FontInfo[128];
+} VectFontInfRec;
+
+/* music font info */
+
+typedef struct MusFontInfRec
+{
+ int32 DesSize, Family;
+ charstring FontName;
+ int32 Cksum;
+ int Isdefined;
+ int32 DVIFontNum, Staffsize, ghu, gvu;
+ FontInfRec FontInfo[128];
+} MusFontInfRec;
+
+/*
+ * representation of list of fonts that have to be defined
+ * before we output the BOP of the page we just scanned
+ */
+
+typedef struct ToBeDefinedRec
+{
+ char which;
+ int32 indx;
+} ToBeDefinedRec;
+
+/* ==============================VARS============================ */
+
+/* ----- Private vars */
+static int32 ourxpos; /* internal x-position on page */
+static int32 ourypos; /* internal y-position on page */
+
+static VectFontInfRec *VFontTable[SizVFontTable];
+static MusFontInfRec *MFontTable[SizMFontTable];
+/* the font tables, and the number of fonts defined in each */
+static int32 VFontsDefd, MFontsDefd, LFontsDefd;
+
+static int GDVIFN = 301; /* dvi font number currently in use */
+
+/* table of fonts yet To-Be-Defined */
+static ToBeDefinedRec TBD[MAXTBDs];
+static int32 FTBDs; /* number of fonts to be defined for current page */
+
+static Item *pageitems;
+/*
+ * list of primitives in current use in the current figure on the current page
+ */
+
+static int32 specstart = 0;
+/*
+ * the place in the DVI buffer where the start of the special begins.
+ * this is so that we know how far to back up and over-write
+ * the old \special macro string with the cmds of our 'macro-expansion'
+ */
+
+static int32 multifigure; /* depth of definition recursion of figures */
+static int skiptsclamp; /* DEBUG: should we skip post-clamping ties */
+static int ErrorOccurred; /* global flag in case some error happened */
+
+
+/* ----- End private vars */
+
+static short tfm[TFMSIZE + 101];
+
+static char s = 0;
+struct stackrec
+{
+ int32 sh, sv, sw, sx, sy, sz;
+} stack[STACKSIZE + 1];
+
+static int32 inwidth[256];
+static int32 tfmchecksum;
+static double conv, trueconv;
+static int32 numerator, denominator;
+static double mag, magfactor;
+static int32 maxv, maxh, maxs, maxpages = 10000, totalpages;
+static double resolution = 300.0;
+static int inpostamble;
+static int32 newbackptr = -1, oldbackptr = -1, p, k;
+
+/* forward declarations */
+static void definebeams PP((MusFontInfRec ** M));
+static void definevectors PP((VectFontInfRec ** Vec));
+
+static jmp_buf _JL666;
+
+static int
+opentfmfile(tfmname)
+ charstring tfmname;
+{
+ charstring thefilename;
+ char *path, *p, *q, *getenv PP((char *));
+
+ if ((path = getenv("TEXFONTS")) == 0)
+ path = DEFTEXFONTS;
+ if (tfmfile != NULL)
+ {
+ fclose(tfmfile);
+ tfmfile = NULL;
+ }
+ for (p = path; p != 0 && tfmfile == NULL; p = q ? q + 1 : 0)
+ {
+ if ((q = strchr(p, ':')) == 0)
+ strcpy(thefilename, p);
+ else
+ strncpy(thefilename, p, q - p);
+ strcat(thefilename, "/");
+ if (strcmp(thefilename, "./") == 0)
+ thefilename[0] = '\0';
+ strcat(thefilename, tfmname);
+ tfmfile = fopen(thefilename, "r");
+ }
+ return (tfmfile != NULL);
+}
+
+void
+jumpout()
+{
+ longjmp(_JL666, 1); /* global label */
+}
+
+void
+complain(severity)
+ int severity;
+{
+ fprintf(logfile, "Error in fig#%ld on page %ld\n", pgfigurenum, currpagenum);
+ switch (severity)
+ {
+ case ERRNOTBAD:
+ putc(ERRSIGNAL, logfile);
+ break;
+ case ERRBAD:
+ putc(ERRSIGNAL, logfile);
+ ErrorOccurred = true;
+ break;
+ case ERRREALBAD:
+ fprintf(logfile, "%c! ", ERRSIGNAL);
+ ErrorOccurred = true;
+ break;
+ }
+}
+
+double
+float_(i)
+ int32 i;
+{
+ return ((double) i);
+}
+
+static int
+tolowercase(let)
+ int let;
+{
+ return (isupper(let) ? tolower(let) : let);
+}
+
+#define streq(a,b,n) (!strncmp((a),(b),(n)))
+
+/*
+ * Move the current DVI position to posx, posy by moving relatively from our current position and store the new position
+ */
+void
+isetpos(posx, posy)
+ int posx, posy;
+{
+ ScaledPts dy, dx;
+ int32 numbytes;
+
+ dx = posx - ourxpos;
+ dy = posy - ourypos;
+ numbytes = 1;
+ if (dx < 128 && dx >= -128)
+ numbytes = 1;
+ else if (dx < 32768 && dx >= -32768)
+ numbytes = 2;
+ else if (dx < TWO23 && dx >= -TWO23)
+ numbytes = 3;
+ else if (dx < TWO31 && dx >= -TWO31)
+ numbytes = 4;
+ else
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "Panic: dx is too big/small in isetpos: %12ld\n", dx);
+ }
+
+ cmd1byte(RIGHTLEFT + numbytes - 1);
+ /* number of bytes in its arg list */
+ cmdSigned(dx, numbytes);
+
+ numbytes = 1;
+ if (dy < 128 && dy >= -128)
+ numbytes = 1;
+ else if (dy < 32768 && dy >= -32768)
+ numbytes = 2;
+ else if (dy < TWO23 && dy >= -TWO23)
+ numbytes = 3;
+ else if (dy < TWO31 && dy >= -TWO31)
+ numbytes = 4;
+ else
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "Panic: dy is too big/small in isetpos: %12ld\n", dy);
+ }
+ cmd1byte(DOWNUP + numbytes - 1);
+ cmdSigned(dy, numbytes);
+ ourxpos = posx;
+ ourypos = posy;
+}
+
+/* put out a character */
+static void
+iputchar(charno)
+ int charno;
+{
+ cmd1byte(PUT1);
+ cmd1byte(charno);
+}
+
+/*
+ * set the font number, but only if it is different than the last one
+ * we accessed.
+ */
+void
+isetfont(DVINum)
+ int DVINum;
+{
+ if (ourfontnum == DVINum)
+ return;
+ cmd1byte(USEFONT);
+ cmd2byte(DVINum);
+ ourfontnum = DVINum;
+}
+
+/* Assumes that the correct font is currently set */
+static void
+Tyldot(dotx, doty)
+ int32 dotx, doty;
+{
+ if (dotx != 0 && doty != 0)
+ isetpos(dotx, doty);
+ iputchar(DOTCHAR);
+}
+
+/*
+ * ### Note: "pageitems" could be extended to be a list
+ * { of macrodefinitions which contain primitives , and { then could be
+ * instanced. E.g., a library of common { figures callable from \special level
+ */
+
+void
+pushItem(depth, newthing)
+ int depth;
+ Item *newthing;
+{
+ Item *i, *p;
+
+ if (pageitems == NULL)
+ {
+ if (newthing->kind == Afigure)
+ {
+ pageitems = newthing;
+ return;
+ }
+ pageitems = NewItem(Afigure);
+ pageitems->UU.U8.depthnumber = depth;
+ }
+
+ /* Assume that pageitems points to Afigure */
+ /* traverse the list */
+ i = pageitems; /* point to front of list for now */
+ p = i->UU.U8.body->things;
+ while (p != NULL)
+ {
+ if (depth == i->UU.U8.depthnumber)
+ { /* simple push */
+/*
+ * Note: this is the case when pushing another figure item onto
+ * an already-existing list. We push the
+ * newfigure with a depth of (fig^.depthnumber - 1) because
+ * it really is part of the higer-level figure
+ */
+ break;
+ }
+ if (depth <= i->UU.U8.depthnumber)
+ continue;
+ /* there MUST be a figure with a higher number deeper */
+ while (p->kind != Afigure && p->nextitem != NULL)
+ p = p->nextitem;
+
+ if (p->kind == Afigure)
+ {
+ i = p;
+ p = i->UU.U8.body->things;
+ }
+ else
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile,
+ "OOPS p^.kind isnt a figure. It must be near endoflist\n");
+ }
+ }
+
+ /*
+ * we have the correct front of list-list, and i points to Afigure item
+ */
+ newthing->nextitem = p;
+ i->UU.U8.body->things = newthing;
+}
+
+static double
+Tgetfixword(k)
+ int k;
+{
+ short a;
+ int32 f;
+
+ a = tfm[k + 100] * 16 + tfm[k + 101] / 16;
+ f = ((tfm[k + 101] & 15) * 256 + tfm[k + 102]) * 256 + tfm[k + 103];
+ if (a <= 2047)
+ return (a + (double) f / TWO20);
+ a = 4096 - a;
+ if (f > 0)
+ {
+ f = TWO20 - f;
+ a--;
+ }
+ return (a + (double) f / TWO20);
+}
+
+static int32
+TgetSigned(k)
+ int k;
+{
+ int32 i;
+
+ i = tfm[k + 100];
+ if (i < 128)
+ i -= 256;
+ return (((i * 256 + tfm[k + 101]) * 256 + tfm[k + 102]) * 256 + tfm[k + 103]);
+}
+
+/*
+ * open a .tfm file and return the parameters in it.
+ * Used only in conjuction with the vector and music fonts
+ */
+static void
+gettfm(tfmfilnam, dessize, p1, p2, p3, p4, p5, p6, p7, cksum)
+ charstring tfmfilnam;
+ int32 *dessize, *p1, *p2, *p3, *p4, *p5, *p6, *p7, *cksum;
+{
+ int32 tfmptr, lf, lh, bc, ec, nw, nh, nd, ni, nl, nk, ne, np, charbase, widthbase, heightbase, depthbase,
+ italicbase, ligkernbase, kernbase, extenbase, parambase;
+ ScaledPts tempdesignsize;
+
+ *p1 = 0;
+ *p2 = 0;
+ *p3 = 0;
+ *p4 = 0;
+ *p5 = 0;
+ *p6 = 0;
+ *p7 = 0;
+ *cksum = -1;
+ if (!opentfmfile(tfmfilnam))
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "%s---not loaded, TFM file can't be opened!\n", tfmfilnam);
+ jumpout();
+ }
+ tfm[100] = Tgetc();
+ tfm[101] = Tgetc();
+ lf = tfm[100] * 256 + tfm[101];
+ if (lf * 4 - 1 > TFMSIZE)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "The tfm file:%s is bigger than I can handle!\n", tfmfilnam);
+ return;
+ }
+ for (tfmptr = 102; tfmptr <= lf * 4 + 99; tfmptr++)
+ tfm[tfmptr] = Tgetc();
+ tfmptr = 2;
+ lh = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ bc = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ ec = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ nw = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ nh = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ nd = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ ni = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ nl = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ nk = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ ne = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ np = tfm[tfmptr + 100] * 256 + tfm[tfmptr + 101];
+ tfmptr += 2;
+ if (lf != lh + ec - bc + nw + nh + nd + ni + nl + nk + ne + np + 7)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "%s: subfile sizes don't add up to the stated total!\n", tfmfilnam);
+ fprintf(logfile,
+ "Sorry, but I can't go on; are you sure this is a TFM?\n");
+ return;
+ }
+ if (bc > ec + 1 || ec > 255)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "The character code range %ld..%ld is illegal!\n", bc, ec);
+ fprintf(logfile, "Sorry, but I can't go on; are you sure this is a TFM?\n");
+ return;
+ }
+ charbase = lh - bc + 6;
+ widthbase = charbase + ec + 1;
+ heightbase = widthbase + nw;
+ depthbase = heightbase + nh;
+ italicbase = depthbase + nd;
+ ligkernbase = italicbase + ni;
+ kernbase = ligkernbase + nl;
+ extenbase = kernbase + nk;
+ parambase = extenbase + ne - 1;
+
+ *dessize = (int32) floor(Tgetfixword(28) * SPPERPT + 0.5);
+ /* now in ScaledPts */
+ tempdesignsize = (int32) floor(*dessize * magfactor + 0.5);
+ *cksum = TgetSigned(24);
+ /* return the special 7 parameters for the font */
+ *p1 = (int32) floor(Tgetfixword((parambase + 1) * 4) * tempdesignsize + 0.5);
+ *p2 = (int32) floor(Tgetfixword((parambase + 2) * 4) * tempdesignsize + 0.5);
+ *p3 = (int32) floor(Tgetfixword((parambase + 3) * 4) * tempdesignsize + 0.5);
+ *p4 = (int32) floor(Tgetfixword((parambase + 4) * 4) * tempdesignsize + 0.5);
+ *p5 = (int32) floor(Tgetfixword((parambase + 5) * 4) * tempdesignsize + 0.5);
+ *p6 = (int32) floor(Tgetfixword((parambase + 6) * 4) * tempdesignsize + 0.5);
+ *p7 = (int32) floor(Tgetfixword((parambase + 7) * 4) * tempdesignsize + 0.5);
+}
+
+static void
+initVnMnLtables()
+{
+ int32 i;
+
+ for (i = 0; i < SizVFontTable; i++)
+ VFontTable[i] = NULL;
+ for (i = 0; i < SizMFontTable; i++)
+ MFontTable[i] = NULL;
+ for (i = 0; i < SizLFontTable; i++)
+ LFontTable[i] = NULL;
+ VFontsDefd = 0;
+ MFontsDefd = 0;
+ LFontsDefd = 0;
+}
+
+static void
+fonttobedefined(kind, findex)
+ char kind;
+ int findex;
+{
+ FTBDs++;
+ /*
+ * reset this to zero after outputting 1. fontdefs 2. bop
+ * 3. contents of dvi page 4. eop
+ */
+ TBD[FTBDs - 1].which = kind;
+ TBD[FTBDs - 1].indx = findex;
+}
+
+static void
+enterfont(fontnum, ck, scalefact, dessiz, nam)
+ int32 fontnum, ck, scalefact, dessiz;
+ charstring nam;
+{
+ int32 n, len;
+
+ cmd1byte(FONTDEF);
+ cmd2byte(fontnum);
+ cmd4byte(ck);
+ cmd4byte(scalefact);
+ cmd4byte(dessiz);
+ cmd1byte(USESTDAREA);
+ cmd1byte(len = strlen(nam) - 4);/* skip the length of the .tfm suffix */
+ for (n = 0; n < len; n++) /* skip the .tfm suffix */
+ cmd1byte(nam[n]);
+
+}
+
+static void
+Outputfont(fontnum, ck, scalefact, dessiz, nam)
+ int32 fontnum, ck, scalefact, dessiz;
+ charstring nam;
+{
+ int32 n, len;
+
+ OutputByte(FONTDEF);
+ Output2Byte(fontnum);
+ Output4Byte(ck);
+ Output4Byte(scalefact);
+ Output4Byte(dessiz);
+ OutputByte(USESTDAREA);
+ /* dont output the default dir prefix, nor the .tfm suffix */
+ OutputByte(len = strlen(nam) - 4);
+ for (n = 0; n < len; n++)
+ OutputByte(nam[n]);
+
+}
+
+void
+defineNewfonts()
+{
+ /*
+ * this needs to be done before first access to a font
+ * on a page later someone else will have to re-define all of them
+ * in the postamble
+ */
+ int32 i, f, FORLIM;
+ VectFontInfRec *WITH;
+ MusFontInfRec *WITH1;
+ LabFontInfRec *WITH2;
+
+ FORLIM = FTBDs;
+ for (i = 0; i < FORLIM; i++)
+ {
+ if (TBD[i].which == 'V')
+ {
+ f = TBD[i].indx;
+ WITH = VFontTable[f - 1]; /* with */
+ if (WITH->Isdefined)
+ continue;
+ Outputfont(WITH->DVIFontNum, WITH->Cksum, WITH->DesSize, WITH->DesSize,
+ WITH->FontName);
+ WITH->Isdefined = true;
+ } /* if */
+ else if (TBD[i].which == 'M')
+ {
+ f = TBD[i].indx;
+ WITH1 = MFontTable[f - 1]; /* with */
+ if (WITH1->Isdefined)
+ continue;
+ Outputfont(WITH1->DVIFontNum, WITH1->Cksum, WITH1->DesSize,
+ WITH1->DesSize, WITH1->FontName);
+ WITH1->Isdefined = true;
+ }
+ else if (TBD[i].which == 'L')
+ {
+ f = TBD[i].indx;
+ WITH2 = LFontTable[f - 1]; /* with */
+ if (WITH2->Isdefined) /* ### is this right? */
+ continue;
+ Outputfont(WITH2->DVIFontNum, WITH2->Cksum, WITH2->DesSize,
+ WITH2->DesSize, WITH2->FontName);
+ WITH2->Isdefined = true;
+ }
+ else
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "Unknown type of font to be defined:\"%c\"\n",
+ TBD[i].which);
+ }
+ }
+}
+
+static int32
+GetMusFont(stfsiz, fam)
+ int32 stfsiz, fam;
+{
+ charstring mustfmnam;
+ MusIndex i;
+ ScaledPts design, p1, p2, p3, p4, linesp, gwidth, p7;
+ int32 cksm, FORLIM;
+ MusFontInfRec *WITH;
+
+ /* see if it already exists */
+ FORLIM = MFontsDefd;
+ for (i = 1; i <= FORLIM; i++)
+ { /* loop through since there are few */
+ WITH = MFontTable[i - 1];
+ if (WITH->Staffsize == stfsiz && WITH->Family == fam)
+ return (i);
+ }
+
+ sprintf(mustfmnam, "mus%c%c.tfm", stfsiz + '0', fam + '0');
+ gettfm(mustfmnam, &design, &p1, &p2, &p3, &p4, &linesp, &gwidth, &p7, &cksm);
+
+ MFontsDefd++;
+ if (MFontsDefd > SizMFontTable)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "%s---not loadable. Size of Music Font table too small\n", mustfmnam);
+ jumpout();
+ }
+
+ i = MFontsDefd;
+ MFontTable[i - 1] = (MusFontInfRec *) xmalloc(sizeof(MusFontInfRec));
+ WITH = MFontTable[i - 1];
+
+ WITH->Staffsize = stfsiz;
+ WITH->Family = fam;
+ WITH->DesSize = design;
+ strcpy(WITH->FontName, mustfmnam);
+ WITH->Cksum = cksm;
+ WITH->ghu = (int32) floor(gwidth / QNOTEGHUS + 0.5);
+ WITH->gvu = (int32) floor(linesp / QNOTEGVUS + 0.5);
+ WITH->DVIFontNum = GDVIFN++;
+ WITH->Isdefined = false;
+ /* call someone to do the defns of cdp, cht, cwd foreach beam */
+ definebeams(&MFontTable[i - 1]);
+ fonttobedefined('M', i);
+ return (i);
+}
+
+int32
+GetVectFont(size, vk)
+ VThickness size;
+ VectKind vk;
+{
+ charstring vectfmnam;
+ VecIndex i;
+ ScaledPts design, p1, p2, w0, w1, maxveclen, p6, p7;
+ int32 cksm, r, FORLIM;
+ VectFontInfRec *WITH;
+
+ /* see if it already exists */
+ FORLIM = VFontsDefd;
+ for (i = 1; i <= FORLIM; i++)
+ { /* with */
+ WITH = VFontTable[i - 1];
+ if (WITH->psize == size && WITH->vkind == vk)
+ return (i);
+ }
+ switch (vk)
+ {
+ case VKCirc:
+ r = 'c';
+ break;
+ case VKVert:
+ r = 'v';
+ break;
+ case VKHort:
+ r = 'h';
+ break;
+ }
+ sprintf(vectfmnam, "%cvec%d.tfm", r, size);
+ gettfm(vectfmnam, &design, &p1, &p2, &w0, &w1, &maxveclen, &p6, &p7, &cksm);
+ VFontsDefd++;
+ if (VFontsDefd > SizVFontTable)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "%s---not loadable. Size of Vector Font table too small\n", vectfmnam);
+ jumpout();
+ }
+
+ i = VFontsDefd;
+ VFontTable[i - 1] = (VectFontInfRec *) xmalloc(sizeof(VectFontInfRec));
+ WITH = VFontTable[i - 1];
+
+ WITH->vkind = vk;
+ WITH->psize = size;
+ WITH->DesSize = design;
+ if (vk == VKVert)
+ WITH->PenSize = w1;
+ else
+ WITH->PenSize = w0;
+ WITH->PenSize = (int32) floor(size * (MAXVECLENsp / 16.0) + 0.5);
+ WITH->MaxVectLen = maxveclen;
+ strcpy(WITH->FontName, vectfmnam);
+ WITH->Cksum = cksm;
+ WITH->Isdefined = false;
+ WITH->DVIFontNum = GDVIFN++;
+
+ definevectors(&VFontTable[i - 1]);
+ /* someone asked for it, so they must want it, and we should fntdef it */
+ fonttobedefined('V', i);
+ return (i);
+}
+
+
+/*----------------------------------------------------------*/
+int32
+GetLabFont(style)
+ int32 style;
+{
+ charstring labtfmnam;
+ int32 i, cksm, FORLIM;
+ ScaledPts design, p1, space, p3, p4, p5, p6, p7;
+ LabFontInfRec *WITH;
+
+ if (style > MAXLABELFONTS)
+ style = 1;
+ FORLIM = LFontsDefd;
+ for (i = 1; i <= FORLIM; i++)
+ {
+ WITH = LFontTable[i - 1];
+ if (WITH->internalnumber == style)
+ return (i);
+ }
+
+ switch (style)
+ {
+ case 1: /* cmtt10 */
+ strcpy(labtfmnam, "cmtt10");
+ break;
+ case 2: /* cmb10 */
+ strcpy(labtfmnam, "cmb10");
+ break;
+ case 3: /* cmsl10 */
+ strcpy(labtfmnam, "cmsl10");
+ break;
+ case 4: /* cmtt8 */
+ strcpy(labtfmnam, "cmtt8");
+ break;
+ case 5: /* cmsl8 */
+ strcpy(labtfmnam, "cmsl8");
+ break;
+ }
+ strcat(labtfmnam, ".tfm");
+ gettfm(labtfmnam, &design, &p1, &space, &p3, &p4, &p5, &p6, &p7, &cksm);
+
+ LFontsDefd++;
+
+ if (LFontsDefd > SizLFontTable)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "%s---not loadable. Size of Label Font table too small\n", labtfmnam);
+ jumpout();
+ }
+
+ i = LFontsDefd;
+ LFontTable[i - 1] = (LabFontInfRec *) xmalloc(sizeof(LabFontInfRec));
+ WITH = LFontTable[i - 1]; /* with */
+
+ strcpy(WITH->FontName, labtfmnam);
+ WITH->Cksum = cksm;
+ WITH->DesSize = design;
+ WITH->internalnumber = style;
+ WITH->spacewidth = space;
+ WITH->DVIFontNum = GDVIFN++;
+ WITH->Isdefined = false;
+ fonttobedefined('L', i);
+ return (i);
+}
+
+static double
+vectangle(dx, dy)
+ int32 dx, dy;
+{
+ if (dx != 0)
+ return (atan(dy / (double) dx) * RADTODEG);
+ else
+ return (dy > 0 ? 90.0 : -90.0);
+}
+
+static void
+definevectors(Vec)
+ VectFontInfRec **Vec;
+{
+ /* var Vec: pVectFontInfRec */
+ int i;
+ double units;
+ VectFontInfRec *V;
+ FontInfRec *F;
+ struct vecinfo *v;
+
+ V = *Vec;
+ units = V->MaxVectLen / 16.0;
+ for (i = 0, F = V->FontInfo, v = vectab; i < 128; ++i, ++F, ++v)
+ {
+ F->Cht = floor(v->Cht * units + 0.5);
+ F->Cdp = floor(v->Cdp * units + 0.5);
+ F->Cwd = floor(v->Cwd * units + 0.5);
+ F->Angle = v->Angle;
+ }
+}
+
+/*
+ * If, for some reason, you do not want to deal with music capabilities,
+ * replace the body of this procedure with just a begin
+ * end; pair and also the TylBeam proc.
+ */
+static void
+definebeams(M)
+ MusFontInfRec **M;
+{
+ /* var M : pMusFontInfRec */
+}
+
+#define UnitRadius 16777216/* TWO24 scaledpts */
+
+/*
+ * use pre-calculated coordinates of a circle that has a given unit-radius.
+ * Scale those points to fit the desired radius
+ */
+void
+defineCircleCpts(rad, centx, centy, CircleCpt, numpts)
+ int32 rad, centx, centy;
+ int32 (*CircleCpt)[2];
+ int32 *numpts;
+{
+ double ratio;
+
+ if (rad == 0)
+ {
+ complain(ERRBAD);
+ fprintf(logfile, "Error in fig#%ld on page %ld\n",
+ pgfigurenum, currpagenum);
+ fprintf(logfile, "Zero length radius for circle! Setting to 1 sp\n");
+ rad = 1;
+ }
+ ratio = float_(rad) / float_(UnitRadius);
+ *numpts = 16;
+ CircleCpt[1][0] = (int32) floor(ratio * 16777216.00000 + 0.5) + centx;
+ CircleCpt[1][1] = centy;/* round (ratio * 0.00000) */
+ CircleCpt[2][0] = (int32) floor(ratio * 15500126.47492 + 0.5) + centx;
+ CircleCpt[2][1] = (int32) floor(ratio * 6420362.60441 + 0.5) + centy;
+ CircleCpt[3][0] = (int32) floor(ratio * 11863283.20303 + 0.5) + centx;
+ CircleCpt[3][1] = (int32) floor(ratio * 11863283.20303 + 0.5) + centy;
+ CircleCpt[4][0] = (int32) floor(ratio * 6420362.60441 + 0.5) + centx;
+ CircleCpt[4][1] = (int32) floor(ratio * 15500126.47492 + 0.5) + centy;
+ CircleCpt[5][0] = centx;/* round (ratio * -0.00000) */
+ CircleCpt[5][1] = (int32) floor(ratio * 16777216.00000 + 0.5) + centy;
+ CircleCpt[6][0] = (int32) floor(0.5 - ratio * 6420362.60441) + centx;
+ CircleCpt[6][1] = (int32) floor(ratio * 15500126.47492 + 0.5) + centy;
+ CircleCpt[7][0] = (int32) floor(0.5 - ratio * 11863283.20303) + centx;
+ CircleCpt[7][1] = (int32) floor(ratio * 11863283.20303 + 0.5) + centy;
+ CircleCpt[8][0] = (int32) floor(0.5 - ratio * 15500126.47492) + centx;
+ CircleCpt[8][1] = (int32) floor(ratio * 6420362.60441 + 0.5) + centy;
+ CircleCpt[9][0] = (int32) floor(0.5 - ratio * 16777216.00000) + centx;
+ CircleCpt[9][1] = centy;/* round (ratio * -0.00000) */
+ CircleCpt[10][0] = (int32) floor(0.5 - ratio * 15500126.47492) + centx;
+ CircleCpt[10][1] = (int32) floor(0.5 - ratio * 6420362.60441) + centy;
+ CircleCpt[11][0] = (int32) floor(0.5 - ratio * 11863283.20303) + centx;
+ CircleCpt[11][1] = (int32) floor(0.5 - ratio * 11863283.20303) + centy;
+ CircleCpt[12][0] = (int32) floor(0.5 - ratio * 6420362.60441) + centx;
+ CircleCpt[12][1] = (int32) floor(0.5 - ratio * 15500126.47492) + centy;
+ CircleCpt[13][0] = centx; /* round (ratio * 0.00000) */
+ CircleCpt[13][1] = (int32) floor(0.5 - ratio * 16777216.00000) + centy;
+ CircleCpt[14][0] = (int32) floor(ratio * 6420362.60441 + 0.5) + centx;
+ CircleCpt[14][1] = (int32) floor(0.5 - ratio * 15500126.47492) + centy;
+ CircleCpt[15][0] = (int32) floor(ratio * 11863283.20303 + 0.5) + centx;
+ CircleCpt[15][1] = (int32) floor(0.5 - ratio * 11863283.20303) + centy;
+ CircleCpt[16][0] = (int32) floor(ratio * 15500126.47492 + 0.5) + centx;
+ CircleCpt[16][1] = (int32) floor(0.5 - ratio * 6420362.60441) + centy;
+ /* create the pre-list phantom */
+ CircleCpt[0][0] = CircleCpt[16][0];
+ CircleCpt[0][1] = CircleCpt[16][1];
+}
+
+#undef UnitRadius
+
+/*
+ * compute control points for an arc going from startangle to stopangle, centered at (centx, centy)
+ */
+void
+definearcpts(rad, centx, centy, startang, stopang, cpts, nknots)
+ int32 rad, centx, centy, startang, stopang;
+ int32 (*cpts)[2];
+ int32 *nknots;
+{
+ int32 n;
+ double a, b, curr, delta;
+ int32 i;
+
+ a = startang * DEGTORAD;
+ b = stopang * DEGTORAD;
+ n = 16;
+ if (a > b)
+ a -= 2 * PI;
+ delta = fabs(b - a) / n;
+ if (a == b)
+ {
+ complain(ERRNOTBAD);
+ fprintf(logfile, "Error in compute arc points:: should be a circle\n");
+ }
+ curr = a;
+ i = 1;
+ while (curr <= b)
+ { /* make arc about (centx,centy) */
+ cpts[i][0] = (int32) floor(rad * cos(curr) + 0.5) + centx;
+ cpts[i][1] = (int32) floor(rad * sin(curr) + 0.5) + centy;
+ i++;
+ curr += delta;
+ }
+
+ /*
+ * go one point beyond -- around the arc so that we can have
+ * good smoothness for this phantom point
+ */
+
+ cpts[i][0] = (int32) floor(rad * cos(b + delta) + 0.5) + centx;
+ cpts[i][1] = (int32) floor(rad * sin(b + delta) + 0.5) + centy;
+
+ /* and one phantom point before the list */
+ cpts[0][0] = (int32) floor(rad * cos(a - delta) + 0.5) + centx;
+ cpts[0][1] = (int32) floor(rad * sin(a - delta) + 0.5) + centy;
+
+ *nknots = i - 1;
+}
+
+static int
+isaletter(b)
+ int b;
+{
+ return (isalpha(b) || b == '@' || b == '"');
+}
+
+static int
+getnumber(cpp)
+ char **cpp;
+{
+ int n;
+ int isneg;
+
+ n = 0;
+ isneg = false;
+ for ( ; **cpp != '\0' && (!isdigit(**cpp)); ++*cpp)
+ if (**cpp == '-')
+ isneg = true;
+ while (isspace(**cpp)) /* Skip spaces */
+ ++*cpp;
+ for ( ; **cpp != '\0' && isdigit(**cpp); ++*cpp)
+ n = n * 10 + **cpp - '0';
+ return (isneg ? -n : n);
+}
+
+static int
+getletter(cpp)
+ char **cpp;
+{
+ char *cp;
+
+ cp = *cpp;
+ /* non letter */
+ for (cp = *cpp; *cp != '\0' && !isaletter(*cp) && !isspace(*cp); ++cp)
+ ;
+ if (*cp != '\0' && (isaletter(*cp) ||
+ (isspace(*cp) && !isdigit(*cp))))
+ {
+ *cpp = cp + 1;
+ return (*cp);
+ }
+ return (' ');
+}
+
+static int
+getanything(cpp)
+ char **cpp;
+{
+ char c;
+
+ if ((c = **cpp) != '\0')
+ {
+ ++*cpp;
+ return (c);
+ }
+ return (' ');
+}
+
+/*****************************************************
+ The following routines look for key - letter tokens
+ that indicate certain attributes for a primitive.
+
+Currently, the letters used are:
+ Sfor scaled-points measurement
+ Pfor printers points
+ Mmillimeters measurement
+ Cuse a Circular vector for drawing
+ HHorizontal-pen vector
+ VVertical vector
+ BB-spline
+ IInterpolating B-spline
+ KCatmull-Rom spline
+ DCardinal spline
+ UOpen spline
+ Oclosed spline
+ Xput marks on spline control pts
+ TTransformation marker
+ RRegular beam characters
+ GGrace Beam characters
+ @Specify center-point for arc/circle
+ LLine-style
+ Ffor beginfigure: Fit figure to wid/ht
+ Wfor beginfigure: figure was created at this wid & ht
+***************************************************/
+
+static void
+gettransforms(sc1, sc2, r, tr1, tr2, cpp)
+ double *sc1, *sc2, *r;
+ int32 *tr1, *tr2;
+ char **cpp;
+{
+ char *cp;
+
+ *sc1 = 1.0;
+ *sc2 = 1.0;
+ *tr1 = 0;
+ *tr2 = 0;
+ *r = 0.0;
+ for (cp = *cpp; *cp != '\0'; ++cp)
+ {
+ if (*cp == 't' || *cp == 'T')
+ {
+ if (!isaletter(cp[-1]) && !isaletter(cp[1]))
+ {
+ /* get transform parameters and modify ptr */
+ *cpp = cp;
+ *sc1 = getnumber(cpp) / 100.0;
+ *sc2 = getnumber(cpp) / 100.0;
+ *tr1 = getnumber(cpp);
+ *tr2 = getnumber(cpp);
+ *r = float_(getnumber(cpp));
+ /* degrees about primitive center */
+ if (*r < 0.0)
+ *r += 360.0;
+ break;
+ }
+ }
+ }
+}
+
+static int
+findmarker(set, cp)
+ char *set;
+ char *cp;
+{
+ for ( ; *cp != '\0'; ++cp)
+ {
+ if (strchr(set, *cp))
+ if (!isaletter(cp[-1]) && !isaletter(cp[1]))
+ return (tolowercase(*cp));
+ }
+ return (0);
+}
+
+#define findscale(p) findmarker("sSpPmM", p)
+#define findvectkind(p) findmarker("cChHvV", p)
+#define findlinestyle(p) findmarker("lL", p)
+#define findbeamkind(p) findmarker("rRgG", p)
+#define findsplinekind(p) findmarker("bBiIkKdD", p)
+#define findsplclosure(p) findmarker("oOuU", p)
+#define findatsign(p) findmarker("@", p)
+#define finddotmark(p) findmarker("xX", p)
+#define findfigdimens(p) findmarker("wW", p)
+#define findfitsizes(p) findmarker("fF", p)
+
+static double
+thescaleof(scal)
+ int32 scal;
+{
+ if (scal == 's')
+ return (1 * magfactor);
+ if (scal == 'p')
+ return (SPPERPT * magfactor);
+ if (scal == 'm')
+ return (SPPERMM * magfactor);
+ if (scal == 0)
+ return (SPPERPT * magfactor);
+}
+
+
+static VectKind
+thevectorof(vkin)
+ int32 vkin;
+{
+ if (vkin == 'c')
+ return VKCirc;
+ if (vkin == 'v')
+ return VKVert;
+ if (vkin == 'h')
+ return VKHort;
+ if (vkin == 0)
+ return VKCirc;
+}
+
+static LineStyle
+thestyleof(linest)
+ int32 linest;
+{
+ static LineStyle styletab[4] = {solid, dotted, dashed, dotdash};
+
+ if (linest > 3 || linest < 0)
+ linest = 0;
+ return (styletab[linest]);
+}
+
+static void
+tylspecials(cp)
+ char *cp;
+{
+ /*
+ * specnum is the DVI-number of the special
+ * nbytes is the number of parameter bytes
+ */
+ int32 siz, numknots; /* Lots of temp vars that we use */
+ int32 x1, y1, x2, y2;
+ double sx100, sy100, rot, SPscale;
+ ScaledPts transx, transy, minx, miny, maxx, maxy;
+ ControlPoints cpts;
+ VThickness thk;
+ LineStyle patt;
+ ThickAryType TTary;
+ VectKind vk;
+ BeamKind bk;
+ int32 markdiam, radius, ang1, ang2;
+ charstring phrase;
+ int32 style;
+ char nam[5]; /* the first parameter of the \special */
+ char let;
+ int32 i;
+ Item *pi;
+ int32 maxthk, minthk;
+ SplineKind splinetype;
+ int isclosedspline;
+ int free PP((char *));
+
+ /* Lets look for a primitive to tyl */
+ for ( ; !isaletter(*cp) && *cp != '\0'; ++cp)
+ ;
+ /* get the name of the primitive */
+ for (i = 0; isaletter(*cp); ++cp)
+ if (i < 4)
+ nam[i++] = tolowercase(*cp);
+ nam[i] = '\0';
+
+ /* --- BEGINFIGURE ---- */
+ if (streq(nam, "beginfigure", 3))
+ {
+ multifigure++;
+ i = findscale(cp);
+ SPscale = thescaleof(i);
+
+ gettransforms(&sx100, &sy100, &rot, &transx, &transy, &cp);
+ /*
+ * store all the primitives on pageitems, and dont output them
+ * until we get a endfigure. this way, we can take
+ * care of dealing with all the primitives according to some
+ * global tranformation for the whole figure
+ */
+ pi = NewItem(Afigure);
+ pi->UU.U8.figtheta = rot;
+ pi->UU.U8.fsx = sx100;
+ pi->UU.U8.fsy = sy100;
+ pi->UU.U8.fdx = (int32) floor(transx * SPscale + 0.5);
+ pi->UU.U8.fdy = (int32) floor(transy * SPscale + 0.5);
+ pi->UU.U8.depthnumber = multifigure; /* we're at a new level */
+ i = findfigdimens(cp);
+ if (i != 0)
+ {
+ pi->UU.U8.preWid = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ pi->UU.U8.preHt = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ }
+ i = findfitsizes(cp);
+ if (i != 0)
+ { /* with */
+ pi->UU.U8.postWid = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ pi->UU.U8.postHt = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ }
+ BackupInBuf(DVIMark() - specstart);
+ pushItem(multifigure - 1, pi);
+ return;
+ }
+ /* ---- ENDFIGURE ---- */
+ if (streq(nam, "endfigure", 3))
+ {
+ multifigure--;
+ if (multifigure < 0)
+ {
+ complain(ERRBAD);
+ fprintf(logfile, "Warning: Too many \"endfigure\"s !");
+ multifigure = 0;
+ }
+ BackupInBuf(DVIMark() - specstart);
+ if (multifigure == 0)
+ {
+ /* go do our set of figures (within figures...) */
+ figurehandle(pageitems, pageitems, 1);
+ free((char *)pageitems);/* #### should maybe garbage collect here */
+ pageitems = NULL;
+ } /* if */
+ return;
+ }
+
+ /* --- LINE --- */
+ if (streq(nam, "line", 3))
+ {
+ i = findscale(cp);
+ SPscale = thescaleof(i);
+
+ gettransforms(&sx100, &sy100, &rot, &transx, &transy, &cp);
+ thk = getnumber(&cp); /* get the vector thickness */
+ if (thk < 1)
+ {
+ complain(ERRBAD);
+ fprintf(logfile, "?? Thickness not found. Setting to 1\n");
+ thk = 1;
+ }
+ i = findvectkind(cp);
+ vk = thevectorof(i);
+
+ i = findlinestyle(cp);
+ if (i != 0)
+ patt = thestyleof(getnumber(&cp));
+ else
+ patt = solid;
+
+ x1 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ y1 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ x2 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ y2 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+
+ minx = min(x1, x2);
+ maxx = max(x1, x2);
+ miny = min(y1, y2);
+ maxy = max(y1, y2);
+
+ BackupInBuf(DVIMark() - specstart);
+ cmd1byte(OURFONTFLAG);
+ linehandle(multifigure, SPscale, x1, y1, x2, y2, 0, 0, thk, vk, patt,
+ minx, maxx, miny, maxy, transx, transy, sx100, sy100, rot);
+ } /* line */
+ else if (streq(nam, "spline", 3) || streq(nam, "ttspline", 3))
+ {
+ i = findscale(cp);
+ SPscale = thescaleof(i);
+
+ gettransforms(&sx100, &sy100, &rot, &transx, &transy, &cp);
+
+ if (streq(nam, "spline", 3))
+ {
+ thk = getnumber(&cp);
+ if (thk < 1)
+ {
+ complain(ERRBAD);
+ fprintf(logfile, "Spline Thickness not found. Setting to 1\n");
+ thk = 1;
+ }
+ }
+ i = findvectkind(cp);
+ vk = thevectorof(i);
+
+ i = findlinestyle(cp);
+ if (i != 0)
+ patt = thestyleof(getnumber(&cp));
+ else
+ patt = solid;
+
+ i = findsplinekind(cp);
+ if (i == 'b')
+ splinetype = BSPL;
+ else if (i == 'i')
+ splinetype = INTBSPL;
+ else if (i == 'k')
+ splinetype = CATROM;
+ else if (i == 'd')
+ splinetype = CARD;
+ else if (i == 0)
+ splinetype = CATROM;
+
+ i = findsplclosure(cp);
+ if (i == 'o')
+ isclosedspline = true;
+ else if (i == 'u')
+ isclosedspline = false;
+ else if (i == 0)
+ isclosedspline = false;
+
+ i = finddotmark(cp);
+ if (i == 'x')
+ markdiam = getnumber(&cp);
+ else if (i == 0)
+ markdiam = 0;
+
+ numknots = min(getnumber(&cp), (int32) MAXCTLPTS);
+ if (numknots < 1)
+ {
+ complain(ERRBAD);
+ fprintf(logfile,
+ "Number of spline/ttspline knot points not found. Setting to 1\n");
+ numknots = 1;
+ }
+
+ minx = TWO24;
+ miny = TWO24;
+ maxx = -TWO24;
+ maxy = -TWO24;
+
+ for (i = 0; i <= numknots + 3; i++)
+ {
+ cpts[i][0] = 0;
+ cpts[i][1] = 0;
+ } /* for */
+
+ for (i = 1; i <= numknots; i++)
+ {
+ x1 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ cpts[i][0] = x1;
+ if (x1 < minx)
+ minx = x1;
+ if (x1 > maxx)
+ maxx = x1;
+ y1 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ cpts[i][1] = y1;
+ if (y1 < miny)
+ miny = y1;
+ if (y1 > maxy)
+ maxy = y1;
+ } /* for */
+
+ if (streq(nam, "ttspline", 3))
+ {
+ for (i = 1; i <= numknots; i++)
+ TTary[i] = getnumber(&cp);
+ }
+
+ BackupInBuf(DVIMark() - specstart);
+ cmd1byte(OURFONTFLAG);
+
+ if (streq(nam, "spline", 3))
+ splinehandle(multifigure, SPscale, splinetype, isclosedspline, markdiam,
+ cpts, numknots, 0, 0, thk, vk, patt, minx, maxx, miny,
+ maxy, transx, transy, sx100, sy100, rot);
+ else
+ ttsplhandle(multifigure, SPscale, splinetype, isclosedspline, markdiam,
+ cpts, TTary, numknots, 0, 0, vk, patt, minx, maxx, miny,
+ maxy, transx, transy, sx100, sy100, rot);
+ }
+ else if (streq(nam, "beam", 4))
+ {
+ i = findscale(cp);
+ SPscale = thescaleof(i);
+
+ /* no transforms */
+
+ siz = getnumber(&cp); /* the staffsize */
+ i = findbeamkind(cp);
+ if (i == 'g')
+ bk = grace;
+ else if (i == 'r')
+ bk = regular;
+ else if (i == 0)
+ bk = regular;
+
+ x1 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ y1 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ x2 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ y2 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+
+ BackupInBuf(DVIMark() - specstart);
+ cmd1byte(OURFONTFLAG);
+
+ beamhandle(multifigure, siz, bk, x1, y1, x2, y2);
+ }
+ else if (streq(nam, "tieslur", 3))
+ {
+ i = findscale(cp);
+ SPscale = thescaleof(i);
+
+ minthk = getnumber(&cp);
+ if (minthk < 1)
+ {
+ complain(ERRBAD);
+ fprintf(logfile, "Tie/Slur Min Thickness not found. Setting to 1\n");
+ minthk = 1;
+ }
+
+ maxthk = getnumber(&cp);
+ if (maxthk < 1)
+ {
+ complain(ERRBAD);
+ fprintf(logfile, "Tie/Slur MaxThickness not found. Setting to 1\n");
+ maxthk = 1;
+ }
+
+ numknots = min(getnumber(&cp), (int32) MAXCTLPTS);
+ if (numknots < 1)
+ {
+ complain(ERRBAD);
+ fprintf(logfile,
+ "Tie/Slur Number of knot points not found. Setting to 1. Should be 5\n");
+ numknots = 1;
+ }
+ for (i = 1; i <= numknots; i++)
+ {
+ cpts[i][0] = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ cpts[i][1] = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ } /* for */
+ BackupInBuf(DVIMark() - specstart);
+ cmd1byte(OURFONTFLAG);
+
+ tieslurhandle(multifigure, cpts, numknots, (int) minthk, (int) maxthk);
+ }
+ else if (streq(nam, "arc", 3))
+ {
+ i = findscale(cp);
+ SPscale = thescaleof(i);
+
+ gettransforms(&sx100, &sy100, &rot, &transx, &transy, &cp);
+
+ thk = getnumber(&cp);
+ if (thk < 1)
+ {
+ complain(ERRBAD);
+ fprintf(logfile, "Arc Thickness not found. Setting to 1\n");
+ thk = 1;
+ }
+ i = findvectkind(cp);
+ vk = thevectorof(i);
+
+ i = findlinestyle(cp);
+ if (i != 0)
+ patt = thestyleof(getnumber(&cp));
+ else
+ patt = solid;
+
+ radius = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ if (radius == 0)
+ radius = (int32) floor(1 * SPscale + 0.5);
+ i = findatsign(cp);
+ if (i != 0)
+ {
+ x2 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ y2 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ }
+ else
+ {
+ x2 = 0;
+ y2 = 0; /* assume center at origin */
+ }
+
+ ang1 = getnumber(&cp);
+ if (abs(ang1) > 360)
+ {
+ ang1 %= 360;
+ /*
+ * p2c: x.p, line 5570: Note: Using % for possibly-negative arguments [317]
+ */
+ }
+ ang2 = getnumber(&cp);
+ if (abs(ang2) > 360)
+ {
+ ang2 %= 360;
+ /*
+ * p2c: x.p, line 5573: Note: Using % for possibly-negative arguments [317]
+ */
+ }
+
+ minx = TWO24;
+ miny = TWO24;
+ maxx = -TWO24;
+ maxy = -TWO24;
+
+ if (ang1 == ang2) /* a circle */
+ defineCircleCpts(radius, x2, y2, cpts, &numknots);
+ else /* a real arc */
+ definearcpts(radius, x2, y2, ang1, ang2, cpts, &numknots);
+
+ for (i = 1; i <= numknots; i++)
+ {
+ x1 = cpts[i][0];
+ if (x1 < minx)
+ minx = x1;
+ if (x1 > maxx)
+ maxx = x1;
+
+ y1 = cpts[i][1];
+ if (y1 < miny)
+ miny = y1;
+ if (y1 > maxy)
+ maxy = y1;
+ } /* for */
+
+ BackupInBuf(DVIMark() - specstart);
+ cmd1byte(OURFONTFLAG);
+
+
+ arccirclehandle(multifigure, SPscale, x2, y2, radius, ang1, ang2, cpts,
+ numknots, 0, 0, thk, vk, patt, minx, maxx, miny, maxy,
+ transx, transy, sx100, sy100, rot);
+ }
+ else if (streq(nam, "label", 3))
+ {
+ i = findscale(cp);
+ SPscale = thescaleof(i);
+
+ style = getnumber(&cp); /* font style number */
+ if (style < 1 || style > MAXLABELFONTS)
+ {
+ complain(ERRBAD);
+ fprintf(logfile, "Label style bad? Setting to Style 1\n");
+ style = 1;
+ }
+
+ x1 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+ y1 = (int32) floor(getnumber(&cp) * SPscale + 0.5);
+
+ let = getletter(&cp);
+ while (let != '"')
+ let = getletter(&cp);
+ let = getanything(&cp); /* get next letter or whatever */
+ for (i = 0; let != '"'; ++i)
+ { /* get the label phrase */
+ phrase[i] = let;
+ let = getanything(&cp); /* getletter; */
+ }
+ phrase[i] = '\0';
+
+ BackupInBuf(DVIMark() - specstart);
+ cmd1byte(OURFONTFLAG);
+ labelhandle(multifigure, SPscale, x1, y1, 0, 0, style, phrase, 0, 0);
+ }
+ else if (streq(nam, "param", 3))
+ {
+ i = getnumber(&cp); /* addressable param number */
+
+ fprintf(logfile, " I do not know what internal parameter #%ld is\n", i);
+ /* else */
+ BackupInBuf(DVIMark() - specstart);
+ }
+ else
+ {
+ complain(ERRNOTBAD);
+ fprintf(logfile, "Sorry, I don't know how to tyl %s\n", nam);
+ }
+}
+
+static int
+otherspecials(cp)
+ char *cp;
+{
+ fprintf(logfile, "Special: %s\n", cp);
+ return (1);
+}
+
+static void
+mainhandlespecials(specnum, nbytes)
+ int32 specnum, nbytes;
+{
+ /*
+ * specnum is the DVI-number of the special
+ * nbytes is the number of parameter bytes
+ */
+ char sysnam[4];
+ char *cp, *buf;
+ int32 i;
+ char *malloc PP((unsigned));
+ int free PP((char *));
+
+ specstart = DVIMark() - specnum + 237;
+ ourxpos = h;
+ ourypos = v; /* note the global DVI (h,v) coords */
+
+ cp = buf = malloc((unsigned)(nbytes + 1));
+ for (i = 0; i < nbytes; ++i)
+ cp[i] = Dget1byte();
+ cp[i] = '\0';
+
+ while (isspace(*cp))
+ ++cp;
+ /* get the name of the system --- Hopefully 'tyl' */
+ for (i = 0; *cp != '\0' && *cp != ' '; ++cp)
+ if (i < 3)
+ sysnam[i++] = tolowercase(*cp);
+ sysnam[i] = '\0'; /* end of string */
+ if (streq(sysnam, "tyl", 3))
+ tylspecials(cp);
+ else if (otherspecials(buf))
+ ;
+ else
+ fprintf(logfile, "Unknown special ignored: %s\n", buf);
+ free((char *)buf);
+}
+
+/*
+ * ==================================================
+ *
+ * The routines below assume coordinates are already in 4th Quadrant DVI-space
+ *
+ * =====================================================
+ */
+
+/*
+ * returns 0 if dy.dx not in font 1 if ok 2 if ok and caller should use two of the "code"s coding scheme requires 0<= [dx, dy]
+ * <= 16 AND that max(dx, abs(dy)) is in [0,1,2,4,8,16]
+ */
+static int32
+outvector(dx, dy, code)
+ int32 dx, dy, *code;
+{
+ int32 c, result;
+
+ if (dx < 0)
+ return (0);
+
+ result = 0; /* init for potential failure */
+ *code = -1;
+ if (dy < 0)
+ c = dy + dx - max(dx, -dy) * 9 + 160;
+ else
+ c = dy - dx - max(dx, dy) * 7 + 160;
+
+ /*
+ * here translate to OUR coding scheme and return the correct number
+ * this is needed because "c" thinks the char range
+ * is 0 to 160, while we have only 128 chars
+ */
+
+ if (c == 0)
+ { /* special cases */
+ *code = 63;
+ result = 2;
+ }
+ else if (c == 64)
+ {
+ *code = 95;
+ result = 2;
+ }
+ else
+ {
+ result = 1; /* just one char is fine */
+ if (c >= 1 && c <= 63) /* c - 33 */
+ *code = c - 1;
+ else if (c >= 80 && c <= 112)
+ *code = c - 17;
+ else if (c >= 120 && c <= 136)
+ *code = c - 24;
+ else if (c >= 140 && c <= 148)
+ *code = c - 27;
+ else if (c >= 150 && c <= 154)
+ *code = c - 28;
+ else if (c == 160)
+ *code = 127;
+ }
+ return result;
+}
+
+/* take care of a Manhattan (horizontal /vertical) line */
+static void
+hvline(lx, by, rx, ty, fontindex)
+ int32 lx, by, rx, ty, fontindex;
+{
+ int32 t, rth, x, y, width, height;
+
+ rth = VFontTable[fontindex - 1]->PenSize; /* thickness of vector in sp */
+ if (lx == rx)
+ { /* Vertical line */
+ if (ty > by)
+ {
+ t = by;
+ by = ty;
+ ty = t; /* swap */
+ }
+ x = (int32) floor(lx - rth / 2.0 + 0.5);
+ y = by;
+ width = rth;
+ height = by - ty;
+ }
+ else
+ { /* Horizontal line */
+ if (ty < by)
+ {
+ t = by;
+ by = ty;
+ ty = t; /* swap */
+ }
+ if (lx > rx)
+ {
+ t = lx;
+ lx = rx;
+ rx = t; /* swap */
+ }
+ x = lx;
+
+ y = by + rth / 2; /* + rth for {h,v}-space */
+ width = rx - lx;
+ height = rth;
+ }
+
+ isetpos(x, y);
+ cmd1byte(PUTRULE);
+ cmd4byte(height);
+ cmd4byte(width);
+
+ /*
+ * output two dots on ends of the rules at lx, by and rx, ty
+ */
+ /* the font has already been set before these calls */
+ Tyldot(lx, by);
+ Tyldot(rx, ty);
+ isetpos(rx, ty);
+}
+
+
+/* Local variables for diagonal: */
+struct LOC_diagonal
+{
+ int32 xl, yb, xr, yt, curx, cury;
+ double slope;
+ ScaledPts mxveclen;
+};
+
+/* compute maximum length vector character that we can use */
+static void
+getincr(outdx, outdy, LINK)
+ int32 *outdx, *outdy;
+ struct LOC_diagonal *LINK;
+{
+ int32 radius, x, y, sign;
+
+ radius = LINK->mxveclen;/* radius of semi-square */
+ /*
+ * make sure the pt is outside of the semi-square, scaling down radius if necessary
+ */
+ while (LINK->xr - LINK->curx < radius &&
+ abs(LINK->yt - LINK->cury) < radius)
+ radius /= 2;
+ if (LINK->slope < 0.0) /* <0 since in 4th quad by now */
+ sign = -1;
+ else
+ sign = 1;
+ if (LINK->xr == LINK->curx)
+ {
+ *outdx = 0;
+ *outdy = sign * radius;
+ return;
+ }
+ if (LINK->yt == LINK->cury)
+ {
+ *outdx = abs(radius);
+ *outdy = 0;
+ return;
+ }
+
+ /*
+ * compute the intersection with the semi-square, choose whichever slope is best
+ */
+ if (fabs(LINK->slope) < 1.0)
+ { /* mostly horizontal */
+ *outdx = abs(radius);
+ y = LINK->yb +
+ (int32) floor((LINK->curx + abs(radius) - LINK->xl) * LINK->slope + 0.5);
+ *outdy = y - LINK->cury;
+ }
+ else
+ { /* mostly vertical */
+ x = LINK->xl +
+ (int32) floor((LINK->cury + sign * radius - LINK->yb) / LINK->slope + 0.5);
+ *outdx = x - LINK->curx;
+ *outdy = sign * radius;
+ }
+
+ if (abs(*outdy) > abs(LINK->yt - LINK->cury)) /* truncate */
+ *outdy = LINK->yt - LINK->cury;
+ if (*outdx > LINK->xr - LINK->curx) /* truncate */
+ *outdx = LINK->xr - LINK->curx;
+ if (*outdx < 0)
+ *outdx = 0;
+
+ /*
+ * method to find the exact intersection of the line segment with the semi-circle, used to determine the x and y
+ * values:: we do this by using the arctangent of the slope as the angle 'a' from the x-axis. Then use the relation y =
+ * r cos a, and x = r sin a we can be smart about all this trig stuff by using the relation : sin (arctan a) = 1/sqrt(1
+ * + a^2) cos (arctan a) = a/sqrt(1 + a^2) Thus: q := (1.0 / sqrt (slope * slope + 1.0)); outdx := round (q * radius);
+ * outdy := round (q * radius * slope);
+ *
+ * Unfortunately, we cannot access the Vector Font coding scheme because the outdx, outdy 's produced here do no conform
+ * to the condition max (dx, abs(dy)) in [0,1,2,4,8,16] when converted to vector-font sizes with sptovecs (see the
+ * 'diagonal' proc.).
+ */
+}
+
+static void
+diagonal(xl_, yb_, xr_, yt_, fontindex)
+ int32 xl_, yb_, xr_, yt_, fontindex;
+{
+ struct LOC_diagonal V;
+ int32 t, dx, dy, code;
+ double sptovecs;
+ ScaledPts rho;
+
+ V.xl = xl_;
+ V.yb = yb_;
+ V.xr = xr_;
+ V.yt = yt_;
+ if (V.xr != V.xl) /* some illegal value */
+ V.slope = (double) (V.yt - V.yb) / (V.xr - V.xl);
+ else
+ V.slope = BIGREAL;
+
+ if (V.xl > V.xr)
+ {
+ t = V.xl;
+ V.xl = V.xr;
+ V.xr = t;
+ t = V.yb;
+ V.yb = V.yt;
+ V.yt = t;
+ } /* swap */
+
+ V.curx = V.xl;
+ V.cury = V.yb;
+ V.mxveclen = VFontTable[fontindex - 1]->MaxVectLen;
+ rho = V.mxveclen / 16; /* minimum radius of vector fonts */
+ if (rho == 0)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile,
+ "Diagonal: Min radius of vector font is zero. setting to 1\n");
+ rho = 1;
+ }
+
+ if (abs(V.xl - V.xr) <= rho && abs(V.yb - V.yt) <= rho)
+ { /* pretty much a null line */
+ Tyldot(V.xl, V.yb);
+ return;
+ }
+ sptovecs = 1.0 / rho; /* conversion for scaled pts to vectorfont units */
+
+ code = -1; /* initialize to a bogus number */
+
+ /*
+ * this conditional really has to have "or" instead of "and", because of lines that are nearly* horizontal or vertical
+ */
+ while (V.xr - V.curx >= rho || abs(V.yt - V.cury) >= rho)
+ {
+ getincr(&dx, &dy, &V);
+
+ /*
+ * Get the vector character code corresponding to this approximate incremental amount
+ */
+ t = outvector((int32) floor(dx * sptovecs + 0.5),
+ (int32) floor(dy * sptovecs + 0.5), &code);
+ /*
+ * Now that we have the character code, go find out its actual physical dimensions for the real dy/dx amounts
+ */
+ if (dy > 0)
+ dy = VFontTable[fontindex - 1]->FontInfo[code].Cdp;
+ else
+ dy = -VFontTable[fontindex - 1]->FontInfo[code].Cht;
+
+ dx = VFontTable[fontindex - 1]->FontInfo[code].Cwd;
+
+ switch (t)
+ {
+
+ case 0:
+ complain(ERRREALBAD);
+ fprintf(logfile, "Error in Diagonal:: bad dydx\n");
+ break;
+
+ case 1:
+ isetpos(V.curx, V.cury);
+ iputchar(code);
+ break;
+
+ case 2:
+ isetpos(V.curx, V.cury);
+ iputchar(code);
+ isetpos(V.curx + dx / 2, V.cury + dy / 2);
+ iputchar(code);
+ break;
+ } /* case */
+
+ V.curx += dx;
+ V.cury += dy;
+ } /* while */
+ /*
+ * Get the approximate incremental amount. We use this dy/dx pair in order to index into our vector font coding scheme
+ */
+
+
+ if (code >= 0 && V.xr - V.curx >= rho && abs(V.yt - V.cury) >= rho)
+ iputchar(code);
+
+ /* not null line */
+}
+
+
+/* Local variables for tylBrokenLine: */
+struct LOC_tylBrokenLine
+{
+ int32 fontindex;
+ LineStyle line_type;
+ int useXaxis;
+ int32 a0, b0, a1, b1, a2, a3, b2, b3, gap, dot, dash;
+ double s, z;
+ int32 J, frame, Dotgap, Dotdot, Dashgap, Dashdash, DDotgap, DDotdot, DDotdash;
+};
+
+static void
+spread(lt, extra, T, LINK)
+ LineStyle lt;
+ int32 extra, T;
+ struct LOC_tylBrokenLine *LINK;
+{
+ if (T == 0)
+ { /* only partial frame fits */
+ if (LINK->useXaxis)
+ diagonal(LINK->a0, LINK->b0, LINK->a1, LINK->b1, LINK->fontindex);
+ else
+ diagonal(LINK->b0, LINK->a0, LINK->b1, LINK->a1, LINK->fontindex);
+ return;
+ }
+ LINK->J = 0;
+ LINK->s = float_(LINK->b1 - LINK->b0) / float_(LINK->a1 - LINK->a0);
+ LINK->z = float_(extra) / float_(T);
+ switch (lt)
+ {
+
+ case dotted:
+ do
+ {
+ LINK->a2 = LINK->a0 + LINK->J * LINK->frame;
+ if (extra > 0)
+ LINK->a2 += (int32) floor(LINK->J * LINK->z + 0.5);
+ LINK->a3 = LINK->a2 + LINK->dot;
+ LINK->b2 = (int32) floor(LINK->s * (LINK->a2 - LINK->a0) + LINK->b0 + 0.5);
+ LINK->b3 = (int32) floor(LINK->s * (LINK->a3 - LINK->a0) + LINK->b0 + 0.5);
+ if (LINK->a3 <= LINK->a1)
+ {
+ if (LINK->useXaxis)
+ diagonal(LINK->a2, LINK->b2, LINK->a3, LINK->b3, LINK->fontindex);
+ else
+ diagonal(LINK->b2, LINK->a2, LINK->b3, LINK->a3, LINK->fontindex);
+ }
+ LINK->J++;
+ } while (LINK->a3 < LINK->a1);
+ break;
+
+ case dashed:
+ do
+ {
+ LINK->a2 = LINK->a0 + LINK->J * LINK->frame;
+ if (extra > 0)
+ LINK->a2 += (int32) floor(LINK->J * LINK->z + 0.5);
+ LINK->a3 = LINK->a2 + LINK->dash;
+ LINK->b2 = (int32) floor(LINK->s * (LINK->a2 - LINK->a0) + LINK->b0 + 0.5);
+ LINK->b3 = (int32) floor(LINK->s * (LINK->a3 - LINK->a0) + LINK->b0 + 0.5);
+ if (LINK->a3 <= LINK->a1)
+ {
+ if (LINK->useXaxis)
+ diagonal(LINK->a2, LINK->b2, LINK->a3, LINK->b3, LINK->fontindex);
+ else
+ diagonal(LINK->b2, LINK->a2, LINK->b3, LINK->a3, LINK->fontindex);
+ }
+ LINK->J++;
+ } while (LINK->a3 < LINK->a1);
+ break;
+
+ case dotdash:
+ do
+ {
+ LINK->a2 = LINK->a0 + LINK->J * LINK->frame;
+ if (extra > 0)
+ LINK->a2 += (int32) floor(LINK->J * LINK->z + 0.5);
+ LINK->a3 = LINK->a2 + LINK->dash;
+ LINK->b2 = (int32) floor(LINK->s * (LINK->a2 - LINK->a0) + LINK->b0 + 0.5);
+ LINK->b3 = (int32) floor(LINK->s * (LINK->a3 - LINK->a0) + LINK->b0 + 0.5);
+ if (LINK->a3 <= LINK->a1)
+ {
+ if (LINK->useXaxis)
+ diagonal(LINK->a2, LINK->b2, LINK->a3, LINK->b3, LINK->fontindex);
+ else
+ diagonal(LINK->b2, LINK->a2, LINK->b3, LINK->a3, LINK->fontindex);
+ LINK->a2 = LINK->a3 + LINK->gap;
+ if (extra > 0)
+ LINK->a2 += (int32) floor(LINK->z * 0.5 + 0.5);
+ LINK->a3 = LINK->a2 + LINK->dot;
+ LINK->b2 = (int32) floor(LINK->s * (LINK->a2 - LINK->a0) + LINK->b0 + 0.5);
+ LINK->b3 = (int32) floor(LINK->s * (LINK->a3 - LINK->a0) + LINK->b0 + 0.5);
+ if (LINK->a3 <= LINK->a1)
+ {
+ if (LINK->useXaxis)
+ diagonal(LINK->a2, LINK->b2, LINK->a3, LINK->b3, LINK->fontindex);
+ else
+ diagonal(LINK->b2, LINK->a2, LINK->b3, LINK->a3, LINK->fontindex);
+ }
+ }
+ LINK->J++;
+ } while (LINK->a3 < LINK->a1);
+ break;
+ }
+} /* spread */
+
+static void
+balance(lt, extra, T, LINK)
+ LineStyle lt;
+ int32 extra, T;
+ struct LOC_tylBrokenLine *LINK;
+{
+ if (T == 0)
+ { /* only partial frame fits */
+ if (LINK->useXaxis)
+ diagonal(LINK->a0, LINK->b0, LINK->a1, LINK->b1, LINK->fontindex);
+ else
+ diagonal(LINK->b0, LINK->a0, LINK->b1, LINK->a1, LINK->fontindex);
+ return;
+ }
+ LINK->J = 0;
+ LINK->s = float_(LINK->b1 - LINK->b0) / float_(LINK->a1 - LINK->a0);
+ switch (lt)
+ {
+
+ case dashed:
+ do
+ {
+ LINK->a2 = LINK->a0 + LINK->J * LINK->frame - extra / 2;
+ LINK->a3 = LINK->a2 + LINK->dash;
+ if (LINK->J == 0)
+ LINK->a2 = LINK->a0;
+ if (LINK->a3 > LINK->a1)
+ LINK->a3 = LINK->a1;
+ LINK->b2 = (int32) floor(LINK->s * (LINK->a2 - LINK->a0) + LINK->b0 + 0.5);
+ LINK->b3 = (int32) floor(LINK->s * (LINK->a3 - LINK->a0) + LINK->b0 + 0.5);
+ if (LINK->a3 <= LINK->a1)
+ {
+ if (LINK->useXaxis)
+ diagonal(LINK->a2, LINK->b2, LINK->a3, LINK->b3, LINK->fontindex);
+ else
+ diagonal(LINK->b2, LINK->a2, LINK->b3, LINK->a3, LINK->fontindex);
+ }
+ LINK->J++;
+ } while (LINK->a3 < LINK->a1);
+ break;
+
+ case dotdash:
+ do
+ {
+ LINK->a2 = LINK->a0 + LINK->J * LINK->frame - extra / 2;
+ LINK->a3 = LINK->a2 + LINK->dash;
+ if (LINK->J == 0)
+ LINK->a2 = LINK->a0;
+ if (LINK->a3 > LINK->a1)
+ LINK->a3 = LINK->a1;
+ LINK->b2 = (int32) floor(LINK->s * (LINK->a2 - LINK->a0) + LINK->b0 + 0.5);
+ LINK->b3 = (int32) floor(LINK->s * (LINK->a3 - LINK->a0) + LINK->b0 + 0.5);
+ if (LINK->a3 <= LINK->a1)
+ {
+ if (LINK->useXaxis)
+ diagonal(LINK->a2, LINK->b2, LINK->a3, LINK->b3, LINK->fontindex);
+ else
+ diagonal(LINK->b2, LINK->a2, LINK->b3, LINK->a3, LINK->fontindex);
+ LINK->a2 = LINK->a3 + LINK->gap;
+ LINK->a3 = LINK->a2 + LINK->dot;
+ LINK->b2 = (int32) floor(LINK->s * (LINK->a2 - LINK->a0) + LINK->b0 + 0.5);
+ LINK->b3 = (int32) floor(LINK->s * (LINK->a3 - LINK->a0) + LINK->b0 + 0.5);
+ if (LINK->a3 <= LINK->a1)
+ {
+ if (LINK->useXaxis)
+ diagonal(LINK->a2, LINK->b2, LINK->a3, LINK->b3, LINK->fontindex);
+ else
+ diagonal(LINK->b2, LINK->a2, LINK->b3, LINK->a3, LINK->fontindex);
+ }
+ }
+ LINK->J++;
+ } while (LINK->a3 < LINK->a1);
+ break;
+ }
+} /* balance */
+
+static int32
+project(I, LINK)
+ int32 I;
+ struct LOC_tylBrokenLine *LINK;
+{
+ int32 K; /* gives the projection of lengths onto axes */
+
+ K = (int32) floor(I * float_(abs(LINK->a1 - LINK->a0)) / LINK->s + 0.5);
+ if (K == 0)
+ K = 1;
+ return K;
+}
+
+static void
+setlengths(findex, LINK)
+ int32 findex;
+ struct LOC_tylBrokenLine *LINK;
+{
+ /* sets the "optimal" sizes for textured lines */
+ int32 penrad;
+ VThickness siz;
+
+ penrad = VFontTable[findex - 1]->PenSize;
+ siz = VFontTable[findex - 1]->psize;
+
+ LINK->Dotdot = penrad / siz;
+ LINK->Dotgap = penrad * 6;
+ LINK->Dashdash = penrad * 6;
+ LINK->Dashgap = penrad * 6;
+ LINK->DDotdash = penrad * 6;
+ LINK->DDotgap = penrad * 4;
+ LINK->DDotdot = penrad / siz;
+}
+
+static void
+setframesize(LINK)
+ struct LOC_tylBrokenLine *LINK;
+{
+ switch (LINK->line_type)
+ {
+ /* length of frame depends on type of broken line */
+ case solid:
+ LINK->frame = 0;
+ break;
+ case dotted:
+ LINK->frame = LINK->gap + LINK->dot;
+ break;
+ case dashed:
+ LINK->frame = LINK->gap + LINK->dash;
+ break;
+ case dotdash:
+ LINK->frame = LINK->gap * 2 + LINK->dot + LINK->dash;
+ break;
+ }
+}
+
+static void
+tylBrokenLine(x0, y0, x1, y1, fontindex_, line_type_)
+ int32 x0, y0, x1, y1, fontindex_;
+ LineStyle line_type_;
+{
+ struct LOC_tylBrokenLine V;
+ double fit;
+ int32 T, a1ma0;
+
+ V.fontindex = fontindex_;
+ V.line_type = line_type_;
+ if (x0 == x1 && y0 == y1)
+ {
+ diagonal(x0, y0, x1, y1, V.fontindex); /* null line */
+ return;
+ }
+
+ setlengths(V.fontindex, &V);
+
+ if (abs(y1 - y0) > abs(x1 - x0))
+ { /* longer axis is used as base */
+ V.useXaxis = false;
+ V.a0 = y0;
+ V.b0 = x0;
+ V.a1 = y1;
+ V.b1 = x1;
+ }
+ else
+ {
+ V.useXaxis = true;
+ V.a0 = x0;
+ V.b0 = y0;
+ V.a1 = x1;
+ V.b1 = y1;
+ }
+ /* the distance between a0 and a1 is now greater than that between b0 and b1. */
+
+ /* redefine distances as integral units along axes */
+ V.s = distance(float_(V.a0), float_(V.b0), float_(V.a1), float_(V.b1));
+
+ switch (V.line_type)
+ {
+
+ case solid:
+ /* blank case */
+ break;
+ case dotted:
+ V.gap = project(V.Dotgap, &V);
+ V.dot = project(V.Dotdot, &V);
+ break;
+ case dashed:
+ V.gap = project(V.Dashgap, &V);
+ V.dash = project(V.Dashdash, &V);
+ break;
+ case dotdash:
+ V.gap = project(V.DDotgap, &V);
+ V.dot = project(V.DDotdot, &V);
+ V.dash = project(V.DDotdash, &V);
+ break;
+ }
+
+ /*
+ * ensure direction of line is from smaller to larger along the longer axis
+ */
+ if (V.a0 > V.a1)
+ {
+ V.J = V.a0;
+ V.a0 = V.a1;
+ V.a1 = V.J;
+ V.J = V.b0;
+ V.b0 = V.b1;
+ V.b1 = V.J;
+ }
+
+ setframesize(&V);
+
+ a1ma0 = V.a1 - V.a0;
+
+ /* fit is the number of frames that fit in line */
+ if (V.frame != 0)
+ fit = float_(a1ma0) / float_(V.frame);
+ else
+ fit = 1.0;
+
+ if (fit >= 1.0)
+ T = (int32) floor(fit + 0.5);
+ else
+ {
+ /* change frame elements (dot, dash, gap) since frame is too large */
+ switch (V.line_type)
+ {
+
+ case dotted:
+ V.gap += a1ma0 - V.frame;
+ if (V.gap < V.dot)
+ return; /* exit */
+ setframesize(&V);
+ break;
+
+ case dashed:
+ case dotdash:
+ /* idea:decrease gap; if too small then shrink dash and refigure gap */
+ if (V.frame - a1ma0 > V.gap / 2)
+ {
+ V.dash = (int32) floor(V.dash * fit * 0.80 + 0.5);
+ V.gap = (int32) floor(V.gap * fit + 0.5);
+ setframesize(&V);
+ }
+ V.gap += a1ma0 - V.frame;
+ if (V.line_type == dotdash)
+ V.gap /= 2;
+ if (V.gap < V.dot)
+ return; /* exit */
+ setframesize(&V);
+ break;
+ } /* case */
+ T = 1; /* NOW it will fit */
+ } /* else */
+
+
+ switch (V.line_type)
+ {
+ case solid:
+ if (V.useXaxis)
+ diagonal(V.a0, V.b0, V.a1, V.b1, V.fontindex);
+ else
+ diagonal(V.b0, V.a0, V.b1, V.a1, V.fontindex);
+ break;
+ case dotted: /* dotted lines begin and end on a dot */
+ if (T * V.frame + V.dot == a1ma0)
+ spread(dotted, 0, T, &V);
+ else if (T * V.frame + V.dot > a1ma0)
+ {
+ /*
+ * gap := gap - ((T*frame+dot)-a1ma0); {
+ */
+ spread(dotted, a1ma0 - T * V.frame - V.dot, T, &V);
+
+ /*
+ * spread(dotted, a1ma0 - (T-1)*frame - dot, T-1); {
+ */
+ }
+ else
+ spread(dotted, a1ma0 - T * V.frame - V.dot, T, &V);
+ break;
+ case dashed:
+ /*
+ * dashed lines begin and end on dash : the beginning and ending dashes are at least half the dash length
+ * int32.
+ */
+ if (T * V.frame + V.dash == a1ma0)
+ spread(dashed, 0, T, &V);
+ else if (T * V.frame + V.dash > a1ma0)
+ balance(dashed, T * V.frame + V.dash - a1ma0, T, &V);
+ else
+ spread(dashed, a1ma0 - T * V.frame - V.dash, T, &V);
+ break;
+ case dotdash:
+ /*
+ * if ending on a dash then beginning and ending dashes are half the dash length long - final dots are full
+ * dot length
+ */
+ if (T * V.frame + V.dash == a1ma0)
+ spread(dotdash, 0, T, &V);
+ else if (T * V.frame + V.dash + V.gap + V.dot == a1ma0)
+ spread(dotdash, 0, T, &V);
+ else if (T * V.frame + V.dash > a1ma0)
+ balance(dotdash, T * V.frame + V.dash - a1ma0, T, &V);
+ else if (T * V.frame + V.dash + V.gap + V.dot > a1ma0)
+ spread(dotdash, a1ma0 - T * V.frame - V.dash, T, &V);
+ else
+ spread(dotdash, a1ma0 - T * V.frame - V.dash - V.gap - V.dot, T, &V);
+ break;
+ }
+}
+
+void
+clampthickness(thic)
+ VThickness *thic;
+{
+ /*
+ * #### this is just a simple clamp really should be something like: while not (thic in set_of_appropriate_thicknesses)
+ * do modify thic and try again
+ */
+ if (*thic <= LoVThick)
+ *thic = LoVThick + 1;
+ while (((1 << (*thic)) & 0x1ffe) == 0 && *thic <= HiVThick)
+ (*thic)++;
+ if (*thic > HiVThick)
+ *thic = HiVThick;
+}
+
+static void
+slurclamp(thic, totpts)
+ VThickness *thic;
+ int32 totpts;
+{
+ /*
+ * this post-clamps the sampled thicknesses calculated over the whole of the spline
+ */
+ int32 i, oneseventh, middle, startval, endval;
+ double deltaval, val, incrval, alpha, alphaincr;
+
+ /*
+ * $$ NOTE:: How does the ttspline interpolation of thicknesses compare to the below results?? Can we avoid having it
+ * done elsewhere and concentrate on it here??
+ */
+
+ oneseventh = (int32) floor(totpts / 7.0 + 0.5);
+ for (i = 1; i <= oneseventh; i++)
+ thic[i] = thic[1];
+ for (i = oneseventh * 6; i <= totpts; i++)
+ thic[i] = thic[totpts];
+
+ middle = (int32) floor(totpts / 2.0 + 0.5);
+ for (i = oneseventh * 3; i <= oneseventh * 4; i++)
+ thic[i] = thic[middle];
+
+ startval = thic[oneseventh - 1];
+ endval = thic[oneseventh * 3 + 1];
+ deltaval = (endval - startval) * 2.0 / (oneseventh * 2);
+ alphaincr = PI / (oneseventh * 2 + 1);
+ alpha = PI;
+ val = float_(startval);
+ for (i = oneseventh; i < oneseventh * 3; i++)
+ { /* interpolate: ease in from minthick to middlethickness */
+ alpha += alphaincr;
+ incrval = (cos(alpha) + 1.0) / 2.0 * deltaval;
+ val += incrval;
+ thic[i] = (int32) floor(val + 0.5);
+ }
+
+ startval = thic[oneseventh * 4 - 1];
+ endval = thic[oneseventh * 6 + 1];
+ deltaval = (endval - startval) * 2.0 / (oneseventh * 2);
+ alphaincr = PI / (oneseventh * 2 + 1);
+ alpha = 0.0;
+ val = float_(startval);
+ for (i = oneseventh * 4 + 1; i <= oneseventh * 6; i++)
+ { /* ease out from middle thickness to min thick at far end */
+ alpha += alphaincr;
+ incrval = (cos(alpha) + 1.0) / 2.0 * deltaval;
+ val += incrval;
+ thic[i] = (int32) floor(val + 0.5);
+ }
+}
+
+void
+layline(xl, yb, xr, yt, fontindex, pattern, useVecfontOnly)
+ int32 xl, yb, xr, yt, fontindex;
+ LineStyle pattern;
+ int useVecfontOnly;
+{
+ int32 t;
+
+ if (xr < xl)
+ {
+ t = xr;
+ xr = xl;
+ xl = t;
+ t = yb;
+ yb = yt;
+ yt = t;
+ }
+
+ isetfont(VFontTable[fontindex - 1]->DVIFontNum);
+
+ /*
+ * we may want to require using a vector font only, instead of a combination of vectors and TeX-rules. It may look
+ * better this way.
+ */
+ if (useVecfontOnly)
+ {
+ tylBrokenLine(xl, yb, xr, yt, fontindex, pattern);
+ return;
+ }
+
+ if ((xl != xr || yb != yt) && (xl == xr || yb == yt))
+ { /* Null or diagonal lines */
+ /*
+ * if (pattern = solid) then hvline (xl, yb, xr, yt, fontindex) (* make use of rules *) else USENORULES
+ */
+ tylBrokenLine(xl, yb, xr, yt, fontindex, pattern);
+ return;
+ }
+ if (pattern == solid)
+ diagonal(xl, yb, xr, yt, fontindex);
+ else
+ tylBrokenLine(xl, yb, xr, yt, fontindex, pattern);
+ /* be smart about the lines */
+}
+
+
+#define DontDoThicks false
+#define VectorsOnly true
+
+/* Local variables for layAspline: */
+struct LOC_layAspline
+{
+ VThickness thick;
+};
+
+void
+layAspline(thetype, isclosed, isanArc, domarks, cpts, numpts,
+ thick_, vkind, patt)
+ SplineKind thetype;
+ int isclosed, isanArc;
+ int32 domarks;
+int32(*cpts)[2];
+ int32 numpts;
+ VThickness thick_;
+ VectKind vkind;
+ LineStyle patt;
+{
+ struct LOC_layAspline V;
+ SplineSegments pointList;
+ int32 i, xs, ys;
+ ThickAryType tt1, tt2;
+ VecIndex F;
+ int32 FORLIM;
+
+ V.thick = thick_;
+ clampthickness(&V.thick);
+ for (i = 0; i <= numpts + 3; i++)
+ tt1[i] = V.thick;
+
+ /* do any marks if necessary to show the control points */
+ if (domarks > 0)
+ {
+ F = GetVectFont((int) domarks, VKCirc);
+ isetfont(VFontTable[F - 1]->DVIFontNum);
+ for (i = 1; i <= numpts; i++)
+ Tyldot(cpts[i][0], cpts[i][1]);
+ }
+
+ drawSpline(thetype, isclosed, isanArc, patt, numpts, cpts, pointList,
+ DontDoThicks, tt1, tt2);
+
+
+ F = GetVectFont(V.thick, vkind);
+ xs = pointList[0][0];
+ ys = pointList[0][1];
+
+ FORLIM = lastPoint;
+ for (i = 1; i < FORLIM; i++)
+ {
+ layline(xs, ys, pointList[i][0], pointList[i][1], F, patt, VectorsOnly);
+ xs = pointList[i][0];
+ ys = pointList[i][1];
+ }
+ if (isclosed) /* complete the motion */
+ layline(pointList[lastPoint - 1][0], pointList[lastPoint - 1]
+ [1], pointList[0][0], pointList[0][1], F, patt, VectorsOnly);
+}
+
+#define NotAnArc false
+#define DoThicksToo true
+#define VectorsOnly true
+
+void
+layNspline(thetype, isclosed, isitaslur, domarks, cpts, numpts,
+ thickmatrix, vkind, patt)
+ SplineKind thetype;
+ int isclosed, isitaslur;
+ int32 domarks;
+int32(*cpts)[2];
+ int32 numpts;
+ VThickness *thickmatrix;
+ VectKind vkind;
+ LineStyle patt;
+{
+ SplineSegments pointList;
+ int32 i, xs, ys;
+ VThickness ts;
+ ThickAryType tt;
+ VecIndex F;
+ int32 FORLIM;
+
+ /* do any marks if necessary to show the control points */
+ if (domarks > 0)
+ {
+ F = GetVectFont((int) domarks, VKCirc);
+ isetfont(VFontTable[F - 1]->DVIFontNum);
+ for (i = 1; i <= numpts; i++)
+ Tyldot(cpts[i][0], cpts[i][1]);
+ }
+
+ drawSpline(thetype, isclosed, NotAnArc, patt, numpts, cpts, pointList,
+ DoThicksToo, thickmatrix, tt);
+ if (isitaslur && !skiptsclamp)
+ slurclamp(tt, lastPoint); /* which kind of clamping to use */
+
+ xs = pointList[0][0];
+ ys = pointList[0][1];
+ ts = tt[1];
+
+ FORLIM = lastPoint;
+ for (i = 1; i < FORLIM; i++)
+ {
+ clampthickness(&ts);
+ F = GetVectFont(ts, vkind);
+ layline(xs, ys, pointList[i][0], pointList[i][1], F, patt, VectorsOnly);
+ xs = pointList[i][0];
+ ys = pointList[i][1];
+ ts = tt[i + 1];
+ }
+ if (!isclosed)
+ return;
+ ts = tt[lastPoint];
+ clampthickness(&ts);
+ F = GetVectFont(ts, vkind);
+ layline(pointList[lastPoint - 1][0], pointList[lastPoint - 1]
+ [1], pointList[0][0], pointList[0][1], F, patt, VectorsOnly);
+}
+
+/* && start dvidvi section */
+/*-----------------------------------------------------*/
+static void
+initialize()
+{
+ initVnMnLtables();
+ multifigure = 0;
+ pgfigurenum = 0;
+ TotBytesWritten = 0;
+ ourq = 0;
+ currpagenum = 0;
+ FTBDs = 0;
+ InitDVIBuf();
+ inpostamble = false;
+ didnewfonts = false;
+ skiptsclamp = false;
+ ErrorOccurred = false;
+}
+
+/*-----------------------------------------------------*/
+static int
+inTFM(z)
+ int32 z;
+{
+ int32 k, lh, nw, alpha, beta, FORLIM;
+ fontinfo *WITH;
+
+ readtfmword();
+ lh = b2 * 256 + b3;
+ readtfmword();
+ font[nf].bc = b0 * 256 + b1;
+ font[nf].ec = b2 * 256 + b3;
+ if (font[nf].ec < font[nf].bc)
+ font[nf].bc = font[nf].ec + 1;
+ readtfmword();
+ nw = b0 * 256 + b1;
+ if (nw == 0 || nw > 256)
+ return (false);
+ for (k = 1; k <= lh + 3; k++)
+ {
+ if (feof(tfmfile))
+ return (false);
+ readtfmword();
+ if (k == 4)
+ {
+ if (b0 < 128)
+ tfmchecksum = ((b0 * 256 + b1) * 256 + b2) * 256 + b3;
+ else
+ tfmchecksum = (((b0 - 256) * 256 + b1) * 256 + b2) * 256 + b3;
+ }
+ }
+
+ FORLIM = font[nf].ec - font[nf].bc;
+ for (k = 0; k <= FORLIM; k++)
+ {
+ readtfmword();
+ if (b0 > nw)
+ return (false);
+ font[nf].widths[k] = b0;
+ }
+ alpha = z * 16;
+ beta = 16;
+ while (z >= TWO23)
+ {
+ z /= 2;
+ beta /= 2;
+ }
+ for (k = 0; k < nw; k++)
+ {
+ readtfmword();
+ inwidth[k] = ((b3 * z / 256 + b2 * z) / 256 + b1 * z) / beta;
+ if (b0 > 0)
+ {
+ if (b0 < 255)
+ return (false);
+ inwidth[k] -= alpha;
+ }
+ }
+ if (inwidth[0] != 0)
+ return (false);
+ WITH = &font[nf]; /* with */
+ FORLIM = WITH->ec - WITH->bc;
+ for (k = 0; k <= FORLIM; k++)
+ {
+ if (WITH->widths[k] == 0)
+ {
+ WITH->widths[k + WITH->bc] = TWO31;
+ /* pixelwidths[k + bc] := 0; */
+ }
+ else
+ {
+ WITH->widths[k + WITH->bc] = inwidth[WITH->widths[k]];
+ /* pixelwidths[k + bc] := round(conv * widths[k]); */
+ }
+ }
+ return (true);
+}
+
+static void
+Fastdefinefont(fn)
+ int32 fn;
+{
+ int32 p, k, n;
+
+ (void) Dsign4byte();
+ (void) Dsign4byte();
+ (void) Dsign4byte();
+ p = Dget1byte();
+ n = Dget1byte();
+ for (k = 1; k <= p + n; k++)
+ (void) Dget1byte();
+} /* Fastdefinefont */
+
+static void
+definefont(e)
+ int32 e;
+{
+ char f;
+ int32 p, k, n, c, q, d;
+ charstring tfmname;
+
+ if (nf == MAXFONTS)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "TeXtyl capacity exceeded (max fonts=%d)!\n",
+ MAXFONTS);
+ jumpout();
+ }
+ font[nf].num = e;
+ f = 0;
+ while (font[f].num != e)/* find first occurrence */
+ f++;
+ c = Dsign4byte();
+ font[nf].checksum = c;
+ q = Dsign4byte();
+ font[nf].scaledsize = q;
+ d = Dsign4byte();
+ font[nf].designsize = d;
+ p = Dget1byte();
+ n = Dget1byte();
+ for (k = 0; k < p + n; k++)
+ font[nf].name[k] = Dget1byte();
+ font[nf].name[k] = '\0';
+
+ if (f != nf) /* f = nf */
+ return;
+
+ strcpy(tfmname, font[nf].name);
+ strcat(tfmname, ".tfm");
+
+ if (!opentfmfile(tfmname))
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "%s---not loaded, TFM file can't be opened!\n", tfmname);
+ jumpout();
+ return;
+ }
+ if (q <= 0 || q >= TWO27)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "%s---not loaded, bad scale (%d)!\n", tfmname, q);
+ return;
+ }
+ if (d <= 0 || d >= TWO27)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "%s---not loaded, bad design size (%d)!\n", tfmname, d);
+ return;
+ }
+ if (!inTFM(q))
+ { /* intfm */
+ complain(ERRREALBAD);
+ fprintf(logfile, "%s---not loaded, TFM file is bad\n", tfmname);
+ return;
+ } /* intfm */
+ font[nf].space = q / 6;
+ if (c != 0 && tfmchecksum != 0 && c != tfmchecksum)
+ {
+ fprintf(logfile, "Problem in fig#%d on page %d\n",
+ pgfigurenum, currpagenum);
+ fprintf(logfile, "%s---beware: check sums do not agree!\n", tfmname);
+ fprintf(logfile, " (%d vs. %d)\n", c, tfmchecksum);
+ }
+ d = (int32) floor(100.0 * conv * q / (trueconv * d) + 0.5);
+ nf++;
+ font[nf].space = 0;
+}
+
+static int32
+firstpar(o)
+ int o;
+{
+ int32 fpar;
+
+ if (0 <= o && o <= 127)
+ fpar = o;
+ else if (171 <= o && o <= 234)
+ fpar = o - 171;
+ else
+ switch (o)
+ {
+ case 128:
+ case 133:
+ case 235:
+ case 239:
+ case 243:
+ fpar = Dget1byte();
+ break;
+ case 129:
+ case 134:
+ case 236:
+ case 240:
+ case 244:
+ fpar = Dget2byte();
+ break;
+ case 130:
+ case 135:
+ case 237:
+ case 241:
+ case 245:
+ fpar = Dget3byte();
+ break;
+ case 143:
+ case 148:
+ case 153:
+ case 157:
+ case 162:
+ case 167:
+ fpar = Dsign1byte();
+ break;
+ case 144:
+ case 149:
+ case 154:
+ case 158:
+ case 163:
+ case 168:
+ fpar = Dsign2byte();
+ break;
+ case 145:
+ case 150:
+ case 155:
+ case 159:
+ case 164:
+ case 169:
+ fpar = Dsign3byte();
+ break;
+ case 131:
+ case 132:
+ case 136:
+ case 137:
+ case 146:
+ case 151:
+ case 156:
+ case 160:
+ case 165:
+ case 170:
+ case 238:
+ case 242:
+ case 246:
+ fpar = Dsign4byte();
+ break;
+ case 138:
+ case 139:
+ case 140:
+ case 141:
+ case 142:
+ case 247:
+ case 248:
+ case 249:
+ case 250:
+ case 251:
+ case 252:
+ case 253:
+ case 254:
+ case 255:
+ fpar = 0;
+ break;
+ case 147:
+ fpar = w;
+ break;
+ case 152:
+ fpar = x;
+ break;
+ case 161:
+ fpar = y;
+ break;
+ case 166:
+ fpar = z;
+ break;
+ }
+ return fpar;
+}
+
+static int
+specialcases(o, p)
+ int32 o, p;
+{
+ if (o < 157 || o > 249)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "undefined command %d!\n", o);
+ return (true);
+ }
+ else if (171 <= o && o <= 238)
+ {
+ font[nf].num = p;
+ curfont = 0;
+ while (font[curfont].num != p)
+ curfont++;
+ return (true);
+ }
+ switch (o)
+ {
+ case 157:
+ case 158:
+ case 159:
+ case 160:
+ break;
+ case 161:
+ case 162:
+ case 163:
+ case 164:
+ case 165:
+ y = p;
+ break;
+ case 166:
+ case 167:
+ case 168:
+ case 169:
+ case 170:
+ z = p;
+ break;
+ case 243:
+ case 244:
+ case 245:
+ case 246:
+ definefont(p);
+ return (true);
+ case 239:
+ case 240:
+ case 241:
+ case 242: /* =========specials============= */
+ mainhandlespecials(o, p);
+ return (true);
+ case 247:
+ complain(ERRREALBAD);
+ fprintf(logfile, "preamble command within a page!\n");
+ return (false);
+ case 248:
+ case 249:
+ complain(ERRREALBAD);
+ fprintf(logfile, "postamble command within a page!\n");
+ return (false);
+ }
+ if (v > 0 && p > 0)
+ {
+ if (v > TWO31 - p)
+ p = TWO31 - v;
+ }
+ if (v < 0 && p < 0)
+ {
+ if (-v > p + TWO31)
+ p = -v - TWO31;
+ }
+ v += p;
+ return (true);
+}
+
+static int
+dopage()
+{
+ int32 o, p, q;
+ struct stackrec *WITH;
+
+ curfont = nf;
+ s = 0;
+ h = 0;
+ v = 0;
+ w = 0;
+ x = 0;
+ y = 0;
+ z = 0;
+
+ ourxpos = 0;
+ ourypos = 0;
+ ourfontnum = -1;
+ for (;;)
+ {
+ o = Dget1byte();
+ p = firstpar(o);
+ if (feof(dvifile))
+ {
+ fprintf(logfile, "Bad DVI file: the file ended prematurely!\n");
+ jumpout();
+ }
+ if (o <= 131)
+ goto _L41;
+ if (o > 156)
+ {
+ if (specialcases(o, p))
+ continue;
+ else
+ return (false);
+ }
+
+ switch (o)
+ {
+ case 133:
+ case 134:
+ case 135:
+ case 136:
+ goto _L41;
+ break;
+ case 132:
+ case 137:
+ goto _L42;
+ break;
+ case 138:
+ continue;
+ case 139: /* BOP */
+ complain(ERRREALBAD);
+ fprintf(logfile, "bop occurred before eop\n");
+ return (false); /* Fail */
+ break;
+ case 140: /* EOP */
+ if (s != 0)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "stack not empty at end of page (level %d)!\n", s);
+ }
+ if (multifigure != 0)
+ {
+ complain(ERRBAD);
+ fprintf(logfile,
+ "Some figure definition not closed at end of page %d!\n",
+ currpagenum);
+ }
+ fprintf(logfile, "%d]", currpagenum);
+ if (currpagenum % 10 == 0)
+ putc('\n', logfile);
+ return (true);
+ case 141: /* PUSH */
+ WITH = &stack[s]; /* with */
+ WITH->sh = h;
+ WITH->sv = v;
+ WITH->sw = w;
+ WITH->sx = x;
+ WITH->sy = y;
+ WITH->sz = z;
+ s++;
+ continue;
+ case 142: /* POP */
+ if (s == 0)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "illegal pop at level zero!\n");
+ }
+ else
+ {
+ s--;
+ WITH = &stack[s];
+ h = WITH->sh;
+ v = WITH->sv;
+ w = WITH->sw;
+ x = WITH->sx;
+ y = WITH->sy;
+ z = WITH->sz;
+ }
+ continue;
+ case 143:
+ case 144:
+ case 145:
+ case 146:
+ q = p;
+ goto _L43;
+ break;
+ case 147:
+ case 148:
+ case 149:
+ case 150:
+ case 151:
+ w = p;
+ q = p;
+ goto _L43;
+ break;
+ case 152:
+ case 153:
+ case 154:
+ case 155:
+ case 156:
+ x = p;
+ q = p;
+ goto _L43;
+ break;
+ } /* case */
+_L41: /* finish cmd to set/put a char */
+ if (p < 0)
+ p = 255 - ((-p - 1) & 255);
+ else if (p >= 256)
+ p &= 255;
+ if (p < font[curfont].bc || p > font[curfont].ec)
+ q = TWO31;
+ else
+ q = font[curfont].widths[p];
+ if (q == TWO31)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "Character %d invalid in font #%d\n", p, curfont);
+ }
+ if (o >= 133)
+ continue;
+ if (q == TWO31)
+ q = 0;
+ goto _L43;
+_L42: /* finish cmd to set/put rule */
+ q = Dsign4byte();
+ if (o == 137)
+ continue;
+ goto _L43;
+_L43: /* finish cmd that sets h += q */
+ if (h > 0 && q > 0)
+ {
+ if (h > TWO31 - q)
+ q = TWO31 - h;
+ }
+ if (h < 0 && q < 0)
+ {
+ if (-h > q + TWO31)
+ q = -h - TWO31;
+ }
+ h += q;
+ }
+}
+
+static void
+skippages()
+{
+ int32 p;
+ int32 k;
+
+ for (;;)
+ {
+ if (feof(dvifile))
+ {
+ fprintf(logfile, "Bad DVI file: the file ended prematurely!\n");
+ jumpout();
+ }
+ k = Dget1byte();
+ p = firstpar(k);
+ switch (k)
+ {
+ case 139: /* BOP */
+ newbackptr = DVIMark() + TotBytesWritten - 1;
+ currpagenum = Dsign4byte(); /* count[0] */
+ for (k = 1; k <= 9; k++) /* WAS count[k] := */
+ (void) Dsign4byte();
+ (void) Dsign4byte();
+ BackupInBuf(4);
+ cmdSigned(oldbackptr, 4);
+ oldbackptr = newbackptr;
+ fprintf(logfile, "[");
+ return;
+ case 132:
+ case 137: /* RULE */
+ (void) Dsign4byte();
+ break;
+ case 243:
+ case 244:
+ case 245:
+ case 246:
+ definefont(p);
+ break;
+ case 239:
+ case 240:
+ case 241:
+ case 242: /* specials */
+ mainhandlespecials(k, p);
+ break;
+ case 248: /* POST */
+ ourq = DVIMark() + TotBytesWritten - 1;
+ inpostamble = true;
+ return;
+ }
+ }
+}
+
+static void
+readpostamble()
+{
+ int32 k, p, m, indx, FORLIM;
+ MusFontInfRec *WITH;
+ VectFontInfRec *WITH1;
+ LabFontInfRec *WITH2;
+
+ if (Dsign4byte() != numerator)
+ fprintf(logfile, "Postamble numerator doesn't match the preamble!\n");
+ if (Dsign4byte() != denominator)
+ fprintf(logfile, "Postamble denominator doesn't match the preamble!\n");
+ if (Dsign4byte() != mag)
+ fprintf(logfile, "Postamble magnification doesn't match the preamble!\n");
+ maxv = Dsign4byte();
+ maxh = Dsign4byte();
+ maxs = Dget2byte();
+ BackupInBuf(2);
+ cmd2byte(maxs + 2);
+ /*
+ * pretend the stack depth does not increase by more than two
+ */
+ totalpages = Dget2byte();
+ do
+ {
+ k = Dget1byte();
+ if (k >= 243 && k < 247)
+ {
+ p = firstpar(k);
+ Fastdefinefont(p);
+ k = 138;
+ }
+ } while (k == 138); /* NOP */
+
+ /*
+ * here, backup 1, enter all our fonts and then output the 249 that we backed over
+ */
+ BackupInBuf(1);
+ FORLIM = MFontsDefd;
+ for (indx = 0; indx < FORLIM; indx++)
+ {
+ WITH = MFontTable[indx];
+ enterfont(WITH->DVIFontNum, WITH->Cksum, WITH->DesSize, WITH->DesSize,
+ WITH->FontName);
+ } /* for */
+ FORLIM = VFontsDefd;
+ for (indx = 0; indx < FORLIM; indx++)
+ {
+ WITH1 = VFontTable[indx];
+ enterfont(WITH1->DVIFontNum, WITH1->Cksum, WITH1->DesSize, WITH1->DesSize,
+ WITH1->FontName);
+ } /* for */
+ FORLIM = LFontsDefd;
+ for (indx = 0; indx < FORLIM; indx++)
+ {
+ WITH2 = LFontTable[indx];
+ enterfont(WITH2->DVIFontNum, WITH2->Cksum, WITH2->DesSize, WITH2->DesSize,
+ WITH2->FontName);
+ }
+ cmd1byte(249); /* post post */
+
+ if (k != 249)
+ fprintf(logfile, "byte %d is not postpost!\n", k);
+ (void) Dsign4byte();
+ BackupInBuf(4);
+ cmd4byte(ourq);
+ m = Dget1byte();
+ if (m != 2)
+ fprintf(logfile, "identification should be %d!\n", 2);
+ m = 223;
+ while ((m == 223) && (!feof(dvifile)))
+ m = Dget1byte();
+ if (feof(dvifile))
+ return;
+ fprintf(logfile, "Bad DVI file: signature in should be 223!\n");
+ jumpout();
+}
+
+
+/* MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN */
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ void exit PP((int));
+
+ if (setjmp(_JL666))
+ goto _L666;
+ initialize();
+ if (argc < 3)
+ {
+ fprintf(stderr, "Usage: textyl dvi-in dvi-out\n");
+ exit(1);
+ }
+ if ((dvifile = fopen(argv[1], "r")) == NULL)
+ {
+ perror(argv[1]);
+ exit(1);
+ }
+ if ((outputfil = fopen(argv[2], "w")) == NULL)
+ {
+ perror(argv[2]);
+ exit(1);
+ }
+ logfile = stdout;
+ fprintf(logfile, "%s for Berkeley Unix\n", TylVersion);
+
+ p = Dget1byte();
+ if (p != 247)
+ {
+ fprintf(logfile, "Bad DVI file: First byte isn't start of preamble!!\n");
+ jumpout();
+ }
+ p = Dget1byte();
+ if (p != 2)
+ fprintf(logfile, "identification in byte 1 should be %d!\n", 2);
+ numerator = Dsign4byte();
+ denominator = Dsign4byte();
+ if (numerator <= 0)
+ {
+ fprintf(logfile, "Bad DVI file: numerator is %d!\n", numerator);
+ jumpout();
+ }
+ if (denominator <= 0)
+ {
+ fprintf(logfile, "Bad DVI file: denominator is %d!\n", denominator);
+ jumpout();
+ }
+ conv = numerator / 254000.0 * (resolution / denominator);
+ mag = Dsign4byte();
+ if (mag <= 0)
+ {
+ fprintf(logfile, "Bad DVI file: magnification is % .1E!\n", mag);
+ jumpout();
+ }
+ magfactor = mag / 1000.0;
+ trueconv = conv;
+ conv = trueconv * magfactor;
+ p = Dget1byte(); /* the 'k' of the preamble */
+ while (p > 0)
+ {
+ p--;
+ (void) Dget1byte();
+ }
+
+ skippages();
+ if (!inpostamble)
+ {
+ while (maxpages-- > 0)
+ { /* while */
+ if (!dopage())
+ {
+ printf(" Bad DVI file: page ended unexpectedly!");
+ fprintf(logfile, "Bad DVI file: page ended unexpectedly!\n");
+ jumpout();
+ }
+ WriteDVIBuf();
+ ClearDVIBuf();
+ multifigure = 0;
+ pgfigurenum = 0;
+ FTBDs = 0;
+ didnewfonts = false;
+ do
+ {
+ k = Dget1byte();
+ if (k >= 243 && k < 247)
+ { /* fontdefs */
+ p = firstpar(k);
+ definefont(p);
+ k = 138;
+ }
+ } while (k == 138); /* nop */
+
+ if (k == 248)
+ {
+ inpostamble = true;
+ ourq = DVIMark() + TotBytesWritten - 1;
+ break;
+ }
+
+ if (k != 139)
+ { /* BOP */
+ fprintf(logfile, "We did not find BOP when expected\n");
+ jumpout();
+ continue;
+ }
+
+ newbackptr = DVIMark() + TotBytesWritten - 1;
+ currpagenum = Dsign4byte(); /* Count[0] */
+ for (k = 1; k <= 9; k++) /* WAS count[k] := */
+ (void) Dsign4byte();
+ (void) Dsign4byte(); /* backpointer */
+ BackupInBuf(4);
+ cmdSigned(oldbackptr, 4);
+ oldbackptr = newbackptr;
+ fprintf(logfile, "[");
+ } /* while */
+ } /* if not inpostamble */
+ if (!inpostamble)
+ skippages();
+ (void) Dsign4byte(); /* ptr to the last bop in file */
+ BackupInBuf(4);
+ cmdSigned(oldbackptr, 4);
+ readpostamble();
+ WriteDVIBuf();
+
+ while ((TotBytesWritten & 3) != 0) /* final signatures */
+ OutputByte(223);
+
+ fprintf(logfile, "(%d page", currpagenum);
+ if (currpagenum > 1)
+ putc('s', logfile);
+ fprintf(logfile, ", %d bytes).\n", TotBytesWritten);
+
+_L666:
+ if (ErrorOccurred)
+ {
+ fprintf(logfile, "\nSome error(s) occurred.\n");
+ fprintf(logfile, "Assume that the outputfile is incorrect\n");
+ }
+ if (dvifile != NULL)
+ fclose(dvifile);
+ if (tfmfile != NULL)
+ fclose(tfmfile);
+ if (outputfil != NULL)
+ fclose(outputfil);
+ if (logfile != NULL)
+ fclose(logfile);
+ exit(0);
+ return (0);
+}
diff --git a/macros/latex209/contrib/textyl/src/tyl.c b/macros/latex209/contrib/textyl/src/tyl.c
new file mode 100644
index 0000000000..e95445bf69
--- /dev/null
+++ b/macros/latex209/contrib/textyl/src/tyl.c
@@ -0,0 +1,1509 @@
+#include "defs.h"
+#include "globals.h"
+
+static ScaledPts dviBBlx, dviBBrx; /* Bounding box of figure in DVI space */
+static ScaledPts dviBBby, dviBBty;
+static int32 prevfont;
+/*
+ * to keep track of prev font before the PUSH and expansion of the special
+ */
+static int32 ourpushdepth = 0; /* depth of internal pushes */
+static int32 origTexfont = -1; /* number of TeX font in use before tyling */
+
+static void
+IPUSH()
+{
+ if (ourpushdepth == 0) /* first push --> start tyling */
+ origTexfont = font[curfont].num;
+ else
+ prevfont = ourfontnum;
+ /* store the internal font number in use at this time */
+ cmd1byte(NOP);
+ cmd1byte(NOP); /* our greeting */
+ cmd1byte(PUSH);
+ ourpushdepth++;
+}
+
+static void
+IPOP()
+{
+ cmd1byte(POP);
+ cmd1byte(NOP);
+ cmd1byte(NOP); /* our signature */
+ ourpushdepth--;
+ if (ourpushdepth < 0)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "Error: too many internal pops\n");
+ }
+ if (ourpushdepth == 0)
+ { /* we are totally done with tyling for now */
+ if (nf > 0) /* only if it is valid */
+ isetfont(origTexfont);
+ }
+ else
+ {
+ if (prevfont >= 0) /* restore that internal font previously in use */
+ isetfont(prevfont);
+ }
+}
+
+char *
+xmalloc(size)
+ unsigned int size;
+{
+ char *p;
+ char *malloc PP((unsigned));
+ void exit PP((int));
+
+ if ((p = malloc(size)) == 0)
+ {
+ fprintf(stderr, "Out of memory!\n");
+ exit(1);
+ }
+ return (p);
+}
+
+/*---------------------------------------------*/
+Item *
+NewItem(what)
+ int what;
+{
+ Item *i;
+ Figure *f;
+
+ if ((i = (Item *) xmalloc(sizeof(Item))) == 0)
+ i->nextitem = NULL;
+ i->BBlx = 0;
+ i->BBby = 0;
+ i->BBrx = 0;
+ i->BBty = 0;
+ i->itemthick = LoVThick;
+ i->itemvec = (unsigned) VKCirc;
+ i->itempatt = (unsigned) solid;
+ i->kind = what;
+ switch (what)
+ { /* give defaults */
+
+ case Aline:
+ /* blank case */
+ break;
+
+ case Aspline:
+ i->UU.U2.nsplknots = 0;
+ i->UU.U2.dosmarks = 0;
+ i->UU.U2.sclosed = false;
+ i->UU.U2.spltype = (unsigned) BSPL;
+ break;
+
+ case Attspline:
+ i->UU.U3.nttknots = 0;
+ i->UU.U3.dottmarks = 0;
+ i->UU.U3.tspltype = (unsigned) BSPL;
+ i->UU.U3.tclosed = false;
+ break;
+
+ case Abeam:
+ /* blank case */
+ break;
+
+ case Atieslur:
+ i->UU.U5.ntknots = 0;
+ break;
+
+ case Aarc:
+ i->UU.U6.narcknots = 0;
+ break;
+
+ case Alabel:
+ i->UU.U7.fontstyle = -1; /* undefined */
+ i->UU.U7.labeltext[0] = '\0';
+ break;
+
+ case Afigure:
+ i->UU.U8.figtheta = 0.0;
+ i->UU.U8.fsx = 1.0;
+ i->UU.U8.fsy = 1.0;
+ i->UU.U8.fdx = 0;
+ i->UU.U8.fdy = 0;
+ i->UU.U8.preWid = 0;
+ i->UU.U8.preHt = 0;
+ i->UU.U8.postWid = 0;
+ i->UU.U8.postHt = 0;
+ i->UU.U8.depthnumber = 0; /* for now */
+ f = (Figure *) xmalloc(sizeof(Figure)); /* a new figure */
+ i->UU.U8.body = f;
+ i->UU.U8.body->things = NULL;
+ break;
+ } /* case */
+ /* with */
+ return i;
+} /* NewItem */
+
+/*-----------------------------------------------------*/
+static void
+TylBeam(fromx, fromy, tox, toy, staffsize, kind)
+ int32 fromx, fromy, tox, toy, staffsize;
+ BeamKind kind;
+{
+ /*
+ * fromx, fromy, tox, toy: ScaledPts; staffsize : integer; kind : BeamKind
+ */
+} /* TylBeam */
+
+
+/* Local variables for TylLine: */
+struct LOC_TylLine
+{
+ VThickness thickness;
+};
+
+
+/*-------------------------------------------------------*/
+static void
+TylLine(xl, yb, xr, yt, thickness_, vec, patt)
+ int32 xl, yb, xr, yt;
+ VThickness thickness_;
+ VectKind vec;
+ LineStyle patt;
+{
+ /*
+ * xl, yb, xr, yt: ScaledPoints; thickness: VThickness; vec: VectKind; patt : LineStyle
+ */
+ struct LOC_TylLine V;
+ VecIndex findex;
+
+ V.thickness = thickness_;
+ /*
+ * p2c: x.p, line 6596: Note: Taking & of possibly promoted param thickness [324]
+ */
+ clampthickness(&V.thickness);
+ findex = GetVectFont(V.thickness, vec);
+ layline(xl, yb, xr, yt, findex, patt, false);
+}
+
+/*-----------------------------------------------------*/
+static void
+TylThickThinSpline(thetype, isclosed, KnotArray, ThikThinAry,
+ numknots, vec, patt, domarks)
+ SplineKind thetype;
+ int isclosed;
+int32(*KnotArray)[2];
+ VThickness *ThikThinAry;
+ int32 numknots;
+ VectKind vec;
+ LineStyle patt;
+ int32 domarks;
+{
+ /*
+ * thetype : SplineKind; isclosed : boolean; var KnotArray: ControlPoints; var ThikThinAry: ThickAryType; numknots:
+ * integer; vec: VectKind; patt : LineStyle; domarks : integer
+ */
+ layNspline(thetype, isclosed, false, domarks, KnotArray, numknots,
+ ThikThinAry, vec, patt);
+}
+
+/*----------------------------------------------------*/
+static void
+TylSpline(thetype, isclosed, KnotArray, numknots, thick, vec,
+ patt, domarks)
+ SplineKind thetype;
+ int isclosed;
+int32(*KnotArray)[2];
+ int32 numknots;
+ VThickness thick;
+ VectKind vec;
+ LineStyle patt;
+ int32 domarks;
+{
+ /*
+ * thetype : SplineKind; isclosed : boolean; var KnotArray: ControlPoints; numknots: integer; thick: VThickness; vec:
+ * VectKind; patt : LineStyle; domarks : integer
+ */
+ layAspline(thetype, isclosed, false, domarks, KnotArray, numknots, thick,
+ vec, patt);
+}
+
+#define ItsASlur true
+#define NotClosed false
+
+
+/* Local variables for TylTieSlur: */
+struct LOC_TylTieSlur
+{
+ VThickness minthick, maxthick;
+};
+
+
+/*-----------------------------------------------------*/
+static void
+TylTieSlur(KnotArray, numknots, minthick_, maxthick_)
+int32(*KnotArray)[2];
+ int32 numknots;
+ VThickness minthick_, maxthick_;
+{
+ /*
+ * KnotArray: ControlPoints; numknots: integer; minthick, maxthick: VThickness
+ */
+ struct LOC_TylTieSlur V;
+ ThickAryType ourttarray;
+ double one7th;
+ VThickness val;
+
+ V.minthick = minthick_;
+ V.maxthick = maxthick_;
+ /*
+ * p2c: x.p, line 6636: Note: Taking & of possibly promoted param minthick [324]
+ */
+ clampthickness(&V.minthick);
+ /*
+ * p2c: x.p, line 6637: Note: Taking & of possibly promoted param maxthick [324]
+ */
+ clampthickness(&V.maxthick);
+ if (numknots != 5)
+ fprintf(logfile, "TieSlur needs 5 control points\n");
+ one7th = 1.0 / 7.0;
+ val = (int32) floor(one7th * (V.maxthick - V.minthick) + 0.5);
+ ourttarray[1] = V.minthick;
+ ourttarray[2] = V.minthick + val;
+ ourttarray[3] = V.maxthick;
+ ourttarray[4] = V.minthick + val;
+ ourttarray[5] = V.minthick;
+
+ layNspline(CATROM, NotClosed, ItsASlur, 0, KnotArray, numknots, ourttarray,
+ VKCirc, solid);
+}
+
+#undef ItsASlur
+#undef NotClosed
+
+
+#define ItsAnArc true
+
+
+/*-------------------------------------------------------*/
+static void
+doTylArc(iscircle, apts, numknots, thick, vec, patt)
+ int iscircle;
+int32(*apts)[2];
+ int32 numknots;
+ VThickness thick;
+ VectKind vec;
+ LineStyle patt;
+{
+ /*
+ * iscircle : boolean; var apts : ControlPoints; numknots : integer; thick : VThickness; vec : VectKind; patt :
+ * LineStyle
+ */
+ layAspline(BSPL, iscircle, ItsAnArc, 0, apts, numknots, thick, vec, patt);
+}
+
+#undef ItsAnArc
+
+
+/*-----------------------------------------------------------*/
+static void
+TylArc(radius, centx, centy, firstangle, secondangle, thick, vec,
+ patt)
+ int32 radius, centx, centy, firstangle, secondangle;
+ VThickness thick;
+ VectKind vec;
+ LineStyle patt;
+{
+ /*
+ * radius : ScaledPts; centx, centy : ScaledPts; firstangle, secondangle : integer; thick : VThickness; vec : VectKind;
+ * patt : LineStyle
+ */
+ ControlPoints apts;
+ int32 numknots;
+ int iscircle;
+
+ iscircle = (firstangle == secondangle);
+ if (iscircle)
+ {
+ /*
+ * maxspan := round ((360.0 / 16.0) * DEGTORAD * radius); {
+ */
+ defineCircleCpts(radius, centx, centy, apts, &numknots);
+ }
+ else
+ {
+ /*
+ * maxspan := round ((abs (secondangle - firstangle) / 16.0) * DEGTORAD * radius); {
+ */
+ definearcpts(radius, centx, centy, firstangle, secondangle, apts,
+ &numknots);
+ }
+
+ doTylArc(iscircle, apts, numknots, thick, vec, patt);
+
+}
+
+
+/*-----------------------------------------------------------*/
+static void
+TylLabel(xpos, ypos, fontstyle, phrase, phraselen)
+ int32 xpos, ypos, fontstyle;
+ char *phrase;
+ int32 phraselen;
+{
+ /*
+ * xpos, ypos : ScaledPts; fontstyle : integer; phrase : charstring; phraselen : integer
+ */
+ int32 findex, c, spaceover;
+
+ if (fontstyle < 1 || fontstyle > MAXLABELFONTS)
+ {
+ complain(ERRREALBAD);
+ fprintf(logfile, "Unexpected bad fontstyle in TylLabel: %d?\n",
+ fontstyle);
+ jumpout();
+ }
+ findex = GetLabFont(fontstyle);
+ isetpos(xpos, ypos);
+ IPUSH();
+ isetfont(LFontTable[findex - 1]->DVIFontNum);
+ spaceover = LFontTable[findex - 1]->spacewidth;
+ for (c = 0; c < phraselen; c++)
+ {
+ if (phrase[c] != ' ')
+ {
+ cmd1byte(SET1);
+ cmd1byte(phrase[c]);
+ }
+ else
+ { /* move over */
+ cmd1byte(RIGHTLEFT + 2);
+ /* assume distance is less than 3 bytes */
+ cmdSigned(spaceover, 3);
+ }
+ }
+ IPOP();
+}
+
+/* &&module TeXtyl */
+/*----------------------------------------------------------------*/
+/* rotate a (x,y) point about mx, my */
+static void
+ptrotate(x, y, mx, my, angle)
+ int32 *x, *y, mx, my;
+ double angle;
+{
+ int32 tmpx, tmpy;
+ double cosa, sina;
+
+ tmpx = *x - mx;
+ tmpy = *y - my;
+ cosa = cos(angle * DEGTORAD);
+ sina = sin(angle * DEGTORAD);
+ *x = (int32) floor(tmpx * cosa - tmpy * sina + 0.5) + mx;
+ *y = (int32) floor(tmpx * sina + tmpy * cosa + 0.5) + my;
+}
+
+
+/*----------------------------------------------------------------*/
+/*
+ * transform two line points: scale, rotate and translate
+ */
+static void
+xfmlinepts(x1, y1, x2, y2, offh, offv, midx, midy, scalefact,
+ theta, dx, dy, sx, sy)
+ int32 *x1, *y1, *x2, *y2, offh, offv, midx, midy;
+ double scalefact, theta;
+ int32 dx, dy;
+ double sx, sy;
+{
+ if (sx == 0.0 || sy == 0.0)
+ {
+ complain(ERRBAD);
+ fprintf(logfile, "?? Some scale factor is Zero... continuing anyway\n");
+ }
+ /* scale about center of item */
+ if (sx != 1.0 || sy != 1.0)
+ {
+ *x1 = (int32) floor((*x1 - midx) * sx + 0.5) + midx;
+ *x2 = (int32) floor((*x2 - midx) * sx + 0.5) + midx;
+ *y1 = (int32) floor((*y1 - midy) * sy + 0.5) + midy;
+ *y2 = (int32) floor((*y2 - midy) * sy + 0.5) + midy;
+ }
+ /* rotate if necessary */
+ if (theta != 0.0)
+ { /* rotate about the midpoint */
+ ptrotate(x1, y1, midx, midy, theta);
+ ptrotate(x2, y2, midx, midy, theta);
+ }
+ /* translate */
+ *x1 += (int32) floor(dx * scalefact + 0.5) + offh;
+ *x2 += (int32) floor(dx * scalefact + 0.5) + offh;
+ *y1 += (int32) floor(dy * scalefact + 0.5) + offv;
+ *y2 += (int32) floor(dy * scalefact + 0.5) + offv;
+} /* xfmlinepts */
+
+
+/*----------------------------------------------------------------*/
+static void
+xfmcontpts(xpts, xknots, offh, offv, midx, midy, scalefact, theta,
+ dx, dy, sx, sy)
+int32(*xpts)[2];
+ int32 xknots, offh, offv, midx, midy;
+ double scalefact, theta;
+ int32 dx, dy;
+ double sx, sy;
+{
+ int32 i;
+
+ /* scale about center of item */
+ if (sx != 1.0 || sy != 1.0)
+ {
+ for (i = 0; i <= xknots; i++)
+ {
+ xpts[i][0] = (int32) floor((xpts[i][0] - midx) * sx + 0.5) + midx;
+ xpts[i][1] = (int32) floor((xpts[i][1] - midy) * sy + 0.5) + midy;
+ }
+ }
+
+ if (theta != 0.0)
+ { /* rotate about center */
+ for (i = 0; i <= xknots; i++)
+ ptrotate(xpts[i], &xpts[i][1], midx, midy, theta);
+ }
+ /* translate */
+ for (i = 0; i <= xknots; i++)
+ {
+ xpts[i][0] += (int32) floor(dx * scalefact + 0.5) + offh;
+ xpts[i][1] += (int32) floor(dy * scalefact + 0.5) + offv;
+ }
+} /* xfmcontpts */
+
+
+/*----------------------------------------------------------------*/
+/* convert into DVI space and offset by H & V */
+static void
+dvilinepts(x1, y1, x2, y2, offh, offv)
+ int32 *x1, *y1, *x2, *y2, offh, offv;
+{
+ *x1 += offh;
+ *x2 += offh;
+ *y1 = offv - *y1;
+ *y2 = offv - *y2;
+}
+
+
+/*----------------------------------------------------------------*/
+/* convert into DVI space and offset by H & V */
+static void
+dvicontpts(xpts, xknots, offh, offv)
+int32(*xpts)[2];
+ int32 xknots, offh, offv;
+{
+ int32 i;
+
+ for (i = 0; i <= xknots; i++)
+ {
+ xpts[i][0] += offh;
+ xpts[i][1] = offv - xpts[i][1];
+ }
+}
+
+
+/*----------------------------------------------------------------*/
+/*
+ * transform all the figure's elements according to the top-level tranformation requirements in 1st Quadrant space. then reset
+ * the toplevel's xfms.
+ */
+static void
+toplevelxfm(toplev, curfig, recurlevel)
+ Item *toplev, *curfig;
+ int32 recurlevel;
+{
+ Item *pi;
+ ScaledPts null1, null2, old1, old2, midx, midy;
+
+ midy = (toplev->BBty - toplev->BBby) / 2;
+ midx = (toplev->BBrx - toplev->BBlx) / 2;
+ pi = curfig->UU.U8.body->things; /* if recur==0, this is same as toplev */
+ while (pi != NULL)
+ {
+ switch (pi->kind)
+ { /* with */
+
+ case Aline:
+ xfmlinepts(&pi->UU.U1.lx1, &pi->UU.U1.ly1, &pi->UU.U1.lx2,
+ &pi->UU.U1.ly2, 0, 0, midx, midy, 1.0,
+ toplev->UU.U8.figtheta, toplev->UU.U8.fdx, toplev->UU.U8.fdy,
+ toplev->UU.U8.fsx, toplev->UU.U8.fsy);
+ break;
+
+ case Aspline:
+ xfmcontpts(pi->UU.U2.spts, pi->UU.U2.nsplknots, 0, 0, midx, midy, 1.0,
+ toplev->UU.U8.figtheta, toplev->UU.U8.fdx, toplev->UU.U8.fdy,
+ toplev->UU.U8.fsx, toplev->UU.U8.fsy);
+ break;
+
+ case Attspline:
+ xfmcontpts(pi->UU.U3.ttpts, pi->UU.U3.nttknots, 0, 0, midx, midy, 1.0,
+ toplev->UU.U8.figtheta, toplev->UU.U8.fdx, toplev->UU.U8.fdy,
+ toplev->UU.U8.fsx, toplev->UU.U8.fsy);
+ break;
+
+ case Aarc:
+ null1 = 0;
+ null2 = 0;
+ old1 = pi->UU.U6.acentx;
+ old2 = pi->UU.U6.acenty;
+ xfmlinepts(&pi->UU.U6.acentx, &pi->UU.U6.acenty, &null1, &null2, 0, 0,
+ midx, midy, 1.0, toplev->UU.U8.figtheta, toplev->UU.U8.fdx,
+ toplev->UU.U8.fdy, toplev->UU.U8.fsx, toplev->UU.U8.fsy);
+
+ xfmcontpts(pi->UU.U6.arcpts, pi->UU.U6.narcknots + 1, 0, 0, old1,
+ old2, 1.0, toplev->UU.U8.figtheta,
+ toplev->UU.U8.fdx + pi->UU.U6.acentx - old1,
+ toplev->UU.U8.fdy + pi->UU.U6.acenty - old2,
+ toplev->UU.U8.fsx, toplev->UU.U8.fsy);
+ break;
+
+ case Alabel:
+ null1 = 0;
+ null2 = 0;
+ xfmlinepts(&pi->UU.U7.labx, &pi->UU.U7.laby, &null1, &null2, 0, 0,
+ midx, midy, 1.0, toplev->UU.U8.figtheta, toplev->UU.U8.fdx,
+ toplev->UU.U8.fdy, toplev->UU.U8.fsx, toplev->UU.U8.fsy);
+ break;
+
+ case Abeam: /* not transformable */
+ break;
+
+ case Atieslur: /* not transformable */
+ break;
+
+ case Afigure:
+ toplevelxfm(toplev, pi, recurlevel + 1);
+ break;
+ } /* case */
+ pi = pi->nextitem;
+ } /* while */
+ if (recurlevel != 0) /* reset the toplevel's xfms */
+ return;
+ toplev->UU.U8.figtheta = 0.0;
+ toplev->UU.U8.fsx = 1.0;
+ toplev->UU.U8.fsy = 1.0;
+ toplev->UU.U8.fdx = 0;
+ toplev->UU.U8.fdy = 0;
+}
+
+
+/*----------------------------------------------------------------*/
+static double
+scalefitfactor(actualwid, actualht, goalwid, goalht)
+ int32 actualwid, actualht, goalwid, goalht;
+{
+ double sx, sy;
+
+ sx = (double) goalwid / actualwid;
+ sy = (double) goalht / actualht;
+ if (sx < sy)
+ return sx;
+ else
+ return sy;
+}
+
+
+
+/*
+ * ---- The handlers for each primitive ---- The result of calling each handler is either immediate output to the buffer of the
+ * commands to produce the primitive, OR the primitive gets pushed onto a stack/list that defines a current 'figure' (set of
+ * prims) for output at a later time
+ *
+ * Look at linehandle for a basic idea of how the handlers work. the others follow pretty closely.
+ */
+
+
+/*------------------------------------------------------------*/
+void
+linehandle(figdepth, scalefact, x1, y1, x2, y2, dvih, dviv, thk,
+ vk, patt, minx, maxx, miny, maxy, tx, ty, sx, sy, r)
+ int32 figdepth;
+ double scalefact;
+ int32 x1, y1, x2, y2, dvih, dviv;
+ VThickness thk;
+ VectKind vk;
+ LineStyle patt;
+ int32 minx, maxx, miny, maxy, tx, ty;
+ double sx, sy, r;
+{
+ /* possible dvi-offsets */
+ ScaledPts midx, midy;
+ Item *lineitem;
+
+ midx = (minx + maxx) / 2;
+ midy = (miny + maxy) / 2;
+
+ /* do local primitive -level transformations */
+ xfmlinepts(&x1, &y1, &x2, &y2, dvih, dviv, midx, midy, scalefact, r, tx, ty,
+ sx, sy);
+
+ if (figdepth == 0)
+ { /* ---- do the primitive by itself */
+ /* re-transform it to the 4th Quadrant */
+ dvilinepts(&x1, &y1, &x2, &y2, h, v); /* global h and v posit */
+ IPUSH();
+ TylLine(x1, y1, x2, y2, thk, vk, patt);
+ IPOP();
+ return;
+ }
+ if (figdepth <= 0)
+ { /* ---- Pack it and stack it */
+ if (figdepth < 0)
+ { /* ---- just do it right away without any PUSH/POP pair */
+ /*
+ * this is the case when we are unpacking a figure for immediate output
+ */
+ TylLine(x1, y1, x2, y2, thk, vk, patt);
+ }
+ return;
+ }
+ lineitem = NewItem(Aline);
+ lineitem->BBlx = minx;
+ lineitem->BBby = miny;
+ lineitem->BBrx = maxx;
+ lineitem->BBty = maxy;
+ lineitem->UU.U1.lx1 = x1;
+ lineitem->UU.U1.ly1 = y1;
+ lineitem->UU.U1.lx2 = x2;
+ lineitem->UU.U1.ly2 = y2;
+ lineitem->itemthick = thk;
+ lineitem->itemvec = (unsigned) vk;
+ lineitem->itempatt = (unsigned) patt;
+ pushItem(figdepth, lineitem);
+} /* linehandle */
+
+
+/* --- Simple Splines ----- */
+/*-----------------------------------------------------*/
+void
+splinehandle(figdepth, scalefact, thetype, isclosed, markdiam,
+ contpts, nknots, dvih, dviv, thk, vec, patt, minx,
+ maxx, miny, maxy, tx, ty, sx, sy, r)
+ int32 figdepth;
+ double scalefact;
+ SplineKind thetype;
+ int isclosed;
+ int32 markdiam;
+int32(*contpts)[2];
+ int32 nknots, dvih, dviv;
+ VThickness thk;
+ VectKind vec;
+ LineStyle patt;
+ int32 minx, maxx, miny, maxy, tx, ty;
+ double sx, sy, r;
+{
+ /* possible dvi-offsets */
+ ScaledPts midx, midy;
+ Item *splineitem;
+ int32 i;
+
+ midx = (minx + maxx) / 2;
+ midy = (miny + maxy) / 2;
+
+ xfmcontpts(contpts, nknots, dvih, dviv, midx, midy, scalefact, r, tx, ty,
+ sx, sy);
+
+ if (figdepth == 0)
+ { /* ---- do the primitive */
+ /* transform to 4th quad */
+ dvicontpts(contpts, nknots, h, v);
+ IPUSH();
+ TylSpline(thetype, isclosed, contpts, nknots, thk, vec, patt, markdiam);
+ IPOP();
+ return;
+ }
+ if (figdepth <= 0)
+ {
+ if (figdepth < 0)
+ TylSpline(thetype, isclosed, contpts, nknots, thk, vec, patt, markdiam);
+ return;
+ }
+ splineitem = NewItem(Aspline);
+ splineitem->BBlx = minx;
+ splineitem->BBby = miny;
+ splineitem->BBrx = maxx;
+ splineitem->BBty = maxy;
+ splineitem->itemthick = thk;
+ splineitem->itemvec = (unsigned) vec;
+ splineitem->itempatt = (unsigned) patt;
+ splineitem->UU.U2.nsplknots = nknots;
+ splineitem->UU.U2.spltype = (unsigned) thetype;
+ splineitem->UU.U2.sclosed = isclosed;
+ splineitem->UU.U2.dosmarks = markdiam;
+ for (i = 1; i <= nknots; i++)
+ {
+ splineitem->UU.U2.spts[i][0] = contpts[i][0];
+ splineitem->UU.U2.spts[i][1] = contpts[i][1];
+ }
+ pushItem(figdepth, splineitem);
+} /* splinehandle */
+
+
+/* --- Variable thickness splines ----- */
+/*-----------------------------------------------------*/
+void
+ttsplhandle(figdepth, scalefact, thetype, isclosed, markdiam,
+ contpts_, ttks_, nknots, dvih, dviv, vec, patt, minx,
+ maxx, miny, maxy, tx, ty, sx, sy, r)
+ int32 figdepth;
+ double scalefact;
+ SplineKind thetype;
+ int isclosed;
+ int32 markdiam;
+int32(*contpts_)[2];
+ VThickness *ttks_;
+ int32 nknots, dvih, dviv;
+ VectKind vec;
+ LineStyle patt;
+ int32 minx, maxx, miny, maxy, tx, ty;
+ double sx, sy, r;
+{
+ /* possible dvi-offsets */
+ ControlPoints contpts;
+ ThickAryType ttks;
+ ScaledPts midx, midy;
+ Item *ttsplitem;
+ int32 i;
+ char *memcpy PP((char *, char *, int));
+
+ (void) memcpy((char *)contpts, (char *)contpts_, sizeof(ControlPoints));
+ (void) memcpy((char *)ttks, (char *)ttks_, sizeof(ThickAryType));
+ midx = (minx + maxx) / 2;
+ midy = (miny + maxy) / 2;
+
+ xfmcontpts(contpts, nknots, dvih, dviv, midx, midy, scalefact, r, tx, ty,
+ sx, sy);
+
+ if (figdepth == 0)
+ {
+ /* transform to 4th quad */
+ dvicontpts(contpts, nknots, h, v);
+ IPUSH();
+ TylThickThinSpline(thetype, isclosed, contpts, ttks, nknots, vec, patt,
+ markdiam);
+ IPOP();
+ return;
+ }
+
+ if (figdepth <= 0)
+ {
+ if (figdepth < 0)
+ TylThickThinSpline(thetype, isclosed, contpts, ttks, nknots, vec, patt,
+ markdiam);
+ return;
+ }
+ ttsplitem = NewItem(Attspline);
+ ttsplitem->BBlx = minx;
+ ttsplitem->BBby = miny;
+ ttsplitem->BBrx = maxx;
+ ttsplitem->BBty = maxy;
+ ttsplitem->itemvec = (unsigned) vec;
+ ttsplitem->itempatt = (unsigned) patt;
+ ttsplitem->UU.U3.nttknots = nknots;
+ ttsplitem->UU.U3.tspltype = (unsigned) thetype;
+ ttsplitem->UU.U3.dottmarks = markdiam;
+ ttsplitem->UU.U3.tclosed = isclosed;
+ for (i = 1; i <= nknots; i++)
+ { /* ttsplitem */
+ ttsplitem->UU.U3.ttpts[i][0] = contpts[i][0];
+ ttsplitem->UU.U3.ttpts[i][1] = contpts[i][1];
+ ttsplitem->UU.U3.ttarry[i] = ttks[i];
+ }
+ pushItem(figdepth, ttsplitem);
+} /* ttsplhandle */
+
+
+/* ---- Musical Beams ---- */
+/*-----------------------------------------------------*/
+void
+beamhandle(depth, siz, bk, x1, y1, x2, y2)
+ int32 depth, siz;
+ BeamKind bk;
+ int32 x1, y1, x2, y2;
+{
+ Item *bmitem;
+
+ if (depth == 0)
+ {
+ dvilinepts(&x1, &y1, &x2, &y2, h, v);
+ IPUSH();
+ TylBeam(x1, y1, x2, y2, siz, bk);
+ IPOP();
+ return;
+ }
+ if (depth <= 0)
+ {
+ if (depth < 0)
+ {
+ TylBeam(x1, y1, x2, y2, siz, bk);
+ } /* else */
+ return;
+ }
+ bmitem = NewItem(Abeam);
+ bmitem->BBlx = min(x1, x2);
+ bmitem->BBby = min(y1, y2);
+ bmitem->BBrx = max(x1, x2);
+ bmitem->BBty = max(y1, y2);
+ bmitem->UU.U4.bx1 = x1;
+ bmitem->UU.U4.by1 = y1;
+ bmitem->UU.U4.bx2 = x2;
+ bmitem->UU.U4.by2 = y2;
+ bmitem->UU.U4.staf = siz;
+ bmitem->UU.U4.bkind = (unsigned) bk; /* with */
+ pushItem(depth, bmitem);
+} /* beamhandle */
+
+
+/* ---- Musical Ties and Slurs ----- */
+/*-----------------------------------------------------*/
+void
+tieslurhandle(depth, pts_, numk, minthick, maxthick)
+ int32 depth;
+int32(*pts_)[2];
+ int32 numk;
+ VThickness minthick, maxthick;
+{
+ ControlPoints pts;
+ Item *tsitem;
+ int32 i;
+ char *memcpy PP((char *, char *, int));
+
+ (void) memcpy((char *)pts, (char *)pts_, sizeof(ControlPoints));
+ if (depth == 0)
+ {
+ dvicontpts(pts, numk, h, v);
+ IPUSH();
+ TylTieSlur(pts, numk, minthick, maxthick);
+ IPOP();
+ return;
+ }
+ if (depth <= 0)
+ {
+ if (depth < 0)
+ {
+ TylTieSlur(pts, numk, minthick, maxthick);
+ } /* else */
+ return;
+ }
+ tsitem = NewItem(Atieslur);
+ tsitem->UU.U5.ntknots = numk;
+ for (i = 1; i <= numk; i++)
+ {
+ tsitem->UU.U5.tspts[i][0] = pts[i][0];
+ tsitem->UU.U5.tspts[i][1] = pts[i][1];
+ }
+ tsitem->UU.U5.minth = minthick;
+ tsitem->UU.U5.maxth = maxthick; /* with */
+ pushItem(depth, tsitem);
+} /* tieslurhandle */
+
+
+/*---------------------------------------------------------*/
+void
+arccirclehandle(figdepth, scalefact, cx, cy, radius, ang1, ang2,
+ contpts, nknots, dvih, dviv, thk, vec, patt, minx,
+ maxx, miny, maxy, tx, ty, sx, sy, r)
+ int32 figdepth;
+ double scalefact;
+ int32 cx, cy, radius, ang1, ang2;
+int32(*contpts)[2];
+ int32 nknots, dvih, dviv;
+ VThickness thk;
+ VectKind vec;
+ LineStyle patt;
+ int32 minx, maxx, miny, maxy, tx, ty;
+ double sx, sy, r;
+{
+ /* IN */
+ /* possible dvi-offsets */
+ ScaledPts midx, midy;
+ Item *arcitem;
+ int32 i;
+ int isclosedarc;
+
+ midx = cx;
+ midy = cy;
+ isclosedarc = (ang1 == ang2);
+ /*
+ * if (isclosedarc) then maxspanlen := round ((360.0 / 16.0) * DEGTORAD * radius) else maxspanlen := round ((abs(ang2 -
+ * ang1) / 16.0) * DEGTORAD * radius); {
+ */
+
+
+ xfmcontpts(contpts, nknots + 1, dvih, dviv, midx, midy, scalefact, r, tx,
+ ty, sx, sy);
+
+ if (figdepth == 0)
+ { /* ---- just do the primitive */
+ /* transform to 4th quad */
+ dvicontpts(contpts, nknots + 1, h, v);
+ IPUSH();
+ doTylArc(isclosedarc, contpts, nknots, thk, vec, patt);
+ IPOP();
+ return;
+ }
+ if (figdepth <= 0)
+ {
+ if (figdepth < 0)
+ doTylArc(isclosedarc, contpts, nknots, thk, vec, patt);
+ return;
+ }
+ arcitem = NewItem(Aarc);
+ arcitem->BBlx = minx;
+ arcitem->BBby = miny;
+ arcitem->BBrx = maxx;
+ arcitem->BBty = maxy;
+ arcitem->itemthick = thk;
+ arcitem->itemvec = (unsigned) vec;
+ arcitem->itempatt = (unsigned) patt;
+ arcitem->UU.U6.narcknots = nknots;
+ arcitem->UU.U6.acentx = cx;
+ arcitem->UU.U6.acenty = cy;
+ arcitem->UU.U6.aradius = radius;
+ arcitem->UU.U6.firstang = ang1;
+ arcitem->UU.U6.lastang = ang2;
+ for (i = 0; i <= nknots + 1; i++)
+ {
+ arcitem->UU.U6.arcpts[i][0] = contpts[i][0];
+ arcitem->UU.U6.arcpts[i][1] = contpts[i][1];
+ }
+ pushItem(figdepth, arcitem);
+} /* arccirclehandle */
+
+
+
+/*---------------------------------------------------------*/
+void
+labelhandle(depth, scalefact, lax, lay, dvih, dviv, style, phrase,
+ tx, ty)
+ int32 depth;
+ double scalefact;
+ int32 lax, lay, dvih, dviv, style;
+ charstring phrase;
+ int32 tx, ty;
+{
+ /* possible dvi-offsets */
+ Item *labitem;
+ ScaledPts null1, null2;
+
+ /* xfm the label point if necessary */
+ lax += (int32) floor(tx * scalefact + 0.5);
+ lay += (int32) floor(ty * scalefact + 0.5);
+
+ if (depth == 0)
+ {
+ null1 = 0;
+ null2 = 0;
+ dvilinepts(&lax, &lay, &null1, &null2, h, v);
+ IPUSH();
+ TylLabel(lax, lay, style, phrase, strlen(phrase));
+ IPOP();
+ return;
+ }
+ if (depth <= 0)
+ {
+ if (depth < 0)
+ TylLabel(lax, lay, style, phrase, strlen(phrase));
+ return;
+ }
+ labitem = NewItem(Alabel);
+ labitem->UU.U7.labx = lax;
+ labitem->UU.U7.laby = lay;
+ labitem->UU.U7.fontstyle = style;
+ strcpy(labitem->UU.U7.labeltext, phrase);
+ pushItem(depth, labitem);
+}
+
+/*
+ * #### Insert new handlers here for new "primitives" i.e., names callable from the \special[tyl ...] level
+ */
+
+/*----------------------------------------------------------------*/
+/* transform the current bbox coordinates, and output the new one */
+static void
+newbbox(minx, maxx, miny, maxy, midx, midy, sx, sy, rot, tx, ty)
+ int32 *minx, *maxx, *miny, *maxy, midx, midy;
+ double sx, sy, rot;
+ int32 tx, ty;
+{
+ /* coords of full bbox for transformation [n/s][e/w][x/y] */
+ ScaledPts nex, ney, sex, sey, swx, swy, nwx, nwy;
+ int32 temp1, temp2;
+
+ /* describe and transform the bbox */
+ nwx = (int32) floor(*minx * sx + 0.5);
+ nex = (int32) floor(*maxx * sx + 0.5);
+ sex = (int32) floor(*maxx * sx + 0.5);
+ swx = (int32) floor(*minx * sx + 0.5);
+ ney = (int32) floor(*maxy * sy + 0.5);
+ nwy = (int32) floor(*maxy * sy + 0.5);
+ swy = (int32) floor(*miny * sy + 0.5);
+ sey = (int32) floor(*miny * sy + 0.5);
+
+ ptrotate(&nex, &ney, midx, midy, rot);
+ ptrotate(&sex, &sey, midx, midy, rot);
+ ptrotate(&swx, &swy, midx, midy, rot);
+ ptrotate(&nwx, &nwy, midx, midy, rot);
+
+ nex += tx;
+ sex += tx;
+ swx += tx;
+ nwx += tx;
+ ney += ty;
+ sey += ty;
+ swy += ty;
+ nwy += ty;
+ /* now find the actual extents of the bbox */
+ temp1 = min(nex, nwx);
+ temp2 = min(swx, sex);
+ *minx = min(temp1, temp2);
+
+ temp1 = min(ney, nwy);
+ temp2 = min(swy, sey);
+ *miny = min(temp1, temp2);
+
+ temp1 = max(nex, nwx);
+ temp2 = max(swx, sex);
+ *maxx = max(temp1, temp2);
+
+ temp1 = max(ney, nwy);
+ temp2 = max(swy, sey);
+ *maxy = max(temp1, temp2);
+}
+
+
+/*-----------------------------------------------*/
+/*
+ * find the bounding box of the list of primitives and/or sub-figures in this Item
+ */
+
+static void
+findBBox(blot, mnx, mxx, mny, mxy)
+ Item *blot;
+ int32 *mnx, *mxx, *mny, *mxy;
+{
+ Item *pi;
+ ScaledPts bmnx, bmxx, bmny, bmxy, midx, midy; /* bbox [min/max][x/y] */
+ ScaledPts tmnx, tmxx, tmny, tmxy; /* temporary, in case of recursion */
+ ScaledPts null1, null2, old1, old2;
+ double prescale, postscale;
+
+ bmnx = TWO24;
+ bmny = TWO24;
+ bmxx = -TWO24;
+ bmxy = -TWO24;
+ if (blot->kind == Afigure)
+ { /* afigure */
+ pi = blot->UU.U8.body->things;
+ while (pi != NULL)
+ {
+ /* find the current bbox of the list of items here */
+ if (pi->kind == Afigure)
+ { /* recur */
+ findBBox(pi, &tmnx, &tmxx, &tmny, &tmxy);
+ bmnx = min(bmnx, tmnx);
+ bmny = min(bmny, tmny);
+ bmxx = max(bmxx, tmxx);
+ bmxy = max(bmxy, tmxy);
+ }
+ else
+ {
+ bmnx = min(bmnx, pi->BBlx);
+ bmny = min(bmny, pi->BBby);
+ bmxx = max(bmxx, pi->BBrx);
+ bmxy = max(bmxy, pi->BBty);
+ }
+ pi = pi->nextitem;
+ } /* while */
+ /* now transform the items inside, AND the bbox */
+ pi = blot->UU.U8.body->things;
+ midx = (bmnx + bmxx) / 2;
+ midy = (bmny + bmxy) / 2;
+ /* now take care of any pre and post size requirements */
+ /* see also the "figurehandle" proc. */
+ /* #### Keep this scaling biz here, too, for now. May blast it later */
+ if (blot->UU.U8.preWid != 0 && blot->UU.U8.preHt != 0)
+ {
+ prescale = scalefitfactor(bmxx - bmnx, bmxy - bmny, blot->UU.U8.preWid,
+ blot->UU.U8.preHt);
+ blot->UU.U8.fsx *= prescale;
+ blot->UU.U8.fsy *= prescale;
+ }
+ if (blot->UU.U8.postWid != 0 && blot->UU.U8.postHt != 0)
+ { /* with */
+ postscale = scalefitfactor(bmxx - bmnx, bmxy - bmny,
+ blot->UU.U8.postWid, blot->UU.U8.postHt);
+ blot->UU.U8.fsx *= postscale;
+ blot->UU.U8.fsy *= postscale;
+ }
+
+ /* the actual scale-up is taken care of later in this proc. */
+ while (pi != NULL)
+ {
+ switch (pi->kind)
+ { /* with */
+
+ case Aline:
+ xfmlinepts(&pi->UU.U1.lx1, &pi->UU.U1.ly1, &pi->UU.U1.lx2,
+ &pi->UU.U1.ly2, 0, 0, midx, midy, 1.0,
+ blot->UU.U8.figtheta, blot->UU.U8.fdx, blot->UU.U8.fdy,
+ blot->UU.U8.fsx, blot->UU.U8.fsy);
+ break;
+
+ case Aspline:
+ xfmcontpts(pi->UU.U2.spts, pi->UU.U2.nsplknots, 0, 0, midx, midy,
+ 1.0, blot->UU.U8.figtheta, blot->UU.U8.fdx,
+ blot->UU.U8.fdy, blot->UU.U8.fsx, blot->UU.U8.fsy);
+ break;
+
+ case Attspline:
+ xfmcontpts(pi->UU.U3.ttpts, pi->UU.U3.nttknots, 0, 0, midx, midy,
+ 1.0, blot->UU.U8.figtheta, blot->UU.U8.fdx,
+ blot->UU.U8.fdy, blot->UU.U8.fsx, blot->UU.U8.fsy);
+ break;
+
+ case Aarc:
+ null1 = 0;
+ null2 = 0;
+ old1 = pi->UU.U6.acentx;
+ old2 = pi->UU.U6.acenty;
+ xfmlinepts(&pi->UU.U6.acentx, &pi->UU.U6.acenty, &null1, &null2, 0,
+ 0, midx, midy, 1.0, blot->UU.U8.figtheta, blot->UU.U8.fdx,
+ blot->UU.U8.fdy, blot->UU.U8.fsx, blot->UU.U8.fsy);
+ xfmcontpts(pi->UU.U6.arcpts, pi->UU.U6.narcknots + 1, 0, 0, old1,
+ old2, 1.0, blot->UU.U8.figtheta,
+ blot->UU.U8.fdx + pi->UU.U6.acentx - old1,
+ blot->UU.U8.fdy + pi->UU.U6.acenty - old2, blot->UU.U8.fsx,
+ blot->UU.U8.fsy);
+ break;
+
+ case Alabel:
+ null1 = 0;
+ null2 = 0;
+ xfmlinepts(&pi->UU.U7.labx, &pi->UU.U7.laby, &null1, &null2, 0, 0,
+ midx, midy, 1.0, blot->UU.U8.figtheta, blot->UU.U8.fdx,
+ blot->UU.U8.fdy, blot->UU.U8.fsx, blot->UU.U8.fsy);
+ break;
+
+ case Abeam: /* not transformable */
+ break;
+
+ case Atieslur: /* not transformable */
+ break;
+
+ case Afigure: /* do not need to re-transform */
+ break;
+ } /* case */
+ pi = pi->nextitem;
+ } /* while */
+ /* transform the bbox, and re-find the new bbox */
+ newbbox(&bmnx, &bmxx, &bmny, &bmxy, midx, midy, blot->UU.U8.fsx,
+ blot->UU.U8.fsy, blot->UU.U8.figtheta, blot->UU.U8.fdx,
+ blot->UU.U8.fdy);
+ *mnx = bmnx;
+ *mny = bmny;
+ *mxx = bmxx;
+ *mxy = bmxy;
+ return;
+ } /* if */
+ *mnx = blot->BBlx;
+ *mny = blot->BBby;
+ *mxx = blot->BBrx;
+ *mxy = blot->BBty;
+
+ /* some other primitive */
+ /* else */
+} /* findBBox */
+
+
+/*---------------------------------------------------------*/
+/*
+ * traverse the list, determining the current bounding box for the items. We need this to find the mid-point for doing any
+ * remaining rotations
+ */
+static void
+traverse(thefig, theitem)
+ Item *thefig, *theitem;
+{
+ ScaledPts minx, maxx, miny, maxy, curminx, curmaxx, curminy, curmaxy;
+
+ minx = TWO24;
+ maxx = -TWO24;
+ miny = TWO24;
+ maxy = -TWO24;
+
+ while (theitem != NULL)
+ { /* set the bounding box for this upper-level symbol defn */
+ if (theitem->kind == Afigure)
+ { /* recur */
+ findBBox(theitem, &curminx, &curmaxx, &curminy, &curmaxy);
+ theitem->BBlx = curminx;
+ theitem->BBby = curminy;
+ theitem->BBrx = curmaxx;
+ theitem->BBty = curmaxy;
+ /*
+ * reset the symbol's parameters since all the primitives in it have now been transformed according to
+ * the previous specifications
+ */
+ theitem->UU.U8.figtheta = 0.0;
+ theitem->UU.U8.fsx = 1.0;
+ theitem->UU.U8.fsy = 1.0;
+ theitem->UU.U8.fdx = 0;
+ theitem->UU.U8.fdy = 0;
+ theitem->UU.U8.preWid = 0;
+ theitem->UU.U8.preHt = 0;
+ theitem->UU.U8.postWid = 0;
+ theitem->UU.U8.postHt = 0; /* with */
+ minx = min(minx, curminx);
+ miny = min(miny, curminy);
+ maxx = max(maxx, curmaxx);
+ maxy = max(maxy, curmaxy);
+ } /* if a figure/symbol */
+ else
+ { /* a primitive */
+ minx = min(minx, theitem->BBlx);
+ miny = min(miny, theitem->BBby);
+ maxx = max(maxx, theitem->BBrx);
+ maxy = max(maxy, theitem->BBty); /* with */
+ } /* else */
+ theitem = theitem->nextitem;
+ } /* while */
+
+ thefig->BBlx = minx;
+ thefig->BBby = miny;
+ thefig->BBrx = maxx;
+ thefig->BBty = maxy; /* with */
+} /* traverse */
+
+
+#define DoItNow (-1)
+#define NoScale 1
+
+
+/* ----- Figure symbols ----- */
+/*---------------------------------------------------*/
+void
+figurehandle(globalsymlist, symbollist, dopush)
+ Item *globalsymlist, *symbollist;
+ int32 dopush;
+{
+ Item *pi, *curfig;
+ ScaledPts midx, midy, null1, null2, tmnx, tmny, tmxx, tmxy;
+ double prescale, postscale;
+
+ /*
+ * PUSH. traverse the lists (recursively if necessary) and compute the transformed points. Convert to 4th quadrant and
+ * offset by H & V. We can do this destructively here since we're going to output them right away anyhow. Then call
+ * each respective primitive handler with a level of -1 to indicate to do its job immediately. POP.
+ */
+ curfig = symbollist;
+ pi = curfig->UU.U8.body->things;
+ /*
+ * find and set the bounding box for the figure's sub-symbols and primitives
+ */
+ if (dopush > 0)
+ traverse(curfig, pi);
+
+ /*
+ * We eventually transform the items to 4th Quadrant DVI space and output them!
+ */
+
+ pi = curfig->UU.U8.body->things;
+
+ midy = (globalsymlist->BBby + globalsymlist->BBty) / 2;
+ midx = (globalsymlist->BBlx + globalsymlist->BBrx) / 2;
+
+ if (dopush > 0)
+ { /* the top-level figure for outputting */
+ /*
+ * convert the bounding box because we are about to enter into DVI space, and all calls to handlers hereafter
+ * are in terms of DVI coordinates
+ */
+
+
+ /*
+ * Since there were external specifications about this figure, fit the current figure's actual size to the
+ * "pre" size (specified by W marker) and/or to the "post" size (specified by the F marker). We do this by
+ * simple scaling, *without* changing the midpoint of the bounding box, just its extents
+ */
+ if (globalsymlist->UU.U8.preWid != 0 && globalsymlist->UU.U8.preHt != 0)
+ {
+ prescale = scalefitfactor(globalsymlist->BBrx - globalsymlist->BBlx,
+ globalsymlist->BBty - globalsymlist->BBby,
+ globalsymlist->UU.U8.preWid, globalsymlist->UU.U8.preHt);
+ globalsymlist->UU.U8.fsx *= prescale;
+ globalsymlist->UU.U8.fsy *= prescale;
+ }
+ if (globalsymlist->UU.U8.postWid != 0 && globalsymlist->UU.U8.postHt != 0)
+ {
+ postscale = scalefitfactor(globalsymlist->BBrx - globalsymlist->BBlx,
+ globalsymlist->BBty - globalsymlist->BBby,
+ globalsymlist->UU.U8.postWid, globalsymlist->UU.U8.postHt);
+ globalsymlist->UU.U8.fsx *= postscale;
+ globalsymlist->UU.U8.fsy *= postscale;
+ }
+ tmnx = globalsymlist->BBlx;
+ tmny = globalsymlist->BBby;
+ tmxx = globalsymlist->BBrx;
+ tmxy = globalsymlist->BBty;
+ xfmlinepts(&tmnx, &tmny, &tmxx, &tmxy, 0, 0, midx, midy, 1.0, 0.0, 0,
+ 0, globalsymlist->UU.U8.fsx, globalsymlist->UU.U8.fsy);
+
+ toplevelxfm(globalsymlist, globalsymlist, 0);
+
+ dviBBlx = tmnx;
+ dviBBrx = tmxx;
+ dviBBby = tmny;
+ dviBBty = tmxy;
+
+ xfmlinepts(&dviBBlx, &dviBBby, &dviBBrx, &dviBBty, 0, 0, midx, midy,
+ 1.0, 0.0, globalsymlist->BBlx - tmnx,
+ globalsymlist->BBby - tmny, 1.0, 1.0);
+
+ globalsymlist->UU.U8.fdx += globalsymlist->BBlx - tmnx;
+ globalsymlist->UU.U8.fdy += globalsymlist->BBby - tmny;
+
+ dvilinepts(&dviBBlx, &dviBBby, &dviBBrx, &dviBBty, h, v);
+ pgfigurenum++;
+
+ /* We are ready to output the figure to the page */
+ fprintf(logfile, "\nFigure #%ld on page %ld is approx. ",
+ pgfigurenum, currpagenum);
+ /*
+ * write(logfile,((globalsymlist^.BBty - globalsymlist^.BBby) div SPPERPT):0,' pts high and ');
+ * writeln(logfile,((globalsymlist^.BBrx - globalsymlist^.BBlx) div SPPERPT):0,' pts wide (actual size)');
+ */
+ fprintf(logfile, "%ld pts high and ", (tmxy - tmny) / SPPERPT);
+ fprintf(logfile, "%ld pts wide (actual size)\n", (tmxx - tmnx) / SPPERPT);
+ IPUSH();
+
+ }
+
+
+ while (pi != NULL)
+ {
+ switch (pi->kind)
+ { /* with */
+
+ case Aline:
+ dvilinepts(&pi->UU.U1.lx1, &pi->UU.U1.ly1, &pi->UU.U1.lx2,
+ &pi->UU.U1.ly2, h, v);
+ /* DVI h and v posit */
+ linehandle((int32) DoItNow, (double) NoScale, pi->UU.U1.lx1, pi->UU.U1.ly1,
+ pi->UU.U1.lx2, pi->UU.U1.ly2, 0, 0, pi->itemthick,
+ (VectKind) pi->itemvec, (LineStyle) pi->itempatt, dviBBlx,
+ dviBBrx, dviBBby, dviBBty, globalsymlist->UU.U8.fdx,
+ -globalsymlist->UU.U8.fdy, globalsymlist->UU.U8.fsx,
+ globalsymlist->UU.U8.fsy, -globalsymlist->UU.U8.figtheta);
+ /*
+ * p2c: x.p, line 4681: Internal error in checkvarchangedexpr: Too few arguments for EK_FUNCTION [267]
+ */
+ break;
+ /* Aline */
+
+ case Aspline:
+ dvicontpts(pi->UU.U2.spts, pi->UU.U2.nsplknots, h, v);
+ splinehandle((int32) DoItNow, (double) NoScale,
+ (SplineKind) pi->UU.U2.spltype, pi->UU.U2.sclosed,
+ pi->UU.U2.dosmarks, pi->UU.U2.spts, pi->UU.U2.nsplknots,
+ 0, 0, pi->itemthick, (VectKind) pi->itemvec,
+ (LineStyle) pi->itempatt, dviBBlx, dviBBrx, dviBBby,
+ dviBBty, globalsymlist->UU.U8.fdx,
+ -globalsymlist->UU.U8.fdy, globalsymlist->UU.U8.fsx,
+ globalsymlist->UU.U8.fsy, -globalsymlist->UU.U8.figtheta);
+ /*
+ * p2c: x.p, line 4693: Internal error in checkvarchangedexpr: Too few arguments for EK_FUNCTION [267]
+ */
+ break;
+ /* Aspline */
+
+ case Attspline:
+ dvicontpts(pi->UU.U3.ttpts, pi->UU.U3.nttknots, h, v);
+ ttsplhandle((int32) DoItNow, (double) NoScale,
+ (SplineKind) pi->UU.U3.tspltype, pi->UU.U3.tclosed,
+ pi->UU.U3.dottmarks, pi->UU.U3.ttpts, pi->UU.U3.ttarry,
+ pi->UU.U3.nttknots, 0, 0, (VectKind) pi->itemvec,
+ (LineStyle) pi->itempatt, dviBBlx, dviBBrx, dviBBby, dviBBty,
+ globalsymlist->UU.U8.fdx, -globalsymlist->UU.U8.fdy,
+ globalsymlist->UU.U8.fsx, globalsymlist->UU.U8.fsy,
+ -globalsymlist->UU.U8.figtheta);
+ /*
+ * p2c: x.p, line 4705: Internal error in checkvarchangedexpr: Too few arguments for EK_FUNCTION [267]
+ */
+ break;
+ /* Attspline */
+
+ case Abeam:
+ dvilinepts(&pi->UU.U4.bx1, &pi->UU.U4.by1, &pi->UU.U4.bx2,
+ &pi->UU.U4.by2, h, v);
+ beamhandle((int32) DoItNow, pi->UU.U4.staf, (BeamKind) pi->UU.U4.bkind,
+ pi->UU.U4.bx1, pi->UU.U4.by1, pi->UU.U4.bx2, pi->UU.U4.by2);
+ break;
+ /* Abeam */
+
+ case Atieslur:
+ dvicontpts(pi->UU.U5.tspts, pi->UU.U5.ntknots, h, v);
+ tieslurhandle((int32) DoItNow, pi->UU.U5.tspts, pi->UU.U5.ntknots,
+ pi->UU.U5.minth, pi->UU.U5.maxth);
+ break;
+ /* a tie or slur */
+
+ case Aarc:
+ dvicontpts(pi->UU.U6.arcpts, pi->UU.U6.narcknots + 1, h, v);
+ arccirclehandle((int32) DoItNow, (double) NoScale, pi->UU.U6.acentx,
+ pi->UU.U6.acenty, pi->UU.U6.aradius, pi->UU.U6.firstang,
+ pi->UU.U6.lastang, pi->UU.U6.arcpts,
+ pi->UU.U6.narcknots, 0, 0, pi->itemthick,
+ (VectKind) pi->itemvec, (LineStyle) pi->itempatt, dviBBlx,
+ dviBBrx, dviBBby, dviBBty, globalsymlist->UU.U8.fdx,
+ -globalsymlist->UU.U8.fdy, globalsymlist->UU.U8.fsx,
+ globalsymlist->UU.U8.fsy,
+ -globalsymlist->UU.U8.figtheta);
+ /*
+ * p2c: x.p, line 4729: Internal error in checkvarchangedexpr: Too few arguments for EK_FUNCTION [267]
+ */
+ break;
+ /* arc */
+
+ case Alabel:
+ null1 = 0;
+ null2 = 0;
+ dvilinepts(&pi->UU.U7.labx, &pi->UU.U7.laby, &null1, &null2, h, v);
+ labelhandle((int32) DoItNow, (double) NoScale, pi->UU.U7.labx,
+ pi->UU.U7.laby, 0, 0, pi->UU.U7.fontstyle,
+ pi->UU.U7.labeltext, globalsymlist->UU.U8.fdx,
+ -globalsymlist->UU.U8.fdy);
+ break;
+ /* label */
+
+ case Afigure: /* recur */
+ figurehandle(globalsymlist, pi, 0);
+ break;
+ /* another symbol */
+
+ } /* case */
+ /*
+ * p2c: x.p, line 4747: Internal error in checkvarchangedexpr: Too few arguments for EK_FUNCTION [267]
+ */
+ /*
+ * p2c: x.p, line 4747: Internal error in checkvarchangedexpr: Too few arguments for EK_FUNCTION [267]
+ */
+ /*
+ * p2c: x.p, line 4747: Internal error in checkvarchangedexpr: Too few arguments for EK_FUNCTION [267]
+ */
+ /*
+ * p2c: x.p, line 4747: Internal error in checkvarchangedexpr: Too few arguments for EK_FUNCTION [267]
+ */
+ pi = pi->nextitem;
+ } /* while */
+ if (dopush > 0)
+ IPOP();
+} /* figurehandle */
+
+#undef DoItNow
+#undef NoScale
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec1.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec1.300pk
new file mode 100644
index 0000000000..3c39da6f29
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec1.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec1.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec1.tfm
new file mode 100644
index 0000000000..f15f24f7cd
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec1.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec10.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec10.300pk
new file mode 100644
index 0000000000..9a1090b1bf
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec10.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec10.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec10.tfm
new file mode 100644
index 0000000000..bc11ebb747
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec10.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec11.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec11.300pk
new file mode 100644
index 0000000000..9a1090b1bf
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec11.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec11.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec11.tfm
new file mode 100644
index 0000000000..7424d046f7
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec11.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec12.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec12.300pk
new file mode 100644
index 0000000000..23bf540c9a
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec12.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec12.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec12.tfm
new file mode 100644
index 0000000000..3572250795
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec12.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec2.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec2.300pk
new file mode 100644
index 0000000000..8f7709b577
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec2.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec2.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec2.tfm
new file mode 100644
index 0000000000..481df4a70c
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec2.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec3.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec3.300pk
new file mode 100644
index 0000000000..8f7709b577
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec3.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec3.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec3.tfm
new file mode 100644
index 0000000000..da3837af01
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec3.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec4.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec4.300pk
new file mode 100644
index 0000000000..e03445d945
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec4.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec4.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec4.tfm
new file mode 100644
index 0000000000..2605898dab
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec4.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec5.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec5.300pk
new file mode 100644
index 0000000000..e03445d945
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec5.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec5.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec5.tfm
new file mode 100644
index 0000000000..4b28abc081
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec5.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec6.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec6.300pk
new file mode 100644
index 0000000000..d42181435b
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec6.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec6.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec6.tfm
new file mode 100644
index 0000000000..b6075890fe
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec6.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec7.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec7.300pk
new file mode 100644
index 0000000000..d42181435b
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec7.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec7.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec7.tfm
new file mode 100644
index 0000000000..66ac443f72
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec7.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec8.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec8.300pk
new file mode 100644
index 0000000000..a8447035b4
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec8.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec8.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec8.tfm
new file mode 100644
index 0000000000..499ec767a7
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec8.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec9.300pk b/macros/latex209/contrib/textyl/vecfonts/cvec9.300pk
new file mode 100644
index 0000000000..a8447035b4
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec9.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/cvec9.tfm b/macros/latex209/contrib/textyl/vecfonts/cvec9.tfm
new file mode 100644
index 0000000000..1bc6bd0a52
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/cvec9.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec1.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec1.300pk
new file mode 100644
index 0000000000..3c39da6f29
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec1.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec1.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec1.tfm
new file mode 100644
index 0000000000..f15f24f7cd
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec1.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec10.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec10.300pk
new file mode 100644
index 0000000000..45674bbc05
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec10.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec10.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec10.tfm
new file mode 100644
index 0000000000..7d795db2fe
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec10.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec11.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec11.300pk
new file mode 100644
index 0000000000..45674bbc05
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec11.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec11.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec11.tfm
new file mode 100644
index 0000000000..21dacc2855
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec11.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec12.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec12.300pk
new file mode 100644
index 0000000000..e15485356e
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec12.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec12.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec12.tfm
new file mode 100644
index 0000000000..ef0926a826
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec12.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec2.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec2.300pk
new file mode 100644
index 0000000000..994a8e36aa
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec2.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec2.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec2.tfm
new file mode 100644
index 0000000000..377b92782b
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec2.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec3.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec3.300pk
new file mode 100644
index 0000000000..994a8e36aa
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec3.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec3.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec3.tfm
new file mode 100644
index 0000000000..0a482b0d51
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec3.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec4.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec4.300pk
new file mode 100644
index 0000000000..8dad1e314a
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec4.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec4.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec4.tfm
new file mode 100644
index 0000000000..8d0dddacd3
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec4.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec5.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec5.300pk
new file mode 100644
index 0000000000..8dad1e314a
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec5.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec5.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec5.tfm
new file mode 100644
index 0000000000..08164eb704
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec5.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec6.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec6.300pk
new file mode 100644
index 0000000000..4fc472f53c
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec6.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec6.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec6.tfm
new file mode 100644
index 0000000000..bbcde71122
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec6.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec7.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec7.300pk
new file mode 100644
index 0000000000..4fc472f53c
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec7.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec7.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec7.tfm
new file mode 100644
index 0000000000..22ed363a84
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec7.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec8.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec8.300pk
new file mode 100644
index 0000000000..e23662dd66
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec8.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec8.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec8.tfm
new file mode 100644
index 0000000000..080ebcd67b
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec8.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec9.300pk b/macros/latex209/contrib/textyl/vecfonts/hvec9.300pk
new file mode 100644
index 0000000000..e23662dd66
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec9.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/hvec9.tfm b/macros/latex209/contrib/textyl/vecfonts/hvec9.tfm
new file mode 100644
index 0000000000..d1b7993f3d
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/hvec9.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/mf/README b/macros/latex209/contrib/textyl/vecfonts/mf/README
new file mode 100644
index 0000000000..7ee6c2e5da
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/mf/README
@@ -0,0 +1,9 @@
+vecbase.mf is the original MF79 source.
+
+vecbase2.mf is the MF84 source provided by a kind reader of the TeX
+newsgroup. The .bat files are for an Amiga ST. I have written a simple
+Unix sh script that creates wrapper jobs for all 36 vector fonts. If
+you are using a backend like dvips, all you have to do is put these MF
+wrappers and vecbase2.mf where MF can find them and the backend will
+fire up MF to create the fonts as needed. Of course you also need to
+install the tfm files in ../ where TeX can find them.
diff --git a/macros/latex209/contrib/textyl/vecfonts/mf/makevec.bat b/macros/latex209/contrib/textyl/vecfonts/mf/makevec.bat
new file mode 100644
index 0000000000..d0b771305e
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/mf/makevec.bat
@@ -0,0 +1,5 @@
+#------- File "makevec.bat" --------------------------------------------
+#------- The 36 TeXtyl fonts are created by the command 'makevec'. ----
+echo on
+for %%w in ( 1 2 3 4 5 6 7 8 9 10 11 12 ) do c:\bat\makevec2.bat %%w
+#------- End of "makevec.bat" ------------------------------------------
diff --git a/macros/latex209/contrib/textyl/vecfonts/mf/makevec2.bat b/macros/latex209/contrib/textyl/vecfonts/mf/makevec2.bat
new file mode 100644
index 0000000000..deb5a7aca7
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/mf/makevec2.bat
@@ -0,0 +1,13 @@
+#------- File "makevec2.bat", used in the above, -----------------------
+#------- (for lack of decent loops only). ------------------------------
+c:
+cd c:\vec\pxl1200
+e:
+cd e:\mf
+mmf \relax;input modes;mode := epson;w0 := %1; w1 := %1;input vecbase2;end
+gftopk e:modes.240 c:cvec%1
+mmf \relax;input modes;mode := epson;w0 := 1; w1 := %1;input vecbase2;end
+gftopk e:modes.240 c:vvec%1
+mmf \relax;input modes;mode := epson;w0 := %1; w1 := 1;input vecbase2;end
+gftopk e:modes.240 c:hvec%1
+#------- End of "makevec2.bat" ------------------------------------------
diff --git a/macros/latex209/contrib/textyl/vecfonts/mf/makewrappers.sh b/macros/latex209/contrib/textyl/vecfonts/mf/makewrappers.sh
new file mode 100644
index 0000000000..58bd8dad84
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/mf/makewrappers.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+for i in 1 2 3 4 5 6 7 8 9 10 11 12
+do
+ echo "w0=$i; w1=$i; input vecbase2; end" > cvec$i.mf
+ echo "w0=1; w1=$i; input vecbase2; end" > vvec$i.mf
+ echo "w0=$i; w1=1; input vecbase2; end" > hvec$i.mf
+done
diff --git a/macros/latex209/contrib/textyl/vecfonts/mf/vecbase.mf b/macros/latex209/contrib/textyl/vecfonts/mf/vecbase.mf
new file mode 100644
index 0000000000..7d8fffc353
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/mf/vecbase.mf
@@ -0,0 +1,1151 @@
+% Vector font base
+% Copyright (c) 1984,1985,1986, 1987 John S. Renner
+% All rights reserved.
+%
+%
+%
+% the following variables must be defined
+% before inputting this file
+% mode (the resolution:: e.g., islaprinter or isxerox, etc.)
+% w0 (the width of the pen in "vec units")
+% w1 (the height of the pen in "vec units")
+% (note that w0 == w1 for a circular pen)
+% the type of pen to use (cpen, vpen, hpen)
+%
+pxlmode; tfmmode; fntmode;
+islaprinter = 100; % just names
+isxerox = 2700;
+issun = 500;
+
+if mode = islaprinter:
+ mag = 0.66; %for DEC LA100 printer
+else: if mode = isxerox:
+ mag = 1.5; %for Xerox X2700
+else: if mode = issun:
+ mag = .59;
+fi; fi; fi;
+
+
+ptsperinch=72.27;
+spperinch=(65536.ptsperinch);
+pixperinch=(200.mag);
+pixpersp = (pixperinch / spperinch);
+vecunit = 1; % just a name
+vecmeasure = 16384; % in scaled points 2^14 sp
+ptsperpixel = (ptsperinch / pixperinch);
+pixpervecunit = pixpersp.vecmeasure;
+ptspervecunit = ptsperpixel.pixpervecunit;
+
+hresolution pixperinch;
+vresolution pixperinch;
+
+%
+% we allow only Odd sized diameters for vector pens
+% to avoid the off-by-one-half-pixel errors
+%
+
+tempa = w1.pixpervecunit; % go from the user-specification
+if tempa < 1 : % of pen size, to pixels
+ new w1; w1 = 1; % taking care of underflow
+else:
+ new w1; w1 = 2*(round ((tempa - 1)/2)) + 1;
+fi;
+
+tempb = w0.pixpervecunit;
+if tempb < 1 :
+ new w0; w0 = 1;
+else:
+ new w0; w0 = 2*(round ((tempb - 1)/2)) + 1;
+fi;
+
+% pre-calculate some TeX information so that we can
+% adjust it if necessary
+
+ds = ((16 vecunit).ptspervecunit); %the design size in points
+if ds < 1.0 :
+ new ds; ds = 1.0;
+fi;
+
+%-----------------Tex information---------------------
+% w0 is horizontal width
+% w1 is vertical height
+
+magnification mag;
+designsize ds;
+fontidentifier "GRAPHIC-VECTORS";
+codingscheme "ASCII";
+maxht ((w1/2) + 16.vecunit.pixpervecunit); %in pixels I think
+
+texinfo 0, % -- but we'll use it for our own use
+ 0, % --and interpret them in our own way
+(w0.ptsperpixel), % W0 the horizontal width
+(w1.ptsperpixel), % W1 the vertical width
+(16.vecunit.ptspervecunit), % Maxvectorlength
+(16.vecunit.ptspervecunit), % "
+ 0; % empty
+
+
+%
+% set the pen dimensions
+%
+eqtrace;
+vpenht = round (w1);
+hpenwd = round (w0);
+if w1 > w0 : % probably a vpen
+ w8 = w1;
+else: %probably a hpen
+ w8 = w0;
+fi;
+no eqtrace;
+
+
+no penreset; % VERY IMPORTANT
+no pagewarning;
+
+
+
+subroutine vect (var dx)
+ (var dy):
+x0 = 0;
+y0 = 0;
+if dx > 0 :
+ x1 = (dx.pixpervecunit) + 1; % what's an extra pixel among friends?
+else:
+ x1 = (dx.pixpervecunit);
+fi;
+
+if dy > 0 :
+ y1 = (dy.pixpervecunit) + 1;
+else: if dy = 0 :
+ y1 = (dy.pixpervecunit) + 0;
+else : if dy < 0 :
+ y1 = (dy.pixpervecunit) - 1;
+fi; fi; fi;
+
+w8 draw 0..1.
+
+
+
+charcode 0;
+charht (( 15.9688.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 0.9981.vecunit).ptspervecunit);
+call vect ( 0.9981, 15.9688).
+
+
+
+charcode 1;
+charht (( 15.8764.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 1.9846.vecunit).ptspervecunit);
+call vect ( 1.9846, 15.8764).
+
+
+
+charcode 2;
+charht (( 15.7260.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 2.9486.vecunit).ptspervecunit);
+call vect ( 2.9486, 15.7260).
+
+
+
+charcode 3;
+charht (( 15.5223.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 3.8806.vecunit).ptspervecunit);
+call vect ( 3.8806, 15.5223).
+
+
+
+charcode 4;
+charht (( 15.2717.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 4.7724.vecunit).ptspervecunit);
+call vect ( 4.7724, 15.2717).
+
+
+
+charcode 5;
+charht (( 14.9813.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 5.6180.vecunit).ptspervecunit);
+call vect ( 5.6180, 14.9813).
+
+
+
+charcode 6;
+charht (( 14.6585.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 6.4131.vecunit).ptspervecunit);
+call vect ( 6.4131, 14.6585).
+
+
+
+charcode 7;
+charht (( 14.3108.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 7.1554.vecunit).ptspervecunit);
+call vect ( 7.1554, 14.3108).
+
+
+
+charcode 8;
+charht (( 13.9452.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 7.8442.vecunit).ptspervecunit);
+call vect ( 7.8442, 13.9452).
+
+
+
+charcode 9;
+charht (( 13.5680.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 8.4800.vecunit).ptspervecunit);
+call vect ( 8.4800, 13.5680).
+
+
+
+charcode 10;
+charht (( 13.1847.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 9.0645.vecunit).ptspervecunit);
+call vect ( 9.0645, 13.1847).
+
+
+
+charcode 11;
+charht (( 12.8000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 9.6000.vecunit).ptspervecunit);
+call vect ( 9.6000, 12.8000).
+
+
+
+charcode 12;
+charht (( 12.4178.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 10.0895.vecunit).ptspervecunit);
+call vect ( 10.0895, 12.4178).
+
+
+
+charcode 13;
+charht (( 12.0412.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 10.5361.vecunit).ptspervecunit);
+call vect ( 10.5361, 12.0412).
+
+
+
+charcode 14;
+charht (( 11.6726.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 10.9431.vecunit).ptspervecunit);
+call vect ( 10.9431, 11.6726).
+
+
+
+charcode 15;
+charht (( 11.3137.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 11.3137.vecunit).ptspervecunit);
+call vect ( 11.3137, 11.3137).
+
+
+
+charcode 16;
+charht (( 10.9431.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 11.6726.vecunit).ptspervecunit);
+call vect ( 11.6726, 10.9431).
+
+
+
+charcode 17;
+charht (( 10.5361.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 12.0412.vecunit).ptspervecunit);
+call vect ( 12.0412, 10.5361).
+
+
+
+charcode 18;
+charht (( 10.0895.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 12.4178.vecunit).ptspervecunit);
+call vect ( 12.4178, 10.0895).
+
+
+
+charcode 19;
+charht (( 9.6000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 12.8000.vecunit).ptspervecunit);
+call vect ( 12.8000, 9.6000).
+
+
+
+charcode 20;
+charht (( 9.0645.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 13.1847.vecunit).ptspervecunit);
+call vect ( 13.1847, 9.0645).
+
+
+
+charcode 21;
+charht (( 8.4800.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 13.5680.vecunit).ptspervecunit);
+call vect ( 13.5680, 8.4800).
+
+
+
+charcode 22;
+charht (( 7.8442.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 13.9452.vecunit).ptspervecunit);
+call vect ( 13.9452, 7.8442).
+
+
+
+charcode 23;
+charht (( 7.1554.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 14.3108.vecunit).ptspervecunit);
+call vect ( 14.3108, 7.1554).
+
+
+
+charcode 24;
+charht (( 6.4131.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 14.6585.vecunit).ptspervecunit);
+call vect ( 14.6585, 6.4131).
+
+
+
+charcode 25;
+charht (( 5.6180.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 14.9813.vecunit).ptspervecunit);
+call vect ( 14.9813, 5.6180).
+
+
+
+charcode 26;
+charht (( 4.7724.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 15.2717.vecunit).ptspervecunit);
+call vect ( 15.2717, 4.7724).
+
+
+
+charcode 27;
+charht (( 3.8806.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 15.5223.vecunit).ptspervecunit);
+call vect ( 15.5223, 3.8806).
+
+
+
+charcode 28;
+charht (( 2.9486.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 15.7260.vecunit).ptspervecunit);
+call vect ( 15.7260, 2.9486).
+
+
+
+charcode 29;
+charht (( 1.9846.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 15.8764.vecunit).ptspervecunit);
+call vect ( 15.8764, 1.9846).
+
+
+
+charcode 30;
+charht (( 0.9981.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 15.9688.vecunit).ptspervecunit);
+call vect ( 15.9688, 0.9981).
+
+
+
+charcode 31;
+charht (( 0.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 16.0000.vecunit).ptspervecunit);
+call vect ( 16.0000, 0.0000).
+
+
+
+charcode 32;
+charht 0;
+chardp (( 0.9981.vecunit).ptspervecunit);
+charwd (( 15.9688.vecunit).ptspervecunit);
+call vect ( 15.9688, -0.9981).
+
+
+
+charcode 33;
+charht 0;
+chardp (( 1.9846.vecunit).ptspervecunit);
+charwd (( 15.8764.vecunit).ptspervecunit);
+call vect ( 15.8764, -1.9846).
+
+
+
+charcode 34;
+charht 0;
+chardp (( 2.9486.vecunit).ptspervecunit);
+charwd (( 15.7260.vecunit).ptspervecunit);
+call vect ( 15.7260, -2.9486).
+
+
+
+charcode 35;
+charht 0;
+chardp (( 3.8806.vecunit).ptspervecunit);
+charwd (( 15.5223.vecunit).ptspervecunit);
+call vect ( 15.5223, -3.8806).
+
+
+
+charcode 36;
+charht 0;
+chardp (( 4.7724.vecunit).ptspervecunit);
+charwd (( 15.2717.vecunit).ptspervecunit);
+call vect ( 15.2717, -4.7724).
+
+
+
+charcode 37;
+charht 0;
+chardp (( 5.6180.vecunit).ptspervecunit);
+charwd (( 14.9813.vecunit).ptspervecunit);
+call vect ( 14.9813, -5.6180).
+
+
+
+charcode 38;
+charht 0;
+chardp (( 6.4131.vecunit).ptspervecunit);
+charwd (( 14.6585.vecunit).ptspervecunit);
+call vect ( 14.6585, -6.4131).
+
+
+
+charcode 39;
+charht 0;
+chardp (( 7.1554.vecunit).ptspervecunit);
+charwd (( 14.3108.vecunit).ptspervecunit);
+call vect ( 14.3108, -7.1554).
+
+
+
+charcode 40;
+charht 0;
+chardp (( 7.8442.vecunit).ptspervecunit);
+charwd (( 13.9452.vecunit).ptspervecunit);
+call vect ( 13.9452, -7.8442).
+
+
+
+charcode 41;
+charht 0;
+chardp (( 8.4800.vecunit).ptspervecunit);
+charwd (( 13.5680.vecunit).ptspervecunit);
+call vect ( 13.5680, -8.4800).
+
+
+
+charcode 42;
+charht 0;
+chardp (( 9.0645.vecunit).ptspervecunit);
+charwd (( 13.1847.vecunit).ptspervecunit);
+call vect ( 13.1847, -9.0645).
+
+
+
+charcode 43;
+charht 0;
+chardp (( 9.6000.vecunit).ptspervecunit);
+charwd (( 12.8000.vecunit).ptspervecunit);
+call vect ( 12.8000, -9.6000).
+
+
+
+charcode 44;
+charht 0;
+chardp (( 10.0895.vecunit).ptspervecunit);
+charwd (( 12.4178.vecunit).ptspervecunit);
+call vect ( 12.4178, -10.0895).
+
+
+
+charcode 45;
+charht 0;
+chardp (( 10.5361.vecunit).ptspervecunit);
+charwd (( 12.0412.vecunit).ptspervecunit);
+call vect ( 12.0412, -10.5361).
+
+
+
+charcode 46;
+charht 0;
+chardp (( 10.9431.vecunit).ptspervecunit);
+charwd (( 11.6726.vecunit).ptspervecunit);
+call vect ( 11.6726, -10.9431).
+
+
+
+charcode 47;
+charht 0;
+chardp (( 11.3137.vecunit).ptspervecunit);
+charwd (( 11.3137.vecunit).ptspervecunit);
+call vect ( 11.3137, -11.3137).
+
+
+
+charcode 48;
+charht 0;
+chardp (( 11.6726.vecunit).ptspervecunit);
+charwd (( 10.9431.vecunit).ptspervecunit);
+call vect ( 10.9431, -11.6726).
+
+
+
+charcode 49;
+charht 0;
+chardp (( 12.0412.vecunit).ptspervecunit);
+charwd (( 10.5361.vecunit).ptspervecunit);
+call vect ( 10.5361, -12.0412).
+
+
+
+charcode 50;
+charht 0;
+chardp (( 12.4178.vecunit).ptspervecunit);
+charwd (( 10.0895.vecunit).ptspervecunit);
+call vect ( 10.0895, -12.4178).
+
+
+
+charcode 51;
+charht 0;
+chardp (( 12.8000.vecunit).ptspervecunit);
+charwd (( 9.6000.vecunit).ptspervecunit);
+call vect ( 9.6000, -12.8000).
+
+
+
+charcode 52;
+charht 0;
+chardp (( 13.1847.vecunit).ptspervecunit);
+charwd (( 9.0645.vecunit).ptspervecunit);
+call vect ( 9.0645, -13.1847).
+
+
+
+charcode 53;
+charht 0;
+chardp (( 13.5680.vecunit).ptspervecunit);
+charwd (( 8.4800.vecunit).ptspervecunit);
+call vect ( 8.4800, -13.5680).
+
+
+
+charcode 54;
+charht 0;
+chardp (( 13.9452.vecunit).ptspervecunit);
+charwd (( 7.8442.vecunit).ptspervecunit);
+call vect ( 7.8442, -13.9452).
+
+
+
+charcode 55;
+charht 0;
+chardp (( 14.3108.vecunit).ptspervecunit);
+charwd (( 7.1554.vecunit).ptspervecunit);
+call vect ( 7.1554, -14.3108).
+
+
+
+charcode 56;
+charht 0;
+chardp (( 14.6585.vecunit).ptspervecunit);
+charwd (( 6.4131.vecunit).ptspervecunit);
+call vect ( 6.4131, -14.6585).
+
+
+
+charcode 57;
+charht 0;
+chardp (( 14.9813.vecunit).ptspervecunit);
+charwd (( 5.6180.vecunit).ptspervecunit);
+call vect ( 5.6180, -14.9813).
+
+
+
+charcode 58;
+charht 0;
+chardp (( 15.2717.vecunit).ptspervecunit);
+charwd (( 4.7724.vecunit).ptspervecunit);
+call vect ( 4.7724, -15.2717).
+
+
+
+charcode 59;
+charht 0;
+chardp (( 15.5223.vecunit).ptspervecunit);
+charwd (( 3.8806.vecunit).ptspervecunit);
+call vect ( 3.8806, -15.5223).
+
+
+
+charcode 60;
+charht 0;
+chardp (( 15.7260.vecunit).ptspervecunit);
+charwd (( 2.9486.vecunit).ptspervecunit);
+call vect ( 2.9486, -15.7260).
+
+
+
+charcode 61;
+charht 0;
+chardp (( 15.8764.vecunit).ptspervecunit);
+charwd (( 1.9846.vecunit).ptspervecunit);
+call vect ( 1.9846, -15.8764).
+
+
+
+charcode 62;
+charht 0;
+chardp (( 15.9688.vecunit).ptspervecunit);
+charwd (( 0.9981.vecunit).ptspervecunit);
+call vect ( 0.9981, -15.9688).
+
+
+
+charcode 63;
+charht (( 8.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( -0.0000.vecunit).ptspervecunit);
+call vect ( -0.0000, 8.0000).
+
+
+
+charcode 64;
+charht (( 7.9382.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 0.9923.vecunit).ptspervecunit);
+call vect ( 0.9923, 7.9382).
+
+
+
+charcode 65;
+charht (( 7.7611.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 1.9403.vecunit).ptspervecunit);
+call vect ( 1.9403, 7.7611).
+
+
+
+charcode 66;
+charht (( 7.4906.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 2.8090.vecunit).ptspervecunit);
+call vect ( 2.8090, 7.4906).
+
+
+
+charcode 67;
+charht (( 7.1554.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 3.5777.vecunit).ptspervecunit);
+call vect ( 3.5777, 7.1554).
+
+
+
+charcode 68;
+charht (( 6.7840.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 4.2400.vecunit).ptspervecunit);
+call vect ( 4.2400, 6.7840).
+
+
+
+charcode 69;
+charht (( 6.4000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 4.8000.vecunit).ptspervecunit);
+call vect ( 4.8000, 6.4000).
+
+
+
+charcode 70;
+charht (( 6.0206.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 5.2680.vecunit).ptspervecunit);
+call vect ( 5.2680, 6.0206).
+
+
+
+charcode 71;
+charht (( 5.6569.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 5.6569.vecunit).ptspervecunit);
+call vect ( 5.6569, 5.6569).
+
+
+
+charcode 72;
+charht (( 5.2680.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 6.0206.vecunit).ptspervecunit);
+call vect ( 6.0206, 5.2680).
+
+
+
+charcode 73;
+charht (( 4.8000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 6.4000.vecunit).ptspervecunit);
+call vect ( 6.4000, 4.8000).
+
+
+
+charcode 74;
+charht (( 4.2400.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 6.7840.vecunit).ptspervecunit);
+call vect ( 6.7840, 4.2400).
+
+
+
+charcode 75;
+charht (( 3.5777.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 7.1554.vecunit).ptspervecunit);
+call vect ( 7.1554, 3.5777).
+
+
+
+charcode 76;
+charht (( 2.8090.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 7.4906.vecunit).ptspervecunit);
+call vect ( 7.4906, 2.8090).
+
+
+
+charcode 77;
+charht (( 1.9403.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 7.7611.vecunit).ptspervecunit);
+call vect ( 7.7611, 1.9403).
+
+
+
+charcode 78;
+charht (( 0.9923.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 7.9382.vecunit).ptspervecunit);
+call vect ( 7.9382, 0.9923).
+
+
+
+charcode 79;
+charht (( 0.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 8.0000.vecunit).ptspervecunit);
+call vect ( 8.0000, 0.0000).
+
+
+
+charcode 80;
+charht 0;
+chardp (( 0.9923.vecunit).ptspervecunit);
+charwd (( 7.9382.vecunit).ptspervecunit);
+call vect ( 7.9382, -0.9923).
+
+
+
+charcode 81;
+charht 0;
+chardp (( 1.9403.vecunit).ptspervecunit);
+charwd (( 7.7611.vecunit).ptspervecunit);
+call vect ( 7.7611, -1.9403).
+
+
+
+charcode 82;
+charht 0;
+chardp (( 2.8090.vecunit).ptspervecunit);
+charwd (( 7.4906.vecunit).ptspervecunit);
+call vect ( 7.4906, -2.8090).
+
+
+
+charcode 83;
+charht 0;
+chardp (( 3.5777.vecunit).ptspervecunit);
+charwd (( 7.1554.vecunit).ptspervecunit);
+call vect ( 7.1554, -3.5777).
+
+
+
+charcode 84;
+charht 0;
+chardp (( 4.2400.vecunit).ptspervecunit);
+charwd (( 6.7840.vecunit).ptspervecunit);
+call vect ( 6.7840, -4.2400).
+
+
+
+charcode 85;
+charht 0;
+chardp (( 4.8000.vecunit).ptspervecunit);
+charwd (( 6.4000.vecunit).ptspervecunit);
+call vect ( 6.4000, -4.8000).
+
+
+
+charcode 86;
+charht 0;
+chardp (( 5.2680.vecunit).ptspervecunit);
+charwd (( 6.0206.vecunit).ptspervecunit);
+call vect ( 6.0206, -5.2680).
+
+
+
+charcode 87;
+charht 0;
+chardp (( 5.6569.vecunit).ptspervecunit);
+charwd (( 5.6569.vecunit).ptspervecunit);
+call vect ( 5.6569, -5.6569).
+
+
+
+charcode 88;
+charht 0;
+chardp (( 6.0206.vecunit).ptspervecunit);
+charwd (( 5.2680.vecunit).ptspervecunit);
+call vect ( 5.2680, -6.0206).
+
+
+
+charcode 89;
+charht 0;
+chardp (( 6.4000.vecunit).ptspervecunit);
+charwd (( 4.8000.vecunit).ptspervecunit);
+call vect ( 4.8000, -6.4000).
+
+
+
+charcode 90;
+charht 0;
+chardp (( 6.7840.vecunit).ptspervecunit);
+charwd (( 4.2400.vecunit).ptspervecunit);
+call vect ( 4.2400, -6.7840).
+
+
+
+charcode 91;
+charht 0;
+chardp (( 7.1554.vecunit).ptspervecunit);
+charwd (( 3.5777.vecunit).ptspervecunit);
+call vect ( 3.5777, -7.1554).
+
+
+
+charcode 92;
+charht 0;
+chardp (( 7.4906.vecunit).ptspervecunit);
+charwd (( 2.8090.vecunit).ptspervecunit);
+call vect ( 2.8090, -7.4906).
+
+
+
+charcode 93;
+charht 0;
+chardp (( 7.7611.vecunit).ptspervecunit);
+charwd (( 1.9403.vecunit).ptspervecunit);
+call vect ( 1.9403, -7.7611).
+
+
+
+charcode 94;
+charht 0;
+chardp (( 7.9382.vecunit).ptspervecunit);
+charwd (( 0.9923.vecunit).ptspervecunit);
+call vect ( 0.9923, -7.9382).
+
+
+
+charcode 95;
+charht 0;
+chardp (( 8.0000.vecunit).ptspervecunit);
+charwd (( -0.0000.vecunit).ptspervecunit);
+call vect ( -0.0000, -8.0000).
+
+
+
+charcode 96;
+charht (( 4.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( -0.0000.vecunit).ptspervecunit);
+call vect ( -0.0000, 4.0000).
+
+
+
+charcode 97;
+charht (( 3.8806.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 0.9701.vecunit).ptspervecunit);
+call vect ( 0.9701, 3.8806).
+
+
+
+charcode 98;
+charht (( 3.5777.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 1.7889.vecunit).ptspervecunit);
+call vect ( 1.7889, 3.5777).
+
+
+
+charcode 99;
+charht (( 3.2000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 2.4000.vecunit).ptspervecunit);
+call vect ( 2.4000, 3.2000).
+
+
+
+charcode 100;
+charht (( 2.8284.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 2.8284.vecunit).ptspervecunit);
+call vect ( 2.8284, 2.8284).
+
+
+
+charcode 101;
+charht (( 2.4000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 3.2000.vecunit).ptspervecunit);
+call vect ( 3.2000, 2.4000).
+
+
+
+charcode 102;
+charht (( 1.7889.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 3.5777.vecunit).ptspervecunit);
+call vect ( 3.5777, 1.7889).
+
+
+
+charcode 103;
+charht (( 0.9701.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 3.8806.vecunit).ptspervecunit);
+call vect ( 3.8806, 0.9701).
+
+
+
+charcode 104;
+charht (( 0.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 4.0000.vecunit).ptspervecunit);
+call vect ( 4.0000, 0.0000).
+
+
+
+charcode 105;
+charht 0;
+chardp (( 0.9701.vecunit).ptspervecunit);
+charwd (( 3.8806.vecunit).ptspervecunit);
+call vect ( 3.8806, -0.9701).
+
+
+
+charcode 106;
+charht 0;
+chardp (( 1.7889.vecunit).ptspervecunit);
+charwd (( 3.5777.vecunit).ptspervecunit);
+call vect ( 3.5777, -1.7889).
+
+
+
+charcode 107;
+charht 0;
+chardp (( 2.4000.vecunit).ptspervecunit);
+charwd (( 3.2000.vecunit).ptspervecunit);
+call vect ( 3.2000, -2.4000).
+
+
+
+charcode 108;
+charht 0;
+chardp (( 2.8284.vecunit).ptspervecunit);
+charwd (( 2.8284.vecunit).ptspervecunit);
+call vect ( 2.8284, -2.8284).
+
+
+
+charcode 109;
+charht 0;
+chardp (( 3.2000.vecunit).ptspervecunit);
+charwd (( 2.4000.vecunit).ptspervecunit);
+call vect ( 2.4000, -3.2000).
+
+
+
+charcode 110;
+charht 0;
+chardp (( 3.5777.vecunit).ptspervecunit);
+charwd (( 1.7889.vecunit).ptspervecunit);
+call vect ( 1.7889, -3.5777).
+
+
+
+charcode 111;
+charht 0;
+chardp (( 3.8806.vecunit).ptspervecunit);
+charwd (( 0.9701.vecunit).ptspervecunit);
+call vect ( 0.9701, -3.8806).
+
+
+
+charcode 112;
+charht 0;
+chardp (( 4.0000.vecunit).ptspervecunit);
+charwd (( -0.0000.vecunit).ptspervecunit);
+call vect ( -0.0000, -4.0000).
+
+
+
+charcode 113;
+charht (( 2.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( -0.0000.vecunit).ptspervecunit);
+call vect ( -0.0000, 2.0000).
+
+
+
+charcode 114;
+charht (( 1.7889.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 0.8944.vecunit).ptspervecunit);
+call vect ( 0.8944, 1.7889).
+
+
+
+charcode 115;
+charht (( 1.4142.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 1.4142.vecunit).ptspervecunit);
+call vect ( 1.4142, 1.4142).
+
+
+
+charcode 116;
+charht (( 0.8944.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 1.7889.vecunit).ptspervecunit);
+call vect ( 1.7889, 0.8944).
+
+
+
+charcode 117;
+charht (( 0.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 2.0000.vecunit).ptspervecunit);
+call vect ( 2.0000, 0.0000).
+
+
+
+charcode 118;
+charht 0;
+chardp (( 0.8944.vecunit).ptspervecunit);
+charwd (( 1.7889.vecunit).ptspervecunit);
+call vect ( 1.7889, -0.8944).
+
+
+
+charcode 119;
+charht 0;
+chardp (( 1.4142.vecunit).ptspervecunit);
+charwd (( 1.4142.vecunit).ptspervecunit);
+call vect ( 1.4142, -1.4142).
+
+
+
+charcode 120;
+charht 0;
+chardp (( 1.7889.vecunit).ptspervecunit);
+charwd (( 0.8944.vecunit).ptspervecunit);
+call vect ( 0.8944, -1.7889).
+
+
+
+charcode 121;
+charht 0;
+chardp (( 2.0000.vecunit).ptspervecunit);
+charwd (( -0.0000.vecunit).ptspervecunit);
+call vect ( -0.0000, -2.0000).
+
+
+
+charcode 122;
+charht (( 1.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( -0.0000.vecunit).ptspervecunit);
+call vect ( -0.0000, 1.0000).
+
+
+
+charcode 123;
+charht (( 0.7071.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 0.7071.vecunit).ptspervecunit);
+call vect ( 0.7071, 0.7071).
+
+
+
+charcode 124;
+charht (( 0.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd (( 1.0000.vecunit).ptspervecunit);
+call vect ( 1.0000, 0.0000).
+
+
+
+charcode 125;
+charht 0;
+chardp (( 0.7071.vecunit).ptspervecunit);
+charwd (( 0.7071.vecunit).ptspervecunit);
+call vect ( 0.7071, -0.7071).
+
+
+
+charcode 126;
+charht 0;
+chardp (( 1.0000.vecunit).ptspervecunit);
+charwd (( -0.0000.vecunit).ptspervecunit);
+call vect ( -0.0000, -1.0000).
+
+
+
+charcode 127;
+charht (( 0.0000.vecunit).ptspervecunit);
+chardp 0;
+charwd ((1.vecunit).ptspervecunit);
+call vect ( 0.0000, 0.0000).
+
+
diff --git a/macros/latex209/contrib/textyl/vecfonts/mf/vecbase2.mf b/macros/latex209/contrib/textyl/vecfonts/mf/vecbase2.mf
new file mode 100644
index 0000000000..f67b13b097
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/mf/vecbase2.mf
@@ -0,0 +1,176 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% "VECBASE2.MF" Martin Costabel, 1987
+% Translation to METAFONT82 of:
+%
+% Vector font base ("VECBASE.MF")
+% Copyright (c) 1984,1985,1986, 1987 John S. Renner
+% All rights reserved.
+%
+%
+% the following variables must be defined
+% before inputting this file
+% mode (the resolution:: e.g., islaprinter or isxerox, etc.)
+% w0 (the width of the pen in "vec units")
+% w1 (the height of the pen in "vec units")
+% (note that w0 == w1 for a circular pen)
+% no longer necessary (M.C.):
+% the type of pen to use (cpen, vpen, hpen)
+
+mode_setup;
+
+numeric u#;
+u# = 1/4pt#;
+wx#:=w0*u#; wy#:=w1*u#; define_pixels(wx,wy);
+autorounding:=0;
+if w0<>w1: pickup pensquare xscaled wx yscaled wy ;
+ else : pickup pencircle xscaled wx yscaled wy ; fi;
+vecpen:=savepen;
+
+def vecchar(expr code,vx,vy) =
+ numeric wd#,ht#,dp#,dx#,dy#;
+ dx# = vx*u#; dy# = vy*u#;
+ define_good_x_pixels(dx); define_good_y_pixels(dy);
+ wd# = dx#;
+ if vy < 0: ht# = 0; dp# = -dy#;
+ else: ht# = dy#; dp# = 0; fi;
+ if (vx,vy) = (0,0): wd# := u#; fi;
+ beginchar(code,wd#,ht#,dp#);
+ pickup vecpen;
+ draw (0,0)--(dx,dy);
+ endchar;
+enddef;
+
+designsize := 16u#;
+font_identifier:= "GRAPHIC-VECTORS";
+font_coding_scheme:= "ASCII";
+fontdimen 1 : 0, 0, wx#, wy#, 16u#, 16u#, 0;
+
+vecchar ( 0, 0.9981, 15.9688);
+vecchar ( 1, 1.9846, 15.8764);
+vecchar ( 2, 2.9486, 15.7260);
+vecchar ( 3, 3.8806, 15.5223);
+vecchar ( 4, 4.7724, 15.2717);
+vecchar ( 5, 5.6180, 14.9813);
+vecchar ( 6, 6.4131, 14.6585);
+vecchar ( 7, 7.1554, 14.3108);
+vecchar ( 8, 7.8442, 13.9452);
+vecchar ( 9, 8.4800, 13.5680);
+vecchar ( 10, 9.0645, 13.1847);
+vecchar ( 11, 9.6000, 12.8000);
+vecchar ( 12, 10.0895, 12.4178);
+vecchar ( 13, 10.5361, 12.0412);
+vecchar ( 14, 10.9431, 11.6726);
+vecchar ( 15, 11.3137, 11.3137);
+vecchar ( 16, 11.6726, 10.9431);
+vecchar ( 17, 12.0412, 10.5361);
+vecchar ( 18, 12.4178, 10.0895);
+vecchar ( 19, 12.8000, 9.6000);
+vecchar ( 20, 13.1847, 9.0645);
+vecchar ( 21, 13.5680, 8.4800);
+vecchar ( 22, 13.9452, 7.8442);
+vecchar ( 23, 14.3108, 7.1554);
+vecchar ( 24, 14.6585, 6.4131);
+vecchar ( 25, 14.9813, 5.6180);
+vecchar ( 26, 15.2717, 4.7724);
+vecchar ( 27, 15.5223, 3.8806);
+vecchar ( 28, 15.7260, 2.9486);
+vecchar ( 29, 15.8764, 1.9846);
+vecchar ( 30, 15.9688, 0.9981);
+vecchar ( 31, 16.0000, 0.0000);
+vecchar ( 32, 15.9688, -0.9981);
+vecchar ( 33, 15.8764, -1.9846);
+vecchar ( 34, 15.7260, -2.9486);
+vecchar ( 35, 15.5223, -3.8806);
+vecchar ( 36, 15.2717, -4.7724);
+vecchar ( 37, 14.9813, -5.6180);
+vecchar ( 38, 14.6585, -6.4131);
+vecchar ( 39, 14.3108, -7.1554);
+vecchar ( 40, 13.9452, -7.8442);
+vecchar ( 41, 13.5680, -8.4800);
+vecchar ( 42, 13.1847, -9.0645);
+vecchar ( 43, 12.8000, -9.6000);
+vecchar ( 44, 12.4178, -10.0895);
+vecchar ( 45, 12.0412, -10.5361);
+vecchar ( 46, 11.6726, -10.9431);
+vecchar ( 47, 11.3137, -11.3137);
+vecchar ( 48, 10.9431, -11.6726);
+vecchar ( 49, 10.5361, -12.0412);
+vecchar ( 50, 10.0895, -12.4178);
+vecchar ( 51, 9.6000, -12.8000);
+vecchar ( 52, 9.0645, -13.1847);
+vecchar ( 53, 8.4800, -13.5680);
+vecchar ( 54, 7.8442, -13.9452);
+vecchar ( 55, 7.1554, -14.3108);
+vecchar ( 56, 6.4131, -14.6585);
+vecchar ( 57, 5.6180, -14.9813);
+vecchar ( 58, 4.7724, -15.2717);
+vecchar ( 59, 3.8806, -15.5223);
+vecchar ( 60, 2.9486, -15.7260);
+vecchar ( 61, 1.9846, -15.8764);
+vecchar ( 62, 0.9981, -15.9688);
+vecchar ( 63, -0.0000, 8.0000);
+vecchar ( 64, 0.9923, 7.9382);
+vecchar ( 65, 1.9403, 7.7611);
+vecchar ( 66, 2.8090, 7.4906);
+vecchar ( 67, 3.5777, 7.1554);
+vecchar ( 68, 4.2400, 6.7840);
+vecchar ( 69, 4.8000, 6.4000);
+vecchar ( 70, 5.2680, 6.0206);
+vecchar ( 71, 5.6569, 5.6569);
+vecchar ( 72, 6.0206, 5.2680);
+vecchar ( 73, 6.4000, 4.8000);
+vecchar ( 74, 6.7840, 4.2400);
+vecchar ( 75, 7.1554, 3.5777);
+vecchar ( 76, 7.4906, 2.8090);
+vecchar ( 77, 7.7611, 1.9403);
+vecchar ( 78, 7.9382, 0.9923);
+vecchar ( 79, 8.0000, 0.0000);
+vecchar ( 80, 7.9382, -0.9923);
+vecchar ( 81, 7.7611, -1.9403);
+vecchar ( 82, 7.4906, -2.8090);
+vecchar ( 83, 7.1554, -3.5777);
+vecchar ( 84, 6.7840, -4.2400);
+vecchar ( 85, 6.4000, -4.8000);
+vecchar ( 86, 6.0206, -5.2680);
+vecchar ( 87, 5.6569, -5.6569);
+vecchar ( 88, 5.2680, -6.0206);
+vecchar ( 89, 4.8000, -6.4000);
+vecchar ( 90, 4.2400, -6.7840);
+vecchar ( 91, 3.5777, -7.1554);
+vecchar ( 92, 2.8090, -7.4906);
+vecchar ( 93, 1.9403, -7.7611);
+vecchar ( 94, 0.9923, -7.9382);
+vecchar ( 95, -0.0000, -8.0000);
+vecchar ( 96, -0.0000, 4.0000);
+vecchar ( 97, 0.9701, 3.8806);
+vecchar ( 98, 1.7889, 3.5777);
+vecchar ( 99, 2.4000, 3.2000);
+vecchar ( 100, 2.8284, 2.8284);
+vecchar ( 101, 3.2000, 2.4000);
+vecchar ( 102, 3.5777, 1.7889);
+vecchar ( 103, 3.8806, 0.9701);
+vecchar ( 104, 4.0000, 0.0000);
+vecchar ( 105, 3.8806, -0.9701);
+vecchar ( 106, 3.5777, -1.7889);
+vecchar ( 107, 3.2000, -2.4000);
+vecchar ( 108, 2.8284, -2.8284);
+vecchar ( 109, 2.4000, -3.2000);
+vecchar ( 110, 1.7889, -3.5777);
+vecchar ( 111, 0.9701, -3.8806);
+vecchar ( 112, -0.0000, -4.0000);
+vecchar ( 113, -0.0000, 2.0000);
+vecchar ( 114, 0.8944, 1.7889);
+vecchar ( 115, 1.4142, 1.4142);
+vecchar ( 116, 1.7889, 0.8944);
+vecchar ( 117, 2.0000, 0.0000);
+vecchar ( 118, 1.7889, -0.8944);
+vecchar ( 119, 1.4142, -1.4142);
+vecchar ( 120, 0.8944, -1.7889);
+vecchar ( 121, -0.0000, -2.0000);
+vecchar ( 122, -0.0000, 1.0000);
+vecchar ( 123, 0.7071, 0.7071);
+vecchar ( 124, 1.0000, 0.0000);
+vecchar ( 125, 0.7071, -0.7071);
+vecchar ( 126, -0.0000, -1.0000);
+vecchar ( 127, 0.0000, 0.0000);
+%%%%%%%%% End of VECBASE2.MF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec1.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec1.300pk
new file mode 100644
index 0000000000..3c39da6f29
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec1.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec1.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec1.tfm
new file mode 100644
index 0000000000..f15f24f7cd
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec1.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec10.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec10.300pk
new file mode 100644
index 0000000000..0dc35219a9
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec10.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec10.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec10.tfm
new file mode 100644
index 0000000000..fe20e066fe
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec10.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec11.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec11.300pk
new file mode 100644
index 0000000000..0dc35219a9
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec11.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec11.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec11.tfm
new file mode 100644
index 0000000000..977c161971
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec11.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec12.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec12.300pk
new file mode 100644
index 0000000000..c1dbb7cb23
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec12.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec12.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec12.tfm
new file mode 100644
index 0000000000..60ebe0f76a
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec12.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec2.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec2.300pk
new file mode 100644
index 0000000000..4bccb1940a
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec2.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec2.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec2.tfm
new file mode 100644
index 0000000000..536afd6b5a
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec2.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec3.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec3.300pk
new file mode 100644
index 0000000000..4bccb1940a
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec3.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec3.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec3.tfm
new file mode 100644
index 0000000000..529da7659c
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec3.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec4.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec4.300pk
new file mode 100644
index 0000000000..c6cfa9f899
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec4.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec4.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec4.tfm
new file mode 100644
index 0000000000..a4d29faf30
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec4.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec5.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec5.300pk
new file mode 100644
index 0000000000..c6cfa9f899
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec5.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec5.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec5.tfm
new file mode 100644
index 0000000000..8d6e0be6d2
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec5.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec6.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec6.300pk
new file mode 100644
index 0000000000..0fcdd5c8de
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec6.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec6.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec6.tfm
new file mode 100644
index 0000000000..6bc4c13fb6
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec6.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec7.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec7.300pk
new file mode 100644
index 0000000000..0fcdd5c8de
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec7.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec7.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec7.tfm
new file mode 100644
index 0000000000..d0a39d4c4d
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec7.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec8.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec8.300pk
new file mode 100644
index 0000000000..543bd2c9b7
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec8.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec8.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec8.tfm
new file mode 100644
index 0000000000..a503d67168
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec8.tfm
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec9.300pk b/macros/latex209/contrib/textyl/vecfonts/vvec9.300pk
new file mode 100644
index 0000000000..543bd2c9b7
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec9.300pk
Binary files differ
diff --git a/macros/latex209/contrib/textyl/vecfonts/vvec9.tfm b/macros/latex209/contrib/textyl/vecfonts/vvec9.tfm
new file mode 100644
index 0000000000..89aadb973c
--- /dev/null
+++ b/macros/latex209/contrib/textyl/vecfonts/vvec9.tfm
Binary files differ
diff --git a/macros/latex209/contrib/theapa/theapa.bst b/macros/latex209/contrib/theapa/theapa.bst
new file mode 100644
index 0000000000..361be1d235
--- /dev/null
+++ b/macros/latex209/contrib/theapa/theapa.bst
@@ -0,0 +1,1446 @@
+
+%$$$ theapa.bst $$$ --- Version 2.5.1 (May 1992)
+% by Young U. Ryu (young@emx.utexas.edu)
+
+% copyright (C) 1991, 1992.
+% Young U. Ryu
+% newapa.bst 2.0 - 1991.
+% Young U. Ryu
+% newapa.bst - copyright (C) 1989, 1990.
+% Stephen N. Spencer
+% apalike.bst - copyright (C) 1986, 1988.
+% Susan King and Oren Patashnik
+% alpha.bst - copyright (C) 1985.
+% Oren Patashnik
+
+% Version 2.5 Update Notes (April 1992)
+%
+% - \BUcase is dropped. It means that BibTeX always
+% changes cases of article titles.
+% - If you don't want to change cases of article titles,
+% see comments following `FUNCTION {format.title}'.
+% - See update notes in `theapa.sty'.
+
+% Version 2.4 Update Notes (April 1992)
+%
+% - See update notes in `theapa.sty'.
+
+% Version 2.3 Update Notes (March 1992)
+% - See update notes in `theapa.sty'.
+
+% Version 2.2 Update Notes (March 1992)
+%
+% - A bug reported by Richard Dallaway <richardd@cogs.sussex.ac.uk>:
+%
+% two periods after the title of MISC entries
+% (also two periods after the title of BOOKLET entries)
+%
+% is fixed by adding a function {output.atitle} and modifying
+% functions {booklet} and {misc}.
+% - A bug reported by someone (Sorry, I lost his/her E-mail.):
+%
+% incorrect order of references, e.x.
+% Bond K. \&\ Scott L.
+% Bond P. \&\ Scott L.
+% Bond K. \&\ Wright O. % This line must come before the above
+%
+% is fixed by switching first two lines of the function {presort}.
+% - The function {unpublished} is changed to avoid potential errors.
+
+% Version 2.1 Update Notes
+% - See update notes in `theapa.sty'.
+
+% Tutorial Notes
+% - See tutorial notes in `theapa.sty'.
+
+% Copying of this file is authorized only if either
+% (1) you make absolutely no changes to your copy, including names, or
+% (2) if you do make changes, you name it something other than
+% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+% This restriction helps ensure that all standard styles are identical.
+
+% Requirements: BibTeX 0.99a (or higher?),
+% theapa.sty 2.4 under LaTeX 2.09 (or higher?)
+%
+% NO GUARANTEE, absolutely (You know what I mean.)!!!
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output.atitle.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { "\ " * write$ }
+ { output.state after.block =
+ { "\ " * write$
+ newline$
+ "\newblock " write$
+ }
+ { output.state before.all =
+ 'write$
+ { "\ " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.atitle}
+{ duplicate$ empty$
+ 'pop$
+ 'output.atitle.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.atitle.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.atitle.nonnull
+ if$
+}
+
+FUNCTION {output.year.check}
+{ year empty$
+ { "empty year in " cite$ * warning$ }
+ { write$
+ " \BBOP" year * extra.label * "\BBCP" *
+ mid.sentence 'output.state :=
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ "\bibitem[" write$
+ label write$
+ "]{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\Bem " swap$ * "}" * }
+ if$
+}
+
+FUNCTION {emphasize.space}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\Bem " swap$ * "\/}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{vv~}{ll}{, jj}{, F.}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ { "\BBACOMMA\ " * }
+ if$
+ t "others" =
+ { " et~al." * }
+ { " \BBA\ " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { "\BEDS" * }
+ { "\BED" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.editors.dot}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { "\BEDS." * }
+ { "\BED." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+%FUNCTION {format.title}
+%{ title empty$
+% { "" }
+% { "\BBOQ " title "t" change.case$ * "\BBCQ" *}
+% if$
+%}
+
+% If you don't want to change cases of article titles,
+% use the following `format.title' function instead the one.
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { "\BBOQ " title * "\BBCQ" *}
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.btitle}
+{ edition empty$
+ { title emphasize }
+ { title empty$
+ { title emphasize }
+ { "{\Bem " title * "\/} (" * edition * " \BEd)" * "." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.emphasize.booktitle}
+{ edition empty$
+ { booktitle emphasize }
+ { booktitle empty$
+ { booktitle emphasize }
+ { "{\Bem " booktitle * "\/} (" * edition * " \BEd)" * "." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { "\ " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "\lowercase{\BVOL}" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "\losercase{\BVOL\ and \BNUM}" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "\lowercase{\BNUM}" }
+ { "\BNUM" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " \BEd" * }
+ { edition "t" change.case$ " \BEd" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "\BPGS" pages n.dashify tie.or.space.connect }
+ { "\BPG" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ number empty$
+ { volume empty$
+ 'skip$
+ { "{\Bem " volume * "}" * }
+ if$
+ }
+ { volume emphasize.space
+ volume empty$
+ {"there's a number but no volume in " cite$ * warning$ }
+ { "(" number * ")" * * }
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ", " * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "\BCH" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " format.emphasize.booktitle * }
+ { "In " format.editors * ", " * format.emphasize.booktitle * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "\BTR" }
+ { type "t" change.case$ }
+ if$
+ number empty$
+ 'skip$
+ { number tie.or.space.connect }
+ if$
+}
+
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\Bem " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \citeyear{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { "\BBACOMMA\ \BBA\ " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "\BVOL" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\Bem " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \citeyear{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\Bem " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \citeyear{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.atitle.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.atitle.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors.dot "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ output.year.check
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ output.year.check
+ new.block
+ format.btitle "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors.dot "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ output.year.check
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.atitle.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.incoll.inproc.crossref output.atitle.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.atitle.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ }
+ { address output.atitle.nonnull
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ output.year.check
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.atitle.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's report" format.thesis.type output.atitle.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ output.year.check
+ title howpublished new.block.checkb
+ format.title "title" output.check
+ howpublished new.block.checka
+ howpublished output.atitle
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "Ph.D.\ thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {dbathesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "DBA thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {eddthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "Ed.D.\ thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors.dot output.nonnull }
+ if$
+ author format.key output
+ output.year.check
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ }
+ { address output.nonnull
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.atitle.nonnull
+ institution "institution" output.check
+ address output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ output.year.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note output.atitle
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.full.lab.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{vv~}{ll}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " \BBA\ " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " \BBA\ " * s #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+
+ author empty$
+ { editor format.full.lab.names }
+ { author format.full.lab.names }
+ if$
+ "\protect\BCAY{" swap$ * "}{" * swap$ * "}{" *
+ year field.or.null purify$ #-1 #4 substring$ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et~al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ sort.label
+ calc.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { last.sort.label next.extra }
+
+INTEGERS { last.extra.num }
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * "}" * 'label :=
+ extra.label 'next.extra :=
+}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{}" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
+
+
diff --git a/macros/latex209/contrib/theapa/theapa.sty b/macros/latex209/contrib/theapa/theapa.sty
new file mode 100644
index 0000000000..9b319a09cf
--- /dev/null
+++ b/macros/latex209/contrib/theapa/theapa.sty
@@ -0,0 +1,1231 @@
+
+%%%%theapa.sty%%%%%%%%
+%$$$ theapa.sty $$$ --- Version 2.5 .1(May 1992)
+% by Young U. Ryu (young@emx.utexas.edu)
+
+% `theapa' --- `the' `a'`p'`a'.
+% APA (American Psychology Association) Reference Citation for (AmS)LaTeX
+%
+% - Supported by `theapa.bst' Version 2.5
+% - For Plain TeX, use `theapa.tex'.
+% - They are available from:
+% anonymous@ftp.cc.utexas.edu
+% pub/young
+
+% Based on the {\it Publication Manual of the American Psychology Association},
+% Third Edition, Fifth Printing, February 1988.
+
+% copyright (C) 1991, 1992.
+% Young U. Ryu
+% newapa.sty 2.0 - 1991.
+% Young U. Ryu
+% newapa.sty - copyright (C) 1989, 1990.
+% Stephen N. Spencer
+% apalike.sty - copyright (C) 1986, 1988.
+% Susan King and Oren Patashnik
+% ulem.sty - copyright (C) 1989.
+% Donald Arseneau
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% PLEASE, PLEASE, PLEASE READ ALL THE FOLLOWING UPDATE & TUTORIAL NOTES %
+% ^^^^^^ ^^^^^^ ^^^^^^ ^^^ BEFORE YOU REQUEST IMPROVEMENTS.%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% List of User Commands
+%
+% Citation (Auto Switch: Full -> Short)
+% - \cite, \citeA, \citeauthor, \citeyear
+% Enforce Full Citation
+% - \fullcite, \fullciteA, \fullciteauthor
+% Enforce Short Citation
+% - \shortcite, \shortciteA, \shortciteauthor
+% Change Citation Functuations
+% including Quotation Marks around Article Titles
+% - \citepunct
+% Change Citation Labels
+% - \citelabels
+% Underline instead of Italic
+% - \UnderlinedBemOnly, \UnderlinedEm
+% Reference and Bibliography Names
+% - \refname, \bibname
+% Do not Place Comma before \& in Ref. Sec. When no. of Authors = 2
+% - \NoCommaBetweenTwoAuthors
+
+% IF YOU ARE A NEW USER, IT'S NOT NECESSARY TO READ UPDATE NOTES;
+% INSTEAD, READ THE TUTORIAL NOTES.
+
+% Version 2.5.1 Update Notes (May 1992)
+%
+% - A bug in \nocite#1 is fixed.
+% - A bug in theapa.bst 2.5 is fixed.
+
+% Version 2.5 Update Notes (April 1992)
+%
+% - Citation macros are rewritten and simplified.
+% \cite, \citeA, \citeauthor
+% \fullcite, \fullciteA, \fullciteauthor
+% \shortcite, \shortciteA, \shortciteauthor
+% \citeyear
+%
+% \citeB, \citeC, \fullciteB, \fullciteC, \shortciteB, and
+% \shortciteC are dropped. But, to maintain compatibility
+% with Version 2.4:
+%
+% \citeB = \citeA (also full and short versions)
+% \citeC = \citeauthor (also full and short versions)
+%
+% - \BUcase is dropped. It means that BibTeX always
+% changes cases of article titles.
+% Thus, \NoTitleCaseChange is dropped.
+% If you don't want to change cases of article titles,
+% see Version 2.5 Update Notes in `theapa.bst'.
+%
+% - APA section heading macros are re-written.
+% \theapasectioning is dropped.
+% Refer to the Tutorial Notes [5].
+%
+% - Three types of seriations are provided:
+% seriate env.
+% APAenumerate env.
+% APAitemize env.
+% Refer to the Tutorial Notes [6].
+
+% Version 2.4 Update Notes (April 1992)
+%
+% - In Ref. Sec. (not in citations):
+% ^^^^^^^^^
+% Bond, J., & Chen, S. (1983). blah blah blah
+% ^
+% comma is placed before \BBA (i.e. usually \&) even if
+% no. of authors = 2. (a req. of APA)
+% If you don't want such commas, use command \NoCommaBetweenTwoAuthors.
+% - \cite<optional predix note>[optional postfix note]{keys}
+% is implemented.
+% The above is same as \fullcite and \shortcite.
+% - \nocite{aaa,bbb} makes following \cite{aaa}, \cite{bbb}, etc. short.
+% But, \nocite{*} does not make following \cite{...} short.
+
+% Version 2.3 Update Notes (March 1992)
+%
+% - theapa.bst 2.3 == theapa.bst 2.2
+% - A few mistakes in notes and comments are corrected.
+% - The following is updated:
+% \citeA{...}, \citeB{...}, and \citeC{...} (together with
+% full and short versions) result in:
+%
+% author1, author2, and author3 (year)
+% ^^^
+% while \cite{...} (together with full and short versions) results in:
+%
+% (author1, author2, & author3, year)
+% ^
+% The above is a requirement of the APA style.
+%
+% - Thus, \citepunct changed. See note [3].
+% With \citepunct, one may change the default `&' and `and' to others.
+
+% Version 2.2 Update Notes (March 1992)
+%
+% - theapa.sty 2.2 == theapa.sty 2.1
+% But, theapa.bst is improved.
+% See update notes in `theapa.bst'.
+
+% Version 2.1 Update Notes
+%
+% \thebibliography and chapter
+% - \thebibliography generates a chapter heading
+% when chapter is defined (e.g., report, book, etc),
+% but \theapasectioning is not used.
+% - Note: \def\refname{Reference}
+% `Reference' is the section title
+% \def\bibname{Bibliography}
+% `Bibliography' is the chapter title
+%
+% Other Updates
+% - \notitlecasechange (of Version 2.0) is changed
+% to \NoTitleCaseChange for the purpose of readability.
+%
+% Some Bugs Fixed
+% - \thebibliography is fixed.
+% No more `TeX capacity exceeded' error when
+% \theapasectioning is used
+
+% Version 2.0 Update Notes (Nov. 1991)
+%
+% `ulem.sty' (1989) by Donald Arseneau is included
+% - Underlined book titles, etc. are optionally allowed.
+% - The general replacement of emphasized texts by
+% underlined texts is optionally allowed.
+% - See note [7] B.
+%
+% Same author, different years
+% - \cite{Apt,MinA,MinB,Bond}
+% ===> (Apt, 1989; Minsky, 1967, 1983; Bond, 1991)
+% - \citeB{Apt,MinA,MinB,Bond}
+% ===> Apt (1989), Minsky (1967, 1983), Bond (1991)
+% - \citeC{Apt,MinA,MinB,Bond} or \citeauthor{Apt,MinA,MinB,Bond}
+% ===> Apt, Minsky, Bond
+%
+% Automatic switch from full cites to short cites
+% - According to the APA manual, the very first citation of
+% a reference item requires the full list of authors; but
+% following citations of the same reference item require
+% the short list of authors.
+% - \cite, \citeA, \citeB, \citeC (or \citeauthor)
+% ===> switches from full to short cites automatically
+% - \fullcite, \fullciteA, etc.
+% ===> enforces full citations
+% - \shortcite, \shortciteA, etc.
+% ===> enforces short citations
+% - note: \citeyear ===> (year, year, ...)
+% There are no full or short versions of \citeyear
+%
+% Case changing option for article titles.
+% - See note [7] A.
+%
+% Quotation marks around article titles
+% - Though the APA manual does not suggest to place
+% double quotation marks around article titles,
+% some people like it.
+% - In that case, a comma (or period) following article
+% titles must be placed inside quotation marks.
+% - It can be done by `\citepunct'.
+% See note [3].
+%
+% Some Bugs Fixed
+% - \theapasectioning replaces for \newapasectioning
+% - \paragraph replaces for \a@paragraph
+% - \subparagraph replaces for \a@subparagraph
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% SEE THE FOLLOWING TUTORIAL NOTES.
+% 1 - theapa.bst and \bibitem entry
+% 2 - citation formats
+% 3 - changing citation functions (if you want)
+% 4 - changing citation labels (if you want)
+% 5 - enforcing APA style section heading (if you want)
+% 6 - APA style seriations
+% 7 - notes (including things not implemented and to be implemented)
+%
+%%%%%
+% [0] Three Parts
+%
+% This file consists of three parts:
+% Part I - APA Style Citation
+% Part II - Optional APA Style Section Heading and Seriation
+% Part III - Underline Stuff
+%
+% - Part I and Part II are completely independent.
+% - If one does not declare \UnderlinedBemOnly or \UnderlinedEm,
+% Part I and Part III are independent.
+% - If one replaces \ULine in Part II with \underbar (or \underline)
+% Part II and Part III are independent.
+%
+% - You may remove independent parts without affecting others.
+%
+%%%%%
+% [1] theapa.bst and \bibitem entry
+%
+% The ``theapa.bst'' BibTeX bibliography style creates references with labels:
+% \protect\BCAY{full author list}{abbrev. author list}{year}
+%
+%%%%%
+% [2] Citation Formats
+%
+% The citations are enclosed within parentheses ``( ... )''
+% as default. But one may change them using \citepunct.
+% Short author lists use the ``et al.'' construct.
+% These labels are processed by the following LaTeX commands:
+%
+%%%
+% \cite<optional prefix note>[optional notes]{Key(s)}
+% -> (prefix note Authors, Year, optional notes)
+% For example: \cite<e.g.\ see>[p.~32]{Apt88}
+% => (e.g. see Apt, 1988, p. 32)
+% -> automatically switches from \fullcite to \shortcite
+% \citeA[optional notes]{keys}
+% -> automatically switches from \fullciteA to \shortciteA
+% \citeB[optional notes>{keys}
+% = \citeA
+% \citeauthor{key}
+% -> automatically switches from \fullciteauthor to \shortciteauthor
+% \citeC{keys}
+% = \citeauthor{keys}
+% \citeyear[optional notes]{key(s)} -> (Year1, Year2, ...)
+%
+%%%
+% \nocite{aaa,bbb} makes following \cite{aaa}, \cite{bbb}, etc.
+% short citations.
+% \nocite{*} does not make following \cite{...}, etc. short citations.
+% ^^^
+%%%
+% \fullcite<optional prefix note>[optional notes]{Key(s)}
+% -> (prefix note Authors1, Year1; Authors2, Year2; ..., optional notes)
+% \fullciteA[optional notes]{keys}
+% -> Authors1 (Year1), ..., AuthorsN (YearN, optional notes)
+% \fullciteB[optional notes]{keys}
+% = \fullciteA[optional notes]{keys}
+% \fullciteauthor{keys}
+% -> Authors1, Authors2, ...
+% \fullciteC{keys}
+% = \fullciteauthor
+%
+%%%
+% The difference between `\shortciteXXX' and `\fullciteXXX':
+% is that `\shortciteXXX' gives `First author et al.'
+% if no. authors >= 3.
+%
+% \shortcite<optional prefix note>[optional notes]{Key(s)}
+% -> (prefix note Short Authors1, Year1; ..., optional notes)
+% \shortciteA[optional notes]{keys}
+% -> Short Authors1 (Year1), ..., Short AuthorsN (YearN, optional notes)
+% \shortciteB[optional notes]{keys}
+% = \shortciteA[optional notes]{keys}
+% \shortciteauthor{keys}
+% -> Short Authors1, Short Authors2, ...
+% \shortciteC{keys}
+% = \shortciteauthor
+%
+%%%%%
+% [3] Changing Citation Punctuations
+%
+% \citepunct{open paren}%
+% {between authors in parenthesis and ref. sec}%
+% {between authors in text}%
+% {between author(s) and year}%
+% {between citations}%
+% {before notes}%
+% {closing paren}%
+% {open quote for article titles}%
+% {closing quote for article titles}
+%
+% For example,
+% \citepunct{[}{and}{\&}{ }{, }{: }{]}{``}{,''}
+% - use square brackets
+% `and' between authors in parenthesis and ref. sec.
+% '&' between authors in text
+% space between author and year
+% comma between citations
+% comma before notes
+% e.g. [Apt and van Emden 1986, Lloyd 1985: Notes]
+% e.g. Apt & van Emden [1986]
+% - ``article title,'' (in double quote marks and comma in them)
+%
+% The default is:
+% \citepunct{(}{\&}{and}{, }{; }{, }{)}{}{.}
+%
+% Notice spaces around punctuations in \citepunct!!!
+%
+% In Ref. Sec, a comma is placed before \&, even if no. of authors = 2.
+% \NoCommaBetweenTwoAuthors
+% removes such commas in Ref. Sec.
+% But, a comma will be still placed before \& if no. of authors >= 3.
+%
+%%%%%
+% [4] Changing Citation Labels
+%
+% \citelabels{editor label}%
+% {editors label}%
+% {volume label}%
+% {number label}%
+% {edition label}%
+% {page label}%
+% {pages label}%
+% {chapter label}%
+% {tech. rep. label}
+%
+% For example,
+% \citelabels{, editor}{, editors}{Volume}{Number}{edition}%
+% {page}{pages}{chapter}{Technical report}
+%
+% The default is:
+% \citelabels{ (Ed.)}{ (Eds.)}{Vol.}{No.}{edition}%
+% {p.}{pp.}{chap.}{Tech.\ rep.}
+%
+% Notice spaces around lables in \citelabels!!!
+%
+%%%%%
+% [5] Enforcing APA Style Section Heading
+%
+% A. Place one of the following between \documentstyle[...]{...}
+% and \begin{document}:
+%
+% \OneLevelHeading \TwoLevelHeading \TwoLevelHeadingA
+% \ThreeLevelHeading \FourLevelHeading \FiveLevelHeading
+%
+% to enforce APA style section heading.
+%
+% Read the following notes to understand what they do.
+%
+% B. The follow 5 levels of APA section headings are defined
+% \levelone{...}
+% ^^^ Normalsize, Centered, Uppercase, Boldface
+% \leveltwo{...}
+% ^^^ Normalsize, Centered, Boldfaced
+% \levelthree{...}
+% ^^^^^ Normalsize, Centered, Underlined
+% \levelfour{...}
+% ^^^^ Normalsize, Flushleft, Unindented, Underlined
+% \levelfive{...}
+% ^^^^ Normalsize, Flushleft, Indented, Underlined
+% followed by texts in the same line
+%
+% However, you will *not* use \levelone{...}, \leveltwo{...}, etc.
+% in your document. Instead, you will use \section*[...]{...},
+% \subsection*[...]{...}, etc. Read the following notes.
+%
+% Note: According to the APA manual (p. 66), Level One & Two
+% Headings are NOT boldfaced. To strictly enforce
+% APA requirements, remove \bf in \levelone and \leveltwo
+% macros.
+%
+% C. If you don't like spaces before and after section headings,
+% modify \b@level@one@skip, \e@level@one@skip,
+% \b@level@two@skip, \e@level@two@skip, etc.
+% See comments around their definitions.
+%
+% D. Level 3, 4, and 5 underlines are placed by \ULine{...}
+% of ulem.sty ((C) Donald Arseneau) that is attached in the
+% end of this file. This is because \ULine allows line
+% breaks, while \underbar{...} and \underline{...} do not,
+% when the heading is longer than the \textwidth (minus 8em).
+% If you don't like the way \ULine places underlines,
+% (1) replace \ULine in \levelthree, \levelfour, and \levelfive macros
+% with \underbar or \underline. In that case, however, if the heading
+% is long, LaTeX will complain about overfull \hbox; alternatively
+% (2) modify and improve `ulem.sty' and send me a copy (thanks).
+%
+% E. The APA manual suggests 6 ways of using heading levels:
+% \OneLevelHeading: \section = \leveltwo (toc)
+% \TwoLevelHeading: \section = \leveltwo (toc)
+% \subsection = \levelfour (toc)
+% \TwoLevelHeadingA: \section = \leveltwo (toc)
+% \subsection = \levelfive
+% \ThreeLevelHeading: \section = \leveltwo (toc)
+% \subsection = \levelfour (toc)
+% \subsubsection = \levelfive
+% \FourLevelHeading: \section = \leveltwo (toc)
+% \subsection = \levelthree (toc)
+% \subsubsection = \levelfour (toc)
+% \paragraph = \levelfive
+% \FiveLevelHeading: \section = \levelone (toc)
+% \subsection = \leveltwo (toc)
+% \subsubsection = \levelthree (toc)
+% \paragraph = \levelfour
+% \subparagraph = \levelfive
+%
+% F. \section{AAA}: AAA = heading, page head, table of contents
+% \section*{AAA}: AAA = heading
+% \section[BBB]{AAA}: AAA = heading; BBB = page head, table of contents
+%
+% \subsection{AAA}: AAA = heading, table of contents
+% \subsection*{AAA}: AAA = heading
+% \subsection[BBB]{AAA}: AAA = heading; BBB = table of contents
+%
+% (Exception: When \TwoLevelHeadingA is used -
+% \subsection{AAA}: AAA = heading
+% \subsection*{AAA} - not allowed
+% \subsection[BBB]{AAA} - not allowed)
+%
+% \subsubsection{AAA}: AAA = heading, table of contents
+% \subsubsection*{AAA}: AAA = heading
+% \subsubsection[BBB]{AAA}: AAA = heading; BBB = table of contents
+%
+% (Exception: When \ThreeLevelHeading is used -
+% \subsubsection{AAA}: AAA = heading
+% \subsubsection*{AAA} - not allowed
+% \subsubsection[BBB]{AAA} - not allowed)
+%
+% \paragraph{AAA}: AAA = heading
+%
+% \subparagraph{AAA}: AAA = heading
+%
+%%%%%
+% [6] APA Seriations
+%
+% A. seriate environment:
+% For example, the following:
+%
+% Blah blah blah
+% \begin{seriate}
+% \item first item,
+% \item second item.
+% \end{seriate}
+% Blah blah blah
+%
+% results in:
+%
+% Blah blah blah (a) first item, (b) second item. Blah blah blah
+%
+% B. APAenumerate environment
+% For example, the following:
+%
+% Blah blah blah
+% \begin{APAenumerate}
+% \item first item ... ... ... continue continue
+% \item second item ... ... ... continue continue
+% \end{APAenumerate}
+% Blah blah blah
+%
+% results in:
+%
+% Blah blah blah
+% 1. first item ... ... ...
+% continue continue
+% 2. second item ... ... ...
+% continue continue
+% Blah blah blah
+%
+% C. APAitemize environment
+% For example, the following:
+%
+% Blah blah blah
+% \begin{APAitemize}
+% \item first item ... ... ... continue continue
+% \item second item ... ... ... continue continue
+% \end{APAitemize}
+% Blah blah blah
+%
+% results in:
+%
+% Blah blah blah
+% o first item ... ... ...
+% continue continue
+% o second item ... ... ...
+% continue continue
+% Blah blah blah
+%
+%%%%%
+% [7] Others
+%
+% A. If you use a language other than English,
+% You probably want to change reference and bibliography names.
+% Defaults are English names:
+%
+% e.g. \def\refname{Reference}
+% e.g. \def\bibname{Bibliography}
+%
+% Place those definitions on the top of your document or
+% before \bibliography or \begin{thebibliography}.
+%
+% B. As default, BibTeX changes cases of article titles.
+%
+% e.g. Your Entry in xxx.bib: Formal Representation of ZZZ
+% Your will get: Formal representation of zzz
+% e.g. Your Entry in xxx.bib: Formal Representation of {ZZZ}
+% Your will get: Formal representation of ZZZ
+%
+% If you don't want to change cases of article title, see
+% Version 2.5 Update Notes in `theapa.bst'.
+%
+% C. `mastersreport', `dbathesis', `eddthesis' added in theapa.bst.
+% Why? - Some schools also allow master's report as well as
+% master's thesis.
+% - DBA (Doctor of Business Administration) and
+% Ed.D. (Doctor of Education) are also popluar
+% doctoral degrees.
+%
+% D. Underlined (not italic) book titles, etc.
+% - A few journal publication editors and schools,
+% who do not appreciate new electronic typesetting and
+% desktop publishing technologies, require underlined
+% book titles, etc.
+% - To do this, I included `ulem.sty' (C) 1989 by Donald Arseneau.
+% - `\UnderlinedBemOnly' underlines book titles, etc. in Reference.
+% `\UnderlinedEm' replaces emphasized texts by underlined texts
+% both in the body and references of your document.
+%
+% E. Not implemented yet (!): to be implemented soon
+% - None
+%
+% F. Not implemented: I don't know if I can do in the near future !!! ;-)
+% - Same last name but different people
+%
+% (C. Lewis, 1958; D. Lewis, 1973)
+% ^ ^
+% G. NO GUARANTEE, absolutely (You know what I mean.)
+%
+% H. Bug and/or suggestion reports
+% - Your bug and/or suggestion report(s) is (are) welcome(d).
+% - E-mail me:
+%
+% young@emx.utexas.edu (Internet)
+% ^^^^^
+% youngr@utxvm (Bitnet)
+% ^
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\typeout{APA Citation (& Optional APA Heading) Style - Version 2.5.1 (5/92)}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% PART I: APA CITATION %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%
+% cite punctuations %
+%%%%%%%%%%%%%%%%%%%%%
+
+\def\BBOP{(} % open parenthesis
+\def\BBAA{\&} % between authors in parenthesis and ref. sec.
+\def\BBAB{and} % between authors in text
+\def\BBAY{, } % between author(s) and year
+\def\BBC{; } % between cites
+\def\BBN{, } % before note
+\def\BBCP{)} % closing parenthesis
+\def\BBOQ{} % open quote for article title
+\def\BBCQ{.} % closing quote for article title
+%
+\def\BBA{\BBAA}
+%
+\def\citepunct#1#2#3#4#5#6#7#8#9{%
+ \def\BBOP{#1}
+ \def\BBAA{#2}
+ \def\BBAB{#3}
+ \def\BBAY{#4}
+ \def\BBC{#5}
+ \def\BBN{#6}
+ \def\BBCP{#7}
+ \def\BBOQ{#8}
+ \def\BBCQ{#9}
+ \def\BBA{\BBAA}}
+%
+\def\BBACOMMA{,} % comma between authors in ref. sec
+ % when no. of authors = 2
+\def\NoCommaBetweenTwoAuthors{\def\BBACOMMA{}}
+%
+\let\Bem\em
+
+%%%%%%%%%%%%%%%
+% cite labels %
+%%%%%%%%%%%%%%%
+
+\def\BED{ (Ed.)} % editor
+\def\BEDS{ (Eds.)} % editors
+\def\BVOL{Vol.} % volume name
+\def\BNUM{No.} % number name
+\def\BEd{edition} % edition
+\def\BPG{p.} % page
+\def\BPGS{pp.} % pages
+\def\BCH{chap.} % chapter
+\def\BTR{Tech.\ rep.} % (default) technical report type name
+
+\def\citelabels#1#2#3#4#5#6#7#8#9{%
+ \def\BED{#1} % editor
+ \def\BEDS{#2}
+ \def\BVOL{#3}
+ \def\BNUM{#4}
+ \def\BEd{#5} % edition
+ \def\BPG{#6}
+ \def\BPGS{#7}
+ \def\BCH{#8}
+ \def\BTR{#9}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Upper or Lowercase article titles %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \BUcase is dropped in theapa.bst Version 2.5.
+% The following three lines are not required in Version 2.5.
+% They are here temporally to maintain some compatibility with
+% Version 2.4; but will be removed in the next revision.
+\def\@Ucase#1{\uppercase{#1}}
+\def\BUcase#1{\lowercase{\@Ucase #1}}
+\def\NoTitleCaseChange{\def\BUcase##1{##1}}
+
+%%%%%%%%%%%%%
+% citations %
+%%%%%%%%%%%%%
+
+\def\@lbibitem[#1]#2{\def\BBA{\BBAA}\item[\@biblabel{#1}]\if@filesw
+ { \def\BBA{\string\BBA}%
+ \def\protect##1{\string ##1\space}\immediate
+ \write\@auxout{\string\bibcite{#2}{#1}}%
+ \def\BBA{\BBAA}}\fi\ignorespaces}
+
+% Year is separately handled by \Y<citation key>
+\def\bibcite#1#2{\global\expandafter\def\csname b@#1\endcsname{#2}% names
+ \global\expandafter\def\csname Y@#1\endcsname{\@year@#2}}% year
+\def\@year@\BCAY#1#2#3{#3}
+
+% first author of a multi-author reference?
+\newif\if@F@cite\@F@citetrue
+
+%
+% \cite<prefix>[postfix]{keys}
+% \fullcite<prefix>[postfix]{keys}
+% \shortcite<prefix>[postfix]{keys}
+% writes \citation{keys} on .aux
+% produces (prefix Authors1, Year1; Authors2, Year2; ..., postfix)
+%
+
+\def\cite{\def\BCAY##1##2##3{\BCA{##1}{##2}}%
+ \@ifnextchar<{\@cite}{\@cite<>}}
+
+\def\fullcite{\def\BCAY##1##2##3{\BCA{##1}{##1}}%
+ \@ifnextchar<{\@cite}{\@cite<>}}
+
+\def\shortcite{\def\BCAY##1##2##3{\BCA{##2}{##2}}%
+ \@ifnextchar<{\@cite}{\@cite<>}}
+
+\def\@cite<#1>{\@ifnextchar[{\def\@BBN{\BBN}\@@cite<#1>}%
+ {\def\@BBN{\ignorespaces}\@@cite<#1>[]}}
+\def\@@cite<#1>[#2]#3{%
+ \if@filesw\immediate\write\@auxout{\string\citation{#3}}\fi%
+ \edef\@citeP{}%
+ \BBOP{\ignorespaces#1\space}%
+ \@for\@citeb:=#3\do{%
+ \@ifundefined{b@\@citeb}%
+ {\expandafter\def\csname b@\@citeb\endcsname{?}%
+ \expandafter\def\csname Y@\@citeb\endcsname{?}%
+ \@warning{Citation `\@citeb' on page \thepage\space undefined}%
+ }%
+ {\@ifundefined{flag@\@citeb}%
+ {\global\expandafter\def\csname flag@\@citeb\endcsname{DUMMY}%
+ \def\BCA##1##2{##1}}%
+ {\def\BCA##1##2{##2}}%
+ }%
+ \edef\B@my@dummy{\csname b@\@citeb\endcsname}%
+ \ifx\@citeP\B@my@dummy%
+ \if@F@cite\@F@citefalse\else{,\ }\fi%
+ \csname Y@\@citeb\endcsname%
+ \else%
+ \if@F@cite\@F@citefalse\else{\BBC}\fi%
+ \edef\@cite@undefined{?}%
+ \ifx\@cite@undefined\B@my@dummy%
+ \csname Y@\@citeb\endcsname%
+ \else%
+ \def\BBA{\BBAA}%
+ \csname b@\@citeb\endcsname\BBAY\csname Y@\@citeb\endcsname%
+ \fi%
+ \fi%
+ \edef\@citeP{\csname b@\@citeb\endcsname}%
+ }{\@BBN #2}\BBCP%
+ \@F@citetrue}
+
+%
+% \citeA[postfix]{keys}
+% \fullciteA[postfix]{keys}
+% \shortciteA[postfix]{keys}
+% writes \citation{keys} on .aux
+% produces Authors1 (Year1), ..., AuthorN (YearN, postfix)
+%
+
+\def\citeA{\def\BCAY##1##2##3{\BCA{##1}{##2}}%
+ \@ifnextchar[{\def\@BBN{\BBN}\@citeA}%
+ {\def\@BBN{\ignorespaces}\@citeA[]}}
+
+\def\fullciteA{\def\BCAY##1##2##3{\BCA{##1}{##1}}%
+ \@ifnextchar[{\def\@BBN{\BBN}\@citeA}%
+ {\def\@BBN{\ignorespaces}\@citeA[]}}
+
+\def\shortciteA{\def\BCAY##1##2##3{\BCA{##2}{##2}}%
+ \@ifnextchar[{\def\@BBN{\BBN}\@citeA}%
+ {\def\@BBN{\ignorespaces}\@citeA[]}}
+
+\def\@citeA[#1]#2{%
+ \if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+ \edef\@citeP{}%
+ \@for\@citeb:=#2\do{%
+ \@ifundefined{b@\@citeb}%
+ {\expandafter\def\csname b@\@citeb\endcsname{?}%
+ \expandafter\def\csname Y@\@citeb\endcsname{?}%
+ \@warning{Citation `\@citeb' on page \thepage\space undefined}%
+ }%
+ {\@ifundefined{flag@\@citeb}%
+ {\global\expandafter\def\csname flag@\@citeb\endcsname{DUMMY}%
+ \def\BCA##1##2{##1}}%
+ {\def\BCA##1##2{##2}}%
+ }%
+ \edef\B@my@dummy{\csname b@\@citeb\endcsname}%
+ \ifx\@citeP\B@my@dummy%
+ \if@F@cite\@F@citefalse\else{,\ }\fi%
+ \csname Y@\@citeb\endcsname%
+ \else%
+ \if@F@cite\@F@citefalse\else{\BBCP,\ }\fi%
+ \def\BBA{\BBAB}%
+ \csname b@\@citeb\endcsname\ \BBOP\csname Y@\@citeb\endcsname%
+ \fi%
+ \edef\@citeP{\csname b@\@citeb\endcsname}%
+ }{\@BBN #1}\BBCP%
+ \@F@citetrue}
+
+%
+% \citeauthor{keys}
+% \fullciteauthor{keys}
+% \shortciteauthor{keys}
+% writes \citation{keys} on .aux
+% produces Authors1, ..., AuthorN
+%
+
+\def\citeauthor{\def\BCAY##1##2##3{\BCA{##1}{##2}}\@citeauthor}
+
+\def\fullciteauthor{\def\BCAY##1##2##3{\BCA{##1}{##1}}\@citeauthor}
+
+\def\shortciteauthor{\def\BCAY##1##2##3{\BCA{##2}{##2}}\@citeauthor}
+
+\def\@citeauthor#1{%
+ \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi%
+ \edef\@citeP{}%
+ \@for\@citeb:=#1\do{%
+ \@ifundefined{b@\@citeb}%
+ {\expandafter\def\csname b@\@citeb\endcsname{?}%
+ \expandafter\def\csname Y@\@citeb\endcsname{?}%
+ \@warning{Citation `\@citeb' on page \thepage\space undefined}%
+ }%
+ {\@ifundefined{flag@\@citeb}%
+ {\global\expandafter\def\csname flag@\@citeb\endcsname{DUMMY}%
+ \def\BCA##1##2{##1}}%
+ {\def\BCA##1##2{##2}}%
+ }%
+ \edef\B@my@dummy{\csname b@\@citeb\endcsname}%
+ \ifx\@citeP\B@my@dummy%
+ \else%
+ \if@F@cite\@F@citefalse\else{,\ }\fi%
+ \def\BBA{\BBAB}%
+ \csname b@\@citeb\endcsname%\ \BBOP\csname Y@\@citeb\endcsname%
+ \fi%
+ \edef\@citeP{\csname b@\@citeb\endcsname}%
+ }%
+ \@F@citetrue}
+
+%
+% \citeyear[postfix]{keys}
+% writes \citation{keys} on .aux
+% produces (Year1, ..., YearN, postfix)
+%
+
+\def\citeyear{\def\BCAY##1##2##3{}%
+ \@ifnextchar[{\def\@BBN{\BBN}\@citeyear}%
+ {\def\@BBN{\ignorespaces}\@citeyear[]}}
+
+\def\@citeyear[#1]#2{%
+ \if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi%
+ \edef\@citeP{}%
+ \BBOP\@for\@citeb:=#2\do{%
+ \@ifundefined{b@\@citeb}%
+ {\expandafter\def\csname b@\@citeb\endcsname{?}%
+ \expandafter\def\csname Y@\@citeb\endcsname{?}%
+ \@warning{Citation `\@citeb' on page \thepage\space undefined}%
+ }%
+ {\@ifundefined{flag@\@citeb}%
+ {\global\expandafter\def\csname flag@\@citeb\endcsname{DUMMY}}%
+ {}%
+ }%
+ \edef\B@my@dummy{\csname b@\@citeb\endcsname}%
+ \if@F@cite\@F@citefalse\else{,\ }\fi%
+ \csname Y@\@citeb\endcsname%
+ \edef\@citeP{\csname b@\@citeb\endcsname}%
+ }{\@BBN #1}\BBCP%
+ \@F@citetrue}
+
+\def\nocite#1{\@bsphack%
+ \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi%
+ \@for\@citeb:=#1\do{%
+ \@ifundefined{b@\@citeb}%
+ {\edef\B@my@dummy{*}%
+ \ifx\@citeb\B@my@dummy\else
+ \@warning{Citation `\@citeb' on page \thepage\space undefined}\fi}%
+ {\global\expandafter\def\csname flag@\@citeb\endcsname{DUMMY}}}%
+ \@esphack}
+
+%
+% To maintain compatibility with Version 2.4
+% \citeB = \citeA
+% \fullciteB = \fullciteA
+% \shortciteB = \shortciteA
+% \citeC = \citeauthor
+% \fullciteC = \fullciteauthor
+% \shortciteC = \shortciteauthor
+
+\let\citeB=\citeA
+\let\fullciteB=\fullciteA
+\let\shortciteB=\shortciteA
+
+\let\citeC=\citeauthor
+\let\fullciteC=\fullciteauthor
+\let\shortciteC=\shortciteauthor
+
+%
+% No labels in the bibliography.
+\def\@biblabel#1{}
+\newskip{\bibleftmargin}
+\bibleftmargin=2.5em
+%
+%\def\refname{Reference} %<------------------------------------
+%\def\bibname{Bibliography}
+%
+\def\thebibliography#1{%
+ \@ifundefined{chapter}%
+ {\section*{\refname}%
+ \@mkboth{\uppercase{\refname}}{\uppercase{\refname}}
+ \addcontentsline{toc}{section}{\refname}}%
+ {\chapter*{\bibname}%
+ \@mkboth{\uppercase{\bibname}}{\uppercase{\bibname}}
+ \addcontentsline{toc}{chapter}{\bibname}}
+ \list
+ {\relax}{\labelsep=0em
+ \leftmargin=\bibleftmargin
+ \itemindent=-\bibleftmargin}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% PART II: APA SECTION HEADING & SERIATION %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% \apa@startsection{Heading Indent}{Beforeskip}{Afterskip}{Heading}
+%
+\def\apa@startsection#1#2#3{\@startsection{}{}{#1}{#2}{#3}{\relax}*}
+
+%
+% \b@level@LEVEL-NO@skip
+% Skip before heading: If >= 0, the following par is NOT indented.
+% If < 0, it is indented.
+% \b@level@LEVEL-NO@skip = vertical skip
+%
+% \e@level@LEVEL-NO@skip
+% Skip after heading: If > 0, the following par starts in a new line;
+% \e@level@LEVEL-NO@skip = vertical skip
+% If <= 0, it starts just after the heading;
+% \e@level@LEVEL-NO@skip = horizontal skip
+%
+\newskip\b@level@one@skip \b@level@one@skip=2.5ex plus 1ex minus .2ex
+\newskip\e@level@one@skip \e@level@one@skip=1.5ex plus .6ex minus .1ex
+\newskip\b@level@two@skip \b@level@two@skip=2.5ex plus 1ex minus .2ex
+\newskip\e@level@two@skip \e@level@two@skip=1.5ex plus .6ex minus .1ex
+\newskip\b@level@three@skip \b@level@three@skip=2.0ex plus .8ex minus .2ex
+\newskip\e@level@three@skip \e@level@three@skip=1.5ex plus .6ex minus .1ex
+\newskip\b@level@four@skip \b@level@four@skip=1.8ex plus .8ex minus .2ex
+\newskip\e@level@four@skip \e@level@four@skip=1.5ex plus .6ex minus .1ex
+\newskip\b@level@five@skip \b@level@five@skip=1.8ex plus .8ex minus .2ex
+\newskip\e@level@five@skip \e@level@five@skip=0ex
+
+%
+% (APA, p. 66)
+% Level One: Centered Boldface Uppercase Heading
+% Level Two: Centered Boldface Heading
+% Level Three: Centered Underlined Heading
+% Level Four: Flushleft Underlined Heading occuping a whole line
+% Level Five: Intended Underlined Heading followed by texts in the same line
+%
+% NOTE: According to the APA manual, Level One & Two headings are
+% NOT boldfaced. If you want to follow the manual strictly,
+% remove \bf in \levelone and \leveltwo macros.
+%
+\def\levelone#1{\apa@startsection%
+ {\z@}{\b@level@one@skip}{\e@level@one@skip}%
+ {\leftskip4em plus 1fill\rightskip\leftskip\parindent\z@\relax%
+ \bf\uppercase\expandafter{#1}}} % <- \bf
+\def\leveltwo#1{\apa@startsection%
+ {\z@}{\b@level@two@skip}{\e@level@two@skip}%
+ {\leftskip4em plus 1fill\rightskip\leftskip\parindent\z@\relax%
+ \bf #1}} % <- \bf
+\def\levelthree#1{\apa@startsection%
+ {\z@}{\b@level@three@skip}{\e@level@three@skip}%
+ {\leftskip4em plus 1fill\rightskip\leftskip\parindent\z@\relax%
+ \ULine{#1}}}
+\def\levelfour#1{\apa@startsection%
+ {\z@}{\b@level@four@skip}{\e@level@four@skip}{\ULine{#1}}}
+\def\levelfive#1{\apa@startsection%
+ {\parindent}{\b@level@five@skip}{\e@level@five@skip}{\ULine{#1}.}}
+
+%
+% Selecting the Levels of Headings (APA, pp. 66-67)
+%
+
+% One Level
+\def\OneLevelHeading{%
+ \def\section{\@ifnextchar*{\@sections}%
+ {\@ifnextchar[{\@sectionb}{\@section}}}%
+ \def\@sections*##1{\leveltwo{##1}}%
+ \def\@sectionb[##1]##2{\leveltwo{##2}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+ \def\@section##1{\leveltwo{##1}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+}
+
+% Two Levels
+\def\TwoLevelHeading{%
+ \def\section{\@ifnextchar*{\@sections}%
+ {\@ifnextchar[{\@sectionb}{\@section}}}%
+ \def\@sections*##1{\leveltwo{##1}}%
+ \def\@sectionb[##1]##2{\leveltwo{##2}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+ \def\@section##1{\leveltwo{##1}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+%
+ \def\subsection{\@ifnextchar*{\@subsections}%
+ {\@ifnextchar[{\@subsectionb}{\@subsection}}}%
+ \def\@subsections*##1{\levelfour{##1}}%
+ \def\@subsectionb[##1]##2{\levelfour{##2}%
+ \addcontentsline{toc}{subsection}{##1}}%
+ \def\@subsection##1{\levelfour{##1}%
+ \addcontentsline{toc}{subsection}{##1}}%
+}
+
+% Two Levels - Variation
+\def\TwoLevelHeadingA{%
+ \def\section{\@ifnextchar*{\@sections}%
+ {\@ifnextchar[{\@sectionb}{\@section}}}%
+ \def\@sections*##1{\leveltwo{##1}}%
+ \def\@sectionb[##1]##2{\leveltwo{##2}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+ \def\@section##1{\leveltwo{##1}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+%
+ \let\subsection=\levelfive%
+}
+
+% Three Levels
+\def\ThreeLevelHeading{%
+ \def\section{\@ifnextchar*{\@sections}%
+ {\@ifnextchar[{\@sectionb}{\@section}}}%
+ \def\@sections*##1{\leveltwo{##1}}%
+ \def\@sectionb[##1]##2{\leveltwo{##2}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+ \def\@section##1{\leveltwo{##1}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+%
+ \def\subsection{\@ifnextchar*{\@subsections}%
+ {\@ifnextchar[{\@subsectionb}{\@subsection}}}%
+ \def\@subsections*##1{\levelfour{##1}}%
+ \def\@subsectionb[##1]##2{\levelfour{##2}%
+ \addcontentsline{toc}{subsection}{##1}}%
+ \def\@subsection##1{\levelfour{##1}%
+ \addcontentsline{toc}{subsection}{##1}}%
+%
+ \let\subsubsection=\levelfive
+% If you want subsubsection headings listed in the table of contents
+% remove the above \let\subsub... and uncomment the following.
+% \def\subsubsection{\@ifnextchar*{\@subsubsections}%
+% {\@ifnextchar[{\@subsubsectionb}{\@subsubsection}}}%
+% \def\@subsubsections*##1{\levelfive{##1}}%
+% \def\@subsubsectionb[##1]##2{\levelfive{##2}%
+% \addcontentsline{toc}{subsubsection}{##1}}%
+% \def\@subsubsection##1{\levelfive{##1}%
+% \addcontentsline{toc}{subsubsection}{##1}}%
+}
+
+% Four Levels
+\def\FourLevelHeading{%
+ \def\section{\@ifnextchar*{\@sections}%
+ {\@ifnextchar[{\@sectionb}{\@section}}}%
+ \def\@sections*##1{\leveltwo{##1}}%
+ \def\@sectionb[##1]##2{\leveltwo{##2}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+ \def\@section##1{\leveltwo{##1}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+%
+ \def\subsection{\@ifnextchar*{\@subsections}%
+ {\@ifnextchar[{\@subsectionb}{\@subsection}}}%
+ \def\@subsections*##1{\levelthree{##1}}%
+ \def\@subsectionb[##1]##2{\levelthree{##2}%
+ \addcontentsline{toc}{subsection}{##1}}%
+ \def\@subsection##1{\levelthree{##1}%
+ \addcontentsline{toc}{subsection}{##1}}%
+%
+ \def\subsubsection{\@ifnextchar*{\@subsubsections}%
+ {\@ifnextchar[{\@subsubsectionb}{\@subsubsection}}}%
+ \def\@subsubsections*##1{\levelfour{##1}}%
+ \def\@subsubsectionb[##1]##2{\levelfour{##2}%
+ \addcontentsline{toc}{subsubsection}{##1}}%
+ \def\@subsubsection##1{\levelfour{##1}%
+ \addcontentsline{toc}{subsubsection}{##1}}%
+%
+ \let\paragraph=\levelfive%
+}
+
+% Five Levels
+\def\FiveLevelHeading{%
+ \def\section{\@ifnextchar*{\@sections}%
+ {\@ifnextchar[{\@sectionb}{\@section}}}%
+ \def\@sections*##1{\levelone{##1}}%
+ \def\@sectionb[##1]##2{\levelone{##2}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+ \def\@section##1{\levelone{##1}%
+ \@mkboth{\uppercase{##1}}{\uppercase{##1}}%
+ \addcontentsline{toc}{section}{##1}}%
+%
+ \def\subsection{\@ifnextchar*{\@subsections}%
+ {\@ifnextchar[{\@subsectionb}{\@subsection}}}%
+ \def\@subsections*##1{\leveltwo{##1}}%
+ \def\@subsectionb[##1]##2{\leveltwo{##2}%
+ \addcontentsline{toc}{subsection}{##1}}%
+ \def\@subsection##1{\leveltwo{##1}%
+ \addcontentsline{toc}{subsection}{##1}}%
+%
+ \def\subsubsection{\@ifnextchar*{\@subsubsections}%
+ {\@ifnextchar[{\@subsubsectionb}{\@subsubsection}}}%
+ \def\@subsubsections*##1{\levelthree{##1}}%
+ \def\@subsubsectionb[##1]##2{\levelthree{##2}%
+ \addcontentsline{toc}{subsubsection}{##1}}%
+ \def\@subsubsection##1{\levelthree{##1}%
+ \addcontentsline{toc}{subsubsection}{##1}}%
+%
+ \let\paragraph=\levelfour%
+ \let\subparagraph=\levelfive%
+}
+
+%
+% Seriations (pp. 66-68): ONE level of seriation only.
+% \begin{seriate} \item ... \end{seriate}
+% within a paragraph or sentence
+% \begin{APAenumerate} \item ... \end{APAenumerate}
+% at the start of each paragraph in a series
+% with enumeration
+% \begin{APAitemize} \item ... \end{APAitemize}
+% at the start of each paragraph in a series
+% without enumeration
+%
+
+% Refer to LaTeX book to modify, if you want, spaces before and after of
+% \begin{...} ... \end{...} or spaces between \item-s.
+\newcounter{APAenum}
+\newskip\@text@par@indent
+\def\APAenumerate{\@text@par@indent\parindent\setbox0\hbox{1. }%
+ \list{\arabic{APAenum}.}{\usecounter{APAenum}
+ \labelwidth\z@\labelsep\z@\leftmargin\z@\parsep\z@
+ \rightmargin\z@\itemsep\z@\topsep\z@\partopsep\z@
+ \itemindent\@text@par@indent\advance\itemindent by\wd0
+ \def\makelabel##1{\hss\llap{##1 }}}}
+\let\endAPAenumerate=\endlist
+
+\def\seriate{\@bsphack\begingroup%
+ \setcounter{APAenum}{0}%
+ \def\item{\addtocounter{APAenum}{1}(\alph{APAenum})\space}%
+ \ignorespaces}
+\def\endseriate{\endgroup\@esphack}
+
+\def\APAitemize{\@text@par@indent\parindent\setbox0\hbox{$\bullet$}%
+ \list{$\bullet$}{%
+ \labelwidth\z@\labelsep.5em\leftmargin\z@\parsep\z@
+ \rightmargin\z@\itemsep\z@\topsep\z@\partopsep\z@
+ \itemindent\@text@par@indent
+ \advance\itemindent by\wd0\advance\itemindent by.5em
+ \def\makelabel##1{\hss\llap{##1}}}}
+\let\endAPAitemize=\endlist
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% PART III: UNDELINE STUFF (ulem.sty) %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ulem.sty - Copyright (c) 1989 by Donald Arseneau %
+% %
+% These macros may be freely transmitted, reproduced, or modified for %
+% non-commercial purposes provided that this notice is left intact. %
+% (Donald Arseneau's Copyright Notice) %
+% %
+% Comments on macros are removed. Please refer to the ulem.sty file %
+% for detailed macros. %
+% %
+% Two ways to underline texts: %
+% {\ULem Blah Blah Blah} %
+% ^ ^ %
+% \ULine{Blah Blah Blah} %
+% ^ ^ %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\ULem{\let\em\LA@em
+ \expandafter\UL@on\expandafter{\ifnum0=`}\fi}
+\def\ULine{\bgroup\UL@on}
+\let\LA@em\em
+
+%\let\em\ULem
+%\def\normalem{\let\em\LA@em}
+
+% The above 2 lines are replaced with the following 2 lines by Young Ryu.
+\def\UnderlinedBemOnly{\let\Bem\ULem}
+\def\UnderlinedEm{\let\em\ULem \let\Bem\ULem}
+
+\newbox\UL@hyphenbox
+\newbox\UL@box
+\newcount\UL@spfactor
+\newcount\UL@penalty
+\newskip\UL@skip
+\newdimen\UL@lht
+\newdimen\UL@ldp
+
+\let\LA@space\ \let\LA@hskip\hskip
+
+\def\UL@end*{\relax\relax}
+
+\def\UL@on#1{\leavevmode\everymath{\UL@hrest}\let\-\UL@dischyp
+ \let\ \UL@space \let\hskip\UL@hskip
+ \setbox\UL@box\hbox{(}\UL@ldp\dp\UL@box \UL@lht-\UL@ldp\advance\UL@lht.4\p@
+ \setbox\UL@hyphenbox\hbox{\setbox\UL@box\hbox{-}\UL@putbox}%
+ \UL@word#1\global\UL@spfactor\spacefactor{} \UL@end* }
+
+\let\UL@unegroup\@empty
+
+\def\UL@start{\setbox\UL@box\hbox\bgroup\everyhbox{\UL@hrest}%
+ \let\UL@start\@empty \let\UL@putbox\@empty \let\UL@unegroup\bgroup
+ \kern-3sp\kern3sp}
+
+\def\UL@stop{\global\UL@penalty\lastpenalty
+ \ifdim\lastkern=3sp \egroup
+ \ifdim\wd\UL@box=\z@
+ \else \UL@putbox \fi
+ \else
+ \egroup \UL@putbox
+ \fi\UL@unegroup}
+
+\def\UL@putbox{{\UL@skip\wd\UL@box \advance\UL@skip\UL@pixel
+ \vrule \@height\UL@lht \@depth\UL@ldp \@width\UL@skip
+ \kern-\UL@skip}\box\UL@box
+ \ifnum\UL@penalty=\z@ \else \penalty\UL@penalty \fi}
+
+\def\UL@word#1 {\UL@start#1 \ifx\UL@end#1\egroup
+ \unkern \unskip
+ \spacefactor\UL@spfactor \let\UL@word\egroup
+ \else
+ \ifmmode\else \ifdim\lastskip=\z@\else
+ \global\UL@skip\lastskip \unskip
+ \UL@stop \UL@leaders
+ \fi\fi
+ \fi \UL@word}
+
+\newdimen\UL@pixel \UL@pixel=0.0033333truein
+
+\def\UL@leaders{{\advance \UL@skip \UL@pixel
+ \leaders\hrule \@height\UL@lht \@depth\UL@ldp\LA@hskip\UL@skip
+ \kern-\UL@pixel}}
+
+\def\UL@hskip{\afterassignment\UL@reskip \global\UL@skip}
+
+\def\UL@reskip{\UL@stop \UL@leaders \UL@start}
+
+\def\UL@hrest{\let\hskip\LA@hskip \let\ \LA@space \let\-\UL@dischyp}
+
+\def\UL@space{\LA@space \global\UL@skip\lastskip \unskip \UL@reskip}
+
+\def\UL@dischyp{\penalty\z@
+ \UL@stop \discretionary{\copy\UL@hyphenbox}{}{}\UL@start}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%% End of ulem.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
diff --git a/macros/latex209/contrib/timeline/timeline.sty b/macros/latex209/contrib/timeline/timeline.sty
new file mode 100644
index 0000000000..59223b360a
--- /dev/null
+++ b/macros/latex209/contrib/timeline/timeline.sty
@@ -0,0 +1,118 @@
+%%% Slice------------------------------------------------------------
+%%% File: Timeline.Sty
+%%% Written to work with either LaTeX or plain TeX
+%%%
+%%% In LaTeX:
+%%% \begin{timeline}{length}(start,stop)
+%%% .
+%%% .
+%%% .
+%%% \end{timeline}
+%%%
+%%% in plain TeX
+%%% \timeline{length}(start,stop)
+%%% .
+%%% .
+%%% .
+%%% \endtimeline
+%%% in between the two, we may have:
+%%% \item{date}{description}
+%%% \item[sortkey]{date}{description}
+%%% \optrule
+%%%
+%%% the options to timeline are:
+%%% length The amount of vertical space that the timeline should
+%%% use.
+%%% (start,stop) indicate the range of the timeline. All dates or
+%%% sortkeys should lie in the range [start,stop]
+%%%
+%%% \item without the sort key expects date to be a number (such as a
+%%% year).
+%%% \item with the sort key expects the sort key to be a number; date
+%%% can be anything. This can be used for log scale time lines
+%%% or dates that include months or days.
+%%% putting \optrule inside of the timeline environment will cause a
+%%% vertical rule to be drawn down the center of the timeline.
+
+\catcode`\@=11 % Pretend @ is a letter
+\newcount\startat \newcount\tllength
+\newdimen\putithere \newdimen\itwasthere
+\newcount\scr@tchi \newdimen\scr@tchii
+
+% A vertically centered lap
+\long\def\ylap#1{\vbox to \z@{\vss#1\vss}}
+
+% Vertical `laps'; cf. \llap and \rlap
+\long\def\ulap#1{\vbox to \z@{\vss#1}}
+\long\def\dlap#1{\vbox to \z@{#1\vss}}
+
+\def\timeline#1(#2,#3){\ifvmode\else\par\fi$$\vbox to#1\bgroup
+ % The \vbox command is
+ % surrounded by $$..$$ to make it
+ % fit in well with paragraphs.
+ \offinterlineskip
+ \startat=#2\tllength=#3
+ \advance\tllength by-\startat % \tllength should be the total
+ % length of the timeline.
+ \def\item{\@ifnextchar[\@item\@itemnosrtkey}
+ \def\@item[##1]##2##3{\scr@tchi=##1
+ \advance\scr@tchi by-\startat
+ \putithere=#1 \divide\putithere by 65536 % to avoid arithmetic
+ % overflow
+ \multiply\putithere by \scr@tchi % we only remain
+ \divide\putithere by\tllength % accurate to 1pt in
+ \multiply\putithere by 65536 % these calculations
+ % Now \putithere has how far
+ % down we should go for this item.
+ \scr@tchii=\putithere \advance\scr@tchii by -\itwasthere
+ \ifdim\scr@tchii<12pt
+ \ifx\lrswitch L \@putright{\putithere}{##2}{##3}
+ \else \@putleft{\putithere}{##2}{##3}
+ \fi
+ \else \@putleft{\putithere}{##2}{##3}
+ \fi
+ \itwasthere=\putithere
+ }
+ \def\@itemnosrtkey##1##2{\@item[##1]{##1}{##2}}
+ \def\@putright##1##2##3{\dlap
+ {\kern##1\centerline
+ {\rlap
+ {\ $\bullet$\hskip1.5em{\bf ##2} \ ##3}}}
+ \let\lrswitch=R
+ }
+ \def\@putleft##1##2##3{\dlap
+ {\kern##1\centerline
+ {\llap
+ {{\bf ##2} \ ##3\hskip1.5em$\bullet$\ }}}
+ \let\lrswitch=L
+ }
+ \def\optrule{\dlap
+ {\centerline
+ {\dimen0=#1 \advance\dimen0 by 6pt % This calculation is
+ % kept local
+ \vrule depth \dimen0 height-6pt}}
+ }
+}
+\def\endtimeline{\vfill\egroup
+ \ifx\@latexerr\undefined\else
+ \global\@ignoretrue
+ \fi
+ \vbox{\vskip\baselineskip}$$}
+ % Put the extra \vskip in a \vbox to hide it from
+ % the math gods.
+\ifx\@latexerr\undefined
+ \def\@ifnextchar#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}
+ \futurelet\@tempc\@ifnch}
+ \def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb
+ \fi
+ \fi \@tempd}
+
+ % NOTE: the following hacking must precede the definition of \:
+ % as math medium space.
+
+ \def\:{\let\@sptoken= } \: % this makes \@sptoken a space token
+
+ \def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}
+ \catcode`\@=12 % Let's not pretend @ is a letter
+\fi
diff --git a/macros/latex209/contrib/timeline/tl-sample.tex b/macros/latex209/contrib/timeline/tl-sample.tex
new file mode 100644
index 0000000000..fbfa9f39a4
--- /dev/null
+++ b/macros/latex209/contrib/timeline/tl-sample.tex
@@ -0,0 +1,20 @@
+\documentstyle[timeline]{article}
+\def\TeXMaG{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX% TeX part
+ M\kern-.1667em\lower.5ex\hbox{A}\kern-.2267emG}
+\begin{document}
+This is a timeline of the history of \TeXMaG.
+\begin{timeline}{2in}(0,180)
+\optrule
+\item[12]{Jan. 24}{Volume 1, Number 1}
+\item[33]{Mar. 6}{Volume 1, Number 2}
+\item[43]{Mar. 25}{Volume 1, Number 3}
+\item[81]{May. 13}{Volume 1, Number 4}
+\item[102]{Jun. 25}{Volume 1, Number 5}
+\item[132]{Aug. 24}{Volume 1, Number 6}
+\item[160]{Oct. 10}{Volume 1, Number 7}
+\item[179]{Dec. 31}{The distant future}
+\end{timeline}%% There needs to be a comment here, unfortunately.
+This text should not be indented at all. I'm going to keep on going
+to see what happens, because the best way to test these things is to
+have the text longer than one line.
+\end{document}
diff --git a/macros/latex209/contrib/trees/eppstein/trees.sty b/macros/latex209/contrib/trees/eppstein/trees.sty
new file mode 100644
index 0000000000..be4c556cd4
--- /dev/null
+++ b/macros/latex209/contrib/trees/eppstein/trees.sty
@@ -0,0 +1,120 @@
+% treedef.tex
+%
+% These definitions for tree macros are taken from "Trees in TeX",
+% by David Eppstein, as published in TUGboat 6#1, March 1985.
+% David Eppstein's address (as of 15 June 1988) is
+% Computer Science Department
+% Columbia University
+% New York, NY 10027
+% Eppstein@cs.Columbia.edu
+
+\newbox\treebox
+\def\tree{\global\setbox\treebox=\boxtree}
+\def\subtree{\ettext \boxtree}
+\def\leaf#1{\subtree#1\endsubtree}
+
+\def\endsubtree{\ettext \egroup}
+\def\endtree{\endsubtree \settreesizes \typesettree}
+
+\newif\iftreetext\treetextfalse % Whether still aligning text
+\def\boxtree{\hbox\bgroup % Start outer box of tree or subtree
+ \baselineskip 2.5ex % Narrow line spacing slightly
+ \tabskip 0pt % No spurious glue in alignment
+ \vbox\bgroup % Start inner text \vbox
+ \treetexttrue % Remember for \ettext
+ \let\par\crcr \obeylines % New line breaks without explicit \cr
+ \halign\bgroup##\hfil\cr} % Start alignment with simple template
+\def\ettext{\iftreetext % Are we still in inner text \vbox?
+ \crcr\egroup \egroup \fi} % Yes, end alignment and box
+
+\def\cons#1#2{\edef#2{\xmark #1#2}} % Add something to start of list.
+\def\car#1{\expandafter\docar#1\docar} % Take first element of list
+\def\docar\xmark#1\xmark#2\docar{#1} % ..by ignoring rest in expansion.
+\def\cdr#1{\expandafter\docdr#1\docdr#1} % Similarly, drop first element.
+\def\docdr\xmark#1\xmark#2\docdr#3{\def#3{\xmark #2}}
+\def\xmark{\noexpand\xmark} % List separator expands to self.
+\def\nil{\xmark} % Empty list is just a separator.
+
+\def\settreesizes{\setbox0=\copy\treebox \global\let\treesizes\nil \setsizes}
+\newdimen\treewidth % Width of this part of the tree.
+\def\setsizes{\setbox0=\hbox\bgroup % Get a horiz list as a workspace.
+ \unhbox0\unskip % Take tree, unpack it into horiz list.
+ \inittreewidth % Get old width at this level.
+ \sizesubtrees % Recurse through all subtrees.
+ \sizelevel % Now set width from remaining \vbox.
+ \egroup} % All done, finish our \hbox.
+
+\def\inittreewidth{\ifx\treesizes\nil % If this is the first at this level
+ \treewidth=0pt % ..then we have no previous max width.
+ \else \treewidth=\car\treesizes % Otherwise take old max level width
+ \global\cdr\treesizes % ..and advance level width storage
+ \fi} % ..in preparation for next level.
+
+\def\sizesubtrees{\loop % For each box in horiz list (subtree)
+ \setbox0=\lastbox \unskip % ..pull it off list and flush glue.
+ \ifhbox0 \setsizes % If hbox, it's a subtree - recurse
+ \repeat} % ..and loop; end loop on tree text.
+
+\def\sizelevel{\ifdim\treewidth<\wd0 % If greater than previous maximum
+ \treewidth=\wd0 \fi % Then set max to new high
+ \global\cons{\the\treewidth}\treesizes}% In either case, put back on list
+
+\newdimen\treeheight % Height of this part of the tree.
+\newif\ifleaf % Tree has no subtrees (is a leaf).
+\newif\ifbotsub % Bottom subtree of parent.
+\newif\iftopsub % Top subtree of parent.
+\def\typesettree{\medskip \maketree \medskip} % Make whole tree with spacing.
+\def\maketree{\hbox{\treewidth=\car\treesizes % Get width at this level.
+ \cdr\treesizes % Set up width list for recursion.
+ \makesubtreebox\unskip % Set \treebox to text, make subtrees.
+ \ifleaf \makeleaf % No subtrees, add glue.
+ \else \makeparent \fi}} % Have subtrees, stick them at right.
+
+{\catcode`@=11 % Be able to use \voidb@x.
+\gdef\makesubtreebox{\unhbox\treebox % Open up tree or subtree.
+ \unskip\global\setbox\treebox\lastbox % Pick up very last box.
+ \ifvbox\treebox % If we're already at the \vbox
+ \global\leaftrue \let\next\relax % ..then this is a leaf.
+ \else \botsubtrue % Otherwise, we have subtrees.
+ \setbox0\box\voidb@x % Init stack of processed subs
+ \botsubtrue \let\next\makesubtree % ..and call \maketree on them.
+ \fi \next}} % Finish up for whichever it was.
+
+\def\makesubtree{\setbox1\maketree % Call \maketree on this subtree.
+ \unskip\global\setbox\treebox\lastbox % Pick up box before it.
+ \treeheight=\ht1 % Get height of subtree we made
+ \advance\treeheight 2ex % Add some room around the edges
+ \ifhbox\treebox \topsubfalse % If picked up box is a \vbox,
+ \else \topsubtrue \fi % ..this is the top, otherwise not.
+ \addsubtreebox % Stack subtree with the rest.
+ \iftopsub \global\leaffalse % If top, remember not a leaf
+ \let\next\relax \else % ..(after recursion), set return.
+ \botsubfalse \let\next\makesubtree % Otherwise, we have more subtrees.
+ \fi \next} % Do tail recursion or return.
+
+\def\addsubtreebox{\setbox0=\vbox{\subtreebox\unvbox0}}
+\def\subtreebox{\hbox\bgroup % Start \hbox of tree and lines
+ \vbox to \treeheight\bgroup % Start \vbox for vertical rules.
+ \ifbotsub \iftopsub \vfil % If both bottom and top subtree
+ \hrule width 0.4pt % ..vertical rule is just a dot.
+ \else \treehalfrule \fi \vfil % Bottom gets half-height rule.
+ \else \iftopsub \vfil \treehalfrule % Top gets half-height the other way.
+ \else \hrule width 0.4pt height \treeheight \fi\fi % Middle, full height.
+ \egroup % Finish vertical rule \vbox.
+ \treectrbox{\hrule width 1em}\hskip 0.2em\treectrbox{\box1}\egroup}
+
+\def\treectrbox#1{\vbox to \treeheight{\vfil #1\vfil}}
+\def\treehalfrule{\dimen0=\treeheight % Get total height.
+ \divide\dimen0 2\advance\dimen0 0.2pt % Divide by two, add half horiz height.
+ \hrule width 0.4pt height \dimen0} % Make a vertical rule that high.
+
+\def\makeleaf{\box\treebox} % Add leaf box to horiz list.
+\def\makeparent{\ifdim\ht\treebox>\ht0 % If text is higher than subtrees
+ \treeheight=\ht\treebox % ..use that height.
+ \else \treeheight=\ht0 \fi % Otherwise use height of subtrees.
+ \advance\treewidth-\wd\treebox % Take remainder of level width
+ \advance\treewidth 1em % ..after accounting for text and glue.
+ \treectrbox{\box\treebox}\hskip 0.2em % Add text, space before connection.
+ \treectrbox{\hrule width \treewidth}\treectrbox{\box0}} % Add \hrule, subs.
+
+\endinput
diff --git a/macros/latex209/contrib/trees/pstrees/README b/macros/latex209/contrib/trees/pstrees/README
new file mode 100644
index 0000000000..1192159365
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/README
@@ -0,0 +1,50 @@
+This package consists of a preprocessor and some macro-definitions,
+by which linguistics-style trees can be specified as convenient
+indented lists, with spacing and line-drawing done automatically.
+
+It depends on Emma Pease's tree-dvips package, available from
+pub/TeXfiles on csli.stanford.edu, and requires the use of dvips
+(Radial Eye Softrware) for the lines to be drawn automatically.
+
+
+Files included are:
+
+ trees.sty: Macros for linguistics tree layout.
+
+ trees.doc.txp/tex/dvi/ps: Documentation for tree-formatting system,
+ including a preprocessor and tree-layout macros.
+
+ trees: executable (by Suns, at least) for tree-preprocessor.
+
+ tree.c, etc.; makefile: source files for compilation of preprocessor.
+
+ test.txp: a (very) little test file.
+
+ BUGS
+
+Sometimes, when `\\ ' appears in the input, `\\\` appears in the
+output.
+
+ LICENSE
+
+
+The package maybe be freely used by individuals for reporting research
+(including academic book publishing), and adapted, as long as the
+adapted versions contain reference and acknowledgement to the original
+author, Avery D. Andrews.
+
+Essentially commerical use is prohibited without explicit permission.
+
+The package is presented for use as is, with no warrantee as to its
+suitablility for any particular purpose, and no liability accepted
+for any consequences of use.
+
+Avery.Andrews@anu.edu.au
+
+ Avery D Andrews
+ Linguistics, The Faculties
+ ANU PO Box 4
+ Canberra ACT 2601
+ Australia, The Faculties
+
+
diff --git a/macros/latex209/contrib/trees/pstrees/align.h b/macros/latex209/contrib/trees/pstrees/align.h
new file mode 100644
index 0000000000..499554e233
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/align.h
@@ -0,0 +1,27 @@
+
+/* Constants and Types for align */
+
+/* utility constants */
+
+#define TRUE 1
+#define FALSE 0
+
+
+/* operating parameters */
+
+#define linesize 512 /* max size of input line */
+#define charmax 2000 /* maximum # char storable */
+#define ROWSIZE 50 /* maximum # words in row - 1 */
+#define stackmax 5 /* maximum nesting of Scribe envs in word */
+#define COLSIZE 4 /* maximum # rows - 1 */
+#define TRANSMAX 5 /* max # lines int translation (really an error
+ catcher) */
+
+/* Global Types */
+
+typedef struct {
+ char *loc; /* location of start of word */
+ int size; /* estimated output length of word */
+ int bracket; /* a delimiter type that can be put round word in output */
+} word;
+
diff --git a/macros/latex209/contrib/trees/pstrees/ansi.c b/macros/latex209/contrib/trees/pstrees/ansi.c
new file mode 100644
index 0000000000..895df389b8
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/ansi.c
@@ -0,0 +1,63 @@
+#include <strings.h>
+
+/* this `type less' definition of max is doubtless dangerous,
+ but it *seems* to work */
+
+
+extern void *malloc();
+
+max(a, b)
+{
+ if (a > b) return(a);
+ else return(b);
+}
+
+void reverse(s)
+char s[];
+{
+ int c, i, j;
+
+for (i=0, j = strlen(s)-1; i<j; i++,j--) {
+ c = s[i];
+ s[i] = s[j];
+ s[j] = c;
+ }
+}
+
+
+void itoa(n,s)
+char s[];
+int n;
+{
+ int i, sign;
+
+ if ((sign = n) < 0) /* record sign */
+ n = -n; /* make n positive */
+ i = 0;
+ do { /* generate digits in reverse order */
+ s[i++] = n % 10 + ' 0'; /* get next digit */
+ } while ((n /= 10) > 0); /* delete it */
+ if (sign < 0)
+ s[i++] = '-';
+ s[i] = '\0';
+ reverse(s);
+}
+
+/*
+#include <stdio.h>
+
+main()
+{
+ char s[5];
+
+ strcpy(s,"dog");
+
+ printf("%s\n",s);
+
+ reverse(s);
+
+ itoa(4,s);
+
+ printf("%s\n",s);
+}
+*/
diff --git a/macros/latex209/contrib/trees/pstrees/columns.c b/macros/latex209/contrib/trees/pstrees/columns.c
new file mode 100644
index 0000000000..af283dcba7
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/columns.c
@@ -0,0 +1,132 @@
+# include "align.h"
+# include <stdio.h>
+
+/* externals */
+ /* from slurp.c */
+extern void fetchline();
+extern char nextchar();
+extern char peekchar();
+extern int eoln();
+extern FILE *outstream;
+
+ /* from words.c */
+extern void readword_col();
+extern void init_store();
+
+/* externals from errors.c */
+extern goof(); /* error-writing routine
+ void goof(char *s); */
+extern int sinned, error; /* error-flags */
+
+
+/* local word-ending function */
+static int endword(c)
+char c;
+{
+ char d;
+ if (eoln() || ((c == ' ' && ((d = squizchar()) == ' ' || d == '\n')))
+ || c == '|')
+ return(TRUE);
+ else
+ return(FALSE);
+}
+
+/* skips over `|''s and blanks, getting width */
+static int chewspace()
+{
+ int count;
+ char c;
+
+ count = 0;
+ if (!eoln()) {
+ while ((c = squizchar()) == ' ' || c == '|') {
+ count++;
+ nextchar();
+ }
+ }
+ return(count);
+}
+
+
+do_word()
+{
+ word holder;
+ int space;
+ int stop;
+
+ if (!eoln()) {
+ init_store();
+ readword_col(&holder,&stop,endword,nextchar);
+/* printf("word = %s; eol = %d\n",holder.loc,eoln()); */
+ space = chewspace();
+/* printf("chewed space %d:: eol = %d\n",space,eoln()); */
+ if (!error) {
+ if (eoln()) {
+ fprintf(outstream,"%s",holder.loc);
+ }
+ else {
+ space = space+holder.size+1;
+ fprintf(outstream,"\\cbx{%d}{%s}",space,holder.loc);
+ }
+ }
+ }
+}
+
+do_line()
+{
+ int initspace;
+
+ initspace = chewspace();
+ if (!eoln() && initspace > 0)
+ fprintf(outstream,"\\cbx{%d}{}",initspace);
+ while (!eoln())
+ do_word();
+ fprintf(outstream, "\\\\\n");
+}
+
+
+/* top-level routine, that reads in lines until it encounters
+ end-of-example or eof */
+
+void columns()
+{
+ int go;
+
+ error = FALSE;
+ go = TRUE;
+ while (go) {
+ fetchline();
+
+ if (matchstr(".>"))
+ go = FALSE;
+ if (eof()) {
+ goof("file ends in example");
+ go = FALSE;
+ }
+ if (go) do_line();
+ }
+}
+
+/*
+char delmark = '\\';
+int wordmax = 60;
+
+main()
+{
+word sample;
+int stop;
+int s;
+
+get_com_widths("widths.dat");
+open_source("text.dat");
+init_store();
+
+advance();
+readword_col(&sample,&stop,endword,nextchar);
+printf("%s, size = %d, bracket= %d\n",sample.loc,sample.size,sample.bracket);
+if (stop) printf("stop!\n");
+}
+*/
+
+
+
diff --git a/macros/latex209/contrib/trees/pstrees/makefile b/macros/latex209/contrib/trees/pstrees/makefile
new file mode 100644
index 0000000000..dde80b9a95
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/makefile
@@ -0,0 +1,6 @@
+%.o: %.c
+ cc -c $< -g
+
+trees: trees.o slurp.o words.o ansi.o columns.o
+ cc -o trees trees.o slurp.o words.o ansi.o columns.o -lm
+
diff --git a/macros/latex209/contrib/trees/pstrees/slurp.c b/macros/latex209/contrib/trees/pstrees/slurp.c
new file mode 100644
index 0000000000..27286165f7
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/slurp.c
@@ -0,0 +1,211 @@
+#include "align.h"
+/* VAX/VMS verion
+#include <unixio>
+*/
+#include <stdio.h>
+#include <ctype.h>
+
+char *input_pointer;
+
+FILE *outstream;
+
+static FILE *input_stream;
+ char input_buffer[512];
+static int input_eof = TRUE;
+static int input_eoln = TRUE;
+static int line_count;
+
+
+int open_source(file)
+char *file;
+{
+ input_pointer = input_buffer;
+ line_count = 0;
+ if (strcmp(file,"stdin") == 0) {
+ input_eof = FALSE;
+ input_stream = stdin;
+ return(TRUE);
+ }
+ else
+ if ((input_stream = fopen(file,"r")) != NULL) {
+ input_eof = FALSE;
+ return(TRUE);
+ }
+ else {
+ input_eof = TRUE;
+ return(FALSE);
+ }
+}
+
+
+int fetchline()
+{
+ if (fgets(input_buffer,511,input_stream) == NULL) {
+ input_eof=TRUE;
+ return(FALSE);
+ }
+ else {
+ input_pointer = input_buffer;
+ line_count++;
+ input_eoln = FALSE;
+ return(TRUE);
+ }
+}
+
+
+/* returns the next character, interpreting EOLN as ' ', calling
+ for new line at EOLN, and maintaining input_eoln flag. */
+char nextchar()
+{
+ char c;
+
+ if (input_eoln) {
+ if (fetchline())
+ input_eoln = FALSE;
+ else return(' ');
+ }
+
+ c = *input_pointer++;
+ if (c == '\n') {
+ input_eoln = TRUE;
+ return(' ');
+ }
+ else return(c);
+
+}
+
+/* returns nextchar without advancing char pointer */
+char peekchar()
+{
+ char c;
+ c = nextchar();
+ input_pointer--;
+ return(c);
+}
+
+/* returns current position (old)
+int currentpos()
+{
+ return(input_pointer-input_buffer);
+}
+*/
+
+int currentpos()
+{
+ int pos;
+ char *point;
+
+ pos = 0;
+ for (point = input_buffer; point <= input_pointer; point++)
+ if (*point == '\t') {
+ pos = pos - (pos%8)+8;
+ }
+ else pos++;
+ return(pos);
+}
+
+
+/* returns TRUE if remainder of line matches string */
+int matchstr(s)
+char s[];
+{
+ if (!strncmp(input_pointer,s,strlen(s)))
+ return(TRUE);
+ else
+ return(FALSE);
+}
+
+/* returns whether end-of-line has been reached */
+int eoln()
+{
+ return(input_eoln);
+}
+
+/* returns whether end-of-file has been reached */
+int eof()
+{return(input_eof);}
+
+/* advances to next printing char */
+void advance()
+{
+ while (nextchar() == ' ' && !eof()) {};
+ input_pointer--;
+}
+
+/* advances to next printing char or eoln, returning TRUE if not eoln */
+int advanceeoln()
+{
+ char c;
+
+ if (eoln()) return(FALSE);
+ while ((c = nextchar()) == ' ' || c == '\t')
+ if (eoln()) return(FALSE);
+ input_pointer--;
+ return (TRUE);
+}
+
+/* returns actual next char, no fiddles */
+char squizchar()
+{
+ return(*input_pointer);
+}
+
+
+int advanceeoln_pos(pos)
+int *pos;
+{
+ int okay;
+
+ okay = advanceeoln();
+ *pos = currentpos();
+ return(okay);
+}
+
+skip_to(to)
+char to[];
+{
+ int l;
+ l = strlen(to);
+ while (!(strncmp(to,input_pointer,l) == 0 || eof())) {
+ nextchar();
+ }
+}
+
+gettoken(t)
+char *t;
+{
+ if (advanceeoln()) {
+ if (isalnum(*t++ = nextchar())) {
+ while (isalnum(*t++ = nextchar())) {}
+ input_pointer--;
+ t--;
+ }
+ *t = '\0';
+ return(TRUE);
+ }
+ else return(FALSE);
+}
+
+
+int linecount()
+{return(line_count);}
+
+void writeline()
+{
+ fputs(input_buffer,outstream);
+}
+
+/*
+main()
+{
+
+ char s[30];
+
+ open_source("stdin");
+ printf(": ");
+
+ fetchline();
+ while (gettoken(s))
+ printf("%s\n",s);
+}
+*/
diff --git a/macros/latex209/contrib/trees/pstrees/test.txp b/macros/latex209/contrib/trees/pstrees/test.txp
new file mode 100644
index 0000000000..8c8366a55a
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/test.txp
@@ -0,0 +1,20 @@
+\documentstyle[11pt,trees,tree-dvips]{article}
+
+\begin{document}
+
+Here is a sample tree:
+\begin{center}
+.[
+S
+ NP
+ this
+ N
+ tree
+ VP
+ V
+ works
+.]
+\end{center}
+
+
+\end{document}
diff --git a/macros/latex209/contrib/trees/pstrees/trees b/macros/latex209/contrib/trees/pstrees/trees
new file mode 100644
index 0000000000..18506c160d
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/trees
Binary files differ
diff --git a/macros/latex209/contrib/trees/pstrees/trees.1 b/macros/latex209/contrib/trees/pstrees/trees.1
new file mode 100644
index 0000000000..cc265de7bd
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/trees.1
@@ -0,0 +1,56 @@
+.\" @(#)trees.1 1.0 93/12/07
+.TH TREES 1 "8 December 1993"
+.SH NAME
+trees \- Preprocessor for LaTeX documents including trees.
+.SH SYNOPSIS
+.B trees
+.IB filename
+.SH DESCRIPTION
+By convention the filename must end in \fB.txp\fP but that ending is
+not included on the command line. Output goes into
+\fBname_tx2.tex\fP which can be latexed. See the manual for full
+instructions.
+.SH PACKAGE DESCRIPTION
+This package consists of a preprocessor and some macro-definitions,
+by which linguistics-style trees can be specified as convenient
+indented lists, with spacing and line-drawing done automatically.
+
+It depends on Emma Pease's tree-dvips package, available from
+pub/TeXfiles on csli.stanford.edu, and requires the use of dvips
+(Radial Eye Software) for the lines to be drawn automatically.
+Files included are:
+
+trees.sty: Macros for linguistics tree layout.
+
+trees.doc.txp/tex/dvi/ps: Documentation for tree-formatting system,
+including a preprocessor and tree-layout macros.
+
+trees: executable (by Suns, at least) for tree-preprocessor.
+
+tree.c, etc.; makefile: source files for compilation of preprocessor.
+
+test.txp: a (very) little test file.
+
+.SH BUGS
+Sometimes, when `\\\\ ' appears in the input, `\\\\\\` appears in the
+output.
+.SH LICENSE
+The package maybe be freely used by individuals for reporting research
+(including academic book publishing), and adapted, as long as the
+adapted versions contain reference and acknowledgement to the original
+author, Avery D. Andrews.
+.LP
+Essentially commerical use is prohibited without explicit permission.
+.LP
+The package is presented for use as is, with no warrantee as to its
+suitablility for any particular purpose, and no liability accepted
+for any consequences of use.
+.LP
+Avery.Andrews@anu.edu.au
+.LP
+ Avery D Andrews
+ Linguistics, The Faculties
+ ANU PO Box 4
+ Canberra ACT 2601
+ Australia, The Faculties
+
diff --git a/macros/latex209/contrib/trees/pstrees/trees.c b/macros/latex209/contrib/trees/pstrees/trees.c
new file mode 100644
index 0000000000..0d3cc8cd3b
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/trees.c
@@ -0,0 +1,372 @@
+# include "align.h"
+/* VAX VMS
+# include <unixio>
+*/
+# include <stdio.h>
+
+/* #define INC_COLUMNS */
+
+ /* externals from slurp */
+extern char nextchar();
+extern char peekchar();
+extern int fetchline();
+extern void writeline();
+extern void skip_to();
+extern FILE *outstream;
+
+
+/* externals from words */
+extern void readword();
+extern void initstore();
+
+/* types */
+struct tnode {
+ word name;
+ int branch, term, tri;
+ struct tnode *mother, *daughters, *next;
+ char tag[10]; /* text of tag held in charstore */
+};
+
+typedef struct tnode treenode;
+
+/* error stuff */
+int sinned = FALSE; /* error has occurred in run */
+int error = FALSE; /* error has occurred in current example */
+
+FILE *error_file;
+char error_name[50];
+
+
+void goof(s)
+char *s;
+{
+ if (!sinned) {
+ error_file = fopen(error_name,"w");
+ sinned = TRUE;
+ }
+ fprintf(stderr,"%s at line %d\n",s,linecount());
+ fprintf(error_file,"%s at line %d\n",s,linecount);
+ error = TRUE;
+}
+
+
+
+char delmark = '|'; /* delimiter */
+int tagcount; /* keeps track of tags */
+
+/* strequ */
+int strequ(s1,s2)
+char *s1, *s2;
+{
+ if (strcmp(s1,s2) == 0)
+ return(TRUE);
+ else
+ return(FALSE);
+}
+
+/* local node label & annotation-ending function */
+static int endlabel(c)
+char c;
+{
+ if (eoln() || c == delmark) {
+ return(TRUE);
+ }
+ else
+ return(FALSE);
+}
+
+/* local command-word ending function */
+static int endcom(c)
+char c;
+{
+ if (c == ' ' || c == delmark) {
+ return(TRUE);
+ }
+ else
+ return(FALSE);
+}
+
+/* adapted from K&R itoa */
+void convert(n,s)
+int n;
+char s[];
+{
+ int i;
+
+ i = 0;
+ do {
+ s[i++] = n % 26 + 'a';
+ } while ((n /= 26) > 0);
+ s[i] = '\0';
+}
+
+char grabchar()
+{
+char c;
+ c = nextchar();
+ if (c == '%') {
+ fetchline();
+ return(grabchar());
+ } else
+ return (c);
+}
+
+/* allocates nodespace, reads in info, etc. */
+treenode *build_node()
+{
+ int go;
+
+ treenode *node;
+ word holder;
+ char **pointer;
+
+ pointer = &(holder.loc);
+ node = (treenode *)malloc(sizeof(treenode));
+ readword(&node->name,&go,endlabel,grabchar,FALSE);
+ node->next = NULL;
+ node->daughters = NULL;
+ node->mother = NULL;
+ node->tri = FALSE;
+ node->term = TRUE;
+ node->tag[0]='\0';
+ while (go) {
+ readword(&holder,&go,endcom,nextchar,FALSE);
+ if (strequ(*pointer,"tri"))
+ node->tri=TRUE;
+ else
+ if (strequ(*pointer,"tag")) {
+ readword(&holder,&go,endcom,nextchar,FALSE);
+ strcpy(node->tag,*pointer);
+ }
+ }
+
+ if (node->tag[0] == '\0') {
+ node->tag[0] = 'Z';
+ convert(tagcount++,&(node->tag[1]));
+ }
+ return(node);
+}
+
+/* gets a node, assuming that the line the node is on is already read
+ in */
+treenode *get_node()
+{
+ int pos,dpos;
+
+ treenode *node;
+
+ advanceeoln_pos(&pos);
+ if (eoln()) {
+ goof("blank line in tree");
+ fetchline();
+ return(NULL);
+ }
+ node = build_node();
+ fetchline();
+ advanceeoln_pos(&dpos);
+ if (dpos > pos) {
+ get_daughters(node,dpos);
+ }
+ return(node);
+}
+
+get_daughters(node,dpos)
+treenode *node; /* node of which daughters are being read */
+int dpos; /* position where daughters are supposed to be */
+{
+ int pos;
+ treenode *current;
+
+ current = get_node();
+ current->mother = node;
+ node->daughters = current;
+ node->term = FALSE;
+
+ while (currentpos() == dpos && !error) { /* as long as we're getting daughters */
+ current->next = get_node();
+ current = current->next;
+ current->mother = node;
+ }
+}
+
+void show_tree(node, ind)
+treenode *node;
+int ind;
+{
+ int i;
+
+ if (node != NULL) {
+ for (i = 1; i<=ind; i++)
+ putc(' ', outstream);
+ fprintf(outstream,"%s\n",node->name.loc);
+if (node->tri) printf("TRI\n");
+printf("tag = %s\n",node->tag);
+ for (node = node->daughters; node !=NULL; node=node->next)
+ show_tree(node,ind+2);
+ }
+}
+
+
+
+void write_tree(node, ind)
+treenode *node;
+int ind;
+{
+ int i;
+ treenode *mother;
+
+ if (node != NULL) {
+ mother = node;
+ for (i = 1; i<=ind; i++) /* print indentation */
+ putc(' ', outstream);
+ if (node->term) {
+ fprintf(outstream,"{\\tnode{%s}{%s}}",node->tag,node->name.loc);
+ }
+ else {
+ fprintf(outstream,"{\\ntnode{%s}{%s},\n",node->tag,node->name.loc);
+ for (node = node->daughters; node !=NULL; node=node->next)
+ write_tree(node,ind+2);
+/*
+ for (i = 1; i<=ind; i++)
+ putc(' ', outstream);
+*/
+ putc('}',outstream);
+ };
+
+ if (mother->next != NULL) fprintf(outstream,",\n");
+/*
+ else fprintf(outstream,"%\n");
+ if (node->next != NULL && node->mother != NULL)
+ putc(',',outstream);
+ putc('\n',outstream);
+*/
+ }
+}
+
+void draw_lines(node)
+treenode *node;
+{
+ int i;
+ char *m; /* mother & daughter tags */
+ treenode *mother; /* mother */
+
+ if (node != NULL) {
+ mother = node;
+ m = mother->tag;
+ for (node = mother->daughters; node !=NULL; node=node->next) {
+ if (node->tri)
+ fprintf(outstream,"\\nodetriangle{%s}{%s}%%\n",m,node->tag);
+ else
+ fprintf(outstream,"\\nodeconnect{%s}{%s}%%\n",m,node->tag);
+ }
+ for (node = mother->daughters; node !=NULL; node=node->next)
+ draw_lines(node);
+ }
+}
+
+
+void free_tree(node)
+treenode *node;
+{
+
+ if (node !=NULL) {
+ for (node = node->daughters; node !=NULL; node=node->next)
+ free_tree(node);
+ free(node);
+ node=NULL;
+ }
+}
+
+
+void tree()
+{
+ treenode *node;
+
+ delmark = '|';
+ error = FALSE;
+ tagcount = 0;
+
+ init_store();
+ fetchline();
+ node=get_node();
+ if (!matchstr(".]") && !error)
+ goof("bad tree indentation");
+ if (error) {
+ fprintf(outstream,"\nBAD TREE\n");
+ error = FALSE;
+ }
+ else {
+ fprintf(outstream,"\\tree");
+ write_tree(node,0);
+ fprintf(outstream,"%%\n"),
+ draw_lines(node);
+ }
+ free_tree(node);
+}
+
+void extendfilename(name,extension,result)
+/* chris: fix parameter declarations */
+char name[];
+char extension[];
+char result[];
+{
+ strcpy(result,name);
+ strcat(result,extension);
+}
+
+
+
+main(argc, argv)
+int argc;
+char *argv[];
+
+{
+
+ char infile[200];
+ char outfile[200];
+
+ char c;
+
+ /* chris - let it run as filter */
+ if (argc < 2)
+ {
+ strcpy(infile, "stdin");
+ strcpy(error_name, "trees.err");
+ }
+ else
+ {
+ extendfilename(argv[1],".txp",infile);
+ extendfilename(argv[1],"_tx2.tex",outfile);
+ extendfilename(argv[1],".err",error_name);
+ }
+
+/* VAX/VMS reading from logical `source', writing to logical `product'
+ open_source("source");
+ outstream = fopen("product","w");
+*/
+
+ if (open_source(infile)) {
+ /* chris - letting it run as a filter still */
+ if (argc < 2)
+ outstream = stdout;
+ else
+ outstream = fopen(outfile,"w");
+ while (fetchline()) { /* as long as there's input */
+ if (nextchar() == '.') {
+ if ((c = nextchar()) == '[') {
+ tree();
+ }
+#ifdef INC_COLUMNS
+ else
+ if (c == '<') {
+ columns();
+ }
+#endif
+ }
+ else {
+ writeline();
+ }
+ }
+ } else printf("file `%s' not found\n",infile);
+ return(sinned);
+}
diff --git a/macros/latex209/contrib/trees/pstrees/trees.doc.pdf b/macros/latex209/contrib/trees/pstrees/trees.doc.pdf
new file mode 100644
index 0000000000..1244a2c275
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/trees.doc.pdf
Binary files differ
diff --git a/macros/latex209/contrib/trees/pstrees/trees.doc.tex b/macros/latex209/contrib/trees/pstrees/trees.doc.tex
new file mode 100644
index 0000000000..c8983a3fbb
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/trees.doc.tex
@@ -0,0 +1,338 @@
+\documentstyle[11pt,lingmacros,tree-dvips,trees]{article}
+\textheight=9in
+\textwidth=6.5in
+\oddsidemargin=0in
+\evensidemargin=0in
+\topmargin=-.5in
+
+\begin{document}
+\begin{center}
+{\large\bf Avery Andrews'}\\
+\medskip
+{\Large\bf The Trees Preprocessor}
+\end{center}
+\medskip
+
+Consider the tree shown in \ex{1} drawn from Newmeyer (1986) following GKPS:
+
+\begin{example}
+\hspace*{-1.8em}\small
+\tree{\ntnode{Za}{S},
+ {\ntnode{Zb}{NP},
+ {\tnode{Zc}{that book}}},
+ {\ntnode{Zd}{{S/NP}},
+ {\ntnode{Ze}{NP},
+ {\tnode{Zf}{I}}},
+ {\ntnode{Zg}{{VP/NP}},
+ {\ntnode{Zh}{V},
+ {\tnode{Zi}{want}}},
+ {\ntnode{Zj}{{VP/NP}},
+ {\tnode{Zk}{to}},
+ {\ntnode{Zl}{{VP/NP}},
+ {\ntnode{Zm}{V},
+ {\tnode{Zn}{ask}}},
+ {\ntnode{Zo}{NP},
+ {\tnode{Zp}{Mary}}},
+ {\ntnode{Zq}{{VP/NP}},
+ {\tnode{Zr}{to}},
+ {\ntnode{Zs}{{VP/NP}},
+ {\ntnode{Zt}{V},
+ {\tnode{Zu}{tell}}},
+ {\ntnode{Zv}{NP},
+ {\tnode{Zw}{Tom}}},
+ {\ntnode{Zx}{{VP/NP}},
+ {\tnode{Zy}{to}},
+ {\ntnode{Zz}{{VP/NP}},
+ {\ntnode{Zab}{V},
+ {\tnode{Zbb}{read}}},
+ {\ntnode{Zcb}{{NP/NP}},
+ {\tnode{Zdb}{e}}}}}}}}}}}}%
+\nodeconnect{Za}{Zb}%
+\nodeconnect{Za}{Zd}%
+\nodetriangle{Zb}{Zc}%
+\nodeconnect{Zd}{Ze}%
+\nodeconnect{Zd}{Zg}%
+\nodeconnect{Ze}{Zf}%
+\nodeconnect{Zg}{Zh}%
+\nodeconnect{Zg}{Zj}%
+\nodeconnect{Zh}{Zi}%
+\nodeconnect{Zj}{Zk}%
+\nodeconnect{Zj}{Zl}%
+\nodeconnect{Zl}{Zm}%
+\nodeconnect{Zl}{Zo}%
+\nodeconnect{Zl}{Zq}%
+\nodeconnect{Zm}{Zn}%
+\nodeconnect{Zo}{Zp}%
+\nodeconnect{Zq}{Zr}%
+\nodeconnect{Zq}{Zs}%
+\nodeconnect{Zs}{Zt}%
+\nodeconnect{Zs}{Zv}%
+\nodeconnect{Zs}{Zx}%
+\nodeconnect{Zt}{Zu}%
+\nodeconnect{Zv}{Zw}%
+\nodeconnect{Zx}{Zy}%
+\nodeconnect{Zx}{Zz}%
+\nodeconnect{Zz}{Zab}%
+\nodeconnect{Zz}{Zcb}%
+\nodeconnect{Zab}{Zbb}%
+\nodeconnect{Zcb}{Zdb}%
+\end{example}
+This would require some drama to do by hand, but the {\sf trees'} system
+makes it reasonably easy.
+
+The system consists of three components: a preprocessor that
+converts a simple tree format into \TeX\ input; a \TeX\ macro file that
+lays out the nodes for trees, and Emma Pease's tree macro package that
+interfaces to Postscript and draws lines, and assorted other fancier sorts
+of graphics.
+
+\section{The trees preprocessor}
+\subsection{Usage}
+
+If you give a file-name argument {\tt trees test}, the input will
+be read from `test.txp', and written to `test{\_}tx2.tex', the latter
+being what you then submit to {\TeX} (the clumsy and complicated
+name is to make it easy to clean up directories without accidentally
+deleting source files). Errors go to `test.err'. The resulting
+dvi file will be `test{\_}tx2.dvi': the nuisance of specifying clumy
+names can be reduced by putting the parts of papers requiring
+preprocessing into include files.
+
+Alternatively, with no filename argument,
+the input is read from stdin, output written to stdout, errors
+written to stderr.
+
+A sample input file is test.tex
+
+A tree begins with \verb+.[+, ends with \verb+.]+, and are preprocessed for
+joint use with `tree-dvips.sty' (node boxing \& line drawing) and `trees.sty'
+(tree layout).
+
+Nesting is indicated by increasing depth of embedding, sisters
+must be indented equally, i.e.:
+\begin{verbatim}
+ .[
+ S
+ NP
+ John
+ VP
+ V
+ bit
+ NP
+ Fido
+ .]
+ \end{verbatim}
+If a node is to be connected to its mother by a triangle, it
+is followed by the flag \verb+|tri+. If it is to be given a special
+tag (for boxing, or whatever), the flag \verb+|tag fred+ (or whatever)
+is supplied.
+
+
+\section{Trees}
+
+1. Purpose.
+Trees is a preprocessor designed to work together with my `trees.sty'
+(La)Tex macro package \& Emma Pease's `tree-dvips.sty' package
+to help with
+tree-formatting. It probably doesn't do anything that couldn't actually
+be done entirely in TeX, but for the moment I leave to others to spend
+their lives figuring out how.
+
+2. Basic Operation.
+The file needs to invoke trees.sty \& tree-dvips.sty, e.g., in LaTex, it
+might start out:
+\begin{verbatim}
+ \documentstyle[tree-dvips,trees]{article}
+\end{verbatim}
+(or you could have \verb+\input{tree-dvips.sty}\input{trees.sty}+ in the text).
+
+The signal for `trees' to kick into action is a line beginning with
+`.['. The tree is then presented as an indented list, with a first
+daughter appearing (directly) after and more deeply embedded than its
+mother, and subsequent sisters indented equally to the first. The tree
+closes with `.]' (at the beginning of the line).
+
+E.g.:
+
+(1)
+\begin{verbatim}
+ .[
+ S
+ NP
+ Det
+ a
+ Nom
+ A
+ savage
+ Nom
+ N
+ puppy
+ VP
+ V
+ destroyed
+ NP
+ Det
+ the
+ Nom
+ shoe
+ .]
+\end{verbatim}
+What comes out of the preprocessor is input to be handled by
+`trees.sty' (which does tree layout) and `tree-dvips.sty' (which does the
+line-drawing).
+
+So from (1) we get (2):
+
+(2)
+\begin{verbatim}
+\tree{\ntnode{Za}{S},
+ {\ntnode{Zb}{NP},
+ {\ntnode{Zc}{Det},
+ {\tnode{Zd}{a}}
+ },
+ {\ntnode{Ze}{Nom},
+ {\ntnode{Zf}{A},
+ {\tnode{Zg}{savage}}
+ },
+ {\ntnode{Zh}{Nom},
+ {\ntnode{Zi}{N},
+ {\tnode{Zj}{puppy}}
+ }
+ }
+ }
+ },
+ {\ntnode{Zk}{VP},
+ {\ntnode{Zl}{V},
+ {\tnode{Zm}{destroyed}}
+ },
+ {\ntnode{Zn}{NP},
+ {\ntnode{Zo}{Det},
+ {\tnode{Zp}{the}}
+ },
+ {\ntnode{Zq}{Nom},
+ {\tnode{Zr}{shoe}}
+ }
+ }
+ }
+}
+\nodeconnect{Za}{Zb}
+\nodeconnect{Za}{Zk}
+\nodeconnect{Zb}{Zc}
+\nodeconnect{Zb}{Ze}
+\nodeconnect{Zc}{Zd}
+\nodeconnect{Ze}{Zf}
+\nodeconnect{Ze}{Zh}
+\nodeconnect{Zf}{Zg}
+\nodeconnect{Zh}{Zi}
+\nodeconnect{Zi}{Zj}
+\nodeconnect{Zk}{Zl}
+\nodeconnect{Zk}{Zn}
+\nodeconnect{Zl}{Zm}
+\nodeconnect{Zn}{Zo}
+\nodeconnect{Zn}{Zq}
+\nodeconnect{Zo}{Zp}
+\nodeconnect{Zq}{Zr}
+\end{verbatim}
+
+The preprocessor has converted the visually convenient indented list notation
+into appropriate TeX grouping for the \tree macro (defined in trees.sty), and
+has put the node labels into `\ntnode' (nonterminal) and `tnode' (terminal
+commands), which feed the \node command (in `tree-dvips.sty') as discussed
+briefly below. Each node has also been assigned a tag starting with
+`Z', and linedrawing commands (`tree-dvips.sty') issued as appropriate.
+
+
+3. Options.
+Options are separated from the node label by a vertical bar (`$\|$'). There
+are currently two of them. The `tri' option connecs the node to its mother
+with a triangle instead of a line. And the `tag TAG' option, where TAG
+is any alphabetic string, sets TAG as the tag of the node. Both of these
+are illustrated in:
+
+(3)
+\begin{verbatim}
+ .[
+ S
+ NP
+ the puppy|tri
+ VP|tag vp
+ barked
+ .]
+ \nodecircle{vp}
+\end{verbatim}
+Putting your own label on the VP node makes it easy to use tree-dvips.sty
+commands on it freely.
+
+Two additional useful options are handled directly by the
+{\sf trees.sty} definitions. First, one sometimes wants to specify the
+space between the mother and daughters (if the tree is rather wide,
+for example, the default spacing at the top might be too small).
+This can be done by putting a command such as \verb+\daughterskip{4ex}+
+somewhere in the mother node, e.g.:
+
+(4)
+\begin{verbatim}
+ .[
+ S\daughtergap{4ex}
+ NP
+ the annoying child|tri
+ VP
+ ran away from the crazed puppy|tri
+ .]
+\end{verbatim}
+It is also possible to specify the distance between a node and its
+previous sister with a command such as \verb+\sistergap{-2em}+. This can
+be especially useful in packing `wide trees' that wouldn't otherwise
+fit.
+
+The default spacings for sisters \& daughters can also be altered,
+as discussed in trees.sty.
+
+4. \verb+\ntnode & \tnode.+
+The \verb+\ntnode+ and \verb+\tnode+ commands do some moderately
+complicated things
+that are basically adapted to make it easier to write LFG papers. Both
+commands operate on node specifications where a bunch of annotations
+are specified as sitting on top of the main node label. E.g.:
+\begin{verbatim}
+ \ntnode{a}{(\uparrow SUBJ)=\downarrow/NP}
+\end{verbatim}
+Puts the annotation on top of the node-label, and automatically sets
+it in math-mode.. The levels are separated by a slash, and there can be as
+many as you like. The difference between \verb+\ntnode+ and \verb+\tnode+
+is that the
+latter sets the last level in italics, as is the norm for terminals.
+
+(5)
+\begin{verbatim}
+ .[
+ S
+ (\uparrow SUBJ)=\downarrow/NP
+ \uparrow = \downarrow/N
+ Mary
+ \uparrow = \downarrow/VP
+ yelled
+ .]
+\end{verbatim}
+For information on altering the operations of \verb+\ntnode & \tnode+, see
+trees.sty. One could also switch off all of this stuff by redefining
+them to in effect do nothing:
+\begin{verbatim}
+ \def\ntnode#1#2{#2}
+ \def\tnode#1#2{#2}
+\end{verbatim}
+\subsection{Assembly}
+The program has so far run under Sun cc, and Turbo C 2.
+For Sun cc, the module ansi.c is required, to supply some
+library functions that appear to be missing. There are some
+bits of code for the VMS/VAX C version, but the adjustments would
+need to be made by hand. A executable and source files with a
+Unix makefile are provided.
+
+\subsection{Availability}
+Emma Pease's tree-dvips may be found in tree.tar.Z in /pub/TeXfiles
+on csli.stanford.edu.
+The preprocessor plus trees.sty may be found in pstrees.tar.Z
+in /pub/TMP on csli.stanford.edu
+
+\end{document}
diff --git a/macros/latex209/contrib/trees/pstrees/trees.doc.txp b/macros/latex209/contrib/trees/pstrees/trees.doc.txp
new file mode 100644
index 0000000000..3af25ed1a9
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/trees.doc.txp
@@ -0,0 +1,311 @@
+\documentstyle[11pt,lingmacros,tree-dvips,trees]{article}
+\textheight=9in
+\textwidth=6.5in
+\oddsidemargin=0in
+\evensidemargin=0in
+\topmargin=-.5in
+
+\begin{document}
+\begin{center}
+{\large\bf Avery Andrews'}\\
+\medskip
+{\Large\bf The Trees Preprocessor}
+\end{center}
+\medskip
+
+Consider the tree shown in \ex{1} drawn from Newmeyer (1986) following GKPS:
+
+\begin{example}
+\hspace*{-1.8em}\small
+.[
+S
+ NP
+ that book|tri
+ {S/NP}
+ NP
+ I
+ {VP/NP}
+ V
+ want
+ {VP/NP}
+ to
+ {VP/NP}
+ V
+ ask
+ NP
+ Mary
+ {VP/NP}
+ to
+ {VP/NP}
+ V
+ tell
+ NP
+ Tom
+ {VP/NP}
+ to
+ {VP/NP}
+ V
+ read
+ {NP/NP}
+ e
+.]
+\end{example}
+This would require some drama to do by hand, but the {\sf trees'} system
+makes it reasonably easy.
+
+The system consists of three components: a preprocessor that
+converts a simple tree format into \TeX\ input; a \TeX\ macro file that
+lays out the nodes for trees, and Emma Pease's tree macro package that
+interfaces to Postscript and draws lines, and assorted other fancier sorts
+of graphics.
+
+\section{The trees preprocessor}
+\subsection{Usage}
+
+If you give a file-name argument {\tt trees test}, the input will
+be read from `test.txp', and written to `test{\_}tx2.tex', the latter
+being what you then submit to {\TeX} (the clumsy and complicated
+name is to make it easy to clean up directories without accidentally
+deleting source files). Errors go to `test.err'. The resulting
+dvi file will be `test{\_}tx2.dvi': the nuisance of specifying clumy
+names can be reduced by putting the parts of papers requiring
+preprocessing into include files.
+
+Alternatively, with no filename argument,
+the input is read from stdin, output written to stdout, errors
+written to stderr.
+
+A sample input file is test.tex
+
+A tree begins with \verb+.[+, ends with \verb+.]+, and are preprocessed for
+joint use with `tree-dvips.sty' (node boxing \& line drawing) and `trees.sty'
+(tree layout).
+
+Nesting is indicated by increasing depth of embedding, sisters
+must be indented equally, i.e.:
+\begin{verbatim}
+ .[
+ S
+ NP
+ John
+ VP
+ V
+ bit
+ NP
+ Fido
+ .]
+ \end{verbatim}
+If a node is to be connected to its mother by a triangle, it
+is followed by the flag \verb+|tri+. If it is to be given a special
+tag (for boxing, or whatever), the flag \verb+|tag fred+ (or whatever)
+is supplied.
+
+
+\section{Trees}
+
+1. Purpose.
+Trees is a preprocessor designed to work together with my `trees.sty'
+(La)Tex macro package \& Emma Pease's `tree-dvips.sty' package
+to help with
+tree-formatting. It probably doesn't do anything that couldn't actually
+be done entirely in TeX, but for the moment I leave to others to spend
+their lives figuring out how.
+
+2. Basic Operation.
+The file needs to invoke trees.sty \& tree-dvips.sty, e.g., in LaTex, it
+might start out:
+\begin{verbatim}
+ \documentstyle[tree-dvips,trees]{article}
+\end{verbatim}
+(or you could have \verb+\input{tree-dvips.sty}\input{trees.sty}+ in the text).
+
+The signal for `trees' to kick into action is a line beginning with
+`.['. The tree is then presented as an indented list, with a first
+daughter appearing (directly) after and more deeply embedded than its
+mother, and subsequent sisters indented equally to the first. The tree
+closes with `.]' (at the beginning of the line).
+
+E.g.:
+
+(1)
+\begin{verbatim}
+ .[
+ S
+ NP
+ Det
+ a
+ Nom
+ A
+ savage
+ Nom
+ N
+ puppy
+ VP
+ V
+ destroyed
+ NP
+ Det
+ the
+ Nom
+ shoe
+ .]
+\end{verbatim}
+What comes out of the preprocessor is input to be handled by
+`trees.sty' (which does tree layout) and `tree-dvips.sty' (which does the
+line-drawing).
+
+So from (1) we get (2):
+
+(2)
+\begin{verbatim}
+\tree{\ntnode{Za}{S},
+ {\ntnode{Zb}{NP},
+ {\ntnode{Zc}{Det},
+ {\tnode{Zd}{a}}
+ },
+ {\ntnode{Ze}{Nom},
+ {\ntnode{Zf}{A},
+ {\tnode{Zg}{savage}}
+ },
+ {\ntnode{Zh}{Nom},
+ {\ntnode{Zi}{N},
+ {\tnode{Zj}{puppy}}
+ }
+ }
+ }
+ },
+ {\ntnode{Zk}{VP},
+ {\ntnode{Zl}{V},
+ {\tnode{Zm}{destroyed}}
+ },
+ {\ntnode{Zn}{NP},
+ {\ntnode{Zo}{Det},
+ {\tnode{Zp}{the}}
+ },
+ {\ntnode{Zq}{Nom},
+ {\tnode{Zr}{shoe}}
+ }
+ }
+ }
+}
+\nodeconnect{Za}{Zb}
+\nodeconnect{Za}{Zk}
+\nodeconnect{Zb}{Zc}
+\nodeconnect{Zb}{Ze}
+\nodeconnect{Zc}{Zd}
+\nodeconnect{Ze}{Zf}
+\nodeconnect{Ze}{Zh}
+\nodeconnect{Zf}{Zg}
+\nodeconnect{Zh}{Zi}
+\nodeconnect{Zi}{Zj}
+\nodeconnect{Zk}{Zl}
+\nodeconnect{Zk}{Zn}
+\nodeconnect{Zl}{Zm}
+\nodeconnect{Zn}{Zo}
+\nodeconnect{Zn}{Zq}
+\nodeconnect{Zo}{Zp}
+\nodeconnect{Zq}{Zr}
+\end{verbatim}
+
+The preprocessor has converted the visually convenient indented list notation
+into appropriate TeX grouping for the \tree macro (defined in trees.sty), and
+has put the node labels into `\ntnode' (nonterminal) and `tnode' (terminal
+commands), which feed the \node command (in `tree-dvips.sty') as discussed
+briefly below. Each node has also been assigned a tag starting with
+`Z', and linedrawing commands (`tree-dvips.sty') issued as appropriate.
+
+
+3. Options.
+Options are separated from the node label by a vertical bar (`$\|$'). There
+are currently two of them. The `tri' option connecs the node to its mother
+with a triangle instead of a line. And the `tag TAG' option, where TAG
+is any alphabetic string, sets TAG as the tag of the node. Both of these
+are illustrated in:
+
+(3)
+\begin{verbatim}
+ .[
+ S
+ NP
+ the puppy|tri
+ VP|tag vp
+ barked
+ .]
+ \nodecircle{vp}
+\end{verbatim}
+Putting your own label on the VP node makes it easy to use tree-dvips.sty
+commands on it freely.
+
+Two additional useful options are handled directly by the
+{\sf trees.sty} definitions. First, one sometimes wants to specify the
+space between the mother and daughters (if the tree is rather wide,
+for example, the default spacing at the top might be too small).
+This can be done by putting a command such as \verb+\daughterskip{4ex}+
+somewhere in the mother node, e.g.:
+
+(4)
+\begin{verbatim}
+ .[
+ S\daughtergap{4ex}
+ NP
+ the annoying child|tri
+ VP
+ ran away from the crazed puppy|tri
+ .]
+\end{verbatim}
+It is also possible to specify the distance between a node and its
+previous sister with a command such as \verb+\sistergap{-2em}+. This can
+be especially useful in packing `wide trees' that wouldn't otherwise
+fit.
+
+The default spacings for sisters \& daughters can also be altered,
+as discussed in trees.sty.
+
+4. \verb+\ntnode & \tnode.+
+The \verb+\ntnode+ and \verb+\tnode+ commands do some moderately
+complicated things
+that are basically adapted to make it easier to write LFG papers. Both
+commands operate on node specifications where a bunch of annotations
+are specified as sitting on top of the main node label. E.g.:
+\begin{verbatim}
+ \ntnode{a}{(\uparrow SUBJ)=\downarrow/NP}
+\end{verbatim}
+Puts the annotation on top of the node-label, and automatically sets
+it in math-mode.. The levels are separated by a slash, and there can be as
+many as you like. The difference between \verb+\ntnode+ and \verb+\tnode+
+is that the
+latter sets the last level in italics, as is the norm for terminals.
+
+(5)
+\begin{verbatim}
+ .[
+ S
+ (\uparrow SUBJ)=\downarrow/NP
+ \uparrow = \downarrow/N
+ Mary
+ \uparrow = \downarrow/VP
+ yelled
+ .]
+\end{verbatim}
+For information on altering the operations of \verb+\ntnode & \tnode+, see
+trees.sty. One could also switch off all of this stuff by redefining
+them to in effect do nothing:
+\begin{verbatim}
+ \def\ntnode#1#2{#2}
+ \def\tnode#1#2{#2}
+\end{verbatim}
+\subsection{Assembly}
+The program has so far run under Sun cc, and Turbo C 2.
+For Sun cc, the module ansi.c is required, to supply some
+library functions that appear to be missing. There are some
+bits of code for the VMS/VAX C version, but the adjustments would
+need to be made by hand. A executable and source files with a
+Unix makefile are provided.
+
+\subsection{Availability}
+Emma Pease's tree-dvips may be found in tree.tar.Z in /pub/TeXfiles
+on csli.stanford.edu.
+The preprocessor plus trees.sty may be found in pstrees.tar.Z
+in /pub/TMP on csli.stanford.edu
+
+\end{document}
diff --git a/macros/latex209/contrib/trees/pstrees/trees.sty b/macros/latex209/contrib/trees/pstrees/trees.sty
new file mode 100644
index 0000000000..0addd0aaea
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/trees.sty
@@ -0,0 +1,258 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Version: 26 Mar 91
+%%
+%% Primitive Linguistics Tree Formatter
+%%
+%% Copyright (c) 1991 Avery DeLano Andrews 3rd
+%% You can use these macros to typeset your own documents, or you
+%% can use them as basis for your own macros. In the latter case,
+%% you must (1) give proper credit, and (2) document the usage of
+%% your macros/changes (if the usage of your macros is not worth
+%% documenting, they must not be worth using).
+%%
+%% Parameter-list handling technique & above post-copyright notice
+%% blurb cribbed from gloss.sty by Marcel R. van der Goot (1990).
+%%
+%%
+%% Usage: \tree{...} prints out a formatted tree.
+%% \treenode{...} puts formatted tree into \treebox reg.
+%% either leaves \treewidth reg = width of tree
+%% \treecenter reg. = `center' of tree
+%%
+%% {...} above is a `tree list', of the form:
+%% {{<terminal>}}
+%% {<mother>, <d1>, <dn>}, where each di is a treelist.
+%%
+%% e.g. {S, {NP, {Det, {{the}}, {N, {{dog}}}}, {VP, {{barked}}}}
+%%
+%% The double braces around terminals are annoying, but I haven't
+%% been clever enough to avoid them. <terminal> & <mother>
+%% can be any well-balanced material, (feature-structures,
+%% stacks of nodes & annotations ...
+%%
+%% Parameters:
+%% \sisterskip (dimen) default spacing between sisters
+%% \daughterskip (dimen) default vert. mother-daughter spacing
+%%
+%% Fiddles:
+%% \daughtergap{<dimen>} in a mother node sets mother-daughter
+%% spacing to <dimen> for daughters of that node.
+%% \sistergap{<dimen>} in a node spaces it <dimen> horizontally
+%% from its *preceeding* sister
+%%
+%% LFG Specials:
+%% To make life easier for LFG people, there are two commands for
+%% doing annotated nodes, \tnode for terminals, \ntnode for nonterminals.
+%% Both are defined in terms of \node from Emma Pease's tree.sty, so they
+%% take two braced arguments, the node tag and the node specification.
+%%
+%% The node tag is as in tree.sty, but the node specification is a
+%% series of levels separated by `/' (if you want to combine levels
+%% with GPSG slash notation, groupany level containing a slash in
+%% braces). With \ntnode, the upper levels are set in math mode
+%% and the bottommost in restricted horizontal; with \tnode, the
+%% upper levels are set in math mode and the bottommost in restricted
+%% horizontal with italic font.
+%%
+%% If you want to switch off automatic math mode for annotations, you
+%% can do it by redefining the \nodeannotation command as follows:
+%%
+%% \def\nodeannotation#1{#1}
+%%
+%% If you want to terminals to be, say slanted rather than italics, you can
+%% do it by redefining \tstyle as follows:
+%%
+%% \def\tstyle{\sl}
+%%
+%% If you want to use the stacking, etc., facilities, but not the
+%% line-drawing (which depends on tree.sty), you can redefine \node
+%% to effectively do nothing:
+%%
+%% \def\node#1#2{#2}
+%%
+%%
+%% General Remarks:
+%%
+%% Coded for reader's comfort, not computer's speed, according
+%% to my rather inexperienced lights.
+%%
+%% Processes nodes on a left-corner schedule, first packing
+%% daughters into an hbox, then mother into another hbox,
+%% then both into a vtop (vbox with alignment along the top).
+%%
+%% Improvements & Suggestions welcome. Please notify to:
+%%
+%% Avery D Andrews
+%% Linguistics, The Faculties
+%% ANU PO Box 4
+%% Canberra ACT 2601
+%%
+%% email: ada612@fac.anu.edu.au
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+{
+\catcode`\_=11 % sets underbar to letter
+\catcode` =9 % causes spaces to be ignored
+\catcode`\^^M=9 % causes <CR> to be ignored
+
+\newbox\treebox % box register for returned tree
+\newbox\mother_box % " for mother
+\newbox\daughter_box % " for local accumulation of daughters
+\newbox\daughterr_box % " for upward comm. of dtrs
+\newbox\stack_box % for calculating widths for centering annotations
+
+\newskip\sisterskip % default space between sisters
+\newskip\sister_skip % space before current sister
+\newdimen\daughterskip % default mother-daughter space (vert)
+\newdimen\daughter_skip % current "
+\newdimen\stack_width % for calculating widths for centering annotations
+\newskip\annoteskip % default space between annotations
+
+\global\sisterskip=2em
+\global\daughterskip=2ex
+\global\annoteskip=0ex
+
+\newdimen\treewidth
+\newdimen\treecenter
+\newdimen\mother_offset
+\newdimen\first_center
+\newdimen\last_center
+\newdimen\daughter_center
+
+
+\gdef\daughtergap#1{\global\daughter_skip=#1} % chris: should remove global?
+\gdef\sistergap#1{\global\sister_skip=#1}
+
+% was: \gdef\tree#1{\tree_node#1,.\leavevmode\box\treebox}
+\gdef\tree#1{\tree_node#1,.\ifvmode\leavevmode\fi\hbox{\box\treebox}}
+ % formats tree & prints it out.
+ % sets treewidth & treecenter
+
+\gdef\treenode#1{\tree_node#1,.} % formats tree & puts it in treebox
+ % sets treewidth & treecenter
+
+
+\gdef\tree_node#1,#2.{
+ \def\daughters{#2}
+ \ifx\daughters\empty % if terminal
+ \global\setbox\treebox=\hbox{#1}
+ \global\treewidth=\wd\treebox
+ \global\treecenter=.5\treewidth
+ \else
+ \get_daughters#2.
+ \daughtergap{\daughterskip}
+ \setbox\mother_box=\hbox{#1}
+ \mother_offset=\daughter_center
+ \advance\mother_offset by -.5\wd\mother_box % width to center of mother
+ \ifdim\mother_offset>0pt
+ \global\setbox\treebox=\vtop{
+ \hbox{\hskip\mother_offset\unhbox\mother_box}
+ \vskip\daughter_skip
+ \box\daughterr_box}
+ \else
+ \global\setbox\treebox=\vtop{
+ \box\mother_box
+ \vskip\daughter_skip
+ \hbox{\hskip-\mother_offset\unhbox\daughterr_box}}
+ \fi
+ \global\treewidth=\wd\treebox
+ \global\treecenter=\daughter_center
+ \ifdim\mother_offset<0pt
+ \global\advance\treecenter by -\mother_offset
+ \fi
+ \fi
+}
+
+
+\gdef\d@mmy.{} % We call this when we are at the end. A no-op, but you
+ % get better performance if you use no-ops!
+
+\gdef\get_daughters#1,#2.{
+ \treenode#1 % process first daughter
+ \first_center=\treecenter
+ \last_center=\treewidth
+ \setbox\daughter_box=\hbox{\box\treebox}
+ \def\more{#2}
+ \ifx\more\empty
+ \global\daughter_center=\first_center
+ \global\setbox\daughterr_box=\box\daughter_box
+ \let\more=\d@mmy
+ \else
+ \let\more=\more_daughters
+ \fi
+ \more#2.
+}
+
+\gdef\more_daughters#1,#2.{
+ \sistergap{\sisterskip}
+ {\treenode#1}
+ \setbox\daughter_box=\hbox{
+ \unhbox\daughter_box\hskip\sister_skip\box\treebox}
+ \def\more{#2}
+ \ifx\more\empty
+ \advance\last_center by \treecenter
+ \advance\last_center by \sister_skip
+ \advance\last_center by \first_center
+ \divide\last_center by 2
+ \global\daughter_center=\last_center
+ \global\setbox\daughterr_box=\box\daughter_box
+ \let\more=\d@mmy
+ \else
+ \advance\last_center by \treewidth
+ \advance\last_center by \sister_skip
+ \let\more=\more_daughters
+ \fi
+ \more#2.
+}
+
+
+\gdef\ntnode#1#2{
+ \def\t_style{\ntstyle}
+ \node{#1}{\node_ann{#2}}
+}
+
+\global\let\tstyle=\it
+\global\let\ntstyle=\rm
+
+\gdef\tnode#1#2{
+ \def\t_style{\tstyle}
+ \node{#1}{\node_ann{#2}}
+}
+
+\gdef\node_ann#1{
+ \global\stack_width=0pt
+ \get_widths#1/.
+ \vtop{\stack_ann#1/.}
+}
+
+\gdef\stack_ann#1/#2.{
+ \def\more{#2}
+ \ifx\more\empty
+ \hbox to \stack_width{\strut\hss\t_style #1\hss}
+ \let\more=\d@mmy
+ \else
+ \hbox to \stack_width{\hss \nodeannotation{#1}\hss}\vskip\annoteskip
+ \let\more=\stack_ann
+ \fi
+ \more#2.
+ }
+
+% Default used to be this (for f-descriptions?) \gdef\nodeannotation#1{$#1$}
+\gdef\nodeannotation#1{#1}
+
+\gdef\get_widths#1/#2.{
+ \def\more{#2}
+ \ifx\more\empty
+ \setbox\stack_box=\hbox{\t_style #1}
+ \let\more=\d@mmy
+ \else
+ \setbox\stack_box=\hbox{\nodeannotation{#1}}
+ \let\more=\get_widths
+ \fi
+ \ifdim\stack_width<\wd\stack_box
+ \global\stack_width=\wd\stack_box
+ \fi
+ \more#2.
+}
+
+} % end group & restore standard catcodes
diff --git a/macros/latex209/contrib/trees/pstrees/words.c b/macros/latex209/contrib/trees/pstrees/words.c
new file mode 100644
index 0000000000..7bf3a28c35
--- /dev/null
+++ b/macros/latex209/contrib/trees/pstrees/words.c
@@ -0,0 +1,292 @@
+/* in this module appeaars machinery connected with the recognition
+ storage of words */
+
+#include "align.h" /* align definitions */
+/* VAX/VMS version
+#include <unixio>
+*/
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+
+
+/* externals from errors.c */
+extern goof(); /* error-writing routine
+ void goof(char *s); */
+extern int sinned, error; /* error-flags */
+
+/* externals from slurp.c */
+extern char *input_pointer;
+extern nextchar(); /* gets next character
+ char nextchar(); */
+extern peekchar(); /* peeks at next char
+ char peekchar() */
+extern advance(); /* advances to next printing char
+ void advance(); */
+
+/* externals from glosses */
+extern char delmark; /* example delimiter */
+extern int wordmax; /* maximum length of word */
+
+/* word storage */
+
+static char store[charmax]; /* array for storing string */
+static char *free_char; /* pointer to first available position */
+static char *top_char; /* pointer to top of store */
+
+/* initializes store */
+init_store()
+{
+ free_char = store;
+ top_char = store+charmax;
+}
+
+/* stows characters */
+int stow(c)
+char c;
+{
+ if (free_char<top_char) {
+ *(free_char++) = c;
+ return(TRUE);
+ }
+ else {
+ goof("too many characters in example");
+ }
+}
+
+
+static int envpointer; /* keeps track of group nesting */
+
+void readword(here, stop, quit, grab, lookahead)
+word *here; /* location of word record to be filled in */
+int *stop; /* where to record whether stop-delimiter encountered */
+int (*quit)(); /* function specifying whether to stop */
+char (*grab)(); /* character-reading procedure to be used */
+int lookahead; /* whether to advance to next printing char */
+{
+
+ char c; /* character holder */
+
+ *stop = FALSE;
+ envpointer = 0;
+
+ here->loc=free_char;
+ c=grab();
+ while (envpointer > 0 || !quit(c)) { /* there is nothing
+ in the stack, or neither of the word-enders encountered */
+ stow(c);
+ if (error) return;
+ else
+ if (c == '\\') {
+ if (peekchar() == ' ') {
+ grab(c);
+ stow(c);
+ }
+ }
+ else
+ if (c == '{')
+ envpointer++;
+ if (envpointer > 0 && c == '}')
+ envpointer--;
+ c=grab();
+ if (c == delmark && envpointer > 0) {
+ goof("line-break within TeX command");
+ envpointer = 0;
+ }
+ }
+
+ stow('\0'); /* mark end of word i store */
+ if (c == delmark) *stop = TRUE;
+ if (!*stop) {
+ if (lookahead) {
+ advance();
+ if (peekchar()==delmark) {
+ *stop = TRUE;
+ nextchar();
+ }
+ }
+ }
+}
+
+/* scantil_c
+ looks for the first instance in arg2 of some char in arg1; returns 1
+ if found; otherwise 0; arg3 points to char if found, arg2
+ otherwise */
+
+int scantil_c(forchars,instring,wherefound)
+char *forchars;
+char *instring;
+char **wherefound;
+{
+ char *whichchar;
+ char *locus;
+
+ locus = instring;
+
+
+ while (*locus != NULL) {
+ whichchar = forchars;
+ while (*whichchar !=NULL) {
+ if (*whichchar == *locus) {
+ *wherefound = locus;
+ return(TRUE);
+ }
+ else whichchar++;
+ }
+ locus++;
+ }
+ *wherefound = instring;
+ return(FALSE);
+}
+
+void stow_stuff(from,to)
+char *from;
+char *to;
+{
+ while (from != to) {
+ stow(*from);
+ from++;
+ }
+ input_pointer = to;
+}
+
+void pull_args(locus)
+char **locus;
+{
+ char *nextloc;
+
+ while (**locus == '{') {
+ scantil_c("}{",(*locus)+1,&nextloc);
+ if (*nextloc == '}') {
+ nextloc++;
+ if (*nextloc == '{') {
+ *locus = nextloc;
+ }
+ else break;
+ }
+ else break;
+ }
+}
+
+
+
+/* command is parsed as anything between \ and a member of the
+ 1st arg. of scantil_c. pull_args gets all args but last,
+ not allowing embedded commands in these (for labels, etc). */
+
+void get_command()
+{
+ char *locus;
+
+ scantil_c("{ \\|$_^",input_pointer,&locus);
+ pull_args(&locus);
+ stow_stuff(input_pointer,locus);
+
+}
+
+
+
+/* readword hacked for the peculiar demands of the `columns'
+module, essentially being that length calculations are done so
+that alignments can be worked out on the screen */
+
+void readword_col(here, bar, quit)
+word *here; /* location of word record to be filled in */
+int *bar; /* where to record whether bar-delimiter encountered */
+int (*quit)(); /* function specifying whether to stop */
+{
+
+ char c,d; /* character holder */
+ int size;
+
+ *bar = FALSE;
+ envpointer = 0;
+
+ here->loc=free_char;
+ size=0;
+ c=nextchar();
+ while (envpointer > 0 || !quit(c)) { /* there is nothing
+ in the stack, or neither of the word-enders encountered */
+ stow(c);
+ if (error) return;
+ else
+ if (c == '\\') {
+ get_command();
+ if ((d = peekchar()) != '{')
+ size++;
+ }
+ else
+ if (c == '{')
+ envpointer++;
+ else
+ if (envpointer > 0 && c == '}')
+ envpointer--;
+ else
+ if (c == '$') {}
+ else
+ size++;
+ c=nextchar();
+ if (c == delmark && envpointer > 0) {
+ goof("line-break within TeX command");
+ envpointer = 0;
+ }
+ }
+ stow('\0'); /* mark end of word i store */
+ here->size = size;
+ if (c == '|') *bar = TRUE;
+
+}
+
+/* writes words to a stream */
+void writeword(out,it)
+FILE *out;
+word *it;
+{
+ fprintf(out,"{%s}",it->loc);
+}
+
+/*
+char delmark = '\\';
+int wordmax = 60;
+
+main()
+{
+word sample;
+int stop;
+
+get_com_widths("widths.dat");
+open_source("text.dat");
+init_store();
+
+
+advance();
+readword(&sample,&stop,' ',nextchar,0);
+printf("%s, size = %d, bracket= %d\n",sample.loc,sample.size,sample.bracket);
+if (stop) printf("stop!\n");
+
+}
+
+*/
+
+/*
+
+char delmark;
+
+main(argc,argv)
+int argc;
+char **argv;
+{
+ char **s;
+ int whether;
+
+ whether = scantil_c(argv[1],argv[2],s);
+
+ if (whether) {
+ puts("yes: ");
+ }
+ else puts("no: ");
+ puts(*s);
+}
+*/
+
diff --git a/macros/latex209/contrib/trees/tree-dvips/Makefile b/macros/latex209/contrib/trees/tree-dvips/Makefile
new file mode 100644
index 0000000000..348d436136
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/Makefile
@@ -0,0 +1,12 @@
+
+ALLFILES = README Makefile lingmacros.sty tree-dvips.sty avm.sty tree-dvips91.pro \
+ tree-dvips91.script tree-manual.tex lingmacros-manual.tex avm-doc.tex \
+ avm-doc.sty
+
+all: tree-dvips.pro
+
+tar:
+ tar cf tree-dvips.tar ${ALLFILES}
+
+tree-dvips.pro: tree-dvips.script
+ squeeze < tree-dvips.script > tree-dvips.pro
diff --git a/macros/latex209/contrib/trees/tree-dvips/README b/macros/latex209/contrib/trees/tree-dvips/README
new file mode 100644
index 0000000000..19ce0b8266
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/README
@@ -0,0 +1,48 @@
+tree-dvips: There are three items in this package. All files released
+under the LaTeX Project Public License, version 1, or (at your option),
+any later version.
+
+1. CSLI postscript drawing macros. Created by Emma Pease
+(erpease at gmail dot com).
+
+latest update: May 16, 1995
+version .91
+
+These macros were originally created to draw the lines between nodes
+in the trees created by the tree macros in lingmacros.sty. They will
+only work with dvips version 541 or later (by Tomas Rokicki available
+on labrea.stanford.edu) but can be easily modified to be used with
+earlier versions of dvips and slightly less easily modified for other
+dvi to postscript convertors.
+
+Problems:
+
+Be wary of using page extraction programs such as dviselect as you may
+accidently drop the special command loading the header file if you do
+not include the first page. dvips's own page selection commands will
+keep the special.
+
+If rotating, the nodeconnects should be included within the boundaries
+of the \rotate command
+
+
+2. CSLI linguistics macros (lingmacros.sty). Created by various folk at
+CSLI but maintained by Emma Pease.
+
+3. The avm.sty file is a separate package created by Chris Manning
+(manning@lcl.cmu.edu) while he was at csli. It is included by
+permission from him.
+
+
+To install, place
+
+tree-dvips.pro
+
+in the postscript header path for dvips.
+
+place the three .sty files where you put latex style files
+
+Two things not included in this file but may be needed are
+the squeeze program and rotate.sty. Both are available with dvips.
+
+
diff --git a/macros/latex209/contrib/trees/tree-dvips/avm-doc.sty b/macros/latex209/contrib/trees/tree-dvips/avm-doc.sty
new file mode 100644
index 0000000000..a03fc69bf9
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/avm-doc.sty
@@ -0,0 +1,122 @@
+\textheight=9in
+\textwidth=6.5in
+\oddsidemargin=0in
+\evensidemargin=0in
+\topmargin=-.5in
+
+\def\av{{\sf avm.sty}}
+\def\AVM{\small AVM}
+\avmfont{\sc}
+\avmsortfont{\scriptsize\it}
+\def\ssf{\small\sf}
+
+% This was used in trees to make the tree skips bigger and the avm skips
+% smaller.
+\def\avmtreeparms{\avmvskip{.1ex}\avmhskip{.5em}%
+\avmbskip{-.2em}\daughterskip=4ex\sisterskip=3em}
+
+%chris+
+% The \ex definition
+% modified Feb 13 1991 to provide \exn for bare example number,
+% \ex for normal xref format, in parentheses.
+% further modified to have (following) optional argument for sublabel
+% beware if you follow it by a square bracket for other reasons!
+%\newcounter{tempcnt}
+
+% this one doesn't gobble spaces while looking for a [ and so will leave a
+% space after an optional argument.
+\def\@ifverynextchar#1#2#3{\let\@tempe #1\def\@tempa{#2}\def
+ \@tempb{#3}\futurelet\@tempc\@ifvnch}
+\def\@ifvnch{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi
+ \@tempd}
+
+\newcommand{\exn}[1]{\setcounter{tempcnt}{\value{enums}}%
+\addtocounter{tempcnt}{#1}%
+\arabic{tempcnt}}
+
+\def\@ex#1[#2]{(\exn{#1}#2)}
+
+\def\ex#1{\@ifverynextchar[{\@ex#1}% %]
+{\@ex#1[]}}
+
+\def\exx#1#2{(\exn{#1}--\exn{#2})}
+
+\def\exxref#1#2{(\ref{#1}--\ref{#2})}
+
+% \exref for label-references: (ADA 13 Feb 1991)
+\def\exref#1{\@ifverynextchar[{\@exref#1}% %]
+{\@exref#1[]}}
+
+\def\@exref#1[#2]{(\ref{#1}#2)}
+%chris-
+
+
+
+% taken from Chris's personal macros
+%chris+
+% Examples environment. This is a slightly non-standard environment that
+% has two optional parameters:
+% o the first is a number or other label to give the example. This
+% optional argument must be surrounded in ( ); if none is supplied the
+% enums counter is used; either will be surrounded by ( ) in the text.
+% o the second is a string representing the longest piece of text you
+% allege you will want to llap with \bad below and the indentation of
+% examples is increased by the width of it to allow for this.
+% (Note that LaTeX doesn't officially support optional arguments to
+% environments, and having two kinds of optional arguments is a bit of an
+% innovation, but they're not difficult to implement in practice.)
+% Examples:
+% A complete example:
+% \begin{examples}(18)[\#\#] \item \bad{\#\#}A bone ate a dog.
+% \item A dog ate a bone. \end{examples}
+% Other prologues:
+% \begin{examples} (92) \begin{examples}[??] \begin{examples}
+\newbox\ll@pbox % for calculating width of llap'ed material
+\newdimen\llapdimen
+\llapdimen=0pt
+\newdimen\exlabel
+\exlabel=20pt
+
+\def\bad#1{\leavevmode\llap{#1}} % put badness ratings in here!
+
+% these clauses provide a definition of the `examples' pseudo-environment
+\def\examples{\@ifnextchar({\ex@@mples}% %)
+{\refstepcounter{enums}\ex@@mples(\theenums)}}
+
+\long\def\ex@@mples(#1){\@ifnextchar[{\ex@mples(#1)}% %]
+{\ex@mples(#1)[]}}
+
+\long\def\ex@mples(#1)[#2]{\def\eelabel{#1}
+\setbox\@tempboxa=\hbox{(#1)}%There used to be a space here which was crazy
+\@tempdima=\wd\@tempboxa
+\ifdim\exlabel>\@tempdima \@tempdima=\exlabel\fi
+%\advance\@tempdima by -20pt
+\setbox\ll@pbox=\hbox{#2}
+\@tempdimb=\wd\ll@pbox
+\ifdim\llapdimen>\@tempdimb \@tempdimb=\llapdimen\fi
+\begin{list}{\alph{enumsi}.}{\usecounter{enumsi}%
+% abandon auto width determination until I can get it right...
+%\labelwidth=\@tempdima\leftmargin=\@tempdima
+\advance\leftmargin by \eeindent\advance\labelwidth by \eeindent
+\advance\leftmargin by \@tempdimb\advance\labelsep by \@tempdimb
+\advance\leftmargin by\widelabel \advance\labelwidth by \widelabel
+%\itemsep=0pt % Optional, but sometimes examples look better scrunched a bit
+\let\makelabel=\enummakelabel}}
+
+\def\endexamples{\end{list}}
+
+% example environment
+\def\example{\@ifnextchar({\ex@@mple}% %)
+{\refstepcounter{enums}\ex@@mple(\theenums)}}
+
+\long\def\ex@@mple(#1){\@ifnextchar[{\ex@mple(#1)}% %]
+{\ex@mple(#1)[]}}
+
+\long\def\ex@mple(#1)[#2]{\setbox\ll@pbox=\hbox{#2}%
+\begin{list}{}{\advance\leftmargin by \wd\ll@pbox%
+\advance\leftmargin by\widelabel \advance\labelwidth by\widelabel
+\advance\labelsep by \wd\ll@pbox}
+\item[(#1)]}
+
+\def\endexample{\end{list}}
+%chris-
diff --git a/macros/latex209/contrib/trees/tree-dvips/avm-doc.tex b/macros/latex209/contrib/trees/tree-dvips/avm-doc.tex
new file mode 100644
index 0000000000..a6a3f2bf6f
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/avm-doc.tex
@@ -0,0 +1,1245 @@
+% This is the authoritative version (the one at PARC)
+%\documentstyle[11pt,avm,lingmacros,samesizesectionfont,tree]{article}
+\documentstyle[11pt,avm,lingmacros,avm-doc,tree-dvips]{article}
+
+% To do:
+% Get it so you can embed avm environments DONE
+% Put example of subscripted index in DONE
+% Document new features. DONE
+% Work out the semantics of fonts and document it DONE
+% Fix verbatim in footnote DONE
+% Fix fonts and descriptions - blows when nested DONE
+% Change use of boxes to be all even as indicated in plain.tex! DONE
+% Get labels on all corners. DONE (except for Jackendoff position).
+% Fix it so that one can nest with tabular/more avms. DONE
+% Find out why there is the extra space in tavm.tex @ qW
+% (this happens only if you define nodes)
+
+\title{{\sf avm.sty}}
+\author{Christopher Manning\\{\ssf manning@csli.stanford.edu}}
+\date{Version 1.00 -- December 12, 1993}
+
+\begin{document}
+\maketitle
+
+\av\ is a \TeX\ macro package that makes it easy to draw attribute-value
+matrices ({\AVM}s, also known as feature structures and signs), things like
+\ex{1}:
+%
+\begin{example}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]}
+ \setbox2=\hbox{Does this screw it?} % Testing whether this screws things
+ \]}
+\end{avm}
+\end{example}
+%
+It is a special
+mode, like math mode, in which various things are redefined in order to
+make it easy to typeset a certain type of thing. In fact, \av\
+supports several sub-modes of {\AVM} entry that are tailored to different
+needs. This document first describes the basic mode of \av\ and then shows
+how the specialized modes deviate from it. Everything that can be done in
+one of the specialized sub-modes can also be done in the main mode; it's
+just that you might be able to do it with less keystrokes. \av\ has
+been designed so that it will work with either \TeX\ or \LaTeX; the few
+differences between using these two formats are mentioned at the
+appropriate places below.
+
+\section{Loading this option}
+
+If you are using \LaTeX, \av\ should be included among the other
+document-style options that you load. For example, you might type
+at the beginning of your document:
+%
+\begin{example}
+\begin{verbatim}
+\documentstyle[11pt,avm,lingmacros]{article}
+\end{verbatim}
+\end{example}
+
+In \TeX, you input the file by including the following near the beginning
+of your document:
+\begin{example}
+\begin{verbatim}
+\input avm.sty
+\end{verbatim}
+\end{example}
+Either of these assumes that the file \av\ is somewhere on the search path for
+input files (the TEXINPUTS environment variable). This search path usually
+includes the current directory.
+
+\section{The `standard' environment}
+
+Most commands (except those that establish defaults) are only available
+within an {\AVM} environment. To enter and exit this environment, in \LaTeX\
+you type:
+\begin{example}
+\begin{verbatim}
+\begin{avm}
+...
+\end{avm}
+\end{verbatim}
+\end{example}
+while in \TeX\ you type:
+\begin{example}
+\begin{verbatim}
+\avm
+...
+\endavm
+\end{verbatim}
+\end{example}
+
+\subsection{Making AVMs in square brackets}
+
+The commands \verb+\[+ and \verb+\]+ begin and end a square-bracketed {\AVM}.
+Within an {\AVM}, a new line is begun by typing \verb+\\+.\footnote
+ {\TeX\ users can use {\tt \char'134 cr}, if they prefer. \LaTeX\ users
+ (only!) can follow the {\tt \char'134 \char'134 } with any of the things
+ that can follow {\tt \char'134 \char'134 } in {\tt tabular}
+ environments. So you can put extra space below one line of an AVM, by
+ typing {\tt \char'134 \char'134 [2ex]}, for example.}
+It is unnecessary to type \verb+\\+ following the
+last row of the {\AVM}. Within a line columns are divided by the ampersand
+`\verb+&+'. There can actually be any number of columns, although in most
+applications of {\AVM}s there are only two. For example:\footnote
+ {Here is one in a footnote (note the smaller fonts):
+ \begin{example}(i)
+ \begin{avm}
+ \[ ind & \[ pers & 3\\ num & \em sg\\ gend & \em masc\\refind & \@{12} \] \]
+ \end{avm}
+ \end{example}}
+\begin{examples}
+\item
+\begin{avm}
+\[ cat\|subcat & \<NP$_{it}$, NP$_{\@2}$, S[comp]:\@3\> \\
+ content & \[ relation & \bf bother\\
+ bothered & \@2 \\
+ soa-arg & \@3 \] \]
+\end{avm}
+
+\item
+\begin{avm}
+\[ subj & \[ pers & 3 \\
+ num & sg \\
+ gend & masc\\
+ pred & \rm `pro' \]\\
+
+ pred & \rm `eat\q<SUBJ, OBJ\q>'\\
+
+ obj & \[ pers & 3 \\
+ num & pl \\
+ gend & fem \\
+ pred & \rm `pro' \]
+\]
+\end{avm}
+\end{examples}
+
+\begin{examples}
+
+\item
+{\obeyspaces
+\begin{verbatim}
+\begin{avm}
+\[ cat\|subcat & \<NP$_{it}$, NP$_{\@2}$, S[comp]:\@3\> \\
+ content & \[ relation & \bf bother\\
+ bothered & \@2 \\
+ soa-arg & \@3 \] \]
+\end{avm}
+\end{verbatim}}
+
+\item
+{\obeyspaces
+\begin{verbatim}
+\begin{avm}
+\[ subj & \[ pers & 3 \\
+ num & sg \\
+ gend & masc\\
+ pred & \rm `pro' \]\\
+ pred & \rm `eat\q<SUBJ, OBJ\q>'\\
+ obj & \[ pers & 3 \\
+ num & pl \\
+ gend & fem \\
+ pred & \rm `pro' \]
+\]
+\end{avm}
+\end{verbatim}}
+\end{examples}
+The underlying environment is based on \TeX's \verb+\halign+ (which also
+underlies \LaTeX's \verb+tabular+ environment), and so the normal
+conventions of these apply. Note that spaces are ignored on both sides of
+an \verb+&+ or \verb+\\+, as in \LaTeX's \verb+tabular+ environment (but not
+in Plain \TeX's \verb+\halign+).
+
+\subsubsection{When you don't want to align columns}
+
+There are some occasions when you don't want things lined up in columns. For
+example, with a long HPSG path, we probably want the output to look as in
+\ex{1}[a] not \ex{1}[b].
+\begin{examples}
+\item
+\avmoptions{active}
+\begin{avm}
+[ synsem|local|content\;@2\\
+ qstore\;{ [ det & \rm forall \\
+ restpar & @2 [para & @1\\
+ restr & { [ reln & \rm book\\
+ inst & @1 ] } ] ] } ]
+\end{avm}\label{forall}
+
+\item
+\avmoptions{active}
+\begin{avm}
+[ synsem|local|content & @2\\
+ qstore & { [ det & \rm forall \\
+ restpar & @2 [para & @1\\
+ restr & { [ reln & \rm book\\
+ inst & @1 ] } ] ] } ]
+\end{avm}
+\end{examples}
+%
+There are several ways to achieve this, which will be presented in order
+from the quick and dirty fix to the best solution. One way is just to not
+use \verb+&+s. That way everything will be in one column:
+\begin{examples}
+\item
+\begin{avm}
+\[ short \rm value$_1$ \\
+ extremely-loooooooooong \rm value$_2$ \]
+\end{avm}
+
+\item
+\begin{verbatim}
+\begin{avm}
+\[ short \rm value$_1$ \\
+ extremely-loooooooooong \rm value$_2$ \]
+\end{avm}
+\end{verbatim}
+\end{examples}
+%
+However, the discerning eye will notice that there is then only a normal
+space width between attributes and values, and that looks bad.
+But \av\ defines a command \verb+\;+ analogous to the `thick space' in math
+mode that will put in the normal spacing between attributes and values. So
+the above example can be improved by typing it as follows.
+\begin{examples}
+\item
+\begin{avm}
+\[ short\; \rm value$_1$ \\
+ extremely-loooooooooong\; \rm value$_3$ \]
+\end{avm}
+
+\item
+\begin{verbatim}
+\begin{avm}
+\[ short\; \rm value$_1$ \\
+ extremely-loooooooooong\; \rm value$_3$ \]
+\end{avm}
+\end{verbatim}
+\end{examples}
+%
+However, to make elegant {\AVM}s it is often the case that you want most
+columns to be lined up, and in this case, you should use \verb+&+ in most
+columns as usual, but make the entire exceptional rows an argument of the
+command \verb+\avmspan+ as shown below:
+\begin{examples}
+\item
+\begin{avm}
+\[ content & \[ reln & \bf cause \\
+ causer & \@1 \\
+ causee & \@2 \\
+ \avmspan{caused-event\|reln\;\@3} \] \]
+\end{avm}
+\item
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\[ content & \[ reln & \bf cause \\
+ causer & \@1 \\
+ causee & \@2 \\
+ \avmspan{caused-event\|reln\;\@3} \] \]
+\end{avm}
+\end{verbatim}}
+\end{examples}
+
+\subsection{Other types of brackets and braces}
+
+\av\ also provides other types of large extendable braces and brackets.
+One uses \verb+\{+ and \verb+\}+ for curly braces, \verb+\(+ and \verb+\)+
+for round parentheses, \verb+\<+ and \verb+\>+ for angle brackets and
+\verb+\avml+ and \verb+\avmr+ for no brackets at all. Note that angle
+brackets have a maximum size, though, and are not infinitely stretchable
+like the other types of brackets. As is usual in
+\TeX, an opening bracket must be matched by a closing bracket, but the two
+need not be of the same sort. All these commands provide exactly the same
+internal
+environment as was described above for square brackets (e.g., use of
+\verb+&+ and \verb+\\+), although, in general, these fancier options are
+less used with these types of braces. Some examples follow (note the
+`misuse' of a 3 column {\AVM} in \ex{1}[c]):
+\begin{examples}
+\item
+\begin{avm}
+\[ qstore & \{ \[ det & \rm the \\
+ restpar & \[ para & \@1 \\
+ restr & \{ \[ reln & \rm poss \\
+ possessor & \@3 \\
+ possessed & \@1\]\}\ \bf union \q\{\@2\q\}
+\] \] \} \]
+\end{avm}
+
+\item
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\[qstore & \{ \[det & \rm the \\
+ restpar & \[para & \@1 \\
+ restr & \{ \[reln & \rm poss \\
+ possessor & \@3 \\
+ possessed & \@1\]\}\ \bf union \q\{\@2\q\}
+\] \] \} \]
+\end{avm}
+\end{verbatim}}
+
+\item
+{\avmfont{}\avmvalfont{}
+\footnotesize\sc
+\begin{avm}
+\avml
+\avml \rm kak\\
+\[subcat \< \[pos&n\\case&nm\\ind&\@1\], \[pos&n\\case&ac\\ind&\@2\] \>\]
+\avmr
+& $\Longrightarrow$ &
+\avml \rm kak-ase\\
+\[subcat \< \[pos&n\\case&nm\\ind&\@3\], \[pos&n\\case&dt\\ind&\@1\],
+ \[pos&n\\case&ac\\ind&\@2\] \>\]
+\avmr \avmr
+\end{avm}
+}
+
+\item
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\avml
+\avml \rm kak\\
+\[subcat \< \[pos&n\\case&nm\\ind&\@1\], \[pos&n\\case&ac\\ind&\@2\] \>\]
+\avmr
+& $\Longrightarrow$ &
+\avml \rm kak-ase\\
+\[subcat \< \[pos&n\\case&nm\\ind&\@3\], \[pos&n\\case&dt\\ind&\@1\],
+ \[pos&n\\case&ac\\ind&\@2\] \>\]
+\avmr \avmr
+\end{avm}
+\end{verbatim}}
+
+\item
+\begin{avm}
+\{ \[ pred & \rm `see\q<girl, Mary\q>' \\
+ subj & \rm `girl' \\
+ obj & \rm `Mary' \] \\
+ \[ pred & \rm `heard\q<girl, Bill\q>' \\
+ subj & \rm `girl' \\
+ obj & \rm `Bill' \] \}
+\end{avm}
+
+\item
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\{ \[ pred & \rm `see\q<girl, Mary\q>' \\
+ subj & \rm `girl' \\
+ obj & \rm `Mary' \] \\
+ \[ pred & \rm `heard\q<girl, Bill\q>' \\
+ subj & \rm `girl' \\
+ obj & \rm `Bill' \] \}
+\end{avm}
+\end{verbatim}}
+
+\end{examples}
+
+For normal text size brackets, \verb+[+, \verb+]+, \verb+(+ and \verb+)+
+work in the usual way. Curly braces and angle brackets can be made
+using the \verb+\q+ (`quote' command), by writing \verb+\q\{+, \verb+\q\}+,
+\verb+\q<+ and \verb+\q>+, as in \ex{0}[b,f]. Or they can
+be made by going into math mode in the usual way.
+
+\subsection{Other features}
+
+\subsubsection{Sort labels}
+
+The commands \verb+\sort+ and \verb+\osort+ put sort labels at the
+corner of any structure. They differ in that the label of
+\verb+\sort+ takes up space in the column or text where it appears whereas
+\verb+\osort+ overlaps its label into the previous column or text.
+\verb+\osort+ does not check for collisions so you have to use your
+judgment. For example, (1) was typeset with these commands:
+%
+\begin{example}\label{firstverbatim}
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]} \]}
+\end{avm}
+\end{verbatim}}
+\end{example}
+%
+If one wants (almost) all square-bracketed feature structures sorted,
+it is more convenient to use the sub-mode \verb+sorted+ (see
+Section~\ref{sorted-sec}). See also Section~\ref{corners} for how to vary
+the sort label position.
+
+\subsubsection{Bars, index boxes, nodes and lines}
+
+The command \verb+\|+ will produce a vertical bar with a
+little space on either side. The command \verb+\@{...}+ will produce a
+labeled index box, as used in PATR and HPSG. If the index is a single
+digit, the braces may be omitted. The \verb+\@+ command only works within
+the {\AVM} environment, but since you often want to refer to index boxes in
+the text of your paper, the additional command \verb+\avmbox{...}+ can be
+used anywhere to draw an index box.
+
+For curved lines connecting {\AVM}s (as widely used in LFG), Emma Pease's
+{\sf tree-dvips.sty} can be used as normal, but \av\ also adds the
+shortcut whereby \verb+\!+ can be used instead of \verb+\node+.
+One often wants these curved lines to connect to a dash or an empty
+feature structure. So \av\ provides the one-parameter commands
+\verb+\avmd+ and \verb+\avmb+ (for dash and box, respectively), that draw
+such an object and
+label it with their parameter. These are illustrated below:
+%
+\begin{examples}
+\item
+\nodemargin=0pt
+\begin{avm}
+\[ subj & \!{a}{\[ pred & \rm `pro'\\
+ num & sg \\
+ pers & 1 \]} \\
+ pred & \rm `want\q<\avmd{aa}, \avmd{bb}\ \q>' \\
+ xcomp & \!{b}{\[ pred & \rm `go\q<\avmd{aaaa}\q>' \\
+ subj & \avmb{aaa} \]} \]
+\end{avm}
+\nodecurve[r]{a}[t]{aa}{.3in}[.2in] % was .4
+\nodecurve[b]{aa}[t]{aaaa}{.2in}
+\nodecurve[r]{aaa}[b]{aaaa}{.25in} % was .15
+\nodecurve[r]{bb}[r]{b}{.5in}[.5in]
+
+\item
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\[ subj & \!{a}{\[ pred & \rm `pro'\\
+ num & sg \\
+ pers & 1 \]} \\
+ pred & \rm `want\q<\avmd{aa}, \avmd{bb}\ \q>' \\
+ xcomp & \!{b}{\[ pred & \rm `go\q<\avmd{aaaa}\q>' \\
+ subj & \avmb{aaa} \]} \]
+\end{avm}
+\nodecurve[r]{a}[t]{aa}{.4in}
+\nodecurve[b]{aa}[t]{aaaa}{.2in}
+\nodecurve[r]{aaa}[b]{aaaa}{.15in}
+\nodecurve[r]{bb}[r]{b}{.5in}[.5in]
+\end{verbatim}}
+\end{examples}
+%
+If one wants (almost) all square-bracketed feature structures labeled,
+it is more convenient to use the sub-mode \verb+labeled+ (see
+Section~\ref{sorted-sec}).
+
+\section{Fonts}
+By default, \av\ puts {\AVM}s in the type size and style that is currently
+being used. This allows one to easily type things like the following (in
+\LaTeX):
+
+\begin{examples}
+\item
+{\avmfont{}\footnotesize\sf \begin{avm}
+\[ content \[ reln & \bf cause \\
+ causer & \@1 \\
+ causee & \@2 \\
+ \avmspan{caused-event\|reln\;\@3} \] \]
+\end{avm}}
+\item
+{\obeyspaces\begin{verbatim}
+{\footnotesize\sf \begin{avm}
+\[ content \[ reln & \bf cause \\
+ causer & \@1 \\
+ causee & \@2 \\
+ \avmspan{caused-event\|reln\;\@3} \] \]
+\end{avm}}
+\end{verbatim}}
+\end{examples}
+%
+However, one often wants all {\AVM}s to be set in certain fonts and so \av\
+lets you specify default fonts for {\AVM}s. This is done with the following
+commands:
+%
+\begin{examples}
+\item \verb+\avmfont{...}+
+\item \verb+\avmvalfont{...}+
+\item \verb+\avmsortfont{...}+
+\end{examples}
+%
+This is how fonts work: (i)~index box contents are set in the
+\verb+\scriptstyle+ (smaller subscript size) of the current math font;
+(ii)~if \verb+\avmsortfont+ is defined, sort names for {\AVM}s are set in
+the \verb+\avmsortfont+; (iii)~if \verb+\avmvalfont+ is defined, value
+names (items in the second and subsequent columns of the {\AVM}
+environment) are set in the \verb+\avmvalfont+; (iv) everything not
+assigned a font so far is set in the \verb+\avmfont+, if this is
+defined, and in the current default font otherwise.
+
+Most of the examples in this
+document are set in small capitals using the following (\LaTeX) defaults:
+%
+\begin{example}
+\verb+\avmfont{\sc}+\\
+\verb+\avmsortfont{\scriptsize\it}+
+\end{example}
+%
+After setting up a default font, to reset things so that \av\ uses the
+current font, simply call the same commands with an empty argument, for
+example, \verb+\avmfont{}+.
+
+Note for Plain \TeX\ users: by default, neither the small capitals font nor
+the equivalent of \LaTeX's \verb+\scriptsize+ italic font is loaded.
+To get similar output in Plain \TeX, the minimum you must add somewhere
+near the beginning of your file is:
+\begin{example}
+\begin{verbatim}
+\font\tensc=cmcsc10
+\font\seveni=cmti7
+\avmfont{\tensc}
+\avmsortfont{\seveni}
+\end{verbatim}
+\end{example}
+%
+However, more setup would be required to fully integrate these fonts into
+Plain \TeX\ or to get things to work with different font sizes or scalings.
+
+The font of any individual item can be changed in the usual way with a font
+changing command, as shown in \exref{firstverbatim}.
+Note that in any of the bracketed structures, font
+changes are always only local (having scope until the next \verb+&+ or
+\verb+\\+), so it is generally not necessary to use braces to delimit
+font changes.
+
+\section{User-specified options}
+
+\av\ has various (well, eight) options that you can specify. Three of these
+activate sub-modes which alter how you input {\AVM}s, while the others
+alter the way {\AVM}s appear in the output. You
+activate these options by using the \verb+\avmoptions+ command. This
+command takes a comma-separated list of options to be turned on and all the
+other options are turned off. So, three options are turned on
+with \ex{1}[a] and all are turned off (returning things to the default
+mode) with the command \ex{1}[b]. Just \verb+labeled+ can be
+selected with command \ex{1}[c]. Note that the parameter to an
+\verb+\avmoptions+ command must not contain any spaces! The options
+are \verb+active+; \verb+sorted+, \verb+labeled+; \verb+center+ and
+\verb+bottom+; \verb+topleft+, \verb+topright+, and \verb+bottomright+.
+Options within each semicolon-separated set are mutually exclusive, but
+otherwise the options can be freely combined.
+%
+\begin{examples}
+\item \verb+\avmoptions{active,sorted,bottom}+
+\item \verb+\avmoptions{}+
+\item \verb+\avmoptions{labeled}+
+\end{examples}
+%
+Setting these options is local to a group and so the domain of effect can
+be delimited with braces. Also, since all \LaTeX\ environments (things
+enclosed in \verb+\begin+ \ldots\ \verb+\end+ pairs) define their
+own group, including an options command within such a \verb+\begin+ \ldots\
+\verb+\end+ pair will affect only the processing of the rest of that
+environment.
+
+\subsection{Sort labels in different corners: {\tt topleft},
+ {\tt topright}, and {\tt bottomright}}\label{corners}
+
+While {\small HPSG} normally places sort labels in the bottom left corner
+of {\AVM}s, with {\av} you can actually have sort labels in any corner that
+you wish. You select different corners for the \verb+\sort+ and
+\verb+\osort+ commands and the \verb+sorted+ option with the options {\tt
+topleft}, {\tt topright}, and {\tt bottomright}. This is illustrated in
+the next section.
+
+\subsection{The {\tt sorted} and {\tt labeled} sub-modes}\label{sorted-sec}
+
+These modes both affect just the behavior of the square brackets commands
+(in either the default mode or the \verb+active+ sub-mode) and are
+mutually exclusive. Left square-bracket commands take one argument, which
+is the sort or node label name for this {\AVM}. The \verb+labeled+ mode
+gives the same results as using \verb+\!+ (i.e., \verb+\node+), but
+lessens the typing required:
+%
+\begin{examples}
+\item
+\nodemargin=0pt
+\avmoptions{labeled}
+\begin{avm}
+\[{a} subj & \[{b} num & pl \] \\
+ tense & pres \\
+ pred & \rm `bark\q<\avmd{c}\q>' \]
+\end{avm}
+\nodecurve[br]{b}[t]{c}{15pt}
+
+\item
+{\obeyspaces\begin{verbatim}
+\avmoptions{labeled}
+\begin{avm}
+\[{a} subj & \[{b} num & pl \] \\
+ tense & pres \\
+ pred & \rm `bark\q<\avmd{c}\q>' \]
+\end{avm}
+\nodecurve[br]{b}[t]{c}{15pt}
+\end{verbatim}}
+\end{examples}
+
+The \verb+sorted+ sub-mode gives a combination of the effects of the
+\verb+\sort+ and \verb+\osort+ commands (trying to give you what you
+probably want).
+If the corner sub-mode is {\tt topright} or {\tt bottomright} then it
+always behaves as \verb+\sort+. If the sub-mode is {\tt topleft}, or the
+default which puts labels in the bottom left, then it behaves like
+\verb+\osort+, except at the outermost level of the {\AVM}, where it
+behaves like \verb+\sort+.\footnote
+ {This is so the outermost sort label will not overlap the text
+ preceding it, whereas if
+ you use the {\tt\char'134 osort} command, no extra space is added, even
+ at the
+ outermost level. This means that if you are building AVMs with sorts in
+ parts, you will want to use {\tt\char'134 osort} rather than the
+ {\tt sorted} sub-mode.}
+Example \ex{1} was produced by preceding \ex{2} by each of the commands in
+\ex{3} in turn.
+%
+\begin{example}
+\avmvalfont{\rm}
+\avmoptions{topleft,sorted}
+\begin{avm}
+\[{index} variable & \@1 \[{variable} per & 3rd \\
+ num & sing \\
+ gend & neut \] \\
+ restr & \[{psoa} relation & book \\
+ instance & \@1 \] \]
+\end{avm}
+\hfill
+\avmoptions{topright,sorted}
+\begin{avm}
+\[{index} variable & \@1 \[{variable} per & 3rd \\
+ num & sing \\
+ gend & neut \] \\
+ restr & \[{psoa} relation & book \\
+ instance & \@1 \] \]
+\end{avm}\\[2ex]
+\avmoptions{sorted}
+\begin{avm}
+\[{index} variable & \@1 \[{variable} per & 3rd \\
+ num & sing \\
+ gend & neut \] \\
+ restr & \[{psoa} relation & book \\
+ instance & \@1 \] \]
+\end{avm}
+\hfill
+\avmoptions{bottomright,sorted}
+\begin{avm}
+\[{index} variable & \@1 \[{variable} per & 3rd \\
+ num & sing \\
+ gend & neut \] \\
+ restr & \[{psoa} relation & book \\
+ instance & \@1 \] \]
+\end{avm}
+\end{example}
+
+\begin{example}
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\[{index} variable & \@1 \[{variable} per & 3rd \\
+ num & sing \\
+ gend & neut \] \\
+ restr & \[{psoa} relation & book \\
+ instance & \@1 \] \]
+\end{avm}
+\end{verbatim}}
+\end{example}
+
+\begin{examples}
+\item \verb+\avmvalfont{\rm}+\\
+ \verb+\avmoptions{topleft,sorted}+
+
+\item \verb+\avmoptions{topright,sorted}+
+\item \verb+\avmoptions{sorted}+
+\item \verb+\avmoptions{bottomright,sorted}+
+\end{examples}
+
+
+
+%\item
+%\nodemargin=0pt
+%\avmoptions{labeled}
+%\begin{avm}
+%\[{x} subj & \[{a} pred & \rm `pro'\\
+% num & sg \\
+% pers & 1 \] \\
+% pred & \rm `want\q<\[{aa}\;\], \[{bb}\;\]\ \q>' \\
+% xcomp & \[{b} pred & \rm `go\q<\[{aaaa}\;\]\q>' \\
+% subj & \[{aaa}\;\] \] \]
+%\end{avm}
+%\nodecurve[t]{aa}[r]{a}{.4in}
+%\nodecurve[b]{aa}[t]{aaaa}{.2in}
+%\nodecurve[r]{aaa}[b]{aaaa}{.15in}
+%\nodecurve[r]{bb}[r]{b}{.5in}[.5in]
+%\nodecurve[l]{x}[l]{b}{.3in}
+
+\subsection{The {\tt active} sub-mode}
+
+The {\AVM}s above looked okay, but it can get tiring typing all the
+backslashes. So an alternative environment in which bracket characters are
+`active' (i.e., they are commands) is also provided. Using it, one can
+type the {\AVM} in \exref{forall} as follows:
+
+\begin{example}
+{\obeyspaces\begin{verbatim}
+\avmoptions{active}
+\begin{avm}
+[ synsem|local|content\; @2 \\
+ qstore\; \{ [ det & \rm forall \\
+ restpar & @2 [para & @1\\
+ restr & \{ [ reln & \rm book\\
+ inst & @1 ] \} ] ] \} ]
+\end{avm}
+\end{verbatim}}
+\end{example}
+%
+%To be able to type {\AVM}s like this, you need to give the command
+%\verb+\avmoptions{active}+ before beginning the \verb+avm+
+%environment (with either \verb+\avm+ (\TeX) or \verb+\begin{avm}+ (\LaTeX)).
+
+The functionality of this environment is exactly the same as that of
+the default mode described above; all that differs is how various commands
+are called. The following table defines the correspondence between
+commands in the two versions:
+%
+\begin{example}
+\setbox1=\hbox{\begin{tabular}[t]{|l|l||l|l|}
+\hline
+Default & \verb+active+ mode & Default & \verb+active+ mode\\ \hline
+\verb+\[+ & \verb+[+ & \verb+\]+ & \verb+]+ \\
+\verb+\(+ & \verb+(+ & \verb+\)+ & \verb+)+ \\
+\verb+\<+ & \verb+<+ & \verb+\>+ & \verb+>+ \\
+\verb+\{+ & \verb+\{+ & \verb+\}+ & \verb+\}+ \\
+\verb+[+ & \verb+\[+ & \verb+]+ & \verb+\]+ \\
+\verb+(+ & \verb+\(+ & \verb+)+ & \verb+\)+ \\
+\verb+\q<+ & \verb+\<+ & \verb+\q>+ & \verb+\>+ \\
+\verb+\q\{+ & \verb+\q\{+ & \verb+\q\}+ & \verb+\q\{+ \\
+\verb+\@{...}+ & \verb+@{...}+ & \verb+\|+ & \verb+|+ \\ \hline
+\end{tabular}}
+\evnup[.75ex]{\box1}
+\end{example}
+%
+All other commands in the \verb+avm+ environment are unchanged when
+the \verb+active+ sub-mode is in effect. Note that curly braces
+still require a preceding backslash. This is so curly braces can retain
+their usual \TeX\ functions.
+
+Unfortunately, there is a major restriction on being able to use this
+environment. Because of
+the way \TeX\ works, such an environment cannot appear inside the argument
+of any command (such as \verb+\footnote+ or the \verb+\enumsentence+ macro
+of Emma Pease's {\sf lingmacros.sty}).\footnote
+ {This is because characters receive a permanent {\em catcode} when first
+ read as a macro argument. This is a fundamental feature of \TeX\ and
+ nothing to do with this package. Hence it isn't likely to change.}
+However, the \verb+active+ sub-mode can be used within \LaTeX\
+environments or between Plain \TeX\
+commands that serve as a preamble and postamble. For example, the author
+has an \verb+example+ environment that produces output similar to the
+\verb+\enumsentence+ macro, and using it and the \verb+active+ sub-mode, he
+could draw the structure in \ex{1} by using the commands in \ex{2}.
+\begin{example}\label{complex}
+\avmoptions{active}
+\begin{avm}
+[ qcontent & < [ det & \rm some \\
+ restpar & [ para & @3 \\
+ restr & \{ [ reln & \rm poem\\
+ inst & @3 ] \} ] ] > \\
+ dcontent & [ relation & \rm know \\
+ knower & @2 [ pers & 1 \\ num & sg ] ] ]
+\end{avm}
+\end{example}
+
+\begin{example}
+{\obeyspaces\begin{verbatim}
+\begin{example}
+\avmoptions{active}
+\begin{avm}
+[ qcontent & < [ det & \rm some \\
+ restpar & [ para & @3 \\
+ restr & \{ [ reln & \rm poem\\
+ inst & @3 ] \} ] ] > \\
+ dcontent & [ relation & \rm know \\
+ knower & @2 [ pers & 1 \\ num & sg ] ] ]
+\end{avm}
+\end{example}
+\end{verbatim}}
+\end{example}
+
+Here is one more example of the \verb+active+ sub-mode (in
+combination with the \verb+sorted+ sub-mode), included mainly to exercise
+the other commands in the sub-mode.
+%
+\begin{examples}
+\item
+\avmoptions{active,sorted}
+\begin{avm}
+[{test} testing & ( stuff & [{widget} attr$_1$ & \< value$_{@1}$ \> \\
+ attr$_2$ & \( value \) \\
+ attr$_3$ & \[ \q\{ value \q\} \] ] ) ]
+\end{avm}
+
+\item
+{\obeyspaces\begin{verbatim}
+\avmoptions{active,sorted}
+\begin{avm}
+[{test} testing & ( stuff & [{widget} attr$_1$ & \< value$_{@1}$ \> \\
+ attr$_2$ & \( value \) \\
+ attr$_3$ & \[ \q\{ value \q\} \] ] ) ]
+\end{avm}
+\end{verbatim}}
+\end{examples}
+
+\subsection{The {\tt center} and {\tt bottom} options}
+
+These parameters determine the positioning of the whole {\AVM}. Although
+an {\AVM}
+usually appears in a display environment, it is actually like one huge
+character as far as \TeX\ is concerned, and if you choose to put it near
+other characters, you might want any of the top, bottom or center of it
+aligned with those other characters. By default you get alignment along
+the top (usually what you want), but you can change this by specifying
+\verb+bottom+ or \verb+center+ to the \verb+\avmoptions+ command.
+Giving any \verb+\avmoptions+ command that does not specify \verb+center+
+or \verb+bottom+ will return you to using alignment along the top.
+All three possibilities are shown in the below:
+
+\begin{examples}
+\item
+Top \avmoptions{active}\begin{avm}
+[ case & acc \\ gend & fem \\ num & pl ]
+\end{avm},
+bottom \avmoptions{active,bottom}\begin{avm}
+[ case & acc \\ gend & fem \\ num & pl ]
+\end{avm}
+or center \avmoptions{active,center}\begin{avm}
+[ case & acc \\ gend & fem \\ num & pl ]
+\end{avm}.
+
+\item
+{\obeyspaces\begin{verbatim}
+Top \avmoptions{active}\begin{avm}
+[ case & acc \\ gend & fem \\ num & pl ]
+\end{avm},
+bottom \avmoptions{active,bottom}\begin{avm}
+[ case & acc \\ gend & fem \\ num & pl ]
+\end{avm}
+or center \avmoptions{active,center}\begin{avm}
+[ case & acc \\ gend & fem \\ num & pl ]
+\end{avm}.
+\end{verbatim}}
+\end{examples}
+Within the {\AVM} environment, bracketed structures are always aligned
+along their centers. But you can get different alignments by nesting
+{\AVM} environments (as opposed to nesting brackets within a single {\AVM} environment).
+
+\section{Advanced topics}
+
+\subsection{Layout parameters}
+
+Three parameters control the spacing in {\AVM}s. \verb+\avmvskip+ determines
+the extra vertical space added at the beginning, end and between every row
+of an aligned structure. \verb+\avmhskip+ determines the spacing between
+two columns of an aligned structure. At the left and right borders of an
+aligned structure (between the bracket and the first or last column) the
+spacing is \verb+\avmbskip+.
+The default values of these parameters (determined by eyeballing) are:
+%
+\begin{examples}
+\item \verb+\avmvskip{+{\tt \avmjvskip}\verb+}+
+\item \verb+\avmhskip{+{\tt \avmjhskip}\verb+}+
+\item \verb+\avmbskip{+{\tt \avmjbskip}\verb+}+
+\end{examples}
+%
+These defaults are defined in terms of the font-dependent units \verb+em+
+and \verb+ex+ so that they vary with the font size, but these parameters
+can be defined as any
+$\langle${\em dimen}$\rangle$. For more compressed {\AVM}s (such as those
+embedded in phrase-structure trees), the author tends to issue the
+following commands:
+%
+\begin{example}
+\verb+\avmvskip{.1ex}\avmhskip{.5em}+
+\end{example}
+
+
+\subsection{Using boxes to build huge AVMs}
+
+Note that \TeX\ has only a finite capacity for nesting, and if a
+structure is too complicated \TeX\ may be unable to set it. The vertical
+length of an {\AVM} is fairly unimportant; the critical parameter is the
+horizontal depth of nesting of stretchable brackets. On the \TeX\ I am
+using, one can embed
+stretchable brackets to about the level shown in \exref{complex} (when
+already within a
+\LaTeX\ list environment). To set a
+more complex {\AVM} than this, you unfortunately have to set pieces
+separately, store them in box registers and then set the whole {\AVM} (or
+else find a \TeX\ with a larger {\em semantic nest size\/}). An example of
+how to do this is shown below. Not the use of the {\tt center}
+sub-mode.\footnote
+ {Note also that \TeX\ box manipulation commands are shown. These work
+ perfectly well under \LaTeX\ as well, but if you want to find out about the
+ official \LaTeX\ box manipulation commands, see pp.~96--101 of the \LaTeX\
+ book.}
+%
+\begin{examples}
+\item
+\newbox\mybox \newbox\myboxtoo \avmoptions{center}
+
+\setbox\mybox=\hbox{\begin{avm}
+ \osort{ppro}{\[index & \osort{index}{\[ per & \it 3rd\\
+ num & \it sing\\
+ gend & \it fem \]} \]}
+ \end{avm}}
+\setbox\myboxtoo=\hbox{\begin{avm}
+ \sort{soa}{\[reln & \it female \\
+ inst & \@1 \]}
+\end{avm}}
+
+\avmoptions{active,sorted}
+\begin{avm}
+[{sign} phonology\;\<\rm she\> \\
+ synsem\;[{synsem} local & [{local} category & [{cat} head &
+ \it noun{\sc \[case\;{\it nom}\]}\\
+ subcat & \< \> ] \\
+content & [{ref-obj} para & @1 \box\mybox \\
+ restr & \q\{ \q\}] \\
+context & [{context} backgr & \{ \box\myboxtoo \} ]]]]
+\end{avm}
+
+\item
+{\obeyspaces\begin{verbatim}
+\newbox\mybox \newbox\myboxtoo \avmoptions{center}
+
+\setbox\mybox=\hbox{\begin{avm}
+ \osort{ppro}{\[index & \osort{index}{\[ per & \it 3rd\\
+ num & \it sing\\
+ gend & \it fem \]} \]}
+ \end{avm}}
+\setbox\myboxtoo=\hbox{\begin{avm}
+ \sort{soa}{\[reln & \it female \\
+ inst & \@1 \]}
+ \end{avm}}
+
+\avmoptions{active,sorted}
+\begin{avm}
+[{sign} phonology\;\<\rm she\> \\
+ synsem\;[{synsem} local & [{local} category & [{cat} head &
+ \it noun{\sc \[case\;{\it nom}\]}\\
+ subcat & \< \> ] \\
+content & [{ref-obj} para & @1 \box\mybox \\
+ restr & \q\{ \q\}] \\
+context & [{context} backgr & \{ \box\myboxtoo \} ]]]]
+\end{avm}
+\end{verbatim}}
+\end{examples}
+%
+It would be nice if \av\ could be made more economical in its use of this
+\TeX\ resource, but I don't know how to do that without compromising
+the functionality or the user interface of \av.
+
+\subsection{Known problems}
+
+All known bugs were fixed for the Version 1.00 release. Please send bug
+reports and ideas for improvements to the email address given at the
+beginning of this document.
+
+
+\end{document}
+
+Finally, note that \verb+avm+ environments can be nested while
+\verb+specialavm+ cannot, though it is unclear to me why anyone would want
+to nest these environments anyway.
+\begin{examples}
+
+
+\item \begin{avm} \osort{x}{\[ \]} \end{avm}A AA A[
+
+\item \newbox\testing
+\setbox\testing=\hbox{\begin{avm} \osort{x}{\[ A \]} \end{avm}}
+\leavevmode\box\testing A
+
+\item \begin{avm}
+\[ a & b \\[3ex]
+c & d \\[6ex]
+e & f \\
+g & h \]
+\end{avm}
+
+\item \begin{avm}
+\< \begin{avm} \[ case & nom\\ gend & fem \] \end{avm},
+\begin{avm} \[ case & abl\\ gend & fem \] \end{avm} \>
+\end{avm}
+
+\item
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\< \begin{avm} \[ case & nom\\ gend & fem \] \end{avm},
+\begin{avm} \[ case & abl\\ gend & fem \] \end{avm} \>
+\end{avm}
+\end{verbatim}}
+\end{examples}
+
+\begin{examples}
+\avmoptions{active}
+\item \begin{avm}
+< \begin{avm} [ case & nom\\ gend & fem ] \end{avm},
+\begin{avm} [ case & abl\\ gend & fem ] \end{avm} >
+\end{avm}
+
+\item
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\< \begin{avm} \[ case & nom\\ gend & fem \] \end{avm},
+\begin{avm} \[ case & abl\\ gend & fem \] \end{avm} \>
+\end{avm}
+\end{verbatim}}
+\end{examples}
+
+
+
+\begin{examples}
+\item
+\avmoptions{topleft}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]} \]}
+\end{avm}
+
+\item
+\avmoptions{topright}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]} \]}
+\end{avm}
+
+\item
+\avmoptions{bottomright}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]} \]}
+\end{avm}
+
+\item
+\avmoptions{}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]} \]}
+\end{avm}
+
+\item \avmvalfont{\it}
+\begin{avm}
+\[ phonology & \rm \q<who\q>\\
+synsem\|local & \[ category & \[ head & noun\\
+ subcat & \q<\q> \] \\
+ content\|parameter & \@1 npro\\
+ context\|background & \{ \[ relation & human\\
+ instance & \@1 \] \} \] \]
+\end{avm}
+
+\item {\obeyspaces
+\begin{verbatim}
+\begin{avm}
+\[ phonology & \rm \q<who\q>\\
+synsem\|local & \[ category & \[ head & \it noun\\
+ subcat & \q<\q> \] \\
+ content\|parameter & \@1 \it npro\\
+ context\|background & \{ \[ relation & \it human\\
+ instance & \@1 \] \} \] \]
+\end{avm}
+\end{verbatim}}
+
+\item
+\avmoptions{sorted}
+\begin{avm}
+\[{boris} ind & \[{wilbur} num & sg \\ gend & fem \] \]
+\end{avm}
+
+\item
+{\obeyspaces\begin{verbatim}
+\avmoptions{sorted}
+\begin{avm}
+\[{boris} ind & \[{wilbur} num & sg \\ gend & fem \] \]
+\end{avm}
+\end{verbatim}}
+
+\item
+\begin{avm}
+\avml subcat & \< \[pos & n\\case & acc\],
+ \[pos & v\\vform & inf\] \> \avmr
+\end{avm}
+
+\item
+{\obeyspaces\begin{verbatim}
+\begin{avm}
+\lavm subcat & \< \[pos & n\\case & acc\],
+ \[pos & v\\vform & inf\] \> \ravm
+\end{avm}
+\end{verbatim}}
+
+\end{examples}
+
+Describe avmbox, sorts on different corners, new options to end of line
+command. Anything else?
+
+
+
+\end{document}
+
+
+provides severaltwo environments: one where all commands are still preceded with
+the backslash character `$\backslash$', and another where the various
+bracket characters are defined as active characters (commands). However,
+using the latter imposes certain restrictions and so it will only be
+described later.\footnote
+ {The user interface of the `active' environment of \av\ is derived from
+ the style file {\sf
+ hpsg.sty} by Harry Bratt. However, not only does this package work with
+ both \TeX\ and \LaTeX, but it corrects various failings of the
+ latter: text in {\AVM}s is set in horizontal (LR) mode, not math mode;
+ \av\ properly restores the parameters and definitions it fiddles with
+ (so you can load \av\ anywhere among your list of
+ document-style options!) and the availability of the `standard' environment
+ allows feature structures to appear within the arguments of other
+ commands.}
+
+
+\item \avmoptions{center}
+\setbox7=\hbox{\begin{avm}
+\osort{ppro}{\[index & \osort{index}{\[ per & \it 3rd\\
+num & \it sing\\
+gend & \it fem \]} \]}
+\end{avm}}
+
+{\avmoptions{active,sorted}
+\begin{avm}
+\sort{sign}{[{} phonology & \<\rm she\> \\
+ synsem|local & [{local} category & [{cat} head &
+ \it noun{\sc \[ case\;{\it nom}\]}\\
+ subcat & \< \> ] \\
+content & [{ref-obj} para & \box7 ]]]}
+\end{avm}}
+
+
+\item \begin{avm}
+\[ pers & mum \\
+ ind & \[ ind2 & \[ ind3 & \[ ind4 & \[ nose & ear\\
+ ear & wig \] \] \] \]\\
+ case & acc \]
+\end{avm}
+%\item \begin{avm}
+%\[ attr & \begin{avm} \[ a1 & v1\\ a2 & v2\]\\
+% attr2 & val \]
+%
+%{\avmoptions{active}
+%\item \begin{avm}
+%[ attr & \begin{avm} [ a1 & v1\\ a2 & v2]\\
+% attr2 & val ]
+%}
+%\item
+%\begin{avm}
+%\[ pers & 3\\
+% num & sg\]
+%\end{avm}
+%\begin{avm}
+%\[ pers & 3\\
+% num & sg \\ \]
+%\end{avm}
+
+%
+%\item
+%\begin{avm}
+%\[{content}qcontent & \< \[{} det & \rm some \\
+% restpar & \[{}para & \@3 \\
+% restr & \{ \[{}reln & \rm poem\\
+% inst & @3 \] \} \] \] \> \\
+% dcontent & \[{} relation & \rm know \\
+% knower & \@2 \[{} pers & 1 \\ num & sg \] \] \]
+%\end{avm}
+
+\begin{examples}
+\item
+\avmoptions{topleft}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]} \]}
+\end{avm}
+
+\item
+\avmoptions{topright}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]} \]}
+\end{avm}
+
+\item
+\avmoptions{}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]} \]}
+\end{avm}
+
+\item
+\avmoptions{bottomright}
+\begin{avm}
+\sort{indexed-obj}{\[ index & \osort{index}{\[
+ variable & \@1 \osort{variable}{\[ per & \rm 3rd \\
+ num & \rm sing \\
+ gend & \rm neut \]} \\
+ restriction & \osort{psoa}{\[relation & \rm book \\
+ instance & \@1 \]} \]} \]}
+\end{avm}
+\end{examples}
+
diff --git a/macros/latex209/contrib/trees/tree-dvips/avm.sty b/macros/latex209/contrib/trees/tree-dvips/avm.sty
new file mode 100644
index 0000000000..1b38c8160e
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/avm.sty
@@ -0,0 +1,158 @@
+% avm.sty -- for attribute-value matrices -- mar 29, 1992; rev. dec 6, 1993
+% (c) 1992 christopher manning (manning@csli.stanford.edu) -- see avm.doc.tex
+
+\newif\ifavmactive\newif\ifavmsorted\newif\ifavmlabeled
+\newif\ifavmcenter\newif\ifavmbottom
+\newif\ifavmbottomright\newif\ifavmtopleft\newif\ifavmtopright
+
+\newdimen\avmdimen
+\newbox\avmboxone\newbox\avmboxthree
+
+\def\avmoptions#1{\avmactivefalse\avmsortedfalse\avmlabeledfalse
+ \avmcenterfalse\avmbottomfalse
+ \avmbottomrightfalse\avmtopleftfalse\avmtoprightfalse
+ \def\more{#1}\ifx\more\empty\else\avmjoptions#1,\@nil\fi}
+\def\avmjoptions#1,#2\@nil{\def\more{#2}\csname avm#1true\endcsname
+ \ifx\more\empty\else\avmjoptions#2\@nil\fi}
+
+
+\def\avmfont#1{\def\avmjfont{#1}}
+\def\avmjfont{}
+
+\def\avmvalfont#1{\def\avmjvalfont{#1}}
+\def\avmjvalfont{}
+
+\def\avmsortfont#1{\def\avmjsortfont{#1}}
+\def\avmjsortfont{}
+
+\def\avmhskip#1{\def\avmjhskip{#1}}
+\def\avmjhskip{1em}
+
+\def\avmbskip#1{\def\avmjbskip{#1}}
+\def\avmjbskip{0em}
+
+\def\avmvskip#1{\def\avmjvskip{#1}}
+\def\avmjvskip{0.385ex}%was .3875
+
+
+\def\avmjprolog#1{$\mskip-\thinmuskip
+ \left#1\hskip\avmjbskip\vcenter\bgroup\vskip\avmjvskip
+ \ialign\bgroup\avmjfont
+ \strut ##\unskip\hfil
+ &&\hskip\avmjhskip\avmjvalfont ##\unskip\hfil\cr}
+\def\avmjpostlog#1{\crcr\egroup\vskip\avmjvskip\egroup
+ \hskip\avmjbskip\right#1\mskip-\thinmuskip$\ignorespaces}
+
+
+\def\avmjcatcode{\let\lparen=(\let\rparen=)\catcode`\[=13\catcode`\]=13
+ \catcode`\<=13\catcode`\@=13\catcode`\(=13\catcode`\)=13
+ \catcode`\>=13\catcode`\|=13}
+
+{\avmjcatcode % new group: redefine above catcodes as active
+
+\gdef\specialavm{\avmjcatcode
+\def({\avmjprolog\lparen}%
+\def){\avmjpostlog\rparen}%
+\def<{\avmjprolog\langle}%
+\def>{\avmjpostlog\rangle}%
+\ifavmsorted
+\def[##1{\setbox\avmboxthree=\hbox{\avmjsortfont##1\/}\setbox2=\hbox
+ \bgroup\avmjprolog\lbrack}%
+\def]{\avmjpostlog\rbrack\egroup\avmjsort}%
+\else\ifavmlabeled
+\def[##1{\def\more{##1}\setbox2=\hbox\bgroup\avmjprolog[}%
+\def]{\avmjpostlog]\egroup\node{\more}{\box2}}%
+\else
+\def[{\avmjprolog\lbrack}%
+\def]{\avmjpostlog\rbrack}%
+\fi\fi
+%
+\def\<{$\langle$}\def\>{$\rangle$}%
+\def\({\lparen}\def\){\rparen}%
+\def\[{\lbrack}\def\]{\rbrack}%
+\def|{$\,\vert\,$}%
+\def@##1{\avmbox{##1}}%
+} % end defn of \specialavm
+} % restore active catcodes
+
+
+\long\def\avm{\begingroup
+\ifavmactive\specialavm
+\else
+\def\({\avmjprolog(}%
+\def\){\avmjpostlog)}%
+\def\<{\avmjprolog\langle}%
+\def\>{\avmjpostlog\rangle}%
+%
+\ifavmsorted
+\def\[##1{\setbox\avmboxthree=\hbox{\avmjsortfont##1\/}\setbox
+ 2=\hbox\bgroup\avmjprolog[}%
+\def\]{\avmjpostlog]\egroup\avmjsort}%
+\else\ifavmlabeled
+\def\[##1{\def\more{##1}\setbox2=\hbox\bgroup\avmjprolog[}%
+\def\]{\avmjpostlog]\egroup\node{\more}{\box2}}%
+\else
+\def\[{\avmjprolog[}%
+\def\]{\avmjpostlog]}%
+\fi\fi
+%
+\def\|{$\,\vert\,$}%
+\def\@##1{\avmbox{##1}}%
+\fi % end not active
+%
+\ifx\LaTeX\undefined\def\\{\cr}% running under TeX
+\else \def\\{\@tabularcr}% Leverage off LaTeX's \\*[dimen] options
+\fi
+\def\!{\node}%
+\long\def\avmjsort{\dimen2=\ht2\advance\dimen2 by -.25\baselineskip
+ \global\dimen\avmdimen=\wd\avmboxthree
+ \ifavmtopleft \raise\dimen2\llap{\box\avmboxthree}\box2%
+ \else\ifavmtopright \box2\raise\dimen2\box\avmboxthree%
+ \else\ifavmbottomright \box2\lower\dimen2\box\avmboxthree%
+ \else \lower\dimen2\llap{\box\avmboxthree}\box2%
+ \fi\fi\fi}%
+\long\def\sort##1##2{\setbox2=\hbox{##2}\setbox
+ \avmboxthree=\hbox{\avmjsortfont##1\/}\dimen2=\ht2
+ \advance\dimen2 by -.25\baselineskip
+ \ifavmtopleft \raise\dimen2\box\avmboxthree\box2%
+ \else\ifavmtopright \box2\raise\dimen2\box\avmboxthree%
+ \else\ifavmbottomright \box2\lower\dimen2\box\avmboxthree%
+ \else \lower\dimen2\box\avmboxthree\box2%
+ \fi\fi\fi}%
+\long\def\osort##1##2{\setbox2=\hbox{##2}\setbox
+ \avmboxthree=\hbox{\avmjsortfont ##1\/}\avmjsort}%
+\def\avml{\avmjprolog.}%
+\def\avmr{\avmjpostlog.}%
+\def\avmb##1{\node{##1}{\lbrack\;\rbrack}}%
+\def\avmd##1{\node{##1}{---}}%
+\def\q##1{\ifx ##1\{$\lbrace$\else
+ \ifx ##1\}$\rbrace$\else
+ \ifx ##1<$\langle$\else
+ \ifx ##1>$\rangle$\fi \fi \fi \fi}%
+\def\{{\avmjprolog\lbrace}%
+\def\}{\avmjpostlog\rbrace}%
+\def\;{\hskip\avmjhskip}%
+\def\avmspan##1{\multispan2\strut ##1\expandafter\hfil}%
+\avmjfont
+\openup\avmjvskip
+\setbox\avmboxone=\hbox\bgroup\ignorespaces
+} % end defn of \avm
+
+
+\def\endavm{\egroup\ifvmode\leavevmode\fi % this if is useful!
+ \ifavmsorted\null\hskip\dimen\avmdimen\fi
+ \ifavmcenter
+ \box\avmboxone
+ \else \ifavmbottom
+ \lower.575\baselineskip\hbox{\vbox{\box\avmboxone\null}}%
+ \else
+% the next bit is ripped off from Emma's \evnup in lingmacros.sty
+ \dimen2=\ht\avmboxone\advance\dimen2 by -.725\baselineskip
+ \lower\dimen2\box\avmboxone
+\fi \fi \endgroup}
+
+
+% based on TeXbook exercise 21.3
+\def\avmbox#1{\setbox2=\hbox{$\scriptstyle #1$}\lower.2ex\vbox{\hrule
+ \hbox{\vrule\kern1.25pt
+ \vbox{\kern1.25pt\box2\kern1.25pt}\kern1.25pt\vrule}\hrule}}
diff --git a/macros/latex209/contrib/trees/tree-dvips/lingmacros-manual.pdf b/macros/latex209/contrib/trees/tree-dvips/lingmacros-manual.pdf
new file mode 100644
index 0000000000..3f77416afa
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/lingmacros-manual.pdf
Binary files differ
diff --git a/macros/latex209/contrib/trees/tree-dvips/lingmacros-manual.tex b/macros/latex209/contrib/trees/tree-dvips/lingmacros-manual.tex
new file mode 100644
index 0000000000..23b0c84d50
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/lingmacros-manual.tex
@@ -0,0 +1,124 @@
+\documentstyle[lingmacros]{article}
+
+\title{Linguistic Macros}
+\author{Emma Pease}
+\date{May 10,1995}
+
+\begin{document}
+
+\maketitle
+
+The lingmacros file contains a few macros that may be of use to
+linguists. The major commands are
+\begin{enumerate}
+\item The enumsentence macros for creating example sentences
+\begin{center}
+\begin{verbatim}
+\enumsentence[label]{sentence}
+\eenumsentence[label]{\item[label] sentence 1
+ \item[label] sentence 2}
+\end{verbatim}
+\end{center}
+ The enumsentence macros are similar to the math equation environment
+except that they take regular text. The \verb+\label+ command can be
+used inside of them.\footnote{The enumsentence macros use the counter,
+enums. For more information read the style file.} Inside of the
+eenumsentence either the \verb+\toplabel+ command for the sentence
+number only or the \verb+\label+ for sentence number and sublabel.
+Also defined is
+\verb+\ex{number}+ which gives a relative reference. \verb+(\ex{1})+
+or \verb+(\ref{senta})+ give the number of the next enumsentence (\ex{1})
+or (\ref{senta}); \verb+(\ex{2})+ or \verb+(\ref{sentb})+ of the second
+succeeding enumsentence (\ex{2}) or (\ref{sentb}).
+\verb+(\ref{sentbb})+ will give (\ref{sentbb}).
+ \enumsentence{This is the first sentence\label{senta}}
+\eenumsentence{\item this is a second sentence \toplabel{sentb}
+ \item this is a third sentence\label{sentbb}}
+\begin{center}
+\begin{verbatim}
+\enumsentence{This is the first sentence\label{senta}}
+\eenumsentence{\item this is a second sentence \toplabel{sentb}
+ \item this is a third sentence\label{sentbb}}
+\end{verbatim}
+\end{center}
+
+
+\item The tree macros
+\begin{center}
+\begin{verbatim}
+\smalltree{alignment structure}
+\modsmalltree{number of columns}{alignment structure}
+\end{verbatim}
+\end{center}
+\verb+\smalltree+ is based on the tabular environment with a large
+baselineskip. A simple example should suffice.
+\enumsentence{\smalltree{& &a\\
+ &b& &c\\
+ d& &e& &f}}
+\begin{center}
+\begin{verbatim}
+\enumsentence{\smalltree{& &a\\
+ &b& &c\\
+ d& &e& &f}}
+\end{verbatim}
+\end{center}
+\verb+\modsmalltree+ sometime works better.
+\enumsentence{\modsmalltree{5}{& &a\\
+ &b& \mc{3}{this is long}\\
+ d& &e& &f}}
+\begin{center}
+\begin{verbatim}
+\enumsentence{\modsmalltree{5}{& &a\\
+ &b& \mc{3}{this is long}\\
+ d& &e& &f}}
+\end{verbatim}
+\end{center}
+ Note the use of the \verb+\mc{number of columns}{text}+ to span
+several columns. The \verb+\clap{text}+ might also be useful; it is
+similar to the \verb+\rlap+ and \verb+\llap+ commands and produces a
+centered hbox of zero width. Lines need to be drawn in by hand or one
+can use the tree-dvips macros.
+
+\item The gloss macros
+\begin{center}
+\begin{verbatim}
+\shortex{number of columns}{first line}{second line}{gloss}
+\shortexnt{number of columns}{first line}{second line}
+\end{verbatim}
+\end{center}
+These can be combined to produce most of the glosses that linguists
+should need.
+\enumsentence{\shortex{6}{Was & ist & dem & Kind & geschenkt&worden?}
+ {What& is & the & child& given &been?}
+ {What has been given to the child?}
+ \item \shortexnt{7}
+{Das & Fin\'anzamt & hat & ihn & geschnappt &(und & nicht}
+{the &finance authority & has & him & caught &(and &not}
+
+\shortex{2}{die &Polizei).}
+ {the &police).}
+ {It was the IRS that caught him (and not the police).}}
+\begin{center}
+\begin{verbatim}
+\enumsentence{\shortex{6}{Was & ist & dem & Kind & geschenkt&worden?}
+ {What& is & the & child& given &been?}
+ {What has been given to the child?}}
+ \item \shortexnt{7}
+{Das & Fin\'anzamt & hat & ihn & geschnappt &(und & nicht}
+{the &finance authority & has & him & caught &(and &not}
+
+\shortex{2}{die &Polizei).}
+ {the &police)}
+ {It was the IRS that caught him (and not the police).}}
+\end{verbatim}
+\end{center}
+Unfortunately, I've not figured out a fullproof method of breaking
+the glosses automatically so they have to be done by hand.
+
+\item AVM structures: These exist within lingmacros but Chris
+Manning's AVM macro package is better.
+
+
+\end{enumerate}
+\end{document}
+
diff --git a/macros/latex209/contrib/trees/tree-dvips/lingmacros.sty b/macros/latex209/contrib/trees/tree-dvips/lingmacros.sty
new file mode 100644
index 0000000000..829effe52c
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/lingmacros.sty
@@ -0,0 +1,312 @@
+% Lingmacros
+% include
+% \enumsentence, \eenumsentence, \ex
+% \smalltree
+% \shortex, \shortexnt (\shortexdt no longer needed)
+% \clap, \ollap, \orlap, \oclap on analogy with \rlap and \llap
+% \outerfs
+
+% this file created 1/23/89 by Emma Pease, CSLI
+% modified 4/1/91 by Emma Pease
+% some comments added 8/25/94 by Emma Pease
+
+%Note (for those who use jbmacros):
+% (a) the enumsentence macro is very similar to the \example command
+% in jbmacros; however, it does not have the annoying habit of leaving
+% the example number on one page and the example on the next (some
+% jbmacros don't have this problem). The eenumsentence macro is very
+% similar to the \examples macro.
+% (b) \ex may be different
+
+% the enumsentence macro.
+%
+% \enumsentence{This is an example}
+% produces
+% (1) This is an example
+% while
+% \enumsentence[(a)]{This is another example}
+% produces
+% (a) This is another example
+%
+% A related macros is
+% \eenumsentence{\item[a.] A third example
+% \item[b.] A fourth example}
+% which produces
+% (2) a. A third example
+% b. A fourth example
+%
+% other macro is \ex{1} which produces the number of the following
+% enumsentence (\ex{0} produces number of preceeding enumsentence and
+% so on.)
+%
+% The standard \label command also works within \enumsentence and
+% \eenumsentence.
+%
+% the \enumsentence counter.
+\newcounter{enums}
+
+% Use the command
+%
+% \@addtoreset{enums}{chapter}
+%
+% if you wish it to automatically reset counting at the start of each chapter.
+% Since this is a \@ command you will need to surround it by
+% \makeatletter ... \makeatother
+% if it is in your document proper instead of a style file
+% do not use these commands if the \@addtoreset is in a style file or
+% things will break.
+
+
+% \widelabel is defined for use when the width of the enumsentence or
+% eenumsentence number is wider than 20pt (default labelwidth). As a
+% rule of thumb if your enumerated sentences are only 1 or 2 digit
+% you don't need to worry. At 3 digits, set \widelabel to 2.78pt at 4
+% digits set to 7.78pt.
+
+\newdimen\widelabel
+\widelabel=0pt
+
+
+\def\enumsentence{\@ifnextchar[{\@enumsentence}% %]
+{\refstepcounter{enums}\@enumsentence[(\theenums)]}}
+
+\long\def\@enumsentence[#1]#2{\begin{list}{}{%
+\advance\leftmargin by\widelabel \advance\labelwidth by \widelabel}
+\item[#1] #2
+\end{list}}
+
+% The \ex definition
+\newcounter{tempcnt}
+
+\newcommand{\ex}[1]{\setcounter{tempcnt}{\value{enums}}%
+\addtocounter{tempcnt}{#1}%
+\arabic{tempcnt}}
+
+% modified \@item command \unhbox\@tempboxa replaces \makelabel{#1}
+% Used to get \eenumsentence to work correctly
+\def\@item[#1]{\if@noparitem \@donoparitem
+ \else \if@inlabel \indent \par \fi
+ \ifhmode \unskip\unskip \par \fi
+ \if@newlist \if@nobreak \@nbitem \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep \addvspace{-\parskip}\fi
+ \else \addpenalty\@itempenalty \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+\fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+ \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+ \penalty\z@ \fi
+ \everypar{}}\global\@nobreakfalse
+\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+\setbox\@tempboxa\hbox{\makelabel{#1}}%
+\global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+ \hskip -\labelwidth \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else \hbox to\labelwidth {\unhbox\@tempboxa}\fi
+ \hskip \labelsep}\ignorespaces}
+
+% for enumerated enumsentences. Internal enumeration is alpha if not
+% otherwise defined.
+
+% counter for items within \eenumsentence. (might use enumi instead?)
+\newcounter{enumsi}
+
+% \eenumsentence{\item[a.] A third \label{bar}example \toplabel{foo}
+% \item[b.] A fourth \label{baz}example}
+% Testing references \ref{foo}, \ref{bar}, and \ref{baz}.
+% which produces
+% (3) a. A third example
+% b. A fourth example
+% Testing references 3, 3a, and 3b.
+
+% To ensure that labels in \eenumsentence come out right.
+%
+\def\theenumsi{\theenums\alph{enumsi}}
+\newdimen\eeindent
+\eeindent=15pt
+% changes \leftmargin increased by \eeindent
+% \labelwidth increased by \eeindent
+% .. .. .leftmargin.. .. .. .. ..
+% oldlabelwidth eeindent labelsep actual entry
+% 20pt 15pt 5pt
+% (enumlabel) eelabel
+% eelabel
+
+\def\@mklab#1{\hfil#1}
+\def\enummklab#1{\hfil(\eelabel)\hbox to \eeindent{\hfil#1}}
+\def\enummakelabel#1{\enummklab{#1}\global\let\makelabel=\@mklab}
+\def\toplabel#1{{\edef\@currentlabel{\p@enums\theenums}\label{#1}}}
+
+\def\eenumsentence{\@ifnextchar[{\@eenumsentence}% %]
+{\refstepcounter{enums}\@eenumsentence[\theenums]}}
+
+\long\def\@eenumsentence[#1]#2{\def\eelabel{#1}\let\holdlabel\makelabel%
+\begin{list}{\alph{enumsi}.}{\usecounter{enumsi}%
+\advance\leftmargin by \eeindent \advance\leftmargin by \widelabel%
+\advance\labelwidth by \eeindent \advance\labelwidth by \widelabel%
+\let\makelabel=\enummakelabel}
+#2
+\end{list}\let\makelabel\holdlabel}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% smalltree
+% use
+% \smalltree{& &a\\
+% &b& &c\\
+% d& &e& &f}
+% produces
+% a
+% b c
+% d e f
+
+
+\long\def\smalltree#1{\leavevmode{\def\\{\cr\noalign{\vskip12pt}}%
+\def\mc##1##2{\multispan{##1}{\hfil##2\hfil}}%
+\tabskip=1em%
+\hbox{\vtop{\halign{&\hfil##\hfil\cr
+#1\crcr}}}}}
+
+% modsmalltree
+% use
+% \modsmalltree{3}{&&a\\ &b&&c\\ d&&e&&f}
+% and produces the same output
+% \mc{n}{item} within either will produce item centered across n
+% number of columns
+% \modsmalltree[arraystretch]{num of cols}{argument}
+%
+\def\modsmalltree{\@ifnextchar[{\@modsmalltree}{\@modsmalltree[2]}}
+
+\long\def\@modsmalltree[#1]#2#3{{\def\mc##1##2{%
+\multicolumn{##1}{c}{\def\arraystretch{1}##2}}%
+\def\arraystretch{#1}%
+\def\ns{\def\arraystretch{1}}%
+\setbox0=\hbox{\begin{tabular}[t]{@{}*{#2}{c}@{}}
+#3
+\end{tabular}}%
+\dimen0=\ht0
+\advance\dimen0 by -\arraystretch \ht\strutbox
+\advance\dimen0 by \ht\strutbox
+\ht0=\dimen0
+\dimen0=\dp0
+\advance\dimen0 by -\arraystretch \dp\strutbox
+\advance\dimen0 by \dp\strutbox
+\dp0=\dimen0
+\leavevmode\box0}}
+
+% center lap creates a box of 0 width centered on the point
+\def\clap#1{\hbox to 0pt{\hss#1\hss}}
+%The first argument in both of these commands is the distance above the
+%baseline desired. The second is what is the actual text.
+% over right lap
+\def\orlap#1#2{\vbox to0pt{\vss\hbox to 0pt{#2\hss}\hbox{\vrule height#1
+width0pt depth0pt}}}
+% over left lap
+\def\ollap#1#2{\vbox to0pt{\vss\hbox to 0pt{\hss#2}\hbox{\vrule height#1
+width0pt depth0pt}}}
+% over center lap
+\def\oclap#1#2{\vbox to0pt{\vss\hbox to 0pt{\hss#2\hss}\hbox{\vrule height#1
+width0pt depth0pt}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% need to be modified?
+
+% Format
+% \shortex{4}{a & b & c & d}
+% {z & y & x & w}
+% {mnop}
+% produces
+% a b c d
+% z y x w
+% mnop
+%
+% \shortexdt takes two gloss lines
+% \shortexnt takes no gloss lines
+
+\def\shortex#1#2#3#4{\begin{tabular}[t]{@{}*{#1}{l@{\ }}}
+#2\\ #3\\ \multicolumn{#1}{@{}l@{}}{\parbox{\linewidth}{#4}}
+\end{tabular}}
+
+%\def\shortexdt#1#2#3#4#5{\begin{tabular}[t]{@{}*{#1}{l@{\ }}}
+%#2\\ #3\\ \multicolumn{#1}{@{}l@{}}{#4}\\
+%\multicolumn{#1}{@{}l@{}}{#5}
+%\end{tabular}}
+
+\def\shortexnt#1#2#3{\begin{tabular}[t]{@{}*{#1}{l@{\ }}}
+#2\\ #3
+\end{tabular}}
+
+%%%%%%%%%
+% Long-example macros
+%
+% \longex{4}{2}
+% {a & b & c & d}{e & f}
+% {z & y & x & w}{v & u}
+% {mnopqrs}
+% produces
+% a b c d
+% z y x w
+% e f
+% v u
+% mnopqrs
+%
+% \longexdt takes two translation lines
+% \longexnt takes no translation lines
+% \longex can also handle multiple translations, as can \shortex above.
+
+\def\longex#1#2#3#4#5#6#7{\begin{tabular}[t]{@{}l}
+ \begin{tabular}[t]{@{}*{#1}{l@{\ \ }}}
+ #3\\ #5 \end{tabular}\vspace{.5ex}\\
+ \begin{tabular}[t]{@{}*{#2}{l@{\ \ }}}
+ #4\\ #6\\[.5ex] \multicolumn{#2}{@{}l@{}}{\begin{tabular}[t]{@{}l@{}}
+ #7 \end{tabular}} \end{tabular} \end{tabular}}
+
+\def\longexdt#1#2#3#4#5#6#7#8{\begin{tabular}[t]{@{}l}
+ \begin{tabular}[t]{@{}*{#1}{l@{\ \ }}}
+ #3\\ #5 \end{tabular}\vspace{.5ex}\\
+ \begin{tabular}[t]{@{}*{#2}{l@{\ \ }}}
+ #4\\ #6\\[.5ex] \multicolumn{#2}{@{}l@{}}{#7}\\
+ \multicolumn{#2}{@{}l@{}}{#8}
+ \end{tabular} \end{tabular}}
+
+\def\longexnt#1#2#3#4#5#6{\begin{tabular}[t]{@{}l}
+ \begin{tabular}[t]{@{}*{#1}{l@{\ \ }}}
+ #3\\ #5 \end{tabular}\vspace{.5ex}\\
+ \begin{tabular}[t]{@{}*{#2}{l@{\ \ }}}
+ #4\\ #6 \end{tabular} \end{tabular}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% need to create equivalent of AVM structures.
+
+% Structure is
+% \outerfs{alpha & beta\\ gamma & delta}
+% produces
+% __ __
+% | alpha beta |
+% | gamma delta |
+% -- --
+%
+% \outerfs can be nested.
+% inside of enumsentence use with \evnup[2pt]{\outerfs{. . .}}
+% to ensure that top of fs structure lines up with the number
+%
+% Note that you can use \\[1ex] to increase the space between
+% individual lines
+
+\def\outerfs#1{$\left[\begin{tabular}{ll}#1\end{tabular}\right]$}
+
+% \evnup is used to line up the enumsentence number and an entry along
+% the top. It can take an argument to improve lining up.
+\def\evnup{\@ifnextchar[{\@evnup}{\@evnup[0pt]}}
+
+\def\@evnup[#1]#2{\setbox1=\hbox{#2}%
+\dimen1=\ht1 \advance\dimen1 by -.5\baselineskip%
+\advance\dimen1 by -#1%
+\leavevmode\lower\dimen1\box1}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% End of main lingmacros
+%
diff --git a/macros/latex209/contrib/trees/tree-dvips/tree-dvips.sty b/macros/latex209/contrib/trees/tree-dvips/tree-dvips.sty
new file mode 100644
index 0000000000..31218352a8
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/tree-dvips.sty
@@ -0,0 +1,271 @@
+% how to run.
+% \input tree.sty or \documentstyle[tree]{..}
+% run through latex as you normally do
+% remember to send it to a postscript printer
+
+% Written by Emma Pease
+% Modified by Avery Andrews May 1992
+% Modifications suggested by Gintautas Grigelionis
+% (gintas@theophys.kth.se) added May 1995
+% arrows fixed on anodeconnect and aanodeconnect added May 1995 by Emma
+
+% to do, fix barnodeconnect arrows
+% clean up code
+
+%% version .91 - May 16, 1995
+\typeout{tree-dvips version .91 of May 16, 1995}
+
+% This ensures that the header file for postscript is inserted. Note
+% that extracting pages with dvips will keep this header file but that
+% extracting with dviselect will not unless the absolute first page is
+% included.
+\special{header=tree-dvips91.pro}
+
+
+% The \pscmd command insures that all things in the postscript are
+% properly bracketed. Also included are the current parameters for
+% nodemargin, width of lines, dashlength, arrow width, length, and inset.
+
+\def\pscmd#1{\special{ps:@beginspec%
+/nodemargin \@int{\the\nodemargin}\space pt def %
+\@int{\the\treelinewidth}\space pt setlinewidth %
+\ifdim\dashlength=0pt [] 0 setdash%
+/arrowwidth \@int{\the\arrowwidth}\space pt def %
+/arrowlength \@int{\the\arrowlength}\space pt def %
+/arrowinset \@int{\the\arrowinset}\space pt def %
+\else [\@int{\the\dashlength}\space pt] 0 setdash \fi\space #1 %
+@endspec}}
+
+% \@int ensures that the numbers are passed down to the printer
+% correctly.
+{\catcode`p=12 \catcode`t=12 \gdef\wnum#1pt{#1}}
+\def\@int#1{\expandafter\wnum#1}
+
+
+% PARAMETERS IN TREE MODE
+
+% nodemargin is the extra margin around the hbox enclosing the node.
+% treelinewidth is the width of the lines
+% dashlength is the length of the dashes
+
+\newdimen\nodemargin %
+\nodemargin=2pt
+
+\newdimen\treelinewidth
+\treelinewidth=.3pt
+
+\newdimen\dashlength
+\dashlength=0pt
+
+% * _
+% *
+% * * arrowwidth
+% *
+% * _
+% | | arrowlength
+% | | arrowinset
+
+% arrowwidth
+
+\newdimen\arrowwidth
+\arrowwidth 3pt
+
+\newdimen\arrowlength
+\arrowlength 4pt
+
+\newdimen\arrowinset
+\arrowinset 1pt
+
+% Some commands to manipulate parameters
+
+\def\thinline{\treelinewidth=.3pt}
+
+% \makedash{dimen} makes dashes of dimen length if dimen = 0pt then
+% solid line
+\def\makedash#1{\dashlength=#1}
+
+\def\arrowhead#1#2#3{\arrowwidth#1\arrowlength#2\arrowinset#3}
+
+
+% NODE COMMANDS
+
+% A node defines a region of the page with a height, depth, width, and
+% location of the lower left hand corner
+
+\def\node#1#2{\leavevmode
+ \setbox1=\hbox{#2}\pscmd{/#1 \@int{\the\wd1} \space pt
+ \@int{\the\ht1} \space pt
+ \@int{\the\dp1} \space pt
+ node}\box1\relax}
+
+
+% nodepoint is a specialized node with 0pt width, height, and depth
+% Unlike \node is can be displaced.
+% \nodepoint{nodename}[horizontal displacement][vertical displacement]
+% default is current point
+\def\nodepoint#1{\@ifnextchar [{\@nodepoint{#1}}{\@nodepoint{#1}[0pt][0pt]}}
+
+\def\@nodepoint#1[#2][#3]{{\@tempdima=#2 \@tempdimb=#3%
+\pscmd{/nodemargin 0 def %
+/#1 \@int{\the\@tempdima}\space pt \@int{\the\@tempdimb}\space pt %
+rmoveto 0 0 0 node}}}
+
+
+
+
+\newtoks\pos@t \pos@t={top}
+\newtoks\pos@b \pos@b={bottom}
+\newtoks\pos@l \pos@l={left}
+\newtoks\pos@r \pos@r={right}
+\newtoks\pos@tl \pos@tl={topleft}
+\newtoks\pos@tr \pos@tr={topright}
+\newtoks\pos@bl \pos@bl={bottomleft}
+\newtoks\pos@br \pos@br={bottomright}
+
+
+% COMMANDS FOR CONNECTING NODES
+
+% nodeconnect commands
+% \nodeconnect
+% \anodeconnect - arrow at toloc
+% \aanodeconnect - arrow at both ends
+% arguments are [fromloc]{fromnode}[toloc]{tonode}
+
+% \nodeconnect[fromloc]{fromnode}[toloc]{tonode}
+\def\nodeconnect{\@ifnextchar [{\@nodeconnect}{\@nodeconnect[b]}}
+\def\@nodeconnect[#1]#2{\@ifnextchar [{\@@nodeconnect[#1]{#2}}{\@@nodeconnect[#1]{#2}[t]}}
+
+\def\@@nodeconnect[#1]#2[#3]#4{\pscmd{%
+/#2 getnode node\the\csname pos@#1\endcsname \space%
+/#4 getnode node\the\csname pos@#3\endcsname\space nodeconnect}}
+
+% \delink[fromloc]{fromnode}[toloc]{tonode}{length}
+% places a bar of length perpendicular to and halfway along the line
+% connecting the two locations.
+\def\delink{\@ifnextchar [{\@delink}{\@delink[b]}}
+\def\@delink[#1]#2{\@ifnextchar [{\@@delink[#1]{#2}}{\@@delink[#1]{#2}[t]}}
+
+\def\@@delink[#1]#2[#3]#4#5{\@tempdima=#5%
+\pscmd{/blong \@int{\the\@tempdima} \space pt def%
+/#2 getnode node\the\csname pos@#1\endcsname \space%
+/#4 getnode node\the\csname pos@#3\endcsname\space delink}}
+
+
+% \anodeconnect[fromloc]{fromnode}[toloc]{tonode}
+% The tonode has an arrow pointing to it
+\def\anodeconnect{\@ifnextchar [{\@anodeconnect}{\@anodeconnect[b]}}
+\def\@anodeconnect[#1]#2{\@ifnextchar [{\@@anodeconnect[#1]{#2}}{\@@anodeconnect[#1]{#2}[t]}}
+
+\def\@@anodeconnect[#1]#2[#3]#4{\pscmd{%
+/#2 getnode node\the\csname pos@#1\endcsname \space%
+/#4 getnode node\the\csname pos@#3\endcsname\space arrownodeconnect}}
+
+% \aanodeconnect[fromloc]{fromnode}[toloc]{tonode}
+% double arrowed line
+\def\aanodeconnect{\@ifnextchar [{\@aanodeconnect}{\@aanodeconnect[b]}}
+\def\@aanodeconnect[#1]#2{\@ifnextchar [{\@@aanodeconnect[#1]{#2}}{\@@aanodeconnect[#1]{#2}[t]}}
+
+\def\@@aanodeconnect[#1]#2[#3]#4{\pscmd{%
+/#2 getnode node\the\csname pos@#1\endcsname \space%
+/#4 getnode node\the\csname pos@#3\endcsname\space doublearrownodeconnect}}
+
+
+% nodecurve commands
+% nodecurve... no arrow
+% anodecurve.. arrow at to
+% aanodecurve.. arrows at to and from
+% arguments:
+% \..[fromloc][fromang]{fromnode}[toloc][toang]{tonode}{fdepth}[tdepth]
+% defaults
+% fromloc [b]
+% toloc [t]
+% fromang 0 (in degrees) direction is calculated counterclockwise
+% toang 0 (in degrees) direction is calculated counterclockwise
+% tdepth same as fdepth
+
+
+% nodecurve commands set value of \@arrow, then invoke \nodecurve@
+
+\newcount\@arrow
+\newdimen\@tempdimc
+
+\def\nodecurve{\@arrow=0\nodecurve@}
+\def\anodecurve{\@arrow=1\nodecurve@}
+\def\aanodecurve{\@arrow=2\nodecurve@}
+\def\delinkcurve#1{\@tempdimc=#1%
+\@arrow=3\nodecurve@}
+
+\def\nodecurve@{\@ifnextchar [{\@nodecurve@}{\@nodecurve@[b]}}
+
+\def\@nodecurve@[#1]{\@ifnextchar [{\a@nodecurve@[#1]}{\a@nodecurve@[#1][0]}}
+
+\def\a@nodecurve@[#1][#2]#3{\@ifnextchar [{\@a@nodecurve@[#1][#2]{#3}}%
+{\@a@nodecurve@[#1][#2]{#3}[t]}}
+
+\def\@a@nodecurve@[#1][#2]#3[#4]{\@ifnextchar [{\a@a@nodecurve@[#1][#2]#3[#4]}%
+{\a@a@nodecurve@[#1][#2]#3[#4][0]}}
+
+\def\a@a@nodecurve@[#1][#2]#3[#4][#5]#6#7{\@ifnextchar [%
+{\@a@a@nodecurve@[#1][#2]{#3}[#4][#5]{#6}{#7}}%
+{\@a@a@nodecurve@[#1][#2]{#3}[#4][#5]{#6}{#7}[#7]}}
+
+\def\@a@a@nodecurve@[#1][#2]#3[#4][#5]#6#7[#8]{\@tempdima=#7%
+\@tempdimb=#8%
+\@tempdimc=10pt%
+\pscmd{/depth \@int{\the\@tempdimb} \space pt def %
+ /toangle \space #5 \space def %
+ /fromangle \space #2 \space def %
+ /#6 \the\csname pos@#4\endcsname cur\space %
+ /depth \@int{\the\@tempdima} \space pt def %
+ /#3 \the\csname pos@#1\endcsname cur\space %
+ \ifnum\@arrow=0 nodecurve \else % select & invoke PS command
+ \ifnum\@arrow=1 arrownodecurve \else
+ \ifnum\@arrow=2 arrow2nodecurve \else
+ /blong \@int{\the\@tempdimc} \space pt def
+ delinkcurve
+ \fi\fi\fi}}
+
+
+
+% above is well tested below is not
+\newif\iftransparent
+
+\def\nodebox#1{\pscmd{/#1 nodebox}}
+\def\nodeoval#1{\pscmd{/#1 nodeoval}}
+\def\nodetriangle#1#2{\pscmd{/#1 /#2 nodetriangle}}
+
+% \nodecircle[depth]{nodename}
+
+\def\nodecircle{\@ifnextchar [ {\@nodecircle}{\@nodecircle[0pt]}}
+
+\def\@nodecircle[#1]#2{\@tempdima=#1%
+\iftransparent
+\pscmd{\@int{\the\@tempdima}\space pt /#2 nodecircletrans}
+\else
+\pscmd{\@int{\the\@tempdima}\space pt /#2 nodecircle}\fi}
+
+
+% \barnodeconnect[depth]{fromnode}{tonode}
+\def\barnodeconnect{\@ifnextchar[ {\@barnodeconnect}{\@barnodeconnect[5pt]}}
+
+\def\@barnodeconnect[#1]#2#3{\@tempdima=#1 \ifdim\@tempdima<0pt
+\pscmd{\@int{\the\@tempdima}\space pt %
+/#2 getnode nodebottom /#3 getnode nodebottom barnodeconnect}
+\else
+\pscmd{\@int{\the\@tempdima}\space pt %
+/#2 getnode nodetop /#3 getnode nodetop barnodeconnect}
+\fi}
+
+\def\abarnodeconnect{\@ifnextchar[ {\@abarnodeconnect}{\@abarnodeconnect[5pt]}}
+
+\def\@abarnodeconnect[#1]#2#3{\@tempdima=#1 \ifdim\@tempdima<0pt
+\pscmd{\@int{\the\@tempdima}\space pt %
+/#2 getnode nodebottom /#3 getnode nodebottom arrowbarnodeconnect}
+% above replaces the line below.
+% /#2 getnode nodebottom /#3 getnode nodebottom abarnodeconnect}
+\else
+\pscmd{\@int{\the\@tempdima}\space pt %
+/#2 getnode nodetop /#3 getnode nodetop arrowbarnodeconnect}
+\fi}
+
+
diff --git a/macros/latex209/contrib/trees/tree-dvips/tree-dvips91.pro b/macros/latex209/contrib/trees/tree-dvips/tree-dvips91.pro
new file mode 100644
index 0000000000..3ecf33fbd9
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/tree-dvips91.pro
@@ -0,0 +1,110 @@
+%!
+TeXDict begin /@beginspec{gsave Resolution 72 div VResolution -72 div scale
+treedict begin}def /@endspec{end grestore}def /treedict 200 dict def treedict
+begin /pt{72 mul 72.07 div}def /nodemargin 2 def /nodes 100 dict def /node{
+/dpth exch def /hght exch def /wdth exch def 4 dict dup begin /x /y
+currentpoint dpth sub nodemargin sub exch 3 1 roll def nodemargin sub def /h
+hght dpth add nodemargin dup add add def /w wdth nodemargin dup add add def
+end nodes 3 1 roll put}def /nodebottom{begin x w 2 div add y end}def /nodetop{
+begin x w 2 div add y h add end}def /nodeleft{begin x y h 2 div add end}def
+/noderight{begin x w add y h 2 div add end}def /nodetopleft{begin x y h add
+end}def /nodetopright{begin x w add y h add end}def /nodebottomleft{begin x y
+end}def /nodebottomright{begin x w add y end}def /farright{begin x w add depth
+add h 2 div y add end}def /farleft{begin x depth sub h 2 div y add end}def
+/farbottom{begin x w 2 div add y depth sub end}def /fartop{begin x w 2 div add
+y h add depth add end}def /farbottomleft{begin x depth 45 cos mul sub y depth
+45 sin mul sub end}def /farbottomright{begin x w add depth 45 cos mul add y
+depth 45 sin mul sub end}def /fartopright{begin x w add depth 45 cos mul add y
+h add depth 45 sin mul add end}def /fartopleft{begin x depth 45 cos mul sub y
+h add depth 45 sin mul add end}def /alignpoint{2 copy sub abs 1 le{add 2 div
+round dup}if}def /getnode{nodes exch get}def /nodeconnect{gsave transform 4 2
+roll transform exch 4 1 roll alignpoint 4 2 roll alignpoint 4 1 roll exch
+itransform moveto itransform lineto stroke grestore}def /arrowdict 15 dict def
+arrowdict begin /mtrx matrix def end /arrow{arrowdict begin /insetlength exch
+def /headlength exch def /halfheadthickness exch 2 div def /tipy exch def
+/tipx exch def /taily exch def /tailx exch def /dx tipx tailx sub def /dy tipy
+taily sub def /angle dy dx atan def /savematrix mtrx currentmatrix def tipx
+tipy translate angle rotate 0 0 moveto headlength neg halfheadthickness neg
+lineto headlength insetlength sub neg 0 lineto headlength neg
+halfheadthickness lineto closepath fill savematrix setmatrix end}def
+/arrowfill{gsave newpath arrowwidth arrowlength arrowinset arrow grestore}def
+/arrowline{arrowdict begin gsave newpath /tipfix exch def /tailfix exch def
+/tipy exch def /tipx exch def /taily exch def /tailx exch def /dx tipx tailx
+sub def /dy tipy taily sub def /angle dy dx atan def /savematrix mtrx
+currentmatrix def tipx tipy translate angle rotate tipfix neg 0 moveto
+savematrix setmatrix /savematrix mtrx currentmatrix def tailx taily translate
+angle rotate tailfix 0 lineto savematrix setmatrix stroke grestore end}def
+/arrownodeconnect{gsave transform 4 2 roll transform exch 4 1 roll alignpoint
+4 2 roll alignpoint 4 1 roll exch itransform 4 2 roll itransform 4 copy 0
+arrowdict begin arrowlength arrowinset sub end arrowline gsave newpath
+arrowfill grestore grestore}def /doublearrownodeconnect{gsave transform 4 2
+roll transform exch 4 1 roll alignpoint 4 2 roll alignpoint 4 1 roll exch
+itransform 4 2 roll itransform 4 copy arrowdict begin arrowlength arrowinset
+sub end dup arrowline 4 copy gsave newpath arrowfill grestore gsave newpath 4
+2 roll arrowfill grestore grestore}def /barnodeconnect{4 2 roll 2 copy moveto
+5 -1 roll add dup 3 1 roll lineto 2 index exch lineto lineto stroke}def
+/arrowbarnodeconnect{4 2 roll 2 copy moveto 5 -1 roll add dup 3 1 roll lineto
+2 index exch 4 copy lineto lineto gsave newpath 4 2 roll arrowfill fill
+grestore stroke}def /nodetriangle{gsave exch nodes exch get nodebottom moveto
+dup nodes exch get nodetopleft lineto nodes exch get nodetopright lineto
+closepath stroke grestore}def /slope{/y1 exch def /x1 exch def /y0 exch def
+/x0 exch def y1 y0 sub x1 x0 sub div}def /midpoint{/y1 exch def /x1 exch def
+/y0 exch def /x0 exch def x1 x0 sub abs x1 x0 ge{x0 add}{x1 add}ifelse y1 y0
+sub abs y1 y0 ge{y0 add}{y1 add}ifelse}def /tancurveto{1 index exch curveto}
+def /nodetancurve{/depth exch def /to exch def /from exch def gsave nodes from
+get noderight moveto nodes to get noderight tancurveto stroke grestore}def
+/getloc{3 -1 roll nodes exch get dup begin depth end 3 1 roll exch cvx exec 4
+2 roll}def /rightcur{0 /noderight getloc}def /leftcur{180 /nodeleft getloc}
+def /topcur{90 /nodetop getloc}def /bottomcur{270 /nodebottom getloc}def
+/topleftcur{135 /nodetopleft getloc}def /toprightcur{45 /nodetopright getloc}
+def /bottomleftcur{225 /nodebottomleft getloc}def /bottomrightcur{315
+/nodebottomright getloc}def /arrowfiddledict 10 dict def /arrowfiddle{
+arrowfiddledict begin /twist exch def /shift exch def /shaft exch def /angle
+exch twist add def /tipy exch def /tipx exch def tipx angle cos shaft mul add
+tipy angle sin shaft mul add tipx angle cos shift mul add tipy angle sin shift
+mul add end}def /nodecurve{gsave 0 fromangle arrowfiddle moveto 6 2 roll 0
+toangle arrowfiddle curveto stroke grestore}def /arrownodecurve{gsave 0
+fromangle arrowfiddle moveto 6 2 roll 4 copy 10 4 roll arrowlength arrowinset
+sub toangle arrowfiddle curveto 0 toangle arrowfiddle arrowfill stroke
+grestore}def /arrow2nodecurve{gsave 4 copy 0 fromangle arrowfiddle arrowfill
+arrowlength arrowinset sub fromangle arrowfiddle moveto 6 2 roll 4 copy 10 4
+roll arrowlength arrowinset sub toangle arrowfiddle curveto 0 toangle
+arrowfiddle arrowfill stroke grestore}def /delink{gsave 4 copy newslope 6 2
+roll newmidpoint delinkline}def /delinkline{moveto dup 0 eq{blong 2 div neg 0
+rmoveto blong 0 rlineto 2 pop}{exch dup 0 eq{0 blong 2 div neg rmoveto 0 blong
+rlineto 2 pop}{div neg dup dup mul 1 add sqrt blong exch div 2 copy mul 2 copy
+2 div neg exch 2 div neg exch rmoveto rlineto 1 pop}ifelse}ifelse stroke
+grestore}def /delinkcurve{8 copy 8 copy bezslope 10 2 roll bezmidpoint
+delinkline}def /xyarrange{exch 3 1 roll 5 -1 roll 7 -1 roll exch 4 2 roll}def
+/calcx{exch 3 mul 3 -1 roll 3 mul add add add 8 mul}def /calcy{add exch sub
+exch sub}def /bezmidpoint{xyarrange calcx 5 1 roll calcx exch}def /bezslope{
+xyarrange calcy 5 1 roll calcy exch}def /newmidpoint{exch 4 -1 roll add 2 div
+3 1 roll add 2 div}def /newslope{4 -1 roll exch 4 1 roll sub 3 1 roll sub exch
+}def /nodebox{nodes exch get begin gsave newpath x y moveto h w dobox cleanup
+stroke grestore end}def /nodecircle{nodes exch get begin gsave newpath w 2 div
+x add h 2 div y add w w mul h h mul add sqrt 2 div 4 -1 roll add 360 0 arcn
+cleanup stroke grestore end}def /nodecircletrans{nodes exch get begin gsave
+newpath w 2 div x add h 2 div y add w w mul h h mul add sqrt 2 div 4 -1 roll
+add 360 0 arcn stroke grestore end}def /nodeoval{nodes exch get begin gsave
+newpath x 2 sub y 2 sub moveto h 4 add w 4 add dooval cleanup stroke grestore
+end}def /testnodeoval{nodes exch get begin gsave newpath h h mul w w mul add
+sqrt div dup dup dup w mul neg x add exch h mul neg y add moveto dup h mul 2
+mul h add exch w mul 2 mul w add testdooval stroke grestore end}def /cleanup{
+gsave x y moveto h nodemargin sub .5 add w nodemargin sub .5 add doccbox 1
+setgray fill grestore}def /boxdict 4 dict def boxdict /mtrx matrix put /dobox{
+boxdict begin /w exch def /h exch def /savematrix mtrx currentmatrix def 0 h
+rlineto w 0 rlineto 0 h neg rlineto closepath savematrix setmatrix end}def
+/doccbox{boxdict begin /w exch def /h exch def /savematrix mtrx currentmatrix
+def w 0 rlineto 0 h rlineto w neg 0 rlineto closepath savematrix setmatrix end
+}def /ovaldict 6 dict def ovaldict /mtrx matrix put /dooval{ovaldict begin /w
+exch def /h exch def /savematrix mtrx currentmatrix def 0 h 2 div rmoveto 0 h
+2 div nodemargin sub nodemargin h 2 div w 2 div h 2 div rcurveto w 2 div
+nodemargin sub 0 w 2 div nodemargin neg w 2 div h 2 div neg rcurveto 0 h 2 div
+neg nodemargin add nodemargin neg h 2 div neg w 2 div neg h 2 div neg rcurveto
+w 2 div neg nodemargin add 0 w 2 div neg nodemargin w 2 div neg h 2 div
+rcurveto savematrix setmatrix end}def /testdooval{ovaldict begin /w exch def
+/h exch def /r exch def h 2 div neg r mul dup h 2 div dup r mul 3 1 roll 2 r
+sub mul 0 h rcurveto w 2 div dup r mul exch 2 r sub mul w 2 div r mul dup 3 1
+roll w 0 rcurveto h 2 div r mul dup h 2 div neg dup r mul 3 1 roll 2 r sub mul
+0 h neg rcurveto w 2 div neg dup r mul exch 2 r sub mul w 2 div neg r mul dup
+3 1 roll w neg 0 rcurveto end}def end end
diff --git a/macros/latex209/contrib/trees/tree-dvips/tree-dvips91.script b/macros/latex209/contrib/trees/tree-dvips/tree-dvips91.script
new file mode 100644
index 0000000000..cc0937f43c
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/tree-dvips91.script
@@ -0,0 +1,718 @@
+% grestore
+% special commands for setting up tree macros
+%% version .91 - May 16, 1995
+
+TeXDict begin
+
+% the commands needed to get any of this working. The first section
+% may need to be modified if different dvi to postscript programs are
+% used.
+
+% redefinition of /@beginspec suggested by Gintas Grigelionis
+% (gintas@theophys.kth.se) 5/95. also dropped bop_hook and texpsmatrix
+%
+% /@beginspec {gsave texpsmatrix setmatrix treedict begin} def
+/@beginspec {gsave
+ Resolution 72 div VResolution -72 div scale
+ treedict begin} def
+/@endspec {end grestore} def
+
+% for landscape Landscape=true, letter Landscape=false
+% In dvips 5.5 and later, the matrix in landscape was changed from
+% [0.0 -1.0 1.0 0.0 0.0 0.0] to the current setting of [0.0 1.0 -1.0
+% 0.0 0.0 0.0]. If you are using an earlier version, switch back.
+
+/treedict 200 dict def treedict begin
+
+% num pt num (converts a number in TeX pts (72.27 pts/in) to
+% postscript pts (72pts/in)
+/pt {72 mul 72.07 div} def
+
+% end of first section
+
+% definition of a node as a box containing the following information
+% The x y location of the lower left hand corner of the box
+% the height of the box (h)
+% the width of the box (w)
+% nodemargin is added to all sides to ensure a boundary around the box
+% str w h d node -
+% (nodemargin is defined in the TeX file)
+/nodemargin 2 def
+/nodes 100 dict def
+/node { /dpth exch def
+ /hght exch def
+ /wdth exch def
+ 4 dict dup begin
+ /x /y currentpoint
+ dpth sub nodemargin sub exch 3 1 roll def
+ nodemargin sub def
+ /h hght dpth add nodemargin dup add add def
+ /w wdth nodemargin dup add add def
+ end nodes 3 1 roll put} def
+
+
+% commands to find various locations around the nodebox
+%
+% nodetopleft nodetop nodetopright
+% *--------*--------*
+% | |
+% | |
+% nodeleft * (nodebox) * noderight
+% | |
+% | |
+% *--------*--------*
+% nodebotleft nodebottom nodebotright
+%
+
+
+% all of these take
+% dict nodebottom x1 y1 [dict has x y h w defined]
+/nodebottom {begin
+ x w 2 div add y
+ end} def
+/nodetop {begin
+ x w 2 div add y h add
+ end} def
+/nodeleft {begin
+ x y h 2 div add
+ end} def
+/noderight {begin
+ x w add y h 2 div add
+ end} def
+/nodetopleft {begin
+ x y h add
+ end} def
+/nodetopright {begin
+ x w add y h add
+ end} def
+/nodebottomleft {begin
+ x y
+ end} def
+/nodebottomright {begin
+ x w add y
+ end} def
+
+% some more locations of use
+/farright {begin
+ x w add depth add h 2 div y add
+ end} def
+
+/farleft {begin
+ x depth sub h 2 div y add
+ end} def
+
+/farbottom {begin
+ x w 2 div add y depth sub
+ end} def
+
+/fartop {begin
+ x w 2 div add y h add depth add
+ end} def
+
+/farbottomleft {begin
+ x depth 45 cos mul sub y depth 45 sin mul sub
+ end} def
+
+/farbottomright {begin
+ x w add depth 45 cos mul add y depth 45 sin mul sub
+ end} def
+
+/fartopright {begin
+ x w add depth 45 cos mul add y h add depth 45 sin mul add
+ end} def
+
+/fartopleft {begin
+ x depth 45 cos mul sub y h add depth 45 sin mul add
+ end} def
+
+
+% connects two nodes with a straight line
+% add location information (e.g., whether to go from
+% nodetop to nodeleft ...
+
+% nodename1 loc1 nodename2 loc2 nodeconnect -
+% e.g., a nodetop b nodebottom nodeconnect
+
+% to see if straight lines are indeed straight
+% x1 x2 alignpoint x1' x2' finds out if the two numbers are less than
+% one pixel apart if so make x1'=x2'
+
+/alignpoint {2 copy sub abs 1 le {add 2 div round dup} if} def
+
+% nodelocation nodename getnodepoint x y
+/getnode {nodes exch get} def
+
+% xfrom yfrom xto yto nodeconnect -
+/nodeconnect { gsave
+ transform 4 2 roll
+ transform
+ exch 4 1 roll alignpoint
+ 4 2 roll alignpoint
+ 4 1 roll exch
+ itransform moveto itransform lineto
+ stroke
+ grestore
+ } def
+
+% arrowheads
+% xtail ytail xtip ytip headthickness headlength insetlength arrow -
+
+/arrowdict 15 dict def
+
+arrowdict begin
+ /mtrx matrix def
+end
+
+/arrow {arrowdict begin
+ /insetlength exch def
+ /headlength exch def
+ /halfheadthickness exch 2 div def
+ /tipy exch def /tipx exch def
+ /taily exch def /tailx exch def
+
+ /dx tipx tailx sub def
+ /dy tipy taily sub def
+ /angle dy dx atan def
+
+ /savematrix mtrx currentmatrix def
+ tipx tipy translate
+ angle rotate
+% following is for arrow
+ 0 0 moveto
+ headlength neg halfheadthickness neg lineto
+ headlength insetlength sub neg 0 lineto
+ headlength neg halfheadthickness lineto
+ closepath
+ fill
+ savematrix setmatrix
+ end } def
+
+% does regular filled arrowhead
+/arrowfill {gsave
+ newpath
+ arrowwidth arrowlength arrowinset arrow
+ grestore} def
+
+% draws line for arrow but not arrow head(s)
+% xtail ytail xtip ytip tailfix tipfix arrowline
+/arrowline {arrowdict begin
+ gsave
+ newpath
+ /tipfix exch def
+ /tailfix exch def
+ /tipy exch def /tipx exch def
+ /taily exch def /tailx exch def
+
+ /dx tipx tailx sub def
+ /dy tipy taily sub def
+ /angle dy dx atan def
+
+ /savematrix mtrx currentmatrix def
+ tipx tipy translate
+ angle rotate
+ tipfix neg 0 moveto
+ savematrix setmatrix
+ /savematrix mtrx currentmatrix def
+ tailx taily translate
+ angle rotate
+ tailfix 0 lineto
+ savematrix setmatrix
+ stroke
+ grestore
+ end} def
+
+
+% xfrom yfrom xto yto testcmd -
+% arrownodeconnect
+/arrownodeconnect{ gsave
+ transform 4 2 roll
+ transform
+ exch 4 1 roll alignpoint
+ 4 2 roll alignpoint
+ 4 1 roll exch
+ itransform 4 2 roll itransform
+% line
+ 4 copy
+ 0 arrowdict begin arrowlength arrowinset sub end arrowline
+% arrow
+ gsave
+ newpath
+ arrowfill
+ grestore
+ grestore
+ } def
+
+
+/doublearrownodeconnect{ gsave
+ transform 4 2 roll
+ transform
+ exch 4 1 roll alignpoint
+ 4 2 roll alignpoint
+ 4 1 roll exch
+ itransform 4 2 roll itransform
+% line
+% 4 copy moveto lineto
+% stroke
+ 4 copy
+ arrowdict begin arrowlength arrowinset sub end dup arrowline
+ 4 copy
+% arrow at one end
+ gsave
+ newpath
+ arrowfill
+ grestore
+% arrow at other end
+ gsave
+ newpath
+ 4 2 roll arrowfill
+ grestore
+ grestore
+ } def
+
+
+% connecting with a bar like
+% _______________
+% | |
+% or like
+% _______________
+% | |
+% | node
+% node
+
+% depth fromnode fromloc tonode toloc
+% depth x1 y1 x2 y2 barnodeconnect -
+/barnodeconnect {4 2 roll
+ 2 copy moveto
+ 5 -1 roll add
+ dup 3 1 roll
+ lineto
+ 2 index exch
+ lineto lineto
+ stroke
+ } def
+
+/arrowbarnodeconnect {4 2 roll
+ 2 copy moveto
+ 5 -1 roll add
+ dup 3 1 roll
+ lineto
+ 2 index exch
+ 4 copy lineto lineto
+ gsave
+ newpath
+ 4 2 roll
+ arrowfill
+ fill
+ grestore
+ stroke
+ } def
+
+
+% Takes two nodes and forms a triangle
+% node1
+% /\
+% / \
+% ----
+% nodess
+%
+% fromnodename tonodename nodetriangle -
+/nodetriangle {
+ gsave
+ exch
+ nodes exch get nodebottom moveto
+ dup
+ nodes exch get nodetopleft lineto
+ nodes exch get nodetopright lineto
+ closepath
+ stroke
+ grestore } def
+
+
+% not sure what I am using the following for
+% x y x y slope num
+/slope {/y1 exch def
+ /x1 exch def
+ /y0 exch def
+ /x0 exch def
+ y1 y0 sub x1 x0 sub div
+ } def
+
+% x y x y midpoint x y
+/midpoint {/y1 exch def
+ /x1 exch def
+ /y0 exch def
+ /x0 exch def
+ x1 x0 sub abs
+ x1 x0 ge {x0 add} {x1 add} ifelse
+ y1 y0 sub abs
+ y1 y0 ge {y0 add} {y1 add} ifelse
+ } def
+
+
+% variant of curveto where x1 y1 = x2 y2
+/tancurveto {1 index exch
+ curveto} def
+
+/nodetancurve {/depth exch def
+ /to exch def
+ /from exch def
+ gsave
+ nodes from get noderight moveto
+
+ nodes to get noderight
+ tancurveto
+ stroke
+ grestore } def
+
+
+
+% the node curves draw curves between two points
+%
+% this swaps a dictionary around an angle, pulls out depth, & dismisses
+% the dictionary.
+% node locname farloc angle depth
+
+/getloc {3 -1 roll
+ nodes exch get dup
+ begin depth end
+ 3 1 roll
+ exch cvx exec
+ 4 2 roll} def
+
+% nodename rightcur x1 y1 x2 y2
+/rightcur {0 /noderight getloc} def
+/leftcur {180 /nodeleft getloc } def
+/topcur {90 /nodetop getloc} def
+/bottomcur {270 /nodebottom getloc} def
+/topleftcur {135 /nodetopleft getloc} def
+/toprightcur {45 /nodetopright getloc} def
+/bottomleftcur {225 /nodebottomleft getloc} def
+/bottomrightcur {315 /nodebottomright getloc} def
+
+% (depth predefined) x1 y1 x2 y2 x3 y3 x4 y4 nodecurve -
+% where nodename nodeposition produces x1 y1 x2 y2
+% where x1 y1 are the endpoint, x2 y2 end-control, etc.
+
+% adjustments for arrowheads, etc.
+/arrowfiddledict 10 dict def
+
+% x1 y1 angle depth shift twist arrowfiddle x3 y3 x4 y4
+% where x3 y3 are revised endpoint for arrow-headed bezier curves
+/arrowfiddle {arrowfiddledict begin
+ /twist exch def
+ /shift exch def
+ /shaft exch def
+ /angle exch twist add def
+ /tipy exch def /tipx exch def
+ tipx angle cos shaft mul add
+ tipy angle sin shaft mul add
+ tipx angle cos shift mul add
+ tipy angle sin shift mul add
+ end} def
+
+/nodecurve {gsave
+ 0 fromangle arrowfiddle moveto
+ 6 2 roll
+ 0 toangle arrowfiddle curveto
+ stroke
+ grestore} def
+
+/arrownodecurve {gsave
+ 0 fromangle arrowfiddle % adjust from angle
+ moveto
+ 6 2 roll
+ 4 copy 10 4 roll % prepare arrowhead material
+ arrowlength arrowinset sub %arrowfiddle param.
+ toangle % ditto
+ arrowfiddle
+ curveto
+ 0 toangle arrowfiddle arrowfill
+ stroke
+ grestore} def
+
+/arrow2nodecurve {gsave
+ 4 copy
+ 0 fromangle arrowfiddle arrowfill
+ arrowlength arrowinset sub fromangle arrowfiddle
+ moveto
+ 6 2 roll
+ 4 copy 10 4 roll % prepare arrowhead material
+ arrowlength arrowinset sub %arrowfiddle param.
+ toangle % ditto
+ arrowfiddle
+ curveto
+ 0 toangle arrowfiddle arrowfill
+ stroke
+ grestore} def
+
+
+% commands for doing things along line
+% blong (predefined) xfrom yfrom xto yto delink -
+% need to find halfway point
+/delink { gsave
+ 4 copy newslope
+ 6 2 roll newmidpoint
+ delinkline } def
+
+%% calculated (dx dy xmid ymid) now moveto midpoint
+% moveto dup 0 eq
+%% duplicate dy and check whether line is horizontal
+% {blong 2 div neg 0 rmoveto blong 0 rlineto 2 pop}
+%% line not horizontal so check whether vertical
+% {exch dup 0 eq
+% {0 blong 2 div neg rmoveto 0 blong rlineto 2 pop}
+%% If neither than calculate standard case (dy dx)
+% {div neg dup dup mul 1 add sqrt
+% blong exch div
+% 2 copy mul 2 copy 2 div neg exch 2 div neg exch
+% rmoveto rlineto 1 pop} ifelse} ifelse
+% stroke
+% grestore
+% } def
+
+% actually draws the line
+% dx dy xmid ymid delinkline -
+
+/delinkline { moveto dup 0 eq
+% duplicate dy and check whether line is horizontal
+ {blong 2 div neg 0 rmoveto blong 0 rlineto 2 pop}
+% line not horizontal so check whether vertical
+ {exch dup 0 eq
+ {0 blong 2 div neg rmoveto 0 blong rlineto 2 pop}
+% If neither than calculate standard case (dy dx)
+ {div neg dup dup mul 1 add sqrt
+ blong exch div
+ 2 copy mul 2 copy 2 div neg exch 2 div neg exch
+ rmoveto rlineto 1 pop} ifelse} ifelse
+ stroke
+ grestore
+ } def
+
+
+%
+% delink curve
+% blong (predefined) x0 y0 x1 y1 x2 y2 x3 y3 delinkcurve -
+
+/delinkcurve { 8 copy 8 copy
+ bezslope 10 2 roll % push to back
+ bezmidpoint
+ delinkline
+} def
+
+% x0 y0 x1 y1 x2 y2 x3 y3 xyarrange x0 x1 x2 x3 y0 y1 y2 y3
+ % x0 y0 x1 y1 x2 y2 x3 y3
+/xyarrange { exch % x0 y0 x1 y1 x2 y2 y3 x3
+ 3 1 roll % x0 y0 x1 y1 x2 x3 y2 y3
+ 5 -1 roll % x0 y0 x1 x2 x3 y2 y3 y1
+ 7 -1 roll % x0 x1 x2 x3 y2 y3 y1 y0
+ exch % x0 x1 x2 x3 y2 y3 y0 y1
+ 4 2 roll } def % x0 x1 x2 x3 y0 y1 y2 y3
+
+% x0 x1 x2 x3 calcx xn 8(x3+3x2+3x1+x0)=xn
+/calcx { exch 3 mul
+ 3 -1 roll 3 mul
+ add add add 8 mul} def
+
+% x0 x1 x2 x3 calcx xn x3+x2-x1-x0=xn
+/calcy { add exch sub exch sub } def
+
+
+% x0 y0 x1 y1 x2 y2 x3 y3 bezmidpoint xm ym
+% using the following equations
+% xb=8*(x3+3x2+3x1+x0)
+% yb=8*(y3+3y2+3y1+y0)
+
+/bezmidpoint {xyarrange
+calcx 5 1 roll calcx exch
+} def
+
+
+% x0 y0 x1 y1 x2 y2 x3 y3 bezslope dx dy
+% equations are dx=x3+x2-x1-x0
+% dy=y3+y2-y1-y0
+/bezslope {xyarrange
+calcy 5 1 roll calcy exch
+} def
+
+% finds midpoint between two points xfrom yfrom xto yto newmidpoint xmid ymid
+/newmidpoint { exch
+ 4 -1 roll
+ add 2 div
+ 3 1 roll
+ add 2 div
+ } def
+
+% finds slope between two points: xfrom yfrom xto yto newslope dx dy
+/newslope { 4 -1 roll
+ exch
+ 4 1 roll
+ sub 3 1 roll sub exch
+ } def
+
+
+%% commands for drawing things around nodes
+% nodename nodebox -
+/nodebox {nodes exch get begin
+ gsave
+ newpath
+ x y moveto
+ h w dobox
+ cleanup
+ stroke
+ grestore
+ end} def
+
+
+% nodename nodecircle -
+% would be nice to have a parameter that adjusts diameter of circle
+% depth nodename nodecircle -
+/nodecircle {nodes exch get begin
+ gsave
+ newpath
+ w 2 div x add h 2 div y add
+ w w mul h h mul add sqrt 2 div 4 -1 roll add
+ 360 0 arcn
+ cleanup
+ stroke
+ grestore
+ end} def
+
+% no cleanup
+/nodecircletrans {nodes exch get begin
+ gsave
+ newpath
+ w 2 div x add h 2 div y add
+ w w mul h h mul add sqrt 2 div 4 -1 roll add
+ 360 0 arcn
+ stroke
+ grestore
+ end} def
+
+% nodename nodeoval -
+/nodeoval {nodes exch get begin
+ gsave
+ newpath
+ x 2 sub y 2 sub moveto
+ h 4 add w 4 add dooval
+ cleanup
+ stroke
+ grestore
+ end } def
+
+% ratio depth nodename testnodeoval -
+% ratio should be between 0 and 1
+/testnodeoval {nodes exch get begin
+ gsave
+ newpath
+ h h mul w w mul add sqrt div dup dup dup
+ w mul neg x add exch
+ h mul neg y add
+ moveto
+ dup
+ h mul 2 mul h add exch
+ w mul 2 mul w add
+ testdooval
+ stroke
+ grestore
+ end } def
+
+
+/cleanup{gsave
+ x y moveto
+ h nodemargin sub .5 add w nodemargin sub .5 add doccbox
+ 1 setgray fill grestore
+}def
+
+/boxdict 4 dict def
+boxdict /mtrx matrix put
+
+/dobox{boxdict begin
+ /w exch def
+ /h exch def
+ /savematrix mtrx currentmatrix def
+ 0 h rlineto
+ w 0 rlineto
+ 0 h neg rlineto
+ closepath
+ savematrix setmatrix
+ end} def
+
+% do box in counterclockwise fashion
+/doccbox{boxdict begin
+ /w exch def
+ /h exch def
+ /savematrix mtrx currentmatrix def
+ w 0 rlineto
+ 0 h rlineto
+ w neg 0 rlineto
+ closepath
+ savematrix setmatrix
+ end} def
+
+
+/ovaldict 6 dict def
+ovaldict /mtrx matrix put
+
+% h w ovaldict -
+/dooval{ovaldict begin
+ /w exch def
+ /h exch def
+ /savematrix mtrx currentmatrix def
+ 0 h 2 div rmoveto
+ 0 h 2 div nodemargin sub
+ nodemargin h 2 div
+ w 2 div h 2 div
+ rcurveto
+ w 2 div nodemargin sub 0
+ w 2 div nodemargin neg
+ w 2 div h 2 div neg
+ rcurveto
+ 0 h 2 div neg nodemargin add
+ nodemargin neg h 2 div neg
+ w 2 div neg h 2 div neg
+ rcurveto
+ w 2 div neg nodemargin add 0
+ w 2 div neg nodemargin
+ w 2 div neg h 2 div
+ rcurveto
+ savematrix setmatrix
+ end} def
+
+% give height and width of a box and the lower left hand point
+% produce a curve that will enclose the box.
+% initial point already defined
+% ratio h w testdooval -
+/testdooval{ovaldict begin
+ /w exch def
+ /h exch def
+ /r exch def
+ h 2 div neg r mul dup
+ h 2 div dup
+ r mul 3 1 roll
+ 2 r sub mul
+ 0 h
+ rcurveto
+ w 2 div dup
+ r mul exch
+ 2 r sub mul
+ w 2 div r mul dup 3 1 roll
+ w 0
+ rcurveto
+ h 2 div r mul dup
+ h 2 div neg dup
+ r mul 3 1 roll
+ 2 r sub mul
+ 0 h neg
+ rcurveto
+ w 2 div neg dup
+ r mul exch
+ 2 r sub mul
+ w 2 div neg r mul dup 3 1 roll
+ w neg 0
+ rcurveto
+ end} def
+
+end % of treedict
+
+end % of TeXdict
+% gsave
diff --git a/macros/latex209/contrib/trees/tree-dvips/tree-manual.pdf b/macros/latex209/contrib/trees/tree-dvips/tree-manual.pdf
new file mode 100644
index 0000000000..02fa97f402
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/tree-manual.pdf
Binary files differ
diff --git a/macros/latex209/contrib/trees/tree-dvips/tree-manual.tex b/macros/latex209/contrib/trees/tree-dvips/tree-manual.tex
new file mode 100644
index 0000000000..9f942fd415
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree-dvips/tree-manual.tex
@@ -0,0 +1,603 @@
+\documentstyle[tree-dvips,rotate,lingmacros]{article}
+
+\title{Tree Macros}
+\author{Emma Pease}
+\date{May 10, 1995}
+
+\begin{document}
+
+\maketitle
+
+The tree macros package allows one to integrate \LaTeX\ and Postscript.
+For example, one can use \LaTeX\ to layout a tree and have Postscript
+draw the lines.
+\begin{center}
+ \begin{tabular}{ccc}
+&\node{ab}{top node}\\[3ex]
+\node{ac}{left node} && \node{c}{right node}\\[3ex]
+ && \node{d}{odd node}
+\end{tabular}
+\nodeconnect{ab}{ac}
+\nodeconnect{ab}{c}
+\nodeconnect{c}{d}
+\nodecurve[r]{ab}[r]{d}{1in}
+\anodeconnect[b]{ac}[l]{d}
+\anodecurve[l]{ab}[l]{ac}{1in}
+\end{center}
+
+These macros work by defining locations on a page and then
+manipulating them in a variety of ways. The commands that created the
+above tree are as follows:
+ \begin{verbatim}
+\begin{tabular}{ccc}
+ &\node{a}{top node}\\[3ex]
+\node{b}{left node} & & \node{c}{right node}\\[3ex]
+ & & \node{d}{odd node}
+\end{tabular}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+\nodeconnect{c}{d}
+\nodecurve[r]{a}[r]{d}{1in}
+\anodeconnect[b]{b}[l]{d}
+\anodecurve[l]{a}[l]{b}{1in}
+\end{verbatim}
+ You will notice that four nodes are defined, a, b, c, and d, using the
+\verb+\node+ command. These nodes are then connected using the
+\verb+\nodeconnect+ and \verb+\nodecurve+ commands.
+
+\section{Locating Commands}
+
+Location commands are those that deal with defining a location on a
+page. The basic command
+ \begin{center}
+\begin{verbatim}
+\node{nodename}{object}
+\end{verbatim}
+\end{center}
+ Each node has its name, height, width, and the location of the lower
+left hand corner point passed down to postscript where it will remain
+until needed. Note that the object will be printed by \TeX\ but the
+lines drawn by Postscript. A variant
+of this command is
+ \begin{center}
+\begin{verbatim}
+\nodepoint{nodename}[horizontal displace][vertical displace]
+\end{verbatim}
+\end{center}
+ The node's height and width are 0pts, but the location can be
+displaced.
+
+\section{Connecting Commands}
+
+These commands connect two or more nodes.
+
+\subsection{nodeconnect}
+
+One basic command is
+\begin{center}
+\begin{verbatim}
+\nodeconnect[fromloc]{fromnodename}[toloc]{tonodename}
+\end{verbatim}
+\end{center}
+ fromnodename and tonodename must be the names of two existing nodes.
+Imagine the node as a box, fromloc and toloc are the locations on that
+box to draw the connecting lines.
+\begin{center}\nodemargin=9pt
+\begin{tabular}{lcr}
+tl & {t} &{tr}\\[2ex]
+{l} & \node{a}{object} &{r}\\[2ex]
+{bl}& {b} &{br}
+\end{tabular}
+\nodebox{a}
+\end{center}
+ The present choices are t [top], b [bottom], l [left], r [right], tl
+[topleft], tr [topright], bl [bottomleft], and br [bottomright].
+These could be expanded. By default the fromloc is bottom and the
+toloc is top.
+
+Variants of this command are
+\begin{verbatim}
+\anodeconnect[fromloc]{fromnodename}[toloc]{tonodename}
+\aanodeconnect[fromloc]{fromnodename}[toloc]{tonodename}
+\end{verbatim}
+The first places an arrow pointing to the second node. The second puts
+arrows on both ends of the line.
+\begin{center}
+\begin{tabular}{ccccc}
+ &\node{a}{Top node}\\[3ex]
+\node{b}{left node\strut} & & \node{c}{right node\strut}&\qquad &\node{d}{farright\strut}
+\end{tabular}
+\nodeconnect{a}{b}
+\nodeconnect[t]{c}[b]{a}
+\anodeconnect[r]{b}[l]{c}
+\aanodeconnect[r]{c}[l]{d}
+\end{center}
+\begin{verbatim}
+\begin{tabular}{ccccc}
+ &\node{a}{Top node}\\[3ex]
+\node{b}{left node\strut} & & \node{c}{right node\strut}
+ &\qquad &\node{d}{farright\strut}
+\end{tabular}
+\nodeconnect{a}{b}
+\nodeconnect[t]{c}[b]{a}
+\anodeconnect[r]{b}[l]{c}
+\aanodeconnect[r]{c}[l]{d}
+\end{verbatim}
+Note the \verb+\strut+. This ensures that both nodes have the same
+height and depth.
+
+\subsection{barnodeconnect}
+
+Another way of connecting is via the bar connect commands
+\begin{verbatim}
+\barnodeconnect[depth]{fromnodename}{tonodename}
+\abarnodeconnect[depth]{fromnodename}{tonodename}
+\end{verbatim}
+For example,
+\begin{center}
+\node{c}{\strut This} \node{a}{\strut is} a \node{b}{\strut test} of
+barnodeconnect.
+\barnodeconnect{a}{b}
+\barnodeconnect[-5pt]{a}{c}
+\bigskip\bigskip
+
+\node{c}{\strut This} \node{a}{\strut is} a \node{b}{\strut test}
+\node{d}{\strut of} abarnodeconnect. \node{e}{\strut Note} arrows.
+\abarnodeconnect[10pt]{a}{b}
+\abarnodeconnect[-10pt]{a}{c}
+\abarnodeconnect[-10pt]{b}{d}
+\abarnodeconnect[10pt]{e}{d}
+\end{center}\bigskip
+\begin{verbatim}
+\node{c}{\strut This} \node{a}{\strut is} a \node{b}{\strut test}
+of barnodeconnect.
+\barnodeconnect{a}{b}
+\barnodeconnect[-5pt]{a}{c}
+\bigskip\bigskip
+
+\node{c}{\strut This} \node{a}{\strut is} a \node{b}{\strut test}
+\node{d}{\strut of} abarnodeconnect. \node{e}{\strut Note} arrows.
+\abarnodeconnect[10pt]{a}{b}
+\abarnodeconnect[-10pt]{a}{c}
+\abarnodeconnect[-10pt]{b}{d}
+\abarnodeconnect[10pt]{e}{d}
+\end{verbatim}
+ A negative depth places the bar below the line; a positive depth (or
+the default, which is 5pt) places the bar above the line.
+
+
+\subsection{nodecurve}
+
+The nodecurve commands allow curves between nodes.
+\begin{verbatim}
+\nodecurve[fromloc][fromang]{fromnodename}[toloc][toang]{tonodename}{fdepth}[tdepth]
+\anodecurve[fromloc][fromang]{fromnodename}[toloc][toang]{tonodename}{fdepth}[tdepth]
+\aanodecurve[fromloc][fromang]{fromnodename}[toloc][toang]{tonodename}{fdepth}[tdepth]
+\end{verbatim}
+The options fromloc and toloc are the same as for \verb+\nodeconnect+.
+The options fromang and toang are the angle of incidence in degrees to the
+location with 0 being perpendicular and the default. Angles are
+calculated counterclockwise. fdepth and tdepth are dimensions and
+allow one to adjust how curved the curve is.
+\begin{center}
+\begin{tabular}{ccc}
+ &\node{a}{Top node}\\[3ex]
+\node{b}{left node\strut} & & \node{c}{right node\strut}
+\end{tabular}
+\nodecurve[b]{b}[b]{c}{.3in}
+\anodecurve[l]{a}[l]{b}{20pt}[40pt]
+\aanodecurve[r]{a}[r]{c}{60pt}[20pt]
+\hfill
+\begin{tabular}{c}
+\node{d}{Top}\\
+\node{e}{Bottom}
+\end{tabular}
+\nodecurve[l]{d}[l]{e}{30pt}
+\nodecurve[l]{d}[l]{e}{30pt}[40pt]
+\nodecurve[l]{d}[l]{e}{30pt}[50pt]
+\nodecurve[l]{d}[l]{e}{30pt}[5pt]
+
+\nodecurve[r]{d}[r]{e}{30pt}
+\nodecurve[r][20]{d}[r][-30]{e}{30pt}
+
+\bigskip
+
+\end{center}
+\begin{verbatim}
+\begin{tabular}{ccc}
+ &\node{a}{Top node}\\[3ex]
+\node{b}{left node\strut} & & \node{c}{right node\strut}
+\end{tabular}
+\nodecurve[b]{b}[b]{c}{.3in}
+\anodecurve[l]{a}[l]{b}{20pt}[40pt]
+\aanodecurve[r]{a}[r]{c}{60pt}[20pt]
+\hfill
+\begin{tabular}{c}
+\node{d}{Top}\\
+\node{e}{Bottom}
+\end{tabular}
+% here follow some curves that adjust fdepth and tdepth
+\nodecurve[l]{d}[l]{e}{30pt}
+\nodecurve[l]{d}[l]{e}{30pt}[40pt]
+\nodecurve[l]{d}[l]{e}{30pt}[50pt]
+\nodecurve[l]{d}[l]{e}{30pt}[5pt]
+
+% here follow some curves that adjust toang and fromang
+\nodecurve[r]{d}[r]{e}{30pt}
+\nodecurve[r][20]{d}[r][-30]{e}{30pt}
+\end{verbatim}
+
+\subsection{Other connecting commands}
+
+A few odd commands
+\begin{verbatim}
+\nodetriangle{fromnodename}{tonodename}
+\end{verbatim}
+This creates a triangle whose apex is the bottom of
+\verb+fromnodename+ and whose base is the top of \verb+tonodename+.
+\begin{center}
+\begin{tabular}{c}
+\node{a}{Top}\\[4ex]
+\node{b}{This is the bottom}
+\end{tabular}
+\nodetriangle{a}{b}
+
+\end{center}
+\begin{verbatim}
+\begin{tabular}{c}
+\node{a}{Top}\\[4ex]
+\node{b}{This is the bottom}
+\end{tabular}
+\nodetriangle{a}{b}
+\end{verbatim}
+The last command is meant to be used with the \verb+\nodeconnect+
+command. It causes a short line to cross perpendicular to the line.
+\begin{verbatim}
+\delink[fromloc]{fromnodename}[toloc]{tonodename}{length}
+\end{verbatim}
+An example follows
+\begin{center}
+\node{a}{leftnode\strut}\hspace{1in}\node{b}{rightnode\strut}
+\nodeconnect[r]{a}[l]{b}
+\delink[r]{a}[l]{b}{10pt}
+\end{center}
+
+\section{Single Node commands}
+
+These commands adjust something around a single node rather than
+connecting nodes. The basic commands are
+ \begin{center}
+\begin{verbatim}
+\nodebox{nodename}
+\nodecircle[depth]{nodename}
+\nodeoval{nodename}
+\end{verbatim}
+\end{center}
+They draw, respectively, a box, circle, or oval around the given node.
+\begin{center}
+\node{a}{node}\hfill \node{b}{node} \hfill \node{c}{node}
+\nodebox{a} \nodecircle{b} \nodeoval{c}
+\end{center}
+ You will probably wish to call these commands after you have called
+all the connecting commands you will be using in a particular diagram.
+
+
+\section{Parameters}
+
+At the moment there are three parameters that can be changed. They
+are
+\begin{itemize}
+\item \verb+\nodemargin+ - A node's height and width are defined as
+the height plus depth and width of an hbox enclosing the object plus the
+nodemargin on each side. The default is 2pt.
+
+\item \verb+\treelinewidth+ - The width of the lines. The default is .3pt.
+
+\item \verb+\dashlength+ - The length of the dash, if you are using
+dashed lines. The default is 0pt (solid line).\footnote{The length
+of the dash and the length between the dashes are the same. An
+exercise for someone who knows postscript and tex is to allow the dash
+and the blank to vary in size.}
+
+\item \verb+\arrowwidth+ - the width of the arrowhead in the
+ \verb+\anodeconnect+ and \verb+\anodecurve+ commands. Default is
+ 3 pt.
+
+\item \verb+\arrowlength+ - the length of the arrowhead. Default is
+ 4pt.
+
+\item \verb+\arrowinset+ - the inset in the arrow. Default is 1pt.
+
+\end{itemize}
+The command \verb+\arrowhead{width}{length}{inset}+ allows one to
+define all three parameters in one go.
+\begin{center}
+\node{a}{This} \node{b}{is} a \node{c}{line}.\\[5ex]
+\node{d}{This} \node{e}{is} a \node{f}{line}.%
+% The following gives examples of differing insets of arrowheads
+\arrowhead{4pt}{6pt}{0pt}%
+\anodeconnect{a}{d}%
+\arrowhead{4pt}{6pt}{1pt}%
+\anodeconnect{b}{e}%
+\arrowhead{4pt}{6pt}{3pt}%
+\anodeconnect{c}{f}%
+
+% the following gives examples of differing lengths
+% and widths of the arrowhead
+\arrowhead{4pt}{6pt}{2pt}%
+\anodeconnect[t]{d}[b]{a}%
+\arrowhead{4pt}{8pt}{2pt}%
+\anodeconnect[t]{e}[b]{b}%
+\arrowhead{2pt}{6pt}{2pt}%
+\anodeconnect[t]{f}[b]{c}%
+
+\end{center}
+\begin{verbatim}
+\node{a}{This} \node{b}{is} a \node{c}{line}.\\[5ex]
+\node{d}{This} \node{e}{is} a \node{f}{line}.%
+% The arrows pointing down give examples of differing insets of arrowheads
+\arrowhead{4pt}{6pt}{0pt}%
+\anodeconnect{a}{d}%
+\arrowhead{4pt}{6pt}{1pt}%
+\anodeconnect{b}{e}%
+\arrowhead{4pt}{6pt}{3pt}%
+\anodeconnect{c}{f}%
+
+% the arrows pointing up give examples of differing lengths
+% and widths of the arrowheads.
+\arrowhead{4pt}{6pt}{2pt}%
+\anodeconnect[t]{d}[b]{a}%
+\arrowhead{4pt}{8pt}{2pt}%
+\anodeconnect[t]{e}[b]{b}%
+\arrowhead{2pt}{6pt}{2pt}%
+\anodeconnect[t]{f}[b]{c}%
+\end{verbatim}
+
+\section{How to Run}
+
+Add the style file, tree-dvips.sty,
+\begin{verbatim}
+\documentstyle[tree-dvips]{article}
+\end{verbatim}
+Run through \LaTeX\ and send to a postscript printer using dvips
+(written by Tomas Rokicki).
+
+
+\section{Examples}
+
+A series of examples follow.
+\begin{center}
+\let\mc=\multicolumn
+\begin{tabular}[t]{@{}lllllllll@{}}
+ & & & &\node{a}{VP} \\[2ex]
+ &\node{b}{PP}
+ & & & & &\mc{2}{c}{\node{c}{V$'$}}\\[2ex]
+ & & &\node{d}{NP} \\[2ex]
+ & &\nodepoint{e}
+ & &\node{f}{NP} \\
+ & & &\hfill\nodepoint{r}[0pt][3pt] \\
+ &\hfil\node{g}{AP}
+ & &\hfil\node{h}{NP}
+ & & & &\hfil\node{i}{NP}\\[2ex]
+\node{j}{P}
+ &\hfil\node{k}{A}
+ & \node{l}{Prt}
+ &\hfil\node{m}{N}
+ &\node{n}{Prt}
+ &\node{o}{N}
+ &\node{p}{V}
+ &\hfil\node{q}{N}\\[2ex]
+`zaw &`oN &`geq&?njiaw&`geq&`dou& khe &tshjaN \\
+toward &red & & bird & &head& open&gun \\[1ex]
+\mc{9}{@{}l}{`shoot at the red head of the bird'} \\
+\end{tabular}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+\nodeconnect{b}{d}
+\nodeconnect{b}{j}
+\nodeconnect{c}{p}
+\nodeconnect{c}{i}
+\nodeconnect{d}{e}
+\nodeconnect{e}{g}
+\nodeconnect{e}{l}
+\nodeconnect{d}{f}
+\nodeconnect{g}{k}
+\nodeconnect{f}{r}
+\nodeconnect{r}{h}
+\nodeconnect{r}{n}
+\nodeconnect{f}{o}
+\nodeconnect{h}{m}
+\nodeconnect{i}{q}
+
+\end{center}
+\begin{verbatim}
+\let\mc=\multicolumn
+\begin{tabular}[t]{@{}lllllllll@{}}
+ & & & &\node{a}{VP} \\[2ex]
+ &\node{b}{PP}
+ & & & & &\mc{2}{c}{\node{c}{V$'$}}\\[2ex]
+ & & &\node{d}{NP} \\[2ex]
+ & &\nodepoint{e}
+ & &\node{f}{NP} \\
+ & & &\hfill\nodepoint{r}[0pt][3pt] \\
+ &\hfil\node{g}{AP}
+ & &\hfil\node{h}{NP}
+ & & & &\hfil\node{i}{NP}\\[2ex]
+\node{j}{P}
+ &\hfil\node{k}{A}
+ & \node{l}{Prt}
+ &\hfil\node{m}{N}
+ &\node{n}{Prt}
+ &\node{o}{N}
+ &\node{p}{V}
+ &\hfil\node{q}{N}\\[2ex]
+`zaw&`oN &`geq&?njiaw&`geq&`dou& khe &tshjaN \\
+toward &red & & bird & &head& open&gun \\[1ex]
+\mc{9}{@{}l}{`shoot at the red head of the bird'} \\
+\end{tabular}
+\nodeconnect{a}{b} \nodeconnect{e}{l}
+\nodeconnect{a}{c} \nodeconnect{d}{f}
+\nodeconnect{b}{d} \nodeconnect{g}{k}
+\nodeconnect{b}{j} \nodeconnect{f}{r}
+\nodeconnect{c}{p} \nodeconnect{r}{h}
+\nodeconnect{c}{i} \nodeconnect{r}{n}
+\nodeconnect{d}{e} \nodeconnect{f}{o}
+\nodeconnect{e}{g} \nodeconnect{h}{m}
+\nodeconnect{i}{q}
+\end{verbatim}
+ The following two examples use \verb+\outerfs+ and
+\verb+\modsmalltree+; these are both part of the lingmacros package.
+See \verb+lingmacros.sty+ for more information.
+ \enumsentence[(100)]{\evnup[2pt]
+{\outerfs{ Focus & \outerfs{subj & \outerfs{\ \nodepoint{a}\ }\\[1ex]
+ obl$_{th}$ & \outerfs{Pred & `Pro'\\
+ Refl & +}\\[1ex]
+ Pred & `proud$\langle(\uparrow {\rm subj})
+ (\uparrow {\rm obl}_{th})\rangle$'}\nodepoint{d}[-3pt][0pt]\\[2ex]
+ Subj & \outerfs{Pred & `Max'}\\[1ex]
+ Comp & \outerfs{Subj &\outerfs{Pred & `Larry'}\nodepoint{c}[-3pt][0pt]\\[1ex]
+ Xcomp&\outerfs{\ \nodepoint{b}\ }\\[1ex]
+ Pred & `be$\langle(\uparrow {\rm xcomp})
+ (\uparrow {\rm subj})\rangle$'}\\[1ex]
+ Pred & `think$\langle(\uparrow {\rm subj})
+ (\uparrow {\rm comp})\rangle$'}\\
+}
+\nodecurve[r]{a}[r]{c}{2in}[.5in]
+\anodecurve[r]{d}[r]{b}{1in}[2in]
+}
+\begin{verbatim}
+\enumsentence[(100)]{\evnup[2pt]
+{\outerfs{
+Focus & \outerfs{subj & \outerfs{\ \nodepoint{a}\ }\\[1ex]
+ obl$_{th}$ & \outerfs{Pred & `Pro'\\
+ Refl & +}\\[1ex]
+ Pred & `proud$\langle(\uparrow {\rm subj})
+ (\uparrow {\rm obl}_{th})\rangle$'}%
+\nodepoint{d}[-3pt][0pt]\\[2ex]
+Subj & \outerfs{Pred & `Max'}\\[1ex]
+Comp & \outerfs{Subj &\outerfs{Pred & `Larry'}%
+\nodepoint{c}[-3pt][0pt]\\[1ex]
+ Xcomp&\outerfs{\ \nodepoint{b}\ }\\[1ex]
+ Pred & `be$\langle(\uparrow {\rm xcomp})
+ (\uparrow {\rm subj})\rangle$'}\\[1ex]
+Pred & `think$\langle(\uparrow {\rm subj})
+ (\uparrow {\rm comp})\rangle$'}\\
+}
+\nodecurve[r]{a}[r]{c}{2in}[.5in]
+\anodecurve[r]{d}[r]{b}{1in}[2in]
+}
+\end{verbatim}
+\enumsentence{\modsmalltree{6}{
+ & & &\ns\node{a}{\begin{tabular}[t]{@{}c@{}}S\\
+ {}[+R]\end{tabular}} \\
+ &\node{b}{NP} & & & & \node{c}{VP} \\
+\node{d}{Det}& &\node{e}{N$^1$} \\
+\node{h}{the}&\node{i}{N} & & \node{f}{PP} &&\node{g}{are
+ totally false}\\
+ &\node{n}{rumors}&\node{j}{P} &&\ns\node{k}{\begin{tabular}[t]{@{}c@{}}NP\\
+ {}[+R] \end{tabular}}\\
+ & &\node{l}{about} &&\node{m}{whom}}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+\nodeconnect{b}{d}
+\nodeconnect{b}{e}
+\nodeconnect{d}{h}
+\nodeconnect{e}{i}
+\nodeconnect{e}{f}
+\nodeconnect{i}{n}
+\nodeconnect{f}{j}
+\nodeconnect{f}{k}
+\nodeconnect{j}{l}
+\nodeconnect{k}{m}
+\nodetriangle{c}{g}
+{\makedash{4pt}
+\anodecurve[t]{b}[l]{a}{10pt}
+\anodecurve[t]{e}[r]{b}{10pt}
+\anodecurve[t]{f}[r]{e}{10pt}
+\anodecurve[t]{k}[r]{f}{10pt}
+}}
+\begin{verbatim}
+\enumsentence{\modsmalltree{6}{
+ & & &\ns\node{a}{\begin{tabular}[t]{@{}c@{}}S\\
+ {}[+R]\end{tabular}} \\
+ &\node{b}{NP}
+ & & && \node{c}{VP} \\
+\node{d}{Det}
+ & &\node{e}{N$^1$} \\
+\node{h}{the}
+ &\node{i}{N}
+ & &\node{f}{PP}
+ &&\node{g}{are totally false}\\
+ &\node{n}{rumors}
+ &\node{j}{P}
+ & &\ns\node{k}{\begin{tabular}[t]{@{}c@{}}NP\\
+ {}[+R] \end{tabular}}\\
+ & &\node{l}{about}
+ & &\node{m}{whom}}
+\nodeconnect{a}{b} \nodeconnect{e}{f}
+\nodeconnect{a}{c} \nodeconnect{i}{n}
+\nodeconnect{b}{d} \nodeconnect{f}{j}
+\nodeconnect{b}{e} \nodeconnect{f}{k}
+\nodeconnect{d}{h} \nodeconnect{j}{l}
+\nodeconnect{e}{i} \nodeconnect{k}{m}
+\nodetriangle{c}{g}
+{\makedash{4pt}
+\anodecurve[t]{b}[l]{a}{10pt} \anodecurve[t]{f}[r]{e}{10pt}
+\anodecurve[t]{e}[r]{b}{10pt} \anodecurve[t]{k}[r]{f}{10pt}
+}}
+\end{verbatim}
+
+\section{Rotation}
+
+With the {\tt rotate.sty} file one can also rotate figures. This is
+useful with wide figures that won't fit on within the page boundaries
+unless turned sideways. Earlier versions of the tree macros didn't
+work with this.
+
+\rotate[l]{\modsmalltree{3}{&\node{a}{top}\\
+\node{b}{left} && \node{c}{right}}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+}
+
+\begin{verbatim}
+\rotate[l]{\modsmalltree{3}{&\node{a}{top}\\
+\node{b}{left} && \node{c}{right}}
+\nodeconnect{a}{b}
+\nodeconnect{a}{c}
+}
+\end{verbatim}
+
+Note that the connection commands are within the boundaries of the
+\verb+\rotate+ command.
+
+\section{Errors}
+
+A multitude of caveats.
+\begin{itemize}
+ \item Any commands calling nodes must be read while \TeX\ is still
+processing the page the nodes are defined on. In other words don't
+define the nodes on page 1 and connect them with commands that appear
+at the end of the paper.
+
+\item Nodes mentioned in node connecting commands must exist or else
+ the job won't print.
+
+\item Make sure the dvips postscript output is sent to a postscript
+printer. It is possible to send the dvi, but not the postscript,
+output to another printer; the lines just won't appear, assuming the
+printer ignores specials it doesn't know about.
+
+
+\end{itemize}
+
+\section{Thanks}
+
+Thanks to all those who've helped me over the years, including Avery
+Andrews who revamped the arrows for me and Gintas Grigelionis who
+suggested how to finally get the rotation to work correctly.
+
+
+\end{document}
+
+
diff --git a/macros/latex209/contrib/trees/tree_tex/Makefile b/macros/latex209/contrib/trees/tree_tex/Makefile
new file mode 100644
index 0000000000..83a60bb15a
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree_tex/Makefile
@@ -0,0 +1,70 @@
+#Author: Anthony Bloesch
+#Title: generate.c
+#
+#Copyright (C) Anthony Bloesch 1993
+#
+#Version: 1.0
+#
+#Usage:
+# make
+#
+# also
+#
+# make lint
+# make clean
+# make shar
+# make test
+
+#Debugging
+#DEBUG=-g
+#OPTIMIZATION=
+
+#Production
+DEBUG=
+OPTIMIZATION=-fast
+
+CC=/usr/lang/acc
+LATEX=/usr/local/tex/latex
+LINT=/usr/lang/alint
+SHAR=/usr/local/shar/shar
+
+COMPILE=${CC} ${DEBUG} -c -vc -Xc ${OPTIMIZATION}
+LINK=${CC} ${DEBUG}
+
+SOURCE1=Makefile layout.c layout.h treetex.c
+SOURCE2=README treetex.1 test1.tex test2.tex treetex.sty
+SOURCE=${SOURCE1} ${SOURCE2}
+
+all: treetex
+
+treetex: Makefile treetex.o layout.o
+ ${LINK} -o treetex treetex.o layout.o
+
+treetex.o: Makefile treetex.c layout.h
+ ${COMPILE} -o treetex.o treetex.c
+
+layout.o: Makefile layout.c layout.h
+ ${COMPILE} -o layout.o layout.c
+
+# Utilities
+
+clean:
+ rm -f *.o *.tli *.tlo *.dvi *.aux *.log *.plg *.shar? *~ treetex
+
+lint:
+ ${LINT} treetex.c layout.c
+
+shar:
+ ${SHAR} -n1 -e2 ${SOURCE1} >treetex.shar1
+ ${SHAR} -n2 -e2 ${SOURCE2} >treetex.shar2
+
+test: treetex
+ ${LATEX} test1.tex
+ ./treetex testtreea
+ ./treetex testtreeb
+ ./treetex testtreec
+ ${LATEX} test1.tex
+ ${LATEX} test2.tex
+ ./treetex testtreed
+ ./treetex testtreee
+ ${LATEX} test2.tex
diff --git a/macros/latex209/contrib/trees/tree_tex/README b/macros/latex209/contrib/trees/tree_tex/README
new file mode 100644
index 0000000000..9adb66044f
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree_tex/README
@@ -0,0 +1,58 @@
+Author: Anthony Bloesch
+Title: README
+
+Copyright (C) Anthony Bloesch 1993
+
+Version: 1.0
+
+The treetex software performs automatic layout of n-ary trees, with
+arbitrary sized nodes, in LaTeX. To use the software you describe the
+tree in a tree environment. For example:
+
+ \begin{tree}[l]{testtreea}
+ \rootnode{root node}
+ \treenode{nodeA}{root}{left root child}
+ \treenode{nodeB}{root}{right root child}
+ \treenode{nodeC}{nodeA}{nodeA child}
+ \end{tree}
+
+will be layed out something like:
+
+ root node
+ |
+ -------------------
+ | |
+ left root child right root child
+ |
+ nodeA child
+
+Also trees can be layed out sideways. The software is fully described
+in the file `treetex.sty'. To make the software edit the makefile to
+set up the macros correctly and then type:
+
+ make
+
+to test it, type:
+
+ make test
+
+Bug reports and questions can be directed, by email, to me at
+`anthonyb@cs.uq.oz.au.' and by ordinary post to:
+
+ Anthony Bloesch
+ University of Queensland
+ St Lucia, 4072
+ Australia
+
+And last but not least the dreaded disclaimer:
+
+ This software is distributed in the hope that it will prove useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+You may however do anything you want to the software provided you keep
+the copyright notices and the above disclaimer, and make it clear that
+the software has been altered.
+
+
+ Anthony
diff --git a/macros/latex209/contrib/trees/tree_tex/layout.c b/macros/latex209/contrib/trees/tree_tex/layout.c
new file mode 100644
index 0000000000..3d1c051a24
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree_tex/layout.c
@@ -0,0 +1,382 @@
+/*
+Author: Anthony Bloesch
+Title: layout.c
+
+Copyright (C) Anthony Bloesch 1991
+
+Purpose: Allow n-ary trees with arbitrary nodes to be aestheticaly
+ layed out.
+*/
+
+#include "layout.h"
+#include <stddef.h>
+#include <stdlib.h>
+
+typedef struct edge {
+/* The outline of a tree.
+ INV: all i in [yPosition, last(offset)] * Valid(offset[i])
+*/
+
+ unsigned yPosition; /* The first value of <offset> that is valid. */
+ int offset[1]; /* Variable sized array */
+} edge;
+
+static
+edge *newEdge(unsigned height)
+/* Return a new tree outline of height <height>.
+
+ Pre:
+ Post:
+*/
+
+{
+ edge *result;
+
+ result = (edge *)malloc((size_t)(sizeof(edge)+
+ height*sizeof(int)-sizeof(int)));
+
+ if ((edge *)NULL != result)
+ result->yPosition = height;
+
+ return result;
+
+} /* newEdge */
+
+int addBranch(Tree branch,
+ TreeNode *node)
+{
+ TreeNode **newBranch;
+
+ node->nrBranches++;
+
+ if ((Tree *)NULL == node->branches) /* No existing branches. */
+ node->branches = (TreeNode **)malloc(
+ (size_t)(node->nrBranches*sizeof(TreeNode *)));
+
+ else { /* Existing branches. */
+ newBranch = (TreeNode **)realloc(node->branches,
+ (size_t)(node->nrBranches*sizeof(TreeNode *)));
+
+ if (newBranch != node->branches)
+ (void)free(node->branches);
+
+ else
+ node->branches = newBranch;
+ } /* if */
+
+ if ((Tree *)NULL != node->branches)
+ node->branches[node->nrBranches-1] = branch;
+
+ return (Tree *)NULL != node->branches;
+
+} /* addBranch */
+
+void deleteNode(TreeNode *node)
+{
+ if ((Tree)NULL != node) {
+ (void)free((char *)node->name);
+ (void)free((char *)node->parent);
+ (void)free((char *)node->branches);
+ (void)free((char *)node);
+ } /* if */
+} /* deleteNode */
+
+void deleteTree(Tree tree)
+{
+ postorderTraverse(tree, deleteNode);
+
+} /* deleteTree */
+
+Tree newTree(char *nodeName,
+ char *parentName,
+ unsigned height,
+ unsigned width,
+ unsigned depth)
+{
+ Tree result;
+
+ result = (Tree)malloc(sizeof(TreeNode));
+
+ if (NULL != result) {
+ result->name = nodeName;
+ result->parent = parentName;
+ result->height = height;
+ result->width = width;
+ result->depth = depth;
+ result->x = 0;
+ result->y = 0;
+ result->nrBranches = 0;
+ result->branches = (Tree *)NULL;
+ } /* if */
+
+ return result;
+} /* newTree */
+
+void inorderTraverse(Tree tree,
+ NodeFunction *nodeFunction)
+{
+ unsigned i;
+
+ if ((Tree)NULL != tree) {
+ for(i = 0; i < tree->nrBranches; i++) {
+ postorderTraverse(tree->branches[i], nodeFunction);
+ nodeFunction(tree);
+ } /* for */
+ } /* if */
+} /* inorderTraverse */
+
+void postorderTraverse(Tree tree,
+ NodeFunction *nodeFunction)
+{
+ unsigned i;
+
+ if (tree != NULL) {
+ for(i = 0; i < tree->nrBranches; i++)
+ postorderTraverse(tree->branches[i], nodeFunction);
+
+ nodeFunction(tree);
+ } /* if */
+} /* postorderTraverse */
+
+void preorderTraverse(Tree tree,
+ NodeFunction *nodeFunction)
+{
+ unsigned i;
+
+ if(tree != (Tree)NULL) {
+ nodeFunction(tree);
+
+ for(i = 0; i < tree->nrBranches; i++)
+ preorderTraverse(tree->branches[i], nodeFunction);
+ } /* if */
+} /* preorderTraverse */
+
+static
+int intMax(int x,
+ int y)
+/* Return the maximun of <x> and <y>.
+
+ Pre:
+ Post: intMax' = max(x, y)
+*/
+{
+ if (x > y)
+ return x;
+
+ else
+ return y;
+
+} /* intMax */
+
+static
+int intMin(int x,
+ int y)
+/* Return the maximun of <x> and <y>.
+
+ Pre:
+ Post: intMax' = max(x, y)
+*/
+{
+ if (x < y)
+ return x;
+
+ else
+ return y;
+
+} /* intMin */
+
+static
+unsigned unsignedMax(unsigned x,
+ unsigned y)
+/* Return the maximun of <x> and <y>.
+
+ Pre:
+ Post: unsignedMax' = max(x, y)
+*/
+{
+ if (x > y)
+ return x;
+
+ else
+ return y;
+
+} /* unsignedMax */
+
+static
+unsigned unsignedMin(unsigned x,
+ unsigned y)
+/* Return the maximun of <x> and <y>.
+
+ Pre:
+ Post: unsignedMax' = max(x, y)
+*/
+{
+ if (x < y)
+ return x;
+
+ else
+ return y;
+
+} /* unsignedMin */
+
+static
+void doShapeTree(
+ Tree tree,
+ unsigned height,
+ unsigned yPosition,
+ edge **left,
+ edge **right,
+ unsigned xSeparation,
+ unsigned ySeparation)
+/* Aestheticaly layout <tree> using Bloesch's SPE algorithm. Assume the
+ tree has height <height> in rasters its top edge is at <yPosition> and
+ the x & y node separations are to be <xSeparation> and <ySeparation>.
+ Return the left and right outlines of the layed out tree in <left> and
+ <right>.
+
+ Pre: tree != NULL &
+ height(tree) = height
+ Post: leftOutline(tree) = left &
+ rightOutline(tree) = right
+*/
+{
+ int centre; /* The x position of the root node. */
+ unsigned i;
+ unsigned j;
+ edge **leftOutline; /* The left outlines of the subbranches */
+ int overlap; /* The amount of overlap between two branches. */
+ edge **rightOutline; /* The right outlines of the subbranches */
+
+ if (tree->nrBranches == 0) { /* No children. */
+ *left = newEdge(height);
+ *right = newEdge(height);
+ (*left)->yPosition = yPosition+tree->height-1;
+ (*right)->yPosition = yPosition+tree->height-1; }
+
+ else { /* Children. */
+ leftOutline = (edge **)malloc((size_t)(tree->nrBranches*sizeof(edge *)));
+ rightOutline = (edge **)malloc((size_t)(tree->nrBranches*sizeof(edge *)));
+
+ for (i = 0; i < tree->nrBranches; i++)
+ doShapeTree(tree->branches[i], height,
+ (int)(yPosition+tree->height+ySeparation),
+ &leftOutline[i], &rightOutline[i],
+ xSeparation, ySeparation);
+
+ /* Set up left and right. */
+ *left = leftOutline[0];
+ *right = rightOutline[0];
+
+ /* Position branches relative to the left branch. */
+ tree->branches[0]->x = 0;
+ for (i = 0; i < tree->nrBranches - 1; i++) {
+ /* Calculate maximum overlap. */
+ overlap = 0;
+ for (j = yPosition+tree->height+ySeparation;
+ j <= intMin(leftOutline[i+1]->yPosition, (*right)->yPosition);
+ j++)
+ overlap = intMax(overlap, leftOutline[i+1]->offset[j] +
+ (*right)->offset[j]);
+
+ /* Push branches apart. */
+ tree->branches[i+1]->x = overlap+xSeparation;
+
+ /* Adjust left outline. */
+ for (j = (*left)->yPosition+1; j <= leftOutline[i+1]->yPosition; j++)
+ (*left)->offset[j] = leftOutline[i+1]->offset[j] -
+ tree->branches[i+1]->x;
+ (*left)->yPosition = unsignedMax((*left)->yPosition,
+ leftOutline[i+1]->yPosition);
+
+ /* Adjust right outline */
+ for (j = yPosition; j <= rightOutline[i+1]->yPosition; j++)
+ (*right)->offset[j] = rightOutline[i+1]->offset[j] +
+ tree->branches[i+1]->x;
+ (*right)->yPosition = unsignedMax((*right)->yPosition,
+ rightOutline[i+1]->yPosition);
+ } /* for */
+
+ if (tree->nrBranches > 1) {
+ /* Position branches relative to the centre. */
+ centre = tree->branches[tree->nrBranches-1]->x/2;
+
+ for (i = 0; i < tree->nrBranches; i++)
+ tree->branches[i]->x -= centre;
+
+ for (i = yPosition; i <= (*left)->yPosition; i++)
+ (*left)->offset[i] += centre;
+
+ for (i = yPosition; i <= (*right)->yPosition; i++)
+ (*right)->offset[i] -= centre;
+ } /* if */
+
+ /* Free the old outlines. */
+ for (i = 1; i < tree->nrBranches; i++) {
+ (void)free((char *)leftOutline[i]);
+ (void)free((char *)rightOutline[i]);
+ } /* for */
+ } /* if */
+
+ /* Add node to tree outline. */
+ for (i = yPosition - ySeparation; i < yPosition+tree->height; i++) {
+ (*left)->offset[i] = tree->width/2;
+ (*right)->offset[i] = (tree->width+1)/2;
+ } /* for */
+
+ tree->y = yPosition;
+
+} /* doShapeTree */
+
+static
+int treeHeight(Tree tree,
+ unsigned ySeparation)
+/* Return the height of <tree> assuming the y separation is <ySeparation>.
+
+ Pre:
+ Post:
+*/
+{
+ unsigned height = 0;
+ unsigned i;
+ unsigned newHeight;
+
+ if (tree != (Tree)NULL) {
+ for (i = 0; i < tree->nrBranches; i++) {
+ newHeight = treeHeight(tree->branches[i], ySeparation);
+ if (newHeight > height)
+ height = newHeight;
+ } /* for */
+ height += ySeparation+tree->height;
+ } /* if */
+
+ return height;
+
+} /* treeHeight */
+
+void shapeTree(Tree tree,
+ unsigned *height,
+ unsigned *leftWidth,
+ unsigned *rightWidth,
+ unsigned xSeparation,
+ unsigned ySeparation)
+{
+ unsigned i;
+ edge *left; /* Left outline of tree. */
+ edge *right; /* Right outline of tree. */
+
+ *height = treeHeight(tree, ySeparation);
+
+ doShapeTree(tree, *height, ySeparation, &left, &right,
+ xSeparation, ySeparation);
+
+ *leftWidth = 0;
+ *rightWidth = 0;
+ for (i = 0; i < *height; i++) {
+ *leftWidth = (unsigned)intMax((int)*leftWidth, left->offset[i]);
+ *rightWidth = (unsigned)intMax((int)*rightWidth, right->offset[i]);
+ } /* for */
+
+ (void)free((char *)left);
+ (void)free((char *)right);
+
+} /* shapeTree */
diff --git a/macros/latex209/contrib/trees/tree_tex/layout.h b/macros/latex209/contrib/trees/tree_tex/layout.h
new file mode 100644
index 0000000000..3efdc10347
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree_tex/layout.h
@@ -0,0 +1,77 @@
+/*
+Author: Anthony Bloesch
+Title: layout.h
+
+Copyright (C) Anthony Bloesch 1991
+
+Purpose: Allow n-ary trees with arbitrary nodes to be aestheticaly
+ layed out.
+*/
+
+#ifndef _LAYOUT_H
+#define _LAYOUT_H
+
+typedef struct TreeNode {
+ char *name;
+ char *parent;
+ unsigned height;
+ unsigned width;
+ unsigned depth;
+ int x;
+ int y;
+ unsigned nrBranches;
+ struct TreeNode **branches;} TreeNode;
+typedef TreeNode *Tree;
+typedef void NodeFunction(TreeNode *node);
+
+extern
+int addBranch(Tree branch,
+ TreeNode *node);
+
+extern
+void deleteNode(TreeNode *node);
+
+extern
+void deleteTree(Tree tree);
+/* Recursively deallocate the storage used by tree.
+
+ Pre: Valid(tree)
+ Post: Invalid(tree)
+*/
+
+extern
+Tree newTree(char *nodeName,
+ char *parentName,
+ unsigned height,
+ unsigned width,
+ unsigned depth);
+/* Return a new tree initialized to the specified height and width with the
+ branches initialized to NULL.
+
+ Pre:
+ Post: newTree'->height = height &
+ newTree'->width = width &
+ All i 0<=i<NR_BRANCHES -> newTree'->branches[i]
+*/
+
+extern
+void shapeTree(Tree tree,
+ unsigned *height,
+ unsigned *leftWidth,
+ unsigned *rightWidth,
+ unsigned xSeparation,
+ unsigned ySeparation);
+
+extern
+void inorderTraverse(Tree tree,
+ NodeFunction *nodeFunction);
+
+extern
+void postorderTraverse(Tree tree,
+ NodeFunction *nodeFunction);
+
+extern
+void preorderTraverse(Tree tree,
+ NodeFunction *nodeFunction);
+
+#endif /* _LAYOUT_H */
diff --git a/macros/latex209/contrib/trees/tree_tex/test1.tex b/macros/latex209/contrib/trees/tree_tex/test1.tex
new file mode 100644
index 0000000000..c2ba181bda
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree_tex/test1.tex
@@ -0,0 +1,44 @@
+%Author: Anthony Bloesch
+%Title: test1.tex
+%
+%Copyright (C) Anthony Bloesch 1993
+
+\documentstyle[treetex]{article}
+
+\begin{document}
+\begin{center}
+\begin{tree}{testtreea}
+ \rootnode{root node}
+ \treenode{nodeA}{root}{left root child}
+ \treenode{nodeB}{root}{right root child}
+ \treenode{nodeC}{nodeB}{nodeB child 1}
+ \treenode{nodeD}{nodeA}{nodeA child 1}
+ \treenode{nodeE}{nodeA}{nodeA child 2}
+ \treenode{nodeF}{nodeA}{nodeA child 3}
+\end{tree}
+\end{center}
+
+\begin{center}
+\begin{tree}[t]{testtreeb}
+ \rootnode{root node}
+ \treenode{nodeA}{root}{left root child}
+ \treenode{nodeB}{root}{right root child}
+ \treenode{nodeC}{nodeB}{nodeB child 1}
+ \treenode{nodeD}{nodeA}{nodeA child 1}
+ \treenode{nodeE}{nodeA}{nodeA child 2}
+ \treenode{nodeF}{nodeA}{nodeA child 3}
+\end{tree}
+\end{center}
+
+\begin{center}
+\begin{tree}[l]{testtreec}
+ \rootnode{root node}
+ \treenode{nodeA}{root}{left root child}
+ \treenode{nodeB}{root}{right root child}
+ \treenode{nodeC}{nodeB}{nodeB child 1}
+ \treenode{nodeD}{nodeA}{nodeA child 1}
+ \treenode{nodeE}{nodeA}{nodeA child 2}
+ \treenode{nodeF}{nodeA}{nodeA child 3}
+\end{tree}
+\end{center}
+\end{document}
diff --git a/macros/latex209/contrib/trees/tree_tex/test2.tex b/macros/latex209/contrib/trees/tree_tex/test2.tex
new file mode 100644
index 0000000000..b685d8e9a4
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree_tex/test2.tex
@@ -0,0 +1,72 @@
+%Author: Anthony Bloesch
+%Title: test2.tex
+%
+%Copyright (C) Anthony Bloesch 1993
+
+\documentstyle[treetex]{article}
+
+\newcommand{\closed}{\times}
+\newcommand{\justfalse}{\mathord{\strutrule{12pt}\overline{\truesign}}}
+\newcommand{\justtrue}{\mathord{\strutrule{12pt}\overline{\falsesign}}}
+\renewcommand{\land}{{\mathrel\wedge}}
+\newcommand{\pred}[1]{\mathord{\mbox{\rm #1}}}
+\newcommand{\strutrule}[1]{\protect\rule{0cm}{#1}}
+\newcommand{\truesign}{\mbox{\bf T}}
+
+\begin{document}
+\begin{center}
+\begin{tree}{testtreed}
+ \rootnode{\shortstack[l]{$\truesign\;\pred{P}$\\
+ $\truesign\;\pred{Q}$\\
+ $\justfalse\;\pred{P}\land\pred{Q}$}}
+ \treenode{nodeA}{root}{\shortstack{\shortstack[l]{$\justfalse\;\pred{P}$\\
+ $\justfalse\;\pred{P}\land\pred{Q}$\\
+ $\justfalse\;\pred{Q}\land\pred{Q}$\\
+ $\justfalse\;\pred{P}\land\pred{R}$\\
+ $\truesign\;\pred{P}\land\pred{Q}$\\
+ $\truesign\;\pred{Q}$}\\
+ $\closed$}}
+ \treenode{nodeB}{root}{\shortstack[l]{$\justfalse\;\pred{Q}$\\
+ $\justfalse\;\pred{Q}\land\pred{Q}$}}
+ \treenode{nodeC}{nodeB}{\shortstack{\shortstack[l]{$\justfalse\;\pred{Q}$\\
+ $\truesign\;\pred{P}$\\
+ $\truesign\;\pred{Q}$\\
+ $\justfalse\;\pred{P}\land\pred{Q}$}\\
+ $\closed$}}
+ \treenode{nodeD}{nodeB}{\shortstack{\shortstack[l]{$\justfalse\;\pred{Q}$\\
+ $\justfalse\;\pred{Q}$\\
+ $\truesign\;\pred{P}$\\
+ $\truesign\;\pred{Q}$\\
+ $\justfalse\;\pred{P}\land\pred{Q}$}\\
+ $\closed$}}
+\end{tree}
+\end{center}
+
+\begin{center}
+\begin{tree}[l]{testtreee}
+ \rootnode{\shortstack[l]{$\truesign\;\pred{P}$\\
+ $\truesign\;\pred{Q}$\\
+ $\justfalse\;\pred{P}\land\pred{Q}$}}
+ \treenode{nodeA}{root}{\shortstack{\shortstack[l]{$\justfalse\;\pred{P}$\\
+ $\justfalse\;\pred{P}\land\pred{Q}$\\
+ $\justfalse\;\pred{Q}\land\pred{Q}$\\
+ $\justfalse\;\pred{P}\land\pred{R}$\\
+ $\truesign\;\pred{P}\land\pred{Q}$\\
+ $\truesign\;\pred{Q}$}\\
+ $\closed$}}
+ \treenode{nodeB}{root}{\shortstack[l]{$\justfalse\;\pred{Q}$\\
+ $\justfalse\;\pred{Q}\land\pred{Q}$}}
+ \treenode{nodeC}{nodeB}{\shortstack{\shortstack[l]{$\justfalse\;\pred{Q}$\\
+ $\truesign\;\pred{P}$\\
+ $\truesign\;\pred{Q}$\\
+ $\justfalse\;\pred{P}\land\pred{Q}$}\\
+ $\closed$}}
+ \treenode{nodeD}{nodeB}{\shortstack{\shortstack[l]{$\justfalse\;\pred{Q}$\\
+ $\justfalse\;\pred{Q}$\\
+ $\truesign\;\pred{P}$\\
+ $\truesign\;\pred{Q}$\\
+ $\justfalse\;\pred{P}\land\pred{Q}$}\\
+ $\closed$}}
+\end{tree}
+\end{center}
+\end{document}
diff --git a/macros/latex209/contrib/trees/tree_tex/treetex.c b/macros/latex209/contrib/trees/tree_tex/treetex.c
new file mode 100644
index 0000000000..6b59d4e08c
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree_tex/treetex.c
@@ -0,0 +1,529 @@
+/*
+Author: Anthony Bloesch
+Title: generate.c
+
+Copyright (C) Anthony Bloesch 1993
+
+Version: 1.0
+
+Purpose: Take a .tlo file generated by treetex.sty and generate the
+ corresponding .tli file. That is, an aesthetic layout of the
+ tree specified in the .tlo file.
+
+ A .tlo is expected to be of the form:
+
+ TLO <- ROOT_POS
+ (ROOT_SPEC | NODE_SPEC) {ROOT_SPEC | NODE_SPEC}
+ ROOT_POS <- t|l
+ ROOT_SPEC <- NODE_NAME
+ WIDTH HEIGHT
+ NODE_SPEC <- NODE_NAME PARENT_NAME
+ WIDTH HEIGHT DEPTH
+ NODE_NAME <- NAME
+ PARENT_NAME <- NAME
+ WIDTH <- PT_SIZE
+ HEIGHT <- PT_SIZE
+ DEPTH <- PT_SIZE
+ NAME <- LETTER{LETTER}
+ LETTER <- A|B|...|Z|a|b|...|z
+ PT_SIZE <- NUMBER[.[NUMBER]]pt
+ NUMBER <- DIGIT{DIGIT}
+ DIGIT <- 0|1|...|9
+
+ For example:
+
+ t
+ 10.0pt 10.0pt
+ root
+ 42.2501pt 6.94444pt 0.0pt
+ nodeA root
+ 59.75012pt 6.94444pt 0.0pt
+ nodeB root
+ 66.44458pt 6.94444pt 1.94444pt
+ nodeC nodeA
+ 52.5001pt 6.94444pt 0.0pt
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include "layout.h"
+
+#define MAX_NAME_SIZE 100 /* Maximum length of input strings. */
+#define SCALE 1 /* Rasters per printer's pt (pt). */
+
+typedef enum {eTop, eLeft} RootPos; /* Position of the root of a tree. */
+
+static
+TreeNode *findNode(char *name,
+ TreeNode **nodes,
+ unsigned nrNodes);
+/* Return a pointer to the first node named <name> in <nodes> where there
+ are <nrNodes> nodes. If no such node exists return NULL.
+
+ Pre:
+ Post: name in nodes -> findNode'.name = name &
+ name notin nodes -> findNode' = NULL
+*/
+
+static
+void printTree(FILE *outfile,
+ Tree tree,
+ unsigned height,
+ unsigned leftWidth,
+ unsigned rightWidth,
+ RootPos rootPos);
+/* Output <tree> to <outfile> as a LaTeX picture. Assume that the tree
+ is <height> high and has widths <leftWidth>, <rightWidth> centered
+ on the top center of the root node of <tree>. The tree will be layed
+ out so that the root will be at <rootPos> (i.e. rotate it if
+ <rootPos> = eLeft).
+
+ Pre: open(outfile) &
+ tree != NULL
+ Post:
+*/
+
+static
+void readTree(FILE *infile,
+ Tree *tree,
+ double *xSeparation,
+ double *ySeparation,
+ RootPos *rootPos);
+/* Read in the tree <tree> from <infile> and also return the desired
+ x & y seperations <xSeparation> and <ySeparation>, and the desired
+ position of the tree's root <rootPos>.
+
+ Pre: open(infile)
+ Post:
+*/
+
+int main(int argc,
+ char **argv)
+{
+ FILE *infile;
+ char infilename[MAX_NAME_SIZE];
+ FILE *outfile;
+ char outfilename[MAX_NAME_SIZE];
+ RootPos rootPos;
+ Tree tree;
+ unsigned treeHeight;
+ unsigned treeLeftWidth; /* Width to the left of the root node. */
+ unsigned treeRightWidth; /* Width to the right of the root node. */
+ double xSeparation; /* Min x distance between nodes. */
+ double ySeparation; /* Min y distance between nodes. */
+
+ /* Construct filenames adding ".tlo" or ".tli" if necessary. */
+ if (argc == 2 &&
+ (strlen(argv[1]) <= 4 ||
+ strcmp(".tlo", &(argv[1][strlen(argv[1])-4])))) { /* No .tlo suffix. */
+ if (MAX_NAME_SIZE <= strlen(argv[1]) + 5) {
+ (void)fprintf(stderr, "Filename too long.\n");
+
+ exit(1);
+ } /* if */
+
+ (void)strcpy(infilename, argv[1]);
+ (void)strcat(infilename, ".tlo");
+
+ (void)strcpy(outfilename, argv[1]);
+ (void)strcat(outfilename, ".tli"); }
+
+ else { /* Has .tlo suffix. */
+ (void)strcpy(infilename, argv[1]);
+
+ (void)strcpy(outfilename, argv[1]);
+ outfilename[strlen(argv[1])-1] = 'i';
+ } /* if */
+
+ /* Open input file. */
+ if (argc != 2 ||
+ NULL == (infile = fopen(infilename, "r"))) {
+ (void)fprintf(stderr, "Usage: %s filename[.tlo]\n", argv[0]);
+
+ exit(1);
+ } /* if */
+
+ readTree(infile, &tree, &xSeparation, &ySeparation, &rootPos);
+
+ shapeTree(tree, &treeHeight, &treeLeftWidth, &treeRightWidth,
+ (unsigned)xSeparation, (unsigned)ySeparation);
+
+ /* Open output file. */
+ if (NULL == (outfile = fopen(outfilename, "w"))) {
+ (void)fprintf(stderr, "Unable to open %s for writing.\n", outfilename);
+
+ exit(1);
+ } /* if */
+
+ printTree(outfile, tree, treeHeight, treeLeftWidth, treeRightWidth, rootPos);
+
+ deleteTree(tree);
+
+ return 0;
+
+} /* main */
+
+static
+TreeNode *findNode(char *name,
+ TreeNode **nodes,
+ unsigned nrNodes)
+{
+ unsigned i;
+
+ for (i = 0; i < nrNodes; i++)
+ if (!strcmp(name, nodes[i]->name))
+ return nodes[i];
+
+ return NULL;
+
+} /* findNode */
+
+static
+void printNode(FILE *outfile,
+ TreeNode *node,
+ int rootX,
+ RootPos rootPos)
+/* Output <node> to <outfile> as part of a LaTeX picture. Assume that the
+ top of the node is to be centered at <rootX>. Position the node to be
+ consistent with a tree root at <rootPos> (i.e. rotate it if
+ <rootPos> = eLeft).
+
+ Pre: open(outfile) &
+ node != NULL
+ Post:
+*/
+
+{
+ switch (rootPos) {
+ case eTop:
+ (void)fprintf(outfile, " \\put(%d,%d){\\shownode{\\%s}}\n",
+ rootX + node->x - (int)node->width/2,
+ -(node->y + (int)node->height - node->depth),
+ node->name);
+ break;
+
+ case eLeft:
+ (void)fprintf(outfile, " \\put(%d,%d){\\shownode{\\%s}}\n",
+ node->y,
+ rootX + node->x - (int)node->width/2 + node->depth,
+ node->name);
+ break;
+ } /* switch */
+} /* printNode */
+
+static
+void printLine(FILE *outfile,
+ int x,
+ int y,
+ int deltaX,
+ int deltaY,
+ unsigned length,
+ RootPos rootPos)
+/* Print a line from (<x>, <y>) in the direction (<deltaX>, <deltaY>) of
+ length <length>. Position the line to be consistent with a tree root at
+ <rootPos> (i.e. rotate it if <rootPos> = eLeft).
+
+ Pre: deltaX in {-1, 0, 1} &
+ deltaY in {-1, 0, 1}
+ Post:
+*/
+{
+ switch (rootPos) {
+ case eTop:
+ (void)fprintf(outfile, " \\put(%d,%d){\\line(%d,%d){%d}}\n",
+ x, y, deltaX, deltaY, length);
+ break;
+
+ case eLeft:
+ (void)fprintf(outfile, " \\put(%d,%d){\\line(%d,%d){%d}}\n",
+ -y, x, -deltaY, deltaX, length);
+ break;
+ } /* switch */
+} /* printLine */
+
+static
+void doPrintTree(FILE *outfile,
+ Tree tree,
+ int rootX,
+ RootPos rootPos)
+/* Output <tree> to <outfile> as part of a LaTeX picture. Assume that the
+ top of the node is to be centered at <rootX>. Position the tree to be
+ consistent with a tree root at <rootPos> (i.e. rotate it if
+ <rootPos> = eLeft).
+
+ Pre: open(outfile) &
+ tree != NULL
+ Post:
+*/
+{
+ unsigned i;
+
+ printNode(outfile, tree, rootX, rootPos);
+
+ if (tree->nrBranches == 1) { /* Down line. */
+ printLine(outfile,
+ rootX + tree->x,
+ -(tree->y + (int)tree->height),
+ 0, -1,
+ tree->branches[0]->y - (tree->y + (int)tree->height),
+ rootPos);
+
+ doPrintTree(outfile, tree->branches[0], rootX+tree->x, rootPos); }
+
+ else if (tree->nrBranches >= 2) {
+ /* Down line. */
+ printLine(outfile,
+ rootX + tree->x,
+ -(tree->y + (int)tree->height),
+ 0, -1,
+ (tree->branches[0]->y - (tree->y + (int)tree->height))/2,
+ rootPos);
+
+ /* Cross bar */
+ printLine(outfile,
+ rootX + tree->x + tree->branches[0]->x,
+ (tree->y + (int)tree->height + tree->branches[0]->y)/-2,
+ 1, 0,
+ tree->branches[tree->nrBranches-1]->x - tree->branches[0]->x,
+ rootPos);
+
+ /* Subnodes. */
+ for (i = 0; i < tree->nrBranches; i++) {
+ /* Down line from crossbar. */
+ printLine(outfile,
+ rootX + tree->x + tree->branches[i]->x,
+ (tree->y + (int)tree->height + tree->branches[i]->y)/-2,
+ 0, -1,
+ (tree->branches[i]->y - (tree->y + (int)tree->height))/2,
+ rootPos);
+
+ doPrintTree(outfile, tree->branches[i], rootX+tree->x, rootPos);
+ } /* for */
+ } /* if */
+} /* doPrintTree */
+
+static
+void printTree(FILE *outfile,
+ Tree tree,
+ unsigned height,
+ unsigned leftWidth,
+ unsigned rightWidth,
+ RootPos rootPos)
+{
+ switch (rootPos) {
+ case eTop:
+ (void)fprintf(outfile, "\\setlength{\\unitlength}{%.2fpt}\n\
+\\begin{picture}(%u,%u)(%d,%d)\n \\thicklines\n",
+ 1.0/SCALE,
+ leftWidth+rightWidth,
+ height,
+ -leftWidth,
+ -height);
+ break;
+
+ case eLeft:
+ (void)fprintf(outfile, "\\setlength{\\unitlength}{%.2fpt}\n\
+\\begin{picture}(%u,%u)(%d,%d)\n \\thicklines\n",
+ 1.0/SCALE,
+ height,
+ leftWidth+rightWidth,
+ 0,
+ -leftWidth);
+ break;
+ } /* switch */
+
+ doPrintTree(outfile, tree, 0, rootPos);
+
+ (void)fprintf(outfile, "\\end{picture}\n");
+
+} /* printTree */
+
+static
+void readTree(FILE *infile,
+ Tree *tree,
+ double *xSeparation,
+ double *ySeparation,
+ RootPos *rootPos)
+{
+ TreeNode *child;
+ unsigned i;
+ TreeNode **nodes;
+ unsigned nrNodes = 0;
+ unsigned maxNodes = 10;
+ double nodeDepth;
+ double nodeHeight;
+ int nodeIsRoot;
+ char nodeName[MAX_NAME_SIZE];
+ double nodeWidth;
+ TreeNode *parent;
+ char parentName[MAX_NAME_SIZE];
+ int rootFound = 0;
+ char tmpChar; /* Scratch */
+ double tmpFloat1; /* Scratch */
+ double tmpFloat2; /* Scratch */
+ double tmpFloat3; /* Scratch */
+ TreeNode **tmpNodes; /* Scratch */
+ char *tmpStr1; /* Scratch */
+ char *tmpStr2; /* Scratch */
+
+ nodes = (TreeNode **)malloc(maxNodes*sizeof(TreeNode *));
+ if (NULL == nodes) {
+ (void)fprintf(stderr, "The tree is too big.\n");
+
+ exit(1);
+ } /* if */
+
+ /* Read rootPos. */
+ if (1 != fscanf(infile, "%1s", &tmpChar) ||
+ !('t' == tmpChar || 'l' == tmpChar)) {
+ (void)fprintf(stderr, "Could not read tree orientation.\n");
+
+ exit(1);
+ } /* if */
+
+ switch (tmpChar) {
+ case 'l': *rootPos = eLeft; break;
+ case 't': *rootPos = eTop; break;
+ } /* switch */
+
+ /* Read xSeparation and ySeparation. */
+ if (2 != fscanf(infile, "%lfpt %lfpt", &(*xSeparation), &(*ySeparation))) {
+ (void)fprintf(stderr, "Could not read x & y separations.\n");
+
+ exit(1);
+ } /* if */
+
+ *xSeparation *= SCALE;
+ *ySeparation *= SCALE;
+
+ /* Read nodes. */
+ while (EOF != fscanf(infile, "%s", nodeName)) {
+ nodeIsRoot = !strcmp(nodeName, "root");
+ if (nodeIsRoot) {
+ if (rootFound) {
+ (void)fprintf(stderr, "Too many root nodes.\n");
+
+ exit(1);
+ } /* if */
+
+ rootFound = 1;
+ parentName[0] = '\0'; }
+
+ else if ((TreeNode *)NULL != findNode(nodeName, nodes, nrNodes)) {
+ /* Node already exists. */
+ (void)fprintf(stderr,
+ "The node name `%s' has been used more than once.\n",
+ nodeName);
+
+ exit(1);
+ } /* if */
+
+
+ else if (1 != fscanf(infile, "%s", parentName)) {/* Not root node. */
+ (void)fprintf(stderr, "Could not read parent of %s.\n", nodeName);
+
+ exit(1);
+ } /* if */
+
+ /* Read node width height and depth. */
+ if (3 != fscanf(infile, "%lfpt %lfpt %lfpt",
+ &tmpFloat1, &tmpFloat2, &tmpFloat3)) {
+ (void)fprintf(stderr, "Could not read width, height and depth of %s.\n",
+ nodeName);
+
+ exit(1);
+ } /* if */
+
+ switch (*rootPos) {
+ case eTop:
+ nodeWidth = tmpFloat1;
+ nodeHeight = tmpFloat2 + tmpFloat3;
+ nodeDepth = tmpFloat3;
+ break;
+
+ case eLeft:
+ nodeWidth = tmpFloat2 + tmpFloat3;
+ nodeHeight = tmpFloat1;
+ nodeDepth = tmpFloat3;
+ break;
+ } /* switch */
+
+ /* Add node. */
+ nrNodes++;
+ if (nrNodes > maxNodes) { /* Resize <nodes> array. */
+ maxNodes *= 2;
+ tmpNodes = (TreeNode **)realloc(nodes,
+ (unsigned)(maxNodes*sizeof(TreeNode *)));
+ if (NULL == tmpNodes) {
+ (void)fprintf(stderr, "The tree is too big.\n");
+
+ exit(1);
+ } /* if */
+
+ if (tmpNodes != nodes) (void)free(nodes);
+
+ nodes = tmpNodes;
+
+ } /* if */
+
+ tmpStr1 = malloc((size_t)((strlen(nodeName)+1)*sizeof(char)));
+ if (NULL == tmpStr1) {
+ (void)fprintf(stderr, "The tree is too big.\n");
+
+ exit(1);
+ } /* if */
+
+ (void)strcpy(tmpStr1, nodeName);
+
+ tmpStr2 = malloc((size_t)((strlen(parentName)+1)*sizeof(char)));
+ if (NULL == tmpStr2) {
+ (void)fprintf(stderr, "The tree is too big.\n");
+
+ exit(1);
+ } /* if */
+
+ (void)strcpy(tmpStr2, parentName);
+
+ nodes[nrNodes-1] = newTree(tmpStr1, tmpStr2,
+ (unsigned)(SCALE*nodeHeight),
+ (unsigned)(SCALE*nodeWidth),
+ (unsigned)(SCALE*nodeDepth));
+
+ if ((TreeNode *)NULL == nodes[nrNodes-1]) {
+ (void)fprintf(stderr, "The tree is too big.\n");
+
+ exit(1);
+ } /* if */
+
+ } /* while */
+
+ if (!rootFound) {
+ (void)fprintf(stderr, "No root node.\n");
+
+ exit(1);
+ } /* if */
+
+ *tree = findNode("root", nodes, nrNodes); /* The root node. */
+
+ /* Construct tree. */
+ for (i = 0; i < nrNodes; i++) {
+ child = nodes[i];
+ if (child != *tree) {
+ parent = findNode(child->parent, nodes, nrNodes);
+ if ((TreeNode *)NULL == parent) {
+ (void)fprintf(stderr, "The parent (%s) of node %s does not exist.\n",
+ child->parent, parent->name);
+
+ exit(1);
+ } /* if */
+
+ if (!addBranch(child, parent)) {
+ (void)fprintf(stderr, "The tree is too big.\n");
+
+ exit(1);
+ } /* if */
+ } /* if */
+ } /* for */
+} /* readTree */
diff --git a/macros/latex209/contrib/trees/tree_tex/treetex.sty b/macros/latex209/contrib/trees/tree_tex/treetex.sty
new file mode 100644
index 0000000000..9ff17e51c4
--- /dev/null
+++ b/macros/latex209/contrib/trees/tree_tex/treetex.sty
@@ -0,0 +1,107 @@
+% Author: Anthony Bloesch
+% Title: tree.sty
+%
+% Copyright (C) Anthony Bloesch 1993
+%
+% Version: 1.0
+%
+% Purpose: Allow the automatic layout of n-ary trees with arbitrary node
+% sizes in LaTeX.
+%
+% Usage: \begin{tree}[ROOT_POSITION]{TREE_NAME}
+% \rootnode{ ... }
+% \treenode{NODE_NAME1}{PARENT_1}{ ... }
+% .
+% .
+% .
+% \end{tree}
+%
+% To layout a tree:
+% 1. Describe the tree in a tree environment.
+% 2. Run LaTeX on the file.
+% 3. Run treetex on the generated .tlo file to generate a .tli file.
+% 4. Run LaTeX again.
+% 5. If the tree is ever changed repeat steps 3 and 4.
+%
+% Example:
+% \begin{tree}{testtreea}
+% \rootnode{root node}
+% \treenode{nodeA}{root}{left root child}
+% \treenode{nodeB}{root}{right root child}
+% \treenode{nodeC}{nodeA}{nodeA child}
+% \end{tree}
+%
+% The argument of the environment (e.g. "testtreea") gives the
+% name of the file to be generated. Each tree must have
+% exactly one root node which is defined with the \rootnode
+% macro; its argument is the contents of the node. All other
+% nodes are defined with the \treenode macro. The first
+% argument of \treenode is its name (consisting only of
+% alphabetical characters); the second is its parent's name;
+% and the third is its contents.
+%
+% The tree environment has an optional environment describing
+% where the root of the tree should go relative to the tree.
+% If the parameter is `t' (the default) then the root goes at the
+% top of the tree with branches hanging down from it;
+% otherwise the parameter must be a `l' and the root goes at
+% the left of the tree with the branches spreading to the right.
+%
+% Example:
+% \begin{tree}[l]{testtreea}
+% \rootnode{root node}
+% \treenode{nodeA}{root}{left root child}
+% \treenode{nodeB}{root}{right root child}
+% \treenode{nodeC}{nodeA}{nodeA child}
+% \end{tree}
+%
+% Children of a node will be layed out, left to right, in the
+% same order as they appear in the tree environment.
+%
+% The tree environment will generate a warning when the .tli
+% file has not been generated and inconsistencies between the
+% .tlo and .tli files are detected.
+%
+% The minimum seperation between nodes in the x and y
+% directions can be changed setting the lengths
+% \treexseparation and \treeyseparation.
+
+\newlength\treexseparation
+\treexseparation 10pt
+\newlength\treeyseparation
+\treeyseparation 10pt
+
+\newwrite\@tlo
+
+\def\tree{\@ifnextchar[{\@xtree}{\@xtree[t]}}
+\def\@xtree[#1]#2{\bgroup
+ \def\@treename{#2}
+ \immediate\openout\@tlo=\@treename.tlo
+ \immediate\write\@tlo{#1}
+ \immediate\write\@tlo{\the\treexseparation\space\the\treeyseparation}
+ \def\@printwdhtdp##1{
+ \setbox\@tempboxa\hbox{##1}
+ \edef\tempa{\immediate\write\@tlo{\space\space\the\wd\@tempboxa\space
+ \the\ht\@tempboxa\space\the\dp\@tempboxa}}
+ \tempa
+ \relax}
+ \def\rootnode##1{
+ \def\root{##1}
+ \immediate\write\@tlo{root }\@printwdhtdp{##1}}
+ \def\treenode##1##2##3{
+ \expandafter\def\csname ##1\endcsname{##3}
+ \immediate\write\@tlo{##1 ##2 }\@printwdhtdp{##3}}
+}
+
+\def\endtree{
+ \immediate\closeout\@tlo
+ \def\shownode##1{\edef\@tempa{\expandafter\@cdr\string ##1\@nil}%
+ \@ifundefined{\@tempa}{\@warning{Run treetex on \@treename}}{##1}}
+ \openin1=\@treename.tli
+ \ifeof1
+ \@warning{Run treetex on \@treename}
+ \fbox{\fbox{Run treetex on \@treename.}}
+ \else
+ \closein1 \relax\@@input\@treename.tli
+ \fi
+ \egroup}
diff --git a/macros/latex209/contrib/trees/vanroose/trees.pdf b/macros/latex209/contrib/trees/vanroose/trees.pdf
new file mode 100644
index 0000000000..b9a228bf20
--- /dev/null
+++ b/macros/latex209/contrib/trees/vanroose/trees.pdf
Binary files differ
diff --git a/macros/latex209/contrib/trees/vanroose/trees.sty b/macros/latex209/contrib/trees/vanroose/trees.sty
new file mode 100644
index 0000000000..bb5d5e0ff1
--- /dev/null
+++ b/macros/latex209/contrib/trees/vanroose/trees.sty
@@ -0,0 +1,86 @@
+%---------- trees.sty --------------------
+% Peter Vanroose, 18 april 1990.
+\newcount\branchwidth\newcount\xcoord\newcount\ycoord\newcount\coordstep
+\def\branchlabels#1#2#3{\edef\labela{#1}\edef\labelb{#2}\edef\labelc{#3}}
+\branchlabels012
+%
+\def\root(#1,#2) #3.{\catcode32=9 % ignore spaces
+ % #3 is the node label of the root
+ \expandafter\xdef\csname nodex#3\endcsname{#1}
+ \expandafter\xdef\csname nodey#3\endcsname{#2}
+ \put(#1,#2){
+ \put(0,0){\line(-1,0)6}\put(-6,0){\line(0,-1)3}\put(-9,-3){\line(1,0)6}}}
+%
+\def\branch#1#2#3:#4,#5.{ \branchwidth=#1
+ \xcoord=\expandafter\number\csname nodex#3\endcsname
+ \ycoord=\expandafter\number\csname nodey#3\endcsname
+ \edef\coord{(\number\xcoord,\number\ycoord)}
+ \advance\xcoord by 12 % #4,#5 are the labels of the childs
+ \expandafter\xdef\csname nodex#4\endcsname{\number\xcoord}
+ \expandafter\xdef\csname nodex#5\endcsname{\number\xcoord}
+ \ifcase\branchwidth
+ \advance\ycoord by 24\coordstep=-48 \or % case 0
+ \advance\ycoord by 12\coordstep=-24 \or % case 1
+ \advance\ycoord by 6\coordstep=-12 \or % case 2
+ \advance\ycoord by 3\coordstep=- 6 \fi % case 3
+ \expandafter\xdef\csname nodey#4\endcsname{\number\ycoord}
+ \advance\ycoord by \coordstep
+ \expandafter\xdef\csname nodey#5\endcsname{\number\ycoord}
+ \expandafter\put\coord{
+ \put(0,0){\circle*1}\put(0,1.5){\makebox(0,0){\scriptsize #2}}
+ \ifcase\branchwidth
+ \put(0,0){\line(1,2){12}}\put(0,0){\line(1,-2){12}}
+ \put(5,12){\tiny$\labela$}\put(5,-12){\tiny$\labelb$} \or % case 0
+ \put(0,0){\line(1,1){12}}\put(0,0){\line(1,-1){12}}
+ \put(6,7){\tiny$\labela$}\put(6,-8){\tiny$\labelb$} \or % case 1
+ \put(0,0){\line(2,1){12}}\put(0,0){\line(2,-1){12}}
+ \put(6,3.6){\tiny$\labela$}\put(6,-5){\tiny$\labelb$} \or % case 2
+ \put(0,0){\line(4,1){12}}\put(0,0){\line(4,-1){12}}
+ \put(6,2){\tiny$\labela$}\put(6,-3){\tiny$\labelb$} \fi % case 3
+}}
+%
+\def\tbranch#1#2#3:#4,#5,#6.{
+ \branchwidth=#1
+ \xcoord=\expandafter\number\csname nodex#3\endcsname
+ \ycoord=\expandafter\number\csname nodey#3\endcsname
+ \edef\coord{(\number\xcoord,\number\ycoord)}
+ \advance\xcoord by 12
+ \expandafter\xdef\csname nodex#4\endcsname{\number\xcoord}
+ \expandafter\xdef\csname nodex#5\endcsname{\number\xcoord}
+ \expandafter\xdef\csname nodex#6\endcsname{\number\xcoord}
+ \ifcase\branchwidth
+ \advance\ycoord by 24\coordstep=-24 \or % case 0
+ \advance\ycoord by 12\coordstep=-12 \or % case 1
+ \advance\ycoord by 6\coordstep= -6 \or % case 2
+ \advance\ycoord by 3\coordstep= -3 \fi % case 3
+ \expandafter\xdef\csname nodey#4\endcsname{\number\ycoord}
+ \advance\ycoord by \coordstep
+ \expandafter\xdef\csname nodey#5\endcsname{\number\ycoord}
+ \advance\ycoord by \coordstep
+ \expandafter\xdef\csname nodey#6\endcsname{\number\ycoord}
+ \expandafter\put\coord{
+ \put(0,0){\circle*1}\put(0,1.5){\makebox(0,0){\scriptsize #2}}
+ \ifcase\branchwidth
+ \put(0,0){\line(1,2){12}}\put(0,0){\line(1,0){12}}\put(0,0){\line(1,-2){12}}
+ \put(5,12){\tiny$\labela$}\put(5,0.6){\tiny$\labelb$}\put
+ (5,-12){\tiny$\labelc$} \or % case 0
+ \put(0,0){\line(1,1){12}}\put(0,0){\line(1,0){12}}\put(0,0){\line(1,-1){12}}
+ \put(6,7){\tiny$\labela$}\put(6,0.5){\tiny$\labelb$}\put
+ (6,-8){\tiny$\labelc$} \or % case 1
+ \put(0,0){\line(2,1){12}}\put(0,0){\line(1,0){12}}\put(0,0){\line(2,-1){12}}
+ \put(6,3.6){\tiny$\labela$}\put(6,0.5){\tiny$\labelb$}\put
+ (6,-5){\tiny$\labelc$} \or % case 2
+ \put(0,0){\line(4,1){12}}\put(0,0){\line(1,0){12}}\put(0,0){\line(4,-1){12}}
+ \put(6,2){\tiny$\labela$}\put(6,0.25){\tiny$\labelb$}\put
+ (6,-3){\tiny$\labelc$} \fi % case 3
+}}
+%
+\def\leaf#1#2#3.{
+ \xcoord=\expandafter\number\csname nodex#3\endcsname
+ \ycoord=\expandafter\number\csname nodey#3\endcsname
+ \edef\coord{(\number\xcoord,\number\ycoord)}
+ \expandafter\put\coord{
+ \put(0,0){\circle*1}\put(0,1.5){\makebox(0,0){\scriptsize #1}}
+ \put(2,-0.6){\makebox(0,0)[l]{#2}}}}
+%
+%-------- end of trees.sty -------------
diff --git a/macros/latex209/contrib/trees/vanroose/trees.tex b/macros/latex209/contrib/trees/vanroose/trees.tex
new file mode 100644
index 0000000000..8e839bf65c
--- /dev/null
+++ b/macros/latex209/contrib/trees/vanroose/trees.tex
@@ -0,0 +1,64 @@
+\documentstyle[trees,fullpage]{article}
+
+\title{{\tt trees.sty}: A Macro for Drawing Binary \\
+ or Ternary Trees}
+
+\author{Peter Vanroose \\
+ peter@dit.lth.se}
+\date{18 april 1990}
+
+\begin{document}
+
+\maketitle
+
+The following macros let you draw a (binary or ternary) tree of any size.
+For each "internal node", you only have to specify which are the descending
+nodes, with a \verb|\branch| command (\verb|\tbranch| for ternary node.).
+To this end, nodes are given a label (only used internally!). These macros
+will give you some ideas on designing similar things for, e.g.,
+digital circuits.
+
+Trees are constructed with labels on the branches (default 0 and 1), and
+with text (e.g., its name or value) on the nodes. The first parameter to
+\verb|\branch| (0, 1, 2 or 3) determines the steepness of the branches.
+
+Example:
+\small
+\begin{verbatim}
+\begin{picture}(100,100)(-50,10)
+\unitlength=2mm
+\branchlabels ABC % 012 is the default
+\root(2,10) 0. % root at absolute coordinate (2,10)
+ % its (internally used) label is 0
+ % the space before the 0 is obligatory
+\branch2{16} 0:1,2. % node 0 (i.e., the root) has children 1 and 2
+ % the text "1.00" is written above it
+ % space is optional, :,. are obligatory
+ \leaf{4}{$u_1$} 1. % node 1 is a leaf
+ % "0.45" written above, "$u_1$" to the right
+ \branch2{12} 2:3,7. % branch to node 3 goes up, and has label A
+ \tbranch2{9} 3:4,5,6.
+ \leaf{4}{$u_3$}4. % the symbols 0--7 can be replaced by anything
+ \leaf{3}{$u_4$}5.
+ \leaf{2}{$u_5$}6.
+ \leaf{3}{$u_2$} 7.
+\end{picture}
+\end{verbatim}
+\normalsize
+will typeset something like:
+\begin{flushleft}
+\begin{picture}(100,100)(-50,10)
+\unitlength=2mm
+\branchlabels ABC
+\root(2,10) 0.
+\branch2{16} 0:1,2.
+ \leaf{4}{$u_1$} 1.
+ \branch2{12} 2:3,7.
+ \tbranch2{9} 3:4,5,6.
+ \leaf{4}{$u_3$}4.
+ \leaf{3}{$u_4$}5.
+ \leaf{2}{$u_5$}6.
+ \leaf{3}{$u_2$} 7.
+\end{picture}
+\end{flushleft}
+\end{document}
diff --git a/macros/latex209/contrib/tugboat/ltugboat.sty b/macros/latex209/contrib/tugboat/ltugboat.sty
new file mode 100644
index 0000000000..9f86d324bd
--- /dev/null
+++ b/macros/latex209/contrib/tugboat/ltugboat.sty
@@ -0,0 +1,718 @@
+%% @latexfile{
+%% filename="ltugboat.sty",
+%% version="1.19",
+%% date="16-Nov-1993",
+%% filetype="LaTeX macros for TUGboat",
+%% copyright="Copyright (C) TeX Users Group.
+%% Copying of this file is authorized only if either:
+%% (1) you make absolutely no changes to your copy, OR
+%% (2) if you do make changes, you first rename it to some
+%% other name.",
+%% author="TeX Users Group",
+%% address="TeX Users Group,
+%% P. O. Box 869,
+%% Santa Barbara, CA 93102,
+%% USA",
+%% telephone="805-963-1338",
+%% email="Internet: TUGboat@Math.AMS.org",
+%% codetable="ISO/ASCII",
+%% checksumtype="line count",
+%% checksum="718",
+%% keywords="tex users group, tugboat, latex",
+%% abstract="This file contains the LaTeX-based macros
+%% for preparation of TUGboat, the Communications
+%% of the TeX Users Group."
+%% }
+%% *********************************************************
+%%
+%% Use of this file also requires the following files:
+%% ARTICLE.STY
+%% ART10.STY
+%% TUGBOAT.CMN (version 1.08+)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\thistubstyle{latex}
+\def\fileversion{v1.19}
+\def\filedate{16 November 93}
+
+% Change history at bottom of file
+% ***** LTUGBOAT.STY *****
+%
+%
+% Incorporates ideas and elements from these TUGboat authors:
+% Adrian Clark
+% Frank Mittelbach
+% Rainer Sch\"opf
+
+% Stop here if this file has been read already
+
+\ifx\tugstyloaded@\thistubstyle \tugstyinit
+ \endinput\else\let\tugstyloaded@\thistubstyle\fi
+
+\typeout{Document Style `ltugboat' \fileversion \space\space <\filedate>}
+
+% **********************************************************************
+%
+% Load macros required by this style, but only if it wasn't done already
+
+\ifx\c@section\undefined \input article.sty \fi
+
+% Macros common to ltugboat.sty and tugboat.sty
+
+\input tugboat.cmn
+
+
+% ***********************************************************************
+%
+% Fonts
+
+
+% install additional fonts as appropriate for plain/old LaTeX or NFSS:
+% provide definition of \tensl if NFSS is loaded
+
+\ifx\selectfont\undefined % old LaTeX
+ \font\sevbf=cmbx7
+ \font \svtnsfb=cmssbx10 scaled \magstep3 % for section titles;
+%
+ \font \twlsfb=cmssbx10 scaled \magstep1 % definition of \LaTeX
+ \newfam\sectitlefam % requires a family
+ \textfont\sectitlefam=\svtnsfb
+ \scriptfont\sectitlefam=\twlsfb
+ \def\sectitlefont{\fam\sectitlefam\svtnsfb\baselineskip\stbaselineskip}
+%
+ \font\egtsl=cmsl8
+ \font\tenuit=cmu10 % for Editor's Note
+%
+% redo definition of 10pt from latex (lfonts), to install \sevbf as
+% \*scriptfont of \bffam and \egtsl in \slfam
+% \*scriptfont of \bffam for 9pt
+ \toks0=\expandafter{\xpt\scriptfont\bffam\sevbf \scriptscriptfont\bffam\sevbf
+ \scriptfont\slfam\egtsl \scriptscriptfont\slfam\egtsl}
+ \xdef\xpt{\the\toks0}
+ \toks0=\expandafter{\ixpt\scriptfont\bffam\sevbf
+ \scriptscriptfont\bffam\sevbf}
+ \xdef\ixpt{\the\toks0}
+\else % NFSS in effect
+% for section titles; include explicit definition of \La (for \LaTeX)
+ \def\sectitlefont{\def\La{\leavevmode L\raise.42ex
+ \hbox{\fontsize{12}{12pt}\selectfont\kern-.4em A}}%
+ \fontfamily{cmss}\fontseries{bx}\fontshape{n}%
+ \fontsize{17}{\stbaselineskip}\selectfont}
+ \def\tensl{\fontfamily{cmr}\fontseries{m}\fontshape{sl}\fontsize{10}{12pt}%
+ \selectfont}
+ \def\tubfont{\shape{sl}\selectfont}
+ \def\tenuit{\fontfamily{cmr}\fontseries{m}\fontshape{u}\fontsize{10}{12pt}%
+ \selectfont}
+\fi
+
+% ***********************************************************************
+%
+% normal TUGboat dimensions, glue values, penalties
+
+\@twosidetrue % for odd/even asymmetry in running heads
+\twocolumn % two columns
+\sloppy % make those columns justify
+%\flushbottom % but ensure they line up
+\columnsep 1.5pc % space between columns
+\columnwidth 18.75pc % width of each column
+\parindent \normalparindent % paragraph indent
+\parskip 0pt % no inter-paragraph space
+\leftmargini 2em % unchanged
+\leftmarginv .5em % unchanged
+\leftmarginvi .5em % unchanged
+\oddsidemargin 0pt % was 42pt
+\evensidemargin 0pt % was 84pt
+\topmargin -2.5pc % was 0pt
+\headheight 12pt % height of running head, unchanged
+\headsep 20pt % distance between header and text
+\marginparwidth 48pt % don't use marginal notes
+\marginparsep 10pt % in TUGboat
+\textheight 54pc % height of text on page
+\textwidth 39pc % total width of a page
+
+
+\partopsep=\z@
+\topsep=3pt plus1pt minus1pt
+\parsep=3pt plus 1pt minus 1pt
+\itemsep=\parsep
+
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip=3pt plus 3pt minus 1pt \belowdisplayskip=\abovedisplayskip
+\abovedisplayshortskip=\z@ plus3pt \belowdisplayshortskip=1pt plus3pt minus1pt}
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip=2.5pt plus2.5pt minus1pt\belowdisplayskip=\abovedisplayskip
+\abovedisplayshortskip=\z@ plus2pt \belowdisplayshortskip=1pt plus2pt minus1pt}
+
+\def\SMC{\small}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip=3pt plus 3pt minus 1pt \belowdisplayskip=\abovedisplayskip
+\abovedisplayshortskip=\z@ plus3pt \belowdisplayshortskip=1pt plus3pt minus1pt}
+
+
+% ***********************************************************************
+%
+% Lists
+
+\def\@listi{\leftmargin\leftmargini\parsep=1pt plus 1pt minus 1pt
+ \itemsep=\parsep
+ \listparindent=1em
+ }
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth=\leftmarginii \advance\labelwidth-\labelsep
+ \topsep=2pt plus 1pt minus 1pt
+ \parsep=1pt plus 1pt minus 1pt
+ \itemsep=\parsep
+ \listparindent=1em
+ }
+
+\def\@listiii{\leftmargin=\leftmarginiii
+ \labelwidth=\leftmarginiii \advance\labelwidth-\labelsep
+ \topsep=1pt plus 1pt minus 1pt
+ \parsep=\z@
+ \itemsep=\topsep
+ \listparindent=1em
+ }
+
+
+% ***********************************************************************
+%
+% Titles, authors, addresses, signatures
+
+\setbox\T@stBox=\hbox{\sectitlefont O}
+\newdimen\stfontheight \stfontheight=\ht\T@stBox
+\def \sectitle#1{\SecTitletrue \def\s@ctitle{#1}}
+
+\newcount\authornumber
+\authornumber=0
+
+\def\author#1{%
+ \global\advance\authornumber\@ne
+ \expandafter\def\csname theauthor\number\authornumber\endcsname
+ {\ignorespaces#1\unskip}%
+ \expandafter\let\csname theaddress\number\authornumber\endcsname\relax
+ \expandafter\let\csname thenetaddress\number\authornumber\endcsname\relax
+ }
+
+\def\address#1{%
+ \expandafter\def\csname theaddress\number\authornumber\endcsname
+ {\ignorespaces#1\unskip}}
+
+\def\network#1{\def\@network{#1: }}
+\def\netaddress{%
+ \begingroup
+ \let\@network\relax
+ \@ifnextchar[{\@netaddress}{\@netaddress[]}%
+ }
+
+{\makeactive\@
+ \gdef\netaddrat{\makeactive\@\def@{\char"40\discretionary{}{}{}}}
+ \makeactive\%
+ \gdef\netaddrpercent{\makeactive\%\def%{\char"25\discretionary{}{}{}}}
+}
+
+\def\@netaddress[#1]{#1\@sanitize\makespace\ \makeactive\@\makeactive\%%
+ \@@netaddress}
+
+\def\@@netaddress#1{%
+ \toks@{#1}%
+ \ifx\@network\relax \def\@@network{}%
+ \else \def\@@network{\@network}\fi
+ \expandafter\xdef\csname thenetaddress\number\authornumber\endcsname
+ {{\noexpand\rm\@@network}%
+ {\noexpand\netaddrat\noexpand\netaddrpercent\noexpand\net
+ \ignorespaces\the\toks@\unskip}}%
+ \endgroup
+ }
+
+\def\net{\tt}
+
+% Overrides to default author and signature formats
+
+\def\authorlist#1{\def\@author{#1}}
+\def\@author{\@defaultauthorlist}
+
+
+\def\maketitle{\par
+ \ifdim\PreTitleDrop > 0pt
+ \loop
+ \ifdim \PreTitleDrop > \textheight
+ \vbox{}\vfil\eject
+ \advance\PreTitleDrop by -\textheight
+ \repeat
+ \vbox to \PreTitleDrop{}
+ \global\PreTitleDrop=0pt
+ \fi
+ \begingroup
+ \setcounter{footnote}{0}
+ \def\thefootnote{\fnsymbol{footnote}}
+% \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}}
+ \@maketitle
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+% \let\maketitle\relax
+% \let\@maketitle\relax
+ \gdef\@thanks{}%\gdef\@author{}\gdef\@title{}%
+%\let\thanks\relax
+ }
+
+\newif\ifWideSecTitle
+\def\@maketitle{\ifSecTitle \global\SecTitlefalse
+ \T@stDimen=\hsize
+ \ifWideSecTitle \hsize=\textwidth \global\WideSecTitlefalse \fi
+ \@sectitle{\s@ctitle}%
+ \hsize=\T@stDimen
+ \else \vskip\AboveTitleSkip
+ \kern\topskip
+ \hrule height\z@ depth\z@ width 10pt
+ \kern-\topskip
+ \kern-\strulethickness
+ \hrule height\strulethickness depth\z@
+ \kern\medskipamount
+ \nobreak
+ \fi
+ {\nohyphens \interlinepenalty\@M
+ \setbox0=
+ \hbox{\let\thanks\@gobble
+ \let\\=\quad
+ \let\and=\quad
+ \ignorespaces\@author}%
+ {\noindent\bf\raggedright\ignorespaces\@title\endgraf}%
+ \ifdim \wd0 < 5pt % omit if author is null
+ \else \nobreak \vskip 4pt % 4pt + \BelowTitleSkip = \baselineskip
+ {\leftskip=\normalparindent
+ \raggedright
+ \def\and{\unskip\\}%
+ \noindent\@author\endgraf}%
+ \fi \nobreak \vskip\BelowTitleSkip }}
+
+\def\dedication{\bgroup\raggedright\let\MF=\slMF\noindent\it\ignorespaces}
+\def\enddedication{\endgraf\egroup\medskip}
+
+\def\abstract{
+\section*{Abstract}
+}
+\def\endabstract{}
+
+\def\longabstract{
+ \section*{Abstract}
+ \bgroup\small}
+\def\endlongabstract{\endgraf\egroup
+ \vspace{.25\baselineskip}
+ \begin{center}
+ {$--*--$}
+ \end{center}
+ \vspace{.5\baselineskip}}
+
+% Redefine style of section headings to look more like TUGboat.
+% Start with definitions from art10.sty . (Only \section correct so far.)
+%
+% \vskip 8pt \vskip\parskip before; \vskip 4pt after
+% Negative beforeskip suppresses following parindent.
+
+\def\section{\@startsection {section}{1}{\z@}{-8pt}{4pt}%
+ {\normalsize\bf\raggedright\hyphenpenalty=\@M}}
+
+\def\subsection{\@startsection{subsection}{2}{\z@}{-8pt}{4pt}%
+ {\normalsize\bf\raggedright\hyphenpenalty=\@M}}
+
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-8pt}{4pt}%
+ {\normalsize\bf\raggedright\hyphenpenalty=\@M}}
+
+\def\paragraph{\@startsection
+% {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}{\normalsize\bf}}
+ {paragraph}{4}{\z@}{2.5ex plus 1ex}{-1em}{\normalsize\bf}}
+
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{2.5ex plus 1ex}{-1em}{\normalsize\bf}}
+
+% Modify \appendix from art10.sty, to add ``Appendix''
+% 1 May 89 Mittelach comments that we need to put ``Appendix''
+% somewhere other than \thesection if \tableofcontents is used.
+%\def\appendix{\par
+% \setcounter{section}{0}
+% \setcounter{subsection}{0}
+% \def\thesection{Appendix \Alph{section}}}
+
+
+\def \EdNote{{\tenuit Editor's note:\enspace }}
+
+
+% ***********************************************************************
+%
+% Tables of contents
+
+% The original versions of the table of contents entries justify long
+% headings, which gives spaced out text which looks awful. We change
+% this to typeset headings \raggedright instead. We also use lightface
+% rather than bold, and decrease the skip between entries, since
+% TUGboat contents lists usually don't go to levels below \section.
+%
+% Modifications mainly by Nelson Beebe, with indentation to make macros
+% more readable.
+
+% \l@section{TOC-ENTRY}{PAGE-NUMBER}
+
+\def\l@section#1#2{%
+ \addpenalty{\@secpenalty}%
+ \addvspace{.1em plus 1pt}%
+ \@tempdima 1.5em
+ \begingroup
+ \parindent \z@
+ \rightskip \z@ % article style makes \rightskip > 0
+ \parfillskip \z@
+ \advance\leftskip\@tempdima% indent text by width of \numberline
+ \hskip -\leftskip % move left for section number on first line
+ \raggedright % NEW: no flushright text in tocs
+ #1% toc-entry text
+ \unskip % NEW: discard intervening space
+ \nobreak
+ \hfill % was \hfil, but need stronger version
+ \nobreak
+ \hbox to \@pnumwidth {\hss #2}% page number
+ \par
+ \endgroup
+}
+
+%% OLD: \def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\l@figure{\@dottedtocline{1}{0em}{1.5em}}
+\let\l@table=\l@figure
+%
+%% Increase \@pnumwidth by 0.45em (4.5pt) to avoid overfull box
+%% from bad default setting.
+%% OLD: \def\@pnumwidth{1.55em}
+\def\@pnumwidth{2em}
+%
+%% Modification of \@dottedtocline from latex.tex to produce ragged right
+%% entries instead of very spaced out entries.
+\def\@dottedtocline#1#2#3#4#5{%
+ \ifnum #1>\c@tocdepth
+ \else
+ \vskip \z@ plus .2pt
+ {%
+ \leftskip #2\relax
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ \parindent #2\relax
+ \@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima #3\relax % tempdima := NUMWIDTH
+ \advance\leftskip \@tempdima % leftskip := INDENT + NUMWIDTH
+ \hbox{}%
+ \hskip -\leftskip
+ {%
+ \raggedright
+ #4
+ \unskip
+ \nobreak
+ \hfill
+ \nobreak
+ \hbox to\@pnumwidth{\hfil\rm #5}%
+ \par
+ }%
+ \par
+ }%
+ \fi
+}
+
+
+% ***********************************************************************
+%
+% Footnotes
+
+\long\def\@makefntext#1{\parindent 1em\noindent\hbox to 2em{}%
+ \llap{\@makefnmark}\null$\mskip5mu$#1}
+% \llap{$^{\@thefnmark}\,$}#1}
+
+
+% ***********************************************************************
+%
+% Figures
+
+\def\fnum@figure{{\bf Figure \thefigure}}
+
+
+% ***********************************************************************
+%
+% Quotes
+
+\def\quote{\list{}{\rightmargin.5\leftmargin}\item[]}
+
+% From Dominik Wujastyk's font article. First paragraph of a quotation
+% will not be indented, and right margin is decreased for narrow columns.
+\renewcommand{\quotation}{\list{}{\listparindent 1.5em
+ \rightmargin.5\leftmargin\parsep 0pt plus 1pt}\item[]}
+
+
+% ***********************************************************************
+%
+% Bibliography
+
+% Changes made only to accomodate local file naming conventions
+
+\def\bibliography#1{%
+ \if@filesw\immediate\write\@auxout{\string\bibdata{\@tubfilename{#1}}}\fi
+ \@input{\jobname.bbl}}
+
+\def\bibliographystyle#1{\if@filesw\immediate\write\@auxout
+ {\string\bibstyle{\@tubfilename{#1}}}\fi}
+
+% Replace \sloppy by something not quite as sloppy
+
+\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+% \sloppy
+ \tolerance 8000 \hfuzz .5\p@ \vfuzz .5\p@
+ \clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+%\def\sloppy{\tolerance 10000 \hfuzz .5\p@ \vfuzz .5\p@}
+
+
+% ***********************************************************************
+%
+% Signature
+
+% Moved to TUGboat.com
+
+
+% ***********************************************************************
+%
+% \document, \enddocument
+
+% changed \input to \@@input; either use the new functionality or be real
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+\if@filesw \immediate\closeout\@mainaux
+\def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+\def\bibcite{\@testdef b}\@tempswafalse \makeatletter\@@input \jobname.aux
+\if@tempswa \@warning{Label(s) may have changed. Rerun to get
+cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+
+% ***********************************************************************
+%
+% Running heads, output routine
+
+\def \rtitlex{\def\tubfont{\normalsize\rm}\TUB, \volx }
+
+\def\PrelimDraftfooter{%
+ \dlap{\kern\textheight\kern3pc
+ \rlap{\hbox to \pagewd{\midrtitle\hfil\midrtitle}}
+ }}
+
+% registration marks; these are temporarily inserted in the running head
+\def\MakeRegistrationMarks{}
+\def\UseTrimMarks{%
+ \def\MakeRegistrationMarks{%
+ \ulap{\rlap{%
+ \vbox{\dlap{\vbox to\trimlgt{\vfil\botregister}}%
+ \topregister\vskip \headmargin \vskip 10pt}}}}%
+ }
+
+\def\@oddhead{\MakeRegistrationMarks\PrelimDraftfooter
+ \normalsize\csname normalshape\endcsname\rm
+ \rtitlex\qquad\midrtitle \hfil \thepage}
+\def\@evenhead{\MakeRegistrationMarks\PrelimDraftfooter
+ \normalsize\csname normalshape\endcsname\rm
+ \thepage\hfil\midrtitle\qquad\rtitlex}
+\def\@oddfoot{}
+\def\@evenfoot{}
+
+\def\ps@headings{}
+\pagestyle{headings}
+
+% Modified to alter \brokenpenalty across columns
+\def\@outputdblcol{\if@firstcolumn \global\@firstcolumnfalse
+ \global\setbox\@leftcolumn\box\@outputbox
+ \global\brokenpenalty10000
+ \else \global\@firstcolumntrue
+ \global\brokenpenalty100
+ \setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
+ {\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil
+ \hbox to\columnwidth{\box\@outputbox \hss}}}\@combinedblfloats
+ \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
+ \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup
+ \fi}
+
+
+% ***********************************************************************
+%
+% Macros for Mittelbach's self-documenting style
+
+\def\SelfDocumenting{%
+ \setlength\textwidth{31pc}
+ \onecolumn
+ \parindent 0pt
+ \parskip 2pt plus 1pt minus 1pt
+ \oddsidemargin 8pc
+ \evensidemargin 8pc
+ \marginparwidth 8pc
+ \toks@\expandafter{\@oddhead}%
+ \xdef\@oddhead{\hss\hbox to \pagewd{\the\toks@}}%
+ \toks@\expandafter{\@evenhead}%
+ \xdef\@evenhead{\hss\hbox to \pagewd{\the\toks@}}%
+ \def\ps@titlepage{}%
+}
+
+\def\ps@titlepage{}
+
+
+% ***********************************************************************
+%
+% MISCELLANEOUS defs for compatibility with tugboat.sty
+
+\newif\ifFirstPar \FirstParfalse
+
+\newdimen\pagewd \pagewd=39pc
+\newdimen\trimwd \trimwd=\pagewd
+\newdimen\trimlgt \trimlgt=11in
+\newdimen\headmargin \headmargin=3.5pc
+\def\smc{\sc}
+\def\ninepoint{\small}
+
+
+%*************************************************************************
+%
+% Start-up
+
+\setcounter{page}{1001}
+\PrelimDrafttrue
+
+\def\tugstyinit{%
+ \everypar{\@nodocument}%
+ \authornumber\z@
+ \let\@signature\@defaultsignature
+ }
+
+\endinput
+
+
+
+% **********************************************************************
+%
+% Change history
+%
+
+Version Date Changes
+------- --------- ---------------------------------------------------
+1.19 16 Nov 93 added new t-of-c definitions, based on modifications by
+ Nelson Beebe; make text ragged right, lightface, and
+ entries closer together than latex.tex default
+
+1.18b 8 Nov 93 removed extraneous " from header
+
+1.18a 29 May 93 changed \family to \fontfamily in defs of \tensl, \tenuit
+ within \sectitlefont, define \La to get proper "A"
+
+1.18 22 Mar 93 added \hyphenpenalty=10000 to (sub*)section headings
+ added missing brace at end of \def\tensl for nfss
+ added new environments \dedication and \longabstract
+
+1.17 19 Feb 93 incorporated some font definitions by Rainer Schoepf
+ to add flexibility when used under NFSS
+ installed new TUG address and phone number in header
+ reformatted change history, similar to tugboat.sty
+
+1.16e 24 Dec 92 decreased skip above \paragraph, \subparagraph;
+ removed shrink
+ defined \ps@titlepage to get running heads on first page
+ of docstyle articles
+
+1.16d 19 Oct 92 added \SMC parallel to plain-based style
+
+1.16c 10 Sep 92 added \raggedright in \subsubsection
+
+1.16b 19 Jul 92 test for previous input of article.sty, and omit if
+ done already, to permit use as style option
+
+1.16a 29 Jun 92 embedded redefinitions of \xpt, \ixpt within code to
+ distinguish between plain/old LaTeX and nfss
+
+1.16 6 Jun 92 incorporated test for nfss, and if loaded, define \tensl
+
+1.15 16 Mar 92 incorporated \sevbf into \*scriptfont of \bffam for \ixpt
+ to improve appearance of LaTeX and other logos
+
+1.14 8 Mar 92 added \input article.sty to make this an independent style
+ added standard headers, prepared for archive installation
+
+1.13 20 Nov 91 modified \@outputdblcol to reset \brokenpenalty to
+ different values in first and second column
+ added initialization macro (\tugstyinit) for multiple
+ articles
+
+1.12 7 Aug 91 modified \thebibliography to make it not quite so sloppy
+ and avoid cases where all stretch is put into one line
+
+1.11 10 Jun 91 added \ifWideSecTitle and modified \@maketitle to
+ (partially) support it
+
+1.10 13 Feb 91 added \egtsl and incorporated it into \*scriptfont of
+ \slfam for \xpt to improve appearance of LaTeX and
+ other logos
+
+1.09 12 Dec 90 modified \@oddhead and \@evenhead to reset `shape' for
+ new font selection scheme
+
+1.08 25 Oct 90 modified \enddocument to use \@@input instead of \input;
+ allows other uses of \input
+
+1.07 18 Oct 90 set authors \raggedright
+ set \marginparwidth in \SelfDocumenting
+ removed stretch in space between footnotemark and
+ footnotetext
+ commented out definition of \@makefnmark in \maketitle
+ changed \bibliography and \bibstyle to accomodate local
+ file names (see also tugboat.sty for definition of
+ \@tubfilename)
+
+1.06 13 Oct 90 added \listparindent=1em to definitions of \@list...
+ in order to distinguish paragraphs
+
+1.05 1 Sep 90 made space a <space> in definition of \@netaddress;
+ this obviates error messages concerning \begin{document}
+
+1.04 2 Mar 90 added \nobreak to \@maketitle to prevent pagebreaks
+ after leading rule
+
+1.03 25 Feb 90 added definition of \thistubstyle
+
+1.02 12 Feb 90 modified definition of \@makefntext; now uses
+ \@makefnmark (as one might expect)
+
+1.01 6 Feb 90 removed "\font\manual=manfnt"; tugboat.com already sets
+ \font\manual=logo10
+ adjusted definition of \netaddress to remove mis-timed
+ \@sanitize-ation
+
+1.00 29 Nov 89 changed \titlefont to \sectitlefont
+ added setting of \baselineskip to definition of
+ \sectitlefont
+ changed \TUBparindent to \normalparindent (already in
+ tugboat.com)
+ removed additions of amcsc* fonts
+ new definitions of \ragged... in tugboat.com include
+ \nohyphens
+ moved most of section title material to tugboat.com
+ moved writing mechanism and multiple document handling
+ to local .drv file
+ redefined \author to be consistent with tugboat.sty
+ added \address, \netaddress
+ moved \signature stuff to tugboat.com
+ made titles raggedright
+
+0.53 20 Oct 89 Zeroed \@signature for multiple documents
+
+0.52 19 Oct 89 Moved \rtitlex to tugboat.com
+
+0.51 18 Oct 89 Disallowed hyphenations in \section and \subsection
diff --git a/macros/latex209/contrib/tugboat/ltugproc.sty b/macros/latex209/contrib/tugboat/ltugproc.sty
new file mode 100644
index 0000000000..e77b162a7c
--- /dev/null
+++ b/macros/latex209/contrib/tugboat/ltugproc.sty
@@ -0,0 +1,217 @@
+%% @latexfile{
+%% filename="ltugproc.sty",
+%% version="1.07",
+%% date="26-Jan-1994",
+%% filetype="LaTeX macros for TUG Proceedings",
+%% copyright="Copyright (C) TeX Users Group.
+%% Copying of this file is authorized only if either:
+%% (1) you make absolutely no changes to your copy, OR
+%% (2) if you do make changes, you first rename it to some
+%% other name.",
+%% author="TeX Users Group",
+%% address="TeX Users Group",
+%% P. O. Box 869,
+%% Santa Barbara, CA 93102-0869,
+%% USA",
+%% telephone="805-963-8358",
+%% email="Internet: tug@tug.org or TUGboat@Math.AMS.org",
+%% codetable="ISO/ASCII",
+%% checksumtype="line count",
+%% checksum="217",
+%% keywords="tex users group, tugboat, proceedings, latex",
+%% abstract="This file contains the LaTeX-based macros
+%% for Proceedings issues of TUGboat, the
+%% Communications of the TeX Users Group."
+%% }
+%% *********************************************************
+%%
+%% Use of this file also requires the following files:
+%% LTUGBOAT.STY (version 1.14+)
+%% ARTICLE.STY (loaded by LTUGBOAT.STY)
+%% ART10.STY (loaded by ARTICLE.STY)
+%% TUGBOAT.CMN (version 1.08+) (loaded by LTUGBOAT.STY)
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\fileversion{v1.07}
+\def\filedate{26 Jan 94}
+%
+% ltugproc.sty
+%
+% latex style file for Proceedings of TUG meetings
+% Use `\documentstyle[...]{ltugproc}' at the top of your file.
+%
+% All suggestions for code improvements are welcome. This file may
+% (and SHOULD) undergo further changes.
+
+\expandafter\xdef\csname the.at.cat\endcsname{\the\catcode`\@}
+\makeatletter
+\@ifundefined{ltugprocloaded@}{\global\let\ltugprocloaded@\end}%
+ {\tugstyinit\endinput}
+\catcode`\@=\csname the.at.cat\endcsname
+
+\typeout{Document Style `ltugproc' \fileversion \space\space <\filedate>}
+
+% initialize year/issue-specific elements for standalone use
+\def\mtgyear{1994}
+\def\volyr{1994}
+\def\volno{15}
+\def\issno{3}
+
+% make this a documentstyle by calling ltugboat.sty first!
+% ltugboat.sty, in turn, inputs article.sty
+
+\input ltugboat.sty
+
+\def\maketitle{%
+ \setcounter{footnote}{0}
+ \def\thefootnote{\fnsymbol{footnote}}
+ \twocolumn[\@maketitle]
+ \def\thefootnote{\arabic{footnote}}
+ \setcounter{footnote}{0}%
+ }
+
+
+\@ifundefined{selectfont}% i.e. if the new font selection scheme is
+% NOT used
+ {\def\AUTHORfont{\large\rm}
+ \def\TITLEfont{\Large\rm}
+ \def\addressfont{\small\rm}
+ \def\netaddrfont{\small\tt}}
+% otherwise
+ {\def\AUTHORfont{\large\rm\mediumseries\normalshape}
+ \def\TITLEfont{\Large\rm\mediumseries\normalshape}
+ \def\addressfont{\small\mediumseries\normalshape\rm}
+ \def\netaddrfont{\small\mediumseries\normalshape\tt}}
+
+
+\def\@maketitle{%
+ {\parskip\z@
+ \TITLEfont\raggedright\noindent\@title\par
+ \count@=0
+ \loop
+ \ifnum\count@<\authornumber
+ \vskip20pt
+ \advance\count@\@ne
+ {\AUTHORfont\baselineskip=14pt\theauthor{\number\count@}\endgraf}%
+ \addressfont\theaddress{\number\count@}\endgraf
+ \netaddrfont\thenetaddress{\number\count@}\endgraf
+ \repeat
+ \vskip20pt
+ \box\abstract@box}%
+ \xdef\@titlepagenum{\number\c@page}%
+ }
+
+\def\@titlepagenum{1 } % default
+
+
+\newbox\abstract@box
+
+
+% \changes{v1.0b}{89/08/03}{At the moment `thanks' are ignored.}
+
+\def\thanks#1{\@bsphack\@warning{\string\thanks\space
+ is not supported in proc90.sty}\@esphack}
+
+
+\def\abstract{\global\setbox\abstract@box\hbox\bgroup
+ \minipage\textwidth
+ \centerline{\bf Abstract}%
+ \vskip.5\baselineskip\rm
+ \list{}{\listparindent20pt
+ \itemindent\z@ \leftmargin4.875pc
+ \rightmargin\leftmargin \parsep 0pt}\item[]\ignorespaces}
+
+\def\endabstract{\endlist\vskip 1pc\endminipage\egroup\global\@ignoretrue}
+
+
+
+\def\bibentry{\smallskip
+ \hangindent=\parindent
+ \hangafter=1
+ \noindent
+ \sloppy
+ \clubpenalty500 \widowpenalty500
+ \frenchspacing}
+
+
+
+% running heads & feet
+\def\rhTitle{\@title}
+\def\shortTitle #1{\def\rhTitle{#1}}
+\def\rhAuthor{\@author}
+\def\shortAuthor #1{\def\rhAuthor{#1}}
+
+\def\@oddhead{\MakeRegistrationMarks
+ \ifnum\c@page=\@titlepagenum\else\hfil\rm\rhTitle\fi}
+\def\@evenhead{\MakeRegistrationMarks
+ \ifnum\c@page=\@titlepagenum\else\rm\rhAuthor\hfil\fi}
+
+\newif\ifpreprint \preprinttrue
+\def\preprint{\preprinttrue}
+
+
+\advance\footskip8pt % for deeper running feet
+
+\def\dopagecommands{\csname @@pagecommands\number\c@page\endcsname}
+\def\setpagecommands#1#2{\expandafter\def\csname @@pagecommands#1\endcsname
+ {#2}}
+\def\@oddfoot{\ifpreprint\pfoottext\hfil\Now\hfil$^.$\thepage
+ \else\rfoottext\hfil\thepage\fi\dopagecommands}
+\def\@evenfoot{\ifpreprint\thepage$^.$\hfil\Now\hfil\pfoottext
+ \else\thepage\hfil\rfoottext\fi\dopagecommands}
+
+\v@lx % normalize publication info for footer
+\def\pfoottext{{\smc Preprint}: \mtgyear{} \TUG{} Annual Meeting}
+\def\rfoottext{\tenrm\TUB, \volx\Dash
+ {Proceedings of the \volyr{} Annual Meeting}}
+
+% sections
+\setcounter{secnumdepth}{0} % to suppress section numbering
+
+\def\section{\@startsection {section}{1}{\z@}{-8pt}{6pt}%
+ {\large\bf\raggedright}}
+
+%FMi: changed -\fontdimen to +\fontdimen (LaTeX bug?)
+\def\subsection{\@startsection{subsection}{2}{\z@}{6pt plus 2pt minus 2pt}%
+ {-5pt plus \fontdimen3\the\font}{\normalsize\bf}}
+
+\def\subsubsection
+ {\@startsection{subsubsection}{3}{\z@}{1sp}
+ {-5pt plus \fontdimen3\the\font}{\normalsize\bf}}
+
+
+% \UseTrimMarks % for final copy
+% \overfullrule=0pt
+
+\endinput
+
+%% *********************************************************
+
+Change history
+
+26 Jan 94 1.07
+corrected TUG address in header
+parameterized dates, etc., in running footers
+initialized them at top of file instead of in footer text
+
+ 9 Jan 93 1.06a
+changed TUG address in header to Santa Barbara
+modifications for conditions encountered in guidelines documents:
+added \baselineskip to author line in top matter, in case of multiple lines
+moved skip after abstract into \abstractbox, in case of no abstract
+
+23 Jun 92 1.06
+corrected documentation to cite LTUGBOAT.STY rather than TUGBOAT.STY
+
+19 Mar 92 1.05
+added \preprint to be parallel to TUGPROC.STY
+
+ 8 Mar 92 1.04
+removed \input article.sty -- ltugboat.sty now loads it
+changed width of abstract margins from 95pt to 4.875pc to widen abstract
+added standard headers, prepared for archive installation
+
+16 Sep 91 1.03
+added test for previous reading of this file
+\tenrm in place of \tenpoint in running head
diff --git a/macros/latex209/contrib/tugboat/tugboat.cmn b/macros/latex209/contrib/tugboat/tugboat.cmn
new file mode 120000
index 0000000000..72c6ed15b7
--- /dev/null
+++ b/macros/latex209/contrib/tugboat/tugboat.cmn
@@ -0,0 +1 @@
+../../../plain/contrib/tugboat/tugboat.cmn \ No newline at end of file
diff --git a/macros/latex209/contrib/ucthesis/uct10.doc b/macros/latex209/contrib/ucthesis/uct10.doc
new file mode 100644
index 0000000000..8518a296b5
--- /dev/null
+++ b/macros/latex209/contrib/ucthesis/uct10.doc
@@ -0,0 +1,420 @@
+% UCTHESIS DOCUMENT STYLE -- Released 10 Feb 93.
+% for LaTeX version 2.09
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1.37}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer, the
+% document style defines \@normalsize instead of \normalsize . This
+% is done only for \normalsize, not for any other size-changing
+% commands.
+
+\def\@normalsize{\@setsize\normalsize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 9 Jun 87
+
+\def\small{\@setsize\small{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5\p@ plus3\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 3\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+%% UCTHESIS style is not intended to be used two-sided because the
+%% University of California style requirements explicitly specify
+%% single-sided printing. So the two-sided settings are meaningless.
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 0.5in % Left margin on odd-numbered pages.
+ \evensidemargin 0.0in % Left margin on even-numbered pages.
+ \marginparwidth 0pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0.5in % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0.5in
+ \marginparwidth 0pt
+\fi
+\marginparsep 11pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin 0.0in % Nominal distance from top of page to top
+ % of box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+\topskip = 10pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 30pt % Distance from baseline of box containing
+ % foot to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+% 24 Jun 86: changed to explicitly compute \textheight to avoid
+% roundoff. The value of the multiplier was calculated as the floor
+% of the old \textheight minus \topskip, divided by \baselineskip for
+% \normalsize. The old value of \textheight was 528pt. \textheight
+% is the height of text (including footnotes and figures, excluding
+% running head and foot).
+
+\textheight = 37\baselineskip
+\advance\textheight by \topskip
+\textwidth 6.0truein % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 6.65pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 9pt plus 4pt minus 2pt % Space between last line of text
+ % and top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats
+ % moved to top or bottom of
+ % text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and
+ % floats at top or bottom of
+ % page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures
+ % and text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep
+ % (minus the stretch and
+ % shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for
+ % double-column figures in
+ % two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for
+ % double-column floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep
+ % and \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must
+ % be 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must
+ % be 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt
+ % plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two
+ % marginal notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 0pt plus 1pt % Extra vertical space between
+ % paragraphs.
+\parindent 4em % Width of paragraph indentation.
+%\topsep 8pt plus 2pt minus 4pt % Extra vertical space, in addition
+ % to \parskip, added above and below
+ % list and paragraphing environments.
+\partopsep 2pt plus 1pt minus 1pt % Extra vertical space, in addition
+ % to \parskip and \topsep, added when
+ % user leaves blank line before
+ % environment.
+%\itemsep 4pt plus 2pt minus 1pt % Extra vertical space, in addition
+ % to \parskip, added between list
+ % items.
+% See \@listI for values of \topsep and \itemsep
+% (Change made 9 Jun 87)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph
+ % environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph
+ % environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * CHAPTERS AND SECTIONS *
+% ****************************************
+%
+%
+
+% Definition of \part moved to report.doc on 19 Jan 88
+
+% \@makechapterhead {TEXT} : Makes the heading for the \chapter command.
+%
+
+\def\@makechapterhead#1{% % Heading for \chapter command
+ \vspace*{50\p@}% % Space at top of text page.
+ {\parindent \z@\raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ \huge\bf \@chapapp{} \thechapter % Print '\chaptername' and number.
+ \par
+ \vskip 20\p@ \fi % Space between number and title.
+ \Huge \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40\p@ % Space between title and text.
+ }}
+
+% \@makeschapterhead {TEXT} : Makes the heading for the \chapter*
+% command.
+%
+
+\def\@makeschapterhead#1{% % Heading for \chapter* command
+ \vspace*{50\p@}% % Space at top of page.
+ {\parindent \z@ \raggedright
+ \Huge \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40\p@ % Space between title and text.
+ }}
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a \chapter or \section command without using
+% \@startsection, you can use \secdef as follows:
+% \def\chapter { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... } % Command to define
+% % \chapter[...]{...}
+% \def\CMDB #1{ ... } % Command to define
+% % \chapter*{...}
+
+\def\chapter{\clearpage % Starts new page.
+ \thispagestyle{plain}% % Page style of chapter page is 'plain'
+ \global\@topnum\z@ % Prevents figures from going
+ % at top of page.
+ \@afterindenttrue % Suppresses indent in first paragraph.
+ \secdef\@chapter\@schapter} % Change to \@afterindentfase for no indent.
+
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}%
+ \typeout{\@chapapp\space\thechapter.}%
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#1}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}%
+ \addtocontents{lof}%
+ {\protect\addvspace{10\p@}} % Adds between-chapter space
+ \addtocontents{lot}%
+ {\protect\addvspace{10\p@}} % to lists of figs & tables.
+ \if@twocolumn % Tests for two-column mode.
+ \@topnewpage[\@makechapterhead{#2}]%
+ \else \@makechapterhead{#2}%
+ \@afterheading % Routine called after chapter and
+ \fi} % section heading.
+
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]%
+ \else \@makeschapterhead{#1}%
+ \@afterheading\fi}
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g.,
+% chapter=1, section = 2, etc. A section number will be
+% printed if and only if LEVEL < or = the value of the
+% secnumdepth counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus-1ex minus
+ -.2ex}{2.3ex plus.2ex}{\reset@font\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus-1ex
+ minus-.2ex}{1.5ex plus.2ex}{\reset@font\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus-.2ex}{1.5ex plus.2ex}{\reset@font\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus1ex minus.2ex}{-1em}{\reset@font
+ \normalsize \bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus1ex minus
+ .2ex}{-1em}{\reset@font\normalsize\bf}}
+
+
+% Default initializations of \...mark commands. (See below for their
+% us in defining page styles.
+%
+
+\def\chaptermark#1{}
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{2}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the chapter counter to zero
+% -- set \@chapapp to Appendix (for messages)
+% -- redefine the chapter counter to produce appendix numbers
+% -- reset the section counter to zero
+% -- redefine the \chapter command if appendix titles and headings
+% are to look different from chapter titles and headings.
+
+\def\appendix{\par
+ \setcounter{chapter}{0}%
+ \setcounter{section}{0}%
+ \def\@chapapp{\appendixname}%
+ \def\thechapter{\Alph{chapter}}}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 25pt
+\leftmarginii 22pt % > \labelsep + width of '(m)'
+\leftmarginiii 18.7pt % > \labelsep + width of 'vii.'
+\leftmarginiv 17pt % > \labelsep + width of 'M.'
+\leftmarginv 10pt
+\leftmarginvi 10pt
+
+\leftmargin\leftmargini
+\labelsep 5pt
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+%\parsep 4pt plus 2pt minus 1pt (Removed 9 Jun 87)
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 9 Jun 87)
+\def\@listI{\leftmargin\leftmargini \parsep 4\p@ plus2\p@ minus\p@%
+\topsep 8\p@ plus2\p@ minus4\p@
+\itemsep 4\p@ plus2\p@ minus\p@}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep\p@ plus\z@ minus\p@
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\endinput
diff --git a/macros/latex209/contrib/ucthesis/uct11.doc b/macros/latex209/contrib/ucthesis/uct11.doc
new file mode 100644
index 0000000000..cc80ca9c1a
--- /dev/null
+++ b/macros/latex209/contrib/ucthesis/uct11.doc
@@ -0,0 +1,419 @@
+% UCTHESIS DOCUMENT STYLE -- Released 10 Feb 93.
+% for LaTeX version 2.09
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1.37}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize.
+% This is done only for \normalsize, not for any other size-changing
+% commands.
+
+\def\@normalsize{\@setsize\normalsize{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 9 Jun 87
+
+\def\small{\@setsize\small{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{14pt}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{18pt}\xivpt\@xivpt}
+\def\LARGE{\@setsize\LARGE{22pt}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+%% UCTHESIS style is not intended to be used two-sided because the
+%% University of California style requirements explicitly specify
+%% single-sided printing. So the two-sided settings are meaningless.
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 0.5in % Left margin on odd-numbered pages.
+ \evensidemargin 0.0in % Left margin on even-numbered pages.
+ \marginparwidth 0pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0.5in % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0.5in
+ \marginparwidth 0pt
+\fi
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin 0.0in % Nominal distance from top of page to top of
+ % box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+\topskip = 11pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 30pt % Distance from baseline of box containing
+ % foot to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+% 24 Jun 86: changed to explicitly compute \textheight to avoid
+% roundoff. The value of the multiplier was calculated as the floor
+% of the old \textheight minus \topskip, divided by \baselineskip for
+% \normalsize. The old value of \textheight was 530.4pt. \textheight
+% is the height of text (including footnotes and figures, excluding
+% running head and foot).
+
+\textheight = 32\baselineskip
+\advance\textheight by \topskip
+\textwidth 6.0truein % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 7.7pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 10pt plus 4pt minus 2pt % Space between last line of text
+ % and top of first footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 12pt plus 2pt minus 2pt % Space between adjacent floats
+ % moved to top or bottom of
+ % text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and
+ % floats at top or bottom of
+ % page.
+\intextsep 12pt plus 2pt minus 2pt % Space between in-text figures
+ % and text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep
+ % (minus the stretch and
+ % shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 12pt plus 2pt minus 2pt % Same as \floatsep for
+ % double-column figures in
+ % two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for
+ % double-column floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep
+ % and \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must
+ % be 0pt plus ...)
+\@fpsep 8pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column. (Must
+ % be 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt
+ % plus ...)
+\@dblfpsep 8pt plus 2fil % Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 5pt % Minimum vertical separation between two
+ % marginal notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 0pt plus 1pt % Extra vertical space between
+ % paragraphs.
+\parindent 4em % Width of paragraph indentation.
+%\topsep 9pt plus 3pt minus 5pt % Extra vertical space, in addition
+ % to \parskip, added above and below
+ % list and paragraphing environments.
+\partopsep 3pt plus 1pt minus 2pt % Extra vertical space, in addition
+ % to \parskip and \topsep, added when
+ % user leaves blank line before
+ % environment.
+%\itemsep 4.5pt plus 2pt minus 1pt % Extra vertical space, in addition
+ % to \parskip, added between list
+ % items.
+% See \@listI for values of \topsep and \itemsep
+% (Change made 9 Jun 87)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph
+ % environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph
+ % environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * CHAPTERS AND SECTIONS *
+% ****************************************
+%
+
+% Definition of \part moved to report.doc 19 Jan 88
+
+% \@makechapterhead {TEXT} : Makes the heading for the \chapter
+% command.
+%
+
+\def\@makechapterhead#1{% % Heading for \chapter command
+ \vspace*{50\p@}% % Space at top of text page.
+ {\parindent \z@ \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ \huge\bf \@chapapp{} \thechapter %Print '\chaptername' and number.
+ \par
+ \vskip 20\p@ \fi % Space between number and title.
+ \Huge \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40\p@ % Space between title and text.
+ }}
+
+% \@makeschapterhead {TEXT} : Makes the heading for the \chapter*
+% command.
+%
+
+\def\@makeschapterhead#1{% % Heading for \chapter* command
+ \vspace*{50\p@}% % Space at top of page.
+ {\parindent \z@ \raggedright
+ \Huge \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40\p@ % Space between title and text.
+ }}
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a \chapter or \section command without using
+% \@startsection, you can use \secdef as follows:
+% \def\chapter { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... % Command to define
+% % \chapter[...]{...}
+% \def\CMDB #1{ ... % Command to define
+% % \chapter*{...}
+
+\def\chapter{\clearpage % Starts new page.
+ \thispagestyle{plain}% % Page style of chapter page is 'plain'
+ \global\@topnum\z@ % Prevents figures from going
+ % at top of page.
+ \@afterindenttrue % Suppresses indent in first paragraph.
+ \secdef\@chapter\@schapter} % Change to \@afterindentfase for no indent.
+
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}%
+ \typeout{\@chapapp\space\thechapter.}%
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#1}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}%
+ \addtocontents{lof}%
+ {\protect\addvspace{10\p@}} % Adds between-chapter space
+ \addtocontents{lot}%
+ {\protect\addvspace{10\p@}} % to lists of figs & tables.
+ \if@twocolumn % Tests for two-column mode.
+ \@topnewpage[\@makechapterhead{#2}]%
+ \else \@makechapterhead{#2}%
+ \@afterheading % Routine called after chapter and
+ \fi} % section heading.
+
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]%
+ \else \@makeschapterhead{#1}%
+ \@afterheading\fi}
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g.,
+% chapter=1, section = 2, etc. A section number will be
+% printed if and only if LEVEL < or = the value of the
+% secnumdepth counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus-1ex minus
+ -.2ex}{2.3ex plus.2ex}{\reset@font\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus-1ex
+ minus-.2ex}{1.5ex plus.2ex}{\reset@font\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus-.2ex}{1.5ex plus.2ex}{\reset@font\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus1ex minus.2ex}{-1em}{\reset@font
+ \normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus1ex minus
+ .2ex}{-1em}{\reset@font\normalsize\bf}}
+
+% Default initializations of \...mark commands. (See below for their
+% us in defining page styles.
+%
+
+\def\chaptermark#1{}
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{2}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the chapter counter to zero
+% -- set \@chapapp to Appendix (for messages)
+% -- redefine the chapter counter to produce appendix numbers
+% -- reset the section counter to zero
+% -- redefine the \chapter command if appendix titles and headings
+% are to look different from chapter titles and headings.
+
+\def\appendix{\par
+ \setcounter{chapter}{0}%
+ \setcounter{section}{0}%
+ \def\@chapapp{\appendixname}%
+ \def\thechapter{\Alph{chapter}}}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+%\parsep 4.5pt plus 2pt minus 1pt %(Removed 9 Jun 87)
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 9 Jun 87)
+\def\@listI{\leftmargin\leftmargini \parsep 4.5\p@ plus2\p@ minus\p@
+\topsep 9\p@ plus3\p@ minus5\p@
+\itemsep 4.5\p@ plus2\p@ minus\p@}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4.5\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\endinput
diff --git a/macros/latex209/contrib/ucthesis/uct12.doc b/macros/latex209/contrib/ucthesis/uct12.doc
new file mode 100644
index 0000000000..387d95b34c
--- /dev/null
+++ b/macros/latex209/contrib/ucthesis/uct12.doc
@@ -0,0 +1,420 @@
+% UCTHESIS DOCUMENT STYLE -- Released 10 Feb 93.
+% for LaTeX version 2.09
+
+
+% ****************************************
+% * FONTS *
+% ****************************************
+%
+
+\lineskip 1pt % \lineskip is 1pt for all font sizes.
+\normallineskip 1pt
+\def\baselinestretch{1.37}
+
+% Each size-changing command \SIZE executes the command
+% \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
+% where:
+% BASELINESKIP = Normal value of \baselineskip for that size. (Actual
+% value will be \baselinestretch * BASELINESKIP.)
+%
+% \FONTSIZE = Name of font-size command. The currently available
+% (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
+% \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
+% \xivpt, \xviipt, \xxpt, \xxvpt.
+% \@FONTSIZE = The same as the font-size command except with an
+% '@' in front---e.g., if \FONTSIZE = \xivpt then
+% \@FONTSIZE = \@xivpt.
+%
+% For reasons of efficiency that needn't concern the designer,
+% the document style defines \@normalsize instead of \normalsize.
+% This is done only for \normalsize, not for any other size-changing
+% commands.
+
+\def\@normalsize{\@setsize\normalsize{14.5pt}\xiipt\@xiipt
+\abovedisplayskip 12\p@ plus3\p@ minus7\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\let\@listi\@listI} % Setting of \@listi added 9 Jun 87
+
+\def\small{\@setsize\small{13.6pt}\xipt\@xipt
+\abovedisplayskip 11\p@ plus3\p@ minus6\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\parsep 4.5\p@ plus2\p@ minus\p@
+ \itemsep \parsep
+ \topsep 9\p@ plus3\p@ minus5\p@}}
+
+\def\footnotesize{\@setsize\footnotesize{12pt}\xpt\@xpt
+\abovedisplayskip 10\p@ plus2\p@ minus5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus3\p@
+\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@
+\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
+\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{9.5pt}\viiipt\@viiipt}
+\def\tiny{\@setsize\tiny{7pt}\vipt\@vipt}
+\def\large{\@setsize\large{18pt}\xivpt\@xivpt}
+\def\Large{\@setsize\Large{22pt}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{25pt}\xxpt\@xxpt}
+\def\huge{\@setsize\huge{30pt}\xxvpt\@xxvpt}
+\let\Huge=\huge
+
+\normalsize % Choose the normalsize font.
+
+
+% ****************************************
+% * PAGE LAYOUT *
+% ****************************************
+%
+% All margin dimensions measured from a point one inch from top and side
+% of page.
+
+%% UCTHESIS style is not intended to be used two-sided because the
+%% University of California style requirements explicitly specify
+%% single-sided printing. So the two-sided settings are meaningless.
+
+% SIDE MARGINS:
+\if@twoside % Values for two-sided printing:
+ \oddsidemargin 0.5in % Left margin on odd-numbered pages.
+ \evensidemargin 0.0in % Left margin on even-numbered pages.
+ \marginparwidth 0pt % Width of marginal notes.
+\else % Values for one-sided printing:
+ \oddsidemargin 0.5in % Note that \oddsidemargin = \evensidemargin
+ \evensidemargin 0.5in
+ \marginparwidth 0pt
+\fi
+\marginparsep 10pt % Horizontal space between outer margin and
+ % marginal note
+
+
+% VERTICAL SPACING:
+ % Top of page:
+\topmargin 0.0in % Nominal distance from top of page to top
+ % of box containing running head.
+\headheight 12pt % Height of box containing running head.
+\headsep 25pt % Space between running head and text.
+\topskip = 12pt % '\baselineskip' for first line of page.
+ % Bottom of page:
+\footskip 30pt % Distance from baseline of box containing
+ % foot to baseline of last line of text.
+
+
+% DIMENSION OF TEXT:
+% 24 Jun 86: changed to explicitly compute \textheight to avoid
+% roundoff. The value of the multiplier was calculated as the floor
+% of the old \textheight minus \topskip, divided by \baselineskip for
+% \normalsize. The old value of \textheight was 536.5pt. \textheight
+% is the height of text (including footnotes and figures, excluding
+% running head and foot).
+
+\textheight = 30\baselineskip
+\advance\textheight by \topskip
+\textwidth 6.0truein % Width of text line.
+ % For two-column mode:
+\columnsep 10pt % Space between columns
+\columnseprule 0pt % Width of rule between columns.
+
+% A \raggedbottom command causes 'ragged bottom' pages: pages set to
+% natural height instead of being stretched to exactly \textheight.
+
+% FOOTNOTES:
+
+\footnotesep 8.4pt % Height of strut placed at the beginning of every
+ % footnote = height of normal \footnotesize strut,
+ % so no extra space between footnotes.
+
+\skip\footins 10.8pt plus 4pt minus 2pt % Space between last line of
+ % text and top of first
+ % footnote.
+
+% FLOATS: (a float is something like a figure or table)
+%
+% FOR FLOATS ON A TEXT PAGE:
+%
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\floatsep 14pt plus 2pt minus 4pt % Space between adjacent floats
+ % moved to top or bottom of
+ % text page.
+\textfloatsep 20pt plus 2pt minus 4pt % Space between main text and
+ % floats at top or bottom of
+ % page.
+\intextsep 14pt plus 4pt minus 4pt % Space between in-text figures
+ % and text.
+\@maxsep 20pt % The maximum of \floatsep,
+ % \textfloatsep and \intextsep
+ % (minus the stretch and
+ % shrink).
+% TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
+\dblfloatsep 14pt plus 2pt minus 4pt % Same as \floatsep for
+ % double-column figures in
+ % two-column mode.
+\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for
+ % double-column floats.
+\@dblmaxsep 20pt % The maximum of \dblfloatsep
+ % and \dbltexfloatsep.
+
+% FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
+% ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
+\@fptop 0pt plus 1fil % Stretch at top of float page/column. (Must
+ % be 0pt plus ...)
+\@fpsep 10pt plus 2fil % Space between floats on float page/column.
+\@fpbot 0pt plus 1fil % Stretch at bottom of float page/column.
+ % (Must be 0pt plus ... )
+
+% DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
+\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be
+ % 0pt plus ...)
+\@dblfpsep 10pt plus 2fil% Space between floats on float page.
+\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be
+ % 0pt plus ... )
+% MARGINAL NOTES:
+%
+\marginparpush 7pt % Minimum vertical separation between two
+ % marginal notes.
+
+
+% ****************************************
+% * PARAGRAPHING *
+% ****************************************
+%
+\parskip 0pt plus 1pt % Extra vertical space between
+ % paragraphs.
+\parindent 1.5em % Width of paragraph indentation.
+%\topsep 10pt plus 4pt minus 6pt % Extra vertical space, in addition
+ % to \parskip, added above and below
+ % list and paragraphing environments.
+\partopsep 3pt plus 2pt minus 2pt % Extra vertical space, in addition
+ % to \parskip and \topsep, added when
+ % list leaves blank line before
+ % environment.
+%\itemsep 5pt plus 2.5pt minus 1pt % Extra vertical space, in addition
+ % to \parskip, added between list
+ % items.
+% See \@listI for values of \topsep and \itemsep
+% (Change made 9 Jun 87)
+
+% The following page-breaking penalties are defined
+
+\@lowpenalty 51 % Produced by \nopagebreak[1] or \nolinebreak[1]
+\@medpenalty 151 % Produced by \nopagebreak[2] or \nolinebreak[2]
+\@highpenalty 301 % Produced by \nopagebreak[3] or \nolinebreak[3]
+
+\@beginparpenalty -\@lowpenalty % Before a list or paragraph
+ % environment.
+\@endparpenalty -\@lowpenalty % After a list or paragraph
+ % environment.
+\@itempenalty -\@lowpenalty % Between list items.
+
+% \clubpenalty % 'Club line' at bottom of page.
+% \widowpenalty % 'Widow line' at top of page.
+% \displaywidowpenalty % Math display widow line.
+% \predisplaypenalty % Breaking before a math display.
+% \postdisplaypenalty % Breaking after a math display.
+% \interlinepenalty % Breaking at a line within a paragraph.
+% \brokenpenalty % Breaking after a hyphenated line.
+
+
+% ****************************************
+% * CHAPTERS AND SECTIONS *
+% ****************************************
+%
+% Definition of \part moved to report.doc 19 Jan 88
+
+% \@makechapterhead {TEXT} : Makes the heading for the \chapter
+% command.
+%
+
+\def\@makechapterhead#1{% % Heading for \chapter command
+ \vspace*{50\p@}% % Space at top of text page.
+ {\parindent \z@ \raggedright
+ \ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
+ \huge\bf \@chapapp{} \thechapter %Print '\chaptername' and number.
+ \par
+ \vskip 20\p@ \fi % Space between number and title.
+ \Huge \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40\p@ % Space between title and text.
+ }}
+
+% \@makeschapterhead {TEXT} : Makes the heading for the \chapter*
+% command.
+%
+
+\def\@makeschapterhead#1{% % Heading for \chapter* command
+ \vspace*{50\p@}% % Space at top of page.
+ {\parindent \z@ \raggedright
+ \Huge \bf % Title.
+ #1\par
+ \nobreak % TeX penalty to prevent page break.
+ \vskip 40\p@ % Space between title and text.
+ }}
+
+% \secdef{UNSTARCMDS}{STARCMDS} :
+% When defining a \chapter or \section command without using
+% \@startsection, you can use \secdef as follows:
+% \def\chapter { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{ ... % Command to define
+% % \chapter[...]{...}
+% \def\CMDB #1{ ... % Command to define
+% % \chapter*{...}
+
+\def\chapter{\clearpage % Starts new page.
+ \thispagestyle{plain}% % Page style of chapter page is 'plain'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindenttrue % Suppresses indent in first paragraph.
+ \secdef\@chapter\@schapter} % Change to \@afterindentfase for no indent.
+
+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}%
+ \typeout{\@chapapp\space\thechapter.}%
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\thechapter}#1}\else
+ \addcontentsline{toc}{chapter}{#1}\fi
+ \chaptermark{#1}%
+ \addtocontents{lof}%
+ {\protect\addvspace{10\p@}}% Adds between-chapter space
+ \addtocontents{lot}%
+ {\protect\addvspace{10\p@}}% to lists of figs & tables.
+ \if@twocolumn % Tests for two-column mode.
+ \@topnewpage[\@makechapterhead{#2}]%
+ \else \@makechapterhead{#2}%
+ \@afterheading % Routine called after chapter and
+ \fi} % section heading.
+
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]%
+ \else \@makeschapterhead{#1}%
+ \@afterheading\fi}
+
+% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
+% optional * [ALTHEADING]{HEADING}
+% Generic command to start a section.
+% NAME : e.g., 'subsection'
+% LEVEL : a number, denoting depth of section -- e.g.,
+% chapter=1, section = 2, etc. A section number will be
+% printed if and only if LEVEL < or = the value of the
+% secnumdepth counter.
+% INDENT : Indentation of heading from left margin
+% BEFORESKIP : Absolute value = skip to leave above the heading.
+% If negative, then paragraph indent of text following
+% heading is suppressed.
+% AFTERSKIP : if positive, then skip to leave below heading,
+% else - skip to leave to right of run-in heading.
+% STYLE : commands to set style
+% If '*' missing, then increments the counter. If it is present, then
+% there should be no [ALTHEADING] argument. A sectioning command
+% is normally defined to \@startsection + its first six arguments.
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus-1ex minus
+ -.2ex}{2.3ex plus.2ex}{\reset@font\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus-1ex
+ minus-.2ex}{1.5ex plus.2ex}{\reset@font\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus-.2ex}{1.5ex plus.2ex}{\reset@font\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus1ex minus.2ex}{-1em}{\reset@font
+ \normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus1ex minus
+ .2ex}{-1em}{\reset@font\normalsize\bf}}
+
+% Default initializations of \...mark commands. (See below for their
+% us in defining page styles.
+%
+
+\def\chaptermark#1{}
+% \def\sectionmark#1{} % Preloaded definitions
+% \def\subsectionmark#1{}
+% \def\subsubsectionmark#1{}
+% \def\paragraphmark#1{}
+% \def\subparagraphmark#1{}
+
+% The value of the counter secnumdepth gives the depth of the
+% highest-level sectioning command that is to produce section numbers.
+%
+
+\setcounter{secnumdepth}{2}
+
+% APPENDIX
+%
+% The \appendix command must do the following:
+% -- reset the chapter counter to zero
+% -- set \@chapapp to Appendix (for messages)
+% -- redefine the chapter counter to produce appendix numbers
+% -- reset the section counter to zero
+% -- redefine the \chapter command if appendix titles and headings
+% are to look different from chapter titles and headings.
+
+\def\appendix{\par
+ \setcounter{chapter}{0}%
+ \setcounter{section}{0}%
+ \def\@chapapp{\appendixname}%
+ \def\thechapter{\Alph{chapter}}}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% The following commands are used to set the default values for the list
+% environment's parameters. See the LaTeX manual for an explanation of
+% the meanings of the parameters. Defaults for the list environment are
+% set as follows. First, \rightmargin, \listparindent and \itemindent
+% are set to 0pt. Then, for a Kth level list, the command \@listK is
+% called, where 'K' denotes 'i', 'ii', ... , 'vi'. (I.e., \@listiii is
+% called for a third-level list.) By convention, \@listK should set
+% \leftmargin to \leftmarginK.
+%
+% For efficiency, level-one list's values are defined at top level, and
+% \@listi is defined to set only \leftmargin.
+
+\leftmargini 2.5em
+\leftmarginii 2.2em % > \labelsep + width of '(m)'
+\leftmarginiii 1.87em % > \labelsep + width of 'vii.'
+\leftmarginiv 1.7em % > \labelsep + width of 'M.'
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+%\parsep 5pt plus 2.5pt minus 1pt %(Removed 9 Jun 87)
+
+% \@listI defines top level and \@listi values of
+% \leftmargin, \topsep, \parsep, and \itemsep
+% (Added 9 Jun 87)
+\def\@listI{\leftmargin\leftmargini \parsep 5\p@ plus2.5\p@ minus\p@
+\topsep 10\p@ plus4\p@ minus6\p@
+\itemsep 5\p@ plus2.5\p@ minus\p@}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5\p@ plus2.5\p@ minus\p@
+ \parsep 2.5\p@ plus\p@ minus\p@
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\endinput
diff --git a/macros/latex209/contrib/ucthesis/uctest.bib b/macros/latex209/contrib/ucthesis/uctest.bib
new file mode 100644
index 0000000000..71733b3060
--- /dev/null
+++ b/macros/latex209/contrib/ucthesis/uctest.bib
@@ -0,0 +1,138 @@
+@BOOK{knuth:tex,
+ AUTHOR = "Donald E. Knuth",
+ TITLE = "The {\TeX} Book",
+ PUBLISHER = {Addison-Wesley},
+ YEAR = "1984",
+ ADDRESS = {Reading, Massachusetts},
+ NOTE = {Reprinted as Vol. A of {\it Computers \& Typesetting\/}, 1986}
+}
+
+@BOOK{knuth:pgm,
+ AUTHOR = "Donald E. Knuth",
+ TITLE = "{\TeX}: The Program",
+ PUBLISHER = {Addison-Wesley},
+ YEAR = "1986",
+ VOLUME = {B},
+ SERIES = {Computers \& Typesetting},
+ ADDRESS = {Reading, Massachusetts}
+}
+
+@TECHREPORT{knuth:web,
+ AUTHOR = {Donald E. Knuth},
+ TITLE = {The {WEB} System for Structured Documentation, Version 2.3},
+ INSTITUTION = {Computer Science Department, Stanford University},
+ YEAR = {1983},
+ NUMBER = {STAN-CS-83-980},
+ ADDRESS = {Stanford, California},
+ MONTH = Sep
+}
+
+@ARTICLE{knuth:lp,
+ AUTHOR = {Donald E. Knuth},
+ TITLE = {Literate Programming},
+ JOURNAL = {The Computer Journal},
+ YEAR = {1984},
+ VOLUME = {27},
+ NUMBER = {2},
+ PAGES = {97--111},
+ MONTH = May
+}
+
+@TECHREPORT{knuth:tor,
+ AUTHOR = {Donald E. Knuth},
+ TITLE = {A Torture Test for {\TeX}, Version 1.3},
+ INSTITUTION = {Computer Science Department, Stanford University},
+ YEAR = {1984},
+ NUMBER = {STAN-CS-84-1027},
+ ADDRESS = {Stanford, California},
+ MONTH = Nov
+}
+
+@ARTICLE{furuta:pctex,
+ AUTHOR = "Richard K. Furuta and Pierre A. MacKay",
+ TITLE = "Two {\TeX} Implementations for the {IBM PC}",
+ JOURNAL = "Dr. Dobb's Journal",
+ YEAR = "1985",
+ VOLUME = "10",
+ NUMBER = "9",
+ PAGES = "80--91",
+ MONTH = Sep
+}
+
+@TECHREPORT{des:tex,
+ AUTHOR = {Jacques D{\'e}sarm{\'e}nien},
+ TITLE = {How to Run {\TeX} in French},
+ INSTITUTION = {Computer Science Department, Stanford University},
+ YEAR = {1984},
+ NUMBER = {SATN-CS-1013},
+ ADDRESS = {Stanford, California},
+ MONTH = Aug
+}
+
+@TECHREPORT{samuel:tex,
+ AUTHOR = "Arthur L. Samuel",
+ TITLE = "First Grade {\TeX}: A Beginner's {\TeX} Manual",
+ INSTITUTION = {Computer Science Department, Stanford University},
+ YEAR = "1983",
+ NUMBER = "SATN-CS-83-985",
+ ADDRESS = {Stanford, California},
+ MONTH = Nov
+}
+
+@BOOK{lamport:latex,
+ AUTHOR = {Leslie Lamport},
+ TITLE = {{\LaTeX}: A Document Preparation System. User's Guide and
+ Reference Manual},
+ PUBLISHER = {Addison-Wesley},
+ YEAR = {1986},
+ ADDRESS = {Reading, Massachusetts}
+}
+
+@BOOK{spivak:ams,
+ AUTHOR = {Michael D. Spivak},
+ TITLE = {The Joy of {\TeX}},
+ PUBLISHER = {American Mathematical Society},
+ YEAR = {1985}
+}
+
+@MANUAL{patashnik:bibtex,
+ TITLE = "Bib{\TeX}ing",
+ AUTHOR = "Oren Patashnik",
+ ORGANIZATION = {Computer Science Department, Stanford University},
+ ADDRESS = {Stanford, California},
+ MONTH = jan,
+ YEAR = "1988",
+ NOTE = {Available in the Bib{\TeX} release}
+}
+
+@MANUAL{patashnik:bibhax,
+ TITLE = {Designing Bib{\TeX} Styles},
+ AUTHOR = {Oren Patashnik},
+ ORGANIZATION = {Computer Science Department, Stanford University},
+ MONTH = jan,
+ YEAR = {1988}
+}
+
+@ARTICLE{fuchs:dvi0,
+ AUTHOR = "David Fuchs",
+ TITLE = "The Format of {\TeX}'s {DVI} Files Version 1",
+ JOURNAL = "TUGboat",
+ YEAR = "1981",
+ VOLUME = "2",
+ NUMBER = "2",
+ PAGES = "12--16",
+ MONTH = Jul
+}
+
+@ARTICLE{fuchs:dvi,
+ AUTHOR = "David Fuchs",
+ TITLE = "Device Independent File Format",
+ JOURNAL = "TUGboat",
+ YEAR = "1982",
+ VOLUME = "3",
+ NUMBER = "2",
+ PAGES = "14--19",
+ MONTH = Oct
+}
+
+
diff --git a/macros/latex209/contrib/ucthesis/uctest.tex b/macros/latex209/contrib/ucthesis/uctest.tex
new file mode 100644
index 0000000000..8f8a751201
--- /dev/null
+++ b/macros/latex209/contrib/ucthesis/uctest.tex
@@ -0,0 +1,109 @@
+\documentstyle[11pt]{ucthesis}
+\begin{document}
+
+% Declarations for Front Matter
+
+\title{The Elements of Theses}
+\author{Perry H. Disdainful}
+\degreeyear{1994}
+\degree{Doctor of Philosophy}
+\chair{Professor Ignatius Arrogant}
+\othermembers{Professor Ivory Insular\\
+Professor General Reference}
+\numberofmembers{3}
+\prevdegrees{B.A. (University of Northern South Dakota at Hoople) 1978\\
+M.S. (Ed's School of Quantum Mechanics and Muffler Repair Shop) 1989}
+\field{Aboriginal Basketry}
+\campus{Berkeley}
+
+\maketitle
+\approvalpage
+\copyrightpage
+
+\begin{abstract}
+Theses have elements. Isn't that nice?
+
+\abstractsignature
+\end{abstract}
+
+\begin{frontmatter}
+
+\begin{dedication}
+\null\vfil
+{\large
+\begin{center}
+To myself,\\\vspace{12pt}
+Perry H. Disdainful,\\\vspace{12pt}
+the only person worthy of my company.
+\end{center}}
+\vfil\null
+\end{dedication}
+
+
+\tableofcontents
+\listoffigures
+\listoftables
+\begin{acknowledgements}
+I want to ``thank'' my committee, without whose ridiculous demands, I
+would have graduated so, so, very much faster.
+\end{acknowledgements}
+
+\end{frontmatter}
+
+\part{First Part}
+
+\chapter{Introduction}
+
+Every dissertation should have an introduction. You might not realize
+it, but the introduction should introduce the concepts, backgrouand,
+and goals of the dissertation.
+
+\begin{table}
+\begin{tabular}{|l|r|}
+ \hline
+Title & Author \\
+\hline
+War And Peace & Leo Tolstoy \\
+The Great Gatsby & F. Scott Fitzgerald \\ \hline
+\end{tabular}
+\caption{A normalsize table. There has been a complaint that table
+captions are not single-spaced. This is odd because the code
+indicates that they should be.}
+\end{table}
+
+\begin{table}
+\caption{A small table.}
+\begin{scriptsizetabular}{|l|r|}
+ \hline
+Title & Author \\
+\hline
+War And Peace & Leo Tolstoy \\
+The Great Gatsby & F. Scott Fitzgerald \\ \hline
+\end{scriptsizetabular}
+\end{table}
+
+\chapter{Previous Work}
+
+Some other research was once performed.
+
+\begin{figure}
+\caption{A first figure.}
+\end{figure}
+
+\begin{figure}
+\caption{A second figure.}
+\end{figure}
+
+\chapter{Conclusion}
+
+\nocite{*}
+\bibliographystyle{plain}
+\bibliography{uctest}
+
+\appendix
+\chapter{Some Ancillary Stuff}
+
+Ancillary material should be put in appendices, which appear after the
+bibliography.
+
+\end{document}
diff --git a/macros/latex209/contrib/ucthesis/ucthesis.doc b/macros/latex209/contrib/ucthesis/ucthesis.doc
new file mode 100644
index 0000000000..d666ae1b39
--- /dev/null
+++ b/macros/latex209/contrib/ucthesis/ucthesis.doc
@@ -0,0 +1,1238 @@
+% UCTHESIS DOCUMENT STYLE -- Release info is below.
+% for LaTeX version 2.09
+
+\typeout{Document Style `ucthesis' <v2.7, 30 October 1994>.}
+
+%%% ====================================================================
+%%% @LaTeX-style-file{
+%%% filename = "ucthesis.sty",
+%%% version = "2.7",
+%%% date = "30 October 1994",
+%%% author = "Ethan V. Munson",
+%%% address = ""
+%%% telephone = "",
+%%% email = "",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "LaTeX, ucthesis",
+%%% supported = "No, future changes should only be made to
+%%% the LaTeX 2e versions (3.0 and higher)",
+%%% docstring = "This file is the main file for the ucthesis
+%%% style, which is intended to meet the requirements
+%%% for University of California Ph.D. dissertations.
+%%% It is based on the standard report.sty as
+%%% modified by Mittelbach and Schopf in Jan 1992.
+%%% The primary differences are (1) the use of pseudo-
+%%% double-spacing, except in certain special
+%%% environments; and (2) the use of a 6 inch line
+%%% with 4em paragraph indentation. It is only
+%%% intended for single-sided printing. Double-sided
+%%% printing may be possible, but you're on
+%%% your own.
+%%%
+%%% Version 2.x fixes a bug in the previous
+%%% version of 20 Jun 1988. The bug was that
+%%% "draft" optional mode didn't work because of
+%%% problems in handling optional arguments.
+%%% This file does not seem to work with earlier
+%%% versions of LaTeX (pre-Jan 1992).
+%%%
+%%% Version 2.3 includes a single-spaced
+%%% tabular* environment.
+%%%
+%%% Version 2.4 sets \evensidemargin correctly
+%%% for two-sided style. It also adds new
+%%% environments (\smalltabular and
+%%% \scriptsizetabular) which produce tables
+%%% with smaller fonts. The obvious methods
+%%% of producing small-font tables don't work
+%%% in ucthesis style.
+%%%
+%%% Version 2.5 adds support for the \maketitle
+%%% macro.
+%%%
+%%% Version 2.6 adds support for complete and
+%%% correct front matter. Some dead code was
+%%% removed, too.
+%%%
+%%% Version 2.7 adds front matter support for
+%%% thesis committees of more than 3 people
+%%% and for a labeled signature line on the
+%%% abstract page.
+%%%
+%%% Some users have had problems with the
+%%% margins ending up too small on one side.
+%%% This appears to be a DVI-to-PostScript
+%%% driver or printer-adjustment problem.
+%%% If you have such trouble, make small adjustments
+%%% to the \textwidth and \oddsidemargin
+%%% settings in your document preamble.
+%%%
+%%% Another problem some people have had is
+%%% that you can't use \pagestyle{headings}
+%%% and \markboth if you use \part. The solution
+%%% is to get the headerfooter style, which is
+%%% nice and simple to use. The fancyheadings
+%%% style is also nice."
+%%% }
+%%% ====================================================================
+% PREPARING A FOREIGN LANGUAGE VERSION:
+%
+% This document style is for documents prepared in the English language.
+% To prepare a version for another language, various English words must
+% be replaced. Many of the English words that required replacement are
+% indicated below, where we give the name of the command in which the
+% words appear, and which must be redefined, with the actual words
+% underlined.
+%
+% Other English words that need replacement can be found in the macros
+% supporting the title and approval pages.
+%
+% \tableofcontents:
+\def\contentsname{Contents}
+% ~~~~~~~~
+%
+% \listoffigures:
+\def\listfigurename{List of Figures}
+% ~~~~~~~~~~~~~~~
+%
+% \listoftables:
+\def\listtablename{List of Tables}
+% ~~~~~~~~~~~~~~
+%
+% \thebibliography:
+\def\bibname{Bibliography}
+% ~~~~~~~~~~~~
+%
+% \theindex:
+\def\indexname{Index}
+% ~~~~~
+%
+% figure environment:
+\def\figurename{Figure}
+% ~~~~~~
+%
+% table environment:
+\def\tablename{Table}
+% ~~~~~
+%
+% \chapter:
+\def\chaptername{Chapter}
+% ~~~~~~~
+% \appendix:
+\def\appendixname{Appendix}
+% ~~~~~~~~
+% \part
+\def\partname{Part}
+% ~~~~
+% abstract environment:
+\def\abstractname{Abstract}
+% ~~~~~~~~
+%
+% acknowledge environment:
+\def\acknowledgename{Acknowledgements}
+% ~~~~~~~~~~~~~~~~
+
+% ****************************************
+% * OPTIONS *
+% ****************************************
+%
+
+% CHOOSING THE TYPE SIZE:
+%
+% The type size option is handled by reading a different file for each
+% size, as follows, to define font size-specific commands:
+% 10pt : UCT10, 11pt : UCT11, 12pt : UCT12
+% Implemented by \def'ing \@ptsize to last digit of file name.
+%
+
+\def\@ptsize{1} % Default is UCT11.STY
+\@namedef{ds@10pt}{\def\@ptsize{0}} % 10pt option reads in UCT10.STY
+\@namedef{ds@11pt}{\def\@ptsize{1}} % 11pt option reads in UCT10.STY
+\@namedef{ds@12pt}{\def\@ptsize{2}} % 12pt option reads in UCT12.STY
+
+% Two-side or one-side printing.
+%
+% \@twosidefalse % Default is one-sided printing.
+\def\ds@twoside{\@twosidetrue % Defines twoside option.
+ \@mparswitchtrue} % Marginpars go on outside of page.
+
+% This is a tricky solution to a tough bootstrapping problem. The
+% "draft" option requires the definition of the \ssp macro. However,
+% the \ssp macro requires that the uct1?.sty file has been loaded. This
+% loading is done by the \@options command which also invokes the
+% \ds@draft macro. This was a cyclic dependency in the previous
+% version. To break this dependency, I have made \ds@draft set a marker
+% which is later tested to determine whether to actually do the draft
+% mode actions.
+%
+% Ethan Munson (October 16, 1992)
+
+\def\@draftmark{0}
+\def\ds@draft{\def\@draftmark{1}}
+
+% FMi 91/03/30: made twocolum.sty a file and twocolumn an option.
+
+% RmS 91/10/15: moved actual reading of twocolumn.sty
+% to the end of this file.
+%\def\ds@twocolumn{\@@input twocolum.sty\relax}
+\def\ds@twocolumn{\@twocolumntrue}
+
+% The \@options command causes the execution of every command \ds@FOO
+% which is defined and for which the user typed the FOO option in his
+% \documentstyle command. For every option BAR he typed for which
+% \ds@BAR is not defined, the file BAR.sty will be read after the
+% present (main) .STY file is executed.
+
+\@options
+
+\input uct1\@ptsize.sty\relax
+
+% For some environments we switch back to single-spacing, also
+% provides \dsp in case you need double-spacing where single-spacing
+% is otherwise used.
+\def\ssp{\def\baselinestretch{1.0}\large\normalsize}
+\def\dsp{\def\baselinestretch{1.37}\large\normalsize}
+
+% \smallssp is used to produce tabular environments in the small font.
+% This is required because single-spacing requires a change in font size.
+% \scriptsizessp is a still smaller version of the same thing.
+
+\def\smallssp{\def\baselinestretch{1.0}\large\small}
+\def\scriptsizessp{\def\baselinestretch{1.0}\large\scriptsize}
+
+% draft option (this is where the draft option is actually implemented)
+%
+% \overfullrule = 0pt % Default is don't mark overfull hboxes.
+\ifnum \@draftmark = 1
+\ssp % Single-spaces and
+\overfullrule 5pt % causes overfull hboxes to be marked.
+\fi
+
+% ****************************************
+% * FRONT MATTER *
+% ****************************************
+%
+
+% DECLARATIONS
+%
+% These macros are used to declare arguments needed for the
+% construction of the front matter.
+
+% The year the degree will be officially conferred
+\def\degreeyear#1{\gdef\@degreeyear{#1}}
+
+% The full (unabbreviated) name of the degree
+\def\degree#1{\gdef\@degree{#1}}
+
+% All previous degrees: one per line in chronological order
+\def\prevdegrees#1{\gdef\@prevdegrees{#1}}
+
+% The name of your committee's chair
+\def\chair#1{\gdef\@chair{#1}}
+
+% The names of your other committe members, one per line
+\def\othermembers#1{\gdef\@othermembers{#1}}
+
+% The number of committee members, which affects both the
+% number of lines and the amount of space between lines
+% on the approval page.
+\def\@numberofmembers{3}
+\def\@approvalspace{.75in}
+\def\numberofmembers#1{\gdef\@numberofmembers{#1}
+\ifnum \@numberofmembers > 3
+\gdef\@approvalspace{.5in}
+\fi}
+
+% The name of your degree's field (e.g. Psychology, Computer Science)
+\def\field#1{\gdef\@field{#1}}
+
+% You have to define the campus name twice because I can't figure out
+% how to get the TeX \uppercase macro to work for me (EVM, 9/21/94)
+
+% The name of your UC Campus CAPITALIZED (e.g. Berkeley, Los Angeles)
+\def\campus#1{\gdef\@campus{#1}}
+
+% \alwayssingle and \endalwayssingle
+%
+% These macros define an environment for front matter that is always
+% single column even in a double-column document.
+
+\def\alwayssingle{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi}
+
+\def\endalwayssingle{\if@restonecol\twocolumn \else \newpage \fi}
+
+% \maketitle outputs the complete titlepage. It requires all the
+% above macros except \campuscap. It is probably not correct for
+% joint (e.g. UCSD/SDSU) degrees.
+
+\def\maketitle{
+{\ssp
+\begin{alwayssingle}
+ \let\footnotesize\small
+ \let\footnoterule\relax
+ \thispagestyle{empty}
+ \setcounter{page}{1}
+
+ \null\vfil
+ \begin{center}
+ \Large
+ {\bf {\@title} \par}
+ \bigskip \medskip \large
+ by \par
+ \bigskip \medskip
+ {\@author} \par
+\vspace{6ex}
+ {\@prevdegrees} \par
+\vspace{6ex}
+ A dissertation submitted in partial satisfaction of the \par
+\smallskip
+ requirements for the degree of \par
+\smallskip
+ {\@degree} \par
+ \bigskip \medskip
+ in \par
+ \bigskip \medskip
+ {\@field}\par
+ \bigskip \medskip
+ in the \par
+ \bigskip \medskip
+ GRADUATE DIVISION \par
+\smallskip
+ of the \par
+\smallskip
+ UNIVERSITY of CALIFORNIA at {\expandafter\uppercase\expandafter{\@campus}}
+ \end{center}
+{
+\vspace{6ex}
+\large
+ Committee in charge:
+\begin{quote}
+{\@chair}, Chair\newline
+{\@othermembers}
+\end{quote}
+ \begin{center}
+ {\@degreeyear}
+ \end{center}
+}
+ \vfil\null
+\end{alwayssingle}
+
+\setcounter{footnote}{0}
+}}
+
+% APPROVALPAGE
+%
+% The \approvalpage macro emits a UC-approved approval page ready for
+% your committee's signature. It is not an automatic part of the
+% output because there's really no point in printing it until you are
+% ready to get signatures. It requires the the \year, \author, and
+% \campus macros have been defined. It uses lots of tricky spacing
+% that is probably better handled with tabular environment code, but
+% I'm too lazy to fix it. (EVM, 9/19/94)
+
+\def\approvalpage{
+\begin{alwayssingle}
+\thispagestyle{empty}
+\null\vfill
+\begin{center}
+\large The dissertation of {\@author} is approved: \\
+\vspace{.25in}
+\vspace{\@approvalspace}
+$\:\overline{~~~~ \mbox{\rule{0in}{0.16in}\small Chair \hspace{3.15in} Date }}\:$ \\
+\vspace{\@approvalspace}
+$\:\overline{~~~~ \mbox{\rule{0in}{0.16in}\small ~\hspace{3.5in} Date }}\:$ \\
+\vspace{\@approvalspace}
+$\:\overline{~~~~ \mbox{\rule{0in}{0.16in}\small ~\hspace{3.5in} Date }}\:$ \\
+\vspace{\@approvalspace}
+\ifnum \@numberofmembers > 3
+$\:\overline{~~~~ \mbox{\rule{0in}{0.16in}\small ~\hspace{3.5in} Date }}\:$ \\
+\vspace{\@approvalspace}
+\fi
+\ifnum \@numberofmembers > 4
+$\:\overline{~~~~ \mbox{\rule{0in}{0.16in}\small ~\hspace{3.5in} Date }}\:$ \\
+\vspace{\@approvalspace}
+\fi
+\ifnum \@numberofmembers > 5
+$\:\overline{~~~~ \mbox{\rule{0in}{0.16in}\small ~\hspace{3.5in} Date }}\:$ \\
+\vspace{\@approvalspace}
+\fi
+{\large University of California at {\@campus}} \\
+\vspace{-.25in}
+\vspace{\@approvalspace}
+{\large \@degreeyear}
+\end{center}
+\vfill\null
+\end{alwayssingle}
+}
+
+% COPYRIGHTPAGE
+%
+% While it's technically optional, you probably want a copyright page.
+% This is a macro, not an environment, because it can be generated
+% with the \title, \author, and \year macros.
+
+\def\copyrightpage{
+\begin{alwayssingle}
+\thispagestyle{empty}
+\begin{center}
+{\Large
+{\bf\@title}\par
+\vspace{1in}
+Copyright \@degreeyear\par
+by\par
+\@author}
+\end{center}
+\end{alwayssingle}}
+
+% ABSTRACT
+%
+% The ABSTRACT environment allows for multi-page abstracts which,
+% in accordance with UC rules, is numbered separately from the rest
+% of the rest of the dissertation in Arabic. It requires definition
+% of the \title, \author, \degree, \field, \campus, and \chair macros.
+
+
+\def\abstract{
+\begin{alwayssingle}
+\pagestyle{plain}
+\thispagestyle{plain}
+\setcounter{page}{1}
+\begin{center}
+{\large
+{\bf \abstractname}\par
+\vspace{.5in}
+\@title\par
+\vspace{.1in}
+by\par
+\vspace{.1in}
+\@author\par
+{\@degree} in \@field\par
+\vspace{.1in}
+University of California at {\@campus}\par
+\vspace{.1in}
+{\@chair}, Chair}
+\vspace{.1in}
+\end{center}}
+
+\def\endabstract{\par\vfil\null\end{alwayssingle}
+}
+
+\def\abstractsignature{
+\hspace*{\fill}
+\begin{minipage}[t]{3.25in}
+\addtolength{\baselineskip}{-.5\baselineskip}
+\vspace{1.7cm}
+\rule{3.2in}{.5pt}\\
+\@chair\\
+Dissertation Committee Chair
+\end{minipage}}
+
+% DEDICATION
+%
+% The dedication environment just makes sure the dedication gets its
+% own page.
+
+\newenvironment{dedication}
+{\begin{alwayssingle}}
+{\end{alwayssingle}}
+
+% ACKNOWLEDGEMENTS
+%
+% The acknowledgements environment puts a large, bold, centered
+% "Acknowledgements" label at the top of the page.
+
+\newenvironment{acknowledgements}
+{\begin{alwayssingle}
+\begin{center}
+{\large \bf \acknowledgename}
+\end{center}
+}
+{\end{alwayssingle}}
+
+% FRONTMATTER environment
+%
+% The FRONTMATTER environment makes sure that page numbering is set
+% correctly (roman, lower-case, starting at 3) for the front matter
+% that follows the abstract. It also resets page-numbering for
+% the remainder of the dissertation (arabic, starting at 1).
+
+\newenvironment{frontmatter}
+{\setcounter{page}{3}\renewcommand{\thepage}{\roman{page}}}
+{\newpage\renewcommand{\thepage}{\arabic{page}}\setcounter{page}{1}}
+
+
+% ****************************************
+% * LISTS *
+% ****************************************
+%
+
+% ENUMERATE
+% Enumeration is done with four counters: enumi, enumii, enumiii
+% and enumiv, where enumN controls the numbering of the Nth level
+% enumeration. The label is generated by the commands \labelenumi
+% ... \labelenumiv. The expansion of \p@enumN\theenumN defines the
+% output of a \ref command.
+%
+% 16 Mar 88 -- changed defs of \labelenum... to use \theenum...
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+% ITEMIZE
+% Itemization is controlled by four commands: \labelitemi, \labelitemii,
+% \labelitemiii, and \labelitemiv, which define the labels of the
+% various itemization levels.
+
+\def\labelitemi{$\m@th\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\m@th\ast$}
+\def\labelitemiv{$\m@th\cdot$}
+
+
+% VERSE
+% The verse environment is defined by making clever use of the
+% list environment's parameters. The user types \\ to end a line.
+% This is implemented by \let'in \\ equal \@centercr.
+%
+\def\verse{\par\let\\=\@centercr
+ \list{}{\ssp\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+% QUOTATION
+% Fills lines
+% Indents paragraph
+%
+\def\quotation{\par\list{}{\ssp\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin\parsep \z@ plus\p@}\item[]}
+\let\endquotation=\endlist
+
+% QUOTE -- same as quotation except no paragraph indentation,
+%
+\def\quote{\par\list{}{\ssp\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+% DESCRIPTION
+%
+% To change the formatting of the label, you must redefine
+% \descriptionlabel.
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+\newdimen\descriptionmargin
+\descriptionmargin=3em
+
+
+% ****************************************
+% * OTHER ENVIRONMENTS *
+% ****************************************
+%
+%
+% VERBATIM
+%
+% standard verbatim mode driver macro is modified to use
+% single-spacing. There appears to be a small problem with extra
+% vertical space (1 or 2 points worth) after this environment.
+% Probably, this results from returning to double-spacing before
+% issuing a \parskip, but I'm not enough of TeX hacker to figure out
+% the source of the problem. (EVM, 9/25/94)
+
+\def\@verbatim{\trivlist\ssp \item[]\if@minipage\else\vskip\parskip\fi
+\leftskip\@totalleftmargin\rightskip\z@
+\parindent\z@\parfillskip\@flushglue\parskip\z@
+%%RmS 91/08/26 Added \@@par to clear possible \parshape definition
+%%from a surrounding list (the verbatim guru says)
+\@@par
+\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par
+\penalty\interlinepenalty}%
+\obeylines \tt \catcode``=13 \@noligs \let\do\@makeother \dospecials}
+
+% ARRAY AND TABULAR
+%
+
+\arraycolsep 5pt % Half the space between columns in an array
+ % environment.
+\tabcolsep 6pt % Half the space between columns in a tabular
+ % environment.
+\arrayrulewidth .4pt % Width of rules in array and tabular environment.
+\doublerulesep 2pt % Space between adjacent rules in array or tabular
+ % environment.
+
+% We have to redefine array here in order to make it single-spaced.
+% (Not sure if this is really necessary.)
+\def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv \let\\\@arraycr\let\@halignto\@empty\@tabarray}
+
+% TABBING
+%
+\tabbingsep \labelsep % Space used by the \' command.
+ % (See LaTeX manual.)
+
+% We have to redefine tabular here in order to make it single-spaced.
+\def\tabular{\par\ssp\let\@halignto\@empty\@tabular}
+\expandafter \def\csname tabular*\endcsname #1{\par\ssp\def\@halignto{to#1}\@tabular}
+
+% \smalltabular and \smalltabular* are alternative tabular styles
+% in the \small font. They are required because single-spacing implies a
+% change of font to a particular size.
+% EVM, 7/20/93
+\def\smalltabular{\par\smallssp\let\@halignto\@empty\@tabular}
+\def\endsmalltabular{\endtabular}
+\expandafter \def\csname smalltabular*\endcsname #1{\par\smallssp\def\@halignto{to#1}\@tabular}
+\expandafter \let \csname endsmalltabular*\endcsname = \endtabular
+
+% \scriptsizetabular and \scriptsizetabular* are analogs of \smalltabular
+\def\scriptsizetabular{\par\scriptsizessp\let\@halignto\@empty\@tabular}
+\def\endscriptsizetabular{\endtabular}
+\expandafter \def\csname scriptsizetabular*\endcsname #1{\par\scriptsizessp\def\@halignto{to#1}\@tabular}
+\expandafter \let \csname endscriptsizetabular*\endcsname = \endtabular
+
+% MINIPAGE
+% \@minipagerestore is called upon entry to a minipage environment to
+% set up things that are to be handled differently inside a minipage
+% environment. In the current styles, it does nothing.
+%
+% \skip\@mpfootins : plays same role for footnotes in a minipage as
+% \skip\footins does for ordinary footnotes
+
+\skip\@mpfootins = \skip\footins
+
+% FRAMEBOX
+%
+\fboxsep = 3pt % Space left between box and text by \fbox and
+ % \framebox.
+\fboxrule = .4pt % Width of rules in box made by \fbox and \framebox.
+
+
+% ****************************************
+% * CHAPTERS AND SECTIONS *
+% ****************************************
+%
+% DEFINE COUNTERS:
+%
+% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is
+% reset to zero when counter OLDCTR is
+% stepped.
+% Counter OLDCTR must already be defined.
+
+% Must redefine @startsection so that we always get indentation.
+\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi
+ \par \@tempskipa #4\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \relax\fi
+ \if@nobreak \everypar{}\else
+ \addpenalty{\@secpenalty}\addvspace{\@tempskipa}\fi \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+
+\newcounter {part}
+\newcounter {chapter}
+\newcounter {section}[chapter]
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+% For any counter CTR, \theCTR is a macro that defines the printed
+% version of counter CTR. It is defined in terms of the following
+% macros:
+%
+% \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
+% \roman{COUNTER} : Its value printed as a lower-case roman numberal.
+% \Roman{COUNTER} : Its value printed as an upper-case roman numberal.
+% \alph{COUNTER} : Value of COUNTER printed as a lower-case letter:
+% 1 = a, 2 = b, etc.
+% \Alph{COUNTER} : Value of COUNTER printed as an upper-case letter:
+% 1 = A, 2 = B, etc.
+%
+
+\def\thepart {\Roman{part}}
+\def\thechapter {\arabic{chapter}}
+\def\thesection {\thechapter.\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+% \@chapapp is initially defined to be '\chaptername'. The \appendix
+% command redefines it to be '\appendixname'.
+%
+\def\@chapapp{\chaptername}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% PART %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\part{\cleardoublepage % Starts new page.
+ \thispagestyle{plain}% % Page style of part page is 'plain'
+ \if@twocolumn % IF two-column style
+ \onecolumn % THEN \onecolumn
+ \@tempswatrue % @tempswa := true
+ \else \@tempswafalse % ELSE @tempswa := false
+ \fi % FI
+ \hbox{}\vfil % Add fil glue to center title
+%% \bgroup \centering % BEGIN centering %% Removed 19 Jan 88
+ \secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+ \refstepcounter{part}% % THEN step
+ % part counter
+ \addcontentsline{toc}{part}{\thepart % add toc line
+ \hspace{1em}#1}\else % ELSE add
+ % unnumb. line
+ \addcontentsline{toc}{part}{#1}\fi % FI
+ \markboth{}{}%
+ {\centering % %% added 19 Jan 88
+ \interlinepenalty \@M %% RmS added 11 Nov 91
+ \ifnum \c@secnumdepth >-2\relax % IF secnumdepth > -2
+ \huge\bf \partname~\thepart % THEN Print '\partname' and
+ \par % number in \huge bold.
+ \vskip 20\p@\fi % Add space before title.
+ \Huge \bf % FI
+ #2\par}\@endpart} % Print Title in \Huge bold.
+ % Bug Fix 13 Nov 89: #1 -> #2
+
+
+% \@endpart finishes the part page
+%
+\def\@endpart{\vfil\newpage % End page with 1fil glue.
+ \if@twoside % IF twoside printing
+ \hbox{}% % THEN Produce totally blank page
+ \thispagestyle{empty}%
+ \newpage
+ \fi % FI
+ \if@tempswa % IF @tempswa = true
+ \twocolumn % THEN \twocolumn
+ \fi} % FI
+
+\def\@spart#1{{\centering % %% added 19 Jan 88
+ \interlinepenalty \@M %% RmS added 11 Nov 91
+ \Huge \bf % Print title in \Huge boldface
+ #1\par}\@endpart}
+
+
+
+
+
+% ****************************************
+% * TABLE OF CONTENTS, ETC. *
+% ****************************************
+%
+% A \subsection command writes a
+% \contentsline{subsection}{TITLE}{PAGE}
+% command on the .toc file, where TITLE contains the contents of the
+% entry and PAGE is the page number. If subsections are being numbered,
+% then TITLE will be of the form
+% \numberline{NUM}{HEADING}
+% where NUM is the number produced by \thesubsection. Other sectioning
+% commands work similarly.
+%
+% A \caption command in a 'figure' environment writes
+% \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
+% on the .lof file, where NUM is the number produced by \thefigure and
+% CAPTION is the figure caption. It works similarly for a 'table'
+% environment.
+%
+% The command \contentsline{NAME} expands to \l@NAME. So, to specify
+% the table of contents, we must define \l@chapter, \l@section,
+% \l@subsection, ... ; to specify the list of figures, we must define
+% \l@figure; and so on. Most of these can be defined with the
+% \@dottedtocline command, which works as follows.
+%
+% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
+% LEVEL : An entry is produced only if LEVEL < or = value of
+% 'tocdepth' counter. Note, \chapter is level 0, \section
+% is level 1, etc.
+% INDENT : The indentation from the outer left margin of the start
+% of the contents line.
+% NUMWIDTH : The width of a box in which the section number is to go,
+% if TITLE includes a \numberline command.
+%
+% This command uses the following three parameters, which are set
+% with a \def (so em's can be used to make them depend upon the font).
+% \@pnumwidth : The width of a box in which the page number is put.
+% \@tocrmarg : The right margin for multiple line entries. One
+% wants \@tocrmarg > or = \@pnumwidth
+% \@dotsep : Separation between dots, in mu units. Should be
+% \def'd to a number like 2 or 1.7
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{2}
+
+
+% TABLEOFCONTENTS
+% In ucthesis style, \tableofcontents, \listoffigures, etc. are always
+% set in single-column style. @restonecol
+
+\def\tableofcontents{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{\contentsname
+ \@mkboth{\uppercase{\contentsname}}{\uppercase{\contentsname}}}%
+ {\ssp\@starttoc{toc}}\if@restonecol\twocolumn\fi}
+
+\def\l@part#1#2{\addpenalty{-\@highpenalty}%
+ \addvspace{2.25em plus\p@}% space above part line
+ \begingroup
+ \@tempdima 3em % width of box holding part number, used by
+ \parindent \z@ \rightskip \@pnumwidth %% \numberline
+ \parfillskip -\@pnumwidth
+ {\large \bf % set line in \large boldface
+ \leavevmode % TeX command to enter horizontal mode.
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak % Never break after part entry
+ \global\@nobreaktrue %% Added 24 May 89 as
+ \everypar{\global\@nobreakfalse\everypar{}}%% suggested by
+ %% Jerry Leichter
+ \endgroup}
+
+%% First line of l@chapter changed 24 May 89, as suggested
+%% by Jerry Leichter.
+%%
+\def\l@chapter#1#2{\addpenalty{-\@highpenalty}%
+ \vskip 1.0em plus\p@ % space above chapter line
+ \@tempdima 1.5em % width of box holding chapter number
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf % Boldface.
+ \leavevmode % TeX command to enter horizontal mode.
+ \advance\leftskip\@tempdima %% added 5 Feb 88 to conform to
+ \hskip -\leftskip %% 25 Jan 88 change to \numberline
+ #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \penalty\@highpenalty %% added 24 May 89, suggested by J. Leichter
+ \endgroup}
+
+\def\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
+\def\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
+\def\l@paragraph{\@dottedtocline{4}{10em}{5em}}
+\def\l@subparagraph{\@dottedtocline{5}{12em}{6em}}
+
+% LIST OF FIGURES
+%
+% Single-space list of figures, add it to the table of contents.
+\def\listoffigures{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{\listfigurename\@mkboth{\uppercase{\listfigurename}}{\uppercase{\listfigurename}}}
+ \addcontentsline{toc}{chapter}{\listfigurename}
+ {\ssp\@starttoc{lof}}\if@restonecol
+ \twocolumn\fi}
+
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+% LIST OF TABLES
+%
+\def\listoftables{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{\listtablename\@mkboth{\uppercase{\listtablename}}%
+ {\uppercase{\listtablename}}}\@starttoc{lot}\if@restonecol
+ \twocolumn\fi}
+\def\listoftables{\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{\listtablename\@mkboth{\uppercase{\listtablename}}{\uppercase{\listtablename}}}
+ \addcontentsline{toc}{chapter}{\listtablename}
+ {\ssp\@starttoc{lot}}\if@restonecol
+ \twocolumn\fi}
+
+
+\let\l@table\l@figure
+
+
+
+% ****************************************
+% * BIBLIOGRAPHY *
+% ****************************************
+%
+% The thebibliography environment executes the following commands:
+%
+% \def\newblock{\hskip .11em plus .33em minus .07em} --
+% Defines the `closed' format, where the blocks (major units of
+% information) of an entry run together.
+%
+% \sloppy -- Used because it's rather hard to do line breaks in
+% bibliographies,
+%
+% \sfcode`\.=1000\relax --
+% Causes a `.' (period) not toproduce an end-of-sentence space.
+
+%% RmS 91/10/27 [ .. ] replaced by \@biblabel{ .. }
+%% RmS 91/11/13: Changed counter enumi to enumiv,
+%% as it says in the comment in latex.tex
+%% RmS 92/01/14: Set \p@enumiv to {} and \theenumiv to \arabic{enumiv}
+%% to get correct references
+\def\thebibliography#1{\chapter*{\bibname\@mkboth
+ {\uppercase{\bibname}}{\uppercase{\bibname}}}
+ \addcontentsline{toc}{chapter}{\bibname}
+ \list{\@biblabel{\arabic{enumiv}}}{\settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \def\theenumiv{\arabic{enumiv}}}%
+ \def\newblock{\hskip .11em plus.33em minus.07em}%
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=\@m}
+
+
+%% 91/08/26 FMI & RmS: introduced warning instead of error
+
+\def\endthebibliography{%
+ \def\@noitemerr{\@warning{Empty `thebibliography' environment}}%
+ \endlist}
+
+
+% \def\@biblabel#1{[#1]\hfill} % Produces the label for a \bibitem[...]
+ % command.
+% \def\@cite#1{[#1]} % Produces the output of the \cite
+ % command.
+
+
+
+% ****************************************
+% * THE INDEX *
+% ****************************************
+%
+% THE THEINDEX ENVIRONMENT
+% Produces double column format, with each paragraph a separate entry.
+% The user commands \item, \subitem and \subsubitem are used to
+% produce the entries, and \indexspace adds an extra vertical space
+% that's the right size to put above the first entry with a new letter
+% of the alphabet.
+
+\newif\if@restonecol
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35\p@\twocolumn[\@makeschapterhead{\indexname}]%
+ \@mkboth{\uppercase{\indexname}}{\uppercase{\indexname}}%
+ \thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3\p@\relax\let\item\@idxitem}
+
+\def\@idxitem{\par\hangindent 40\p@}
+
+\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
+
+\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
+
+
+% ****************************************
+% * FOOTNOTES *
+% ****************************************
+%
+% \footnoterule is a macro to draw the rule separating the footnotes
+% from the text. It should take zero vertical space, so it needs a
+% negative skip to compensate for any positive space taken by the rule.
+% (See PLAIN.TEX.)
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@} % The \hrule has default height of .4pt.
+
+% \newcounter{footnote}
+\@addtoreset{footnote}{chapter} % Numbers footnotes within chapters
+
+% \@makefntext{NOTE} :
+% Must produce the actual footnote, using \@thefnmark as the mark
+% of the footnote and NOTE as the text. It is called when
+% effectively inside a \parbox of width \columnwidth (i.e., with
+% \hsize = \columnwidth).
+%
+% The following macro indents all lines of the footnote by 10pt,
+% and indents the first line of a new paragraph by 1em. To
+% change these dimensions, just substitute the desired value for
+% '10pt' [in both places] or '1em'. The mark is flushright
+% against the footnote.
+% \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+% \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
+% \parindent 1em\noindent
+% \hbox to \z@{\hss$\m@th^{\@thefnmark}$}#1}
+%
+% A simpler macro is used, in which the footnote text is
+% set like an ordinary text paragraph, with no indentation except
+% on the first line of a paragraph, and the first line of the
+% footnote. Thus, all the macro must do is set \parindent
+% to the appropriate value for succeeding paragraphs and put the
+% proper indentation before mark.
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$\m@th^{\@thefnmark}$}#1}
+
+% \@makefnmark : A macro to generate the footnote marker that goes
+% in the text. Default used.
+%
+
+
+% Single-space footnotes.
+\long\def\@footnotetext#1{\insert\footins{\ssp\reset@font\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
+ {\rule{\z@}{\footnotesep}\ignorespaces
+ #1\strut}}}
+
+% ****************************************
+% * FIGURES AND TABLES *
+% ****************************************
+%
+% Float placement parameters. See LaTeX manual for their definition.
+%
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.
+% NUMBER : Figure or table number--e.g., 'Figure 3.2'
+% TEXT : The caption text.
+% Macro should be called inside a \parbox of right width, with
+% \normalsize.
+% changed 25 Jun 86 to fix according to Howard Trickey:
+% instead of \unhbox\@tempboxa\par we do #1: #2\par
+
+% 15 Nov 93: further changes to support captions BEFORE the figure
+% or table. Changes suggested by Donald Arseneau, installed by Ethan
+% Munson. Detailed reasons are:
+% The \unhbox allows \vadjust material (\vspace) to get out;
+% the \vbox to\topskip{} is for captions at the top of top-floats;
+% the \ifdim is for captions above the figure or table;
+% the strut is for tables below the caption.
+
+\long\def\@makecaption#1#2{% Add space only if something is ...
+ \par\ifdim\prevdepth>-\p@ \vskip 10\p@\relax \fi % above the caption
+ \setbox\@tempboxa\hbox{\vbox to\topskip{}#1: #2\unskip\strut}%
+ \ifdim \wd\@tempboxa >\hsize % IF longer than one line:
+ {\ssp#1: #2\unskip\strut\par} % THEN set as ordinary paragraph.
+ \else % ELSE center.
+ \hbox to\hsize{\hfil\unhbox\@tempboxa\hfil}%
+ \fi}
+
+% To define a float of type TYPE (e.g., TYPE = figure), the document
+% style must define the following.
+%
+% \fps@TYPE : The default placement specifier for floats of type
+% TYPE.
+%
+% \ftype@TYPE : The type number for floats of type TYPE. Each TYPE
+% has associated a unique positive TYPE NUMBER, which
+% is a power of two. E.g., figures might have type
+% number 1, tables type number 2, programs type number
+% 4, etc.
+%
+% \ext@TYPE : The file extension indicating the file on which the
+% contents list for float type TYPE is stored. For
+% example, \ext@figure = 'lof'.
+%
+% \fnum@TYPE : A macro to generate the figure number for a caption.
+% For example, \fnum@TYPE == Figure \thefigure.
+%
+% The actual float-making environment commands--e.g., the commands
+% \figure and \endfigure--are defined in terms of the macros \@float
+% and \end@float, which are described below.
+%
+% \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a
+% single-column float of type TYPE with PLACEMENT as the placement
+% specifier. The default value of PLACEMENT is defined by
+% \fps@TYPE. The environment is ended by \end@float. E.g.,
+% \figure == \@float{figure}, \endfigure == \end@float.
+
+
+% FIGURE
+
+\newcounter{figure}[chapter]
+\def\thefigure{\thechapter.\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename~\thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+% TABLE
+%
+\newcounter{table}[chapter]
+\def\thetable{\thechapter.\@arabic\c@table}
+
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename~\thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+% ****************************************
+% * PAGE STYLES *
+% ****************************************
+%
+% The page style 'foo' is defined by defining the command \ps@foo. This
+% command should make only local definitions. There should be no stray
+% spaces in the definition, since they could lead to mysterious extra
+% spaces in the output.
+%
+% The \ps@... command defines the macros \@oddhead, \@oddfoot,
+% \@evenhead, and \@evenfoot to define the running heads and
+% feet---e.g., \@oddhead is the macro to produce the contents of the
+% heading box for odd-numbered pages. It is called inside an \hbox of
+% width \textwidth.
+%
+% To make headings determined by the sectioning commands, the page style
+% defines the commands \chaptermark, \sectionmark, ... , where
+% \chaptermark{TEXT} is called by \chapter to set a mark, and so on.
+% The \...mark commands and the \...head macros are defined with the
+% help of the following macros. (All the \...mark commands should be
+% initialized to no-ops.)
+%
+% MARKING CONVENTIONS:
+% LaTeX extends TeX's \mark facility by producing two kinds of marks
+% a 'left' and a 'right' mark, using the following commands:
+% \markboth{LEFT}{RIGHT} : Adds both marks.
+% \markright{RIGHT} : Adds a 'right' mark.
+% \leftmark : Used in the \@oddhead, \@oddfoot, \@evenhead or
+% \@evenfoot macro, gets the current 'left' mark.
+% Works like TeX's \botmark command.
+% \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or
+% \@evenfoot macro, gets the current 'right' mark.
+% Works like TeX's \firstmark command.
+% The marking commands work reasonably well for right marks 'numbered
+% within' left marks--e.g., the left mark is changed by a \chapter
+% command and the right mark is changed by a \section command. However,
+% it does produce somewhat anomalous results if two \bothmark's occur on
+% the same page.
+%
+%
+% Commands like \tableofcontents that should set the marks in some
+% page styles use a \@mkboth command, which is \let by the pagestyle
+% command (\ps@...) to \markboth for setting the heading or
+% \@gobbletwo to do nothing.
+
+\mark{{}{}} % Initializes TeX's marks
+
+% \ps@empty defined in LATEX.TEX
+
+% Definition of 'headings' page style
+% Note the use of ##1 for parameter of \def\chaptermark inside the
+% \def\ps@headings.
+%
+% 91/03/26 FMi: Added extra set of braces arround |\sl| in |\@oddhead|
+% to support NFSS (|\sl| is a shape |\rm| a family). Also remove
+% unnecessary |\hbox{}| commands.
+%
+
+\if@twoside % If two-sided printing.
+\def\ps@headings{\let\@mkboth\markboth
+ \def\@oddfoot{}\def\@evenfoot{}% No feet.
+ \def\@evenhead{\rm \thepage\hfil \sl \leftmark}% Left heading.
+ \def\@oddhead{{\sl \rightmark}\hfil \rm\thepage}% Right heading.
+ \def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}{}}%
+ \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection. \ \fi ##1}}}}
+\else % If one-sided printing.
+\def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}% No feet.
+\def\@oddhead{{\sl \rightmark}\hfil \rm\thepage}% Heading.
+\def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne
+ \@chapapp\ \thechapter. \ \fi ##1}}}}
+\fi
+
+% Definition of 'myheadings' page style.
+%
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@oddhead{{\sl\rightmark}\hfil \rm\thepage}%
+ \def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark}%
+ \def\@evenfoot{}\def\chaptermark##1{}\def\sectionmark##1{}%
+ \def\subsectionmark##1{}}
+
+% Definition of 'plain' page style.
+%
+\def\ps@plain{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{} % no feet
+\def\@oddhead{\hbox{}\hfil\rm\thepage} % heading (right)
+\def\@evenhead{\rm\thepage\hfil\hbox{}}} % heading (left)
+
+
+
+% ****************************************
+% * MISCELLANEOUS *
+% ****************************************
+%
+% DATE
+%
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+% EQUATION and EQNARRAY -- put here because it must follow \chapter
+% definition
+%
+% \newcounter{equation}
+%
+\@addtoreset{equation}{chapter} % Makes \chapter reset 'equation'
+ % counter.
+
+\def\theequation{\thechapter.\arabic{equation}}
+
+% \jot = 3pt % Extra space added between lines of an eqnarray
+ % environment
+
+% The macro \@eqnnum defines how equation numbers are to appear in
+% equations.
+%
+% \def\@eqnnum{(\theequation)}
+%
+
+
+% ****************************************
+% * INITIALIZATION *
+% ****************************************
+%
+% Default initializations
+
+\ps@plain % 'plain' page style
+\pagenumbering{arabic} % Arabic page numbers
+\if@twoside\else\raggedbottom\fi % Ragged bottom unless twoside
+ % option.
+\if@twocolumn
+ \@@input twocolum.sty\relax
+\else
+ \onecolumn % Single-column.
+\fi
+
+\endinput
diff --git a/macros/latex209/contrib/ucthesis/ucthesis.readme b/macros/latex209/contrib/ucthesis/ucthesis.readme
new file mode 100644
index 0000000000..fc38ec9921
--- /dev/null
+++ b/macros/latex209/contrib/ucthesis/ucthesis.readme
@@ -0,0 +1,220 @@
+This is the README file for the UCTHESIS style for LaTeX. It
+corresponds to version 2.7 of the UCTHESIS style (30 October 1994).
+
+========================
+Using the UCTHESIS style
+========================
+
+Sample File
+-----------
+
+There is a sample dissertation (by the fictitious, but very
+irritating, Perry H Disdainful) in the file uctest.tex. It also uses
+uctest.bib as its bibliography database (though the contents of the
+database are not important). Mostly this is useful as an example of
+how to produce the front matter. If you don't understand LaTeX at
+all, this file might help you get started, but, since you're going to
+be writing a 100+ page document, you should invest the $20 in a copy
+of the LaTeX manual (by Leslie Lamport).
+
+Choosing the UCTHESIS style
+---------------------------
+
+To use the UCTHESIS style, make sure that the ucthesis.sty file is on
+your TEXINPUTS search path and use the following command at the start
+of your input file:
+
+\documentstyle{ucthesis}
+
+============================
+What the UCTHESIS style does
+============================
+
+The UCTHESIS style is a modified version of the standard LaTeX REPORT
+style that is accepted for use with University of California PhD
+dissertations and Masters theses. The available commands are almost
+identical to those of the REPORT style, so your best starting point
+for documentation is the LaTeX manual written by Leslie Lamport.
+
+The key features of the style are:
+
+1) The primary modification to the REPORT style is the use of
+pseudo-double-spacing, since the UC system's rules are still designed
+for typewriters. This is achieved by increasing the \baselinestretch
+parameter to 1.37. The \baselinestretch is returned to a
+single-spaced value of 1.00 for elements like tables, captions, and
+footnotes and for all displayed text (quote, quotation, and verse
+environments). Unfortunately, this is done with a macro called \ssp
+which resets the font size to \normalsize. In LaTeX 2.09 this seems
+to be unavoidable, but it makes it very hard to create tables in
+different font sizes.
+
+2) Margins are 1.5 inches on the left, 1.0 inches elsewhere.
+
+3) Uses 11 point by default; you can use the 10pt or 12pt options for
+those sizes.
+
+4) Page numbers are in the top right corner for all pages.
+
+5) Complete, correct front matter for UC dissertations can be
+generated. If you are not a UC student, you should make sure that the
+front matter is OK with your school.
+
+Optional Styles
+---------------
+
+There are four primary optional styles:
+
+The "draft" style uses single-spacing throughout the document.
+
+The "10pt", "11pt", and "12pt" styles set the default font size to the
+obvious value. The "11pt" option is the default and thus is
+redundant, but is safe to use anyway.
+
+Page Headers
+------------
+
+If you want to use page headers or footers other than the default
+ones, you should try using "headerfooter.sty" or "fancyheadings.sty".
+The myheadings pagestyle doesn't work well and there is no workaround.
+The headerfooter and fancyheadings styles are widely distributed, well
+documented, and easy to use.
+
+============
+Front matter
+============
+
+The other key service provided by this style is that it generates
+correct front matter (title page, approval page, abstract, etc.) with
+a failrly simple set of commands. This facility could be a little
+easier, but compared to an earlier state of affairs, it's pretty
+slick. The format of the front matter is specified quite explicitly
+in the document "Guidelines for Submitting a Doctoral Dissertation or
+Master's Thesis" distributed by the UC Berkeley Graduate Division.
+The current version of the style is based on the April 1994 version of
+this document. Someday, someone may get the guidelines to be written
+in terms of laser printers and computers, rather than for typewriters.
+
+A complete example of the use of the front matter commands can be
+found in the sample dissertation distributed with the style.
+
+Declarations
+------------
+
+To use the front matter macros and environments, you must first
+declare a number of text strings:
+
+\title Dissertation title
+\author Your name as registered with UC (usually w/ full
+ middle name)
+\degreeyear Year your dissertation will be granted
+\degree The title of your degree (e.g. Doctor of Philosophy)
+\chair Title and name of your committee chair
+ (e.g. "Professor Michael A. Harrison")
+\othermembers The names of the other members of your committee
+ separated by linebreaks
+ (e.g. "Professor Susan L. Graham\\Professor Jim Pitman)
+\numberofmembers The number of members on your committee. This defaults to
+ 3 (and thus is optional) and can be any value between
+ 3 and 6. It affects the number of lines on the approval
+ page and the space between them.
+\prevdegrees Your previous degrees
+ "B.A. (University of California, San Diego) 1978\\
+ B.A. (University of California, San Diego) 1986\\
+ M.S. (University of California, Berkeley) 1989"
+\field The official title of your field. This is usually
+ your department's name, but at Berkeley, most
+ Engineering degrees have a more complex name.
+ Be sure to check the guidelines for any special
+ twists on the name of your field.
+\campus The name of your UC campus. This should be capitalized.
+ (e.g. Berkeley)
+
+Title, Approval, and Copyright pages
+------------------------------------
+
+The title, approval, and copyright pages have extremely rigid formats
+that allow them to be generated automatically once the above
+declarations have been made. To generate them, invoke the macros
+
+ \maketitle
+ \approvalpage
+ \copyrightpage
+
+You should probably invoke them in that order, because that's the
+order required by the guidelines.
+
+Abstract Environment
+--------------------
+
+Because you have to provide the text of the abstract, only the title
+can be generated automatically. So, there is an abstract environment.
+It generates the title and numbers the abstract in arabic numerals and
+makes sure that it starts on new page.
+
+The UC system requires that your advisor sign the last page of your
+abstract. Many students just let their advisor just sign at a random
+location on the page, but you can use the \abstractsignature command
+to generate a signature line with your advisor's name printed below
+it. This command generates the signature line at the point it is
+invoked, so it should be placed at the end of the abstract.
+
+Other Front Matter
+------------------
+
+The remaining front matter (dedication, table of contents, lists of
+figures and tables, acknowledgements) MUST be put inside the
+"frontmatter" environment, which ensures that page-numbering is
+handled properly. Within this frontmatter environment, you put the
+environments and commands for the rest of the front matter. There are
+environments for "dedication" and "acknowledgements" and the standard
+LaTeX commands for producing \tableofcontents, \listoffigures, and
+\listoftables.
+
+The standard LaTeX commands are well documented in the LaTeX manual.
+You will probably have to hand edit the .lof (list of figures) and
+.lot (list of tables) files to make verbose captions more suitable for
+this front matter. Once you do this, remember to use the \nofiles
+macro to keep them from getting overwritten.
+
+The acknowledgements and dedication environments make their contents
+start on a new page. The acknowledgements environment also put the
+word "Acknowledgements" in large, bold, centered text at the top of
+the page. For formatting the dedication page, you're on your own.
+After all, the dedication is a kind of poetry and there's no
+predicting the right way to format poetry.
+
+=====================================================
+Other commands not found in the standard report style
+=====================================================
+
+The "smalltabular" and "smalltabular*" environments are equivalent to
+the "tabular" and "tabular*" environments, except that they use the
+\small font. The "scriptsizetabular" and "scriptsizetabular*" use the
+\scriptsize font.
+
+=============================
+Installing the UCTHESIS style
+=============================
+
+To install the UCTHESIS style, you need to install four files:
+
+ ucthesis.doc
+ uct10.doc
+ uct11.doc
+ uct12.doc
+
+in your LaTeX style file repository. For LaTeX to load them properly,
+you need to create matching files with the .sty extension. There are
+two easy ways to do this:
+
+1) rename each of the files, so that ucthesis.doc becomes
+ucthesis.sty, uct10.doc becomes uct10.sty, etc.
+
+2) make soft links with the correct names that point to the .doc
+files.
+
+An alternative that we use at Berkeley is to install the full
+distribution in a ucthesis subdirectory of the style file directory
+and then make soft links that point to the .doc files in the subdirectory.
+
diff --git a/macros/latex209/contrib/unixman/unixman.pdf b/macros/latex209/contrib/unixman/unixman.pdf
new file mode 100644
index 0000000000..7403ce8a2a
--- /dev/null
+++ b/macros/latex209/contrib/unixman/unixman.pdf
Binary files differ
diff --git a/macros/latex209/contrib/unixman/unixman.sty b/macros/latex209/contrib/unixman/unixman.sty
new file mode 100644
index 0000000000..3fffb21e41
--- /dev/null
+++ b/macros/latex209/contrib/unixman/unixman.sty
@@ -0,0 +1,498 @@
+%% Unix `man' macros for LaTeX
+%% Paul Barton-Davis <pauld@cs.washington.edu> Feb 1989, June 1991
+
+%% v1.2 - removed references to new font switches, tidied up
+%% page dimensions a little.
+
+%% Thanks are due to Dave Kruger (dak@hpauto.aus.hp.com) for suggested changes
+%% to page dimensions, suggested fixes to various bugs, and other general
+%% suggestions.
+
+\def\@truedocstyle{Document Style `Unix Manual' V1.2 June 4th 1991}
+\input{article.sty}
+
+%%
+%% --------------- PAGE DIMENSIONS -------------------
+%%
+
+\newdimen\sectionindent
+\newdimen\subsectionindent
+\newdimen\subsubsectionindent
+
+\sectionindent 0.5 true in
+\subsectionindent 0.25 true in
+\subsubsectionindent 0pt
+
+\oddsidemargin \sectionindent
+\evensidemargin \sectionindent
+
+\hoffset -1.35 cm %% I really don't know why it needs this ...
+\textwidth 6 in
+\textheight 21.5cm
+\headsep 0.5 in
+\topmargin -8mm
+\topskip 0pt
+
+\footskip 0.5 in
+\parindent 0pt
+\parskip \baselineskip
+
+%%
+%% ------------------- FONTS -------------------
+%%
+
+
+%% Normal troff uses Times Roman for its output. I much prefer
+%% this, but many LaTeX users have no access to this. If you
+%% want to, you can insert a magic incantation here that will
+%% give you Times Roman (I use \input{times.sty}). Otherwise,
+%% you'll get cruddy old Computer Modern throughout.
+
+%%
+%% ---------------- SECTIONING COMMANDS --------------
+%%
+
+\def\section{\@startsection
+{section}{1}{-\sectionindent}
+{0pt plus .5ex minus -.2ex}{-1sp}{\normalsize\bf}*}
+
+\def\subsection{\@startsection
+{subsection}{2}{-\subsectionindent}
+{0pt plus .5ex minus -.2ex}{-1sp}{\normalsize\bf}*}
+
+\def\subsubsection{\@startsection
+{subsubsection}{3}{\subsubsectionindent}
+{0pt plus .5ex minus -.2ex}{-1sp}{\normalsize\it}*}
+
+%%
+%% a modified version of \@xsect
+%%
+
+%% In this case, if AFTERSKIP is negative, we simply
+%% backup by \parskip immediately after the section heading.
+%% This has the net effect of leaving no extra vertical space
+%% between the heading and any following material. We also set
+%% \@nobreaktrue to avoid extra space when putting a \list
+%% immediately after such a heading.
+
+\def\@xsect#1{\@tempskipa #1\relax
+ \ifdim \@tempskipa>\z@
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \else
+ \global\@nobreaktrue
+ \global\@noskipsectrue
+ \everypar{\if@noskipsec \global\@noskipsecfalse
+ \clubpenalty\@M \hskip -\parindent
+ \begingroup \@svsechd \endgroup \unskip
+ \vskip -\parskip
+ \else \clubpenalty \@clubpenalty
+ \everypar{}\fi}%
+ \fi
+ \ignorespaces}
+
+
+%%
+%% --------------- MISCELLANEOUS MACROS ---------------
+%%
+
+\def\command#1#2{{\it #1}\/{\rm (#2)}}%
+\def\code#1{{\bf #1}}
+\def\>{$>$\ignorespaces}%
+\def\<{$<$\ignorespaces}%
+\def\tilde{\~{}}%
+\def\HOME{\tilde}%
+\def\bs{$\backslash$}
+\def\file#1{{\bf #1\/}}
+\def\prog#1{{\sf #1}}
+\def\pipe{{\tt |}}
+\def\ltrl#1{{\bf #1}}
+\def\arg#1{{\it #1}}
+
+\def\name#1#2{%
+\section{NAME}
+#1 -- #2}
+\def\synopsis{\section{SYNOPSIS}}
+\def\description{\section{DESCRIPTION}}
+\def\usage{\section{USAGE}}
+\def\options{\section{OPTIONS}}
+\def\diagnostics{\section{DIAGNOSTICS}}
+\def\files{\section{FILES}}
+\def\see{\section{SEE ALSO}}
+
+% super speedy font switching
+
+\def\I #1 {{\it #1}\ }
+\def\R #1 {{\rm #1}\ }
+\def\B #1 {{\bf #1}\ }
+\def\T #1 {{\tt #1}\ }
+\def\S #1 {{\sf #1}\ }
+
+\def\BI #1 #2 {{\bf #1}\ {\it #2}\ }
+\def\BR #1 #2 {{\bf #1}\ {\rm #2}\ }
+\def\RB #1 #2 {{\rm #1}\ {\bf #2}\ }
+\def\RI #1 #2 {{\rm #1}\ {\it #2}\ }
+\def\IB #1 #2 {{\it #1}\ {\bf #2}\ }
+\def\IR #1 #2 {{\it #1}\ {\rm #2}\ }
+
+
+%%
+%% ---------------- HEADERS AND FOOTERS ------------------
+%%
+
+%% first we define `thing' to expand to the name of whatever this
+%% manpage is about. Then, we case on #2 and define the manual section
+%% that this fits under. It is in this section that we have some
+%% local specialities - sections numbered above 8 define local
+%% manual sections.
+
+%% Here is a map -
+
+%% 9 - Operations
+%% 10 - Communications
+%% 11 - Checklists
+%% 12 - Procedures
+%% 13 - Standards
+%% 14 - Devices
+
+%%
+%% page numbering
+%%
+%% This allows us to have selected `extra pages' in the style
+%% of some of the newer troff filters - Pages normally numbered
+%% with a pagenumber after \@xpgstart are subsequently numbered
+
+%% \@xpgstart{a,b,c ...}
+
+%% where \@xpgstart is (hopefully obviously) a number !
+
+\newcount\@xpgstart
+\newcounter{@xpg}
+\setcounter{@xpg}{1}
+\newif\ifxpg \xpgfalse
+
+\def\startpage#1{\setcounter{page}{#1}}
+\def\extrapagesfrom#1{\@xpgstart #1 \xpgtrue}
+
+%%
+%% now define the header and footer
+%%
+
+%%%%%%%%%%%%%%%%%%%%%%% threepart.sty inlined %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+% Three part head and foot macros. 1/87
+% Lance Berc
+% Olsen & Associates mcvax!unizh!olsen!lance@seismo.css.gov
+% Seefeldstrasse 233
+% CH-8008 Zurich
+
+% How users can set the head and foot text.
+\def\lhead#1{\gdef\@lhead{#1}} \def\lfoot#1{\gdef\@lfoot{#1}}
+\def\chead#1{\gdef\@chead{#1}} \def\cfoot#1{\gdef\@cfoot{#1}}
+\def\rhead#1{\gdef\@rhead{#1}} \def\rfoot#1{\gdef\@rfoot{#1}}
+
+% Initialization of the head and foot text.
+% By default the page number is at the center of the foot and everything
+% else is empty.
+\def\@lhead{} \def\@lfoot{}
+\def\@chead{} \def\@cfoot{{\rm \thepage}}
+\def\@rhead{} \def\@rfoot{}
+
+% Put together a three part header or footer given the left, center and
+% right text. The \lap commands put the text into an hbox of zero size,
+% so overlapping text is not detected (it just overlaps).
+\def\@threepart#1#2#3{\rlap{#1} \hfil {#2} \hfil \llap{#3}}
+
+% Swap the notices on odd and even pages when twosided.
+\def\ps@threepartheadings
+ {
+ \def\@oddhead{\@threepart{\@lhead}{\@chead}{\@rhead}}
+ \def\@oddfoot{\@threepart{\@lfoot}{\@cfoot}{\@rfoot}}
+
+ \if@twoside
+ \def\@evenhead{\@threepart{\@rhead}{\@chead}{\@lhead}}
+ \def\@evenfoot{\@threepart{\@rfoot}{\@cfoot}{\@lfoot}}
+ \else
+ \def\@evenhead{\@threepart{\@lhead}{\@chead}{\@rhead}}
+ \def\@evenfoot{\@threepart{\@lfoot}{\@cfoot}{\@rfoot}}
+ \fi
+ }
+
+% Default page style
+\ps@threepartheadings
+
+% Default footers
+\cfoot{\thepage}
+
+%%%%%%%%%%%%%%%%% end of threepart.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@foottxt{\hbox to 0pt{\hfill}}
+\def\@date{\hbox to 0pt{\hfill}}
+
+%%\version{VERSION-NUMBER}{DATE}
+
+\def\version#1#2{%
+ \def\@foottxt{#1}
+ \def\@date{#2}}
+
+%%\header{NAME}{SECTION}[HEADER][FOOTER]
+
+\newif\if@userhead
+
+\def\header#1#2{
+ \@userheadfalse
+ \def\@mansecnum{#2}
+ \@ifnextchar[%
+ {\@bhead{#1}{#2}}
+ {\@head{#1}{#2}}}
+
+\def\@bhead#1#2[#3]{%
+ \def\@mansect{\uppercase{#3}}%
+ \@ifnextchar[%
+ {\@chead{#1}{0}}
+ {\@head{#1}{0}}}
+
+\def\@chead#1#2[#3]{\def\@foottxt{#3}
+ \@head{#1}{#2}}
+
+
+\def\@head#1#2{%
+\def\this{{\bf #1}}
+\ifcase #2
+ \relax
+ \or
+ \def\@mansect{USER COMMANDS}
+ \or
+ \def\@mansect{SYSTEM CALLS}
+ \or
+ \def\@mansect{LIBRARY FUNCTIONS}
+ \or
+ \def\@mansect{SPECIAL FILES}
+ \or
+ \def\@mansect{FILE FORMATS}
+ \or
+ \def\@mansect{GAMES AND DEMOS}
+ \or
+ \def\@mansect{TABLES}
+ \or
+ \def\@mansect{MAINTAINANCE COMMANDS}
+ \or
+ \def\@mansect{OPERATIONS}
+ \or
+ \def\@mansect{COMMUNCIATIONS}
+ \or
+ \def\@mansect{PROCEDURES}
+ \or
+ \def\@mansect{STANDARDS}
+ \or
+ \def\@mansect{DEVICES}
+\fi
+%%
+%% head line
+%%
+\rhead{\normalsize\uppercase{#1\/(\@mansecnum)}}
+\chead{\normalsize\@mansect}
+\lhead{\normalsize\uppercase{#1(\@mansecnum)}}
+%%
+%% footline
+%%
+\rfoot{\ifxpg%
+ \ifnum \thepage < \@xpgstart%
+ \normalsize\thepage
+ \else%
+ \normalsize\the\@xpgstart\alph{@xpg}%
+ \addtocounter{@xpg}{1}
+ \fi
+ \else
+ \normalsize\thepage
+ \fi}
+\cfoot{\normalsize Last change: \@date}
+\lfoot{\normalsize Version: \@foottxt}}
+
+%% redefine outputpage so as to ensure that the headline and
+%% the footline cover the sectional headings as well.
+
+\def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \let\@themargin\oddsidemargin
+ \else
+ \let\@thehead\@evenhead \let\@thefoot\@evenfoot
+ \let\@themargin\evensidemargin
+ \fi\fi
+ \@tempdima \textwidth %% calculate total page width
+ \advance\@tempdima \sectionindent
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\hbox to\@tempdima{\strut\@thehead}
+ \vfil}%
+ \box\@tempboxa
+ \vskip \headsep
+ \hbox to\@tempdima{\hss\box\@outputbox}
+ \baselineskip\footskip
+ \hbox to\@tempdima{\@thefoot}}}%
+ \global\@colht\textheight\endgroup
+ \stepcounter{page}\let\firstmark\botmark}
+
+
+%% --------------- ENVIRONMENTS --------------------
+
+%% a kludge to get correct spacing of a list environment
+%% immediately after a section name (used within given environments)
+
+\newdimen\@ughamount
+\@ughamount -14pt %% Don't ask ...
+
+\def\@ugh{\vskip \@ughamount}
+
+\def\@item[#1]{%
+ \if@noparitem \@donoparitem
+ \else
+ \if@inlabel \indent \par \fi
+ \ifhmode \unskip\unskip \par \fi
+ \if@newlist
+ \if@nobreak
+ \@nbitem
+ \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep \addvspace{-\parskip}
+ \fi
+ \else \addpenalty\@itempenalty \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+ \fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+ \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+ \penalty\z@ \fi
+ \everypar{}}\global\@nobreakfalse
+\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+\setbox\@tempboxa\hbox{\makelabel{#1}}%
+\global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+ \hskip -\labelwidth \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else \hbox to\labelwidth {\makelabel{#1}}\fi
+ \hskip \labelsep}\ignorespaces}
+
+%% A new makelabel command that attempts to set
+%% the item label flushleft in a box of width \labelwdith.
+%% If the label is too wide, then we throw in an additional hbox
+%% the end, so that the item text is on a new line (kludge-y !)
+%% This matches the conventional method of displaying options
+%% in the Unix manuals.
+
+\def\flmakelabel#1{\setbox\@tempboxa\hbox{#1}%
+ \ifdim \wd\@tempboxa > \labelwidth%
+ \hbox to \labelwidth{%
+ \vbox{%
+ \hbox to 0pt{#1\hss}%
+ \hbox to 0pt{\hfil}}%
+ \hfil}%
+ \else%
+ #1\hfil\relax
+ \fi}
+%%
+%% Options environment
+%%
+
+%% \opt{OPTION} option text ...
+%% \optarg{OPTION}{ARGUMENT} option text ...
+
+\def\opt#1{\item[{\bf #1}]}
+\def\optarg#1#2{%
+ \def\arg{{\it #2}\ }%
+ \item[{\bf #1}\ {\it #2}]}
+
+\newdimen\optionwidth
+\optionwidth\sectionindent
+
+\def\options{%
+\list{}{%
+\leftmargin \optionwidth
+\rightmargin 0pt
+\labelwidth \optionwidth
+\topsep -\parskip
+\partopsep -\parskip
+\labelsep 0pt
+\let\@nbitem=\@ugh
+\let\makelabel=\flmakelabel}}
+
+\let\endoptions=\endlist
+
+%%
+%% file lists
+%%
+
+\newdimen\filenamewidth
+\filenamewidth 2.0in
+\let\filelistfont=\bf
+
+\def\filelist{%
+\list{}{%
+\leftmargin \filenamewidth
+\rightmargin 0pt
+\labelwidth \filenamewidth
+\topsep -\parskip
+\partopsep -\parskip
+\itemsep 0pt
+\parsep 0pt
+\labelsep 0pt
+\let\@nbitem=\@ugh
+\let\makelabel=\flmakelabel}}
+
+\let\endfilelist=\endlist
+
+%% \fileref{FILENAME} description ...
+
+\def\fileref#1{\item[{\filelistfont #1}]\relax}
+
+%% description
+
+\newdimen\descriptionwidth
+\descriptionwidth 1.5 in
+
+\def\descriptionlabel#1{\flmakelabel{\bf #1}}
+
+\def\description{\list{}{%
+\labelwidth \descriptionwidth
+\leftmargin \descriptionwidth
+\rightmargin 0pt
+\topsep 0pt plus 1pt
+\partopsep 0pt plus 1pt
+\labelsep 0pt
+\let\makelabel=\descriptionlabel}}
+
+\let\enddescription=\endlist
+
+%% a kludge for use immediately after a section heading:
+
+\def\sdescription{\list{}{%
+\labelwidth \descriptionwidth
+\leftmargin \descriptionwidth
+\rightmargin 0pt
+\topsep 0pt plus 1pt
+\partopsep 0pt plus 1pt
+\labelsep 0pt
+\let\@nbitem=@ugh
+\let\makelabel=\descriptionlabel}}
+
+\let\endsdescription=\endlist
+
+%% examples
+
+\let\examplefont=\tt
+
+\def\example{\list{}{%
+\leftmargin 1cm
+\rightmargin 1cm
+\topsep 0pt
+\partopsep 0pt
+\examplefont}
+\item[]}
+
+\let\endexample=\endlist
diff --git a/macros/latex209/contrib/unixman/unixman.tex b/macros/latex209/contrib/unixman/unixman.tex
new file mode 100644
index 0000000000..0d47b7c950
--- /dev/null
+++ b/macros/latex209/contrib/unixman/unixman.tex
@@ -0,0 +1,320 @@
+
+\documentstyle{unixman}
+
+\filenamewidth 3.5 in
+\def\met#1{{\it #1}}
+\def\meta#1{{$<${\it #1}$>$}}
+\gdef\[{\char'133}
+\gdef\]{\char'135}
+
+\begin{document}
+
+\version{1.1}{4th June 1991}
+\header{unixman}{1L}[\LaTeX\ styles]
+
+\section{NAME}
+
+unixman -- \LaTeX\ document style produce Unix-style manual pages
+
+\section{SYNOPSIS}
+
+{\tt
+\bs documentstyle[unixman]\\
+\bs begin\{document\}\\
+\bs header\{\met{name}\}\{\met{section-number}\}[\met{section-name}]\\
+\bs version\{\met{version-id}\}\{\met{date}\}
+
+\bs section\{NAME\}
+
+\hbox to 2cm{\hfil \vdots \hfil}
+
+\bs end\{document\}
+}
+
+\section{DESCRIPTION}
+
+The \this\ document style produces documents conforming to the conventions
+of the Unix manual, as embodied in the \command{troff}{1} ``man'' macros.
+It uses the standard \LaTeX\ sectioning commands, and defines several
+new commands and environments to make manual page formatting easier.
+These include facilities for printing lists of command line flags and
+doing rapid font switches, which tend to be common to reference manuals.
+
+\subsection{Commands}
+
+\begin{description}
+
+\item[\bs version\{{\it version-id}\}\{{\it date}\}]
+define the version number and date of modification of this manual entry.
+
+
+\item[\bs header\{\I name \}\{\I section-number \}\[\I section-name \]]
+define the name of the command and the section number in which it is
+to appear. \I section-name is an optional argument used to override
+the default name for \I section-number.
+
+\item[\bs startpage\{{\it page-number}\}]
+start page numbering from {\it pagenumber}.
+
+\item[\bs extrapagesfrom\{{\it page-number}\}]
+number all pages beyond {\it pagenumber} in the style {\it
+pagenumber}a, {\it pagenumber}b and so on. For use when adding extra
+pages to an existing manual. For instance, if you use
+{\tt \bs extrapagesfrom\{260\}}, then instead of 260, 261, 262 you will
+get 260, 260a, 260b and so on.
+
+\item[\bs file\{{\it file}\}]
+prints the name of a file in the default
+font for such items\\
+(e.g. {\tt \bs file\{/usr/lib\}} $\rightarrow$ \file{/usr/lib})
+
+\item[\bs prog\{{\it program}\}]
+prints a program in the default font
+for such items\\
+(e.g. {\tt \bs prog\{awk\}} $\rightarrow$ \prog{awk}).
+
+\item[\bs this]
+prints the name of this manual page, emboldened.
+
+\item[\bs R, \bs B, \bs T, \bs I, \bs S]
+print the next word in a \R roman, \B bold, \T typewriter, \I italic, and \S san-serif
+font respectively. The word must be delimited by white space.
+
+\item[\bs RB, \bs RI, \bs IB, \bs IR, \bs BI, \bs BR]
+print the next two words in alternating fonts, where the two letters
+specify the font according to the single word version described above.
+The words must be delimited by whitespace.
+
+\item[\bs tilde]
+prints a tilde (\tilde)
+
+\item[\bs pipe]
+prints a vertical bar (\pipe).
+
+\item[\bs bs]
+prints a backslash (\bs). Useful for manual pages about \LaTeX.
+
+\item[\bs\<\ \R \& \bs\>]
+print left- and right- arrow brackets (\<\ \& \>).
+These commands ignore following spaces completely.
+
+\item[\bs \[\ \R and \bs \]]
+print left and right square brackets (\[\ \& \]). Necessary in {\tt item} labels
+within a list environment.
+
+\end{description}
+
+\subsection{Environments}
+
+The \this\ style defines several new environments to make the
+formatting of manual pages easier and more consistent.
+
+\subsubsection{Options}
+
+The {\tt options} environment is intended for creating lists of
+command line flags. Within it there are two special commands, {\tt \bs
+opt} and {\tt \bs optarg}. The first is used to describe an flag that
+has no arguments; the second is used in the case where there are
+arguments. With the {\tt optarg} command, you can use the command
+{\tt \bs arg} to simply print the argument in the same style and
+without retyping it. An example -- the following \LaTeX\ specification:
+
+\begin{example}
+\begin{verbatim}
+\begin{options}
+\opt{-p} print top value on the stack
+\optarg{-s}{x} put top of stack into register named \arg
+\optarg{-I}{directory} add \arg to the list of directories searched.
+\end{options}
+\end{verbatim}
+\end{example}
+
+produces the following results
+
+\begin{example}
+\rm
+\begin{options}
+\opt{-p} print top value on the stack
+\optarg{-s}{x} put top of stack into register named \arg
+\optarg{-I}{directory} add \arg to the list of directories searched.
+\end{options}
+\end{example}
+
+Note how the description is positioned when the argument associated
+with an option flag is especially long (see PARAMETERS, below).
+
+\subsubsection{Filelist}
+
+The {\tt filelist} environment provides a simple means of formatting
+lists of files for the standard FILES section of a manual page, or
+elsewhere if desired.
+
+\begin{example}
+\bs begin\{filelist\}\\
+\bs fileref\{\I filename\} \I description \ldots\\
+\bs end\{filelist\}
+\end{example}
+
+{\tt \bs fileref} sets its argument in a default face. The description
+part is optional, and its position in the case of very long filenames
+follows the pattern for the `options' environment described above (see
+PARAMETERS, below).
+
+\subsubsection{Example}
+
+The example environment provides an indented environment with a
+typewriter font (Courier) as the default. If you wish to be able to
+use all letters and symbols easily, you should use a verbatim
+environment within an example.
+
+\subsection{Parameters}
+
+\begin{description}
+\item[\bs filenamewidth] the width of a filename in a filelist that
+when exceeded, causes the description (if present) to be wrapped to
+the next line. The default is 2.0 inches.
+
+\item[\bs optionwidth] the width of an option in an options list that
+when exceeded, causes the description (if present) to be wrapped to
+the next line. The default is 0.5 inches
+
+\item[\bs descriptionwidth] as {\tt \bs optionwidth}, but for
+description environments, which are otherwise like the normal LaTeX
+description environment. The default is 1.5 inches.
+
+\item[\bs examplefont] the font to use in the
+{\tt example} environment. The defaut is typewriter (Courier).
+
+\end{description}
+
+\subsection{Conventions}
+
+A typical manual page for a command or function is
+laid out as follows:
+
+{\tt \bs header}\{TITLE\}\{1-8\}
+
+The name of the command or function in upper-case,
+which serves as the title of the manual page. This is
+followed by the number of the section in which it
+appears.
+
+{\tt \bs version}\{VERSION\}\{DATE\}
+
+The version number and last modification of this manual page.
+
+{\tt \bs section}\{NAME\}
+
+{\tt name} (or comma-separated list of names) -- one-line summary
+
+The name, or list of names, by which the command is
+called, followed by a dash and then a one-line summary
+of the action performed. The summary should contain no
+\LaTeX\ macros since it is used to contribute to the
+`whatis' database.
+
+{\tt \bs section}\{SYNOPSIS\}
+
+{\bf Commands:}
+
+The syntax of the command and its arguments, as
+typed on the command line. When in boldface, a
+word must be typed exactly as printed. When in
+italics, a word can be replaced with an argument
+that you supply. References to bold or italicized
+items are not capitalized in other sections, even
+when they begin a sentence.
+
+Syntactic symbols appear in roman face:
+
+\begin{description}
+\item[\[\ \]] An argument, when surrounded by brackets is
+ optional.
+\item[\pipe] Arguments separated by a vertical bar are
+ exclusive. You can supply only item from
+ such a list.
+\item[\ldots] Arguments followed by an elipsis can be
+ repeated. When an elipsis follows a bracketed
+ set, the expression within the brackets
+ can be repeated.
+\end{description}
+
+{\bf Functions:}
+
+If required, the data declaration, or \#include directive, is shown
+first, followed by the function declaration. Otherwise, the function
+declaration is shown.
+
+{\tt \bs section}\{DESCRIPTION\}
+
+A narrative overview of the command or function's external behavior.
+This includes how it interacts with files or data, and how it handles
+the standard input, standard output and standard error. Internals and
+implementation details are normally omitted. This section attempts to
+provide a succinct overview in answer to the question, ``what does it
+do?''
+
+Literal text from the synopsis appears in boldface, as do literal
+filenames and references to items that appear elsewhere in a reference
+manual. Arguments are italicized.
+
+If a command interprets either subcommands or an input grammar, its
+command interface or input grammar is normally described in a USAGE
+section, which follows the OPTIONS section. (The DESCRIPTION section
+only describes the behavior of the command itself, not that of
+subcommands.)
+
+{\tt \bs section}\{OPTIONS\}
+
+The list of options along with a description of how
+each affects the command's operation. These should be
+formatted within an {\tt options} environment.
+
+{\tt \bs section}\{FILES\}
+
+A list of files associated with the command or function.
+These should be formatted within a {\tt filelist}
+environment.
+
+{\tt \bs section}\{SEE ALSO\}
+
+A comma-separated list of related manual pages, followed
+by references to other published materials.
+
+{\tt \bs section}\{DIAGNOSTICS\}
+
+A list of diagnostic messages and an explanation of
+each.
+
+{\tt \bs section}\{BUGS\}
+
+A description of limitations, known defects, and possible
+problems associated with the command or function.
+
+\section{FILES}
+
+\begin{filelist}
+\fileref{/usr/local/lib/tex/macros/unixman.sty} The base style file
+\fileref{/usr/local/lib/tex/macros/*.sty} other style options
+\end{filelist}
+
+\section{SEE ALSO}
+
+\command{man}{7}, \command{troff}{1}
+
+{\it Formatting Documents, Chapter 3: the \T -man macro package}
+
+\section{BUGS}
+
+There is an \bs hoffset in the page dimensions whose function is not
+clear.
+
+There is a grotesque kludge used to get lists after section headings
+spaced from the latter as if they were pure text, consisting of
+{\tt\bs vskip}'ing 14pt's back up the page. This is highly non-portable and
+very bad style. Any better ideas~?
+
+An \T verbatim environment immediately within another environment
+other than \T example will not leave the normal amount of vertical space
+before it. In fact, it leaves less than none at all.
+\end{document}
diff --git a/macros/latex209/contrib/uw-thesis/uw-thesis.bib b/macros/latex209/contrib/uw-thesis/uw-thesis.bib
new file mode 100644
index 0000000000..f5906eabd2
--- /dev/null
+++ b/macros/latex209/contrib/uw-thesis/uw-thesis.bib
@@ -0,0 +1,95 @@
+
+Bibtex (bib) file for the thesis style document.
+
+@string{Knuth="Donald E. Knuth"}
+
+@book{book,
+ author = knuth,
+ title = "{\TeX} book",
+ publisher = "Addison-Wesley",
+ year = 1984}
+
+@book{Tbook,
+ author = knuth,
+ title = "{\TeX}: The Program",
+ publisher = "Addison-Wesley",
+ year = 1986}
+
+@book{Metafont,
+ author = knuth,
+ title = "The Metafont book",
+ publisher = "Addison-Wesley",
+ year = 1986}
+
+@book{CMT,
+ author = knuth,
+ title = "Computer Modern Typefaces",
+ publisher = "Addison-Wesley",
+ year = 1986}
+
+@book{Lbook,
+ author = "Leslie Lamport",
+ title = "{\LaTeX}: A Document Preparation System",
+ publisher = "Addison-Wesley",
+ year = 1986}
+
+
+
+@article{TUG:h-p,
+ author = "Alan Hoenig and Mitch Pfeffer",
+ title = "Real Typesetting from Your Personal Computers",
+ journal = "TUGboat",
+ volume = 7,
+ number = 3,
+ year = 1986,
+ pages = "167--168"}
+
+
+@article{TUG:h-l,
+ author = "Editor",
+ title = "Hyphenation Exception Log",
+ journal = "TUGboat",
+ volume = 7,
+ number = 3,
+ year = 1986,
+ pages = "145"}
+
+
+@book{Hamlet,
+ author = "William Shakespeare",
+ title = "Hamlet",
+ publisher = "F.S.~Crofts~\&~Co., Inc.",
+ address = "NY",
+ year = 1946,
+ note = "Act~I, Scene~3, Lines~70-72, are apropos."}
+
+@book{JTeX,
+ author = "Spivak, M.D., Ph.D.",
+ title = "The Joy of {\TeX}",
+ publisher = "American Mathematical Society",
+ address = "RI",
+ year = 1986}
+
+@book{PCTeX,
+ author = "Spivak, M.D., Ph.D.",
+ title = "PC{\TeX}\ Manual",
+ publisher = "Personal {\TeX}, Inc.",
+ address = "CA",
+ year = 1985}
+
+@booklet{SP,
+ title = "Style and Policy Manual for Theses and Dissertations",
+ author = "University of Washington, Graduate School",
+ year = 1988}
+
+
+@techreport{UCS-TeX,
+ author = "Rick Ells",
+ title = "{\LaTeX}\ Introduction",
+ institution = "University of Washington, University Computing Services",
+ year = 1989}
+
+
+
+
+
diff --git a/macros/latex209/contrib/uw-thesis/uw-thesis.sty b/macros/latex209/contrib/uw-thesis/uw-thesis.sty
new file mode 100644
index 0000000000..7ab989e5bb
--- /dev/null
+++ b/macros/latex209/contrib/uw-thesis/uw-thesis.sty
@@ -0,0 +1,542 @@
+% ACS Thesis style
+% by Jim Fox, May 30, 1990
+
+\typeout{[UW Thesis style. Version 1.5]}
+%
+% version 1.5: - negative page numbering for prelim section
+% to help dvi->printer programs order the output pages.
+% - default year
+%
+% version 1.4: - (re)fixes that persistent bug in the facing-page captions.
+%
+% version 1.3: - fixes a bug in the facing-page captions.
+% - allows footnotes style to be default
+% - cleans up 12pt default
+% - cleans up page bottom margins
+% - adds title page options
+%
+
+% This thesis style is essentually a 12-point book style with
+% four modifications and the addition of preliminary page macros.
+%
+% 1) Parameter settings: Page size, position, and numbering.
+%
+% 2) Chapter and sections: Alteration of type size and positioning
+% of titles; allowance for very long text; allowance for
+% user specified line breaks in chapter titles.
+%
+% 3) Footnotes: Provision for bottom-of-page notes (LaTeX default),
+% end-of-chapter notes, or end-of-thesis notes; alteration
+% of bottom-of-page footnote style.
+%
+% 4) Facing caption pages: Captions for full page figures or tables,
+% where the page margins and numbering are reversed.
+
+
+%
+% ---- Footnotes --------------------------------------------
+%
+% Footnote placement option
+% (this must come before option processing (i.e. book))
+%
+% [endnotes] put the references at the thesis end
+% [chapternotes] put the references at the chapter end
+% [footnotes] put the references at the page bottom
+%
+\let\n@teitem\relax
+\def\@chapternotetext{\bgroup
+ \let\input\relax \catcode`\^^M=12\newlinechar=`\^^M\d@chapternote}
+\long\def\d@chapternote#1{%
+ \immediate \write\tf@not{\n@teitem#1\relax}%
+ \egroup}
+\newif\ifendnotes % true if doing endnotes
+ \endnotesfalse
+\newif\ifchapternotes % true if doing chapternotes
+ \chapternotesfalse
+\newwrite\tf@not % file for chapter or thesis notes
+\def\ds@footnotes{ % selects bottom-of-page notes (default)
+ \endnotesfalse \chapternotesfalse
+ \let\chapternotes\relax \let\endnotes\relax}
+\def\ds@chapternotes{ % selects end-of-chapter notes
+ \let\@footnotetext\@chapternotetext
+ \endnotesfalse \chapternotestrue
+ \let\endnotes\relax}
+\def\ds@endnotes{ % selects end-of-thesis notes
+ \let\@footnotetext\@chapternotetext
+ \endnotestrue \chapternotesfalse
+ \let\chapternotes\relax
+ \@startnotes}
+
+
+% Chapter and End notes
+%
+\def\@startnotes{% opens the .not file
+ \immediate \openout\tf@not\jobname.not\relax
+ \immediate \write\tf@not{\relax}
+ \setcounter{footnote}{0}}
+%
+% When text is written to file (.not) the source linebreaks
+% are maintained. This keeps the individual lines in the file short.
+%
+\def\chapternotes{\clearpage % prints chapter notes (a section)
+ \ifchapternotes\ifnum\c@footnote>1
+ \begin{center} Notes to Chapter \Roman{chapter} \end{center}\par
+ \addcontentsline{toc}{section}{\protect
+ \numberline{}{Notes to Chapter \Roman{chapter}}}
+ \begin{enumerate}
+ \immediate\closeout\tf@not
+ \catcode`@=11
+ \let\n@teitem\item
+ \@input{\jobname.not}
+ \end{enumerate}
+ \clearpage\fi\fi}
+
+\def\endnotes{ % prints end notes (a chapter)
+ \ifendnotes\ifnum\c@footnote>1
+ \chapter{Notes}
+ \begin{enumerate}
+ \immediate\closeout\tf@not
+ \catcode`@=11
+ \let\n@teitem\item
+ \@input{\jobname.not}
+ \end{enumerate}
+ \clearpage\fi\fi}
+
+% ---- [architect] style -----------------
+% This is really untested and incomplete...
+%
+% sets landscape page sizing. Two-column mode must be manually
+% entered/exited via \twocolumn and \onecolumn
+%
+\newif\ifarchitect \architectfalse
+\def\ds@architect{\architecttrue}
+%
+
+% ---- Thesis is a modified 12-pt book style ----------------------------
+%
+\let\@ld@options\@options
+\def\@options{\def\@ptsize{2}\@ld@options} % default is 12 point (vers 1.3)
+\input book.sty
+\@twosidefalse % no two-side for thesis (but see mods for facing captions)
+
+% increase baselines for normal and footnote sizes
+\def\@normalsize{\@setsize\normalsize{18pt}\xiipt\@xiipt
+ \abovedisplayskip 15pt plus3pt minus7pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 8pt plus4pt
+ minus3pt\let\@listi\@listI}
+%
+\def\footnotesize{\@setsize\footnotesize{14pt}\xpt\@xpt
+ \abovedisplayskip 12pt plus2pt minus5pt\belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3pt\belowdisplayshortskip 7pt plus3pt minus3pt
+ \def\@listi{\leftmargin\leftmargini \topsep 8pt plus 2pt minus 2pt\parsep 4pt
+ plus 2pt minus 1pt
+ \itemsep \parsep}}
+%
+\def\@listI{\leftmargin\leftmargini \parsep 7pt plus 3pt minus 1pt\topsep
+ 12pt plus 5pt minus 6pt\itemsep 7pt plus 3pt minus 1pt}
+
+
+% margins are approximately 1 inch, except 1.5 inch at the binding
+%
+\textheight 590pt \textwidth 433pt
+\oddsidemargin 36pt \evensidemargin 0pt
+\marginparwidth 72pt \marginparsep 7pt
+ \topmargin 0pt \headheight 12pt \headsep 36pt
+\footheight 12pt \footskip 12pt
+\footnotesep=14pt
+
+% architect margins are 1.5 at top and left and 1 at right and bottom
+\ifarchitect
+ \textheight 373pt \textwidth 614pt
+ \oddsidemargin 36pt \evensidemargin 0pt
+ \topmargin 36pt \headheight 12pt \headsep 36pt
+ \typeout{[architect style]}
+ \fi
+
+% footnotes if no option specified
+%
+\ifchapternotes\else\ifendnotes\else\ds@footnotes\fi\fi
+
+
+% bottom-of-page footnotes format
+% full width line and hanging indent
+%
+\def\footnoterule{\kern-3\p@
+ \hrule width \columnwidth \kern 2.6\p@}
+\long\def\@makefntext#1{\parindent 1em\noindent \hang
+ \hbox to1em{\hss$^{\@thefnmark}\,$}#1}
+
+
+
+%
+% ---- Text pages ----------------------------------
+%
+\def\textpages{ % sets page numbering for text
+ \clearpage\pagestyle{myheadings}\markboth{}{}
+ \def\Thechapter{\arabic{chapter}}
+ \pagenumbering{arabic}
+ \textheight 602pt % allow for no footers (vers 1.3)
+ \footheight 0pt \footskip 0pt
+ \ifarchitect \textwidth 614pt \oddsidemargin 36pt \twocolumn\fi}
+
+
+\def\appendix{\par
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+ \def\@chapapp{Appendix}
+ \def\Thechapter{\Alph{chapter}}
+ \def\thechapter{\Alph{chapter}}}
+
+
+% Chapters
+%
+\def\@makechapterhead#1{ \vspace*{2pc} {\centering
+ \ifnum \c@secnumdepth >\m@ne \large \@chapapp{} \Thechapter \par
+ \vspace{10pt} \fi \large\bf \uppercase{#1}\par
+ \nobreak \vspace{20pt}} }
+%
+\def\@makeschapterhead#1{ \vspace*{2pc} {\centering
+ \large\bf \uppercase{#1}\par
+ \nobreak \vspace{20pt}} }
+%
+\def\chapter{\cleardoublepage % Starts new right-hand page.
+ \thispagestyle{empty} % Page style of chapter page is 'empty'
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@afterindenttrue % Allows indent in first paragraph. Change
+ \ifchapternotes\@startnotes\fi % if chapter notes
+ \let\\\relax % vers 1.3
+ \secdef\@chapter\@schapter} % to \@afterindentflase to omit indent.
+%
+% Complication is added here to allow line breaks
+% in the chapter titles (via \\).
+%
+\def\@chapter[#1]#2{
+ \ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}
+ \typeout{\@chapapp\space\thechapter.}
+ {\def\\{ } % allow \\ in title
+ \addcontentsline{toc}{chapter}{\protect
+ \numberline{\@chapapp\ \thechapter}#1}}\else
+ {\def\\{ } % allow \\ in title
+ \addcontentsline{toc}{chapter}{#1}}\fi
+ \addtocontents{lof}{\protect\addvspace{10pt}}
+ \addtocontents{lot}{\protect\addvspace{10pt}}
+ \if@twocolumn
+ \@topnewpage[\@makechapterhead{#2}]
+ \else \@makechapterhead{#2}
+ \@afterheading \fi}
+\def\@schapter#1{\if@twocolumn \@topnewpage[\@makeschapterhead{#1}]
+ \else \@makeschapterhead{#1}
+ \@afterheading\fi}
+%
+% Sections
+%
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus
+ -.2ex}{2.3ex plus .2ex}{\normalsize \sl}}
+ \def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus
+ -.2ex}{1.5ex plus .2ex}{\normalsize \it}}
+ \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize \it}}
+%
+% Provide for `Chapter ' in the toc
+%
+\def\l@chapter#1#2{\pagebreak[3]
+ \vskip 1.0em plus 1pt \@tempdima 78pt \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+%
+%
+% specification of \newfileline will cause a line break in any
+% table of contents file. This allows long or complicated titles.
+%
+\let\newfileline\relax % will give linebreaks in .aux
+\let\n@wfileline\relax % will give linebreaks in .toc
+%
+\def\addcontentsline#1#2#3{\if@filesw \begingroup
+ \let\label\@gobble \let\index\@gobble
+ \def\newfileline{\n@wfileline^^J}% % gives linebreaks in .aux
+ \def\protect##1{\string\string\string##1\string\space
+ \space}\@temptokena{\thepage}%
+ \edef\@tempa{\write \@auxout{\string\@writefile{#1}{\protect
+ \contentsline{#2}{#3}{\the\@temptokena}}}}\@tempa
+ \if@nobreak \ifvmode\nobreak\fi\fi\endgroup\fi}
+
+\def\enddocument{\@checkend{document}\clearpage\begingroup
+ \if@filesw \immediate\closeout\@mainaux
+ \def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+ \def\bibcite{\@testdef b}\@tempswafalse \makeatletter
+ \def\n@wfileline{^^J}\input \jobname.aux
+ \if@tempswa \@warning{Label(s) may have changed. Rerun to get
+ cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+
+
+% ---- Facing caption pages -----------------
+%
+% Facing caption pages (Style manual, p 15) must be formatted
+% much like the even numbered pages of a `two-sided' book.
+% i.e., the binding is on the right and the page number is
+% on the left.
+%
+% A facing page float is indicated by the positioning character [f],
+% i.e., \begin{figure}[pf] ... \end{figure}
+%
+% to mark facing page floats a control sequence whose name contains
+% the float box name is def'd to F for facing stuff and P otherwise
+% (a possible cs name is, for example, '\facing:\bx@A')
+%
+% these macros originally from latex.tex
+\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
+ \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
+ \global\@namedef{facing:\expandafter\string\@currbox}{P}
+ \@tfor \@tempa :=#2\do
+ {\if\@tempa h\advance\@tempcnta \@ne\fi
+ \if\@tempa t\advance\@tempcnta \tw@\fi
+ \if\@tempa b\advance\@tempcnta 4\relax\fi
+ \if\@tempa p\advance\@tempcnta 8\relax\fi
+ \if\@tempa f\global\@namedef{facing:\expandafter\string\@currbox}{F}\fi
+ }\global\count\@currbox\@tempcnta}\@fltovf\fi
+ \global\setbox\@currbox\vbox\bgroup
+% \boxmaxdepth\z@ % commented out 15 Dec 87
+ \hsize\columnwidth \@parboxrestore}
+
+% when a facing page caption is boxed for output,
+% the control sequence \facingp@ge is defined, else it is not.
+%
+\def\@outputpage{\begingroup\catcode`\ =10 \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}\fi
+ \@ifundefined{facingp@ge}%
+ {\let\@thehead\@oddhead % case for normal pages
+ \let\@thefoot\@oddfoot \let\@themargin\oddsidemargin}%
+ {\let\@thehead\@evenhead % case for facing pages
+ \let\@thefoot\@evenfoot \let\@themargin\evensidemargin}
+ \global\let\facingp@ge\relax % same as undefined (vers 1.3)
+ \shipout
+ \vbox{\normalsize \baselineskip\z@ \lineskip\z@
+ \let\par\@@par %% 15 Sep 87
+ \vskip \topmargin \moveright\@themargin
+ \vbox{\setbox\@tempboxa
+ \vbox to\headheight{\vfil \hbox to\textwidth
+ {\let\label\@gobble \let\index\@gobble
+ \@thehead}} %% 22 Feb 87
+ \dp\@tempboxa\z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip\footskip
+ \hbox to\textwidth{\let\label\@gobble
+ \let\index\@gobble %% 22 Feb 87
+ \@thefoot}}}\global\@colht\textheight
+ \endgroup\stepcounter{page}\let\firstmark\botmark}
+
+\def\@wtryfc #1{\global\setbox\@outputbox\vbox{\unvbox\@outputbox
+ \vskip\@fpsep\box #1}
+ \expandafter\if\csname facing:\string#1\endcsname F\gdef\facingp@ge{}\fi}
+
+
+%
+% ------------ Page numbering --------------
+%
+% modify stepcounter to decrement if the argument is negative.
+% Negative pages are needed this because Texrox uses the page number
+% to order pages.
+%
+\def\stepcounter#1{%
+ \expandafter\ifnum\csname c@#1\endcsname<0
+ \global\expandafter\advance\csname c@#1\endcsname\m@ne
+ \else \global\expandafter\advance\csname c@#1\endcsname\@ne\fi
+ {\let\@elt\@stpelt \csname cl@#1\endcsname}}
+%
+\def\@roman#1{\ifnum#1<0\romannumeral -#1\else\romannumeral #1\fi}
+%
+%
+
+% ---- Preliminary pages ---------------------------
+%
+\def\prelimpages{ % sets page numbering for the preliminary pages
+ \pagestyle{empty} % will be {plain} at start of toc
+ \pagenumbering{roman}
+ \setcounter{page}{-1}
+ \textheight 572pt % add separation for page numbers (vers 1.3)
+ \footheight 12pt \footskip 30pt
+ \ifarchitect \textwidth 450pt \oddsidemargin 118pt\fi}
+%
+% (these macros are used once and discarded)
+%
+% Title page
+%
+% options and defaults
+%
+\def\Title#1{\gdef\@Title{#1}}
+\def\Author#1{\gdef\@Author{#1}}
+\def\Year#1{\gdef\@Year{#1}} \Year{\year}
+\def\Degree#1{\gdef\@Degree{#1}} \Degree{Doctor of Philosophy}
+%
+\def\School#1{\gdef\@School{#1}} \School{University of Washington}
+\def\Degreetext#1{\gdef\@Degreetext{#1}}
+ \Degreetext{A dissertation submitted in partial fulfillment\\
+ of the requirements for the degree of}
+\newcount\@Signatures
+\def\Signatures#1{\global\@Signatures=#1\relax}
+ \Signatures{3} % number of signature lines
+
+\def\titlepage{ % Prints the title page
+ \vspace{7pc}
+ \begin{center}
+ {\Large
+ \lineskip 3ex
+ \@Title\par}
+ \vskip0pt plus1fill
+ by
+ \par\vskip0pt plus1fill
+ \@Author
+ \par\vskip0pt plus2fill
+ \@Degreetext
+ \par\vskip0pt plus2fill
+ \@Degree
+ \par\vskip0pt plus2fill
+ \@School
+ \par\vskip0pt plus1fill
+ \@Year
+ \par\vskip0pt plus2fill
+ \makebox[\textwidth]{Approved by\hrulefill}
+ \par
+ {(Chairperson of Supervisory Committee)}
+ \par
+ \@whilenum \@Signatures>1 \do
+ {\vskip18pt
+ \makebox[\textwidth]{\phantom{Approved by}\hrulefill}
+ \advance\@Signatures by\m@ne}
+ \par\vskip2pc
+ \makebox[\textwidth]{Program Authorized\hfill}
+ \makebox[\textwidth]{to Offer Degree\hrulefill}
+ \par\vskip2pc
+ \makebox[\textwidth]{Date\hrulefill}
+ \par
+ \end{center}
+ \vskip0pt plus2fill
+ \newpage
+ \let\titlepage\relax}
+
+% Quote slip
+%
+\long\def\quoteslip#1{
+ \null
+ \vskip0pt plus1fill
+ \noindent #1\par
+ \vskip3pc
+ \begin{flushright}
+ \makebox[3in]{Signature\hrulefill}
+ \par\vskip2pc
+ \makebox[3in]{Date\hrulefill}
+ \end{flushright}
+ \vskip0pt plus2fill
+ \newpage
+ \let\quoteslip\relax}
+%
+% Abstract
+%
+% normal parameters
+\def\Professor#1{\gdef\@Professor{#1}}
+\def\Department#1{\gdef\@Department{#1}}
+\long\def\abstract#1{
+ \begin{center}
+ \@School
+ \par\vskip1pc
+ Abstract
+ \par\vskip1pc
+ {\large \@Title \par}
+ \par\vskip1pc
+ by \@Author
+ \par\vskip1pc
+ Chairperson of Supervisory Committee:
+ \begin{tabular}[t]{cc}\@Professor\\\@Department\end{tabular}
+ \par\vskip1pc
+ \end{center}
+ #1
+ \vfill
+ \newpage
+ \let\abstract\relax}
+%
+%
+% Table of contents
+%
+%
+\def\tableofcontents{\chapter*{Table of Contents\@mkboth{}{}}
+ \pagestyle{plain}
+ \thispagestyle{empty}
+ \setcounter{page}{-2}
+ {\let\footnotemark\relax % in case one is in the title
+ \@starttoc{toc}
+ }
+ \newpage}
+%
+% List of figures
+%
+\def\listoffigures{\chapter*{List of Figures\@mkboth{}{}}
+ \thispagestyle{plain}
+ \addcontentsline{toc}{chapter}{List of Figures}
+ {\let\footnotemark\relax % in case one is in the title
+ \@starttoc{lof}
+ }
+ \newpage}
+%
+% List of tables
+%
+\def\listoftables{\chapter*{List of Tables\@mkboth{}{}}
+ \thispagestyle{plain}
+ \addcontentsline{toc}{chapter}{List of Tables}
+ {\let\footnotemark\relax % in case one is in the title
+ \@starttoc{lot}
+ }
+ \newpage}
+%
+% Bibliography
+%
+\def\thebibliography#1{\chapter*{Bibliography\@mkboth
+ {BIBLIOGRAPHY}{BIBLIOGRAPHY}}
+ \addcontentsline{toc}{chapter}{Bibliography}
+ \list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+%
+% Acknowledgments
+%
+\long\def\acknowledgments#1{\chapter*{Acknowledgments\@mkboth{}{}}
+ \thispagestyle{plain}
+ #1\par
+ \vfill
+ \newpage
+ \let\acknowledgments\relax}
+
+%
+% Dedication
+%
+\long\def\dedication#1{\chapter*{Dedication\@mkboth{}{}}
+ \thispagestyle{plain}
+ #1\par
+ \vfill
+ \newpage
+ \let\dedication\relax}
+
+%
+% Vita
+%
+\long\def\vita#1{\chapter*{Vita\@mkboth{}{}}
+ #1\par
+ \vfill
+ \newpage
+ \let\vita\relax}
+
+% End of the thesis style
diff --git a/macros/latex209/contrib/uw-thesis/uw-thesis.tex b/macros/latex209/contrib/uw-thesis/uw-thesis.tex
new file mode 100644
index 0000000000..2747dac4c6
--- /dev/null
+++ b/macros/latex209/contrib/uw-thesis/uw-thesis.tex
@@ -0,0 +1,933 @@
+% Documentation for UW thesis document style for LaTeX
+%
+% for macro version 1.5, July, 1990
+%
+% This document is (nearly) contained in a single file ONLY because
+% I wanted to be able to distribute it easily. A real thesis ought
+% to be contained on many files (e.g., one for each chapter, at least).
+%
+% To help you identify the files and sections in this large file
+% I use the string '==========' to identify new files.
+%
+% Pages are produced in the order they should appear. They should
+% not be reordered by the dvi printer.
+% Because I want this to print double sided---to save paper---and
+% yet continue with the GS's silly page numbering scheme, I fiddle
+% with the page numbering to get TeXrox (a xerox 4050 driver) to
+% sort the pages correctly.
+
+
+\documentstyle{uw-thesis}
+
+
+% ========== Local defs and mods
+%
+\setcounter{tocdepth}{2} % chapter, sections, and subsections to toc
+
+\def\book{{\it\TeX book}}
+
+% math accent used in greek demo in chapter 2
+%
+\def\apos{\mathaccent"7027 }
+
+% metafont font---unfortunately, logosl10 is not everywhere
+%
+% \font\mffont=logosl10 scaled\magstep1
+\let\mffont=\sf % use the cheap substitute
+
+% Easy verbatim in text: "verbatim"
+%
+\catcode`\"=\active
+\def"{\verb"}
+
+% A file listing macro for the appendices
+% (use is: \verbatimfile{filename} \end{verbatim}
+%
+\def\verbatimfile#1{\begin{verbatim}\footnotesize\catcode`\"=12\tt\input#1}
+
+
+\begin{document}
+
+% ========== Preliminary pages
+%
+\prelimpages
+
+% ----- title page
+%
+\Title{The Suitability of the \LaTeX\ Text Formatter\\
+ for Thesis Preparation by Technical and\\
+ Non-technical Degree Candidates}
+\Author{Jim Fox}
+\Year{1990}
+% difficult footnote in the text
+{\Degreetext{A dissertation%
+ \footnote[2]{an egocentric imitation, actually}
+ submitted in partial fulfillment of\\
+ the requirements for the degree of}
+ \def\thefootnote{\fnsymbol{footnote}}
+ \let\footnoterule\relax
+ \titlepage
+ }
+\setcounter{footnote}{0}
+
+% ----- quoteslip
+%
+\setcounter{page}{-1}
+\quoteslip{%
+Extensive copying of this demonstration thesis,
+including its input files and macro package,
+is allowable for scholarly purposes, consistent with ``fair use'' as
+prescribed in the U.S. Copyright Law.
+Requests for copying or reproduction of this thesis
+may be referred to University Computing Services, 3737 Brooklyn Ave NE,
+Seattle, Washington 98105.
+}
+
+% ----- abstract
+%
+\Professor{{\em Professor}}
+\Department{{\em Department}}
+\setcounter{page}{-1}
+\abstract{%
+This sample dissertation is an aid to students who are attempting
+to format their theses with \LaTeX, a very sophisticated
+text formatter widely available at the University of Washington.
+
+\begin{itemize}
+\item It describes the use of a specialized
+macro package developed specifically for thesis production
+at the University.
+The macros customize \LaTeX\ for the correct thesis style,
+allowing the student to concentrate on the substance of
+his or her text.
+\item It demonstrates the solutions to a variety of
+formatting challenges found in thesis production.%
+\footnote{See Appendix A to obtain the source to this
+ thesis and the style file.}
+\item It serves as a template for a real dissertation.
+\end{itemize}
+}
+
+% ----- contents & etc.
+%
+\tableofcontents
+\listoffigures
+%\listoftables % have no tables
+
+% ========== glossary (I usually put this on a seperate file)
+%
+\chapter*{Glossary} % starred form omits the `chapter x'
+\addcontentsline{toc}{chapter}{Glossary}
+\thispagestyle{plain}
+%
+% This is not a LaTeX glossary and the code is completely
+% plain.tex, but it seems to do the job. In particular, the
+% \filbreak's prevent my short glossary entries from being split
+% at page boundaries.
+%
+\begingroup % keep definitions local
+\def\G#1:{\filbreak\medskip\noindent\hang
+ {\footnotesize \uppercase{#1}}:\ \ignorespaces}
+%
+% glossary text items
+%
+\G argument: replacement text which customizes a \TeX\ macro for
+each particular usage.
+\G back-up: a copy of a file to be used when catastrophe strikes
+the original. People who make no back-ups deserve
+no sympathy.
+\G buffer: an element of a program's memory.
+A buffer's inherent finitude limits the
+capacity of computer programs.
+\G control sequence: the normal form of a command to \TeX.
+\G delimiter: something, often a character, that indicates
+the beginning and ending of an argument.
+More generally, a delimiter is a field separator.
+\G document style: a file of macros that tailors \LaTeX\ for
+a particular document. The macros described by this thesis
+constitute a document style.
+\G document style option: a macro or file of macros
+that further modifies \LaTeX\ for
+a particular document. The option "[chapternotes]"
+constitutes a document style option.
+\G figure: illustrated material, including graphs,
+diagrams, drawings and photographs.
+\G font: a character set (the alphabet plus digits
+and special symbols) of a particular size and style. Some fonts
+used in this thesis are: twelve point roman, {\sl twelve point roman
+slanted}, and {\tentt ten point typewriter}.
+\G footnote: a note placed at the bottom of a page, end of a chapter,
+or end of a thesis that comments on or cites a reference
+for a designated part of the text.
+\G formatter: (as opposed to a word-processor) arranges printed
+material according to instructions imbedded in the text.
+A word-processor, on the other hand, is normally controlled
+by keyboard strokes that move text about on a display.
+\G \LaTeX: A version of \TeX\ that has been pre-loaded
+with a very sophisticated set of macros.
+\G macro: a user-defined control sequence.
+\G macro package: a set of macros that combine for a single
+purpose. The macros of \LaTeX\
+constitute a macro package.
+\G parameter: an arbitrary constant.
+\G pica: a unit of length. One pica is twelve points and
+six picas is about an inch.
+\G point: a unit of length. 72.27 points equals one inch.
+\G printer: a machine that produces a printed page---also
+referred to as an output device.
+Printers for \TeX\ are almost always either laser printers or
+typesetters.
+\G roman: a conventional printing typestyle. This thesis
+is set in roman type.
+\G rule: a straight printed line; e.g., \hrulefill.
+\G table: information placed in a columnar arrangement.
+\G \TeX: simply the ultimate in computerized typesetting.
+\G thesis: either a master's thesis or a doctoral dissertation.
+This document also refers to itself as a thesis, although it
+really is not one.
+
+\endgroup
+\newpage
+
+% ----- acknowledgments
+%
+\acknowledgments{\vskip2pc
+ {\narrower\noindent
+ The author wishes to express sincere appreciation to
+ University Computing Services, where he has had the opportunity
+ to work with the \TeX\ formatting system;
+ to Leslie Lamport, author of the \LaTeX\ macro package;
+ and to Donald Knuth, {\it il miglior fabbro}.
+ \par}
+}
+%
+% end of the preliminary pages
+
+
+
+% ========== Text pages
+%
+\textpages
+
+% ========== Chapter 1
+
+\chapter{Introduction}
+
+The utility of a clean, professionally prepared thesis is well
+documented\footnote{See, for example, W. Shakespeare\cite{Hamlet}
+for an early treatment.}
+and, until recently, a degree candidate had no recourse but
+to submit his or her thesis to a typist for completion.
+Revisions were difficult and time consuming, and even at its best the
+resultant thesis still looked typed.
+The advent of computerized typesetting has revolutionized
+thesis preparation, and \TeX\ in particular brings to the
+university student the power and flexibility of a
+professional, `industrial-strength' typesetter.
+
+
+\TeX\ is a complete and professional typesetting system.
+It has been programmed to produce
+the same document on all machines, so
+a suitable printer can always be found for the final copy
+while drafts are made on more conventional and inexpensive printers.
+The `suitable' standard is a 300 dot-per-inch laser printer,
+which is excellent for thesis production.
+True camera-ready publication quality typesetting
+is available for those who can afford such luxury.
+Sources for this typesetting capability may be found in
+the {\em TUGboat}\cite{TUG:h-p}.
+
+\section{The Purpose of This Sample Thesis}
+
+This sample is a demonstration of the quality and
+propriety of a \LaTeX\ formatted thesis, and is
+documentation for the preparation of a thesis.
+It has made extensive use of a specialized style file
+developed specifically for the preparation
+of theses at the University of Washington. Chapter~II discusses
+\LaTeX\ as described by Lamport\cite{Lbook}.
+Chapter III describes the additional macros and functions
+provided by the thesis document style. Finally, Chapter IV discusses
+some special problems due to the inherent differences among the various
+computers and printers that support \LaTeX.
+
+It must be emphasized that, although it is feasible,
+and even appropriate, for a computer science graduate to format
+his or her own thesis without help, non-specialists should not expect to
+be able to do so.
+The \TeX\ format specification
+of a thesis, indeed of any `real' document, is long and complex.
+Fortunately, \TeX\ provides a means to predefine new commands
+and spare the typist most of the sometimes esoteric details
+of the formatting language.
+\LaTeX\ is an example of such a predefinition.
+\LaTeX, in turn, allows the further customization by style files.
+The thesis macros described herein constitute a style file.
+Included in this style
+are most of the structures commonly found in theses.
+A student, armed with only a reading of the \LaTeX\ manual\cite{Lbook}
+can follow this example and produce most of a thesis. It is of course
+impossible to predict all the formatting problems one will encounter
+and there will be problems that are best handled
+by a specialist. Help is available at University
+Computing Services, or can very likely be found in your own department.
+
+
+Figures, tables, and
+tables of contents
+are all examples of otherwise
+difficult areas that are simplified by the \LaTeX\ macro package,
+Chapter notes are an example of a further difficulty
+overcome by the thesis document style file.
+One formatting challenge that will remain such is
+the typesetting of mathematical equations.
+These are a speciality of \TeX\ and are well treated by Knuth\cite{book}
+and to a lesser extent by Lamport\cite{Lbook}.
+It happens that most people involved with equations are technically
+minded and should find these exercises quite enjoyable.
+
+\section{Conventions and Notations}
+
+In this thesis the typist
+refers to the user of \LaTeX---the one who
+makes formatting decisions and chooses the appropriate
+formatting commands.
+He or she will most often be the degree candidate.
+
+This document deals with \LaTeX\ typesetting commands and their
+functions. Wherever possible the conventions used to display
+text entered by the typist and the resulting formatted output
+are the same as those used by the \TeX books.
+Therefore, {\tt typewriter type} is used to indicate text
+as typed by the computer
+or entered by the typist.
+It is quite the opposite of {\it italics,} which indicates
+a catagory rather than exact text. For example,
+"alfa" and "beta" might each be an example of a {\it label}.
+That italic type is also used for emphasis should cause
+neither concern nor confusion.
+
+
+\section{A Disclaimer}
+
+This sample thesis was produced by the document style it describes
+and is acceptable to the Graduate School%
+\cite{SP}.
+However, the use of this package does not guarantee acceptability
+of a particular thesis,
+nor does the Graduate School recommend these macros, or the \TeX\ formatter,
+over any other package or formatter.
+
+
+% ========== Chapter 2
+
+\chapter{A Brief \\ Description of \protect\TeX}
+
+The \TeX\ formatting program is the creation of
+Donald Knuth of Stanford University.
+It has been implemented on a wide variety of computers and
+produces exactly\footnote{``Exactly'' specifically excludes the
+ inherent variety in print devices.}
+the same copy on all machines.
+Among the popular computers that support \TeX\
+are the mainframes operated by
+University Computing Services,
+most other mainframes about the campus, and
+several microcomputers including the IBM~PC and its compatibles,%
+\footnote{The university has a
+site license for PC-\TeX. It is available from the
+Microcomputer Showroom at no charge
+to students, faculty, and staff of the University of Washington.}
+and the Apple Macintosh.\footnote{Two Macintosh \TeX s are available:
+\TeX{\scriptsize TURES} from Addison-Wesley and Mac\TeX\ from
+FTL Systems.
+The Microcomputer Showroom has more information.}
+There is also a world-wide users group
+which provides computer-dependent information, classes, and a
+newsletter---the {\sl TUGboat}.
+
+\section{What are they; why are they spelled that way; \newfileline
+and what do
+really long section titles look like in the text and in the
+Table of Contents?}
+
+\TeX\ is a formatter. A document's format is controlled
+by commands embedded in its text.
+The peculiar look to the names indicate that \TeX\ is also
+a typesetting program. Each character and rule on the page
+is precisely positioned.
+\LaTeX\ is a special version of \TeX---a \TeX\ preloaded
+with a volumnous set of macros that simplify most
+formatting tasks.
+
+\TeX\ uses {\it control sequences} to control
+the formatting of a document. These control sequences are usually
+words or groups of letters prefaced with the backslash character
+({\tt\char'134}).
+For example,
+Figure \ref{start-2} shows the text that printed the beginning
+of this chapter. Note the control sequence "\chapter" that
+instructed \TeX\ to start a new chapter, print the title, and
+make an entry in the table of contents. It is an example
+of a macro defined by the \LaTeX\ macro package.
+The control sequence "\TeX", which prints the word \TeX,
+is a standard macro from the \book.
+The short control sequence "\\" in the title instructed \TeX\ to
+break the title line at that point.
+This capability is an example of an extension to \LaTeX\
+provided by the thesis document style.
+
+\begin{figure}
+\begin{verbatim}
+ \chapter{A Brief\\Description of \TeX}
+
+ The \TeX\ formatting program is the creation of
+ Donald Knuth of Stanford University.
+\end{verbatim}
+\label{start-2}
+\caption{The beginning of the Chapter II input file.}
+\end{figure}
+
+Most of the time \TeX\ is simply building paragraphs from
+text in the input files. No control sequences are involved.
+New paragraphs are indicated by a blank line in the
+input file.
+Hyphenation is performed automatically, except for few
+words that \TeX\ fails to hyphenate properly. A list of these
+appears in the {\em TUGboat}\cite{TUG:h-l}.
+
+\section{\TeX books}
+
+The primary reference for \LaTeX\ is Lamport\cite{Lbook}.
+It is easily read and should be sufficient for thesis formatting.
+If you cannot afford that you should obtain the UCS
+\LaTeX\ introduction\cite{UCS-TeX}.
+
+Most students contend that the Knuth's \book\cite{book} is difficult---but
+it is the complete \TeX\ reference.
+Each chapter is composed of paragraphs of varying
+degrees of difficulty called, in order of increasing esotery,
+introductory, ``dangerous bend'',
+and double ``dangerous bend''. A reading of the introductory
+sections is invaluable, even for \LaTeX\ users.
+Except for mathematicians
+and complex table builders, few thesis typists will encounter
+the ``dangerous bend'' conditions of the \book.
+
+\section{Mathematics}
+
+The thesis macro style does not expand on \TeX's
+or \LaTeX's
+comprehensive treatment of mathematical equation printing.%
+\label{c2note}\footnote{%
+% a long footnote indeed.
+ Although many \TeX-formatted documents contain no
+ mathematics save the page numbers, it seems appropriate
+ that this paper, which is in some sense {\it about} \TeX,
+ ought to demonstrate an equation or two. Here then, is a derivation
+ of the {\it Nonsense Theorem}.
+
+ \smallskip
+ \def\RR{{\cal R\kern-.15em R}}
+ {\narrower\hang Assume a universe $E$ and a symmetric function
+ $\$$ defined on $E$, such that for each $\$^{yy}$ there exists a
+ $\$^{\overline{yy}}$, where $\$^{yy} = \$^{\overline{yy}}$.
+ For each element $i$ of $E$ define
+ ${\cal S}(i)=\sum_i \$^{yy}+\$^{\overline{yy}}+0$.
+ Then if $\RR$ is that subset of $E$ where $1+1=3$,
+ for each $i$
+ $$\lim_{\$\to\infty}\int {\cal S}di =
+ \cases{0,&if $i\not\in\RR$;\cr
+ \infty,&if $i\in\RR$.\cr}$$
+ \par}} % end of the footnote
+%
+The \book\ devotes four full chapters and exactly one
+hundred exercises to this problem---it is thoroughly covered.
+
+
+\section{Languages other than English}
+
+Many Western languages such as Spanish and French use
+the same letters as does English, although they employ accent
+marks more often. \TeX\ formats text in these
+languages with relative ease.
+Other languages, such as Greek, Arabic, or Chinese, are much more
+difficult. Students should consult their department or contact the
+Humanities and Arts Computing Center for assistance.
+
+Characters from other languages can be defined via the
+font maker \hbox{\mffont METAFONT} (documented by Knuth\cite{Metafont}).
+The definitions are not trivial.
+Students who attempt to print a thesis with
+custom fonts may soon proclaim,
+
+\medskip
+\begin{center}
+``$\apos\alpha\pi o\kern1pt\theta\alpha\nu\epsilon\hat\iota\nu$
+\ $\theta\acute\epsilon\lambda\omega$.''
+
+\end{center}
+
+% ========== Chapter 3
+
+\chapter{The Thesis Unformatted}
+
+This chapter describes the thesis style package in detail
+and shows how it was used to format the thesis.
+
+\section{The Control File}
+
+The source to this sample thesis is contained in a single file
+only because ease of distribution was the primary concern.
+You should not do this. Your task will be much easier if you
+break your thesis into several files: a file for the preliminary pages,
+a file for each chapter, one for the glossary, and one for each
+appendix. Then include a control file to tie them all together.
+This way you can edit and format parts of your thesis much more
+efficiently.
+
+Figure~\ref{control-file} shows a control file that
+might have produced this thesis.
+It sets the document style, with options and parameters,
+and formats the various parts of the thesis---%
+but contains no text of its own.
+
+
+% control file figure
+%
+\begin{figure}[p]
+%
+\footnotesize
+\begin{verbatim}
+ % LaTeX thesis control file
+
+ \documentstyle[footnotes]{thesis}
+
+ \begin{document}
+
+ % preliminary pages
+ %
+ \prelimpages
+ \input prelim
+
+ % text pages
+ %
+ \textpages
+ \input chap1
+ \input chap2
+ \input chap3
+ \input chap4
+
+ % bibliography
+ %
+ \bibliographystyle{plain}
+ \bibliography{uwthesis}
+
+ % appendices
+ %
+ \appendix
+ \input appxa
+ \input appxb
+
+ \end{document}
+\end{verbatim}
+ \caption[A thesis control file]%
+ {\narrower A thesis control file ({\tt thesis.tex}).
+ \smallskip
+ \noindent This file is the input to \LaTeX\ that will produce a
+ thesis. It contains no text, only commands which
+ direct the formatting of the thesis.\par}
+\label{control-file}
+\end{figure}
+
+The first section defines the document style---loading both
+the thesis macros, "thesis.sty",
+and your specific macros, "mymac.sty".
+It also sets global parameters.
+This thesis has specified bottom-of-page footnote placement.
+Section \ref{footnotes} more fully explains footnotes
+as used by the thesis document style.
+
+A partial thesis is easily formatted by inserting the comment
+character ({\tt\%}) before each unwanted section.
+
+
+\section{The Text Pages}
+
+A chapter is a major division of the thesis. Each chapter begins
+on a new page and has a Table of Contents entry.
+
+\subsection{Chapters, Sections, Subsections, and Appendices}
+
+
+Within the chapter title use a "\\" control sequence to separate lines
+in the printed title (recall Figure \ref{start-2}.).
+The "\\" does not affect the table of contents.
+
+Format appendices just like chapters.
+The control sequence "\appendix" instructs \LaTeX\ to
+begin using the term `appendix' rather than `chapter'.
+
+
+Sections and subsections of a chapter are specified
+by "\section" and "\subsection", respectively.
+In this thesis chapter, section, and subsection
+titles are written to the table of contents.
+Consult Lamport\cite[pg. 160]{Lbook} to see which
+subdivisions of the thesis can be written to the table of contents.
+The "\\" control sequence is not permitted in section and
+subsection titles.
+
+Very long titles, or titles with mathematics, may write table of
+contents lines that are too long for some \TeX\ implementations
+to handle. You can manually shorten these lines by including
+the "\newfileline" anywhere in your titles. The control sequence
+has no effect on your document---it only breaks lines in the
+intermediate files.
+
+\subsection{Footnotes}
+
+\label{footnotes}
+Specify the placement of footnotes only once---as a document style
+option. Select "[footnotes]" to place the note text
+at the bottoms of pages;
+"[chapternotes]" to place it at the ends of chapters; and
+"[endnotes]" to place it at the end of the thesis.
+If you don't specify anything you get the "[footnotes]" style.
+The footnote text is printed automatically
+for the first style and manually for others.
+Put the control sequence "\chapternotes" at the end of each chapter
+to print the chapternote text
+and, as you might expect, put
+"\endnotes" at the end of all the chapters
+to print the endnote text.
+Chapternote text begins on a new page and appears in the
+table of contents as a section. Endnote text appears as
+an independent chapter.
+Both of these control sequences have no effect if the appropriate
+option has not been selected.
+
+You always use the "\footnote" control sequence to make a footnote,
+even though the functionality may differ from \LaTeX\ standard.
+
+
+In order to format correctly,
+multiple note specifications must manually include the comma,
+e.g., "\footnote{First note}$^{\!,}$\footnote{Second note}".%
+ \footnote{First note}$^{\!,}$\footnote{Second note}
+
+Long footnotes, or footnotes containing a lot of \TeX\ commands,
+can be awkward to include with the text.
+Instead, you can store them in a separate file
+and read them with "\input". This is an extension to \LaTeX.
+
+
+\subsection{Figures and Tables\/\protect\footnotemark}
+\footnotetext{Earlier versions of
+the Style Manual also included items called ``plates'',
+which were actual mounted photographs. These are now
+included in figures.\cite[pg. 16]{SP}}
+
+Standard \LaTeX\ figures and tables, see Lamport\cite{Lbook},
+normally provide the most convenient means to position the figure.
+Facing caption pages\cite[pg. 15]{SP}
+are the sole exception to this rule.
+These are captions for full page figures or tables,
+and appear on the left-hand page (facing the illustration on the
+right-hand page).
+They are formatted with a "[pf]" figure or table positoning option
+which functions very similarly to "[p]" option except
+that the page number and binding offset are reversed
+from their normal positions.
+If figure~\ref{control-file}, for example,
+had required a full page its caption (on a facing caption page)
+might have been formatted as shown in figure~\ref{facing-caption}.
+
+\begin{figure}[ht]
+\footnotesize
+\begin{verbatim}
+ \begin{figure}[pf]
+ \vbox to\textheight{
+ \vfill
+ \caption{ . . . }
+ \vfill
+ }
+ \end{figure}
+\end{verbatim}
+\caption[A facing caption page]{This text would create a
+ facing caption page.}
+\label{facing-caption}
+\end{figure}
+
+
+\section{The Preliminary Pages}
+
+These are easy to format only because they are relatively invariant
+among theses. Therefore the difficulties have already been encountered
+and overcome by \LaTeX\ and the thesis document style.
+
+\subsection{Title page}
+Define "\Title", "\Author", and "\Year" (current year if you omit it)
+and then print the
+title page with "\titlepage".
+The title page of this thesis was printed with%
+\footnote{Actually, it wasn't. It included a footnote---unusual for
+ title pages.}
+
+\begin{verbatim}
+
+ \Title{The Suitability of the \LaTeX\ Text Formatter\\
+ for Thesis Preparation by Technical and\\
+ Non-technical Degree Candidates}
+ \Author{Jim Fox}
+ \Year{1990}
+ \titlepage
+\end{verbatim}
+
+You may also change other text on the title page with these
+macros.
+
+"\Degree{"{\it degree name}"}" defaults to ``Doctor of Philosophy''
+
+"\School{"{\it school name}"}" defaults to ``University of Washington''
+
+"\Degreetext{"{\it degree text}"}" defaults to ``A dissertation submitted
+ \ldots''
+
+"\Signature{"{\it number of signature lines}"}" defaults to ``3''
+
+
+\subsection{Quote slip}
+Use the "\quoteslip" macro to format the quote slip.
+It has one argument, which is the text of the slip.
+The quote slip of this thesis was printed with
+
+\begin{verbatim}
+ \quoteslip{Extensive copying . . . 98105.}
+\end{verbatim}
+
+\subsection{Abstract}
+Define "\Professor" and "\Department" and then print the
+abstract with "\abstract".
+It has one argument, which is the text of the abstract.
+The abstract of this thesis was printed with
+
+\begin{verbatim}
+ \Professor{{\em Professor}}
+ \Department{{\em Department}}
+ \abstract{This sample . . . `real' dissertation.}
+\end{verbatim}
+
+
+\subsection{Tables of contents}
+Use the standard \LaTeX\ commands to format these items.
+
+
+\subsection{Glossary}
+
+These pages contain many entries with a common syntax.
+Macros should be used to promote uniformity
+and make the input much less cumbersome. In this thesis
+the "\G" control sequence defined in the Glossary
+obviously has such utility.
+The input that produced the Glossary is shown in figure~\ref{Gloss}.
+
+\begin{figure}[ht]
+\footnotesize
+ \begin{verbatim}
+
+ % glossary
+ %
+ \chapter*{Glossary}
+ \addcontentsline{toc}{chapter}{Glossary}
+ %
+ % This is not a LaTeX glossary and the code is completely
+ % plain tex, but it seems to do the job. In particular, the
+ % \filbreak's prevent my short glossary entries from being split
+ % at page boundaries.
+ %
+ \begingroup % keep definitions local
+ \def\G#1:{\filbreak\medskip\noindent\hang
+ {\footnotesize \uppercase{#1}}:\ \ignorespaces}
+ %
+ % glossary text items
+ %
+ \G argument: replacement text which customizes a \TeX\ macro for
+ each particular usage.
+ \G back-up: a copy of a file to be used when catastrophe strikes
+ the original. People who make no back-ups deserve
+ no sympathy.
+ .
+ .
+ .
+
+ \G thesis: either a master's thesis or a doctoral dissertation.
+ This document also refers to itself as a thesis, although it
+ really is not one.
+
+ \endgroup
+ \newpage
+\end{verbatim}
+\caption{Input for the Glossary}
+\label{Gloss}
+\end{figure}
+
+\subsection{Acknowledgments}
+Use the "\acknowledgments" macro to format the acknowledgments page.
+It has one argument, which is the text of the page.
+The acknowledgments of this thesis was printed with
+
+\begin{verbatim}
+ \acknowledgments{\vskip2pc
+ {\narrower\noindent
+ The author wishes . . . {\it il miglior fabbro}.\par}}
+\end{verbatim}
+
+
+
+\section{Customization of the Macros}
+
+Simple customization, including
+alteration of default parameters, changes to dimensions,
+paragraph indentation, and margins, are not too difficult.
+You have the choice of modifing "thesis.sty" or loading
+one or more personal style files to customize your thesis.
+The latter is usually most convienent, since you do not need
+a personal copy of "thesis.sty" in your directory.
+
+Figure~\ref{control-file} demonstrated a control file that
+loads a personal style file named "mystuf.sty".
+
+ Appendix A shows you where to find copies of the
+ "thesis.sty" style file.
+
+
+% ========== Chapter 4
+
+\chapter{Hardware Dependencies\\
+ ({\it And Other Complications})}
+
+
+\TeX\ has been designed to produce exactly the same document
+on all computers and on all printers. {\it Exactly the same}
+means that the various spacings, line and page breaks, and
+even hyphenations will occur at the same places
+when the document is formatted on a variety of computers.
+However, there are some discrepancies that cannot
+be overcome. They involve the mechanics of running \TeX\ and
+the necessary variations in computer and
+output device capability.
+
+\section{Running \protect\LaTeX}
+
+Each operating system has some means for editing and storing text,
+starting programs, and printing program output. These
+are uniformly inconsistant between machines. Therefore there
+are no useful, generic instructions for running \LaTeX.
+You will have to
+be able to do the following on your chosen computer.
+
+\begin{itemize}
+\item Create, edit, and back-up text files.
+\item Run the \TeX\ program with \LaTeX\ format.
+\item Convert the device independent output
+ to a format suitable to the selected printer.
+\item Print the converted file.
+\end{itemize}
+
+There are generally user's manuals available for each \TeX\
+implementation, which explain the program's local procedures
+and nuances.
+
+\section{Fonts}
+
+Different printers, and different sites with identical
+printers, make certain sets of fonts available for their users.
+While these font sets are not identical, they do have a common
+subset---the basic roman fonts.
+Most sites will also provide fonts at standard magnifications
+("\small", "\large", "\Large", etc.).
+The Graduate School wants a larger type than is normally used
+for book printing. The thesis document style uses 12-point.
+
+
+\section{Landscape Captions}
+
+A caption must have the same orientation as the illustration
+it describes\cite[pg. 15]{SP}.
+In some cases this requires that the caption be printed
+across the long dimension of the page. This rotated orientation
+is termed `appearing horizontally' by the Style Manual
+and `landscape mode' by most printers.
+Unfortunately, \TeX\ has no universal means to change page
+orientation---some cutting and pasting is required.
+The caption should be formatted as a blank page
+(with the "[pf]" positioning option).
+
+\begin{verbatim}
+ \begin{figure}[pf]
+ \vbox to\textheight{\vfill}
+ \end{figure}
+\end{verbatim}
+
+After the thesis
+is printed the caption can be formatted separately, possibly
+with a larger "\textwidth", and glued into place.
+
+\section{Printer Perversity}
+
+\begin{flushright}
+ \footnotesize \it
+ Never let anything mechanical know you are depending on it.
+\end{flushright}
+
+\medskip
+
+A printer will break the day before a dissertation is due. This is
+an immutable law of nature. Print your dissertation well in advance
+of any deadlines. Take some time to admire your work.
+
+%
+% ========== Bibliography
+%
+\nocite{*} % include everything in the thesis.bib file
+\bibliographystyle{plain}
+\bibliography{thesis}
+%
+% ========== Appendices
+%
+\appendix
+\raggedbottom\sloppy
+
+% ========== Appendix A
+
+\chapter{Where to find the files}
+
+The thesis style file, "thesis.sty", contains the parameter settings,
+macro definitions, and other \TeX nical commands which
+allow \LaTeX\ to format a thesis.
+The source to
+this document, "thesis.tex", contains many formatting examples
+which you may find useful.
+The bibliography database, "thesis.bib", contains instructions
+to BibTeX to create and format the bibliography.
+You can find these files in at least the following locations:
+
+\begin{itemize}
+\item the standard "tex" input area on UCS mainframe computers,
+
+\begin{description}
+\item[unix:] See\ \ \ \verb%/usr/local/lib/tex/inputs/thesis.*%
+\item[vms:] See\ \ \ \verb%tex_inputs:thesis.*%
+\end{description}
+\item anonymous ftp to "blake.acs.washington.edu".
+
+ See\ \ \ \verb%pub/LaTeX/thesis.*%
+\item anonymous ftp to "byron.u.washington.edu".
+
+ See\ \ \ \verb%pub/uw/LaTeX/thesis.*%
+\end{itemize}
+
+
+\end{document}
diff --git a/macros/latex209/contrib/verbtext/verbtext.sty b/macros/latex209/contrib/verbtext/verbtext.sty
new file mode 100644
index 0000000000..f7e69d3e77
--- /dev/null
+++ b/macros/latex209/contrib/verbtext/verbtext.sty
@@ -0,0 +1,2436 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% VERBTEXT.STY %
+% %
+% This document style option for LaTeX documents allows you to set %
+% some text verbatim or to input a file verbatim, with reasonable %
+% printing of 8-bit-characters, using only the standard (old) LaTeX %
+% fonts (cmtt... etc.), without needs for the new DC fonts. %
+% Character set ISO 8859 Latin 1 and PC codepages 437 and 850 are %
+% currently supported, but other sets may easily be added. %
+% Verbatim text may be enclosed in a box or be line numbered. %
+% A meta-verbatim mode allows escapes from verbatim mode without %
+% leaving the verbatim environment. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Copyright (c) 1993 by Rainer Perske %
+% %
+% This program is free software; you can redistribute it and/or %
+% modify it under the terms of the GNU General Public License as %
+% published by the Free Software Foundation; either version 2 of the %
+% License, or (at your option) any later version, with one exception: %
+% In opposition to the terms just mentioned, you MUST NOT TAKE A FEE %
+% for copying or distributing this program in its unmodified version. %
+% %
+% This program is distributed in the hope that it will be useful, %
+% but WITHOUT ANY WARRANTY; without even the implied warranty of %
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %
+% GNU General Public License for more details. %
+% %
+% You should have received a copy of the GNU General Public License %
+% along with this program; if not, write to the Free Software %
+% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. %
+% A copy of this licence is attached to the end of this program. %
+% %
+% Please direct any comments about this file via electronic mail to: %
+% perske@uni-muenster.de (Internet address), or via paper mail to: %
+% Rainer Perske, Zur Gr"afte 10, D-48161 M"unster, Germany %
+% And don't forget to mention the date of this version, see below. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\message{Document style option `verbtext.sty' for 8-bit-verbatim text %%
+and file input -- Release of 17.Sep.1993}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Dieser Style dient zum Einf"ugen von Dateien, Zeilen oder Zeichen, %
+% die verbatim oder meta-verbatim gedruckt werden. %
+% %
+% Die Zeichen hex.00 bis 07 und 0E bis FF werden optional gem"a"s %
+% ISO 8859 Latin 1, CECP 850 oder CECP 437 dargestellt. %
+% %
+% F"ur Steuerzeichen in diesem Bereich werden geeignete grafische %
+% Darstellungen ausgew"ahlt. %
+% %
+% Die Steuerzeichen hex.08 bis 0D (BS, HT, LF, VT, FF und CR) werden %
+% sinnvoll ausgef"uhrt, wobei LF, VT, FF und CR alle als Zeilenenden %
+% behandelt werden, bei VT zus"atzlich eine und bei FF zwei leere %
+% Zeilen eingef"ugt werden. %
+% %
+% Im Verbatim-Modus werden alle Zeichen (bis auf das Begrenzungs- %
+% zeichen bei \verbchars) im eingestellten Zeichensatz dargestellt. %
+% %
+% Im Meta-Verbatim-Modus behalten die Zeichen \ { } ihre gewohnte %
+% Bedeutung, au"serdem dienen die Zeichen < und > als Steuerzeichen. %
+% Die Zeichen k"onnen aber mit \\ \{ \} \< und \> eingegeben werden. %
+% %
+% Texte, die im Meta-Verbatim-Modus in <...> eingeschlossen werden, %
+% werden in \it gesetzt und normal interpretiert. %
+% %
+% Bei \verbchars verlieren auch die Steuerzeichen hex.08 bis 0D ihre %
+% Funktion, sie werden ebenfalls dargestellt. %
+% %
+% Diese Datei ist mit \input in die Pr"aambel einzuf"ugen oder als %
+% Style-Datei im \documentstyle-/\documentclass-Befehl anzugeben. %
+% %
+% Die Befehle und Umgebungen d"urfen auch in {\small ...} oder andere %
+% Größenumschaltungen eingeschlossen werden. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Datei oder Zeilen verbatim einf"ugen: %
+% - \verbinput{filename} - Datei unmodifiziert %
+% - \verbinputnum{filename} - Datei mit Zeilennummern links %
+% - \verbinputbox{filename} - Datei in Kasten eingeschlossen %
+% - \begin{verblines} ... - Zeilen unmodifiziert %
+% - \begin{verblinesnum} ... - Zeilen mit Zeilennummern links %
+% - \begin{verblinesbox} ... - Zeilen in Kasten eingeschlossen %
+% %
+% Datei oder Zeilen meta-verbatim einf"ugen: %
+% - \metainput{filename} - Datei unmodifiziert %
+% - \metainputnum{filename} - Datei mit Zeilennummern links %
+% - \metainputbox{filename} - Datei in Kasten eingeschlossen %
+% - \begin{metalines} ... - Zeilen unmodifiziert %
+% - \begin{metalinesnum} ... - Zeilen mit Zeilennummern links %
+% - \begin{metalinesbox} ... - Zeilen in Kasten eingeschlossen %
+% %
+% Zeichenfolge verbatim einf"ugen: %
+% - \verbchars|zeichenfolge| - Zeichenfolge zwischen den |-Zeichen %
+% (Anstelle von | kann ein beliebiges Zeichen verwendet werden.) %
+% (Auch die Steuercodes HT, BS, LF, VT, FF, CR werden dargestellt.) %
+% %
+% Alle Befehle und Umgebungen gibt es auch in der *-Form mit sichtbar %
+% dargestelltem Leerzeichen: \verbinput*{fname}, \begin{verblines*}, %
+% \verbchars*|zeichenfolge| etc. %
+% %
+% Alle Befehle und Umgebungen gibt es auch mit gro"sem Anfangsbuch- %
+% staben. Diese Variante erzeugt Zwischenraum vor und nach den ein- %
+% gef"ugten Zeilen bzw. Zeichen, wie es auch bei der originalen %
+% verbatim-Umgebung der Fall ist. (Bei den Kleinbuchstabenvarianten %
+% sto"sen die eingef"ugten Zeilen bzw. Zeichen unmittelbar an die %
+% benachbarten Zeilen bzw. Zeichen.) %
+% %
+% Die Umgebungen Verblines und Verblines* k"onnen folglich als Ersatz %
+% f"ur verbatim und verbatim* verwendet werden und die Befehle %
+% \verbchars und \verbchars* als Ersatz f"ur \verb und \verb*. Um %
+% verbatim, verbatim*, \verb und \verb* entsprechend umzudefinieren, %
+% ist der Befehl \verbatimreplace auszuf"uhren. %
+% %
+% Umgebungen verbatim, verbatim*, Befehle \verb, \verb* umdefinieren: %
+% - \verbatimreplace - LaTeX-Befehle umdefinieren %
+% Die Einstellung gilt lokal zur Gruppe. %
+% %
+% Auswahl des zu verwendenden Zeichensatzes: %
+% - \verbcharset{nnn} - Zeichensatz nnn einstellen %
+% (nnn ist eine der Zahlen 88591, 850, 437, Anfangswert ist 88591.) %
+% Die Einstellung gilt lokal zur Gruppe. %
+% %
+% Im Meta-Verbatim-Modus stehen die deaktivierten Zeichen unter %
+% diesen Namen weiterhin zur Verf"ugung: %
+% " \um # \hash $ \dollar $$ \ddollar & \tab ^ \sp _ \sb ~ \tie %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\ifx\verbtextalready\relax\endinput\else\let\verbtextalready\relax\fi
+
+\begingroup
+\makeatletter% LaTeX-Buchstabe
+\catcode`\:=11% Privater Buchstabe
+\catcode`\^^0c=\active\let^^0c=\relax% Outer-Setzung entsch"arfen
+\gdef\H:{2.4ex}% Zeilenabstand
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Erster Teil: Definition der Sonderzeichen %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Alle Zeichen m"ussen so definiert werden, da"s sie
+% - nicht mit '{' anfangen (gibt am Zeilenanfang Probleme mit \everypar)
+% - den vertikalen Modus verlassen, bevor sie etwas setzen (sie d"urfen
+% also nicht mit \kern oder \hbox beginnen)
+
+% Dimensionen f"ur selbstgebastelte Zeichen
+
+\newdimen{\w:}
+\newdimen{\h:}
+\newdimen{\d:}
+\newdimen{\x:}
+\newdimen{\y:}
+\newdimen{\z:}
+
+% Hilfsmakros
+
+\newif\ifv:vis% Leerzeichen sichtbar?
+\global\let\ifv:vis=\ifv:vis
+\global\let\v:vistrue=\v:vistrue
+\global\let\v:visfalse=\v:visfalse
+\gdef\cbox:#1{\leavevmode{\tt\setbox0=\hbox to\w:{#1}\ht0=\h:\dp0=\d:\box0 }}
+\gdef\sym:#1{\cbox:{\hss#1\hss}}
+\gdef\bs:{{\hskip-\w:}}
+\gdef\up:#1#2{\leavevmode\raise#1\hbox{#2}}
+\gdef\ctl:#1{\sym:{\char20 \bs:\up:{.3ex}{\char20 }\bs:\up:{-.4ex}{#1}}}
+\gdef\ctlx:#1{\sym:{\char94 \bs:\up:{.3ex}{\char94 }\bs:\up:{-.4ex}{#1}}}
+\gdef\G:#1{\leavevmode\lower\d:\vbox to\z:{\vss\hbox to\w:{#1\hss}}}
+\gdef\B:#1#2#3#4{\hbox to0em{\vrule height0ex depth0ex width#1\x:\vrule height#2\y: depth-#3\y: width#4\x: \hss}}
+
+% Umdefinierte ASCII-Zeichen
+
+\gdef\:sp{\ifv:vis\char32 \else\ \fi}% Feste Blanks
+\gdef\:gr{\leavevmode\kern0pt\char96 }% Keine Ligaturen ?` und !`
+\gdef\:us{\leavevmode\vrule height-.2\d: depth.5\d: width\w:\relax}% Aussehen
+
+% Definition der Akzente und Umlaute als Makros
+
+\gdef\:acute{\char19 }
+\gdef\:angstrom{\char23 }
+\gdef\:macron{\char22 }
+\gdef\:cedilla{\char24 }
+\gdef\:circumflex{\char94 }
+\gdef\:grave{\char18 }
+\gdef\:tilde{\char126 }
+\gdef\:umlaut{\char127 }
+
+\gdef\acu:a{\accent19 a}
+\gdef\acu:A{\accent19 A}
+\gdef\acu:e{\accent19 e}
+\gdef\acu:E{\accent19 E}
+\gdef\acu:i{\accent19 \char16 }
+\gdef\acu:I{\accent19 I}
+\gdef\acu:o{\accent19 o}
+\gdef\acu:O{\accent19 O}
+\gdef\acu:u{\accent19 u}
+\gdef\acu:U{\accent19 U}
+\gdef\acu:y{\accent19 y}
+\gdef\acu:Y{\accent19 Y}
+\gdef\ang:a{\accent23 a}
+\gdef\ang:A{\accent23 A}
+\gdef\ced:C{C\bs:{\char24 }}
+\gdef\ced:c{c\bs:{\char24 }}
+\gdef\cir:a{\accent94 a}
+\gdef\cir:A{\accent94 A}
+\gdef\cir:e{\accent94 e}
+\gdef\cir:E{\accent94 E}
+\gdef\cir:i{\accent94 \char16 }
+\gdef\cir:I{\accent94 I}
+\gdef\cir:o{\accent94 o}
+\gdef\cir:O{\accent94 O}
+\gdef\cir:u{\accent94 u}
+\gdef\cir:U{\accent94 U}
+\gdef\dia:o{\char28 }
+\gdef\dia:O{\char31 }
+\gdef\gra:a{\accent18 a}
+\gdef\gra:A{\accent18 A}
+\gdef\gra:e{\accent18 e}
+\gdef\gra:E{\accent18 E}
+\gdef\gra:i{\accent18 \char16 }
+\gdef\gra:I{\accent18 I}
+\gdef\gra:o{\accent18 o}
+\gdef\gra:O{\accent18 O}
+\gdef\gra:u{\accent18 u}
+\gdef\gra:U{\accent18 U}
+\gdef\lig:ae{\char26 }
+\gdef\lig:AE{\char29 }
+\gdef\til:a{\accent126 a}
+\gdef\til:A{\accent126 A}
+\gdef\til:n{\accent126 n}
+\gdef\til:N{\accent126 N}
+\gdef\til:o{\accent126 o}
+\gdef\til:O{\accent126 O}
+\gdef\uml:a{\accent127 a}
+\gdef\uml:A{\accent127 A}
+\gdef\uml:e{\accent127 e}
+\gdef\uml:E{\accent127 E}
+\gdef\uml:i{\accent127 \char16 }
+\gdef\uml:I{\accent127 I}
+\gdef\uml:o{\accent127 o}
+\gdef\uml:O{\accent127 O}
+\gdef\uml:u{\accent127 u}
+\gdef\uml:U{\accent127 U}
+\gdef\uml:y{\accent127 y}
+\gdef\:eszet{\char25 }
+
+% Definition der graphischen Zeichen im 9x9-Raster als Makros
+
+\gdef\box:full{\G:{\B:0909}}
+\gdef\box:halfhigh{\G:{\B:09{4.5}9}}
+\gdef\box:halfleft{\G:{\B:090{4.5}}}
+\gdef\box:halflow{\G:{\B:0{4.5}09}}
+\gdef\box:halfright{\G:{\B:{4.5}90{4.5}}}
+\gdef\box:light{\G:{\B:1901\B:4901\B:7901}}
+\gdef\box:medium{\G:{\B:{0.5}902\B:{3.5}902\B:{6.5}902}}
+\gdef\box:dark{\G:{\B:{0.5}902\B:{3.5}902\B:{6.5}902\B:0879\B:0549\B:0219}}
+\gdef\box:small{\G:{\B:3633}}
+\gdef\bar:DDLLRR{\G:{\B:0659\B:0432\B:2401\B:6401\B:7432}}
+\gdef\bar:DDLL{\G:{\B:0432\B:2401\B:0656\B:6601}}
+\gdef\bar:DDRR{\G:{\B:2601\B:3656\B:6401\B:7432}}
+\gdef\bar:DLR{\G:{\B:0549\B:4501}}
+\gdef\bar:DL{\G:{\B:0544\B:4501}}
+\gdef\bar:DR{\G:{\B:4501\B:5544}}
+\gdef\bar:LLRR{\G:{\B:0439\B:0659}}
+\gdef\bar:LR{\G:{\B:0549}}
+\gdef\bar:UDLR{\G:{\B:0549\B:4901}}
+\gdef\bar:UDL{\G:{\B:0544\B:4901}}
+\gdef\bar:UDR{\G:{\B:4901\B:5544}}
+\gdef\bar:UD{\G:{\B:4901}}
+\gdef\bar:ULR{\G:{\B:0549\B:4951}}
+\gdef\bar:UL{\G:{\B:0544\B:4941}}
+\gdef\bar:UR{\G:{\B:4941\B:5544}}
+\gdef\bar:UUDDLLRR{\G:{\B:0652\B:2951\B:6951\B:7652\B:0432\B:2401\B:6401\B:7432}}
+\gdef\bar:UUDDLL{\G:{\B:0652\B:2951\B:0432\B:2401\B:6901}}
+\gdef\bar:UUDDRR{\G:{\B:2901\B:6951\B:7652\B:6401\B:7432}}
+\gdef\bar:UUDD{\G:{\B:2901\B:6901}}
+\gdef\bar:UULLRR{\G:{\B:0439\B:0652\B:2951\B:6951\B:7652}}
+\gdef\bar:UULL{\G:{\B:0652\B:2951\B:0436\B:6931}}
+\gdef\bar:UURR{\G:{\B:2931\B:3436\B:6951\B:7652}}
+\gdef\bar:UDLL{\G:{\B:0434\B:0654\B:4901}}
+\gdef\bar:UUDDL{\G:{\B:0542\B:2901\B:6901}}
+\gdef\bar:DDL{\G:{\B:0546\B:2401\B:6501}}
+\gdef\bar:DLL{\G:{\B:0434\B:0654\B:4601}}
+\gdef\bar:UUL{\G:{\B:0546\B:2951\B:6941}}
+\gdef\bar:ULL{\G:{\B:0434\B:0654\B:4931}}
+\gdef\bar:UDRR{\G:{\B:4901\B:5435\B:5655}}
+\gdef\bar:UUDDR{\G:{\B:2901\B:6901\B:7543}}
+\gdef\bar:ULLRR{\G:{\B:0439\B:0659\B:4961}}
+\gdef\bar:UULR{\G:{\B:0549\B:2951\B:6951}}
+\gdef\bar:DLLRR{\G:{\B:0439\B:0659\B:4401}}
+\gdef\bar:DDLR{\G:{\B:0549\B:2401\B:6501}}
+\gdef\bar:UUR{\G:{\B:2547\B:2951\B:6951}}
+\gdef\bar:URR{\G:{\B:4931\B:5435\B:5655}}
+\gdef\bar:DRR{\G:{\B:4601\B:5435\B:5655}}
+\gdef\bar:DDR{\G:{\B:2547\B:2401\B:6501}}
+\gdef\bar:UUDDLR{\G:{\B:2901\B:6901\B:0549}}
+\gdef\bar:UDLLRR{\G:{\B:0439\B:0659\B:4901}}
+
+% Definition der sonstige Zeichen als Makros
+
+\gdef\ctl:at{\ctl:{@}}
+\gdef\ctl:a{\ctl:{A}}
+\gdef\ctl:b{\ctl:{B}}
+\gdef\ctl:c{\ctl:{C}}
+\gdef\ctl:d{\ctl:{D}}
+\gdef\ctl:e{\ctl:{E}}
+\gdef\ctl:f{\ctl:{F}}
+\gdef\ctl:g{\ctl:{G}}
+\gdef\ctl:h{\ctl:{H}}
+\gdef\ctl:i{\ctl:{I}}
+\gdef\ctl:j{\ctl:{J}}
+\gdef\ctl:k{\ctl:{K}}
+\gdef\ctl:l{\ctl:{L}}
+\gdef\ctl:m{\ctl:{M}}
+\gdef\ctl:n{\ctl:{N}}
+\gdef\ctl:o{\ctl:{O}}
+\gdef\ctl:p{\ctl:{P}}
+\gdef\ctl:q{\ctl:{Q}}
+\gdef\ctl:r{\ctl:{R}}
+\gdef\ctl:s{\ctl:{S}}
+\gdef\ctl:t{\ctl:{T}}
+\gdef\ctl:u{\ctl:{U}}
+\gdef\ctl:v{\ctl:{V}}
+\gdef\ctl:w{\ctl:{W}}
+\gdef\ctl:x{\ctl:{X}}
+\gdef\ctl:y{\ctl:{Y}}
+\gdef\ctl:z{\ctl:{Z}}
+\gdef\ctl:aa{\ctl:{[}}
+\gdef\ctl:bb{\ctl:{\char92 }}
+\gdef\ctl:cc{\ctl:{]}}
+\gdef\ctl:dd{\ctl:{\char94 }}
+\gdef\ctl:ee{\ctl:{\char95 }}
+\gdef\ctlx:at{\ctlx:{@}}
+\gdef\ctlx:a{\ctlx:{A}}
+\gdef\ctlx:b{\ctlx:{B}}
+\gdef\ctlx:c{\ctlx:{C}}
+\gdef\ctlx:d{\ctlx:{D}}
+\gdef\ctlx:e{\ctlx:{E}}
+\gdef\ctlx:f{\ctlx:{F}}
+\gdef\ctlx:g{\ctlx:{G}}
+\gdef\ctlx:h{\ctlx:{H}}
+\gdef\ctlx:i{\ctlx:{I}}
+\gdef\ctlx:j{\ctlx:{J}}
+\gdef\ctlx:k{\ctlx:{K}}
+\gdef\ctlx:l{\ctlx:{L}}
+\gdef\ctlx:m{\ctlx:{M}}
+\gdef\ctlx:n{\ctlx:{N}}
+\gdef\ctlx:o{\ctlx:{O}}
+\gdef\ctlx:p{\ctlx:{P}}
+\gdef\ctlx:q{\ctlx:{Q}}
+\gdef\ctlx:r{\ctlx:{R}}
+\gdef\ctlx:s{\ctlx:{S}}
+\gdef\ctlx:t{\ctlx:{T}}
+\gdef\ctlx:u{\ctlx:{U}}
+\gdef\ctlx:v{\ctlx:{V}}
+\gdef\ctlx:w{\ctlx:{W}}
+\gdef\ctlx:x{\ctlx:{X}}
+\gdef\ctlx:y{\ctlx:{Y}}
+\gdef\ctlx:z{\ctlx:{Z}}
+\gdef\ctlx:aa{\ctlx:{[}}
+\gdef\ctlx:bb{\ctlx:{\char92 }}
+\gdef\ctlx:cc{\ctlx:{]}}
+\gdef\ctlx:dd{\ctlx:{\char94 }}
+\gdef\ctlx:ee{\ctlx:{\char95 }}
+
+\gdef\:Delta{\char1 }
+\gdef\:Eth{D\bs:-}
+\gdef\:Gamma{\char0 }
+\gdef\:Omega{\char10 }
+\gdef\:Pesetas{P\bs:\hbox{\kern1\x: t\kern-1\x:}}
+\gdef\:Phi{\char9 }
+\gdef\:Pi{\char5 }
+\gdef\:Sigma{\char6 }
+\gdef\:Theta{\char2 }
+\gdef\:Thorn{\sym:{\rlap{\kern-.07em\rm I}\up:{2\y:}{$\scriptscriptstyle\supset$}}}
+\gdef\:Yen{Y\bs:\up:{-\y:}{-}}
+\gdef\:alpha{\sym:{$\alpha$}}
+\gdef\:approx{\up:{\y:}{\sym:{$\scriptstyle\approx$}}}
+\gdef\:arrdn{\up:{\y:}{\sym:{$\scriptstyle\downarrow$}}}
+\gdef\:arrlfrt{\up:{\y:}{\sym:{$\scriptscriptstyle\leftrightarrow$}}}
+\gdef\:arrlf{\up:{\y:}{\sym:{$\scriptscriptstyle\leftarrow$}}}
+\gdef\:arrrt{\up:{\y:}{\sym:{$\scriptscriptstyle\rightarrow$}}}
+\gdef\:arrupdn{\up:{\y:}{\sym:{$\scriptstyle\updownarrow$}}}
+\gdef\:arrup{\up:{\y:}{\sym:{$\scriptstyle\uparrow$}}}
+\gdef\:bigcursor{\sym:{\vrule height.5ex depth0ex width7\x:}}
+\gdef\:bigdot{\sym:{$\bullet$}}
+\gdef\:bigmiddledot{\up:{\y:}{\sym:{$\scriptstyle\bullet$}}}
+\gdef\:brokenvbar{\G:{\B:4851\B:4411}}
+\gdef\:cent{c\bs:\up:{-.2ex}{\char124 }}
+\gdef\:circ{\sym:{$\circ$}}
+\gdef\:copyright{\cbox:{\kern-.2em(\hss\up:{.2ex}{c}\hss)\kern-.2em}}
+\gdef\:currency{\up:{.5\y:}{\sym:{$\scriptstyle\cap$}}\bs:\up:{\y:}{\sym:{$\scriptstyle\cup$}}}
+\gdef\:cut{\sym:{$\cap$}}
+\gdef\:degree{\sym:{$^\circ$}}
+\gdef\:delta{\sym:{$\delta$}}
+\gdef\:diameter{\sym:{$\phi$}}
+\gdef\:div{\up:{\y:}{\sym:{$\scriptstyle\div$}}}
+\gdef\:dotlessi{\char16 }
+\gdef\:doubleexclamationmark{\cbox:{\kern-.1em!\hss!\kern-.1em}}
+\gdef\:doubleunderscore{\char95 \bs:\up:{-\y:}{\char95 }}
+\gdef\:elementof{\sym:{$\in$}}
+\gdef\:eth{d\bs:{\char22 }}
+\gdef\:female{\up:{2\y:}{o}\bs:\up:{-2\y:}{+}}
+\gdef\:fixblank{\ }
+\gdef\:florin{\sym:{\it f}}
+\gdef\:frenchleftquotes{\sym:{<\kern-.3em<}}
+\gdef\:frenchrightquotes{\sym:{>\kern-.3em>}}
+\gdef\:ge{<\bs:\char95 }
+\gdef\:herz{\up:{\y:}{\sym:{$\scriptstyle\heartsuit$}}}
+\gdef\:identity{\up:{\y:}{\sym:{$\scriptstyle\equiv$}}}
+\gdef\:infinity{\up:{\y:}{\sym:{$\scriptstyle\infty$}}}
+\gdef\:intlower{\G:{\B:4931\B:2322}}
+\gdef\:intupper{\G:{\B:4601\B:5762}}
+\gdef\:invertedbigdot{\sym:{$\bullet$}\bs:\G:{\B:0989\B:0109\B:0901\B:8901}}
+\gdef\:invertedcirc{\sym:{$\circ$}\bs:\G:{\B:0989\B:0109\B:0901\B:8901}}
+\gdef\:invertedexclamationmark{\char14 }
+\gdef\:invertednot{\sym:{\rlap{\kern-.18em\up:{-.66ex}{\char13 }}-}}
+\gdef\:invertedquestionmark{\char15 }
+\gdef\:invertedsmile{\G:{\B:2975\B:1822\B:6822\B:2315\B:2655\B:4761\B:2422\B:5422}}
+\gdef\:karo{\up:{\y:}{\sym:{$\scriptstyle\diamondsuit$}}}
+\gdef\:kreuz{\up:{\y:}{\sym:{$\scriptstyle\clubsuit$}}}
+\gdef\:le{>\bs:\char95 }
+\gdef\:male{o\bs:\up:{3\y:}{\sym:{$\scriptscriptstyle\nearrow$}}}
+\gdef\:middledot{\cbox:{\up:{.5ex}{.}}}
+\gdef\:mirrorednot{\sym:{\rlap{\kern-.18em\up:{-.10ex}{\char13 }}-}}
+\gdef\:mu{\sym:{$\mu$}}
+\gdef\:not{\sym:{-\llap{\up:{-.66ex}{\char13 }\kern-.18em}}}
+\gdef\:null{\ }
+\gdef\:onefourth{\up:{\y:}{\sym:{$\scriptstyle{1\over4}$}}}
+\gdef\:onehalf{\up:{\y:}{\sym:{$\scriptstyle{1\over2}$}}}
+\gdef\:onenote{\G:{\B:1422\B:3831\B:4873\B:4653\B:7851}}
+\gdef\:paragraph{\sym:{S\bs:\up:{-.6ex}{S}}}
+\gdef\:paramark{\sym:{\P}}
+\gdef\:pik{\up:{\y:}{\sym:{$\scriptstyle\spadesuit$}}}
+\gdef\:plusminus{+\bs:\char95 }
+\gdef\:pound{\sym:{\it\char36 }}
+\gdef\:registered{\cbox:{\kern-.2em(\hss R\hss)\kern-.2em}}
+\gdef\:root{\up:{\y:}{\sym:{$\scriptscriptstyle\surd$}}}
+\gdef\:sigma{\sym:{$\sigma$}}
+\gdef\:smile{\G:{\B:2985\B:1821\B:7821\B:2215\B:3761\B:5761\B:3543\B:4431}}
+\gdef\:star{\sym:{$\ast$}}
+\gdef\:supern{\sym:{$^{\rm n}$}}
+\gdef\:superone{\sym:{$^{\scriptscriptstyle1}$}}
+\gdef\:superthree{\sym:{$^{\scriptscriptstyle3}$}}
+\gdef\:supertwo{\sym:{$^{\scriptscriptstyle2}$}}
+\gdef\:syllablehyphen{\sym:{\it\char45 }}
+\gdef\:tau{\sym:{$\tau$}}
+\gdef\:thorn{\sym:{\rlap{\kern.08em\vrule height\h: depth\d: width\x:}\up:{0.2ex}{$\scriptscriptstyle\supset$}\kern-\x:}}
+\gdef\:threefourth{\up:{\y:}{\sym:{$\scriptstyle{3\over4}$}}}
+\gdef\:times{\up:{\y:}{\sym:{$\scriptstyle\times$}}}
+\gdef\:tridn{\up:{\y:}{\sym:{$\scriptstyle\bigtriangledown$}}}
+\gdef\:trilf{\sym:{$\triangleleft$}}
+\gdef\:trirt{\sym:{$\triangleright$}}
+\gdef\:triup{\up:{\y:}{\sym:{$\scriptstyle\bigtriangleup$}}}
+\gdef\:twonote{\G:{\B:0312\B:2821\B:5422\B:7831\B:3874\B:3654}}
+\gdef\:umera{\cbox:{\up:{.3ex}{\char95 }\bs:\up:{.4ex}{a}}}
+\gdef\:umero{\cbox:{\up:{.3ex}{\char95 }\bs:\up:{.4ex}{o}}}
+\gdef\:updnbar{\up:{\y:}{\sym:{$\scriptstyle\updownarrow$}\bs:\G:{\B:2105}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Zweiter Teil: Definition der Makros zum Setzen der Sonderzeichen %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\v:normalize{%
+\catcode`\^^21=12\catcode`\^^22=12\catcode`\^^23=12%
+\catcode`\^^24=12\catcode`\^^25=12\catcode`\^^26=12\catcode`\^^27=12%
+\catcode`\^^28=12\catcode`\^^29=12\catcode`\^^2a=12\catcode`\^^2b=12%
+\catcode`\^^2c=12\catcode`\^^2d=12\catcode`\^^2e=12\catcode`\^^2f=12%
+\catcode`\^^30=12\catcode`\^^31=12\catcode`\^^32=12\catcode`\^^33=12%
+\catcode`\^^34=12\catcode`\^^35=12\catcode`\^^36=12\catcode`\^^37=12%
+\catcode`\^^38=12\catcode`\^^39=12\catcode`\^^3a=12\catcode`\^^3b=12%
+\catcode`\^^3c=12\catcode`\^^3d=12\catcode`\^^3e=12\catcode`\^^3f=12%
+\catcode`\^^40=12\catcode`\^^41=11\catcode`\^^42=11\catcode`\^^43=11%
+\catcode`\^^44=11\catcode`\^^45=11\catcode`\^^46=11\catcode`\^^47=11%
+\catcode`\^^48=11\catcode`\^^49=11\catcode`\^^4a=11\catcode`\^^4b=11%
+\catcode`\^^4c=11\catcode`\^^4d=11\catcode`\^^4e=11\catcode`\^^4f=11%
+\catcode`\^^50=11\catcode`\^^51=11\catcode`\^^52=11\catcode`\^^53=11%
+\catcode`\^^54=11\catcode`\^^55=11\catcode`\^^56=11\catcode`\^^57=11%
+\catcode`\^^58=11\catcode`\^^59=11\catcode`\^^5a=11\catcode`\^^5b=12%
+\catcode`\^^5c=12\catcode`\^^5d=12\catcode`\^^5e=12%
+\catcode`\^^61=11\catcode`\^^62=11\catcode`\^^63=11%
+\catcode`\^^64=11\catcode`\^^65=11\catcode`\^^66=11\catcode`\^^67=11%
+\catcode`\^^68=11\catcode`\^^69=11\catcode`\^^6a=11\catcode`\^^6b=11%
+\catcode`\^^6c=11\catcode`\^^6d=11\catcode`\^^6e=11\catcode`\^^6f=11%
+\catcode`\^^70=11\catcode`\^^71=11\catcode`\^^72=11\catcode`\^^73=11%
+\catcode`\^^74=11\catcode`\^^75=11\catcode`\^^76=11\catcode`\^^77=11%
+\catcode`\^^78=11\catcode`\^^79=11\catcode`\^^7a=11\catcode`\^^7b=12%
+\catcode`\^^7c=12\catcode`\^^7d=12\catcode`\^^7e=12%
+}
+
+\gdef\v:activate{%
+\catcode`\^^00=13\catcode`\^^01=13\catcode`\^^02=13\catcode`\^^03=13%
+\catcode`\^^04=13\catcode`\^^05=13\catcode`\^^06=13\catcode`\^^07=13%
+\catcode`\^^08=13\catcode`\^^09=13\catcode`\^^0a=13\catcode`\^^0b=13%
+\catcode`\^^0c=13\catcode`\^^0d=13\catcode`\^^0e=13\catcode`\^^0f=13%
+\catcode`\^^10=13\catcode`\^^11=13\catcode`\^^12=13\catcode`\^^13=13%
+\catcode`\^^14=13\catcode`\^^15=13\catcode`\^^16=13\catcode`\^^17=13%
+\catcode`\^^18=13\catcode`\^^19=13\catcode`\^^1a=13\catcode`\^^1b=13%
+\catcode`\^^1c=13\catcode`\^^1d=13\catcode`\^^1e=13\catcode`\^^1f=13%
+\catcode`\^^20=13\catcode`\^^5f=13\catcode`\^^60=13\catcode`\^^7f=13%
+\catcode`\^^80=13\catcode`\^^81=13\catcode`\^^82=13\catcode`\^^83=13%
+\catcode`\^^84=13\catcode`\^^85=13\catcode`\^^86=13\catcode`\^^87=13%
+\catcode`\^^88=13\catcode`\^^89=13\catcode`\^^8a=13\catcode`\^^8b=13%
+\catcode`\^^8c=13\catcode`\^^8d=13\catcode`\^^8e=13\catcode`\^^8f=13%
+\catcode`\^^90=13\catcode`\^^91=13\catcode`\^^92=13\catcode`\^^93=13%
+\catcode`\^^94=13\catcode`\^^95=13\catcode`\^^96=13\catcode`\^^97=13%
+\catcode`\^^98=13\catcode`\^^99=13\catcode`\^^9a=13\catcode`\^^9b=13%
+\catcode`\^^9c=13\catcode`\^^9d=13\catcode`\^^9e=13\catcode`\^^9f=13%
+\catcode`\^^a0=13\catcode`\^^a1=13\catcode`\^^a2=13\catcode`\^^a3=13%
+\catcode`\^^a4=13\catcode`\^^a5=13\catcode`\^^a6=13\catcode`\^^a7=13%
+\catcode`\^^a8=13\catcode`\^^a9=13\catcode`\^^aa=13\catcode`\^^ab=13%
+\catcode`\^^ac=13\catcode`\^^ad=13\catcode`\^^ae=13\catcode`\^^af=13%
+\catcode`\^^b0=13\catcode`\^^b1=13\catcode`\^^b2=13\catcode`\^^b3=13%
+\catcode`\^^b4=13\catcode`\^^b5=13\catcode`\^^b6=13\catcode`\^^b7=13%
+\catcode`\^^b8=13\catcode`\^^b9=13\catcode`\^^ba=13\catcode`\^^bb=13%
+\catcode`\^^bc=13\catcode`\^^bd=13\catcode`\^^be=13\catcode`\^^bf=13%
+\catcode`\^^c0=13\catcode`\^^c1=13\catcode`\^^c2=13\catcode`\^^c3=13%
+\catcode`\^^c4=13\catcode`\^^c5=13\catcode`\^^c6=13\catcode`\^^c7=13%
+\catcode`\^^c8=13\catcode`\^^c9=13\catcode`\^^ca=13\catcode`\^^cb=13%
+\catcode`\^^cc=13\catcode`\^^cd=13\catcode`\^^ce=13\catcode`\^^cf=13%
+\catcode`\^^d0=13\catcode`\^^d1=13\catcode`\^^d2=13\catcode`\^^d3=13%
+\catcode`\^^d4=13\catcode`\^^d5=13\catcode`\^^d6=13\catcode`\^^d7=13%
+\catcode`\^^d8=13\catcode`\^^d9=13\catcode`\^^da=13\catcode`\^^db=13%
+\catcode`\^^dc=13\catcode`\^^dd=13\catcode`\^^de=13\catcode`\^^df=13%
+\catcode`\^^e0=13\catcode`\^^e1=13\catcode`\^^e2=13\catcode`\^^e3=13%
+\catcode`\^^e4=13\catcode`\^^e5=13\catcode`\^^e6=13\catcode`\^^e7=13%
+\catcode`\^^e8=13\catcode`\^^e9=13\catcode`\^^ea=13\catcode`\^^eb=13%
+\catcode`\^^ec=13\catcode`\^^ed=13\catcode`\^^ee=13\catcode`\^^ef=13%
+\catcode`\^^f0=13\catcode`\^^f1=13\catcode`\^^f2=13\catcode`\^^f3=13%
+\catcode`\^^f4=13\catcode`\^^f5=13\catcode`\^^f6=13\catcode`\^^f7=13%
+\catcode`\^^f8=13\catcode`\^^f9=13\catcode`\^^fa=13\catcode`\^^fb=13%
+\catcode`\^^fc=13\catcode`\^^fd=13\catcode`\^^fe=13\catcode`\^^ff=13%
+}
+
+\begingroup
+\v:activate%
+%
+\gdef\v:iso{%
+\v:normalize%
+\v:activate%
+\let^^00=\ctl:at%
+\let^^01=\ctl:a%
+\let^^02=\ctl:b%
+\let^^03=\ctl:c%
+\let^^04=\ctl:d%
+\let^^05=\ctl:e%
+\let^^06=\ctl:f%
+\let^^07=\ctl:g%
+\let^^08=\v:BS%
+\let^^09=\v:HT%
+\let^^0a=\v:LF%
+\let^^0b=\v:VT%
+\let^^0c=\v:FF%
+\let^^0d=\v:CR%
+\let^^0e=\ctl:n%
+\let^^0f=\ctl:o%
+\let^^10=\ctl:p%
+\let^^11=\ctl:q%
+\let^^12=\ctl:r%
+\let^^13=\ctl:s%
+\let^^14=\ctl:t%
+\let^^15=\ctl:u%
+\let^^16=\ctl:v%
+\let^^17=\ctl:w%
+\let^^18=\ctl:x%
+\let^^19=\ctl:y%
+\let^^1a=\ctl:z%
+\let^^1b=\ctl:aa%
+\let^^1c=\ctl:bb%
+\let^^1d=\ctl:cc%
+\let^^1e=\ctl:dd%
+\let^^1f=\ctl:ee%
+\let^^20=\:sp%
+\let^^5f=\:us%
+\let^^60=\:gr%
+\let^^7f=\:Delta%
+\let^^80=\bar:LR%
+\let^^81=\bar:UD%
+\let^^82=\bar:UR%
+\let^^83=\bar:UL%
+\let^^84=\bar:DL%
+\let^^85=\bar:DR%
+\let^^86=\bar:UDR%
+\let^^87=\bar:ULR%
+\let^^88=\bar:UDL%
+\let^^89=\bar:DLR%
+\let^^8a=\bar:UDLR%
+\let^^8b=\box:light%
+\let^^8c=\box:medium%
+\let^^8d=\box:dark%
+\let^^8e=\:dotlessi%
+\let^^8f=\:doubleunderscore%
+\let^^90=\bar:LLRR%
+\let^^91=\bar:UUDD%
+\let^^92=\bar:UURR%
+\let^^93=\bar:UULL%
+\let^^94=\bar:DDLL%
+\let^^95=\bar:DDRR%
+\let^^96=\bar:UUDDRR%
+\let^^97=\bar:UULLRR%
+\let^^98=\bar:UUDDLL%
+\let^^99=\bar:DDLLRR%
+\let^^9a=\bar:UUDDLLRR%
+\let^^9b=\box:halfhigh%
+\let^^9c=\box:halflow%
+\let^^9d=\box:full%
+\let^^9e=\box:small%
+\let^^9f=\:florin%
+\let^^a0=\:fixblank%
+\let^^a1=\:invertedexclamationmark%
+\let^^a2=\:cent%
+\let^^a3=\:pound%
+\let^^a4=\:currency%
+\let^^a5=\:Yen%
+\let^^a6=\:brokenvbar%
+\let^^a7=\:paragraph%
+\let^^a8=\:umlaut%
+\let^^a9=\:copyright%
+\let^^aa=\:umera%
+\let^^ab=\:frenchleftquotes%
+\let^^ac=\:not%
+\let^^ad=\:syllablehyphen%
+\let^^ae=\:registered%
+\let^^af=\:macron%
+\let^^b0=\:degree%
+\let^^b1=\:plusminus%
+\let^^b2=\:supertwo%
+\let^^b3=\:superthree%
+\let^^b4=\:acute%
+\let^^b5=\:mu%
+\let^^b6=\:paramark%
+\let^^b7=\:middledot%
+\let^^b8=\:cedilla%
+\let^^b9=\:superone%
+\let^^ba=\:umero%
+\let^^bb=\:frenchrightquotes%
+\let^^bc=\:onefourth%
+\let^^bd=\:onehalf%
+\let^^be=\:threefourth%
+\let^^bf=\:invertedquestionmark%
+\let^^c0=\gra:A%
+\let^^c1=\acu:A%
+\let^^c2=\cir:A%
+\let^^c3=\til:A%
+\let^^c4=\uml:A%
+\let^^c5=\ang:A%
+\let^^c6=\lig:AE%
+\let^^c7=\ced:C%
+\let^^c8=\gra:E%
+\let^^c9=\acu:E%
+\let^^ca=\cir:E%
+\let^^cb=\uml:E%
+\let^^cc=\gra:I%
+\let^^cd=\acu:I%
+\let^^ce=\cir:I%
+\let^^cf=\uml:I%
+\let^^d0=\:Eth%
+\let^^d1=\til:N%
+\let^^d2=\gra:O%
+\let^^d3=\acu:O%
+\let^^d4=\cir:O%
+\let^^d5=\til:O%
+\let^^d6=\uml:O%
+\let^^d7=\:times%
+\let^^d8=\dia:O%
+\let^^d9=\gra:U%
+\let^^da=\acu:U%
+\let^^db=\cir:U%
+\let^^dc=\uml:U%
+\let^^dd=\acu:Y%
+\let^^de=\:Thorn%
+\let^^df=\:eszet%
+\let^^e0=\gra:a%
+\let^^e1=\acu:a%
+\let^^e2=\cir:a%
+\let^^e3=\til:a%
+\let^^e4=\uml:a%
+\let^^e5=\ang:a%
+\let^^e6=\lig:ae%
+\let^^e7=\ced:c%
+\let^^e8=\gra:e%
+\let^^e9=\acu:e%
+\let^^ea=\cir:e%
+\let^^eb=\uml:e%
+\let^^ec=\gra:i%
+\let^^ed=\acu:i%
+\let^^ee=\cir:i%
+\let^^ef=\uml:i%
+\let^^f0=\:eth%
+\let^^f1=\til:n%
+\let^^f2=\gra:o%
+\let^^f3=\acu:o%
+\let^^f4=\cir:o%
+\let^^f5=\til:o%
+\let^^f6=\uml:o%
+\let^^f7=\:div%
+\let^^f8=\dia:o%
+\let^^f9=\gra:u%
+\let^^fa=\acu:u%
+\let^^fb=\cir:u%
+\let^^fc=\uml:u%
+\let^^fd=\acu:y%
+\let^^fe=\:thorn%
+\let^^ff=\uml:y%
+}%
+%
+\gdef\v::iso{%
+\let^^08=\ctl:h%
+\let^^09=\ctl:i%
+\let^^0a=\ctl:j%
+\let^^0b=\ctl:k%
+\let^^0c=\ctl:l%
+\let^^0d=\ctl:m%
+}%
+%
+\gdef\v:ibm{%
+\v:normalize%
+\v:activate%
+\let^^00=\:null%
+\let^^01=\:smile%
+\let^^02=\:invertedsmile%
+\let^^03=\:herz%
+\let^^04=\:karo%
+\let^^05=\:kreuz%
+\let^^06=\:pik%
+\let^^07=\:bigdot%
+\let^^08=\v:BS%
+\let^^09=\v:HT%
+\let^^0a=\v:LF%
+\let^^0b=\v:VT%
+\let^^0c=\v:FF%
+\let^^0d=\v:CR%
+\let^^0e=\:twonote%
+\let^^0f=\:star%
+\let^^10=\:trirt%
+\let^^11=\:trilf%
+\let^^12=\:arrupdn%
+\let^^13=\:doubleexclamationmark%
+\let^^14=\:paramark%
+\let^^15=\:paragraph%
+\let^^16=\:bigcursor%
+\let^^17=\:updnbar%
+\let^^18=\:arrup%
+\let^^19=\:arrdn%
+\let^^1a=\:arrrt%
+\let^^1b=\:arrlf%
+\let^^1c=\:mirrorednot%
+\let^^1d=\:arrlfrt%
+\let^^1e=\:triup%
+\let^^1f=\:tridn%
+\let^^20=\:sp%
+\let^^5f=\:us%
+\let^^60=\:gr%
+\let^^7f=\:Delta%
+\let^^80=\ced:C%
+\let^^81=\uml:u%
+\let^^82=\acu:e%
+\let^^83=\cir:a%
+\let^^84=\uml:a%
+\let^^85=\gra:a%
+\let^^86=\ang:a%
+\let^^87=\ced:c%
+\let^^88=\cir:e%
+\let^^89=\uml:e%
+\let^^8a=\gra:e%
+\let^^8b=\uml:i%
+\let^^8c=\cir:i%
+\let^^8d=\gra:i%
+\let^^8e=\uml:A%
+\let^^8f=\ang:A%
+\let^^90=\acu:E%
+\let^^91=\lig:ae%
+\let^^92=\lig:AE%
+\let^^93=\cir:o%
+\let^^94=\uml:o%
+\let^^95=\gra:o%
+\let^^96=\cir:u%
+\let^^97=\gra:u%
+\let^^98=\uml:y%
+\let^^99=\uml:O%
+\let^^9a=\uml:U%
+\let^^9b=\dia:o%
+\let^^9c=\:pound%
+\let^^9d=\dia:O%
+\let^^9e=\:times%
+\let^^9f=\:florin%
+\let^^a0=\acu:a%
+\let^^a1=\acu:i%
+\let^^a2=\acu:o%
+\let^^a3=\acu:u%
+\let^^a4=\til:n%
+\let^^a5=\til:N%
+\let^^a6=\:umera%
+\let^^a7=\:umero%
+\let^^a8=\:invertedquestionmark%
+\let^^a9=\:registered%
+\let^^aa=\:not%
+\let^^ab=\:onehalf%
+\let^^ac=\:onefourth%
+\let^^ad=\:invertedexclamationmark%
+\let^^ae=\:frenchleftquotes%
+\let^^af=\:frenchrightquotes%
+\let^^b0=\box:light%
+\let^^b1=\box:medium%
+\let^^b2=\box:dark%
+\let^^b3=\bar:UD%
+\let^^b4=\bar:UDL%
+\let^^b5=\acu:A%
+\let^^b6=\cir:A%
+\let^^b7=\gra:A%
+\let^^b8=\:copyright%
+\let^^b9=\bar:UUDDLL%
+\let^^ba=\bar:UUDD%
+\let^^bb=\bar:DDLL%
+\let^^bc=\bar:UULL%
+\let^^bd=\:cent%
+\let^^be=\:Yen%
+\let^^bf=\bar:DL%
+\let^^c0=\bar:UR%
+\let^^c1=\bar:ULR%
+\let^^c2=\bar:DLR%
+\let^^c3=\bar:UDR%
+\let^^c4=\bar:LR%
+\let^^c5=\bar:UDLR%
+\let^^c6=\til:a%
+\let^^c7=\til:A%
+\let^^c8=\bar:UURR%
+\let^^c9=\bar:DDRR%
+\let^^ca=\bar:UULLRR%
+\let^^cb=\bar:DDLLRR%
+\let^^cc=\bar:UUDDRR%
+\let^^cd=\bar:LLRR%
+\let^^ce=\bar:UUDDLLRR%
+\let^^cf=\:currency%
+\let^^d0=\:eth%
+\let^^d1=\:Eth%
+\let^^d2=\cir:E%
+\let^^d3=\uml:E%
+\let^^d4=\gra:E%
+\let^^d5=\:dotlessi%
+\let^^d6=\acu:I%
+\let^^d7=\cir:I%
+\let^^d8=\uml:I%
+\let^^d9=\bar:UL%
+\let^^da=\bar:DR%
+\let^^db=\box:full%
+\let^^dc=\box:halflow%
+\let^^dd=\:brokenvbar%
+\let^^de=\gra:I%
+\let^^df=\box:halfhigh%
+\let^^e0=\acu:O%
+\let^^e1=\:eszet%
+\let^^e2=\cir:O%
+\let^^e3=\gra:O%
+\let^^e4=\til:o%
+\let^^e5=\til:O%
+\let^^e6=\:mu%
+\let^^e7=\:thorn%
+\let^^e8=\:Thorn%
+\let^^e9=\acu:U%
+\let^^ea=\cir:U%
+\let^^eb=\gra:U%
+\let^^ec=\acu:y%
+\let^^ed=\acu:Y%
+\let^^ee=\:macron%
+\let^^ef=\:acute%
+\let^^f0=\:syllablehyphen%
+\let^^f1=\:plusminus%
+\let^^f2=\:doubleunderscore%
+\let^^f3=\:threefourth%
+\let^^f4=\:paramark%
+\let^^f5=\:paragraph%
+\let^^f6=\:div%
+\let^^f7=\:cedilla%
+\let^^f8=\:degree%
+\let^^f9=\:umlaut%
+\let^^fa=\:middledot%
+\let^^fb=\:superone%
+\let^^fc=\:superthree%
+\let^^fd=\:supertwo%
+\let^^fe=\box:small%
+\let^^ff=\:fixblank%
+}%
+%
+\gdef\v::ibm{%
+\let^^08=\:invertedbigdot%
+\let^^09=\:circ%
+\let^^0a=\:invertedcirc%
+\let^^0b=\:male%
+\let^^0c=\:female%
+\let^^0d=\:onenote%
+}%
+%
+\gdef\v:pc{%
+\v:normalize%
+\v:activate%
+\let^^00=\:null%
+\let^^01=\:smile%
+\let^^02=\:invertedsmile%
+\let^^03=\:herz%
+\let^^04=\:karo%
+\let^^05=\:kreuz%
+\let^^06=\:pik%
+\let^^07=\:bigdot%
+\let^^08=\v:BS%
+\let^^09=\v:HT%
+\let^^0a=\v:LF%
+\let^^0b=\v:VT%
+\let^^0c=\v:FF%
+\let^^0d=\v:CR%
+\let^^0e=\:twonote%
+\let^^0f=\:star%
+\let^^10=\:trirt%
+\let^^11=\:trilf%
+\let^^12=\:arrupdn%
+\let^^13=\:doubleexclamationmark%
+\let^^14=\:paramark%
+\let^^15=\:paragraph%
+\let^^16=\:bigcursor%
+\let^^17=\:updnbar%
+\let^^18=\:arrup%
+\let^^19=\:arrdn%
+\let^^1a=\:arrrt%
+\let^^1b=\:arrlf%
+\let^^1c=\:mirrorednot%
+\let^^1d=\:arrlfrt%
+\let^^1e=\:triup%
+\let^^1f=\:tridn%
+\let^^20=\:sp%
+\let^^5f=\:us%
+\let^^60=\:gr%
+\let^^7f=\:Delta%
+\let^^80=\ced:C%
+\let^^81=\uml:u%
+\let^^82=\acu:e%
+\let^^83=\cir:a%
+\let^^84=\uml:a%
+\let^^85=\gra:a%
+\let^^86=\ang:a%
+\let^^87=\ced:c%
+\let^^88=\cir:e%
+\let^^89=\uml:e%
+\let^^8a=\gra:e%
+\let^^8b=\uml:i%
+\let^^8c=\cir:i%
+\let^^8d=\gra:i%
+\let^^8e=\uml:A%
+\let^^8f=\ang:A%
+\let^^90=\acu:E%
+\let^^91=\lig:ae%
+\let^^92=\lig:AE%
+\let^^93=\cir:o%
+\let^^94=\uml:o%
+\let^^95=\gra:o%
+\let^^96=\cir:u%
+\let^^97=\gra:u%
+\let^^98=\uml:y%
+\let^^99=\uml:O%
+\let^^9a=\uml:U%
+\let^^9b=\:cent%%%
+\let^^9c=\:pound%
+\let^^9d=\:Yen%%%
+\let^^9e=\:Pesetas%%%
+\let^^9f=\:florin%
+\let^^a0=\acu:a%
+\let^^a1=\acu:i%
+\let^^a2=\acu:o%
+\let^^a3=\acu:u%
+\let^^a4=\til:n%
+\let^^a5=\til:N%
+\let^^a6=\:umera%
+\let^^a7=\:umero%
+\let^^a8=\:invertedquestionmark%
+\let^^a9=\:invertednot%%%
+\let^^aa=\:not%
+\let^^ab=\:onehalf%
+\let^^ac=\:onefourth%
+\let^^ad=\:invertedexclamationmark%
+\let^^ae=\:frenchleftquotes%
+\let^^af=\:frenchrightquotes%
+\let^^b0=\box:light%
+\let^^b1=\box:medium%
+\let^^b2=\box:dark%
+\let^^b3=\bar:UD%
+\let^^b4=\bar:UDL%
+\let^^b5=\bar:UDLL%%%
+\let^^b6=\bar:UUDDL%%%
+\let^^b7=\bar:DDL%%%
+\let^^b8=\bar:DLL%%%
+\let^^b9=\bar:UUDDLL%
+\let^^ba=\bar:UUDD%
+\let^^bb=\bar:DDLL%
+\let^^bc=\bar:UULL%
+\let^^bd=\bar:UUL%%%
+\let^^be=\bar:ULL%%%
+\let^^bf=\bar:DL%
+\let^^c0=\bar:UR%
+\let^^c1=\bar:ULR%
+\let^^c2=\bar:DLR%
+\let^^c3=\bar:UDR%
+\let^^c4=\bar:LR%
+\let^^c5=\bar:UDLR%
+\let^^c6=\bar:UDRR%%%
+\let^^c7=\bar:UUDDR%%%
+\let^^c8=\bar:UURR%
+\let^^c9=\bar:DDRR%
+\let^^ca=\bar:UULLRR%
+\let^^cb=\bar:DDLLRR%
+\let^^cc=\bar:UUDDRR%
+\let^^cd=\bar:LLRR%
+\let^^ce=\bar:UUDDLLRR%
+\let^^cf=\bar:ULLRR%%%
+\let^^d0=\bar:UULR%%%
+\let^^d1=\bar:DLLRR%%%
+\let^^d2=\bar:DDLR%%%
+\let^^d3=\bar:UUR%%%
+\let^^d4=\bar:URR%%%
+\let^^d5=\bar:DRR%%%
+\let^^d6=\bar:DDR%%%
+\let^^d7=\bar:UUDDLR%%%
+\let^^d8=\bar:UDLLRR%%%
+\let^^d9=\bar:UL%
+\let^^da=\bar:DR%
+\let^^db=\box:full%
+\let^^dc=\box:halflow%
+\let^^dd=\box:halfleft%%%
+\let^^de=\box:halfright%%%
+\let^^df=\box:halfhigh%
+\let^^e0=\:alpha%%%
+\let^^e1=\:eszet%
+\let^^e2=\:Gamma%%%
+\let^^e3=\:Pi%%%
+\let^^e4=\:Sigma%%%
+\let^^e5=\:sigma%%%
+\let^^e6=\:mu%
+\let^^e7=\:tau%%%
+\let^^e8=\:Phi%%%
+\let^^e9=\:Theta%%%
+\let^^ea=\:Omega%%%
+\let^^eb=\:delta%%%
+\let^^ec=\:infinity%%%
+\let^^ed=\:diameter%%%
+\let^^ee=\:elementof%%%
+\let^^ef=\:cut%%%
+\let^^f0=\:identity%%%
+\let^^f1=\:plusminus%
+\let^^f2=\:ge%%%
+\let^^f3=\:le%%%
+\let^^f4=\:intupper%%%
+\let^^f5=\:intlower%%%
+\let^^f6=\:div%
+\let^^f7=\:approx%%%
+\let^^f8=\:degree%
+\let^^f9=\:bigmiddledot%%%
+\let^^fa=\:middledot%
+\let^^fb=\:root%%%
+\let^^fc=\:supern%%%
+\let^^fd=\:supertwo%
+\let^^fe=\box:small%
+\let^^ff=\:fixblank%
+}%
+%
+\gdef\v::pc{%
+\let^^08=\:invertedbigdot%
+\let^^09=\:circ%
+\let^^0a=\:invertedcirc%
+\let^^0b=\:male%
+\let^^0c=\:female%
+\let^^0d=\:onenote%
+}%
+%
+\gdef\v:test{%
+\v:normalize%
+\v:activate%
+\let^^00=\ctl:at%
+\let^^01=\ctl:a%
+\let^^02=\ctl:b%
+\let^^03=\ctl:c%
+\let^^04=\ctl:d%
+\let^^05=\ctl:e%
+\let^^06=\ctl:f%
+\let^^07=\ctl:g%
+\let^^08=\v:BS%
+\let^^09=\v:HT%
+\let^^0a=\v:LF%
+\let^^0b=\v:VT%
+\let^^0c=\v:FF%
+\let^^0d=\v:CR%
+\let^^0e=\ctl:n%
+\let^^0f=\ctl:o%
+\let^^10=\ctl:p%
+\let^^11=\ctl:q%
+\let^^12=\ctl:r%
+\let^^13=\ctl:s%
+\let^^14=\ctl:t%
+\let^^15=\ctl:u%
+\let^^16=\ctl:v%
+\let^^17=\ctl:w%
+\let^^18=\ctl:x%
+\let^^19=\ctl:y%
+\let^^1a=\ctl:z%
+\let^^1b=\ctl:aa%
+\let^^1c=\ctl:bb%
+\let^^1d=\ctl:cc%
+\let^^1e=\ctl:dd%
+\let^^1f=\ctl:ee%
+\let^^20=\:sp%
+\let^^5f=\:us%
+\let^^60=\:gr%
+\let^^7f=\:Delta%
+\let^^80=\ctlx:at%
+\let^^81=\ctlx:a%
+\let^^82=\ctlx:b%
+\let^^83=\ctlx:c%
+\let^^84=\ctlx:d%
+\let^^85=\ctlx:e%
+\let^^86=\ctlx:f%
+\let^^87=\ctlx:g%
+\let^^88=\ctlx:h%
+\let^^89=\ctlx:i%
+\let^^8a=\ctlx:j%
+\let^^8b=\ctlx:k%
+\let^^8c=\ctlx:l%
+\let^^8d=\ctlx:m%
+\let^^8e=\ctlx:n%
+\let^^8f=\ctlx:o%
+\let^^90=\ctlx:p%
+\let^^91=\ctlx:q%
+\let^^92=\ctlx:r%
+\let^^93=\ctlx:s%
+\let^^94=\ctlx:t%
+\let^^95=\ctlx:u%
+\let^^96=\ctlx:v%
+\let^^97=\ctlx:w%
+\let^^98=\ctlx:x%
+\let^^99=\ctlx:y%
+\let^^9a=\ctlx:z%
+\let^^9b=\ctlx:aa%
+\let^^9c=\ctlx:bb%
+\let^^9d=\ctlx:cc%
+\let^^9e=\ctlx:dd%
+\let^^9f=\ctlx:ee%
+\let^^a0=\:null%
+\let^^a1=\:smile%
+\let^^a2=\:invertedsmile%
+\let^^a3=\:herz%
+\let^^a4=\:karo%
+\let^^a5=\:kreuz%
+\let^^a6=\:pik%
+\let^^a7=\:bigdot%
+\let^^a8=\:invertedbigdot%
+\let^^a9=\:circ%
+\let^^aa=\:invertedcirc%
+\let^^ab=\:male%
+\let^^ac=\:female%
+\let^^ad=\:onenote%
+\let^^ae=\:twonote%
+\let^^af=\:star%
+\let^^b0=\:trirt%
+\let^^b1=\:trilf%
+\let^^b2=\:arrupdn%
+\let^^b3=\:doubleexclamationmark%
+\let^^b4=\:paramark%
+\let^^b5=\:paragraph%
+\let^^b6=\:bigcursor%
+\let^^b7=\:updnbar%
+\let^^b8=\:arrup%
+\let^^b9=\:arrdn%
+\let^^ba=\:arrrt%
+\let^^bb=\:arrlf%
+\let^^bc=\:mirrorednot%
+\let^^bd=\:arrlfrt%
+\let^^be=\:triup%
+\let^^bf=\:tridn%
+\let^^c0=\ctl:at%
+\let^^c1=\ctl:a%
+\let^^c2=\ctl:b%
+\let^^c3=\ctl:c%
+\let^^c4=\ctl:d%
+\let^^c5=\ctl:e%
+\let^^c6=\ctl:f%
+\let^^c7=\ctl:g%
+\let^^c8=\ctl:h%
+\let^^c9=\ctl:i%
+\let^^ca=\ctl:j%
+\let^^cb=\ctl:k%
+\let^^cc=\ctl:l%
+\let^^cd=\ctl:m%
+\let^^ce=\ctl:n%
+\let^^cf=\ctl:o%
+\let^^d0=\ctl:p%
+\let^^d1=\ctl:q%
+\let^^d2=\ctl:r%
+\let^^d3=\ctl:s%
+\let^^d4=\ctl:t%
+\let^^d5=\ctl:u%
+\let^^d6=\ctl:v%
+\let^^d7=\ctl:w%
+\let^^d8=\ctl:x%
+\let^^d9=\ctl:y%
+\let^^da=\ctl:z%
+\let^^db=\ctl:aa%
+\let^^dc=\ctl:bb%
+\let^^dd=\ctl:cc%
+\let^^de=\ctl:dd%
+\let^^df=\ctl:ee%
+\let^^e0=\ctlx:at%
+\let^^e1=\ctlx:a%
+\let^^e2=\ctlx:b%
+\let^^e3=\ctlx:c%
+\let^^e4=\ctlx:d%
+\let^^e5=\ctlx:e%
+\let^^e6=\ctlx:f%
+\let^^e7=\ctlx:g%
+\let^^e8=\ctlx:h%
+\let^^e9=\ctlx:i%
+\let^^ea=\ctlx:j%
+\let^^eb=\ctlx:k%
+\let^^ec=\ctlx:l%
+\let^^ed=\ctlx:m%
+\let^^ee=\ctlx:n%
+\let^^ef=\ctlx:o%
+\let^^f0=\ctlx:p%
+\let^^f1=\ctlx:q%
+\let^^f2=\ctlx:r%
+\let^^f3=\ctlx:s%
+\let^^f4=\ctlx:t%
+\let^^f5=\ctlx:u%
+\let^^f6=\ctlx:v%
+\let^^f7=\ctlx:w%
+\let^^f8=\ctlx:x%
+\let^^f9=\ctlx:y%
+\let^^fa=\ctlx:z%
+\let^^fb=\ctlx:aa%
+\let^^fc=\ctlx:bb%
+\let^^fd=\ctlx:cc%
+\let^^fe=\ctlx:dd%
+\let^^ff=\ctlx:ee%
+}%
+%
+\gdef\v::test{%
+\let^^08=\ctl:h%
+\let^^09=\ctl:i%
+\let^^0a=\ctl:j%
+\let^^0b=\ctl:k%
+\let^^0c=\ctl:l%
+\let^^0d=\ctl:m%
+}%
+%
+\endgroup% all active
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% Dritter Teil: Definition der Makros %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Hilfsmakros %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begingroup % active < >
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Zuerst alte Bedeutung von < und > sichern
+\let\lt=<
+\let\gt=>
+
+% Dann < und > aktivieren
+\catcode`\>=\active
+\catcode`\<=\active
+
+% Dann sicherstellen, da"s es immer eine globale globale Definition
+% gibt, damit nicht w"ahrend der verz"ogerten Ausf"uhrung eines \write
+% eine undefinierte Steuersequenz auftritt
+\ifx<\:undefined\global\let<=\lt\fi
+\ifx>\:undefined\global\let>=\gt\fi
+
+% Box zum Sammeln der Zeichen einer Zeile
+\newbox\v:box
+
+% Z"ahler f"ur die Zeilennummern
+\newcount\v:line
+
+% Speicher f"ur die anf"angliche \everypar-Setzung
+\newtoks\v:toks
+
+% Der senkrechte Stich am Anfang und Ende einer Zeile bei ...box
+\gdef\v:bar{\up:{-0.6ex}{\vrule height\H: depth0ex}}
+
+% Anfang oder Wiederaufnahme einer Zeile
+\gdef\v:bol{\leavevmode\setbox\v:box=\hbox\bgroup}
+
+% Suspendierung oder Ende einer Zeile
+\gdef\v:eol{\leavevmode\egroup\ht\v:box\h:\dp\v:box\d:\box\v:box}
+
+% Anfang einer Boxzeile
+\gdef\v:boxbol{\leavevmode\v:bar\space\v:bol}
+
+% Ende einer Boxzeile
+\gdef\v:boxeol{\v:eol\hfill\v:bar}
+
+% Setzen der Zeilennummer
+\gdef\v:cnt{%
+\global\advance\v:line by1%
+\hbox to3em{\the\v:line\hfil\quad}%
+}
+
+% Voreinstellen des Zeichensatzes
+\global\let\v:cset\v:iso
+\global\let\v:ctlcset\v::iso
+
+% Aktion beim Backspacezeichen
+\gdef\v:BS{%
+\leavevmode\egroup% end collecting of current box
+\dimen0\wd\v:box% get width of current box
+\advance\dimen0by-\w:% one space back
+\wd\v:box\dimen0% set box width of current box
+\setbox0=\box\v:box% copy box
+\setbox\v:box=\hbox\bgroup\box0% restart box
+}
+
+% Aktion beim Tabulatorzeichen
+\gdef\v:HT{%
+\leavevmode\egroup% end collecting of current box
+\dimen0\wd\v:box% get width of current box
+\divide\dimen0by8% integer division by tab distance
+\divide\dimen0by\w:% integer division by character width
+\multiply\dimen0by\w:% integer multiplication by character width
+\advance\dimen0by\w:% advance to next position
+\multiply\dimen0by8% integer multiplication by tab distance
+\wd\v:box\dimen0% set box width of current box
+\box\v:box% type box
+\setbox\v:box=\hbox\bgroup% start next box
+}
+
+% Aktion bei den Zeichen Linefeed, Verticaltab und Formfeed
+\gdef\v:LF{\v:CR}
+\gdef\v:VT{\v:CR\v:CR}
+\gdef\v:FF{\v:CR\v:CR\v:CR}%%%{\v:eol\par\vskip0ptplus1fil\break}
+
+% Umschalten auf Verbatim
+\gdef\v:verb{%
+\v:cset%
+\frenchspacing\tt\baselineskip=\H:\parindent=0pt\parskip=0pt%
+\setbox0=\hbox{X}%
+\global\w:=\wd0%
+\global\h:=\ht0%
+\setbox0=\hbox{g}%
+\global\d:=\dp0%
+\global\x:=\w:\global\divide\x: by9%
+\global\z:=\h:\global\advance\z: by\d:%
+\global\y:=\H:\global\divide\y: by9%
+}
+
+% Umschalten auf Meta-Verbatim
+\gdef\v:meta{%
+\v:metaopts%
+\v:verb%
+\catcode`\\=0% \ wieder einschalten
+\catcode`\{=1% { wieder einschalten
+\catcode`\}=2% } wieder einschalten
+\catcode`\<=\active% < einschalten
+\catcode`\>=\active% > einschalten
+\let<=\v:metasuspend%
+\let>=\v:metaresume%
+\chardef\\=`\\% \\ gibt \ (nur im meta-Modus)
+\chardef\{=`\{% \{ gibt { (nur im meta-Modus)
+\chardef\}=`\}% \} gibt } (nur im meta-Modus)
+\chardef\>=`\>% \> gibt > (nur im meta-Modus)
+\chardef\<=`\<% \< gibt < (nur im meta-Modus)
+% Ersatz f"ur Zeichen, deren Catcode sonst unerreichbar wird,
+% die aber vielleicht gebraucht werden
+\let\dollar=$% math shift
+\def\ddollar{$$}% display math shift
+\let\tab=&% alignment tab
+\let\hash=##% parameter
+%let\sp=^% bereits in PlainTeX als \sp
+%let\sb=_% bereits in PlainTeX als \sb
+\let\um="% active "
+\let\tie=~% active ~
+}
+
+% Suspendierung von Meta-Verbatim
+\gdef\v:metasuspend{%
+\relax%
+\ifmmode%
+\def\next{\char`\<}%
+\else%
+\def\next{%
+\v:eol%
+\endgroup%
+\bgroup\it%
+\def\v:CR{\par}%
+\catcode`\>=\active%
+\let>=\v:metaresume%
+}%
+\fi%
+\next%
+}
+
+% Wiederaufnahme von Meta-Verbatim
+\gdef\v:metaresume{%
+\relax%
+\ifmmode%
+\def\next{\char`\>}%
+\else%
+\def\next{%
+\/\egroup%
+\begingroup%
+\v:meta%
+\v:bol%
+}%
+\fi%
+\next%
+}
+
+% Schalter für Abstand um Umgebung
+\newif\ifv:abstand
+\global\let\ifv:abstand\ifv:abstand
+\global\let\v:abstandtrue\v:abstandtrue
+\global\let\v:abstandfalse\v:abstandfalse
+
+% trivlist-Ersatz bei Einf"ugung ohne Abstand zur Umgebung
+\gdef\v:trivlist{%
+\topsep-\parskip% Abstand ist: topsep+parskip+(Absatz?partopsep:0)
+\partopsep\parskip% Also bleibt hier (Absatz?parskip:0) "ubrig
+\trivlist%
+}
+\global\let\endv:trivlist=\endtrivlist
+
+% Begin einer Verbtext-Umgebung (vgl. LaTeX-verbatim-Umgebung)
+\gdef\v:benv:{%
+\ifv:abstand\begin{trivlist}\else\begin{v:trivlist}\fi%
+\item[]%
+\if@minipage\else\vskip\parskip\fi%
+\leftskip\@totalleftmargin%
+\rightskip\z@%
+\parindent\z@%
+\parfillskip\@flushglue%
+\parskip\z@%
+\@@par%
+\def\par{\@@par\penalty\interlinepenalty}%
+}
+
+\gdef\v:eenv:{\ifv:abstand\end{trivlist}\else\end{v:trivlist}\fi}
+
+% Kleinbuchstaben- und Gro"sbuchstaben-Umgebungen
+\gdef\v:benv{\v:abstandfalse\v:benv:}
+\gdef\v:eenv{\v:abstandfalse\v:eenv:}
+\gdef\v:Benv{\v:abstandtrue\v:benv:}
+\gdef\v:Eenv{\v:abstandtrue\v:eenv:}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\endgroup% active < >
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Einstellen des Zeichensatzes %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\verbcharset#1{%
+\ifnum#1=437\let\v:cset\v:pc\let\v:ctlcset\v::pc\else%
+\ifnum#1=850\let\v:cset\v:ibm\let\v:ctlcset\v::ibm\else%
+\ifnum#1=88591\let\v:cset\v:iso\let\v:ctlcset\v::iso\else%
+\ifnum#1=4101962\let\v:cset\v:test\let\v:ctlcset\v::test\else%
+\@latexerr{Unknown verbatim character set}\@eha%
+\fi\fi\fi\fi%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Verbatim-Zeichenfolge-Makro %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\v:chars#1{%
+\def\next:##1#1{##1\endgroup}%
+\next:%
+}
+
+\gdef\verbchars{%
+\begingroup%
+\v:verb%
+\v:ctlcset%
+\@ifstar{\v:vistrue\v:chars}{\v:visfalse\v:chars}%
+}
+
+\gdef\v:Chars#1{%
+\def\next:##1#1{##1\endgroup{\tt\ }\ignorespaces}%
+\next:%
+}
+
+\gdef\Verbchars{%
+\ifhmode\unskip{\tt\ }\fi%
+\begingroup%
+\v:verb%
+\v:ctlcset%
+\@ifstar{\v:vistrue\v:Chars}{\v:visfalse\v:Chars}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Verbatim-Scan-Makros %
+% Ersetzung der verbatim-Umgebung vorbereiten %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begingroup
+\catcode`\|=0%
+\catcode`\<=1%
+\catcode`\>=2%
+|catcode`|\=12%
+|catcode`|{=12%
+|catcode`|}=12%
+|catcode`|^^M=13%
+|gdef|v:l:#1^^M#2\end{verblines}<#2|end<verblines>>%
+|gdef|v:ls:#1^^M#2\end{verblines*}<#2|end<verblines*>>%
+|gdef|v:ln:#1^^M#2\end{verblinesnum}<#2|end<verblinesnum>>%
+|gdef|v:lns:#1^^M#2\end{verblinesnum*}<#2|end<verblinesnum*>>%
+|gdef|v:lb:#1^^M#2\end{verblinesbox}<#2|end<verblinesbox>>%
+|gdef|v:lbs:#1^^M#2\end{verblinesbox*}<#2|end<verblinesbox*>>%
+|gdef|v:env:l:#1^^M#2\end{Verblines}<#2|end<Verblines>>%
+|gdef|v:env:ls:#1^^M#2\end{Verblines*}<#2|end<Verblines*>>%
+|gdef|v:env:ln:#1^^M#2\end{Verblinesnum}<#2|end<Verblinesnum>>%
+|gdef|v:env:lns:#1^^M#2\end{Verblinesnum*}<#2|end<Verblinesnum*>>%
+|gdef|v:env:lb:#1^^M#2\end{Verblinesbox}<#2|end<Verblinesbox>>%
+|gdef|v:env:lbs:#1^^M#2\end{Verblinesbox*}<#2|end<Verblinesbox*>>%
+|gdef|v:ignrest#1^^M<>%
+|gdef|v:atim:#1^^M#2\end{verbatim}<#2|end<verbatim>>% verbatim-Ersatz
+|gdef|v:atims:#1^^M#2\end{verbatim*}<#2|end<verbatim*>>% verbatim-Ersatz
+|endgroup
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begingroup
+\catcode`\*=11% * Tempor"ar als Buchstabe
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Verbatim-Umgebung ersetzen %
+% Diese Ersetzung wirkt lokal zur Gruppe %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\verbatimreplace{%
+\let\verbatim=\v:atim%
+\let\endverbatim=\endVerblines%
+\let\verbatim*=\v:atims%
+\let\endverbatim*=\endVerblines*%
+\let\verb=\verbchars%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Verbatim-Makros und -Umgebungen %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\v:inp#1{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\v:toks=\everypar%
+\everypar{\the\v:toks\everypar{\v:bol}\the\everypar}%
+\def\v:CR{\v:eol\par}%
+\v:verb%
+\input#1%
+\endgroup%
+\v:after%
+}
+
+\gdef\verbinput{%
+\v:benv%
+\let\v:after=\v:eenv%
+\@ifstar{\v:vistrue\v:inp}{\v:visfalse\v:inp}%
+}
+
+\gdef\Verbinput{%
+\v:Benv%
+\let\v:after=\v:Eenv%
+\@ifstar{\v:vistrue\v:inp}{\v:visfalse\v:inp}%
+}
+
+\gdef\v:l{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\v:toks=\everypar%
+\everypar{\the\v:toks\everypar{\v:bol}\the\everypar}%
+\def\v:CR{\v:eol\par}%
+\v:verb%
+}
+
+\gdef\verblines{%
+\v:benv%
+\v:visfalse%
+\v:l%
+\v:l:%
+}
+
+\gdef\verblines*{%
+\v:benv%
+\v:vistrue%
+\v:l%
+\v:ls:%
+}
+
+\gdef\Verblines{%
+\v:Benv%
+\v:visfalse%
+\v:l%
+\v:env:l:%
+}
+
+\gdef\Verblines*{%
+\v:Benv%
+\v:vistrue%
+\v:l%
+\v:env:ls:%
+}
+
+\gdef\v:atim{% verbatim-Ersatz
+\v:Benv%
+\v:visfalse%
+\v:l%
+\v:atim:%
+}
+
+\gdef\v:atims{% verbatim*-Ersatz
+\v:Benv%
+\v:vistrue%
+\v:l%
+\v:atims:%
+}
+
+\gdef\endverblines{%
+\par%
+\endgroup%
+\v:eenv%
+}
+
+\global\let\endverblines*=\endverblines
+
+\gdef\endVerblines{%
+\par%
+\endgroup%
+\v:Eenv%
+}
+
+\global\let\endVerblines*=\endVerblines
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\v:inpnum#1{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\v:toks=\everypar%
+\everypar{\the\v:toks\everypar{\v:cnt\v:bol}\the\everypar}%
+\global\v:line=0%
+\def\v:CR{\v:eol\par}%
+\v:verb%
+\input#1%
+\endgroup%
+\v:after%
+}
+
+\gdef\verbinputnum{%
+\v:benv%
+\let\v:after=\v:eenv%
+\@ifstar{\v:vistrue\v:inpnum}{\v:visfalse\v:inpnum}%
+}
+
+\gdef\Verbinputnum{%
+\v:Benv%
+\let\v:after=\v:Eenv%
+\@ifstar{\v:vistrue\v:inpnum}{\v:visfalse\v:inpnum}%
+}
+
+\gdef\v:ln{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\v:toks=\everypar%
+\everypar{\the\v:toks\everypar{\v:cnt\v:bol}\the\everypar}%
+\global\v:line=0%
+\def\v:CR{\v:eol\par}%
+\v:verb%
+}
+
+\gdef\verblinesnum{%
+\v:benv%
+\v:visfalse%
+\v:ln%
+\v:ln:%
+}
+
+\gdef\verblinesnum*{%
+\v:benv%
+\v:vistrue%
+\v:ln%
+\v:lns:%
+}
+
+\gdef\Verblinesnum{%
+\v:Benv
+\v:visfalse%
+\v:ln%
+\v:env:ln:%
+}
+
+\gdef\Verblinesnum*{%
+\v:Benv
+\v:vistrue%
+\v:ln%
+\v:env:lns:%
+}
+
+\global\let\endverblinesnum=\endverblines
+\global\let\endverblinesnum*=\endverblines
+\global\let\endVerblinesnum=\endVerblines
+\global\let\endVerblinesnum*=\endVerblines
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\v:inpbox#1{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\def\v:CR{\v:boxeol\par\v:boxbol}%
+\v:verb%
+\baselineskip0pt%
+\vbox{\hrule width\linewidth}%
+\offinterlineskip%
+\nobreak%
+\v:boxbol%
+\v:boxeol%
+\par%
+\nobreak%
+\v:boxbol%
+\input#1%
+\v:boxeol%
+\par%
+\nobreak%
+\vbox{\hrule width\linewidth}%
+\endgroup%
+\v:after%
+}
+
+\gdef\verbinputbox{%
+\v:benv%
+\let\v:after=\v:eenv%
+\@ifstar{\v:vistrue\v:inpbox}{\v:visfalse\v:inpbox}%
+}
+
+\gdef\Verbinputbox{%
+\v:Benv%
+\let\v:after=\v:Eenv%
+\@ifstar{\v:vistrue\v:inpbox}{\v:visfalse\v:inpbox}%
+}
+
+\gdef\v:lb{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\def\v:CR{\v:boxeol\par\v:boxbol}%
+\v:verb%
+\baselineskip0pt%
+\vbox{\hrule width\linewidth}%
+\offinterlineskip%
+\nobreak%
+\v:boxbol%
+\v:boxeol%
+\par%
+\nobreak%
+\v:boxbol%
+}
+
+\gdef\verblinesbox{%
+\v:benv%
+\v:visfalse%
+\v:lb%
+\v:lb:%
+}
+
+\gdef\verblinesbox*{%
+\v:benv%
+\v:vistrue%
+\v:lb%
+\v:lbs:%
+}
+
+\gdef\Verblinesbox{%
+\v:Benv%
+\v:visfalse%
+\v:lb%
+\v:env:lb:%
+}
+
+\gdef\Verblinesbox*{%
+\v:Benv%
+\v:vistrue%
+\v:lb%
+\v:env:lbs:%
+}
+
+\gdef\v:end:lb{%
+\v:boxeol%
+\par%
+\nobreak%
+\vbox{\hrule width\linewidth}%
+\endgroup%
+}
+
+\gdef\endverblinesbox{
+\v:end:lb%
+\v:eenv%
+}
+
+\global\let\endverblinesbox*=\endverblinesbox
+
+\gdef\endVerblinesbox{%
+\v:end:lb%
+\v:Eenv%
+}
+
+\global\let\endVerblinesbox*=\endVerblinesbox
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\v:m:inp#1{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\v:toks=\everypar%
+\everypar{\the\v:toks\everypar{\v:bol}\the\everypar}%
+\def\v:metaopts{\def\v:CR{\v:eol\par}}%
+\begingroup%
+\v:meta%
+\input#1%
+\endgroup%
+\endgroup%
+\v:after%
+}
+
+\gdef\metainput{%
+\v:benv%
+\let\v:after=\v:eenv%
+\@ifstar{\v:vistrue\v:m:inp}{\v:visfalse\v:m:inp}%
+}
+
+\gdef\Metainput{%
+\v:Benv%
+\let\v:after=\v:Eenv%
+\@ifstar{\v:vistrue\v:m:inp}{\v:visfalse\v:m:inp}%
+}
+
+\gdef\v:m:l{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\v:toks=\everypar%
+\everypar{\the\v:toks\everypar{\v:bol}\the\everypar}%
+\def\v:metaopts{\def\v:CR{\v:eol\par}}%
+\begingroup%
+\v:meta%
+}
+
+\gdef\metalines{%
+\v:benv%
+\v:visfalse%
+\v:m:l%
+\v:ignrest%
+}
+
+\gdef\metalines*{%
+\v:benv%
+\v:vistrue%
+\v:m:l%
+\v:ignrest%
+}
+
+\gdef\Metalines{%
+\v:Benv%
+\v:visfalse%
+\v:m:l%
+\v:ignrest%
+}
+
+\gdef\Metalines*{%
+\v:Benv%
+\v:vistrue%
+\v:m:l%
+\v:ignrest%
+}
+
+\gdef\endmetalines{%
+\par%
+\endgroup%
+\endgroup%
+\v:eenv%
+}
+
+\global\let\endmetalines*=\endmetalines
+
+\gdef\endMetalines{%
+\par%
+\endgroup%
+\endgroup%
+\v:Eenv%
+}
+
+\global\let\endMetalines*=\endMetalines
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\v:m:inpnum#1{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\v:toks=\everypar%
+\everypar{\the\v:toks\everypar{\v:cnt\v:bol}\the\everypar}%
+\global\v:line=0%
+\def\v:metaopts{\def\v:CR{\v:eol\par}}%
+\begingroup%
+\v:meta%
+\input#1%
+\endgroup%
+\endgroup%
+\v:after%
+}
+
+\gdef\metainputnum{%
+\v:benv%
+\let\v:after=\v:eenv%
+\@ifstar{\v:vistrue\v:m:inpnum}{\v:visfalse\v:m:inpnum}%
+}
+
+\gdef\Metainputnum{%
+\v:Benv%
+\let\v:after=\v:Eenv%
+\@ifstar{\v:vistrue\v:m:inpnum}{\v:visfalse\v:m:inpnum}%
+}
+
+\gdef\v:m:ln{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\v:toks=\everypar%
+\everypar{\the\v:toks\everypar{\v:cnt\v:bol}\the\everypar}%
+\global\v:line=0%
+\def\v:metaopts{\def\v:CR{\v:eol\par}}%
+\begingroup%
+\v:meta%
+}
+
+\gdef\metalinesnum{%
+\v:benv%
+\v:visfalse%
+\v:m:ln%
+\v:ignrest%
+}
+
+\gdef\metalinesnum*{%
+\v:benv%
+\v:vistrue%
+\v:m:ln%
+\v:ignrest%
+}
+
+\gdef\Metalinesnum{%
+\v:Benv%
+\v:visfalse%
+\v:m:ln%
+\v:ignrest%
+}
+
+\gdef\Metalinesnum*{%
+\v:Benv%
+\v:vistrue%
+\v:m:ln%
+\v:ignrest%
+}
+
+\global\let\endmetalinesnum=\endmetalines
+\global\let\endmetalinesnum*=\endmetalines
+\global\let\endMetalinesnum=\endMetalines
+\global\let\endMetalinesnum*=\endMetalines
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\gdef\v:m:inpbox#1{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\def\v:metaopts{\def\v:CR{\v:boxeol\par\v:boxbol}}%
+\begingroup%
+\v:meta%
+\baselineskip0pt%
+\vbox{\hrule width\linewidth}%
+\offinterlineskip%
+\nobreak%
+\v:boxbol%
+\v:boxeol%
+\par%
+\v:boxbol%
+\input#1%
+\v:boxeol%
+\par%
+\offinterlineskip%
+\nobreak%
+\vbox{\hrule width\linewidth}%
+\endgroup%
+\endgroup%
+\v:after%
+}
+
+\gdef\metainputbox{%
+\v:benv%
+\let\v:after=\v:eenv%
+\@ifstar{\v:vistrue\v:m:inpbox}{\v:visfalse\v:m:inpbox}%
+}
+
+\gdef\Metainputbox{%
+\v:Benv%
+\let\v:after=\v:Eenv%
+\@ifstar{\v:vistrue\v:m:inpbox}{\v:visfalse\v:m:inpbox}%
+}
+
+\gdef\v:m:lb{%
+\ifvmode\vskip\parskip\else\par\fi%
+\begingroup%
+\def\v:metaopts{\def\v:CR{\v:boxeol\par\v:boxbol}}%
+\begingroup%
+\v:meta%
+\baselineskip0pt%
+\vbox{\hrule width\linewidth}%
+\offinterlineskip%
+\nobreak%
+\v:boxbol%
+\v:boxeol%
+\par%
+\nobreak%
+\v:boxbol%
+}
+
+\gdef\metalinesbox{%
+\v:benv%
+\v:visfalse%
+\v:m:lb%
+\v:ignrest%
+}
+
+\gdef\metalinesbox*{%
+\v:benv%
+\v:vistrue%
+\v:m:lb%
+\v:ignrest%
+}
+
+\gdef\Metalinesbox{%
+\v:Benv%
+\v:visfalse%
+\v:m:lb%
+\v:ignrest%
+}
+
+\gdef\Metalinesbox*{%
+\v:Benv%
+\v:vistrue%
+\v:m:lb%
+\v:ignrest%
+}
+
+\gdef\v:end:m:lb{%
+\v:boxeol%
+\par%
+\offinterlineskip%
+\nobreak%
+\vbox{\hrule width\linewidth}%
+\endgroup%
+\endgroup%
+}
+
+\gdef\endmetalinesbox{%
+\v:end:m:lb%
+\v:eenv%
+}
+
+\global\let\endmetalinesbox*=\endmetalinesbox
+
+\gdef\endMetalinesbox{%
+\v:end:m:lb%
+\v:Eenv%
+}
+
+\global\let\endMetalinesbox*=\endMetalinesbox
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\endgroup% * als Buchstabe
+\endgroup% local macros, letter :, etc.
+
+\endinput %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/macros/latex209/contrib/verbtext/vtxtdem1.tex b/macros/latex209/contrib/verbtext/vtxtdem1.tex
new file mode 100644
index 0000000000..28c4fe59e3
--- /dev/null
+++ b/macros/latex209/contrib/verbtext/vtxtdem1.tex
@@ -0,0 +1,13 @@
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|--|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
diff --git a/macros/latex209/contrib/verbtext/vtxtdem2.tex b/macros/latex209/contrib/verbtext/vtxtdem2.tex
new file mode 100644
index 0000000000..30753915ae
--- /dev/null
+++ b/macros/latex209/contrib/verbtext/vtxtdem2.tex
@@ -0,0 +1,14 @@
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|--|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
diff --git a/macros/latex209/contrib/verbtext/vtxtdemo.tex b/macros/latex209/contrib/verbtext/vtxtdemo.tex
new file mode 100644
index 0000000000..d73b47c997
--- /dev/null
+++ b/macros/latex209/contrib/verbtext/vtxtdemo.tex
@@ -0,0 +1,2003 @@
+% Demonstration des verbtext.sty
+
+\documentstyle[german,verbtext]{article}
+
+% Zeichen der PC-Tastatur erlauben
+% Zur Kontrolle: ae=ä oe=ö ue=ü sz=ß Ae=Ä Oe=Ö Ue=Ü Par=§
+\lccode`\ä=`\ä\uccode`\ä=`\Ä\lccode`\Ä=`\ä\uccode`\Ä=`\Ä
+\lccode`\ö=`\ö\uccode`\ö=`\Ö\lccode`\Ö=`\ö\uccode`\Ö=`\Ö
+\lccode`\ü=`\ü\uccode`\ü=`\Ü\lccode`\Ü=`\ü\uccode`\Ü=`\Ü
+\lccode`\ß=`\ß\uccode`\ß=0
+\catcode`\ä=\active\gdefä{"a}
+\catcode`\ö=\active\gdefö{"o}
+\catcode`\ü=\active\gdefü{"u}
+\catcode`\ß=\active\gdefß{"s}
+\catcode`\Ä=\active\gdefÄ{"A}
+\catcode`\Ö=\active\gdefÖ{"O}
+\catcode`\Ü=\active\gdefÜ{"U}
+\catcode`\§=\active\gdef§{{\S}}
+
+\title{Demonstration der Eigenschaften des {\tt verbtext}-Styles}
+\author{Rainer Perske\\Zur Gräfte 10\\D-48161 Münster}
+
+% Zwecks Demonstration \parskip und \parindent ungleich 0pt
+\parskip1ex
+
+\begin{document}
+
+\maketitle
+
+% DEL soll kein invalid character mehr sein
+{\catcode`\*=15 \ifnum\catcode`\*=\catcode`\^^?\global\catcode`\^^?=12 \fi}
+
+\subsection*{Zeichenfolgen verbatim}
+
+Folgende Zeichen hat der Zeichensatz ISO 8859 Latin 1:
+\begin{description}
+\item[\tt A0-BF] \verbchars| ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿|
+\item[\tt C0-DF] \verbchars|ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|
+\item[\tt E0-FF] \verbchars|àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ|
+\end{description}
+Aber auch folgende Steuerzeichen werden dargestellt
+(Ctrl-@, Ctrl-Q, Ctrl-S und Ctrl-Z sind hier durch Ctrl-X ersetzt; Ctrl-H
+Ctrl-I, Ctrl-J, Ctrl-K, Ctrl-L und Ctrl-M verhalten sich vielleicht
+bei jeder \TeX-Installation und unter jedem Betriebssystem anders,
+wenn sie überhaupt den Transport dieser Datei zu Ihnen überstanden haben):
+\begin{description}
+\item[\tt 00-1F] \verbchars|
+ -|
+\end{description}
+
+Das Leerzeichen ohne (\verbchars| |) und mit (\verbchars*| |) Stern, \\
+mit kleinen \verbchars|## ##| und großen \Verbchars|## ##| Abständen, \\
+mit kleinen \verbchars*|## ##| und großen \Verbchars*|## ##| Abständen,
+
+Im weiteren Text dient die Zeichenfolge XgXgXgXgXg immer nur zur Verdeutlichung
+der Abstände zu vorausgehenden oder nachfolgenden Zeilen.
+
+In den Zeichentabellen, in denen auch die Zeichen {\tt 00} bis {\tt 1F}
+dargestellt werden, sind die Zeichen {\tt 08} bis {\tt 0D} wegen ihrer
+weiterhin vorhandenen Wirkung und die Zeichen {\tt 00}, {\tt 11}, {\tt 13}
+und {\tt 1A} wegen verschiedener Probleme, die sonst bei der Verarbeitung
+dieser Datei auftreten können, durch Minuszeichen ersetzt.
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Altes Verbatim}
+
+\subsubsection*{Verbatim}
+(XgXgXgXgXg)
+\begin{verbatim}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verbatim}
+(XgXgXgXgXg)
+
+\subsubsection*{Verbatim{\tt *}}
+
+(XgXgXgXgXg)
+\begin{verbatim*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verbatim*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Neues Verbatim}
+
+\begingroup \verbatimreplace
+
+\subsubsection*{Verbatim}
+(XgXgXgXgXg)
+\begin{verbatim}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~-|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verbatim}
+(XgXgXgXgXg)
+
+\subsubsection*{Verbatim{\tt *}}
+
+(XgXgXgXgXg)
+\begin{verbatim*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verbatim*}
+(XgXgXgXgXg)
+
+\endgroup
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Verschiedene Gr"o"sen -- footnotesize und LARGE}
+
+{\footnotesize\begin{verblines}
+ |0123456789ABCDEF|
+--+----------------+
+0 |-------|
+1 |---|
+2 | !"#$%&'()*+,-./|
+3 |0123456789:;<=>?|
+4 |@ABCDEFGHIJKLMNO|
+5 |PQRSTUVWXYZ[\]^_|
+6 |`abcdefghijklmno|
+7 |pqrstuvwxyz{|}~|
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|
+9 |‘’“”•–—˜™š›œžŸ|
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|
+B |°±²³´µ¶·¸¹º»¼½¾¿|
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|
+D |ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|
+E |àáâãäåæçèéêëìíîï|
+F |ðñòóôõö÷øùúûüýþÿ|
+--+----------------+
+\end{verblines}}
+
+{\LARGE\begin{verblines}
+ |0123456789ABCDEF|
+--+----------------+
+0 |-------|
+1 |---|
+2 | !"#$%&'()*+,-./|
+3 |0123456789:;<=>?|
+4 |@ABCDEFGHIJKLMNO|
+5 |PQRSTUVWXYZ[\]^_|
+6 |`abcdefghijklmno|
+7 |pqrstuvwxyz{|}~|
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|
+9 |‘’“”•–—˜™š›œžŸ|
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|
+B |°±²³´µ¶·¸¹º»¼½¾¿|
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|
+D |ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|
+E |àáâãäåæçèéêëìíîï|
+F |ðñòóôõö÷øùúûüýþÿ|
+--+----------------+
+\end{verblines}}
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Verschiedene Gr"o"sen -- small und Large}
+
+{\small\begin{verblines}
+ |0123456789ABCDEF|
+--+----------------+
+0 |-------|
+1 |---|
+2 | !"#$%&'()*+,-./|
+3 |0123456789:;<=>?|
+4 |@ABCDEFGHIJKLMNO|
+5 |PQRSTUVWXYZ[\]^_|
+6 |`abcdefghijklmno|
+7 |pqrstuvwxyz{|}~|
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|
+9 |‘’“”•–—˜™š›œžŸ|
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|
+B |°±²³´µ¶·¸¹º»¼½¾¿|
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|
+D |ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|
+E |àáâãäåæçèéêëìíîï|
+F |ðñòóôõö÷øùúûüýþÿ|
+--+----------------+
+\end{verblines}}
+
+{\Large\begin{verblines}
+ |0123456789ABCDEF|
+--+----------------+
+0 |-------|
+1 |---|
+2 | !"#$%&'()*+,-./|
+3 |0123456789:;<=>?|
+4 |@ABCDEFGHIJKLMNO|
+5 |PQRSTUVWXYZ[\]^_|
+6 |`abcdefghijklmno|
+7 |pqrstuvwxyz{|}~|
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|
+9 |‘’“”•–—˜™š›œžŸ|
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|
+B |°±²³´µ¶·¸¹º»¼½¾¿|
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|
+D |ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|
+E |àáâãäåæçèéêëìíîï|
+F |ðñòóôõö÷øùúûüýþÿ|
+--+----------------+
+\end{verblines}}
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Verschiedene Gr"o"sen -- normalsize und large}
+
+{\begin{verblines}
+ |0123456789ABCDEF|
+--+----------------+
+0 |-------|
+1 |---|
+2 | !"#$%&'()*+,-./|
+3 |0123456789:;<=>?|
+4 |@ABCDEFGHIJKLMNO|
+5 |PQRSTUVWXYZ[\]^_|
+6 |`abcdefghijklmno|
+7 |pqrstuvwxyz{|}~|
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|
+9 |‘’“”•–—˜™š›œžŸ|
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|
+B |°±²³´µ¶·¸¹º»¼½¾¿|
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|
+D |ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|
+E |àáâãäåæçèéêëìíîï|
+F |ðñòóôõö÷øùúûüýþÿ|
+--+----------------+
+\end{verblines}}
+
+{\large\begin{verblines}
+ |0123456789ABCDEF|
+--+----------------+
+0 |-------|
+1 |---|
+2 | !"#$%&'()*+,-./|
+3 |0123456789:;<=>?|
+4 |@ABCDEFGHIJKLMNO|
+5 |PQRSTUVWXYZ[\]^_|
+6 |`abcdefghijklmno|
+7 |pqrstuvwxyz{|}~|
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|
+9 |‘’“”•–—˜™š›œžŸ|
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|
+B |°±²³´µ¶·¸¹º»¼½¾¿|
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|
+D |ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|
+E |àáâãäåæçèéêëìíîï|
+F |ðñòóôõö÷øùúûüýþÿ|
+--+----------------+
+\end{verblines}}
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zusammenspiel mit Listen und Umgebungen}
+
+\subsubsection*{In Itemize-Umgebung hinter Item}
+Text außerhalb Umgebung.
+\begin{itemize}
+\item \verbinput{vtxtdem1}
+Text in Umgebung
+\end{itemize}
+Text außerhalb Umgebung.
+
+\subsubsection*{In Itemize-Umgebung hinter Item im Absatz}
+Text außerhalb Umgebung.
+\begin{itemize}
+\item Text in Umgebung
+\verbinput{vtxtdem1}
+Text in Umgebung
+\end{itemize}
+Text außerhalb Umgebung.
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zusammenspiel mit Listen und Umgebungen}
+
+\subsubsection*{In Itemize-Umgebung als letzter Listenabsatz}
+Text außerhalb Umgebung.
+\begin{itemize}
+\item Text in Umgebung
+
+\verbinput{vtxtdem1}
+\end{itemize}
+Text außerhalb Umgebung.
+
+\subsubsection*{In Itemize-Umgebung als innerer Listenabsatz}
+Text außerhalb Umgebung.
+\begin{itemize}
+\item Text in Umgebung
+
+\verbinput{vtxtdem1}
+
+Text in Umgebung
+\end{itemize}
+Text außerhalb Umgebung.
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zusammenspiel mit Listen und Umgebungen}
+
+\subsubsection*{In Description-Umgebung hinter Item}
+Text außerhalb Umgebung.
+\begin{description}
+\item[Das lange Label] \verbinput{vtxtdem1}
+Text in Umgebung
+\end{description}
+Text außerhalb Umgebung.
+
+\subsubsection*{In Description-Umgebung hinter Item im Absatz}
+Text außerhalb Umgebung.
+\begin{description}
+\item[Das lange Label] Text in Umgebung
+\verbinput{vtxtdem1}
+Text in Umgebung
+\end{description}
+Text außerhalb Umgebung.
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zusammenspiel mit Listen und Umgebungen}
+
+\subsubsection*{In Description-Umgebung als letzter Listenabsatz}
+Text außerhalb Umgebung.
+\begin{description}
+\item[Das lange Label] Text in Umgebung
+
+\verbinput{vtxtdem1}
+
+Text in Umgebung
+\end{description}
+Text außerhalb Umgebung.
+
+\subsubsection*{In Description-Umgebung als innerer Listenabsatz}
+Text außerhalb Umgebung.
+\begin{description}
+\item[Das lange Label] Text in Umgebung
+
+\verbinput{vtxtdem1}
+
+Text in Umgebung
+\end{description}
+Text außerhalb Umgebung.
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zusammenspiel mit Listen und Umgebungen}
+
+\subsubsection*{In quote-Umgebung am Anfang}
+Text außerhalb Umgebung.
+\begin{quote}
+\verbinput{vtxtdem1}
+Text in Umgebung
+\end{quote}
+Text außerhalb Umgebung.
+
+\subsubsection*{In quote-Umgebung im Absatz}
+Text außerhalb Umgebung.
+\begin{quote}
+Text in Umgebung
+\verbinput{vtxtdem1}
+Text in Umgebung
+\end{quote}
+Text außerhalb Umgebung.
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zusammenspiel mit Listen und Umgebungen}
+
+\subsubsection*{In quote-Umgebung als Absatz}
+Text außerhalb Umgebung.
+\begin{quote}
+Text in Umgebung
+
+\verbinput{vtxtdem1}
+
+Text in Umgebung
+\end{quote}
+Text außerhalb Umgebung.
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section*{Die normalen Befehle}
+
+\subsection*{Die normalen Zeichensätze}
+
+\subsubsection*{ISO 8859 Latin 1}
+
+\verbcharset{88591}
+\verbinput{vtxtdem1}
+
+\subsubsection*{CECP 850}
+
+\verbcharset{850}
+\verbinput{vtxtdem1}
+
+\verbcharset{88591}
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Weitere normalen Zeichensätze}
+
+\subsubsection*{CECP 437}
+
+\verbcharset{437}
+\verbinput{vtxtdem1}
+
+\subsubsection*{Testzeichensatz}
+
+\verbcharset{4101962}
+\verbinput{vtxtdem1}
+
+\verbcharset{88591}
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\begin{verblines}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblines}
+
+(XgXgXgXgXg)
+\begin{verblines}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblines}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\begin{verblinesnum}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblinesnum}
+
+(XgXgXgXgXg)
+\begin{verblinesnum}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblinesnum}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\begin{verblinesbox}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblinesbox}
+
+(XgXgXgXgXg)
+\begin{verblinesbox}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblinesbox}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen meta-verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\begin{metalines}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalines}
+
+(XgXgXgXgXg)
+\begin{metalines}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalines}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen meta-verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\begin{metalinesnum}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalinesnum}
+
+(XgXgXgXgXg)
+\begin{metalinesnum}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalinesnum}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen meta-verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\begin{metalinesbox}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalinesbox}
+
+(XgXgXgXgXg)
+\begin{metalinesbox}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalinesbox}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\begin{Verblines}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblines}
+
+(XgXgXgXgXg)
+\begin{Verblines}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblines}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\begin{Verblinesnum}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblinesnum}
+
+(XgXgXgXgXg)
+\begin{Verblinesnum}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblinesnum}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\begin{Verblinesbox}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblinesbox}
+
+(XgXgXgXgXg)
+\begin{Verblinesbox}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblinesbox}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen meta-verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\begin{Metalines}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalines}
+
+(XgXgXgXgXg)
+\begin{Metalines}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalines}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen meta-verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\begin{Metalinesnum}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalinesnum}
+
+(XgXgXgXgXg)
+\begin{Metalinesnum}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalinesnum}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen meta-verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\begin{Metalinesbox}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalinesbox}
+
+(XgXgXgXgXg)
+\begin{Metalinesbox}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalinesbox}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\verbinput{vtxtdem1}
+
+(XgXgXgXgXg)
+\verbinput{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\verbinputnum{vtxtdem1}
+
+(XgXgXgXgXg)
+\verbinputnum{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\verbinputbox{vtxtdem1}
+
+(XgXgXgXgXg)
+\verbinputbox{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien meta-verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\metainput{vtxtdem2}
+
+(XgXgXgXgXg)
+\metainput{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien meta-verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\metainputnum{vtxtdem2}
+
+(XgXgXgXgXg)
+\metainputnum{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien meta-verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\metainputbox{vtxtdem2}
+
+(XgXgXgXgXg)
+\metainputbox{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\Verbinput{vtxtdem1}
+
+(XgXgXgXgXg)
+\Verbinput{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\Verbinputnum{vtxtdem1}
+
+(XgXgXgXgXg)
+\Verbinputnum{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\Verbinputbox{vtxtdem1}
+
+(XgXgXgXgXg)
+\Verbinputbox{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien meta-verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\Metainput{vtxtdem2}
+
+(XgXgXgXgXg)
+\Metainput{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien meta-verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\Metainputnum{vtxtdem2}
+
+(XgXgXgXgXg)
+\Metainputnum{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien meta-verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\Metainputbox{vtxtdem2}
+
+(XgXgXgXgXg)
+\Metainputbox{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section*{Die {\tt *}-Befehle}
+
+\subsection*{Die normalen Zeichensätze}
+
+\subsubsection*{ISO 8859 Latin 1}
+
+\verbcharset{88591}
+\verbinput*{vtxtdem1}
+
+\subsubsection*{CECP 850}
+
+\verbcharset{850}
+\verbinput*{vtxtdem1}
+
+\verbcharset{88591}
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Weitere normalen Zeichensätze}
+
+\subsubsection*{CECP 437}
+
+\verbcharset{437}
+\verbinput*{vtxtdem1}
+
+\subsubsection*{Testzeichensatz}
+
+\verbcharset{4101962}
+\verbinput*{vtxtdem1}
+
+\verbcharset{88591}
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\begin{verblines*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblines*}
+
+(XgXgXgXgXg)
+\begin{verblines*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblines*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\begin{verblinesnum*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblinesnum*}
+
+(XgXgXgXgXg)
+\begin{verblinesnum*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblinesnum*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\begin{verblinesbox*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblinesbox*}
+
+(XgXgXgXgXg)
+\begin{verblinesbox*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{verblinesbox*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen meta-verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\begin{metalines*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalines*}
+
+(XgXgXgXgXg)
+\begin{metalines*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalines*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen meta-verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\begin{metalinesnum*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalinesnum*}
+
+(XgXgXgXgXg)
+\begin{metalinesnum*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalinesnum*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Zeilen meta-verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\begin{metalinesbox*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalinesbox*}
+
+(XgXgXgXgXg)
+\begin{metalinesbox*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{metalinesbox*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\begin{Verblines*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblines*}
+
+(XgXgXgXgXg)
+\begin{Verblines*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblines*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\begin{Verblinesnum*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblinesnum*}
+
+(XgXgXgXgXg)
+\begin{Verblinesnum*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblinesnum*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\begin{Verblinesbox*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblinesbox*}
+
+(XgXgXgXgXg)
+\begin{Verblinesbox*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;<=>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz{|}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Verblinesbox*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen meta-verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\begin{Metalines*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalines*}
+
+(XgXgXgXgXg)
+\begin{Metalines*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalines*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen meta-verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\begin{Metalinesnum*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalinesnum*}
+
+(XgXgXgXgXg)
+\begin{Metalinesnum*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalinesnum*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Zeilen meta-verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\begin{Metalinesbox*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalinesbox*}
+
+(XgXgXgXgXg)
+\begin{Metalinesbox*}
+ |0123456789ABCDEF|0123456789ABCDEF|
+--+----------------+----------------+--
+0 |-------|---|1
+2 | !"#$%&'()*+,-./|0123456789:;\<=\>?|3
+4 |@ABCDEFGHIJKLMNO|PQRSTUVWXYZ[\\]^_|5
+6 |`abcdefghijklmno|pqrstuvwxyz\{|\}~|7
+8 |€‚ƒ„…†‡ˆ‰Š‹ŒŽ|‘’“”•–—˜™š›œžŸ|9
+A | ¡¢£¤¥¦§¨©ª«¬­®¯|°±²³´µ¶·¸¹º»¼½¾¿|B
+C |ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ|ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß|D
+E |àáâãäåæçèéêëìíîï|ðñòóôõö÷øùúûüýþÿ|F
+--+----------------+----------------+--
+void main(void)\{printf("Hallo, Du <{\bf böses} Wort>!\\n");\}
+ T a bulaTOR___
+GgggggggGgggggggGgggggggGggganz Genau!!
+\end{Metalinesbox*}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\verbinput*{vtxtdem1}
+
+(XgXgXgXgXg)
+\verbinput*{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\verbinputnum*{vtxtdem1}
+
+(XgXgXgXgXg)
+\verbinputnum*{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\verbinputbox*{vtxtdem1}
+
+(XgXgXgXgXg)
+\verbinputbox*{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien meta-verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\metainput*{vtxtdem2}
+
+(XgXgXgXgXg)
+\metainput*{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien meta-verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\metainputnum*{vtxtdem2}
+
+(XgXgXgXgXg)
+\metainputnum*{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Dateien meta-verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\metainputbox*{vtxtdem2}
+
+(XgXgXgXgXg)
+\metainputbox*{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\Verbinput*{vtxtdem1}
+
+(XgXgXgXgXg)
+\Verbinput*{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\Verbinputnum*{vtxtdem1}
+
+(XgXgXgXgXg)
+\Verbinputnum*{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\Verbinputbox*{vtxtdem1}
+
+(XgXgXgXgXg)
+\Verbinputbox*{vtxtdem1}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien meta-verbatim -- unverändert}
+
+(XgXgXgXgXg)
+
+\Metainput*{vtxtdem2}
+
+(XgXgXgXgXg)
+\Metainput*{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien meta-verbatim -- mit Zeilennummern}
+
+(XgXgXgXgXg)
+
+\Metainputnum*{vtxtdem2}
+
+(XgXgXgXgXg)
+\Metainputnum*{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsection*{Mit Environment -- Dateien meta-verbatim -- im Kasten}
+
+(XgXgXgXgXg)
+
+\Metainputbox*{vtxtdem2}
+
+(XgXgXgXgXg)
+\Metainputbox*{vtxtdem2}
+(XgXgXgXgXg)
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\twocolumn[Alle Zeichen am Zeilenanfang]
+
+\subsection*{88591} \verbcharset{88591}
+\verbchars*| #|\par \verbchars*|!#|\par \verbchars*|"#|\par \verbchars*|##|\par
+\verbchars*|$#|\par \verbchars*|%#|\par \verbchars*|&#|\par \verbchars*|'#|\par
+\verbchars*|(#|\par \verbchars*|)#|\par \verbchars*|*#|\par \verbchars*|+#|\par
+\verbchars*|,#|\par \verbchars*|-#|\par \verbchars*|.#|\par \verbchars*|/#|\par
+\verbchars*|0#|\par \verbchars*|1#|\par \verbchars*|2#|\par \verbchars*|3#|\par
+\verbchars*|4#|\par \verbchars*|5#|\par \verbchars*|6#|\par \verbchars*|7#|\par
+\verbchars*|8#|\par \verbchars*|9#|\par \verbchars*|:#|\par \verbchars*|;#|\par
+\verbchars*|<#|\par \verbchars*|=#|\par \verbchars*|>#|\par \verbchars*|?#|\par
+\verbchars*|@#|\par \verbchars*|A#|\par \verbchars*|B#|\par \verbchars*|C#|\par
+\verbchars*|D#|\par \verbchars*|E#|\par \verbchars*|F#|\par \verbchars*|G#|\par
+\verbchars*|H#|\par \verbchars*|I#|\par \verbchars*|J#|\par \verbchars*|K#|\par
+\verbchars*|L#|\par \verbchars*|M#|\par \verbchars*|N#|\par \verbchars*|O#|\par
+\verbchars*|P#|\par \verbchars*|Q#|\par \verbchars*|R#|\par \verbchars*|S#|\par
+\verbchars*|T#|\par \verbchars*|U#|\par \verbchars*|V#|\par \verbchars*|W#|\par
+\verbchars*|X#|\par \verbchars*|Y#|\par \verbchars*|Z#|\par \verbchars*|[#|\par
+\verbchars*|\#|\par \verbchars*|]#|\par \verbchars*|^#|\par \verbchars*|_#|\par
+\verbchars*|`#|\par \verbchars*|a#|\par \verbchars*|b#|\par \verbchars*|c#|\par
+\verbchars*|d#|\par \verbchars*|e#|\par \verbchars*|f#|\par \verbchars*|g#|\par
+\verbchars*|h#|\par \verbchars*|i#|\par \verbchars*|j#|\par \verbchars*|k#|\par
+\verbchars*|l#|\par \verbchars*|m#|\par \verbchars*|n#|\par \verbchars*|o#|\par
+\verbchars*|p#|\par \verbchars*|q#|\par \verbchars*|r#|\par \verbchars*|s#|\par
+\verbchars*|t#|\par \verbchars*|u#|\par \verbchars*|v#|\par \verbchars*|w#|\par
+\verbchars*|x#|\par \verbchars*|y#|\par \verbchars*|z#|\par \verbchars*|{#|\par
+\verbchars*+|#+\par \verbchars*|}#|\par \verbchars*|~#|\par \verbchars*|#|\par
+\verbchars*|€#|\par \verbchars*|#|\par \verbchars*|‚#|\par \verbchars*|ƒ#|\par
+\verbchars*|„#|\par \verbchars*|…#|\par \verbchars*|†#|\par \verbchars*|‡#|\par
+\verbchars*|ˆ#|\par \verbchars*|‰#|\par \verbchars*|Š#|\par \verbchars*|‹#|\par
+\verbchars*|Œ#|\par \verbchars*|#|\par \verbchars*|Ž#|\par \verbchars*|#|\par
+\verbchars*|#|\par \verbchars*|‘#|\par \verbchars*|’#|\par \verbchars*|“#|\par
+\verbchars*|”#|\par \verbchars*|•#|\par \verbchars*|–#|\par \verbchars*|—#|\par
+\verbchars*|˜#|\par \verbchars*|™#|\par \verbchars*|š#|\par \verbchars*|›#|\par
+\verbchars*|œ#|\par \verbchars*|#|\par \verbchars*|ž#|\par \verbchars*|Ÿ#|\par
+\verbchars*| #|\par \verbchars*|¡#|\par \verbchars*|¢#|\par \verbchars*|£#|\par
+\verbchars*|¤#|\par \verbchars*|¥#|\par \verbchars*|¦#|\par \verbchars*|§#|\par
+\verbchars*|¨#|\par \verbchars*|©#|\par \verbchars*|ª#|\par \verbchars*|«#|\par
+\verbchars*|¬#|\par \verbchars*|­#|\par \verbchars*|®#|\par \verbchars*|¯#|\par
+\verbchars*|°#|\par \verbchars*|±#|\par \verbchars*|²#|\par \verbchars*|³#|\par
+\verbchars*|´#|\par \verbchars*|µ#|\par \verbchars*|¶#|\par \verbchars*|·#|\par
+\verbchars*|¸#|\par \verbchars*|¹#|\par \verbchars*|º#|\par \verbchars*|»#|\par
+\verbchars*|¼#|\par \verbchars*|½#|\par \verbchars*|¾#|\par \verbchars*|¿#|\par
+\verbchars*|À#|\par \verbchars*|Á#|\par \verbchars*|Â#|\par \verbchars*|Ã#|\par
+\verbchars*|Ä#|\par \verbchars*|Å#|\par \verbchars*|Æ#|\par \verbchars*|Ç#|\par
+\verbchars*|È#|\par \verbchars*|É#|\par \verbchars*|Ê#|\par \verbchars*|Ë#|\par
+\verbchars*|Ì#|\par \verbchars*|Í#|\par \verbchars*|Î#|\par \verbchars*|Ï#|\par
+\verbchars*|Ð#|\par \verbchars*|Ñ#|\par \verbchars*|Ò#|\par \verbchars*|Ó#|\par
+\verbchars*|Ô#|\par \verbchars*|Õ#|\par \verbchars*|Ö#|\par \verbchars*|×#|\par
+\verbchars*|Ø#|\par \verbchars*|Ù#|\par \verbchars*|Ú#|\par \verbchars*|Û#|\par
+\verbchars*|Ü#|\par \verbchars*|Ý#|\par \verbchars*|Þ#|\par \verbchars*|ß#|\par
+\verbchars*|à#|\par \verbchars*|á#|\par \verbchars*|â#|\par \verbchars*|ã#|\par
+\verbchars*|ä#|\par \verbchars*|å#|\par \verbchars*|æ#|\par \verbchars*|ç#|\par
+\verbchars*|è#|\par \verbchars*|é#|\par \verbchars*|ê#|\par \verbchars*|ë#|\par
+\verbchars*|ì#|\par \verbchars*|í#|\par \verbchars*|î#|\par \verbchars*|ï#|\par
+\verbchars*|ð#|\par \verbchars*|ñ#|\par \verbchars*|ò#|\par \verbchars*|ó#|\par
+\verbchars*|ô#|\par \verbchars*|õ#|\par \verbchars*|ö#|\par \verbchars*|÷#|\par
+\verbchars*|ø#|\par \verbchars*|ù#|\par \verbchars*|ú#|\par \verbchars*|û#|\par
+\verbchars*|ü#|\par \verbchars*|ý#|\par \verbchars*|þ#|\par \verbchars*|ÿ#|\par
+\subsection*{850} \verbcharset{850}
+\verbchars*| #|\par \verbchars*|!#|\par \verbchars*|"#|\par \verbchars*|##|\par
+\verbchars*|$#|\par \verbchars*|%#|\par \verbchars*|&#|\par \verbchars*|'#|\par
+\verbchars*|(#|\par \verbchars*|)#|\par \verbchars*|*#|\par \verbchars*|+#|\par
+\verbchars*|,#|\par \verbchars*|-#|\par \verbchars*|.#|\par \verbchars*|/#|\par
+\verbchars*|0#|\par \verbchars*|1#|\par \verbchars*|2#|\par \verbchars*|3#|\par
+\verbchars*|4#|\par \verbchars*|5#|\par \verbchars*|6#|\par \verbchars*|7#|\par
+\verbchars*|8#|\par \verbchars*|9#|\par \verbchars*|:#|\par \verbchars*|;#|\par
+\verbchars*|<#|\par \verbchars*|=#|\par \verbchars*|>#|\par \verbchars*|?#|\par
+\verbchars*|@#|\par \verbchars*|A#|\par \verbchars*|B#|\par \verbchars*|C#|\par
+\verbchars*|D#|\par \verbchars*|E#|\par \verbchars*|F#|\par \verbchars*|G#|\par
+\verbchars*|H#|\par \verbchars*|I#|\par \verbchars*|J#|\par \verbchars*|K#|\par
+\verbchars*|L#|\par \verbchars*|M#|\par \verbchars*|N#|\par \verbchars*|O#|\par
+\verbchars*|P#|\par \verbchars*|Q#|\par \verbchars*|R#|\par \verbchars*|S#|\par
+\verbchars*|T#|\par \verbchars*|U#|\par \verbchars*|V#|\par \verbchars*|W#|\par
+\verbchars*|X#|\par \verbchars*|Y#|\par \verbchars*|Z#|\par \verbchars*|[#|\par
+\verbchars*|\#|\par \verbchars*|]#|\par \verbchars*|^#|\par \verbchars*|_#|\par
+\verbchars*|`#|\par \verbchars*|a#|\par \verbchars*|b#|\par \verbchars*|c#|\par
+\verbchars*|d#|\par \verbchars*|e#|\par \verbchars*|f#|\par \verbchars*|g#|\par
+\verbchars*|h#|\par \verbchars*|i#|\par \verbchars*|j#|\par \verbchars*|k#|\par
+\verbchars*|l#|\par \verbchars*|m#|\par \verbchars*|n#|\par \verbchars*|o#|\par
+\verbchars*|p#|\par \verbchars*|q#|\par \verbchars*|r#|\par \verbchars*|s#|\par
+\verbchars*|t#|\par \verbchars*|u#|\par \verbchars*|v#|\par \verbchars*|w#|\par
+\verbchars*|x#|\par \verbchars*|y#|\par \verbchars*|z#|\par \verbchars*|{#|\par
+\verbchars*+|#+\par \verbchars*|}#|\par \verbchars*|~#|\par \verbchars*|#|\par
+\verbchars*|€#|\par \verbchars*|#|\par \verbchars*|‚#|\par \verbchars*|ƒ#|\par
+\verbchars*|„#|\par \verbchars*|…#|\par \verbchars*|†#|\par \verbchars*|‡#|\par
+\verbchars*|ˆ#|\par \verbchars*|‰#|\par \verbchars*|Š#|\par \verbchars*|‹#|\par
+\verbchars*|Œ#|\par \verbchars*|#|\par \verbchars*|Ž#|\par \verbchars*|#|\par
+\verbchars*|#|\par \verbchars*|‘#|\par \verbchars*|’#|\par \verbchars*|“#|\par
+\verbchars*|”#|\par \verbchars*|•#|\par \verbchars*|–#|\par \verbchars*|—#|\par
+\verbchars*|˜#|\par \verbchars*|™#|\par \verbchars*|š#|\par \verbchars*|›#|\par
+\verbchars*|œ#|\par \verbchars*|#|\par \verbchars*|ž#|\par \verbchars*|Ÿ#|\par
+\verbchars*| #|\par \verbchars*|¡#|\par \verbchars*|¢#|\par \verbchars*|£#|\par
+\verbchars*|¤#|\par \verbchars*|¥#|\par \verbchars*|¦#|\par \verbchars*|§#|\par
+\verbchars*|¨#|\par \verbchars*|©#|\par \verbchars*|ª#|\par \verbchars*|«#|\par
+\verbchars*|¬#|\par \verbchars*|­#|\par \verbchars*|®#|\par \verbchars*|¯#|\par
+\verbchars*|°#|\par \verbchars*|±#|\par \verbchars*|²#|\par \verbchars*|³#|\par
+\verbchars*|´#|\par \verbchars*|µ#|\par \verbchars*|¶#|\par \verbchars*|·#|\par
+\verbchars*|¸#|\par \verbchars*|¹#|\par \verbchars*|º#|\par \verbchars*|»#|\par
+\verbchars*|¼#|\par \verbchars*|½#|\par \verbchars*|¾#|\par \verbchars*|¿#|\par
+\verbchars*|À#|\par \verbchars*|Á#|\par \verbchars*|Â#|\par \verbchars*|Ã#|\par
+\verbchars*|Ä#|\par \verbchars*|Å#|\par \verbchars*|Æ#|\par \verbchars*|Ç#|\par
+\verbchars*|È#|\par \verbchars*|É#|\par \verbchars*|Ê#|\par \verbchars*|Ë#|\par
+\verbchars*|Ì#|\par \verbchars*|Í#|\par \verbchars*|Î#|\par \verbchars*|Ï#|\par
+\verbchars*|Ð#|\par \verbchars*|Ñ#|\par \verbchars*|Ò#|\par \verbchars*|Ó#|\par
+\verbchars*|Ô#|\par \verbchars*|Õ#|\par \verbchars*|Ö#|\par \verbchars*|×#|\par
+\verbchars*|Ø#|\par \verbchars*|Ù#|\par \verbchars*|Ú#|\par \verbchars*|Û#|\par
+\verbchars*|Ü#|\par \verbchars*|Ý#|\par \verbchars*|Þ#|\par \verbchars*|ß#|\par
+\verbchars*|à#|\par \verbchars*|á#|\par \verbchars*|â#|\par \verbchars*|ã#|\par
+\verbchars*|ä#|\par \verbchars*|å#|\par \verbchars*|æ#|\par \verbchars*|ç#|\par
+\verbchars*|è#|\par \verbchars*|é#|\par \verbchars*|ê#|\par \verbchars*|ë#|\par
+\verbchars*|ì#|\par \verbchars*|í#|\par \verbchars*|î#|\par \verbchars*|ï#|\par
+\verbchars*|ð#|\par \verbchars*|ñ#|\par \verbchars*|ò#|\par \verbchars*|ó#|\par
+\verbchars*|ô#|\par \verbchars*|õ#|\par \verbchars*|ö#|\par \verbchars*|÷#|\par
+\verbchars*|ø#|\par \verbchars*|ù#|\par \verbchars*|ú#|\par \verbchars*|û#|\par
+\verbchars*|ü#|\par \verbchars*|ý#|\par \verbchars*|þ#|\par \verbchars*|ÿ#|\par
+\subsection*{437} \verbcharset{437}
+\verbchars*| #|\par \verbchars*|!#|\par \verbchars*|"#|\par \verbchars*|##|\par
+\verbchars*|$#|\par \verbchars*|%#|\par \verbchars*|&#|\par \verbchars*|'#|\par
+\verbchars*|(#|\par \verbchars*|)#|\par \verbchars*|*#|\par \verbchars*|+#|\par
+\verbchars*|,#|\par \verbchars*|-#|\par \verbchars*|.#|\par \verbchars*|/#|\par
+\verbchars*|0#|\par \verbchars*|1#|\par \verbchars*|2#|\par \verbchars*|3#|\par
+\verbchars*|4#|\par \verbchars*|5#|\par \verbchars*|6#|\par \verbchars*|7#|\par
+\verbchars*|8#|\par \verbchars*|9#|\par \verbchars*|:#|\par \verbchars*|;#|\par
+\verbchars*|<#|\par \verbchars*|=#|\par \verbchars*|>#|\par \verbchars*|?#|\par
+\verbchars*|@#|\par \verbchars*|A#|\par \verbchars*|B#|\par \verbchars*|C#|\par
+\verbchars*|D#|\par \verbchars*|E#|\par \verbchars*|F#|\par \verbchars*|G#|\par
+\verbchars*|H#|\par \verbchars*|I#|\par \verbchars*|J#|\par \verbchars*|K#|\par
+\verbchars*|L#|\par \verbchars*|M#|\par \verbchars*|N#|\par \verbchars*|O#|\par
+\verbchars*|P#|\par \verbchars*|Q#|\par \verbchars*|R#|\par \verbchars*|S#|\par
+\verbchars*|T#|\par \verbchars*|U#|\par \verbchars*|V#|\par \verbchars*|W#|\par
+\verbchars*|X#|\par \verbchars*|Y#|\par \verbchars*|Z#|\par \verbchars*|[#|\par
+\verbchars*|\#|\par \verbchars*|]#|\par \verbchars*|^#|\par \verbchars*|_#|\par
+\verbchars*|`#|\par \verbchars*|a#|\par \verbchars*|b#|\par \verbchars*|c#|\par
+\verbchars*|d#|\par \verbchars*|e#|\par \verbchars*|f#|\par \verbchars*|g#|\par
+\verbchars*|h#|\par \verbchars*|i#|\par \verbchars*|j#|\par \verbchars*|k#|\par
+\verbchars*|l#|\par \verbchars*|m#|\par \verbchars*|n#|\par \verbchars*|o#|\par
+\verbchars*|p#|\par \verbchars*|q#|\par \verbchars*|r#|\par \verbchars*|s#|\par
+\verbchars*|t#|\par \verbchars*|u#|\par \verbchars*|v#|\par \verbchars*|w#|\par
+\verbchars*|x#|\par \verbchars*|y#|\par \verbchars*|z#|\par \verbchars*|{#|\par
+\verbchars*+|#+\par \verbchars*|}#|\par \verbchars*|~#|\par \verbchars*|#|\par
+\verbchars*|€#|\par \verbchars*|#|\par \verbchars*|‚#|\par \verbchars*|ƒ#|\par
+\verbchars*|„#|\par \verbchars*|…#|\par \verbchars*|†#|\par \verbchars*|‡#|\par
+\verbchars*|ˆ#|\par \verbchars*|‰#|\par \verbchars*|Š#|\par \verbchars*|‹#|\par
+\verbchars*|Œ#|\par \verbchars*|#|\par \verbchars*|Ž#|\par \verbchars*|#|\par
+\verbchars*|#|\par \verbchars*|‘#|\par \verbchars*|’#|\par \verbchars*|“#|\par
+\verbchars*|”#|\par \verbchars*|•#|\par \verbchars*|–#|\par \verbchars*|—#|\par
+\verbchars*|˜#|\par \verbchars*|™#|\par \verbchars*|š#|\par \verbchars*|›#|\par
+\verbchars*|œ#|\par \verbchars*|#|\par \verbchars*|ž#|\par \verbchars*|Ÿ#|\par
+\verbchars*| #|\par \verbchars*|¡#|\par \verbchars*|¢#|\par \verbchars*|£#|\par
+\verbchars*|¤#|\par \verbchars*|¥#|\par \verbchars*|¦#|\par \verbchars*|§#|\par
+\verbchars*|¨#|\par \verbchars*|©#|\par \verbchars*|ª#|\par \verbchars*|«#|\par
+\verbchars*|¬#|\par \verbchars*|­#|\par \verbchars*|®#|\par \verbchars*|¯#|\par
+\verbchars*|°#|\par \verbchars*|±#|\par \verbchars*|²#|\par \verbchars*|³#|\par
+\verbchars*|´#|\par \verbchars*|µ#|\par \verbchars*|¶#|\par \verbchars*|·#|\par
+\verbchars*|¸#|\par \verbchars*|¹#|\par \verbchars*|º#|\par \verbchars*|»#|\par
+\verbchars*|¼#|\par \verbchars*|½#|\par \verbchars*|¾#|\par \verbchars*|¿#|\par
+\verbchars*|À#|\par \verbchars*|Á#|\par \verbchars*|Â#|\par \verbchars*|Ã#|\par
+\verbchars*|Ä#|\par \verbchars*|Å#|\par \verbchars*|Æ#|\par \verbchars*|Ç#|\par
+\verbchars*|È#|\par \verbchars*|É#|\par \verbchars*|Ê#|\par \verbchars*|Ë#|\par
+\verbchars*|Ì#|\par \verbchars*|Í#|\par \verbchars*|Î#|\par \verbchars*|Ï#|\par
+\verbchars*|Ð#|\par \verbchars*|Ñ#|\par \verbchars*|Ò#|\par \verbchars*|Ó#|\par
+\verbchars*|Ô#|\par \verbchars*|Õ#|\par \verbchars*|Ö#|\par \verbchars*|×#|\par
+\verbchars*|Ø#|\par \verbchars*|Ù#|\par \verbchars*|Ú#|\par \verbchars*|Û#|\par
+\verbchars*|Ü#|\par \verbchars*|Ý#|\par \verbchars*|Þ#|\par \verbchars*|ß#|\par
+\verbchars*|à#|\par \verbchars*|á#|\par \verbchars*|â#|\par \verbchars*|ã#|\par
+\verbchars*|ä#|\par \verbchars*|å#|\par \verbchars*|æ#|\par \verbchars*|ç#|\par
+\verbchars*|è#|\par \verbchars*|é#|\par \verbchars*|ê#|\par \verbchars*|ë#|\par
+\verbchars*|ì#|\par \verbchars*|í#|\par \verbchars*|î#|\par \verbchars*|ï#|\par
+\verbchars*|ð#|\par \verbchars*|ñ#|\par \verbchars*|ò#|\par \verbchars*|ó#|\par
+\verbchars*|ô#|\par \verbchars*|õ#|\par \verbchars*|ö#|\par \verbchars*|÷#|\par
+\verbchars*|ø#|\par \verbchars*|ù#|\par \verbchars*|ú#|\par \verbchars*|û#|\par
+\verbchars*|ü#|\par \verbchars*|ý#|\par \verbchars*|þ#|\par \verbchars*|ÿ#|\par
+\subsection*{4101962} \verbcharset{4101962}
+\verbchars*| #|\par \verbchars*|!#|\par \verbchars*|"#|\par \verbchars*|##|\par
+\verbchars*|$#|\par \verbchars*|%#|\par \verbchars*|&#|\par \verbchars*|'#|\par
+\verbchars*|(#|\par \verbchars*|)#|\par \verbchars*|*#|\par \verbchars*|+#|\par
+\verbchars*|,#|\par \verbchars*|-#|\par \verbchars*|.#|\par \verbchars*|/#|\par
+\verbchars*|0#|\par \verbchars*|1#|\par \verbchars*|2#|\par \verbchars*|3#|\par
+\verbchars*|4#|\par \verbchars*|5#|\par \verbchars*|6#|\par \verbchars*|7#|\par
+\verbchars*|8#|\par \verbchars*|9#|\par \verbchars*|:#|\par \verbchars*|;#|\par
+\verbchars*|<#|\par \verbchars*|=#|\par \verbchars*|>#|\par \verbchars*|?#|\par
+\verbchars*|@#|\par \verbchars*|A#|\par \verbchars*|B#|\par \verbchars*|C#|\par
+\verbchars*|D#|\par \verbchars*|E#|\par \verbchars*|F#|\par \verbchars*|G#|\par
+\verbchars*|H#|\par \verbchars*|I#|\par \verbchars*|J#|\par \verbchars*|K#|\par
+\verbchars*|L#|\par \verbchars*|M#|\par \verbchars*|N#|\par \verbchars*|O#|\par
+\verbchars*|P#|\par \verbchars*|Q#|\par \verbchars*|R#|\par \verbchars*|S#|\par
+\verbchars*|T#|\par \verbchars*|U#|\par \verbchars*|V#|\par \verbchars*|W#|\par
+\verbchars*|X#|\par \verbchars*|Y#|\par \verbchars*|Z#|\par \verbchars*|[#|\par
+\verbchars*|\#|\par \verbchars*|]#|\par \verbchars*|^#|\par \verbchars*|_#|\par
+\verbchars*|`#|\par \verbchars*|a#|\par \verbchars*|b#|\par \verbchars*|c#|\par
+\verbchars*|d#|\par \verbchars*|e#|\par \verbchars*|f#|\par \verbchars*|g#|\par
+\verbchars*|h#|\par \verbchars*|i#|\par \verbchars*|j#|\par \verbchars*|k#|\par
+\verbchars*|l#|\par \verbchars*|m#|\par \verbchars*|n#|\par \verbchars*|o#|\par
+\verbchars*|p#|\par \verbchars*|q#|\par \verbchars*|r#|\par \verbchars*|s#|\par
+\verbchars*|t#|\par \verbchars*|u#|\par \verbchars*|v#|\par \verbchars*|w#|\par
+\verbchars*|x#|\par \verbchars*|y#|\par \verbchars*|z#|\par \verbchars*|{#|\par
+\verbchars*+|#+\par \verbchars*|}#|\par \verbchars*|~#|\par \verbchars*|#|\par
+\verbchars*|€#|\par \verbchars*|#|\par \verbchars*|‚#|\par \verbchars*|ƒ#|\par
+\verbchars*|„#|\par \verbchars*|…#|\par \verbchars*|†#|\par \verbchars*|‡#|\par
+\verbchars*|ˆ#|\par \verbchars*|‰#|\par \verbchars*|Š#|\par \verbchars*|‹#|\par
+\verbchars*|Œ#|\par \verbchars*|#|\par \verbchars*|Ž#|\par \verbchars*|#|\par
+\verbchars*|#|\par \verbchars*|‘#|\par \verbchars*|’#|\par \verbchars*|“#|\par
+\verbchars*|”#|\par \verbchars*|•#|\par \verbchars*|–#|\par \verbchars*|—#|\par
+\verbchars*|˜#|\par \verbchars*|™#|\par \verbchars*|š#|\par \verbchars*|›#|\par
+\verbchars*|œ#|\par \verbchars*|#|\par \verbchars*|ž#|\par \verbchars*|Ÿ#|\par
+\verbchars*| #|\par \verbchars*|¡#|\par \verbchars*|¢#|\par \verbchars*|£#|\par
+\verbchars*|¤#|\par \verbchars*|¥#|\par \verbchars*|¦#|\par \verbchars*|§#|\par
+\verbchars*|¨#|\par \verbchars*|©#|\par \verbchars*|ª#|\par \verbchars*|«#|\par
+\verbchars*|¬#|\par \verbchars*|­#|\par \verbchars*|®#|\par \verbchars*|¯#|\par
+\verbchars*|°#|\par \verbchars*|±#|\par \verbchars*|²#|\par \verbchars*|³#|\par
+\verbchars*|´#|\par \verbchars*|µ#|\par \verbchars*|¶#|\par \verbchars*|·#|\par
+\verbchars*|¸#|\par \verbchars*|¹#|\par \verbchars*|º#|\par \verbchars*|»#|\par
+\verbchars*|¼#|\par \verbchars*|½#|\par \verbchars*|¾#|\par \verbchars*|¿#|\par
+\verbchars*|À#|\par \verbchars*|Á#|\par \verbchars*|Â#|\par \verbchars*|Ã#|\par
+\verbchars*|Ä#|\par \verbchars*|Å#|\par \verbchars*|Æ#|\par \verbchars*|Ç#|\par
+\verbchars*|È#|\par \verbchars*|É#|\par \verbchars*|Ê#|\par \verbchars*|Ë#|\par
+\verbchars*|Ì#|\par \verbchars*|Í#|\par \verbchars*|Î#|\par \verbchars*|Ï#|\par
+\verbchars*|Ð#|\par \verbchars*|Ñ#|\par \verbchars*|Ò#|\par \verbchars*|Ó#|\par
+\verbchars*|Ô#|\par \verbchars*|Õ#|\par \verbchars*|Ö#|\par \verbchars*|×#|\par
+\verbchars*|Ø#|\par \verbchars*|Ù#|\par \verbchars*|Ú#|\par \verbchars*|Û#|\par
+\verbchars*|Ü#|\par \verbchars*|Ý#|\par \verbchars*|Þ#|\par \verbchars*|ß#|\par
+\verbchars*|à#|\par \verbchars*|á#|\par \verbchars*|â#|\par \verbchars*|ã#|\par
+\verbchars*|ä#|\par \verbchars*|å#|\par \verbchars*|æ#|\par \verbchars*|ç#|\par
+\verbchars*|è#|\par \verbchars*|é#|\par \verbchars*|ê#|\par \verbchars*|ë#|\par
+\verbchars*|ì#|\par \verbchars*|í#|\par \verbchars*|î#|\par \verbchars*|ï#|\par
+\verbchars*|ð#|\par \verbchars*|ñ#|\par \verbchars*|ò#|\par \verbchars*|ó#|\par
+\verbchars*|ô#|\par \verbchars*|õ#|\par \verbchars*|ö#|\par \verbchars*|÷#|\par
+\verbchars*|ø#|\par \verbchars*|ù#|\par \verbchars*|ú#|\par \verbchars*|û#|\par
+\verbchars*|ü#|\par \verbchars*|ý#|\par \verbchars*|þ#|\par \verbchars*|ÿ#|\par
+\verbcharset{88591}
+\onecolumn
+
+\clearpage %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{document}
diff --git a/macros/latex209/contrib/window/window.sty b/macros/latex209/contrib/window/window.sty
new file mode 100644
index 0000000000..43b201b689
--- /dev/null
+++ b/macros/latex209/contrib/window/window.sty
@@ -0,0 +1,206 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This is WINDOW.STY (Elmar Schal\"uck Apr 1991) %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\message{This is WINDOW.STY by Elmar Schalueck April 1991}
+% These routines and macros are mainly due to Alan Hoenig
+% I myself found them in a lovely book named
+% \TeX: applications, uses, methods (Malcolm Clark, ed.),
+% Horwood, New York 1990
+% Please report errors, suggestions for better versions, etc. to
+% elmar@uni-paderborn.de
+%
+\newdimen\@totalheight % the height of the included box
+\newdimen\@wordskip % interspace between box and text
+\newcount\@numberlines % lines corresponding to boxheight
+\newdimen\@tempdim % vskip box to have middle height
+\def\z@pt{0pt}
+\newdimen\point@strut % help dimension
+\newdimen\strut@depth \newdimen\strut@height % approximate values
+\newcount\n@ % count value for parshaping
+\newcount\old@vbadness % backup value
+\newcount\@top % number of full lines
+\newcount\@window % number of window lines
+\newdimen\shave@height % backup values
+\newdimen\old@split@top@skip \newdimen\old@prevdepth
+\newdimen\old@lineskip
+\newdimen\@side % length of windowtext left and right
+\newdimen\left@side \newdimen\right@side % text left and right
+\newcount\ratio@left % ratio of text left versus right
+\newcount\ratio@right
+\newcount\ratio@sum
+\newcount\ratio@zero % instead of a \newif
+\newtoks\parshape@spec % build the wanted parshape
+\newbox\window@parbox % the textbox with empty window
+\newbox\left@box % help box to reassemble line
+\newbox\right@box
+\newbox\build@par % text before reassembling
+\newbox\in@window % what to put in the window
+%
+\def\windowbox[toplines: #1][inwindow: #2][ratio: #3 #4]#5\par{%
+% #1 number of lines before the window starts
+% #2 what will be displayed in the window
+% #3 how many parts of the text will be on the left side of the window
+% #4 how many parts of the text will be on the right side of the window
+% #5 the actual text of the window
+\old@vbadness=\vbadness \vbadness=10000
+\@top=#1
+\setbox\in@window\hbox{#2}
+\ratio@left=#3
+\ratio@right=#4
+\ratio@zero=0 % ratio@zero = 0 iff text appears on
+ % both sides of the window and cutting
+ % and reassembling must be done.
+\ifnum\ratio@left=0\ratio@zero=1\fi
+\ifnum\ratio@right=0\ratio@zero=1\fi
+\calculate@dimens % collect all values that are necessary
+\create@parshapespec % create the parshape of the text
+\setbox\build@par=\vbox{\parshape=\n@ \the\parshape@spec \strut#5}
+ % build the paragraph
+\ifnum\ratio@zero=1
+\let\window@parbox=\build@par % the paragraph is ok
+\else\open@window\fi % cut and reassemble
+\vskip0.5\@tempdim
+\vskip\@top\baselineskip % place the box inside the window
+\noindent
+\ifnum\ratio@left=0
+\else\hskip\left@side
+\hskip\@wordskip
+\fi
+\box\in@window % jump back to the normal beginning of
+\par\nobreak % the paragraph. Avoid page breaks
+\vskip-0.5\@tempdim
+\vskip-\@totalheight
+\vskip-\@top\baselineskip
+\box\window@parbox % place the actual text
+\vbadness=\old@vbadness % restore old settings
+\splittopskip=\old@split@top@skip
+}
+%
+\def\open@window{% % cut and paste
+\old@split@top@skip=\splittopskip \global\splittopskip=0pt
+\ifnum\@top=0
+\old@prevdepth=\strut@depth\else
+\shave@height=\@top\baselineskip
+\advance\shave@height by-\strut@depth
+\global\setbox\window@parbox=\vsplit\build@par to \shave@height
+\old@prevdepth=\dp\window@parbox
+\fi
+%% \window@parbox contains the top part of the paragraph
+\count10=\@numberlines % for lines := 1 to @numberlines do
+\shave@height=\strut@height
+\loop \setbox\left@box=\vsplit\build@par to\shave@height
+\setbox\right@box=\vsplit\build@par to\shave@height
+%% the left and the right boxes of one line are built
+\advance\count10 by-1 \make@line[\left@box,\right@box]
+%% now they are reassembled
+\ifnum\@top=0 % if in first line without toplines
+\ifnum\count10=\@numberlines
+\global\setbox\window@parbox\vbox{\box0} % initiate window@parbox
+\else\addline@to@windowpar % else addlines
+\fi
+\else\addline@to@windowpar
+\fi
+\ifnum\count10>0 \repeat % end of window-loop
+%% \window@parbox has the window part too
+%% paste the bottom
+\old@lineskip=\lineskip
+\global\setbox\window@parbox=\vbox{\prevdepth=\old@prevdepth%
+\lineskip=1.5pt % This value doesn't seem to fit
+ % for big fontsizes
+\unvbox\window@parbox\box\build@par}
+\lineskip=\old@lineskip
+}
+%
+\def\calculate@dimens{%
+\setbox0\hbox{[} % to calculate strut@height and strut@depth
+\point@strut=\baselineskip
+\advance\point@strut by -\ht0
+\advance\point@strut by -\dp0
+\divide\point@strut by 2
+\global\strut@height=\ht0 % just approximate values
+\global\strut@depth=\dp0
+\global\advance\strut@height by\point@strut
+\global\advance\strut@depth by\point@strut
+\global\setbox\strutbox=\hbox{\vrule height\strut@height
+depth\strut@depth width0pt} % adjust the \strutbox
+\global\@totalheight=\ht\in@window
+\global\advance\@totalheight by\dp\in@window % the total height of the
+ % included window
+\global\@numberlines=\@totalheight
+\global\divide\@numberlines by\baselineskip
+\global\@tempdim=\baselineskip
+\global\multiply\@tempdim by-\@numberlines
+\global\advance\@tempdim by\@totalheight
+\ifdim\@tempdim>0.3pt%
+ \global\advance\@numberlines by 1
+ \global\@tempdim=\baselineskip
+ \global\multiply\@tempdim by\@numberlines
+ \global\advance\@tempdim by-\@totalheight
+\fi % number of lines for the window
+ % and additional vskip for window
+\global\@wordskip=\fontdimen2\font
+\global\@window=\@numberlines
+\global\@side=\hsize
+\global\advance\@side by-\wd\in@window
+\global\advance\@side by-\@wordskip
+\ifnum\ratio@zero=0\global\advance\@side by-\@wordskip\fi
+\ratio@sum=\ratio@left
+\advance\ratio@sum by\ratio@right
+\global\left@side=\@side
+\global\multiply\left@side by\ratio@left
+\global\divide\left@side by\ratio@sum
+\global\right@side=\@side
+\global\multiply\right@side by\ratio@right
+\global\divide\right@side by\ratio@sum % left side and right side
+ % according to the chosen ratio
+}
+%
+\def\create@parshapespec{%
+\global\n@=\@top % number of lines for parshape
+\global\advance\n@ by\@window
+\ifnum\ratio@zero=0\global\advance\n@ by\@window\fi
+\global\advance\n@ by1
+\global\parshape@spec={} % initialize parshape@spec
+\count10=\@top % for i := 1 to @top do
+\ifnum\@top>0{ % add complete lines to shape
+\loop \global\parshape@spec=\expandafter{\the\parshape@spec \z@pt\hsize}
+\advance\count10 by-1 \ifnum\count10>0 \repeat
+}\fi
+\count10=\@window % for i := 1 to @window do
+\loop % add two shorter lines
+\ifnum\ratio@zero=0 % both ratio values \neq 0
+\global\parshape@spec=\expandafter{\the\parshape@spec
+\z@pt\left@side \z@pt\right@side}
+\else % one ratio value is zero
+\ifnum\ratio@left=0
+\@side=\hsize\advance\@side by-\right@side % window at the left side
+\global\parshape@spec=\expandafter{\the\parshape@spec
+\@side\right@side}\fi
+\ifnum\ratio@right=0\global\parshape@spec=\expandafter{\the\parshape@spec
+\z@pt\left@side}\fi % window at the right side
+\fi
+\advance\count10 by-1 \ifnum\count10>0 \repeat % end of loop
+\global\parshape@spec=\expandafter{\the\parshape@spec \z@pt\hsize}
+} % add full line to shape
+%
+% unwrap the vertical glue and remove the final glue
+\def\unwrap#1#2{\unvbox#1 \setbox#1=\lastbox
+\setbox#1=\hbox to#2{\strut\unhbox#1 \unskip}%
+}
+%
+% make a line of two halfs
+\def\make@line[#1,#2]{%
+\unwrap\left@box\left@side \unwrap\right@box\right@side
+\setbox0=\hbox to\hsize{\box#1\hss\box#2}%
+}
+%
+\def\addline@to@windowpar{% add the reassembled lines to the output
+\global\setbox\window@parbox=\vbox{\prevdepth=\old@prevdepth
+\unvbox\window@parbox \box0}%
+\old@prevdepth=\dp\window@parbox
+}
+%
+%
+
diff --git a/macros/latex209/contrib/window/window.tex b/macros/latex209/contrib/window/window.tex
new file mode 100644
index 0000000000..b19069f73f
--- /dev/null
+++ b/macros/latex209/contrib/window/window.tex
@@ -0,0 +1,70 @@
+\documentstyle[window]{article}
+\begin{document}
+This is a test of the new technique for building
+windows. Use them to display pictures in text.
+
+\windowbox[toplines: 2][inwindow: {\fbox{\Huge\shortstack{H\\e\\l\\l\\o}}}]%
+[ratio: 2 1]%
+London. Mich\ae{}lmas Term lately over, and the Lord Chancellor sitting
+in Lincoln's Inn Hall. Implacable November weather. As much mud in the
+streets, as if the waters had but newly retired from the face of the
+earth, and it would not be wonderful to meet a Megalosaurus, forty feet
+long or so, waddling like an elephantine lizard up Holborn Hill. Smoke
+lowering down from chimney-pots, making a soft black drizzle, with
+flakes of soot in it as big as full-grown snow-flakes --- gone into
+mourning, one might imagine, for the death of the sun. Dogs,
+indistinguishable in mire. Horses, scarcely better; splashed to their
+very blinkers. Foot passengers, jostling one another's umbrellas, in a
+general infection of ill-temper, and losing their foot-hold at
+street-corners, where tens of thousands of other foot passengers habe
+been slipping and sliding since the day broke (if this day ever broke),
+adding new deposits to the crust upon crust of mud, sticking at those
+points tenaciously to the pavement, and accumulating at compound
+interest.
+
+\parskip1ex
+\large
+\windowbox[toplines: 0][inwindow: {\fbox{\Huge\shortstack{H\\e\\l\\l\\o}}}]%
+[ratio: 0 1]%
+London. Mich\ae{}lmas Term lately over, and the Lord Chancellor sitting
+in Lincoln's Inn Hall. Implacable November weather. As much mud in the
+streets, as if the waters had but newly retired from the face of the
+earth, and it would not be wonderful to meet a Megalosaurus, forty feet
+long or so, waddling like an elephantine lizard up Holborn Hill. Smoke
+lowering down from chimney-pots, making a soft black drizzle, with
+flakes of soot in it as big as full-grown snow-flakes --- gone into
+mourning, one might imagine, for the death of the sun. Dogs,
+indistinguishable in mire. Horses, scarcely better; splashed to their
+very blinkers. Foot passengers, jostling one another's umbrellas, in a
+general infection of ill-temper, and losing their foot-hold at
+street-corners, where tens of thousands of other foot passengers habe
+been slipping and sliding since the day broke (if this day ever broke),
+adding new deposits to the crust upon crust of mud, sticking at those
+points tenaciously to the pavement, and accumulating at compound
+interest.
+\par
+
+\small
+\windowbox[toplines: 3][inwindow: {\fbox{\huge Hello}}]%
+[ratio: 1 0]%
+London. Mich\ae{}lmas Term lately over, and the Lord Chancellor sitting
+in Lincoln's Inn Hall. Implacable November weather. As much mud in the
+streets, as if the waters had but newly retired from the face of the
+earth, and it would not be wonderful to meet a Megalosaurus, forty feet
+long or so, waddling like an elephantine lizard up Holborn Hill. Smoke
+lowering down from chimney-pots, making a soft black drizzle, with
+flakes of soot in it as big as full-grown snow-flakes --- gone into
+mourning, one might imagine, for the death of the sun. Dogs,
+indistinguishable in mire. Horses, scarcely better; splashed to their
+very blinkers. Foot passengers, jostling one another's umbrellas, in a
+general infection of ill-temper, and losing their foot-hold at
+street-corners, where tens of thousands of other foot passengers habe
+been slipping and sliding since the day broke (if this day ever broke),
+adding new deposits to the crust upon crust of mud, sticking at those
+points tenaciously to the pavement, and accumulating at compound
+interest.
+\par
+
+I hope these three examples make clear, what possibilties you have and
+how these routines are used.
+\end{document}
diff --git a/macros/latex209/contrib/wright/wright.sty b/macros/latex209/contrib/wright/wright.sty
new file mode 100644
index 0000000000..4bf4aa9ac4
--- /dev/null
+++ b/macros/latex209/contrib/wright/wright.sty
@@ -0,0 +1,74 @@
+%%%%%%%%%%%%%%%%%%%%%%%cut here%%%%%%%%%%%%%%%%%%%%%%%
+%% wright.sty--example of how to change LaTeX's \newcommand (and \renewcommand)
+%% to define a command with an optional argument.
+%% Usage:
+%% \newcommand and \renewcommand are backward compatible.
+%% To define a command with an optional argument, these commands will take
+%% a second optional argument:
+%%
+%% \newcommand\kilroy[1][\blech]{\foo#1\bar#2\baz}%
+%%
+%% will define \kilroy to have an optional argument with default value of
+%% \blech and expansion \foo#1\bar#2\baz, where the optional argument is #1.
+%% NB: the optional argument is the first parameter. You must bear this in
+%% mind when using the \newcommand macro.
+%% NB: If you wish to define a command that takes an optional argument, but no
+%% required arguments, usage is, eg:
+%%
+%% \newcommand\kilroy[0][\blech]{\foo#1\bar#2\baz}%
+%%
+%% Implementation:
+%% modified commands:
+%% \newcommand
+%% \renewcommand
+%%
+%% new commands:
+%% \@newcommand
+%% \@@newcommand
+%% \@@@newcommand
+%% \@ifredefinable
+%% \@@ifredefinable
+%% \@commanddef
+%% \@ldef
+%% \@hashchar
+%% \@macparm
+%%
+%% commands that change their meaning when these macros are executed:
+%% \@@ifredefinable
+%% \@macparm
+%%
+\def\newcommand{\let\@@ifdefinable\@ifdefinable\@newcommand}%
+\def\renewcommand{\let\@@ifdefinable\@ifredefinable\@newcommand}%
+
+\def\@newcommand#1{\@ifnextchar[{\@@newcommand#1}{\@@newcommand#1[\z@]}}%
+\def\@@newcommand#1[#2]{\@ifnextchar[{\@@@newcommand#1[#2]}{\@@@newcommand#1[#2][]}}%
+\long\def\@@@newcommand#1[#2][#3]#4{\@@ifdefinable#1{\@commanddef#1[#2][#3]{#4}}}%
+
+\def\@ifredefinable#1#2{%
+ \edef\@tempa{\expandafter\@cdr\string#1\@nil}%
+ \@ifundefined{\@tempa}{\@latexerr{\string#1\space undefined}\@ehc}{}%
+ \let#1\undefined
+ \@ifdefinable#1{#2}%
+ }%
+
+\long\def\@commanddef#1[#2][#3]#4{%
+ \let#1\relax\@tempcnta#2\def\@tempb{#3}\let\@macparm\relax
+ \ifx\@tempb\@empty
+ \@tempcntb\@ne
+ \edef\@tempa{#1}%
+ \else
+ \@tempcntb\tw@
+ \edef\@tempa{\csname\string#1\endcsname[\@macparm1]}%
+ \def#1{%
+ \@ifnextchar[{\csname\string#1\endcsname}{\csname\string#1\endcsname[#3]}%
+ }%
+ \fi
+ \@whilenum\@tempcnta>\z@\do{%
+ \edef\@tempa{\@tempa\@macparm\the\@tempcntb}%
+ \advance\@tempcntb\@ne\advance\@tempcnta\m@ne
+ }%
+ \let\@macparm\@hashchar\expandafter\@ldef\@tempa{#4}%
+ }%
+\catcode`\?=12\relax
+\def\@ldef{\long\def}%
+\let\@hashchar#% the macro-parameter catcode
diff --git a/macros/latex209/contrib/wright/wright.tex b/macros/latex209/contrib/wright/wright.tex
new file mode 100644
index 0000000000..777f82237e
--- /dev/null
+++ b/macros/latex209/contrib/wright/wright.tex
@@ -0,0 +1,14 @@
+%%%%%%%%%%%%%%%%%%%%%%%cut here%%%%%%%%%%%%%%%%%%%%%%%
+%% wright.tex--example of how to use extended meanings for \newcommand
+\documentstyle{wright}%
+
+%\tracingall
+\newcommand\testwright[2]{\foo#1\bar}%
+\show\testwright
+
+\renewcommand\testwright[1][\baz]{\foo#1\bar#2\blech}%
+\show\testwright
+\expandafter\show\csname\string\testwright\endcsname
+
+\stop
+
diff --git a/macros/latex209/contrib/xarticle/art7.sty b/macros/latex209/contrib/xarticle/art7.sty
new file mode 100644
index 0000000000..ca0f767b61
--- /dev/null
+++ b/macros/latex209/contrib/xarticle/art7.sty
@@ -0,0 +1,175 @@
+% art7.sty 22-Dec-87
+%update by Mark Roth, 19 Feb 92 to match 15 Jun 91 art10.sty changes
+%update by Mark Roth, 19 Feb 92 to match 12 Jan 92 art10.sty changes
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{9pt}\viipt\@viipt
+\abovedisplayskip 7\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2\p@
+\belowdisplayshortskip 4\p@ plus2.5\p@ minus3\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{8pt}\vipt\@vipt
+\abovedisplayskip 7\p@ plus2.5\p@ minus3.5\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2\p@
+\belowdisplayshortskip 3\p@ plus2\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{7pt}\vpt\@vpt
+\abovedisplayskip 5\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 2\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{7pt}\vpt\@vpt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{10pt}\ixpt\@ixpt}
+\def\Large{\@setsize\Large{12pt}\xpt\@xpt}
+\def\LARGE{\@setsize\LARGE{14pt}\xiipt\@xiipt}
+\def\huge{\@setsize\huge{17pt}\xxivpt\@xxivpt}
+\def\Huge{\@setsize\Huge{20pt}\xviipt\@xviipt}
+
+\normalsize
+
+\if@twoside
+ \oddsidemargin 44pt
+ \evensidemargin 82pt
+ \marginparwidth 107pt
+\else
+ \oddsidemargin 63pt
+ \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 8pt
+
+\topmargin 27pt
+
+\headheight 12pt
+\headsep 25pt
+\topskip 7pt
+
+\footskip 30pt
+
+\textheight = 43\baselineskip
+\advance\textheight by \topskip
+\textwidth 345pt
+
+\columnsep 10pt
+\columnseprule 0pt
+
+\footnotesep 6.65pt
+
+\skip\footins 9pt plus 4pt minus 2pt
+
+\floatsep 12pt plus 2pt minus 2pt
+
+\textfloatsep 20pt plus 2pt minus 4pt
+
+\intextsep 12pt plus 2pt minus 2pt
+
+\@maxsep 20pt
+
+\dblfloatsep 12pt plus 2pt minus 2pt
+
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+
+\@dblmaxsep 20pt
+
+\@fptop 0pt plus 1fil
+
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+
+\@dblfptop 0pt plus 1fil
+
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt
+
+\parindent 10pt
+
+\partopsep 2pt plus 1pt minus 1pt
+
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+
+\@beginparpenalty -\@lowpenalty
+
+\@endparpenalty -\@lowpenalty
+
+\@itempenalty -\@lowpenalty
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus-1ex minus
+ -.2ex}{2.3ex plus.2ex}{\reset@font\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus-1ex
+ minus-.2ex}{1.5ex plus.2ex}{\reset@font\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus-.2ex}{1.5ex plus.2ex}{\reset@font\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus1ex minus.2ex}{-1em}{\reset@font
+ \normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus1ex minus
+ .2ex}{-1em}{\reset@font\normalsize\bf}}
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+\def\@listI{\leftmargin\leftmargini \parsep 3\p@ plus2\p@ minus\p@
+\topsep 7\p@ plus2\p@ minus4\p@
+\itemsep 4\p@ plus2\p@ minus\p@}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 3.5\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\endinput
diff --git a/macros/latex209/contrib/xarticle/art8.sty b/macros/latex209/contrib/xarticle/art8.sty
new file mode 100644
index 0000000000..ba66793ed5
--- /dev/null
+++ b/macros/latex209/contrib/xarticle/art8.sty
@@ -0,0 +1,175 @@
+% art8.sty 22-Sept-90
+%update by Mark Roth, 31 Dec 91 to match 15 Jun 91 art10.sty changes
+%update by Mark Roth, 19 Feb 92 to match 12 Jan 92 art10.sty changes
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{8pt}\viipt\@viipt
+\abovedisplayskip 6\p@ plus2\p@ minus3\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{8pt}\vipt\@vipt
+\abovedisplayskip 5\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 2\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{7pt}\vipt\@vipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{12pt}\xpt\@xpt}
+\def\Large{\@setsize\Large{14pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{17pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{20pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{25pt}\xxpt\@xxpt}
+
+\normalsize
+
+\if@twoside
+ \oddsidemargin 44pt
+ \evensidemargin 82pt
+ \marginparwidth 107pt
+\else
+ \oddsidemargin 63pt
+ \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 10pt
+
+\topmargin 27pt
+
+\headheight 12pt
+\headsep 25pt
+\topskip 8pt
+
+\footskip 30pt
+
+\textheight = 43\baselineskip
+\advance\textheight by \topskip
+\textwidth 345pt
+
+\columnsep 10pt
+\columnseprule 0pt
+
+\footnotesep 6.65pt
+
+\skip\footins 9pt plus 4pt minus 2pt
+
+\floatsep 12pt plus 2pt minus 2pt
+
+\textfloatsep 20pt plus 2pt minus 4pt
+
+\intextsep 12pt plus 2pt minus 2pt
+
+\@maxsep 20pt
+
+\dblfloatsep 12pt plus 2pt minus 2pt
+
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+
+\@dblmaxsep 20pt
+
+\@fptop 0pt plus 1fil
+
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+
+\@dblfptop 0pt plus 1fil
+
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt
+
+\parindent 12pt
+
+\partopsep 2pt plus 1pt minus 1pt
+
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+
+\@beginparpenalty -\@lowpenalty
+
+\@endparpenalty -\@lowpenalty
+
+\@itempenalty -\@lowpenalty
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus-1ex minus
+ -.2ex}{2.3ex plus.2ex}{\reset@font\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus-1ex
+ minus-.2ex}{1.5ex plus.2ex}{\reset@font\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus-.2ex}{1.5ex plus.2ex}{\reset@font\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus1ex minus.2ex}{-1em}{\reset@font
+ \normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus1ex minus
+ .2ex}{-1em}{\reset@font\normalsize\bf}}
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+\def\@listI{\leftmargin\leftmargini \parsep 3\p@ plus2\p@ minus\p@
+\topsep 7\p@ plus2\p@ minus4\p@
+\itemsep 4\p@ plus2\p@ minus\p@}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 3.5\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\endinput
diff --git a/macros/latex209/contrib/xarticle/art9.sty b/macros/latex209/contrib/xarticle/art9.sty
new file mode 100644
index 0000000000..c157065269
--- /dev/null
+++ b/macros/latex209/contrib/xarticle/art9.sty
@@ -0,0 +1,175 @@
+% art9.sty 22-Sept-90
+%update by Mark Roth, 19 Feb 92 to match 15 Jun 91 art10.sty changes
+%update by Mark Roth, 19 Feb 92 to match 12 Jan 92 art10.sty changes
+
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}
+
+\def\@normalsize{\@setsize\normalsize{11pt}\ixpt\@ixpt
+\abovedisplayskip 8.5\p@ plus3\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2\p@
+\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@
+\let\@listi\@listI}
+
+\def\small{\@setsize\small{9.5pt}\viiipt\@viiipt
+\abovedisplayskip 6\p@ plus2\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 4\p@ plus 2\p@ minus 2\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\footnotesize{\@setsize\footnotesize{8pt}\viipt\@viipt
+\abovedisplayskip 5\p@ plus\p@ minus4\p@
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus\p@
+\belowdisplayshortskip 3\p@ plus\p@ minus2\p@
+\def\@listi{\leftmargin\leftmargini
+\topsep 3\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@
+\itemsep \parsep}}
+
+\def\scriptsize{\@setsize\scriptsize{7pt}\vipt\@vipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{12pt}\xpt\@xpt}
+\def\Large{\@setsize\Large{14pt}\xiipt\@xiipt}
+\def\LARGE{\@setsize\LARGE{17pt}\xivpt\@xivpt}
+\def\huge{\@setsize\huge{20pt}\xviipt\@xviipt}
+\def\Huge{\@setsize\Huge{25pt}\xxpt\@xxpt}
+
+\normalsize
+
+\if@twoside
+ \oddsidemargin 44pt
+ \evensidemargin 82pt
+ \marginparwidth 107pt
+\else
+ \oddsidemargin 63pt
+ \evensidemargin 63pt
+ \marginparwidth 90pt
+\fi
+\marginparsep 11pt
+
+\topmargin 27pt
+
+\headheight 12pt
+\headsep 25pt
+\topskip 9pt
+
+\footskip 30pt
+
+\textheight = 43\baselineskip
+\advance\textheight by \topskip
+\textwidth 345pt
+
+\columnsep 10pt
+\columnseprule 0pt
+
+\footnotesep 6.65pt
+
+\skip\footins 9pt plus 4pt minus 2pt
+
+\floatsep 12pt plus 2pt minus 2pt
+
+\textfloatsep 20pt plus 2pt minus 4pt
+
+\intextsep 12pt plus 2pt minus 2pt
+
+\@maxsep 20pt
+
+\dblfloatsep 12pt plus 2pt minus 2pt
+
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+
+\@dblmaxsep 20pt
+
+\@fptop 0pt plus 1fil
+
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+
+\@dblfptop 0pt plus 1fil
+
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+
+\marginparpush 5pt
+
+\parskip 0pt plus 1pt
+
+\parindent 15pt
+
+\partopsep 2pt plus 1pt minus 1pt
+
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+
+\@beginparpenalty -\@lowpenalty
+
+\@endparpenalty -\@lowpenalty
+
+\@itempenalty -\@lowpenalty
+
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus-1ex minus
+ -.2ex}{2.3ex plus.2ex}{\reset@font\Large\bf}}
+\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus-1ex
+ minus-.2ex}{1.5ex plus.2ex}{\reset@font\large\bf}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus
+ -1ex minus-.2ex}{1.5ex plus.2ex}{\reset@font\normalsize\bf}}
+\def\paragraph{\@startsection
+ {paragraph}{4}{\z@}{3.25ex plus1ex minus.2ex}{-1em}{\reset@font
+ \normalsize\bf}}
+\def\subparagraph{\@startsection
+ {subparagraph}{4}{\parindent}{3.25ex plus1ex minus
+ .2ex}{-1em}{\reset@font\normalsize\bf}}
+
+\setcounter{secnumdepth}{3}
+
+\def\appendix{\par
+ \setcounter{section}{0}
+ \setcounter{subsection}{0}
+ \def\thesection{\Alph{section}}}
+
+\leftmargini 2.5em
+\leftmarginii 2.2em
+\leftmarginiii 1.87em
+\leftmarginiv 1.7em
+\leftmarginv 1em
+\leftmarginvi 1em
+
+\leftmargin\leftmargini
+\labelsep .5em
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+
+\def\@listI{\leftmargin\leftmargini \parsep 4\p@ plus2\p@ minus\p@
+\topsep 8\p@ plus2\p@ minus4\p@
+\itemsep 4\p@ plus2\p@ minus\p@}
+
+\let\@listi\@listI
+\@listi
+
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 4\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep}
+
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep}
+
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
+
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
+
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
+
+\endinput
diff --git a/macros/latex209/contrib/xarticle/article.sty b/macros/latex209/contrib/xarticle/article.sty
new file mode 100644
index 0000000000..859bfd8293
--- /dev/null
+++ b/macros/latex209/contrib/xarticle/article.sty
@@ -0,0 +1,371 @@
+% ARTICLE STANDARD DOCUMENT STYLE -- Released 14 Jan 1992
+% for LaTeX version 2.09
+% Copyright (C) 1992 by Leslie Lamport
+%modified by pxk to allow 7, 8, and 9pt styles
+%incorporated pxk mod into this release of article.sty, 19 Feb 92, Mark Roth
+
+\typeout{Standard Document Style `article' <14 Jan 92>.}
+
+\def\partname{Part}
+\def\contentsname{Contents}
+\def\listfigurename{List of Figures}
+\def\listtablename{List of Tables}
+\def\refname{References}
+\def\indexname{Index}
+\def\figurename{Figure}
+\def\tablename{Table}
+\def\abstractname{Abstract}
+
+%(pxk mod)\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\def\@ptsize{10} \@namedef{ds@11pt}{\def\@ptsize{11}}
+%(pxk mod)\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@namedef{ds@12pt}{\def\@ptsize{12}}
+\@namedef{ds@9pt}{\def\@ptsize{9}}
+\@namedef{ds@8pt}{\def\@ptsize{8}}
+\@namedef{ds@7pt}{\def\@ptsize{7}}
+
+\def\ds@twoside{\@twosidetrue
+ \@mparswitchtrue}
+
+\def\ds@draft{\overfullrule 5\p@}
+
+\newif\if@titlepage \@titlepagefalse
+\def\ds@titlepage{\@titlepagetrue}
+
+\def\ds@twocolumn{\@twocolumntrue}
+
+\@options
+
+%(pxk mod)\input art1\@ptsize.sty\relax
+\input art\@ptsize.sty\relax
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\m@th\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\m@th\ast$}
+\def\labelitemiv{$\m@th\cdot$}
+
+\def\verse{\let\\=\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep \z@ plus\p@}\item[]}
+\let\endquotation=\endlist
+
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+
+\let\enddescription\endlist
+
+\def\theequation{\arabic{equation}}
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt
+
+\tabcolsep 6pt
+
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+
+\fboxsep = 3pt
+
+\fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart {\Roman{part}}
+\def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\part{\par
+ \addvspace{4ex}
+ \@afterindentfalse
+ \secdef\@part\@spart}
+
+\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{part}
+ \addcontentsline{toc}{part}{\thepart
+ \hspace{1em}#1}\else
+ \addcontentsline{toc}{part}{#1}\fi
+ {\parindent \z@ \raggedright
+ \interlinepenalty \@M
+ \ifnum \c@secnumdepth >\m@ne
+ \Large \bf \partname~\thepart% THEN Print '\partname' and
+ \par\nobreak
+ \fi
+ \huge \bf
+ #2%
+ \markboth{}{}\par
+ }\nobreak
+ \vskip 3ex
+ \@afterheading
+ }
+
+\def\@spart#1{{\parindent \z@ \raggedright
+ \interlinepenalty \@M
+ \huge \bf
+ #1\par}
+ \nobreak
+ \vskip 3ex
+ \@afterheading
+ }
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{\contentsname
+ \@mkboth{\uppercase{\contentsname}}{\uppercase{\contentsname}}}%
+ \@starttoc{toc}}
+
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \addvspace{2.25em plus\p@}%
+ \begingroup
+ \@tempdima 3em
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\large \bf
+ \leavevmode
+ #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak
+ \endgroup}
+
+\def\l@section#1#2{\addpenalty{\@secpenalty}% good place for page break
+ \addvspace{1.0em plus\p@}%
+ \@tempdima 1.5em
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf
+ \leavevmode
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+
+\def\listoffigures{\section*{\listfigurename
+ \@mkboth{\uppercase{\listfigurename}}{\uppercase{\listfigurename}}}%
+ \@starttoc{lof}}
+
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+\def\listoftables{\section*{\listtablename\@mkboth
+ {\uppercase{\listtablename}}{\uppercase{\listtablename}}}%
+ \@starttoc{lot}}
+\let\l@table\l@figure
+
+\def\thebibliography#1{\section*{\refname\@mkboth
+ {\uppercase{\refname}}{\uppercase{\refname}}}\list
+ {\@biblabel{\arabic{enumiv}}}{\settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \def\theenumiv{\arabic{enumiv}}}%
+ \def\newblock{\hskip .11em plus.33em minus.07em}%
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+
+\def\endthebibliography{%
+ \def\@noitemerr{\@warning{Empty `thebibliography' environment}}%
+ \endlist}
+
+\newif\if@restonecol
+
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35\p@\twocolumn[\section*{\indexname}]%
+ \@mkboth{\uppercase{\indexname}}{\uppercase{\indexname}}%
+ \thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus.3\p@\relax\let\item\@idxitem}
+
+\def\@idxitem{\par\hangindent 40\p@}
+
+\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
+
+\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
+
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to1.8em{\hss$\m@th^{\@thefnmark}$}#1}
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{%
+ \vskip 10\p@
+ \setbox\@tempboxa\hbox{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ #1: #2\par
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi}
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename~\thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename~\thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}%
+ \def\@makefnmark{\hbox
+ to\z@{$\m@th^{\@thefnmark}$\hss}}%
+ \if@twocolumn
+ \twocolumn[\@maketitle]%
+ \else \newpage
+ \global\@topnum\z@
+ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em
+ \begin{center}%
+ {\LARGE \@title \par}%
+ \vskip 1.5em
+ {\large
+ \lineskip .5em
+ \begin{tabular}[t]{c}\@author
+ \end{tabular}\par}%
+ \vskip 1em
+ {\large \@date}%
+ \end{center}%
+ \par
+ \vskip 1.5em}
+
+\def\abstract{\if@twocolumn
+\section*{\abstractname}%
+\else \small
+\begin{center}%
+{\bf \abstractname\vspace{-.5em}\vspace{\z@}}%
+\end{center}%
+\quotation
+\fi}
+
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+\mark{{}{}}
+
+\if@twoside
+ \def\ps@headings{\let\@mkboth\markboth
+ \def\@oddfoot{}\def\@evenfoot{}% No feet.
+ \def\@evenhead{\rm \thepage\hfil \sl \leftmark}% Left heading.
+ \def\@oddhead{{\sl \rightmark}\hfil \rm\thepage}% Right heading.
+ \def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}%
+ \def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else
+ \def\ps@headings{\let\@mkboth\markboth
+ \def\@oddfoot{}\def\@evenfoot{}% No feet.
+ \def\@oddhead{{\sl \rightmark}\hfil \rm\thepage}% Heading.
+ \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+ \def\@oddhead{{\sl\rightmark}\hfil \rm\thepage}%
+ \def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark}%
+ \def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@plain
+\pagenumbering{arabic}
+\if@twoside\else\raggedbottom\fi
+\if@twocolumn
+ \@@input twocolum.sty\relax
+\else
+ \onecolumn
+\fi
+
+\if@titlepage
+ \@@input titlepag.sty\relax
+\fi
+
+\endinput
diff --git a/macros/latex209/contrib/xarticle/xarticle.sty b/macros/latex209/contrib/xarticle/xarticle.sty
new file mode 100644
index 0000000000..8ffd5090a9
--- /dev/null
+++ b/macros/latex209/contrib/xarticle/xarticle.sty
@@ -0,0 +1,246 @@
+% article.sty 16-Mar-88
+
+\typeout{Document Style `article' <16 Mar 88>.}
+
+
+%(pxk mod)\def\@ptsize{0} \@namedef{ds@11pt}{\def\@ptsize{1}}
+\def\@ptsize{10} \@namedef{ds@11pt}{\def\@ptsize{11}}
+%(pxk mod)\@namedef{ds@12pt}{\def\@ptsize{2}}
+\@namedef{ds@12pt}{\def\@ptsize{12}}
+\@namedef{ds@9pt}{\def\@ptsize{9}}
+\@namedef{ds@8pt}{\def\@ptsize{8}}
+\@namedef{ds@7pt}{\def\@ptsize{7}}
+\def\ds@twoside{\@twosidetrue \@mparswitchtrue} \def\ds@draft{\overfullrule
+5pt}
+\@options
+%(pxk mod)\input art1\@ptsize.sty\relax
+\input art\@ptsize.sty\relax
+
+
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+
+\def\labelitemi{$\bullet$}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\ast$}
+\def\labelitemiv{$\cdot$}
+
+\def\verse{\let\\=\@centercr
+%pxk mod \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \list{}{\parsep 2ex \itemsep 1.5ex \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
+\let\endverse\endlist
+\def\quotation{\list{}{\listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
+\let\endquotation=\endlist
+\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
+\let\endquote=\endlist
+
+\def\descriptionlabel#1{\hspace\labelsep \bf #1}
+\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+\let\enddescription\endlist
+
+
+\def\theequation{\arabic{equation}}
+
+
+\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \else \newpage \fi \thispagestyle{empty}\c@page\z@}
+\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
+
+\arraycolsep 5pt \tabcolsep 6pt \arrayrulewidth .4pt \doublerulesep 2pt
+\tabbingsep \labelsep
+
+\skip\@mpfootins = \skip\footins
+\fboxsep = 3pt \fboxrule = .4pt
+
+\newcounter{part}
+\newcounter {section}
+\newcounter {subsection}[section]
+\newcounter {subsubsection}[subsection]
+\newcounter {paragraph}[subsubsection]
+\newcounter {subparagraph}[paragraph]
+
+\def\thepart{\Roman{part}} \def\thesection {\arabic{section}}
+\def\thesubsection {\thesection.\arabic{subsection}}
+\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
+\def\theparagraph {\thesubsubsection.\arabic{paragraph}}
+\def\thesubparagraph {\theparagraph.\arabic{subparagraph}}
+
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5}
+\setcounter{tocdepth}{3}
+
+\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
+ \@starttoc{toc}}
+\def\l@part#1#2{\addpenalty{\@secpenalty}
+ \addvspace{2.25em plus 1pt} \begingroup
+ \@tempdima 3em \parindent \z@ \rightskip \@pnumwidth \parfillskip
+-\@pnumwidth
+ {\large \bf \leavevmode #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
+ \nobreak \endgroup}
+\def\l@section#1#2{\addpenalty{\@secpenalty} \addvspace{1.0em plus 1pt}
+\@tempdima 1.5em \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \bf \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil
+\nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \endgroup}
+
+\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
+\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
+\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
+\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
+\def\listoffigures{\section*{List of Figures\@mkboth
+ {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\listoftables{\section*{List of Tables\@mkboth
+ {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
+\let\l@table\l@figure
+
+
+\def\thebibliography#1{\section*{References\@mkboth
+ {REFERENCES}{REFERENCES}}\list
+ {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \usecounter{enumi}}
+ \def\newblock{\hskip .11em plus .33em minus .07em}
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.=1000\relax}
+\let\endthebibliography=\endlist
+
+
+\newif\if@restonecol
+\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+\columnseprule \z@
+\columnsep 35pt\twocolumn[\section*{Index}]
+ \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
+ \parskip\z@ plus .3pt\relax\let\item\@idxitem}
+\def\@idxitem{\par\hangindent 40pt}
+\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
+\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
+\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
+
+\def\footnoterule{\kern-3\p@
+ \hrule width .4\columnwidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 1em\noindent
+ \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
+
+
+\setcounter{topnumber}{2}
+\def\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\def\textfraction{.2}
+\def\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.7}
+\def\dblfloatpagefraction{.5}
+
+\long\def\@makecaption#1#2{
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1: #2}
+ \ifdim \wd\@tempboxa >\hsize #1: #2\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}
+
+
+\newcounter{figure}
+\def\thefigure{\@arabic\c@figure}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{Figure \thefigure}
+\def\figure{\@float{figure}}
+\let\endfigure\end@float
+\@namedef{figure*}{\@dblfloat{figure}}
+\@namedef{endfigure*}{\end@dblfloat}
+\newcounter{table}
+\def\thetable{\@arabic\c@table}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{Table \thetable}
+\def\table{\@float{table}}
+\let\endtable\end@float
+\@namedef{table*}{\@dblfloat{table}}
+\@namedef{endtable*}{\end@dblfloat}
+
+
+\def\maketitle{\par
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\@makefnmark{\hbox
+ to 0pt{$^{\@thefnmark}$\hss}}
+ \if@twocolumn
+ \twocolumn[\@maketitle]
+ \else \newpage
+ \global\@topnum\z@ \@maketitle \fi\thispagestyle{plain}\@thanks
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+\def\@maketitle{\newpage
+ \null
+ \vskip 2em \begin{center}
+ {\LARGE \@title \par} \vskip 1.5em {\large \lineskip .5em
+\begin{tabular}[t]{c}\@author
+ \end{tabular}\par}
+ \vskip 1em {\large \@date} \end{center}
+ \par
+ \vskip 1.5em}
+\def\abstract{\if@twocolumn
+\section*{Abstract}
+\else \small
+\begin{center}
+{\bf Abstract\vspace{-.5em}\vspace{0pt}}
+\end{center}
+\quotation
+\fi}
+\def\endabstract{\if@twocolumn\else\endquotation\fi}
+
+\mark{{}{}}
+
+\if@twoside \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@evenhead{\rm \thepage\hfil \sl
+\leftmark}\def\@oddhead{\hbox{}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}{}}\def\subsectionmark##1{\markright
+{\ifnum \c@secnumdepth >\@ne
+ \thesubsection\hskip 1em\relax \fi ##1}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+\def\@oddfoot{}\def\@evenfoot{}\def\@oddhead{\hbox {}\sl \rightmark \hfil
+\rm\thepage}\def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth
+>\z@
+ \thesection\hskip 1em\relax \fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+\def\@oddhead{\hbox{}\sl\rightmark \hfil
+\rm\thepage}\def\@oddfoot{}\def\@evenhead{\rm \thepage\hfil\sl\leftmark\hbox
+{}}\def\@evenfoot{}\def\sectionmark##1{}\def\subsectionmark##1{}}
+
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+
+\ps@plain \pagenumbering{arabic} \onecolumn \if@twoside\else\raggedbottom\fi
diff --git a/macros/latex209/contrib/zaccone/zaccone.sty b/macros/latex209/contrib/zaccone/zaccone.sty
new file mode 100644
index 0000000000..56413b2211
--- /dev/null
+++ b/macros/latex209/contrib/zaccone/zaccone.sty
@@ -0,0 +1,37 @@
+%%%%%%%%%%%%%%%% cut here %%%%%%%%%%%%%%%% zaccone.sty %%%%%%%%%%%%%%%%
+% zaccone.sty---provide for independent formatting for float captions.
+% The following is a re-definition of the \@caption macro which lets
+% you format your figure captions differently from your table captions, etc.
+% Your .sty file must provide for a meaning for, e.g., \@makefigurecaption, etc.
+% If you do not, the default \@makecaption will be used.
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
+ ext@#1\endcsname}{#1}{\protect\numberline{\csname
+ the#1\endcsname}{\ignorespaces #2}}\begingroup
+ \@parboxrestore
+ \normalsize
+ \expandafter\let\expandafter\@tempa\csname @make#1caption\endcsname
+ \ifx\@tempa\relax\let\@tempa\@makecaption\fi
+ \@tempa{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+ \endgroup}
+%
+% Here is the content of a .sty file containing definitions using the above
+% hook.
+%
+% The following is the same as the \@makecaption in book.sty:
+\long\def\@makefigurecaption#1#2{%
+ \vskip 10pt
+ \setbox\@tempboxa\hbox{#1. #2}%
+ \ifdim \wd\@tempboxa >\hsize #1. #2\par \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil} %
+ \fi
+ }
+%
+% The following is slightly different from the \@makecaption in book.sty:
+\long\def\@maketablecaption#1#2{%
+ \setbox\@tempboxa\hbox{#1. #2}%
+ \ifdim \wd\@tempboxa >\hsize #1. #2\par \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil} %
+ \fi
+ \vskip 10pt
+ }
+
diff --git a/macros/latex209/contrib/zaccone/zaccone.tex b/macros/latex209/contrib/zaccone/zaccone.tex
new file mode 100644
index 0000000000..77ffa6ed38
--- /dev/null
+++ b/macros/latex209/contrib/zaccone/zaccone.tex
@@ -0,0 +1,17 @@
+%%%%%%%%%%%%%%%% cut here %%%%%%%%%%%%%%%% zaccone.tex %%%%%%%%%%%%%%%%
+% zaccone.tex---illustrate how to use zaccone.sty
+\documentstyle{article}
+\documentstyle{zaccone}
+\begin{document}
+
+\begin{figure}[h]
+Content of figure
+\caption{Figure caption}%
+\end{figure}
+
+\begin{table}[h]
+\caption{Table caption}%
+Content of table
+\end{table}
+
+\end{document}
diff --git a/macros/latex209/contrib/zed/zed.sty b/macros/latex209/contrib/zed/zed.sty
new file mode 100644
index 0000000000..3990dab6f2
--- /dev/null
+++ b/macros/latex209/contrib/zed/zed.sty
@@ -0,0 +1,323 @@
+%LaTeX style
+%
+% zed.sty 15 feb 88
+%
+\typeout{Style Option 'zed'. Released 15 February 1988}
+
+%
+% Copyright (c) J.M. Spivey 1988
+%
+% This file contains a collection of macros for typesetting
+% Z specifications. There are four sections.
+%
+% 0. The mathcodes for letters are changed so that they generate text
+% italic instead of math italic. This makes multi-letter identifiers
+% look neater.
+%
+% 1. Environments for putting the maths in boxes.
+%
+% 2. Extra symbol fonts are loaded.
+%
+% 3. Mnemonics for Z symbols are defined. Note that certain plain TeX
+% names are usurped here: \forall is made into a \mathop to give a
+% thin space between it and the following declaration. The same goes
+% for \lambda and \mu, and \exists.
+%
+
+%
+% Changes since 25 aug 87
+%
+% 25 aug 87 Renamed \tad as \also and \also as \zbreak. \def'ed \tad
+% to \also for upward compatibility.
+% Inserted message on loading.
+%
+% 15 sep 87 Revamped special symbol names.
+%
+% 18 sep 87 Changed \z@d to allow Z text in lists.
+%
+% 24 sep 87 Removed assignment to \prevdepth from \endschema
+% --- giving a little more vertical space.
+%
+% 8 oct 87 Removed a spurious space from \schema --- caused
+% empty paragraph between adjacent schemas.
+% Merged left bar code into \axdef. Removed redef
+% of \_.
+%
+% 12 oct 87 Removed \@zedwidth -- use \linewidth instead.
+% Removed a spurious space from \z@dpream.
+%
+% 16 oct 87 Removed def of \par from \z@d.
+%
+% 10 dec 87 Removed spurious space from \gendef
+%
+% 15 jan 88 Split into two parts to allow both AMS and OXSY versions.
+%
+% 15 feb 88 Added gendef* environment
+
+%
+% MATHCODES
+%
+% The mathcodes for the letters A, ..., Z, a, ..., z are changed to
+% generate text italic rather than math italic by default. This makes
+% multi-letter identifiers look better. The mathcode for character c
+% is set to "7000 (variable family) + "400 (text italic) + c.
+%
+% Also, the mathcode for semicolon is set to "8000, so it behaves as an
+% active character in math mode; it is defined to insert a thick space.
+% \semicolon is a semicolon as an ordinary symbol.
+%
+
+\def\@setmcodes#1#2#3{{\count0=#1 \count1=#3
+ \loop \global\mathcode\count0=\count1 \ifnum \count0<#2
+ \advance\count0 by1 \advance\count1 by1 \repeat}}
+
+\@setmcodes{`A}{`Z}{"7441}
+\@setmcodes{`a}{`z}{"7461}
+
+\mathcode`\;="8000 % Makes ; active in math mode
+{\catcode`\;=\active \gdef;{\semicolon\;}}
+\mathchardef\semicolon="003B
+
+%
+% SCHEMAS, Etc.
+%
+% Here are environments for the various sorts of
+% displays which occur in Z documents. All displays are set
+% flush left, indented by \zedindent, by default \leftmargini.
+% schemas, etc, are made just wide enough to give equal margins
+% left and right.
+%
+% Some environments (schema, etc.) must only be split at `\zbreak',
+% and others (argue) may be split arbitrarily. All generate alignment
+% displays, and penalties are used to control page breaks.
+%
+\newdimen\zedindent \zedindent=\leftmargini
+\newdimen\zedleftsep \zedleftsep=1em
+\newdimen\zedtab \zedtab=2em
+\newdimen\zedbar \zedbar=6em
+\newcount\interzedlinepenalty \interzedlinepenalty=10000
+\newcount\preboxpenalty \preboxpenalty=0
+\newif\ifzt@p \zt@pfalse
+
+\def\n@rrow{\advance\linewidth by-\zedindent}
+\def\t@pline#1{\omit \hbox to\linewidth{\strut
+ \leftt@p#1\thinspace\hrulefill}\cr}
+\def\z@dline{\omit \hbox to\linewidth{\hrulefill}\cr}
+\def\z@dpream{\halign to\linewidth\bgroup
+ \strut\z@dleft$\@lign##$\hfil \tabskip=0pt plus1fil%
+ &\hbox to0pt{\hss$\@lign##$}\tabskip=0pt\cr}
+\let\z@dleft=\relax
+
+\def\zbreak{\crcr \noalign{\penalty\interdisplaylinepenalty} \also}
+\def\also{\crcr \noalign{\vskip\jot}}
+\def\tad{\also}
+
+\def\@zed{\ifvmode\@zleavevmode\fi
+ $$\global\zt@ptrue \lineskip=0pt
+ \advance\linewidth by-\zedindent
+ \advance\displayindent by\zedindent
+ \def\\{\crcr}% Must have \def and not \let for nested alignments.
+ \everycr={\noalign{\ifzt@p \global\zt@pfalse
+ \else \penalty\interzedlinepenalty \fi}}
+ \tabskip=0pt}
+\def\end@zed{$$\global\@ignoretrue}
+
+\def\zed{\@zed\z@dpream}
+\def\endzed{\crcr\egroup\end@zed}
+
+\let\[=\zed
+\def\]{\crcr\egroup$$\ignorespaces}
+
+\def\axdef{\let\zbreak=\zbre@k \let\also=\@lso \let\z@dleft=\@zedleft
+ \predisplaypenalty=\preboxpenalty \zed}
+\let\endaxdef=\endzed
+\def\zbre@k{\also \noalign{\penalty\interdisplaylinepenalty \vskip-\jot} \also}
+\def\@lso{\crcr \@but \omit\vrule height\jot \cr \@but}
+\def\@zedleft{\vrule\hskip\zedleftsep}
+\def\@but{\noalign{\nointerlineskip}}
+
+\def\schema#1{\n@rrow\axdef \t@pline{$#1$}}
+\def\endschema{\also \z@dline \endzed}
+
+\def\where{\also \omit \hbox to\zedbar{\hrulefill}\cr \also}
+
+\@namedef{schema*}{\n@rrow\axdef
+ \noalign{\kern-\ht\strutbox} \z@dline \also}
+\expandafter\let\csname endschema*\endcsname=\endschema
+
+\def\gendef#1{\let\leftt@p=\@leftt@p
+ \setbox0=\hbox{$[#1]$}\setbox1=\null \wd1=\wd0
+ \n@rrow\axdef \t@pline{\box0}%
+ \noalign{\kern-\baselineskip\kern-\doublerulesep \nobreak}%
+ \t@pline{\box1} \noalign{\kern\doublerulesep \nobreak}}
+\let\endgendef=\endschema
+
+\@namedef{gendef*}{\n@rrow\axdef
+ \noalign{\kern-\ht\strutbox} \z@dline
+ \noalign{\kern-\baselineskip\kern-\doublerulesep \nobreak}
+ \z@dline \noalign{\kern\doublerulesep \nobreak} \also}
+\expandafter\let\csname endgendef*\endcsname=\endschema
+
+% `infrule' environment: used for inference rules. The horizontal line is
+% generated by \derive: an optional argument contains the side-conditions
+% of the rule.
+\def\infrule{\@zed \halign\bgroup
+ \strut\quad$\@lign##$\quad\hfil&\quad\@lign##\hfil\cr}
+\let\endinfrule=\endzed
+
+\def\derive{\crcr\also\@but\omit\hrulefill\@ifnextchar[{\@xderive}{\@yderive}}
+\def\@xderive[#1]{&$\smash{\lower 0.5ex\hbox{$[\;#1\;]$}}$\cr\also\@but}
+\def\@yderive{\cr\also\@but}
+
+% `argue' environment: used for algebraic proofs expressed as extended
+% equations. Generates an alignment display, which may be split across
+% pages.
+\def\argue{\@zed \interzedlinepenalty=\interdisplaylinepenalty
+ \openup 1\jot \z@dpream \noalign{\vskip-\jot}}
+\let\endargue=\endzed
+
+% `syntax' environment: used for syntax rules - even (once!) for VDM.
+\def\syntax{\@zed \halign\bgroup
+ \strut$\@lign##$\hfil &\hfil$\@lign{}##{}$\hfil
+ &$\@lign##$\hfil &\quad\@lign-- ##\hfil\cr}
+\let\endsyntax=\endzed
+
+\def\@leftt@p{\vrule height0.4pt\hbox to\zedleftsep{\hrulefill\thinspace}}
+\let\leftt@p=\@leftt@p
+\def\leftschemas{\let\leftt@p=\relax}
+
+\def\t#1{\hskip #1\zedtab}
+\def\flushr#1{\crcr&#1\quad\cr}
+
+% \@zleavevmode -- Enter horizontal mode, taking account of possible
+% interaction with lists and section heads:
+% 1 After a \item, use \indent to get the label (this
+% fails to run in even short labels).
+% 2 After a run-in heading, use \indent.
+% 3 After an ordinary heading, throw away the \everypar
+% tokens, reset \@nobreak, and use \noindent with \parskip
+% zero.
+% 4 Otherwise, use \noindent with \parskip zero
+\def\@zleavevmode{\if@inlabel\indent\else\if@noskipsec\indent\else
+ \if@nobreak\global\@nobreakfalse\everypar={}\fi
+ {\parskip=0pt\noindent}\fi\fi}
+
+%
+% FONTS
+%
+% The AMS extra symbol fonts are loaded.
+%
+
+\def\@fontname{\ifcase\@ptsize m10 scaled \@m%
+\or m10 scaled \magstephalf%
+\or m10 scaled \magstep1%
+\else m\@ptsize\fi}
+\font\msx=msx\@fontname % Note: sometimes called euxm10
+\font\msy=msy\@fontname % Note: sometimes called euym10
+
+\newfam\msxfam \textfont\msxfam=\msx
+\newfam\msyfam \textfont\msyfam=\msy
+
+\def\@famletter#1{\ifcase #1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
+ 8\or 9\or A\or B\or C\or D\or E\or F\fi}
+
+\edef\@fx{\@famletter\msxfam}
+\edef\@fy{\@famletter\msyfam}
+
+\def\bbold{\fam\msyfam \msy}
+
+%
+% Z SYMBOLS
+%
+
+\def\token#1{\hbox{`$#1$'}} % makes a quoted expression in mathematical text
+
+\def\report#1{\hbox{`{\tt #1}'}} % used for error messages in Z specs
+
+% \@myop makes an operator, with a strut to defeat TeX's vertical adjustment.
+\def\@myop#1{\mathop{\mathstrut{#1}}\nolimits}
+
+% This underscore doesn't have the little kern --- you get an italic
+% correction anyway in math mode.
+\def\_{\leavevmode \vbox{\hrule width0.5em}}
+
+% Save \q as \xq for quantifiers q.
+\let\xforall=\forall
+\let\xexists=\exists
+\let\xlambda=\lambda
+\let\xmu=\mu
+
+% \p and \f make arrows with 1 and 2 crossings resp.
+\def\p#1{\mathrel{\ooalign{\hfil$\mapstochar\mkern 5mu$\hfil\cr$#1$}}}
+\def\f#1{\mathrel{\ooalign{\hfil
+ $\mapstochar\mkern 3mu\mapstochar\mkern 5mu$\hfil\cr$#1$}}}
+
+\let\@mc=\mathchardef
+
+% In the same order as the Z reference manual ...
+
+% Chapter 1
+\def \lblot {\langle\!\left|}
+\def \rblot {\right|\!\rangle}
+
+% Chapter 2
+\def \defs {\mathrel{\widehat=}}
+\def \power {\@myop{\bbold P}}
+\let \cross \times
+\def \lambda {\@myop{\xlambda}}
+\def \mu {\@myop{\xmu}}
+\def \lbag {[\![}
+\def \rbag {]\!]}
+\def \lnot {\neg\;}
+\def \land {\mathrel{\wedge}}
+\def \lor {\mathrel{\vee}}
+\let \implies \Rightarrow
+\let \iff \Leftrightarrow
+\def \forall {\@myop{\xforall}}
+\def \exists {\@myop{\xexists}}
+\def \spot {\mathrel{\bullet}}
+\def \hide {\mathrel{\backslash}}
+\@mc \project "3\@fx16
+\def \pre {\@myop{\rm pre}}
+\def \semi {\mathrel{\comp}}
+\def \ldata {\langle\!\langle}
+\def \rdata {\rangle\!\rangle}
+\def \shows {\;\vdash\;}
+
+% Chapter 3
+\@mc \empty "0\@fy3F
+\let \rel \leftrightarrow
+\def \dom {\@myop{\rm dom}}
+\def \ran {\@myop{\rm ran}}
+\def \id {\@myop{\rm id}}
+\def \comp {\mathbin{\raise 0.6ex\hbox{\oalign{\hfil$\scriptscriptstyle
+ \rm o$\hfil\cr\hfil$\scriptscriptstyle\rm 9$\hfil}}}}
+\@mc \dres "2\@fx43
+\@mc \rres "2\@fx42
+\def \ndres {\mathbin{\rlap{$-$}{\dres}}}
+\def \nrres {\mathbin{\rlap{$-$}{\rres}}}
+\def \limg {(\!\left|}
+\def \rimg {\right|\!)}
+\def \pfun {\p\fun}
+\let \fun \rightarrow
+\def \pinj {\p\inj}
+\@mc \inj "3\@fx1A
+\def \psurj {\p\surj}
+\def \surj {\mathrel{\ooalign{$\fun$\hfil\cr$\mkern4mu\fun$}}}
+\def \bij {\mathrel{\ooalign{$\inj$\hfil\cr$\mkern5mu\fun$}}}
+\def \nat {{\bbold N}}
+\def \num {{\bbold Z}}
+\def \div {\mathbin{\rm div}}
+\def \mod {\mathbin{\rm mod}}
+\def \upto {\mathbin{\ldotp\ldotp}}
+\def \finset {\@myop{\bbold F}}
+\def \ffun {\f\fun}
+\def \finj {\f\inj}
+\def \seq {\@myop{\rm seq}}
+\def \cat {\mathbin{\raise 0.8ex\hbox{$\mathchar"2\@fx61$}}}
+\@mc \filter "2\@fx16
+\def \dcat {\@myop{\cat/}}
+\def \disjoint {{\rm disjoint}\;}
+\def \partition {\mathrel{\rm partition}}
+\def \bag {\@myop{\rm bag}}
+\def \inbag {\mathrel{\rm in}}
diff --git a/macros/latex209/contrib/zed/zmacros.tex b/macros/latex209/contrib/zed/zmacros.tex
new file mode 100644
index 0000000000..5e6f0b0d24
--- /dev/null
+++ b/macros/latex209/contrib/zed/zmacros.tex
@@ -0,0 +1,397 @@
+% ZMACROS.TEX Mike Spivey July 1987
+\documentstyle[palatino,11pt,zed]{article}
+\begin{document}
+\title{Printing Z with \LaTeX}
+\author{Mike Spivey}
+\date{15th September 1987}
+\maketitle
+
+\section{Introduction}
+
+This note describes a small package of \LaTeX\ macros for printing
+Z specifications.
+I put these together specifically for printing my book on Z semantics,
+so the package only provides features I needed for that, and your
+favourite Z constructs may be missing.
+On the other hand, I've put quite a lot of work into getting
+the constructs which {\em are\/} there to look right, at
+least to my eyes. If the package doesn't do what you want,
+at least it gives you something to start from.
+The package does several related things for you:
+\begin{enumerate}
+\item It loads the two fonts of extra symbols from the American
+ Mathematical Society and defines mnemonics for the Z symbols
+ they contain.
+\item It defines macros to fudge some Z symbols (e.g. $\pinj$) which
+ don't appear in any of our fonts.
+\item It fixes the way \TeX\ sets letters in mathematical formulas so
+ that multi-character identifiers look better.
+\item It provides ways to set the various brands of `boxed mathematics'
+ which appear in Z specifications.
+\end{enumerate}
+
+\section{Loading the macros}
+
+The package is kept in a file {\tt zed.sty}, so to load it at
+the start of a \LaTeX\ run, you just begin with
+\begin{quote}
+\begin{verbatim}
+\documentstyle[11pt,zed]{article}
+\end{verbatim}
+\end{quote}
+or something like it.
+At PRG, the package only works with the eleven-point base size at
+present: the extra-symbols fonts it loads are only available at
+this size on the LBP--10.
+
+\section{The care and feeding of schemas}
+
+To print the schema
+\begin{schema}{PhoneDB}
+ known: \power NAME \\
+ phone: NAME \pfun PHONE
+\where
+ known = \dom phone
+\end{schema}
+you just say
+\begin{quote}
+\begin{verbatim}
+\begin{schema}{PhoneDB}
+ known: \power NAME \\
+ phone: NAME \pfun PHONE
+\where
+ known = \dom phone
+\end{schema}
+\end{verbatim}
+\end{quote}
+What could be simpler?
+If you want a schema with no name, just a horizontal rule at the top,
+use the \verb|schema*| environment instead.
+In fact, here is an example:
+% \begin{schema*}
+% known: \power NAME \\
+% phone: NAME \pfun PHONE
+% \where
+% known = \dom phone
+% \end{schema*}
+If you like the name set flush left, you can use the \verb|\leftschemas|
+declaration to get the following effect:
+\begin{leftschemas}
+\begin{schema}{PhoneDB}
+ known: \power NAME \\
+ phone: NAME \pfun PHONE
+\where
+ known = \dom phone
+\end{schema}
+\end{leftschemas}
+As well as these, there's \verb|axdef|
+for axiomatic definitions: to print
+\begin{axdef}
+ policy: \power_1 RESOURCE \fun RESOURCE
+\where
+ \forall S: \power_1 RESOURCE \spot \\
+\t1 policy(S) \in S,
+\end{axdef}
+you say
+\begin{quote}
+\begin{verbatim}
+\begin{axdef}
+ policy: \power_1 RESOURCE \fun RESOURCE
+\where
+ \forall S: \power_1 RESOURCE \spot \\
+\t1 policy(S) \in S,
+\end{axdef}
+\end{verbatim}
+\end{quote}
+The strange hint \verb|\t1| in this example makes the corresponding
+line in the output have one helping of indentation.
+As things get more nested, you can say \verb|\t2|, \verb|\t3|, and so on.
+But if you should ever get beyond \verb|t9|, you'll need to use braces
+around the argument: \verb|\t{10}|, and you'd better look for some way
+to simplify your specification!
+The syntax of these little tab marks is a bit strange, I'm afraid,
+but I find them more convenient than other possibilities. They're short,
+and they don't get longer as the tabbing gets deeper, within reason,
+so they can be tucked in neatly on the left, well away from the
+maths.
+The size of `helping' you get with \verb|\t| is a parameter
+\verb|\zedindent|, and the default is 2em.
+
+Two other things to notice here are the little space between the
+$\forall$ and the following $S$, and the use of \verb|\spot| for
+the bullet $\spot$.
+These macros produce symbols of the right type for \TeX's spacing
+rules to insert spaces automatically.
+
+For generic definitions, there's the \verb|gendef| environment:
+you can get a neat double-topped box like
+\begin{gendef}{I,X,Y}
+ map: (X \pfun Y) \fun (I \pfun X) \fun (I \pfun Y)
+\where
+ map\,f = \lambda s: I \pfun X \mid
+ \ran s \subseteq \dom f \spot f \circ s
+\end{gendef}
+by typing
+\begin{quote}
+\begin{verbatim}
+\begin{gendef}{I,X,Y}
+ map: (X \pfun Y) \fun (I \pfun X) \fun (I \pfun Y)
+\where
+ map\,f = \lambda s: I \pfun X \mid
+ \ran s \subseteq \dom f \spot f \circ s
+\end{gendef}
+\end{verbatim}
+\end{quote}
+You should take note of the thin space I've inserted between $map$ and $f$
+in this example: if this is omitted, the input \verb|map f| gives
+$map f$, because \TeX\ ignores spaces in math mode.
+There's also a \verb|gendef*| environment for generic definitions with no
+parameters.
+
+If a schema or other box contains more than one predicate below the
+line, it often looks better to add a tiny vertical space between
+them, as in this example:
+\begin{schema}{AddPhone}
+ \Delta PhoneDB \\
+ name?: NAME \\
+ number?: PHONE
+\where
+ name? \notin known
+\also
+ phone' = phone \oplus \{name? \mapsto number?\}
+\end{schema}
+This is done with the command \verb|\also|, which behaves syntactically
+like \verb|\where|:
+\begin{quote}
+\begin{verbatim}
+\begin{schema}{AddPhone}
+ \Delta PhoneDB \\
+ name?: NAME \\
+ number?: PHONE
+\where
+ name? \notin known
+\also
+ phone' = phone \oplus \{name? \mapsto number?\}
+\end{schema}
+\end{verbatim}
+\end{quote}
+Note that \verb|\also| is provided {\em instead\/} of the
+optional argument to \verb|\\|
+which \LaTeX\ provides in other environments.
+
+\section{Other mathematical displays}
+
+The \verb|zed| environment can be used to set multi-line formulas without
+an enclosing box: it is useful for given-set declarations, theorems, and the
+miscellaneous bits of mathematics that don't come in a box:
+\begin{zed}
+ \forall n: \nat \spot \\
+\t1 n+n \in even.
+\end{zed}
+is printed from the input
+\pagebreak[3]
+\begin{quote}
+\begin{verbatim}
+\begin{zed}
+ \forall n: \nat \spot \\
+\t1 n+n \in even.
+\end{zed}
+\end{verbatim}
+\end{quote}
+The formula \verb|\begin{zed} ... \end{zed}| may be abbreviated to
+\verb|\[ ... \]|; the \verb|zed| environment is a generalization of the
+\verb|displaymath| environment of \LaTeX, so this redefinition of
+commands is fairly benign. Notice that the maths is set flush left on the
+same indentation as schemas and their friends.
+Here too you can use \verb|\also| for a little extra space
+between lines.
+
+For algebraic-style proofs, there is the \verb|argue| environment.
+This is like the \verb|zed| environment, but the separation between
+lines is increased a little, and page breaks may occur between lines.
+The intended use is for arguments like this:
+\begin{argue}
+ rev(append(cons(x,s),t)) \\
+\t1 = rev(cons(x,append(s,t))) \\
+\t1 = append(rev(append(s,t)),cons(x,nil)) \\
+\t1 = append(append(rev(t),rev(s)),cons(x,nil))
+ \quad \hbox{by hypothesis} \\
+\t1 = append(rev(t),append(rev(s),cons(x,nil))) \\
+\t1 = append(rev(t),rev(cons(x,s))).
+\end{argue}
+Here, again, is the input:
+\begin{quote}
+\begin{verbatim}
+\begin{argue}
+ rev(append(cons(x,s),t)) \\
+\t1 = rev(cons(x,append(s,t))) \\
+\t1 = append(rev(append(s,t)),cons(x,nil)) \\
+\t1 = append(append(rev(t),rev(s)),cons(x,nil))
+ \quad \hbox{by hypothesis} \\
+\t1 = append(rev(t),append(rev(s),cons(x,nil))) \\
+\t1 = append(rev(t),rev(cons(x,s))).
+\end{argue}
+\end{verbatim}
+\end{quote}
+When the left-hand side is long, I find this style better than the
+\LaTeX\ \verb|eqnarray| style, which wastes a lot of space.
+
+Another brand of box is the inference rule; the rule
+\begin{infrule}
+ \Gamma \shows P
+\derive[x \notin freevars(\Gamma)]
+ \Gamma \shows \forall x \spot P
+\end{infrule}
+comes from the input
+\begin{quote}
+\begin{verbatim}
+\begin{infrule}
+ \Gamma \shows P
+\derive[x \notin freevars(\Gamma)]
+ \Gamma \shows \forall x \spot P
+\end{infrule}
+\end{verbatim}
+\end{quote}
+Note the optional argument to \verb|\derive|: it is a side-condition of
+the rule.
+
+Finally, there's the \verb|syntax| environment, used for
+making displays like this:
+\begin{syntax}
+ EXPR & ::= & IDENT & identifier \\
+ & | & EXPR\;EXPR & application \\
+ & | & \lambda IDENT \spot EXPR
+ & lambda-abstraction.
+\end{syntax}
+from input like this:
+\begin{quote}
+\begin{verbatim}
+\begin{syntax}
+ EXPR & ::= & IDENT & identifier \\
+ & | & EXPR\;EXPR & application \\
+ & | & \lambda IDENT \spot EXPR
+ & lambda-abstraction.
+\end{syntax}
+\end{verbatim}
+\end{quote}
+This kind of thing is useful when you're describing a language,
+and it can also be used for data-type definitions.
+I've even---time for a confession---used it once for a fragment
+of VDM\@.
+The final column is optional:
+just omit the third \verb|&| if you don't want it.
+
+\section{Inside the boxes}
+
+\makeatletter
+\def\nota{\interzedlinepenalty=\interdisplaylinepenalty
+ \@zed\halign\bgroup\strut\hbox to3em{$##$\hfil}\tabskip=0pt&##\hfil\cr}
+\let\endnota=\endzed
+\makeatother
+
+Now for the details of what you can put inside the boxes.
+The first thing to notice is that multi-letter identifiers look
+better than they do with vanilla \LaTeX: instead of
+$\mit specifications$, you get $specifications$.
+The letters haven't been spread apart, and the ligature $fi$ has been
+used.
+
+Almost all of the mathematical symbols of \LaTeX\ can be used, plus
+a few extra ones listed below.
+The mnemonics I've chosen may seem a little mad, but that's life.
+The \LaTeX\ symbols you can't use are the ones whose
+names have been redefined:
+mostly these are the same symbol, but with the spacing fixed for
+use in Z specifications.
+First, there are some new arrows, and some new names for old ones:
+\begin{nota}
+ \rel & \verb|\rel| \\
+ \fun & \verb|\fun| \\
+ \inj & \verb|\inj| \\
+ \surj & \verb|\surj| \\
+ \bij & \verb|\bij| \\
+ \implies & \verb|\implies| \\
+ \iff & \verb|\iff|
+\end{nota}
+There are also `accents' \verb|\p| and \verb|\f| which put one and two
+crossings repectively over the following arrow.
+So \verb|\p\fun| gives $\p\fun$ and (if you insist)
+\verb|\f\bij| gives $\f\bij$.
+There are also some new binary operations:
+\begin{nota}
+ \comp & \verb|\comp| \\
+ \dres & \verb|\dres| \\
+ \rres & \verb|\rres| \\
+ \ndres & \verb|\ndres| \\
+ \nrres & \verb|\nrres| \\
+ \cross & \verb|\cross| \\
+ \filter & \verb|\filter| \\
+ \upto & \verb|\upto| \\
+ \div & \verb|\div| \\
+ \mod & \verb|\mod| \\
+ \cat & \verb|\cat|
+\end{nota}
+and some new operators:
+\begin{nota}
+ \dom & \verb|\dom| \\
+ \ran & \verb|\ran| \\
+ \pre & \verb|\pre| \\
+ \id & \verb|\id| \\
+ \seq & \verb|\seq| \\
+ \bag & \verb|\bag| \\
+ \forall & \verb|\forall| \\
+ \exists & \verb|\exists| \\
+ \lambda & \verb|\lambda| \\
+ \mu & \verb|\mu| \\
+ \power & \verb|\power| \\
+ \finset & \verb|\finset| \\
+ \dcat & \verb|\dcat|
+\end{nota}
+The unique quantifier $\exists_1$ can be typeset as \verb|\exists_1|.
+There are a couple of new ordinary symbols:
+\begin{nota}
+ \empty & \verb|\empty| \\
+ \nat & \verb|\nat| \\
+ \num & \verb|\num|
+\end{nota}
+as well as a few fancy brackets:
+\begin{nota}
+ \limg\;\rimg & \verb|\limg \rimg| \\
+ \lbag\;\rbag & \verb|\lbag \rbag| \\
+ \ldata\;\rdata & \verb|\ldata \rdata| \\
+ \lblot\;\rblot & \verb|\lblot \rblot|
+\end{nota}
+Finally, the following bits and pieces come with the right spacing for Z:
+\begin{nota}
+ \land & \verb|\land| \\
+ \lor & \verb|\lor| \\
+ \lnot & \verb|\lnot| \\
+ \widehat= & \verb|\defs| \\
+ \hide & \verb|\hide| \\
+ \project & \verb|\project| \\
+ \semi & \verb|\semi| \\
+ \vdash & \verb|\shows| \\
+ \spot & \verb|\spot|
+\end{nota}
+Some of these are duplicates of binary operators listed above, but with
+names more appropriate to their use in schema-expressions; there is
+also a little more spacing in these variants.
+And that's about it.
+
+\section{Style parameters}
+
+\begin{description}
+\item[\tt\string\zedindent] The indentation for mathematical text.
+ By default, this is the same as \verb|\leftmargini|, the indentation
+ used for list environments.
+\item[\tt\string\zedleftsep] The space between the vertical line on the left
+ of schemas, etc., and the maths inside. The default is 1em.
+\item[\tt\string\zedtab] The unit of indentation used by \verb|\t|. The default
+ is 2em.
+\item[\tt\string\zedbar] The length of the horizontal bar in the middle of a
+ schema. The default is 6em.
+\item[\tt\string\leftschemas] A declaration which makes schema names be
+ set flush left. Use it in the document preamble.
+\end{description}
+
+\end{document}
diff --git a/macros/latex209/contrib/zero/zero-README b/macros/latex209/contrib/zero/zero-README
new file mode 100644
index 0000000000..f4953db893
--- /dev/null
+++ b/macros/latex209/contrib/zero/zero-README
@@ -0,0 +1,25 @@
+README file accompanying "zero.sty" and "zero-test.tex"
+
+At the Department of Math and CS of Eindhoven Univ of Technology we
+(especially some of the CS people) have developed the habit to start
+numbering at zero. To support this habit, I wrote a LaTeX style file
+"zero.sty" that makes numbering start at zero instead of one, whenever
+appropriate. It is, for instance, not appropriate for things numbered
+with styles other than arabic, such as items in an enumerated
+list at the third level: these are numbered by roman numerals.
+
+The style option "zero" can also be used to make any counter start
+numbering at any other value of your choice. The main implementation
+problem is that some counters are reset by LaTeX whenever some other
+counter steps. For instance, this is the case with subsection
+numbers: the subsection counter gets reset whenever the section
+counter is incremented. The value to which LaTeX resets such a counter
+is "hardwired" into the code in several places. The style option
+"zero" provides a neat solution.
+
+Read the USAGE information included in the LaTeX source code of
+"zero.sty" for more details. Also included is a LaTeX test file
+"zero-test.tex" to show you what the effect is of using option "zero".
+You may want to change some of the options in the test file, for
+instance, removing "a4wide".
+
diff --git a/macros/latex209/contrib/zero/zero-test.tex b/macros/latex209/contrib/zero/zero-test.tex
new file mode 100644
index 0000000000..afc3d58270
--- /dev/null
+++ b/macros/latex209/contrib/zero/zero-test.tex
@@ -0,0 +1,64 @@
+\documentstyle[12pt,a4wide,fleqn,zero]{article}
+
+\title {Test Document for\\ Documentstyle Option {\tt zero}}
+\author {{\em Tom Verhoeff\/}\thanks{Department of Mathematics and
+ Computing Science, Eindhoven University of Technology, NL.}}
+\date {19 June 1991}
+
+\begin{document}
+\maketitle
+
+\part {Verify Initialization and Resetting}
+Text with first footnote\footnote{First footnote in text.}\ldots
+\section {First Section}
+Text with first reference \cite{Dowland}\ldots
+\begin{figure}[h]
+\caption {First figure}
+\end{figure}
+\begin{table}[h]
+\caption {First table}
+\end{table}
+\subsection {First subsection}
+Text\ldots
+\begin{enumerate}
+\item First enumerated item at level i.
+\item
+ \begin{enumerate}
+ \item First enumerated item at level ii.
+ \item
+ \begin{enumerate}
+ \item First enumerated item at level iii.
+ \item
+ \begin{enumerate}
+ \item First enumerated item at level iv.
+ \item Second enumerated item at level iv.
+ \end{enumerate}
+ \end{enumerate}
+ \end{enumerate}
+\end{enumerate}
+\subsubsection {First subsubsection}
+Text\ldots
+\begin{center}
+\fbox{\begin{minipage}{1.5in}
+A minipage with its first footnote\footnote{First footnote in a minipage.}\ldots
+\end{minipage}}
+\end{center}
+\paragraph {First paragraph}
+Text\ldots
+\begin{equation}
+ 1^{st} \mbox{ displayed equation}.
+\end{equation}
+\subparagraph {First subparagraph}
+Text\ldots
+
+\appendix
+\part {First Part in Appendix}
+\section {First Section in Appendix}
+\subsection {First subsection in appendix}
+\subsubsection {First subsubsection in appendix}
+
+\begin{thebibliography}{9}
+\bibitem{Dowland}Iohn Dowland. {\em First Booke of Ayres}. 1597.
+\end{thebibliography}
+
+\end{document}
diff --git a/macros/latex209/contrib/zero/zero.sty b/macros/latex209/contrib/zero/zero.sty
new file mode 100644
index 0000000000..580f9a74bb
--- /dev/null
+++ b/macros/latex209/contrib/zero/zero.sty
@@ -0,0 +1,112 @@
+% LaTeX documentstyle option to start numbering at zero (where appropriate)
+%
+% Tom Verhoeff
+% Department of Mathematics and Computing Science
+% Eindhoven University of Technology
+% The Netherlands
+% E-mail: <wstomv@win.tue.nl>
+%
+\def\filedate{19 June 1991}
+%
+\typeout{Documentstyle option `zero': start numbering at zero. <\filedate>}
+%
+% USAGE
+%
+% Include `zero' in the list of documentstyle options.
+% This initializes all existing counters such that numbering, where appropriate,
+% starts at zero (instead of one). Numbering still starts at one for
+% (i) footnotes on the title page,
+% (ii) parts,
+% (iii) footnotes in minipages,
+% (iv) enumerated lists nested two levels or deeper,
+% since these use a non-arabic numbering format.
+% Furthermore, newly defined counters will be initialized such that numbering
+% starts at zero. When you change the numbering format of a counter to
+% non-arabic, it is advisable to change the initial value to one as well.
+%
+% To change the initial value of counter <cntr> use
+% \initcounter{<cntr>}{<value>}
+% This also resets the counter to its (new) initial value.
+% For example, page numbering can be start at one by \initcounter{page}{1}.
+% N.B. All counters, except page for page numbering, have a value ONE LESS
+% than the next number produced. So to start numbering at one for enumerated
+% lists at the outermost level use \initcounter{enumi}{0}.
+%
+% To reset counter <cntr> to its (current) initial value use
+% \resetcounter{<cntr>}
+%
+% IMPLEMENTATION DETAILS
+%
+% New macros: \initcounter, \resetcounter
+%
+% The macro \initcounter{<cntr>}{<value>} records <value> as the initial
+% value of the numbering counter <cntr>, and resets <cntr>.
+% The initial value of <cntr> is stored in the control sequence \ci@<cntr>.
+% The macro \resetcounter{<cntr>} resets <cntr> to its initial value \ci@<cntr>.
+%
+% The macros \@stpelt, \@definecounter, \usercounter, \pagenumbering,
+% \maketitle, and \@iminipage have been redefined to use \initcounter or
+% \resetcounter.
+%
+% The macro \appendix needs no revision, even though it sets the counters
+% (chapter,) section and subsection to 0. The section counter (cq. chapter
+% counter for report and book) is printed in Alpha and consequently should
+% indeed be reset to 0. The subsection counter (and section counter for
+% report and book) is reset appropriately whenever the section (cq. chapter)
+% counter is stepped. Only if sectioning is done incorrectly,
+% e.g. by starting the appendix with a subsection, then numbering may also
+% be done incorrectly.
+%
+\def\resetcounter#1{\setcounter{#1}{\csname ci@#1\endcsname}}
+\def\initcounter#1#2{% set initial value for counter
+ \global\expandafter\let\csname ci@#1\endcsname#2\relax
+ \resetcounter{#1}}
+\let\@stpelt\resetcounter
+\def\@definecounter#1{%
+ \expandafter\newcount\csname c@#1\endcsname%
+ \initcounter{#1}{\m@ne}%
+ \expandafter\gdef\csname cl@#1\endcsname{}%
+ \@addtoreset{#1}{@ckpt}%
+ \expandafter\gdef\csname p@#1\endcsname{}%
+ \expandafter\gdef\csname the#1\endcsname{\arabic{#1}}}
+\def\usecounter#1{\@nmbrlisttrue\def\@listctr{#1}\resetcounter{#1}}
+\def\pagenumbering#1{\resetcounter{page}%
+ \gdef\thepage{\csname @#1\endcsname\c@page}}
+\let\@ldmaketitle=\maketitle% save old \maketitle macro
+\def\maketitle{%
+ \setcounter{footnote}{0}% because \thanks uses symbolic footnote marks
+ \@ldmaketitle%
+ \resetcounter{footnote}}
+\def\@iminipage[#1]#2{\leavevmode \@pboxswfalse
+ \if #1b\vbox
+ \else \if #1t\vtop
+ \else \ifmmode \vcenter
+ \else \@pboxswtrue $\vcenter
+ \fi
+ \fi
+ \fi\bgroup
+ \hsize #2\textwidth\hsize \columnwidth\hsize
+ \@parboxrestore
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\resetcounter{mpfootnote}
+ \let\@footnotetext\@mpfootnotetext
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \@minipagerestore\global\@minipagetrue %% \global added 24 May 89
+ \everypar{\global\@minipagefalse\everypar{}}}
+
+%
+% Reinitialize already existing counters to -1 so as to start counting at 0,
+% EXCEPT FOR:
+% * page numbers, because the page count has no lag. Reinitialized at 0.
+% * part numbers, minipage footnote numbers, and enumerated environments
+% nested 2 or deeper, because they do not use the arabic format.
+% Reinitialized at 0.
+%
+{\def\@elt#1{\initcounter{#1}{\m@ne}}\cl@@ckpt}
+\initcounter{page}{\z@}
+\initcounter{part}{\z@}
+\initcounter{mpfootnote}{\z@}
+\initcounter{enumii}{\z@}
+\initcounter{enumiii}{\z@}
+\initcounter{enumiv}{\z@}
+%
+% End of file zero.sty
diff --git a/macros/latex209/distribs/README.obsolete b/macros/latex209/distribs/README.obsolete
new file mode 100644
index 0000000000..a34955cf23
--- /dev/null
+++ b/macros/latex209/distribs/README.obsolete
@@ -0,0 +1,13 @@
+
+ IMPORTANT NOTICE
+
+ The current version of LaTeX is LaTeX2e, to be found in
+
+ macros/latex
+
+ LaTeX 2.09, the old (before 1994) version of LaTeX has been
+ retracted and therefore moved to
+
+ obsolete/macros/latex209/distribs
+
+ Your CTAN and LaTeX Teams